[
  {
    "path": ".circleci/config.yml",
    "content": "aliases:\n  - &node_executor\n      executor:\n        name: node/node\n        node-version: \"22.13.0\"\n\nversion: 2.1\n\norbs:\n  ci: bigcommerce/internal@volatile\n  node: bigcommerce/internal-node@volatile\n  security: bigcommerce/internal-security@volatile\n\njobs:\n  test-packages:\n    <<: *node_executor\n    resource_class: medium+\n    steps:\n      - ci/pre-setup\n      - node/npm-install\n      - run:\n          name: \"Run unit tests for packages\"\n          command: npm run test:others\n\n  test-core:\n    <<: *node_executor\n    parallelism: 2\n    resource_class: medium+\n    steps:\n      - ci/pre-setup\n      - node/npm-install\n      - run: mkdir ~/junit\n      - run:\n          name: \"Run unit tests for core package\"\n          command: |\n            TEST=$(circleci tests glob \"packages/core/**/*.spec.ts\" | circleci tests split --split-by=timings)\n            npx nx run core:generate\n            npm test $TEST -- --runInBand\n      - run:\n          command: cp junit.xml ~/junit/\n          when: always\n      - store_test_results:\n          path: ~/junit\n      - store_artifacts:\n          path: ~/junit\n\n  test:\n    <<: *node_executor\n    resource_class: medium+\n    steps:\n      - ci/pre-setup\n      - node/npm-install\n      - run:\n          name: \"Run unit tests\"\n          command: npm run test:series -- --coverage\n    \n  lint:\n    <<: *node_executor\n    resource_class: large\n    steps:\n      - ci/pre-setup\n      - node/npm-install\n      - run:\n          name: \"Run lint\"\n          command: npm run lint\n\n  build:\n    <<: *node_executor\n    resource_class: xlarge\n    steps:\n      - ci/pre-setup\n      - node/npm-install\n      - run:\n          name: \"Build distribution files\"\n          command: npm run build && npm run docs\n      - persist_to_workspace:\n          root: .\n          paths:\n            - dist\n            - docs\n\n  npm_release:\n    <<: *node_executor\n    resource_class: medium+\n    steps:\n      - ci/pre-setup\n      - node/npm-install\n      - run:\n          name: \"Configure Git user\"\n          command: |\n            git config user.email $GIT_USER_EMAIL\n            git config user.name $GIT_USER_NAME\n      - run:\n          name: \"Remove old release files\"\n          command: rm -rf dist docs\n      - attach_workspace:\n          at: .\n      - run:\n          name: \"Create and tag new release\"\n          command: npm run release:version\n      - run:\n          name: \"Push commits and tag to GitHub\"\n          command: |\n            git push --follow-tags origin $CIRCLE_BRANCH\n      - run:\n          name: \"Publish release to NPM\"\n          command: |\n            echo \"//registry.npmjs.org/:_authToken=$NPM_AUTH_TOKEN\" > .npmrc\n            npm publish\n\n  build_cdn:\n    <<: *node_executor\n    resource_class: xlarge\n    steps:\n      - ci/pre-setup\n      - node/npm-install\n      - run:\n          name: Build artifact for CDN deployment\n          command: npm run build-cdn\n      - persist_to_workspace:\n          root: ~/repo\n          paths:\n            - dist-cdn\n      - ci/notify-failure\n\nworkflows:\n  version: 2\n\n  default:\n    jobs:\n      - test-core\n      - test-packages\n      - lint\n      - build\n\n      # Only build and push CDN artifact when commits are merged to canonical repo\n      - build_cdn:\n          context: \"GCR + Artifact Bucket Access\"\n          filters:\n            branches:\n              ignore: /pull\\/[0-9]+/\n          requires:\n            - test-core\n            - test-packages\n            - lint\n            - build\n      - ci/build-js-artifact:\n          context: \"GCR + Artifact Bucket Access\"\n          dist_directory: dist-cdn\n          prepare_dist_directory:\n            - attach_workspace:\n                at: ~/repo\n          requires:\n            - build_cdn\n      - ci/notify-success:\n          context: \"GCR + Artifact Bucket Access\"\n          requires:\n            - ci/build-js-artifact\n      - security/scan:\n          name: \"Gitleaks secrets scan\"\n          filters:\n            branches:\n              ignore: /pull\\/[0-9]+/\n          context: org-global\n          GITLEAKS_BLOCK: \"false\"\n\n      # Only release to NPM registry when commits are merged to master and new version is approved\n      - approve_npm_release:\n          type: approval\n          filters:\n            branches:\n              only: master\n          requires:\n            - test-core\n            - test-packages\n            - lint\n            - build\n      - npm_release:\n          requires:\n            - approve_npm_release\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 4\nindent_style = space\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.md]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".eslintignore",
    "content": "/packages/core/src/generated/**/*.ts\n/dist/*\n"
  },
  {
    "path": ".eslintrc.json",
    "content": "{\n    \"extends\": [\"@bigcommerce/eslint-config\"],\n    \"parser\": \"@typescript-eslint/parser\",\n    \"root\": true,\n    \"plugins\": [\"@nx\"],\n    \"env\": {\n        \"browser\": true\n    },\n    \"settings\": {\n        \"import/resolver\": {\n            \"typescript\": {\n                \"project\": \"./tsconfig.*?.json\"\n            }\n        }\n    },\n    \"parserOptions\": {\n        \"project\": \"./tsconfig.*?.json\"\n    },\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"prettier/prettier\": [\n                    \"error\",\n                    {\n                        \"tabWidth\": 4\n                    }\n                ],\n                // TODO:CHECKOUT-10008 Fix lint errors after nx upgrade to 19.8.9\n                \"jest/no-conditional-in-test\": \"off\",\n                \"@typescript-eslint/ban-tslint-comment\": \"off\",\n                \"@typescript-eslint/consistent-indexed-object-style\": \"off\",\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/no-confusing-void-expression\": \"off\",\n                \"@typescript-eslint/no-deprecated\": \"off\",\n                \"@typescript-eslint/no-dynamic-delete\": \"off\",\n                \"@typescript-eslint/no-extraneous-class\": \"off\",\n                \"@typescript-eslint/no-invalid-void-type\": \"off\",\n                \"@typescript-eslint/no-misused-promises\": \"off\",\n                \"@typescript-eslint/no-misused-spread\": \"off\",\n                \"@typescript-eslint/no-non-null-assertion\": \"off\",\n                \"@typescript-eslint/no-redundant-type-constituents\": \"off\",\n                \"@typescript-eslint/no-require-imports\": \"off\",\n                \"@typescript-eslint/no-unnecessary-boolean-literal-compare\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/no-unnecessary-template-expression\": \"off\",\n                \"@typescript-eslint/no-unnecessary-type-arguments\": \"off\",\n                \"@typescript-eslint/no-unnecessary-type-assertion\": \"off\",\n                \"@typescript-eslint/no-unnecessary-type-conversion\": \"off\",\n                \"@typescript-eslint/no-unnecessary-type-parameters\": \"off\",\n                \"@typescript-eslint/no-unsafe-enum-comparison\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unused-vars\": \"off\",\n                \"@typescript-eslint/no-useless-default-as\": \"off\",\n                \"@typescript-eslint/no-useless-default-assignment\": \"off\",\n                \"@typescript-eslint/no-var-requires\": \"off\",\n                \"@typescript-eslint/non-nullable-type-assertion-style\": \"off\",\n                \"@typescript-eslint/only-throw-error\": \"off\",\n                \"@typescript-eslint/prefer-includes\": \"off\",\n                \"@typescript-eslint/prefer-nullish-coalescing\": \"off\",\n                \"@typescript-eslint/prefer-optional-chain\": \"off\",\n                \"@typescript-eslint/prefer-promise-reject-errors\": \"off\",\n                \"@typescript-eslint/prefer-regexp-exec\": \"off\",\n                \"@typescript-eslint/prefer-string-starts-ends-with\": \"off\",\n                \"@typescript-eslint/restrict-template-expressions\": \"off\",\n                \"@typescript-eslint/use-unknown-in-catch-callback-variable\": \"off\",\n                \"@nx/enforce-module-boundaries\": [\n                    \"error\",\n                    {\n                        \"enforceBuildableLibDependency\": false,\n                        \"allow\": [],\n                        \"depConstraints\": [\n                            {\n                                \"sourceTag\": \"scope:core\",\n                                \"onlyDependOnLibsWithTags\": [\"scope:shared\"]\n                            },\n                            {\n                                \"sourceTag\": \"scope:shared\",\n                                \"onlyDependOnLibsWithTags\": [\"scope:shared\"]\n                            },\n                            {\n                                \"sourceTag\": \"scope:integration\",\n                                \"onlyDependOnLibsWithTags\": [\"scope:shared\"]\n                            }\n                        ]\n                    }\n                ]\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-assignment\": \"warn\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": ".github/CODEOWNERS",
    "content": "## Checkout team\n\n* @bigcommerce/team-checkout\n/packages/core @bigcommerce/team-checkout\n/packages/payment-integration @bigcommerce/team-checkout\n/packages/payment-integration-test-utils @bigcommerce/team-checkout\n/packages/hosted-form-v2 @bigcommerce/team-checkout\n\n\n## Integrations team\n\n/packages/core/src/checkout-buttons/strategies/amazon-pay-v2 @bigcommerce/team-integrations\n/packages/core/src/customer/strategies/amazon-pay-v2 @bigcommerce/team-integrations\n/packages/core/src/customer/strategies/chasepay @bigcommerce/team-integrations\n/packages/core/src/customer/strategies/square @bigcommerce/team-integrations\n/packages/core/src/shipping/strategies/amazon-pay-v2 @bigcommerce/team-integrations\n/packages/core/src/shipping/strategies/stripe-upe @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/adyenv2 @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/adyenv3 @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/affirm @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/amazon-pay-v2 @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/bluesnapv2 @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/bnz @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/cardinal @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/cba-mpgs @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/chasepay @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/checkoutcom @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/clearpay @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/converge @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/humm @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/klarna @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/klarnav2 @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/moneris @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/ppsdk @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/quadpay @bigcommerce/team-integrations\n/packages/core/src/payment/strategies/square @bigcommerce/team-integrations\n/packages/adyen-integration @bigcommerce/team-integrations\n/packages/adyen-utils @bigcommerce/team-integrations\n/packages/affirm-integration @bigcommerce/team-integrations\n/packages/afterpay-integration @bigcommerce/team-integrations\n/packages/amazon-pay-integration @bigcommerce/team-integrations\n/packages/amazon-pay-utils @bigcommerce/team-integrations\n/packages/bluesnap-direct-integration @bigcommerce/team-integrations\n/packages/bolt-integration @bigcommerce/team-integrations\n/packages/cardinal-integration @bigcommerce/team-integrations\n/packages/checkoutcom-custom-integration @bigcommerce/team-integrations\n/packages/clearpay-integration @bigcommerce/team-integrations\n/packages/cybersource-integration @bigcommerce/team-integrations\n/packages/mollie-integration @bigcommerce/team-integrations\n/packages/sagepay-integration @bigcommerce/team-integrations\n/packages/squarev2-integration @bigcommerce/team-integrations\n/packages/stripe-integration @bigcommerce/team-integrations\n/packages/stripe-utils @bigcommerce/team-integrations\n/packages/td-bank-integration @bigcommerce/team-integrations\n/packages/klarna-integration @bigcommerce/team-integrations\n/packages/humm-integration @bigcommerce/team-integrations\n/packages/zip-integration @bigcommerce/team-integrations\n/packages/worldpayaccess-integration @bigcommerce/team-integrations\n/packages/cba-mpgs-integration @bigcommerce/team-integrations\n\n## PayPal team\n\n/packages/core/src/analytics/braintree-analytic-tracker @bigcommerce/team-paypal\n/packages/core/src/analytics/paypal-commerce-analytic-tracker @bigcommerce/team-paypal\n/packages/core/src/checkout-buttons/strategies/braintree @bigcommerce/team-paypal\n/packages/core/src/checkout-buttons/strategies/paypal @bigcommerce/team-paypal\n/packages/core/src/customer/strategies/braintree @bigcommerce/team-paypal\n/packages/core/src/shipping/strategies/braintree @bigcommerce/team-paypal\n/packages/core/src/shipping/strategies/paypal-commerce @bigcommerce/team-paypal\n/packages/core/src/shipping/strategies/bigcommerce-payments @bigcommerce/team-paypal\n/packages/core/src/payment/strategies/braintree @bigcommerce/team-paypal\n/packages/core/src/payment/strategies/paypal @bigcommerce/team-paypal\n\n/packages/braintree-integration @bigcommerce/team-paypal\n/packages/braintree-utils @bigcommerce/team-paypal\n/packages/bigcommerce-payments-utils @bigcommerce/team-paypal\n/packages/bigcommerce-payments-integration @bigcommerce/team-paypal\n/packages/paypal-express-integration @bigcommerce/team-paypal\n/packages/paypal-commerce-integration @bigcommerce/team-paypal\n/packages/paypal-commerce-utils @bigcommerce/team-paypal\n/packages/paypal-pro-integration @bigcommerce/team-paypal\n/packages/paypal-utils @bigcommerce/team-paypal\n\n## Shared\n\n/packages/core/src/checkout-buttons/strategies/googlepay @bigcommerce/team-checkout @bigcommerce/team-integrations @bigcommerce/team-paypal\n/packages/core/src/customer/strategies/googlepay @bigcommerce/team-checkout @bigcommerce/team-integrations @bigcommerce/team-paypal\n/packages/core/src/payment/strategies/googlepay @bigcommerce/team-checkout @bigcommerce/team-integrations @bigcommerce/team-paypal\n\n/packages/apple-pay-integration @bigcommerce/team-checkout @bigcommerce/team-integrations @bigcommerce/team-paypal\n/packages/google-pay-integration @bigcommerce/team-checkout @bigcommerce/team-integrations @bigcommerce/team-paypal\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Desktop (please complete the following information):**\n - OS: [e.g. iOS]\n - Browser [e.g. chrome, safari]\n - Version [e.g. 22]\n\n**Smartphone (please complete the following information):**\n - Device: [e.g. iPhone6]\n - OS: [e.g. iOS8.1]\n - Browser [e.g. stock browser, safari]\n - Version [e.g. 22]\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "## What/Why?\n\n<!--\n  A description about what this pull request implements and its purpose.\n  Try to be detailed and describe any technical details to simplify the job\n  of the reviewer and the individual on production support.\n-->\n\n## Rollout/Rollback\n\n<!--\nDetail how this change will be rolled out. Include reference to any\nexperiments and how the success will be measured as the experiment is\nramped.\n\nDocument rollback procedures. Is rolling back the change as simple as\nrolling back an experiment or does it require reverting code? Are there\ndatabase migrations that may change our decision to roll forward instead of\nback?\n-->\n\n## Testing\n\n<!--\nProvide as much information as you can about how you tested and how another\nEngineer can test your change. Include screenshots, or test run output\nwhere appropriate.\n-->\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n.nx/cache\n.nx/workspace-data\n*.log\n/webpack-stats.json\n/coverage\n/node_modules\n/temp\n/dist/tsdoc-metadata.json\n/dist-server\n/dist-cdn\n/dist-tools\n/packages/**/generated\n.idea\n.vscode\njunit.xml\n/build-analysis\n"
  },
  {
    "path": ".metadata_rules.yml",
    "content": "- '**/loader.js': {\n  cache_control: 'no-cache, max-age=0'\n}\n"
  },
  {
    "path": ".nvmrc",
    "content": "18.17\n"
  },
  {
    "path": ".versionrc.json",
    "content": "{\n    \"types\": [\n        {\n            \"type\": \"feat\",\n            \"section\": \"Features\"\n        },\n        {\n            \"type\": \"fix\",\n            \"section\": \"Bug Fixes\"\n        },\n        {\n            \"type\": \"chore\",\n            \"hidden\": true\n        },\n        {\n            \"type\": \"docs\",\n            \"hidden\": true\n        },\n        {\n            \"type\": \"style\",\n            \"hidden\": true\n        },\n        {\n            \"type\": \"refactor\",\n            \"section\": \"Code Refactoring\"\n        },\n        {\n            \"type\": \"perf\",\n            \"section\": \"Performance Improvements\"\n        },\n        {\n            \"type\": \"test\",\n            \"hidden\": true\n        }\n    ],\n    \"releaseCommitMessageFormat\": \"chore(release): {{currentTag}} [skip ci]\"\n}\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.\n\n### [1.916.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.916.0...v1.916.1) (2026-05-21)\n\n\n### Bug Fixes\n\n* **payment:** Stripe Link V2 spam protection fix ([#3257](https://github.com/bigcommerce/checkout-sdk-js/issues/3257)) ([e593a0c](https://github.com/bigcommerce/checkout-sdk-js/commit/e593a0c8c321b63cba61b4c3f3ba4009d25af686))\n\n## [1.916.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.915.0...v1.916.0) (2026-05-21)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9820 add capabilities for b2b checkout config for PO ([#3256](https://github.com/bigcommerce/checkout-sdk-js/issues/3256)) ([9270233](https://github.com/bigcommerce/checkout-sdk-js/commit/9270233d3d974edb2706a2faa504a418d0d0f396))\n\n## [1.915.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.914.0...v1.915.0) (2026-05-21)\n\n\n### Features\n\n* **checkout:** CHECKOUT-10010 Expose order extra fields ([#3260](https://github.com/bigcommerce/checkout-sdk-js/issues/3260)) ([4cc7375](https://github.com/bigcommerce/checkout-sdk-js/commit/4cc7375a316395c5f04470eae19fdf05c8b2965f))\n\n## [1.914.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.912.0...v1.914.0) (2026-05-21)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9821 Add Loading Company Payment Methods ([#3255](https://github.com/bigcommerce/checkout-sdk-js/issues/3255)) ([ee4581a](https://github.com/bigcommerce/checkout-sdk-js/commit/ee4581a66337cbbc6bcecc7ce6a6f22d4b8b1607))\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-9821 Remove applyCapabilitiesOverride ([#3259](https://github.com/bigcommerce/checkout-sdk-js/issues/3259)) ([d454d31](https://github.com/bigcommerce/checkout-sdk-js/commit/d454d3111c9db73d0577c61d03a7d7e79d1c53cf))\n\n## [1.913.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.912.0...v1.913.0) (2026-05-21)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9821 Add Loading Company Payment Methods ([#3255](https://github.com/bigcommerce/checkout-sdk-js/issues/3255)) ([ee4581a](https://github.com/bigcommerce/checkout-sdk-js/commit/ee4581a66337cbbc6bcecc7ce6a6f22d4b8b1607))\n\n## [1.912.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.911.0...v1.912.0) (2026-05-19)\n\n\n### Features\n\n* **payment:** PAYPAL-6352 implemented server side shipping callbacks logic ([#3237](https://github.com/bigcommerce/checkout-sdk-js/issues/3237)) ([0b8e392](https://github.com/bigcommerce/checkout-sdk-js/commit/0b8e3929c74febe1fc6a6010de64984dc0fe044d))\n* **payment:** PAYPAL-6433 implement server side shipping callbacks logic ([#3236](https://github.com/bigcommerce/checkout-sdk-js/issues/3236)) ([e84d166](https://github.com/bigcommerce/checkout-sdk-js/commit/e84d166c271b25ebfbffe7a24671bcd1639a8c46))\n\n## [1.911.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.910.0...v1.911.0) (2026-05-18)\n\n\n### Features\n\n* **payment:** PI-5215 [FE][Google Pay] Implement container mode in GooglePayPaymentStrategy ([#3247](https://github.com/bigcommerce/checkout-sdk-js/issues/3247)) ([81a6dbc](https://github.com/bigcommerce/checkout-sdk-js/commit/81a6dbcefe6ea584825a74fe581f2923adfd23b4))\n\n## [1.910.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.909.5...v1.910.0) (2026-05-17)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9821 Add B2B Dev Tool ([#3252](https://github.com/bigcommerce/checkout-sdk-js/issues/3252)) ([4dd221e](https://github.com/bigcommerce/checkout-sdk-js/commit/4dd221eccadad0a074587314d42d07a2cd936815))\n\n### [1.909.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.909.4...v1.909.5) (2026-05-13)\n\n### [1.909.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.909.3...v1.909.4) (2026-05-13)\n\n### [1.909.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.909.2...v1.909.3) (2026-05-12)\n\n### [1.909.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.909.1...v1.909.2) (2026-05-11)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-6442 double call of loadPayPalSDK to avoid ZOID issues ([afeda21](https://github.com/bigcommerce/checkout-sdk-js/commit/afeda215deda7753ed8abbd1ba6d4ad6df54f51d))\n\n### [1.909.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.909.0...v1.909.1) (2026-05-11)\n\n## [1.909.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.907.0...v1.909.0) (2026-05-05)\n\n\n### Features\n\n* **payment:** PI-4985 [Worldpay Access][FE][B2B checkout] Open Banking ([#3231](https://github.com/bigcommerce/checkout-sdk-js/issues/3231)) ([901427d](https://github.com/bigcommerce/checkout-sdk-js/commit/901427d15033b3e97f60c423d5b6b8559073858b))\n\n\n### Bug Fixes\n\n* **payment:** PI-5250 [Adyen] wait for `containerId` before `mountElement` ([#3238](https://github.com/bigcommerce/checkout-sdk-js/issues/3238)) ([dfa35c9](https://github.com/bigcommerce/checkout-sdk-js/commit/dfa35c90f97d0bf3198aa86266ad22425b333d2d))\n\n## [1.908.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.907.0...v1.908.0) (2026-05-04)\n\n\n### Features\n\n* **payment:** PI-4985 [Worldpay Access][FE][B2B checkout] Open Banking ([#3231](https://github.com/bigcommerce/checkout-sdk-js/issues/3231)) ([901427d](https://github.com/bigcommerce/checkout-sdk-js/commit/901427d15033b3e97f60c423d5b6b8559073858b))\n\n## [1.907.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.906.0...v1.907.0) (2026-05-04)\n\n\n### Features\n\n* **payment:** PAYPAL-6436 Fixed an issue with asynchronous behavior during strategy reinitialization ([ab0662b](https://github.com/bigcommerce/checkout-sdk-js/commit/ab0662b293500cbfb679c6480faed11bc6eebd63))\n\n## [1.906.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.905.1...v1.906.0) (2026-05-04)\n\n\n### Features\n\n* **payment:** PAYPAL-5797 Update PayPalCommerceVenmoPaymentStrategy by providing PaypalUtilsService from paypal-utils package ([576538a](https://github.com/bigcommerce/checkout-sdk-js/commit/576538a3e6ee585be61547c5a08445c1dd6e0df3))\n\n### [1.905.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.905.0...v1.905.1) (2026-05-02)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-9963 Fix error related to container not found for bluesnap ([#3235](https://github.com/bigcommerce/checkout-sdk-js/issues/3235)) ([ef35c12](https://github.com/bigcommerce/checkout-sdk-js/commit/ef35c12baeb557c327715b74aa7e6cbe4f2ec8dc))\n\n## [1.905.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.904.2...v1.905.0) (2026-04-24)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9956 get client id and b2b base url from initial state ([#3229](https://github.com/bigcommerce/checkout-sdk-js/issues/3229)) ([3a66f39](https://github.com/bigcommerce/checkout-sdk-js/commit/3a66f39b01df35508d0d1df88aa88e90a36bb3bd))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-6336 removed BCP APM SPB related code ([#3208](https://github.com/bigcommerce/checkout-sdk-js/issues/3208)) ([a173c34](https://github.com/bigcommerce/checkout-sdk-js/commit/a173c3450795b18f69086a6b87fe89450e0443dc))\n\n### [1.904.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.904.1...v1.904.2) (2026-04-22)\n\n### [1.904.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.904.0...v1.904.1) (2026-04-21)\n\n## [1.904.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.903.1...v1.904.0) (2026-04-21)\n\n\n### Features\n\n* **payment:** PI-4976 [Access Worldpay] Open Banking ([c6f705a](https://github.com/bigcommerce/checkout-sdk-js/commit/c6f705a6b6c70dfa2c7c23c32aad0b0cf3869ebf))\n* **payment:** PI-4976 [Access Worldpay] Open Banking ([4e2f8fe](https://github.com/bigcommerce/checkout-sdk-js/commit/4e2f8fe81f5a434f0fb08f0efdb735ba0a1cc860))\n* **payment:** PI-4976 [Access Worldpay] Open Banking ([5b958fd](https://github.com/bigcommerce/checkout-sdk-js/commit/5b958fd4600e60aa08bf55aa0c58c9eb5b40fd45))\n* **payment:** PI-4976 [Access Worldpay] Open Banking ([470162c](https://github.com/bigcommerce/checkout-sdk-js/commit/470162cd76df323d5b3154ba9488b9e960a10862))\n* **payment:** PI-4976 [Access Worldpay] Open Banking ([e9b1f40](https://github.com/bigcommerce/checkout-sdk-js/commit/e9b1f40a1e31a3864c4292312d76fe3671bcf29d))\n* **payment:** PI-4976 [Access Worldpay] Open Banking ([88507bb](https://github.com/bigcommerce/checkout-sdk-js/commit/88507bb72c090134194ca654c6ba25db271a48d2))\n\n### [1.903.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.903.0...v1.903.1) (2026-04-21)\n\n\n### Bug Fixes\n\n* **payment:** Stripe add second payment request for Stripe declined ([#3225](https://github.com/bigcommerce/checkout-sdk-js/issues/3225)) ([eb709b3](https://github.com/bigcommerce/checkout-sdk-js/commit/eb709b32f0676ea5f8a3a277d4ed213159e1cdd5))\n\n## [1.903.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.902.1...v1.903.0) (2026-04-21)\n\n\n### Features\n\n* **payment:** Add Stripe Adaptive Pricing support to Checkout Session strategy ([#3218](https://github.com/bigcommerce/checkout-sdk-js/issues/3218)) ([0954bae](https://github.com/bigcommerce/checkout-sdk-js/commit/0954bae4db76cd6797f1dcfe54e2aff397b3ece5))\n\n### [1.902.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.902.0...v1.902.1) (2026-04-21)\n\n\n### Bug Fixes\n\n* **payment:** Update locale for Stripe OCS ([#3216](https://github.com/bigcommerce/checkout-sdk-js/issues/3216)) ([c6edeca](https://github.com/bigcommerce/checkout-sdk-js/commit/c6edeca8511349e394d6685dad6ad1a731c761a9))\n\n## [1.902.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.901.0...v1.902.0) (2026-04-20)\n\n\n### Features\n\n* **payment:** PAYPAL-5046 send locale parameter in PayPal SDK call ([5198314](https://github.com/bigcommerce/checkout-sdk-js/commit/51983141df3dfe784c27e362878a4da4789dfa5a))\n\n## [1.901.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.900.0...v1.901.0) (2026-04-20)\n\n\n### Features\n\n* **order:** BACK-392 Add order BO fields to LineItem type ([8c4d737](https://github.com/bigcommerce/checkout-sdk-js/commit/8c4d737e3a540d77670b4f2b95c4a72abe9a7242))\n\n## [1.900.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.899.4...v1.900.0) (2026-04-17)\n\n\n### Features\n\n* **payment:** PAYPAL-6378 catch all unrecognized states to avoid placing an order with a wrong nonce value provided by default in specific 3DSecure silent fallthrough scenario ([5f0c67b](https://github.com/bigcommerce/checkout-sdk-js/commit/5f0c67b427af7f901bdeda9cbe348db26cfd13dc))\n\n### [1.899.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.899.3...v1.899.4) (2026-04-16)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-9938 Update Extra Field Types ([#3221](https://github.com/bigcommerce/checkout-sdk-js/issues/3221)) ([eecd46c](https://github.com/bigcommerce/checkout-sdk-js/commit/eecd46c974483413d2c375b77724e20804d61c17))\n\n### [1.899.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.899.2...v1.899.3) (2026-04-16)\n\n### [1.899.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.899.1...v1.899.2) (2026-04-15)\n\n### [1.899.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.899.0...v1.899.1) (2026-04-15)\n\n## [1.899.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.898.6...v1.899.0) (2026-04-14)\n\n\n### Features\n\n* **payment:** Google Pay direct payment in modal ([70a2fb1](https://github.com/bigcommerce/checkout-sdk-js/commit/70a2fb1983d22df1cc8cb5c1bee9465ebfe9d7c8))\n\n### [1.898.6](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.898.5...v1.898.6) (2026-04-13)\n\n### [1.898.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.898.4...v1.898.5) (2026-04-13)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-9889 Refactor ExtraFieldValue Interface ([#3213](https://github.com/bigcommerce/checkout-sdk-js/issues/3213)) ([bfa855a](https://github.com/bigcommerce/checkout-sdk-js/commit/bfa855a65af1c62813f22c4373b4e332d79b558d))\n\n### [1.898.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.898.3...v1.898.4) (2026-04-13)\n\n### [1.898.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.898.2...v1.898.3) (2026-04-10)\n\n\n### Bug Fixes\n\n* **payment:** Stripe CS add second payment request for Stripe declined ([#3207](https://github.com/bigcommerce/checkout-sdk-js/issues/3207)) ([571cc2c](https://github.com/bigcommerce/checkout-sdk-js/commit/571cc2c66917a0a9b3d341d6195996e3af025017))\n\n### [1.898.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.898.1...v1.898.2) (2026-04-09)\n\n### [1.898.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.898.0...v1.898.1) (2026-04-09)\n\n## [1.898.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.897.0...v1.898.0) (2026-04-07)\n\n\n### Features\n\n* **payment:** Stripe CS ACH vaultings ([#3200](https://github.com/bigcommerce/checkout-sdk-js/issues/3200)) ([a05475a](https://github.com/bigcommerce/checkout-sdk-js/commit/a05475a81bdb30a184a77e2770ed3f076d364b68))\n\n## [1.897.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.896.0...v1.897.0) (2026-04-07)\n\n\n### Features\n\n* **payment:** PAYPAL-5794 Update PaypalCommerceRatepayPaymentStrategy by providing PaypalUtilsService from paypal-utils package ([3eeef2f](https://github.com/bigcommerce/checkout-sdk-js/commit/3eeef2f6aa4d495b127e0c1b34f3abc63376044a))\n\n## [1.896.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.895.0...v1.896.0) (2026-04-07)\n\n\n### Features\n\n* **payment:** PAYPAL-5800 Update PayPalCommercePaymentStrategy by providing PaypalUtilsService from paypal-utils package ([d81566d](https://github.com/bigcommerce/checkout-sdk-js/commit/d81566d724df96f6a40ce7c244dcee18df81bf49))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-6336 removed ppcp apms related code ([#3191](https://github.com/bigcommerce/checkout-sdk-js/issues/3191)) ([e3fad0a](https://github.com/bigcommerce/checkout-sdk-js/commit/e3fad0a0b402ad06e805209556034fe5c8bdf5c2))\n\n## [1.895.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.894.1...v1.895.0) (2026-04-02)\n\n\n### Features\n\n* **payment:** PAYPAL-6342 remove PayPal buttons messages implementation ([5d13ee9](https://github.com/bigcommerce/checkout-sdk-js/commit/5d13ee95fc712e38c978bfa1abf1dec527dfe4d4))\n* **payment:** PAYPAL-6343 remove braintree buttons messages implementation ([ac044d6](https://github.com/bigcommerce/checkout-sdk-js/commit/ac044d636648db4bed450b466a100875c4e9cc2b))\n* **payment:** PAYPAL-6344 remove bcp buttons messages implementation ([5ba1712](https://github.com/bigcommerce/checkout-sdk-js/commit/5ba171264f7baff21ae48d635a2443a64942ea99))\n\n### [1.894.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.894.0...v1.894.1) (2026-04-02)\n\n## [1.894.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.893.0...v1.894.0) (2026-04-01)\n\n\n### Features\n\n* **payment:** Stripe Link v2 max shipping options length ([#3190](https://github.com/bigcommerce/checkout-sdk-js/issues/3190)) ([4f57455](https://github.com/bigcommerce/checkout-sdk-js/commit/4f57455584474b69823062b85d1b8fd059a332fb))\n\n## [1.893.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.892.0...v1.893.0) (2026-03-31)\n\n\n### Features\n\n* **payment:** PAYPAL-6354 reseting payment provider customer state when signing in user ([938c9f9](https://github.com/bigcommerce/checkout-sdk-js/commit/938c9f997a82488c2364df9b24ee147d630e1451))\n\n## [1.892.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.891.0...v1.892.0) (2026-03-27)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9824 export isExtraFormField from sdk ([#3188](https://github.com/bigcommerce/checkout-sdk-js/issues/3188)) ([f78ac0f](https://github.com/bigcommerce/checkout-sdk-js/commit/f78ac0f61a188fd77a155c5025630b0d833cf37f))\n\n## [1.891.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.890.0...v1.891.0) (2026-03-23)\n\n\n### Features\n\n* **payment:** PAYPAL-6014 Update PayPalCommerceButtonStrategy and PayPalCommerceCustomerStrategy using PaypalButtonCreationService and PayPalIntegrationService from paypal-utils package ([fdc65e1](https://github.com/bigcommerce/checkout-sdk-js/commit/fdc65e126ea999af3a3fa3114fff21b7814b58d7))\n* **payment:** PAYPAL-6014 updates based on comments ([f290fef](https://github.com/bigcommerce/checkout-sdk-js/commit/f290fefaa571732f226a3ebf8751dc1738c50afe))\n\n## [1.890.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.889.1...v1.890.0) (2026-03-23)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9825 Introduce extraFields ([#3185](https://github.com/bigcommerce/checkout-sdk-js/issues/3185)) ([95c6879](https://github.com/bigcommerce/checkout-sdk-js/commit/95c687929f1bd8c96af923624b3164442430a340))\n\n### [1.889.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.889.0...v1.889.1) (2026-03-22)\n\n## [1.889.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.888.0...v1.889.0) (2026-03-20)\n\n\n### Features\n\n* **payment:** PAYPAL-5724 add bcp customer app switch ([ccb833b](https://github.com/bigcommerce/checkout-sdk-js/commit/ccb833b01824239b80a80f9e43b1b1d669f0cb51))\n\n## [1.888.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.887.1...v1.888.0) (2026-03-19)\n\n\n### Features\n\n* **payment:** Stripe CS credit card vaulting ([#3183](https://github.com/bigcommerce/checkout-sdk-js/issues/3183)) ([052e1e8](https://github.com/bigcommerce/checkout-sdk-js/commit/052e1e83ff725c5aa08ce3699b054eb972162231))\n\n### [1.887.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.887.0...v1.887.1) (2026-03-17)\n\n\n### Bug Fixes\n\n* **payment:** PI-5075 [Google Pay] round `totalPrice` to max 2 decimal places ([#3179](https://github.com/bigcommerce/checkout-sdk-js/issues/3179)) ([70a432f](https://github.com/bigcommerce/checkout-sdk-js/commit/70a432f0de7dcfa471f864876f00cb344304bd6f))\n\n## [1.887.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.886.0...v1.887.0) (2026-03-16)\n\n\n### Features\n\n* **payment:** PAYPAL-6015 Update PayPalCommerceAlternativeMethodsButtonStrategy using PaypalButtonCreationService from paypal-utils package ([6542c73](https://github.com/bigcommerce/checkout-sdk-js/commit/6542c7357dc518ed05dc374c116e851862d97c18))\n\n## [1.886.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.885.0...v1.886.0) (2026-03-12)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9871 Update Capabilities Interface ([#3177](https://github.com/bigcommerce/checkout-sdk-js/issues/3177)) ([c2b9118](https://github.com/bigcommerce/checkout-sdk-js/commit/c2b9118e8079441de4006c29e4a95f29929d6bab))\n\n## [1.885.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.884.1...v1.885.0) (2026-03-12)\n\n\n### Features\n\n* **payment:** PAYPAL-6318 Update paypal sdk namespace for BCP paypal sdk config with bigcommerce-payments naming ([#3174](https://github.com/bigcommerce/checkout-sdk-js/issues/3174)) ([2b0feb0](https://github.com/bigcommerce/checkout-sdk-js/commit/2b0feb0d1f9c0e812660c812c05bfe8afeb0b370))\n\n### [1.884.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.884.0...v1.884.1) (2026-03-10)\n\n## [1.884.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.883.0...v1.884.0) (2026-03-10)\n\n\n### Features\n\n* **payment:** PAYPAL-5798 Update PayPalCommerceButtonStrategy by providing PaypalUtilsService from paypal-utils package ([2ab61f9](https://github.com/bigcommerce/checkout-sdk-js/commit/2ab61f90e6a14301320adb717929ca8a5c96f4f4))\n\n## [1.883.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.882.0...v1.883.0) (2026-03-10)\n\n\n### Features\n\n* **payment:** PI-5030 Google Pay in WebView support ([c6d31e6](https://github.com/bigcommerce/checkout-sdk-js/commit/c6d31e653a5c2b2efe8073af6427977ccd9e11f0))\n\n## [1.882.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.881.0...v1.882.0) (2026-03-10)\n\n\n### Features\n\n* **payment:** Stripe CS update shipping and billing address from FE side ([#3170](https://github.com/bigcommerce/checkout-sdk-js/issues/3170)) ([8a69a45](https://github.com/bigcommerce/checkout-sdk-js/commit/8a69a454cf498cdfcb2cdab8153542d7a87e2467))\n\n## [1.881.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.880.0...v1.881.0) (2026-03-10)\n\n\n### Features\n\n* **payment:** Stripe Link V2 add support checkout_session module ([#3163](https://github.com/bigcommerce/checkout-sdk-js/issues/3163)) ([6e4f80d](https://github.com/bigcommerce/checkout-sdk-js/commit/6e4f80d69dd306856547627fbab5bb21004099c1))\n\n## [1.880.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.879.0...v1.880.0) (2026-03-09)\n\n\n### Features\n\n* **payment:** PAYPAL-5793 Update PayPalCommerceCreditPaymentStrategy by providing PaypalUtilsService from paypal-utils package ([078e464](https://github.com/bigcommerce/checkout-sdk-js/commit/078e46481db5ab7a850955bcf197c763c188a24c))\n\n## [1.879.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.878.2...v1.879.0) (2026-03-09)\n\n\n### Features\n\n* **payment:** PAYPAL-5725 add bcp payments app switch ([f1199bd](https://github.com/bigcommerce/checkout-sdk-js/commit/f1199bd57ef10fa20fbab62df462a4fe9d870b9f))\n\n### [1.878.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.878.1...v1.878.2) (2026-03-09)\n\n### [1.878.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.878.0...v1.878.1) (2026-03-08)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-9796 Restore removal of fallback strategies from essential build ([#3165](https://github.com/bigcommerce/checkout-sdk-js/issues/3165)) ([fd316d0](https://github.com/bigcommerce/checkout-sdk-js/commit/fd316d0adf154eb0cda371ed931ac3105b9585ff))\n\n## [1.878.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.877.5...v1.878.0) (2026-03-05)\n\n\n### Features\n\n* **checkout:** CHECKOUT-98034 update checkout interface to support the maximum limit fields ([#3168](https://github.com/bigcommerce/checkout-sdk-js/issues/3168)) ([63c4ddf](https://github.com/bigcommerce/checkout-sdk-js/commit/63c4ddfe577a9d0b091faa2f2730fe61352c64d0))\n\n### [1.877.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.877.4...v1.877.5) (2026-03-04)\n\n### [1.877.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.877.3...v1.877.4) (2026-03-04)\n\n### [1.877.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.877.2...v1.877.3) (2026-03-04)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-9796 Pass createNoPaymentStrategy as fallback ([#3161](https://github.com/bigcommerce/checkout-sdk-js/issues/3161)) ([8bdf9dd](https://github.com/bigcommerce/checkout-sdk-js/commit/8bdf9dde6a1a6971ed009f755403f7369422632b))\n\n### [1.877.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.877.1...v1.877.2) (2026-03-03)\n\n### [1.877.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.877.0...v1.877.1) (2026-03-02)\n\n## [1.877.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.876.0...v1.877.0) (2026-03-02)\n\n\n### Features\n\n* **payment:** PI-5028 isWebView util added ([3e11ae6](https://github.com/bigcommerce/checkout-sdk-js/commit/3e11ae6e7f3bf7805332cd6c5794c138382e4338))\n\n## [1.876.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.875.0...v1.876.0) (2026-03-02)\n\n\n### Features\n\n* **payment:** PI-5017 [Google pay] Do not override billing address on the payment strategy ([fc4e3fe](https://github.com/bigcommerce/checkout-sdk-js/commit/fc4e3fe0a221ea45e769da9ba981ee26bb2e3200))\n\n## [1.875.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.874.0...v1.875.0) (2026-03-02)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9791 Add Capabilities Interface ([#3158](https://github.com/bigcommerce/checkout-sdk-js/issues/3158)) ([6d8c041](https://github.com/bigcommerce/checkout-sdk-js/commit/6d8c041a07315bf8a5a58896ece3f85653e7e6d1))\n\n## [1.874.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.873.0...v1.874.0) (2026-02-24)\n\n\n### Features\n\n* **payment:** Stripe reinitialize checkout session strategy ([b97eea5](https://github.com/bigcommerce/checkout-sdk-js/commit/b97eea5b2a65ff2d2bf62f170155c26079231b56))\n\n## [1.873.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.872.0...v1.873.0) (2026-02-23)\n\n\n### Features\n\n* **payment:** PAYPAL-6228 Updates regarding IDEAL flow when polling mechanism is disabled ([851720a](https://github.com/bigcommerce/checkout-sdk-js/commit/851720a567a59558525ed4dd29908a04b087f633))\n\n## [1.872.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.871.0...v1.872.0) (2026-02-23)\n\n\n### Features\n\n* **checkout:** introduce new error CartStockPositionsChangedError for the order request error ([#3152](https://github.com/bigcommerce/checkout-sdk-js/issues/3152)) ([afdbb02](https://github.com/bigcommerce/checkout-sdk-js/commit/afdbb0233ee2d029c02faf7336a8ed13299f37e3))\n\n## [1.871.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.870.0...v1.871.0) (2026-02-19)\n\n\n### Features\n\n* **checkout:** CHECKOUT-8842 Add costAfterDiscount in shipping option interface ([f0beea9](https://github.com/bigcommerce/checkout-sdk-js/commit/f0beea9067bbe866eeca9078ca415b258681aa13))\n\n## [1.870.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.869.0...v1.870.0) (2026-02-18)\n\n\n### Features\n\n* **payment:** PAYPAL-5941 AppSwitch availability for PDP ([2c73892](https://github.com/bigcommerce/checkout-sdk-js/commit/2c738921351c37a147cc140b95817eab39f25cf5))\n\n## [1.869.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.868.0...v1.869.0) (2026-02-17)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9808 add `productAutoDiscountedSubtotal` field to order interface ([#3149](https://github.com/bigcommerce/checkout-sdk-js/issues/3149)) ([954f50b](https://github.com/bigcommerce/checkout-sdk-js/commit/954f50bd865c338a383594e1026e6d23ba13f9d7))\n\n## [1.868.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.867.0...v1.868.0) (2026-02-17)\n\n\n### Features\n\n* **payment:** Stripe execute checkout session strategy ([c8503fb](https://github.com/bigcommerce/checkout-sdk-js/commit/c8503fbda17c22448aaf3b58cc25a23a0b45de19))\n\n## [1.867.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.866.2...v1.867.0) (2026-02-17)\n\n\n### Features\n\n* **payment:** PAYPAL-5639 Added check if button container exists ([#3147](https://github.com/bigcommerce/checkout-sdk-js/issues/3147)) ([50b6e1b](https://github.com/bigcommerce/checkout-sdk-js/commit/50b6e1b74650a307b393a3761d6ddce32ee920d9))\n\n### [1.866.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.866.1...v1.866.2) (2026-02-16)\n\n### [1.866.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.866.0...v1.866.1) (2026-02-09)\n\n\n### Bug Fixes\n\n* **payment:** Stripe Link V2 recommended shipping option ([#3142](https://github.com/bigcommerce/checkout-sdk-js/issues/3142)) ([1cad952](https://github.com/bigcommerce/checkout-sdk-js/commit/1cad952cdc96e37100adfbc70bf8aef85aca35e4))\n\n## [1.866.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.865.0...v1.866.0) (2026-02-09)\n\n\n### Features\n\n* **payment:** Stripe init Checkout Session ([#3141](https://github.com/bigcommerce/checkout-sdk-js/issues/3141)) ([a9fdbf4](https://github.com/bigcommerce/checkout-sdk-js/commit/a9fdbf4a1441759bedb0d68e44454e032b3585f2))\n\n## [1.865.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.864.0...v1.865.0) (2026-02-06)\n\n\n### Features\n\n* **payment:** PAYPAL-5791 Update PayPalCommerceCreditButtonStrategy by providing PaypalUtilsService from paypal-utils package ([e39dee1](https://github.com/bigcommerce/checkout-sdk-js/commit/e39dee1c258c82cf1b7a776fe98e7f44b7cdbc99))\n\n## [1.864.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.863.0...v1.864.0) (2026-02-06)\n\n\n### Features\n\n* **checkout:** add inventory settings to store config ([#3139](https://github.com/bigcommerce/checkout-sdk-js/issues/3139)) ([5774c13](https://github.com/bigcommerce/checkout-sdk-js/commit/5774c139e6a37efed95dd8fb32268ee6e3e8292c))\n\n## [1.863.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.862.0...v1.863.0) (2026-02-05)\n\n\n### Features\n\n* **payment:** PAYPAL-5790 Update PayPalCommerceCreditCardsPaymentStrategy by providing PaypalUtilsService from paypal-utils package ([2a21b95](https://github.com/bigcommerce/checkout-sdk-js/commit/2a21b95df441145548ba361ba6ecd828a7751ac3))\n\n## [1.862.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.861.1...v1.862.0) (2026-02-05)\n\n\n### Features\n\n* **checkout:** add stock position in includes of requests of some missing endpoints ([#3138](https://github.com/bigcommerce/checkout-sdk-js/issues/3138)) ([2b38b35](https://github.com/bigcommerce/checkout-sdk-js/commit/2b38b3587177ddbb4f8095c7eacd4fd3e43a4aa4))\n\n### [1.861.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.861.0...v1.861.1) (2026-02-04)\n\n## [1.861.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.860.1...v1.861.0) (2026-02-03)\n\n\n### Features\n\n* **payment:** PAYPAL-5789 Replace PayPalCommerceIntegrationService with PaypalUtilsService from paypal-utils package ([d8ca3b6](https://github.com/bigcommerce/checkout-sdk-js/commit/d8ca3b67b37363eefefcc704096615bdcb838356))\n\n### [1.860.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.860.0...v1.860.1) (2026-02-02)\n\n\n### Bug Fixes\n\n* **checkout:** PAYPAL-6134 [Stored Cards][Braintree] - Unable to change the default saved card from the checkout ([2c8c0e8](https://github.com/bigcommerce/checkout-sdk-js/commit/2c8c0e8642323ecfdeaf1d5b0e2e652b9f78ce5d))\n\n## [1.860.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.859.0...v1.860.0) (2026-02-02)\n\n\n### Features\n\n* **payment:** Stripe init Checkout Session ([#3132](https://github.com/bigcommerce/checkout-sdk-js/issues/3132)) ([e46bf99](https://github.com/bigcommerce/checkout-sdk-js/commit/e46bf99823ebbf74d090bc6e1a5bbbca145c46dd))\n\n## [1.859.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.858.0...v1.859.0) (2026-02-02)\n\n\n### Features\n\n* **payment:** PAYPAL-5788 Update PayPalCommerceAlternativeMethodsButtonStrategy by providing PaypalUtilsService from paypal-utils package ([dbedc6b](https://github.com/bigcommerce/checkout-sdk-js/commit/dbedc6b32aaec7812bfdb6f7480f27b9ba041f9a))\n\n## [1.858.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.857.0...v1.858.0) (2026-01-29)\n\n\n### Features\n\n* **payment:** add Stripe Checkout Session payment strategy ([#3131](https://github.com/bigcommerce/checkout-sdk-js/issues/3131)) ([404a25d](https://github.com/bigcommerce/checkout-sdk-js/commit/404a25d9806873f02c56754ab276d16b1dfb5670))\n\n## [1.857.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.856.0...v1.857.0) (2026-01-29)\n\n\n### Features\n\n* **payment:** PAYPAL-6055 test removal ([69e17e4](https://github.com/bigcommerce/checkout-sdk-js/commit/69e17e421b710469a8230a50acf1b9ce0ea2d3ba))\n* **payment:** PAYPAL-6055 update paypal sdk config ([8480236](https://github.com/bigcommerce/checkout-sdk-js/commit/8480236498e5cfb3daa9b7ae1c6fde66b8387c1f))\n\n## [1.856.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.855.0...v1.856.0) (2026-01-27)\n\n\n### Features\n\n* **payment:** PAYPAL-6162 Fixed double call of loadPayPalSDK to avoid ZOID issues and button display problems ([77b25d0](https://github.com/bigcommerce/checkout-sdk-js/commit/77b25d08096cfc64b1817b15ac2637f71f7dec2b))\n\n## [1.855.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.854.0...v1.855.0) (2026-01-26)\n\n\n### Features\n\n* **payment:** migration to new Stripe JS version ([#3126](https://github.com/bigcommerce/checkout-sdk-js/issues/3126)) ([fd6ec3a](https://github.com/bigcommerce/checkout-sdk-js/commit/fd6ec3abe5b8aac4eaf7b9501bb9869273a40a15))\n\n## [1.854.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.853.0...v1.854.0) (2026-01-23)\n\n\n### Features\n\n* **payment:** PAYPAL-6142 3DS not required create order ([8e2b717](https://github.com/bigcommerce/checkout-sdk-js/commit/8e2b717bf582fabcb9d02078553b67c27b8f6e8d))\n* **payment:** PAYPAL-6182 render logic for PayPal banner ([f835ed2](https://github.com/bigcommerce/checkout-sdk-js/commit/f835ed2bff88d31cc4347ab73c9a5ea9d7ec2474))\n\n## [1.853.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.852.0...v1.853.0) (2026-01-21)\n\n\n### Features\n\n* **payment:** update Stripe Link method payload ([#3122](https://github.com/bigcommerce/checkout-sdk-js/issues/3122)) ([b3b6fcc](https://github.com/bigcommerce/checkout-sdk-js/commit/b3b6fccba1a002a820dd70d4a118f3820695ca47))\n\n## [1.852.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.851.0...v1.852.0) (2026-01-21)\n\n\n### Features\n\n* **payment:** PAYPAL-6171 braintree request removal since it is no longer needed ([d7cd9a3](https://github.com/bigcommerce/checkout-sdk-js/commit/d7cd9a303ae4f6a1e60d13f7a1ebddb383d77be3))\n\n## [1.851.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.850.4...v1.851.0) (2026-01-19)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9450 Remove fallback strategies from essential build ([43e0f17](https://github.com/bigcommerce/checkout-sdk-js/commit/43e0f1760b9aa983f136e440f2c6d97ec72bf5ec))\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-9450 Remove more code around lazy_strategy experiment ([f7dac31](https://github.com/bigcommerce/checkout-sdk-js/commit/f7dac3166b718b953902cb730b286c2bec4ee87b))\n\n### [1.850.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.850.3...v1.850.4) (2026-01-19)\n\n\n### Bug Fixes\n\n* **payment:** Fix Stripe Link available shipping options error ([#3120](https://github.com/bigcommerce/checkout-sdk-js/issues/3120)) ([d9f2899](https://github.com/bigcommerce/checkout-sdk-js/commit/d9f28991ab13660df57545f8984ccc1b49d5309b))\n\n### [1.850.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.850.2...v1.850.3) (2026-01-15)\n\n\n### Bug Fixes\n\n* **payment:** Stripe OCS fix error after failed payment ([#3117](https://github.com/bigcommerce/checkout-sdk-js/issues/3117)) ([28f188a](https://github.com/bigcommerce/checkout-sdk-js/commit/28f188ad869a81bee1b76b53370a51c8f7b38e57))\n\n### [1.850.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.850.1...v1.850.2) (2026-01-14)\n\n### [1.850.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.850.0...v1.850.1) (2026-01-14)\n\n\n### Bug Fixes\n\n* **payment:** PI-4789 added https to afterpay script loading ([6fc186d](https://github.com/bigcommerce/checkout-sdk-js/commit/6fc186dae105baf8645f37c34426fb3aa5f9ecf8))\n\n## [1.850.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.849.0...v1.850.0) (2026-01-12)\n\n\n### Features\n\n* **payment:** PAYPAL-6141 update failed 3DS error message ([5655809](https://github.com/bigcommerce/checkout-sdk-js/commit/5655809813a6045a780cffece419f6c192f3c272))\n\n## [1.849.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.848.0...v1.849.0) (2026-01-07)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9744 Update Order Interface ([#3112](https://github.com/bigcommerce/checkout-sdk-js/issues/3112)) ([5d0b38d](https://github.com/bigcommerce/checkout-sdk-js/commit/5d0b38d999f78e797ce5c02729f18dae307c9701))\n\n## [1.848.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.847.0...v1.848.0) (2025-12-30)\n\n\n### Features\n\n* **payment:** PAYPAL-5948 filtered Afterpay id from the list of APMs before passing data to paypal sdk config ([df9918e](https://github.com/bigcommerce/checkout-sdk-js/commit/df9918e4a9066cef319e6092855599562fd17158))\n\n## [1.847.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.846.0...v1.847.0) (2025-12-24)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9646 Catch empty_cart on update checkout endpoint ([cb7bb03](https://github.com/bigcommerce/checkout-sdk-js/commit/cb7bb03643283c0ca6fd1453e18718265e5570f6))\n* **payment:** PI-4451 migrated the experiment PI-4025.klarna_single_radio_button to FF ([3036a96](https://github.com/bigcommerce/checkout-sdk-js/commit/3036a96ce56924cbd204e91dfc82799389839248))\n\n## [1.846.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.845.1...v1.846.0) (2025-12-18)\n\n\n### Features\n\n* **payment:** PAYPAL-6140 apple pay script loader related changes ([bec8637](https://github.com/bigcommerce/checkout-sdk-js/commit/bec8637f03d2ad7f8f8615ee164aa050e81981a4))\n\n### [1.845.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.845.0...v1.845.1) (2025-12-17)\n\n\n### Bug Fixes\n\n* **payment:** PI-4290 google pay shipping address required fix ([bdcc61f](https://github.com/bigcommerce/checkout-sdk-js/commit/bdcc61fa34e41b0f3bddb2de359c858dc3acc393))\n\n## [1.845.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.844.0...v1.845.0) (2025-12-16)\n\n\n### Features\n\n* **payment:** PI-4705 [Barclays] [Phase 4][FE] Remove the code ([#3099](https://github.com/bigcommerce/checkout-sdk-js/issues/3099)) ([ddc31be](https://github.com/bigcommerce/checkout-sdk-js/commit/ddc31be41ada42402fb91f40b057c70e2bb1341e))\n\n## [1.844.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.843.0...v1.844.0) (2025-12-16)\n\n\n### Features\n\n* **payment:** PI-4519 Cybersource endpoint migration ([#3089](https://github.com/bigcommerce/checkout-sdk-js/issues/3089)) ([e9f5c77](https://github.com/bigcommerce/checkout-sdk-js/commit/e9f5c7724545690d97aa47c2198ade00732f8a43))\n\n## [1.843.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.842.0...v1.843.0) (2025-12-16)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9680 Update Checkout Interface 2 ([#3103](https://github.com/bigcommerce/checkout-sdk-js/issues/3103)) ([083efa6](https://github.com/bigcommerce/checkout-sdk-js/commit/083efa6a93e8f4bc0f4629e87227ff018a36eef5))\n\n## [1.842.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.841.0...v1.842.0) (2025-12-15)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9680 Update Checkout Interface ([#3102](https://github.com/bigcommerce/checkout-sdk-js/issues/3102)) ([371017f](https://github.com/bigcommerce/checkout-sdk-js/commit/371017f9a849ea585fa7134e55a0e2d222555d1a))\n\n## [1.841.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.840.0...v1.841.0) (2025-12-12)\n\n\n### Features\n\n* **payment:** PAYPAL-6109 bt configuration updates ([#3100](https://github.com/bigcommerce/checkout-sdk-js/issues/3100)) ([b619213](https://github.com/bigcommerce/checkout-sdk-js/commit/b6192136bc2181259c05c6c35d7a2bcb555de430))\n\n## [1.840.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.839.1...v1.840.0) (2025-12-12)\n\n\n### Features\n\n* **payment:** PAYPAL-6090 unified fastlane key ([bb9c478](https://github.com/bigcommerce/checkout-sdk-js/commit/bb9c478cae109a7e330530122de363e7169e59f1))\n\n### [1.839.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.839.0...v1.839.1) (2025-12-11)\n\n\n### Bug Fixes\n\n* **checkout:** PI-4547 fix `apple-spinner` error when selecting Apple Pay ([#3082](https://github.com/bigcommerce/checkout-sdk-js/issues/3082)) ([1dbe162](https://github.com/bigcommerce/checkout-sdk-js/commit/1dbe1623e6af3ec33f0a22ee2a463b47884ad62d))\n\n## [1.839.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.838.1...v1.839.0) (2025-12-11)\n\n\n### Features\n\n* **payment:** PI-4492 google pay deinitialize block during paying ([53676a7](https://github.com/bigcommerce/checkout-sdk-js/commit/53676a72162614e18114b377676176106953f7a6))\n\n### [1.838.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.838.0...v1.838.1) (2025-12-11)\n\n\n### Bug Fixes\n\n* **checkout:** PI-4524 fix default instrument setup on additional action for Adyen v3 ([#3091](https://github.com/bigcommerce/checkout-sdk-js/issues/3091)) ([519e615](https://github.com/bigcommerce/checkout-sdk-js/commit/519e6150f3f5661fb4615cf3d3f13d2fabfb46f5))\n\n## [1.838.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.837.2...v1.838.0) (2025-12-11)\n\n\n### Features\n\n* **payment:** Rollout Experiment: PI-1679.trigger_update_stripe_payment_element ([#3096](https://github.com/bigcommerce/checkout-sdk-js/issues/3096)) ([23f45cc](https://github.com/bigcommerce/checkout-sdk-js/commit/23f45ccf1d4814744a4379831972de83b63b3ac6))\n\n### [1.837.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.837.1...v1.837.2) (2025-12-11)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-1135 pass enableLink to stripe upe ([0119e2c](https://github.com/bigcommerce/checkout-sdk-js/commit/0119e2c43ac9cc03dbb0ac3366ed6c948612704f))\n\n### [1.837.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.837.0...v1.837.1) (2025-12-04)\n\n\n### Bug Fixes\n\n* **payment:** fix issue with Stripe OCS and store credits ([#3094](https://github.com/bigcommerce/checkout-sdk-js/issues/3094)) ([6d94631](https://github.com/bigcommerce/checkout-sdk-js/commit/6d94631ab9bd62682afc2a89498d3ad5a4e1fa7c))\n\n## [1.837.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.836.0...v1.837.0) (2025-12-04)\n\n\n### Features\n\n* **payment:** add checkout locale to Stripe elements ([#3088](https://github.com/bigcommerce/checkout-sdk-js/issues/3088)) ([01b4fbb](https://github.com/bigcommerce/checkout-sdk-js/commit/01b4fbb1e56b6c9fbac8be280adc9a4119531984))\n\n## [1.836.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.835.0...v1.836.0) (2025-12-02)\n\n\n### Features\n\n* **payment:** PI-3536 [FE] Deprecate Masterpass ([#3085](https://github.com/bigcommerce/checkout-sdk-js/issues/3085)) ([ff5f0ba](https://github.com/bigcommerce/checkout-sdk-js/commit/ff5f0ba458ed37ce5838777fb36a46abd0136890))\n\n## [1.835.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.834.0...v1.835.0) (2025-12-02)\n\n\n### Features\n\n* **payment:** PAYPAL-5948 update bcp klarna to work with afterpay ([0a86d16](https://github.com/bigcommerce/checkout-sdk-js/commit/0a86d168e324f913de9833ac68e49561bb30067d))\n\n## [1.834.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.833.0...v1.834.0) (2025-12-01)\n\n\n### Features\n\n* **payment:** PI-4555 Changed path for afterpay-async.js on Prod under experiment PI-4555.clearpay_add_https_to_prod_script ([e763d14](https://github.com/bigcommerce/checkout-sdk-js/commit/e763d143c80d1d96187121fd52617efc406b7bfb))\n\n## [1.833.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.832.1...v1.833.0) (2025-12-01)\n\n\n### Features\n\n* **payment:** PAYPAL-6079 remove fastlane ppcp 3ds experiment ([42e8b50](https://github.com/bigcommerce/checkout-sdk-js/commit/42e8b50761e2d395cc399ae8fbdc12f2c5cd730f))\n\n### [1.832.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.832.0...v1.832.1) (2025-11-13)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-6056 bcp venmo method id ([bd3a8a2](https://github.com/bigcommerce/checkout-sdk-js/commit/bd3a8a201df8caa01990e75815038cbc765bb632))\n\n## [1.832.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.831.1...v1.832.0) (2025-11-13)\n\n\n### Features\n\n* **payment:** STRIPE-1093 clean up google pay 3ds experiment ([1f45230](https://github.com/bigcommerce/checkout-sdk-js/commit/1f45230cada35f8ac701a0af4560001f99924d8c))\n\n### [1.831.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.831.0...v1.831.1) (2025-11-13)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-9450 Finalize order with integration strategies ([b6793aa](https://github.com/bigcommerce/checkout-sdk-js/commit/b6793aa1522f2bf2ff31f1460779cd37d703e978))\n\n## [1.831.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.830.1...v1.831.0) (2025-11-12)\n\n\n### Features\n\n* **payment:** PAYPAL-6035 skips the error when the strategy has already been deinitialized during braintree hosted filed error ([#3064](https://github.com/bigcommerce/checkout-sdk-js/issues/3064)) ([17695fe](https://github.com/bigcommerce/checkout-sdk-js/commit/17695fef3bb37a0abe727b2123ac05b743a678c9))\n\n### [1.830.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.830.0...v1.830.1) (2025-11-12)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-9450 Do exact match when determining if certain strategy is already registered and warn if resolved value is different ([0ba2501](https://github.com/bigcommerce/checkout-sdk-js/commit/0ba25010befff10e1ea746764a2dab8bcd4a546f))\n* **checkout:** CHECKOUT-9450 Rename variable for clarity ([8f03932](https://github.com/bigcommerce/checkout-sdk-js/commit/8f039325ffcc92964e332ee9c5c16408b308ae12))\n\n## [1.830.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.829.3...v1.830.0) (2025-11-11)\n\n\n### Features\n\n* **payment:** PAYPAL-6033 add bcp klarna payment strategy ([eb677c9](https://github.com/bigcommerce/checkout-sdk-js/commit/eb677c91b92d9e42529f61c7a4dfbf42da42bdc4))\n\n\n### Code Refactoring\n\n* **payment:** move is redirect error to utils ([2f9c365](https://github.com/bigcommerce/checkout-sdk-js/commit/2f9c36546e61dad40fa65c8d81423e33515228a8))\n\n### [1.829.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.829.2...v1.829.3) (2025-11-11)\n\n### [1.829.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.829.1...v1.829.2) (2025-11-10)\n\n\n### Bug Fixes\n\n* **payment:** PI-4517 skip messages from wrong sources for the Access ([#3067](https://github.com/bigcommerce/checkout-sdk-js/issues/3067)) ([82912c9](https://github.com/bigcommerce/checkout-sdk-js/commit/82912c9da0fa153d5d50f6c823d9903fc15711af))\n\n### [1.829.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.829.0...v1.829.1) (2025-11-10)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-9450 Remove more code around lazy_strategy experiment ([1a4b406](https://github.com/bigcommerce/checkout-sdk-js/commit/1a4b4064187863d32fa4930ac40eda39563e99ef))\n\n## [1.829.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.828.1...v1.829.0) (2025-11-09)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9450 Remove fallback strategies from essential build ([bb56769](https://github.com/bigcommerce/checkout-sdk-js/commit/bb5676948a35c3fc0f4f4590d67624634a0448f1))\n\n### [1.828.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.828.0...v1.828.1) (2025-11-07)\n\n\n### Bug Fixes\n\n* **payment:** PI-4517 skip messages from wrong sources for the Access Worldpay ([#3065](https://github.com/bigcommerce/checkout-sdk-js/issues/3065)) ([b4a9a4a](https://github.com/bigcommerce/checkout-sdk-js/commit/b4a9a4a6aebfeae3517deb228c5dbf1926fdfbca))\n\n## [1.828.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.827.0...v1.828.0) (2025-11-06)\n\n\n### Features\n\n* **payment:** Stripe Link V2 cart page button tests ([d56d33a](https://github.com/bigcommerce/checkout-sdk-js/commit/d56d33a36ad54afa0633e122262a6eed8b6b9ad9))\n\n## [1.827.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.826.0...v1.827.0) (2025-11-05)\n\n\n### Features\n\n* **payment:** Stripe Link V2 cart page button ([bfe3a1a](https://github.com/bigcommerce/checkout-sdk-js/commit/bfe3a1a219cefa49171cd111a3657299c9b43551))\n\n## [1.826.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.825.0...v1.826.0) (2025-11-05)\n\n\n### Features\n\n* **payment:** PAYPAL-5768 Update PayPalCommerceAlternativeMethodsPaymentStrategy using paypal-utils package ([#3052](https://github.com/bigcommerce/checkout-sdk-js/issues/3052)) ([36398cb](https://github.com/bigcommerce/checkout-sdk-js/commit/36398cb16d93e7e2931b9fc418911faf05d3494a))\n\n## [1.825.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.824.0...v1.825.0) (2025-11-05)\n\n\n### Features\n\n* **payment:** PAYPAL-5760 Update PayPalCommerceFastlaneCustomerStrategy using paypal-utils package ([#3049](https://github.com/bigcommerce/checkout-sdk-js/issues/3049)) ([a9af957](https://github.com/bigcommerce/checkout-sdk-js/commit/a9af957c85d480e0516e9112e163163df803c9a7))\n\n## [1.824.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.823.0...v1.824.0) (2025-11-04)\n\n\n### Features\n\n* **payment:** PAYPAL-5723 add bcp button app switch ([c51d10e](https://github.com/bigcommerce/checkout-sdk-js/commit/c51d10e0cf1b2419c3c99e852a15a35a62bfd116))\n\n## [1.823.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.822.0...v1.823.0) (2025-11-03)\n\n\n### Features\n\n* **payment:** customer step buttons height 40px ([ea8c358](https://github.com/bigcommerce/checkout-sdk-js/commit/ea8c358096030102c24f5b39fcab4dc14e9eda69))\n* **payment:** hosted-input-validator tests fix ([8e5d189](https://github.com/bigcommerce/checkout-sdk-js/commit/8e5d1898fe5a2f0abee86044008f7a9a43d5ff9c))\n\n## [1.822.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.821.1...v1.822.0) (2025-10-30)\n\n\n### Features\n\n* **payment:** PAYPAL-5761 Update PaypalCommerceFastlanePaymentStrategy using paypal-utils package ([#3050](https://github.com/bigcommerce/checkout-sdk-js/issues/3050)) ([4473670](https://github.com/bigcommerce/checkout-sdk-js/commit/447367027724468f527534d7047f6ae18e10579f))\n\n### [1.821.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.821.0...v1.821.1) (2025-10-30)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-5990 moved loading callback to the place after PayPal hosted fields initialization ([#3051](https://github.com/bigcommerce/checkout-sdk-js/issues/3051)) ([9126a70](https://github.com/bigcommerce/checkout-sdk-js/commit/9126a70e2565f38ccddbcd5d45bbd780ae8f4b06))\n\n## [1.821.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.820.1...v1.821.0) (2025-10-29)\n\n\n### Features\n\n* **payment:** PAYPAL-5759 Update PayPalCommerceCreditCardsPaymentStrategy using paypal-utils package ([#3043](https://github.com/bigcommerce/checkout-sdk-js/issues/3043)) ([b1fe97b](https://github.com/bigcommerce/checkout-sdk-js/commit/b1fe97bf2e20a11b5b737aa61a003c5f8b450d40))\n\n### [1.820.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.820.0...v1.820.1) (2025-10-29)\n\n\n### Bug Fixes\n\n* **payment:** check liability shift for order create ([b93d26c](https://github.com/bigcommerce/checkout-sdk-js/commit/b93d26c5a461264c74931ca38a66a9d060d0d9a9))\n\n## [1.820.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.819.0...v1.820.0) (2025-10-29)\n\n\n### Features\n\n* **payment:** PI-4487 Research the reason of flaky Afterpay test ([#3040](https://github.com/bigcommerce/checkout-sdk-js/issues/3040)) ([f11d5d6](https://github.com/bigcommerce/checkout-sdk-js/commit/f11d5d6ef0135f7547872ebc5dfbbd1546f6775b))\n\n## [1.819.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.818.0...v1.819.0) (2025-10-28)\n\n\n### Features\n\n* **payment:** PI-4354 Remove/move checkoutcom and checkoutcom-custom payment strategy files to the separate package ([#3038](https://github.com/bigcommerce/checkout-sdk-js/issues/3038)) ([bce0d02](https://github.com/bigcommerce/checkout-sdk-js/commit/bce0d024b0b2698b37d28ebc32a52f35e811a610))\n\n## [1.818.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.817.0...v1.818.0) (2025-10-27)\n\n\n### Features\n\n* **payment:** PAYPAL-5995 braintree credit card options interface import ([#3044](https://github.com/bigcommerce/checkout-sdk-js/issues/3044)) ([f658e1c](https://github.com/bigcommerce/checkout-sdk-js/commit/f658e1c686443510adf958f7ad9b21bbf689c721))\n\n## [1.817.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.816.1...v1.817.0) (2025-10-27)\n\n\n### Features\n\n* **payment:** PAYPAL-5992 add check for clientToken ([#3037](https://github.com/bigcommerce/checkout-sdk-js/issues/3037)) ([7fb416a](https://github.com/bigcommerce/checkout-sdk-js/commit/7fb416a84827c70cefdd03f9a6fe80eba2ab4bf4))\n* **payment:** PAYPAL-5995 braintree removal ([#3036](https://github.com/bigcommerce/checkout-sdk-js/issues/3036)) ([515ea0b](https://github.com/bigcommerce/checkout-sdk-js/commit/515ea0b96c75dad0978051b4e855ab7c05f194cb))\n\n### [1.816.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.816.0...v1.816.1) (2025-10-27)\n\n## [1.816.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.815.0...v1.816.0) (2025-10-23)\n\n\n### Features\n\n* **payment:** PAYPAL-5990 added onLoadComplete call after paypal sdk loaded ([#3039](https://github.com/bigcommerce/checkout-sdk-js/issues/3039)) ([6e1b5a8](https://github.com/bigcommerce/checkout-sdk-js/commit/6e1b5a82bb40d54d178d6a4feb2b147ac0cac161))\n\n## [1.815.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.814.0...v1.815.0) (2025-10-23)\n\n\n### Features\n\n* **payment:** PAYPAL-5984 filtered Klarna id from the list of APMs before passing data to paypal sdk config ([#3031](https://github.com/bigcommerce/checkout-sdk-js/issues/3031)) ([8c91176](https://github.com/bigcommerce/checkout-sdk-js/commit/8c91176b1678ad878ae8258aa7581d030e313c92))\n\n## [1.814.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.813.2...v1.814.0) (2025-10-21)\n\n\n### Features\n\n* **payment:** PI-4352 Move cba-mpgs payment strategy to the separate… ([#3034](https://github.com/bigcommerce/checkout-sdk-js/issues/3034)) ([4adb3a4](https://github.com/bigcommerce/checkout-sdk-js/commit/4adb3a413fb667667fd09aeeabfb330bd6785e24))\n\n### [1.813.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.813.1...v1.813.2) (2025-10-20)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2197 rename paypal-express payment initialization type ([b550975](https://github.com/bigcommerce/checkout-sdk-js/commit/b550975a25e0ee7af9cb589091c6a8691ed00f1e))\n\n### [1.813.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.813.0...v1.813.1) (2025-10-20)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2197 delete paypal-express payment strategy from core ([9884c4b](https://github.com/bigcommerce/checkout-sdk-js/commit/9884c4bc7b8923b71a946594678aa686cedeb410))\n\n## [1.813.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.812.0...v1.813.0) (2025-10-20)\n\n\n### Features\n\n* **payment:** PAYPAL-5758 update PaypalCommerceFastlaneShippingStrategy using paypal-utils package ([#3032](https://github.com/bigcommerce/checkout-sdk-js/issues/3032)) ([689b6f7](https://github.com/bigcommerce/checkout-sdk-js/commit/689b6f7533a789910821c819db5d083f9be958ca))\n\n## [1.812.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.811.0...v1.812.0) (2025-10-17)\n\n\n### Features\n\n* **payment:** PAYPAL-2615 removed braintree visa checkout from core ([#3024](https://github.com/bigcommerce/checkout-sdk-js/issues/3024)) ([f444685](https://github.com/bigcommerce/checkout-sdk-js/commit/f444685c29c3be71c1f13dabb2f39d61b610d1a0))\n\n## [1.811.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.810.0...v1.811.0) (2025-10-16)\n\n\n### Features\n\n* **payment:** PAYPAL-5338 remove instrument declined experiment for ppc ([04895a7](https://github.com/bigcommerce/checkout-sdk-js/commit/04895a7aef3ae93c931d61307b67f22728ebc72d))\n* **payment:** PAYPAL-5339 remove instrument declined experiment for braintree ([1d65cdb](https://github.com/bigcommerce/checkout-sdk-js/commit/1d65cdb536465e3c59fe74623af1b27cf624209b))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2197 move payment strategy to paypal-express-integration package ([97a4e84](https://github.com/bigcommerce/checkout-sdk-js/commit/97a4e849e60afd95677c74ced4bfa8e14c9ebdcf))\n\n## [1.810.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.809.2...v1.810.0) (2025-10-16)\n\n\n### Features\n\n* **payment:** PAYPAL-5719 added appSwitch for PPCP payment strategy ([#3023](https://github.com/bigcommerce/checkout-sdk-js/issues/3023)) ([7e599c2](https://github.com/bigcommerce/checkout-sdk-js/commit/7e599c224b90b7f8ded4c5a883ffd467f5356b7f))\n\n### [1.809.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.809.1...v1.809.2) (2025-10-16)\n\n\n### Code Refactoring\n\n* **payment:** move BNZ and Barclays to cybersource implementation ([#3027](https://github.com/bigcommerce/checkout-sdk-js/issues/3027)) ([0a98041](https://github.com/bigcommerce/checkout-sdk-js/commit/0a98041c9ad17b28a51ac1c1bb6db5a09b2dc4b2))\n\n### [1.809.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.809.0...v1.809.1) (2025-10-16)\n\n## [1.809.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.808.0...v1.809.0) (2025-10-15)\n\n\n### Features\n\n* **payment:** create Stripe utils package ([#3012](https://github.com/bigcommerce/checkout-sdk-js/issues/3012)) ([e494d5e](https://github.com/bigcommerce/checkout-sdk-js/commit/e494d5e16aeb7dc7911eb4a7e68dd550fb051634))\n\n## [1.808.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.807.0...v1.808.0) (2025-10-07)\n\n\n### Features\n\n* **core:** CHECKOUT-9513 Add option to pass initial state during initialisation ([b0d9a83](https://github.com/bigcommerce/checkout-sdk-js/commit/b0d9a837c998759a1d8da46a9972c66e8282e23b))\n* **core:** CHECKOUT-9513 Pass initial state through separate method to reduce work in single microtask ([ce90ae3](https://github.com/bigcommerce/checkout-sdk-js/commit/ce90ae349f6056aee792a568dcd571d7927f1899))\n* **payment:** PAYPAL-2615 moved braintree visa checkout to separate package ([#3021](https://github.com/bigcommerce/checkout-sdk-js/issues/3021)) ([1656773](https://github.com/bigcommerce/checkout-sdk-js/commit/1656773b53b9c406214896aaefe1a2839ecb7854))\n\n## [1.807.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.806.0...v1.807.0) (2025-10-06)\n\n\n### Features\n\n* **payment:** PAYPAL-5718 added appSwitch for PPCP customer strategy ([#3017](https://github.com/bigcommerce/checkout-sdk-js/issues/3017)) ([2da0cb5](https://github.com/bigcommerce/checkout-sdk-js/commit/2da0cb5ed3e35f260d1c0d9f55d7f74cd3aba330))\n\n## [1.806.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.805.0...v1.806.0) (2025-10-03)\n\n\n### Features\n\n* **payment:** PAYPAL-5717 Added AppSwitch for PPCP Button ([#3022](https://github.com/bigcommerce/checkout-sdk-js/issues/3022)) ([816e605](https://github.com/bigcommerce/checkout-sdk-js/commit/816e605fdd7b7855a5b1264a6245ea696cff4e44))\n\n## [1.805.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.804.0...v1.805.0) (2025-10-01)\n\n\n### Features\n\n* **payment:** PAYPAL-0 fix validation flow pp payment strategies ([#3019](https://github.com/bigcommerce/checkout-sdk-js/issues/3019)) ([db8646f](https://github.com/bigcommerce/checkout-sdk-js/commit/db8646f4e7b44dd8e54636a90acd89d7b7420a31))\n\n## [1.804.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.803.0...v1.804.0) (2025-10-01)\n\n\n### Features\n\n* **core:** CHECKOUT-9450 Lazy load payment strategies through essential build ([3f76e30](https://github.com/bigcommerce/checkout-sdk-js/commit/3f76e3029601bab395f2e8593d2ca9ec4f1ada72))\n\n\n### Bug Fixes\n\n* **payment:** blusnapv2 removal from the core/payments directory ([#3015](https://github.com/bigcommerce/checkout-sdk-js/issues/3015)) ([64d49e9](https://github.com/bigcommerce/checkout-sdk-js/commit/64d49e9044d25b683c194a3130777e57222194f6))\n* **payment:** PAYPAL-5925 fixed 3ds PPCP FL nonce ([#3013](https://github.com/bigcommerce/checkout-sdk-js/issues/3013)) ([f889eee](https://github.com/bigcommerce/checkout-sdk-js/commit/f889eee664bf5c583e2c77963155cabad51137e6))\n\n## [1.803.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.802.0...v1.803.0) (2025-09-29)\n\n\n### Features\n\n* **core:** CHECKOUT-9450 Export ESM modules and separate payment integration strategies from core bundle ([c88606f](https://github.com/bigcommerce/checkout-sdk-js/commit/c88606f92a53f75562bd45e9844f48bd698bb9e9))\n* **payment:** Stripe OCS Link captureMethod added ([2d8ac28](https://github.com/bigcommerce/checkout-sdk-js/commit/2d8ac28ab7869b8675683fc992a91370a8d95b19))\n\n## [1.802.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.801.0...v1.802.0) (2025-09-22)\n\n\n### Features\n\n* **payment:** PAYPAL-5348 remove paypal 3ds experiment ([b843e02](https://github.com/bigcommerce/checkout-sdk-js/commit/b843e02fac1cc1980b1fea9727fecf95e79387f0))\n\n## [1.801.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.800.0...v1.801.0) (2025-09-19)\n\n\n### Features\n\n* **payment:** PAYPAL-5386 remove new apple pay version param ([e4e561b](https://github.com/bigcommerce/checkout-sdk-js/commit/e4e561b4886450ba4ec0d9d5a374adc96a0f11f4))\n* **payment:** PAYPAL-5386 remove new apple pay version param ([9456f76](https://github.com/bigcommerce/checkout-sdk-js/commit/9456f76df3475ba09a15ead9ad9cb886338a8fe3))\n\n## [1.800.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.799.0...v1.800.0) (2025-09-19)\n\n\n### Features\n\n* **payment:** PAYPAL-5743  paypal-button-creation-service ([#3003](https://github.com/bigcommerce/checkout-sdk-js/issues/3003)) ([ff0d0c1](https://github.com/bigcommerce/checkout-sdk-js/commit/ff0d0c1e453da69437fd7fe5c7ff700d175588ed))\n\n## [1.799.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.798.0...v1.799.0) (2025-09-18)\n\n\n### Features\n\n* **payment:** PAYPAL-5730 fix error handling ([#3006](https://github.com/bigcommerce/checkout-sdk-js/issues/3006)) ([903646a](https://github.com/bigcommerce/checkout-sdk-js/commit/903646a230b5a55b2334e9f017d450b721335d69))\n\n## [1.798.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.797.0...v1.798.0) (2025-09-18)\n\n\n### Features\n\n* **payment:** PAYPAL-5809 Updated Braintree SDK version ([#2994](https://github.com/bigcommerce/checkout-sdk-js/issues/2994)) ([31370db](https://github.com/bigcommerce/checkout-sdk-js/commit/31370db348e2c52e3707cb47d3f93a0e48c42864))\n\n## [1.797.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.796.0...v1.797.0) (2025-09-18)\n\n\n### Features\n\n* **payment:** PAYPAL-5891 fixed way of getting of appswitch experiment ([#3007](https://github.com/bigcommerce/checkout-sdk-js/issues/3007)) ([1e19653](https://github.com/bigcommerce/checkout-sdk-js/commit/1e19653c207364730e7e558f5787f0d0bc96b11c))\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-9506 Catch empty cart error message in mutation and return it to clients ([#3005](https://github.com/bigcommerce/checkout-sdk-js/issues/3005)) ([d166eba](https://github.com/bigcommerce/checkout-sdk-js/commit/d166eba19636802c84e845a4774d9398027b623e))\n\n## [1.796.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.795.1...v1.796.0) (2025-09-15)\n\n\n### Features\n\n* **payment:** PAYPAL-5875 covered shipping callbacks with experiment ([#3001](https://github.com/bigcommerce/checkout-sdk-js/issues/3001)) ([dfac019](https://github.com/bigcommerce/checkout-sdk-js/commit/dfac01941269e0ae020f349d12f44720bf3a8b82))\n\n### [1.795.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.795.0...v1.795.1) (2025-09-15)\n\n## [1.795.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.794.4...v1.795.0) (2025-09-12)\n\n\n### Features\n\n* **payment:** PAYPAL-5742  PPC/BCP service packages refactoring ([#2995](https://github.com/bigcommerce/checkout-sdk-js/issues/2995)) ([a37be69](https://github.com/bigcommerce/checkout-sdk-js/commit/a37be697e3f90a3c5e4a3558ae5650769b3f49ad))\n\n### [1.794.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.794.3...v1.794.4) (2025-09-12)\n\n\n### Code Refactoring\n\n* **core:** CHECKOUT-9450 Upgrade webpack version to improve tree-shaking ([56f32f5](https://github.com/bigcommerce/checkout-sdk-js/commit/56f32f53c5185c7c252496e1721e5c8ed24512af))\n\n### [1.794.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.794.1...v1.794.3) (2025-09-11)\n\n### [1.794.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.794.1...v1.794.2) (2025-09-11)\n\n### [1.794.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.794.0...v1.794.1) (2025-09-11)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-9493 Pass checkout id to hosted form ppsdk providers ([#2998](https://github.com/bigcommerce/checkout-sdk-js/issues/2998)) ([dab4e00](https://github.com/bigcommerce/checkout-sdk-js/commit/dab4e00bbb786f285a0764588ef0e68c732fe4f2))\n\n## [1.794.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.793.1...v1.794.0) (2025-09-05)\n\n\n### Features\n\n* **payment:** PAYPAL-5806 bt cart validation fix ([#2992](https://github.com/bigcommerce/checkout-sdk-js/issues/2992)) ([d0072c1](https://github.com/bigcommerce/checkout-sdk-js/commit/d0072c1cc8fe93777ad348615fcd4ac9ec13f631))\n\n### [1.793.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.793.0...v1.793.1) (2025-09-05)\n\n\n### Bug Fixes\n\n* **payment:** Stripe OCS fix token property in payload ([#2991](https://github.com/bigcommerce/checkout-sdk-js/issues/2991)) ([b16997b](https://github.com/bigcommerce/checkout-sdk-js/commit/b16997b13fb86d4db1db7387e14a1d6282f39af3))\n\n## [1.793.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.792.0...v1.793.0) (2025-09-03)\n\n\n### Features\n\n* **payment:** PAYPAL-5741 combined paypal-commerce-utils and bigcommerce-payments-utils into paypal-utils ([#2990](https://github.com/bigcommerce/checkout-sdk-js/issues/2990)) ([2940929](https://github.com/bigcommerce/checkout-sdk-js/commit/294092962272a0edeae80366b31ae6ce7655df34))\n\n## [1.792.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.791.0...v1.792.0) (2025-09-02)\n\n\n### Features\n\n* **payment:** Stripe V3 allow_redirect added ([c7cdbbc](https://github.com/bigcommerce/checkout-sdk-js/commit/c7cdbbc4ba5142b36e5270c8d085844cb7fd9fa7))\n\n## [1.791.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.790.0...v1.791.0) (2025-09-02)\n\n\n### Features\n\n* **payment:** Stripe UPE allow_redirect added ([85289e9](https://github.com/bigcommerce/checkout-sdk-js/commit/85289e909dd48b47a03f2dda79e78a3d60ac31e5))\n\n## [1.790.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.789.0...v1.790.0) (2025-08-29)\n\n\n### Features\n\n* **payment:** PAYPAL-5740 paypal-utils package ([#2988](https://github.com/bigcommerce/checkout-sdk-js/issues/2988)) ([3007614](https://github.com/bigcommerce/checkout-sdk-js/commit/30076143bf4056ebecf8029aa663c09e3f01d375))\n\n## [1.789.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.788.6...v1.789.0) (2025-08-27)\n\n\n### Features\n\n* **payment:** PAYPAL-5660 add Braintree PayPal message render condition ([dcc08ff](https://github.com/bigcommerce/checkout-sdk-js/commit/dcc08ff83ab61a03dbdebc353956c714ca858d83))\n* **payment:** PAYPAL-5660 add Braintree PayPal message render condition ([cf256f6](https://github.com/bigcommerce/checkout-sdk-js/commit/cf256f673e209e51da33fd99ed460ee8f27d6c31))\n\n### [1.788.6](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.788.5...v1.788.6) (2025-08-26)\n\n### [1.788.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.788.4...v1.788.5) (2025-08-25)\n\n\n### Bug Fixes\n\n* **payment:** PI-4266 Apple Pay fails on product pages with reCAPTCHA enabled ([#2982](https://github.com/bigcommerce/checkout-sdk-js/issues/2982)) ([668c970](https://github.com/bigcommerce/checkout-sdk-js/commit/668c970fa40be0de752ac26476a6bc2217de63f9))\n\n### [1.788.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.788.3...v1.788.4) (2025-08-21)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-5710 removed BT Venmo payment strategy from core ([#2977](https://github.com/bigcommerce/checkout-sdk-js/issues/2977)) ([7b0af01](https://github.com/bigcommerce/checkout-sdk-js/commit/7b0af011c5a5ac8074ab886b59a667a3204bc75d))\n\n### [1.788.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.788.2...v1.788.3) (2025-08-20)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-5710 Moved Braintree Venmo payment strategy to packages ([#2976](https://github.com/bigcommerce/checkout-sdk-js/issues/2976)) ([28b3bcd](https://github.com/bigcommerce/checkout-sdk-js/commit/28b3bcdb4cb14decf3021865dd93a9c9a3a3d78e))\n\n### [1.788.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.788.1...v1.788.2) (2025-08-20)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-9448 check for checkout id before attaching to iframe ([#2980](https://github.com/bigcommerce/checkout-sdk-js/issues/2980)) ([7ed5eb7](https://github.com/bigcommerce/checkout-sdk-js/commit/7ed5eb742e2f9b0adb68d2beff8dd28d7079f970))\n\n### [1.788.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.788.0...v1.788.1) (2025-08-20)\n\n## [1.788.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.787.0...v1.788.0) (2025-08-14)\n\n\n### Features\n\n* **payment:** PAYPAL-5712 added support for Braintree versions loaded from third-party resources. ([#2975](https://github.com/bigcommerce/checkout-sdk-js/issues/2975)) ([9d1cafd](https://github.com/bigcommerce/checkout-sdk-js/commit/9d1cafd0c9e6399e0c0dc35f51af05114c404416))\n\n## [1.787.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.786.0...v1.787.0) (2025-08-13)\n\n\n### Features\n\n* **customer:** CHECKOUT-9403 Pass cart id in payload to sign in and sign out for customer ([#2971](https://github.com/bigcommerce/checkout-sdk-js/issues/2971)) ([3cea9cd](https://github.com/bigcommerce/checkout-sdk-js/commit/3cea9cdbd54e5deece1405015bb595de09df8785))\n\n## [1.786.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.785.0...v1.786.0) (2025-08-13)\n\n\n### Features\n\n* **payment:** PAYPAL-5729 provided 3ds option to avoid specific error related to 3ds request error when fastlane is enabled ([#2972](https://github.com/bigcommerce/checkout-sdk-js/issues/2972)) ([a50dbd9](https://github.com/bigcommerce/checkout-sdk-js/commit/a50dbd922ac9ab9ca193c33ba58a9d992685826b))\n\n## [1.785.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.784.1...v1.785.0) (2025-08-12)\n\n\n### Features\n\n* **payment:** Stripe OCS add selected payment method to payments payload ([#2969](https://github.com/bigcommerce/checkout-sdk-js/issues/2969)) ([7f1d234](https://github.com/bigcommerce/checkout-sdk-js/commit/7f1d234d45718c4dfa92e84ac3a275aea774bc26))\n\n### [1.784.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.784.0...v1.784.1) (2025-08-12)\n\n\n### Code Refactoring\n\n* **checkout:** PI-4255 deprecate CCAvenueMars ([#2967](https://github.com/bigcommerce/checkout-sdk-js/issues/2967)) ([97ad8f1](https://github.com/bigcommerce/checkout-sdk-js/commit/97ad8f127e1e74cb50ec861774e84cdc2f569aaf))\n\n## [1.784.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.783.0...v1.784.0) (2025-08-11)\n\n\n### Features\n\n* **payment:** Stripe OCS preloader ([#2959](https://github.com/bigcommerce/checkout-sdk-js/issues/2959)) ([0ea4a96](https://github.com/bigcommerce/checkout-sdk-js/commit/0ea4a96baad51828b8ecb7f69b951f960976017d))\n\n## [1.783.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.782.0...v1.783.0) (2025-08-11)\n\n\n### Features\n\n* **payment:** Stripe OCS ACH vaultings ([#2965](https://github.com/bigcommerce/checkout-sdk-js/issues/2965)) ([1de461c](https://github.com/bigcommerce/checkout-sdk-js/commit/1de461c8da7ffb0fdef6fda10438572ce9a75f80))\n\n## [1.782.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.781.3...v1.782.0) (2025-08-11)\n\n\n### Features\n\n* **payment:** PAYPAL-5657 hide braintree card banner implementation ([f0afdbf](https://github.com/bigcommerce/checkout-sdk-js/commit/f0afdbf0cc528508a1fa781131686c3da15fed76))\n* **payment:** PAYPAL-5657 hide braintree card banner implementation ([#2966](https://github.com/bigcommerce/checkout-sdk-js/issues/2966)) ([5ecff91](https://github.com/bigcommerce/checkout-sdk-js/commit/5ecff91929e660ff59d62f1f1ddd8d3948d38822))\n\n### [1.781.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.781.2...v1.781.3) (2025-08-08)\n\n\n### Code Refactoring\n\n* **payment:** Removed BT Credit Card Payment Strategy from core ([#2955](https://github.com/bigcommerce/checkout-sdk-js/issues/2955)) ([b7a62b1](https://github.com/bigcommerce/checkout-sdk-js/commit/b7a62b14eeb6d9c9f451bf4cad48351a4b507e92))\n\n### [1.781.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.781.1...v1.781.2) (2025-08-07)\n\n\n### Code Refactoring\n\n* **payment:** Moved BT Credit Card Payment Strategy ([#2944](https://github.com/bigcommerce/checkout-sdk-js/issues/2944)) ([9ea7174](https://github.com/bigcommerce/checkout-sdk-js/commit/9ea7174d66282a1aab9035345384232aee56dbc8))\n\n### [1.781.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.781.0...v1.781.1) (2025-08-07)\n\n\n### Bug Fixes\n\n* **checkout:** Update Storefront APIs Doc URL ([#2963](https://github.com/bigcommerce/checkout-sdk-js/issues/2963)) ([9bead28](https://github.com/bigcommerce/checkout-sdk-js/commit/9bead28a24a21256653c9b8a781c0e400151fe20))\n\n## [1.781.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.780.0...v1.781.0) (2025-08-06)\n\n\n### Features\n\n* **payment:** Remove applepay method filtering logic to show applepay method in Payment Step for third-party browsers ([#2957](https://github.com/bigcommerce/checkout-sdk-js/issues/2957)) ([07c7cb6](https://github.com/bigcommerce/checkout-sdk-js/commit/07c7cb6cb1dedfb52cd80b7ff1b3314e287ce21e))\n\n## [1.780.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.779.0...v1.780.0) (2025-08-05)\n\n\n### Features\n\n* **payment:** Changed PaymentInstrument interface ([#2956](https://github.com/bigcommerce/checkout-sdk-js/issues/2956)) ([23722d6](https://github.com/bigcommerce/checkout-sdk-js/commit/23722d66fd88e072f88c6e6bb1ba5a8915ca339d))\n\n## [1.779.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.778.6...v1.779.0) (2025-08-05)\n\n\n### Features\n\n* **payment:** updated venmo button strategy with providing loadDefaultCheckout to load store config ([#2958](https://github.com/bigcommerce/checkout-sdk-js/issues/2958)) ([54fd9d5](https://github.com/bigcommerce/checkout-sdk-js/commit/54fd9d5f7c6011becba2784eac52419e963abafd))\n\n### [1.778.6](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.778.5...v1.778.6) (2025-08-04)\n\n\n### Bug Fixes\n\n* **payment:** Stripe Link v2 on cancel event added ([5fc2e48](https://github.com/bigcommerce/checkout-sdk-js/commit/5fc2e48472a0b92ec460c7b5df2a08647f38ab4c))\n\n### [1.778.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.778.4...v1.778.5) (2025-07-31)\n\n\n### Code Refactoring\n\n* **payment:** updated Braintree Fastlane to use cookies instead of local storage ([#2953](https://github.com/bigcommerce/checkout-sdk-js/issues/2953)) ([d30a21e](https://github.com/bigcommerce/checkout-sdk-js/commit/d30a21eaf81eaa789c16d4347533c859eefc618b))\n\n### [1.778.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.778.3...v1.778.4) (2025-07-30)\n\n\n### Bug Fixes\n\n* **payment:** updated getSDKVersion method in BraintreeSDKVersionManager with getStoreConfig instead of getStoreConfigOrThrow ([#2952](https://github.com/bigcommerce/checkout-sdk-js/issues/2952)) ([3e7aa25](https://github.com/bigcommerce/checkout-sdk-js/commit/3e7aa25f7d47fe2c23ba4b68196ec0081d77cba3))\n\n### [1.778.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.778.2...v1.778.3) (2025-07-30)\n\n\n### Bug Fixes\n\n* **payment:** Fix threeDSVerification method assignment ([#2951](https://github.com/bigcommerce/checkout-sdk-js/issues/2951)) ([810bdeb](https://github.com/bigcommerce/checkout-sdk-js/commit/810bdeb74f646a2da476d3060103bd606d07bb75))\n\n### [1.778.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.778.1...v1.778.2) (2025-07-30)\n\n\n### Bug Fixes\n\n* **payment:** Fix ppcp fl request error message ([#2950](https://github.com/bigcommerce/checkout-sdk-js/issues/2950)) ([e8f0d3d](https://github.com/bigcommerce/checkout-sdk-js/commit/e8f0d3d376d55268754e8e3679dcb51069b94804))\n\n### [1.778.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.778.0...v1.778.1) (2025-07-30)\n\n\n### Code Refactoring\n\n* **payment:** updated BigCommercePaymentsFastlane strategies implementation to use cookies instead of local storage ([#2948](https://github.com/bigcommerce/checkout-sdk-js/issues/2948)) ([9380161](https://github.com/bigcommerce/checkout-sdk-js/commit/93801611665718d385f235a5e3b2c55104a4bdac))\n\n## [1.778.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.777.1...v1.778.0) (2025-07-28)\n\n\n### Features\n\n* **payment:** update braintree version ([#2943](https://github.com/bigcommerce/checkout-sdk-js/issues/2943)) ([74b075c](https://github.com/bigcommerce/checkout-sdk-js/commit/74b075c164b3222634c7b36171ad56e9a8d705c4))\n\n### [1.777.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.777.0...v1.777.1) (2025-07-28)\n\n\n### Bug Fixes\n\n* **payment:** Stripe Link v2 Klarna disable ([9b253b9](https://github.com/bigcommerce/checkout-sdk-js/commit/9b253b942860f324d40c013c7d33fb39917432da))\n\n## [1.777.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.776.0...v1.777.0) (2025-07-28)\n\n\n### Features\n\n* **payment:** Address is not populated to Klarna modal ([#2939](https://github.com/bigcommerce/checkout-sdk-js/issues/2939)) ([8c07840](https://github.com/bigcommerce/checkout-sdk-js/commit/8c0784009c5fdacdbbb5ebf3b72fd040f94c2603))\n\n## [1.776.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.775.0...v1.776.0) (2025-07-24)\n\n\n### Features\n\n* **payment:** Added BCP FL corresponding error for 422 payment status ([#2941](https://github.com/bigcommerce/checkout-sdk-js/issues/2941)) ([255fcfe](https://github.com/bigcommerce/checkout-sdk-js/commit/255fcfea3722bc8af5190e8cbf565e8504cfe6d9))\n\n## [1.775.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.774.0...v1.775.0) (2025-07-24)\n\n\n### Features\n\n* **payment:** Added liability shift processing for BCP FL ([#2940](https://github.com/bigcommerce/checkout-sdk-js/issues/2940)) ([df840cc](https://github.com/bigcommerce/checkout-sdk-js/commit/df840cc2e138aad54810de27fd991870db50bf72))\n\n## [1.774.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.773.0...v1.774.0) (2025-07-23)\n\n\n### Features\n\n* **payment:** added BraintreeSDKVersionManager ([#2932](https://github.com/bigcommerce/checkout-sdk-js/issues/2932)) ([afa2f19](https://github.com/bigcommerce/checkout-sdk-js/commit/afa2f195a74cfe266d67183a8e47060c1e033b9f))\n\n## [1.773.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.772.0...v1.773.0) (2025-07-23)\n\n\n### Features\n\n* **payment:** Added corresponding error for 422 payment status ([#2938](https://github.com/bigcommerce/checkout-sdk-js/issues/2938)) ([31c3813](https://github.com/bigcommerce/checkout-sdk-js/commit/31c3813dcca0861a73ffb9e6e9a4559dd15427aa))\n\n## [1.772.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.771.0...v1.772.0) (2025-07-23)\n\n\n### Features\n\n* **payment:** Create order after liability shift passed when 3ds is on ([#2936](https://github.com/bigcommerce/checkout-sdk-js/issues/2936)) ([51ddb2e](https://github.com/bigcommerce/checkout-sdk-js/commit/51ddb2ee24c603fb9cf99170a132bd6c62e14205))\n\n\n### Bug Fixes\n\n* **customer:** Fetch updated checkout after carts are merged ([#2923](https://github.com/bigcommerce/checkout-sdk-js/issues/2923)) ([b5c94c4](https://github.com/bigcommerce/checkout-sdk-js/commit/b5c94c424a52d1df62e77730aa724cc31a3c4622))\n\n## [1.771.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.770.0...v1.771.0) (2025-07-22)\n\n\n### Features\n\n* **payment:** Enable Stripe OCS Link from control panel ([#2937](https://github.com/bigcommerce/checkout-sdk-js/issues/2937)) ([4808a58](https://github.com/bigcommerce/checkout-sdk-js/commit/4808a58ddae67908562d4da475f347bd72b9bd3b))\n\n## [1.770.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.769.0...v1.770.0) (2025-07-21)\n\n\n### Features\n\n* **payment:** added banner additional check ([#2929](https://github.com/bigcommerce/checkout-sdk-js/issues/2929)) ([9864c00](https://github.com/bigcommerce/checkout-sdk-js/commit/9864c0045b840fcab3f416a648a0b678a1d9808b))\n\n## [1.769.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.768.1...v1.769.0) (2025-07-21)\n\n\n### Features\n\n* **payment:** Stripe Link v2 options updated ([e7dc95d](https://github.com/bigcommerce/checkout-sdk-js/commit/e7dc95d19d8fa35e2027d28a772a520788d00f8f))\n\n### [1.768.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.768.0...v1.768.1) (2025-07-21)\n\n\n### Bug Fixes\n\n* **payment:** updated BCP iDeal amp methods with related changes from PPCP ([#2933](https://github.com/bigcommerce/checkout-sdk-js/issues/2933)) ([7b91576](https://github.com/bigcommerce/checkout-sdk-js/commit/7b91576ed43905ccf27cf25edf6827ffc0b77068))\n\n## [1.768.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.767.2...v1.768.0) (2025-07-21)\n\n\n### Features\n\n* **payment:** Stripe OCS add Link logic to accordion ([#2935](https://github.com/bigcommerce/checkout-sdk-js/issues/2935)) ([cc6e7e1](https://github.com/bigcommerce/checkout-sdk-js/commit/cc6e7e14db3a12819a1357e3ccea8aeca261cba8))\n\n### [1.767.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.767.1...v1.767.2) (2025-07-17)\n\n\n### Bug Fixes\n\n* **payment:** updated provider id used for order creation in BCP Ratepay Payment strategy ([#2931](https://github.com/bigcommerce/checkout-sdk-js/issues/2931)) ([959b152](https://github.com/bigcommerce/checkout-sdk-js/commit/959b1529a8501c792174c5cc458cf8e1516533d8))\n\n### [1.767.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.767.0...v1.767.1) (2025-07-17)\n\n\n### Code Refactoring\n\n* **payment:** updated ppcp fastlane implementation to use cookies instead of local storage ([#2930](https://github.com/bigcommerce/checkout-sdk-js/issues/2930)) ([fe6931d](https://github.com/bigcommerce/checkout-sdk-js/commit/fe6931d94062afbccc679ff7c478a9fd05bd6d10))\n\n## [1.767.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.766.0...v1.767.0) (2025-07-16)\n\n\n### Features\n\n* **payment:** Stripe OCS add state code to stripe confirmation details ([#2928](https://github.com/bigcommerce/checkout-sdk-js/issues/2928)) ([dcf5c83](https://github.com/bigcommerce/checkout-sdk-js/commit/dcf5c8312386e8a70b63d577acf53804aea5db37))\n\n## [1.766.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.765.0...v1.766.0) (2025-07-14)\n\n\n### Features\n\n* **payment:** Stripe OCS add status for  instrument vaulting ([#2927](https://github.com/bigcommerce/checkout-sdk-js/issues/2927)) ([1a7be7c](https://github.com/bigcommerce/checkout-sdk-js/commit/1a7be7c6a4cb53cbb058274f82aecdbc6f5e13e1))\n\n## [1.765.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.764.0...v1.765.0) (2025-07-14)\n\n\n### Features\n\n* **payment:** added bigcommerce payment related instruments to a list of supported instruments ([#2924](https://github.com/bigcommerce/checkout-sdk-js/issues/2924)) ([6739a5d](https://github.com/bigcommerce/checkout-sdk-js/commit/6739a5d3df13d0743355d2a2e86a0c70dda7c6f2))\n\n## [1.764.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.763.0...v1.764.0) (2025-07-14)\n\n\n### Features\n\n* **payment:** hot fix (Sentry issue) ([#2926](https://github.com/bigcommerce/checkout-sdk-js/issues/2926)) ([2697017](https://github.com/bigcommerce/checkout-sdk-js/commit/26970177476ec3b17211006848a5b25e88c716dc))\n\n## [1.763.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.762.0...v1.763.0) (2025-07-10)\n\n\n### Features\n\n* **payment:** Stripe Link v2 loading indicator added ([a90146c](https://github.com/bigcommerce/checkout-sdk-js/commit/a90146c9141b693816f52c9b3fccc897a058944b))\n\n## [1.762.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.761.0...v1.762.0) (2025-07-10)\n\n\n### Features\n\n* **payment:** Added BCP FL 3DS ([#2922](https://github.com/bigcommerce/checkout-sdk-js/issues/2922)) ([ca4dbae](https://github.com/bigcommerce/checkout-sdk-js/commit/ca4dbaefe02983dbe4321dcbce92a6d80d133a54))\n\n## [1.761.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.760.0...v1.761.0) (2025-07-09)\n\n\n### Features\n\n* **payment:** Stripe Link v2 onConfirm method ([5a01821](https://github.com/bigcommerce/checkout-sdk-js/commit/5a018217372d9e98ea7dc735cef3bad26afdb685))\n\n## [1.760.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.759.1...v1.760.0) (2025-07-07)\n\n\n### Features\n\n* **payment:** added PL banner implementation to paypal-commerce-payment-strategy.ts, removed paypalLoadScript since we do not need this method due changed script loading method ([#2919](https://github.com/bigcommerce/checkout-sdk-js/issues/2919)) ([4807abf](https://github.com/bigcommerce/checkout-sdk-js/commit/4807abface6aaa37d56635261606729ac8f8b61c))\n\n### [1.759.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.759.0...v1.759.1) (2025-07-07)\n\n\n### Code Refactoring\n\n* **payment:** cleanup unused code in BraintreeMessages class ([#2920](https://github.com/bigcommerce/checkout-sdk-js/issues/2920)) ([a37c3fb](https://github.com/bigcommerce/checkout-sdk-js/commit/a37c3fbd2a501c2d2ace49cf2c427dbe1ac710c5))\n\n## [1.759.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.758.1...v1.759.0) (2025-07-04)\n\n\n### Features\n\n* **payment:** Stripe OCS, broadcast customer token for stored cards ([#2917](https://github.com/bigcommerce/checkout-sdk-js/issues/2917)) ([b9d0134](https://github.com/bigcommerce/checkout-sdk-js/commit/b9d0134c3689f6407cc7a0f403fe8acee29c62c7))\n\n### [1.758.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.758.0...v1.758.1) (2025-07-03)\n\n\n### Code Refactoring\n\n* **payment:** removed no BNPL related code from BCP strategies ([#2916](https://github.com/bigcommerce/checkout-sdk-js/issues/2916)) ([13852ca](https://github.com/bigcommerce/checkout-sdk-js/commit/13852ca4553c0b599bfb99fab7c9ce78c8bae42d))\n\n## [1.758.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.757.1...v1.758.0) (2025-07-03)\n\n\n### Features\n\n* **payment:** Stripe OCS, broadcast customer token for stored cards ([#2915](https://github.com/bigcommerce/checkout-sdk-js/issues/2915)) ([6315415](https://github.com/bigcommerce/checkout-sdk-js/commit/63154150814c62c231ef442d7c7eff10caffedbc))\n\n### [1.757.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.757.0...v1.757.1) (2025-07-02)\n\n\n### Code Refactoring\n\n* **payment:** updated paypal commerce credit button strategy with BNPL changes after experiment rollout ([#2914](https://github.com/bigcommerce/checkout-sdk-js/issues/2914)) ([604fbef](https://github.com/bigcommerce/checkout-sdk-js/commit/604fbef2c8697e9ac56d5d4502f177ff8277c655))\n\n## [1.757.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.756.1...v1.757.0) (2025-07-01)\n\n\n### Features\n\n* **payment:** Deprecate PROJECT-3828.add_3ds_support_on_squarev2 experiment ([#2909](https://github.com/bigcommerce/checkout-sdk-js/issues/2909)) ([510390c](https://github.com/bigcommerce/checkout-sdk-js/commit/510390ca3f60266cdfe3adfd15617a3fdee34fa6))\n\n### [1.756.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.756.0...v1.756.1) (2025-06-30)\n\n## [1.756.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.755.2...v1.756.0) (2025-06-30)\n\n\n### Features\n\n* **payment:** added unsupported credit card brands to braintree credit cards payment strategy ([#2910](https://github.com/bigcommerce/checkout-sdk-js/issues/2910)) ([1c86f2c](https://github.com/bigcommerce/checkout-sdk-js/commit/1c86f2c541bf6dccf5fb4d5e02840e1cb84f4514))\n\n### [1.755.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.755.1...v1.755.2) (2025-06-30)\n\n\n### Bug Fixes\n\n* **payment:** all Moneris payments fail on iOS devices ([6709a47](https://github.com/bigcommerce/checkout-sdk-js/commit/6709a474051665521942223c873f0b04e125da8b))\n\n### [1.755.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.755.0...v1.755.1) (2025-06-26)\n\n\n### Bug Fixes\n\n* **payment:** removed type from bigcommerce_payments_creditcardsscheckout in BigCommercePaymentsCreditCardsPaymentStrategy ([#2908](https://github.com/bigcommerce/checkout-sdk-js/issues/2908)) ([11c5ce2](https://github.com/bigcommerce/checkout-sdk-js/commit/11c5ce29858917d927d77d9e3b87b16a090d76fd))\n\n## [1.755.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.754.0...v1.755.0) (2025-06-25)\n\n\n### Features\n\n* **payment:** add hiding logic for messaging ([#2906](https://github.com/bigcommerce/checkout-sdk-js/issues/2906)) ([4df2ab2](https://github.com/bigcommerce/checkout-sdk-js/commit/4df2ab2e50ffd17bfc3b20760c84034a27d62443))\n\n## [1.754.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.753.0...v1.754.0) (2025-06-25)\n\n\n### Features\n\n* **payment:** Refactor code in order to use newly added skipRedirectConfirmationAlert ([#2900](https://github.com/bigcommerce/checkout-sdk-js/issues/2900)) ([602799f](https://github.com/bigcommerce/checkout-sdk-js/commit/602799fa0eb024c90d652b7deb5d95782ea76fbe))\n\n## [1.753.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.752.0...v1.753.0) (2025-06-23)\n\n\n### Features\n\n* **payment:** fastlane success flow fix ([#2904](https://github.com/bigcommerce/checkout-sdk-js/issues/2904)) ([27ff74a](https://github.com/bigcommerce/checkout-sdk-js/commit/27ff74a91bc52179243bd6283a96ed41ee097299))\n\n## [1.752.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.751.3...v1.752.0) (2025-06-23)\n\n\n### Features\n\n* **checkout:** introduce new command to rerender shipping step ([#2903](https://github.com/bigcommerce/checkout-sdk-js/issues/2903)) ([a4c7d9e](https://github.com/bigcommerce/checkout-sdk-js/commit/a4c7d9eecf86c23662c322cbac68ed32414adc33))\n\n### [1.751.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.751.2...v1.751.3) (2025-06-20)\n\n### [1.751.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.751.1...v1.751.2) (2025-06-19)\n\n\n### Code Refactoring\n\n* **payment:** renamed BigCommercePaymentsPayPal to BigCommercePayments ([#2901](https://github.com/bigcommerce/checkout-sdk-js/issues/2901)) ([69b5821](https://github.com/bigcommerce/checkout-sdk-js/commit/69b58212f59b43e911f5da414c836664295d2e72))\n\n### [1.751.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.751.0...v1.751.1) (2025-06-18)\n\n## [1.751.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.750.0...v1.751.0) (2025-06-18)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9322 Add New Extension Region ([#2898](https://github.com/bigcommerce/checkout-sdk-js/issues/2898)) ([6ee6e54](https://github.com/bigcommerce/checkout-sdk-js/commit/6ee6e54e1b9db3e94fa754b25a671e74f214a5e0))\n\n## [1.750.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.749.0...v1.750.0) (2025-06-17)\n\n\n### Features\n\n* **payment:** Stripe OCS Google Pay added ([10ff2bc](https://github.com/bigcommerce/checkout-sdk-js/commit/10ff2bc94ae438ce803b9fed236f64eb82f2af54))\n\n## [1.749.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.748.0...v1.749.0) (2025-06-17)\n\n\n### Features\n\n* **payment:** redirect action handling ([b2d619d](https://github.com/bigcommerce/checkout-sdk-js/commit/b2d619d2656b2665677a89f15ba7af421237fb39))\n\n## [1.748.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.747.1...v1.748.0) (2025-06-17)\n\n\n### Features\n\n* **payment:** Change how payment_method_category parameter is passed to Klarna ([#2890](https://github.com/bigcommerce/checkout-sdk-js/issues/2890)) ([3a8f5bf](https://github.com/bigcommerce/checkout-sdk-js/commit/3a8f5bf7151e1e032f105d01247cf9fe13540bf1))\n\n### [1.747.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.747.0...v1.747.1) (2025-06-16)\n\n\n### Code Refactoring\n\n* **payment:** PI-3957 DigitalRiver deprecation ([#2896](https://github.com/bigcommerce/checkout-sdk-js/issues/2896)) ([b4c6493](https://github.com/bigcommerce/checkout-sdk-js/commit/b4c6493803ac1c4ffb84b981e21d94f968403303))\n\n## [1.747.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.746.0...v1.747.0) (2025-06-16)\n\n\n### Features\n\n* **payment:** PI-3946 Remove experiment: INT-5826.amazon_relative_url[checkout-js] ([#2894](https://github.com/bigcommerce/checkout-sdk-js/issues/2894)) ([bed1793](https://github.com/bigcommerce/checkout-sdk-js/commit/bed179384fd80233372b7e93e8761432a562095b))\n\n## [1.746.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.745.1...v1.746.0) (2025-06-12)\n\n\n### Features\n\n* **payment:** Stripe Link V2 strategy added ([bfc55b4](https://github.com/bigcommerce/checkout-sdk-js/commit/bfc55b4c274cdb2a4ce3aa1dd3d778f374d5f507))\n\n### [1.745.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.745.0...v1.745.1) (2025-06-12)\n\n## [1.745.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.744.1...v1.745.0) (2025-06-11)\n\n\n### Features\n\n* **payment:** updated braintree-venmo-payment-strategy with providing initialization options ([99a6e12](https://github.com/bigcommerce/checkout-sdk-js/commit/99a6e123006a1c25a00c7be75ee4dfc9c6170d89))\n\n### [1.744.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.744.0...v1.744.1) (2025-06-10)\n\n\n### Bug Fixes\n\n* **payment:** Google Pay billing address update customFields added ([925cefa](https://github.com/bigcommerce/checkout-sdk-js/commit/925cefad0ef0a0bb6c676d23661f6ebe70f0dec1))\n\n## [1.744.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.743.2...v1.744.0) (2025-06-10)\n\n\n### Features\n\n* **payment:** Move all Stripe OCS styling configs to checkout-js side ([2241704](https://github.com/bigcommerce/checkout-sdk-js/commit/2241704b2463ffcefce528dd3b21d64ae303a6e5))\n\n### [1.743.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.743.1...v1.743.2) (2025-06-04)\n\n### [1.743.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.743.0...v1.743.1) (2025-06-04)\n\n## [1.743.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.742.0...v1.743.0) (2025-06-04)\n\n\n### Features\n\n* **checkout:** Add listening methods to worker extension messenger ([#2886](https://github.com/bigcommerce/checkout-sdk-js/issues/2886)) ([4cc883a](https://github.com/bigcommerce/checkout-sdk-js/commit/4cc883a5bdf700571945278cb147da2e7f66cc8b))\n\n## [1.742.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.741.0...v1.742.0) (2025-06-02)\n\n\n### Features\n\n* **payment:** added canMakePayments method as additional verification of payment capability ([72f03c1](https://github.com/bigcommerce/checkout-sdk-js/commit/72f03c1efa3cf7a2dea53f78da72c483bb777b4d))\n* **payment:** console.error instead of throw error ([643394e](https://github.com/bigcommerce/checkout-sdk-js/commit/643394ef7d13a9404453333b918b3f47a8f6ab74))\n\n## [1.741.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.740.0...v1.741.0) (2025-06-02)\n\n\n### Features\n\n* **checkout:** Add worker extension messenger and worker-event-poster ([#2876](https://github.com/bigcommerce/checkout-sdk-js/issues/2876)) ([afcaeaa](https://github.com/bigcommerce/checkout-sdk-js/commit/afcaeaa9a5cbc2eeea3e9364e98408038647ee04))\n\n## [1.740.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.739.0...v1.740.0) (2025-05-29)\n\n\n### Features\n\n* **payment:** move Stripe OCS and UPE to separate modules ([b02df3e](https://github.com/bigcommerce/checkout-sdk-js/commit/b02df3ec06eabd12f451db555035bd30513fae35))\n\n## [1.739.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.738.0...v1.739.0) (2025-05-29)\n\n\n### Features\n\n* **checkout:** Add worker-event-listener ([#2870](https://github.com/bigcommerce/checkout-sdk-js/issues/2870)) ([0723433](https://github.com/bigcommerce/checkout-sdk-js/commit/0723433e8289edb4b0cdf737210c88e09a9bf6ae))\n* **payment:** move Stripe OCS and UPE to separate modules ([00debe6](https://github.com/bigcommerce/checkout-sdk-js/commit/00debe6848abe499fa118963fd5eba4ba865eee5))\n\n## [1.738.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.737.0...v1.738.0) (2025-05-28)\n\n\n### Features\n\n* **payment:** removed google-pay-paypal-commerce-script-loader.ts and moved logic to paypal-commerce-sdk ([6240a2f](https://github.com/bigcommerce/checkout-sdk-js/commit/6240a2f86955e2e684555a7d9c8b9d80fdfbbb18))\n\n## [1.737.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.736.0...v1.737.0) (2025-05-28)\n\n\n### Features\n\n* **payment:** remove Sofort and Giropay enums from StripeUPE ([8c43601](https://github.com/bigcommerce/checkout-sdk-js/commit/8c436015e893b11f254d0273404b348e2fa834bc))\n\n## [1.736.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.735.0...v1.736.0) (2025-05-27)\n\n\n### Features\n\n* **payment:** clone bigcommerce payments fastlane files ([#2879](https://github.com/bigcommerce/checkout-sdk-js/issues/2879)) ([b5d8fc4](https://github.com/bigcommerce/checkout-sdk-js/commit/b5d8fc430fc9c8be220fe7bf4b8d9241a7ebf516))\n\n## [1.735.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.734.0...v1.735.0) (2025-05-27)\n\n\n### Features\n\n* **checkout:** create new method to register extension web worker ([#2869](https://github.com/bigcommerce/checkout-sdk-js/issues/2869)) ([0f70f55](https://github.com/bigcommerce/checkout-sdk-js/commit/0f70f55a4f035d8b029ed83d510151ba68f48e1b))\n\n## [1.734.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.733.0...v1.734.0) (2025-05-26)\n\n\n### Features\n\n* **payment:** clone bigcommerce payments paylater methods files ([#2863](https://github.com/bigcommerce/checkout-sdk-js/issues/2863)) ([f56d714](https://github.com/bigcommerce/checkout-sdk-js/commit/f56d7149a8e1d6eb4fce59bc988ad44b374b80a4))\n* **payment:** clone BigCommercePayments RatePay files ([#2866](https://github.com/bigcommerce/checkout-sdk-js/issues/2866)) ([d7a3157](https://github.com/bigcommerce/checkout-sdk-js/commit/d7a3157ffb3707fc1cba2bba82a573032bddd7f2))\n* **payment:** clone BigCommercePayments Venmo files ([#2867](https://github.com/bigcommerce/checkout-sdk-js/issues/2867)) ([0ce2b68](https://github.com/bigcommerce/checkout-sdk-js/commit/0ce2b6805c85d0c0c624a26396582235a3fe5ed9))\n\n## [1.733.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.732.3...v1.733.0) (2025-05-26)\n\n\n### Features\n\n* **payment:** clone bigcommerce payments alternative methods files ([#2862](https://github.com/bigcommerce/checkout-sdk-js/issues/2862)) ([a50ac03](https://github.com/bigcommerce/checkout-sdk-js/commit/a50ac03673ef5358318ad58e878a8d6542dfd512))\n* **payment:** clone bigcommerce payments credit cards files ([#2864](https://github.com/bigcommerce/checkout-sdk-js/issues/2864)) ([1a687c1](https://github.com/bigcommerce/checkout-sdk-js/commit/1a687c1de2f180674cd17ec6ee9d1cacb8b0c5fd))\n* **payment:** Stripe OCS accordion state on initialization ([c119c5c](https://github.com/bigcommerce/checkout-sdk-js/commit/c119c5cc2fb2ff0f10aa4317db066313cb3c5cf2))\n\n### [1.732.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.732.2...v1.732.3) (2025-05-26)\n\n### [1.732.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.732.1...v1.732.2) (2025-05-26)\n\n### [1.732.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.732.0...v1.732.1) (2025-05-26)\n\n\n### Code Refactoring\n\n* **payment:** removed Braintree LPM fallback experiment and speed up related tests run ([#2871](https://github.com/bigcommerce/checkout-sdk-js/issues/2871)) ([9e74eb0](https://github.com/bigcommerce/checkout-sdk-js/commit/9e74eb07a8737b78ad7d5aed8232ce3e1f75603b))\n\n## [1.732.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.731.2...v1.732.0) (2025-05-07)\n\n\n### Features\n\n* **payment:** Stripe OCS accordion element styling ([5463f92](https://github.com/bigcommerce/checkout-sdk-js/commit/5463f9256038acd95d7621f9ac2733e666d5cbe0))\n\n### [1.731.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.731.1...v1.731.2) (2025-04-30)\n\n### [1.731.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.731.0...v1.731.1) (2025-04-30)\n\n\n### Bug Fixes\n\n* **payment:** fixed bt fl 3ds amount ([#2851](https://github.com/bigcommerce/checkout-sdk-js/issues/2851)) ([3c0b622](https://github.com/bigcommerce/checkout-sdk-js/commit/3c0b622b355ecf835db368f0e5e9f4fd22b4d79c))\n\n## [1.731.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.730.0...v1.731.0) (2025-04-29)\n\n\n### Features\n\n* **payment:** updated braintree venmo config ([73e1e59](https://github.com/bigcommerce/checkout-sdk-js/commit/73e1e59f709cde5e252280f57590c57ca2a4e458))\n* **payment:** updates after review ([3d0ff3b](https://github.com/bigcommerce/checkout-sdk-js/commit/3d0ff3b24e3cf46bf2dbea1d7bd7cfa3293c7ed2))\n\n## [1.730.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.729.1...v1.730.0) (2025-04-28)\n\n\n### Features\n\n* **payment:** upload Stripe client with custom options ([04e497e](https://github.com/bigcommerce/checkout-sdk-js/commit/04e497e569e17105448a949f657274d6e0f078b0))\n\n### [1.729.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.729.0...v1.729.1) (2025-04-23)\n\n\n### Code Refactoring\n\n* **payment:** cleaned up paypal commerce tests from unused fastlane shipping callback experiment ([#2845](https://github.com/bigcommerce/checkout-sdk-js/issues/2845)) ([24a49a5](https://github.com/bigcommerce/checkout-sdk-js/commit/24a49a540a1d65722e97d66e2d070f09ecbce09b))\n\n## [1.729.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.728.1...v1.729.0) (2025-04-23)\n\n\n### Features\n\n* **payment:** Added loadingIndicator to the google-pay-payment-strategy ([27ca8fd](https://github.com/bigcommerce/checkout-sdk-js/commit/27ca8fdb2e0664127178c81590ec8ed17863e92d))\n\n### [1.728.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.728.0...v1.728.1) (2025-04-22)\n\n\n### Bug Fixes\n\n* **payment:** take fresh data from state on the amazonpay customer strategy initialization ([#2838](https://github.com/bigcommerce/checkout-sdk-js/issues/2838)) ([c3b74b3](https://github.com/bigcommerce/checkout-sdk-js/commit/c3b74b30234d39d1f66295785c8ad2a9fd0959a5))\n\n## [1.728.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.727.1...v1.728.0) (2025-04-18)\n\n\n### Features\n\n* **payment:** PAYPAL-5354 fix of cannot read properties of undefined ([e745e71](https://github.com/bigcommerce/checkout-sdk-js/commit/e745e71794d7499b8ce42fe2fa1674c86bbb6bdf))\n\n### [1.727.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.727.0...v1.727.1) (2025-04-17)\n\n## [1.727.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.726.0...v1.727.0) (2025-04-15)\n\n\n### Features\n\n* **payment:** PI-3825 Added new link for the storefront hosted fields ([#2833](https://github.com/bigcommerce/checkout-sdk-js/issues/2833)) ([4a83ba5](https://github.com/bigcommerce/checkout-sdk-js/commit/4a83ba55b46cc01ac567e28f68a6f8df3c2a53fa))\n\n## [1.726.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.725.0...v1.726.0) (2025-04-14)\n\n\n### Features\n\n* **payment:** PI-3669 apply multiple coupons in the Google Pay modal ([bd5322e](https://github.com/bigcommerce/checkout-sdk-js/commit/bd5322e11b34ee75f5b49d7eab9a417b05f7d3e8))\n\n## [1.725.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.724.0...v1.725.0) (2025-04-14)\n\n\n### Features\n\n* **payment:** STRIPE-667 remove experiment for Stripe Link Spain state mapping ([c805a30](https://github.com/bigcommerce/checkout-sdk-js/commit/c805a304a12a4e89573579f754e4901d98fc9ed5))\n\n## [1.724.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.723.0...v1.724.0) (2025-04-14)\n\n\n### Features\n\n* **payment:** PAYPAL-5258 added polling for BT Local methods ([#2822](https://github.com/bigcommerce/checkout-sdk-js/issues/2822)) ([e2276fb](https://github.com/bigcommerce/checkout-sdk-js/commit/e2276fb0c655ce4d1f9fd932730a2273017062ae))\n\n## [1.723.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.722.0...v1.723.0) (2025-04-13)\n\n\n### Features\n\n* **checkout:** CHECKOUT-9167 Exposing logoutLink into setting interface ([89adb47](https://github.com/bigcommerce/checkout-sdk-js/commit/89adb4778bfc04f97c75d929964399fd15ef2497))\n\n## [1.722.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.721.0...v1.722.0) (2025-04-09)\n\n\n### Features\n\n* **payment:** PAYPAL-5197 added 3ds verification for BT FL ([#2816](https://github.com/bigcommerce/checkout-sdk-js/issues/2816)) ([9d0faa6](https://github.com/bigcommerce/checkout-sdk-js/commit/9d0faa6d29388076703ebb0f9f0a0eb5fa6ebd6d))\n\n## [1.721.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.720.0...v1.721.0) (2025-04-07)\n\n\n### Features\n\n* **payment:** PI-3539 added additionalDescription to the shipping options in Google Pay popup ([121bc21](https://github.com/bigcommerce/checkout-sdk-js/commit/121bc2176c83d35ce578fc867edbf3468cbfe6b4))\n\n## [1.720.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.719.3...v1.720.0) (2025-04-07)\n\n\n### Features\n\n* **checkout:** CHECKOUT-8521 Introduce OrderShippingConsignmentDiscount interface ([fcec57d](https://github.com/bigcommerce/checkout-sdk-js/commit/fcec57d2f88791d0fab32cf8ec2131c2167a732d))\n* **checkout:** CHECKOUT-9138 Rename shouldRedirectToStorefrontLoginPage ([3765c68](https://github.com/bigcommerce/checkout-sdk-js/commit/3765c68a79201642c45d8b5cd65625d02f5cc0a1))\n\n### [1.719.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.719.2...v1.719.3) (2025-04-04)\n\n### [1.719.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.719.1...v1.719.2) (2025-04-03)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-5286 made PPCP Venmo appear on cart page ([#2820](https://github.com/bigcommerce/checkout-sdk-js/issues/2820)) ([c9f741c](https://github.com/bigcommerce/checkout-sdk-js/commit/c9f741cab659ed8099cb7539a35ad5f26e708f1d))\n\n### [1.719.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.719.0...v1.719.1) (2025-04-03)\n\n## [1.719.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.718.3...v1.719.0) (2025-04-01)\n\n\n### Features\n\n* **payment:** PI-2875 Google Pay promo codes handling ([0023374](https://github.com/bigcommerce/checkout-sdk-js/commit/0023374eee38317b42b55792cf1e8e2d373982f7))\n\n### [1.718.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.718.2...v1.718.3) (2025-03-26)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-4585 fixed updated height pdp and cart page Braintree PayPal buttons when provided height is null or undefined ([#2815](https://github.com/bigcommerce/checkout-sdk-js/issues/2815)) ([dffe8f3](https://github.com/bigcommerce/checkout-sdk-js/commit/dffe8f38d40f7e5831ec0e8cc6cfebc493e4b4e7))\n\n### [1.718.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.718.1...v1.718.2) (2025-03-26)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-4585 fixed updated height pdp and cart page Braintree PayPal buttons ([#2814](https://github.com/bigcommerce/checkout-sdk-js/issues/2814)) ([c886e21](https://github.com/bigcommerce/checkout-sdk-js/commit/c886e21d7ed0fe79445e99de15f4e75b2c91eb0a))\n\n### [1.718.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.718.0...v1.718.1) (2025-03-26)\n\n## [1.718.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.717.0...v1.718.0) (2025-03-25)\n\n\n### Features\n\n* **checkout:** CHECKOUT-8517 convert type to fixed string ([f631383](https://github.com/bigcommerce/checkout-sdk-js/commit/f63138308a0b3f3e66f2f13f1489b9621136a4df))\n* **checkout:** CHECKOUT-8517 Introduce consignment discount interface ([d745c5e](https://github.com/bigcommerce/checkout-sdk-js/commit/d745c5e09ef08f945df7afc8d639100722e44167))\n* **checkout:** CHECKOUT-8517 Using T for type field ([2aa4c30](https://github.com/bigcommerce/checkout-sdk-js/commit/2aa4c3047cdd52d6d7f2755681955e88137a8a96))\n\n## [1.717.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.716.0...v1.717.0) (2025-03-20)\n\n\n### Features\n\n* **checkout:** PI-3531 Deprecate Openpay code in checkout-sdk ([2f588b6](https://github.com/bigcommerce/checkout-sdk-js/commit/2f588b64477f06374144c26899c43616e67a833c))\n\n## [1.716.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.715.0...v1.716.0) (2025-03-19)\n\n\n### Features\n\n* **payment:** PI-3505 Added Company Name fields to the Bluesnap Direct ECP implementation ([#2807](https://github.com/bigcommerce/checkout-sdk-js/issues/2807)) ([f444a78](https://github.com/bigcommerce/checkout-sdk-js/commit/f444a7831ae4906e93f218a7bf8e5b74591e0bbf))\n\n## [1.715.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.714.1...v1.715.0) (2025-03-17)\n\n\n### Features\n\n* **payment:** PAYPAL-5097 created Braintree Messages class and added Braintree BNPL Configurator implementation ([#2808](https://github.com/bigcommerce/checkout-sdk-js/issues/2808)) ([fadb981](https://github.com/bigcommerce/checkout-sdk-js/commit/fadb9812a1d08441aac11c4934775c8c0c4059f4))\n\n### [1.714.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.714.0...v1.714.1) (2025-03-12)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-5216 removed paypal messages implementation from Braintree PayPal button strategy ([#2804](https://github.com/bigcommerce/checkout-sdk-js/issues/2804)) ([50efb6c](https://github.com/bigcommerce/checkout-sdk-js/commit/50efb6cce5edaf910724be5c87d6058a5520f546))\n\n## [1.714.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.713.2...v1.714.0) (2025-03-06)\n\n\n### Features\n\n* **payment:** PAYPAL-5213 added messages implementation to Braintree PayPal Credit button strategy ([#2801](https://github.com/bigcommerce/checkout-sdk-js/issues/2801)) ([3c7f14f](https://github.com/bigcommerce/checkout-sdk-js/commit/3c7f14fc48e6b45eb1281d826c7db60103d23d49))\n\n### [1.713.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.713.1...v1.713.2) (2025-03-06)\n\n### [1.713.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.713.0...v1.713.1) (2025-03-04)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-660 Disable state code mapping for Spain in Stripe Link Address component ([2c2c1fd](https://github.com/bigcommerce/checkout-sdk-js/commit/2c2c1fd50c19d7b67961df79e355f3c04e10d0f6))\n\n## [1.713.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.712.1...v1.713.0) (2025-03-04)\n\n\n### Features\n\n* **payment:** PAYPAL-5201 updates related to clientToken checking ([821eeb4](https://github.com/bigcommerce/checkout-sdk-js/commit/821eeb4692a9cd4e582d18fdf1a4b98e423a1dd4))\n\n### [1.712.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.712.0...v1.712.1) (2025-03-04)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2609 moved BraintreePayPalButtonStrategy from core to braintree-integration package ([#2791](https://github.com/bigcommerce/checkout-sdk-js/issues/2791)) ([70ff230](https://github.com/bigcommerce/checkout-sdk-js/commit/70ff230f2089a21804e6bf0b40516e2660d2b1d8))\n\n## [1.712.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.711.1...v1.712.0) (2025-02-27)\n\n\n### Features\n\n* **payment:** PAYPAL-5187 added BT falback Url ([#2796](https://github.com/bigcommerce/checkout-sdk-js/issues/2796)) ([e466189](https://github.com/bigcommerce/checkout-sdk-js/commit/e4661899c9347e06e59fdab1798e3daee64d7449))\n\n### [1.711.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.711.0...v1.711.1) (2025-02-19)\n\n\n### Bug Fixes\n\n* **shipping:** CHECKOUT-8999 Remove duplicate call for shipping option ([#2794](https://github.com/bigcommerce/checkout-sdk-js/issues/2794)) ([f013305](https://github.com/bigcommerce/checkout-sdk-js/commit/f013305d6f7c99a2da97f34ed256da075280091f))\n\n## [1.711.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.710.1...v1.711.0) (2025-02-18)\n\n\n### Features\n\n* **payment:** PAYPAL-0 removed integrity attr ([7bc2190](https://github.com/bigcommerce/checkout-sdk-js/commit/7bc2190eda421cb2e92d0999cae090cea093627a))\n\n### [1.710.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.710.0...v1.710.1) (2025-02-13)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2610 moved BraintreePayPalCreditButtonStrategy from core to braintree-integration package ([#2790](https://github.com/bigcommerce/checkout-sdk-js/issues/2790)) ([3e7d7b9](https://github.com/bigcommerce/checkout-sdk-js/commit/3e7d7b999098f5f153ad6a9b5133518bacde77ac))\n\n## [1.710.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.709.0...v1.710.0) (2025-02-13)\n\n\n### Features\n\n* **payment:** PAYPAL-5113 added test coverage for braintree-utils ([#2788](https://github.com/bigcommerce/checkout-sdk-js/issues/2788)) ([b82ea4d](https://github.com/bigcommerce/checkout-sdk-js/commit/b82ea4d709c61517801cf01d5c0c665eceb2fd5c))\n\n## [1.709.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.708.0...v1.709.0) (2025-02-11)\n\n\n### Features\n\n* **payment:** PAYPAL-5067 ID creation updates ([#2785](https://github.com/bigcommerce/checkout-sdk-js/issues/2785)) ([540182e](https://github.com/bigcommerce/checkout-sdk-js/commit/540182e43113a2812d5e5a58ab5709d48eae992e))\n\n## [1.708.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.707.0...v1.708.0) (2025-02-10)\n\n\n### Features\n\n* **payment:** PAYPAL-5044 added tests for GP ([571e932](https://github.com/bigcommerce/checkout-sdk-js/commit/571e932099b513292618070580b19391ac1fc9a5))\n\n## [1.707.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.706.0...v1.707.0) (2025-02-06)\n\n\n### Features\n\n* **payment:** PAYPAL-4324 added tests for GP ([57cdf95](https://github.com/bigcommerce/checkout-sdk-js/commit/57cdf95266b30df308c1d0d148a5b9f36acd0b63))\n\n## [1.706.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.705.0...v1.706.0) (2025-02-06)\n\n\n### Features\n\n* **payment:** PI-3064 fixed AmazonPay button for disabled ph4 flag ([#2781](https://github.com/bigcommerce/checkout-sdk-js/issues/2781)) ([27995de](https://github.com/bigcommerce/checkout-sdk-js/commit/27995deed7bf6fb8195ffb076ef49bad951d4380))\n\n## [1.705.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.704.0...v1.705.0) (2025-02-06)\n\n\n### Features\n\n* **payment:** PAYPAL-4324 added Apple Pay SDK for supporting third party browsers ([#2765](https://github.com/bigcommerce/checkout-sdk-js/issues/2765)) ([c0651b8](https://github.com/bigcommerce/checkout-sdk-js/commit/c0651b89d13ee8d47bdeebb0f99547e98020f73d))\n\n## [1.704.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.703.0...v1.704.0) (2025-02-06)\n\n\n### Features\n\n* **payment:** PAYPAL-5041 added phone to order ([#2777](https://github.com/bigcommerce/checkout-sdk-js/issues/2777)) ([0d48a9d](https://github.com/bigcommerce/checkout-sdk-js/commit/0d48a9db6ba10b3200542a1ff79342e7ec2b9eb5))\n\n## [1.703.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.702.0...v1.703.0) (2025-02-06)\n\n\n### Features\n\n* **payment:** PAYMENTS-10280 Add validation on hosted form card holder name to not have card number ([9fdf2cf](https://github.com/bigcommerce/checkout-sdk-js/commit/9fdf2cf2a4355a42dbab5747159b3abaaa905d02))\n* **payment:** PAYMENTS-10280 Add validation on hosted form card holder name to not include valid card number ([65a05f5](https://github.com/bigcommerce/checkout-sdk-js/commit/65a05f558a22a3ed78e289a210b0b0a668dd3c0a))\n\n## [1.702.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.701.2...v1.702.0) (2025-02-04)\n\n\n### Features\n\n* **extension:** CHECKOUT-8974 Introduce ReRenderShippingForm Command ([#2778](https://github.com/bigcommerce/checkout-sdk-js/issues/2778)) ([05e70b8](https://github.com/bigcommerce/checkout-sdk-js/commit/05e70b8d6359eec84e4383d5939cca52ade54c34))\n\n### [1.701.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.701.1...v1.701.2) (2025-02-03)\n\n### [1.701.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.701.0...v1.701.1) (2025-01-31)\n\n## [1.701.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.700.2...v1.701.0) (2025-01-31)\n\n\n### Features\n\n* **extension:** CHECKOUT-8974 Introduce Extension Query ([#2769](https://github.com/bigcommerce/checkout-sdk-js/issues/2769)) ([5d67c82](https://github.com/bigcommerce/checkout-sdk-js/commit/5d67c82ab7c3dc41cddde060e9da2fd1eb769062))\n\n### [1.700.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.700.1...v1.700.2) (2025-01-30)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-5020 added extra check for Buttons implementation in PayPal SDK and added silent log instead of throwing an error to our customer in PPCP customer strategies ([#2774](https://github.com/bigcommerce/checkout-sdk-js/issues/2774)) ([01c5505](https://github.com/bigcommerce/checkout-sdk-js/commit/01c5505dcebd9f7fe356b1c603474b1734897414))\n\n### [1.700.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.700.0...v1.700.1) (2025-01-29)\n\n\n### Bug Fixes\n\n* **payment:** PI-77 added Adyen es locale mapping ([#2775](https://github.com/bigcommerce/checkout-sdk-js/issues/2775)) ([3ff7bf2](https://github.com/bigcommerce/checkout-sdk-js/commit/3ff7bf2823451fad9843b037f079fd682875794a))\n\n## [1.700.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.699.0...v1.700.0) (2025-01-29)\n\n\n### Features\n\n* **payment:** PI-3099 Remove iDEAL bank selection dropdown for Adyen ([cf35535](https://github.com/bigcommerce/checkout-sdk-js/commit/cf3553554206fb368e334119e19c2e1876f3bd08))\n\n## [1.699.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.698.1...v1.699.0) (2025-01-29)\n\n\n### Features\n\n* **payment:** PI-3068 moved my account logic to hosted card v2 package in the checkout-sdk ([#2767](https://github.com/bigcommerce/checkout-sdk-js/issues/2767)) ([2082af7](https://github.com/bigcommerce/checkout-sdk-js/commit/2082af7e67153678155dd7b0a34b09d1dfc8d74c))\n\n### [1.698.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.698.0...v1.698.1) (2025-01-27)\n\n\n### Bug Fixes\n\n* **payment:** PI-3102 removed error throwing on initialization for amazon-pay and google-pay customer step buttons ([#2771](https://github.com/bigcommerce/checkout-sdk-js/issues/2771)) ([3834768](https://github.com/bigcommerce/checkout-sdk-js/commit/383476879b73910d4fcc6746380f7b33bd623201))\n\n## [1.698.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.697.0...v1.698.0) (2025-01-21)\n\n\n### Features\n\n* **extension:** CHECKOUT-8964 Introduce GetConsignment Extension Command ([#2766](https://github.com/bigcommerce/checkout-sdk-js/issues/2766)) ([ee6a333](https://github.com/bigcommerce/checkout-sdk-js/commit/ee6a333fb48af35dce48fd9bc26e811e6cd50ebc))\n\n## [1.697.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.696.3...v1.697.0) (2025-01-20)\n\n\n### Features\n\n* **payment:** STRIPE-524 remove experiment for new stripe upe confirmation flow ([e643142](https://github.com/bigcommerce/checkout-sdk-js/commit/e643142cc4d5a87ab2572c98d9e90867ff70731d))\n\n### [1.696.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.696.2...v1.696.3) (2025-01-16)\n\n\n### Bug Fixes\n\n* **extension:** CHECKOUT-8960 Fix Broadcast Interruption ([#2763](https://github.com/bigcommerce/checkout-sdk-js/issues/2763)) ([3e91af9](https://github.com/bigcommerce/checkout-sdk-js/commit/3e91af9a8e5290445df82969b8fbce2200875cfd))\n\n### [1.696.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.696.1...v1.696.2) (2025-01-15)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-4952 removed extra data attribute from paypal commerce credit banner to let paypal accept banner styles provided through paypal messages config ([#2762](https://github.com/bigcommerce/checkout-sdk-js/issues/2762)) ([292d6fb](https://github.com/bigcommerce/checkout-sdk-js/commit/292d6fb4566545ba1117ff6ef4f29bde484ff1a9))\n\n### [1.696.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.696.0...v1.696.1) (2025-01-15)\n\n\n### Bug Fixes\n\n* **payment:** PI-3029 MissingDataError: Unable to proceed because the… ([#2761](https://github.com/bigcommerce/checkout-sdk-js/issues/2761)) ([321ddcd](https://github.com/bigcommerce/checkout-sdk-js/commit/321ddcd9b35c6e25448a7968b5b8365a2b792154))\n\n## [1.696.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.695.2...v1.696.0) (2025-01-13)\n\n\n### Features\n\n* **payment:** PAYPAL-4995 added check for teardown call in deinitialize method ([1e16475](https://github.com/bigcommerce/checkout-sdk-js/commit/1e16475970a13dbfb40045fdf6a3bc85cdd12425))\n\n### [1.695.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.695.1...v1.695.2) (2025-01-06)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4705 removed PAYPAL-3996.paypal_fastlane_shipping_update experiment ([#2759](https://github.com/bigcommerce/checkout-sdk-js/issues/2759)) ([0f344ec](https://github.com/bigcommerce/checkout-sdk-js/commit/0f344ec4fbf1aab23cd1cb1b3f3ce42b1e1ba783))\n\n### [1.695.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.695.0...v1.695.1) (2024-12-26)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4705 removed PAYPAL-4387.paypal_shipping_callbacks experiment form PPCP strategies ([#2758](https://github.com/bigcommerce/checkout-sdk-js/issues/2758)) ([d726094](https://github.com/bigcommerce/checkout-sdk-js/commit/d7260945c52a5739beb21fddc611d5c7d21ab25d))\n\n## [1.695.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.694.0...v1.695.0) (2024-12-26)\n\n\n### Features\n\n* **payment:** PAYPAL-4952 updated PayPal Commerce credit strategies with BNPL configuration implementation ([#2757](https://github.com/bigcommerce/checkout-sdk-js/issues/2757)) ([d2448b8](https://github.com/bigcommerce/checkout-sdk-js/commit/d2448b81188e671130d28bb0786d2b143fc03f05))\n\n## [1.694.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.693.0...v1.694.0) (2024-12-23)\n\n\n### Features\n\n* **payment:** STRIPE-414 remove experiment for GPay shipping options ([d5cc1cd](https://github.com/bigcommerce/checkout-sdk-js/commit/d5cc1cd8a5be196df8dca4a8f11ffafe80ff773c))\n\n## [1.693.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.692.0...v1.693.0) (2024-12-17)\n\n\n### Features\n\n* **payment:** CHECKOUT-8901 Add Async Payment Methods ([#2753](https://github.com/bigcommerce/checkout-sdk-js/issues/2753)) ([74b04cb](https://github.com/bigcommerce/checkout-sdk-js/commit/74b04cb6c90097331cc716d93c9d589f4bdf2bbf))\n\n## [1.692.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.691.0...v1.692.0) (2024-12-17)\n\n\n### Features\n\n* **payment:** STRIPE-546 Google Pay use stateOrProvinceCode if city is empty ([73ae053](https://github.com/bigcommerce/checkout-sdk-js/commit/73ae05311759cfeba30b7d977509e8e4168a8ce9))\n\n## [1.691.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.690.0...v1.691.0) (2024-12-16)\n\n\n### Features\n\n* **payment:** STRIPE-525 Stripe UPE new confirmation flow ([66c00b6](https://github.com/bigcommerce/checkout-sdk-js/commit/66c00b6f2365dbcf07bafe75f5141624464d0a91))\n\n## [1.690.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.689.0...v1.690.0) (2024-12-16)\n\n\n### Features\n\n* **payment:** STRIPE-485 Stripe Google Pay test coverage branches increased ([f657e5c](https://github.com/bigcommerce/checkout-sdk-js/commit/f657e5cf192c7fcaa83b373b4dcf7c1652abc469))\n\n## [1.689.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.688.0...v1.689.0) (2024-12-16)\n\n\n### Features\n\n* **payment:** STRIPE-476 Stripe Google Pay 3DS experiment added ([c7afafd](https://github.com/bigcommerce/checkout-sdk-js/commit/c7afafd7dfb38337a7660bbca9e7018cb23464ca))\n\n## [1.688.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.687.1...v1.688.0) (2024-12-12)\n\n\n### Features\n\n* **payment:** PAYPAL-4869 Missing 'Street Name' in Delivery Address ([#2744](https://github.com/bigcommerce/checkout-sdk-js/issues/2744)) ([87f9ce2](https://github.com/bigcommerce/checkout-sdk-js/commit/87f9ce2cd11337008cb076213e53f75d375ec746))\n\n### [1.687.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.687.0...v1.687.1) (2024-12-12)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-0 Skip 3D Secure when GooglePay card network tokenized ([#2751](https://github.com/bigcommerce/checkout-sdk-js/issues/2751)) ([a2bcad9](https://github.com/bigcommerce/checkout-sdk-js/commit/a2bcad9d1234a811dc5de2c37565bfbec501783e))\n\n## [1.687.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.686.0...v1.687.0) (2024-12-11)\n\n\n### Features\n\n* **payment:** PI-1546 Refactor the existing moneris payment strategy in Checkout SDK to use the new checkout payment integration JS API ([#2716](https://github.com/bigcommerce/checkout-sdk-js/issues/2716)) ([d4717b7](https://github.com/bigcommerce/checkout-sdk-js/commit/d4717b70ba967263618b8d4ba2b55ac318bc7be4))\n\n## [1.686.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.685.0...v1.686.0) (2024-12-11)\n\n\n### Features\n\n* **payment:** PAYPAL-4884 send payment provider paymentId on payment start stage in Braintree LPMs payment strategy ([#2740](https://github.com/bigcommerce/checkout-sdk-js/issues/2740)) ([aa08491](https://github.com/bigcommerce/checkout-sdk-js/commit/aa084919ef0f825f17df14c3da1244989e363685))\n\n## [1.685.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.684.0...v1.685.0) (2024-12-09)\n\n\n### Features\n\n* **checkout:** PI-2943 Change HostedFormOptions interface name in core ([#2741](https://github.com/bigcommerce/checkout-sdk-js/issues/2741)) ([951a25f](https://github.com/bigcommerce/checkout-sdk-js/commit/951a25fe81a8826dba8e7483cb067b6dffc0393e))\n\n## [1.684.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.683.1...v1.684.0) (2024-12-09)\n\n\n### Features\n\n* **payment:** CHECKOUT-7859 Add Offline Payment Method ([#2743](https://github.com/bigcommerce/checkout-sdk-js/issues/2743)) ([4cbd71e](https://github.com/bigcommerce/checkout-sdk-js/commit/4cbd71e882e596bf54ad7cd65fc44c914b75433d))\n\n\n### Bug Fixes\n\n* **extension:** CHECKOUT-8869 Fix Display Issue after Page Refresh ([#2738](https://github.com/bigcommerce/checkout-sdk-js/issues/2738)) ([f617a19](https://github.com/bigcommerce/checkout-sdk-js/commit/f617a19ed55ad747584355fd8818b241cab411cc))\n\n### [1.683.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.683.0...v1.683.1) (2024-11-13)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-509 Update Stripe element on PI update ([b728116](https://github.com/bigcommerce/checkout-sdk-js/commit/b7281169b0a98814fb140260906f750bdabde260))\n\n## [1.683.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.682.0...v1.683.0) (2024-11-08)\n\n\n### Features\n\n* **payment:** STRIPE-496 Stripe OCS  radio button size ([996cfe7](https://github.com/bigcommerce/checkout-sdk-js/commit/996cfe7e72667770d44eec1edbedca55561b0981))\n\n## [1.682.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.681.0...v1.682.0) (2024-11-06)\n\n\n### Features\n\n* **payment:** STRIPE-476 Stripe Google Pay 3DS added ([9046b6c](https://github.com/bigcommerce/checkout-sdk-js/commit/9046b6c174fe6aac92acee70d3117a2951b92e59))\n\n## [1.681.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.680.0...v1.681.0) (2024-11-06)\n\n\n### Features\n\n* **payment:** PAYPAL-4783 added shipping autoselect flag ([#2720](https://github.com/bigcommerce/checkout-sdk-js/issues/2720)) ([1fcc7d5](https://github.com/bigcommerce/checkout-sdk-js/commit/1fcc7d5976d03c8161b074ef5bf2f176574b1023))\n\n## [1.680.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.679.0...v1.680.0) (2024-11-05)\n\n\n### Features\n\n* **payment:** PAYPAL-4800 added ability to skip shipping step ([#2730](https://github.com/bigcommerce/checkout-sdk-js/issues/2730)) ([783775b](https://github.com/bigcommerce/checkout-sdk-js/commit/783775b383b30fc06e7a410ef0cb8f7b9980085c))\n* **payment:** STRIPE-484 Stripe OCS confirmation flow ([bb2cc0a](https://github.com/bigcommerce/checkout-sdk-js/commit/bb2cc0a3179a326fcc5f561b11ef2e5be26062ca))\n\n## [1.679.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.678.1...v1.679.0) (2024-11-04)\n\n\n### Features\n\n* **checkout:** DATA-11983 Populate discount_amount field for BODL events ([a47ddbc](https://github.com/bigcommerce/checkout-sdk-js/commit/a47ddbcfa24cbe8ffe1cf15d66fa5bf2e9ff34b5))\n\n### [1.678.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.678.0...v1.678.1) (2024-11-04)\n\n## [1.678.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.677.3...v1.678.0) (2024-11-01)\n\n\n### Features\n\n* **payment:** PAYPAL-4813 added buyer country as an option to Braintree PayPal messages config ([#2728](https://github.com/bigcommerce/checkout-sdk-js/issues/2728)) ([b2134fd](https://github.com/bigcommerce/checkout-sdk-js/commit/b2134fd2c29631a378cd16633f56916af7eaaeba))\n\n### [1.677.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.677.2...v1.677.3) (2024-11-01)\n\n### [1.677.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.677.1...v1.677.2) (2024-11-01)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2681 clenup Braintree integration packages spec errors ([#2724](https://github.com/bigcommerce/checkout-sdk-js/issues/2724)) ([8fa2611](https://github.com/bigcommerce/checkout-sdk-js/commit/8fa2611495ae63a571db5159d25d08ac14839954))\n\n### [1.677.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.677.0...v1.677.1) (2024-10-31)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2696 clenup PayPal integration packages spec errors ([#2715](https://github.com/bigcommerce/checkout-sdk-js/issues/2715)) ([1d0b815](https://github.com/bigcommerce/checkout-sdk-js/commit/1d0b8159fcf8eb10b4483b77e6b04627ff9edf43))\n* **payment:** PI-2701 [checkout-sdk-js types] Clear checkout-sdk-js types errors in test files for the TD Bank related packages ([#2723](https://github.com/bigcommerce/checkout-sdk-js/issues/2723)) ([a67f637](https://github.com/bigcommerce/checkout-sdk-js/commit/a67f6373c1e0f069920183e9dcfc602fcbcabf3c))\n\n## [1.677.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.676.0...v1.677.0) (2024-10-31)\n\n\n### Features\n\n* **payment:** PAYPAL-000 fixes passing parameters ([63c201e](https://github.com/bigcommerce/checkout-sdk-js/commit/63c201e6e0cab29319e3b3410f6906e2b39b2596))\n\n## [1.676.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.675.2...v1.676.0) (2024-10-31)\n\n\n### Features\n\n* **payment:** STRIPE-476 Stripe Google Pay 3DS added ([1b256db](https://github.com/bigcommerce/checkout-sdk-js/commit/1b256dbd28d022c3ed0e8e27f2442bd3e8d777a0))\n\n### [1.675.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.675.1...v1.675.2) (2024-10-30)\n\n\n### Bug Fixes\n\n* **checkout:** PI-116 use Square via v2 resolver, removed v1 resolver experiment ([#2713](https://github.com/bigcommerce/checkout-sdk-js/issues/2713)) ([0deff9a](https://github.com/bigcommerce/checkout-sdk-js/commit/0deff9a39afe187f172daafd5148fe68e5dc94a6))\n\n### [1.675.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.675.0...v1.675.1) (2024-10-29)\n\n## [1.675.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.674.0...v1.675.0) (2024-10-29)\n\n\n### Features\n\n* **payment:** STRIPE-461 New Stripe OCS strategy ([39d4fa2](https://github.com/bigcommerce/checkout-sdk-js/commit/39d4fa2d47408ab502daa21af338f9ab905f497d))\n\n## [1.674.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.673.0...v1.674.0) (2024-10-28)\n\n\n### Features\n\n* **payment:** PAYPAL-4697 added onEligibilityFailure callback to paypal commerce button strategies ([#2659](https://github.com/bigcommerce/checkout-sdk-js/issues/2659)) ([2a46a1d](https://github.com/bigcommerce/checkout-sdk-js/commit/2a46a1d5006199b06a76f906cdd93d7e758bee51))\n\n## [1.673.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.672.3...v1.673.0) (2024-10-28)\n\n\n### Features\n\n* **payment:** PAYPAL-4698 added onEligibilityFailure callback for Braintree PayPal and PayLater button strategies ([#2657](https://github.com/bigcommerce/checkout-sdk-js/issues/2657)) ([1c7a6bf](https://github.com/bigcommerce/checkout-sdk-js/commit/1c7a6bf0434d0a9e95b8d81bbb4bffcb2bf8ddaf))\n\n### [1.672.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.672.2...v1.672.3) (2024-10-23)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2688 clenup GPay integration package spec errors ([#2711](https://github.com/bigcommerce/checkout-sdk-js/issues/2711)) ([62c3832](https://github.com/bigcommerce/checkout-sdk-js/commit/62c383269c3d13ec3cce905f204cf62da1539417))\n\n### [1.672.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.672.1...v1.672.2) (2024-10-22)\n\n### [1.672.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.672.0...v1.672.1) (2024-10-21)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2692 clenup Mollie integration package spec errors ([#2705](https://github.com/bigcommerce/checkout-sdk-js/issues/2705)) ([23dbf30](https://github.com/bigcommerce/checkout-sdk-js/commit/23dbf30ef9f8d6eec1760f60edd29c6512d607d7))\n\n## [1.672.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.671.4...v1.672.0) (2024-10-21)\n\n\n### Features\n\n* **payment:** PAYPAL-4737 applepay button style option ([e4140ca](https://github.com/bigcommerce/checkout-sdk-js/commit/e4140cacb372ca1bb01c908f446f5851a9a33134))\n* **payment:** PAYPAL-4737 test coverage ([48329bd](https://github.com/bigcommerce/checkout-sdk-js/commit/48329bd40c3a20680fb243a19247e88e72b0cc45))\n\n### [1.671.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.671.3...v1.671.4) (2024-10-21)\n\n\n### Bug Fixes\n\n* **payment:** PI-1647 [Affirm] When returning to a cart with digital … ([#2688](https://github.com/bigcommerce/checkout-sdk-js/issues/2688)) ([0ff86fa](https://github.com/bigcommerce/checkout-sdk-js/commit/0ff86fa4e52ed925b6b78aacceac4dd08c78cdad))\n\n### [1.671.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.671.2...v1.671.3) (2024-10-21)\n\n\n### Code Refactoring\n\n* **payment:** PI-2702 [checkout-sdk-js types] Clear checkout-sdk-js types errors in test files for the Worldpay Access related packages ([#2700](https://github.com/bigcommerce/checkout-sdk-js/issues/2700)) ([450ea93](https://github.com/bigcommerce/checkout-sdk-js/commit/450ea93e8481388c944a4c8d45e920e780619408))\n\n### [1.671.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.671.1...v1.671.2) (2024-10-21)\n\n\n### Code Refactoring\n\n* **payment:** PI-2699 Clear checkout-sdk-js types errors in test files for the SquareV2 related packages ([#2696](https://github.com/bigcommerce/checkout-sdk-js/issues/2696)) ([963cb37](https://github.com/bigcommerce/checkout-sdk-js/commit/963cb37ffb43519826d73e378e3d49c4a86954cf))\n\n### [1.671.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.671.0...v1.671.1) (2024-10-21)\n\n\n### Bug Fixes\n\n* **payment:** PI-2697 [checkout-sdk-js types] Clear checkout-sdk-js types errors in test files for the Sagepay related packages ([#2706](https://github.com/bigcommerce/checkout-sdk-js/issues/2706)) ([8a84290](https://github.com/bigcommerce/checkout-sdk-js/commit/8a84290998379d0a8a2fc40e6363a7e0965cc207))\n\n## [1.671.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.670.1...v1.671.0) (2024-10-21)\n\n\n### Features\n\n* **shipping:** SHIPPING-3311 Update loadShippingCountries to allow for a default of no channel id ([#2704](https://github.com/bigcommerce/checkout-sdk-js/issues/2704)) ([2420032](https://github.com/bigcommerce/checkout-sdk-js/commit/2420032b2f4a9c83d0094a541ca16cf937867349))\n\n### [1.670.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.670.0...v1.670.1) (2024-10-17)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2691 clenup legacy integration spec error, removed no-unsafe-assignment added rule ([#2702](https://github.com/bigcommerce/checkout-sdk-js/issues/2702)) ([e81d38c](https://github.com/bigcommerce/checkout-sdk-js/commit/e81d38ce2b03d39b0b89dcac6495abd50562aa87))\n\n## [1.670.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.669.0...v1.670.0) (2024-10-17)\n\n\n### Features\n\n* **payment:** PAYPAL-4700 fix shipping options ([87cdbee](https://github.com/bigcommerce/checkout-sdk-js/commit/87cdbee5d5db4d451d1a309bc6d05e76d703c978))\n\n## [1.669.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.668.3...v1.669.0) (2024-10-17)\n\n\n### Features\n\n* **payment:** PI-2777 Move itemsRequireShipping method to the utils ([#2687](https://github.com/bigcommerce/checkout-sdk-js/issues/2687)) ([a5e2d08](https://github.com/bigcommerce/checkout-sdk-js/commit/a5e2d08e094dc4435b344b9fedfa2fd2114cb35b))\n\n### [1.668.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.668.2...v1.668.3) (2024-10-16)\n\n\n### Code Refactoring\n\n* **payment:** PI-2701 [checkout-sdk-js types] Clear checkout-sdk-js types errors in test files for the TD Bank related packages ([#2698](https://github.com/bigcommerce/checkout-sdk-js/issues/2698)) ([5fa4b73](https://github.com/bigcommerce/checkout-sdk-js/commit/5fa4b73726cb446c3cf782cffb9878b5175c4b4a))\n\n### [1.668.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.668.1...v1.668.2) (2024-10-15)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2783 clenup async functions test errors ([#2693](https://github.com/bigcommerce/checkout-sdk-js/issues/2693)) ([1197d39](https://github.com/bigcommerce/checkout-sdk-js/commit/1197d39415d22e544a08cb96a5b871771987c36f))\n\n### [1.668.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.668.0...v1.668.1) (2024-10-13)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-8519 Escape single quotes used for HTML attributes before formatting to avoid problems with ICU special characters ([b906300](https://github.com/bigcommerce/checkout-sdk-js/commit/b906300a8807b446cd55c9373763ba770464aec7))\n* **checkout:** CHECKOUT-8519 Return original message instead of throwing error when there are missing template variables ([a4b757c](https://github.com/bigcommerce/checkout-sdk-js/commit/a4b757c70087a54c10e310b66b8f3bf9cc816124))\n\n## [1.668.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.667.0...v1.668.0) (2024-10-11)\n\n\n### Features\n\n* **payment:** STRIPE-473 types correction in Stripe spec files ([84e488e](https://github.com/bigcommerce/checkout-sdk-js/commit/84e488ec84c6d3e8fff34c8672afed1d3a58ed8b))\n\n## [1.667.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.666.1...v1.667.0) (2024-10-10)\n\n\n### Features\n\n* **checkout:** CHECKOUT-8606 Make Payment Note Required ([#2694](https://github.com/bigcommerce/checkout-sdk-js/issues/2694)) ([7bacaca](https://github.com/bigcommerce/checkout-sdk-js/commit/7bacaca6fd4eec5fbd660c077b94b6fc3e29bc94))\n\n### [1.666.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.666.0...v1.666.1) (2024-10-09)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2686 fixed types in the Digital River integration package specs ([#2689](https://github.com/bigcommerce/checkout-sdk-js/issues/2689)) ([ae8a674](https://github.com/bigcommerce/checkout-sdk-js/commit/ae8a67462c30331fd2bae41f2af5ff01e3a04233))\n\n## [1.666.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.665.0...v1.666.0) (2024-10-09)\n\n\n### Features\n\n* **checkout:** CHECKOUT-8606 Add Note HostedFiledType ([#2683](https://github.com/bigcommerce/checkout-sdk-js/issues/2683)) ([92413d2](https://github.com/bigcommerce/checkout-sdk-js/commit/92413d27bd087be89f9f1e0d3cbe90ab2a77bafc))\n\n## [1.665.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.664.1...v1.665.0) (2024-10-08)\n\n\n### Features\n\n* **payment:** PAYPAL-4607 removed phone number related functionality ([#2672](https://github.com/bigcommerce/checkout-sdk-js/issues/2672)) ([4f43dab](https://github.com/bigcommerce/checkout-sdk-js/commit/4f43dab54561d70376ef075b584bdc54f60c13ae))\n\n### [1.664.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.664.0...v1.664.1) (2024-10-08)\n\n## [1.664.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.663.0...v1.664.0) (2024-10-08)\n\n\n### Features\n\n* **common:** CHECKOUT-8519 Switch messageformat library to be compatible with strict-dynamic CSP header ([fbf9c6d](https://github.com/bigcommerce/checkout-sdk-js/commit/fbf9c6da9c48c45b9d484269ea69769d363a89f1))\n\n## [1.663.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.662.5...v1.663.0) (2024-10-07)\n\n\n### Features\n\n* **payment:** PAYPAL-4744 Add validation for credit-card when Fastlane is enabled to avoid redundant order creation requests ([#2673](https://github.com/bigcommerce/checkout-sdk-js/issues/2673)) ([abbd81d](https://github.com/bigcommerce/checkout-sdk-js/commit/abbd81d23d56e0c0fa8c86b48285e9373d6e76a7))\n\n### [1.662.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.662.4...v1.662.5) (2024-10-07)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-4704 fixed duplicate credit card payment ([#2670](https://github.com/bigcommerce/checkout-sdk-js/issues/2670)) ([c1eae72](https://github.com/bigcommerce/checkout-sdk-js/commit/c1eae7243e95e52c09547b32795426af0cc37190))\n\n### [1.662.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.662.3...v1.662.4) (2024-10-04)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2690 fixed types in the Klarna  integration package specs ([#2681](https://github.com/bigcommerce/checkout-sdk-js/issues/2681)) ([1e8b4f4](https://github.com/bigcommerce/checkout-sdk-js/commit/1e8b4f421031f6778c78e5c0c5d92aa7e3500330))\n\n### [1.662.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.662.2...v1.662.3) (2024-10-04)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2689 fixed types in the Humm  integration package specs ([#2680](https://github.com/bigcommerce/checkout-sdk-js/issues/2680)) ([0948830](https://github.com/bigcommerce/checkout-sdk-js/commit/094883068de5af6f2c8368473e67c788d6278151))\n\n### [1.662.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.662.1...v1.662.2) (2024-10-04)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2683 fixed types in the Checkoutcom, Clearpay, Cybersource integration packages specs ([#2679](https://github.com/bigcommerce/checkout-sdk-js/issues/2679)) ([5dafc16](https://github.com/bigcommerce/checkout-sdk-js/commit/5dafc1674b1a1cca517cd1c8b14f7c779ae9712c))\n* **payment:** PI-2678 fixed Typescript errors in apple-pay-integration package ([#2677](https://github.com/bigcommerce/checkout-sdk-js/issues/2677)) ([45401f4](https://github.com/bigcommerce/checkout-sdk-js/commit/45401f46cdbc63ebf2fb7fb1dba2fc41ae4741b0))\n\n### [1.662.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.662.0...v1.662.1) (2024-10-03)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2680 fixed types in the Bolt, Cardinal integration packages specs ([#2678](https://github.com/bigcommerce/checkout-sdk-js/issues/2678)) ([91a9465](https://github.com/bigcommerce/checkout-sdk-js/commit/91a946564f3270fa2ae9fab5ea2db379416d834d))\n\n## [1.662.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.661.10...v1.662.0) (2024-10-03)\n\n\n### Features\n\n* **payment:** PAYPAL-4681 updated error checking ([#2669](https://github.com/bigcommerce/checkout-sdk-js/issues/2669)) ([07b3293](https://github.com/bigcommerce/checkout-sdk-js/commit/07b329348075cdff0fd2d1f2a0d4b364e22be7fb))\n\n### [1.661.10](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.661.9...v1.661.10) (2024-10-02)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2676 fixed types in the Afterpay, AmazonPay, Bluesnap integration packages specs ([#2676](https://github.com/bigcommerce/checkout-sdk-js/issues/2676)) ([f58a932](https://github.com/bigcommerce/checkout-sdk-js/commit/f58a932502ff81c1d53fbc9d9470f809f5ea72ee))\n\n### [1.661.9](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.661.8...v1.661.9) (2024-10-02)\n\n\n### Code Refactoring\n\n* **checkout:** PI-1588 resolve Quadpay payment method with Zip payment integration package ([#2662](https://github.com/bigcommerce/checkout-sdk-js/issues/2662)) ([cde1566](https://github.com/bigcommerce/checkout-sdk-js/commit/cde156638692d1dd90dda1cc83d784a176f0596c))\n\n### [1.661.8](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.661.7...v1.661.8) (2024-10-02)\n\n\n### Code Refactoring\n\n* **checkout:** PI-000 renamed all *.tsx files to *.ts ([#2675](https://github.com/bigcommerce/checkout-sdk-js/issues/2675)) ([8510e5e](https://github.com/bigcommerce/checkout-sdk-js/commit/8510e5e104e3f809e1c48ed9b03f30bf242b4221))\n\n### [1.661.7](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.661.6...v1.661.7) (2024-10-02)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2674 fixed types in the Affirm integration package specs ([#2671](https://github.com/bigcommerce/checkout-sdk-js/issues/2671)) ([895df12](https://github.com/bigcommerce/checkout-sdk-js/commit/895df122c88fa63c771572856fee4561e1736886))\n\n### [1.661.6](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.661.5...v1.661.6) (2024-10-01)\n\n### [1.661.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.661.4...v1.661.5) (2024-09-30)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2674 fixed types in the Adyen integration package specs ([#2667](https://github.com/bigcommerce/checkout-sdk-js/issues/2667)) ([0c88ee7](https://github.com/bigcommerce/checkout-sdk-js/commit/0c88ee7e1b55ed7b98d6719c103f02387461b74c))\n\n### [1.661.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.661.3...v1.661.4) (2024-09-26)\n\n### [1.661.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.661.2...v1.661.3) (2024-09-26)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-8653 Move tslib back to production dep ([#2664](https://github.com/bigcommerce/checkout-sdk-js/issues/2664)) ([238125c](https://github.com/bigcommerce/checkout-sdk-js/commit/238125c6b3b2c7d5298836d96c16caecd63d2b70))\n\n### [1.661.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.661.1...v1.661.2) (2024-09-25)\n\n### [1.661.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.661.0...v1.661.1) (2024-09-24)\n\n## [1.661.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.660.1...v1.661.0) (2024-09-24)\n\n\n### Features\n\n* **payment:** PAYPAL-4591 added 3ds check ([#2658](https://github.com/bigcommerce/checkout-sdk-js/issues/2658)) ([c72706a](https://github.com/bigcommerce/checkout-sdk-js/commit/c72706ad912608877d4d7b478a5b8071a6b55b46))\n\n### [1.660.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.660.0...v1.660.1) (2024-09-23)\n\n\n### Bug Fixes\n\n* **checkout:** PI-2633 removed modal window that appears during the frictionless 3ds flow for Adyen ([#2655](https://github.com/bigcommerce/checkout-sdk-js/issues/2655)) ([364fa14](https://github.com/bigcommerce/checkout-sdk-js/commit/364fa1493ba16bf0650626bfc8df9eb455890ceb))\n\n## [1.660.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.659.1...v1.660.0) (2024-09-23)\n\n\n### Features\n\n* **payment:** PAYPAL-4611 Update Braintree LPMs strategy by adding functionality for Trustly ([#2653](https://github.com/bigcommerce/checkout-sdk-js/issues/2653)) ([98077e2](https://github.com/bigcommerce/checkout-sdk-js/commit/98077e27b9248360f685061da19ba851d19e31a7))\n\n### [1.659.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.659.0...v1.659.1) (2024-09-19)\n\n## [1.659.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.658.1...v1.659.0) (2024-09-18)\n\n\n### Features\n\n* **payment:** PAYPAL-4591 added 3ds check ([#2654](https://github.com/bigcommerce/checkout-sdk-js/issues/2654)) ([31d0d27](https://github.com/bigcommerce/checkout-sdk-js/commit/31d0d272b8d6eb86f53b17df3d836d9030ebb789))\n\n### [1.658.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.658.0...v1.658.1) (2024-09-17)\n\n## [1.658.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.657.2...v1.658.0) (2024-09-17)\n\n\n### Features\n\n* **payment:** PI-2550 AmazonPay strategies from core ([a73b3f3](https://github.com/bigcommerce/checkout-sdk-js/commit/a73b3f3904b08440747c23ffae269da29f6e54aa))\n\n### [1.657.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.657.1...v1.657.2) (2024-09-16)\n\n\n### Bug Fixes\n\n* **checkout:** PI-2623 fixed submit payment for the Digital River ([#2649](https://github.com/bigcommerce/checkout-sdk-js/issues/2649)) ([5834bda](https://github.com/bigcommerce/checkout-sdk-js/commit/5834bda8e445cc85ac7d4ff5e1fddf133d2fa666))\n\n### [1.657.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.657.0...v1.657.1) (2024-09-16)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-4610 Avoiding redundant order creation requests ([#2632](https://github.com/bigcommerce/checkout-sdk-js/issues/2632)) ([1336b4c](https://github.com/bigcommerce/checkout-sdk-js/commit/1336b4c4ad89c666a4171d82c8c72b9607ec735d))\n\n## [1.657.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.656.1...v1.657.0) (2024-09-13)\n\n\n### Features\n\n* **payment:** PI-2549 Move AmazonPay button strategy ([e978cab](https://github.com/bigcommerce/checkout-sdk-js/commit/e978cab74aca4e8ca4db3362aad810771a1577b9))\n\n### [1.656.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.656.0...v1.656.1) (2024-09-13)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-4594 fixed mappig of fastlane styles that comes from backend ([#2645](https://github.com/bigcommerce/checkout-sdk-js/issues/2645)) ([4d487dc](https://github.com/bigcommerce/checkout-sdk-js/commit/4d487dc36d43219d794a17139d05c9126c07b078))\n\n## [1.656.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.655.3...v1.656.0) (2024-09-13)\n\n\n### Features\n\n* **payment:** PI-2548 Move AmazonPay customer strategy ([a9ec6cc](https://github.com/bigcommerce/checkout-sdk-js/commit/a9ec6ccb0b0420912f39b7aadd34acafd3acac06))\n\n### [1.655.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.655.2...v1.655.3) (2024-09-12)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-4594 fixed mappig of fastlane styles that comes from backend ([#2644](https://github.com/bigcommerce/checkout-sdk-js/issues/2644)) ([1eed196](https://github.com/bigcommerce/checkout-sdk-js/commit/1eed19671f882228e2acf1020de10efcc545d7e3))\n\n### [1.655.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.655.1...v1.655.2) (2024-09-12)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-4649 fixed the issue with Braintree Google Pay button for Buy Now flow ([#2641](https://github.com/bigcommerce/checkout-sdk-js/issues/2641)) ([646ee26](https://github.com/bigcommerce/checkout-sdk-js/commit/646ee26740d3fc11932edf7d971ae4e7524e6276))\n\n### [1.655.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.655.0...v1.655.1) (2024-09-11)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4662 removed 3.104.0 BraintreeSdk version ([#2638](https://github.com/bigcommerce/checkout-sdk-js/issues/2638)) ([85e4aa1](https://github.com/bigcommerce/checkout-sdk-js/commit/85e4aa164981c10c661741c0fba097a36241ec8d))\n\n## [1.655.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.654.0...v1.655.0) (2024-09-10)\n\n\n### Features\n\n* **payment:** PI-2592 Make remoteCheckoutActionCreator.signOut available for integration packages ([476d0b3](https://github.com/bigcommerce/checkout-sdk-js/commit/476d0b3ad09d22e3e0b65d1e746f8ac1fd561db5))\n\n## [1.654.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.653.0...v1.654.0) (2024-09-10)\n\n\n### Features\n\n* **payment:** PI-1617 Move AmazonPay payments strategy ([4e43119](https://github.com/bigcommerce/checkout-sdk-js/commit/4e43119d8edf399a4795966271efad1eb7ff0d0e))\n\n## [1.653.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.652.1...v1.653.0) (2024-09-04)\n\n\n### Features\n\n* **payment:** PI-2551 make widgetInteraction action available for integration packages ([76766ed](https://github.com/bigcommerce/checkout-sdk-js/commit/76766edae50db927e3eb54a11ff18a6229cc5836))\n\n### [1.652.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.652.0...v1.652.1) (2024-09-04)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4645 update Braintree Google Pay strategies to use BraintreeSdk instead of BraintreeIntegrationService ([#2636](https://github.com/bigcommerce/checkout-sdk-js/issues/2636)) ([8590d11](https://github.com/bigcommerce/checkout-sdk-js/commit/8590d11eff6309b4c267ed4b1eeb5a0404285f1f))\n\n## [1.652.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.651.0...v1.652.0) (2024-09-04)\n\n\n### Features\n\n* **payment:** PI-2547 create AmazonPay package ([a14251f](https://github.com/bigcommerce/checkout-sdk-js/commit/a14251f2b45c0e1f97d63787a597e3b58eb67534))\n\n## [1.651.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.650.3...v1.651.0) (2024-09-03)\n\n\n### Features\n\n* **checkout:** CHECKOUT-8587 Throw error when payment endpoint returns error/failure ([#2631](https://github.com/bigcommerce/checkout-sdk-js/issues/2631)) ([a1d2df7](https://github.com/bigcommerce/checkout-sdk-js/commit/a1d2df7f85f8d6692b8545f36ef628e24d464ac0))\n\n### [1.650.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.650.2...v1.650.3) (2024-09-02)\n\n\n### Code Refactoring\n\n* **checkout:** PI-1585 removed ChasePay related code ([#2630](https://github.com/bigcommerce/checkout-sdk-js/issues/2630)) ([c8ded7e](https://github.com/bigcommerce/checkout-sdk-js/commit/c8ded7ed19cbb74f048964fd8fec7bcfa915ea88))\n\n### [1.650.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.650.1...v1.650.2) (2024-09-02)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-426 fix GPay shipping for buy now flow ([820d483](https://github.com/bigcommerce/checkout-sdk-js/commit/820d4836d128f90eab1a68338d775df6888b3783))\n\n### [1.650.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.650.0...v1.650.1) (2024-08-30)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4619 removed A/B testing implementation from PPCP Fastlane customer strategy ([#2629](https://github.com/bigcommerce/checkout-sdk-js/issues/2629)) ([67fa070](https://github.com/bigcommerce/checkout-sdk-js/commit/67fa070c4cb6b8f822ab601bac13e1c2adb1c81f))\n\n## [1.650.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.649.0...v1.650.0) (2024-08-28)\n\n\n### Features\n\n* **payment:** PAYPAL-4618 updated braintree sdk version to 3.106.0 ([#2627](https://github.com/bigcommerce/checkout-sdk-js/issues/2627)) ([59b69b7](https://github.com/bigcommerce/checkout-sdk-js/commit/59b69b727288d753acf953fa86f6a195e54f69eb))\n\n## [1.649.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.648.0...v1.649.0) (2024-08-28)\n\n\n### Features\n\n* **payment:** PI-2467 Add \"submit\" method to the hosted-form-v2 package ([#2598](https://github.com/bigcommerce/checkout-sdk-js/issues/2598)) ([8bad2f4](https://github.com/bigcommerce/checkout-sdk-js/commit/8bad2f4145d81f691d8ef109a269deab0010c722))\n\n## [1.648.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.647.2...v1.648.0) (2024-08-28)\n\n\n### Features\n\n* **payment:** PI-2403 Pay by Bank integration ([8a3623d](https://github.com/bigcommerce/checkout-sdk-js/commit/8a3623d5f4e2c64861bfa88d369f71bc0602860b))\n\n### [1.647.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.647.1...v1.647.2) (2024-08-26)\n\n### [1.647.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.647.0...v1.647.1) (2024-08-26)\n\n## [1.647.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.646.3...v1.647.0) (2024-08-21)\n\n\n### Features\n\n* **payment:** PAYPAL-2611 moved BT venmo button strategy inside packages ([#2601](https://github.com/bigcommerce/checkout-sdk-js/issues/2601)) ([18577f4](https://github.com/bigcommerce/checkout-sdk-js/commit/18577f4eb22b17e67a4472992918444dd70c6ad8))\n\n### [1.646.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.646.2...v1.646.3) (2024-08-21)\n\n### [1.646.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.646.1...v1.646.2) (2024-08-21)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-8300 Fix config and form field cache by ensuring input parameters are correctly compared ([a568119](https://github.com/bigcommerce/checkout-sdk-js/commit/a568119142a529ec94360e17279b42a807a2f414))\n\n### [1.646.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.646.0...v1.646.1) (2024-08-19)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4578 updated apple pay strategies with braintree sdk ([#2612](https://github.com/bigcommerce/checkout-sdk-js/issues/2612)) ([61ffec7](https://github.com/bigcommerce/checkout-sdk-js/commit/61ffec7fc99ab248d8b688c8350f6b08c2c0ec8a))\n\n## [1.646.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.645.2...v1.646.0) (2024-08-19)\n\n\n### Features\n\n* **shipping:** SHIPPING-3183 Add support for channel_ids to the load shipping countries action ([#2579](https://github.com/bigcommerce/checkout-sdk-js/issues/2579)) ([1fcaf82](https://github.com/bigcommerce/checkout-sdk-js/commit/1fcaf82a16a4cdc029157f55b047c5c92fc38db4))\n\n### [1.645.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.645.1...v1.645.2) (2024-08-16)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-000 updated braintree fastlane script with valid sha hash for 3.104.0 braintree sdk version ([#2614](https://github.com/bigcommerce/checkout-sdk-js/issues/2614)) ([aac7292](https://github.com/bigcommerce/checkout-sdk-js/commit/aac7292bac9b1ca2d646f1af1b4fdf08fb559685))\n\n### [1.645.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.645.0...v1.645.1) (2024-08-16)\n\n\n### Bug Fixes\n\n* **common:** PAYPAL-000 fixed apple pay package name in codeowners file ([#2613](https://github.com/bigcommerce/checkout-sdk-js/issues/2613)) ([6d35f6d](https://github.com/bigcommerce/checkout-sdk-js/commit/6d35f6d5fefd915bcecf305250a059e38c4f6fa9))\n\n## [1.645.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.644.4...v1.645.0) (2024-08-15)\n\n\n### Features\n\n* **payment:** PAYPAL-4550 added force reload of paypal client to avoid initializaing with wrong intent value ([#2606](https://github.com/bigcommerce/checkout-sdk-js/issues/2606)) ([b48b119](https://github.com/bigcommerce/checkout-sdk-js/commit/b48b1199091460b8cf4221de7da60c71f549ed9c))\n\n### [1.644.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.644.3...v1.644.4) (2024-08-14)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-422 Fix saving Stripe Link instrument ([8f2f82d](https://github.com/bigcommerce/checkout-sdk-js/commit/8f2f82d5f01e11ac0f452a20f1d046a80f8de6f1))\n\n### [1.644.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.644.2...v1.644.3) (2024-08-14)\n\n### [1.644.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.644.1...v1.644.2) (2024-08-14)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4167 removed PAYPAL-4142.disable_paypal_fastlane_one_click_experience experiment usage from ppcp fastlane customer strategy ([#2607](https://github.com/bigcommerce/checkout-sdk-js/issues/2607)) ([bc5836b](https://github.com/bigcommerce/checkout-sdk-js/commit/bc5836bbe245d7f279e467fc71c665c39728c296))\n\n### [1.644.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.644.0...v1.644.1) (2024-08-14)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-422 Fix saving  Stripe Link instrument ([93d3f7c](https://github.com/bigcommerce/checkout-sdk-js/commit/93d3f7c1408779c147d96fe2c6215b86c1ac95c3))\n\n## [1.644.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.643.4...v1.644.0) (2024-08-13)\n\n\n### Features\n\n* **payment:** PI-2493 Add paymentHumanVerificationHandler method to Payment Integration Service ([#2596](https://github.com/bigcommerce/checkout-sdk-js/issues/2596)) ([78fe180](https://github.com/bigcommerce/checkout-sdk-js/commit/78fe180801e09f23b2b73ac486c09c97be79a1e1))\n\n### [1.643.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.643.3...v1.643.4) (2024-08-12)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-384 added Klarna id to the Stripe gateway ([782c503](https://github.com/bigcommerce/checkout-sdk-js/commit/782c503dd3207cc4b16288515f2fd2ca5adc6e9b))\n\n### [1.643.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.643.2...v1.643.3) (2024-08-08)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-421 payment method issue after PI change ([af6e579](https://github.com/bigcommerce/checkout-sdk-js/commit/af6e5790839b0eb0cd5aa33547ec02fad6b23e1b))\n\n### [1.643.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.643.1...v1.643.2) (2024-08-07)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4533 removed ts-ignore tech debt after jest update in core/src/extension folder ([#2592](https://github.com/bigcommerce/checkout-sdk-js/issues/2592)) ([498cda8](https://github.com/bigcommerce/checkout-sdk-js/commit/498cda8fe38e8e2ec61910ec7b30c24087f5bae2))\n\n### [1.643.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.643.0...v1.643.1) (2024-08-07)\n\n## [1.643.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.642.2...v1.643.0) (2024-08-06)\n\n\n### Features\n\n* **payment:** PI-2428 Google Pay on TD Online Mart - check if FE is working correctly, adjust communication FE -> BE ([#2594](https://github.com/bigcommerce/checkout-sdk-js/issues/2594)) ([33128ac](https://github.com/bigcommerce/checkout-sdk-js/commit/33128ac877e2d71e30d5fc441ac3fd919cb00ca3))\n\n### [1.642.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.642.1...v1.642.2) (2024-08-05)\n\n\n### Code Refactoring\n\n* **checkout:** PAYPAL-4527 removed almost all ts-ignore from core/src/checkout folder ([#2588](https://github.com/bigcommerce/checkout-sdk-js/issues/2588)) ([3be430f](https://github.com/bigcommerce/checkout-sdk-js/commit/3be430fecd9eef995399d8fd633ff685a737819d))\n* **payment:** PAYPAL-4531 removed ts-ignore and updated tests in core/src/billing folder ([#2589](https://github.com/bigcommerce/checkout-sdk-js/issues/2589)) ([5d38f3f](https://github.com/bigcommerce/checkout-sdk-js/commit/5d38f3facb33a40de0ce51e58b7cfa13541ed12e))\n* **payment:** PAYPAL-4531 removed ts-ignore and updated tests in core/src/coupon folder ([#2590](https://github.com/bigcommerce/checkout-sdk-js/issues/2590)) ([046caf5](https://github.com/bigcommerce/checkout-sdk-js/commit/046caf51703433cbf09dd5aa288d7b025ca2912c))\n\n### [1.642.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.642.0...v1.642.1) (2024-08-05)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4526 removed ts-ignore and updated tests in core/src/common/iframe folder due to jest update tech debt ([#2587](https://github.com/bigcommerce/checkout-sdk-js/issues/2587)) ([73e6d49](https://github.com/bigcommerce/checkout-sdk-js/commit/73e6d49030d6d32b101b1421d6380fea6542eded))\n\n## [1.642.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.641.1...v1.642.0) (2024-08-05)\n\n\n### Features\n\n* **payment:** PAYPAL-4524 fix of email passing ([d0207df](https://github.com/bigcommerce/checkout-sdk-js/commit/d0207df122043fb2735c159539a23b7a2012cf02))\n\n### [1.641.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.641.0...v1.641.1) (2024-08-05)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4525 removed ts-ignore and updated adyen mocks to fix the issue with ts-jest ([#2585](https://github.com/bigcommerce/checkout-sdk-js/issues/2585)) ([9248f26](https://github.com/bigcommerce/checkout-sdk-js/commit/9248f2612940eabe8e713d0ed75cb759a5a74d50))\n\n## [1.641.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.640.0...v1.641.0) (2024-08-02)\n\n\n### Features\n\n* **payment:** PAYPAL-4498 fixed region for fastlane for Thailand ([#2583](https://github.com/bigcommerce/checkout-sdk-js/issues/2583)) ([ab5964e](https://github.com/bigcommerce/checkout-sdk-js/commit/ab5964e113cefe18d99b40f3f46a5edf757f7c4b))\n\n## [1.640.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.639.0...v1.640.0) (2024-08-02)\n\n\n### Features\n\n* **payment:** PAYPAL-4497 fixed region for fastlane for Thailand ([#2582](https://github.com/bigcommerce/checkout-sdk-js/issues/2582)) ([b9b17a4](https://github.com/bigcommerce/checkout-sdk-js/commit/b9b17a49f8df0760c55c64def243b19139d23abb))\n\n## [1.639.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.638.0...v1.639.0) (2024-08-01)\n\n\n### Features\n\n* **payment:** PAYPAL-4519 fix shippingOption issue ([dc4ef42](https://github.com/bigcommerce/checkout-sdk-js/commit/dc4ef42d3d651c7fbf7e08072cf1b3c7cc29f411))\n\n## [1.638.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.637.0...v1.638.0) (2024-08-01)\n\n\n### Features\n\n* **payment:** PAYPAL-000 updated hash parameters ([00363ff](https://github.com/bigcommerce/checkout-sdk-js/commit/00363ff964a9e5691b25f7e14d321726abf49b30))\n\n## [1.637.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.636.0...v1.637.0) (2024-07-31)\n\n\n### Features\n\n* **checkout:** PI-1560 add additional arguments check ([f7e4124](https://github.com/bigcommerce/checkout-sdk-js/commit/f7e4124fd4db696b6ce3b6c723735b2e21509ce7))\n* **checkout:** PI-1560 add additional information to README file ([109f71c](https://github.com/bigcommerce/checkout-sdk-js/commit/109f71c6cf409fbeadcf6de7ea07aee5bd672127))\n* **checkout:** PI-1560 Refactor Digital River paymnt strategy in checkout-sdk ([a2a511a](https://github.com/bigcommerce/checkout-sdk-js/commit/a2a511a15a236f0c9a883cc7e1ad83be1ca51f8a))\n* **checkout:** PI-1560 remove underscores ([1cfeb82](https://github.com/bigcommerce/checkout-sdk-js/commit/1cfeb8271fb0cf9c407e7de7604c107a51b9d8cb))\n\n## [1.636.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.635.0...v1.636.0) (2024-07-29)\n\n\n### Features\n\n* **payment:** PAYPAL-4488 update braintree sdk version to 3.104.0 ([#2578](https://github.com/bigcommerce/checkout-sdk-js/issues/2578)) ([e239b48](https://github.com/bigcommerce/checkout-sdk-js/commit/e239b481137efcaa329e5ea47b54a21320c5c6ca))\n\n## [1.635.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.634.0...v1.635.0) (2024-07-29)\n\n\n### Features\n\n* **payment:** STRIPE-378 GooglePay shipping options ([dfb88ff](https://github.com/bigcommerce/checkout-sdk-js/commit/dfb88ffd09d7a57daedcf00b486a4c7faa664029))\n\n## [1.634.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.633.1...v1.634.0) (2024-07-29)\n\n\n### Features\n\n* **checkout:** PI-2290 Adyen Credit Card installments implementation ([#2572](https://github.com/bigcommerce/checkout-sdk-js/issues/2572)) ([5cc2c06](https://github.com/bigcommerce/checkout-sdk-js/commit/5cc2c06c3ba1dd9fda9bd8d88f5711a5f2e26dc4))\n\n### [1.633.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.633.0...v1.633.1) (2024-07-29)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-329 added name to Stripe billing_details object ([f2c271c](https://github.com/bigcommerce/checkout-sdk-js/commit/f2c271c0af902b63eb9bf540a73299bcd6102c47))\n\n## [1.633.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.632.0...v1.633.0) (2024-07-25)\n\n\n### Features\n\n* **payment:** PAYPAL-4441 updated Braintree Fastlane strategies with isFastlaneStylingEnabled flag ([#2576](https://github.com/bigcommerce/checkout-sdk-js/issues/2576)) ([12396a2](https://github.com/bigcommerce/checkout-sdk-js/commit/12396a2516612b879de23943e8e04daaa751770f))\n\n## [1.632.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.631.1...v1.632.0) (2024-07-25)\n\n\n### Features\n\n* **payment:** PAYPAL-4440 updated ppcp fastlane strategies with fastlane flag to be able to turn on/off fastlane custom styling ([#2575](https://github.com/bigcommerce/checkout-sdk-js/issues/2575)) ([788bdaf](https://github.com/bigcommerce/checkout-sdk-js/commit/788bdaf5c16b24f246cf9b9aff4df0868f6117ed))\n\n### [1.631.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.631.0...v1.631.1) (2024-07-17)\n\n## [1.631.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.630.3...v1.631.0) (2024-07-16)\n\n\n### Features\n\n* **payment:** PI-2285 Add Google Pay on TD Online Mart - all other places ([#2570](https://github.com/bigcommerce/checkout-sdk-js/issues/2570)) ([be88c0d](https://github.com/bigcommerce/checkout-sdk-js/commit/be88c0dbef94825905d2654a41647b5dd1954486))\n\n### [1.630.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.630.2...v1.630.3) (2024-07-10)\n\n### [1.630.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.630.1...v1.630.2) (2024-07-09)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2349 moved Worldpay Access payment strategy to separate package ([#2565](https://github.com/bigcommerce/checkout-sdk-js/issues/2565)) ([efa8e1e](https://github.com/bigcommerce/checkout-sdk-js/commit/efa8e1ea0a7e9ce5a869ae1e27240ab5e54b26a4))\n\n### [1.630.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.630.0...v1.630.1) (2024-07-09)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-4379 fixed the issue with Braintree Fastlane initialization process ([#2568](https://github.com/bigcommerce/checkout-sdk-js/issues/2568)) ([e79a549](https://github.com/bigcommerce/checkout-sdk-js/commit/e79a549e154591ef3dfd106a24a17c14cca5ba01))\n\n## [1.630.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.629.1...v1.630.0) (2024-07-09)\n\n\n### Features\n\n* **checkout:** CHECKOUT-8281 Add 3 New Checkout Extension Regions ([#2567](https://github.com/bigcommerce/checkout-sdk-js/issues/2567)) ([07863ec](https://github.com/bigcommerce/checkout-sdk-js/commit/07863eccaa5da325c0f185ae0ade2ab263291ec3))\n\n### [1.629.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.629.0...v1.629.1) (2024-07-09)\n\n\n### Bug Fixes\n\n* **billing:** CHECKOUT-8392 Fix issue with billing address creation ([#2566](https://github.com/bigcommerce/checkout-sdk-js/issues/2566)) ([4754e72](https://github.com/bigcommerce/checkout-sdk-js/commit/4754e7240f2db0dc1b3540753d33de194626d33c))\n\n## [1.629.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.628.0...v1.629.0) (2024-07-08)\n\n\n### Features\n\n* **payment:** PI-2284 Add Google Pay on TD Online Mart - checkout customer step ([#2557](https://github.com/bigcommerce/checkout-sdk-js/issues/2557)) ([1fab402](https://github.com/bigcommerce/checkout-sdk-js/commit/1fab402ded4c3b2544083b49b01a0b6572746227))\n\n## [1.628.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.627.1...v1.628.0) (2024-07-08)\n\n\n### Features\n\n* **payment:** PAYPAL-4284 reverted PPCP onShippingAddressChange and onShippingOptionChange callbacks ([#2561](https://github.com/bigcommerce/checkout-sdk-js/issues/2561)) ([d337f12](https://github.com/bigcommerce/checkout-sdk-js/commit/d337f12343ed5c32971339eea1e3feea11756de8))\n\n### [1.627.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.627.0...v1.627.1) (2024-07-02)\n\n## [1.627.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.626.0...v1.627.0) (2024-07-02)\n\n\n### Features\n\n* **payment:** PAYPAL-4147 added CP styles for Paypal fastlane ([#2558](https://github.com/bigcommerce/checkout-sdk-js/issues/2558)) ([e18b47d](https://github.com/bigcommerce/checkout-sdk-js/commit/e18b47d35b10aa69431cbba49dfde404ff8d3a9f))\n\n## [1.626.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.625.0...v1.626.0) (2024-07-02)\n\n\n### Features\n\n* **payment:** PAYPAL-4148 added styles to fastlane ([#2547](https://github.com/bigcommerce/checkout-sdk-js/issues/2547)) ([2fd7a8a](https://github.com/bigcommerce/checkout-sdk-js/commit/2fd7a8a1a1def62ed488ebc7c4ee9ccfce8dd53e))\n\n## [1.625.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.624.0...v1.625.0) (2024-07-02)\n\n\n### Features\n\n* **payment:** PAYPAL-2613 Move BraintreeVisaCheckout customer strategy to braintree-integration package ([#2555](https://github.com/bigcommerce/checkout-sdk-js/issues/2555)) ([099a3a4](https://github.com/bigcommerce/checkout-sdk-js/commit/099a3a42a5a8a62885bbb7124426da544da8948d))\n\n## [1.624.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.623.2...v1.624.0) (2024-07-02)\n\n\n### Features\n\n* **payment:** PI-2283 Add Google Pay on TD Online Mart - checkout payment step ([#2552](https://github.com/bigcommerce/checkout-sdk-js/issues/2552)) ([5b43dae](https://github.com/bigcommerce/checkout-sdk-js/commit/5b43daebff0aad6edd0b3efe6ecdacefefc98bfc))\n\n### [1.623.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.623.1...v1.623.2) (2024-06-27)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-385 Fix linter issue ([cad4fac](https://github.com/bigcommerce/checkout-sdk-js/commit/cad4fac3fc93f9b10510163b9fc6d70723773c24))\n\n### [1.623.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.623.0...v1.623.1) (2024-06-27)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-385 add currencyService to payment integration service ([c5e456b](https://github.com/bigcommerce/checkout-sdk-js/commit/c5e456be38b0d743954e5b073385e912918d11fa))\n* **payment:** STRIPE-385 add currencyService to payment integration service ([7454d8b](https://github.com/bigcommerce/checkout-sdk-js/commit/7454d8b678631b01a90ec8ba27336fb06b6d41c3))\n\n## [1.623.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.622.1...v1.623.0) (2024-06-27)\n\n\n### Features\n\n* **payment:** PAYPAL-4141 added fulll name to getPaymentToken config ([#2550](https://github.com/bigcommerce/checkout-sdk-js/issues/2550)) ([cf497b2](https://github.com/bigcommerce/checkout-sdk-js/commit/cf497b2d854e877c86d1295ea76cc6a32cc9735a))\n\n### [1.622.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.622.0...v1.622.1) (2024-06-25)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-3600 removed braintree connect implementation for all braintree strategies ([#2546](https://github.com/bigcommerce/checkout-sdk-js/issues/2546)) ([3cdef1d](https://github.com/bigcommerce/checkout-sdk-js/commit/3cdef1d640759f86faf9b7880e3ec6218ad2140d))\n\n## [1.622.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.621.1...v1.622.0) (2024-06-25)\n\n\n### Features\n\n* **checkout:** PAYPAL-4200 provided initial state config for store creation on createCheckoutButtonInitializer ([#2533](https://github.com/bigcommerce/checkout-sdk-js/issues/2533)) ([67ce659](https://github.com/bigcommerce/checkout-sdk-js/commit/67ce6596a3e03e1cd32443b381ee87771646c114))\n\n### [1.621.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.621.0...v1.621.1) (2024-06-20)\n\n\n### Code Refactoring\n\n* **checkout:** PI-2169 removed all code related to the GooglePay from the core package ([#2527](https://github.com/bigcommerce/checkout-sdk-js/issues/2527)) ([ec32de8](https://github.com/bigcommerce/checkout-sdk-js/commit/ec32de80000b58fe37b4d69e1bf265af4beadc52))\n\n## [1.621.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.620.0...v1.621.0) (2024-06-18)\n\n\n### Features\n\n* **payment:** PAYPAL-4292 corrected amount parameter ([#2545](https://github.com/bigcommerce/checkout-sdk-js/issues/2545)) ([bce6eed](https://github.com/bigcommerce/checkout-sdk-js/commit/bce6eed29114e94733b4dcd29d5d0794bb4c6275))\n\n## [1.620.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.619.0...v1.620.0) (2024-06-17)\n\n\n### Features\n\n* **payment:** PAYPAL-4203 Braintree visa checkout button strategy ([#2538](https://github.com/bigcommerce/checkout-sdk-js/issues/2538)) ([fe84ca8](https://github.com/bigcommerce/checkout-sdk-js/commit/fe84ca86bc1a55b0892dc831220a5f23de526a8d))\n\n\n### Code Refactoring\n\n* **payment:** PI-1593 moved Clearpay to separate package ([#2541](https://github.com/bigcommerce/checkout-sdk-js/issues/2541)) ([9bffd58](https://github.com/bigcommerce/checkout-sdk-js/commit/9bffd58b9ff30a4687b0158f187f1ccae680e5a2))\n\n## [1.619.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.618.5...v1.619.0) (2024-06-17)\n\n\n### Features\n\n* **payment:** PAYPAL-3273 added patch method on paypal order creation for non instant payment methods PPCP ([#2542](https://github.com/bigcommerce/checkout-sdk-js/issues/2542)) ([a7ca27f](https://github.com/bigcommerce/checkout-sdk-js/commit/a7ca27fb1f7ad26f04724ff13b64a90eb8b977f4))\n\n### [1.618.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.618.4...v1.618.5) (2024-06-17)\n\n### [1.618.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.618.3...v1.618.4) (2024-06-13)\n\n\n### Bug Fixes\n\n* **payment:** PI-2161 [TDOnlineMart] fix issue with vaulted card payment when mixed products in the cart ([#2540](https://github.com/bigcommerce/checkout-sdk-js/issues/2540)) ([e4404ef](https://github.com/bigcommerce/checkout-sdk-js/commit/e4404efaebbc4bb970c7ae47840319d22ac5ec41))\n\n### [1.618.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.618.2...v1.618.3) (2024-06-13)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-4308 removed braintree fastlane default styling ([#2544](https://github.com/bigcommerce/checkout-sdk-js/issues/2544)) ([8a67286](https://github.com/bigcommerce/checkout-sdk-js/commit/8a67286a6a74406662f944fd5352c4d8e6d4fef3))\n\n### [1.618.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.618.1...v1.618.2) (2024-06-12)\n\n\n### Bug Fixes\n\n* **payment:** PI-831 fixed mollie ApplePay redirect ([#2543](https://github.com/bigcommerce/checkout-sdk-js/issues/2543)) ([b1e43b3](https://github.com/bigcommerce/checkout-sdk-js/commit/b1e43b3523f1d87c53ce730bf862bf049f489e79))\n\n### [1.618.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.618.0...v1.618.1) (2024-06-10)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4294 removed PayPal Connect implementation from PayPal Commerce strategies ([#2537](https://github.com/bigcommerce/checkout-sdk-js/issues/2537)) ([3ecb580](https://github.com/bigcommerce/checkout-sdk-js/commit/3ecb5800938f79e6e41afb0415d0012b34e6cf23))\n\n## [1.618.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.617.2...v1.618.0) (2024-06-06)\n\n\n### Features\n\n* **payment:** PAYPAL-4231 added onCreditCardFieldsRenderingError callback to ppcp cc payment strategy to let handle an error on UI side ([#2536](https://github.com/bigcommerce/checkout-sdk-js/issues/2536)) ([04747be](https://github.com/bigcommerce/checkout-sdk-js/commit/04747bece0afd305040cb2957d34d9e9e464d470))\n\n### [1.617.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.617.1...v1.617.2) (2024-06-06)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4251 updated Braintree Fastlane strategies to run the flow only for guests ([#2535](https://github.com/bigcommerce/checkout-sdk-js/issues/2535)) ([9f28a10](https://github.com/bigcommerce/checkout-sdk-js/commit/9f28a1092f6f317bf3b163565db8f4e35b30ee2c))\n\n### [1.617.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.617.0...v1.617.1) (2024-06-06)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-3598 updated PPCP Fastlane strategies to trigger the flow only for Guests ([#2534](https://github.com/bigcommerce/checkout-sdk-js/issues/2534)) ([065bb3d](https://github.com/bigcommerce/checkout-sdk-js/commit/065bb3d7125162ef3c8e18da3487bc213485ea2c))\n\n## [1.617.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.616.0...v1.617.0) (2024-06-06)\n\n\n### Features\n\n* **payment:** PI-1596 Refactor `cybersource` and `cybersourcev2` payment strategies to use Payment Integration API ([#2529](https://github.com/bigcommerce/checkout-sdk-js/issues/2529)) ([6b9a5f4](https://github.com/bigcommerce/checkout-sdk-js/commit/6b9a5f478f8f7b4f50f52b9c731d513f26b25b75))\n\n## [1.616.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.615.0...v1.616.0) (2024-06-04)\n\n\n### Features\n\n* **payment:** PAYPAL-2518 Add challengeRequested property to 3D Secure ([#2526](https://github.com/bigcommerce/checkout-sdk-js/issues/2526)) ([293cc71](https://github.com/bigcommerce/checkout-sdk-js/commit/293cc7155cdc4df079021cc268fc6cf30fe416c1))\n\n## [1.615.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.614.1...v1.615.0) (2024-06-04)\n\n\n### Features\n\n* **payment:** PAYPAL-4138 prefilled cardholder name ([#2530](https://github.com/bigcommerce/checkout-sdk-js/issues/2530)) ([839f27b](https://github.com/bigcommerce/checkout-sdk-js/commit/839f27b68f88750fc20753c761fdb6dda3413ed8))\n\n### [1.614.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.614.0...v1.614.1) (2024-06-04)\n\n\n### Bug Fixes\n\n* **payment:** PI-2191 fixed hosted fields validation for the WorldpayAccess and Authorize.net test cards ([#2532](https://github.com/bigcommerce/checkout-sdk-js/issues/2532)) ([f5656f5](https://github.com/bigcommerce/checkout-sdk-js/commit/f5656f56671cacd6737c04ff34117b5eebe5995c))\n\n## [1.614.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.613.0...v1.614.0) (2024-06-04)\n\n\n### Features\n\n* **payment:** PAYPAL-3520 Max capture amount failure ([#2485](https://github.com/bigcommerce/checkout-sdk-js/issues/2485)) ([968015a](https://github.com/bigcommerce/checkout-sdk-js/commit/968015a205af7600dee716ae259d3f5f6c0b49de))\n\n## [1.613.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.612.1...v1.613.0) (2024-05-29)\n\n\n### Features\n\n* **payment:** PI-1578 Refactor the existing sage-pay payment strategy in Checkout SDK ([781599a](https://github.com/bigcommerce/checkout-sdk-js/commit/781599a72eebd30f72e63d4b9740a649717e2385))\n\n### [1.612.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.612.0...v1.612.1) (2024-05-28)\n\n## [1.612.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.611.0...v1.612.0) (2024-05-28)\n\n\n### Features\n\n* **payment:** PI-2132 Call Klarna order initialization endpoint befo… …re showing Klarna pop-up window ([#2523](https://github.com/bigcommerce/checkout-sdk-js/issues/2523)) ([18eb65c](https://github.com/bigcommerce/checkout-sdk-js/commit/18eb65c4ab6dd1ccdffee04341dd5225a1f1620c))\n\n\n### Bug Fixes\n\n* **embedded-checkout:** ISSUE-2189 Changed deprecated property of allowPaymentRequest=true to allow=payment in embedded checkout to support apple pay on Safari browser ([#2190](https://github.com/bigcommerce/checkout-sdk-js/issues/2190)) ([4cd2b8e](https://github.com/bigcommerce/checkout-sdk-js/commit/4cd2b8ef8126cec9ac9a81675cbfb6c15cbb8a71))\n\n## [1.611.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.610.0...v1.611.0) (2024-05-28)\n\n\n### Features\n\n* **payment:** PAYPAL-2520 Add 3d secure iframe window size property ([#2521](https://github.com/bigcommerce/checkout-sdk-js/issues/2521)) ([f8df60c](https://github.com/bigcommerce/checkout-sdk-js/commit/f8df60cb31f7f20663d45a0268d96731907eb0ae))\n\n## [1.610.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.609.0...v1.610.0) (2024-05-24)\n\n\n### Features\n\n* **payment:** PAYPAL-4173 navigate to payment step when shipping and billing is defined ([#2517](https://github.com/bigcommerce/checkout-sdk-js/issues/2517)) ([9860811](https://github.com/bigcommerce/checkout-sdk-js/commit/986081113ccddf9b9e8908326a393a1d371f615f))\n\n## [1.609.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.608.0...v1.609.0) (2024-05-20)\n\n\n### Features\n\n* **payment:** PI-2061 Added Amazon Pay button hidden microtext feature flag ([#2509](https://github.com/bigcommerce/checkout-sdk-js/issues/2509)) ([95b97db](https://github.com/bigcommerce/checkout-sdk-js/commit/95b97db6384db15101b8cdc99c31473fda95f52e))\n\n## [1.608.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.607.0...v1.608.0) (2024-05-20)\n\n\n### Features\n\n* **payment:** PAYPAL-4068 added BT Fastlane address shipping selector ([#2493](https://github.com/bigcommerce/checkout-sdk-js/issues/2493)) ([1b1f5d0](https://github.com/bigcommerce/checkout-sdk-js/commit/1b1f5d09e0b4681a3e6a5197c5acc3a0672ffd54))\n\n## [1.607.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.606.0...v1.607.0) (2024-05-20)\n\n\n### Features\n\n* **payment:** PAYPAL-2624 moved paypa-pro to a separate package ([#2503](https://github.com/bigcommerce/checkout-sdk-js/issues/2503)) ([7bcce03](https://github.com/bigcommerce/checkout-sdk-js/commit/7bcce03f013e5c426a6587494fa12019461c9295))\n\n## [1.606.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.605.0...v1.606.0) (2024-05-20)\n\n\n### Features\n\n* **payment:** PAYPAL-4142 added shipping option autoselect to PPCP Fastlane customer startegy ([#2512](https://github.com/bigcommerce/checkout-sdk-js/issues/2512)) ([b701314](https://github.com/bigcommerce/checkout-sdk-js/commit/b701314e403cd78e4993fe167a0f2d3ffeb4465b))\n\n## [1.605.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.604.0...v1.605.0) (2024-05-20)\n\n\n### Features\n\n* **payment:** PAYPAL-4170 fixed phone number ([#2513](https://github.com/bigcommerce/checkout-sdk-js/issues/2513)) ([631e345](https://github.com/bigcommerce/checkout-sdk-js/commit/631e345eed9d34cf771eb0a91edd6f66d71099ad))\n\n## [1.604.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.603.0...v1.604.0) (2024-05-15)\n\n\n### Features\n\n* **payment:** PAYPAL-4140 updated getPaymentToken method payload with customer fullname in PPCP Fastlane Payment strategy ([#2508](https://github.com/bigcommerce/checkout-sdk-js/issues/2508)) ([2899e3c](https://github.com/bigcommerce/checkout-sdk-js/commit/2899e3ca4fdf3790da4b45582869f0eaf56ba252))\n\n## [1.603.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.602.0...v1.603.0) (2024-05-15)\n\n\n### Features\n\n* **payment:** PAYPAL-4051 Apple Pay throws an error in checkout due to attempting to load Braintree information ([#2469](https://github.com/bigcommerce/checkout-sdk-js/issues/2469)) ([7599f66](https://github.com/bigcommerce/checkout-sdk-js/commit/7599f66182c33b799f4c1509547b7b19155f4f38))\n\n## [1.602.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.601.0...v1.602.0) (2024-05-15)\n\n\n### Features\n\n* **payment:** PAYPAL-4123 digital item fix ([c0afa27](https://github.com/bigcommerce/checkout-sdk-js/commit/c0afa27bfe2a4ca1a99f60c33033bc6ea9303543))\n\n## [1.601.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.600.2...v1.601.0) (2024-05-14)\n\n\n### Features\n\n* **payment:** PAYPAL-4137 prepopulate cardholder name with customer billing info on Fastlane Card Component ([#2505](https://github.com/bigcommerce/checkout-sdk-js/issues/2505)) ([1bf6e89](https://github.com/bigcommerce/checkout-sdk-js/commit/1bf6e896157eacc1f67256814f1d1f69be41c1db))\n\n### [1.600.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.600.1...v1.600.2) (2024-05-13)\n\n### [1.600.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.600.0...v1.600.1) (2024-05-13)\n\n\n### Code Refactoring\n\n* **payment:** PI-1558 removed googlepay buttons from checkout button registry v1 ([#2496](https://github.com/bigcommerce/checkout-sdk-js/issues/2496)) ([5331635](https://github.com/bigcommerce/checkout-sdk-js/commit/53316357b98ba93300a7cee3c3defad263fe39ef))\n\n## [1.600.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.599.0...v1.600.0) (2024-05-09)\n\n\n### Features\n\n* **payment:** PI-1586 Refactor the existing zip payment strategy in Checkout SDK ([c922d80](https://github.com/bigcommerce/checkout-sdk-js/commit/c922d804d5d8cc1fedc8a065238ac0f0d3501f46))\n\n## [1.599.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.598.0...v1.599.0) (2024-05-08)\n\n\n### Features\n\n* **payment:** PI-1584 move Cardinal to separate package ([#2495](https://github.com/bigcommerce/checkout-sdk-js/issues/2495)) ([d871ee9](https://github.com/bigcommerce/checkout-sdk-js/commit/d871ee9decc1efa5339ed32361dd72d9a4f6bf4d))\n\n## [1.598.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.597.0...v1.598.0) (2024-05-07)\n\n\n### Features\n\n* **payment:** PAYPAL-4111 update commit parameter ([400a427](https://github.com/bigcommerce/checkout-sdk-js/commit/400a4279c9d43b52a3ac5207a379debd72120a1b))\n\n## [1.597.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.596.0...v1.597.0) (2024-05-03)\n\n\n### Features\n\n* **payment:** PAYPAL-4108 preselect billing with firstName and lastName for only digital items in cart ([#2498](https://github.com/bigcommerce/checkout-sdk-js/issues/2498)) ([014b9c0](https://github.com/bigcommerce/checkout-sdk-js/commit/014b9c0d32e8780ae285f9c8d253bd27fd8b4140))\n\n## [1.596.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.595.0...v1.596.0) (2024-05-02)\n\n\n### Features\n\n* **payment:** PI-000 update Payment Integration API ([#2491](https://github.com/bigcommerce/checkout-sdk-js/issues/2491)) ([6437e08](https://github.com/bigcommerce/checkout-sdk-js/commit/6437e0819139f3fa862aac1a02c04eb572406904))\n\n## [1.595.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.594.0...v1.595.0) (2024-05-02)\n\n\n### Features\n\n* **payment:** PAYPAL-4069 removed temporary import and export ([#2486](https://github.com/bigcommerce/checkout-sdk-js/issues/2486)) ([42ece43](https://github.com/bigcommerce/checkout-sdk-js/commit/42ece43391da0dd403632474d76dcf2774db47d1))\n\n## [1.594.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.593.2...v1.594.0) (2024-05-02)\n\n\n### Features\n\n* **payment:** PAYPAL-4069 renamed braintree accelerated checkout shipping strategy files ([#2482](https://github.com/bigcommerce/checkout-sdk-js/issues/2482)) ([bb0686b](https://github.com/bigcommerce/checkout-sdk-js/commit/bb0686b755af2976e95f671513f244234c23649c))\n\n### [1.593.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.593.1...v1.593.2) (2024-04-30)\n\n\n### Code Refactoring\n\n* **payment:** PI-1901 moved Adyen googlepay buttons strategy from core package ([#2484](https://github.com/bigcommerce/checkout-sdk-js/issues/2484)) ([7c997eb](https://github.com/bigcommerce/checkout-sdk-js/commit/7c997eb67d18de55abd8bf15b15e9dd9b84fb8f8))\n\n### [1.593.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.593.0...v1.593.1) (2024-04-30)\n\n\n### Code Refactoring\n\n* **payment:** PI-1852 moved Adyen googlepay customer strategy from core package ([#2483](https://github.com/bigcommerce/checkout-sdk-js/issues/2483)) ([306d077](https://github.com/bigcommerce/checkout-sdk-js/commit/306d077dc4d5ac1b9d439b4bb8233fc78994776d))\n\n## [1.593.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.592.1...v1.593.0) (2024-04-30)\n\n\n### Features\n\n* **payment:** PI-1831 [Humm] Refactor the existing `humm` payment st… ([#2433](https://github.com/bigcommerce/checkout-sdk-js/issues/2433)) ([3c52ed1](https://github.com/bigcommerce/checkout-sdk-js/commit/3c52ed1fdcf98902d986f7d98040c75724a5c64d))\n\n### [1.592.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.592.0...v1.592.1) (2024-04-29)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-4088 fixed the issue with Fastlane place order with paypal instrument ([#2490](https://github.com/bigcommerce/checkout-sdk-js/issues/2490)) ([355261d](https://github.com/bigcommerce/checkout-sdk-js/commit/355261da597b230ee80e718e829e99663ef183c5))\n\n## [1.592.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.591.0...v1.592.0) (2024-04-26)\n\n\n### Features\n\n* **payment:** PAYPAL-4069 renamed braintree accelerated checkout shipping strategy files ([#2481](https://github.com/bigcommerce/checkout-sdk-js/issues/2481)) ([d96d437](https://github.com/bigcommerce/checkout-sdk-js/commit/d96d437a92a009cf429da0b8d2554979c3964540))\n\n## [1.591.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.590.0...v1.591.0) (2024-04-25)\n\n\n### Features\n\n* **payment:** PAYPAL-4067 added paypal fastlane shipping selector implementation to paypal commerce fastlane shipping strategy ([#2479](https://github.com/bigcommerce/checkout-sdk-js/issues/2479)) ([4316554](https://github.com/bigcommerce/checkout-sdk-js/commit/4316554ebc7d4139b15ffbc4110f584a48343c73))\n\n## [1.590.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.589.1...v1.590.0) (2024-04-25)\n\n\n### Features\n\n* **payment:** PAYPAL-4082 updated PayPalFastlaneComponent with PayPalCardComponent from paypal sdk ([#2480](https://github.com/bigcommerce/checkout-sdk-js/issues/2480)) ([810cddd](https://github.com/bigcommerce/checkout-sdk-js/commit/810cddd83be7ad97b031e083f2c24a329b645772))\n\n### [1.589.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.589.0...v1.589.1) (2024-04-24)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-4070 updated shipping initialize options with braintreefastlane and paypalcommercefastlane options ([#2478](https://github.com/bigcommerce/checkout-sdk-js/issues/2478)) ([b0faf44](https://github.com/bigcommerce/checkout-sdk-js/commit/b0faf449b77394d9d11ad95251151bd98d04048d))\n\n## [1.589.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.588.0...v1.589.0) (2024-04-24)\n\n\n### Features\n\n* **payment:** PI-1581 Refactor the existing checkoutcom components ([3ddf9c4](https://github.com/bigcommerce/checkout-sdk-js/commit/3ddf9c46e448036634f3478175cdfb90a5817a30))\n\n## [1.588.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.587.0...v1.588.0) (2024-04-23)\n\n\n### Features\n\n* **payment:** PAYPAL-3976 added credit card name field validation ([#2465](https://github.com/bigcommerce/checkout-sdk-js/issues/2465)) ([794fd0a](https://github.com/bigcommerce/checkout-sdk-js/commit/794fd0a8445738aa51f5c0fc9f1b9f7bf5505cbc))\n\n## [1.587.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.586.0...v1.587.0) (2024-04-23)\n\n\n### Features\n\n* **payment:** PI-1606 [Afterpay] Move Afterpay payment strategy to separate package in checkout-sdk-js ([#2446](https://github.com/bigcommerce/checkout-sdk-js/issues/2446)) ([2f9111f](https://github.com/bigcommerce/checkout-sdk-js/commit/2f9111fbba9b1d4ee65892b0d34098778648ea09))\n\n## [1.586.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.585.4...v1.586.0) (2024-04-23)\n\n\n### Features\n\n* **payment:** PI-1916 Added SRI hashes for the adyen styles and scripts ([#2470](https://github.com/bigcommerce/checkout-sdk-js/issues/2470)) ([da0f96b](https://github.com/bigcommerce/checkout-sdk-js/commit/da0f96bd1ec1a2afaf1d586e830dd475928219ba))\n\n### [1.585.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.585.3...v1.585.4) (2024-04-23)\n\n\n### Bug Fixes\n\n* **payment:** PI-1925 get actual data for Klarna authentication request ([ad6b882](https://github.com/bigcommerce/checkout-sdk-js/commit/ad6b8820612b92b9230117b70680ff431db833f0))\n\n### [1.585.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.585.2...v1.585.3) (2024-04-22)\n\n\n### Code Refactoring\n\n* **payment:** PI-00 bundle watch LIBRARY_VERSION fix ([#2471](https://github.com/bigcommerce/checkout-sdk-js/issues/2471)) ([edd336b](https://github.com/bigcommerce/checkout-sdk-js/commit/edd336b2b0bb895f155d4039652cd82c3f0c699e))\n\n### [1.585.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.585.1...v1.585.2) (2024-04-22)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-000 updated paypal fastlane integrations with FastlanePaymentComponent ([#2468](https://github.com/bigcommerce/checkout-sdk-js/issues/2468)) ([eefb3f1](https://github.com/bigcommerce/checkout-sdk-js/commit/eefb3f119c048f74c7790cf3357e08b6042f7a97))\n\n### [1.585.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.585.0...v1.585.1) (2024-04-18)\n\n\n### Code Refactoring\n\n* **payment:** PI-650 created adyen googlepay payment strategies outside core package ([#2452](https://github.com/bigcommerce/checkout-sdk-js/issues/2452)) ([7cd82fe](https://github.com/bigcommerce/checkout-sdk-js/commit/7cd82fe4b16ac415ff1a592eee7ae811e740023d))\n\n## [1.585.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.584.0...v1.585.0) (2024-04-17)\n\n\n### Features\n\n* **payment:** PAYPAL-4005 improved loading of Braintree modules ([#2458](https://github.com/bigcommerce/checkout-sdk-js/issues/2458)) ([8266720](https://github.com/bigcommerce/checkout-sdk-js/commit/82667209835663b8f53f4121a55485b597859ed9))\n\n## [1.584.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.583.0...v1.584.0) (2024-04-17)\n\n\n### Features\n\n* **payment:** PAYPAL-4032 PPCP Card Fields shouldSetAsDefaultInstrument flag send ([19a108a](https://github.com/bigcommerce/checkout-sdk-js/commit/19a108abefc7617d53c9156a2695718ac995115f))\n\n## [1.583.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.582.3...v1.583.0) (2024-04-17)\n\n\n### Features\n\n* **payment:** PAYPAL-4048 added fastlane compatible version ([#2464](https://github.com/bigcommerce/checkout-sdk-js/issues/2464)) ([6bc5c92](https://github.com/bigcommerce/checkout-sdk-js/commit/6bc5c9220d5c2668bc860fc6f5fb410d504bf7e7))\n\n### [1.582.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.582.2...v1.582.3) (2024-04-16)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-8183 set shouldSaveAddress to false for existing customer addresses while loadCheckout ([0a8ad13](https://github.com/bigcommerce/checkout-sdk-js/commit/0a8ad132949593f8b09f435e789f8e51753d22a9))\n\n### [1.582.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.582.1...v1.582.2) (2024-04-15)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-000 added createBraintreeSdk file ([#2461](https://github.com/bigcommerce/checkout-sdk-js/issues/2461)) ([ab55260](https://github.com/bigcommerce/checkout-sdk-js/commit/ab552608887a87c059f33add0d200a01d36e8de4))\n\n### [1.582.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.582.0...v1.582.1) (2024-04-12)\n\n## [1.582.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.581.0...v1.582.0) (2024-04-11)\n\n\n### Features\n\n* **payment:** PI-1606 add validateCheckout and loadPaymentMethods to Payment Integration Service ([1909612](https://github.com/bigcommerce/checkout-sdk-js/commit/1909612ce4c785205b4088e0c27a8c2f1381c890))\n\n## [1.581.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.580.0...v1.581.0) (2024-04-11)\n\n\n### Features\n\n* **payment:** PAYPAL-3850 Update braintree scripts by passing additional integrity and crossorigin attributes to script tag ([#2455](https://github.com/bigcommerce/checkout-sdk-js/issues/2455)) ([8c744f2](https://github.com/bigcommerce/checkout-sdk-js/commit/8c744f2317fab3bc68618e05d9d4db465dee36f8))\n\n## [1.580.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.579.0...v1.580.0) (2024-04-11)\n\n\n### Features\n\n* **payment:** PAYPAL-3997 PPCP Card fields render method is awaited ([c6a3637](https://github.com/bigcommerce/checkout-sdk-js/commit/c6a3637f88d958e79e539b71f8f360430a458084))\n\n## [1.579.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.578.1...v1.579.0) (2024-04-10)\n\n\n### Features\n\n* **payment:** PAYPAL-4001 added a switch to turn off Fastlane for Store Members ([#2456](https://github.com/bigcommerce/checkout-sdk-js/issues/2456)) ([261d0a6](https://github.com/bigcommerce/checkout-sdk-js/commit/261d0a6ec54f0e245068ea5295fe445c44e314b8))\n\n### [1.578.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.578.0...v1.578.1) (2024-04-10)\n\n## [1.578.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.577.3...v1.578.0) (2024-04-10)\n\n\n### Features\n\n* **payment:** PAYPAL-3850 Removed BraintreeScriptLoader from core and transferred related code ([#2444](https://github.com/bigcommerce/checkout-sdk-js/issues/2444)) ([f665e09](https://github.com/bigcommerce/checkout-sdk-js/commit/f665e098513d798f6adf5b6f7050434780fb589b))\n\n### [1.577.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.577.2...v1.577.3) (2024-04-10)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-8132 Fix issue with apple pay button clicked twice ([#2440](https://github.com/bigcommerce/checkout-sdk-js/issues/2440)) ([bb4feca](https://github.com/bigcommerce/checkout-sdk-js/commit/bb4feca1a86295bc5562ab2bdff50dbb798a17be))\n\n### [1.577.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.577.1...v1.577.2) (2024-04-09)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3736 fixed PayPalCommerce Credit Card fields style issue ([#2448](https://github.com/bigcommerce/checkout-sdk-js/issues/2448)) ([9b7adc9](https://github.com/bigcommerce/checkout-sdk-js/commit/9b7adc96fdff8f4ddd5d04231536ac7eae577ccd))\n* **payment:** PI-1823 Add shop path to the remote checkout request ([e940d07](https://github.com/bigcommerce/checkout-sdk-js/commit/e940d077fd80d9ff4682c7da7707068930ab3bf3))\n\n### [1.577.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.577.0...v1.577.1) (2024-04-08)\n\n## [1.577.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.576.1...v1.577.0) (2024-04-08)\n\n\n### Features\n\n* **payment:** INT-7698 GooglePay: Add button strategy ([#2432](https://github.com/bigcommerce/checkout-sdk-js/issues/2432)) ([598b1ee](https://github.com/bigcommerce/checkout-sdk-js/commit/598b1eed4d3a0bec2764b603f49ff91d241229fc))\n\n### [1.576.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.576.0...v1.576.1) (2024-04-08)\n\n\n### Code Refactoring\n\n* **payment:** PI-1919 create shared adyen-utils package ([1dc2a2c](https://github.com/bigcommerce/checkout-sdk-js/commit/1dc2a2c99ba1f9e065385d381e0032634de43d28))\n\n## [1.576.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.575.0...v1.576.0) (2024-04-04)\n\n\n### Features\n\n* **payment:** PAYPAL-3587 Update Braintree Accelerated Checkout shipping strategy to support Fastlane + Connect ([#2437](https://github.com/bigcommerce/checkout-sdk-js/issues/2437)) ([aa8e4b3](https://github.com/bigcommerce/checkout-sdk-js/commit/aa8e4b3b50c868a0ad947e2fb963d687a045d80e))\n\n## [1.575.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.574.0...v1.575.0) (2024-04-03)\n\n\n### Features\n\n* **payment:** PAYPAL-3896 added try catch to BraintreeFastlaneCustomerStrategy initialize method ([#2443](https://github.com/bigcommerce/checkout-sdk-js/issues/2443)) ([f9eccde](https://github.com/bigcommerce/checkout-sdk-js/commit/f9eccdec761ee21d08fa83c86f4feec793c31cb1))\n\n## [1.574.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.573.0...v1.574.0) (2024-04-03)\n\n\n### Features\n\n* **payment:** PAYPAL-3878 added try catch to PayPal Commecre Fastlane Customer Strategy initialization method ([#2441](https://github.com/bigcommerce/checkout-sdk-js/issues/2441)) ([b5af673](https://github.com/bigcommerce/checkout-sdk-js/commit/b5af6734d09689447a22a5c64a860bad7da8ecc1))\n\n## [1.573.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.572.0...v1.573.0) (2024-04-03)\n\n\n### Features\n\n* **payment:** PAYPAL-3850 removed unnecessary code related to braintree ([#2434](https://github.com/bigcommerce/checkout-sdk-js/issues/2434)) ([a911503](https://github.com/bigcommerce/checkout-sdk-js/commit/a91150396275d20c32da69960436899c6fb1a2f9))\n\n## [1.572.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.571.1...v1.572.0) (2024-04-02)\n\n\n### Features\n\n* **payment:** PAYPAL-000 turned required params to optional ([#2438](https://github.com/bigcommerce/checkout-sdk-js/issues/2438)) ([cdf346d](https://github.com/bigcommerce/checkout-sdk-js/commit/cdf346d7c25758ba8468d5c776519354ec8dff3d))\n\n### [1.571.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.571.0...v1.571.1) (2024-04-02)\n\n\n### Bug Fixes\n\n* **payment:** PI-1899 additional token for instrument verification ([ea9fb69](https://github.com/bigcommerce/checkout-sdk-js/commit/ea9fb690c6e1ae7d62a98405c9080e84026eb02a))\n\n## [1.571.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.570.1...v1.571.0) (2024-04-02)\n\n\n### Features\n\n* **payment:** PAYPAL-3463 Added Pay Later messaging to Paywall Section ([#2419](https://github.com/bigcommerce/checkout-sdk-js/issues/2419)) ([7fd07ff](https://github.com/bigcommerce/checkout-sdk-js/commit/7fd07ffbe720a4cdc1190965431421e8ce0b34f9))\n\n### [1.570.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.570.0...v1.570.1) (2024-04-01)\n\n\n### Code Refactoring\n\n* **payment:** PI-1726 create AmazonPay utils package ([9fa9ed3](https://github.com/bigcommerce/checkout-sdk-js/commit/9fa9ed3e4573bc782585c1dea982cbab7bab46e1))\n\n## [1.570.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.569.0...v1.570.0) (2024-03-28)\n\n\n### Features\n\n* **payment:** PAYPAL-3910 send billing address only with order creation ([f928a4d](https://github.com/bigcommerce/checkout-sdk-js/commit/f928a4d252cc6847c89c1ea6db2f6847186ca721))\n\n## [1.569.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.568.3...v1.569.0) (2024-03-28)\n\n\n### Features\n\n* **payment:** PAYPAL-3881 added collectDeviceData flag to braintree sdk ([c4c1181](https://github.com/bigcommerce/checkout-sdk-js/commit/c4c11818d5859cf0d7bc388e472fe0e34e983fbd))\n\n### [1.568.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.568.2...v1.568.3) (2024-03-28)\n\n\n### Bug Fixes\n\n* **payment:** PI-1841 Check fields containers before mount ([35fd8e4](https://github.com/bigcommerce/checkout-sdk-js/commit/35fd8e4dc779592efe75c1cf0e69ab284c189900))\n\n### [1.568.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.568.1...v1.568.2) (2024-03-27)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-000 updated braintree-ach-payment-strategy with BraintreeSdk ([#2430](https://github.com/bigcommerce/checkout-sdk-js/issues/2430)) ([6df25c6](https://github.com/bigcommerce/checkout-sdk-js/commit/6df25c6708ce579f116decfa1b56b1e2e4dcefc6))\n\n### [1.568.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.568.0...v1.568.1) (2024-03-27)\n\n\n### Bug Fixes\n\n* **payment:** ISSUE-2398 Braintree add-cardholder-name-to-hosted-fields ([#2399](https://github.com/bigcommerce/checkout-sdk-js/issues/2399)) ([8ce7442](https://github.com/bigcommerce/checkout-sdk-js/commit/8ce7442e952f1aef5b95bebd4a82c469169dacd5))\n\n## [1.568.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.567.0...v1.568.0) (2024-03-26)\n\n\n### Features\n\n* **payment:** PI-1501 [Klarna] [CheckoutSDK] Refactor the existing `klarna` payment strategy in Checkout SDK to use the new checkout payment integration JS API ([#2415](https://github.com/bigcommerce/checkout-sdk-js/issues/2415)) ([bb2ac1f](https://github.com/bigcommerce/checkout-sdk-js/commit/bb2ac1f7dbac7969e7d9cac61460a715853dc819))\n\n## [1.567.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.566.0...v1.567.0) (2024-03-26)\n\n\n### Features\n\n* **payment:** PAYPAL-3588 Update Braintree Fastlane payment strategy with PP Fastlane vaulting component ([#2418](https://github.com/bigcommerce/checkout-sdk-js/issues/2418)) ([5d746ce](https://github.com/bigcommerce/checkout-sdk-js/commit/5d746ce7703b6b93581657348136a8552452b665))\n\n## [1.566.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.565.1...v1.566.0) (2024-03-26)\n\n\n### Features\n\n* **payment:** PI-1579 Refactor bluesnapv2 payment strategy in checkout-sdk ([008da37](https://github.com/bigcommerce/checkout-sdk-js/commit/008da3748dc00306ce83abc1bdaec2452c496af1))\n\n### [1.565.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.565.0...v1.565.1) (2024-03-25)\n\n\n### Bug Fixes\n\n* **payment:** PI-1835 add TDBant to supported instruments ([95a51f9](https://github.com/bigcommerce/checkout-sdk-js/commit/95a51f90fa977040d9178df750212efd9db59a55))\n\n## [1.565.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.564.2...v1.565.0) (2024-03-25)\n\n\n### Features\n\n* **payment:** PAYPAL-000 added Braintree Sdk class in braintree-utils package ([#2427](https://github.com/bigcommerce/checkout-sdk-js/issues/2427)) ([13adf97](https://github.com/bigcommerce/checkout-sdk-js/commit/13adf97ef37babdd112d2c6e2d39979800cc4e2c))\n\n### [1.564.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.564.1...v1.564.2) (2024-03-25)\n\n\n### Bug Fixes\n\n* **embedded-checkout:** ISSUE-2425 Handle www redirects on embed checkout links ([#2426](https://github.com/bigcommerce/checkout-sdk-js/issues/2426)) ([05f6dc8](https://github.com/bigcommerce/checkout-sdk-js/commit/05f6dc896f006510fa00c3c26b1540acf98150b9))\n\n### [1.564.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.564.0...v1.564.1) (2024-03-21)\n\n## [1.564.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.563.1...v1.564.0) (2024-03-20)\n\n\n### Features\n\n* **payment:** PAYPAL-3586 Update Braintree Accelerated Checkout payment strategy to support Fastlane + Connect ([#2410](https://github.com/bigcommerce/checkout-sdk-js/issues/2410)) ([f386d71](https://github.com/bigcommerce/checkout-sdk-js/commit/f386d71894691314e0599692427f1c0f30d225cb))\n\n### [1.563.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.563.0...v1.563.1) (2024-03-20)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3838 removed hardcoded payment method id value in braintree and paypal commerce analytic trackers ([#2417](https://github.com/bigcommerce/checkout-sdk-js/issues/2417)) ([1060fb7](https://github.com/bigcommerce/checkout-sdk-js/commit/1060fb74985e61dda8fda0bb1baf00745a796c35))\n\n## [1.563.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.562.3...v1.563.0) (2024-03-19)\n\n\n### Features\n\n* **payment:** PAYPAL-3744 updated execute tokenize method with getPaymentToken in paypal-commerce-fastlane-payment-strategy ([#2413](https://github.com/bigcommerce/checkout-sdk-js/issues/2413)) ([18a4fb8](https://github.com/bigcommerce/checkout-sdk-js/commit/18a4fb8763b90d565e6788accd51b5baccab377d))\n\n### [1.562.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.562.2...v1.562.3) (2024-03-19)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3774 update paypal card selection implementation for PayPal Commerce Fastlane component ([#2416](https://github.com/bigcommerce/checkout-sdk-js/issues/2416)) ([9192531](https://github.com/bigcommerce/checkout-sdk-js/commit/9192531ee870fca33c337c9aa2391eb7331955fb))\n\n### [1.562.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.562.1...v1.562.2) (2024-03-18)\n\n\n### Bug Fixes\n\n* **payment:** PI-1138 TD Bank vaulting options ([7247b71](https://github.com/bigcommerce/checkout-sdk-js/commit/7247b71606eff1e2dabeff0507f9bc7d14972249))\n\n### [1.562.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.562.0...v1.562.1) (2024-03-18)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-3603 updated braintree analytics folder name and codeowners file ([#2414](https://github.com/bigcommerce/checkout-sdk-js/issues/2414)) ([0201481](https://github.com/bigcommerce/checkout-sdk-js/commit/0201481bc8fe36a781f9064445de6b5b151a0436))\n\n## [1.562.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.561.0...v1.562.0) (2024-03-18)\n\n\n### Features\n\n* **payment:** PAYPAL-3603 updated braintree analytic tracker with fastlane support ([#2409](https://github.com/bigcommerce/checkout-sdk-js/issues/2409)) ([3081dfb](https://github.com/bigcommerce/checkout-sdk-js/commit/3081dfb39dd64655cc355e32b92bce21e5f4cca0))\n\n## [1.561.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.560.0...v1.561.0) (2024-03-14)\n\n\n### Features\n\n* **payment:** PAYPAL-0000 revert BT SDK ALPHA version ([#2407](https://github.com/bigcommerce/checkout-sdk-js/issues/2407)) ([5a540b4](https://github.com/bigcommerce/checkout-sdk-js/commit/5a540b4081ce12e2023f436b32313d6e538c9363))\n\n## [1.560.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.559.0...v1.560.0) (2024-03-13)\n\n\n### Features\n\n* **payment:** PI-1753 Pass an additional Single-Use Token to bigpay ([e35624f](https://github.com/bigcommerce/checkout-sdk-js/commit/e35624f2e0a6c9231a7777a4af50befc7b4ff0ad))\n\n## [1.559.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.558.2...v1.559.0) (2024-03-13)\n\n\n### Features\n\n* **payment:** PAYPAL-3784 added billing address data to the submit payload for PPCP credit card form action ([#2403](https://github.com/bigcommerce/checkout-sdk-js/issues/2403)) ([a8f35fa](https://github.com/bigcommerce/checkout-sdk-js/commit/a8f35facfb7ac33d98c6448137491d1dd9bed31c))\n\n### [1.558.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.558.1...v1.558.2) (2024-03-12)\n\n\n### Bug Fixes\n\n* **payment:** PI-1287 fixed 3ds challange for WorldPay ([6049c43](https://github.com/bigcommerce/checkout-sdk-js/commit/6049c43f07f91319b9f1edf4dc491c67f836575f))\n\n### [1.558.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.558.0...v1.558.1) (2024-03-12)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-000 renamed BraintreePayPalAch with BraintreeAch to match naming in all places ([#2401](https://github.com/bigcommerce/checkout-sdk-js/issues/2401)) ([48c1c7f](https://github.com/bigcommerce/checkout-sdk-js/commit/48c1c7f273e71d50d8e85e7aa13a99634b02a20c))\n\n## [1.558.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.557.3...v1.558.0) (2024-03-12)\n\n\n### Features\n\n* **payment:** PAYPAL-3597 Update Braintree Accelerated Checkout customer strategy to support Fastlane + Connect ([#2389](https://github.com/bigcommerce/checkout-sdk-js/issues/2389)) ([14bf708](https://github.com/bigcommerce/checkout-sdk-js/commit/14bf7087e8e5d0927a4bd9e69b348c6f6f02ebb7))\n\n### [1.557.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.557.2...v1.557.3) (2024-03-11)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-000 moved braintree paypal credit related code to separate folder ([#2400](https://github.com/bigcommerce/checkout-sdk-js/issues/2400)) ([2e62fcb](https://github.com/bigcommerce/checkout-sdk-js/commit/2e62fcb5b9fcee7131f0eafc1f46cbef180efd7e))\n\n### [1.557.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.557.1...v1.557.2) (2024-03-11)\n\n\n### Code Refactoring\n\n* **payment:** PI-1736 move getShippableItemsCount to package ([b297d27](https://github.com/bigcommerce/checkout-sdk-js/commit/b297d27cdff2e829959f8d0034ff86ce21f95294))\n\n### [1.557.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.557.0...v1.557.1) (2024-03-11)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-000 removed duplications and created generic method in braintree-script-loader file ([#2395](https://github.com/bigcommerce/checkout-sdk-js/issues/2395)) ([bf10c05](https://github.com/bigcommerce/checkout-sdk-js/commit/bf10c056626c20251cd3d932607aadcfeda73d99))\n\n## [1.557.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.556.0...v1.557.0) (2024-03-11)\n\n\n### Features\n\n* **payment:** PAYPAL-3743 updated axoEnv sandbox key to fastlaneEnv in paypal-commerce-fastlane-utils file ([#2392](https://github.com/bigcommerce/checkout-sdk-js/issues/2392)) ([79ae6df](https://github.com/bigcommerce/checkout-sdk-js/commit/79ae6dfd78a591d690efbc2c555212bc93c8d923))\n\n## [1.556.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.555.0...v1.556.0) (2024-03-11)\n\n\n### Features\n\n* **payment:** PAYPAL-3745 updated axoEnv sandbox key to fastlaneEnv in braintree-integration-service file ([#2393](https://github.com/bigcommerce/checkout-sdk-js/issues/2393)) ([c8b66e0](https://github.com/bigcommerce/checkout-sdk-js/commit/c8b66e084eadb4eeb00075bdd93a51dfbbea07e8))\n\n## [1.555.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.554.0...v1.555.0) (2024-03-06)\n\n\n### Features\n\n* **payment:** PI-1679 toggle Stripe terms text ([503d35f](https://github.com/bigcommerce/checkout-sdk-js/commit/503d35fa14b5a7b3171518df856eb05adf4fe513))\n\n## [1.554.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.553.1...v1.554.0) (2024-03-05)\n\n\n### Features\n\n* **payment:** PI-1502 [KlarnaV2] [CheckoutSKD] Refactor the existing `klarnav2` payment strategy in Checkout SDK to use the new checkout payment integration JS API ([#2373](https://github.com/bigcommerce/checkout-sdk-js/issues/2373)) ([178f670](https://github.com/bigcommerce/checkout-sdk-js/commit/178f670caa700bc4abd8c83e1f437fb8e24ea3e1))\n\n### [1.553.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.553.0...v1.553.1) (2024-03-05)\n\n## [1.553.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.552.0...v1.553.0) (2024-03-04)\n\n\n### Features\n\n* **checkout:** PI-1655 update payment integration service to include more methods from the core package ([e0f670b](https://github.com/bigcommerce/checkout-sdk-js/commit/e0f670bd9b5c66ddce5aa2ba335abf347499c5e2))\n\n## [1.552.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.551.0...v1.552.0) (2024-03-04)\n\n\n### Features\n\n* **payment:** PI-429 [Adyen] Improve FE validation for APMs on checkout ([c3f68f4](https://github.com/bigcommerce/checkout-sdk-js/commit/c3f68f442c1dbbe4386b151e659043db1c77e3a1))\n\n## [1.551.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.550.0...v1.551.0) (2024-02-29)\n\n\n### Features\n\n* **payment:** PAYPAL-3585 updated braintree scriptloader to load fastlane ([#2388](https://github.com/bigcommerce/checkout-sdk-js/issues/2388)) ([be0d328](https://github.com/bigcommerce/checkout-sdk-js/commit/be0d328015ee937089b5e1ef49fa5c067a1886c7))\n\n## [1.550.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.549.1...v1.550.0) (2024-02-29)\n\n\n### Features\n\n* **payment:** PAYPAL-3705 PPCP Card Fields payment payload updated ([526d26c](https://github.com/bigcommerce/checkout-sdk-js/commit/526d26ccf96af1176d5087319f8867eebcab094d))\n\n### [1.549.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.549.0...v1.549.1) (2024-02-28)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-3602 updated imports for paypal commerce analytic tracker ([#2385](https://github.com/bigcommerce/checkout-sdk-js/issues/2385)) ([e89acdf](https://github.com/bigcommerce/checkout-sdk-js/commit/e89acdfea25b4c6df71ebc7509e708a481a5b1e5))\n\n## [1.549.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.548.0...v1.549.0) (2024-02-28)\n\n\n### Features\n\n* **payment:** PAYPAL-3602 renamed PayPalCommerceConnectTracker to PayPalCommerceAnalyticTracker + added Fastlane support ([#2384](https://github.com/bigcommerce/checkout-sdk-js/issues/2384)) ([b7054e5](https://github.com/bigcommerce/checkout-sdk-js/commit/b7054e55dd334053691902b0c7e2587ebb9ddc0d))\n\n## [1.548.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.547.1...v1.548.0) (2024-02-27)\n\n\n### Features\n\n* **payment:** PAYPAL-3453 Support saving PPCP PayPal Account to the vault ([#2352](https://github.com/bigcommerce/checkout-sdk-js/issues/2352)) ([6508434](https://github.com/bigcommerce/checkout-sdk-js/commit/6508434fcc7c6484303db8fa0a637bdae62dce67))\n* **payment:** PAYPAL-3453 supported payment instrument ([e83c052](https://github.com/bigcommerce/checkout-sdk-js/commit/e83c0522ffc9ab70493f04dcf86bf1b73ba76e5e))\n\n### [1.547.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.547.0...v1.547.1) (2024-02-27)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-3708 removed unused ppcp accelerated checkout code ([#2382](https://github.com/bigcommerce/checkout-sdk-js/issues/2382)) ([e8c7601](https://github.com/bigcommerce/checkout-sdk-js/commit/e8c7601399f1d7055cbcf9c6991909fde85b318d))\n\n## [1.547.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.546.0...v1.547.0) (2024-02-26)\n\n\n### Features\n\n* **payment:** PAYPAL-3371 bump form-poster version ([f820ed0](https://github.com/bigcommerce/checkout-sdk-js/commit/f820ed0660efbfe480b4d2304fbb46ec7208f86c))\n\n## [1.546.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.545.0...v1.546.0) (2024-02-26)\n\n\n### Features\n\n* **payment:** PAYPAL-3683 updated paypal-commerce-credit-cards-payment-strategy to support PayPal Connect and Fastlane initialization ([#2379](https://github.com/bigcommerce/checkout-sdk-js/issues/2379)) ([3a662fc](https://github.com/bigcommerce/checkout-sdk-js/commit/3a662fcf2fe1390ea5757cb6740f88666ea832be))\n\n\n### Code Refactoring\n\n* **common:** PAYPAL-000 fixed all eslint warnings ([#2380](https://github.com/bigcommerce/checkout-sdk-js/issues/2380)) ([477a19f](https://github.com/bigcommerce/checkout-sdk-js/commit/477a19f8cf731d92a4ce367d642ece4b8e203e83))\n\n## [1.545.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.544.1...v1.545.0) (2024-02-22)\n\n\n### Features\n\n* **payment:** PAYPAL-3646 updated paypal fastlane analytic related code with modified sessionId ([#2377](https://github.com/bigcommerce/checkout-sdk-js/issues/2377)) ([214f7fa](https://github.com/bigcommerce/checkout-sdk-js/commit/214f7fa04760524bc2189268211bf2c57eb06de2))\n\n### [1.544.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.544.0...v1.544.1) (2024-02-22)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-3575 updated shipping regestry with paypal commerce fastlane shipping strategy instead of accelerated checkout ([#2376](https://github.com/bigcommerce/checkout-sdk-js/issues/2376)) ([ff7dd32](https://github.com/bigcommerce/checkout-sdk-js/commit/ff7dd329e866facd205aee5b8db88a822c7e5dc3))\n\n## [1.544.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.543.1...v1.544.0) (2024-02-21)\n\n\n### Features\n\n* **payment:** PAYPAL-3575 updated paypal commerce AXO shipping strategy to support PP Connect + Fastlane ([#2370](https://github.com/bigcommerce/checkout-sdk-js/issues/2370)) ([cdf69a9](https://github.com/bigcommerce/checkout-sdk-js/commit/cdf69a9dd0c9af39ca802902bf921c0ba3500f2b))\n* **payment:** PI-1648 Make an ability to use initializePayment action from core package in integration checkout-sdk packages ([#2365](https://github.com/bigcommerce/checkout-sdk-js/issues/2365)) ([e006254](https://github.com/bigcommerce/checkout-sdk-js/commit/e006254ac143114b4de976ed8dba327d0a459eb0))\n\n### [1.543.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.543.0...v1.543.1) (2024-02-21)\n\n## [1.543.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.542.1...v1.543.0) (2024-02-20)\n\n\n### Features\n\n* **payment:** PAYPAL-3574 updated PPCP AXO payment strategy to support Connect + Fastlane ([#2364](https://github.com/bigcommerce/checkout-sdk-js/issues/2364)) ([5745ea5](https://github.com/bigcommerce/checkout-sdk-js/commit/5745ea577ee434ef58db48782f14194ef75ecff9))\n\n### [1.542.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.542.0...v1.542.1) (2024-02-19)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-3647 updated PaymentInstrumentPayload interface with generic ([#2366](https://github.com/bigcommerce/checkout-sdk-js/issues/2366)) ([a08750f](https://github.com/bigcommerce/checkout-sdk-js/commit/a08750fc96fc14f4c2fa48a3dab7c06ede1012a9))\n\n## [1.542.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.541.0...v1.542.0) (2024-02-19)\n\n\n### Features\n\n* **payment:** PAYPAL-3453 renaming, added mocks ([e565804](https://github.com/bigcommerce/checkout-sdk-js/commit/e565804cea7993f64fabfc7cbb336a19d72495ad))\n\n## [1.541.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.540.0...v1.541.0) (2024-02-19)\n\n\n### Features\n\n* **payment:** PI-1369 Move Affirm payment strategy to package [Check… ([#2348](https://github.com/bigcommerce/checkout-sdk-js/issues/2348)) ([a04f260](https://github.com/bigcommerce/checkout-sdk-js/commit/a04f260ca4f92f46dbc05712b3344b931934d920))\n\n## [1.540.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.539.0...v1.540.0) (2024-02-15)\n\n\n### Features\n\n* **payment:** PAYPAL-3573 updated and renamed paypal commerce axo customer strategy to support Connect and Fastlane ([#2361](https://github.com/bigcommerce/checkout-sdk-js/issues/2361)) ([e94dd05](https://github.com/bigcommerce/checkout-sdk-js/commit/e94dd05c3579750e37973fc5f6221cd2e10cec3f))\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3573 updated PayPal to BC instrument mapper with untrustedShippingCardVerificationMode ([#2362](https://github.com/bigcommerce/checkout-sdk-js/issues/2362)) ([43e16de](https://github.com/bigcommerce/checkout-sdk-js/commit/43e16de6411b79dabdcb3cb53182bc17106b0c39))\n\n## [1.539.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.538.0...v1.539.0) (2024-02-14)\n\n\n### Features\n\n* **payment:** PI-1355 stored sepa for bluesnap ([36d03c0](https://github.com/bigcommerce/checkout-sdk-js/commit/36d03c0bc2bfcf1da96da31383dc748f300c1caa))\n\n## [1.538.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.537.0...v1.538.0) (2024-02-14)\n\n\n### Features\n\n* **payment:** PAYPAL-3453 added getInstruments to payment integration selectors ([51ee0d0](https://github.com/bigcommerce/checkout-sdk-js/commit/51ee0d0a8d594ff993b70156bb8f3d57b6ed6afd))\n\n## [1.537.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.536.0...v1.537.0) (2024-02-14)\n\n\n### Features\n\n* **payment:** PAYPAL-3576 added PayPal Fastlane support for paypal-commerce-sdk in paypal-commerce-utils package ([#2359](https://github.com/bigcommerce/checkout-sdk-js/issues/2359)) ([657469c](https://github.com/bigcommerce/checkout-sdk-js/commit/657469cba668b574e611d5b32fd03abcaac79c58))\n\n## [1.536.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.535.0...v1.536.0) (2024-02-12)\n\n\n### Features\n\n* **payment:** PI-1604 Moving AmountTransformer to shared package and updating all imports ([#2358](https://github.com/bigcommerce/checkout-sdk-js/issues/2358)) ([6e60128](https://github.com/bigcommerce/checkout-sdk-js/commit/6e6012816afa7b39fa8174a4377bca86f32d3b39))\n\n## [1.535.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.534.0...v1.535.0) (2024-02-12)\n\n\n### Features\n\n* **payment:** PAYPAL-3405 GooglePay not working 404 (iOS devices) ([#2354](https://github.com/bigcommerce/checkout-sdk-js/issues/2354)) ([bcae4f4](https://github.com/bigcommerce/checkout-sdk-js/commit/bcae4f4657575cbd866b9a6fd60586b0da08eeec))\n\n## [1.534.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.533.0...v1.534.0) (2024-02-08)\n\n\n### Features\n\n* **payment:** PI-1487 Update 3DS options ([99195a6](https://github.com/bigcommerce/checkout-sdk-js/commit/99195a69a7f8e08d7d0844c867b99a8acb4215bd))\n\n## [1.533.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.532.0...v1.533.0) (2024-02-06)\n\n\n### Features\n\n* **payment:** PAYPAL-3560 updated PayPalCommerceAcceleratedCheckoutCustomerStrategy to load it with ppcp credit cards method id ([#2351](https://github.com/bigcommerce/checkout-sdk-js/issues/2351)) ([3cc87f3](https://github.com/bigcommerce/checkout-sdk-js/commit/3cc87f32d6faa4e2a99bf13cf8309ca19c355768))\n\n## [1.532.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.531.0...v1.532.0) (2024-02-06)\n\n\n### Features\n\n* **payment:** PI-1313 stored ecp for bluesnap ([a819c1d](https://github.com/bigcommerce/checkout-sdk-js/commit/a819c1d33b82893746bf726dd7451a2803d823ec))\n\n## [1.531.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.530.0...v1.531.0) (2024-02-01)\n\n\n### Features\n\n* **payment:** PAYPAL-3439 added restart flow for PPCP ([#2320](https://github.com/bigcommerce/checkout-sdk-js/issues/2320)) ([b0cbe91](https://github.com/bigcommerce/checkout-sdk-js/commit/b0cbe918bfa38412d75e88546818517c04f9a967))\n\n## [1.530.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.529.0...v1.530.0) (2024-01-31)\n\n\n### Features\n\n* **payment:** PAYPAL-3419 added PayPalCommerceAcceleratedCheckout shipping strategy ([#2339](https://github.com/bigcommerce/checkout-sdk-js/issues/2339)) ([94a7ba8](https://github.com/bigcommerce/checkout-sdk-js/commit/94a7ba8ffa35abe9ab826a834364e1862c1c3e79))\n\n## [1.529.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.528.0...v1.529.0) (2024-01-31)\n\n\n### Features\n\n* **payment:** PI-517 Move Stripe UPE customer and payment strategy t… ([#2193](https://github.com/bigcommerce/checkout-sdk-js/issues/2193)) ([7440eec](https://github.com/bigcommerce/checkout-sdk-js/commit/7440eec4575049c932e98eb83acf288553de7332))\n\n## [1.528.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.527.0...v1.528.0) (2024-01-30)\n\n\n### Features\n\n* **payment:** PAYPAL-3497 updated PPCP AXO SDK option data-client-metadata-id with uuidv4 value ([#2344](https://github.com/bigcommerce/checkout-sdk-js/issues/2344)) ([bf04b4f](https://github.com/bigcommerce/checkout-sdk-js/commit/bf04b4fb5ef760350ae6d0ae30a2e1b4fae37609))\n\n## [1.527.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.526.0...v1.527.0) (2024-01-30)\n\n\n### Features\n\n* **payment:** PAYPAL-3425 updated paypal commerce credit card payment strategy to load paypal connect sdk when its needed ([#2342](https://github.com/bigcommerce/checkout-sdk-js/issues/2342)) ([a5fd129](https://github.com/bigcommerce/checkout-sdk-js/commit/a5fd1291ffed862c07abce0e72c7675a57772722))\n\n## [1.526.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.525.0...v1.526.0) (2024-01-29)\n\n\n### Features\n\n* **payment:** PI-1368 SquareV2 - fix types for payment submit payload ([b26c114](https://github.com/bigcommerce/checkout-sdk-js/commit/b26c11430dc9a22f3e86ece77781dc181cb60ca4))\n* **payment:** PI-1368 SquareV2 - fix types for payment submit payload ([2e8c0cd](https://github.com/bigcommerce/checkout-sdk-js/commit/2e8c0cdbae660d7402b5d9f1b0e7e6fb7e7d968d))\n\n## [1.525.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.524.0...v1.525.0) (2024-01-25)\n\n\n### Features\n\n* **payment:** PAYPAL-3493 updated PPCP AXO credit card component form background transparent ([#2343](https://github.com/bigcommerce/checkout-sdk-js/issues/2343)) ([daaf080](https://github.com/bigcommerce/checkout-sdk-js/commit/daaf0809eeb938edba49ee1b59b941f68c960958))\n\n## [1.524.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.523.0...v1.524.0) (2024-01-25)\n\n\n### Features\n\n* **payment:** PAYPAL-3113 Create a class to work with cookies ([#2301](https://github.com/bigcommerce/checkout-sdk-js/issues/2301)) ([6bfd6c8](https://github.com/bigcommerce/checkout-sdk-js/commit/6bfd6c8beb28c461a9b82d3de1e4778b58854446))\n\n## [1.523.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.522.0...v1.523.0) (2024-01-25)\n\n\n### Features\n\n* **payment:** PAYPAL-3227 PPCP Card Fields implemented ([d38dbf9](https://github.com/bigcommerce/checkout-sdk-js/commit/d38dbf9d6b3424f8b653b743a07c11cb4b94da89))\n\n## [1.522.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.521.2...v1.522.0) (2024-01-24)\n\n\n### Features\n\n* **payment:** PI-659 added hosted form for storefront account vaulting ([e01c887](https://github.com/bigcommerce/checkout-sdk-js/commit/e01c88734d6de25997ef34402fcceb46988568c0))\n* **payment:** PI-659 fixed case consistancy ([20e2496](https://github.com/bigcommerce/checkout-sdk-js/commit/20e249665388a2eb35bd2c5ecac90da31e234ff8))\n* **payment:** PI-659 fixed namings and removed duplication of hosted form for stored cards, added submitStoredCard method to hosted-form ([cbaa3dd](https://github.com/bigcommerce/checkout-sdk-js/commit/cbaa3dd601ea57c0b47133747afd63001a0e5155))\n* **payment:** PI-659 moved vaulting hosted fields events logic to checkout-sdk ([ce0d4d8](https://github.com/bigcommerce/checkout-sdk-js/commit/ce0d4d887c7c98d99059b6dcdb1a1106a233604d))\n* **payment:** PI-659 naming fixes ([04fe8f0](https://github.com/bigcommerce/checkout-sdk-js/commit/04fe8f092d8c6b385fc39dbe52e2f17a00935301))\n\n### [1.521.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.521.1...v1.521.2) (2024-01-24)\n\n\n### Bug Fixes\n\n* **checkout:** ISSUE-2138 Add zero width space character ([#2252](https://github.com/bigcommerce/checkout-sdk-js/issues/2252)) ([cca71c2](https://github.com/bigcommerce/checkout-sdk-js/commit/cca71c29dbcc681cb480e3d699da773eae8ffb3e))\n\n### [1.521.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.521.0...v1.521.1) (2024-01-24)\n\n## [1.521.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.520.0...v1.521.0) (2024-01-23)\n\n\n### Features\n\n* **payment:** PAYPAL-3424 added PayPalCommerceConnectTracker for analytics ([#2333](https://github.com/bigcommerce/checkout-sdk-js/issues/2333)) ([9cd4330](https://github.com/bigcommerce/checkout-sdk-js/commit/9cd43302c0631e9837f77eeecf93b54fb4a63929))\n\n## [1.520.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.519.4...v1.520.0) (2024-01-23)\n\n\n### Features\n\n* **payment:** PI-1309 SquareV2 - 3ds flow for vaulted instruments ([c4dfc66](https://github.com/bigcommerce/checkout-sdk-js/commit/c4dfc66e50387c860195f07495349448107ddefd))\n\n### [1.519.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.519.3...v1.519.4) (2024-01-23)\n\n\n### Bug Fixes\n\n* **checkout:** DATA-11638 Fix payloads for Segment events ([9684db6](https://github.com/bigcommerce/checkout-sdk-js/commit/9684db6c5bbe34382ee23fe69a5c965d86437c14))\n\n### [1.519.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.519.2...v1.519.3) (2024-01-22)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3467 updated PPCP AXO implementation with last changes in PP SDK ([#2337](https://github.com/bigcommerce/checkout-sdk-js/issues/2337)) ([9b84ba7](https://github.com/bigcommerce/checkout-sdk-js/commit/9b84ba73c3b91afb54918b07545da1029fef596d))\n\n### [1.519.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.519.1...v1.519.2) (2024-01-22)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-000 cleanup ppcp axo implementation from generic paypal commerce script ([#2334](https://github.com/bigcommerce/checkout-sdk-js/issues/2334)) ([a750dda](https://github.com/bigcommerce/checkout-sdk-js/commit/a750dda1ac90e286e49f7e2fa11e46c47d4d8397))\n* **payment:** PAYPAL-3466 fixed the issue with PaymentProviderCustomer compare type ([#2330](https://github.com/bigcommerce/checkout-sdk-js/issues/2330)) ([a08089c](https://github.com/bigcommerce/checkout-sdk-js/commit/a08089c5594e2c37f8045b6ef302dd8d990fd2c1))\n\n### [1.519.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.519.0...v1.519.1) (2024-01-19)\n\n## [1.519.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.518.0...v1.519.0) (2024-01-18)\n\n\n### Features\n\n* **payment:** PAYPAL-3470 Update paypal-commerce-sdk configuration to use PayLater Messages separately ([#2327](https://github.com/bigcommerce/checkout-sdk-js/issues/2327)) ([a4df4dc](https://github.com/bigcommerce/checkout-sdk-js/commit/a4df4dcc8426705b66b40521f9542e25c2df136c))\n\n## [1.518.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.517.6...v1.518.0) (2024-01-18)\n\n\n### Features\n\n* **payment:** PI-429 [Adyen] Improve FE validation for APMs on checkout ([3209cfb](https://github.com/bigcommerce/checkout-sdk-js/commit/3209cfb4d4592454a0aa536ee0da18804d09405c))\n\n### [1.517.6](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.517.5...v1.517.6) (2024-01-18)\n\n### [1.517.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.517.4...v1.517.5) (2024-01-18)\n\n### [1.517.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.517.3...v1.517.4) (2024-01-17)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-3466 covered paypal connect paymentProviderCustomer checkout state object with type guards ([#2323](https://github.com/bigcommerce/checkout-sdk-js/issues/2323)) ([f0b3f87](https://github.com/bigcommerce/checkout-sdk-js/commit/f0b3f87814c0b491c9459cd90bc30a1dc99599e7))\n\n### [1.517.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.517.2...v1.517.3) (2024-01-17)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3424 placed paypal connect to the window object to avoid unnecessary PP AXO initialisation ([#2326](https://github.com/bigcommerce/checkout-sdk-js/issues/2326)) ([949a723](https://github.com/bigcommerce/checkout-sdk-js/commit/949a7233ae298f996cca4c723dd01e40e6adb7a2))\n\n### [1.517.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.517.1...v1.517.2) (2024-01-17)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3467 updated PPCP AXO implementation with last changes on PP SDK side ([#2325](https://github.com/bigcommerce/checkout-sdk-js/issues/2325)) ([060712e](https://github.com/bigcommerce/checkout-sdk-js/commit/060712ee33ccf92225227caf6ae41a8e4d2088d3))\n\n### [1.517.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.517.0...v1.517.1) (2024-01-17)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3466 load paypalcommerce payment method in initialization method of PPCP AXO customer strategy ([#2324](https://github.com/bigcommerce/checkout-sdk-js/issues/2324)) ([2416e93](https://github.com/bigcommerce/checkout-sdk-js/commit/2416e93a5273bca5a4855c5cce16b3c73ab21755))\n\n## [1.517.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.516.0...v1.517.0) (2024-01-16)\n\n\n### Features\n\n* **payment:** PAYPAL-3390 fixed ratepay loading indicator ([#2303](https://github.com/bigcommerce/checkout-sdk-js/issues/2303)) ([e92d790](https://github.com/bigcommerce/checkout-sdk-js/commit/e92d790f5deff96627471da6f7651614ae3fec5b))\n\n## [1.516.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.515.0...v1.516.0) (2024-01-15)\n\n\n### Features\n\n* **payment:** PAYPAL-3416 added PayPalCommerceAcceleratedCheckout payment strategy ([#2312](https://github.com/bigcommerce/checkout-sdk-js/issues/2312)) ([66b3258](https://github.com/bigcommerce/checkout-sdk-js/commit/66b3258d10a460735c52565aa0e94c22508f6a87))\n\n## [1.515.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.514.3...v1.515.0) (2024-01-11)\n\n\n### Features\n\n* **payment:** PAYPAL-3416 updated WithPayPalConnectInstrument interface with an optional order_id ([#2317](https://github.com/bigcommerce/checkout-sdk-js/issues/2317)) ([76bb4ef](https://github.com/bigcommerce/checkout-sdk-js/commit/76bb4ef6cd56253bfd77d80db6b94e8d0c81b2e9))\n\n### [1.514.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.514.2...v1.514.3) (2024-01-11)\n\n### [1.514.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.514.1...v1.514.2) (2024-01-10)\n\n\n### Bug Fixes\n\n* **payment:** PI-1328 [TD Bank][FE] TD Online Mart fields don't initialize on second and next attempts ([#2315](https://github.com/bigcommerce/checkout-sdk-js/issues/2315)) ([4fa546e](https://github.com/bigcommerce/checkout-sdk-js/commit/4fa546e01c35cd588359c7de9aaaccfe833192bc))\n\n### [1.514.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.514.0...v1.514.1) (2024-01-10)\n\n## [1.514.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.513.0...v1.514.0) (2024-01-10)\n\n\n### Features\n\n* **payment:** PAYPAL-3300 Added onClick and onInit options to handle validation process with mandatory terms and conditions ([#2304](https://github.com/bigcommerce/checkout-sdk-js/issues/2304)) ([c47674c](https://github.com/bigcommerce/checkout-sdk-js/commit/c47674c32ebc152e2b312a582284a0b787973172))\n\n## [1.513.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.512.0...v1.513.0) (2024-01-10)\n\n\n### Features\n\n* **payment:** PAYPAL-2800 added style configs to Braintree payment buttons ([9b955c5](https://github.com/bigcommerce/checkout-sdk-js/commit/9b955c5dbe1852596b2b9e64d6c18ee427a30839))\n\n## [1.512.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.511.0...v1.512.0) (2024-01-10)\n\n\n### Features\n\n* **payment:** PAYPAL-3409 added PayPalCommerceAcceleratedCheckout customer strategy ([#2306](https://github.com/bigcommerce/checkout-sdk-js/issues/2306)) ([53377c5](https://github.com/bigcommerce/checkout-sdk-js/commit/53377c556c5e53dfc88c7d57bdcdc0110c6e74b4))\n\n## [1.511.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.510.0...v1.511.0) (2024-01-09)\n\n\n### Features\n\n* **payment:** PAYPAL-3409 updated PaymentProviderCustomer with PPCP AXO related interface ([#2308](https://github.com/bigcommerce/checkout-sdk-js/issues/2308)) ([0145080](https://github.com/bigcommerce/checkout-sdk-js/commit/0145080071c38db69b8d1dcdbc1958f1b377667e))\n\n## [1.510.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.509.0...v1.510.0) (2024-01-09)\n\n\n### Features\n\n* **payment:** PI-851 bluesnap direct APMs refactoring ([cfdaf66](https://github.com/bigcommerce/checkout-sdk-js/commit/cfdaf663a3c70d4a2f2129c44e14d8d4f3ee74c5))\n* **payment:** PI-851 blusnap direct ideal strategy creation ([f0feb99](https://github.com/bigcommerce/checkout-sdk-js/commit/f0feb99f7e5ebb2b260bbf2c726597612652353d))\n* **payment:** PI-851 blusnap direct package directories reorganisation and creation of the Ideal generic instrument type ([6292ca2](https://github.com/bigcommerce/checkout-sdk-js/commit/6292ca2b20a964a6812efa56f8dee7eb777e7ce5))\n\n## [1.509.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.508.0...v1.509.0) (2024-01-09)\n\n\n### Features\n\n* **payment:** PAYPAL-3443 added PayPal Commerce Accelerated Checkout utils class to PPCP shared package ([#2313](https://github.com/bigcommerce/checkout-sdk-js/issues/2313)) ([766ab3e](https://github.com/bigcommerce/checkout-sdk-js/commit/766ab3e27fc9138e1e16270a40f2d78d0dfac188))\n\n## [1.508.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.507.0...v1.508.0) (2024-01-09)\n\n\n### Features\n\n* **payment:** PAYPAL-3418 created paypal-commerce-utils package ([#2309](https://github.com/bigcommerce/checkout-sdk-js/issues/2309)) ([7714936](https://github.com/bigcommerce/checkout-sdk-js/commit/7714936885c22249a8eafa1553dbb68da9426c4f))\n\n## [1.507.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.506.0...v1.507.0) (2024-01-08)\n\n\n### Features\n\n* **payment:** PI-1318 TDBank add  browser info ([4b8f3f0](https://github.com/bigcommerce/checkout-sdk-js/commit/4b8f3f0fe309db5ecf719c955d5036a13f168449))\n\n## [1.506.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.505.2...v1.506.0) (2024-01-04)\n\n\n### Features\n\n* **payment:** PI-1144 [TD Bank][FE] Add payment strategy for credit … ([#2296](https://github.com/bigcommerce/checkout-sdk-js/issues/2296)) ([b674734](https://github.com/bigcommerce/checkout-sdk-js/commit/b67473414e803835f597f59852dcc70c6ad54ead))\n* **payment:** PI-1318 TDBank add  browser info ([2c19eb8](https://github.com/bigcommerce/checkout-sdk-js/commit/2c19eb8406b8705fbf514eee543b7054754d98c4))\n\n### [1.505.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.505.1...v1.505.2) (2024-01-03)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-000 fixed eslint warnings in paypal-commerce-integration package ([#2300](https://github.com/bigcommerce/checkout-sdk-js/issues/2300)) ([cc366ad](https://github.com/bigcommerce/checkout-sdk-js/commit/cc366ad29fc25512ee931cecfbff6621e2b60834))\n\n### [1.505.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.505.0...v1.505.1) (2024-01-03)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-7901 added a condition to load PPCP payment methods only if they are not exist in the state ([#2282](https://github.com/bigcommerce/checkout-sdk-js/issues/2282)) ([aeb3722](https://github.com/bigcommerce/checkout-sdk-js/commit/aeb3722191f824a487f3ef582cca9d475a43b5ca))\n\n## [1.505.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.504.1...v1.505.0) (2024-01-03)\n\n\n### Features\n\n* **payment:** PAYPAL-3408 updated paypal commerce sdk configuration with PayPal Connect component ([#2299](https://github.com/bigcommerce/checkout-sdk-js/issues/2299)) ([fdd0734](https://github.com/bigcommerce/checkout-sdk-js/commit/fdd0734ad52e5862b232125d8abb18a0caea45d9))\n\n### [1.504.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.504.0...v1.504.1) (2024-01-03)\n\n## [1.504.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.503.0...v1.504.0) (2023-12-28)\n\n\n### Features\n\n* **payment:** PI-1126 TD bank 3DS flow ([c9b6319](https://github.com/bigcommerce/checkout-sdk-js/commit/c9b631952f536dbefc43a6dd26369b3c14f48172))\n\n## [1.503.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.502.0...v1.503.0) (2023-12-21)\n\n\n### Features\n\n* **payment:** PAYPAL-2617 Create BraintreePayPalCredit payment strategy in braintree-integration package ([#2289](https://github.com/bigcommerce/checkout-sdk-js/issues/2289)) ([7145507](https://github.com/bigcommerce/checkout-sdk-js/commit/71455077055194fb3ff4b8173bd30088067c0eff))\n\n## [1.502.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.501.1...v1.502.0) (2023-12-21)\n\n\n### Features\n\n* **payment:** PI-1076 add 3ds support for storing cards in square v2 ([f712201](https://github.com/bigcommerce/checkout-sdk-js/commit/f712201caf20dc1f2c15384331cd6cd46d033cde))\n\n### [1.501.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.501.0...v1.501.1) (2023-12-20)\n\n## [1.501.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.500.0...v1.501.0) (2023-12-20)\n\n\n### Features\n\n* **payment:** PAYPAL-3382 covered braintree connect analytic with experiment ([#2292](https://github.com/bigcommerce/checkout-sdk-js/issues/2292)) ([0d7f447](https://github.com/bigcommerce/checkout-sdk-js/commit/0d7f4473137b79e3ce7a7d99044bd7ffe71903ee))\n* **payment:** PI-1021 [TD Bank][FE] Vaulted instruments implementation on Checkout  ([#2290](https://github.com/bigcommerce/checkout-sdk-js/issues/2290)) ([9c5430d](https://github.com/bigcommerce/checkout-sdk-js/commit/9c5430d63c632fd672510b6b140f53bd02d9c663))\n\n## [1.500.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.499.3...v1.500.0) (2023-12-18)\n\n\n### Features\n\n* **payment:** PI-1076 add 3ds support for storing cards in square v2 ([0585261](https://github.com/bigcommerce/checkout-sdk-js/commit/058526126729854ca3fc9f3d0bb8f5046aee6cb3))\n\n### [1.499.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.499.2...v1.499.3) (2023-12-18)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3660 updated Braintree AXO events trigger order ([#2291](https://github.com/bigcommerce/checkout-sdk-js/issues/2291)) ([adce33c](https://github.com/bigcommerce/checkout-sdk-js/commit/adce33c119b7b8e736020239916b4b0058dccfd5))\n\n### [1.499.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.499.1...v1.499.2) (2023-12-14)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3360 fixed a mistake in codeowners file due BT analytics ([#2288](https://github.com/bigcommerce/checkout-sdk-js/issues/2288)) ([ee887e8](https://github.com/bigcommerce/checkout-sdk-js/commit/ee887e8df0a94c866b5edbb77a71f298d1518263))\n* **payment:** PAYPAL-3360 fixed the issue with braintree axo customer step initialisation and fixed data for BT AXO Analytics ([#2285](https://github.com/bigcommerce/checkout-sdk-js/issues/2285)) ([286bac5](https://github.com/bigcommerce/checkout-sdk-js/commit/286bac55b5975b13b14098ee18723a5fd630f7da))\n* **payment:** PAYPAL-3367 removed onCancel error throw for PP AMP payment strategy ([#2286](https://github.com/bigcommerce/checkout-sdk-js/issues/2286)) ([8772484](https://github.com/bigcommerce/checkout-sdk-js/commit/8772484f44198115af1860a7cda5d30561e18bc3))\n\n### [1.499.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.499.0...v1.499.1) (2023-12-14)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3124 PPCP loading indicator keeps after submit ([653e2db](https://github.com/bigcommerce/checkout-sdk-js/commit/653e2dbdc5e066e8da1bf9aecafd53da114ace15))\n\n## [1.499.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.498.0...v1.499.0) (2023-12-14)\n\n\n### Features\n\n* **payment:** PAYPAL-2612 Move BraintreePayPalCredit customer strategy to braintree-integration package ([#2279](https://github.com/bigcommerce/checkout-sdk-js/issues/2279)) ([c46c1e9](https://github.com/bigcommerce/checkout-sdk-js/commit/c46c1e920751c9b9f3089081bf5f408919297b35))\n\n## [1.498.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.497.0...v1.498.0) (2023-12-13)\n\n\n### Features\n\n* **payment:** PI-1142 [TD Bank- Ph. 1a][FE] Add payment strategy for… ([#2267](https://github.com/bigcommerce/checkout-sdk-js/issues/2267)) ([99e7d6d](https://github.com/bigcommerce/checkout-sdk-js/commit/99e7d6d902c538f139cd46dd55254beecfb8683e))\n\n## [1.497.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.496.1...v1.497.0) (2023-12-12)\n\n\n### Features\n\n* **payment:** PI-1148 Hide card holder name from hosted fields form ([4bc6cbd](https://github.com/bigcommerce/checkout-sdk-js/commit/4bc6cbd5fa5b4e26c7b963e3e5a204cb2304c7b9))\n\n### [1.496.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.496.0...v1.496.1) (2023-12-12)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2936 updated PayPal Commerce shipping callbacks with onShippingChanged ([#2255](https://github.com/bigcommerce/checkout-sdk-js/issues/2255)) ([e6c4640](https://github.com/bigcommerce/checkout-sdk-js/commit/e6c46409f402dfd20dbca62605b2d43a8aa6d47f))\n\n## [1.496.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.495.0...v1.496.0) (2023-12-12)\n\n\n### Features\n\n* **payment:** PAYPAL-2616 moved braintree-paypal-payment-strategy to braintree-integration package ([#2257](https://github.com/bigcommerce/checkout-sdk-js/issues/2257)) ([079a971](https://github.com/bigcommerce/checkout-sdk-js/commit/079a971bdf46af406988413721271b45e4f6fdfa))\n\n## [1.495.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.494.0...v1.495.0) (2023-12-11)\n\n\n### Features\n\n* **payment:** PI-853 BluesnapDirect added Sepa fieldset ([99feb87](https://github.com/bigcommerce/checkout-sdk-js/commit/99feb87a358c425cb604a8f684a20ef7c946af13))\n\n## [1.494.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.493.0...v1.494.0) (2023-12-11)\n\n\n### Features\n\n* **payment:** PAYPAL-3280 added inputDateFormat for date input ([6cc6ebb](https://github.com/bigcommerce/checkout-sdk-js/commit/6cc6ebb4ce161d235997f19f2a67ff4221ffc32f))\n\n## [1.493.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.492.0...v1.493.0) (2023-12-11)\n\n\n### Features\n\n* **payment:** PAYPAL-3337 PPCP GooglePay setGatewayIdentifier added ([a18f34e](https://github.com/bigcommerce/checkout-sdk-js/commit/a18f34e37e429740ee61bdf1a32e3c8172326660))\n\n## [1.492.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.491.0...v1.492.0) (2023-12-11)\n\n\n### Features\n\n* **payment:** PAYPAL-3281 fixed phone country code field ([#2274](https://github.com/bigcommerce/checkout-sdk-js/issues/2274)) ([f1ce652](https://github.com/bigcommerce/checkout-sdk-js/commit/f1ce65217aa38ac715963108f07fbf3eddca021b))\n\n## [1.491.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.490.0...v1.491.0) (2023-12-08)\n\n\n### Features\n\n* **payment:** PAYPAL-3229 added BraintreeConnectTracker (analytic) ([#2276](https://github.com/bigcommerce/checkout-sdk-js/issues/2276)) ([13a87dd](https://github.com/bigcommerce/checkout-sdk-js/commit/13a87dd981f88bc71e80d894ececf3b48473b3cc))\n\n## [1.490.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.489.0...v1.490.0) (2023-12-07)\n\n\n### Features\n\n* **payment:** PAYPAL-3229 added checkoutPaymentMethodExecuted callback call to BraintreeAcceleratedCheckoutCustomerStrategy ([#2273](https://github.com/bigcommerce/checkout-sdk-js/issues/2273)) ([1e9684a](https://github.com/bigcommerce/checkout-sdk-js/commit/1e9684a9db8ae7c7ee097423e1fefa7449b9ab6f))\n\n## [1.489.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.488.0...v1.489.0) (2023-12-07)\n\n\n### Features\n\n* **payment:** PAYPAL-3229 added onClick callback to AmazonPay customer strategy ([#2271](https://github.com/bigcommerce/checkout-sdk-js/issues/2271)) ([2a4e0ec](https://github.com/bigcommerce/checkout-sdk-js/commit/2a4e0ec52b76cba5b5b4c0680778cfd8fff82164))\n\n## [1.488.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.487.0...v1.488.0) (2023-12-07)\n\n\n### Features\n\n* **payment:** PAYPAL-3229 added onClick callback to ApplePayCustomerStrategy ([#2268](https://github.com/bigcommerce/checkout-sdk-js/issues/2268)) ([e913796](https://github.com/bigcommerce/checkout-sdk-js/commit/e9137962ecc29abd492153f0a5ce9e17724529d3))\n\n## [1.487.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.486.0...v1.487.0) (2023-12-07)\n\n\n### Features\n\n* **payment:** PAYPAL-3229 added onClick callback for GooglePay customer strategies ([#2269](https://github.com/bigcommerce/checkout-sdk-js/issues/2269)) ([a1781de](https://github.com/bigcommerce/checkout-sdk-js/commit/a1781de0e70c0a65b85a9f5794df6fd1d88c8a78))\n\n## [1.486.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.485.0...v1.486.0) (2023-12-07)\n\n\n### Features\n\n* **payment:** PAYPAL-3229 added onClick callback for all Braintree customer strategies ([#2270](https://github.com/bigcommerce/checkout-sdk-js/issues/2270)) ([f4f41f6](https://github.com/bigcommerce/checkout-sdk-js/commit/f4f41f6bb3076f2b7844fbccb84d662ec4a15b49))\n\n## [1.485.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.484.0...v1.485.0) (2023-12-07)\n\n\n### Features\n\n* **payment:** PAYPAL-3229 added onClick callback for each PayPalCommerce customer strategy ([#2272](https://github.com/bigcommerce/checkout-sdk-js/issues/2272)) ([72db9a4](https://github.com/bigcommerce/checkout-sdk-js/commit/72db9a4c92f99a2e367aba0434160220286ace0c))\n\n## [1.484.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.483.0...v1.484.0) (2023-11-30)\n\n\n### Features\n\n* **payment:** CHECKOUT-7901 Add method to load button payment method config in parallel ([#2258](https://github.com/bigcommerce/checkout-sdk-js/issues/2258)) ([cbb328a](https://github.com/bigcommerce/checkout-sdk-js/commit/cbb328a2fa3a3f259b3ed42441aa5df1e0d1bc0b))\n\n## [1.483.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.482.0...v1.483.0) (2023-11-09)\n\n\n### Features\n\n* **payment:** PI-921 Amazon Pay Button needs to be changed to one with WITHOUT microtext ([#2225](https://github.com/bigcommerce/checkout-sdk-js/issues/2225)) ([3520e88](https://github.com/bigcommerce/checkout-sdk-js/commit/3520e887f84addeb5f048f5a467f77562b543297))\n\n## [1.482.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.481.0...v1.482.0) (2023-11-09)\n\n\n### Features\n\n* **payment:** PAYPAL-3175 PPCP GooglePay 3DSecure ([cb1eb6a](https://github.com/bigcommerce/checkout-sdk-js/commit/cb1eb6a1ae3c261e8a54a1c9a298b104e6797d70))\n\n## [1.481.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.480.0...v1.481.0) (2023-11-09)\n\n\n### Features\n\n* **payment:** PI-1004 Create a new package for TD Bank integration ([0e140df](https://github.com/bigcommerce/checkout-sdk-js/commit/0e140df704c22086162977bf016ab6ead78a6e71))\n\n## [1.480.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.479.3...v1.480.0) (2023-11-08)\n\n\n### Features\n\n* **payment:** PAYPAL-2953 google-pay-paypal-commerce button implementation ([#2244](https://github.com/bigcommerce/checkout-sdk-js/issues/2244)) ([6316a83](https://github.com/bigcommerce/checkout-sdk-js/commit/6316a83b430afb8a949c18b853ee99bb506dca6b))\n\n### [1.479.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.479.2...v1.479.3) (2023-11-07)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-000 upgrade @braintree/browser-detection from 1.14.0 to 1.16.0 ([#2047](https://github.com/bigcommerce/checkout-sdk-js/issues/2047)) ([e60625c](https://github.com/bigcommerce/checkout-sdk-js/commit/e60625cdc644ef9dac677950ff868181ef13c3e6))\n* **common:** CHECKOUT-000 upgrade core-js from 3.25.2 to 3.31.0 ([#2046](https://github.com/bigcommerce/checkout-sdk-js/issues/2046)) ([36d6b3d](https://github.com/bigcommerce/checkout-sdk-js/commit/36d6b3d6021620ecf462779dfeb5c6a78403500d))\n* **common:** CHECKOUT-000 upgrade reselect from 4.1.7 to 4.1.8 ([#2048](https://github.com/bigcommerce/checkout-sdk-js/issues/2048)) ([ae07833](https://github.com/bigcommerce/checkout-sdk-js/commit/ae078335f9e8f90856f1069bea3aa76100f6e9b6))\n\n### [1.479.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.479.1...v1.479.2) (2023-11-07)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3190 updated implementation to avoid trigger OTP if the shopper canceled PayPal Connect OTP window ([#2245](https://github.com/bigcommerce/checkout-sdk-js/issues/2245)) ([4eb5eb3](https://github.com/bigcommerce/checkout-sdk-js/commit/4eb5eb3f80f6454489898bb5067e5d964a5ec57a))\n\n### [1.479.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.479.0...v1.479.1) (2023-11-06)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-3164 updated paypal sdk script loading in a new way ([#2243](https://github.com/bigcommerce/checkout-sdk-js/issues/2243)) ([273b209](https://github.com/bigcommerce/checkout-sdk-js/commit/273b2093643ceab3b48ca15a5078ce0e46830cd3))\n\n## [1.479.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.478.1...v1.479.0) (2023-11-02)\n\n\n### Features\n\n* **payment:** PI-846 Quickly selecting different payment methods on Payment step of Checkout sometimes results in error ([#2241](https://github.com/bigcommerce/checkout-sdk-js/issues/2241)) ([797a91b](https://github.com/bigcommerce/checkout-sdk-js/commit/797a91b1a4aaa2160565691fa31d8d9df19c12ec))\n\n### [1.478.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.478.0...v1.478.1) (2023-11-01)\n\n\n### Bug Fixes\n\n* **payment:** PI-924 Add additional  message while waiting confirmation from Stripe ([fd9be99](https://github.com/bigcommerce/checkout-sdk-js/commit/fd9be99af19079a0ff72ec2f270367e36e9a700b))\n\n## [1.478.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.477.0...v1.478.0) (2023-10-30)\n\n\n### Features\n\n* **payment:** PAYPAL-3156 updated payment payload to be able to vault instrument for PayPalCommerce Credit Card ([#2240](https://github.com/bigcommerce/checkout-sdk-js/issues/2240)) ([f36720a](https://github.com/bigcommerce/checkout-sdk-js/commit/f36720ac525844c20667e51632700d319c016233))\n\n## [1.477.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.476.0...v1.477.0) (2023-10-30)\n\n\n### Features\n\n* **payment:** PAYPAL-2877 Add deviceSessionId to submitPayment ([#2234](https://github.com/bigcommerce/checkout-sdk-js/issues/2234)) ([b34c920](https://github.com/bigcommerce/checkout-sdk-js/commit/b34c9200d85772acfa0ff6f5099db709f491ad5f))\n* **payment:** PAYPAL-3133 inline ([5e4776e](https://github.com/bigcommerce/checkout-sdk-js/commit/5e4776ece9eb55f5ba0100ce798a26584cd09478))\n\n## [1.476.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.475.0...v1.476.0) (2023-10-30)\n\n\n### Features\n\n* **payment:** PAYPAL-3146 stop polling mechanism when corresponding status recieved ([#2239](https://github.com/bigcommerce/checkout-sdk-js/issues/2239)) ([0b7ca82](https://github.com/bigcommerce/checkout-sdk-js/commit/0b7ca82293d5afa9ab10248ad907e799d34369b0))\n\n## [1.475.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.474.0...v1.475.0) (2023-10-25)\n\n\n### Features\n\n* **payment:** PI-976 Stripe UPE payment payload refactoring ([41e7ed2](https://github.com/bigcommerce/checkout-sdk-js/commit/41e7ed25cf90e05b4c700363d4eb4bb4a75a88f5))\n\n## [1.474.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.473.0...v1.474.0) (2023-10-24)\n\n\n### Features\n\n* **payment:** PAYPAL-0 hotfix ratepay date of birth field data ([#2235](https://github.com/bigcommerce/checkout-sdk-js/issues/2235)) ([6fec055](https://github.com/bigcommerce/checkout-sdk-js/commit/6fec05551c8a7b7520a3c8dfaa5321cd90b7fcbf))\n\n## [1.473.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.472.0...v1.473.0) (2023-10-24)\n\n\n### Features\n\n* **payment:** PI-633 add vaulted instrument data to square v2 payment strategy ([20f44d5](https://github.com/bigcommerce/checkout-sdk-js/commit/20f44d5befdfa62c82fd26668486cc44bbbb3ca1))\n\n## [1.472.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.471.1...v1.472.0) (2023-10-23)\n\n\n### Features\n\n* **payment:** PAYPAL-3080 Google Pay Braintree Button Strategy ([#2223](https://github.com/bigcommerce/checkout-sdk-js/issues/2223)) ([0a2a7f1](https://github.com/bigcommerce/checkout-sdk-js/commit/0a2a7f119da2a244d0d8f24d66f6675c0cf1ab5c))\n\n### [1.471.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.471.0...v1.471.1) (2023-10-20)\n\n## [1.471.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.470.1...v1.471.0) (2023-10-18)\n\n\n### Features\n\n* **payment:** PAYPAL-2930 PPCP GooglePay payment strategy ([8341aa1](https://github.com/bigcommerce/checkout-sdk-js/commit/8341aa1fda4c3be5a407be4827e0df9158d4760f))\n\n### [1.470.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.470.0...v1.470.1) (2023-10-18)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3090 updated all paypal buttons on checkout page to have the same default button height ([#2226](https://github.com/bigcommerce/checkout-sdk-js/issues/2226)) ([e9c87bf](https://github.com/bigcommerce/checkout-sdk-js/commit/e9c87bf363a042b4d57ec47d788a20c17265ee29))\n\n## [1.470.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.469.0...v1.470.0) (2023-10-18)\n\n\n### Features\n\n* **payment:** PAYPAL-3056 GP Braintree customer strategy ([5b56000](https://github.com/bigcommerce/checkout-sdk-js/commit/5b56000352d52c8a463ece8edb8c86fc2d836e79))\n\n## [1.469.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.468.0...v1.469.0) (2023-10-16)\n\n\n### Features\n\n* **payment:** PAYPAL-00 moved ratepay strategy to separate directory ([#2215](https://github.com/bigcommerce/checkout-sdk-js/issues/2215)) ([01bf98e](https://github.com/bigcommerce/checkout-sdk-js/commit/01bf98e7aaf28d60928d5c7f3fc4b2716b8173a0))\n\n## [1.468.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.467.0...v1.468.0) (2023-10-16)\n\n\n### Features\n\n* **payment:** PAYPAL-3099 updated BraintreeAcceleratedCheckout customer strategy to reduce customers waiting time ([#2219](https://github.com/bigcommerce/checkout-sdk-js/issues/2219)) ([7e1db5c](https://github.com/bigcommerce/checkout-sdk-js/commit/7e1db5c40db74485a005bb80d62b75521d62c0a8))\n\n## [1.467.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.466.0...v1.467.0) (2023-10-15)\n\n\n### Features\n\n* **extension:** CHECKOUT-7733 Enhance Extension Auto-Resizing ([#2187](https://github.com/bigcommerce/checkout-sdk-js/issues/2187)) ([7637cac](https://github.com/bigcommerce/checkout-sdk-js/commit/7637cac56945f6cf2bf7fad7639e786e46a9c430))\n\n## [1.466.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.465.1...v1.466.0) (2023-10-12)\n\n\n### Features\n\n* **payment:** PAYPAL-2507 polling mechanism removed from PPCP APM ([951f4bf](https://github.com/bigcommerce/checkout-sdk-js/commit/951f4bfaa17ab18487954c8527cddd4f36f16d65))\n\n### [1.465.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.465.0...v1.465.1) (2023-10-12)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2986 trigger 3DS for Braintree when the HostedForm feature turned off ([#2217](https://github.com/bigcommerce/checkout-sdk-js/issues/2217)) ([80f10af](https://github.com/bigcommerce/checkout-sdk-js/commit/80f10af996a9982d9231ca549b2b159f98bae406))\n\n## [1.465.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.464.1...v1.465.0) (2023-10-12)\n\n\n### Features\n\n* **payment:** PAYPAL-3098 added sessionId to local storage even for unrecognised guest users for Gary flow Braintree AXO ([#2216](https://github.com/bigcommerce/checkout-sdk-js/issues/2216)) ([958156f](https://github.com/bigcommerce/checkout-sdk-js/commit/958156f9a3a2d2221c773f99371e788e4e957c91))\n\n### [1.464.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.464.0...v1.464.1) (2023-10-11)\n\n## [1.464.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.463.0...v1.464.0) (2023-10-10)\n\n\n### Features\n\n* **payment:** PI-889 Add cart ID to stripe upe payment submit ([8fda6a5](https://github.com/bigcommerce/checkout-sdk-js/commit/8fda6a52ee48502912b573cb3b188d3fe684f827))\n\n## [1.463.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.462.0...v1.463.0) (2023-10-09)\n\n\n### Features\n\n* **payment:** PAYPAL-2910 Move googlepay-braintree from core to google-pay-integration package ([#2167](https://github.com/bigcommerce/checkout-sdk-js/issues/2167)) ([9b2e779](https://github.com/bigcommerce/checkout-sdk-js/commit/9b2e77937418912e545909e76ca3543e02da1017))\n\n## [1.462.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.461.1...v1.462.0) (2023-10-09)\n\n\n### Features\n\n* **payment:** PAYPAL-2946 added loading spinner to ratepay strategy ([#2200](https://github.com/bigcommerce/checkout-sdk-js/issues/2200)) ([5425418](https://github.com/bigcommerce/checkout-sdk-js/commit/5425418e25bbe4eaa9d6deaa6ef9044f8671e8df))\n\n### [1.461.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.461.0...v1.461.1) (2023-10-05)\n\n\n### Bug Fixes\n\n* **payment:** PI-758 check if Stripe container exists before mount ([607261e](https://github.com/bigcommerce/checkout-sdk-js/commit/607261e65b0c9bcade88cb2f38771ad75162c6f6))\n\n## [1.461.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.460.0...v1.461.0) (2023-10-04)\n\n\n### Features\n\n* **payment:** PAYPAL-2845 captured device info ([#2196](https://github.com/bigcommerce/checkout-sdk-js/issues/2196)) ([f33e0a0](https://github.com/bigcommerce/checkout-sdk-js/commit/f33e0a055332e1a4b9e6f22a310d3bbc1948e26d))\n\n## [1.460.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.459.0...v1.460.0) (2023-10-03)\n\n\n### Features\n\n* **payment:** PAYPAL-2984 added an ability to change BT AXO component styling through strategy initialisation options ([#2206](https://github.com/bigcommerce/checkout-sdk-js/issues/2206)) ([07ee89b](https://github.com/bigcommerce/checkout-sdk-js/commit/07ee89bdc89ce2c4bb540d0e305db9c5c8bf933d))\n\n## [1.459.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.458.0...v1.459.0) (2023-10-03)\n\n\n### Features\n\n* **checkout:** PI-741 updated adyen component state for the Boleto implementation ([f1642d4](https://github.com/bigcommerce/checkout-sdk-js/commit/f1642d4fe8ff551ac9b9cd3e34fde7eb41f75f69))\n* **payment:** PAYPAL-2987 checkout page crashing fixed ([d4aa116](https://github.com/bigcommerce/checkout-sdk-js/commit/d4aa1168bdda03b2727f7cd3677bdd9e7b9f71d4))\n\n## [1.458.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.457.0...v1.458.0) (2023-10-03)\n\n\n### Features\n\n* **payment:** PAYPAL-2844 captured device info ([#2186](https://github.com/bigcommerce/checkout-sdk-js/issues/2186)) ([3607300](https://github.com/bigcommerce/checkout-sdk-js/commit/360730012c65df79d93224da763ceb00860f5430))\n\n## [1.457.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.456.0...v1.457.0) (2023-09-28)\n\n\n### Features\n\n* **payment:** PAYPAL-2926 Unable to place order via GooglePay with 3D secure  ([#2203](https://github.com/bigcommerce/checkout-sdk-js/issues/2203)) ([7e2983f](https://github.com/bigcommerce/checkout-sdk-js/commit/7e2983fd52302ccf29996133c5bfd49630cf863e))\n\n## [1.456.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.455.1...v1.456.0) (2023-09-28)\n\n\n### Features\n\n* **payment:** PI-569 [Adyen] Klarna widget update - Klarna works through redirect again ([#2199](https://github.com/bigcommerce/checkout-sdk-js/issues/2199)) ([cd514f3](https://github.com/bigcommerce/checkout-sdk-js/commit/cd514f37539dbfd0dd8e80556f8bab152783a849))\n\n### [1.455.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.455.0...v1.455.1) (2023-09-28)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-3061 prefill full phone number in BT AXO instead of slicing country code num ([#2204](https://github.com/bigcommerce/checkout-sdk-js/issues/2204)) ([a0fea14](https://github.com/bigcommerce/checkout-sdk-js/commit/a0fea14cbed0ac6d64991862af80879831f8b013))\n\n## [1.455.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.454.0...v1.455.0) (2023-09-28)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7141 Preparation for Jest v27 Upgrade ([#2180](https://github.com/bigcommerce/checkout-sdk-js/issues/2180)) ([3c40df3](https://github.com/bigcommerce/checkout-sdk-js/commit/3c40df398be05ea7b7b8a03ec174c984b385ef70))\n\n## [1.454.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.453.0...v1.454.0) (2023-09-25)\n\n\n### Features\n\n* **payment:** PI-567 Amazon Pay Button needs to be changed to one with microtext ([8be47c9](https://github.com/bigcommerce/checkout-sdk-js/commit/8be47c915a3899aa2eacf961be696e750032cbcb))\n\n## [1.453.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.452.0...v1.453.0) (2023-09-25)\n\n\n### Features\n\n* **payment:** PAYPAL-2576 added specific button styles for each PayPal buttons ([299ce3a](https://github.com/bigcommerce/checkout-sdk-js/commit/299ce3acc9513508f976184a93ccbdf72695e1e5))\n\n## [1.452.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.451.0...v1.452.0) (2023-09-22)\n\n\n### Features\n\n* **payment:** PAYPAL-2947 added fields to mandate interface ([#2192](https://github.com/bigcommerce/checkout-sdk-js/issues/2192)) ([c1b24c9](https://github.com/bigcommerce/checkout-sdk-js/commit/c1b24c9f1dff3e113518e6b609be8892e50ef895))\n\n## [1.451.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.450.5...v1.451.0) (2023-09-21)\n\n\n### Features\n\n* **payment:** PAYPAL-2979 added phone number mapping from BT AXO profileData to autofill BC shipping and billing phone number fields ([#2188](https://github.com/bigcommerce/checkout-sdk-js/issues/2188)) ([62df5e7](https://github.com/bigcommerce/checkout-sdk-js/commit/62df5e7a63c7ee752d08f0149065696c1bf9a68f))\n\n### [1.450.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.450.4...v1.450.5) (2023-09-20)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2928 fixed the issue with braintree buttons rendering on PDP page ([#2185](https://github.com/bigcommerce/checkout-sdk-js/issues/2185)) ([e2ea829](https://github.com/bigcommerce/checkout-sdk-js/commit/e2ea829e41d057ed6e84389d8b04dbe10c06ba58))\n\n### [1.450.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.450.3...v1.450.4) (2023-09-19)\n\n### [1.450.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.450.2...v1.450.3) (2023-09-19)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-1752 added validation for braintree credit card form ([#2182](https://github.com/bigcommerce/checkout-sdk-js/issues/2182)) ([7cf06d8](https://github.com/bigcommerce/checkout-sdk-js/commit/7cf06d84985806b2c51d8018bcfb6a61755df4f1))\n\n### [1.450.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.450.1...v1.450.2) (2023-09-19)\n\n### [1.450.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.450.0...v1.450.1) (2023-09-19)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2843 captured device info for Braintree Apple Pay ([#2165](https://github.com/bigcommerce/checkout-sdk-js/issues/2165)) ([da32bcd](https://github.com/bigcommerce/checkout-sdk-js/commit/da32bcdcbfef0b14ae36182e8a73088cb60e0760))\n\n## [1.450.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.449.0...v1.450.0) (2023-09-18)\n\n\n### Features\n\n* **payment:** PAYPAL-2932 add PayPal billing addresses ([909270a](https://github.com/bigcommerce/checkout-sdk-js/commit/909270aeda56fc0e062035c1f3c8f4b9fd696af7))\n\n## [1.449.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.448.0...v1.449.0) (2023-09-13)\n\n\n### Features\n\n* **payment:** PI-734 fix error message for empty card data in Mollie ([#4](https://github.com/bigcommerce/checkout-sdk-js/issues/4)) ([#2169](https://github.com/bigcommerce/checkout-sdk-js/issues/2169)) ([d179aba](https://github.com/bigcommerce/checkout-sdk-js/commit/d179aba8afa3f49ca584544a95d08335b9e6af0d))\n\n## [1.448.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.447.0...v1.448.0) (2023-09-13)\n\n\n### Features\n\n* **payment:** PI-804 Make an ability to use deleteConsignment action from core package in integration checkout-sdk packages ([#2174](https://github.com/bigcommerce/checkout-sdk-js/issues/2174)) ([b260d2d](https://github.com/bigcommerce/checkout-sdk-js/commit/b260d2dffb9b7e4f6f82ad9497dd0876c935a215))\n\n## [1.447.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.446.0...v1.447.0) (2023-09-13)\n\n\n### Features\n\n* **payment:** PAYPAL-2632 added polling mechanism for ratepay ([#2142](https://github.com/bigcommerce/checkout-sdk-js/issues/2142)) ([4f17790](https://github.com/bigcommerce/checkout-sdk-js/commit/4f17790ca155ceacd222b1bd3dc432fcf6796db6))\n\n## [1.446.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.445.0...v1.446.0) (2023-09-12)\n\n\n### Features\n\n* **checkout:** PI-623 BluesnapDirect APMs via redirect ([bb2248f](https://github.com/bigcommerce/checkout-sdk-js/commit/bb2248fc9a98a25024f9aed5da3bef9d265b6074))\n\n## [1.445.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.444.0...v1.445.0) (2023-09-12)\n\n\n### Features\n\n* **payment:** PAYPAL-2932 add PayPal billing addresses ([0c4a7c8](https://github.com/bigcommerce/checkout-sdk-js/commit/0c4a7c88a69a4ae8b34abacb1a9840d7d7f6340d))\n\n## [1.444.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.443.0...v1.444.0) (2023-09-11)\n\n\n### Features\n\n* **payment:** PI-516 Move Stripe V3 to package ([#2089](https://github.com/bigcommerce/checkout-sdk-js/issues/2089)) ([f28e3dc](https://github.com/bigcommerce/checkout-sdk-js/commit/f28e3dca39d61db21adb7ca92ecfcca9379661a7))\n\n## [1.443.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.442.0...v1.443.0) (2023-09-06)\n\n\n### Features\n\n* **payment:** PI-626 [Stripe] An additional call to confirm payment with Stripe is resulting in error. ([4f9075a](https://github.com/bigcommerce/checkout-sdk-js/commit/4f9075a73aa288500678e56d1859e8c6acc26e19))\n\n## [1.442.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.441.4...v1.442.0) (2023-09-06)\n\n\n### Features\n\n* **payment:** PAYPAL-2728 create shipping strategy for Braintree AXO ([3dafa27](https://github.com/bigcommerce/checkout-sdk-js/commit/3dafa2738a58740c1a7e1922276a9493923326c3))\n\n### [1.441.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.441.3...v1.441.4) (2023-09-06)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2923 covered Braintree AXO sandbox switcher with test mode condition ([#2168](https://github.com/bigcommerce/checkout-sdk-js/issues/2168)) ([bfafc5c](https://github.com/bigcommerce/checkout-sdk-js/commit/bfafc5cb0130d3451c713080960444839875c110))\n\n### [1.441.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.441.2...v1.441.3) (2023-09-05)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2908 removed unnecessary 2770 experiment because we dont need it here anymore (Braintree SDK) ([#2166](https://github.com/bigcommerce/checkout-sdk-js/issues/2166)) ([f002415](https://github.com/bigcommerce/checkout-sdk-js/commit/f002415e00b60393c8a80acbf1a4e31d02984a84))\n\n### [1.441.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.441.1...v1.441.2) (2023-09-04)\n\n\n### Bug Fixes\n\n* **checkout:** PI-747 bluesnap 3ds for stored card, billing/shipping state mapping ([f008550](https://github.com/bigcommerce/checkout-sdk-js/commit/f008550aba21a8a822c418bf82e20781d7db31f3))\n\n### [1.441.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.441.0...v1.441.1) (2023-09-04)\n\n## [1.441.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.440.0...v1.441.0) (2023-09-04)\n\n\n### Features\n\n* **payment:** PAYPAL-2913 provided customer device data on any place order for BT AXO ([#2159](https://github.com/bigcommerce/checkout-sdk-js/issues/2159)) ([d110fa0](https://github.com/bigcommerce/checkout-sdk-js/commit/d110fa06fd10f5f5a06e6a838e9040720fc4e36b))\n* **payment:** PAYPAL-2914 updated BT AXO Credit card component style ([#2160](https://github.com/bigcommerce/checkout-sdk-js/issues/2160)) ([8f82f73](https://github.com/bigcommerce/checkout-sdk-js/commit/8f82f73381bf1f0e7fa3a3cd9ef2ac42aede9414))\n\n## [1.440.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.439.0...v1.440.0) (2023-09-04)\n\n\n### Features\n\n* **payment:** PAYPAL-2843 captured device info for Braintree Apple Pay ([#2131](https://github.com/bigcommerce/checkout-sdk-js/issues/2131)) ([05fbd6e](https://github.com/bigcommerce/checkout-sdk-js/commit/05fbd6ef754fd163b403cc958460e7ae4ec6031e))\n* **payment:** PAYPAL-2908 updated braintree sdk version ([#2158](https://github.com/bigcommerce/checkout-sdk-js/issues/2158)) ([c643eb1](https://github.com/bigcommerce/checkout-sdk-js/commit/c643eb14e5cc62f9f5a2b33ab726e28107e0442a))\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-000 fixed the issue with braintree initialization in apple pay payment strategy ([#2161](https://github.com/bigcommerce/checkout-sdk-js/issues/2161)) ([8271c76](https://github.com/bigcommerce/checkout-sdk-js/commit/8271c7642638ebec4a5370602c94f8e3b7a4a89a))\n\n## [1.439.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.438.0...v1.439.0) (2023-09-03)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7648 Add isExpressPrivacyPolicy to checkoutSettings ([#2155](https://github.com/bigcommerce/checkout-sdk-js/issues/2155)) ([c98410a](https://github.com/bigcommerce/checkout-sdk-js/commit/c98410ac719fbe41506b2b36b57dcbb2b0c39456))\n\n## [1.438.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.437.0...v1.438.0) (2023-08-31)\n\n\n### Features\n\n* **payment:** PI-474 load bluesnap script ONLY if it wasn't loaded before ([39e2ed5](https://github.com/bigcommerce/checkout-sdk-js/commit/39e2ed577d88afc0d9e7057067ab714c746aaabb))\n\n## [1.437.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.436.1...v1.437.0) (2023-08-29)\n\n\n### Features\n\n* **payment:** INT-5659 GooglePay: Add customer strategy ([#1994](https://github.com/bigcommerce/checkout-sdk-js/issues/1994)) ([f6eed4d](https://github.com/bigcommerce/checkout-sdk-js/commit/f6eed4d95af3b5280f90caa3d597b5092ee1dbef))\n\n### [1.436.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.436.0...v1.436.1) (2023-08-29)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2881 loadPaypal asynchronous call fix ([e4f036b](https://github.com/bigcommerce/checkout-sdk-js/commit/e4f036b825a0ae09bf062e0816c0e8787f37f74e))\n\n## [1.436.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.435.0...v1.436.0) (2023-08-29)\n\n\n### Features\n\n* **payment:** PAYPAL-2888 updated PayPal Connect LS axo value to sandbox ([#2149](https://github.com/bigcommerce/checkout-sdk-js/issues/2149)) ([a499a40](https://github.com/bigcommerce/checkout-sdk-js/commit/a499a40b127093d35d0b360bfff431c4f01b2a94))\n\n\n### Bug Fixes\n\n* **common:** PAYPAL-000 fixed the console error on npm run bundle-dts command run ([#2144](https://github.com/bigcommerce/checkout-sdk-js/issues/2144)) ([ca8cb4d](https://github.com/bigcommerce/checkout-sdk-js/commit/ca8cb4ddf7bc13c739f8cc295d16b2b9db1cdfb6))\n\n## [1.435.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.434.0...v1.435.0) (2023-08-28)\n\n\n### Features\n\n* **checkout:** PI-520 Stripe UPE - Provide AVS results ([0ba2ecd](https://github.com/bigcommerce/checkout-sdk-js/commit/0ba2ecdf9c0bf865f21709b28e4edae29b61cd3a))\n* **checkout:** PI-520 Stripe UPE - Provide AVS results ([babf9f9](https://github.com/bigcommerce/checkout-sdk-js/commit/babf9f996f06539d18b2f325e327e37a162a683e))\n* **checkout:** PI-520 Stripe UPE - Provide AVS results ([4facd6f](https://github.com/bigcommerce/checkout-sdk-js/commit/4facd6f7a89074ee63dc26d35a3cb535e47621f4))\n\n## [1.434.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.433.2...v1.434.0) (2023-08-28)\n\n\n### Features\n\n* **payment:** PI-489 move Mollie to separate package ([#2126](https://github.com/bigcommerce/checkout-sdk-js/issues/2126)) ([a345497](https://github.com/bigcommerce/checkout-sdk-js/commit/a345497a9a14444f2f8c4c2e4e55307f8fde532f))\n\n### [1.433.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.433.1...v1.433.2) (2023-08-28)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-6883 Pass store credit to apple pay sheet ([#2146](https://github.com/bigcommerce/checkout-sdk-js/issues/2146)) ([dea596b](https://github.com/bigcommerce/checkout-sdk-js/commit/dea596b183207dba46c24cd80d52d3bddcdf4bda))\n\n### [1.433.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.433.0...v1.433.1) (2023-08-25)\n\n\n### Bug Fixes\n\n* **checkout:** PI-657 fixed validation for stored bluesnap direct card verification fields ([19713a8](https://github.com/bigcommerce/checkout-sdk-js/commit/19713a8492d319078873b501ba7e428e48f0ec18))\n\n## [1.433.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.432.0...v1.433.0) (2023-08-25)\n\n\n### Features\n\n* **payment:** PAYPAL-2851 trigger authentication flow on BT AXO payment method initialization ([#2140](https://github.com/bigcommerce/checkout-sdk-js/issues/2140)) ([a3b12a2](https://github.com/bigcommerce/checkout-sdk-js/commit/a3b12a2078df582566cec9406aa38b7735f73219))\n\n## [1.432.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.431.0...v1.432.0) (2023-08-23)\n\n\n### Features\n\n* **payment:** INT-7676 GooglePay: Add payment strategy ([#1967](https://github.com/bigcommerce/checkout-sdk-js/issues/1967)) ([d528699](https://github.com/bigcommerce/checkout-sdk-js/commit/d5286995b1aca3948ff0673ebbedd4c233b35a3f))\n\n## [1.431.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.430.0...v1.431.0) (2023-08-22)\n\n\n### Features\n\n* **payment:** PAYPAL-2853 added riskCorrelationId to data collector for PayPal Analytics ([#2132](https://github.com/bigcommerce/checkout-sdk-js/issues/2132)) ([4d2328f](https://github.com/bigcommerce/checkout-sdk-js/commit/4d2328ffac4b76a7fce71c2d3633739558384587))\n* **payment:** PAYPAL-2873 added paypal connect vaulting formated payload interface ([#2134](https://github.com/bigcommerce/checkout-sdk-js/issues/2134)) ([b2e109c](https://github.com/bigcommerce/checkout-sdk-js/commit/b2e109c1cf5c25b0639dafe2e345bc7b294adafc))\n* **payment:** PAYPAL-2873 updated payment payload for PayPal Connect vaulted instruments BT AXO ([#2135](https://github.com/bigcommerce/checkout-sdk-js/issues/2135)) ([9ee7ba9](https://github.com/bigcommerce/checkout-sdk-js/commit/9ee7ba9bb5bad91e6769426ee6f66a1eb9aa9b5a))\n* **payment:** PAYPAL-2876 added session id to the local storage after customer's OTP BT AXO ([#2133](https://github.com/bigcommerce/checkout-sdk-js/issues/2133)) ([71a8e3f](https://github.com/bigcommerce/checkout-sdk-js/commit/71a8e3f3c46e1896814f722429a8fa9b76903ab5))\n\n## [1.430.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.429.0...v1.430.0) (2023-08-21)\n\n\n### Features\n\n* **payment:** PAYPAL-2792 fixed applepay spb on PDP ([#2107](https://github.com/bigcommerce/checkout-sdk-js/issues/2107)) ([4e2470f](https://github.com/bigcommerce/checkout-sdk-js/commit/4e2470f2e039365b35f8c75213a586d8e570b46e))\n\n## [1.429.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.428.0...v1.429.0) (2023-08-21)\n\n\n### Features\n\n* **payment:** PAYPAL-2856 added styles for PayPal Connect Credit Card component ([#2120](https://github.com/bigcommerce/checkout-sdk-js/issues/2120)) ([06db7ad](https://github.com/bigcommerce/checkout-sdk-js/commit/06db7adf275063af37be445420bcca73a914b6a1))\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2868 clean up prev provider customer data from checkout state BT AXO ([#2130](https://github.com/bigcommerce/checkout-sdk-js/issues/2130)) ([8415323](https://github.com/bigcommerce/checkout-sdk-js/commit/84153233997bb5ae84acd0fdc49df7a7c0a4c4de))\n\n## [1.428.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.427.0...v1.428.0) (2023-08-18)\n\n\n### Features\n\n* **payment:** PAYPAL-2842 moved braintree-integration-service and braintree-script-loader to braintree utils package ([#2121](https://github.com/bigcommerce/checkout-sdk-js/issues/2121)) ([3e8c6f1](https://github.com/bigcommerce/checkout-sdk-js/commit/3e8c6f1d46736b76a1b8c307ec0ba9a869dd47b6))\n\n\n### Bug Fixes\n\n* **extension:** CHECKOUT-7652 Propagate extension ID as context data and only trigger handler if matching extension ID ([5013d09](https://github.com/bigcommerce/checkout-sdk-js/commit/5013d09d6508910302d2e2e340fabc9093e00e9a))\n\n\n### Code Refactoring\n\n* **extension:** CHECKOUT-7652 Add namespace to extension command messages, remove duplicate commands and improve typing/naming ([c42c012](https://github.com/bigcommerce/checkout-sdk-js/commit/c42c012ecf54902b4d54524ab404372d07d4b745))\n* **extension:** CHECKOUT-7652 Create separate resizable iframe creator for extension ([cc73d80](https://github.com/bigcommerce/checkout-sdk-js/commit/cc73d8003ec2188f9f51b2058d5b2ad9d8c71d70))\n* **payment:** PAYPAL-2730 removed unnecessary method call in sign in BT AXO customer strategy ([#2127](https://github.com/bigcommerce/checkout-sdk-js/issues/2127)) ([c767a38](https://github.com/bigcommerce/checkout-sdk-js/commit/c767a38254e44d0aa0aee82a168bc2026d379af7))\n\n## [1.427.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.426.1...v1.427.0) (2023-08-17)\n\n\n### Features\n\n* **payment:** PAYPAL-2854 updated braintree sdk with new alpha version ([#2119](https://github.com/bigcommerce/checkout-sdk-js/issues/2119)) ([48ee142](https://github.com/bigcommerce/checkout-sdk-js/commit/48ee14270625e911e3d0eb2cea25d3b548486ed7))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2852 removed implementation that stores customers data to local storage BT AXO ([#2123](https://github.com/bigcommerce/checkout-sdk-js/issues/2123)) ([f73cd25](https://github.com/bigcommerce/checkout-sdk-js/commit/f73cd25c2e0a43bd4df8abd04c5587d46ceda5db))\n\n### [1.426.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.426.0...v1.426.1) (2023-08-16)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-000 fixed backup payment method loading for braintree accelerated checkout strategies ([#2118](https://github.com/bigcommerce/checkout-sdk-js/issues/2118)) ([94d3297](https://github.com/bigcommerce/checkout-sdk-js/commit/94d32973d50b55116672374a5115cae0818f85ce))\n\n## [1.426.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.425.0...v1.426.0) (2023-08-16)\n\n\n### Features\n\n* **checkout:** PI-286 added bigpayToken to the loadPaymentMethod params ([497920e](https://github.com/bigcommerce/checkout-sdk-js/commit/497920e0edcd91fe4434b15b9e09ee13dabc6de4))\n* **checkout:** PI-286 bluesnapdirect 3ds for stored cards without hosted fields ([2999e44](https://github.com/bigcommerce/checkout-sdk-js/commit/2999e442ccbddb6582c4b0af3f1b8c500f39243d))\n\n## [1.425.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.424.0...v1.425.0) (2023-08-16)\n\n\n### Features\n\n* **payment:** PAYPAL-2758 PayLater Messages ([#2076](https://github.com/bigcommerce/checkout-sdk-js/issues/2076)) ([bddff2f](https://github.com/bigcommerce/checkout-sdk-js/commit/bddff2f3914740e7584d51ebe1af6d3e908a7627))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2855 updated core and braintree packages with braintree sdk version from braintree-utils package ([#2117](https://github.com/bigcommerce/checkout-sdk-js/issues/2117)) ([c469cb8](https://github.com/bigcommerce/checkout-sdk-js/commit/c469cb8b288c675d92983b57029b6d983a62cc6f))\n\n## [1.424.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.423.0...v1.424.0) (2023-08-15)\n\n\n### Features\n\n* **payment:** PAYPAL-2827 add a condition to check when to run PayPal Connect authentication flow in BT customer strategy (A/B testing coverage) ([#2108](https://github.com/bigcommerce/checkout-sdk-js/issues/2108)) ([e46bfa6](https://github.com/bigcommerce/checkout-sdk-js/commit/e46bfa69cd2a3678746cda5f6a55e43c6e1a4edf))\n\n## [1.423.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.422.0...v1.423.0) (2023-08-14)\n\n\n### Features\n\n* **payment:** PAYPAL-2847 created braintree-utils package ([#2114](https://github.com/bigcommerce/checkout-sdk-js/issues/2114)) ([6d481b6](https://github.com/bigcommerce/checkout-sdk-js/commit/6d481b6976331792cd704b1029fe9f9ca87400db))\n\n## [1.422.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.421.1...v1.422.0) (2023-08-14)\n\n\n### Features\n\n* **payment:** PAYPAL-2828 added shipping and billing address selected with PayPal AXO address after OTP ([#2112](https://github.com/bigcommerce/checkout-sdk-js/issues/2112)) ([2363a3e](https://github.com/bigcommerce/checkout-sdk-js/commit/2363a3efd6f8f198733585ca3319f153a95b0091))\n\n### [1.421.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.421.0...v1.421.1) (2023-08-10)\n\n## [1.421.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.420.0...v1.421.0) (2023-08-09)\n\n\n### Features\n\n* **payment:** PAYPAL-000 updated paypal connect address mapper to receive CustomerAddress instead of Address ([#2101](https://github.com/bigcommerce/checkout-sdk-js/issues/2101)) ([bb01b20](https://github.com/bigcommerce/checkout-sdk-js/commit/bb01b201d84abe0d6ee9d088b916bf074dab4744))\n\n## [1.420.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.419.0...v1.420.0) (2023-08-08)\n\n\n### Features\n\n* **payment:** PAYPAL-2692 removed this.paypalSdk ([f2b56f3](https://github.com/bigcommerce/checkout-sdk-js/commit/f2b56f3c636ca3e43083945b6d24aed64aeea254))\n\n## [1.419.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.418.1...v1.419.0) (2023-08-08)\n\n\n### Features\n\n* **payment:** PAYPAL-2737 updated Braintree AXO strategy with vaulted instruments implementation ([#2098](https://github.com/bigcommerce/checkout-sdk-js/issues/2098)) ([4b98c9e](https://github.com/bigcommerce/checkout-sdk-js/commit/4b98c9e617ca55a696d3c204915595a8019cc42e))\n\n### [1.418.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.418.0...v1.418.1) (2023-08-08)\n\n## [1.418.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.417.0...v1.418.0) (2023-08-07)\n\n\n### Features\n\n* **extension:** CHECKOUT-7611 Notify extension when consignment changes ([61c0626](https://github.com/bigcommerce/checkout-sdk-js/commit/61c0626a5408a8edaed6832b16c1fd6a115fe65e))\n* **extension:** CHECKOUT-7611 Notify extension when shipping country changes ([cf181b2](https://github.com/bigcommerce/checkout-sdk-js/commit/cf181b2533c62b9ca6dd089e3112b29fbc058456))\n\n\n### Code Refactoring\n\n* **extension:** CHECKOUT-7611 Pass public selectors to state change subscribers ([8128e92](https://github.com/bigcommerce/checkout-sdk-js/commit/8128e927a040d62892e99c295733515a9f05368d))\n* **extension:** CHECKOUT-7611 Remove shipping country change event ([d170b3a](https://github.com/bigcommerce/checkout-sdk-js/commit/d170b3a6a7cd31743e247544b837049dcf6c2cd9))\n* **payment:** PAYPAL-2813 created BraintreeAcceleratedCheckoutUtils class ([#2096](https://github.com/bigcommerce/checkout-sdk-js/issues/2096)) ([b7b053b](https://github.com/bigcommerce/checkout-sdk-js/commit/b7b053bbaa0e86c1f4f5de83566c159871efe29e))\n\n## [1.417.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.416.0...v1.417.0) (2023-08-03)\n\n\n### Features\n\n* **payment:** PAYPAL-2797 pass customers data to local storage after authentication (Braintree AXO) ([#2092](https://github.com/bigcommerce/checkout-sdk-js/issues/2092)) ([1d2f287](https://github.com/bigcommerce/checkout-sdk-js/commit/1d2f287997b3808b2ac04c36bf38c0b6447172fa))\n\n## [1.416.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.415.1...v1.416.0) (2023-08-03)\n\n\n### Features\n\n* **payment:** PAYPAL-2804 added country to each PayPal Connect customer address to use it on client side for BT AXO ([#2094](https://github.com/bigcommerce/checkout-sdk-js/issues/2094)) ([c695c5a](https://github.com/bigcommerce/checkout-sdk-js/commit/c695c5a4ba23adf6c3571c02ac262008617cccdc))\n\n### [1.415.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.415.0...v1.415.1) (2023-08-03)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-7634 Improvements for extension ([#2085](https://github.com/bigcommerce/checkout-sdk-js/issues/2085)) ([ba44288](https://github.com/bigcommerce/checkout-sdk-js/commit/ba44288e9a0fa9c9ac8869a66c8a6b1b20866c4c))\n\n## [1.415.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.414.0...v1.415.0) (2023-08-02)\n\n\n### Features\n\n* **payment:** PAYPAL-2803 made an ability to use getCountries method in integration packages ([#2093](https://github.com/bigcommerce/checkout-sdk-js/issues/2093)) ([ce1419f](https://github.com/bigcommerce/checkout-sdk-js/commit/ce1419fa5d380da9aca8de803374fc01508413f3))\n\n## [1.414.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.413.0...v1.414.0) (2023-08-02)\n\n\n### Features\n\n* **payment:** PAYPAL-1545 added paypalcommerce ratepay payment strategy ([#2040](https://github.com/bigcommerce/checkout-sdk-js/issues/2040)) ([47387ac](https://github.com/bigcommerce/checkout-sdk-js/commit/47387aca1c5de298e5ef6e3e85666a87f934631c))\n\n## [1.413.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.412.0...v1.413.0) (2023-08-02)\n\n\n### Features\n\n* **payment:** PAYPAL-000 add an ability to use getPaymentProviderCustomer method on the client side ([#2090](https://github.com/bigcommerce/checkout-sdk-js/issues/2090)) ([8be3788](https://github.com/bigcommerce/checkout-sdk-js/commit/8be3788a3ba55c0531d7b99340416f05045bbb57))\n\n## [1.412.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.411.0...v1.412.0) (2023-08-01)\n\n\n### Features\n\n* **payment:** PAYPAL-000 created storage package ([#2086](https://github.com/bigcommerce/checkout-sdk-js/issues/2086)) ([c818675](https://github.com/bigcommerce/checkout-sdk-js/commit/c818675b5a98d438654f35195c51d2c138c9369d))\n* **payment:** PAYPAL-2727 added Braintree Accelerated Checkout customer strategy ([#2078](https://github.com/bigcommerce/checkout-sdk-js/issues/2078)) ([475633a](https://github.com/bigcommerce/checkout-sdk-js/commit/475633a56cccb13a80275be735131f602c16aa36))\n* **payment:** PAYPAL-2727 added Braintree Accelerated Checkout customer strategy ([#2087](https://github.com/bigcommerce/checkout-sdk-js/issues/2087)) ([913aa28](https://github.com/bigcommerce/checkout-sdk-js/commit/913aa282393187eae2d8cd73976a094f1014586f))\n\n## [1.411.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.410.0...v1.411.0) (2023-07-31)\n\n\n### Features\n\n* **payment:** PAYPAL-2731 added PaymentProviderCustomer state ([#2075](https://github.com/bigcommerce/checkout-sdk-js/issues/2075)) ([83ae13d](https://github.com/bigcommerce/checkout-sdk-js/commit/83ae13d873730dd613edf157ac44b2784681a878))\n\n## [1.410.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.409.0...v1.410.0) (2023-07-31)\n\n\n### Features\n\n* **payment:** PAYPAL-2725 updated braintree sdk to newest alpha version ([#2082](https://github.com/bigcommerce/checkout-sdk-js/issues/2082)) ([7e630bb](https://github.com/bigcommerce/checkout-sdk-js/commit/7e630bb7e493507001ff710a468b615b017e65f7))\n* **payment:** PAYPAL-2725 updated braintree sdk to newest alpha version (core part) ([#2083](https://github.com/bigcommerce/checkout-sdk-js/issues/2083)) ([b8a9061](https://github.com/bigcommerce/checkout-sdk-js/commit/b8a9061f01cceb29884a76bdd3594d560f87bef6))\n\n## [1.409.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.408.0...v1.409.0) (2023-07-27)\n\n\n### Features\n\n* **payment:** PI-585 Make an ability to use loadCurrentOrder action from core package in integration checkout-sdk packages ([#2077](https://github.com/bigcommerce/checkout-sdk-js/issues/2077)) ([56daa7a](https://github.com/bigcommerce/checkout-sdk-js/commit/56daa7a6d4ff02ec4d30b02da4be35fe088c8e7c))\n\n## [1.408.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.407.0...v1.408.0) (2023-07-26)\n\n\n### Features\n\n* **checkout:** CHECKOUT-000 Update client side interfaces ([#2079](https://github.com/bigcommerce/checkout-sdk-js/issues/2079)) ([0ce1123](https://github.com/bigcommerce/checkout-sdk-js/commit/0ce11237a51a1f071177b3252491fd9b817f7206))\n\n## [1.407.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.406.1...v1.407.0) (2023-07-25)\n\n\n### Features\n\n* **payment:** PAYPAL-2744 fixed cart amout for order for BT LPM ([#2080](https://github.com/bigcommerce/checkout-sdk-js/issues/2080)) ([ae738f3](https://github.com/bigcommerce/checkout-sdk-js/commit/ae738f3fd6afab902afdd8429c08a6fde50a9b71))\n\n### [1.406.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.406.0...v1.406.1) (2023-07-25)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2634 removed redundant code, added updateShouldThrowInvalidError ([9ecf5fb](https://github.com/bigcommerce/checkout-sdk-js/commit/9ecf5fbee50c87996ec32b998c5ccc71dacb556a))\n\n## [1.406.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.405.2...v1.406.0) (2023-07-24)\n\n\n### Features\n\n* **payment:** PAYPAL-2726 added BraintreeAcceleratedCheckout payment strategy ([#2068](https://github.com/bigcommerce/checkout-sdk-js/issues/2068)) ([0a07d3c](https://github.com/bigcommerce/checkout-sdk-js/commit/0a07d3c5867839717358043313e85b771667d57b))\n\n### [1.405.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.405.1...v1.405.2) (2023-07-20)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-7624 Update extension-related naming ([#2069](https://github.com/bigcommerce/checkout-sdk-js/issues/2069)) ([41af8df](https://github.com/bigcommerce/checkout-sdk-js/commit/41af8df893c19183ea5feb31a4afd4229803220c))\n\n### [1.405.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.405.0...v1.405.1) (2023-07-20)\n\n## [1.405.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.404.0...v1.405.0) (2023-07-20)\n\n\n### Features\n\n* **payment:** PAYPAL-2725 added an ability to switch braintree sdk version (core part) ([#2065](https://github.com/bigcommerce/checkout-sdk-js/issues/2065)) ([29d5451](https://github.com/bigcommerce/checkout-sdk-js/commit/29d54510ef69590bfd697b580594784ed487b5f7))\n* **payment:** PAYPAL-2725 added an ability to switch braintree sdk version to alpha due to the settings in cp ([#2063](https://github.com/bigcommerce/checkout-sdk-js/issues/2063)) ([94a4ce3](https://github.com/bigcommerce/checkout-sdk-js/commit/94a4ce3093b770fdfc6a21d96b6ee2908255adc5))\n\n## [1.404.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.403.0...v1.404.0) (2023-07-19)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7595 Add client extension service ([#2056](https://github.com/bigcommerce/checkout-sdk-js/issues/2056)) ([c04106a](https://github.com/bigcommerce/checkout-sdk-js/commit/c04106afba0c341b9a76d4341cc98542d32dc7a7))\n\n## [1.403.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.402.1...v1.403.0) (2023-07-19)\n\n\n### Features\n\n* **order:** ORDERS-5715 add OrderFee interface, add fees field to Order interface ([#2066](https://github.com/bigcommerce/checkout-sdk-js/issues/2066)) ([9b09886](https://github.com/bigcommerce/checkout-sdk-js/commit/9b0988619bca9c690f853ab9089d64c74643f885))\n\n### [1.402.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.402.0...v1.402.1) (2023-07-17)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2719 fix amazon pay button ([de1cb81](https://github.com/bigcommerce/checkout-sdk-js/commit/de1cb81bd278fbb81782d4dfb32db6b1370291c8))\n\n## [1.402.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.401.0...v1.402.0) (2023-07-17)\n\n\n### Features\n\n* **payment:** PAYPAL-2720 Fixed BT LPM cart amount ([#2058](https://github.com/bigcommerce/checkout-sdk-js/issues/2058)) ([5fb2488](https://github.com/bigcommerce/checkout-sdk-js/commit/5fb2488bf386a56d9249130051f066240ba93e4a))\n\n## [1.401.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.400.0...v1.401.0) (2023-07-16)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7538 Introduce extension messenger and command handler ([#2050](https://github.com/bigcommerce/checkout-sdk-js/issues/2050)) ([b43adec](https://github.com/bigcommerce/checkout-sdk-js/commit/b43adecf32105a6a7bf9451e4c80fd0beb77eae2))\n\n## [1.400.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.399.2...v1.400.0) (2023-07-13)\n\n\n### Features\n\n* **payment:** PI-502 Fortis package ([8032101](https://github.com/bigcommerce/checkout-sdk-js/commit/80321015800e869b8d98d0fa95fb77580db8f25a))\n\n### [1.399.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.399.1...v1.399.2) (2023-07-13)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2502 bump braintree sdk version ([33970f0](https://github.com/bigcommerce/checkout-sdk-js/commit/33970f05d41175cb163a1a18c8c5129d4e732036))\n\n### [1.399.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.399.0...v1.399.1) (2023-07-13)\n\n\n### Bug Fixes\n\n* upgrade yup from 1.1.1 to 1.2.0 ([#2049](https://github.com/bigcommerce/checkout-sdk-js/issues/2049)) ([259d88c](https://github.com/bigcommerce/checkout-sdk-js/commit/259d88c27a1bb20bfdb7a4eb9d9836e3211ef3f4))\n\n## [1.399.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.398.2...v1.399.0) (2023-07-10)\n\n\n### Features\n\n* **payment:** PAYPAL-2476 added TS interface for updateOrder method in PPCP request sender ([#2033](https://github.com/bigcommerce/checkout-sdk-js/issues/2033)) ([10c2e8f](https://github.com/bigcommerce/checkout-sdk-js/commit/10c2e8faeb397cee1e9cc3104f1a5cb939c38356))\n\n### [1.398.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.398.1...v1.398.2) (2023-07-06)\n\n\n### Bug Fixes\n\n* **checkout:** PI-00 fix pending promise for bluesnapdirect APMs iframe ([9acdde7](https://github.com/bigcommerce/checkout-sdk-js/commit/9acdde7c9ce1bd11f3c81d07e87c72c7454de2eb))\n\n### [1.398.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.398.0...v1.398.1) (2023-07-05)\n\n## [1.398.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.397.0...v1.398.0) (2023-07-05)\n\n\n### Features\n\n* **payment:** PAYPAL-2690 added braintree ach vaulting instrument confirmation feature ([#2044](https://github.com/bigcommerce/checkout-sdk-js/issues/2044)) ([f15657d](https://github.com/bigcommerce/checkout-sdk-js/commit/f15657d0c0648f8d1749fa1f4e0d2b5e5c257074))\n\n## [1.397.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.396.1...v1.397.0) (2023-07-04)\n\n\n### Features\n\n* **checkout:** PI-168 bluesnapdirect APMs ([9e2dd90](https://github.com/bigcommerce/checkout-sdk-js/commit/9e2dd903f05716065a9716f4378292743cbb967e))\n\n### [1.396.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.396.0...v1.396.1) (2023-07-04)\n\n\n### Bug Fixes\n\n* **order:** DATA-11056 Populate category names for BODL purchase event ([#2042](https://github.com/bigcommerce/checkout-sdk-js/issues/2042)) ([0715960](https://github.com/bigcommerce/checkout-sdk-js/commit/0715960f6b9aa7b87886dbe0e343b3ad1aa079cd)), closes [#2032](https://github.com/bigcommerce/checkout-sdk-js/issues/2032) [#2038](https://github.com/bigcommerce/checkout-sdk-js/issues/2038)\n\n## [1.396.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.395.4...v1.396.0) (2023-07-04)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7534 Add fees field ([e19484a](https://github.com/bigcommerce/checkout-sdk-js/commit/e19484a8b7a751e5fa8bb8df065752d91367d13d))\n* **checkout:** CHECKOUT-7534 removed optional ([783e498](https://github.com/bigcommerce/checkout-sdk-js/commit/783e4983e9553842988b9b3f507b9da4524e5cae))\n\n### [1.395.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.395.3...v1.395.4) (2023-07-03)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2634 fixed issue when teardown is called twice ([61792c7](https://github.com/bigcommerce/checkout-sdk-js/commit/61792c7db01f983bee5beb0b7a8f87e4716832e0))\n\n### [1.395.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.395.2...v1.395.3) (2023-06-30)\n\n### [1.395.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.395.1...v1.395.2) (2023-06-29)\n\n### [1.395.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.395.0...v1.395.1) (2023-06-28)\n\n\n### Bug Fixes\n\n* **order:** DATA-11056 Populate category names for BODL purchase event ([#2032](https://github.com/bigcommerce/checkout-sdk-js/issues/2032)) ([3afd61a](https://github.com/bigcommerce/checkout-sdk-js/commit/3afd61a3228760f1aa3ae84e9074a58ecd210194))\n\n## [1.395.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.394.1...v1.395.0) (2023-06-28)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7537 Render extensions ([#2028](https://github.com/bigcommerce/checkout-sdk-js/issues/2028)) ([c52e6cd](https://github.com/bigcommerce/checkout-sdk-js/commit/c52e6cdb3c0c93dc8d7a2fe51bf2680fa9b31126))\n\n### [1.394.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.394.0...v1.394.1) (2023-06-27)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2502 revert braintree sdk bump version ([#2031](https://github.com/bigcommerce/checkout-sdk-js/issues/2031)) ([753aaed](https://github.com/bigcommerce/checkout-sdk-js/commit/753aaedab5f046e71eb8504d21eb0a992083e44d))\n\n## [1.394.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.393.2...v1.394.0) (2023-06-22)\n\n\n### Features\n\n* **payment:** PI-34 [AmazonPay] Update Amazon Pay to use the latest button design ([#1997](https://github.com/bigcommerce/checkout-sdk-js/issues/1997)) ([105a353](https://github.com/bigcommerce/checkout-sdk-js/commit/105a35380792fde9f0063b232ed972e5dbb62500))\n\n### [1.393.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.393.1...v1.393.2) (2023-06-22)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2634 fixed issue when teardown is called twice ([bd46bf2](https://github.com/bigcommerce/checkout-sdk-js/commit/bd46bf2417f17d0780b98859865d9a7a783560c7))\n\n### [1.393.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.393.0...v1.393.1) (2023-06-22)\n\n## [1.393.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.392.0...v1.393.0) (2023-06-22)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7536 Load extensions ([#2020](https://github.com/bigcommerce/checkout-sdk-js/issues/2020)) ([54c93a6](https://github.com/bigcommerce/checkout-sdk-js/commit/54c93a69ec1b4bf065e21fb93eda43cdd6529177))\n\n## [1.392.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.391.0...v1.392.0) (2023-06-21)\n\n\n### Features\n\n* **payment:** PAYPAL-2645 fixed submit button for braintree lpm ([#2022](https://github.com/bigcommerce/checkout-sdk-js/issues/2022)) ([579b34e](https://github.com/bigcommerce/checkout-sdk-js/commit/579b34e92d45cb42082624a3769c6b8c6c124cae))\n\n## [1.391.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.390.0...v1.391.0) (2023-06-21)\n\n\n### Features\n\n* **checkout:** DATA-10908 DATA-10928 Add shipping and payment detailsprovided events for BODL ([#2019](https://github.com/bigcommerce/checkout-sdk-js/issues/2019)) ([e7040f9](https://github.com/bigcommerce/checkout-sdk-js/commit/e7040f9a5eeec564b4ab6514960c786ee6dc3749))\n* **payment:** CHECKOUT-7504 Enable recaptcha for apple pay ([#2011](https://github.com/bigcommerce/checkout-sdk-js/issues/2011)) ([5c2cc35](https://github.com/bigcommerce/checkout-sdk-js/commit/5c2cc352ee7eb49b904080836ad0a9838ef24dd2))\n\n\n### Bug Fixes\n\n* **checkout:** DATA-10908 Fix failing bodl unit tests ([#2024](https://github.com/bigcommerce/checkout-sdk-js/issues/2024)) ([4ace117](https://github.com/bigcommerce/checkout-sdk-js/commit/4ace117bb7946609bf67ea18ad80e18800efdb41))\n\n## [1.390.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.389.0...v1.390.0) (2023-06-20)\n\n\n### Features\n\n* **payment:** PI-120 Autofilling of holderName to be configurable ([a6ae531](https://github.com/bigcommerce/checkout-sdk-js/commit/a6ae5315d003d748b539371af19835a38c56e3ef))\n\n## [1.389.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.388.2...v1.389.0) (2023-06-20)\n\n\n### Features\n\n* **payment:** PAYPAL-2502 bump Braintree sdk version ([8ee7c0f](https://github.com/bigcommerce/checkout-sdk-js/commit/8ee7c0fbd18f9f367a56d8d32332259a3c1a94ef))\n\n### [1.388.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.388.1...v1.388.2) (2023-06-14)\n\n\n### Bug Fixes\n\n* **checkout:** PI-294 adyen v3 stored card pay fix, after adding klarna pay widget ([58c7936](https://github.com/bigcommerce/checkout-sdk-js/commit/58c79366059947f5aa9dcb52bdcf3b24f3fb1364))\n\n### [1.388.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.388.0...v1.388.1) (2023-06-14)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2602 changed getting the billing address ([2bf81ed](https://github.com/bigcommerce/checkout-sdk-js/commit/2bf81ed5cff0f2aacb4f65039bbfc3b0b15bfe1f))\n* **payment:** PAYPAL-2618 updated payment payload ([46e375b](https://github.com/bigcommerce/checkout-sdk-js/commit/46e375b02e034d805774a85d92cd78f3ddf1247a))\n\n## [1.388.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.387.0...v1.388.0) (2023-06-13)\n\n\n### Features\n\n* **checkout:** PI-42 bluesnap direct credit card vaulting ([8c4de76](https://github.com/bigcommerce/checkout-sdk-js/commit/8c4de76df61dcc0e72365629ae5dbad15ce24031))\n\n## [1.387.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.386.1...v1.387.0) (2023-06-13)\n\n\n### Features\n\n* **payment:** PAYPAL-2449 fixed preloader ([#2015](https://github.com/bigcommerce/checkout-sdk-js/issues/2015)) ([8b1d202](https://github.com/bigcommerce/checkout-sdk-js/commit/8b1d202b9753728ad9dd5de5e82ddb6b735aac20))\n\n### [1.386.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.386.0...v1.386.1) (2023-06-12)\n\n\n### Bug Fixes\n\n* **payment:** INT-7650 retrieve payment intent if an error is caught at the time of confirming the payment ([c0bd053](https://github.com/bigcommerce/checkout-sdk-js/commit/c0bd0538a5ec22d6a46b64149700caa6b89acb21))\n\n## [1.386.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.385.0...v1.386.0) (2023-06-07)\n\n\n### Features\n\n* **payment:** PAYPAL-2451 ACH vaulting ([#1990](https://github.com/bigcommerce/checkout-sdk-js/issues/1990)) ([7dc4660](https://github.com/bigcommerce/checkout-sdk-js/commit/7dc4660f77b71dd22221c5fc5d427920b488e3ad))\n\n## [1.385.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.384.1...v1.385.0) (2023-06-07)\n\n\n### Features\n\n* **payment:** PI-88 [Adyen] Klarna widget update ([898c88e](https://github.com/bigcommerce/checkout-sdk-js/commit/898c88ecc3e84faead6102c22e8c41515fb3bb7b))\n\n### [1.384.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.384.0...v1.384.1) (2023-06-07)\n\n## [1.384.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.383.2...v1.384.0) (2023-06-07)\n\n\n### Features\n\n* **payment:** PAYPAL-2449 added braintree-local-methods payment startegy ([#2006](https://github.com/bigcommerce/checkout-sdk-js/issues/2006)) ([4f67f0b](https://github.com/bigcommerce/checkout-sdk-js/commit/4f67f0bbea9956cbd04660ea8a33f83223235c02))\n\n### [1.383.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.383.1...v1.383.2) (2023-06-06)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-7498 Update registry key as a combination ([#2005](https://github.com/bigcommerce/checkout-sdk-js/issues/2005)) ([b4d203e](https://github.com/bigcommerce/checkout-sdk-js/commit/b4d203e704c4dac4e91bdd5c7989c42a32319eaa))\n\n### [1.383.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.383.0...v1.383.1) (2023-06-02)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2575 fixed the issue with PayPalCommerceVenmo button eligibility ([#2007](https://github.com/bigcommerce/checkout-sdk-js/issues/2007)) ([9c135ea](https://github.com/bigcommerce/checkout-sdk-js/commit/9c135eae74882ab61fa4ab1882bde6e9937f1da8))\n\n## [1.383.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.382.1...v1.383.0) (2023-06-02)\n\n\n### Features\n\n* **payment:** PAYPAL-2560 internalLabel ([ef99560](https://github.com/bigcommerce/checkout-sdk-js/commit/ef99560b92775783b3a2379c28f71a4c232fce43))\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2552 removed unnecessary code ([a733414](https://github.com/bigcommerce/checkout-sdk-js/commit/a733414b4c3df998b9af303d95166e58d21c2522))\n\n### [1.382.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.382.0...v1.382.1) (2023-05-31)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2451 renaming ([57a1c60](https://github.com/bigcommerce/checkout-sdk-js/commit/57a1c603da722e5a0f99d7d7e3e6a25908ced566))\n\n## [1.382.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.381.4...v1.382.0) (2023-05-29)\n\n\n### Features\n\n* **payment:** PAYPAL-2451 fixed an instrument ([10ae303](https://github.com/bigcommerce/checkout-sdk-js/commit/10ae30323f3efc5e946e5ca8c1164fa6c2e6e355))\n\n### [1.381.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.381.3...v1.381.4) (2023-05-24)\n\n\n### Bug Fixes\n\n* **checkout:** PI-101 3ds2 redirect flow for the adyen v3 ([6615f3a](https://github.com/bigcommerce/checkout-sdk-js/commit/6615f3ac539521f624418db77a98c64e8489fbe8))\n\n### [1.381.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.381.2...v1.381.3) (2023-05-22)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2451 braintree ach instrument ([7ba679e](https://github.com/bigcommerce/checkout-sdk-js/commit/7ba679ea18c4a05f5899b0bc8518ec6c03855854))\n\n### [1.381.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.381.1...v1.381.2) (2023-05-22)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-0000 fixed the issue with PPCP APMs interfaces generation by updating names of the interfaces ([#1985](https://github.com/bigcommerce/checkout-sdk-js/issues/1985)) ([17854d4](https://github.com/bigcommerce/checkout-sdk-js/commit/17854d47200282eecfdf64fc891578841e658fec))\n\n### [1.381.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.381.0...v1.381.1) (2023-05-18)\n\n\n### Bug Fixes\n\n* **payment:** BOLT-577 Bolt initialization error on customer step ([0be07d0](https://github.com/bigcommerce/checkout-sdk-js/commit/0be07d0eda509d15199fad5aa1a30f13e5f6361d))\n\n## [1.381.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.380.1...v1.381.0) (2023-05-16)\n\n\n### Features\n\n* **payment:** INT-7573 Create Access Worldpay GooglePay strategy ([#1966](https://github.com/bigcommerce/checkout-sdk-js/issues/1966)) ([e5134f4](https://github.com/bigcommerce/checkout-sdk-js/commit/e5134f48df85706fa7c7e56f6297c23d803356ef))\n\n\n### Bug Fixes\n\n* **payment:** BOLT-577 Bolt initialization error on customer step ([404bde5](https://github.com/bigcommerce/checkout-sdk-js/commit/404bde535861fd7d4d6945591e2b07208194d182))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2414 added PayPalCommerceIntegrationService method creation ([#1970](https://github.com/bigcommerce/checkout-sdk-js/issues/1970)) ([2130c3e](https://github.com/bigcommerce/checkout-sdk-js/commit/2130c3e474210c4b580a8ea808d38bea55348cec))\n\n### [1.380.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.380.0...v1.380.1) (2023-05-12)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2370 updated incoming parameters for ACH ([#1973](https://github.com/bigcommerce/checkout-sdk-js/issues/1973)) ([74d17be](https://github.com/bigcommerce/checkout-sdk-js/commit/74d17be3cb24e197a5d1aeedb19add98041ccc19))\n\n## [1.380.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.379.0...v1.380.0) (2023-05-11)\n\n\n### Features\n\n* **payment:** INT-7516 SquareV2: Throw a `PaymentExecuteError` if tokenization fails ([#1971](https://github.com/bigcommerce/checkout-sdk-js/issues/1971)) ([663f8b7](https://github.com/bigcommerce/checkout-sdk-js/commit/663f8b7bad8d9b7497af5e38853fee44960154e5))\n\n## [1.379.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.378.0...v1.379.0) (2023-05-08)\n\n\n### Features\n\n* **payment:** PAYPAL-1713 braintree ach strategy ([#1891](https://github.com/bigcommerce/checkout-sdk-js/issues/1891)) ([9f262be](https://github.com/bigcommerce/checkout-sdk-js/commit/9f262bef7290709c6f522465ab7bca54f9bfe2c8))\n\n## [1.378.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.377.0...v1.378.0) (2023-05-08)\n\n\n### Features\n\n* **payment:** BOLT-484 Add styling for Bolt Button on PDP ([7837d94](https://github.com/bigcommerce/checkout-sdk-js/commit/7837d9435dac0c7e0d4d075b7fb0b67477f3027f))\n* **payment:** BOLT-484 Add styling for Bolt Button on PDP ([6ead002](https://github.com/bigcommerce/checkout-sdk-js/commit/6ead002167a27552502ca3001df5437ab6222542))\n\n## [1.377.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.376.1...v1.377.0) (2023-05-02)\n\n\n### Features\n\n* **payment:** INT-7173 BlueSnapDirect: Create payment strategy for ACH/ECP ([756a4c6](https://github.com/bigcommerce/checkout-sdk-js/commit/756a4c6956aac9586e82a0a3bb7c07930c35e44b))\n* **payment:** PAYPAL-2013 added enable-funding to properly display paylater button ([#1958](https://github.com/bigcommerce/checkout-sdk-js/issues/1958)) ([ad4d9ee](https://github.com/bigcommerce/checkout-sdk-js/commit/ad4d9ee939bfa72068b9e018435fecfa6a940d56))\n\n\n### Bug Fixes\n\n* **payment:** INT-7173 BlueSnapDirect: Revert [#1917](https://github.com/bigcommerce/checkout-sdk-js/issues/1917) ([b9dd694](https://github.com/bigcommerce/checkout-sdk-js/commit/b9dd6947e899d5a5d563279795450f6969750bb9))\n\n### [1.376.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.376.0...v1.376.1) (2023-04-27)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-2036 added shippingAddressEditable option to Braintree payment configuration ([#1962](https://github.com/bigcommerce/checkout-sdk-js/issues/1962)) ([98c189a](https://github.com/bigcommerce/checkout-sdk-js/commit/98c189a05d1802dd02a75e6751f92bda1a644d57))\n\n## [1.376.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.375.0...v1.376.0) (2023-04-26)\n\n\n### Features\n\n* **payment:** BOLT-458 Move Bolt customer strategy to new Bolt package ([f8508d9](https://github.com/bigcommerce/checkout-sdk-js/commit/f8508d9366714d1b1bc7078335f78d1b4254b0fe))\n\n## [1.375.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.374.8...v1.375.0) (2023-04-26)\n\n\n### Features\n\n* **payment:** INT-7557 BlueSnapDirect: Implement 3DS 2 ([#1925](https://github.com/bigcommerce/checkout-sdk-js/issues/1925)) ([6574134](https://github.com/bigcommerce/checkout-sdk-js/commit/6574134019c07124191633adf469859f987a521e))\n\n### [1.374.8](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.374.7...v1.374.8) (2023-04-25)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1895 removed paypal commerce code from core package ([#1960](https://github.com/bigcommerce/checkout-sdk-js/issues/1960)) ([87cfdc4](https://github.com/bigcommerce/checkout-sdk-js/commit/87cfdc4754be9e52fdf06afc7257e3601c3cf664))\n\n### [1.374.7](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.374.6...v1.374.7) (2023-04-25)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2365 added PayPalCommerceVenmo payment strategy to paypal-commerce-integration package ([#1955](https://github.com/bigcommerce/checkout-sdk-js/issues/1955)) ([abf339a](https://github.com/bigcommerce/checkout-sdk-js/commit/abf339a619b137a4e34e32f1e164bde9d05c48d1))\n\n### [1.374.6](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.374.5...v1.374.6) (2023-04-24)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-000 updated PayPalCommercePaymentInitializeOptions.md file due to last changes ([#1954](https://github.com/bigcommerce/checkout-sdk-js/issues/1954)) ([d0a59bf](https://github.com/bigcommerce/checkout-sdk-js/commit/d0a59bf99e6a2395543e4bc0d20f74cb72383f29))\n\n### [1.374.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.374.4...v1.374.5) (2023-04-24)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2366 added PayPalCommerceCredit payment strategy to paypal-commerce-integration package ([#1953](https://github.com/bigcommerce/checkout-sdk-js/issues/1953)) ([7729bd8](https://github.com/bigcommerce/checkout-sdk-js/commit/7729bd8aa9ea655a16f6e9b3e9195c434e3bc301))\n\n### [1.374.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.374.3...v1.374.4) (2023-04-24)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2367 added PayPalCommercePaymentStrategy to paypal-commerce-integration package ([#1947](https://github.com/bigcommerce/checkout-sdk-js/issues/1947)) ([50644be](https://github.com/bigcommerce/checkout-sdk-js/commit/50644beb0a8b115dfb543528a747ce6e93de389b))\n\n### [1.374.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.374.2...v1.374.3) (2023-04-24)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1894 added PayPalCommerceAlternativeMethodsPaymentStrategy to paypal-commerce-integration package ([#1941](https://github.com/bigcommerce/checkout-sdk-js/issues/1941)) ([b242527](https://github.com/bigcommerce/checkout-sdk-js/commit/b2425270818cc011e53868b5b4f331f931888e7a))\n\n### [1.374.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.374.1...v1.374.2) (2023-04-18)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-7381 Update resolver mechanism ([#1946](https://github.com/bigcommerce/checkout-sdk-js/issues/1946)) ([3e65f82](https://github.com/bigcommerce/checkout-sdk-js/commit/3e65f824585ee50d8298d079a6898c5b39c12419))\n\n### [1.374.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.374.0...v1.374.1) (2023-04-14)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-0000 added export for getBillingAddress method in payment-integration-test-utils ([#1949](https://github.com/bigcommerce/checkout-sdk-js/issues/1949)) ([5d3c189](https://github.com/bigcommerce/checkout-sdk-js/commit/5d3c1893c4d12b1644e75ac2ba1a828ce7daaac2))\n\n## [1.374.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.373.0...v1.374.0) (2023-04-13)\n\n\n### Features\n\n* **payment:** PAYPAL-2050 fixed google pay button for safari and mozilla ([#1928](https://github.com/bigcommerce/checkout-sdk-js/issues/1928)) ([94ea76e](https://github.com/bigcommerce/checkout-sdk-js/commit/94ea76e9abcfd04e29aa31e7004018830177155d))\n\n## [1.373.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.372.0...v1.373.0) (2023-04-13)\n\n\n### Features\n\n* **checkout:** ADYEN-775 update of intialization interface for Adyenv3 ([aff778f](https://github.com/bigcommerce/checkout-sdk-js/commit/aff778fa6afc3ea99ac7247470c71906b71dc5c1))\n\n## [1.372.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.371.5...v1.372.0) (2023-04-13)\n\n\n### Features\n\n* **payment:** PAYPAL-2195 added buttonClassName ([#1943](https://github.com/bigcommerce/checkout-sdk-js/issues/1943)) ([f04c277](https://github.com/bigcommerce/checkout-sdk-js/commit/f04c277b29d21968313232edce2631d438cb319c))\n\n### [1.371.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.371.4...v1.371.5) (2023-04-11)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-000 added billing address mock to payment-integrations-test-utils package ([#1945](https://github.com/bigcommerce/checkout-sdk-js/issues/1945)) ([734b348](https://github.com/bigcommerce/checkout-sdk-js/commit/734b34846bb434737e8a11eadc294b39b562a71d))\n* **payment:** PAYPAL-000 added timeout error to payment-integration-api package ([#1942](https://github.com/bigcommerce/checkout-sdk-js/issues/1942)) ([6c2f1dd](https://github.com/bigcommerce/checkout-sdk-js/commit/6c2f1ddd9f946e61e65b4c80c139d071e7ba9188))\n\n### [1.371.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.371.3...v1.371.4) (2023-04-04)\n\n### [1.371.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.371.2...v1.371.3) (2023-04-04)\n\n### [1.371.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.371.1...v1.371.2) (2023-03-30)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-000 added paypal commerce integration service mock to simplify test files ([#1926](https://github.com/bigcommerce/checkout-sdk-js/issues/1926)) ([b9265af](https://github.com/bigcommerce/checkout-sdk-js/commit/b9265af8e6b2efd16c8b8022fba63c09cb54eeeb))\n\n### [1.371.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.371.0...v1.371.1) (2023-03-28)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-2078 removed PayPalCommerceInlineCheckoutButtonStrategy ([#1922](https://github.com/bigcommerce/checkout-sdk-js/issues/1922)) ([7d586db](https://github.com/bigcommerce/checkout-sdk-js/commit/7d586db8f65cba45419cb7c29350084fc3963a15))\n\n## [1.371.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.370.0...v1.371.0) (2023-03-27)\n\n\n### Features\n\n* **payment:** PAYPAL-2004 added ability to change style for amazonpay button ([#1914](https://github.com/bigcommerce/checkout-sdk-js/issues/1914)) ([3019104](https://github.com/bigcommerce/checkout-sdk-js/commit/30191047cbc9719664680a375ce026123ab18328))\n\n## [1.370.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.369.2...v1.370.0) (2023-03-27)\n\n\n### Features\n\n* **payment:** BOLT-483 Create Bolt button strategy ([ace611f](https://github.com/bigcommerce/checkout-sdk-js/commit/ace611fb0370b555d4a8deb428f1309bd8120cbb))\n\n### [1.369.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.369.1...v1.369.2) (2023-03-23)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-000 removed useless utils method from paypal-commerce-integration package ([#1911](https://github.com/bigcommerce/checkout-sdk-js/issues/1911)) ([7159071](https://github.com/bigcommerce/checkout-sdk-js/commit/7159071fc3d998a21ceae25970c7136a9ac86f59))\n* **payment:** PAYPAL-1893 removed PayPalCommerceCreditCards related code from core package ([#1910](https://github.com/bigcommerce/checkout-sdk-js/issues/1910)) ([a3fb70e](https://github.com/bigcommerce/checkout-sdk-js/commit/a3fb70e11dec18b498c7239b0d64003effae4601))\n\n### [1.369.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.369.0...v1.369.1) (2023-03-23)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1893 added PayPalCommerceCreditCardsPaymentStrategy to paypal-commerce-integration package ([#1887](https://github.com/bigcommerce/checkout-sdk-js/issues/1887)) ([329676f](https://github.com/bigcommerce/checkout-sdk-js/commit/329676f996de5b3784f8fce5a70386319878a37b))\n\n## [1.369.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.368.0...v1.369.0) (2023-03-22)\n\n\n### Features\n\n* **payment:** PAYPAL-000 added isCreditCardFormFields typeguard instead of isStoredCreditCardFormFields ([#1909](https://github.com/bigcommerce/checkout-sdk-js/issues/1909)) ([d30187d](https://github.com/bigcommerce/checkout-sdk-js/commit/d30187d2deb3eb9dc5c62386751a956035e57308))\n\n## [1.368.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.367.2...v1.368.0) (2023-03-21)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7250 Add floatingLabelEnabled UXsetting ([#1912](https://github.com/bigcommerce/checkout-sdk-js/issues/1912)) ([120253b](https://github.com/bigcommerce/checkout-sdk-js/commit/120253ba17f4fda5b95f12d8334f8ced25878a5d))\n\n### [1.367.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.367.1...v1.367.2) (2023-03-21)\n\n\n### Bug Fixes\n\n* **payment:** INT-7044 BlueSnapDirect: Change identifier for credit card ([#1917](https://github.com/bigcommerce/checkout-sdk-js/issues/1917)) ([214928f](https://github.com/bigcommerce/checkout-sdk-js/commit/214928f846012000ab6bc11e425ab17d6807d2bf))\n\n### [1.367.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.367.0...v1.367.1) (2023-03-21)\n\n\n### Bug Fixes\n\n* **payment:** ADYEN-733 fix ideal validation issue for adyenv2/v3 ([6458a84](https://github.com/bigcommerce/checkout-sdk-js/commit/6458a840ce66aa4574576b6d3a34400af714ddfc))\n\n## [1.367.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.366.0...v1.367.0) (2023-03-20)\n\n\n### Features\n\n* **payment:** PAYPAL-2006 Created paypal-express-integration Checkout sdk package ([#1882](https://github.com/bigcommerce/checkout-sdk-js/issues/1882)) ([e850965](https://github.com/bigcommerce/checkout-sdk-js/commit/e8509657f7e61f46c7eedd9db3aca50c0c10e6ba))\n\n## [1.366.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.365.1...v1.366.0) (2023-03-20)\n\n\n### Features\n\n* **payment:** PAYPAL-1906 Create braintree checkout-sdk package ([0d523df](https://github.com/bigcommerce/checkout-sdk-js/commit/0d523df55949cf666b400ef0d54fbfca69de1cef))\n\n### [1.365.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.365.0...v1.365.1) (2023-03-20)\n\n\n### Code Refactoring\n\n* **payment:** BOLT-000 add generic type for getPaymentMethod ([e9b03e2](https://github.com/bigcommerce/checkout-sdk-js/commit/e9b03e2af6bf13b3901f10c7b93f1e1a01d0c405))\n\n## [1.365.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.364.2...v1.365.0) (2023-03-20)\n\n\n### Features\n\n* **payment:** INT-7044 BlueSnapDirect: Add payment strategy for credit card ([#1811](https://github.com/bigcommerce/checkout-sdk-js/issues/1811)) ([90fbd9f](https://github.com/bigcommerce/checkout-sdk-js/commit/90fbd9fb2ead83ddf592ad91540dac62f56c8d5c))\n\n### [1.364.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.364.1...v1.364.2) (2023-03-15)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-000 Fix exported type ([#1904](https://github.com/bigcommerce/checkout-sdk-js/issues/1904)) ([05e6ff1](https://github.com/bigcommerce/checkout-sdk-js/commit/05e6ff1b8679e0e2e122d77e7b32e304963082ca))\n\n### [1.364.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.364.0...v1.364.1) (2023-03-15)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-000 Expose hosted form error to exported typings ([#1903](https://github.com/bigcommerce/checkout-sdk-js/issues/1903)) ([4c691c6](https://github.com/bigcommerce/checkout-sdk-js/commit/4c691c6e7fee04390912e8a2fda2782479707a1b))\n\n## [1.364.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.363.0...v1.364.0) (2023-03-14)\n\n\n### Features\n\n* **payment:** PAYPAL-000 added isStoredCreditCardFormFields typeguard to payment-integration-api package ([#1894](https://github.com/bigcommerce/checkout-sdk-js/issues/1894)) ([7f4bb36](https://github.com/bigcommerce/checkout-sdk-js/commit/7f4bb36e9ff53a681c9dacbf02903ce9916f03d0))\n* **payment:** PAYPAL-000 added objectWithKebabKeys utility function to payment-integration-api package ([#1893](https://github.com/bigcommerce/checkout-sdk-js/issues/1893)) ([1b76f0b](https://github.com/bigcommerce/checkout-sdk-js/commit/1b76f0bfe8fe4c2055d26cdf78b5029b6bec0083))\n* **payment:** PAYPAL-1962 fixed paypal venmo button ([#1899](https://github.com/bigcommerce/checkout-sdk-js/issues/1899)) ([c9f2886](https://github.com/bigcommerce/checkout-sdk-js/commit/c9f28861e01631b73f5bab6ef7d30754ae22df5c))\n\n## [1.363.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.362.0...v1.363.0) (2023-03-13)\n\n\n### Features\n\n* **payment:** BOLT-409 Create Bolt package in checkout-sdk-js ([ceead0b](https://github.com/bigcommerce/checkout-sdk-js/commit/ceead0b8df66c84f132c109514cf209e9e13f8fd))\n\n## [1.362.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.361.1...v1.362.0) (2023-03-10)\n\n\n### Features\n\n* **payment:** PAYPAL-000 added HostedForm exports to payment-integration-api index file ([#1892](https://github.com/bigcommerce/checkout-sdk-js/issues/1892)) ([aa1ca1d](https://github.com/bigcommerce/checkout-sdk-js/commit/aa1ca1da41c7ef972745ee6ad019b74b0d2ea0aa))\n\n### [1.361.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.361.0...v1.361.1) (2023-03-09)\n\n\n### Bug Fixes\n\n* **payment:** INT-7463 Fixed problem with cards vaulted with 3ds in the hosted form flow ([7a82aeb](https://github.com/bigcommerce/checkout-sdk-js/commit/7a82aebda22b3d8776b4d121cf48fbd90da1d465))\n\n## [1.361.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.360.0...v1.361.0) (2023-03-07)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7313 Introduce wallet button support selectors ([#1886](https://github.com/bigcommerce/checkout-sdk-js/issues/1886)) ([086298c](https://github.com/bigcommerce/checkout-sdk-js/commit/086298c345280bca532d3f1ec8258bb8a9c1792f))\n\n## [1.360.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.359.0...v1.360.0) (2023-03-06)\n\n\n### Features\n\n* **payment:** PAYMENTS-8527 expose interface for real time host form filed validation for braintree ([44f8012](https://github.com/bigcommerce/checkout-sdk-js/commit/44f8012afd85a81e0066aad3c9898724a867439e))\n\n\n### Code Refactoring\n\n* **common:** PAYMENTS-8527 add braintree error data interface based on pr comment ([5950a8f](https://github.com/bigcommerce/checkout-sdk-js/commit/5950a8ffe30d0af7d1d89185122c486a8ee0afff))\n\n## [1.359.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.358.1...v1.359.0) (2023-02-28)\n\n\n### Features\n\n* **payment:** PAYPAL-1985 added loadDefaultCheckout onCanclel to avoid potential errors ([#1873](https://github.com/bigcommerce/checkout-sdk-js/issues/1873)) ([3902e74](https://github.com/bigcommerce/checkout-sdk-js/commit/3902e74f8f1db6df5309cb4e3523eea7f6a521d5))\n\n### [1.358.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.358.0...v1.358.1) (2023-02-27)\n\n\n### Bug Fixes\n\n* **shipping:** STRIPE-202 Split name input into First and Last name ([#1675](https://github.com/bigcommerce/checkout-sdk-js/issues/1675)) ([1b920a1](https://github.com/bigcommerce/checkout-sdk-js/commit/1b920a18cc816ccca318611e7e968a5281664560))\n\n## [1.358.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.357.1...v1.358.0) (2023-02-27)\n\n\n### Features\n\n* **payment:** INT-6312 klarnav2 increase code coverage ([0ce8c7f](https://github.com/bigcommerce/checkout-sdk-js/commit/0ce8c7fa99ae14a51e28d81be2588da57b163e58))\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-7304 Change PayPal wallet buttons height ([#1878](https://github.com/bigcommerce/checkout-sdk-js/issues/1878)) ([4089b00](https://github.com/bigcommerce/checkout-sdk-js/commit/4089b0088bb34d452866febc9f2d91f5a3a9bd8e))\n\n### [1.357.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.357.0...v1.357.1) (2023-02-23)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-1991 fixed GooglePay for adyenV2 and adyenV3 ([#1863](https://github.com/bigcommerce/checkout-sdk-js/issues/1863)) ([c89471d](https://github.com/bigcommerce/checkout-sdk-js/commit/c89471d858ae2e4025913a83689bc28e76141df8))\n* **payment:** PAYPAL-1992 fixed GooglePay for BNZ ([#1864](https://github.com/bigcommerce/checkout-sdk-js/issues/1864)) ([f6d87f3](https://github.com/bigcommerce/checkout-sdk-js/commit/f6d87f3b86ee244720a51ef01d3a7f700c373bf4))\n* **payment:** PAYPAL-1995 fixed GooglePay for Authorize Net ([afdfb09](https://github.com/bigcommerce/checkout-sdk-js/commit/afdfb09aa40c3df91ace416b6f292f2bc1d73ad1))\n* **payment:** PAYPAL-1996 fixed GooglePay for CheckoutCom ([f978dfb](https://github.com/bigcommerce/checkout-sdk-js/commit/f978dfba00c519cbcf7660e384f910ad16c1b11e))\n\n## [1.357.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.356.0...v1.357.0) (2023-02-23)\n\n\n### Features\n\n* **payment:** BOLT-469 move AnalyticsTrackerWindow to analytics package ([3cccf14](https://github.com/bigcommerce/checkout-sdk-js/commit/3cccf14eaa451c34bd328c2753a30120566f27ed))\n* **payment:** BOLT-469 move AnalyticsTrackerWindow to analytics package ([cba87f8](https://github.com/bigcommerce/checkout-sdk-js/commit/cba87f808fbc605d4c4b97ea32ea7b957876546b))\n\n## [1.356.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.355.0...v1.356.0) (2023-02-23)\n\n\n### Features\n\n* **payment:** PAYPAL-1999 make Stripe Google Pay compatible with BuyNow cart ([#1870](https://github.com/bigcommerce/checkout-sdk-js/issues/1870)) ([043bc85](https://github.com/bigcommerce/checkout-sdk-js/commit/043bc85d9ab635f19ec430cd34ac5f2173a0bb43))\n\n## [1.355.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.354.0...v1.355.0) (2023-02-23)\n\n\n### Features\n\n* **payment:** PAYPAL-1998 make Orbital Google Pay compatible with Buy Now cart ([#1867](https://github.com/bigcommerce/checkout-sdk-js/issues/1867)) ([f66b3cd](https://github.com/bigcommerce/checkout-sdk-js/commit/f66b3cd6bb76b0f4f8d6ec963f5e7325d254cd16))\n\n## [1.354.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.353.1...v1.354.0) (2023-02-23)\n\n\n### Features\n\n* **payment:** PAYPAL-1997 make CyberSourceV2 Google Pay compatible with Buy Now cart ([#1862](https://github.com/bigcommerce/checkout-sdk-js/issues/1862)) ([b4e33e9](https://github.com/bigcommerce/checkout-sdk-js/commit/b4e33e966b1b260e5f68bed23df2ee0c03ff36a4))\n\n### [1.353.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.353.0...v1.353.1) (2023-02-23)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-1993 make StripeUPE  Google Pay compatible with Buy Now cart ([#1869](https://github.com/bigcommerce/checkout-sdk-js/issues/1869)) ([bc55b0a](https://github.com/bigcommerce/checkout-sdk-js/commit/bc55b0ab8389041567c3aad605873667f25437a5))\n\n## [1.353.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.352.0...v1.353.0) (2023-02-22)\n\n\n### Features\n\n* **payment:** BOLT-470 move LegacyAddress to payment-integration-package package ([d1677dc](https://github.com/bigcommerce/checkout-sdk-js/commit/d1677dce5d548fd876a2d507e58f35da8a07daaf))\n* **payment:** BOLT-470 move LegacyAddress to payment-integration-package package ([f92f5fe](https://github.com/bigcommerce/checkout-sdk-js/commit/f92f5fe3a697e91e2ba6fab56c0b4b7ea90743e3))\n\n## [1.352.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.351.0...v1.352.0) (2023-02-21)\n\n\n### Features\n\n* **payment:** BOLT-465 move AnalyticsExtraItemsManager to payment-integration-api package ([65450ad](https://github.com/bigcommerce/checkout-sdk-js/commit/65450ad814979e791a1761d94652f92d96c010d1))\n\n## [1.351.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.350.1...v1.351.0) (2023-02-20)\n\n\n### Features\n\n* **payment:** PAYMENTS-8493 add untrusted shipping address card verification mode to card instrument ([1990998](https://github.com/bigcommerce/checkout-sdk-js/commit/199099807c49640fa6ab5cf6f90cd8ae0a92530e))\n\n### [1.350.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.350.0...v1.350.1) (2023-02-20)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1971 removed initializesOnCheckout page property from PayPalCommerce initialize button options ([#1859](https://github.com/bigcommerce/checkout-sdk-js/issues/1859)) ([bdcf195](https://github.com/bigcommerce/checkout-sdk-js/commit/bdcf1952d194b261447e46cfbcf09b1b824c615f))\n* **payment:** PAYPAL-1983 removed layout and tagline styles property from PayPalCommerceButtons config ([#1858](https://github.com/bigcommerce/checkout-sdk-js/issues/1858)) ([5a1a2fd](https://github.com/bigcommerce/checkout-sdk-js/commit/5a1a2fdb5515e5a8dc1c34015b04e5c36dc72d48))\n\n## [1.350.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.349.0...v1.350.0) (2023-02-20)\n\n\n### Features\n\n* **payment:** BOLT-463 add applyStoreCredit to PaymentIntegrationService ([52ece0e](https://github.com/bigcommerce/checkout-sdk-js/commit/52ece0e42ad669af2667cd467d59bb77e1e79962))\n\n## [1.349.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.348.6...v1.349.0) (2023-02-20)\n\n\n### Features\n\n* **payment:** BOLT-462 move PaymentMethodInvalidError to paymant-integration-api package ([cde7a55](https://github.com/bigcommerce/checkout-sdk-js/commit/cde7a55c171149504e71d0c8177308cf9b7d446a))\n\n### [1.348.6](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.348.5...v1.348.6) (2023-02-17)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1979 updated PayPalCommerceCreditButtonStrategy with PayPalCommerceIntegrationService ([#1856](https://github.com/bigcommerce/checkout-sdk-js/issues/1856)) ([694d2c2](https://github.com/bigcommerce/checkout-sdk-js/commit/694d2c214f99a65b4f0a41dcb24c31736d90b2f8))\n\n### [1.348.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.348.4...v1.348.5) (2023-02-17)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1980 updated PayPalCommerceCreditCustomer strategy with PayPalCommerceIntegrationService ([#1855](https://github.com/bigcommerce/checkout-sdk-js/issues/1855)) ([35fccff](https://github.com/bigcommerce/checkout-sdk-js/commit/35fccff3e4567278013f9648cdafcdf98e861695))\n\n### [1.348.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.348.3...v1.348.4) (2023-02-16)\n\n\n### Bug Fixes\n\n* **checkout:** ADYEN-588 update payment data request on wallet button click googlepay ([7e1b0af](https://github.com/bigcommerce/checkout-sdk-js/commit/7e1b0af92e448b9d439a15fc1c0a1b3a759f41b8))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1981 updated PayPalCommerceVenmoButtonStrategy with PayPalCommerceIntegrationService ([#1851](https://github.com/bigcommerce/checkout-sdk-js/issues/1851)) ([af741dc](https://github.com/bigcommerce/checkout-sdk-js/commit/af741dc3b87b06b952b93f3a1ec551527088d675))\n\n### [1.348.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.348.2...v1.348.3) (2023-02-16)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1982 updated PayPalCommerceVenmoCustomerStrategy with PayPalCommerceIntegrationService ([#1850](https://github.com/bigcommerce/checkout-sdk-js/issues/1850)) ([27797cb](https://github.com/bigcommerce/checkout-sdk-js/commit/27797cb9fa994f648754f4f0b1cb40e6197274dd))\n\n### [1.348.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.348.1...v1.348.2) (2023-02-16)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1978 updated PayPalCommerceAlternativeMethodsButtonStrategy with PayPalCommerceIntegrationService ([#1849](https://github.com/bigcommerce/checkout-sdk-js/issues/1849)) ([48aaa1d](https://github.com/bigcommerce/checkout-sdk-js/commit/48aaa1df4cdae9e2a0cf9be45a9aa84c57fc10d6))\n\n### [1.348.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.348.0...v1.348.1) (2023-02-16)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1973 updated PayPalCommerceCustomerStrategy with PayPalCommerceIntegrationService ([#1845](https://github.com/bigcommerce/checkout-sdk-js/issues/1845)) ([13d526b](https://github.com/bigcommerce/checkout-sdk-js/commit/13d526b82450ba7e089c024fd5f5cedf471d55b0))\n\n## [1.348.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.347.0...v1.348.0) (2023-02-15)\n\n\n### Features\n\n* **payment:** BOLT-459 move ErrorResponseBody to paymant-integration-api package ([de7fbd7](https://github.com/bigcommerce/checkout-sdk-js/commit/de7fbd71e9df0d6cfa02fe1c7e41dd3f3010abbc))\n\n## [1.347.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.346.0...v1.347.0) (2023-02-15)\n\n\n### Features\n\n* **payment:** PAYPAL-1919 added PayPalCommerceCommon class with utils methods inside for paypal-commerce-integration package ([#1838](https://github.com/bigcommerce/checkout-sdk-js/issues/1838)) ([964b0c3](https://github.com/bigcommerce/checkout-sdk-js/commit/964b0c37b2fa2af13e0b1b6b1273012e37f665b3))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1919 replaced PayPalCommerceCommon name with PayPalCommerceIntegrationService ([#1842](https://github.com/bigcommerce/checkout-sdk-js/issues/1842)) ([b9e5a0f](https://github.com/bigcommerce/checkout-sdk-js/commit/b9e5a0f6a5f6a370dff42e0e1ffdb0791805941a))\n\n## [1.346.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.345.1...v1.346.0) (2023-02-14)\n\n\n### Features\n\n* **payment:** STRIPE-200 add stripe phone field ([#1681](https://github.com/bigcommerce/checkout-sdk-js/issues/1681)) ([eabb2f3](https://github.com/bigcommerce/checkout-sdk-js/commit/eabb2f3faa02be36dc9beac5f4df3ee6bbedbca2))\n\n### [1.345.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.345.0...v1.345.1) (2023-02-13)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-0000 Remove ApplePay button style ([#1836](https://github.com/bigcommerce/checkout-sdk-js/issues/1836)) ([185b35a](https://github.com/bigcommerce/checkout-sdk-js/commit/185b35a9d8a92d40a40affac9796cb572be50f65))\n\n## [1.345.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.344.0...v1.345.0) (2023-02-13)\n\n\n### Features\n\n* **payment:** PAYPAL-1837 Create paypalcommercecredit customer button strategy ([db2d919](https://github.com/bigcommerce/checkout-sdk-js/commit/db2d919fec2b73505bb797db9951a13522ee4f1b))\n\n## [1.344.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.343.0...v1.344.0) (2023-02-13)\n\n\n### Features\n\n* **payment:** PAYPAL-1838 Create paypalcommercevenmo customer button strategy ([f170b1c](https://github.com/bigcommerce/checkout-sdk-js/commit/f170b1c7d5aefd318ef82b5e63b6cfde4bb29ebd))\n* **payment:** PAYPAL-1838 Create paypalcommercevenmo customer button strategy ([7c7eec7](https://github.com/bigcommerce/checkout-sdk-js/commit/7c7eec75576ce419e2f594b1d2a4366d4dce44b0))\n\n## [1.343.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.342.0...v1.343.0) (2023-02-10)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7231 Add getUserExperienceSettings selector ([#1834](https://github.com/bigcommerce/checkout-sdk-js/issues/1834)) ([c204427](https://github.com/bigcommerce/checkout-sdk-js/commit/c204427487409b4cb0848da7b228d2749bed6fd5))\n\n## [1.342.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.341.0...v1.342.0) (2023-02-09)\n\n\n### Features\n\n* **payment:** INT-7044 BlueSnapDirect: Pass options to `loadPaymentMethod` ([#1810](https://github.com/bigcommerce/checkout-sdk-js/issues/1810)) ([4bf09ff](https://github.com/bigcommerce/checkout-sdk-js/commit/4bf09ffa34003283678fc4e80d27648976547e67))\n\n## [1.341.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.340.0...v1.341.0) (2023-02-09)\n\n\n### Features\n\n* **payment:** PAYPAL-1634 added ability for applepay spb to work with buyNowCart on PDP ([#1809](https://github.com/bigcommerce/checkout-sdk-js/issues/1809)) ([0490606](https://github.com/bigcommerce/checkout-sdk-js/commit/049060659cb6bcf380177343697420b85767abf6))\n\n## [1.340.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.339.0...v1.340.0) (2023-02-09)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7231 Update checkoutUserExperienceSettings ([#1831](https://github.com/bigcommerce/checkout-sdk-js/issues/1831)) ([24d6f87](https://github.com/bigcommerce/checkout-sdk-js/commit/24d6f87a6bfe64eaefbf7384eb5009dc71399b5c))\n\n## [1.339.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.338.0...v1.339.0) (2023-02-09)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7231 Add checkoutUXSettings to interface ([#1825](https://github.com/bigcommerce/checkout-sdk-js/issues/1825)) ([5191b61](https://github.com/bigcommerce/checkout-sdk-js/commit/5191b61d7aa8d0e8dbe10f28fa190c39f5a3a5cd))\n\n## [1.338.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.337.0...v1.338.0) (2023-02-08)\n\n\n### Features\n\n* **payment:** PAYPAL-1930 added intent param to Braintree sdk and to the paypal order creation config ([#1826](https://github.com/bigcommerce/checkout-sdk-js/issues/1826)) ([5166212](https://github.com/bigcommerce/checkout-sdk-js/commit/51662123f0fc567aff9dcfabcdadfc41bde2eb42))\n\n## [1.337.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.336.2...v1.337.0) (2023-02-07)\n\n\n### Features\n\n* **payment:** PAYPAL-1959 provided buyer-country to the paypal sdk config for dev mode ([#1823](https://github.com/bigcommerce/checkout-sdk-js/issues/1823)) ([556089d](https://github.com/bigcommerce/checkout-sdk-js/commit/556089dd9c1b4e64a10709cbdf511b853615fd49))\n* **payment:** PAYPAL-1959 provided buyer-country to the paypal sdk config for dev mode ([#1823](https://github.com/bigcommerce/checkout-sdk-js/issues/1823)) ([c74a729](https://github.com/bigcommerce/checkout-sdk-js/commit/c74a7294b4d9d79af700f9294d80dbd2bde94f04))\n\n### [1.336.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.336.1...v1.336.2) (2023-02-07)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-1926 added extra shipping option selection if there is no recommended options available ([#1822](https://github.com/bigcommerce/checkout-sdk-js/issues/1822)) ([aa90493](https://github.com/bigcommerce/checkout-sdk-js/commit/aa904939d07c3247d5fd9923abb47e5aff6ff96d))\n\n### [1.336.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.336.0...v1.336.1) (2023-02-07)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1921 removed unnecessary PayPalCommerceAlternativeMethods v2 transformation in payment request transformer file ([#1821](https://github.com/bigcommerce/checkout-sdk-js/issues/1821)) ([9c5caf6](https://github.com/bigcommerce/checkout-sdk-js/commit/9c5caf6b9de821397ba1ea900462ff0bbd467a12))\n\n## [1.336.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.335.2...v1.336.0) (2023-02-06)\n\n\n### Features\n\n* **payment:** PAYPAL-1888 added PayPalCommerceButtonStrategy to paypal-commerce-integration package ([#1801](https://github.com/bigcommerce/checkout-sdk-js/issues/1801)) ([08d8555](https://github.com/bigcommerce/checkout-sdk-js/commit/08d855529eaae5290935aaad7df3a025a6af4d3d))\n* **payment:** PAYPAL-1892 added PayPalCommerceAlternativeMethodsButtonStrategy to paypal-commerce-integration ([#1817](https://github.com/bigcommerce/checkout-sdk-js/issues/1817)) ([4c4b51b](https://github.com/bigcommerce/checkout-sdk-js/commit/4c4b51b152d22e9965777eb882d6af8a4a03b28f))\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-000 updated paypal commerce tests to fix some issues with CI build in other pr ([#1820](https://github.com/bigcommerce/checkout-sdk-js/issues/1820)) ([8074a16](https://github.com/bigcommerce/checkout-sdk-js/commit/8074a165abbc46d7ddb5d6f385f992139861959d))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-000 removed paypal commerce checkout button strategies from core package ([#1818](https://github.com/bigcommerce/checkout-sdk-js/issues/1818)) ([615766e](https://github.com/bigcommerce/checkout-sdk-js/commit/615766e1c104e65ec35d19e00dbc068b60aa9bdf))\n* **payment:** PAYPAL-1889 added PayPalCommerceCreditButtonStrategy to paypal-commerce-integration package ([#1815](https://github.com/bigcommerce/checkout-sdk-js/issues/1815)) ([8855fe4](https://github.com/bigcommerce/checkout-sdk-js/commit/8855fe4bbe8529352eb32620351dce5d72e4aaf3))\n* **payment:** PAYPAL-1891 added PayPalCommerceVenmoButtonStrategy to paypal commerce integration package ([#1813](https://github.com/bigcommerce/checkout-sdk-js/issues/1813)) ([a805af7](https://github.com/bigcommerce/checkout-sdk-js/commit/a805af7940d84bc26b878d6ad20af91bea492b54))\n\n### [1.335.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.335.1...v1.335.2) (2023-02-02)\n\n### [1.335.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.335.0...v1.335.1) (2023-02-02)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-287 Fixed error when using vaulted card L2/L3 field appear as null on dashboard ([#1779](https://github.com/bigcommerce/checkout-sdk-js/issues/1779)) ([be221e5](https://github.com/bigcommerce/checkout-sdk-js/commit/be221e58e0ad17f9651008e47f41d4ead31fed45))\n\n## [1.335.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.334.0...v1.335.0) (2023-02-01)\n\n\n### Features\n\n* **payment:** PAYPAL-1913 Create braintreevenmo payment strategy ([d8a57e3](https://github.com/bigcommerce/checkout-sdk-js/commit/d8a57e310167013a80ce3a25c89f25907a09cd53))\n* **payment:** PAYPAL-1913 fix build issue with error import ([#1814](https://github.com/bigcommerce/checkout-sdk-js/issues/1814)) ([77f5d0a](https://github.com/bigcommerce/checkout-sdk-js/commit/77f5d0ae0a49ff4cee7b587dfa780ffb7bf63912))\n\n## [1.334.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.333.1...v1.334.0) (2023-02-01)\n\n\n### Features\n\n* **payment:** STRIPE-289 Loading Submit button after card loads ([#1763](https://github.com/bigcommerce/checkout-sdk-js/issues/1763)) ([3053eed](https://github.com/bigcommerce/checkout-sdk-js/commit/3053eed02804e2b113f13c007ca4ec34dab3186d))\n\n### [1.333.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.333.0...v1.333.1) (2023-02-01)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-0000 Add skip-nx-cache build command ([#1812](https://github.com/bigcommerce/checkout-sdk-js/issues/1812)) ([c4ae24e](https://github.com/bigcommerce/checkout-sdk-js/commit/c4ae24eb6a3b70e7d4ca8a4b494fb664282cb12b))\n\n## [1.333.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.332.2...v1.333.0) (2023-01-31)\n\n\n### Features\n\n* **payment:** PAYPAL-1935 move CancellablePromise to integration package ([6bab047](https://github.com/bigcommerce/checkout-sdk-js/commit/6bab0477a545bcafcc75647b429dc7de5b645705))\n\n### [1.332.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.332.1...v1.332.2) (2023-01-31)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-8239 addresses feedback ([8e816a6](https://github.com/bigcommerce/checkout-sdk-js/commit/8e816a69716c4a3457e641a9e6d60e58b73f9429))\n* **payment:** PAYMENTS-8239 sorts recommended option first for applepay ([814564b](https://github.com/bigcommerce/checkout-sdk-js/commit/814564bc497781a519e687b07d30f9c59658e47c))\n\n### [1.332.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.332.0...v1.332.1) (2023-01-30)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-1929 added PayPalButtonStyleOptions interface to the docs files ([#1802](https://github.com/bigcommerce/checkout-sdk-js/issues/1802)) ([fa15dd8](https://github.com/bigcommerce/checkout-sdk-js/commit/fa15dd806b0746921e4089e78ae86a07a9e35e4a))\n\n## [1.332.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.331.0...v1.332.0) (2023-01-30)\n\n\n### Features\n\n* **payment:** PAYPAL-1934 move PaymentMethodFailedError to integration package ([a9d1546](https://github.com/bigcommerce/checkout-sdk-js/commit/a9d15463989a98f211ddec6c37e47721afe983fb))\n\n## [1.331.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.330.1...v1.331.0) (2023-01-30)\n\n\n### Features\n\n* **payment:** PAYPAL-000 added an ability to loadCheckout by provided id in payments-integration-api ([#1803](https://github.com/bigcommerce/checkout-sdk-js/issues/1803)) ([a0e3e02](https://github.com/bigcommerce/checkout-sdk-js/commit/a0e3e02c454e92e06002ba9bf8f43aef28a723d6))\n* **payment:** PAYPAL-000 added an ability to use BuyNowCartCreationError from payment-integration-api ([#1804](https://github.com/bigcommerce/checkout-sdk-js/issues/1804)) ([0c7edca](https://github.com/bigcommerce/checkout-sdk-js/commit/0c7edca2a83ad462d185830928efe3f3003ccf7c))\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-000 updated amazon pay specs with CartSource to fix the issue with failed build ([#1806](https://github.com/bigcommerce/checkout-sdk-js/issues/1806)) ([7fa0ccd](https://github.com/bigcommerce/checkout-sdk-js/commit/7fa0ccd8aa3c9fcc04e27a37bd6cd660e3def123))\n* **payment:** PAYPAL-1635 Buy Now feature for amazon pay ([562ab38](https://github.com/bigcommerce/checkout-sdk-js/commit/562ab380046cec191067d5c68e8f2dde221aab5c))\n* **payment:** PAYPAL-1635 fix after review ([34cc8ee](https://github.com/bigcommerce/checkout-sdk-js/commit/34cc8eebfe25e2df5505c7e941550e29342ed826))\n* **payment:** PAYPAL-1635 update after review ([4696290](https://github.com/bigcommerce/checkout-sdk-js/commit/469629041125b5b200e87576ad655c2cce7cafb4))\n* **payment:** PAYPAL-1635 update after review ([0ce178e](https://github.com/bigcommerce/checkout-sdk-js/commit/0ce178e6a6d3d443e9781a7f2932e23c50f6430a))\n* **payment:** PAYPAL-1635 update after review ([e16ec75](https://github.com/bigcommerce/checkout-sdk-js/commit/e16ec75b31e19eff21bae8b700b8c729e1e84ee8))\n* **payment:** PAYPAL-1635 update after review ([651bc1f](https://github.com/bigcommerce/checkout-sdk-js/commit/651bc1fafbf5de7ed2445012b175ac4ac6edaa56))\n* **payment:** PAYPAL-1763 fixed an issue when we could not proceed checkout after trying to place order with an empty CVV for stored card ([4aea399](https://github.com/bigcommerce/checkout-sdk-js/commit/4aea399b9e483e3862f339da17d1561ac7764341))\n* **payment:** PAYPAL-1929 renamed several PayPal Commerce interfaces to fix the issue with doc files ([#1799](https://github.com/bigcommerce/checkout-sdk-js/issues/1799)) ([05df1e4](https://github.com/bigcommerce/checkout-sdk-js/commit/05df1e4437189b57f6dd05e46fcb6f6eb35d1dec))\n\n### [1.330.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.330.0...v1.330.1) (2023-01-27)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-1923 fixed the issue with wrong paypal sdk configuration ([#1794](https://github.com/bigcommerce/checkout-sdk-js/issues/1794)) ([dec683d](https://github.com/bigcommerce/checkout-sdk-js/commit/dec683d258c7cf4d0e562815eb114dfe440ec19d))\n\n## [1.330.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.329.0...v1.330.0) (2023-01-25)\n\n\n### Features\n\n* **payment:** PAYPAL-1882 sending PPC APM V2 gateway instead of PPC APM ([#1782](https://github.com/bigcommerce/checkout-sdk-js/issues/1782)) ([27393bc](https://github.com/bigcommerce/checkout-sdk-js/commit/27393bc09f9a2ae8d4de27fcd7cab15288d8141f))\n* **payment:** PAYPAL-1898 added CartRequestSender to payment integration api package ([#1791](https://github.com/bigcommerce/checkout-sdk-js/issues/1791)) ([84c146c](https://github.com/bigcommerce/checkout-sdk-js/commit/84c146cb993bdb2ec07f095a591f40ab100a94a0))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1918 moved LoadingIndicator from core to ui package ([#1784](https://github.com/bigcommerce/checkout-sdk-js/issues/1784)) ([926265c](https://github.com/bigcommerce/checkout-sdk-js/commit/926265ca604682d461c9b8d283ffbd50c3bacb20))\n\n## [1.329.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.328.0...v1.329.0) (2023-01-25)\n\n\n### Features\n\n* **payment:** PAYPAL-1840 Create braintreepaypalcredit customer button strategy ([97bcb1b](https://github.com/bigcommerce/checkout-sdk-js/commit/97bcb1b22b84d613d2dec129f4720e8a3e99294e))\n\n\n### Bug Fixes\n\n* **checkout:** ADYEN-502 hide wrong placeholder text for the vaulted validation fields ([1c93745](https://github.com/bigcommerce/checkout-sdk-js/commit/1c93745a068e38bab3b882c65d88cfe1315ff1e3))\n\n## [1.328.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.327.0...v1.328.0) (2023-01-25)\n\n\n### Features\n\n* **payment:** STRIPE-216 delete consignments to recover auto-step flow when reloads page for stripe link ([#1731](https://github.com/bigcommerce/checkout-sdk-js/issues/1731)) ([1e56b66](https://github.com/bigcommerce/checkout-sdk-js/commit/1e56b6627a20fb1078ffd7c2cf67b480ad4782bb))\n\n## [1.327.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.326.4...v1.327.0) (2023-01-24)\n\n\n### Features\n\n* **payment:** STRIPE-194 keep Shipping Address Information If Shopper Logs Out Of Link ([#1760](https://github.com/bigcommerce/checkout-sdk-js/issues/1760)) ([9a661a3](https://github.com/bigcommerce/checkout-sdk-js/commit/9a661a3b3f6abbbe716f6f9227c9e6e68aad65df))\n\n### [1.326.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.326.3...v1.326.4) (2023-01-23)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1917 removed PayPalCommerceInlineCheckoutButtonStrategy from core package ([#1783](https://github.com/bigcommerce/checkout-sdk-js/issues/1783)) ([0921359](https://github.com/bigcommerce/checkout-sdk-js/commit/0921359bd2a1f9df68476a077baea0ea0c7ba8f1))\n\n### [1.326.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.326.2...v1.326.3) (2023-01-20)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-000 Fix issue with offsite payment completion ([#1786](https://github.com/bigcommerce/checkout-sdk-js/issues/1786)) ([c1d5b79](https://github.com/bigcommerce/checkout-sdk-js/commit/c1d5b79efd17da26c553ad515f5d9ab78ee152a8))\n\n### [1.326.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.326.1...v1.326.2) (2023-01-19)\n\n\n### Code Refactoring\n\n* **payment:** INT-6964 AmazonPayV1: Remove all related files ([f24e5f8](https://github.com/bigcommerce/checkout-sdk-js/commit/f24e5f8b8911eb26476aaa681e04695f6f13ea87))\n* **payment:** INT-6964 Rename `AMAZONPAYV2` to `AMAZONPAY` ([4eb2688](https://github.com/bigcommerce/checkout-sdk-js/commit/4eb2688d1c7b6c2b9c44be45ed2121942898276f))\n\n### [1.326.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.326.0...v1.326.1) (2023-01-19)\n\n\n### Bug Fixes\n\n* **billing:** CHECKOUT-7214 Merge billing address as compared to replace ([#1774](https://github.com/bigcommerce/checkout-sdk-js/issues/1774)) ([5cde3c3](https://github.com/bigcommerce/checkout-sdk-js/commit/5cde3c3c557b0a6591992b3443f02ebb8fef0ea2))\n\n## [1.326.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.325.0...v1.326.0) (2023-01-19)\n\n\n### Features\n\n* **payment:** PAYPAL-1890 added PayPalCommerceInlineButton strategy to paypal-commerce integration package ([#1776](https://github.com/bigcommerce/checkout-sdk-js/issues/1776)) ([a4eca90](https://github.com/bigcommerce/checkout-sdk-js/commit/a4eca909e77cf2b0fb55b3d9bf11590bce40ba23))\n\n## [1.325.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.324.3...v1.325.0) (2023-01-18)\n\n\n### Features\n\n* **payment:** PAYPAL-1908 Make an ability to use Overlay from core package in integration checkout-sdk packages ([fcd5e0a](https://github.com/bigcommerce/checkout-sdk-js/commit/fcd5e0a883a6f236501627b254e71e2aa5b8ee0e))\n\n### [1.324.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.324.2...v1.324.3) (2023-01-18)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-000 updated kyiv-payments-team codeowners data ([#1778](https://github.com/bigcommerce/checkout-sdk-js/issues/1778)) ([060cc64](https://github.com/bigcommerce/checkout-sdk-js/commit/060cc641d01bc8b32d0346416c52b0e2d8c431c6))\n\n### [1.324.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.324.1...v1.324.2) (2023-01-17)\n\n\n### Bug Fixes\n\n* **payment:** INT-7103 SquareV2: Assume that `postalCode` is valid unless it changes ([#1765](https://github.com/bigcommerce/checkout-sdk-js/issues/1765)) ([8526331](https://github.com/bigcommerce/checkout-sdk-js/commit/85263312ac4eb9dfb4d45aef19ed6f0b47e7b7e5))\n\n### [1.324.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.324.0...v1.324.1) (2023-01-16)\n\n\n### Bug Fixes\n\n* **checkout:** ADYEN-688 fixed 3ds2 redirect for vaulted cards ([ea27e60](https://github.com/bigcommerce/checkout-sdk-js/commit/ea27e607783b805f6b049ac596defa15cec6a38c))\n\n## [1.324.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.323.1...v1.324.0) (2023-01-16)\n\n\n### Features\n\n* **payment:** PAYPAL-1839 Create braintreepaypal customer button strategy ([afe6c27](https://github.com/bigcommerce/checkout-sdk-js/commit/afe6c278e5e356db0e2812bac1b1853ec64f72f4))\n\n### [1.323.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.323.0...v1.323.1) (2023-01-12)\n\n## [1.323.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.322.0...v1.323.0) (2023-01-12)\n\n\n### Features\n\n* **payment:** PAYPAL-1633 added Buy Now feature for googlepaybraintree ([875acac](https://github.com/bigcommerce/checkout-sdk-js/commit/875acac29cf4518fccdaf815371f26727d55ff24))\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-1633 additional parameter ([51218e0](https://github.com/bigcommerce/checkout-sdk-js/commit/51218e066e0ae57b72c289d4c80d3a1238d04ea9))\n* **payment:** PAYPAL-1633 update after review ([d13800a](https://github.com/bigcommerce/checkout-sdk-js/commit/d13800a2cb62eead6f595da1cd8fe29669afc0c5))\n* **payment:** PAYPAL-1635 fix after review ([d849dd0](https://github.com/bigcommerce/checkout-sdk-js/commit/d849dd00acf9e7a9e107fdc19c88ae30406397c1))\n* **payment:** PAYPAL-1635 fix after review ([827a149](https://github.com/bigcommerce/checkout-sdk-js/commit/827a149ecf8ad0a8a8ab47d83f96e911e938a01b))\n* **payment:** PAYPAL-1635 lint ([64a49ba](https://github.com/bigcommerce/checkout-sdk-js/commit/64a49baa61fcc5714f76daafe9e25d79133537c2))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1633 fix after review ([b5ab80f](https://github.com/bigcommerce/checkout-sdk-js/commit/b5ab80fbc807136ef84212f2a49e89fce3421dc6))\n* **payment:** PAYPAL-1633 fix after review ([9430894](https://github.com/bigcommerce/checkout-sdk-js/commit/9430894212c6125f09cbc1ee095191172fc2f03a))\n\n## [1.322.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.321.0...v1.322.0) (2023-01-11)\n\n\n### Features\n\n* **payment:** PAYPAL-1864 created paypal commerce package ([#1751](https://github.com/bigcommerce/checkout-sdk-js/issues/1751)) ([9ba7826](https://github.com/bigcommerce/checkout-sdk-js/commit/9ba7826f19110e09c0be847dfb67a8f16229e48d))\n\n## [1.321.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.320.1...v1.321.0) (2023-01-10)\n\n\n### Features\n\n* **payment:** BOLT-437 Modify analytics event for Bolt suggestion on customer step ([e1a2e9e](https://github.com/bigcommerce/checkout-sdk-js/commit/e1a2e9efa89bb706f4e29ee275b7d04bda93d103))\n\n### [1.320.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.320.0...v1.320.1) (2023-01-10)\n\n\n### Bug Fixes\n\n* **payment:** BOLT-362 fix Bolt track.js error in console ([ccf5144](https://github.com/bigcommerce/checkout-sdk-js/commit/ccf5144f817a476349a020976f6d1f5f44a802d6))\n\n## [1.320.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.319.1...v1.320.0) (2023-01-10)\n\n\n### Features\n\n* **payment:** PAYMENTS-8378 Send multiple addresses to trusted_shipping_address endpoint in case of multi-shipping ([#1745](https://github.com/bigcommerce/checkout-sdk-js/issues/1745)) ([902016b](https://github.com/bigcommerce/checkout-sdk-js/commit/902016b98423f22dc91648ca71baa8a9caf71b9d))\n* **payment:** PAYMENTS-8378 Update bigpay-client-js version to 5.21.0 ([#1764](https://github.com/bigcommerce/checkout-sdk-js/issues/1764)) ([410f40d](https://github.com/bigcommerce/checkout-sdk-js/commit/410f40d6af6f3b8c1ab18bef43f2402fd81d5a7f))\n\n### [1.319.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.319.0...v1.319.1) (2023-01-09)\n\n## [1.319.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.318.0...v1.319.0) (2023-01-08)\n\n\n### Features\n\n* **checkout:** CHECKOUT-7148 Throw `CartConsistencyError` when server detects inconsistent projection data ([654be3e](https://github.com/bigcommerce/checkout-sdk-js/commit/654be3e89efc6f02ebaa8ea27e20093fe79d397c))\n\n## [1.318.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.317.1...v1.318.0) (2023-01-04)\n\n\n### Features\n\n* **payment:** INT-6729 add Klarna support for Czech Republic ([375c759](https://github.com/bigcommerce/checkout-sdk-js/commit/375c75900d6b232a60b2550087a11c16bdfadbc3))\n\n### [1.317.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.317.0...v1.317.1) (2023-01-04)\n\n## [1.317.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.316.4...v1.317.0) (2023-01-03)\n\n\n### Features\n\n* **payment:** PAYPAL-1808 passing vaulting data to order creation request for PayPal Commerce CC ([#1734](https://github.com/bigcommerce/checkout-sdk-js/issues/1734)) ([a1c1c1f](https://github.com/bigcommerce/checkout-sdk-js/commit/a1c1c1fbe14372f4043a59040437f6b90309b288))\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-000 fixed the issue with checkout-sdk build after last pr merge ([#1753](https://github.com/bigcommerce/checkout-sdk-js/issues/1753)) ([fe61144](https://github.com/bigcommerce/checkout-sdk-js/commit/fe6114464f5f4b07059197dc3ff4723b52b80171))\n\n### [1.316.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.316.3...v1.316.4) (2023-01-03)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-000 Upgrade @types/lodash from 4.14.184 to 4.14.185 ([#1640](https://github.com/bigcommerce/checkout-sdk-js/issues/1640)) ([e97127f](https://github.com/bigcommerce/checkout-sdk-js/commit/e97127f9faa4d6264225d8fc5a3285339bc1893b))\n* **common:** CHECKOUT-000 upgrade core-js from 3.25.0 to 3.25.2 ([#1639](https://github.com/bigcommerce/checkout-sdk-js/issues/1639)) ([6fdf3bb](https://github.com/bigcommerce/checkout-sdk-js/commit/6fdf3bb99c64393fded63f5de18e46bf48a7f6d5))\n* **common:** CHECKOUT-000 upgrade reselect from 4.1.6 to 4.1.7 ([#1709](https://github.com/bigcommerce/checkout-sdk-js/issues/1709)) ([b30ffbc](https://github.com/bigcommerce/checkout-sdk-js/commit/b30ffbcf46459a537648d9a72ca55111172f8263))\n\n### [1.316.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.316.2...v1.316.3) (2023-01-02)\n\n### [1.316.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.316.1...v1.316.2) (2022-12-30)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-281 Fixed error when making purchases with only digital products ([#1747](https://github.com/bigcommerce/checkout-sdk-js/issues/1747)) ([d9cfce4](https://github.com/bigcommerce/checkout-sdk-js/commit/d9cfce4064903cae7dd4d8066e92bc4148a49ab3))\n\n### [1.316.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.316.0...v1.316.1) (2022-12-29)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-000 Fix offsite payment strategy ([#1749](https://github.com/bigcommerce/checkout-sdk-js/issues/1749)) ([00c380a](https://github.com/bigcommerce/checkout-sdk-js/commit/00c380acbe4692ef499b1f6b1a70b0fa08405266))\n\n## [1.316.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.315.0...v1.316.0) (2022-12-27)\n\n\n### Features\n\n* **payment:** PAYPAL-1836 added PayPalCommerceCustomer strategy ([#1730](https://github.com/bigcommerce/checkout-sdk-js/issues/1730)) ([4692299](https://github.com/bigcommerce/checkout-sdk-js/commit/469229953a4fd70c3a4fbaba9a47174c1f7a8ca4))\n\n## [1.315.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.314.2...v1.315.0) (2022-12-22)\n\n\n### Features\n\n* **payment:** INT-6957 Sezzle - Use window.location.replace to redirect ([#1696](https://github.com/bigcommerce/checkout-sdk-js/issues/1696)) ([ef7962c](https://github.com/bigcommerce/checkout-sdk-js/commit/ef7962c3b51118813a96808390bac54048c02d7d))\n\n### [1.314.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.314.1...v1.314.2) (2022-12-21)\n\n### [1.314.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.314.0...v1.314.1) (2022-12-21)\n\n\n### Bug Fixes\n\n* **payment:** BOLT-268 Bolt payment fields with store credits ([8a38daf](https://github.com/bigcommerce/checkout-sdk-js/commit/8a38daf56c2dac805a6ae2e5801877272828e1df))\n\n## [1.314.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.313.2...v1.314.0) (2022-12-21)\n\n\n### Features\n\n* **checkout:** CHECKOUT-0000 Enforce RegistryV2 for SquareV2 ([#1737](https://github.com/bigcommerce/checkout-sdk-js/issues/1737)) ([9af5b64](https://github.com/bigcommerce/checkout-sdk-js/commit/9af5b64a7271fddc772afd61bfd524abcf864922))\n\n### [1.313.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.313.1...v1.313.2) (2022-12-20)\n\n### [1.313.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.313.0...v1.313.1) (2022-12-19)\n\n## [1.313.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.312.1...v1.313.0) (2022-12-18)\n\n\n### Features\n\n* **payment:** STRIPE-178 Loading Submit button after card loads ([c983b92](https://github.com/bigcommerce/checkout-sdk-js/commit/c983b921cb6a41221fbb74180cb7c6a4db11986f))\n\n### [1.312.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.312.0...v1.312.1) (2022-12-16)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-6406 Fix payload for offline payment method ([#1735](https://github.com/bigcommerce/checkout-sdk-js/issues/1735)) ([9465d7d](https://github.com/bigcommerce/checkout-sdk-js/commit/9465d7d9f532c65d50d15f7e42839be70befebb1))\n* **payment:** ADYEN-629 added adyen credit card es translation fix ([85e9cbf](https://github.com/bigcommerce/checkout-sdk-js/commit/85e9cbfa52d90a9a711519daf6cd1e608c8582b8))\n\n## [1.312.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.311.2...v1.312.0) (2022-12-15)\n\n\n### Features\n\n* **payment:** BOLT-408 Add BODL event for customer suggestion init ([fecf8c9](https://github.com/bigcommerce/checkout-sdk-js/commit/fecf8c9155e2ce691407713b32b30f364b4fea90))\n\n### [1.311.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.311.1...v1.311.2) (2022-12-14)\n\n### [1.311.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.311.0...v1.311.1) (2022-12-14)\n\n## [1.311.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.310.3...v1.311.0) (2022-12-14)\n\n\n### Features\n\n* **payment:** STRIPE-165 V3 Initialize payment for vaulted cards ([#1641](https://github.com/bigcommerce/checkout-sdk-js/issues/1641)) ([1c07aad](https://github.com/bigcommerce/checkout-sdk-js/commit/1c07aadfd41ae21b265db9ee2fda400cbcb16c06))\n\n### [1.310.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.310.2...v1.310.3) (2022-12-13)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-6406 Refactor offline payment method ([#1724](https://github.com/bigcommerce/checkout-sdk-js/issues/1724)) ([18fa217](https://github.com/bigcommerce/checkout-sdk-js/commit/18fa2176b800e648b1ba26ed424b4ced8d964a52))\n\n### [1.310.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.310.1...v1.310.2) (2022-12-13)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-6394 Refactor credit card payment method ([#1710](https://github.com/bigcommerce/checkout-sdk-js/issues/1710)) ([7eb83cd](https://github.com/bigcommerce/checkout-sdk-js/commit/7eb83cd6db9bcd2280c92f6609902e0aa95e9e18))\n\n### [1.310.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.310.0...v1.310.1) (2022-12-09)\n\n## [1.310.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.309.6...v1.310.0) (2022-12-09)\n\n\n### Features\n\n* **payment:** INT-6727 add Klarna support for greece ([#1688](https://github.com/bigcommerce/checkout-sdk-js/issues/1688)) ([7a039ba](https://github.com/bigcommerce/checkout-sdk-js/commit/7a039ba34671492f1633ca6fc9ebed12ab142ceb))\n\n\n### Bug Fixes\n\n* **payment:** INT-6928 [Mollie] No Ability To Use A Different Card To Pay ([#1702](https://github.com/bigcommerce/checkout-sdk-js/issues/1702)) ([5555568](https://github.com/bigcommerce/checkout-sdk-js/commit/555556811a82c728f691c90a303342a388cb0858))\n\n### [1.309.6](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.309.5...v1.309.6) (2022-12-08)\n\n### [1.309.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.309.4...v1.309.5) (2022-12-07)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-6405 Refactor no payment data required method ([#1717](https://github.com/bigcommerce/checkout-sdk-js/issues/1717)) ([5e627c6](https://github.com/bigcommerce/checkout-sdk-js/commit/5e627c64f77da6480b3bc0aaca702740ea58327c))\n\n### [1.309.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.309.3...v1.309.4) (2022-12-07)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-7107 hosted-form clean-up ([#1713](https://github.com/bigcommerce/checkout-sdk-js/issues/1713)) ([5c19c4e](https://github.com/bigcommerce/checkout-sdk-js/commit/5c19c4ea319e5a84eea42f9f81883d91b20f5770))\n\n### [1.309.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.309.2...v1.309.3) (2022-12-06)\n\n### [1.309.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.309.1...v1.309.2) (2022-12-05)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-160 Fixed no order created for successful Stripe payment ([#1690](https://github.com/bigcommerce/checkout-sdk-js/issues/1690)) ([0d74194](https://github.com/bigcommerce/checkout-sdk-js/commit/0d74194ae55715767ced60fa4c1749ab3426e8ee))\n\n### [1.309.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.309.0...v1.309.1) (2022-11-28)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-7107 Refactor `hosted-form` ([#1707](https://github.com/bigcommerce/checkout-sdk-js/issues/1707)) ([d28eb54](https://github.com/bigcommerce/checkout-sdk-js/commit/d28eb543ce84c0f379454bdb0fdc14be0ad16b22))\n\n## [1.309.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.308.4...v1.309.0) (2022-11-28)\n\n\n### Features\n\n* **payment:** INT-6716 SquareV2: Add payment strategy ([#1642](https://github.com/bigcommerce/checkout-sdk-js/issues/1642)) ([6af5062](https://github.com/bigcommerce/checkout-sdk-js/commit/6af5062c53392e825e937b4fccc4bc47e9b72cda))\n\n### [1.308.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.308.3...v1.308.4) (2022-11-24)\n\n### [1.308.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.308.2...v1.308.3) (2022-11-24)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-167 Adding Postal Code to stripe card element if not obtained in billing ([c5558cd](https://github.com/bigcommerce/checkout-sdk-js/commit/c5558cd75dc221752823d2cc39e95dbc36cb9e66))\n* **payment:** STRIPE-167 update documentation links for stripeupe ([b25fb3c](https://github.com/bigcommerce/checkout-sdk-js/commit/b25fb3c6b87a1ab8ea056daa637dad0f78b9977f))\n\n### [1.308.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.308.1...v1.308.2) (2022-11-22)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-6397 Refactor external payment method ([#1697](https://github.com/bigcommerce/checkout-sdk-js/issues/1697)) ([5cc2346](https://github.com/bigcommerce/checkout-sdk-js/commit/5cc23465b741a5b8cc3c9666033d49597009a99f))\n\n### [1.308.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.308.0...v1.308.1) (2022-11-22)\n\n## [1.308.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.307.1...v1.308.0) (2022-11-14)\n\n\n### Features\n\n* **payment:** PAYPAL-1723 added skip checkout functionality to PDP paypalcredit ([#1678](https://github.com/bigcommerce/checkout-sdk-js/issues/1678)) ([d2bb5ac](https://github.com/bigcommerce/checkout-sdk-js/commit/d2bb5acccf19a670d28ad9ab52a228e1a8d42070))\n\n### [1.307.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.307.0...v1.307.1) (2022-11-10)\n\n## [1.307.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.306.0...v1.307.0) (2022-11-10)\n\n\n### Features\n\n* **payment:** INT-6443 Hide payPal onDigital River behind an experiment ([2ad1c42](https://github.com/bigcommerce/checkout-sdk-js/commit/2ad1c42d330a58e9b4b0e25c3f8b614ab26ba8d3))\n* **payment:** INT-6443 reviewed change by Animesh ([3f0292b](https://github.com/bigcommerce/checkout-sdk-js/commit/3f0292b055abef210c7eefb4e3248468b9f7c148))\n* **payment:** INT-6443 reviewed change by Peng Zhou ([c756ee3](https://github.com/bigcommerce/checkout-sdk-js/commit/c756ee3ae10e9b872c431d0b5b5984b6968fe61c))\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-167 Adding Postal Code to stripe card elemnt if not obtained in billing ([d3f6aa8](https://github.com/bigcommerce/checkout-sdk-js/commit/d3f6aa8309fc5a5f6c31f622e789203d234e2e94))\n\n## [1.306.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.305.1...v1.306.0) (2022-11-09)\n\n\n### Features\n\n* **payment:** PAYPAL-1723 added skip checkout functionality to PDP paypalcommerce ([#1667](https://github.com/bigcommerce/checkout-sdk-js/issues/1667)) ([0fe4ae2](https://github.com/bigcommerce/checkout-sdk-js/commit/0fe4ae2a29bdcf5f06dd7f09dae661c119f2af44))\n\n### [1.305.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.305.0...v1.305.1) (2022-11-08)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1773 removed unnecessary business logic from PayPalCommerceInlineCheckoutButton strategy ([#1672](https://github.com/bigcommerce/checkout-sdk-js/issues/1672)) ([66597b0](https://github.com/bigcommerce/checkout-sdk-js/commit/66597b01d7487c5e3d2c7fbeaf70bf4050249f31))\n\n## [1.305.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.304.0...v1.305.0) (2022-11-08)\n\n\n### Features\n\n* **payment:** BOLT-386 Add BODL analytics tracking events ([4cf875c](https://github.com/bigcommerce/checkout-sdk-js/commit/4cf875cd629136293dea5245416593bedcedf047))\n\n## [1.304.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.303.0...v1.304.0) (2022-11-07)\n\n\n### Features\n\n* **checkout:** STRF-10153 Data Layer Updates - Field Additions and Changes ([#1670](https://github.com/bigcommerce/checkout-sdk-js/issues/1670)) ([8184573](https://github.com/bigcommerce/checkout-sdk-js/commit/81845738236a49c41e959f57b5626c35bd6707a1))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1756 removed 'Fake' data implementation from paypal commerce button strategy ([#1659](https://github.com/bigcommerce/checkout-sdk-js/issues/1659)) ([b2f3795](https://github.com/bigcommerce/checkout-sdk-js/commit/b2f37955a7be937608a56e51e3f56ce3ae2d31c9))\n* **payment:** PAYPAL-1757 removed 'Fake' data implementation from paypal commerce credit button strategy ([#1674](https://github.com/bigcommerce/checkout-sdk-js/issues/1674)) ([27a68c1](https://github.com/bigcommerce/checkout-sdk-js/commit/27a68c1a47da3e92d4bc4b8fa802bd8f725bf931))\n\n## [1.303.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.302.0...v1.303.0) (2022-11-07)\n\n\n### Features\n\n* **checkout:** ADYEN-585 moved Adyen from core to the separate package ([bc6d639](https://github.com/bigcommerce/checkout-sdk-js/commit/bc6d639a2b52e52cc689f5ce50abdc0a48bac36d))\n\n## [1.302.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.301.1...v1.302.0) (2022-11-07)\n\n\n### Features\n\n* **payment:** STRIPE-183 persisting stripe components when reloads the page ([#1649](https://github.com/bigcommerce/checkout-sdk-js/issues/1649)) ([289b5bd](https://github.com/bigcommerce/checkout-sdk-js/commit/289b5bda6ddb0caaa586d2e21efcbf30e14e0d4d))\n\n### [1.301.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.301.0...v1.301.1) (2022-11-04)\n\n\n### Bug Fixes\n\n* **payment:** INT-6890 AmazonPayV2: Change `isReadyToPay` logic ([#1669](https://github.com/bigcommerce/checkout-sdk-js/issues/1669)) ([632f598](https://github.com/bigcommerce/checkout-sdk-js/commit/632f598f3c6d7692c0f6046c0c820debf6246883))\n\n## [1.301.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.300.1...v1.301.0) (2022-11-03)\n\n\n### Features\n\n* **payment:** INT-5953 Force to use Payment Strategy V1 when Mollie and Apple pay ([#1671](https://github.com/bigcommerce/checkout-sdk-js/issues/1671)) ([1d6d4ee](https://github.com/bigcommerce/checkout-sdk-js/commit/1d6d4ee1e0e3423d33d2e714aeccee381153b72e))\n\n### [1.300.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.300.0...v1.300.1) (2022-11-03)\n\n\n### Bug Fixes\n\n* **payment:** INT-6848 AmazonPayV2: Render the button in a container created programmatically ([#1655](https://github.com/bigcommerce/checkout-sdk-js/issues/1655)) ([ce21d9f](https://github.com/bigcommerce/checkout-sdk-js/commit/ce21d9f6e58215ebe15237666958cf297e421b19))\n\n## [1.300.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.299.1...v1.300.0) (2022-11-02)\n\n\n### Features\n\n* **payment:** INT-6675 [Digital River] Comment resolved ([da798ad](https://github.com/bigcommerce/checkout-sdk-js/commit/da798ad262bacb4e8f0a1e8e75d493af1aeb1ace))\n* **payment:** INT-6675 [Digital River] improve function ([7a00933](https://github.com/bigcommerce/checkout-sdk-js/commit/7a009333f590023216617513d45e58c84d4615b0))\n* **payment:** INT-6675 [Digital River] Small fix ([6a6f675](https://github.com/bigcommerce/checkout-sdk-js/commit/6a6f675de0f99c227a9335e0aa6d940b3dc22715))\n* **payment:** INT-6675 [Digital River] unit testing ([f84f108](https://github.com/bigcommerce/checkout-sdk-js/commit/f84f1089390c14f11aad5a463e957a7faa3b3af7))\n* **payment:** INT-6675 [Digital River] Update billingAddress from paypal response ([3d9269c](https://github.com/bigcommerce/checkout-sdk-js/commit/3d9269c1a3c25fa054a95a46a8665ce96f4156b1))\n* **payment:** PAYPAL-1737 added currencyCode param to loadPaymentMethod request ([#1665](https://github.com/bigcommerce/checkout-sdk-js/issues/1665)) ([d5763b6](https://github.com/bigcommerce/checkout-sdk-js/commit/d5763b6413fea3c331f8a1df3d4112e8d99fd3e0))\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-1758 added condition to submit payment in onComplete method for auth&capture transaction only for PayPalInlineCheckoutButton ([#1664](https://github.com/bigcommerce/checkout-sdk-js/issues/1664)) ([8746fdb](https://github.com/bigcommerce/checkout-sdk-js/commit/8746fdbd67da049154a8c5d223901a6604bb18b3))\n\n### [1.299.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.299.0...v1.299.1) (2022-10-27)\n\n\n### Bug Fixes\n\n* **payment:** INT-6772 Worldpay supported in firefox ([#1647](https://github.com/bigcommerce/checkout-sdk-js/issues/1647)) ([4fdad98](https://github.com/bigcommerce/checkout-sdk-js/commit/4fdad98f7381f58314b69ceb5338c8c1ca9bd7c3))\n\n## [1.299.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.298.3...v1.299.0) (2022-10-25)\n\n\n### Features\n\n* **payment:** PAYPAL-1629 BraintreeVenmo on PDP ([085e98a](https://github.com/bigcommerce/checkout-sdk-js/commit/085e98a51f59fef6443b0a810b90e1eb913a9b99))\n* **payment:** PAYPAL-1629 BraintreeVenmo on PDP ([94f14dd](https://github.com/bigcommerce/checkout-sdk-js/commit/94f14ddf843e87ed1027c1e566ee8f9c733db529))\n* **payment:** PAYPAL-1630 BraintreePayPal on PDP ([b9f024d](https://github.com/bigcommerce/checkout-sdk-js/commit/b9f024d8b3943210f28820d2924980a10ea4f7e5))\n\n### [1.298.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.298.2...v1.298.3) (2022-10-25)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1742 removed Fake data implementation due to BE changes ([#1653](https://github.com/bigcommerce/checkout-sdk-js/issues/1653)) ([a07ddbd](https://github.com/bigcommerce/checkout-sdk-js/commit/a07ddbd5a48bbe34ae854fac7c64443113f8667c))\n\n### [1.298.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.298.1...v1.298.2) (2022-10-20)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-1725 fixed the issue with passing fake data as customer address from last session in PayPalCommerceInlineCheckoutButtonStrategy ([#1648](https://github.com/bigcommerce/checkout-sdk-js/issues/1648)) ([f27cd84](https://github.com/bigcommerce/checkout-sdk-js/commit/f27cd848f1fd3bad3132dcf7963728c4c6b4d741))\n* **payment:** PAYPAL-1730 fixed the issue with passing onComplete method for non hosted paypal flows ([#1645](https://github.com/bigcommerce/checkout-sdk-js/issues/1645)) ([b8b695f](https://github.com/bigcommerce/checkout-sdk-js/commit/b8b695f0958397788df138128473b664dbc15011))\n\n### [1.298.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.298.0...v1.298.1) (2022-10-20)\n\n\n### Bug Fixes\n\n* **payment:** INT-6539 GooglePay: Pass `hostname` as param when loading googlepay ([#1611](https://github.com/bigcommerce/checkout-sdk-js/issues/1611)) ([328fd82](https://github.com/bigcommerce/checkout-sdk-js/commit/328fd826fb5a04e41c4e9a67b288a36529182755))\n\n## [1.298.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.297.0...v1.298.0) (2022-10-18)\n\n\n### Features\n\n* **payment:** STRIPE-99 Add flag to validate unmount ([ad8c627](https://github.com/bigcommerce/checkout-sdk-js/commit/ad8c6274f26260936f52389b484bd0c88745966c))\n* **payment:** STRIPE-99 Add flag to validate unmount ([8981bea](https://github.com/bigcommerce/checkout-sdk-js/commit/8981bea6091b200961787a99cc156a3343538489))\n* **payment:** STRIPE-99 Add Stripe UPE fix ([4b4ed77](https://github.com/bigcommerce/checkout-sdk-js/commit/4b4ed77f747ebe5d081f5fd5cffaae0c1b93f8a2))\n* **payment:** STRIPE-99 Fix flag for validation ([419c37c](https://github.com/bigcommerce/checkout-sdk-js/commit/419c37c268b1501697071dec9b8aaa345932ba1a))\n* **payment:** STRIPE-99 Fix name of variables ([127412d](https://github.com/bigcommerce/checkout-sdk-js/commit/127412dffaf2e2b1b4a4c84acdf5a43e25ab5be5))\n\n\n### Bug Fixes\n\n* **payment:** INT-6478 SquareV2 - Fail Gracefully when payment provider unavailable ([bc136cc](https://github.com/bigcommerce/checkout-sdk-js/commit/bc136ccfcbcdbc2ce361055e7991d0c66d7697e3))\n\n## [1.297.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.296.2...v1.297.0) (2022-10-17)\n\n\n### Features\n\n* **payment:** PAYPAL-1606 Added Shipping options for paypal and updated paypal callbacks ([#1607](https://github.com/bigcommerce/checkout-sdk-js/issues/1607)) ([4520f94](https://github.com/bigcommerce/checkout-sdk-js/commit/4520f94b282cc2c4a1d0066e485a8ca3955621e9))\n* **payment:** PAYPAL-1607 added shipping Options for paypal credit and updated paypal callbacks ([#1610](https://github.com/bigcommerce/checkout-sdk-js/issues/1610)) ([6a03314](https://github.com/bigcommerce/checkout-sdk-js/commit/6a03314c48b00a9a7c89b10834112d6ceb6cb0de))\n\n### [1.296.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.296.1...v1.296.2) (2022-10-13)\n\n### [1.296.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.296.0...v1.296.1) (2022-10-13)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-000 upgrade @types/lodash from 4.14.182 to 4.14.184 ([#1592](https://github.com/bigcommerce/checkout-sdk-js/issues/1592)) ([8873f50](https://github.com/bigcommerce/checkout-sdk-js/commit/8873f5065ce07b322711488de827e243da7fad21))\n* **common:** CHECKOUT-000 upgrade core-js from 3.24.1 to 3.25.0 ([#1601](https://github.com/bigcommerce/checkout-sdk-js/issues/1601)) ([ed31162](https://github.com/bigcommerce/checkout-sdk-js/commit/ed31162c981d52ea518ba0e0ac2fe4f498bde4ad))\n\n## [1.296.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.295.0...v1.296.0) (2022-10-05)\n\n\n### Features\n\n* **payment:** INT-6092 AmazonPayV2: Add an additional payment button… ([#1605](https://github.com/bigcommerce/checkout-sdk-js/issues/1605)) ([a4c24cd](https://github.com/bigcommerce/checkout-sdk-js/commit/a4c24cd2542604dbee615fbbd8cfa9a1bd0505e3))\n\n## [1.295.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.294.0...v1.295.0) (2022-10-05)\n\n\n### Features\n\n* **payment:** PAYPAL-1627 added Buy Now implementation for PayPalCommerceVenmo button streategy ([#1622](https://github.com/bigcommerce/checkout-sdk-js/issues/1622)) ([876a240](https://github.com/bigcommerce/checkout-sdk-js/commit/876a2406464e1de28dd61b837a51a5928f217a97))\n* **payment:** PAYPAL-1628 added Buy Now implementation for PayPalCommerce alternative methods button strategy ([#1624](https://github.com/bigcommerce/checkout-sdk-js/issues/1624)) ([bb6b242](https://github.com/bigcommerce/checkout-sdk-js/commit/bb6b2429287b1f1fc5c9ad02893a6c6a307aedfc))\n\n## [1.294.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.293.0...v1.294.0) (2022-10-04)\n\n\n### Features\n\n* **payment:** PAYPAL-1626 made PayPalCommerceCredit competible with Buy Now ([#1620](https://github.com/bigcommerce/checkout-sdk-js/issues/1620)) ([1b523f4](https://github.com/bigcommerce/checkout-sdk-js/commit/1b523f429e589f5de49126053d24e3bc351cf2c3))\n\n## [1.293.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.292.1...v1.293.0) (2022-10-03)\n\n\n### Features\n\n* **payment:** INT-6297 BNZ Googlepay ([#1598](https://github.com/bigcommerce/checkout-sdk-js/issues/1598)) ([066e9da](https://github.com/bigcommerce/checkout-sdk-js/commit/066e9da58531be9ae65d07ce53b39a07ec28a051))\n\n### [1.292.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.292.0...v1.292.1) (2022-09-30)\n\n\n### Code Refactoring\n\n* **checkout:** STRF-10042 Incapsulate BODL event names into public methods ([#1625](https://github.com/bigcommerce/checkout-sdk-js/issues/1625)) ([93bfa5c](https://github.com/bigcommerce/checkout-sdk-js/commit/93bfa5c411bd20b014559fe6d1014c029f738048))\n\n## [1.292.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.291.1...v1.292.0) (2022-09-29)\n\n\n### Features\n\n* **payment:** STRIPE-25 Stripe Link State ([#1616](https://github.com/bigcommerce/checkout-sdk-js/issues/1616)) ([ebefc2a](https://github.com/bigcommerce/checkout-sdk-js/commit/ebefc2a2aa8ef5715ef60b370eb83c6cc7f4da4b))\n\n### [1.291.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.291.0...v1.291.1) (2022-09-29)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-000 Update get params to get registeries ([#1623](https://github.com/bigcommerce/checkout-sdk-js/issues/1623)) ([f626b5d](https://github.com/bigcommerce/checkout-sdk-js/commit/f626b5d7fd935aac13309a425bd748723dd82f12))\n\n## [1.291.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.290.0...v1.291.0) (2022-09-29)\n\n\n### Features\n\n* **payment:** PAYPAL-1690 added default height value for PayPal buttons if height is not provided ([#1621](https://github.com/bigcommerce/checkout-sdk-js/issues/1621)) ([ffd363e](https://github.com/bigcommerce/checkout-sdk-js/commit/ffd363ea900c7fce93477ff73d6e600d235346f3))\n\n## [1.290.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.289.0...v1.290.0) (2022-09-27)\n\n\n### Features\n\n* **payment:** BOLT-282 fixed analytics feature for Bolt Checkout ([fdc975e](https://github.com/bigcommerce/checkout-sdk-js/commit/fdc975efc5042fa09762055548a624e7dd908020))\n\n## [1.289.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.288.1...v1.289.0) (2022-09-27)\n\n\n### Features\n\n* **payment:** PAYPAL-1625 added Buy Now implementation for PayPalCommerceButtonStrategy ([#1604](https://github.com/bigcommerce/checkout-sdk-js/issues/1604)) ([02bb2db](https://github.com/bigcommerce/checkout-sdk-js/commit/02bb2db89fb74decfed2c47f57da9c703b046686))\n\n### [1.288.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.288.0...v1.288.1) (2022-09-26)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-131 Added a catch in case an exception occurs when confirming the payment using 3DS2 ([#1586](https://github.com/bigcommerce/checkout-sdk-js/issues/1586)) ([f046e7d](https://github.com/bigcommerce/checkout-sdk-js/commit/f046e7d3d482d10d5161afd13b219cf3556c442f))\n\n## [1.288.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.287.1...v1.288.0) (2022-09-26)\n\n\n### Features\n\n* **payment:** INT-6554 Worldpay Access - Increase code coverage ([#1588](https://github.com/bigcommerce/checkout-sdk-js/issues/1588)) ([643734d](https://github.com/bigcommerce/checkout-sdk-js/commit/643734de5ecf0ebe3faee29b53f04c19f685827e))\n\n### [1.287.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.287.0...v1.287.1) (2022-09-21)\n\n\n### Bug Fixes\n\n* **payment:** ADYEN-545 bumped adyen-web version ([a2e1a19](https://github.com/bigcommerce/checkout-sdk-js/commit/a2e1a19a2109793717e51e138e9d32a155f4895e))\n\n## [1.287.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.286.0...v1.287.0) (2022-09-20)\n\n\n### Features\n\n* **payment:** PAYPAL-1673 updated 'experience' button option in PayPalCommerceInlineCheckoutButtonStrategy ([#1606](https://github.com/bigcommerce/checkout-sdk-js/issues/1606)) ([85c7384](https://github.com/bigcommerce/checkout-sdk-js/commit/85c73848d8427aad02fbf4197c75eda7968760b3))\n\n## [1.286.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.285.2...v1.286.0) (2022-09-20)\n\n\n### Features\n\n* **checkout:** CHECKOUT-6860 Use numeric keypad ([#1595](https://github.com/bigcommerce/checkout-sdk-js/issues/1595)) ([4a96115](https://github.com/bigcommerce/checkout-sdk-js/commit/4a96115e42a35c5b096249f4c76b34417a0798e3))\n\n### [1.285.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.285.1...v1.285.2) (2022-09-15)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1541 remove unnecessaru paypal commerce button strategy code ([#1599](https://github.com/bigcommerce/checkout-sdk-js/issues/1599)) ([a6dab41](https://github.com/bigcommerce/checkout-sdk-js/commit/a6dab41b1bbe2444c723e4c744521cf69ccc0f49))\n\n### [1.285.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.285.0...v1.285.1) (2022-09-15)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-106 Added a catch in case an exception occurs when confirming the payment using 3DS2 ([#1576](https://github.com/bigcommerce/checkout-sdk-js/issues/1576)) ([c60f7af](https://github.com/bigcommerce/checkout-sdk-js/commit/c60f7affc6f7506d785178051c1fa294f1b6b153))\n\n## [1.285.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.284.2...v1.285.0) (2022-09-15)\n\n\n### Features\n\n* **payment:** INT-5494 Worldpayaccess - Support vaulting ([#1584](https://github.com/bigcommerce/checkout-sdk-js/issues/1584)) ([c441bd8](https://github.com/bigcommerce/checkout-sdk-js/commit/c441bd8967f5becf33c3bf5faa956470c8f44e9c))\n\n### [1.284.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.284.1...v1.284.2) (2022-09-13)\n\n\n### Bug Fixes\n\n* **payment:** ADYEN-540 fixed adyen 3ds2 challenge on googlepay ([3b2bec4](https://github.com/bigcommerce/checkout-sdk-js/commit/3b2bec451615fbaecdeab92ea6f1381b02707c78))\n\n### [1.284.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.284.0...v1.284.1) (2022-09-12)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1538 switched PayPalCommerce common button strategy with V2 and removed old implementation ([#1570](https://github.com/bigcommerce/checkout-sdk-js/issues/1570)) ([2b033fd](https://github.com/bigcommerce/checkout-sdk-js/commit/2b033fdd4b95c913824e9d4a2df682814fb2a759))\n\n## [1.284.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.283.1...v1.284.0) (2022-09-09)\n\n\n### Features\n\n* **checkout:** STRF-9858 Bodl Service: Checkout Begin and Order Purchased ([#1587](https://github.com/bigcommerce/checkout-sdk-js/issues/1587)) ([1e7e054](https://github.com/bigcommerce/checkout-sdk-js/commit/1e7e0546d2f24e7f1fb37a0fd42b84d59f40cf57))\n\n### [1.283.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.283.0...v1.283.1) (2022-09-08)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-000 Remove token strings from test files ([#1589](https://github.com/bigcommerce/checkout-sdk-js/issues/1589)) ([164bbaa](https://github.com/bigcommerce/checkout-sdk-js/commit/164bbaa961ca306a3c59719fc986d747a8b0334a))\n\n## [1.283.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.282.0...v1.283.0) (2022-09-08)\n\n\n### Features\n\n* **payment:** PAYPAL-1474 added PayPalCommerceInlineCheckoutButtonStrategy ([#1494](https://github.com/bigcommerce/checkout-sdk-js/issues/1494)) ([d5003d3](https://github.com/bigcommerce/checkout-sdk-js/commit/d5003d36a3b6103b65979e1eaec2171ea55eb227))\n\n## [1.282.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.281.2...v1.282.0) (2022-09-07)\n\n\n### Features\n\n* **payment:** INT-6310 added bank of new zealand strategy ([#1530](https://github.com/bigcommerce/checkout-sdk-js/issues/1530)) ([c696a22](https://github.com/bigcommerce/checkout-sdk-js/commit/c696a22411e8443526a7a3d144a039a775ec6989))\n\n### [1.281.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.281.1...v1.281.2) (2022-09-07)\n\n### [1.281.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.281.0...v1.281.1) (2022-09-05)\n\n\n### Bug Fixes\n\n* **payment:** INT-6328 Bluesnap open a new tab insted of using iframe to complete order ([#1578](https://github.com/bigcommerce/checkout-sdk-js/issues/1578)) ([701d09b](https://github.com/bigcommerce/checkout-sdk-js/commit/701d09bdf388128aab900160f26f69df74085305))\n\n## [1.281.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.280.4...v1.281.0) (2022-09-05)\n\n\n### Features\n\n* **payment:** INT-6407 AmazonPayV2: Add the new `estimatedOrderAmount` parameter ([#1555](https://github.com/bigcommerce/checkout-sdk-js/issues/1555)) ([8defc3b](https://github.com/bigcommerce/checkout-sdk-js/commit/8defc3bcf099a3caac9ebb26a97716a6f2a73e07))\n\n\n### Bug Fixes\n\n* **payment:** INT-6115 Payment with hosted credit card ([#1583](https://github.com/bigcommerce/checkout-sdk-js/issues/1583)) ([a491acf](https://github.com/bigcommerce/checkout-sdk-js/commit/a491acf699e86fd52e1ee45e4125e463c002e451))\n\n### [1.280.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.280.3...v1.280.4) (2022-08-30)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-130 Stripe UPE making postal code not always required to make purchase ([#1565](https://github.com/bigcommerce/checkout-sdk-js/issues/1565)) ([6e0bb16](https://github.com/bigcommerce/checkout-sdk-js/commit/6e0bb1676647600da55b776b832d1bb3626f4079))\n\n### [1.280.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.280.2...v1.280.3) (2022-08-26)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-000 upgrade @braintree/browser-detection from 1.12.1 to 1.14.0 ([#1571](https://github.com/bigcommerce/checkout-sdk-js/issues/1571)) ([108c44d](https://github.com/bigcommerce/checkout-sdk-js/commit/108c44da2e66c792c46b88b37f88acd1e96746ac))\n* **common:** CHECKOUT-000 upgrade core-js from 3.23.4 to 3.24.0 ([#1572](https://github.com/bigcommerce/checkout-sdk-js/issues/1572)) ([c820f3d](https://github.com/bigcommerce/checkout-sdk-js/commit/c820f3dfb8681e5950d3542fb1d7225160e35ddf))\n* **common:** CHECKOUT-000 upgrade local-storage-fallback from 4.1.1 to 4.1.2 ([#1574](https://github.com/bigcommerce/checkout-sdk-js/issues/1574)) ([24b72c5](https://github.com/bigcommerce/checkout-sdk-js/commit/24b72c5f7409b2bd7ce8c8a94cf4f3f2389f9b3b))\n* **common:** CHECKOUT-000 upgrade reselect from 4.1.5 to 4.1.6 ([#1573](https://github.com/bigcommerce/checkout-sdk-js/issues/1573)) ([c7c49e8](https://github.com/bigcommerce/checkout-sdk-js/commit/c7c49e8cb3ab88f7b5736bb5e084b0efffd90f5b))\n* **payment:** PAYPAL-1639 fixed paypal commerce zoid issue ([#1577](https://github.com/bigcommerce/checkout-sdk-js/issues/1577)) ([2e993d3](https://github.com/bigcommerce/checkout-sdk-js/commit/2e993d3158c038cf07bb1a1b0969588d67b3a640))\n\n### [1.280.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.280.1...v1.280.2) (2022-08-24)\n\n\n### Bug Fixes\n\n* **payment:** INT-6392 [Mollie] Klarna shopper are able to place orders with digital items through klarna pay later and slice it when them are added via coupon ([#1558](https://github.com/bigcommerce/checkout-sdk-js/issues/1558)) ([5cb129c](https://github.com/bigcommerce/checkout-sdk-js/commit/5cb129c76fe58a572659da96d32ac37ed5a62e1f))\n\n### [1.280.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.280.0...v1.280.1) (2022-08-22)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-0000 updated paypal button rendering implementation in PayPalCommerceCreditButtonStrategy ([#1575](https://github.com/bigcommerce/checkout-sdk-js/issues/1575)) ([dee1b67](https://github.com/bigcommerce/checkout-sdk-js/commit/dee1b67f2a0005fdd8d61a5978ab5b6de57f7e44))\n\n## [1.280.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.279.3...v1.280.0) (2022-08-18)\n\n\n### Features\n\n* **payment:** PAYPAL-1386 added PayPalCommerceCredit checkout button strategy ([#1557](https://github.com/bigcommerce/checkout-sdk-js/issues/1557)) ([14275b6](https://github.com/bigcommerce/checkout-sdk-js/commit/14275b662cf9a30b588dd17b1ab0366f43accba6))\n* **payment:** PAYPAL-1537 added PayPalCommerceV2ButtonStrategy ([#1562](https://github.com/bigcommerce/checkout-sdk-js/issues/1562)) ([69914e4](https://github.com/bigcommerce/checkout-sdk-js/commit/69914e489c315bf435c41d55ccfbbb8b4dc70c0b))\n\n### [1.279.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.279.2...v1.279.3) (2022-08-18)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-000 upgrade @bigcommerce/script-loader from 2.2.1 to 2.2.2 ([#1546](https://github.com/bigcommerce/checkout-sdk-js/issues/1546)) ([7b45285](https://github.com/bigcommerce/checkout-sdk-js/commit/7b45285b96de690bee7cd5e143df7a051a94a888))\n* **common:** CHECKOUT-000 upgrade @braintree/browser-detection from 1.11.0 to 1.12.1 ([#1543](https://github.com/bigcommerce/checkout-sdk-js/issues/1543)) ([cefcb92](https://github.com/bigcommerce/checkout-sdk-js/commit/cefcb92a7c19c708f1f824d0a172dd7569ee8a48))\n* **common:** CHECKOUT-000 upgrade @types/iframe-resizer from 3.5.6 to 3.5.9 ([#1544](https://github.com/bigcommerce/checkout-sdk-js/issues/1544)) ([fdaef89](https://github.com/bigcommerce/checkout-sdk-js/commit/fdaef89e875935690480d85ad832f4888e8d4174))\n* **common:** CHECKOUT-000 upgrade core-js from 3.20.1 to 3.23.4 ([#1542](https://github.com/bigcommerce/checkout-sdk-js/issues/1542)) ([6082419](https://github.com/bigcommerce/checkout-sdk-js/commit/6082419fcfb1665323794163371aa27c58f1bc9d))\n* **common:** CHECKOUT-000 upgrade query-string from 7.0.1 to 7.1.1 ([#1545](https://github.com/bigcommerce/checkout-sdk-js/issues/1545)) ([7a1fa61](https://github.com/bigcommerce/checkout-sdk-js/commit/7a1fa616712e3ca9429e4cc69dcda004817ba026))\n\n### [1.279.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.279.1...v1.279.2) (2022-08-16)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1611 removed PAYPAL-1149.braintree-new-card-below-totals-banner-placement experiment ([#1564](https://github.com/bigcommerce/checkout-sdk-js/issues/1564)) ([52ca958](https://github.com/bigcommerce/checkout-sdk-js/commit/52ca9583bd641fc1ad8b25b9b864f4ca8d8bdd19))\n\n### [1.279.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.279.0...v1.279.1) (2022-08-16)\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-53 Give more information on payment authentication with 3ds failure error message ([#1488](https://github.com/bigcommerce/checkout-sdk-js/issues/1488)) ([80d6f4a](https://github.com/bigcommerce/checkout-sdk-js/commit/80d6f4acd9ed6a39f0190fe608d36ffe01fb683c))\n\n## [1.279.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.278.1...v1.279.0) (2022-08-16)\n\n\n### Features\n\n* **payment:** INT-6342 fix klarna issue adding klarna v1 payment_method ([#1522](https://github.com/bigcommerce/checkout-sdk-js/issues/1522)) ([b2097c9](https://github.com/bigcommerce/checkout-sdk-js/commit/b2097c9402d3f13fea5ff52039035a49967ca46a))\n\n### [1.278.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.278.0...v1.278.1) (2022-08-13)\n\n## [1.278.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.277.0...v1.278.0) (2022-08-12)\n\n\n### Features\n\n* **payment:** INT-6115 Worldpay - Allow to pay ([a185678](https://github.com/bigcommerce/checkout-sdk-js/commit/a185678c830f5f07ba1271e03c063abd237db30c))\n* **payment:** INT-6115 Worldpay - animesh1987 | Comments ([f453fef](https://github.com/bigcommerce/checkout-sdk-js/commit/f453fef0611358eb49c985e444959059439c2cfd))\n\n## [1.277.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.276.2...v1.277.0) (2022-08-12)\n\n\n### Features\n\n* **checkout-button:** INT-6023 Resize VCO button for Discover cards ([#1489](https://github.com/bigcommerce/checkout-sdk-js/issues/1489)) ([24e78e6](https://github.com/bigcommerce/checkout-sdk-js/commit/24e78e6d40944037611aaf7fe83b6059da574c8b))\n\n### [1.276.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.276.1...v1.276.2) (2022-08-12)\n\n\n### Bug Fixes\n\n* **payment:** INT-5854 [Mollie] Klarna is not available if cart contains digital products ([#1510](https://github.com/bigcommerce/checkout-sdk-js/issues/1510)) ([9077b3e](https://github.com/bigcommerce/checkout-sdk-js/commit/9077b3e05d4eda9e01ae7f855a07e3caee90ee1e))\n\n### [1.276.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.276.0...v1.276.1) (2022-08-10)\n\n## [1.276.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.275.1...v1.276.0) (2022-08-10)\n\n\n### Features\n\n* **checkout:** STRF-9829 Add hidePriceFromGuests to StoreConfig interface ([#1521](https://github.com/bigcommerce/checkout-sdk-js/issues/1521)) ([b31963b](https://github.com/bigcommerce/checkout-sdk-js/commit/b31963bdeaa8cadca8acec9113417b188989203c))\n\n\n### Bug Fixes\n\n* **order:** CHECKOUT-000 update order consignments interface ([#1552](https://github.com/bigcommerce/checkout-sdk-js/issues/1552)) ([4644e37](https://github.com/bigcommerce/checkout-sdk-js/commit/4644e3784f6be26a476ddd0850c713382421cb1e))\n\n### [1.275.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.275.0...v1.275.1) (2022-08-09)\n\n## [1.275.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.274.0...v1.275.0) (2022-08-09)\n\n\n### Features\n\n* **payment:** INT-6128 AmazonPayV2: Introduce the new API V2 config ([#1502](https://github.com/bigcommerce/checkout-sdk-js/issues/1502)) ([11bbe8b](https://github.com/bigcommerce/checkout-sdk-js/commit/11bbe8b4ec82d063cc13d9fdf3d8f59c282b7109))\n\n## [1.274.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.273.0...v1.274.0) (2022-08-08)\n\n\n### Features\n\n* **checkout:** CHECKOUT-6781 Point to interfaces extracted from integration packages ([d12f024](https://github.com/bigcommerce/checkout-sdk-js/commit/d12f024a3dc53db847900f8e3d87d8c4b88ee031))\n\n\n### Bug Fixes\n\n* **payment:** STRIPE-51 set a stored card as default during checkout ([#1498](https://github.com/bigcommerce/checkout-sdk-js/issues/1498)) ([d929a2d](https://github.com/bigcommerce/checkout-sdk-js/commit/d929a2d20cd424a4a88430a8571b7ab5e3dfff3d))\n\n## [1.273.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.272.3...v1.273.0) (2022-08-03)\n\n\n### Features\n\n* **payment:** ADYEN-539 added vaulting card validation ([32d846b](https://github.com/bigcommerce/checkout-sdk-js/commit/32d846b684e9e240900f6dbf05dc6e1c2f2d5f5a))\n\n### [1.272.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.272.2...v1.272.3) (2022-08-03)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-0000 upgrade @babel/polyfill from 7.4.4 to 7.12.1 ([#1516](https://github.com/bigcommerce/checkout-sdk-js/issues/1516)) ([e3eb94b](https://github.com/bigcommerce/checkout-sdk-js/commit/e3eb94b8163e669fc92e48a750f01a8ac0212094))\n* **common:** CHECKOUT-0000 upgrade @bigcommerce/request-sender from 1.0.3 to 1.2.1 ([#1533](https://github.com/bigcommerce/checkout-sdk-js/issues/1533)) ([59aeeeb](https://github.com/bigcommerce/checkout-sdk-js/commit/59aeeebbbf4552479dbfbef58feb96349d3fe771))\n* **common:** CHECKOUT-0000 upgrade @types/lodash from 4.14.178 to 4.14.182 ([#1531](https://github.com/bigcommerce/checkout-sdk-js/issues/1531)) ([23e09e6](https://github.com/bigcommerce/checkout-sdk-js/commit/23e09e63280e25cfc38a82d5ab58305a90175ad6))\n* **common:** CHECKOUT-0000 upgrade iframe-resizer from 3.6.2 to 3.6.6 ([#1532](https://github.com/bigcommerce/checkout-sdk-js/issues/1532)) ([2935623](https://github.com/bigcommerce/checkout-sdk-js/commit/29356236ae5be2b8a38a086bdae9caef8104a416))\n\n### [1.272.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.272.1...v1.272.2) (2022-08-03)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-0000 upgrade rxjs from 6.5.3 to 6.6.7 ([#1515](https://github.com/bigcommerce/checkout-sdk-js/issues/1515)) ([4969178](https://github.com/bigcommerce/checkout-sdk-js/commit/4969178f89c597c710aaf1a4a1f55d693700c95e))\n\n### [1.272.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.272.0...v1.272.1) (2022-08-02)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-8045 Fix form fields parameter name for PPSDK redirect ([003ab9e](https://github.com/bigcommerce/checkout-sdk-js/commit/003ab9e145c99234666e5a3c48f2f1e69e7777bd))\n\n## [1.272.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.271.3...v1.272.0) (2022-08-02)\n\n\n### Features\n\n* **checkout:** CHECKOUT-6781 Generate new enum from existing enums ([779f3f5](https://github.com/bigcommerce/checkout-sdk-js/commit/779f3f5f891b55a05b0d3550f456cde1aa075098))\n\n\n### Code Refactoring\n\n* **payment:** CHECKOUT-6781 Remove unnecessary exports ([40990c2](https://github.com/bigcommerce/checkout-sdk-js/commit/40990c205559327155dfec4ca9d6aa0e72005587))\n\n### [1.271.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.271.2...v1.271.3) (2022-07-28)\n\n### [1.271.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.271.1...v1.271.2) (2022-07-28)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-6781 Revert type exports ([#1526](https://github.com/bigcommerce/checkout-sdk-js/issues/1526)) ([6ea0c76](https://github.com/bigcommerce/checkout-sdk-js/commit/6ea0c7663ed4cf821d7a56963d522fef4facbd05))\n\n### [1.271.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.271.0...v1.271.1) (2022-07-28)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-6781 Add missing exports ([3e9bec0](https://github.com/bigcommerce/checkout-sdk-js/commit/3e9bec04acc8819b7dade69e176f6b0f5fb2b1e2))\n* **checkout:** CHECKOUT-6781 Fix incorrect file path ([3718554](https://github.com/bigcommerce/checkout-sdk-js/commit/37185542ff8b04002ad29c14c2f0477f17cad0e1))\n* **checkout:** CHECKOUT-6781 Fix member pattern for button strategies ([fcc22bc](https://github.com/bigcommerce/checkout-sdk-js/commit/fcc22bc1534bbcb54ffdb0fccc19b91a3ae519db))\n\n\n### Code Refactoring\n\n* **common:** CHECKOUT-6781 Remove redundant logs ([0fc2cf5](https://github.com/bigcommerce/checkout-sdk-js/commit/0fc2cf5807496accc23970ebebf53a4a131a9f12))\n\n## [1.271.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.270.0...v1.271.0) (2022-07-26)\n\n\n### Features\n\n* **checkout:** CHECKOUT-6780 Use Nx plugin to generate source files so that payment integration packages can be automatically registered ([9c8298a](https://github.com/bigcommerce/checkout-sdk-js/commit/9c8298abce327f6a78725370aca8a552bf59c0d9))\n\n## [1.270.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.269.0...v1.270.0) (2022-07-20)\n\n\n### Features\n\n* **checkout:** CHECKOUT-6780 Add Nx plugin for generating source files ([3ed6e31](https://github.com/bigcommerce/checkout-sdk-js/commit/3ed6e31b598ffbb55fbb881f4b6d63ff2b77998f))\n\n## [1.269.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.268.0...v1.269.0) (2022-07-20)\n\n\n### Features\n\n* **checkout:** CHECKOUT-6277 add eslint config to nx ([40d317d](https://github.com/bigcommerce/checkout-sdk-js/commit/40d317dbceb6829d29c44e01a7e0c2dbb73453cc))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1567 removed unnecessary method and class variable in PayPalCommerceVenmoButtonStrategy ([#1509](https://github.com/bigcommerce/checkout-sdk-js/issues/1509)) ([e50dee7](https://github.com/bigcommerce/checkout-sdk-js/commit/e50dee76eb1b1fc4b779f72f3f342e77271fa5a7))\n\n## [1.268.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.267.0...v1.268.0) (2022-07-19)\n\n\n### Features\n\n* **payment:** PAYPAL-1532 added PayPalCommerceAlternativeMethods checkout button strategy ([#1505](https://github.com/bigcommerce/checkout-sdk-js/issues/1505)) ([edf237f](https://github.com/bigcommerce/checkout-sdk-js/commit/edf237f23533b7ff8cb192e5860a987f63bc92b9))\n\n## [1.267.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.266.2...v1.267.0) (2022-07-18)\n\n\n### Features\n\n* **payment:** BOLT-255 remove experiment for last four digits type ([a8da3d7](https://github.com/bigcommerce/checkout-sdk-js/commit/a8da3d78855032498ac5892801dfb2e1aee3f50a))\n\n### [1.266.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.266.1...v1.266.2) (2022-07-15)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-0000 removed paypal commerce apms visibility on cart ([#1504](https://github.com/bigcommerce/checkout-sdk-js/issues/1504)) ([3cd204e](https://github.com/bigcommerce/checkout-sdk-js/commit/3cd204e1879d917f352c331d7b7e5649aa545ce6))\n\n### [1.266.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.266.0...v1.266.1) (2022-07-13)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-0000 fixed an issue with enable funding store configuration ([#1500](https://github.com/bigcommerce/checkout-sdk-js/issues/1500)) ([85281e1](https://github.com/bigcommerce/checkout-sdk-js/commit/85281e1b54c9f1aa7dfc9a1afd1184894ea25fa3))\n\n## [1.266.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.265.0...v1.266.0) (2022-07-13)\n\n\n### Features\n\n* **payment:** PAYPAL-1549 added script options configuration method for PayPalCommerce ([#1496](https://github.com/bigcommerce/checkout-sdk-js/issues/1496)) ([c59a76e](https://github.com/bigcommerce/checkout-sdk-js/commit/c59a76e3cf56fbb84d8563b84991390cab671479))\n\n## [1.265.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.264.2...v1.265.0) (2022-07-11)\n\n\n### Features\n\n* **payment:** INT-6276 Dispatch the thunk action to retrieve the payment method ([290e2fc](https://github.com/bigcommerce/checkout-sdk-js/commit/290e2fcaeef4a8beb5a937c30fb0c219fbee235a))\n\n### [1.264.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.264.1...v1.264.2) (2022-07-11)\n\n### [1.264.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.264.0...v1.264.1) (2022-07-06)\n\n## [1.264.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.263.0...v1.264.0) (2022-07-05)\n\n\n### Features\n\n* **payment:** INT-3926 StripeV3: Google Pay: Add BOPIS support ([#1483](https://github.com/bigcommerce/checkout-sdk-js/issues/1483)) ([ccde9b2](https://github.com/bigcommerce/checkout-sdk-js/commit/ccde9b27d86fa83c9bc8db59be695d386d4c545c))\n\n## [1.263.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.262.4...v1.263.0) (2022-07-05)\n\n\n### Features\n\n* **payment:** PAYPAL-1383 added PayPalCommerce Venmo button strategy ([#1485](https://github.com/bigcommerce/checkout-sdk-js/issues/1485)) ([6fb289f](https://github.com/bigcommerce/checkout-sdk-js/commit/6fb289fa252b5a21cdc0958dfa88a1121e200775))\n\n### [1.262.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.262.3...v1.262.4) (2022-07-05)\n\n### [1.262.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.262.2...v1.262.3) (2022-07-01)\n\n### [1.262.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.262.1...v1.262.2) (2022-06-30)\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1534 removed Braintree v2 button strategies names ([#1484](https://github.com/bigcommerce/checkout-sdk-js/issues/1484)) ([5533d96](https://github.com/bigcommerce/checkout-sdk-js/commit/5533d96002a119a5eaff92872b2cc9b21e38e6db))\n\n### [1.262.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.262.0...v1.262.1) (2022-06-30)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-6790 Fix phone number with apple pay ([#1481](https://github.com/bigcommerce/checkout-sdk-js/issues/1481)) ([3ca3720](https://github.com/bigcommerce/checkout-sdk-js/commit/3ca3720d7fbc8cdbeedb61538b9fe81214a99955))\n\n## [1.262.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.261.0...v1.262.0) (2022-06-30)\n\n\n### Features\n\n* **checkout:** CHECKOUT-6722 pass cart Id to SF/payments API endpoint ([91a6872](https://github.com/bigcommerce/checkout-sdk-js/commit/91a68729fbdd316755284ec542742d0505e0743a))\n\n## [1.261.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.260.0...v1.261.0) (2022-06-28)\n\n\n### Features\n\n* **payment:** INT-3925 StripeV3: BOPIS ([#1423](https://github.com/bigcommerce/checkout-sdk-js/issues/1423)) ([1c5fbf0](https://github.com/bigcommerce/checkout-sdk-js/commit/1c5fbf02f042125b64a839e4f32730ad4b16b8e0))\n\n## [1.260.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.259.0...v1.260.0) (2022-06-27)\n\n\n### Features\n\n* **payment:** PAYPAL-1505 removed BraintreePayPalV1Button strategy ([#1475](https://github.com/bigcommerce/checkout-sdk-js/issues/1475)) ([23978e0](https://github.com/bigcommerce/checkout-sdk-js/commit/23978e04a4d57c4761cc2f88391e45128aba4a0b))\n\n\n### Code Refactoring\n\n* **payment:** PAYPAL-1530 removed Progressive Onboarding feature from PayPalCommerce ([#1478](https://github.com/bigcommerce/checkout-sdk-js/issues/1478)) ([5ece6a8](https://github.com/bigcommerce/checkout-sdk-js/commit/5ece6a8afa8ab7c951a3b30e251acb1589f08253))\n\n## [1.259.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.258.1...v1.259.0) (2022-06-21)\n\n\n### Features\n\n* **checkout:** CHECKOUT-6765 Update checkout SDK to pass checkout Id to checkout settings api as query string ([c25f293](https://github.com/bigcommerce/checkout-sdk-js/commit/c25f2932aa6c3b1bfff59e6a99560773fdbd82c3))\n\n### [1.258.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.258.0...v1.258.1) (2022-06-20)\n\n## [1.258.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.257.0...v1.258.0) (2022-06-20)\n\n\n### Features\n\n* **payment:** STRIPE-9 [Stripe UPE] Add support for Klarna ([ca706a5](https://github.com/bigcommerce/checkout-sdk-js/commit/ca706a5e040f309d1f10ca0295a52e76e30587e9))\n\n## [1.257.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.256.0...v1.257.0) (2022-06-19)\n\n\n### Features\n\n* **checkout:** CHECKOUT-6722 pass cart Id to SF/payments API endpoint ([5f48c75](https://github.com/bigcommerce/checkout-sdk-js/commit/5f48c752a35b27ada9e4730f02d5b15ce27735d2))\n\n## [1.256.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.255.0...v1.256.0) (2022-06-17)\n\n\n### Features\n\n* **payment:** PAYPAL-1508 removed authentication insight check to make an ability to force trigger 3ds check on Braintree ([#1473](https://github.com/bigcommerce/checkout-sdk-js/issues/1473)) ([6c73d6c](https://github.com/bigcommerce/checkout-sdk-js/commit/6c73d6c2cdffbfd34d6a68bf0be6cff87c7f33ad))\n\n## [1.255.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.254.0...v1.255.0) (2022-06-16)\n\n\n### Features\n\n* **payment:** PAYPAL-1487 Add paypalcommercevenmo module ([3165559](https://github.com/bigcommerce/checkout-sdk-js/commit/3165559e139962a0cd07dfd212ca822aa64abd31))\n\n## [1.254.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.253.1...v1.254.0) (2022-06-16)\n\n\n### Features\n\n* **payment:** PAYMENTS-7524 Bump bigpay-client-js version to 5.18.0 to add human verification-related payload ([6e210c2](https://github.com/bigcommerce/checkout-sdk-js/commit/6e210c2577b2ba1123d67cd93c239495c7742dd5))\n* **payment:** PAYMENTS-7524 Change StepHandler and ContinueHandler callback parameters to be an object of multiple callbacks ([38267d8](https://github.com/bigcommerce/checkout-sdk-js/commit/38267d8a9a6b159b96bc7e0e481e6ce3ffd25151))\n* **payment:** PAYMENTS-7524 Human verification for PPSDK payment methods ([153c6c6](https://github.com/bigcommerce/checkout-sdk-js/commit/153c6c65e45eb8251010837a5b47ed73f0a1942b))\n\n### [1.253.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.253.0...v1.253.1) (2022-06-14)\n\n\n### Code Refactoring\n\n* **common:** CHECKOUT-6752 Refactor payment strategies to pass method as params ([4aa2e53](https://github.com/bigcommerce/checkout-sdk-js/commit/4aa2e53deaa969999d15de9eed9693b8e1a03d18))\n\n## [1.253.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.252.0...v1.253.0) (2022-06-14)\n\n\n### Features\n\n* **payment:** PAYPAL-1381 added braintreevenmo checkout button strategy ([#1463](https://github.com/bigcommerce/checkout-sdk-js/issues/1463)) ([659bb0d](https://github.com/bigcommerce/checkout-sdk-js/commit/659bb0d367f0cb7509da196344a9a28d0e28e0a1))\n\n## [1.252.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.251.0...v1.252.0) (2022-06-14)\n\n\n### Features\n\n* **payment:** PAYPAL-1382 added braintreepaypal checkout button strategy ([#1465](https://github.com/bigcommerce/checkout-sdk-js/issues/1465)) ([b2446ac](https://github.com/bigcommerce/checkout-sdk-js/commit/b2446ac68c4496c6a8935a1c284a7e747b00d13f))\n\n## [1.251.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.250.0...v1.251.0) (2022-06-14)\n\n\n### Features\n\n* **payment:** PAYPAL-1382 added _removeElement method instead of _hideElement in BraintreePayPalCreditButtonStrategy ([a9a5e8e](https://github.com/bigcommerce/checkout-sdk-js/commit/a9a5e8e71593cd668c0261e0e86f8309ac2c8fb2))\n* **payment:** PAYPAL-1382 added braintreepaypalcredit checkout button strategy ([82aa29e](https://github.com/bigcommerce/checkout-sdk-js/commit/82aa29e016c493602e7ef6144c66d663e9b966b6))\n* **payment:** PAYPAL-1382 cleared some code in BraintreePayPalCreditButtonStrategy ([33edc69](https://github.com/bigcommerce/checkout-sdk-js/commit/33edc6913baeb247ab6f396047e91326ae1f6334))\n* **payment:** PAYPAL-1382 updated checkout button method mapper ([b165152](https://github.com/bigcommerce/checkout-sdk-js/commit/b165152f173942b37f4875426e104095fdc64294))\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-1382 fixed an issue with braintreepaypalcreditv2 naming ([e061d19](https://github.com/bigcommerce/checkout-sdk-js/commit/e061d196fb975c8893272fdfda91de87e11dcd91))\n\n## [1.250.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.249.0...v1.250.0) (2022-06-08)\n\n\n### Features\n\n* **payment:** PAYPAL-1368 added checking required fields ([aa706e7](https://github.com/bigcommerce/checkout-sdk-js/commit/aa706e7d468ad5bc8e354e59e60d863c662d87d5))\n\n## [1.249.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.248.2...v1.249.0) (2022-06-06)\n\n\n### Features\n\n* **payment:** PAYPAL-0000 updated braintree paypal checkout button strategy to prepare strategies separation ([5d68a3d](https://github.com/bigcommerce/checkout-sdk-js/commit/5d68a3d2b30bb7b6ddaa363e42da30655fef6f6b))\n\n### [1.248.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.248.1...v1.248.2) (2022-06-03)\n\n\n### Bug Fixes\n\n* **payment:** INT-6055 Stripe UPE mount fields properly if previously selected ([34df8a6](https://github.com/bigcommerce/checkout-sdk-js/commit/34df8a6b0b224d694d4e717273c6d1dd82ac90b3))\n\n### [1.248.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.248.0...v1.248.1) (2022-06-01)\n\n## [1.248.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.247.1...v1.248.0) (2022-05-31)\n\n\n### Features\n\n* **checkout:** CHECKOUT-6703 post cartid for order creation API endpoint ([2f9bd11](https://github.com/bigcommerce/checkout-sdk-js/commit/2f9bd11cd66174dba481e5d8ede8f3757083c321))\n\n### [1.247.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.247.0...v1.247.1) (2022-05-30)\n\n\n### Bug Fixes\n\n* **payment:** INT-5826 AmazonPayV2: Provide a relative URL for `createCheckoutSession.url` ([d3d6951](https://github.com/bigcommerce/checkout-sdk-js/commit/d3d69518cb7a10d1e4ebb3e4fb3a3dd96e1108d6))\n\n## [1.247.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.246.5...v1.247.0) (2022-05-30)\n\n\n### Features\n\n* **payment:** PAYPAL-1466 fixed currency issue ([#1457](https://github.com/bigcommerce/checkout-sdk-js/issues/1457)) ([8146537](https://github.com/bigcommerce/checkout-sdk-js/commit/814653783547daf2fe7ec460b3e042eb1dfef930))\n\n### [1.246.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.246.4...v1.246.5) (2022-05-25)\n\n\n### Bug Fixes\n\n* **checkout:** ADYEN-480 adyen vaulting fix ([bdc90f1](https://github.com/bigcommerce/checkout-sdk-js/commit/bdc90f1c2f08939b65caa5da0b973082b04c5afb))\n\n### [1.246.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.246.3...v1.246.4) (2022-05-25)\n\n\n### Bug Fixes\n\n* **payment:** INT-5949 stripe UPE Don't hide the state field ([#1431](https://github.com/bigcommerce/checkout-sdk-js/issues/1431)) ([3194435](https://github.com/bigcommerce/checkout-sdk-js/commit/31944355a188a83e3ad2a37e3f67bf761d737bc6))\n\n### [1.246.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.246.2...v1.246.3) (2022-05-25)\n\n\n### Bug Fixes\n\n* **checkout:** IINT-5126 [MPGS] Add delay between calls for 3ds ([#1428](https://github.com/bigcommerce/checkout-sdk-js/issues/1428)) ([fa86745](https://github.com/bigcommerce/checkout-sdk-js/commit/fa86745d52168f440e513dc320e5623de6b4c75b))\n\n### [1.246.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.246.1...v1.246.2) (2022-05-23)\n\n### [1.246.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.246.0...v1.246.1) (2022-05-19)\n\n## [1.246.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.245.1...v1.246.0) (2022-05-19)\n\n\n### Features\n\n* **payment:** PAYPAL-1465 added extra check for braintree 3DS verification ([538616f](https://github.com/bigcommerce/checkout-sdk-js/commit/538616f8d96219961b8e0a313bb1d4a904a11be7))\n\n### [1.245.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.245.0...v1.245.1) (2022-05-19)\n\n\n### Bug Fixes\n\n* **payment:** INT-5481 Worldpay - Add worldpay initialize options ([82ae296](https://github.com/bigcommerce/checkout-sdk-js/commit/82ae2965f38784e111683795013d58d6b68d476d))\n\n## [1.245.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.244.2...v1.245.0) (2022-05-18)\n\n\n### Features\n\n* **payment:** PAYPAL-1409 added OXXO APM to paypalcommerce ([1a5ef86](https://github.com/bigcommerce/checkout-sdk-js/commit/1a5ef86926a14b41b2684753016141a0471ca9c3))\n* **payment:** PAYPAL-1420 add new creating flow for paypal oxxo ([fbf3f45](https://github.com/bigcommerce/checkout-sdk-js/commit/fbf3f45903afb5b9eafa4dbd7cdefa777a38fdad))\n* **payment:** PAYPAL-1420 changes after code review ([a9cc582](https://github.com/bigcommerce/checkout-sdk-js/commit/a9cc5825c1be3be2d42101a1ea87c188ad9bcf5d))\n\n### [1.244.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.244.1...v1.244.2) (2022-05-17)\n\n### [1.244.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.244.0...v1.244.1) (2022-05-16)\n\n## [1.244.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.243.0...v1.244.0) (2022-05-13)\n\n\n### Features\n\n* **checkout:** INT-5963 Check for feature flag when loading threeDS Script ([#1435](https://github.com/bigcommerce/checkout-sdk-js/issues/1435)) ([eeca0e4](https://github.com/bigcommerce/checkout-sdk-js/commit/eeca0e44937a1242e84c4897a48f8259767f4c09))\n\n## [1.243.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.242.2...v1.243.0) (2022-05-05)\n\n\n### Features\n\n* **payment:** INT-5754 Stripe UPE update payment intent ([8c7fc8e](https://github.com/bigcommerce/checkout-sdk-js/commit/8c7fc8ee9a1f386cf19473c1f906b190e3f29192))\n\n### [1.242.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.242.1...v1.242.2) (2022-05-02)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-6631 Sentry issue bugfix ([#1425](https://github.com/bigcommerce/checkout-sdk-js/issues/1425)) ([fe43048](https://github.com/bigcommerce/checkout-sdk-js/commit/fe4304877ca73e96a1d6d6cda92dd480f6730917))\n\n### [1.242.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.242.0...v1.242.1) (2022-05-02)\n\n## [1.242.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.241.0...v1.242.0) (2022-04-28)\n\n\n### Features\n\n* **payment:** PAYPAL-1177 added implementation for checking 3DS regulation and handle 3DS required error from backend ([3e3513e](https://github.com/bigcommerce/checkout-sdk-js/commit/3e3513e013909ef87ea91eafc5e1ac399a0986e1))\n\n## [1.241.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.240.5...v1.241.0) (2022-04-28)\n\n\n### Features\n\n* **checkout:** INT-5273 Non-Default Shipping Method Selection On Cart Page Is Not Persisted to Apple Pay ([cded620](https://github.com/bigcommerce/checkout-sdk-js/commit/cded620bee137dcb4947d134494429901983cab0))\n\n### [1.240.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.240.4...v1.240.5) (2022-04-27)\n\n\n### Bug Fixes\n\n* **checkout:** ADYEN-431 AdyenV3 component state fix ([4300c75](https://github.com/bigcommerce/checkout-sdk-js/commit/4300c75b6b29ddcd89f017d7b4111c46664f26ee))\n\n### [1.240.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.240.3...v1.240.4) (2022-04-27)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-6591 Update node version requirement to >=14.18 ([a24bc1c](https://github.com/bigcommerce/checkout-sdk-js/commit/a24bc1c39c65a4d90f5c091f25a0920f61d5199f))\n\n### [1.240.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.240.2...v1.240.3) (2022-04-26)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-6268 Update asset path ([#1417](https://github.com/bigcommerce/checkout-sdk-js/issues/1417)) ([8aad60f](https://github.com/bigcommerce/checkout-sdk-js/commit/8aad60ff2fffa02d9caa1c20660ffe0718d901aa))\n\n### [1.240.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.240.1...v1.240.2) (2022-04-26)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-6268 Check in array while loading config ([#1415](https://github.com/bigcommerce/checkout-sdk-js/issues/1415)) ([3ba71c6](https://github.com/bigcommerce/checkout-sdk-js/commit/3ba71c65e408c9f138b24fa20c5fca9b9e161133))\n\n### [1.240.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.240.0...v1.240.1) (2022-04-21)\n\n\n### Bug Fixes\n\n* **payment:** INT-5821 Stripe UPE Error on redirect payments with hidden fields ([#1397](https://github.com/bigcommerce/checkout-sdk-js/issues/1397)) ([f568e6c](https://github.com/bigcommerce/checkout-sdk-js/commit/f568e6c0c8d6d8525e3a1cc6c38f0757ed1c105d))\n\n## [1.240.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.239.0...v1.240.0) (2022-04-19)\n\n\n### Features\n\n* **payment:** INT-5573 Add shopper locale to Mollie strategy ([#1399](https://github.com/bigcommerce/checkout-sdk-js/issues/1399)) ([a6c1e32](https://github.com/bigcommerce/checkout-sdk-js/commit/a6c1e320988602a0ee1a1ae5617e04f6ff32a741))\n\n## [1.239.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.238.2...v1.239.0) (2022-04-18)\n\n\n### Features\n\n* **payment:** PAYMENTS-7707 Bump bigpay-client for PPSDK payment endpoint ([2714d24](https://github.com/bigcommerce/checkout-sdk-js/commit/2714d24430f48f3224d7f1b5d32dfd0feefe7292))\n* **payment:** PAYMENTS-7707 Create PPSDK credit card payment substrategy ([775e17c](https://github.com/bigcommerce/checkout-sdk-js/commit/775e17c1b5a2241f12b6128ba8eacb0b0cf1764f))\n* **payment:** PAYMENTS-7707 Update hosted forms to handle PPSDK credit card payment responses ([2db757f](https://github.com/bigcommerce/checkout-sdk-js/commit/2db757fcc599d731cb68605a3248dc114c2495eb))\n\n### [1.238.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.238.1...v1.238.2) (2022-04-14)\n\n### [1.238.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.238.0...v1.238.1) (2022-04-14)\n\n\n### Bug Fixes\n\n* **shipping:** CHECKOUT-6422 Use union type for consignment assignment interface ([#1405](https://github.com/bigcommerce/checkout-sdk-js/issues/1405)) ([0647e6f](https://github.com/bigcommerce/checkout-sdk-js/commit/0647e6fb8c8a46ff5cb932ec148419d011cef952))\n\n## [1.238.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.237.3...v1.238.0) (2022-04-14)\n\n\n### Features\n\n* **payment:** INT-5060 Stripe UPE Look and Feel map theme styles to stripe appearance API ([2fd15b0](https://github.com/bigcommerce/checkout-sdk-js/commit/2fd15b0f217502a0773cec0c02a871a6459a9f45))\n\n### [1.237.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.237.2...v1.237.3) (2022-04-13)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-6563 Apple Pay in Cart does not load config ([#1402](https://github.com/bigcommerce/checkout-sdk-js/issues/1402)) ([dc66e45](https://github.com/bigcommerce/checkout-sdk-js/commit/dc66e45096b193d57f4e54a8d263dc210de4988e))\n\n### [1.237.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.237.1...v1.237.2) (2022-04-11)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-6071 Add apple pay style container class ([#1400](https://github.com/bigcommerce/checkout-sdk-js/issues/1400)) ([f643abf](https://github.com/bigcommerce/checkout-sdk-js/commit/f643abf528aaeb33a320b1ab43b95858f9f9fe9b))\n\n### [1.237.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.237.0...v1.237.1) (2022-04-07)\n\n\n### Bug Fixes\n\n* **payment:** BOLT-203 Incorrect type of last 4 card number digit ([24fb188](https://github.com/bigcommerce/checkout-sdk-js/commit/24fb188278732be703c347eb74cda65a4653cd9c))\n\n## [1.237.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.236.0...v1.237.0) (2022-04-07)\n\n\n### Features\n\n* **payment:** CHECKOUT-6264 Add payment integration service ([0618c41](https://github.com/bigcommerce/checkout-sdk-js/commit/0618c417c1d283963ae39a6a44fd098ffe26e399))\n* **shipping:** CHECKOUT-6422 Add address property to consignment interface ([#1386](https://github.com/bigcommerce/checkout-sdk-js/issues/1386)) ([1bbab84](https://github.com/bigcommerce/checkout-sdk-js/commit/1bbab8487f149811f8843857958cbcdb291aad4f))\n\n## [1.236.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.235.1...v1.236.0) (2022-04-07)\n\n\n### Features\n\n* **checkout:** INT-5126 [MPGS] Add  MPGS to vaulting supported providers ([9c5cbd8](https://github.com/bigcommerce/checkout-sdk-js/commit/9c5cbd85b505ac12f65754ec9919225d23d24fc6))\n* **checkout:** INT-5126 [MPGS] Add 3DS support to MPGS ([d7a8545](https://github.com/bigcommerce/checkout-sdk-js/commit/d7a85458db6bbe20071c9f51c0307bf6df84147c))\n* **checkout:** INT-5126 [MPGS] Add retry limit for AuthenticatePayer ([63704a0](https://github.com/bigcommerce/checkout-sdk-js/commit/63704a0b4f841f2683174d6b63c6e512bba5fe0e))\n* **checkout:** INT-5126 [MPGS] Add Unit Tests and small refactor ([2fca208](https://github.com/bigcommerce/checkout-sdk-js/commit/2fca208a2901104c3297bb0c7d38f43889574e78))\n* **checkout:** INT-5126 [MPGS] Minor Styling Changes ([fcf5382](https://github.com/bigcommerce/checkout-sdk-js/commit/fcf5382fe1a7ca478fd1c624c3ad60ddb4673f5b))\n* **payment:** INT-5498 add detach function to deinitialize ([c4067c7](https://github.com/bigcommerce/checkout-sdk-js/commit/c4067c745a44f9612fca4cf7170be154eb0afa59))\n\n### [1.235.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.235.0...v1.235.1) (2022-04-06)\n\n\n### Bug Fixes\n\n* **checkout:** ADYEN-454 AdyenV2 initialize interface fix ([cf8f135](https://github.com/bigcommerce/checkout-sdk-js/commit/cf8f1355164c58aef28bcee670e1ac9b4239c8f6))\n\n## [1.235.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.234.0...v1.235.0) (2022-04-04)\n\n\n### Features\n\n* **payment:** INT-5057 STRIPE UPE use vaulted card ([c78e600](https://github.com/bigcommerce/checkout-sdk-js/commit/c78e6007b709603f57a432a483cf0ad2fd01419f))\n\n\n### Bug Fixes\n\n* **checkout:** INT-5543 [CKO] Add token format support ([b4e0289](https://github.com/bigcommerce/checkout-sdk-js/commit/b4e02899d45fe5291dd8bb716c30e5ef4eeac67c))\n* **checkout:** INT-5543 [CKO] Implement interface for processors ([059f7ec](https://github.com/bigcommerce/checkout-sdk-js/commit/059f7ecdfc489c5ed34432cf07b408fcf31e5b26))\n* **checkout:** INT-5543 [CKO] Minor style changes ([1716cf5](https://github.com/bigcommerce/checkout-sdk-js/commit/1716cf5cb69665b645ede8eda2d48cbe6af4c3d0))\n* **checkout:** INT-5543 [CKO] Solve conflicts and change window replace ([4490aef](https://github.com/bigcommerce/checkout-sdk-js/commit/4490aef7d6786ce2efd1227c4e00dd43f1c915a9))\n* **checkout:** INT-5543 [CKO] Update to 3ds on Googlepay ([7b073a9](https://github.com/bigcommerce/checkout-sdk-js/commit/7b073a99f6383718a9062d435dc3aaa74e3aaf57))\n\n## [1.234.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.233.0...v1.234.0) (2022-03-30)\n\n\n### Features\n\n* **checkout:** ADYEN-399 AdyenV3 googlepay ([e347d8a](https://github.com/bigcommerce/checkout-sdk-js/commit/e347d8ad8df7c844ab57366ce28d65b76aae6299))\n\n## [1.233.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.232.2...v1.233.0) (2022-03-30)\n\n\n### Features\n\n* **payment:** INT-5572 Stripe UPE Hide Fields ([833c940](https://github.com/bigcommerce/checkout-sdk-js/commit/833c940a01d8bfbb8c404b32ffcf27cc5180c686))\n* **payment:** INT-5572 Stripe UPE string constants ([66e06c4](https://github.com/bigcommerce/checkout-sdk-js/commit/66e06c41aa4d0f8dc901b58f113beabfcaf7ef09))\n\n\n### Bug Fixes\n\n* **payment:** INT-5175 fixing redirect in googlepay using embedded checkout on customer section ([42c3bc6](https://github.com/bigcommerce/checkout-sdk-js/commit/42c3bc65f4130bc4a7f9cc21311c7abe7c3acbc4))\n\n### [1.232.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.232.1...v1.232.2) (2022-03-29)\n\n\n### Bug Fixes\n\n* **shipping:** CHECKOUT-0000 Throw error if no shipping options present ([#1389](https://github.com/bigcommerce/checkout-sdk-js/issues/1389)) ([670ea28](https://github.com/bigcommerce/checkout-sdk-js/commit/670ea28d6fcfc6d4a26d045967551268704f5b7c))\n\n### [1.232.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.232.0...v1.232.1) (2022-03-28)\n\n## [1.232.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.231.0...v1.232.0) (2022-03-24)\n\n\n### Features\n\n* **payment:** INT-5033 - INT-5053 [Stripe UPE] Add support for Giropay and Alipay ([#1361](https://github.com/bigcommerce/checkout-sdk-js/issues/1361)) ([2ed11b9](https://github.com/bigcommerce/checkout-sdk-js/commit/2ed11b9c99ae9276a8b8e0b054a2be7335a7897e))\n\n## [1.231.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.230.0...v1.231.0) (2022-03-23)\n\n\n### Features\n\n* **payment:** INT-5042 [Stripe UPE] Add support for Bancontact & iDeal ([#1356](https://github.com/bigcommerce/checkout-sdk-js/issues/1356)) ([3495d00](https://github.com/bigcommerce/checkout-sdk-js/commit/3495d00d7b9b534ea3869cda58a58bbd84b4787e))\n\n\n### Bug Fixes\n\n* **payment:** INT-5723 fix customers with saved credit cards unable to check out with 3ds ([#1371](https://github.com/bigcommerce/checkout-sdk-js/issues/1371)) ([4f3fe50](https://github.com/bigcommerce/checkout-sdk-js/commit/4f3fe50ce0df58aeedd6a54f0414925bc24877d8))\n\n## [1.230.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.229.0...v1.230.0) (2022-03-23)\n\n\n### Features\n\n* **payment:** INT-5040 Add GrabPay to StripeUPE ([#1350](https://github.com/bigcommerce/checkout-sdk-js/issues/1350)) ([dd41821](https://github.com/bigcommerce/checkout-sdk-js/commit/dd418217d2e233ea81ce1890c62549be8bc8fc6d))\n\n## [1.229.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.228.0...v1.229.0) (2022-03-23)\n\n\n### Features\n\n* **payment:** INT-5061 Stripe UPE localization ([#1357](https://github.com/bigcommerce/checkout-sdk-js/issues/1357)) ([35b8341](https://github.com/bigcommerce/checkout-sdk-js/commit/35b83410b980ed6d2a4a09704f99d5c632b25cb9))\n\n## [1.228.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.227.4...v1.228.0) (2022-03-22)\n\n\n### Features\n\n* **payment:** INT-5034 StripeUPE Add support for EPS ([#1348](https://github.com/bigcommerce/checkout-sdk-js/issues/1348)) ([ce342d9](https://github.com/bigcommerce/checkout-sdk-js/commit/ce342d94cef53d37d4e5b8b6ac137974dfc52ddb))\n\n### [1.227.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.227.3...v1.227.4) (2022-03-22)\n\n\n### Bug Fixes\n\n* **payment:** INT-5619 fix deinitialize to remove dom elements on mollie strategy ([#1369](https://github.com/bigcommerce/checkout-sdk-js/issues/1369)) ([8e863db](https://github.com/bigcommerce/checkout-sdk-js/commit/8e863db49f272abfc2f8b13f8626861482c82d47))\n\n### [1.227.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.227.2...v1.227.3) (2022-03-21)\n\n\n### Bug Fixes\n\n* **shipping:** CHECKOUT-6003 Fix issues found in testing pickup options implementation ([#1366](https://github.com/bigcommerce/checkout-sdk-js/issues/1366)) ([d5cfd22](https://github.com/bigcommerce/checkout-sdk-js/commit/d5cfd229b15a7548c916668a552a44a4fca3d137))\n\n### [1.227.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.227.1...v1.227.2) (2022-03-20)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-6125 Safari and Firefox focus loss bugfix ([#1373](https://github.com/bigcommerce/checkout-sdk-js/issues/1373)) ([e8f8f43](https://github.com/bigcommerce/checkout-sdk-js/commit/e8f8f438602e5efb5fae712495f2124a75b017da))\n\n### [1.227.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.227.0...v1.227.1) (2022-03-16)\n\n\n### Bug Fixes\n\n* **payment:** INT-5645 Openpay: Change `OpyError` message ([f1e734f](https://github.com/bigcommerce/checkout-sdk-js/commit/f1e734f92e69c7c5a7c146d40a04a15a73a51e73))\n\n## [1.227.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.226.0...v1.227.0) (2022-03-10)\n\n\n### Features\n\n* **checkout:** ADYEN-378 AdyenV3 module creation ([de64268](https://github.com/bigcommerce/checkout-sdk-js/commit/de64268aa1a21dc655161ab52088dbc6ce54b332))\n\n## [1.226.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.225.0...v1.226.0) (2022-03-10)\n\n\n### Features\n\n* **payment:** INT-4970 Stored Credit Cards - vaulting enabled ([1fcda16](https://github.com/bigcommerce/checkout-sdk-js/commit/1fcda1644967f346c93bf59c51af2e3a22004b80))\n\n## [1.225.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.224.0...v1.225.0) (2022-03-03)\n\n\n### Features\n\n* **payment:** INT-4970 bump bigpay-client for Opayo stored cards ([3619ab2](https://github.com/bigcommerce/checkout-sdk-js/commit/3619ab21e76ff0bee5b2cd2fc2e7ee0ba1b56491))\n\n## [1.224.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.223.1...v1.224.0) (2022-02-28)\n\n\n### Features\n\n* **shipping:** CHECKOUT-6003 Add radius unit type and update interface ([#1354](https://github.com/bigcommerce/checkout-sdk-js/issues/1354)) ([d67049a](https://github.com/bigcommerce/checkout-sdk-js/commit/d67049a6bfc37e9483b36a23154ed0ab9edf01eb))\n\n### [1.223.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.223.0...v1.223.1) (2022-02-28)\n\n## [1.223.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.222.0...v1.223.0) (2022-02-24)\n\n\n### Features\n\n* **payment:** INT-5090 Stripe UPE add handler for redirect methods ([693ab4e](https://github.com/bigcommerce/checkout-sdk-js/commit/693ab4e357f9e885b3b1cd21970a4e5010457c13))\n* **payment:** INT-5090 Stripe UPE SOFORT support ([4236bc1](https://github.com/bigcommerce/checkout-sdk-js/commit/4236bc1458fb74ec650bc24d9c065cd472df6aa5))\n* **payment:** INT-5156 Klarna add support for poland, portugal, ireland ([#1351](https://github.com/bigcommerce/checkout-sdk-js/issues/1351)) ([1045e27](https://github.com/bigcommerce/checkout-sdk-js/commit/1045e271fc40f95982fa9172576bc35448fce219))\n\n## [1.222.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.221.0...v1.222.0) (2022-02-21)\n\n\n### Features\n\n* **payment:** PAYPAL-1151 braintree venmo spb integration ([#1346](https://github.com/bigcommerce/checkout-sdk-js/issues/1346)) ([dbca991](https://github.com/bigcommerce/checkout-sdk-js/commit/dbca9919143260ae7a9626b124604b3412cdac23))\n\n## [1.221.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.220.0...v1.221.0) (2022-02-18)\n\n\n### Features\n\n* **payment:** INT-5467 Stripe UPE GooglePay ([a821b71](https://github.com/bigcommerce/checkout-sdk-js/commit/a821b718ef3bc15a3e5703e9aa6b1012bcc98df4))\n* **payment:** INT-5467 Stripe UPE GooglePay Checkout button and customer strategy ([a8ea005](https://github.com/bigcommerce/checkout-sdk-js/commit/a8ea005bd0f0632679cc4f499886d59cbd4e8256))\n* **payment:** INT-5467 Stripe UPE GooglePay PR feedback ([6eed391](https://github.com/bigcommerce/checkout-sdk-js/commit/6eed3918247a0c0683c232c34040ae91257b4907))\n\n## [1.220.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.219.0...v1.220.0) (2022-02-17)\n\n\n### Features\n\n* **shipping:** CHECKOUT-6003 Add method to fetch available shipping options ([#1337](https://github.com/bigcommerce/checkout-sdk-js/issues/1337)) ([2405886](https://github.com/bigcommerce/checkout-sdk-js/commit/2405886003e928596e43b91d1f51a43875984a10))\n\n## [1.219.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.218.0...v1.219.0) (2022-02-17)\n\n\n### Features\n\n* **payment:** PAYPAL-1282 New style object for PayPal APMs ([#1330](https://github.com/bigcommerce/checkout-sdk-js/issues/1330)) ([89ecb3f](https://github.com/bigcommerce/checkout-sdk-js/commit/89ecb3f86019be9ddeadfa5b0e9d256fc4a88418))\n\n## [1.218.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.217.0...v1.218.0) (2022-02-17)\n\n\n### Features\n\n* **payment:** INT-5384 Openpay: Add the learn more button widget ([6990849](https://github.com/bigcommerce/checkout-sdk-js/commit/69908496e5692611b12a60dae0b43b45591a4dc7))\n\n## [1.217.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.216.0...v1.217.0) (2022-02-14)\n\n\n### Features\n\n* **payment:** INT-4282 removing masterpass logic for square ([8118522](https://github.com/bigcommerce/checkout-sdk-js/commit/8118522d5dd008d38a3f5f58468fe59c3b0bc8d0))\n\n## [1.216.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.215.1...v1.216.0) (2022-02-10)\n\n\n### Features\n\n* **order:** INT-4776 Create a new field for the mandate reference ID ([#1220](https://github.com/bigcommerce/checkout-sdk-js/issues/1220)) ([e9005f5](https://github.com/bigcommerce/checkout-sdk-js/commit/e9005f56af5adb37322f19325e527f3b7b9e1500))\n\n### [1.215.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.215.0...v1.215.1) (2022-02-10)\n\n## [1.215.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.214.1...v1.215.0) (2022-02-08)\n\n\n### Features\n\n* **checkout:** CHECKOUT-6071 Update Apple Pay in Cart ([#1334](https://github.com/bigcommerce/checkout-sdk-js/issues/1334)) ([1dd8b0f](https://github.com/bigcommerce/checkout-sdk-js/commit/1dd8b0fc6e30459b1644a2a5f5e6bc323508a00e))\n\n### [1.214.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.214.0...v1.214.1) (2022-02-07)\n\n\n### Bug Fixes\n\n* **common:**  CHECKOUT-0000 upgrade core-js from 3.1.2 to 3.20.1 ([#1323](https://github.com/bigcommerce/checkout-sdk-js/issues/1323)) ([4d1e4cd](https://github.com/bigcommerce/checkout-sdk-js/commit/4d1e4cde447e9046876e2c04acbc34fa96d84268))\n* **common:** CHECKOUT-0000 upgrade @types/lodash from 4.14.139 to 4.14.178 ([#1324](https://github.com/bigcommerce/checkout-sdk-js/issues/1324)) ([78a3b65](https://github.com/bigcommerce/checkout-sdk-js/commit/78a3b652b3801dd9ffd0589db6f1d0f78ad00fb6))\n* **common:** CHECKOUT-0000 upgrade reselect from 4.0.0 to 4.1.5 ([#1327](https://github.com/bigcommerce/checkout-sdk-js/issues/1327)) ([c6df17f](https://github.com/bigcommerce/checkout-sdk-js/commit/c6df17fa06d8136263f021ee406a7be7df1536f8))\n\n## [1.214.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.213.1...v1.214.0) (2022-02-04)\n\n\n### Features\n\n* **payment:** INT-4969 add browser_info for Opayo ([b85353f](https://github.com/bigcommerce/checkout-sdk-js/commit/b85353fa4e84ef9ec1be66f10915b162958352da))\n* **payment:** INT-4969 add SagePayPayload type ([647e87f](https://github.com/bigcommerce/checkout-sdk-js/commit/647e87f3852ee778a8dd6bded84dbab68b3d5b88))\n* **payment:** INT-4969 add SagePayPayload type ([046e28d](https://github.com/bigcommerce/checkout-sdk-js/commit/046e28da021a1322c7f04c9fc63c2aeec746980c))\n* **payment:** INT-4969 add Unit Tests ([ddfa5a7](https://github.com/bigcommerce/checkout-sdk-js/commit/ddfa5a75958c99aa443fbfb5b1f56d43af52621a))\n* **payment:** INT-4969 remove SagePayPayload type ([c93499c](https://github.com/bigcommerce/checkout-sdk-js/commit/c93499cb858f6ba1116e3ac53a2fefbe046ad8d4))\n\n### [1.213.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.213.0...v1.213.1) (2022-02-03)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-6070 Update style of apple pay customer step button ([#1341](https://github.com/bigcommerce/checkout-sdk-js/issues/1341)) ([d4a3fd4](https://github.com/bigcommerce/checkout-sdk-js/commit/d4a3fd4a6569e8039c1b9bb1f71ba27a6ca71624))\n\n## [1.213.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.212.0...v1.213.0) (2022-02-03)\n\n\n### Features\n\n* **payment:** INT-4969 Bump bigpay-client dependency to add browser info for Opayo ([972e1bf](https://github.com/bigcommerce/checkout-sdk-js/commit/972e1bf4d267717a6323531b103e08a6c2791422))\n\n\n### Bug Fixes\n\n* **checkout:** INT-5409 Change error message when payment data is unavailable ([94cfe42](https://github.com/bigcommerce/checkout-sdk-js/commit/94cfe423d03ea9e454e15a2ffcc5a4abc3e08b61))\n\n## [1.212.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.211.0...v1.212.0) (2022-02-02)\n\n\n### Features\n\n* **shipping:** CHECKOUT-6004 Add pickup options to consignment interfaces ([#1332](https://github.com/bigcommerce/checkout-sdk-js/issues/1332)) ([d201e5d](https://github.com/bigcommerce/checkout-sdk-js/commit/d201e5dc2ef3c1612097ee4a60182aa92ae695d0))\n\n## [1.211.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.210.0...v1.211.0) (2022-01-20)\n\n\n### Features\n\n* **payments:** CHECKOUT-6070 Add apple pay customer strategy ([#1307](https://github.com/bigcommerce/checkout-sdk-js/issues/1307)) ([e0dcd53](https://github.com/bigcommerce/checkout-sdk-js/commit/e0dcd539d74d336364051e926673d2736324e49c))\n\n## [1.210.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.209.0...v1.210.0) (2022-01-20)\n\n\n### Features\n\n* **payment:** INT-5150 Delete experiment StripeV3 enable_reuse_payment_intent experiment ([678291b](https://github.com/bigcommerce/checkout-sdk-js/commit/678291b2e78982fb9e65b35bd7b8080d6b3f6645))\n\n\n### Bug Fixes\n\n* **payment:** INT-5402 Afterpay - Change the SDK URL to the newest one ([5f826da](https://github.com/bigcommerce/checkout-sdk-js/commit/5f826da38b7c900c518e8b00351ba8cdb212d70f))\n\n## [1.209.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.208.0...v1.209.0) (2022-01-18)\n\n\n### Features\n\n* **payment:** BOLT-135 multi-field component ([c234df0](https://github.com/bigcommerce/checkout-sdk-js/commit/c234df09b3e4623c4783f14953332955722de7ee))\n\n## [1.208.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.207.0...v1.208.0) (2022-01-17)\n\n\n### Features\n\n* **payment:** PAYPAL-1208 renamed paypal Fields to PaymentFields ([#1313](https://github.com/bigcommerce/checkout-sdk-js/issues/1313)) ([bdf01d1](https://github.com/bigcommerce/checkout-sdk-js/commit/bdf01d1622d54d990df8c1c91b0fcd9cd2106404))\n\n## [1.207.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.206.2...v1.207.0) (2022-01-17)\n\n\n### Features\n\n* **payment:** INT-5031 Stripe: Stripe UPE boilerplate ([#1295](https://github.com/bigcommerce/checkout-sdk-js/issues/1295)) ([f039e8b](https://github.com/bigcommerce/checkout-sdk-js/commit/f039e8b937dcb838006b51fde0ce9e49750b186b))\n\n### [1.206.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.206.1...v1.206.2) (2022-01-11)\n\n\n### Bug Fixes\n\n* **payment:** ADYEN-373 fix iDEAL payment ([efa76e8](https://github.com/bigcommerce/checkout-sdk-js/commit/efa76e8ba2adf88face5e3e4e4d1d1ebbc1c8764))\n\n### [1.206.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.206.0...v1.206.1) (2022-01-04)\n\n\n### Bug Fixes\n\n* **payment:** ADYEN-296 Card fields validation ([40b26f1](https://github.com/bigcommerce/checkout-sdk-js/commit/40b26f168b77adff3e11504733b9d4da722bf69a))\n\n## [1.206.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.205.1...v1.206.0) (2021-12-21)\n\n\n### Features\n\n* **checkout:** CHECKOUT-6248 Throw Custom Error When Tax Service Unavailable ([#1306](https://github.com/bigcommerce/checkout-sdk-js/issues/1306)) ([1e2455e](https://github.com/bigcommerce/checkout-sdk-js/commit/1e2455eb5fe91d876e99c458320e75158017bcdb))\n\n### [1.205.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.205.0...v1.205.1) (2021-12-19)\n\n\n### Bug Fixes\n\n* **payment:** INT-5166 CKO mapping for vaulted instrument ([fc02041](https://github.com/bigcommerce/checkout-sdk-js/commit/fc02041c785330cc02bba611cc42ef9673c12486))\n\n## [1.205.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.204.0...v1.205.0) (2021-12-16)\n\n\n### Features\n\n* **payment:** INT-4893 Add translations for errors from execute step ([afa9698](https://github.com/bigcommerce/checkout-sdk-js/commit/afa9698afe63fdd6b09e7cb97abc6a37ae4ed8e1))\n* **payment:** INT-4893 Retrieve initialization data from Humm ([b78a57d](https://github.com/bigcommerce/checkout-sdk-js/commit/b78a57d7e26963f5bb252f42e09b09bdf1e26ec4))\n\n## [1.204.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.203.0...v1.204.0) (2021-12-13)\n\n\n### Features\n\n* **payment:** BOLT-109 added extra check for transaction reference what comes from Bolt ([fccb9e7](https://github.com/bigcommerce/checkout-sdk-js/commit/fccb9e79e7ffc87c8323fe67721a4fe5e5a35cbd))\n\n## [1.203.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.202.0...v1.203.0) (2021-12-08)\n\n\n### Features\n\n* **payment:** BOLT-100 add error codes for Bolt fields ([cf9b5ec](https://github.com/bigcommerce/checkout-sdk-js/commit/cf9b5ec8e5a4103e1493b6267c407cc67c0b1285))\n* **payment:** BOLT-100 add error mesages for Bolt fields ([1090565](https://github.com/bigcommerce/checkout-sdk-js/commit/109056578c7943f4922b472cd761b0073c850060))\n\n## [1.202.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.201.2...v1.202.0) (2021-12-06)\n\n\n### Features\n\n* **payment:** INT-5000 Throw error when payment method isn't available ([#1286](https://github.com/bigcommerce/checkout-sdk-js/issues/1286)) ([893f1fc](https://github.com/bigcommerce/checkout-sdk-js/commit/893f1fca9e86a257be23b3803fdec91f291d884c))\n\n### [1.201.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.201.1...v1.201.2) (2021-12-03)\n\n\n### Bug Fixes\n\n* **checkout:** ADYEN-320 reset adyen component state on deinitialize ([e484781](https://github.com/bigcommerce/checkout-sdk-js/commit/e484781f8b1b5951e1d7fa7231f8e9177533aa1a))\n\n### [1.201.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.201.0...v1.201.1) (2021-12-02)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-6066 Remove 0 space characters ([#1300](https://github.com/bigcommerce/checkout-sdk-js/issues/1300)) ([83d7cc9](https://github.com/bigcommerce/checkout-sdk-js/commit/83d7cc9fae26dce7d515fbf66c2ef1f1a428587a))\n\n## [1.201.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.200.0...v1.201.0) (2021-12-02)\n\n\n### Features\n\n* **payment:** INT-4897 Humm - Add Humm strategy as external payment ([#1266](https://github.com/bigcommerce/checkout-sdk-js/issues/1266)) ([e13dc61](https://github.com/bigcommerce/checkout-sdk-js/commit/e13dc614ad61e3e54a41013d78363e288cc7cea8))\n\n## [1.200.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.199.1...v1.200.0) (2021-12-01)\n\n\n### Features\n\n* **payment:** CHECKOUT-6066 Add apple pay payment strategy ([#1297](https://github.com/bigcommerce/checkout-sdk-js/issues/1297)) ([d0558cc](https://github.com/bigcommerce/checkout-sdk-js/commit/d0558cc4f26623ffb4c68f05470d3360c1b44852))\n\n### [1.199.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.199.0...v1.199.1) (2021-11-30)\n\n## [1.199.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.198.0...v1.199.0) (2021-11-11)\n\n\n### Features\n\n* **payment:** INT-4909 Quadpay: Homologate with Zip's strategy ([#1279](https://github.com/bigcommerce/checkout-sdk-js/issues/1279)) ([a605b5d](https://github.com/bigcommerce/checkout-sdk-js/commit/a605b5d34b7cd9124c36da3ff600474e8ed4856e))\n\n## [1.198.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.197.0...v1.198.0) (2021-11-11)\n\n\n### Features\n\n* **payment:** INT-4909 Zip: Delete experiment INT-3824.zip_force_redirect_flow ([#1267](https://github.com/bigcommerce/checkout-sdk-js/issues/1267)) ([e70805e](https://github.com/bigcommerce/checkout-sdk-js/commit/e70805e8ba6174d70f9934f79b801eb3722f6aa9))\n\n## [1.197.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.196.1...v1.197.0) (2021-11-09)\n\n\n### Features\n\n* **payment:** INT-4646 Add Openpay payment strategy ([#1237](https://github.com/bigcommerce/checkout-sdk-js/issues/1237)) ([087976d](https://github.com/bigcommerce/checkout-sdk-js/commit/087976def11dc3d0c161b72e0b378972102a4c69))\n\n### [1.196.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.196.0...v1.196.1) (2021-11-04)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-7408 suppress repeated thrown errors when resuming a PPSDK payment ([#1281](https://github.com/bigcommerce/checkout-sdk-js/issues/1281)) ([74caf9d](https://github.com/bigcommerce/checkout-sdk-js/commit/74caf9dedc2ee26612105ff2ff591c4a93625726))\n\n## [1.196.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.195.0...v1.196.0) (2021-11-04)\n\n\n### Features\n\n* **payment:** CHECKOUT-6067 Filter applepay based on browser ([#1282](https://github.com/bigcommerce/checkout-sdk-js/issues/1282)) ([062d810](https://github.com/bigcommerce/checkout-sdk-js/commit/062d810f90593c64d1b5a3c849a6fbb401dc8dd2))\n\n## [1.195.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.194.1...v1.195.0) (2021-11-01)\n\n\n### Features\n\n* **payment:** INT-4917 Add logo property to PaymentMethodConfig interface ([#1272](https://github.com/bigcommerce/checkout-sdk-js/issues/1272)) ([1f0a2a5](https://github.com/bigcommerce/checkout-sdk-js/commit/1f0a2a54c423b2b2148b1312281e0430478c0567))\n\n### [1.194.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.194.0...v1.194.1) (2021-10-24)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-7390 use location.assign in PPSDK redirects to maintain correct browser history ([#1278](https://github.com/bigcommerce/checkout-sdk-js/issues/1278)) ([145b6d2](https://github.com/bigcommerce/checkout-sdk-js/commit/145b6d2ad8b10b0a2e0d464bfc552dfa3b455991))\n\n## [1.194.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.193.0...v1.194.0) (2021-10-21)\n\n\n### Features\n\n* **payment:** BOLT-78 changed background color of mounted Bolt payment field ([90f5443](https://github.com/bigcommerce/checkout-sdk-js/commit/90f54433f31b22a3cd158c5990f426c203ada3da))\n\n## [1.193.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.192.1...v1.193.0) (2021-10-21)\n\n\n### Features\n\n* **payment:** PAYPAL-1123 rounded amount on braintree ([#1271](https://github.com/bigcommerce/checkout-sdk-js/issues/1271)) ([d04c732](https://github.com/bigcommerce/checkout-sdk-js/commit/d04c732ea10d3f6356c312b4c5957d40ff9906b5))\n\n### [1.192.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.192.0...v1.192.1) (2021-10-13)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-1180 fixed paylater region issue ([#1269](https://github.com/bigcommerce/checkout-sdk-js/issues/1269)) ([6a8f6df](https://github.com/bigcommerce/checkout-sdk-js/commit/6a8f6df8652053cfe5d67f723872a8fee64cfe0a))\n\n## [1.192.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.191.0...v1.192.0) (2021-10-12)\n\n\n### Features\n\n* **payment:** BOLT-73 send orderId during payment creation for Bolt Full Ckeckout ([c35d325](https://github.com/bigcommerce/checkout-sdk-js/commit/c35d32554993a763fcd9258fa37de374d5057f43))\n\n## [1.191.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.190.2...v1.191.0) (2021-10-12)\n\n\n### Features\n\n* **payment:** INT-4891 Add support to remount compliance section for Digital River ([d9858de](https://github.com/bigcommerce/checkout-sdk-js/commit/d9858de64c8b6d309f70352eb2ee3f87209d1566))\n\n### [1.190.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.190.1...v1.190.2) (2021-10-11)\n\n\n### Bug Fixes\n\n* **payment:** INT-4885 Fixed \"select a different card\" button on googlepay ([f514618](https://github.com/bigcommerce/checkout-sdk-js/commit/f51461890431ab36138c4e1fbf4772e7eb14de60))\n\n### [1.190.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.190.0...v1.190.1) (2021-10-10)\n\n## [1.190.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.189.0...v1.190.0) (2021-10-08)\n\n\n### Features\n\n* **payment:** INT-4593 handle squareForm errors ([f9baee6](https://github.com/bigcommerce/checkout-sdk-js/commit/f9baee6fd59584708a421983393ce969c7974b92))\n\n## [1.189.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.188.1...v1.189.0) (2021-10-06)\n\n\n### Features\n\n* **payment:** INT-4231 deleting spinner functionality in amazonpay ([#1219](https://github.com/bigcommerce/checkout-sdk-js/issues/1219)) ([30cc04e](https://github.com/bigcommerce/checkout-sdk-js/commit/30cc04ecdd65150a2b6ce41270614cadba49f8ea))\n\n### [1.188.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.188.0...v1.188.1) (2021-10-05)\n\n\n### Bug Fixes\n\n* **payment:** ADYEN-253 disabled showing error modal on Adyen GooglePay 3ds ([f504dff](https://github.com/bigcommerce/checkout-sdk-js/commit/f504dff130a748cae1c3400c5c67fed7d1ae023f))\n\n## [1.188.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.187.1...v1.188.0) (2021-10-05)\n\n\n### Features\n\n* **payment:** PAYMENTS-7269 allow PPSDK payment methods to finalise in progress payments ([#1252](https://github.com/bigcommerce/checkout-sdk-js/issues/1252)) ([e6d02cc](https://github.com/bigcommerce/checkout-sdk-js/commit/e6d02ccc2b590763a8761237638c25166f3cf35f))\n* **payment:** PAYMENTS-7269 allow PPSDK payment methods to finalise in progress payments ([#1261](https://github.com/bigcommerce/checkout-sdk-js/issues/1261)) ([5d43fcc](https://github.com/bigcommerce/checkout-sdk-js/commit/5d43fcc1ba73d990c2a413f67adecf23cac4c7a2))\n\n### [1.187.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.187.0...v1.187.1) (2021-10-01)\n\n## [1.187.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.186.1...v1.187.0) (2021-09-30)\n\n\n### Features\n\n* **payment:** PAYMENTS-7270 skip PPSDK finalization when order is marked complete ([#1256](https://github.com/bigcommerce/checkout-sdk-js/issues/1256)) ([67c1a90](https://github.com/bigcommerce/checkout-sdk-js/commit/67c1a905447ce4283bbb1c38a27dab19ee7a30f4))\n\n### [1.186.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.186.0...v1.186.1) (2021-09-30)\n\n\n### Bug Fixes\n\n* **checkout:** ADYEN-260 fixed googlepay updates billing info, removed update of customer email ([53222a7](https://github.com/bigcommerce/checkout-sdk-js/commit/53222a7a10789bcc6ffdcb685be753a71c1ee92e))\n\n## [1.186.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.185.2...v1.186.0) (2021-09-30)\n\n\n### Features\n\n* **payment:** PAYPAL-1103 added paylater messaging for braintree on cart ([#1245](https://github.com/bigcommerce/checkout-sdk-js/issues/1245)) ([08b418a](https://github.com/bigcommerce/checkout-sdk-js/commit/08b418acec6d00feb34811f2c425a3bc1e7eb2e9))\n\n### [1.185.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.185.1...v1.185.2) (2021-09-29)\n\n### [1.185.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.185.0...v1.185.1) (2021-09-29)\n\n\n### Bug Fixes\n\n* **payment:** INT-4087 Add a flag to enable or disable the send back the client token ([2389370](https://github.com/bigcommerce/checkout-sdk-js/commit/238937068ad16526e6f58cf92b0b9497e2e1bd0f))\n* **payment:** INT-4087 Catch stripe exception to process 3ds when payment intent is updated on the banckend and confirm it ([5651c70](https://github.com/bigcommerce/checkout-sdk-js/commit/5651c70c85f753e600092412ee2aa409fe26d4cb))\n* **payment:** INT-4489 cko add supported method 'card' ([22f51fd](https://github.com/bigcommerce/checkout-sdk-js/commit/22f51fd32624d36ef0c6af3a2afdade00bdd8cb4))\n\n## [1.185.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.184.0...v1.185.0) (2021-09-29)\n\n\n### Features\n\n* **payment:** PAYPAL-972 added 3ds check for googlepaybraintree ([#1240](https://github.com/bigcommerce/checkout-sdk-js/issues/1240)) ([deaf0c5](https://github.com/bigcommerce/checkout-sdk-js/commit/deaf0c5749545e204fb8ca4e51e21df766defce4))\n\n\n### Bug Fixes\n\n* **payment:** INT-4698 doing post to checkout after completing visa checkout payment information ([#1232](https://github.com/bigcommerce/checkout-sdk-js/issues/1232)) ([9e524af](https://github.com/bigcommerce/checkout-sdk-js/commit/9e524af55a3b9511d688a3892dee409aef150baa))\n\n## [1.184.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.183.2...v1.184.0) (2021-09-27)\n\n\n### Features\n\n* **payment:** INT-4170 Do not use as keyword ([c749820](https://github.com/bigcommerce/checkout-sdk-js/commit/c749820a905852130ff0e5e325201f0f7dfdcf73))\n* **payment:** INT-4170 Mount hostedfields for TSV on StripeV3 ([fb635ea](https://github.com/bigcommerce/checkout-sdk-js/commit/fb635ea320a10f8979441cb93cdd87e15589e2a8))\n\n### [1.183.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.183.1...v1.183.2) (2021-09-24)\n\n### [1.183.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.183.0...v1.183.1) (2021-09-22)\n\n\n### Bug Fixes\n\n* **checkout:** ADYEN-260 fixed googlepay updates billing info, removed update of customer email ([efb29b4](https://github.com/bigcommerce/checkout-sdk-js/commit/efb29b449a308a3224ab252f38ed43c3b070fa3f))\n\n## [1.183.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.182.1...v1.183.0) (2021-09-21)\n\n\n### Features\n\n* **checkout:** CHECKOUT-5777 Send SDK version as a header for all SDK API requests ([#1242](https://github.com/bigcommerce/checkout-sdk-js/issues/1242)) ([1372f33](https://github.com/bigcommerce/checkout-sdk-js/commit/1372f3392cc2789221db6688c8aa866cc6771f80))\n\n\n### Bug Fixes\n\n* **payment:** INT-4674 forgetting checkout instead of signing out when using google pay ([#1215](https://github.com/bigcommerce/checkout-sdk-js/issues/1215)) ([c74b4ba](https://github.com/bigcommerce/checkout-sdk-js/commit/c74b4ba874b6965afda3341c3a9f7683b36d1562))\n\n### [1.182.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.182.0...v1.182.1) (2021-09-15)\n\n\n### Bug Fixes\n\n* **checkout:** INT-4798 Fix Moneris Hosted Field Validation ([8f81ff5](https://github.com/bigcommerce/checkout-sdk-js/commit/8f81ff5844a451f6feae08f9896c3ea98b24ccdf))\n* **checkout:** INT-4798 Use Lodash utils to validate fields ([be50ef2](https://github.com/bigcommerce/checkout-sdk-js/commit/be50ef25f9a74df18a9f73f05846c50f57878fdd))\n* **payment:** INT-4802 Moneris validate response before resolve ([#1228](https://github.com/bigcommerce/checkout-sdk-js/issues/1228)) ([f643b4a](https://github.com/bigcommerce/checkout-sdk-js/commit/f643b4a3abe46b60c8732ad9b7968f213cc9e9c3))\n\n## [1.182.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.181.1...v1.182.0) (2021-09-14)\n\n\n### Features\n\n* **payment:** BOLT-24 added account creation flag for Bolt Embedded One Click execution ([b23ae4a](https://github.com/bigcommerce/checkout-sdk-js/commit/b23ae4a4e126be2058a70317e5dc40600a7725ce))\n\n\n### Bug Fixes\n\n* **payment:** INT-4810 Forget checkout provider and reload payment methods - Clearpay ([#1234](https://github.com/bigcommerce/checkout-sdk-js/issues/1234)) ([d8e982e](https://github.com/bigcommerce/checkout-sdk-js/commit/d8e982e005183822b0e11148f0393f7a9d3eb144))\n\n### [1.181.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.181.0...v1.181.1) (2021-09-13)\n\n## [1.181.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.180.1...v1.181.0) (2021-09-08)\n\n\n### Features\n\n* **payment:** PAYPAL-954 Update Braintree web SDK version ([#1231](https://github.com/bigcommerce/checkout-sdk-js/issues/1231)) ([041828d](https://github.com/bigcommerce/checkout-sdk-js/commit/041828dd147023ea7665bc4e843c4fb9ff55e30e))\n\n### [1.180.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.180.0...v1.180.1) (2021-09-08)\n\n\n### Bug Fixes\n\n* **payment:** INT-4705 [Clearpay] display correct error message when amount is out of limits ([3b5ba0b](https://github.com/bigcommerce/checkout-sdk-js/commit/3b5ba0bcd17cbf9f28f148e414a49b5a0e086c68))\n* **payment:** PAYMENTS-7252 pass methodIds on to PPSDK endpoint without transformation ([#1233](https://github.com/bigcommerce/checkout-sdk-js/issues/1233)) ([c0b0d3a](https://github.com/bigcommerce/checkout-sdk-js/commit/c0b0d3ac877264e4d2a98890a849b3026b21e877))\n\n## [1.180.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.179.1...v1.180.0) (2021-09-02)\n\n\n### Features\n\n* **payment:** BOLT-23 embedded Bolt payment method ([8632cce](https://github.com/bigcommerce/checkout-sdk-js/commit/8632ccea1833dca7e64518562433ac64d089c32a))\n\n### [1.179.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.179.0...v1.179.1) (2021-09-01)\n\n\n### Bug Fixes\n\n* **checkout:** ADYEN-231 fixed adyen checkout form localization ([9f03081](https://github.com/bigcommerce/checkout-sdk-js/commit/9f03081580907046dd204c19f39c041905d2b54a))\n\n## [1.179.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.178.0...v1.179.0) (2021-08-31)\n\n\n### Features\n\n* **payment:** BOLT-49 removed unnecessary payment data nonce check for Bolt Full Checkout ([d825f8b](https://github.com/bigcommerce/checkout-sdk-js/commit/d825f8b61d8376bbb97337b8799e40ac9061af16))\n\n## [1.178.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.177.1...v1.178.0) (2021-08-30)\n\n\n### Features\n\n* **checkout:** PAYPAL-1111 Added APM check to paypalcommerce button integration ([204e6a3](https://github.com/bigcommerce/checkout-sdk-js/commit/204e6a318c381ef4e6936f1f73ef56f956c02296))\n* **checkout:** PAYPAL-1111 added SEPA APM integration to paypal commerce ([630d6ed](https://github.com/bigcommerce/checkout-sdk-js/commit/630d6ed84f4c542192f580836dbfd3ae43eb7815))\n\n### [1.177.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.177.0...v1.177.1) (2021-08-30)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-7221 add AUTHORIZATION and remove X-XSRF-TOKEN headers for PPSDK requests ([#1221](https://github.com/bigcommerce/checkout-sdk-js/issues/1221)) ([491150a](https://github.com/bigcommerce/checkout-sdk-js/commit/491150ae4800647292c0b093f202dbda07ebd69d))\n\n## [1.177.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.176.0...v1.177.0) (2021-08-30)\n\n\n### Features\n\n* **payment:** INT-4141 Improve css look and feel ([52c546f](https://github.com/bigcommerce/checkout-sdk-js/commit/52c546f9a215d3c501c152acdd8ef134b9317157))\n\n## [1.176.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.175.6...v1.176.0) (2021-08-27)\n\n\n### Features\n\n* **payment:** BOLT-19 added Bolt Embedded One Click Checkout implementation and add generic executePaymentProviderCheckout to customer strategy ([b43e620](https://github.com/bigcommerce/checkout-sdk-js/commit/b43e620af00563ff5bbdc03d8f051f38e9bb42a7))\n\n### [1.175.6](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.175.5...v1.175.6) (2021-08-26)\n\n\n### Bug Fixes\n\n* **checkout:** JIRA-5757 Fix Sign Out Button Not Working on Checkout … ([b6aaaf3](https://github.com/bigcommerce/checkout-sdk-js/commit/b6aaaf3058d8778d627f071fdb873f476160c1dc))\n* **checkout:** JIRA-5757 Fix Sign Out Button Not Working on Checkout … ([aa44412](https://github.com/bigcommerce/checkout-sdk-js/commit/aa444126b284661a85d940aa1d858ceed3063586))\n* **checkout:** JIRA-5757 Fix Sign Out Button Not Working on Checkout … ([6e4c14a](https://github.com/bigcommerce/checkout-sdk-js/commit/6e4c14a504b4c520fc24773f4f4d322f26129ebe))\n\n### [1.175.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.175.4...v1.175.5) (2021-08-25)\n\n\n### Bug Fixes\n\n* **payment:** INT-4594 [Afterpay] display correct error message when amount is out of limit ([434985c](https://github.com/bigcommerce/checkout-sdk-js/commit/434985c0e65a1eb6847a7d5d2179b4c88097f355))\n\n### [1.175.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.175.3...v1.175.4) (2021-08-23)\n\n\n### Bug Fixes\n\n* **payment:** BOLT-47 fixed an issue of throwing payment method error on initialization for Bolt Full Checkout flow ([32ae1e1](https://github.com/bigcommerce/checkout-sdk-js/commit/32ae1e1e1a014ef8da5fe6e3cc7db70200181f3f))\n\n### [1.175.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.175.2...v1.175.3) (2021-08-23)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-7214 fix PPSDK initialisation strategy casing ([#1211](https://github.com/bigcommerce/checkout-sdk-js/issues/1211)) ([c9944ff](https://github.com/bigcommerce/checkout-sdk-js/commit/c9944ff2e1e68aadb33079938236e270e58ba1f8))\n\n### [1.175.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.175.1...v1.175.2) (2021-08-19)\n\n\n### Bug Fixes\n\n* **payment:** INT-4672 Forget checkout provider and reload payment methods - Afterpay ([de40a43](https://github.com/bigcommerce/checkout-sdk-js/commit/de40a43c3eb8f22bbcad27781da879c219aa7eab))\n\n### [1.175.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.175.0...v1.175.1) (2021-08-17)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-7215 disable withCredentials on PPSDK xhr requests to BigPay ([#1212](https://github.com/bigcommerce/checkout-sdk-js/issues/1212)) ([e7ab9fd](https://github.com/bigcommerce/checkout-sdk-js/commit/e7ab9fd117f740f5800cbea51723f953515f8b81))\n\n## [1.175.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.174.0...v1.175.0) (2021-08-17)\n\n\n### Features\n\n* **payment:** CHECKOUT-5906 Payment step \"Name on Card\" of checkout requires label for screen readers ([72b98d0](https://github.com/bigcommerce/checkout-sdk-js/commit/72b98d05dc165911f593e11e51ecf47688e38406))\n* **payment:** INT-4456 Add CA/FR to klarna countries list ([e3e66a5](https://github.com/bigcommerce/checkout-sdk-js/commit/e3e66a5bd68f6ccaeb089242812b010810f7683a))\n\n## [1.174.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.173.0...v1.174.0) (2021-08-16)\n\n\n### Features\n\n* **checkout:** PAYPAL-1100 added paylater to enable-funding field on paypalcommerce checkout and buttons ([f021b81](https://github.com/bigcommerce/checkout-sdk-js/commit/f021b81befdc459db5963b3b1689e6bf4da86dfd))\n\n\n### Bug Fixes\n\n* **checkout:** DATA-7883 Fix Segment + GAEE issue ([0e490ef](https://github.com/bigcommerce/checkout-sdk-js/commit/0e490efe6326785bde5261772063510201b63e90))\n\n## [1.173.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.172.0...v1.173.0) (2021-08-12)\n\n\n### Features\n\n* **payment:** INT-4592 Added 3DS handler to SquareV2 ([a47016a](https://github.com/bigcommerce/checkout-sdk-js/commit/a47016a9dacba4eb93699d5c2e2e223160db265a))\n* **payment:** INT-4686 remove disabledPaymentMethod interface for DR ([2738bb9](https://github.com/bigcommerce/checkout-sdk-js/commit/2738bb9bef86e8ba5d1218f9232b70d2099e26f9))\n\n\n### Bug Fixes\n\n* **payment:** INT-4222 Add tests for type guard ([7a3a8e2](https://github.com/bigcommerce/checkout-sdk-js/commit/7a3a8e274a942ffa53fbde6beb9ae73be5ec8ffd))\n* **payment:** INT-4222 Code and test cleanup ([39452e9](https://github.com/bigcommerce/checkout-sdk-js/commit/39452e916844d276bea4a7f5677806449c688c2b))\n* **payment:** INT-4222 Test Cleanup ([1c29d3d](https://github.com/bigcommerce/checkout-sdk-js/commit/1c29d3ddc406d65c0a5e5553366207a72aeba580))\n* **payment:** INT-4222 Use default interface to avoid build errors ([5b73379](https://github.com/bigcommerce/checkout-sdk-js/commit/5b733794a0c8738436839db704ab3c38b5d3e103))\n\n## [1.172.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.171.0...v1.172.0) (2021-08-09)\n\n\n### Features\n\n* **payment:** BOLT-30 added some changes to bolt checkout execute method logic ([f08ecfa](https://github.com/bigcommerce/checkout-sdk-js/commit/f08ecfa8cef7127c2498363bce8a3048f69921de))\n\n## [1.171.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.170.0...v1.171.0) (2021-08-05)\n\n\n### Features\n\n* **payment:** INT-3946 added locale from browser on masterpass SRC ([b9a335d](https://github.com/bigcommerce/checkout-sdk-js/commit/b9a335d582b72f268d2d9082c6a52ebf1bbabeb8))\n\n\n### Bug Fixes\n\n* **payment:** INT-3946 missing semicolon ([60afc6e](https://github.com/bigcommerce/checkout-sdk-js/commit/60afc6e401bc4129eab1fe764926485c1e9c7821))\n* **payment:** INT-3946 PR requested changes ([c805d55](https://github.com/bigcommerce/checkout-sdk-js/commit/c805d55707df4df3cafcf65292b11e78b4476de4))\n* **payment:** INT-3946 removed unused variables ([f8f5f68](https://github.com/bigcommerce/checkout-sdk-js/commit/f8f5f68c7e4f2c1ccd5de360bd1d84bd00a7bc67))\n* **payment:** INT-3946 using supported locales on masterpass SRC ([b719bf8](https://github.com/bigcommerce/checkout-sdk-js/commit/b719bf8818f68e7cbdaaf085e4b3f7da063363b7))\n* **payment:** INT-3946 using supported locales on masterpass SRC ([6eaf14f](https://github.com/bigcommerce/checkout-sdk-js/commit/6eaf14f0f5b888c2da4cf1b3b037f028878938b2))\n* **payment:** INT-3946 using supported locales on masterpass SRC ([1b30227](https://github.com/bigcommerce/checkout-sdk-js/commit/1b302276571de56126de80a087c62edf890777af))\n\n## [1.170.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.169.3...v1.170.0) (2021-08-04)\n\n\n### Features\n\n* **payment:** INT-4584 - Refactor Quadpay uri data for redirect ([ac11929](https://github.com/bigcommerce/checkout-sdk-js/commit/ac1192971fd468066b401719f447e31e879302a7))\n* **payment:** INT-4585 - Refactor Zip uri data for redirect ([323372b](https://github.com/bigcommerce/checkout-sdk-js/commit/323372b8d712d80c9b6a649ac7add048ebdc4899))\n\n\n### Bug Fixes\n\n* **payment:** INT-4438 update SDK documentation for Digital River ([fa094fc](https://github.com/bigcommerce/checkout-sdk-js/commit/fa094fc3b4ab82d47f2ce901de337b05c472aa6d))\n* **payment:** INT-4480 Throws stripe error when user closes the auth modal on Stripe V3 ([6577e8a](https://github.com/bigcommerce/checkout-sdk-js/commit/6577e8a769b7bec8f5bb82793ba35fabc8fe29ed))\n\n### [1.169.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.169.2...v1.169.3) (2021-08-02)\n\n\n### Bug Fixes\n\n* **payment:** INT-4481 Success pay without the last name in the credit/debit card ([ab95b9e](https://github.com/bigcommerce/checkout-sdk-js/commit/ab95b9e693d57c3306bd8d5609f3037186a93490))\n\n### [1.169.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.169.1...v1.169.2) (2021-07-30)\n\n\n### Bug Fixes\n\n* **payment:** INT-4685 Orbital initializer added properly ([4546591](https://github.com/bigcommerce/checkout-sdk-js/commit/4546591f010a6f7577b3f7e7b85fa06b4a90a78a))\n\n### [1.169.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.169.0...v1.169.1) (2021-07-29)\n\n## [1.169.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.168.1...v1.169.0) (2021-07-29)\n\n\n### Features\n\n* **payment:** INT-4222 Add vaulting compatibility to Moneris ([dc318d7](https://github.com/bigcommerce/checkout-sdk-js/commit/dc318d72a2faa708066c59f07f9c23c98b01b94c))\n\n### [1.168.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.168.0...v1.168.1) (2021-07-27)\n\n\n### Bug Fixes\n\n* **payment:** INT-4598 handle vaulting Enable checkbox ([cee0198](https://github.com/bigcommerce/checkout-sdk-js/commit/cee01981b80a6d4ae1b84586b860d0168b83ace6))\n* **payment:** INT-4661 [Afterpay] get countryCode by shopperCurrency ([ca41447](https://github.com/bigcommerce/checkout-sdk-js/commit/ca41447c42bd4d199b9ae8908e6ad9a2345cf8ac))\n\n## [1.168.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.167.0...v1.168.0) (2021-07-23)\n\n\n### Features\n\n* **checkout:** PAYPAL-1057 added Venmo APM to paypal commerce ([e55f4d5](https://github.com/bigcommerce/checkout-sdk-js/commit/e55f4d5ee0511b4bde005aaa970498467d29beaa))\n\n## [1.167.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.166.0...v1.167.0) (2021-07-22)\n\n\n### Features\n\n* **payment:** PAYPAL-1090 added size property for paypalexpress button ([#1191](https://github.com/bigcommerce/checkout-sdk-js/issues/1191)) ([99daccf](https://github.com/bigcommerce/checkout-sdk-js/commit/99daccf6468ef65a063d151b97b465f61d45158e))\n\n## [1.166.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.165.0...v1.166.0) (2021-07-22)\n\n\n### Features\n\n* **payment:** PAYMENTS-7169 add resume payment ability to PPSDK strategy ([#1188](https://github.com/bigcommerce/checkout-sdk-js/issues/1188)) ([c874e0f](https://github.com/bigcommerce/checkout-sdk-js/commit/c874e0fbbd09503629c3c555c232cd3da08e6141))\n\n## [1.165.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.164.1...v1.165.0) (2021-07-18)\n\n\n### Features\n\n* **payment:** INT-4141 Make iframe border and background transparent ([4600855](https://github.com/bigcommerce/checkout-sdk-js/commit/46008559fef1bf6b3e9e88b9e71711102fa50bac))\n* **payment:** INT-4141 Update test ([c26f39a](https://github.com/bigcommerce/checkout-sdk-js/commit/c26f39a6a42ad2770c373075b8b7e57b35fa9e59))\n* **payment:** INT-4141 Use border: none instead border: transparent ([7a65022](https://github.com/bigcommerce/checkout-sdk-js/commit/7a650228cfcf5d7ca22230674c84b4b937af78fc))\n\n### [1.164.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.164.0...v1.164.1) (2021-07-13)\n\n\n### Bug Fixes\n\n* **payment:** INT-4087 Send the client token back to update the payment intent related for StripeV3 ([#1164](https://github.com/bigcommerce/checkout-sdk-js/issues/1164)) ([97417ab](https://github.com/bigcommerce/checkout-sdk-js/commit/97417ab13d00930158351e9480e404c9e187e623))\n\n## [1.164.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.163.0...v1.164.0) (2021-07-12)\n\n\n### Features\n\n* **payment:** PAYPAL-1026 fixed braintree button height ([#1169](https://github.com/bigcommerce/checkout-sdk-js/issues/1169)) ([67aa575](https://github.com/bigcommerce/checkout-sdk-js/commit/67aa575b20d0e17d0305fa41ca4d51cccd2e67e0))\n\n## [1.163.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.162.1...v1.163.0) (2021-07-12)\n\n\n### Features\n\n* **payment:** PAYMENTS-6811 map failure codes to RequestError error codes ([#1173](https://github.com/bigcommerce/checkout-sdk-js/issues/1173)) ([597ba5d](https://github.com/bigcommerce/checkout-sdk-js/commit/597ba5deebc0528586d591c2c2741d9534d98348))\n* **payment:** PAYMENTS-6814 add NonePaymentProcessor test ([#1176](https://github.com/bigcommerce/checkout-sdk-js/issues/1176)) ([8dc9e6f](https://github.com/bigcommerce/checkout-sdk-js/commit/8dc9e6f00a3b45fab2ef28cddff4d0bf89474c6e))\n\n### [1.162.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.162.0...v1.162.1) (2021-07-08)\n\n\n### Bug Fixes\n\n* **payment:** INT-4448 Braintree cardTypeChange event ([0ca0018](https://github.com/bigcommerce/checkout-sdk-js/commit/0ca0018f3e6125539c7397c7ccc742d3ab034285))\n\n## [1.162.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.161.0...v1.162.0) (2021-07-06)\n\n\n### Features\n\n* **payment:** PAYMENTS-6805 add core stepHandler to PPSDK strategy ([#1162](https://github.com/bigcommerce/checkout-sdk-js/issues/1162)) ([4ffed6f](https://github.com/bigcommerce/checkout-sdk-js/commit/4ffed6f2a468e255de2ac363176d6dc24d729d13))\n\n## [1.161.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.160.0...v1.161.0) (2021-07-05)\n\n\n### Features\n\n* **payment:** INT-4309 Adding additional action to Digital River ([b046460](https://github.com/bigcommerce/checkout-sdk-js/commit/b046460e16d851612a00c7c6f471cad492d2ea13))\n* **payment:** INT-4423 Set labels to Moneris iframe creation process ([208500c](https://github.com/bigcommerce/checkout-sdk-js/commit/208500c181a930f120073e13ae762c7ea0fca912))\n\n\n### Bug Fixes\n\n* **payment:** INT-4309 Addresing Ignacio feedback ([93197d6](https://github.com/bigcommerce/checkout-sdk-js/commit/93197d63cf7d4a4a03dfc62ba3b8e3aeb74fa772))\n* **payment:** INT-4309 Addresing Ignacio feedback ([e9e5adb](https://github.com/bigcommerce/checkout-sdk-js/commit/e9e5adb975ee9a5906e60ecd3db08818ff14c4ad))\n* **payment:** INT-4309 Addresing Ignacio feedback 2 ([4fff2a2](https://github.com/bigcommerce/checkout-sdk-js/commit/4fff2a210877765dfd3d427ef0314169b5c3657c))\n* **payment:** INT-4309 Updating Digital River unit tests ([72ad20a](https://github.com/bigcommerce/checkout-sdk-js/commit/72ad20a0900883a8f8d733ea33d9a1cf1d844287))\n\n## [1.160.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.159.0...v1.160.0) (2021-06-30)\n\n\n### Features\n\n* **payment:** INT-4342 added google pay on orbital ([6ef0eaa](https://github.com/bigcommerce/checkout-sdk-js/commit/6ef0eaac0e400fb42009ef6bebaa53b7d6dcdf84))\n\n## [1.159.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.158.1...v1.159.0) (2021-06-30)\n\n\n### Features\n\n* **common:** CHECKOUT-5892 Specify locale for default and fallback translations ([306bcb7](https://github.com/bigcommerce/checkout-sdk-js/commit/306bcb70ae4c24f17887c065d6d18bf700d00c2a))\n\n### [1.158.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.158.0...v1.158.1) (2021-06-23)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-5873 Fix path to copy previous releases from ([d5a16ed](https://github.com/bigcommerce/checkout-sdk-js/commit/d5a16ed422aa2f6a266075fd1bf5cfee2e0ea43a))\n\n## [1.158.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.157.1...v1.158.0) (2021-06-23)\n\n\n### Features\n\n* **common:** CHECKOUT-5873 Deploy compiled assets to GCS ([f87db6b](https://github.com/bigcommerce/checkout-sdk-js/commit/f87db6bb8e7549bf12a49fde3ac18e05093921b9))\n\n### [1.157.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.157.0...v1.157.1) (2021-06-22)\n\n\n### Bug Fixes\n\n* **payment:** INT-4266 Renew the nonce for Google Payment when the payment fails. ([c7b54bf](https://github.com/bigcommerce/checkout-sdk-js/commit/c7b54bfa74809f734d6b8a4513e0b74bfe2d819a))\n\n## [1.157.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.156.0...v1.157.0) (2021-06-22)\n\n\n### Features\n\n* **payment:** PAYMENTS-6807 extend PPSDK payment strategy ([#1150](https://github.com/bigcommerce/checkout-sdk-js/issues/1150)) ([5d3298a](https://github.com/bigcommerce/checkout-sdk-js/commit/5d3298aaccb0883d2f896b15570b985176c78b46))\n\n## [1.156.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.155.1...v1.156.0) (2021-06-08)\n\n\n### Features\n\n* **payment:** INT-4170 added hosted fields on Mollie verification field ([b487651](https://github.com/bigcommerce/checkout-sdk-js/commit/b487651d29984dbfcf022525d438a72191a8641c))\n\n### [1.155.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.155.0...v1.155.1) (2021-06-02)\n\n\n### Bug Fixes\n\n* **checkout:** PAYPAL-1055 change expected methodId from przelewy24 to p24 ([7405a6e](https://github.com/bigcommerce/checkout-sdk-js/commit/7405a6eea40b90780cb50c27c20227ea51692269))\n* **checkout:** PAYPAL-1055 removed buyer-country property from paypal commerce initialization ([bf2ff1a](https://github.com/bigcommerce/checkout-sdk-js/commit/bf2ff1ad874e7e79bb84ac1fbe395db045354f42))\n\n## [1.155.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.154.0...v1.155.0) (2021-06-01)\n\n\n### Features\n\n* **payment:** PAYPAL-863 Braintree: PayPal JS SDK Smart Buttons ([#1074](https://github.com/bigcommerce/checkout-sdk-js/issues/1074)) ([e32555a](https://github.com/bigcommerce/checkout-sdk-js/commit/e32555a902679f45b11332f7df8a62efec550d61))\n\n## [1.154.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.153.0...v1.154.0) (2021-06-01)\n\n\n### Features\n\n* **payment:** INT-4205 Add Moneris strategy ([fff5070](https://github.com/bigcommerce/checkout-sdk-js/commit/fff5070ed3062b1a1d1a4f8c6f25b786ad76d987))\n* **payment:** INT-4205 Cleanup Strategy and add additional tests ([73e7357](https://github.com/bigcommerce/checkout-sdk-js/commit/73e7357fd1fcf8790e7b2edeb6317d6ee631475f))\n\n## [1.153.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.152.0...v1.153.0) (2021-05-31)\n\n\n### Features\n\n* **payment:** INT-4242 Add Quadpay payment strategy ([95fc8c1](https://github.com/bigcommerce/checkout-sdk-js/commit/95fc8c105be374c8f97e30d343e9e7fe552e82a1))\n* **payment:** INT-4242 Create StorefrontPaymentRequestSender ([626e618](https://github.com/bigcommerce/checkout-sdk-js/commit/626e618a614ee9503188b42c21d77b45c7eabcaf))\n\n\n### Code Refactoring\n\n* **payment:** INT-4242 Quadpay code cleanup ([19d9480](https://github.com/bigcommerce/checkout-sdk-js/commit/19d9480dd105f9203206251ce3ef5ada65a7877e))\n\n## [1.152.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.151.0...v1.152.0) (2021-05-27)\n\n\n### Features\n\n* **payment:** INT-4310 resolving mexico review ([f4ce08b](https://github.com/bigcommerce/checkout-sdk-js/commit/f4ce08b5ffe9033d31d85f0d903878f971a192da))\n* **payment:** INT-4310 Update DR strategy to support vaulted instruments ([964130d](https://github.com/bigcommerce/checkout-sdk-js/commit/964130d945ac2c3ef411c8ab4951e52b8fef40f7))\n\n## [1.151.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.150.0...v1.151.0) (2021-05-24)\n\n\n### Features\n\n* **payment:** INT-4197 added test ([453974f](https://github.com/bigcommerce/checkout-sdk-js/commit/453974f555a90e21d7ab67dd5f021386a2e12821))\n* **payment:** INT-4197 added type and color parameters on googlepay checkout button ([34a5cec](https://github.com/bigcommerce/checkout-sdk-js/commit/34a5cec2bf4a90940a3bc5d31b29f9657e126e4c))\n\n## [1.150.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.149.0...v1.150.0) (2021-05-20)\n\n\n### Features\n\n* **checkout:** PAYPAL-1024 make APM work regardless of shopper geolocation ([73cad65](https://github.com/bigcommerce/checkout-sdk-js/commit/73cad654ec91e93a7eb48720e6c329330a1d6e10))\n\n## [1.149.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.148.0...v1.149.0) (2021-05-18)\n\n\n### Features\n\n* **payment:** PAYMENTS-6813 extend Payment Method type to cover PPSDK variants ([#1139](https://github.com/bigcommerce/checkout-sdk-js/issues/1139)) ([0be6fcf](https://github.com/bigcommerce/checkout-sdk-js/commit/0be6fcf897f0190baa4373366d906135e81088d0))\n\n## [1.148.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.147.1...v1.148.0) (2021-05-17)\n\n\n### Features\n\n* **payment:** PAYPAL-976 Paypal APM fields intagration was added ([b5266cf](https://github.com/bigcommerce/checkout-sdk-js/commit/b5266cf073a1f896d8a4844ad5607eb1799d2579))\n\n### [1.147.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.147.0...v1.147.1) (2021-05-17)\n\n\n### Bug Fixes\n\n* **checkout:** INT-3941 Updated remote-checkout path on button initialization ([226232f](https://github.com/bigcommerce/checkout-sdk-js/commit/226232f9f0f3c5e47da31c4da17419d434eb74da))\n\n## [1.147.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.146.0...v1.147.0) (2021-05-13)\n\n\n### Features\n\n* **payment:** INT-4071 Clearpay - Create custom strategy ([ff7ea13](https://github.com/bigcommerce/checkout-sdk-js/commit/ff7ea134df8703a5e8fc011554902314a5fcb8a8))\n* **payment:** INT-4071 Clearpay - rename function that validate the countrycode ([e44941f](https://github.com/bigcommerce/checkout-sdk-js/commit/e44941f60a471bb7cdd49407aee761354b4feafb))\n* **payment:** INT-4071 validate countryCode in billingAddress ([3f7993d](https://github.com/bigcommerce/checkout-sdk-js/commit/3f7993d0efe33e2b31e28a67d810c45646d7b8dc))\n* **payment:** INT-4071 wip ([4520461](https://github.com/bigcommerce/checkout-sdk-js/commit/4520461aecf269ba6cf497f2423dd3ba48eedb9a))\n* **payment:** INT-4237 Add issuer for Mollie APMs ([21bfded](https://github.com/bigcommerce/checkout-sdk-js/commit/21bfded889dba0afb22396d439910116934cebe4))\n\n## [1.146.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.145.0...v1.146.0) (2021-05-10)\n\n\n### Features\n\n* **payment:** PAYMENTS-6806 add dummy PPSDK strategy ([#1128](https://github.com/bigcommerce/checkout-sdk-js/issues/1128)) ([547a1c3](https://github.com/bigcommerce/checkout-sdk-js/commit/547a1c3d263479499b8b42b9a8858dd28903c3a3))\n\n## [1.145.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.144.1...v1.145.0) (2021-05-05)\n\n\n### Features\n\n* **payment:** INT-4258 StripeV3: Improve error handling ([48da4f4](https://github.com/bigcommerce/checkout-sdk-js/commit/48da4f4b51cd9d34c9f7cefa04de2ddde02bf714))\n\n### [1.144.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.144.0...v1.144.1) (2021-04-29)\n\n\n### Bug Fixes\n\n* **payment:** INT-4266 Googlepay - fixing where nonce value is going to be reloaded ([399b670](https://github.com/bigcommerce/checkout-sdk-js/commit/399b670709893f69ae2d3f10e57b3aee6346feab))\n\n## [1.144.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.143.0...v1.144.0) (2021-04-29)\n\n\n### Features\n\n* **payment:** INT-4150 changing zip strategy flow ([fd2354a](https://github.com/bigcommerce/checkout-sdk-js/commit/fd2354ad5d9c2a8ebe3a7a87bf12723644bec248))\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-983 Improve the Checkout SDK documentation around PayPal Commerce ([613c456](https://github.com/bigcommerce/checkout-sdk-js/commit/613c4566dd787c58d4b4f649027f5b6cddf03a91))\n\n## [1.143.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.142.0...v1.143.0) (2021-04-22)\n\n\n### Features\n\n* **payment:** PAYPAL-982 Pass BN code into the banners script ([8a71bfb](https://github.com/bigcommerce/checkout-sdk-js/commit/8a71bfba5a54bc91ed3501a34705fc1778ca4e91))\n\n## [1.142.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.141.0...v1.142.0) (2021-04-22)\n\n\n### Features\n\n* **payment:** INT-3702 added vaulted cc ([cdf639c](https://github.com/bigcommerce/checkout-sdk-js/commit/cdf639c658ff489b03eef03d137266486e0cc50d))\n* **payment:** INT-3702 fix containerId ([7d6bc75](https://github.com/bigcommerce/checkout-sdk-js/commit/7d6bc754f93516357a5f3a6d03051f1a28638033))\n\n\n### Bug Fixes\n\n* **payment:** INT-4063 Avoid holding inventory if a payment intent confirmation fails for StripeV3 ([e291784](https://github.com/bigcommerce/checkout-sdk-js/commit/e291784ab81c98001e865e1e07836bf927ff6a45))\n\n## [1.141.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.140.0...v1.141.0) (2021-04-15)\n\n\n### Features\n\n* **cart:** CHECKOUT-5747 Add cart changed error meta ([7addf66](https://github.com/bigcommerce/checkout-sdk-js/commit/7addf660dd7e82046a60b121c7a7a8e10b1d7a17))\n\n## [1.140.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.139.1...v1.140.0) (2021-04-14)\n\n\n### Features\n\n* **payment:** INT-2503 Add strategy for checkout.com with Fawry ([878ebd7](https://github.com/bigcommerce/checkout-sdk-js/commit/878ebd70c588e5920414d2637c1db09f202d7146))\n\n\n### Bug Fixes\n\n* **payment:** INT-3611 Refresh the state in Googlepay and Braintree refactor ([a33dc55](https://github.com/bigcommerce/checkout-sdk-js/commit/a33dc5539861f809eff2763a2d89cbb5d56192e9))\n\n### [1.139.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.139.0...v1.139.1) (2021-04-14)\n\n## [1.139.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.138.0...v1.139.0) (2021-04-13)\n\n\n### Features\n\n* **payment:** INT-3702 added vaulted cc ([8f6f2a1](https://github.com/bigcommerce/checkout-sdk-js/commit/8f6f2a1cef716386de329c5d052d570b43019ff6))\n\n## [1.138.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.137.3...v1.138.0) (2021-04-13)\n\n\n### Features\n\n* **payment:** INT-4021 Add strategy for iDeal APM ([752796b](https://github.com/bigcommerce/checkout-sdk-js/commit/752796bb109acadd118d94f51d04a3cc8cd1deb5))\n* **payment:** INT-4021 Test Cleanup ([61dfc25](https://github.com/bigcommerce/checkout-sdk-js/commit/61dfc257e6dbfb4b66661890403a96097a5f0f30))\n* **payment:** INT-4117 Support reload DR widget ([beb388a](https://github.com/bigcommerce/checkout-sdk-js/commit/beb388a233d64ee3532cf28ec4e33bd44095837f))\n* **payment:** INT-4117 Support reload DR widget + capsula changes ([bcfd2eb](https://github.com/bigcommerce/checkout-sdk-js/commit/bcfd2eb2b4a48220aafa1ffb3e1ef55f5b3e32d8))\n\n### [1.137.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.137.2...v1.137.3) (2021-04-12)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-970 add unit test for click handler on paypal checkout ([503e60b](https://github.com/bigcommerce/checkout-sdk-js/commit/503e60be649fd0757f729477c2e07fa2c831db44))\n* **payment:** PAYPAL-970 added loader test ([113d2f2](https://github.com/bigcommerce/checkout-sdk-js/commit/113d2f2821c94e27914ea4af4be64c7cd11e7a7b))\n* **payment:** PAYPAL-970 don't show loading indicator if checkout form hasn't passed validation ([c571f90](https://github.com/bigcommerce/checkout-sdk-js/commit/c571f9009e2e9804da6d3f67ef11040e35938caf))\n* **payment:** PAYPAL-970 fix linter error ([75b914f](https://github.com/bigcommerce/checkout-sdk-js/commit/75b914fb7eebaabd36fb33ff7f3f04a9d9ba6e4b))\n* **payment:** PAYPAL-970 small fixes after code review ([083e2c5](https://github.com/bigcommerce/checkout-sdk-js/commit/083e2c5419c5d2ec13e5e85aa6329e71720c01f2))\n\n### [1.137.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.137.1...v1.137.2) (2021-04-08)\n\n\n### Bug Fixes\n\n* **payment:** INT-3408 added masterpass SRC experiment ([933609a](https://github.com/bigcommerce/checkout-sdk-js/commit/933609ae27a938bfb3b9e3e976f5f9014d650731))\n* **payment:** INT-3408 refactor script loader ([f064474](https://github.com/bigcommerce/checkout-sdk-js/commit/f064474710c2dfc09f4a075a5f060874f31e843b))\n\n### [1.137.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.137.0...v1.137.1) (2021-04-08)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-5740 Post to and receive messages from www subdomain ([2e80137](https://github.com/bigcommerce/checkout-sdk-js/commit/2e801378f0c1b845e1b77f3394ec0d0f72a475d8))\n\n## [1.137.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.136.2...v1.137.0) (2021-04-05)\n\n\n### Features\n\n* **payment:** INT-3931 Add strategy for checkout.com with SEPA ([5538a3b](https://github.com/bigcommerce/checkout-sdk-js/commit/5538a3b80f13ff653142bcd598553195168834b1))\n\n### [1.136.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.136.1...v1.136.2) (2021-04-05)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-965 Check that there are no inventory underselling or overselling issues in PayPal Commerce ([a0f4952](https://github.com/bigcommerce/checkout-sdk-js/commit/a0f49522c39d9d615904eac3a65174b3a64f9dc6))\n\n### [1.136.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.136.0...v1.136.1) (2021-03-31)\n\n\n### Bug Fixes\n\n* **checkout:** INT-3571 Google Pay [StripeV3] - Billing address is missing ([df60da3](https://github.com/bigcommerce/checkout-sdk-js/commit/df60da31414942acb3d8f81941d7327898c4d442))\n\n## [1.136.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.135.0...v1.136.0) (2021-03-28)\n\n\n### Features\n\n* **payment:** INT-3905 creating execute for digital river and credit card ([2937cdd](https://github.com/bigcommerce/checkout-sdk-js/commit/2937cddde9a12ca4f6c1daecd6ade5047680ee6b))\n\n## [1.135.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.134.2...v1.135.0) (2021-03-22)\n\n\n### Features\n\n* **payment:** INT-3947 Suppress PayPal and Klarna ([5fd75a0](https://github.com/bigcommerce/checkout-sdk-js/commit/5fd75a054169b12f677831b98a444a7fa8cb5165))\n\n### [1.134.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.134.1...v1.134.2) (2021-03-21)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-6642 Make Paypal overlay modal/new window aware ([#1088](https://github.com/bigcommerce/checkout-sdk-js/issues/1088)) ([326c961](https://github.com/bigcommerce/checkout-sdk-js/commit/326c9611b0a80c9c49d4278f4a240e23f7c18bdb))\n\n### [1.134.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.134.0...v1.134.1) (2021-03-16)\n\n\n### Bug Fixes\n\n* **checkout:** INT-2546 Add ideal to document supported apms ([9c69506](https://github.com/bigcommerce/checkout-sdk-js/commit/9c695064612a01a7ce66d1a47a09c6b0e884715e))\n\n## [1.134.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.133.0...v1.134.0) (2021-03-14)\n\n\n### Features\n\n* **payment:** INT-3840 creating digital river strategy ([6062bbf](https://github.com/bigcommerce/checkout-sdk-js/commit/6062bbf9d78c6c9c9f5cadb8f0c6a619c8af6827))\n* **payment:** INT-3896 [Zip] it returns the nonce value when it's a referred payment ([d123551](https://github.com/bigcommerce/checkout-sdk-js/commit/d12355120b5ebef56de44dcb16c5c45f3a1dbcbc))\n\n## [1.133.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.132.0...v1.133.0) (2021-03-10)\n\n\n### Features\n\n* **checkout:** INT-3700 Load Bolt Scripts from different environments ([980e9be](https://github.com/bigcommerce/checkout-sdk-js/commit/980e9be9bd9d983dbb8a77ede24b1e6e09d8f5c7))\n\n## [1.132.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.131.0...v1.132.0) (2021-03-02)\n\n\n### Features\n\n* **checkout:** INT-3675 Add Bolt's tracking script to checkout ([f6faa1a](https://github.com/bigcommerce/checkout-sdk-js/commit/f6faa1a8c7914a751e01c0d3ab8a0c1987bb573a))\n* **payment:** INT-3408 migrate masterpass to SRC ([7f30282](https://github.com/bigcommerce/checkout-sdk-js/commit/7f3028278516b5433767d0e89b8313f54c0053f8))\n* **payment:** INT-3610 added Mollie Checkout ([d8f3df6](https://github.com/bigcommerce/checkout-sdk-js/commit/d8f3df6981770b2ae469d53d71005f86d58cc151))\n\n## [1.131.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.130.1...v1.131.0) (2021-02-22)\n\n\n### Features\n\n* **payment:** PAYPAL-876 added preloader for APM when polling mechanism is running ([2d613b8](https://github.com/bigcommerce/checkout-sdk-js/commit/2d613b86e7b195c95ef7e1c0a607a58d11269eb9))\n\n### [1.130.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.130.0...v1.130.1) (2021-02-18)\n\n\n### Bug Fixes\n\n* **checkout:** INT-3665 3D Secure is declining the transaction in Braintree without any reason in some stores ([4d5528e](https://github.com/bigcommerce/checkout-sdk-js/commit/4d5528e0b7fdd3a141898b02d2ae2345af3ac624))\n* **common:** CHECKOUT-5612 Add isAccountCreationEnabled prop to StoreConfig ([74cc00e](https://github.com/bigcommerce/checkout-sdk-js/commit/74cc00e301185aed9acf7b0f42141f0dea035a20))\n\n## [1.130.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.129.1...v1.130.0) (2021-02-15)\n\n\n### Features\n\n* **payment:** PAYPAL-876 stop polling mechanism when error occurs ([79119b2](https://github.com/bigcommerce/checkout-sdk-js/commit/79119b23c791d1f6dda5046691576f032148ea0a))\n\n\n### Bug Fixes\n\n* **payment:** INT-3611 Refresh the state in Braintree ([351bfe3](https://github.com/bigcommerce/checkout-sdk-js/commit/351bfe3fa11d7c945ab5593a27f4d33c0d2727d9))\n\n### [1.129.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.129.0...v1.129.1) (2021-02-11)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-5324 Upgrade BigPay client version ([3aa965b](https://github.com/bigcommerce/checkout-sdk-js/commit/3aa965b4258be2a7995d6a2655939ce98d8549f7))\n\n## [1.129.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.128.0...v1.129.0) (2021-02-10)\n\n\n### Features\n\n* **payment:** INT-3418 Added googlepay on cybersourcev2 ([8964140](https://github.com/bigcommerce/checkout-sdk-js/commit/8964140870d19babdd286870337995d356b14db0))\n\n## [1.128.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.127.0...v1.128.0) (2021-02-09)\n\n\n### Features\n\n* **payment:** INT-3659 Add payment method flow to Stripe v3 ([7b4b388](https://github.com/bigcommerce/checkout-sdk-js/commit/7b4b38892bfccf59fb54a7151530c1a447fa532a))\n\n## [1.127.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.126.0...v1.127.0) (2021-02-09)\n\n\n### Features\n\n* **payment:** PAYPAL-876 fixed paypalcommerce initialization endpoint ([b8fa0f2](https://github.com/bigcommerce/checkout-sdk-js/commit/b8fa0f202f68a75d78e6d24479f55a3b29fce59f))\n\n## [1.126.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.125.0...v1.126.0) (2021-02-09)\n\n\n### Features\n\n* **checkout:** INT-2544 Create strategy For redirect flow on checkout.com apms ([31022c7](https://github.com/bigcommerce/checkout-sdk-js/commit/31022c7aca2f6b3ccff0b51695e1c03aac00d415))\n* **payment:** INT-3831 enable vaulting on cybersource v2 ([7ba0849](https://github.com/bigcommerce/checkout-sdk-js/commit/7ba0849a186fdc9eb6cf029fa7594b37ac9544dd))\n* **shopper:** CHECKOUT-4726 Allow creating customer address ([1546208](https://github.com/bigcommerce/checkout-sdk-js/commit/1546208336baa1b20f07417ab758e085299f452b))\n\n## [1.125.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.124.1...v1.125.0) (2021-02-03)\n\n\n### Features\n\n* **payment:** PAYPAL-876 implemented polling mechanism ([29a08c4](https://github.com/bigcommerce/checkout-sdk-js/commit/29a08c4527d4e39332a58198feb54914886f3908))\n* **payment:** PAYPAL-876 implemented polling mechanism on front end ([aca1d29](https://github.com/bigcommerce/checkout-sdk-js/commit/aca1d29a6eadd906c12d16038e66ce55931ff81e))\n* **payment:** PAYPAL-876 implemented polling mechanism on front end ([30aca53](https://github.com/bigcommerce/checkout-sdk-js/commit/30aca53e184b5aeb0c8d94fdd15c6c7fbe9ccdb5))\n* **payment:** PAYPAL-876 temp ([5bed143](https://github.com/bigcommerce/checkout-sdk-js/commit/5bed143c118e9ecd9a19b80fb40d53d7d2674801))\n* **payment:** PAYPAL-883 fixed conflicts ([15fa4d5](https://github.com/bigcommerce/checkout-sdk-js/commit/15fa4d58d7c37d884526f987a69cbd7ebecc8a7b))\n\n### [1.124.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.124.0...v1.124.1) (2021-02-01)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-5324 Set nonce in memory instead of local storage ([0515427](https://github.com/bigcommerce/checkout-sdk-js/commit/05154279c82293c04f246ffacdaf760ca6de449b))\n\n## [1.124.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.123.0...v1.124.0) (2021-01-28)\n\n\n### Features\n\n* **payment:** INT-3537 Add CYBS One Platform Payment Strategy ([3bab19d](https://github.com/bigcommerce/checkout-sdk-js/commit/3bab19d478c66f114a5c02d8d499b1fabd7bed62))\n\n\n### Bug Fixes\n\n* **payment:** INT-3655 Avoid passing null nonce token to StripeV3 ([1ac7b18](https://github.com/bigcommerce/checkout-sdk-js/commit/1ac7b181b0e8bc4aed7e631b94838a86f1e15513))\n* **payment:** INT-3743 Add Mada cards validation ([0e08640](https://github.com/bigcommerce/checkout-sdk-js/commit/0e08640c8af3dd5df8807e608939b6c2d5ce81c3))\n\n## [1.123.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.122.0...v1.123.0) (2021-01-19)\n\n\n### Features\n\n* **payment:** ADYEN-8 add adyen methods to list of available methods ([b4bbeda](https://github.com/bigcommerce/checkout-sdk-js/commit/b4bbeda9c460a1c69db4e19a359227d7fb1c7576))\n\n## [1.122.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.121.1...v1.122.0) (2021-01-18)\n\n\n### Features\n\n* **order:** CHECKOUT-2322 Add gift wrapping total ([6078f2d](https://github.com/bigcommerce/checkout-sdk-js/commit/6078f2d41a6db22d52a6b58ae0066ed9ef87efcf))\n\n### [1.121.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.121.0...v1.121.1) (2021-01-13)\n\n\n### Bug Fixes\n\n* **payment:** INT-3717 Unformat cardNumber before notifying a bin number change ([c16324c](https://github.com/bigcommerce/checkout-sdk-js/commit/c16324cc9432cd0ec114c8778ebfc1fc5fdd6d1e))\n\n## [1.121.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.120.0...v1.121.0) (2020-12-29)\n\n\n### Features\n\n* **payment:** PAYPAL-787 added condition ([af075d3](https://github.com/bigcommerce/checkout-sdk-js/commit/af075d3fe2576e5b604fcfb3446ba5baa2a54574))\n\n## [1.120.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.119.0...v1.120.0) (2020-12-24)\n\n\n### Features\n\n* **payments:** PAYPAL-830 Add mechanism for testing of the APMs for different countries ([73d5f71](https://github.com/bigcommerce/checkout-sdk-js/commit/73d5f71f5748c487a28bc9035a0c119026489b7a))\n\n## [1.119.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.118.2...v1.119.0) (2020-12-22)\n\n\n### Features\n\n* **shopper:** CHECKOUT-5418 Add support for recaptcha for customer account creation ([a92f310](https://github.com/bigcommerce/checkout-sdk-js/commit/a92f310b815fac76349cd9ba942544794482665a))\n\n### [1.118.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.118.1...v1.118.2) (2020-12-18)\n\n\n### Bug Fixes\n\n* **checkout:** PAYPAL-767 Core review - remove excessive Promise.resolve ([f850faa](https://github.com/bigcommerce/checkout-sdk-js/commit/f850faa9f3b8a9fe72931ecad0291e004db4832a))\n* **checkout:** PAYPAL-767 Fix device data collection for Braintree stored credit cards ([8aca92d](https://github.com/bigcommerce/checkout-sdk-js/commit/8aca92d045122f5605370f26207f80acfa50c0b6))\n* **payment:** INT-2816 fix unit test for googlepay-adyenv2-payment ([2bc4ef7](https://github.com/bigcommerce/checkout-sdk-js/commit/2bc4ef707edc755b920273ec10891f2df15982d7))\n\n### [1.118.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.118.0...v1.118.1) (2020-12-16)\n\n\n### Bug Fixes\n\n* **order:** CHECKOUT-4941 Load form fields when loading order ([6639da0](https://github.com/bigcommerce/checkout-sdk-js/commit/6639da0b8d38a2738597a2b20057ba81ed67367f))\n\n## [1.118.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.117.0...v1.118.0) (2020-12-15)\n\n\n### Features\n\n* **payment:** PAYPAL-848 Add messages to script ([5c75f24](https://github.com/bigcommerce/checkout-sdk-js/commit/5c75f24d892c1234852780151cd8a7c492cab0c0))\n* **shopper:** CHECKOUT-4941 Add Customer Creation functionality ([6a3c5e8](https://github.com/bigcommerce/checkout-sdk-js/commit/6a3c5e864a54b1e637826ad300af2a427ea4bab0))\n\n## [1.117.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.116.0...v1.117.0) (2020-12-13)\n\n\n### Features\n\n* **forms:** CHECKOUT-4941 Expose customer account fields ([d9ce3db](https://github.com/bigcommerce/checkout-sdk-js/commit/d9ce3db953144b77afa5d0a59ecdc521d6b27f9f))\n* **payment:** INT-2816 Added 3DS to googlepay adyenv2 ([519d036](https://github.com/bigcommerce/checkout-sdk-js/commit/519d036377435e7059be04166a4c4769bdbf86aa))\n* **payment:** INT-3538 Replaced borwser language instead locale variable on Adyenv2 ([b11b877](https://github.com/bigcommerce/checkout-sdk-js/commit/b11b877c42ec4241d5024de543fb480415c519bd))\n* **payment:** PAYPAL-868 fixed ([d83e9ff](https://github.com/bigcommerce/checkout-sdk-js/commit/d83e9ff891707ff340be9aa295f88577542bba0b))\n* **payment:** PAYPAL-868 fixed ([28a8b53](https://github.com/bigcommerce/checkout-sdk-js/commit/28a8b53e1b9ae44b0983e098babdcc2b185e5ac6))\n* **payment:** PAYPAL-868 fixed ([ccabf10](https://github.com/bigcommerce/checkout-sdk-js/commit/ccabf10d0a91da58699977bce509a9c28b5e7a13))\n* **payment:** PAYPAL-868 fixed ([862cfc9](https://github.com/bigcommerce/checkout-sdk-js/commit/862cfc958dd8f59d48636a19d6932f70e5ed64c7))\n* **payment:** PAYPAL-868 fixed ([0533c8c](https://github.com/bigcommerce/checkout-sdk-js/commit/0533c8ce8d651b6fbadf0cdb37fe10c0e4615c76))\n* **payment:** PAYPAL-868 fixed ([0110b94](https://github.com/bigcommerce/checkout-sdk-js/commit/0110b94c95d792403d4c2423298b4e20ecf8083b))\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-4571 Remove alpha tags from stable functionality ([b8c1667](https://github.com/bigcommerce/checkout-sdk-js/commit/b8c16672075596af00519ca3901482a922cedbc3))\n* **payment:** INT-2816 fix unit test for googlepay-adyenv2-payment-processor ([46da807](https://github.com/bigcommerce/checkout-sdk-js/commit/46da8074b29b295dcf9516b151e004e4b0579f9d))\n\n## [1.116.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.115.0...v1.116.0) (2020-12-01)\n\n\n### Features\n\n* **payment:** INT-3237 Allows reinitialize the cardinal script ([38a2d23](https://github.com/bigcommerce/checkout-sdk-js/commit/38a2d2372aca4ff1cf3071a309af74c597390f55))\n\n## [1.115.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.114.0...v1.115.0) (2020-11-13)\n\n\n### Features\n\n* **payment:** PAYPAL-839 Move method_id in execute ([9f8a35a](https://github.com/bigcommerce/checkout-sdk-js/commit/9f8a35a3d959bb4df2c4d12480b67edd035b79b3))\n\n## [1.114.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.113.0...v1.114.0) (2020-11-13)\n\n\n### Features\n\n* **payment:** PAYPAL-837 Submit cardholder name to PayPal ([b0d0a61](https://github.com/bigcommerce/checkout-sdk-js/commit/b0d0a6133e1986fdcfca4d9cc5b77f3412d8360e))\n\n## [1.113.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.112.0...v1.113.0) (2020-11-12)\n\n\n### Features\n\n* **payment:** INT-3438 Integrate Barclays strategy ([c53119d](https://github.com/bigcommerce/checkout-sdk-js/commit/c53119d6dc7501f25f601b0ab3ad8f1dcc9439a2))\n* **payment:** PAYPAL-800 PPCP: Pay-in-3 ([a4003ae](https://github.com/bigcommerce/checkout-sdk-js/commit/a4003aee8b35723040562c31c3afd52989848937))\n* **payment:** PAYPAL-800 PPCP: Pay-in-3 ([7b931d8](https://github.com/bigcommerce/checkout-sdk-js/commit/7b931d8d7621a749c722075541a275080279115b))\n\n## [1.112.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.111.0...v1.112.0) (2020-11-09)\n\n\n### Features\n\n* **payment:** PAYPAL-702 Add alternative payment methods ([#1005](https://github.com/bigcommerce/checkout-sdk-js/issues/1005)) ([ea04c2d](https://github.com/bigcommerce/checkout-sdk-js/commit/ea04c2debc1a51f07242caa25b3af1ca72742dba))\n\n## [1.111.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.110.1...v1.111.0) (2020-11-05)\n\n\n### Features\n\n* **payment:** PAYPAL-759 Add docs for initialize PPCP ([#1008](https://github.com/bigcommerce/checkout-sdk-js/issues/1008)) ([492858d](https://github.com/bigcommerce/checkout-sdk-js/commit/492858d7e7a9ea108860127834493bd742caa4f5))\n\n### [1.110.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.110.0...v1.110.1) (2020-11-05)\n\n\n### Bug Fixes\n\n* **payment:** INT-3311 klarna can checkout with coupons ([375a2c3](https://github.com/bigcommerce/checkout-sdk-js/commit/375a2c3946aae0d415812913785eb663a75a256d))\n\n## [1.110.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.109.0...v1.110.0) (2020-11-03)\n\n\n### Features\n\n* **checkout:** INT-3174 Added title as attribute of flashMessage ([73cbe48](https://github.com/bigcommerce/checkout-sdk-js/commit/73cbe487e86645348df49b265e4487c430d82053))\n\n## [1.109.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.108.0...v1.109.0) (2020-10-22)\n\n\n### Features\n\n* **payment:** PAYPAL-746 Change style for sbp on checkout ([6b3c4a0](https://github.com/bigcommerce/checkout-sdk-js/commit/6b3c4a0edef7a5c057e78893362a4641ed4290e8))\n\n## [1.108.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.107.1...v1.108.0) (2020-10-20)\n\n\n### Features\n\n* **payment:** PAYPAL-702 Bump bigpay client ([f812f43](https://github.com/bigcommerce/checkout-sdk-js/commit/f812f43fcc49a15617e10f55c7f76ad915f51516))\n\n### [1.107.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.107.0...v1.107.1) (2020-10-19)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-766 Validate cc before submit order ([#1003](https://github.com/bigcommerce/checkout-sdk-js/issues/1003)) ([0c3edb3](https://github.com/bigcommerce/checkout-sdk-js/commit/0c3edb36b370eaf16827d373583cea11f1af43ca))\n\n## [1.107.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.106.1...v1.107.0) (2020-10-14)\n\n\n### Features\n\n* **payment:** INT-3061 renamed mandate field to mandateUrl on order interface ([1e4099c](https://github.com/bigcommerce/checkout-sdk-js/commit/1e4099c9df3751ee5009a7cd121bac4e17bc9401))\n\n### [1.106.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.106.0...v1.106.1) (2020-10-12)\n\n\n### Bug Fixes\n\n* **order:** CHECKOUT-4639 Send discounted price when tracking analytics ([cea959f](https://github.com/bigcommerce/checkout-sdk-js/commit/cea959f8d15fa5afc2a327f0dee1441adff80234))\n\n## [1.106.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.105.0...v1.106.0) (2020-10-09)\n\n\n### Features\n\n* **payment:** PAYPAL-706 Add validate before using spb ([3c02031](https://github.com/bigcommerce/checkout-sdk-js/commit/3c020315d5148b9048626d444fcbe9031fd4a42c))\n\n## [1.105.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.104.2...v1.105.0) (2020-10-08)\n\n\n### Features\n\n* **payment:** PAYPAL-734 Change credit to paylater ([#994](https://github.com/bigcommerce/checkout-sdk-js/issues/994)) ([7a64bc1](https://github.com/bigcommerce/checkout-sdk-js/commit/7a64bc1733b7926535f72e2a6339da9ed5233e21))\n\n\n### Bug Fixes\n\n* **checkout:** DATA-6891 missing transactions ([51a0740](https://github.com/bigcommerce/checkout-sdk-js/commit/51a07403b403df05cc3b0b2fcc6dd56372146ef7))\n\n### [1.104.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.104.1...v1.104.2) (2020-10-07)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-202 fix validation ([a5aa5fb](https://github.com/bigcommerce/checkout-sdk-js/commit/a5aa5fb1e46b57fd9591f62506bd3ec876697cf0))\n\n### [1.104.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.104.0...v1.104.1) (2020-10-02)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-726 Switch payment methods ([4305cfd](https://github.com/bigcommerce/checkout-sdk-js/commit/4305cfd14a30abc381d2617a10fe47c78a89932e))\n\n## [1.104.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.103.0...v1.104.0) (2020-09-30)\n\n\n### Features\n\n* **payment:** PAYPAL-675 Upgrade to 3DS v2 Braintree ([f1417cf](https://github.com/bigcommerce/checkout-sdk-js/commit/f1417cfaf0af27c7a32cac13bdfa725cbfa1fbf7))\n* **payment:** PAYPAL-675 Upgrade to 3DS v2 Braintree ([58b187d](https://github.com/bigcommerce/checkout-sdk-js/commit/58b187d9ae393c63b9408986c850dbe12eabb9d5))\n\n## [1.103.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.102.0...v1.103.0) (2020-09-30)\n\n\n### Features\n\n* **payment:** PAYPAL-553 3ds for PayPal ([#988](https://github.com/bigcommerce/checkout-sdk-js/issues/988)) ([a9d9fa8](https://github.com/bigcommerce/checkout-sdk-js/commit/a9d9fa86820c2df6ffb5192b9c4ac4f0a34588ca))\n\n## [1.102.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.101.0...v1.102.0) (2020-09-28)\n\n\n### Features\n\n* **payment:** INT-3086 Support mounting individual card fields on StripeV3 ([2fc46a8](https://github.com/bigcommerce/checkout-sdk-js/commit/2fc46a8e9196b4f1f096f5b35672454662b05a97))\n\n## [1.101.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.100.0...v1.101.0) (2020-09-22)\n\n\n### Features\n\n* **payment:** PAYPAL-705 add messaging for PayPal banners ([d35ea9b](https://github.com/bigcommerce/checkout-sdk-js/commit/d35ea9be7a8eb7517811f266ae57825e84c81310))\n* **payment:** PAYPAL-705 enable banners along with credit + tests ([8f110af](https://github.com/bigcommerce/checkout-sdk-js/commit/8f110af6a1624778741bdf4e317be7d20c6a5376))\n\n## [1.100.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.99.3...v1.100.0) (2020-09-18)\n\n\n### Features\n\n* **checkout:** INT-2779 Add vaulting support for Orbital ([a58c700](https://github.com/bigcommerce/checkout-sdk-js/commit/a58c700fc79abaf1da821e0cb58fb977f728e4ea))\n* **payment:** PAYPAL-654 Add callback and disable submit button ([1f2fc79](https://github.com/bigcommerce/checkout-sdk-js/commit/1f2fc7999f75f143b39c2c4abf316bb3d45ca150))\n* **payment:** PAYPAL-654 Add hidePaymentButton instead EmbeddedSubmitButton ([b57cd2b](https://github.com/bigcommerce/checkout-sdk-js/commit/b57cd2b2ed28169f4c642c96d0688202597e8a17))\n* **payment:** PAYPAL-654 Changes for PR ([aad6632](https://github.com/bigcommerce/checkout-sdk-js/commit/aad6632c9ad5717be136aa8801526c45f380db19))\n* **payment:** PAYPAL-654 Changes for PR ([c31a459](https://github.com/bigcommerce/checkout-sdk-js/commit/c31a459c7f789e4bf2f8d8dbae7028cfe2bf523f))\n* **payment:** PAYPAL-654 Remove EmbeddedSubmitButton ([71f9937](https://github.com/bigcommerce/checkout-sdk-js/commit/71f99374dfcdbe1c665ec86fab133eabfaf77929))\n* **payment:** PAYPAL-654 Rename hidePaymentButton to onRenderButton ([71d34d2](https://github.com/bigcommerce/checkout-sdk-js/commit/71d34d2a5ad1ab5b15770d907487904ff4918112))\n* **payment:** PAYPAL-654 Spb checkout ([8f7b9a7](https://github.com/bigcommerce/checkout-sdk-js/commit/8f7b9a74ee923ae69d1debbc7b0bcdafe29dda9a))\n* **payment:** PAYPAL-654 Take out paypal script to processor ([87a0902](https://github.com/bigcommerce/checkout-sdk-js/commit/87a09026518ab3f2a88fdef25e980beff5bfbf97))\n* **payment:** PAYPAL-654 Tests ([f348dfc](https://github.com/bigcommerce/checkout-sdk-js/commit/f348dfc07e50d05ccadac2b1659fdbb578e3a187))\n\n### [1.99.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.99.2...v1.99.3) (2020-09-17)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-5135 Reset Braintree hosted form initialisation state ([fe606c0](https://github.com/bigcommerce/checkout-sdk-js/commit/fe606c05cf0a1f67030efc4911eb474914f45f6e))\n\n### [1.99.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.99.1...v1.99.2) (2020-09-15)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-5135 Fix onValidate callback not getting called with correct error type and not getting called when tokenize returns validation error ([307c44d](https://github.com/bigcommerce/checkout-sdk-js/commit/307c44daaf32e437988ce4569ed58377bccb7860))\n\n### [1.99.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.99.0...v1.99.1) (2020-09-15)\n\n## [1.99.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.98.0...v1.99.0) (2020-09-10)\n\n\n### Features\n\n* **payment:** INT-3061 added mandate field on order interface ([c8c542b](https://github.com/bigcommerce/checkout-sdk-js/commit/c8c542b0e9f486905b4a2fe99ae12287b107aad4))\n\n## [1.98.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.97.1...v1.98.0) (2020-09-08)\n\n\n### Features\n\n* **checkout:** INT-3112 Merge Bolt strategies ([25e0c7d](https://github.com/bigcommerce/checkout-sdk-js/commit/25e0c7db01ef4f97766177046838c232057a4ddf))\n* **payment:** INT-3027 Implementing client key ([e95bf66](https://github.com/bigcommerce/checkout-sdk-js/commit/e95bf66fe6ac5e42a85030268dd5b8a5094ecd9f))\n\n### [1.97.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.97.0...v1.97.1) (2020-09-07)\n\n## [1.97.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.96.0...v1.97.0) (2020-09-04)\n\n\n### Features\n\n* **payment:** INT-3027 Implementing client key ([77e6807](https://github.com/bigcommerce/checkout-sdk-js/commit/77e68077537207b1fe62d1913707c82c530896fa))\n* **payment:** PAYPAL-202 Add tests ([c92dfe7](https://github.com/bigcommerce/checkout-sdk-js/commit/c92dfe790e62ddb38ead68e53eafe05a707584a9))\n* **payment:** PAYPAL-202 Changes for PR ([144b0bb](https://github.com/bigcommerce/checkout-sdk-js/commit/144b0bb143f4ed95694a244408d390b89ef93d11))\n* **payment:** PAYPAL-202 Hosted Credit Card ([04c740f](https://github.com/bigcommerce/checkout-sdk-js/commit/04c740fa12b55e89a7ee54f0775928a3f5ec5779))\n* **payment:** PAYPAL-202 take clientToken from appropriate params ([4d8a5ed](https://github.com/bigcommerce/checkout-sdk-js/commit/4d8a5ed1f1b4d0b2c94f4bcf368b6bf1326a1565))\n\n## [1.96.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.95.0...v1.96.0) (2020-09-02)\n\n\n### Features\n\n* **payment:** INT-3032 Add ES/EUR support to Klarna ([0b942ed](https://github.com/bigcommerce/checkout-sdk-js/commit/0b942ed983974c705eeeb4a638dfe5c3ed1c6674))\n\n## [1.95.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.94.0...v1.95.0) (2020-08-31)\n\n\n### Features\n\n* **payment:** PAYMENTS-5513 add setAsDefaultInstrument to the nonce mapping white list ([#964](https://github.com/bigcommerce/checkout-sdk-js/issues/964)) ([2eaab8f](https://github.com/bigcommerce/checkout-sdk-js/commit/2eaab8f89226daa8864a824da763f8cbd492bef5))\n\n## [1.94.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.93.2...v1.94.0) (2020-08-30)\n\n\n### Features\n\n* **payment:** INT-3084 Autopopulate card holder name ([3df5395](https://github.com/bigcommerce/checkout-sdk-js/commit/3df539532a0eef13c6622a6b224de883611f8574))\n\n### [1.93.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.93.1...v1.93.2) (2020-08-26)\n\n\n### Performance Improvements\n\n* **payment:** INT-2926 Avoid unnecessary calls to payments/amazonpay and checkout-settings ([6e90e80](https://github.com/bigcommerce/checkout-sdk-js/commit/6e90e80120224e434c8c332faf64a5f90517564e))\n\n### [1.93.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.93.0...v1.93.1) (2020-08-21)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-5115 CHECKOUT-5116 CHECKOUT-5117 Set correct type for card number verification field ([cb708cd](https://github.com/bigcommerce/checkout-sdk-js/commit/cb708cdd8c19f3aea333540150cee19362931594))\n\n## [1.93.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.92.1...v1.93.0) (2020-08-21)\n\n\n### Features\n\n* **checkout:** INT-2992 Make store credit usable with bolt ([07d5cdd](https://github.com/bigcommerce/checkout-sdk-js/commit/07d5cdd5aedc8f4f9c652734d57cb62fc203a258))\n\n\n### Bug Fixes\n\n* **checkout:** INT-3041 Fix GooglePay updating shipping address when not needed ([28736af](https://github.com/bigcommerce/checkout-sdk-js/commit/28736afd978ee65a38db04e44953de4b94f9d412))\n\n### [1.92.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.92.0...v1.92.1) (2020-08-18)\n\n\n### Code Refactoring\n\n* **payment:** INT-2995 Avoid setting up Affirm.js from string code ([b8b8f92](https://github.com/bigcommerce/checkout-sdk-js/commit/b8b8f92497379d646c8d6ce2a1d8147f3b2112d4))\n\n## [1.92.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.91.1...v1.92.0) (2020-08-18)\n\n\n### Features\n\n* **payment:** PAYPAL-652 Add PPCP to SDK documentation ([83276b9](https://github.com/bigcommerce/checkout-sdk-js/commit/83276b916d829539ac5c3a5cb3770ca0ef218226))\n\n### [1.91.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.91.0...v1.91.1) (2020-08-18)\n\n\n### Bug Fixes\n\n* **payment:** INT-2043 Apply store credit on StripeV3 ([ac41ff9](https://github.com/bigcommerce/checkout-sdk-js/commit/ac41ff9515e70306c574e93b788435eec7a45d6d))\n\n## [1.91.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.90.2...v1.91.0) (2020-08-17)\n\n\n### Features\n\n* **payment:** INT-3016 remove phone number parameter in request if field is empty in Stripev3 ([c0220de](https://github.com/bigcommerce/checkout-sdk-js/commit/c0220de393161fba75350531236d2aefab04040d))\n\n### [1.90.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.90.1...v1.90.2) (2020-08-14)\n\n\n### Bug Fixes\n\n* **payment:** INT-3010 Fix Zip store credit implementation ([37ffccf](https://github.com/bigcommerce/checkout-sdk-js/commit/37ffccf9ec63f3a85338d7d4b10a5fcdc08199fd))\n\n### [1.90.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.90.0...v1.90.1) (2020-08-13)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-4947 Remove unused key from settings object ([232a2cc](https://github.com/bigcommerce/checkout-sdk-js/commit/232a2cca5866861628e2af6ccba156d8a50ccdcc))\n* **payment:** INT-2922 Upgrade Adyen Component Library ([50e5dd7](https://github.com/bigcommerce/checkout-sdk-js/commit/50e5dd75fd86c8c923a20969417bbfd079be1651))\n\n## [1.90.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.89.0...v1.90.0) (2020-08-12)\n\n\n### Features\n\n* **payment:** PAYPAL-202 bump bigpay-client to 5.12 ([e1cebb6](https://github.com/bigcommerce/checkout-sdk-js/commit/e1cebb649b90eda7726c897e0a6949f50222463f))\n\n## [1.89.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.88.0...v1.89.0) (2020-08-10)\n\n\n### Features\n\n* **payment:** INT-2907 Avoid returns duplicate vaulted instruments ([663194e](https://github.com/bigcommerce/checkout-sdk-js/commit/663194e0e427d07e43aaf226c57098b76d59f701))\n\n\n### Bug Fixes\n\n* **payment:** INT-2907 Fix linter in instrument selector ([2d455f0](https://github.com/bigcommerce/checkout-sdk-js/commit/2d455f07b8d1f7f6d92d5daa2a241d777bf51d6d))\n\n## [1.88.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.87.0...v1.88.0) (2020-08-07)\n\n\n### Features\n\n* **payment:** CHECKOUT-4947 Modify Braintree credit card strategy to use hosted form service when feature is enabled ([3847aeb](https://github.com/bigcommerce/checkout-sdk-js/commit/3847aebcd62ddab7334bf4bb4b7ef0efb8a1a7f3))\n\n## [1.87.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.86.0...v1.87.0) (2020-08-06)\n\n\n### Features\n\n* **payment:** CHECKOUT-4947 Inspect payment method object to determine whether hosted payment form is enabled for payment method ([5c49812](https://github.com/bigcommerce/checkout-sdk-js/commit/5c4981205f6469986c4e7f39b533d3c1ec8297a8))\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-5089 Catch \"permission denied\" error when attempting to gather adjacent hosted inputs to support IE11 ([dc0f334](https://github.com/bigcommerce/checkout-sdk-js/commit/dc0f33484cad5193c3debab7cdb460736f41bfe1))\n\n## [1.86.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.85.0...v1.86.0) (2020-07-30)\n\n\n### Features\n\n* **checkout:** INT-2919 Add Unit Test ([1de848f](https://github.com/bigcommerce/checkout-sdk-js/commit/1de848f14f98d0ff9bdb3b68e814e927f028c732))\n* **checkout:** INT-2919 Add Unit test to script loader ([dddd1d1](https://github.com/bigcommerce/checkout-sdk-js/commit/dddd1d119a45e7babf665299a7631fcafd0864ad))\n* **checkout:** INT-2919 Create an strategy in order to use Bolt in Bigcommerce checkout ([f25c662](https://github.com/bigcommerce/checkout-sdk-js/commit/f25c662ef860f084133fddb13ae24767f659e54c))\n* **checkout:** INT-2919 Minor corrections ([4e1160d](https://github.com/bigcommerce/checkout-sdk-js/commit/4e1160db27a588e9bcae3925d4a78717b3419f05))\n* **checkout:** INT-2919 move changes to another strategy ([d09c299](https://github.com/bigcommerce/checkout-sdk-js/commit/d09c299d822ecf309b1722bfd9e46e46747a3db4))\n* **checkout:** INT-2919 Several fixes to mocks and indentation ([2570226](https://github.com/bigcommerce/checkout-sdk-js/commit/2570226f30e756ddd01e862a77556c183a84dc5d))\n\n## [1.85.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.84.0...v1.85.0) (2020-07-29)\n\n\n### Features\n\n* **payment:** CHECKOUT-4947 Add Braintree hosted form service as abstraction layer for interacting with Braintree API ([a764cd0](https://github.com/bigcommerce/checkout-sdk-js/commit/a764cd09da18fb0d07809337238f13a35786c0f4))\n* **payment:** CHECKOUT-4947 Add methods for loading and initializing Braintree hosted fields module ([fc87ee9](https://github.com/bigcommerce/checkout-sdk-js/commit/fc87ee96621483d8395d2d2e59234d6b5340cb72))\n* **payment:** INT-2653 Accept payments through StripeV3 using Alipay ([997bd1d](https://github.com/bigcommerce/checkout-sdk-js/commit/997bd1d3838c6bb8c2a13e056aee2648ce6ec30b))\n* **payment:** INT-2801 Prepopulate ACH Billing Info ([84f1524](https://github.com/bigcommerce/checkout-sdk-js/commit/84f152494e779e47eea8f7f43122220b4571c824))\n* **payment:** PAYMENTS-5513 add setAsDefaultInstrument feature during vaulting or vaulted payments ([#893](https://github.com/bigcommerce/checkout-sdk-js/issues/893)) ([055b7ee](https://github.com/bigcommerce/checkout-sdk-js/commit/055b7eea7be09ff09220bdcb599aec4e94f86cf8))\n\n## [1.84.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.83.0...v1.84.0) (2020-07-22)\n\n\n### Features\n\n* **payment:** INT-2532 Accept payments through StripeV3 using iDEAL & SEPA ([3fcb1cc](https://github.com/bigcommerce/checkout-sdk-js/commit/3fcb1cc61e78a7e298ee6c0014132b72a4b8581f))\n\n## [1.83.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.82.4...v1.83.0) (2020-07-22)\n\n\n### Features\n\n* **payment:** PAYPAL-539 Add validate params in script loader ([1bac153](https://github.com/bigcommerce/checkout-sdk-js/commit/1bac1535e865feba3ec80dae0aa6d3f026a55ed9))\n* **payment:** PAYPAL-539 MerchantId does not required for progressive onboarding ([ec88cf7](https://github.com/bigcommerce/checkout-sdk-js/commit/ec88cf76e3cd0245fc062355297ec457e5e1d7c1))\n\n### [1.82.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.82.3...v1.82.4) (2020-07-16)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-5006 added displayDateFormat type ([75e190e](https://github.com/bigcommerce/checkout-sdk-js/commit/75e190e13de10d76165b7e20c3a916a2c34285e4))\n\n### [1.82.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.82.2...v1.82.3) (2020-07-16)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-5575 fix paypal and bank instrument clash ([#918](https://github.com/bigcommerce/checkout-sdk-js/issues/918)) ([3908ed1](https://github.com/bigcommerce/checkout-sdk-js/commit/3908ed145d6d62ea2a357e6d0a64bc53991c3cde))\n\n### [1.82.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.82.1...v1.82.2) (2020-07-14)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-5025 Fix Elavon Converge strategy so that it can utilise hosted payment form ([c2b21a9](https://github.com/bigcommerce/checkout-sdk-js/commit/c2b21a90d174c253d179412561ba2b96a67d0eb5))\n* **payment:** CHECKOUT-5029 Return error if hosted field iframe is removed during asynchronous call ([35f91df](https://github.com/bigcommerce/checkout-sdk-js/commit/35f91df566a47f081150bc9db2236da0c26c525e))\n* **shipping:** INT-2832 Handle custom fields for AmazonPayV2 ([a27d244](https://github.com/bigcommerce/checkout-sdk-js/commit/a27d24466ec69e1d9182028480c7dc39bf2953ac))\n\n### [1.82.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.82.0...v1.82.1) (2020-07-10)\n\n## [1.82.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.81.0...v1.82.0) (2020-07-07)\n\n\n### Features\n\n* **common:** BC-897 Upgrade typescript ([08cc2f8](https://github.com/bigcommerce/checkout-sdk-js/commit/08cc2f8))\n* **payment:** PAYPAL-539 MerchantId does not required for progressive onboarding ([816658d](https://github.com/bigcommerce/checkout-sdk-js/commit/816658d))\n\n## [1.81.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.80.2...v1.81.0) (2020-07-03)\n\n\n### Features\n\n* **payment:** PAYPAL-508 Mark up flow additional params ([a0cf703](https://github.com/bigcommerce/checkout-sdk-js/commit/a0cf703))\n\n### [1.80.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.80.1...v1.80.2) (2020-07-03)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-4995 Pass additional action data to hosted forms ([59abc4f](https://github.com/bigcommerce/checkout-sdk-js/commit/59abc4f))\n\n### [1.80.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.80.0...v1.80.1) (2020-07-02)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-4973 Initialise hosted payment field within its iframe ([db5610e](https://github.com/bigcommerce/checkout-sdk-js/commit/db5610e))\n\n## [1.80.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.79.0...v1.80.0) (2020-07-01)\n\n\n### Features\n\n* **payment:** INT-2748 Adding Sezzle strategy ([327ecb5](https://github.com/bigcommerce/checkout-sdk-js/commit/327ecb5))\n\n## [1.79.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.78.1...v1.79.0) (2020-06-25)\n\n\n### Features\n\n* **checkout:** INT-2274 Add vaulting support for Checkout.com ([89b4608](https://github.com/bigcommerce/checkout-sdk-js/commit/89b4608))\n* **payment:** INT-2279 Create a strategy for credit cards with redirect and add support to Checkout.com ([#809](https://github.com/bigcommerce/checkout-sdk-js/issues/809)) ([0f42b13](https://github.com/bigcommerce/checkout-sdk-js/commit/0f42b13))\n* **payment:** INT-2280 Added GooglePay for Checkout.com ([894d863](https://github.com/bigcommerce/checkout-sdk-js/commit/894d863))\n\n### [1.78.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.78.0...v1.78.1) (2020-06-24)\n\n## [1.78.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.77.3...v1.78.0) (2020-06-23)\n\n\n### Features\n\n* **payment:** INT-2113 Checkout button and customer strategy ([908a04d](https://github.com/bigcommerce/checkout-sdk-js/commit/908a04d))\n* **payment:** INT-2119 adding payment and shipping strategies ([c0e9cf3](https://github.com/bigcommerce/checkout-sdk-js/commit/c0e9cf3))\n* **payment:** INT-2119 Create WidgetInteraction action for Shipping Strategy ([ee6757d](https://github.com/bigcommerce/checkout-sdk-js/commit/ee6757d))\n\n### [1.77.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.77.2...v1.77.3) (2020-06-16)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-453 Submit device data to Braintree/Kount ([6506716](https://github.com/bigcommerce/checkout-sdk-js/commit/6506716))\n\n### [1.77.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.77.1...v1.77.2) (2020-06-15)\n\n\n### Bug Fixes\n\n* **payment:** INT-2759 Do not mount GiroPay component while initializing payment strategy ([7bc9e54](https://github.com/bigcommerce/checkout-sdk-js/commit/7bc9e54))\n\n### [1.77.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.77.0...v1.77.1) (2020-06-11)\n\n\n### Code Refactoring\n\n* **payment:** INT-2614 renaming values for iban/accountnumber ([a8955dd](https://github.com/bigcommerce/checkout-sdk-js/commit/a8955dd))\n\n## [1.77.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.76.2...v1.77.0) (2020-06-11)\n\n\n### Bug Fixes\n\n* **common:** INT-2308 Align button Tell me more at checkout section ([a6010bc](https://github.com/bigcommerce/checkout-sdk-js/commit/a6010bc))\n\n\n### Features\n\n* **common:** ORDERS-3323 Ensure coupon codes are upper case. ([269c236](https://github.com/bigcommerce/checkout-sdk-js/commit/269c236))\n* **payment:** INT-2722 Upgrade Adyen component library ([b10d0c7](https://github.com/bigcommerce/checkout-sdk-js/commit/b10d0c7))\n* **payment:** PAYPAL-483 Pass merchant ID on PayPal button for PPCP ([20f1756](https://github.com/bigcommerce/checkout-sdk-js/commit/20f1756))\n\n### [1.76.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.76.1...v1.76.2) (2020-06-04)\n\n\n### Bug Fixes\n\n* **payment:** INT-2726 Revert Fix redirect to home on safari ([03fe0f4](https://github.com/bigcommerce/checkout-sdk-js/commit/03fe0f4))\n\n### [1.76.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.76.0...v1.76.1) (2020-06-02)\n\n## [1.76.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.75.0...v1.76.0) (2020-06-01)\n\n\n### Features\n\n* **checkout:** INT-2001 Reload widget when apply store credit checkbox state changes ([a133618](https://github.com/bigcommerce/checkout-sdk-js/commit/a133618))\n* **payment:** INT-2629 Relate stripeConnectedAccount while initilializing GooglePay ([a62dc1d](https://github.com/bigcommerce/checkout-sdk-js/commit/a62dc1d))\n\n## [1.75.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.74.0...v1.75.0) (2020-05-28)\n\n\n### Bug Fixes\n\n* **payment:** INT-2674 Fix redirect to home on safari ([661f503](https://github.com/bigcommerce/checkout-sdk-js/commit/661f503))\n\n\n### Features\n\n* **payment:** INT-2668 Increase code coverage for adyenv2 payment strategy ([a327e59](https://github.com/bigcommerce/checkout-sdk-js/commit/a327e59))\n* **payment:** PAYMENTS-5443 Update docs to include human verification at payment step ([b50b04e](https://github.com/bigcommerce/checkout-sdk-js/commit/b50b04e))\n\n## [1.74.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.73.0...v1.74.0) (2020-05-28)\n\n\n### Features\n\n* **payment:** INT-2541 Add Laybuy strategy ([#837](https://github.com/bigcommerce/checkout-sdk-js/issues/837)) ([7e3f936](https://github.com/bigcommerce/checkout-sdk-js/commit/7e3f936))\n\n## [1.73.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.72.2...v1.73.0) (2020-05-28)\n\n\n### Features\n\n* **checkout:** CHECKOUT-4754 Send a header to indicate the version of the SDK used to place an order ([3efccbb](https://github.com/bigcommerce/checkout-sdk-js/commit/3efccbb))\n* **checkout:** CHECKOUT-4754 Send an additional header to provide information about the checkout variant that is used to pay for an order ([e1224e2](https://github.com/bigcommerce/checkout-sdk-js/commit/e1224e2))\n\n### [1.72.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.72.1...v1.72.2) (2020-05-26)\n\n\n### Bug Fixes\n\n* **payment:** INT-2691 Remove integrity & crossorigin attributes ([fb007e9](https://github.com/bigcommerce/checkout-sdk-js/commit/fb007e9))\n* **payment:** INT-2691 Remove integrity & crossorigin attributes ([db6ccf9](https://github.com/bigcommerce/checkout-sdk-js/commit/db6ccf9))\n\n### [1.72.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.72.0...v1.72.1) (2020-05-26)\n\n\n### Bug Fixes\n\n* **payment:** INT-2690 Expose AdyenV2 as a valid GooglePay gateway ([97d32e3](https://github.com/bigcommerce/checkout-sdk-js/commit/97d32e3))\n\n## [1.72.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.71.0...v1.72.0) (2020-05-25)\n\n\n### Features\n\n* **common:** CHECKOUT-4760 Expose shouldSaveAddress attribute ([1f6ff20](https://github.com/bigcommerce/checkout-sdk-js/commit/1f6ff20))\n\n## [1.71.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.70.1...v1.71.0) (2020-05-25)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-5425 add missing paymentHumanVerificationHandler dep of BoltPaymentStrategy ([#885](https://github.com/bigcommerce/checkout-sdk-js/issues/885)) ([a7618a6](https://github.com/bigcommerce/checkout-sdk-js/commit/a7618a6))\n\n\n### Features\n\n* **payment:** PAYMENTS-5425 Implement the UX for Carding remediation solution ([#875](https://github.com/bigcommerce/checkout-sdk-js/issues/875)) ([cbaa2d3](https://github.com/bigcommerce/checkout-sdk-js/commit/cbaa2d3))\n\n### [1.70.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.70.0...v1.70.1) (2020-05-22)\n\n\n### Code Refactoring\n\n* **payment:** INT-2684 Upgrade Adyen Component Library ([a872a4c](https://github.com/bigcommerce/checkout-sdk-js/commit/a872a4c))\n\n## [1.70.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.69.2...v1.70.0) (2020-05-22)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-4904 Pass Store Credit properly to amazon pay ([6900644](https://github.com/bigcommerce/checkout-sdk-js/commit/6900644))\n\n\n### Features\n\n* **checkout:** INT-2577 Create a strategy for Bolt ([484eab8](https://github.com/bigcommerce/checkout-sdk-js/commit/484eab8))\n* **payment:** INT-2613 remove receipt_email in stripe-strategy ([9c10454](https://github.com/bigcommerce/checkout-sdk-js/commit/9c10454))\n\n### [1.69.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.69.1...v1.69.2) (2020-05-20)\n\n\n### Bug Fixes\n\n* **shopper:** CHECKOUT-4897 Add redirect_to to SignInEmail ([b020bfa](https://github.com/bigcommerce/checkout-sdk-js/commit/b020bfa))\n\n### [1.69.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.69.0...v1.69.1) (2020-05-19)\n\n\n### Bug Fixes\n\n* **shopper:** CHECKOUT-4742 Update customer object when continuing as guest ([c83c50f](https://github.com/bigcommerce/checkout-sdk-js/commit/c83c50f))\n\n## [1.69.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.68.0...v1.69.0) (2020-05-15)\n\n\n### Features\n\n* **payment:** INT-2612 Pay with vaulted SEPA accounts ([a97533f](https://github.com/bigcommerce/checkout-sdk-js/commit/a97533f))\n\n## [1.68.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.67.1...v1.68.0) (2020-05-14)\n\n\n### Features\n\n* **payment:** PAYPAL-365 choses paypalcredit method on the checkout ([cfae602](https://github.com/bigcommerce/checkout-sdk-js/commit/cfae602))\n\n### [1.67.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.67.0...v1.67.1) (2020-05-14)\n\n\n### Bug Fixes\n\n* **payment:** PAYPAL-406 Checkout order after approval issue ([438bf2b](https://github.com/bigcommerce/checkout-sdk-js/commit/438bf2b))\n\n## [1.67.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.66.0...v1.67.0) (2020-05-14)\n\n\n### Features\n\n* **checkout:** INT-2497 Add elavon to supported instruments whitelist ([b145268](https://github.com/bigcommerce/checkout-sdk-js/commit/b145268))\n* **payment:** INT-2437 Add support for GooglePay on Adyen ([4853677](https://github.com/bigcommerce/checkout-sdk-js/commit/4853677))\n\n## [1.66.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.65.0...v1.66.0) (2020-05-12)\n\n\n### Code Refactoring\n\n* **payment:** INT-2611 Update the klarna session before load the widget ([4905de5](https://github.com/bigcommerce/checkout-sdk-js/commit/4905de5))\n\n\n### Features\n\n* **common:** CHECKOUT-4879 Expose flash messages ([f9c71e5](https://github.com/bigcommerce/checkout-sdk-js/commit/f9c71e5))\n\n## [1.65.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.64.0...v1.65.0) (2020-05-06)\n\n\n### Features\n\n* **payment:** PAYPAL-293 Bump bigpay-client version to 5.6.0 ([b58a229](https://github.com/bigcommerce/checkout-sdk-js/commit/b58a229))\n\n## [1.64.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.63.1...v1.64.0) (2020-05-05)\n\n\n### Features\n\n* **payment:** PAYPAL-293 Implement paypalcommercecredit provider ([ceaaa69](https://github.com/bigcommerce/checkout-sdk-js/commit/ceaaa69))\n\n### [1.63.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.63.0...v1.63.1) (2020-05-04)\n\n\n### Bug Fixes\n\n* **spam-protection:** CHECKOUT-4852 Make sure spam protection execution status is accurate ([be0221d](https://github.com/bigcommerce/checkout-sdk-js/commit/be0221d))\n* **spam-protection:** CHECKOUT-4852 Rethrow spam protection cancellation error ([0294b2b](https://github.com/bigcommerce/checkout-sdk-js/commit/0294b2b))\n\n## [1.63.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.62.0...v1.63.0) (2020-04-29)\n\n\n### Features\n\n* **payment:** PAYPAL-19 Paypal Commerce ([2ab3bed](https://github.com/bigcommerce/checkout-sdk-js/commit/2ab3bed))\n\n## [1.62.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.61.0...v1.62.0) (2020-04-29)\n\n\n### Features\n\n* **payment:** INT-2428 Modified filter to accept AccountInstruments ([7eab61b](https://github.com/bigcommerce/checkout-sdk-js/commit/7eab61b))\n\n## [1.61.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.60.1...v1.61.0) (2020-04-23)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-4842 Trigger event when \"enter\" key is pressed in one of hosted payment fields ([a9f9e86](https://github.com/bigcommerce/checkout-sdk-js/commit/a9f9e86))\n\n\n### Features\n\n* **shopper:** CHECKOUT-4799 Add Sign-in Email support ([bbea61e](https://github.com/bigcommerce/checkout-sdk-js/commit/bbea61e))\n\n### [1.60.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.60.0...v1.60.1) (2020-04-22)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-4774 Handle no hosted fields to be rendered scenario ([84acf19](https://github.com/bigcommerce/checkout-sdk-js/commit/84acf19))\n\n## [1.60.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.59.0...v1.60.0) (2020-04-16)\n\n\n### Bug Fixes\n\n* **embedded-checkout:** CHECKOUT-4789 Export createEmbeddedCheckoutMessenger function in embedded-checkout bundle ([d2f9f8c](https://github.com/bigcommerce/checkout-sdk-js/commit/d2f9f8c))\n\n\n### Features\n\n* **payment:** INT-2410 Add stripe account as configuration ([aa39dc0](https://github.com/bigcommerce/checkout-sdk-js/commit/aa39dc0))\n\n## [1.59.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.58.0...v1.59.0) (2020-04-03)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-5178 Add hasDefaultStoredInstrument property to PaymentMethodConfig to fix default stored instruments feature ([b2f559b](https://github.com/bigcommerce/checkout-sdk-js/commit/b2f559b))\n\n\n### Features\n\n* **payment:** INT-2452 Add billing and shipping for klarna ([d264abf](https://github.com/bigcommerce/checkout-sdk-js/commit/d264abf))\n\n## [1.58.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.57.0...v1.58.0) (2020-04-02)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-4789 Apply polyfills to external dependencies for targeted environments ([864fd31](https://github.com/bigcommerce/checkout-sdk-js/commit/864fd31))\n* **payment:** INT-2431 Adds expiration date for Bancontact payments ([7249375](https://github.com/bigcommerce/checkout-sdk-js/commit/7249375))\n\n\n### Features\n\n* **checkout:** INT-2001 Enable support for Store Credit on both versions of Klarna ([b05f46a](https://github.com/bigcommerce/checkout-sdk-js/commit/b05f46a))\n\n## [1.57.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.56.2...v1.57.0) (2020-03-26)\n\n\n### Features\n\n* **payment:** INT-1710 Add support for ACH & Vipps on Adyen ([76a51ca](https://github.com/bigcommerce/checkout-sdk-js/commit/76a51ca))\n\n### [1.56.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.56.1...v1.56.2) (2020-03-19)\n\n\n### Bug Fixes\n\n* **payment:** INT-2427 Use ExpiryDate while paying with a vaulted Bancontact card rather than CVV ([1c67049](https://github.com/bigcommerce/checkout-sdk-js/commit/1c67049))\n\n### [1.56.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.56.0...v1.56.1) (2020-03-17)\n\n\n### Bug Fixes\n\n* **payment:** INT-2418 Use SecurityNumber to validate safeguard ([e9cadb4](https://github.com/bigcommerce/checkout-sdk-js/commit/e9cadb4))\n\n## [1.56.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.55.2...v1.56.0) (2020-03-15)\n\n\n### Features\n\n* **payment:** INT-1104 Add GooglePay on Auth.net ([98d8090](https://github.com/bigcommerce/checkout-sdk-js/commit/98d8090))\n\n### [1.55.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.55.1...v1.55.2) (2020-03-14)\n\n### [1.55.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.55.0...v1.55.1) (2020-03-13)\n\n\n### Code Refactoring\n\n* **payment:** INT-2350 Style the object syntax in the test so it can easily be read ([46990e2](https://github.com/bigcommerce/checkout-sdk-js/commit/46990e2))\n* **payment:** INT-2350 Use createFromAction for every payment method ([d1a62e9](https://github.com/bigcommerce/checkout-sdk-js/commit/d1a62e9))\n\n## [1.55.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.54.0...v1.55.0) (2020-03-04)\n\n\n### Bug Fixes\n\n* **shipping:** CHECKOUT-4416 Include custom items IDs when calling CheckoutService#updateShippingAddress ([6ee47c5](https://github.com/bigcommerce/checkout-sdk-js/commit/6ee47c5))\n* **shopper:** CHECKOUT-4640 Fix state when consent is provided ([d9bf7f5](https://github.com/bigcommerce/checkout-sdk-js/commit/d9bf7f5))\n\n\n### Features\n\n* **checkout:** INT-1434 Creating klarnav2 strategy to support multi-option ([c8e4667](https://github.com/bigcommerce/checkout-sdk-js/commit/c8e4667))\n\n## [1.54.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.53.1...v1.54.0) (2020-02-24)\n\n\n### Features\n\n* **payment:** INT-2062 Support iDEAL & Giropay APM's through AdyenV2 gateway ([1334714](https://github.com/bigcommerce/checkout-sdk-js/commit/1334714))\n\n### [1.53.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.53.0...v1.53.1) (2020-02-24)\n\n\n### Bug Fixes\n\n* **shopper:** CHECKOUT-4640 Add support for marketing emails consent ([04714a1](https://github.com/bigcommerce/checkout-sdk-js/commit/04714a1))\n\n## [1.53.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.52.1...v1.53.0) (2020-02-21)\n\n\n### Features\n\n* **payments:** INT-1997 Integrate BlueSnap V2 strategy ([#732](https://github.com/bigcommerce/checkout-sdk-js/issues/732)) ([d2cc31c](https://github.com/bigcommerce/checkout-sdk-js/commit/d2cc31c))\n\n### [1.52.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.52.0...v1.52.1) (2020-02-12)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-4669 Convert buffer to string before comparing with package version ([0f8f411](https://github.com/bigcommerce/checkout-sdk-js/commit/0f8f411))\n\n## [1.52.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.51.1...v1.52.0) (2020-02-11)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-4245 handle custom fields for amazon pay ([d7c7273](https://github.com/bigcommerce/checkout-sdk-js/commit/d7c7273))\n\n\n### Features\n\n* **payment:** CHECKOUT-4669 Create version-specific loader file and reference it in hosted payment form ([4d00281](https://github.com/bigcommerce/checkout-sdk-js/commit/4d00281))\n\n### [1.51.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.51.0...v1.51.1) (2020-02-10)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-4655 Make Cardinal 3DS work with hosted payment form ([199f19c](https://github.com/bigcommerce/checkout-sdk-js/commit/199f19c))\n\n## [1.51.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.50.2...v1.51.0) (2020-02-09)\n\n\n### Features\n\n* **payment:** INT-2286 Use credit_card as payment method instead of card ([11c2ad1](https://github.com/bigcommerce/checkout-sdk-js/commit/11c2ad1))\n\n### [1.50.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.50.1...v1.50.2) (2020-02-03)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-4655 Fix SagePay form post target value ([8f6c7c1](https://github.com/bigcommerce/checkout-sdk-js/commit/8f6c7c1))\n\n### [1.50.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.50.0...v1.50.1) (2020-02-03)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-4655 Add support for additional card types when validating hosted payment form ([1253191](https://github.com/bigcommerce/checkout-sdk-js/commit/1253191))\n* **payment:** CHECKOUT-4655 Rethrow payment request error when paying with hosted payment form ([05ce3fc](https://github.com/bigcommerce/checkout-sdk-js/commit/05ce3fc))\n* **payment:** CHECKOUT-4655 Use hosted payment form when paying with SagePay ([08a151e](https://github.com/bigcommerce/checkout-sdk-js/commit/08a151e))\n\n## [1.50.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.49.0...v1.50.0) (2020-02-02)\n\n\n### Features\n\n* **payment:** INT-1990 Add browser info as part of payload to Adyen V2 ([0a91d66](https://github.com/bigcommerce/checkout-sdk-js/commit/0a91d66))\n\n## [1.49.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.48.0...v1.49.0) (2020-01-23)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-4205 Reload checkout page if for some reason form expires after initial page load ([444a006](https://github.com/bigcommerce/checkout-sdk-js/commit/444a006))\n* **payment:** CHECKOUT-4627 Load fonts required for hosted fields ([5261968](https://github.com/bigcommerce/checkout-sdk-js/commit/5261968))\n* **shipping:** CHECKOUT-3818 Update coupon state when shipping option is updated ([e0a9786](https://github.com/bigcommerce/checkout-sdk-js/commit/e0a9786))\n\n\n### Code Refactoring\n\n* **common:** CHECKOUT-4203 Allow synthetic default imports ([f446753](https://github.com/bigcommerce/checkout-sdk-js/commit/f446753))\n* **common:** CHECKOUT-4203 Move iframe event listener and poster to `common` module and add ability to wait for feedback when posting messages ([6d571ce](https://github.com/bigcommerce/checkout-sdk-js/commit/6d571ce))\n* **payment:** CHECKOUT-4203 Remove duplicate code ([df03c1b](https://github.com/bigcommerce/checkout-sdk-js/commit/df03c1b))\n\n\n### Features\n\n* **payment:** CHECKOUT-4203 Add card number and expiry inputs ([8403202](https://github.com/bigcommerce/checkout-sdk-js/commit/8403202))\n* **payment:** CHECKOUT-4203 Add factory for creating hosted payment form ([a8b35f5](https://github.com/bigcommerce/checkout-sdk-js/commit/a8b35f5))\n* **payment:** CHECKOUT-4203 Add functions for creating hosted inputs ([e42046a](https://github.com/bigcommerce/checkout-sdk-js/commit/e42046a))\n* **payment:** CHECKOUT-4203 Add text input element responsible for accepting user input inside iframe ([b460e97](https://github.com/bigcommerce/checkout-sdk-js/commit/b460e97))\n* **payment:** CHECKOUT-4203 Export hosted input initializer as separate file ([74b2676](https://github.com/bigcommerce/checkout-sdk-js/commit/74b2676))\n* **payment:** CHECKOUT-4203 Submit card details via hosted fields for stored instrument verification ([58cf2d8](https://github.com/bigcommerce/checkout-sdk-js/commit/58cf2d8))\n* **payment:** CHECKOUT-4203 Use hosted payment form for credit card payment if feature is enabled ([a0512a1](https://github.com/bigcommerce/checkout-sdk-js/commit/a0512a1))\n* **payment:** CHECKOUT-4204 Format credit card field values ([69e717a](https://github.com/bigcommerce/checkout-sdk-js/commit/69e717a))\n* **payment:** CHECKOUT-4205 Improve the way validation errors are returned to the caller ([d3701d8](https://github.com/bigcommerce/checkout-sdk-js/commit/d3701d8))\n* **payment:** CHECKOUT-4627 Add hosted form to loader ([f0fe47a](https://github.com/bigcommerce/checkout-sdk-js/commit/f0fe47a))\n\n## [1.48.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.47.4...v1.48.0) (2020-01-21)\n\n\n### Features\n\n* **common:** CHECKOUT-4187 Build distribution files for static server ([e84da54](https://github.com/bigcommerce/checkout-sdk-js/commit/e84da54))\n\n### [1.47.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.47.3...v1.47.4) (2020-01-20)\n\n\n### Bug Fixes\n\n* **payment:** INT-2140 Unpatch mapToCardInstrument ([dcc5a04](https://github.com/bigcommerce/checkout-sdk-js/commit/dcc5a04))\n* **payment:** PAYMENTS-4997 After deleting a PP account from checkout, all accounts with same email are deleted but not removed from available vaulted accounts list unless page is refreshed ([6cc92e0](https://github.com/bigcommerce/checkout-sdk-js/commit/6cc92e0))\n\n### [1.47.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.47.2...v1.47.3) (2020-01-09)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-5037 Bump bigpay-client version to 5.4.1 ([af98270](https://github.com/bigcommerce/checkout-sdk-js/commit/af98270))\n\n### [1.47.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.47.1...v1.47.2) (2020-01-08)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-5037 Add Item Unit Price to Line Item object in order payment payload ([1919da1](https://github.com/bigcommerce/checkout-sdk-js/commit/1919da1))\n\n### [1.47.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.47.0...v1.47.1) (2020-01-07)\n\n\n### Bug Fixes\n\n* **spam-protection:** CHECKOUT-4560 Fix spam protection not working for braintree in non-chrome browsers ([4c2c8ac](https://github.com/bigcommerce/checkout-sdk-js/commit/4c2c8ac))\n\n## [1.47.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.46.2...v1.47.0) (2019-12-30)\n\n\n### Features\n\n* **payment:** INT-2181 Utilize Adyen Custom Card Components in TSV ([ceebc4d](https://github.com/bigcommerce/checkout-sdk-js/commit/ceebc4d))\n\n### [1.46.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.46.1...v1.46.2) (2019-12-18)\n\n\n### Bug Fixes\n\n* **payment:** INT-2195 Fix barclaycard supported instrument mapping ([a37e8d7](https://github.com/bigcommerce/checkout-sdk-js/commit/a37e8d7))\n\n### [1.46.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.46.0...v1.46.1) (2019-12-16)\n\n\n### Bug Fixes\n\n* **billing:** CHECKOUT-4421 Return billing address if it is partially complete ([dd99533](https://github.com/bigcommerce/checkout-sdk-js/commit/dd99533))\n\n## [1.46.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.45.1...v1.46.0) (2019-12-11)\n\n\n### Features\n\n* **billing:** CHECKOUT-4421 Preselect billing country when no billing address has been set ([1583373](https://github.com/bigcommerce/checkout-sdk-js/commit/1583373))\n* **checkout:** INT-1780 Add supported intruments ([8eadd11](https://github.com/bigcommerce/checkout-sdk-js/commit/8eadd11))\n* **checkout:** INT-1780 Enable card vaulting for barclaycard ([ee87641](https://github.com/bigcommerce/checkout-sdk-js/commit/ee87641))\n* **checkout:** INT-1780 Remove provider specific strategy ([a2d0cbb](https://github.com/bigcommerce/checkout-sdk-js/commit/a2d0cbb))\n* **checkout:** INT-1780 Remove unnecessary decosntruction ([6cfbcc2](https://github.com/bigcommerce/checkout-sdk-js/commit/6cfbcc2))\n* **checkout:** INT-1780 Remove unused import ([209909e](https://github.com/bigcommerce/checkout-sdk-js/commit/209909e))\n* **checkout:** INT-1780 Remove unused interface ([1f7507f](https://github.com/bigcommerce/checkout-sdk-js/commit/1f7507f))\n* **checkout:** INT-1780 Send only one param ([2579c84](https://github.com/bigcommerce/checkout-sdk-js/commit/2579c84))\n* **checkout:** INT-1780 Send params separately ([c77d4cc](https://github.com/bigcommerce/checkout-sdk-js/commit/c77d4cc))\n* **checkout:** INT-1780 Use offsite to pay with instrument ([04315ee](https://github.com/bigcommerce/checkout-sdk-js/commit/04315ee))\n* **common:** CHECKOUT-4571 Add StepTracker service ([f4b1dd4](https://github.com/bigcommerce/checkout-sdk-js/commit/f4b1dd4))\n\n### [1.45.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.45.0...v1.45.1) (2019-11-27)\n\n## [1.45.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.44.1...v1.45.0) (2019-11-25)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-4513 Add extendedComparisonPrice from API ([a3f56d9](https://github.com/bigcommerce/checkout-sdk-js/commit/a3f56d9))\n* **payment:** PAYMENTS-4971 Remove extra keys from Braintree PayPal Tokenize call ([33ef094](https://github.com/bigcommerce/checkout-sdk-js/commit/33ef094))\n\n\n### Features\n\n* **payment:** INT-1902 Update payment method id and instrument selector to support gateway ([7709c45](https://github.com/bigcommerce/checkout-sdk-js/commit/7709c45))\n\n### [1.44.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.44.0...v1.44.1) (2019-11-25)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-4971 Remove extra keys from Braintree PayPal Tokenize call ([90755fb](https://github.com/bigcommerce/checkout-sdk-js/commit/90755fb))\n\n## [1.44.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.43.0...v1.44.0) (2019-11-12)\n\n\n### Features\n\n* **payment:** INT-1902 Support vaulting with instrument_type ([6f77be9](https://github.com/bigcommerce/checkout-sdk-js/commit/6f77be9))\n\n## [1.43.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.42.0...v1.43.0) (2019-11-05)\n\n\n### Features\n\n* **checkout:** CHECKOUT-4465 Make state/province optional for certain countries based on requireState flag ([d177113](https://github.com/bigcommerce/checkout-sdk-js/commit/d177113))\n* **common:** PAYPAL-7 Pass in merchant ID on PayPal button script for PayPal Express Checkout ([dee37aa](https://github.com/bigcommerce/checkout-sdk-js/commit/dee37aa))\n* **common:** PAYPAL-7 Pass in merchant ID on PayPal button script for PayPal Express Checkout ([99d4142](https://github.com/bigcommerce/checkout-sdk-js/commit/99d4142))\n* **payment:** PAYPAL-7 Pass in merchant ID on PayPal button script for PayPal Express Checkout ([8044df2](https://github.com/bigcommerce/checkout-sdk-js/commit/8044df2))\n\n## [1.42.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.41.0...v1.42.0) (2019-11-04)\n\n\n### Bug Fixes\n\n* **payment:** INT-1928 map sku in internal line item ([fcb32dd](https://github.com/bigcommerce/checkout-sdk-js/commit/fcb32dd))\n* **payment:** PAYMENTS-4704 Send shipping address when checking out using Braintree PayPal ([b047cfe](https://github.com/bigcommerce/checkout-sdk-js/commit/b047cfe))\n\n\n### Features\n\n* **checkout:** INT-1916 Make barclaycard compatible with offsite strategy ([cdf578b](https://github.com/bigcommerce/checkout-sdk-js/commit/cdf578b))\n\n## [1.41.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.40.0...v1.41.0) (2019-10-28)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-4616 Add braintree.paypal as a supported instrument ([e532a19](https://github.com/bigcommerce/checkout-sdk-js/commit/e532a19))\n\n\n### Features\n\n* **shipping:** CHECKOUT-4509 Optional param to include shippings options when updating shipping address ([132075c](https://github.com/bigcommerce/checkout-sdk-js/commit/132075c))\n\n## [1.40.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.39.0...v1.40.0) (2019-10-27)\n\n\n### Code Refactoring\n\n* **payment:** PAYMENTS-4616 Use an object for paypal configuration ([b743c39](https://github.com/bigcommerce/checkout-sdk-js/commit/b743c39))\n* **payment:** PAYMENTS-4616 Use paypal_account for sending paypal information to bigpay ([cd1abbe](https://github.com/bigcommerce/checkout-sdk-js/commit/cd1abbe))\n\n\n### Features\n\n* **payment:** PAYMENTS-4616 Add support for paying with a vaulted paypal account ([4f98f39](https://github.com/bigcommerce/checkout-sdk-js/commit/4f98f39))\n* **payment:** PAYMENTS-4616 Add support for vaulting Paypal Accounts ([6b578ea](https://github.com/bigcommerce/checkout-sdk-js/commit/6b578ea))\n\n## [1.39.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.38.1...v1.39.0) (2019-10-27)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-3365 Update cart and checkout state when shipping options are loaded ([05c80bf](https://github.com/bigcommerce/checkout-sdk-js/commit/05c80bf))\n* **payment:** PAYMENTS-4759 Make Instrument types backward compatible ([f700b45](https://github.com/bigcommerce/checkout-sdk-js/commit/f700b45))\n\n\n### Features\n\n* **payment:** PAYMENTS-4759 Add support for filtering instruments ([5dfa155](https://github.com/bigcommerce/checkout-sdk-js/commit/5dfa155))\n* **payment:** PAYMENTS-4759 Support for account Instruments ([9fc0e73](https://github.com/bigcommerce/checkout-sdk-js/commit/9fc0e73))\n\n### [1.38.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.38.0...v1.38.1) (2019-10-15)\n\n\n### Bug Fixes\n\n* **common:** PAYMENTS-4802 Fix ArrayReplace default comparison ([c4f2b19](https://github.com/bigcommerce/checkout-sdk-js/commit/c4f2b19))\n* **shipping:** SHIPPING-1384 Extend shipping option interface ([a6a850a](https://github.com/bigcommerce/checkout-sdk-js/commit/a6a850a))\n\n\n### Code Refactoring\n\n* **common:** CHECKOUT-4455 Upgrade `script-loader` version ([dc5b3e5](https://github.com/bigcommerce/checkout-sdk-js/commit/dc5b3e5))\n* **common:** CHECKOUT-4485 Fix inconsistency in import statements by using `eslint-plugin-import` plugin ([71980ef](https://github.com/bigcommerce/checkout-sdk-js/commit/71980ef))\n* **common:** CHECKOUT-4485 Use ESLint to enforce use of newline in import statements ([3da456b](https://github.com/bigcommerce/checkout-sdk-js/commit/3da456b))\n\n## [1.38.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.37.2...v1.38.0) (2019-10-08)\n\n\n### Bug Fixes\n\n* **order:** CHECKOUT-4450 Handle recaptcha challenge not finish loading on slow connection ([62c3f73](https://github.com/bigcommerce/checkout-sdk-js/commit/62c3f73))\n\n\n### Features\n\n* **payment:** INT-1901 Use modal to handle 3DS for Adyen ([038836f](https://github.com/bigcommerce/checkout-sdk-js/commit/038836f))\n\n### [1.37.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.37.1...v1.37.2) (2019-10-03)\n\n\n### Bug Fixes\n\n* **order:** CHECKOUT-4450 Fix recaptcha iframe not found for german language ([94cd8a7](https://github.com/bigcommerce/checkout-sdk-js/commit/94cd8a7))\n\n### [1.37.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.37.0...v1.37.1) (2019-10-02)\n\n\n### Bug Fixes\n\n* **embedded-checkout:** CHECKOUT-4462 Only retry again if sufficient time has passed ([b7567ad](https://github.com/bigcommerce/checkout-sdk-js/commit/b7567ad))\n* **embedded-checkout:** CHECKOUT-4462 Only trigger event handler if type matches ([b5263c5](https://github.com/bigcommerce/checkout-sdk-js/commit/b5263c5))\n\n## [1.37.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.36.0...v1.37.0) (2019-09-25)\n\n\n### Features\n\n* **payment:** ISSUE-640 Add shippingAddress initial param for Braintree PayPal ([09326b5](https://github.com/bigcommerce/checkout-sdk-js/commit/09326b5))\n\n## [1.36.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.35.2...v1.36.0) (2019-09-25)\n\n\n### Features\n\n* **common:** CHECKOUT-4403 Upgrade to latest Typescript ([65c0468](https://github.com/bigcommerce/checkout-sdk-js/commit/65c0468))\n* **payment:** INT-1759 Using same order reference ID when an error occurs ([1a25fb8](https://github.com/bigcommerce/checkout-sdk-js/commit/1a25fb8))\n\n<a name=\"1.35.2\"></a>\n## [1.35.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.35.1...v1.35.2) (2019-09-18)\n\n\n### Bug Fixes\n\n* **shopper:** CHECKOUT-4415 Check if `customerGroup` is defined before accessing it ([bbd43ee](https://github.com/bigcommerce/checkout-sdk-js/commit/bbd43ee))\n\n\n\n<a name=\"1.35.1\"></a>\n## [1.35.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.35.0...v1.35.1) (2019-09-17)\n\n\n### Bug Fixes\n\n* **common:** 681 Use Lodash find ([a1ea70b](https://github.com/bigcommerce/checkout-sdk-js/commit/a1ea70b))\n* **embedded-checkout:** CHECKOUT-4427 Fix IE11 not returning origin of URL ([7d772bb](https://github.com/bigcommerce/checkout-sdk-js/commit/7d772bb))\n* **embedded-checkout:** CHECKOUT-4427 Provide index position when inserting CSS rule for IE11 ([7cfddc7](https://github.com/bigcommerce/checkout-sdk-js/commit/7cfddc7))\n* **payment:** CHECKOUT-4418 Upgrade bigpay-client version ([48d65f1](https://github.com/bigcommerce/checkout-sdk-js/commit/48d65f1))\n* **payment:** INT-1759 Emit error action when strategy throws error ([cc3084c](https://github.com/bigcommerce/checkout-sdk-js/commit/cc3084c))\n* **shopper:** CHECKOUT-4415 Add Customer Group to Customer object in payments payload ([8fad4ea](https://github.com/bigcommerce/checkout-sdk-js/commit/8fad4ea))\n\n\n\n<a name=\"1.35.0\"></a>\n# [1.35.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.34.3...v1.35.0) (2019-09-12)\n\n\n### Bug Fixes\n\n* **cart:** CHECKOUT-4315 Add comparisonPrice attribute ([9f4a2c4](https://github.com/bigcommerce/checkout-sdk-js/commit/9f4a2c4))\n* **order:** CHECKOUT-4393 Fix could not resubmit order after failed attempt ([9127318](https://github.com/bigcommerce/checkout-sdk-js/commit/9127318))\n\n\n### Features\n\n* **payment:** CHECKOUT-4263 Support for applying/removing store credit ([fc59792](https://github.com/bigcommerce/checkout-sdk-js/commit/fc59792))\n* **payment:** INT-1783 AdyenV2 payment strategy with 3DS2 / 3DS1 flow support ([1551703](https://github.com/bigcommerce/checkout-sdk-js/commit/1551703))\n\n\n\n<a name=\"1.34.3\"></a>\n## [1.34.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.34.2...v1.34.3) (2019-09-04)\n\n\n### Bug Fixes\n\n* **embedded-checkout:** CHECKOUT-4388 Mark index file of Embedded Checkout as file with side effects ([d3c528b](https://github.com/bigcommerce/checkout-sdk-js/commit/d3c528b))\n\n\n\n<a name=\"1.34.2\"></a>\n## [1.34.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.34.1...v1.34.2) (2019-08-29)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-4367 Set error name for StandardError ([59728eb](https://github.com/bigcommerce/checkout-sdk-js/commit/59728eb))\n* **common:** CHECKOUT-4367 Stop throwing generic `StandardError` type ([857c04b](https://github.com/bigcommerce/checkout-sdk-js/commit/857c04b))\n\n\n\n<a name=\"1.34.1\"></a>\n## [1.34.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.34.0...v1.34.1) (2019-08-28)\n\n\n### Bug Fixes\n\n* **payment:** INT-1829 Remove error validation if no code action is present ([b7e07c7](https://github.com/bigcommerce/checkout-sdk-js/commit/b7e07c7))\n* **payment:** INT-1836 Update strategy to support 3ds with vaulting ([44e8ac6](https://github.com/bigcommerce/checkout-sdk-js/commit/44e8ac6))\n\n\n### Performance Improvements\n\n* **common:** CHECKOUT-4272 Only set up event listeners for iframe resizer when it is in use ([58e0a1e](https://github.com/bigcommerce/checkout-sdk-js/commit/58e0a1e))\n\n\n\n<a name=\"1.34.0\"></a>\n# [1.34.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.33.0...v1.34.0) (2019-08-14)\n\n\n### Features\n\n* **payment:** INT-1608 Modify Paypal Payments Pro strategy for 3DS ([6e0d6f0](https://github.com/bigcommerce/checkout-sdk-js/commit/6e0d6f0))\n\n\n\n<a name=\"1.33.0\"></a>\n# [1.33.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.32.1...v1.33.0) (2019-08-13)\n\n\n### Features\n\n* **payment:** INT-1811 Fix enrolled card Issue ([f2e1ab0](https://github.com/bigcommerce/checkout-sdk-js/commit/f2e1ab0))\n\n\n\n<a name=\"1.32.1\"></a>\n## [1.32.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.32.0...v1.32.1) (2019-08-12)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-4321 Fix getters not returning previous cloned objects that are nested inside another even when they are unchanged. ([277a8fe](https://github.com/bigcommerce/checkout-sdk-js/commit/277a8fe))\n\n\n\n<a name=\"1.32.0\"></a>\n# [1.32.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.31.1...v1.32.0) (2019-08-08)\n\n\n### Features\n\n* **payment:** INT-1736 Add Reference Id value in the jwt to initialize cardinal and update logic to handle the new Cardinal's Payload ([dc8abe1](https://github.com/bigcommerce/checkout-sdk-js/commit/dc8abe1))\n\n\n\n<a name=\"1.31.1\"></a>\n## [1.31.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.31.0...v1.31.1) (2019-08-07)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-4272 Fix immutable array replacer as it returns original array instead of merged array ([e02f62b](https://github.com/bigcommerce/checkout-sdk-js/commit/e02f62b))\n* **common:** CHECKOUT-4272 Fix unsubscribe function not able to unsubscribe ([537e6d6](https://github.com/bigcommerce/checkout-sdk-js/commit/537e6d6))\n* **common:** CHECKOUT-4272 Use another data store as projection instead of plain observable so you can still notify subscribers when subscription filters are applied ([397ab34](https://github.com/bigcommerce/checkout-sdk-js/commit/397ab34))\n\n\n### Performance Improvements\n\n* **checkout:** CHECKOUT-4272 Add function for creating checkout selectors factory ([f7b3ba5](https://github.com/bigcommerce/checkout-sdk-js/commit/f7b3ba5))\n* **checkout:** CHECKOUT-4272 Refactor checkout selector to return new getters only when there are changes to relevant data ([cf77c05](https://github.com/bigcommerce/checkout-sdk-js/commit/cf77c05))\n* **checkout:** CHECKOUT-4272 Refactor checkout store data selector to return new getters only when there are changes to relevant data ([7a4d7b7](https://github.com/bigcommerce/checkout-sdk-js/commit/7a4d7b7))\n* **checkout:** CHECKOUT-4272 Refactor checkout store error selector to return new getters only when there are changes to relevant data ([9dccc3d](https://github.com/bigcommerce/checkout-sdk-js/commit/9dccc3d))\n* **checkout:** CHECKOUT-4272 Refactor checkout store status selector to return new getters only when there are changes to relevant data ([4b0391d](https://github.com/bigcommerce/checkout-sdk-js/commit/4b0391d))\n* **checkout:** CHECKOUT-4272 Refactor remote checkout selector to return new getters only when there are changes to relevant data ([db65c75](https://github.com/bigcommerce/checkout-sdk-js/commit/db65c75))\n* **checkout:** CHECKOUT-4272 Update checkout reducer to transform state only when necessary ([ed5f6a8](https://github.com/bigcommerce/checkout-sdk-js/commit/ed5f6a8))\n* **checkout:** CHECKOUT-4272 Update remote checkout reducer to transform state only when necessary ([76c6a61](https://github.com/bigcommerce/checkout-sdk-js/commit/76c6a61))\n* **checkout-button:** CHECKOUT-4272 Refactor checkout button selector to return new getters only when there are changes to relevant data ([6b939af](https://github.com/bigcommerce/checkout-sdk-js/commit/6b939af))\n* **checkout-button:** CHECKOUT-4272 Update checkout button reducer to transform state only when necessary ([eacc9a1](https://github.com/bigcommerce/checkout-sdk-js/commit/eacc9a1))\n* **common:** CHECKOUT-4272 Add function that can clone return value of function if it is different from previous call ([2b4f7e2](https://github.com/bigcommerce/checkout-sdk-js/commit/2b4f7e2))\n* **common:** CHECKOUT-4272 Refactor config selector to return new getters only when there are changes to relevant data ([f055ab0](https://github.com/bigcommerce/checkout-sdk-js/commit/f055ab0))\n* **common:** CHECKOUT-4272 Refactor country selector to return new getters only when there are changes to relevant data ([83d9ca3](https://github.com/bigcommerce/checkout-sdk-js/commit/83d9ca3))\n* **common:** CHECKOUT-4272 Refactor form selector to return new getters only when there are changes to relevant data ([7489058](https://github.com/bigcommerce/checkout-sdk-js/commit/7489058))\n* **common:** CHECKOUT-4272 Update config reducer to transform state only when necessary ([74805a6](https://github.com/bigcommerce/checkout-sdk-js/commit/74805a6))\n* **common:** CHECKOUT-4272 Update country reducer to transform state only when necessary ([2bdae4c](https://github.com/bigcommerce/checkout-sdk-js/commit/2bdae4c))\n* **payment:** CHECKOUT-4272 Refactor instrument selector to return new getters only when there are changes to relevant data ([655d298](https://github.com/bigcommerce/checkout-sdk-js/commit/655d298))\n* **payment:** CHECKOUT-4272 Refactor payment method selector to return new getters only when there are changes to relevant data ([f5bddc4](https://github.com/bigcommerce/checkout-sdk-js/commit/f5bddc4))\n* **payment:** CHECKOUT-4272 Refactor payment selector to return new getters only when there are changes to relevant data ([c35b0a1](https://github.com/bigcommerce/checkout-sdk-js/commit/c35b0a1))\n* **payment:** CHECKOUT-4272 Refactor payment strategy selector to return new getters only when there are changes to relevant data ([1c419e7](https://github.com/bigcommerce/checkout-sdk-js/commit/1c419e7))\n* **payment:** CHECKOUT-4272 Update instrument reducer to transform state only when necessary ([6543213](https://github.com/bigcommerce/checkout-sdk-js/commit/6543213))\n* **payment:** CHECKOUT-4272 Update payment method reducer to transform state only when necessary ([a6dbba9](https://github.com/bigcommerce/checkout-sdk-js/commit/a6dbba9))\n* **payment:** CHECKOUT-4272 Update payment strategy reducer to transform state only when necessary ([dfda886](https://github.com/bigcommerce/checkout-sdk-js/commit/dfda886))\n* **shipping:** CHECKOUT-4272 Refactor consignment selector to return new getters only when there are changes to relevant data ([87ad888](https://github.com/bigcommerce/checkout-sdk-js/commit/87ad888))\n* **shipping:** CHECKOUT-4272 Refactor shipping address selector to return new getters only when there are changes to relevant data ([c18b8de](https://github.com/bigcommerce/checkout-sdk-js/commit/c18b8de))\n* **shipping:** CHECKOUT-4272 Refactor shipping country selector to return new getters only when there are changes to relevant data ([698ee10](https://github.com/bigcommerce/checkout-sdk-js/commit/698ee10))\n* **shipping:** CHECKOUT-4272 Refactor shipping strategy selector to return new getters only when there are changes to relevant data ([974972f](https://github.com/bigcommerce/checkout-sdk-js/commit/974972f))\n* **shipping:** CHECKOUT-4272 Update consignment reducer to transform state only when necessary ([511311b](https://github.com/bigcommerce/checkout-sdk-js/commit/511311b))\n* **shipping:** CHECKOUT-4272 Update shipping country reducer to transform state only when necessary ([4319777](https://github.com/bigcommerce/checkout-sdk-js/commit/4319777))\n* **shipping:** CHECKOUT-4272 Update shipping strategy reducer to transform state only when necessary ([a032432](https://github.com/bigcommerce/checkout-sdk-js/commit/a032432))\n* **shopper:** CHECKOUT-4272 Refactor customer selector to return new getters only when there are changes to relevant data ([f27f763](https://github.com/bigcommerce/checkout-sdk-js/commit/f27f763))\n* **shopper:** CHECKOUT-4272 Refactor customer strategy selector to return new getters only when there are changes to relevant data ([80a24e3](https://github.com/bigcommerce/checkout-sdk-js/commit/80a24e3))\n* **shopper:** CHECKOUT-4272 Update customer reducer to transform state only when necessary ([87e0b56](https://github.com/bigcommerce/checkout-sdk-js/commit/87e0b56))\n* **shopper:** CHECKOUT-4272 Update customer strategy reducer to transform state only when necessary ([8b86d8a](https://github.com/bigcommerce/checkout-sdk-js/commit/8b86d8a))\n\n\n\n<a name=\"1.31.0\"></a>\n# [1.31.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.30.0...v1.31.0) (2019-08-04)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-4273 Fix PayPal Express modal does not load when recaptcha is enabled ([b4f2054](https://github.com/bigcommerce/checkout-sdk-js/commit/b4f2054))\n\n\n### Features\n\n* **payment:** INT-1768 Payment Intent creation refactor ([ba07314](https://github.com/bigcommerce/checkout-sdk-js/commit/ba07314))\n\n\n### Performance Improvements\n\n* **billing:** CHECKOUT-4272 Refactor billing selector to return new getters only when there are changes to relevant data ([fe78e6d](https://github.com/bigcommerce/checkout-sdk-js/commit/fe78e6d))\n* **billing:** CHECKOUT-4272 Update billing reducer to transform state only when necessary ([8d49c5a](https://github.com/bigcommerce/checkout-sdk-js/commit/8d49c5a))\n* **cart:** CHECKOUT-4272 Refactor cart selector to return new getters only when there are changes to relevant data ([5bb0b94](https://github.com/bigcommerce/checkout-sdk-js/commit/5bb0b94))\n* **cart:** CHECKOUT-4272 Update cart reducer to transform state only when necessary ([1e9d658](https://github.com/bigcommerce/checkout-sdk-js/commit/1e9d658))\n* **checkout:** CHECKOUT-4272 Add function for creating internal checkout selectors factory ([722a09a](https://github.com/bigcommerce/checkout-sdk-js/commit/722a09a))\n* **checkout:** CHECKOUT-4272 Refactor coupon selector to return new getters only when there are changes to relevant data ([39b69fc](https://github.com/bigcommerce/checkout-sdk-js/commit/39b69fc))\n* **checkout:** CHECKOUT-4272 Refactor gift certificate selector to return new getters only when there are changes to relevant data ([2d53e4d](https://github.com/bigcommerce/checkout-sdk-js/commit/2d53e4d))\n* **checkout:** CHECKOUT-4272 Update coupon reducer to transform state only when necessary ([daaa59a](https://github.com/bigcommerce/checkout-sdk-js/commit/daaa59a))\n* **checkout:** CHECKOUT-4272 Update gift certificate reducer to transform state only when necessary ([ef9d7c2](https://github.com/bigcommerce/checkout-sdk-js/commit/ef9d7c2))\n* **common:** CHECKOUT-4272 Add shallow equal selector creator for creating selectors that does shallow comparison instead of strict comparison ([7a313e1](https://github.com/bigcommerce/checkout-sdk-js/commit/7a313e1))\n* **common:** CHECKOUT-4272 Add size limit to cache key resolver ([d6dd84b](https://github.com/bigcommerce/checkout-sdk-js/commit/d6dd84b))\n* **common:** CHECKOUT-4272 Add utility functions for transforming data in reducers ([d3a1505](https://github.com/bigcommerce/checkout-sdk-js/commit/d3a1505))\n* **common:** CHECKOUT-4272 Avoid doing another round of transformation for subscription filters ([d4fb957](https://github.com/bigcommerce/checkout-sdk-js/commit/d4fb957))\n* **order:** CHECKOUT-4272 Refactor order selector to return new getters only when there are changes to relevant data ([6e20543](https://github.com/bigcommerce/checkout-sdk-js/commit/6e20543))\n* **order:** CHECKOUT-4272 Update order reducer to transform state only when necessary ([d79afec](https://github.com/bigcommerce/checkout-sdk-js/commit/d79afec))\n\n\n\n<a name=\"1.30.0\"></a>\n# [1.30.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.29.0...v1.30.0) (2019-07-29)\n\n\n### Features\n\n* **payment:** INT-1650 Adding IIN field to vaulted instrument strategy ([19ae743](https://github.com/bigcommerce/checkout-sdk-js/commit/19ae743))\n\n\n\n<a name=\"1.29.0\"></a>\n# [1.29.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.28.0...v1.29.0) (2019-07-25)\n\n\n### Features\n\n* **common:** CHECKOUT-4272 Bind methods to object instances to allow destructing ([8acd3f9](https://github.com/bigcommerce/checkout-sdk-js/commit/8acd3f9))\n* **payment:** INT-1577 Support Stored Credit Card (vaulting) for Stripe V3 ([9bc1657](https://github.com/bigcommerce/checkout-sdk-js/commit/9bc1657))\n\n\n\n<a name=\"1.28.0\"></a>\n# [1.28.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.27.4...v1.28.0) (2019-07-22)\n\n\n### Features\n\n* **checkout:** INT-1586 Support Amazon Pay 3DS flow ([#616](https://github.com/bigcommerce/checkout-sdk-js/pull/616))\n\n\n\n<a name=\"1.27.4\"></a>\n## [1.27.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.27.3...v1.27.4) (2019-07-19)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-4201 Make FormField type easier to consume ([92eaa12](https://github.com/bigcommerce/checkout-sdk-js/commit/92eaa12))\n\n\n\n<a name=\"1.27.3\"></a>\n## [1.27.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.27.2...v1.27.3) (2019-07-17)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-4201 Match SDK types with API payloads ([be3a59e](https://github.com/bigcommerce/checkout-sdk-js/commit/be3a59e))\n\n\n\n<a name=\"1.27.2\"></a>\n## [1.27.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.27.1...v1.27.2) (2019-07-16)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-4254 Make sure changes to the public object don't affect the internal copies ([4447212](https://github.com/bigcommerce/checkout-sdk-js/commit/4447212))\n\n\n\n<a name=\"1.27.1\"></a>\n## [1.27.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.27.0...v1.27.1) (2019-07-10)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-4165 Add names to custom error objects ([c1505d1](https://github.com/bigcommerce/checkout-sdk-js/commit/c1505d1))\n\n\n\n<a name=\"1.27.0\"></a>\n# [1.27.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.26.0...v1.27.0) (2019-07-08)\n\n\n### Features\n\n* **order:** CHECKOUT-2530 Add support for invisible recaptcha ([ee9aca5](https://github.com/bigcommerce/checkout-sdk-js/commit/ee9aca5))\n\n\n\n<a name=\"1.26.0\"></a>\n# [1.26.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.25.2...v1.26.0) (2019-07-04)\n\n\n### Features\n\n* **payment:** INT-1479 Create CyberSource strategy ([54dc4f3](https://github.com/bigcommerce/checkout-sdk-js/commit/54dc4f3))\n\n\n\n<a name=\"1.25.2\"></a>\n## [1.25.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.25.1...v1.25.2) (2019-06-26)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-3954 Use the redirect method instead of display when initialising AfterPay ([665e9f2](https://github.com/bigcommerce/checkout-sdk-js/commit/665e9f2))\n* **payment:** CHECKOUT-4209 Throw `OrderFinalizationNotRequiredError` if payment method is no longer available for shopper ([fb2386d](https://github.com/bigcommerce/checkout-sdk-js/commit/fb2386d))\n\n\n\n<a name=\"1.25.1\"></a>\n## [1.25.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.25.0...v1.25.1) (2019-06-21)\n\n\n### Bug Fixes\n\n* **shipping:** CHECKOUT-4160 Return new object in reducer ([bac88c1](https://github.com/bigcommerce/checkout-sdk-js/commit/bac88c1))\n\n\n\n<a name=\"1.25.0\"></a>\n# [1.25.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.23.0...v1.25.0) (2019-06-20)\n\n\n### Features\n\n* **checkout:** CHECKOUT-3670 adding parentId to LineItem interface ([dfa639e](https://github.com/bigcommerce/checkout-sdk-js/commit/dfa639e))\n* **payment:** INT-1450 Add support for Stripe V3 + 3DS using Payment Intents ([#570](https://github.com/bigcommerce/checkout-sdk-js/issues/570)) ([cc9b242](https://github.com/bigcommerce/checkout-sdk-js/commit/cc9b242))\n\n\n\n<a name=\"1.24.0\"></a>\n# [1.24.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.23.1...v1.24.0) (2019-06-19)\n\n\n### Features\n\n* **payment:** INT-1450 Add support for Stripe V3 + 3DS using Payment Intents ([#570](https://github.com/bigcommerce/checkout-sdk-js/issues/570)) ([cc9b242](https://github.com/bigcommerce/checkout-sdk-js/commit/cc9b242))\n\n\n\n<a name=\"1.23.1\"></a>\n## [1.23.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.23.0...v1.23.1) (2019-06-12)\n\n\n\n<a name=\"1.23.0\"></a>\n# [1.23.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.22.0...v1.23.0) (2019-06-11)\n\n\n### Features\n\n* **checkout:** INT-1503 Add categories to items for Affirm strategy ([3387459](https://github.com/bigcommerce/checkout-sdk-js/commit/3387459))\n\n\n\n<a name=\"1.22.0\"></a>\n# [1.22.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.21.0...v1.22.0) (2019-06-05)\n\n\n### Bug Fixes\n\n* **payment:** INT-1573 [Klarna feedback] Checkout load error ([1c3b5d8](https://github.com/bigcommerce/checkout-sdk-js/commit/1c3b5d8))\n* **payment:** PAYMENTS-4228 implement separate session with currency and default to store currency if shopper currency is non-transactional ([bacafee](https://github.com/bigcommerce/checkout-sdk-js/commit/bacafee))\n* **payment:** PAYMENTS-4228 removing unused cases of currency code and allowing code to be optional ([6cf0785](https://github.com/bigcommerce/checkout-sdk-js/commit/6cf0785))\n\n\n### Features\n\n* **checkout:** INT-1520 Pass useStoreCredit flag when initialize payment ([979c59e](https://github.com/bigcommerce/checkout-sdk-js/commit/979c59e))\n* **order:** CHECKOUT-2530 Add spam protection for order creation ([69efabc](https://github.com/bigcommerce/checkout-sdk-js/commit/69efabc))\n* **payment:** INT-1247 Checkout using Zip, Registration referred ([f9a1da4](https://github.com/bigcommerce/checkout-sdk-js/commit/f9a1da4))\n* **payment:** INT-1540 Zip Feedback, declined Handler ([d140b85](https://github.com/bigcommerce/checkout-sdk-js/commit/d140b85))\n* **payment:** INT-1562 Add billing and shipping data in auth instead of load call ([967cb12](https://github.com/bigcommerce/checkout-sdk-js/commit/967cb12))\n* **payment:** PAYMENTS-4228 include currency code in vaulted instrument functionality ([2438db5](https://github.com/bigcommerce/checkout-sdk-js/commit/2438db5))\n\n\n\n<a name=\"1.21.0\"></a>\n# [1.21.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.20.2...v1.21.0) (2019-05-23)\n\n\n### Bug Fixes\n\n* **checkout-button:** CHECKOUT-4137 Include Babel polyfills to UMD bundles so they work in older browsers ([fa5604a](https://github.com/bigcommerce/checkout-sdk-js/commit/fa5604a))\n* **common:** CHECKOUT-4137 Bump data-store version to fix issue with object freeze ([3f0245d](https://github.com/bigcommerce/checkout-sdk-js/commit/3f0245d))\n* **common:** INT-1500 Fix integer conversion rounding error ([aa3b18b](https://github.com/bigcommerce/checkout-sdk-js/commit/aa3b18b))\n* **payment:** INT-1500 Pass all amounts in cents for Affirm and add platform metadata information ([2c5622b](https://github.com/bigcommerce/checkout-sdk-js/commit/2c5622b))\n\n\n### Features\n\n* **checkout:** INT-1552 Sending klarna the phone number ([804652f](https://github.com/bigcommerce/checkout-sdk-js/commit/804652f))\n* **payment:** INT-1464 Port Elavon ng-checkout only implementation to checkout-sdk-js + ng-checkout ([b7ebba5](https://github.com/bigcommerce/checkout-sdk-js/commit/b7ebba5))\n\n\n\n<a name=\"1.20.2\"></a>\n## [1.20.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.20.1...v1.20.2) (2019-05-08)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-4062 Fix broken dep ([d8937d6](https://github.com/bigcommerce/checkout-sdk-js/commit/d8937d6))\n\n\n\n<a name=\"1.20.1\"></a>\n## [1.20.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.20.0...v1.20.1) (2019-05-07)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-4062 Expose missing payment errors ([e8b4987](https://github.com/bigcommerce/checkout-sdk-js/commit/e8b4987))\n\n\n\n<a name=\"1.20.0\"></a>\n# [1.20.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.19.0...v1.20.0) (2019-04-27)\n\n\n### Features\n\n* **payment:** INT-1398 Add shipping and billing address before Klarna authorization ([577601e](https://github.com/bigcommerce/checkout-sdk-js/commit/577601e))\n\n\n\n<a name=\"1.19.0\"></a>\n# [1.19.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.12...v1.19.0) (2019-04-11)\n\n\n### Features\n\n* **checkout:** INT-1245 Checkout Using Zip ([c13ba54](https://github.com/bigcommerce/checkout-sdk-js/commit/c13ba54))\n* **payment:** INT-1293 integrate affirm strategy ([858ad16](https://github.com/bigcommerce/checkout-sdk-js/commit/858ad16))\n\n\n\n<a name=\"1.18.12\"></a>\n## [1.18.12](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.11...v1.18.12) (2019-04-04)\n\n\n### Bug Fixes\n\n* **payment:** INT-1412 Fix masterpass submitPayment payload to allow analytics tracking ([04ec083](https://github.com/bigcommerce/checkout-sdk-js/commit/04ec083))\n\n\n\n<a name=\"1.18.11\"></a>\n## [1.18.11](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.10...v1.18.11) (2019-04-01)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-1289 Fix config and checkout types ([135a239](https://github.com/bigcommerce/checkout-sdk-js/commit/135a239))\n* **payment:** PAYMENTS-1253 Pass order amount to Braintree client when going through 3DS flow ([07909fe](https://github.com/bigcommerce/checkout-sdk-js/commit/07909fe))\n* **payment:** PAYMENTS-1253 Pass store credit amount to PayPal ([112cda9](https://github.com/bigcommerce/checkout-sdk-js/commit/112cda9))\n* **payment:** PAYMENTS-1253 Show overlay when Braintree PayPal modal is open ([9756fdb](https://github.com/bigcommerce/checkout-sdk-js/commit/9756fdb))\n* **payment:** PAYMENTS-1253 Throw cancellation error when shopper closes PayPal popup ([6859fd6](https://github.com/bigcommerce/checkout-sdk-js/commit/6859fd6))\n\n\n\n<a name=\"1.18.10\"></a>\n## [1.18.10](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.9...v1.18.10) (2019-03-28)\n\n\n### Bug Fixes\n\n* **cart:** CHECKOUT-4012 Use `productId` and `variantId` to sort items in cart ([4e2ab5b](https://github.com/bigcommerce/checkout-sdk-js/commit/4e2ab5b))\n\n\n\n<a name=\"1.18.9\"></a>\n## [1.18.9](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.8...v1.18.9) (2019-03-25)\n\n\n### Bug Fixes\n\n* **cart:** CHECKOUT-3844 Ignore order of line items when comparing cart content ([51e4c6e](https://github.com/bigcommerce/checkout-sdk-js/commit/51e4c6e))\n* **payment:** CHECKOUT-3844 Don't throw error if no payment data is passed for offsite payment methods ([b0615cb](https://github.com/bigcommerce/checkout-sdk-js/commit/b0615cb))\n\n\n\n<a name=\"1.18.8\"></a>\n## [1.18.8](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.7...v1.18.8) (2019-03-18)\n\n\n### Bug Fixes\n\n* **payment:** INT-1360 Bump BigPay client. ([ea7849d](https://github.com/bigcommerce/checkout-sdk-js/commit/ea7849d))\n\n\n\n<a name=\"1.18.7\"></a>\n## [1.18.7](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.6...v1.18.7) (2019-03-11)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-3967 Round properly when using CurrencyService ([14439bc](https://github.com/bigcommerce/checkout-sdk-js/commit/14439bc))\n\n\n\n<a name=\"1.18.6\"></a>\n## [1.18.6](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.5...v1.18.6) (2019-03-07)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-3852 Expose proper error type for Coupon/Gift Certificates ([2dd5713](https://github.com/bigcommerce/checkout-sdk-js/commit/2dd5713))\n\n\n\n<a name=\"1.18.5\"></a>\n## [1.18.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.4...v1.18.5) (2019-03-06)\n\n\n### Bug Fixes\n\n* **embedded-checkout:** CHECKOUT-3941 Post `frame_error` without target origin so that parent window can receive it in case the error is due to issue with current cart ([3354334](https://github.com/bigcommerce/checkout-sdk-js/commit/3354334))\n* **embedded-checkout:** CHECKOUT-3941 Redirect user to allow third party cookie to be set ([b7137f6](https://github.com/bigcommerce/checkout-sdk-js/commit/b7137f6))\n\n\n\n<a name=\"1.18.4\"></a>\n## [1.18.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.3...v1.18.4) (2019-02-26)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-4034 catch error when nonce return 400, squarev2 ([8211bb7](https://github.com/bigcommerce/checkout-sdk-js/commit/8211bb7))\n\n\n\n<a name=\"1.18.3\"></a>\n## [1.18.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.2...v1.18.3) (2019-02-21)\n\n\n### Bug Fixes\n\n* **checkout-button:** PAYMENTS-3071 Use the specified endpoint for paypal payment creation ([cffc8be](https://github.com/bigcommerce/checkout-sdk-js/commit/cffc8be))\n\n\n\n<a name=\"1.18.2\"></a>\n## [1.18.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.1...v1.18.2) (2019-02-15)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-3843 `ccNumber` and `ccCvv` should be string instead of number ([625aff9](https://github.com/bigcommerce/checkout-sdk-js/commit/625aff9))\n\n\n\n<a name=\"1.18.1\"></a>\n## [1.18.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.18.0...v1.18.1) (2019-02-15)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-3843 Add missing `isTrustedShippingAddressEnabled` field ([b102359](https://github.com/bigcommerce/checkout-sdk-js/commit/b102359))\n* **payment:** CHECKOUT-3843 Add missing `ccCustomerCode` field ([72d24c0](https://github.com/bigcommerce/checkout-sdk-js/commit/72d24c0))\n\n\n\n<a name=\"1.18.0\"></a>\n# [1.18.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.17.3...v1.18.0) (2019-02-05)\n\n\n### Bug Fixes\n\n* **order:** CHECKOUT-3850 make customItems optional ([bc79317](https://github.com/bigcommerce/checkout-sdk-js/commit/bc79317))\n* **payment:** CHECKOUT-3843 Add missing properties to `PaymentMethodConfig` ([f0e96d7](https://github.com/bigcommerce/checkout-sdk-js/commit/f0e96d7))\n* **payment:** CHECKOUT-3843 Fix type definition for `VaultedInstrument` ([7f81d37](https://github.com/bigcommerce/checkout-sdk-js/commit/7f81d37))\n\n\n### Features\n\n* **common:** CHECKOUT-3914 Add isAnalyticsEnabled to checkout settings ([7b597c1](https://github.com/bigcommerce/checkout-sdk-js/commit/7b597c1))\n\n\n\n<a name=\"1.17.3\"></a>\n## [1.17.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.17.2...v1.17.3) (2019-01-30)\n\n\n### Bug Fixes\n\n* **shipping:** CHECKOUT-3890 Rehydrate shipping options after applying coupon ([6d7609a](https://github.com/bigcommerce/checkout-sdk-js/commit/6d7609a))\n\n\n\n<a name=\"1.17.2\"></a>\n## [1.17.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.17.1...v1.17.2) (2019-01-22)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-3842 Add missing field in `PaymentMethodConfig` interface ([e08a813](https://github.com/bigcommerce/checkout-sdk-js/commit/e08a813))\n* **payment:** CHECKOUT-3842 Remove `ccType` from order submission payload ([a3832ef](https://github.com/bigcommerce/checkout-sdk-js/commit/a3832ef))\n* **payment:** INT-1079 Transaction rbits are no longer being sent to WePay in the /checkout/create call ([836f4d6](https://github.com/bigcommerce/checkout-sdk-js/commit/836f4d6))\n* **payment:** INT-1079 Update unit testing and mocks ([f8b74ee](https://github.com/bigcommerce/checkout-sdk-js/commit/f8b74ee))\n\n\n\n<a name=\"1.17.1\"></a>\n## [1.17.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.17.0...v1.17.1) (2019-01-14)\n\n\n### Bug Fixes\n\n* **billing:** CHECKOUT-3790 Return correct type for billing addresses ([e4818db](https://github.com/bigcommerce/checkout-sdk-js/commit/e4818db))\n\n\n\n<a name=\"1.17.0\"></a>\n# [1.17.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.16.1...v1.17.0) (2019-01-10)\n\n\n### Features\n\n* **checkout:** CHECKOUT-3798 Add loginLink to the configuration endpoint type definition ([a4c9e33](https://github.com/bigcommerce/checkout-sdk-js/commit/a4c9e33))\n* **common:** CHECKOUT-3790 Add ability to clear error state ([6429e56](https://github.com/bigcommerce/checkout-sdk-js/commit/6429e56))\n* **common:** CHECKOUT-3798 Throw CheckoutNotAvailable if the response is in the 400 range ([c2d296e](https://github.com/bigcommerce/checkout-sdk-js/commit/c2d296e))\n\n\n\n<a name=\"1.16.1\"></a>\n## [1.16.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.16.0...v1.16.1) (2018-12-17)\n\n\n### Bug Fixes\n\n* **checkout-button:** CHECKOUT-3804 Set unique container ID if not provided by client ([4ce80d8](https://github.com/bigcommerce/checkout-sdk-js/commit/4ce80d8))\n* **common:** CHECKOUT-3790 Add missing properties to `StoreLinks` object ([dfacf03](https://github.com/bigcommerce/checkout-sdk-js/commit/dfacf03))\n\n\n\n<a name=\"1.16.0\"></a>\n# [1.16.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.15.1...v1.16.0) (2018-12-11)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-3787 Generate TS definition files for submodules ([b6ff269](https://github.com/bigcommerce/checkout-sdk-js/commit/b6ff269))\n* **payment:** CHECKOUT-3797 Surface transaction_declined error message ([0530ada](https://github.com/bigcommerce/checkout-sdk-js/commit/0530ada))\n\n\n### Features\n\n* **payment:** INT-1051 Masterpass callback url post launch ([5f42772](https://github.com/bigcommerce/checkout-sdk-js/commit/5f42772))\n* **payment:** INT-1138 Fix shipping address bug in google pay ([a0924c4](https://github.com/bigcommerce/checkout-sdk-js/commit/a0924c4))\n\n\n\n<a name=\"1.15.1\"></a>\n## [1.15.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.15.0...v1.15.1) (2018-12-05)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-3135 Upgrade Rx to version 6 to bring in various performance improvements and bug fixes ([56132a9](https://github.com/bigcommerce/checkout-sdk-js/commit/56132a9))\n* **common:** CHECKOUT-3768 Surface the error details for RequestErrors ([58361e1](https://github.com/bigcommerce/checkout-sdk-js/commit/58361e1))\n\n\n\n<a name=\"1.15.0\"></a>\n# [1.15.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.14.0...v1.15.0) (2018-11-29)\n\n\n### Bug Fixes\n\n* **checkout-button:** CHECKOUT-3747 Post form data to host URL ([c7f12e6](https://github.com/bigcommerce/checkout-sdk-js/commit/c7f12e6))\n* **checkout-button:** PAYMENTS-3071 Use the specified host for the paypal payment creation endpoint ([9d2590d](https://github.com/bigcommerce/checkout-sdk-js/commit/9d2590d))\n* **common:** CHECKOUT-3462 Bump `[@bigcommerce](https://github.com/bigcommerce)/data-store` version ([e3ac1c2](https://github.com/bigcommerce/checkout-sdk-js/commit/e3ac1c2))\n* **common:** CHECKOUT-3777 Upgrade dependencies that may have potential security vulnerabilities ([5faf8e5](https://github.com/bigcommerce/checkout-sdk-js/commit/5faf8e5))\n* **embedded-checkout:** CHECKOUT-3481 Allow cross-origin iframe to invoke payment request API ([ed18528](https://github.com/bigcommerce/checkout-sdk-js/commit/ed18528))\n* **payment:** INT-1080 Round totalPrice to 2 decimals ([44e5cbb](https://github.com/bigcommerce/checkout-sdk-js/commit/44e5cbb))\n* **payment:** INT-1119 Modify approach in Checkout Button Strategies to consume unique ids ([1a5e955](https://github.com/bigcommerce/checkout-sdk-js/commit/1a5e955))\n\n\n### Features\n\n* **checkout:** INT-1073 Populate shipping info from Masterpass on Stripe ([9a3c561](https://github.com/bigcommerce/checkout-sdk-js/commit/9a3c561))\n* **common:** CHECKOUT-2934 Return unified RequestError object ([cae7d23](https://github.com/bigcommerce/checkout-sdk-js/commit/cae7d23))\n* **common:** CHECKOUT-3462 Add `cacheAction` decorator for caching asynchronous actions ([f2927fc](https://github.com/bigcommerce/checkout-sdk-js/commit/f2927fc))\n* **embedded-checkout:** CHECKOUT-3677 Notify parent frame when customer signs out ([278be01](https://github.com/bigcommerce/checkout-sdk-js/commit/278be01))\n* **embedded-checkout:** CHECKOUT-3703 Notify client if unable to sign in shopper using token ([f87f2d6](https://github.com/bigcommerce/checkout-sdk-js/commit/f87f2d6))\n* **embedded-checkout:** CHECKOUT-3706 Switch to different height calculation method if `contentId` is provided. ([6fbc88e](https://github.com/bigcommerce/checkout-sdk-js/commit/6fbc88e))\n* **payment:** CHECKOUT-3481 Opt into redirect flow for PayPal Express ([3406112](https://github.com/bigcommerce/checkout-sdk-js/commit/3406112))\n* **payment:** INT-1092 Update map variables of Braintree in GooglePay ([a38edee](https://github.com/bigcommerce/checkout-sdk-js/commit/a38edee))\n* **payment:** PAYMENTS-3663 enable default instrument property ([9a14c2c](https://github.com/bigcommerce/checkout-sdk-js/commit/9a14c2c))\n\n\n### Performance Improvements\n\n* **checkout-button:** CHECKOUT-3462 Allow checkout buttons with different container ID to initialize in parallel ([4be6a94](https://github.com/bigcommerce/checkout-sdk-js/commit/4be6a94))\n* **common:** CHECKOUT-3462 Apply `cacheAction` decorator to certain actions ([3920168](https://github.com/bigcommerce/checkout-sdk-js/commit/3920168))\n\n\n\n<a name=\"1.14.0\"></a>\n# [1.14.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.13.0...v1.14.0) (2018-11-04)\n\n\n### Features\n\n* **checkout-button:** INT-856 Add checkout button to support GooglePay provided by Stripe ([32f241c](https://github.com/bigcommerce/checkout-sdk-js/commit/32f241c))\n\n\n\n<a name=\"1.13.0\"></a>\n# [1.13.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.12.0...v1.13.0) (2018-11-02)\n\n\n### Features\n\n* **payment:** PAYMENTS-3071 Support the Paypal checkout button strategy for smart buttons ([6f4d31d](https://github.com/bigcommerce/checkout-sdk-js/commit/6f4d31d))\n\n\n\n<a name=\"1.12.0\"></a>\n# [1.12.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.11.0...v1.12.0) (2018-11-01)\n\n\n### Features\n\n* **checkout:** CP-4020 Added Product Category to cart & checkout process. ([6ed6799](https://github.com/bigcommerce/checkout-sdk-js/commit/6ed6799))\n\n\n\n<a name=\"1.11.0\"></a>\n# [1.11.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.10.1...v1.11.0) (2018-10-31)\n\n\n### Bug Fixes\n\n* **embedded-checkout:** CHECKOUT-3695 Ignore trailing slash and other irrelevant information when comparing event origin ([#448](https://github.com/bigcommerce/checkout-sdk-js/issues/448)) ([c9b80b3](https://github.com/bigcommerce/checkout-sdk-js/commit/c9b80b3))\n\n\n### Features\n\n* **checkout-button:** INT-836 Add checkout button to support GooglePay provided by Braintree ([95e3732](https://github.com/bigcommerce/checkout-sdk-js/commit/95e3732))\n* **checkout-button:** PAYMENTS-3073 Support credit buttons by implementing funding sources ([5dff675](https://github.com/bigcommerce/checkout-sdk-js/commit/5dff675))\n\n\n\n<a name=\"1.10.1\"></a>\n## [1.10.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.10.0...v1.10.1) (2018-10-25)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-3688 Prevent Lodash from leaking to global scope ([#444](https://github.com/bigcommerce/checkout-sdk-js/issues/444)) ([ac5238b](https://github.com/bigcommerce/checkout-sdk-js/commit/ac5238b))\n\n\n\n<a name=\"1.10.0\"></a>\n# [1.10.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.9.0...v1.10.0) (2018-10-25)\n\n\n### Features\n\n* **checkout:** INT-951 Implement Masterpass button in cart and quick cart ([724eff5](https://github.com/bigcommerce/checkout-sdk-js/commit/724eff5))\n\n### Bug Fixes\n\n* **checkout-button:** CHECKOUT-3584 Allow rendering checkout buttons more than once (#443) ([8c479c8](https://github.com/bigcommerce/checkout-sdk-js/commit/8c479c87cb06e9c8919bcc8b0b930d3a2c00fa2d)).\n\n :warning: **Important:** Includes breaking changes in checkout buttons options (alpha stage).\n\n\n<a name=\"1.9.0\"></a>\n# [1.9.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.8.0...v1.9.0) (2018-10-23)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-1739 Fix mocks linting issues ([990a2c6](https://github.com/bigcommerce/checkout-sdk-js/commit/990a2c6))\n\n\n### Features\n\n* **cart:** CHECKOUT-1739 Add custom items types to cart type ([7821329](https://github.com/bigcommerce/checkout-sdk-js/commit/7821329))\n* **embedded-checkout:** CHECKOUT-3475 Add ability to embed checkout form as iframe ([#441](https://github.com/bigcommerce/checkout-sdk-js/issues/441)) ([0215fe9](https://github.com/bigcommerce/checkout-sdk-js/commit/0215fe9))\n\n\n\n<a name=\"1.8.0\"></a>\n# [1.8.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.7.0...v1.8.0) (2018-10-19)\n\n\n### Features\n\n* **cart:** CP-4013 Add `brand` property to `LineItem` interface ([#409](https://github.com/bigcommerce/checkout-sdk-js/issues/409)) ([fd43113](https://github.com/bigcommerce/checkout-sdk-js/commit/fd43113))\n* **payment:** INT-774 Add stripe strategy ([b7af881](https://github.com/bigcommerce/checkout-sdk-js/commit/b7af881))\n* **payment:** INT-835 Add Google Pay + Braintree support ([201f0ae](https://github.com/bigcommerce/checkout-sdk-js/commit/201f0ae))\n* **shipping:** CHECKOUT-3589 Allow unassigning items from consignments ([445d5af](https://github.com/bigcommerce/checkout-sdk-js/commit/445d5af))\n\n\n\n<a name=\"1.7.0\"></a>\n# [1.7.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.6.1...v1.7.0) (2018-09-28)\n\n\n### Features\n\n* **checkout:** INT-775 Implement Masterpass button in customer section ([898381c](https://github.com/bigcommerce/checkout-sdk-js/commit/898381c))\n* **order:** CHECKOUT-3563 Add External Source param when creating order ([41d76a0](https://github.com/bigcommerce/checkout-sdk-js/commit/41d76a0))\n* **payment:** INT-616 Add Chase Pay wallet support ([e40a457](https://github.com/bigcommerce/checkout-sdk-js/commit/e40a457))\n* **payment:** INT-685 Correctly set up CCAvenue MARS return URL ([7a563c3](https://github.com/bigcommerce/checkout-sdk-js/commit/7a563c3))\n\n\n\n<a name=\"1.6.1\"></a>\n## [1.6.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.6.0...v1.6.1) (2018-09-26)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-3529 Fix createCurrencyService type ([7f4b828](https://github.com/bigcommerce/checkout-sdk-js/commit/7f4b828))\n\n\n\n<a name=\"1.6.0\"></a>\n# [1.6.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.5.0...v1.6.0) (2018-09-25)\n\n\n### Bug Fixes\n\n* **payment:** INT-751 Show Masterpass button in payments section into square form ([35f0aae](https://github.com/bigcommerce/checkout-sdk-js/commit/35f0aae))\n\n\n### Features\n\n* **common:** CHECKOUT-3529 Add currency utilities ([67ee82f](https://github.com/bigcommerce/checkout-sdk-js/commit/67ee82f))\n\n\n\n<a name=\"1.5.0\"></a>\n# [1.5.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.4.0...v1.5.0) (2018-09-24)\n\n\n### Bug Fixes\n\n* **cart:** CP-3982 Add missing `productId` property to `LineItem` interface ([#405](https://github.com/bigcommerce/checkout-sdk-js/issues/405)) ([4fbca67](https://github.com/bigcommerce/checkout-sdk-js/commit/4fbca67))\n* **payment:** PAYMENTS-3288 Leave deviceData as it is in dataCollector ([26863b4](https://github.com/bigcommerce/checkout-sdk-js/commit/26863b4))\n\n\n### Features\n\n* **checkout-button:** PAYMENTS-3071 Support more features of paypal checkout buttons ([67a7cba](https://github.com/bigcommerce/checkout-sdk-js/commit/67a7cba))\n* **common:** CHECKOUT-3239 Add isCouponCodeCollapsed checkout setting ([e51c01e](https://github.com/bigcommerce/checkout-sdk-js/commit/e51c01e))\n\n\n\n<a name=\"1.4.0\"></a>\n# [1.4.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.3.0...v1.4.0) (2018-09-10)\n\n\n### Bug Fixes\n\n* **billing:** CHECKOUT-3492 Update CheckoutService#updateBillingAddress signature ([3a190cb](https://github.com/bigcommerce/checkout-sdk-js/commit/3a190cb))\n* **checkout:** CHECKOUT-3011 Make sure host config is passed along for `CheckoutService` ([c5612c5](https://github.com/bigcommerce/checkout-sdk-js/commit/c5612c5))\n* **checkout-button:** CHECKOUT-3011 Make sure host config is passed along for `CheckoutButtonInitializer` ([b95784b](https://github.com/bigcommerce/checkout-sdk-js/commit/b95784b))\n* **order:** CHECKOUT-3437 Include options in line items ([7b04cd8](https://github.com/bigcommerce/checkout-sdk-js/commit/7b04cd8))\n* **payment:** CHECKOUT-3516 Trigger `onReady` callback after order reference is passed to BC ([8d441a7](https://github.com/bigcommerce/checkout-sdk-js/commit/8d441a7))\n\n\n### Features\n\n* **billing:** CHECKOUT-3492 Add error/status selectors for CheckoutService#continueAsGuest ([b537d14](https://github.com/bigcommerce/checkout-sdk-js/commit/b537d14))\n* **billing:** CHECKOUT-3492 Do not overwrite billing info when continuing as guest ([d42b2de](https://github.com/bigcommerce/checkout-sdk-js/commit/d42b2de))\n* **billing:** CHECKOUT-3492 Track error/status independently for CheckoutService#continueAsGuest ([d271781](https://github.com/bigcommerce/checkout-sdk-js/commit/d271781))\n\n\n\n<a name=\"1.3.0\"></a>\n# [1.3.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.2.0...v1.3.0) (2018-09-04)\n\n\n### Features\n\n* **checkout-button:** CHECKOUT-3011 Add `CheckoutButtonInitializer` for initializing third party checkout buttons ([#374](https://github.com/bigcommerce/checkout-sdk-js/issues/374)) ([4a27a6c](https://github.com/bigcommerce/checkout-sdk-js/commit/4a27a6c))\n* **shipping:** CHECKOUT-3461 Add ConsignmentSelector#getUnassignedItems method ([ba2dae8](https://github.com/bigcommerce/checkout-sdk-js/commit/ba2dae8))\n\n\n\n<a name=\"1.2.0\"></a>\n# [1.2.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.1.1...v1.2.0) (2018-09-03)\n\n\n### Features\n\n* **cart:** CHECKOUT-3493 Add `addedByPromotion` property to line items ([88bf435](https://github.com/bigcommerce/checkout-sdk-js/commit/88bf435))\n\n\n\n<a name=\"1.1.1\"></a>\n## [1.1.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.1.0...v1.1.1) (2018-08-28)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-3449 Return correct status flags for actions that trigger other sub-actions ([23bfd24](https://github.com/bigcommerce/checkout-sdk-js/commit/23bfd24))\n* **common:** CHECKOUT-3462 Update dependencies to remove Node requirement ([ed60802](https://github.com/bigcommerce/checkout-sdk-js/commit/ed60802))\n* **order:** CHECKOUT-3449 Use correct order ID when reloading current order after order creation ([6d39e16](https://github.com/bigcommerce/checkout-sdk-js/commit/6d39e16))\n* **payment:** CHECKOUT-3398 Check payment method payload ([ea621bf](https://github.com/bigcommerce/checkout-sdk-js/commit/ea621bf))\n\n\n\n<a name=\"1.1.0\"></a>\n# [1.1.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v1.0.0...v1.1.0) (2018-08-20)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-3401 Load order payments using checkout.orderId ([1bf885d](https://github.com/bigcommerce/checkout-sdk-js/commit/1bf885d))\n* **payment:** CHECKOUT-3401 Stop loading current order before executing payment strategy ([093016d](https://github.com/bigcommerce/checkout-sdk-js/commit/093016d))\n\n\n### Features\n\n* **shipping:** CHECKOUT-3393 Add address comparator and rename previous to isInternalAddressEqual ([26b396c](https://github.com/bigcommerce/checkout-sdk-js/commit/26b396c))\n* **shipping:** CHECKOUT-3393 Add consignment deletion status/error check in store selector ([9ce4774](https://github.com/bigcommerce/checkout-sdk-js/commit/9ce4774))\n* **shipping:** CHECKOUT-3393 Add convenience methods to assign items to addresses/consignments ([f4e0469](https://github.com/bigcommerce/checkout-sdk-js/commit/f4e0469))\n* **shipping:** CHECKOUT-3393 Add getConsignmentById in ConsignmentSelector ([16fbdeb](https://github.com/bigcommerce/checkout-sdk-js/commit/16fbdeb))\n* **shipping:** CHECKOUT-3393 Provide CheckoutService#deleteConsignment method ([b3d401e](https://github.com/bigcommerce/checkout-sdk-js/commit/b3d401e))\n* **shipping:** CHECKOUT-3393 Provide error/status selectors for CheckoutService#deleteConsignment ([66615b0](https://github.com/bigcommerce/checkout-sdk-js/commit/66615b0))\n\n\n\n<a name=\"1.0.0\"></a>\n# [1.0.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.28.8...v1.0.0) (2018-08-08)\n\n\n\n<a name=\"0.28.8\"></a>\n## [0.28.8](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.28.7...v0.28.8) (2018-08-07)\n\n\n### Bug Fixes\n\n* **shipping:** CHECKOUT-3399 Use geo-ip only for the public shippingAddress selector ([178f145](https://github.com/bigcommerce/checkout-sdk-js/commit/178f145))\n\n\n\n<a name=\"0.28.7\"></a>\n## [0.28.7](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.28.6...v0.28.7) (2018-08-07)\n\n\n\n<a name=\"0.28.6\"></a>\n## [0.28.6](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.28.5...v0.28.6) (2018-07-31)\n\n\n### Bug Fixes\n\n* **order:** CHECKOUT-3390 Fix customer message getting overridden when submitting order ([60f10b5](https://github.com/bigcommerce/checkout-sdk-js/commit/60f10b5))\n* **payment:** CHECKOUT-3380 Check payload is an object when loading payment methods ([f4ad1cd](https://github.com/bigcommerce/checkout-sdk-js/commit/f4ad1cd))\n\n\n\n<a name=\"0.28.5\"></a>\n## [0.28.5](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.28.4...v0.28.5) (2018-07-30)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-3251 Load Klarna widget only once ([85cbcce](https://github.com/bigcommerce/checkout-sdk-js/commit/85cbcce))\n\n\n\n<a name=\"0.28.4\"></a>\n## [0.28.4](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.28.3...v0.28.4) (2018-07-26)\n\n\n### Bug Fixes\n\n* **common:** PAYMENTS-3251 Check that argument is a valid string in toSingleLine utility ([c87484e](https://github.com/bigcommerce/checkout-sdk-js/commit/c87484e))\n* **payment:** PAYMENTS-3251 Throw proper errors when Klarna authorization fails ([bf16895](https://github.com/bigcommerce/checkout-sdk-js/commit/bf16895))\n\n\n### Features\n\n* **checkout:** CHECKOUT-3371 Provide status/error checks for CheckoutService#updateCheckout ([fe2e07f](https://github.com/bigcommerce/checkout-sdk-js/commit/fe2e07f))\n\n\n### Performance Improvements\n\n* **common:** CHECKOUT-3009 Improve file bundle size ([9e0f458](https://github.com/bigcommerce/checkout-sdk-js/commit/9e0f458))\n\n\n\n<a name=\"0.28.3\"></a>\n## [0.28.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.28.2...v0.28.3) (2018-07-24)\n\n\n### Bug Fixes\n\n* **shipping:** CHECKOUT-3243 Fix checkout data not getting retained after updating shipping option ([850b108](https://github.com/bigcommerce/checkout-sdk-js/commit/850b108))\n\n\n\n<a name=\"0.28.2\"></a>\n## [0.28.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.28.1...v0.28.2) (2018-07-24)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-3370 Fix Afterpay not able to finalize order after redirection ([6e0f03c](https://github.com/bigcommerce/checkout-sdk-js/commit/6e0f03c))\n\n\n\n<a name=\"0.28.1\"></a>\n## [0.28.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.28.0...v0.28.1) (2018-07-23)\n\n\n### Features\n\n* **shipping:** CHECKOUT-3243 Add createConsignments to ConsignmentActionCreator ([f9c1258](https://github.com/bigcommerce/checkout-sdk-js/commit/f9c1258))\n* **shipping:** CHECKOUT-3243 Add multi-shipping methods in CheckoutService ([62c0dc3](https://github.com/bigcommerce/checkout-sdk-js/commit/62c0dc3))\n* **shipping:** CHECKOUT-3243 Add updateConsignment to ConsignmentActionCreator ([a9da7c0](https://github.com/bigcommerce/checkout-sdk-js/commit/a9da7c0))\n* **shipping:** CHECKOUT-3243 Support tracking loading and error states per consignment ([12c55da](https://github.com/bigcommerce/checkout-sdk-js/commit/12c55da))\n\n\n\n<a name=\"0.28.0\"></a>\n# [0.28.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.27.2...v0.28.0) (2018-07-19)\n\n\n### Bug Fixes\n\n* **billing:** CHECKOUT-3359 Keep the email when creating a billingAddress if it was set ([672586f](https://github.com/bigcommerce/checkout-sdk-js/commit/672586f))\n* **cart:** CHECKOUT-3356 Only compare important cart attributes ([07fe7be](https://github.com/bigcommerce/checkout-sdk-js/commit/07fe7be))\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-3331 Remove `checkout` property from `CheckoutSelectors` ([00c188f](https://github.com/bigcommerce/checkout-sdk-js/commit/00c188f))\n* **payment:** CHECKOUT-3331 Mark `CheckoutService#loadPaymentMethod` as internal ([9a6ecfa](https://github.com/bigcommerce/checkout-sdk-js/commit/9a6ecfa))\n* **shopper:** CHECKOUT-3331 Remove `signInGuest` from `CheckoutService` ([64f1969](https://github.com/bigcommerce/checkout-sdk-js/commit/64f1969))\n\n\n### Features\n\n* **payment:** INT-690 Remove all VCO references from Chase Pay code ([9cf3cda](https://github.com/bigcommerce/checkout-sdk-js/commit/9cf3cda))\n\n\n### BREAKING CHANGES\n\n* **payment:** `loadPaymentMethod` has been deprecated for some time.\nHowever, due to legacy reasons, this method is still in use by Optimized\nCheckout. To further discourage people from using it, we now mark it as\n`internal` and remove it from the documentation. We will completely\nremove it once it is no longer used by Optimized Checkout.\n* **shopper:** `signInGuest` has been from `CheckoutService`. Call\n`continueAsGuest` instead.\n* **checkout:** `checkout` property has been removed from\n`CheckoutSelector`. Use `data` property instead.\n\n\n\n<a name=\"0.27.2\"></a>\n## [0.27.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.27.1...v0.27.2) (2018-07-11)\n\n\n### Features\n\n* **checkout:** CHECKOUT-3332 Make id optional for CheckoutService#loadCheckout ([22a1b98](https://github.com/bigcommerce/checkout-sdk-js/commit/22a1b98))\n\n\n\n<a name=\"0.27.1\"></a>\n## [0.27.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.27.0...v0.27.1) (2018-07-10)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-3334 Prevent order data from overwriting checkout data when retrieving payment information ([0bf5be2](https://github.com/bigcommerce/checkout-sdk-js/commit/0bf5be2))\n* **payment:** CHECKOUT-3320 Clean order store after a new order is created ([ea2e632](https://github.com/bigcommerce/checkout-sdk-js/commit/ea2e632))\n* **payment:** CHECKOUT-3329 Do not submit the order until PayPal tokenization finishes ([ebfc837](https://github.com/bigcommerce/checkout-sdk-js/commit/ebfc837))\n* **payment:** PAYMENTS-3064 Braintree's DataCollector actually returns device_session_id and fraud_merchant_id as JSON but we just want the device_session_id ([b8f2c30](https://github.com/bigcommerce/checkout-sdk-js/commit/b8f2c30))\n* **shopper:** CHECKOUT-3329 BillingAddressReducer shouldn't overwrite customer's email address ([1ddb485](https://github.com/bigcommerce/checkout-sdk-js/commit/1ddb485))\n\n\n\n<a name=\"0.27.0\"></a>\n# [0.27.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.26.1...v0.27.0) (2018-07-04)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-2960 Fix TS compilation issue ([ff3fc8a](https://github.com/bigcommerce/checkout-sdk-js/commit/ff3fc8a))\n* **order:** CHECKOUT-3314 Map fields for digital items ([a289dc8](https://github.com/bigcommerce/checkout-sdk-js/commit/a289dc8))\n* **payment:** CHECKOUT-3311 Send token and callbackUrl to bigpay ([a5f2df1](https://github.com/bigcommerce/checkout-sdk-js/commit/a5f2df1))\n* **payment:** CHECKOUT-3319 Append returnUrl for Adyen ([3158c9b](https://github.com/bigcommerce/checkout-sdk-js/commit/3158c9b))\n* **shipping:** CHECKOUT-3276 Create specific action for loading shipping options ([33cd64a](https://github.com/bigcommerce/checkout-sdk-js/commit/33cd64a))\n* **shopper:** CHECKOUT-3319 Use customer information from billing address ([11f5039](https://github.com/bigcommerce/checkout-sdk-js/commit/11f5039))\n\n\n### Code Refactoring\n\n* **cart:** CHECKOUT-3053 Return `Cart` object in different schema ([1b65671](https://github.com/bigcommerce/checkout-sdk-js/commit/1b65671))\n* **checkout:** CHECKOUT-3054 Return `Coupon` and `GiftCertificate` objects in different schema ([69a8431](https://github.com/bigcommerce/checkout-sdk-js/commit/69a8431))\n* **checkout:** CHECKOUT-3282 Remove `loadConfig` method ([2426e19](https://github.com/bigcommerce/checkout-sdk-js/commit/2426e19))\n* **order:** CHECKOUT-3056 Return `Order` object in different schema ([a316188](https://github.com/bigcommerce/checkout-sdk-js/commit/a316188))\n* **payment:** CHECKOUT-3205 Transform snakecase payloads to camel ([d7a3876](https://github.com/bigcommerce/checkout-sdk-js/commit/d7a3876))\n\n\n### Features\n\n* **checkout:** CHECKOUT-3312 Provide updateCheckout method ([c9dd542](https://github.com/bigcommerce/checkout-sdk-js/commit/c9dd542))\n* **common:** CHECKOUT-327 Export CacheKeyResolver ([18519d6](https://github.com/bigcommerce/checkout-sdk-js/commit/18519d6))\n* **common:** CHECKOUT-3274 Remove quote mapper ([82de622](https://github.com/bigcommerce/checkout-sdk-js/commit/82de622))\n* **common:** CHECKOUT-3275 Remove Address mapper ([93bfed6](https://github.com/bigcommerce/checkout-sdk-js/commit/93bfed6))\n* **shipping:** CHECKOUT-3276 Expose consignments via checkoutStoreSelector ([6950ce9](https://github.com/bigcommerce/checkout-sdk-js/commit/6950ce9))\n* **shopper:** CHECKOUT-3277 Remove cart dependency from customer mapper ([a5797d4](https://github.com/bigcommerce/checkout-sdk-js/commit/a5797d4))\n\n\n### BREAKING CHANGES\n\n* **payment:** Instrument interfaces now respond with camel case\nobject properties\n* **checkout:** `loadConfig` method has been removed. Configuration\ndata is now automatically loaded when you call `loadCheckout` or\n`loadOrder`.\n* **checkout:** `getCoupons` and `getGiftCertificate` method now returns `Coupons` and `GiftCertificate` objects with different properties respectively.\n* **cart:** `getCart` method now returns `Cart` object with different properties.\n* **order:** `getOrder` method now returns `Order` object with different properties.\nIt also returns `undefined` until the order is created.\n* **quote:** `getQuote` method has been removed.\n* **shipping:** `getShippingAddress` method now returns `Address` object with different properties.\n* **shipping:** `getShippingOptions` method now returns `ShippingOption[]` array with different properties.\n* **shipping:** `getSelectedShippingOption` method now returns `ShippingOption` object with different properties.\n* **billing:** `getBillingAddress` method now returns `Address` object with different properties.\n* **customer:** `getCustomer` method now returns `Customer` object with different properties.\n\n\n\n<a name=\"0.26.1\"></a>\n## [0.26.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.26.0...v0.26.1) (2018-06-27)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-3299 Filter keys recursively when comparing objects ([68da93e](https://github.com/bigcommerce/checkout-sdk-js/commit/68da93e))\n\n\n\n<a name=\"0.26.0\"></a>\n# [0.26.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.25.0...v0.26.0) (2018-06-27)\n\n\n### Bug Fixes\n\n* **billing:** CHECKOUT-3052 Fall back in billing email when not provided ([d2893ca](https://github.com/bigcommerce/checkout-sdk-js/commit/d2893ca))\n* **common:** CHECKOUT-3170 Remove engine requirement for consumers ([9d2adbc](https://github.com/bigcommerce/checkout-sdk-js/commit/9d2adbc))\n* **common:** CHECKOUT-3299 Fix performance of object comparison ([1a69d2f](https://github.com/bigcommerce/checkout-sdk-js/commit/1a69d2f))\n* **order:** CHECKOUT-3056 Store billing address state when order loads ([44f40a9](https://github.com/bigcommerce/checkout-sdk-js/commit/44f40a9))\n* **payment:** CHECKOUT-3054 Update gift certificate state when relevant actions are dispatched ([412990d](https://github.com/bigcommerce/checkout-sdk-js/commit/412990d))\n* **payment:** CHECKOUT-3054 Use remaining balance from API ([a2989d4](https://github.com/bigcommerce/checkout-sdk-js/commit/a2989d4))\n* **shipping:** CHECKOUT-3052 Pass consignment id to address mapper ([56de8e3](https://github.com/bigcommerce/checkout-sdk-js/commit/56de8e3))\n* **shipping:** CHECKOUT-3052 Return Quote based on external checkout object ([0f5bab7](https://github.com/bigcommerce/checkout-sdk-js/commit/0f5bab7))\n* **shipping:** CHECKOUT-3183 Return shipping address in quote using shipping selector ([988fcd1](https://github.com/bigcommerce/checkout-sdk-js/commit/988fcd1))\n* **shipping:** CHECKOUT-3253 Change consigment schema to store selected shipping option object ([08d4a7e](https://github.com/bigcommerce/checkout-sdk-js/commit/08d4a7e))\n* **shipping:** CHECKOUT-3253 Return selected shipping option as available shipping options ([9bc034f](https://github.com/bigcommerce/checkout-sdk-js/commit/9bc034f))\n* **shipping:** CHECKOUT-3253 Update shipping option schema ([566e251](https://github.com/bigcommerce/checkout-sdk-js/commit/566e251))\n* **shipping:** CHECKOUT-3280 Use POST/PUT to update consignments so we retain shippingOptions ([6aebfc5](https://github.com/bigcommerce/checkout-sdk-js/commit/6aebfc5))\n\n\n### Features\n\n* **checkout:** CHECKOUT-3053 Access data getters via `data` property ([aba3115](https://github.com/bigcommerce/checkout-sdk-js/commit/aba3115))\n* **checkout:** INT-475 Chase Pay button to display on Customer section UCO page ([672d132](https://github.com/bigcommerce/checkout-sdk-js/commit/672d132))\n* **checkout:** INT-660 Update checkout SDK to accept merchantRequestid ([9abc234](https://github.com/bigcommerce/checkout-sdk-js/commit/9abc234))\n* **common:** CHECKOUT-3284 Throw better error when required data is missing ([#302](https://github.com/bigcommerce/checkout-sdk-js/issues/302)) ([3ddfd37](https://github.com/bigcommerce/checkout-sdk-js/commit/3ddfd37))\n* **payment:** INT-594 Send ChasePay CheckoutData needed for WePay ([4433ac4](https://github.com/bigcommerce/checkout-sdk-js/commit/4433ac4))\n* **shopper:** CHECKOUT-3278 Read from customer selector in checkout selector ([e7678d8](https://github.com/bigcommerce/checkout-sdk-js/commit/e7678d8))\n\n\n\n<a name=\"0.25.0\"></a>\n# [0.25.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.24.1...v0.25.0) (2018-06-08)\n\n\n### Bug Fixes\n\n* **cart:** CHECKOUT-3044 Fix subtotal mapping ([6349ece](https://github.com/bigcommerce/checkout-sdk-js/commit/6349ece))\n* **cart:** CHECKOUT-3044 Map subTotal value properly ([4f17be8](https://github.com/bigcommerce/checkout-sdk-js/commit/4f17be8))\n* **checkout:** CHECKOUT-2932 Fix line items mapping for cart ([0dbc837](https://github.com/bigcommerce/checkout-sdk-js/commit/0dbc837))\n* **checkout:** CHECKOUT-3186 Use store credit from customer ([778f70b](https://github.com/bigcommerce/checkout-sdk-js/commit/778f70b))\n* **checkout:** CHECKOUT-3188 Rename coupon description to displayName ([6249a2e](https://github.com/bigcommerce/checkout-sdk-js/commit/6249a2e))\n* **common:** CHECKOUT-3044 Fix mappings for cart verification ([18b2adb](https://github.com/bigcommerce/checkout-sdk-js/commit/18b2adb))\n* **common:** CHECKOUT-3044 Request all includes in other request senders ([b12fead](https://github.com/bigcommerce/checkout-sdk-js/commit/b12fead))\n* **common:** CHECKOUT-3051 Include API version in request header ([cb48799](https://github.com/bigcommerce/checkout-sdk-js/commit/cb48799))\n* **common:** CHECKOUT-3182 Fix address mapper after API changes ([4934748](https://github.com/bigcommerce/checkout-sdk-js/commit/4934748))\n* **payment:** CHECKOUT-3199 Add prefix to payment step when mapping to internal order ([5895fea](https://github.com/bigcommerce/checkout-sdk-js/commit/5895fea))\n* **payment:** CHECKOUT-3214 Fix PayPal Express cart and checkout flow. ([a4c9669](https://github.com/bigcommerce/checkout-sdk-js/commit/a4c9669))\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-2954 Load checkout using storefront API ([256a0fa](https://github.com/bigcommerce/checkout-sdk-js/commit/256a0fa))\n* **checkout:** CHECKOUT-3050 Load checkout using checkout id ([5dda2e5](https://github.com/bigcommerce/checkout-sdk-js/commit/5dda2e5))\n\n\n### Features\n\n* **checkout:** CHECKOUT-2930 Apply Coupons and Gift Certificates via public API ([35ba607](https://github.com/bigcommerce/checkout-sdk-js/commit/35ba607))\n* **checkout:** CHECKOUT-3048 Remove fallback API call to quote endpoint ([0c9a066](https://github.com/bigcommerce/checkout-sdk-js/commit/0c9a066))\n* **checkout:** CHECKOUT-3169 Verify cart using Storefront API checkout endpoint ([8b143ef](https://github.com/bigcommerce/checkout-sdk-js/commit/8b143ef))\n* **order:** CHECKOUT-3047 Include payments by default in OrderRequestSender ([b056ed6](https://github.com/bigcommerce/checkout-sdk-js/commit/b056ed6))\n* **order:** CHECKOUT-3047 Remove order backfill ([d5f5cc8](https://github.com/bigcommerce/checkout-sdk-js/commit/d5f5cc8))\n* **shipping:** CHECKOUT-2928 Update billing address using Storefront API ([41d3513](https://github.com/bigcommerce/checkout-sdk-js/commit/41d3513))\n* **shipping:** CHECKOUT-2929 Use consigments endpoint to update shipping option ([da0823c](https://github.com/bigcommerce/checkout-sdk-js/commit/da0823c))\n* **shipping:** CHECKOUT-2929 Use consignments endpoint to update shipping address. ([c8f46ea](https://github.com/bigcommerce/checkout-sdk-js/commit/c8f46ea))\n* **shipping:** CHECKOUT-3183 Default to geoCountry when quote has no shipping address ([b5c18da](https://github.com/bigcommerce/checkout-sdk-js/commit/b5c18da))\n* **shopper:** CHECKOUT-3110 Provide convenience method to update guest customer email using storefront API ([89d8348](https://github.com/bigcommerce/checkout-sdk-js/commit/89d8348))\n\n\n### BREAKING CHANGES\n\n* **checkout:** You now need to pass in an ID in order to load\ncheckout. i.e.: `checkoutService.loadCheckout(id);`\n* **checkout:** `CheckoutClient#loadCheckout` now returns storefront\nAPI response.\n\n\n\n<a name=\"0.24.1\"></a>\n## [0.24.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.24.0...v0.24.1) (2018-06-06)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-3072 Use prepare instead of preinstall in package.json ([a549ca3](https://github.com/bigcommerce/checkout-sdk-js/commit/a549ca3))\n\n\n\n<a name=\"0.24.0\"></a>\n# [0.24.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.23.1...v0.24.0) (2018-06-06)\n\n\n### Features\n\n* **common:** CHECKOUT-3072 Update address keys to match new API schema ([0ecc7ca](https://github.com/bigcommerce/checkout-sdk-js/commit/0ecc7ca))\n\n\n\n<a name=\"0.23.1\"></a>\n## [0.23.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.23.0...v0.23.1) (2018-05-31)\n\n\n\n<a name=\"0.23.0\"></a>\n# [0.23.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.22.0...v0.23.0) (2018-05-28)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-3191 Update dependencies to fix issue with sourcemaps ([4f6ae44](https://github.com/bigcommerce/checkout-sdk-js/commit/4f6ae44))\n\n\n### Features\n\n* **payment:** INT-275 Add Cryptogram like a new payment instrument ([811a69a](https://github.com/bigcommerce/checkout-sdk-js/commit/811a69a))\n* **payment:** PAYMENTS-2744 Updating Afterpay to support US and NZ customers. ([8f134e8](https://github.com/bigcommerce/checkout-sdk-js/commit/8f134e8))\n\n\n\n<a name=\"0.22.0\"></a>\n# [0.22.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.21.1...v0.22.0) (2018-05-22)\n\n\n### Bug Fixes\n\n* **common:** PAYMENTS-2672 Update `package-lock.json` ([b774111](https://github.com/bigcommerce/checkout-sdk-js/commit/b774111))\n* **payment:** CHECKOUT-2941 Afterpay token no longer needs to be passed in manually ([b7ecf70](https://github.com/bigcommerce/checkout-sdk-js/commit/b7ecf70))\n* **payment:** CHECKOUT-3031 Export VisaCheckoutEventMap ([b1ae134](https://github.com/bigcommerce/checkout-sdk-js/commit/b1ae134))\n* **payment:** PAYMENT-2672 Pass accessToken with all instrument payloads ([af3a264](https://github.com/bigcommerce/checkout-sdk-js/commit/af3a264))\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-3060 Stop exporting `CheckoutService` and `LanguageService` ([215e85f](https://github.com/bigcommerce/checkout-sdk-js/commit/215e85f))\n* **checkout:** CHECKOUT-3142 Remove `CheckoutClient` from public exports ([912a1f3](https://github.com/bigcommerce/checkout-sdk-js/commit/912a1f3))\n* **order:** CHECKOUT-3060 Change order submission parameters ([5aecc72](https://github.com/bigcommerce/checkout-sdk-js/commit/5aecc72))\n* **order:** CHECKOUT-3142 Remove `finalizeOrder` method ([170a639](https://github.com/bigcommerce/checkout-sdk-js/commit/170a639))\n* **payment:** CHECKOUT-3060 Update method names to be consistent ([fd7682c](https://github.com/bigcommerce/checkout-sdk-js/commit/fd7682c))\n\n\n### Features\n\n* **common:** CHECKOUT-2957 Prevent the use of the SDK in non https pages ([7c2bb21](https://github.com/bigcommerce/checkout-sdk-js/commit/7c2bb21))\n* **payment:** CHECKOUT-3031 Add Braintree & VisaCheckout types for VisaCheckout ([01ffa12](https://github.com/bigcommerce/checkout-sdk-js/commit/01ffa12))\n* **payment:** CHECKOUT-3031 Add BraintreeVisaCheckout to BraintreeSDKCreator ([09ac772](https://github.com/bigcommerce/checkout-sdk-js/commit/09ac772))\n* **payment:** CHECKOUT-3031 Add BraintreeVisaCheckoutPaymentProcessor ([4a5e1f4](https://github.com/bigcommerce/checkout-sdk-js/commit/4a5e1f4))\n* **payment:** CHECKOUT-3031 Add BraintreeVisaCheckoutPaymentStrategy ([8da4a29](https://github.com/bigcommerce/checkout-sdk-js/commit/8da4a29))\n* **payment:** CHECKOUT-3031 Add script loader for BraintreeVisaCheckout ([1b5a2a2](https://github.com/bigcommerce/checkout-sdk-js/commit/1b5a2a2))\n* **payment:** CHECKOUT-3031 Add script loader for VisaCheckoutSDK ([53993e3](https://github.com/bigcommerce/checkout-sdk-js/commit/53993e3))\n* **payment:** CHECKOUT-3031 Create WidgetInteraction action for Payment Strategy ([6151dd7](https://github.com/bigcommerce/checkout-sdk-js/commit/6151dd7))\n* **payment:** PAYMENT-2672 Introduce loadInstrumentsByAddress ([3ec227e](https://github.com/bigcommerce/checkout-sdk-js/commit/3ec227e))\n* **shopper:** CHECKOUT-3031 Add BraintreeVisaCheckoutCustomerStrategy ([9a90cca](https://github.com/bigcommerce/checkout-sdk-js/commit/9a90cca))\n* **shopper:** CHECKOUT-3031 Create WidgetInteraction action for Customer Strategy ([ab0b61b](https://github.com/bigcommerce/checkout-sdk-js/commit/ab0b61b))\n\n\n### BREAKING CHANGES\n\n* **checkout:** You can no longer directly call the constructors of\n`CheckoutService` and `LanguageService`. Use `createCheckoutService` and\n`createLanguageService` factory functions instead.\n* **order:** To specify a payment method when submitting an order,\nyou have to provide `methodId` and `gatewayId` instead of `name` and\n`gateway` fields.\n* **payment:** `getInitializePaymentMethod` and\n`isInitializingPaymentMethod` have now been renamed to\n`getInitializePayment` and `isInitializingPayment` respectively.\n* **order:** `CheckoutService#finalizeOrder` method has been\nremoved.\n* **checkout:** `CheckoutClient` is no longer exported for public use.\n\n\n\n<a name=\"0.21.1\"></a>\n## [0.21.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.21.0...v0.21.1) (2018-05-09)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-3124 Return same state object unless it is different ([95a3fd4](https://github.com/bigcommerce/checkout-sdk-js/commit/95a3fd4))\n\n\n\n<a name=\"0.21.0\"></a>\n# [0.21.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.20.1...v0.21.0) (2018-05-09)\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-3124 Remove `getCheckoutMeta` method ([9cf454e](https://github.com/bigcommerce/checkout-sdk-js/commit/9cf454e))\n* **checkout:** CHECKOUT-3124 Remove `verifyCart` method ([53182ec](https://github.com/bigcommerce/checkout-sdk-js/commit/53182ec))\n\n\n### BREAKING CHANGES\n\n* **checkout:** `CheckoutService#verifyCart` method has been removed.\nNow the cart always gets verified before order submission.\n* **checkout:** `CheckoutSelector#getCheckoutMeta` has been removed.\nThe data exposed by this method was intended for internal use only.\n\n\n\n<a name=\"0.20.1\"></a>\n## [0.20.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.20.0...v0.20.1) (2018-05-08)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-3138 Fix Braintree Paypal cart flow initialization ([75eb86a](https://github.com/bigcommerce/checkout-sdk-js/commit/75eb86a))\n\n\n\n<a name=\"0.20.0\"></a>\n# [0.20.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.19.2...v0.20.0) (2018-05-07)\n\n\n### Features\n\n* **common:** CHECKOUT-3075 Remove legacy config mapper ([1762da2](https://github.com/bigcommerce/checkout-sdk-js/commit/1762da2))\n\n\n### BREAKING CHANGES\n\n* **common:** Now getConfig() returns a different structure.\n\n\n\n<a name=\"0.19.2\"></a>\n## [0.19.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.19.1...v0.19.2) (2018-05-03)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-3035 Amend config endpoint URL and header ([dd5105a](https://github.com/bigcommerce/checkout-sdk-js/commit/dd5105a))\n* **payment:** CHECKOUT-3035 Inject store to PaymentStrategyRegistry so it can lazy load payment configuration ([a13afb5](https://github.com/bigcommerce/checkout-sdk-js/commit/a13afb5))\n\n\n\n<a name=\"0.19.1\"></a>\n## [0.19.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.19.0...v0.19.1) (2018-05-02)\n\n\n### Features\n\n* **common:** CHECKOUT-3035 Use checkout setings public endpoint ([85ce289](https://github.com/bigcommerce/checkout-sdk-js/commit/85ce289))\n\n\n\n<a name=\"0.19.0\"></a>\n# [0.19.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.18.0...v0.19.0) (2018-05-01)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-2926 Send Square payment data ([476588f](https://github.com/bigcommerce/checkout-sdk-js/commit/476588f))\n* **payment:** PAYMENTS-2122 Ensure instrument Id is accessed via the meta object ([76aaa89](https://github.com/bigcommerce/checkout-sdk-js/commit/76aaa89))\n\n\n### Code Refactoring\n\n* **payment:** CHECKOUT-2951 Define method-specific options for payment initialization. ([80e3c72](https://github.com/bigcommerce/checkout-sdk-js/commit/80e3c72))\n* **payment:** CHECKOUT-2951 Pass methodId and gatewayId as options ([fda9e1c](https://github.com/bigcommerce/checkout-sdk-js/commit/fda9e1c))\n* **payment:** CHECKOUT-2951 Rename initializePayment and deinitializePayment methods ([d9626cd](https://github.com/bigcommerce/checkout-sdk-js/commit/d9626cd))\n* **payment:** CHECKOUT-2951 Update Braintree initialization options ([0b46130](https://github.com/bigcommerce/checkout-sdk-js/commit/0b46130))\n* **payment:** CHECKOUT-2951 Update Klarna initialization options ([802fa61](https://github.com/bigcommerce/checkout-sdk-js/commit/802fa61))\n* **payment:** CHECKOUT-2951 Update Square payment initialization params ([29c3855](https://github.com/bigcommerce/checkout-sdk-js/commit/29c3855))\n* **shipping:** CHECKOUT-2951 Define method-specific options for shipping initialization. ([1ab385d](https://github.com/bigcommerce/checkout-sdk-js/commit/1ab385d))\n* **shopper:** CHECKOUT-2951 Define method-specific options for customer initialization. ([2ac93df](https://github.com/bigcommerce/checkout-sdk-js/commit/2ac93df))\n\n\n### BREAKING CHANGES\n\n* **payment:** `loadCallback` for Klarna Payment has been renamed to\n`onLoad`.\n* **payment:** `modalHanlder` for Braintree initialization has been\nrenamed to `threeDSecure`.\n* **payment:** Update initialize options for Square payment.\n`widgetConfig` key is no longer required. It is now flattened with\n`SquarePaymentInitializeOptions`.\n* **payment:** Rename `initializePaymentMethod` to\n`initializePayment`, and `deinitializePaymentMethod` to\n`deinitializePayment`.\n* **payment:** Pass `methodId` and `gatewayId` as an object rather\nthan individual parameters when calling `initializePaymentMethod` and\n`deinitializePaymentMethod`.\n* **payment:** Method-specific options need to be passed in under a\nkey named after the method when calling `initializePaymentMethod`.\n* **shipping:** Method-specific options need to be passed in under a\nkey named after the method when calling `initializeShipping`.\n* **shopper:** Method-specific options need to be passed in under a\nkey named after the method when calling `initalizeCustomer`.\n\n\n\n<a name=\"0.18.0\"></a>\n# [0.18.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.17.2...v0.18.0) (2018-04-12)\n\n\n### Features\n\n* **common:** CHECKOUT-3035 Initialize config using API ([013cf59](https://github.com/bigcommerce/checkout-sdk-js/commit/013cf59))\n\n\n### BREAKING CHANGES\n\n* **common:** You now need to initialize CheckoutService calling\nloadConfig() method instead of passing a config object..\n\n\n\n<a name=\"0.17.2\"></a>\n## [0.17.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.17.1...v0.17.2) (2018-04-10)\n\n\n\n<a name=\"0.17.1\"></a>\n## [0.17.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.17.0...v0.17.1) (2018-04-10)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-2926 Register Square Payment Strategy ([bd3d19a](https://github.com/bigcommerce/checkout-sdk-js/commit/bd3d19a))\n\n\n\n<a name=\"0.17.0\"></a>\n# [0.17.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.16.0...v0.17.0) (2018-04-10)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-2905 Fix redirect issue with AfterPay in Firefox ([b70bdae](https://github.com/bigcommerce/checkout-sdk-js/commit/b70bdae))\n\n\n### Features\n\n* **payment:** CHECKOUT-2926 Register Square Payment Strategy ([f698908](https://github.com/bigcommerce/checkout-sdk-js/commit/f698908))\n\n\n\n<a name=\"0.16.0\"></a>\n# [0.16.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.15.1...v0.16.0) (2018-04-06)\n\n\n### Features\n\n* **checkout:** INT-251 Add WePay strategy ([d98627d](https://github.com/bigcommerce/checkout-sdk-js/commit/d98627d))\n* **payment:** CHECKOUT-3030 Braintree PayPal & PayPal Credit ([b79191f](https://github.com/bigcommerce/checkout-sdk-js/commit/b79191f))\n\n\n\n<a name=\"0.15.1\"></a>\n## [0.15.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.15.0...v0.15.1) (2018-04-03)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-3007 Remove unexpected injections ([f08f02e](https://github.com/bigcommerce/checkout-sdk-js/commit/f08f02e))\n* **payment:** CHECKOUT-2905 Hold execution to avoid unwanted redirect ([1753b21](https://github.com/bigcommerce/checkout-sdk-js/commit/1753b21))\n* **payment:** CHECKOUT-2926 Unregister Square v2 ([0917ca7](https://github.com/bigcommerce/checkout-sdk-js/commit/0917ca7))\n* **payment:** CHECKOUT-3007 Fix issue where shoppers cannot submit offsite payment ([c344e9b](https://github.com/bigcommerce/checkout-sdk-js/commit/c344e9b))\n\n\n\n<a name=\"0.15.0\"></a>\n# [0.15.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.14.0...v0.15.0) (2018-03-29)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-2992 Only return new instance if different ([60b25b0](https://github.com/bigcommerce/checkout-sdk-js/commit/60b25b0))\n* **checkout:** CHECKOUT-2992 Update cached value if newly computed value is different ([1f40301](https://github.com/bigcommerce/checkout-sdk-js/commit/1f40301))\n* **payment:** CHECKOUT-2926 Fix order submission payload for Square ([15cd3df](https://github.com/bigcommerce/checkout-sdk-js/commit/15cd3df))\n* **payment:** CHECKOUT-3007 Use `PaymentStrategyActionCreator` to fix getter not returning initialization and execution status correctly ([6b8a9a8](https://github.com/bigcommerce/checkout-sdk-js/commit/6b8a9a8))\n* **shipping:** CHECKOUT-3027 Track strategy execution while synchronizing checkout address for Amazon AddressBook widget ([e16cfdc](https://github.com/bigcommerce/checkout-sdk-js/commit/e16cfdc))\n* **shipping:** CHECKOUT-3027 Use `ShippingStrategyAction` to fix getter not returning initialization and execution status correctly ([6444bf4](https://github.com/bigcommerce/checkout-sdk-js/commit/6444bf4))\n* **shopper:** CHECKOUT-3028 Use `CustomerStrategyActionCreator` to fix getter not returning initialization and execution status correctly ([5aa9bb4](https://github.com/bigcommerce/checkout-sdk-js/commit/5aa9bb4))\n\n\n### Features\n\n* **checkout:** CHECKOUT-2951 Add ability to destruct getters ([abc7021](https://github.com/bigcommerce/checkout-sdk-js/commit/abc7021))\n\n\n\n<a name=\"0.14.0\"></a>\n# [0.14.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.13.0...v0.14.0) (2018-03-29)\n\n\n### Features\n\n* **payment:** CHECKOUT-2644 Braintree Credit Card Strategy ([b21eea6](https://github.com/bigcommerce/checkout-sdk-js/commit/b21eea6))\n* **payment:** CHECKOUT-2644 Braintree Mocks ([c8454db](https://github.com/bigcommerce/checkout-sdk-js/commit/c8454db))\n* **payment:** CHECKOUT-2644 Braintree Payment Processor ([ddf4b5f](https://github.com/bigcommerce/checkout-sdk-js/commit/ddf4b5f))\n* **payment:** CHECKOUT-2644 Braintree Script Loader ([c6c00c3](https://github.com/bigcommerce/checkout-sdk-js/commit/c6c00c3))\n* **payment:** CHECKOUT-2644 Braintree SDK Creator ([f040850](https://github.com/bigcommerce/checkout-sdk-js/commit/f040850))\n* **payment:** CHECKOUT-2644 Braintree Type Definition ([26ea828](https://github.com/bigcommerce/checkout-sdk-js/commit/26ea828))\n* **payment:** CHECKOUT-2644 Type guard methods for CreditCard, TokenizedCreditCard & VaultedIntrument ([47c298b](https://github.com/bigcommerce/checkout-sdk-js/commit/47c298b))\n\n\n\n<a name=\"0.13.0\"></a>\n# [0.13.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.12.1...v0.13.0) (2018-03-27)\n\n\n### Features\n\n* **shipping:** CHECKOUT-2964 Allow making phone number required ([e82ebf9](https://github.com/bigcommerce/checkout-sdk-js/commit/e82ebf9))\n\n\n\n<a name=\"0.12.1\"></a>\n## [0.12.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.12.0...v0.12.1) (2018-03-26)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-3032 NoPaymentDataRequiredPaymentStrategy is not properly exported ([1495484](https://github.com/bigcommerce/checkout-sdk-js/commit/1495484))\n\n\n\n<a name=\"0.12.0\"></a>\n# [0.12.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.11.1...v0.12.0) (2018-03-26)\n\n\n### Features\n\n* **payment:** CHECKOUT-3032 Create a no payment strategy ([83145b3](https://github.com/bigcommerce/checkout-sdk-js/commit/83145b3))\n\n\n\n<a name=\"0.11.1\"></a>\n## [0.11.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.11.0...v0.11.1) (2018-03-26)\n\n### Chores\n\n* **common:** CHECKOUT-2959 Update location of updated dependencies. ([2846e9a](https://github.com/bigcommerce/checkout-sdk-js/commit/2846e9aad286ee87f31842c9ffaaada4be5686fa))\n\n<a name=\"0.11.0\"></a>\n# [0.11.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.10.3...v0.11.0) (2018-03-20)\n\n\n### Bug Fixes\n\n* **payments:** CHECKOUT-2926 Do not cache failure when loading scripts ([43d33bb](https://github.com/bigcommerce/checkout-sdk-js/commit/43d33bb))\n\n\n### Features\n\n* **payments:** CHECKOUT-2926 Add Square V2 payment strategy ([81126fa](https://github.com/bigcommerce/checkout-sdk-js/commit/81126fa))\n\n\n\n<a name=\"0.10.3\"></a>\n## [0.10.3](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.10.2...v0.10.3) (2018-03-19)\n\n\n### Bug Fixes\n\n* **PAYMENTS:** PAYMENTS-2590 Release bigpay-client ([aa3b6c3](https://github.com/bigcommerce/checkout-sdk-js/commit/aa3b6c3))\n\n\n\n<a name=\"0.10.2\"></a>\n## [0.10.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.10.1...v0.10.2) (2018-03-15)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-3012 Always override `onAmazonLoginReady` and `onAmazonPaymentReady`. ([71b9805](https://github.com/bigcommerce/checkout-sdk-js/commit/71b9805))\n\n\n\n<a name=\"0.10.1\"></a>\n## [0.10.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.10.0...v0.10.1) (2018-03-14)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-2954 Bump [@bigcommerce](https://github.com/bigcommerce)/data-store to include various fixes ([88bacb5](https://github.com/bigcommerce/checkout-sdk-js/commit/88bacb5))\n* **payment:** CHECKOUT-2955 `isInitializingPaymentMethod` should return true while waiting for initialization to complete ([a26884f](https://github.com/bigcommerce/checkout-sdk-js/commit/a26884f))\n\n\n\n<a name=\"0.10.0\"></a>\n# [0.10.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.9.0...v0.10.0) (2018-03-06)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-2902 Submit order comments when paying with Afterpay ([5e5b5f2](https://github.com/bigcommerce/checkout-sdk-js/commit/5e5b5f2))\n\n\n### Features\n\n* **payments:** CHECKOUT-2646 Add support for Klarna payments ([47ee384](https://github.com/bigcommerce/checkout-sdk-js/commit/47ee384))\n\n\n\n<a name=\"0.9.0\"></a>\n# [0.9.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.8.0...v0.9.0) (2018-02-26)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-2274 Fix AmazonPay EU and UK script path ([235fec3](https://github.com/bigcommerce/checkout-sdk-js/commit/235fec3))\n* **payment:** CHECKOUT-2274 Forward store credit selection to AmazonPay ([090fbb3](https://github.com/bigcommerce/checkout-sdk-js/commit/090fbb3))\n* **payment:** CHECKOUT-2274 Make sure AmazonPay AddressBook is initialized before Wallet ([22d4a49](https://github.com/bigcommerce/checkout-sdk-js/commit/22d4a49))\n* **payment:** CHECKOUT-2274 Pass order reference id to wallet ([4744769](https://github.com/bigcommerce/checkout-sdk-js/commit/4744769))\n* **payment:** CHECKOUT-2274 Remove duplicate callback ([290c593](https://github.com/bigcommerce/checkout-sdk-js/commit/290c593))\n* **payment:** CHECKOUT-2274 Resolve promise before executing callback ([cc18120](https://github.com/bigcommerce/checkout-sdk-js/commit/cc18120))\n* **payment:** CHECKOUT-2274 Retrieve new Amazon order reference if none is provided ([18dabff](https://github.com/bigcommerce/checkout-sdk-js/commit/18dabff))\n* **payment:** CHECKOUT-2274 Return billing initialization status ([daadf84](https://github.com/bigcommerce/checkout-sdk-js/commit/daadf84))\n* **payment:** CHECKOUT-2274 Throw error if unable to find wallet container ([c5a40ab](https://github.com/bigcommerce/checkout-sdk-js/commit/c5a40ab))\n* **payment:** CHECKOUT-2274 Verify cart before submitting order with AmazonPay ([0cc90dd](https://github.com/bigcommerce/checkout-sdk-js/commit/0cc90dd))\n* **shipping:** CHECKOUT-2274 Return AmazonPay address book initialization error ([a9d77a8](https://github.com/bigcommerce/checkout-sdk-js/commit/a9d77a8))\n* **shipping:** CHECKOUT-2274 Throw error if unable to find address book container ([5419a92](https://github.com/bigcommerce/checkout-sdk-js/commit/5419a92))\n* **shipping:** CHECKOUT-2274 Throw error if unable to synchronize data after selecting shipping / billing address using AmazonPay widgets ([ad25fc0](https://github.com/bigcommerce/checkout-sdk-js/commit/ad25fc0))\n\n\n### Features\n\n* **customer:** CHECKOUT-2274 Register AmazonPayCustomerRegistry ([14bf20b](https://github.com/bigcommerce/checkout-sdk-js/commit/14bf20b))\n* **payment:** CHECKOUT-2274 Register AmazonPayPaymentStrategy ([e6d5b1e](https://github.com/bigcommerce/checkout-sdk-js/commit/e6d5b1e))\n* **shipping:** CHECKOUT-2274 Register AmazonPayShippingStrategy ([67fc81a](https://github.com/bigcommerce/checkout-sdk-js/commit/67fc81a))\n\n\n### Performance Improvements\n\n* **payment:** CHECKOUT-2274 Initialize remote payment just before order submission ([a564429](https://github.com/bigcommerce/checkout-sdk-js/commit/a564429))\n\n\n\n<a name=\"0.8.0\"></a>\n# [0.8.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.7.0...v0.8.0) (2018-02-23)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-2647 Send storeCredit flag and verify cart ([b480ff8](https://github.com/bigcommerce/checkout-sdk-js/commit/b480ff8))\n* **shopper:** CHECKOUT-2274 Fix `isSigningOut` status getter for `AmazonPay` ([ccd11ec](https://github.com/bigcommerce/checkout-sdk-js/commit/ccd11ec))\n* **shopper:** CHECKOUT-2274 Use POST instead of GET for tracking remote checkout authorization event ([67bcc20](https://github.com/bigcommerce/checkout-sdk-js/commit/67bcc20))\n\n\n### Features\n\n* **billing:** CHECKOUT-2274 Add billing initialization status and error getter ([2fdee2a](https://github.com/bigcommerce/checkout-sdk-js/commit/2fdee2a))\n* **forms:** CHECKOUT-2752 Add subdivision array to Countries mock ([b2bbb41](https://github.com/bigcommerce/checkout-sdk-js/commit/b2bbb41))\n* **forms:** CHECKOUT-2752 Enrich getShipping/BillingAddressFields to include information about countries/states/postCode/phone ([91aa682](https://github.com/bigcommerce/checkout-sdk-js/commit/91aa682))\n* **payment:** CHECKOUT-2274 Add payment initialization status and error getter ([3b71d97](https://github.com/bigcommerce/checkout-sdk-js/commit/3b71d97))\n* **shipping:** CHECKOUT-2274 Add shipping initialization status and error getter ([c78ecc1](https://github.com/bigcommerce/checkout-sdk-js/commit/c78ecc1))\n* **shopper:** CHECKOUT-2274 Add customer initialization status and error getter ([4abc7cc](https://github.com/bigcommerce/checkout-sdk-js/commit/4abc7cc))\n\n\n\n<a name=\"0.7.0\"></a>\n# [0.7.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.6.2...v0.7.0) (2018-02-15)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-2274 Properly handle `/remote-checkout` responses ([f487a4c](https://github.com/bigcommerce/checkout-sdk-js/commit/f487a4c))\n* **payment:** CHECKOUT-2274 Fix AmazonPay widget script path ([df7ed1e](https://github.com/bigcommerce/checkout-sdk-js/commit/df7ed1e))\n* **payment:** CHECKOUT-2274 Fix AmazonPay widgets namespace ([4bd92cd](https://github.com/bigcommerce/checkout-sdk-js/commit/4bd92cd))\n* **payment:** CHECKOUT-2274 Fix payment registry injection ([8d6c64d](https://github.com/bigcommerce/checkout-sdk-js/commit/8d6c64d))\n* **payment:** CHECKOUT-2274 Only create Amazon wallet when ready ([235e8e8](https://github.com/bigcommerce/checkout-sdk-js/commit/235e8e8))\n* **payment:** CHECKOUT-2274 Refresh AmazonPay wallet ([59a6bba](https://github.com/bigcommerce/checkout-sdk-js/commit/59a6bba))\n* **shipping:** CHECKOUT-2274 Properly handle shipping data from `/remote-checkout` endpoint ([31d1bc6](https://github.com/bigcommerce/checkout-sdk-js/commit/31d1bc6))\n\n\n### Features\n\n* **common:** CHECKOUT-2416 Add Config Action Creator ([d90feea](https://github.com/bigcommerce/checkout-sdk-js/commit/d90feea))\n* **common:** CHECKOUT-2416 Add Config Request Sender ([aa541df](https://github.com/bigcommerce/checkout-sdk-js/commit/aa541df))\n* **common:** CHECKOUT-2416 Complete Config Reducer ([e37f8cd](https://github.com/bigcommerce/checkout-sdk-js/commit/e37f8cd))\n* **common:** CHECKOUT-2416 Complete Config Selector ([b20374c](https://github.com/bigcommerce/checkout-sdk-js/commit/b20374c))\n* **common:** CHECKOUT-2417 Load Config as part of loadCheckout ([5c2dc05](https://github.com/bigcommerce/checkout-sdk-js/commit/5c2dc05))\n* **forms:** CHECKOUT-2417 Add Form Selector ([2c0507d](https://github.com/bigcommerce/checkout-sdk-js/commit/2c0507d))\n* **forms:** CHECKOUT-2417 Add Load Shipping/Billing Address Fields ([005c465](https://github.com/bigcommerce/checkout-sdk-js/commit/005c465))\n* **forms:** CHECKOUT-2417 Countries always contain the subdivision array ([51390fc](https://github.com/bigcommerce/checkout-sdk-js/commit/51390fc))\n* **shipping:** CHECKOUT-2274 Add method for initializing shipping address and shipping option provider ([8dc1b6e](https://github.com/bigcommerce/checkout-sdk-js/commit/8dc1b6e))\n\n\n\n<a name=\"0.6.2\"></a>\n## [0.6.2](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.6.1...v0.6.2) (2018-02-02)\n\n\n### Bug Fixes\n\n* **payment:** CHECKOUT-2875 Return `OrderFinalizationNotRequiredError` if not required to finalize when using SagePay or Offsite payment method ([f3a0caf](https://github.com/bigcommerce/checkout-sdk-js/commit/f3a0caf))\n\n\n\n<a name=\"0.6.1\"></a>\n## [0.6.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.6.0...v0.6.1) (2018-01-29)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-2844 Fix `Object.setPrototypeOf` not available in some browsers ([1966428](https://github.com/bigcommerce/checkout-sdk-js/commit/1966428))\n* **common:** CHECKOUT-2851 Use Lodash instead of `Object.assign` to support older browsers ([70f0126](https://github.com/bigcommerce/checkout-sdk-js/commit/70f0126))\n\n\n\n<a name=\"0.6.0\"></a>\n# [0.6.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.5.1...v0.6.0) (2018-01-24)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-2749 Fix `TimeoutError` not inheriting members of `RequestError` ([d7d19dd](https://github.com/bigcommerce/checkout-sdk-js/commit/d7d19dd))\n* **payment:** CHECKOUT-2842 Don't need to check for missing data when constructing payload for payment service ([3784295](https://github.com/bigcommerce/checkout-sdk-js/commit/3784295))\n* **payment:** PAYMENTS-2314 Remove hard coded VAT token ([0628095](https://github.com/bigcommerce/checkout-sdk-js/commit/0628095))\n\n\n### Features\n\n* **payment:** PAYMETNS-2314 Authorise payment with instrument ([2b91c85](https://github.com/bigcommerce/checkout-sdk-js/commit/2b91c85))\n\n\n\n<a name=\"0.5.1\"></a>\n## [0.5.1](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.5.0...v0.5.1) (2018-01-18)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-2749 Fix error message concatenation ([3f75f29](https://github.com/bigcommerce/checkout-sdk-js/commit/3f75f29))\n* **payment:** CHECKOUT-2749 Fix SagePay 3DS payment flow ([9d47f31](https://github.com/bigcommerce/checkout-sdk-js/commit/9d47f31))\n* **payment:** CHECKOUT-2813 Ensure payment strategies are initialized with corresponding method data ([01d692c](https://github.com/bigcommerce/checkout-sdk-js/commit/01d692c))\n\n\n\n<a name=\"0.5.0\"></a>\n# [0.5.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.4.0...v0.5.0) (2018-01-15)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-2749 Throw error if required data is missing ([8a91844](https://github.com/bigcommerce/checkout-sdk-js/commit/8a91844))\n\n\n### Code Refactoring\n\n* **common:** CHECKOUT-2749 Do not set initial state unless relevant action is triggered ([ddd817b](https://github.com/bigcommerce/checkout-sdk-js/commit/ddd817b))\n* **common:** CHECKOUT-2749 Reject with error instead of state ([cfb99c4](https://github.com/bigcommerce/checkout-sdk-js/commit/cfb99c4))\n\n\n### Features\n\n* **cart:** CHECKOUT-2749 Add specialized error types related to cart ([779d3fe](https://github.com/bigcommerce/checkout-sdk-js/commit/779d3fe))\n* **common:** CHECKOUT-2749 Add `TimeoutError` ([9cd5d27](https://github.com/bigcommerce/checkout-sdk-js/commit/9cd5d27))\n* **common:** CHECKOUT-2749 Add common custom error types ([bae946a](https://github.com/bigcommerce/checkout-sdk-js/commit/bae946a))\n* **common:** CHECKOUT-2749 Transform payload of all failed actions as `Error` instance ([fc00a37](https://github.com/bigcommerce/checkout-sdk-js/commit/fc00a37))\n* **order:** CHECKOUT-2749 Add specialized error types related to order ([43fc520](https://github.com/bigcommerce/checkout-sdk-js/commit/43fc520))\n* **payment:** CHECKOUT-2749 Add specialized error types related to payment ([91db667](https://github.com/bigcommerce/checkout-sdk-js/commit/91db667))\n\n\n### BREAKING CHANGES\n\n* **cart:** Return `CartChangedError` when we detect a change in\nthe cart content of the shopper. Previously we return a simulated server\nresponse, which contains fields such as `body` and `title`. Now it only\ncontains `message` and `type`. Also, the value of `type` property has\nchanged to \"cart_changed\" instead of \"changed_cart\".\n* **common:** Previously, we return an empty object if we try to\nretrieve a piece of data that hasn't been fetched remotely. Now, it\nreturns `undefined` instead.\n* **common:** Return with a rejected promise with the thrown error instead of the current state so that clients can inspect the error directly.\n\n\n\n<a name=\"0.4.0\"></a>\n# [0.4.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.3.0...v0.4.0) (2018-01-08)\n\n\n### Bug Fixes\n\n* **checkout:** CHECKOUT-2784 Memoize `getCheckoutMeta` ([871a697](https://github.com/bigcommerce/checkout-sdk-js/commit/871a697))\n* **common:** CHECKOUT-2419 Ensure selectors return frozen objects unless configured otherwise ([4d59b24](https://github.com/bigcommerce/checkout-sdk-js/commit/4d59b24))\n* **order:** CHECKOUT-2784 Memoize `getOrderMeta` ([31bb709](https://github.com/bigcommerce/checkout-sdk-js/commit/31bb709))\n* **payment:** PAYMENTS-1983 Increment PATCH version of bigpay-client ([793faf5](https://github.com/bigcommerce/checkout-sdk-js/commit/793faf5))\n\n\n### Features\n\n* **common:** CHECKOUT-2419 Warn if mutating state ([6c7bd40](https://github.com/bigcommerce/checkout-sdk-js/commit/6c7bd40))\n* **common:** CHECKOUT-2784 Add `CacheFactory` ([bfcdc7a](https://github.com/bigcommerce/checkout-sdk-js/commit/bfcdc7a))\n\n\n### BREAKING CHANGES\n\n* **common:** You now get an error if you try to mutate the any object returned by `CheckoutService` unless you set `shouldWarnMutation` to false.\n\n\n\n<a name=\"0.3.0\"></a>\n# [0.3.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.2.0...v0.3.0) (2018-01-03)\n\n\n### Bug Fixes\n\n* **common:** CHECKOUT-2419 Only trigger subscribers if values have changed ([343446a](https://github.com/bigcommerce/checkout-sdk-js/commit/343446a))\n* **payment:** CHECKOUT-2789 Add `PaypalProPaymentStrategy` to handle special conditions for Paypal Payments Pro US ([8312877](https://github.com/bigcommerce/checkout-sdk-js/commit/8312877))\n\n\n### Features\n\n* **payment:** PAYMENTS-2203 Add the ability to delete an instrument ([9a5b8ec](https://github.com/bigcommerce/checkout-sdk-js/commit/9a5b8ec))\n* **payment:** PAYMENTS-2203 Add the ability to get instruments ([1a4f179](https://github.com/bigcommerce/checkout-sdk-js/commit/1a4f179))\n* **payment:** PAYMENTS-2203 Add the ability to vault an instrument ([8eda640](https://github.com/bigcommerce/checkout-sdk-js/commit/8eda640))\n\n\n\n<a name=\"0.2.0\"></a>\n# [0.2.0](https://github.com/bigcommerce/checkout-sdk-js/compare/v0.1.0...v0.2.0) (2017-12-21)\n\n\n### Bug Fixes\n\n* **payment:** PAYMENTS-2275 Skip payment submission if payment is already acknowledged or finalized ([f8ea5d2](https://github.com/bigcommerce/checkout-sdk-js/commit/f8ea5d2))\n\n\n### Code Refactoring\n\n* **checkout:** CHECKOUT-2756 Rename getLoadQuoteError to getLoadCheckoutError ([dc8cd04](https://github.com/bigcommerce/checkout-sdk-js/commit/dc8cd04))\n* **checkout:** CHECKOUT-2756 Rename isLoadingQuote to isLoadingCheckout ([76920f7](https://github.com/bigcommerce/checkout-sdk-js/commit/76920f7))\n* **payment:** PAYMENTS-2275 Change method name from isPaymentRequired to isPaymentDataRequired ([ca44355](https://github.com/bigcommerce/checkout-sdk-js/commit/ca44355))\n\n\n### Features\n\n* **payment:** PAYMENTS-2275 Add isPaymentDataSubmitted method to check if payment is already submitted for current order ([7f9fc5d](https://github.com/bigcommerce/checkout-sdk-js/commit/7f9fc5d))\n\n\n### BREAKING CHANGES\n\n* **payment:** The new method name should be less ambigious as it is intended to check whether a shopper is required to enter payment details\n* **checkout:** To correspond with the loadCheckout method\n* **checkout:** To correspond with the loadCheckout method\n\n\n\n<a name=\"0.1.0\"></a>\n# 0.1.0 (2017-12-19)\n\n\n### Features\n\n* **checkout:** CHECKOUT-2098 Add CheckoutService and CheckoutClient ([30aa099](https://github.com/bigcommerce/checkout-sdk-js/commit/30aa099))\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contribution Guide\n\n\n## Table of contents <!-- omit in toc -->\n- [Project overview](#project-overview)\n    - [Structure](#structure)\n    - [Dependencies](#dependencies)\n    - [State management](#state-management)\n        - [Actions](#actions)\n        - [Reducers](#reducers)\n        - [Selectors](#selectors)\n    - [Strategies](#strategies)\n    - [Errors](#errors)\n    - [Tests](#tests)\n- [Submit changes](#submit-changes)\n    - [Coding guideline](#coding-guideline)\n    - [Commit guideline](#commit-guideline)\n    - [Developer commands](#developer-commands)\n    - [System requirement](#system-requirement)\n- [Submit issues](#submit-issues)\n- [Release version](#release-version)\n\n\n## Project overview\n\n### Structure\nThe entry point of the library is `src/index`, which exposes all the public modules that can be imported by an external consumer. Internal modules are not exported, therefore you cannot import them externally and can only be used internally. We have a special compilation step that puts the restriction in place. Our intention is to hide internal implementation details from the external consumers. This way we can refactor the code with confidence in the future. We will not accept any pull requests that expose internal details.\n\nInternal modules are usually grouped by their respective domain areas, i.e.: `cart`, `checkout`, `order` etc... Modules that are not domain specific are placed in `common` folder. The folder might also contain modules that you intend to extract out into separate repositories later on. For example, `common/utility` folder contains a set of helper functions that work with generic data types and are not specific to a domain area. The grouping is designed specifically to help us navigate the project directory and locate files quickly.\n\nEvery top level module should have an `index` file that re-exports all functions and classes that can be imported in a different module. It allows us to better control the internal visibility of submodules, and allows us to import them succinctly. i.e.:\n\n```ts\n// order/index.ts\nexport { default as Order } from './order';\nexport { default as OrderActionCreator } from './order-action-creator';\n```\n\n```ts\n// checkout/index.ts\nimport { Order, OrderActionCreator } from '../order';\n```\n\n### Dependencies\nAlways inject dependencies if they create side effects (i.e.: making a network call) so they can be mocked out easily. Also, consider injecting dependencies if you want to decouple the objects so that they depend on interfaces rather than concrete implementations. You can inject dependencies via constructor or method parameters. For classes that are difficult to construct, you might choose to write a factory function to simplify the construction process. i.e.:\n\n```ts\n// checkout/create-checkout-service.ts\n\nexport default function createCheckoutService(): CheckoutService {\n    const requestSender = createRequestSender();\n\n    return new CheckoutService(\n        createCheckoutStore(),\n        new CheckoutActionCreator(new CheckoutRequestSender(requestSender)),\n        new ConfigActionCreator(new ConfigRequestSender(requestSender)),\n        // Other dependencies\n    );\n}\n```\n\n### State management\nWe retain the current state in memory because we want to provide synchronous access to it once it is loaded from the remote server. Internally, we use the data to perform certain actions. For example, certain payment integrations require additional information to function. We can provide these information behind the scene without having to ask the consumer of the library to provide. Furthermore, with access to the current state, we can watch for any changes and notifies the consumer to perform corresponding changes.\n\n#### Actions\nAll asynchronous operations are implemented as observable actions. An action represents the intent of a user, for example, submitting an order. It is observable, meaning you can subscribe to it and get notified when there are events of interest. When actions are dispatched, they are placed in a queue and get executed sequentially. If there are actions that are independent from each other, they can be dispatched in separate queues and be executed concurrently. The emitted values get processed by a set of transformation functions, called the reducers, before they get retained in a central location - the [data store](https://github.com/bigcommerce/data-store-js).\n\nThere are several benefits with this approach.\n* The sequential execution queue minimises the likelihood of encountering race conditions. If asynchronous calls are not coordinated, their completion callbacks might not be called in the same order as when they are executed.\n* The portable nature of actions means that they can be passed around like regular objects. They are not executed until they are dispatched. This means you can easily compose various actions in order to carry out more complicated tasks.\n* There is a clear separation between the actions that get executed and the data that gets retained. The separation of read and write operations simplifies the management of a complex data tree.\n* All changes are subscribable in a central location. This is particularly important for a library designed for UI development, as you often need to present the latest changes to the user.\n\nThere are three types of actions:\n1. **Basic actions** - They are plain objects for carrying data. They have the following properties.\n    * `type`: The identifier of the action.\n    * `payload`: The primary data to be transferred.\n    * `meta`: The secondary data to be transferred.\n    * `error`: A flag indicating if the action represents a failure.\n2. **Observable actions** - They encapsulate asynchronous operations. They emit basic actions whenever there are events of interest. Once they are created, they are inactive until they are dispatched.\n3. **Thunk actions** - They are functions responsible for creating observable actions that depend on the current state. Inside the function, you have access to the data store, which you can use to retrieve the current state and create further actions.\n\nWhen actions are dispatched, they can be intercepted and transformed before they reach the reducers. For example, we have a transformer, `RequestErrorTransformer`, that intercepts all error actions and appends additional meta information to them.\n\n#### Reducers\nThe root reducer is responsible for transforming the entire state tree. It is formed by combining multiple smaller reducers, i.e.: `cartReducer`, `consignmentReducer` etc... This approach allows us to break down the large state tree into smaller, more manageable chunks. Every reducer has the following signature.\n\n```ts\nexport default function cartReducer(state: CartState, action: CartAction): CartState {}\n```\n\nA reducer is a pure function, meaning it does not create side effects or mutates the original state object. If there is a relevant action, it returns a new state object for the data store to retain. Typically, a sub-reducer has the following properties.\n* `data`: The primary data to retain.\n* `meta`: The secondary data to retain.\n* `statuses`: Flags indicating if certain actions are in progress.\n* `errors`: Errors if certain actions have failed.\n\nNot only do we retain the result of an action, we also keep track of its statuses and possible errors. This way, the UI can subscribe to these changes and reflect them in the view.\n\n#### Selectors\nYou can access the state of the data store synchronously via selectors. Selectors are objects responsible for retrieving or deriving data from multiple sources. They act as access points to the underlying state tree. They only return new objects if the return values are different to the previous values. This is so that UI can determine whether to re-render by doing a simple equality check against the new values. Their returned values are immutable. In fact, they are frozen in development mode unless specified otherwise. We want to discourage external consumers from directly mutating the internal state of the library, which can lead to unexpected behaviours.\n\nWhen actions are dispatched, they get processed by reducers and eventually reach to the data store and be retained. Reducers are responsible for controlling what and where the information should be retained. When there is a change in the state, all subscribers get notified and receive the latest state.\n\n\n### Strategies\nDifferent payment methods might have unique integration requirements. They are encapsulated as payment strategies. `PaymentStrategyRegistry` is responsible for registering and retrieving these strategies. i.e.:\n\n```ts\nconst registry = new PaymentStrategyRegistry();\n\nregistry.register('creditcard', () =>\n    new CreditCardPaymentStrategy()\n);\n```\n\nSome of the payment methods have additional capabilities, such as providing shipping and customer information. They are encapsulated as shipping and customer strategies respectively. This pattern allows us to execute a different procedure based on the integration requirement of a payment method in runtime.\n\n### Errors\nSpecific error objects get thrown when there are identifiable issues. For example, if an error occurred because the required data is missing, you will get a `MissingDataError`. You can catch and inspect `type` property to decide how to handle them. When in development mode, error objects also include additional error messages to help developers debug issues. We do not append debug messages in production because we want to avoid surfacing developer-facing messages to the end-users.\n\n### Tests\nWe recommend you to mock out the collaborators of your test subject if they are external dependencies, produce non-repeatable results or induce any kind of side effects. In the test, you verify whether or not certain collaborators are interacted with in the expected manner. The downside to this style of testing is that your tests tend to couple with implementation details, therefore might need to be updated if the implementation changes. In certain cases, it might be more useful to write tests that verify the actual result of using the test subject instead.\n\nWe use [Jest](https://github.com/facebook/jest) as our test runner. It is a powerful tool that has many magical features, i.e.: snapshot testing and automatic mocking. However, sometimes, overusing or misusing these features might make your tests less manageable. For example, if you use a snapshot to test whether the return value of a function matches your expectation, you forgo the opportunity to communicate the actual expected value in your test body. Therefore, our recommendation is to use these features sparingly at your own discretion.\n\n\n## Submit changes\nTo submit changes as a [pull request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/), first you have to fork the repository. Then you have to create a branch and commit your changes to it. Finally, you can submit a pull request from that branch against the master branch of the canonical repository. The master branch should always be stable, meaning it should be in a functional state. If there is a feature that requires multiple PRs to complete and might put the master branch in an unstable state, you should commit to a feature branch instead.\n\nYour code should follow our [coding guideline](#coding-guideline). Your commit messages also need to follow our [guideline](#commit-guideline). All changes must have some unit test coverage and should never lower the overall coverage of the project. Every PR gets verified automatically on Travis. Before they can be merged to the master branch, they must be reviewed and approved by one of the project maintainers. You can ask people to review your PR by requesting individual members or pinging the entire team using `@bigcommerce/checkout` handle.\n\n### Coding guideline\nWe have enabled a set of [linting rules](https://github.com/bigcommerce/tslint-config) to help us maintain the stylistic consistency of our code. Visit [TSLint](https://palantir.github.io/tslint/rules/) for more information about the enabled rules. It is important to enforce these rules automatically because contributions from different people might vary in style. Nonetheless, there might be a few issues that cannot be caught programmatically because there are no existing rules. Usually these errors will be caught during the code review process. We usually use :tropical_drink: or :beer: in those comments, to indicate that they are stylistic issues only.\n\n### Commit guideline\nYou should keep your commit messages clear and concise. More importantly, the commits themselves should have a clear focus. Otherwise, it can be difficult for us to examine the commit history if we ever need to investigate for the source of a bug.\n\nWe follow a specific format when writing commit messages. The format has annotations that allow us to generate the changelog automatically. i.e.:\n\n```\nfix(order): JIRA-1234 Fix order submission method not sending required payment details \n```\n\nSince community contributors do not have access to JIRA, they can use a Github issue number instead. For more information about the format, visit [@bigcommerce/validate-commits](https://github.com/bigcommerce/validate-commits). We recommend you to double check your commit messages before submitting your PR, making sure they do not have any mistakes.\n\n### Developer commands\nWe have a list of commands that contributors can use while developing.\n* `npm run test` - Run all the tests at once.\n* `npm run test:watch` - Run the tests in watch mode. Press `w` for more options.\n* `npm run test:coverage` - Run the tests and generate a coverage report.\n* `npm run lint` - Lint the source code.\n* `npm run docs` - Updates the documentation.\n* `npm run release` - Release a new version to npm. This command does the following: it runs all the tests, compiles the code, creates a new tag, updates the changelog and documentation, and finally pushes the latest changes to Github and publishes the bundle to NPM.\n\n### System requirement\nPlease ensure you have the following software installed.\n* NodeJS `>=6`\n* NPM `>=6`\n\n\n## Submit issues\nCreate a Github issue if you find a bug in the source code or if you want to request a new feature. The maintainers of the project will review and triage the issue accordingly. If we decide to take on a task, we will raise a corresponding JIRA ticket to help us track the issue internally.\n\nPlease do not raise a Github issue if you just need general support or advice on how to use the library. Instead, submit your questions on StackOverflow. We actively watch that space and will answer your questions when possible.\n\n\n## Release version\nEverytime a PR is merged to the master branch, CircleCI will trigger a build automatically. However, it won't create a new Git release until it is approved by a person with write access to the repository. If you have write access, you can approve a release job by going to [CircleCI](https://circleci.com/gh/bigcommerce/workflows/checkout-sdk-js/tree/master) and look for the job you wish to approve. You can also navigate directly to the release job by clicking on the yellow dot next to the merged commit.\n\nWe follow semantic versioning convention when making releases. This means breaking changes can only be introduced in a major version. When we release a new version, we use a tool to automatically determine the version number based on the commit messages made since the last release. This way we can minimise the likelihood of making a mistake. If there is a special reason to override the version, you can do so by running the release command manually and using the `--release-as` flag to specify the version you want.\n"
  },
  {
    "path": "FAQS.md",
    "content": "# FAQs\n- [Can I use both the Checkout SDK and BigCommerce APIs?](#can-i-use-both-the-checkout-sdk-and-bigcommerce-apis-)\n- [Does the order of the actions matter?](#does-the-order-of-the-actions-matter-)\n\n## Can I use both the Checkout SDK and BigCommerce APIs?\nConcurrent requests can have unexpected results due to possible race conditions. When multiple actions are triggered by the Checkout SDK, they are enqueued so they run sequentially. If you are planning to interact with other BigCommerce APIs directly, make sure they are not concurrent.\n\n## Does the order of the actions matter?\nThe order of the actions can have side effects. For example if the shipping method has already been selected, a few actions can clear out the selection, like modifying the cart or applying certain coupon codes.\n"
  },
  {
    "path": "LICENSE.md",
    "content": "(The MIT License)\nCopyright (C) 2018-Present BigCommerce Inc.\nAll rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# @bigcommerce/checkout-sdk\n\nCheckout JS SDK provides you with the tools you need to build your own checkout solution for a BigCommerce store.\n\nThe SDK has a convenient application interface for starting and completing a checkout flow. Behind the interface, it handles all the necessary interactions with our Storefront APIs and other payment SDKs. So you can focus on creating a checkout experience that is unique to your business.\n\n\n## Table of contents <!-- omit in toc -->\n- [Features](#features)\n- [Getting started](#getting-started)\n- [Installation](#installation)\n    - [Using NPM package](#using-npm-package)\n    - [Using CDN URL](#using-cdn-url)\n- [Requirements](#requirements)\n    - [Browser support](#browser-support)\n    - [Framework](#framework)\n    - [CORS](#cors)\n- [Usage](#usage)\n    - [Initialize instance](#initialize-instance)\n        - [Load checkout](#load-checkout)\n    - [Sign in customer](#sign-in-customer)\n        - [Passwordless Sign-in](#passwordless-sign-in)\n    - [Continue as guest](#continue-as-guest)\n    - [Set shipping details](#set-shipping-details)\n        - [Set shipping address](#set-shipping-address)\n        - [Set shipping option](#set-shipping-option)\n    - [Set billing details](#set-billing-details)\n    - [Apply coupon or gift certificate](#apply-coupon-or-gift-certificate)\n    - [Execute spam protection check](#execute-spam-protection-check)\n    - [Submit payment and order](#submit-payment-and-order)\n        - [Load payment methods](#load-payment-methods)\n        - [Initialize payment method](#initialize-payment-method)\n        - [Submit order](#submit-order)\n        - [Finalize order](#finalize-order)\n    - [Load order](#load-order)\n    - [Subscribe to changes](#subscribe-to-changes)\n    - [Cancel requests](#cancel-requests)\n- [FAQs](FAQS.md)\n- [API reference](#api-reference)\n- [See also](#see-also)\n- [Notes](#notes)\n- [Contribution](#contribution)\n- [License](#license)\n\n\n## Features\n\nThe [Checkout JS SDK](https://developer.bigcommerce.com/api-docs/cart-and-checkout/checkout-sdk) is a client-side JavaScript library for our [Storefront Checkout API](https://developer.bigcommerce.com/api-reference/cart-checkout/storefront-checkout-api). It provides all the methods that are required to complete a checkout process, for example:\n* Sign in a customer and begin the checkout process\n* Set shipping, billing and other required information\n* Pay for the order and complete the checkout process\n\nThe library also provides integrations with all the payment methods supported by [Optimized One Page Checkout](https://support.bigcommerce.com/articles/Public/Optimized-Single-Page-Checkout), such as:\n* PayPal Express\n* Braintree\n* Square\n* Amazon\n* Klarna\n* AfterPay\n\nUsing this library in conjunction with your favorite UI framework, it is possible to build a bespoke checkout UI for a store, that can be augmented with additional features. With Bigcommerce's Open Checkout, we provide **Checkout JS** as our [reference implementation](https://github.com/bigcommerce/checkout-js) of a checkout written in React to get you started.\n\n\n## Getting started\n\nThe Checkout JS SDK is the easiest way to build a bespoke checkout into your store’s theme. We have created the following tutorials to help you get started.\n* [Open Checkout Quick Start](https://developer.bigcommerce.com/stencil-docs/customizing-checkout/open-checkout-quick-start) - In this quick start tutorial, we’ll configure our development environment and make a code change to a fork of BigCommerce’s Open Checkout.\n* [Installing Custom Checkouts](https://developer.bigcommerce.com/stencil-docs/customizing-checkout/installing-custom-checkouts) - This article will outline how to package a custom checkout file, and install a custom checkout via the control panel.\n\n\n## Installation\n\n### Using NPM package\n\nYou can install this library using [npm](https://www.npmjs.com/get-npm).\n\n```sh\nnpm install --save @bigcommerce/checkout-sdk\n```\n\n### Using CDN URL\n\nYou can also use this library by referencing a CDN URL.\n\n```\nhttps://checkout-sdk.bigcommerce.com/v1/loader.js\n```\n\nThe main benefit of using the script URL above is that your application can automatically receive backward compatible updates and bug fixes from us, without having to manually perform an upgrade.\n\nOnce the above script is loaded, `checkoutKitLoader` instance will be available in the `window` and you can use it to load the module that you need for your application. i.e.:\n\n```js\nconst module = await checkoutKitLoader.load('checkout-sdk');\nconst service = module.createCheckoutService();\n```\n\nCurrently, there are three modules available for public use:\n* **checkout-sdk**: This is the main module that contains all the public exports of the package.\n* **checkout-button**: This sub-module can be used to initialize checkout buttons in the storefront once a cart is created (i.e.: cart page).\n* **embedded-checkout**: This sub-module can be used to embed our Optimized One-Page Checkout in non-native storefronts (i.e.: Wordpress).\n\nPlease refer to the usage guide below for more information on each of them.\n\n\n## Requirements\n\n### Browser support\n\nWe release the library in ES5 so you don't have to do additional transpilation in order to use it. However, you do require the [Promise polyfill](https://github.com/stefanpenner/es6-promise) if you need to support older browsers, such as IE11.\n\nOn the other hand, the CDN version already contains the necessary polyfill for it to work in IE11.\n\n### Framework\n\nThe library is framework agnostic. In other words, you can use it with any UI framework or library you want.\n\n### CORS\n\nAs our Storefront Web APIs currently don't support CORS, you will not be able to use the library outside of a BigCommerce store.\n\n\n## Usage\n\nBelow is a guide on how to use this library.\n\n\n### Initialize instance\n\nFirst, you have to create a `CheckoutService` instance.\n\n```js\nimport { createCheckoutService } from '@bigcommerce/checkout-sdk';\n\nconst service = createCheckoutService();\n```\n\n#### Load checkout\n\nOnce you have the instance, you should load the current checkout and present the information to the customer.\n\n```js\nconst checkoutId = '0cfd6c06-57c3-4e29-8d7a-de55cc8a9052';\nconst state = await service.loadCheckout(checkoutId);\n\nconsole.log(state.data.getCheckout());\n```\n\nThe checkout object contains various information about the checkout process, such as the cart, the grand total etc... Once the data is loaded, you can retrieve it by calling the getters provided by the state object.\n\n```js\nconsole.log(state.data.getCart());\nconsole.log(state.data.getBillingAddress());\nconsole.log(state.data.getShippingAddress());\n```\n\nIn addition, you can also access the store's checkout configuration. The configuration object contains information about various settings related to checkout, such as the default currency of the store etc...\n\n```js\nconsole.log(state.data.getConfig());\n```\n\n### Sign in customer\n\nBefore you can collect other checkout information from the customer, you should first ask them to sign in. Once they are signed in, the checkout state will be populated with their personal details, such as their addresses.\n\n```js\nconst state = await service.signInCustomer({ email: 'foo@bar.com', password: 'password123' });\n\nconsole.log(state.data.getCustomer());\n```\n\nAlternatively, you can ask the customer to continue as a guest. Note that in this scenario, the email is stored\nas part of the billing address, but is also accessible via the cart object.\n\n```js\nconst state = await service.continueAsGuest({ email: 'foo@bar.com' });\n\nconsole.log(state.data.getCart().email);\nconsole.log(state.data.getBillingAddress().email);\n```\n\n#### Passwordless Sign-in\nCustomers could sign in using a single-use link sent to their email address. Once they click on the link, they will be redirected back to the store as a signed-in user.\n\nLearn more about it at [CheckoutService#sendSignInEmail](docs/classes/CheckoutService.md#sendSignInEmail)\n\n### Continue as guest\n\nIf your checkout settings allow it, your customers could continue the checkout as guests (without signing in).\n\n```js\nconst state = await service.continueAsGuest({ email: 'foo@bar.com' });\n\nconsole.log(state.data.getBillingAddress());\nconsole.log(state.data.getCustomer());\n```\n\nLearn more about it at [CheckoutService#continueAsGuest](docs/classes/CheckoutService.md#continueasguest)\n\n### Set shipping details\n\n#### Set shipping address\n\nTo set a shipping destination for the checkout, you should ask the customer to provide an address. To do that, you need to render a set of form fields for collecting their details. The set of fields also includes all the custom fields configured by the merchant.\n\n```js\nconst fields = state.data.getShippingAddressFields();\n\nfields.forEach(field => {\n    console.log(field);\n});\n```\n\nTo set the shipping address, you can collate all the address fields and construct a request payload.\n\n```js\nconst address = {\n    firstName: 'Test',\n    lastName: 'Tester',\n    address1: '12345 Testing Way',\n    city: 'Some City',\n    stateOrProvinceCode: 'CA',\n    postalCode: '95555',\n    countryCode: 'US',\n    phone: '555-555-5555',\n    email: 'test.tester@test.com'\n};\n\nconst state = await service.updateShippingAddress(address);\n\nconsole.log(state.data.getShippingAddress());\nconsole.log(state.data.getShippingOptions());\n```\n\n#### Set shipping option\n\nOnce the address is provided, you can get a list of shipping options available for the address and the cost for each option.\n\nThen, you can ask the customer to select a shipping option from the list.\n\n```js\nconst address = state.data.getShippingAddress();\nconst options = state.data.getShippingOptions();\nconst state = await service.selectShippingOption(options[address.id].id);\n\nconsole.log(state.data.getSelectedShippingOption());\n```\n\n### Set billing details\n\nIn order to complete the checkout process, you also need to collect a billing address from the customer.\n\n```js\nconst state = await service.updateBillingAddress(address);\n\nconsole.log(state.data.getBillingAddress());\n```\n\n### Apply coupon or gift certificate\n\nYou may also want to accept any coupon code or gift certificate provided by the customer.\n\n```js\nconst state = await service.applyCoupon('COUPON');\n\nconsole.log(state.data.getOrder().coupon);\n```\n\n```js\nconst state = await service.applyGiftCertificate('GIFT');\n\nconsole.log(state.data.getOrder().giftCertificate);\n```\n\nYou can also allow the customer to remove any coupon code or gift certificate previously applied.\n\n```js\nawait service.removeCoupon('COUPON');\nawait service.removeGiftCertificate('GIFT');\n```\n\n### Execute spam protection check\n\nYou can also enable bot protection to prevent bots and other types of automated abuse from creating orders. Note that enabling this feature increases checkout friction, which may affect conversions. As such, we recommend leaving this feature out if your store is not encountering bots.\n\n```js\nawait service.executeSpamCheck();\n```\n\nLearn more about it at [CheckoutService#executeSpamCheck](docs/classes/CheckoutService.md#executespamcheck).\n\n### Submit payment and order\n\n#### Load payment methods\n\nBefore you can place the order, you need to collect payment details from the customer. In order to do that, you must first load and present a list of available payment methods to the customer.\n\n```js\nconst state = await service.loadPaymentMethods();\n\nconsole.log(state.data.getPaymentMethods());\n```\n\n#### Initialize payment method\n\nAfter that, you should initialize the payment method so they are ready to accept payment details.\n\n```js\nawait service.initializePayment({ methodId: 'braintree' });\n```\n\nSome payment methods require you to provide additional initialization options. For example, Amazon requires a container ID in order to initialize their payment widget. Otherwise, they will not work properly.\n\n```js\nawait service.initializePayment({\n    methodId: 'amazon',\n    amazon: {\n        container: 'walletWidget',\n    },\n});\n```\n\n#### Submit order\n\nAnd then, you can ask the customer to provide payment details required by their chosen payment method. If the method is executed successfully, you will create an order and thereby complete the checkout process.\n\nWe may require human verification to be completed before payment can be processed, which will be handled during this step.\n\n```js\nconst payment = {\n    methodId: 'braintree',\n    paymentData: {\n        ccExpiry: { month: 10, year: 20 },\n        ccName: 'BigCommerce',\n        ccNumber: '4111111111111111',\n        ccType: 'visa',\n        ccCvv: 123,\n    },\n};\n\nconst state = await service.submitOrder({ payment });\n\nconsole.log(state.getOrder());\n\nwindow.location.assign('/order-confirmation');\n```\n\nIf the submission is successful, you should redirect the customer to the order confirmation page.\n\n#### Finalize order\n\nAlso, for some payment methods, the customer may be asked to enter their payment details on an external website.\nFor these methods, you must finalize the order when the customer is redirected back to the checkout page in order to\ncomplete the checkout flow. This should be done in the background before you present any checkout information to the customer.\n\n```js\nawait service.loadCheckout();\n\ntry {\n    await service.finalizeOrderIfNeeded();\n\n    window.location.assign('/order-confirmation');\n} catch (error) {\n    if (error.type !== 'order_finalization_not_required') {\n        throw error;\n    }\n}\n\n// Render the checkout view\n```\n\nSimilarly, if the order finalization is successful, you should redirect the customer to the order confirmation page.\n\n### Load order\n\nOnce the order is created, you can make a call to retrieve it. This should be done on the order confirmation page so that you can present the final order to the customer.\n\n```js\nconst orderId = 123;\nconst state = await service.loadOrder(orderId);\n\nconsole.log(state.data.getOrder());\n```\n\n### Subscribe to changes\n\nYour UI should react to changes to the checkout state. When there is a change, you should present the latest information to the customer. You can do that by subscribing to the checkout state.\n\nThe subscriber gets triggered every time there is a change in the state. If the change affects your view, you should re-render it in order to reflect the latest update. The subscriber provides a state object which you can use to get specific checkout information. It also provides meta information such as loading statuses, error details etc...\n\n```js\nservice.subscribe(state => {\n    // Return the current checkout\n    console.log(state.data.getCheckout());\n\n    // Return an error object if unable to load checkout\n    console.log(state.errors.getLoadCheckoutError());\n\n    // Return `true` if in the process of loading checkout\n    console.log(state.statuses.isLoadingCheckout());\n});\n```\n\nIf you are only interested in certain parts of the state, you can filter out irrelevant changes by providing a filter function to the subscriber.\n\n```js\nconst filter = state => state.data.getCart();\n\nservice.subscribe(state => {\n    console.log(state.data.getCart())\n}, filter);\n```\n\nYou can retrieve the same state object outside of a subscriber if there is a need for it.\n\n```js\nconst state = service.getState();\n\nconsole.log(state);\n```\n\n### Cancel requests\n\nIf you need to cancel a request before it is complete, you can provide a `Timeout` object when making the request. An example use case might be to implement a UI that updates the shipping address whenever there is a change - so you want to abort any pending requests and only take the latest one.\n\n```js\nimport { createTimeout } from '@bigcommerce/checkout-js-sdk';\n\nconst address = { countryCode: 'US' };\nconst timeout = createTimeout();\n\nservice.updateShippingAddress(address, { timeout });\ntimeout.complete(); // Aborts the update\n```\n\n\n## API reference\n\nWe provide an extensive [API reference](docs/README.md).\n\nThe functions provided by the SDK are:\n* [createCheckoutService](docs/README.md#createcheckoutservice)\n* [createCheckoutButtonInitializer](docs/README.md#createcheckoutbuttoninitializer)\n* [createEmbeddedCheckoutMessenger](docs/README.md#createembeddedcheckoutmessenger)\n* [createLanguageService](docs/README.md#createlanguageservice)\n* [createCurrencyService](docs/README.md#createcurrencyservice)\n* [createStepTracker](docs/README.md#createsteptracker)\n* [embedCheckout](docs/README.md#embedcheckout)\n\n\n## See also\n\n* [Checkout JS](https://github.com/bigcommerce/checkout-js) - This is our reference implementation of a checkout built using the Checkout JS SDK.\n* [Storefront APIs](https://developer.bigcommerce.com/docs/storefront/cart-checkout/guide/rest-storefront) - The documentation for Storefront Checkout & Cart Web APIs.\n\n\n## Notes\n\n* If you are using this library on the checkout page of a Stencil theme, you must have [Optimized One Page Checkout](https://support.bigcommerce.com/articles/Public/Optimized-Single-Page-Checkout/) enabled. Otherwise, you will not be able to preview your changes.\n* You should only use this library on a HTTPS page unless you are developing locally.\n* In order to keep up to date on the latest changes, please subscribe to this repository by clicking on the [watch](https://github.com/bigcommerce/checkout-sdk-js/subscription) button.\n\n\n## Contribution\n\nWe actively maintain and add new features to the library in order to support our official checkout (Optimized Checkout). But we also accept contributions from the community.\n\nIf you want to contribute, please refer to the [contribution guide](CONTRIBUTING.md).\n\n\n## License\n\nMIT\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Reporting security issues\nBigCommerce is dedicated to the responsible disclosure of security vulnerabilities.\nIf you have found a security vulnerability in an active open-source repository created and owned by BigCommerce, please report it to our [public bug bounty program](https://bugcrowd.com/bigcommerce). If you would prefer to submit via email, please send your report to [security@bigcommerce.com](mailto:security@bigcommerce.com).\n\nWe ask that you **do not** open a public GitHub issue to report security concerns.\n\n_Note: Only submissions to our bounty program on BugCrowd will be eligible for bounties. Bounty eligibility and amounts are determined according to the program guidelines._\n\n_Note: Bugs in 3rd-party modules and/or dependencies should be reported to the owners/maintainers or those modules and/or dependencies, BigCommerce has no control or authority over third party content._\n\nThank you in advance for collaborating with us to help protect us and our customers.\n"
  },
  {
    "path": "commit-validation.json",
    "content": "{\n    \"scopes\": [\n        \"billing\",\n        \"cart\",\n        \"checkout\",\n        \"checkout-button\",\n        \"common\",\n        \"embedded-checkout\",\n        \"forms\",\n        \"order\",\n        \"payment\",\n        \"shipping\",\n        \"shopper\",\n        \"spam-protection\",\n        \"extension\"\n    ]\n}\n"
  },
  {
    "path": "dist/cjs/checkout-button.js",
    "content": "/*! For license information please see checkout-button.js.LICENSE.txt */\n(()=>{var e={3825(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=u(n(4475)),i=u(n(8015)),o=u(n(8615)),a=u(n(9504)),s=u(n(4351)),c=u(n(3072));function u(e){return e&&e.__esModule?e:{default:e}}function d(e){return d=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},d(e)}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,p(r.key),r)}}function p(e){var t=function(e){if(\"object\"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=d(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==d(t)?t:t+\"\"}t.default=function(){function e(t,n,r,i,o){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.config=t,this.paymentSubmitter=n,this.offsitePaymentInitializer=r,this.clientTokenGenerator=i,this.storeRequestSender=o}return t=e,u=[{key:\"create\",value:function(t){var n=(0,r.default)({},c.default,t),u=i.default.create(n);return new e(n,o.default.create(n),u,a.default.create(n),s.default.create(n))}}],(n=[{key:\"setHost\",value:function(e){this.config.host=e}},{key:\"initializeOffsitePayment\",value:function(e,t,n){this.offsitePaymentInitializer.initializeOffsitePayment(e,t,n)}},{key:\"submitPayment\",value:function(e,t){this.paymentSubmitter.submitPayment(e,t)}},{key:\"generateClientToken\",value:function(e,t){this.clientTokenGenerator.generateClientToken(e,t)}},{key:\"loadInstruments\",value:function(e,t){this.storeRequestSender.loadInstruments(e,t)}},{key:\"loadInstrumentsWithAddress\",value:function(e,t){this.storeRequestSender.loadInstrumentsWithAddress(e,t)}},{key:\"deleteShopperInstrument\",value:function(e,t){this.storeRequestSender.deleteShopperInstrument(e,t)}}])&&l(t.prototype,n),u&&l(t,u),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,u}()},3072(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0,t.default={host:\"\"}},9554(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.APPLICATION_JSON=void 0,t.APPLICATION_JSON=\"application/json\"},7257(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(9554),i=n(9726),o={headers:{Accept:r.APPLICATION_JSON,\"Content-Type\":r.APPLICATION_JSON},method:i.GET};t.default=o},9726(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.POST=t.GET=t.DELETE=void 0,t.GET=\"GET\",t.POST=\"POST\",t.DELETE=\"DELETE\"},9731(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r,i=(r=n(4475))&&r.__esModule?r:{default:r},o=n(9554),a=n(5916);function s(e){return s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s(e)}function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,u(r.key),r)}}function u(e){var t=function(e){if(\"object\"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=s(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==s(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return function(e,t,n){return t&&c(e.prototype,t),n&&c(e,n),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(e,[{key:\"toRequest\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.APPLICATION_JSON;return e&&(0,a.includes)(t,o.APPLICATION_JSON)?JSON.stringify(e):e}},{key:\"fromResponse\",value:function(e){var t=this.parseResponseHeaders(e.getAllResponseHeaders()),n=e.getResponseHeader(\"Content-Type\"),r=e.status,i=e.statusText,s=\"response\"in e?e.response:e.responseText;return s&&(0,a.includes)(n,o.APPLICATION_JSON)&&(s=JSON.parse(s)),{data:s,headers:t,status:r,statusText:i}}},{key:\"parseResponseHeaders\",value:function(e){return(e?e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(e,t){var n=t.split(\":\"),r=(n.shift()||\"\").trim();return r?(0,i.default)({},e,function(e,t,n){return(t=u(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r.toLowerCase(),n.join(\":\").trim())):e},{})}}],[{key:\"create\",value:function(){return new e}}])}()},5101(e,t){\"use strict\";function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,i(r.key),r)}}function i(e){var t=function(e){if(\"object\"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=n(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==n(t)?t:t+\"\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0,t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"createRequest\",value:function(e,t,n){var r=new XMLHttpRequest;return r.onerror=function(){n&&n(new Error(r.statusText))},r.onload=function(){n&&n()},r.open(t.method,e,!0),this.setOptions(r,t),r}},{key:\"setHeaders\",value:function(e,t){Object.keys(t).forEach(function(n){var r=t[n];e.setRequestHeader(n,r)})}},{key:\"setOptions\",value:function(e,t){e.withCredentials=t.withCredentials,t.headers&&this.setHeaders(e,t.headers)}}])&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},7542(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=u(n(3592)),i=u(n(4475)),o=n(9726),a=u(n(7257)),s=u(n(9731)),c=u(n(5101));function u(e){return e&&e.__esModule?e:{default:e}}function d(e){return d=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},d(e)}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,p(r.key),r)}}function p(e){var t=function(e){if(\"object\"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=d(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==d(t)?t:t+\"\"}t.default=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.requestFactory=t,this.payloadTransformer=n}return t=e,u=[{key:\"create\",value:function(){return new e(c.default.create(),s.default.create())}}],(n=[{key:\"sendRequest\",value:function(e,t,n,i){var o=this,s=(0,r.default)({},a.default,n),c=this.requestFactory.createRequest(e,s,function(e){var t=o.payloadTransformer.fromResponse(c);i&&(!e&&o.isSuccessfulRequest(c)?i(null,t):i(t))}),u=this.payloadTransformer.toRequest(t,s.headers[\"Content-Type\"]);c.send(u)}},{key:\"postRequest\",value:function(e,t,n,r){var a=(0,i.default)({},n,{method:o.POST});this.sendRequest(e,t,a,r)}},{key:\"isSuccessfulRequest\",value:function(e){return e.status>=200&&e.status<300}}])&&l(t.prototype,n),u&&l(t,u),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,u}()},6207(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){return!(!Array.isArray(e)&&\"string\"!=typeof e)&&-1!==e.indexOf(t)}},5916(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),Object.defineProperty(t,\"includes\",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,\"isNil\",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,\"isObject\",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,\"omitEmptyStringAndNil\",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,\"omitNil\",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,\"omitProperty\",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,\"toNumber\",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,\"toSnakeCase\",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,\"toString\",{enumerable:!0,get:function(){return l.default}});var r=p(n(6207)),i=p(n(848)),o=p(n(216)),a=p(n(1144)),s=p(n(2433)),c=p(n(2265)),u=p(n(3897)),d=p(n(987)),l=p(n(6645));function p(e){return e&&e.__esModule?e:{default:e}}},7914(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return\"\"===e}},223(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return(0,r.default)(e)||(0,i.default)(e)};var r=o(n(7914)),i=o(n(848));function o(e){return e&&e.__esModule?e:{default:e}}},848(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return null==e}},216(e,t){\"use strict\";function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return null!==e&&\"object\"===n(e)&&!Array.isArray(e)}},1144(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return(0,i.default)(e,r.default)};var r=o(n(223)),i=o(n(2265));function o(e){return e&&e.__esModule?e:{default:e}}},2433(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return(0,i.default)(e,r.default)};var r=o(n(848)),i=o(n(2265));function o(e){return e&&e.__esModule?e:{default:e}}},2265(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){return(0,i.default)(e)?Object.keys(e).reduce(function(n,r){var i=e[r];return t(i)||(n[r]=i),n},{}):e};var r,i=(r=n(216))&&r.__esModule?r:{default:r}},3897(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return parseFloat(e)||0}},987(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return\"string\"!=typeof e?e:e.replace(/([a-z\\d])([A-Z]+)/g,\"$1_$2\").replace(/[-\\s]+/g,\"_\").toLowerCase()}},6645(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return\"string\"==typeof e?e:\"number\"!=typeof e||Number.isNaN(e)?\"\":e.toString()}},2742(e,t,n){\"use strict\";t.U=function(e){return i.default.create(e)};var r,i=(r=n(3825))&&r.__esModule?r:{default:r}},9504(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=a(n(7542)),i=a(n(3373)),o=a(n(2815));function a(e){return e&&e.__esModule?e:{default:e}}function s(e){return s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s(e)}function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,u(r.key),r)}}function u(e){var t=function(e){if(\"object\"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=s(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==s(t)?t:t+\"\"}t.default=function(){function e(t,n,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.urlHelper=t,this.requestSender=n,this.clientTokenMapper=r}return t=e,a=[{key:\"create\",value:function(t){return new e(o.default.create(t),r.default.create(),i.default.create())}}],(n=[{key:\"generateClientToken\",value:function(e,t){var n=this.urlHelper.getGenerateClientTokenUrl(),r=this.clientTokenMapper.mapToClientToken(e);this.requestSender.postRequest(n,r,{},t)}}])&&c(t.prototype,n),a&&c(t,a),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,a}()},8015(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(8686),i=n(2157),o=s(n(2216)),a=s(n(2815));function s(e){return e&&e.__esModule?e:{default:e}}function c(e){return c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c(e)}function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,d(r.key),r)}}function d(e){var t=function(e){if(\"object\"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=c(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==c(t)?t:t+\"\"}t.default=function(){function e(t,n,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.urlHelper=t,this.formPoster=n,this.payloadMapper=r}return t=e,s=[{key:\"create\",value:function(t){return new e(a.default.create(t),(0,r.createFormPoster)(),o.default.create())}}],(n=[{key:\"initializeOffsitePayment\",value:function(e,t,n){var r=e.paymentMethod,o=void 0===r?{}:r;if(o.type!==i.HOSTED)throw new Error(\"\".concat(o.type,\" is not supported.\"));var a=this.payloadMapper.mapToPayload(e),s=this.urlHelper.getOffsitePaymentUrl();this.formPoster.postForm(s,a,t,n)}}])&&u(t.prototype,n),s&&u(t,s),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,s}()},7034(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t,n){return(t=s(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToBillingAddress\",value:function(e){return this.mapToAddress(e,\"billingAddress\")}},{key:\"mapToShippingAddress\",value:function(e){return this.mapToAddress(e,\"shippingAddress\")}},{key:\"mapToAddress\",value:function(e,t){var n,i=e[t]||{},a=(0,r.toSnakeCase)(t);return(0,r.omitNil)((o(o(o(o(o(o(o(o(o(o(n={},\"\".concat(a,\"_city\"),i.city),\"\".concat(a,\"_company\"),i.company),\"\".concat(a,\"_country_code\"),i.countryCode),\"\".concat(a,\"_country\"),i.country),\"\".concat(a,\"_first_name\"),i.firstName),\"\".concat(a,\"_last_name\"),i.lastName),\"\".concat(a,\"_phone\"),i.phone),\"\".concat(a,\"_state_code\"),i.provinceCode),\"\".concat(a,\"_state\"),i.province),\"\".concat(a,\"_street_1\"),i.addressLine1),o(o(n,\"\".concat(a,\"_street_2\"),i.addressLine2),\"\".concat(a,\"_zip\"),i.postCode)))}}])&&a(t.prototype,n),i&&a(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},5452(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToCustomer\",value:function(e){var t=e.customer,n=void 0===t?{}:t,i=e.quoteMeta,o=void 0===i?{}:i,a=e.store,s=void 0===a?{}:a;return(0,r.omitNil)({customer_browser_info:navigator.userAgent,customer_email:n.email,customer_first_name:n.firstName,customer_geo_ip_country_code:o.request?o.request.geoCountryCode:null,customer_id:n.customerId,customer_last_name:n.lastName,customer_locale:s.storeLanguage,customer_name:n.name,customer_phone:n.phoneNumber,customer_reference:n.email})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},7403(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToMeta\",value:function(e){var t=e.source;return(0,r.omitNil)({meta_referrer:document.referrer,meta_source:t,meta_user_agent:navigator.userAgent})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},2216(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=d(n(4475)),i=n(5916),o=d(n(7034)),a=d(n(5452)),s=d(n(7403)),c=d(n(187)),u=d(n(9229));function d(e){return e&&e.__esModule?e:{default:e}}function l(e){return l=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},l(e)}function p(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,h(r.key),r)}}function h(e){var t=function(e){if(\"object\"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=l(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==l(t)?t:t+\"\"}t.default=function(){function e(t,n,r,i,o){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.addressMapper=t,this.customerMapper=n,this.metaMapper=r,this.paymentMethodIdMapper=i,this.storeMapper=o}return t=e,d=[{key:\"create\",value:function(){return new e(o.default.create(),a.default.create(),s.default.create(),c.default.create(),u.default.create())}}],(n=[{key:\"mapToPayload\",value:function(e){var t=e.authToken,n=e.order,o=void 0===n?{}:n,a=e.payment,s=void 0===a?{}:a,c=e.paymentMethod,u=void 0===c?{}:c,d=(0,r.default)({amount:o.grandTotal?o.grandTotal.integerAmount:null,tax:o.taxTotal?o.taxTotal.integerAmount:null,bc_auth_token:t,currency:o.currency,gateway:this.paymentMethodIdMapper.mapToId(u),notify_url:o.callbackUrl,order_id:o.orderId?(0,i.toString)(o.orderId):null,page_title:document.title?document.title:null,payment_method_id:u.id,reference_id:o.orderId?(0,i.toString)(o.orderId):null,return_url:u.returnUrl||(o.payment?o.payment.returnUrl:null)},this.addressMapper.mapToBillingAddress(e),this.customerMapper.mapToCustomer(e),this.metaMapper.mapToMeta(e),this.addressMapper.mapToShippingAddress(e),this.storeMapper.mapToStore(e)),l=s.formattedPayload,p=void 0===l?{}:l;return(0,r.default)(d,p),(0,i.omitNil)(d)}}])&&p(t.prototype,n),d&&p(t,d),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,d}()},9229(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToStore\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,r.omitNil)({store_hash:n.storeHash,store_id:n.storeId?(0,r.toString)(n.storeId):null})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},4432(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PAYPAL_COMMERCE_VENMO=t.PAYPAL_COMMERCE_CREDIT_CARDS=t.PAYPAL_COMMERCE_CREDIT=t.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=t.PAYPAL_COMMERCE_ACCELERATED_CHECKOUT=t.PAYPAL_COMMERCE=t.BRAINTREE_VISACHECKOUT=t.BRAINTREE_PAYPAL_CREDIT=t.BRAINTREE_PAYPAL=t.BRAINTREE_LOCAL_METHODS=t.BRAINTREE_GOOGLEPAY=t.BRAINTREE_ACH=t.BRAINTREE_ACCELERATED_CHECKOUT=t.BRAINTREE=t.BIGCOMMERCE_PAYMENTS_VENMO=t.BIGCOMMERCE_PAYMENTS_PAYLATER=t.BIGCOMMERCE_PAYMENTS_FASTLANE=t.BIGCOMMERCE_PAYMENTS_CREDIT_CARDS=t.BIGCOMMERCE_PAYMENTS_APMS=t.BIGCOMMERCE_PAYMENTS=void 0,t.BIGCOMMERCE_PAYMENTS=\"bigcommerce_payments\",t.BIGCOMMERCE_PAYMENTS_PAYLATER=\"bigcommerce_payments_paylater\",t.BIGCOMMERCE_PAYMENTS_CREDIT_CARDS=\"bigcommerce_payments_creditcards\",t.BIGCOMMERCE_PAYMENTS_FASTLANE=\"bigcommerce_payments_fastlane\",t.BIGCOMMERCE_PAYMENTS_APMS=\"bigcommerce_payments_apms\",t.BIGCOMMERCE_PAYMENTS_VENMO=\"bigcommerce_payments_venmo\",t.BRAINTREE=\"braintree\",t.BRAINTREE_PAYPAL=\"braintreepaypal\",t.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",t.BRAINTREE_VISACHECKOUT=\"braintreevisacheckout\",t.BRAINTREE_LOCAL_METHODS=\"braintreelocalmethods\",t.BRAINTREE_GOOGLEPAY=\"googlepaybraintree\",t.BRAINTREE_ACH=\"braintreeach\",t.BRAINTREE_ACCELERATED_CHECKOUT=\"braintreeacceleratedcheckout\",t.PAYPAL_COMMERCE=\"paypalcommerce\",t.PAYPAL_COMMERCE_ACCELERATED_CHECKOUT=\"paypalcommerceacceleratedcheckout\",t.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=\"paypalcommercealternativemethods\",t.PAYPAL_COMMERCE_CREDIT=\"paypalcommercecredit\",t.PAYPAL_COMMERCE_CREDIT_CARDS=\"paypalcommercecreditcards\",t.PAYPAL_COMMERCE_VENMO=\"paypalcommercevenmo\"},187(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(3491),i=n(4432);function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var t=function(e){if(\"object\"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=o(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==o(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,o=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToId\",value:function(e){var t=e.id;return e.method===r.MULTI_OPTION&&(t=e.gateway),function(e){switch(e){case i.BRAINTREE_PAYPAL:case i.BRAINTREE_PAYPAL_CREDIT:case i.BRAINTREE_VISACHECKOUT:case i.BRAINTREE_GOOGLEPAY:case i.BRAINTREE_ACH:case i.BRAINTREE_LOCAL_METHODS:case i.BRAINTREE_ACCELERATED_CHECKOUT:return!0;default:return!1}}(t)?i.BRAINTREE:function(e){switch(e){case i.PAYPAL_COMMERCE_CREDIT:case i.PAYPAL_COMMERCE_CREDIT_CARDS:case i.PAYPAL_COMMERCE_ACCELERATED_CHECKOUT:case i.PAYPAL_COMMERCE_ALTERNATIVE_METHODS:case i.PAYPAL_COMMERCE_VENMO:return!0;default:return!1}}(t)?i.PAYPAL_COMMERCE:function(e){switch(e){case i.BIGCOMMERCE_PAYMENTS:case i.BIGCOMMERCE_PAYMENTS_PAYLATER:case i.BIGCOMMERCE_PAYMENTS_CREDIT_CARDS:case i.BIGCOMMERCE_PAYMENTS_FASTLANE:case i.BIGCOMMERCE_PAYMENTS_APMS:case i.BIGCOMMERCE_PAYMENTS_VENMO:return!0;default:return!1}}(t)?i.BIGCOMMERCE_PAYMENTS:t}}])&&a(t.prototype,n),o&&a(t,o),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,o}()},3491(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PPSDK_CREDIT_CARD=t.MULTI_OPTION=t.CREDIT_CARD=void 0,t.CREDIT_CARD=\"credit-card\",t.MULTI_OPTION=\"multi-option\",t.PPSDK_CREDIT_CARD=\"card\"},8615(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=c(n(7542)),i=n(2157),o=c(n(2719)),a=c(n(4507)),s=c(n(2815));function c(e){return e&&e.__esModule?e:{default:e}}function u(e){return u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},u(e)}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,l(r.key),r)}}function l(e){var t=function(e){if(\"object\"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=u(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==u(t)?t:t+\"\"}t.default=function(){function e(t,n,r,i){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.urlHelper=t,this.requestSender=n,this.payloadMapper=r,this.ppsdkPayloadMapper=i}return t=e,c=[{key:\"create\",value:function(t){return new e(s.default.create(t),r.default.create(),o.default.create(),a.default.create())}}],(n=[{key:\"submitPayment\",value:function(e,t){var n=e.paymentMethod,r=void 0===n?{}:n;if(r.type!==i.API&&r.type!==i.SDK)throw new Error(\"\".concat(r.type,\" is not supported.\"));var o=r.type===i.SDK?this.ppsdkPayloadMapper.mapToPayload(e):this.payloadMapper.mapToPayload(e),a=r.type===i.SDK?this.urlHelper.getPpsdkPaymentUrl():this.urlHelper.getPaymentUrl(),s={headers:this.payloadMapper.mapToHeaders(e)};this.requestSender.postRequest(a,o,s,t)}}])&&d(t.prototype,n),c&&d(t,c),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,c}()},2157(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.SDK=t.OFFLINE=t.HOSTED=t.API=void 0,t.API=\"PAYMENT_TYPE_API\",t.HOSTED=\"PAYMENT_TYPE_HOSTED\",t.OFFLINE=\"PAYMENT_TYPE_OFFLINE\",t.SDK=\"PAYMENT_TYPE_SDK\"},4507(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916),i=n(3491);function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var t=function(e){if(\"object\"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=o(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==o(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,o=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToPayload\",value:function(e){var t=e.additionalAction,n=e.payment,o=void 0===n?{}:n,a=e.paymentMethod;return(0,r.omitNil)({instrument:{expires:{month:o.ccExpiry?(0,r.toNumber)(o.ccExpiry.month):null,year:o.ccExpiry?(0,r.toNumber)(o.ccExpiry.year):null},name:o.ccName,number:o.ccNumber,verification_value:o.ccCvv,type:i.PPSDK_CREDIT_CARD},form_nonce:o.hostedFormNonce,payment_method_id:a.id,human_verification:t?{id:\"recaptcha_v2_verification\",parameters:{token:t?t.data.human_verification_token:null}}:null})}},{key:\"mapToHeaders\",value:function(e){var t=e.authToken;return(0,r.omitNil)({Authorization:t})}}])&&a(t.prototype,n),o&&a(t,o),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,o}()},2815(e,t){\"use strict\";function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,i(r.key),r)}}function i(e){var t=function(e){if(\"object\"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=n(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==n(t)?t:t+\"\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0,t.default=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.config=t}return t=e,i=[{key:\"create\",value:function(t){return new e(t)}}],(n=[{key:\"host\",get:function(){return this.config.host}},{key:\"getOffsitePaymentUrl\",value:function(){return\"\".concat(this.host,\"/pay/initialize\")}},{key:\"getPaymentUrl\",value:function(){return\"\".concat(this.host,\"/api/public/v1/orders/payments\")}},{key:\"getPpsdkPaymentUrl\",value:function(){return\"\".concat(this.host,\"/payments\")}},{key:\"getGenerateClientTokenUrl\",value:function(){return\"\".concat(this.host,\"/api/v2/public/payments/client_tokens\")}}])&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},1517(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToCustomer\",value:function(e){var t=e.customer,n=void 0===t?{}:t,i=e.quoteMeta,o=void 0===i?{}:i;return(0,r.omitNil)({customer_group:n.customerGroupName?{name:n.customerGroupName}:null,geo_ip_country_code:o.request?o.request.geoCountryCode:null,id:n.customerId?(0,r.toString)(n.customerId):null,session_token:o.request?o.request.sessionHash:null})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},3805(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToOrder\",value:function(e){var t=e.order,n=void 0===t?{}:t;return(0,r.omitNil)({billing_address:this.mapToBillingAddress(e),coupons:this.mapToCoupons(e),currency:n.currency,id:n.orderId?(0,r.toString)(n.orderId):null,items:this.mapToItems(e),shipping:this.mapToShipping(e),shipping_address:this.mapToShippingAddress(e),token:n.token,totals:this.mapToOrderTotals(e)})}},{key:\"mapToBillingAddress\",value:function(e){var t=e.customer,n=void 0===t?{}:t,r=this.mapToAddress(e,\"billingAddress\");return n.email&&(r.email=n.email),r}},{key:\"mapToShipping\",value:function(e){var t=e.shippingOption||{},n=t.description,i=t.transitTime;return n?[(0,r.omitEmptyStringAndNil)({method:n,transit_time:i})]:[]}},{key:\"mapToCoupons\",value:function(e){var t=e.order,n=void 0===t?{}:t;return n.coupon&&n.coupon.coupons?n.coupon.coupons.map(function(e){return{code:e.code}}):[]}},{key:\"mapToShippingAddress\",value:function(e){return this.mapToAddress(e,\"shippingAddress\")}},{key:\"mapToAddress\",value:function(e,t){var n=e[t]||{};return(0,r.omitEmptyStringAndNil)({city:n.city,company:n.company,country_code:n.countryCode,country:n.country,first_name:n.firstName,last_name:n.lastName,phone:n.phone,state_code:n.provinceCode,state:n.province,street_1:n.addressLine1,street_2:n.addressLine2,zip:n.postCode})}},{key:\"mapToItems\",value:function(e){var t=e.cart;return(void 0===t?{items:[]}:t).items.map(function(e){return(0,r.omitNil)({code:e.id,variant_id:e.variantId,name:e.name,price:e.integerAmount,unit_price:e.integerUnitPrice,quantity:e.quantity,sku:e.sku})})}},{key:\"mapToOrderTotals\",value:function(e){var t=e.order,n=void 0===t?{}:t;return(0,r.omitNil)({grand_total:n.grandTotal?n.grandTotal.integerAmount:null,handling:n.handling?n.handling.integerAmount:null,shipping:n.shipping?n.shipping.integerAmount:null,subtotal:n.subtotal?n.subtotal.integerAmount:null,tax:n.taxTotal?n.taxTotal.integerAmount:null})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},2719(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916),i=c(n(1517)),o=c(n(3805)),a=c(n(3199)),s=c(n(2310));function c(e){return e&&e.__esModule?e:{default:e}}function u(e){return u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},u(e)}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,l(r.key),r)}}function l(e){var t=function(e){if(\"object\"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=u(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==u(t)?t:t+\"\"}t.default=function(){function e(t,n,r,i){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.customerMapper=t,this.orderMapper=n,this.paymentMapper=r,this.storeMapper=i}return t=e,c=[{key:\"create\",value:function(){return new e(i.default.create(),o.default.create(),a.default.create(),s.default.create())}}],(n=[{key:\"mapToPayload\",value:function(e){var t=e.order,n=void 0===t?{}:t,i=e.additionalAction;return(0,r.omitNil)({customer:this.customerMapper.mapToCustomer(e),notify_url:n.callbackUrl,order:this.orderMapper.mapToOrder(e),payment:this.paymentMapper.mapToPayment(e),store:this.storeMapper.mapToStore(e),additional_action:i})}},{key:\"mapToHeaders\",value:function(e){var t=e.authToken;return(0,r.omitNil)({Authorization:t})}}])&&d(t.prototype,n),c&&d(t,c),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,c}()},3199(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=a(n(4475)),i=n(5916),o=a(n(187));function a(e){return e&&e.__esModule?e:{default:e}}function s(e){return s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s(e)}function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,u(r.key),r)}}function u(e){var t=function(e){if(\"object\"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=s(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==s(t)?t:t+\"\"}t.default=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.paymentMethodIdMapper=t}return t=e,a=[{key:\"create\",value:function(){return new e(o.default.create())}}],(n=[{key:\"mapToPayment\",value:function(e){var t=e.order,n=void 0===t?{}:t,o=e.orderMeta,a=void 0===o?{}:o,s=e.payment,c=void 0===s?{}:s,u=e.paymentMethod,d=void 0===u?{}:u,l={device_info:c.deviceSessionId?c.deviceSessionId:null,device:a.deviceFingerprint?{fingerprint_id:a.deviceFingerprint}:null,gateway:this.paymentMethodIdMapper.mapToId(d),notify_url:n.callbackUrl,return_url:d.returnUrl||(n.payment?n.payment.returnUrl:null),vault_payment_instrument:c.instrumentId?null:c.shouldSaveInstrument,set_as_default_stored_instrument:c.instrumentId||c.shouldSaveInstrument?c.shouldSetAsDefaultInstrument:null},p=d.method;p&&(0,r.default)(l,{method:p});var h=c.nonce||d.nonce;return c.formattedPayload?(0,r.default)(l,c.formattedPayload):c.instrumentId?(0,r.default)(l,{bigpay_token:this.mapToBigPayToken(e)}):h?(0,r.default)(l,{credit_card_token:{token:h}}):c.cryptogramId?(0,r.default)(l,{credit_card_cryptogram:this.mapToCryptogram(e)}):(0,r.default)(l,{credit_card:this.mapToCreditCard(e)}),c.browser_info&&(0,r.default)(l,{browser_info:c.browser_info}),(0,i.omitNil)(l)}},{key:\"mapToCreditCard\",value:function(e){var t=e.payment,n=void 0===t?{}:t;return(0,i.omitNil)({account_name:n.ccName,month:n.ccExpiry?(0,i.toNumber)(n.ccExpiry.month):null,number:n.ccNumber,verification_value:n.ccCvv,year:n.ccExpiry?(0,i.toNumber)(n.ccExpiry.year):null,customer_code:n.ccCustomerCode,three_d_secure:n.threeDSecure,hosted_form_nonce:n.hostedFormNonce})}},{key:\"mapToBigPayToken\",value:function(e){var t=e.payment;return(0,i.omitNil)({credit_card_number_confirmation:t.ccNumber,token:t.instrumentId,verification_value:t.ccCvv,verification_nonce:t.nonce,three_d_secure:t.threeDSecure,hosted_form_nonce:t.hostedFormNonce,token_type:t.tokenType})}},{key:\"mapToCryptogram\",value:function(e){var t=e.payment;return(0,i.omitNil)({payment_cryptogram:t.cryptogramId,eci:t.eci,xid:t.transactionId,month:t.ccExpiry?(0,i.toNumber)(t.ccExpiry.month):null,number:t.ccNumber,year:t.ccExpiry?(0,i.toNumber)(t.ccExpiry.year):null,account_mask:t.accountMask})}}])&&c(t.prototype,n),a&&c(t,a),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,a}()},2310(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToStore\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,r.omitNil)({hash:n.storeHash,id:n.storeId?(0,r.toString)(n.storeId):null,name:n.storeName})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},3538(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToCart\",value:function(e){var t=e.cart,n=void 0===t?{}:t;return(0,r.omitNil)({currency_code:n.currency,items:this.mapToItems(e),totals:this.mapToOrderTotals(e)})}},{key:\"mapToItems\",value:function(e){var t=this,n=e.cart;return(void 0===n?{items:[]}:n).items.map(function(e){return(0,r.omitNil)({discount_amount:e.integerDiscount,name:e.name,price:e.integerAmount,unit_price:e.integerUnitPrice,quantity:e.quantity,sku:e.sku,tax_amount:e.integerTax,amount:e.integerAmountAfterDiscount,type:t.mapToType(e)})})}},{key:\"mapToOrderTotals\",value:function(e){var t=e.cart,n=void 0===t?{}:t;return(0,r.omitNil)({discount_total:n.discount?n.discount.integerAmount:null,grand_total:n.grandTotal?n.grandTotal.integerAmount:null,shipping_total:n.shipping?n.shipping.integerAmount:null,subtotal:n.subtotal?n.subtotal.integerAmount:null,surcharge_total:n.handling?n.handling.integerAmount:null,tax_total:n.taxTotal?n.taxTotal.integerAmount:null})}},{key:\"mapToType\",value:function(e){return{ItemPhysicalEntity:\"physical\",ItemDigitalEntity:\"digital\",ItemGiftCertificateEntity:\"gift_card\"}[e.type]}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},3373(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916),i=c(n(3538)),o=c(n(2740)),a=c(n(1138)),s=c(n(5913));function c(e){return e&&e.__esModule?e:{default:e}}function u(e){return u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},u(e)}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,l(r.key),r)}}function l(e){var t=function(e){if(\"object\"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=u(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==u(t)?t:t+\"\"}t.default=function(){function e(t,n,r,i){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.cartMapper=t,this.gatewayMapper=n,this.quoteMapper=r,this.storeMapper=i}return t=e,c=[{key:\"create\",value:function(){return new e(i.default.create(),o.default.create(),a.default.create(),s.default.create())}}],(n=[{key:\"mapToClientToken\",value:function(e){return(0,r.omitNil)({cart:this.cartMapper.mapToCart(e),gateway:this.gatewayMapper.mapToGateway(e),quote:this.quoteMapper.mapToQuote(e),store:this.storeMapper.mapToStore(e)})}}])&&d(t.prototype,n),c&&d(t,c),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,c}()},2740(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r,i=n(5916),o=(r=n(187))&&r.__esModule?r:{default:r};function a(e){return a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},a(e)}function s(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,c(r.key),r)}}function c(e){var t=function(e){if(\"object\"!=a(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=a(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==a(t)?t:t+\"\"}t.default=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.paymentMethodIdMapper=t}return function(e,t,n){return t&&s(e.prototype,t),n&&s(e,n),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(e,[{key:\"mapToGateway\",value:function(e){var t=e.paymentMethod,n=void 0===t?{}:t;return(0,i.omitNil)({name:this.paymentMethodIdMapper.mapToId(n)})}}],[{key:\"create\",value:function(){return new e(o.default.create())}}])}()},1138(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToQuote\",value:function(e){return(0,r.omitNil)({billing_address:this.mapToAddress(e,\"billingAddress\"),shipping_address:this.mapToAddress(e,\"shippingAddress\")})}},{key:\"mapToAddress\",value:function(e,t){var n=e.customer,i=void 0===n?{}:n,o=e[t]||{};return(0,r.omitNil)({address_line_1:o.addressLine1,address_line_2:o.addressLine2,city:o.city,company:o.company,country_code:o.countryCode,email:i.email,first_name:o.firstName,last_name:o.lastName,phone:o.phone,postal_code:o.postCode,state:o.province})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},5913(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToStore\",value:function(e){return(0,r.omitNil)({locale:this.mapToLocale(e),store_identity:this.mapToIdentity(e),urls:this.mapToUrls(e)})}},{key:\"mapToLocale\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,r.omitNil)({country_code:n.countryCode,currency_code:n.currencyCode,language_code:n.storeLanguage})}},{key:\"mapToIdentity\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,r.omitNil)({id:n.storeId?(0,r.toNumber)(n.storeId):null,name:n.storeName})}},{key:\"mapToUrls\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,r.omitNil)({cart:n.cartLink,checkout:n.checkoutLink,confirmation:n.orderConfirmationLink,home:n.shopPath})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},4351(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=s(n(7542)),i=n(9726),o=s(n(6258)),a=n(3152);function s(e){return e&&e.__esModule?e:{default:e}}function c(e){return c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c(e)}function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,d(r.key),r)}}function d(e){var t=function(e){if(\"object\"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=c(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==c(t)?t:t+\"\"}t.default=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.urlHelper=t,this.requestSender=n}return t=e,s=[{key:\"create\",value:function(t){return new e(o.default.create(t),r.default.create())}}],(n=[{key:\"loadInstruments\",value:function(e,t){var n=this.urlHelper.getInstrumentsUrl(e.storeId,e.customerId,e.currencyCode),r={headers:(0,a.mapToHeaders)(e)};this.requestSender.sendRequest(n,null,r,t)}},{key:\"loadInstrumentsWithAddress\",value:function(e,t){var n=this.urlHelper.getTrustedShippingAddressUrl(e.storeId,e.customerId,e.currencyCode),r=(0,a.mapToTrustedShippingAddressPayload)(e),o={method:i.POST,headers:(0,a.mapToHeaders)(e)};this.requestSender.postRequest(n,r,o,t)}},{key:\"deleteShopperInstrument\",value:function(e,t){var n=this.urlHelper.getInstrumentByIdUrl(e.storeId,e.customerId,e.instrumentId,e.currencyCode),r={method:i.DELETE,headers:(0,a.mapToHeaders)(e)};this.requestSender.sendRequest(n,null,r,t)}}])&&u(t.prototype,n),s&&u(t,s),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,s}()},6258(e,t){\"use strict\";function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,i(r.key),r)}}function i(e){var t=function(e){if(\"object\"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=n(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==n(t)?t:t+\"\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0,t.default=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.config=t}return t=e,i=[{key:\"create\",value:function(t){return new e(t)}}],(n=[{key:\"host\",get:function(){if(!this.config||!this.config.host)throw new Error(\"Host URL unavailable or not supplied.\");return this.config.host}},{key:\"getInstrumentsUrl\",value:function(e,t,n){return\"\".concat(this.host,\"/api/v3/stores/\").concat(e,\"/shoppers/\").concat(t,\"/instruments?currency_code=\").concat(n)}},{key:\"getTrustedShippingAddressUrl\",value:function(e,t,n){return\"\".concat(this.host,\"/api/v3/stores/\").concat(e,\"/shoppers/\").concat(t,\"/instruments/trusted_shipping_address?currency_code=\").concat(n)}},{key:\"getInstrumentByIdUrl\",value:function(e,t,n,r){return\"\".concat(this.host,\"/api/v2/stores/\").concat(e,\"/shoppers/\").concat(t,\"/instruments/\").concat(n,\"?currency_code=\").concat(r)}}])&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},3152(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.mapToHeaders=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).authToken;return(0,r.omitNil)({Authorization:e})},t.mapToInstrumentPayload=function(){var e,t,n,o,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=a.providerName,c=a.defaultInstrument,u=(0,r.omitNil)({name:s});return(0,r.omitNil)({provider:u,credit_card:(e=a,t=e.creditCard,n=void 0===t?{}:t,o=(0,r.omitNil)(n.threeDSecure),(0,r.omitNil)({cardholder_name:n.cardholderName,number:n.number,month:n.month,year:n.year,verification_code:n.verificationCode,issue_month:n.issueMonth,issue_year:n.issueYear,issue_number:n.issueNumber,track_data:n.trackData,is_manual_entry:n.isManualEntry,icc_data:n.iccData,fallback_reason:n.fallbackReason,is_contactless:n.isContactless,encrypted_pin_cryptogram:n.encryptedPinCryptogram,encrypted_pin_ksn:n.encryptedPinKsn,three_d_secure:o})),billing_address:i(a.billingAddress),default_instrument:c})},t.mapToTrustedShippingAddressPayload=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Array.isArray(e.shippingAddress)?(0,r.omitNil)({shipping_addresses:e.shippingAddress.map(function(e){return i(e)})}):(0,r.omitNil)({shipping_address:i(e.shippingAddress)})};var r=n(5916);function i(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=(e=n.provinceCode,t=n.province,(0,r.omitNil)({code:e,name:t}));return(0,r.omitNil)({address_line_1:n.addressLine1,address_line_2:n.addressLine2,city:n.city,company:n.company,country_code:n.countryCode,email:n.email,first_name:n.firstName,last_name:n.lastName,phone:n.phone,postal_code:n.postCode,state:i})}},1953(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(9440),i=n(540);t.default=function(e,t){var n=(t||{}).equalityCheck,o=void 0===n?i:n;return function(t,n){return Object.keys(e).reduce(function(i,a){var s,c=e[a],u=t?t[a]:void 0,d=c(u,n);return o(u,d)&&i?i:r.assign({},i,((s={})[a]=d,s))},t||{})}}},3050(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1635),i=n(9440),o=n(540);t.default=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e,a={};\"object\"==typeof e[e.length-1]&&(n=e.slice(0,-1),a=r.__assign({},a,e[e.length-1]));var s=a.equalityCheck,c=void 0===s?o:s;return function(e,t){var r=i.flowRight(n.map(function(e){return i.curryRight(e,2)(t)}))(e);return c(e,r)?e:r}}},7963(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1635),i=n(9440);t.default=function(e,t,n){if(\"string\"!=typeof e||\"\"===e)throw new Error(\"`type` must be a string\");return r.__assign({type:e},i.omitBy({payload:t,meta:n},function(e){return void 0===e}))}},7821(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1953),i=n(76);t.default=function(e,t,n){return\"function\"==typeof e?new i.default(e,t,n):new i.default(r.default(e,{equalityCheck:n&&n.equalityCheck}),t,n)}},6142(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1635),i=n(7963);t.default=function(e,t,n){return r.__assign({},i.default(e,t,n),{error:!0})}},76(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1635),i=n(9440),o=n(7554),a=n(473),s=n(540),c=n(8820),u=n(6019),d=n(1429),l=n(1058),p=function(){function e(e,t,n){void 0===t&&(t={});var i=this;this._reducer=e,this._options=r.__assign({actionTransformer:d.default,equalityCheck:s,shouldWarnMutation:!0,stateTransformer:l.default},n),this._state$=new o.BehaviorSubject(this._options.stateTransformer(t)),this._notification$=new o.Subject,this._dispatchers={},this._dispatchQueue$=new o.Subject,this._errors={},this._dispatchQueue$.pipe(a.mergeMap(function(e){return e.pipe(a.concatMap(function(e){return e}))}),a.filter(function(e){return!!e.type}),a.scan(function(e,t){return i._transformStates(e,t)},{state:t,transformedState:this._state$.getValue()}),a.distinctUntilChanged(function(e,t){var n=e.state,r=t.state;return i._options.equalityCheck(n,r)}),a.map(function(e){return e.transformedState})).subscribe(this._state$),this.dispatch({type:\"INIT\"})}return e.prototype.dispatch=function(e,t){return u.default(e)?this._dispatchObservableAction(e,t):\"function\"==typeof e?this._dispatchThunkAction(e,t):this._dispatchAction(e)},e.prototype.getState=function(){return this._state$.getValue()},e.prototype.notifyState=function(){this._notification$.next(this.getState())},e.prototype.subscribe=function(e){for(var t=this,n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];var i=\"object\"==typeof n[0]?n[0]:void 0,o=i?i.filters||[]:n,s=this._state$;o.length>0&&(s=s.pipe(a.distinctUntilChanged(function(e,n){return o.every(function(r){return t._options.equalityCheck(r(e),r(n))})}))),i&&!1===i.initial&&(s=s.pipe(a.skip(1)));var c=[s.subscribe(e),this._notification$.subscribe(e)];return function(){return c.forEach(function(e){return e.unsubscribe()})}},e.prototype._transformStates=function(e,t){try{var n=!1===this._options.shouldWarnMutation?this._reducer(e.state,t):c.default(this._reducer(e.state,t),{equalityCheck:this._options.equalityCheck,previousValue:e.state});return{state:n,transformedState:this._options.stateTransformer(n)}}catch(n){return this._getDispatchError(t.meta&&t.meta.queueId).next(n),{state:e.state,transformedState:e.transformedState}}},e.prototype._dispatchAction=function(e){return this._dispatchObservableAction(e.error?o.throwError(e):o.of(e))},e.prototype._dispatchObservableAction=function(e,t){var n=this;return void 0===t&&(t={}),new Promise(function(r,s){var c=n._getDispatchError(t.queueId),u=n._options.actionTransformer(o.from(e).pipe(a.map(function(e){return t.queueId?i.merge({},e,{meta:{queueId:t.queueId}}):e})));n._getDispatcher(t.queueId).next(o.from(u).pipe(a.map(function(e,t){return 0===t&&c.pipe(a.first()).subscribe(s),e.error&&s(e.payload),e}),a.catchError(function(e){return s(e instanceof Error?e:e.payload),o.of(e)}),a.tap({complete:function(){r(n.getState())}})))})},e.prototype._dispatchThunkAction=function(e,t){var n=this;return void 0===t&&(t={}),this._dispatchObservableAction(o.defer(function(){return e(n)}),t)},e.prototype._getDispatcher=function(e){return void 0===e&&(e=\"default\"),this._dispatchers[e]||(this._dispatchers[e]=new o.Subject,this._dispatchQueue$.next(this._dispatchers[e])),this._dispatchers[e]},e.prototype._getDispatchError=function(e){return void 0===e&&(e=\"default\"),this._errors[e]||(this._errors[e]=new o.Subject),this._errors[e]},e}();t.default=p},8820(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(9440),i=n(540);t.default=function e(t,n){try{var o=n||{},a=o.equalityCheck,s=void 0===a?i:a,c=o.previousValue,u=void 0===c?null:c;return s(t,u)&&Object.isFrozen(u)?u:Object.isFrozen(t)||!Array.isArray(t)&&!r.isPlainObject(t)?t:Array.isArray(t)?Object.freeze(t.map(function(t,n){return e(t,{equalityCheck:s,previousValue:Array.isArray(u)?u[n]:void 0})})):Object.freeze(Object.getOwnPropertyNames(t).reduce(function(n,r){return n[r]=e(t[r],{equalityCheck:s,previousValue:u&&u.hasOwnProperty(r)?u[r]:void 0}),n},{}))}catch(e){if(e instanceof TypeError)return t;throw e}}},9526(e,t,n){\"use strict\";n(76).default;var r=n(1953);t.HY=r.default;var i=n(3050);t.om=i.default;var o=n(7963);t.VP=o.default;var a=n(7821);t.iN=a.default;var s=n(6142);t.fQ=s.default;var c=n(8820);t.ol=c.default},6019(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return\"function\"==typeof e.subscribe||\"function\"==typeof e.then}},1429(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return e}},1058(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return e}},9165(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){var t=new r.default;return new i.default(t,e)};var r=n(9828),i=n(5470)},9828(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.build=function(e,t,n){var r=this,i=document.createElement(\"form\");return i.style.display=\"none\",i.setAttribute(\"action\",e),i.setAttribute(\"method\",\"POST\"),i.setAttribute(\"target\",n||\"_top\"),Object.keys(t).forEach(function(e){var n=t[e];i.appendChild(r._createInput(n,e))}),i},e.prototype._createInput=function(e,t){var n=document.createElement(\"input\");return n.setAttribute(\"name\",t),n.setAttribute(\"type\",\"hidden\"),n.setAttribute(\"value\",e),n},e}();t.default=n},5470(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(9783),i=function(){function e(e,t){this._formBuilder=e,this._options=t}return e.prototype.postForm=function(e,t,n,r){var i=this._formBuilder.build(this._prependHost(e),t,r);window.addEventListener(\"unload\",function e(){window.removeEventListener(\"unload\",e),n&&n()}),document.body.appendChild(i),i.submit()},e.prototype._prependHost=function(e){return this._options&&this._options.host&&!(0,r.isAbsoluteUrl)(e)?(0,r.joinPaths)(this._options.host,e):e},e}();t.default=i},8686(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.FormPoster=t.createFormPoster=void 0;var r=n(9165);Object.defineProperty(t,\"createFormPoster\",{enumerable:!0,get:function(){return r.default}});var i=n(5470);Object.defineProperty(t,\"FormPoster\",{enumerable:!0,get:function(){return i.default}})},9783(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isAbsoluteUrl=function(e){return/^https?:\\/\\//.test(e)},t.joinPaths=function(e,t){return\"\".concat((n=e,n.replace(/\\/$/,\"\")),\"/\").concat(function(e){return e.replace(/^\\//,\"\")}(t));var n}},2356(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isTerminalCacheKeyMap=function(e){return e.hasOwnProperty(\"cacheKey\")},t.isRootCacheKeyMap=function(e){return e.hasOwnProperty(\"parentMap\")}},3909(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1635),i=n(9440),o=r.__importDefault(n(540)),a=n(2356),s=function(){function e(e){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=r.__assign({isEqual:o.default,maxSize:0,onExpire:i.noop},e)}return e.prototype.getKey=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=this._resolveMap.apply(this,e),r=n.index,i=n.parentMap,o=n.map;return o&&o.cacheKey?o.usedCount++:o=this._generateMap(i,e.slice(r)),this._removeLeastUsedMap(o),o.cacheKey},e.prototype.getUsedCount=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=this._resolveMap.apply(this,e).map;return n?n.usedCount:0},e.prototype._resolveMap=function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var r=0,i=this._map;i.maps.length;){for(var o=!1,s=0;s<i.maps.length;s++){var c=i.maps[s];if(this._options.isEqual(c.value,t[r])){if((e=i.maps).unshift.apply(e,i.maps.splice(s,1)),(0===t.length||r===t.length-1)&&(0,a.isTerminalCacheKeyMap)(c))return{index:r,map:c,parentMap:i};o=!0,i=c,r++;break}}if(!o)break}return{index:r,parentMap:i}},e.prototype._generateMap=function(e,t){var n,r=0,i=e;do{n={maps:[],parentMap:i,usedCount:1,value:t[r]},i.maps.unshift(n),i=n,r++}while(r<t.length);var o=n;return o.cacheKey=\"\".concat(++this._lastId),o},e.prototype._removeLeastUsedMap=function(e){if(this._options.maxSize){var t=this._usedMaps.indexOf(e);if(this._usedMaps.splice(-1===t?0:t,-1===t?0:1,e),!(this._usedMaps.length<=this._options.maxSize)){var n=this._usedMaps.pop();n&&(this._removeMap(n),this._options.onExpire(n.cacheKey))}}},e.prototype._removeMap=function(e){e.parentMap&&(e.parentMap.maps.splice(e.parentMap.maps.indexOf(e),1),(0,a.isRootCacheKeyMap)(e.parentMap)||this._removeMap(e.parentMap))},e}();t.default=s},4218(e,t,n){\"use strict\";t.B4=t.Bj=void 0;var r=n(1635),i=n(8158);Object.defineProperty(t,\"Bj\",{enumerable:!0,get:function(){return r.__importDefault(i).default}}),Object.defineProperty(t,\"B4\",{enumerable:!0,get:function(){return i.memoizeOne}})},8158(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=s,t.memoizeOne=function(e,t){return s(e,r.__assign(r.__assign({},t),{maxSize:1}))};var r=n(1635),i=r.__importDefault(n(9655)),o=r.__importDefault(n(540)),a=r.__importDefault(n(3909));function s(e,t){var n=r.__assign({maxSize:0,isEqual:o.default},t),s=n.maxSize,c=n.isEqual,u=new Map,d=new a.default({isEqual:c,maxSize:s,onExpire:function(e){return u.delete(e)}}),l=(0,i.default)(e,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return d.getKey.apply(d,e)});return l.cache=u,l}},4325(e,t,n){\"use strict\";n.d(t,{g:()=>i});var r=n(5889),i=function(){function e(){this._cache={}}return e.prototype.read=function(e,t){var n=this.getKey(e,t.params);return this._cache[n]||null},e.prototype.write=function(e,t,n){var r=this.getKey(e,t.params);this._cache[r]=n},e.prototype.getKey=function(e,t){return void 0===t&&(t={}),0===Object.keys(t).length?e:\"\".concat(e,\"?\").concat(r.stringify(t))},e}()},321(e,t,n){\"use strict\";n.d(t,{A:()=>s});var r=n(168),i=n(1675),o=n(5861),a=n(4670);function s(e){return new a.A(new o.A,new i.A,r,e)}},6889(e,t,n){\"use strict\";n.d(t,{A:()=>i});var r=n(2024);function i(e){return new r.A(e)}},4043(e,t,n){\"use strict\";n.r(t),n.d(t,{RequestSender:()=>o.A,Timeout:()=>a.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),a=n(2024)},4843(e,t,n){\"use strict\";function r(e){return!!e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof e.then}n.d(t,{A:()=>r})},1675(e,t,n){\"use strict\";n.d(t,{A:()=>s});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,a=/application\\/x-www-form-urlencoded/;const s=function(){function e(){}return e.prototype.toRequestBody=function(e){var t=e.headers?this._getHeader(e.headers,\"Content-Type\"):\"\";if(e.body){if(o.test(t))return JSON.stringify(e.body);if(a.test(t))return(0,i.A)(e.body)}return e.body},e.prototype.toResponse=function(e){var t=this._parseResponseHeaders(e.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in e?e.response:e.responseText,t),headers:t,status:e.status,statusText:e.statusText}},e.prototype._parseResponseBody=function(e,t){var n=this._getHeader(t,\"Content-Type\");return e&&o.test(n)?JSON.parse(e):e},e.prototype._parseResponseHeaders=function(e){return(e?e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(e,t){var n,i=t.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},e),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):e},{})},e.prototype._getHeader=function(e,t){return e&&t&&(e[t]||e[t.toLowerCase()])||\"\"},e}()},5861(e,t,n){\"use strict\";n.d(t,{A:()=>i});var r=n(5889);const i=function(){function e(){}return e.prototype.createRequest=function(e,t){var n=new XMLHttpRequest;return this._configureRequest(n,e,t),n},e.prototype._configureRequest=function(e,t,n){void 0===n&&(n={}),e.open(n.method||\"GET\",this._formatUrl(t,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(e,n.headers),\"boolean\"==typeof n.credentials&&(e.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(e.timeout=n.timeout)},e.prototype._configureRequestHeaders=function(e,t){Object.keys(t).filter(function(e){return null!==t[e]}).forEach(function(n){e.setRequestHeader(n,t[n])})},e.prototype._formatUrl=function(e,t,n){return void 0===n&&(n=!0),t&&0!==Object.keys(t).length?\"\".concat(e,\"?\").concat(r.stringify(t,{encode:n})):e},e}()},4670(e,t,n){\"use strict\";n.d(t,{A:()=>u});var r=n(1635),i=n(35),o=n.n(i),a=n(4325),s=n(4843),c=n(2024);const u=function(){function e(e,t,n,r){void 0===r&&(r={}),this._requestFactory=e,this._payloadTransformer=t,this._cookie=n,this._options=r,this._cache=this._options.cache||new a.g}return e.prototype.sendRequest=function(e,t){var n=this,r=this._mergeDefaultOptions(e,t),i=this._getCachedRequest(e,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(e),r);return new Promise(function(t,i){var a=function(){var a=n._payloadTransformer.toResponse(o);a.status>=200&&a.status<300?(n._cacheRequest(e,r,a),t(a)):i(a)};o.onload=a,o.onerror=a,o.onabort=a,o.ontimeout=a,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,s.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},e.prototype.get=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"GET\"}))},e.prototype.post=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"POST\"}))},e.prototype.put=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"PUT\"}))},e.prototype.patch=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"PATCH\"}))},e.prototype.delete=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"DELETE\"}))},e.prototype._mergeDefaultOptions=function(e,t){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(e,t)&&this._isLocalRequest(e)&&(n.headers[\"X-XSRF-TOKEN\"]=r),t&&t.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,t)},e.prototype._prependHost=function(e){return!this._options.host||/^https?:\\/\\//.test(e)?e:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(e.replace(/^\\//,\"\"))},e.prototype._shouldCacheRequest=function(e){return\"GET\"===(e.method||\"GET\").toUpperCase()&&Boolean(e.cache)},e.prototype._getCachedRequest=function(e,t){return this._shouldCacheRequest(t)?this._cache.read(e,t):null},e.prototype._cacheRequest=function(e,t,n){this._shouldCacheRequest(t)&&this._cache.write(e,t,n)},e.prototype._isAssetRequest=function(e,t){return(!t||!t.method||\"GET\"===t.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(e.split(\"?\")[0])},e.prototype._isLocalRequest=function(e){return!!e.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!e.match(new RegExp(\"^(https?:)?//\"))},e}()},2024(e,t,n){\"use strict\";n.d(t,{A:()=>r});const r=function(){function e(e){var t=this;this._delay=e,this._promise=new Promise(function(e){t._resolve=e})}return e.prototype.onComplete=function(e){this._promise.then(e)},e.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},e.prototype.start=function(){var e=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return e.complete()},this._delay))},e}()},710(e,t,n){\"use strict\";function r(e){return\"object\"!=typeof e||null===e?e:Object.keys(e).filter(function(t){return void 0!==e[t]}).map(function(t){var n=e[t];return\"string\"==typeof n?\"\".concat(t,\"=\").concat(encodeURIComponent(n)):\"\".concat(t,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(t,{A:()=>r})},5889(e,t,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),a=n(3814);function s(e){if(\"string\"!=typeof e||1!==e.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}function u(e,t){return t.decode?i(e):e}function d(e){return Array.isArray(e)?e.sort():\"object\"==typeof e?d(Object.keys(e)).sort((e,t)=>Number(e)-Number(t)).map(t=>e[t]):e}function l(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function p(e){const t=(e=l(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function h(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&\"string\"==typeof e&&\"\"!==e.trim()?e=Number(e):!t.parseBooleans||null===e||\"true\"!==e.toLowerCase()&&\"false\"!==e.toLowerCase()||(e=\"true\"===e.toLowerCase()),e}function f(e,t){s((t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,n,r)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case\"bracket\":return(e,n,r)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case\"comma\":case\"separator\":return(t,n,r)=>{const i=\"string\"==typeof n&&n.includes(e.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&u(n,e).includes(e.arrayFormatSeparator);n=o?u(n,e):n;const a=i||o?n.split(e.arrayFormatSeparator).map(t=>u(t,e)):null===n?n:u(n,e);r[t]=a};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),r=Object.create(null);if(\"string\"!=typeof e)return r;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return r;for(const i of e.split(\"&\")){if(\"\"===i)continue;let[e,a]=o(t.decode?i.replace(/\\+/g,\" \"):i,\"=\");a=void 0===a?null:[\"comma\",\"separator\"].includes(t.arrayFormat)?a:u(a,t),n(u(e,t),a,r)}for(const e of Object.keys(r)){const n=r[e];if(\"object\"==typeof n&&null!==n)for(const e of Object.keys(n))n[e]=h(n[e],t);else r[e]=h(n,t)}return!1===t.sort?r:(!0===t.sort?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((e,t)=>{const n=r[t];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?e[t]=d(n):e[t]=n,e},Object.create(null))}t.extract=p,t.parse=f,t.stringify=(e,t)=>{if(!e)return\"\";s((t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},t)).arrayFormatSeparator);const n=n=>t.skipNull&&null==e[n]||t.skipEmptyString&&\"\"===e[n],r=function(e){switch(e.arrayFormat){case\"index\":return t=>(n,r)=>{const i=n.length;return void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(t,e),\"[\",i,\"]\"].join(\"\")]:[...n,[c(t,e),\"[\",c(i,e),\"]=\",c(r,e)].join(\"\")]};case\"bracket\":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(t,e),\"[]\"].join(\"\")]:[...n,[c(t,e),\"[]=\",c(r,e)].join(\"\")];case\"comma\":case\"separator\":return t=>(n,r)=>null==r||0===r.length?n:0===n.length?[[c(t,e),\"=\",c(r,e)].join(\"\")]:[[n,c(r,e)].join(e.arrayFormatSeparator)];default:return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,c(t,e)]:[...n,[c(t,e),\"=\",c(r,e)].join(\"\")]}}(t),i={};for(const t of Object.keys(e))n(t)||(i[t]=e[t]);const o=Object.keys(i);return!1!==t.sort&&o.sort(t.sort),o.map(n=>{const i=e[n];return void 0===i?\"\":null===i?c(n,t):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):c(n,t)+\"=\"+c(i,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,r]=o(e,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:f(p(e),t)},t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:u(r,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=l(e.url).split(\"?\")[0]||\"\",i=t.extract(e.url),o=t.parse(i,{sort:!1}),a=Object.assign(o,e.query);let s=t.stringify(a,n);s&&(s=`?${s}`);let u=function(e){let t=\"\";const n=e.indexOf(\"#\");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(u=`#${c(e.fragmentIdentifier,n)}`),`${r}${s}${u}`},t.pick=(e,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:s}=t.parseUrl(e,r);return t.stringifyUrl({url:i,query:a(o,n),fragmentIdentifier:s},r)},t.exclude=(e,n,r)=>{const i=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,i,r)}},5477(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.canSupportRel=function(e){var t=document.createElement(\"link\");return!!(t.relList&&t.relList.supports&&t.relList.supports(e))},e}();t.default=n},471(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(e,t,n){\"use strict\";t.vQ=t.Hb=t.B2=void 0;var r=n(4886);Object.defineProperty(t,\"B2\",{enumerable:!0,get:function(){return r.default}});var i=n(471);Object.defineProperty(t,\"Hb\",{enumerable:!0,get:function(){return i.default}});var o=n(5895);Object.defineProperty(t,\"vQ\",{enumerable:!0,get:function(){return o.default}});n(7995),n(9722),n(282)},4886(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._scripts={},this._preloadedScripts={}}return e.prototype.loadScript=function(e,t){var n=this;return this._scripts[e]||(this._scripts[e]=new Promise(function(r,i){var o=document.createElement(\"script\"),a=t||{},s=a.async,c=void 0!==s&&s,u=a.attributes,d=void 0===u?{}:u;Object.keys(d).forEach(function(e){o.setAttribute(e,d[e])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(t){delete n._scripts[e],i(t)},o.async=c,o.src=e,document.body.appendChild(o)})),this._scripts[e]},e.prototype.loadScripts=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.loadScript(e,t)})).then(function(){})},e.prototype.preloadScript=function(e,t){var n=this;return this._preloadedScripts[e]||(this._preloadedScripts[e]=new Promise(function(r,i){var o=(t||{}).prefetch,a=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var s=document.createElement(\"link\");s.as=\"script\",s.rel=a,s.href=e,s.onload=function(){r()},s.onerror=function(){delete n._preloadedScripts[e],i()},document.head.appendChild(s)}else n._requestSender.get(e,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[e]},e.prototype.preloadScripts=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.preloadScript(e,t)})).then(function(){})},e}();t.default=n},7995(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._stylesheets={},this._preloadedStylesheets={}}return e.prototype.loadStylesheet=function(e,t){var n=this;return this._stylesheets[e]||(this._stylesheets[e]=new Promise(function(r,i){var o=document.createElement(\"link\"),a=t||{},s=a.prepend,c=void 0!==s&&s,u=a.attributes,d=void 0===u?{}:u;Object.keys(d).forEach(function(e){o.setAttribute(e,d[e])}),o.onload=function(){return r()},o.onerror=function(t){delete n._stylesheets[e],i(t)},o.rel=\"stylesheet\",o.href=e,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[e]},e.prototype.loadStylesheets=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.loadStylesheet(e,t)})).then(function(){})},e.prototype.preloadStylesheet=function(e,t){var n=this;return this._preloadedStylesheets[e]||(this._preloadedStylesheets[e]=new Promise(function(r,i){var o=(t||{}).prefetch,a=void 0!==o&&o,s=a?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(s)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=a?\"prefetch\":\"preload\",c.href=e,c.onload=function(){r()},c.onerror=function(t){delete n._preloadedStylesheets[e],i(t)},document.head.appendChild(c)}else n._requestSender.get(e,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[e]},e.prototype.preloadStylesheets=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.preloadStylesheet(e,t)})).then(function(){})},e}();t.default=n},6472(e,t,n){\"use strict\";t.Jt=void 0,n(8914),n(9690),n(3255),n(523),n(7571),n(2100),n(3302),n(1045),n(5160),n(9356),n(9225),n(72),n(236),n(3069),n(441),n(7520),n(3686),n(648),n(1439),n(4651),n(9014),n(3761),n(9060),n(5886);var r=n(9262);t.Jt=r,n(8990)},5886(e,t,n){\"use strict\";var r=n(8914),i=n(9690),o=n(72);e.exports=function(){return r()||i()||o()}},8914(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/Android/i.test(e)}},9690(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/CrOS/i.test(e)}},3255(e,t,n){\"use strict\";var r=n(5160),i=n(3761),o=n(523),a=n(9014),s=n(9060);e.exports=function(e){return!(-1===(e=e||window.navigator.userAgent).indexOf(\"Chrome\")&&-1===e.indexOf(\"CriOS\")||r(e)||i(e)||o(e)||a(e)||s(e))}},523(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"DuckDuckGo/\")}},5160(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"Edge/\")||-1!==e.indexOf(\"Edg/\")}},9356(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/Firefox/i.test(e)}},7571(e,t,n){\"use strict\";var r=n(1045);e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"MSIE\")||r(e)}},3302(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"MSIE 10\")}},1045(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"Trident/7\")}},2100(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"MSIE 9\")}},236(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/FxiOS/i.test(e)}},3069(e,t,n){\"use strict\";var r=n(72);e.exports=function(e){return e=e||window.navigator.userAgent,r(e)&&function(e){return/\\bGSA\\b/.test(e)}(e)}},441(e,t,n){\"use strict\";var r=n(72),i=n(236),o=/webkit/i;e.exports=function(e){return e=e||window.navigator.userAgent,r(e)&&function(e){return o.test(e)}(e)&&!function(e){return e.indexOf(\"CriOS\")>-1}(e)&&!i(e)&&!function(e){return e.indexOf(\"FBAN\")>-1}(e)}},7520(e,t,n){\"use strict\";var r=n(3686);e.exports=function(e,t){return t=void 0!==t?t:window.statusbar.visible,r(e)&&!t}},3686(e,t,n){\"use strict\";var r=n(72),i=n(3069);e.exports=function(e){return e=e||window.navigator.userAgent,!!r(e)&&(!!i(e)||/.+AppleWebKit(?!.*Safari)/i.test(e))}},648(e,t,n){\"use strict\";var r=n(3686);e.exports=function(e,t){return t=void 0!==t?t:window.statusbar.visible,r(e)&&t}},72(e,t,n){\"use strict\";var r=n(1439);e.exports=function(e,t,n){void 0===t&&(t=!0),e=e||window.navigator.userAgent;var i=/iPhone|iPod|iPad/i.test(e);return t?i||r(e,n):i}},1439(e){\"use strict\";e.exports=function(e,t){return e=e||window.navigator.userAgent,t=t||window.document,/Mac|iPad/i.test(e)&&\"ontouchend\"in t}},4651(e,t,n){\"use strict\";var r=n(236),i=n(9356);e.exports=function(e){return e=e||window.navigator.userAgent,r(e)||/iPhone|iPod|iPad|Mobile|Tablet/i.test(e)&&i(e)}},9014(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"OPR/\")||-1!==e.indexOf(\"Opera/\")||-1!==e.indexOf(\"OPT/\")}},9225(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/^Mozilla\\/5\\.0.*Safari\\//.test(e)&&!/(iPhone|iPad|iPod|Android|SM-)/i.test(e)&&!/Chrome|CriOS|FxiOS|OPiOS|mercury/i.test(e)}},3761(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/SamsungBrowser/i.test(e)}},9060(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"Silk/\")}},8990(e,t,n){\"use strict\";var r=n(3255);e.exports=function(e){return e=e||window.navigator.userAgent,!!window.PaymentRequest&&(!r(e)||function(e){var t=e.match(/Chrome\\/(\\d+)\\./);return!!t&&parseInt(t[1],10)>=61}(e))}},9262(e,t,n){\"use strict\";var r=n(8914),i=n(236),o=n(3686),a=n(3255),s=n(3761),c=n(523);function u(e){return(e=e||window.navigator.userAgent).indexOf(\"Opera Mini\")>-1}e.exports=function(e){return e=e||window.navigator.userAgent,!(o(e)||i(e)||function(e){return e=e||window.navigator.userAgent,!!r(e)&&/Version\\/[\\d.]+/i.test(e)&&!u(e)&&!c(e)}(e)||u(e)||function(e){var t=(e=e||window.navigator.userAgent).match(/CriOS\\/(\\d+)\\./);return!!t&&parseInt(t[1],10)<48}(e)||function(e){return!a(e)&&!s(e)&&/samsung/i.test(e)}(e))}},2437(e,t,n){\"use strict\";e.exports={number:n(36),expirationDate:n(1644),expirationMonth:n(188),expirationYear:n(7209),cvv:n(3221),postalCode:n(583),creditCardType:n(2921)}},36(e,t,n){\"use strict\";var r=n(1653),i=n(2921);function o(e,t,n){return{card:e,isPotentiallyValid:t,isValid:n}}e.exports=function(e,t){var n,a,s,c,u;if(t=t||{},\"number\"==typeof e&&(e=String(e)),\"string\"!=typeof e)return o(null,!1,!1);if(e=e.replace(/\\-|\\s/g,\"\"),!/^\\d*$/.test(e))return o(null,!1,!1);if(0===(n=i(e)).length)return o(null,!1,!1);if(1!==n.length)return o(null,!0,!1);if(a=n[0],t.maxLength&&e.length>t.maxLength)return o(a,!1,!1);for(s=a.type===i.types.UNIONPAY&&!0!==t.luhnValidateUnionPay||r(e),u=Math.max.apply(null,a.lengths),t.maxLength&&(u=Math.min(t.maxLength,u)),c=0;c<a.lengths.length;c++)if(a.lengths[c]===e.length)return o(a,e.length<u||s,s);return o(a,e.length<u,!1)}},3221(e){\"use strict\";function t(e,t){return{isValid:e,isPotentiallyValid:t}}e.exports=function(e,n){return n=(n=n||3)instanceof Array?n:[n],\"string\"!=typeof e?t(!1,!1):/^\\d*$/.test(e)?function(e,t){for(var n=0;n<e.length;n++)if(t===e[n])return!0;return!1}(n,e.length)?t(!0,!0):e.length<Math.min.apply(null,n)?t(!1,!0):e.length>function(e){for(var t=3,n=0;n<e.length;n++)t=e[n]>t?e[n]:t;return t}(n)?t(!1,!1):t(!0,!0):t(!1,!1)}},1644(e,t,n){\"use strict\";var r=n(9376),i=n(188),o=n(7209);function a(e,t,n,r){return{isValid:e,isPotentiallyValid:t,month:n,year:r}}e.exports=function(e,t){var n,s,c,u;if(\"string\"==typeof e)e=e.replace(/^(\\d\\d) (\\d\\d(\\d\\d)?)$/,\"$1/$2\"),n=r(e);else{if(null===e||\"object\"!=typeof e)return a(!1,!1,null,null);n={month:String(e.month),year:String(e.year)}}if(s=i(n.month),c=o(n.year,t),s.isValid){if(c.isCurrentYear)return a(u=s.isValidForThisYear,u,n.month,n.year);if(c.isValid)return a(!0,!0,n.month,n.year)}return s.isPotentiallyValid&&c.isPotentiallyValid?a(!1,!0,null,null):a(!1,!1,null,null)}},188(e){\"use strict\";function t(e,t,n){return{isValid:e,isPotentiallyValid:t,isValidForThisYear:n||!1}}e.exports=function(e){var n,r,i=(new Date).getMonth()+1;return\"string\"!=typeof e?t(!1,!1):\"\"===e.replace(/\\s/g,\"\")||\"0\"===e?t(!1,!0):/^\\d*$/.test(e)?(n=parseInt(e,10),isNaN(e)?t(!1,!1):t(r=n>0&&n<13,r,r&&n>=i)):t(!1,!1)}},7209(e){\"use strict\";function t(e,t,n){return{isValid:e,isPotentiallyValid:t,isCurrentYear:n||!1}}e.exports=function(e,n){var r,i,o,a,s;return n=n||19,\"string\"!=typeof e?t(!1,!1):\"\"===e.replace(/\\s/g,\"\")?t(!1,!0):/^\\d*$/.test(e)?(i=e.length)<2?t(!1,!0):(r=(new Date).getFullYear(),3===i?t(!1,e.slice(0,2)===String(r).slice(0,2)):i>4?t(!1,!1):(e=parseInt(e,10),o=Number(String(r).substr(2,2)),2===i?(s=o===e,a=e>=o&&e<=o+n):4===i&&(s=r===e,a=e>=r&&e<=r+n),t(a,a,s))):t(!1,!1)}},2278(e){\"use strict\";e.exports=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)}},1653(e){\"use strict\";e.exports=function(e){for(var t,n=0,r=!1,i=e.length-1;i>=0;)t=parseInt(e.charAt(i),10),r&&(t*=2)>9&&(t=t%10+1),r=!r,n+=t,i--;return n%10==0}},9376(e,t,n){\"use strict\";var r=n(7209),i=n(2278);e.exports=function(e){var t,n,o,a,s;return/^\\d{4}-\\d{1,2}$/.test(e)?e=e.split(\"-\").reverse():/\\//.test(e)?e=e.split(/\\s*\\/\\s*/g):/\\s/.test(e)&&(e=e.split(/ +/g)),i(e)?{month:e[0]||\"\",year:e.slice(1).join()}:(o=e,n=0===(s=Number(o[0]))?2:s>1||1===s&&Number(o[1])>2?1:1===s?(a=o.substr(1),r(a).isPotentiallyValid?1:2):5===o.length?1:o.length>5?2:1,{month:t=e.substr(0,n),year:e.substr(t.length)})}},583(e){\"use strict\";function t(e,t){return{isValid:e,isPotentiallyValid:t}}e.exports=function(e,n){var r;return r=(n=n||{}).minLength||3,\"string\"!=typeof e?t(!1,!1):e.length<r?t(!1,!0):t(!0,!0)}},2921(e,t,n){\"use strict\";var r,i=n(2931),o=n(7695),a=n(4461),s=n(6520),c=n(9545),u={},d={VISA:\"visa\",MASTERCARD:\"mastercard\",AMERICAN_EXPRESS:\"american-express\",DINERS_CLUB:\"diners-club\",DISCOVER:\"discover\",JCB:\"jcb\",UNIONPAY:\"unionpay\",MAESTRO:\"maestro\",ELO:\"elo\",MIR:\"mir\",HIPER:\"hiper\",HIPERCARD:\"hipercard\"},l=[d.VISA,d.MASTERCARD,d.AMERICAN_EXPRESS,d.DINERS_CLUB,d.DISCOVER,d.JCB,d.UNIONPAY,d.MAESTRO,d.ELO,d.MIR,d.HIPER,d.HIPERCARD];function p(e){return u[e]||i[e]}function h(e,t){var n=r.indexOf(e);if(!t&&-1===n)throw new Error('\"'+e+'\" is not a supported card type.');return n}function f(e){var t,n=[];return s(e)?0===e.length?r.map(function(e){return o(p(e))}):(r.forEach(function(t){var r=p(t);c(e,r,n)}),(t=a(n))?[t]:n):[]}r=o(l),f.getTypeInfo=function(e){return o(p(e))},f.removeCard=function(e){var t=h(e);r.splice(t,1)},f.addCard=function(e){var t=h(e.type,!0);u[e.type]=e,-1===t&&r.push(e.type)},f.updateCard=function(e,t){var n,r=u[e]||i[e];if(!r)throw new Error('\"'+e+'\" is not a recognized type. Use `addCard` instead.');if(t.type&&r.type!==t.type)throw new Error(\"Cannot overwrite type parameter.\");n=o(r,!0),Object.keys(n).forEach(function(e){t[e]&&(n[e]=t[e])}),u[n.type]=n},f.changeOrder=function(e,t){var n=h(e);r.splice(n,1),r.splice(t,0,e)},f.resetModifications=function(){r=o(l),u={}},f.types=d,e.exports=f},9545(e,t,n){\"use strict\";var r=n(7695),i=n(6744);e.exports=function(e,t,n){var o,a,s,c;for(o=0;o<t.patterns.length;o++)if(a=t.patterns[o],i(e,a)){c=r(t),s=Array.isArray(a)?String(a[0]).length:String(a).length,e.length>=s&&(c.matchStrength=s),n.push(c);break}}},2931(e){\"use strict\";e.exports={visa:{niceType:\"Visa\",type:\"visa\",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:\"CVV\",size:3}},mastercard:{niceType:\"Mastercard\",type:\"mastercard\",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}},\"american-express\":{niceType:\"American Express\",type:\"american-express\",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:\"CID\",size:4}},\"diners-club\":{niceType:\"Diners Club\",type:\"diners-club\",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:\"CVV\",size:3}},discover:{niceType:\"Discover\",type:\"discover\",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:\"CID\",size:3}},jcb:{niceType:\"JCB\",type:\"jcb\",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:\"CVV\",size:3}},unionpay:{niceType:\"UnionPay\",type:\"unionpay\",patterns:[620,[624,626],[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[622019,622999],[62207,62209],[622126,622925],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:\"CVN\",size:3}},maestro:{niceType:\"Maestro\",type:\"maestro\",patterns:[493698,[5e5,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:\"CVC\",size:3}},elo:{niceType:\"Elo\",type:\"elo\",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:\"CVE\",size:3}},mir:{niceType:\"Mir\",type:\"mir\",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:\"CVP2\",size:3}},hiper:{niceType:\"Hiper\",type:\"hiper\",patterns:[637095,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}},hipercard:{niceType:\"Hipercard\",type:\"hipercard\",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}}}},7695(e){\"use strict\";e.exports=function(e){return e?JSON.parse(JSON.stringify(e)):null}},4461(e){\"use strict\";e.exports=function(e){if(function(e){var t=e.filter(function(e){return e.matchStrength}).length;return t>0&&t===e.length}(e))return e.reduce(function(e,t){return e?e.matchStrength<t.matchStrength?t:e:t})}},6520(e){\"use strict\";e.exports=function(e){return\"string\"==typeof e||e instanceof String}},6744(e){\"use strict\";e.exports=function(e,t){return Array.isArray(t)?function(e,t,n){var r=String(t).length,i=e.substr(0,r),o=parseInt(i,10);return t=parseInt(String(t).substr(0,i.length),10),n=parseInt(String(n).substr(0,i.length),10),o>=t&&o<=n}(e,t[0],t[1]):function(e,t){return(t=String(t)).substring(0,e.length)===e.substring(0,t.length)}(e,t)}},1915(e){\"use strict\";var t=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+t+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+t+\")+\",\"gi\");function i(e,t){try{return[decodeURIComponent(e.join(\"\"))]}catch(e){}if(1===e.length)return e;t=t||1;var n=e.slice(0,t),r=e.slice(t);return Array.prototype.concat.call([],i(n),i(r))}function o(e){try{return decodeURIComponent(e)}catch(o){for(var t=e.match(n)||[],r=1;r<t.length;r++)t=(e=i(t,r).join(\"\")).match(n)||[];return e}}e.exports=function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof e+\"`\");try{return e=e.replace(/\\+/g,\" \"),decodeURIComponent(e)}catch(t){return function(e){for(var t={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(e);n;){try{t[n[0]]=decodeURIComponent(n[0])}catch(e){var i=o(n[0]);i!==n[0]&&(t[n[0]]=i)}n=r.exec(e)}t[\"%C2\"]=\"�\";for(var a=Object.keys(t),s=0;s<a.length;s++){var c=a[s];e=e.replace(new RegExp(c,\"g\"),t[c])}return e}(e)}}},3592(e,t,n){\"use strict\";var r=n(4684),i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function a(e,t,n){var o=t[n];if(null!=o){if(i.call(e,n)&&(void 0===e[n]||null===e[n]))throw new TypeError(\"Cannot convert undefined or null to object (\"+n+\")\");i.call(e,n)&&r(o)?e[n]=s(Object(e[n]),t[n]):e[n]=o}}function s(e,t){if(e===t)return e;for(var n in t=Object(t))i.call(t,n)&&a(e,t,n);if(Object.getOwnPropertySymbols)for(var r=Object.getOwnPropertySymbols(t),s=0;s<r.length;s++)o.call(t,r[s])&&a(e,t,r[s]);return e}e.exports=function(e){e=function(e){if(null==e)throw new TypeError(\"Sources cannot be null or undefined\");return Object(e)}(e);for(var t=1;t<arguments.length;t++)s(e,arguments[t]);return e}},3814(e){\"use strict\";e.exports=function(e,t){for(var n={},r=Object.keys(e),i=Array.isArray(t),o=0;o<r.length;o++){var a=r[o],s=e[a];(i?-1!==t.indexOf(a):t(a,s,e))&&(n[a]=s)}return n}},4684(e){\"use strict\";e.exports=function(e){var t=typeof e;return null!==e&&(\"object\"===t||\"function\"===t)}},168(e){var t;t=function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(t,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=e({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var a=JSON.stringify(n);/^[\\{\\[]/.test(a)&&(n=a)}catch(e){}n=r.write?r.write(n,t):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var s=\"\";for(var c in o)o[c]&&(s+=\"; \"+c,!0!==o[c]&&(s+=\"=\"+o[c].split(\";\")[0]));return document.cookie=t+\"=\"+n+s}}function a(e,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],a=0;a<o.length;a++){var s=o[a].split(\"=\"),c=s.slice(1).join(\"=\");n||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var u=t(s[0]);if(c=(r.read||r)(c,u)||t(c),n)try{c=JSON.parse(c)}catch(e){}if(i[u]=c,e===u)break}catch(e){}}return e?i[e]:i}}return i.set=o,i.get=function(e){return a(e,!1)},i.getJSON=function(e){return a(e,!0)},i.remove=function(t,n){o(t,\"\",e(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(t),e.exports=t()},9655(e,t,n){var r,i=\"__lodash_hash_undefined__\",o=/^\\[object .+?Constructor\\]$/,a=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,s=\"object\"==typeof self&&self&&self.Object===Object&&self,c=a||s||Function(\"return this\")(),u=Array.prototype,d=Function.prototype,l=Object.prototype,p=c[\"__core-js_shared__\"],h=(r=/[^.]+$/.exec(p&&p.keys&&p.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",f=d.toString,y=l.hasOwnProperty,m=l.toString,g=RegExp(\"^\"+f.call(y).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),v=u.splice,_=P(c,\"Map\"),b=P(Object,\"create\");function S(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function w(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function C(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function I(e,t){for(var n=e.length;n--;)if(A(e[n][0],t))return n;return-1}function E(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function P(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){if(!T(e)||h&&h in e)return!1;var t=function(e){var t=T(e)?m.call(e):\"\";return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t}(e)||function(e){var t=!1;if(null!=e&&\"function\"!=typeof e.toString)try{t=!!(e+\"\")}catch(e){}return t}(e)?g:o;return t.test(function(e){if(null!=e){try{return f.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e))}(n)?n:void 0}function O(e,t){if(\"function\"!=typeof e||t&&\"function\"!=typeof t)throw new TypeError(\"Expected a function\");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a),a};return n.cache=new(O.Cache||C),n}function A(e,t){return e===t||e!=e&&t!=t}function T(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}S.prototype.clear=function(){this.__data__=b?b(null):{}},S.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},S.prototype.get=function(e){var t=this.__data__;if(b){var n=t[e];return n===i?void 0:n}return y.call(t,e)?t[e]:void 0},S.prototype.has=function(e){var t=this.__data__;return b?void 0!==t[e]:y.call(t,e)},S.prototype.set=function(e,t){return this.__data__[e]=b&&void 0===t?i:t,this},w.prototype.clear=function(){this.__data__=[]},w.prototype.delete=function(e){var t=this.__data__,n=I(t,e);return!(n<0||(n==t.length-1?t.pop():v.call(t,n,1),0))},w.prototype.get=function(e){var t=this.__data__,n=I(t,e);return n<0?void 0:t[n][1]},w.prototype.has=function(e){return I(this.__data__,e)>-1},w.prototype.set=function(e,t){var n=this.__data__,r=I(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},C.prototype.clear=function(){this.__data__={hash:new S,map:new(_||w),string:new S}},C.prototype.delete=function(e){return E(this,e).delete(e)},C.prototype.get=function(e){return E(this,e).get(e)},C.prototype.has=function(e){return E(this,e).has(e)},C.prototype.set=function(e,t){return E(this,e).set(e,t),this},O.Cache=C,e.exports=O},35(e,t,n){e=n.nmd(e);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",a=\"[object Function]\",s=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,u=/^(?:0|[1-9]\\d*)$/,d={};d[\"[object Float32Array]\"]=d[\"[object Float64Array]\"]=d[\"[object Int8Array]\"]=d[\"[object Int16Array]\"]=d[\"[object Int32Array]\"]=d[\"[object Uint8Array]\"]=d[\"[object Uint8ClampedArray]\"]=d[\"[object Uint16Array]\"]=d[\"[object Uint32Array]\"]=!0,d[o]=d[\"[object Array]\"]=d[\"[object ArrayBuffer]\"]=d[\"[object Boolean]\"]=d[\"[object DataView]\"]=d[\"[object Date]\"]=d[\"[object Error]\"]=d[a]=d[\"[object Map]\"]=d[\"[object Number]\"]=d[s]=d[\"[object RegExp]\"]=d[\"[object Set]\"]=d[\"[object String]\"]=d[\"[object WeakMap]\"]=!1;var l,p,h,f=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,y=\"object\"==typeof self&&self&&self.Object===Object&&self,m=f||y||Function(\"return this\")(),g=t&&!t.nodeType&&t,v=g&&e&&!e.nodeType&&e,_=v&&v.exports===g,b=_&&f.process,S=function(){try{return v&&v.require&&v.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(e){}}(),w=S&&S.isTypedArray,C=Array.prototype,I=Function.prototype,E=Object.prototype,P=m[\"__core-js_shared__\"],O=I.toString,A=E.hasOwnProperty,T=(l=/[^.]+$/.exec(P&&P.keys&&P.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",k=E.toString,R=O.call(Object),M=RegExp(\"^\"+O.call(A).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),x=_?m.Buffer:void 0,N=m.Symbol,D=m.Uint8Array,j=(x&&x.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(e){return p(h(e))}),L=Object.create,z=E.propertyIsEnumerable,F=C.splice,B=N?N.toStringTag:void 0,U=function(){try{var e=se(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),q=x?x.isBuffer:void 0,V=Math.max,G=Date.now,H=se(m,\"Map\"),Y=se(Object,\"create\"),W=function(){function e(){}return function(t){if(!_e(t))return{};if(L)return L(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function $(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function K(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Z(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function J(e){var t=this.__data__=new K(e);this.size=t.size}function Q(e,t,n){(void 0!==n&&!pe(e[t],n)||void 0===n&&!(t in e))&&te(e,t,n)}function X(e,t,n){var r=e[t];A.call(e,t)&&pe(r,n)&&(void 0!==n||t in e)||te(e,t,n)}function ee(e,t){for(var n=e.length;n--;)if(pe(e[n][0],t))return n;return-1}function te(e,t,n){\"__proto__\"==t&&U?U(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}$.prototype.clear=function(){this.__data__=Y?Y(null):{},this.size=0},$.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},$.prototype.get=function(e){var t=this.__data__;if(Y){var n=t[e];return n===r?void 0:n}return A.call(t,e)?t[e]:void 0},$.prototype.has=function(e){var t=this.__data__;return Y?void 0!==t[e]:A.call(t,e)},$.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Y&&void 0===t?r:t,this},K.prototype.clear=function(){this.__data__=[],this.size=0},K.prototype.delete=function(e){var t=this.__data__,n=ee(t,e);return!(n<0||(n==t.length-1?t.pop():F.call(t,n,1),--this.size,0))},K.prototype.get=function(e){var t=this.__data__,n=ee(t,e);return n<0?void 0:t[n][1]},K.prototype.has=function(e){return ee(this.__data__,e)>-1},K.prototype.set=function(e,t){var n=this.__data__,r=ee(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Z.prototype.clear=function(){this.size=0,this.__data__={hash:new $,map:new(H||K),string:new $}},Z.prototype.delete=function(e){var t=ae(this,e).delete(e);return this.size-=t?1:0,t},Z.prototype.get=function(e){return ae(this,e).get(e)},Z.prototype.has=function(e){return ae(this,e).has(e)},Z.prototype.set=function(e,t){var n=ae(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},J.prototype.clear=function(){this.__data__=new K,this.size=0},J.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},J.prototype.get=function(e){return this.__data__.get(e)},J.prototype.has=function(e){return this.__data__.has(e)},J.prototype.set=function(e,t){var n=this.__data__;if(n instanceof K){var r=n.__data__;if(!H||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Z(r)}return n.set(e,t),this.size=n.size,this};function ne(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":B&&B in Object(e)?function(e){var t=A.call(e,B),n=e[B];try{e[B]=void 0;var r=!0}catch(e){}var i=k.call(e);return r&&(t?e[B]=n:delete e[B]),i}(e):function(e){return k.call(e)}(e)}function re(e){return be(e)&&ne(e)==o}function ie(e,t,n,r,i){e!==t&&function(e,t,n){for(var r=-1,i=Object(e),o=n(e),a=o.length;a--;){var s=o[++r];if(!1===t(i[s],s,i))break}}(t,function(o,a){if(i||(i=new J),_e(o))!function(e,t,n,r,i,o,a){var c=de(e,n),u=de(t,n),d=a.get(u);if(d)Q(e,n,d);else{var l,p,h,f,y,m=o?o(c,u,n+\"\",e,t,a):void 0,g=void 0===m;if(g){var v=fe(u),_=!v&&me(u),b=!v&&!_&&Se(u);m=u,v||_||b?fe(c)?m=c:be(y=c)&&ye(y)?m=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}(c):_?(g=!1,m=function(e){return e.slice()}(u)):b?(g=!1,f=new(h=(l=u).buffer).constructor(h.byteLength),new D(f).set(new D(h)),p=f,m=new l.constructor(p,l.byteOffset,l.length)):m=[]:function(e){if(!be(e)||ne(e)!=s)return!1;var t=j(e);if(null===t)return!0;var n=A.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&O.call(n)==R}(u)||he(u)?(m=c,he(c)?m=function(e){return function(e,t,n){var r=!n;n||(n={});for(var i=-1,o=t.length;++i<o;){var a=t[i],s=void 0;void 0===s&&(s=e[a]),r?te(n,a,s):X(n,a,s)}return n}(e,we(e))}(c):_e(c)&&!ge(c)||(m=function(e){return\"function\"!=typeof e.constructor||ue(e)?{}:W(j(e))}(u))):g=!1}g&&(a.set(u,m),i(m,u,r,o,a),a.delete(u)),Q(e,n,m)}}(e,t,a,n,ie,r,i);else{var c=r?r(de(e,a),o,a+\"\",e,t,i):void 0;void 0===c&&(c=o),Q(e,a,c)}},we)}var oe=U?function(e,t){return U(e,\"toString\",{configurable:!0,enumerable:!1,value:(n=t,function(){return n}),writable:!0});var n}:Ee;function ae(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function se(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!_e(e)||function(e){return!!T&&T in e}(e))&&(ge(e)?M:c).test(function(e){if(null!=e){try{return O.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e))}(n)?n:void 0}function ce(e,t){var n=typeof e;return!!(t=t??i)&&(\"number\"==n||\"symbol\"!=n&&u.test(e))&&e>-1&&e%1==0&&e<t}function ue(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||E)}function de(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var le=function(e){var t=0,n=0;return function(){var r=G(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(oe);function pe(e,t){return e===t||e!=e&&t!=t}var he=re(function(){return arguments}())?re:function(e){return be(e)&&A.call(e,\"callee\")&&!z.call(e,\"callee\")},fe=Array.isArray;function ye(e){return null!=e&&ve(e.length)&&!ge(e)}var me=q||function(){return!1};function ge(e){if(!_e(e))return!1;var t=ne(e);return t==a||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function ve(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=i}function _e(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function be(e){return null!=e&&\"object\"==typeof e}var Se=w?function(e){return function(t){return e(t)}}(w):function(e){return be(e)&&ve(e.length)&&!!d[ne(e)]};function we(e){return ye(e)?function(e,t){var n=fe(e),r=!n&&he(e),i=!n&&!r&&me(e),o=!n&&!r&&!i&&Se(e),a=n||r||i||o,s=a?function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}(e.length,String):[],c=s.length;for(var u in e)!t&&!A.call(e,u)||a&&(\"length\"==u||i&&(\"offset\"==u||\"parent\"==u)||o&&(\"buffer\"==u||\"byteLength\"==u||\"byteOffset\"==u)||ce(u,c))||s.push(u);return s}(e,!0):function(e){if(!_e(e))return function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}(e);var t=ue(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&A.call(e,r))&&n.push(r);return n}(e)}var Ce,Ie=(Ce=function(e,t,n){ie(e,t,n)},function(e,t){return le(function(e,t,n){return t=V(void 0===t?e.length-1:t,0),function(){for(var r=arguments,i=-1,o=V(r.length-t,0),a=Array(o);++i<o;)a[i]=r[t+i];i=-1;for(var s=Array(t+1);++i<t;)s[i]=r[i];return s[t]=n(a),function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}(e,this,s)}}(e,t,Ee),e+\"\")}(function(e,t){var n=-1,r=t.length,i=r>1?t[r-1]:void 0,o=r>2?t[2]:void 0;for(i=Ce.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(e,t,n){if(!_e(n))return!1;var r=typeof t;return!!(\"number\"==r?ye(n)&&ce(t,n.length):\"string\"==r&&t in n)&&pe(n[t],e)}(t[0],t[1],o)&&(i=r<3?void 0:i,r=1),e=Object(e);++n<r;){var a=t[n];a&&Ce(e,a,n)}return e}));function Ee(e){return e}e.exports=Ie},9440(e,t,n){e=n.nmd(e),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",s=32,c=128,u=1/0,d=9007199254740991,l=NaN,p=4294967295,h=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",s],[\"partialRight\",64],[\"rearg\",256]],f=\"[object Arguments]\",y=\"[object Array]\",m=\"[object Boolean]\",g=\"[object Date]\",v=\"[object Error]\",_=\"[object Function]\",b=\"[object GeneratorFunction]\",S=\"[object Map]\",w=\"[object Number]\",C=\"[object Object]\",I=\"[object Promise]\",E=\"[object RegExp]\",P=\"[object Set]\",O=\"[object String]\",A=\"[object Symbol]\",T=\"[object WeakMap]\",k=\"[object ArrayBuffer]\",R=\"[object DataView]\",M=\"[object Float32Array]\",x=\"[object Float64Array]\",N=\"[object Int8Array]\",D=\"[object Int16Array]\",j=\"[object Int32Array]\",L=\"[object Uint8Array]\",z=\"[object Uint8ClampedArray]\",F=\"[object Uint16Array]\",B=\"[object Uint32Array]\",U=/\\b__p \\+= '';/g,q=/\\b(__p \\+=) '' \\+/g,V=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,G=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,Y=RegExp(G.source),W=RegExp(H.source),$=/<%-([\\s\\S]+?)%>/g,K=/<%([\\s\\S]+?)%>/g,Z=/<%=([\\s\\S]+?)%>/g,J=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,ee=/[\\\\^$.*+?()[\\]{}|]/g,te=RegExp(ee.source),ne=/^\\s+/,re=/\\s/,ie=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,oe=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ae=/,? & /,se=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ce=/[()=,{}\\[\\]\\/\\s]/,ue=/\\\\(\\\\)?/g,de=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,le=/\\w*$/,pe=/^[-+]0x[0-9a-f]+$/i,he=/^0b[01]+$/i,fe=/^\\[object .+?Constructor\\]$/,ye=/^0o[0-7]+$/i,me=/^(?:0|[1-9]\\d*)$/,ge=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,ve=/($^)/,_e=/['\\n\\r\\u2028\\u2029\\\\]/g,be=\"\\\\ud800-\\\\udfff\",Se=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",we=\"\\\\u2700-\\\\u27bf\",Ce=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Ie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ee=\"\\\\ufe0e\\\\ufe0f\",Pe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Oe=\"[\"+be+\"]\",Ae=\"[\"+Pe+\"]\",Te=\"[\"+Se+\"]\",ke=\"\\\\d+\",Re=\"[\"+we+\"]\",Me=\"[\"+Ce+\"]\",xe=\"[^\"+be+Pe+ke+we+Ce+Ie+\"]\",Ne=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",De=\"[^\"+be+\"]\",je=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Le=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",ze=\"[\"+Ie+\"]\",Fe=\"\\\\u200d\",Be=\"(?:\"+Me+\"|\"+xe+\")\",Ue=\"(?:\"+ze+\"|\"+xe+\")\",qe=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Ve=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Ge=\"(?:\"+Te+\"|\"+Ne+\")?\",He=\"[\"+Ee+\"]?\",Ye=He+Ge+\"(?:\"+Fe+\"(?:\"+[De,je,Le].join(\"|\")+\")\"+He+Ge+\")*\",We=\"(?:\"+[Re,je,Le].join(\"|\")+\")\"+Ye,$e=\"(?:\"+[De+Te+\"?\",Te,je,Le,Oe].join(\"|\")+\")\",Ke=RegExp(\"['’]\",\"g\"),Ze=RegExp(Te,\"g\"),Je=RegExp(Ne+\"(?=\"+Ne+\")|\"+$e+Ye,\"g\"),Qe=RegExp([ze+\"?\"+Me+\"+\"+qe+\"(?=\"+[Ae,ze,\"$\"].join(\"|\")+\")\",Ue+\"+\"+Ve+\"(?=\"+[Ae,ze+Be,\"$\"].join(\"|\")+\")\",ze+\"?\"+Be+\"+\"+qe,ze+\"+\"+Ve,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",ke,We].join(\"|\"),\"g\"),Xe=RegExp(\"[\"+Fe+be+Se+Ee+\"]\"),et=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,tt=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],nt=-1,rt={};rt[M]=rt[x]=rt[N]=rt[D]=rt[j]=rt[L]=rt[z]=rt[F]=rt[B]=!0,rt[f]=rt[y]=rt[k]=rt[m]=rt[R]=rt[g]=rt[v]=rt[_]=rt[S]=rt[w]=rt[C]=rt[E]=rt[P]=rt[O]=rt[T]=!1;var it={};it[f]=it[y]=it[k]=it[R]=it[m]=it[g]=it[M]=it[x]=it[N]=it[D]=it[j]=it[S]=it[w]=it[C]=it[E]=it[P]=it[O]=it[A]=it[L]=it[z]=it[F]=it[B]=!0,it[v]=it[_]=it[T]=!1;var ot={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},at=parseFloat,st=parseInt,ct=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,ut=\"object\"==typeof self&&self&&self.Object===Object&&self,dt=ct||ut||Function(\"return this\")(),lt=t&&!t.nodeType&&t,pt=lt&&e&&!e.nodeType&&e,ht=pt&&pt.exports===lt,ft=ht&&ct.process,yt=function(){try{return pt&&pt.require&&pt.require(\"util\").types||ft&&ft.binding&&ft.binding(\"util\")}catch(e){}}(),mt=yt&&yt.isArrayBuffer,gt=yt&&yt.isDate,vt=yt&&yt.isMap,_t=yt&&yt.isRegExp,bt=yt&&yt.isSet,St=yt&&yt.isTypedArray;function wt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function Ct(e,t,n,r){for(var i=-1,o=null==e?0:e.length;++i<o;){var a=e[i];t(r,a,n(a),e)}return r}function It(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}function Et(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function Pt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}function Ot(e,t){for(var n=-1,r=null==e?0:e.length,i=0,o=[];++n<r;){var a=e[n];t(a,n,e)&&(o[i++]=a)}return o}function At(e,t){return!(null==e||!e.length)&&zt(e,t,0)>-1}function Tt(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function kt(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}function Rt(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}function Mt(e,t,n,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(n=e[++i]);++i<o;)n=t(n,e[i],i,e);return n}function xt(e,t,n,r){var i=null==e?0:e.length;for(r&&i&&(n=e[--i]);i--;)n=t(n,e[i],i,e);return n}function Nt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var Dt=qt(\"length\");function jt(e,t,n){var r;return n(e,function(e,n,i){if(t(e,n,i))return r=n,!1}),r}function Lt(e,t,n,r){for(var i=e.length,o=n+(r?1:-1);r?o--:++o<i;)if(t(e[o],o,e))return o;return-1}function zt(e,t,n){return t==t?function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}(e,t,n):Lt(e,Bt,n)}function Ft(e,t,n,r){for(var i=n-1,o=e.length;++i<o;)if(r(e[i],t))return i;return-1}function Bt(e){return e!=e}function Ut(e,t){var n=null==e?0:e.length;return n?Ht(e,t)/n:l}function qt(e){return function(t){return null==t?r:t[e]}}function Vt(e){return function(t){return null==e?r:e[t]}}function Gt(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}function Ht(e,t){for(var n,i=-1,o=e.length;++i<o;){var a=t(e[i]);a!==r&&(n=n===r?a:n+a)}return n}function Yt(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}function Wt(e){return e?e.slice(0,ln(e)+1).replace(ne,\"\"):e}function $t(e){return function(t){return e(t)}}function Kt(e,t){return kt(t,function(t){return e[t]})}function Zt(e,t){return e.has(t)}function Jt(e,t){for(var n=-1,r=e.length;++n<r&&zt(t,e[n],0)>-1;);return n}function Qt(e,t){for(var n=e.length;n--&&zt(t,e[n],0)>-1;);return n}var Xt=Vt({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),en=Vt({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function tn(e){return\"\\\\\"+ot[e]}function nn(e){return Xe.test(e)}function rn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function on(e,t){return function(n){return e(t(n))}}function an(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var s=e[n];s!==t&&s!==a||(e[n]=a,o[i++]=n)}return o}function sn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}function cn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=[e,e]}),n}function un(e){return nn(e)?function(e){for(var t=Je.lastIndex=0;Je.test(e);)++t;return t}(e):Dt(e)}function dn(e){return nn(e)?function(e){return e.match(Je)||[]}(e):function(e){return e.split(\"\")}(e)}function ln(e){for(var t=e.length;t--&&re.test(e.charAt(t)););return t}var pn=Vt({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),hn=function e(t){var n,re=(t=null==t?dt:hn.defaults(dt.Object(),t,hn.pick(dt,tt))).Array,be=t.Date,Se=t.Error,we=t.Function,Ce=t.Math,Ie=t.Object,Ee=t.RegExp,Pe=t.String,Oe=t.TypeError,Ae=re.prototype,Te=we.prototype,ke=Ie.prototype,Re=t[\"__core-js_shared__\"],Me=Te.toString,xe=ke.hasOwnProperty,Ne=0,De=(n=/[^.]+$/.exec(Re&&Re.keys&&Re.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",je=ke.toString,Le=Me.call(Ie),ze=dt._,Fe=Ee(\"^\"+Me.call(xe).replace(ee,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Be=ht?t.Buffer:r,Ue=t.Symbol,qe=t.Uint8Array,Ve=Be?Be.allocUnsafe:r,Ge=on(Ie.getPrototypeOf,Ie),He=Ie.create,Ye=ke.propertyIsEnumerable,We=Ae.splice,$e=Ue?Ue.isConcatSpreadable:r,Je=Ue?Ue.iterator:r,Xe=Ue?Ue.toStringTag:r,ot=function(){try{var e=co(Ie,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),ct=t.clearTimeout!==dt.clearTimeout&&t.clearTimeout,ut=be&&be.now!==dt.Date.now&&be.now,lt=t.setTimeout!==dt.setTimeout&&t.setTimeout,pt=Ce.ceil,ft=Ce.floor,yt=Ie.getOwnPropertySymbols,Dt=Be?Be.isBuffer:r,Vt=t.isFinite,fn=Ae.join,yn=on(Ie.keys,Ie),mn=Ce.max,gn=Ce.min,vn=be.now,_n=t.parseInt,bn=Ce.random,Sn=Ae.reverse,wn=co(t,\"DataView\"),Cn=co(t,\"Map\"),In=co(t,\"Promise\"),En=co(t,\"Set\"),Pn=co(t,\"WeakMap\"),On=co(Ie,\"create\"),An=Pn&&new Pn,Tn={},kn=Lo(wn),Rn=Lo(Cn),Mn=Lo(In),xn=Lo(En),Nn=Lo(Pn),Dn=Ue?Ue.prototype:r,jn=Dn?Dn.valueOf:r,Ln=Dn?Dn.toString:r;function zn(e){if(es(e)&&!Va(e)&&!(e instanceof qn)){if(e instanceof Un)return e;if(xe.call(e,\"__wrapped__\"))return zo(e)}return new Un(e)}var Fn=function(){function e(){}return function(t){if(!Xa(t))return{};if(He)return He(t);e.prototype=t;var n=new e;return e.prototype=r,n}}();function Bn(){}function Un(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=r}function qn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function Vn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Gn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Hn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Yn(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new Hn;++t<n;)this.add(e[t])}function Wn(e){var t=this.__data__=new Gn(e);this.size=t.size}function $n(e,t){var n=Va(e),r=!n&&qa(e),i=!n&&!r&&Wa(e),o=!n&&!r&&!i&&cs(e),a=n||r||i||o,s=a?Yt(e.length,Pe):[],c=s.length;for(var u in e)!t&&!xe.call(e,u)||a&&(\"length\"==u||i&&(\"offset\"==u||\"parent\"==u)||o&&(\"buffer\"==u||\"byteLength\"==u||\"byteOffset\"==u)||mo(u,c))||s.push(u);return s}function Kn(e){var t=e.length;return t?e[Hr(0,t-1)]:r}function Zn(e,t){return Mo(Pi(e),or(t,0,e.length))}function Jn(e){return Mo(Pi(e))}function Qn(e,t,n){(n!==r&&!Fa(e[t],n)||n===r&&!(t in e))&&rr(e,t,n)}function Xn(e,t,n){var i=e[t];xe.call(e,t)&&Fa(i,n)&&(n!==r||t in e)||rr(e,t,n)}function er(e,t){for(var n=e.length;n--;)if(Fa(e[n][0],t))return n;return-1}function tr(e,t,n,r){return dr(e,function(e,i,o){t(r,e,n(e),o)}),r}function nr(e,t){return e&&Oi(t,ks(t),e)}function rr(e,t,n){\"__proto__\"==t&&ot?ot(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function ir(e,t){for(var n=-1,i=t.length,o=re(i),a=null==e;++n<i;)o[n]=a?r:Es(e,t[n]);return o}function or(e,t,n){return e==e&&(n!==r&&(e=e<=n?e:n),t!==r&&(e=e>=t?e:t)),e}function ar(e,t,n,i,o,a){var s,c=1&t,u=2&t,d=4&t;if(n&&(s=o?n(e,i,o,a):n(e)),s!==r)return s;if(!Xa(e))return e;var l=Va(e);if(l){if(s=function(e){var t=e.length,n=new e.constructor(t);return t&&\"string\"==typeof e[0]&&xe.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}(e),!c)return Pi(e,s)}else{var p=po(e),h=p==_||p==b;if(Wa(e))return bi(e,c);if(p==C||p==f||h&&!o){if(s=u||h?{}:fo(e),!c)return u?function(e,t){return Oi(e,lo(e),t)}(e,function(e,t){return e&&Oi(t,Rs(t),e)}(s,e)):function(e,t){return Oi(e,uo(e),t)}(e,nr(s,e))}else{if(!it[p])return o?e:{};s=function(e,t,n){var r,i=e.constructor;switch(t){case k:return Si(e);case m:case g:return new i(+e);case R:return function(e,t){var n=t?Si(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case M:case x:case N:case D:case j:case L:case z:case F:case B:return wi(e,n);case S:return new i;case w:case O:return new i(e);case E:return function(e){var t=new e.constructor(e.source,le.exec(e));return t.lastIndex=e.lastIndex,t}(e);case P:return new i;case A:return r=e,jn?Ie(jn.call(r)):{}}}(e,p,c)}}a||(a=new Wn);var y=a.get(e);if(y)return y;a.set(e,s),os(e)?e.forEach(function(r){s.add(ar(r,t,n,r,e,a))}):ts(e)&&e.forEach(function(r,i){s.set(i,ar(r,t,n,i,e,a))});var v=l?r:(d?u?to:eo:u?Rs:ks)(e);return It(v||e,function(r,i){v&&(r=e[i=r]),Xn(s,i,ar(r,t,n,i,e,a))}),s}function sr(e,t,n){var i=n.length;if(null==e)return!i;for(e=Ie(e);i--;){var o=n[i],a=t[o],s=e[o];if(s===r&&!(o in e)||!a(s))return!1}return!0}function cr(e,t,n){if(\"function\"!=typeof e)throw new Oe(i);return Ao(function(){e.apply(r,n)},t)}function ur(e,t,n,r){var i=-1,o=At,a=!0,s=e.length,c=[],u=t.length;if(!s)return c;n&&(t=kt(t,$t(n))),r?(o=Tt,a=!1):t.length>=200&&(o=Zt,a=!1,t=new Yn(t));e:for(;++i<s;){var d=e[i],l=null==n?d:n(d);if(d=r||0!==d?d:0,a&&l==l){for(var p=u;p--;)if(t[p]===l)continue e;c.push(d)}else o(t,l,r)||c.push(d)}return c}zn.templateSettings={escape:$,evaluate:K,interpolate:Z,variable:\"\",imports:{_:zn}},zn.prototype=Bn.prototype,zn.prototype.constructor=zn,Un.prototype=Fn(Bn.prototype),Un.prototype.constructor=Un,qn.prototype=Fn(Bn.prototype),qn.prototype.constructor=qn,Vn.prototype.clear=function(){this.__data__=On?On(null):{},this.size=0},Vn.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Vn.prototype.get=function(e){var t=this.__data__;if(On){var n=t[e];return n===o?r:n}return xe.call(t,e)?t[e]:r},Vn.prototype.has=function(e){var t=this.__data__;return On?t[e]!==r:xe.call(t,e)},Vn.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=On&&t===r?o:t,this},Gn.prototype.clear=function(){this.__data__=[],this.size=0},Gn.prototype.delete=function(e){var t=this.__data__,n=er(t,e);return!(n<0||(n==t.length-1?t.pop():We.call(t,n,1),--this.size,0))},Gn.prototype.get=function(e){var t=this.__data__,n=er(t,e);return n<0?r:t[n][1]},Gn.prototype.has=function(e){return er(this.__data__,e)>-1},Gn.prototype.set=function(e,t){var n=this.__data__,r=er(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Hn.prototype.clear=function(){this.size=0,this.__data__={hash:new Vn,map:new(Cn||Gn),string:new Vn}},Hn.prototype.delete=function(e){var t=ao(this,e).delete(e);return this.size-=t?1:0,t},Hn.prototype.get=function(e){return ao(this,e).get(e)},Hn.prototype.has=function(e){return ao(this,e).has(e)},Hn.prototype.set=function(e,t){var n=ao(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Yn.prototype.add=Yn.prototype.push=function(e){return this.__data__.set(e,o),this},Yn.prototype.has=function(e){return this.__data__.has(e)},Wn.prototype.clear=function(){this.__data__=new Gn,this.size=0},Wn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Wn.prototype.get=function(e){return this.__data__.get(e)},Wn.prototype.has=function(e){return this.__data__.has(e)},Wn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Gn){var r=n.__data__;if(!Cn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Hn(r)}return n.set(e,t),this.size=n.size,this};var dr=ki(vr),lr=ki(_r,!0);function pr(e,t){var n=!0;return dr(e,function(e,r,i){return n=!!t(e,r,i)}),n}function hr(e,t,n){for(var i=-1,o=e.length;++i<o;){var a=e[i],s=t(a);if(null!=s&&(c===r?s==s&&!ss(s):n(s,c)))var c=s,u=a}return u}function fr(e,t){var n=[];return dr(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function yr(e,t,n,r,i){var o=-1,a=e.length;for(n||(n=yo),i||(i=[]);++o<a;){var s=e[o];t>0&&n(s)?t>1?yr(s,t-1,n,r,i):Rt(i,s):r||(i[i.length]=s)}return i}var mr=Ri(),gr=Ri(!0);function vr(e,t){return e&&mr(e,t,ks)}function _r(e,t){return e&&gr(e,t,ks)}function br(e,t){return Ot(t,function(t){return Za(e[t])})}function Sr(e,t){for(var n=0,i=(t=mi(t,e)).length;null!=e&&n<i;)e=e[jo(t[n++])];return n&&n==i?e:r}function wr(e,t,n){var r=t(e);return Va(e)?r:Rt(r,n(e))}function Cr(e){return null==e?e===r?\"[object Undefined]\":\"[object Null]\":Xe&&Xe in Ie(e)?function(e){var t=xe.call(e,Xe),n=e[Xe];try{e[Xe]=r;var i=!0}catch(e){}var o=je.call(e);return i&&(t?e[Xe]=n:delete e[Xe]),o}(e):function(e){return je.call(e)}(e)}function Ir(e,t){return e>t}function Er(e,t){return null!=e&&xe.call(e,t)}function Pr(e,t){return null!=e&&t in Ie(e)}function Or(e,t,n){for(var i=n?Tt:At,o=e[0].length,a=e.length,s=a,c=re(a),u=1/0,d=[];s--;){var l=e[s];s&&t&&(l=kt(l,$t(t))),u=gn(l.length,u),c[s]=!n&&(t||o>=120&&l.length>=120)?new Yn(s&&l):r}l=e[0];var p=-1,h=c[0];e:for(;++p<o&&d.length<u;){var f=l[p],y=t?t(f):f;if(f=n||0!==f?f:0,!(h?Zt(h,y):i(d,y,n))){for(s=a;--s;){var m=c[s];if(!(m?Zt(m,y):i(e[s],y,n)))continue e}h&&h.push(y),d.push(f)}}return d}function Ar(e,t,n){var i=null==(e=Eo(e,t=mi(t,e)))?e:e[jo(Ko(t))];return null==i?r:wt(i,e,n)}function Tr(e){return es(e)&&Cr(e)==f}function kr(e,t,n,i,o){return e===t||(null==e||null==t||!es(e)&&!es(t)?e!=e&&t!=t:function(e,t,n,i,o,a){var s=Va(e),c=Va(t),u=s?y:po(e),d=c?y:po(t),l=(u=u==f?C:u)==C,p=(d=d==f?C:d)==C,h=u==d;if(h&&Wa(e)){if(!Wa(t))return!1;s=!0,l=!1}if(h&&!l)return a||(a=new Wn),s||cs(e)?Qi(e,t,n,i,o,a):function(e,t,n,r,i,o,a){switch(n){case R:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case k:return!(e.byteLength!=t.byteLength||!o(new qe(e),new qe(t)));case m:case g:case w:return Fa(+e,+t);case v:return e.name==t.name&&e.message==t.message;case E:case O:return e==t+\"\";case S:var s=rn;case P:var c=1&r;if(s||(s=sn),e.size!=t.size&&!c)return!1;var u=a.get(e);if(u)return u==t;r|=2,a.set(e,t);var d=Qi(s(e),s(t),r,i,o,a);return a.delete(e),d;case A:if(jn)return jn.call(e)==jn.call(t)}return!1}(e,t,u,n,i,o,a);if(!(1&n)){var _=l&&xe.call(e,\"__wrapped__\"),b=p&&xe.call(t,\"__wrapped__\");if(_||b){var I=_?e.value():e,T=b?t.value():t;return a||(a=new Wn),o(I,T,n,i,a)}}return!!h&&(a||(a=new Wn),function(e,t,n,i,o,a){var s=1&n,c=eo(e),u=c.length;if(u!=eo(t).length&&!s)return!1;for(var d=u;d--;){var l=c[d];if(!(s?l in t:xe.call(t,l)))return!1}var p=a.get(e),h=a.get(t);if(p&&h)return p==t&&h==e;var f=!0;a.set(e,t),a.set(t,e);for(var y=s;++d<u;){var m=e[l=c[d]],g=t[l];if(i)var v=s?i(g,m,l,t,e,a):i(m,g,l,e,t,a);if(!(v===r?m===g||o(m,g,n,i,a):v)){f=!1;break}y||(y=\"constructor\"==l)}if(f&&!y){var _=e.constructor,b=t.constructor;_==b||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof _&&_ instanceof _&&\"function\"==typeof b&&b instanceof b||(f=!1)}return a.delete(e),a.delete(t),f}(e,t,n,i,o,a))}(e,t,n,i,kr,o))}function Rr(e,t,n,i){var o=n.length,a=o,s=!i;if(null==e)return!a;for(e=Ie(e);o--;){var c=n[o];if(s&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++o<a;){var u=(c=n[o])[0],d=e[u],l=c[1];if(s&&c[2]){if(d===r&&!(u in e))return!1}else{var p=new Wn;if(i)var h=i(d,l,u,e,t,p);if(!(h===r?kr(l,d,3,i,p):h))return!1}}return!0}function Mr(e){return!(!Xa(e)||(t=e,De&&De in t))&&(Za(e)?Fe:fe).test(Lo(e));var t}function xr(e){return\"function\"==typeof e?e:null==e?nc:\"object\"==typeof e?Va(e)?zr(e[0],e[1]):Lr(e):lc(e)}function Nr(e){if(!So(e))return yn(e);var t=[];for(var n in Ie(e))xe.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}function Dr(e,t){return e<t}function jr(e,t){var n=-1,r=Ha(e)?re(e.length):[];return dr(e,function(e,i,o){r[++n]=t(e,i,o)}),r}function Lr(e){var t=so(e);return 1==t.length&&t[0][2]?Co(t[0][0],t[0][1]):function(n){return n===e||Rr(n,e,t)}}function zr(e,t){return vo(e)&&wo(t)?Co(jo(e),t):function(n){var i=Es(n,e);return i===r&&i===t?Ps(n,e):kr(t,i,3)}}function Fr(e,t,n,i,o){e!==t&&mr(t,function(a,s){if(o||(o=new Wn),Xa(a))!function(e,t,n,i,o,a,s){var c=Po(e,n),u=Po(t,n),d=s.get(u);if(d)Qn(e,n,d);else{var l=a?a(c,u,n+\"\",e,t,s):r,p=l===r;if(p){var h=Va(u),f=!h&&Wa(u),y=!h&&!f&&cs(u);l=u,h||f||y?Va(c)?l=c:Ya(c)?l=Pi(c):f?(p=!1,l=bi(u,!0)):y?(p=!1,l=wi(u,!0)):l=[]:rs(u)||qa(u)?(l=c,qa(c)?l=ms(c):Xa(c)&&!Za(c)||(l=fo(u))):p=!1}p&&(s.set(u,l),o(l,u,i,a,s),s.delete(u)),Qn(e,n,l)}}(e,t,s,n,Fr,i,o);else{var c=i?i(Po(e,s),a,s+\"\",e,t,o):r;c===r&&(c=a),Qn(e,s,c)}},Rs)}function Br(e,t){var n=e.length;if(n)return mo(t+=t<0?n:0,n)?e[t]:r}function Ur(e,t,n){t=t.length?kt(t,function(e){return Va(e)?function(t){return Sr(t,1===e.length?e[0]:e)}:e}):[nc];var r=-1;t=kt(t,$t(oo()));var i=jr(e,function(e,n,i){var o=kt(t,function(t){return t(e)});return{criteria:o,index:++r,value:e}});return function(e){var t=e.length;for(e.sort(function(e,t){return function(e,t,n){for(var r=-1,i=e.criteria,o=t.criteria,a=i.length,s=n.length;++r<a;){var c=Ci(i[r],o[r]);if(c)return r>=s?c:c*(\"desc\"==n[r]?-1:1)}return e.index-t.index}(e,t,n)});t--;)e[t]=e[t].value;return e}(i)}function qr(e,t,n){for(var r=-1,i=t.length,o={};++r<i;){var a=t[r],s=Sr(e,a);n(s,a)&&Zr(o,mi(a,e),s)}return o}function Vr(e,t,n,r){var i=r?Ft:zt,o=-1,a=t.length,s=e;for(e===t&&(t=Pi(t)),n&&(s=kt(e,$t(n)));++o<a;)for(var c=0,u=t[o],d=n?n(u):u;(c=i(s,d,c,r))>-1;)s!==e&&We.call(s,c,1),We.call(e,c,1);return e}function Gr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==o){var o=i;mo(i)?We.call(e,i,1):ci(e,i)}}return e}function Hr(e,t){return e+ft(bn()*(t-e+1))}function Yr(e,t){var n=\"\";if(!e||t<1||t>d)return n;do{t%2&&(n+=e),(t=ft(t/2))&&(e+=e)}while(t);return n}function Wr(e,t){return To(Io(e,t,nc),e+\"\")}function $r(e){return Kn(Fs(e))}function Kr(e,t){var n=Fs(e);return Mo(n,or(t,0,n.length))}function Zr(e,t,n,i){if(!Xa(e))return e;for(var o=-1,a=(t=mi(t,e)).length,s=a-1,c=e;null!=c&&++o<a;){var u=jo(t[o]),d=n;if(\"__proto__\"===u||\"constructor\"===u||\"prototype\"===u)return e;if(o!=s){var l=c[u];(d=i?i(l,u,c):r)===r&&(d=Xa(l)?l:mo(t[o+1])?[]:{})}Xn(c,u,d),c=c[u]}return e}var Jr=An?function(e,t){return An.set(e,t),e}:nc,Qr=ot?function(e,t){return ot(e,\"toString\",{configurable:!0,enumerable:!1,value:Xs(t),writable:!0})}:nc;function Xr(e){return Mo(Fs(e))}function ei(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=re(i);++r<i;)o[r]=e[r+t];return o}function ti(e,t){var n;return dr(e,function(e,r,i){return!(n=t(e,r,i))}),!!n}function ni(e,t,n){var r=0,i=null==e?r:e.length;if(\"number\"==typeof t&&t==t&&i<=2147483647){for(;r<i;){var o=r+i>>>1,a=e[o];null!==a&&!ss(a)&&(n?a<=t:a<t)?r=o+1:i=o}return i}return ri(e,t,nc,n)}function ri(e,t,n,i){var o=0,a=null==e?0:e.length;if(0===a)return 0;for(var s=(t=n(t))!=t,c=null===t,u=ss(t),d=t===r;o<a;){var l=ft((o+a)/2),p=n(e[l]),h=p!==r,f=null===p,y=p==p,m=ss(p);if(s)var g=i||y;else g=d?y&&(i||h):c?y&&h&&(i||!f):u?y&&h&&!f&&(i||!m):!f&&!m&&(i?p<=t:p<t);g?o=l+1:a=l}return gn(a,4294967294)}function ii(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var a=e[n],s=t?t(a):a;if(!n||!Fa(s,c)){var c=s;o[i++]=0===a?0:a}}return o}function oi(e){return\"number\"==typeof e?e:ss(e)?l:+e}function ai(e){if(\"string\"==typeof e)return e;if(Va(e))return kt(e,ai)+\"\";if(ss(e))return Ln?Ln.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function si(e,t,n){var r=-1,i=At,o=e.length,a=!0,s=[],c=s;if(n)a=!1,i=Tt;else if(o>=200){var u=t?null:Yi(e);if(u)return sn(u);a=!1,i=Zt,c=new Yn}else c=t?[]:s;e:for(;++r<o;){var d=e[r],l=t?t(d):d;if(d=n||0!==d?d:0,a&&l==l){for(var p=c.length;p--;)if(c[p]===l)continue e;t&&c.push(l),s.push(d)}else i(c,l,n)||(c!==s&&c.push(l),s.push(d))}return s}function ci(e,t){var n=-1,r=(t=mi(t,e)).length;if(!r)return!0;for(;++n<r;){var i=jo(t[n]);if(\"__proto__\"===i&&!xe.call(e,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Eo(e,t);return null==o||delete o[jo(Ko(t))]}function ui(e,t,n,r){return Zr(e,t,n(Sr(e,t)),r)}function di(e,t,n,r){for(var i=e.length,o=r?i:-1;(r?o--:++o<i)&&t(e[o],o,e););return n?ei(e,r?0:o,r?o+1:i):ei(e,r?o+1:0,r?i:o)}function li(e,t){var n=e;return n instanceof qn&&(n=n.value()),Mt(t,function(e,t){return t.func.apply(t.thisArg,Rt([e],t.args))},n)}function pi(e,t,n){var r=e.length;if(r<2)return r?si(e[0]):[];for(var i=-1,o=re(r);++i<r;)for(var a=e[i],s=-1;++s<r;)s!=i&&(o[i]=ur(o[i]||a,e[s],t,n));return si(yr(o,1),t,n)}function hi(e,t,n){for(var i=-1,o=e.length,a=t.length,s={};++i<o;){var c=i<a?t[i]:r;n(s,e[i],c)}return s}function fi(e){return Ya(e)?e:[]}function yi(e){return\"function\"==typeof e?e:nc}function mi(e,t){return Va(e)?e:vo(e,t)?[e]:Do(gs(e))}var gi=Wr;function vi(e,t,n){var i=e.length;return n=n===r?i:n,!t&&n>=i?e:ei(e,t,n)}var _i=ct||function(e){return dt.clearTimeout(e)};function bi(e,t){if(t)return e.slice();var n=e.length,r=Ve?Ve(n):new e.constructor(n);return e.copy(r),r}function Si(e){var t=new e.constructor(e.byteLength);return new qe(t).set(new qe(e)),t}function wi(e,t){var n=t?Si(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function Ci(e,t){if(e!==t){var n=e!==r,i=null===e,o=e==e,a=ss(e),s=t!==r,c=null===t,u=t==t,d=ss(t);if(!c&&!d&&!a&&e>t||a&&s&&u&&!c&&!d||i&&s&&u||!n&&u||!o)return 1;if(!i&&!a&&!d&&e<t||d&&n&&o&&!i&&!a||c&&n&&o||!s&&o||!u)return-1}return 0}function Ii(e,t,n,r){for(var i=-1,o=e.length,a=n.length,s=-1,c=t.length,u=mn(o-a,0),d=re(c+u),l=!r;++s<c;)d[s]=t[s];for(;++i<a;)(l||i<o)&&(d[n[i]]=e[i]);for(;u--;)d[s++]=e[i++];return d}function Ei(e,t,n,r){for(var i=-1,o=e.length,a=-1,s=n.length,c=-1,u=t.length,d=mn(o-s,0),l=re(d+u),p=!r;++i<d;)l[i]=e[i];for(var h=i;++c<u;)l[h+c]=t[c];for(;++a<s;)(p||i<o)&&(l[h+n[a]]=e[i++]);return l}function Pi(e,t){var n=-1,r=e.length;for(t||(t=re(r));++n<r;)t[n]=e[n];return t}function Oi(e,t,n,i){var o=!n;n||(n={});for(var a=-1,s=t.length;++a<s;){var c=t[a],u=i?i(n[c],e[c],c,n,e):r;u===r&&(u=e[c]),o?rr(n,c,u):Xn(n,c,u)}return n}function Ai(e,t){return function(n,r){var i=Va(n)?Ct:tr,o=t?t():{};return i(n,e,oo(r,2),o)}}function Ti(e){return Wr(function(t,n){var i=-1,o=n.length,a=o>1?n[o-1]:r,s=o>2?n[2]:r;for(a=e.length>3&&\"function\"==typeof a?(o--,a):r,s&&go(n[0],n[1],s)&&(a=o<3?r:a,o=1),t=Ie(t);++i<o;){var c=n[i];c&&e(t,c,i,a)}return t})}function ki(e,t){return function(n,r){if(null==n)return n;if(!Ha(n))return e(n,r);for(var i=n.length,o=t?i:-1,a=Ie(n);(t?o--:++o<i)&&!1!==r(a[o],o,a););return n}}function Ri(e){return function(t,n,r){for(var i=-1,o=Ie(t),a=r(t),s=a.length;s--;){var c=a[e?s:++i];if(!1===n(o[c],c,o))break}return t}}function Mi(e){return function(t){var n=nn(t=gs(t))?dn(t):r,i=n?n[0]:t.charAt(0),o=n?vi(n,1).join(\"\"):t.slice(1);return i[e]()+o}}function xi(e){return function(t){return Mt(Zs(qs(t).replace(Ke,\"\")),e,\"\")}}function Ni(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=Fn(e.prototype),r=e.apply(n,t);return Xa(r)?r:n}}function Di(e){return function(t,n,i){var o=Ie(t);if(!Ha(t)){var a=oo(n,3);t=ks(t),n=function(e){return a(o[e],e,o)}}var s=e(t,n,i);return s>-1?o[a?t[s]:s]:r}}function ji(e){return Xi(function(t){var n=t.length,o=n,a=Un.prototype.thru;for(e&&t.reverse();o--;){var s=t[o];if(\"function\"!=typeof s)throw new Oe(i);if(a&&!c&&\"wrapper\"==ro(s))var c=new Un([],!0)}for(o=c?o:n;++o<n;){var u=ro(s=t[o]),d=\"wrapper\"==u?no(s):r;c=d&&_o(d[0])&&424==d[1]&&!d[4].length&&1==d[9]?c[ro(d[0])].apply(c,d[3]):1==s.length&&_o(s)?c[u]():c.thru(s)}return function(){var e=arguments,r=e[0];if(c&&1==e.length&&Va(r))return c.plant(r).value();for(var i=0,o=n?t[i].apply(this,e):r;++i<n;)o=t[i].call(this,o);return o}})}function Li(e,t,n,i,o,a,s,u,d,l){var p=t&c,h=1&t,f=2&t,y=24&t,m=512&t,g=f?r:Ni(e);return function c(){for(var v=arguments.length,_=re(v),b=v;b--;)_[b]=arguments[b];if(y)var S=io(c),w=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}(_,S);if(i&&(_=Ii(_,i,o,y)),a&&(_=Ei(_,a,s,y)),v-=w,y&&v<l){var C=an(_,S);return Gi(e,t,Li,c.placeholder,n,_,C,u,d,l-v)}var I=h?n:this,E=f?I[e]:e;return v=_.length,u?_=function(e,t){for(var n=e.length,i=gn(t.length,n),o=Pi(e);i--;){var a=t[i];e[i]=mo(a,n)?o[a]:r}return e}(_,u):m&&v>1&&_.reverse(),p&&d<v&&(_.length=d),this&&this!==dt&&this instanceof c&&(E=g||Ni(E)),E.apply(I,_)}}function zi(e,t){return function(n,r){return function(e,t,n,r){return vr(e,function(e,i,o){t(r,n(e),i,o)}),r}(n,e,t(r),{})}}function Fi(e,t){return function(n,i){var o;if(n===r&&i===r)return t;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ai(n),i=ai(i)):(n=oi(n),i=oi(i)),o=e(n,i)}return o}}function Bi(e){return Xi(function(t){return t=kt(t,$t(oo())),Wr(function(n){var r=this;return e(t,function(e){return wt(e,r,n)})})})}function Ui(e,t){var n=(t=t===r?\" \":ai(t)).length;if(n<2)return n?Yr(t,e):t;var i=Yr(t,pt(e/un(t)));return nn(t)?vi(dn(i),0,e).join(\"\"):i.slice(0,e)}function qi(e){return function(t,n,i){return i&&\"number\"!=typeof i&&go(t,n,i)&&(n=i=r),t=ps(t),n===r?(n=t,t=0):n=ps(n),function(e,t,n,r){for(var i=-1,o=mn(pt((t-e)/(n||1)),0),a=re(o);o--;)a[r?o:++i]=e,e+=n;return a}(t,n,i=i===r?t<n?1:-1:ps(i),e)}}function Vi(e){return function(t,n){return\"string\"==typeof t&&\"string\"==typeof n||(t=ys(t),n=ys(n)),e(t,n)}}function Gi(e,t,n,i,o,a,c,u,d,l){var p=8&t;t|=p?s:64,4&(t&=~(p?64:s))||(t&=-4);var h=[e,t,o,p?a:r,p?c:r,p?r:a,p?r:c,u,d,l],f=n.apply(r,h);return _o(e)&&Oo(f,h),f.placeholder=i,ko(f,e,t)}function Hi(e){var t=Ce[e];return function(e,n){if(e=ys(e),(n=null==n?0:gn(hs(n),292))&&Vt(e)){var r=(gs(e)+\"e\").split(\"e\");return+((r=(gs(t(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return t(e)}}var Yi=En&&1/sn(new En([,-0]))[1]==u?function(e){return new En(e)}:sc;function Wi(e){return function(t){var n=po(t);return n==S?rn(t):n==P?cn(t):function(e,t){return kt(t,function(t){return[t,e[t]]})}(t,e(t))}}function $i(e,t,n,o,u,d,l,p){var h=2&t;if(!h&&\"function\"!=typeof e)throw new Oe(i);var f=o?o.length:0;if(f||(t&=-97,o=u=r),l=l===r?l:mn(hs(l),0),p=p===r?p:hs(p),f-=u?u.length:0,64&t){var y=o,m=u;o=u=r}var g=h?r:no(e),v=[e,t,n,o,u,y,m,d,l,p];if(g&&function(e,t){var n=e[1],r=t[1],i=n|r,o=i<131,s=r==c&&8==n||r==c&&256==n&&e[7].length<=t[8]||384==r&&t[7].length<=t[8]&&8==n;if(!o&&!s)return e;1&r&&(e[2]=t[2],i|=1&n?0:4);var u=t[3];if(u){var d=e[3];e[3]=d?Ii(d,u,t[4]):u,e[4]=d?an(e[3],a):t[4]}(u=t[5])&&(d=e[5],e[5]=d?Ei(d,u,t[6]):u,e[6]=d?an(e[5],a):t[6]),(u=t[7])&&(e[7]=u),r&c&&(e[8]=null==e[8]?t[8]:gn(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=i}(v,g),e=v[0],t=v[1],n=v[2],o=v[3],u=v[4],!(p=v[9]=v[9]===r?h?0:e.length:mn(v[9]-f,0))&&24&t&&(t&=-25),t&&1!=t)_=8==t||16==t?function(e,t,n){var i=Ni(e);return function o(){for(var a=arguments.length,s=re(a),c=a,u=io(o);c--;)s[c]=arguments[c];var d=a<3&&s[0]!==u&&s[a-1]!==u?[]:an(s,u);return(a-=d.length)<n?Gi(e,t,Li,o.placeholder,r,s,d,r,r,n-a):wt(this&&this!==dt&&this instanceof o?i:e,this,s)}}(e,t,p):t!=s&&33!=t||u.length?Li.apply(r,v):function(e,t,n,r){var i=1&t,o=Ni(e);return function t(){for(var a=-1,s=arguments.length,c=-1,u=r.length,d=re(u+s),l=this&&this!==dt&&this instanceof t?o:e;++c<u;)d[c]=r[c];for(;s--;)d[c++]=arguments[++a];return wt(l,i?n:this,d)}}(e,t,n,o);else var _=function(e,t,n){var r=1&t,i=Ni(e);return function t(){return(this&&this!==dt&&this instanceof t?i:e).apply(r?n:this,arguments)}}(e,t,n);return ko((g?Jr:Oo)(_,v),e,t)}function Ki(e,t,n,i){return e===r||Fa(e,ke[n])&&!xe.call(i,n)?t:e}function Zi(e,t,n,i,o,a){return Xa(e)&&Xa(t)&&(a.set(t,e),Fr(e,t,r,Zi,a),a.delete(t)),e}function Ji(e){return rs(e)?r:e}function Qi(e,t,n,i,o,a){var s=1&n,c=e.length,u=t.length;if(c!=u&&!(s&&u>c))return!1;var d=a.get(e),l=a.get(t);if(d&&l)return d==t&&l==e;var p=-1,h=!0,f=2&n?new Yn:r;for(a.set(e,t),a.set(t,e);++p<c;){var y=e[p],m=t[p];if(i)var g=s?i(m,y,p,t,e,a):i(y,m,p,e,t,a);if(g!==r){if(g)continue;h=!1;break}if(f){if(!Nt(t,function(e,t){if(!Zt(f,t)&&(y===e||o(y,e,n,i,a)))return f.push(t)})){h=!1;break}}else if(y!==m&&!o(y,m,n,i,a)){h=!1;break}}return a.delete(e),a.delete(t),h}function Xi(e){return To(Io(e,r,Go),e+\"\")}function eo(e){return wr(e,ks,uo)}function to(e){return wr(e,Rs,lo)}var no=An?function(e){return An.get(e)}:sc;function ro(e){for(var t=e.name+\"\",n=Tn[t],r=xe.call(Tn,t)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==e)return i.name}return t}function io(e){return(xe.call(zn,\"placeholder\")?zn:e).placeholder}function oo(){var e=zn.iteratee||rc;return e=e===rc?xr:e,arguments.length?e(arguments[0],arguments[1]):e}function ao(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function so(e){for(var t=ks(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,wo(i)]}return t}function co(e,t){var n=function(e,t){return null==e?r:e[t]}(e,t);return Mr(n)?n:r}var uo=yt?function(e){return null==e?[]:(e=Ie(e),Ot(yt(e),function(t){return Ye.call(e,t)}))}:fc,lo=yt?function(e){for(var t=[];e;)Rt(t,uo(e)),e=Ge(e);return t}:fc,po=Cr;function ho(e,t,n){for(var r=-1,i=(t=mi(t,e)).length,o=!1;++r<i;){var a=jo(t[r]);if(!(o=null!=e&&n(e,a)))break;e=e[a]}return o||++r!=i?o:!!(i=null==e?0:e.length)&&Qa(i)&&mo(a,i)&&(Va(e)||qa(e))}function fo(e){return\"function\"!=typeof e.constructor||So(e)?{}:Fn(Ge(e))}function yo(e){return Va(e)||qa(e)||!!($e&&e&&e[$e])}function mo(e,t){var n=typeof e;return!!(t=t??d)&&(\"number\"==n||\"symbol\"!=n&&me.test(e))&&e>-1&&e%1==0&&e<t}function go(e,t,n){if(!Xa(n))return!1;var r=typeof t;return!!(\"number\"==r?Ha(n)&&mo(t,n.length):\"string\"==r&&t in n)&&Fa(n[t],e)}function vo(e,t){if(Va(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!ss(e))||Q.test(e)||!J.test(e)||null!=t&&e in Ie(t)}function _o(e){var t=ro(e),n=zn[t];if(\"function\"!=typeof n||!(t in qn.prototype))return!1;if(e===n)return!0;var r=no(n);return!!r&&e===r[0]}(wn&&po(new wn(new ArrayBuffer(1)))!=R||Cn&&po(new Cn)!=S||In&&po(In.resolve())!=I||En&&po(new En)!=P||Pn&&po(new Pn)!=T)&&(po=function(e){var t=Cr(e),n=t==C?e.constructor:r,i=n?Lo(n):\"\";if(i)switch(i){case kn:return R;case Rn:return S;case Mn:return I;case xn:return P;case Nn:return T}return t});var bo=Re?Za:yc;function So(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||ke)}function wo(e){return e==e&&!Xa(e)}function Co(e,t){return function(n){return null!=n&&n[e]===t&&(t!==r||e in Ie(n))}}function Io(e,t,n){return t=mn(t===r?e.length-1:t,0),function(){for(var r=arguments,i=-1,o=mn(r.length-t,0),a=re(o);++i<o;)a[i]=r[t+i];i=-1;for(var s=re(t+1);++i<t;)s[i]=r[i];return s[t]=n(a),wt(e,this,s)}}function Eo(e,t){return t.length<2?e:Sr(e,ei(t,0,-1))}function Po(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var Oo=Ro(Jr),Ao=lt||function(e,t){return dt.setTimeout(e,t)},To=Ro(Qr);function ko(e,t,n){var r=t+\"\";return To(e,function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(n>1?\"& \":\"\")+t[r],t=t.join(n>2?\", \":\" \"),e.replace(ie,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(r,function(e,t){return It(h,function(n){var r=\"_.\"+n[0];t&n[1]&&!At(e,r)&&e.push(r)}),e.sort()}(function(e){var t=e.match(oe);return t?t[1].split(ae):[]}(r),n)))}function Ro(e){var t=0,n=0;return function(){var i=vn(),o=16-(i-n);if(n=i,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(r,arguments)}}function Mo(e,t){var n=-1,i=e.length,o=i-1;for(t=t===r?i:t;++n<t;){var a=Hr(n,o),s=e[a];e[a]=e[n],e[n]=s}return e.length=t,e}var xo,No,Do=(xo=xa(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(X,function(e,n,r,i){t.push(r?i.replace(ue,\"$1\"):n||e)}),t},function(e){return 500===No.size&&No.clear(),e}),No=xo.cache,xo);function jo(e){if(\"string\"==typeof e||ss(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function Lo(e){if(null!=e){try{return Me.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}function zo(e){if(e instanceof qn)return e.clone();var t=new Un(e.__wrapped__,e.__chain__);return t.__actions__=Pi(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var Fo=Wr(function(e,t){return Ya(e)?ur(e,yr(t,1,Ya,!0)):[]}),Bo=Wr(function(e,t){var n=Ko(t);return Ya(n)&&(n=r),Ya(e)?ur(e,yr(t,1,Ya,!0),oo(n,2)):[]}),Uo=Wr(function(e,t){var n=Ko(t);return Ya(n)&&(n=r),Ya(e)?ur(e,yr(t,1,Ya,!0),r,n):[]});function qo(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:hs(n);return i<0&&(i=mn(r+i,0)),Lt(e,oo(t,3),i)}function Vo(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var o=i-1;return n!==r&&(o=hs(n),o=n<0?mn(i+o,0):gn(o,i-1)),Lt(e,oo(t,3),o,!0)}function Go(e){return null!=e&&e.length?yr(e,1):[]}function Ho(e){return e&&e.length?e[0]:r}var Yo=Wr(function(e){var t=kt(e,fi);return t.length&&t[0]===e[0]?Or(t):[]}),Wo=Wr(function(e){var t=Ko(e),n=kt(e,fi);return t===Ko(n)?t=r:n.pop(),n.length&&n[0]===e[0]?Or(n,oo(t,2)):[]}),$o=Wr(function(e){var t=Ko(e),n=kt(e,fi);return(t=\"function\"==typeof t?t:r)&&n.pop(),n.length&&n[0]===e[0]?Or(n,r,t):[]});function Ko(e){var t=null==e?0:e.length;return t?e[t-1]:r}var Zo=Wr(Jo);function Jo(e,t){return e&&e.length&&t&&t.length?Vr(e,t):e}var Qo=Xi(function(e,t){var n=null==e?0:e.length,r=ir(e,t);return Gr(e,kt(t,function(e){return mo(e,n)?+e:e}).sort(Ci)),r});function Xo(e){return null==e?e:Sn.call(e)}var ea=Wr(function(e){return si(yr(e,1,Ya,!0))}),ta=Wr(function(e){var t=Ko(e);return Ya(t)&&(t=r),si(yr(e,1,Ya,!0),oo(t,2))}),na=Wr(function(e){var t=Ko(e);return t=\"function\"==typeof t?t:r,si(yr(e,1,Ya,!0),r,t)});function ra(e){if(!e||!e.length)return[];var t=0;return e=Ot(e,function(e){if(Ya(e))return t=mn(e.length,t),!0}),Yt(t,function(t){return kt(e,qt(t))})}function ia(e,t){if(!e||!e.length)return[];var n=ra(e);return null==t?n:kt(n,function(e){return wt(t,r,e)})}var oa=Wr(function(e,t){return Ya(e)?ur(e,t):[]}),aa=Wr(function(e){return pi(Ot(e,Ya))}),sa=Wr(function(e){var t=Ko(e);return Ya(t)&&(t=r),pi(Ot(e,Ya),oo(t,2))}),ca=Wr(function(e){var t=Ko(e);return t=\"function\"==typeof t?t:r,pi(Ot(e,Ya),r,t)}),ua=Wr(ra),da=Wr(function(e){var t=e.length,n=t>1?e[t-1]:r;return n=\"function\"==typeof n?(e.pop(),n):r,ia(e,n)});function la(e){var t=zn(e);return t.__chain__=!0,t}function pa(e,t){return t(e)}var ha=Xi(function(e){var t=e.length,n=t?e[0]:0,i=this.__wrapped__,o=function(t){return ir(t,e)};return!(t>1||this.__actions__.length)&&i instanceof qn&&mo(n)?((i=i.slice(n,+n+(t?1:0))).__actions__.push({func:pa,args:[o],thisArg:r}),new Un(i,this.__chain__).thru(function(e){return t&&!e.length&&e.push(r),e})):this.thru(o)}),fa=Ai(function(e,t,n){xe.call(e,n)?++e[n]:rr(e,n,1)}),ya=Di(qo),ma=Di(Vo);function ga(e,t){return(Va(e)?It:dr)(e,oo(t,3))}function va(e,t){return(Va(e)?Et:lr)(e,oo(t,3))}var _a=Ai(function(e,t,n){xe.call(e,n)?e[n].push(t):rr(e,n,[t])}),ba=Wr(function(e,t,n){var r=-1,i=\"function\"==typeof t,o=Ha(e)?re(e.length):[];return dr(e,function(e){o[++r]=i?wt(t,e,n):Ar(e,t,n)}),o}),Sa=Ai(function(e,t,n){rr(e,n,t)});function wa(e,t){return(Va(e)?kt:jr)(e,oo(t,3))}var Ca=Ai(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]}),Ia=Wr(function(e,t){if(null==e)return[];var n=t.length;return n>1&&go(e,t[0],t[1])?t=[]:n>2&&go(t[0],t[1],t[2])&&(t=[t[0]]),Ur(e,yr(t,1),[])}),Ea=ut||function(){return dt.Date.now()};function Pa(e,t,n){return t=n?r:t,t=e&&null==t?e.length:t,$i(e,c,r,r,r,r,t)}function Oa(e,t){var n;if(\"function\"!=typeof t)throw new Oe(i);return e=hs(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=r),n}}var Aa=Wr(function(e,t,n){var r=1;if(n.length){var i=an(n,io(Aa));r|=s}return $i(e,r,t,n,i)}),Ta=Wr(function(e,t,n){var r=3;if(n.length){var i=an(n,io(Ta));r|=s}return $i(t,r,e,n,i)});function ka(e,t,n){var o,a,s,c,u,d,l=0,p=!1,h=!1,f=!0;if(\"function\"!=typeof e)throw new Oe(i);function y(t){var n=o,i=a;return o=a=r,l=t,c=e.apply(i,n)}function m(e){var n=e-d;return d===r||n>=t||n<0||h&&e-l>=s}function g(){var e=Ea();if(m(e))return v(e);u=Ao(g,function(e){var n=t-(e-d);return h?gn(n,s-(e-l)):n}(e))}function v(e){return u=r,f&&o?y(e):(o=a=r,c)}function _(){var e=Ea(),n=m(e);if(o=arguments,a=this,d=e,n){if(u===r)return function(e){return l=e,u=Ao(g,t),p?y(e):c}(d);if(h)return _i(u),u=Ao(g,t),y(d)}return u===r&&(u=Ao(g,t)),c}return t=ys(t)||0,Xa(n)&&(p=!!n.leading,s=(h=\"maxWait\"in n)?mn(ys(n.maxWait)||0,t):s,f=\"trailing\"in n?!!n.trailing:f),_.cancel=function(){u!==r&&_i(u),l=0,o=d=a=u=r},_.flush=function(){return u===r?c:v(Ea())},_}var Ra=Wr(function(e,t){return cr(e,1,t)}),Ma=Wr(function(e,t,n){return cr(e,ys(t)||0,n)});function xa(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new Oe(i);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(xa.Cache||Hn),n}function Na(e){if(\"function\"!=typeof e)throw new Oe(i);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}xa.Cache=Hn;var Da=gi(function(e,t){var n=(t=1==t.length&&Va(t[0])?kt(t[0],$t(oo())):kt(yr(t,1),$t(oo()))).length;return Wr(function(r){for(var i=-1,o=gn(r.length,n);++i<o;)r[i]=t[i].call(this,r[i]);return wt(e,this,r)})}),ja=Wr(function(e,t){var n=an(t,io(ja));return $i(e,s,r,t,n)}),La=Wr(function(e,t){var n=an(t,io(La));return $i(e,64,r,t,n)}),za=Xi(function(e,t){return $i(e,256,r,r,r,t)});function Fa(e,t){return e===t||e!=e&&t!=t}var Ba=Vi(Ir),Ua=Vi(function(e,t){return e>=t}),qa=Tr(function(){return arguments}())?Tr:function(e){return es(e)&&xe.call(e,\"callee\")&&!Ye.call(e,\"callee\")},Va=re.isArray,Ga=mt?$t(mt):function(e){return es(e)&&Cr(e)==k};function Ha(e){return null!=e&&Qa(e.length)&&!Za(e)}function Ya(e){return es(e)&&Ha(e)}var Wa=Dt||yc,$a=gt?$t(gt):function(e){return es(e)&&Cr(e)==g};function Ka(e){if(!es(e))return!1;var t=Cr(e);return t==v||\"[object DOMException]\"==t||\"string\"==typeof e.message&&\"string\"==typeof e.name&&!rs(e)}function Za(e){if(!Xa(e))return!1;var t=Cr(e);return t==_||t==b||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function Ja(e){return\"number\"==typeof e&&e==hs(e)}function Qa(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=d}function Xa(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function es(e){return null!=e&&\"object\"==typeof e}var ts=vt?$t(vt):function(e){return es(e)&&po(e)==S};function ns(e){return\"number\"==typeof e||es(e)&&Cr(e)==w}function rs(e){if(!es(e)||Cr(e)!=C)return!1;var t=Ge(e);if(null===t)return!0;var n=xe.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&Me.call(n)==Le}var is=_t?$t(_t):function(e){return es(e)&&Cr(e)==E},os=bt?$t(bt):function(e){return es(e)&&po(e)==P};function as(e){return\"string\"==typeof e||!Va(e)&&es(e)&&Cr(e)==O}function ss(e){return\"symbol\"==typeof e||es(e)&&Cr(e)==A}var cs=St?$t(St):function(e){return es(e)&&Qa(e.length)&&!!rt[Cr(e)]},us=Vi(Dr),ds=Vi(function(e,t){return e<=t});function ls(e){if(!e)return[];if(Ha(e))return as(e)?dn(e):Pi(e);if(Je&&e[Je])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Je]());var t=po(e);return(t==S?rn:t==P?sn:Fs)(e)}function ps(e){return e?(e=ys(e))===u||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function hs(e){var t=ps(e),n=t%1;return t==t?n?t-n:t:0}function fs(e){return e?or(hs(e),0,p):0}function ys(e){if(\"number\"==typeof e)return e;if(ss(e))return l;if(Xa(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=Xa(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=Wt(e);var n=he.test(e);return n||ye.test(e)?st(e.slice(2),n?2:8):pe.test(e)?l:+e}function ms(e){return Oi(e,Rs(e))}function gs(e){return null==e?\"\":ai(e)}var vs=Ti(function(e,t){if(So(t)||Ha(t))Oi(t,ks(t),e);else for(var n in t)xe.call(t,n)&&Xn(e,n,t[n])}),_s=Ti(function(e,t){Oi(t,Rs(t),e)}),bs=Ti(function(e,t,n,r){Oi(t,Rs(t),e,r)}),Ss=Ti(function(e,t,n,r){Oi(t,ks(t),e,r)}),ws=Xi(ir),Cs=Wr(function(e,t){e=Ie(e);var n=-1,i=t.length,o=i>2?t[2]:r;for(o&&go(t[0],t[1],o)&&(i=1);++n<i;)for(var a=t[n],s=Rs(a),c=-1,u=s.length;++c<u;){var d=s[c],l=e[d];(l===r||Fa(l,ke[d])&&!xe.call(e,d))&&(e[d]=a[d])}return e}),Is=Wr(function(e){return e.push(r,Zi),wt(xs,r,e)});function Es(e,t,n){var i=null==e?r:Sr(e,t);return i===r?n:i}function Ps(e,t){return null!=e&&ho(e,t,Pr)}var Os=zi(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=je.call(t)),e[t]=n},Xs(nc)),As=zi(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=je.call(t)),xe.call(e,t)?e[t].push(n):e[t]=[n]},oo),Ts=Wr(Ar);function ks(e){return Ha(e)?$n(e):Nr(e)}function Rs(e){return Ha(e)?$n(e,!0):function(e){if(!Xa(e))return function(e){var t=[];if(null!=e)for(var n in Ie(e))t.push(n);return t}(e);var t=So(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&xe.call(e,r))&&n.push(r);return n}(e)}var Ms=Ti(function(e,t,n){Fr(e,t,n)}),xs=Ti(function(e,t,n,r){Fr(e,t,n,r)}),Ns=Xi(function(e,t){var n={};if(null==e)return n;var r=!1;t=kt(t,function(t){return t=mi(t,e),r||(r=t.length>1),t}),Oi(e,to(e),n),r&&(n=ar(n,7,Ji));for(var i=t.length;i--;)ci(n,t[i]);return n}),Ds=Xi(function(e,t){return null==e?{}:function(e,t){return qr(e,t,function(t,n){return Ps(e,n)})}(e,t)});function js(e,t){if(null==e)return{};var n=kt(to(e),function(e){return[e]});return t=oo(t),qr(e,n,function(e,n){return t(e,n[0])})}var Ls=Wi(ks),zs=Wi(Rs);function Fs(e){return null==e?[]:Kt(e,ks(e))}var Bs=xi(function(e,t,n){return t=t.toLowerCase(),e+(n?Us(t):t)});function Us(e){return Ks(gs(e).toLowerCase())}function qs(e){return(e=gs(e))&&e.replace(ge,Xt).replace(Ze,\"\")}var Vs=xi(function(e,t,n){return e+(n?\"-\":\"\")+t.toLowerCase()}),Gs=xi(function(e,t,n){return e+(n?\" \":\"\")+t.toLowerCase()}),Hs=Mi(\"toLowerCase\"),Ys=xi(function(e,t,n){return e+(n?\"_\":\"\")+t.toLowerCase()}),Ws=xi(function(e,t,n){return e+(n?\" \":\"\")+Ks(t)}),$s=xi(function(e,t,n){return e+(n?\" \":\"\")+t.toUpperCase()}),Ks=Mi(\"toUpperCase\");function Zs(e,t,n){return e=gs(e),(t=n?r:t)===r?function(e){return et.test(e)}(e)?function(e){return e.match(Qe)||[]}(e):function(e){return e.match(se)||[]}(e):e.match(t)||[]}var Js=Wr(function(e,t){try{return wt(e,r,t)}catch(e){return Ka(e)?e:new Se(e)}}),Qs=Xi(function(e,t){return It(t,function(t){t=jo(t),rr(e,t,Aa(e[t],e))}),e});function Xs(e){return function(){return e}}var ec=ji(),tc=ji(!0);function nc(e){return e}function rc(e){return xr(\"function\"==typeof e?e:ar(e,1))}var ic=Wr(function(e,t){return function(n){return Ar(n,e,t)}}),oc=Wr(function(e,t){return function(n){return Ar(e,n,t)}});function ac(e,t,n){var r=ks(t),i=br(t,r);null!=n||Xa(t)&&(i.length||!r.length)||(n=t,t=e,e=this,i=br(t,ks(t)));var o=!(Xa(n)&&\"chain\"in n&&!n.chain),a=Za(e);return It(i,function(n){var r=t[n];e[n]=r,a&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__);return(n.__actions__=Pi(this.__actions__)).push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,Rt([this.value()],arguments))})}),e}function sc(){}var cc=Bi(kt),uc=Bi(Pt),dc=Bi(Nt);function lc(e){return vo(e)?qt(jo(e)):function(e){return function(t){return Sr(t,e)}}(e)}var pc=qi(),hc=qi(!0);function fc(){return[]}function yc(){return!1}var mc,gc=Fi(function(e,t){return e+t},0),vc=Hi(\"ceil\"),_c=Fi(function(e,t){return e/t},1),bc=Hi(\"floor\"),Sc=Fi(function(e,t){return e*t},1),wc=Hi(\"round\"),Cc=Fi(function(e,t){return e-t},0);return zn.after=function(e,t){if(\"function\"!=typeof t)throw new Oe(i);return e=hs(e),function(){if(--e<1)return t.apply(this,arguments)}},zn.ary=Pa,zn.assign=vs,zn.assignIn=_s,zn.assignInWith=bs,zn.assignWith=Ss,zn.at=ws,zn.before=Oa,zn.bind=Aa,zn.bindAll=Qs,zn.bindKey=Ta,zn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Va(e)?e:[e]},zn.chain=la,zn.chunk=function(e,t,n){t=(n?go(e,t,n):t===r)?1:mn(hs(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var o=0,a=0,s=re(pt(i/t));o<i;)s[a++]=ei(e,o,o+=t);return s},zn.compact=function(e){for(var t=-1,n=null==e?0:e.length,r=0,i=[];++t<n;){var o=e[t];o&&(i[r++]=o)}return i},zn.concat=function(){var e=arguments.length;if(!e)return[];for(var t=re(e-1),n=arguments[0],r=e;r--;)t[r-1]=arguments[r];return Rt(Va(n)?Pi(n):[n],yr(t,1))},zn.cond=function(e){var t=null==e?0:e.length,n=oo();return e=t?kt(e,function(e){if(\"function\"!=typeof e[1])throw new Oe(i);return[n(e[0]),e[1]]}):[],Wr(function(n){for(var r=-1;++r<t;){var i=e[r];if(wt(i[0],this,n))return wt(i[1],this,n)}})},zn.conforms=function(e){return function(e){var t=ks(e);return function(n){return sr(n,e,t)}}(ar(e,1))},zn.constant=Xs,zn.countBy=fa,zn.create=function(e,t){var n=Fn(e);return null==t?n:nr(n,t)},zn.curry=function e(t,n,i){var o=$i(t,8,r,r,r,r,r,n=i?r:n);return o.placeholder=e.placeholder,o},zn.curryRight=function e(t,n,i){var o=$i(t,16,r,r,r,r,r,n=i?r:n);return o.placeholder=e.placeholder,o},zn.debounce=ka,zn.defaults=Cs,zn.defaultsDeep=Is,zn.defer=Ra,zn.delay=Ma,zn.difference=Fo,zn.differenceBy=Bo,zn.differenceWith=Uo,zn.drop=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,(t=n||t===r?1:hs(t))<0?0:t,i):[]},zn.dropRight=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,0,(t=i-(t=n||t===r?1:hs(t)))<0?0:t):[]},zn.dropRightWhile=function(e,t){return e&&e.length?di(e,oo(t,3),!0,!0):[]},zn.dropWhile=function(e,t){return e&&e.length?di(e,oo(t,3),!0):[]},zn.fill=function(e,t,n,i){var o=null==e?0:e.length;return o?(n&&\"number\"!=typeof n&&go(e,t,n)&&(n=0,i=o),function(e,t,n,i){var o=e.length;for((n=hs(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:hs(i))<0&&(i+=o),i=n>i?0:fs(i);n<i;)e[n++]=t;return e}(e,t,n,i)):[]},zn.filter=function(e,t){return(Va(e)?Ot:fr)(e,oo(t,3))},zn.flatMap=function(e,t){return yr(wa(e,t),1)},zn.flatMapDeep=function(e,t){return yr(wa(e,t),u)},zn.flatMapDepth=function(e,t,n){return n=n===r?1:hs(n),yr(wa(e,t),n)},zn.flatten=Go,zn.flattenDeep=function(e){return null!=e&&e.length?yr(e,u):[]},zn.flattenDepth=function(e,t){return null!=e&&e.length?yr(e,t=t===r?1:hs(t)):[]},zn.flip=function(e){return $i(e,512)},zn.flow=ec,zn.flowRight=tc,zn.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,r={};++t<n;){var i=e[t];rr(r,i[0],i[1])}return r},zn.functions=function(e){return null==e?[]:br(e,ks(e))},zn.functionsIn=function(e){return null==e?[]:br(e,Rs(e))},zn.groupBy=_a,zn.initial=function(e){return null!=e&&e.length?ei(e,0,-1):[]},zn.intersection=Yo,zn.intersectionBy=Wo,zn.intersectionWith=$o,zn.invert=Os,zn.invertBy=As,zn.invokeMap=ba,zn.iteratee=rc,zn.keyBy=Sa,zn.keys=ks,zn.keysIn=Rs,zn.map=wa,zn.mapKeys=function(e,t){var n={};return t=oo(t,3),vr(e,function(e,r,i){rr(n,t(e,r,i),e)}),n},zn.mapValues=function(e,t){var n={};return t=oo(t,3),vr(e,function(e,r,i){rr(n,r,t(e,r,i))}),n},zn.matches=function(e){return Lr(ar(e,1))},zn.matchesProperty=function(e,t){return zr(e,ar(t,1))},zn.memoize=xa,zn.merge=Ms,zn.mergeWith=xs,zn.method=ic,zn.methodOf=oc,zn.mixin=ac,zn.negate=Na,zn.nthArg=function(e){return e=hs(e),Wr(function(t){return Br(t,e)})},zn.omit=Ns,zn.omitBy=function(e,t){return js(e,Na(oo(t)))},zn.once=function(e){return Oa(2,e)},zn.orderBy=function(e,t,n,i){return null==e?[]:(Va(t)||(t=null==t?[]:[t]),Va(n=i?r:n)||(n=null==n?[]:[n]),Ur(e,t,n))},zn.over=cc,zn.overArgs=Da,zn.overEvery=uc,zn.overSome=dc,zn.partial=ja,zn.partialRight=La,zn.partition=Ca,zn.pick=Ds,zn.pickBy=js,zn.property=lc,zn.propertyOf=function(e){return function(t){return null==e?r:Sr(e,t)}},zn.pull=Zo,zn.pullAll=Jo,zn.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?Vr(e,t,oo(n,2)):e},zn.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?Vr(e,t,r,n):e},zn.pullAt=Qo,zn.range=pc,zn.rangeRight=hc,zn.rearg=za,zn.reject=function(e,t){return(Va(e)?Ot:fr)(e,Na(oo(t,3)))},zn.remove=function(e,t){var n=[];if(!e||!e.length)return n;var r=-1,i=[],o=e.length;for(t=oo(t,3);++r<o;){var a=e[r];t(a,r,e)&&(n.push(a),i.push(r))}return Gr(e,i),n},zn.rest=function(e,t){if(\"function\"!=typeof e)throw new Oe(i);return Wr(e,t=t===r?t:hs(t))},zn.reverse=Xo,zn.sampleSize=function(e,t,n){return t=(n?go(e,t,n):t===r)?1:hs(t),(Va(e)?Zn:Kr)(e,t)},zn.set=function(e,t,n){return null==e?e:Zr(e,t,n)},zn.setWith=function(e,t,n,i){return i=\"function\"==typeof i?i:r,null==e?e:Zr(e,t,n,i)},zn.shuffle=function(e){return(Va(e)?Jn:Xr)(e)},zn.slice=function(e,t,n){var i=null==e?0:e.length;return i?(n&&\"number\"!=typeof n&&go(e,t,n)?(t=0,n=i):(t=null==t?0:hs(t),n=n===r?i:hs(n)),ei(e,t,n)):[]},zn.sortBy=Ia,zn.sortedUniq=function(e){return e&&e.length?ii(e):[]},zn.sortedUniqBy=function(e,t){return e&&e.length?ii(e,oo(t,2)):[]},zn.split=function(e,t,n){return n&&\"number\"!=typeof n&&go(e,t,n)&&(t=n=r),(n=n===r?p:n>>>0)?(e=gs(e))&&(\"string\"==typeof t||null!=t&&!is(t))&&!(t=ai(t))&&nn(e)?vi(dn(e),0,n):e.split(t,n):[]},zn.spread=function(e,t){if(\"function\"!=typeof e)throw new Oe(i);return t=null==t?0:mn(hs(t),0),Wr(function(n){var r=n[t],i=vi(n,0,t);return r&&Rt(i,r),wt(e,this,i)})},zn.tail=function(e){var t=null==e?0:e.length;return t?ei(e,1,t):[]},zn.take=function(e,t,n){return e&&e.length?ei(e,0,(t=n||t===r?1:hs(t))<0?0:t):[]},zn.takeRight=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,(t=i-(t=n||t===r?1:hs(t)))<0?0:t,i):[]},zn.takeRightWhile=function(e,t){return e&&e.length?di(e,oo(t,3),!1,!0):[]},zn.takeWhile=function(e,t){return e&&e.length?di(e,oo(t,3)):[]},zn.tap=function(e,t){return t(e),e},zn.throttle=function(e,t,n){var r=!0,o=!0;if(\"function\"!=typeof e)throw new Oe(i);return Xa(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),ka(e,t,{leading:r,maxWait:t,trailing:o})},zn.thru=pa,zn.toArray=ls,zn.toPairs=Ls,zn.toPairsIn=zs,zn.toPath=function(e){return Va(e)?kt(e,jo):ss(e)?[e]:Pi(Do(gs(e)))},zn.toPlainObject=ms,zn.transform=function(e,t,n){var r=Va(e),i=r||Wa(e)||cs(e);if(t=oo(t,4),null==n){var o=e&&e.constructor;n=i?r?new o:[]:Xa(e)&&Za(o)?Fn(Ge(e)):{}}return(i?It:vr)(e,function(e,r,i){return t(n,e,r,i)}),n},zn.unary=function(e){return Pa(e,1)},zn.union=ea,zn.unionBy=ta,zn.unionWith=na,zn.uniq=function(e){return e&&e.length?si(e):[]},zn.uniqBy=function(e,t){return e&&e.length?si(e,oo(t,2)):[]},zn.uniqWith=function(e,t){return t=\"function\"==typeof t?t:r,e&&e.length?si(e,r,t):[]},zn.unset=function(e,t){return null==e||ci(e,t)},zn.unzip=ra,zn.unzipWith=ia,zn.update=function(e,t,n){return null==e?e:ui(e,t,yi(n))},zn.updateWith=function(e,t,n,i){return i=\"function\"==typeof i?i:r,null==e?e:ui(e,t,yi(n),i)},zn.values=Fs,zn.valuesIn=function(e){return null==e?[]:Kt(e,Rs(e))},zn.without=oa,zn.words=Zs,zn.wrap=function(e,t){return ja(yi(t),e)},zn.xor=aa,zn.xorBy=sa,zn.xorWith=ca,zn.zip=ua,zn.zipObject=function(e,t){return hi(e||[],t||[],Xn)},zn.zipObjectDeep=function(e,t){return hi(e||[],t||[],Zr)},zn.zipWith=da,zn.entries=Ls,zn.entriesIn=zs,zn.extend=_s,zn.extendWith=bs,ac(zn,zn),zn.add=gc,zn.attempt=Js,zn.camelCase=Bs,zn.capitalize=Us,zn.ceil=vc,zn.clamp=function(e,t,n){return n===r&&(n=t,t=r),n!==r&&(n=(n=ys(n))==n?n:0),t!==r&&(t=(t=ys(t))==t?t:0),or(ys(e),t,n)},zn.clone=function(e){return ar(e,4)},zn.cloneDeep=function(e){return ar(e,5)},zn.cloneDeepWith=function(e,t){return ar(e,5,t=\"function\"==typeof t?t:r)},zn.cloneWith=function(e,t){return ar(e,4,t=\"function\"==typeof t?t:r)},zn.conformsTo=function(e,t){return null==t||sr(e,t,ks(t))},zn.deburr=qs,zn.defaultTo=function(e,t){return null==e||e!=e?t:e},zn.divide=_c,zn.endsWith=function(e,t,n){e=gs(e),t=ai(t);var i=e.length,o=n=n===r?i:or(hs(n),0,i);return(n-=t.length)>=0&&e.slice(n,o)==t},zn.eq=Fa,zn.escape=function(e){return(e=gs(e))&&W.test(e)?e.replace(H,en):e},zn.escapeRegExp=function(e){return(e=gs(e))&&te.test(e)?e.replace(ee,\"\\\\$&\"):e},zn.every=function(e,t,n){var i=Va(e)?Pt:pr;return n&&go(e,t,n)&&(t=r),i(e,oo(t,3))},zn.find=ya,zn.findIndex=qo,zn.findKey=function(e,t){return jt(e,oo(t,3),vr)},zn.findLast=ma,zn.findLastIndex=Vo,zn.findLastKey=function(e,t){return jt(e,oo(t,3),_r)},zn.floor=bc,zn.forEach=ga,zn.forEachRight=va,zn.forIn=function(e,t){return null==e?e:mr(e,oo(t,3),Rs)},zn.forInRight=function(e,t){return null==e?e:gr(e,oo(t,3),Rs)},zn.forOwn=function(e,t){return e&&vr(e,oo(t,3))},zn.forOwnRight=function(e,t){return e&&_r(e,oo(t,3))},zn.get=Es,zn.gt=Ba,zn.gte=Ua,zn.has=function(e,t){return null!=e&&ho(e,t,Er)},zn.hasIn=Ps,zn.head=Ho,zn.identity=nc,zn.includes=function(e,t,n,r){e=Ha(e)?e:Fs(e),n=n&&!r?hs(n):0;var i=e.length;return n<0&&(n=mn(i+n,0)),as(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&zt(e,t,n)>-1},zn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:hs(n);return i<0&&(i=mn(r+i,0)),zt(e,t,i)},zn.inRange=function(e,t,n){return t=ps(t),n===r?(n=t,t=0):n=ps(n),function(e,t,n){return e>=gn(t,n)&&e<mn(t,n)}(e=ys(e),t,n)},zn.invoke=Ts,zn.isArguments=qa,zn.isArray=Va,zn.isArrayBuffer=Ga,zn.isArrayLike=Ha,zn.isArrayLikeObject=Ya,zn.isBoolean=function(e){return!0===e||!1===e||es(e)&&Cr(e)==m},zn.isBuffer=Wa,zn.isDate=$a,zn.isElement=function(e){return es(e)&&1===e.nodeType&&!rs(e)},zn.isEmpty=function(e){if(null==e)return!0;if(Ha(e)&&(Va(e)||\"string\"==typeof e||\"function\"==typeof e.splice||Wa(e)||cs(e)||qa(e)))return!e.length;var t=po(e);if(t==S||t==P)return!e.size;if(So(e))return!Nr(e).length;for(var n in e)if(xe.call(e,n))return!1;return!0},zn.isEqual=function(e,t){return kr(e,t)},zn.isEqualWith=function(e,t,n){var i=(n=\"function\"==typeof n?n:r)?n(e,t):r;return i===r?kr(e,t,r,n):!!i},zn.isError=Ka,zn.isFinite=function(e){return\"number\"==typeof e&&Vt(e)},zn.isFunction=Za,zn.isInteger=Ja,zn.isLength=Qa,zn.isMap=ts,zn.isMatch=function(e,t){return e===t||Rr(e,t,so(t))},zn.isMatchWith=function(e,t,n){return n=\"function\"==typeof n?n:r,Rr(e,t,so(t),n)},zn.isNaN=function(e){return ns(e)&&e!=+e},zn.isNative=function(e){if(bo(e))throw new Se(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Mr(e)},zn.isNil=function(e){return null==e},zn.isNull=function(e){return null===e},zn.isNumber=ns,zn.isObject=Xa,zn.isObjectLike=es,zn.isPlainObject=rs,zn.isRegExp=is,zn.isSafeInteger=function(e){return Ja(e)&&e>=-9007199254740991&&e<=d},zn.isSet=os,zn.isString=as,zn.isSymbol=ss,zn.isTypedArray=cs,zn.isUndefined=function(e){return e===r},zn.isWeakMap=function(e){return es(e)&&po(e)==T},zn.isWeakSet=function(e){return es(e)&&\"[object WeakSet]\"==Cr(e)},zn.join=function(e,t){return null==e?\"\":fn.call(e,t)},zn.kebabCase=Vs,zn.last=Ko,zn.lastIndexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=hs(n))<0?mn(i+o,0):gn(o,i-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,o):Lt(e,Bt,o,!0)},zn.lowerCase=Gs,zn.lowerFirst=Hs,zn.lt=us,zn.lte=ds,zn.max=function(e){return e&&e.length?hr(e,nc,Ir):r},zn.maxBy=function(e,t){return e&&e.length?hr(e,oo(t,2),Ir):r},zn.mean=function(e){return Ut(e,nc)},zn.meanBy=function(e,t){return Ut(e,oo(t,2))},zn.min=function(e){return e&&e.length?hr(e,nc,Dr):r},zn.minBy=function(e,t){return e&&e.length?hr(e,oo(t,2),Dr):r},zn.stubArray=fc,zn.stubFalse=yc,zn.stubObject=function(){return{}},zn.stubString=function(){return\"\"},zn.stubTrue=function(){return!0},zn.multiply=Sc,zn.nth=function(e,t){return e&&e.length?Br(e,hs(t)):r},zn.noConflict=function(){return dt._===this&&(dt._=ze),this},zn.noop=sc,zn.now=Ea,zn.pad=function(e,t,n){e=gs(e);var r=(t=hs(t))?un(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return Ui(ft(i),n)+e+Ui(pt(i),n)},zn.padEnd=function(e,t,n){e=gs(e);var r=(t=hs(t))?un(e):0;return t&&r<t?e+Ui(t-r,n):e},zn.padStart=function(e,t,n){e=gs(e);var r=(t=hs(t))?un(e):0;return t&&r<t?Ui(t-r,n)+e:e},zn.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),_n(gs(e).replace(ne,\"\"),t||0)},zn.random=function(e,t,n){if(n&&\"boolean\"!=typeof n&&go(e,t,n)&&(t=n=r),n===r&&(\"boolean\"==typeof t?(n=t,t=r):\"boolean\"==typeof e&&(n=e,e=r)),e===r&&t===r?(e=0,t=1):(e=ps(e),t===r?(t=e,e=0):t=ps(t)),e>t){var i=e;e=t,t=i}if(n||e%1||t%1){var o=bn();return gn(e+o*(t-e+at(\"1e-\"+((o+\"\").length-1))),t)}return Hr(e,t)},zn.reduce=function(e,t,n){var r=Va(e)?Mt:Gt,i=arguments.length<3;return r(e,oo(t,4),n,i,dr)},zn.reduceRight=function(e,t,n){var r=Va(e)?xt:Gt,i=arguments.length<3;return r(e,oo(t,4),n,i,lr)},zn.repeat=function(e,t,n){return t=(n?go(e,t,n):t===r)?1:hs(t),Yr(gs(e),t)},zn.replace=function(){var e=arguments,t=gs(e[0]);return e.length<3?t:t.replace(e[1],e[2])},zn.result=function(e,t,n){var i=-1,o=(t=mi(t,e)).length;for(o||(o=1,e=r);++i<o;){var a=null==e?r:e[jo(t[i])];a===r&&(i=o,a=n),e=Za(a)?a.call(e):a}return e},zn.round=wc,zn.runInContext=e,zn.sample=function(e){return(Va(e)?Kn:$r)(e)},zn.size=function(e){if(null==e)return 0;if(Ha(e))return as(e)?un(e):e.length;var t=po(e);return t==S||t==P?e.size:Nr(e).length},zn.snakeCase=Ys,zn.some=function(e,t,n){var i=Va(e)?Nt:ti;return n&&go(e,t,n)&&(t=r),i(e,oo(t,3))},zn.sortedIndex=function(e,t){return ni(e,t)},zn.sortedIndexBy=function(e,t,n){return ri(e,t,oo(n,2))},zn.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var r=ni(e,t);if(r<n&&Fa(e[r],t))return r}return-1},zn.sortedLastIndex=function(e,t){return ni(e,t,!0)},zn.sortedLastIndexBy=function(e,t,n){return ri(e,t,oo(n,2),!0)},zn.sortedLastIndexOf=function(e,t){if(null!=e&&e.length){var n=ni(e,t,!0)-1;if(Fa(e[n],t))return n}return-1},zn.startCase=Ws,zn.startsWith=function(e,t,n){return e=gs(e),n=null==n?0:or(hs(n),0,e.length),t=ai(t),e.slice(n,n+t.length)==t},zn.subtract=Cc,zn.sum=function(e){return e&&e.length?Ht(e,nc):0},zn.sumBy=function(e,t){return e&&e.length?Ht(e,oo(t,2)):0},zn.template=function(e,t,n){var i=zn.templateSettings;n&&go(e,t,n)&&(t=r),e=gs(e),t=Ss({},t,i,Ki);var o=Ss({},t.imports,i.imports,Ki),a=ks(o),s=Kt(o,a);It(a,function(e){if(ce.test(e))throw new Se(\"Invalid `imports` option passed into `_.template`\")});var c,u,d=0,l=t.interpolate||ve,p=\"__p += '\",h=Ee((t.escape||ve).source+\"|\"+l.source+\"|\"+(l===Z?de:ve).source+\"|\"+(t.evaluate||ve).source+\"|$\",\"g\"),f=\"//# sourceURL=\"+(xe.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++nt+\"]\")+\"\\n\";e.replace(h,function(t,n,r,i,o,a){return r||(r=i),p+=e.slice(d,a).replace(_e,tn),n&&(c=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(u=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),d=a+t.length,t}),p+=\"';\\n\";var y=xe.call(t,\"variable\")&&t.variable;if(y){if(ce.test(y))throw new Se(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(u?p.replace(U,\"\"):p).replace(q,\"$1\").replace(V,\"$1;\"),p=\"function(\"+(y||\"obj\")+\") {\\n\"+(y?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(u?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var m=Js(function(){return we(a,f+\"return \"+p).apply(r,s)});if(m.source=p,Ka(m))throw m;return m},zn.times=function(e,t){if((e=hs(e))<1||e>d)return[];var n=p,r=gn(e,p);t=oo(t),e-=p;for(var i=Yt(r,t);++n<e;)t(n);return i},zn.toFinite=ps,zn.toInteger=hs,zn.toLength=fs,zn.toLower=function(e){return gs(e).toLowerCase()},zn.toNumber=ys,zn.toSafeInteger=function(e){return e?or(hs(e),-9007199254740991,d):0===e?e:0},zn.toString=gs,zn.toUpper=function(e){return gs(e).toUpperCase()},zn.trim=function(e,t,n){if((e=gs(e))&&(n||t===r))return Wt(e);if(!e||!(t=ai(t)))return e;var i=dn(e),o=dn(t);return vi(i,Jt(i,o),Qt(i,o)+1).join(\"\")},zn.trimEnd=function(e,t,n){if((e=gs(e))&&(n||t===r))return e.slice(0,ln(e)+1);if(!e||!(t=ai(t)))return e;var i=dn(e);return vi(i,0,Qt(i,dn(t))+1).join(\"\")},zn.trimStart=function(e,t,n){if((e=gs(e))&&(n||t===r))return e.replace(ne,\"\");if(!e||!(t=ai(t)))return e;var i=dn(e);return vi(i,Jt(i,dn(t))).join(\"\")},zn.truncate=function(e,t){var n=30,i=\"...\";if(Xa(t)){var o=\"separator\"in t?t.separator:o;n=\"length\"in t?hs(t.length):n,i=\"omission\"in t?ai(t.omission):i}var a=(e=gs(e)).length;if(nn(e)){var s=dn(e);a=s.length}if(n>=a)return e;var c=n-un(i);if(c<1)return i;var u=s?vi(s,0,c).join(\"\"):e.slice(0,c);if(o===r)return u+i;if(s&&(c+=u.length-c),is(o)){if(e.slice(c).search(o)){var d,l=u;for(o.global||(o=Ee(o.source,gs(le.exec(o))+\"g\")),o.lastIndex=0;d=o.exec(l);)var p=d.index;u=u.slice(0,p===r?c:p)}}else if(e.indexOf(ai(o),c)!=c){var h=u.lastIndexOf(o);h>-1&&(u=u.slice(0,h))}return u+i},zn.unescape=function(e){return(e=gs(e))&&Y.test(e)?e.replace(G,pn):e},zn.uniqueId=function(e){var t=++Ne;return gs(e)+t},zn.upperCase=$s,zn.upperFirst=Ks,zn.each=ga,zn.eachRight=va,zn.first=Ho,ac(zn,(mc={},vr(zn,function(e,t){xe.call(zn.prototype,t)||(mc[t]=e)}),mc),{chain:!1}),zn.VERSION=\"4.18.1\",It([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(e){zn[e].placeholder=zn}),It([\"drop\",\"take\"],function(e,t){qn.prototype[e]=function(n){n=n===r?1:mn(hs(n),0);var i=this.__filtered__&&!t?new qn(this):this.clone();return i.__filtered__?i.__takeCount__=gn(n,i.__takeCount__):i.__views__.push({size:gn(n,p),type:e+(i.__dir__<0?\"Right\":\"\")}),i},qn.prototype[e+\"Right\"]=function(t){return this.reverse()[e](t).reverse()}}),It([\"filter\",\"map\",\"takeWhile\"],function(e,t){var n=t+1,r=1==n||3==n;qn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:oo(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}}),It([\"head\",\"last\"],function(e,t){var n=\"take\"+(t?\"Right\":\"\");qn.prototype[e]=function(){return this[n](1).value()[0]}}),It([\"initial\",\"tail\"],function(e,t){var n=\"drop\"+(t?\"\":\"Right\");qn.prototype[e]=function(){return this.__filtered__?new qn(this):this[n](1)}}),qn.prototype.compact=function(){return this.filter(nc)},qn.prototype.find=function(e){return this.filter(e).head()},qn.prototype.findLast=function(e){return this.reverse().find(e)},qn.prototype.invokeMap=Wr(function(e,t){return\"function\"==typeof e?new qn(this):this.map(function(n){return Ar(n,e,t)})}),qn.prototype.reject=function(e){return this.filter(Na(oo(e)))},qn.prototype.slice=function(e,t){e=hs(e);var n=this;return n.__filtered__&&(e>0||t<0)?new qn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==r&&(n=(t=hs(t))<0?n.dropRight(-t):n.take(t-e)),n)},qn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},qn.prototype.toArray=function(){return this.take(p)},vr(qn.prototype,function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),o=zn[i?\"take\"+(\"last\"==t?\"Right\":\"\"):t],a=i||/^find/.test(t);o&&(zn.prototype[t]=function(){var t=this.__wrapped__,s=i?[1]:arguments,c=t instanceof qn,u=s[0],d=c||Va(t),l=function(e){var t=o.apply(zn,Rt([e],s));return i&&p?t[0]:t};d&&n&&\"function\"==typeof u&&1!=u.length&&(c=d=!1);var p=this.__chain__,h=!!this.__actions__.length,f=a&&!p,y=c&&!h;if(!a&&d){t=y?t:new qn(this);var m=e.apply(t,s);return m.__actions__.push({func:pa,args:[l],thisArg:r}),new Un(m,p)}return f&&y?e.apply(this,s):(m=this.thru(l),f?i?m.value()[0]:m.value():m)})}),It([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(e){var t=Ae[e],n=/^(?:push|sort|unshift)$/.test(e)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(e);zn.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(Va(i)?i:[],e)}return this[n](function(n){return t.apply(Va(n)?n:[],e)})}}),vr(qn.prototype,function(e,t){var n=zn[t];if(n){var r=n.name+\"\";xe.call(Tn,r)||(Tn[r]=[]),Tn[r].push({name:t,func:n})}}),Tn[Li(r,2).name]=[{name:\"wrapper\",func:r}],qn.prototype.clone=function(){var e=new qn(this.__wrapped__);return e.__actions__=Pi(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Pi(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Pi(this.__views__),e},qn.prototype.reverse=function(){if(this.__filtered__){var e=new qn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},qn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Va(e),r=t<0,i=n?e.length:0,o=function(e,t,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case\"drop\":e+=a;break;case\"dropRight\":t-=a;break;case\"take\":t=gn(t,e+a);break;case\"takeRight\":e=mn(e,t-a)}}return{start:e,end:t}}(0,i,this.__views__),a=o.start,s=o.end,c=s-a,u=r?s:a-1,d=this.__iteratees__,l=d.length,p=0,h=gn(c,this.__takeCount__);if(!n||!r&&i==c&&h==c)return li(e,this.__actions__);var f=[];e:for(;c--&&p<h;){for(var y=-1,m=e[u+=t];++y<l;){var g=d[y],v=g.iteratee,_=g.type,b=v(m);if(2==_)m=b;else if(!b){if(1==_)continue e;break e}}f[p++]=m}return f},zn.prototype.at=ha,zn.prototype.chain=function(){return la(this)},zn.prototype.commit=function(){return new Un(this.value(),this.__chain__)},zn.prototype.next=function(){this.__values__===r&&(this.__values__=ls(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?r:this.__values__[this.__index__++]}},zn.prototype.plant=function(e){for(var t,n=this;n instanceof Bn;){var i=zo(n);i.__index__=0,i.__values__=r,t?o.__wrapped__=i:t=i;var o=i;n=n.__wrapped__}return o.__wrapped__=e,t},zn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof qn){var t=e;return this.__actions__.length&&(t=new qn(this)),(t=t.reverse()).__actions__.push({func:pa,args:[Xo],thisArg:r}),new Un(t,this.__chain__)}return this.thru(Xo)},zn.prototype.toJSON=zn.prototype.valueOf=zn.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},zn.prototype.first=zn.prototype.head,Je&&(zn.prototype[Je]=function(){return this}),zn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(dt._=hn,define(function(){return hn})):pt?((pt.exports=hn)._=hn,lt._=hn):dt._=hn}.call(this)},4475(e){\"use strict\";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String(\"abc\");if(e[5]=\"de\",\"5\"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(\"\"))return!1;var r={};return\"abcdefghijklmnopqrst\".split(\"\").forEach(function(e){r[e]=e}),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},r)).join(\"\")}catch(e){return!1}}()?Object.assign:function(e,i){for(var o,a,s=function(e){if(null==e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}(e),c=1;c<arguments.length;c++){for(var u in o=Object(arguments[c]))n.call(o,u)&&(s[u]=o[u]);if(t){a=t(o);for(var d=0;d<a.length;d++)r.call(o,a[d])&&(s[a[d]]=o[a[d]])}}return s}},2586(e,t,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),a=n(3814),s=Symbol(\"encodeFragmentIdentifier\");function c(e){if(\"string\"!=typeof e||1!==e.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function u(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}function d(e,t){return t.decode?i(e):e}function l(e){return Array.isArray(e)?e.sort():\"object\"==typeof e?l(Object.keys(e)).sort((e,t)=>Number(e)-Number(t)).map(t=>e[t]):e}function p(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function h(e){const t=(e=p(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function f(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&\"string\"==typeof e&&\"\"!==e.trim()?e=Number(e):!t.parseBooleans||null===e||\"true\"!==e.toLowerCase()&&\"false\"!==e.toLowerCase()||(e=\"true\"===e.toLowerCase()),e}function y(e,t){c((t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,n,r)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case\"bracket\":return(e,n,r)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case\"colon-list-separator\":return(e,n,r)=>{t=/(:list)$/.exec(e),e=e.replace(/:list$/,\"\"),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case\"comma\":case\"separator\":return(t,n,r)=>{const i=\"string\"==typeof n&&n.includes(e.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&d(n,e).includes(e.arrayFormatSeparator);n=o?d(n,e):n;const a=i||o?n.split(e.arrayFormatSeparator).map(t=>d(t,e)):null===n?n:d(n,e);r[t]=a};case\"bracket-separator\":return(t,n,r)=>{const i=/(\\[\\])$/.test(t);if(t=t.replace(/\\[\\]$/,\"\"),!i)return void(r[t]=n?d(n,e):n);const o=null===n?[]:n.split(e.arrayFormatSeparator).map(t=>d(t,e));void 0!==r[t]?r[t]=[].concat(r[t],o):r[t]=o};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),r=Object.create(null);if(\"string\"!=typeof e)return r;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return r;for(const i of e.split(\"&\")){if(\"\"===i)continue;let[e,a]=o(t.decode?i.replace(/\\+/g,\" \"):i,\"=\");a=void 0===a?null:[\"comma\",\"separator\",\"bracket-separator\"].includes(t.arrayFormat)?a:d(a,t),n(d(e,t),a,r)}for(const e of Object.keys(r)){const n=r[e];if(\"object\"==typeof n&&null!==n)for(const e of Object.keys(n))n[e]=f(n[e],t);else r[e]=f(n,t)}return!1===t.sort?r:(!0===t.sort?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((e,t)=>{const n=r[t];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?e[t]=l(n):e[t]=n,e},Object.create(null))}t.extract=h,t.parse=y,t.stringify=(e,t)=>{if(!e)return\"\";c((t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},t)).arrayFormatSeparator);const n=n=>t.skipNull&&null==e[n]||t.skipEmptyString&&\"\"===e[n],r=function(e){switch(e.arrayFormat){case\"index\":return t=>(n,r)=>{const i=n.length;return void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(t,e),\"[\",i,\"]\"].join(\"\")]:[...n,[u(t,e),\"[\",u(i,e),\"]=\",u(r,e)].join(\"\")]};case\"bracket\":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(t,e),\"[]\"].join(\"\")]:[...n,[u(t,e),\"[]=\",u(r,e)].join(\"\")];case\"colon-list-separator\":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(t,e),\":list=\"].join(\"\")]:[...n,[u(t,e),\":list=\",u(r,e)].join(\"\")];case\"comma\":case\"separator\":case\"bracket-separator\":{const t=\"bracket-separator\"===e.arrayFormat?\"[]=\":\"=\";return n=>(r,i)=>void 0===i||e.skipNull&&null===i||e.skipEmptyString&&\"\"===i?r:(i=null===i?\"\":i,0===r.length?[[u(n,e),t,u(i,e)].join(\"\")]:[[r,u(i,e)].join(e.arrayFormatSeparator)])}default:return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,u(t,e)]:[...n,[u(t,e),\"=\",u(r,e)].join(\"\")]}}(t),i={};for(const t of Object.keys(e))n(t)||(i[t]=e[t]);const o=Object.keys(i);return!1!==t.sort&&o.sort(t.sort),o.map(n=>{const i=e[n];return void 0===i?\"\":null===i?u(n,t):Array.isArray(i)?0===i.length&&\"bracket-separator\"===t.arrayFormat?u(n,t)+\"[]\":i.reduce(r(n),[]).join(\"&\"):u(n,t)+\"=\"+u(i,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,r]=o(e,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:y(h(e),t)},t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:d(r,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0,[s]:!0},n);const r=p(e.url).split(\"?\")[0]||\"\",i=t.extract(e.url),o=t.parse(i,{sort:!1}),a=Object.assign(o,e.query);let c=t.stringify(a,n);c&&(c=`?${c}`);let d=function(e){let t=\"\";const n=e.indexOf(\"#\");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(d=`#${n[s]?u(e.fragmentIdentifier,n):e.fragmentIdentifier}`),`${r}${c}${d}`},t.pick=(e,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0,[s]:!1},r);const{url:i,query:o,fragmentIdentifier:c}=t.parseUrl(e,r);return t.stringifyUrl({url:i,query:a(o,n),fragmentIdentifier:c},r)},t.exclude=(e,n,r)=>{const i=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,i,r)}},7554(e,t,n){\"use strict\";n.r(t),n.d(t,{ArgumentOutOfRangeError:()=>R.k,AsyncSubject:()=>d.h,BehaviorSubject:()=>c.t,ConnectableObservable:()=>i.G,EMPTY:()=>Z.w,EmptyError:()=>M.G,GroupedObservable:()=>o.k,NEVER:()=>le,Notification:()=>P.E,NotificationKind:()=>P.I,ObjectUnsubscribedError:()=>x.P,Observable:()=>r.c,ReplaySubject:()=>u.m,Scheduler:()=>C._,Subject:()=>s.B7,Subscriber:()=>E.v,Subscription:()=>I.y,TimeoutError:()=>D.M,UnsubscriptionError:()=>N.Z,VirtualAction:()=>w,VirtualTimeScheduler:()=>S,animationFrame:()=>b,animationFrameScheduler:()=>_,asap:()=>l.I,asapScheduler:()=>l.$,async:()=>p.b,asyncScheduler:()=>p.E,bindCallback:()=>B,bindNodeCallback:()=>V,combineLatest:()=>W.zV,concat:()=>$.x,config:()=>Te.$,defer:()=>K.v,empty:()=>Z.I,forkJoin:()=>X,from:()=>Q.H,fromEvent:()=>te.R,fromEventPattern:()=>re,generate:()=>ie,identity:()=>T.D,iif:()=>ae,interval:()=>ce,isObservable:()=>k,merge:()=>de.h,never:()=>pe,noop:()=>A.l,observable:()=>a.s,of:()=>he.of,onErrorResumeNext:()=>fe,pairs:()=>ye,partition:()=>be,pipe:()=>O.F,queue:()=>h.g,queueScheduler:()=>h.T,race:()=>Se.O4,range:()=>we,scheduled:()=>Ae.c,throwError:()=>Ie.$,timer:()=>Ee.O,using:()=>Pe,zip:()=>Oe.yU});var r=n(9386),i=n(9762),o=n(2331),a=n(9067),s=n(9023),c=n(2361),u=n(8358),d=n(1403),l=n(7734),p=n(5573),h=n(4126),f=n(5779),y=n(1897),m=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.scheduler=t,r.work=n,r}return f.C6(t,e),t.prototype.requestAsyncId=function(t,n,r){return void 0===r&&(r=0),null!==r&&r>0?e.prototype.requestAsyncId.call(this,t,n,r):(t.actions.push(this),t.scheduled||(t.scheduled=requestAnimationFrame(function(){return t.flush(null)})))},t.prototype.recycleAsyncId=function(t,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return e.prototype.recycleAsyncId.call(this,t,n,r);0===t.actions.length&&(cancelAnimationFrame(n),t.scheduled=void 0)},t}(y.R),g=n(8044),v=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f.C6(t,e),t.prototype.flush=function(e){this.active=!0,this.scheduled=void 0;var t,n=this.actions,r=-1,i=n.length;e=e||n.shift();do{if(t=e.execute(e.state,e.delay))break}while(++r<i&&(e=n.shift()));if(this.active=!1,t){for(;++r<i&&(e=n.shift());)e.unsubscribe();throw t}},t}(g.q),_=new v(m),b=_,S=function(e){function t(t,n){void 0===t&&(t=w),void 0===n&&(n=Number.POSITIVE_INFINITY);var r=e.call(this,t,function(){return r.frame})||this;return r.maxFrames=n,r.frame=0,r.index=-1,r}return f.C6(t,e),t.prototype.flush=function(){for(var e,t,n=this.actions,r=this.maxFrames;(t=n[0])&&t.delay<=r&&(n.shift(),this.frame=t.delay,!(e=t.execute(t.state,t.delay))););if(e){for(;t=n.shift();)t.unsubscribe();throw e}},t.frameTimeFactor=10,t}(g.q),w=function(e){function t(t,n,r){void 0===r&&(r=t.index+=1);var i=e.call(this,t,n)||this;return i.scheduler=t,i.work=n,i.index=r,i.active=!0,i.index=t.index=r,i}return f.C6(t,e),t.prototype.schedule=function(n,r){if(void 0===r&&(r=0),!this.id)return e.prototype.schedule.call(this,n,r);this.active=!1;var i=new t(this.scheduler,this.work);return this.add(i),i.schedule(n,r)},t.prototype.requestAsyncId=function(e,n,r){void 0===r&&(r=0),this.delay=e.frame+r;var i=e.actions;return i.push(this),i.sort(t.sortActions),!0},t.prototype.recycleAsyncId=function(e,t,n){void 0===n&&(n=0)},t.prototype._execute=function(t,n){if(!0===this.active)return e.prototype._execute.call(this,t,n)},t.sortActions=function(e,t){return e.delay===t.delay?e.index===t.index?0:e.index>t.index?1:-1:e.delay>t.delay?1:-1},t}(y.R),C=n(6182),I=n(9290),E=n(3409),P=n(2796),O=n(990),A=n(906),T=n(8604);function k(e){return!!e&&(e instanceof r.c||\"function\"==typeof e.lift&&\"function\"==typeof e.subscribe)}var R=n(2413),M=n(963),x=n(6306),N=n(9368),D=n(5),j=n(2035),L=n(2724),z=n(2733),F=n(3017);function B(e,t,n){if(t){if(!(0,F.m)(t))return function(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];return B(e,n).apply(void 0,r).pipe((0,j.T)(function(e){return(0,z.c)(e)?t.apply(void 0,e):t(e)}))};n=t}return function(){for(var t=[],i=0;i<arguments.length;i++)t[i]=arguments[i];var o,a=this,s={context:a,subject:o,callbackFunc:e,scheduler:n};return new r.c(function(r){if(n){var i={args:t,subscriber:r,params:s};return n.schedule(U,0,i)}if(!o){o=new d.h;try{e.apply(a,t.concat([function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];o.next(e.length<=1?e[0]:e),o.complete()}]))}catch(e){(0,L.H)(o)?o.error(e):console.warn(e)}}return o.subscribe(r)})}}function U(e){var t=this,n=e.args,r=e.subscriber,i=e.params,o=i.callbackFunc,a=i.context,s=i.scheduler,c=i.subject;if(!c){c=i.subject=new d.h;try{o.apply(a,n.concat([function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var r=e.length<=1?e[0]:e;t.add(s.schedule(q,0,{value:r,subject:c}))}]))}catch(e){c.error(e)}}this.add(c.subscribe(r))}function q(e){var t=e.value,n=e.subject;n.next(t),n.complete()}function V(e,t,n){if(t){if(!(0,F.m)(t))return function(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];return V(e,n).apply(void 0,r).pipe((0,j.T)(function(e){return(0,z.c)(e)?t.apply(void 0,e):t(e)}))};n=t}return function(){for(var t=[],i=0;i<arguments.length;i++)t[i]=arguments[i];var o={subject:void 0,args:t,callbackFunc:e,scheduler:n,context:this};return new r.c(function(r){var i=o.context,a=o.subject;if(n)return n.schedule(G,0,{params:o,subscriber:r,context:i});if(!a){a=o.subject=new d.h;try{e.apply(i,t.concat([function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.shift();n?a.error(n):(a.next(e.length<=1?e[0]:e),a.complete())}]))}catch(e){(0,L.H)(a)?a.error(e):console.warn(e)}}return a.subscribe(r)})}}function G(e){var t=this,n=e.params,r=e.subscriber,i=e.context,o=n.callbackFunc,a=n.args,s=n.scheduler,c=n.subject;if(!c){c=n.subject=new d.h;try{o.apply(i,a.concat([function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var r=e.shift();if(r)t.add(s.schedule(Y,0,{err:r,subject:c}));else{var i=e.length<=1?e[0]:e;t.add(s.schedule(H,0,{value:i,subject:c}))}}]))}catch(e){this.add(s.schedule(Y,0,{err:e,subject:c}))}}this.add(c.subscribe(r))}function H(e){var t=e.value,n=e.subject;n.next(t),n.complete()}function Y(e){var t=e.err;e.subject.error(t)}var W=n(3483),$=n(9301),K=n(277),Z=n(6780),J=n(9273),Q=n(8241);function X(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(1===e.length){var n=e[0];if((0,z.c)(n))return ee(n,null);if((0,J.G)(n)&&Object.getPrototypeOf(n)===Object.prototype){var r=Object.keys(n);return ee(r.map(function(e){return n[e]}),r)}}if(\"function\"==typeof e[e.length-1]){var i=e.pop();return ee(e=1===e.length&&(0,z.c)(e[0])?e[0]:e,null).pipe((0,j.T)(function(e){return i.apply(void 0,e)}))}return ee(e,null)}function ee(e,t){return new r.c(function(n){var r=e.length;if(0!==r)for(var i=new Array(r),o=0,a=0,s=function(s){var c=(0,Q.H)(e[s]),u=!1;n.add(c.subscribe({next:function(e){u||(u=!0,a++),i[s]=e},error:function(e){return n.error(e)},complete:function(){++o!==r&&u||(a===r&&n.next(t?t.reduce(function(e,t,n){return e[t]=i[n],e},{}):i),n.complete())}}))},c=0;c<r;c++)s(c);else n.complete()})}var te=n(1381),ne=n(3278);function re(e,t,n){return n?re(e,t).pipe((0,j.T)(function(e){return(0,z.c)(e)?n.apply(void 0,e):n(e)})):new r.c(function(n){var r,i=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n.next(1===e.length?e[0]:e)};try{r=e(i)}catch(e){return void n.error(e)}if((0,ne.T)(t))return function(){return t(i,r)}})}function ie(e,t,n,i,o){var a,s;if(1==arguments.length){var c=e;s=c.initialState,t=c.condition,n=c.iterate,a=c.resultSelector||T.D,o=c.scheduler}else void 0===i||(0,F.m)(i)?(s=e,a=T.D,o=i):(s=e,a=i);return new r.c(function(e){var r=s;if(o)return o.schedule(oe,0,{subscriber:e,iterate:n,condition:t,resultSelector:a,state:r});for(;;){if(t){var i=void 0;try{i=t(r)}catch(t){return void e.error(t)}if(!i){e.complete();break}}var c=void 0;try{c=a(r)}catch(t){return void e.error(t)}if(e.next(c),e.closed)break;try{r=n(r)}catch(t){return void e.error(t)}}})}function oe(e){var t=e.subscriber,n=e.condition;if(!t.closed){if(e.needIterate)try{e.state=e.iterate(e.state)}catch(e){return void t.error(e)}else e.needIterate=!0;if(n){var r=void 0;try{r=n(e.state)}catch(e){return void t.error(e)}if(!r)return void t.complete();if(t.closed)return}var i;try{i=e.resultSelector(e.state)}catch(e){return void t.error(e)}if(!t.closed&&(t.next(i),!t.closed))return this.schedule(e)}}function ae(e,t,n){return void 0===t&&(t=Z.w),void 0===n&&(n=Z.w),(0,K.v)(function(){return e()?t:n})}var se=n(899);function ce(e,t){return void 0===e&&(e=0),void 0===t&&(t=p.b),(!(0,se.k)(e)||e<0)&&(e=0),t&&\"function\"==typeof t.schedule||(t=p.b),new r.c(function(n){return n.add(t.schedule(ue,e,{subscriber:n,counter:0,period:e})),n})}function ue(e){var t=e.subscriber,n=e.counter,r=e.period;t.next(n),this.schedule({subscriber:t,counter:n+1,period:r},r)}var de=n(3837),le=new r.c(A.l);function pe(){return le}var he=n(4128);function fe(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(0===e.length)return Z.w;var n=e[0],i=e.slice(1);return 1===e.length&&(0,z.c)(n)?fe.apply(void 0,n):new r.c(function(e){var t=function(){return e.add(fe.apply(void 0,i).subscribe(e))};return(0,Q.H)(n).subscribe({next:function(t){e.next(t)},error:t,complete:t})})}function ye(e,t){return t?new r.c(function(n){var r=Object.keys(e),i=new I.y;return i.add(t.schedule(me,0,{keys:r,index:0,subscriber:n,subscription:i,obj:e})),i}):new r.c(function(t){for(var n=Object.keys(e),r=0;r<n.length&&!t.closed;r++){var i=n[r];e.hasOwnProperty(i)&&t.next([i,e[i]])}t.complete()})}function me(e){var t=e.keys,n=e.index,r=e.subscriber,i=e.subscription,o=e.obj;if(!r.closed)if(n<t.length){var a=t[n];r.next([a,o[a]]),i.add(this.schedule({keys:t,index:n+1,subscriber:r,subscription:i,obj:o}))}else r.complete()}var ge=n(8153),ve=n(1109),_e=n(6275);function be(e,t,n){return[(0,_e.p)(t,n)(new r.c((0,ve.i)(e))),(0,_e.p)((0,ge.A)(t,n))(new r.c((0,ve.i)(e)))]}var Se=n(4460);function we(e,t,n){return void 0===e&&(e=0),new r.c(function(r){void 0===t&&(t=e,e=0);var i=0,o=e;if(n)return n.schedule(Ce,0,{index:i,count:t,start:e,subscriber:r});for(;;){if(i++>=t){r.complete();break}if(r.next(o++),r.closed)break}})}function Ce(e){var t=e.start,n=e.index,r=e.count,i=e.subscriber;n>=r?i.complete():(i.next(t),i.closed||(e.index=n+1,e.start=t+1,this.schedule(e)))}var Ie=n(4203),Ee=n(5520);function Pe(e,t){return new r.c(function(n){var r,i;try{r=e()}catch(e){return void n.error(e)}try{i=t(r)}catch(e){return void n.error(e)}var o=(i?(0,Q.H)(i):Z.w).subscribe(n);return function(){o.unsubscribe(),r&&r.unsubscribe()}})}var Oe=n(5778),Ae=n(2132),Te=n(6369)},1403(e,t,n){\"use strict\";n.d(t,{h:()=>a});var r=n(5779),i=n(9023),o=n(9290),a=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.value=null,t.hasNext=!1,t.hasCompleted=!1,t}return r.C6(t,e),t.prototype._subscribe=function(t){return this.hasError?(t.error(this.thrownError),o.y.EMPTY):this.hasCompleted&&this.hasNext?(t.next(this.value),t.complete(),o.y.EMPTY):e.prototype._subscribe.call(this,t)},t.prototype.next=function(e){this.hasCompleted||(this.value=e,this.hasNext=!0)},t.prototype.error=function(t){this.hasCompleted||e.prototype.error.call(this,t)},t.prototype.complete=function(){this.hasCompleted=!0,this.hasNext&&e.prototype.next.call(this,this.value),e.prototype.complete.call(this)},t}(i.B7)},2361(e,t,n){\"use strict\";n.d(t,{t:()=>a});var r=n(5779),i=n(9023),o=n(6306),a=function(e){function t(t){var n=e.call(this)||this;return n._value=t,n}return r.C6(t,e),Object.defineProperty(t.prototype,\"value\",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),t.prototype._subscribe=function(t){var n=e.prototype._subscribe.call(this,t);return n&&!n.closed&&t.next(this._value),n},t.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.P;return this._value},t.prototype.next=function(t){e.prototype.next.call(this,this._value=t)},t}(i.B7)},2796(e,t,n){\"use strict\";n.d(t,{E:()=>s,I:()=>r});var r,i=n(6780),o=n(4128),a=n(4203);r||(r={});var s=function(){function e(e,t,n){this.kind=e,this.value=t,this.error=n,this.hasValue=\"N\"===e}return e.prototype.observe=function(e){switch(this.kind){case\"N\":return e.next&&e.next(this.value);case\"E\":return e.error&&e.error(this.error);case\"C\":return e.complete&&e.complete()}},e.prototype.do=function(e,t,n){switch(this.kind){case\"N\":return e&&e(this.value);case\"E\":return t&&t(this.error);case\"C\":return n&&n()}},e.prototype.accept=function(e,t,n){return e&&\"function\"==typeof e.next?this.observe(e):this.do(e,t,n)},e.prototype.toObservable=function(){switch(this.kind){case\"N\":return(0,o.of)(this.value);case\"E\":return(0,a.$)(this.error);case\"C\":return(0,i.I)()}throw new Error(\"unexpected notification kind value\")},e.createNext=function(t){return void 0!==t?new e(\"N\",t):e.undefinedValueNotification},e.createError=function(t){return new e(\"E\",void 0,t)},e.createComplete=function(){return e.completeNotification},e.completeNotification=new e(\"C\"),e.undefinedValueNotification=new e(\"N\",void 0),e}()},9386(e,t,n){\"use strict\";n.d(t,{c:()=>c});var r=n(2724),i=n(9297),o=n(9067),a=n(990),s=n(6369),c=function(){function e(e){this._isScalar=!1,e&&(this._subscribe=e)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(e,t,n){var r=this.operator,o=(0,i.u)(e,t,n);if(r?o.add(r.call(o,this.source)):o.add(this.source||s.$.useDeprecatedSynchronousErrorHandling&&!o.syncErrorThrowable?this._subscribe(o):this._trySubscribe(o)),s.$.useDeprecatedSynchronousErrorHandling&&o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){s.$.useDeprecatedSynchronousErrorHandling&&(e.syncErrorThrown=!0,e.syncErrorValue=t),(0,r.H)(e)?e.error(t):console.warn(t)}},e.prototype.forEach=function(e,t){var n=this;return new(t=u(t))(function(t,r){var i;i=n.subscribe(function(t){try{e(t)}catch(e){r(e),i&&i.unsubscribe()}},r,t)})},e.prototype._subscribe=function(e){var t=this.source;return t&&t.subscribe(e)},e.prototype[o.s]=function(){return this},e.prototype.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return 0===e.length?this:(0,a.m)(e)(this)},e.prototype.toPromise=function(e){var t=this;return new(e=u(e))(function(e,n){var r;t.subscribe(function(e){return r=e},function(e){return n(e)},function(){return e(r)})})},e.create=function(t){return new e(t)},e}();function u(e){if(e||(e=s.$.Promise||Promise),!e)throw new Error(\"no Promise impl found\");return e}},8805(e,t,n){\"use strict\";n.d(t,{I:()=>o});var r=n(6369),i=n(3762),o={closed:!0,next:function(e){},error:function(e){if(r.$.useDeprecatedSynchronousErrorHandling)throw e;(0,i.T)(e)},complete:function(){}}},5422(e,t,n){\"use strict\";n.d(t,{E:()=>i});var r=n(5779),i=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.C6(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(t)},t.prototype.notifyError=function(e,t){this.destination.error(e)},t.prototype.notifyComplete=function(e){this.destination.complete()},t}(n(3409).v)},8358(e,t,n){\"use strict\";n.d(t,{m:()=>d});var r=n(5779),i=n(9023),o=n(4126),a=n(9290),s=n(3724),c=n(6306),u=n(9970),d=function(e){function t(t,n,r){void 0===t&&(t=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY);var i=e.call(this)||this;return i.scheduler=r,i._events=[],i._infiniteTimeWindow=!1,i._bufferSize=t<1?1:t,i._windowTime=n<1?1:n,n===Number.POSITIVE_INFINITY?(i._infiniteTimeWindow=!0,i.next=i.nextInfiniteTimeWindow):i.next=i.nextTimeWindow,i}return r.C6(t,e),t.prototype.nextInfiniteTimeWindow=function(t){if(!this.isStopped){var n=this._events;n.push(t),n.length>this._bufferSize&&n.shift()}e.prototype.next.call(this,t)},t.prototype.nextTimeWindow=function(t){this.isStopped||(this._events.push(new l(this._getNow(),t)),this._trimBufferThenGetEvents()),e.prototype.next.call(this,t)},t.prototype._subscribe=function(e){var t,n=this._infiniteTimeWindow,r=n?this._events:this._trimBufferThenGetEvents(),i=this.scheduler,o=r.length;if(this.closed)throw new c.P;if(this.isStopped||this.hasError?t=a.y.EMPTY:(this.observers.push(e),t=new u.Y(this,e)),i&&e.add(e=new s.YZ(e,i)),n)for(var d=0;d<o&&!e.closed;d++)e.next(r[d]);else for(d=0;d<o&&!e.closed;d++)e.next(r[d].value);return this.hasError?e.error(this.thrownError):this.isStopped&&e.complete(),t},t.prototype._getNow=function(){return(this.scheduler||o.g).now()},t.prototype._trimBufferThenGetEvents=function(){for(var e=this._getNow(),t=this._bufferSize,n=this._windowTime,r=this._events,i=r.length,o=0;o<i&&!(e-r[o].time<n);)o++;return i>t&&(o=Math.max(o,i-t)),o>0&&r.splice(0,o),r},t}(i.B7),l=function(){return function(e,t){this.time=e,this.value=t}}()},6182(e,t,n){\"use strict\";n.d(t,{_:()=>r});var r=function(){function e(t,n){void 0===n&&(n=e.now),this.SchedulerAction=t,this.now=n}return e.prototype.schedule=function(e,t,n){return void 0===t&&(t=0),new this.SchedulerAction(this,e).schedule(n,t)},e.now=function(){return Date.now()},e}()},9023(e,t,n){\"use strict\";n.d(t,{B7:()=>l,PJ:()=>d});var r=n(5779),i=n(9386),o=n(3409),a=n(9290),s=n(6306),c=n(9970),u=n(6014),d=function(e){function t(t){var n=e.call(this,t)||this;return n.destination=t,n}return r.C6(t,e),t}(o.v),l=function(e){function t(){var t=e.call(this)||this;return t.observers=[],t.closed=!1,t.isStopped=!1,t.hasError=!1,t.thrownError=null,t}return r.C6(t,e),t.prototype[u.D]=function(){return new d(this)},t.prototype.lift=function(e){var t=new p(this,this);return t.operator=e,t},t.prototype.next=function(e){if(this.closed)throw new s.P;if(!this.isStopped)for(var t=this.observers,n=t.length,r=t.slice(),i=0;i<n;i++)r[i].next(e)},t.prototype.error=function(e){if(this.closed)throw new s.P;this.hasError=!0,this.thrownError=e,this.isStopped=!0;for(var t=this.observers,n=t.length,r=t.slice(),i=0;i<n;i++)r[i].error(e);this.observers.length=0},t.prototype.complete=function(){if(this.closed)throw new s.P;this.isStopped=!0;for(var e=this.observers,t=e.length,n=e.slice(),r=0;r<t;r++)n[r].complete();this.observers.length=0},t.prototype.unsubscribe=function(){this.isStopped=!0,this.closed=!0,this.observers=null},t.prototype._trySubscribe=function(t){if(this.closed)throw new s.P;return e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){if(this.closed)throw new s.P;return this.hasError?(e.error(this.thrownError),a.y.EMPTY):this.isStopped?(e.complete(),a.y.EMPTY):(this.observers.push(e),new c.Y(this,e))},t.prototype.asObservable=function(){var e=new i.c;return e.source=this,e},t.create=function(e,t){return new p(e,t)},t}(i.c),p=function(e){function t(t,n){var r=e.call(this)||this;return r.destination=t,r.source=n,r}return r.C6(t,e),t.prototype.next=function(e){var t=this.destination;t&&t.next&&t.next(e)},t.prototype.error=function(e){var t=this.destination;t&&t.error&&this.destination.error(e)},t.prototype.complete=function(){var e=this.destination;e&&e.complete&&this.destination.complete()},t.prototype._subscribe=function(e){return this.source?this.source.subscribe(e):a.y.EMPTY},t}(l)},9970(e,t,n){\"use strict\";n.d(t,{Y:()=>i});var r=n(5779),i=function(e){function t(t,n){var r=e.call(this)||this;return r.subject=t,r.subscriber=n,r.closed=!1,r}return r.C6(t,e),t.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var e=this.subject,t=e.observers;if(this.subject=null,t&&0!==t.length&&!e.isStopped&&!e.closed){var n=t.indexOf(this.subscriber);-1!==n&&t.splice(n,1)}}},t}(n(9290).y)},3409(e,t,n){\"use strict\";n.d(t,{v:()=>d});var r=n(5779),i=n(3278),o=n(8805),a=n(9290),s=n(6014),c=n(6369),u=n(3762),d=function(e){function t(n,r,i){var a=e.call(this)||this;switch(a.syncErrorValue=null,a.syncErrorThrown=!1,a.syncErrorThrowable=!1,a.isStopped=!1,arguments.length){case 0:a.destination=o.I;break;case 1:if(!n){a.destination=o.I;break}if(\"object\"==typeof n){n instanceof t?(a.syncErrorThrowable=n.syncErrorThrowable,a.destination=n,n.add(a)):(a.syncErrorThrowable=!0,a.destination=new l(a,n));break}default:a.syncErrorThrowable=!0,a.destination=new l(a,n,r,i)}return a}return r.C6(t,e),t.prototype[s.D]=function(){return this},t.create=function(e,n,r){var i=new t(e,n,r);return i.syncErrorThrowable=!1,i},t.prototype.next=function(e){this.isStopped||this._next(e)},t.prototype.error=function(e){this.isStopped||(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this))},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){this.destination.error(e),this.unsubscribe()},t.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},t.prototype._unsubscribeAndRecycle=function(){var e=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=e,this},t}(a.y),l=function(e){function t(t,n,r,a){var s,c=e.call(this)||this;c._parentSubscriber=t;var u=c;return(0,i.T)(n)?s=n:n&&(s=n.next,r=n.error,a=n.complete,n!==o.I&&(u=Object.create(n),(0,i.T)(u.unsubscribe)&&c.add(u.unsubscribe.bind(u)),u.unsubscribe=c.unsubscribe.bind(c))),c._context=u,c._next=s,c._error=r,c._complete=a,c}return r.C6(t,e),t.prototype.next=function(e){if(!this.isStopped&&this._next){var t=this._parentSubscriber;c.$.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?this.__tryOrSetError(t,this._next,e)&&this.unsubscribe():this.__tryOrUnsub(this._next,e)}},t.prototype.error=function(e){if(!this.isStopped){var t=this._parentSubscriber,n=c.$.useDeprecatedSynchronousErrorHandling;if(this._error)n&&t.syncErrorThrowable?(this.__tryOrSetError(t,this._error,e),this.unsubscribe()):(this.__tryOrUnsub(this._error,e),this.unsubscribe());else if(t.syncErrorThrowable)n?(t.syncErrorValue=e,t.syncErrorThrown=!0):(0,u.T)(e),this.unsubscribe();else{if(this.unsubscribe(),n)throw e;(0,u.T)(e)}}},t.prototype.complete=function(){var e=this;if(!this.isStopped){var t=this._parentSubscriber;if(this._complete){var n=function(){return e._complete.call(e._context)};c.$.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},t.prototype.__tryOrUnsub=function(e,t){try{e.call(this._context,t)}catch(e){if(this.unsubscribe(),c.$.useDeprecatedSynchronousErrorHandling)throw e;(0,u.T)(e)}},t.prototype.__tryOrSetError=function(e,t,n){if(!c.$.useDeprecatedSynchronousErrorHandling)throw new Error(\"bad call\");try{t.call(this._context,n)}catch(t){return c.$.useDeprecatedSynchronousErrorHandling?(e.syncErrorValue=t,e.syncErrorThrown=!0,!0):((0,u.T)(t),!0)}return!1},t.prototype._unsubscribe=function(){var e=this._parentSubscriber;this._context=null,this._parentSubscriber=null,e.unsubscribe()},t}(d)},9290(e,t,n){\"use strict\";n.d(t,{y:()=>s});var r=n(2733),i=n(9273),o=n(3278),a=n(9368),s=function(){function e(e){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,e&&(this._ctorUnsubscribe=!0,this._unsubscribe=e)}var t;return e.prototype.unsubscribe=function(){var t;if(!this.closed){var n=this,s=n._parentOrParents,u=n._ctorUnsubscribe,d=n._unsubscribe,l=n._subscriptions;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,s instanceof e)s.remove(this);else if(null!==s)for(var p=0;p<s.length;++p)s[p].remove(this);if((0,o.T)(d)){u&&(this._unsubscribe=void 0);try{d.call(this)}catch(e){t=e instanceof a.Z?c(e.errors):[e]}}if((0,r.c)(l)){p=-1;for(var h=l.length;++p<h;){var f=l[p];if((0,i.G)(f))try{f.unsubscribe()}catch(e){t=t||[],e instanceof a.Z?t=t.concat(c(e.errors)):t.push(e)}}}if(t)throw new a.Z(t)}},e.prototype.add=function(t){var n=t;if(!t)return e.EMPTY;switch(typeof t){case\"function\":n=new e(t);case\"object\":if(n===this||n.closed||\"function\"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if(!(n instanceof e)){var r=n;(n=new e)._subscriptions=[r]}break;default:throw new Error(\"unrecognized teardown \"+t+\" added to Subscription.\")}var i=n._parentOrParents;if(null===i)n._parentOrParents=this;else if(i instanceof e){if(i===this)return n;n._parentOrParents=[i,this]}else{if(-1!==i.indexOf(this))return n;i.push(this)}var o=this._subscriptions;return null===o?this._subscriptions=[n]:o.push(n),n},e.prototype.remove=function(e){var t=this._subscriptions;if(t){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}},e.EMPTY=((t=new e).closed=!0,t),e}();function c(e){return e.reduce(function(e,t){return e.concat(t instanceof a.Z?t.errors:t)},[])}},6369(e,t,n){\"use strict\";n.d(t,{$:()=>i});var r=!1,i={Promise:void 0,set useDeprecatedSynchronousErrorHandling(e){e&&(new Error).stack,r=e},get useDeprecatedSynchronousErrorHandling(){return r}}},9559(e,t,n){\"use strict\";n.d(t,{gn:()=>c,tS:()=>u,zA:()=>s});var r=n(5779),i=n(3409),o=n(9386),a=n(1109),s=function(e){function t(t){var n=e.call(this)||this;return n.parent=t,n}return r.C6(t,e),t.prototype._next=function(e){this.parent.notifyNext(e)},t.prototype._error=function(e){this.parent.notifyError(e),this.unsubscribe()},t.prototype._complete=function(){this.parent.notifyComplete(),this.unsubscribe()},t}(i.v),c=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.C6(t,e),t.prototype.notifyNext=function(e){this.destination.next(e)},t.prototype.notifyError=function(e){this.destination.error(e)},t.prototype.notifyComplete=function(){this.destination.complete()},t}(i.v);function u(e,t){if(!t.closed){if(e instanceof o.c)return e.subscribe(t);var n;try{n=(0,a.i)(e)(t)}catch(e){t.error(e)}return n}}},9762(e,t,n){\"use strict\";n.d(t,{G:()=>c,f:()=>u});var r=n(5779),i=n(9023),o=n(9386),a=n(9290),s=n(1709),c=function(e){function t(t,n){var r=e.call(this)||this;return r.source=t,r.subjectFactory=n,r._refCount=0,r._isComplete=!1,r}return r.C6(t,e),t.prototype._subscribe=function(e){return this.getSubject().subscribe(e)},t.prototype.getSubject=function(){var e=this._subject;return e&&!e.isStopped||(this._subject=this.subjectFactory()),this._subject},t.prototype.connect=function(){var e=this._connection;return e||(this._isComplete=!1,(e=this._connection=new a.y).add(this.source.subscribe(new d(this.getSubject(),this))),e.closed&&(this._connection=null,e=a.y.EMPTY)),e},t.prototype.refCount=function(){return(0,s.B)()(this)},t}(o.c),u=function(){var e=c.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:e._subscribe},_isComplete:{value:e._isComplete,writable:!0},getSubject:{value:e.getSubject},connect:{value:e.connect},refCount:{value:e.refCount}}}(),d=function(e){function t(t,n){var r=e.call(this,t)||this;return r.connectable=n,r}return r.C6(t,e),t.prototype._error=function(t){this._unsubscribe(),e.prototype._error.call(this,t)},t.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._connection;e._refCount=0,e._subject=null,e._connection=null,t&&t.unsubscribe()}},t}(i.PJ)},3483(e,t,n){\"use strict\";n.d(t,{ZS:()=>l,zV:()=>d});var r=n(5779),i=n(3017),o=n(2733),a=n(5422),s=n(7408),c=n(2564),u={};function d(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=void 0,r=void 0;return(0,i.m)(e[e.length-1])&&(r=e.pop()),\"function\"==typeof e[e.length-1]&&(n=e.pop()),1===e.length&&(0,o.c)(e[0])&&(e=e[0]),(0,c.c)(e,r).lift(new l(n))}var l=function(){function e(e){this.resultSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new p(e,this.resultSelector))},e}(),p=function(e){function t(t,n){var r=e.call(this,t)||this;return r.resultSelector=n,r.active=0,r.values=[],r.observables=[],r}return r.C6(t,e),t.prototype._next=function(e){this.values.push(u),this.observables.push(e)},t.prototype._complete=function(){var e=this.observables,t=e.length;if(0===t)this.destination.complete();else{this.active=t,this.toRespond=t;for(var n=0;n<t;n++){var r=e[n];this.add((0,s.F)(this,r,void 0,n))}}},t.prototype.notifyComplete=function(e){0==(this.active-=1)&&this.destination.complete()},t.prototype.notifyNext=function(e,t,n){var r=this.values,i=r[n],o=this.toRespond?i===u?--this.toRespond:this.toRespond:0;r[n]=t,0===o&&(this.resultSelector?this._tryResultSelector(r):this.destination.next(r.slice()))},t.prototype._tryResultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(a.E)},9301(e,t,n){\"use strict\";n.d(t,{x:()=>o});var r=n(4128),i=n(8930);function o(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return(0,i.K)()(r.of.apply(void 0,e))}},277(e,t,n){\"use strict\";n.d(t,{v:()=>a});var r=n(9386),i=n(8241),o=n(6780);function a(e){return new r.c(function(t){var n;try{n=e()}catch(e){return void t.error(e)}return(n?(0,i.H)(n):(0,o.I)()).subscribe(t)})}},6780(e,t,n){\"use strict\";n.d(t,{I:()=>o,w:()=>i});var r=n(9386),i=new r.c(function(e){return e.complete()});function o(e){return e?function(e){return new r.c(function(t){return e.schedule(function(){return t.complete()})})}(e):i}},8241(e,t,n){\"use strict\";n.d(t,{H:()=>a});var r=n(9386),i=n(1109),o=n(2132);function a(e,t){return t?(0,o.c)(e,t):e instanceof r.c?e:new r.c((0,i.i)(e))}},2564(e,t,n){\"use strict\";n.d(t,{c:()=>a});var r=n(9386),i=n(5168),o=n(941);function a(e,t){return t?(0,o.V)(e,t):new r.c((0,i.v)(e))}},1381(e,t,n){\"use strict\";n.d(t,{R:()=>s});var r=n(9386),i=n(2733),o=n(3278),a=n(2035);function s(e,t,n,u){return(0,o.T)(n)&&(u=n,n=void 0),u?s(e,t,n).pipe((0,a.T)(function(e){return(0,i.c)(e)?u.apply(void 0,e):u(e)})):new r.c(function(r){c(e,t,function(e){arguments.length>1?r.next(Array.prototype.slice.call(arguments)):r.next(e)},r,n)})}function c(e,t,n,r,i){var o;if(function(e){return e&&\"function\"==typeof e.addEventListener&&\"function\"==typeof e.removeEventListener}(e)){var a=e;e.addEventListener(t,n,i),o=function(){return a.removeEventListener(t,n,i)}}else if(function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.off}(e)){var s=e;e.on(t,n),o=function(){return s.off(t,n)}}else if(function(e){return e&&\"function\"==typeof e.addListener&&\"function\"==typeof e.removeListener}(e)){var u=e;e.addListener(t,n),o=function(){return u.removeListener(t,n)}}else{if(!e||!e.length)throw new TypeError(\"Invalid event target\");for(var d=0,l=e.length;d<l;d++)c(e[d],t,n,r,i)}r.add(o)}},3837(e,t,n){\"use strict\";n.d(t,{h:()=>s});var r=n(9386),i=n(3017),o=n(9050),a=n(2564);function s(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Number.POSITIVE_INFINITY,s=null,c=e[e.length-1];return(0,i.m)(c)?(s=e.pop(),e.length>1&&\"number\"==typeof e[e.length-1]&&(n=e.pop())):\"number\"==typeof c&&(n=e.pop()),null===s&&1===e.length&&e[0]instanceof r.c?e[0]:(0,o.U)(n)((0,a.c)(e,s))}},4128(e,t,n){\"use strict\";n.d(t,{of:()=>a});var r=n(3017),i=n(2564),o=n(941);function a(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[e.length-1];return(0,r.m)(n)?(e.pop(),(0,o.V)(e,n)):(0,i.c)(e)}},4460(e,t,n){\"use strict\";n.d(t,{O4:()=>c});var r=n(5779),i=n(2733),o=n(2564),a=n(5422),s=n(7408);function c(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(1===e.length){if(!(0,i.c)(e[0]))return e[0];e=e[0]}return(0,o.c)(e,void 0).lift(new u)}var u=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new d(e))},e}(),d=function(e){function t(t){var n=e.call(this,t)||this;return n.hasFirst=!1,n.observables=[],n.subscriptions=[],n}return r.C6(t,e),t.prototype._next=function(e){this.observables.push(e)},t.prototype._complete=function(){var e=this.observables,t=e.length;if(0===t)this.destination.complete();else{for(var n=0;n<t&&!this.hasFirst;n++){var r=e[n],i=(0,s.F)(this,r,void 0,n);this.subscriptions&&this.subscriptions.push(i),this.add(i)}this.observables=null}},t.prototype.notifyNext=function(e,t,n){if(!this.hasFirst){this.hasFirst=!0;for(var r=0;r<this.subscriptions.length;r++)if(r!==n){var i=this.subscriptions[r];i.unsubscribe(),this.remove(i)}this.subscriptions=null}this.destination.next(t)},t}(a.E)},4203(e,t,n){\"use strict\";n.d(t,{$:()=>i});var r=n(9386);function i(e,t){return t?new r.c(function(n){return t.schedule(o,0,{error:e,subscriber:n})}):new r.c(function(t){return t.error(e)})}function o(e){var t=e.error;e.subscriber.error(t)}},5520(e,t,n){\"use strict\";n.d(t,{O:()=>s});var r=n(9386),i=n(5573),o=n(899),a=n(3017);function s(e,t,n){void 0===e&&(e=0);var s=-1;return(0,o.k)(t)?s=Number(t)<1?1:Number(t):(0,a.m)(t)&&(n=t),(0,a.m)(n)||(n=i.b),new r.c(function(t){var r=(0,o.k)(e)?e:+e-n.now();return n.schedule(c,r,{index:0,period:s,subscriber:t})})}function c(e){var t=e.index,n=e.period,r=e.subscriber;if(r.next(t),!r.closed){if(-1===n)return r.complete();e.index=t+1,this.schedule(e,n)}}},5778(e,t,n){\"use strict\";n.d(t,{ee:()=>d,yU:()=>u});var r=n(5779),i=n(2564),o=n(2733),a=n(3409),s=n(3840),c=n(9559);function u(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[e.length-1];return\"function\"==typeof n&&e.pop(),(0,i.c)(e,void 0).lift(new d(n))}var d=function(){function e(e){this.resultSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new l(e,this.resultSelector))},e}(),l=function(e){function t(t,n,r){void 0===r&&(r=Object.create(null));var i=e.call(this,t)||this;return i.resultSelector=n,i.iterators=[],i.active=0,i.resultSelector=\"function\"==typeof n?n:void 0,i}return r.C6(t,e),t.prototype._next=function(e){var t=this.iterators;(0,o.c)(e)?t.push(new h(e)):\"function\"==typeof e[s.lJ]?t.push(new p(e[s.lJ]())):t.push(new f(this.destination,this,e))},t.prototype._complete=function(){var e=this.iterators,t=e.length;if(this.unsubscribe(),0!==t){this.active=t;for(var n=0;n<t;n++){var r=e[n];r.stillUnsubscribed?this.destination.add(r.subscribe()):this.active--}}else this.destination.complete()},t.prototype.notifyInactive=function(){this.active--,0===this.active&&this.destination.complete()},t.prototype.checkIterators=function(){for(var e=this.iterators,t=e.length,n=this.destination,r=0;r<t;r++)if(\"function\"==typeof(a=e[r]).hasValue&&!a.hasValue())return;var i=!1,o=[];for(r=0;r<t;r++){var a,s=(a=e[r]).next();if(a.hasCompleted()&&(i=!0),s.done)return void n.complete();o.push(s.value)}this.resultSelector?this._tryresultSelector(o):n.next(o),i&&n.complete()},t.prototype._tryresultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(a.v),p=function(){function e(e){this.iterator=e,this.nextResult=e.next()}return e.prototype.hasValue=function(){return!0},e.prototype.next=function(){var e=this.nextResult;return this.nextResult=this.iterator.next(),e},e.prototype.hasCompleted=function(){var e=this.nextResult;return Boolean(e&&e.done)},e}(),h=function(){function e(e){this.array=e,this.index=0,this.length=0,this.length=e.length}return e.prototype[s.lJ]=function(){return this},e.prototype.next=function(e){var t=this.index++,n=this.array;return t<this.length?{value:n[t],done:!1}:{value:null,done:!0}},e.prototype.hasValue=function(){return this.array.length>this.index},e.prototype.hasCompleted=function(){return this.array.length===this.index},e}(),f=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.parent=n,i.observable=r,i.stillUnsubscribed=!0,i.buffer=[],i.isComplete=!1,i}return r.C6(t,e),t.prototype[s.lJ]=function(){return this},t.prototype.next=function(){var e=this.buffer;return 0===e.length&&this.isComplete?{value:null,done:!0}:{value:e.shift(),done:!1}},t.prototype.hasValue=function(){return this.buffer.length>0},t.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete},t.prototype.notifyComplete=function(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()},t.prototype.notifyNext=function(e){this.buffer.push(e),this.parent.checkIterators()},t.prototype.subscribe=function(){return(0,c.tS)(this.observable,new c.zA(this))},t}(c.gn)},9586(e,t,n){\"use strict\";n.d(t,{W:()=>o});var r=n(5779),i=n(9559);function o(e){return function(t){var n=new a(e),r=t.lift(n);return n.caught=r}}var a=function(){function e(e){this.selector=e}return e.prototype.call=function(e,t){return t.subscribe(new s(e,this.selector,this.caught))},e}(),s=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.selector=n,i.caught=r,i}return r.C6(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=void 0;try{n=this.selector(t,this.caught)}catch(t){return void e.prototype.error.call(this,t)}this._unsubscribeAndRecycle();var r=new i.zA(this);this.add(r);var o=(0,i.tS)(n,r);o!==r&&this.add(o)}},t}(i.gn)},8930(e,t,n){\"use strict\";n.d(t,{K:()=>i});var r=n(9050);function i(){return(0,r.U)(1)}},3158(e,t,n){\"use strict\";n.d(t,{c:()=>c});var r=n(5779),i=n(5573),o=n(1454),a=n(3409),s=n(2796);function c(e,t){void 0===t&&(t=i.b);var n=(0,o.$)(e)?+e-t.now():Math.abs(e);return function(e){return e.lift(new u(n,t))}}var u=function(){function e(e,t){this.delay=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new d(e,this.delay,this.scheduler))},e}(),d=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.delay=n,i.scheduler=r,i.queue=[],i.active=!1,i.errored=!1,i}return r.C6(t,e),t.dispatch=function(e){for(var t=e.source,n=t.queue,r=e.scheduler,i=e.destination;n.length>0&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(n.length>0){var o=Math.max(0,n[0].time-r.now());this.schedule(e,o)}else this.unsubscribe(),t.active=!1},t.prototype._schedule=function(e){this.active=!0,this.destination.add(e.schedule(t.dispatch,this.delay,{source:this,destination:this.destination,scheduler:e}))},t.prototype.scheduleNotification=function(e){if(!0!==this.errored){var t=this.scheduler,n=new l(t.now()+this.delay,e);this.queue.push(n),!1===this.active&&this._schedule(t)}},t.prototype._next=function(e){this.scheduleNotification(s.E.createNext(e))},t.prototype._error=function(e){this.errored=!0,this.queue=[],this.destination.error(e),this.unsubscribe()},t.prototype._complete=function(){this.scheduleNotification(s.E.createComplete()),this.unsubscribe()},t}(a.v),l=function(){return function(e,t){this.time=e,this.notification=t}}()},8669(e,t,n){\"use strict\";n.d(t,{F:()=>o});var r=n(5779),i=n(3409);function o(e,t){return function(n){return n.lift(new a(e,t))}}var a=function(){function e(e,t){this.compare=e,this.keySelector=t}return e.prototype.call=function(e,t){return t.subscribe(new s(e,this.compare,this.keySelector))},e}(),s=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.keySelector=r,i.hasKey=!1,\"function\"==typeof n&&(i.compare=n),i}return r.C6(t,e),t.prototype.compare=function(e,t){return e===t},t.prototype._next=function(e){var t;try{var n=this.keySelector;t=n?n(e):e}catch(e){return this.destination.error(e)}var r=!1;if(this.hasKey)try{r=(0,this.compare)(this.key,t)}catch(e){return this.destination.error(e)}else this.hasKey=!0;r||(this.key=t,this.destination.next(e))},t}(i.v)},6275(e,t,n){\"use strict\";n.d(t,{p:()=>o});var r=n(5779),i=n(3409);function o(e,t){return function(n){return n.lift(new a(e,t))}}var a=function(){function e(e,t){this.predicate=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate,this.thisArg))},e}(),s=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.predicate=n,i.thisArg=r,i.count=0,i}return r.C6(t,e),t.prototype._next=function(e){var t;try{t=this.predicate.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}t&&this.destination.next(e)},t}(i.v)},2331(e,t,n){\"use strict\";n.d(t,{$:()=>c,k:()=>p});var r=n(5779),i=n(3409),o=n(9290),a=n(9386),s=n(9023);function c(e,t,n,r){return function(i){return i.lift(new u(e,t,n,r))}}var u=function(){function e(e,t,n,r){this.keySelector=e,this.elementSelector=t,this.durationSelector=n,this.subjectSelector=r}return e.prototype.call=function(e,t){return t.subscribe(new d(e,this.keySelector,this.elementSelector,this.durationSelector,this.subjectSelector))},e}(),d=function(e){function t(t,n,r,i,o){var a=e.call(this,t)||this;return a.keySelector=n,a.elementSelector=r,a.durationSelector=i,a.subjectSelector=o,a.groups=null,a.attemptedToUnsubscribe=!1,a.count=0,a}return r.C6(t,e),t.prototype._next=function(e){var t;try{t=this.keySelector(e)}catch(e){return void this.error(e)}this._group(e,t)},t.prototype._group=function(e,t){var n=this.groups;n||(n=this.groups=new Map);var r,i=n.get(t);if(this.elementSelector)try{r=this.elementSelector(e)}catch(e){this.error(e)}else r=e;if(!i){i=this.subjectSelector?this.subjectSelector():new s.B7,n.set(t,i);var o=new p(t,i,this);if(this.destination.next(o),this.durationSelector){var a=void 0;try{a=this.durationSelector(new p(t,i))}catch(e){return void this.error(e)}this.add(a.subscribe(new l(t,i,this)))}}i.closed||i.next(r)},t.prototype._error=function(e){var t=this.groups;t&&(t.forEach(function(t,n){t.error(e)}),t.clear()),this.destination.error(e)},t.prototype._complete=function(){var e=this.groups;e&&(e.forEach(function(e,t){e.complete()}),e.clear()),this.destination.complete()},t.prototype.removeGroup=function(e){this.groups.delete(e)},t.prototype.unsubscribe=function(){this.closed||(this.attemptedToUnsubscribe=!0,0===this.count&&e.prototype.unsubscribe.call(this))},t}(i.v),l=function(e){function t(t,n,r){var i=e.call(this,n)||this;return i.key=t,i.group=n,i.parent=r,i}return r.C6(t,e),t.prototype._next=function(e){this.complete()},t.prototype._unsubscribe=function(){var e=this.parent,t=this.key;this.key=this.parent=null,e&&e.removeGroup(t)},t}(i.v),p=function(e){function t(t,n,r){var i=e.call(this)||this;return i.key=t,i.groupSubject=n,i.refCountSubscription=r,i}return r.C6(t,e),t.prototype._subscribe=function(e){var t=new o.y,n=this.refCountSubscription,r=this.groupSubject;return n&&!n.closed&&t.add(new h(n)),t.add(r.subscribe(e)),t},t}(a.c),h=function(e){function t(t){var n=e.call(this)||this;return n.parent=t,t.count++,n}return r.C6(t,e),t.prototype.unsubscribe=function(){var t=this.parent;t.closed||this.closed||(e.prototype.unsubscribe.call(this),t.count-=1,0===t.count&&t.attemptedToUnsubscribe&&t.unsubscribe())},t}(o.y)},2035(e,t,n){\"use strict\";n.d(t,{T:()=>o});var r=n(5779),i=n(3409);function o(e,t){return function(n){if(\"function\"!=typeof e)throw new TypeError(\"argument is not a function. Are you looking for `mapTo()`?\");return n.lift(new a(e,t))}}var a=function(){function e(e,t){this.project=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new s(e,this.project,this.thisArg))},e}(),s=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.project=n,i.count=0,i.thisArg=r||i,i}return r.C6(t,e),t.prototype._next=function(e){var t;try{t=this.project.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(i.v)},9050(e,t,n){\"use strict\";n.d(t,{U:()=>o});var r=n(6083),i=n(8604);function o(e){return void 0===e&&(e=Number.POSITIVE_INFINITY),(0,r.ZZ)(i.D,e)}},6083(e,t,n){\"use strict\";n.d(t,{ZZ:()=>s,qI:()=>d});var r=n(5779),i=n(2035),o=n(8241),a=n(9559);function s(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),\"function\"==typeof t?function(r){return r.pipe(s(function(n,r){return(0,o.H)(e(n,r)).pipe((0,i.T)(function(e,i){return t(n,e,r,i)}))},n))}:(\"number\"==typeof t&&(n=t),function(t){return t.lift(new c(e,n))})}var c=function(){function e(e,t){void 0===t&&(t=Number.POSITIVE_INFINITY),this.project=e,this.concurrent=t}return e.prototype.call=function(e,t){return t.subscribe(new u(e,this.project,this.concurrent))},e}(),u=function(e){function t(t,n,r){void 0===r&&(r=Number.POSITIVE_INFINITY);var i=e.call(this,t)||this;return i.project=n,i.concurrent=r,i.hasCompleted=!1,i.buffer=[],i.active=0,i.index=0,i}return r.C6(t,e),t.prototype._next=function(e){this.active<this.concurrent?this._tryNext(e):this.buffer.push(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this.active++,this._innerSub(t)},t.prototype._innerSub=function(e){var t=new a.zA(this),n=this.destination;n.add(t);var r=(0,a.tS)(e,t);r!==t&&n.add(r)},t.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete(),this.unsubscribe()},t.prototype.notifyNext=function(e){this.destination.next(e)},t.prototype.notifyComplete=function(){var e=this.buffer;this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},t}(a.gn),d=s},3724(e,t,n){\"use strict\";n.d(t,{QE:()=>a,YZ:()=>c});var r=n(5779),i=n(3409),o=n(2796);function a(e,t){return void 0===t&&(t=0),function(n){return n.lift(new s(e,t))}}var s=function(){function e(e,t){void 0===t&&(t=0),this.scheduler=e,this.delay=t}return e.prototype.call=function(e,t){return t.subscribe(new c(e,this.scheduler,this.delay))},e}(),c=function(e){function t(t,n,r){void 0===r&&(r=0);var i=e.call(this,t)||this;return i.scheduler=n,i.delay=r,i}return r.C6(t,e),t.dispatch=function(e){var t=e.notification,n=e.destination;t.observe(n),this.unsubscribe()},t.prototype.scheduleMessage=function(e){this.destination.add(this.scheduler.schedule(t.dispatch,this.delay,new u(e,this.destination)))},t.prototype._next=function(e){this.scheduleMessage(o.E.createNext(e))},t.prototype._error=function(e){this.scheduleMessage(o.E.createError(e)),this.unsubscribe()},t.prototype._complete=function(){this.scheduleMessage(o.E.createComplete()),this.unsubscribe()},t}(i.v),u=function(){return function(e,t){this.notification=e,this.destination=t}}()},1709(e,t,n){\"use strict\";n.d(t,{B:()=>o});var r=n(5779),i=n(3409);function o(){return function(e){return e.lift(new a(e))}}var a=function(){function e(e){this.connectable=e}return e.prototype.call=function(e,t){var n=this.connectable;n._refCount++;var r=new s(e,n),i=t.subscribe(r);return r.closed||(r.connection=n.connect()),i},e}(),s=function(e){function t(t,n){var r=e.call(this,t)||this;return r.connectable=n,r}return r.C6(t,e),t.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._refCount;if(t<=0)this.connection=null;else if(e._refCount=t-1,t>1)this.connection=null;else{var n=this.connection,r=e._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},t}(i.v)},2551(e,t,n){\"use strict\";n.d(t,{l:()=>a});var r=n(5779),i=n(9023),o=n(9559);function a(e){return function(t){return t.lift(new s(e,t))}}var s=function(){function e(e,t){this.notifier=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new c(e,this.notifier,this.source))},e}(),c=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.notifier=n,i.source=r,i}return r.C6(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=this.errors,r=this.retries,a=this.retriesSubscription;if(r)this.errors=void 0,this.retriesSubscription=void 0;else{n=new i.B7;try{r=(0,this.notifier)(n)}catch(t){return e.prototype.error.call(this,t)}a=(0,o.tS)(r,new o.zA(this))}this._unsubscribeAndRecycle(),this.errors=n,this.retries=r,this.retriesSubscription=a,n.next(t)}},t.prototype._unsubscribe=function(){var e=this.errors,t=this.retriesSubscription;e&&(e.unsubscribe(),this.errors=void 0),t&&(t.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0},t.prototype.notifyNext=function(){var e=this._unsubscribe;this._unsubscribe=null,this._unsubscribeAndRecycle(),this._unsubscribe=e,this.source.subscribe(this)},t}(o.gn)},2161(e,t,n){\"use strict\";n.d(t,{t:()=>i});var r=n(8358);function i(e,t,n){var i;return i=e&&\"object\"==typeof e?e:{bufferSize:e,windowTime:t,refCount:!1,scheduler:n},function(e){return e.lift(function(e){var t,n,i=e.bufferSize,o=void 0===i?Number.POSITIVE_INFINITY:i,a=e.windowTime,s=void 0===a?Number.POSITIVE_INFINITY:a,c=e.refCount,u=e.scheduler,d=0,l=!1,p=!1;return function(e){var i;d++,!t||l?(l=!1,t=new r.m(o,s,u),i=t.subscribe(this),n=e.subscribe({next:function(e){t.next(e)},error:function(e){l=!0,t.error(e)},complete:function(){p=!0,n=void 0,t.complete()}}),p&&(n=void 0)):i=t.subscribe(this),this.add(function(){d--,i.unsubscribe(),i=void 0,n&&!p&&c&&0===d&&(n.unsubscribe(),n=void 0,t=void 0)})}}(i))}}},9835(e,t,n){\"use strict\";n.d(t,{n:()=>s});var r=n(5779),i=n(2035),o=n(8241),a=n(9559);function s(e,t){return\"function\"==typeof t?function(n){return n.pipe(s(function(n,r){return(0,o.H)(e(n,r)).pipe((0,i.T)(function(e,i){return t(n,e,r,i)}))}))}:function(t){return t.lift(new c(e))}}var c=function(){function e(e){this.project=e}return e.prototype.call=function(e,t){return t.subscribe(new u(e,this.project))},e}(),u=function(e){function t(t,n){var r=e.call(this,t)||this;return r.project=n,r.index=0,r}return r.C6(t,e),t.prototype._next=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this._innerSub(t)},t.prototype._innerSub=function(e){var t=this.innerSubscription;t&&t.unsubscribe();var n=new a.zA(this),r=this.destination;r.add(n),this.innerSubscription=(0,a.tS)(e,n),this.innerSubscription!==n&&r.add(this.innerSubscription)},t.prototype._complete=function(){var t=this.innerSubscription;t&&!t.closed||e.prototype._complete.call(this),this.unsubscribe()},t.prototype._unsubscribe=function(){this.innerSubscription=void 0},t.prototype.notifyComplete=function(){this.innerSubscription=void 0,this.isStopped&&e.prototype._complete.call(this)},t.prototype.notifyNext=function(e){this.destination.next(e)},t}(a.gn)},1698(e,t,n){\"use strict\";n.d(t,{s:()=>s});var r=n(5779),i=n(3409),o=n(2413),a=n(6780);function s(e){return function(t){return 0===e?(0,a.I)():t.lift(new c(e))}}var c=function(){function e(e){if(this.total=e,this.total<0)throw new o.k}return e.prototype.call=function(e,t){return t.subscribe(new u(e,this.total))},e}(),u=function(e){function t(t,n){var r=e.call(this,t)||this;return r.total=n,r.count=0,r}return r.C6(t,e),t.prototype._next=function(e){var t=this.total,n=++this.count;n<=t&&(this.destination.next(e),n===t&&(this.destination.complete(),this.unsubscribe()))},t}(i.v)},941(e,t,n){\"use strict\";n.d(t,{V:()=>o});var r=n(9386),i=n(9290);function o(e,t){return new r.c(function(n){var r=new i.y,o=0;return r.add(t.schedule(function(){o!==e.length?(n.next(e[o++]),n.closed||r.add(this.schedule())):n.complete()})),r})}},2148(e,t,n){\"use strict\";n.d(t,{S:()=>a});var r=n(9386),i=n(9290),o=n(3840);function a(e,t){if(!e)throw new Error(\"Iterable cannot be null\");return new r.c(function(n){var r,a=new i.y;return a.add(function(){r&&\"function\"==typeof r.return&&r.return()}),a.add(t.schedule(function(){r=e[o.lJ](),a.add(t.schedule(function(){if(!n.closed){var e,t;try{var i=r.next();e=i.value,t=i.done}catch(e){return void n.error(e)}t?n.complete():(n.next(e),this.schedule())}}))})),a})}},9475(e,t,n){\"use strict\";n.d(t,{x:()=>a});var r=n(9386),i=n(9290),o=n(9067);function a(e,t){return new r.c(function(n){var r=new i.y;return r.add(t.schedule(function(){var i=e[o.s]();r.add(i.subscribe({next:function(e){r.add(t.schedule(function(){return n.next(e)}))},error:function(e){r.add(t.schedule(function(){return n.error(e)}))},complete:function(){r.add(t.schedule(function(){return n.complete()}))}}))})),r})}},4545(e,t,n){\"use strict\";n.d(t,{P:()=>o});var r=n(9386),i=n(9290);function o(e,t){return new r.c(function(n){var r=new i.y;return r.add(t.schedule(function(){return e.then(function(e){r.add(t.schedule(function(){n.next(e),r.add(t.schedule(function(){return n.complete()}))}))},function(e){r.add(t.schedule(function(){return n.error(e)}))})})),r})}},2132(e,t,n){\"use strict\";n.d(t,{c:()=>l});var r=n(9475),i=n(4545),o=n(941),a=n(2148),s=n(9184),c=n(689),u=n(1738),d=n(2068);function l(e,t){if(null!=e){if((0,s.l)(e))return(0,r.x)(e,t);if((0,c.y)(e))return(0,i.P)(e,t);if((0,u.X)(e))return(0,o.V)(e,t);if((0,d.x)(e)||\"string\"==typeof e)return(0,a.S)(e,t)}throw new TypeError((null!==e&&typeof e||e)+\" is not observable\")}},1897(e,t,n){\"use strict\";n.d(t,{R:()=>i});var r=n(5779),i=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.scheduler=t,r.work=n,r.pending=!1,r}return r.C6(t,e),t.prototype.schedule=function(e,t){if(void 0===t&&(t=0),this.closed)return this;this.state=e;var n=this.id,r=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(r,n,t)),this.pending=!0,this.delay=t,this.id=this.id||this.requestAsyncId(r,this.id,t),this},t.prototype.requestAsyncId=function(e,t,n){return void 0===n&&(n=0),setInterval(e.flush.bind(e,this),n)},t.prototype.recycleAsyncId=function(e,t,n){if(void 0===n&&(n=0),null!==n&&this.delay===n&&!1===this.pending)return t;clearInterval(t)},t.prototype.execute=function(e,t){if(this.closed)return new Error(\"executing a cancelled action\");this.pending=!1;var n=this._execute(e,t);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(e,t){var n=!1,r=void 0;try{this.work(e)}catch(e){n=!0,r=!!e&&e||new Error(e)}if(n)return this.unsubscribe(),r},t.prototype._unsubscribe=function(){var e=this.id,t=this.scheduler,n=t.actions,r=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==r&&n.splice(r,1),null!=e&&(this.id=this.recycleAsyncId(t,e,null)),this.delay=null},t}(function(e){function t(t,n){return e.call(this)||this}return r.C6(t,e),t.prototype.schedule=function(e,t){return void 0===t&&(t=0),this},t}(n(9290).y))},8044(e,t,n){\"use strict\";n.d(t,{q:()=>o});var r=n(5779),i=n(6182),o=function(e){function t(n,r){void 0===r&&(r=i._.now);var o=e.call(this,n,function(){return t.delegate&&t.delegate!==o?t.delegate.now():r()})||this;return o.actions=[],o.active=!1,o.scheduled=void 0,o}return r.C6(t,e),t.prototype.schedule=function(n,r,i){return void 0===r&&(r=0),t.delegate&&t.delegate!==this?t.delegate.schedule(n,r,i):e.prototype.schedule.call(this,n,r,i)},t.prototype.flush=function(e){var t=this.actions;if(this.active)t.push(e);else{var n;this.active=!0;do{if(n=e.execute(e.state,e.delay))break}while(e=t.shift());if(this.active=!1,n){for(;e=t.shift();)e.unsubscribe();throw n}}},t}(i._)},7734(e,t,n){\"use strict\";n.d(t,{I:()=>l,$:()=>d});var r=n(5779),i=1,o=function(){return Promise.resolve()}(),a={};function s(e){return e in a&&(delete a[e],!0)}var c=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.scheduler=t,r.work=n,r}return r.C6(t,e),t.prototype.requestAsyncId=function(t,n,r){return void 0===r&&(r=0),null!==r&&r>0?e.prototype.requestAsyncId.call(this,t,n,r):(t.actions.push(this),t.scheduled||(t.scheduled=(c=t.flush.bind(t,null),u=i++,a[u]=!0,o.then(function(){return s(u)&&c()}),u)));var c,u},t.prototype.recycleAsyncId=function(t,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return e.prototype.recycleAsyncId.call(this,t,n,r);0===t.actions.length&&(s(n),t.scheduled=void 0)},t}(n(1897).R),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.C6(t,e),t.prototype.flush=function(e){this.active=!0,this.scheduled=void 0;var t,n=this.actions,r=-1,i=n.length;e=e||n.shift();do{if(t=e.execute(e.state,e.delay))break}while(++r<i&&(e=n.shift()));if(this.active=!1,t){for(;++r<i&&(e=n.shift());)e.unsubscribe();throw t}},t}(n(8044).q),d=new u(c),l=d},5573(e,t,n){\"use strict\";n.d(t,{E:()=>i,b:()=>o});var r=n(1897),i=new(n(8044).q)(r.R),o=i},4126(e,t,n){\"use strict\";n.d(t,{g:()=>s,T:()=>a});var r=n(5779),i=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.scheduler=t,r.work=n,r}return r.C6(t,e),t.prototype.schedule=function(t,n){return void 0===n&&(n=0),n>0?e.prototype.schedule.call(this,t,n):(this.delay=n,this.state=t,this.scheduler.flush(this),this)},t.prototype.execute=function(t,n){return n>0||this.closed?e.prototype.execute.call(this,t,n):this._execute(t,n)},t.prototype.requestAsyncId=function(t,n,r){return void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0?e.prototype.requestAsyncId.call(this,t,n,r):t.flush(this)},t}(n(1897).R),o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.C6(t,e),t}(n(8044).q),a=new o(i),s=a},3840(e,t,n){\"use strict\";function r(){return\"function\"==typeof Symbol&&Symbol.iterator?Symbol.iterator:\"@@iterator\"}n.d(t,{lJ:()=>i});var i=r()},9067(e,t,n){\"use strict\";n.d(t,{s:()=>r});var r=function(){return\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\"}()},6014(e,t,n){\"use strict\";n.d(t,{D:()=>r});var r=function(){return\"function\"==typeof Symbol?Symbol(\"rxSubscriber\"):\"@@rxSubscriber_\"+Math.random()}()},2413(e,t,n){\"use strict\";n.d(t,{k:()=>r});var r=function(){function e(){return Error.call(this),this.message=\"argument out of range\",this.name=\"ArgumentOutOfRangeError\",this}return e.prototype=Object.create(Error.prototype),e}()},963(e,t,n){\"use strict\";n.d(t,{G:()=>r});var r=function(){function e(){return Error.call(this),this.message=\"no elements in sequence\",this.name=\"EmptyError\",this}return e.prototype=Object.create(Error.prototype),e}()},6306(e,t,n){\"use strict\";n.d(t,{P:()=>r});var r=function(){function e(){return Error.call(this),this.message=\"object unsubscribed\",this.name=\"ObjectUnsubscribedError\",this}return e.prototype=Object.create(Error.prototype),e}()},5(e,t,n){\"use strict\";n.d(t,{M:()=>r});var r=function(){function e(){return Error.call(this),this.message=\"Timeout has occurred\",this.name=\"TimeoutError\",this}return e.prototype=Object.create(Error.prototype),e}()},9368(e,t,n){\"use strict\";n.d(t,{Z:()=>r});var r=function(){function e(e){return Error.call(this),this.message=e?e.length+\" errors occurred during unsubscription:\\n\"+e.map(function(e,t){return t+1+\") \"+e.toString()}).join(\"\\n  \"):\"\",this.name=\"UnsubscriptionError\",this.errors=e,this}return e.prototype=Object.create(Error.prototype),e}()},2724(e,t,n){\"use strict\";n.d(t,{H:()=>i});var r=n(3409);function i(e){for(;e;){var t=e,n=t.closed,i=t.destination,o=t.isStopped;if(n||o)return!1;e=i&&i instanceof r.v?i:null}return!0}},3762(e,t,n){\"use strict\";function r(e){setTimeout(function(){throw e},0)}n.d(t,{T:()=>r})},8604(e,t,n){\"use strict\";function r(e){return e}n.d(t,{D:()=>r})},2733(e,t,n){\"use strict\";n.d(t,{c:()=>r});var r=function(){return Array.isArray||function(e){return e&&\"number\"==typeof e.length}}()},1738(e,t,n){\"use strict\";n.d(t,{X:()=>r});var r=function(e){return e&&\"number\"==typeof e.length&&\"function\"!=typeof e}},1454(e,t,n){\"use strict\";function r(e){return e instanceof Date&&!isNaN(+e)}n.d(t,{$:()=>r})},3278(e,t,n){\"use strict\";function r(e){return\"function\"==typeof e}n.d(t,{T:()=>r})},9184(e,t,n){\"use strict\";n.d(t,{l:()=>i});var r=n(9067);function i(e){return e&&\"function\"==typeof e[r.s]}},2068(e,t,n){\"use strict\";n.d(t,{x:()=>i});var r=n(3840);function i(e){return e&&\"function\"==typeof e[r.lJ]}},899(e,t,n){\"use strict\";n.d(t,{k:()=>i});var r=n(2733);function i(e){return!(0,r.c)(e)&&e-parseFloat(e)+1>=0}},9273(e,t,n){\"use strict\";function r(e){return null!==e&&\"object\"==typeof e}n.d(t,{G:()=>r})},689(e,t,n){\"use strict\";function r(e){return!!e&&\"function\"!=typeof e.subscribe&&\"function\"==typeof e.then}n.d(t,{y:()=>r})},3017(e,t,n){\"use strict\";function r(e){return e&&\"function\"==typeof e.schedule}n.d(t,{m:()=>r})},906(e,t,n){\"use strict\";function r(){}n.d(t,{l:()=>r})},8153(e,t,n){\"use strict\";function r(e,t){function n(){return!n.pred.apply(n.thisArg,arguments)}return n.pred=e,n.thisArg=t,n}n.d(t,{A:()=>r})},990(e,t,n){\"use strict\";n.d(t,{F:()=>i,m:()=>o});var r=n(8604);function i(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return o(e)}function o(e){return 0===e.length?r.D:1===e.length?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)}}},1109(e,t,n){\"use strict\";n.d(t,{i:()=>p});var r=n(5168),i=n(7688),o=n(3683),a=n(2376),s=n(1738),c=n(689),u=n(9273),d=n(3840),l=n(9067),p=function(e){if(e&&\"function\"==typeof e[l.s])return(0,a.X)(e);if((0,s.X)(e))return(0,r.v)(e);if((0,c.y)(e))return(0,i.F)(e);if(e&&\"function\"==typeof e[d.lJ])return(0,o.S)(e);var t=(0,u.G)(e)?\"an invalid object\":\"'\"+e+\"'\";throw new TypeError(\"You provided \"+t+\" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.\")}},5168(e,t,n){\"use strict\";n.d(t,{v:()=>r});var r=function(e){return function(t){for(var n=0,r=e.length;n<r&&!t.closed;n++)t.next(e[n]);t.complete()}}},3683(e,t,n){\"use strict\";n.d(t,{S:()=>i});var r=n(3840),i=function(e){return function(t){for(var n=e[r.lJ]();;){var i=void 0;try{i=n.next()}catch(e){return t.error(e),t}if(i.done){t.complete();break}if(t.next(i.value),t.closed)break}return\"function\"==typeof n.return&&t.add(function(){n.return&&n.return()}),t}}},2376(e,t,n){\"use strict\";n.d(t,{X:()=>i});var r=n(9067),i=function(e){return function(t){var n=e[r.s]();if(\"function\"!=typeof n.subscribe)throw new TypeError(\"Provided object does not correctly implement Symbol.observable\");return n.subscribe(t)}}},7688(e,t,n){\"use strict\";n.d(t,{F:()=>i});var r=n(3762),i=function(e){return function(t){return e.then(function(e){t.closed||(t.next(e),t.complete())},function(e){return t.error(e)}).then(null,r.T),t}}},7408(e,t,n){\"use strict\";n.d(t,{F:()=>s});var r=n(5779),i=function(e){function t(t,n,r){var i=e.call(this)||this;return i.parent=t,i.outerValue=n,i.outerIndex=r,i.index=0,i}return r.C6(t,e),t.prototype._next=function(e){this.parent.notifyNext(this.outerValue,e,this.outerIndex,this.index++,this)},t.prototype._error=function(e){this.parent.notifyError(e,this),this.unsubscribe()},t.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},t}(n(3409).v),o=n(1109),a=n(9386);function s(e,t,n,r,s){if(void 0===s&&(s=new i(e,n,r)),!s.closed)return t instanceof a.c?t.subscribe(s):(0,o.i)(t)(s)}},9297(e,t,n){\"use strict\";n.d(t,{u:()=>a});var r=n(3409),i=n(6014),o=n(8805);function a(e,t,n){if(e){if(e instanceof r.v)return e;if(e[i.D])return e[i.D]()}return e||t||n?new r.v(e,t,n):new r.v(o.I)}},473(e,t,n){\"use strict\";n.r(t),n.d(t,{audit:()=>o,auditTime:()=>d,buffer:()=>l,bufferCount:()=>y,bufferTime:()=>b,bufferToggle:()=>k,bufferWhen:()=>x,catchError:()=>j.W,combineAll:()=>z,combineLatest:()=>U,concat:()=>V,concatAll:()=>G.K,concatMap:()=>Y,concatMapTo:()=>W,count:()=>$,debounce:()=>J,debounceTime:()=>ee,defaultIfEmpty:()=>ie,delay:()=>se.c,delayWhen:()=>ue,dematerialize:()=>fe,distinct:()=>ge,distinctUntilChanged:()=>be.F,distinctUntilKeyChanged:()=>Se,elementAt:()=>ke,endWith:()=>Me,every:()=>xe,exhaust:()=>je,exhaustMap:()=>Be,expand:()=>Ve,filter:()=>Ce.p,finalize:()=>Ye,find:()=>Ke,findIndex:()=>Qe,first:()=>et,flatMap:()=>H.qI,groupBy:()=>tt.$,ignoreElements:()=>nt,isEmpty:()=>ot,last:()=>pt,map:()=>Fe.T,mapTo:()=>ht,materialize:()=>gt,max:()=>Et,merge:()=>Ot,mergeAll:()=>At.U,mergeMap:()=>H.ZZ,mergeMapTo:()=>Tt,mergeScan:()=>kt,min:()=>xt,multicast:()=>Dt,observeOn:()=>Lt.QE,onErrorResumeNext:()=>zt,pairwise:()=>Ut,partition:()=>Ht,pluck:()=>Yt,publish:()=>$t,publishBehavior:()=>Zt,publishLast:()=>Qt,publishReplay:()=>en,race:()=>nn,reduce:()=>It,refCount:()=>fn.B,repeat:()=>rn,repeatWhen:()=>sn,retry:()=>dn,retryWhen:()=>hn.l,sample:()=>yn,sampleTime:()=>vn,scan:()=>bt,sequenceEqual:()=>wn,share:()=>On,shareReplay:()=>An.t,single:()=>Tn,skip:()=>Mn,skipLast:()=>Dn,skipUntil:()=>zn,skipWhile:()=>Un,startWith:()=>Gn,subscribeOn:()=>$n,switchAll:()=>Jn,switchMap:()=>Zn.n,switchMapTo:()=>Qn,take:()=>Te.s,takeLast:()=>ut,takeUntil:()=>Xn,takeWhile:()=>nr,tap:()=>sr,throttle:()=>lr,throttleTime:()=>fr,throwIfEmpty:()=>Ee,timeInterval:()=>_r,timeout:()=>Or,timeoutWith:()=>Cr,timestamp:()=>Ar,toArray:()=>Rr,window:()=>Mr,windowCount:()=>Dr,windowTime:()=>zr,windowToggle:()=>Hr,windowWhen:()=>$r,withLatestFrom:()=>Jr,zip:()=>ti,zipAll:()=>ni});var r=n(5779),i=n(9559);function o(e){return function(t){return t.lift(new a(e))}}var a=function(){function e(e){this.durationSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new s(e,this.durationSelector))},e}(),s=function(e){function t(t,n){var r=e.call(this,t)||this;return r.durationSelector=n,r.hasValue=!1,r}return r.C6(t,e),t.prototype._next=function(e){if(this.value=e,this.hasValue=!0,!this.throttled){var t=void 0;try{t=(0,this.durationSelector)(e)}catch(e){return this.destination.error(e)}var n=(0,i.tS)(t,new i.zA(this));!n||n.closed?this.clearThrottle():this.add(this.throttled=n)}},t.prototype.clearThrottle=function(){var e=this,t=e.value,n=e.hasValue,r=e.throttled;r&&(this.remove(r),this.throttled=void 0,r.unsubscribe()),n&&(this.value=void 0,this.hasValue=!1,this.destination.next(t))},t.prototype.notifyNext=function(){this.clearThrottle()},t.prototype.notifyComplete=function(){this.clearThrottle()},t}(i.gn),c=n(5573),u=n(5520);function d(e,t){return void 0===t&&(t=c.b),o(function(){return(0,u.O)(e,t)})}function l(e){return function(t){return t.lift(new p(e))}}var p=function(){function e(e){this.closingNotifier=e}return e.prototype.call=function(e,t){return t.subscribe(new h(e,this.closingNotifier))},e}(),h=function(e){function t(t,n){var r=e.call(this,t)||this;return r.buffer=[],r.add((0,i.tS)(n,new i.zA(r))),r}return r.C6(t,e),t.prototype._next=function(e){this.buffer.push(e)},t.prototype.notifyNext=function(){var e=this.buffer;this.buffer=[],this.destination.next(e)},t}(i.gn),f=n(3409);function y(e,t){return void 0===t&&(t=null),function(n){return n.lift(new m(e,t))}}var m=function(){function e(e,t){this.bufferSize=e,this.startBufferEvery=t,this.subscriberClass=t&&e!==t?v:g}return e.prototype.call=function(e,t){return t.subscribe(new this.subscriberClass(e,this.bufferSize,this.startBufferEvery))},e}(),g=function(e){function t(t,n){var r=e.call(this,t)||this;return r.bufferSize=n,r.buffer=[],r}return r.C6(t,e),t.prototype._next=function(e){var t=this.buffer;t.push(e),t.length==this.bufferSize&&(this.destination.next(t),this.buffer=[])},t.prototype._complete=function(){var t=this.buffer;t.length>0&&this.destination.next(t),e.prototype._complete.call(this)},t}(f.v),v=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.bufferSize=n,i.startBufferEvery=r,i.buffers=[],i.count=0,i}return r.C6(t,e),t.prototype._next=function(e){var t=this,n=t.bufferSize,r=t.startBufferEvery,i=t.buffers,o=t.count;this.count++,o%r===0&&i.push([]);for(var a=i.length;a--;){var s=i[a];s.push(e),s.length===n&&(i.splice(a,1),this.destination.next(s))}},t.prototype._complete=function(){for(var t=this.buffers,n=this.destination;t.length>0;){var r=t.shift();r.length>0&&n.next(r)}e.prototype._complete.call(this)},t}(f.v),_=n(3017);function b(e){var t=arguments.length,n=c.b;(0,_.m)(arguments[arguments.length-1])&&(n=arguments[arguments.length-1],t--);var r=null;t>=2&&(r=arguments[1]);var i=Number.POSITIVE_INFINITY;return t>=3&&(i=arguments[2]),function(t){return t.lift(new S(e,r,i,n))}}var S=function(){function e(e,t,n,r){this.bufferTimeSpan=e,this.bufferCreationInterval=t,this.maxBufferSize=n,this.scheduler=r}return e.prototype.call=function(e,t){return t.subscribe(new C(e,this.bufferTimeSpan,this.bufferCreationInterval,this.maxBufferSize,this.scheduler))},e}(),w=function(){return function(){this.buffer=[]}}(),C=function(e){function t(t,n,r,i,o){var a=e.call(this,t)||this;a.bufferTimeSpan=n,a.bufferCreationInterval=r,a.maxBufferSize=i,a.scheduler=o,a.contexts=[];var s=a.openContext();if(a.timespanOnly=null==r||r<0,a.timespanOnly){var c={subscriber:a,context:s,bufferTimeSpan:n};a.add(s.closeAction=o.schedule(I,n,c))}else{var u={subscriber:a,context:s},d={bufferTimeSpan:n,bufferCreationInterval:r,subscriber:a,scheduler:o};a.add(s.closeAction=o.schedule(P,n,u)),a.add(o.schedule(E,r,d))}return a}return r.C6(t,e),t.prototype._next=function(e){for(var t,n=this.contexts,r=n.length,i=0;i<r;i++){var o=n[i],a=o.buffer;a.push(e),a.length==this.maxBufferSize&&(t=o)}t&&this.onBufferFull(t)},t.prototype._error=function(t){this.contexts.length=0,e.prototype._error.call(this,t)},t.prototype._complete=function(){for(var t=this.contexts,n=this.destination;t.length>0;){var r=t.shift();n.next(r.buffer)}e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){this.contexts=null},t.prototype.onBufferFull=function(e){this.closeContext(e);var t=e.closeAction;if(t.unsubscribe(),this.remove(t),!this.closed&&this.timespanOnly){e=this.openContext();var n=this.bufferTimeSpan,r={subscriber:this,context:e,bufferTimeSpan:n};this.add(e.closeAction=this.scheduler.schedule(I,n,r))}},t.prototype.openContext=function(){var e=new w;return this.contexts.push(e),e},t.prototype.closeContext=function(e){this.destination.next(e.buffer);var t=this.contexts;(t?t.indexOf(e):-1)>=0&&t.splice(t.indexOf(e),1)},t}(f.v);function I(e){var t=e.subscriber,n=e.context;n&&t.closeContext(n),t.closed||(e.context=t.openContext(),e.context.closeAction=this.schedule(e,e.bufferTimeSpan))}function E(e){var t=e.bufferCreationInterval,n=e.bufferTimeSpan,r=e.subscriber,i=e.scheduler,o=r.openContext();r.closed||(r.add(o.closeAction=i.schedule(P,n,{subscriber:r,context:o})),this.schedule(e,t))}function P(e){var t=e.subscriber,n=e.context;t.closeContext(n)}var O=n(9290),A=n(7408),T=n(5422);function k(e,t){return function(n){return n.lift(new R(e,t))}}var R=function(){function e(e,t){this.openings=e,this.closingSelector=t}return e.prototype.call=function(e,t){return t.subscribe(new M(e,this.openings,this.closingSelector))},e}(),M=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.closingSelector=r,i.contexts=[],i.add((0,A.F)(i,n)),i}return r.C6(t,e),t.prototype._next=function(e){for(var t=this.contexts,n=t.length,r=0;r<n;r++)t[r].buffer.push(e)},t.prototype._error=function(t){for(var n=this.contexts;n.length>0;){var r=n.shift();r.subscription.unsubscribe(),r.buffer=null,r.subscription=null}this.contexts=null,e.prototype._error.call(this,t)},t.prototype._complete=function(){for(var t=this.contexts;t.length>0;){var n=t.shift();this.destination.next(n.buffer),n.subscription.unsubscribe(),n.buffer=null,n.subscription=null}this.contexts=null,e.prototype._complete.call(this)},t.prototype.notifyNext=function(e,t){e?this.closeBuffer(e):this.openBuffer(t)},t.prototype.notifyComplete=function(e){this.closeBuffer(e.context)},t.prototype.openBuffer=function(e){try{var t=this.closingSelector.call(this,e);t&&this.trySubscribe(t)}catch(e){this._error(e)}},t.prototype.closeBuffer=function(e){var t=this.contexts;if(t&&e){var n=e.buffer,r=e.subscription;this.destination.next(n),t.splice(t.indexOf(e),1),this.remove(r),r.unsubscribe()}},t.prototype.trySubscribe=function(e){var t=this.contexts,n=new O.y,r={buffer:[],subscription:n};t.push(r);var i=(0,A.F)(this,e,r);!i||i.closed?this.closeBuffer(r):(i.context=r,this.add(i),n.add(i))},t}(T.E);function x(e){return function(t){return t.lift(new N(e))}}var N=function(){function e(e){this.closingSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new D(e,this.closingSelector))},e}(),D=function(e){function t(t,n){var r=e.call(this,t)||this;return r.closingSelector=n,r.subscribing=!1,r.openBuffer(),r}return r.C6(t,e),t.prototype._next=function(e){this.buffer.push(e)},t.prototype._complete=function(){var t=this.buffer;t&&this.destination.next(t),e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){this.buffer=void 0,this.subscribing=!1},t.prototype.notifyNext=function(){this.openBuffer()},t.prototype.notifyComplete=function(){this.subscribing?this.complete():this.openBuffer()},t.prototype.openBuffer=function(){var e=this.closingSubscription;e&&(this.remove(e),e.unsubscribe());var t,n=this.buffer;this.buffer&&this.destination.next(n),this.buffer=[];try{t=(0,this.closingSelector)()}catch(e){return this.error(e)}e=new O.y,this.closingSubscription=e,this.add(e),this.subscribing=!0,e.add((0,i.tS)(t,new i.zA(this))),this.subscribing=!1},t}(i.gn),j=n(9586),L=n(3483);function z(e){return function(t){return t.lift(new L.ZS(e))}}var F=n(2733),B=n(8241);function U(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=null;return\"function\"==typeof e[e.length-1]&&(n=e.pop()),1===e.length&&(0,F.c)(e[0])&&(e=e[0].slice()),function(t){return t.lift.call((0,B.H)([t].concat(e)),new L.ZS(n))}}var q=n(9301);function V(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return t.lift.call(q.x.apply(void 0,[t].concat(e)))}}var G=n(8930),H=n(6083);function Y(e,t){return(0,H.ZZ)(e,t,1)}function W(e,t){return Y(function(){return e},t)}function $(e){return function(t){return t.lift(new K(e,t))}}var K=function(){function e(e,t){this.predicate=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new Z(e,this.predicate,this.source))},e}(),Z=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.predicate=n,i.source=r,i.count=0,i.index=0,i}return r.C6(t,e),t.prototype._next=function(e){this.predicate?this._tryPredicate(e):this.count++},t.prototype._tryPredicate=function(e){var t;try{t=this.predicate(e,this.index++,this.source)}catch(e){return void this.destination.error(e)}t&&this.count++},t.prototype._complete=function(){this.destination.next(this.count),this.destination.complete()},t}(f.v);function J(e){return function(t){return t.lift(new Q(e))}}var Q=function(){function e(e){this.durationSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new X(e,this.durationSelector))},e}(),X=function(e){function t(t,n){var r=e.call(this,t)||this;return r.durationSelector=n,r.hasValue=!1,r}return r.C6(t,e),t.prototype._next=function(e){try{var t=this.durationSelector.call(this,e);t&&this._tryNext(e,t)}catch(e){this.destination.error(e)}},t.prototype._complete=function(){this.emitValue(),this.destination.complete()},t.prototype._tryNext=function(e,t){var n=this.durationSubscription;this.value=e,this.hasValue=!0,n&&(n.unsubscribe(),this.remove(n)),(n=(0,i.tS)(t,new i.zA(this)))&&!n.closed&&this.add(this.durationSubscription=n)},t.prototype.notifyNext=function(){this.emitValue()},t.prototype.notifyComplete=function(){this.emitValue()},t.prototype.emitValue=function(){if(this.hasValue){var t=this.value,n=this.durationSubscription;n&&(this.durationSubscription=void 0,n.unsubscribe(),this.remove(n)),this.value=void 0,this.hasValue=!1,e.prototype._next.call(this,t)}},t}(i.gn);function ee(e,t){return void 0===t&&(t=c.b),function(n){return n.lift(new te(e,t))}}var te=function(){function e(e,t){this.dueTime=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new ne(e,this.dueTime,this.scheduler))},e}(),ne=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.dueTime=n,i.scheduler=r,i.debouncedSubscription=null,i.lastValue=null,i.hasValue=!1,i}return r.C6(t,e),t.prototype._next=function(e){this.clearDebounce(),this.lastValue=e,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(re,this.dueTime,this))},t.prototype._complete=function(){this.debouncedNext(),this.destination.complete()},t.prototype.debouncedNext=function(){if(this.clearDebounce(),this.hasValue){var e=this.lastValue;this.lastValue=null,this.hasValue=!1,this.destination.next(e)}},t.prototype.clearDebounce=function(){var e=this.debouncedSubscription;null!==e&&(this.remove(e),e.unsubscribe(),this.debouncedSubscription=null)},t}(f.v);function re(e){e.debouncedNext()}function ie(e){return void 0===e&&(e=null),function(t){return t.lift(new oe(e))}}var oe=function(){function e(e){this.defaultValue=e}return e.prototype.call=function(e,t){return t.subscribe(new ae(e,this.defaultValue))},e}(),ae=function(e){function t(t,n){var r=e.call(this,t)||this;return r.defaultValue=n,r.isEmpty=!0,r}return r.C6(t,e),t.prototype._next=function(e){this.isEmpty=!1,this.destination.next(e)},t.prototype._complete=function(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()},t}(f.v),se=n(3158),ce=n(9386);function ue(e,t){return t?function(n){return new pe(n,t).lift(new de(e))}:function(t){return t.lift(new de(e))}}var de=function(){function e(e){this.delayDurationSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new le(e,this.delayDurationSelector))},e}(),le=function(e){function t(t,n){var r=e.call(this,t)||this;return r.delayDurationSelector=n,r.completed=!1,r.delayNotifierSubscriptions=[],r.index=0,r}return r.C6(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(e),this.removeSubscription(i),this.tryComplete()},t.prototype.notifyError=function(e,t){this._error(e)},t.prototype.notifyComplete=function(e){var t=this.removeSubscription(e);t&&this.destination.next(t),this.tryComplete()},t.prototype._next=function(e){var t=this.index++;try{var n=this.delayDurationSelector(e,t);n&&this.tryDelay(n,e)}catch(e){this.destination.error(e)}},t.prototype._complete=function(){this.completed=!0,this.tryComplete(),this.unsubscribe()},t.prototype.removeSubscription=function(e){e.unsubscribe();var t=this.delayNotifierSubscriptions.indexOf(e);return-1!==t&&this.delayNotifierSubscriptions.splice(t,1),e.outerValue},t.prototype.tryDelay=function(e,t){var n=(0,A.F)(this,e,t);n&&!n.closed&&(this.destination.add(n),this.delayNotifierSubscriptions.push(n))},t.prototype.tryComplete=function(){this.completed&&0===this.delayNotifierSubscriptions.length&&this.destination.complete()},t}(T.E),pe=function(e){function t(t,n){var r=e.call(this)||this;return r.source=t,r.subscriptionDelay=n,r}return r.C6(t,e),t.prototype._subscribe=function(e){this.subscriptionDelay.subscribe(new he(e,this.source))},t}(ce.c),he=function(e){function t(t,n){var r=e.call(this)||this;return r.parent=t,r.source=n,r.sourceSubscribed=!1,r}return r.C6(t,e),t.prototype._next=function(e){this.subscribeToSource()},t.prototype._error=function(e){this.unsubscribe(),this.parent.error(e)},t.prototype._complete=function(){this.unsubscribe(),this.subscribeToSource()},t.prototype.subscribeToSource=function(){this.sourceSubscribed||(this.sourceSubscribed=!0,this.unsubscribe(),this.source.subscribe(this.parent))},t}(f.v);function fe(){return function(e){return e.lift(new ye)}}var ye=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new me(e))},e}(),me=function(e){function t(t){return e.call(this,t)||this}return r.C6(t,e),t.prototype._next=function(e){e.observe(this.destination)},t}(f.v);function ge(e,t){return function(n){return n.lift(new ve(e,t))}}var ve=function(){function e(e,t){this.keySelector=e,this.flushes=t}return e.prototype.call=function(e,t){return t.subscribe(new _e(e,this.keySelector,this.flushes))},e}(),_e=function(e){function t(t,n,r){var o=e.call(this,t)||this;return o.keySelector=n,o.values=new Set,r&&o.add((0,i.tS)(r,new i.zA(o))),o}return r.C6(t,e),t.prototype.notifyNext=function(){this.values.clear()},t.prototype.notifyError=function(e){this._error(e)},t.prototype._next=function(e){this.keySelector?this._useKeySelector(e):this._finalizeNext(e,e)},t.prototype._useKeySelector=function(e){var t,n=this.destination;try{t=this.keySelector(e)}catch(e){return void n.error(e)}this._finalizeNext(t,e)},t.prototype._finalizeNext=function(e,t){var n=this.values;n.has(e)||(n.add(e),this.destination.next(t))},t}(i.gn),be=n(8669);function Se(e,t){return(0,be.F)(function(n,r){return t?t(n[e],r[e]):n[e]===r[e]})}var we=n(2413),Ce=n(6275),Ie=n(963);function Ee(e){return void 0===e&&(e=Ae),function(t){return t.lift(new Pe(e))}}var Pe=function(){function e(e){this.errorFactory=e}return e.prototype.call=function(e,t){return t.subscribe(new Oe(e,this.errorFactory))},e}(),Oe=function(e){function t(t,n){var r=e.call(this,t)||this;return r.errorFactory=n,r.hasValue=!1,r}return r.C6(t,e),t.prototype._next=function(e){this.hasValue=!0,this.destination.next(e)},t.prototype._complete=function(){if(this.hasValue)return this.destination.complete();var e=void 0;try{e=this.errorFactory()}catch(t){e=t}this.destination.error(e)},t}(f.v);function Ae(){return new Ie.G}var Te=n(1698);function ke(e,t){if(e<0)throw new we.k;var n=arguments.length>=2;return function(r){return r.pipe((0,Ce.p)(function(t,n){return n===e}),(0,Te.s)(1),n?ie(t):Ee(function(){return new we.k}))}}var Re=n(4128);function Me(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return(0,q.x)(t,Re.of.apply(void 0,e))}}function xe(e,t){return function(n){return n.lift(new Ne(e,t,n))}}var Ne=function(){function e(e,t,n){this.predicate=e,this.thisArg=t,this.source=n}return e.prototype.call=function(e,t){return t.subscribe(new De(e,this.predicate,this.thisArg,this.source))},e}(),De=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o.predicate=n,o.thisArg=r,o.source=i,o.index=0,o.thisArg=r||o,o}return r.C6(t,e),t.prototype.notifyComplete=function(e){this.destination.next(e),this.destination.complete()},t.prototype._next=function(e){var t=!1;try{t=this.predicate.call(this.thisArg,e,this.index++,this.source)}catch(e){return void this.destination.error(e)}t||this.notifyComplete(!1)},t.prototype._complete=function(){this.notifyComplete(!0)},t}(f.v);function je(){return function(e){return e.lift(new Le)}}var Le=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new ze(e))},e}(),ze=function(e){function t(t){var n=e.call(this,t)||this;return n.hasCompleted=!1,n.hasSubscription=!1,n}return r.C6(t,e),t.prototype._next=function(e){this.hasSubscription||(this.hasSubscription=!0,this.add((0,i.tS)(e,new i.zA(this))))},t.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete()},t.prototype.notifyComplete=function(){this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},t}(i.gn),Fe=n(2035);function Be(e,t){return t?function(n){return n.pipe(Be(function(n,r){return(0,B.H)(e(n,r)).pipe((0,Fe.T)(function(e,i){return t(n,e,r,i)}))}))}:function(t){return t.lift(new Ue(e))}}var Ue=function(){function e(e){this.project=e}return e.prototype.call=function(e,t){return t.subscribe(new qe(e,this.project))},e}(),qe=function(e){function t(t,n){var r=e.call(this,t)||this;return r.project=n,r.hasSubscription=!1,r.hasCompleted=!1,r.index=0,r}return r.C6(t,e),t.prototype._next=function(e){this.hasSubscription||this.tryNext(e)},t.prototype.tryNext=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this.hasSubscription=!0,this._innerSub(t)},t.prototype._innerSub=function(e){var t=new i.zA(this),n=this.destination;n.add(t);var r=(0,i.tS)(e,t);r!==t&&n.add(r)},t.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete(),this.unsubscribe()},t.prototype.notifyNext=function(e){this.destination.next(e)},t.prototype.notifyError=function(e){this.destination.error(e)},t.prototype.notifyComplete=function(){this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},t}(i.gn);function Ve(e,t,n){return void 0===t&&(t=Number.POSITIVE_INFINITY),t=(t||0)<1?Number.POSITIVE_INFINITY:t,function(r){return r.lift(new Ge(e,t,n))}}var Ge=function(){function e(e,t,n){this.project=e,this.concurrent=t,this.scheduler=n}return e.prototype.call=function(e,t){return t.subscribe(new He(e,this.project,this.concurrent,this.scheduler))},e}(),He=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o.project=n,o.concurrent=r,o.scheduler=i,o.index=0,o.active=0,o.hasCompleted=!1,r<Number.POSITIVE_INFINITY&&(o.buffer=[]),o}return r.C6(t,e),t.dispatch=function(e){var t=e.subscriber,n=e.result,r=e.value,i=e.index;t.subscribeToProjection(n,r,i)},t.prototype._next=function(e){var n=this.destination;if(n.closed)this._complete();else{var r=this.index++;if(this.active<this.concurrent){n.next(e);try{var i=(0,this.project)(e,r);if(this.scheduler){var o={subscriber:this,result:i,value:e,index:r};this.destination.add(this.scheduler.schedule(t.dispatch,0,o))}else this.subscribeToProjection(i,e,r)}catch(e){n.error(e)}}else this.buffer.push(e)}},t.prototype.subscribeToProjection=function(e,t,n){this.active++,this.destination.add((0,i.tS)(e,new i.zA(this)))},t.prototype._complete=function(){this.hasCompleted=!0,this.hasCompleted&&0===this.active&&this.destination.complete(),this.unsubscribe()},t.prototype.notifyNext=function(e){this._next(e)},t.prototype.notifyComplete=function(){var e=this.buffer;this.active--,e&&e.length>0&&this._next(e.shift()),this.hasCompleted&&0===this.active&&this.destination.complete()},t}(i.gn);function Ye(e){return function(t){return t.lift(new We(e))}}var We=function(){function e(e){this.callback=e}return e.prototype.call=function(e,t){return t.subscribe(new $e(e,this.callback))},e}(),$e=function(e){function t(t,n){var r=e.call(this,t)||this;return r.add(new O.y(n)),r}return r.C6(t,e),t}(f.v);function Ke(e,t){if(\"function\"!=typeof e)throw new TypeError(\"predicate is not a function\");return function(n){return n.lift(new Ze(e,n,!1,t))}}var Ze=function(){function e(e,t,n,r){this.predicate=e,this.source=t,this.yieldIndex=n,this.thisArg=r}return e.prototype.call=function(e,t){return t.subscribe(new Je(e,this.predicate,this.source,this.yieldIndex,this.thisArg))},e}(),Je=function(e){function t(t,n,r,i,o){var a=e.call(this,t)||this;return a.predicate=n,a.source=r,a.yieldIndex=i,a.thisArg=o,a.index=0,a}return r.C6(t,e),t.prototype.notifyComplete=function(e){var t=this.destination;t.next(e),t.complete(),this.unsubscribe()},t.prototype._next=function(e){var t=this.predicate,n=this.thisArg,r=this.index++;try{t.call(n||this,e,r,this.source)&&this.notifyComplete(this.yieldIndex?r:e)}catch(e){this.destination.error(e)}},t.prototype._complete=function(){this.notifyComplete(this.yieldIndex?-1:void 0)},t}(f.v);function Qe(e,t){return function(n){return n.lift(new Ze(e,n,!0,t))}}var Xe=n(8604);function et(e,t){var n=arguments.length>=2;return function(r){return r.pipe(e?(0,Ce.p)(function(t,n){return e(t,n,r)}):Xe.D,(0,Te.s)(1),n?ie(t):Ee(function(){return new Ie.G}))}}var tt=n(2331);function nt(){return function(e){return e.lift(new rt)}}var rt=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new it(e))},e}(),it=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.C6(t,e),t.prototype._next=function(e){},t}(f.v);function ot(){return function(e){return e.lift(new at)}}var at=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new st(e))},e}(),st=function(e){function t(t){return e.call(this,t)||this}return r.C6(t,e),t.prototype.notifyComplete=function(e){var t=this.destination;t.next(e),t.complete()},t.prototype._next=function(e){this.notifyComplete(!1)},t.prototype._complete=function(){this.notifyComplete(!0)},t}(f.v),ct=n(6780);function ut(e){return function(t){return 0===e?(0,ct.I)():t.lift(new dt(e))}}var dt=function(){function e(e){if(this.total=e,this.total<0)throw new we.k}return e.prototype.call=function(e,t){return t.subscribe(new lt(e,this.total))},e}(),lt=function(e){function t(t,n){var r=e.call(this,t)||this;return r.total=n,r.ring=new Array,r.count=0,r}return r.C6(t,e),t.prototype._next=function(e){var t=this.ring,n=this.total,r=this.count++;t.length<n?t.push(e):t[r%n]=e},t.prototype._complete=function(){var e=this.destination,t=this.count;if(t>0)for(var n=this.count>=this.total?this.total:this.count,r=this.ring,i=0;i<n;i++){var o=t++%n;e.next(r[o])}e.complete()},t}(f.v);function pt(e,t){var n=arguments.length>=2;return function(r){return r.pipe(e?(0,Ce.p)(function(t,n){return e(t,n,r)}):Xe.D,ut(1),n?ie(t):Ee(function(){return new Ie.G}))}}function ht(e){return function(t){return t.lift(new ft(e))}}var ft=function(){function e(e){this.value=e}return e.prototype.call=function(e,t){return t.subscribe(new yt(e,this.value))},e}(),yt=function(e){function t(t,n){var r=e.call(this,t)||this;return r.value=n,r}return r.C6(t,e),t.prototype._next=function(e){this.destination.next(this.value)},t}(f.v),mt=n(2796);function gt(){return function(e){return e.lift(new vt)}}var vt=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new _t(e))},e}(),_t=function(e){function t(t){return e.call(this,t)||this}return r.C6(t,e),t.prototype._next=function(e){this.destination.next(mt.E.createNext(e))},t.prototype._error=function(e){var t=this.destination;t.next(mt.E.createError(e)),t.complete()},t.prototype._complete=function(){var e=this.destination;e.next(mt.E.createComplete()),e.complete()},t}(f.v);function bt(e,t){var n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new St(e,t,n))}}var St=function(){function e(e,t,n){void 0===n&&(n=!1),this.accumulator=e,this.seed=t,this.hasSeed=n}return e.prototype.call=function(e,t){return t.subscribe(new wt(e,this.accumulator,this.seed,this.hasSeed))},e}(),wt=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o.accumulator=n,o._seed=r,o.hasSeed=i,o.index=0,o}return r.C6(t,e),Object.defineProperty(t.prototype,\"seed\",{get:function(){return this._seed},set:function(e){this.hasSeed=!0,this._seed=e},enumerable:!0,configurable:!0}),t.prototype._next=function(e){if(this.hasSeed)return this._tryNext(e);this.seed=e,this.destination.next(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.accumulator(this.seed,e,n)}catch(e){this.destination.error(e)}this.seed=t,this.destination.next(t)},t}(f.v),Ct=n(990);function It(e,t){return arguments.length>=2?function(n){return(0,Ct.F)(bt(e,t),ut(1),ie(t))(n)}:function(t){return(0,Ct.F)(bt(function(t,n,r){return e(t,n,r+1)}),ut(1))(t)}}function Et(e){return It(\"function\"==typeof e?function(t,n){return e(t,n)>0?t:n}:function(e,t){return e>t?e:t})}var Pt=n(3837);function Ot(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return t.lift.call(Pt.h.apply(void 0,[t].concat(e)))}}var At=n(9050);function Tt(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),\"function\"==typeof t?(0,H.ZZ)(function(){return e},t,n):(\"number\"==typeof t&&(n=t),(0,H.ZZ)(function(){return e},n))}function kt(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),function(r){return r.lift(new Rt(e,t,n))}}var Rt=function(){function e(e,t,n){this.accumulator=e,this.seed=t,this.concurrent=n}return e.prototype.call=function(e,t){return t.subscribe(new Mt(e,this.accumulator,this.seed,this.concurrent))},e}(),Mt=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o.accumulator=n,o.acc=r,o.concurrent=i,o.hasValue=!1,o.hasCompleted=!1,o.buffer=[],o.active=0,o.index=0,o}return r.C6(t,e),t.prototype._next=function(e){if(this.active<this.concurrent){var t=this.index++,n=this.destination,r=void 0;try{r=(0,this.accumulator)(this.acc,e,t)}catch(e){return n.error(e)}this.active++,this._innerSub(r)}else this.buffer.push(e)},t.prototype._innerSub=function(e){var t=new i.zA(this),n=this.destination;n.add(t);var r=(0,i.tS)(e,t);r!==t&&n.add(r)},t.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete()),this.unsubscribe()},t.prototype.notifyNext=function(e){var t=this.destination;this.acc=e,this.hasValue=!0,t.next(e)},t.prototype.notifyComplete=function(){var e=this.buffer;this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete())},t}(i.gn);function xt(e){return It(\"function\"==typeof e?function(t,n){return e(t,n)<0?t:n}:function(e,t){return e<t?e:t})}var Nt=n(9762);function Dt(e,t){return function(n){var r;if(r=\"function\"==typeof e?e:function(){return e},\"function\"==typeof t)return n.lift(new jt(r,t));var i=Object.create(n,Nt.f);return i.source=n,i.subjectFactory=r,i}}var jt=function(){function e(e,t){this.subjectFactory=e,this.selector=t}return e.prototype.call=function(e,t){var n=this.selector,r=this.subjectFactory(),i=n(r).subscribe(e);return i.add(t.subscribe(r)),i},e}(),Lt=n(3724);function zt(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return 1===e.length&&(0,F.c)(e[0])&&(e=e[0]),function(t){return t.lift(new Ft(e))}}var Ft=function(){function e(e){this.nextSources=e}return e.prototype.call=function(e,t){return t.subscribe(new Bt(e,this.nextSources))},e}(),Bt=function(e){function t(t,n){var r=e.call(this,t)||this;return r.destination=t,r.nextSources=n,r}return r.C6(t,e),t.prototype.notifyError=function(){this.subscribeToNextSource()},t.prototype.notifyComplete=function(){this.subscribeToNextSource()},t.prototype._error=function(e){this.subscribeToNextSource(),this.unsubscribe()},t.prototype._complete=function(){this.subscribeToNextSource(),this.unsubscribe()},t.prototype.subscribeToNextSource=function(){var e=this.nextSources.shift();if(e){var t=new i.zA(this),n=this.destination;n.add(t);var r=(0,i.tS)(e,t);r!==t&&n.add(r)}else this.destination.complete()},t}(i.gn);function Ut(){return function(e){return e.lift(new qt)}}var qt=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new Vt(e))},e}(),Vt=function(e){function t(t){var n=e.call(this,t)||this;return n.hasPrev=!1,n}return r.C6(t,e),t.prototype._next=function(e){var t;this.hasPrev?t=[this.prev,e]:this.hasPrev=!0,this.prev=e,t&&this.destination.next(t)},t}(f.v),Gt=n(8153);function Ht(e,t){return function(n){return[(0,Ce.p)(e,t)(n),(0,Ce.p)((0,Gt.A)(e,t))(n)]}}function Yt(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.length;if(0===n)throw new Error(\"list of properties cannot be empty.\");return function(t){return(0,Fe.T)(function(e,t){return function(n){for(var r=n,i=0;i<t;i++){var o=null!=r?r[e[i]]:void 0;if(void 0===o)return;r=o}return r}}(e,n))(t)}}var Wt=n(9023);function $t(e){return e?Dt(function(){return new Wt.B7},e):Dt(new Wt.B7)}var Kt=n(2361);function Zt(e){return function(t){return Dt(new Kt.t(e))(t)}}var Jt=n(1403);function Qt(){return function(e){return Dt(new Jt.h)(e)}}var Xt=n(8358);function en(e,t,n,r){n&&\"function\"!=typeof n&&(r=n);var i=\"function\"==typeof n?n:void 0,o=new Xt.m(e,t,r);return function(e){return Dt(function(){return o},i)(e)}}var tn=n(4460);function nn(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return 1===e.length&&(0,F.c)(e[0])&&(e=e[0]),t.lift.call(tn.O4.apply(void 0,[t].concat(e)))}}function rn(e){return void 0===e&&(e=-1),function(t){return 0===e?(0,ct.I)():e<0?t.lift(new on(-1,t)):t.lift(new on(e-1,t))}}var on=function(){function e(e,t){this.count=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new an(e,this.count,this.source))},e}(),an=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.count=n,i.source=r,i}return r.C6(t,e),t.prototype.complete=function(){if(!this.isStopped){var t=this.source,n=this.count;if(0===n)return e.prototype.complete.call(this);n>-1&&(this.count=n-1),t.subscribe(this._unsubscribeAndRecycle())}},t}(f.v);function sn(e){return function(t){return t.lift(new cn(e))}}var cn=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){return t.subscribe(new un(e,this.notifier,t))},e}(),un=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.notifier=n,i.source=r,i.sourceIsBeingSubscribedTo=!0,i}return r.C6(t,e),t.prototype.notifyNext=function(){this.sourceIsBeingSubscribedTo=!0,this.source.subscribe(this)},t.prototype.notifyComplete=function(){if(!1===this.sourceIsBeingSubscribedTo)return e.prototype.complete.call(this)},t.prototype.complete=function(){if(this.sourceIsBeingSubscribedTo=!1,!this.isStopped){if(this.retries||this.subscribeToRetries(),!this.retriesSubscription||this.retriesSubscription.closed)return e.prototype.complete.call(this);this._unsubscribeAndRecycle(),this.notifications.next(void 0)}},t.prototype._unsubscribe=function(){var e=this.notifications,t=this.retriesSubscription;e&&(e.unsubscribe(),this.notifications=void 0),t&&(t.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0},t.prototype._unsubscribeAndRecycle=function(){var t=this._unsubscribe;return this._unsubscribe=null,e.prototype._unsubscribeAndRecycle.call(this),this._unsubscribe=t,this},t.prototype.subscribeToRetries=function(){var t;this.notifications=new Wt.B7;try{t=(0,this.notifier)(this.notifications)}catch(t){return e.prototype.complete.call(this)}this.retries=t,this.retriesSubscription=(0,i.tS)(t,new i.zA(this))},t}(i.gn);function dn(e){return void 0===e&&(e=-1),function(t){return t.lift(new ln(e,t))}}var ln=function(){function e(e,t){this.count=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new pn(e,this.count,this.source))},e}(),pn=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.count=n,i.source=r,i}return r.C6(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=this.source,r=this.count;if(0===r)return e.prototype.error.call(this,t);r>-1&&(this.count=r-1),n.subscribe(this._unsubscribeAndRecycle())}},t}(f.v),hn=n(2551),fn=n(1709);function yn(e){return function(t){return t.lift(new mn(e))}}var mn=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){var n=new gn(e),r=t.subscribe(n);return r.add((0,i.tS)(this.notifier,new i.zA(n))),r},e}(),gn=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.hasValue=!1,t}return r.C6(t,e),t.prototype._next=function(e){this.value=e,this.hasValue=!0},t.prototype.notifyNext=function(){this.emitValue()},t.prototype.notifyComplete=function(){this.emitValue()},t.prototype.emitValue=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.value))},t}(i.gn);function vn(e,t){return void 0===t&&(t=c.b),function(n){return n.lift(new _n(e,t))}}var _n=function(){function e(e,t){this.period=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new bn(e,this.period,this.scheduler))},e}(),bn=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.period=n,i.scheduler=r,i.hasValue=!1,i.add(r.schedule(Sn,n,{subscriber:i,period:n})),i}return r.C6(t,e),t.prototype._next=function(e){this.lastValue=e,this.hasValue=!0},t.prototype.notifyNext=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.lastValue))},t}(f.v);function Sn(e){var t=e.subscriber,n=e.period;t.notifyNext(),this.schedule(e,n)}function wn(e,t){return function(n){return n.lift(new Cn(e,t))}}var Cn=function(){function e(e,t){this.compareTo=e,this.comparator=t}return e.prototype.call=function(e,t){return t.subscribe(new In(e,this.compareTo,this.comparator))},e}(),In=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.compareTo=n,i.comparator=r,i._a=[],i._b=[],i._oneComplete=!1,i.destination.add(n.subscribe(new En(t,i))),i}return r.C6(t,e),t.prototype._next=function(e){this._oneComplete&&0===this._b.length?this.emit(!1):(this._a.push(e),this.checkValues())},t.prototype._complete=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0,this.unsubscribe()},t.prototype.checkValues=function(){for(var e=this,t=e._a,n=e._b,r=e.comparator;t.length>0&&n.length>0;){var i=t.shift(),o=n.shift(),a=!1;try{a=r?r(i,o):i===o}catch(e){this.destination.error(e)}a||this.emit(!1)}},t.prototype.emit=function(e){var t=this.destination;t.next(e),t.complete()},t.prototype.nextB=function(e){this._oneComplete&&0===this._a.length?this.emit(!1):(this._b.push(e),this.checkValues())},t.prototype.completeB=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0},t}(f.v),En=function(e){function t(t,n){var r=e.call(this,t)||this;return r.parent=n,r}return r.C6(t,e),t.prototype._next=function(e){this.parent.nextB(e)},t.prototype._error=function(e){this.parent.error(e),this.unsubscribe()},t.prototype._complete=function(){this.parent.completeB(),this.unsubscribe()},t}(f.v);function Pn(){return new Wt.B7}function On(){return function(e){return(0,fn.B)()(Dt(Pn)(e))}}var An=n(2161);function Tn(e){return function(t){return t.lift(new kn(e,t))}}var kn=function(){function e(e,t){this.predicate=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new Rn(e,this.predicate,this.source))},e}(),Rn=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.predicate=n,i.source=r,i.seenValue=!1,i.index=0,i}return r.C6(t,e),t.prototype.applySingleValue=function(e){this.seenValue?this.destination.error(\"Sequence contains more than one element\"):(this.seenValue=!0,this.singleValue=e)},t.prototype._next=function(e){var t=this.index++;this.predicate?this.tryNext(e,t):this.applySingleValue(e)},t.prototype.tryNext=function(e,t){try{this.predicate(e,t,this.source)&&this.applySingleValue(e)}catch(e){this.destination.error(e)}},t.prototype._complete=function(){var e=this.destination;this.index>0?(e.next(this.seenValue?this.singleValue:void 0),e.complete()):e.error(new Ie.G)},t}(f.v);function Mn(e){return function(t){return t.lift(new xn(e))}}var xn=function(){function e(e){this.total=e}return e.prototype.call=function(e,t){return t.subscribe(new Nn(e,this.total))},e}(),Nn=function(e){function t(t,n){var r=e.call(this,t)||this;return r.total=n,r.count=0,r}return r.C6(t,e),t.prototype._next=function(e){++this.count>this.total&&this.destination.next(e)},t}(f.v);function Dn(e){return function(t){return t.lift(new jn(e))}}var jn=function(){function e(e){if(this._skipCount=e,this._skipCount<0)throw new we.k}return e.prototype.call=function(e,t){return 0===this._skipCount?t.subscribe(new f.v(e)):t.subscribe(new Ln(e,this._skipCount))},e}(),Ln=function(e){function t(t,n){var r=e.call(this,t)||this;return r._skipCount=n,r._count=0,r._ring=new Array(n),r}return r.C6(t,e),t.prototype._next=function(e){var t=this._skipCount,n=this._count++;if(n<t)this._ring[n]=e;else{var r=n%t,i=this._ring,o=i[r];i[r]=e,this.destination.next(o)}},t}(f.v);function zn(e){return function(t){return t.lift(new Fn(e))}}var Fn=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){return t.subscribe(new Bn(e,this.notifier))},e}(),Bn=function(e){function t(t,n){var r=e.call(this,t)||this;r.hasValue=!1;var o=new i.zA(r);r.add(o),r.innerSubscription=o;var a=(0,i.tS)(n,o);return a!==o&&(r.add(a),r.innerSubscription=a),r}return r.C6(t,e),t.prototype._next=function(t){this.hasValue&&e.prototype._next.call(this,t)},t.prototype.notifyNext=function(){this.hasValue=!0,this.innerSubscription&&this.innerSubscription.unsubscribe()},t.prototype.notifyComplete=function(){},t}(i.gn);function Un(e){return function(t){return t.lift(new qn(e))}}var qn=function(){function e(e){this.predicate=e}return e.prototype.call=function(e,t){return t.subscribe(new Vn(e,this.predicate))},e}(),Vn=function(e){function t(t,n){var r=e.call(this,t)||this;return r.predicate=n,r.skipping=!0,r.index=0,r}return r.C6(t,e),t.prototype._next=function(e){var t=this.destination;this.skipping&&this.tryCallPredicate(e),this.skipping||t.next(e)},t.prototype.tryCallPredicate=function(e){try{var t=this.predicate(e,this.index++);this.skipping=Boolean(t)}catch(e){this.destination.error(e)}},t}(f.v);function Gn(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[e.length-1];return(0,_.m)(n)?(e.pop(),function(t){return(0,q.x)(e,t,n)}):function(t){return(0,q.x)(e,t)}}var Hn=n(7734),Yn=n(899),Wn=function(e){function t(t,n,r){void 0===n&&(n=0),void 0===r&&(r=Hn.I);var i=e.call(this)||this;return i.source=t,i.delayTime=n,i.scheduler=r,(!(0,Yn.k)(n)||n<0)&&(i.delayTime=0),r&&\"function\"==typeof r.schedule||(i.scheduler=Hn.I),i}return r.C6(t,e),t.create=function(e,n,r){return void 0===n&&(n=0),void 0===r&&(r=Hn.I),new t(e,n,r)},t.dispatch=function(e){var t=e.source,n=e.subscriber;return this.add(t.subscribe(n))},t.prototype._subscribe=function(e){var n=this.delayTime,r=this.source;return this.scheduler.schedule(t.dispatch,n,{source:r,subscriber:e})},t}(ce.c);function $n(e,t){return void 0===t&&(t=0),function(n){return n.lift(new Kn(e,t))}}var Kn=function(){function e(e,t){this.scheduler=e,this.delay=t}return e.prototype.call=function(e,t){return new Wn(t,this.delay,this.scheduler).subscribe(e)},e}(),Zn=n(9835);function Jn(){return(0,Zn.n)(Xe.D)}function Qn(e,t){return t?(0,Zn.n)(function(){return e},t):(0,Zn.n)(function(){return e})}function Xn(e){return function(t){return t.lift(new er(e))}}var er=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){var n=new tr(e),r=(0,i.tS)(this.notifier,new i.zA(n));return r&&!n.seenValue?(n.add(r),t.subscribe(n)):n},e}(),tr=function(e){function t(t){var n=e.call(this,t)||this;return n.seenValue=!1,n}return r.C6(t,e),t.prototype.notifyNext=function(){this.seenValue=!0,this.complete()},t.prototype.notifyComplete=function(){},t}(i.gn);function nr(e,t){return void 0===t&&(t=!1),function(n){return n.lift(new rr(e,t))}}var rr=function(){function e(e,t){this.predicate=e,this.inclusive=t}return e.prototype.call=function(e,t){return t.subscribe(new ir(e,this.predicate,this.inclusive))},e}(),ir=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.predicate=n,i.inclusive=r,i.index=0,i}return r.C6(t,e),t.prototype._next=function(e){var t,n=this.destination;try{t=this.predicate(e,this.index++)}catch(e){return void n.error(e)}this.nextOrComplete(e,t)},t.prototype.nextOrComplete=function(e,t){var n=this.destination;Boolean(t)?n.next(e):(this.inclusive&&n.next(e),n.complete())},t}(f.v),or=n(906),ar=n(3278);function sr(e,t,n){return function(r){return r.lift(new cr(e,t,n))}}var cr=function(){function e(e,t,n){this.nextOrObserver=e,this.error=t,this.complete=n}return e.prototype.call=function(e,t){return t.subscribe(new ur(e,this.nextOrObserver,this.error,this.complete))},e}(),ur=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o._tapNext=or.l,o._tapError=or.l,o._tapComplete=or.l,o._tapError=r||or.l,o._tapComplete=i||or.l,(0,ar.T)(n)?(o._context=o,o._tapNext=n):n&&(o._context=n,o._tapNext=n.next||or.l,o._tapError=n.error||or.l,o._tapComplete=n.complete||or.l),o}return r.C6(t,e),t.prototype._next=function(e){try{this._tapNext.call(this._context,e)}catch(e){return void this.destination.error(e)}this.destination.next(e)},t.prototype._error=function(e){try{this._tapError.call(this._context,e)}catch(e){return void this.destination.error(e)}this.destination.error(e)},t.prototype._complete=function(){try{this._tapComplete.call(this._context)}catch(e){return void this.destination.error(e)}return this.destination.complete()},t}(f.v),dr={leading:!0,trailing:!1};function lr(e,t){return void 0===t&&(t=dr),function(n){return n.lift(new pr(e,!!t.leading,!!t.trailing))}}var pr=function(){function e(e,t,n){this.durationSelector=e,this.leading=t,this.trailing=n}return e.prototype.call=function(e,t){return t.subscribe(new hr(e,this.durationSelector,this.leading,this.trailing))},e}(),hr=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o.destination=t,o.durationSelector=n,o._leading=r,o._trailing=i,o._hasValue=!1,o}return r.C6(t,e),t.prototype._next=function(e){this._hasValue=!0,this._sendValue=e,this._throttled||(this._leading?this.send():this.throttle(e))},t.prototype.send=function(){var e=this._hasValue,t=this._sendValue;e&&(this.destination.next(t),this.throttle(t)),this._hasValue=!1,this._sendValue=void 0},t.prototype.throttle=function(e){var t=this.tryDurationSelector(e);t&&this.add(this._throttled=(0,i.tS)(t,new i.zA(this)))},t.prototype.tryDurationSelector=function(e){try{return this.durationSelector(e)}catch(e){return this.destination.error(e),null}},t.prototype.throttlingDone=function(){var e=this._throttled,t=this._trailing;e&&e.unsubscribe(),this._throttled=void 0,t&&this.send()},t.prototype.notifyNext=function(){this.throttlingDone()},t.prototype.notifyComplete=function(){this.throttlingDone()},t}(i.gn);function fr(e,t,n){return void 0===t&&(t=c.b),void 0===n&&(n=dr),function(r){return r.lift(new yr(e,t,n.leading,n.trailing))}}var yr=function(){function e(e,t,n,r){this.duration=e,this.scheduler=t,this.leading=n,this.trailing=r}return e.prototype.call=function(e,t){return t.subscribe(new mr(e,this.duration,this.scheduler,this.leading,this.trailing))},e}(),mr=function(e){function t(t,n,r,i,o){var a=e.call(this,t)||this;return a.duration=n,a.scheduler=r,a.leading=i,a.trailing=o,a._hasTrailingValue=!1,a._trailingValue=null,a}return r.C6(t,e),t.prototype._next=function(e){this.throttled?this.trailing&&(this._trailingValue=e,this._hasTrailingValue=!0):(this.add(this.throttled=this.scheduler.schedule(gr,this.duration,{subscriber:this})),this.leading?this.destination.next(e):this.trailing&&(this._trailingValue=e,this._hasTrailingValue=!0))},t.prototype._complete=function(){this._hasTrailingValue?(this.destination.next(this._trailingValue),this.destination.complete()):this.destination.complete()},t.prototype.clearThrottle=function(){var e=this.throttled;e&&(this.trailing&&this._hasTrailingValue&&(this.destination.next(this._trailingValue),this._trailingValue=null,this._hasTrailingValue=!1),e.unsubscribe(),this.remove(e),this.throttled=null)},t}(f.v);function gr(e){e.subscriber.clearThrottle()}var vr=n(277);function _r(e){return void 0===e&&(e=c.b),function(t){return(0,vr.v)(function(){return t.pipe(bt(function(t,n){var r=t.current;return{value:n,current:e.now(),last:r}},{current:e.now(),value:void 0,last:void 0}),(0,Fe.T)(function(e){var t=e.current,n=e.last,r=e.value;return new br(r,t-n)}))})}}var br=function(){return function(e,t){this.value=e,this.interval=t}}(),Sr=n(5),wr=n(1454);function Cr(e,t,n){return void 0===n&&(n=c.b),function(r){var i=(0,wr.$)(e),o=i?+e-n.now():Math.abs(e);return r.lift(new Ir(o,i,t,n))}}var Ir=function(){function e(e,t,n,r){this.waitFor=e,this.absoluteTimeout=t,this.withObservable=n,this.scheduler=r}return e.prototype.call=function(e,t){return t.subscribe(new Er(e,this.absoluteTimeout,this.waitFor,this.withObservable,this.scheduler))},e}(),Er=function(e){function t(t,n,r,i,o){var a=e.call(this,t)||this;return a.absoluteTimeout=n,a.waitFor=r,a.withObservable=i,a.scheduler=o,a.scheduleTimeout(),a}return r.C6(t,e),t.dispatchTimeout=function(e){var t=e.withObservable;e._unsubscribeAndRecycle(),e.add((0,i.tS)(t,new i.zA(e)))},t.prototype.scheduleTimeout=function(){var e=this.action;e?this.action=e.schedule(this,this.waitFor):this.add(this.action=this.scheduler.schedule(t.dispatchTimeout,this.waitFor,this))},t.prototype._next=function(t){this.absoluteTimeout||this.scheduleTimeout(),e.prototype._next.call(this,t)},t.prototype._unsubscribe=function(){this.action=void 0,this.scheduler=null,this.withObservable=null},t}(i.gn),Pr=n(4203);function Or(e,t){return void 0===t&&(t=c.b),Cr(e,(0,Pr.$)(new Sr.M),t)}function Ar(e){return void 0===e&&(e=c.b),(0,Fe.T)(function(t){return new Tr(t,e.now())})}var Tr=function(){return function(e,t){this.value=e,this.timestamp=t}}();function kr(e,t,n){return 0===n?[t]:(e.push(t),e)}function Rr(){return It(kr,[])}function Mr(e){return function(t){return t.lift(new xr(e))}}var xr=function(){function e(e){this.windowBoundaries=e}return e.prototype.call=function(e,t){var n=new Nr(e),r=t.subscribe(n);return r.closed||n.add((0,i.tS)(this.windowBoundaries,new i.zA(n))),r},e}(),Nr=function(e){function t(t){var n=e.call(this,t)||this;return n.window=new Wt.B7,t.next(n.window),n}return r.C6(t,e),t.prototype.notifyNext=function(){this.openWindow()},t.prototype.notifyError=function(e){this._error(e)},t.prototype.notifyComplete=function(){this._complete()},t.prototype._next=function(e){this.window.next(e)},t.prototype._error=function(e){this.window.error(e),this.destination.error(e)},t.prototype._complete=function(){this.window.complete(),this.destination.complete()},t.prototype._unsubscribe=function(){this.window=null},t.prototype.openWindow=function(){var e=this.window;e&&e.complete();var t=this.destination,n=this.window=new Wt.B7;t.next(n)},t}(i.gn);function Dr(e,t){return void 0===t&&(t=0),function(n){return n.lift(new jr(e,t))}}var jr=function(){function e(e,t){this.windowSize=e,this.startWindowEvery=t}return e.prototype.call=function(e,t){return t.subscribe(new Lr(e,this.windowSize,this.startWindowEvery))},e}(),Lr=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.destination=t,i.windowSize=n,i.startWindowEvery=r,i.windows=[new Wt.B7],i.count=0,t.next(i.windows[0]),i}return r.C6(t,e),t.prototype._next=function(e){for(var t=this.startWindowEvery>0?this.startWindowEvery:this.windowSize,n=this.destination,r=this.windowSize,i=this.windows,o=i.length,a=0;a<o&&!this.closed;a++)i[a].next(e);var s=this.count-r+1;if(s>=0&&s%t===0&&!this.closed&&i.shift().complete(),++this.count%t===0&&!this.closed){var c=new Wt.B7;i.push(c),n.next(c)}},t.prototype._error=function(e){var t=this.windows;if(t)for(;t.length>0&&!this.closed;)t.shift().error(e);this.destination.error(e)},t.prototype._complete=function(){var e=this.windows;if(e)for(;e.length>0&&!this.closed;)e.shift().complete();this.destination.complete()},t.prototype._unsubscribe=function(){this.count=0,this.windows=null},t}(f.v);function zr(e){var t=c.b,n=null,r=Number.POSITIVE_INFINITY;return(0,_.m)(arguments[3])&&(t=arguments[3]),(0,_.m)(arguments[2])?t=arguments[2]:(0,Yn.k)(arguments[2])&&(r=Number(arguments[2])),(0,_.m)(arguments[1])?t=arguments[1]:(0,Yn.k)(arguments[1])&&(n=Number(arguments[1])),function(i){return i.lift(new Fr(e,n,r,t))}}var Fr=function(){function e(e,t,n,r){this.windowTimeSpan=e,this.windowCreationInterval=t,this.maxWindowSize=n,this.scheduler=r}return e.prototype.call=function(e,t){return t.subscribe(new Ur(e,this.windowTimeSpan,this.windowCreationInterval,this.maxWindowSize,this.scheduler))},e}(),Br=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._numberOfNextedValues=0,t}return r.C6(t,e),t.prototype.next=function(t){this._numberOfNextedValues++,e.prototype.next.call(this,t)},Object.defineProperty(t.prototype,\"numberOfNextedValues\",{get:function(){return this._numberOfNextedValues},enumerable:!0,configurable:!0}),t}(Wt.B7),Ur=function(e){function t(t,n,r,i,o){var a=e.call(this,t)||this;a.destination=t,a.windowTimeSpan=n,a.windowCreationInterval=r,a.maxWindowSize=i,a.scheduler=o,a.windows=[];var s=a.openWindow();if(null!==r&&r>=0){var c={subscriber:a,window:s,context:null},u={windowTimeSpan:n,windowCreationInterval:r,subscriber:a,scheduler:o};a.add(o.schedule(Gr,n,c)),a.add(o.schedule(Vr,r,u))}else{var d={subscriber:a,window:s,windowTimeSpan:n};a.add(o.schedule(qr,n,d))}return a}return r.C6(t,e),t.prototype._next=function(e){for(var t=this.windows,n=t.length,r=0;r<n;r++){var i=t[r];i.closed||(i.next(e),i.numberOfNextedValues>=this.maxWindowSize&&this.closeWindow(i))}},t.prototype._error=function(e){for(var t=this.windows;t.length>0;)t.shift().error(e);this.destination.error(e)},t.prototype._complete=function(){for(var e=this.windows;e.length>0;){var t=e.shift();t.closed||t.complete()}this.destination.complete()},t.prototype.openWindow=function(){var e=new Br;return this.windows.push(e),this.destination.next(e),e},t.prototype.closeWindow=function(e){e.complete();var t=this.windows;t.splice(t.indexOf(e),1)},t}(f.v);function qr(e){var t=e.subscriber,n=e.windowTimeSpan,r=e.window;r&&t.closeWindow(r),e.window=t.openWindow(),this.schedule(e,n)}function Vr(e){var t=e.windowTimeSpan,n=e.subscriber,r=e.scheduler,i=e.windowCreationInterval,o=n.openWindow(),a=this,s={action:a,subscription:null},c={subscriber:n,window:o,context:s};s.subscription=r.schedule(Gr,t,c),a.add(s.subscription),a.schedule(e,i)}function Gr(e){var t=e.subscriber,n=e.window,r=e.context;r&&r.action&&r.subscription&&r.action.remove(r.subscription),t.closeWindow(n)}function Hr(e,t){return function(n){return n.lift(new Yr(e,t))}}var Yr=function(){function e(e,t){this.openings=e,this.closingSelector=t}return e.prototype.call=function(e,t){return t.subscribe(new Wr(e,this.openings,this.closingSelector))},e}(),Wr=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.openings=n,i.closingSelector=r,i.contexts=[],i.add(i.openSubscription=(0,A.F)(i,n,n)),i}return r.C6(t,e),t.prototype._next=function(e){var t=this.contexts;if(t)for(var n=t.length,r=0;r<n;r++)t[r].window.next(e)},t.prototype._error=function(t){var n=this.contexts;if(this.contexts=null,n)for(var r=n.length,i=-1;++i<r;){var o=n[i];o.window.error(t),o.subscription.unsubscribe()}e.prototype._error.call(this,t)},t.prototype._complete=function(){var t=this.contexts;if(this.contexts=null,t)for(var n=t.length,r=-1;++r<n;){var i=t[r];i.window.complete(),i.subscription.unsubscribe()}e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){var e=this.contexts;if(this.contexts=null,e)for(var t=e.length,n=-1;++n<t;){var r=e[n];r.window.unsubscribe(),r.subscription.unsubscribe()}},t.prototype.notifyNext=function(e,t,n,r,i){if(e===this.openings){var o=void 0;try{o=(0,this.closingSelector)(t)}catch(e){return this.error(e)}var a=new Wt.B7,s=new O.y,c={window:a,subscription:s};this.contexts.push(c);var u=(0,A.F)(this,o,c);u.closed?this.closeWindow(this.contexts.length-1):(u.context=c,s.add(u)),this.destination.next(a)}else this.closeWindow(this.contexts.indexOf(e))},t.prototype.notifyError=function(e){this.error(e)},t.prototype.notifyComplete=function(e){e!==this.openSubscription&&this.closeWindow(this.contexts.indexOf(e.context))},t.prototype.closeWindow=function(e){if(-1!==e){var t=this.contexts,n=t[e],r=n.window,i=n.subscription;t.splice(e,1),r.complete(),i.unsubscribe()}},t}(T.E);function $r(e){return function(t){return t.lift(new Kr(e))}}var Kr=function(){function e(e){this.closingSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new Zr(e,this.closingSelector))},e}(),Zr=function(e){function t(t,n){var r=e.call(this,t)||this;return r.destination=t,r.closingSelector=n,r.openWindow(),r}return r.C6(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.openWindow(i)},t.prototype.notifyError=function(e){this._error(e)},t.prototype.notifyComplete=function(e){this.openWindow(e)},t.prototype._next=function(e){this.window.next(e)},t.prototype._error=function(e){this.window.error(e),this.destination.error(e),this.unsubscribeClosingNotification()},t.prototype._complete=function(){this.window.complete(),this.destination.complete(),this.unsubscribeClosingNotification()},t.prototype.unsubscribeClosingNotification=function(){this.closingNotification&&this.closingNotification.unsubscribe()},t.prototype.openWindow=function(e){void 0===e&&(e=null),e&&(this.remove(e),e.unsubscribe());var t=this.window;t&&t.complete();var n,r=this.window=new Wt.B7;this.destination.next(r);try{n=(0,this.closingSelector)()}catch(e){return this.destination.error(e),void this.window.error(e)}this.add(this.closingNotification=(0,A.F)(this,n))},t}(T.E);function Jr(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){var n;\"function\"==typeof e[e.length-1]&&(n=e.pop());var r=e;return t.lift(new Qr(r,n))}}var Qr=function(){function e(e,t){this.observables=e,this.project=t}return e.prototype.call=function(e,t){return t.subscribe(new Xr(e,this.observables,this.project))},e}(),Xr=function(e){function t(t,n,r){var i=e.call(this,t)||this;i.observables=n,i.project=r,i.toRespond=[];var o=n.length;i.values=new Array(o);for(var a=0;a<o;a++)i.toRespond.push(a);for(a=0;a<o;a++){var s=n[a];i.add((0,A.F)(i,s,void 0,a))}return i}return r.C6(t,e),t.prototype.notifyNext=function(e,t,n){this.values[n]=t;var r=this.toRespond;if(r.length>0){var i=r.indexOf(n);-1!==i&&r.splice(i,1)}},t.prototype.notifyComplete=function(){},t.prototype._next=function(e){if(0===this.toRespond.length){var t=[e].concat(this.values);this.project?this._tryProject(t):this.destination.next(t)}},t.prototype._tryProject=function(e){var t;try{t=this.project.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(T.E),ei=n(5778);function ti(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return t.lift.call(ei.yU.apply(void 0,[t].concat(e)))}}function ni(e){return function(t){return t.lift(new ei.ee(e))}}},5779(e,t,n){\"use strict\";n.d(t,{C6:()=>i});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},r(e,t)};function i(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}},540(e){e.exports=function(e,t,n,r){var i=n?n.call(r,e,t):void 0;if(void 0!==i)return!!i;if(e===t)return!0;if(\"object\"!=typeof e||!e||\"object\"!=typeof t||!t)return!1;var o=Object.keys(e),a=Object.keys(t);if(o.length!==a.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),c=0;c<o.length;c++){var u=o[c];if(!s(u))return!1;var d=e[u],l=t[u];if(!1===(i=n?n.call(r,d,l,u):void 0)||void 0===i&&d!==l)return!1}return!0}},1657(e){\"use strict\";e.exports=(e,t)=>{if(\"string\"!=typeof e||\"string\"!=typeof t)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===t)return[e];const n=e.indexOf(t);return-1===n?[e]:[e.slice(0,n),e.slice(n+t.length)]}},803(e){\"use strict\";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)},1635(e,t,n){\"use strict\";n.r(t),n.d(t,{__addDisposableResource:()=>D,__assign:()=>o,__asyncDelegator:()=>E,__asyncGenerator:()=>I,__asyncValues:()=>P,__await:()=>C,__awaiter:()=>f,__classPrivateFieldGet:()=>M,__classPrivateFieldIn:()=>N,__classPrivateFieldSet:()=>x,__createBinding:()=>m,__decorate:()=>s,__disposeResources:()=>L,__esDecorate:()=>u,__exportStar:()=>g,__extends:()=>i,__generator:()=>y,__importDefault:()=>R,__importStar:()=>k,__makeTemplateObject:()=>O,__metadata:()=>h,__param:()=>c,__propKey:()=>l,__read:()=>_,__rest:()=>a,__rewriteRelativeImportExtension:()=>z,__runInitializers:()=>d,__setFunctionName:()=>p,__spread:()=>b,__spreadArray:()=>w,__spreadArrays:()=>S,__values:()=>v,default:()=>F});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)};function i(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var o=function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},o.apply(this,arguments)};function a(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}function s(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}function c(e,t){return function(n,r){t(n,r,e)}}function u(e,t,n,r,i,o){function a(e){if(void 0!==e&&\"function\"!=typeof e)throw new TypeError(\"Function expected\");return e}for(var s,c=r.kind,u=\"getter\"===c?\"get\":\"setter\"===c?\"set\":\"value\",d=!t&&e?r.static?e:e.prototype:null,l=t||(d?Object.getOwnPropertyDescriptor(d,r.name):{}),p=!1,h=n.length-1;h>=0;h--){var f={};for(var y in r)f[y]=\"access\"===y?{}:r[y];for(var y in r.access)f.access[y]=r.access[y];f.addInitializer=function(e){if(p)throw new TypeError(\"Cannot add initializers after decoration has completed\");o.push(a(e||null))};var m=(0,n[h])(\"accessor\"===c?{get:l.get,set:l.set}:l[u],f);if(\"accessor\"===c){if(void 0===m)continue;if(null===m||\"object\"!=typeof m)throw new TypeError(\"Object expected\");(s=a(m.get))&&(l.get=s),(s=a(m.set))&&(l.set=s),(s=a(m.init))&&i.unshift(s)}else(s=a(m))&&(\"field\"===c?i.unshift(s):l[u]=s)}d&&Object.defineProperty(d,r.name,l),p=!0}function d(e,t,n){for(var r=arguments.length>2,i=0;i<t.length;i++)n=r?t[i].call(e,n):t[i].call(e);return r?n:void 0}function l(e){return\"symbol\"==typeof e?e:\"\".concat(e)}function p(e,t,n){return\"symbol\"==typeof t&&(t=t.description?\"[\".concat(t.description,\"]\"):\"\"),Object.defineProperty(e,\"name\",{configurable:!0,value:n?\"\".concat(n,\" \",t):t})}function h(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function f(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})}function y(e,t){var n,r,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},a=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),\"function\"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(c){return function(s){if(n)throw new TypeError(\"Generator is already executing.\");for(;a&&(a=0,s[0]&&(o=0)),o;)try{if(n=1,r&&(i=2&s[0]?r.return:s[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,s[1])).done)return i;switch(r=0,i&&(s=[2&s[0],i.value]),s[0]){case 0:case 1:i=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,r=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(!((i=(i=o.trys).length>0&&i[i.length-1])||6!==s[0]&&2!==s[0])){o=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]<i[3])){o.label=s[1];break}if(6===s[0]&&o.label<i[1]){o.label=i[1],i=s;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(s);break}i[2]&&o.ops.pop(),o.trys.pop();continue}s=t.call(e,o)}catch(e){s=[6,e],r=0}finally{n=i=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,c])}}}var m=Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!(\"get\"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]};function g(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||m(t,e,n)}function v(e){var t=\"function\"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}function _(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function b(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(_(arguments[t]));return e}function S(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),i=0;for(t=0;t<n;t++)for(var o=arguments[t],a=0,s=o.length;a<s;a++,i++)r[i]=o[a];return r}function w(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}function C(e){return this instanceof C?(this.v=e,this):new C(e)}function I(e,t,n){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var r,i=n.apply(e,t||[]),o=[];return r=Object.create((\"function\"==typeof AsyncIterator?AsyncIterator:Object).prototype),a(\"next\"),a(\"throw\"),a(\"return\",function(e){return function(t){return Promise.resolve(t).then(e,u)}}),r[Symbol.asyncIterator]=function(){return this},r;function a(e,t){i[e]&&(r[e]=function(t){return new Promise(function(n,r){o.push([e,t,n,r])>1||s(e,t)})},t&&(r[e]=t(r[e])))}function s(e,t){try{(n=i[e](t)).value instanceof C?Promise.resolve(n.value.v).then(c,u):d(o[0][2],n)}catch(e){d(o[0][3],e)}var n}function c(e){s(\"next\",e)}function u(e){s(\"throw\",e)}function d(e,t){e(t),o.shift(),o.length&&s(o[0][0],o[0][1])}}function E(e){var t,n;return t={},r(\"next\"),r(\"throw\",function(e){throw e}),r(\"return\"),t[Symbol.iterator]=function(){return this},t;function r(r,i){t[r]=e[r]?function(t){return(n=!n)?{value:C(e[r](t)),done:!1}:i?i(t):t}:i}}function P(e){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=v(e),t={},r(\"next\"),r(\"throw\"),r(\"return\"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise(function(r,i){!function(e,t,n,r){Promise.resolve(r).then(function(t){e({value:t,done:n})},t)}(r,i,(t=e[n](t)).done,t.value)})}}}function O(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e}var A=Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t},T=function(e){return T=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},T(e)};function k(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=T(e),r=0;r<n.length;r++)\"default\"!==n[r]&&m(t,e,n[r]);return A(t,e),t}function R(e){return e&&e.__esModule?e:{default:e}}function M(e,t,n,r){if(\"a\"===n&&!r)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof t?e!==t||!r:!t.has(e))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===n?r:\"a\"===n?r.call(e):r?r.value:t.get(e)}function x(e,t,n,r,i){if(\"m\"===r)throw new TypeError(\"Private method is not writable\");if(\"a\"===r&&!i)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof t?e!==t||!i:!t.has(e))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===r?i.call(e,n):i?i.value=n:t.set(e,n),n}function N(e,t){if(null===t||\"object\"!=typeof t&&\"function\"!=typeof t)throw new TypeError(\"Cannot use 'in' operator on non-object\");return\"function\"==typeof e?t===e:e.has(t)}function D(e,t,n){if(null!=t){if(\"object\"!=typeof t&&\"function\"!=typeof t)throw new TypeError(\"Object expected.\");var r,i;if(n){if(!Symbol.asyncDispose)throw new TypeError(\"Symbol.asyncDispose is not defined.\");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError(\"Symbol.dispose is not defined.\");r=t[Symbol.dispose],n&&(i=r)}if(\"function\"!=typeof r)throw new TypeError(\"Object not disposable.\");i&&(r=function(){try{i.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}var j=\"function\"==typeof SuppressedError?SuppressedError:function(e,t,n){var r=new Error(n);return r.name=\"SuppressedError\",r.error=e,r.suppressed=t,r};function L(e){function t(t){e.error=e.hasError?new j(t,e.error,\"An error was suppressed during disposal.\"):t,e.hasError=!0}var n,r=0;return function i(){for(;n=e.stack.pop();)try{if(!n.async&&1===r)return r=0,e.stack.push(n),Promise.resolve().then(i);if(n.dispose){var o=n.dispose.call(n.value);if(n.async)return r|=2,Promise.resolve(o).then(i,function(e){return t(e),i()})}else r|=1}catch(e){t(e)}if(1===r)return e.hasError?Promise.reject(e.error):Promise.resolve();if(e.hasError)throw e.error}()}function z(e,t){return\"string\"==typeof e&&/^\\.\\.?\\//.test(e)?e.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i,function(e,n,r,i,o){return n?t?\".jsx\":\".js\":!r||i&&o?r+i+\".\"+o.toLowerCase()+\"js\":e}):e}const F={__extends:i,__assign:o,__rest:a,__decorate:s,__param:c,__esDecorate:u,__runInitializers:d,__propKey:l,__setFunctionName:p,__metadata:h,__awaiter:f,__generator:y,__createBinding:m,__exportStar:g,__values:v,__read:_,__spread:b,__spreadArrays:S,__spreadArray:w,__await:C,__asyncGenerator:I,__asyncDelegator:E,__asyncValues:P,__makeTemplateObject:O,__importStar:k,__importDefault:R,__classPrivateFieldGet:M,__classPrivateFieldSet:x,__classPrivateFieldIn:N,__addDisposableResource:D,__disposeResources:L,__rewriteRelativeImportExtension:z}}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createCheckoutButtonInitializer:()=>pl,createTimeout:()=>t.createTimeout});var e={};n.r(e),n.d(e,{createAmazonPayV2ButtonStrategy:()=>xr,createApplePayButtonStrategy:()=>li,createBigCommercePaymentsButtonStrategy:()=>Ti,createBigCommercePaymentsPayLaterButtonStrategy:()=>Mi,createBigCommercePaymentsVenmoButtonStrategy:()=>Di,createBoltButtonStrategy:()=>Gi,createBraintreePaypalButtonStrategy:()=>lo,createBraintreePaypalCreditButtonStrategy:()=>fo,createBraintreeVenmoButtonStrategy:()=>Co,createBraintreeVisaCheckoutButtonStrategy:()=>go,createGooglePayAdyenV2ButtonStrategy:()=>pa,createGooglePayAdyenV3ButtonStrategy:()=>ha,createGooglePayAuthorizeDotNetButtonStrategy:()=>ya,createGooglePayBigCommercePaymentsButtonStrategy:()=>la,createGooglePayBraintreeButtonStrategy:()=>Qo,createGooglePayCheckoutComButtonStrategy:()=>ba,createGooglePayCybersourceButtonStrategy:()=>wa,createGooglePayOrbitalButtonStrategy:()=>Ia,createGooglePayPayPalCommerceButtonStrategy:()=>aa,createGooglePayStripeButtonStrategy:()=>Va,createGooglePayTdOnlineMartButtonStrategy:()=>Ka,createGooglePayWorldpayAccessButtonStrategy:()=>Ha,createLinkV2ButtonStrategy:()=>nc,createPayPalCommerceButtonStrategy:()=>ms,createPayPalCommerceCreditButtonStrategy:()=>_s,createPayPalCommerceVenmoButtonStrategy:()=>Ds,createPaypalExpressButtonStrategy:()=>Hs});var t=n(4043),i=n(8686),o=n(9526);class a extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}const s={body:{},headers:{},status:0};class c extends a{constructor(e,{message:t,errors:n}={}){const{body:r,headers:i,status:o}=e||s;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=i,this.status=o,this.errors=n||[]}}class u extends c{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class d extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}const l={body:{},headers:{},status:0};class p extends d{constructor(e,{message:t,errors:n}={}){const{body:r,headers:i,status:o}=e||l;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=i,this.status=o,this.errors=n||[]}}class h extends p{constructor(e,t){super(e,{message:t||\"An unexpected error has occurred. The checkout process cannot continue as a result.\"}),this.name=\"UnrecoverableError\",this.type=\"unrecoverable\"}}var f=n(9440);function y(e){return e.reduce((e,t)=>t?[...e,t]:e,[]).join(\" \")}function m(e,t){const{body:n}=e,{errors:r=[]}=n;return new p(e,{message:g(r)||t,errors:r})}function g(e){if(Array.isArray(e))return e.reduce((e,t)=>t&&t.message?[...e,t.message]:e,[]).join(\" \")}class v extends p{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}class _{constructor(){this._factoryMethods={},this.register(\"default\",(e,t)=>new p(e,{message:t})),this.register(\"internal\",(e,t)=>function(e,t){const{body:n}=e,{errors:r=[]}=n;return new p(e,{message:y(r)||n.detail||n.title||t,errors:r.length?r.map(e=>({code:n.type,message:e})):[{code:n.type,message:n.detail||n.title}]})}(e,t)),this.register(\"storefront\",(e,t)=>function(e,t){const{body:n}=e;return new p(e,{message:t||n.detail||n.title,errors:[{code:n.code||n.type,message:n.detail||n.title}]})}(e,t)),this.register(\"payment\",(e,t)=>m(e,t)),this.register(\"timeout\",e=>new v(e))}register(e,t){this._factoryMethods[e]=t}createError(e,t){return(this._factoryMethods[this._getType(e)]||this._factoryMethods.default)(e,t)}_getType(e){if(0===e.status)return\"timeout\";if(this._isStorefrontErrorResponseBody(e.body))return\"storefront\";if(this._isInternalErrorResponseBody(e.body)){const t=(0,f.last)(e.body.type.split(\"/\"));return t&&this._factoryMethods[t]?t:\"internal\"}const t=(0,f.last)(e.body&&e.body.errors);return t&&t.code&&this._factoryMethods[t.code]?t.code:\"payment\"}_isStorefrontErrorResponseBody(e){const t=e;return!this._isInternalErrorResponseBody(e)&&\"string\"==typeof t.title&&\"string\"==typeof t.type&&\"number\"==typeof t.status&&\"string\"==typeof t.detail}_isInternalErrorResponseBody(e){const t=e;return\"object\"==typeof t.errors&&\"string\"==typeof t.title&&\"string\"==typeof t.type&&\"number\"==typeof t.status}}var b,S,w=n(8241),C=n(9586);function I(e,t){return Array.isArray(e)?e.map(e=>I(e,t)):(0,f.isPlainObject)(e)?(0,f.transform)((0,f.omitBy)(e,t),(e,n,r)=>{e[r]=I(n,t)},{}):e}function E(e,t){return function(e){return e.type===b.ClearError}(t)?I(e,e=>e===t.payload):e}function P(e,t,n){return e===t||(e&&t&&\"object\"==typeof e&&\"object\"==typeof t?Array.isArray(e)&&Array.isArray(t)?function(e,t,n){if(e.length!==t.length)return!1;for(let r=0,i=e.length;r<i;r++)if(!P(e[r],t[r],n))return!1;return!0}(e,t,n):!Array.isArray(e)&&!Array.isArray(t)&&(e instanceof Date&&t instanceof Date?function(e,t){return e.getTime()===t.getTime()}(e,t):!(e instanceof Date||t instanceof Date)&&(e instanceof RegExp&&t instanceof RegExp?function(e,t){return e.toString()===t.toString()}(e,t):!(e instanceof RegExp||t instanceof RegExp)&&function(e,t,n){const r=n&&n.keyFilter,i=r?Object.keys(e).filter(r):Object.keys(e),o=r?Object.keys(t).filter(r):Object.keys(t);if(i.length!==o.length)return!1;for(let r=0,o=i.length;r<o;r++){const o=i[r];if(!Object.prototype.hasOwnProperty.call(t,o))return!1;if(!P(e[o],t[o],n))return!1}return!0}(e,t,n))):e===t)}function O(e,t,n){return e&&Object.prototype.hasOwnProperty.call(e,t)&&P(e[t],n)?e:Object.assign(Object.assign({},e),{[t]:n})}!function(e){e.ClearError=\"CLEAR_ERROR\"}(b||(b={})),function(e){e.LoadB2BTokenRequested=\"LOAD_B2B_TOKEN_REQUESTED\",e.LoadB2BTokenSucceeded=\"LOAD_B2B_TOKEN_SUCCEEDED\",e.LoadB2BTokenFailed=\"LOAD_B2B_TOKEN_FAILED\"}(S||(S={}));const A={errors:{},statuses:{}};function T(e=A,t){return(0,o.HY)({data:k,errors:(0,o.om)(R,E),statuses:M})(e,t)}function k(e,t){return t.type===S.LoadB2BTokenSucceeded?t.payload:e}function R(e=A.errors,t){switch(t.type){case S.LoadB2BTokenRequested:case S.LoadB2BTokenSucceeded:return O(e,\"loadError\",void 0);case S.LoadB2BTokenFailed:return O(e,\"loadError\",t.payload);default:return e}}function M(e=A.statuses,t){switch(t.type){case S.LoadB2BTokenRequested:return O(e,\"isLoading\",!0);case S.LoadB2BTokenFailed:case S.LoadB2BTokenSucceeded:return O(e,\"isLoading\",!1);default:return e}}var x,N,D,j;function L(e,t){return void 0===t||P(e,t)?e:t}!function(e){e.LoadCheckoutRequested=\"LOAD_CHECKOUT_REQUESTED\",e.LoadCheckoutSucceeded=\"LOAD_CHECKOUT_SUCCEEDED\",e.LoadCheckoutFailed=\"LOAD_CHECKOUT_FAILED\",e.UpdateCheckoutRequested=\"UPDATE_CHECKOUT_REQUESTED\",e.UpdateCheckoutSucceeded=\"UPDATE_CHECKOUT_SUCCEEDED\",e.UpdateCheckoutFailed=\"UPDATE_CHECKOUT_FAILED\"}(x||(x={})),function(e){e.HydrateInitialState=\"HYDRATE_INITIAL_STATE\"}(N||(N={})),function(e){e.UpdateSubscriptionsRequested=\"UPDATE_SUBSCRIPTIONS_REQUESTED\",e.UpdateSubscriptionsSucceeded=\"UPDATE_SUBSCRIPTIONS_SUCCEEDED\",e.UpdateSubscriptionsFailed=\"UPDATE_SUBSCRIPTIONS_FAILED\"}(D||(D={})),function(e){e.UpdateBillingAddressRequested=\"UPDATE_BILLING_ADDRESS_REQUESTED\",e.UpdateBillingAddressSucceeded=\"UPDATE_BILLING_ADDRESS_SUCCEEDED\",e.UpdateBillingAddressFailed=\"UPDATE_BILLING_ADDRESS_FAILED\",e.ContinueAsGuestRequested=\"CONTINUE_AS_GUEST_REQUESTED\",e.ContinueAsGuestSucceeded=\"CONTINUE_AS_GUEST_SUCCEEDED\",e.ContinueAsGuestFailed=\"CONTINUE_AS_GUEST_FAILED\"}(j||(j={}));const z={errors:{},statuses:{}};function F(e=z,t){return(0,o.HY)({data:B,errors:(0,o.om)(U,E),statuses:q})(e,t)}function B(e,t){var n,r;switch(t.type){case j.UpdateBillingAddressSucceeded:case j.ContinueAsGuestSucceeded:case x.LoadCheckoutSucceeded:return L(e,t.payload&&t.payload.billingAddress);case N.HydrateInitialState:return L(e,null===(r=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===r?void 0:r.billingAddress);default:return e}}function U(e=z.errors,t){switch(t.type){case x.LoadCheckoutRequested:case x.LoadCheckoutSucceeded:return O(e,\"loadError\",void 0);case x.LoadCheckoutFailed:return O(e,\"loadError\",t.payload);case j.UpdateBillingAddressRequested:case j.UpdateBillingAddressSucceeded:return O(e,\"updateError\",void 0);case j.UpdateBillingAddressFailed:return O(e,\"updateError\",t.payload);case D.UpdateSubscriptionsRequested:case D.UpdateSubscriptionsSucceeded:case j.ContinueAsGuestRequested:case j.ContinueAsGuestSucceeded:return O(e,\"continueAsGuestError\",void 0);case D.UpdateSubscriptionsFailed:case j.ContinueAsGuestFailed:return O(e,\"continueAsGuestError\",t.payload);default:return e}}function q(e=z.statuses,t){switch(t.type){case x.LoadCheckoutRequested:return O(e,\"isLoading\",!0);case x.LoadCheckoutSucceeded:case x.LoadCheckoutFailed:return O(e,\"isLoading\",!1);case j.UpdateBillingAddressRequested:return O(e,\"isUpdating\",!0);case j.UpdateBillingAddressFailed:case j.UpdateBillingAddressSucceeded:return O(e,\"isUpdating\",!1);case j.ContinueAsGuestRequested:case D.UpdateSubscriptionsRequested:return O(e,\"isContinuingAsGuest\",!0);case D.UpdateSubscriptionsSucceeded:case D.UpdateSubscriptionsFailed:case j.ContinueAsGuestFailed:case j.ContinueAsGuestSucceeded:return O(e,\"isContinuingAsGuest\",!1);default:return e}}function V(e){return(0,f.isPlainObject)(e)}const G=function e(t,n,r){const{matchObject:i=(e,t)=>void 0!==e.id&&e.id===t.id}=r||{};if(!t)return n;if(!n||t===n)return t;let o=0,a=0;const s=(e,t,n)=>(o+=e===t?1:0,a+=e===n?1:0,e),c=n.map((n,r)=>{const o=t&&t[r];return V(o)&&V(n)?i(o,n)?s(H(o,n),o,n):s(L(o,n),o,n):(0,f.isArray)(o)&&(0,f.isArray)(n)?s(e(o,n),o,n):s(L(o,n),o,n)});return o===n.length&&t&&t.length===n.length?t:a===n.length?n:c},H=function e(t,n){return t?n&&t!==n?Object.keys(n).reduce((t,r)=>{const i=t[r],o=n[r];return V(i)&&V(o)?O(t,r,e(i,o)):(0,f.isArray)(i)&&(0,f.isArray)(o)?O(t,r,G(i,o)):O(t,r,o)},t):t:n};var Y,W,$;!function(e){e.ApplyCouponRequested=\"APPLY_COUPON_REQUESTED\",e.ApplyCouponSucceeded=\"APPLY_COUPON_SUCCEEDED\",e.ApplyCouponFailed=\"APPLY_COUPON_FAILED\",e.RemoveCouponRequested=\"REMOVE_COUPON_REQUESTED\",e.RemoveCouponSucceeded=\"REMOVE_COUPON_SUCCEEDED\",e.RemoveCouponFailed=\"REMOVE_COUPON_FAILED\"}(Y||(Y={})),function(e){e.ApplyGiftCertificateRequested=\"APPLY_GIFT_CERTIFICATE_REQUESTED\",e.ApplyGiftCertificateSucceeded=\"APPLY_GIFT_CERTIFICATE_SUCCEEDED\",e.ApplyGiftCertificateFailed=\"APPLY_GIFT_CERTIFICATE_FAILED\",e.RemoveGiftCertificateRequested=\"REMOVE_GIFT_CERTIFICATE_REQUESTED\",e.RemoveGiftCertificateSucceeded=\"REMOVE_GIFT_CERTIFICATE_SUCCEEDED\",e.RemoveGiftCertificateFailed=\"REMOVE_GIFT_CERTIFICATE_FAILED\"}(W||(W={})),function(e){e.CreateConsignmentsRequested=\"CREATE_CONSIGNMENTS_REQUESTED\",e.CreateConsignmentsSucceeded=\"CREATE_CONSIGNMENTS_SUCCEEDED\",e.CreateConsignmentsFailed=\"CREATE_CONSIGNMENTS_FAILED\",e.UpdateConsignmentRequested=\"UPDATE_CONSIGNMENT_REQUESTED\",e.UpdateConsignmentSucceeded=\"UPDATE_CONSIGNMENT_SUCCEEDED\",e.UpdateConsignmentFailed=\"UPDATE_CONSIGNMENT_FAILED\",e.DeleteConsignmentRequested=\"DELETE_CONSIGNMENT_REQUESTED\",e.DeleteConsignmentSucceeded=\"DELETE_CONSIGNMENT_SUCCEEDED\",e.DeleteConsignmentFailed=\"DELETE_CONSIGNMENT_FAILED\",e.UpdateShippingOptionRequested=\"UPDATE_SHIPPING_OPTION_REQUESTED\",e.UpdateShippingOptionSucceeded=\"UPDATE_SHIPPING_OPTION_SUCCEEDED\",e.UpdateShippingOptionFailed=\"UPDATE_SHIPPING_OPTION_FAILED\",e.LoadShippingOptionsRequested=\"LOAD_SHIPPING_OPTIONS_REQUESTED\",e.LoadShippingOptionsSucceeded=\"LOAD_SHIPPING_OPTIONS_SUCCEEDED\",e.LoadShippingOptionsFailed=\"LOAD_SHIPPING_OPTIONS_FAILED\"}($||($={}));const K={errors:{},statuses:{}};function Z(e=K,t){return(0,o.HY)({data:J,errors:(0,o.om)(X,E),statuses:Q})(e,t)}function J(e,t){var n,r;switch(t.type){case j.UpdateBillingAddressSucceeded:case x.LoadCheckoutSucceeded:case $.CreateConsignmentsSucceeded:case $.DeleteConsignmentSucceeded:case $.UpdateConsignmentSucceeded:case $.UpdateShippingOptionSucceeded:case $.LoadShippingOptionsSucceeded:case Y.ApplyCouponSucceeded:case Y.RemoveCouponSucceeded:case W.ApplyGiftCertificateSucceeded:case W.RemoveGiftCertificateSucceeded:return H(e,t.payload&&t.payload.cart);case N.HydrateInitialState:return H(e,null===(r=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===r?void 0:r.cart);default:return e}}function Q(e=K.statuses,t){switch(t.type){case x.LoadCheckoutRequested:return O(e,\"isLoading\",!0);case x.LoadCheckoutFailed:case x.LoadCheckoutSucceeded:return O(e,\"isLoading\",!1);default:return e}}function X(e=K.errors,t){switch(t.type){case x.LoadCheckoutRequested:case x.LoadCheckoutSucceeded:return O(e,\"loadError\",void 0);case x.LoadCheckoutFailed:return O(e,\"loadError\",t.payload);default:return e}}var ee;!function(e){e.InitializeButtonFailed=\"INITIALIZE_BUTTON_FAILED\",e.InitializeButtonRequested=\"INITIALIZE_BUTTON_REQUESTED\",e.InitializeButtonSucceeded=\"INITIALIZE_BUTTON_SUCCEEDED\",e.DeinitializeButtonFailed=\"DEINITIALIZE_BUTTON_FAILED\",e.DeinitializeButtonRequested=\"DEINITIALIZE_BUTTON_REQUESTED\",e.DeinitializeButtonSucceeded=\"DEINITIALIZE_BUTTON_SUCCEEDED\"}(ee||(ee={}));const te={data:{},errors:{},statuses:{}},ne={initializedContainers:{}},re={},ie={};function oe(e=te,t){return t.meta&&t.meta.methodId?(0,o.HY)({data:(0,o.HY)({[t.meta.methodId]:ae}),errors:(0,o.HY)({[t.meta.methodId]:se}),statuses:(0,o.HY)({[t.meta.methodId]:ce})})(e,t):e}function ae(e=ne,t){switch(t.type){case ee.InitializeButtonSucceeded:return t.meta&&t.meta.containerId?H(e,{initializedContainers:{[t.meta.containerId]:!0}}):e;case ee.DeinitializeButtonSucceeded:return O(e,\"initializedContainers\",{})}return e}function se(e=re,t){switch(t.type){case ee.InitializeButtonRequested:case ee.InitializeButtonSucceeded:return O(e,\"initializeError\",void 0);case ee.InitializeButtonFailed:return O(e,\"initializeError\",t.payload);case ee.DeinitializeButtonRequested:case ee.DeinitializeButtonSucceeded:return O(e,\"deinitializeError\",void 0);case ee.DeinitializeButtonFailed:return O(e,\"deinitializeError\",t.payload);default:return e}}function ce(e=ie,t){switch(t.type){case ee.InitializeButtonRequested:return O(e,\"isInitializing\",!0);case ee.InitializeButtonFailed:case ee.InitializeButtonSucceeded:return O(e,\"isInitializing\",!1);case ee.DeinitializeButtonRequested:return O(e,\"isDeinitializing\",!0);case ee.DeinitializeButtonFailed:case ee.DeinitializeButtonSucceeded:return O(e,\"isDeinitializing\",!1);default:return e}}var ue;!function(e){e.LoadConfigRequested=\"LOAD_CONFIG_REQUESTED\",e.LoadConfigSucceeded=\"LOAD_CONFIG_SUCCEEDED\",e.LoadConfigFailed=\"LOAD_CONFIG_FAILED\"}(ue||(ue={}));const de={meta:{},errors:{},statuses:{}};function le(e=de,t){return(0,o.HY)({data:pe,errors:(0,o.om)(he,E),statuses:fe})(e,t)}function pe(e,t){var n,r;switch(t.type){case ue.LoadConfigSucceeded:return H(e,t.payload);case N.HydrateInitialState:{const i=H(e,null===(n=t.payload)||void 0===n?void 0:n.config);return i&&(null===(r=t.payload)||void 0===r?void 0:r.b2bApiSettings)?Object.assign(Object.assign({},i),{storeConfig:Object.assign(Object.assign({},i.storeConfig),{b2bApiSettings:t.payload.b2bApiSettings})}):i}default:return e}}function he(e=de.errors,t){switch(t.type){case ue.LoadConfigSucceeded:return O(e,\"loadError\",void 0);case ue.LoadConfigFailed:return O(e,\"loadError\",t.payload);default:return e}}function fe(e=de.statuses,t){switch(t.type){case ue.LoadConfigRequested:return O(e,\"isLoading\",!0);case ue.LoadConfigSucceeded:case ue.LoadConfigFailed:return O(e,\"isLoading\",!1);default:return e}}var ye;!function(e){e.LoadOrderRequested=\"LOAD_ORDER_REQUESTED\",e.LoadOrderSucceeded=\"LOAD_ORDER_SUCCEEDED\",e.LoadOrderFailed=\"LOAD_ORDER_FAILED\",e.LoadOrderPaymentsRequested=\"LOAD_ORDER_PAYMENTS_REQUESTED\",e.LoadOrderPaymentsSucceeded=\"LOAD_ORDER_PAYMENTS_SUCCEEDED\",e.LoadOrderPaymentsFailed=\"LOAD_ORDER_PAYMENTS_FAILED\",e.SubmitOrderRequested=\"SUBMIT_ORDER_REQUESTED\",e.SubmitOrderSucceeded=\"SUBMIT_ORDER_SUCCEEDED\",e.SubmitOrderFailed=\"SUBMIT_ORDER_FAILED\",e.FinalizeOrderRequested=\"FINALIZE_ORDER_REQUESTED\",e.FinalizeOrderSucceeded=\"FINALIZE_ORDER_SUCCEEDED\",e.FinalizeOrderFailed=\"FINALIZE_ORDER_FAILED\"}(ye||(ye={}));const me={errors:{},statuses:{}};function ge(e=me,t){return(0,o.HY)({data:ve,errors:(0,o.om)(_e,E),statuses:be})(e,t)}function ve(e,t){var n,r;switch(t.type){case x.LoadCheckoutSucceeded:case Y.ApplyCouponSucceeded:case $.UpdateShippingOptionSucceeded:case Y.RemoveCouponSucceeded:case ye.LoadOrderSucceeded:return G(e,t.payload&&t.payload.coupons);case N.HydrateInitialState:return G(e,null===(r=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===r?void 0:r.coupons);default:return e}}function _e(e={},t){switch(t.type){case Y.ApplyCouponRequested:case Y.ApplyCouponSucceeded:return O(e,\"applyCouponError\",void 0);case Y.ApplyCouponFailed:return O(e,\"applyCouponError\",t.payload);case Y.RemoveCouponRequested:case Y.RemoveCouponSucceeded:return O(e,\"removeCouponError\",void 0);case Y.RemoveCouponFailed:return O(e,\"removeCouponError\",t.payload);default:return e}}function be(e={},t){switch(t.type){case Y.ApplyCouponRequested:return O(e,\"isApplyingCoupon\",!0);case Y.ApplyCouponSucceeded:case Y.ApplyCouponFailed:return O(e,\"isApplyingCoupon\",!1);case Y.RemoveCouponRequested:return O(e,\"isRemovingCoupon\",!0);case Y.RemoveCouponSucceeded:case Y.RemoveCouponFailed:return O(e,\"isRemovingCoupon\",!1);default:return e}}const Se={errors:{},statuses:{}};function we(e=Se,t){return(0,o.HY)({data:Ce,errors:(0,o.om)(Ie,E),statuses:Ee})(e,t)}function Ce(e,t){var n,r;switch(t.type){case x.LoadCheckoutSucceeded:case $.CreateConsignmentsSucceeded:case $.UpdateConsignmentSucceeded:case $.DeleteConsignmentSucceeded:case $.UpdateShippingOptionSucceeded:case Y.ApplyCouponSucceeded:case Y.RemoveCouponSucceeded:case W.ApplyGiftCertificateSucceeded:case W.RemoveGiftCertificateSucceeded:return G(e,t.payload&&t.payload.giftCertificates);case N.HydrateInitialState:return G(e,null===(r=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===r?void 0:r.giftCertificates);default:return e}}function Ie(e=Se.errors,t){switch(t.type){case W.ApplyGiftCertificateRequested:case W.ApplyGiftCertificateSucceeded:return O(e,\"applyGiftCertificateError\",void 0);case W.ApplyGiftCertificateFailed:return O(e,\"applyGiftCertificateError\",t.payload);case W.RemoveGiftCertificateRequested:case W.RemoveGiftCertificateSucceeded:return O(e,\"removeGiftCertificateError\",void 0);case W.RemoveGiftCertificateFailed:return O(e,\"removeGiftCertificateError\",t.payload);default:return e}}function Ee(e=Se.statuses,t){switch(t.type){case W.ApplyGiftCertificateRequested:return O(e,\"isApplyingGiftCertificate\",!0);case W.ApplyGiftCertificateSucceeded:case W.ApplyGiftCertificateFailed:return O(e,\"isApplyingGiftCertificate\",!1);case W.RemoveGiftCertificateRequested:return O(e,\"isRemovingGiftCertificate\",!0);case W.RemoveGiftCertificateSucceeded:case W.RemoveGiftCertificateFailed:return O(e,\"isRemovingGiftCertificate\",!1);default:return e}}var Pe;!function(e){e.SignInCustomerRequested=\"SIGN_IN_CUSTOMER_REQUESTED\",e.SignInCustomerSucceeded=\"SIGN_IN_CUSTOMER_SUCCEEDED\",e.SignInCustomerFailed=\"SIGN_IN_CUSTOMER_FAILED\",e.SignOutCustomerRequested=\"SIGN_OUT_CUSTOMER_REQUESTED\",e.SignOutCustomerSucceeded=\"SIGN_OUT_CUSTOMER_SUCCEEDED\",e.SignOutCustomerFailed=\"SIGN_OUT_CUSTOMER_FAILED\",e.CreateCustomerRequested=\"CREATE_CUSTOMER_REQUESTED\",e.CreateCustomerSucceeded=\"CREATE_CUSTOMER_SUCCEEDED\",e.CreateCustomerFailed=\"CREATE_CUSTOMER_FAILED\",e.CreateCustomerAddressRequested=\"CREATE_CUSTOMER_ADDRESS_REQUESTED\",e.CreateCustomerAddressSucceeded=\"CREATE_CUSTOMER_ADDRESS_SUCCEEDED\",e.CreateCustomerAddressFailed=\"CREATE_CUSTOMER_ADDRESS_FAILED\",e.StripeLinkAuthenticated=\"STRIPE_LINK_AUTHENTICATED\"}(Pe||(Pe={}));const Oe={errors:{},statuses:{}};function Ae(e=Oe,t){return(0,o.HY)({data:Te,errors:(0,o.om)(ke,E),statuses:Re})(e,t)}function Te(e,t){var n,r;switch(t.type){case j.ContinueAsGuestSucceeded:case x.LoadCheckoutSucceeded:return H(e,t.payload&&t.payload.customer);case Pe.CreateCustomerAddressSucceeded:return H(e,t.payload);case N.HydrateInitialState:return H(e,null===(r=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===r?void 0:r.customer);default:return e}}function ke(e=Oe.errors,t){switch(t.type){case Pe.CreateCustomerRequested:case Pe.CreateCustomerSucceeded:return O(e,\"createError\",void 0);case Pe.CreateCustomerFailed:return O(e,\"createError\",t.payload);case Pe.CreateCustomerAddressRequested:case Pe.CreateCustomerAddressSucceeded:return O(e,\"createAddressError\",void 0);case Pe.CreateCustomerAddressFailed:return O(e,\"createAddressError\",t.payload);default:return e}}function Re(e=Oe.statuses,t){switch(t.type){case Pe.CreateCustomerRequested:return O(e,\"isCreating\",!0);case Pe.CreateCustomerFailed:case Pe.CreateCustomerSucceeded:return O(e,\"isCreating\",!1);case Pe.CreateCustomerAddressRequested:return O(e,\"isCreatingAddress\",!0);case Pe.CreateCustomerAddressFailed:case Pe.CreateCustomerAddressSucceeded:return O(e,\"isCreatingAddress\",!1);default:return e}}var Me;!function(e){e.SignInFailed=\"CUSTOMER_STRATEGY_SIGN_IN_FAILED\",e.SignInRequested=\"CUSTOMER_STRATEGY_SIGN_IN_REQUESTED\",e.SignInSucceeded=\"CUSTOMER_STRATEGY_SIGN_IN_SUCCEEDED\",e.SignOutFailed=\"CUSTOMER_STRATEGY_SIGN_OUT_FAILED\",e.SignOutRequested=\"CUSTOMER_STRATEGY_SIGN_OUT_REQUESTED\",e.SignOutSucceeded=\"CUSTOMER_STRATEGY_SIGN_OUT_SUCCEEDED\",e.ExecutePaymentMethodCheckoutFailed=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_FAILED\",e.ExecutePaymentMethodCheckoutRequested=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_REQUESTED\",e.ExecutePaymentMethodCheckoutSucceeded=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_SUCCEEDED\",e.InitializeFailed=\"CUSTOMER_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"CUSTOMER_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"CUSTOMER_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"CUSTOMER_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"CUSTOMER_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"CUSTOMER_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_FAILED\"}(Me||(Me={}));const xe={data:{},errors:{},statuses:{}};function Ne(e=xe,t){return(0,o.HY)({data:De,errors:(0,o.om)(je,E),statuses:Le})(e,t)}function De(e=xe.data,t){switch(t.type){case Me.InitializeSucceeded:return H(e,{[t.meta&&t.meta.methodId]:{isInitialized:!0}});case Me.DeinitializeSucceeded:return H(e,{[t.meta&&t.meta.methodId]:{isInitialized:!1}})}return e}function je(e=xe.errors,t){switch(t.type){case Me.InitializeRequested:case Me.InitializeSucceeded:return H(e,{initializeErrors:Object.assign({},e.initializeErrors),initializeMethodId:e.initializeMethodId?e.initializeMethodId:void 0});case Me.InitializeFailed:return H(e,{initializeErrors:Object.assign(Object.assign({},e.initializeErrors),{[t.meta&&t.meta.methodId]:t.payload}),initializeMethodId:t.meta&&t.meta.methodId});case Me.DeinitializeRequested:case Me.DeinitializeSucceeded:return H(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case Me.DeinitializeFailed:return H(e,{deinitializeError:t.payload,deinitializeMethodId:t.meta&&t.meta.methodId});case Me.SignInRequested:case Me.SignInSucceeded:return H(e,{signInError:void 0,signInMethodId:void 0});case Me.SignInFailed:return H(e,{signInError:t.payload,signInMethodId:t.meta&&t.meta.methodId});case Me.SignOutRequested:case Me.SignOutSucceeded:return H(e,{signOutError:void 0,signOutMethodId:void 0});case Me.SignOutFailed:return H(e,{signOutError:t.payload,signOutMethodId:t.meta&&t.meta.methodId});case Me.ExecutePaymentMethodCheckoutRequested:case Me.ExecutePaymentMethodCheckoutSucceeded:return H(e,{executePaymentMethodCheckoutError:void 0,executePaymentMethodCheckoutMethodId:void 0});case Me.ExecutePaymentMethodCheckoutFailed:return H(e,{executePaymentMethodCheckoutError:t.payload,executePaymentMethodCheckoutMethodId:t.meta&&t.meta.methodId});case Me.WidgetInteractionStarted:case Me.WidgetInteractionFinished:return H(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case Me.WidgetInteractionFailed:return H(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta.methodId});default:return e}}function Le(e=xe.statuses,t){switch(t.type){case Me.InitializeRequested:return H(e,{isInitializing:!0,initializeMethodId:t.meta&&t.meta.methodId});case Me.InitializeFailed:case Me.InitializeSucceeded:return H(e,{isInitializing:!1,initializeMethodId:void 0});case Me.DeinitializeRequested:return H(e,{isDeinitializing:!0,deinitializeMethodId:t.meta&&t.meta.methodId});case Me.DeinitializeFailed:case Me.DeinitializeSucceeded:return H(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case Me.SignInRequested:return H(e,{isSigningIn:!0,signInMethodId:t.meta&&t.meta.methodId});case Me.SignInFailed:case Me.SignInSucceeded:return H(e,{isSigningIn:!1,signInMethodId:void 0});case Me.SignOutRequested:return H(e,{isSigningOut:!0,signOutMethodId:t.meta&&t.meta.methodId});case Me.SignOutFailed:case Me.SignOutSucceeded:return H(e,{isSigningOut:!1,signOutMethodId:void 0});case Me.ExecutePaymentMethodCheckoutRequested:return H(e,{isExecutingPaymentMethodCheckout:!0,executePaymentMethodCheckoutMethodId:t.meta&&t.meta.methodId});case Me.ExecutePaymentMethodCheckoutFailed:case Me.ExecutePaymentMethodCheckoutSucceeded:return H(e,{isExecutingPaymentMethodCheckout:!1,executePaymentMethodCheckoutMethodId:void 0});case Me.WidgetInteractionStarted:return H(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta.methodId});case Me.WidgetInteractionFinished:case Me.WidgetInteractionFailed:return H(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}var ze;!function(e){e.LoadExtensionsRequested=\"LOAD_EXTENSIONS_REQUESTED\",e.LoadExtensionsSucceeded=\"LOAD_EXTENSIONS_SUCCEEDED\",e.LoadExtensionsFailed=\"LOAD_EXTENSIONS_FAILED\",e.RenderExtensionRequested=\"RENDER_EXTENSION_REQUESTED\",e.RenderExtensionSucceeded=\"RENDER_EXTENSION_SUCCEEDED\",e.RenderExtensionFailed=\"RENDER_EXTENSION_FAILED\"}(ze||(ze={}));const Fe={errors:{},statuses:{}};function Be(e=Fe,t){return(0,o.HY)({data:Ue,errors:(0,o.om)(qe,E),statuses:Ve})(e,t)}function Ue(e,t){var n;return t.type===ze.LoadExtensionsSucceeded?G(e,t.payload):t.type===N.HydrateInitialState?G(e,null===(n=t.payload)||void 0===n?void 0:n.extensions):e}function qe(e=Fe.errors,t){switch(t.type){case ze.LoadExtensionsRequested:case ze.LoadExtensionsSucceeded:return O(e,\"loadError\",void 0);case ze.RenderExtensionRequested:case ze.RenderExtensionSucceeded:return O(e,\"renderError\",void 0);case ze.LoadExtensionsFailed:return O(e,\"loadError\",t.payload);case ze.RenderExtensionFailed:return O(e,\"renderError\",t.payload);default:return e}}function Ve(e=Fe.statuses,t){switch(t.type){case ze.LoadExtensionsRequested:return O(e,\"isLoading\",!0);case ze.LoadExtensionsSucceeded:case ze.LoadExtensionsFailed:return O(e,\"isLoading\",!1);default:return e}}var Ge;!function(e){e.LoadFormFieldsRequested=\"LOAD_FORM_FIELDS_REQUESTED\",e.LoadFormFieldsSucceeded=\"LOAD_FORM_FIELDS_SUCCEEDED\",e.LoadFormFieldsFailed=\"LOAD_FORM_FIELDS_FAILED\"}(Ge||(Ge={}));const He={errors:{},statuses:{}};function Ye(e=He,t){return(0,o.HY)({data:We,extraFields:$e,errors:(0,o.om)(Ke,E),statuses:Ze})(e,t)}function We(e,t){var n;switch(t.type){case Ge.LoadFormFieldsSucceeded:return H(e,t.payload);case N.HydrateInitialState:return H(e,null===(n=t.payload)||void 0===n?void 0:n.formFields);default:return e}}function $e(e,t){var n,r;return t.type===N.HydrateInitialState&&null!==(r=null===(n=t.payload)||void 0===n?void 0:n.extraFields)&&void 0!==r?r:e}function Ke(e=He.errors,t){switch(t.type){case Ge.LoadFormFieldsSucceeded:return O(e,\"loadError\",void 0);case Ge.LoadFormFieldsFailed:return O(e,\"loadError\",t.payload);default:return e}}function Ze(e=He.statuses,t){switch(t.type){case Ge.LoadFormFieldsRequested:return O(e,\"isLoading\",!0);case Ge.LoadFormFieldsSucceeded:case Ge.LoadFormFieldsFailed:return O(e,\"isLoading\",!1);default:return e}}var Je;!function(e){e.LoadCountriesRequested=\"LOAD_COUNTRIES_REQUESTED\",e.LoadCountriesSucceeded=\"LOAD_COUNTRIES_SUCCEEDED\",e.LoadCountriesFailed=\"LOAD_COUNTRIES_FAILED\"}(Je||(Je={}));const Qe={errors:{},statuses:{}};function Xe(e=Qe,t){return(0,o.HY)({data:et,errors:(0,o.om)(tt,E),statuses:nt})(e,t)}function et(e,t){return t.type===Je.LoadCountriesSucceeded?G(e,t.payload):e}function tt(e=Qe.errors,t){switch(t.type){case Je.LoadCountriesRequested:case Je.LoadCountriesSucceeded:return O(e,\"loadError\",void 0);case Je.LoadCountriesFailed:return O(e,\"loadError\",t.payload);default:return e}}function nt(e=Qe.statuses,t){switch(t.type){case Je.LoadCountriesRequested:return O(e,\"isLoading\",!0);case Je.LoadCountriesSucceeded:case Je.LoadCountriesFailed:return O(e,\"isLoading\",!1);default:return e}}const rt={errors:{},meta:{},statuses:{}};function it(e=rt,t){return(0,o.HY)({data:ot,errors:(0,o.om)(st,E),meta:at,statuses:ct})(e,t)}function ot(e,t){switch(t.type){case ye.LoadOrderSucceeded:case ye.LoadOrderPaymentsSucceeded:return H(e,(0,f.omit)(t.payload,[\"billingAddress\",\"coupons\"]));default:return e}}function at(e,t){switch(t.type){case ye.FinalizeOrderSucceeded:case ye.SubmitOrderSucceeded:return H(e,Object.assign(Object.assign({},t.meta),{callbackUrl:t.payload&&t.payload.order.callbackUrl,orderToken:t.payload&&t.payload.order.token,payment:t.payload&&t.payload.order&&t.payload.order.payment}));default:return e}}function st(e=rt.errors,t){switch(t.type){case ye.LoadOrderRequested:case ye.LoadOrderSucceeded:case ye.LoadOrderPaymentsSucceeded:case ye.LoadOrderPaymentsRequested:return O(e,\"loadError\",void 0);case ye.LoadOrderFailed:case ye.LoadOrderPaymentsFailed:return O(e,\"loadError\",t.payload);default:return e}}function ct(e=rt.statuses,t){switch(t.type){case ye.LoadOrderRequested:case ye.LoadOrderPaymentsRequested:return O(e,\"isLoading\",!0);case ye.LoadOrderSucceeded:case ye.LoadOrderFailed:case ye.LoadOrderPaymentsSucceeded:case ye.LoadOrderPaymentsFailed:return O(e,\"isLoading\",!1);default:return e}}const ut={};function dt(e=ut,t){return(0,o.HY)({data:lt})(e,t)}function lt(e,t){switch(t.type){case ye.LoadOrderPaymentsSucceeded:case ye.LoadOrderSucceeded:return L(e,t.payload&&t.payload.billingAddress);default:return e}}var pt,ht;function ft(e={},t){return(0,o.HY)({data:yt})(e,t)}function yt(e,t){return t.type===pt.SubmitPaymentSucceeded?t.payload:e}!function(e){e.SubmitPaymentRequested=\"SUBMIT_PAYMENT_REQUESTED\",e.SubmitPaymentSucceeded=\"SUBMIT_PAYMENT_SUCCEEDED\",e.SubmitPaymentFailed=\"SUBMIT_PAYMENT_FAILED\",e.InitializeOffsitePaymentRequested=\"INITIALIZE_OFFSITE_PAYMENT_REQUESTED\",e.InitializeOffsitePaymentSucceeded=\"INITIALIZE_OFFSITE_PAYMENT_SUCCEEDED\",e.InitializeOffsitePaymentFailed=\"INITIALIZE_OFFSITE_PAYMENT_FAILED\"}(pt||(pt={})),function(e){e.LoadPaymentMethodRequested=\"LOAD_PAYMENT_METHOD_REQUESTED\",e.LoadPaymentMethodSucceeded=\"LOAD_PAYMENT_METHOD_SUCCEEDED\",e.LoadPaymentMethodFailed=\"LOAD_PAYMENT_METHOD_FAILED\",e.LoadPaymentMethodsRequested=\"LOAD_PAYMENT_METHODS_REQUESTED\",e.LoadPaymentMethodsSucceeded=\"LOAD_PAYMENT_METHODS_SUCCEEDED\",e.LoadPaymentMethodsFailed=\"LOAD_PAYMENT_METHODS_FAILED\"}(ht||(ht={}));const mt={errors:{},statuses:{}};function gt(e=mt,t){return(0,o.HY)({data:vt,errors:(0,o.om)(bt,E),meta:_t,statuses:St})(e,t)}function vt(e,t){switch(t.type){case ht.LoadPaymentMethodSucceeded:return function(e,t,n){if(!t)return e;const r=(0,f.pick)(t,\"id\"),i=\"object\"==typeof n?(0,f.pickBy)(n):n||r,o=(0,f.findIndex)(e,i),a=[...e];if(-1===o)a.push(t);else{const n=e[o];a[o]=V(n)&&V(t)?H(n,t):t}return a}(e||[],t.payload,t.payload&&{id:t.payload.id,gateway:t.payload.gateway});case ht.LoadPaymentMethodsSucceeded:return G(e,t.payload,{matchObject:(e,t)=>e.id===t.id&&e.gateway===t.gateway});default:return e}}function _t(e,t){return t.type===ht.LoadPaymentMethodsSucceeded?H(e,t.meta):e}function bt(e=mt.errors,t){switch(t.type){case ht.LoadPaymentMethodsRequested:case ht.LoadPaymentMethodsSucceeded:return O(e,\"loadError\",void 0);case ht.LoadPaymentMethodsFailed:return O(e,\"loadError\",t.payload);case ht.LoadPaymentMethodRequested:case ht.LoadPaymentMethodSucceeded:return H(e,{loadMethodId:void 0,loadMethodError:void 0});case ht.LoadPaymentMethodFailed:return H(e,{loadMethodId:t.meta.methodId,loadMethodError:t.payload});default:return e}}function St(e=mt.statuses,t){switch(t.type){case ht.LoadPaymentMethodsRequested:return O(e,\"isLoading\",!0);case ht.LoadPaymentMethodsSucceeded:case ht.LoadPaymentMethodsFailed:return O(e,\"isLoading\",!1);case ht.LoadPaymentMethodRequested:return H(e,{isLoadingMethod:!0,loadMethodId:t.meta.methodId});case ht.LoadPaymentMethodSucceeded:case ht.LoadPaymentMethodFailed:return H(e,{isLoadingMethod:!1,loadMethodId:void 0});default:return e}}var wt;!function(e){e.ExecuteFailed=\"PAYMENT_STRATEGY_EXECUTE_FAILED\",e.ExecuteRequested=\"PAYMENT_STRATEGY_EXECUTE_REQUESTED\",e.ExecuteSucceeded=\"PAYMENT_STRATEGY_EXECUTE_SUCCEEDED\",e.FinalizeFailed=\"PAYMENT_STRATEGY_FINALIZE_FAILED\",e.FinalizeRequested=\"PAYMENT_STRATEGY_FINALIZE_REQUESTED\",e.FinalizeSucceeded=\"PAYMENT_STRATEGY_FINALIZE_SUCCEEDED\",e.InitializeFailed=\"PAYMENT_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"PAYMENT_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"PAYMENT_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"PAYMENT_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"PAYMENT_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"PAYMENT_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_FAILED\"}(wt||(wt={}));const Ct={data:{},errors:{},statuses:{}};function It(e=Ct,t){return(0,o.HY)({data:Et,errors:(0,o.om)(Pt,E),statuses:Ot})(e,t)}function Et(e=Ct.data,t){switch(t.type){case wt.InitializeSucceeded:if(t.meta){const{methodId:n,gatewayId:r}=t.meta,i=r?`${n}.${r}`:n;return H(e,{[i]:{isInitialized:!0}})}break;case wt.DeinitializeSucceeded:if(t.meta){const{methodId:n,gatewayId:r}=t.meta,i=r?`${n}.${r}`:n;return H(e,{[i]:{isInitialized:!1}})}}return e}function Pt(e=Ct.errors,t){switch(t.type){case wt.InitializeRequested:case wt.InitializeSucceeded:return H(e,{initializeError:void 0,initializeMethodId:void 0});case wt.InitializeFailed:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:r}=t.meta;n=r?`${e}.${r}`:e}return H(e,{initializeError:t.payload,initializeMethodId:n})}case wt.DeinitializeRequested:case wt.DeinitializeSucceeded:return H(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case wt.DeinitializeFailed:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:r}=t.meta;n=r?`${e}.${r}`:e}return H(e,{deinitializeError:t.payload,deinitializeMethodId:n})}case wt.ExecuteRequested:case wt.ExecuteSucceeded:return H(e,{executeError:void 0,executeMethodId:void 0});case wt.ExecuteFailed:return H(e,{executeError:t.payload,executeMethodId:t.meta&&t.meta.methodId});case wt.FinalizeRequested:case wt.FinalizeSucceeded:return H(e,{finalizeError:void 0,finalizeMethodId:void 0});case wt.FinalizeFailed:return H(e,{finalizeError:t.payload,finalizeMethodId:t.meta&&t.meta.methodId});case wt.WidgetInteractionStarted:case wt.WidgetInteractionFinished:return H(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case wt.WidgetInteractionFailed:return H(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta.methodId});default:return e}}function Ot(e=Ct.statuses,t){switch(t.type){case wt.InitializeRequested:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:r}=t.meta;n=r?`${e}.${r}`:e}return H(e,{isInitializing:!0,initializeMethodId:n})}case wt.InitializeFailed:case wt.InitializeSucceeded:return H(e,{isInitializing:!1,initializeMethodId:void 0});case wt.DeinitializeRequested:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:r}=t.meta;n=r?`${e}.${r}`:e}return H(e,{isDeinitializing:!0,deinitializeMethodId:n})}case wt.DeinitializeFailed:case wt.DeinitializeSucceeded:return H(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case wt.ExecuteRequested:return H(e,{isExecuting:!0,executeMethodId:t.meta&&t.meta.methodId});case wt.ExecuteFailed:case wt.ExecuteSucceeded:return H(e,{isExecuting:!1,executeMethodId:void 0});case wt.FinalizeRequested:return H(e,{isFinalizing:!0,finalizeMethodId:t.meta&&t.meta.methodId});case wt.FinalizeFailed:case wt.FinalizeSucceeded:return H(e,{isFinalizing:!1,finalizeMethodId:void 0});case wt.WidgetInteractionStarted:return H(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta.methodId});case wt.WidgetInteractionFinished:case wt.WidgetInteractionFailed:return H(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}var At;!function(e){e.UpdatePaymentProviderCustomer=\"UPDATE_PAYMENT_PROVIDER_CUSTOMER\"}(At||(At={}));const Tt={data:{}};function kt(e=Tt,t){return(0,o.HY)({data:Rt})(e,t)}function Rt(e=Tt.data,t){return t.type===At.UpdatePaymentProviderCustomer?H(e,t.payload):e}var Mt;!function(e){e.LoadInstrumentsRequested=\"LOAD_INSTRUMENTS_REQUESTED\",e.LoadInstrumentsSucceeded=\"LOAD_INSTRUMENTS_SUCCEEDED\",e.LoadInstrumentsFailed=\"LOAD_INSTRUMENTS_FAILED\",e.DeleteInstrumentRequested=\"DELETE_INSTRUMENT_REQUESTED\",e.DeleteInstrumentSucceeded=\"DELETE_INSTRUMENT_SUCCEEDED\",e.DeleteInstrumentFailed=\"DELETE_INSTRUMENT_FAILED\"}(Mt||(Mt={}));const xt={data:[],errors:{},statuses:{}};function Nt(e=xt,t){return(0,o.HY)({data:Dt,errors:(0,o.om)(Lt,E),meta:jt,statuses:zt})(e,t)}function Dt(e=xt.data,t){return t.type===Mt.LoadInstrumentsSucceeded?G(e,t.payload&&t.payload.vaultedInstruments||[]):e}function jt(e,t){switch(t.type){case Mt.LoadInstrumentsSucceeded:case Mt.DeleteInstrumentSucceeded:return H(e,t.meta);default:return e}}function Lt(e=xt.errors,t){switch(t.type){case Mt.LoadInstrumentsRequested:case Mt.LoadInstrumentsSucceeded:return O(e,\"loadError\",void 0);case Mt.DeleteInstrumentRequested:case Mt.DeleteInstrumentSucceeded:return H(e,{deleteError:void 0,failedInstrument:void 0});case Mt.LoadInstrumentsFailed:return O(e,\"loadError\",t.payload);case Mt.DeleteInstrumentFailed:return H(e,{deleteError:t.payload,failedInstrument:t.meta.instrumentId});default:return e}}function zt(e=xt.statuses,t){switch(t.type){case Mt.LoadInstrumentsRequested:return O(e,\"isLoading\",!0);case Mt.DeleteInstrumentRequested:return H(e,{isDeleting:!0,deletingInstrument:t.meta.instrumentId});case Mt.LoadInstrumentsSucceeded:case Mt.LoadInstrumentsFailed:return O(e,\"isLoading\",!1);case Mt.DeleteInstrumentSucceeded:case Mt.DeleteInstrumentFailed:return H(e,{isDeleting:!1,deletingInstrument:void 0});default:return e}}var Ft;!function(e){e.ForgetCheckoutRemoteCustomerRequested=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_REQUESTED\",e.ForgetCheckoutRemoteCustomerSucceeded=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_SUCCEEDED\",e.ForgetCheckoutRemoteCustomerFailed=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_FAILED\",e.InitializeRemoteBillingRequested=\"INITIALIZE_REMOTE_BILLING_REQUESTED\",e.InitializeRemoteBillingSucceeded=\"INITIALIZE_REMOTE_BILLING_SUCCEEDED\",e.InitializeRemoteBillingFailed=\"INITIALIZE_REMOTE_BILLING_FAILED\",e.InitializeRemoteShippingRequested=\"INITIALIZE_REMOTE_SHIPPING_REQUESTED\",e.InitializeRemoteShippingSucceeded=\"INITIALIZE_REMOTE_SHIPPING_SUCCEEDED\",e.InitializeRemoteShippingFailed=\"INITIALIZE_REMOTE_SHIPPING_FAILED\",e.InitializeRemotePaymentRequested=\"INITIALIZE_REMOTE_PAYMENT_REQUESTED\",e.InitializeRemotePaymentSucceeded=\"INITIALIZE_REMOTE_PAYMENT_SUCCEEDED\",e.InitializeRemotePaymentFailed=\"INITIALIZE_REMOTE_PAYMENT_FAILED\",e.LoadRemoteSettingsRequested=\"LOAD_REMOTE_SETTINGS_REQUESTED\",e.LoadRemoteSettingsSucceeded=\"LOAD_REMOTE_SETTINGS_SUCCEEDED\",e.LoadRemoteSettingsFailed=\"LOAD_REMOTE_SETTINGS_FAILED\",e.SignOutRemoteCustomerRequested=\"SIGN_OUT_REMOTE_CUSTOMER_REQUESTED\",e.SignOutRemoteCustomerSucceeded=\"SIGN_OUT_REMOTE_CUSTOMER_SUCCEEDED\",e.SignOutRemoteCustomerFailed=\"SIGN_OUT_REMOTE_CUSTOMER_FAILED\",e.UpdateRemoteCheckout=\"UPDATE_REMOTE_CHECKOUT\"}(Ft||(Ft={}));const Bt={data:{}};function Ut(e=Bt,t){return t.meta&&t.meta.methodId?(0,o.HY)({data:(0,o.HY)({[t.meta.methodId]:qt})})(e,t):e}function qt(e,t){switch(t.type){case Ft.InitializeRemoteBillingSucceeded:return O(e,\"billing\",t.payload&&t.payload.billing);case Ft.InitializeRemoteShippingSucceeded:return O(e,\"shipping\",t.payload&&t.payload.shipping);case Ft.LoadRemoteSettingsSucceeded:return O(e,\"settings\",t.payload);case Ft.UpdateRemoteCheckout:return H(e,t.payload);default:return e}}const Vt={errors:{updateShippingOptionError:{},updateError:{},deleteError:{}},statuses:{isUpdating:{},isUpdatingShippingOption:{},isDeleting:{}}};function Gt(e=Vt,t){return(0,o.HY)({data:Ht,errors:(0,o.om)(Yt,E),statuses:Wt})(e,t)}function Ht(e,t){var n,r;switch(t.type){case x.LoadCheckoutSucceeded:case $.LoadShippingOptionsSucceeded:case $.CreateConsignmentsSucceeded:case $.UpdateConsignmentSucceeded:case $.DeleteConsignmentSucceeded:case $.UpdateShippingOptionSucceeded:case Y.ApplyCouponSucceeded:case Y.RemoveCouponSucceeded:return G(e,t.payload&&t.payload.consignments);case Pe.SignOutCustomerSucceeded:return G(e,[]);case N.HydrateInitialState:return G(e,null===(r=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===r?void 0:r.consignments);default:return e}}function Yt(e=Vt.errors,t){switch(t.type){case x.LoadCheckoutRequested:case x.LoadCheckoutSucceeded:case $.LoadShippingOptionsSucceeded:case $.LoadShippingOptionsRequested:return O(e,\"loadError\",void 0);case x.LoadCheckoutFailed:case $.LoadShippingOptionsFailed:return O(e,\"loadError\",t.payload);case $.CreateConsignmentsRequested:case $.CreateConsignmentsSucceeded:return O(e,\"createError\",void 0);case $.CreateConsignmentsFailed:return O(e,\"createError\",t.payload);case $.UpdateConsignmentSucceeded:case $.UpdateConsignmentRequested:return t.meta?H(e,{updateError:{[t.meta.id]:void 0}}):e;case $.UpdateConsignmentFailed:return t.meta?H(e,{updateError:{[t.meta.id]:t.payload}}):e;case $.DeleteConsignmentSucceeded:case $.DeleteConsignmentRequested:return t.meta?H(e,{deleteError:{[t.meta.id]:void 0}}):e;case $.DeleteConsignmentFailed:return t.meta?H(e,{deleteError:{[t.meta.id]:t.payload}}):e;case $.UpdateShippingOptionRequested:case $.UpdateShippingOptionSucceeded:return t.meta?H(e,{updateShippingOptionError:{[t.meta.id]:void 0}}):e;case $.UpdateShippingOptionFailed:return t.meta?H(e,{updateShippingOptionError:{[t.meta.id]:t.payload}}):e;default:return e}}function Wt(e=Vt.statuses,t){switch(t.type){case x.LoadCheckoutRequested:return O(e,\"isLoading\",!0);case $.LoadShippingOptionsRequested:return O(e,\"isLoadingShippingOptions\",!0);case x.LoadCheckoutSucceeded:case x.LoadCheckoutFailed:return O(e,\"isLoading\",!1);case $.LoadShippingOptionsSucceeded:case $.LoadShippingOptionsFailed:return O(e,\"isLoadingShippingOptions\",!1);case $.CreateConsignmentsRequested:return O(e,\"isCreating\",!0);case $.CreateConsignmentsSucceeded:case $.CreateConsignmentsFailed:return O(e,\"isCreating\",!1);case $.UpdateConsignmentRequested:return t.meta?H(e,{isUpdating:{[t.meta.id]:!0}}):e;case $.UpdateConsignmentSucceeded:case $.UpdateConsignmentFailed:return t.meta?H(e,{isUpdating:{[t.meta.id]:!1}}):e;case $.DeleteConsignmentRequested:return t.meta?H(e,{isDeleting:{[t.meta.id]:!0}}):e;case $.DeleteConsignmentSucceeded:case $.DeleteConsignmentFailed:return t.meta?H(e,{isDeleting:{[t.meta.id]:!1}}):e;case $.UpdateShippingOptionRequested:return t.meta?H(e,{isUpdatingShippingOption:{[t.meta.id]:!0}}):e;case $.UpdateShippingOptionSucceeded:case $.UpdateShippingOptionFailed:return t.meta?H(e,{isUpdatingShippingOption:{[t.meta.id]:!1}}):e;default:return e}}function $t(e,t){const n={};return Object.keys(e).forEach(r=>{const i=e[r],o=t?`${t}.${r}`:r;\"object\"==typeof i?Object.assign(n,$t(i,o)):n[o]=i}),n}function Kt(e){return Object.keys(e).sort().reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:e[n]}),{})}var Zt;!function(e){e.LoadPickupOptionsRequested=\"LOAD_PICKUP_OPTIONS_REQUESTED\",e.LoadPickupOptionsSucceeded=\"LOAD_PICKUP_OPTIONS_SUCCEEDED\",e.LoadPickupOptionsFailed=\"LOAD_PICKUP_OPTIONS_FAILED\"}(Zt||(Zt={}));const Jt={errors:{},statuses:{}};function Qt(e=Jt,t){return(0,o.HY)({data:Xt,errors:(0,o.om)(en,E),statuses:tn})(e,t)}function Xt(e,t){if(t.type!==Zt.LoadPickupOptionsSucceeded)return e;if(t.meta){const n=Kt($t({consignmentId:t.meta.consignmentId,searchArea:t.meta.searchArea}));return O(e,btoa(`${JSON.stringify(n)}`),t.payload)}}function en(e=Jt.errors,t){switch(t.type){case Zt.LoadPickupOptionsRequested:case Zt.LoadPickupOptionsSucceeded:return O(e,\"loadError\",void 0);case Zt.LoadPickupOptionsFailed:return O(e,\"loadError\",t.payload);default:return e}}function tn(e=Jt.statuses,t){switch(t.type){case Zt.LoadPickupOptionsRequested:return O(e,\"isLoading\",!0);case Zt.LoadPickupOptionsSucceeded:case Zt.LoadPickupOptionsFailed:return O(e,\"isLoading\",!1);default:return e}}var nn;!function(e){e.LoadShippingCountriesRequested=\"LOAD_SHIPPING_COUNTRIES_REQUESTED\",e.LoadShippingCountriesSucceeded=\"LOAD_SHIPPING_COUNTRIES_SUCCEEDED\",e.LoadShippingCountriesFailed=\"LOAD_SHIPPING_COUNTRIES_FAILED\"}(nn||(nn={}));const rn={errors:{},statuses:{}};function on(e=rn,t){return(0,o.HY)({data:an,errors:(0,o.om)(sn,E),statuses:cn})(e,t)}function an(e,t){return t.type===nn.LoadShippingCountriesSucceeded?G(e,t.payload):e}function sn(e=rn.errors,t){switch(t.type){case nn.LoadShippingCountriesRequested:case nn.LoadShippingCountriesSucceeded:return O(e,\"loadError\",void 0);case nn.LoadShippingCountriesFailed:return O(e,\"loadError\",t.payload);default:return e}}function cn(e=rn.statuses,t){switch(t.type){case nn.LoadShippingCountriesRequested:return O(e,\"isLoading\",!0);case nn.LoadShippingCountriesSucceeded:case nn.LoadShippingCountriesFailed:return O(e,\"isLoading\",!1);default:return e}}var un;!function(e){e.UpdateAddressFailed=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_FAILED\",e.UpdateAddressRequested=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_REQUESTED\",e.UpdateAddressSucceeded=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_SUCCEEDED\",e.SelectOptionFailed=\"SHIPPING_STRATEGY_SELECT_OPTION_FAILED\",e.SelectOptionRequested=\"SHIPPING_STRATEGY_SELECT_OPTION_REQUESTED\",e.SelectOptionSucceeded=\"SHIPPING_STRATEGY_SELECT_OPTION_SUCCEEDED\",e.InitializeFailed=\"SHIPPING_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"SHIPPING_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"SHIPPING_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"SHIPPING_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"SHIPPING_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"SHIPPING_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_FAILED\"}(un||(un={}));const dn={data:{},errors:{},statuses:{}};function ln(e=dn,t){return(0,o.HY)({data:pn,errors:(0,o.om)(hn,E),statuses:fn})(e,t)}function pn(e=dn.data,t){switch(t.type){case un.InitializeSucceeded:return H(e,{[t.meta&&t.meta.methodId]:{isInitialized:!0}});case un.DeinitializeSucceeded:return H(e,{[t.meta&&t.meta.methodId]:{isInitialized:!1}})}return e}function hn(e=dn.errors,t){switch(t.type){case un.InitializeRequested:case un.InitializeSucceeded:return H(e,{initializeError:void 0,initializeMethodId:void 0});case un.InitializeFailed:return H(e,{initializeError:t.payload,initializeMethodId:t.meta&&t.meta.methodId});case un.DeinitializeRequested:case un.DeinitializeSucceeded:return H(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case un.DeinitializeFailed:return H(e,{deinitializeError:t.payload,deinitializeMethodId:t.meta&&t.meta.methodId});case un.UpdateAddressRequested:case un.UpdateAddressSucceeded:return H(e,{updateAddressError:void 0,updateAddressMethodId:void 0});case un.UpdateAddressFailed:return H(e,{updateAddressError:t.payload,updateAddressMethodId:t.meta&&t.meta.methodId});case un.SelectOptionRequested:case un.SelectOptionSucceeded:return H(e,{selectOptionError:void 0,selectOptionMethodId:void 0});case un.SelectOptionFailed:return H(e,{selectOptionError:t.payload,selectOptionMethodId:t.meta&&t.meta.methodId});case un.WidgetInteractionStarted:case un.WidgetInteractionFinished:return H(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case un.WidgetInteractionFailed:return H(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta&&t.meta.methodId});default:return e}}function fn(e=dn.statuses,t){switch(t.type){case un.InitializeRequested:return H(e,{isInitializing:!0,initializeMethodId:t.meta&&t.meta.methodId});case un.InitializeFailed:case un.InitializeSucceeded:return H(e,{isInitializing:!1,initializeMethodId:void 0});case un.DeinitializeRequested:return H(e,{isDeinitializing:!0,deinitializeMethodId:t.meta&&t.meta.methodId});case un.DeinitializeFailed:case un.DeinitializeSucceeded:return H(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case un.UpdateAddressRequested:return H(e,{isUpdatingAddress:!0,updateAddressMethodId:t.meta&&t.meta.methodId});case un.UpdateAddressFailed:case un.UpdateAddressSucceeded:return H(e,{isUpdatingAddress:!1,updateAddressMethodId:void 0});case un.SelectOptionRequested:return H(e,{isSelectingOption:!0,selectOptionMethodId:t.meta&&t.meta.methodId});case un.SelectOptionFailed:case un.SelectOptionSucceeded:return H(e,{isSelectingOption:!1,selectOptionMethodId:void 0});case un.WidgetInteractionStarted:return H(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta&&t.meta.methodId});case un.WidgetInteractionFinished:case un.WidgetInteractionFailed:return H(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}var yn;!function(e){e.SendSignInEmailRequested=\"SEND_SIGNIN_EMAIL_REQUESTED\",e.SendSignInEmailSucceeded=\"SEND_SIGNIN_EMAIL_SUCCEEDED\",e.SendSignInEmailFailed=\"SEND_SIGNIN_EMAIL_FAILED\"}(yn||(yn={}));const mn={errors:{},statuses:{}};function gn(e=mn,t){return(0,o.HY)({data:vn,errors:(0,o.om)(_n,E),statuses:bn})(e,t)}function vn(e,t){return t.type===yn.SendSignInEmailSucceeded?H(e,t.payload):e}function _n(e=mn.errors,t){switch(t.type){case yn.SendSignInEmailRequested:case yn.SendSignInEmailSucceeded:return O(e,\"sendError\",void 0);case yn.SendSignInEmailFailed:return O(e,\"sendError\",t.payload);default:return e}}function bn(e=mn.statuses,t){switch(t.type){case yn.SendSignInEmailRequested:return O(e,\"isSending\",!0);case yn.SendSignInEmailFailed:case yn.SendSignInEmailSucceeded:return O(e,\"isSending\",!1);default:return e}}var Sn;!function(e){e.ApplyStoreCreditRequested=\"APPLY_STORE_CREDIT_REQUESTED\",e.ApplyStoreCreditSucceeded=\"APPLY_STORE_CREDIT_SUCCEEDED\",e.ApplyStoreCreditFailed=\"APPLY_STORE_CREDIT_FAILED\"}(Sn||(Sn={}));const wn={errors:{},statuses:{}};function Cn(e=wn,t){return(0,o.HY)({errors:(0,o.om)(In,E),statuses:En})(e,t)}function In(e=wn.errors,t){switch(t.type){case Sn.ApplyStoreCreditRequested:case Sn.ApplyStoreCreditSucceeded:return O(e,\"applyError\",void 0);case Sn.ApplyStoreCreditFailed:return O(e,\"applyError\",t.payload);default:return e}}function En(e=wn.statuses,t){switch(t.type){case Sn.ApplyStoreCreditRequested:return O(e,\"isApplying\",!0);case Sn.ApplyStoreCreditSucceeded:case Sn.ApplyStoreCreditFailed:return O(e,\"isApplying\",!1);default:return e}}const Pn={errors:{},statuses:{}};function On(e=Pn,t){return(0,o.HY)({errors:(0,o.om)(An,E),statuses:Tn})(e,t)}function An(e=Pn.errors,t){switch(t.type){case D.UpdateSubscriptionsRequested:case D.UpdateSubscriptionsSucceeded:return O(e,\"updateError\",void 0);case D.UpdateSubscriptionsFailed:return O(e,\"updateError\",t.payload);default:return e}}function Tn(e=Pn.statuses,t){switch(t.type){case D.UpdateSubscriptionsRequested:return O(e,\"isUpdating\",!0);case D.UpdateSubscriptionsFailed:case D.UpdateSubscriptionsSucceeded:return O(e,\"isUpdating\",!1);default:return e}}var kn;!function(e){e.InitializeFailed=\"SPAM_PROTECTION_INITIALIZE_FAILED\",e.InitializeSucceeded=\"SPAM_PROTECTION_INITIALIZE_SUCCEEDED\",e.InitializeRequested=\"SPAM_PROTECTION_INITIALIZE_REQUESTED\",e.VerifyCheckoutRequested=\"SPAM_PROTECTION_CHECKOUT_VERIFY_REQUESTED\",e.VerifyCheckoutSucceeded=\"SPAM_PROTECTION_CHECKOUT_VERIFY_SUCCEEDED\",e.VerifyCheckoutFailed=\"SPAM_PROTECTION_CHECKOUT_VERIFY_FAILED\",e.ExecuteRequested=\"SPAM_PROTECTION_EXECUTE_REQUESTED\",e.ExecuteSucceeded=\"SPAM_PROTECTION_EXECUTE_SUCCEEDED\",e.ExecuteFailed=\"SPAM_PROTECTION_EXECUTE_FAILED\"}(kn||(kn={}));const Rn={errors:{},statuses:{}};function Mn(e=Rn,t){return(0,o.HY)({data:xn,errors:(0,o.om)(Nn,E),statuses:Dn})(e,t)}function xn(e,t){var n;switch(t.type){case x.LoadCheckoutSucceeded:case x.UpdateCheckoutSucceeded:case Sn.ApplyStoreCreditSucceeded:case j.UpdateBillingAddressSucceeded:case Y.ApplyCouponSucceeded:case Y.RemoveCouponSucceeded:case $.CreateConsignmentsSucceeded:case $.UpdateConsignmentSucceeded:case $.DeleteConsignmentSucceeded:case $.UpdateShippingOptionSucceeded:case $.LoadShippingOptionsSucceeded:case W.ApplyGiftCertificateSucceeded:case W.RemoveGiftCertificateSucceeded:case kn.VerifyCheckoutSucceeded:return H(e,(0,f.omit)(t.payload,[\"billingAddress\",\"cart\",\"consignments\",\"customer\",\"coupons\",\"giftCertificates\"]));case ye.SubmitOrderSucceeded:return O(e,\"orderId\",t.payload&&t.payload.order.orderId);case N.HydrateInitialState:return H(e,(0,f.omit)(null===(n=t.payload)||void 0===n?void 0:n.checkout,[\"billingAddress\",\"cart\",\"consignments\",\"customer\",\"coupons\",\"giftCertificates\"]));default:return e}}function Nn(e=Rn.errors,t){switch(t.type){case x.LoadCheckoutRequested:case x.LoadCheckoutSucceeded:return O(e,\"loadError\",void 0);case x.LoadCheckoutFailed:return O(e,\"loadError\",t.payload);case x.UpdateCheckoutRequested:case x.UpdateCheckoutSucceeded:return O(e,\"updateError\",void 0);case x.UpdateCheckoutFailed:return O(e,\"updateError\",t.payload);default:return e}}function Dn(e=Rn.statuses,t){switch(t.type){case x.LoadCheckoutRequested:return O(e,\"isLoading\",!0);case x.LoadCheckoutFailed:case x.LoadCheckoutSucceeded:return O(e,\"isLoading\",!1);case x.UpdateCheckoutRequested:return O(e,\"isUpdating\",!0);case x.UpdateCheckoutFailed:case x.UpdateCheckoutSucceeded:return O(e,\"isUpdating\",!1);case kn.ExecuteRequested:return O(e,\"isExecutingSpamCheck\",!0);case kn.ExecuteFailed:case kn.ExecuteSucceeded:return O(e,\"isExecutingSpamCheck\",!1);default:return e}}var jn=n(4218),Ln=\"NOT_FOUND\",zn=function(e,t){return e===t};function Fn(e,t){var n,r,i=\"object\"==typeof t?t:{equalityCheck:t},o=i.equalityCheck,a=void 0===o?zn:o,s=i.maxSize,c=void 0===s?1:s,u=i.resultEqualityCheck,d=function(e){return function(t,n){if(null===t||null===n||t.length!==n.length)return!1;for(var r=t.length,i=0;i<r;i++)if(!e(t[i],n[i]))return!1;return!0}}(a),l=1===c?(n=d,{get:function(e){return r&&n(r.key,e)?r.value:Ln},put:function(e,t){r={key:e,value:t}},getEntries:function(){return r?[r]:[]},clear:function(){r=void 0}}):function(e,t){var n=[];function r(e){var r=n.findIndex(function(n){return t(e,n.key)});if(r>-1){var i=n[r];return r>0&&(n.splice(r,1),n.unshift(i)),i.value}return Ln}return{get:r,put:function(t,i){r(t)===Ln&&(n.unshift({key:t,value:i}),n.length>e&&n.pop())},getEntries:function(){return n},clear:function(){n=[]}}}(c,d);function p(){var t=l.get(arguments);if(t===Ln){if(t=e.apply(null,arguments),u){var n=l.getEntries().find(function(e){return u(e.value,t)});n&&(t=n.value)}l.put(arguments,t)}return t}return p.clearCache=function(){return l.clear()},p}function Bn(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return function(){for(var t=arguments.length,r=new Array(t),i=0;i<t;i++)r[i]=arguments[i];var o,a=0,s={memoizeOptions:void 0},c=r.pop();if(\"object\"==typeof c&&(s=c,c=r.pop()),\"function\"!=typeof c)throw new Error(\"createSelector expects an output function after the inputs, but received: [\"+typeof c+\"]\");var u=s.memoizeOptions,d=void 0===u?n:u,l=Array.isArray(d)?d:[d],p=function(e){var t=Array.isArray(e[0])?e[0]:e;if(!t.every(function(e){return\"function\"==typeof e})){var n=t.map(function(e){return\"function\"==typeof e?\"function \"+(e.name||\"unnamed\")+\"()\":typeof e}).join(\", \");throw new Error(\"createSelector expects all input-selectors to be functions, but received the following types: [\"+n+\"]\")}return t}(r),h=e.apply(void 0,[function(){return a++,c.apply(null,arguments)}].concat(l)),f=e(function(){for(var e=[],t=p.length,n=0;n<t;n++)e.push(p[n].apply(null,arguments));return o=h.apply(null,e)});return Object.assign(f,{resultFunc:c,memoizedResultFunc:h,dependencies:p,lastResult:function(){return o},recomputations:function(){return a},resetRecomputations:function(){return a=0}}),f}}const Un=(qn=Bn(Fn),(...e)=>{const t=e.pop();return qn(...e,(...e)=>{const n=t(...e);return\"function\"==typeof n?(0,jn.Bj)(n):n})});var qn,Vn;!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentProviderCustomer=13]=\"MissingPaymentProviderCustomer\",e[e.MissingPaymentRedirectUrl=14]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=15]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=16]=\"MissingPaymentToken\",e[e.MissingShippingAddress=17]=\"MissingShippingAddress\"}(Vn||(Vn={}));class Gn extends d{constructor(e){super(function(e){switch(e){case Vn.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case Vn.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case Vn.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case Vn.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case Vn.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case Vn.MissingCheckoutConfig:case Vn.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case Vn.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case Vn.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case Vn.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case Vn.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case Vn.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case Vn.MissingPaymentProviderCustomer:return\"Unable to proceed because payment provider customer is unavailable.\";case Vn.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function Hn(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}function Yn(e){return function(e){const t=Object.create(e);return function(e,t){let n=Object.getPrototypeOf(e);for(;n;)t(n),n=Object.getPrototypeOf(n)}(e,n=>{Object.getOwnPropertyNames(n).forEach(n=>{\"constructor\"!==n&&\"function\"==typeof t[n]&&\"_\"!==n.charAt(0)&&(t[n]=((e,t)=>(...n)=>(0,o.ol)(e[t].call(e,...n)))(e,n))})}),t}(e)}const Wn=\"b2bExtraField_\";function $n(e){var t;const{fieldType:n,type:r}=function(e){switch(e){case\"multiline_text\":return{fieldType:\"multiline\",type:\"string\"};case\"number\":return{fieldType:\"text\",type:\"integer\"};case\"dropdown\":return{fieldType:\"dropdown\",type:\"array\"};default:return{fieldType:\"text\",type:\"string\"}}}(e.type);let i;return e.config.numberOfRows&&(i={rows:e.config.numberOfRows}),(null===(t=e.config.options)||void 0===t?void 0:t.length)&&(i=Object.assign(Object.assign({},i),{items:e.config.options.map(e=>({value:e,label:e}))})),{id:`${Wn}${e.id}`,name:`${Wn}${e.id}`,custom:!1,label:e.name,hidden:!e.visibleToStorefront,required:e.isRequired,default:null!=e.config.defaultValue?String(e.config.defaultValue):void 0,fieldType:n,type:r,maxLength:e.config.maxLength,max:e.config.maxValue,options:i}}const Kn=\"PAYMENT_TYPE_HOSTED\",Zn=\"ACKNOWLEDGE\",Jn=\"FINALIZE\",Qn={\"mollie.credit_card\":{provider:\"mollie\",method:\"credit_card\"},\"adyenv2.scheme\":{provider:\"adyenv2\",method:\"scheme\"},\"adyenv3.scheme\":{provider:\"adyenv3\",method:\"scheme\"},\"adyenv2.bcmc\":{provider:\"adyenv2\",method:\"bcmc\"},\"adyenv2.ideal\":{provider:\"adyenv2\",method:\"ideal\"},\"adyenv2.sepadirectdebit\":{provider:\"adyenv2\",method:\"sepadirectdebit\"},\"adyenv2.directEbanking\":{provider:\"adyenv2\",method:\"directEbanking\"},\"adyenv2.giropay\":{provider:\"adyenv2\",method:\"giropay\"},braintree:{provider:\"braintree\",method:\"credit_card\"},braintreepaypal:{provider:\"braintree\",method:\"paypal\"},braintreeach:{provider:\"braintree\",method:\"ach\"},authorizenet:{provider:\"authorizenet\",method:\"credit_card\"},elavon:{provider:\"elavon\",method:\"credit_card\"},checkoutcom:{provider:\"checkoutcom\",method:\"credit_card\"},\"checkoutcom.credit_card\":{provider:\"checkoutcom\",method:\"credit_card\"},\"checkoutcom.card\":{provider:\"checkoutcom\",method:\"card\"},sagepay:{provider:\"sagepay\",method:\"credit_card\"},stripe:{provider:\"stripe\",method:\"credit_card\"},\"stripev3.card\":{provider:\"stripev3\",method:\"card\"},\"stripeupe.card\":{provider:\"stripeupe\",method:\"card\"},cybersource:{provider:\"cybersource\",method:\"credit_card\"},cybersourcev2:{provider:\"cybersourcev2\",method:\"credit_card\"},bnz:{provider:\"bnz\",method:\"credit_card\"},converge:{provider:\"converge\",method:\"credit_card\"},bluesnapv2:{provider:\"bluesnapv2\",method:\"credit_card\"},\"bluesnapdirect.credit_card\":{provider:\"bluesnapdirect\",method:\"credit_card\"},\"bluesnapdirect.ecp\":{provider:\"bluesnapdirect\",method:\"ecp\"},\"bluesnapdirect.sepa_direct_debit\":{provider:\"bluesnapdirect\",method:\"sepa_direct_debit\"},orbital:{provider:\"orbital\",method:\"credit_card\"},paymetric:{provider:\"paymetric\",method:\"credit_card\"},bolt:{provider:\"bolt\",method:\"credit_card\"},\"barclaycard.credit_card\":{provider:\"barclaycard\",method:\"credit_card\"},moneris:{provider:\"moneris\",method:\"credit_card\"},cba_mpgs:{provider:\"cba_mpgs\",method:\"credit_card\"},worldpayaccess:{provider:\"worldpayaccess\",method:\"credit_card\"},\"worldpayaccess.credit_card\":{provider:\"worldpayaccess\",method:\"credit_card\"},squarev2:{provider:\"squarev2\",method:\"credit_card\"},paypalcommercecreditcards:{provider:\"paypalcommerce\",method:\"credit_card\"},paypalcommerce:{provider:\"paypalcommerce\",method:\"paypal\"},bigcommerce_payments_creditcards:{provider:\"bigcommerce_payments\",method:\"credit_card\"},bigcommerce_payments:{provider:\"bigcommerce_payments\",method:\"paypal\"},tdonlinemart:{provider:\"tdonlinemart\",method:\"credit_card\"}};function Xn(e){return(0,f.pickBy)({firstName:e.firstName,lastName:e.lastName,company:e.company,address1:e.address1,address2:e.address2,city:e.city,stateOrProvince:e.stateOrProvince,countryCode:e.countryCode,postalCode:e.postalCode,phone:e.phone,customFields:e.customFields},f.identity)}const er={errors:{},statuses:{}};function tr(){const e=function(){const e=Un(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.token},e=>()=>e),t=Un(e=>e.errors.loadError,e=>()=>e),n=Un(e=>!!e.statuses.isLoading,e=>()=>e);return(0,jn.B4)((r=A)=>({getToken:e(r),getLoadError:t(r),isLoading:n(r)}))}(),t=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e,e=>()=>Hn(e(),()=>new Gn(Vn.MissingBillingAddress))),n=Un(e=>e.errors.updateError,e=>()=>e),r=Un(e=>e.errors.continueAsGuestError,e=>()=>e),i=Un(e=>e.errors.loadError,e=>()=>e),o=Un(e=>!!e.statuses.isUpdating,e=>()=>e),a=Un(e=>!!e.statuses.isContinuingAsGuest,e=>()=>e),s=Un(e=>!!e.statuses.isLoading,e=>()=>e);return(0,jn.B4)((c=z)=>({getBillingAddress:e(c),getBillingAddressOrThrow:t(c),getUpdateError:n(c),getContinueAsGuestError:r(c),getLoadError:i(c),isUpdating:o(c),isContinuingAsGuest:a(c),isLoading:s(c)}))}(),n=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e,e=>()=>Hn(e(),()=>new Gn(Vn.MissingCart))),n=Un(e=>e.errors.loadError,e=>()=>e),r=Un(e=>!!e.statuses.isLoading,e=>()=>e),i=Un(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.locale},e=>()=>e);return(0,jn.B4)((o=K)=>({getCart:e(o),getCartOrThrow:t(o),getLoadError:n(o),isLoading:r(o),getLocale:i(o)}))}(),r=function(){const e=Un(e=>e,e=>()=>e),t=Un(e=>e.statuses,e=>(0,jn.Bj)(t=>{if(t){const n=e[t];return!0===(n&&n.isInitializing)}return(0,f.some)(e,{isInitializing:!0})})),n=Un(e=>e.data,e=>(0,jn.Bj)((t,n)=>{const r=e[t];return!!r&&(n?!0===r.initializedContainers[n]:(0,f.some)(r.initializedContainers,e=>!0===e))})),r=Un(e=>e.statuses,e=>(0,jn.Bj)(t=>{if(t){const n=e[t];return!0===(n&&n.isDeinitializing)}return(0,f.some)(e,{isDeinitializing:!0})})),i=Un(e=>e.errors,e=>(0,jn.Bj)(t=>{const n=t?e[t]:(0,f.find)((0,f.values)(e),e=>!(!e||!e.initializeError));return n&&n.initializeError})),o=Un(e=>e.errors,e=>(0,jn.Bj)(t=>{const n=t?e[t]:(0,f.find)((0,f.values)(e),e=>!(!e||!e.deinitializeError));return n&&n.deinitializeError}));return(0,jn.B4)((a=te)=>({getState:e(a),isInitializing:t(a),isInitialized:n(a),isDeinitializing:r(a),getInitializeError:i(a),getDeinitializeError:o(a)}))}(),i=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e=>e.data,e=>t=>{if(!e)return;const{flashMessages:n}=e.context;return n?void 0!==t?n.filter(({type:e})=>t===e):n:void 0}),n=Un(e=>e.data,(e,{formState:t})=>t&&t.data,(e,t={customerAccount:[],shippingAddress:[],billingAddress:[]})=>()=>e?Object.assign(Object.assign({},e.storeConfig),{formFields:t}):void 0),r=Un(n,e=>()=>Hn(e(),()=>new Gn(Vn.MissingCheckoutConfig))),i=Un(e=>e.data&&e.data.context,e=>()=>e),o=Un(e=>e.meta&&e.meta.externalSource,e=>()=>e),a=Un(e=>{var t;return null===(t=e.meta)||void 0===t?void 0:t.host},e=>()=>e),s=Un(e=>{var t;return null===(t=e.meta)||void 0===t?void 0:t.locale},e=>()=>e),c=Un(e=>e.meta&&e.meta.variantIdentificationToken,e=>()=>e),u=Un(e=>e.errors.loadError,e=>()=>e),d=Un(e=>!!e.statuses.isLoading,e=>()=>e);return(0,jn.B4)((l=de,p)=>({getConfig:e(l),getFlashMessages:t(l),getStoreConfig:n(l,{formState:p}),getStoreConfigOrThrow:r(l,{formState:p}),getContextConfig:i(l),getExternalSource:o(l),getHost:a(l),getLocale:s(l),getVariantIdentificationToken:c(l),getLoadError:u(l),isLoading:d(l)}))}(),o=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e=>e.errors.loadError,e=>()=>e),n=Un(e=>!!e.statuses.isLoading,e=>()=>e);return(0,jn.B4)((r=Qe)=>({getCountries:e(r),getLoadError:t(r),isLoading:n(r)}))}(),a=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e=>e.errors.removeCouponError,e=>()=>e),n=Un(e=>e.errors.applyCouponError,e=>()=>e),r=Un(e=>!!e.statuses.isApplyingCoupon,e=>()=>e),i=Un(e=>!!e.statuses.isRemovingCoupon,e=>()=>e);return(0,jn.B4)((o=me)=>({getCoupons:e(o),getRemoveError:t(o),getApplyError:n(o),isApplying:r(o),isRemoving:i(o)}))}(),s=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e,e=>()=>Hn(e(),()=>new Gn(Vn.MissingCustomer))),n=Un(e=>e.errors.createError,e=>()=>e),r=Un(e=>!!e.statuses.isCreating,e=>()=>e),i=Un(e=>e.errors.createAddressError,e=>()=>e),o=Un(e=>!!e.statuses.isCreatingAddress,e=>()=>e);return(0,jn.B4)((a=Oe)=>({getCustomer:e(a),getCustomerOrThrow:t(a),getCreateAccountError:n(a),isCreatingCustomerAccount:r(a),getCreateAddressError:i(a),isCreatingCustomerAddress:o(a)}))}(),c=function(){const e=Un(e=>e.errors.signInMethodId,e=>e.errors.signInError,(e,t)=>n=>{if(!n||e===n)return t}),t=Un(e=>e.errors.signOutMethodId,e=>e.errors.signOutError,(e,t)=>n=>{if(!n||e===n)return t}),n=Un(e=>e.errors.executePaymentMethodCheckoutMethodId,e=>e.errors.executePaymentMethodCheckoutError,(e,t)=>n=>{if(!n||e===n)return t}),r=Un(e=>e.errors.initializeMethodId,e=>e.errors.initializeErrors,(e,t)=>n=>{if(e&&t)return n?t[n]:t[e]}),i=Un(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),o=Un(e=>e.statuses.signInMethodId,e=>e.statuses.isSigningIn,(e,t)=>n=>!(n&&e!==n||!t)),a=Un(e=>e.statuses.signOutMethodId,e=>e.statuses.isSigningOut,(e,t)=>n=>!(n&&e!==n||!t)),s=Un(e=>e.statuses.executePaymentMethodCheckoutMethodId,e=>e.statuses.isExecutingPaymentMethodCheckout,(e,t)=>n=>!(n&&e!==n||!t)),c=Un(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),u=Un(e=>e.data,e=>t=>!(!e[t]||!e[t].isInitialized)),d=Un(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return(0,jn.B4)((l=xe)=>({getSignInError:e(l),getSignOutError:t(l),getExecutePaymentMethodCheckoutError:n(l),getInitializeError:r(l),getWidgetInteractionError:i(l),isSigningIn:o(l),isSigningOut:a(l),isExecutingPaymentMethodCheckout:s(l),isInitializing:c(l),isInitialized:u(l),isWidgetInteracting:d(l)}))}(),u=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e=>e.errors.removeGiftCertificateError,e=>()=>e),n=Un(e=>e.errors.applyGiftCertificateError,e=>()=>e),r=Un(e=>!!e.statuses.isApplyingGiftCertificate,e=>()=>e),i=Un(e=>!!e.statuses.isRemovingGiftCertificate,e=>()=>e);return(0,jn.B4)((o=Se)=>({getGiftCertificates:e(o),getRemoveError:t(o),getApplyError:n(o),isApplying:r(o),isRemoving:i(o)}))}(),d=function(){const e=Un(e=>e.data,e=>t=>{if(!e)return;const n=t.gateway?`${t.gateway}.${t.id}`:t.id,r=Qn[n];return r?(0,f.filter)(e,r):[]}),t=Un(e=>e.data,(e=[])=>t=>{const n=(0,f.values)(Qn);return e.find(e=>e.bigpayToken===t&&\"card\"===e.type&&n.some(t=>(0,f.isMatch)(e,t)))}),n=Un(t,e=>t=>Hn(e(t),()=>new Gn(Vn.MissingPaymentInstrument))),r=Un(e=>e.data,e=>()=>{if(e)return(0,f.flatMap)(Qn,t=>(0,f.filter)(e,e=>(0,f.isMatch)(e,t)))}),i=Un(e=>e.meta,e=>()=>e),o=Un(e=>e.errors.loadError,e=>()=>e),a=Un(e=>e.errors.failedInstrument,e=>e.errors.deleteError,(e,t)=>n=>{if(!n||e===n)return t}),s=Un(e=>e.statuses.isLoading,e=>()=>!!e),c=Un(e=>e.statuses.deletingInstrument,e=>e.statuses.isDeleting,(e,t)=>n=>!(n&&e!==n||!t));return(0,jn.B4)((u=xt)=>({getCardInstrument:t(u),getCardInstrumentOrThrow:n(u),getInstruments:r(u),getInstrumentsByPaymentMethod:e(u),getInstrumentsMeta:i(u),getLoadError:o(u),getDeleteError:a(u),isLoading:s(u),isDeleting:c(u)}))}(),l=function(){const e=Un(e=>e.data,e=>(t=[],n)=>{const r=(0,f.find)(t,{code:n});return(e?e.shippingAddress:[]).map(e=>s(e,t,r))}),t=Un(e=>e.data,e=>(t=[],n)=>{const r=(0,f.find)(t,{code:n});return(e?e.billingAddress:[]).map(e=>s(e,t,r))}),n=Un(e=>e.data,e=>()=>e?e.customerAccount:[]),r=Un(e=>e.extraFields,e=>()=>e&&e.address.length?e.address.map($n):[]),i=Un(e=>e.extraFields,e=>()=>e&&e.order.length?e.order.map($n):[]),o=Un(e=>e.errors.loadError,e=>()=>e),a=Un(e=>!!e.statuses.isLoading,e=>()=>e);function s(e,t,n){return\"countryCode\"===e.name?function(e,t=[],n){if(!t.length)return e;const{code:r=\"\"}=n||{},i=t.map(({code:e,name:t})=>({value:e,label:t}));return Object.assign(Object.assign({},e),{options:{items:i},default:r,type:\"array\",fieldType:\"dropdown\",itemtype:\"string\"})}(e,t,n):\"stateOrProvince\"===e.name?function(e,t){const{subdivisions:n=[],requiresState:r}=t||{};if(!n.length)return Object.assign(Object.assign({},e),{required:r??!1});const i=n.map(({code:e,name:t})=>({value:e,label:t}));return Object.assign(Object.assign({},e),{name:\"stateOrProvinceCode\",options:{items:i},required:r??!0,type:\"array\",fieldType:\"dropdown\",itemtype:\"string\"})}(e,n):\"postalCode\"===e.name?function(e,t){const{hasPostalCodes:n=[]}=t||{};return void 0===n?e:Object.assign(Object.assign({},e),{required:Boolean(n)})}(e,n):e}return(0,jn.B4)((s=He)=>({getShippingAddressFields:e(s),getBillingAddressFields:t(s),getCustomerAccountFields:n(s),getAddressExtraFields:r(s),getOrderExtraFields:i(s),getLoadError:o(s),isLoading:a(s)}))}(),p=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e=>e.meta,e=>()=>e),n=Un(e=>e.data,e=>(t,n)=>n?(0,f.find)(e,{id:t,gateway:n}):(0,f.find)(e,{id:t})),r=Un(n,e=>(t,n)=>Hn(e(t,n),()=>new Gn(Vn.MissingPaymentMethod))),i=Un(e=>e.errors.loadError,e=>()=>e),o=Un(e=>e.errors.loadMethodId,e=>e.errors.loadMethodError,(e,t)=>n=>{if(!n||e===n)return t}),a=Un(e=>e.statuses.isLoading,e=>()=>!!e),s=Un(e=>e.statuses.loadMethodId,e=>e.statuses.isLoadingMethod,(e,t)=>n=>!(n&&e!==n||!t));return(0,jn.B4)((c=mt)=>({getPaymentMethods:e(c),getPaymentMethodsMeta:t(c),getPaymentMethod:n(c),getPaymentMethodOrThrow:r(c),getLoadError:i(c),getLoadMethodError:o(c),isLoading:a(c),isLoadingMethod:s(c)}))}(),h=function(){const e=Un(e=>e.errors.initializeMethodId,e=>e.errors.initializeError,(e,t)=>n=>{if(!n||e===n)return t}),t=Un(e=>e.errors.executeMethodId,e=>e.errors.executeError,(e,t)=>n=>{if(!n||e===n)return t}),n=Un(e=>e.errors.finalizeMethodId,e=>e.errors.finalizeError,(e,t)=>n=>{if(!n||e===n)return t}),r=Un(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),i=Un(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),o=Un(e=>e.data,e=>t=>{const n=t.gatewayId?`${t.methodId}.${t.gatewayId}`:t.methodId;return!(!e[n]||!e[n].isInitialized)}),a=Un(e=>e.statuses.executeMethodId,e=>e.statuses.isExecuting,(e,t)=>n=>!(n&&e!==n||!t)),s=Un(e=>e.statuses.finalizeMethodId,e=>e.statuses.isFinalizing,(e,t)=>n=>!(n&&e!==n||!t)),c=Un(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return(0,jn.B4)((u=Ct)=>({getInitializeError:e(u),getExecuteError:t(u),getFinalizeError:n(u),getWidgetInteractingError:r(u),isInitializing:i(u),isInitialized:o(u),isExecuting:a(u),isFinalizing:s(u),isWidgetInteracting:c(u)}))}(),y=function(){const e=Un(e=>e.data,e=>(t,n)=>{if(!e)return;const r=Kt($t({consignmentId:t,searchArea:n})),i=btoa(`${JSON.stringify(r)}`);return e[i]}),t=Un(e=>e.errors.loadError,e=>()=>e),n=Un(e=>!!e.statuses.isLoading,e=>()=>e);return(0,jn.B4)((r=Jt)=>({getPickupOptions:e(r),getLoadError:t(r),isLoading:n(r)}))}(),m=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e,e=>()=>Hn(e(),()=>new Gn(Vn.MissingPaymentProviderCustomer)));return(0,jn.B4)((n=Tt)=>({getPaymentProviderCustomer:e(n),getPaymentProviderCustomerOrThrow:t(n)}))}(),g=function(){const e=Un(e=>e.data,e=>t=>e[t]);return(0,jn.B4)((t=Bt)=>({getCheckout:e(t)}))}(),v=function(){const e=Un(e=>e.data,e=>()=>{const t=null==e?void 0:e.find(e=>!e.selectedPickupOption);return null==t?void 0:t.shippingAddress}),t=Un(e,e=>()=>Hn(e(),()=>new Gn(Vn.MissingShippingAddress))),n=Un(e=>e.data,e=>()=>{const t=null==e?void 0:e.filter(e=>!e.selectedPickupOption);return t?t.map(e=>e.shippingAddress):[]}),r=Un(n,e=>()=>Hn(e(),()=>new Gn(Vn.MissingShippingAddress)));return(0,jn.B4)((i=Vt)=>({getShippingAddress:e(i),getShippingAddressOrThrow:t(i),getShippingAddresses:n(i),getShippingAddressesOrThrow:r(i)}))}(),_=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e=>e.errors.loadError,e=>()=>e),n=Un(e=>e.statuses.isLoading,e=>()=>!!e);return(0,jn.B4)((r=rn)=>({getShippingCountries:e(r),getLoadError:t(r),isLoading:n(r)}))}(),b=function(){const e=Un(e=>e.errors.updateAddressMethodId,e=>e.errors.updateAddressError,(e,t)=>n=>{if(!n||e===n)return t}),t=Un(e=>e.errors.selectOptionMethodId,e=>e.errors.selectOptionError,(e,t)=>n=>{if(!n||e===n)return t}),n=Un(e=>e.errors.initializeMethodId,e=>e.errors.initializeError,(e,t)=>n=>{if(!n||e===n)return t}),r=Un(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),i=Un(e=>e.statuses.updateAddressMethodId,e=>e.statuses.isUpdatingAddress,(e,t)=>n=>!(n&&e!==n||!t)),o=Un(e=>e.statuses.selectOptionMethodId,e=>e.statuses.isSelectingOption,(e,t)=>n=>!(n&&e!==n||!t)),a=Un(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),s=Un(e=>e.data,e=>t=>!(!e[t]||!e[t].isInitialized)),c=Un(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return(0,jn.B4)((u=dn)=>({getUpdateAddressError:e(u),getSelectOptionError:t(u),getInitializeError:n(u),getWidgetInteractionError:r(u),isUpdatingAddress:i(u),isSelectingOption:o(u),isInitializing:a(u),isInitialized:s(u),isWidgetInteracting:c(u)}))}(),S=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e,e=>()=>Hn(e(),()=>new Gn(Vn.MissingConsignments))),n=Un(e=>e.data,e=>t=>{if(e&&e.length)return(0,f.find)(e,{id:t})}),r=Un(e=>e.data,e=>t=>{if(e&&e.length)return(0,f.find)(e,e=>{return n=e.shippingAddress,r=t,(0,f.isEqual)(Xn(n),Xn(r));var n,r})}),i=Un(e=>e.data,e=>()=>{if(e&&e.length)return e[0].selectedShippingOption}),o=Un(e=>e.errors.loadError,e=>()=>e),a=Un(e=>e.errors.createError,e=>()=>e),s=Un(e=>e.errors.loadShippingOptionsError,e=>()=>e),c=Un(e,(e,{cart:t})=>t.getCart,(e,t)=>()=>{const n=t();if(!n)return[];const r=(e()||[]).reduce((e,t)=>e.concat(t.lineItemIds),[]);return(n.lineItems.physicalItems||[]).filter(e=>r.indexOf(e.id)<0)}),u=Un(e=>e.errors.updateError,e=>t=>t?e[t]:(0,f.find)(e)),d=Un(e=>e.errors.deleteError,e=>t=>t?e[t]:(0,f.find)(e)),l=Un(r,u,a,(e,t,n)=>r=>{const i=e(r);return i?t(i.id):n()}),p=Un(e=>e.errors.updateShippingOptionError,e=>t=>t?e[t]:(0,f.find)(e)),h=Un(e=>e.statuses.isLoading,e=>()=>!0===e),y=Un(e=>e.statuses.isLoadingShippingOptions,e=>()=>!0===e),m=Un(e=>e.statuses.isCreating,e=>()=>!0===e),g=Un(e=>e.statuses.isUpdating,e=>t=>t?!0===e[t]:!0===(0,f.find)(e)),v=Un(e=>e.statuses.isDeleting,e=>t=>t?!0===e[t]:!0===(0,f.find)(e)),_=Un(r,g,m,(e,t,n)=>r=>{const i=e(r);return i?t(i.id):n()}),b=Un(e=>e.statuses.isUpdatingShippingOption,e=>t=>t?!0===e[t]:!0===(0,f.find)(e));return(0,jn.B4)((f=Vt,S)=>({getConsignments:e(f),getConsignmentsOrThrow:t(f),getConsignmentById:n(f),getConsignmentByAddress:r(f),getShippingOption:i(f),getLoadError:o(f),getCreateError:a(f),getLoadShippingOptionsError:s(f),getUnassignedItems:c(f,{cart:S}),getUpdateError:u(f),getDeleteError:d(f),getItemAssignmentError:l(f),getUpdateShippingOptionError:p(f),isLoading:h(f),isLoadingShippingOptions:y(f),isCreating:m(f),isUpdating:g(f),isDeleting:v(f),isAssigningItems:_(f),isUpdatingShippingOption:b(f)}))}(),w=function(){const e=Un(e=>e.data,(e,{billingAddress:t})=>t.getBillingAddress,(e,{cart:t})=>t.getCart,(e,{customer:t})=>t.getCustomer,(e,{consignments:t})=>t.getConsignments,(e,{coupons:t})=>t.getCoupons,(e,{giftCertificates:t})=>t.getGiftCertificates,(e,t,n,r,i,o,a)=>()=>{const s=t(),c=n(),u=r(),d=i()||[],l=o()||[],p=a()||[];if(e&&c&&u)return Object.assign(Object.assign({},e),{billingAddress:s,cart:c,customer:u,consignments:d,coupons:l,giftCertificates:p})}),t=Un(e,e=>()=>Hn(e(),()=>new Gn(Vn.MissingCheckout))),n=Un(e,e=>t=>{const n=e();if(!n)return;const r=n.grandTotal||0,i=n.customer.storeCredit||0;return t?Math.max(r-i,0):n.outstandingBalance}),r=Un(e=>e.errors.loadError,e=>()=>e),i=Un(e=>e.errors.updateError,e=>()=>e),o=Un(e=>e.statuses.isExecutingSpamCheck,e=>()=>!0===e),a=Un(e=>e.statuses.isLoading,e=>()=>!0===e),s=Un(e=>e.statuses.isUpdating,e=>()=>!0===e);return(0,jn.B4)((c=Rn,u,d,l,p,h,f)=>({getCheckout:e(c,{billingAddress:u,cart:d,consignments:l,coupons:p,customer:h,giftCertificates:f}),getCheckoutOrThrow:t(c,{billingAddress:u,cart:d,consignments:l,coupons:p,customer:h,giftCertificates:f}),getOutstandingBalance:n(c,{billingAddress:u,cart:d,consignments:l,coupons:p,customer:h,giftCertificates:f}),getLoadError:r(c),getUpdateError:i(c),isExecutingSpamCheck:o(c),isLoading:a(c),isUpdating:s(c)}))}(),C=function(){const e=Un(e=>e.data,(e,{billingAddress:t})=>t.getOrderBillingAddress(),(e,{coupons:t})=>t.getCoupons(),(e,t,n=[])=>()=>{if(e&&t)return Object.assign(Object.assign({},e),{billingAddress:t,coupons:n})}),t=Un(e,e=>()=>Hn(e(),()=>new Gn(Vn.MissingOrder))),n=Un(e=>e.meta,e=>()=>e),r=Un(e=>e.errors.loadError,e=>()=>e),i=Un(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.payments},(e=[])=>t=>{const n=e.find(({providerId:e})=>e===t);return null==n?void 0:n.paymentId}),o=Un(e=>!!e.statuses.isLoading,e=>()=>e);return(0,jn.B4)((a=rt,s,c)=>({getOrder:e(a,{billingAddress:s,coupons:c}),getOrderOrThrow:t(a,{billingAddress:s,coupons:c}),getOrderMeta:n(a),getLoadError:r(a),getPaymentId:i(a),isLoading:o(a)}))}(),I=function(){const e=Un(e=>e.data,e=>()=>e);return(0,jn.B4)((t=ut)=>({getOrderBillingAddress:e(t)}))}(),E=function(){const e=Un(({order:e})=>e.getOrderMeta,e=>()=>{const t=e();return t&&t.payment}),t=Un(({order:e})=>e.getOrder,e=>()=>{const t=e();return(0,f.find)(t&&t.payments,({providerId:e})=>\"giftcertificate\"!==e&&\"storecredit\"!==e)}),n=Un(({checkout:e})=>e.getCheckout,e=>()=>{const t=e();return(0,f.find)(t&&t.payments,({providerType:e})=>e===Kn)}),r=Un(e,n,t,(e,t,n)=>()=>{const r=e();if(r&&r.id)return{providerId:r.id,gatewayId:r.gateway};const i=t()||n();return i&&i.providerId?{providerId:i.providerId,gatewayId:i.gatewayId}:void 0}),i=Un(r,e=>()=>Hn(e(),()=>new Gn(Vn.MissingPaymentId))),o=Un(e,n,t,(e,t,n)=>()=>{const r=e();if(r&&r.status)return r.status.replace(\"PAYMENT_STATUS_\",\"\");const i=t()||n();return i?i.detail.step:void 0}),a=Un(o,e=>()=>Hn(e(),()=>new Gn(Vn.MissingPaymentStatus))),s=Un(({order:e})=>e.getOrderMeta,e=>()=>{const t=e();return t&&t.token}),c=Un(s,e=>()=>Hn(e(),()=>new Gn(Vn.MissingPaymentToken))),u=Un(e,e=>()=>{const t=e();return t&&t.redirectUrl}),d=Un(u,e=>()=>Hn(e(),()=>new Gn(Vn.MissingPaymentRedirectUrl))),l=Un(({checkout:e})=>e.getOutstandingBalance,e=>(t=!1)=>{const n=e(t);return!!n&&n>0}),p=Un(o,e=>t=>!(!t||!t.nonce)||e()===Zn||e()===Jn);return(0,jn.B4)((e,t)=>({getPaymentId:r({checkout:e,order:t}),getPaymentIdOrThrow:i({checkout:e,order:t}),getPaymentStatus:o({checkout:e,order:t}),getPaymentStatusOrThrow:a({checkout:e,order:t}),getPaymentToken:s({checkout:e,order:t}),getPaymentTokenOrThrow:c({checkout:e,order:t}),getPaymentRedirectUrl:u({checkout:e,order:t}),getPaymentRedirectUrlOrThrow:d({checkout:e,order:t}),isPaymentDataRequired:l({checkout:e,order:t}),isPaymentDataSubmitted:p({checkout:e,order:t})}))}(),P=function(){const e=Un(e=>e.errors.applyError,e=>()=>e),t=Un(e=>!!e.statuses.isApplying,e=>()=>e);return(0,jn.B4)((n=er)=>({getApplyError:e(n),isApplying:t(n)}))}(),O=function(){const e=Un(e=>e.errors.updateError,e=>()=>e),t=Un(e=>!!e.statuses.isUpdating,e=>()=>e);return(0,jn.B4)((n=Pn)=>({getUpdateError:e(n),isUpdating:t(n)}))}(),T=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e=>e.errors.sendError,e=>()=>e),n=Un(e=>!!e.statuses.isSending,e=>()=>e);return(0,jn.B4)((r=mn)=>({getEmail:e(r),getSendError:t(r),isSending:n(r)}))}(),k=function(){const e=Un(e=>e.data,e=>()=>e),t=Un(e=>e.data,e=>t=>null==e?void 0:e.find(e=>e.region===t)),n=Un(e=>e.errors.loadError,e=>()=>e),r=Un(e=>e.statuses.isLoading,e=>()=>!!e);return(0,jn.B4)((i=Fe)=>({getExtensions:e(i),getExtensionByRegion:t(i),getLoadError:n(i),isLoading:r(i)}))}();return(f,A={})=>{const R=e(f.b2bToken),M=t(f.billingAddress),x=n(f.cart),N=r(f.checkoutButton),D=o(f.countries),j=a(f.coupons),L=s(f.customer),z=c(f.customerStrategies),F=k(f.extensions),B=l(f.formFields),U=u(f.giftCertificates),q=d(f.instruments),V=I(f.orderBillingAddress),G=p(f.paymentMethods),H=m(f.paymentProviderCustomer),Y=h(f.paymentStrategies),W=y(f.pickupOptions),$=g(f.remoteCheckout),K=v(f.consignments),Z=_(f.shippingCountries),J=b(f.shippingStrategies),Q=O(f.subscriptions),X=P(f.storeCredit),ee=T(f.signInEmail),te=S(f.consignments,x),ne=w(f.checkout,M,x,te,j,L,U),re=C(f.order,V,j),ie=E(ne,re),oe={b2bToken:R,billingAddress:M,cart:x,checkout:ne,checkoutButton:N,config:i(f.config,f.formFields),consignments:te,countries:D,coupons:j,customer:L,customerStrategies:z,extensions:F,form:B,giftCertificates:U,instruments:q,order:re,orderBillingAddress:V,payment:ie,paymentMethods:G,paymentProviderCustomer:H,paymentStrategies:Y,pickupOptions:W,remoteCheckout:$,shippingAddress:K,shippingCountries:Z,shippingStrategies:J,signInEmail:ee,subscriptions:Q,storeCredit:X};return A.shouldWarnMutation?function(e){return Object.keys(e).reduce((t,n)=>(t[n]=Yn(e[n]),t),{})}(oe):oe}}function nr(e={},t){const n=(a=function(){const e=new _;return[\"catalog_only\",\"empty_cart\",\"invalid_order_id\",\"invalid_order_token\",\"missing_order_token\",\"missing_provider_token\",\"missing_shipping_method\",\"order_completion_error\",\"order_could_not_be_finalized_error\",\"order_create_failed\",\"provider_fatal_error\",\"provider_setup_error\",\"stock_too_low\"].forEach(t=>{e.register(t,(e,t)=>new h(e,t))}),e.register(\"invalid_payment_provider\",e=>new u(e)),e.register(\"payment_config_not_found\",e=>new u(e)),e}(),e=>(0,w.H)(e).pipe((0,C.W)(e=>{if(e instanceof Error||e.payload instanceof Error)throw e;if((t=e.payload)&&\"object\"==typeof t&&[\"body\",\"headers\",\"status\",\"statusText\"].every(e=>Object.prototype.hasOwnProperty.call(t,e))){const t=e.payload.body&&e.payload.body.detail;throw Object.assign(Object.assign({},e),{payload:a.createError(e.payload,t)})}var t;throw e}))),r=tr(),i=(0,o.HY)({b2bToken:T,billingAddress:F,cart:Z,checkout:Mn,checkoutButton:oe,config:le,consignments:Gt,countries:Xe,coupons:ge,customer:Ae,customerStrategies:Ne,extensions:Be,formFields:Ye,giftCertificates:we,instruments:Nt,orderBillingAddress:dt,order:it,payment:ft,paymentMethods:gt,paymentStrategies:It,pickupOptions:Qt,paymentProviderCustomer:kt,remoteCheckout:Ut,shippingCountries:on,shippingStrategies:ln,signInEmail:gn,subscriptions:On,storeCredit:Cn});var a;return(0,o.iN)(i,e,Object.assign({actionTransformer:n,stateTransformer:e=>r(e)},t))}var rr,ir,or=n(315);!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(rr||(rr={}));class ar extends a{constructor(e){super(function(e){switch(e){case rr.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case rr.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case rr.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case rr.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case rr.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case rr.MissingCheckoutConfig:case rr.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case rr.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case rr.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case rr.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case rr.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case rr.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case rr.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function sr(e){return t=e.lineItems.physicalItems.filter(e=>!e.addedByPromotion),(0,f.reduce)(t,(e,t)=>e+t.quantity,0);var t}function cr(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(ir||(ir={}));class ur extends a{constructor(e){super(function(e){switch(e){case ir.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case ir.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case ir.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case ir.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const dr={de:\"eu\",jp:\"fe\",uk:\"eu\",us:\"na\"};var lr,pr,hr,fr,yr,mr;!function(e){e.en_US=\"en_US\",e.en_GB=\"en_GB\",e.de_DE=\"de_DE\",e.fr_FR=\"fr_FR\",e.it_IT=\"it_IT\",e.es_ES=\"es_ES\",e.ja_JP=\"ja_JP\"}(lr||(lr={})),function(e){e.Home=\"Home\",e.Product=\"Product\",e.Cart=\"Cart\",e.Checkout=\"Checkout\",e.Other=\"Other\"}(pr||(pr={})),function(e){e.USD=\"USD\",e.EUR=\"EUR\",e.GBP=\"GBP\",e.JPY=\"JPY\"}(hr||(hr={})),function(e){e.PayAndShip=\"PayAndShip\",e.PayOnly=\"PayOnly\"}(fr||(fr={})),function(e){e.Gold=\"Gold\",e.LightGray=\"LightGray\",e.DarkGray=\"DarkGray\"}(yr||(yr={})),function(e){e.C0001=\"C0001\"}(mr||(mr={}));var gr=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class vr{constructor(e){this.amazonPayV2ScriptLoader=e}initialize(e){return gr(this,void 0,void 0,function*(){this.amazonPayV2SDK=yield this.amazonPayV2ScriptLoader.load(e),this.buttonParentContainer=this.buttonParentContainer||this.createAmazonPayButtonParentContainer()})}deinitialize(){var e;return this.amazonPayV2Button=void 0,null===(e=this.buttonParentContainer)||void 0===e||e.remove(),this.buttonParentContainer=void 0,this.amazonPayV2SDK=void 0,Promise.resolve()}bindButton(e,t,n){this.getAmazonPayV2SDK().Pay.bindChangeAction(`#${e}`,{amazonCheckoutSessionId:t,changeAction:n})}createButton(e,t){this.amazonPayV2Button=this.getAmazonPayV2SDK().Pay.renderButton(`#${e}`,t)}prepareCheckout(e){const t=this.prepareRequestConfig(e);this.getAmazonPayV2Button().onClick(()=>{this.getAmazonPayV2Button().initCheckout(t)})}prepareCheckoutWithCreationRequestConfig(e){this.getAmazonPayV2Button().onClick(()=>gr(this,void 0,void 0,function*(){const t=yield e();if(t){const e=this.prepareRequestConfig(t.createCheckoutSessionConfig,t.estimatedOrderAmount,t.productType);this.getAmazonPayV2Button().initCheckout(e)}}))}signout(){return gr(this,void 0,void 0,function*(){return this.amazonPayV2SDK&&this.amazonPayV2SDK.Pay.signout(),Promise.resolve()})}renderAmazonPayButton({buttonColor:e,checkoutState:t,containerId:n,decoupleCheckoutInitiation:r=!1,methodId:i,options:o,placement:a,isButtonMicroTextDisabled:s=!1}){const c=document.querySelector(`#${n}`);if(!c)return;const{id:u}=c.appendChild(this.getButtonParentContainer());o&&s&&(o.design=mr.C0001);const d=null!=o?o:this.getAmazonPayV2ButtonOptions(t,i,a,r,e);return this.createButton(u,d),this.getButtonParentContainer()}updateBuyNowFlowFlag(e){this.isBuyNowFlow=Boolean(e)}isPh4Enabled(e,t){const n=!!e[\"PROJECT-3483.amazon_pay_ph4\"],r=!!e[\"INT-6885.amazon_pay_ph4_us_only\"];return n&&r?\"US\"===t:n}prepareRequestConfig(e,t,n){const{publicKeyId:r}=e,i=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"publicKeyId\"]);return Object.assign(Object.assign({createCheckoutSessionConfig:this.isEnvironmentSpecific(r)?i:e},t&&{estimatedOrderAmount:t}),n&&{productType:n})}createAmazonPayButtonParentContainer(){const e=Math.random().toString(16).substr(-4),t=document.createElement(\"div\");return t.id=`amazonpay_button_parent_container_${e}`,t}getAmazonPayV2ButtonOptions(e,t,n,r=!1,i=yr.Gold){var o;const{getCart:a,getCheckout:s,getStoreConfigOrThrow:c,getPaymentMethodOrThrow:u}=this.getCheckoutState(e),{config:{merchantId:d,testMode:l},initializationData:p}=u(t);if(!p)throw new ar(rr.MissingPaymentMethod);const{checkoutLanguage:h,checkoutSessionMethod:f,createCheckoutSessionConfig:y,extractAmazonCheckoutSessionId:m,ledgerCurrency:g,publicKeyId:v=\"\",isButtonMicroTextDisabled:_}=p;if(!d||!g)throw new ar(rr.MissingPaymentMethod);const b=Object.assign({merchantId:d,ledgerCurrency:g,checkoutLanguage:h,placement:n,buttonColor:i},_?{design:mr.C0001}:{});if(this.isBuyNowFlow)return Object.assign(Object.assign({},b),{sandbox:!!l});const S=a();b.productType=S&&0===sr(S)?fr.PayOnly:fr.PayAndShip;const{checkoutSettings:{features:w},storeProfile:{shopPath:C,storeCountryCode:I}}=c();if(this.isPh4Enabled(w,I)){if(!y)throw new ar(rr.MissingPaymentMethod);const e=null===(o=s())||void 0===o?void 0:o.outstandingBalance.toString(),t=null==S?void 0:S.currency.code,n=Object.assign({},b);let i;return this.isEnvironmentSpecific(v)?(n.publicKeyId=v,i=y):(n.sandbox=!!l,i=Object.assign(Object.assign({},y),{publicKeyId:v})),r||(n.createCheckoutSessionConfig=i),e&&t&&(n.estimatedOrderAmount={amount:e,currencyCode:t}),n}const E={method:f,url:`${C}/remote-checkout/${t}/payment-session`,extractAmazonCheckoutSessionId:m};return Object.assign(Object.assign({},b),{createCheckoutSession:E,sandbox:!!l})}isEnvironmentSpecific(e){return/^(SANDBOX|LIVE)/.test(e)}getAmazonPayV2SDK(){return this.getOrThrow(this.amazonPayV2SDK)}getButtonParentContainer(){return this.getOrThrow(this.buttonParentContainer)}getAmazonPayV2Button(){return this.getOrThrow(this.amazonPayV2Button)}getOrThrow(e){return cr(e,()=>new ur(ir.PaymentNotInitialized))}getCheckoutState(e){return\"object\"==typeof(t=e)&&null!==t&&\"cart\"in t&&\"checkout\"in t&&\"config\"in t&&\"paymentMethods\"in t?{getCart:e.cart.getCart,getCheckout:e.checkout.getCheckout,getStoreConfigOrThrow:e.config.getStoreConfigOrThrow,getPaymentMethodOrThrow:t=>e.paymentMethods.getPaymentMethodOrThrow(t)}:e;var t}}class _r extends a{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class br{constructor(e,t=window){this.scriptLoader=e,this.windowWithAmazonPay=t}load(e){return t=this,n=void 0,i=function*(){const{initializationData:t}=e,n=(null==t?void 0:t.region)||\"us\",r=dr[n];if(yield this.scriptLoader.loadScript(`https://static-${r}.payments-amazon.com/checkout.js`),!this.windowWithAmazonPay.amazon)throw new _r;return this.windowWithAmazonPay.amazon},new((r=void 0)||(r=Promise))(function(e,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((i=i.apply(t,n||[])).next())});var t,n,r,i}}function Sr(e,t){return Object.assign(e,{resolveIds:t})}class wr extends a{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class Cr extends a{constructor(e){super(e||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}class Ir extends a{constructor(e){super(e||\"An unexpected error has occurred during config creation process. Please try again later.\"),this.name=\"AmazonPayV2ConfigCreationError\",this.type=\"amazon_pay_v2_config_creation_error\"}}function Er(e){return e instanceof Object&&\"buyNowInitializeOptions\"in e}var Pr=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Or{constructor(e,t,n){this.paymentIntegrationService=e,this.amazonPayV2PaymentProcessor=t,this.amazonPayV2ConfigRequestSender=n}initialize(e){var t;return Pr(this,void 0,void 0,function*(){const{methodId:n,containerId:r,amazonpay:i}=e,{buttonColor:o}=i||{};if(!n||!r)throw new wr('Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.');const{getPaymentMethodOrThrow:a}=this.paymentIntegrationService.getState(),s=a(n),{initializationData:c}=s;yield this.amazonPayV2PaymentProcessor.initialize(s),i||(yield this.paymentIntegrationService.loadDefaultCheckout());const u=Er(i)?void 0:i;Er(i)&&\"function\"==typeof(null===(t=i.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody)&&(this._buyNowInitializeOptions=i.buyNowInitializeOptions,this.amazonPayV2PaymentProcessor.updateBuyNowFlowFlag(!0)),this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:this.paymentIntegrationService.getState(),containerId:r,methodId:n,options:u,placement:pr.Cart,buttonColor:o,isButtonMicroTextDisabled:null==c?void 0:c.isButtonMicroTextDisabled}),this._buyNowInitializeOptions&&this.amazonPayV2PaymentProcessor.prepareCheckoutWithCreationRequestConfig(this._getCheckoutCreationRequestConfig.bind(this))})}deinitialize(){return this.amazonPayV2PaymentProcessor.deinitialize()}_createBuyNowCartOrThrow(){var e,t;return Pr(this,void 0,void 0,function*(){const n=null===(t=null===(e=this._buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody)||void 0===t?void 0:t.call(e);if(!n)throw new ar(rr.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(n)}catch(e){throw new Cr}})}_createCheckoutConfig(e){return Pr(this,void 0,void 0,function*(){try{const t=(yield this.amazonPayV2ConfigRequestSender.createCheckoutConfig(e)).body,{payload:n,public_key:r}=t,i=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(t,[\"payload\",\"public_key\"]);return Object.assign({payloadJSON:n,publicKeyId:r},i)}catch(e){throw new Ir}})}_getCheckoutCreationRequestConfig(){return Pr(this,void 0,void 0,function*(){const e=yield this._createBuyNowCartOrThrow(),t={amount:String(e.baseAmount),currencyCode:e.currency.code};return{createCheckoutSessionConfig:yield this._createCheckoutConfig(e.id),estimatedOrderAmount:t,productType:0===sr(e)?fr.PayOnly:fr.PayAndShip}})}}const Ar=\"This API endpoint is for internal use only and may change in the future\";var Tr;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(Tr||(Tr={}));const kr=Tr,Rr={\"X-Checkout-SDK-Version\":\"1.916.1\"};class Mr{constructor(e){this._requestSender=e}createCheckoutConfig(e){const t={cartId:e},n=Object.assign({\"X-API-INTERNAL\":Ar,\"Content-Type\":kr.Json},Rr);return this._requestSender.post(\"/api/storefront/payment/amazonpay\",{headers:n,body:t})}}const xr=Sr(e=>{const n=(0,t.createRequestSender)(),r=new Mr(n),i=new vr(new br((0,or.vQ)()));return new Or(e,i,r)},[{id:\"amazonpay\"}]);function Nr(e,t,n=!0){var r;return null!==(r=e[t])&&void 0!==r?r:n}const Dr=\"3.128.0\",jr=\"3.123.2\",Lr=\"3.106.0\";class zr{constructor(e){this.paymentIntegrationService=e,this.braintreeWindow=window}getSDKVersion(){const e=this.paymentIntegrationService.getState().getStoreConfig(),t=(null==e?void 0:e.checkoutSettings.features)||{};return this.getPreloadedSDKVersion()||(Nr(t,\"PAYPAL-5809.braintree_hosted_fields_fix_version\")?Dr:Nr(t,\"PAYPAL-5636.update_braintree_sdk_version\")?jr:Lr)}getPreloadedSDKVersion(){const e=this.braintreeWindow.braintree;if(e){const t=(0,f.find)(Object.values(e),e=>!!e.VERSION);return null==t?void 0:t.VERSION}}}class Fr extends a{constructor(e){super(e||\"Unsupported browser error\"),this.name=\"UnsupportedBrowserError\",this.type=\"unsupported_browser\"}}var Br,Ur,qr,Vr,Gr,Hr,Yr;function Wr(e){return Boolean(\"object\"==typeof e&&null!==e&&(\"type\"in e||\"message\"in e||\"code\"in e))}!function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(Br||(Br={})),function(e){e.Completed=\"COMPLETED\",e.Pending=\"PENDING\",e.Failed=\"FAILED\"}(Ur||(Ur={})),function(e){e.TRUSTLY=\"trustly\"}(qr||(qr={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"cancelled\",e.UNRECOGNIZED=\"unrecognized\"}(Vr||(Vr={})),function(e){e.Customer=\"CUSTOMER\",e.Merchant=\"MERCHANT\",e.Network=\"NETWORK\",e.Internal=\"INTERNAL\",e.Unknown=\"UNKNOWN\"}(Gr||(Gr={})),function(e){e.KountNotEnabled=\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"}(Hr||(Hr={})),function(e){e.Visa=\"visa\",e.Mastercard=\"mastercard\",e.AmericanExpress=\"american-express\",e.DinersClub=\"diners-club\",e.Discover=\"discover\",e.Jcb=\"jcb\",e.UnionPay=\"union-pay\",e.Maestro=\"maestro\",e.Elo=\"elo\",e.Mir=\"mir\",e.Hiper=\"hiper\",e.Hipercard=\"hipercard\"}(Yr||(Yr={}));var $r,Kr,Zr,Jr=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Qr{constructor(e){this.braintreeScriptLoader=e}initialize(e){this.setClientToken(e)}deinitialize(){return Jr(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollector),this.dataCollector=void 0})}getClient(){return Jr(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=yield t.create({authorization:e})}return this.client})}getDataCollectorOrThrow(e){return Jr(this,void 0,void 0,function*(){const t={deviceData:void 0,teardown:()=>Promise.resolve()};if(!this.dataCollector)try{const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadDataCollector(),r=Object.assign({client:t,kount:!0},e);this.dataCollector=yield n.create(r)}catch(e){if(Wr(e)&&e.code===Hr.KountNotEnabled)return t;throw e}return this.dataCollector})}getBraintreeGooglePayment(){return Jr(this,void 0,void 0,function*(){if(!this.googlePayment){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadGooglePayment()]);this.googlePayment=yield t.create({client:e})}return this.googlePayment})}getBraintreeThreeDS(){return Jr(this,void 0,void 0,function*(){if(!this.threeDS){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]);this.threeDS=yield t.create({client:e,version:2})}return this.threeDS})}getBraintreeLocalPayment(e){return Jr(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment){const[t,n]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadLocalPayment()]);this.braintreeLocalPayment=yield new Promise((r,i)=>{n.create({client:t,merchantAccountId:e},(e,t)=>{e&&i(e),r(t)})})}return this.braintreeLocalPayment})}getUsBankAccount(){return Jr(this,void 0,void 0,function*(){if(!this.usBankAccount){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadUsBankAccount();this.usBankAccount=yield t.create({client:e})}return this.usBankAccount})}getBraintreeVisaCheckout(){return this.visaCheckout||(this.visaCheckout=Promise.all([this.getClient(),this.braintreeScriptLoader.loadVisaCheckout()]).then(([e,t])=>t.create({client:e}))),this.visaCheckout}getVisaCheckoutSdk(e){return Jr(this,void 0,void 0,function*(){return this.visaCheckoutSDK||(this.visaCheckoutSDK=yield this.braintreeScriptLoader.loadVisaCheckoutSdk(e)),this.visaCheckoutSDK})}getVenmoCheckoutOrThrow(){return Jr(this,void 0,void 0,function*(){if(!this.braintreeVenmo){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadVenmoCheckout(),n={client:e,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},r=yield t.create(n);if(!r.isBrowserSupported())throw new Fr;this.braintreeVenmo=r}return this.braintreeVenmo})}setClientToken(e){this.clientToken=e}getClientTokenOrThrow(){if(!this.clientToken)throw new ur(ir.PaymentNotInitialized);return this.clientToken}teardownModule(e){return e?e.teardown():Promise.resolve()}}!function(e){e.Sandbox=\"sandbox\",e.Production=\"production\"}($r||($r={})),function(e){e.Client=\"client\",e.DataCollector=\"dataCollector\",e.Fastlane=\"fastlane\",e.GooglePayment=\"googlePayment\",e.HostedFields=\"hostedFields\",e.LocalPayment=\"localPayment\",e.Paypal=\"paypal\",e.PaypalCheckout=\"paypalCheckout\",e.ThreeDSecure=\"threeDSecure\",e.UsBankAccount=\"usBankAccount\",e.Venmo=\"venmo\",e.VisaCheckout=\"visaCheckout\"}(Kr||(Kr={})),function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\"}(Zr||(Zr={}));const Xr={[Lr]:{[Kr.Client]:\"sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt\",[Kr.PaypalCheckout]:\"sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O\",[Kr.Paypal]:\"sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+\",[Kr.LocalPayment]:\"sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT\",[Kr.DataCollector]:\"sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV\",[Kr.UsBankAccount]:\"sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ\",[Kr.GooglePayment]:\"sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe\",[Kr.ThreeDSecure]:\"sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB\",[Kr.VisaCheckout]:\"sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT\",[Kr.Venmo]:\"sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov\",[Kr.HostedFields]:\"sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy\",[Kr.Fastlane]:\"sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa\"},[jr]:{[Kr.Client]:\"sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO\",[Kr.PaypalCheckout]:\"sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/\",[Kr.Paypal]:\"sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt\",[Kr.LocalPayment]:\"sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH\",[Kr.DataCollector]:\"sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO\",[Kr.UsBankAccount]:\"sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW\",[Kr.GooglePayment]:\"sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO\",[Kr.ThreeDSecure]:\"sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym\",[Kr.VisaCheckout]:\"sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS\",[Kr.Venmo]:\"sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU\",[Kr.HostedFields]:\"sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P\",[Kr.Fastlane]:\"sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y\"},[Dr]:{[Kr.Client]:\"sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq\",[Kr.PaypalCheckout]:\"sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh\",[Kr.Paypal]:\"sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH\",[Kr.LocalPayment]:\"sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC\",[Kr.DataCollector]:\"sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc\",[Kr.UsBankAccount]:\"sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F\",[Kr.GooglePayment]:\"sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i\",[Kr.ThreeDSecure]:\"sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D\",[Kr.VisaCheckout]:\"sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv\",[Kr.Venmo]:\"sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz\",[Kr.HostedFields]:\"sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z\",[Kr.Fastlane]:\"sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr\"}};var ei,ti=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class ni{constructor(e,t,n){this.scriptLoader=e,this.braintreeHostWindow=t,this.braintreeSDKVersionManager=n}loadClient(){return ti(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Kr.Client,\"client.min.js\")})}loadFastlane(){return ti(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Kr.Fastlane,\"fastlane.min.js\")})}loadPaypalCheckout(){return ti(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Kr.PaypalCheckout,\"paypal-checkout.min.js\")})}loadPaypal(){return ti(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Kr.Paypal,\"paypal.min.js\")})}loadLocalPayment(){return ti(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Kr.LocalPayment,\"local-payment.min.js\")})}loadDataCollector(){return ti(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Kr.DataCollector,\"data-collector.min.js\")})}loadUsBankAccount(){return ti(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Kr.UsBankAccount,\"us-bank-account.min.js\")})}loadGooglePayment(){return ti(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Kr.GooglePayment,\"google-payment.min.js\")})}load3DS(){return ti(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Kr.ThreeDSecure,\"three-d-secure.min.js\")})}loadVisaCheckout(){return this.loadBraintreeModuleOrThrow(Kr.VisaCheckout,\"visa-checkout.min.js\")}loadVenmoCheckout(){return this.loadBraintreeModuleOrThrow(Kr.Venmo,\"venmo.min.js\")}loadHostedFields(){return ti(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Kr.HostedFields,\"hosted-fields.min.js\")})}loadVisaCheckoutSdk(e){return ti(this,void 0,void 0,function*(){if(this.braintreeHostWindow.V)return this.braintreeHostWindow.V;const t=e?\"sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm\":\"sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6\";return this.scriptLoader.loadScript(`//${e?\"sandbox-\":\"\"}assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,{async:!0,attributes:{integrity:t,crossorigin:\"anonymous\"}}).then(()=>{if(!this.braintreeHostWindow.V)throw new _r;return this.braintreeHostWindow.V})})}loadBraintreeModuleOrThrow(e,t){return ti(this,void 0,void 0,function*(){let n=this.getBraintreeModule(e);if(n)return n;const r=this.braintreeSDKVersionManager.getSDKVersion(),i=`//js.braintreegateway.com/web/${r}/js/${t}`,o=r in Xr?this.getIntegrityValuesByModuleName(e,r):void 0;if(yield this.scriptLoader.loadScript(i,o?{async:!0,attributes:{integrity:o,crossorigin:\"anonymous\"}}:void 0),n=this.getBraintreeModule(e),!n)throw new _r;return n})}getBraintreeModule(e){var t;return null===(t=this.braintreeHostWindow.braintree)||void 0===t?void 0:t[e]}getIntegrityValuesByModuleName(e,t){const n=Xr[t][e];if(!n)throw new Error(\"Unexpected fileName value\");return n}}class ri extends a{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}!function(e){e.BRAINTREE=\"braintree\",e.BRAINTREE_FASTLANE=\"braintreeacceleratedcheckout\"}(ei||(ei={}));var ii,oi,ai=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};!function(e){e.Subtotal=\"Subtotal\",e.Shipping=\"Shipping\"}(ii||(ii={})),function(e){e.Black=\"black\",e.White=\"white\",e.WhiteBorder=\"white-border\"}(oi||(oi={}));class si{constructor(e,t,n,r,i){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=n,this._braintreeSdk=r,this._applePayScriptLoader=i,this._onAuthorizeCallback=f.noop,this._subTotalLabel=ii.Subtotal,this._shippingLabel=ii.Shipping}initialize(e){var t,n;return ai(this,void 0,void 0,function*(){const{methodId:r,containerId:i,applepay:o}=e;if(!r||!o)throw new ar(rr.MissingPaymentMethod);yield this._applePayScriptLoader.loadSdk();const{onPaymentAuthorize:a,buyNowInitializeOptions:s,requiresShipping:c}=o;this._requiresShipping=c,this._buyNowInitializeOptions=s,this._onAuthorizeCallback=a,s||(yield this._paymentIntegrationService.loadDefaultCheckout()),yield this._paymentIntegrationService.loadPaymentMethod(r);const u=this._paymentIntegrationService.getState();return this._paymentMethod=u.getPaymentMethodOrThrow(r),u.getCart()&&(yield this._paymentIntegrationService.verifyCheckoutSpamProtection()),(null===(t=this._paymentMethod.initializationData)||void 0===t?void 0:t.gateway)===ei.BRAINTREE&&this._paymentMethod.clientToken&&this._braintreeSdk.initialize(this._paymentMethod.clientToken),this._applePayButton=this._createButton(i,null===(n=this._paymentMethod.initializationData)||void 0===n?void 0:n.styleOption),this._applePayButton.addEventListener(\"click\",this._handleWalletButtonClick.bind(this)),Promise.resolve()})}deinitialize(){return Promise.resolve()}_createButton(e,t){const n=document.getElementById(e);if(!n)throw new wr(\"Unable to create wallet button without valid container ID.\");const r=this._createApplePayButtonElement(t);return n.appendChild(r),r}_createApplePayButtonElement(e){const t=document.createElement(\"apple-pay-button\");return t.setAttribute(\"buttonstyle\",(e=>{switch(e){case oi.White:return\"white\";case oi.WhiteBorder:return\"white-outline\";case oi.Black:default:return\"black\"}})(e)),t.setAttribute(\"type\",\"plain\"),t.setAttribute(\"style\",\"--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;\"),t}_handleWalletButtonClick(e){var t;return ai(this,void 0,void 0,function*(){if(e.preventDefault(),!this._paymentMethod||!this._paymentMethod.initializationData)throw new ar(rr.MissingPaymentMethod);if(this._buyNowInitializeOptions&&\"function\"==typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody){const{countryCode:e,currencyCode:n,merchantCapabilities:r,supportedNetworks:i,storeName:o}=this._paymentMethod.initializationData,a=this._getRequestWithEmptyTotal(e,n,i,r);this._requiresShipping&&(null===(t=a.requiredShippingContactFields)||void 0===t||t.push(\"postalAddress\"));const s=this._sessionFactory.create(a);this._handleApplePayEvents(s,this._paymentMethod,o),s.begin()}else{const e=this._paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getStoreConfigOrThrow(),r=e.getCheckoutOrThrow(),i=this._getBaseRequest(t,r,n,this._paymentMethod),o=this._sessionFactory.create(i);this._handleApplePayEvents(o,this._paymentMethod,n.storeProfile.storeName),o.begin()}})}_getRequestWithEmptyTotal(e,t,n,r){return{countryCode:e,currencyCode:t,supportedNetworks:n,merchantCapabilities:r,total:{label:\"\",amount:\"0\",type:\"pending\"},requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"]}}_getBaseRequest(e,t,n,r){var i;const{storeProfile:{storeCountryCode:o,storeName:a}}=n,{currency:{code:s,decimalPlaces:c}}=e,{initializationData:{merchantCapabilities:u,supportedNetworks:d}}=r,l=e.lineItems.physicalItems.length>0,p={requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"],countryCode:o,currencyCode:s,merchantCapabilities:u,supportedNetworks:d,lineItems:[],total:l?{label:a,amount:`${t.grandTotal.toFixed(c)}`,type:\"pending\"}:{label:a,amount:`${t.grandTotal.toFixed(c)}`,type:\"final\"}};if(l)null===(i=p.requiredShippingContactFields)||void 0===i||i.push(\"postalAddress\");else{const e=[{label:this._subTotalLabel,amount:`${t.subtotal.toFixed(c)}`}];t.taxes.forEach(t=>e.push({label:t.name,amount:`${t.amount.toFixed(c)}`})),p.lineItems=e}return p}_handleApplePayEvents(e,t,n){e.onvalidatemerchant=n=>ai(this,void 0,void 0,function*(){try{const{body:r}=yield this._onValidateMerchant(t,n);e.completeMerchantValidation(r)}catch(e){throw new Error(\"Merchant validation failed\")}}),this._buyNowInitializeOptions&&!this._requiresShipping&&(e.onpaymentmethodselected=()=>ai(this,void 0,void 0,function*(){yield this._createBuyNowCart(),this._handlePaymentMethodSelected(e)})),e.onshippingcontactselected=t=>ai(this,void 0,void 0,function*(){this._buyNowInitializeOptions&&this._requiresShipping&&(yield this._createBuyNowCart()),yield this._handleShippingContactSelected(e,n,t)}),e.onshippingmethodselected=t=>ai(this,void 0,void 0,function*(){yield this._handleShippingMethodSelected(e,n,t)}),e.oncancel=()=>ai(this,void 0,void 0,function*(){try{const e=`/remote-checkout/${t.id}/signout`;return yield this._requestSender.get(e),yield this._paymentIntegrationService.loadCheckout()}catch(e){throw new ri}}),e.onpaymentauthorized=n=>ai(this,void 0,void 0,function*(){return this._onPaymentAuthorized(n,e,t)})}_createBuyNowCart(){var e,t;return ai(this,void 0,void 0,function*(){try{const n=null===(t=null===(e=this._buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody)||void 0===t?void 0:t.call(e);if(!n)throw new ar(rr.MissingCart);const r=yield this._paymentIntegrationService.createBuyNowCart(n);yield this._paymentIntegrationService.loadCheckout(r.id);const i=this._paymentIntegrationService.getState(),{shouldExecuteSpamCheck:o}=i.getCheckoutOrThrow();o&&(yield this._paymentIntegrationService.verifyCheckoutSpamProtection())}catch(e){throw new Cr}})}_handlePaymentMethodSelected(e){const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow(),r=t.getStoreConfigOrThrow(),i=t.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new ar(rr.MissingPaymentMethod);const o=this._getBaseRequest(n,i,r,this._paymentMethod);delete o.total.type,e.completePaymentMethodSelection({newTotal:o.total,newLineItems:o.lineItems})}_handleShippingContactSelected(e,t,n){var r;return ai(this,void 0,void 0,function*(){const i=this._transformContactToAddress(n.shippingContact);try{yield this._paymentIntegrationService.updateShippingAddress(i)}catch(t){throw e.abort(),new Error(\"Shipping address update failed\")}let o=this._paymentIntegrationService.getState();const{currency:{decimalPlaces:a}}=o.getCartOrThrow();let s=o.getCheckoutOrThrow();const c=null===(r=s.consignments[0].selectedShippingOption)||void 0===r?void 0:r.id,u=s.consignments[0].availableShippingOptions,d=null==u?void 0:u.find(({id:e})=>e===c),l=null==u?void 0:u.filter(e=>e.id!==c),p=d?[{label:d.description,amount:`${d.cost.toFixed(a)}`,detail:d.additionalDescription,identifier:d.id}]:[];if(l&&[...l.filter(e=>e.isRecommended),...l.filter(e=>!e.isRecommended)].forEach(e=>p.push({label:e.description,amount:`${e.cost.toFixed(a)}`,detail:e.additionalDescription,identifier:e.id})),!(u instanceof Array))throw new Error(\"Shipping options not available.\");if(0===u.length)return void e.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:\"pending\",label:t,amount:`${s.grandTotal.toFixed(a)}`},[]);const h=u.find(e=>e.isRecommended),f=h?h.id:u[0].id,y=d?d.id:f;try{yield this._updateShippingOption(y)}catch(e){throw new Error(\"Shipping options update failed\")}o=this._paymentIntegrationService.getState(),s=o.getCheckoutOrThrow(),e.completeShippingContactSelection({newShippingMethods:p,newTotal:{type:\"final\",label:t,amount:`${s.grandTotal.toFixed(a)}`},newLineItems:this._getUpdatedLineItems(s,a)})})}_handleShippingMethodSelected(e,t,n){return ai(this,void 0,void 0,function*(){const{shippingMethod:{identifier:r}}=n;try{yield this._updateShippingOption(r)}catch(t){throw e.abort(),new Error(\"Shipping option selection update failed.\")}const i=this._paymentIntegrationService.getState(),{currency:{decimalPlaces:o}}=i.getCartOrThrow(),a=i.getCheckoutOrThrow();e.completeShippingMethodSelection({newTotal:{type:\"final\",label:t,amount:`${a.grandTotal.toFixed(o)}`},newLineItems:this._getUpdatedLineItems(a,o)})})}_getUpdatedLineItems(e,t){const n=[{label:this._subTotalLabel,amount:`${e.subtotal.toFixed(t)}`}];return e.taxes.forEach(e=>n.push({label:e.name,amount:`${e.amount.toFixed(t)}`})),n.push({label:this._shippingLabel,amount:`${e.shippingCostTotal.toFixed(t)}`}),n}_updateShippingOption(e){return ai(this,void 0,void 0,function*(){return this._paymentIntegrationService.selectShippingOption(e)})}_onValidateMerchant(e,t){return ai(this,void 0,void 0,function*(){const n=[`validationUrl=${t.validationURL}`,`merchantIdentifier=${e.initializationData.merchantId}`,`displayName=${e.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${e.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:n})})}_onPaymentAuthorized(e,t,n){var r;return ai(this,void 0,void 0,function*(){const{token:i,billingContact:o,shippingContact:a}=e.payment,s=this._paymentIntegrationService.getState().getCartOrThrow().lineItems.physicalItems.length>0;let c;(null===(r=n.initializationData)||void 0===r?void 0:r.gateway)===ei.BRAINTREE&&(c=yield this._getBraintreeDeviceData());const u={methodId:n.id,paymentData:{deviceSessionId:c,formattedPayload:{apple_pay_token:{payment_data:i.paymentData,payment_method:i.paymentMethod,transaction_id:i.transactionIdentifier}}}},d=this._transformContactToAddress(o),l=this._transformContactToAddress(a),p=null==a?void 0:a.emailAddress,h=(null==a?void 0:a.phoneNumber)||\"\";try{return yield this._paymentIntegrationService.updateBillingAddress(Object.assign(Object.assign({},d),{email:p,phone:h})),s&&(yield this._paymentIntegrationService.updateShippingAddress(l)),yield this._paymentIntegrationService.submitOrder({useStoreCredit:!1}),yield this._paymentIntegrationService.submitPayment(u),t.completePayment(ApplePaySession.STATUS_SUCCESS),this._onAuthorizeCallback()}catch(e){throw t.completePayment(ApplePaySession.STATUS_FAILURE),new Error(\"Payment cannot complete\")}})}_transformContactToAddress(e){return{firstName:(null==e?void 0:e.givenName)||\"\",lastName:(null==e?void 0:e.familyName)||\"\",city:(null==e?void 0:e.locality)||\"\",company:\"\",address1:(null==e?void 0:e.addressLines)&&e.addressLines[0]||\"\",address2:(null==e?void 0:e.addressLines)&&e.addressLines[1]||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",phone:(null==e?void 0:e.phoneNumber)||\"\",stateOrProvince:(null==e?void 0:e.administrativeArea)||\"\",stateOrProvinceCode:(null==e?void 0:e.administrativeArea)||\"\",customFields:[]}}_getBraintreeDeviceData(){return ai(this,void 0,void 0,function*(){try{const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e}catch(e){}})}}function ci(e){if(!function(e){return\"ApplePaySession\"in e}(e))throw new Error(\"Apple pay is not supported\")}class ui{create(e){return ci(window),new ApplePaySession(1,e)}}class di{constructor(e){this.scriptLoader=e,this.sdkVersion=\"1.latest\"}loadSdk(){return e=this,t=void 0,r=function*(){(function(e){return\"ApplePaySDK\"in e})(window)||(yield this.scriptLoader.loadScript(`https://applepay.cdn-apple.com/jsapi/${this.sdkVersion}/apple-pay-sdk.js`),ci(window))},new((n=void 0)||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())});var e,t,n,r}}const li=Sr(e=>{const{getHost:n}=e.getState(),r=new zr(e);return new si((0,t.createRequestSender)({host:n()}),e,new ui,new Qr(new ni((0,or.vQ)(),window,r)),new di(new or.B2))},[{id:\"applepay\"}]);var pi,hi,fi,yi,mi,gi,vi,_i;!function(e){e.BuyNow=\"BUY_NOW\"}(pi||(pi={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(hi||(hi={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(fi||(fi={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(yi||(yi={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(mi||(mi={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(gi||(gi={})),function(e){e.OXXO=\"oxxo\"}(vi||(vi={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(_i||(_i={}));var bi=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Si{constructor(e,t,n,r){this.formPoster=e,this.paymentIntegrationService=t,this.bigCommercePaymentsRequestSender=n,this.bigCommercePaymentsScriptLoader=r}loadPayPalSdk(e,t,n,r){return bi(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),o=t||i.getCartOrThrow().currency.code,a=i.getPaymentMethodOrThrow(e);return this.paypalSdk=yield this.bigCommercePaymentsScriptLoader.getPayPalSDK(a,o,n,r),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new _r;return this.paypalSdk}createBuyNowCartOrThrow(e){return bi(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new ar(rr.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new Cr}})}createOrder(e,t){return bi(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:r}=yield this.bigCommercePaymentsRequestSender.createOrder(e,Object.assign({cartId:n},t));return r})}createOrderCardFields(e,t){return bi(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:r,setupToken:i}=yield this.bigCommercePaymentsRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:r},i?{setupToken:i}:{})})}updateOrder(e){return bi(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow();let r;e||(r=t.getConsignmentsOrThrow()[0]);try{yield this.bigCommercePaymentsRequestSender.updateOrder({availableShippingOptions:e?[]:null==r?void 0:r.availableShippingOptions,cartId:n.id,selectedShippingOption:e?null:null==r?void 0:r.selectedShippingOption})}catch(e){throw new c}})}getOrderStatus(e,t){return bi(this,void 0,void 0,function*(){try{const{status:n}=yield this.bigCommercePaymentsRequestSender.getOrderStatus(e,t);return n}catch(e){throw new c}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new ar(rr.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===pi.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return bi(this,void 0,void 0,function*(){const r={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:r},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],r=n.find(e=>e.isRecommended),i=(e?n.find(t=>t.id===e):n.find(e=>{var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)}))||r||n[0];if(!i)throw new Error(\"Your order can't be shipped to this address\");return i}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:r,name:{full_name:i}}=n[0].shipping,[o,...a]=i.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:r.address_line_1,address2:r.address_line_2,city:r.admin_area_2,countryCode:r.country_code,postalCode:r.postal_code,stateOrProvinceCode:r.admin_area_1})}getValidButtonStyle(e){const{color:t,height:n,label:r,shape:i}=e||{},o={color:t&&mi[t]?t:void 0,height:this.getValidHeight(n),label:r&&yi[r]?r:void 0,shape:i&&gi[i]?i:void 0};return(0,f.omitBy)(o,f.isNil)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}var wi=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Ci{constructor(e){this.requestSender=e}createOrder(e,t){return wi(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,r=t,i=Object.assign({\"X-API-INTERNAL\":Ar,\"Content-Type\":kr.Json},Rr);return(yield this.requestSender.post(n,{headers:i,body:r})).body})}updateOrder(e){return wi(this,void 0,void 0,function*(){const t=e,n=Object.assign({\"X-API-INTERNAL\":Ar,\"Content-Type\":kr.Json},Rr);return(yield this.requestSender.put(\"/api/storefront/initialization/bigcommerce_payments\",{headers:n,body:t})).body})}getOrderStatus(e=\"bigcommerce_payments\",t){return wi(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,r=Object.assign({\"X-API-INTERNAL\":Ar,\"Content-Type\":kr.Json},Rr);return(yield this.requestSender.get(n,Object.assign({headers:r},t))).body})}}var Ii=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Ei{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,r){return Ii(this,void 0,void 0,function*(){const i=this.getPayPalSdkScriptConfigOrThrow(e,t,n);return this.loadPayPalSDK(i,r)})}loadPayPalSDK(e,t=!1){return Ii(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsPayPalSDK||t){const t=this.transformConfig(e.options),n=this.transformConfig(e.attributes),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(t).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:n})}if(!this.window.bigCommercePaymentsPayPalSDK)throw new _r;return this.window.bigCommercePaymentsPayPalSDK})}getPayPalSdkScriptConfigOrThrow(e,t,n=!0){const{id:r,clientToken:i,initializationData:o}=e;if(!(null==o?void 0:o.clientId))throw new ar(rr.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:c,buyerCountry:u,attributionId:d,isVenmoEnabled:l,isHostedCheckoutEnabled:p,isPayPalCreditAvailable:h,isDeveloperModeApplicable:f,availableAlternativePaymentMethods:y=[],enabledAlternativePaymentMethods:m=[],isGooglePayEnabled:g}=o,v=p||n,_=\"bigcommerce_payments_creditcards\"===r,b=_?[\"card\"]:[],S=_?[]:[\"card\"],w=h?[\"credit\",\"paylater\"]:[],C=h?[]:[\"credit\",\"paylater\"],I=l?[\"venmo\"]:[],E=l?[]:[\"venmo\"],P=y.filter(e=>!m.includes(e)),O=g?[\"googlepay\"]:[],A=n?[\"card-fields\"]:[],T=this.filterFundingOptions([...S,...C,...E,...P]),k=this.filterFundingOptions([...b,...w,...I,...m]);return{options:Object.assign({\"client-id\":s,\"merchant-id\":c,\"enable-funding\":k.length>0?k:void 0,\"disable-funding\":T.length>0?T:void 0,commit:v,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...O,...A],currency:t,intent:a},f&&{\"buyer-country\":u}),attributes:{\"data-partner-attribution-id\":d,\"data-client-token\":i,\"data-namespace\":\"bigCommercePaymentsPayPalSDK\"}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const r=e[n];null==r||\"\"===r||Array.isArray(r)&&0===r.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(r)?r.join(\",\"):r}))}),t}}const Pi=e=>{const{getHost:n}=e.getState();return new Si((0,i.createFormPoster)(),e,new Ci((0,t.createRequestSender)({host:n()})),new Ei((0,or.vQ)()))};var Oi=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Ai{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){var t;return Oi(this,void 0,void 0,function*(){const{bigcommerce_payments:n,containerId:r,methodId:i}=e,o=Boolean(null==n?void 0:n.buyNowInitializeOptions);if(!i)throw new wr('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new wr('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!n)throw new wr('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');if(o&&!n.currencyCode)throw new wr('Unable to initialize payment because \"options.bigcommerce_payments.currencyCode\" argument is not provided.');if(o&&\"function\"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new wr('Unable to initialize payment because \"options.bigcommerce_payments.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');o||(yield this.paymentIntegrationService.loadDefaultCheckout());const a=o?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i,a,!1),this.renderButton(r,i,n)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:r,style:i,onComplete:o,onEligibilityFailure:a}=n,s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),c=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:u,isServerSideShippingCallbacksEnabled:d}=c.initializationData||{},l={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},p={onClick:()=>this.handleClick(r),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},h=Object.assign(Object.assign({},!d&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o,d)}),f=Object.assign(Object.assign(Object.assign({fundingSource:s.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(i)},l),r&&p),u&&h),y=s.Buttons(f);y.isEligible()?y.render(`#${e}`):a&&\"function\"==typeof a?a():this.bigCommercePaymentsIntegrationService.removeElement(e)}handleClick(e){return Oi(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,r,i){return Oi(this,void 0,void 0,function*(){if(!e.orderID)throw new ar(rr.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!i){const e=yield t.order.get(),n=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}return a&&(yield this.bigCommercePaymentsIntegrationService.updateOrder(i)),i&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(n,e.orderID),r&&\"function\"==typeof r&&r(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return Oi(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return Oi(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const Ti=Sr(e=>new Ai(e,Pi(e)),[{id:\"bigcommerce_payments\"}]);var ki=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Ri{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return ki(this,void 0,void 0,function*(){const{bigcommerce_payments_paylater:t,containerId:n,methodId:r}=e,{buyNowInitializeOptions:i,currencyCode:o}=t||{},a=!!i;if(!r)throw new wr('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new wr('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new wr('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');if(a&&!o)throw new wr('Unable to initialize payment because \"options.bigcommerce_payments_paylater.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==i?void 0:i.getBuyNowCartRequestBody))throw new wr('Unable to initialize payment because \"options.bigcommerce_payments_paylater.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=this.paymentIntegrationService.getState(),c=a?o:s.getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(r,c,!1),this.renderButton(n,r,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:r,style:i,onComplete:o,onEligibilityFailure:a}=n,s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),c=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:u}=c.initializationData||{},d={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},l={onClick:()=>this.handleClick(r),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},p={onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e),onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o)},h=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT];let f=!1;h.forEach(t=>{if(!f){const n=Object.assign(Object.assign(Object.assign({fundingSource:t,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(i)},d),r&&l),u&&p),o=s.Buttons(n);o.isEligible()?(o.render(`#${e}`),f=!0):a&&\"function\"==typeof a&&a()}}),f||this.bigCommercePaymentsIntegrationService.removeElement(e)}handleClick(e){return ki(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,r){return ki(this,void 0,void 0,function*(){if(!e.orderID)throw new ar(rr.MissingOrderId);const i=this.paymentIntegrationService.getState().getCartOrThrow(),o=yield t.order.get();try{const t=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(o);if(yield this.paymentIntegrationService.updateBillingAddress(t),i.lineItems.physicalItems.length>0){const e=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(o);yield this.paymentIntegrationService.updateShippingAddress(e),yield this.bigCommercePaymentsIntegrationService.updateOrder()}return yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(n,e.orderID),r&&\"function\"==typeof r&&r(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return ki(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return ki(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const Mi=Sr(e=>new Ri(e,Pi(e)),[{id:\"bigcommerce_payments_paylater\"}]);var xi=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Ni{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return xi(this,void 0,void 0,function*(){const{bigcommerce_payments_venmo:t,containerId:n,methodId:r}=e,{buyNowInitializeOptions:i,currencyCode:o}=t||{},a=!!i;if(!r)throw new wr('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new wr('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new wr('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');if(a&&!o)throw new wr('Unable to initialize payment because \"options.bigcommerce_payments_venmo.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==i?void 0:i.getBuyNowCartRequestBody))throw new wr('Unable to initialize payment because \"options.bigcommerce_payments_venmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=a?o:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(r,s,!1),this.renderButton(n,r,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:r,style:i,onEligibilityFailure:o}=n,a=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),s=a.FUNDING.VENMO,c={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmo\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},u={onClick:()=>this.handleClick(r),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},d=Object.assign(Object.assign({fundingSource:s,style:this.getValidVenmoButtonStyles(i)},c),r&&u),l=a.Buttons(d);l.isEligible()?l.render(`#${e}`):o&&\"function\"==typeof o?o():this.bigCommercePaymentsIntegrationService.removeElement(e)}getValidVenmoButtonStyles(e){const t=this.bigCommercePaymentsIntegrationService.getValidButtonStyle(e);return t.color===mi.gold?Object.assign(Object.assign({},t),{color:void 0}):t}handleClick(e){return xi(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}}const Di=Sr(e=>new Ni(e,Pi(e)),[{id:\"bigcommerce_payments_venmo\"}]);var ji,Li,zi,Fi=n(2586);class Bi extends a{constructor(e){super(e||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}!function(e){e.SandboxMode=\"bolt_sandbox\",e.StagingMode=\"bolt_staging\",e.DevelopmentMode=\"bolt_development\"}(ji||(ji={})),function(e){e.Small=\"small\",e.Medium=\"medium\",e.Large=\"large\"}(Li||(Li={})),function(e){e.Pill=\"pill\",e.Rect=\"rect\"}(zi||(zi={}));class Ui{constructor(e,t,n=window){this.paymentIntegrationService=e,this.boltScriptLoader=t,this.boltHostWindow=n}initialize(e){return t=this,n=void 0,i=function*(){const{bolt:t,containerId:n,methodId:r}=e,{buyNowInitializeOptions:i,style:o}=t||{};if(!r)throw new wr('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new wr('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new wr('Unable to initialize payment because \"options.bolt\" argument is not provided.');if(!Boolean(i))throw new Bi(\"Only buy now flow is implemented for Bolt button\");if(!(null==i?void 0:i.storefrontApiToken)||\"string\"!=typeof i.storefrontApiToken)throw new wr('Unable to initialize payment because \"options.storefrontApiToken\" argument is not provided.');const a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r),{initializationData:s,config:c}=a,{publishableKey:u,developerConfig:d}=s||{};yield this.boltScriptLoader.loadBoltClient(u,c.testMode,d,\"BigCommerce\",i.storefrontApiToken),this.renderButton(n,a,o)},new((r=void 0)||(r=Promise))(function(e,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((i=i.apply(t,n||[])).next())});var t,n,r,i}deinitialize(){return Promise.resolve()}renderButton(e,t,n){var r;\"function\"==typeof(null===(r=this.boltHostWindow.BoltConnect)||void 0===r?void 0:r.setupProductPageCheckout)&&(this.addButtonContainer(e,t,n),this.boltHostWindow.BoltConnect.setupProductPageCheckout())}addButtonContainer(e,t,n){const r=document.getElementById(e);if(!r)return;const i=document.createElement(\"div\"),o=document.createElement(\"object\");i.setAttribute(\"id\",\"product-page-checkout-wrapper\"),i.setAttribute(\"class\",\"bolt-button-wrapper\"),i.setAttribute(\"style\",\"display:none\"),i.setAttribute(\"data-tid\",\"product-page-checkout-wrapper\"),o.setAttribute(\"data\",this.getBoltObjectData(t,n)),o.setAttribute(\"class\",\"bolt-product-checkout-button\"),i.append(o),r.innerHTML=\"\",r.append(i)}getBoltObjectData(e,t){const{initializationData:n,config:r}=e,{publishableKey:i,developerConfig:o}=n||{},a=this.boltScriptLoader.getDomainURL(!!r.testMode,o),s=this.getButtonHeight(null==t?void 0:t.size),c=this.getButtonBorderRadius(null==t?void 0:t.shape,s);return(0,Fi.stringifyUrl)({url:`https://${a}/v1/checkout_button`,query:{publishable_key:i,variant:\"ppc\",height:s,border_radius:c}})}getButtonHeight(e){if(e)switch(e){case Li.Small:return 25;case Li.Large:return 45;case Li.Medium:default:return 40}}getButtonBorderRadius(e,t){if(e)switch(e){case zi.Pill:return t?Math.round(t/2):void 0;case zi.Rect:default:return 4}}}var qi=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Vi{constructor(e,t=window){this.scriptLoader=e,this.boltHostWindow=t}loadBoltClient(e,t,n,r,i){return qi(this,void 0,void 0,function*(){if(this.boltHostWindow.BoltCheckout)return this.boltHostWindow.BoltCheckout;if(!e)throw new wr('Unable to initialize payment because \"publishableKey\" argument is not provided.');if(yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!t,n)}/connect-bigcommerce.js`,this.getScriptOptions(\"bolt-connect\",e,r,i)),yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!t,n)}/track.js`,this.getScriptOptions(\"bolt-track\",e)),!this.boltHostWindow.BoltCheckout)throw new _r;return this.boltHostWindow.BoltCheckout})}loadBoltEmbedded(e,t,n){return qi(this,void 0,void 0,function*(){if(yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!t,n)}/embed.js`,{async:!0,attributes:{id:\"bolt-embedded\"}}),!this.boltHostWindow.Bolt)throw new _r;return this.boltHostWindow.Bolt(e)})}getDomainURL(e,t){if(!e)return\"connect.bolt.com\";if(t)switch(t.developerMode){case ji.StagingMode:return\"connect-staging.bolt.com\";case ji.DevelopmentMode:return`connect.${t.developerDomain}`}return\"connect-sandbox.bolt.com\"}getScriptOptions(e,t,n,r){return{async:!0,attributes:Object.assign(Object.assign({id:e,\"data-publishable-key\":t},n&&{\"data-shopping-cart-id\":n}),r&&{\"data-storefront-api-token\":r})}}}const Gi=Sr(e=>new Ui(e,new Vi((0,or.vQ)())),[{id:\"bolt\"}]);var Hi=n(6472);class Yi extends wr{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class Wi extends a{constructor(e,t){super(t||\"Unable to proceed because the payment form contains invalid data.\"),this.details=e,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}class $i{constructor(e){const t=new Promise((e,t)=>{this.cancel=t});this.promise=Promise.race([e,t])}}let Ki=null;const Zi=[\"buttons\",\"messages\"];var Ji,Qi,Xi,eo,to,no;!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(Ji||(Ji={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(Qi||(Qi={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(Xi||(Xi={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(eo||(eo={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(to||(to={})),function(e){e.CART=\"cart\",e.HOME=\"homepage\",e.PAYMENT=\"payment\",e.PRODUCT=\"product\"}(no||(no={}));var ro=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class io{constructor(e,t,n){this.braintreeScriptLoader=e,this.braintreeHostWindow=t,this.overlay=n,this.dataCollectors={}}initialize(e,t){this.clientToken=e,this.threeDSecureOptions=t}getBraintreeFastlane(e,t,n){return ro(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"axoEnv\",\"sandbox\"),window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\")),!this.braintreeHostWindow.braintreeFastlane){const t=this.getClientTokenOrThrow(),r=yield this.getClient(),i=yield this.getSessionId(e),o=yield this.braintreeScriptLoader.loadFastlane(),a={root:{backgroundColorPrimary:\"transparent\"}};this.braintreeHostWindow.braintreeFastlane=yield o.create({authorization:t,client:r,deviceData:i,styles:n||a})}return this.braintreeHostWindow.braintreeFastlane})}getClient(){return ro(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=t.create({authorization:e})}return this.client})}getPaypal(){return this.braintreePaypal||(this.braintreePaypal=Promise.all([this.getClient(),this.braintreeScriptLoader.loadPaypal()]).then(([e,t])=>t.create({client:e}))),this.braintreePaypal}paypal(e){var{shouldSaveInstrument:t}=e,n=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"shouldSaveInstrument\"]);const r=(0,Hi.Jt)();return this.getPaypal().then(e=>{var i;return r&&(null===(i=this.overlay)||void 0===i||i.show({onClick:()=>e.focusWindow()})),e.tokenize(Object.assign({enableShippingAddress:!0,flow:t?\"vault\":\"checkout\",useraction:\"commit\"},n))}).then(e=>{var t;return null===(t=this.overlay)||void 0===t||t.remove(),e}).catch(e=>{var t;throw null===(t=this.overlay)||void 0===t||t.remove(),e})}getPaypalCheckout(e,t,n){return ro(this,void 0,void 0,function*(){const r=yield this.getClient(),i=yield this.braintreeScriptLoader.loadPaypalCheckout(),o={client:r};return this.paypalCheckout=yield i.create(o,(r,i)=>{var o;if(r)return n(r);const a=Object.assign(Object.assign({currency:e.currency},e.isCreditEnabled&&{\"enable-funding\":\"paylater\"}),{components:Zi.toString(),intent:e.intent,commit:null===(o=e.commit)||void 0===o||o});this.braintreeHostWindow.paypal?t(i):function(e,t){return Ki||(Ki=new Promise((n,r)=>{e.loadPayPalSDK(t,t=>{t?(Ki=null,r(t)):n(e)})})),Ki}(i,a).then(()=>t(i))}),this.paypalCheckout})}getDataCollector(e){return ro(this,void 0,void 0,function*(){const t=(null==e?void 0:e.paypal)?\"paypal\":\"default\";let n=this.dataCollectors[t];if(!n){try{const t=yield this.getClient(),r=yield this.braintreeScriptLoader.loadDataCollector(),i=Object.assign({client:t,kount:!0},e);n=yield r.create(i)}catch(e){if(!Wr(e)||\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"!==e.code)throw e;n={deviceData:void 0,teardown:()=>Promise.resolve()}}this.dataCollectors[t]=n}return n})}getBraintreeEnv(e=!1){return e?$r.Sandbox:$r.Production}mapToBraintreeShippingAddressOverride(e){return{recipientName:`${e.firstName} ${e.lastName}`,line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,postalCode:e.postalCode,countryCode:e.countryCode,phone:e.phone}}mapToLegacyShippingAddress(e){const{email:t,phone:n,shippingAddress:r}=e,i=(null==r?void 0:r.recipientName)||\"\",[o,a]=i.split(\" \");return{email:t,first_name:o||\"\",last_name:a||\"\",phone_number:n,address_line_1:null==r?void 0:r.line1,address_line_2:null==r?void 0:r.line2,city:null==r?void 0:r.city,state:null==r?void 0:r.state,country_code:null==r?void 0:r.countryCode,postal_code:null==r?void 0:r.postalCode}}mapToLegacyBillingAddress(e){const{billingAddress:t,email:n,firstName:r,lastName:i,phone:o,shippingAddress:a}=e,s=t||a;return{email:n,first_name:r,last_name:i,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}removeElement(e){const t=e&&document.getElementById(e);t&&t.remove()}getSessionId(e){return ro(this,void 0,void 0,function*(){const{deviceData:t}=yield this.getDataCollector({riskCorrelationId:e});return t})}teardown(){return ro(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollectors.default),yield this.teardownModule(this.dataCollectors.paypal),this.dataCollectors={},yield this.teardownModule(this.paypalCheckout),this.paypalCheckout=void 0})}get3DS(){return ro(this,void 0,void 0,function*(){return this.threeDS||(this.threeDS=Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]).then(([e,t])=>t.create({client:e,version:2}))),this.threeDS})}getVenmoCheckout(e){return ro(this,void 0,void 0,function*(){if(!this.venmoCheckout){const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadVenmoCheckout(),r=Object.assign({client:t,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},e||{});this.venmoCheckout=yield new Promise((e,t)=>{n.create(r,(n,r)=>n?t(n):r.isBrowserSupported()?void e(r):t(new Fr))})}return this.venmoCheckout})}verifyCard(e,t,n){return ro(this,void 0,void 0,function*(){const r=yield this.tokenizeCard(e,t);return this.challenge3DSVerification(r,n)})}tokenizeCard(e,t){return ro(this,void 0,void 0,function*(){const{paymentData:n}=e;if(!function(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;return\"object\"==typeof t.ccExpiry&&null!==t.ccExpiry&&\"string\"==typeof t.ccNumber&&\"string\"==typeof t.ccName}(n))throw new Yi([\"payment.paymentData\"]);const r=this.getErrorsRequiredFields(n);if(!(0,f.isEmpty)(r))throw new Wi(r);const i=this.mapToCreditCard(n,t),o=yield this.getClient(),{creditCards:a}=yield o.request(i);return{nonce:a[0].nonce,bin:a[0].details.bin}})}challenge3DSVerification(e,t){return ro(this,void 0,void 0,function*(){const n=yield this.get3DS();return this.present3DSChallenge(n,t,e)})}teardownModule(e){return e?e.teardown():Promise.resolve()}getClientTokenOrThrow(){if(!this.clientToken)throw new ur(ir.PaymentNotInitialized);return this.clientToken}getErrorsRequiredFields(e){const{ccNumber:t,ccExpiry:n}=e,r={};return t||(r.ccNumber=[{message:\"Credit card number is required\",type:\"required\"}]),n||(r.ccExpiry=[{message:\"Expiration date is required\",type:\"required\"}]),r}mapToCreditCard(e,t){return{data:{creditCard:{cardholderName:e.ccName,number:e.ccNumber,cvv:e.ccCvv,expirationDate:`${e.ccExpiry.month}/${e.ccExpiry.year}`,options:{validate:!1},billingAddress:t&&{countryCodeAlpha2:t.countryCode,locality:t.city,countryName:t.country,postalCode:t.postalCode,streetAddress:t.address2?`${t.address1} ${t.address2}`:t.address1}}},endpoint:\"payment_methods/credit_cards\",method:\"post\"}}present3DSChallenge(e,t,n){const{nonce:r,bin:i}=n;if(!this.threeDSecureOptions||!r)throw new ur(ir.PaymentNotInitialized);const{addFrame:o,removeFrame:a,challengeRequested:s=!0,additionalInformation:c}=this.threeDSecureOptions,u=()=>ro(this,void 0,void 0,function*(){const t=yield e.cancelVerifyCard();return l.cancel(new ri),t}),d=t.toFixed(2),l=new $i(e.verifyCard({addFrame:(e,t)=>{o&&o(e,t,u)},amount:Number(d),bin:i,challengeRequested:s,nonce:r,removeFrame:a,onLookupComplete:(e,t)=>{t()},collectDeviceData:!0,additionalInformation:c}));return l.promise}}function oo(e){const{color:t,fundingicons:n,height:r=40,layout:i,shape:o,size:a,tagline:s}=e||{},c={color:t,fundingicons:n,height:ao(r),layout:i,shape:o||\"rect\",size:a,tagline:s};return(0,f.omitBy)(c,f.isNil)}function ao(e){const t=Number(e);return!t||Number.isNaN(t)?40:t>55?55:t<25?25:t}function so(e){return{recipientName:`${e.firstName} ${e.lastName}`,line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,postalCode:e.postalCode,countryCode:e.countryCode,phone:e.phone}}var co=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class uo{constructor(e,t,n,r){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=n,this.braintreeHostWindow=r}initialize(e){return co(this,void 0,void 0,function*(){const{braintreepaypal:t,containerId:n,methodId:r}=e;if(!r)throw new wr('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new wr('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new wr('Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.');let i,o=this.paymentIntegrationService.getState();if(t.buyNowInitializeOptions){if(!t.currencyCode)throw new wr('Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.');i=t.currencyCode}else yield this.paymentIntegrationService.loadDefaultCheckout(),o=this.paymentIntegrationService.getState(),i=o.getCartOrThrow().currency.code;const a=o.getPaymentMethodOrThrow(r),{clientToken:s,config:c,initializationData:u}=a;if(!s||!u)throw new ar(rr.MissingPaymentMethod);const d={currency:i,intent:u.intent,isCreditEnabled:u.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(d,e=>{this.renderPayPalButton(e,t,n,r,!!c.testMode)},e=>this.handleError(e,n,t.onError))})}deinitialize(){return co(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}renderPayPalButton(e,t,n,r,i){const{style:o,shouldProcessPayment:a,onAuthorizeError:s,onEligibilityFailure:c}=t,{paypal:u}=this.braintreeHostWindow;if(u){const d=u.Buttons({env:i?\"sandbox\":\"production\",fundingSource:u.FUNDING.PAYPAL,style:oo(o),createOrder:()=>this.setupPayment(e,t,r),onApprove:t=>this.tokenizePayment(t,e,r,a,s)});d.isEligible()?d.render(`#${n}`):c&&\"function\"==typeof c&&c()}else this.braintreeIntegrationService.removeElement(n)}setupPayment(e,t,n){var r;return co(this,void 0,void 0,function*(){const{onPaymentError:i,shippingAddress:o,buyNowInitializeOptions:s}=t;try{const i=\"function\"==typeof(null==s?void 0:s.getBuyNowCartRequestBody)?yield this.createBuyNowCart(s.getBuyNowCartRequestBody()):void 0;this.buyNowCartId=null==i?void 0:i.id;const a=this.paymentIntegrationService.getState(),c=a.getCustomer(),u=a.getPaymentMethodOrThrow(n),d=i?i.cartAmount:a.getCartOrThrow().cartAmount,l=i?t.currencyCode:a.getCartOrThrow().currency.code,p=o||(null==c?void 0:c.addresses[0]),h=p?so(p):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:h,amount:d,currency:l,offerCredit:!1,intent:null===(r=u.initializationData)||void 0===r?void 0:r.intent})}catch(e){throw i&&(Wr(e)||e instanceof a)&&i(e),e}})}tokenizePayment(e,t,n,r,i){return co(this,void 0,void 0,function*(){try{const{deviceData:i}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),o=yield t.tokenizePayment(e),{details:a,nonce:s}=o,c=this.braintreeIntegrationService.mapToLegacyBillingAddress(a),u=this.braintreeIntegrationService.mapToLegacyShippingAddress(a);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",provider:n,action:r?\"process_payment\":\"set_external_checkout\",nonce:s,device_data:i,billing_address:JSON.stringify(c),shipping_address:JSON.stringify(u)},this.buyNowCartId&&{cart_id:this.buyNowCartId})),o}catch(e){throw i&&(Wr(e)||e instanceof a)&&i(e),e}})}createBuyNowCart(e){return co(this,void 0,void 0,function*(){if(!e)throw new ar(rr.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(e)}catch(e){throw new Cr}})}handleError(e,t,n){if(this.braintreeIntegrationService.removeElement(t),!n||!Wr(e))throw e;n(e)}}const lo=Sr(e=>{const t=window,n=new zr(e),r=new io(new ni((0,or.vQ)(),t,n),t);return new uo(e,(0,i.createFormPoster)(),r,t)},[{id:\"braintreepaypal\"}]);var po=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class ho{constructor(e,t,n,r){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=n,this.braintreeHostWindow=r}initialize(e){return po(this,void 0,void 0,function*(){const{braintreepaypalcredit:t,containerId:n,methodId:r}=e;if(!r)throw new wr('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new wr('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new wr('Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.');let i,o=this.paymentIntegrationService.getState();if(t.buyNowInitializeOptions){if(!t.currencyCode)throw new wr('Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.');i=t.currencyCode}else yield this.paymentIntegrationService.loadDefaultCheckout(),o=this.paymentIntegrationService.getState(),i=o.getCartOrThrow().currency.code;const a=o.getPaymentMethodOrThrow(r),{clientToken:s,config:c,initializationData:u}=a;if(!s||!u)throw new ar(rr.MissingPaymentMethod);const d={currency:i,intent:u.intent,isCreditEnabled:u.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(d,e=>{this.renderPayPalButton(e,t,n,r,!!c.testMode)},e=>this.handleError(e,n,t.onError))})}deinitialize(){return po(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}renderPayPalButton(e,t,n,r,i){const{style:o,shouldProcessPayment:a,onAuthorizeError:s,onEligibilityFailure:c}=t,{paypal:u}=this.braintreeHostWindow;let d=!1;u&&[u.FUNDING.PAYLATER,u.FUNDING.CREDIT].forEach(l=>{const p=l===u.FUNDING.CREDIT?Object.assign({label:eo.CREDIT},oo(o)):oo(o);if(!d){const o=u.Buttons({env:i?\"sandbox\":\"production\",fundingSource:l,style:p,createOrder:()=>this.setupPayment(e,t,r),onApprove:t=>this.tokenizePayment(t,e,r,a,s)});o.isEligible()?(o.render(`#${n}`),d=!0):u.FUNDING.CREDIT&&c&&\"function\"==typeof c&&c()}}),u&&d||this.braintreeIntegrationService.removeElement(n)}setupPayment(e,t,n){var r;return po(this,void 0,void 0,function*(){const{onPaymentError:i,shippingAddress:o,buyNowInitializeOptions:s}=t;try{const i=\"function\"==typeof(null==s?void 0:s.getBuyNowCartRequestBody)?yield this.createBuyNowCart(s.getBuyNowCartRequestBody()):void 0;this.buyNowCartId=null==i?void 0:i.id;const a=this.paymentIntegrationService.getState(),c=a.getCustomer(),u=a.getPaymentMethodOrThrow(n),d=i?i.cartAmount:a.getCartOrThrow().cartAmount,l=i?t.currencyCode:a.getCartOrThrow().currency.code,p=o||(null==c?void 0:c.addresses[0]),h=p?so(p):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:h,amount:d,currency:l,offerCredit:!0,intent:null===(r=u.initializationData)||void 0===r?void 0:r.intent})}catch(e){throw i&&(Wr(e)||e instanceof a)&&i(e),e}})}tokenizePayment(e,t,n,r,i){return po(this,void 0,void 0,function*(){try{const{deviceData:i}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),o=yield t.tokenizePayment(e),{details:a,nonce:s}=o,c=this.braintreeIntegrationService.mapToLegacyBillingAddress(a),u=this.braintreeIntegrationService.mapToLegacyShippingAddress(a);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",provider:n,action:r?\"process_payment\":\"set_external_checkout\",nonce:s,device_data:i,billing_address:JSON.stringify(c),shipping_address:JSON.stringify(u)},this.buyNowCartId&&{cart_id:this.buyNowCartId})),o}catch(e){throw i&&(Wr(e)||e instanceof a)&&i(e),e}})}createBuyNowCart(e){return po(this,void 0,void 0,function*(){if(!e)throw new ar(rr.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(e)}catch(e){throw new Cr}})}handleError(e,t,n){if(this.braintreeIntegrationService.removeElement(t),!n||!Wr(e))throw e;n(e)}}const fo=Sr(e=>{const t=window,n=new zr(e),r=new io(new ni((0,or.vQ)(),t,n),t);return new ho(e,(0,i.createFormPoster)(),r,t)},[{id:\"braintreepaypalcredit\"}]);var yo=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class mo{constructor(e,t,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=n}initialize(e){return yo(this,void 0,void 0,function*(){const{containerId:t,methodId:n}=e;if(!n)throw new wr('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new wr('Unable to initialize payment because \"options.containerId\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const r=this.paymentIntegrationService.getState(),{clientToken:i,initializationData:o,config:a}=r.getPaymentMethodOrThrow(n);if(!i||!o)throw new ar(rr.MissingPaymentMethod);this.braintreeSdk.initialize(i);const s=yield this.braintreeSdk.getBraintreeVisaCheckout(),{currency:{code:c},cartAmount:u}=r.getCartOrThrow(),d=yield this.braintreeSdk.getVisaCheckoutSdk(a.testMode),l=s.createInitOptions({paymentRequest:{currencyCode:c,subtotal:String(u)},settings:{shipping:{collectShipping:!0}}});this.createSignInButton(t),yield d.init(l),d.on(\"payment.success\",e=>yo(this,void 0,void 0,function*(){yield this.paymentSuccess(s,e)}))})}deinitialize(){return Promise.resolve()}paymentSuccess(e,t){return yo(this,void 0,void 0,function*(){return Promise.all([e.tokenize(t),this.braintreeSdk.getDataCollectorOrThrow()]).then(([e,t])=>{const n=this.paymentIntegrationService.getState(),r=n.getShippingAddress(),i=n.getBillingAddress(),{shippingAddress:o=this.toVisaCheckoutAddress(r),billingAddress:a=this.toVisaCheckoutAddress(i)}=e;return this.postForm(Object.assign(Object.assign({},e),{shippingAddress:o,billingAddress:a}),t)})})}postForm(e,t){const{userData:n,billingAddress:r,shippingAddress:i,details:o}=e,{userEmail:a}=n,{deviceData:s}=t;return this.formPoster.postForm(\"/checkout.php\",{payment_type:e.type,nonce:e.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,r)),shipping_address:JSON.stringify(this.getAddress(a,i))})}toVisaCheckoutAddress(e){return e?{firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phone,streetAddress:e.address1,extendedAddress:e.address2,locality:e.city,region:e.stateOrProvinceCode,countryCode:e.countryCode,postalCode:e.postalCode}:{}}getAddress(e,t={}){return{email:e,first_name:t.firstName,last_name:t.lastName,phone_number:t.phoneNumber,address_line_1:t.streetAddress,address_line_2:t.extendedAddress,city:t.locality,state:t.region,country_code:t.countryCode,postal_code:t.postalCode}}createSignInButton(e){const t=document.querySelector(`#${e}`);if(!t)throw new Error(\"Need a container to place the button\");return this.insertVisaCheckoutButton(t)}insertVisaCheckoutButton(e){const t=document.createElement(\"div\");return t.style.display=\"flex\",t.style.flexDirection=\"column\",t.style.alignItems=\"flex-end\",t.innerHTML='\\n            <img\\n                alt=\"Visa Checkout\"\\n                class=\"v-button\"\\n                role=\"button\"\\n                src=\"https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178\"\\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>',e.appendChild(t),t}}const go=Sr(e=>{const t=window,n=new zr(e),r=new Qr(new ni((0,or.vQ)(),t,n));return new mo(e,(0,i.createFormPoster)(),r)},[{id:\"braintreevisacheckout\"}]);function vo(e){const{billingAddress:t,email:n,firstName:r,lastName:i,phone:o,shippingAddress:a}=e,s=t||a;return{email:n,first_name:r,last_name:i,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}function _o(e){const{email:t,phone:n,shippingAddress:r}=e,i=(null==r?void 0:r.recipientName)||\"\",[o,a]=i.split(\" \");return{email:t,first_name:o||\"\",last_name:a||\"\",phone_number:n,address_line_1:null==r?void 0:r.line1,address_line_2:null==r?void 0:r.line2,city:null==r?void 0:r.city,state:null==r?void 0:r.state,country_code:null==r?void 0:r.countryCode,postal_code:null==r?void 0:r.postalCode}}var bo=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};const So=e=>{const{color:t,height:n}=e;return{backgroundColor:(r=t||\"\",r===Xi.WHITE?\"#FFFFFF\":\"#3D95CE\"),backgroundPosition:\"50% 50%\",backgroundSize:\"80px auto\",backgroundImage:`url(\"/app/assets/img/payment-providers/venmo-logo-${t===Xi.WHITE?Xi.BLUE:Xi.WHITE}.svg\")`,backgroundRepeat:\"no-repeat\",borderRadius:\"4px\",cursor:\"pointer\",transition:\"0.2s ease\",minHeight:`${n||40}px`,minWidth:\"150px\",height:\"100%\",width:\"100%\",border:t===Xi.WHITE?\"1px solid black\":\"none\"};var r};class wo{constructor(e,t,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=n,this.onError=f.noop}initialize(e){return bo(this,void 0,void 0,function*(){const{braintreevenmo:t,containerId:n,methodId:r}=e;if(!r)throw new wr('Unable to initialize payment because \"options.methodId\" argument is not provided.');const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r),{clientToken:o,initializationData:a}=i,{paymentButtonStyles:s}=a,{cartButtonStyles:c}=s||{},u=(null==t?void 0:t.style)||c;if(!o||!a)throw new ar(rr.MissingPaymentMethod);if(!n)throw new wr('Unable to initialize payment because \"options.containerId\" argument is not provided.');yield this.paymentIntegrationService.loadDefaultCheckout(),this.onError=(null==t?void 0:t.onError)||this.handleError,this.braintreeSdk.initialize(o);try{const e=yield this.braintreeSdk.getVenmoCheckoutOrThrow();this.renderVenmoButton(e,n,null==t?void 0:t.buyNowInitializeOptions,u)}catch(e){(function(e){return\"object\"==typeof e&&null!==e&&\"name\"in e&&\"BraintreeError\"===e.name}(e)||function(e){return e instanceof Fr}(e))&&this.handleInitializationVenmoError(e,n)}})}deinitialize(){return bo(this,void 0,void 0,function*(){return yield this.braintreeSdk.deinitialize(),Promise.resolve()})}handleError(e){throw new Error(e.message)}createBuyNowCart(e){return bo(this,void 0,void 0,function*(){if(\"function\"==typeof(null==e?void 0:e.getBuyNowCartRequestBody)){const t=null==e?void 0:e.getBuyNowCartRequestBody();if(!t)throw new ar(rr.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new Cr}}})}handleInitializationVenmoError(e,t){return this.removeVenmoContainer(t),this.onError(e)}removeVenmoContainer(e){const t=document.getElementById(e);t&&t.remove()}renderVenmoButton(e,t,n,r){const i=document.getElementById(t),{color:o}=r||{};if(!i)throw new wr(\"Unable to create wallet button without valid container ID.\");i.setAttribute(\"aria-label\",\"Venmo\"),Object.assign(i.style,So(r||{})),i.addEventListener(\"click\",()=>bo(this,void 0,void 0,function*(){i.setAttribute(\"disabled\",\"true\");const t=yield this.createBuyNowCart(n);e.tokenize&&e.tokenize((e,n)=>bo(this,void 0,void 0,function*(){i.removeAttribute(\"disabled\"),e&&this.onError(e),yield this.handlePostForm(n,null==t?void 0:t.id)}))})),o===Xi.BLUE&&(i.addEventListener(\"mouseenter\",()=>{i.style.backgroundColor=\"#0a7fc2\"}),i.addEventListener(\"mouseleave\",()=>{i.style.backgroundColor=So(r||{}).backgroundColor}))}handlePostForm(e,t){return bo(this,void 0,void 0,function*(){const{deviceData:n}=yield this.braintreeSdk.getDataCollectorOrThrow(),{nonce:r,details:i}=e;this.formPoster.postForm(\"/checkout.php\",Object.assign({nonce:r,provider:\"braintreevenmo\",payment_type:\"paypal\",device_data:n,action:\"set_external_checkout\",billing_address:JSON.stringify(vo(i)),shipping_address:JSON.stringify(_o(i))},t&&{cart_id:t}))})}}const Co=Sr(e=>{const t=window,n=(0,or.vQ)(),r=new zr(e),o=new ni(n,t,r),a=new Qr(o);return new wo(e,(0,i.createFormPoster)(),a)},[{id:\"braintreevenmo\"}]);var Io;!function(e){e.ADYEN_V2=\"googlepayadyenv2\",e.ADYEN_V3=\"googlepayadyenv3\",e.AUTHORIZE_NET=\"googlepayauthorizenet\",e.BNZ=\"googlepaybnz\",e.BRAINTREE=\"googlepaybraintree\",e.PAYPAL_COMMERCE=\"googlepaypaypalcommerce\",e.BIGCOMMERCE_PAYMENTS=\"googlepay_bigcommerce_payments\",e.CHECKOUT_COM=\"googlepaycheckoutcom\",e.CYBERSOURCE_V2=\"googlepaycybersourcev2\",e.ORBITAL=\"googlepayorbital\",e.STRIPE=\"googlepaystripe\",e.STRIPE_UPE=\"googlepaystripeupe\",e.STRIPE_OCS=\"googlepaystripeocs\",e.WORLDPAY_ACCESS=\"googlepayworldpayaccess\",e.TD_ONLINE_MART=\"googlepaytdonlinemart\"}(Io||(Io={}));const Eo=function(e,t,n){return t&&n?Po(0,t,n):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const r=Object.getOwnPropertyDescriptor(e.prototype,n);r&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,Po(e.prototype,n,r))}),t}(e)};function Po(e,t,n){if(\"function\"!=typeof n.value)return n;let r=n.value;return{get(){const e=r.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){r=e}}}class Oo{constructor(e){if(!e)throw new Error(\"Currency settings missing\");const{decimalPlaces:t,symbolLocation:n,symbol:r,thousandsSeparator:i,decimalSeparator:o}=e;if(\"string\"!=typeof n||\"string\"!=typeof r||\"string\"!=typeof i||\"string\"!=typeof o||\"string\"!=typeof t)throw new wr(\"Invalid currency settings provided\");this._decimalPlaces=parseInt(t,10),this._symbolLocation=n,this._symbol=r,this._thousandsSeparator=i,this._decimalSeparator=o}format(e){if(\"number\"!=typeof e)throw new wr(\"Invalid amount provided\");const t=this._formatNumber(e),n=this._formatCurrency(t);return e<0?`-${n}`:n}_formatNumber(e){const t=Math.abs(e),[n,r=\"\"]=this._toFixed(t,this._decimalPlaces).split(\".\"),i=n.replace(/\\B(?=(\\d{3})+(?!\\d))/g,this._thousandsSeparator);return this._decimalPlaces<1?i:[i,r].join(this._decimalSeparator)}_formatCurrency(e){return\"left\"===this._symbolLocation.toLowerCase()?`${this._symbol}${e}`:`${e}${this._symbol}`}_toFixed(e,t){return(+`${Math.round(+`${e}e${t}`)}e${-t}`).toFixed(t)}}let Ao=class{constructor(e){this._storeConfig=e,this._customerFormatter=new Oo(this._storeConfig.shopperCurrency),this._storeFormatter=new Oo(this._storeConfig.currency)}toCustomerCurrency(e){const t=this._storeConfig.shopperCurrency.exchangeRate;return this._customerFormatter.format(e*t)}toStoreCurrency(e){return this._storeFormatter.format(e)}};Ao=function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Eo],Ao);const To=Ao;function ko(){if(\"undefined\"==typeof window)return!1;if(function(e){return\"ReactNativeWebView\"in e}(window))return!0;const e=navigator.userAgent||navigator.vendor||(function(e){return\"opera\"in e}(window)?window.opera:\"\"),t=/android.+; wv/i.test(e),n=/iPhone|iPod|iPad/i.test(e)&&/AppleWebKit/i.test(e)&&!/Safari/i.test(e);return t||n}var Ro,Mo,xo,No,Do,jo,Lo,zo,Fo;function Bo(e){return e in jo}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Ro||(Ro={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(Mo||(Mo={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(xo||(xo={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(No||(No={})),function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(Do||(Do={})),function(e){e.AMEX=\"AMEX\",e.DISCOVER=\"DISCOVER\",e.INTERAC=\"INTERAC\",e.JCB=\"JCB\",e.MC=\"MASTERCARD\",e.VISA=\"VISA\"}(jo||(jo={})),function(e){e.OFFER=\"OFFER\",e.PAYMENT_AUTHORIZATION=\"PAYMENT_AUTHORIZATION\",e.SHIPPING_ADDRESS=\"SHIPPING_ADDRESS\",e.SHIPPING_OPTION=\"SHIPPING_OPTION\"}(Lo||(Lo={})),function(e){e.OFFER_INVALID=\"OFFER_INVALID\",e.PAYMENT_DATA_INVALID=\"PAYMENT_DATA_INVALID\",e.SHIPPING_ADDRESS_INVALID=\"SHIPPING_ADDRESS_INVALID\",e.SHIPPING_ADDRESS_UNSERVICEABLE=\"SHIPPING_ADDRESS_UNSERVICEABLE\",e.SHIPPING_OPTION_INVALID=\"SHIPPING_OPTION_INVALID\",e.OTHER_ERROR=\"OTHER_ERROR\"}(zo||(zo={})),function(e){e.INITIALIZE=\"INITIALIZE\",e.SHIPPING_OPTION=\"SHIPPING_OPTION\",e.SHIPPING_ADDRESS=\"SHIPPING_ADDRESS\",e.OFFER=\"OFFER\"}(Fo||(Fo={}));var Uo=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class qo{constructor(e,t){this._gatewayIdentifier=e,this._paymentIntegrationService=t,this._isBuyNowFlow=!1,this._shouldRequestShipping=!0,this._isWebViewExperimentOn=null}mapToShippingAddressRequestBody({shippingAddress:e}){if(!e)return;const{company:t=\"\",phone:n=\"\"}=this._paymentIntegrationService.getState().getShippingAddress()||{};return this._mapToAddressRequestBody(e,t,n)}mapToBillingAddressRequestBody(e){const{billingAddress:t}=e.paymentMethodData.info;if(!t)return;const{company:n=\"\",phone:r=\"\",email:i,customFields:o=[]}=this._paymentIntegrationService.getState().getBillingAddress()||{};return Object.assign(Object.assign({},this._mapToAddressRequestBody(t,n,r,o)),{email:i||e.email})}mapToExternalCheckoutData(e){var t;const{paymentMethodData:{tokenizationData:{token:n},info:{cardNetwork:r,cardDetails:i}}}=e;if(!n)throw new ar(rr.MissingPaymentToken);return Promise.resolve(Object.assign({nonce:n,card_information:{type:r,number:i}},this._isBuyNowFlow&&{cart_id:null===(t=this._paymentIntegrationService.getState().getCart())||void 0===t?void 0:t.id}))}getRequiredData(){var e;return Uo(this,void 0,void 0,function*(){const t={emailRequired:!0};if(!this._isShippingAddressRequired())return t;const n=yield this._paymentIntegrationService.loadShippingCountries(),r=null===(e=n.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code);return Object.assign(Object.assign({},t),{shippingAddressRequired:!0,shippingAddressParameters:Object.assign({phoneNumberRequired:!0},r&&{allowedCountryCodes:r}),shippingOptionRequired:!0})})}getCallbackIntents(){return this._isShippingAddressRequired()?[Lo.OFFER,Lo.SHIPPING_ADDRESS,Lo.SHIPPING_OPTION]:[Lo.OFFER]}getCallbackTriggers(){return{availableTriggers:[Fo.INITIALIZE,Fo.SHIPPING_ADDRESS,Fo.SHIPPING_OPTION,Fo.OFFER],initializationTrigger:[Fo.INITIALIZE],addressChangeTriggers:[Fo.INITIALIZE,Fo.SHIPPING_ADDRESS],shippingOptionsChangeTriggers:[Fo.SHIPPING_OPTION],offerChangeTriggers:[Fo.OFFER]}}getNonce(e){var t;const n=null===(t=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e).initializationData)||void 0===t?void 0:t.nonce;if(!n)throw new ar(rr.MissingPaymentToken);return Promise.resolve(n)}extraPaymentData(){return Promise.resolve(void 0)}getMerchantInfo(){const{googleMerchantName:e,googleMerchantId:t,platformToken:n}=this.getGooglePayInitializationData();return{merchantName:e,merchantId:t,authJwt:n}}getTransactionInfo(){let e;const{getCartOrThrow:t}=this._paymentIntegrationService.getState();e=this._isBuyNowFlow?this._getCurrencyCodeOrThrow():t().currency.code;const n=this.getGooglePayInitializationData().storeCountry;if(this.isWebViewWithRestrictions()){const t=this.getTotalPrice();return Object.assign(Object.assign({},n&&{countryCode:n}),{currencyCode:e,totalPrice:t,totalPriceStatus:Do.ESTIMATED})}return Object.assign(Object.assign({},n&&{countryCode:n}),{currencyCode:e,totalPriceStatus:Do.ESTIMATED,totalPrice:\"0\"})}isWebViewWithRestrictions(){return null!==this._isWebViewExperimentOn?this._isWebViewExperimentOn&&ko():ko()}setIsWebViewExperimentOn(e){this._isWebViewExperimentOn=e}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData().gatewayMerchantId;if(!e)throw new wr(\"Unable to proceed, gatewayMerchantId is missing.\");return{gateway:this._gatewayIdentifier,gatewayMerchantId:e}}getCardParameters(){return{allowedAuthMethods:[\"PAN_ONLY\",\"CRYPTOGRAM_3DS\"],allowedCardNetworks:this.getPaymentMethod().supportedCards.filter(Bo).map(e=>jo[e]),billingAddressRequired:!0,billingAddressParameters:{format:\"FULL\",phoneNumberRequired:!0}}}initialize(e,t,n){return this._getPaymentMethodFn=e,this._isBuyNowFlow=Boolean(t),this._currencyCode=n,this._isBuyNowFlow&&this._getCurrencyCodeOrThrow(),Promise.resolve()}handleShippingAddressChange(e){var t,n,r,i;return Uo(this,void 0,void 0,function*(){e&&(e.name=e.name||\"\",e.address1=e.address1||\"\");const o=this.mapToShippingAddressRequestBody({shippingAddress:e});o&&(yield this._paymentIntegrationService.updateShippingAddress(o));const a=this._paymentIntegrationService.getState(),s=a.getConsignments();if(!(null==s?void 0:s[0]))return;const c=s[0],u=a.getStoreConfigOrThrow();this._currencyService||(this._currencyService=new To(u));const d=(c.availableShippingOptions||[]).map(this._getGooglePayShippingOption.bind(this)),l=null===(t=c.availableShippingOptions)||void 0===t?void 0:t.find(e=>e.isRecommended);if(d.length){const e=(null===(n=c.selectedShippingOption)||void 0===n?void 0:n.id)||(null==l?void 0:l.id)||(null===(r=d[0])||void 0===r?void 0:r.id);return!(null===(i=c.selectedShippingOption)||void 0===i?void 0:i.id)&&d[0]&&(yield this.handleShippingOptionChange((null==l?void 0:l.id)||d[0].id)),{defaultSelectedOptionId:e,shippingOptions:d}}})}handleShippingOptionChange(e){return Uo(this,void 0,void 0,function*(){if(\"shipping_option_unselected\"!==e)return this._paymentIntegrationService.selectShippingOption(e)})}getTotalPrice(){const{getCheckoutOrThrow:e,getCartOrThrow:t,getStoreConfigOrThrow:n}=this._paymentIntegrationService.getState(),{decimalPlaces:r}=t().currency,i=Nr(n().checkoutSettings.features,\"PI-5075.google_pay_round_total_price_to_max_2_decimal_places\")?Math.min(r,2):r;return(0,f.round)(e().outstandingBalance,i).toFixed(i)}handleCoupons(e){return Uo(this,void 0,void 0,function*(){const{redemptionCodes:t=[]}=e,{offers:n}=this.getAppliedCoupons()||{};let r;return yield t.reduce((e,t)=>Uo(this,void 0,void 0,function*(){if(yield e,(n||[]).some(({redemptionCode:e})=>e===t))return;const i=yield this.applyCoupon(t);i&&(r=i)}),Promise.resolve()),yield(n||[]).reduce((e,n)=>Uo(this,void 0,void 0,function*(){yield e,t.includes(n.redemptionCode)||(yield this._paymentIntegrationService.removeCoupon(n.redemptionCode))}),Promise.resolve()),{newOfferInfo:this.getAppliedCoupons(),error:r}})}getAppliedCoupons(){const e=this._paymentIntegrationService.getState(),{coupons:t}=e.getCheckout()||{};return{offers:(t||[]).map(e=>{const{displayName:t,code:n}=e;return{redemptionCode:n,description:t}})}}applyCoupon(e){return Uo(this,void 0,void 0,function*(){let t;try{yield this._paymentIntegrationService.applyCoupon(e)}catch(e){return e instanceof Error&&(t={reason:zo.OFFER_INVALID,message:e.message,intent:Fo.OFFER}),t}})}setShouldRequestShipping(e){this._shouldRequestShipping=e}getGooglePayInitializationData(){return cr(this.getPaymentMethod().initializationData,()=>new wr(\"Missing initialization data.\"))}getPaymentMethod(){return cr(this._getPaymentMethodFn,()=>new ur(ir.PaymentNotInitialized))()}getGatewayIdentifier(){return this._gatewayIdentifier}setGatewayIdentifier(e){this._gatewayIdentifier=e||this.getGatewayIdentifier()}_isShippingAddressRequired(){const{getCartOrThrow:e,getStoreConfigOrThrow:t,getShippingAddress:n}=this._paymentIntegrationService.getState(),r=t();let i;return i=Nr(r.checkoutSettings.features,\"PI-4290.google_pay_require_shipping_address\")?this._shouldRequestShipping:void 0===n(),i&&(o=e(),a=r,!!o&&(!!o.lineItems.physicalItems.some(e=>e.isShippingRequired)||!(!a||!o.lineItems.customItems)&&o.lineItems.customItems.length>0));var o,a}_mapToAddressRequestBody(e,t,n,r){const{name:i,address1:o,address2:a,address3:s,locality:c,administrativeArea:u,countryCode:d,postalCode:l,phoneNumber:p}=e,[h,f]=this._getFirstAndLastName(i);return{firstName:h,lastName:f,company:t,address1:o,address2:`${a} ${s}`.trim(),city:c||u,stateOrProvince:u,stateOrProvinceCode:u,countryCode:d,postalCode:l,phone:p||n,customFields:r||[]}}_getFirstAndLastName(e){const t=e.split(\" \");return 1===t.length?[e,\"\"]:[t.slice(0,-1).join(\" \"),t[t.length-1]]}_getCurrencyCodeOrThrow(){return cr(this._currencyCode,()=>new wr('Unable to initialize payment because \"options.currencyCode\" argument is not provided.'))}_getGooglePayShippingOption({id:e,cost:t,description:n,additionalDescription:r}){var i;return{id:e,label:`${(null===(i=this._currencyService)||void 0===i?void 0:i.toCustomerCurrency(t))||t} ${n}`,description:r}}}var Vo=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Go extends qo{constructor(e,t){super(\"braintree\",e),this._braintreeSdk=t,this._methodId=Io.BRAINTREE,this._service=e}initialize(e,t,n){const r=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return Vo(this,void 0,void 0,function*(){yield r.initialize.call(this,e,t,n);let i=r.getPaymentMethod.call(this);if(i.clientToken||(i=(yield this._service.loadPaymentMethod(this._methodId)).getPaymentMethodOrThrow(this._methodId)),!i.clientToken||!i.initializationData)throw new ar(rr.MissingPaymentMethod);return this._braintreeSdk.initialize(i.clientToken),this._braintreeGooglePayment=yield this._braintreeSdk.getBraintreeGooglePayment(),Promise.resolve()})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});var n;return Vo(this,void 0,void 0,function*(){const r=yield t.getNonce.call(this,e),{clientToken:i,initializationData:o}=t.getPaymentMethod.call(this);if(!i||!o||!(null===(n=o.card_information)||void 0===n?void 0:n.bin))throw new ar(rr.MissingPaymentMethod);const{isThreeDSecureEnabled:a,card_information:{bin:s,isNetworkTokenized:c}}=o;if(a&&!c){const e=yield this._braintreeSdk.getBraintreeThreeDS(),{orderAmount:t}=this._service.getState().getOrderOrThrow();return(yield this._braintreePresent3DSChallenge(e,t,r,s)).nonce}return r})}extraPaymentData(){return Vo(this,void 0,void 0,function*(){return{deviceSessionId:yield this._getBraintreeDeviceData()}})}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return Vo(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let r;try{r=JSON.parse(n.nonce)}catch(e){throw new wr(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"androidPayCards\"in e}(e))throw new ar(rr.MissingPaymentToken)}(r),n.nonce=r.androidPayCards[0].nonce,n.card_information.bin=r.androidPayCards[0].details.bin,n.card_information.isNetworkTokenized=r.androidPayCards[0].details.isNetworkTokenized,n})}getCardParameters(){return super.getCardParameters()}getPaymentGatewayParameters(){const e=Object.create(null,{getMerchantInfo:{get:()=>super.getMerchantInfo},getTransactionInfo:{get:()=>super.getTransactionInfo},getRequiredData:{get:()=>super.getRequiredData}});return Vo(this,void 0,void 0,function*(){return this.getBraintreeGooglePayment().createPaymentDataRequest(Object.assign({merchantInfo:e.getMerchantInfo.call(this),transactionInfo:e.getTransactionInfo.call(this),cardRequirements:{billingAddressRequired:!0,billingAddressFormat:\"FULL\"}},yield e.getRequiredData.call(this))).paymentMethodTokenizationParameters.parameters})}getBraintreeGooglePayment(){if(!this._braintreeGooglePayment)throw new ar(rr.MissingPaymentMethod);return this._braintreeGooglePayment}_getBraintreeDeviceData(){return Vo(this,void 0,void 0,function*(){const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e})}_braintreePresent3DSChallenge(e,t,n,r){return new $i(e.verifyCard({amount:t,bin:r,nonce:n,onLookupComplete:(e,t)=>{t()}})).promise}}class Ho extends a{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}var Yo=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Wo{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t}initialize(e){var t,n,r;return Yo(this,void 0,void 0,function*(){if(!e.methodId||(i=e.methodId,!Object.values(Io).includes(i)))throw new wr('Unable to proceed because \"methodId\" is not a valid key.');var i;if(this._methodId=e.methodId,!e.containerId)throw new wr('Unable to proceed because \"containerId\" is not a valid key.');const o=e[this._getMethodOrThrow()];if(!o)throw new wr(\"Unable to proceed without valid options.\");const{buyNowInitializeOptions:a,currencyCode:s,buttonColor:c,buttonType:u,onError:d}=o;let l,p=this._paymentIntegrationService.getState();try{l=p.getPaymentMethodOrThrow(this._getMethodOrThrow())}catch(e){p=yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodOrThrow()),l=p.getPaymentMethodOrThrow(this._getMethodOrThrow())}if(this._countryCode=null===(t=l.initializationData)||void 0===t?void 0:t.storeCountry,this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(n=l.initializationData)||void 0===n?void 0:n.isWebViewExperimentOn)),a){if(!s)throw new wr('Unable to initialize payment because \"options.currencyCode\" argument is not provided.');this._currencyCode=s,this._buyNowInitializeOptions=a,yield this._googlePayPaymentProcessor.initialize(()=>l,this._getGooglePayClientOptions(),!!a,s)}else yield this._paymentIntegrationService.loadDefaultCheckout(),yield this._googlePayPaymentProcessor.initialize(()=>l,this._getGooglePayClientOptions());this._paymentButton=null!==(r=this._paymentButton)&&void 0!==r?r:this._googlePayPaymentProcessor.addPaymentButton(e.containerId,{buttonColor:null!=c?c:\"default\",buttonType:null!=u?u:\"plain\",onClick:this._handleClick(d)})})}deinitialize(){var e;return null===(e=this._paymentButton)||void 0===e||e.remove(),this._paymentButton=void 0,this._methodId=void 0,Promise.resolve()}_handleClick(e){return t=>Yo(this,void 0,void 0,function*(){t.preventDefault();try{this._buyNowInitializeOptions?yield this._createBuyNowCartOrThrow(this._buyNowInitializeOptions):yield this._paymentIntegrationService.loadDefaultCheckout(),yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheet()}catch(t){let n=t;if(function(e){return\"object\"==typeof e&&null!==e&&\"statusCode\"in e}(t)){if(\"CANCELED\"===t.statusCode)throw new ri;n=new Ho(JSON.stringify(t))}throw null==e||e(new Ho(\"An error occurred while requesting your Google Pay payment details.\")),n}})}_interactWithPaymentSheet(){var e;return Yo(this,void 0,void 0,function*(){const t=yield this._googlePayPaymentProcessor.showPaymentSheet(),n=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(t),r=this._googlePayPaymentProcessor.mapToShippingAddressRequestBody(t),i=\"/embedded-checkout\"===window.location.pathname?this._paymentIntegrationService.getState().getStoreConfigOrThrow().links.siteLink:void 0;n&&(yield this._paymentIntegrationService.updateBillingAddress(n)),r&&!(null===(e=this._buyNowCart)||void 0===e?void 0:e.lineItems.digitalItems.length)&&(yield this._paymentIntegrationService.updateShippingAddress(r)),yield this._googlePayPaymentProcessor.setExternalCheckoutForm(this._getMethodOrThrow(),t,i)})}_getGooglePayClientOptions(){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:e,shippingAddress:t,shippingOptionData:n,offerData:r})=>Yo(this,void 0,void 0,function*(){const{availableTriggers:i,addressChangeTriggers:o,shippingOptionsChangeTriggers:a,offerChangeTriggers:s}=this._googlePayPaymentProcessor.getCallbackTriggers();if(!i.includes(e))return;const c=o.includes(e)?yield this._googlePayPaymentProcessor.handleShippingAddressChange(t):void 0;a.includes(e)&&(yield this._googlePayPaymentProcessor.handleShippingOptionChange(n.id));const{newOfferInfo:u,error:d}=s.includes(e)?yield this._googlePayPaymentProcessor.handleCoupons(r):{},l=d;return this._buyNowInitializeOptions?this._getBuyNowTransactionInfo(c,u,l):this._getTransactionInfo(c,u,l)})}}}_createBuyNowCartOrThrow(e){return Yo(this,void 0,void 0,function*(){if(\"function\"==typeof(null==e?void 0:e.getBuyNowCartRequestBody)){const t=e.getBuyNowCartRequestBody();try{this._buyNowCart=yield this._paymentIntegrationService.createBuyNowCart(t),yield this._paymentIntegrationService.loadCheckout(this._buyNowCart.id)}catch(e){if(\"string\"==typeof e)throw new Cr(e);throw e}}})}_getBuyNowTransactionInfo(e,t,n){if(!this._buyNowCart)return;const{cartAmount:r}=this._buyNowCart,i=this._googlePayPaymentProcessor.getTotalPrice();return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},this._countryCode&&{countryCode:this._countryCode}),{currencyCode:this._getCurrencyCodeOrThrow(),totalPrice:i||String(r),totalPriceStatus:Do.FINAL})},e&&{newShippingOptionParameters:e}),t&&{newOfferInfo:t}),n&&{error:n})}_getTransactionInfo(e,t,n){return Yo(this,void 0,void 0,function*(){yield this._paymentIntegrationService.loadCheckout();const r=this._googlePayPaymentProcessor.getTotalPrice(),{code:i}=this._paymentIntegrationService.getState().getCartOrThrow().currency;return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},this._countryCode&&{countryCode:this._countryCode}),{currencyCode:i,totalPriceStatus:Do.FINAL,totalPrice:r})},e&&{newShippingOptionParameters:e}),t&&{newOfferInfo:t}),n&&{error:n})})}_getMethodOrThrow(){return cr(this._methodId,()=>new ur(ir.PaymentNotInitialized))}_getCurrencyCodeOrThrow(){return cr(this._currencyCode,()=>new wr('Unable to initialize payment because \"options.currencyCode\" argument is not provided.'))}}var $o=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Ko{constructor(e,t,n,r){this._scriptLoader=e,this._gateway=t,this._requestSender=n,this._formPoster=r,this._baseRequest={apiVersion:2,apiVersionMinor:0}}initialize(e,t,n,r){return $o(this,void 0,void 0,function*(){this._paymentsClient=yield this._scriptLoader.getGooglePaymentsClient(e().config.testMode,t),yield this._gateway.initialize(e,n,r),this._buildButtonPayloads()})}initializeWidget(){return $o(this,void 0,void 0,function*(){yield this._buildWidgetPayloads(),yield this._determineReadinessToPay(),this._prefetchGooglePaymentData()})}getNonce(e){return this._gateway.getNonce(e)}extraPaymentData(){return $o(this,void 0,void 0,function*(){return this._gateway.extraPaymentData()})}addPaymentButton(e,t){const n=document.querySelector(`#${e}`);if(!n)return;const r=this._getPaymentsClient().createButton(Object.assign(Object.assign({},t),{allowedPaymentMethods:[this._getBaseCardPaymentMethod()]}));return n.appendChild(r)}showPaymentSheet(){return $o(this,void 0,void 0,function*(){const e=this._getPaymentDataRequest();return this._getPaymentsClient().loadPaymentData(e)})}setExternalCheckoutXhr(e,t){return $o(this,void 0,void 0,function*(){return this._setExternalCheckout(e,t)})}setExternalCheckoutForm(e,t,n){return $o(this,void 0,void 0,function*(){return this._setExternalCheckout(e,t,!0,n)})}mapToBillingAddressRequestBody(e){return this._gateway.mapToBillingAddressRequestBody(e)}mapToShippingAddressRequestBody(e){return this._gateway.mapToShippingAddressRequestBody(e)}processAdditionalAction(e,t){return\"processAdditionalAction\"in this._gateway?this._gateway.processAdditionalAction(e,t):Promise.reject(e)}signOut(e){return $o(this,void 0,void 0,function*(){yield this._requestSender.get(`/remote-checkout/${e}/signout`)})}getCallbackTriggers(){return this._gateway.getCallbackTriggers()}setShouldRequestShipping(e){return this._gateway.setShouldRequestShipping(e)}handleShippingAddressChange(e){return $o(this,void 0,void 0,function*(){return this._gateway.handleShippingAddressChange(e)})}handleShippingOptionChange(e){return $o(this,void 0,void 0,function*(){yield this._gateway.handleShippingOptionChange(e)})}handleCoupons(e){return $o(this,void 0,void 0,function*(){return this._gateway.handleCoupons(e)})}getTotalPrice(){return this._gateway.getTotalPrice()}_setExternalCheckout(e,t,n=!1,r){return $o(this,void 0,void 0,function*(){const i=\"/checkout.php\",o=Object.assign({action:\"set_external_checkout\",provider:e},yield this._gateway.mapToExternalCheckoutData(t));if(n)return new Promise(e=>{this._formPoster.postForm(r?`${r}/checkout`:i,Object.assign(Object.assign({},o),{card_information:JSON.stringify(o.card_information)}),e)});yield this._requestSender.post(i,{headers:Object.assign({Accept:\"text/html\",\"Content-Type\":\"application/x-www-form-urlencoded\"},Rr),body:o})})}isWebViewWithRestrictions(){return this._gateway.isWebViewWithRestrictions()}setIsWebViewExperimentOn(e){return this._gateway.setIsWebViewExperimentOn(e)}_prefetchGooglePaymentData(){const e=this._getPaymentDataRequest();e.transactionInfo=this._gateway.getTransactionInfo(),this._getPaymentsClient().prefetchPaymentData(e)}_determineReadinessToPay(){return $o(this,void 0,void 0,function*(){try{const{result:e}=yield this._getPaymentsClient().isReadyToPay(this._getIsReadyToPayRequest());if(!1===e)throw new Ho(\"Google Pay is not supported by the current device and browser, please try another payment method.\")}catch(e){if(e instanceof Ho)throw e;throw new Ho}})}_buildButtonPayloads(){this._baseCardPaymentMethod={type:\"CARD\",parameters:this._gateway.getCardParameters()}}_buildWidgetPayloads(){return $o(this,void 0,void 0,function*(){const e=this._getBaseCardPaymentMethod();this._cardPaymentMethod=Object.assign(Object.assign({},e),{tokenizationSpecification:{type:\"PAYMENT_GATEWAY\",parameters:yield this._gateway.getPaymentGatewayParameters()}});const t=this._gateway.isWebViewWithRestrictions()?{shippingOptionRequired:!1}:{callbackIntents:this._gateway.getCallbackIntents(),offerInfo:this._gateway.getAppliedCoupons()};this._paymentDataRequest=Object.assign(Object.assign(Object.assign(Object.assign({},this._baseRequest),{allowedPaymentMethods:[this._cardPaymentMethod],transactionInfo:this._gateway.getTransactionInfo(),merchantInfo:this._gateway.getMerchantInfo()}),yield this._gateway.getRequiredData()),t),this._isReadyToPayRequest=Object.assign(Object.assign({},this._baseRequest),{allowedPaymentMethods:[e]})})}_getBaseCardPaymentMethod(){return this._getOrThrow(this._baseCardPaymentMethod)}_getPaymentDataRequest(){return this._getOrThrow(this._paymentDataRequest)}_getIsReadyToPayRequest(){return this._getOrThrow(this._isReadyToPayRequest)}_getPaymentsClient(){return this._getOrThrow(this._paymentsClient)}_getOrThrow(e){return cr(e,()=>new ur(ir.PaymentNotInitialized))}}class Zo{constructor(e){this._scriptLoader=e,this._window=window}getGooglePaymentsClient(e=!1,t){return n=this,r=void 0,o=function*(){if(yield this._scriptLoader.loadScript(\"https://pay.google.com/gp/p/js/pay.js\"),!this._window.google)throw new _r;return void 0===this._paymentsClient&&(this._paymentsClient=new this._window.google.payments.api.PaymentsClient(Object.assign({environment:e?\"TEST\":\"PRODUCTION\"},null!=t?t:{}))),this._paymentsClient},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}}function Jo(){return new Zo((0,or.vQ)())}const Qo=Sr(e=>{const n=(0,t.createRequestSender)(),r=window,o=new zr(e),a=new Qr(new ni((0,or.vQ)(),r,o));return new Wo(e,new Ko(Jo(),new Go(e,a),n,(0,i.createFormPoster)()))},[{id:\"googlepaybraintree\"}]),Xo=[\"ar_BH\",\"ar_DZ\",\"ar_EG\",\"ar_JO\",\"ar_KW\",\"ar_MA\",\"ar_OM\",\"ar_QA\",\"ar_SA\",\"ar_TN\",\"ar_YE\",\"ar_AE\",\"bg_BG\",\"cs_CZ\",\"da_DK\",\"da_FO\",\"da_GL\",\"de_AT\",\"de_CH\",\"de_DE\",\"de_LU\",\"el_GR\",\"en_AD\",\"en_AE\",\"en_AG\",\"en_AI\",\"en_AL\",\"en_AM\",\"en_AN\",\"en_AO\",\"en_AT\",\"en_AU\",\"en_AW\",\"en_AZ\",\"en_BB\",\"en_BE\",\"en_BH\",\"en_BJ\",\"en_BM\",\"en_BN\",\"en_BS\",\"en_BT\",\"en_BW\",\"en_BY\",\"en_BZ\",\"en_C2\",\"en_CA\",\"en_CD\",\"en_CG\",\"en_CH\",\"en_CI\",\"en_CK\",\"en_CL\",\"en_CM\",\"en_CN\",\"en_CO\",\"en_CR\",\"en_CV\",\"en_CY\",\"en_CZ\",\"en_DE\",\"en_DJ\",\"en_DK\",\"en_DM\",\"en_DO\",\"en_DZ\",\"en_EC\",\"en_EE\",\"en_EG\",\"en_ER\",\"en_ES\",\"en_ET\",\"en_FI\",\"en_FJ\",\"en_FK\",\"en_FM\",\"en_FO\",\"en_FR\",\"en_GA\",\"en_GB\",\"en_GD\",\"en_GE\",\"en_GF\",\"en_GI\",\"en_GL\",\"en_GM\",\"en_GN\",\"en_GP\",\"en_GR\",\"en_GT\",\"en_GW\",\"en_GY\",\"en_HK\",\"en_HN\",\"en_HR\",\"en_HU\",\"en_ID\",\"en_IE\",\"en_IL\",\"en_IN\",\"en_IS\",\"en_IT\",\"en_JM\",\"en_JO\",\"en_JP\",\"en_KE\",\"en_KG\",\"en_KH\",\"en_KI\",\"en_KM\",\"en_KN\",\"en_KR\",\"en_KW\",\"en_KY\",\"en_KZ\",\"en_LA\",\"en_LC\",\"en_LI\",\"en_LK\",\"en_LS\",\"en_LT\",\"en_LU\",\"en_LV\",\"en_MA\",\"en_MC\",\"en_MD\",\"en_ME\",\"en_MG\",\"en_MH\",\"en_MK\",\"en_ML\",\"en_MN\",\"en_MQ\",\"en_MR\",\"en_MS\",\"en_MT\",\"en_MU\",\"en_MV\",\"en_MW\",\"en_MY\",\"en_MZ\",\"en_NA\",\"en_NC\",\"en_NE\",\"en_NF\",\"en_NG\",\"en_NI\",\"en_NL\",\"en_NO\",\"en_NP\",\"en_NR\",\"en_NU\",\"en_NZ\",\"en_OM\",\"en_PA\",\"en_PE\",\"en_PF\",\"en_PG\",\"en_PH\",\"en_PL\",\"en_PM\",\"en_PN\",\"en_PT\",\"en_PW\",\"en_PY\",\"en_QA\",\"en_RE\",\"en_RO\",\"en_RS\",\"en_RU\",\"en_RW\",\"en_SA\",\"en_SB\",\"en_SC\",\"en_SE\",\"en_SG\",\"en_SH\",\"en_SI\",\"en_SJ\",\"en_SK\",\"en_SL\",\"en_SM\",\"en_SN\",\"en_SO\",\"en_SR\",\"en_ST\",\"en_SV\",\"en_SZ\",\"en_TC\",\"en_TD\",\"en_TG\",\"en_TH\",\"en_TJ\",\"en_TM\",\"en_TN\",\"en_TO\",\"en_TR\",\"en_TT\",\"en_TV\",\"en_TW\",\"en_TZ\",\"en_UA\",\"en_UG\",\"en_US\",\"en_UY\",\"en_VA\",\"en_VC\",\"en_VE\",\"en_VG\",\"en_VN\",\"en_VU\",\"en_WF\",\"en_WS\",\"en_YE\",\"en_YT\",\"en_ZA\",\"en_ZM\",\"en_ZW\",\"es_AD\",\"es_AI\",\"es_AO\",\"es_AR\",\"es_AW\",\"es_BB\",\"es_BJ\",\"es_BM\",\"es_BO\",\"es_BS\",\"es_BZ\",\"es_CD\",\"es_CG\",\"es_CK\",\"es_CL\",\"es_CO\",\"es_CR\",\"es_CV\",\"es_DJ\",\"es_DM\",\"es_DO\",\"es_DZ\",\"es_EC\",\"es_EG\",\"es_ER\",\"es_ES\",\"es_ET\",\"es_FJ\",\"es_FK\",\"es_FO\",\"es_GA\",\"es_GD\",\"es_GE\",\"es_GI\",\"es_GL\",\"es_GM\",\"es_GN\",\"es_GT\",\"es_GW\",\"es_GY\",\"es_HN\",\"es_IE\",\"es_JM\",\"es_JO\",\"es_KE\",\"es_KG\",\"es_KI\",\"es_KM\",\"es_KN\",\"es_KW\",\"es_KY\",\"es_KZ\",\"es_LC\",\"es_LI\",\"es_LS\",\"es_LU\",\"es_MA\",\"es_MG\",\"es_MH\",\"es_ML\",\"es_MR\",\"es_MS\",\"es_MU\",\"es_MW\",\"es_MX\",\"es_MZ\",\"es_NA\",\"es_NC\",\"es_NE\",\"es_NF\",\"es_NI\",\"es_NR\",\"es_NU\",\"es_NZ\",\"es_OM\",\"es_PA\",\"es_PE\",\"es_PF\",\"es_PG\",\"es_PM\",\"es_PN\",\"es_PW\",\"es_PY\",\"es_QA\",\"es_RS\",\"es_RW\",\"es_SA\",\"es_SB\",\"es_SC\",\"es_SH\",\"es_SJ\",\"es_SL\",\"es_SM\",\"es_SN\",\"es_SO\",\"es_SR\",\"es_ST\",\"es_SV\",\"es_SZ\",\"es_TC\",\"es_TD\",\"es_TG\",\"es_TJ\",\"es_TM\",\"es_TN\",\"es_TT\",\"es_TV\",\"es_UA\",\"es_UG\",\"es_US\",\"es_UY\",\"es_VA\",\"es_VC\",\"es_VE\",\"es_VG\",\"es_VU\",\"es_WF\",\"es_YE\",\"es_ZM\",\"et_EE\",\"fi_FI\",\"fr_AD\",\"fr_AE\",\"fr_AI\",\"fr_AM\",\"fr_AO\",\"fr_AW\",\"fr_AZ\",\"fr_BB\",\"fr_BE\",\"fr_BF\",\"fr_BI\",\"fr_BJ\",\"fr_BM\",\"fr_BS\",\"fr_BZ\",\"fr_CA\",\"fr_CD\",\"fr_CG\",\"fr_CH\",\"fr_CI\",\"fr_CK\",\"fr_CM\",\"fr_CV\",\"fr_DJ\",\"fr_DM\",\"fr_DO\",\"fr_DZ\",\"fr_EC\",\"fr_ER\",\"fr_ET\",\"fr_FJ\",\"fr_FK\",\"fr_FO\",\"fr_FR\",\"fr_GA\",\"fr_GD\",\"fr_GE\",\"fr_GF\",\"fr_GI\",\"fr_GL\",\"fr_GM\",\"fr_GN\",\"fr_GP\",\"fr_GT\",\"fr_GW\",\"fr_GY\",\"fr_HN\",\"fr_IE\",\"fr_JM\",\"fr_JO\",\"fr_KE\",\"fr_KG\",\"fr_KI\",\"fr_KM\",\"fr_KN\",\"fr_KW\",\"fr_KY\",\"fr_KZ\",\"fr_LC\",\"fr_LI\",\"fr_LS\",\"fr_LU\",\"fr_MA\",\"fr_MC\",\"fr_MG\",\"fr_MH\",\"fr_ML\",\"fr_MQ\",\"fr_MR\",\"fr_MS\",\"fr_MU\",\"fr_MW\",\"fr_MZ\",\"fr_NA\",\"fr_NC\",\"fr_NE\",\"fr_NF\",\"fr_NI\",\"fr_NR\",\"fr_NU\",\"fr_NZ\",\"fr_OM\",\"fr_PA\",\"fr_PE\",\"fr_PF\",\"fr_PG\",\"fr_PM\",\"fr_PN\",\"fr_PW\",\"fr_QA\",\"fr_RE\",\"fr_RS\",\"fr_RW\",\"fr_SA\",\"fr_SB\",\"fr_SC\",\"fr_SH\",\"fr_SJ\",\"fr_SL\",\"fr_SM\",\"fr_SN\",\"fr_SO\",\"fr_SR\",\"fr_ST\",\"fr_SV\",\"fr_SZ\",\"fr_TC\",\"fr_TD\",\"fr_TG\",\"fr_TJ\",\"fr_TM\",\"fr_TN\",\"fr_TT\",\"fr_TV\",\"fr_UA\",\"fr_UG\",\"fr_US\",\"fr_UY\",\"fr_VA\",\"fr_VC\",\"fr_VE\",\"fr_VG\",\"fr_VU\",\"fr_WF\",\"fr_YE\",\"fr_YT\",\"fr_ZA\",\"fr_ZM\",\"he_IL\",\"hu_HU\",\"id_ID\",\"it_IT\",\"ja_JP\",\"ko_KR\",\"lv_LV\",\"lt_LT\",\"ms_BN\",\"ms_MY\",\"nl_BE\",\"nl_NL\",\"pl_PL\",\"pt_BR\",\"pt_PT\",\"ro_RO\",\"ru_EE\",\"ru_LT\",\"ru_LV\",\"ru_RU\",\"ru_UA\",\"si_LK\",\"sk_SK\",\"sl_SI\",\"sq_AL\",\"sv_SE\",\"tl_PH\",\"th_TH\",\"tr_TR\",\"vi_VN\",\"zh_C2\",\"zh_CN\",\"zh_HK\",\"zh_TW\",\"zh_AD\",\"zh_AE\",\"zh_AI\",\"zh_AO\",\"zh_AW\",\"zh_BB\",\"zh_BH\",\"zh_BJ\",\"zh_BM\",\"zh_BS\",\"zh_BZ\",\"zh_CD\",\"zh_CG\",\"zh_CK\",\"zh_CL\",\"zh_CO\",\"zh_CV\",\"zh_DJ\",\"zh_DM\",\"zh_DO\",\"zh_DZ\",\"zh_EC\",\"zh_EG\",\"zh_ER\",\"zh_ET\",\"zh_FJ\",\"zh_FK\",\"zh_FO\",\"zh_GA\",\"zh_GD\",\"zh_GE\",\"zh_GI\",\"zh_GL\",\"zh_GM\",\"zh_GN\",\"zh_GT\",\"zh_GW\",\"zh_GY\",\"zh_HN\",\"zh_IE\",\"zh_JM\",\"zh_JO\",\"zh_KE\",\"zh_KG\",\"zh_KI\",\"zh_KM\",\"zh_KN\",\"zh_KW\",\"zh_KY\",\"zh_KZ\",\"zh_LC\",\"zh_LI\",\"zh_LS\",\"zh_LT\",\"zh_LU\",\"zh_MA\",\"zh_MG\",\"zh_MH\",\"zh_ML\",\"zh_MR\",\"zh_MS\",\"zh_MU\",\"zh_MW\",\"zh_MZ\",\"zh_NA\",\"zh_NC\",\"zh_NE\",\"zh_NF\",\"zh_NI\",\"zh_NR\",\"zh_NU\",\"zh_NZ\",\"zh_OM\",\"zh_PA\",\"zh_PE\",\"zh_PF\",\"zh_PG\",\"zh_PM\",\"zh_PN\",\"zh_PW\",\"zh_QA\",\"zh_RS\",\"zh_RW\",\"zh_SA\",\"zh_SB\",\"zh_SC\",\"zh_SH\",\"zh_SJ\",\"zh_SL\",\"zh_SM\",\"zh_SN\",\"zh_SO\",\"zh_SR\",\"zh_ST\",\"zh_SV\",\"zh_SZ\",\"zh_TC\",\"zh_TD\",\"zh_TG\",\"zh_TJ\",\"zh_TM\",\"zh_TN\",\"zh_TT\",\"zh_TV\",\"zh_UA\",\"zh_UG\",\"zh_US\",\"zh_UY\",\"zh_VA\",\"zh_VC\",\"zh_VE\",\"zh_VG\",\"zh_VU\",\"zh_WF\",\"zh_YE\",\"zh_ZA\",\"zh_ZM\"];function ea(e){if(!e)return;let t;if(e.includes(\"-\")){const[n,r]=e.split(\"-\");t=`${n}_${r.toUpperCase()}`}else t=`${e}_${e.toUpperCase()}`;return Xo.includes(t)?t:void 0}var ta=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class na{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n,r){return ta(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const i=this.getPayPalFastlaneSdkConfiguration(e,t,n,r);if(yield this.loadPayPalSdk(i),!this.window.paypalFastlaneSdk)throw new _r}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,r,i){return ta(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||i){const i=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,r);yield this.loadPayPalSdk(i)}if(!this.window.paypalGooglePay)throw new _r;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return ta(this,void 0,void 0,function*(){if(!this.window.paypalApms){const r=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(r),!this.window.paypalApms)throw new _r}return this.window.paypalApms})}getPayPalMessages(e,t,n){return ta(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const r=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(r)}if(!this.window.paypalMessages)throw new _r;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return ta(this,void 0,void 0,function*(){const n=this.transformConfig(e),r=this.transformConfig(t),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:r})})}getPayPalFastlaneSdkConfiguration(e,t,n,r){const{clientToken:i,initializationData:o}=e;if(!o||!o.clientId)throw new ar(rr.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:c,attributionId:u}=o,d=ea(r);return{options:Object.assign({\"client-id\":s,\"merchant-id\":c,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t,intent:a},d&&{locale:d}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":u,\"data-sdk-client-token\":i}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,r=!0){const{clientToken:i,initializationData:o}=e;if(!o||!o.clientId)throw new ar(rr.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:c,buyerCountry:u,attributionId:d,isHostedCheckoutEnabled:l,isDeveloperModeApplicable:p}=o,h=l||r,f=ea(n);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":c,commit:h,components:[\"googlepay\"],currency:t,intent:a},p&&{\"buyer-country\":u}),f&&{locale:f}),attributes:{\"data-partner-attribution-id\":d,\"data-client-token\":i,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:r}=e;if(!r||!r.clientId)throw new ar(rr.MissingPaymentMethod);const{intent:i,clientId:o,merchantId:a,buyerCountry:s,attributionId:c,isDeveloperModeApplicable:u,availableAlternativePaymentMethods:d=[],enabledAlternativePaymentMethods:l=[]}=r,p=l,h=d.filter(e=>!l.includes(e)),f=ea(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":a,\"enable-funding\":p.length>0?p:void 0,\"disable-funding\":h.length>0?h:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:i},u&&{\"buyer-country\":s}),f&&{locale:f}),attributes:{\"data-partner-attribution-id\":c,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:r}=e;if(!r||!r.clientId)throw new ar(rr.MissingPaymentMethod);const{clientId:i,merchantId:o,attributionId:a,isDeveloperModeApplicable:s,buyerCountry:c}=r,u=ea(n);return{options:Object.assign(Object.assign({\"client-id\":i,\"merchant-id\":o,components:[\"messages\"],currency:t},s&&{\"buyer-country\":c}),u&&{locale:u}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":a}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const r=e[n];null==r||\"\"===r||Array.isArray(r)&&0===r.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(r)?r.join(\",\"):r}))}),t}}function ra(e){if(!function(e){return!!e.initializationData&&\"attributionId\"in e.initializationData&&\"isVenmoEnabled\"in e.initializationData&&\"isGooglePayEnabled\"in e.initializationData&&\"isPayPalCreditAvailable\"in e.initializationData}(e))throw new ar(rr.MissingPaymentMethod)}var ia=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class oa extends qo{constructor(e,t){super(\"paypalsb\",e),this.payPalCommerceSdk=t,this.service=e}initialize(e,t,n){const r=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});var i,o,a,s,c;return ia(this,void 0,void 0,function*(){const u=this.service.getState(),d=null!==(o=null===(i=u.getStoreConfig())||void 0===i?void 0:i.currency.code)&&void 0!==o?o:n;if(!d)throw new ar(rr.MissingPaymentMethod);yield r.initialize.call(this,e,t,d);const l=r.getPaymentMethod.call(this);if(!l.initializationData)throw new ar(rr.MissingPaymentMethod);ra(l);const p=yield this.payPalCommerceSdk.getPayPalGooglePaySdk(l,d,u.getLocale());this.googlepayConfig=yield p.Googlepay().config();const{allowedPaymentMethods:h}=this.googlepayConfig;this.setGatewayIdentifier(null===(c=null===(s=null===(a=h[0])||void 0===a?void 0:a.tokenizationSpecification)||void 0===s?void 0:s.parameters)||void 0===c?void 0:c.gateway)})}getPaymentGatewayParameters(){if(this.googlepayConfig){const{allowedPaymentMethods:e}=this.googlepayConfig,{gatewayMerchantId:t}=e[0].tokenizationSpecification.parameters;return{gateway:this.getGatewayIdentifier(),gatewayMerchantId:t}}return{gateway:this.getGatewayIdentifier()}}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return ia(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n})}}const aa=Sr(e=>new Wo(e,new Ko(Jo(),new oa(e,new na((0,or.vQ)())),(0,t.createRequestSender)(),(0,i.createFormPoster)())),[{id:\"googlepaypaypalcommerce\"}]);var sa=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class ca{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n){return sa(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsFastlaneSdk){const r=this.getPayPalFastlaneSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(r),!this.window.bigCommercePaymentsFastlaneSdk)throw new _r}return this.window.bigCommercePaymentsFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,r){return sa(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsGooglePay||r){const r=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n);yield this.loadPayPalSdk(r)}if(!this.window.bigCommercePaymentsGooglePay)throw new _r;return this.window.bigCommercePaymentsGooglePay})}getPayPalApmsSdk(e,t){return sa(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsApms){const n=this.getPayPalApmSdkConfiguration(e,t);if(yield this.loadPayPalSdk(n),!this.window.bigCommercePaymentsApms)throw new _r}return this.window.bigCommercePaymentsApms})}getPayPalMessages(e,t){return sa(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsMessages){const n=this.getPayPalSdkMessagesConfiguration(e,t);yield this.loadPayPalSdk(n)}if(!this.window.bigCommercePaymentsMessages)throw new _r;return this.window.bigCommercePaymentsMessages})}loadPayPalSdk({options:e,attributes:t}){return sa(this,void 0,void 0,function*(){const n=this.transformConfig(e),r=this.transformConfig(t),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:r})})}getPayPalFastlaneSdkConfiguration(e,t,n){const{clientToken:r,initializationData:i}=e;if(!i||!i.clientId)throw new ar(rr.MissingPaymentMethod);const{intent:o,clientId:a,merchantId:s,attributionId:c}=i;return{options:{\"client-id\":a,\"merchant-id\":s,commit:!0,components:[\"fastlane\",\"three-domain-secure\"],currency:t,intent:o},attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"bigCommercePaymentsFastlaneSdk\",\"data-partner-attribution-id\":c,\"data-sdk-client-token\":r}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n=!0){const{clientToken:r,initializationData:i}=e;if(!i||!i.clientId)throw new ar(rr.MissingPaymentMethod);const{intent:o,clientId:a,merchantId:s,buyerCountry:c,attributionId:u,isHostedCheckoutEnabled:d,isDeveloperModeApplicable:l}=i,p=d||n;return{options:Object.assign({\"client-id\":a,\"merchant-id\":s,commit:p,components:[\"googlepay\"],currency:t,intent:o},l&&{\"buyer-country\":c}),attributes:{\"data-partner-attribution-id\":u,\"data-client-token\":r,\"data-namespace\":\"bigCommercePaymentsGooglePay\"}}}getPayPalApmSdkConfiguration(e,t){const{initializationData:n}=e;if(!n||!n.clientId)throw new ar(rr.MissingPaymentMethod);const{intent:r,clientId:i,merchantId:o,buyerCountry:a,attributionId:s,isDeveloperModeApplicable:c,availableAlternativePaymentMethods:u=[],enabledAlternativePaymentMethods:d=[]}=n,l=this.filterFundingOptions(d),p=this.filterFundingOptions(u.filter(e=>!d.includes(e)));return{options:Object.assign({\"client-id\":i,\"merchant-id\":o,\"enable-funding\":l.length>0?l:void 0,\"disable-funding\":p.length>0?p:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:r},c&&{\"buyer-country\":a}),attributes:{\"data-partner-attribution-id\":s,\"data-namespace\":\"bigCommercePaymentsApms\"}}}getPayPalSdkMessagesConfiguration(e,t){const{initializationData:n}=e;if(!n||!n.clientId)throw new ar(rr.MissingPaymentMethod);const{clientId:r,merchantId:i,attributionId:o,isDeveloperModeApplicable:a,buyerCountry:s}=n;return{options:Object.assign({\"client-id\":r,\"merchant-id\":i,components:[\"messages\"],currency:t},a&&{\"buyer-country\":s}),attributes:{\"data-namespace\":\"bigCommercePaymentsMessages\",\"data-partner-attribution-id\":o}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const r=e[n];null==r||\"\"===r||Array.isArray(r)&&0===r.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(r)?r.join(\",\"):r}))}),t}}var ua=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class da extends qo{constructor(e,t){super(\"googlepay_bigcommerce_payments\",e),this.payPalSdkHelper=t,this.service=e}initialize(e,t,n){const r=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});var i,o,a,s,c;return ua(this,void 0,void 0,function*(){const u=null!==(o=null===(i=this.service.getState().getStoreConfig())||void 0===i?void 0:i.currency.code)&&void 0!==o?o:n;if(!u)throw new ar(rr.MissingPaymentMethod);yield r.initialize.call(this,e,t,u);const d=r.getPaymentMethod.call(this);if(!d.initializationData)throw new ar(rr.MissingPaymentMethod);ra(d);const l=yield this.payPalSdkHelper.getPayPalGooglePaySdk(d,u);this.googlepayConfig=yield l.Googlepay().config();const{allowedPaymentMethods:p}=this.googlepayConfig;this.setGatewayIdentifier(null===(c=null===(s=null===(a=p[0])||void 0===a?void 0:a.tokenizationSpecification)||void 0===s?void 0:s.parameters)||void 0===c?void 0:c.gateway)})}getPaymentGatewayParameters(){if(this.googlepayConfig){const{allowedPaymentMethods:e}=this.googlepayConfig,{gatewayMerchantId:t}=e[0].tokenizationSpecification.parameters;return{gateway:this.getGatewayIdentifier(),gatewayMerchantId:t}}return{gateway:this.getGatewayIdentifier()}}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return ua(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n})}}const la=Sr(e=>new Wo(e,new Ko(Jo(),new da(e,new ca((0,or.vQ)())),(0,t.createRequestSender)(),(0,i.createFormPoster)())),[{id:\"googlepay_bigcommerce_payments\"}]),pa=Sr(e=>{const n=(0,t.createRequestSender)();return new Wo(e,new Ko(Jo(),new qo(\"adyen\",e),n,(0,i.createFormPoster)()))},[{id:\"googlepayadyenv2\"}]),ha=Sr(e=>{const n=(0,t.createRequestSender)();return new Wo(e,new Ko(Jo(),new qo(\"adyen\",e),n,(0,i.createFormPoster)()))},[{id:\"googlepayadyenv3\"}]);class fa extends qo{constructor(e){super(\"authorizenet\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,r=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();return function(e){if(!function(e){return\"paymentGatewayId\"in e}(e))throw new ar(rr.MissingPaymentMethod)}(e),{gateway:this.getGatewayIdentifier(),gatewayMerchantId:e.paymentGatewayId}}}const ya=Sr(e=>new Wo(e,new Ko(Jo(),new fa(e),(0,t.createRequestSender)(),(0,i.createFormPoster)())),[{id:\"googlepayauthorizenet\"}]),ma=e=>\"object\"==typeof e&&null!==e&&\"body\"in e;function ga(e){if(!function(e){return\"checkoutcomkey\"in e}(e))throw new ar(rr.MissingPaymentMethod)}var va=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class _a extends qo{constructor(e,t){super(\"checkoutltd\",e),this._requestSender=t}processAdditionalAction(e){return new Promise((t,n)=>{if(ma(e)&&function(e){var t;if(\"object\"!=typeof e||null===e)return!1;const n=e;return\"string\"==typeof(null===(t=n.three_ds_result)||void 0===t?void 0:t.acs_url)&&\"string\"==typeof n.three_ds_result.code}(e.body)&&\"three_d_secure_required\"===e.body.three_ds_result.code)return window.location.assign(e.body.three_ds_result.acs_url);n(e)})}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return va(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let r;try{r=JSON.parse(n.nonce)}catch(e){throw new wr(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"protocolVersion\"in e&&\"signature\"in e&&\"signedMessage\"in e}(e))throw new ar(rr.MissingPaymentToken)}(r),n.nonce=yield this._tokenize(r),n})}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();return ga(e),{gateway:this.getGatewayIdentifier(),gatewayMerchantId:e.checkoutcomkey}}_tokenize(e){return va(this,void 0,void 0,function*(){const t=this.getPaymentMethod().config.testMode?\"https://api.sandbox.checkout.com/tokens\":\"https://api.checkout.com/tokens\",n=this.getGooglePayInitializationData();ga(n);const{body:r}=yield this._requestSender.post(t,{credentials:!1,body:{type:\"googlepay\",token_data:e},headers:{Authorization:n.checkoutcomkey,\"Content-Type\":kr.Json,\"X-XSRF-TOKEN\":null}});return r.token})}}const ba=Sr(e=>{const n=(0,t.createRequestSender)();return new Wo(e,new Ko(Jo(),new _a(e,n),n,(0,i.createFormPoster)()))},[{id:\"googlepaycheckoutcom\"}]);class Sa extends qo{constructor(e){super(\"cybersource\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,r=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}}const wa=Sr(e=>new Wo(e,new Ko(Jo(),new Sa(e),(0,t.createRequestSender)(),(0,i.createFormPoster)())),[{id:\"googlepaycybersourcev2\"},{id:\"googlepaybnz\"}]);class Ca extends qo{constructor(e){super(\"chase\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,r=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}}const Ia=Sr(e=>new Wo(e,new Ko(Jo(),new Ca(e),(0,t.createRequestSender)(),(0,i.createFormPoster)())),[{id:\"googlepayorbital\"}]);var Ea,Pa,Oa,Aa,Ta,ka,Ra,Ma,xa,Na,Da,ja;!function(e){e.SHIPPING=\"shipping\",e.BILLING=\"billing\"}(Ea||(Ea={})),function(e){e.SPLIT=\"split\",e.FULL=\"full\",e.ORGANIZATION=\"organization\"}(Pa||(Pa={})),function(e){e.Open=\"open\",e.Expired=\"expired\",e.Complete=\"complete\"}(Oa||(Oa={})),function(e){e.Paid=\"paid\",e.UnPaid=\"unpaid\",e.NoPaymentRequired=\"no_payment_required\"}(Aa||(Aa={})),function(e){e.SUCCESS=\"success\",e.ERROR=\"error\"}(Ta||(Ta={})),function(e){e.CreditCard=\"card\",e.ACH=\"us_bank_account\",e.Link=\"link\",e.EPS=\"eps\",e.GRABPAY=\"grabpay\",e.BANCONTACT=\"bancontact\",e.IDEAL=\"ideal\",e.ALIPAY=\"alipay\",e.KLARNA=\"klarna\",e.OCS=\"optimized_checkout\",e.CHECKOUT_SESSION=\"checkout_session\"}(ka||(ka={})),function(e){e.NEVER=\"never\",e.AUTO=\"auto\",e.ALWAYS=\"always\",e.PAYMENT=\"payment\",e.IF_REQUIRED=\"if_required\"}(Ra||(Ra={})),function(e){e.V3=\"v3\",e.ACACIA=\"acacia\",e.BASIL=\"basil\",e.CLOVER=\"clover\"}(Ma||(Ma={})),function(e){e.PAYMENT=\"payment\",e.AUTHENTICATION=\"linkAuthentication\",e.SHIPPING=\"address\",e.EXPRESS_CHECKOUT=\"expressCheckout\"}(xa||(xa={})),function(e){e.REQUIRES_PAYMENT_METHOD=\"requires_payment_method\",e.REQUIRES_CONFIRMATION=\"requires_confirmation\",e.REQUIRES_ACTION=\"requires_action\",e.PROCESSING=\"processing\",e.SUCCEEDED=\"succeeded\",e.CANCELED=\"canceled\"}(Na||(Na={})),function(e){e.CLICK=\"click\",e.CHANGE=\"change\",e.READY=\"ready\",e.SHIPPING_ADDRESS_CHANGE=\"shippingaddresschange\",e.SHIPPING_RATE_CHANGE=\"shippingratechange\",e.CONFIRM=\"confirm\",e.CANCEL=\"cancel\",e.LOADER_START=\"loaderstart\"}(Da||(Da={})),function(e){e.ON_SESSION=\"on_session\",e.OFF_SESSION=\"off_session\"}(ja||(ja={}));var La=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class za{constructor(e,t=window){this.scriptLoader=e,this.stripeWindow=t}getStripeClient(e,t,n,r,i){return La(this,void 0,void 0,function*(){if(this.stripeWindow.bcStripeClient)return this.stripeWindow.bcStripeClient;const o=yield this.load(n),{stripePublishableKey:a,stripeConnectedAccount:s}=e,c=o(a,Object.assign(Object.assign(Object.assign(Object.assign({},s?{stripeAccount:s}:{}),t?{locale:t}:{}),r?{betas:r}:{}),i?{apiVersion:i}:{}));return Object.assign(this.stripeWindow,{bcStripeClient:c}),c})}getElements(e,t){return La(this,void 0,void 0,function*(){let n=this.stripeWindow.bcStripeElements;return n?yield this.updateStripeElements(t):(n=e.elements(t),Object.assign(this.stripeWindow,{bcStripeElements:n})),n})}updateStripeElements(e){return La(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeElements;t&&(t.update(e),yield t.fetchUpdates())})}getStripeCheckout(e,t){return La(this,void 0,void 0,function*(){let n=yield this.getStoredStripeCheckout(t);return n||(n=yield e.initCheckout(t),Object.assign(this.stripeWindow,{bcStripeCheckout:n})),n})}load(e){return La(this,void 0,void 0,function*(){if(!this.stripeWindow.Stripe&&(yield this.scriptLoader.loadScript(this.getScriptUrl(e)),!this.stripeWindow.Stripe))throw new _r;return this.stripeWindow.Stripe})}getScriptUrl(e){return e&&e!==Ma.V3?`https://js.stripe.com/${e}/stripe.js`:\"https://js.stripe.com/v3/\"}getStoredStripeCheckout(e){return La(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeCheckout;if(t)try{const{actions:n,error:r}=yield t.loadActions();if(r||!n)return void this.logErrorToConsole(r);const i=yield n.getSession(),o=e.clientSecret.split(\"_secret_\")[0];if(i.id===o)return t}catch(e){return void this.logErrorToConsole(e)}})}logErrorToConsole(e){e?console.error(e):console.error(\"No stripe checkout actions available on loadActions().\")}}const Fa=[\"payment_element_beta_2\",\"alipay_pm_beta_1\",\"link_default_integration_beta_1\",\"shipping_address_element_beta_1\",\"address_element_beta_1\"];function Ba(e){if(!function(e){return\"stripeConnectedAccount\"in e&&\"stripePublishableKey\"in e&&\"stripeVersion\"in e}(e))throw new ar(rr.MissingPaymentMethod)}var Ua=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class qa extends qo{constructor(e,t){super(\"stripe\",e),this.paymentIntegrationService=e,this.scriptLoader=t}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return Ua(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let r;try{r=JSON.parse(n.nonce)}catch(e){throw new wr(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"id\"in e}(e))throw new ar(rr.MissingPaymentToken)}(r),n.nonce=r.id,n})}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();Ba(e);const{stripeVersion:t,stripePublishableKey:n,stripeConnectedAccount:r}=e;return{gateway:this.getGatewayIdentifier(),\"stripe:version\":t,\"stripe:publishableKey\":`${n}/${r}`}}processAdditionalAction(e,t){var n;return Ua(this,void 0,void 0,function*(){if(!t)throw new Yi([\"payment\"]);if(!ma(e)||(\"object\"!=typeof(r=e.body)||null===r||!(\"three_ds_result\"in r)||!(\"errors\"in r)))throw e;var r;if((0,f.some)(e.body.errors,{code:\"three_d_secure_required\"})){const r=this.getGooglePayInitializationData();Ba(r),this.stripeUPEClient=yield this.loadStripeJs(r,t);const i=e.body.three_ds_result.token;let o,a=!1;try{o=yield this.stripeUPEClient.confirmCardPayment(i)}catch(e){try{o=yield this.stripeUPEClient.retrievePaymentIntent(i)}catch(e){a=!0}}if(null==o?void 0:o.error){if(this._throwDisplayableStripeError(o.error),this._isCancellationError(o.error))throw new ri;throw new Ho}if(!(null==o?void 0:o.paymentIntent)&&!a)throw new c;return this.paymentIntegrationService.submitPayment({methodId:t,paymentData:{nonce:(null===(n=null==o?void 0:o.paymentIntent)||void 0===n?void 0:n.id)||i}})}throw e})}loadStripeJs(e,t){return Ua(this,void 0,void 0,function*(){if(this.stripeUPEClient)return this.stripeUPEClient;const n=this.paymentIntegrationService.getState().getCartLocale();return\"googlepaystripeocs\"===t&&e.useNewStripeJsVersion?this.scriptLoader.getStripeClient(e,n,Ma.CLOVER):this.scriptLoader.getStripeClient(e,n,Ma.V3,Fa,\"2020-03-02;alipay_beta=v1;link_beta=v1\")})}_isCancellationError(e){var t,n;return e&&-1!==(null===(n=null===(t=e.payment_intent.last_payment_error)||void 0===t?void 0:t.message)||void 0===n?void 0:n.indexOf(\"canceled\"))}_throwDisplayableStripeError(e){if((0,f.includes)([\"card_error\",\"invalid_request_error\",\"validation_error\"],e.type))throw new Error(e.message)}}const Va=Sr(e=>new Wo(e,new Ko(Jo(),new qa(e,new za((0,or.vQ)())),(0,t.createRequestSender)(),(0,i.createFormPoster)())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeupe\"},{id:\"googlepaystripeocs\"}]);class Ga extends qo{constructor(e){super(\"worldpay\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,r=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}}const Ha=Sr(e=>new Wo(e,new Ko(Jo(),new Ga(e),(0,t.createRequestSender)(),(0,i.createFormPoster)())),[{id:\"googlepayworldpayaccess\"}]);function Ya(){const{navigator:e}=window;let t;return t=e.language?e.language:e.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof e.javaEnabled&&e.javaEnabled(),language:t,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}var Wa=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class $a extends qo{constructor(e,t){super(\"worldlinena\",e),this.formPoster=t}extraPaymentData(){return Wa(this,void 0,void 0,function*(){return Promise.resolve({browser_info:Ya()})})}processAdditionalAction(e){return Wa(this,void 0,void 0,function*(){if(!function(e){return ma(e)&&(t=e.body,(0,f.isObject)(t)&&\"object\"==typeof t&&\"errors\"in t&&\"three_ds_result\"in t&&(0,f.isArray)(t.errors)&&(0,f.some)(t.errors,{code:\"three_d_secure_required\"}));var t}(e))throw e;const{three_ds_result:t}=e.body,{acs_url:n,payer_auth_request:r,merchant_data:i}=t||{};if(!n||!r||!i)throw new Yi([\"formUrl\",\"threeDSSessionData\",\"creq\"]);return new Promise(e=>{this.formPoster.postForm(n,{threeDSSessionData:r,creq:i},e,\"_top\")})})}}const Ka=Sr(e=>new Wo(e,new Ko(Jo(),new $a(e,(0,i.createFormPoster)()),(0,t.createRequestSender)(),(0,i.createFormPoster)())),[{id:\"googlepaytdonlinemart\"}]);var Za,Ja,Qa,Xa,es,ts,ns,rs,is,os,as=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class ss{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,r,i){return as(this,void 0,void 0,function*(){if(!this.window.paypal||i){const i=this.getPayPalSdkScriptConfigOrThrow(e,t,n,r);if(yield this.loadPayPalSdk(i),!this.window.paypal)throw new _r}return this.window.paypal})}getPayPalFastlaneSdk(e,t,n,r){return as(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const i=this.getPayPalFastlaneSdkConfiguration(e,t,n,r);if(yield this.loadPayPalSdk(i),!this.window.paypalFastlaneSdk)throw new _r}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,r,i){return as(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||i){const i=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,r);yield this.loadPayPalSdk(i)}if(!this.window.paypalGooglePay)throw new _r;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return as(this,void 0,void 0,function*(){if(!this.window.paypalApms){const r=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(r),!this.window.paypalApms)throw new _r}return this.window.paypalApms})}getPayPalMessages(e,t,n){return as(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const r=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(r)}if(!this.window.paypalMessages)throw new _r;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return as(this,void 0,void 0,function*(){const n=this.transformConfig(e),r=this.transformConfig(t),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:r})})}getPayPalSdkScriptConfigOrThrow(e,t,n,r=!0){const{id:i,clientToken:o,initializationData:a}=e;if(!a||!a.clientId)throw new ar(rr.MissingPaymentMethod);const{intent:s,clientId:c,merchantId:u,buyerCountry:d,attributionId:l,isVenmoEnabled:p,isHostedCheckoutEnabled:h,isPayPalCreditAvailable:f,isDeveloperModeApplicable:y,availableAlternativePaymentMethods:m=[],enabledAlternativePaymentMethods:g=[],isGooglePayEnabled:v}=a,_=h||r,b=\"paypalcommercecreditcards\"===i||\"bigcommerce_payments_creditcards\"===i,S=b?[\"card\"]:[],w=f?[\"credit\",\"paylater\"]:[],C=p?[\"venmo\"]:[],I=v?[\"googlepay\"]:[],E=r?[\"card-fields\"]:[],P=[...b?[]:[\"card\"],...f?[]:[\"credit\",\"paylater\"],...p?[]:[\"venmo\"],...m.filter(e=>!g.includes(e))],O=[...S,...w,...C,...g],A=ea(n);return{options:Object.assign(Object.assign({\"client-id\":c,\"merchant-id\":u,\"enable-funding\":O.length>0?O:void 0,\"disable-funding\":P.length>0?P:void 0,commit:_,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...I,...E],currency:t,intent:s},y&&{\"buyer-country\":d}),A&&{locale:A}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":o}}}getPayPalFastlaneSdkConfiguration(e,t,n,r){const{clientToken:i,initializationData:o}=e;if(!o||!o.clientId)throw new ar(rr.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:c,attributionId:u}=o,d=ea(r);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":c,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t},d&&{locale:d}),{intent:a}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":u,\"data-sdk-client-token\":i}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,r=!0){const{clientToken:i,initializationData:o}=e;if(!o||!o.clientId)throw new ar(rr.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:c,buyerCountry:u,attributionId:d,isHostedCheckoutEnabled:l,isDeveloperModeApplicable:p}=o,h=l||r,f=ea(n);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":c,commit:h,components:[\"googlepay\"],currency:t,intent:a},p&&{\"buyer-country\":u}),f&&{locale:f}),attributes:{\"data-partner-attribution-id\":d,\"data-client-token\":i,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:r}=e;if(!r||!r.clientId)throw new ar(rr.MissingPaymentMethod);const{intent:i,clientId:o,merchantId:a,buyerCountry:s,attributionId:c,isDeveloperModeApplicable:u,availableAlternativePaymentMethods:d=[],enabledAlternativePaymentMethods:l=[]}=r,p=l,h=d.filter(e=>!l.includes(e)),f=ea(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":a,\"enable-funding\":p.length>0?p:void 0,\"disable-funding\":h.length>0?h:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:i},u&&{\"buyer-country\":s}),f&&{locale:f}),attributes:{\"data-partner-attribution-id\":c,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:r}=e;if(!r||!r.clientId)throw new ar(rr.MissingPaymentMethod);const{clientId:i,merchantId:o,attributionId:a,isDeveloperModeApplicable:s,buyerCountry:c}=r,u=ea(n);return{options:Object.assign(Object.assign({\"client-id\":i,\"merchant-id\":o,components:[\"messages\"],currency:t},s&&{\"buyer-country\":c}),u&&{locale:u}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":a}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const r=e[n];null==r||\"\"===r||Array.isArray(r)&&0===r.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(r)?r.join(\",\"):r}))}),t}}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Za||(Za={})),function(e){e.Always=\"SCA_ALWAYS\"}(Ja||(Ja={})),function(e){e.Succeeded=\"succeeded\",e.Cancelled=\"cancelled\",e.Errored=\"errored\"}(Qa||(Qa={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(Xa||(Xa={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(es||(es={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(ts||(ts={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(ns||(ns={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"canceled\",e.UNRECOGNIZED=\"unrecognized\"}(rs||(rs={})),function(e){e.OXXO=\"oxxo\"}(is||(is={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(os||(os={}));var cs=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class us{constructor(e,t,n,r){this.formPoster=e,this.paymentIntegrationService=t,this.paypalRequestSender=n,this.paypalSdkLoader=r}loadPayPalSdk(e,t,n,r){return cs(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),o=t||i.getCartOrThrow().currency.code,a=i.getPaymentMethodOrThrow(e),s=i.getLocale();return this.paypalSdk=yield this.paypalSdkLoader.getPayPalSDK(a,o,s,n,r),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new _r;return this.paypalSdk}createBuyNowCartOrThrow(e){return cs(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new ar(rr.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new Cr}})}createOrder(e,t){return cs(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:r}=yield this.paypalRequestSender.createOrder(e,Object.assign({cartId:n},t));return r})}createOrderCardFields(e,t){return cs(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:r,setupToken:i}=yield this.paypalRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:r},i?{setupToken:i}:{})})}updateOrder(e,t,n,r){return cs(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),o=i.getCartOrThrow();let a;r||(a=i.getConsignmentsOrThrow()[0]);try{yield this.paypalRequestSender.updateOrder(e,Object.assign(Object.assign({availableShippingOptions:r?[]:null==a?void 0:a.availableShippingOptions,cartId:o.id,selectedShippingOption:r?null:null==a?void 0:a.selectedShippingOption},t?{methodId:t}:{}),n?{orderId:n}:{}))}catch(e){throw new c}})}getOrderStatus(e,t){return cs(this,void 0,void 0,function*(){try{const{status:n}=yield this.paypalRequestSender.getOrderStatus(e,t);return n}catch(e){throw new c}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new ar(rr.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===pi.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return cs(this,void 0,void 0,function*(){const r={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:r},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],r=n.find(e=>e.isRecommended),i=(e?n.find(t=>t.id===e):n.find(e=>{if(t.selectedShippingOption){const n=t.selectedShippingOption.id;return e.id===n}return!1}))||r||n[0];if(!i)throw new Error(\"Your order can't be shipped to this address\");return i}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:r,name:{full_name:i}}=n[0].shipping,[o,...a]=i.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:r.address_line_1,address2:r.address_line_2,city:r.admin_area_2,countryCode:r.country_code,postalCode:r.postal_code,stateOrProvinceCode:r.admin_area_1})}getValidButtonStyle(e={}){const{color:t,height:n,label:r,shape:i}=e,o={color:t&&ts[t]?t:void 0,height:this.getValidHeight(n),label:r&&es[r]?r:void 0,shape:i&&ns[i]?i:void 0};return(0,f.omitBy)(o,f.isNil)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}var ds=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class ls{constructor(e){this.requestSender=e}createOrder(e,t){return ds(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,r=t,i=Object.assign({\"X-API-INTERNAL\":Ar,\"Content-Type\":kr.Json},Rr);return(yield this.requestSender.post(n,{headers:i,body:r})).body})}updateOrder(e,t){return ds(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,r=t,i=Object.assign({\"X-API-INTERNAL\":Ar,\"Content-Type\":kr.Json},Rr);return(yield this.requestSender.put(n,{headers:i,body:r})).body})}getOrderStatus(e,t){return ds(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,r=Object.assign({\"X-API-INTERNAL\":Ar,\"Content-Type\":kr.Json},Rr);return(yield this.requestSender.get(n,Object.assign({headers:r},t))).body})}}const ps=e=>{const{getHost:n}=e.getState();return new us((0,i.createFormPoster)(),e,new ls((0,t.createRequestSender)({host:n()})),new ss((0,or.vQ)()))};var hs=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};const fs=class{constructor(e,t){this.paymentIntegrationService=e,this.paypalIntegrationService=t}createPayPalButton(e,t,n,r){const{style:i,fundingSource:o,isHostedCheckoutEnabled:a,isServerSideShippingCallbacksEnabled:s,onClick:c,onCancel:u,onPaymentComplete:d,onError:l}=n;this.onError=l;const p=this.paypalIntegrationService.getPayPalSdkOrThrow();if(!Object.values(p.FUNDING).includes(o))throw new wr('Unable to initialize PayPal button because \"fundingSource\" argument is not valid funding source.');const h=Object.assign(Object.assign({},!s&&{onShippingAddressChange:t=>this.onShippingAddressChange(t,e),onShippingOptionsChange:t=>this.onShippingOptionsChange(t,e)}),{onApprove:(n,r)=>this.onHostedCheckoutApprove(n,r,t,e,d,s)});return p.Buttons(Object.assign(Object.assign(Object.assign({fundingSource:o,style:this.paypalIntegrationService.getValidButtonStyle(i),createOrder:()=>hs(this,void 0,void 0,function*(){if(r){const e=yield this.paypalIntegrationService.createBuyNowCartOrThrow(r);yield this.paymentIntegrationService.loadCheckout(e.id)}return this.paypalIntegrationService.createOrder(e)}),onApprove:({orderID:e})=>this.paypalIntegrationService.tokenizePayment(t,e)},c?{onClick:c}:{}),u?{onCancel:u}:{}),a&&h))}onHostedCheckoutApprove(e,t,n,r,i,o){return hs(this,void 0,void 0,function*(){if(!e.orderID)throw new ar(rr.MissingOrderId);const a=this.paymentIntegrationService.getState().getCartOrThrow();try{const s=a.lineItems.physicalItems.length>0;if(!o){const e=yield t.order.get(),n=this.paypalIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),s){const t=this.paypalIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}s&&(yield this.paypalIntegrationService.updateOrder(r,void 0,void 0,o)),o&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i()}catch(e){this.handleError(e)}})}onShippingAddressChange(e,t){return hs(this,void 0,void 0,function*(){const n=this.paypalIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(n),yield this.paymentIntegrationService.updateShippingAddress(n);const e=this.paypalIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalIntegrationService.updateOrder(t)}catch(e){this.handleError(e)}})}onShippingOptionsChange(e,t){return hs(this,void 0,void 0,function*(){const n=this.paypalIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(n.id),yield this.paypalIntegrationService.updateOrder(t)}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}};class ys{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalButtonCreationService=n}initialize(e){var t,n,r,i,o;return n=this,r=void 0,o=function*(){const{paypalcommerce:n,containerId:r,methodId:i}=e,o=Boolean(null==n?void 0:n.buyNowInitializeOptions);if(!i)throw new wr('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new wr('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!n)throw new wr('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');if(o&&!n.currencyCode)throw new wr('Unable to initialize payment because \"options.paypalcommerce.currencyCode\" argument is not provided.');if(o&&\"function\"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new wr('Unable to initialize payment because \"options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');o||(yield this.paymentIntegrationService.loadDefaultCheckout());const a=o?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.paypalIntegrationService.loadPayPalSdk(i,a,!1),this.renderButton(r,i,n)},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((o=o.apply(n,r||[])).next())})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:r,style:i,onComplete:o,onEligibilityFailure:a}=n,s=this.paypalIntegrationService.getPayPalSdkOrThrow(),c=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:u,isServerSideShippingCallbacksEnabled:d}=c.initializationData||{},l={onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},p=Object.assign(Object.assign({fundingSource:s.FUNDING.PAYPAL,style:this.paypalIntegrationService.getValidButtonStyle(i),isServerSideShippingCallbacksEnabled:d,isHostedCheckoutEnabled:u},r&&l),u&&o&&{onPaymentComplete:()=>o()}),h=this.paypalButtonCreationService.createPayPalButton(\"paypalcommerce\",t,p,r);h.isEligible()?h.render(`#${e}`):a&&\"function\"==typeof a?a():this.paypalIntegrationService.removeElement(e)}}const ms=Sr(e=>{const t=ps(e),n=new fs(e,t);return new ys(e,t,n)},[{id:\"paypalcommerce\"}]);var gs=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class vs{constructor(e,t){this.paymentIntegrationService=e,this.paypalIntegrationService=t}initialize(e){return gs(this,void 0,void 0,function*(){const{paypalcommercecredit:t,containerId:n,methodId:r}=e,{buyNowInitializeOptions:i,currencyCode:o}=t||{},a=!!i;if(!r)throw new wr('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new wr('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new wr('Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.');if(a&&!o)throw new wr('Unable to initialize payment because \"options.paypalcommercecredit.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==i?void 0:i.getBuyNowCartRequestBody))throw new wr('Unable to initialize payment because \"options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=this.paymentIntegrationService.getState(),c=a?o:s.getCartOrThrow().currency.code;yield this.paypalIntegrationService.loadPayPalSdk(r,c,!1),this.renderButton(n,r,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:r,style:i,onComplete:o,onEligibilityFailure:a}=n,s=this.paypalIntegrationService.getPayPalSdkOrThrow(),c=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:u,isServerSideShippingCallbacksEnabled:d}=c.initializationData||{},l={createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercecredit\"),onApprove:({orderID:e})=>this.paypalIntegrationService.tokenizePayment(t,e)},p={onClick:()=>this.handleClick(r),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},h=Object.assign(Object.assign({},!d&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o,d)}),f=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT];let y=!1;f.forEach(t=>{if(!y){const n=Object.assign(Object.assign(Object.assign({fundingSource:t,style:this.paypalIntegrationService.getValidButtonStyle(i)},l),r&&p),u&&h),o=s.Buttons(n);o.isEligible()?(o.render(`#${e}`),y=!0):a&&\"function\"==typeof a&&a()}}),y||this.paypalIntegrationService.removeElement(e)}handleClick(e){return gs(this,void 0,void 0,function*(){if(e){const t=yield this.paypalIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,r,i){return gs(this,void 0,void 0,function*(){if(!e.orderID)throw new ar(rr.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!i){const e=yield t.order.get(),n=this.paypalIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.paypalIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}return a&&(yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\",void 0,void 0,i)),i&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalIntegrationService.submitPayment(n,e.orderID),r&&\"function\"==typeof r&&r(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return gs(this,void 0,void 0,function*(){const t=this.paypalIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.paypalIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\")}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return gs(this,void 0,void 0,function*(){const t=this.paypalIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\")}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const _s=Sr(e=>new vs(e,ps(e)),[{id:\"paypalcommercecredit\"}]);var bs,Ss,ws,Cs,Is,Es,Ps;!function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(bs||(bs={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Ss||(Ss={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(ws||(ws={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(Cs||(Cs={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(Is||(Is={})),function(e){e.OXXO=\"oxxo\",e.IDEAL=\"ideal\"}(Es||(Es={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(Ps||(Ps={}));var Os=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class As{constructor(e,t,n,r){this.formPoster=e,this.paymentIntegrationService=t,this.paypalCommerceRequestSender=n,this.paypalCommerceScriptLoader=r}loadPayPalSdk(e,t,n,r){return Os(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),o=t||i.getCartOrThrow().currency.code,a=i.getPaymentMethodOrThrow(e);return this.paypalSdk=yield this.paypalCommerceScriptLoader.getPayPalSDK(a,o,i.getLocale(),n,r),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new _r;return this.paypalSdk}createBuyNowCartOrThrow(e){return Os(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new ar(rr.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new Cr}})}createOrder(e,t){return Os(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:r}=yield this.paypalCommerceRequestSender.createOrder(e,Object.assign({cartId:n},t));return r})}createOrderCardFields(e,t){return Os(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:r,setupToken:i}=yield this.paypalCommerceRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:r},i?{setupToken:i}:{})})}updateOrder(e){return Os(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),r=t.getConsignmentsOrThrow()[0];try{yield this.paypalCommerceRequestSender.updateOrder({availableShippingOptions:e?[]:r.availableShippingOptions,cartId:n.id,selectedShippingOption:e?null:r.selectedShippingOption})}catch(e){throw new c}})}getOrderStatus(e,t){return Os(this,void 0,void 0,function*(){try{const{status:n}=yield this.paypalCommerceRequestSender.getOrderStatus(e,t);return n}catch(e){throw new c}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new ar(rr.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===pi.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return Os(this,void 0,void 0,function*(){const r={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:r},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],r=n.find(e=>e.isRecommended),i=(e?n.find(t=>t.id===e):n.find(e=>{var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)}))||r||n[0];if(!i)throw new Error(\"Your order can't be shipped to this address\");return i}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:r,name:{full_name:i}}=n[0].shipping,[o,...a]=i.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:r.address_line_1,address2:r.address_line_2,city:r.admin_area_2,countryCode:r.country_code,postalCode:r.postal_code,stateOrProvinceCode:r.admin_area_1})}getValidButtonStyle(e){const{color:t,height:n,label:r,shape:i}=e||{},o={color:t&&Cs[t]?t:void 0,height:this.getValidHeight(n),label:r&&ws[r]?r:void 0,shape:i&&Is[i]?i:void 0};return(0,f.omitBy)(o,f.isNil)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}var Ts=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class ks{constructor(e){this.requestSender=e}createOrder(e,t){return Ts(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,r=t,i=Object.assign({\"X-API-INTERNAL\":Ar,\"Content-Type\":kr.Json},Rr);return(yield this.requestSender.post(n,{headers:i,body:r})).body})}updateOrder(e){return Ts(this,void 0,void 0,function*(){const t=e,n=Object.assign({\"X-API-INTERNAL\":Ar,\"Content-Type\":kr.Json},Rr);return(yield this.requestSender.put(\"/api/storefront/initialization/paypalcommerce\",{headers:n,body:t})).body})}getOrderStatus(e=\"paypalcommerce\",t){return Ts(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,r=Object.assign({\"X-API-INTERNAL\":Ar,\"Content-Type\":kr.Json},Rr);return(yield this.requestSender.get(n,Object.assign({headers:r},t))).body})}}var Rs=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Ms{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,r,i){return Rs(this,void 0,void 0,function*(){const o=this.getPayPalSdkScriptConfigOrThrow(e,t,n,r);return this.loadPayPalSDK(o,i)})}loadPayPalSDK(e,t=!1){return Rs(this,void 0,void 0,function*(){if(!this.window.paypal||t){const t=this.transformConfig(e.options),n=this.transformConfig(e.attributes),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(t).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:n})}if(!this.window.paypal)throw new _r;return this.window.paypal})}getPayPalSdkScriptConfigOrThrow(e,t,n,r=!0){const{id:i,clientToken:o,initializationData:a}=e;if(!(null==a?void 0:a.clientId))throw new ar(rr.MissingPaymentMethod);const{intent:s,clientId:c,merchantId:u,buyerCountry:d,attributionId:l,isVenmoEnabled:p,isHostedCheckoutEnabled:h,isPayPalCreditAvailable:f,isDeveloperModeApplicable:y,availableAlternativePaymentMethods:m=[],enabledAlternativePaymentMethods:g=[],isGooglePayEnabled:v}=a,_=h||r,b=\"paypalcommercecreditcards\"===i,S=b?[\"card\"]:[],w=f?[\"credit\",\"paylater\"]:[],C=p?[\"venmo\"]:[],I=v?[\"googlepay\"]:[],E=r?[\"card-fields\"]:[],P=[...b?[]:[\"card\"],...f?[]:[\"credit\",\"paylater\"],...p?[]:[\"venmo\"],...m.filter(e=>!g.includes(e))],O=[...S,...w,...C,...g],A=ea(n);return{options:Object.assign(Object.assign({\"client-id\":c,\"merchant-id\":u,\"enable-funding\":O.length>0?O:void 0,\"disable-funding\":P.length>0?P:void 0,commit:_,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...I,...E],currency:t,intent:s},y&&{\"buyer-country\":d}),A&&{locale:A}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":o}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const r=e[n];null==r||\"\"===r||Array.isArray(r)&&0===r.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(r)?r.join(\",\"):r}))}),t}}var xs=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Ns{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}initialize(e){return xs(this,void 0,void 0,function*(){const{paypalcommercevenmo:t,containerId:n,methodId:r}=e,{buyNowInitializeOptions:i,currencyCode:o}=t||{},a=!!i;if(!r)throw new wr('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new wr('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new wr('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');if(a&&!o)throw new wr('Unable to initialize payment because \"options.paypalcommercevenmo.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==i?void 0:i.getBuyNowCartRequestBody))throw new wr('Unable to initialize payment because \"options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=a?o:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.paypalCommerceIntegrationService.loadPayPalSdk(r,s,!1),this.renderButton(n,r,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:r,style:i,onEligibilityFailure:o}=n,a=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),s=a.FUNDING.VENMO,c={createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercevenmo\"),onApprove:({orderID:e})=>this.paypalCommerceIntegrationService.tokenizePayment(t,e)},u={onClick:()=>this.handleClick(r),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},d=Object.assign(Object.assign({fundingSource:s,style:this.getValidVenmoButtonStyles(i)},c),r&&u),l=a.Buttons(d);l.isEligible()?l.render(`#${e}`):o&&\"function\"==typeof o?o():this.paypalCommerceIntegrationService.removeElement(e)}getValidVenmoButtonStyles(e){const t=this.paypalCommerceIntegrationService.getValidButtonStyle(e);return t.color===Cs.gold?Object.assign(Object.assign({},t),{color:void 0}):t}handleClick(e){return xs(this,void 0,void 0,function*(){if(e){const t=yield this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}}const Ds=Sr(e=>new Ns(e,(e=>{const{getHost:n}=e.getState();return new As((0,i.createFormPoster)(),e,new ks((0,t.createRequestSender)({host:n()})),new Ms((0,or.vQ)()))})(e)),[{id:\"paypalcommercevenmo\"}]);var js,Ls,zs,Fs,Bs,Us;!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(js||(js={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(Ls||(Ls={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\"}(zs||(zs={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(Fs||(Fs={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(Bs||(Bs={})),function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(Us||(Us={}));var qs=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Vs{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalExpressScriptLoader=t,this.formPoster=n}initialize(e){return qs(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);if(!e.paypal)throw new wr;if(!t.config.merchantId)throw new ar(rr.MissingPaymentMethod);const n=yield this.paypalExpressScriptLoader.loadPaypalSDK(t.config.merchantId);this.renderButton(e,n)})}deinitialize(){return Promise.resolve()}renderButton(e,t){const{containerId:n,methodId:r,paypal:i}=e,{allowCredit:o,clientId:a,onPaymentError:s,shouldProcessPayment:c,style:u}=i,d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);if(!d.config.merchantId)throw new ar(rr.MissingPaymentMethod);const l=d.config.merchantId,p=d.config.testMode?\"sandbox\":\"production\",h={[p]:a},f=t.FUNDING.CREDIT||\"credit\",y=o?[f]:[],m=o?[]:[f];return t.Button.render({env:p,client:h,commit:c,funding:{allowed:y,disallowed:m},style:this.getStyle(u),payment:(e,t)=>this.setupPayment(l,t,s),onAuthorize:(e,t)=>this.tokenizePayment(e,r,t,c)},n)}getStyle(e){const{color:t,fundingicons:n,label:r,layout:i,shape:o,size:a,tagline:s}=e||{};return{color:t,fundingicons:n,label:r,layout:i,shape:o||Bs.RECT,size:\"small\"===a?Ls.RESPONSIVE:a,tagline:s}}setupPayment(e,t,n){return qs(this,void 0,void 0,function*(){if(!t)throw new ur(ir.CheckoutButtonNotInitialized);try{const n=yield this.paymentIntegrationService.loadDefaultCheckout(),{id:r}=n.getCartOrThrow(),i=n.getHost()||\"\";return(yield t.request.post(`${i}/api/storefront/payment/paypalexpress`,{merchantId:e,cartId:r},{headers:Object.assign({\"X-API-INTERNAL\":Ar},Rr)})).id}catch(e){throw n&&e instanceof a&&n(e),e}})}tokenizePayment(e,t,n,r){return qs(this,void 0,void 0,function*(){if(!n)throw new ur(ir.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new ar(rr.MissingPayment);const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),o=yield n.payment.get(e.paymentID);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:i.id,action:r?\"process_payment\":\"set_external_checkout\",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(o.payer.payer_info)})})}}class Gs{constructor(e){this.scriptLoader=e,this.window=window}loadPaypalSDK(e=\"\"){return t=this,n=void 0,i=function*(){const t=Object.assign({async:!0,attributes:{\"data-merchant-id\":e}},e&&{attributes:{\"data-merchant-id\":e}});if(yield this.scriptLoader.loadScript(\"//www.paypalobjects.com/api/checkout.min.js\",t),!this.window.paypal)throw new _r;return this.window.paypal},new((r=void 0)||(r=Promise))(function(e,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((i=i.apply(t,n||[])).next())});var t,n,r,i}}const Hs=Sr(e=>new Vs(e,new Gs((0,or.vQ)()),(0,i.createFormPoster)()),[{id:\"paypalexpress\"}]);var Ys=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Ws{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t,this.isMounted=!1}deinitialize(){var e;null===(e=this.checkoutEventsUnsubscribe)||void 0===e||e.call(this),this.isMounted=!1}initCheckoutEventsSubscription(e,t,n,r){this.checkoutEventsUnsubscribe=this.paymentIntegrationService.subscribe(()=>Ys(this,void 0,void 0,function*(){var i;const o=null==r?void 0:r.getElement(xa.PAYMENT);if(o){try{yield this.updateStripePaymentIntent(e,t)}catch(e){return this.isMounted&&(o.unmount(),this.isMounted=!1),void(e instanceof Error&&(null===(i=n.onError)||void 0===i||i.call(n,e)))}this.isMounted||(yield null==r?void 0:r.fetchUpdates(),this.mountElement(o,n.containerId))}}),e=>{var t;return null===(t=e.getCheckout())||void 0===t?void 0:t.outstandingBalance},e=>{var t;return null===(t=e.getCheckout())||void 0===t?void 0:t.coupons})}mountElement(e,t){document.getElementById(t)&&(e.mount(`#${t}`),this.isMounted=!0)}mapAppearanceVariables(e){return{colorPrimary:e.fieldInnerShadow,colorBackground:e.fieldBackground,colorText:e.labelText,colorDanger:e.fieldErrorText,colorTextSecondary:e.labelText,colorTextPlaceholder:e.fieldPlaceholderText,colorIcon:e.fieldPlaceholderText}}mapInputAppearanceRules(e){return{borderColor:e.fieldBorder,color:e.fieldText,boxShadow:e.fieldInnerShadow}}throwStripeError(e){if(\"object\"==typeof(t=e)&&null!==t&&\"type\"in t&&(this.throwDisplayableStripeError(e),this.isCancellationError(e)))throw new ri;var t;throw new Ho}throwDisplayableStripeError(e){if((0,f.includes)([\"card_error\",\"invalid_request_error\",\"validation_error\"],e.type))throw new Error(e.message)}isCancellationError(e){var t;const n=null===(t=null==e?void 0:e.payment_intent.last_payment_error)||void 0===t?void 0:t.message;return!!n&&-1!==n.indexOf(\"canceled\")}throwPaymentConfirmationProceedMessage(){throw new Ho(\"We've received your order and are processing your payment. Once the payment is verified, your order will be completed. We will send you an email when it's completed. Please note, this process may take a few minutes depending on the processing times of your chosen method.\")}isPaymentCompleted(e,t){return Ys(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),r=n.getPaymentMethodOrThrow(e),{features:i}=n.getStoreConfigOrThrow().checkoutSettings;if(!r.clientToken||!t||!i[\"PI-626.Block_unnecessary_payment_confirmation_for_StripeUPE\"])return!1;const{paymentIntent:o}=yield t.retrievePaymentIntent(r.clientToken);return(null==o?void 0:o.status)===Na.SUCCEEDED})}mapStripePaymentData(e,t,n=!1){const r=this.paymentIntegrationService.getState().getBillingAddress(),{firstName:i=\"\",lastName:o=\"\",email:a=\"\"}=r||{},s=this.mapStripeAddress(r);if(!e)throw new ur(ir.PaymentNotInitialized);if(!(a&&s&&s.city&&s.country&&i&&o))throw new ar(rr.MissingBillingAddress);return{elements:e,redirect:Ra.IF_REQUIRED,confirmParams:Object.assign({payment_method_data:Object.assign(Object.assign({},n?{allow_redisplay:\"always\"}:{}),{billing_details:{email:a,address:s,name:this.getShopperFullName(r)}})},t&&{return_url:t})}}isAdditionalActionError(e){return(0,f.some)(e,{code:\"additional_action_required\"})}isRedirectAction(e){const{type:t,data:{redirect_url:n}}=e;return\"redirect_to_url\"===t&&!!n}isOnPageAdditionalAction(e){const{type:t,data:{token:n}}=e;return\"additional_action_requires_payment_method\"===t&&!!n}updateStripePaymentIntent(e,t){return Ys(this,void 0,void 0,function*(){const n=yield this.paymentIntegrationService.loadPaymentMethod(e,{params:{method:t}}),{clientToken:r}=n.getPaymentMethodOrThrow(t);r&&this.scriptLoader.updateStripeElements({clientSecret:r})})}getStripeJsVersion(e){return e.useNewStripeJsVersion?Ma.CLOVER:Ma.V3}mapStripeAddress(e){if(e){const{city:t,address1:n,address2:r,countryCode:i,postalCode:o,stateOrProvinceCode:a}=e;return Object.assign({city:t,country:i,postal_code:o,line1:n,line2:r},a?{state:a}:{})}throw new ar(rr.MissingBillingAddress)}getShopperFullName(e){const{firstName:t=\"\",lastName:n=\"\"}=e||{};return`${t} ${n}`.trim()}verifyCheckoutSpamProtection(){return Ys(this,void 0,void 0,function*(){const{shouldExecuteSpamCheck:e}=this.paymentIntegrationService.getState().getCheckoutOrThrow();e&&(yield this.paymentIntegrationService.verifyCheckoutSpamProtection())})}}const $s={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},Ks={position:\"fixed\",\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},Zs=\"embedded-checkout-loading-indicator-rotation\";class Js{constructor(e){this.styles=Object.assign(Object.assign({},$s),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${Zs} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(n=>{e.style.setProperty(n,t[n])})}defineAnimation(){var e;if(document.getElementById(Zs))return;const t=document.createElement(\"style\");t.id=Zs,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${Zs} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}class Qs{constructor(e){this._decimalPlaces=e}toInteger(e){return Math.round(e*Math.pow(10,this._decimalPlaces))}}const Xs=[\"AC\",\"AD\",\"AE\",\"AF\",\"AG\",\"AI\",\"AL\",\"AM\",\"AO\",\"AQ\",\"AR\",\"AT\",\"AU\",\"AW\",\"AX\",\"AZ\",\"BA\",\"BB\",\"BD\",\"BE\",\"BF\",\"BG\",\"BH\",\"BI\",\"BJ\",\"BL\",\"BM\",\"BN\",\"BO\",\"BQ\",\"BR\",\"BS\",\"BT\",\"BV\",\"BW\",\"BY\",\"BZ\",\"CA\",\"CD\",\"CF\",\"CG\",\"CH\",\"CI\",\"CK\",\"CL\",\"CM\",\"CN\",\"CO\",\"CR\",\"CV\",\"CW\",\"CY\",\"CZ\",\"DE\",\"DJ\",\"DK\",\"DM\",\"DO\",\"DZ\",\"EC\",\"EE\",\"EG\",\"EH\",\"ER\",\"ES\",\"ET\",\"FI\",\"FJ\",\"FK\",\"FO\",\"FR\",\"GA\",\"GB\",\"GD\",\"GE\",\"GF\",\"GG\",\"GH\",\"GI\",\"GL\",\"GM\",\"GN\",\"GP\",\"GQ\",\"GR\",\"GS\",\"GT\",\"GU\",\"GW\",\"GY\",\"HK\",\"HN\",\"HR\",\"HT\",\"HU\",\"ID\",\"IE\",\"IL\",\"IM\",\"IN\",\"IO\",\"IQ\",\"IS\",\"IT\",\"JE\",\"JM\",\"JO\",\"JP\",\"KE\",\"KG\",\"KH\",\"KI\",\"KM\",\"KN\",\"KR\",\"KW\",\"KY\",\"KZ\",\"LA\",\"LB\",\"LC\",\"LI\",\"LK\",\"LR\",\"LS\",\"LT\",\"LU\",\"LV\",\"LY\",\"MA\",\"MC\",\"MD\",\"ME\",\"MF\",\"MG\",\"MK\",\"ML\",\"MM\",\"MN\",\"MO\",\"MQ\",\"MR\",\"MS\",\"MT\",\"MU\",\"MV\",\"MW\",\"MX\",\"MY\",\"MZ\",\"NA\",\"NC\",\"NE\",\"NG\",\"NI\",\"NL\",\"NO\",\"NP\",\"NR\",\"NU\",\"NZ\",\"OM\",\"PA\",\"PE\",\"PF\",\"PG\",\"PH\",\"PK\",\"PL\",\"PM\",\"PN\",\"PR\",\"PS\",\"PT\",\"PY\",\"QA\",\"RE\",\"RO\",\"RS\",\"RU\",\"RW\",\"SA\",\"SB\",\"SC\",\"SD\",\"SE\",\"SG\",\"SH\",\"SI\",\"SJ\",\"SK\",\"SL\",\"SM\",\"SN\",\"SO\",\"SR\",\"SS\",\"ST\",\"SV\",\"SX\",\"SZ\",\"TA\",\"TC\",\"TD\",\"TF\",\"TG\",\"TH\",\"TJ\",\"TK\",\"TL\",\"TM\",\"TN\",\"TO\",\"TR\",\"TT\",\"TV\",\"TW\",\"TZ\",\"UA\",\"UG\",\"US\",\"UY\",\"UZ\",\"VA\",\"VC\",\"VE\",\"VG\",\"VN\",\"VU\",\"WF\",\"WS\",\"XK\",\"YE\",\"YT\",\"ZA\",\"ZM\",\"ZW\",\"ZZ\"];var ec=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class tc{constructor(e,t,n,r){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=n,this.loadingIndicator=r}initialize(e){return ec(this,void 0,void 0,function*(){const{stripeocs:t,containerId:n}=e||{};if(!t||!n)throw new ur(ir.PaymentNotInitialized);const{gatewayId:r}=t;if(!r)throw new ar(rr.MissingPaymentMethod);const i=this._getMethodId(r),o=yield this.paymentIntegrationService.loadPaymentMethod(r,{params:{method:i}}),a=o.getPaymentMethodOrThrow(i,r),{loadingContainerId:s,buttonHeight:c,onComplete:u}=t;if(this._loadingIndicatorContainer=s,this._onComplete=u,!function(e){return\"object\"==typeof e&&null!==e&&\"initializationData\"in e&&void 0!==e.initializationData&&null!==e.initializationData&&\"object\"==typeof e.initializationData&&\"stripePublishableKey\"in e.initializationData&&\"stripeConnectedAccount\"in e.initializationData&&\"shopperLanguage\"in e.initializationData&&void 0!==e.initializationData.stripePublishableKey&&void 0!==e.initializationData.stripeConnectedAccount&&void 0!==e.initializationData.shopperLanguage}(a))throw new ar(rr.MissingPaymentMethod);const{initializationData:d}=a,{captureMethod:l}=d,p=this.stripeIntegrationService.getStripeJsVersion(d);this._captureMethod=l,this._stripeClient=yield this.scriptLoader.getStripeClient(d,o.getCartLocale(),p),yield this.paymentIntegrationService.loadDefaultCheckout(),yield this._mountExpressCheckoutElement(n,this._stripeClient,c),this._initializeEvents(i)})}signIn(){return Promise.resolve()}signOut(){return Promise.resolve()}executePaymentMethodCheckout(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_mountExpressCheckoutElement(e,t,n=40){return ec(this,void 0,void 0,function*(){const r=this._shouldRequireShippingAddress(),i=Object.assign(Object.assign(Object.assign({shippingAddressRequired:r},r?{allowedShippingCountries:yield this._getAvailableCountries()}:{}),r?{shippingRates:[{id:\"_\",amount:0,displayName:\"Pending rates\"}]}:{}),{billingAddressRequired:!0,emailRequired:!0,phoneNumberRequired:!0,paymentMethods:{link:Ra.AUTO,applePay:Ra.NEVER,googlePay:Ra.NEVER,amazonPay:Ra.NEVER,paypal:Ra.NEVER,klarna:Ra.NEVER},buttonHeight:n}),{cartAmount:o=1}=this.paymentIntegrationService.getState().getCart()||{},a=Object.assign({mode:\"payment\",amount:this._toCents(o),currency:this._getCurrency()},this._captureMethod?{captureMethod:this._captureMethod}:{});this._stripeElements=t.elements(a),this._linkV2Element=this._stripeElements.create(xa.EXPRESS_CHECKOUT,i),this._linkV2Element.mount(`#${e}`)})}_initializeEvents(e){this._linkV2Element&&(this._shouldRequireShippingAddress()&&(this._linkV2Element.on(Da.SHIPPING_ADDRESS_CHANGE,e=>ec(this,void 0,void 0,function*(){return this._onShippingAddressChange(e)})),this._linkV2Element.on(Da.SHIPPING_RATE_CHANGE,e=>ec(this,void 0,void 0,function*(){return this._onShippingRateChange(e)}))),this._linkV2Element.on(Da.CONFIRM,t=>ec(this,void 0,void 0,function*(){return this._onConfirm(t,e)})),this._linkV2Element.on(Da.CANCEL,this._onCancel))}_onShippingAddressChange(e){return ec(this,void 0,void 0,function*(){if(!(\"address\"in e))return;const t=e.address,n={firstName:\"\",lastName:\"\",phone:\"\",company:\"\",address1:\"\",address2:\"\",city:(null==t?void 0:t.city)||\"\",countryCode:(null==t?void 0:t.country)||\"\",postalCode:(null==t?void 0:t.postal_code)||\"\",stateOrProvince:(null==t?void 0:t.state)||\"\",stateOrProvinceCode:(null==t?void 0:t.state)||\"\",customFields:[]};yield this.paymentIntegrationService.updateShippingAddress(n);const r=yield this._getAvailableShippingOptions();yield this._updateDisplayedPrice(),(null==r?void 0:r.length)?e.resolve({shippingRates:r}):e.reject()})}_onCancel(){throw new ri}_onShippingRateChange(e){return ec(this,void 0,void 0,function*(){if(\"shippingRate\"in e){const{shippingRate:t}=e;yield this._handleShippingOptionChange(null==t?void 0:t.id),yield this._updateDisplayedPrice(),e.resolve({})}})}_onConfirm(e,t){return ec(this,void 0,void 0,function*(){if(\"billingDetails\"in e&&\"shippingAddress\"in e&&this._stripeClient&&this._stripeElements){yield this.stripeIntegrationService.verifyCheckoutSpamProtection(),yield this._updateShippingAndBillingAddress(e),yield this.paymentIntegrationService.submitOrder();const n=this._getPaymentPayload(t);try{yield this.paymentIntegrationService.submitPayment(n)}catch(e){yield this._processAdditionalAction(e,t)}}return Promise.resolve()})}_updateShippingAndBillingAddress(e){var t,n,r,i,o,a,s,c;return ec(this,void 0,void 0,function*(){const u=this._shouldRequireShippingAddress(),d=(null===(n=null===(t=e.shippingAddress)||void 0===t?void 0:t.name)||void 0===n?void 0:n.split(\" \")[0])||(null===(i=null===(r=e.billingDetails)||void 0===r?void 0:r.name)||void 0===i?void 0:i.split(\" \")[0])||\"\",l=(null===(a=null===(o=e.shippingAddress)||void 0===o?void 0:o.name)||void 0===a?void 0:a.split(\" \")[1])||(null===(c=null===(s=e.billingDetails)||void 0===s?void 0:s.name)||void 0===c?void 0:c.split(\" \")[1])||\"\";if(u){const t=this._mapShippingAddress(e.shippingAddress,e.billingDetails,d,l);yield this.paymentIntegrationService.updateShippingAddress(t)}const p=this._mapBillingAddress(e.shippingAddress,e.billingDetails,d,l);yield this.paymentIntegrationService.updateBillingAddress(p)})}_mapShippingAddress(e,t,n,r){var i,o,a,s,c,u,d;return{firstName:n,lastName:r,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(i=null==e?void 0:e.address)||void 0===i?void 0:i.line1)||\"\",address2:(null===(o=null==e?void 0:e.address)||void 0===o?void 0:o.line2)||\"\",city:(null===(a=null==e?void 0:e.address)||void 0===a?void 0:a.city)||\"\",countryCode:(null===(s=null==e?void 0:e.address)||void 0===s?void 0:s.country)||\"\",postalCode:(null===(c=null==e?void 0:e.address)||void 0===c?void 0:c.postal_code)||\"\",stateOrProvince:(null===(u=null==e?void 0:e.address)||void 0===u?void 0:u.state)||\"\",stateOrProvinceCode:(null===(d=null==e?void 0:e.address)||void 0===d?void 0:d.state)||\"\",customFields:[]}}_mapBillingAddress(e,t,n,r){var i,o,a,s,c,u;return{email:(null==t?void 0:t.email)||\"\",firstName:n,lastName:r,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(i=null==t?void 0:t.address)||void 0===i?void 0:i.line1)||\"\",address2:\"\",city:(null===(o=null==t?void 0:t.address)||void 0===o?void 0:o.city)||\"\",countryCode:(null===(a=null==t?void 0:t.address)||void 0===a?void 0:a.country)||\"\",postalCode:(null===(s=null==t?void 0:t.address)||void 0===s?void 0:s.postal_code)||\"\",stateOrProvince:(null===(c=null==t?void 0:t.address)||void 0===c?void 0:c.state)||\"\",stateOrProvinceCode:(null===(u=null==e?void 0:e.address)||void 0===u?void 0:u.state)||\"\",customFields:[]}}_processAdditionalAction(e,t){return ec(this,void 0,void 0,function*(){if(!ma(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this._stripeClient||!this._stripeElements)throw new ur(ir.PaymentNotInitialized);const{data:n}=e.body.additional_action_required,{token:r}=n,{paymentIntent:i}=yield this._confirmStripePaymentOrThrow(n,t),o=this._getPaymentPayload(t,(null==i?void 0:i.id)||r);try{this._toggleLoadingIndicator(!0),yield this.paymentIntegrationService.submitPayment(o),yield this._completeCheckoutFlow()}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}finally{this._toggleLoadingIndicator(!1)}})}_confirmStripePaymentOrThrow(e,t){var n,r,i;return ec(this,void 0,void 0,function*(){const{token:o,redirect_url:a}=e,s=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,a);let c;try{const e=(yield this.stripeIntegrationService.isPaymentCompleted(t,this._stripeClient))?yield null===(i=this._stripeClient)||void 0===i?void 0:i.retrievePaymentIntent(o||\"\"):yield null===(n=this._stripeClient)||void 0===n?void 0:n.confirmPayment({elements:s.elements,clientSecret:o,redirect:Ra.IF_REQUIRED,confirmParams:{return_url:null===(r=s.confirmParams)||void 0===r?void 0:r.return_url}});if(c=null==e?void 0:e.error,c||!(null==e?void 0:e.paymentIntent))throw new Ho;return e}catch(e){return this.stripeIntegrationService.throwStripeError(c)}})}_completeCheckoutFlow(){return ec(this,void 0,void 0,function*(){return\"function\"==typeof this._onComplete?this._onComplete():(window.location.replace(\"/checkout/order-confirmation\"),Promise.resolve())})}_getPaymentPayload(e,t){var n;const r=(null===(n=this.paymentIntegrationService.getState().getCart())||void 0===n?void 0:n.id)||\"\";return{methodId:e,paymentData:{formattedPayload:Object.assign(Object.assign({cart_id:r},t?{credit_card_token:{token:t}}:{}),{confirm:!1,method:ka.Link})}}}_shouldRequireShippingAddress(){const{getCart:e}=this.paymentIntegrationService.getState(),{lineItems:t}=e()||{};return!!(null==t?void 0:t.physicalItems.length)}_updateDisplayedPrice(){return ec(this,void 0,void 0,function*(){this._stripeElements&&this._stripeElements.update({currency:this._getCurrency(),mode:\"payment\",amount:yield this._getTotalPrice()})})}_getCurrency(){var e;if(!this._currencyCode){const t=null===(e=this.paymentIntegrationService.getState().getCart())||void 0===e?void 0:e.currency;t&&(this._currencyCode=t.code.toLowerCase())}return this._currencyCode}_getTotalPrice(){var e;return ec(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const{getCheckoutOrThrow:t,getCart:n}=this.paymentIntegrationService.getState(),{decimalPlaces:r}=(null===(e=n())||void 0===e?void 0:e.currency)||{},i=(0,f.round)(t().outstandingBalance,r).toFixed(r);return this._toCents(+i)})}_getAvailableCountries(){var e;return ec(this,void 0,void 0,function*(){const t=yield this.paymentIntegrationService.loadShippingCountries();return((null===(e=t.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code))||[]).filter(e=>Xs.includes(e))})}_getAvailableShippingOptions(){var e,t,n;return ec(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState().getConsignments();if(!(null==r?void 0:r[0]))return;const i=r[0],o=(i.availableShippingOptions||[]).map(this._getStripeShippingOption.bind(this)),a=null===(e=i.availableShippingOptions)||void 0===e?void 0:e.find(e=>e.isRecommended),s=null===(t=i.selectedShippingOption)||void 0===t?void 0:t.id,c=null==a?void 0:a.id;return s?o.sort(e=>e.id===s?-1:0):c?(o.sort(e=>e.id===c?-1:0),yield this._handleShippingOptionChange(c)):yield this._handleShippingOptionChange(null===(n=o[0])||void 0===n?void 0:n.id),o.slice(0,9)})}_getStripeShippingOption({id:e,cost:t,description:n}){return{id:e,displayName:n,amount:this._toCents(t)}}_handleShippingOptionChange(e){return ec(this,void 0,void 0,function*(){if(e&&\"shipping_option_unselected\"!==e)return this.paymentIntegrationService.selectShippingOption(e)})}_getAmountTransformer(){if(this._amountTransformer)return this._amountTransformer;const{getCart:e}=this.paymentIntegrationService.getState(),{currency:t}=e()||{};return t?new Qs(t.decimalPlaces):void 0}_toCents(e){const t=Math.round(100*e),n=this._getAmountTransformer();return n?n.toInteger(e):t}_toggleLoadingIndicator(e){e&&this._loadingIndicatorContainer?this.loadingIndicator.show(this._loadingIndicatorContainer):this.loadingIndicator.hide()}_getMethodId(e){const{initializationData:{checkoutSessionEnabled:t}={}}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e);return t?ka.CHECKOUT_SESSION:ka.OCS}}const nc=Sr(e=>{const t=new za((0,or.vQ)()),n=new Js({containerStyles:Ks});return new tc(e,t,new Ws(e,t),n)},[{id:\"stripeocs\"}]);var rc=n(9386),ic=n(2161);function oc(e,t,n){const r=new WeakMap;function i(e){return(...n)=>{const i=n[n.length-1],{useCache:o}=(a=i)&&\"boolean\"==typeof a.useCache?i:{useCache:!1};var a;if(!o)return e.call(this,...n);const s=r.get(this)||{};var c;return r.get(this)||r.set(this,s),s[t]||(s[t]=(c=e,(0,jn.Bj)(function(...e){const t=c.call(this,...e);return t instanceof rc.c?(0,w.H)(t).pipe((0,ic.t)()):\"function\"==typeof t?(0,jn.Bj)(e=>(0,w.H)(t(e)).pipe((0,ic.t)()),{isEqual:f.isEqual}):t},{isEqual:f.isEqual}))),s[t].call(this,...n)}}return{get(){if(\"function\"!=typeof n.value)throw new Error(\"Decorator should be used in functions\");const e=i.call(this,n.value);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e}}}function ac(e,t,n,r){var i,o,a,s,c,u,d,l;return c=this,u=void 0,l=function*(){const c=t.customer.getCustomer(),u=t.b2bToken.getToken(),d=(l=null!==(a=null===(o=null===(i=t.config.getStoreConfig())||void 0===i?void 0:i.b2bApiSettings)||void 0===o?void 0:o.baseUrl)&&void 0!==a?a:\"\",function(){if(\"undefined\"==typeof window||!window.location)return!1;try{return!!new URLSearchParams(window.location.search).has(\"enableB2bDevMode\")&&(console.log(\"B2B Dev Mode Enabled\"),!0)}catch(e){return!1}}()?\"https://api-b2b.bigcommerce.com\":l);var l;const p=null===(s=t.cart.getCart())||void 0===s?void 0:s.companyId;if(!c||c.isGuest||!u||!d||!p)throw new Gn(Vn.MissingCheckoutConfig);const{body:h}=yield n.getB2BCompanyPaymentMethods(p,u,d,r);return function(e,t){const n=new Set(t.data.filter(e=>\"1\"===e.isEnabled).map(e=>e.code));return e.filter(e=>n.has(e.id))}(e,h)},new((d=void 0)||(d=Promise))(function(e,t){function n(e){try{i(l.next(e))}catch(e){t(e)}}function r(e){try{i(l.throw(e))}catch(e){t(e)}}function i(t){var i;t.done?e(t.value):(i=t.value,i instanceof d?i:new d(function(e){e(i)})).then(n,r)}i((l=l.apply(c,u||[])).next())})}var sc=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};const cc=e=>!!e;class uc{constructor(e,t){this._requestSender=e,this._b2bCompanyPaymentMethodRequestSender=t}loadPaymentMethodsById(e,t){return n=>new rc.c(r=>{var i;const a=null===(i=n.getState().cart.getCart())||void 0===i?void 0:i.id,s=a?Object.assign(Object.assign({},null==t?void 0:t.params),{cartId:a}):Object.assign({},null==t?void 0:t.params);r.next((0,o.VP)(ht.LoadPaymentMethodsRequested)),Promise.all(e.map(e=>sc(this,void 0,void 0,function*(){try{return(yield this._requestSender.loadPaymentMethod(e,Object.assign(Object.assign({},t),{params:s}))).body}catch(e){return}}))).then(e=>{const t=e.filter(cc);r.next((0,o.VP)(ht.LoadPaymentMethodsSucceeded,t)),r.complete()}).catch(e=>{r.next((0,o.VP)(ht.LoadPaymentMethodsFailed,e)),r.complete()})})}loadPaymentMethods(e){return t=>rc.c.create(n=>{const r=t.getState(),i=r.cart.getCartOrThrow();n.next((0,o.VP)(ht.LoadPaymentMethodsRequested)),this._requestSender.loadPaymentMethods(Object.assign(Object.assign({},e),{params:Object.assign(Object.assign({},null==e?void 0:e.params),{cartId:i.id})})).then(t=>sc(this,void 0,void 0,function*(){var i,a,s,c;const u={deviceSessionId:t.headers[\"x-device-session-id\"],sessionHash:t.headers[\"x-session-hash\"]};let d=t.body;null!==(c=null===(s=null===(a=null===(i=r.config.getStoreConfig())||void 0===i?void 0:i.checkoutSettings.capabilities)||void 0===a?void 0:a.payment)||void 0===s?void 0:s.b2bPaymentMethodFilter)&&void 0!==c&&c&&(d=yield ac(d,r,this._b2bCompanyPaymentMethodRequestSender,e)),n.next((0,o.VP)(ht.LoadPaymentMethodsSucceeded,d,u)),n.complete()})).catch(e=>{n.error((0,o.fQ)(ht.LoadPaymentMethodsFailed,e))})})}loadPaymentMethod(e,t){return n=>rc.c.create(r=>{var i;const a=null===(i=n.getState().cart.getCart())||void 0===i?void 0:i.id,s=a?Object.assign(Object.assign({},null==t?void 0:t.params),{cartId:a}):Object.assign({},null==t?void 0:t.params);r.next((0,o.VP)(ht.LoadPaymentMethodRequested,void 0,{methodId:e})),this._requestSender.loadPaymentMethod(e,Object.assign(Object.assign({},t),{params:s})).then(t=>{r.next((0,o.VP)(ht.LoadPaymentMethodSucceeded,t.body,{methodId:e})),r.complete()}).catch(t=>{r.error((0,o.fQ)(ht.LoadPaymentMethodFailed,t,{methodId:e}))})})}}var dc;(function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)})([oc],uc.prototype,\"loadPaymentMethod\",null),function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(dc||(dc={}));const lc=dc,pc=\"This API endpoint is for internal use only and may change in the future\",hc={\"X-Checkout-SDK-Version\":\"1.916.1\"};class fc{constructor(e){this._requestSender=e}loadPaymentMethods({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/payments\",{timeout:e,headers:Object.assign({Accept:lc.JsonV1,\"X-API-INTERNAL\":pc},hc),params:t})}loadPaymentMethod(e,{timeout:t,params:n}={}){const r=`/api/storefront/payments/${e}`;return this._requestSender.get(r,{timeout:t,headers:Object.assign({Accept:lc.JsonV1,\"X-API-INTERNAL\":pc},hc),params:n})}}class yc{constructor(e){this._requestSender=e}getB2BCompanyPaymentMethods(e,t,n,r){return i=this,o=void 0,s=function*(){return this._requestSender.get(`${n}/api/v2/companies/${e}/payments`,{timeout:null==r?void 0:r.timeout,credentials:!1,headers:{authToken:t,Authorization:`Bearer ${t}`}})},new((a=void 0)||(a=Promise))(function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function r(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof a?i:new a(function(e){e(i)})).then(n,r)}c((s=s.apply(i,o||[])).next())});var i,o,a,s}}var mc=n(3837),gc=n(9301),vc=n(4128),_c=n(277),bc=n(6780),Sc=n(4203);function wc(e,t,n){return(r=t)&&r.type&&r.error?(0,gc.x)((0,vc.of)(t),(0,Sc.$)((0,o.fQ)(e,t.payload,n))):(0,Sc.$)((0,o.fQ)(e,t,n));var r}class Cc extends d{constructor(e){super(e||\"Unable to continue as a guest because the customer is already signed in.\"),this.name=\"UnableToContinueAsGuestError\",this.type=\"unable_to_continue_as_guest\"}}class Ic{constructor(e,t){this._requestSender=e,this._subscriptionActionCreator=t}continueAsGuest(e,t){return n=>{const r=n.getState(),i=r.checkout.getCheckout();if(!i)throw new Gn(Vn.MissingCheckout);const a=r.customer.getCustomer();if(a&&!a.isGuest)throw new Cc;const s=r.billingAddress.getBillingAddress();let c;if(s){const{country:t}=s,n=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(s,[\"country\"]);c=Object.assign(Object.assign({},n),e)}else c=e;const u=!(0,f.isEmpty)(s);return(0,mc.h)((0,gc.x)((0,vc.of)((0,o.VP)(j.ContinueAsGuestRequested)),(0,_c.v)(()=>{return e=this,n=void 0,a=function*(){const{body:e}=yield this._createOrUpdateBillingAddress(i.id,c,u,t);return(0,o.VP)(j.ContinueAsGuestSucceeded,e)},new((r=void 0)||(r=Promise))(function(t,i){function o(e){try{c(a.next(e))}catch(e){i(e)}}function s(e){try{c(a.throw(e))}catch(e){i(e)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(e){e(n)})).then(o,s)}c((a=a.apply(e,n||[])).next())});var e,n,r,a})).pipe((0,C.W)(e=>wc(j.ContinueAsGuestFailed,e))),this._updateCustomerConsent(e,t))}}updateAddress(e,t){return n=>rc.c.create(r=>{const i=n.getState(),a=i.checkout.getCheckout();if(!a)throw new Gn(Vn.MissingCheckout);r.next((0,o.VP)(j.UpdateBillingAddressRequested));const s=i.billingAddress.getBillingAddress(),c=!(0,f.isEmpty)(s),u=Object.assign(Object.assign({},e),{email:void 0===e.email&&s?s.email:e.email});s&&s.id&&(u.id=s.id),this._createOrUpdateBillingAddress(a.id,u,c,t).then(({body:e})=>{r.next((0,o.VP)(j.UpdateBillingAddressSucceeded,e)),r.complete()}).catch(e=>{r.error((0,o.fQ)(j.UpdateBillingAddressFailed,e))})})}_updateCustomerConsent({email:e,acceptsAbandonedCartEmails:t,acceptsMarketingNewsletter:n},r){return null==t&&null==n?(0,bc.I)():this._subscriptionActionCreator.updateSubscriptions({email:e,acceptsMarketingNewsletter:n||!1,acceptsAbandonedCartEmails:t||!1},r)}_createOrUpdateBillingAddress(e,t,n,r){return n?this._requestSender.updateAddress(e,t,r):this._requestSender.createAddress(e,t,r)}}class Ec extends d{constructor(e){super(e||\"Your checkout could not be processed because your cart is empty. Please add items to your cart and try again.\"),this.name=\"EmptyCartError\",this.type=\"empty_cart\"}}const Pc={include:[\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"promotions.banners\"].join(\",\")};class Oc{constructor(e){this._requestSender=e}createAddress(e,t,{timeout:n}={}){const r=`/api/storefront/checkouts/${e}/billing-address`,i=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.post(r,{body:t,params:Pc,headers:i,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new Ec;throw e})}updateAddress(e,t,{timeout:n}={}){const{id:r}=t,i=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(t,[\"id\"]),o=`/api/storefront/checkouts/${e}/billing-address/${r}`,a=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.put(o,{params:Pc,body:i,headers:a,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new Ec;throw e})}}class Ac{constructor(e){this._requestSender=e}createBuyNowCart(e,{timeout:t}={}){const n=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.post(\"/api/storefront/carts\",{body:e,headers:n,timeout:t})}}class Tc{constructor(e,t,n){this._checkoutRequestSender=e,this._configActionCreator=t,this._formFieldsActionCreator=n}loadCheckout(e,t){return()=>(0,gc.x)((0,vc.of)((0,o.VP)(x.LoadCheckoutRequested)),(0,mc.h)(this._configActionCreator.loadConfig({useCache:!0,timeout:null==t?void 0:t.timeout,params:{checkoutId:e}}),this._formFieldsActionCreator.loadFormFields({useCache:!0,timeout:null==t?void 0:t.timeout})),(0,_c.v)(()=>this._checkoutRequestSender.loadCheckout(e,t).then(({body:e})=>(0,o.VP)(x.LoadCheckoutSucceeded,this._transformCustomerAddresses(e))))).pipe((0,C.W)(e=>wc(x.LoadCheckoutFailed,e)))}loadDefaultCheckout(e){return t=>(0,gc.x)((0,vc.of)((0,o.VP)(x.LoadCheckoutRequested)),(0,mc.h)(this._configActionCreator.loadConfig({useCache:!0,timeout:null==e?void 0:e.timeout}),this._formFieldsActionCreator.loadFormFields({useCache:!0,timeout:null==e?void 0:e.timeout})),(0,_c.v)(()=>{return n=this,r=void 0,a=function*(){const n=t.getState().config.getContextConfig();if(!n||!n.checkoutId)throw new Gn(Vn.MissingCheckoutConfig);const{body:r}=yield this._checkoutRequestSender.loadCheckout(n.checkoutId,e);return(0,o.VP)(x.LoadCheckoutSucceeded,this._transformCustomerAddresses(r))},new((i=void 0)||(i=Promise))(function(e,t){function o(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(o,s)}c((a=a.apply(n,r||[])).next())});var n,r,i,a})).pipe((0,C.W)(e=>wc(x.LoadCheckoutFailed,e)))}updateCheckout(e,t){return n=>new rc.c(r=>{const i=n.getState().checkout.getCheckout();if(!i)throw new Gn(Vn.MissingCheckout);r.next((0,o.VP)(x.UpdateCheckoutRequested)),this._checkoutRequestSender.updateCheckout(i.id,e,t).then(({body:e})=>{r.next((0,o.VP)(x.UpdateCheckoutSucceeded,e)),r.complete()}).catch(e=>{r.error((0,o.fQ)(x.UpdateCheckoutFailed,e))})})}loadCurrentCheckout(e){return t=>{const n=t.getState().checkout.getCheckout();if(!n)throw new Gn(Vn.MissingCheckout);return this.loadCheckout(n.id,e)(t)}}hydrateInitialState(e){return{type:N.HydrateInitialState,payload:e}}_transformCustomerAddresses(e){return Object.assign(Object.assign({},e),{customer:Object.assign(Object.assign({},e.customer),{addresses:e.customer.addresses.map(e=>Object.assign(Object.assign({},e),{shouldSaveAddress:!1}))})})}}function kc(e){return(0,f.uniq)(e).join(\",\")}function Rc(e,t=[]){return Array.isArray(t)?kc([...e,...t]):function(e,t){const n=(0,f.keys)((0,f.pickBy)(t,e=>!e)),r=(0,f.keys)((0,f.filter)(t));return kc([...(0,f.difference)(e,n),...r])}(e,t)}const Mc=[\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"customer.customerGroup\",\"payments\",\"promotions.banners\"];class xc extends p{constructor(e){super(e,{message:e.body.title}),this.name=\"CheckoutNotAvailableError\",this.type=\"checkout_not_available\"}}class Nc{constructor(e){this._requestSender=e}loadCheckout(e,{params:{include:t}={},timeout:n}={}){const r=`/api/storefront/checkout/${e}`,i=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.get(r,{params:{include:Rc(Mc,t)},headers:i,timeout:n}).catch(e=>{if(e.status>=400&&e.status<500)throw new xc(e);throw e})}updateCheckout(e,t,{params:{include:n}={},timeout:r}={}){const i=`/api/storefront/checkout/${e}`,o=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.put(i,{params:{include:Rc(Mc,n)},body:t,headers:o,timeout:r}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new Ec;throw e})}}class Dc{isEqual(e,t){return(0,f.isEqual)(this._normalize(e),this._normalize(t))}_normalize(e){return{cartAmount:e.cartAmount,currency:e.currency,id:e.id,lineItems:{digitalItems:e.lineItems.digitalItems.slice().sort((e,t)=>`${e.productId}${e.variantId}`.localeCompare(`${t.productId}${t.variantId}`)).map(e=>({extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId})),giftCertificates:e.lineItems.giftCertificates.slice().sort((e,t)=>`${e.id}`.localeCompare(`${t.id}`)).map(e=>({amount:e.amount,recipient:e.recipient})),physicalItems:e.lineItems.physicalItems.slice().sort((e,t)=>`${e.productId}${e.variantId}`.localeCompare(`${t.productId}${t.variantId}`)).map(e=>({extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId,giftWrapping:e.giftWrapping}))}}}}class jc extends d{constructor(e,t){super(\"An update to your shopping cart has been detected and your available shipping costs have been updated.\"),this.name=\"CartChangedError\",this.type=\"cart_changed\",this.data={previous:e,updated:t}}}class Lc{constructor(e){this._checkoutRequestSender=e}validate(e,t){if(!e)throw new Gn(Vn.MissingCheckout);return this._checkoutRequestSender.loadCheckout(e.id,t).then(t=>{const n=new Dc;if(!(e.outstandingBalance===t.body.outstandingBalance&&this._compareCoupons(e.coupons,t.body.coupons)&&this._compareGiftCertificates(e.giftCertificates,t.body.giftCertificates)&&n.isEqual(e.cart,t.body.cart)))throw new jc(this._getComparableCheckout(e),this._getComparableCheckout(t.body))})}_compareCoupons(e,t){return(0,f.isEqual)((0,f.map)(e,\"code\"),(0,f.map)(t,\"code\"))}_compareGiftCertificates(e,t){return(0,f.isEqual)((0,f.map)(e,\"code\"),(0,f.map)(t,\"code\"))}_getComparableCheckout(e){const{cart:t,coupons:n,giftCertificates:r,outstandingBalance:i}=e;return{cart:{cartAmount:t.cartAmount,currency:t.currency,lineItems:t.lineItems},coupons:n,giftCertificates:r,outstandingBalance:i}}}var zc;class Fc{constructor(e){this._configRequestSender=e}loadConfig(e){return rc.c.create(t=>{t.next((0,o.VP)(ue.LoadConfigRequested)),this._configRequestSender.loadConfig(e).then(e=>{t.next((0,o.VP)(ue.LoadConfigSucceeded,e.body)),t.complete()}).catch(e=>{t.error((0,o.fQ)(ue.LoadConfigFailed,e))})})}}!function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([oc],Fc.prototype,\"loadConfig\",null);class Bc{constructor(e){this._requestSender=e}loadConfig({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/checkout-settings\",{timeout:e,headers:Object.assign({Accept:lc.JsonV1,\"X-API-INTERNAL\":pc},hc),params:t}).catch(e=>{if(e.status>=400&&e.status<500)throw new xc(e);throw e})}}class Uc{constructor(e){this._couponRequestSender=e}applyCoupon(e,t){return n=>rc.c.create(r=>{const i=n.getState().checkout.getCheckout();if(!i)throw new Gn(Vn.MissingCheckout);r.next((0,o.VP)(Y.ApplyCouponRequested)),this._couponRequestSender.applyCoupon(i.id,e,t).then(({body:e})=>{r.next((0,o.VP)(Y.ApplyCouponSucceeded,e)),r.complete()}).catch(e=>{r.error((0,o.fQ)(Y.ApplyCouponFailed,e))})})}removeCoupon(e,t){return n=>rc.c.create(r=>{const i=n.getState().checkout.getCheckout();if(!i)throw new Gn(Vn.MissingCheckout);r.next((0,o.VP)(Y.RemoveCouponRequested)),this._couponRequestSender.removeCoupon(i.id,e,t).then(({body:e})=>{r.next((0,o.VP)(Y.RemoveCouponSucceeded,e)),r.complete()}).catch(e=>{r.error((0,o.fQ)(Y.RemoveCouponFailed,e))})})}}!function(e){e.AvailableShippingOptions=\"consignments.availableShippingOptions\",e.PhysicalItemsCategoryNames=\"cart.lineItems.physicalItems.categoryNames\",e.DigitalItemsCategoryNames=\"cart.lineItems.digitalItems.categoryNames\"}(zc||(zc={}));class qc{constructor(e){this._requestSender=e}applyCoupon(e,t,{timeout:n}={}){const r=`/api/storefront/checkouts/${e}/coupons`,i=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.post(r,{headers:i,timeout:n,params:{include:kc([...Mc,zc.AvailableShippingOptions])},body:{couponCode:t}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new Ec;throw e})}removeCoupon(e,t,{timeout:n}={}){const r=`/api/storefront/checkouts/${e}/coupons/${t}`,i=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.delete(r,{headers:i,timeout:n,params:{include:kc([...Mc,zc.AvailableShippingOptions])}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new Ec;throw e})}}var Vc=n(9835);function Gc(e){const t=e;return\"object\"==typeof t&&\"object\"==typeof t.payload&&\"string\"==typeof t.payload.token}class Hc{constructor(e,t,n){this._customerRequestSender=e,this._checkoutActionCreator=t,this._spamProtectionActionCreator=n}createCustomer(e,t){return n=>{const r=n.getState().config.getStoreConfigOrThrow(),{isStorefrontSpamProtectionEnabled:i}=r.checkoutSettings,a=r=>(0,w.H)(this._customerRequestSender.createAccount(Object.assign(Object.assign({},e),{token:r}),t)).pipe((0,Vc.n)(()=>(0,gc.x)(this._checkoutActionCreator.loadCurrentCheckout(t)(n),(0,vc.of)((0,o.VP)(Pe.CreateCustomerSucceeded)))));return(0,gc.x)((0,vc.of)((0,o.VP)(Pe.CreateCustomerRequested)),i?(0,w.H)(this._spamProtectionActionCreator.execute()(n)).pipe((0,Vc.n)(e=>{var t;return Gc(e)?(0,gc.x)((0,vc.of)(e),a(null===(t=e.payload)||void 0===t?void 0:t.token)):(0,vc.of)(e)})):a()).pipe((0,C.W)(e=>wc(Pe.CreateCustomerFailed,e)))}}createAddress(e,t){return(0,gc.x)((0,vc.of)((0,o.VP)(Pe.CreateCustomerAddressRequested)),(0,_c.v)(()=>{return n=this,r=void 0,a=function*(){const{body:n}=yield this._customerRequestSender.createAddress(e,t);return(0,o.VP)(Pe.CreateCustomerAddressSucceeded,n)},new((i=void 0)||(i=Promise))(function(e,t){function o(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(o,s)}c((a=a.apply(n,r||[])).next())});var n,r,i,a})).pipe((0,C.W)(e=>wc(Pe.CreateCustomerAddressFailed,e)))}signInCustomer(e,t){return n=>{const r=n.getState().checkout.getCheckoutOrThrow(),i=r.cart.source===pi.BuyNow?r.id:void 0;return(0,gc.x)((0,vc.of)((0,o.VP)(Pe.SignInCustomerRequested)),(0,w.H)(this._customerRequestSender.signInCustomer(Object.assign(Object.assign({},e),{cartId:i}),t)).pipe((0,Vc.n)(({body:e})=>e.data.persistentCartRetrievalInformation?(0,gc.x)(this._checkoutActionCreator.loadCheckout(e.data.persistentCartRetrievalInformation.id,t)(n),(0,vc.of)((0,o.VP)(Pe.SignInCustomerSucceeded,e.data))):(0,gc.x)(this._checkoutActionCreator.loadCurrentCheckout(t)(n),(0,vc.of)((0,o.VP)(Pe.SignInCustomerSucceeded,e.data)))))).pipe((0,C.W)(e=>wc(Pe.SignInCustomerFailed,e)))}}signOutCustomer(e){return t=>{const n=t.getState().checkout.getCheckoutOrThrow(),r=n.cart.source===pi.BuyNow?n.id:void 0;return(0,gc.x)((0,vc.of)((0,o.VP)(Pe.SignOutCustomerRequested)),(0,w.H)(this._customerRequestSender.signOutCustomer(e,r)).pipe((0,Vc.n)(({body:n})=>(0,gc.x)(this._checkoutActionCreator.loadCurrentCheckout(e)(t),(0,vc.of)((0,o.VP)(Pe.SignOutCustomerSucceeded,n.data)))))).pipe((0,C.W)(e=>wc(Pe.SignOutCustomerFailed,e)))}}}class Yc{constructor(e){this._requestSender=e}createAccount(e,{timeout:t}={}){return this._requestSender.post(\"/api/storefront/customer\",{timeout:t,headers:hc,body:e})}createAddress(e,{timeout:t}={}){return this._requestSender.post(\"/api/storefront/customer-address\",{timeout:t,headers:hc,body:e})}signInCustomer(e,{timeout:t}={}){return this._requestSender.post(\"/internalapi/v1/checkout/customer\",{timeout:t,headers:hc,body:e})}signOutCustomer({timeout:e}={},t){return this._requestSender.delete(\"/internalapi/v1/checkout/customer\",Object.assign({timeout:e,headers:hc},t&&{body:{cartId:t}}))}}class Wc{constructor(e){this._formFieldsRequestSender=e}loadFormFields(e){return(0,gc.x)((0,vc.of)((0,o.VP)(Ge.LoadFormFieldsRequested)),(0,_c.v)(()=>{return t=this,n=void 0,i=function*(){const{body:t}=yield this._formFieldsRequestSender.loadFields(e);return(0,o.VP)(Ge.LoadFormFieldsSucceeded,t)},new((r=void 0)||(r=Promise))(function(e,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((i=i.apply(t,n||[])).next())});var t,n,r,i})).pipe((0,C.W)(e=>wc(Ge.LoadFormFieldsFailed,e)))}}!function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([oc],Wc.prototype,\"loadFormFields\",null);class $c{constructor(e){this._requestSender=e}loadFields({timeout:e}={}){return this._requestSender.get(\"/api/storefront/form-fields\",{timeout:e,headers:Object.assign({Accept:lc.JsonV1,\"X-API-INTERNAL\":pc},hc)})}}class Kc extends d{constructor(e){super(e||\"Unable to proceed because the required element is unexpectedly detached from the page.\"),this.name=\"UnexpectedDetachmentError\",this.type=\"unexpected_detachment\"}}class Zc{constructor(e){this._mutationObserver=e}ensurePresence(e,t){return n=this,r=void 0,o=function*(){const n=new $i(t),r=this._mutationObserver.create(t=>{t.forEach(t=>{0!==Array.from(t.removedNodes).filter(t=>e.some(e=>t===e||t.contains(e))).length&&n.cancel(new Kc)})});r.observe(document.body,{childList:!0,subtree:!0});try{const e=yield n.promise;return r.disconnect(),e}catch(e){throw r.disconnect(),e}},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}}class Jc{constructor(e=window){this._window=e}create(e){return new this._window.MutationObserver(e)}}var Qc=n(1381),Xc=n(6275),eu=n(2035),tu=n(1698);class nu extends d{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function ru(e){if(!/^(https?:)?\\/\\//.test(e))throw new nu(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=e;const n=t.port&&-1!==e.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${n?`:${n}`:\"\"}`,pathname:t.pathname,port:n,protocol:t.protocol,search:t.search}}function iu(e,t){return e.type===t}class ou{constructor(e,t,n){this._targetWindow=t,this._context=n,this._targetOrigin=\"*\"===e?\"*\":ru(e).origin}post(e,t){const n=this._targetWindow;if(window===n)return;if(!n)throw new Error(\"Unable to post message because target window is not set.\");const r=t&&(0,Qc.R)(window,\"message\").pipe((0,Xc.p)(e=>e.origin===this._targetOrigin&&iu(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)),(0,eu.T)(e=>{if(t.errorType===e.data.type)throw e.data;return e.data}),(0,tu.s)(1)).toPromise();return n.postMessage(Object.assign(Object.assign({},e),{context:this._context}),this._targetOrigin),r}setTarget(e){this._targetWindow=e}setContext(e){this._context=e}}class au{constructor(e){var t;this._sourceOrigins=[ru(e).origin,(t=ru(e),ru(0===t.hostname.indexOf(\"www\")?t.href:t.href.replace(t.hostname,`www.${t.hostname}`))).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const r=n.indexOf(t);r>=0&&n.splice(r,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){if(-1===this._sourceOrigins.indexOf(e.origin)||!iu(e.data,e.data.type))return;const t=e.data,{context:n}=t,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(t,[\"context\"]);this.trigger(r,n)}}!function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([Eo],au.prototype,\"_handleMessage\",null);class su extends d{constructor(){super(\"You haven't complete our spam protection challenge. Please try again.\"),this.name=\"SpamProtectionChallengeNotCompletedError\",this.type=\"spam_protection_challenge_not_completed\"}}class cu extends d{constructor(){super(\"Please complete our human verification challenge and try again.\"),this.name=\"CardingProtectionChallengeNotCompletedError\",this.type=\"carding_protection_challenge_not_completed\"}}class uu extends d{constructor(){super(\"We were not able to verify that you are not a robot. Please try again.\"),this.name=\"CardingProtectionFailedError\",this.type=\"carding_protection_failed\"}}var du=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class lu{constructor(e){this._googleRecaptcha=e}handle(e,t){return du(this,void 0,void 0,function*(){return\"string\"==typeof e?this.handleWithRecaptchaSitekey(e,t):this.handleWithPaymentHumanVerificationRequestError(e)})}handleWithPaymentHumanVerificationRequestError(e){return du(this,void 0,void 0,function*(){if(!this._isPaymentHumanVerificationRequest(e))throw e;return yield this._initialize(e.body.additional_action_required.data.key),this._performRecaptcha()})}handleWithRecaptchaSitekey(e,t){return du(this,void 0,void 0,function*(){if(\"recaptcha_v2\"!==e)throw Error(\"Human verification method is not supported.\");if(!t)throw Error(\"Recaptcha site key is missing.\");return yield this._initialize(t),this._performRecaptcha()})}_performRecaptcha(){return this._googleRecaptcha.execute().pipe((0,tu.s)(1)).pipe((0,Vc.n)(({error:e,token:t})=>du(this,void 0,void 0,function*(){if(e instanceof su)throw new cu;if(e||!t)throw new uu;return{type:\"recaptcha_v2_verification\",data:{human_verification_token:t}}}))).toPromise()}_initialize(e){const t=\"cardingProtectionContainer\";let n=document.getElementById(t);return n&&n.parentNode&&n.parentNode.removeChild(n),n=document.createElement(\"div\"),n.setAttribute(\"id\",t),document.body.appendChild(n),this._googleRecaptcha.load(t,e)}_isPaymentHumanVerificationRequest(e){const{additional_action_required:t,status:n}=e.body||{};return\"additional_action_required\"===n&&t&&\"recaptcha_v2_verification\"===t.type}}var pu,hu,fu,yu=n(9023),mu=n(2551),gu=n(3158);!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(pu||(pu={}));class vu extends d{constructor(e){super(function(e){switch(e){case pu.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case pu.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case pu.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case pu.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class _u extends d{constructor(){super(\"We were not able to complete your spam protection verification. Please try again.\"),this.name=\"SpamProtectionFailedError\",this.type=\"spam_protection_failed\"}}class bu extends d{constructor(){super(\"Spam protection is not loaded. Please try again.\"),this.name=\"SpamProtectionNotLoadedError\",this.type=\"spam_protection_failed\"}}class Su{constructor(e,t){this.googleRecaptchaScriptLoader=e,this.mutationObserverFactory=t,this._memoized=(0,jn.Bj)((e,t,n)=>{const r=new yu.B7;if(!n)throw new Error;return this._widgetId=e.render(n.id,{sitekey:t,size:\"invisible\",callback:()=>{r.next({token:e.getResponse(this._widgetId)}),e.reset(this._widgetId)},\"error-callback\":()=>{r.next({error:new _u})}}),r},{isEqual:(e,t)=>e===t})}load(e,t){return this.googleRecaptchaScriptLoader.load().then(n=>{n&&(this._event$=this._memoized(n,t,document.getElementById(e)),this._recaptcha=n)}).catch(e=>{throw e})}reset(e){var t;const n=document.getElementById(e);null==n||n.remove(),null===(t=this._recaptcha)||void 0===t||t.reset(this._widgetId)}execute(){return(0,_c.v)(()=>{const e=this._event$,t=this._recaptcha;if(!e||!t)throw new vu(pu.SpamProtectionNotInitialized);return(0,_c.v)(()=>{const e=document.querySelector('iframe[src*=\"bframe\"]');return e?(0,vc.of)(e):(0,Sc.$)(new bu)}).pipe((0,mu.l)(e=>e.pipe((0,gu.c)(250),(0,Vc.n)((e,t)=>t<28?(0,vc.of)(e):(0,Sc.$)(e)))),(0,Vc.n)(n=>(this._watchRecaptchaChallengeWindow(e,n),t.execute(this._widgetId),e)),(0,C.W)(e=>(0,vc.of)({error:e})))})}_watchRecaptchaChallengeWindow(e,t){const n=t.parentElement;if(!n)throw new bu;const r=n.parentElement;if(!r)throw new bu;this.mutationObserverFactory.create(()=>{\"hidden\"===r.style.visibility&&e.next({error:new su})}).observe(r,{attributes:!0,attributeFilter:[\"style\"]})}}class wu{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(){return this._loadPromise||(this._loadPromise=this._loadScript()),this._loadPromise}_loadScript(){const e=\"initRecaptcha\",t=[`onload=${e}`,\"render=explicit\"].join(\"&\");return new Promise((n,r)=>{this._window[e]=()=>n(this._window.grecaptcha),this._scriptLoader.loadScript(`//www.google.com/recaptcha/api.js?${t}`).catch(e=>{this._loadPromise=void 0,r(e)})})}}function Cu(e){return new Su(new wu(e),new Jc)}class Iu extends d{constructor(e){super(e||\"Unable to proceed due to invalid configuration provided for the hosted payment form.\"),this.name=\"InvalidHostedFormConfigError\",this.type=\"invalid_hosted_form_config\"}}class Eu extends d{constructor(e){super(e||\"Unable to proceed due to an unknown error with the hosted payment form.\"),this.name=\"InvalidHostedFormError\",this.type=\"invalid_hosted_form\"}}class Pu extends d{constructor(e){super([\"Unable to proceed due to invalid user input values\",...(0,f.flatMap)((0,f.values)(e),e=>(0,f.map)(e,({message:e})=>e))].join(\". \")),this.errors=e,this.name=\"InvalidHostedFormValueError\",this.type=\"invalid_hosted_form_value\"}}!function(e){e.AttachRequested=\"HOSTED_FIELD:ATTACH_REQUESTED\",e.SubmitRequested=\"HOSTED_FIELD:SUBMITTED_REQUESTED\",e.ValidateRequested=\"HOSTED_FIELD:VALIDATE_REQUESTED\",e.StoredCardRequested=\"HOSTED_FIELD:STORED_CARD_REQUESTED\"}(hu||(hu={})),function(e){e.AttachSucceeded=\"HOSTED_INPUT:ATTACH_SUCCEEDED\",e.AttachFailed=\"HOSTED_INPUT:ATTACH_FAILED\",e.BinChanged=\"HOSTED_INPUT:BIN_CHANGED\",e.Blurred=\"HOSTED_INPUT:BLURRED\",e.Changed=\"HOSTED_INPUT:CHANGED\",e.CardTypeChanged=\"HOSTED_INPUT:CARD_TYPE_CHANGED\",e.Entered=\"HOSTED_INPUT:ENTERED\",e.Focused=\"HOSTED_INPUT:FOCUSED\",e.SubmitSucceeded=\"HOSTED_INPUT:SUBMIT_SUCCEEDED\",e.SubmitFailed=\"HOSTED_INPUT:SUBMIT_FAILED\",e.Validated=\"HOSTED_INPUT:VALIDATED\",e.StoredCardSucceeded=\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",e.StoredCardFailed=\"HOSTED_INPUT:STORED_CARD_FAILED\"}(fu||(fu={}));var Ou=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Au{constructor(e,t,n,r,i,o,a,s,c,u){this._type=e,this._containerId=t,this._placeholder=n,this._accessibilityLabel=r,this._styles=i,this._eventPoster=o,this._eventListener=a,this._detachmentObserver=s,this._checkoutId=c,this._cardInstrument=u,this._iframe=document.createElement(\"iframe\");const d=this._checkoutId?`/checkout/payment/hosted-field?version=1.916.1&checkoutId=${this._checkoutId}`:\"/checkout/payment/hosted-field?version=1.916.1\";this._iframe.src=d,this._iframe.style.border=\"none\",this._iframe.style.height=\"100%\",this._iframe.style.overflow=\"hidden\",this._iframe.style.width=\"100%\"}getType(){return this._type}attach(){return Ou(this,void 0,void 0,function*(){const e=document.getElementById(this._containerId);if(!e)throw new Iu(\"Unable to proceed because the provided container ID is not valid.\");e.appendChild(this._iframe),this._eventListener.listen();const t=(0,Qc.R)(this._iframe,\"load\").pipe((0,Vc.n)(({target:e})=>Ou(this,void 0,void 0,function*(){const t=e&&e.contentWindow;if(!t)throw new Error(\"The content window of the iframe cannot be accessed.\");this._eventPoster.setTarget(t),yield this._eventPoster.post({type:hu.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,cardInstrument:this._cardInstrument,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:fu.AttachSucceeded,errorType:fu.AttachFailed})})),(0,tu.s)(1)).toPromise();yield this._detachmentObserver.ensurePresence([this._iframe],t)})}detach(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())}submitForm(e,t){return Ou(this,void 0,void 0,function*(){try{const n=this._eventPoster.post({type:hu.SubmitRequested,payload:{fields:e,data:t}},{successType:fu.SubmitSucceeded,errorType:fu.SubmitFailed});return yield this._detachmentObserver.ensurePresence([this._iframe],n)}catch(e){if(this._isSubmitErrorEvent(e)){if(\"hosted_form_error\"===e.payload.error.code)throw new Eu(e.payload.error.message);if(e.payload.response)throw m(e.payload.response);throw new Error(e.payload.error.message)}throw e}})}submitStoredCardForm(e,t){return Ou(this,void 0,void 0,function*(){const n=this._eventPoster.post({type:hu.StoredCardRequested,payload:{fields:e,data:t}},{successType:fu.StoredCardSucceeded,errorType:fu.StoredCardFailed});return this._detachmentObserver.ensurePresence([this._iframe],n)})}validateForm(){return Ou(this,void 0,void 0,function*(){const e=this._eventPoster.post({type:hu.ValidateRequested},{successType:fu.Validated}),{payload:t}=yield this._detachmentObserver.ensurePresence([this._iframe],e);if(!t.isValid)throw new Pu(t.errors)})}_getFontUrls(){const e=\"fonts.googleapis.com\",t=document.querySelectorAll(`link[href*='${e}'][rel='stylesheet']`);return Array.prototype.slice.call(t).filter(t=>ru(t.href).hostname===e).filter(e=>(0,f.values)(this._styles).map(e=>e&&e.fontFamily).filter(e=>\"string\"==typeof e).some(t=>t.split(/,\\s/).some(t=>-1!==e.href.indexOf(t.replace(\" \",\"+\"))))).map(e=>e.href)}_isSubmitErrorEvent(e){return e.type===fu.SubmitFailed}}var Tu=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class ku{constructor(e,t,n,r,i){this._fields=e,this._eventListener=t,this._payloadTransformer=n,this._eventCallbacks=r,this._paymentHumanVerificationHandler=i,this._handleEnter=({payload:e})=>Tu(this,void 0,void 0,function*(){try{yield this.validate()}catch(e){if(e instanceof Error&&\"InvalidHostedFormValueError\"!==e.name)throw e}const{onEnter:t=f.noop}=this._eventCallbacks;t(e)});const{onBlur:o=f.noop,onCardTypeChange:a=f.noop,onFocus:s=f.noop,onValidate:c=f.noop}=this._eventCallbacks;this._eventListener.addListener(fu.Blurred,({payload:e})=>o(e)),this._eventListener.addListener(fu.CardTypeChanged,({payload:e})=>a(e)),this._eventListener.addListener(fu.Focused,({payload:e})=>s(e)),this._eventListener.addListener(fu.Validated,({payload:e})=>c(e)),this._eventListener.addListener(fu.Entered,this._handleEnter),this._eventListener.addListener(fu.CardTypeChanged,({payload:e})=>this._cardType=e.cardType),this._eventListener.addListener(fu.BinChanged,({payload:e})=>this._bin=e.bin)}getBin(){return this._bin}getCardType(){return this._cardType}attach(){return Tu(this,void 0,void 0,function*(){this._eventListener.listen();const e=this._getFirstField(),t=(0,f.without)(this._fields,e);yield e.attach(),yield Promise.all(t.map(e=>e.attach()))})}detach(){this._eventListener.stopListen(),this._fields.forEach(e=>{e.detach()})}submit(e,t){return Tu(this,void 0,void 0,function*(){try{return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),this._payloadTransformer.transform(e,t))}catch(t){const n=yield this._paymentHumanVerificationHandler.handle(t);return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),this._payloadTransformer.transform(e,n))}})}submitStoredCard(e){return Tu(this,void 0,void 0,function*(){return this._getFirstField().submitStoredCardForm(e.fields,e.data)})}validate(){return Tu(this,void 0,void 0,function*(){return this._getFirstField().validateForm()})}_getFirstField(){const e=this._fields[0];if(!e)throw new Iu(\"Unable to proceed because the payment form has no field defined.\");return e}}function Ru(e){return Boolean(e.instrumentId)}class Mu{constructor(e){this._store=e}transform(e,t){const n=this._store.getState(),r=n.checkout.getCheckout(),i=n.config.getConfig(),o=n.instruments.getInstrumentsMeta(),a=n.order.getOrder(),s=n.order.getOrderMeta(),c=(0,f.omit)(e.paymentData,\"ccExpiry\",\"ccName\",\"ccNumber\",\"ccCvv\");let u=n.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId);\"worldpayaccess\"===(null==u?void 0:u.gateway)&&\"credit_card\"===(null==u?void 0:u.id)&&(u=Object.assign(Object.assign({},u),{id:\"worldpayaccess\",method:\"credit-card\"}));const d=n.paymentMethods.getPaymentMethodsMeta(),l=o&&c&&Ru(c)?`${n.payment.getPaymentToken()}, ${o.vaultAccessToken}`:n.payment.getPaymentToken();if(!l)throw new Gn(Vn.MissingPaymentToken);return{additionalAction:t,authToken:l,checkout:r,config:i,order:a,orderMeta:s,payment:c,paymentMethod:u,paymentMethodMeta:d}}}class xu{constructor(e){this._store=e}create(e,t,n){const r=Object.keys(t.fields).reduce((r,i)=>{const o=t.fields[i];return o?[...r,new Au(i,o.containerId,o.placeholder||\"\",o.accessibilityLabel||\"\",t.styles||{},new ou(e),new au(e),new Zc(new Jc),n,\"instrumentId\"in o?this._getCardInstrument(o.instrumentId):void 0)]:r},[]);return new ku(r,new au(e),new Mu(this._store),(0,f.pick)(t,\"onBlur\",\"onEnter\",\"onFocus\",\"onCardTypeChange\",\"onValidate\"),new lu(Cu((0,or.Hb)())))}_getCardInstrument(e){const{instruments:{getCardInstrument:t}}=this._store.getState(),n=t(e);if(!n)throw new Gn(Vn.MissingPaymentInstrument);return n}}class Nu extends d{constructor(){super(\"You haven't complete our spam check. Please try again.\"),this.name=\"SpamProtectionNotCompletedError\",this.type=\"spam_protection_not_completed\"}}class Du{constructor(e,t){this._orderRequestSender=e,this._checkoutValidator=t}loadOrder(e,t){return new rc.c(n=>{n.next((0,o.VP)(ye.LoadOrderRequested)),this._orderRequestSender.loadOrder(e,t).then(e=>{n.next((0,o.VP)(ye.LoadOrderSucceeded,e.body)),n.complete()}).catch(e=>{n.error((0,o.fQ)(ye.LoadOrderFailed,e))})})}loadOrderPayments(e,t){return new rc.c(n=>{n.next((0,o.VP)(ye.LoadOrderPaymentsRequested)),this._orderRequestSender.loadOrder(e,t).then(e=>{n.next((0,o.VP)(ye.LoadOrderPaymentsSucceeded,e.body)),n.complete()}).catch(e=>{n.error((0,o.fQ)(ye.LoadOrderPaymentsFailed,e))})})}loadCurrentOrder(e){return t=>(0,_c.v)(()=>{const n=this._getCurrentOrderId(t.getState());if(!n)throw new Gn(Vn.MissingOrderId);return this.loadOrder(n,e)})}submitOrder(e,t){return n=>(0,gc.x)((0,vc.of)((0,o.VP)(ye.SubmitOrderRequested)),(0,_c.v)(()=>{const r=n.getState(),i=r.config.getExternalSource(),a=r.config.getVariantIdentificationToken(),s=r.checkout.getCheckout();if(!s)throw new Gn(Vn.MissingCheckout);if(s.shouldExecuteSpamCheck)throw new Nu;return(0,w.H)(this._checkoutValidator.validate(s,t).then(()=>this._orderRequestSender.submitOrder(this._mapToOrderRequestBody(null!=e?e:{},s.id,s.customerMessage,i),Object.assign(Object.assign({},t),{headers:{checkoutVariant:a}})))).pipe((0,Vc.n)(e=>(0,gc.x)(this.loadOrder(e.body.data.order.orderId,t),(0,vc.of)((0,o.VP)(ye.SubmitOrderSucceeded,e.body.data,Object.assign(Object.assign({},e.body.meta),{token:e.headers.token}))))))}).pipe((0,C.W)(e=>wc(ye.SubmitOrderFailed,e))))}finalizeOrder(e,t){return(0,gc.x)((0,vc.of)((0,o.VP)(ye.FinalizeOrderRequested)),(0,w.H)(this._orderRequestSender.finalizeOrder(e,t)).pipe((0,Vc.n)(n=>(0,gc.x)(this.loadOrder(e,t),(0,vc.of)((0,o.VP)(ye.FinalizeOrderSucceeded,n.body.data)))))).pipe((0,C.W)(e=>wc(ye.FinalizeOrderFailed,e)))}_getCurrentOrderId(e){const t=e.order.getOrder(),n=e.checkout.getCheckout();return t&&t.orderId||n&&n.orderId}_mapToOrderRequestBody(e,t,n,r){const{payment:i}=e,o=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]);return i?Object.assign(Object.assign({},o),{cartId:t,customerMessage:n,externalSource:r,payment:{paymentData:i.paymentData,name:i.methodId,gateway:i.gatewayId}}):Object.assign(Object.assign({},o),{cartId:t,customerMessage:n,externalSource:r})}}class ju extends d{constructor(e){super(e||\"Your checkout could not be processed because some details have changed. Please review your order and try again.\"),this.name=\"CartConsistencyError\",this.type=\"cart_consistency\"}}class Lu extends d{constructor(e,t){super(t||\"At least one item changed stock position. Please review your cart and try again.\"),this.name=\"CartStockPositionsChangedError\",this.type=\"cart_stock_positions_changed\",this.changedItemIds=e}}class zu extends d{constructor(e){super(e||\"The tax provider is unavailable.\"),this.name=\"OrderTaxProviderUnavailableError\",this.type=\"tax_provider_unavailable\"}}class Fu extends d{constructor(e){super(e),this.name=\"MissingShippingMethodError\",this.type=\"missing_shipping_method\"}}class Bu extends d{constructor(e){super(e),this.name=\"InvalidShippingAddressError\",this.type=\"invalid_shipping_address\"}}class Uu{constructor(e){this._requestSender=e}loadOrder(e,{timeout:t}={}){const n=`/api/storefront/orders/${e}`,r=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.get(n,{params:{include:kc([\"payments\",\"lineItems.physicalItems.socialMedia\",\"lineItems.physicalItems.options\",\"lineItems.physicalItems.categories\",\"lineItems.digitalItems.socialMedia\",\"lineItems.digitalItems.options\",\"lineItems.digitalItems.categories\"])},headers:r,timeout:t})}submitOrder(e,{headers:t,timeout:n}={}){return this._requestSender.post(\"/internalapi/v1/checkout/order\",{body:e,headers:(0,f.omitBy)(Object.assign({\"X-Checkout-Variant\":t&&t.checkoutVariant},hc),f.isNil),timeout:n}).catch(e=>{var t,n;if(\"tax_provider_unavailable\"===e.body.type)throw new zu;if(\"cart_has_changed\"===e.body.type)throw new ju;if(\"cart_stock_positions_changed\"===e.body.type){const r=null!==(n=null===(t=e.body.errors)||void 0===t?void 0:t.changedItemIds)&&void 0!==n?n:[];throw new Lu(r)}if(\"missing_shipping_method\"===e.body.type)throw new Fu(e.body.detail);if(\"invalid_shipping_address\"===e.body.type)throw new Bu(e.body.detail);if(\"empty_cart\"===e.body.type)throw new Ec;throw e})}finalizeOrder(e,{timeout:t}={}){const n=`/internalapi/v1/checkout/order/${e}`;return this._requestSender.post(n,{timeout:t,headers:hc})}}class qu{constructor(e,t,n,r){this._paymentRequestSender=e,this._orderActionCreator=t,this._paymentRequestTransformer=n,this._paymentHumanVerificationHandler=r,this.initializeOffsitePayment=({methodId:e,gatewayId:t,instrumentId:n,target:r,promise:i,shouldSaveInstrument:a,shouldSetAsDefaultInstrument:s})=>c=>{let u;n?u={formattedPayload:{bigpay_token:n}}:a&&(u={formattedPayload:{vault_payment_instrument:a,set_as_default_stored_instrument:s||null}});const d=this._paymentRequestTransformer.transform({gatewayId:t,methodId:e,paymentData:u},c.getState());return(0,gc.x)((0,vc.of)((0,o.VP)(pt.InitializeOffsitePaymentRequested)),Promise.race([this._paymentRequestSender.initializeOffsitePayment(d,r),i].filter(Boolean)).then(()=>(0,o.VP)(pt.InitializeOffsitePaymentSucceeded))).pipe((0,C.W)(e=>wc(pt.InitializeOffsitePaymentFailed,e)))}}submitPayment(e){return t=>(0,gc.x)((0,vc.of)((0,o.VP)(pt.SubmitPaymentRequested)),(0,_c.v)(()=>{return n=this,r=void 0,o=function*(){try{return yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(e,t.getState()))}catch(n){const r=yield this._paymentHumanVerificationHandler.handle(n);return yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(Object.assign(Object.assign({},e),{additionalAction:r}),t.getState()))}},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}).pipe((0,Vc.n)(({body:e})=>(0,gc.x)(this._orderActionCreator.loadCurrentOrder()(t),(0,vc.of)((0,o.VP)(pt.SubmitPaymentSucceeded,e)))))).pipe((0,C.W)(e=>wc(pt.SubmitPaymentFailed,e)))}}class Vu{constructor(e){this._client=e}submitPayment(e){return new Promise((t,n)=>{this._client.submitPayment(e,(e,r)=>{e?n(this._transformResponse(e)):t(this._transformResponse(r))})})}initializeOffsitePayment(e,t){return new Promise(()=>{this._client.initializeOffsitePayment(e,null,t)})}_transformResponse(e){return{headers:e.headers,body:e.data,status:e.status,statusText:e.statusText}}}var Gu=n(2742);function Hu(e,t){let n;return function(e){return void 0!==e.id}(e)?n=e.id:t&&t.length&&(n=t[0].id),{id:n,firstName:e.firstName,lastName:e.lastName,company:e.company,addressLine1:e.address1,addressLine2:e.address2,city:e.city,province:e.stateOrProvince,provinceCode:e.stateOrProvinceCode,postCode:e.postalCode,country:e.country,countryCode:e.countryCode,phone:e.phone,customFields:e.customFields}}const Yu=[\"per_item_discount\",\"percentage_discount\",\"per_total_discount\",\"shipping_discount\",\"free_shipping\"];function Wu(e){return{code:e.code,discount:e.displayName,discountType:Yu.indexOf(e.couponType)}}function $u(e){return{code:e.code,discountedAmount:e.used,remainingBalance:e.remaining,giftCertificate:{balance:e.balance,code:e.code,purchaseDate:e.purchaseDate}}}function Ku(e){const t=[];return(e||[]).forEach(e=>{(e.banners||[]).forEach(e=>{t.push({placeholders:[],discountType:null,message:\"\",messageHtml:e.text})})}),t}function Zu(e,t,n=\"id\"){return Object.keys(e).reduce((r,i)=>[...r,...e[i].map(e=>\"giftCertificates\"===i?function(e,t){const n=new Qs(t);return{id:e.id,imageUrl:\"\",name:e.name,amount:e.amount,amountAfterDiscount:e.amount,discount:0,integerAmount:n.toInteger(e.amount),integerAmountAfterDiscount:n.toInteger(e.amount),integerUnitPrice:n.toInteger(e.amount),integerUnitPriceAfterDiscount:n.toInteger(e.amount),integerDiscount:0,quantity:1,sender:e.sender,recipient:e.recipient,type:\"ItemGiftCertificateEntity\",attributes:[],variantId:null}}(e,t):function(e,t,n,r=\"id\"){const i=new Qs(n);return{id:e[r],imageUrl:e.imageUrl,amount:e.extendedListPrice,amountAfterDiscount:e.extendedSalePrice,discount:e.discountAmount,integerAmount:i.toInteger(e.extendedListPrice),integerAmountAfterDiscount:i.toInteger(e.extendedSalePrice),integerDiscount:i.toInteger(e.discountAmount),integerUnitPrice:i.toInteger(e.listPrice),integerUnitPriceAfterDiscount:i.toInteger(e.salePrice),downloadsPageUrl:e.downloadPageUrl,name:e.name,quantity:e.quantity,brand:e.brand,sku:e.sku,categoryNames:e.categoryNames,variantId:e.variantId,productId:e.productId,attributes:(e.options||[]).map(e=>({name:e.name,value:e.value})),addedByPromotion:e.addedByPromotion,type:t}}(e,function(e){switch(e){case\"physicalItems\":return\"ItemPhysicalEntity\";case\"digitalItems\":return\"ItemDigitalEntity\";case\"giftCertificates\":return\"ItemGiftCertificateEntity\";default:return\"\"}}(i),t,n))],[])}function Ju(e){const t=e.cart.currency.decimalPlaces,n=new Qs(t);return{id:e.cart.id,items:Zu(e.cart.lineItems,t),currency:e.cart.currency.code,coupon:{discountedAmount:(0,f.reduce)(e.cart.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.cart.coupons.map(Wu)},discount:{amount:e.cart.discountAmount,integerAmount:n.toInteger(e.cart.discountAmount)},discountNotifications:Ku(e.promotions),giftCertificate:{totalDiscountedAmount:(0,f.reduce)(e.giftCertificates,(e,t)=>e+t.used,0),appliedGiftCertificates:(0,f.keyBy)(e.giftCertificates.map($u),\"code\")},shipping:{amount:e.shippingCostTotal,integerAmount:n.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:n.toInteger(e.shippingCostBeforeDiscount),required:(0,f.some)(e.cart.lineItems.physicalItems,e=>e.isShippingRequired)},subtotal:{amount:e.subtotal,integerAmount:n.toInteger(e.subtotal)},storeCredit:{amount:e.customer?e.customer.storeCredit:0},taxSubtotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:n.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.grandTotal,integerAmount:n.toInteger(e.grandTotal)}}}var Qu;!function(e){e.APPLEPAY=\"applepay\",e.AMAZON_PAY_V2=\"amazonpay\",e.BRAINTREE_PAYPAL=\"braintreepaypal\",e.BRAINTREE_VENMO=\"braintreevenmo\",e.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",e.GOOGLEPAY_ADYENV2=\"googlepayadyenv2\",e.GOOGLEPAY_ADYENV3=\"googlepayadyenv3\",e.GOOGLEPAY_AUTHORIZENET=\"googlepayauthorizenet\",e.GOOGLEPAY_BNZ=\"googlepaybnz\",e.GOOGLEPAY_BRAINTREE=\"googlepaybraintree\",e.GOOGLEPAY_CHECKOUTCOM=\"googlepaycheckoutcom\",e.GOOGLEPAY_CYBERSOURCEV2=\"googlepaycybersourcev2\",e.GOOGLEPAY_ORBITAL=\"googlepayorbital\",e.GOOGLEPAY_STRIPE=\"googlepaystripe\",e.GOOGLEPAY_STRIPEUPE=\"googlepaystripeupe\",e.GOOGLEPAY_WORLDPAYACCESS=\"googlepayworldpayaccess\",e.PAYPALEXPRESS=\"paypalexpress\"}(Qu||(Qu={}));const Xu=Qu;function ed(e,t){const n=e.firstName||t.firstName||\"\",r=e.lastName||t.lastName||\"\";return{addresses:(e.addresses||[]).map(e=>Hu(e)),customerId:e.id,isGuest:e.isGuest,storeCredit:e.storeCredit,email:e.email||t.email||\"\",firstName:n,lastName:r,name:e.fullName||[n,r].join(\" \"),customerGroupName:e.customerGroup&&e.customerGroup.name}}class td{format(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\")),r=t.slice(0,2),i=4===n.length?n.slice(-2):n?n.slice(0,2):t.slice(2);return e.length<2?t:e.length>3&&!i?r:`${r} / ${i}`}toObject(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\"));return/^\\d+$/.test(t)&&/^\\d+$/.test(n)?{month:1===t.length?`0${t}`:t.slice(0,2),year:2===n.length?`20${n}`:n.slice(0,4)}:{month:\"\",year:\"\"}}}var nd=n(2437);class rd{format(e){const{card:t}=(0,nd.number)(e);if(!t)return e;const n=(0,f.max)((0,nd.creditCardType)(e).map(e=>(0,f.max)(e.lengths))),r=this.unformat(e).slice(0,n);return t.gaps.filter(e=>r.length>e).reduce((e,t,n)=>[e.slice(0,t+n),e.slice(t+n)].join(\" \"),r)}unformat(e){const{card:t}=(0,nd.number)(e);return t?e.replace(new RegExp(\" \",\"g\"),\"\"):e}}function id(e,t={}){const n=e.currency.decimalPlaces,r=new Qs(n);return{id:e.orderId,items:Zu(e.lineItems,e.currency.decimalPlaces,\"productId\"),orderId:e.orderId,currency:e.currency.code,customerCanBeCreated:e.customerCanBeCreated,payment:sd(e.payments,t.payment),subtotal:{amount:e.baseAmount,integerAmount:r.toInteger(e.baseAmount)},coupon:{discountedAmount:(0,f.reduce)(e.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.coupons.map(Wu)},discount:{amount:e.discountAmount,integerAmount:r.toInteger(e.discountAmount)},token:t.orderToken,callbackUrl:t.callbackUrl,discountNotifications:[],giftCertificate:ad(e.payments),socialData:ud(e),status:e.status,hasDigitalItems:e.hasDigitalItems,isDownloadable:e.isDownloadable,isComplete:e.isComplete,shipping:{amount:e.shippingCostTotal,integerAmount:r.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:r.toInteger(e.shippingCostBeforeDiscount)},storeCredit:{amount:od(e.payments)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:r.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:r.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.orderAmount,integerAmount:e.orderAmountAsInteger}}}function od(e){const t=(0,f.find)(e,{providerId:\"storecredit\"});return t?t.amount:0}function ad(e){const t=(0,f.filter)(e,{providerId:\"giftcertificate\"});return{totalDiscountedAmount:(0,f.reduce)(t,(e,t)=>t.amount+e,0),appliedGiftCertificates:(0,f.keyBy)(t.map(e=>({code:e.detail.code,discountedAmount:e.amount,remainingBalance:e.detail.remaining,giftCertificate:{balance:e.amount+e.detail.remaining,code:e.detail.code,purchaseDate:\"\"}})),\"code\")}}function sd(e,t={}){const n=(0,f.find)(e,cd);return n?{id:n.providerId,status:(r=n.detail.step,`PAYMENT_STATUS_${r}`),helpText:n.detail.instructions,returnUrl:t.returnUrl}:{};var r}function cd(e){return\"giftcertificate\"!==e.providerId&&\"storecredit\"!==e.providerId}function ud(e){const t={};return[...e.lineItems.physicalItems,...e.lineItems.digitalItems].forEach(e=>{var n;t[e.id]=(n=e,[\"fb\",\"tw\",\"gp\"].reduce((e,t)=>{const r=n.socialMedia&&(0,f.find)(n.socialMedia,e=>e.code===t);return r?(e[t]={name:n.name,description:n.name,image:n.imageUrl,url:r.link,shareText:r.text,sharingLink:r.link,channelName:r.channel,channelCode:r.code},e):e},{}))}),t}function dd(e,t){return{description:e.description,module:e.type,price:e.cost,id:e.id,selected:t,isRecommended:e.isRecommended,imageUrl:e.imageUrl,transitTime:e.transitTime}}class ld{constructor(){this._cardExpiryFormatter=new td,this._cardNumberFormatter=new rd}transform(e,t){const n=t.billingAddress.getBillingAddress(),r=t.checkout.getCheckout(),i=t.customer.getCustomer(),o=t.order.getOrder(),a=t.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId),s=this._mapShippingAddress(t,a),c=t.consignments.getConsignments(),u=t.consignments.getShippingOption(),d=t.config.getStoreConfig(),l=t.config.getContextConfig(),p=t.instruments.getInstrumentsMeta(),h=t.paymentMethods.getPaymentMethodsMeta(),y=t.order.getOrderMeta(),m=i&&n&&ed(i,n),g=p&&e.paymentData&&(Ru(e.paymentData)||function(e){const t=e.formattedPayload;return!!t&&(\"string\"==typeof t.bigpay_token||Boolean(t.bigpay_token&&t.bigpay_token.token))}(e.paymentData))?`${t.payment.getPaymentToken()}, ${p.vaultAccessToken}`:t.payment.getPaymentToken();if(!g)throw new Gn(Vn.MissingPaymentToken);return{additionalAction:e.additionalAction,authToken:g,customer:m,billingAddress:n&&Hu(n),shippingAddress:s&&Hu(s,c),shippingOption:u&&dd(u,!0),cart:r&&Ju(r),order:o&&id(o,y),orderMeta:y,payment:e.paymentData,paymentMethod:a&&this._transformPaymentMethod(a),quoteMeta:{request:Object.assign(Object.assign({},h),{geoCountryCode:l&&l.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:(0,f.pick)(d&&d.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}transformWithHostedFormData(e,t,n){const{additionalAction:r,authToken:i,checkout:o,config:a,order:s,orderMeta:c,payment:u={},paymentMethod:d,paymentMethodMeta:l}=t,p=o&&o.consignments[0],h=p&&p.shippingAddress,y=p&&p.selectedShippingOption;return{additionalAction:r,authToken:i,paymentMethod:d&&this._transformPaymentMethod(d),customer:s&&s.billingAddress&&o&&ed(o.customer,s.billingAddress),billingAddress:s&&s.billingAddress&&Hu(s.billingAddress),shippingAddress:h&&o&&Hu(h,o.consignments),shippingOption:y&&dd(y,!0),cart:o&&Ju(o),order:s&&id(s,c),orderMeta:c,payment:this._transformHostedInputValues(e,u,n),quoteMeta:{request:Object.assign(Object.assign({},l),{geoCountryCode:a&&a.context.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:a&&(0,f.pick)(a.storeConfig.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}_transformPaymentMethod(e){if(\"multi-option\"===e.method&&!e.gateway)return Object.assign(Object.assign({},e),{gateway:e.id});if(e.initializationData&&e.initializationData.gateway)return Object.assign(Object.assign({},e),{id:e.initializationData.gateway});if(\"worldpayaccess\"===e.gateway){if(\"credit_card\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"credit-card\"});if(\"open_banking\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"open_banking\"})}return e.id===Xu.BRAINTREE_VENMO?Object.assign(Object.assign({},e),{id:Xu.BRAINTREE_PAYPAL}):e}_transformHostedInputValues(e,t,n){return\"instrumentId\"in t?Object.assign(Object.assign({},t),{ccCvv:e.cardCodeVerification,ccNumber:e.cardNumberVerification&&this._cardNumberFormatter.unformat(e.cardNumberVerification),hostedFormNonce:n}):Object.assign(Object.assign({},t),{ccCvv:e.cardCode,ccExpiry:this._cardExpiryFormatter.toObject(e.cardExpiry||\"\"),ccName:e.cardName||\"\",ccNumber:this._cardNumberFormatter.unformat(e.cardNumber||\"\"),hostedFormNonce:n})}_mapShippingAddress(e,t){var n,r,i,o;if(t){const a=null===(r=null===(n=t.initializationData)||void 0===n?void 0:n.bopis)||void 0===r?void 0:r.enabled,s=null===(o=null===(i=t.initializationData)||void 0===i?void 0:i.bopis)||void 0===o?void 0:o.requiredAddress,c=e.consignments.getConsignments(),u=null==c?void 0:c.every(e=>e.selectedPickupOption);if(a&&u&&\"none\"===s)return}return e.shippingAddress.getShippingAddress()}}class pd{updatePaymentProviderCustomer(e){return(0,vc.of)((0,o.VP)(At.UpdatePaymentProviderCustomer,e))}}class hd{widgetInteraction(e,t){const n={methodId:t&&t.methodId};return(0,gc.x)((0,vc.of)((0,o.VP)(wt.WidgetInteractionStarted,void 0,n)),(0,_c.v)(()=>e().then(()=>(0,o.VP)(wt.WidgetInteractionFinished,void 0,n)))).pipe((0,C.W)(e=>wc(wt.WidgetInteractionFailed,e,n)))}}class fd{constructor(e,t){this._remoteCheckoutRequestSender=e,this._checkoutActionCreator=t}initializeBilling(e,t,n){return rc.c.create(r=>{r.next((0,o.VP)(Ft.InitializeRemoteBillingRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializeBilling(e,t,n).then(({body:t={}})=>{r.next((0,o.VP)(Ft.InitializeRemoteBillingSucceeded,t,{methodId:e})),r.complete()}).catch(t=>{r.error((0,o.fQ)(Ft.InitializeRemoteBillingFailed,t,{methodId:e}))})})}initializeShipping(e,t,n){return rc.c.create(r=>{r.next((0,o.VP)(Ft.InitializeRemoteShippingRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializeShipping(e,t,n).then(({body:t={}})=>{r.next((0,o.VP)(Ft.InitializeRemoteShippingSucceeded,t,{methodId:e})),r.complete()}).catch(t=>{r.error((0,o.fQ)(Ft.InitializeRemoteShippingFailed,t,{methodId:e}))})})}initializePayment(e,t,n){return rc.c.create(r=>{r.next((0,o.VP)(Ft.InitializeRemotePaymentRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializePayment(e,t,n).then(({body:t={}})=>{r.next((0,o.VP)(Ft.InitializeRemotePaymentSucceeded,t,{methodId:e})),r.complete()}).catch(t=>{r.error((0,o.fQ)(Ft.InitializeRemotePaymentFailed,t,{methodId:e}))})})}loadSettings(e,t){return rc.c.create(n=>{n.next((0,o.VP)(Ft.LoadRemoteSettingsRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.loadSettings(e,t).then(({body:t})=>{n.next((0,o.VP)(Ft.LoadRemoteSettingsSucceeded,t,{methodId:e})),n.complete()}).catch(t=>{n.error((0,o.fQ)(Ft.LoadRemoteSettingsFailed,t,{methodId:e}))})})}signOut(e,t){return rc.c.create(n=>{n.next((0,o.VP)(Ft.SignOutRemoteCustomerRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.signOut(e,t).then(()=>{n.next((0,o.VP)(Ft.SignOutRemoteCustomerSucceeded,void 0,{methodId:e})),n.complete()}).catch(t=>{n.error((0,o.fQ)(Ft.SignOutRemoteCustomerFailed,t,{methodId:e}))})})}forgetCheckout(e,t){return(0,gc.x)((0,vc.of)((0,o.VP)(Ft.ForgetCheckoutRemoteCustomerRequested,void 0,{methodId:e})),(0,_c.v)(()=>{return n=this,r=void 0,a=function*(){return yield this._remoteCheckoutRequestSender.forgetCheckout(t),yield this._checkoutActionCreator.loadCurrentCheckout(),(0,o.VP)(Ft.ForgetCheckoutRemoteCustomerSucceeded,void 0,{methodId:e})},new((i=void 0)||(i=Promise))(function(e,t){function o(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(o,s)}c((a=a.apply(n,r||[])).next())});var n,r,i,a})).pipe((0,C.W)(t=>wc(Ft.ForgetCheckoutRemoteCustomerFailed,t,{methodId:e})))}updateCheckout(e,t){return(0,o.VP)(Ft.UpdateRemoteCheckout,t,{methodId:e})}}class yd{constructor(e){this._requestSender=e}initializeBilling(e,t,{timeout:n}={}){const r=`/remote-checkout/${e}/billing`;return this._requestSender.get(r,{params:t,timeout:n,headers:hc})}initializeShipping(e,t,{timeout:n}={}){const r=`/remote-checkout/${e}/shipping`;return this._requestSender.get(r,{params:t,timeout:n,headers:hc})}initializePayment(e,t,{timeout:n}={}){const r=`/remote-checkout/${e}/payment`;return this._requestSender.get(r,{params:t,timeout:n,headers:hc})}loadSettings(e,{timeout:t}={}){const n=`/remote-checkout/${e}/settings`;return this._requestSender.get(n,{timeout:t,headers:hc})}signOut(e,{timeout:t}={}){const n=`/remote-checkout/${e}/signout`;return this._requestSender.get(n,{timeout:t,headers:hc})}generateToken({timeout:e}={}){return this._requestSender.get(\"/remote-checkout-token\",{timeout:e,headers:hc})}trackAuthorizationEvent({timeout:e}={}){return this._requestSender.post(\"/remote-checkout/events/shopper-checkout-service-provider-authorization-requested\",{timeout:e,headers:hc})}forgetCheckout({timeout:e}={}){return this._requestSender.post(\"/remote-checkout/forget-checkout\",{timeout:e,headers:hc})}}class md{constructor(e,t){this._consignmentRequestSender=e,this._checkoutRequestSender=t}unassignItemsByAddress(e,t){return n=>{const r=n.getState();if(!r.checkout.getCheckout())throw new Gn(Vn.MissingCheckout);const i=this._consignmentHasAddress(e)?e.address:e.shippingAddress,o=r.consignments.getConsignmentByAddress(i);if(!o)throw new nu(\"No consignment found for the specified address\");const a=this._removeLineItems(e.lineItems,o,r.cart.getCart());return a.length?this.updateConsignment({id:o.id,address:i,lineItems:a},t)(n):this.deleteConsignment(o.id,t)(n)}}assignItemsByAddress(e,t){return n=>{const r=n.getState(),i=this._consignmentHasAddress(e)?e.address:e.shippingAddress,o=r.consignments.getConsignmentByAddress(i);return this._createOrUpdateConsignment({id:o&&o.id,address:i,lineItems:this._addLineItems(e.lineItems,o,r.cart.getCart())},t)(n)}}selectShippingOption(e,t){return n=>rc.c.create(r=>{const i=n.getState(),a=i.checkout.getCheckout(),s=i.consignments.getConsignments();if(!a)throw new Gn(Vn.MissingCheckout);if(!s||!s.length)throw new Gn(Vn.MissingConsignments);const c={id:s[0].id,shippingOptionId:e},u={id:s[0].id};r.next((0,o.VP)($.UpdateShippingOptionRequested,void 0,u)),this._consignmentRequestSender.updateConsignment(a.id,c,t).then(({body:e})=>{r.next((0,o.VP)($.UpdateShippingOptionSucceeded,e,u)),r.complete()}).catch(e=>{r.error((0,o.fQ)($.UpdateShippingOptionFailed,e,u))})})}loadShippingOptions(e){return t=>rc.c.create(n=>{const r=t.getState().checkout.getCheckout();if(!r)throw new Gn(Vn.MissingCheckout);n.next((0,o.VP)($.LoadShippingOptionsRequested)),this._checkoutRequestSender.loadCheckout(r.id,Object.assign(Object.assign({},e),{params:{include:[zc.AvailableShippingOptions]}})).then(({body:e})=>{n.next((0,o.VP)($.LoadShippingOptionsSucceeded,e)),n.complete()}).catch(e=>{n.error((0,o.fQ)($.LoadShippingOptionsFailed,e))})})}updateAddress(e,t){return n=>{const r=this._getUpdateAddressRequestBody(e,n),i=n.getState().consignments.getConsignments();return i&&i.length&&(r.id=i[0].id),this._createOrUpdateConsignment(r,t)(n)}}createConsignments(e,t){return n=>rc.c.create(r=>{const i=n.getState().checkout.getCheckout();if(!i||!i.id)throw new Gn(Vn.MissingCheckout);r.next((0,o.VP)($.CreateConsignmentsRequested)),this._consignmentRequestSender.createConsignments(i.id,e,t).then(({body:e})=>{r.next((0,o.VP)($.CreateConsignmentsSucceeded,e)),r.complete()}).catch(e=>{r.error((0,o.fQ)($.CreateConsignmentsFailed,e))})})}updateConsignment(e,t){return n=>rc.c.create(r=>{const i=n.getState().checkout.getCheckout();if(!i||!i.id)throw new Gn(Vn.MissingCheckout);const a={id:e.id};r.next((0,o.VP)($.UpdateConsignmentRequested,void 0,a)),this._consignmentRequestSender.updateConsignment(i.id,e,t).then(({body:e})=>{r.next((0,o.VP)($.UpdateConsignmentSucceeded,e,a)),r.complete()}).catch(e=>{r.error((0,o.fQ)($.UpdateConsignmentFailed,e,a))})})}deleteConsignment(e,t){return n=>rc.c.create(r=>{const i=n.getState().checkout.getCheckout(),a={id:e};if(!i||!i.id)throw new Gn(Vn.MissingCheckout);r.next((0,o.VP)($.DeleteConsignmentRequested,void 0,a)),this._consignmentRequestSender.deleteConsignment(i.id,e,t).then(({body:e})=>{r.next((0,o.VP)($.DeleteConsignmentSucceeded,e,a)),r.complete()}).catch(e=>{r.error((0,o.fQ)($.DeleteConsignmentFailed,e,a))})})}updateShippingOption(e,t){return n=>rc.c.create(r=>{var i;const a=n.getState().checkout.getCheckout(),s=n.getState().consignments.getConsignmentById(e.id);if((null===(i=null==s?void 0:s.selectedShippingOption)||void 0===i?void 0:i.id)===e.shippingOptionId)return void r.complete();if(!a||!a.id)throw new Gn(Vn.MissingCheckout);const c={id:e.id};r.next((0,o.VP)($.UpdateShippingOptionRequested,void 0,c)),this._consignmentRequestSender.updateConsignment(a.id,e,t).then(({body:e})=>{r.next((0,o.VP)($.UpdateShippingOptionSucceeded,e,c)),r.complete()}).catch(e=>{r.error((0,o.fQ)($.UpdateShippingOptionFailed,e,c))})})}_createOrUpdateConsignment(e,t){return n=>{const r=n.getState().checkout.getCheckout();if(!r||!r.id)throw new Gn(Vn.MissingCheckout);return this._isUpdateConsignmentRequest(e)?this.updateConsignment(e,t)(n):this.createConsignments([e],t)(n)}}_getUpdateAddressRequestBody(e,t){const n=t.getState().cart.getCart();if(!n)throw new Gn(Vn.MissingCart);const{physicalItems:r,customItems:i=[]}=n.lineItems;return{address:e,lineItems:[...r,...i].map(e=>({itemId:e.id,quantity:e.quantity}))}}_removeLineItems(e,t,n){if(!n)throw new Gn(Vn.MissingCart);return this._hydrateLineItems(t.lineItemIds,n).map(t=>{const n=(0,f.find)(e,e=>e.itemId===t.itemId);return Object.assign(Object.assign({},t),{quantity:n?t.quantity-n.quantity:t.quantity})}).filter(e=>e.quantity>0)}_addLineItems(e,t,n){if(!t)return e;if(!n)throw new Gn(Vn.MissingCart);return e.concat(this._hydrateLineItems(t.lineItemIds,n)).filter(e=>e.quantity>0)}_hydrateLineItems(e,t){return e.map(e=>{const n=(0,f.find)(t.lineItems.physicalItems,t=>t.id===e);return{itemId:e,quantity:n?n.quantity:0}})}_isUpdateConsignmentRequest(e){return!!e.id}_consignmentHasAddress(e){return\"object\"==typeof e&&\"address\"in e}}const gd=[\"consignments.availableShippingOptions\",\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"promotions.banners\"];class vd{constructor(e){this._requestSender=e}createConsignments(e,t,{timeout:n,params:{include:r}={}}={}){const i=`/api/storefront/checkouts/${e}/consignments`,o=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.post(i,{body:t,params:{include:Rc(gd,r)},headers:o,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new Ec;throw e})}updateConsignment(e,t,{timeout:n,params:{include:r}={}}={}){const{id:i}=t,o=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(t,[\"id\"]),a=`/api/storefront/checkouts/${e}/consignments/${i}`,s=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.put(a,{body:o,params:{include:Rc(gd,r)},headers:s,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new Ec;throw e})}deleteConsignment(e,t,{timeout:n}={}){const r=`/api/storefront/checkouts/${e}/consignments/${t}`,i=Object.assign({Accept:lc.JsonV1},hc),o=kc(gd);return this._requestSender.delete(r,{params:{include:o},headers:i,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new Ec;throw e})}}class _d{constructor(e,t){this._shippingCountryRequestSender=e,this._store=t}loadCountries(e){const{checkout:t}=this._store.getState(),n=t.getCheckout(),r=n?n.channelId:null;return rc.c.create(t=>{t.next((0,o.VP)(nn.LoadShippingCountriesRequested)),this._shippingCountryRequestSender.loadCountries(r,e).then(e=>{t.next((0,o.VP)(nn.LoadShippingCountriesSucceeded,e.body.data)),t.complete()}).catch(e=>{t.error((0,o.fQ)(nn.LoadShippingCountriesFailed,e))})})}}class bd{constructor(e,t){this._requestSender=e,this._config=t}loadCountries(e,{timeout:t}={}){const n=\"/internalapi/v1/shipping/countries\"+(e?`?channel_id=${e}`:\"\"),r=Object.assign({\"Accept-Language\":this._config.locale},hc);return this._requestSender.get(n,{headers:r,timeout:t})}}var Sd=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class wd{constructor(e,t){this._googleRecaptcha=e,this._requestSender=t}initialize(e){return t=>(0,gc.x)((0,vc.of)((0,o.VP)(kn.InitializeRequested,void 0)),(0,_c.v)(()=>Sd(this,void 0,void 0,function*(){const n=e?e.containerId:\"spamProtectionContainer\";if(document.getElementById(n)&&this._googleRecaptcha.reset(n),!e&&!document.getElementById(n)){const e=document.createElement(\"div\");e.setAttribute(\"id\",n),document.body.appendChild(e)}const r=t.getState().config.getStoreConfigOrThrow().checkoutSettings.googleRecaptchaSitekey;return yield this._googleRecaptcha.load(n,r),(0,o.VP)(kn.InitializeSucceeded)}))).pipe((0,C.W)(e=>wc(kn.InitializeFailed,e)))}verifyCheckoutSpamProtection(){return e=>(0,_c.v)(()=>{const t=e.getState().checkout.getCheckout();if(!t)throw new Gn(Vn.MissingCheckout);return(0,gc.x)((0,vc.of)((0,o.VP)(kn.VerifyCheckoutRequested)),(0,w.H)(this.execute()(e)).pipe((0,Vc.n)(e=>Gc(e)&&e.payload?(0,w.H)(this._requestSender.validate(t.id,e.payload.token)).pipe((0,Vc.n)(({body:t})=>(0,gc.x)((0,vc.of)(e),(0,vc.of)((0,o.VP)(kn.VerifyCheckoutSucceeded,t))))):(0,vc.of)(e)))).pipe((0,C.W)(e=>wc(kn.VerifyCheckoutFailed,e)))})}execute(){return e=>(0,gc.x)((0,vc.of)((0,o.VP)(kn.ExecuteRequested)),this.initialize()(e),this._googleRecaptcha.execute().pipe((0,tu.s)(1)).pipe((0,Vc.n)(({error:e,token:t})=>Sd(this,void 0,void 0,function*(){if(e instanceof su)throw e;if(e||!t)throw new _u;return(0,o.VP)(kn.ExecuteSucceeded,{token:t})})))).pipe((0,C.W)(e=>wc(kn.ExecuteFailed,e)))}}class Cd{constructor(e){this._requestSender=e}validate(e,t,{timeout:n}={}){const r=`/api/storefront/checkouts/${e}/spam-protection`,i=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.post(r,{body:{token:t},headers:i,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new Ec;throw e})}}class Id{constructor(e){this._storeCreditRequestSender=e}applyStoreCredit(e,t){return n=>(0,gc.x)((0,vc.of)((0,o.VP)(Sn.ApplyStoreCreditRequested)),(0,_c.v)(()=>{return r=this,i=void 0,s=function*(){var r;const i=n.getState().checkout.getCheckout();if(!i)throw new Gn(Vn.MissingCheckout);const{id:a}=i,s=null!==(r=null==t?void 0:t.version)&&void 0!==r?r:i.version,{body:c}=yield e?this._storeCreditRequestSender.applyStoreCredit(a,Object.assign(Object.assign({},t),{version:s})):this._storeCreditRequestSender.removeStoreCredit(a,Object.assign(Object.assign({},t),{version:s}));return(0,o.VP)(Sn.ApplyStoreCreditSucceeded,c)},new((a=void 0)||(a=Promise))(function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function o(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof a?r:new a(function(e){e(r)})).then(n,o)}c((s=s.apply(r,i||[])).next())});var r,i,a,s})).pipe((0,C.W)(e=>wc(Sn.ApplyStoreCreditFailed,e)))}}class Ed{constructor(e){this._requestSender=e}applyStoreCredit(e,{timeout:t,version:n}={}){const r=`/api/storefront/checkouts/${e}/store-credit`,i=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.post(r,{headers:i,timeout:t,params:{include:kc(Mc)},body:{version:n}})}removeStoreCredit(e,{timeout:t,version:n}={}){const r=`/api/storefront/checkouts/${e}/store-credit`,i=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.delete(r,{headers:i,timeout:t,params:{include:kc(Mc)},body:{version:n}})}}class Pd extends p{constructor(e){super(e),this.name=\"UpdateSubscriptionsError\",this.type=\"update_subscriptions\"}}class Od{constructor(e){this._subscriptionsRequestSender=e}updateSubscriptions(e,t){return(0,gc.x)((0,vc.of)((0,o.VP)(D.UpdateSubscriptionsRequested)),(0,_c.v)(()=>{return n=this,r=void 0,a=function*(){const{body:n}=yield this._subscriptionsRequestSender.updateSubscriptions(e,t);return(0,o.VP)(D.UpdateSubscriptionsSucceeded,n)},new((i=void 0)||(i=Promise))(function(e,t){function o(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(o,s)}c((a=a.apply(n,r||[])).next())});var n,r,i,a})).pipe((0,C.W)(e=>wc(D.UpdateSubscriptionsFailed,new Pd(e))))}}class Ad{constructor(e){this._requestSender=e}updateSubscriptions(e,{timeout:t}={}){const n=Object.assign({Accept:lc.JsonV1},hc);return this._requestSender.post(\"/api/storefront/subscriptions\",{body:e,headers:n,timeout:t})}}const Td=(0,f.memoize)(e=>Array.isArray(e)?e.map(e=>kd(e)):V(e)?Object.keys(e).reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:kd(e[n])}),{}):e);Td.cache=new WeakMap;const kd=e=>\"object\"==typeof e&&null!==e?Td(e):e;function Rd(e){return(...t)=>kd(e(...t))}function Md({billingAddress:{getBillingAddress:e,getBillingAddressOrThrow:t},cart:{getCart:n,getCartOrThrow:r,getLocale:i},checkout:{getCheckout:o,getCheckoutOrThrow:a,getOutstandingBalance:s},config:{getContextConfig:c,getHost:u,getLocale:d,getStoreConfig:l,getStoreConfigOrThrow:p,getConfig:h},consignments:{getConsignments:f,getConsignmentsOrThrow:y},countries:{getCountries:m},customer:{getCustomer:g,getCustomerOrThrow:v},instruments:{getCardInstrument:_,getCardInstrumentOrThrow:b,getInstruments:S,getInstrumentsMeta:w},order:{getOrder:C,getOrderOrThrow:I,getOrderMeta:E},payment:{getPaymentToken:P,getPaymentTokenOrThrow:O,getPaymentId:A,getPaymentIdOrThrow:T,getPaymentStatus:k,getPaymentStatusOrThrow:R,getPaymentRedirectUrl:M,getPaymentRedirectUrlOrThrow:x,isPaymentDataRequired:N},paymentMethods:{getPaymentMethod:D,getPaymentMethodOrThrow:j,getPaymentMethodsMeta:L},paymentProviderCustomer:{getPaymentProviderCustomer:z,getPaymentProviderCustomerOrThrow:F},paymentStrategies:{isInitialized:B},shippingAddress:{getShippingAddress:U,getShippingAddressOrThrow:q,getShippingAddresses:V,getShippingAddressesOrThrow:G},shippingCountries:{getShippingCountries:H}}){return{getHost:Rd(u),getLocale:Rd(d),getCartLocale:Rd(i),getBillingAddress:Rd(e),getBillingAddressOrThrow:Rd(t),getCart:Rd(n),getCartOrThrow:Rd(r),getCheckout:Rd(o),getCheckoutOrThrow:Rd(a),getCountries:Rd(m),getStoreConfig:Rd(l),getStoreConfigOrThrow:Rd(p),getConfig:Rd(h),getConsignments:Rd(f),getConsignmentsOrThrow:Rd(y),getContextConfig:Rd(c),getCustomer:Rd(g),getCustomerOrThrow:Rd(v),getCardInstrument:Rd(_),getInstruments:Rd(S),getCardInstrumentOrThrow:Rd(b),getOrder:Rd(C),getOrderOrThrow:Rd(I),getOrderMeta:Rd(E),getInstrumentsMeta:Rd(w),getPaymentToken:P,getPaymentTokenOrThrow:O,getPaymentId:A,getPaymentIdOrThrow:T,getPaymentStatus:k,getPaymentStatusOrThrow:R,getPaymentRedirectUrl:M,getPaymentRedirectUrlOrThrow:x,getPaymentMethod:Rd(D),getPaymentMethodOrThrow:Rd(j),getPaymentMethodsMeta:Rd(L),getPaymentProviderCustomer:Rd(z),getPaymentProviderCustomerOrThrow:Rd(F),getShippingAddress:Rd(U),getShippingAddressOrThrow:Rd(q),getShippingAddresses:Rd(V),getShippingAddressesOrThrow:Rd(G),getShippingCountries:Rd(H),getOutstandingBalance:Rd(s),isPaymentDataRequired:N,isPaymentMethodInitialized:B}}var xd,Nd=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Dd{constructor(e,t,n,r,i,o,a,s,c,u,d,l,p,h,f,y,m,g,v,_){this._store=e,this._storeProjectionFactory=t,this._checkoutActionCreator=n,this._checkoutValidator=r,this._hostedFormFactory=i,this._orderActionCreator=o,this._billingAddressActionCreator=a,this._consignmentActionCreator=s,this._paymentMethodActionCreator=c,this._paymentActionCreator=u,this._paymentHumanVerificationHandler=d,this._customerActionCreator=l,this._cartRequestSender=p,this._storeCreditActionCreator=h,this._couponActionCreator=f,this._spamProtectionActionCreator=y,this._paymentProviderCustomerActionCreator=m,this._shippingCountryActionCreator=g,this._remoteCheckoutActionCreator=v,this._paymentStrategyWidgetActionCreator=_,this._storeProjection=this._storeProjectionFactory.create(this._store)}createHostedForm(e,t){const n=this._storeProjection.getState().getCheckoutOrThrow().id;return this._hostedFormFactory.create(e,t,n)}subscribe(e,...t){return this._storeProjection.subscribe(e,...t)}getState(){return this._storeProjection.getState()}initializeOffsitePayment(e){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentActionCreator.initializeOffsitePayment(e)),this._storeProjection.getState()})}loadCheckout(e){return Nd(this,void 0,void 0,function*(){return e?yield this._store.dispatch(this._checkoutActionCreator.loadCheckout(e)):yield this._store.dispatch(this._checkoutActionCreator.loadCurrentCheckout()),this._storeProjection.getState()})}loadDefaultCheckout(){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()),this._storeProjection.getState()})}loadPaymentMethod(e,t){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e,t)),this._storeProjection.getState()})}loadPaymentMethods(e){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethods(e)),this._storeProjection.getState()})}submitOrder(e,t){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._orderActionCreator.submitOrder(e,t)),this._storeProjection.getState()})}submitPayment(e){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentActionCreator.submitPayment(e)),this._storeProjection.getState()})}finalizeOrder(e){return Nd(this,void 0,void 0,function*(){const{order:{getOrderOrThrow:t}}=this._store.getState();return yield this._store.dispatch(this._orderActionCreator.finalizeOrder(t().orderId,e)),this._storeProjection.getState()})}updateBillingAddress(e){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(e)),this._storeProjection.getState()})}updateShippingAddress(e){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.updateAddress(e)),this._storeProjection.getState()})}selectShippingOption(e,t){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t)),this._storeProjection.getState()})}signInCustomer(e,t){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._customerActionCreator.signInCustomer(e,t)),this._storeProjection.getState()})}signOutCustomer(e){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._customerActionCreator.signOutCustomer(e)),this._storeProjection.getState()})}createBuyNowCart(e,t){return Nd(this,void 0,void 0,function*(){const{body:n}=yield this._cartRequestSender.createBuyNowCart(e,t);return n})}applyStoreCredit(e,t){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._storeCreditActionCreator.applyStoreCredit(e,t)),this._storeProjection.getState()})}applyCoupon(e,t){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._couponActionCreator.applyCoupon(e,t)),this._storeProjection.getState()})}removeCoupon(e,t){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._couponActionCreator.removeCoupon(e,t)),this._storeProjection.getState()})}verifyCheckoutSpamProtection(){return Nd(this,void 0,void 0,function*(){const{checkout:e}=this._store.getState(),{shouldExecuteSpamCheck:t}=e.getCheckoutOrThrow();return t&&(yield this._store.dispatch(this._spamProtectionActionCreator.verifyCheckoutSpamProtection())),this._storeProjection.getState()})}loadCurrentOrder(e){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._orderActionCreator.loadCurrentOrder(e)),this._storeProjection.getState()})}updatePaymentProviderCustomer(e){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(e)),this._storeProjection.getState()})}loadShippingCountries(e){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._shippingCountryActionCreator.loadCountries(e)),this._storeProjection.getState()})}deleteConsignment(e,t){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.deleteConsignment(e,t)),this._storeProjection.getState()})}initializePayment(e,t,n){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.initializePayment(e,t,n)),this._storeProjection.getState()})}forgetCheckout(e,t){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.forgetCheckout(e,t)),this._storeProjection.getState()})}remoteCheckoutSignOut(e,t){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.signOut(e,t)),this._storeProjection.getState()})}validateCheckout(e,t){return Nd(this,void 0,void 0,function*(){yield this._checkoutValidator.validate(e,t)})}handlePaymentHumanVerification(e,t){return Nd(this,void 0,void 0,function*(){return\"string\"==typeof e?this._paymentHumanVerificationHandler.handle(e,null!=t?t:\"\"):this._paymentHumanVerificationHandler.handle(e)})}widgetInteraction(e){return Nd(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentStrategyWidgetActionCreator.widgetInteraction(e),{queueId:\"widgetInteraction\"}),this._storeProjection.getState()})}}!function(e){e.Synchronize=\"SYNCHRONIZE\"}(xd||(xd={}));class jd{constructor(e){this._transformSelectors=e}create(e){return function(e,t){const n=(0,o.iN)((e,t)=>t.type===xd.Synchronize?t.payload:e,e.getState(),{stateTransformer:t});return e.subscribe(e=>{n.dispatch((0,o.VP)(xd.Synchronize,e))},{initial:!1}),n}(e,this._transformSelectors)}}const Ld=e=>{const t=(0,f.uniqueId)(e);return document.getElementById(t)?Ld(e):t};var zd=n(540),Fd=n.n(zd);function Bd(e){return Object.prototype.hasOwnProperty.call(e,\"cacheKey\")}class Ud{constructor(e){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=Object.assign({maxSize:0,isEqual:Fd(),onExpire:f.noop},e)}getKey(...e){const t=this._resolveMap(...e),{index:n,parentMap:r}=t;let{map:i}=t;return i&&i.cacheKey?i.usedCount++:i=this._generateMap(r,e.slice(n)),this._removeLeastUsedMap(i),i.cacheKey}getUsedCount(...e){const{map:t}=this._resolveMap(...e);return t?t.usedCount:0}_resolveMap(...e){let t=0,n=this._map;for(;n.maps.length;){let r=!1;for(let i=0;i<n.maps.length;i++){const o=n.maps[i];if(this._options.isEqual(o.value,e[t])){if(n.maps.unshift(...n.maps.splice(i,1)),(0===e.length||t===e.length-1)&&Bd(o))return{index:t,map:o,parentMap:n};r=!0,n=o,t++;break}}if(!r)break}return{index:t,parentMap:n}}_generateMap(e,t){let n,r=0,i=e;do{n={maps:[],parentMap:i,usedCount:1,value:t[r]},i.maps.unshift(n),i=n,r++}while(r<t.length);const o=n;return o.cacheKey=\"\"+ ++this._lastId,o}_removeLeastUsedMap(e){if(!this._options.maxSize)return;const t=this._usedMaps.indexOf(e);if(this._usedMaps.splice(-1===t?0:t,-1===t?0:1,e),this._usedMaps.length<=this._options.maxSize)return;const n=this._usedMaps.pop();n&&(this._removeMap(n),this._options.onExpire(n.cacheKey))}_removeMap(e){e.parentMap&&(e.parentMap.maps.splice(e.parentMap.maps.indexOf(e),1),function(e){return Object.prototype.hasOwnProperty.call(e,\"parentMap\")}(e.parentMap)||this._removeMap(e.parentMap))}}function qd(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const r=Object.getOwnPropertyDescriptor(e.prototype,n);r&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,function(e,t,n){if(\"function\"!=typeof n.value)return n;let r=new Ud,i=n.value,o=(0,jn.Bj)(i);return Eo(e,t,{get(){const e=(...e)=>{const t=o.call(this,...e);if(1===r.getUsedCount(...e))return t;const n=i.call(this,...e);return P(n,t,{keyFilter:e=>!function(e){return 0===`${e}`.indexOf(\"$$\")||0===`${e}`.indexOf(\"_\")}(e)})?t:(o.cache.set(r.getKey(...e),n),n)};return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){r=new Ud,i=e,o=(0,jn.Bj)(i)}})}(e.prototype,n,r))}),t}let Vd=class{constructor(e){this._checkoutButton=e.checkoutButton}getInitializeButtonError(e){return this._checkoutButton.getInitializeError(e)}getDeinitializeButtonError(e){return this._checkoutButton.getDeinitializeError(e)}};Vd=function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([qd],Vd);const Gd=Vd;let Hd=class{constructor(e){this._checkoutButton=e.checkoutButton}isInitializingButton(e){return this._checkoutButton.isInitializing(e)}isDeinitializingButton(e){return this._checkoutButton.isDeinitializing(e)}};Hd=function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([qd],Hd);const Yd=Hd;function Wd(e){return{errors:new Gd(e),statuses:new Yd(e)}}let $d=class{constructor(e,t){this._store=e,this._buttonStrategyActionCreator=t,this._state=Wd(this._store.getState()),this._store.subscribe(e=>{this._state=Wd(e)})}getState(){return this._state}subscribe(e,...t){return this._store.subscribe(()=>e(this.getState()),e=>e.checkoutButton.getState(),...t.map(e=>t=>e(Wd(t))))}initializeButton(e){const t=(n=e.containerId,/^\\w[\\w\\-\\:\\.]*$/.test(n)?[e.containerId]:function(e,t){const n=document.querySelectorAll(e);if(!n.length)throw new nu(`Unable to find any element with the specified selector: ${e}`);return Array.prototype.slice.call(n).map(e=>(e.id||(e.id=Ld(t)),e.id))}(e.containerId,`${e.methodId}-container`));var n;return Promise.all(t.map(t=>{const n=this._buttonStrategyActionCreator.initialize(Object.assign(Object.assign({},e),{containerId:t})),r=`checkoutButtonStrategy:${e.methodId}:${t}`;return this._store.dispatch(n,{queueId:r})})).then(()=>this.getState())}deinitializeButton(e){const t=this._buttonStrategyActionCreator.deinitialize(e),n=`checkoutButtonStrategy:${e.methodId}`;return this._store.dispatch(t,{queueId:n}).then(()=>this.getState())}};$d=function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Eo],$d);const Kd=$d;class Zd{constructor(e,t,n){this._registry=e,this._registryV2=t,this._paymentMethodActionCreator=n}initialize(e){return t=>{const n={methodId:e.methodId,containerId:e.containerId};if(t.getState().checkoutButton.isInitialized(e.methodId,e.containerId))return(0,bc.I)();const r=e.currencyCode?{params:{currencyCode:e.currencyCode}}:{},i=Object.assign(Object.assign({},r),{timeout:e.timeout,useCache:!0});return(0,gc.x)((0,vc.of)((0,o.VP)(ee.InitializeButtonRequested,void 0,n)),this._paymentMethodActionCreator.loadPaymentMethod(e.methodId,i)(t),(0,_c.v)(()=>this._getStrategy(e.methodId).initialize(e).then(()=>(0,o.VP)(ee.InitializeButtonSucceeded,void 0,n)))).pipe((0,C.W)(e=>wc(ee.InitializeButtonFailed,e,n)))}}deinitialize(e){return t=>{const n={methodId:e.methodId};return t.getState().checkoutButton.isInitialized(e.methodId)?(0,gc.x)((0,vc.of)((0,o.VP)(ee.DeinitializeButtonRequested,void 0,n)),(0,_c.v)(()=>this._getStrategy(e.methodId).deinitialize().then(()=>(0,o.VP)(ee.DeinitializeButtonSucceeded,void 0,n)))).pipe((0,C.W)(e=>wc(ee.DeinitializeButtonFailed,e,n))):(0,bc.I)()}}_getStrategy(e){let t;try{t=this._registryV2.get({id:e})}catch(n){t=this._registry.get(e)}return t}}class Jd{constructor(e){var t,n,r;this._factories={},this._instances={},this._defaultToken=null!==(t=null==e?void 0:e.defaultToken)&&void 0!==t?t:\"default\",this._useFallback=null===(n=null==e?void 0:e.useFallback)||void 0===n||n,this._tokenResolver=null!==(r=null==e?void 0:e.tokenResolver)&&void 0!==r?r:e=>e}get(e,t){try{return this._getInstance(e||this._defaultToken,t||e||this._defaultToken)}catch(e){if(!this._useFallback)throw e;return this._getInstance(this._defaultToken,t||this._defaultToken)}}getFactory(e,t){const n=this._tokenResolver(e,Object.keys(this._factories),t);return n?this._factories[n]:void 0}register(e,t){if(this._hasFactory(e))throw new nu(`'${e}' is already registered.`);this._factories[e]=t}_hasFactory(e){return!!this._factories[e]}_hasInstance(e){return!!this._instances[e]}_getInstance(e,t){if(!this._hasInstance(t)){const n=this.getFactory(e);if(!n)throw new nu(`'${e}' is not registered.`);this._instances[t]=n()}return this._instances[t]}}class Qd extends d{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var Xd,el,tl,nl,rl;class il{constructor(e){this._scriptLoader=e,this._window=window}loadPaypal(e=\"\"){return t=this,n=void 0,i=function*(){const t=\"//www.paypalobjects.com/api/checkout.min.js\",n={async:!0,attributes:{\"data-merchant-id\":e}};if(e?yield this._scriptLoader.loadScript(t,n):yield this._scriptLoader.loadScript(t),!this._window.paypal)throw new Qd;return this._window.paypal},new((r=void 0)||(r=Promise))(function(e,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((i=i.apply(t,n||[])).next())});var t,n,r,i}}!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(Xd||(Xd={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(el||(el={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(tl||(tl={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(nl||(nl={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(rl||(rl={}));class ol{constructor(e,t,n,r,i=\"\"){this._store=e,this._checkoutActionCreator=t,this._paypalScriptLoader=n,this._formPoster=r,this._host=i}initialize(e){const t=e.paypal,n=this._store.getState(),r=this._paymentMethod=n.paymentMethods.getPaymentMethod(e.methodId);if(!t)throw new nu;if(!r)throw new Gn(Vn.MissingPaymentMethod);return this._paypalScriptLoader.loadPaypal(r.config.merchantId).then(n=>{var i,o;if(!r||!r.config.merchantId)throw new Gn(Vn.MissingPaymentMethod);const a=r.config.merchantId,s=r.config.testMode?\"sandbox\":\"production\",c={[s]:t.clientId},u=n.FUNDING.CREDIT||\"credit\",d=t.allowCredit?[u]:[],l=t.allowCredit?[]:[u];return n.Button.render({env:s,client:c,commit:t.shouldProcessPayment,funding:{allowed:d,disallowed:l},style:Object.assign(Object.assign({shape:rl.RECT},(0,f.pick)(t.style,\"layout\",\"color\",\"label\",\"shape\",\"tagline\",\"fundingicons\")),{size:\"paypalexpress\"===r.id&&\"small\"===(null===(i=t.style)||void 0===i?void 0:i.size)?el.RESPONSIVE:null===(o=t.style)||void 0===o?void 0:o.size}),payment:(e,n)=>this._setupPayment(a,n,t.onPaymentError),onAuthorize:(e,n)=>this._tokenizePayment(e,n,t.shouldProcessPayment,t.onAuthorizeError)},e.containerId)})}deinitialize(){return this._paymentMethod=void 0,Promise.resolve()}_setupPayment(e,t,n){if(!t)throw new vu(pu.CheckoutButtonNotInitialized);return this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then(n=>{const r=n.cart.getCart(),i=r?r.id:\"\";return t.request.post(`${this._host}/api/storefront/payment/paypalexpress`,{merchantId:e,cartId:i},{headers:Object.assign({\"X-API-INTERNAL\":pc},hc)})}).then(e=>e.id).catch(e=>{throw n&&n(e),e})}_tokenizePayment(e,t,n,r){if(!this._paymentMethod)throw new vu(pu.CheckoutButtonNotInitialized);if(!t)throw new vu(pu.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new Gn(Vn.MissingPayment);const i=this._paymentMethod.id;return t.payment.get(e.paymentID).then(t=>{this._formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:i,action:n?\"process_payment\":\"set_external_checkout\",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(t.payer.payer_info)})})}}function al(e){return e&&\"resolveIds\"in e}function sl(){try{return\"production\"}catch(e){return\"development\"}}class cl{constructor(e){this._console=e}log(...e){this._logToConsole(\"log\",...e)}info(...e){this._logToConsole(\"info\",...e)}warn(...e){this._logToConsole(\"warn\",...e)}error(...e){this._logToConsole(\"error\",...e)}debug(...e){this._logToConsole(\"debug\",...e)}_logToConsole(e,...t){this._console&&this._console[e]&&this._console[e].call(this._console,...t)}}class ul{log(){}info(){}warn(){}error(){}debug(){}}const dl=function(e=!0){return e?new cl(console):new ul}(\"test\"!==sl());class ll{constructor(e=!1){this._useFallback=e,this._registry=new Jd({tokenResolver:this._resolveToken.bind(this),defaultToken:this._encodeToken({default:!0}),useFallback:this._useFallback})}get(e){return this._registry.get(this._encodeToken(e))}getFactory(e,t){try{return this._registry.getFactory(this._encodeToken(e),t)}catch(e){return}}getUseFallback(){return this._useFallback}register(e,t){this._registry.register(this._encodeToken(e),t)}_encodeToken(e){return btoa(JSON.stringify(e))}_decodeToken(e){return JSON.parse(atob(e))}_resolveToken(e,t,n){var r;const i=this._decodeToken(e),o=[];t.forEach(e=>{const t=this._decodeToken(e),n={token:e,matches:0,default:!1,totalKeys:Object.keys(t).length};for(const[e,r]of Object.entries(t)){if(e in i&&i[e]!==r){n.matches=0;break}e in i&&i[e]===r&&n.matches++,\"default\"===e&&!0===r&&(n.default=!0)}o.push(n)});const a=o.sort((e,t)=>t.matches-e.matches).filter(e=>e.matches>0);a.length>1&&a[0].matches===a[1].matches&&\"development\"===sl()&&dl.warn(\"The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.\");const s=Object.keys(i).length;if(n){const e=a.find(e=>e.matches===s&&e.matches===e.totalKeys);if(!e)throw new Error(`Unable to resolve to a registered token with the provided token for ${JSON.stringify(i)} with exact match.`);return e.token}const c=a[0];if(c&&c.token)return c.token;if(this._useFallback){const e=null===(r=o.find(e=>e.default))||void 0===r?void 0:r.token;if(e)return e}throw new Error(`Unable to resolve to a registered token with the provided token for ${JSON.stringify(i)}.`)}}function pl(n){const{host:r}=null!=n?n:{},o=nr({config:{meta:{host:null==n?void 0:n.host,locale:null==n?void 0:n.locale},errors:{},statuses:{}}}),a=(0,t.createRequestSender)({host:r}),s=(0,i.createFormPoster)({host:r}),c=function(e,t){const n=new ll;for(const[,r]of Object.entries(t))if(al(r))for(const t of r.resolveIds)n.register(t,()=>r(e));return n}(function(e,n){const{config:{getHost:r,getLocale:i}}=e.getState();n||(n=(0,t.createRequestSender)({host:r()}));const o=new jd(Md),a=new Tc(new Nc(n),new Fc(new Bc(n)),new Wc(new $c(n))),s=new Lc(new Nc(n)),c=new xu(e),u=new Du(new Uu(n),new Lc(new Nc(n))),d=new Ic(new Oc(n),new Od(new Ad(n))),l=new md(new vd(n),new Nc(n)),p=new uc(new fc(n),new yc(n)),h=new qu(new Vu(function(e){const t=(0,Gu.U)();return e.subscribe(e=>{const n=e.config.getStoreConfig();n&&t.setHost(n.paymentSettings.bigpayBaseUrl)},e=>e.config.getStoreConfig()),t}(e)),u,new ld,new lu(Cu((0,or.Hb)()))),f=new lu(Cu((0,or.Hb)())),y=new Hc(new Yc(n),a,new wd(Cu((0,or.Hb)()),new Cd(n))),m=new Id(new Ed(n)),g=new Uc(new qc(n)),v=Cu((0,or.Hb)()),_=new Cd(n),b=new wd(v,_),S=new Ac(n),w=new pd,C=new _d(new bd(n,{locale:i()}),e),I=new fd(new yd(n),a),E=new hd;return new Dd(e,o,a,s,c,u,d,l,p,h,f,y,S,m,g,b,w,C,I,E)}(o),e);return new Kd(o,new Zd(function(e,t,n,r){const i=new Jd,o=(0,or.vQ)(),a=new Nc(t),s=new Tc(a,new Fc(new Bc(t)),new Wc(new $c(t)));return i.register(Xu.PAYPALEXPRESS,()=>new ol(e,s,new il(o),n,r)),i}(o,a,s,r),c,new uc(new fc(a),new yc(a))))}})(),module.exports=r})();\n//# sourceMappingURL=checkout-button.js.map"
  },
  {
    "path": "dist/cjs/checkout-button.js.LICENSE.txt",
    "content": "/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n"
  },
  {
    "path": "dist/cjs/checkout-sdk-essential.js",
    "content": "/*! For license information please see checkout-sdk-essential.js.LICENSE.txt */\n(()=>{var e={3825(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=u(n(4475)),i=u(n(8015)),o=u(n(8615)),s=u(n(9504)),a=u(n(4351)),c=u(n(3072));function u(e){return e&&e.__esModule?e:{default:e}}function d(e){return d=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},d(e)}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,h(r.key),r)}}function h(e){var t=function(e){if(\"object\"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=d(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==d(t)?t:t+\"\"}t.default=function(){function e(t,n,r,i,o){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.config=t,this.paymentSubmitter=n,this.offsitePaymentInitializer=r,this.clientTokenGenerator=i,this.storeRequestSender=o}return t=e,u=[{key:\"create\",value:function(t){var n=(0,r.default)({},c.default,t),u=i.default.create(n);return new e(n,o.default.create(n),u,s.default.create(n),a.default.create(n))}}],(n=[{key:\"setHost\",value:function(e){this.config.host=e}},{key:\"initializeOffsitePayment\",value:function(e,t,n){this.offsitePaymentInitializer.initializeOffsitePayment(e,t,n)}},{key:\"submitPayment\",value:function(e,t){this.paymentSubmitter.submitPayment(e,t)}},{key:\"generateClientToken\",value:function(e,t){this.clientTokenGenerator.generateClientToken(e,t)}},{key:\"loadInstruments\",value:function(e,t){this.storeRequestSender.loadInstruments(e,t)}},{key:\"loadInstrumentsWithAddress\",value:function(e,t){this.storeRequestSender.loadInstrumentsWithAddress(e,t)}},{key:\"deleteShopperInstrument\",value:function(e,t){this.storeRequestSender.deleteShopperInstrument(e,t)}}])&&l(t.prototype,n),u&&l(t,u),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,u}()},3072(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0,t.default={host:\"\"}},9554(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.APPLICATION_JSON=void 0,t.APPLICATION_JSON=\"application/json\"},7257(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(9554),i=n(9726),o={headers:{Accept:r.APPLICATION_JSON,\"Content-Type\":r.APPLICATION_JSON},method:i.GET};t.default=o},9726(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.POST=t.GET=t.DELETE=void 0,t.GET=\"GET\",t.POST=\"POST\",t.DELETE=\"DELETE\"},9731(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r,i=(r=n(4475))&&r.__esModule?r:{default:r},o=n(9554),s=n(5916);function a(e){return a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},a(e)}function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,u(r.key),r)}}function u(e){var t=function(e){if(\"object\"!=a(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=a(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==a(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return function(e,t,n){return t&&c(e.prototype,t),n&&c(e,n),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(e,[{key:\"toRequest\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.APPLICATION_JSON;return e&&(0,s.includes)(t,o.APPLICATION_JSON)?JSON.stringify(e):e}},{key:\"fromResponse\",value:function(e){var t=this.parseResponseHeaders(e.getAllResponseHeaders()),n=e.getResponseHeader(\"Content-Type\"),r=e.status,i=e.statusText,a=\"response\"in e?e.response:e.responseText;return a&&(0,s.includes)(n,o.APPLICATION_JSON)&&(a=JSON.parse(a)),{data:a,headers:t,status:r,statusText:i}}},{key:\"parseResponseHeaders\",value:function(e){return(e?e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(e,t){var n=t.split(\":\"),r=(n.shift()||\"\").trim();return r?(0,i.default)({},e,function(e,t,n){return(t=u(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},r.toLowerCase(),n.join(\":\").trim())):e},{})}}],[{key:\"create\",value:function(){return new e}}])}()},5101(e,t){\"use strict\";function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,i(r.key),r)}}function i(e){var t=function(e){if(\"object\"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=n(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==n(t)?t:t+\"\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0,t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"createRequest\",value:function(e,t,n){var r=new XMLHttpRequest;return r.onerror=function(){n&&n(new Error(r.statusText))},r.onload=function(){n&&n()},r.open(t.method,e,!0),this.setOptions(r,t),r}},{key:\"setHeaders\",value:function(e,t){Object.keys(t).forEach(function(n){var r=t[n];e.setRequestHeader(n,r)})}},{key:\"setOptions\",value:function(e,t){e.withCredentials=t.withCredentials,t.headers&&this.setHeaders(e,t.headers)}}])&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},7542(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=u(n(3592)),i=u(n(4475)),o=n(9726),s=u(n(7257)),a=u(n(9731)),c=u(n(5101));function u(e){return e&&e.__esModule?e:{default:e}}function d(e){return d=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},d(e)}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,h(r.key),r)}}function h(e){var t=function(e){if(\"object\"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=d(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==d(t)?t:t+\"\"}t.default=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.requestFactory=t,this.payloadTransformer=n}return t=e,u=[{key:\"create\",value:function(){return new e(c.default.create(),a.default.create())}}],(n=[{key:\"sendRequest\",value:function(e,t,n,i){var o=this,a=(0,r.default)({},s.default,n),c=this.requestFactory.createRequest(e,a,function(e){var t=o.payloadTransformer.fromResponse(c);i&&(!e&&o.isSuccessfulRequest(c)?i(null,t):i(t))}),u=this.payloadTransformer.toRequest(t,a.headers[\"Content-Type\"]);c.send(u)}},{key:\"postRequest\",value:function(e,t,n,r){var s=(0,i.default)({},n,{method:o.POST});this.sendRequest(e,t,s,r)}},{key:\"isSuccessfulRequest\",value:function(e){return e.status>=200&&e.status<300}}])&&l(t.prototype,n),u&&l(t,u),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,u}()},6207(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){return!(!Array.isArray(e)&&\"string\"!=typeof e)&&-1!==e.indexOf(t)}},5916(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),Object.defineProperty(t,\"includes\",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,\"isNil\",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,\"isObject\",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,\"omitEmptyStringAndNil\",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,\"omitNil\",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,\"omitProperty\",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,\"toNumber\",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,\"toSnakeCase\",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,\"toString\",{enumerable:!0,get:function(){return l.default}});var r=h(n(6207)),i=h(n(848)),o=h(n(216)),s=h(n(1144)),a=h(n(2433)),c=h(n(2265)),u=h(n(3897)),d=h(n(987)),l=h(n(6645));function h(e){return e&&e.__esModule?e:{default:e}}},7914(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return\"\"===e}},223(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return(0,r.default)(e)||(0,i.default)(e)};var r=o(n(7914)),i=o(n(848));function o(e){return e&&e.__esModule?e:{default:e}}},848(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return null==e}},216(e,t){\"use strict\";function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return null!==e&&\"object\"===n(e)&&!Array.isArray(e)}},1144(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return(0,i.default)(e,r.default)};var r=o(n(223)),i=o(n(2265));function o(e){return e&&e.__esModule?e:{default:e}}},2433(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return(0,i.default)(e,r.default)};var r=o(n(848)),i=o(n(2265));function o(e){return e&&e.__esModule?e:{default:e}}},2265(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){return(0,i.default)(e)?Object.keys(e).reduce(function(n,r){var i=e[r];return t(i)||(n[r]=i),n},{}):e};var r,i=(r=n(216))&&r.__esModule?r:{default:r}},3897(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return parseFloat(e)||0}},987(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return\"string\"!=typeof e?e:e.replace(/([a-z\\d])([A-Z]+)/g,\"$1_$2\").replace(/[-\\s]+/g,\"_\").toLowerCase()}},6645(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return\"string\"==typeof e?e:\"number\"!=typeof e||Number.isNaN(e)?\"\":e.toString()}},2742(e,t,n){\"use strict\";t.U=function(e){return i.default.create(e)};var r,i=(r=n(3825))&&r.__esModule?r:{default:r}},9504(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=s(n(7542)),i=s(n(3373)),o=s(n(2815));function s(e){return e&&e.__esModule?e:{default:e}}function a(e){return a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},a(e)}function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,u(r.key),r)}}function u(e){var t=function(e){if(\"object\"!=a(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=a(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==a(t)?t:t+\"\"}t.default=function(){function e(t,n,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.urlHelper=t,this.requestSender=n,this.clientTokenMapper=r}return t=e,s=[{key:\"create\",value:function(t){return new e(o.default.create(t),r.default.create(),i.default.create())}}],(n=[{key:\"generateClientToken\",value:function(e,t){var n=this.urlHelper.getGenerateClientTokenUrl(),r=this.clientTokenMapper.mapToClientToken(e);this.requestSender.postRequest(n,r,{},t)}}])&&c(t.prototype,n),s&&c(t,s),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,s}()},8015(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(8686),i=n(2157),o=a(n(2216)),s=a(n(2815));function a(e){return e&&e.__esModule?e:{default:e}}function c(e){return c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c(e)}function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,d(r.key),r)}}function d(e){var t=function(e){if(\"object\"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=c(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==c(t)?t:t+\"\"}t.default=function(){function e(t,n,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.urlHelper=t,this.formPoster=n,this.payloadMapper=r}return t=e,a=[{key:\"create\",value:function(t){return new e(s.default.create(t),(0,r.createFormPoster)(),o.default.create())}}],(n=[{key:\"initializeOffsitePayment\",value:function(e,t,n){var r=e.paymentMethod,o=void 0===r?{}:r;if(o.type!==i.HOSTED)throw new Error(\"\".concat(o.type,\" is not supported.\"));var s=this.payloadMapper.mapToPayload(e),a=this.urlHelper.getOffsitePaymentUrl();this.formPoster.postForm(a,s,t,n)}}])&&u(t.prototype,n),a&&u(t,a),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,a}()},7034(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t,n){return(t=a(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToBillingAddress\",value:function(e){return this.mapToAddress(e,\"billingAddress\")}},{key:\"mapToShippingAddress\",value:function(e){return this.mapToAddress(e,\"shippingAddress\")}},{key:\"mapToAddress\",value:function(e,t){var n,i=e[t]||{},s=(0,r.toSnakeCase)(t);return(0,r.omitNil)((o(o(o(o(o(o(o(o(o(o(n={},\"\".concat(s,\"_city\"),i.city),\"\".concat(s,\"_company\"),i.company),\"\".concat(s,\"_country_code\"),i.countryCode),\"\".concat(s,\"_country\"),i.country),\"\".concat(s,\"_first_name\"),i.firstName),\"\".concat(s,\"_last_name\"),i.lastName),\"\".concat(s,\"_phone\"),i.phone),\"\".concat(s,\"_state_code\"),i.provinceCode),\"\".concat(s,\"_state\"),i.province),\"\".concat(s,\"_street_1\"),i.addressLine1),o(o(n,\"\".concat(s,\"_street_2\"),i.addressLine2),\"\".concat(s,\"_zip\"),i.postCode)))}}])&&s(t.prototype,n),i&&s(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},5452(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToCustomer\",value:function(e){var t=e.customer,n=void 0===t?{}:t,i=e.quoteMeta,o=void 0===i?{}:i,s=e.store,a=void 0===s?{}:s;return(0,r.omitNil)({customer_browser_info:navigator.userAgent,customer_email:n.email,customer_first_name:n.firstName,customer_geo_ip_country_code:o.request?o.request.geoCountryCode:null,customer_id:n.customerId,customer_last_name:n.lastName,customer_locale:a.storeLanguage,customer_name:n.name,customer_phone:n.phoneNumber,customer_reference:n.email})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},7403(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToMeta\",value:function(e){var t=e.source;return(0,r.omitNil)({meta_referrer:document.referrer,meta_source:t,meta_user_agent:navigator.userAgent})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},2216(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=d(n(4475)),i=n(5916),o=d(n(7034)),s=d(n(5452)),a=d(n(7403)),c=d(n(187)),u=d(n(9229));function d(e){return e&&e.__esModule?e:{default:e}}function l(e){return l=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},l(e)}function h(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,p(r.key),r)}}function p(e){var t=function(e){if(\"object\"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=l(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==l(t)?t:t+\"\"}t.default=function(){function e(t,n,r,i,o){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.addressMapper=t,this.customerMapper=n,this.metaMapper=r,this.paymentMethodIdMapper=i,this.storeMapper=o}return t=e,d=[{key:\"create\",value:function(){return new e(o.default.create(),s.default.create(),a.default.create(),c.default.create(),u.default.create())}}],(n=[{key:\"mapToPayload\",value:function(e){var t=e.authToken,n=e.order,o=void 0===n?{}:n,s=e.payment,a=void 0===s?{}:s,c=e.paymentMethod,u=void 0===c?{}:c,d=(0,r.default)({amount:o.grandTotal?o.grandTotal.integerAmount:null,tax:o.taxTotal?o.taxTotal.integerAmount:null,bc_auth_token:t,currency:o.currency,gateway:this.paymentMethodIdMapper.mapToId(u),notify_url:o.callbackUrl,order_id:o.orderId?(0,i.toString)(o.orderId):null,page_title:document.title?document.title:null,payment_method_id:u.id,reference_id:o.orderId?(0,i.toString)(o.orderId):null,return_url:u.returnUrl||(o.payment?o.payment.returnUrl:null)},this.addressMapper.mapToBillingAddress(e),this.customerMapper.mapToCustomer(e),this.metaMapper.mapToMeta(e),this.addressMapper.mapToShippingAddress(e),this.storeMapper.mapToStore(e)),l=a.formattedPayload,h=void 0===l?{}:l;return(0,r.default)(d,h),(0,i.omitNil)(d)}}])&&h(t.prototype,n),d&&h(t,d),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,d}()},9229(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToStore\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,r.omitNil)({store_hash:n.storeHash,store_id:n.storeId?(0,r.toString)(n.storeId):null})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},4432(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PAYPAL_COMMERCE_VENMO=t.PAYPAL_COMMERCE_CREDIT_CARDS=t.PAYPAL_COMMERCE_CREDIT=t.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=t.PAYPAL_COMMERCE_ACCELERATED_CHECKOUT=t.PAYPAL_COMMERCE=t.BRAINTREE_VISACHECKOUT=t.BRAINTREE_PAYPAL_CREDIT=t.BRAINTREE_PAYPAL=t.BRAINTREE_LOCAL_METHODS=t.BRAINTREE_GOOGLEPAY=t.BRAINTREE_ACH=t.BRAINTREE_ACCELERATED_CHECKOUT=t.BRAINTREE=t.BIGCOMMERCE_PAYMENTS_VENMO=t.BIGCOMMERCE_PAYMENTS_PAYLATER=t.BIGCOMMERCE_PAYMENTS_FASTLANE=t.BIGCOMMERCE_PAYMENTS_CREDIT_CARDS=t.BIGCOMMERCE_PAYMENTS_APMS=t.BIGCOMMERCE_PAYMENTS=void 0,t.BIGCOMMERCE_PAYMENTS=\"bigcommerce_payments\",t.BIGCOMMERCE_PAYMENTS_PAYLATER=\"bigcommerce_payments_paylater\",t.BIGCOMMERCE_PAYMENTS_CREDIT_CARDS=\"bigcommerce_payments_creditcards\",t.BIGCOMMERCE_PAYMENTS_FASTLANE=\"bigcommerce_payments_fastlane\",t.BIGCOMMERCE_PAYMENTS_APMS=\"bigcommerce_payments_apms\",t.BIGCOMMERCE_PAYMENTS_VENMO=\"bigcommerce_payments_venmo\",t.BRAINTREE=\"braintree\",t.BRAINTREE_PAYPAL=\"braintreepaypal\",t.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",t.BRAINTREE_VISACHECKOUT=\"braintreevisacheckout\",t.BRAINTREE_LOCAL_METHODS=\"braintreelocalmethods\",t.BRAINTREE_GOOGLEPAY=\"googlepaybraintree\",t.BRAINTREE_ACH=\"braintreeach\",t.BRAINTREE_ACCELERATED_CHECKOUT=\"braintreeacceleratedcheckout\",t.PAYPAL_COMMERCE=\"paypalcommerce\",t.PAYPAL_COMMERCE_ACCELERATED_CHECKOUT=\"paypalcommerceacceleratedcheckout\",t.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=\"paypalcommercealternativemethods\",t.PAYPAL_COMMERCE_CREDIT=\"paypalcommercecredit\",t.PAYPAL_COMMERCE_CREDIT_CARDS=\"paypalcommercecreditcards\",t.PAYPAL_COMMERCE_VENMO=\"paypalcommercevenmo\"},187(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(3491),i=n(4432);function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}function s(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if(\"object\"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=o(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==o(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,o=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToId\",value:function(e){var t=e.id;return e.method===r.MULTI_OPTION&&(t=e.gateway),function(e){switch(e){case i.BRAINTREE_PAYPAL:case i.BRAINTREE_PAYPAL_CREDIT:case i.BRAINTREE_VISACHECKOUT:case i.BRAINTREE_GOOGLEPAY:case i.BRAINTREE_ACH:case i.BRAINTREE_LOCAL_METHODS:case i.BRAINTREE_ACCELERATED_CHECKOUT:return!0;default:return!1}}(t)?i.BRAINTREE:function(e){switch(e){case i.PAYPAL_COMMERCE_CREDIT:case i.PAYPAL_COMMERCE_CREDIT_CARDS:case i.PAYPAL_COMMERCE_ACCELERATED_CHECKOUT:case i.PAYPAL_COMMERCE_ALTERNATIVE_METHODS:case i.PAYPAL_COMMERCE_VENMO:return!0;default:return!1}}(t)?i.PAYPAL_COMMERCE:function(e){switch(e){case i.BIGCOMMERCE_PAYMENTS:case i.BIGCOMMERCE_PAYMENTS_PAYLATER:case i.BIGCOMMERCE_PAYMENTS_CREDIT_CARDS:case i.BIGCOMMERCE_PAYMENTS_FASTLANE:case i.BIGCOMMERCE_PAYMENTS_APMS:case i.BIGCOMMERCE_PAYMENTS_VENMO:return!0;default:return!1}}(t)?i.BIGCOMMERCE_PAYMENTS:t}}])&&s(t.prototype,n),o&&s(t,o),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,o}()},3491(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PPSDK_CREDIT_CARD=t.MULTI_OPTION=t.CREDIT_CARD=void 0,t.CREDIT_CARD=\"credit-card\",t.MULTI_OPTION=\"multi-option\",t.PPSDK_CREDIT_CARD=\"card\"},8615(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=c(n(7542)),i=n(2157),o=c(n(2719)),s=c(n(4507)),a=c(n(2815));function c(e){return e&&e.__esModule?e:{default:e}}function u(e){return u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},u(e)}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,l(r.key),r)}}function l(e){var t=function(e){if(\"object\"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=u(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==u(t)?t:t+\"\"}t.default=function(){function e(t,n,r,i){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.urlHelper=t,this.requestSender=n,this.payloadMapper=r,this.ppsdkPayloadMapper=i}return t=e,c=[{key:\"create\",value:function(t){return new e(a.default.create(t),r.default.create(),o.default.create(),s.default.create())}}],(n=[{key:\"submitPayment\",value:function(e,t){var n=e.paymentMethod,r=void 0===n?{}:n;if(r.type!==i.API&&r.type!==i.SDK)throw new Error(\"\".concat(r.type,\" is not supported.\"));var o=r.type===i.SDK?this.ppsdkPayloadMapper.mapToPayload(e):this.payloadMapper.mapToPayload(e),s=r.type===i.SDK?this.urlHelper.getPpsdkPaymentUrl():this.urlHelper.getPaymentUrl(),a={headers:this.payloadMapper.mapToHeaders(e)};this.requestSender.postRequest(s,o,a,t)}}])&&d(t.prototype,n),c&&d(t,c),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,c}()},2157(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.SDK=t.OFFLINE=t.HOSTED=t.API=void 0,t.API=\"PAYMENT_TYPE_API\",t.HOSTED=\"PAYMENT_TYPE_HOSTED\",t.OFFLINE=\"PAYMENT_TYPE_OFFLINE\",t.SDK=\"PAYMENT_TYPE_SDK\"},4507(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916),i=n(3491);function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}function s(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if(\"object\"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=o(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==o(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,o=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToPayload\",value:function(e){var t=e.additionalAction,n=e.payment,o=void 0===n?{}:n,s=e.paymentMethod;return(0,r.omitNil)({instrument:{expires:{month:o.ccExpiry?(0,r.toNumber)(o.ccExpiry.month):null,year:o.ccExpiry?(0,r.toNumber)(o.ccExpiry.year):null},name:o.ccName,number:o.ccNumber,verification_value:o.ccCvv,type:i.PPSDK_CREDIT_CARD},form_nonce:o.hostedFormNonce,payment_method_id:s.id,human_verification:t?{id:\"recaptcha_v2_verification\",parameters:{token:t?t.data.human_verification_token:null}}:null})}},{key:\"mapToHeaders\",value:function(e){var t=e.authToken;return(0,r.omitNil)({Authorization:t})}}])&&s(t.prototype,n),o&&s(t,o),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,o}()},2815(e,t){\"use strict\";function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,i(r.key),r)}}function i(e){var t=function(e){if(\"object\"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=n(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==n(t)?t:t+\"\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0,t.default=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.config=t}return t=e,i=[{key:\"create\",value:function(t){return new e(t)}}],(n=[{key:\"host\",get:function(){return this.config.host}},{key:\"getOffsitePaymentUrl\",value:function(){return\"\".concat(this.host,\"/pay/initialize\")}},{key:\"getPaymentUrl\",value:function(){return\"\".concat(this.host,\"/api/public/v1/orders/payments\")}},{key:\"getPpsdkPaymentUrl\",value:function(){return\"\".concat(this.host,\"/payments\")}},{key:\"getGenerateClientTokenUrl\",value:function(){return\"\".concat(this.host,\"/api/v2/public/payments/client_tokens\")}}])&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},1517(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToCustomer\",value:function(e){var t=e.customer,n=void 0===t?{}:t,i=e.quoteMeta,o=void 0===i?{}:i;return(0,r.omitNil)({customer_group:n.customerGroupName?{name:n.customerGroupName}:null,geo_ip_country_code:o.request?o.request.geoCountryCode:null,id:n.customerId?(0,r.toString)(n.customerId):null,session_token:o.request?o.request.sessionHash:null})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},3805(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToOrder\",value:function(e){var t=e.order,n=void 0===t?{}:t;return(0,r.omitNil)({billing_address:this.mapToBillingAddress(e),coupons:this.mapToCoupons(e),currency:n.currency,id:n.orderId?(0,r.toString)(n.orderId):null,items:this.mapToItems(e),shipping:this.mapToShipping(e),shipping_address:this.mapToShippingAddress(e),token:n.token,totals:this.mapToOrderTotals(e)})}},{key:\"mapToBillingAddress\",value:function(e){var t=e.customer,n=void 0===t?{}:t,r=this.mapToAddress(e,\"billingAddress\");return n.email&&(r.email=n.email),r}},{key:\"mapToShipping\",value:function(e){var t=e.shippingOption||{},n=t.description,i=t.transitTime;return n?[(0,r.omitEmptyStringAndNil)({method:n,transit_time:i})]:[]}},{key:\"mapToCoupons\",value:function(e){var t=e.order,n=void 0===t?{}:t;return n.coupon&&n.coupon.coupons?n.coupon.coupons.map(function(e){return{code:e.code}}):[]}},{key:\"mapToShippingAddress\",value:function(e){return this.mapToAddress(e,\"shippingAddress\")}},{key:\"mapToAddress\",value:function(e,t){var n=e[t]||{};return(0,r.omitEmptyStringAndNil)({city:n.city,company:n.company,country_code:n.countryCode,country:n.country,first_name:n.firstName,last_name:n.lastName,phone:n.phone,state_code:n.provinceCode,state:n.province,street_1:n.addressLine1,street_2:n.addressLine2,zip:n.postCode})}},{key:\"mapToItems\",value:function(e){var t=e.cart;return(void 0===t?{items:[]}:t).items.map(function(e){return(0,r.omitNil)({code:e.id,variant_id:e.variantId,name:e.name,price:e.integerAmount,unit_price:e.integerUnitPrice,quantity:e.quantity,sku:e.sku})})}},{key:\"mapToOrderTotals\",value:function(e){var t=e.order,n=void 0===t?{}:t;return(0,r.omitNil)({grand_total:n.grandTotal?n.grandTotal.integerAmount:null,handling:n.handling?n.handling.integerAmount:null,shipping:n.shipping?n.shipping.integerAmount:null,subtotal:n.subtotal?n.subtotal.integerAmount:null,tax:n.taxTotal?n.taxTotal.integerAmount:null})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},2719(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916),i=c(n(1517)),o=c(n(3805)),s=c(n(3199)),a=c(n(2310));function c(e){return e&&e.__esModule?e:{default:e}}function u(e){return u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},u(e)}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,l(r.key),r)}}function l(e){var t=function(e){if(\"object\"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=u(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==u(t)?t:t+\"\"}t.default=function(){function e(t,n,r,i){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.customerMapper=t,this.orderMapper=n,this.paymentMapper=r,this.storeMapper=i}return t=e,c=[{key:\"create\",value:function(){return new e(i.default.create(),o.default.create(),s.default.create(),a.default.create())}}],(n=[{key:\"mapToPayload\",value:function(e){var t=e.order,n=void 0===t?{}:t,i=e.additionalAction;return(0,r.omitNil)({customer:this.customerMapper.mapToCustomer(e),notify_url:n.callbackUrl,order:this.orderMapper.mapToOrder(e),payment:this.paymentMapper.mapToPayment(e),store:this.storeMapper.mapToStore(e),additional_action:i})}},{key:\"mapToHeaders\",value:function(e){var t=e.authToken;return(0,r.omitNil)({Authorization:t})}}])&&d(t.prototype,n),c&&d(t,c),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,c}()},3199(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=s(n(4475)),i=n(5916),o=s(n(187));function s(e){return e&&e.__esModule?e:{default:e}}function a(e){return a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},a(e)}function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,u(r.key),r)}}function u(e){var t=function(e){if(\"object\"!=a(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=a(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==a(t)?t:t+\"\"}t.default=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.paymentMethodIdMapper=t}return t=e,s=[{key:\"create\",value:function(){return new e(o.default.create())}}],(n=[{key:\"mapToPayment\",value:function(e){var t=e.order,n=void 0===t?{}:t,o=e.orderMeta,s=void 0===o?{}:o,a=e.payment,c=void 0===a?{}:a,u=e.paymentMethod,d=void 0===u?{}:u,l={device_info:c.deviceSessionId?c.deviceSessionId:null,device:s.deviceFingerprint?{fingerprint_id:s.deviceFingerprint}:null,gateway:this.paymentMethodIdMapper.mapToId(d),notify_url:n.callbackUrl,return_url:d.returnUrl||(n.payment?n.payment.returnUrl:null),vault_payment_instrument:c.instrumentId?null:c.shouldSaveInstrument,set_as_default_stored_instrument:c.instrumentId||c.shouldSaveInstrument?c.shouldSetAsDefaultInstrument:null},h=d.method;h&&(0,r.default)(l,{method:h});var p=c.nonce||d.nonce;return c.formattedPayload?(0,r.default)(l,c.formattedPayload):c.instrumentId?(0,r.default)(l,{bigpay_token:this.mapToBigPayToken(e)}):p?(0,r.default)(l,{credit_card_token:{token:p}}):c.cryptogramId?(0,r.default)(l,{credit_card_cryptogram:this.mapToCryptogram(e)}):(0,r.default)(l,{credit_card:this.mapToCreditCard(e)}),c.browser_info&&(0,r.default)(l,{browser_info:c.browser_info}),(0,i.omitNil)(l)}},{key:\"mapToCreditCard\",value:function(e){var t=e.payment,n=void 0===t?{}:t;return(0,i.omitNil)({account_name:n.ccName,month:n.ccExpiry?(0,i.toNumber)(n.ccExpiry.month):null,number:n.ccNumber,verification_value:n.ccCvv,year:n.ccExpiry?(0,i.toNumber)(n.ccExpiry.year):null,customer_code:n.ccCustomerCode,three_d_secure:n.threeDSecure,hosted_form_nonce:n.hostedFormNonce})}},{key:\"mapToBigPayToken\",value:function(e){var t=e.payment;return(0,i.omitNil)({credit_card_number_confirmation:t.ccNumber,token:t.instrumentId,verification_value:t.ccCvv,verification_nonce:t.nonce,three_d_secure:t.threeDSecure,hosted_form_nonce:t.hostedFormNonce,token_type:t.tokenType})}},{key:\"mapToCryptogram\",value:function(e){var t=e.payment;return(0,i.omitNil)({payment_cryptogram:t.cryptogramId,eci:t.eci,xid:t.transactionId,month:t.ccExpiry?(0,i.toNumber)(t.ccExpiry.month):null,number:t.ccNumber,year:t.ccExpiry?(0,i.toNumber)(t.ccExpiry.year):null,account_mask:t.accountMask})}}])&&c(t.prototype,n),s&&c(t,s),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,s}()},2310(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToStore\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,r.omitNil)({hash:n.storeHash,id:n.storeId?(0,r.toString)(n.storeId):null,name:n.storeName})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},3538(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToCart\",value:function(e){var t=e.cart,n=void 0===t?{}:t;return(0,r.omitNil)({currency_code:n.currency,items:this.mapToItems(e),totals:this.mapToOrderTotals(e)})}},{key:\"mapToItems\",value:function(e){var t=this,n=e.cart;return(void 0===n?{items:[]}:n).items.map(function(e){return(0,r.omitNil)({discount_amount:e.integerDiscount,name:e.name,price:e.integerAmount,unit_price:e.integerUnitPrice,quantity:e.quantity,sku:e.sku,tax_amount:e.integerTax,amount:e.integerAmountAfterDiscount,type:t.mapToType(e)})})}},{key:\"mapToOrderTotals\",value:function(e){var t=e.cart,n=void 0===t?{}:t;return(0,r.omitNil)({discount_total:n.discount?n.discount.integerAmount:null,grand_total:n.grandTotal?n.grandTotal.integerAmount:null,shipping_total:n.shipping?n.shipping.integerAmount:null,subtotal:n.subtotal?n.subtotal.integerAmount:null,surcharge_total:n.handling?n.handling.integerAmount:null,tax_total:n.taxTotal?n.taxTotal.integerAmount:null})}},{key:\"mapToType\",value:function(e){return{ItemPhysicalEntity:\"physical\",ItemDigitalEntity:\"digital\",ItemGiftCertificateEntity:\"gift_card\"}[e.type]}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},3373(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916),i=c(n(3538)),o=c(n(2740)),s=c(n(1138)),a=c(n(5913));function c(e){return e&&e.__esModule?e:{default:e}}function u(e){return u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},u(e)}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,l(r.key),r)}}function l(e){var t=function(e){if(\"object\"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=u(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==u(t)?t:t+\"\"}t.default=function(){function e(t,n,r,i){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.cartMapper=t,this.gatewayMapper=n,this.quoteMapper=r,this.storeMapper=i}return t=e,c=[{key:\"create\",value:function(){return new e(i.default.create(),o.default.create(),s.default.create(),a.default.create())}}],(n=[{key:\"mapToClientToken\",value:function(e){return(0,r.omitNil)({cart:this.cartMapper.mapToCart(e),gateway:this.gatewayMapper.mapToGateway(e),quote:this.quoteMapper.mapToQuote(e),store:this.storeMapper.mapToStore(e)})}}])&&d(t.prototype,n),c&&d(t,c),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,c}()},2740(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r,i=n(5916),o=(r=n(187))&&r.__esModule?r:{default:r};function s(e){return s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s(e)}function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,c(r.key),r)}}function c(e){var t=function(e){if(\"object\"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=s(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==s(t)?t:t+\"\"}t.default=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.paymentMethodIdMapper=t}return function(e,t,n){return t&&a(e.prototype,t),n&&a(e,n),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(e,[{key:\"mapToGateway\",value:function(e){var t=e.paymentMethod,n=void 0===t?{}:t;return(0,i.omitNil)({name:this.paymentMethodIdMapper.mapToId(n)})}}],[{key:\"create\",value:function(){return new e(o.default.create())}}])}()},1138(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToQuote\",value:function(e){return(0,r.omitNil)({billing_address:this.mapToAddress(e,\"billingAddress\"),shipping_address:this.mapToAddress(e,\"shippingAddress\")})}},{key:\"mapToAddress\",value:function(e,t){var n=e.customer,i=void 0===n?{}:n,o=e[t]||{};return(0,r.omitNil)({address_line_1:o.addressLine1,address_line_2:o.addressLine2,city:o.city,company:o.company,country_code:o.countryCode,email:i.email,first_name:o.firstName,last_name:o.lastName,phone:o.phone,postal_code:o.postCode,state:o.province})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},5913(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=n(5916);function i(e){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,s(r.key),r)}}function s(e){var t=function(e){if(\"object\"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=i(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==i(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,i=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToStore\",value:function(e){return(0,r.omitNil)({locale:this.mapToLocale(e),store_identity:this.mapToIdentity(e),urls:this.mapToUrls(e)})}},{key:\"mapToLocale\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,r.omitNil)({country_code:n.countryCode,currency_code:n.currencyCode,language_code:n.storeLanguage})}},{key:\"mapToIdentity\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,r.omitNil)({id:n.storeId?(0,r.toNumber)(n.storeId):null,name:n.storeName})}},{key:\"mapToUrls\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,r.omitNil)({cart:n.cartLink,checkout:n.checkoutLink,confirmation:n.orderConfirmationLink,home:n.shopPath})}}])&&o(t.prototype,n),i&&o(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},4351(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var r=a(n(7542)),i=n(9726),o=a(n(6258)),s=n(3152);function a(e){return e&&e.__esModule?e:{default:e}}function c(e){return c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c(e)}function u(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,d(r.key),r)}}function d(e){var t=function(e){if(\"object\"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=c(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==c(t)?t:t+\"\"}t.default=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.urlHelper=t,this.requestSender=n}return t=e,a=[{key:\"create\",value:function(t){return new e(o.default.create(t),r.default.create())}}],(n=[{key:\"loadInstruments\",value:function(e,t){var n=this.urlHelper.getInstrumentsUrl(e.storeId,e.customerId,e.currencyCode),r={headers:(0,s.mapToHeaders)(e)};this.requestSender.sendRequest(n,null,r,t)}},{key:\"loadInstrumentsWithAddress\",value:function(e,t){var n=this.urlHelper.getTrustedShippingAddressUrl(e.storeId,e.customerId,e.currencyCode),r=(0,s.mapToTrustedShippingAddressPayload)(e),o={method:i.POST,headers:(0,s.mapToHeaders)(e)};this.requestSender.postRequest(n,r,o,t)}},{key:\"deleteShopperInstrument\",value:function(e,t){var n=this.urlHelper.getInstrumentByIdUrl(e.storeId,e.customerId,e.instrumentId,e.currencyCode),r={method:i.DELETE,headers:(0,s.mapToHeaders)(e)};this.requestSender.sendRequest(n,null,r,t)}}])&&u(t.prototype,n),a&&u(t,a),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,a}()},6258(e,t){\"use strict\";function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,i(r.key),r)}}function i(e){var t=function(e){if(\"object\"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,\"string\");if(\"object\"!=n(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==n(t)?t:t+\"\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0,t.default=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.config=t}return t=e,i=[{key:\"create\",value:function(t){return new e(t)}}],(n=[{key:\"host\",get:function(){if(!this.config||!this.config.host)throw new Error(\"Host URL unavailable or not supplied.\");return this.config.host}},{key:\"getInstrumentsUrl\",value:function(e,t,n){return\"\".concat(this.host,\"/api/v3/stores/\").concat(e,\"/shoppers/\").concat(t,\"/instruments?currency_code=\").concat(n)}},{key:\"getTrustedShippingAddressUrl\",value:function(e,t,n){return\"\".concat(this.host,\"/api/v3/stores/\").concat(e,\"/shoppers/\").concat(t,\"/instruments/trusted_shipping_address?currency_code=\").concat(n)}},{key:\"getInstrumentByIdUrl\",value:function(e,t,n,r){return\"\".concat(this.host,\"/api/v2/stores/\").concat(e,\"/shoppers/\").concat(t,\"/instruments/\").concat(n,\"?currency_code=\").concat(r)}}])&&r(t.prototype,n),i&&r(t,i),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,i}()},3152(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.mapToHeaders=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).authToken;return(0,r.omitNil)({Authorization:e})},t.mapToInstrumentPayload=function(){var e,t,n,o,s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=s.providerName,c=s.defaultInstrument,u=(0,r.omitNil)({name:a});return(0,r.omitNil)({provider:u,credit_card:(e=s,t=e.creditCard,n=void 0===t?{}:t,o=(0,r.omitNil)(n.threeDSecure),(0,r.omitNil)({cardholder_name:n.cardholderName,number:n.number,month:n.month,year:n.year,verification_code:n.verificationCode,issue_month:n.issueMonth,issue_year:n.issueYear,issue_number:n.issueNumber,track_data:n.trackData,is_manual_entry:n.isManualEntry,icc_data:n.iccData,fallback_reason:n.fallbackReason,is_contactless:n.isContactless,encrypted_pin_cryptogram:n.encryptedPinCryptogram,encrypted_pin_ksn:n.encryptedPinKsn,three_d_secure:o})),billing_address:i(s.billingAddress),default_instrument:c})},t.mapToTrustedShippingAddressPayload=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Array.isArray(e.shippingAddress)?(0,r.omitNil)({shipping_addresses:e.shippingAddress.map(function(e){return i(e)})}):(0,r.omitNil)({shipping_address:i(e.shippingAddress)})};var r=n(5916);function i(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=(e=n.provinceCode,t=n.province,(0,r.omitNil)({code:e,name:t}));return(0,r.omitNil)({address_line_1:n.addressLine1,address_line_2:n.addressLine2,city:n.city,company:n.company,country_code:n.countryCode,email:n.email,first_name:n.firstName,last_name:n.lastName,phone:n.phone,postal_code:n.postCode,state:i})}},1953(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(9440),i=n(540);t.default=function(e,t){var n=(t||{}).equalityCheck,o=void 0===n?i:n;return function(t,n){return Object.keys(e).reduce(function(i,s){var a,c=e[s],u=t?t[s]:void 0,d=c(u,n);return o(u,d)&&i?i:r.assign({},i,((a={})[s]=d,a))},t||{})}}},3050(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1635),i=n(9440),o=n(540);t.default=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e,s={};\"object\"==typeof e[e.length-1]&&(n=e.slice(0,-1),s=r.__assign({},s,e[e.length-1]));var a=s.equalityCheck,c=void 0===a?o:a;return function(e,t){var r=i.flowRight(n.map(function(e){return i.curryRight(e,2)(t)}))(e);return c(e,r)?e:r}}},7963(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1635),i=n(9440);t.default=function(e,t,n){if(\"string\"!=typeof e||\"\"===e)throw new Error(\"`type` must be a string\");return r.__assign({type:e},i.omitBy({payload:t,meta:n},function(e){return void 0===e}))}},7821(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1953),i=n(76);t.default=function(e,t,n){return\"function\"==typeof e?new i.default(e,t,n):new i.default(r.default(e,{equalityCheck:n&&n.equalityCheck}),t,n)}},6142(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1635),i=n(7963);t.default=function(e,t,n){return r.__assign({},i.default(e,t,n),{error:!0})}},76(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1635),i=n(9440),o=n(7554),s=n(8072),a=n(540),c=n(8820),u=n(6019),d=n(1429),l=n(1058),h=function(){function e(e,t,n){void 0===t&&(t={});var i=this;this._reducer=e,this._options=r.__assign({actionTransformer:d.default,equalityCheck:a,shouldWarnMutation:!0,stateTransformer:l.default},n),this._state$=new o.BehaviorSubject(this._options.stateTransformer(t)),this._notification$=new o.Subject,this._dispatchers={},this._dispatchQueue$=new o.Subject,this._errors={},this._dispatchQueue$.pipe(s.mergeMap(function(e){return e.pipe(s.concatMap(function(e){return e}))}),s.filter(function(e){return!!e.type}),s.scan(function(e,t){return i._transformStates(e,t)},{state:t,transformedState:this._state$.getValue()}),s.distinctUntilChanged(function(e,t){var n=e.state,r=t.state;return i._options.equalityCheck(n,r)}),s.map(function(e){return e.transformedState})).subscribe(this._state$),this.dispatch({type:\"INIT\"})}return e.prototype.dispatch=function(e,t){return u.default(e)?this._dispatchObservableAction(e,t):\"function\"==typeof e?this._dispatchThunkAction(e,t):this._dispatchAction(e)},e.prototype.getState=function(){return this._state$.getValue()},e.prototype.notifyState=function(){this._notification$.next(this.getState())},e.prototype.subscribe=function(e){for(var t=this,n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];var i=\"object\"==typeof n[0]?n[0]:void 0,o=i?i.filters||[]:n,a=this._state$;o.length>0&&(a=a.pipe(s.distinctUntilChanged(function(e,n){return o.every(function(r){return t._options.equalityCheck(r(e),r(n))})}))),i&&!1===i.initial&&(a=a.pipe(s.skip(1)));var c=[a.subscribe(e),this._notification$.subscribe(e)];return function(){return c.forEach(function(e){return e.unsubscribe()})}},e.prototype._transformStates=function(e,t){try{var n=!1===this._options.shouldWarnMutation?this._reducer(e.state,t):c.default(this._reducer(e.state,t),{equalityCheck:this._options.equalityCheck,previousValue:e.state});return{state:n,transformedState:this._options.stateTransformer(n)}}catch(n){return this._getDispatchError(t.meta&&t.meta.queueId).next(n),{state:e.state,transformedState:e.transformedState}}},e.prototype._dispatchAction=function(e){return this._dispatchObservableAction(e.error?o.throwError(e):o.of(e))},e.prototype._dispatchObservableAction=function(e,t){var n=this;return void 0===t&&(t={}),new Promise(function(r,a){var c=n._getDispatchError(t.queueId),u=n._options.actionTransformer(o.from(e).pipe(s.map(function(e){return t.queueId?i.merge({},e,{meta:{queueId:t.queueId}}):e})));n._getDispatcher(t.queueId).next(o.from(u).pipe(s.map(function(e,t){return 0===t&&c.pipe(s.first()).subscribe(a),e.error&&a(e.payload),e}),s.catchError(function(e){return a(e instanceof Error?e:e.payload),o.of(e)}),s.tap({complete:function(){r(n.getState())}})))})},e.prototype._dispatchThunkAction=function(e,t){var n=this;return void 0===t&&(t={}),this._dispatchObservableAction(o.defer(function(){return e(n)}),t)},e.prototype._getDispatcher=function(e){return void 0===e&&(e=\"default\"),this._dispatchers[e]||(this._dispatchers[e]=new o.Subject,this._dispatchQueue$.next(this._dispatchers[e])),this._dispatchers[e]},e.prototype._getDispatchError=function(e){return void 0===e&&(e=\"default\"),this._errors[e]||(this._errors[e]=new o.Subject),this._errors[e]},e}();t.default=h},8820(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(9440),i=n(540);t.default=function e(t,n){try{var o=n||{},s=o.equalityCheck,a=void 0===s?i:s,c=o.previousValue,u=void 0===c?null:c;return a(t,u)&&Object.isFrozen(u)?u:Object.isFrozen(t)||!Array.isArray(t)&&!r.isPlainObject(t)?t:Array.isArray(t)?Object.freeze(t.map(function(t,n){return e(t,{equalityCheck:a,previousValue:Array.isArray(u)?u[n]:void 0})})):Object.freeze(Object.getOwnPropertyNames(t).reduce(function(n,r){return n[r]=e(t[r],{equalityCheck:a,previousValue:u&&u.hasOwnProperty(r)?u[r]:void 0}),n},{}))}catch(e){if(e instanceof TypeError)return t;throw e}}},9526(e,t,n){\"use strict\";n(76).default;var r=n(1953);t.HY=r.default;var i=n(3050);t.om=i.default;var o=n(7963);t.VP=o.default;var s=n(7821);t.iN=s.default;var a=n(6142);t.fQ=a.default;var c=n(8820);t.ol=c.default},6019(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return\"function\"==typeof e.subscribe||\"function\"==typeof e.then}},1429(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return e}},1058(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return e}},9165(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){var t=new r.default;return new i.default(t,e)};var r=n(9828),i=n(5470)},9828(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.build=function(e,t,n){var r=this,i=document.createElement(\"form\");return i.style.display=\"none\",i.setAttribute(\"action\",e),i.setAttribute(\"method\",\"POST\"),i.setAttribute(\"target\",n||\"_top\"),Object.keys(t).forEach(function(e){var n=t[e];i.appendChild(r._createInput(n,e))}),i},e.prototype._createInput=function(e,t){var n=document.createElement(\"input\");return n.setAttribute(\"name\",t),n.setAttribute(\"type\",\"hidden\"),n.setAttribute(\"value\",e),n},e}();t.default=n},5470(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(9783),i=function(){function e(e,t){this._formBuilder=e,this._options=t}return e.prototype.postForm=function(e,t,n,r){var i=this._formBuilder.build(this._prependHost(e),t,r);window.addEventListener(\"unload\",function e(){window.removeEventListener(\"unload\",e),n&&n()}),document.body.appendChild(i),i.submit()},e.prototype._prependHost=function(e){return this._options&&this._options.host&&!(0,r.isAbsoluteUrl)(e)?(0,r.joinPaths)(this._options.host,e):e},e}();t.default=i},8686(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.FormPoster=t.createFormPoster=void 0;var r=n(9165);Object.defineProperty(t,\"createFormPoster\",{enumerable:!0,get:function(){return r.default}});var i=n(5470);Object.defineProperty(t,\"FormPoster\",{enumerable:!0,get:function(){return i.default}})},9783(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isAbsoluteUrl=function(e){return/^https?:\\/\\//.test(e)},t.joinPaths=function(e,t){return\"\".concat((n=e,n.replace(/\\/$/,\"\")),\"/\").concat(function(e){return e.replace(/^\\//,\"\")}(t));var n}},2356(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isTerminalCacheKeyMap=function(e){return e.hasOwnProperty(\"cacheKey\")},t.isRootCacheKeyMap=function(e){return e.hasOwnProperty(\"parentMap\")}},3909(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(1635),i=n(9440),o=r.__importDefault(n(540)),s=n(2356),a=function(){function e(e){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=r.__assign({isEqual:o.default,maxSize:0,onExpire:i.noop},e)}return e.prototype.getKey=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=this._resolveMap.apply(this,e),r=n.index,i=n.parentMap,o=n.map;return o&&o.cacheKey?o.usedCount++:o=this._generateMap(i,e.slice(r)),this._removeLeastUsedMap(o),o.cacheKey},e.prototype.getUsedCount=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=this._resolveMap.apply(this,e).map;return n?n.usedCount:0},e.prototype._resolveMap=function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var r=0,i=this._map;i.maps.length;){for(var o=!1,a=0;a<i.maps.length;a++){var c=i.maps[a];if(this._options.isEqual(c.value,t[r])){if((e=i.maps).unshift.apply(e,i.maps.splice(a,1)),(0===t.length||r===t.length-1)&&(0,s.isTerminalCacheKeyMap)(c))return{index:r,map:c,parentMap:i};o=!0,i=c,r++;break}}if(!o)break}return{index:r,parentMap:i}},e.prototype._generateMap=function(e,t){var n,r=0,i=e;do{n={maps:[],parentMap:i,usedCount:1,value:t[r]},i.maps.unshift(n),i=n,r++}while(r<t.length);var o=n;return o.cacheKey=\"\".concat(++this._lastId),o},e.prototype._removeLeastUsedMap=function(e){if(this._options.maxSize){var t=this._usedMaps.indexOf(e);if(this._usedMaps.splice(-1===t?0:t,-1===t?0:1,e),!(this._usedMaps.length<=this._options.maxSize)){var n=this._usedMaps.pop();n&&(this._removeMap(n),this._options.onExpire(n.cacheKey))}}},e.prototype._removeMap=function(e){e.parentMap&&(e.parentMap.maps.splice(e.parentMap.maps.indexOf(e),1),(0,s.isRootCacheKeyMap)(e.parentMap)||this._removeMap(e.parentMap))},e}();t.default=a},4218(e,t,n){\"use strict\";t.B4=t.Bj=void 0;var r=n(1635),i=n(8158);Object.defineProperty(t,\"Bj\",{enumerable:!0,get:function(){return r.__importDefault(i).default}}),Object.defineProperty(t,\"B4\",{enumerable:!0,get:function(){return i.memoizeOne}})},8158(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=a,t.memoizeOne=function(e,t){return a(e,r.__assign(r.__assign({},t),{maxSize:1}))};var r=n(1635),i=r.__importDefault(n(9655)),o=r.__importDefault(n(540)),s=r.__importDefault(n(3909));function a(e,t){var n=r.__assign({maxSize:0,isEqual:o.default},t),a=n.maxSize,c=n.isEqual,u=new Map,d=new s.default({isEqual:c,maxSize:a,onExpire:function(e){return u.delete(e)}}),l=(0,i.default)(e,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return d.getKey.apply(d,e)});return l.cache=u,l}},1077(e,t,n){\"use strict\";n.r(t),n.d(t,{RequestSender:()=>f,Timeout:()=>p,createRequestSender:()=>m,createTimeout:()=>y});var r=n(168),i=n(1635),o=/application\\/(\\w+\\+)?json/,s=/application\\/x-www-form-urlencoded/;const a=function(){function e(){}return e.prototype.toRequestBody=function(e){var t,n=e.headers?this._getHeader(e.headers,\"Content-Type\"):\"\";if(e.body){if(o.test(n))return JSON.stringify(e.body);if(s.test(n))return\"object\"!=typeof(t=e.body)||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var n=t[e];return\"string\"==typeof n?\"\".concat(e,\"=\").concat(encodeURIComponent(n)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}return e.body},e.prototype.toResponse=function(e){var t=this._parseResponseHeaders(e.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in e?e.response:e.responseText,t),headers:t,status:e.status,statusText:e.statusText}},e.prototype._parseResponseBody=function(e,t){var n=this._getHeader(t,\"Content-Type\");return e&&o.test(n)?JSON.parse(e):e},e.prototype._parseResponseHeaders=function(e){return(e?e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(e,t){var n,r=t.split(\":\"),o=(r.shift()||\"\").trim();return o?(0,i.__assign)((0,i.__assign)({},e),((n={})[o.toLowerCase()]=r.join(\":\").trim(),n)):e},{})},e.prototype._getHeader=function(e,t){return e&&t&&(e[t]||e[t.toLowerCase()])||\"\"},e}();var c=n(5889);const u=function(){function e(){}return e.prototype.createRequest=function(e,t){var n=new XMLHttpRequest;return this._configureRequest(n,e,t),n},e.prototype._configureRequest=function(e,t,n){void 0===n&&(n={}),e.open(n.method||\"GET\",this._formatUrl(t,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(e,n.headers),\"boolean\"==typeof n.credentials&&(e.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(e.timeout=n.timeout)},e.prototype._configureRequestHeaders=function(e,t){Object.keys(t).filter(function(e){return null!==t[e]}).forEach(function(n){e.setRequestHeader(n,t[n])})},e.prototype._formatUrl=function(e,t,n){return void 0===n&&(n=!0),t&&0!==Object.keys(t).length?\"\".concat(e,\"?\").concat(c.stringify(t,{encode:n})):e},e}();var d=n(35),l=n.n(d),h=function(){function e(){this._cache={}}return e.prototype.read=function(e,t){var n=this.getKey(e,t.params);return this._cache[n]||null},e.prototype.write=function(e,t,n){var r=this.getKey(e,t.params);this._cache[r]=n},e.prototype.getKey=function(e,t){return void 0===t&&(t={}),0===Object.keys(t).length?e:\"\".concat(e,\"?\").concat(c.stringify(t))},e}();const p=function(){function e(e){var t=this;this._delay=e,this._promise=new Promise(function(e){t._resolve=e})}return e.prototype.onComplete=function(e){this._promise.then(e)},e.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},e.prototype.start=function(){var e=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return e.complete()},this._delay))},e}(),f=function(){function e(e,t,n,r){void 0===r&&(r={}),this._requestFactory=e,this._payloadTransformer=t,this._cookie=n,this._options=r,this._cache=this._options.cache||new h}return e.prototype.sendRequest=function(e,t){var n=this,r=this._mergeDefaultOptions(e,t),i=this._getCachedRequest(e,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(e),r);return new Promise(function(t,i){var s,a=function(){var s=n._payloadTransformer.toResponse(o);s.status>=200&&s.status<300?(n._cacheRequest(e,r,s),t(s)):i(s)};o.onload=a,o.onerror=a,o.onabort=a,o.ontimeout=a,r.timeout instanceof p&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),!(s=r.timeout)||\"object\"!=typeof s&&\"function\"!=typeof s||\"function\"!=typeof s.then||r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},e.prototype.get=function(e,t){return this.sendRequest(e,(0,i.__assign)((0,i.__assign)({},t),{method:\"GET\"}))},e.prototype.post=function(e,t){return this.sendRequest(e,(0,i.__assign)((0,i.__assign)({},t),{method:\"POST\"}))},e.prototype.put=function(e,t){return this.sendRequest(e,(0,i.__assign)((0,i.__assign)({},t),{method:\"PUT\"}))},e.prototype.patch=function(e,t){return this.sendRequest(e,(0,i.__assign)((0,i.__assign)({},t),{method:\"PATCH\"}))},e.prototype.delete=function(e,t){return this.sendRequest(e,(0,i.__assign)((0,i.__assign)({},t),{method:\"DELETE\"}))},e.prototype._mergeDefaultOptions=function(e,t){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(e,t)&&this._isLocalRequest(e)&&(n.headers[\"X-XSRF-TOKEN\"]=r),t&&t.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),l()({},n,t)},e.prototype._prependHost=function(e){return!this._options.host||/^https?:\\/\\//.test(e)?e:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(e.replace(/^\\//,\"\"))},e.prototype._shouldCacheRequest=function(e){return\"GET\"===(e.method||\"GET\").toUpperCase()&&Boolean(e.cache)},e.prototype._getCachedRequest=function(e,t){return this._shouldCacheRequest(t)?this._cache.read(e,t):null},e.prototype._cacheRequest=function(e,t,n){this._shouldCacheRequest(t)&&this._cache.write(e,t,n)},e.prototype._isAssetRequest=function(e,t){return(!t||!t.method||\"GET\"===t.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(e.split(\"?\")[0])},e.prototype._isLocalRequest=function(e){return!!e.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!e.match(new RegExp(\"^(https?:)?//\"))},e}();function m(e){return new f(new u,new a,r,e)}function y(e){return new p(e)}},5889(e,t,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),s=n(3814);function a(e){if(\"string\"!=typeof e||1!==e.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}function u(e,t){return t.decode?i(e):e}function d(e){return Array.isArray(e)?e.sort():\"object\"==typeof e?d(Object.keys(e)).sort((e,t)=>Number(e)-Number(t)).map(t=>e[t]):e}function l(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function h(e){const t=(e=l(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function p(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&\"string\"==typeof e&&\"\"!==e.trim()?e=Number(e):!t.parseBooleans||null===e||\"true\"!==e.toLowerCase()&&\"false\"!==e.toLowerCase()||(e=\"true\"===e.toLowerCase()),e}function f(e,t){a((t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,n,r)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case\"bracket\":return(e,n,r)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case\"comma\":case\"separator\":return(t,n,r)=>{const i=\"string\"==typeof n&&n.includes(e.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&u(n,e).includes(e.arrayFormatSeparator);n=o?u(n,e):n;const s=i||o?n.split(e.arrayFormatSeparator).map(t=>u(t,e)):null===n?n:u(n,e);r[t]=s};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),r=Object.create(null);if(\"string\"!=typeof e)return r;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return r;for(const i of e.split(\"&\")){if(\"\"===i)continue;let[e,s]=o(t.decode?i.replace(/\\+/g,\" \"):i,\"=\");s=void 0===s?null:[\"comma\",\"separator\"].includes(t.arrayFormat)?s:u(s,t),n(u(e,t),s,r)}for(const e of Object.keys(r)){const n=r[e];if(\"object\"==typeof n&&null!==n)for(const e of Object.keys(n))n[e]=p(n[e],t);else r[e]=p(n,t)}return!1===t.sort?r:(!0===t.sort?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((e,t)=>{const n=r[t];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?e[t]=d(n):e[t]=n,e},Object.create(null))}t.extract=h,t.parse=f,t.stringify=(e,t)=>{if(!e)return\"\";a((t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},t)).arrayFormatSeparator);const n=n=>t.skipNull&&null==e[n]||t.skipEmptyString&&\"\"===e[n],r=function(e){switch(e.arrayFormat){case\"index\":return t=>(n,r)=>{const i=n.length;return void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(t,e),\"[\",i,\"]\"].join(\"\")]:[...n,[c(t,e),\"[\",c(i,e),\"]=\",c(r,e)].join(\"\")]};case\"bracket\":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(t,e),\"[]\"].join(\"\")]:[...n,[c(t,e),\"[]=\",c(r,e)].join(\"\")];case\"comma\":case\"separator\":return t=>(n,r)=>null==r||0===r.length?n:0===n.length?[[c(t,e),\"=\",c(r,e)].join(\"\")]:[[n,c(r,e)].join(e.arrayFormatSeparator)];default:return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,c(t,e)]:[...n,[c(t,e),\"=\",c(r,e)].join(\"\")]}}(t),i={};for(const t of Object.keys(e))n(t)||(i[t]=e[t]);const o=Object.keys(i);return!1!==t.sort&&o.sort(t.sort),o.map(n=>{const i=e[n];return void 0===i?\"\":null===i?c(n,t):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):c(n,t)+\"=\"+c(i,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,r]=o(e,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:f(h(e),t)},t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:u(r,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=l(e.url).split(\"?\")[0]||\"\",i=t.extract(e.url),o=t.parse(i,{sort:!1}),s=Object.assign(o,e.query);let a=t.stringify(s,n);a&&(a=`?${a}`);let u=function(e){let t=\"\";const n=e.indexOf(\"#\");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(u=`#${c(e.fragmentIdentifier,n)}`),`${r}${a}${u}`},t.pick=(e,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:a}=t.parseUrl(e,r);return t.stringifyUrl({url:i,query:s(o,n),fragmentIdentifier:a},r)},t.exclude=(e,n,r)=>{const i=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,i,r)}},5477(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.canSupportRel=function(e){var t=document.createElement(\"link\");return!!(t.relList&&t.relList.supports&&t.relList.supports(e))},e}();t.default=n},471(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(1077),i=n(5477),o=n(4886)},9722(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(1077),i=n(5477),o=n(7995)},5895(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(e,t,n){\"use strict\";t.vQ=t.Hb=void 0;n(4886);var r=n(471);Object.defineProperty(t,\"Hb\",{enumerable:!0,get:function(){return r.default}});var i=n(5895);Object.defineProperty(t,\"vQ\",{enumerable:!0,get:function(){return i.default}});n(7995),n(9722),n(282)},4886(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._scripts={},this._preloadedScripts={}}return e.prototype.loadScript=function(e,t){var n=this;return this._scripts[e]||(this._scripts[e]=new Promise(function(r,i){var o=document.createElement(\"script\"),s=t||{},a=s.async,c=void 0!==a&&a,u=s.attributes,d=void 0===u?{}:u;Object.keys(d).forEach(function(e){o.setAttribute(e,d[e])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(t){delete n._scripts[e],i(t)},o.async=c,o.src=e,document.body.appendChild(o)})),this._scripts[e]},e.prototype.loadScripts=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.loadScript(e,t)})).then(function(){})},e.prototype.preloadScript=function(e,t){var n=this;return this._preloadedScripts[e]||(this._preloadedScripts[e]=new Promise(function(r,i){var o=(t||{}).prefetch,s=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(s)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=s,a.href=e,a.onload=function(){r()},a.onerror=function(){delete n._preloadedScripts[e],i()},document.head.appendChild(a)}else n._requestSender.get(e,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[e]},e.prototype.preloadScripts=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.preloadScript(e,t)})).then(function(){})},e}();t.default=n},7995(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._stylesheets={},this._preloadedStylesheets={}}return e.prototype.loadStylesheet=function(e,t){var n=this;return this._stylesheets[e]||(this._stylesheets[e]=new Promise(function(r,i){var o=document.createElement(\"link\"),s=t||{},a=s.prepend,c=void 0!==a&&a,u=s.attributes,d=void 0===u?{}:u;Object.keys(d).forEach(function(e){o.setAttribute(e,d[e])}),o.onload=function(){return r()},o.onerror=function(t){delete n._stylesheets[e],i(t)},o.rel=\"stylesheet\",o.href=e,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[e]},e.prototype.loadStylesheets=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.loadStylesheet(e,t)})).then(function(){})},e.prototype.preloadStylesheet=function(e,t){var n=this;return this._preloadedStylesheets[e]||(this._preloadedStylesheets[e]=new Promise(function(r,i){var o=(t||{}).prefetch,s=void 0!==o&&o,a=s?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=s?\"prefetch\":\"preload\",c.href=e,c.onload=function(){r()},c.onerror=function(t){delete n._preloadedStylesheets[e],i(t)},document.head.appendChild(c)}else n._requestSender.get(e,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[e]},e.prototype.preloadStylesheets=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.preloadStylesheet(e,t)})).then(function(){})},e}();t.default=n},6472(e,t,n){\"use strict\";t.Jt=void 0,n(8914),n(9690),n(3255),n(523),n(7571),n(2100),n(3302),n(1045),n(5160),n(9356),n(9225),n(72),n(236),n(3069),n(441),n(7520),n(3686),n(648),n(1439),n(4651),n(9014),n(3761),n(9060),n(5886);var r=n(9262);t.Jt=r,n(8990)},5886(e,t,n){\"use strict\";var r=n(8914),i=n(9690),o=n(72);e.exports=function(){return r()||i()||o()}},8914(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/Android/i.test(e)}},9690(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/CrOS/i.test(e)}},3255(e,t,n){\"use strict\";var r=n(5160),i=n(3761),o=n(523),s=n(9014),a=n(9060);e.exports=function(e){return!(-1===(e=e||window.navigator.userAgent).indexOf(\"Chrome\")&&-1===e.indexOf(\"CriOS\")||r(e)||i(e)||o(e)||s(e)||a(e))}},523(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"DuckDuckGo/\")}},5160(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"Edge/\")||-1!==e.indexOf(\"Edg/\")}},9356(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/Firefox/i.test(e)}},7571(e,t,n){\"use strict\";var r=n(1045);e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"MSIE\")||r(e)}},3302(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"MSIE 10\")}},1045(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"Trident/7\")}},2100(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"MSIE 9\")}},236(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/FxiOS/i.test(e)}},3069(e,t,n){\"use strict\";var r=n(72);e.exports=function(e){return e=e||window.navigator.userAgent,r(e)&&function(e){return/\\bGSA\\b/.test(e)}(e)}},441(e,t,n){\"use strict\";var r=n(72),i=n(236),o=/webkit/i;e.exports=function(e){return e=e||window.navigator.userAgent,r(e)&&function(e){return o.test(e)}(e)&&!function(e){return e.indexOf(\"CriOS\")>-1}(e)&&!i(e)&&!function(e){return e.indexOf(\"FBAN\")>-1}(e)}},7520(e,t,n){\"use strict\";var r=n(3686);e.exports=function(e,t){return t=void 0!==t?t:window.statusbar.visible,r(e)&&!t}},3686(e,t,n){\"use strict\";var r=n(72),i=n(3069);e.exports=function(e){return e=e||window.navigator.userAgent,!!r(e)&&(!!i(e)||/.+AppleWebKit(?!.*Safari)/i.test(e))}},648(e,t,n){\"use strict\";var r=n(3686);e.exports=function(e,t){return t=void 0!==t?t:window.statusbar.visible,r(e)&&t}},72(e,t,n){\"use strict\";var r=n(1439);e.exports=function(e,t,n){void 0===t&&(t=!0),e=e||window.navigator.userAgent;var i=/iPhone|iPod|iPad/i.test(e);return t?i||r(e,n):i}},1439(e){\"use strict\";e.exports=function(e,t){return e=e||window.navigator.userAgent,t=t||window.document,/Mac|iPad/i.test(e)&&\"ontouchend\"in t}},4651(e,t,n){\"use strict\";var r=n(236),i=n(9356);e.exports=function(e){return e=e||window.navigator.userAgent,r(e)||/iPhone|iPod|iPad|Mobile|Tablet/i.test(e)&&i(e)}},9014(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"OPR/\")||-1!==e.indexOf(\"Opera/\")||-1!==e.indexOf(\"OPT/\")}},9225(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/^Mozilla\\/5\\.0.*Safari\\//.test(e)&&!/(iPhone|iPad|iPod|Android|SM-)/i.test(e)&&!/Chrome|CriOS|FxiOS|OPiOS|mercury/i.test(e)}},3761(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/SamsungBrowser/i.test(e)}},9060(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"Silk/\")}},8990(e,t,n){\"use strict\";var r=n(3255);e.exports=function(e){return e=e||window.navigator.userAgent,!!window.PaymentRequest&&(!r(e)||function(e){var t=e.match(/Chrome\\/(\\d+)\\./);return!!t&&parseInt(t[1],10)>=61}(e))}},9262(e,t,n){\"use strict\";var r=n(8914),i=n(236),o=n(3686),s=n(3255),a=n(3761),c=n(523);function u(e){return(e=e||window.navigator.userAgent).indexOf(\"Opera Mini\")>-1}e.exports=function(e){return e=e||window.navigator.userAgent,!(o(e)||i(e)||function(e){return e=e||window.navigator.userAgent,!!r(e)&&/Version\\/[\\d.]+/i.test(e)&&!u(e)&&!c(e)}(e)||u(e)||function(e){var t=(e=e||window.navigator.userAgent).match(/CriOS\\/(\\d+)\\./);return!!t&&parseInt(t[1],10)<48}(e)||function(e){return!s(e)&&!a(e)&&/samsung/i.test(e)}(e))}},2437(e,t,n){\"use strict\";e.exports={number:n(36),expirationDate:n(1644),expirationMonth:n(188),expirationYear:n(7209),cvv:n(3221),postalCode:n(583),creditCardType:n(2921)}},36(e,t,n){\"use strict\";var r=n(1653),i=n(2921);function o(e,t,n){return{card:e,isPotentiallyValid:t,isValid:n}}e.exports=function(e,t){var n,s,a,c,u;if(t=t||{},\"number\"==typeof e&&(e=String(e)),\"string\"!=typeof e)return o(null,!1,!1);if(e=e.replace(/\\-|\\s/g,\"\"),!/^\\d*$/.test(e))return o(null,!1,!1);if(0===(n=i(e)).length)return o(null,!1,!1);if(1!==n.length)return o(null,!0,!1);if(s=n[0],t.maxLength&&e.length>t.maxLength)return o(s,!1,!1);for(a=s.type===i.types.UNIONPAY&&!0!==t.luhnValidateUnionPay||r(e),u=Math.max.apply(null,s.lengths),t.maxLength&&(u=Math.min(t.maxLength,u)),c=0;c<s.lengths.length;c++)if(s.lengths[c]===e.length)return o(s,e.length<u||a,a);return o(s,e.length<u,!1)}},3221(e){\"use strict\";function t(e,t){return{isValid:e,isPotentiallyValid:t}}e.exports=function(e,n){return n=(n=n||3)instanceof Array?n:[n],\"string\"!=typeof e?t(!1,!1):/^\\d*$/.test(e)?function(e,t){for(var n=0;n<e.length;n++)if(t===e[n])return!0;return!1}(n,e.length)?t(!0,!0):e.length<Math.min.apply(null,n)?t(!1,!0):e.length>function(e){for(var t=3,n=0;n<e.length;n++)t=e[n]>t?e[n]:t;return t}(n)?t(!1,!1):t(!0,!0):t(!1,!1)}},1644(e,t,n){\"use strict\";var r=n(9376),i=n(188),o=n(7209);function s(e,t,n,r){return{isValid:e,isPotentiallyValid:t,month:n,year:r}}e.exports=function(e,t){var n,a,c,u;if(\"string\"==typeof e)e=e.replace(/^(\\d\\d) (\\d\\d(\\d\\d)?)$/,\"$1/$2\"),n=r(e);else{if(null===e||\"object\"!=typeof e)return s(!1,!1,null,null);n={month:String(e.month),year:String(e.year)}}if(a=i(n.month),c=o(n.year,t),a.isValid){if(c.isCurrentYear)return s(u=a.isValidForThisYear,u,n.month,n.year);if(c.isValid)return s(!0,!0,n.month,n.year)}return a.isPotentiallyValid&&c.isPotentiallyValid?s(!1,!0,null,null):s(!1,!1,null,null)}},188(e){\"use strict\";function t(e,t,n){return{isValid:e,isPotentiallyValid:t,isValidForThisYear:n||!1}}e.exports=function(e){var n,r,i=(new Date).getMonth()+1;return\"string\"!=typeof e?t(!1,!1):\"\"===e.replace(/\\s/g,\"\")||\"0\"===e?t(!1,!0):/^\\d*$/.test(e)?(n=parseInt(e,10),isNaN(e)?t(!1,!1):t(r=n>0&&n<13,r,r&&n>=i)):t(!1,!1)}},7209(e){\"use strict\";function t(e,t,n){return{isValid:e,isPotentiallyValid:t,isCurrentYear:n||!1}}e.exports=function(e,n){var r,i,o,s,a;return n=n||19,\"string\"!=typeof e?t(!1,!1):\"\"===e.replace(/\\s/g,\"\")?t(!1,!0):/^\\d*$/.test(e)?(i=e.length)<2?t(!1,!0):(r=(new Date).getFullYear(),3===i?t(!1,e.slice(0,2)===String(r).slice(0,2)):i>4?t(!1,!1):(e=parseInt(e,10),o=Number(String(r).substr(2,2)),2===i?(a=o===e,s=e>=o&&e<=o+n):4===i&&(a=r===e,s=e>=r&&e<=r+n),t(s,s,a))):t(!1,!1)}},2278(e){\"use strict\";e.exports=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)}},1653(e){\"use strict\";e.exports=function(e){for(var t,n=0,r=!1,i=e.length-1;i>=0;)t=parseInt(e.charAt(i),10),r&&(t*=2)>9&&(t=t%10+1),r=!r,n+=t,i--;return n%10==0}},9376(e,t,n){\"use strict\";var r=n(7209),i=n(2278);e.exports=function(e){var t,n,o,s,a;return/^\\d{4}-\\d{1,2}$/.test(e)?e=e.split(\"-\").reverse():/\\//.test(e)?e=e.split(/\\s*\\/\\s*/g):/\\s/.test(e)&&(e=e.split(/ +/g)),i(e)?{month:e[0]||\"\",year:e.slice(1).join()}:(o=e,n=0===(a=Number(o[0]))?2:a>1||1===a&&Number(o[1])>2?1:1===a?(s=o.substr(1),r(s).isPotentiallyValid?1:2):5===o.length?1:o.length>5?2:1,{month:t=e.substr(0,n),year:e.substr(t.length)})}},583(e){\"use strict\";function t(e,t){return{isValid:e,isPotentiallyValid:t}}e.exports=function(e,n){var r;return r=(n=n||{}).minLength||3,\"string\"!=typeof e?t(!1,!1):e.length<r?t(!1,!0):t(!0,!0)}},3658(e,t){\"use strict\";t.parse=function(e,t){if(\"string\"!=typeof e)throw new TypeError(\"argument str must be a string\");var n={},i=e.length;if(i<2)return n;var o=t&&t.decode||d,s=0,a=0,h=0;do{if(-1===(a=e.indexOf(\"=\",s)))break;if(-1===(h=e.indexOf(\";\",s)))h=i;else if(a>h){s=e.lastIndexOf(\";\",a-1)+1;continue}var p=c(e,s,a),f=u(e,a,p),m=e.slice(p,f);if(!r.call(n,m)){var y=c(e,a+1,h),g=u(e,h,y);34===e.charCodeAt(y)&&34===e.charCodeAt(g-1)&&(y++,g--);var _=e.slice(y,g);n[m]=l(_,o)}s=h+1}while(s<i);return n},t.serialize=function(e,t,r){var c=r&&r.encode||encodeURIComponent;if(\"function\"!=typeof c)throw new TypeError(\"option encode is invalid\");if(!i.test(e))throw new TypeError(\"argument name is invalid\");var u=c(t);if(!o.test(u))throw new TypeError(\"argument val is invalid\");var d=e+\"=\"+u;if(!r)return d;if(null!=r.maxAge){var l=Math.floor(r.maxAge);if(!isFinite(l))throw new TypeError(\"option maxAge is invalid\");d+=\"; Max-Age=\"+l}if(r.domain){if(!s.test(r.domain))throw new TypeError(\"option domain is invalid\");d+=\"; Domain=\"+r.domain}if(r.path){if(!a.test(r.path))throw new TypeError(\"option path is invalid\");d+=\"; Path=\"+r.path}if(r.expires){var h=r.expires;if(!function(e){return\"[object Date]\"===n.call(e)}(h)||isNaN(h.valueOf()))throw new TypeError(\"option expires is invalid\");d+=\"; Expires=\"+h.toUTCString()}if(r.httpOnly&&(d+=\"; HttpOnly\"),r.secure&&(d+=\"; Secure\"),r.partitioned&&(d+=\"; Partitioned\"),r.priority)switch(\"string\"==typeof r.priority?r.priority.toLowerCase():r.priority){case\"low\":d+=\"; Priority=Low\";break;case\"medium\":d+=\"; Priority=Medium\";break;case\"high\":d+=\"; Priority=High\";break;default:throw new TypeError(\"option priority is invalid\")}if(r.sameSite)switch(\"string\"==typeof r.sameSite?r.sameSite.toLowerCase():r.sameSite){case!0:d+=\"; SameSite=Strict\";break;case\"lax\":d+=\"; SameSite=Lax\";break;case\"strict\":d+=\"; SameSite=Strict\";break;case\"none\":d+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}return d};var n=Object.prototype.toString,r=Object.prototype.hasOwnProperty,i=/^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/,o=/^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/,s=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,a=/^[\\u0020-\\u003A\\u003D-\\u007E]*$/;function c(e,t,n){do{var r=e.charCodeAt(t);if(32!==r&&9!==r)return t}while(++t<n);return n}function u(e,t,n){for(;t>n;){var r=e.charCodeAt(--t);if(32!==r&&9!==r)return t+1}return n}function d(e){return-1!==e.indexOf(\"%\")?decodeURIComponent(e):e}function l(e,t){try{return t(e)}catch(t){return e}}},2921(e,t,n){\"use strict\";var r,i=n(2931),o=n(7695),s=n(4461),a=n(6520),c=n(9545),u={},d={VISA:\"visa\",MASTERCARD:\"mastercard\",AMERICAN_EXPRESS:\"american-express\",DINERS_CLUB:\"diners-club\",DISCOVER:\"discover\",JCB:\"jcb\",UNIONPAY:\"unionpay\",MAESTRO:\"maestro\",ELO:\"elo\",MIR:\"mir\",HIPER:\"hiper\",HIPERCARD:\"hipercard\"},l=[d.VISA,d.MASTERCARD,d.AMERICAN_EXPRESS,d.DINERS_CLUB,d.DISCOVER,d.JCB,d.UNIONPAY,d.MAESTRO,d.ELO,d.MIR,d.HIPER,d.HIPERCARD];function h(e){return u[e]||i[e]}function p(e,t){var n=r.indexOf(e);if(!t&&-1===n)throw new Error('\"'+e+'\" is not a supported card type.');return n}function f(e){var t,n=[];return a(e)?0===e.length?r.map(function(e){return o(h(e))}):(r.forEach(function(t){var r=h(t);c(e,r,n)}),(t=s(n))?[t]:n):[]}r=o(l),f.getTypeInfo=function(e){return o(h(e))},f.removeCard=function(e){var t=p(e);r.splice(t,1)},f.addCard=function(e){var t=p(e.type,!0);u[e.type]=e,-1===t&&r.push(e.type)},f.updateCard=function(e,t){var n,r=u[e]||i[e];if(!r)throw new Error('\"'+e+'\" is not a recognized type. Use `addCard` instead.');if(t.type&&r.type!==t.type)throw new Error(\"Cannot overwrite type parameter.\");n=o(r,!0),Object.keys(n).forEach(function(e){t[e]&&(n[e]=t[e])}),u[n.type]=n},f.changeOrder=function(e,t){var n=p(e);r.splice(n,1),r.splice(t,0,e)},f.resetModifications=function(){r=o(l),u={}},f.types=d,e.exports=f},9545(e,t,n){\"use strict\";var r=n(7695),i=n(6744);e.exports=function(e,t,n){var o,s,a,c;for(o=0;o<t.patterns.length;o++)if(s=t.patterns[o],i(e,s)){c=r(t),a=Array.isArray(s)?String(s[0]).length:String(s).length,e.length>=a&&(c.matchStrength=a),n.push(c);break}}},2931(e){\"use strict\";e.exports={visa:{niceType:\"Visa\",type:\"visa\",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:\"CVV\",size:3}},mastercard:{niceType:\"Mastercard\",type:\"mastercard\",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}},\"american-express\":{niceType:\"American Express\",type:\"american-express\",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:\"CID\",size:4}},\"diners-club\":{niceType:\"Diners Club\",type:\"diners-club\",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:\"CVV\",size:3}},discover:{niceType:\"Discover\",type:\"discover\",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:\"CID\",size:3}},jcb:{niceType:\"JCB\",type:\"jcb\",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:\"CVV\",size:3}},unionpay:{niceType:\"UnionPay\",type:\"unionpay\",patterns:[620,[624,626],[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[622019,622999],[62207,62209],[622126,622925],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:\"CVN\",size:3}},maestro:{niceType:\"Maestro\",type:\"maestro\",patterns:[493698,[5e5,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:\"CVC\",size:3}},elo:{niceType:\"Elo\",type:\"elo\",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:\"CVE\",size:3}},mir:{niceType:\"Mir\",type:\"mir\",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:\"CVP2\",size:3}},hiper:{niceType:\"Hiper\",type:\"hiper\",patterns:[637095,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}},hipercard:{niceType:\"Hipercard\",type:\"hipercard\",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}}}},7695(e){\"use strict\";e.exports=function(e){return e?JSON.parse(JSON.stringify(e)):null}},4461(e){\"use strict\";e.exports=function(e){if(function(e){var t=e.filter(function(e){return e.matchStrength}).length;return t>0&&t===e.length}(e))return e.reduce(function(e,t){return e?e.matchStrength<t.matchStrength?t:e:t})}},6520(e){\"use strict\";e.exports=function(e){return\"string\"==typeof e||e instanceof String}},6744(e){\"use strict\";e.exports=function(e,t){return Array.isArray(t)?function(e,t,n){var r=String(t).length,i=e.substr(0,r),o=parseInt(i,10);return t=parseInt(String(t).substr(0,i.length),10),n=parseInt(String(n).substr(0,i.length),10),o>=t&&o<=n}(e,t[0],t[1]):function(e,t){return(t=String(t)).substring(0,e.length)===e.substring(0,t.length)}(e,t)}},1915(e){\"use strict\";var t=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+t+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+t+\")+\",\"gi\");function i(e,t){try{return[decodeURIComponent(e.join(\"\"))]}catch(e){}if(1===e.length)return e;t=t||1;var n=e.slice(0,t),r=e.slice(t);return Array.prototype.concat.call([],i(n),i(r))}function o(e){try{return decodeURIComponent(e)}catch(o){for(var t=e.match(n)||[],r=1;r<t.length;r++)t=(e=i(t,r).join(\"\")).match(n)||[];return e}}e.exports=function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof e+\"`\");try{return e=e.replace(/\\+/g,\" \"),decodeURIComponent(e)}catch(t){return function(e){for(var t={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(e);n;){try{t[n[0]]=decodeURIComponent(n[0])}catch(e){var i=o(n[0]);i!==n[0]&&(t[n[0]]=i)}n=r.exec(e)}t[\"%C2\"]=\"�\";for(var s=Object.keys(t),a=0;a<s.length;a++){var c=s[a];e=e.replace(new RegExp(c,\"g\"),t[c])}return e}(e)}}},3592(e,t,n){\"use strict\";var r=n(4684),i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function s(e,t,n){var o=t[n];if(null!=o){if(i.call(e,n)&&(void 0===e[n]||null===e[n]))throw new TypeError(\"Cannot convert undefined or null to object (\"+n+\")\");i.call(e,n)&&r(o)?e[n]=a(Object(e[n]),t[n]):e[n]=o}}function a(e,t){if(e===t)return e;for(var n in t=Object(t))i.call(t,n)&&s(e,t,n);if(Object.getOwnPropertySymbols)for(var r=Object.getOwnPropertySymbols(t),a=0;a<r.length;a++)o.call(t,r[a])&&s(e,t,r[a]);return e}e.exports=function(e){e=function(e){if(null==e)throw new TypeError(\"Sources cannot be null or undefined\");return Object(e)}(e);for(var t=1;t<arguments.length;t++)a(e,arguments[t]);return e}},3814(e){\"use strict\";e.exports=function(e,t){for(var n={},r=Object.keys(e),i=Array.isArray(t),o=0;o<r.length;o++){var s=r[o],a=e[s];(i?-1!==t.indexOf(s):t(s,a,e))&&(n[s]=a)}return n}},3347(e,t,n){\"use strict\";e.exports=n(344)},5990(e){!function(t){\"use strict\";if(\"undefined\"!=typeof window){var n=!0,r=\"\",i=0,o=\"\",s=null,a=\"\",c=!1,u={resize:1,click:1},d=128,l=!0,h=1,p=\"bodyOffset\",f=p,m=!0,y=\"\",g={},_=32,v=null,b=!1,S=\"[iFrameSizer]\",E=\"\",C={max:1,min:1,bodyScroll:1,documentElementScroll:1},w=\"child\",I=!0,O=window.parent,P=\"*\",A=0,T=!1,k=null,x=16,R=1,M=\"scroll\",N=M,L=window,D=function(){se(\"MessageCallback function not defined\")},j=function(){},F=function(){},U={height:function(){return se(\"Custom height calculation function not defined\"),document.documentElement.offsetHeight},width:function(){return se(\"Custom width calculation function not defined\"),document.body.scrollWidth}},B={},z=!1;try{var q=Object.create({},{passive:{get:function(){z=!0}},once:{get:function(){}}});window.addEventListener(\"test\",ee,q),window.removeEventListener(\"test\",ee,q)}catch(e){}var H,V,G,Y,W,$,K,Q=Date.now||function(){return(new Date).getTime()},Z={bodyOffset:function(){return document.body.offsetHeight+ge(\"marginTop\")+ge(\"marginBottom\")},offset:function(){return Z.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return U.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,ve(Z))},min:function(){return Math.min.apply(null,ve(Z))},grow:function(){return Z.max()},lowestElement:function(){return Math.max(Z.bodyOffset()||Z.documentElementOffset(),_e(\"bottom\",Se()))},taggedElement:function(){return be(\"bottom\",\"data-iframe-height\")}},J={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return U.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(J.bodyScroll(),J.documentElementScroll())},max:function(){return Math.max.apply(null,ve(J))},min:function(){return Math.min.apply(null,ve(J))},rightMostElement:function(){return _e(\"right\",Se())},taggedElement:function(){return be(\"right\",\"data-iframe-width\")}},X=(H=Ee,W=null,$=0,K=function(){$=Q(),W=null,Y=H.apply(V,G),W||(V=G=null)},function(){var e=Q();$||($=e);var t=x-(e-$);return V=this,G=arguments,t<=0||t>x?(W&&(clearTimeout(W),W=null),$=e,Y=H.apply(V,G),W||(V=G=null)):W||(W=setTimeout(K,t)),Y});te(window,\"message\",Ae),te(window,\"readystatechange\",Te),Te()}function ee(){}function te(e,t,n,r){\"addEventListener\"in window?e.addEventListener(t,n,!!z&&(r||{})):\"attachEvent\"in window&&e.attachEvent(\"on\"+t,n)}function ne(e,t,n){\"removeEventListener\"in window?e.removeEventListener(t,n,!1):\"detachEvent\"in window&&e.detachEvent(\"on\"+t,n)}function re(e){return e.charAt(0).toUpperCase()+e.slice(1)}function ie(e){return S+\"[\"+E+\"] \"+e}function oe(e){b&&\"object\"==typeof window.console&&console.log(ie(e))}function se(e){\"object\"==typeof window.console&&console.warn(ie(e))}function ae(){var e,s;!function(){function e(e){return\"true\"===e}var s=y.substr(13).split(\":\");E=s[0],i=t!==s[1]?Number(s[1]):i,c=t!==s[2]?e(s[2]):c,b=t!==s[3]?e(s[3]):b,_=t!==s[4]?Number(s[4]):_,n=t!==s[6]?e(s[6]):n,o=s[7],f=t!==s[8]?s[8]:f,r=s[9],a=s[10],A=t!==s[11]?Number(s[11]):A,g.enable=t!==s[12]&&e(s[12]),w=t!==s[13]?s[13]:w,N=t!==s[14]?s[14]:N}(),oe(\"Initialising iFrame (\"+location.href+\")\"),function(){function e(e,t){return\"function\"==typeof e&&(oe(\"Setup custom \"+t+\"CalcMethod\"),U[t]=e,e=\"custom\"),e}var t;\"iFrameResizer\"in window&&Object===window.iFrameResizer.constructor&&(t=window.iFrameResizer,oe(\"Reading data from page: \"+JSON.stringify(t)),D=\"messageCallback\"in t?t.messageCallback:D,j=\"readyCallback\"in t?t.readyCallback:j,P=\"targetOrigin\"in t?t.targetOrigin:P,f=\"heightCalculationMethod\"in t?t.heightCalculationMethod:f,N=\"widthCalculationMethod\"in t?t.widthCalculationMethod:N,f=e(f,\"height\"),N=e(N,\"width\")),oe(\"TargetOrigin for parent set to: \"+P)}(),t===o&&(o=i+\"px\"),ce(\"margin\",(-1!==(s=o).indexOf(\"-\")&&(se(\"Negative CSS value ignored for margin\"),s=\"\"),s)),ce(\"background\",r),ce(\"padding\",a),(e=document.createElement(\"div\")).style.clear=\"both\",e.style.display=\"block\",document.body.appendChild(e),he(),pe(),document.documentElement.style.height=\"\",document.body.style.height=\"\",oe('HTML & body height set to \"auto\"'),oe(\"Enable public methods\"),L.parentIFrame={autoResize:function(e){return!0===e&&!1===n?(n=!0,fe()):!1===e&&!0===n&&(n=!1,me()),n},close:function(){Pe(0,0,\"close\"),oe(\"Disable outgoing messages\"),I=!1,oe(\"Remove event listener: Message\"),ne(window,\"message\",Ae),!0===n&&me()},getId:function(){return E},getPageInfo:function(e){\"function\"==typeof e?(F=e,Pe(0,0,\"pageInfo\")):(F=function(){},Pe(0,0,\"pageInfoStop\"))},moveToAnchor:function(e){g.findTarget(e)},reset:function(){Oe(\"parentIFrame.reset\")},scrollTo:function(e,t){Pe(t,e,\"scrollTo\")},scrollToOffset:function(e,t){Pe(t,e,\"scrollToOffset\")},sendMessage:function(e,t){Pe(0,0,\"message\",JSON.stringify(e),t)},setHeightCalculationMethod:function(e){f=e,he()},setWidthCalculationMethod:function(e){N=e,pe()},setTargetOrigin:function(e){oe(\"Set targetOrigin: \"+e),P=e},size:function(e,t){Ce(\"size\",\"parentIFrame.size(\"+(e||\"\")+(t?\",\"+t:\"\")+\")\",e,t)}},fe(),g=function(){function e(e){var n=e.getBoundingClientRect(),r={x:window.pageXOffset!==t?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==t?window.pageYOffset:document.documentElement.scrollTop};return{x:parseInt(n.left,10)+parseInt(r.x,10),y:parseInt(n.top,10)+parseInt(r.y,10)}}function n(n){var r=n.split(\"#\")[1]||n,i=decodeURIComponent(r),o=document.getElementById(i)||document.getElementsByName(i)[0];t!==o?function(t){var n=e(t);oe(\"Moving to in page link (#\"+r+\") at x: \"+n.x+\" y: \"+n.y),Pe(n.y,n.x,\"scrollToOffset\")}(o):(oe(\"In page link (#\"+r+\") not found in iFrame, so sending to parent\"),Pe(0,0,\"inPageLink\",\"#\"+r))}function r(){\"\"!==location.hash&&\"#\"!==location.hash&&n(location.href)}return g.enable?Array.prototype.forEach&&document.querySelectorAll?(oe(\"Setting up location.hash handlers\"),Array.prototype.forEach.call(document.querySelectorAll('a[href^=\"#\"]'),function(e){\"#\"!==e.getAttribute(\"href\")&&te(e,\"click\",function(e){e.preventDefault(),n(this.getAttribute(\"href\"))})}),te(window,\"hashchange\",r),setTimeout(r,d)):se(\"In page linking not fully supported in this browser! (See README.md for IE8 workaround)\"):oe(\"In page linking not enabled\"),{findTarget:n}}(),Ce(\"init\",\"Init message from host page\"),j()}function ce(e,n){t!==n&&\"\"!==n&&\"null\"!==n&&(document.body.style[e]=n,oe(\"Body \"+e+' set to \"'+n+'\"'))}function ue(e){var t={add:function(t){function n(){Ce(e.eventName,e.eventType)}B[t]=n,te(window,t,n,{passive:!0})},remove:function(e){var t=B[e];delete B[e],ne(window,e,t)}};e.eventNames&&Array.prototype.map?(e.eventName=e.eventNames[0],e.eventNames.map(t[e.method])):t[e.method](e.eventName),oe(re(e.method)+\" event listener: \"+e.eventType)}function de(e){ue({method:e,eventType:\"Animation Start\",eventNames:[\"animationstart\",\"webkitAnimationStart\"]}),ue({method:e,eventType:\"Animation Iteration\",eventNames:[\"animationiteration\",\"webkitAnimationIteration\"]}),ue({method:e,eventType:\"Animation End\",eventNames:[\"animationend\",\"webkitAnimationEnd\"]}),ue({method:e,eventType:\"Input\",eventName:\"input\"}),ue({method:e,eventType:\"Mouse Up\",eventName:\"mouseup\"}),ue({method:e,eventType:\"Mouse Down\",eventName:\"mousedown\"}),ue({method:e,eventType:\"Orientation Change\",eventName:\"orientationchange\"}),ue({method:e,eventType:\"Print\",eventName:[\"afterprint\",\"beforeprint\"]}),ue({method:e,eventType:\"Ready State Change\",eventName:\"readystatechange\"}),ue({method:e,eventType:\"Touch Start\",eventName:\"touchstart\"}),ue({method:e,eventType:\"Touch End\",eventName:\"touchend\"}),ue({method:e,eventType:\"Touch Cancel\",eventName:\"touchcancel\"}),ue({method:e,eventType:\"Transition Start\",eventNames:[\"transitionstart\",\"webkitTransitionStart\",\"MSTransitionStart\",\"oTransitionStart\",\"otransitionstart\"]}),ue({method:e,eventType:\"Transition Iteration\",eventNames:[\"transitioniteration\",\"webkitTransitionIteration\",\"MSTransitionIteration\",\"oTransitionIteration\",\"otransitioniteration\"]}),ue({method:e,eventType:\"Transition End\",eventNames:[\"transitionend\",\"webkitTransitionEnd\",\"MSTransitionEnd\",\"oTransitionEnd\",\"otransitionend\"]}),\"child\"===w&&ue({method:e,eventType:\"IFrame Resized\",eventName:\"resize\"})}function le(e,t,n,r){return t!==e&&(e in n||(se(e+\" is not a valid option for \"+r+\"CalculationMethod.\"),e=t),oe(r+' calculation method set to \"'+e+'\"')),e}function he(){f=le(f,p,Z,\"height\")}function pe(){N=le(N,M,J,\"width\")}function fe(){var e;!0===n?(de(\"add\"),e=0>_,window.MutationObserver||window.WebKitMutationObserver?e?ye():s=function(){function e(e){function t(e){!1===e.complete&&(oe(\"Attach listeners to \"+e.src),e.addEventListener(\"load\",i,!1),e.addEventListener(\"error\",o,!1),a.push(e))}\"attributes\"===e.type&&\"src\"===e.attributeName?t(e.target):\"childList\"===e.type&&Array.prototype.forEach.call(e.target.querySelectorAll(\"img\"),t)}function n(e){oe(\"Remove listeners from \"+e.src),e.removeEventListener(\"load\",i,!1),e.removeEventListener(\"error\",o,!1),function(e){a.splice(a.indexOf(e),1)}(e)}function r(e,r,i){n(e.target),Ce(r,i+\": \"+e.target.src,t,t)}function i(e){r(e,\"imageLoad\",\"Image loaded\")}function o(e){r(e,\"imageLoadFailed\",\"Image load failed\")}function s(t){Ce(\"mutationObserver\",\"mutationObserver: \"+t[0].target+\" \"+t[0].type),t.forEach(e)}var a=[],c=window.MutationObserver||window.WebKitMutationObserver,u=function(){var e=document.querySelector(\"body\");return u=new c(s),oe(\"Create body MutationObserver\"),u.observe(e,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}),u}();return{disconnect:function(){\"disconnect\"in u&&(oe(\"Disconnect body MutationObserver\"),u.disconnect(),a.forEach(n))}}}():(oe(\"MutationObserver not supported in this browser!\"),ye())):oe(\"Auto Resize disabled\")}function me(){de(\"remove\"),null!==s&&s.disconnect(),clearInterval(v)}function ye(){0!==_&&(oe(\"setInterval: \"+_+\"ms\"),v=setInterval(function(){Ce(\"interval\",\"setInterval: \"+_)},Math.abs(_)))}function ge(e,t){var n=0;return t=t||document.body,n=\"defaultView\"in document&&\"getComputedStyle\"in document.defaultView?null!==(n=document.defaultView.getComputedStyle(t,null))?n[e]:0:function(e){if(/^\\d+(px)?$/i.test(e))return parseInt(e,10);var n=t.style.left,r=t.runtimeStyle.left;return t.runtimeStyle.left=t.currentStyle.left,t.style.left=e||0,e=t.style.pixelLeft,t.style.left=n,t.runtimeStyle.left=r,e}(t.currentStyle[e]),parseInt(n,10)}function _e(e,t){for(var n=t.length,r=0,i=0,o=re(e),s=Q(),a=0;a<n;a++)(r=t[a].getBoundingClientRect()[e]+ge(\"margin\"+o,t[a]))>i&&(i=r);return s=Q()-s,oe(\"Parsed \"+n+\" HTML elements\"),oe(\"Element position calculated in \"+s+\"ms\"),function(e){e>x/2&&oe(\"Event throttle increased to \"+(x=2*e)+\"ms\")}(s),i}function ve(e){return[e.bodyOffset(),e.bodyScroll(),e.documentElementOffset(),e.documentElementScroll()]}function be(e,t){var n=document.querySelectorAll(\"[\"+t+\"]\");return 0===n.length&&(se(\"No tagged elements (\"+t+\") found on page\"),document.querySelectorAll(\"body *\")),_e(e,n)}function Se(){return document.querySelectorAll(\"body *\")}function Ee(e,n,r,i){var o,s;!function(){function e(e,t){return!(Math.abs(e-t)<=A)}return o=t!==r?r:Z[f](),s=t!==i?i:J[N](),e(h,o)||c&&e(R,s)}()&&\"init\"!==e?!(e in{init:1,interval:1,size:1})&&(f in C||c&&N in C)?Oe(n):e in{interval:1}||oe(\"No change in size detected\"):(we(),Pe(h=o,R=s,e))}function Ce(e,t,n,r){T&&e in u?oe(\"Trigger event cancelled: \"+e):(e in{reset:1,resetPage:1,init:1}||oe(\"Trigger event: \"+t),\"init\"===e?Ee(e,t,n,r):X(e,t,n,r))}function we(){T||(T=!0,oe(\"Trigger event lock on\")),clearTimeout(k),k=setTimeout(function(){T=!1,oe(\"Trigger event lock off\"),oe(\"--\")},d)}function Ie(e){h=Z[f](),R=J[N](),Pe(h,R,e)}function Oe(e){var t=f;f=p,oe(\"Reset trigger event: \"+e),we(),Ie(\"reset\"),f=t}function Pe(e,n,r,i,o){var s;!0===I&&(t===o?o=P:oe(\"Message targetOrigin: \"+o),oe(\"Sending message to host page (\"+(s=E+\":\"+e+\":\"+n+\":\"+r+(t!==i?\":\"+i:\"\"))+\")\"),O.postMessage(S+s,o))}function Ae(t){var n,r={init:function(){y=t.data,O=t.source,ae(),l=!1,setTimeout(function(){m=!1},d)},reset:function(){m?oe(\"Page reset ignored by init\"):(oe(\"Page size reset by host page\"),Ie(\"resetPage\"))},resize:function(){Ce(\"resizeParent\",\"Parent window requested size check\")},moveToAnchor:function(){g.findTarget(o())},inPageLink:function(){this.moveToAnchor()},pageInfo:function(){var e=o();oe(\"PageInfoFromParent called from parent: \"+e),F(JSON.parse(e)),oe(\" --\")},message:function(){var e=o();oe(\"MessageCallback called from parent: \"+e),D(JSON.parse(e)),oe(\" --\")}};function i(){return t.data.split(\"]\")[1].split(\":\")[0]}function o(){return t.data.substr(t.data.indexOf(\":\")+1)}function s(){return t.data.split(\":\")[2]in{true:1,false:1}}S===(\"\"+t.data).substr(0,13)&&(!1===l?(n=i())in r?r[n]():!e.exports&&\"iFrameResize\"in window||\"jQuery\"in window&&\"iFrameResize\"in window.jQuery.prototype||s()||se(\"Unexpected message (\"+t.data+\")\"):s()?r.init():oe('Ignored message of type \"'+i()+'\". Received before initialization.'))}function Te(){\"loading\"!==document.readyState&&window.parent.postMessage(\"[iFrameResizerChild]Ready\",\"*\")}}()},7521(e){!function(t){\"use strict\";if(\"undefined\"!=typeof window){var n,r=0,i=!1,o=!1,s=\"[iFrameSizer]\",a=null,c=window.requestAnimationFrame,u={max:1,scroll:1,bodyScroll:1,documentElementScroll:1},d={},l=null,h={autoResize:!0,bodyBackground:null,bodyMargin:null,bodyMarginV1:8,bodyPadding:null,checkOrigin:!0,inPageLinks:!1,enablePublicMethods:!0,heightCalculationMethod:\"bodyOffset\",id:\"iFrameResizer\",interval:32,log:!1,maxHeight:1/0,maxWidth:1/0,minHeight:0,minWidth:0,resizeFrom:\"parent\",scrolling:!1,sizeHeight:!0,sizeWidth:!1,warningTimeout:5e3,tolerance:0,widthCalculationMethod:\"scroll\",closedCallback:function(){},initCallback:function(){},messageCallback:function(){b(\"MessageCallback function not defined\")},resizedCallback:function(){},scrollCallback:function(){return!0}},p={};window.jQuery&&((n=window.jQuery).fn?n.fn.iFrameResize||(n.fn.iFrameResize=function(e){return this.filter(\"iframe\").each(function(t,n){N(n,e)}).end()}):v(\"\",\"Unable to bind to jQuery, it is not fully loaded.\")),\"function\"==typeof define&&define.amd?define([],U):\"object\"==typeof e.exports&&(e.exports=U()),window.iFrameResize=window.iFrameResize||U()}function f(){return window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver}function m(e,t,n){\"addEventListener\"in window?e.addEventListener(t,n,!1):\"attachEvent\"in window&&e.attachEvent(\"on\"+t,n)}function y(e,t,n){\"removeEventListener\"in window?e.removeEventListener(t,n,!1):\"detachEvent\"in window&&e.detachEvent(\"on\"+t,n)}function g(e){return d[e]?d[e].log:i}function _(e,t){S(\"log\",e,t,g(e))}function v(e,t){S(\"info\",e,t,g(e))}function b(e,t){S(\"warn\",e,t,!0)}function S(e,t,n,r){!0===r&&\"object\"==typeof window.console&&console[e](function(e){return s+\"[\"+function(e){var t=\"Host page: \"+e;return window.top!==window.self&&(t=window.parentIFrame&&window.parentIFrame.getId?window.parentIFrame.getId()+\": \"+e:\"Nested host page: \"+e),t}(e)+\"]\"}(t),n)}function E(e){function t(){n(\"Height\"),n(\"Width\"),x(function(){k(E),P(w),l(\"resizedCallback\",E)},E,\"init\")}function n(e){var t=Number(d[w][\"max\"+e]),n=Number(d[w][\"min\"+e]),r=e.toLowerCase(),i=Number(E[r]);_(w,\"Checking \"+r+\" is in range \"+n+\"-\"+t),i<n&&(i=n,_(w,\"Set \"+r+\" to min value\")),i>t&&(i=t,_(w,\"Set \"+r+\" to max value\")),E[r]=\"\"+i}function r(e){return S.substr(S.indexOf(\":\")+7+e)}function i(e,t){var n,r;n=function(){var n,r;R(\"Send Page Info\",\"pageInfo:\"+(n=document.body.getBoundingClientRect(),r=E.iframe.getBoundingClientRect(),JSON.stringify({iframeHeight:r.height,iframeWidth:r.width,clientHeight:Math.max(document.documentElement.clientHeight,window.innerHeight||0),clientWidth:Math.max(document.documentElement.clientWidth,window.innerWidth||0),offsetTop:parseInt(r.top-n.top,10),offsetLeft:parseInt(r.left-n.left,10),scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset})),e,t)},p[r=t]||(p[r]=setTimeout(function(){p[r]=null,n()},32))}function o(e){var t=e.getBoundingClientRect();return O(w),{x:Math.floor(Number(t.left)+Number(a.x)),y:Math.floor(Number(t.top)+Number(a.y))}}function c(e){var t=e?o(E.iframe):{x:0,y:0},n={x:Number(E.width)+t.x,y:Number(E.height)+t.y};_(w,\"Reposition requested from iFrame (offset x:\"+t.x+\" y:\"+t.y+\")\"),window.top!==window.self?window.parentIFrame?window.parentIFrame[\"scrollTo\"+(e?\"Offset\":\"\")](n.x,n.y):b(w,\"Unable to scroll to requested position, window.parentIFrame not found\"):(a=n,u(),_(w,\"--\"))}function u(){!1!==l(\"scrollCallback\",a)?P(w):A()}function l(e,t){return C(w,e,t)}var h,f,g,S=e.data,E={},w=null;\"[iFrameResizerChild]Ready\"===S?function(){for(var e in d)R(\"iFrame requested init\",M(e),document.getElementById(e),e)}():s===(\"\"+S).substr(0,13)&&S.substr(13).split(\":\")[0]in d?(g=S.substr(13).split(\":\"),E={iframe:d[g[0]]&&d[g[0]].iframe,id:g[0],height:g[1],width:g[2],type:g[3]},w=E.id,d[w]&&(d[w].loaded=!0),(f=E.type in{true:1,false:1,undefined:1})&&_(w,\"Ignoring init message from meta parent page\"),!f&&function(e){var t=!0;return d[e]||(t=!1,b(E.type+\" No settings for \"+e+\". Message was: \"+S)),t}(w)&&(_(w,\"Received: \"+S),h=!0,null===E.iframe&&(b(w,\"IFrame (\"+E.id+\") not found\"),h=!1),h&&function(){var t,n=e.origin,r=d[w]&&d[w].checkOrigin;if(r&&\"\"+n!=\"null\"&&!(r.constructor===Array?function(){var e=0,t=!1;for(_(w,\"Checking connection is from allowed list of origins: \"+r);e<r.length;e++)if(r[e]===n){t=!0;break}return t}():(t=d[w]&&d[w].remoteHost,_(w,\"Checking connection is from: \"+t),n===t)))throw new Error(\"Unexpected message received from: \"+n+\" for \"+E.iframe.id+\". Message was: \"+e.data+\". This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.\");return!0}()&&function(){switch(d[w]&&d[w].firstRun&&d[w]&&(d[w].firstRun=!1),E.type){case\"close\":d[w].closeRequestCallback?C(w,\"closeRequestCallback\",d[w].iframe):I(E.iframe);break;case\"message\":e=r(6),_(w,\"MessageCallback passed: {iframe: \"+E.iframe.id+\", message: \"+e+\"}\"),l(\"messageCallback\",{iframe:E.iframe,message:JSON.parse(e)}),_(w,\"--\");break;case\"scrollTo\":c(!1);break;case\"scrollToOffset\":c(!0);break;case\"pageInfo\":i(d[w]&&d[w].iframe,w),function(){function e(e,r){function o(){d[n]?i(d[n].iframe,n):t()}[\"scroll\",\"resize\"].forEach(function(t){_(n,e+t+\" listener for sendPageInfo\"),r(window,t,o)})}function t(){e(\"Remove \",y)}var n=w;e(\"Add \",m),d[n]&&(d[n].stopPageInfo=t)}();break;case\"pageInfoStop\":d[w]&&d[w].stopPageInfo&&(d[w].stopPageInfo(),delete d[w].stopPageInfo);break;case\"inPageLink\":!function(e){var t,n=e.split(\"#\")[1]||\"\",r=decodeURIComponent(n),i=document.getElementById(r)||document.getElementsByName(r)[0];i?(t=o(i),_(w,\"Moving to in page link (#\"+n+\") at x: \"+t.x+\" y: \"+t.y),a={x:t.x,y:t.y},u(),_(w,\"--\")):window.top!==window.self?window.parentIFrame?window.parentIFrame.moveToAnchor(n):_(w,\"In page link #\"+n+\" not found and window.parentIFrame not found\"):_(w,\"In page link #\"+n+\" not found\")}(r(9));break;case\"reset\":T(E);break;case\"init\":t(),l(\"initCallback\",E.iframe);break;default:t()}var e}())):v(w,\"Ignored: \"+S)}function C(e,t,n){var r=null,i=null;if(d[e]){if(\"function\"!=typeof(r=d[e][t]))throw new TypeError(t+\" on iFrame[\"+e+\"] is not a function\");i=r(n)}return i}function w(e){var t=e.id;delete d[t]}function I(e){var t=e.id;_(t,\"Removing iFrame: \"+t);try{e.parentNode&&e.parentNode.removeChild(e)}catch(e){}C(t,\"closedCallback\",t),_(t,\"--\"),w(e)}function O(e){null===a&&_(e,\"Get page position: \"+(a={x:window.pageXOffset!==t?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==t?window.pageYOffset:document.documentElement.scrollTop}).x+\",\"+a.y)}function P(e){null!==a&&(window.scrollTo(a.x,a.y),_(e,\"Set page position: \"+a.x+\",\"+a.y),A())}function A(){a=null}function T(e){_(e.id,\"Size reset requested by \"+(\"init\"===e.type?\"host page\":\"iFrame\")),O(e.id),x(function(){k(e),R(\"reset\",\"reset\",e.iframe,e.id)},e,\"reset\")}function k(e){function t(t){!function(t){e.id?(e.iframe.style[t]=e[t]+\"px\",_(e.id,\"IFrame (\"+n+\") \"+t+\" set to \"+e[t]+\"px\")):_(\"undefined\",\"messageData id not set\")}(t),function(t){o||\"0\"!==e[t]||(o=!0,_(n,\"Hidden iFrame detected, creating visibility listener\"),function(){function e(){function e(e){function t(t){return\"0px\"===(d[e]&&d[e].iframe.style[t])}d[e]&&null!==d[e].iframe.offsetParent&&(t(\"height\")||t(\"width\"))&&R(\"Visibility change\",\"resize\",d[e].iframe,e)}for(var t in d)e(t)}function t(t){_(\"window\",\"Mutation observed: \"+t[0].target+\" \"+t[0].type),L(e,16)}var n,r=f();r&&(n=document.querySelector(\"body\"),new r(t).observe(n,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}))}())}(t)}var n=e.iframe.id;d[n]&&(d[n].sizeHeight&&t(\"height\"),d[n].sizeWidth&&t(\"width\"))}function x(e,t,n){n!==t.type&&c?(_(t.id,\"Requesting animation frame\"),c(e)):e()}function R(e,t,n,r,i){var o,a=!1;r=r||n.id,d[r]&&(n&&\"contentWindow\"in n&&null!==n.contentWindow?(o=d[r]&&d[r].targetOrigin,_(r,\"[\"+e+\"] Sending msg to iframe[\"+r+\"] (\"+t+\") targetOrigin: \"+o),n.contentWindow.postMessage(s+t,o)):b(r,\"[\"+e+\"] IFrame(\"+r+\") not found\"),i&&d[r]&&d[r].warningTimeout&&(d[r].msgTimeout=setTimeout(function(){!d[r]||d[r].loaded||a||(a=!0,b(r,\"IFrame has not responded within \"+d[r].warningTimeout/1e3+\" seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.\"))},d[r].warningTimeout)))}function M(e){return e+\":\"+d[e].bodyMarginV1+\":\"+d[e].sizeWidth+\":\"+d[e].log+\":\"+d[e].interval+\":\"+d[e].enablePublicMethods+\":\"+d[e].autoResize+\":\"+d[e].bodyMargin+\":\"+d[e].heightCalculationMethod+\":\"+d[e].bodyBackground+\":\"+d[e].bodyPadding+\":\"+d[e].tolerance+\":\"+d[e].inPageLinks+\":\"+d[e].resizeFrom+\":\"+d[e].widthCalculationMethod}function N(e,n){var o,s,a=function(t){var o;return\"\"===t&&(e.id=(o=n&&n.id||h.id+r++,null!==document.getElementById(o)&&(o+=r++),t=o),i=(n||{}).log,_(t,\"Added missing iframe ID: \"+t+\" (\"+e.src+\")\")),t}(e.id);a in d&&\"iFrameResizer\"in e?b(a,\"Ignored iFrame, already setup.\"):(function(t){var n;t=t||{},d[a]={firstRun:!0,iframe:e,remoteHost:e.src.split(\"/\").slice(0,3).join(\"/\")},function(e){if(\"object\"!=typeof e)throw new TypeError(\"Options is not an object\")}(t),function(e){for(var t in h)h.hasOwnProperty(t)&&(d[a][t]=e.hasOwnProperty(t)?e[t]:h[t])}(t),d[a]&&(d[a].targetOrigin=!0===d[a].checkOrigin?\"\"===(n=d[a].remoteHost)||\"file://\"===n?\"*\":n:\"*\")}(n),function(){switch(_(a,\"IFrame scrolling \"+(d[a]&&d[a].scrolling?\"enabled\":\"disabled\")+\" for \"+a),e.style.overflow=!1===(d[a]&&d[a].scrolling)?\"hidden\":\"auto\",d[a]&&d[a].scrolling){case\"omit\":break;case!0:e.scrolling=\"yes\";break;case!1:e.scrolling=\"no\";break;default:e.scrolling=d[a]?d[a].scrolling:\"no\"}}(),function(){function t(t){1/0!==d[a][t]&&0!==d[a][t]&&(e.style[t]=d[a][t]+\"px\",_(a,\"Set \"+t+\" = \"+d[a][t]+\"px\"))}function n(e){if(d[a][\"min\"+e]>d[a][\"max\"+e])throw new Error(\"Value for min\"+e+\" can not be greater than max\"+e)}n(\"Height\"),n(\"Width\"),t(\"maxHeight\"),t(\"minHeight\"),t(\"maxWidth\"),t(\"minWidth\")}(),\"number\"!=typeof(d[a]&&d[a].bodyMargin)&&\"0\"!==(d[a]&&d[a].bodyMargin)||(d[a].bodyMarginV1=d[a].bodyMargin,d[a].bodyMargin=d[a].bodyMargin+\"px\"),o=M(a),(s=f())&&function(t){e.parentNode&&new t(function(t){t.forEach(function(t){Array.prototype.slice.call(t.removedNodes).forEach(function(t){t===e&&I(e)})})}).observe(e.parentNode,{childList:!0})}(s),m(e,\"load\",function(){var n,r;R(\"iFrame.onload\",o,e,t,!0),n=d[a]&&d[a].firstRun,r=d[a]&&d[a].heightCalculationMethod in u,!n&&r&&T({iframe:e,height:0,width:0,type:\"init\"})}),R(\"init\",o,e,t,!0),Function.prototype.bind&&d[a]&&(d[a].iframe.iFrameResizer={close:I.bind(null,d[a].iframe),removeListeners:w.bind(null,d[a].iframe),resize:R.bind(null,\"Window resize\",\"resize\",d[a].iframe),moveToAnchor:function(e){R(\"Move to anchor\",\"moveToAnchor:\"+e,d[a].iframe,a)},sendMessage:function(e){R(\"Send Message\",\"message:\"+(e=JSON.stringify(e)),d[a].iframe,a)}}))}function L(e,t){null===l&&(l=setTimeout(function(){l=null,e()},t))}function D(e){_(\"window\",\"Trigger event: \"+e),L(function(){F(\"Window \"+e,\"resize\")},16)}function j(){\"hidden\"!==document.visibilityState&&(_(\"document\",\"Trigger event: Visiblity change\"),L(function(){F(\"Tab Visable\",\"resize\")},16))}function F(e,t){function n(e){return d[e]&&\"parent\"===d[e].resizeFrom&&d[e].autoResize&&!d[e].firstRun}for(var r in d)n(r)&&R(e,t,document.getElementById(r),r)}function U(){function e(e,t){t&&(function(){if(!t.tagName)throw new TypeError(\"Object is not a valid DOM element\");if(\"IFRAME\"!==t.tagName.toUpperCase())throw new TypeError(\"Expected <IFRAME> tag, found <\"+t.tagName+\">\")}(),N(t,e),n.push(t))}var n;return function(){var e,t=[\"moz\",\"webkit\",\"o\",\"ms\"];for(e=0;e<t.length&&!c;e+=1)c=window[t[e]+\"RequestAnimationFrame\"];c||_(\"setup\",\"RequestAnimationFrame not supported\")}(),m(window,\"message\",E),m(window,\"resize\",function(){D(\"resize\")}),m(document,\"visibilitychange\",j),m(document,\"-webkit-visibilitychange\",j),m(window,\"focusin\",function(){D(\"focus\")}),m(window,\"focus\",function(){D(\"focus\")}),function(r,i){switch(n=[],function(e){e&&e.enablePublicMethods&&b(\"enablePublicMethods option has been removed, public methods are now always available in the iFrame\")}(r),typeof i){case\"undefined\":case\"string\":Array.prototype.forEach.call(document.querySelectorAll(i||\"iframe\"),e.bind(t,r));break;case\"object\":e(r,i);break;default:throw new TypeError(\"Unexpected data type (\"+typeof i+\")\")}return n}}}()},344(e,t,n){t.iframeResizer=n(7521),n(5990)},4684(e){\"use strict\";e.exports=function(e){var t=typeof e;return null!==e&&(\"object\"===t||\"function\"===t)}},168(e){var t;t=function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(t,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=e({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var s=JSON.stringify(n);/^[\\{\\[]/.test(s)&&(n=s)}catch(e){}n=r.write?r.write(n,t):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in o)o[c]&&(a+=\"; \"+c,!0!==o[c]&&(a+=\"=\"+o[c].split(\";\")[0]));return document.cookie=t+\"=\"+n+a}}function s(e,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],s=0;s<o.length;s++){var a=o[s].split(\"=\"),c=a.slice(1).join(\"=\");n||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var u=t(a[0]);if(c=(r.read||r)(c,u)||t(c),n)try{c=JSON.parse(c)}catch(e){}if(i[u]=c,e===u)break}catch(e){}}return e?i[e]:i}}return i.set=o,i.get=function(e){return s(e,!1)},i.getJSON=function(e){return s(e,!0)},i.remove=function(t,n){o(t,\"\",e(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(t),e.exports=t()},4963(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();t.hasCookies=function(){var e=new a;try{var t=\"__test\";e.setItem(t,\"1\");var n=e.getItem(t);return e.removeItem(t),\"1\"===n}catch(e){return!1}};var i,o=(i=n(3658))&&i.__esModule?i:{default:i},s=\"lS_\",a=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.cookieOptions=Object.assign({path:\"/\"},t),s=void 0===t.prefix?s:t.prefix}return r(e,[{key:\"getItem\",value:function(e){var t=o.default.parse(document.cookie);return t&&t.hasOwnProperty(s+e)?t[s+e]:null}},{key:\"setItem\",value:function(e,t){return document.cookie=o.default.serialize(s+e,t,this.cookieOptions),t}},{key:\"removeItem\",value:function(e){var t=Object.assign({},this.cookieOptions,{maxAge:-1});return document.cookie=o.default.serialize(s+e,\"\",t),null}},{key:\"clear\",value:function(){var e=o.default.parse(document.cookie);for(var t in e)0===t.indexOf(s)&&this.removeItem(t.substr(s.length));return null}}]),e}();t.default=a},3952(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this._data={}}return n(e,[{key:\"getItem\",value:function(e){return this._data.hasOwnProperty(e)?this._data[e]:null}},{key:\"setItem\",value:function(e,t){return this._data[e]=String(t)}},{key:\"removeItem\",value:function(e){return delete this._data[e]}},{key:\"clear\",value:function(){return this._data={}}}]),e}();t.default=r},7576(e,t,n){\"use strict\";var r=s(n(1322)),i=s(n(4963)),o=s(n(3952));function s(e){return e&&e.__esModule?e:{default:e}}var a;a=(0,r.default)(\"localStorage\")?window.localStorage:(0,r.default)(\"sessionStorage\")?window.sessionStorage:(0,r.default)(\"cookieStorage\")?new i.default:new o.default,t.Ay=a,r.default,i.default,o.default},1322(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"localStorage\",t=String(e).replace(/storage$/i,\"\").toLowerCase();if(\"local\"===t)return o(\"localStorage\");if(\"session\"===t)return o(\"sessionStorage\");if(\"cookie\"===t)return(0,r.hasCookies)();if(\"memory\"===t)return!0;throw new Error(\"Storage method `\"+e+\"` is not available.\\n    Please use one of the following: localStorage, sessionStorage, cookieStorage, memoryStorage.\")};var r=n(4963),i=\"__test\";function o(e){try{var t=window[e];return t.setItem(i,\"1\"),t.removeItem(i),!0}catch(e){return!1}}},9655(e,t,n){var r,i=\"__lodash_hash_undefined__\",o=/^\\[object .+?Constructor\\]$/,s=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,a=\"object\"==typeof self&&self&&self.Object===Object&&self,c=s||a||Function(\"return this\")(),u=Array.prototype,d=Function.prototype,l=Object.prototype,h=c[\"__core-js_shared__\"],p=(r=/[^.]+$/.exec(h&&h.keys&&h.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",f=d.toString,m=l.hasOwnProperty,y=l.toString,g=RegExp(\"^\"+f.call(m).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),_=u.splice,v=O(c,\"Map\"),b=O(Object,\"create\");function S(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function E(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function C(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function w(e,t){for(var n=e.length;n--;)if(A(e[n][0],t))return n;return-1}function I(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function O(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){if(!T(e)||p&&p in e)return!1;var t=function(e){var t=T(e)?y.call(e):\"\";return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t}(e)||function(e){var t=!1;if(null!=e&&\"function\"!=typeof e.toString)try{t=!!(e+\"\")}catch(e){}return t}(e)?g:o;return t.test(function(e){if(null!=e){try{return f.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e))}(n)?n:void 0}function P(e,t){if(\"function\"!=typeof e||t&&\"function\"!=typeof t)throw new TypeError(\"Expected a function\");var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var s=e.apply(this,r);return n.cache=o.set(i,s),s};return n.cache=new(P.Cache||C),n}function A(e,t){return e===t||e!=e&&t!=t}function T(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}S.prototype.clear=function(){this.__data__=b?b(null):{}},S.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},S.prototype.get=function(e){var t=this.__data__;if(b){var n=t[e];return n===i?void 0:n}return m.call(t,e)?t[e]:void 0},S.prototype.has=function(e){var t=this.__data__;return b?void 0!==t[e]:m.call(t,e)},S.prototype.set=function(e,t){return this.__data__[e]=b&&void 0===t?i:t,this},E.prototype.clear=function(){this.__data__=[]},E.prototype.delete=function(e){var t=this.__data__,n=w(t,e);return!(n<0||(n==t.length-1?t.pop():_.call(t,n,1),0))},E.prototype.get=function(e){var t=this.__data__,n=w(t,e);return n<0?void 0:t[n][1]},E.prototype.has=function(e){return w(this.__data__,e)>-1},E.prototype.set=function(e,t){var n=this.__data__,r=w(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},C.prototype.clear=function(){this.__data__={hash:new S,map:new(v||E),string:new S}},C.prototype.delete=function(e){return I(this,e).delete(e)},C.prototype.get=function(e){return I(this,e).get(e)},C.prototype.has=function(e){return I(this,e).has(e)},C.prototype.set=function(e,t){return I(this,e).set(e,t),this},P.Cache=C,e.exports=P},35(e,t,n){e=n.nmd(e);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",s=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,u=/^(?:0|[1-9]\\d*)$/,d={};d[\"[object Float32Array]\"]=d[\"[object Float64Array]\"]=d[\"[object Int8Array]\"]=d[\"[object Int16Array]\"]=d[\"[object Int32Array]\"]=d[\"[object Uint8Array]\"]=d[\"[object Uint8ClampedArray]\"]=d[\"[object Uint16Array]\"]=d[\"[object Uint32Array]\"]=!0,d[o]=d[\"[object Array]\"]=d[\"[object ArrayBuffer]\"]=d[\"[object Boolean]\"]=d[\"[object DataView]\"]=d[\"[object Date]\"]=d[\"[object Error]\"]=d[s]=d[\"[object Map]\"]=d[\"[object Number]\"]=d[a]=d[\"[object RegExp]\"]=d[\"[object Set]\"]=d[\"[object String]\"]=d[\"[object WeakMap]\"]=!1;var l,h,p,f=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,m=\"object\"==typeof self&&self&&self.Object===Object&&self,y=f||m||Function(\"return this\")(),g=t&&!t.nodeType&&t,_=g&&e&&!e.nodeType&&e,v=_&&_.exports===g,b=v&&f.process,S=function(){try{return _&&_.require&&_.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(e){}}(),E=S&&S.isTypedArray,C=Array.prototype,w=Function.prototype,I=Object.prototype,O=y[\"__core-js_shared__\"],P=w.toString,A=I.hasOwnProperty,T=(l=/[^.]+$/.exec(O&&O.keys&&O.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",k=I.toString,x=P.call(Object),R=RegExp(\"^\"+P.call(A).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),M=v?y.Buffer:void 0,N=y.Symbol,L=y.Uint8Array,D=(M&&M.allocUnsafe,h=Object.getPrototypeOf,p=Object,function(e){return h(p(e))}),j=Object.create,F=I.propertyIsEnumerable,U=C.splice,B=N?N.toStringTag:void 0,z=function(){try{var e=ae(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),q=M?M.isBuffer:void 0,H=Math.max,V=Date.now,G=ae(y,\"Map\"),Y=ae(Object,\"create\"),W=function(){function e(){}return function(t){if(!ve(t))return{};if(j)return j(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function $(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function K(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Q(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Z(e){var t=this.__data__=new K(e);this.size=t.size}function J(e,t,n){(void 0!==n&&!he(e[t],n)||void 0===n&&!(t in e))&&te(e,t,n)}function X(e,t,n){var r=e[t];A.call(e,t)&&he(r,n)&&(void 0!==n||t in e)||te(e,t,n)}function ee(e,t){for(var n=e.length;n--;)if(he(e[n][0],t))return n;return-1}function te(e,t,n){\"__proto__\"==t&&z?z(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}$.prototype.clear=function(){this.__data__=Y?Y(null):{},this.size=0},$.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},$.prototype.get=function(e){var t=this.__data__;if(Y){var n=t[e];return n===r?void 0:n}return A.call(t,e)?t[e]:void 0},$.prototype.has=function(e){var t=this.__data__;return Y?void 0!==t[e]:A.call(t,e)},$.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Y&&void 0===t?r:t,this},K.prototype.clear=function(){this.__data__=[],this.size=0},K.prototype.delete=function(e){var t=this.__data__,n=ee(t,e);return!(n<0||(n==t.length-1?t.pop():U.call(t,n,1),--this.size,0))},K.prototype.get=function(e){var t=this.__data__,n=ee(t,e);return n<0?void 0:t[n][1]},K.prototype.has=function(e){return ee(this.__data__,e)>-1},K.prototype.set=function(e,t){var n=this.__data__,r=ee(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Q.prototype.clear=function(){this.size=0,this.__data__={hash:new $,map:new(G||K),string:new $}},Q.prototype.delete=function(e){var t=se(this,e).delete(e);return this.size-=t?1:0,t},Q.prototype.get=function(e){return se(this,e).get(e)},Q.prototype.has=function(e){return se(this,e).has(e)},Q.prototype.set=function(e,t){var n=se(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Z.prototype.clear=function(){this.__data__=new K,this.size=0},Z.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Z.prototype.get=function(e){return this.__data__.get(e)},Z.prototype.has=function(e){return this.__data__.has(e)},Z.prototype.set=function(e,t){var n=this.__data__;if(n instanceof K){var r=n.__data__;if(!G||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Q(r)}return n.set(e,t),this.size=n.size,this};function ne(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":B&&B in Object(e)?function(e){var t=A.call(e,B),n=e[B];try{e[B]=void 0;var r=!0}catch(e){}var i=k.call(e);return r&&(t?e[B]=n:delete e[B]),i}(e):function(e){return k.call(e)}(e)}function re(e){return be(e)&&ne(e)==o}function ie(e,t,n,r,i){e!==t&&function(e,t,n){for(var r=-1,i=Object(e),o=n(e),s=o.length;s--;){var a=o[++r];if(!1===t(i[a],a,i))break}}(t,function(o,s){if(i||(i=new Z),ve(o))!function(e,t,n,r,i,o,s){var c=de(e,n),u=de(t,n),d=s.get(u);if(d)J(e,n,d);else{var l,h,p,f,m,y=o?o(c,u,n+\"\",e,t,s):void 0,g=void 0===y;if(g){var _=fe(u),v=!_&&ye(u),b=!_&&!v&&Se(u);y=u,_||v||b?fe(c)?y=c:be(m=c)&&me(m)?y=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}(c):v?(g=!1,y=function(e){return e.slice()}(u)):b?(g=!1,f=new(p=(l=u).buffer).constructor(p.byteLength),new L(f).set(new L(p)),h=f,y=new l.constructor(h,l.byteOffset,l.length)):y=[]:function(e){if(!be(e)||ne(e)!=a)return!1;var t=D(e);if(null===t)return!0;var n=A.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&P.call(n)==x}(u)||pe(u)?(y=c,pe(c)?y=function(e){return function(e,t,n){var r=!n;n||(n={});for(var i=-1,o=t.length;++i<o;){var s=t[i],a=void 0;void 0===a&&(a=e[s]),r?te(n,s,a):X(n,s,a)}return n}(e,Ee(e))}(c):ve(c)&&!ge(c)||(y=function(e){return\"function\"!=typeof e.constructor||ue(e)?{}:W(D(e))}(u))):g=!1}g&&(s.set(u,y),i(y,u,r,o,s),s.delete(u)),J(e,n,y)}}(e,t,s,n,ie,r,i);else{var c=r?r(de(e,s),o,s+\"\",e,t,i):void 0;void 0===c&&(c=o),J(e,s,c)}},Ee)}var oe=z?function(e,t){return z(e,\"toString\",{configurable:!0,enumerable:!1,value:(n=t,function(){return n}),writable:!0});var n}:Ie;function se(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function ae(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!ve(e)||function(e){return!!T&&T in e}(e))&&(ge(e)?R:c).test(function(e){if(null!=e){try{return P.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e))}(n)?n:void 0}function ce(e,t){var n=typeof e;return!!(t=t??i)&&(\"number\"==n||\"symbol\"!=n&&u.test(e))&&e>-1&&e%1==0&&e<t}function ue(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||I)}function de(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var le=function(e){var t=0,n=0;return function(){var r=V(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(oe);function he(e,t){return e===t||e!=e&&t!=t}var pe=re(function(){return arguments}())?re:function(e){return be(e)&&A.call(e,\"callee\")&&!F.call(e,\"callee\")},fe=Array.isArray;function me(e){return null!=e&&_e(e.length)&&!ge(e)}var ye=q||function(){return!1};function ge(e){if(!ve(e))return!1;var t=ne(e);return t==s||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function _e(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=i}function ve(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function be(e){return null!=e&&\"object\"==typeof e}var Se=E?function(e){return function(t){return e(t)}}(E):function(e){return be(e)&&_e(e.length)&&!!d[ne(e)]};function Ee(e){return me(e)?function(e,t){var n=fe(e),r=!n&&pe(e),i=!n&&!r&&ye(e),o=!n&&!r&&!i&&Se(e),s=n||r||i||o,a=s?function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}(e.length,String):[],c=a.length;for(var u in e)!t&&!A.call(e,u)||s&&(\"length\"==u||i&&(\"offset\"==u||\"parent\"==u)||o&&(\"buffer\"==u||\"byteLength\"==u||\"byteOffset\"==u)||ce(u,c))||a.push(u);return a}(e,!0):function(e){if(!ve(e))return function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}(e);var t=ue(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&A.call(e,r))&&n.push(r);return n}(e)}var Ce,we=(Ce=function(e,t,n){ie(e,t,n)},function(e,t){return le(function(e,t,n){return t=H(void 0===t?e.length-1:t,0),function(){for(var r=arguments,i=-1,o=H(r.length-t,0),s=Array(o);++i<o;)s[i]=r[t+i];i=-1;for(var a=Array(t+1);++i<t;)a[i]=r[i];return a[t]=n(s),function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}(e,this,a)}}(e,t,Ie),e+\"\")}(function(e,t){var n=-1,r=t.length,i=r>1?t[r-1]:void 0,o=r>2?t[2]:void 0;for(i=Ce.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(e,t,n){if(!ve(n))return!1;var r=typeof t;return!!(\"number\"==r?me(n)&&ce(t,n.length):\"string\"==r&&t in n)&&he(n[t],e)}(t[0],t[1],o)&&(i=r<3?void 0:i,r=1),e=Object(e);++n<r;){var s=t[n];s&&Ce(e,s,n)}return e}));function Ie(e){return e}e.exports=we},9440(e,t,n){e=n.nmd(e),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",s=\"__lodash_placeholder__\",a=32,c=128,u=1/0,d=9007199254740991,l=NaN,h=4294967295,p=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],f=\"[object Arguments]\",m=\"[object Array]\",y=\"[object Boolean]\",g=\"[object Date]\",_=\"[object Error]\",v=\"[object Function]\",b=\"[object GeneratorFunction]\",S=\"[object Map]\",E=\"[object Number]\",C=\"[object Object]\",w=\"[object Promise]\",I=\"[object RegExp]\",O=\"[object Set]\",P=\"[object String]\",A=\"[object Symbol]\",T=\"[object WeakMap]\",k=\"[object ArrayBuffer]\",x=\"[object DataView]\",R=\"[object Float32Array]\",M=\"[object Float64Array]\",N=\"[object Int8Array]\",L=\"[object Int16Array]\",D=\"[object Int32Array]\",j=\"[object Uint8Array]\",F=\"[object Uint8ClampedArray]\",U=\"[object Uint16Array]\",B=\"[object Uint32Array]\",z=/\\b__p \\+= '';/g,q=/\\b(__p \\+=) '' \\+/g,H=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,V=/&(?:amp|lt|gt|quot|#39);/g,G=/[&<>\"']/g,Y=RegExp(V.source),W=RegExp(G.source),$=/<%-([\\s\\S]+?)%>/g,K=/<%([\\s\\S]+?)%>/g,Q=/<%=([\\s\\S]+?)%>/g,Z=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,J=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,ee=/[\\\\^$.*+?()[\\]{}|]/g,te=RegExp(ee.source),ne=/^\\s+/,re=/\\s/,ie=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,oe=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,se=/,? & /,ae=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ce=/[()=,{}\\[\\]\\/\\s]/,ue=/\\\\(\\\\)?/g,de=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,le=/\\w*$/,he=/^[-+]0x[0-9a-f]+$/i,pe=/^0b[01]+$/i,fe=/^\\[object .+?Constructor\\]$/,me=/^0o[0-7]+$/i,ye=/^(?:0|[1-9]\\d*)$/,ge=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,_e=/($^)/,ve=/['\\n\\r\\u2028\\u2029\\\\]/g,be=\"\\\\ud800-\\\\udfff\",Se=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",Ee=\"\\\\u2700-\\\\u27bf\",Ce=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",we=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ie=\"\\\\ufe0e\\\\ufe0f\",Oe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Pe=\"[\"+be+\"]\",Ae=\"[\"+Oe+\"]\",Te=\"[\"+Se+\"]\",ke=\"\\\\d+\",xe=\"[\"+Ee+\"]\",Re=\"[\"+Ce+\"]\",Me=\"[^\"+be+Oe+ke+Ee+Ce+we+\"]\",Ne=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Le=\"[^\"+be+\"]\",De=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",je=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Fe=\"[\"+we+\"]\",Ue=\"\\\\u200d\",Be=\"(?:\"+Re+\"|\"+Me+\")\",ze=\"(?:\"+Fe+\"|\"+Me+\")\",qe=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",He=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Ve=\"(?:\"+Te+\"|\"+Ne+\")?\",Ge=\"[\"+Ie+\"]?\",Ye=Ge+Ve+\"(?:\"+Ue+\"(?:\"+[Le,De,je].join(\"|\")+\")\"+Ge+Ve+\")*\",We=\"(?:\"+[xe,De,je].join(\"|\")+\")\"+Ye,$e=\"(?:\"+[Le+Te+\"?\",Te,De,je,Pe].join(\"|\")+\")\",Ke=RegExp(\"['’]\",\"g\"),Qe=RegExp(Te,\"g\"),Ze=RegExp(Ne+\"(?=\"+Ne+\")|\"+$e+Ye,\"g\"),Je=RegExp([Fe+\"?\"+Re+\"+\"+qe+\"(?=\"+[Ae,Fe,\"$\"].join(\"|\")+\")\",ze+\"+\"+He+\"(?=\"+[Ae,Fe+Be,\"$\"].join(\"|\")+\")\",Fe+\"?\"+Be+\"+\"+qe,Fe+\"+\"+He,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",ke,We].join(\"|\"),\"g\"),Xe=RegExp(\"[\"+Ue+be+Se+Ie+\"]\"),et=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,tt=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],nt=-1,rt={};rt[R]=rt[M]=rt[N]=rt[L]=rt[D]=rt[j]=rt[F]=rt[U]=rt[B]=!0,rt[f]=rt[m]=rt[k]=rt[y]=rt[x]=rt[g]=rt[_]=rt[v]=rt[S]=rt[E]=rt[C]=rt[I]=rt[O]=rt[P]=rt[T]=!1;var it={};it[f]=it[m]=it[k]=it[x]=it[y]=it[g]=it[R]=it[M]=it[N]=it[L]=it[D]=it[S]=it[E]=it[C]=it[I]=it[O]=it[P]=it[A]=it[j]=it[F]=it[U]=it[B]=!0,it[_]=it[v]=it[T]=!1;var ot={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},st=parseFloat,at=parseInt,ct=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,ut=\"object\"==typeof self&&self&&self.Object===Object&&self,dt=ct||ut||Function(\"return this\")(),lt=t&&!t.nodeType&&t,ht=lt&&e&&!e.nodeType&&e,pt=ht&&ht.exports===lt,ft=pt&&ct.process,mt=function(){try{return ht&&ht.require&&ht.require(\"util\").types||ft&&ft.binding&&ft.binding(\"util\")}catch(e){}}(),yt=mt&&mt.isArrayBuffer,gt=mt&&mt.isDate,_t=mt&&mt.isMap,vt=mt&&mt.isRegExp,bt=mt&&mt.isSet,St=mt&&mt.isTypedArray;function Et(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function Ct(e,t,n,r){for(var i=-1,o=null==e?0:e.length;++i<o;){var s=e[i];t(r,s,n(s),e)}return r}function wt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}function It(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function Ot(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}function Pt(e,t){for(var n=-1,r=null==e?0:e.length,i=0,o=[];++n<r;){var s=e[n];t(s,n,e)&&(o[i++]=s)}return o}function At(e,t){return!(null==e||!e.length)&&Ft(e,t,0)>-1}function Tt(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function kt(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}function xt(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}function Rt(e,t,n,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(n=e[++i]);++i<o;)n=t(n,e[i],i,e);return n}function Mt(e,t,n,r){var i=null==e?0:e.length;for(r&&i&&(n=e[--i]);i--;)n=t(n,e[i],i,e);return n}function Nt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var Lt=qt(\"length\");function Dt(e,t,n){var r;return n(e,function(e,n,i){if(t(e,n,i))return r=n,!1}),r}function jt(e,t,n,r){for(var i=e.length,o=n+(r?1:-1);r?o--:++o<i;)if(t(e[o],o,e))return o;return-1}function Ft(e,t,n){return t==t?function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}(e,t,n):jt(e,Bt,n)}function Ut(e,t,n,r){for(var i=n-1,o=e.length;++i<o;)if(r(e[i],t))return i;return-1}function Bt(e){return e!=e}function zt(e,t){var n=null==e?0:e.length;return n?Gt(e,t)/n:l}function qt(e){return function(t){return null==t?r:t[e]}}function Ht(e){return function(t){return null==e?r:e[t]}}function Vt(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}function Gt(e,t){for(var n,i=-1,o=e.length;++i<o;){var s=t(e[i]);s!==r&&(n=n===r?s:n+s)}return n}function Yt(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}function Wt(e){return e?e.slice(0,ln(e)+1).replace(ne,\"\"):e}function $t(e){return function(t){return e(t)}}function Kt(e,t){return kt(t,function(t){return e[t]})}function Qt(e,t){return e.has(t)}function Zt(e,t){for(var n=-1,r=e.length;++n<r&&Ft(t,e[n],0)>-1;);return n}function Jt(e,t){for(var n=e.length;n--&&Ft(t,e[n],0)>-1;);return n}var Xt=Ht({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),en=Ht({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function tn(e){return\"\\\\\"+ot[e]}function nn(e){return Xe.test(e)}function rn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function on(e,t){return function(n){return e(t(n))}}function sn(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var a=e[n];a!==t&&a!==s||(e[n]=s,o[i++]=n)}return o}function an(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}function cn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=[e,e]}),n}function un(e){return nn(e)?function(e){for(var t=Ze.lastIndex=0;Ze.test(e);)++t;return t}(e):Lt(e)}function dn(e){return nn(e)?function(e){return e.match(Ze)||[]}(e):function(e){return e.split(\"\")}(e)}function ln(e){for(var t=e.length;t--&&re.test(e.charAt(t)););return t}var hn=Ht({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pn=function e(t){var n,re=(t=null==t?dt:pn.defaults(dt.Object(),t,pn.pick(dt,tt))).Array,be=t.Date,Se=t.Error,Ee=t.Function,Ce=t.Math,we=t.Object,Ie=t.RegExp,Oe=t.String,Pe=t.TypeError,Ae=re.prototype,Te=Ee.prototype,ke=we.prototype,xe=t[\"__core-js_shared__\"],Re=Te.toString,Me=ke.hasOwnProperty,Ne=0,Le=(n=/[^.]+$/.exec(xe&&xe.keys&&xe.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",De=ke.toString,je=Re.call(we),Fe=dt._,Ue=Ie(\"^\"+Re.call(Me).replace(ee,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Be=pt?t.Buffer:r,ze=t.Symbol,qe=t.Uint8Array,He=Be?Be.allocUnsafe:r,Ve=on(we.getPrototypeOf,we),Ge=we.create,Ye=ke.propertyIsEnumerable,We=Ae.splice,$e=ze?ze.isConcatSpreadable:r,Ze=ze?ze.iterator:r,Xe=ze?ze.toStringTag:r,ot=function(){try{var e=co(we,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),ct=t.clearTimeout!==dt.clearTimeout&&t.clearTimeout,ut=be&&be.now!==dt.Date.now&&be.now,lt=t.setTimeout!==dt.setTimeout&&t.setTimeout,ht=Ce.ceil,ft=Ce.floor,mt=we.getOwnPropertySymbols,Lt=Be?Be.isBuffer:r,Ht=t.isFinite,fn=Ae.join,mn=on(we.keys,we),yn=Ce.max,gn=Ce.min,_n=be.now,vn=t.parseInt,bn=Ce.random,Sn=Ae.reverse,En=co(t,\"DataView\"),Cn=co(t,\"Map\"),wn=co(t,\"Promise\"),In=co(t,\"Set\"),On=co(t,\"WeakMap\"),Pn=co(we,\"create\"),An=On&&new On,Tn={},kn=jo(En),xn=jo(Cn),Rn=jo(wn),Mn=jo(In),Nn=jo(On),Ln=ze?ze.prototype:r,Dn=Ln?Ln.valueOf:r,jn=Ln?Ln.toString:r;function Fn(e){if(ea(e)&&!Hs(e)&&!(e instanceof qn)){if(e instanceof zn)return e;if(Me.call(e,\"__wrapped__\"))return Fo(e)}return new zn(e)}var Un=function(){function e(){}return function(t){if(!Xs(t))return{};if(Ge)return Ge(t);e.prototype=t;var n=new e;return e.prototype=r,n}}();function Bn(){}function zn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=r}function qn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function Hn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Vn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Gn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Yn(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new Gn;++t<n;)this.add(e[t])}function Wn(e){var t=this.__data__=new Vn(e);this.size=t.size}function $n(e,t){var n=Hs(e),r=!n&&qs(e),i=!n&&!r&&Ws(e),o=!n&&!r&&!i&&ca(e),s=n||r||i||o,a=s?Yt(e.length,Oe):[],c=a.length;for(var u in e)!t&&!Me.call(e,u)||s&&(\"length\"==u||i&&(\"offset\"==u||\"parent\"==u)||o&&(\"buffer\"==u||\"byteLength\"==u||\"byteOffset\"==u)||yo(u,c))||a.push(u);return a}function Kn(e){var t=e.length;return t?e[Gr(0,t-1)]:r}function Qn(e,t){return Ro(Oi(e),or(t,0,e.length))}function Zn(e){return Ro(Oi(e))}function Jn(e,t,n){(n!==r&&!Us(e[t],n)||n===r&&!(t in e))&&rr(e,t,n)}function Xn(e,t,n){var i=e[t];Me.call(e,t)&&Us(i,n)&&(n!==r||t in e)||rr(e,t,n)}function er(e,t){for(var n=e.length;n--;)if(Us(e[n][0],t))return n;return-1}function tr(e,t,n,r){return dr(e,function(e,i,o){t(r,e,n(e),o)}),r}function nr(e,t){return e&&Pi(t,ka(t),e)}function rr(e,t,n){\"__proto__\"==t&&ot?ot(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function ir(e,t){for(var n=-1,i=t.length,o=re(i),s=null==e;++n<i;)o[n]=s?r:Ia(e,t[n]);return o}function or(e,t,n){return e==e&&(n!==r&&(e=e<=n?e:n),t!==r&&(e=e>=t?e:t)),e}function sr(e,t,n,i,o,s){var a,c=1&t,u=2&t,d=4&t;if(n&&(a=o?n(e,i,o,s):n(e)),a!==r)return a;if(!Xs(e))return e;var l=Hs(e);if(l){if(a=function(e){var t=e.length,n=new e.constructor(t);return t&&\"string\"==typeof e[0]&&Me.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}(e),!c)return Oi(e,a)}else{var h=ho(e),p=h==v||h==b;if(Ws(e))return bi(e,c);if(h==C||h==f||p&&!o){if(a=u||p?{}:fo(e),!c)return u?function(e,t){return Pi(e,lo(e),t)}(e,function(e,t){return e&&Pi(t,xa(t),e)}(a,e)):function(e,t){return Pi(e,uo(e),t)}(e,nr(a,e))}else{if(!it[h])return o?e:{};a=function(e,t,n){var r,i=e.constructor;switch(t){case k:return Si(e);case y:case g:return new i(+e);case x:return function(e,t){var n=t?Si(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case R:case M:case N:case L:case D:case j:case F:case U:case B:return Ei(e,n);case S:return new i;case E:case P:return new i(e);case I:return function(e){var t=new e.constructor(e.source,le.exec(e));return t.lastIndex=e.lastIndex,t}(e);case O:return new i;case A:return r=e,Dn?we(Dn.call(r)):{}}}(e,h,c)}}s||(s=new Wn);var m=s.get(e);if(m)return m;s.set(e,a),oa(e)?e.forEach(function(r){a.add(sr(r,t,n,r,e,s))}):ta(e)&&e.forEach(function(r,i){a.set(i,sr(r,t,n,i,e,s))});var _=l?r:(d?u?to:eo:u?xa:ka)(e);return wt(_||e,function(r,i){_&&(r=e[i=r]),Xn(a,i,sr(r,t,n,i,e,s))}),a}function ar(e,t,n){var i=n.length;if(null==e)return!i;for(e=we(e);i--;){var o=n[i],s=t[o],a=e[o];if(a===r&&!(o in e)||!s(a))return!1}return!0}function cr(e,t,n){if(\"function\"!=typeof e)throw new Pe(i);return Ao(function(){e.apply(r,n)},t)}function ur(e,t,n,r){var i=-1,o=At,s=!0,a=e.length,c=[],u=t.length;if(!a)return c;n&&(t=kt(t,$t(n))),r?(o=Tt,s=!1):t.length>=200&&(o=Qt,s=!1,t=new Yn(t));e:for(;++i<a;){var d=e[i],l=null==n?d:n(d);if(d=r||0!==d?d:0,s&&l==l){for(var h=u;h--;)if(t[h]===l)continue e;c.push(d)}else o(t,l,r)||c.push(d)}return c}Fn.templateSettings={escape:$,evaluate:K,interpolate:Q,variable:\"\",imports:{_:Fn}},Fn.prototype=Bn.prototype,Fn.prototype.constructor=Fn,zn.prototype=Un(Bn.prototype),zn.prototype.constructor=zn,qn.prototype=Un(Bn.prototype),qn.prototype.constructor=qn,Hn.prototype.clear=function(){this.__data__=Pn?Pn(null):{},this.size=0},Hn.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Hn.prototype.get=function(e){var t=this.__data__;if(Pn){var n=t[e];return n===o?r:n}return Me.call(t,e)?t[e]:r},Hn.prototype.has=function(e){var t=this.__data__;return Pn?t[e]!==r:Me.call(t,e)},Hn.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Pn&&t===r?o:t,this},Vn.prototype.clear=function(){this.__data__=[],this.size=0},Vn.prototype.delete=function(e){var t=this.__data__,n=er(t,e);return!(n<0||(n==t.length-1?t.pop():We.call(t,n,1),--this.size,0))},Vn.prototype.get=function(e){var t=this.__data__,n=er(t,e);return n<0?r:t[n][1]},Vn.prototype.has=function(e){return er(this.__data__,e)>-1},Vn.prototype.set=function(e,t){var n=this.__data__,r=er(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Gn.prototype.clear=function(){this.size=0,this.__data__={hash:new Hn,map:new(Cn||Vn),string:new Hn}},Gn.prototype.delete=function(e){var t=so(this,e).delete(e);return this.size-=t?1:0,t},Gn.prototype.get=function(e){return so(this,e).get(e)},Gn.prototype.has=function(e){return so(this,e).has(e)},Gn.prototype.set=function(e,t){var n=so(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Yn.prototype.add=Yn.prototype.push=function(e){return this.__data__.set(e,o),this},Yn.prototype.has=function(e){return this.__data__.has(e)},Wn.prototype.clear=function(){this.__data__=new Vn,this.size=0},Wn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Wn.prototype.get=function(e){return this.__data__.get(e)},Wn.prototype.has=function(e){return this.__data__.has(e)},Wn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Vn){var r=n.__data__;if(!Cn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Gn(r)}return n.set(e,t),this.size=n.size,this};var dr=ki(_r),lr=ki(vr,!0);function hr(e,t){var n=!0;return dr(e,function(e,r,i){return n=!!t(e,r,i)}),n}function pr(e,t,n){for(var i=-1,o=e.length;++i<o;){var s=e[i],a=t(s);if(null!=a&&(c===r?a==a&&!aa(a):n(a,c)))var c=a,u=s}return u}function fr(e,t){var n=[];return dr(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function mr(e,t,n,r,i){var o=-1,s=e.length;for(n||(n=mo),i||(i=[]);++o<s;){var a=e[o];t>0&&n(a)?t>1?mr(a,t-1,n,r,i):xt(i,a):r||(i[i.length]=a)}return i}var yr=xi(),gr=xi(!0);function _r(e,t){return e&&yr(e,t,ka)}function vr(e,t){return e&&gr(e,t,ka)}function br(e,t){return Pt(t,function(t){return Qs(e[t])})}function Sr(e,t){for(var n=0,i=(t=yi(t,e)).length;null!=e&&n<i;)e=e[Do(t[n++])];return n&&n==i?e:r}function Er(e,t,n){var r=t(e);return Hs(e)?r:xt(r,n(e))}function Cr(e){return null==e?e===r?\"[object Undefined]\":\"[object Null]\":Xe&&Xe in we(e)?function(e){var t=Me.call(e,Xe),n=e[Xe];try{e[Xe]=r;var i=!0}catch(e){}var o=De.call(e);return i&&(t?e[Xe]=n:delete e[Xe]),o}(e):function(e){return De.call(e)}(e)}function wr(e,t){return e>t}function Ir(e,t){return null!=e&&Me.call(e,t)}function Or(e,t){return null!=e&&t in we(e)}function Pr(e,t,n){for(var i=n?Tt:At,o=e[0].length,s=e.length,a=s,c=re(s),u=1/0,d=[];a--;){var l=e[a];a&&t&&(l=kt(l,$t(t))),u=gn(l.length,u),c[a]=!n&&(t||o>=120&&l.length>=120)?new Yn(a&&l):r}l=e[0];var h=-1,p=c[0];e:for(;++h<o&&d.length<u;){var f=l[h],m=t?t(f):f;if(f=n||0!==f?f:0,!(p?Qt(p,m):i(d,m,n))){for(a=s;--a;){var y=c[a];if(!(y?Qt(y,m):i(e[a],m,n)))continue e}p&&p.push(m),d.push(f)}}return d}function Ar(e,t,n){var i=null==(e=Io(e,t=yi(t,e)))?e:e[Do(Ko(t))];return null==i?r:Et(i,e,n)}function Tr(e){return ea(e)&&Cr(e)==f}function kr(e,t,n,i,o){return e===t||(null==e||null==t||!ea(e)&&!ea(t)?e!=e&&t!=t:function(e,t,n,i,o,s){var a=Hs(e),c=Hs(t),u=a?m:ho(e),d=c?m:ho(t),l=(u=u==f?C:u)==C,h=(d=d==f?C:d)==C,p=u==d;if(p&&Ws(e)){if(!Ws(t))return!1;a=!0,l=!1}if(p&&!l)return s||(s=new Wn),a||ca(e)?Ji(e,t,n,i,o,s):function(e,t,n,r,i,o,s){switch(n){case x:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case k:return!(e.byteLength!=t.byteLength||!o(new qe(e),new qe(t)));case y:case g:case E:return Us(+e,+t);case _:return e.name==t.name&&e.message==t.message;case I:case P:return e==t+\"\";case S:var a=rn;case O:var c=1&r;if(a||(a=an),e.size!=t.size&&!c)return!1;var u=s.get(e);if(u)return u==t;r|=2,s.set(e,t);var d=Ji(a(e),a(t),r,i,o,s);return s.delete(e),d;case A:if(Dn)return Dn.call(e)==Dn.call(t)}return!1}(e,t,u,n,i,o,s);if(!(1&n)){var v=l&&Me.call(e,\"__wrapped__\"),b=h&&Me.call(t,\"__wrapped__\");if(v||b){var w=v?e.value():e,T=b?t.value():t;return s||(s=new Wn),o(w,T,n,i,s)}}return!!p&&(s||(s=new Wn),function(e,t,n,i,o,s){var a=1&n,c=eo(e),u=c.length;if(u!=eo(t).length&&!a)return!1;for(var d=u;d--;){var l=c[d];if(!(a?l in t:Me.call(t,l)))return!1}var h=s.get(e),p=s.get(t);if(h&&p)return h==t&&p==e;var f=!0;s.set(e,t),s.set(t,e);for(var m=a;++d<u;){var y=e[l=c[d]],g=t[l];if(i)var _=a?i(g,y,l,t,e,s):i(y,g,l,e,t,s);if(!(_===r?y===g||o(y,g,n,i,s):_)){f=!1;break}m||(m=\"constructor\"==l)}if(f&&!m){var v=e.constructor,b=t.constructor;v==b||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof v&&v instanceof v&&\"function\"==typeof b&&b instanceof b||(f=!1)}return s.delete(e),s.delete(t),f}(e,t,n,i,o,s))}(e,t,n,i,kr,o))}function xr(e,t,n,i){var o=n.length,s=o,a=!i;if(null==e)return!s;for(e=we(e);o--;){var c=n[o];if(a&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++o<s;){var u=(c=n[o])[0],d=e[u],l=c[1];if(a&&c[2]){if(d===r&&!(u in e))return!1}else{var h=new Wn;if(i)var p=i(d,l,u,e,t,h);if(!(p===r?kr(l,d,3,i,h):p))return!1}}return!0}function Rr(e){return!(!Xs(e)||(t=e,Le&&Le in t))&&(Qs(e)?Ue:fe).test(jo(e));var t}function Mr(e){return\"function\"==typeof e?e:null==e?nc:\"object\"==typeof e?Hs(e)?Fr(e[0],e[1]):jr(e):lc(e)}function Nr(e){if(!So(e))return mn(e);var t=[];for(var n in we(e))Me.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}function Lr(e,t){return e<t}function Dr(e,t){var n=-1,r=Gs(e)?re(e.length):[];return dr(e,function(e,i,o){r[++n]=t(e,i,o)}),r}function jr(e){var t=ao(e);return 1==t.length&&t[0][2]?Co(t[0][0],t[0][1]):function(n){return n===e||xr(n,e,t)}}function Fr(e,t){return _o(e)&&Eo(t)?Co(Do(e),t):function(n){var i=Ia(n,e);return i===r&&i===t?Oa(n,e):kr(t,i,3)}}function Ur(e,t,n,i,o){e!==t&&yr(t,function(s,a){if(o||(o=new Wn),Xs(s))!function(e,t,n,i,o,s,a){var c=Oo(e,n),u=Oo(t,n),d=a.get(u);if(d)Jn(e,n,d);else{var l=s?s(c,u,n+\"\",e,t,a):r,h=l===r;if(h){var p=Hs(u),f=!p&&Ws(u),m=!p&&!f&&ca(u);l=u,p||f||m?Hs(c)?l=c:Ys(c)?l=Oi(c):f?(h=!1,l=bi(u,!0)):m?(h=!1,l=Ei(u,!0)):l=[]:ra(u)||qs(u)?(l=c,qs(c)?l=ya(c):Xs(c)&&!Qs(c)||(l=fo(u))):h=!1}h&&(a.set(u,l),o(l,u,i,s,a),a.delete(u)),Jn(e,n,l)}}(e,t,a,n,Ur,i,o);else{var c=i?i(Oo(e,a),s,a+\"\",e,t,o):r;c===r&&(c=s),Jn(e,a,c)}},xa)}function Br(e,t){var n=e.length;if(n)return yo(t+=t<0?n:0,n)?e[t]:r}function zr(e,t,n){t=t.length?kt(t,function(e){return Hs(e)?function(t){return Sr(t,1===e.length?e[0]:e)}:e}):[nc];var r=-1;t=kt(t,$t(oo()));var i=Dr(e,function(e,n,i){var o=kt(t,function(t){return t(e)});return{criteria:o,index:++r,value:e}});return function(e){var t=e.length;for(e.sort(function(e,t){return function(e,t,n){for(var r=-1,i=e.criteria,o=t.criteria,s=i.length,a=n.length;++r<s;){var c=Ci(i[r],o[r]);if(c)return r>=a?c:c*(\"desc\"==n[r]?-1:1)}return e.index-t.index}(e,t,n)});t--;)e[t]=e[t].value;return e}(i)}function qr(e,t,n){for(var r=-1,i=t.length,o={};++r<i;){var s=t[r],a=Sr(e,s);n(a,s)&&Qr(o,yi(s,e),a)}return o}function Hr(e,t,n,r){var i=r?Ut:Ft,o=-1,s=t.length,a=e;for(e===t&&(t=Oi(t)),n&&(a=kt(e,$t(n)));++o<s;)for(var c=0,u=t[o],d=n?n(u):u;(c=i(a,d,c,r))>-1;)a!==e&&We.call(a,c,1),We.call(e,c,1);return e}function Vr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==o){var o=i;yo(i)?We.call(e,i,1):ci(e,i)}}return e}function Gr(e,t){return e+ft(bn()*(t-e+1))}function Yr(e,t){var n=\"\";if(!e||t<1||t>d)return n;do{t%2&&(n+=e),(t=ft(t/2))&&(e+=e)}while(t);return n}function Wr(e,t){return To(wo(e,t,nc),e+\"\")}function $r(e){return Kn(Ua(e))}function Kr(e,t){var n=Ua(e);return Ro(n,or(t,0,n.length))}function Qr(e,t,n,i){if(!Xs(e))return e;for(var o=-1,s=(t=yi(t,e)).length,a=s-1,c=e;null!=c&&++o<s;){var u=Do(t[o]),d=n;if(\"__proto__\"===u||\"constructor\"===u||\"prototype\"===u)return e;if(o!=a){var l=c[u];(d=i?i(l,u,c):r)===r&&(d=Xs(l)?l:yo(t[o+1])?[]:{})}Xn(c,u,d),c=c[u]}return e}var Zr=An?function(e,t){return An.set(e,t),e}:nc,Jr=ot?function(e,t){return ot(e,\"toString\",{configurable:!0,enumerable:!1,value:Xa(t),writable:!0})}:nc;function Xr(e){return Ro(Ua(e))}function ei(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=re(i);++r<i;)o[r]=e[r+t];return o}function ti(e,t){var n;return dr(e,function(e,r,i){return!(n=t(e,r,i))}),!!n}function ni(e,t,n){var r=0,i=null==e?r:e.length;if(\"number\"==typeof t&&t==t&&i<=2147483647){for(;r<i;){var o=r+i>>>1,s=e[o];null!==s&&!aa(s)&&(n?s<=t:s<t)?r=o+1:i=o}return i}return ri(e,t,nc,n)}function ri(e,t,n,i){var o=0,s=null==e?0:e.length;if(0===s)return 0;for(var a=(t=n(t))!=t,c=null===t,u=aa(t),d=t===r;o<s;){var l=ft((o+s)/2),h=n(e[l]),p=h!==r,f=null===h,m=h==h,y=aa(h);if(a)var g=i||m;else g=d?m&&(i||p):c?m&&p&&(i||!f):u?m&&p&&!f&&(i||!y):!f&&!y&&(i?h<=t:h<t);g?o=l+1:s=l}return gn(s,4294967294)}function ii(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var s=e[n],a=t?t(s):s;if(!n||!Us(a,c)){var c=a;o[i++]=0===s?0:s}}return o}function oi(e){return\"number\"==typeof e?e:aa(e)?l:+e}function si(e){if(\"string\"==typeof e)return e;if(Hs(e))return kt(e,si)+\"\";if(aa(e))return jn?jn.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function ai(e,t,n){var r=-1,i=At,o=e.length,s=!0,a=[],c=a;if(n)s=!1,i=Tt;else if(o>=200){var u=t?null:Yi(e);if(u)return an(u);s=!1,i=Qt,c=new Yn}else c=t?[]:a;e:for(;++r<o;){var d=e[r],l=t?t(d):d;if(d=n||0!==d?d:0,s&&l==l){for(var h=c.length;h--;)if(c[h]===l)continue e;t&&c.push(l),a.push(d)}else i(c,l,n)||(c!==a&&c.push(l),a.push(d))}return a}function ci(e,t){var n=-1,r=(t=yi(t,e)).length;if(!r)return!0;for(;++n<r;){var i=Do(t[n]);if(\"__proto__\"===i&&!Me.call(e,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Io(e,t);return null==o||delete o[Do(Ko(t))]}function ui(e,t,n,r){return Qr(e,t,n(Sr(e,t)),r)}function di(e,t,n,r){for(var i=e.length,o=r?i:-1;(r?o--:++o<i)&&t(e[o],o,e););return n?ei(e,r?0:o,r?o+1:i):ei(e,r?o+1:0,r?i:o)}function li(e,t){var n=e;return n instanceof qn&&(n=n.value()),Rt(t,function(e,t){return t.func.apply(t.thisArg,xt([e],t.args))},n)}function hi(e,t,n){var r=e.length;if(r<2)return r?ai(e[0]):[];for(var i=-1,o=re(r);++i<r;)for(var s=e[i],a=-1;++a<r;)a!=i&&(o[i]=ur(o[i]||s,e[a],t,n));return ai(mr(o,1),t,n)}function pi(e,t,n){for(var i=-1,o=e.length,s=t.length,a={};++i<o;){var c=i<s?t[i]:r;n(a,e[i],c)}return a}function fi(e){return Ys(e)?e:[]}function mi(e){return\"function\"==typeof e?e:nc}function yi(e,t){return Hs(e)?e:_o(e,t)?[e]:Lo(ga(e))}var gi=Wr;function _i(e,t,n){var i=e.length;return n=n===r?i:n,!t&&n>=i?e:ei(e,t,n)}var vi=ct||function(e){return dt.clearTimeout(e)};function bi(e,t){if(t)return e.slice();var n=e.length,r=He?He(n):new e.constructor(n);return e.copy(r),r}function Si(e){var t=new e.constructor(e.byteLength);return new qe(t).set(new qe(e)),t}function Ei(e,t){var n=t?Si(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function Ci(e,t){if(e!==t){var n=e!==r,i=null===e,o=e==e,s=aa(e),a=t!==r,c=null===t,u=t==t,d=aa(t);if(!c&&!d&&!s&&e>t||s&&a&&u&&!c&&!d||i&&a&&u||!n&&u||!o)return 1;if(!i&&!s&&!d&&e<t||d&&n&&o&&!i&&!s||c&&n&&o||!a&&o||!u)return-1}return 0}function wi(e,t,n,r){for(var i=-1,o=e.length,s=n.length,a=-1,c=t.length,u=yn(o-s,0),d=re(c+u),l=!r;++a<c;)d[a]=t[a];for(;++i<s;)(l||i<o)&&(d[n[i]]=e[i]);for(;u--;)d[a++]=e[i++];return d}function Ii(e,t,n,r){for(var i=-1,o=e.length,s=-1,a=n.length,c=-1,u=t.length,d=yn(o-a,0),l=re(d+u),h=!r;++i<d;)l[i]=e[i];for(var p=i;++c<u;)l[p+c]=t[c];for(;++s<a;)(h||i<o)&&(l[p+n[s]]=e[i++]);return l}function Oi(e,t){var n=-1,r=e.length;for(t||(t=re(r));++n<r;)t[n]=e[n];return t}function Pi(e,t,n,i){var o=!n;n||(n={});for(var s=-1,a=t.length;++s<a;){var c=t[s],u=i?i(n[c],e[c],c,n,e):r;u===r&&(u=e[c]),o?rr(n,c,u):Xn(n,c,u)}return n}function Ai(e,t){return function(n,r){var i=Hs(n)?Ct:tr,o=t?t():{};return i(n,e,oo(r,2),o)}}function Ti(e){return Wr(function(t,n){var i=-1,o=n.length,s=o>1?n[o-1]:r,a=o>2?n[2]:r;for(s=e.length>3&&\"function\"==typeof s?(o--,s):r,a&&go(n[0],n[1],a)&&(s=o<3?r:s,o=1),t=we(t);++i<o;){var c=n[i];c&&e(t,c,i,s)}return t})}function ki(e,t){return function(n,r){if(null==n)return n;if(!Gs(n))return e(n,r);for(var i=n.length,o=t?i:-1,s=we(n);(t?o--:++o<i)&&!1!==r(s[o],o,s););return n}}function xi(e){return function(t,n,r){for(var i=-1,o=we(t),s=r(t),a=s.length;a--;){var c=s[e?a:++i];if(!1===n(o[c],c,o))break}return t}}function Ri(e){return function(t){var n=nn(t=ga(t))?dn(t):r,i=n?n[0]:t.charAt(0),o=n?_i(n,1).join(\"\"):t.slice(1);return i[e]()+o}}function Mi(e){return function(t){return Rt(Qa(qa(t).replace(Ke,\"\")),e,\"\")}}function Ni(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=Un(e.prototype),r=e.apply(n,t);return Xs(r)?r:n}}function Li(e){return function(t,n,i){var o=we(t);if(!Gs(t)){var s=oo(n,3);t=ka(t),n=function(e){return s(o[e],e,o)}}var a=e(t,n,i);return a>-1?o[s?t[a]:a]:r}}function Di(e){return Xi(function(t){var n=t.length,o=n,s=zn.prototype.thru;for(e&&t.reverse();o--;){var a=t[o];if(\"function\"!=typeof a)throw new Pe(i);if(s&&!c&&\"wrapper\"==ro(a))var c=new zn([],!0)}for(o=c?o:n;++o<n;){var u=ro(a=t[o]),d=\"wrapper\"==u?no(a):r;c=d&&vo(d[0])&&424==d[1]&&!d[4].length&&1==d[9]?c[ro(d[0])].apply(c,d[3]):1==a.length&&vo(a)?c[u]():c.thru(a)}return function(){var e=arguments,r=e[0];if(c&&1==e.length&&Hs(r))return c.plant(r).value();for(var i=0,o=n?t[i].apply(this,e):r;++i<n;)o=t[i].call(this,o);return o}})}function ji(e,t,n,i,o,s,a,u,d,l){var h=t&c,p=1&t,f=2&t,m=24&t,y=512&t,g=f?r:Ni(e);return function c(){for(var _=arguments.length,v=re(_),b=_;b--;)v[b]=arguments[b];if(m)var S=io(c),E=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}(v,S);if(i&&(v=wi(v,i,o,m)),s&&(v=Ii(v,s,a,m)),_-=E,m&&_<l){var C=sn(v,S);return Vi(e,t,ji,c.placeholder,n,v,C,u,d,l-_)}var w=p?n:this,I=f?w[e]:e;return _=v.length,u?v=function(e,t){for(var n=e.length,i=gn(t.length,n),o=Oi(e);i--;){var s=t[i];e[i]=yo(s,n)?o[s]:r}return e}(v,u):y&&_>1&&v.reverse(),h&&d<_&&(v.length=d),this&&this!==dt&&this instanceof c&&(I=g||Ni(I)),I.apply(w,v)}}function Fi(e,t){return function(n,r){return function(e,t,n,r){return _r(e,function(e,i,o){t(r,n(e),i,o)}),r}(n,e,t(r),{})}}function Ui(e,t){return function(n,i){var o;if(n===r&&i===r)return t;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=si(n),i=si(i)):(n=oi(n),i=oi(i)),o=e(n,i)}return o}}function Bi(e){return Xi(function(t){return t=kt(t,$t(oo())),Wr(function(n){var r=this;return e(t,function(e){return Et(e,r,n)})})})}function zi(e,t){var n=(t=t===r?\" \":si(t)).length;if(n<2)return n?Yr(t,e):t;var i=Yr(t,ht(e/un(t)));return nn(t)?_i(dn(i),0,e).join(\"\"):i.slice(0,e)}function qi(e){return function(t,n,i){return i&&\"number\"!=typeof i&&go(t,n,i)&&(n=i=r),t=ha(t),n===r?(n=t,t=0):n=ha(n),function(e,t,n,r){for(var i=-1,o=yn(ht((t-e)/(n||1)),0),s=re(o);o--;)s[r?o:++i]=e,e+=n;return s}(t,n,i=i===r?t<n?1:-1:ha(i),e)}}function Hi(e){return function(t,n){return\"string\"==typeof t&&\"string\"==typeof n||(t=ma(t),n=ma(n)),e(t,n)}}function Vi(e,t,n,i,o,s,c,u,d,l){var h=8&t;t|=h?a:64,4&(t&=~(h?64:a))||(t&=-4);var p=[e,t,o,h?s:r,h?c:r,h?r:s,h?r:c,u,d,l],f=n.apply(r,p);return vo(e)&&Po(f,p),f.placeholder=i,ko(f,e,t)}function Gi(e){var t=Ce[e];return function(e,n){if(e=ma(e),(n=null==n?0:gn(pa(n),292))&&Ht(e)){var r=(ga(e)+\"e\").split(\"e\");return+((r=(ga(t(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return t(e)}}var Yi=In&&1/an(new In([,-0]))[1]==u?function(e){return new In(e)}:ac;function Wi(e){return function(t){var n=ho(t);return n==S?rn(t):n==O?cn(t):function(e,t){return kt(t,function(t){return[t,e[t]]})}(t,e(t))}}function $i(e,t,n,o,u,d,l,h){var p=2&t;if(!p&&\"function\"!=typeof e)throw new Pe(i);var f=o?o.length:0;if(f||(t&=-97,o=u=r),l=l===r?l:yn(pa(l),0),h=h===r?h:pa(h),f-=u?u.length:0,64&t){var m=o,y=u;o=u=r}var g=p?r:no(e),_=[e,t,n,o,u,m,y,d,l,h];if(g&&function(e,t){var n=e[1],r=t[1],i=n|r,o=i<131,a=r==c&&8==n||r==c&&256==n&&e[7].length<=t[8]||384==r&&t[7].length<=t[8]&&8==n;if(!o&&!a)return e;1&r&&(e[2]=t[2],i|=1&n?0:4);var u=t[3];if(u){var d=e[3];e[3]=d?wi(d,u,t[4]):u,e[4]=d?sn(e[3],s):t[4]}(u=t[5])&&(d=e[5],e[5]=d?Ii(d,u,t[6]):u,e[6]=d?sn(e[5],s):t[6]),(u=t[7])&&(e[7]=u),r&c&&(e[8]=null==e[8]?t[8]:gn(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=i}(_,g),e=_[0],t=_[1],n=_[2],o=_[3],u=_[4],!(h=_[9]=_[9]===r?p?0:e.length:yn(_[9]-f,0))&&24&t&&(t&=-25),t&&1!=t)v=8==t||16==t?function(e,t,n){var i=Ni(e);return function o(){for(var s=arguments.length,a=re(s),c=s,u=io(o);c--;)a[c]=arguments[c];var d=s<3&&a[0]!==u&&a[s-1]!==u?[]:sn(a,u);return(s-=d.length)<n?Vi(e,t,ji,o.placeholder,r,a,d,r,r,n-s):Et(this&&this!==dt&&this instanceof o?i:e,this,a)}}(e,t,h):t!=a&&33!=t||u.length?ji.apply(r,_):function(e,t,n,r){var i=1&t,o=Ni(e);return function t(){for(var s=-1,a=arguments.length,c=-1,u=r.length,d=re(u+a),l=this&&this!==dt&&this instanceof t?o:e;++c<u;)d[c]=r[c];for(;a--;)d[c++]=arguments[++s];return Et(l,i?n:this,d)}}(e,t,n,o);else var v=function(e,t,n){var r=1&t,i=Ni(e);return function t(){return(this&&this!==dt&&this instanceof t?i:e).apply(r?n:this,arguments)}}(e,t,n);return ko((g?Zr:Po)(v,_),e,t)}function Ki(e,t,n,i){return e===r||Us(e,ke[n])&&!Me.call(i,n)?t:e}function Qi(e,t,n,i,o,s){return Xs(e)&&Xs(t)&&(s.set(t,e),Ur(e,t,r,Qi,s),s.delete(t)),e}function Zi(e){return ra(e)?r:e}function Ji(e,t,n,i,o,s){var a=1&n,c=e.length,u=t.length;if(c!=u&&!(a&&u>c))return!1;var d=s.get(e),l=s.get(t);if(d&&l)return d==t&&l==e;var h=-1,p=!0,f=2&n?new Yn:r;for(s.set(e,t),s.set(t,e);++h<c;){var m=e[h],y=t[h];if(i)var g=a?i(y,m,h,t,e,s):i(m,y,h,e,t,s);if(g!==r){if(g)continue;p=!1;break}if(f){if(!Nt(t,function(e,t){if(!Qt(f,t)&&(m===e||o(m,e,n,i,s)))return f.push(t)})){p=!1;break}}else if(m!==y&&!o(m,y,n,i,s)){p=!1;break}}return s.delete(e),s.delete(t),p}function Xi(e){return To(wo(e,r,Vo),e+\"\")}function eo(e){return Er(e,ka,uo)}function to(e){return Er(e,xa,lo)}var no=An?function(e){return An.get(e)}:ac;function ro(e){for(var t=e.name+\"\",n=Tn[t],r=Me.call(Tn,t)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==e)return i.name}return t}function io(e){return(Me.call(Fn,\"placeholder\")?Fn:e).placeholder}function oo(){var e=Fn.iteratee||rc;return e=e===rc?Mr:e,arguments.length?e(arguments[0],arguments[1]):e}function so(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function ao(e){for(var t=ka(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,Eo(i)]}return t}function co(e,t){var n=function(e,t){return null==e?r:e[t]}(e,t);return Rr(n)?n:r}var uo=mt?function(e){return null==e?[]:(e=we(e),Pt(mt(e),function(t){return Ye.call(e,t)}))}:fc,lo=mt?function(e){for(var t=[];e;)xt(t,uo(e)),e=Ve(e);return t}:fc,ho=Cr;function po(e,t,n){for(var r=-1,i=(t=yi(t,e)).length,o=!1;++r<i;){var s=Do(t[r]);if(!(o=null!=e&&n(e,s)))break;e=e[s]}return o||++r!=i?o:!!(i=null==e?0:e.length)&&Js(i)&&yo(s,i)&&(Hs(e)||qs(e))}function fo(e){return\"function\"!=typeof e.constructor||So(e)?{}:Un(Ve(e))}function mo(e){return Hs(e)||qs(e)||!!($e&&e&&e[$e])}function yo(e,t){var n=typeof e;return!!(t=t??d)&&(\"number\"==n||\"symbol\"!=n&&ye.test(e))&&e>-1&&e%1==0&&e<t}function go(e,t,n){if(!Xs(n))return!1;var r=typeof t;return!!(\"number\"==r?Gs(n)&&yo(t,n.length):\"string\"==r&&t in n)&&Us(n[t],e)}function _o(e,t){if(Hs(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!aa(e))||J.test(e)||!Z.test(e)||null!=t&&e in we(t)}function vo(e){var t=ro(e),n=Fn[t];if(\"function\"!=typeof n||!(t in qn.prototype))return!1;if(e===n)return!0;var r=no(n);return!!r&&e===r[0]}(En&&ho(new En(new ArrayBuffer(1)))!=x||Cn&&ho(new Cn)!=S||wn&&ho(wn.resolve())!=w||In&&ho(new In)!=O||On&&ho(new On)!=T)&&(ho=function(e){var t=Cr(e),n=t==C?e.constructor:r,i=n?jo(n):\"\";if(i)switch(i){case kn:return x;case xn:return S;case Rn:return w;case Mn:return O;case Nn:return T}return t});var bo=xe?Qs:mc;function So(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||ke)}function Eo(e){return e==e&&!Xs(e)}function Co(e,t){return function(n){return null!=n&&n[e]===t&&(t!==r||e in we(n))}}function wo(e,t,n){return t=yn(t===r?e.length-1:t,0),function(){for(var r=arguments,i=-1,o=yn(r.length-t,0),s=re(o);++i<o;)s[i]=r[t+i];i=-1;for(var a=re(t+1);++i<t;)a[i]=r[i];return a[t]=n(s),Et(e,this,a)}}function Io(e,t){return t.length<2?e:Sr(e,ei(t,0,-1))}function Oo(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var Po=xo(Zr),Ao=lt||function(e,t){return dt.setTimeout(e,t)},To=xo(Jr);function ko(e,t,n){var r=t+\"\";return To(e,function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(n>1?\"& \":\"\")+t[r],t=t.join(n>2?\", \":\" \"),e.replace(ie,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(r,function(e,t){return wt(p,function(n){var r=\"_.\"+n[0];t&n[1]&&!At(e,r)&&e.push(r)}),e.sort()}(function(e){var t=e.match(oe);return t?t[1].split(se):[]}(r),n)))}function xo(e){var t=0,n=0;return function(){var i=_n(),o=16-(i-n);if(n=i,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(r,arguments)}}function Ro(e,t){var n=-1,i=e.length,o=i-1;for(t=t===r?i:t;++n<t;){var s=Gr(n,o),a=e[s];e[s]=e[n],e[n]=a}return e.length=t,e}var Mo,No,Lo=(Mo=Ms(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(X,function(e,n,r,i){t.push(r?i.replace(ue,\"$1\"):n||e)}),t},function(e){return 500===No.size&&No.clear(),e}),No=Mo.cache,Mo);function Do(e){if(\"string\"==typeof e||aa(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function jo(e){if(null!=e){try{return Re.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}function Fo(e){if(e instanceof qn)return e.clone();var t=new zn(e.__wrapped__,e.__chain__);return t.__actions__=Oi(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var Uo=Wr(function(e,t){return Ys(e)?ur(e,mr(t,1,Ys,!0)):[]}),Bo=Wr(function(e,t){var n=Ko(t);return Ys(n)&&(n=r),Ys(e)?ur(e,mr(t,1,Ys,!0),oo(n,2)):[]}),zo=Wr(function(e,t){var n=Ko(t);return Ys(n)&&(n=r),Ys(e)?ur(e,mr(t,1,Ys,!0),r,n):[]});function qo(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:pa(n);return i<0&&(i=yn(r+i,0)),jt(e,oo(t,3),i)}function Ho(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var o=i-1;return n!==r&&(o=pa(n),o=n<0?yn(i+o,0):gn(o,i-1)),jt(e,oo(t,3),o,!0)}function Vo(e){return null!=e&&e.length?mr(e,1):[]}function Go(e){return e&&e.length?e[0]:r}var Yo=Wr(function(e){var t=kt(e,fi);return t.length&&t[0]===e[0]?Pr(t):[]}),Wo=Wr(function(e){var t=Ko(e),n=kt(e,fi);return t===Ko(n)?t=r:n.pop(),n.length&&n[0]===e[0]?Pr(n,oo(t,2)):[]}),$o=Wr(function(e){var t=Ko(e),n=kt(e,fi);return(t=\"function\"==typeof t?t:r)&&n.pop(),n.length&&n[0]===e[0]?Pr(n,r,t):[]});function Ko(e){var t=null==e?0:e.length;return t?e[t-1]:r}var Qo=Wr(Zo);function Zo(e,t){return e&&e.length&&t&&t.length?Hr(e,t):e}var Jo=Xi(function(e,t){var n=null==e?0:e.length,r=ir(e,t);return Vr(e,kt(t,function(e){return yo(e,n)?+e:e}).sort(Ci)),r});function Xo(e){return null==e?e:Sn.call(e)}var es=Wr(function(e){return ai(mr(e,1,Ys,!0))}),ts=Wr(function(e){var t=Ko(e);return Ys(t)&&(t=r),ai(mr(e,1,Ys,!0),oo(t,2))}),ns=Wr(function(e){var t=Ko(e);return t=\"function\"==typeof t?t:r,ai(mr(e,1,Ys,!0),r,t)});function rs(e){if(!e||!e.length)return[];var t=0;return e=Pt(e,function(e){if(Ys(e))return t=yn(e.length,t),!0}),Yt(t,function(t){return kt(e,qt(t))})}function is(e,t){if(!e||!e.length)return[];var n=rs(e);return null==t?n:kt(n,function(e){return Et(t,r,e)})}var os=Wr(function(e,t){return Ys(e)?ur(e,t):[]}),ss=Wr(function(e){return hi(Pt(e,Ys))}),as=Wr(function(e){var t=Ko(e);return Ys(t)&&(t=r),hi(Pt(e,Ys),oo(t,2))}),cs=Wr(function(e){var t=Ko(e);return t=\"function\"==typeof t?t:r,hi(Pt(e,Ys),r,t)}),us=Wr(rs),ds=Wr(function(e){var t=e.length,n=t>1?e[t-1]:r;return n=\"function\"==typeof n?(e.pop(),n):r,is(e,n)});function ls(e){var t=Fn(e);return t.__chain__=!0,t}function hs(e,t){return t(e)}var ps=Xi(function(e){var t=e.length,n=t?e[0]:0,i=this.__wrapped__,o=function(t){return ir(t,e)};return!(t>1||this.__actions__.length)&&i instanceof qn&&yo(n)?((i=i.slice(n,+n+(t?1:0))).__actions__.push({func:hs,args:[o],thisArg:r}),new zn(i,this.__chain__).thru(function(e){return t&&!e.length&&e.push(r),e})):this.thru(o)}),fs=Ai(function(e,t,n){Me.call(e,n)?++e[n]:rr(e,n,1)}),ms=Li(qo),ys=Li(Ho);function gs(e,t){return(Hs(e)?wt:dr)(e,oo(t,3))}function _s(e,t){return(Hs(e)?It:lr)(e,oo(t,3))}var vs=Ai(function(e,t,n){Me.call(e,n)?e[n].push(t):rr(e,n,[t])}),bs=Wr(function(e,t,n){var r=-1,i=\"function\"==typeof t,o=Gs(e)?re(e.length):[];return dr(e,function(e){o[++r]=i?Et(t,e,n):Ar(e,t,n)}),o}),Ss=Ai(function(e,t,n){rr(e,n,t)});function Es(e,t){return(Hs(e)?kt:Dr)(e,oo(t,3))}var Cs=Ai(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]}),ws=Wr(function(e,t){if(null==e)return[];var n=t.length;return n>1&&go(e,t[0],t[1])?t=[]:n>2&&go(t[0],t[1],t[2])&&(t=[t[0]]),zr(e,mr(t,1),[])}),Is=ut||function(){return dt.Date.now()};function Os(e,t,n){return t=n?r:t,t=e&&null==t?e.length:t,$i(e,c,r,r,r,r,t)}function Ps(e,t){var n;if(\"function\"!=typeof t)throw new Pe(i);return e=pa(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=r),n}}var As=Wr(function(e,t,n){var r=1;if(n.length){var i=sn(n,io(As));r|=a}return $i(e,r,t,n,i)}),Ts=Wr(function(e,t,n){var r=3;if(n.length){var i=sn(n,io(Ts));r|=a}return $i(t,r,e,n,i)});function ks(e,t,n){var o,s,a,c,u,d,l=0,h=!1,p=!1,f=!0;if(\"function\"!=typeof e)throw new Pe(i);function m(t){var n=o,i=s;return o=s=r,l=t,c=e.apply(i,n)}function y(e){var n=e-d;return d===r||n>=t||n<0||p&&e-l>=a}function g(){var e=Is();if(y(e))return _(e);u=Ao(g,function(e){var n=t-(e-d);return p?gn(n,a-(e-l)):n}(e))}function _(e){return u=r,f&&o?m(e):(o=s=r,c)}function v(){var e=Is(),n=y(e);if(o=arguments,s=this,d=e,n){if(u===r)return function(e){return l=e,u=Ao(g,t),h?m(e):c}(d);if(p)return vi(u),u=Ao(g,t),m(d)}return u===r&&(u=Ao(g,t)),c}return t=ma(t)||0,Xs(n)&&(h=!!n.leading,a=(p=\"maxWait\"in n)?yn(ma(n.maxWait)||0,t):a,f=\"trailing\"in n?!!n.trailing:f),v.cancel=function(){u!==r&&vi(u),l=0,o=d=s=u=r},v.flush=function(){return u===r?c:_(Is())},v}var xs=Wr(function(e,t){return cr(e,1,t)}),Rs=Wr(function(e,t,n){return cr(e,ma(t)||0,n)});function Ms(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new Pe(i);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var s=e.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(Ms.Cache||Gn),n}function Ns(e){if(\"function\"!=typeof e)throw new Pe(i);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}Ms.Cache=Gn;var Ls=gi(function(e,t){var n=(t=1==t.length&&Hs(t[0])?kt(t[0],$t(oo())):kt(mr(t,1),$t(oo()))).length;return Wr(function(r){for(var i=-1,o=gn(r.length,n);++i<o;)r[i]=t[i].call(this,r[i]);return Et(e,this,r)})}),Ds=Wr(function(e,t){var n=sn(t,io(Ds));return $i(e,a,r,t,n)}),js=Wr(function(e,t){var n=sn(t,io(js));return $i(e,64,r,t,n)}),Fs=Xi(function(e,t){return $i(e,256,r,r,r,t)});function Us(e,t){return e===t||e!=e&&t!=t}var Bs=Hi(wr),zs=Hi(function(e,t){return e>=t}),qs=Tr(function(){return arguments}())?Tr:function(e){return ea(e)&&Me.call(e,\"callee\")&&!Ye.call(e,\"callee\")},Hs=re.isArray,Vs=yt?$t(yt):function(e){return ea(e)&&Cr(e)==k};function Gs(e){return null!=e&&Js(e.length)&&!Qs(e)}function Ys(e){return ea(e)&&Gs(e)}var Ws=Lt||mc,$s=gt?$t(gt):function(e){return ea(e)&&Cr(e)==g};function Ks(e){if(!ea(e))return!1;var t=Cr(e);return t==_||\"[object DOMException]\"==t||\"string\"==typeof e.message&&\"string\"==typeof e.name&&!ra(e)}function Qs(e){if(!Xs(e))return!1;var t=Cr(e);return t==v||t==b||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function Zs(e){return\"number\"==typeof e&&e==pa(e)}function Js(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=d}function Xs(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function ea(e){return null!=e&&\"object\"==typeof e}var ta=_t?$t(_t):function(e){return ea(e)&&ho(e)==S};function na(e){return\"number\"==typeof e||ea(e)&&Cr(e)==E}function ra(e){if(!ea(e)||Cr(e)!=C)return!1;var t=Ve(e);if(null===t)return!0;var n=Me.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&Re.call(n)==je}var ia=vt?$t(vt):function(e){return ea(e)&&Cr(e)==I},oa=bt?$t(bt):function(e){return ea(e)&&ho(e)==O};function sa(e){return\"string\"==typeof e||!Hs(e)&&ea(e)&&Cr(e)==P}function aa(e){return\"symbol\"==typeof e||ea(e)&&Cr(e)==A}var ca=St?$t(St):function(e){return ea(e)&&Js(e.length)&&!!rt[Cr(e)]},ua=Hi(Lr),da=Hi(function(e,t){return e<=t});function la(e){if(!e)return[];if(Gs(e))return sa(e)?dn(e):Oi(e);if(Ze&&e[Ze])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Ze]());var t=ho(e);return(t==S?rn:t==O?an:Ua)(e)}function ha(e){return e?(e=ma(e))===u||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function pa(e){var t=ha(e),n=t%1;return t==t?n?t-n:t:0}function fa(e){return e?or(pa(e),0,h):0}function ma(e){if(\"number\"==typeof e)return e;if(aa(e))return l;if(Xs(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=Xs(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=Wt(e);var n=pe.test(e);return n||me.test(e)?at(e.slice(2),n?2:8):he.test(e)?l:+e}function ya(e){return Pi(e,xa(e))}function ga(e){return null==e?\"\":si(e)}var _a=Ti(function(e,t){if(So(t)||Gs(t))Pi(t,ka(t),e);else for(var n in t)Me.call(t,n)&&Xn(e,n,t[n])}),va=Ti(function(e,t){Pi(t,xa(t),e)}),ba=Ti(function(e,t,n,r){Pi(t,xa(t),e,r)}),Sa=Ti(function(e,t,n,r){Pi(t,ka(t),e,r)}),Ea=Xi(ir),Ca=Wr(function(e,t){e=we(e);var n=-1,i=t.length,o=i>2?t[2]:r;for(o&&go(t[0],t[1],o)&&(i=1);++n<i;)for(var s=t[n],a=xa(s),c=-1,u=a.length;++c<u;){var d=a[c],l=e[d];(l===r||Us(l,ke[d])&&!Me.call(e,d))&&(e[d]=s[d])}return e}),wa=Wr(function(e){return e.push(r,Qi),Et(Ma,r,e)});function Ia(e,t,n){var i=null==e?r:Sr(e,t);return i===r?n:i}function Oa(e,t){return null!=e&&po(e,t,Or)}var Pa=Fi(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=De.call(t)),e[t]=n},Xa(nc)),Aa=Fi(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=De.call(t)),Me.call(e,t)?e[t].push(n):e[t]=[n]},oo),Ta=Wr(Ar);function ka(e){return Gs(e)?$n(e):Nr(e)}function xa(e){return Gs(e)?$n(e,!0):function(e){if(!Xs(e))return function(e){var t=[];if(null!=e)for(var n in we(e))t.push(n);return t}(e);var t=So(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&Me.call(e,r))&&n.push(r);return n}(e)}var Ra=Ti(function(e,t,n){Ur(e,t,n)}),Ma=Ti(function(e,t,n,r){Ur(e,t,n,r)}),Na=Xi(function(e,t){var n={};if(null==e)return n;var r=!1;t=kt(t,function(t){return t=yi(t,e),r||(r=t.length>1),t}),Pi(e,to(e),n),r&&(n=sr(n,7,Zi));for(var i=t.length;i--;)ci(n,t[i]);return n}),La=Xi(function(e,t){return null==e?{}:function(e,t){return qr(e,t,function(t,n){return Oa(e,n)})}(e,t)});function Da(e,t){if(null==e)return{};var n=kt(to(e),function(e){return[e]});return t=oo(t),qr(e,n,function(e,n){return t(e,n[0])})}var ja=Wi(ka),Fa=Wi(xa);function Ua(e){return null==e?[]:Kt(e,ka(e))}var Ba=Mi(function(e,t,n){return t=t.toLowerCase(),e+(n?za(t):t)});function za(e){return Ka(ga(e).toLowerCase())}function qa(e){return(e=ga(e))&&e.replace(ge,Xt).replace(Qe,\"\")}var Ha=Mi(function(e,t,n){return e+(n?\"-\":\"\")+t.toLowerCase()}),Va=Mi(function(e,t,n){return e+(n?\" \":\"\")+t.toLowerCase()}),Ga=Ri(\"toLowerCase\"),Ya=Mi(function(e,t,n){return e+(n?\"_\":\"\")+t.toLowerCase()}),Wa=Mi(function(e,t,n){return e+(n?\" \":\"\")+Ka(t)}),$a=Mi(function(e,t,n){return e+(n?\" \":\"\")+t.toUpperCase()}),Ka=Ri(\"toUpperCase\");function Qa(e,t,n){return e=ga(e),(t=n?r:t)===r?function(e){return et.test(e)}(e)?function(e){return e.match(Je)||[]}(e):function(e){return e.match(ae)||[]}(e):e.match(t)||[]}var Za=Wr(function(e,t){try{return Et(e,r,t)}catch(e){return Ks(e)?e:new Se(e)}}),Ja=Xi(function(e,t){return wt(t,function(t){t=Do(t),rr(e,t,As(e[t],e))}),e});function Xa(e){return function(){return e}}var ec=Di(),tc=Di(!0);function nc(e){return e}function rc(e){return Mr(\"function\"==typeof e?e:sr(e,1))}var ic=Wr(function(e,t){return function(n){return Ar(n,e,t)}}),oc=Wr(function(e,t){return function(n){return Ar(e,n,t)}});function sc(e,t,n){var r=ka(t),i=br(t,r);null!=n||Xs(t)&&(i.length||!r.length)||(n=t,t=e,e=this,i=br(t,ka(t)));var o=!(Xs(n)&&\"chain\"in n&&!n.chain),s=Qs(e);return wt(i,function(n){var r=t[n];e[n]=r,s&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__);return(n.__actions__=Oi(this.__actions__)).push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,xt([this.value()],arguments))})}),e}function ac(){}var cc=Bi(kt),uc=Bi(Ot),dc=Bi(Nt);function lc(e){return _o(e)?qt(Do(e)):function(e){return function(t){return Sr(t,e)}}(e)}var hc=qi(),pc=qi(!0);function fc(){return[]}function mc(){return!1}var yc,gc=Ui(function(e,t){return e+t},0),_c=Gi(\"ceil\"),vc=Ui(function(e,t){return e/t},1),bc=Gi(\"floor\"),Sc=Ui(function(e,t){return e*t},1),Ec=Gi(\"round\"),Cc=Ui(function(e,t){return e-t},0);return Fn.after=function(e,t){if(\"function\"!=typeof t)throw new Pe(i);return e=pa(e),function(){if(--e<1)return t.apply(this,arguments)}},Fn.ary=Os,Fn.assign=_a,Fn.assignIn=va,Fn.assignInWith=ba,Fn.assignWith=Sa,Fn.at=Ea,Fn.before=Ps,Fn.bind=As,Fn.bindAll=Ja,Fn.bindKey=Ts,Fn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Hs(e)?e:[e]},Fn.chain=ls,Fn.chunk=function(e,t,n){t=(n?go(e,t,n):t===r)?1:yn(pa(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var o=0,s=0,a=re(ht(i/t));o<i;)a[s++]=ei(e,o,o+=t);return a},Fn.compact=function(e){for(var t=-1,n=null==e?0:e.length,r=0,i=[];++t<n;){var o=e[t];o&&(i[r++]=o)}return i},Fn.concat=function(){var e=arguments.length;if(!e)return[];for(var t=re(e-1),n=arguments[0],r=e;r--;)t[r-1]=arguments[r];return xt(Hs(n)?Oi(n):[n],mr(t,1))},Fn.cond=function(e){var t=null==e?0:e.length,n=oo();return e=t?kt(e,function(e){if(\"function\"!=typeof e[1])throw new Pe(i);return[n(e[0]),e[1]]}):[],Wr(function(n){for(var r=-1;++r<t;){var i=e[r];if(Et(i[0],this,n))return Et(i[1],this,n)}})},Fn.conforms=function(e){return function(e){var t=ka(e);return function(n){return ar(n,e,t)}}(sr(e,1))},Fn.constant=Xa,Fn.countBy=fs,Fn.create=function(e,t){var n=Un(e);return null==t?n:nr(n,t)},Fn.curry=function e(t,n,i){var o=$i(t,8,r,r,r,r,r,n=i?r:n);return o.placeholder=e.placeholder,o},Fn.curryRight=function e(t,n,i){var o=$i(t,16,r,r,r,r,r,n=i?r:n);return o.placeholder=e.placeholder,o},Fn.debounce=ks,Fn.defaults=Ca,Fn.defaultsDeep=wa,Fn.defer=xs,Fn.delay=Rs,Fn.difference=Uo,Fn.differenceBy=Bo,Fn.differenceWith=zo,Fn.drop=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,(t=n||t===r?1:pa(t))<0?0:t,i):[]},Fn.dropRight=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,0,(t=i-(t=n||t===r?1:pa(t)))<0?0:t):[]},Fn.dropRightWhile=function(e,t){return e&&e.length?di(e,oo(t,3),!0,!0):[]},Fn.dropWhile=function(e,t){return e&&e.length?di(e,oo(t,3),!0):[]},Fn.fill=function(e,t,n,i){var o=null==e?0:e.length;return o?(n&&\"number\"!=typeof n&&go(e,t,n)&&(n=0,i=o),function(e,t,n,i){var o=e.length;for((n=pa(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:pa(i))<0&&(i+=o),i=n>i?0:fa(i);n<i;)e[n++]=t;return e}(e,t,n,i)):[]},Fn.filter=function(e,t){return(Hs(e)?Pt:fr)(e,oo(t,3))},Fn.flatMap=function(e,t){return mr(Es(e,t),1)},Fn.flatMapDeep=function(e,t){return mr(Es(e,t),u)},Fn.flatMapDepth=function(e,t,n){return n=n===r?1:pa(n),mr(Es(e,t),n)},Fn.flatten=Vo,Fn.flattenDeep=function(e){return null!=e&&e.length?mr(e,u):[]},Fn.flattenDepth=function(e,t){return null!=e&&e.length?mr(e,t=t===r?1:pa(t)):[]},Fn.flip=function(e){return $i(e,512)},Fn.flow=ec,Fn.flowRight=tc,Fn.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,r={};++t<n;){var i=e[t];rr(r,i[0],i[1])}return r},Fn.functions=function(e){return null==e?[]:br(e,ka(e))},Fn.functionsIn=function(e){return null==e?[]:br(e,xa(e))},Fn.groupBy=vs,Fn.initial=function(e){return null!=e&&e.length?ei(e,0,-1):[]},Fn.intersection=Yo,Fn.intersectionBy=Wo,Fn.intersectionWith=$o,Fn.invert=Pa,Fn.invertBy=Aa,Fn.invokeMap=bs,Fn.iteratee=rc,Fn.keyBy=Ss,Fn.keys=ka,Fn.keysIn=xa,Fn.map=Es,Fn.mapKeys=function(e,t){var n={};return t=oo(t,3),_r(e,function(e,r,i){rr(n,t(e,r,i),e)}),n},Fn.mapValues=function(e,t){var n={};return t=oo(t,3),_r(e,function(e,r,i){rr(n,r,t(e,r,i))}),n},Fn.matches=function(e){return jr(sr(e,1))},Fn.matchesProperty=function(e,t){return Fr(e,sr(t,1))},Fn.memoize=Ms,Fn.merge=Ra,Fn.mergeWith=Ma,Fn.method=ic,Fn.methodOf=oc,Fn.mixin=sc,Fn.negate=Ns,Fn.nthArg=function(e){return e=pa(e),Wr(function(t){return Br(t,e)})},Fn.omit=Na,Fn.omitBy=function(e,t){return Da(e,Ns(oo(t)))},Fn.once=function(e){return Ps(2,e)},Fn.orderBy=function(e,t,n,i){return null==e?[]:(Hs(t)||(t=null==t?[]:[t]),Hs(n=i?r:n)||(n=null==n?[]:[n]),zr(e,t,n))},Fn.over=cc,Fn.overArgs=Ls,Fn.overEvery=uc,Fn.overSome=dc,Fn.partial=Ds,Fn.partialRight=js,Fn.partition=Cs,Fn.pick=La,Fn.pickBy=Da,Fn.property=lc,Fn.propertyOf=function(e){return function(t){return null==e?r:Sr(e,t)}},Fn.pull=Qo,Fn.pullAll=Zo,Fn.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?Hr(e,t,oo(n,2)):e},Fn.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?Hr(e,t,r,n):e},Fn.pullAt=Jo,Fn.range=hc,Fn.rangeRight=pc,Fn.rearg=Fs,Fn.reject=function(e,t){return(Hs(e)?Pt:fr)(e,Ns(oo(t,3)))},Fn.remove=function(e,t){var n=[];if(!e||!e.length)return n;var r=-1,i=[],o=e.length;for(t=oo(t,3);++r<o;){var s=e[r];t(s,r,e)&&(n.push(s),i.push(r))}return Vr(e,i),n},Fn.rest=function(e,t){if(\"function\"!=typeof e)throw new Pe(i);return Wr(e,t=t===r?t:pa(t))},Fn.reverse=Xo,Fn.sampleSize=function(e,t,n){return t=(n?go(e,t,n):t===r)?1:pa(t),(Hs(e)?Qn:Kr)(e,t)},Fn.set=function(e,t,n){return null==e?e:Qr(e,t,n)},Fn.setWith=function(e,t,n,i){return i=\"function\"==typeof i?i:r,null==e?e:Qr(e,t,n,i)},Fn.shuffle=function(e){return(Hs(e)?Zn:Xr)(e)},Fn.slice=function(e,t,n){var i=null==e?0:e.length;return i?(n&&\"number\"!=typeof n&&go(e,t,n)?(t=0,n=i):(t=null==t?0:pa(t),n=n===r?i:pa(n)),ei(e,t,n)):[]},Fn.sortBy=ws,Fn.sortedUniq=function(e){return e&&e.length?ii(e):[]},Fn.sortedUniqBy=function(e,t){return e&&e.length?ii(e,oo(t,2)):[]},Fn.split=function(e,t,n){return n&&\"number\"!=typeof n&&go(e,t,n)&&(t=n=r),(n=n===r?h:n>>>0)?(e=ga(e))&&(\"string\"==typeof t||null!=t&&!ia(t))&&!(t=si(t))&&nn(e)?_i(dn(e),0,n):e.split(t,n):[]},Fn.spread=function(e,t){if(\"function\"!=typeof e)throw new Pe(i);return t=null==t?0:yn(pa(t),0),Wr(function(n){var r=n[t],i=_i(n,0,t);return r&&xt(i,r),Et(e,this,i)})},Fn.tail=function(e){var t=null==e?0:e.length;return t?ei(e,1,t):[]},Fn.take=function(e,t,n){return e&&e.length?ei(e,0,(t=n||t===r?1:pa(t))<0?0:t):[]},Fn.takeRight=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,(t=i-(t=n||t===r?1:pa(t)))<0?0:t,i):[]},Fn.takeRightWhile=function(e,t){return e&&e.length?di(e,oo(t,3),!1,!0):[]},Fn.takeWhile=function(e,t){return e&&e.length?di(e,oo(t,3)):[]},Fn.tap=function(e,t){return t(e),e},Fn.throttle=function(e,t,n){var r=!0,o=!0;if(\"function\"!=typeof e)throw new Pe(i);return Xs(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),ks(e,t,{leading:r,maxWait:t,trailing:o})},Fn.thru=hs,Fn.toArray=la,Fn.toPairs=ja,Fn.toPairsIn=Fa,Fn.toPath=function(e){return Hs(e)?kt(e,Do):aa(e)?[e]:Oi(Lo(ga(e)))},Fn.toPlainObject=ya,Fn.transform=function(e,t,n){var r=Hs(e),i=r||Ws(e)||ca(e);if(t=oo(t,4),null==n){var o=e&&e.constructor;n=i?r?new o:[]:Xs(e)&&Qs(o)?Un(Ve(e)):{}}return(i?wt:_r)(e,function(e,r,i){return t(n,e,r,i)}),n},Fn.unary=function(e){return Os(e,1)},Fn.union=es,Fn.unionBy=ts,Fn.unionWith=ns,Fn.uniq=function(e){return e&&e.length?ai(e):[]},Fn.uniqBy=function(e,t){return e&&e.length?ai(e,oo(t,2)):[]},Fn.uniqWith=function(e,t){return t=\"function\"==typeof t?t:r,e&&e.length?ai(e,r,t):[]},Fn.unset=function(e,t){return null==e||ci(e,t)},Fn.unzip=rs,Fn.unzipWith=is,Fn.update=function(e,t,n){return null==e?e:ui(e,t,mi(n))},Fn.updateWith=function(e,t,n,i){return i=\"function\"==typeof i?i:r,null==e?e:ui(e,t,mi(n),i)},Fn.values=Ua,Fn.valuesIn=function(e){return null==e?[]:Kt(e,xa(e))},Fn.without=os,Fn.words=Qa,Fn.wrap=function(e,t){return Ds(mi(t),e)},Fn.xor=ss,Fn.xorBy=as,Fn.xorWith=cs,Fn.zip=us,Fn.zipObject=function(e,t){return pi(e||[],t||[],Xn)},Fn.zipObjectDeep=function(e,t){return pi(e||[],t||[],Qr)},Fn.zipWith=ds,Fn.entries=ja,Fn.entriesIn=Fa,Fn.extend=va,Fn.extendWith=ba,sc(Fn,Fn),Fn.add=gc,Fn.attempt=Za,Fn.camelCase=Ba,Fn.capitalize=za,Fn.ceil=_c,Fn.clamp=function(e,t,n){return n===r&&(n=t,t=r),n!==r&&(n=(n=ma(n))==n?n:0),t!==r&&(t=(t=ma(t))==t?t:0),or(ma(e),t,n)},Fn.clone=function(e){return sr(e,4)},Fn.cloneDeep=function(e){return sr(e,5)},Fn.cloneDeepWith=function(e,t){return sr(e,5,t=\"function\"==typeof t?t:r)},Fn.cloneWith=function(e,t){return sr(e,4,t=\"function\"==typeof t?t:r)},Fn.conformsTo=function(e,t){return null==t||ar(e,t,ka(t))},Fn.deburr=qa,Fn.defaultTo=function(e,t){return null==e||e!=e?t:e},Fn.divide=vc,Fn.endsWith=function(e,t,n){e=ga(e),t=si(t);var i=e.length,o=n=n===r?i:or(pa(n),0,i);return(n-=t.length)>=0&&e.slice(n,o)==t},Fn.eq=Us,Fn.escape=function(e){return(e=ga(e))&&W.test(e)?e.replace(G,en):e},Fn.escapeRegExp=function(e){return(e=ga(e))&&te.test(e)?e.replace(ee,\"\\\\$&\"):e},Fn.every=function(e,t,n){var i=Hs(e)?Ot:hr;return n&&go(e,t,n)&&(t=r),i(e,oo(t,3))},Fn.find=ms,Fn.findIndex=qo,Fn.findKey=function(e,t){return Dt(e,oo(t,3),_r)},Fn.findLast=ys,Fn.findLastIndex=Ho,Fn.findLastKey=function(e,t){return Dt(e,oo(t,3),vr)},Fn.floor=bc,Fn.forEach=gs,Fn.forEachRight=_s,Fn.forIn=function(e,t){return null==e?e:yr(e,oo(t,3),xa)},Fn.forInRight=function(e,t){return null==e?e:gr(e,oo(t,3),xa)},Fn.forOwn=function(e,t){return e&&_r(e,oo(t,3))},Fn.forOwnRight=function(e,t){return e&&vr(e,oo(t,3))},Fn.get=Ia,Fn.gt=Bs,Fn.gte=zs,Fn.has=function(e,t){return null!=e&&po(e,t,Ir)},Fn.hasIn=Oa,Fn.head=Go,Fn.identity=nc,Fn.includes=function(e,t,n,r){e=Gs(e)?e:Ua(e),n=n&&!r?pa(n):0;var i=e.length;return n<0&&(n=yn(i+n,0)),sa(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&Ft(e,t,n)>-1},Fn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:pa(n);return i<0&&(i=yn(r+i,0)),Ft(e,t,i)},Fn.inRange=function(e,t,n){return t=ha(t),n===r?(n=t,t=0):n=ha(n),function(e,t,n){return e>=gn(t,n)&&e<yn(t,n)}(e=ma(e),t,n)},Fn.invoke=Ta,Fn.isArguments=qs,Fn.isArray=Hs,Fn.isArrayBuffer=Vs,Fn.isArrayLike=Gs,Fn.isArrayLikeObject=Ys,Fn.isBoolean=function(e){return!0===e||!1===e||ea(e)&&Cr(e)==y},Fn.isBuffer=Ws,Fn.isDate=$s,Fn.isElement=function(e){return ea(e)&&1===e.nodeType&&!ra(e)},Fn.isEmpty=function(e){if(null==e)return!0;if(Gs(e)&&(Hs(e)||\"string\"==typeof e||\"function\"==typeof e.splice||Ws(e)||ca(e)||qs(e)))return!e.length;var t=ho(e);if(t==S||t==O)return!e.size;if(So(e))return!Nr(e).length;for(var n in e)if(Me.call(e,n))return!1;return!0},Fn.isEqual=function(e,t){return kr(e,t)},Fn.isEqualWith=function(e,t,n){var i=(n=\"function\"==typeof n?n:r)?n(e,t):r;return i===r?kr(e,t,r,n):!!i},Fn.isError=Ks,Fn.isFinite=function(e){return\"number\"==typeof e&&Ht(e)},Fn.isFunction=Qs,Fn.isInteger=Zs,Fn.isLength=Js,Fn.isMap=ta,Fn.isMatch=function(e,t){return e===t||xr(e,t,ao(t))},Fn.isMatchWith=function(e,t,n){return n=\"function\"==typeof n?n:r,xr(e,t,ao(t),n)},Fn.isNaN=function(e){return na(e)&&e!=+e},Fn.isNative=function(e){if(bo(e))throw new Se(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Rr(e)},Fn.isNil=function(e){return null==e},Fn.isNull=function(e){return null===e},Fn.isNumber=na,Fn.isObject=Xs,Fn.isObjectLike=ea,Fn.isPlainObject=ra,Fn.isRegExp=ia,Fn.isSafeInteger=function(e){return Zs(e)&&e>=-9007199254740991&&e<=d},Fn.isSet=oa,Fn.isString=sa,Fn.isSymbol=aa,Fn.isTypedArray=ca,Fn.isUndefined=function(e){return e===r},Fn.isWeakMap=function(e){return ea(e)&&ho(e)==T},Fn.isWeakSet=function(e){return ea(e)&&\"[object WeakSet]\"==Cr(e)},Fn.join=function(e,t){return null==e?\"\":fn.call(e,t)},Fn.kebabCase=Ha,Fn.last=Ko,Fn.lastIndexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=pa(n))<0?yn(i+o,0):gn(o,i-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,o):jt(e,Bt,o,!0)},Fn.lowerCase=Va,Fn.lowerFirst=Ga,Fn.lt=ua,Fn.lte=da,Fn.max=function(e){return e&&e.length?pr(e,nc,wr):r},Fn.maxBy=function(e,t){return e&&e.length?pr(e,oo(t,2),wr):r},Fn.mean=function(e){return zt(e,nc)},Fn.meanBy=function(e,t){return zt(e,oo(t,2))},Fn.min=function(e){return e&&e.length?pr(e,nc,Lr):r},Fn.minBy=function(e,t){return e&&e.length?pr(e,oo(t,2),Lr):r},Fn.stubArray=fc,Fn.stubFalse=mc,Fn.stubObject=function(){return{}},Fn.stubString=function(){return\"\"},Fn.stubTrue=function(){return!0},Fn.multiply=Sc,Fn.nth=function(e,t){return e&&e.length?Br(e,pa(t)):r},Fn.noConflict=function(){return dt._===this&&(dt._=Fe),this},Fn.noop=ac,Fn.now=Is,Fn.pad=function(e,t,n){e=ga(e);var r=(t=pa(t))?un(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return zi(ft(i),n)+e+zi(ht(i),n)},Fn.padEnd=function(e,t,n){e=ga(e);var r=(t=pa(t))?un(e):0;return t&&r<t?e+zi(t-r,n):e},Fn.padStart=function(e,t,n){e=ga(e);var r=(t=pa(t))?un(e):0;return t&&r<t?zi(t-r,n)+e:e},Fn.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),vn(ga(e).replace(ne,\"\"),t||0)},Fn.random=function(e,t,n){if(n&&\"boolean\"!=typeof n&&go(e,t,n)&&(t=n=r),n===r&&(\"boolean\"==typeof t?(n=t,t=r):\"boolean\"==typeof e&&(n=e,e=r)),e===r&&t===r?(e=0,t=1):(e=ha(e),t===r?(t=e,e=0):t=ha(t)),e>t){var i=e;e=t,t=i}if(n||e%1||t%1){var o=bn();return gn(e+o*(t-e+st(\"1e-\"+((o+\"\").length-1))),t)}return Gr(e,t)},Fn.reduce=function(e,t,n){var r=Hs(e)?Rt:Vt,i=arguments.length<3;return r(e,oo(t,4),n,i,dr)},Fn.reduceRight=function(e,t,n){var r=Hs(e)?Mt:Vt,i=arguments.length<3;return r(e,oo(t,4),n,i,lr)},Fn.repeat=function(e,t,n){return t=(n?go(e,t,n):t===r)?1:pa(t),Yr(ga(e),t)},Fn.replace=function(){var e=arguments,t=ga(e[0]);return e.length<3?t:t.replace(e[1],e[2])},Fn.result=function(e,t,n){var i=-1,o=(t=yi(t,e)).length;for(o||(o=1,e=r);++i<o;){var s=null==e?r:e[Do(t[i])];s===r&&(i=o,s=n),e=Qs(s)?s.call(e):s}return e},Fn.round=Ec,Fn.runInContext=e,Fn.sample=function(e){return(Hs(e)?Kn:$r)(e)},Fn.size=function(e){if(null==e)return 0;if(Gs(e))return sa(e)?un(e):e.length;var t=ho(e);return t==S||t==O?e.size:Nr(e).length},Fn.snakeCase=Ya,Fn.some=function(e,t,n){var i=Hs(e)?Nt:ti;return n&&go(e,t,n)&&(t=r),i(e,oo(t,3))},Fn.sortedIndex=function(e,t){return ni(e,t)},Fn.sortedIndexBy=function(e,t,n){return ri(e,t,oo(n,2))},Fn.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var r=ni(e,t);if(r<n&&Us(e[r],t))return r}return-1},Fn.sortedLastIndex=function(e,t){return ni(e,t,!0)},Fn.sortedLastIndexBy=function(e,t,n){return ri(e,t,oo(n,2),!0)},Fn.sortedLastIndexOf=function(e,t){if(null!=e&&e.length){var n=ni(e,t,!0)-1;if(Us(e[n],t))return n}return-1},Fn.startCase=Wa,Fn.startsWith=function(e,t,n){return e=ga(e),n=null==n?0:or(pa(n),0,e.length),t=si(t),e.slice(n,n+t.length)==t},Fn.subtract=Cc,Fn.sum=function(e){return e&&e.length?Gt(e,nc):0},Fn.sumBy=function(e,t){return e&&e.length?Gt(e,oo(t,2)):0},Fn.template=function(e,t,n){var i=Fn.templateSettings;n&&go(e,t,n)&&(t=r),e=ga(e),t=Sa({},t,i,Ki);var o=Sa({},t.imports,i.imports,Ki),s=ka(o),a=Kt(o,s);wt(s,function(e){if(ce.test(e))throw new Se(\"Invalid `imports` option passed into `_.template`\")});var c,u,d=0,l=t.interpolate||_e,h=\"__p += '\",p=Ie((t.escape||_e).source+\"|\"+l.source+\"|\"+(l===Q?de:_e).source+\"|\"+(t.evaluate||_e).source+\"|$\",\"g\"),f=\"//# sourceURL=\"+(Me.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++nt+\"]\")+\"\\n\";e.replace(p,function(t,n,r,i,o,s){return r||(r=i),h+=e.slice(d,s).replace(ve,tn),n&&(c=!0,h+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(u=!0,h+=\"';\\n\"+o+\";\\n__p += '\"),r&&(h+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),d=s+t.length,t}),h+=\"';\\n\";var m=Me.call(t,\"variable\")&&t.variable;if(m){if(ce.test(m))throw new Se(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(u?h.replace(z,\"\"):h).replace(q,\"$1\").replace(H,\"$1;\"),h=\"function(\"+(m||\"obj\")+\") {\\n\"+(m?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(u?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var y=Za(function(){return Ee(s,f+\"return \"+h).apply(r,a)});if(y.source=h,Ks(y))throw y;return y},Fn.times=function(e,t){if((e=pa(e))<1||e>d)return[];var n=h,r=gn(e,h);t=oo(t),e-=h;for(var i=Yt(r,t);++n<e;)t(n);return i},Fn.toFinite=ha,Fn.toInteger=pa,Fn.toLength=fa,Fn.toLower=function(e){return ga(e).toLowerCase()},Fn.toNumber=ma,Fn.toSafeInteger=function(e){return e?or(pa(e),-9007199254740991,d):0===e?e:0},Fn.toString=ga,Fn.toUpper=function(e){return ga(e).toUpperCase()},Fn.trim=function(e,t,n){if((e=ga(e))&&(n||t===r))return Wt(e);if(!e||!(t=si(t)))return e;var i=dn(e),o=dn(t);return _i(i,Zt(i,o),Jt(i,o)+1).join(\"\")},Fn.trimEnd=function(e,t,n){if((e=ga(e))&&(n||t===r))return e.slice(0,ln(e)+1);if(!e||!(t=si(t)))return e;var i=dn(e);return _i(i,0,Jt(i,dn(t))+1).join(\"\")},Fn.trimStart=function(e,t,n){if((e=ga(e))&&(n||t===r))return e.replace(ne,\"\");if(!e||!(t=si(t)))return e;var i=dn(e);return _i(i,Zt(i,dn(t))).join(\"\")},Fn.truncate=function(e,t){var n=30,i=\"...\";if(Xs(t)){var o=\"separator\"in t?t.separator:o;n=\"length\"in t?pa(t.length):n,i=\"omission\"in t?si(t.omission):i}var s=(e=ga(e)).length;if(nn(e)){var a=dn(e);s=a.length}if(n>=s)return e;var c=n-un(i);if(c<1)return i;var u=a?_i(a,0,c).join(\"\"):e.slice(0,c);if(o===r)return u+i;if(a&&(c+=u.length-c),ia(o)){if(e.slice(c).search(o)){var d,l=u;for(o.global||(o=Ie(o.source,ga(le.exec(o))+\"g\")),o.lastIndex=0;d=o.exec(l);)var h=d.index;u=u.slice(0,h===r?c:h)}}else if(e.indexOf(si(o),c)!=c){var p=u.lastIndexOf(o);p>-1&&(u=u.slice(0,p))}return u+i},Fn.unescape=function(e){return(e=ga(e))&&Y.test(e)?e.replace(V,hn):e},Fn.uniqueId=function(e){var t=++Ne;return ga(e)+t},Fn.upperCase=$a,Fn.upperFirst=Ka,Fn.each=gs,Fn.eachRight=_s,Fn.first=Go,sc(Fn,(yc={},_r(Fn,function(e,t){Me.call(Fn.prototype,t)||(yc[t]=e)}),yc),{chain:!1}),Fn.VERSION=\"4.18.1\",wt([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(e){Fn[e].placeholder=Fn}),wt([\"drop\",\"take\"],function(e,t){qn.prototype[e]=function(n){n=n===r?1:yn(pa(n),0);var i=this.__filtered__&&!t?new qn(this):this.clone();return i.__filtered__?i.__takeCount__=gn(n,i.__takeCount__):i.__views__.push({size:gn(n,h),type:e+(i.__dir__<0?\"Right\":\"\")}),i},qn.prototype[e+\"Right\"]=function(t){return this.reverse()[e](t).reverse()}}),wt([\"filter\",\"map\",\"takeWhile\"],function(e,t){var n=t+1,r=1==n||3==n;qn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:oo(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}}),wt([\"head\",\"last\"],function(e,t){var n=\"take\"+(t?\"Right\":\"\");qn.prototype[e]=function(){return this[n](1).value()[0]}}),wt([\"initial\",\"tail\"],function(e,t){var n=\"drop\"+(t?\"\":\"Right\");qn.prototype[e]=function(){return this.__filtered__?new qn(this):this[n](1)}}),qn.prototype.compact=function(){return this.filter(nc)},qn.prototype.find=function(e){return this.filter(e).head()},qn.prototype.findLast=function(e){return this.reverse().find(e)},qn.prototype.invokeMap=Wr(function(e,t){return\"function\"==typeof e?new qn(this):this.map(function(n){return Ar(n,e,t)})}),qn.prototype.reject=function(e){return this.filter(Ns(oo(e)))},qn.prototype.slice=function(e,t){e=pa(e);var n=this;return n.__filtered__&&(e>0||t<0)?new qn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==r&&(n=(t=pa(t))<0?n.dropRight(-t):n.take(t-e)),n)},qn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},qn.prototype.toArray=function(){return this.take(h)},_r(qn.prototype,function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),o=Fn[i?\"take\"+(\"last\"==t?\"Right\":\"\"):t],s=i||/^find/.test(t);o&&(Fn.prototype[t]=function(){var t=this.__wrapped__,a=i?[1]:arguments,c=t instanceof qn,u=a[0],d=c||Hs(t),l=function(e){var t=o.apply(Fn,xt([e],a));return i&&h?t[0]:t};d&&n&&\"function\"==typeof u&&1!=u.length&&(c=d=!1);var h=this.__chain__,p=!!this.__actions__.length,f=s&&!h,m=c&&!p;if(!s&&d){t=m?t:new qn(this);var y=e.apply(t,a);return y.__actions__.push({func:hs,args:[l],thisArg:r}),new zn(y,h)}return f&&m?e.apply(this,a):(y=this.thru(l),f?i?y.value()[0]:y.value():y)})}),wt([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(e){var t=Ae[e],n=/^(?:push|sort|unshift)$/.test(e)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(e);Fn.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(Hs(i)?i:[],e)}return this[n](function(n){return t.apply(Hs(n)?n:[],e)})}}),_r(qn.prototype,function(e,t){var n=Fn[t];if(n){var r=n.name+\"\";Me.call(Tn,r)||(Tn[r]=[]),Tn[r].push({name:t,func:n})}}),Tn[ji(r,2).name]=[{name:\"wrapper\",func:r}],qn.prototype.clone=function(){var e=new qn(this.__wrapped__);return e.__actions__=Oi(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Oi(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Oi(this.__views__),e},qn.prototype.reverse=function(){if(this.__filtered__){var e=new qn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},qn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Hs(e),r=t<0,i=n?e.length:0,o=function(e,t,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],s=o.size;switch(o.type){case\"drop\":e+=s;break;case\"dropRight\":t-=s;break;case\"take\":t=gn(t,e+s);break;case\"takeRight\":e=yn(e,t-s)}}return{start:e,end:t}}(0,i,this.__views__),s=o.start,a=o.end,c=a-s,u=r?a:s-1,d=this.__iteratees__,l=d.length,h=0,p=gn(c,this.__takeCount__);if(!n||!r&&i==c&&p==c)return li(e,this.__actions__);var f=[];e:for(;c--&&h<p;){for(var m=-1,y=e[u+=t];++m<l;){var g=d[m],_=g.iteratee,v=g.type,b=_(y);if(2==v)y=b;else if(!b){if(1==v)continue e;break e}}f[h++]=y}return f},Fn.prototype.at=ps,Fn.prototype.chain=function(){return ls(this)},Fn.prototype.commit=function(){return new zn(this.value(),this.__chain__)},Fn.prototype.next=function(){this.__values__===r&&(this.__values__=la(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?r:this.__values__[this.__index__++]}},Fn.prototype.plant=function(e){for(var t,n=this;n instanceof Bn;){var i=Fo(n);i.__index__=0,i.__values__=r,t?o.__wrapped__=i:t=i;var o=i;n=n.__wrapped__}return o.__wrapped__=e,t},Fn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof qn){var t=e;return this.__actions__.length&&(t=new qn(this)),(t=t.reverse()).__actions__.push({func:hs,args:[Xo],thisArg:r}),new zn(t,this.__chain__)}return this.thru(Xo)},Fn.prototype.toJSON=Fn.prototype.valueOf=Fn.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},Fn.prototype.first=Fn.prototype.head,Ze&&(Fn.prototype[Ze]=function(){return this}),Fn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(dt._=pn,define(function(){return pn})):ht?((ht.exports=pn)._=pn,lt._=pn):dt._=pn}.call(this)},4475(e){\"use strict\";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String(\"abc\");if(e[5]=\"de\",\"5\"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(\"\"))return!1;var r={};return\"abcdefghijklmnopqrst\".split(\"\").forEach(function(e){r[e]=e}),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},r)).join(\"\")}catch(e){return!1}}()?Object.assign:function(e,i){for(var o,s,a=function(e){if(null==e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}(e),c=1;c<arguments.length;c++){for(var u in o=Object(arguments[c]))n.call(o,u)&&(a[u]=o[u]);if(t){s=t(o);for(var d=0;d<s.length;d++)r.call(o,s[d])&&(a[s[d]]=o[s[d]])}}return a}},2586(e,t,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),s=n(3814),a=Symbol(\"encodeFragmentIdentifier\");function c(e){if(\"string\"!=typeof e||1!==e.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function u(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}function d(e,t){return t.decode?i(e):e}function l(e){return Array.isArray(e)?e.sort():\"object\"==typeof e?l(Object.keys(e)).sort((e,t)=>Number(e)-Number(t)).map(t=>e[t]):e}function h(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function p(e){const t=(e=h(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function f(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&\"string\"==typeof e&&\"\"!==e.trim()?e=Number(e):!t.parseBooleans||null===e||\"true\"!==e.toLowerCase()&&\"false\"!==e.toLowerCase()||(e=\"true\"===e.toLowerCase()),e}function m(e,t){c((t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,n,r)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case\"bracket\":return(e,n,r)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case\"colon-list-separator\":return(e,n,r)=>{t=/(:list)$/.exec(e),e=e.replace(/:list$/,\"\"),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case\"comma\":case\"separator\":return(t,n,r)=>{const i=\"string\"==typeof n&&n.includes(e.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&d(n,e).includes(e.arrayFormatSeparator);n=o?d(n,e):n;const s=i||o?n.split(e.arrayFormatSeparator).map(t=>d(t,e)):null===n?n:d(n,e);r[t]=s};case\"bracket-separator\":return(t,n,r)=>{const i=/(\\[\\])$/.test(t);if(t=t.replace(/\\[\\]$/,\"\"),!i)return void(r[t]=n?d(n,e):n);const o=null===n?[]:n.split(e.arrayFormatSeparator).map(t=>d(t,e));void 0!==r[t]?r[t]=[].concat(r[t],o):r[t]=o};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),r=Object.create(null);if(\"string\"!=typeof e)return r;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return r;for(const i of e.split(\"&\")){if(\"\"===i)continue;let[e,s]=o(t.decode?i.replace(/\\+/g,\" \"):i,\"=\");s=void 0===s?null:[\"comma\",\"separator\",\"bracket-separator\"].includes(t.arrayFormat)?s:d(s,t),n(d(e,t),s,r)}for(const e of Object.keys(r)){const n=r[e];if(\"object\"==typeof n&&null!==n)for(const e of Object.keys(n))n[e]=f(n[e],t);else r[e]=f(n,t)}return!1===t.sort?r:(!0===t.sort?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((e,t)=>{const n=r[t];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?e[t]=l(n):e[t]=n,e},Object.create(null))}t.extract=p,t.parse=m,t.stringify=(e,t)=>{if(!e)return\"\";c((t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},t)).arrayFormatSeparator);const n=n=>t.skipNull&&null==e[n]||t.skipEmptyString&&\"\"===e[n],r=function(e){switch(e.arrayFormat){case\"index\":return t=>(n,r)=>{const i=n.length;return void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(t,e),\"[\",i,\"]\"].join(\"\")]:[...n,[u(t,e),\"[\",u(i,e),\"]=\",u(r,e)].join(\"\")]};case\"bracket\":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(t,e),\"[]\"].join(\"\")]:[...n,[u(t,e),\"[]=\",u(r,e)].join(\"\")];case\"colon-list-separator\":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(t,e),\":list=\"].join(\"\")]:[...n,[u(t,e),\":list=\",u(r,e)].join(\"\")];case\"comma\":case\"separator\":case\"bracket-separator\":{const t=\"bracket-separator\"===e.arrayFormat?\"[]=\":\"=\";return n=>(r,i)=>void 0===i||e.skipNull&&null===i||e.skipEmptyString&&\"\"===i?r:(i=null===i?\"\":i,0===r.length?[[u(n,e),t,u(i,e)].join(\"\")]:[[r,u(i,e)].join(e.arrayFormatSeparator)])}default:return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,u(t,e)]:[...n,[u(t,e),\"=\",u(r,e)].join(\"\")]}}(t),i={};for(const t of Object.keys(e))n(t)||(i[t]=e[t]);const o=Object.keys(i);return!1!==t.sort&&o.sort(t.sort),o.map(n=>{const i=e[n];return void 0===i?\"\":null===i?u(n,t):Array.isArray(i)?0===i.length&&\"bracket-separator\"===t.arrayFormat?u(n,t)+\"[]\":i.reduce(r(n),[]).join(\"&\"):u(n,t)+\"=\"+u(i,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,r]=o(e,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:m(p(e),t)},t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:d(r,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0,[a]:!0},n);const r=h(e.url).split(\"?\")[0]||\"\",i=t.extract(e.url),o=t.parse(i,{sort:!1}),s=Object.assign(o,e.query);let c=t.stringify(s,n);c&&(c=`?${c}`);let d=function(e){let t=\"\";const n=e.indexOf(\"#\");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(d=`#${n[a]?u(e.fragmentIdentifier,n):e.fragmentIdentifier}`),`${r}${c}${d}`},t.pick=(e,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0,[a]:!1},r);const{url:i,query:o,fragmentIdentifier:c}=t.parseUrl(e,r);return t.stringifyUrl({url:i,query:s(o,n),fragmentIdentifier:c},r)},t.exclude=(e,n,r)=>{const i=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,i,r)}},7554(e,t,n){\"use strict\";n.r(t),n.d(t,{ArgumentOutOfRangeError:()=>x.k,AsyncSubject:()=>d.h,BehaviorSubject:()=>c.t,ConnectableObservable:()=>i.G,EMPTY:()=>Q.w,EmptyError:()=>R.G,GroupedObservable:()=>o.k,NEVER:()=>le,Notification:()=>O.E,NotificationKind:()=>O.I,ObjectUnsubscribedError:()=>M.P,Observable:()=>r.c,ReplaySubject:()=>u.m,Scheduler:()=>C._,Subject:()=>a.B7,Subscriber:()=>I.v,Subscription:()=>w.y,TimeoutError:()=>L.M,UnsubscriptionError:()=>N.Z,VirtualAction:()=>E,VirtualTimeScheduler:()=>S,animationFrame:()=>b,animationFrameScheduler:()=>v,asap:()=>l.I,asapScheduler:()=>l.$,async:()=>h.b,asyncScheduler:()=>h.E,bindCallback:()=>B,bindNodeCallback:()=>H,combineLatest:()=>W.zV,concat:()=>$.x,config:()=>Te.$,defer:()=>K.v,empty:()=>Q.I,forkJoin:()=>X,from:()=>J.H,fromEvent:()=>te.R,fromEventPattern:()=>re,generate:()=>ie,identity:()=>T.D,iif:()=>se,interval:()=>ce,isObservable:()=>k,merge:()=>de.h,never:()=>he,noop:()=>A.l,observable:()=>s.s,of:()=>pe.of,onErrorResumeNext:()=>fe,pairs:()=>me,partition:()=>be,pipe:()=>P.F,queue:()=>p.g,queueScheduler:()=>p.T,race:()=>Se.O4,range:()=>Ee,scheduled:()=>Ae.c,throwError:()=>we.$,timer:()=>Ie.O,using:()=>Oe,zip:()=>Pe.yU});var r=n(5028),i=n(9762),o=n(2331),s=n(9067),a=n(9023),c=n(2361),u=n(8358),d=n(1403),l=n(7734),h=n(5573),p=n(4126),f=n(5779),m=n(1897),y=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.scheduler=t,r.work=n,r}return f.C6(t,e),t.prototype.requestAsyncId=function(t,n,r){return void 0===r&&(r=0),null!==r&&r>0?e.prototype.requestAsyncId.call(this,t,n,r):(t.actions.push(this),t.scheduled||(t.scheduled=requestAnimationFrame(function(){return t.flush(null)})))},t.prototype.recycleAsyncId=function(t,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return e.prototype.recycleAsyncId.call(this,t,n,r);0===t.actions.length&&(cancelAnimationFrame(n),t.scheduled=void 0)},t}(m.R),g=n(8044),_=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f.C6(t,e),t.prototype.flush=function(e){this.active=!0,this.scheduled=void 0;var t,n=this.actions,r=-1,i=n.length;e=e||n.shift();do{if(t=e.execute(e.state,e.delay))break}while(++r<i&&(e=n.shift()));if(this.active=!1,t){for(;++r<i&&(e=n.shift());)e.unsubscribe();throw t}},t}(g.q),v=new _(y),b=v,S=function(e){function t(t,n){void 0===t&&(t=E),void 0===n&&(n=Number.POSITIVE_INFINITY);var r=e.call(this,t,function(){return r.frame})||this;return r.maxFrames=n,r.frame=0,r.index=-1,r}return f.C6(t,e),t.prototype.flush=function(){for(var e,t,n=this.actions,r=this.maxFrames;(t=n[0])&&t.delay<=r&&(n.shift(),this.frame=t.delay,!(e=t.execute(t.state,t.delay))););if(e){for(;t=n.shift();)t.unsubscribe();throw e}},t.frameTimeFactor=10,t}(g.q),E=function(e){function t(t,n,r){void 0===r&&(r=t.index+=1);var i=e.call(this,t,n)||this;return i.scheduler=t,i.work=n,i.index=r,i.active=!0,i.index=t.index=r,i}return f.C6(t,e),t.prototype.schedule=function(n,r){if(void 0===r&&(r=0),!this.id)return e.prototype.schedule.call(this,n,r);this.active=!1;var i=new t(this.scheduler,this.work);return this.add(i),i.schedule(n,r)},t.prototype.requestAsyncId=function(e,n,r){void 0===r&&(r=0),this.delay=e.frame+r;var i=e.actions;return i.push(this),i.sort(t.sortActions),!0},t.prototype.recycleAsyncId=function(e,t,n){void 0===n&&(n=0)},t.prototype._execute=function(t,n){if(!0===this.active)return e.prototype._execute.call(this,t,n)},t.sortActions=function(e,t){return e.delay===t.delay?e.index===t.index?0:e.index>t.index?1:-1:e.delay>t.delay?1:-1},t}(m.R),C=n(6182),w=n(9290),I=n(3409),O=n(2796),P=n(990),A=n(906),T=n(8604);function k(e){return!!e&&(e instanceof r.c||\"function\"==typeof e.lift&&\"function\"==typeof e.subscribe)}var x=n(2413),R=n(963),M=n(6306),N=n(9368),L=n(5),D=n(2035),j=n(2724),F=n(2733),U=n(3017);function B(e,t,n){if(t){if(!(0,U.m)(t))return function(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];return B(e,n).apply(void 0,r).pipe((0,D.T)(function(e){return(0,F.c)(e)?t.apply(void 0,e):t(e)}))};n=t}return function(){for(var t=[],i=0;i<arguments.length;i++)t[i]=arguments[i];var o,s=this,a={context:s,subject:o,callbackFunc:e,scheduler:n};return new r.c(function(r){if(n){var i={args:t,subscriber:r,params:a};return n.schedule(z,0,i)}if(!o){o=new d.h;try{e.apply(s,t.concat([function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];o.next(e.length<=1?e[0]:e),o.complete()}]))}catch(e){(0,j.H)(o)?o.error(e):console.warn(e)}}return o.subscribe(r)})}}function z(e){var t=this,n=e.args,r=e.subscriber,i=e.params,o=i.callbackFunc,s=i.context,a=i.scheduler,c=i.subject;if(!c){c=i.subject=new d.h;try{o.apply(s,n.concat([function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var r=e.length<=1?e[0]:e;t.add(a.schedule(q,0,{value:r,subject:c}))}]))}catch(e){c.error(e)}}this.add(c.subscribe(r))}function q(e){var t=e.value,n=e.subject;n.next(t),n.complete()}function H(e,t,n){if(t){if(!(0,U.m)(t))return function(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];return H(e,n).apply(void 0,r).pipe((0,D.T)(function(e){return(0,F.c)(e)?t.apply(void 0,e):t(e)}))};n=t}return function(){for(var t=[],i=0;i<arguments.length;i++)t[i]=arguments[i];var o={subject:void 0,args:t,callbackFunc:e,scheduler:n,context:this};return new r.c(function(r){var i=o.context,s=o.subject;if(n)return n.schedule(V,0,{params:o,subscriber:r,context:i});if(!s){s=o.subject=new d.h;try{e.apply(i,t.concat([function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.shift();n?s.error(n):(s.next(e.length<=1?e[0]:e),s.complete())}]))}catch(e){(0,j.H)(s)?s.error(e):console.warn(e)}}return s.subscribe(r)})}}function V(e){var t=this,n=e.params,r=e.subscriber,i=e.context,o=n.callbackFunc,s=n.args,a=n.scheduler,c=n.subject;if(!c){c=n.subject=new d.h;try{o.apply(i,s.concat([function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var r=e.shift();if(r)t.add(a.schedule(Y,0,{err:r,subject:c}));else{var i=e.length<=1?e[0]:e;t.add(a.schedule(G,0,{value:i,subject:c}))}}]))}catch(e){this.add(a.schedule(Y,0,{err:e,subject:c}))}}this.add(c.subscribe(r))}function G(e){var t=e.value,n=e.subject;n.next(t),n.complete()}function Y(e){var t=e.err;e.subject.error(t)}var W=n(3483),$=n(9301),K=n(277),Q=n(6780),Z=n(9273),J=n(8241);function X(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(1===e.length){var n=e[0];if((0,F.c)(n))return ee(n,null);if((0,Z.G)(n)&&Object.getPrototypeOf(n)===Object.prototype){var r=Object.keys(n);return ee(r.map(function(e){return n[e]}),r)}}if(\"function\"==typeof e[e.length-1]){var i=e.pop();return ee(e=1===e.length&&(0,F.c)(e[0])?e[0]:e,null).pipe((0,D.T)(function(e){return i.apply(void 0,e)}))}return ee(e,null)}function ee(e,t){return new r.c(function(n){var r=e.length;if(0!==r)for(var i=new Array(r),o=0,s=0,a=function(a){var c=(0,J.H)(e[a]),u=!1;n.add(c.subscribe({next:function(e){u||(u=!0,s++),i[a]=e},error:function(e){return n.error(e)},complete:function(){++o!==r&&u||(s===r&&n.next(t?t.reduce(function(e,t,n){return e[t]=i[n],e},{}):i),n.complete())}}))},c=0;c<r;c++)a(c);else n.complete()})}var te=n(1381),ne=n(3278);function re(e,t,n){return n?re(e,t).pipe((0,D.T)(function(e){return(0,F.c)(e)?n.apply(void 0,e):n(e)})):new r.c(function(n){var r,i=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n.next(1===e.length?e[0]:e)};try{r=e(i)}catch(e){return void n.error(e)}if((0,ne.T)(t))return function(){return t(i,r)}})}function ie(e,t,n,i,o){var s,a;if(1==arguments.length){var c=e;a=c.initialState,t=c.condition,n=c.iterate,s=c.resultSelector||T.D,o=c.scheduler}else void 0===i||(0,U.m)(i)?(a=e,s=T.D,o=i):(a=e,s=i);return new r.c(function(e){var r=a;if(o)return o.schedule(oe,0,{subscriber:e,iterate:n,condition:t,resultSelector:s,state:r});for(;;){if(t){var i=void 0;try{i=t(r)}catch(t){return void e.error(t)}if(!i){e.complete();break}}var c=void 0;try{c=s(r)}catch(t){return void e.error(t)}if(e.next(c),e.closed)break;try{r=n(r)}catch(t){return void e.error(t)}}})}function oe(e){var t=e.subscriber,n=e.condition;if(!t.closed){if(e.needIterate)try{e.state=e.iterate(e.state)}catch(e){return void t.error(e)}else e.needIterate=!0;if(n){var r=void 0;try{r=n(e.state)}catch(e){return void t.error(e)}if(!r)return void t.complete();if(t.closed)return}var i;try{i=e.resultSelector(e.state)}catch(e){return void t.error(e)}if(!t.closed&&(t.next(i),!t.closed))return this.schedule(e)}}function se(e,t,n){return void 0===t&&(t=Q.w),void 0===n&&(n=Q.w),(0,K.v)(function(){return e()?t:n})}var ae=n(899);function ce(e,t){return void 0===e&&(e=0),void 0===t&&(t=h.b),(!(0,ae.k)(e)||e<0)&&(e=0),t&&\"function\"==typeof t.schedule||(t=h.b),new r.c(function(n){return n.add(t.schedule(ue,e,{subscriber:n,counter:0,period:e})),n})}function ue(e){var t=e.subscriber,n=e.counter,r=e.period;t.next(n),this.schedule({subscriber:t,counter:n+1,period:r},r)}var de=n(3837),le=new r.c(A.l);function he(){return le}var pe=n(4128);function fe(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(0===e.length)return Q.w;var n=e[0],i=e.slice(1);return 1===e.length&&(0,F.c)(n)?fe.apply(void 0,n):new r.c(function(e){var t=function(){return e.add(fe.apply(void 0,i).subscribe(e))};return(0,J.H)(n).subscribe({next:function(t){e.next(t)},error:t,complete:t})})}function me(e,t){return t?new r.c(function(n){var r=Object.keys(e),i=new w.y;return i.add(t.schedule(ye,0,{keys:r,index:0,subscriber:n,subscription:i,obj:e})),i}):new r.c(function(t){for(var n=Object.keys(e),r=0;r<n.length&&!t.closed;r++){var i=n[r];e.hasOwnProperty(i)&&t.next([i,e[i]])}t.complete()})}function ye(e){var t=e.keys,n=e.index,r=e.subscriber,i=e.subscription,o=e.obj;if(!r.closed)if(n<t.length){var s=t[n];r.next([s,o[s]]),i.add(this.schedule({keys:t,index:n+1,subscriber:r,subscription:i,obj:o}))}else r.complete()}var ge=n(8153),_e=n(4298),ve=n(6275);function be(e,t,n){return[(0,ve.p)(t,n)(new r.c((0,_e.i)(e))),(0,ve.p)((0,ge.A)(t,n))(new r.c((0,_e.i)(e)))]}var Se=n(4460);function Ee(e,t,n){return void 0===e&&(e=0),new r.c(function(r){void 0===t&&(t=e,e=0);var i=0,o=e;if(n)return n.schedule(Ce,0,{index:i,count:t,start:e,subscriber:r});for(;;){if(i++>=t){r.complete();break}if(r.next(o++),r.closed)break}})}function Ce(e){var t=e.start,n=e.index,r=e.count,i=e.subscriber;n>=r?i.complete():(i.next(t),i.closed||(e.index=n+1,e.start=t+1,this.schedule(e)))}var we=n(4203),Ie=n(5520);function Oe(e,t){return new r.c(function(n){var r,i;try{r=e()}catch(e){return void n.error(e)}try{i=t(r)}catch(e){return void n.error(e)}var o=(i?(0,J.H)(i):Q.w).subscribe(n);return function(){o.unsubscribe(),r&&r.unsubscribe()}})}var Pe=n(5778),Ae=n(2679),Te=n(6369)},1403(e,t,n){\"use strict\";n.d(t,{h:()=>s});var r=n(5779),i=n(9023),o=n(9290),s=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.value=null,t.hasNext=!1,t.hasCompleted=!1,t}return r.C6(t,e),t.prototype._subscribe=function(t){return this.hasError?(t.error(this.thrownError),o.y.EMPTY):this.hasCompleted&&this.hasNext?(t.next(this.value),t.complete(),o.y.EMPTY):e.prototype._subscribe.call(this,t)},t.prototype.next=function(e){this.hasCompleted||(this.value=e,this.hasNext=!0)},t.prototype.error=function(t){this.hasCompleted||e.prototype.error.call(this,t)},t.prototype.complete=function(){this.hasCompleted=!0,this.hasNext&&e.prototype.next.call(this,this.value),e.prototype.complete.call(this)},t}(i.B7)},2361(e,t,n){\"use strict\";n.d(t,{t:()=>s});var r=n(5779),i=n(9023),o=n(6306),s=function(e){function t(t){var n=e.call(this)||this;return n._value=t,n}return r.C6(t,e),Object.defineProperty(t.prototype,\"value\",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),t.prototype._subscribe=function(t){var n=e.prototype._subscribe.call(this,t);return n&&!n.closed&&t.next(this._value),n},t.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.P;return this._value},t.prototype.next=function(t){e.prototype.next.call(this,this._value=t)},t}(i.B7)},2796(e,t,n){\"use strict\";n.d(t,{E:()=>a,I:()=>r});var r,i=n(6780),o=n(4128),s=n(4203);r||(r={});var a=function(){function e(e,t,n){this.kind=e,this.value=t,this.error=n,this.hasValue=\"N\"===e}return e.prototype.observe=function(e){switch(this.kind){case\"N\":return e.next&&e.next(this.value);case\"E\":return e.error&&e.error(this.error);case\"C\":return e.complete&&e.complete()}},e.prototype.do=function(e,t,n){switch(this.kind){case\"N\":return e&&e(this.value);case\"E\":return t&&t(this.error);case\"C\":return n&&n()}},e.prototype.accept=function(e,t,n){return e&&\"function\"==typeof e.next?this.observe(e):this.do(e,t,n)},e.prototype.toObservable=function(){switch(this.kind){case\"N\":return(0,o.of)(this.value);case\"E\":return(0,s.$)(this.error);case\"C\":return(0,i.I)()}throw new Error(\"unexpected notification kind value\")},e.createNext=function(t){return void 0!==t?new e(\"N\",t):e.undefinedValueNotification},e.createError=function(t){return new e(\"E\",void 0,t)},e.createComplete=function(){return e.completeNotification},e.completeNotification=new e(\"C\"),e.undefinedValueNotification=new e(\"N\",void 0),e}()},5028(e,t,n){\"use strict\";n.d(t,{c:()=>d});var r=n(2724),i=n(3409),o=n(6014),s=n(8805),a=n(9067),c=n(990),u=n(6369),d=function(){function e(e){this._isScalar=!1,e&&(this._subscribe=e)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(e,t,n){var r=this.operator,a=function(e,t,n){if(e){if(e instanceof i.v)return e;if(e[o.D])return e[o.D]()}return e||t||n?new i.v(e,t,n):new i.v(s.I)}(e,t,n);if(r?a.add(r.call(a,this.source)):a.add(this.source||u.$.useDeprecatedSynchronousErrorHandling&&!a.syncErrorThrowable?this._subscribe(a):this._trySubscribe(a)),u.$.useDeprecatedSynchronousErrorHandling&&a.syncErrorThrowable&&(a.syncErrorThrowable=!1,a.syncErrorThrown))throw a.syncErrorValue;return a},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){u.$.useDeprecatedSynchronousErrorHandling&&(e.syncErrorThrown=!0,e.syncErrorValue=t),(0,r.H)(e)?e.error(t):console.warn(t)}},e.prototype.forEach=function(e,t){var n=this;return new(t=l(t))(function(t,r){var i;i=n.subscribe(function(t){try{e(t)}catch(e){r(e),i&&i.unsubscribe()}},r,t)})},e.prototype._subscribe=function(e){var t=this.source;return t&&t.subscribe(e)},e.prototype[a.s]=function(){return this},e.prototype.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return 0===e.length?this:(0,c.m)(e)(this)},e.prototype.toPromise=function(e){var t=this;return new(e=l(e))(function(e,n){var r;t.subscribe(function(e){return r=e},function(e){return n(e)},function(){return e(r)})})},e.create=function(t){return new e(t)},e}();function l(e){if(e||(e=u.$.Promise||Promise),!e)throw new Error(\"no Promise impl found\");return e}},8805(e,t,n){\"use strict\";n.d(t,{I:()=>o});var r=n(6369),i=n(3762),o={closed:!0,next:function(e){},error:function(e){if(r.$.useDeprecatedSynchronousErrorHandling)throw e;(0,i.T)(e)},complete:function(){}}},5422(e,t,n){\"use strict\";n.d(t,{E:()=>i});var r=n(5779),i=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.C6(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(t)},t.prototype.notifyError=function(e,t){this.destination.error(e)},t.prototype.notifyComplete=function(e){this.destination.complete()},t}(n(3409).v)},8358(e,t,n){\"use strict\";n.d(t,{m:()=>d});var r=n(5779),i=n(9023),o=n(4126),s=n(9290),a=n(3724),c=n(6306),u=n(9970),d=function(e){function t(t,n,r){void 0===t&&(t=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY);var i=e.call(this)||this;return i.scheduler=r,i._events=[],i._infiniteTimeWindow=!1,i._bufferSize=t<1?1:t,i._windowTime=n<1?1:n,n===Number.POSITIVE_INFINITY?(i._infiniteTimeWindow=!0,i.next=i.nextInfiniteTimeWindow):i.next=i.nextTimeWindow,i}return r.C6(t,e),t.prototype.nextInfiniteTimeWindow=function(t){if(!this.isStopped){var n=this._events;n.push(t),n.length>this._bufferSize&&n.shift()}e.prototype.next.call(this,t)},t.prototype.nextTimeWindow=function(t){this.isStopped||(this._events.push(new l(this._getNow(),t)),this._trimBufferThenGetEvents()),e.prototype.next.call(this,t)},t.prototype._subscribe=function(e){var t,n=this._infiniteTimeWindow,r=n?this._events:this._trimBufferThenGetEvents(),i=this.scheduler,o=r.length;if(this.closed)throw new c.P;if(this.isStopped||this.hasError?t=s.y.EMPTY:(this.observers.push(e),t=new u.Y(this,e)),i&&e.add(e=new a.YZ(e,i)),n)for(var d=0;d<o&&!e.closed;d++)e.next(r[d]);else for(d=0;d<o&&!e.closed;d++)e.next(r[d].value);return this.hasError?e.error(this.thrownError):this.isStopped&&e.complete(),t},t.prototype._getNow=function(){return(this.scheduler||o.g).now()},t.prototype._trimBufferThenGetEvents=function(){for(var e=this._getNow(),t=this._bufferSize,n=this._windowTime,r=this._events,i=r.length,o=0;o<i&&!(e-r[o].time<n);)o++;return i>t&&(o=Math.max(o,i-t)),o>0&&r.splice(0,o),r},t}(i.B7),l=function(){return function(e,t){this.time=e,this.value=t}}()},6182(e,t,n){\"use strict\";n.d(t,{_:()=>r});var r=function(){function e(t,n){void 0===n&&(n=e.now),this.SchedulerAction=t,this.now=n}return e.prototype.schedule=function(e,t,n){return void 0===t&&(t=0),new this.SchedulerAction(this,e).schedule(n,t)},e.now=function(){return Date.now()},e}()},9023(e,t,n){\"use strict\";n.d(t,{B7:()=>l,PJ:()=>d});var r=n(5779),i=n(5028),o=n(3409),s=n(9290),a=n(6306),c=n(9970),u=n(6014),d=function(e){function t(t){var n=e.call(this,t)||this;return n.destination=t,n}return r.C6(t,e),t}(o.v),l=function(e){function t(){var t=e.call(this)||this;return t.observers=[],t.closed=!1,t.isStopped=!1,t.hasError=!1,t.thrownError=null,t}return r.C6(t,e),t.prototype[u.D]=function(){return new d(this)},t.prototype.lift=function(e){var t=new h(this,this);return t.operator=e,t},t.prototype.next=function(e){if(this.closed)throw new a.P;if(!this.isStopped)for(var t=this.observers,n=t.length,r=t.slice(),i=0;i<n;i++)r[i].next(e)},t.prototype.error=function(e){if(this.closed)throw new a.P;this.hasError=!0,this.thrownError=e,this.isStopped=!0;for(var t=this.observers,n=t.length,r=t.slice(),i=0;i<n;i++)r[i].error(e);this.observers.length=0},t.prototype.complete=function(){if(this.closed)throw new a.P;this.isStopped=!0;for(var e=this.observers,t=e.length,n=e.slice(),r=0;r<t;r++)n[r].complete();this.observers.length=0},t.prototype.unsubscribe=function(){this.isStopped=!0,this.closed=!0,this.observers=null},t.prototype._trySubscribe=function(t){if(this.closed)throw new a.P;return e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){if(this.closed)throw new a.P;return this.hasError?(e.error(this.thrownError),s.y.EMPTY):this.isStopped?(e.complete(),s.y.EMPTY):(this.observers.push(e),new c.Y(this,e))},t.prototype.asObservable=function(){var e=new i.c;return e.source=this,e},t.create=function(e,t){return new h(e,t)},t}(i.c),h=function(e){function t(t,n){var r=e.call(this)||this;return r.destination=t,r.source=n,r}return r.C6(t,e),t.prototype.next=function(e){var t=this.destination;t&&t.next&&t.next(e)},t.prototype.error=function(e){var t=this.destination;t&&t.error&&this.destination.error(e)},t.prototype.complete=function(){var e=this.destination;e&&e.complete&&this.destination.complete()},t.prototype._subscribe=function(e){return this.source?this.source.subscribe(e):s.y.EMPTY},t}(l)},9970(e,t,n){\"use strict\";n.d(t,{Y:()=>i});var r=n(5779),i=function(e){function t(t,n){var r=e.call(this)||this;return r.subject=t,r.subscriber=n,r.closed=!1,r}return r.C6(t,e),t.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var e=this.subject,t=e.observers;if(this.subject=null,t&&0!==t.length&&!e.isStopped&&!e.closed){var n=t.indexOf(this.subscriber);-1!==n&&t.splice(n,1)}}},t}(n(9290).y)},3409(e,t,n){\"use strict\";n.d(t,{v:()=>d});var r=n(5779),i=n(3278),o=n(8805),s=n(9290),a=n(6014),c=n(6369),u=n(3762),d=function(e){function t(n,r,i){var s=e.call(this)||this;switch(s.syncErrorValue=null,s.syncErrorThrown=!1,s.syncErrorThrowable=!1,s.isStopped=!1,arguments.length){case 0:s.destination=o.I;break;case 1:if(!n){s.destination=o.I;break}if(\"object\"==typeof n){n instanceof t?(s.syncErrorThrowable=n.syncErrorThrowable,s.destination=n,n.add(s)):(s.syncErrorThrowable=!0,s.destination=new l(s,n));break}default:s.syncErrorThrowable=!0,s.destination=new l(s,n,r,i)}return s}return r.C6(t,e),t.prototype[a.D]=function(){return this},t.create=function(e,n,r){var i=new t(e,n,r);return i.syncErrorThrowable=!1,i},t.prototype.next=function(e){this.isStopped||this._next(e)},t.prototype.error=function(e){this.isStopped||(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this))},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){this.destination.error(e),this.unsubscribe()},t.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},t.prototype._unsubscribeAndRecycle=function(){var e=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=e,this},t}(s.y),l=function(e){function t(t,n,r,s){var a,c=e.call(this)||this;c._parentSubscriber=t;var u=c;return(0,i.T)(n)?a=n:n&&(a=n.next,r=n.error,s=n.complete,n!==o.I&&(u=Object.create(n),(0,i.T)(u.unsubscribe)&&c.add(u.unsubscribe.bind(u)),u.unsubscribe=c.unsubscribe.bind(c))),c._context=u,c._next=a,c._error=r,c._complete=s,c}return r.C6(t,e),t.prototype.next=function(e){if(!this.isStopped&&this._next){var t=this._parentSubscriber;c.$.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?this.__tryOrSetError(t,this._next,e)&&this.unsubscribe():this.__tryOrUnsub(this._next,e)}},t.prototype.error=function(e){if(!this.isStopped){var t=this._parentSubscriber,n=c.$.useDeprecatedSynchronousErrorHandling;if(this._error)n&&t.syncErrorThrowable?(this.__tryOrSetError(t,this._error,e),this.unsubscribe()):(this.__tryOrUnsub(this._error,e),this.unsubscribe());else if(t.syncErrorThrowable)n?(t.syncErrorValue=e,t.syncErrorThrown=!0):(0,u.T)(e),this.unsubscribe();else{if(this.unsubscribe(),n)throw e;(0,u.T)(e)}}},t.prototype.complete=function(){var e=this;if(!this.isStopped){var t=this._parentSubscriber;if(this._complete){var n=function(){return e._complete.call(e._context)};c.$.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},t.prototype.__tryOrUnsub=function(e,t){try{e.call(this._context,t)}catch(e){if(this.unsubscribe(),c.$.useDeprecatedSynchronousErrorHandling)throw e;(0,u.T)(e)}},t.prototype.__tryOrSetError=function(e,t,n){if(!c.$.useDeprecatedSynchronousErrorHandling)throw new Error(\"bad call\");try{t.call(this._context,n)}catch(t){return c.$.useDeprecatedSynchronousErrorHandling?(e.syncErrorValue=t,e.syncErrorThrown=!0,!0):((0,u.T)(t),!0)}return!1},t.prototype._unsubscribe=function(){var e=this._parentSubscriber;this._context=null,this._parentSubscriber=null,e.unsubscribe()},t}(d)},9290(e,t,n){\"use strict\";n.d(t,{y:()=>a});var r=n(2733),i=n(9273),o=n(3278),s=n(9368),a=function(){function e(e){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,e&&(this._ctorUnsubscribe=!0,this._unsubscribe=e)}var t;return e.prototype.unsubscribe=function(){var t;if(!this.closed){var n=this,a=n._parentOrParents,u=n._ctorUnsubscribe,d=n._unsubscribe,l=n._subscriptions;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,a instanceof e)a.remove(this);else if(null!==a)for(var h=0;h<a.length;++h)a[h].remove(this);if((0,o.T)(d)){u&&(this._unsubscribe=void 0);try{d.call(this)}catch(e){t=e instanceof s.Z?c(e.errors):[e]}}if((0,r.c)(l)){h=-1;for(var p=l.length;++h<p;){var f=l[h];if((0,i.G)(f))try{f.unsubscribe()}catch(e){t=t||[],e instanceof s.Z?t=t.concat(c(e.errors)):t.push(e)}}}if(t)throw new s.Z(t)}},e.prototype.add=function(t){var n=t;if(!t)return e.EMPTY;switch(typeof t){case\"function\":n=new e(t);case\"object\":if(n===this||n.closed||\"function\"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if(!(n instanceof e)){var r=n;(n=new e)._subscriptions=[r]}break;default:throw new Error(\"unrecognized teardown \"+t+\" added to Subscription.\")}var i=n._parentOrParents;if(null===i)n._parentOrParents=this;else if(i instanceof e){if(i===this)return n;n._parentOrParents=[i,this]}else{if(-1!==i.indexOf(this))return n;i.push(this)}var o=this._subscriptions;return null===o?this._subscriptions=[n]:o.push(n),n},e.prototype.remove=function(e){var t=this._subscriptions;if(t){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}},e.EMPTY=((t=new e).closed=!0,t),e}();function c(e){return e.reduce(function(e,t){return e.concat(t instanceof s.Z?t.errors:t)},[])}},6369(e,t,n){\"use strict\";n.d(t,{$:()=>i});var r=!1,i={Promise:void 0,set useDeprecatedSynchronousErrorHandling(e){e&&(new Error).stack,r=e},get useDeprecatedSynchronousErrorHandling(){return r}}},9559(e,t,n){\"use strict\";n.d(t,{gn:()=>c,tS:()=>u,zA:()=>a});var r=n(5779),i=n(3409),o=n(5028),s=n(4298),a=function(e){function t(t){var n=e.call(this)||this;return n.parent=t,n}return r.C6(t,e),t.prototype._next=function(e){this.parent.notifyNext(e)},t.prototype._error=function(e){this.parent.notifyError(e),this.unsubscribe()},t.prototype._complete=function(){this.parent.notifyComplete(),this.unsubscribe()},t}(i.v),c=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.C6(t,e),t.prototype.notifyNext=function(e){this.destination.next(e)},t.prototype.notifyError=function(e){this.destination.error(e)},t.prototype.notifyComplete=function(){this.destination.complete()},t}(i.v);function u(e,t){if(!t.closed){if(e instanceof o.c)return e.subscribe(t);var n;try{n=(0,s.i)(e)(t)}catch(e){t.error(e)}return n}}},9762(e,t,n){\"use strict\";n.d(t,{G:()=>c,f:()=>u});var r=n(5779),i=n(9023),o=n(5028),s=n(9290),a=n(1709),c=function(e){function t(t,n){var r=e.call(this)||this;return r.source=t,r.subjectFactory=n,r._refCount=0,r._isComplete=!1,r}return r.C6(t,e),t.prototype._subscribe=function(e){return this.getSubject().subscribe(e)},t.prototype.getSubject=function(){var e=this._subject;return e&&!e.isStopped||(this._subject=this.subjectFactory()),this._subject},t.prototype.connect=function(){var e=this._connection;return e||(this._isComplete=!1,(e=this._connection=new s.y).add(this.source.subscribe(new d(this.getSubject(),this))),e.closed&&(this._connection=null,e=s.y.EMPTY)),e},t.prototype.refCount=function(){return(0,a.B)()(this)},t}(o.c),u=function(){var e=c.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:e._subscribe},_isComplete:{value:e._isComplete,writable:!0},getSubject:{value:e.getSubject},connect:{value:e.connect},refCount:{value:e.refCount}}}(),d=function(e){function t(t,n){var r=e.call(this,t)||this;return r.connectable=n,r}return r.C6(t,e),t.prototype._error=function(t){this._unsubscribe(),e.prototype._error.call(this,t)},t.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._connection;e._refCount=0,e._subject=null,e._connection=null,t&&t.unsubscribe()}},t}(i.PJ)},3483(e,t,n){\"use strict\";n.d(t,{ZS:()=>l,zV:()=>d});var r=n(5779),i=n(3017),o=n(2733),s=n(5422),a=n(7408),c=n(2564),u={};function d(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=void 0,r=void 0;return(0,i.m)(e[e.length-1])&&(r=e.pop()),\"function\"==typeof e[e.length-1]&&(n=e.pop()),1===e.length&&(0,o.c)(e[0])&&(e=e[0]),(0,c.c)(e,r).lift(new l(n))}var l=function(){function e(e){this.resultSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new h(e,this.resultSelector))},e}(),h=function(e){function t(t,n){var r=e.call(this,t)||this;return r.resultSelector=n,r.active=0,r.values=[],r.observables=[],r}return r.C6(t,e),t.prototype._next=function(e){this.values.push(u),this.observables.push(e)},t.prototype._complete=function(){var e=this.observables,t=e.length;if(0===t)this.destination.complete();else{this.active=t,this.toRespond=t;for(var n=0;n<t;n++){var r=e[n];this.add((0,a.F)(this,r,void 0,n))}}},t.prototype.notifyComplete=function(e){0==(this.active-=1)&&this.destination.complete()},t.prototype.notifyNext=function(e,t,n){var r=this.values,i=r[n],o=this.toRespond?i===u?--this.toRespond:this.toRespond:0;r[n]=t,0===o&&(this.resultSelector?this._tryResultSelector(r):this.destination.next(r.slice()))},t.prototype._tryResultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(s.E)},9301(e,t,n){\"use strict\";n.d(t,{x:()=>o});var r=n(4128),i=n(8930);function o(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return(0,i.K)()(r.of.apply(void 0,e))}},277(e,t,n){\"use strict\";n.d(t,{v:()=>s});var r=n(5028),i=n(8241),o=n(6780);function s(e){return new r.c(function(t){var n;try{n=e()}catch(e){return void t.error(e)}return(n?(0,i.H)(n):(0,o.I)()).subscribe(t)})}},6780(e,t,n){\"use strict\";n.d(t,{I:()=>o,w:()=>i});var r=n(5028),i=new r.c(function(e){return e.complete()});function o(e){return e?function(e){return new r.c(function(t){return e.schedule(function(){return t.complete()})})}(e):i}},8241(e,t,n){\"use strict\";n.d(t,{H:()=>s});var r=n(5028),i=n(4298),o=n(2679);function s(e,t){return t?(0,o.c)(e,t):e instanceof r.c?e:new r.c((0,i.i)(e))}},2564(e,t,n){\"use strict\";n.d(t,{c:()=>s});var r=n(5028),i=n(5168),o=n(941);function s(e,t){return t?(0,o.V)(e,t):new r.c((0,i.v)(e))}},1381(e,t,n){\"use strict\";n.d(t,{R:()=>a});var r=n(5028),i=n(2733),o=n(3278),s=n(2035);function a(e,t,n,u){return(0,o.T)(n)&&(u=n,n=void 0),u?a(e,t,n).pipe((0,s.T)(function(e){return(0,i.c)(e)?u.apply(void 0,e):u(e)})):new r.c(function(r){c(e,t,function(e){arguments.length>1?r.next(Array.prototype.slice.call(arguments)):r.next(e)},r,n)})}function c(e,t,n,r,i){var o;if(function(e){return e&&\"function\"==typeof e.addEventListener&&\"function\"==typeof e.removeEventListener}(e)){var s=e;e.addEventListener(t,n,i),o=function(){return s.removeEventListener(t,n,i)}}else if(function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.off}(e)){var a=e;e.on(t,n),o=function(){return a.off(t,n)}}else if(function(e){return e&&\"function\"==typeof e.addListener&&\"function\"==typeof e.removeListener}(e)){var u=e;e.addListener(t,n),o=function(){return u.removeListener(t,n)}}else{if(!e||!e.length)throw new TypeError(\"Invalid event target\");for(var d=0,l=e.length;d<l;d++)c(e[d],t,n,r,i)}r.add(o)}},3837(e,t,n){\"use strict\";n.d(t,{h:()=>a});var r=n(5028),i=n(3017),o=n(9050),s=n(2564);function a(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Number.POSITIVE_INFINITY,a=null,c=e[e.length-1];return(0,i.m)(c)?(a=e.pop(),e.length>1&&\"number\"==typeof e[e.length-1]&&(n=e.pop())):\"number\"==typeof c&&(n=e.pop()),null===a&&1===e.length&&e[0]instanceof r.c?e[0]:(0,o.U)(n)((0,s.c)(e,a))}},4128(e,t,n){\"use strict\";n.d(t,{of:()=>s});var r=n(3017),i=n(2564),o=n(941);function s(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[e.length-1];return(0,r.m)(n)?(e.pop(),(0,o.V)(e,n)):(0,i.c)(e)}},4460(e,t,n){\"use strict\";n.d(t,{O4:()=>c});var r=n(5779),i=n(2733),o=n(2564),s=n(5422),a=n(7408);function c(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(1===e.length){if(!(0,i.c)(e[0]))return e[0];e=e[0]}return(0,o.c)(e,void 0).lift(new u)}var u=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new d(e))},e}(),d=function(e){function t(t){var n=e.call(this,t)||this;return n.hasFirst=!1,n.observables=[],n.subscriptions=[],n}return r.C6(t,e),t.prototype._next=function(e){this.observables.push(e)},t.prototype._complete=function(){var e=this.observables,t=e.length;if(0===t)this.destination.complete();else{for(var n=0;n<t&&!this.hasFirst;n++){var r=e[n],i=(0,a.F)(this,r,void 0,n);this.subscriptions&&this.subscriptions.push(i),this.add(i)}this.observables=null}},t.prototype.notifyNext=function(e,t,n){if(!this.hasFirst){this.hasFirst=!0;for(var r=0;r<this.subscriptions.length;r++)if(r!==n){var i=this.subscriptions[r];i.unsubscribe(),this.remove(i)}this.subscriptions=null}this.destination.next(t)},t}(s.E)},4203(e,t,n){\"use strict\";n.d(t,{$:()=>i});var r=n(5028);function i(e,t){return t?new r.c(function(n){return t.schedule(o,0,{error:e,subscriber:n})}):new r.c(function(t){return t.error(e)})}function o(e){var t=e.error;e.subscriber.error(t)}},5520(e,t,n){\"use strict\";n.d(t,{O:()=>a});var r=n(5028),i=n(5573),o=n(899),s=n(3017);function a(e,t,n){void 0===e&&(e=0);var a=-1;return(0,o.k)(t)?a=Number(t)<1?1:Number(t):(0,s.m)(t)&&(n=t),(0,s.m)(n)||(n=i.b),new r.c(function(t){var r=(0,o.k)(e)?e:+e-n.now();return n.schedule(c,r,{index:0,period:a,subscriber:t})})}function c(e){var t=e.index,n=e.period,r=e.subscriber;if(r.next(t),!r.closed){if(-1===n)return r.complete();e.index=t+1,this.schedule(e,n)}}},5778(e,t,n){\"use strict\";n.d(t,{ee:()=>d,yU:()=>u});var r=n(5779),i=n(2564),o=n(2733),s=n(3409),a=n(3840),c=n(9559);function u(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[e.length-1];return\"function\"==typeof n&&e.pop(),(0,i.c)(e,void 0).lift(new d(n))}var d=function(){function e(e){this.resultSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new l(e,this.resultSelector))},e}(),l=function(e){function t(t,n,r){void 0===r&&(r=Object.create(null));var i=e.call(this,t)||this;return i.resultSelector=n,i.iterators=[],i.active=0,i.resultSelector=\"function\"==typeof n?n:void 0,i}return r.C6(t,e),t.prototype._next=function(e){var t=this.iterators;(0,o.c)(e)?t.push(new p(e)):\"function\"==typeof e[a.lJ]?t.push(new h(e[a.lJ]())):t.push(new f(this.destination,this,e))},t.prototype._complete=function(){var e=this.iterators,t=e.length;if(this.unsubscribe(),0!==t){this.active=t;for(var n=0;n<t;n++){var r=e[n];r.stillUnsubscribed?this.destination.add(r.subscribe()):this.active--}}else this.destination.complete()},t.prototype.notifyInactive=function(){this.active--,0===this.active&&this.destination.complete()},t.prototype.checkIterators=function(){for(var e=this.iterators,t=e.length,n=this.destination,r=0;r<t;r++)if(\"function\"==typeof(s=e[r]).hasValue&&!s.hasValue())return;var i=!1,o=[];for(r=0;r<t;r++){var s,a=(s=e[r]).next();if(s.hasCompleted()&&(i=!0),a.done)return void n.complete();o.push(a.value)}this.resultSelector?this._tryresultSelector(o):n.next(o),i&&n.complete()},t.prototype._tryresultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(s.v),h=function(){function e(e){this.iterator=e,this.nextResult=e.next()}return e.prototype.hasValue=function(){return!0},e.prototype.next=function(){var e=this.nextResult;return this.nextResult=this.iterator.next(),e},e.prototype.hasCompleted=function(){var e=this.nextResult;return Boolean(e&&e.done)},e}(),p=function(){function e(e){this.array=e,this.index=0,this.length=0,this.length=e.length}return e.prototype[a.lJ]=function(){return this},e.prototype.next=function(e){var t=this.index++,n=this.array;return t<this.length?{value:n[t],done:!1}:{value:null,done:!0}},e.prototype.hasValue=function(){return this.array.length>this.index},e.prototype.hasCompleted=function(){return this.array.length===this.index},e}(),f=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.parent=n,i.observable=r,i.stillUnsubscribed=!0,i.buffer=[],i.isComplete=!1,i}return r.C6(t,e),t.prototype[a.lJ]=function(){return this},t.prototype.next=function(){var e=this.buffer;return 0===e.length&&this.isComplete?{value:null,done:!0}:{value:e.shift(),done:!1}},t.prototype.hasValue=function(){return this.buffer.length>0},t.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete},t.prototype.notifyComplete=function(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()},t.prototype.notifyNext=function(e){this.buffer.push(e),this.parent.checkIterators()},t.prototype.subscribe=function(){return(0,c.tS)(this.observable,new c.zA(this))},t}(c.gn)},9586(e,t,n){\"use strict\";n.d(t,{W:()=>o});var r=n(5779),i=n(9559);function o(e){return function(t){var n=new s(e),r=t.lift(n);return n.caught=r}}var s=function(){function e(e){this.selector=e}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.selector,this.caught))},e}(),a=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.selector=n,i.caught=r,i}return r.C6(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=void 0;try{n=this.selector(t,this.caught)}catch(t){return void e.prototype.error.call(this,t)}this._unsubscribeAndRecycle();var r=new i.zA(this);this.add(r);var o=(0,i.tS)(n,r);o!==r&&this.add(o)}},t}(i.gn)},8930(e,t,n){\"use strict\";n.d(t,{K:()=>i});var r=n(9050);function i(){return(0,r.U)(1)}},3158(e,t,n){\"use strict\";n.d(t,{c:()=>c});var r=n(5779),i=n(5573),o=n(1454),s=n(3409),a=n(2796);function c(e,t){void 0===t&&(t=i.b);var n=(0,o.$)(e)?+e-t.now():Math.abs(e);return function(e){return e.lift(new u(n,t))}}var u=function(){function e(e,t){this.delay=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new d(e,this.delay,this.scheduler))},e}(),d=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.delay=n,i.scheduler=r,i.queue=[],i.active=!1,i.errored=!1,i}return r.C6(t,e),t.dispatch=function(e){for(var t=e.source,n=t.queue,r=e.scheduler,i=e.destination;n.length>0&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(n.length>0){var o=Math.max(0,n[0].time-r.now());this.schedule(e,o)}else this.unsubscribe(),t.active=!1},t.prototype._schedule=function(e){this.active=!0,this.destination.add(e.schedule(t.dispatch,this.delay,{source:this,destination:this.destination,scheduler:e}))},t.prototype.scheduleNotification=function(e){if(!0!==this.errored){var t=this.scheduler,n=new l(t.now()+this.delay,e);this.queue.push(n),!1===this.active&&this._schedule(t)}},t.prototype._next=function(e){this.scheduleNotification(a.E.createNext(e))},t.prototype._error=function(e){this.errored=!0,this.queue=[],this.destination.error(e),this.unsubscribe()},t.prototype._complete=function(){this.scheduleNotification(a.E.createComplete()),this.unsubscribe()},t}(s.v),l=function(){return function(e,t){this.time=e,this.notification=t}}()},6275(e,t,n){\"use strict\";n.d(t,{p:()=>o});var r=n(5779),i=n(3409);function o(e,t){return function(n){return n.lift(new s(e,t))}}var s=function(){function e(e,t){this.predicate=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.predicate,this.thisArg))},e}(),a=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.predicate=n,i.thisArg=r,i.count=0,i}return r.C6(t,e),t.prototype._next=function(e){var t;try{t=this.predicate.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}t&&this.destination.next(e)},t}(i.v)},2331(e,t,n){\"use strict\";n.d(t,{$:()=>c,k:()=>h});var r=n(5779),i=n(3409),o=n(9290),s=n(5028),a=n(9023);function c(e,t,n,r){return function(i){return i.lift(new u(e,t,n,r))}}var u=function(){function e(e,t,n,r){this.keySelector=e,this.elementSelector=t,this.durationSelector=n,this.subjectSelector=r}return e.prototype.call=function(e,t){return t.subscribe(new d(e,this.keySelector,this.elementSelector,this.durationSelector,this.subjectSelector))},e}(),d=function(e){function t(t,n,r,i,o){var s=e.call(this,t)||this;return s.keySelector=n,s.elementSelector=r,s.durationSelector=i,s.subjectSelector=o,s.groups=null,s.attemptedToUnsubscribe=!1,s.count=0,s}return r.C6(t,e),t.prototype._next=function(e){var t;try{t=this.keySelector(e)}catch(e){return void this.error(e)}this._group(e,t)},t.prototype._group=function(e,t){var n=this.groups;n||(n=this.groups=new Map);var r,i=n.get(t);if(this.elementSelector)try{r=this.elementSelector(e)}catch(e){this.error(e)}else r=e;if(!i){i=this.subjectSelector?this.subjectSelector():new a.B7,n.set(t,i);var o=new h(t,i,this);if(this.destination.next(o),this.durationSelector){var s=void 0;try{s=this.durationSelector(new h(t,i))}catch(e){return void this.error(e)}this.add(s.subscribe(new l(t,i,this)))}}i.closed||i.next(r)},t.prototype._error=function(e){var t=this.groups;t&&(t.forEach(function(t,n){t.error(e)}),t.clear()),this.destination.error(e)},t.prototype._complete=function(){var e=this.groups;e&&(e.forEach(function(e,t){e.complete()}),e.clear()),this.destination.complete()},t.prototype.removeGroup=function(e){this.groups.delete(e)},t.prototype.unsubscribe=function(){this.closed||(this.attemptedToUnsubscribe=!0,0===this.count&&e.prototype.unsubscribe.call(this))},t}(i.v),l=function(e){function t(t,n,r){var i=e.call(this,n)||this;return i.key=t,i.group=n,i.parent=r,i}return r.C6(t,e),t.prototype._next=function(e){this.complete()},t.prototype._unsubscribe=function(){var e=this.parent,t=this.key;this.key=this.parent=null,e&&e.removeGroup(t)},t}(i.v),h=function(e){function t(t,n,r){var i=e.call(this)||this;return i.key=t,i.groupSubject=n,i.refCountSubscription=r,i}return r.C6(t,e),t.prototype._subscribe=function(e){var t=new o.y,n=this.refCountSubscription,r=this.groupSubject;return n&&!n.closed&&t.add(new p(n)),t.add(r.subscribe(e)),t},t}(s.c),p=function(e){function t(t){var n=e.call(this)||this;return n.parent=t,t.count++,n}return r.C6(t,e),t.prototype.unsubscribe=function(){var t=this.parent;t.closed||this.closed||(e.prototype.unsubscribe.call(this),t.count-=1,0===t.count&&t.attemptedToUnsubscribe&&t.unsubscribe())},t}(o.y)},2035(e,t,n){\"use strict\";n.d(t,{T:()=>o});var r=n(5779),i=n(3409);function o(e,t){return function(n){if(\"function\"!=typeof e)throw new TypeError(\"argument is not a function. Are you looking for `mapTo()`?\");return n.lift(new s(e,t))}}var s=function(){function e(e,t){this.project=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.project,this.thisArg))},e}(),a=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.project=n,i.count=0,i.thisArg=r||i,i}return r.C6(t,e),t.prototype._next=function(e){var t;try{t=this.project.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(i.v)},9050(e,t,n){\"use strict\";n.d(t,{U:()=>o});var r=n(6083),i=n(8604);function o(e){return void 0===e&&(e=Number.POSITIVE_INFINITY),(0,r.ZZ)(i.D,e)}},6083(e,t,n){\"use strict\";n.d(t,{ZZ:()=>a,qI:()=>d});var r=n(5779),i=n(2035),o=n(8241),s=n(9559);function a(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),\"function\"==typeof t?function(r){return r.pipe(a(function(n,r){return(0,o.H)(e(n,r)).pipe((0,i.T)(function(e,i){return t(n,e,r,i)}))},n))}:(\"number\"==typeof t&&(n=t),function(t){return t.lift(new c(e,n))})}var c=function(){function e(e,t){void 0===t&&(t=Number.POSITIVE_INFINITY),this.project=e,this.concurrent=t}return e.prototype.call=function(e,t){return t.subscribe(new u(e,this.project,this.concurrent))},e}(),u=function(e){function t(t,n,r){void 0===r&&(r=Number.POSITIVE_INFINITY);var i=e.call(this,t)||this;return i.project=n,i.concurrent=r,i.hasCompleted=!1,i.buffer=[],i.active=0,i.index=0,i}return r.C6(t,e),t.prototype._next=function(e){this.active<this.concurrent?this._tryNext(e):this.buffer.push(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this.active++,this._innerSub(t)},t.prototype._innerSub=function(e){var t=new s.zA(this),n=this.destination;n.add(t);var r=(0,s.tS)(e,t);r!==t&&n.add(r)},t.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete(),this.unsubscribe()},t.prototype.notifyNext=function(e){this.destination.next(e)},t.prototype.notifyComplete=function(){var e=this.buffer;this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},t}(s.gn),d=a},3724(e,t,n){\"use strict\";n.d(t,{QE:()=>s,YZ:()=>c});var r=n(5779),i=n(3409),o=n(2796);function s(e,t){return void 0===t&&(t=0),function(n){return n.lift(new a(e,t))}}var a=function(){function e(e,t){void 0===t&&(t=0),this.scheduler=e,this.delay=t}return e.prototype.call=function(e,t){return t.subscribe(new c(e,this.scheduler,this.delay))},e}(),c=function(e){function t(t,n,r){void 0===r&&(r=0);var i=e.call(this,t)||this;return i.scheduler=n,i.delay=r,i}return r.C6(t,e),t.dispatch=function(e){var t=e.notification,n=e.destination;t.observe(n),this.unsubscribe()},t.prototype.scheduleMessage=function(e){this.destination.add(this.scheduler.schedule(t.dispatch,this.delay,new u(e,this.destination)))},t.prototype._next=function(e){this.scheduleMessage(o.E.createNext(e))},t.prototype._error=function(e){this.scheduleMessage(o.E.createError(e)),this.unsubscribe()},t.prototype._complete=function(){this.scheduleMessage(o.E.createComplete()),this.unsubscribe()},t}(i.v),u=function(){return function(e,t){this.notification=e,this.destination=t}}()},1709(e,t,n){\"use strict\";n.d(t,{B:()=>o});var r=n(5779),i=n(3409);function o(){return function(e){return e.lift(new s(e))}}var s=function(){function e(e){this.connectable=e}return e.prototype.call=function(e,t){var n=this.connectable;n._refCount++;var r=new a(e,n),i=t.subscribe(r);return r.closed||(r.connection=n.connect()),i},e}(),a=function(e){function t(t,n){var r=e.call(this,t)||this;return r.connectable=n,r}return r.C6(t,e),t.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._refCount;if(t<=0)this.connection=null;else if(e._refCount=t-1,t>1)this.connection=null;else{var n=this.connection,r=e._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},t}(i.v)},2551(e,t,n){\"use strict\";n.d(t,{l:()=>s});var r=n(5779),i=n(9023),o=n(9559);function s(e){return function(t){return t.lift(new a(e,t))}}var a=function(){function e(e,t){this.notifier=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new c(e,this.notifier,this.source))},e}(),c=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.notifier=n,i.source=r,i}return r.C6(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=this.errors,r=this.retries,s=this.retriesSubscription;if(r)this.errors=void 0,this.retriesSubscription=void 0;else{n=new i.B7;try{r=(0,this.notifier)(n)}catch(t){return e.prototype.error.call(this,t)}s=(0,o.tS)(r,new o.zA(this))}this._unsubscribeAndRecycle(),this.errors=n,this.retries=r,this.retriesSubscription=s,n.next(t)}},t.prototype._unsubscribe=function(){var e=this.errors,t=this.retriesSubscription;e&&(e.unsubscribe(),this.errors=void 0),t&&(t.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0},t.prototype.notifyNext=function(){var e=this._unsubscribe;this._unsubscribe=null,this._unsubscribeAndRecycle(),this._unsubscribe=e,this.source.subscribe(this)},t}(o.gn)},2161(e,t,n){\"use strict\";n.d(t,{t:()=>i});var r=n(8358);function i(e,t,n){var i;return i=e&&\"object\"==typeof e?e:{bufferSize:e,windowTime:t,refCount:!1,scheduler:n},function(e){return e.lift(function(e){var t,n,i=e.bufferSize,o=void 0===i?Number.POSITIVE_INFINITY:i,s=e.windowTime,a=void 0===s?Number.POSITIVE_INFINITY:s,c=e.refCount,u=e.scheduler,d=0,l=!1,h=!1;return function(e){var i;d++,!t||l?(l=!1,t=new r.m(o,a,u),i=t.subscribe(this),n=e.subscribe({next:function(e){t.next(e)},error:function(e){l=!0,t.error(e)},complete:function(){h=!0,n=void 0,t.complete()}}),h&&(n=void 0)):i=t.subscribe(this),this.add(function(){d--,i.unsubscribe(),i=void 0,n&&!h&&c&&0===d&&(n.unsubscribe(),n=void 0,t=void 0)})}}(i))}}},9835(e,t,n){\"use strict\";n.d(t,{n:()=>a});var r=n(5779),i=n(2035),o=n(8241),s=n(9559);function a(e,t){return\"function\"==typeof t?function(n){return n.pipe(a(function(n,r){return(0,o.H)(e(n,r)).pipe((0,i.T)(function(e,i){return t(n,e,r,i)}))}))}:function(t){return t.lift(new c(e))}}var c=function(){function e(e){this.project=e}return e.prototype.call=function(e,t){return t.subscribe(new u(e,this.project))},e}(),u=function(e){function t(t,n){var r=e.call(this,t)||this;return r.project=n,r.index=0,r}return r.C6(t,e),t.prototype._next=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this._innerSub(t)},t.prototype._innerSub=function(e){var t=this.innerSubscription;t&&t.unsubscribe();var n=new s.zA(this),r=this.destination;r.add(n),this.innerSubscription=(0,s.tS)(e,n),this.innerSubscription!==n&&r.add(this.innerSubscription)},t.prototype._complete=function(){var t=this.innerSubscription;t&&!t.closed||e.prototype._complete.call(this),this.unsubscribe()},t.prototype._unsubscribe=function(){this.innerSubscription=void 0},t.prototype.notifyComplete=function(){this.innerSubscription=void 0,this.isStopped&&e.prototype._complete.call(this)},t.prototype.notifyNext=function(e){this.destination.next(e)},t}(s.gn)},1698(e,t,n){\"use strict\";n.d(t,{s:()=>a});var r=n(5779),i=n(3409),o=n(2413),s=n(6780);function a(e){return function(t){return 0===e?(0,s.I)():t.lift(new c(e))}}var c=function(){function e(e){if(this.total=e,this.total<0)throw new o.k}return e.prototype.call=function(e,t){return t.subscribe(new u(e,this.total))},e}(),u=function(e){function t(t,n){var r=e.call(this,t)||this;return r.total=n,r.count=0,r}return r.C6(t,e),t.prototype._next=function(e){var t=this.total,n=++this.count;n<=t&&(this.destination.next(e),n===t&&(this.destination.complete(),this.unsubscribe()))},t}(i.v)},941(e,t,n){\"use strict\";n.d(t,{V:()=>o});var r=n(5028),i=n(9290);function o(e,t){return new r.c(function(n){var r=new i.y,o=0;return r.add(t.schedule(function(){o!==e.length?(n.next(e[o++]),n.closed||r.add(this.schedule())):n.complete()})),r})}},2679(e,t,n){\"use strict\";n.d(t,{c:()=>d});var r=n(5028),i=n(9290),o=n(9067),s=n(941),a=n(3840),c=n(689),u=n(1738);function d(e,t){if(null!=e){if(function(e){return e&&\"function\"==typeof e[o.s]}(e))return function(e,t){return new r.c(function(n){var r=new i.y;return r.add(t.schedule(function(){var i=e[o.s]();r.add(i.subscribe({next:function(e){r.add(t.schedule(function(){return n.next(e)}))},error:function(e){r.add(t.schedule(function(){return n.error(e)}))},complete:function(){r.add(t.schedule(function(){return n.complete()}))}}))})),r})}(e,t);if((0,c.y)(e))return function(e,t){return new r.c(function(n){var r=new i.y;return r.add(t.schedule(function(){return e.then(function(e){r.add(t.schedule(function(){n.next(e),r.add(t.schedule(function(){return n.complete()}))}))},function(e){r.add(t.schedule(function(){return n.error(e)}))})})),r})}(e,t);if((0,u.X)(e))return(0,s.V)(e,t);if(function(e){return e&&\"function\"==typeof e[a.lJ]}(e)||\"string\"==typeof e)return function(e,t){if(!e)throw new Error(\"Iterable cannot be null\");return new r.c(function(n){var r,o=new i.y;return o.add(function(){r&&\"function\"==typeof r.return&&r.return()}),o.add(t.schedule(function(){r=e[a.lJ](),o.add(t.schedule(function(){if(!n.closed){var e,t;try{var i=r.next();e=i.value,t=i.done}catch(e){return void n.error(e)}t?n.complete():(n.next(e),this.schedule())}}))})),o})}(e,t)}throw new TypeError((null!==e&&typeof e||e)+\" is not observable\")}},1897(e,t,n){\"use strict\";n.d(t,{R:()=>i});var r=n(5779),i=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.scheduler=t,r.work=n,r.pending=!1,r}return r.C6(t,e),t.prototype.schedule=function(e,t){if(void 0===t&&(t=0),this.closed)return this;this.state=e;var n=this.id,r=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(r,n,t)),this.pending=!0,this.delay=t,this.id=this.id||this.requestAsyncId(r,this.id,t),this},t.prototype.requestAsyncId=function(e,t,n){return void 0===n&&(n=0),setInterval(e.flush.bind(e,this),n)},t.prototype.recycleAsyncId=function(e,t,n){if(void 0===n&&(n=0),null!==n&&this.delay===n&&!1===this.pending)return t;clearInterval(t)},t.prototype.execute=function(e,t){if(this.closed)return new Error(\"executing a cancelled action\");this.pending=!1;var n=this._execute(e,t);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(e,t){var n=!1,r=void 0;try{this.work(e)}catch(e){n=!0,r=!!e&&e||new Error(e)}if(n)return this.unsubscribe(),r},t.prototype._unsubscribe=function(){var e=this.id,t=this.scheduler,n=t.actions,r=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==r&&n.splice(r,1),null!=e&&(this.id=this.recycleAsyncId(t,e,null)),this.delay=null},t}(function(e){function t(t,n){return e.call(this)||this}return r.C6(t,e),t.prototype.schedule=function(e,t){return void 0===t&&(t=0),this},t}(n(9290).y))},8044(e,t,n){\"use strict\";n.d(t,{q:()=>o});var r=n(5779),i=n(6182),o=function(e){function t(n,r){void 0===r&&(r=i._.now);var o=e.call(this,n,function(){return t.delegate&&t.delegate!==o?t.delegate.now():r()})||this;return o.actions=[],o.active=!1,o.scheduled=void 0,o}return r.C6(t,e),t.prototype.schedule=function(n,r,i){return void 0===r&&(r=0),t.delegate&&t.delegate!==this?t.delegate.schedule(n,r,i):e.prototype.schedule.call(this,n,r,i)},t.prototype.flush=function(e){var t=this.actions;if(this.active)t.push(e);else{var n;this.active=!0;do{if(n=e.execute(e.state,e.delay))break}while(e=t.shift());if(this.active=!1,n){for(;e=t.shift();)e.unsubscribe();throw n}}},t}(i._)},7734(e,t,n){\"use strict\";n.d(t,{I:()=>l,$:()=>d});var r=n(5779),i=1,o=function(){return Promise.resolve()}(),s={};function a(e){return e in s&&(delete s[e],!0)}var c=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.scheduler=t,r.work=n,r}return r.C6(t,e),t.prototype.requestAsyncId=function(t,n,r){return void 0===r&&(r=0),null!==r&&r>0?e.prototype.requestAsyncId.call(this,t,n,r):(t.actions.push(this),t.scheduled||(t.scheduled=(c=t.flush.bind(t,null),u=i++,s[u]=!0,o.then(function(){return a(u)&&c()}),u)));var c,u},t.prototype.recycleAsyncId=function(t,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return e.prototype.recycleAsyncId.call(this,t,n,r);0===t.actions.length&&(a(n),t.scheduled=void 0)},t}(n(1897).R),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.C6(t,e),t.prototype.flush=function(e){this.active=!0,this.scheduled=void 0;var t,n=this.actions,r=-1,i=n.length;e=e||n.shift();do{if(t=e.execute(e.state,e.delay))break}while(++r<i&&(e=n.shift()));if(this.active=!1,t){for(;++r<i&&(e=n.shift());)e.unsubscribe();throw t}},t}(n(8044).q),d=new u(c),l=d},5573(e,t,n){\"use strict\";n.d(t,{E:()=>i,b:()=>o});var r=n(1897),i=new(n(8044).q)(r.R),o=i},4126(e,t,n){\"use strict\";n.d(t,{g:()=>a,T:()=>s});var r=n(5779),i=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.scheduler=t,r.work=n,r}return r.C6(t,e),t.prototype.schedule=function(t,n){return void 0===n&&(n=0),n>0?e.prototype.schedule.call(this,t,n):(this.delay=n,this.state=t,this.scheduler.flush(this),this)},t.prototype.execute=function(t,n){return n>0||this.closed?e.prototype.execute.call(this,t,n):this._execute(t,n)},t.prototype.requestAsyncId=function(t,n,r){return void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0?e.prototype.requestAsyncId.call(this,t,n,r):t.flush(this)},t}(n(1897).R),o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.C6(t,e),t}(n(8044).q),s=new o(i),a=s},3840(e,t,n){\"use strict\";function r(){return\"function\"==typeof Symbol&&Symbol.iterator?Symbol.iterator:\"@@iterator\"}n.d(t,{lJ:()=>i});var i=r()},9067(e,t,n){\"use strict\";n.d(t,{s:()=>r});var r=function(){return\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\"}()},6014(e,t,n){\"use strict\";n.d(t,{D:()=>r});var r=function(){return\"function\"==typeof Symbol?Symbol(\"rxSubscriber\"):\"@@rxSubscriber_\"+Math.random()}()},2413(e,t,n){\"use strict\";n.d(t,{k:()=>r});var r=function(){function e(){return Error.call(this),this.message=\"argument out of range\",this.name=\"ArgumentOutOfRangeError\",this}return e.prototype=Object.create(Error.prototype),e}()},963(e,t,n){\"use strict\";n.d(t,{G:()=>r});var r=function(){function e(){return Error.call(this),this.message=\"no elements in sequence\",this.name=\"EmptyError\",this}return e.prototype=Object.create(Error.prototype),e}()},6306(e,t,n){\"use strict\";n.d(t,{P:()=>r});var r=function(){function e(){return Error.call(this),this.message=\"object unsubscribed\",this.name=\"ObjectUnsubscribedError\",this}return e.prototype=Object.create(Error.prototype),e}()},5(e,t,n){\"use strict\";n.d(t,{M:()=>r});var r=function(){function e(){return Error.call(this),this.message=\"Timeout has occurred\",this.name=\"TimeoutError\",this}return e.prototype=Object.create(Error.prototype),e}()},9368(e,t,n){\"use strict\";n.d(t,{Z:()=>r});var r=function(){function e(e){return Error.call(this),this.message=e?e.length+\" errors occurred during unsubscription:\\n\"+e.map(function(e,t){return t+1+\") \"+e.toString()}).join(\"\\n  \"):\"\",this.name=\"UnsubscriptionError\",this.errors=e,this}return e.prototype=Object.create(Error.prototype),e}()},2724(e,t,n){\"use strict\";n.d(t,{H:()=>i});var r=n(3409);function i(e){for(;e;){var t=e,n=t.closed,i=t.destination,o=t.isStopped;if(n||o)return!1;e=i&&i instanceof r.v?i:null}return!0}},3762(e,t,n){\"use strict\";function r(e){setTimeout(function(){throw e},0)}n.d(t,{T:()=>r})},8604(e,t,n){\"use strict\";function r(e){return e}n.d(t,{D:()=>r})},2733(e,t,n){\"use strict\";n.d(t,{c:()=>r});var r=function(){return Array.isArray||function(e){return e&&\"number\"==typeof e.length}}()},1738(e,t,n){\"use strict\";n.d(t,{X:()=>r});var r=function(e){return e&&\"number\"==typeof e.length&&\"function\"!=typeof e}},1454(e,t,n){\"use strict\";function r(e){return e instanceof Date&&!isNaN(+e)}n.d(t,{$:()=>r})},3278(e,t,n){\"use strict\";function r(e){return\"function\"==typeof e}n.d(t,{T:()=>r})},899(e,t,n){\"use strict\";n.d(t,{k:()=>i});var r=n(2733);function i(e){return!(0,r.c)(e)&&e-parseFloat(e)+1>=0}},9273(e,t,n){\"use strict\";function r(e){return null!==e&&\"object\"==typeof e}n.d(t,{G:()=>r})},689(e,t,n){\"use strict\";function r(e){return!!e&&\"function\"!=typeof e.subscribe&&\"function\"==typeof e.then}n.d(t,{y:()=>r})},3017(e,t,n){\"use strict\";function r(e){return e&&\"function\"==typeof e.schedule}n.d(t,{m:()=>r})},906(e,t,n){\"use strict\";function r(){}n.d(t,{l:()=>r})},8153(e,t,n){\"use strict\";function r(e,t){function n(){return!n.pred.apply(n.thisArg,arguments)}return n.pred=e,n.thisArg=t,n}n.d(t,{A:()=>r})},990(e,t,n){\"use strict\";n.d(t,{F:()=>i,m:()=>o});var r=n(8604);function i(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return o(e)}function o(e){return 0===e.length?r.D:1===e.length?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)}}},4298(e,t,n){\"use strict\";n.d(t,{i:()=>d});var r=n(5168),i=n(3762),o=n(3840),s=n(9067),a=n(1738),c=n(689),u=n(9273),d=function(e){if(e&&\"function\"==typeof e[s.s])return d=e,function(e){var t=d[s.s]();if(\"function\"!=typeof t.subscribe)throw new TypeError(\"Provided object does not correctly implement Symbol.observable\");return t.subscribe(e)};if((0,a.X)(e))return(0,r.v)(e);if((0,c.y)(e))return n=e,function(e){return n.then(function(t){e.closed||(e.next(t),e.complete())},function(t){return e.error(t)}).then(null,i.T),e};if(e&&\"function\"==typeof e[o.lJ])return t=e,function(e){for(var n=t[o.lJ]();;){var r=void 0;try{r=n.next()}catch(t){return e.error(t),e}if(r.done){e.complete();break}if(e.next(r.value),e.closed)break}return\"function\"==typeof n.return&&e.add(function(){n.return&&n.return()}),e};var t,n,d,l=(0,u.G)(e)?\"an invalid object\":\"'\"+e+\"'\";throw new TypeError(\"You provided \"+l+\" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.\")}},5168(e,t,n){\"use strict\";n.d(t,{v:()=>r});var r=function(e){return function(t){for(var n=0,r=e.length;n<r&&!t.closed;n++)t.next(e[n]);t.complete()}}},7408(e,t,n){\"use strict\";n.d(t,{F:()=>a});var r=n(5779),i=function(e){function t(t,n,r){var i=e.call(this)||this;return i.parent=t,i.outerValue=n,i.outerIndex=r,i.index=0,i}return r.C6(t,e),t.prototype._next=function(e){this.parent.notifyNext(this.outerValue,e,this.outerIndex,this.index++,this)},t.prototype._error=function(e){this.parent.notifyError(e,this),this.unsubscribe()},t.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},t}(n(3409).v),o=n(4298),s=n(5028);function a(e,t,n,r,a){if(void 0===a&&(a=new i(e,n,r)),!a.closed)return t instanceof s.c?t.subscribe(a):(0,o.i)(t)(a)}},8072(e,t,n){\"use strict\";n.r(t),n.d(t,{audit:()=>o,auditTime:()=>d,buffer:()=>l,bufferCount:()=>m,bufferTime:()=>b,bufferToggle:()=>k,bufferWhen:()=>M,catchError:()=>D.W,combineAll:()=>F,combineLatest:()=>z,concat:()=>H,concatAll:()=>V.K,concatMap:()=>Y,concatMapTo:()=>W,count:()=>$,debounce:()=>Z,debounceTime:()=>ee,defaultIfEmpty:()=>ie,delay:()=>ae.c,delayWhen:()=>ue,dematerialize:()=>fe,distinct:()=>ge,distinctUntilChanged:()=>be,distinctUntilKeyChanged:()=>Ce,elementAt:()=>Re,endWith:()=>Ne,every:()=>Le,exhaust:()=>Fe,exhaustMap:()=>qe,expand:()=>Ge,filter:()=>Ie.p,finalize:()=>$e,find:()=>Ze,findIndex:()=>et,first:()=>nt,flatMap:()=>G.qI,groupBy:()=>rt.$,ignoreElements:()=>it,isEmpty:()=>at,last:()=>ft,map:()=>ze.T,mapTo:()=>mt,materialize:()=>vt,max:()=>Pt,merge:()=>Tt,mergeAll:()=>kt.U,mergeMap:()=>G.ZZ,mergeMapTo:()=>xt,mergeScan:()=>Rt,min:()=>Lt,multicast:()=>jt,observeOn:()=>Ut.QE,onErrorResumeNext:()=>Bt,pairwise:()=>Ht,partition:()=>Wt,pluck:()=>$t,publish:()=>Qt,publishBehavior:()=>Jt,publishLast:()=>en,publishReplay:()=>nn,race:()=>on,reduce:()=>Ot,refCount:()=>yn.B,repeat:()=>sn,repeatWhen:()=>un,retry:()=>hn,retryWhen:()=>mn.l,sample:()=>gn,sampleTime:()=>bn,scan:()=>Et,sequenceEqual:()=>wn,share:()=>Tn,shareReplay:()=>kn.t,single:()=>xn,skip:()=>Nn,skipLast:()=>jn,skipUntil:()=>Bn,skipWhile:()=>Hn,startWith:()=>Yn,subscribeOn:()=>Qn,switchAll:()=>Xn,switchMap:()=>Jn.n,switchMapTo:()=>er,take:()=>xe.s,takeLast:()=>lt,takeUntil:()=>tr,takeWhile:()=>ir,tap:()=>ur,throttle:()=>pr,throttleTime:()=>yr,throwIfEmpty:()=>Pe,timeInterval:()=>Sr,timeout:()=>Tr,timeoutWith:()=>Ir,timestamp:()=>kr,toArray:()=>Mr,window:()=>Nr,windowCount:()=>jr,windowTime:()=>Br,windowToggle:()=>Wr,windowWhen:()=>Qr,withLatestFrom:()=>Xr,zip:()=>ri,zipAll:()=>ii});var r=n(5779),i=n(9559);function o(e){return function(t){return t.lift(new s(e))}}var s=function(){function e(e){this.durationSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.durationSelector))},e}(),a=function(e){function t(t,n){var r=e.call(this,t)||this;return r.durationSelector=n,r.hasValue=!1,r}return r.C6(t,e),t.prototype._next=function(e){if(this.value=e,this.hasValue=!0,!this.throttled){var t=void 0;try{t=(0,this.durationSelector)(e)}catch(e){return this.destination.error(e)}var n=(0,i.tS)(t,new i.zA(this));!n||n.closed?this.clearThrottle():this.add(this.throttled=n)}},t.prototype.clearThrottle=function(){var e=this,t=e.value,n=e.hasValue,r=e.throttled;r&&(this.remove(r),this.throttled=void 0,r.unsubscribe()),n&&(this.value=void 0,this.hasValue=!1,this.destination.next(t))},t.prototype.notifyNext=function(){this.clearThrottle()},t.prototype.notifyComplete=function(){this.clearThrottle()},t}(i.gn),c=n(5573),u=n(5520);function d(e,t){return void 0===t&&(t=c.b),o(function(){return(0,u.O)(e,t)})}function l(e){return function(t){return t.lift(new h(e))}}var h=function(){function e(e){this.closingNotifier=e}return e.prototype.call=function(e,t){return t.subscribe(new p(e,this.closingNotifier))},e}(),p=function(e){function t(t,n){var r=e.call(this,t)||this;return r.buffer=[],r.add((0,i.tS)(n,new i.zA(r))),r}return r.C6(t,e),t.prototype._next=function(e){this.buffer.push(e)},t.prototype.notifyNext=function(){var e=this.buffer;this.buffer=[],this.destination.next(e)},t}(i.gn),f=n(3409);function m(e,t){return void 0===t&&(t=null),function(n){return n.lift(new y(e,t))}}var y=function(){function e(e,t){this.bufferSize=e,this.startBufferEvery=t,this.subscriberClass=t&&e!==t?_:g}return e.prototype.call=function(e,t){return t.subscribe(new this.subscriberClass(e,this.bufferSize,this.startBufferEvery))},e}(),g=function(e){function t(t,n){var r=e.call(this,t)||this;return r.bufferSize=n,r.buffer=[],r}return r.C6(t,e),t.prototype._next=function(e){var t=this.buffer;t.push(e),t.length==this.bufferSize&&(this.destination.next(t),this.buffer=[])},t.prototype._complete=function(){var t=this.buffer;t.length>0&&this.destination.next(t),e.prototype._complete.call(this)},t}(f.v),_=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.bufferSize=n,i.startBufferEvery=r,i.buffers=[],i.count=0,i}return r.C6(t,e),t.prototype._next=function(e){var t=this,n=t.bufferSize,r=t.startBufferEvery,i=t.buffers,o=t.count;this.count++,o%r===0&&i.push([]);for(var s=i.length;s--;){var a=i[s];a.push(e),a.length===n&&(i.splice(s,1),this.destination.next(a))}},t.prototype._complete=function(){for(var t=this.buffers,n=this.destination;t.length>0;){var r=t.shift();r.length>0&&n.next(r)}e.prototype._complete.call(this)},t}(f.v),v=n(3017);function b(e){var t=arguments.length,n=c.b;(0,v.m)(arguments[arguments.length-1])&&(n=arguments[arguments.length-1],t--);var r=null;t>=2&&(r=arguments[1]);var i=Number.POSITIVE_INFINITY;return t>=3&&(i=arguments[2]),function(t){return t.lift(new S(e,r,i,n))}}var S=function(){function e(e,t,n,r){this.bufferTimeSpan=e,this.bufferCreationInterval=t,this.maxBufferSize=n,this.scheduler=r}return e.prototype.call=function(e,t){return t.subscribe(new C(e,this.bufferTimeSpan,this.bufferCreationInterval,this.maxBufferSize,this.scheduler))},e}(),E=function(){return function(){this.buffer=[]}}(),C=function(e){function t(t,n,r,i,o){var s=e.call(this,t)||this;s.bufferTimeSpan=n,s.bufferCreationInterval=r,s.maxBufferSize=i,s.scheduler=o,s.contexts=[];var a=s.openContext();if(s.timespanOnly=null==r||r<0,s.timespanOnly){var c={subscriber:s,context:a,bufferTimeSpan:n};s.add(a.closeAction=o.schedule(w,n,c))}else{var u={subscriber:s,context:a},d={bufferTimeSpan:n,bufferCreationInterval:r,subscriber:s,scheduler:o};s.add(a.closeAction=o.schedule(O,n,u)),s.add(o.schedule(I,r,d))}return s}return r.C6(t,e),t.prototype._next=function(e){for(var t,n=this.contexts,r=n.length,i=0;i<r;i++){var o=n[i],s=o.buffer;s.push(e),s.length==this.maxBufferSize&&(t=o)}t&&this.onBufferFull(t)},t.prototype._error=function(t){this.contexts.length=0,e.prototype._error.call(this,t)},t.prototype._complete=function(){for(var t=this.contexts,n=this.destination;t.length>0;){var r=t.shift();n.next(r.buffer)}e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){this.contexts=null},t.prototype.onBufferFull=function(e){this.closeContext(e);var t=e.closeAction;if(t.unsubscribe(),this.remove(t),!this.closed&&this.timespanOnly){e=this.openContext();var n=this.bufferTimeSpan,r={subscriber:this,context:e,bufferTimeSpan:n};this.add(e.closeAction=this.scheduler.schedule(w,n,r))}},t.prototype.openContext=function(){var e=new E;return this.contexts.push(e),e},t.prototype.closeContext=function(e){this.destination.next(e.buffer);var t=this.contexts;(t?t.indexOf(e):-1)>=0&&t.splice(t.indexOf(e),1)},t}(f.v);function w(e){var t=e.subscriber,n=e.context;n&&t.closeContext(n),t.closed||(e.context=t.openContext(),e.context.closeAction=this.schedule(e,e.bufferTimeSpan))}function I(e){var t=e.bufferCreationInterval,n=e.bufferTimeSpan,r=e.subscriber,i=e.scheduler,o=r.openContext();r.closed||(r.add(o.closeAction=i.schedule(O,n,{subscriber:r,context:o})),this.schedule(e,t))}function O(e){var t=e.subscriber,n=e.context;t.closeContext(n)}var P=n(9290),A=n(7408),T=n(5422);function k(e,t){return function(n){return n.lift(new x(e,t))}}var x=function(){function e(e,t){this.openings=e,this.closingSelector=t}return e.prototype.call=function(e,t){return t.subscribe(new R(e,this.openings,this.closingSelector))},e}(),R=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.closingSelector=r,i.contexts=[],i.add((0,A.F)(i,n)),i}return r.C6(t,e),t.prototype._next=function(e){for(var t=this.contexts,n=t.length,r=0;r<n;r++)t[r].buffer.push(e)},t.prototype._error=function(t){for(var n=this.contexts;n.length>0;){var r=n.shift();r.subscription.unsubscribe(),r.buffer=null,r.subscription=null}this.contexts=null,e.prototype._error.call(this,t)},t.prototype._complete=function(){for(var t=this.contexts;t.length>0;){var n=t.shift();this.destination.next(n.buffer),n.subscription.unsubscribe(),n.buffer=null,n.subscription=null}this.contexts=null,e.prototype._complete.call(this)},t.prototype.notifyNext=function(e,t){e?this.closeBuffer(e):this.openBuffer(t)},t.prototype.notifyComplete=function(e){this.closeBuffer(e.context)},t.prototype.openBuffer=function(e){try{var t=this.closingSelector.call(this,e);t&&this.trySubscribe(t)}catch(e){this._error(e)}},t.prototype.closeBuffer=function(e){var t=this.contexts;if(t&&e){var n=e.buffer,r=e.subscription;this.destination.next(n),t.splice(t.indexOf(e),1),this.remove(r),r.unsubscribe()}},t.prototype.trySubscribe=function(e){var t=this.contexts,n=new P.y,r={buffer:[],subscription:n};t.push(r);var i=(0,A.F)(this,e,r);!i||i.closed?this.closeBuffer(r):(i.context=r,this.add(i),n.add(i))},t}(T.E);function M(e){return function(t){return t.lift(new N(e))}}var N=function(){function e(e){this.closingSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new L(e,this.closingSelector))},e}(),L=function(e){function t(t,n){var r=e.call(this,t)||this;return r.closingSelector=n,r.subscribing=!1,r.openBuffer(),r}return r.C6(t,e),t.prototype._next=function(e){this.buffer.push(e)},t.prototype._complete=function(){var t=this.buffer;t&&this.destination.next(t),e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){this.buffer=void 0,this.subscribing=!1},t.prototype.notifyNext=function(){this.openBuffer()},t.prototype.notifyComplete=function(){this.subscribing?this.complete():this.openBuffer()},t.prototype.openBuffer=function(){var e=this.closingSubscription;e&&(this.remove(e),e.unsubscribe());var t,n=this.buffer;this.buffer&&this.destination.next(n),this.buffer=[];try{t=(0,this.closingSelector)()}catch(e){return this.error(e)}e=new P.y,this.closingSubscription=e,this.add(e),this.subscribing=!0,e.add((0,i.tS)(t,new i.zA(this))),this.subscribing=!1},t}(i.gn),D=n(9586),j=n(3483);function F(e){return function(t){return t.lift(new j.ZS(e))}}var U=n(2733),B=n(8241);function z(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=null;return\"function\"==typeof e[e.length-1]&&(n=e.pop()),1===e.length&&(0,U.c)(e[0])&&(e=e[0].slice()),function(t){return t.lift.call((0,B.H)([t].concat(e)),new j.ZS(n))}}var q=n(9301);function H(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return t.lift.call(q.x.apply(void 0,[t].concat(e)))}}var V=n(8930),G=n(6083);function Y(e,t){return(0,G.ZZ)(e,t,1)}function W(e,t){return Y(function(){return e},t)}function $(e){return function(t){return t.lift(new K(e,t))}}var K=function(){function e(e,t){this.predicate=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new Q(e,this.predicate,this.source))},e}(),Q=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.predicate=n,i.source=r,i.count=0,i.index=0,i}return r.C6(t,e),t.prototype._next=function(e){this.predicate?this._tryPredicate(e):this.count++},t.prototype._tryPredicate=function(e){var t;try{t=this.predicate(e,this.index++,this.source)}catch(e){return void this.destination.error(e)}t&&this.count++},t.prototype._complete=function(){this.destination.next(this.count),this.destination.complete()},t}(f.v);function Z(e){return function(t){return t.lift(new J(e))}}var J=function(){function e(e){this.durationSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new X(e,this.durationSelector))},e}(),X=function(e){function t(t,n){var r=e.call(this,t)||this;return r.durationSelector=n,r.hasValue=!1,r}return r.C6(t,e),t.prototype._next=function(e){try{var t=this.durationSelector.call(this,e);t&&this._tryNext(e,t)}catch(e){this.destination.error(e)}},t.prototype._complete=function(){this.emitValue(),this.destination.complete()},t.prototype._tryNext=function(e,t){var n=this.durationSubscription;this.value=e,this.hasValue=!0,n&&(n.unsubscribe(),this.remove(n)),(n=(0,i.tS)(t,new i.zA(this)))&&!n.closed&&this.add(this.durationSubscription=n)},t.prototype.notifyNext=function(){this.emitValue()},t.prototype.notifyComplete=function(){this.emitValue()},t.prototype.emitValue=function(){if(this.hasValue){var t=this.value,n=this.durationSubscription;n&&(this.durationSubscription=void 0,n.unsubscribe(),this.remove(n)),this.value=void 0,this.hasValue=!1,e.prototype._next.call(this,t)}},t}(i.gn);function ee(e,t){return void 0===t&&(t=c.b),function(n){return n.lift(new te(e,t))}}var te=function(){function e(e,t){this.dueTime=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new ne(e,this.dueTime,this.scheduler))},e}(),ne=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.dueTime=n,i.scheduler=r,i.debouncedSubscription=null,i.lastValue=null,i.hasValue=!1,i}return r.C6(t,e),t.prototype._next=function(e){this.clearDebounce(),this.lastValue=e,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(re,this.dueTime,this))},t.prototype._complete=function(){this.debouncedNext(),this.destination.complete()},t.prototype.debouncedNext=function(){if(this.clearDebounce(),this.hasValue){var e=this.lastValue;this.lastValue=null,this.hasValue=!1,this.destination.next(e)}},t.prototype.clearDebounce=function(){var e=this.debouncedSubscription;null!==e&&(this.remove(e),e.unsubscribe(),this.debouncedSubscription=null)},t}(f.v);function re(e){e.debouncedNext()}function ie(e){return void 0===e&&(e=null),function(t){return t.lift(new oe(e))}}var oe=function(){function e(e){this.defaultValue=e}return e.prototype.call=function(e,t){return t.subscribe(new se(e,this.defaultValue))},e}(),se=function(e){function t(t,n){var r=e.call(this,t)||this;return r.defaultValue=n,r.isEmpty=!0,r}return r.C6(t,e),t.prototype._next=function(e){this.isEmpty=!1,this.destination.next(e)},t.prototype._complete=function(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()},t}(f.v),ae=n(3158),ce=n(5028);function ue(e,t){return t?function(n){return new he(n,t).lift(new de(e))}:function(t){return t.lift(new de(e))}}var de=function(){function e(e){this.delayDurationSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new le(e,this.delayDurationSelector))},e}(),le=function(e){function t(t,n){var r=e.call(this,t)||this;return r.delayDurationSelector=n,r.completed=!1,r.delayNotifierSubscriptions=[],r.index=0,r}return r.C6(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(e),this.removeSubscription(i),this.tryComplete()},t.prototype.notifyError=function(e,t){this._error(e)},t.prototype.notifyComplete=function(e){var t=this.removeSubscription(e);t&&this.destination.next(t),this.tryComplete()},t.prototype._next=function(e){var t=this.index++;try{var n=this.delayDurationSelector(e,t);n&&this.tryDelay(n,e)}catch(e){this.destination.error(e)}},t.prototype._complete=function(){this.completed=!0,this.tryComplete(),this.unsubscribe()},t.prototype.removeSubscription=function(e){e.unsubscribe();var t=this.delayNotifierSubscriptions.indexOf(e);return-1!==t&&this.delayNotifierSubscriptions.splice(t,1),e.outerValue},t.prototype.tryDelay=function(e,t){var n=(0,A.F)(this,e,t);n&&!n.closed&&(this.destination.add(n),this.delayNotifierSubscriptions.push(n))},t.prototype.tryComplete=function(){this.completed&&0===this.delayNotifierSubscriptions.length&&this.destination.complete()},t}(T.E),he=function(e){function t(t,n){var r=e.call(this)||this;return r.source=t,r.subscriptionDelay=n,r}return r.C6(t,e),t.prototype._subscribe=function(e){this.subscriptionDelay.subscribe(new pe(e,this.source))},t}(ce.c),pe=function(e){function t(t,n){var r=e.call(this)||this;return r.parent=t,r.source=n,r.sourceSubscribed=!1,r}return r.C6(t,e),t.prototype._next=function(e){this.subscribeToSource()},t.prototype._error=function(e){this.unsubscribe(),this.parent.error(e)},t.prototype._complete=function(){this.unsubscribe(),this.subscribeToSource()},t.prototype.subscribeToSource=function(){this.sourceSubscribed||(this.sourceSubscribed=!0,this.unsubscribe(),this.source.subscribe(this.parent))},t}(f.v);function fe(){return function(e){return e.lift(new me)}}var me=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new ye(e))},e}(),ye=function(e){function t(t){return e.call(this,t)||this}return r.C6(t,e),t.prototype._next=function(e){e.observe(this.destination)},t}(f.v);function ge(e,t){return function(n){return n.lift(new _e(e,t))}}var _e=function(){function e(e,t){this.keySelector=e,this.flushes=t}return e.prototype.call=function(e,t){return t.subscribe(new ve(e,this.keySelector,this.flushes))},e}(),ve=function(e){function t(t,n,r){var o=e.call(this,t)||this;return o.keySelector=n,o.values=new Set,r&&o.add((0,i.tS)(r,new i.zA(o))),o}return r.C6(t,e),t.prototype.notifyNext=function(){this.values.clear()},t.prototype.notifyError=function(e){this._error(e)},t.prototype._next=function(e){this.keySelector?this._useKeySelector(e):this._finalizeNext(e,e)},t.prototype._useKeySelector=function(e){var t,n=this.destination;try{t=this.keySelector(e)}catch(e){return void n.error(e)}this._finalizeNext(t,e)},t.prototype._finalizeNext=function(e,t){var n=this.values;n.has(e)||(n.add(e),this.destination.next(t))},t}(i.gn);function be(e,t){return function(n){return n.lift(new Se(e,t))}}var Se=function(){function e(e,t){this.compare=e,this.keySelector=t}return e.prototype.call=function(e,t){return t.subscribe(new Ee(e,this.compare,this.keySelector))},e}(),Ee=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.keySelector=r,i.hasKey=!1,\"function\"==typeof n&&(i.compare=n),i}return r.C6(t,e),t.prototype.compare=function(e,t){return e===t},t.prototype._next=function(e){var t;try{var n=this.keySelector;t=n?n(e):e}catch(e){return this.destination.error(e)}var r=!1;if(this.hasKey)try{r=(0,this.compare)(this.key,t)}catch(e){return this.destination.error(e)}else this.hasKey=!0;r||(this.key=t,this.destination.next(e))},t}(f.v);function Ce(e,t){return be(function(n,r){return t?t(n[e],r[e]):n[e]===r[e]})}var we=n(2413),Ie=n(6275),Oe=n(963);function Pe(e){return void 0===e&&(e=ke),function(t){return t.lift(new Ae(e))}}var Ae=function(){function e(e){this.errorFactory=e}return e.prototype.call=function(e,t){return t.subscribe(new Te(e,this.errorFactory))},e}(),Te=function(e){function t(t,n){var r=e.call(this,t)||this;return r.errorFactory=n,r.hasValue=!1,r}return r.C6(t,e),t.prototype._next=function(e){this.hasValue=!0,this.destination.next(e)},t.prototype._complete=function(){if(this.hasValue)return this.destination.complete();var e=void 0;try{e=this.errorFactory()}catch(t){e=t}this.destination.error(e)},t}(f.v);function ke(){return new Oe.G}var xe=n(1698);function Re(e,t){if(e<0)throw new we.k;var n=arguments.length>=2;return function(r){return r.pipe((0,Ie.p)(function(t,n){return n===e}),(0,xe.s)(1),n?ie(t):Pe(function(){return new we.k}))}}var Me=n(4128);function Ne(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return(0,q.x)(t,Me.of.apply(void 0,e))}}function Le(e,t){return function(n){return n.lift(new De(e,t,n))}}var De=function(){function e(e,t,n){this.predicate=e,this.thisArg=t,this.source=n}return e.prototype.call=function(e,t){return t.subscribe(new je(e,this.predicate,this.thisArg,this.source))},e}(),je=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o.predicate=n,o.thisArg=r,o.source=i,o.index=0,o.thisArg=r||o,o}return r.C6(t,e),t.prototype.notifyComplete=function(e){this.destination.next(e),this.destination.complete()},t.prototype._next=function(e){var t=!1;try{t=this.predicate.call(this.thisArg,e,this.index++,this.source)}catch(e){return void this.destination.error(e)}t||this.notifyComplete(!1)},t.prototype._complete=function(){this.notifyComplete(!0)},t}(f.v);function Fe(){return function(e){return e.lift(new Ue)}}var Ue=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new Be(e))},e}(),Be=function(e){function t(t){var n=e.call(this,t)||this;return n.hasCompleted=!1,n.hasSubscription=!1,n}return r.C6(t,e),t.prototype._next=function(e){this.hasSubscription||(this.hasSubscription=!0,this.add((0,i.tS)(e,new i.zA(this))))},t.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete()},t.prototype.notifyComplete=function(){this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},t}(i.gn),ze=n(2035);function qe(e,t){return t?function(n){return n.pipe(qe(function(n,r){return(0,B.H)(e(n,r)).pipe((0,ze.T)(function(e,i){return t(n,e,r,i)}))}))}:function(t){return t.lift(new He(e))}}var He=function(){function e(e){this.project=e}return e.prototype.call=function(e,t){return t.subscribe(new Ve(e,this.project))},e}(),Ve=function(e){function t(t,n){var r=e.call(this,t)||this;return r.project=n,r.hasSubscription=!1,r.hasCompleted=!1,r.index=0,r}return r.C6(t,e),t.prototype._next=function(e){this.hasSubscription||this.tryNext(e)},t.prototype.tryNext=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this.hasSubscription=!0,this._innerSub(t)},t.prototype._innerSub=function(e){var t=new i.zA(this),n=this.destination;n.add(t);var r=(0,i.tS)(e,t);r!==t&&n.add(r)},t.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete(),this.unsubscribe()},t.prototype.notifyNext=function(e){this.destination.next(e)},t.prototype.notifyError=function(e){this.destination.error(e)},t.prototype.notifyComplete=function(){this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},t}(i.gn);function Ge(e,t,n){return void 0===t&&(t=Number.POSITIVE_INFINITY),t=(t||0)<1?Number.POSITIVE_INFINITY:t,function(r){return r.lift(new Ye(e,t,n))}}var Ye=function(){function e(e,t,n){this.project=e,this.concurrent=t,this.scheduler=n}return e.prototype.call=function(e,t){return t.subscribe(new We(e,this.project,this.concurrent,this.scheduler))},e}(),We=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o.project=n,o.concurrent=r,o.scheduler=i,o.index=0,o.active=0,o.hasCompleted=!1,r<Number.POSITIVE_INFINITY&&(o.buffer=[]),o}return r.C6(t,e),t.dispatch=function(e){var t=e.subscriber,n=e.result,r=e.value,i=e.index;t.subscribeToProjection(n,r,i)},t.prototype._next=function(e){var n=this.destination;if(n.closed)this._complete();else{var r=this.index++;if(this.active<this.concurrent){n.next(e);try{var i=(0,this.project)(e,r);if(this.scheduler){var o={subscriber:this,result:i,value:e,index:r};this.destination.add(this.scheduler.schedule(t.dispatch,0,o))}else this.subscribeToProjection(i,e,r)}catch(e){n.error(e)}}else this.buffer.push(e)}},t.prototype.subscribeToProjection=function(e,t,n){this.active++,this.destination.add((0,i.tS)(e,new i.zA(this)))},t.prototype._complete=function(){this.hasCompleted=!0,this.hasCompleted&&0===this.active&&this.destination.complete(),this.unsubscribe()},t.prototype.notifyNext=function(e){this._next(e)},t.prototype.notifyComplete=function(){var e=this.buffer;this.active--,e&&e.length>0&&this._next(e.shift()),this.hasCompleted&&0===this.active&&this.destination.complete()},t}(i.gn);function $e(e){return function(t){return t.lift(new Ke(e))}}var Ke=function(){function e(e){this.callback=e}return e.prototype.call=function(e,t){return t.subscribe(new Qe(e,this.callback))},e}(),Qe=function(e){function t(t,n){var r=e.call(this,t)||this;return r.add(new P.y(n)),r}return r.C6(t,e),t}(f.v);function Ze(e,t){if(\"function\"!=typeof e)throw new TypeError(\"predicate is not a function\");return function(n){return n.lift(new Je(e,n,!1,t))}}var Je=function(){function e(e,t,n,r){this.predicate=e,this.source=t,this.yieldIndex=n,this.thisArg=r}return e.prototype.call=function(e,t){return t.subscribe(new Xe(e,this.predicate,this.source,this.yieldIndex,this.thisArg))},e}(),Xe=function(e){function t(t,n,r,i,o){var s=e.call(this,t)||this;return s.predicate=n,s.source=r,s.yieldIndex=i,s.thisArg=o,s.index=0,s}return r.C6(t,e),t.prototype.notifyComplete=function(e){var t=this.destination;t.next(e),t.complete(),this.unsubscribe()},t.prototype._next=function(e){var t=this.predicate,n=this.thisArg,r=this.index++;try{t.call(n||this,e,r,this.source)&&this.notifyComplete(this.yieldIndex?r:e)}catch(e){this.destination.error(e)}},t.prototype._complete=function(){this.notifyComplete(this.yieldIndex?-1:void 0)},t}(f.v);function et(e,t){return function(n){return n.lift(new Je(e,n,!0,t))}}var tt=n(8604);function nt(e,t){var n=arguments.length>=2;return function(r){return r.pipe(e?(0,Ie.p)(function(t,n){return e(t,n,r)}):tt.D,(0,xe.s)(1),n?ie(t):Pe(function(){return new Oe.G}))}}var rt=n(2331);function it(){return function(e){return e.lift(new ot)}}var ot=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new st(e))},e}(),st=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.C6(t,e),t.prototype._next=function(e){},t}(f.v);function at(){return function(e){return e.lift(new ct)}}var ct=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new ut(e))},e}(),ut=function(e){function t(t){return e.call(this,t)||this}return r.C6(t,e),t.prototype.notifyComplete=function(e){var t=this.destination;t.next(e),t.complete()},t.prototype._next=function(e){this.notifyComplete(!1)},t.prototype._complete=function(){this.notifyComplete(!0)},t}(f.v),dt=n(6780);function lt(e){return function(t){return 0===e?(0,dt.I)():t.lift(new ht(e))}}var ht=function(){function e(e){if(this.total=e,this.total<0)throw new we.k}return e.prototype.call=function(e,t){return t.subscribe(new pt(e,this.total))},e}(),pt=function(e){function t(t,n){var r=e.call(this,t)||this;return r.total=n,r.ring=new Array,r.count=0,r}return r.C6(t,e),t.prototype._next=function(e){var t=this.ring,n=this.total,r=this.count++;t.length<n?t.push(e):t[r%n]=e},t.prototype._complete=function(){var e=this.destination,t=this.count;if(t>0)for(var n=this.count>=this.total?this.total:this.count,r=this.ring,i=0;i<n;i++){var o=t++%n;e.next(r[o])}e.complete()},t}(f.v);function ft(e,t){var n=arguments.length>=2;return function(r){return r.pipe(e?(0,Ie.p)(function(t,n){return e(t,n,r)}):tt.D,lt(1),n?ie(t):Pe(function(){return new Oe.G}))}}function mt(e){return function(t){return t.lift(new yt(e))}}var yt=function(){function e(e){this.value=e}return e.prototype.call=function(e,t){return t.subscribe(new gt(e,this.value))},e}(),gt=function(e){function t(t,n){var r=e.call(this,t)||this;return r.value=n,r}return r.C6(t,e),t.prototype._next=function(e){this.destination.next(this.value)},t}(f.v),_t=n(2796);function vt(){return function(e){return e.lift(new bt)}}var bt=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new St(e))},e}(),St=function(e){function t(t){return e.call(this,t)||this}return r.C6(t,e),t.prototype._next=function(e){this.destination.next(_t.E.createNext(e))},t.prototype._error=function(e){var t=this.destination;t.next(_t.E.createError(e)),t.complete()},t.prototype._complete=function(){var e=this.destination;e.next(_t.E.createComplete()),e.complete()},t}(f.v);function Et(e,t){var n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new Ct(e,t,n))}}var Ct=function(){function e(e,t,n){void 0===n&&(n=!1),this.accumulator=e,this.seed=t,this.hasSeed=n}return e.prototype.call=function(e,t){return t.subscribe(new wt(e,this.accumulator,this.seed,this.hasSeed))},e}(),wt=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o.accumulator=n,o._seed=r,o.hasSeed=i,o.index=0,o}return r.C6(t,e),Object.defineProperty(t.prototype,\"seed\",{get:function(){return this._seed},set:function(e){this.hasSeed=!0,this._seed=e},enumerable:!0,configurable:!0}),t.prototype._next=function(e){if(this.hasSeed)return this._tryNext(e);this.seed=e,this.destination.next(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.accumulator(this.seed,e,n)}catch(e){this.destination.error(e)}this.seed=t,this.destination.next(t)},t}(f.v),It=n(990);function Ot(e,t){return arguments.length>=2?function(n){return(0,It.F)(Et(e,t),lt(1),ie(t))(n)}:function(t){return(0,It.F)(Et(function(t,n,r){return e(t,n,r+1)}),lt(1))(t)}}function Pt(e){return Ot(\"function\"==typeof e?function(t,n){return e(t,n)>0?t:n}:function(e,t){return e>t?e:t})}var At=n(3837);function Tt(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return t.lift.call(At.h.apply(void 0,[t].concat(e)))}}var kt=n(9050);function xt(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),\"function\"==typeof t?(0,G.ZZ)(function(){return e},t,n):(\"number\"==typeof t&&(n=t),(0,G.ZZ)(function(){return e},n))}function Rt(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),function(r){return r.lift(new Mt(e,t,n))}}var Mt=function(){function e(e,t,n){this.accumulator=e,this.seed=t,this.concurrent=n}return e.prototype.call=function(e,t){return t.subscribe(new Nt(e,this.accumulator,this.seed,this.concurrent))},e}(),Nt=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o.accumulator=n,o.acc=r,o.concurrent=i,o.hasValue=!1,o.hasCompleted=!1,o.buffer=[],o.active=0,o.index=0,o}return r.C6(t,e),t.prototype._next=function(e){if(this.active<this.concurrent){var t=this.index++,n=this.destination,r=void 0;try{r=(0,this.accumulator)(this.acc,e,t)}catch(e){return n.error(e)}this.active++,this._innerSub(r)}else this.buffer.push(e)},t.prototype._innerSub=function(e){var t=new i.zA(this),n=this.destination;n.add(t);var r=(0,i.tS)(e,t);r!==t&&n.add(r)},t.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete()),this.unsubscribe()},t.prototype.notifyNext=function(e){var t=this.destination;this.acc=e,this.hasValue=!0,t.next(e)},t.prototype.notifyComplete=function(){var e=this.buffer;this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete())},t}(i.gn);function Lt(e){return Ot(\"function\"==typeof e?function(t,n){return e(t,n)<0?t:n}:function(e,t){return e<t?e:t})}var Dt=n(9762);function jt(e,t){return function(n){var r;if(r=\"function\"==typeof e?e:function(){return e},\"function\"==typeof t)return n.lift(new Ft(r,t));var i=Object.create(n,Dt.f);return i.source=n,i.subjectFactory=r,i}}var Ft=function(){function e(e,t){this.subjectFactory=e,this.selector=t}return e.prototype.call=function(e,t){var n=this.selector,r=this.subjectFactory(),i=n(r).subscribe(e);return i.add(t.subscribe(r)),i},e}(),Ut=n(3724);function Bt(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return 1===e.length&&(0,U.c)(e[0])&&(e=e[0]),function(t){return t.lift(new zt(e))}}var zt=function(){function e(e){this.nextSources=e}return e.prototype.call=function(e,t){return t.subscribe(new qt(e,this.nextSources))},e}(),qt=function(e){function t(t,n){var r=e.call(this,t)||this;return r.destination=t,r.nextSources=n,r}return r.C6(t,e),t.prototype.notifyError=function(){this.subscribeToNextSource()},t.prototype.notifyComplete=function(){this.subscribeToNextSource()},t.prototype._error=function(e){this.subscribeToNextSource(),this.unsubscribe()},t.prototype._complete=function(){this.subscribeToNextSource(),this.unsubscribe()},t.prototype.subscribeToNextSource=function(){var e=this.nextSources.shift();if(e){var t=new i.zA(this),n=this.destination;n.add(t);var r=(0,i.tS)(e,t);r!==t&&n.add(r)}else this.destination.complete()},t}(i.gn);function Ht(){return function(e){return e.lift(new Vt)}}var Vt=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new Gt(e))},e}(),Gt=function(e){function t(t){var n=e.call(this,t)||this;return n.hasPrev=!1,n}return r.C6(t,e),t.prototype._next=function(e){var t;this.hasPrev?t=[this.prev,e]:this.hasPrev=!0,this.prev=e,t&&this.destination.next(t)},t}(f.v),Yt=n(8153);function Wt(e,t){return function(n){return[(0,Ie.p)(e,t)(n),(0,Ie.p)((0,Yt.A)(e,t))(n)]}}function $t(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.length;if(0===n)throw new Error(\"list of properties cannot be empty.\");return function(t){return(0,ze.T)(function(e,t){return function(n){for(var r=n,i=0;i<t;i++){var o=null!=r?r[e[i]]:void 0;if(void 0===o)return;r=o}return r}}(e,n))(t)}}var Kt=n(9023);function Qt(e){return e?jt(function(){return new Kt.B7},e):jt(new Kt.B7)}var Zt=n(2361);function Jt(e){return function(t){return jt(new Zt.t(e))(t)}}var Xt=n(1403);function en(){return function(e){return jt(new Xt.h)(e)}}var tn=n(8358);function nn(e,t,n,r){n&&\"function\"!=typeof n&&(r=n);var i=\"function\"==typeof n?n:void 0,o=new tn.m(e,t,r);return function(e){return jt(function(){return o},i)(e)}}var rn=n(4460);function on(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return 1===e.length&&(0,U.c)(e[0])&&(e=e[0]),t.lift.call(rn.O4.apply(void 0,[t].concat(e)))}}function sn(e){return void 0===e&&(e=-1),function(t){return 0===e?(0,dt.I)():e<0?t.lift(new an(-1,t)):t.lift(new an(e-1,t))}}var an=function(){function e(e,t){this.count=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new cn(e,this.count,this.source))},e}(),cn=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.count=n,i.source=r,i}return r.C6(t,e),t.prototype.complete=function(){if(!this.isStopped){var t=this.source,n=this.count;if(0===n)return e.prototype.complete.call(this);n>-1&&(this.count=n-1),t.subscribe(this._unsubscribeAndRecycle())}},t}(f.v);function un(e){return function(t){return t.lift(new dn(e))}}var dn=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){return t.subscribe(new ln(e,this.notifier,t))},e}(),ln=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.notifier=n,i.source=r,i.sourceIsBeingSubscribedTo=!0,i}return r.C6(t,e),t.prototype.notifyNext=function(){this.sourceIsBeingSubscribedTo=!0,this.source.subscribe(this)},t.prototype.notifyComplete=function(){if(!1===this.sourceIsBeingSubscribedTo)return e.prototype.complete.call(this)},t.prototype.complete=function(){if(this.sourceIsBeingSubscribedTo=!1,!this.isStopped){if(this.retries||this.subscribeToRetries(),!this.retriesSubscription||this.retriesSubscription.closed)return e.prototype.complete.call(this);this._unsubscribeAndRecycle(),this.notifications.next(void 0)}},t.prototype._unsubscribe=function(){var e=this.notifications,t=this.retriesSubscription;e&&(e.unsubscribe(),this.notifications=void 0),t&&(t.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0},t.prototype._unsubscribeAndRecycle=function(){var t=this._unsubscribe;return this._unsubscribe=null,e.prototype._unsubscribeAndRecycle.call(this),this._unsubscribe=t,this},t.prototype.subscribeToRetries=function(){var t;this.notifications=new Kt.B7;try{t=(0,this.notifier)(this.notifications)}catch(t){return e.prototype.complete.call(this)}this.retries=t,this.retriesSubscription=(0,i.tS)(t,new i.zA(this))},t}(i.gn);function hn(e){return void 0===e&&(e=-1),function(t){return t.lift(new pn(e,t))}}var pn=function(){function e(e,t){this.count=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new fn(e,this.count,this.source))},e}(),fn=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.count=n,i.source=r,i}return r.C6(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=this.source,r=this.count;if(0===r)return e.prototype.error.call(this,t);r>-1&&(this.count=r-1),n.subscribe(this._unsubscribeAndRecycle())}},t}(f.v),mn=n(2551),yn=n(1709);function gn(e){return function(t){return t.lift(new _n(e))}}var _n=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){var n=new vn(e),r=t.subscribe(n);return r.add((0,i.tS)(this.notifier,new i.zA(n))),r},e}(),vn=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.hasValue=!1,t}return r.C6(t,e),t.prototype._next=function(e){this.value=e,this.hasValue=!0},t.prototype.notifyNext=function(){this.emitValue()},t.prototype.notifyComplete=function(){this.emitValue()},t.prototype.emitValue=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.value))},t}(i.gn);function bn(e,t){return void 0===t&&(t=c.b),function(n){return n.lift(new Sn(e,t))}}var Sn=function(){function e(e,t){this.period=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new En(e,this.period,this.scheduler))},e}(),En=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.period=n,i.scheduler=r,i.hasValue=!1,i.add(r.schedule(Cn,n,{subscriber:i,period:n})),i}return r.C6(t,e),t.prototype._next=function(e){this.lastValue=e,this.hasValue=!0},t.prototype.notifyNext=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.lastValue))},t}(f.v);function Cn(e){var t=e.subscriber,n=e.period;t.notifyNext(),this.schedule(e,n)}function wn(e,t){return function(n){return n.lift(new In(e,t))}}var In=function(){function e(e,t){this.compareTo=e,this.comparator=t}return e.prototype.call=function(e,t){return t.subscribe(new On(e,this.compareTo,this.comparator))},e}(),On=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.compareTo=n,i.comparator=r,i._a=[],i._b=[],i._oneComplete=!1,i.destination.add(n.subscribe(new Pn(t,i))),i}return r.C6(t,e),t.prototype._next=function(e){this._oneComplete&&0===this._b.length?this.emit(!1):(this._a.push(e),this.checkValues())},t.prototype._complete=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0,this.unsubscribe()},t.prototype.checkValues=function(){for(var e=this,t=e._a,n=e._b,r=e.comparator;t.length>0&&n.length>0;){var i=t.shift(),o=n.shift(),s=!1;try{s=r?r(i,o):i===o}catch(e){this.destination.error(e)}s||this.emit(!1)}},t.prototype.emit=function(e){var t=this.destination;t.next(e),t.complete()},t.prototype.nextB=function(e){this._oneComplete&&0===this._a.length?this.emit(!1):(this._b.push(e),this.checkValues())},t.prototype.completeB=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0},t}(f.v),Pn=function(e){function t(t,n){var r=e.call(this,t)||this;return r.parent=n,r}return r.C6(t,e),t.prototype._next=function(e){this.parent.nextB(e)},t.prototype._error=function(e){this.parent.error(e),this.unsubscribe()},t.prototype._complete=function(){this.parent.completeB(),this.unsubscribe()},t}(f.v);function An(){return new Kt.B7}function Tn(){return function(e){return(0,yn.B)()(jt(An)(e))}}var kn=n(2161);function xn(e){return function(t){return t.lift(new Rn(e,t))}}var Rn=function(){function e(e,t){this.predicate=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new Mn(e,this.predicate,this.source))},e}(),Mn=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.predicate=n,i.source=r,i.seenValue=!1,i.index=0,i}return r.C6(t,e),t.prototype.applySingleValue=function(e){this.seenValue?this.destination.error(\"Sequence contains more than one element\"):(this.seenValue=!0,this.singleValue=e)},t.prototype._next=function(e){var t=this.index++;this.predicate?this.tryNext(e,t):this.applySingleValue(e)},t.prototype.tryNext=function(e,t){try{this.predicate(e,t,this.source)&&this.applySingleValue(e)}catch(e){this.destination.error(e)}},t.prototype._complete=function(){var e=this.destination;this.index>0?(e.next(this.seenValue?this.singleValue:void 0),e.complete()):e.error(new Oe.G)},t}(f.v);function Nn(e){return function(t){return t.lift(new Ln(e))}}var Ln=function(){function e(e){this.total=e}return e.prototype.call=function(e,t){return t.subscribe(new Dn(e,this.total))},e}(),Dn=function(e){function t(t,n){var r=e.call(this,t)||this;return r.total=n,r.count=0,r}return r.C6(t,e),t.prototype._next=function(e){++this.count>this.total&&this.destination.next(e)},t}(f.v);function jn(e){return function(t){return t.lift(new Fn(e))}}var Fn=function(){function e(e){if(this._skipCount=e,this._skipCount<0)throw new we.k}return e.prototype.call=function(e,t){return 0===this._skipCount?t.subscribe(new f.v(e)):t.subscribe(new Un(e,this._skipCount))},e}(),Un=function(e){function t(t,n){var r=e.call(this,t)||this;return r._skipCount=n,r._count=0,r._ring=new Array(n),r}return r.C6(t,e),t.prototype._next=function(e){var t=this._skipCount,n=this._count++;if(n<t)this._ring[n]=e;else{var r=n%t,i=this._ring,o=i[r];i[r]=e,this.destination.next(o)}},t}(f.v);function Bn(e){return function(t){return t.lift(new zn(e))}}var zn=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){return t.subscribe(new qn(e,this.notifier))},e}(),qn=function(e){function t(t,n){var r=e.call(this,t)||this;r.hasValue=!1;var o=new i.zA(r);r.add(o),r.innerSubscription=o;var s=(0,i.tS)(n,o);return s!==o&&(r.add(s),r.innerSubscription=s),r}return r.C6(t,e),t.prototype._next=function(t){this.hasValue&&e.prototype._next.call(this,t)},t.prototype.notifyNext=function(){this.hasValue=!0,this.innerSubscription&&this.innerSubscription.unsubscribe()},t.prototype.notifyComplete=function(){},t}(i.gn);function Hn(e){return function(t){return t.lift(new Vn(e))}}var Vn=function(){function e(e){this.predicate=e}return e.prototype.call=function(e,t){return t.subscribe(new Gn(e,this.predicate))},e}(),Gn=function(e){function t(t,n){var r=e.call(this,t)||this;return r.predicate=n,r.skipping=!0,r.index=0,r}return r.C6(t,e),t.prototype._next=function(e){var t=this.destination;this.skipping&&this.tryCallPredicate(e),this.skipping||t.next(e)},t.prototype.tryCallPredicate=function(e){try{var t=this.predicate(e,this.index++);this.skipping=Boolean(t)}catch(e){this.destination.error(e)}},t}(f.v);function Yn(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[e.length-1];return(0,v.m)(n)?(e.pop(),function(t){return(0,q.x)(e,t,n)}):function(t){return(0,q.x)(e,t)}}var Wn=n(7734),$n=n(899),Kn=function(e){function t(t,n,r){void 0===n&&(n=0),void 0===r&&(r=Wn.I);var i=e.call(this)||this;return i.source=t,i.delayTime=n,i.scheduler=r,(!(0,$n.k)(n)||n<0)&&(i.delayTime=0),r&&\"function\"==typeof r.schedule||(i.scheduler=Wn.I),i}return r.C6(t,e),t.create=function(e,n,r){return void 0===n&&(n=0),void 0===r&&(r=Wn.I),new t(e,n,r)},t.dispatch=function(e){var t=e.source,n=e.subscriber;return this.add(t.subscribe(n))},t.prototype._subscribe=function(e){var n=this.delayTime,r=this.source;return this.scheduler.schedule(t.dispatch,n,{source:r,subscriber:e})},t}(ce.c);function Qn(e,t){return void 0===t&&(t=0),function(n){return n.lift(new Zn(e,t))}}var Zn=function(){function e(e,t){this.scheduler=e,this.delay=t}return e.prototype.call=function(e,t){return new Kn(t,this.delay,this.scheduler).subscribe(e)},e}(),Jn=n(9835);function Xn(){return(0,Jn.n)(tt.D)}function er(e,t){return t?(0,Jn.n)(function(){return e},t):(0,Jn.n)(function(){return e})}function tr(e){return function(t){return t.lift(new nr(e))}}var nr=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){var n=new rr(e),r=(0,i.tS)(this.notifier,new i.zA(n));return r&&!n.seenValue?(n.add(r),t.subscribe(n)):n},e}(),rr=function(e){function t(t){var n=e.call(this,t)||this;return n.seenValue=!1,n}return r.C6(t,e),t.prototype.notifyNext=function(){this.seenValue=!0,this.complete()},t.prototype.notifyComplete=function(){},t}(i.gn);function ir(e,t){return void 0===t&&(t=!1),function(n){return n.lift(new or(e,t))}}var or=function(){function e(e,t){this.predicate=e,this.inclusive=t}return e.prototype.call=function(e,t){return t.subscribe(new sr(e,this.predicate,this.inclusive))},e}(),sr=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.predicate=n,i.inclusive=r,i.index=0,i}return r.C6(t,e),t.prototype._next=function(e){var t,n=this.destination;try{t=this.predicate(e,this.index++)}catch(e){return void n.error(e)}this.nextOrComplete(e,t)},t.prototype.nextOrComplete=function(e,t){var n=this.destination;Boolean(t)?n.next(e):(this.inclusive&&n.next(e),n.complete())},t}(f.v),ar=n(906),cr=n(3278);function ur(e,t,n){return function(r){return r.lift(new dr(e,t,n))}}var dr=function(){function e(e,t,n){this.nextOrObserver=e,this.error=t,this.complete=n}return e.prototype.call=function(e,t){return t.subscribe(new lr(e,this.nextOrObserver,this.error,this.complete))},e}(),lr=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o._tapNext=ar.l,o._tapError=ar.l,o._tapComplete=ar.l,o._tapError=r||ar.l,o._tapComplete=i||ar.l,(0,cr.T)(n)?(o._context=o,o._tapNext=n):n&&(o._context=n,o._tapNext=n.next||ar.l,o._tapError=n.error||ar.l,o._tapComplete=n.complete||ar.l),o}return r.C6(t,e),t.prototype._next=function(e){try{this._tapNext.call(this._context,e)}catch(e){return void this.destination.error(e)}this.destination.next(e)},t.prototype._error=function(e){try{this._tapError.call(this._context,e)}catch(e){return void this.destination.error(e)}this.destination.error(e)},t.prototype._complete=function(){try{this._tapComplete.call(this._context)}catch(e){return void this.destination.error(e)}return this.destination.complete()},t}(f.v),hr={leading:!0,trailing:!1};function pr(e,t){return void 0===t&&(t=hr),function(n){return n.lift(new fr(e,!!t.leading,!!t.trailing))}}var fr=function(){function e(e,t,n){this.durationSelector=e,this.leading=t,this.trailing=n}return e.prototype.call=function(e,t){return t.subscribe(new mr(e,this.durationSelector,this.leading,this.trailing))},e}(),mr=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o.destination=t,o.durationSelector=n,o._leading=r,o._trailing=i,o._hasValue=!1,o}return r.C6(t,e),t.prototype._next=function(e){this._hasValue=!0,this._sendValue=e,this._throttled||(this._leading?this.send():this.throttle(e))},t.prototype.send=function(){var e=this._hasValue,t=this._sendValue;e&&(this.destination.next(t),this.throttle(t)),this._hasValue=!1,this._sendValue=void 0},t.prototype.throttle=function(e){var t=this.tryDurationSelector(e);t&&this.add(this._throttled=(0,i.tS)(t,new i.zA(this)))},t.prototype.tryDurationSelector=function(e){try{return this.durationSelector(e)}catch(e){return this.destination.error(e),null}},t.prototype.throttlingDone=function(){var e=this._throttled,t=this._trailing;e&&e.unsubscribe(),this._throttled=void 0,t&&this.send()},t.prototype.notifyNext=function(){this.throttlingDone()},t.prototype.notifyComplete=function(){this.throttlingDone()},t}(i.gn);function yr(e,t,n){return void 0===t&&(t=c.b),void 0===n&&(n=hr),function(r){return r.lift(new gr(e,t,n.leading,n.trailing))}}var gr=function(){function e(e,t,n,r){this.duration=e,this.scheduler=t,this.leading=n,this.trailing=r}return e.prototype.call=function(e,t){return t.subscribe(new _r(e,this.duration,this.scheduler,this.leading,this.trailing))},e}(),_r=function(e){function t(t,n,r,i,o){var s=e.call(this,t)||this;return s.duration=n,s.scheduler=r,s.leading=i,s.trailing=o,s._hasTrailingValue=!1,s._trailingValue=null,s}return r.C6(t,e),t.prototype._next=function(e){this.throttled?this.trailing&&(this._trailingValue=e,this._hasTrailingValue=!0):(this.add(this.throttled=this.scheduler.schedule(vr,this.duration,{subscriber:this})),this.leading?this.destination.next(e):this.trailing&&(this._trailingValue=e,this._hasTrailingValue=!0))},t.prototype._complete=function(){this._hasTrailingValue?(this.destination.next(this._trailingValue),this.destination.complete()):this.destination.complete()},t.prototype.clearThrottle=function(){var e=this.throttled;e&&(this.trailing&&this._hasTrailingValue&&(this.destination.next(this._trailingValue),this._trailingValue=null,this._hasTrailingValue=!1),e.unsubscribe(),this.remove(e),this.throttled=null)},t}(f.v);function vr(e){e.subscriber.clearThrottle()}var br=n(277);function Sr(e){return void 0===e&&(e=c.b),function(t){return(0,br.v)(function(){return t.pipe(Et(function(t,n){var r=t.current;return{value:n,current:e.now(),last:r}},{current:e.now(),value:void 0,last:void 0}),(0,ze.T)(function(e){var t=e.current,n=e.last,r=e.value;return new Er(r,t-n)}))})}}var Er=function(){return function(e,t){this.value=e,this.interval=t}}(),Cr=n(5),wr=n(1454);function Ir(e,t,n){return void 0===n&&(n=c.b),function(r){var i=(0,wr.$)(e),o=i?+e-n.now():Math.abs(e);return r.lift(new Or(o,i,t,n))}}var Or=function(){function e(e,t,n,r){this.waitFor=e,this.absoluteTimeout=t,this.withObservable=n,this.scheduler=r}return e.prototype.call=function(e,t){return t.subscribe(new Pr(e,this.absoluteTimeout,this.waitFor,this.withObservable,this.scheduler))},e}(),Pr=function(e){function t(t,n,r,i,o){var s=e.call(this,t)||this;return s.absoluteTimeout=n,s.waitFor=r,s.withObservable=i,s.scheduler=o,s.scheduleTimeout(),s}return r.C6(t,e),t.dispatchTimeout=function(e){var t=e.withObservable;e._unsubscribeAndRecycle(),e.add((0,i.tS)(t,new i.zA(e)))},t.prototype.scheduleTimeout=function(){var e=this.action;e?this.action=e.schedule(this,this.waitFor):this.add(this.action=this.scheduler.schedule(t.dispatchTimeout,this.waitFor,this))},t.prototype._next=function(t){this.absoluteTimeout||this.scheduleTimeout(),e.prototype._next.call(this,t)},t.prototype._unsubscribe=function(){this.action=void 0,this.scheduler=null,this.withObservable=null},t}(i.gn),Ar=n(4203);function Tr(e,t){return void 0===t&&(t=c.b),Ir(e,(0,Ar.$)(new Cr.M),t)}function kr(e){return void 0===e&&(e=c.b),(0,ze.T)(function(t){return new xr(t,e.now())})}var xr=function(){return function(e,t){this.value=e,this.timestamp=t}}();function Rr(e,t,n){return 0===n?[t]:(e.push(t),e)}function Mr(){return Ot(Rr,[])}function Nr(e){return function(t){return t.lift(new Lr(e))}}var Lr=function(){function e(e){this.windowBoundaries=e}return e.prototype.call=function(e,t){var n=new Dr(e),r=t.subscribe(n);return r.closed||n.add((0,i.tS)(this.windowBoundaries,new i.zA(n))),r},e}(),Dr=function(e){function t(t){var n=e.call(this,t)||this;return n.window=new Kt.B7,t.next(n.window),n}return r.C6(t,e),t.prototype.notifyNext=function(){this.openWindow()},t.prototype.notifyError=function(e){this._error(e)},t.prototype.notifyComplete=function(){this._complete()},t.prototype._next=function(e){this.window.next(e)},t.prototype._error=function(e){this.window.error(e),this.destination.error(e)},t.prototype._complete=function(){this.window.complete(),this.destination.complete()},t.prototype._unsubscribe=function(){this.window=null},t.prototype.openWindow=function(){var e=this.window;e&&e.complete();var t=this.destination,n=this.window=new Kt.B7;t.next(n)},t}(i.gn);function jr(e,t){return void 0===t&&(t=0),function(n){return n.lift(new Fr(e,t))}}var Fr=function(){function e(e,t){this.windowSize=e,this.startWindowEvery=t}return e.prototype.call=function(e,t){return t.subscribe(new Ur(e,this.windowSize,this.startWindowEvery))},e}(),Ur=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.destination=t,i.windowSize=n,i.startWindowEvery=r,i.windows=[new Kt.B7],i.count=0,t.next(i.windows[0]),i}return r.C6(t,e),t.prototype._next=function(e){for(var t=this.startWindowEvery>0?this.startWindowEvery:this.windowSize,n=this.destination,r=this.windowSize,i=this.windows,o=i.length,s=0;s<o&&!this.closed;s++)i[s].next(e);var a=this.count-r+1;if(a>=0&&a%t===0&&!this.closed&&i.shift().complete(),++this.count%t===0&&!this.closed){var c=new Kt.B7;i.push(c),n.next(c)}},t.prototype._error=function(e){var t=this.windows;if(t)for(;t.length>0&&!this.closed;)t.shift().error(e);this.destination.error(e)},t.prototype._complete=function(){var e=this.windows;if(e)for(;e.length>0&&!this.closed;)e.shift().complete();this.destination.complete()},t.prototype._unsubscribe=function(){this.count=0,this.windows=null},t}(f.v);function Br(e){var t=c.b,n=null,r=Number.POSITIVE_INFINITY;return(0,v.m)(arguments[3])&&(t=arguments[3]),(0,v.m)(arguments[2])?t=arguments[2]:(0,$n.k)(arguments[2])&&(r=Number(arguments[2])),(0,v.m)(arguments[1])?t=arguments[1]:(0,$n.k)(arguments[1])&&(n=Number(arguments[1])),function(i){return i.lift(new zr(e,n,r,t))}}var zr=function(){function e(e,t,n,r){this.windowTimeSpan=e,this.windowCreationInterval=t,this.maxWindowSize=n,this.scheduler=r}return e.prototype.call=function(e,t){return t.subscribe(new Hr(e,this.windowTimeSpan,this.windowCreationInterval,this.maxWindowSize,this.scheduler))},e}(),qr=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._numberOfNextedValues=0,t}return r.C6(t,e),t.prototype.next=function(t){this._numberOfNextedValues++,e.prototype.next.call(this,t)},Object.defineProperty(t.prototype,\"numberOfNextedValues\",{get:function(){return this._numberOfNextedValues},enumerable:!0,configurable:!0}),t}(Kt.B7),Hr=function(e){function t(t,n,r,i,o){var s=e.call(this,t)||this;s.destination=t,s.windowTimeSpan=n,s.windowCreationInterval=r,s.maxWindowSize=i,s.scheduler=o,s.windows=[];var a=s.openWindow();if(null!==r&&r>=0){var c={subscriber:s,window:a,context:null},u={windowTimeSpan:n,windowCreationInterval:r,subscriber:s,scheduler:o};s.add(o.schedule(Yr,n,c)),s.add(o.schedule(Gr,r,u))}else{var d={subscriber:s,window:a,windowTimeSpan:n};s.add(o.schedule(Vr,n,d))}return s}return r.C6(t,e),t.prototype._next=function(e){for(var t=this.windows,n=t.length,r=0;r<n;r++){var i=t[r];i.closed||(i.next(e),i.numberOfNextedValues>=this.maxWindowSize&&this.closeWindow(i))}},t.prototype._error=function(e){for(var t=this.windows;t.length>0;)t.shift().error(e);this.destination.error(e)},t.prototype._complete=function(){for(var e=this.windows;e.length>0;){var t=e.shift();t.closed||t.complete()}this.destination.complete()},t.prototype.openWindow=function(){var e=new qr;return this.windows.push(e),this.destination.next(e),e},t.prototype.closeWindow=function(e){e.complete();var t=this.windows;t.splice(t.indexOf(e),1)},t}(f.v);function Vr(e){var t=e.subscriber,n=e.windowTimeSpan,r=e.window;r&&t.closeWindow(r),e.window=t.openWindow(),this.schedule(e,n)}function Gr(e){var t=e.windowTimeSpan,n=e.subscriber,r=e.scheduler,i=e.windowCreationInterval,o=n.openWindow(),s=this,a={action:s,subscription:null},c={subscriber:n,window:o,context:a};a.subscription=r.schedule(Yr,t,c),s.add(a.subscription),s.schedule(e,i)}function Yr(e){var t=e.subscriber,n=e.window,r=e.context;r&&r.action&&r.subscription&&r.action.remove(r.subscription),t.closeWindow(n)}function Wr(e,t){return function(n){return n.lift(new $r(e,t))}}var $r=function(){function e(e,t){this.openings=e,this.closingSelector=t}return e.prototype.call=function(e,t){return t.subscribe(new Kr(e,this.openings,this.closingSelector))},e}(),Kr=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.openings=n,i.closingSelector=r,i.contexts=[],i.add(i.openSubscription=(0,A.F)(i,n,n)),i}return r.C6(t,e),t.prototype._next=function(e){var t=this.contexts;if(t)for(var n=t.length,r=0;r<n;r++)t[r].window.next(e)},t.prototype._error=function(t){var n=this.contexts;if(this.contexts=null,n)for(var r=n.length,i=-1;++i<r;){var o=n[i];o.window.error(t),o.subscription.unsubscribe()}e.prototype._error.call(this,t)},t.prototype._complete=function(){var t=this.contexts;if(this.contexts=null,t)for(var n=t.length,r=-1;++r<n;){var i=t[r];i.window.complete(),i.subscription.unsubscribe()}e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){var e=this.contexts;if(this.contexts=null,e)for(var t=e.length,n=-1;++n<t;){var r=e[n];r.window.unsubscribe(),r.subscription.unsubscribe()}},t.prototype.notifyNext=function(e,t,n,r,i){if(e===this.openings){var o=void 0;try{o=(0,this.closingSelector)(t)}catch(e){return this.error(e)}var s=new Kt.B7,a=new P.y,c={window:s,subscription:a};this.contexts.push(c);var u=(0,A.F)(this,o,c);u.closed?this.closeWindow(this.contexts.length-1):(u.context=c,a.add(u)),this.destination.next(s)}else this.closeWindow(this.contexts.indexOf(e))},t.prototype.notifyError=function(e){this.error(e)},t.prototype.notifyComplete=function(e){e!==this.openSubscription&&this.closeWindow(this.contexts.indexOf(e.context))},t.prototype.closeWindow=function(e){if(-1!==e){var t=this.contexts,n=t[e],r=n.window,i=n.subscription;t.splice(e,1),r.complete(),i.unsubscribe()}},t}(T.E);function Qr(e){return function(t){return t.lift(new Zr(e))}}var Zr=function(){function e(e){this.closingSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new Jr(e,this.closingSelector))},e}(),Jr=function(e){function t(t,n){var r=e.call(this,t)||this;return r.destination=t,r.closingSelector=n,r.openWindow(),r}return r.C6(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.openWindow(i)},t.prototype.notifyError=function(e){this._error(e)},t.prototype.notifyComplete=function(e){this.openWindow(e)},t.prototype._next=function(e){this.window.next(e)},t.prototype._error=function(e){this.window.error(e),this.destination.error(e),this.unsubscribeClosingNotification()},t.prototype._complete=function(){this.window.complete(),this.destination.complete(),this.unsubscribeClosingNotification()},t.prototype.unsubscribeClosingNotification=function(){this.closingNotification&&this.closingNotification.unsubscribe()},t.prototype.openWindow=function(e){void 0===e&&(e=null),e&&(this.remove(e),e.unsubscribe());var t=this.window;t&&t.complete();var n,r=this.window=new Kt.B7;this.destination.next(r);try{n=(0,this.closingSelector)()}catch(e){return this.destination.error(e),void this.window.error(e)}this.add(this.closingNotification=(0,A.F)(this,n))},t}(T.E);function Xr(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){var n;\"function\"==typeof e[e.length-1]&&(n=e.pop());var r=e;return t.lift(new ei(r,n))}}var ei=function(){function e(e,t){this.observables=e,this.project=t}return e.prototype.call=function(e,t){return t.subscribe(new ti(e,this.observables,this.project))},e}(),ti=function(e){function t(t,n,r){var i=e.call(this,t)||this;i.observables=n,i.project=r,i.toRespond=[];var o=n.length;i.values=new Array(o);for(var s=0;s<o;s++)i.toRespond.push(s);for(s=0;s<o;s++){var a=n[s];i.add((0,A.F)(i,a,void 0,s))}return i}return r.C6(t,e),t.prototype.notifyNext=function(e,t,n){this.values[n]=t;var r=this.toRespond;if(r.length>0){var i=r.indexOf(n);-1!==i&&r.splice(i,1)}},t.prototype.notifyComplete=function(){},t.prototype._next=function(e){if(0===this.toRespond.length){var t=[e].concat(this.values);this.project?this._tryProject(t):this.destination.next(t)}},t.prototype._tryProject=function(e){var t;try{t=this.project.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(T.E),ni=n(5778);function ri(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return t.lift.call(ni.yU.apply(void 0,[t].concat(e)))}}function ii(e){return function(t){return t.lift(new ni.ee(e))}}},5779(e,t,n){\"use strict\";n.d(t,{C6:()=>i});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},r(e,t)};function i(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}},540(e){e.exports=function(e,t,n,r){var i=n?n.call(r,e,t):void 0;if(void 0!==i)return!!i;if(e===t)return!0;if(\"object\"!=typeof e||!e||\"object\"!=typeof t||!t)return!1;var o=Object.keys(e),s=Object.keys(t);if(o.length!==s.length)return!1;for(var a=Object.prototype.hasOwnProperty.bind(t),c=0;c<o.length;c++){var u=o[c];if(!a(u))return!1;var d=e[u],l=t[u];if(!1===(i=n?n.call(r,d,l,u):void 0)||void 0===i&&d!==l)return!1}return!0}},1657(e){\"use strict\";e.exports=(e,t)=>{if(\"string\"!=typeof e||\"string\"!=typeof t)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===t)return[e];const n=e.indexOf(t);return-1===n?[e]:[e.slice(0,n),e.slice(n+t.length)]}},803(e){\"use strict\";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)},1635(e,t,n){\"use strict\";n.r(t),n.d(t,{__addDisposableResource:()=>L,__assign:()=>o,__asyncDelegator:()=>I,__asyncGenerator:()=>w,__asyncValues:()=>O,__await:()=>C,__awaiter:()=>f,__classPrivateFieldGet:()=>R,__classPrivateFieldIn:()=>N,__classPrivateFieldSet:()=>M,__createBinding:()=>y,__decorate:()=>a,__disposeResources:()=>j,__esDecorate:()=>u,__exportStar:()=>g,__extends:()=>i,__generator:()=>m,__importDefault:()=>x,__importStar:()=>k,__makeTemplateObject:()=>P,__metadata:()=>p,__param:()=>c,__propKey:()=>l,__read:()=>v,__rest:()=>s,__rewriteRelativeImportExtension:()=>F,__runInitializers:()=>d,__setFunctionName:()=>h,__spread:()=>b,__spreadArray:()=>E,__spreadArrays:()=>S,__values:()=>_,default:()=>U});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)};function i(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var o=function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},o.apply(this,arguments)};function s(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}function a(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}function c(e,t){return function(n,r){t(n,r,e)}}function u(e,t,n,r,i,o){function s(e){if(void 0!==e&&\"function\"!=typeof e)throw new TypeError(\"Function expected\");return e}for(var a,c=r.kind,u=\"getter\"===c?\"get\":\"setter\"===c?\"set\":\"value\",d=!t&&e?r.static?e:e.prototype:null,l=t||(d?Object.getOwnPropertyDescriptor(d,r.name):{}),h=!1,p=n.length-1;p>=0;p--){var f={};for(var m in r)f[m]=\"access\"===m?{}:r[m];for(var m in r.access)f.access[m]=r.access[m];f.addInitializer=function(e){if(h)throw new TypeError(\"Cannot add initializers after decoration has completed\");o.push(s(e||null))};var y=(0,n[p])(\"accessor\"===c?{get:l.get,set:l.set}:l[u],f);if(\"accessor\"===c){if(void 0===y)continue;if(null===y||\"object\"!=typeof y)throw new TypeError(\"Object expected\");(a=s(y.get))&&(l.get=a),(a=s(y.set))&&(l.set=a),(a=s(y.init))&&i.unshift(a)}else(a=s(y))&&(\"field\"===c?i.unshift(a):l[u]=a)}d&&Object.defineProperty(d,r.name,l),h=!0}function d(e,t,n){for(var r=arguments.length>2,i=0;i<t.length;i++)n=r?t[i].call(e,n):t[i].call(e);return r?n:void 0}function l(e){return\"symbol\"==typeof e?e:\"\".concat(e)}function h(e,t,n){return\"symbol\"==typeof t&&(t=t.description?\"[\".concat(t.description,\"]\"):\"\"),Object.defineProperty(e,\"name\",{configurable:!0,value:n?\"\".concat(n,\" \",t):t})}function p(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function f(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})}function m(e,t){var n,r,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},s=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return s.next=a(0),s.throw=a(1),s.return=a(2),\"function\"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(a){return function(c){return function(a){if(n)throw new TypeError(\"Generator is already executing.\");for(;s&&(s=0,a[0]&&(o=0)),o;)try{if(n=1,r&&(i=2&a[0]?r.return:a[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,a[1])).done)return i;switch(r=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,r=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!((i=(i=o.trys).length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=t.call(e,o)}catch(e){a=[6,e],r=0}finally{n=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,c])}}}var y=Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!(\"get\"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]};function g(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||y(t,e,n)}function _(e){var t=\"function\"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}function v(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s}function b(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(v(arguments[t]));return e}function S(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),i=0;for(t=0;t<n;t++)for(var o=arguments[t],s=0,a=o.length;s<a;s++,i++)r[i]=o[s];return r}function E(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}function C(e){return this instanceof C?(this.v=e,this):new C(e)}function w(e,t,n){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var r,i=n.apply(e,t||[]),o=[];return r=Object.create((\"function\"==typeof AsyncIterator?AsyncIterator:Object).prototype),s(\"next\"),s(\"throw\"),s(\"return\",function(e){return function(t){return Promise.resolve(t).then(e,u)}}),r[Symbol.asyncIterator]=function(){return this},r;function s(e,t){i[e]&&(r[e]=function(t){return new Promise(function(n,r){o.push([e,t,n,r])>1||a(e,t)})},t&&(r[e]=t(r[e])))}function a(e,t){try{(n=i[e](t)).value instanceof C?Promise.resolve(n.value.v).then(c,u):d(o[0][2],n)}catch(e){d(o[0][3],e)}var n}function c(e){a(\"next\",e)}function u(e){a(\"throw\",e)}function d(e,t){e(t),o.shift(),o.length&&a(o[0][0],o[0][1])}}function I(e){var t,n;return t={},r(\"next\"),r(\"throw\",function(e){throw e}),r(\"return\"),t[Symbol.iterator]=function(){return this},t;function r(r,i){t[r]=e[r]?function(t){return(n=!n)?{value:C(e[r](t)),done:!1}:i?i(t):t}:i}}function O(e){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=_(e),t={},r(\"next\"),r(\"throw\"),r(\"return\"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise(function(r,i){!function(e,t,n,r){Promise.resolve(r).then(function(t){e({value:t,done:n})},t)}(r,i,(t=e[n](t)).done,t.value)})}}}function P(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e}var A=Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t},T=function(e){return T=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},T(e)};function k(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=T(e),r=0;r<n.length;r++)\"default\"!==n[r]&&y(t,e,n[r]);return A(t,e),t}function x(e){return e&&e.__esModule?e:{default:e}}function R(e,t,n,r){if(\"a\"===n&&!r)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof t?e!==t||!r:!t.has(e))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===n?r:\"a\"===n?r.call(e):r?r.value:t.get(e)}function M(e,t,n,r,i){if(\"m\"===r)throw new TypeError(\"Private method is not writable\");if(\"a\"===r&&!i)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof t?e!==t||!i:!t.has(e))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===r?i.call(e,n):i?i.value=n:t.set(e,n),n}function N(e,t){if(null===t||\"object\"!=typeof t&&\"function\"!=typeof t)throw new TypeError(\"Cannot use 'in' operator on non-object\");return\"function\"==typeof e?t===e:e.has(t)}function L(e,t,n){if(null!=t){if(\"object\"!=typeof t&&\"function\"!=typeof t)throw new TypeError(\"Object expected.\");var r,i;if(n){if(!Symbol.asyncDispose)throw new TypeError(\"Symbol.asyncDispose is not defined.\");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError(\"Symbol.dispose is not defined.\");r=t[Symbol.dispose],n&&(i=r)}if(\"function\"!=typeof r)throw new TypeError(\"Object not disposable.\");i&&(r=function(){try{i.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}var D=\"function\"==typeof SuppressedError?SuppressedError:function(e,t,n){var r=new Error(n);return r.name=\"SuppressedError\",r.error=e,r.suppressed=t,r};function j(e){function t(t){e.error=e.hasError?new D(t,e.error,\"An error was suppressed during disposal.\"):t,e.hasError=!0}var n,r=0;return function i(){for(;n=e.stack.pop();)try{if(!n.async&&1===r)return r=0,e.stack.push(n),Promise.resolve().then(i);if(n.dispose){var o=n.dispose.call(n.value);if(n.async)return r|=2,Promise.resolve(o).then(i,function(e){return t(e),i()})}else r|=1}catch(e){t(e)}if(1===r)return e.hasError?Promise.reject(e.error):Promise.resolve();if(e.hasError)throw e.error}()}function F(e,t){return\"string\"==typeof e&&/^\\.\\.?\\//.test(e)?e.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i,function(e,n,r,i,o){return n?t?\".jsx\":\".js\":!r||i&&o?r+i+\".\"+o.toLowerCase()+\"js\":e}):e}const U={__extends:i,__assign:o,__rest:s,__decorate:a,__param:c,__esDecorate:u,__runInitializers:d,__propKey:l,__setFunctionName:h,__metadata:p,__awaiter:f,__generator:m,__createBinding:y,__exportStar:g,__values:_,__read:v,__spread:b,__spreadArrays:S,__spreadArray:E,__await:C,__asyncGenerator:w,__asyncDelegator:I,__asyncValues:O,__makeTemplateObject:P,__importStar:k,__importDefault:x,__classPrivateFieldGet:R,__classPrivateFieldSet:M,__classPrivateFieldIn:N,__addDisposableResource:L,__disposeResources:j,__rewriteRelativeImportExtension:F}}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{ExtensionCommandType:()=>_t,ExtensionQueryType:()=>vt,createBodlService:()=>lh,createBraintreeAnalyticTracker:()=>nh,createCheckoutButtonInitializer:()=>zu,createCheckoutService:()=>bu,createCurrencyService:()=>ql,createEmbeddedCheckoutMessenger:()=>ud,createLanguageService:()=>Fl,createPayPalCommerceAnalyticTracker:()=>ih,createStepTracker:()=>Xl,createStoredCardHostedFormService:()=>ah,createTimeout:()=>e.createTimeout,embedCheckout:()=>nd,isExtraField:()=>i});var e=n(1077);const t=\"b2bExtraField_\";function i(e){return e.name.startsWith(t)}function o(e){var n;const{fieldType:r,type:i}=function(e){switch(e){case\"multiline_text\":return{fieldType:\"multiline\",type:\"string\"};case\"number\":return{fieldType:\"text\",type:\"integer\"};case\"dropdown\":return{fieldType:\"dropdown\",type:\"array\"};default:return{fieldType:\"text\",type:\"string\"}}}(e.type);let o;return e.config.numberOfRows&&(o={rows:e.config.numberOfRows}),(null===(n=e.config.options)||void 0===n?void 0:n.length)&&(o=Object.assign(Object.assign({},o),{items:e.config.options.map(e=>({value:e,label:e}))})),{id:`${t}${e.id}`,name:`${t}${e.id}`,custom:!1,label:e.name,hidden:!e.visibleToStorefront,required:e.isRequired,default:null!=e.config.defaultValue?String(e.config.defaultValue):void 0,fieldType:r,type:i,maxLength:e.config.maxLength,max:e.config.maxValue,options:o}}var s=n(315),a=n(9526),c=n(9301),u=n(4128),d=n(277),l=n(9586);function h(){if(\"undefined\"==typeof window||!window.location)return!1;try{return!!new URLSearchParams(window.location.search).has(\"enableB2bDevMode\")&&(console.log(\"B2B Dev Mode Enabled\"),!0)}catch(e){return!1}}function p(e){return h()?\"https://api-b2b.bigcommerce.com\":e}var f,m=n(4203);function y(e,t,n){return(r=t)&&r.type&&r.error?(0,c.x)((0,u.of)(t),(0,m.$)((0,a.fQ)(e,t.payload,n))):(0,m.$)((0,a.fQ)(e,t,n));var r}!function(e){e.LoadB2BTokenRequested=\"LOAD_B2B_TOKEN_REQUESTED\",e.LoadB2BTokenSucceeded=\"LOAD_B2B_TOKEN_SUCCEEDED\",e.LoadB2BTokenFailed=\"LOAD_B2B_TOKEN_FAILED\"}(f||(f={}));class g{constructor(e){this._requestSender=e}loadB2BToken(e){return t=>{var n;const r=t.getState(),i=r.config.getStoreConfigOrThrow(),{storeHash:o}=i.storeProfile,{baseUrl:s=\"\",clientId:m=\"\"}=null!==(n=i.b2bApiSettings)&&void 0!==n?n:{},g=(_=m,h()?\"dl7c39mdpul6hyc489yk0vzxl6jesyx\":_);var _;const v=p(s),{id:b}=r.customer.getCustomerOrThrow(),{channelId:S}=r.checkout.getCheckoutOrThrow();return(0,c.x)((0,u.of)((0,a.VP)(f.LoadB2BTokenRequested)),(0,d.v)(()=>{return t=this,n=void 0,i=function*(){const{body:t}=yield this._requestSender.getB2BToken(g,b,o,S,v,e);return(0,a.VP)(f.LoadB2BTokenSucceeded,{token:t.data.token})},new((r=void 0)||(r=Promise))(function(e,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}c((i=i.apply(t,n||[])).next())});var t,n,r,i})).pipe((0,l.W)(e=>y(f.LoadB2BTokenFailed,e)))}}}const _={\"X-Checkout-SDK-Version\":\"1.916.1\"};class v{constructor(e){this._requestSender=e}getB2BToken(e,t,n,r,i,o){return s=this,a=void 0,u=function*(){const{body:s}=yield this._requestSender.get(\"/customer/current.jwt\",{timeout:null==o?void 0:o.timeout,params:{app_client_id:e},headers:_});return this._requestSender.post(`${i}/api/v2/login`,{timeout:null==o?void 0:o.timeout,credentials:!1,headers:{\"Content-Type\":\"application/json\"},body:{bcToken:s.token,customerId:t,storeHash:n,channelId:r}})},new((c=void 0)||(c=Promise))(function(e,t){function n(e){try{i(u.next(e))}catch(e){t(e)}}function r(e){try{i(u.throw(e))}catch(e){t(e)}}function i(t){var i;t.done?e(t.value):(i=t.value,i instanceof c?i:new c(function(e){e(i)})).then(n,r)}i((u=u.apply(s,a||[])).next())});var s,a,c,u}}var b,S,E=n(9440),C=n(3837),w=n(5028),I=n(6780);class O extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentProviderCustomer=13]=\"MissingPaymentProviderCustomer\",e[e.MissingPaymentRedirectUrl=14]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=15]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=16]=\"MissingPaymentToken\",e[e.MissingShippingAddress=17]=\"MissingShippingAddress\"}(b||(b={}));class P extends O{constructor(e){super(function(e){switch(e){case b.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case b.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case b.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case b.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case b.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case b.MissingCheckoutConfig:case b.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case b.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case b.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case b.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case b.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case b.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case b.MissingPaymentProviderCustomer:return\"Unable to proceed because payment provider customer is unavailable.\";case b.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(e){e.UpdateBillingAddressRequested=\"UPDATE_BILLING_ADDRESS_REQUESTED\",e.UpdateBillingAddressSucceeded=\"UPDATE_BILLING_ADDRESS_SUCCEEDED\",e.UpdateBillingAddressFailed=\"UPDATE_BILLING_ADDRESS_FAILED\",e.ContinueAsGuestRequested=\"CONTINUE_AS_GUEST_REQUESTED\",e.ContinueAsGuestSucceeded=\"CONTINUE_AS_GUEST_SUCCEEDED\",e.ContinueAsGuestFailed=\"CONTINUE_AS_GUEST_FAILED\"}(S||(S={}));class A extends O{constructor(e){super(e||\"Unable to continue as a guest because the customer is already signed in.\"),this.name=\"UnableToContinueAsGuestError\",this.type=\"unable_to_continue_as_guest\"}}var T;class k{constructor(e,t){this._requestSender=e,this._subscriptionActionCreator=t}continueAsGuest(e,t){return n=>{const r=n.getState(),i=r.checkout.getCheckout();if(!i)throw new P(b.MissingCheckout);const o=r.customer.getCustomer();if(o&&!o.isGuest)throw new A;const s=r.billingAddress.getBillingAddress();let h;if(s){const{country:t}=s,n=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(s,[\"country\"]);h=Object.assign(Object.assign({},n),e)}else h=e;const p=!(0,E.isEmpty)(s);return(0,C.h)((0,c.x)((0,u.of)((0,a.VP)(S.ContinueAsGuestRequested)),(0,d.v)(()=>{return e=this,n=void 0,o=function*(){const{body:e}=yield this._createOrUpdateBillingAddress(i.id,h,p,t);return(0,a.VP)(S.ContinueAsGuestSucceeded,e)},new((r=void 0)||(r=Promise))(function(t,i){function s(e){try{c(o.next(e))}catch(e){i(e)}}function a(e){try{c(o.throw(e))}catch(e){i(e)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}c((o=o.apply(e,n||[])).next())});var e,n,r,o})).pipe((0,l.W)(e=>y(S.ContinueAsGuestFailed,e))),this._updateCustomerConsent(e,t))}}updateAddress(e,t){return n=>w.c.create(r=>{const i=n.getState(),o=i.checkout.getCheckout();if(!o)throw new P(b.MissingCheckout);r.next((0,a.VP)(S.UpdateBillingAddressRequested));const s=i.billingAddress.getBillingAddress(),c=!(0,E.isEmpty)(s),u=Object.assign(Object.assign({},e),{email:void 0===e.email&&s?s.email:e.email});s&&s.id&&(u.id=s.id),this._createOrUpdateBillingAddress(o.id,u,c,t).then(({body:e})=>{r.next((0,a.VP)(S.UpdateBillingAddressSucceeded,e)),r.complete()}).catch(e=>{r.error((0,a.fQ)(S.UpdateBillingAddressFailed,e))})})}_updateCustomerConsent({email:e,acceptsAbandonedCartEmails:t,acceptsMarketingNewsletter:n},r){return null==t&&null==n?(0,I.I)():this._subscriptionActionCreator.updateSubscriptions({email:e,acceptsMarketingNewsletter:n||!1,acceptsAbandonedCartEmails:t||!1},r)}_createOrUpdateBillingAddress(e,t,n,r){return n?this._requestSender.updateAddress(e,t,r):this._requestSender.createAddress(e,t,r)}}class x extends O{constructor(e){super(e||\"Your checkout could not be processed because your cart is empty. Please add items to your cart and try again.\"),this.name=\"EmptyCartError\",this.type=\"empty_cart\"}}!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(T||(T={}));const R=T;const M={include:[\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"promotions.banners\"].join(\",\")};class N{constructor(e){this._requestSender=e}createAddress(e,t,{timeout:n}={}){const r=`/api/storefront/checkouts/${e}/billing-address`,i=Object.assign({Accept:R.JsonV1},_);return this._requestSender.post(r,{body:t,params:M,headers:i,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new x;throw e})}updateAddress(e,t,{timeout:n}={}){const{id:r}=t,i=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(t,[\"id\"]),o=`/api/storefront/checkouts/${e}/billing-address/${r}`,s=Object.assign({Accept:R.JsonV1},_);return this._requestSender.put(o,{params:M,body:i,headers:s,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new x;throw e})}}var L,D;function j(e,t){const n=(0,a.iN)((e,t)=>t.type===L.Synchronize?t.payload:e,e.getState(),{stateTransformer:t});return e.subscribe(e=>{n.dispatch((0,a.VP)(L.Synchronize,e))},{initial:!1}),n}!function(e){e.Synchronize=\"SYNCHRONIZE\"}(L||(L={})),function(e){e.ClearError=\"CLEAR_ERROR\"}(D||(D={}));class F{clearError(e){return{type:D.ClearError,payload:e}}}class U{constructor(e,t){this._requestSender=e,this._config=t}sendRequest(e,t){return this._requestSender.sendRequest(e,t)}get(e,t){return this._requestSender.get(e,t)}post(e,t){return this._requestSender.post(this._prefixed(e),t)}put(e,t){return this._requestSender.put(this._prefixed(e),t)}patch(e,t){return this._requestSender.patch(this._prefixed(e),t)}delete(e,t){return this._requestSender.delete(this._prefixed(e),t)}_prefixed(e){const t=this._config.getBasePath();return!this._config.getFeatures()[\"CHECKOUT-9950.update_sf_checkout_url_for_subfolder\"]||!t||t.endsWith(\"/checkout\")||/^https?:\\/\\//.test(e)?e:`${t}${e}`}}function B(){try{return\"production\"}catch(e){return\"development\"}}class z{constructor(e){this._console=e}log(...e){this._logToConsole(\"log\",...e)}info(...e){this._logToConsole(\"info\",...e)}warn(...e){this._logToConsole(\"warn\",...e)}error(...e){this._logToConsole(\"error\",...e)}debug(...e){this._logToConsole(\"debug\",...e)}_logToConsole(e,...t){this._console&&this._console[e]&&this._console[e].call(this._console,...t)}}class q{log(){}info(){}warn(){}error(){}debug(){}}const H=function(e=!0){return e?new z(console):new q}(\"test\"!==B());function V(){return H}var G,Y=n(4218),W=n(8241),$=n(2161);function K(e,t,n){const r=new WeakMap;function i(e){return(...n)=>{const i=n[n.length-1],{useCache:o}=(s=i)&&\"boolean\"==typeof s.useCache?i:{useCache:!1};var s;if(!o)return e.call(this,...n);const a=r.get(this)||{};var c;return r.get(this)||r.set(this,a),a[t]||(a[t]=(c=e,(0,Y.Bj)(function(...e){const t=c.call(this,...e);return t instanceof w.c?(0,W.H)(t).pipe((0,$.t)()):\"function\"==typeof t?(0,Y.Bj)(e=>(0,W.H)(t(e)).pipe((0,$.t)()),{isEqual:E.isEqual}):t},{isEqual:E.isEqual}))),a[t].call(this,...n)}}return{get(){if(\"function\"!=typeof n.value)throw new Error(\"Decorator should be used in functions\");const e=i.call(this,n.value);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e}}}!function(e){e.LoadConfigRequested=\"LOAD_CONFIG_REQUESTED\",e.LoadConfigSucceeded=\"LOAD_CONFIG_SUCCEEDED\",e.LoadConfigFailed=\"LOAD_CONFIG_FAILED\"}(G||(G={}));class Q{constructor(e){this._configRequestSender=e}loadConfig(e){return w.c.create(t=>{t.next((0,a.VP)(G.LoadConfigRequested)),this._configRequestSender.loadConfig(e).then(e=>{t.next((0,a.VP)(G.LoadConfigSucceeded,e.body)),t.complete()}).catch(e=>{t.error((0,a.fQ)(G.LoadConfigFailed,e))})})}}!function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);o>3&&s&&Object.defineProperty(t,n,s)}([K],Q.prototype,\"loadConfig\",null);const Z={body:{},headers:{},status:0};class J extends O{constructor(e,{message:t,errors:n}={}){const{body:r,headers:i,status:o}=e||Z;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=i,this.status=o,this.errors=n||[]}}class X extends J{constructor(e){super(e,{message:e.body.title}),this.name=\"CheckoutNotAvailableError\",this.type=\"checkout_not_available\"}}const ee=\"This API endpoint is for internal use only and may change in the future\";class te{constructor(e){this._requestSender=e}loadConfig({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/checkout-settings\",{timeout:e,headers:Object.assign({Accept:R.JsonV1,\"X-API-INTERNAL\":ee},_),params:t}).catch(e=>{if(e.status>=400&&e.status<500)throw new X(e);throw e})}}var ne;!function(e){e.ApplyCouponRequested=\"APPLY_COUPON_REQUESTED\",e.ApplyCouponSucceeded=\"APPLY_COUPON_SUCCEEDED\",e.ApplyCouponFailed=\"APPLY_COUPON_FAILED\",e.RemoveCouponRequested=\"REMOVE_COUPON_REQUESTED\",e.RemoveCouponSucceeded=\"REMOVE_COUPON_SUCCEEDED\",e.RemoveCouponFailed=\"REMOVE_COUPON_FAILED\"}(ne||(ne={}));class re{constructor(e){this._couponRequestSender=e}applyCoupon(e,t){return n=>w.c.create(r=>{const i=n.getState().checkout.getCheckout();if(!i)throw new P(b.MissingCheckout);r.next((0,a.VP)(ne.ApplyCouponRequested)),this._couponRequestSender.applyCoupon(i.id,e,t).then(({body:e})=>{r.next((0,a.VP)(ne.ApplyCouponSucceeded,e)),r.complete()}).catch(e=>{r.error((0,a.fQ)(ne.ApplyCouponFailed,e))})})}removeCoupon(e,t){return n=>w.c.create(r=>{const i=n.getState().checkout.getCheckout();if(!i)throw new P(b.MissingCheckout);r.next((0,a.VP)(ne.RemoveCouponRequested)),this._couponRequestSender.removeCoupon(i.id,e,t).then(({body:e})=>{r.next((0,a.VP)(ne.RemoveCouponSucceeded,e)),r.complete()}).catch(e=>{r.error((0,a.fQ)(ne.RemoveCouponFailed,e))})})}}const ie=[\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"customer.customerGroup\",\"payments\",\"promotions.banners\"];var oe,se;function ae(e){return(0,E.uniq)(e).join(\",\")}!function(e){e.AvailableShippingOptions=\"consignments.availableShippingOptions\",e.PhysicalItemsCategoryNames=\"cart.lineItems.physicalItems.categoryNames\",e.DigitalItemsCategoryNames=\"cart.lineItems.digitalItems.categoryNames\"}(oe||(oe={}));class ce{constructor(e){this._requestSender=e}applyCoupon(e,t,{timeout:n}={}){const r=`/api/storefront/checkouts/${e}/coupons`,i=Object.assign({Accept:R.JsonV1},_);return this._requestSender.post(r,{headers:i,timeout:n,params:{include:ae([...ie,oe.AvailableShippingOptions])},body:{couponCode:t}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new x;throw e})}removeCoupon(e,t,{timeout:n}={}){const r=`/api/storefront/checkouts/${e}/coupons/${t}`,i=Object.assign({Accept:R.JsonV1},_);return this._requestSender.delete(r,{headers:i,timeout:n,params:{include:ae([...ie,oe.AvailableShippingOptions])}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new x;throw e})}}!function(e){e.ApplyGiftCertificateRequested=\"APPLY_GIFT_CERTIFICATE_REQUESTED\",e.ApplyGiftCertificateSucceeded=\"APPLY_GIFT_CERTIFICATE_SUCCEEDED\",e.ApplyGiftCertificateFailed=\"APPLY_GIFT_CERTIFICATE_FAILED\",e.RemoveGiftCertificateRequested=\"REMOVE_GIFT_CERTIFICATE_REQUESTED\",e.RemoveGiftCertificateSucceeded=\"REMOVE_GIFT_CERTIFICATE_SUCCEEDED\",e.RemoveGiftCertificateFailed=\"REMOVE_GIFT_CERTIFICATE_FAILED\"}(se||(se={}));class ue{constructor(e){this._giftCertificateRequestSender=e}applyGiftCertificate(e,t){return n=>w.c.create(r=>{const i=n.getState().checkout.getCheckout();if(!i)throw new P(b.MissingCheckout);r.next((0,a.VP)(se.ApplyGiftCertificateRequested)),this._giftCertificateRequestSender.applyGiftCertificate(i.id,e,t).then(({body:e})=>{r.next((0,a.VP)(se.ApplyGiftCertificateSucceeded,e)),r.complete()}).catch(e=>{r.error((0,a.fQ)(se.ApplyGiftCertificateFailed,e))})})}removeGiftCertificate(e,t){return n=>w.c.create(r=>{const i=n.getState().checkout.getCheckout();if(!i)throw new P(b.MissingCheckout);r.next((0,a.VP)(se.RemoveGiftCertificateRequested)),this._giftCertificateRequestSender.removeGiftCertificate(i.id,e,t).then(({body:e})=>{r.next((0,a.VP)(se.RemoveGiftCertificateSucceeded,e)),r.complete()}).catch(e=>{r.error((0,a.fQ)(se.RemoveGiftCertificateFailed,e))})})}}class de{constructor(e){this._requestSender=e}applyGiftCertificate(e,t,{timeout:n}={}){const r=`/api/storefront/checkouts/${e}/gift-certificates`,i=Object.assign({Accept:R.JsonV1},_);return this._requestSender.post(r,{headers:i,timeout:n,params:{include:ae(ie)},body:{giftCertificateCode:t}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new x;throw e})}removeGiftCertificate(e,t,{timeout:n}={}){const r=`/api/storefront/checkouts/${e}/gift-certificates/${t}`,i=Object.assign({Accept:R.JsonV1},_);return this._requestSender.delete(r,{headers:i,timeout:n,params:{include:ae(ie)}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new x;throw e})}}function le(e){return e&&\"resolveIds\"in e}class he extends O{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class pe{constructor(e){var t,n,r;this._factories={},this._instances={},this._defaultToken=null!==(t=null==e?void 0:e.defaultToken)&&void 0!==t?t:\"default\",this._useFallback=null===(n=null==e?void 0:e.useFallback)||void 0===n||n,this._tokenResolver=null!==(r=null==e?void 0:e.tokenResolver)&&void 0!==r?r:e=>e}get(e,t){try{return this._getInstance(e||this._defaultToken,t||e||this._defaultToken)}catch(e){if(!this._useFallback)throw e;return this._getInstance(this._defaultToken,t||this._defaultToken)}}getFactory(e,t){const n=this._tokenResolver(e,Object.keys(this._factories),t);return n?this._factories[n]:void 0}register(e,t){if(this._hasFactory(e))throw new he(`'${e}' is already registered.`);this._factories[e]=t}_hasFactory(e){return!!this._factories[e]}_hasInstance(e){return!!this._instances[e]}_getInstance(e,t){if(!this._hasInstance(t)){const n=this.getFactory(e);if(!n)throw new he(`'${e}' is not registered.`);this._instances[t]=n()}return this._instances[t]}}class fe{constructor(e=!1){this._useFallback=e,this._registry=new pe({tokenResolver:this._resolveToken.bind(this),defaultToken:this._encodeToken({default:!0}),useFallback:this._useFallback})}get(e){return this._registry.get(this._encodeToken(e))}getFactory(e,t){try{return this._registry.getFactory(this._encodeToken(e),t)}catch(e){return}}getUseFallback(){return this._useFallback}register(e,t){this._registry.register(this._encodeToken(e),t)}_encodeToken(e){return btoa(JSON.stringify(e))}_decodeToken(e){return JSON.parse(atob(e))}_resolveToken(e,t,n){var r;const i=this._decodeToken(e),o=[];t.forEach(e=>{const t=this._decodeToken(e),n={token:e,matches:0,default:!1,totalKeys:Object.keys(t).length};for(const[e,r]of Object.entries(t)){if(e in i&&i[e]!==r){n.matches=0;break}e in i&&i[e]===r&&n.matches++,\"default\"===e&&!0===r&&(n.default=!0)}o.push(n)});const s=o.sort((e,t)=>t.matches-e.matches).filter(e=>e.matches>0);s.length>1&&s[0].matches===s[1].matches&&\"development\"===B()&&V().warn(\"The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.\");const a=Object.keys(i).length;if(n){const e=s.find(e=>e.matches===a&&e.matches===e.totalKeys);if(!e)throw new Error(`Unable to resolve to a registered token with the provided token for ${JSON.stringify(i)} with exact match.`);return e.token}const c=s[0];if(c&&c.token)return c.token;if(this._useFallback){const e=null===(r=o.find(e=>e.default))||void 0===r?void 0:r.token;if(e)return e}throw new Error(`Unable to resolve to a registered token with the provided token for ${JSON.stringify(i)}.`)}}var me,ye,ge=n(9835);function _e(e){const t=e;return\"object\"==typeof t&&\"object\"==typeof t.payload&&\"string\"==typeof t.payload.token}!function(e){e.BuyNow=\"BUY_NOW\"}(me||(me={})),function(e){e.SignInCustomerRequested=\"SIGN_IN_CUSTOMER_REQUESTED\",e.SignInCustomerSucceeded=\"SIGN_IN_CUSTOMER_SUCCEEDED\",e.SignInCustomerFailed=\"SIGN_IN_CUSTOMER_FAILED\",e.SignOutCustomerRequested=\"SIGN_OUT_CUSTOMER_REQUESTED\",e.SignOutCustomerSucceeded=\"SIGN_OUT_CUSTOMER_SUCCEEDED\",e.SignOutCustomerFailed=\"SIGN_OUT_CUSTOMER_FAILED\",e.CreateCustomerRequested=\"CREATE_CUSTOMER_REQUESTED\",e.CreateCustomerSucceeded=\"CREATE_CUSTOMER_SUCCEEDED\",e.CreateCustomerFailed=\"CREATE_CUSTOMER_FAILED\",e.CreateCustomerAddressRequested=\"CREATE_CUSTOMER_ADDRESS_REQUESTED\",e.CreateCustomerAddressSucceeded=\"CREATE_CUSTOMER_ADDRESS_SUCCEEDED\",e.CreateCustomerAddressFailed=\"CREATE_CUSTOMER_ADDRESS_FAILED\",e.StripeLinkAuthenticated=\"STRIPE_LINK_AUTHENTICATED\"}(ye||(ye={}));var ve,be,Se;class Ee{constructor(e,t,n){this._customerRequestSender=e,this._checkoutActionCreator=t,this._spamProtectionActionCreator=n}createCustomer(e,t){return n=>{const r=n.getState().config.getStoreConfigOrThrow(),{isStorefrontSpamProtectionEnabled:i}=r.checkoutSettings,o=r=>(0,W.H)(this._customerRequestSender.createAccount(Object.assign(Object.assign({},e),{token:r}),t)).pipe((0,ge.n)(()=>(0,c.x)(this._checkoutActionCreator.loadCurrentCheckout(t)(n),(0,u.of)((0,a.VP)(ye.CreateCustomerSucceeded)))));return(0,c.x)((0,u.of)((0,a.VP)(ye.CreateCustomerRequested)),i?(0,W.H)(this._spamProtectionActionCreator.execute()(n)).pipe((0,ge.n)(e=>{var t;return _e(e)?(0,c.x)((0,u.of)(e),o(null===(t=e.payload)||void 0===t?void 0:t.token)):(0,u.of)(e)})):o()).pipe((0,l.W)(e=>y(ye.CreateCustomerFailed,e)))}}createAddress(e,t){return(0,c.x)((0,u.of)((0,a.VP)(ye.CreateCustomerAddressRequested)),(0,d.v)(()=>{return n=this,r=void 0,o=function*(){const{body:n}=yield this._customerRequestSender.createAddress(e,t);return(0,a.VP)(ye.CreateCustomerAddressSucceeded,n)},new((i=void 0)||(i=Promise))(function(e,t){function s(e){try{c(o.next(e))}catch(e){t(e)}}function a(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}c((o=o.apply(n,r||[])).next())});var n,r,i,o})).pipe((0,l.W)(e=>y(ye.CreateCustomerAddressFailed,e)))}signInCustomer(e,t){return n=>{const r=n.getState().checkout.getCheckoutOrThrow(),i=r.cart.source===me.BuyNow?r.id:void 0;return(0,c.x)((0,u.of)((0,a.VP)(ye.SignInCustomerRequested)),(0,W.H)(this._customerRequestSender.signInCustomer(Object.assign(Object.assign({},e),{cartId:i}),t)).pipe((0,ge.n)(({body:e})=>e.data.persistentCartRetrievalInformation?(0,c.x)(this._checkoutActionCreator.loadCheckout(e.data.persistentCartRetrievalInformation.id,t)(n),(0,u.of)((0,a.VP)(ye.SignInCustomerSucceeded,e.data))):(0,c.x)(this._checkoutActionCreator.loadCurrentCheckout(t)(n),(0,u.of)((0,a.VP)(ye.SignInCustomerSucceeded,e.data)))))).pipe((0,l.W)(e=>y(ye.SignInCustomerFailed,e)))}}signOutCustomer(e){return t=>{const n=t.getState().checkout.getCheckoutOrThrow(),r=n.cart.source===me.BuyNow?n.id:void 0;return(0,c.x)((0,u.of)((0,a.VP)(ye.SignOutCustomerRequested)),(0,W.H)(this._customerRequestSender.signOutCustomer(e,r)).pipe((0,ge.n)(({body:n})=>(0,c.x)(this._checkoutActionCreator.loadCurrentCheckout(e)(t),(0,u.of)((0,a.VP)(ye.SignOutCustomerSucceeded,n.data)))))).pipe((0,l.W)(e=>y(ye.SignOutCustomerFailed,e)))}}}class Ce{constructor(e){this._requestSender=e}createAccount(e,{timeout:t}={}){return this._requestSender.post(\"/api/storefront/customer\",{timeout:t,headers:_,body:e})}createAddress(e,{timeout:t}={}){return this._requestSender.post(\"/api/storefront/customer-address\",{timeout:t,headers:_,body:e})}signInCustomer(e,{timeout:t}={}){return this._requestSender.post(\"/internalapi/v1/checkout/customer\",{timeout:t,headers:_,body:e})}signOutCustomer({timeout:e}={},t){return this._requestSender.delete(\"/internalapi/v1/checkout/customer\",Object.assign({timeout:e,headers:_},t&&{body:{cartId:t}}))}}function we(e,t,n){t.forEach(t=>{le(t)&&t.resolveIds.forEach(r=>{e.getFactory(r,!0)||e.register(r,()=>t(n))})})}!function(e){e.SignInFailed=\"CUSTOMER_STRATEGY_SIGN_IN_FAILED\",e.SignInRequested=\"CUSTOMER_STRATEGY_SIGN_IN_REQUESTED\",e.SignInSucceeded=\"CUSTOMER_STRATEGY_SIGN_IN_SUCCEEDED\",e.SignOutFailed=\"CUSTOMER_STRATEGY_SIGN_OUT_FAILED\",e.SignOutRequested=\"CUSTOMER_STRATEGY_SIGN_OUT_REQUESTED\",e.SignOutSucceeded=\"CUSTOMER_STRATEGY_SIGN_OUT_SUCCEEDED\",e.ExecutePaymentMethodCheckoutFailed=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_FAILED\",e.ExecutePaymentMethodCheckoutRequested=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_REQUESTED\",e.ExecutePaymentMethodCheckoutSucceeded=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_SUCCEEDED\",e.InitializeFailed=\"CUSTOMER_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"CUSTOMER_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"CUSTOMER_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"CUSTOMER_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"CUSTOMER_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"CUSTOMER_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_FAILED\"}(ve||(ve={}));class Ie{constructor(e,t,n){this._strategyRegistry=e,this._strategyRegistryV2=t,this._paymentIntegrationService=n}signIn(e,t){return w.c.create(n=>{const r=t&&t.methodId,i={methodId:r};n.next((0,a.VP)(ve.SignInRequested,void 0,i)),this._getStrategy(r).signIn(e,t).then(()=>{n.next((0,a.VP)(ve.SignInSucceeded,void 0,i)),n.complete()}).catch(e=>{n.error((0,a.fQ)(ve.SignInFailed,e,i))})})}signOut(e){return w.c.create(t=>{const n=e&&e.methodId,r={methodId:n};t.next((0,a.VP)(ve.SignOutRequested,void 0,r)),this._getStrategy(n).signOut(e).then(()=>{t.next((0,a.VP)(ve.SignOutSucceeded,void 0,r)),t.complete()}).catch(e=>{t.error((0,a.fQ)(ve.SignOutFailed,e,r))})})}executePaymentMethodCheckout(e){return w.c.create(t=>{const n=e&&e.methodId,r={methodId:n};t.next((0,a.VP)(ve.ExecutePaymentMethodCheckoutRequested,void 0,r)),this._getStrategy(n).executePaymentMethodCheckout(e).then(()=>{t.next((0,a.VP)(ve.ExecutePaymentMethodCheckoutSucceeded,void 0,r)),t.complete()}).catch(e=>{t.error((0,a.fQ)(ve.ExecutePaymentMethodCheckoutFailed,e,r))})})}initialize(e){return t=>w.c.create(n=>{var r;const i=t.getState(),o=e&&e.methodId,s={methodId:o};if(we(this._strategyRegistryV2,null!==(r=null==e?void 0:e.integrations)&&void 0!==r?r:[],this._paymentIntegrationService),o&&i.customerStrategies.isInitialized(o))return n.complete();n.next((0,a.VP)(ve.InitializeRequested,void 0,s)),this._getStrategy(o).initialize(e).then(()=>{n.next((0,a.VP)(ve.InitializeSucceeded,void 0,s)),n.complete()}).catch(e=>{n.error((0,a.fQ)(ve.InitializeFailed,e,s))})})}deinitialize(e){return t=>w.c.create(n=>{const r=t.getState(),i=e&&e.methodId,o={methodId:i};if(i&&!r.customerStrategies.isInitialized(i))return n.complete();n.next((0,a.VP)(ve.DeinitializeRequested,void 0,o)),this._getStrategy(i).deinitialize(e).then(()=>{n.next((0,a.VP)(ve.DeinitializeSucceeded,void 0,o)),n.complete()}).catch(e=>{n.error((0,a.fQ)(ve.DeinitializeFailed,e,o))})})}widgetInteraction(e,t){return w.c.create(n=>{const r={methodId:t&&t.methodId};n.next((0,a.VP)(ve.WidgetInteractionStarted,void 0,r)),e().then(()=>{n.next((0,a.VP)(ve.WidgetInteractionFinished,void 0,r)),n.complete()}).catch(e=>{n.error((0,a.fQ)(ve.WidgetInteractionFailed,e,r))})})}_getStrategy(e){let t;try{t=this._strategyRegistryV2.get({id:e||\"\"})}catch(n){t=this._strategyRegistry.get(e)}return t}}function Oe(e,t=[]){return Array.isArray(t)?ae([...e,...t]):function(e,t){const n=(0,E.keys)((0,E.pickBy)(t,e=>!e)),r=(0,E.keys)((0,E.filter)(t));return ae([...(0,E.difference)(e,n),...r])}(e,t)}class Pe{constructor(e){this._requestSender=e}loadCheckout(e,{params:{include:t}={},timeout:n}={}){const r=`/api/storefront/checkout/${e}`,i=Object.assign({Accept:R.JsonV1},_);return this._requestSender.get(r,{params:{include:Oe(ie,t)},headers:i,timeout:n}).catch(e=>{if(e.status>=400&&e.status<500)throw new X(e);throw e})}updateCheckout(e,t,{params:{include:n}={},timeout:r}={}){const i=`/api/storefront/checkout/${e}`,o=Object.assign({Accept:R.JsonV1},_);return this._requestSender.put(i,{params:{include:Oe(ie,n)},body:t,headers:o,timeout:r}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new x;throw e})}}!function(e){e.LoadCheckoutRequested=\"LOAD_CHECKOUT_REQUESTED\",e.LoadCheckoutSucceeded=\"LOAD_CHECKOUT_SUCCEEDED\",e.LoadCheckoutFailed=\"LOAD_CHECKOUT_FAILED\",e.UpdateCheckoutRequested=\"UPDATE_CHECKOUT_REQUESTED\",e.UpdateCheckoutSucceeded=\"UPDATE_CHECKOUT_SUCCEEDED\",e.UpdateCheckoutFailed=\"UPDATE_CHECKOUT_FAILED\"}(be||(be={})),function(e){e.HydrateInitialState=\"HYDRATE_INITIAL_STATE\"}(Se||(Se={}));var Ae;class Te{constructor(e,t,n){this._checkoutRequestSender=e,this._configActionCreator=t,this._formFieldsActionCreator=n}loadCheckout(e,t){return()=>(0,c.x)((0,u.of)((0,a.VP)(be.LoadCheckoutRequested)),(0,C.h)(this._configActionCreator.loadConfig({useCache:!0,timeout:null==t?void 0:t.timeout,params:{checkoutId:e}}),this._formFieldsActionCreator.loadFormFields({useCache:!0,timeout:null==t?void 0:t.timeout})),(0,d.v)(()=>this._checkoutRequestSender.loadCheckout(e,t).then(({body:e})=>(0,a.VP)(be.LoadCheckoutSucceeded,this._transformCustomerAddresses(e))))).pipe((0,l.W)(e=>y(be.LoadCheckoutFailed,e)))}loadDefaultCheckout(e){return t=>(0,c.x)((0,u.of)((0,a.VP)(be.LoadCheckoutRequested)),(0,C.h)(this._configActionCreator.loadConfig({useCache:!0,timeout:null==e?void 0:e.timeout}),this._formFieldsActionCreator.loadFormFields({useCache:!0,timeout:null==e?void 0:e.timeout})),(0,d.v)(()=>{return n=this,r=void 0,o=function*(){const n=t.getState().config.getContextConfig();if(!n||!n.checkoutId)throw new P(b.MissingCheckoutConfig);const{body:r}=yield this._checkoutRequestSender.loadCheckout(n.checkoutId,e);return(0,a.VP)(be.LoadCheckoutSucceeded,this._transformCustomerAddresses(r))},new((i=void 0)||(i=Promise))(function(e,t){function s(e){try{c(o.next(e))}catch(e){t(e)}}function a(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}c((o=o.apply(n,r||[])).next())});var n,r,i,o})).pipe((0,l.W)(e=>y(be.LoadCheckoutFailed,e)))}updateCheckout(e,t){return n=>new w.c(r=>{const i=n.getState().checkout.getCheckout();if(!i)throw new P(b.MissingCheckout);r.next((0,a.VP)(be.UpdateCheckoutRequested)),this._checkoutRequestSender.updateCheckout(i.id,e,t).then(({body:e})=>{r.next((0,a.VP)(be.UpdateCheckoutSucceeded,e)),r.complete()}).catch(e=>{r.error((0,a.fQ)(be.UpdateCheckoutFailed,e))})})}loadCurrentCheckout(e){return t=>{const n=t.getState().checkout.getCheckout();if(!n)throw new P(b.MissingCheckout);return this.loadCheckout(n.id,e)(t)}}hydrateInitialState(e){return{type:Se.HydrateInitialState,payload:e}}_transformCustomerAddresses(e){return Object.assign(Object.assign({},e),{customer:Object.assign(Object.assign({},e.customer),{addresses:e.customer.addresses.map(e=>Object.assign(Object.assign({},e),{shouldSaveAddress:!1}))})})}}!function(e){e.LoadFormFieldsRequested=\"LOAD_FORM_FIELDS_REQUESTED\",e.LoadFormFieldsSucceeded=\"LOAD_FORM_FIELDS_SUCCEEDED\",e.LoadFormFieldsFailed=\"LOAD_FORM_FIELDS_FAILED\"}(Ae||(Ae={}));class ke{constructor(e){this._formFieldsRequestSender=e}loadFormFields(e){return(0,c.x)((0,u.of)((0,a.VP)(Ae.LoadFormFieldsRequested)),(0,d.v)(()=>{return t=this,n=void 0,i=function*(){const{body:t}=yield this._formFieldsRequestSender.loadFields(e);return(0,a.VP)(Ae.LoadFormFieldsSucceeded,t)},new((r=void 0)||(r=Promise))(function(e,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}c((i=i.apply(t,n||[])).next())});var t,n,r,i})).pipe((0,l.W)(e=>y(Ae.LoadFormFieldsFailed,e)))}}!function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);o>3&&s&&Object.defineProperty(t,n,s)}([K],ke.prototype,\"loadFormFields\",null);class xe{constructor(e){this._requestSender=e}loadFields({timeout:e}={}){return this._requestSender.get(\"/api/storefront/form-fields\",{timeout:e,headers:Object.assign({Accept:R.JsonV1,\"X-API-INTERNAL\":ee},_)})}}var Re,Me=n(1698);class Ne extends O{constructor(){super(\"You haven't complete our spam protection challenge. Please try again.\"),this.name=\"SpamProtectionChallengeNotCompletedError\",this.type=\"spam_protection_challenge_not_completed\"}}class Le extends O{constructor(){super(\"We were not able to complete your spam protection verification. Please try again.\"),this.name=\"SpamProtectionFailedError\",this.type=\"spam_protection_failed\"}}!function(e){e.InitializeFailed=\"SPAM_PROTECTION_INITIALIZE_FAILED\",e.InitializeSucceeded=\"SPAM_PROTECTION_INITIALIZE_SUCCEEDED\",e.InitializeRequested=\"SPAM_PROTECTION_INITIALIZE_REQUESTED\",e.VerifyCheckoutRequested=\"SPAM_PROTECTION_CHECKOUT_VERIFY_REQUESTED\",e.VerifyCheckoutSucceeded=\"SPAM_PROTECTION_CHECKOUT_VERIFY_SUCCEEDED\",e.VerifyCheckoutFailed=\"SPAM_PROTECTION_CHECKOUT_VERIFY_FAILED\",e.ExecuteRequested=\"SPAM_PROTECTION_EXECUTE_REQUESTED\",e.ExecuteSucceeded=\"SPAM_PROTECTION_EXECUTE_SUCCEEDED\",e.ExecuteFailed=\"SPAM_PROTECTION_EXECUTE_FAILED\"}(Re||(Re={}));var De=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class je{constructor(e,t){this._googleRecaptcha=e,this._requestSender=t}initialize(e){return t=>(0,c.x)((0,u.of)((0,a.VP)(Re.InitializeRequested,void 0)),(0,d.v)(()=>De(this,void 0,void 0,function*(){const n=e?e.containerId:\"spamProtectionContainer\";if(document.getElementById(n)&&this._googleRecaptcha.reset(n),!e&&!document.getElementById(n)){const e=document.createElement(\"div\");e.setAttribute(\"id\",n),document.body.appendChild(e)}const r=t.getState().config.getStoreConfigOrThrow().checkoutSettings.googleRecaptchaSitekey;return yield this._googleRecaptcha.load(n,r),(0,a.VP)(Re.InitializeSucceeded)}))).pipe((0,l.W)(e=>y(Re.InitializeFailed,e)))}verifyCheckoutSpamProtection(){return e=>(0,d.v)(()=>{const t=e.getState().checkout.getCheckout();if(!t)throw new P(b.MissingCheckout);return(0,c.x)((0,u.of)((0,a.VP)(Re.VerifyCheckoutRequested)),(0,W.H)(this.execute()(e)).pipe((0,ge.n)(e=>_e(e)&&e.payload?(0,W.H)(this._requestSender.validate(t.id,e.payload.token)).pipe((0,ge.n)(({body:t})=>(0,c.x)((0,u.of)(e),(0,u.of)((0,a.VP)(Re.VerifyCheckoutSucceeded,t))))):(0,u.of)(e)))).pipe((0,l.W)(e=>y(Re.VerifyCheckoutFailed,e)))})}execute(){return e=>(0,c.x)((0,u.of)((0,a.VP)(Re.ExecuteRequested)),this.initialize()(e),this._googleRecaptcha.execute().pipe((0,Me.s)(1)).pipe((0,ge.n)(({error:e,token:t})=>De(this,void 0,void 0,function*(){if(e instanceof Ne)throw e;if(e||!t)throw new Le;return(0,a.VP)(Re.ExecuteSucceeded,{token:t})})))).pipe((0,l.W)(e=>y(Re.ExecuteFailed,e)))}}class Fe{constructor(e=window){this._window=e}create(e){return new this._window.MutationObserver(e)}}var Ue,Be,ze=n(9023),qe=n(2551),He=n(3158);!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(Ue||(Ue={}));class Ve extends O{constructor(e){super(function(e){switch(e){case Ue.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case Ue.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case Ue.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case Ue.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class Ge extends O{constructor(){super(\"Spam protection is not loaded. Please try again.\"),this.name=\"SpamProtectionNotLoadedError\",this.type=\"spam_protection_failed\"}}class Ye{constructor(e,t){this.googleRecaptchaScriptLoader=e,this.mutationObserverFactory=t,this._memoized=(0,Y.Bj)((e,t,n)=>{const r=new ze.B7;if(!n)throw new Error;return this._widgetId=e.render(n.id,{sitekey:t,size:\"invisible\",callback:()=>{r.next({token:e.getResponse(this._widgetId)}),e.reset(this._widgetId)},\"error-callback\":()=>{r.next({error:new Le})}}),r},{isEqual:(e,t)=>e===t})}load(e,t){return this.googleRecaptchaScriptLoader.load().then(n=>{n&&(this._event$=this._memoized(n,t,document.getElementById(e)),this._recaptcha=n)}).catch(e=>{throw e})}reset(e){var t;const n=document.getElementById(e);null==n||n.remove(),null===(t=this._recaptcha)||void 0===t||t.reset(this._widgetId)}execute(){return(0,d.v)(()=>{const e=this._event$,t=this._recaptcha;if(!e||!t)throw new Ve(Ue.SpamProtectionNotInitialized);return(0,d.v)(()=>{const e=document.querySelector('iframe[src*=\"bframe\"]');return e?(0,u.of)(e):(0,m.$)(new Ge)}).pipe((0,qe.l)(e=>e.pipe((0,He.c)(250),(0,ge.n)((e,t)=>t<28?(0,u.of)(e):(0,m.$)(e)))),(0,ge.n)(n=>(this._watchRecaptchaChallengeWindow(e,n),t.execute(this._widgetId),e)),(0,l.W)(e=>(0,u.of)({error:e})))})}_watchRecaptchaChallengeWindow(e,t){const n=t.parentElement;if(!n)throw new Ge;const r=n.parentElement;if(!r)throw new Ge;this.mutationObserverFactory.create(()=>{\"hidden\"===r.style.visibility&&e.next({error:new Ne})}).observe(r,{attributes:!0,attributeFilter:[\"style\"]})}}class We{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(){return this._loadPromise||(this._loadPromise=this._loadScript()),this._loadPromise}_loadScript(){const e=\"initRecaptcha\",t=[`onload=${e}`,\"render=explicit\"].join(\"&\");return new Promise((n,r)=>{this._window[e]=()=>n(this._window.grecaptcha),this._scriptLoader.loadScript(`//www.google.com/recaptcha/api.js?${t}`).catch(e=>{this._loadPromise=void 0,r(e)})})}}function $e(e){return new Ye(new We(e),new Fe)}class Ke{constructor(e){this._requestSender=e}validate(e,t,{timeout:n}={}){const r=`/api/storefront/checkouts/${e}/spam-protection`,i=Object.assign({Accept:R.JsonV1},_);return this._requestSender.post(r,{body:{token:t},headers:i,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new x;throw e})}}class Qe{constructor(e,t){this._store=e,this._customerActionCreator=t}signIn(e,t){return this._store.dispatch(this._customerActionCreator.signInCustomer(e,t))}signOut(e){return this._store.dispatch(this._customerActionCreator.signOutCustomer(e))}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve(this._store.getState())}initialize(){return Promise.resolve(this._store.getState())}deinitialize(){return Promise.resolve(this._store.getState())}}function Ze(e){if(!/^(https?:)?\\/\\//.test(e))throw new he(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=e;const n=t.port&&-1!==e.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${n?`:${n}`:\"\"}`,pathname:t.pathname,port:n,protocol:t.protocol,search:t.search}}class Je extends O{constructor(e){super(e||\"Unable to proceed due to no extension configured for this region.\"),this.name=\"ExtensionNotFoundError\",this.type=\"extension_not_found\"}}!function(e){e.LoadExtensionsRequested=\"LOAD_EXTENSIONS_REQUESTED\",e.LoadExtensionsSucceeded=\"LOAD_EXTENSIONS_SUCCEEDED\",e.LoadExtensionsFailed=\"LOAD_EXTENSIONS_FAILED\",e.RenderExtensionRequested=\"RENDER_EXTENSION_REQUESTED\",e.RenderExtensionSucceeded=\"RENDER_EXTENSION_SUCCEEDED\",e.RenderExtensionFailed=\"RENDER_EXTENSION_FAILED\"}(Be||(Be={}));var Xe,et=n(1381),tt=n(6275),nt=n(2035);function rt(e,t){return e.type===t}class it{constructor(e,t,n){this._targetWindow=t,this._context=n,this._targetOrigin=\"*\"===e?\"*\":Ze(e).origin}post(e,t){const n=this._targetWindow;if(window===n)return;if(!n)throw new Error(\"Unable to post message because target window is not set.\");const r=t&&(0,et.R)(window,\"message\").pipe((0,tt.p)(e=>e.origin===this._targetOrigin&&rt(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)),(0,nt.T)(e=>{if(t.errorType===e.data.type)throw e.data;return e.data}),(0,Me.s)(1)).toPromise();return n.postMessage(Object.assign(Object.assign({},e),{context:this._context}),this._targetOrigin),r}setTarget(e){this._targetWindow=e}setContext(e){this._context=e}}function ot(e){var t;const n=null===(t=document.querySelector(`[data-extension-id=\"${e.id}\"]`))||void 0===t?void 0:t.querySelector(\"iframe\");if(!(null==n?void 0:n.contentWindow))throw new Je(`Unable to post due to no extension rendered for ID: ${e.id}.`);return new it(e.url,n.contentWindow)}!function(e){e.ExtensionReady=\"EXTENSION:READY\",e.ExtensionFailed=\"EXTENSION:FAILED\"}(Xe||(Xe={}));class st{constructor(e){const t=new Promise((e,t)=>{this.cancel=t});this.promise=Promise.race([e,t])}}class at extends O{constructor(e){super(e||\"Unable to proceed because the required element is unexpectedly detached from the page.\"),this.name=\"UnexpectedDetachmentError\",this.type=\"unexpected_detachment\"}}var ct;class ut{constructor(e){this._mutationObserver=e}ensurePresence(e,t){return n=this,r=void 0,o=function*(){const n=new st(t),r=this._mutationObserver.create(t=>{t.forEach(t=>{0!==Array.from(t.removedNodes).filter(t=>e.some(e=>t===e||t.contains(e))).length&&n.cancel(new at)})});r.observe(document.body,{childList:!0,subtree:!0});try{const e=yield n.promise;return r.disconnect(),e}catch(e){throw r.disconnect(),e}},new((i=void 0)||(i=Promise))(function(e,t){function s(e){try{c(o.next(e))}catch(e){t(e)}}function a(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}}function dt(e,t){const{iframeResizer:r}=n(3347);return r(e,t)}class lt extends O{constructor(e){super(e||\"Unable to load an extension\"),this.name=\"ExtensionNotLoadedError\",this.type=\"extension_not_loaded\"}}!function(e){e.Subscribe=\"EXTENSION_INTERNAL:SUBSCRIBE\",e.Unsubscribe=\"EXTENSION_INTERNAL:UNSUBSCRIBE\",e.ResizeIframe=\"EXTENSION_INTERNAL:RESIZE_IFRAME\"}(ct||(ct={}));class ht{constructor(e){this._options=e}createFrame(e,t,n,r){const i=document.getElementById(t),{timeout:o=6e4}=this._options||{};if(!i)throw new lt(\"Unable to embed the iframe because the container element could not be found.\");const s=document.createElement(\"iframe\");return s.src=e,s.style.border=\"none\",s.style.display=\"none\",s.style.width=\"100%\",i.appendChild(s),this._toResizableFrame(s,o,n,r).catch(e=>{throw i.removeChild(s),e})}_toResizableFrame(e,t,n,r){return i=this,o=void 0,a=function*(){const i=new ut(new Fe),o=new Promise((i,o)=>{const s=window.setTimeout(()=>{try{r()}catch(e){e instanceof Error&&console.error(`Extension rendering timed out after ${t}ms, and the callback function could not be executed. Error: ${e.message}`)}o(new lt(\"Unable to load the extension because the content could not be loaded.\"))},t),a=t=>{if(t.origin===Ze(e.src).origin&&rt(t.data,ct.ResizeIframe)){e.style.display=\"\";const t=dt({autoResize:!1,scrolling:!1,sizeWidth:!1,heightCalculationMethod:\"bodyOffset\",initCallback:n},e);c(),i(t[t.length-1])}},c=()=>{window.removeEventListener(\"message\",a),window.clearTimeout(s)};window.addEventListener(\"message\",a)});return i.ensurePresence([e],o)},new((s=void 0)||(s=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function r(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof s?i:new s(function(e){e(i)})).then(n,r)}c((a=a.apply(i,o||[])).next())});var i,o,s,a}}class pt{constructor(e,t,n){this._containerId=e,this._extension=t,this._config=n;const{cartId:r,parentOrigin:i}=this._config;this._url=new URL(this._extension.url),this._url.searchParams.set(\"extensionId\",this._extension.id),this._url.searchParams.set(\"cartId\",r),this._url.searchParams.set(\"parentOrigin\",i)}attach(){var e,t,n,r,i;return t=this,n=void 0,i=function*(){if(null===(e=document.querySelector(`[data-extension-id=\"${this._extension.id}\"]`))||void 0===e?void 0:e.querySelector(\"iframe\"))return;const t=new ht,n=e=>{ot(this._extension).post({type:e})};this._iframe=yield t.createFrame(this._url.toString(),this._containerId,()=>{n(Xe.ExtensionReady)},()=>{n(Xe.ExtensionFailed)});const r=document.getElementById(this._containerId);null==r||r.setAttribute(\"data-extension-id\",this._extension.id)},new((r=void 0)||(r=Promise))(function(e,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}c((i=i.apply(t,n||[])).next())})}detach(){this._iframe&&this._iframe.parentElement&&this._iframe.parentElement.removeChild(this._iframe)}}class ft{constructor(e){this._requestSender=e}loadExtensions(e){return()=>w.c.create(t=>{t.next((0,a.VP)(Be.LoadExtensionsRequested)),this._requestSender.loadExtensions(e).then(e=>{const n=e.body;t.next((0,a.VP)(Be.LoadExtensionsSucceeded,n)),t.complete()}).catch(e=>{t.error((0,a.fQ)(Be.LoadExtensionsFailed,e))})})}renderExtension(e,t,n){return r=>w.c.create(i=>{return o=this,s=void 0,u=function*(){const o=r.getState(),{id:s}=o.cart.getCartOrThrow(),{links:{checkoutLink:c}}=o.config.getStoreConfigOrThrow(),u=o.extensions.getExtensionByRegion(t);try{if(!u)throw new Je(`Unable to proceed due to no extension configured for the region: ${t}.`);if(i.next((0,a.VP)(Be.RenderExtensionRequested)),\"worker\"===u.type){const e=function(e){if(!window.Worker)throw new Error(\"Unable to load the extension's web worker: your browser does not support Web Workers.\");try{const t=URL.createObjectURL(new Blob([`importScripts=((i)=>(...a)=>i(...a.map((u)=>''+new URL(u,\"${e}\"))))(importScripts);importScripts(\"${e}\")`],{type:\"text/javascript\"}));return new Worker(t)}catch(e){throw new Error(\"Unable to load the extension's web worker\")}}(u.url);n.add(u.id,e)}else{const t=new pt(e,u,{cartId:s,parentOrigin:Ze(c).origin});yield t.attach()}i.next((0,a.VP)(Be.RenderExtensionSucceeded)),i.complete()}catch(e){i.error((0,a.fQ)(Be.RenderExtensionFailed,e))}},new((c=void 0)||(c=Promise))(function(e,t){function n(e){try{i(u.next(e))}catch(e){t(e)}}function r(e){try{i(u.throw(e))}catch(e){t(e)}}function i(t){var i;t.done?e(t.value):(i=t.value,i instanceof c?i:new c(function(e){e(i)})).then(n,r)}i((u=u.apply(o,s||[])).next())});var o,s,c,u})}}class mt{constructor(e){this._requestSender=e}loadExtensions({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/checkout-extensions\",{timeout:e,headers:Object.assign({Accept:R.JsonV1},_),params:t})}}const yt=function(e,t,n){return t&&n?gt(0,t,n):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const r=Object.getOwnPropertyDescriptor(e.prototype,n);r&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,gt(e.prototype,n,r))}),t}(e)};function gt(e,t,n){if(\"function\"!=typeof n.value)return n;let r=n.value;return{get(){const e=r.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){r=e}}}var _t,vt;class bt{constructor(e){this._worker=e,this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,this._worker.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,this._worker.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const r=n.indexOf(t);r>=0&&n.splice(r,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){const t=e.data,{context:n}=t,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(t,[\"context\"]);this.trigger(r,n)}}!function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);o>3&&s&&Object.defineProperty(t,n,s)}([yt],bt.prototype,\"_handleMessage\",null);class St{constructor(e,t){this._worker=e,this._context=t}post(e){if(!this._worker)throw new Error(\"WorkerPoster: Worker is not initialized or creation failed. Cannot post message.\");this._worker.postMessage(Object.assign(Object.assign({},e),{context:this._context}))}}class Et extends O{constructor(e){super(e||\"Unable to proceed due to unsupported extension command.\"),this.name=\"UnsupportedExtensionCommandError\",this.type=\"unsupported_extension_command_error\"}}class Ct extends O{constructor(e){super(e||\"Unable to proceed due to unsupported extension query.\"),this.name=\"UnsupportedExtensionQueryError\",this.type=\"unsupported_extension_query_error\"}}!function(e){e.ReloadCheckout=\"EXTENSION:RELOAD_CHECKOUT\",e.ShowLoadingIndicator=\"EXTENSION:SHOW_LOADING_INDICATOR\",e.SetIframeStyle=\"EXTENSION:SET_IFRAME_STYLE\",e.ReRenderShippingForm=\"EXTENSION:RE_RENDER_SHIPPING_FORM\",e.ReRenderShippingStep=\"EXTENSION:RE_RENDER_SHIPPING_STEP\"}(_t||(_t={})),function(e){e.GetConsignments=\"EXTENSION:GET_CONSIGNMENTS\"}(vt||(vt={}));class wt{constructor(e={},t={},n={}){this._workers=e,this._commandListeners=t,this._queryListeners=n}add(e,t){this._workers[e]=t}listenForCommand(e,t,n){const r=this._getWorkerById(e);this._commandListeners[e]||(this._commandListeners[e]=new bt(r));const i=this._commandListeners[e];i.listen();const o=this._validateCommand(t),s=(t,r)=>{(null==r?void 0:r.extensionId)===e&&n(t,r)};return i.addListener(o,s),()=>{i.removeListener(o,s)}}listenForQuery(e,t,n){const r=this._getWorkerById(e);this._queryListeners[e]||(this._queryListeners[e]=new bt(r));const i=this._queryListeners[e];i.listen();const o=this._validateQuery(t),s=(t,r)=>{(null==r?void 0:r.extensionId)===e&&n(t,r)};return i.addListener(o,s),()=>{i.removeListener(o,s)}}stopListen(e){this._commandListeners[e]&&this._commandListeners[e].stopListen(),this._queryListeners[e]&&this._queryListeners[e].stopListen()}post(e,t){if(!this._workers[e])throw new Error(`Worker with extensionId ${e} not found`);new St(this._workers[e],e).post(t)}clearCacheById(e){delete this._workers[e]}_getWorkerById(e){const t=this._workers[e];if(!t)throw new Je(`Worker with extensionId ${e} not found`);return t}_validateCommand(e){if(Object.values(_t).includes(e))return e;throw new Et}_validateQuery(e){if(Object.values(vt).includes(e))return e;throw new Ct}}function It(e){return Ze(0===e.hostname.indexOf(\"www\")?e.href:e.href.replace(e.hostname,`www.${e.hostname}`))}var Ot;class Pt{constructor(e){this._sourceOrigins=[Ze(e).origin,It(Ze(e)).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const r=n.indexOf(t);r>=0&&n.splice(r,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){if(-1===this._sourceOrigins.indexOf(e.origin)||!rt(e.data,e.data.type))return;const t=e.data,{context:n}=t,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(t,[\"context\"]);this.trigger(r,n)}}!function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);o>3&&s&&Object.defineProperty(t,n,s)}([yt],Pt.prototype,\"_handleMessage\",null);class At{constructor(e,t,n={},r={},i={}){this._store=e,this._workerExtensionMessenger=t,this._commandListeners=n,this._queryListeners=r,this._posters=i}clearCacheByRegion(e){const t=this._getExtensionByRegion(e);\"worker\"!==t.type?this.clearCacheById(t.id):this._workerExtensionMessenger.clearCacheById(t.id)}clearCacheById(e){const t=this._getExtensionById(e);\"worker\"!==t.type?(this._commandListeners[e]&&delete this._commandListeners[e],this._queryListeners[e]&&delete this._queryListeners[e],this._posters[e]&&delete this._posters[e]):this._workerExtensionMessenger.clearCacheById(t.id)}listenForCommand(e,t,n){const r=this._getExtensionById(e);if(\"worker\"===r.type)return this._workerExtensionMessenger.listenForCommand(e,t,n);this._commandListeners[e]||(this._commandListeners[e]=new Pt(r.url));const i=this._commandListeners[e];i.listen();const o=this._validateCommand(t),s=(t,r)=>{(null==r?void 0:r.extensionId)===e&&n(t,r)};return i.addListener(o,s),()=>{i.removeListener(o,s)}}listenForQuery(e,t,n){const r=this._getExtensionById(e);if(\"worker\"===r.type)return this._workerExtensionMessenger.listenForQuery(e,t,n);this._queryListeners[e]||(this._queryListeners[e]=new Pt(r.url));const i=this._queryListeners[e];i.listen();const o=this._validateQuery(t),s=(t,r)=>{(null==r?void 0:r.extensionId)===e&&n(t,r)};return i.addListener(o,s),()=>{i.removeListener(o,s)}}stopListen(e){\"worker\"!==this._getExtensionById(e).type?(this._commandListeners[e]&&this._commandListeners[e].stopListen(),this._queryListeners[e]&&this._queryListeners[e].stopListen()):this._workerExtensionMessenger.stopListen(e)}post(e,t){try{const n=this._getExtensionById(e);if(\"worker\"===n.type)return void this._workerExtensionMessenger.post(e,t);this._posters[e]||(this._posters[e]=ot(n)),this._posters[e].post(t)}catch(n){this.clearCacheById(e),console.log(`Unable to post event to extension(${e}) because extension iframe is not mounted.\\nThe event that could not be delivered:`,t)}}_getExtensionById(e){var t;this._getExtensions();const n=null===(t=this._extensions)||void 0===t?void 0:t.find(t=>t.id===e);if(!n)throw new Je(`Unable to proceed due to no extension found for ID: ${e}.`);return n}_getExtensionByRegion(e){var t;this._getExtensions();const n=null===(t=this._extensions)||void 0===t?void 0:t.find(t=>t.region===e);if(!n)throw new Je(`Unable to proceed due to no extension found for region: ${e}.`);return n}_getExtensions(){if(this._extensions)return;const{extensions:{getExtensions:e}}=this._store.getState();if(this._extensions=e(),!this._extensions)throw new Je(\"Extension configurations not found.\")}_validateCommand(e){if(Object.values(_t).includes(e))return e;throw new Et}_validateQuery(e){if(Object.values(vt).includes(e))return e;throw new Ct}}class Tt{constructor(e,t,n){this._store=e,this._extensionMessenger=t,this._subscribers=n,this._subscribed={},this._unsubscribers={},this._listeners={}}listen(){var e;const{data:{getExtensions:t}}=this._store.getState();null===(e=t())||void 0===e||e.forEach(e=>{if(this._listeners[e.id])return;const t=new Pt(e.url);t.addListener(ct.Subscribe,this._handleSubscribe.bind(this)),t.addListener(ct.Unsubscribe,this._handleUnsubscribe.bind(this)),t.listen(),this._listeners[e.id]=t})}broadcast(e){var t;const{data:{getExtensions:n}}=this._store.getState();null===(t=n())||void 0===t||t.forEach(t=>{this._subscribed[t.id]&&this._extensionMessenger.post(t.id,e)})}_handleSubscribe({payload:{eventType:e,extensionId:t}}){this._subscribed[t]=!0,this._unsubscribers[e]||(this._unsubscribers[e]=this._subscribers[e](this._store,this))}_handleUnsubscribe({payload:{eventType:e,extensionId:t}}){var n,r;delete this._subscribed[t],Object.keys(this._subscribed).length||(null===(r=(n=this._unsubscribers)[e])||void 0===r||r.call(n),delete this._unsubscribers[e])}}!function(e){e.ConsignmentsChanged=\"EXTENSION:CONSIGNMENTS_CHANGED\"}(Ot||(Ot={}));const kt=(e,t)=>{var n;const{data:{getConsignments:r}}=e.getState();let i=null!==(n=r())&&void 0!==n?n:[];return e.subscribe(({data:{getConsignments:e}})=>{var n;const r=null!==(n=e())&&void 0!==n?n:[];r!==i&&(t.broadcast({type:Ot.ConsignmentsChanged,payload:{consignments:r,previousConsignments:i}}),i=r)},({data:{getConsignments:e}})=>e())};class xt extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class Rt extends xt{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class Mt{constructor(e){this._paymentIntegrationService=e}execute(e,t){return n=this,r=void 0,o=function*(){yield this._paymentIntegrationService.submitOrder((0,E.omit)(e,\"payment\"),t)},new((i=void 0)||(i=Promise))(function(e,t){function s(e){try{c(o.next(e))}catch(e){t(e)}}function a(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}finalize(){return Promise.reject(new Rt)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const Nt=Object.assign(e=>new Mt(e),{resolveIds:[{id:\"nopaymentdatarequired\"}]});var Lt,Dt;!function(e){e.LoadCountriesRequested=\"LOAD_COUNTRIES_REQUESTED\",e.LoadCountriesSucceeded=\"LOAD_COUNTRIES_SUCCEEDED\",e.LoadCountriesFailed=\"LOAD_COUNTRIES_FAILED\"}(Lt||(Lt={}));class jt{constructor(e){this._countryRequestSender=e}loadCountries(e){return w.c.create(t=>{t.next((0,a.VP)(Lt.LoadCountriesRequested)),this._countryRequestSender.loadCountries(e).then(e=>{t.next((0,a.VP)(Lt.LoadCountriesSucceeded,e.body.data)),t.complete()}).catch(e=>{t.error((0,a.fQ)(Lt.LoadCountriesFailed,e))})})}}class Ft{constructor(e,t){this._requestSender=e,this._config=t}loadCountries({timeout:e}={}){const t=Object.assign({\"Accept-Language\":this._config.locale},_);return this._requestSender.get(\"/internalapi/v1/store/countries\",{headers:t,timeout:e})}}class Ut extends O{constructor(e){super(e||\"Your checkout could not be processed because some details have changed. Please review your order and try again.\"),this.name=\"CartConsistencyError\",this.type=\"cart_consistency\"}}class Bt extends O{constructor(e,t){super(t||\"At least one item changed stock position. Please review your cart and try again.\"),this.name=\"CartStockPositionsChangedError\",this.type=\"cart_stock_positions_changed\",this.changedItemIds=e}}class zt extends O{constructor(e){super(e||\"The tax provider is unavailable.\"),this.name=\"OrderTaxProviderUnavailableError\",this.type=\"tax_provider_unavailable\"}}class qt extends O{constructor(e){super(e),this.name=\"MissingShippingMethodError\",this.type=\"missing_shipping_method\"}}class Ht extends O{constructor(e){super(e),this.name=\"InvalidShippingAddressError\",this.type=\"invalid_shipping_address\"}}class Vt{constructor(e){this._requestSender=e}loadOrder(e,{timeout:t}={}){const n=`/api/storefront/orders/${e}`,r=Object.assign({Accept:R.JsonV1},_);return this._requestSender.get(n,{params:{include:ae([\"payments\",\"lineItems.physicalItems.socialMedia\",\"lineItems.physicalItems.options\",\"lineItems.physicalItems.categories\",\"lineItems.digitalItems.socialMedia\",\"lineItems.digitalItems.options\",\"lineItems.digitalItems.categories\"])},headers:r,timeout:t})}submitOrder(e,{headers:t,timeout:n}={}){return this._requestSender.post(\"/internalapi/v1/checkout/order\",{body:e,headers:(0,E.omitBy)(Object.assign({\"X-Checkout-Variant\":t&&t.checkoutVariant},_),E.isNil),timeout:n}).catch(e=>{var t,n;if(\"tax_provider_unavailable\"===e.body.type)throw new zt;if(\"cart_has_changed\"===e.body.type)throw new Ut;if(\"cart_stock_positions_changed\"===e.body.type){const r=null!==(n=null===(t=e.body.errors)||void 0===t?void 0:t.changedItemIds)&&void 0!==n?n:[];throw new Bt(r)}if(\"missing_shipping_method\"===e.body.type)throw new qt(e.body.detail);if(\"invalid_shipping_address\"===e.body.type)throw new Ht(e.body.detail);if(\"empty_cart\"===e.body.type)throw new x;throw e})}finalizeOrder(e,{timeout:t}={}){const n=`/internalapi/v1/checkout/order/${e}`;return this._requestSender.post(n,{timeout:t,headers:_})}}class Gt extends O{constructor(){super(\"You haven't complete our spam check. Please try again.\"),this.name=\"SpamProtectionNotCompletedError\",this.type=\"spam_protection_not_completed\"}}!function(e){e.LoadOrderRequested=\"LOAD_ORDER_REQUESTED\",e.LoadOrderSucceeded=\"LOAD_ORDER_SUCCEEDED\",e.LoadOrderFailed=\"LOAD_ORDER_FAILED\",e.LoadOrderPaymentsRequested=\"LOAD_ORDER_PAYMENTS_REQUESTED\",e.LoadOrderPaymentsSucceeded=\"LOAD_ORDER_PAYMENTS_SUCCEEDED\",e.LoadOrderPaymentsFailed=\"LOAD_ORDER_PAYMENTS_FAILED\",e.SubmitOrderRequested=\"SUBMIT_ORDER_REQUESTED\",e.SubmitOrderSucceeded=\"SUBMIT_ORDER_SUCCEEDED\",e.SubmitOrderFailed=\"SUBMIT_ORDER_FAILED\",e.FinalizeOrderRequested=\"FINALIZE_ORDER_REQUESTED\",e.FinalizeOrderSucceeded=\"FINALIZE_ORDER_SUCCEEDED\",e.FinalizeOrderFailed=\"FINALIZE_ORDER_FAILED\"}(Dt||(Dt={}));class Yt{constructor(e,t){this._orderRequestSender=e,this._checkoutValidator=t}loadOrder(e,t){return new w.c(n=>{n.next((0,a.VP)(Dt.LoadOrderRequested)),this._orderRequestSender.loadOrder(e,t).then(e=>{n.next((0,a.VP)(Dt.LoadOrderSucceeded,e.body)),n.complete()}).catch(e=>{n.error((0,a.fQ)(Dt.LoadOrderFailed,e))})})}loadOrderPayments(e,t){return new w.c(n=>{n.next((0,a.VP)(Dt.LoadOrderPaymentsRequested)),this._orderRequestSender.loadOrder(e,t).then(e=>{n.next((0,a.VP)(Dt.LoadOrderPaymentsSucceeded,e.body)),n.complete()}).catch(e=>{n.error((0,a.fQ)(Dt.LoadOrderPaymentsFailed,e))})})}loadCurrentOrder(e){return t=>(0,d.v)(()=>{const n=this._getCurrentOrderId(t.getState());if(!n)throw new P(b.MissingOrderId);return this.loadOrder(n,e)})}submitOrder(e,t){return n=>(0,c.x)((0,u.of)((0,a.VP)(Dt.SubmitOrderRequested)),(0,d.v)(()=>{const r=n.getState(),i=r.config.getExternalSource(),o=r.config.getVariantIdentificationToken(),s=r.checkout.getCheckout();if(!s)throw new P(b.MissingCheckout);if(s.shouldExecuteSpamCheck)throw new Gt;return(0,W.H)(this._checkoutValidator.validate(s,t).then(()=>this._orderRequestSender.submitOrder(this._mapToOrderRequestBody(null!=e?e:{},s.id,s.customerMessage,i),Object.assign(Object.assign({},t),{headers:{checkoutVariant:o}})))).pipe((0,ge.n)(e=>(0,c.x)(this.loadOrder(e.body.data.order.orderId,t),(0,u.of)((0,a.VP)(Dt.SubmitOrderSucceeded,e.body.data,Object.assign(Object.assign({},e.body.meta),{token:e.headers.token}))))))}).pipe((0,l.W)(e=>y(Dt.SubmitOrderFailed,e))))}finalizeOrder(e,t){return(0,c.x)((0,u.of)((0,a.VP)(Dt.FinalizeOrderRequested)),(0,W.H)(this._orderRequestSender.finalizeOrder(e,t)).pipe((0,ge.n)(n=>(0,c.x)(this.loadOrder(e,t),(0,u.of)((0,a.VP)(Dt.FinalizeOrderSucceeded,n.body.data)))))).pipe((0,l.W)(e=>y(Dt.FinalizeOrderFailed,e)))}_getCurrentOrderId(e){const t=e.order.getOrder(),n=e.checkout.getCheckout();return t&&t.orderId||n&&n.orderId}_mapToOrderRequestBody(e,t,n,r){const{payment:i}=e,o=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]);return i?Object.assign(Object.assign({},o),{cartId:t,customerMessage:n,externalSource:r,payment:{paymentData:i.paymentData,name:i.methodId,gateway:i.gatewayId}}):Object.assign(Object.assign({},o),{cartId:t,customerMessage:n,externalSource:r})}}var Wt=n(2742);function $t(e){const t=(0,Wt.U)();return e.subscribe(e=>{const n=e.config.getStoreConfig();n&&t.setHost(n.paymentSettings.bigpayBaseUrl)},e=>e.config.getStoreConfig()),t}var Kt;function Qt(e,t,n,r){var i,o,s,a,c,u,d,l;return c=this,u=void 0,l=function*(){const c=t.customer.getCustomer(),u=t.b2bToken.getToken(),d=p(null!==(s=null===(o=null===(i=t.config.getStoreConfig())||void 0===i?void 0:i.b2bApiSettings)||void 0===o?void 0:o.baseUrl)&&void 0!==s?s:\"\"),l=null===(a=t.cart.getCart())||void 0===a?void 0:a.companyId;if(!c||c.isGuest||!u||!d||!l)throw new P(b.MissingCheckoutConfig);const{body:h}=yield n.getB2BCompanyPaymentMethods(l,u,d,r);return function(e,t){const n=new Set(t.data.filter(e=>\"1\"===e.isEnabled).map(e=>e.code));return e.filter(e=>n.has(e.id))}(e,h)},new((d=void 0)||(d=Promise))(function(e,t){function n(e){try{i(l.next(e))}catch(e){t(e)}}function r(e){try{i(l.throw(e))}catch(e){t(e)}}function i(t){var i;t.done?e(t.value):(i=t.value,i instanceof d?i:new d(function(e){e(i)})).then(n,r)}i((l=l.apply(c,u||[])).next())})}!function(e){e.LoadPaymentMethodRequested=\"LOAD_PAYMENT_METHOD_REQUESTED\",e.LoadPaymentMethodSucceeded=\"LOAD_PAYMENT_METHOD_SUCCEEDED\",e.LoadPaymentMethodFailed=\"LOAD_PAYMENT_METHOD_FAILED\",e.LoadPaymentMethodsRequested=\"LOAD_PAYMENT_METHODS_REQUESTED\",e.LoadPaymentMethodsSucceeded=\"LOAD_PAYMENT_METHODS_SUCCEEDED\",e.LoadPaymentMethodsFailed=\"LOAD_PAYMENT_METHODS_FAILED\"}(Kt||(Kt={}));var Zt=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};const Jt=e=>!!e;class Xt{constructor(e,t){this._requestSender=e,this._b2bCompanyPaymentMethodRequestSender=t}loadPaymentMethodsById(e,t){return n=>new w.c(r=>{var i;const o=null===(i=n.getState().cart.getCart())||void 0===i?void 0:i.id,s=o?Object.assign(Object.assign({},null==t?void 0:t.params),{cartId:o}):Object.assign({},null==t?void 0:t.params);r.next((0,a.VP)(Kt.LoadPaymentMethodsRequested)),Promise.all(e.map(e=>Zt(this,void 0,void 0,function*(){try{return(yield this._requestSender.loadPaymentMethod(e,Object.assign(Object.assign({},t),{params:s}))).body}catch(e){return}}))).then(e=>{const t=e.filter(Jt);r.next((0,a.VP)(Kt.LoadPaymentMethodsSucceeded,t)),r.complete()}).catch(e=>{r.next((0,a.VP)(Kt.LoadPaymentMethodsFailed,e)),r.complete()})})}loadPaymentMethods(e){return t=>w.c.create(n=>{const r=t.getState(),i=r.cart.getCartOrThrow();n.next((0,a.VP)(Kt.LoadPaymentMethodsRequested)),this._requestSender.loadPaymentMethods(Object.assign(Object.assign({},e),{params:Object.assign(Object.assign({},null==e?void 0:e.params),{cartId:i.id})})).then(t=>Zt(this,void 0,void 0,function*(){var i,o,s,c;const u={deviceSessionId:t.headers[\"x-device-session-id\"],sessionHash:t.headers[\"x-session-hash\"]};let d=t.body;null!==(c=null===(s=null===(o=null===(i=r.config.getStoreConfig())||void 0===i?void 0:i.checkoutSettings.capabilities)||void 0===o?void 0:o.payment)||void 0===s?void 0:s.b2bPaymentMethodFilter)&&void 0!==c&&c&&(d=yield Qt(d,r,this._b2bCompanyPaymentMethodRequestSender,e)),n.next((0,a.VP)(Kt.LoadPaymentMethodsSucceeded,d,u)),n.complete()})).catch(e=>{n.error((0,a.fQ)(Kt.LoadPaymentMethodsFailed,e))})})}loadPaymentMethod(e,t){return n=>w.c.create(r=>{var i;const o=null===(i=n.getState().cart.getCart())||void 0===i?void 0:i.id,s=o?Object.assign(Object.assign({},null==t?void 0:t.params),{cartId:o}):Object.assign({},null==t?void 0:t.params);r.next((0,a.VP)(Kt.LoadPaymentMethodRequested,void 0,{methodId:e})),this._requestSender.loadPaymentMethod(e,Object.assign(Object.assign({},t),{params:s})).then(t=>{r.next((0,a.VP)(Kt.LoadPaymentMethodSucceeded,t.body,{methodId:e})),r.complete()}).catch(t=>{r.error((0,a.fQ)(Kt.LoadPaymentMethodFailed,t,{methodId:e}))})})}}!function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);o>3&&s&&Object.defineProperty(t,n,s)}([K],Xt.prototype,\"loadPaymentMethod\",null);class en{constructor(e){this._requestSender=e}loadPaymentMethods({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/payments\",{timeout:e,headers:Object.assign({Accept:R.JsonV1,\"X-API-INTERNAL\":ee},_),params:t})}loadPaymentMethod(e,{timeout:t,params:n}={}){const r=`/api/storefront/payments/${e}`;return this._requestSender.get(r,{timeout:t,headers:Object.assign({Accept:R.JsonV1,\"X-API-INTERNAL\":ee},_),params:n})}}var tn,nn;class rn{constructor(e){this._requestSender=e}getB2BCompanyPaymentMethods(e,t,n,r){return i=this,o=void 0,a=function*(){return this._requestSender.get(`${n}/api/v2/companies/${e}/payments`,{timeout:null==r?void 0:r.timeout,credentials:!1,headers:{authToken:t,Authorization:`Bearer ${t}`}})},new((s=void 0)||(s=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function r(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof s?i:new s(function(e){e(i)})).then(n,r)}c((a=a.apply(i,o||[])).next())});var i,o,s,a}}class on extends O{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(e){e.ExecuteFailed=\"PAYMENT_STRATEGY_EXECUTE_FAILED\",e.ExecuteRequested=\"PAYMENT_STRATEGY_EXECUTE_REQUESTED\",e.ExecuteSucceeded=\"PAYMENT_STRATEGY_EXECUTE_SUCCEEDED\",e.FinalizeFailed=\"PAYMENT_STRATEGY_FINALIZE_FAILED\",e.FinalizeRequested=\"PAYMENT_STRATEGY_FINALIZE_REQUESTED\",e.FinalizeSucceeded=\"PAYMENT_STRATEGY_FINALIZE_SUCCEEDED\",e.InitializeFailed=\"PAYMENT_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"PAYMENT_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"PAYMENT_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"PAYMENT_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"PAYMENT_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"PAYMENT_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_FAILED\"}(tn||(tn={})),function(e){e.ADYENV2=\"adyenv2\",e.ADYENV2_GOOGLEPAY=\"googlepayadyenv2\",e.ADYENV3=\"adyenv3\",e.ADYENV3_GOOGLEPAY=\"googlepayadyenv3\",e.AFFIRM=\"affirm\",e.AFTERPAY=\"afterpay\",e.AUTHORIZENET_GOOGLE_PAY=\"googlepayauthorizenet\",e.AMAZONPAY=\"amazonpay\",e.APPLEPAY=\"applepay\",e.BLUESNAPV2=\"bluesnapv2\",e.BOLT=\"bolt\",e.CBA_MPGS=\"cba_mpgs\",e.CHECKOUTCOM=\"checkoutcom\",e.CHECKOUTCOM_APM=\"checkoutcomapm\",e.CHECKOUTCOM_FAWRY=\"checkoutcomfawry\",e.CHECKOUTCOM_SEPA=\"checkoutcomsepa\",e.CHECKOUTCOM_IDEAL=\"checkoutcomideal\",e.CREDIT_CARD=\"creditcard\",e.CHECKOUTCOM_GOOGLE_PAY=\"googlepaycheckoutcom\",e.CLEARPAY=\"clearpay\",e.CONVERGE=\"converge\",e.CYBERSOURCE=\"cybersource\",e.CYBERSOURCEV2=\"cybersourcev2\",e.BNZ=\"bnz\",e.BNZ_GOOGLEPAY=\"googlepaybnz\",e.CYBERSOURCEV2_GOOGLE_PAY=\"googlepaycybersourcev2\",e.HUMM=\"humm\",e.KLARNA=\"klarna\",e.KLARNAV2=\"klarnav2\",e.LEGACY=\"legacy\",e.MOLLIE=\"mollie\",e.MONERIS=\"moneris\",e.NO_PAYMENT_DATA_REQUIRED=\"nopaymentdatarequired\",e.OFFLINE=\"offline\",e.OFFSITE=\"offsite\",e.ORBITAL_GOOGLE_PAY=\"googlepayorbital\",e.PAYPAL_EXPRESS=\"paypalexpress\",e.PAYPAL_EXPRESS_CREDIT=\"paypalexpresscredit\",e.PAYPAL_COMMERCE=\"paypalcommerce\",e.PAYPAL_COMMERCE_CREDIT=\"paypalcommercecredit\",e.PAYPAL_COMMERCE_CREDIT_CARD=\"paypalcommercecreditcards\",e.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=\"paypalcommercealternativemethods\",e.PAYPAL_COMMERCE_VENMO=\"paypalcommercevenmo\",e.PPSDK=\"PAYMENT_TYPE_SDK\",e.QUADPAY=\"quadpay\",e.SAGE_PAY=\"sagepay\",e.SQUARE=\"squarev2\",e.STRIPEV3=\"stripev3\",e.STRIPE_UPE=\"stripeupe\",e.STRIPE_UPE_GOOGLE_PAY=\"googlepaystripeupe\",e.BRAINTREE=\"braintree\",e.BRAINTREE_PAYPAL=\"braintreepaypal\",e.BRAINTREE_VENMO=\"braintreevenmo\",e.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",e.BRAINTREE_VISA_CHECKOUT=\"braintreevisacheckout\",e.BRAINTREE_GOOGLE_PAY=\"googlepaybraintree\",e.WORLDPAYACCESS=\"worldpayaccess\",e.WORLDPAYACCESS_GOOGLE_PAY=\"googlepayworldpayaccess\",e.STRIPE_GOOGLE_PAY=\"googlepaystripe\",e.SEZZLE=\"sezzle\",e.ZIP=\"zip\"}(nn||(nn={}));const sn=nn;class an{widgetInteraction(e,t){const n={methodId:t&&t.methodId};return(0,c.x)((0,u.of)((0,a.VP)(tn.WidgetInteractionStarted,void 0,n)),(0,d.v)(()=>e().then(()=>(0,a.VP)(tn.WidgetInteractionFinished,void 0,n)))).pipe((0,l.W)(e=>y(tn.WidgetInteractionFailed,e,n)))}}class cn{constructor(e,t,n,r,i){this._strategyRegistry=e,this._strategyRegistryV2=t,this._orderActionCreator=n,this._spamProtectionActionCreator=r,this._paymentIntegrationService=i,this._paymentStrategyWidgetActionCreator=new an}execute(e,t){const{payment:n={},useStoreCredit:r}=e,i={methodId:n.methodId};return o=>{const{checkout:s}=o.getState(),{shouldExecuteSpamCheck:h}=s.getCheckoutOrThrow();return(0,c.x)(h?this._spamProtectionActionCreator.verifyCheckoutSpamProtection()(o):(0,I.I)(),(0,u.of)((0,a.VP)(tn.ExecuteRequested,void 0,i)),(0,d.v)(()=>{const s=o.getState();let c;if(s.payment.isPaymentDataRequired(r)){const e=s.paymentMethods.getPaymentMethod(n.methodId,n.gatewayId);if(!e)throw new P(b.MissingPaymentMethod);c=this._getStrategy(e)}else c=this._strategyRegistryV2.get({id:sn.NO_PAYMENT_DATA_REQUIRED});return c.execute(e,Object.assign(Object.assign({},t),{methodId:n.methodId,gatewayId:n.gatewayId})).then(()=>(0,a.VP)(tn.ExecuteSucceeded,void 0,i))})).pipe((0,l.W)(e=>y(tn.ExecuteFailed,e,i)))}}finalize(e){const{integrations:t}=null!=e?e:{};return n=>(0,c.x)((0,u.of)((0,a.VP)(tn.FinalizeRequested)),this._loadOrderPaymentsIfNeeded(n,e),(0,d.v)(()=>{return r=this,i=void 0,s=function*(){const r=n.getState(),{providerId:i=\"\",gatewayId:o=\"\"}=r.payment.getPaymentId()||{},s=r.paymentMethods.getPaymentMethod(i,o);if(!s)throw new on;let c;we(this._strategyRegistryV2,null!=t?t:[],this._paymentIntegrationService);try{c=this._getStrategy(s)}catch(e){throw new on}return yield c.finalize(Object.assign(Object.assign({},e),{methodId:s.id,gatewayId:s.gateway})),(0,a.VP)(tn.FinalizeSucceeded,void 0,{methodId:s.id})},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function a(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o(function(e){e(r)})).then(n,a)}c((s=s.apply(r,i||[])).next())});var r,i,o,s})).pipe((0,l.W)(e=>{const t=n.getState().payment.getPaymentId();return y(tn.FinalizeFailed,e,{methodId:t&&t.providerId})}))}initialize(e){const{methodId:t,gatewayId:n,integrations:r}=e;return i=>(0,d.v)(()=>{const o=i.getState(),s=o.paymentMethods.getPaymentMethod(t,n);if(!s)throw new P(b.MissingPaymentMethod);if(t&&o.paymentStrategies.isInitialized({methodId:t,gatewayId:n}))return(0,I.I)();we(this._strategyRegistryV2,null!=r?r:[],this._paymentIntegrationService);const d=this._getStrategy(s).initialize(Object.assign(Object.assign({},e),{methodId:t,gatewayId:n}));return(0,c.x)((0,u.of)((0,a.VP)(tn.InitializeRequested,void 0,{methodId:t,gatewayId:n})),d.then(()=>(0,a.VP)(tn.InitializeSucceeded,void 0,{methodId:t,gatewayId:n})))}).pipe((0,l.W)(e=>y(tn.InitializeFailed,e,{methodId:t,gatewayId:n})))}deinitialize(e){const{methodId:t,gatewayId:n}=e;return r=>(0,d.v)(()=>{const i=r.getState(),o=i.paymentMethods.getPaymentMethod(t,n);if(!o)throw new P(b.MissingPaymentMethod);if(t&&!i.paymentStrategies.isInitialized({methodId:t,gatewayId:n}))return(0,I.I)();const s=this._getStrategy(o).deinitialize(Object.assign(Object.assign({},e),{methodId:t,gatewayId:n}));return(0,c.x)((0,u.of)((0,a.VP)(tn.DeinitializeRequested,void 0,{methodId:t,gatewayId:n})),s.then(()=>(0,a.VP)(tn.DeinitializeSucceeded,void 0,{methodId:t,gatewayId:n})))}).pipe((0,l.W)(e=>y(tn.DeinitializeFailed,e,{methodId:t,gatewayId:n})))}widgetInteraction(e,t){return this._paymentStrategyWidgetActionCreator.widgetInteraction(e,t)}_getStrategy(e){let t;try{t=this._strategyRegistry.getByMethod(e)}catch(n){try{t=this._strategyRegistryV2.get({id:e.id,gateway:e.gateway,type:e.type})}catch(t){throw V().error(`[PaymentStrategyActionCreator] Unable to resolve V2 strategy for id: ${e.id}, gateway: ${e.gateway}, type: ${e.type}`),t}}return t}_loadOrderPaymentsIfNeeded(e,t){const n=e.getState().checkout.getCheckout();return n&&n.orderId?this._orderActionCreator.loadOrderPayments(n.orderId,t):(0,I.I)()}}var un=n(8686);class dn{isEqual(e,t){return(0,E.isEqual)(this._normalize(e),this._normalize(t))}_normalize(e){return{cartAmount:e.cartAmount,currency:e.currency,id:e.id,lineItems:{digitalItems:e.lineItems.digitalItems.slice().sort((e,t)=>`${e.productId}${e.variantId}`.localeCompare(`${t.productId}${t.variantId}`)).map(e=>({extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId})),giftCertificates:e.lineItems.giftCertificates.slice().sort((e,t)=>`${e.id}`.localeCompare(`${t.id}`)).map(e=>({amount:e.amount,recipient:e.recipient})),physicalItems:e.lineItems.physicalItems.slice().sort((e,t)=>`${e.productId}${e.variantId}`.localeCompare(`${t.productId}${t.variantId}`)).map(e=>({extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId,giftWrapping:e.giftWrapping}))}}}}class ln extends O{constructor(e,t){super(\"An update to your shopping cart has been detected and your available shipping costs have been updated.\"),this.name=\"CartChangedError\",this.type=\"cart_changed\",this.data={previous:e,updated:t}}}class hn{constructor(e){this._checkoutRequestSender=e}validate(e,t){if(!e)throw new P(b.MissingCheckout);return this._checkoutRequestSender.loadCheckout(e.id,t).then(t=>{const n=new dn;if(!(e.outstandingBalance===t.body.outstandingBalance&&this._compareCoupons(e.coupons,t.body.coupons)&&this._compareGiftCertificates(e.giftCertificates,t.body.giftCertificates)&&n.isEqual(e.cart,t.body.cart)))throw new ln(this._getComparableCheckout(e),this._getComparableCheckout(t.body))})}_compareCoupons(e,t){return(0,E.isEqual)((0,E.map)(e,\"code\"),(0,E.map)(t,\"code\"))}_compareGiftCertificates(e,t){return(0,E.isEqual)((0,E.map)(e,\"code\"),(0,E.map)(t,\"code\"))}_getComparableCheckout(e){const{cart:t,coupons:n,giftCertificates:r,outstandingBalance:i}=e;return{cart:{cartAmount:t.cartAmount,currency:t.currency,lineItems:t.lineItems},coupons:n,giftCertificates:r,outstandingBalance:i}}}var pn=n(7576);class fn{constructor(e){this._namespace=e}getItem(e){const t=pn.Ay.getItem(this.withNamespace(e));if(null===t)return null;try{return JSON.parse(t)}catch(t){return this.removeItem(this.withNamespace(e)),null}}getItemOnce(e){const t=this.getItem(e);return this.removeItem(e),t}setItem(e,t){return pn.Ay.setItem(this.withNamespace(e),JSON.stringify(t))}removeItem(e){return pn.Ay.removeItem(this.withNamespace(e))}withNamespace(e){return`${this._namespace}.${e}`}}class mn extends O{constructor(){super(\"Please complete our human verification challenge and try again.\"),this.name=\"CardingProtectionChallengeNotCompletedError\",this.type=\"carding_protection_challenge_not_completed\"}}class yn extends O{constructor(){super(\"We were not able to verify that you are not a robot. Please try again.\"),this.name=\"CardingProtectionFailedError\",this.type=\"carding_protection_failed\"}}var gn,_n,vn=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class bn{constructor(e){this._googleRecaptcha=e}handle(e,t){return vn(this,void 0,void 0,function*(){return\"string\"==typeof e?this.handleWithRecaptchaSitekey(e,t):this.handleWithPaymentHumanVerificationRequestError(e)})}handleWithPaymentHumanVerificationRequestError(e){return vn(this,void 0,void 0,function*(){if(!this._isPaymentHumanVerificationRequest(e))throw e;return yield this._initialize(e.body.additional_action_required.data.key),this._performRecaptcha()})}handleWithRecaptchaSitekey(e,t){return vn(this,void 0,void 0,function*(){if(\"recaptcha_v2\"!==e)throw Error(\"Human verification method is not supported.\");if(!t)throw Error(\"Recaptcha site key is missing.\");return yield this._initialize(t),this._performRecaptcha()})}_performRecaptcha(){return this._googleRecaptcha.execute().pipe((0,Me.s)(1)).pipe((0,ge.n)(({error:e,token:t})=>vn(this,void 0,void 0,function*(){if(e instanceof Ne)throw new mn;if(e||!t)throw new yn;return{type:\"recaptcha_v2_verification\",data:{human_verification_token:t}}}))).toPromise()}_initialize(e){const t=\"cardingProtectionContainer\";let n=document.getElementById(t);return n&&n.parentNode&&n.parentNode.removeChild(n),n=document.createElement(\"div\"),n.setAttribute(\"id\",t),document.body.appendChild(n),this._googleRecaptcha.load(t,e)}_isPaymentHumanVerificationRequest(e){const{additional_action_required:t,status:n}=e.body||{};return\"additional_action_required\"===n&&t&&\"recaptcha_v2_verification\"===t.type}}function Sn(e,t){const{body:n}=e,{errors:r=[]}=n;return new J(e,{message:En(r)||t,errors:r})}function En(e){if(Array.isArray(e))return e.reduce((e,t)=>t&&t.message?[...e,t.message]:e,[]).join(\" \")}class Cn extends O{constructor(e){super(e||\"Unable to proceed due to invalid configuration provided for the hosted payment form.\"),this.name=\"InvalidHostedFormConfigError\",this.type=\"invalid_hosted_form_config\"}}class wn extends O{constructor(e){super(e||\"Unable to proceed due to an unknown error with the hosted payment form.\"),this.name=\"InvalidHostedFormError\",this.type=\"invalid_hosted_form\"}}class In extends O{constructor(e){super([\"Unable to proceed due to invalid user input values\",...(0,E.flatMap)((0,E.values)(e),e=>(0,E.map)(e,({message:e})=>e))].join(\". \")),this.errors=e,this.name=\"InvalidHostedFormValueError\",this.type=\"invalid_hosted_form_value\"}}!function(e){e.AttachRequested=\"HOSTED_FIELD:ATTACH_REQUESTED\",e.SubmitRequested=\"HOSTED_FIELD:SUBMITTED_REQUESTED\",e.ValidateRequested=\"HOSTED_FIELD:VALIDATE_REQUESTED\",e.StoredCardRequested=\"HOSTED_FIELD:STORED_CARD_REQUESTED\"}(gn||(gn={})),function(e){e.AttachSucceeded=\"HOSTED_INPUT:ATTACH_SUCCEEDED\",e.AttachFailed=\"HOSTED_INPUT:ATTACH_FAILED\",e.BinChanged=\"HOSTED_INPUT:BIN_CHANGED\",e.Blurred=\"HOSTED_INPUT:BLURRED\",e.Changed=\"HOSTED_INPUT:CHANGED\",e.CardTypeChanged=\"HOSTED_INPUT:CARD_TYPE_CHANGED\",e.Entered=\"HOSTED_INPUT:ENTERED\",e.Focused=\"HOSTED_INPUT:FOCUSED\",e.SubmitSucceeded=\"HOSTED_INPUT:SUBMIT_SUCCEEDED\",e.SubmitFailed=\"HOSTED_INPUT:SUBMIT_FAILED\",e.Validated=\"HOSTED_INPUT:VALIDATED\",e.StoredCardSucceeded=\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",e.StoredCardFailed=\"HOSTED_INPUT:STORED_CARD_FAILED\"}(_n||(_n={}));var On=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class Pn{constructor(e,t,n,r,i,o,s,a,c,u){this._type=e,this._containerId=t,this._placeholder=n,this._accessibilityLabel=r,this._styles=i,this._eventPoster=o,this._eventListener=s,this._detachmentObserver=a,this._checkoutId=c,this._cardInstrument=u,this._iframe=document.createElement(\"iframe\");const d=this._checkoutId?`/checkout/payment/hosted-field?version=1.916.1&checkoutId=${this._checkoutId}`:\"/checkout/payment/hosted-field?version=1.916.1\";this._iframe.src=d,this._iframe.style.border=\"none\",this._iframe.style.height=\"100%\",this._iframe.style.overflow=\"hidden\",this._iframe.style.width=\"100%\"}getType(){return this._type}attach(){return On(this,void 0,void 0,function*(){const e=document.getElementById(this._containerId);if(!e)throw new Cn(\"Unable to proceed because the provided container ID is not valid.\");e.appendChild(this._iframe),this._eventListener.listen();const t=(0,et.R)(this._iframe,\"load\").pipe((0,ge.n)(({target:e})=>On(this,void 0,void 0,function*(){const t=e&&e.contentWindow;if(!t)throw new Error(\"The content window of the iframe cannot be accessed.\");this._eventPoster.setTarget(t),yield this._eventPoster.post({type:gn.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,cardInstrument:this._cardInstrument,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:_n.AttachSucceeded,errorType:_n.AttachFailed})})),(0,Me.s)(1)).toPromise();yield this._detachmentObserver.ensurePresence([this._iframe],t)})}detach(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())}submitForm(e,t){return On(this,void 0,void 0,function*(){try{const n=this._eventPoster.post({type:gn.SubmitRequested,payload:{fields:e,data:t}},{successType:_n.SubmitSucceeded,errorType:_n.SubmitFailed});return yield this._detachmentObserver.ensurePresence([this._iframe],n)}catch(e){if(this._isSubmitErrorEvent(e)){if(\"hosted_form_error\"===e.payload.error.code)throw new wn(e.payload.error.message);if(e.payload.response)throw Sn(e.payload.response);throw new Error(e.payload.error.message)}throw e}})}submitStoredCardForm(e,t){return On(this,void 0,void 0,function*(){const n=this._eventPoster.post({type:gn.StoredCardRequested,payload:{fields:e,data:t}},{successType:_n.StoredCardSucceeded,errorType:_n.StoredCardFailed});return this._detachmentObserver.ensurePresence([this._iframe],n)})}validateForm(){return On(this,void 0,void 0,function*(){const e=this._eventPoster.post({type:gn.ValidateRequested},{successType:_n.Validated}),{payload:t}=yield this._detachmentObserver.ensurePresence([this._iframe],e);if(!t.isValid)throw new In(t.errors)})}_getFontUrls(){const e=\"fonts.googleapis.com\",t=document.querySelectorAll(`link[href*='${e}'][rel='stylesheet']`);return Array.prototype.slice.call(t).filter(t=>Ze(t.href).hostname===e).filter(e=>(0,E.values)(this._styles).map(e=>e&&e.fontFamily).filter(e=>\"string\"==typeof e).some(t=>t.split(/,\\s/).some(t=>-1!==e.href.indexOf(t.replace(\" \",\"+\"))))).map(e=>e.href)}_isSubmitErrorEvent(e){return e.type===_n.SubmitFailed}}var An,Tn=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class kn{constructor(e,t,n,r,i){this._fields=e,this._eventListener=t,this._payloadTransformer=n,this._eventCallbacks=r,this._paymentHumanVerificationHandler=i,this._handleEnter=({payload:e})=>Tn(this,void 0,void 0,function*(){try{yield this.validate()}catch(e){if(e instanceof Error&&\"InvalidHostedFormValueError\"!==e.name)throw e}const{onEnter:t=E.noop}=this._eventCallbacks;t(e)});const{onBlur:o=E.noop,onCardTypeChange:s=E.noop,onFocus:a=E.noop,onValidate:c=E.noop}=this._eventCallbacks;this._eventListener.addListener(_n.Blurred,({payload:e})=>o(e)),this._eventListener.addListener(_n.CardTypeChanged,({payload:e})=>s(e)),this._eventListener.addListener(_n.Focused,({payload:e})=>a(e)),this._eventListener.addListener(_n.Validated,({payload:e})=>c(e)),this._eventListener.addListener(_n.Entered,this._handleEnter),this._eventListener.addListener(_n.CardTypeChanged,({payload:e})=>this._cardType=e.cardType),this._eventListener.addListener(_n.BinChanged,({payload:e})=>this._bin=e.bin)}getBin(){return this._bin}getCardType(){return this._cardType}attach(){return Tn(this,void 0,void 0,function*(){this._eventListener.listen();const e=this._getFirstField(),t=(0,E.without)(this._fields,e);yield e.attach(),yield Promise.all(t.map(e=>e.attach()))})}detach(){this._eventListener.stopListen(),this._fields.forEach(e=>{e.detach()})}submit(e,t){return Tn(this,void 0,void 0,function*(){try{return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),this._payloadTransformer.transform(e,t))}catch(t){const n=yield this._paymentHumanVerificationHandler.handle(t);return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),this._payloadTransformer.transform(e,n))}})}submitStoredCard(e){return Tn(this,void 0,void 0,function*(){return this._getFirstField().submitStoredCardForm(e.fields,e.data)})}validate(){return Tn(this,void 0,void 0,function*(){return this._getFirstField().validateForm()})}_getFirstField(){const e=this._fields[0];if(!e)throw new Cn(\"Unable to proceed because the payment form has no field defined.\");return e}}function xn(e){return Boolean(e.instrumentId)}class Rn{constructor(e){this._store=e}transform(e,t){const n=this._store.getState(),r=n.checkout.getCheckout(),i=n.config.getConfig(),o=n.instruments.getInstrumentsMeta(),s=n.order.getOrder(),a=n.order.getOrderMeta(),c=(0,E.omit)(e.paymentData,\"ccExpiry\",\"ccName\",\"ccNumber\",\"ccCvv\");let u=n.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId);\"worldpayaccess\"===(null==u?void 0:u.gateway)&&\"credit_card\"===(null==u?void 0:u.id)&&(u=Object.assign(Object.assign({},u),{id:\"worldpayaccess\",method:\"credit-card\"}));const d=n.paymentMethods.getPaymentMethodsMeta(),l=o&&c&&xn(c)?`${n.payment.getPaymentToken()}, ${o.vaultAccessToken}`:n.payment.getPaymentToken();if(!l)throw new P(b.MissingPaymentToken);return{additionalAction:t,authToken:l,checkout:r,config:i,order:s,orderMeta:a,payment:c,paymentMethod:u,paymentMethodMeta:d}}}class Mn{constructor(e){this._store=e}create(e,t,n){const r=Object.keys(t.fields).reduce((r,i)=>{const o=t.fields[i];return o?[...r,new Pn(i,o.containerId,o.placeholder||\"\",o.accessibilityLabel||\"\",t.styles||{},new it(e),new Pt(e),new ut(new Fe),n,\"instrumentId\"in o?this._getCardInstrument(o.instrumentId):void 0)]:r},[]);return new kn(r,new Pt(e),new Rn(this._store),(0,E.pick)(t,\"onBlur\",\"onEnter\",\"onFocus\",\"onCardTypeChange\",\"onValidate\"),new bn($e((0,s.Hb)())))}_getCardInstrument(e){const{instruments:{getCardInstrument:t}}=this._store.getState(),n=t(e);if(!n)throw new P(b.MissingPaymentInstrument);return n}}!function(e){e.SubmitPaymentRequested=\"SUBMIT_PAYMENT_REQUESTED\",e.SubmitPaymentSucceeded=\"SUBMIT_PAYMENT_SUCCEEDED\",e.SubmitPaymentFailed=\"SUBMIT_PAYMENT_FAILED\",e.InitializeOffsitePaymentRequested=\"INITIALIZE_OFFSITE_PAYMENT_REQUESTED\",e.InitializeOffsitePaymentSucceeded=\"INITIALIZE_OFFSITE_PAYMENT_SUCCEEDED\",e.InitializeOffsitePaymentFailed=\"INITIALIZE_OFFSITE_PAYMENT_FAILED\"}(An||(An={}));class Nn{constructor(e,t,n,r){this._paymentRequestSender=e,this._orderActionCreator=t,this._paymentRequestTransformer=n,this._paymentHumanVerificationHandler=r,this.initializeOffsitePayment=({methodId:e,gatewayId:t,instrumentId:n,target:r,promise:i,shouldSaveInstrument:o,shouldSetAsDefaultInstrument:s})=>d=>{let h;n?h={formattedPayload:{bigpay_token:n}}:o&&(h={formattedPayload:{vault_payment_instrument:o,set_as_default_stored_instrument:s||null}});const p=this._paymentRequestTransformer.transform({gatewayId:t,methodId:e,paymentData:h},d.getState());return(0,c.x)((0,u.of)((0,a.VP)(An.InitializeOffsitePaymentRequested)),Promise.race([this._paymentRequestSender.initializeOffsitePayment(p,r),i].filter(Boolean)).then(()=>(0,a.VP)(An.InitializeOffsitePaymentSucceeded))).pipe((0,l.W)(e=>y(An.InitializeOffsitePaymentFailed,e)))}}submitPayment(e){return t=>(0,c.x)((0,u.of)((0,a.VP)(An.SubmitPaymentRequested)),(0,d.v)(()=>{return n=this,r=void 0,o=function*(){try{return yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(e,t.getState()))}catch(n){const r=yield this._paymentHumanVerificationHandler.handle(n);return yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(Object.assign(Object.assign({},e),{additionalAction:r}),t.getState()))}},new((i=void 0)||(i=Promise))(function(e,t){function s(e){try{c(o.next(e))}catch(e){t(e)}}function a(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}).pipe((0,ge.n)(({body:e})=>(0,c.x)(this._orderActionCreator.loadCurrentOrder()(t),(0,u.of)((0,a.VP)(An.SubmitPaymentSucceeded,e)))))).pipe((0,l.W)(e=>y(An.SubmitPaymentFailed,e)))}}class Ln{constructor(e){this._client=e}submitPayment(e){return new Promise((t,n)=>{this._client.submitPayment(e,(e,r)=>{e?n(this._transformResponse(e)):t(this._transformResponse(r))})})}initializeOffsitePayment(e,t){return new Promise(()=>{this._client.initializeOffsitePayment(e,null,t)})}_transformResponse(e){return{headers:e.headers,body:e.data,status:e.status,statusText:e.statusText}}}function Dn(e,t){let n;return function(e){return void 0!==e.id}(e)?n=e.id:t&&t.length&&(n=t[0].id),{id:n,firstName:e.firstName,lastName:e.lastName,company:e.company,addressLine1:e.address1,addressLine2:e.address2,city:e.city,province:e.stateOrProvince,provinceCode:e.stateOrProvinceCode,postCode:e.postalCode,country:e.country,countryCode:e.countryCode,phone:e.phone,customFields:e.customFields}}class jn{constructor(e){this._decimalPlaces=e}toInteger(e){return Math.round(e*Math.pow(10,this._decimalPlaces))}}const Fn=[\"per_item_discount\",\"percentage_discount\",\"per_total_discount\",\"shipping_discount\",\"free_shipping\"];function Un(e){return{code:e.code,discount:e.displayName,discountType:Fn.indexOf(e.couponType)}}function Bn(e){return{code:e.code,discountedAmount:e.used,remainingBalance:e.remaining,giftCertificate:{balance:e.balance,code:e.code,purchaseDate:e.purchaseDate}}}function zn(e){const t=[];return(e||[]).forEach(e=>{(e.banners||[]).forEach(e=>{t.push({placeholders:[],discountType:null,message:\"\",messageHtml:e.text})})}),t}function qn(e,t,n=\"id\"){return Object.keys(e).reduce((r,i)=>[...r,...e[i].map(e=>\"giftCertificates\"===i?function(e,t){const n=new jn(t);return{id:e.id,imageUrl:\"\",name:e.name,amount:e.amount,amountAfterDiscount:e.amount,discount:0,integerAmount:n.toInteger(e.amount),integerAmountAfterDiscount:n.toInteger(e.amount),integerUnitPrice:n.toInteger(e.amount),integerUnitPriceAfterDiscount:n.toInteger(e.amount),integerDiscount:0,quantity:1,sender:e.sender,recipient:e.recipient,type:\"ItemGiftCertificateEntity\",attributes:[],variantId:null}}(e,t):function(e,t,n,r=\"id\"){const i=new jn(n);return{id:e[r],imageUrl:e.imageUrl,amount:e.extendedListPrice,amountAfterDiscount:e.extendedSalePrice,discount:e.discountAmount,integerAmount:i.toInteger(e.extendedListPrice),integerAmountAfterDiscount:i.toInteger(e.extendedSalePrice),integerDiscount:i.toInteger(e.discountAmount),integerUnitPrice:i.toInteger(e.listPrice),integerUnitPriceAfterDiscount:i.toInteger(e.salePrice),downloadsPageUrl:e.downloadPageUrl,name:e.name,quantity:e.quantity,brand:e.brand,sku:e.sku,categoryNames:e.categoryNames,variantId:e.variantId,productId:e.productId,attributes:(e.options||[]).map(e=>({name:e.name,value:e.value})),addedByPromotion:e.addedByPromotion,type:t}}(e,function(e){switch(e){case\"physicalItems\":return\"ItemPhysicalEntity\";case\"digitalItems\":return\"ItemDigitalEntity\";case\"giftCertificates\":return\"ItemGiftCertificateEntity\";default:return\"\"}}(i),t,n))],[])}function Hn(e){const t=e.cart.currency.decimalPlaces,n=new jn(t);return{id:e.cart.id,items:qn(e.cart.lineItems,t),currency:e.cart.currency.code,coupon:{discountedAmount:(0,E.reduce)(e.cart.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.cart.coupons.map(Un)},discount:{amount:e.cart.discountAmount,integerAmount:n.toInteger(e.cart.discountAmount)},discountNotifications:zn(e.promotions),giftCertificate:{totalDiscountedAmount:(0,E.reduce)(e.giftCertificates,(e,t)=>e+t.used,0),appliedGiftCertificates:(0,E.keyBy)(e.giftCertificates.map(Bn),\"code\")},shipping:{amount:e.shippingCostTotal,integerAmount:n.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:n.toInteger(e.shippingCostBeforeDiscount),required:(0,E.some)(e.cart.lineItems.physicalItems,e=>e.isShippingRequired)},subtotal:{amount:e.subtotal,integerAmount:n.toInteger(e.subtotal)},storeCredit:{amount:e.customer?e.customer.storeCredit:0},taxSubtotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:n.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.grandTotal,integerAmount:n.toInteger(e.grandTotal)}}}var Vn;!function(e){e.APPLEPAY=\"applepay\",e.AMAZON_PAY_V2=\"amazonpay\",e.BRAINTREE_PAYPAL=\"braintreepaypal\",e.BRAINTREE_VENMO=\"braintreevenmo\",e.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",e.GOOGLEPAY_ADYENV2=\"googlepayadyenv2\",e.GOOGLEPAY_ADYENV3=\"googlepayadyenv3\",e.GOOGLEPAY_AUTHORIZENET=\"googlepayauthorizenet\",e.GOOGLEPAY_BNZ=\"googlepaybnz\",e.GOOGLEPAY_BRAINTREE=\"googlepaybraintree\",e.GOOGLEPAY_CHECKOUTCOM=\"googlepaycheckoutcom\",e.GOOGLEPAY_CYBERSOURCEV2=\"googlepaycybersourcev2\",e.GOOGLEPAY_ORBITAL=\"googlepayorbital\",e.GOOGLEPAY_STRIPE=\"googlepaystripe\",e.GOOGLEPAY_STRIPEUPE=\"googlepaystripeupe\",e.GOOGLEPAY_WORLDPAYACCESS=\"googlepayworldpayaccess\",e.PAYPALEXPRESS=\"paypalexpress\"}(Vn||(Vn={}));const Gn=Vn;function Yn(e,t){const n=e.firstName||t.firstName||\"\",r=e.lastName||t.lastName||\"\";return{addresses:(e.addresses||[]).map(e=>Dn(e)),customerId:e.id,isGuest:e.isGuest,storeCredit:e.storeCredit,email:e.email||t.email||\"\",firstName:n,lastName:r,name:e.fullName||[n,r].join(\" \"),customerGroupName:e.customerGroup&&e.customerGroup.name}}class Wn{format(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\")),r=t.slice(0,2),i=4===n.length?n.slice(-2):n?n.slice(0,2):t.slice(2);return e.length<2?t:e.length>3&&!i?r:`${r} / ${i}`}toObject(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\"));return/^\\d+$/.test(t)&&/^\\d+$/.test(n)?{month:1===t.length?`0${t}`:t.slice(0,2),year:2===n.length?`20${n}`:n.slice(0,4)}:{month:\"\",year:\"\"}}}var $n=n(2437);class Kn{format(e){const{card:t}=(0,$n.number)(e);if(!t)return e;const n=(0,E.max)((0,$n.creditCardType)(e).map(e=>(0,E.max)(e.lengths))),r=this.unformat(e).slice(0,n);return t.gaps.filter(e=>r.length>e).reduce((e,t,n)=>[e.slice(0,t+n),e.slice(t+n)].join(\" \"),r)}unformat(e){const{card:t}=(0,$n.number)(e);return t?e.replace(new RegExp(\" \",\"g\"),\"\"):e}}function Qn(e,t={}){const n=e.currency.decimalPlaces,r=new jn(n);return{id:e.orderId,items:qn(e.lineItems,e.currency.decimalPlaces,\"productId\"),orderId:e.orderId,currency:e.currency.code,customerCanBeCreated:e.customerCanBeCreated,payment:Xn(e.payments,t.payment),subtotal:{amount:e.baseAmount,integerAmount:r.toInteger(e.baseAmount)},coupon:{discountedAmount:(0,E.reduce)(e.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.coupons.map(Un)},discount:{amount:e.discountAmount,integerAmount:r.toInteger(e.discountAmount)},token:t.orderToken,callbackUrl:t.callbackUrl,discountNotifications:[],giftCertificate:Jn(e.payments),socialData:tr(e),status:e.status,hasDigitalItems:e.hasDigitalItems,isDownloadable:e.isDownloadable,isComplete:e.isComplete,shipping:{amount:e.shippingCostTotal,integerAmount:r.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:r.toInteger(e.shippingCostBeforeDiscount)},storeCredit:{amount:Zn(e.payments)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:r.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:r.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.orderAmount,integerAmount:e.orderAmountAsInteger}}}function Zn(e){const t=(0,E.find)(e,{providerId:\"storecredit\"});return t?t.amount:0}function Jn(e){const t=(0,E.filter)(e,{providerId:\"giftcertificate\"});return{totalDiscountedAmount:(0,E.reduce)(t,(e,t)=>t.amount+e,0),appliedGiftCertificates:(0,E.keyBy)(t.map(e=>({code:e.detail.code,discountedAmount:e.amount,remainingBalance:e.detail.remaining,giftCertificate:{balance:e.amount+e.detail.remaining,code:e.detail.code,purchaseDate:\"\"}})),\"code\")}}function Xn(e,t={}){const n=(0,E.find)(e,er);return n?{id:n.providerId,status:(r=n.detail.step,`PAYMENT_STATUS_${r}`),helpText:n.detail.instructions,returnUrl:t.returnUrl}:{};var r}function er(e){return\"giftcertificate\"!==e.providerId&&\"storecredit\"!==e.providerId}function tr(e){const t={};return[...e.lineItems.physicalItems,...e.lineItems.digitalItems].forEach(e=>{var n;t[e.id]=(n=e,[\"fb\",\"tw\",\"gp\"].reduce((e,t)=>{const r=n.socialMedia&&(0,E.find)(n.socialMedia,e=>e.code===t);return r?(e[t]={name:n.name,description:n.name,image:n.imageUrl,url:r.link,shareText:r.text,sharingLink:r.link,channelName:r.channel,channelCode:r.code},e):e},{}))}),t}function nr(e,t){return{description:e.description,module:e.type,price:e.cost,id:e.id,selected:t,isRecommended:e.isRecommended,imageUrl:e.imageUrl,transitTime:e.transitTime}}class rr{constructor(){this._cardExpiryFormatter=new Wn,this._cardNumberFormatter=new Kn}transform(e,t){const n=t.billingAddress.getBillingAddress(),r=t.checkout.getCheckout(),i=t.customer.getCustomer(),o=t.order.getOrder(),s=t.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId),a=this._mapShippingAddress(t,s),c=t.consignments.getConsignments(),u=t.consignments.getShippingOption(),d=t.config.getStoreConfig(),l=t.config.getContextConfig(),h=t.instruments.getInstrumentsMeta(),p=t.paymentMethods.getPaymentMethodsMeta(),f=t.order.getOrderMeta(),m=i&&n&&Yn(i,n),y=h&&e.paymentData&&(xn(e.paymentData)||function(e){const t=e.formattedPayload;return!!t&&(\"string\"==typeof t.bigpay_token||Boolean(t.bigpay_token&&t.bigpay_token.token))}(e.paymentData))?`${t.payment.getPaymentToken()}, ${h.vaultAccessToken}`:t.payment.getPaymentToken();if(!y)throw new P(b.MissingPaymentToken);return{additionalAction:e.additionalAction,authToken:y,customer:m,billingAddress:n&&Dn(n),shippingAddress:a&&Dn(a,c),shippingOption:u&&nr(u,!0),cart:r&&Hn(r),order:o&&Qn(o,f),orderMeta:f,payment:e.paymentData,paymentMethod:s&&this._transformPaymentMethod(s),quoteMeta:{request:Object.assign(Object.assign({},p),{geoCountryCode:l&&l.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:(0,E.pick)(d&&d.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}transformWithHostedFormData(e,t,n){const{additionalAction:r,authToken:i,checkout:o,config:s,order:a,orderMeta:c,payment:u={},paymentMethod:d,paymentMethodMeta:l}=t,h=o&&o.consignments[0],p=h&&h.shippingAddress,f=h&&h.selectedShippingOption;return{additionalAction:r,authToken:i,paymentMethod:d&&this._transformPaymentMethod(d),customer:a&&a.billingAddress&&o&&Yn(o.customer,a.billingAddress),billingAddress:a&&a.billingAddress&&Dn(a.billingAddress),shippingAddress:p&&o&&Dn(p,o.consignments),shippingOption:f&&nr(f,!0),cart:o&&Hn(o),order:a&&Qn(a,c),orderMeta:c,payment:this._transformHostedInputValues(e,u,n),quoteMeta:{request:Object.assign(Object.assign({},l),{geoCountryCode:s&&s.context.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:s&&(0,E.pick)(s.storeConfig.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}_transformPaymentMethod(e){if(\"multi-option\"===e.method&&!e.gateway)return Object.assign(Object.assign({},e),{gateway:e.id});if(e.initializationData&&e.initializationData.gateway)return Object.assign(Object.assign({},e),{id:e.initializationData.gateway});if(\"worldpayaccess\"===e.gateway){if(\"credit_card\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"credit-card\"});if(\"open_banking\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"open_banking\"})}return e.id===Gn.BRAINTREE_VENMO?Object.assign(Object.assign({},e),{id:Gn.BRAINTREE_PAYPAL}):e}_transformHostedInputValues(e,t,n){return\"instrumentId\"in t?Object.assign(Object.assign({},t),{ccCvv:e.cardCodeVerification,ccNumber:e.cardNumberVerification&&this._cardNumberFormatter.unformat(e.cardNumberVerification),hostedFormNonce:n}):Object.assign(Object.assign({},t),{ccCvv:e.cardCode,ccExpiry:this._cardExpiryFormatter.toObject(e.cardExpiry||\"\"),ccName:e.cardName||\"\",ccNumber:this._cardNumberFormatter.unformat(e.cardNumber||\"\"),hostedFormNonce:n})}_mapShippingAddress(e,t){var n,r,i,o;if(t){const s=null===(r=null===(n=t.initializationData)||void 0===n?void 0:n.bopis)||void 0===r?void 0:r.enabled,a=null===(o=null===(i=t.initializationData)||void 0===i?void 0:i.bopis)||void 0===o?void 0:o.requiredAddress,c=e.consignments.getConsignments(),u=null==c?void 0:c.every(e=>e.selectedPickupOption);if(s&&u&&\"none\"===a)return}return e.shippingAddress.getShippingAddress()}}const ir=\"PAYMENT_TYPE_HOSTED\",or=e=>{const{type:t,initializationStrategy:n}=e;return t===sn.PPSDK&&\"string\"==typeof(null==n?void 0:n.type)};class sr extends pe{getByMethod(e){if(!e)return this.get();const t=this._getToken(e),n=[e.gateway,e.id].filter(e=>null!=e).join(\"-\");return this.get(t,n)}_getToken(e){if(or(e))return sn.PPSDK;if(\"klarna\"===e.gateway)return sn.KLARNAV2;const t=e.gateway||e.id;if(this._hasFactoryForMethod(t))return t;if(\"PAYMENT_TYPE_OFFLINE\"===e.type)return sn.OFFLINE;throw new he(`'${t}' is not registered.`)}_hasFactoryForMethod(e){return this._hasFactory(e)}}const ar=\"ACKNOWLEDGE\",cr=\"FINALIZE\";class ur extends he{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}var dr=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n};class lr{constructor(e,t,n,r){this._store=e,this._orderActionCreator=t,this._paymentActionCreator=n,this._hostedFormFactory=r}execute(e,t){var n,r;return this._isHostedPaymentFormEnabled(null===(n=e.payment)||void 0===n?void 0:n.methodId,null===(r=e.payment)||void 0===r?void 0:r.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}finalize(e){return Promise.reject(new on)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve(this._store.getState());const t=e&&e.creditCard&&e.creditCard.form,{config:n}=this._store.getState(),{paymentSettings:{bigpayBaseUrl:r=\"\"}={}}=n.getStoreConfig()||{};if(!t)throw new he;const i=this._hostedFormFactory.create(r,t);return i.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=i,this._store.getState()))}deinitialize(e){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve(this._store.getState())}_executeWithoutHostedForm(e,t){const{payment:n}=e,r=dr(e,[\"payment\"]),i=n&&n.paymentData;if(!n||!i)throw new ur([\"payment.paymentData\"]);return this._store.dispatch(this._orderActionCreator.submitOrder(r,t)).then(()=>this._store.dispatch(this._paymentActionCreator.submitPayment(Object.assign(Object.assign({},n),{paymentData:i}))))}_executeWithHostedForm(e,t){const{payment:n}=e,r=dr(e,[\"payment\"]),i=this._hostedForm;if(!i)throw new Ve(Ue.PaymentNotInitialized);if(!n||!n.methodId)throw new ur([\"payment.methodId\"]);return i.validate().then(()=>this._store.dispatch(this._orderActionCreator.submitOrder(r,t))).then(()=>i.submit(n)).then(()=>this._store.dispatch(this._orderActionCreator.loadCurrentOrder()))}_isHostedPaymentFormEnabled(e,t){if(!e)return!1;const{paymentMethods:{getPaymentMethodOrThrow:n}}=this._store.getState();return!0===n(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(e){return!(0,E.values)(e&&e.creditCard&&e.creditCard.form.fields).every(E.isNil)}}class hr extends lr{constructor(e,t,n,r,i){super(e,t,n,r),this._formPoster=i}execute(e,t){return super.execute(e,t).catch(e=>e instanceof J&&(0,E.some)(e.body.errors,{code:\"three_d_secure_required\"})?new Promise(()=>{this._formPoster.postForm(e.body.three_ds_result.acs_url,{PaReq:e.body.three_ds_result.payer_auth_request,TermUrl:e.body.three_ds_result.callback_url,MD:e.body.three_ds_result.merchant_data})}):Promise.reject(e))}finalize(e){const t=this._store.getState(),n=t.order.getOrder();return n&&t.payment.getPaymentStatus()===cr?this._store.dispatch(this._orderActionCreator.finalizeOrder(n.orderId,e)):Promise.reject(new on)}}class pr extends O{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}var fr=n(2586);const mr=\"redirecting\";class yr{constructor(){this._isRedirecting=this.currentUrlHasRedirectingParam()}isRedirecting(){return this._isRedirecting}setRedirecting(e){e?this.setRedirectingParamOnUrl():this.removeRedirectingParamFromUrl(),this._isRedirecting=e}currentUrlHasRedirectingParam(){return mr in this.getCurrentUrl().query}getCurrentUrl(){return(0,fr.parseUrl)(window.location.href)}replaceCurrentUrl(e){window.history.replaceState(null,\"\",e)}setRedirectingParamOnUrl(){if(this.currentUrlHasRedirectingParam())return;const e=this.getCurrentUrl(),t=Object.assign(Object.assign({},e),{query:Object.assign(Object.assign({},e.query),{[mr]:\"true\"})});this.replaceCurrentUrl((0,fr.stringifyUrl)(t))}removeRedirectingParamFromUrl(){this.currentUrlHasRedirectingParam()&&this.replaceCurrentUrl((0,fr.exclude)(window.location.href,[mr]))}}const gr=(0,E.overSome)([e=>\"continue\"===(0,E.get)(e,\"type\")&&\"redirect\"===(0,E.get)(e,\"code\")&&(e=>{const t=(0,E.get)(e,\"form_fields\");return(0,E.isString)((0,E.get)(e,\"url\"))&&((0,E.isUndefined)(t)||(0,E.isObject)(t))})((0,E.get)(e,\"parameters\")),e=>\"continue\"===(0,E.get)(e,\"type\")&&\"resubmit_with_human_verification\"===(0,E.get)(e,\"code\")&&(e=>{const t=(0,E.get)(e,\"available_methods\");return(0,E.isArray)(t)})((0,E.get)(e,\"parameters\"))]);class _r{constructor(e,t){this._formPoster=e,this._humanVerificationHandler=t}handle(e,t){switch(e.code){case\"redirect\":return(({url:e,form_fields:t},n)=>{const r=new yr;return r.isRedirecting()?(r.setRedirecting(!1),Promise.reject(new pr)):(r.setRedirecting(!0),t?n.postForm(e,t):window.location.assign(e),new Promise(E.noop))})(e.parameters,this._formPoster);case\"resubmit_with_human_verification\":return(({available_methods:e},t,n)=>{return r=void 0,i=void 0,s=function*(){if(!n)throw new Error(\"PPSDK human verification callback function is missing.\");if(!t)throw new Error(\"PPSDK human verification handler is missing.\");if(0===e.length)throw Error(\"Human verification method is missing.\");const{id:r,parameters:i}=e[0],o=yield t.handle(r,i.key);return n(o)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function a(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o(function(e){e(r)})).then(n,a)}c((s=s.apply(r,i||[])).next())});var r,i,o,s})(e.parameters,this._humanVerificationHandler,null==t?void 0:t.humanVerification)}}}class vr{constructor(e){this._continueHandler=e}handle(e,t){const{body:n}=e;return(e=>\"success\"===(0,E.get)(e,\"type\"))(n)?Promise.resolve():(e=>gr(e))(n)?this._continueHandler.handle(n,null==t?void 0:t.continue):(e=>\"failure\"===(0,E.get)(e.body,\"type\")&&(0,E.isString)((0,E.get)(e.body,\"code\")))(e)?(e=>{return Promise.reject(new J((t=e,Object.assign(Object.assign({},t),{body:{errors:[{code:t.body.code}]}}))));var t})(e):((e=>{(0,E.get)(e.body,\"type\")})(e),(e=>Promise.reject(new J(e)))(e))}}const br=(e,t)=>new vr(new _r(e,t)),Sr=\"completed-payments\";class Er{constructor(e){this._browserStorage=e}isCompleted(e){return this.getCompletedPayments().indexOf(e)>=0}setCompleted(e){const t=this.getCompletedPayments();t.push(e),this.setCompletedPayments(t)}getCompletedPayments(){return this._browserStorage.getItem(Sr)||[]}setCompletedPayments(e){this._browserStorage.setItem(Sr,e)}}var Cr,wr=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class Ir{constructor(e,t,n,r,i){this._store=e,this._orderActionCreator=t,this._subStrategyRegistry=n,this._paymentResumer=r,this._completedPayments=new Er(i)}execute(e,t){var n;return wr(this,void 0,void 0,function*(){const{bigpayBaseUrl:r}=this._store.getState().config.getStoreConfigOrThrow().paymentSettings;if(!(null==t?void 0:t.methodId))throw new he('Unable to submit payment because \"options.methodId\" argument is not provided.');const{methodId:i}=t,{payment:o}=e,s=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]),{_subStrategy:a}=this;if(!a)throw new Ve(Ue.PaymentNotInitialized);yield this._store.dispatch(this._orderActionCreator.submitOrder(s,t));const c=null===(n=this._store.getState().order.getOrderMeta())||void 0===n?void 0:n.token;if(!c)throw new P(b.MissingOrder);return yield a.execute({methodId:i,payment:o,bigpayBaseUrl:r,token:c}),this._store.getState()})}finalize(e){return wr(this,void 0,void 0,function*(){const t=this._store.getState().order.getOrderOrThrow();if(t.isComplete)return this._store.getState();const{bigpayBaseUrl:n}=this._store.getState().config.getStoreConfigOrThrow().paymentSettings;if(!(null==e?void 0:e.methodId))throw new he('Unable to submit payment because \"options.methodId\" argument is not provided.');const r=this._store.getState().order.getPaymentId(e.methodId);if(!r||!t||this._completedPayments.isCompleted(r))throw new on;const{orderId:i}=t;return yield this._paymentResumer.resume({paymentId:r,bigpayBaseUrl:n,orderId:i}).catch(e=>{throw this._completedPayments.setCompleted(r),e}),this._store.getState()})}initialize(e){return wr(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new he('Unable to submit payment because \"options.methodId\" argument is not provided.');const t=((e,t)=>{const n=e.getState().paymentMethods.getPaymentMethod(t);if(n&&or(n))return n})(this._store,e.methodId);if(!t)throw new Ve(Ue.PaymentNotInitialized);if(this._subStrategy=this._subStrategyRegistry.getByMethod(t),!this._subStrategy)throw new Ve(Ue.PaymentNotInitialized);return yield this._subStrategy.initialize(e),this._store.getState()})}deinitialize(e){var t;return wr(this,void 0,void 0,function*(){return null===(t=this._subStrategy)||void 0===t||t.deinitialize(),this._store.getState()})}}!function(e){e.CARD=\"card_ui\",e.NONE=\"none\",e.UNSUPPORTED=\"unsupported\"}(Cr||(Cr={}));const Or=(0,E.cond)([[e=>\"card_ui\"===e.type,(0,E.constant)(Cr.CARD)],[e=>\"none\"===e.type,(0,E.constant)(Cr.NONE)],[E.stubTrue,(0,E.constant)(Cr.UNSUPPORTED)]]);class Pr extends pe{getByMethod(e){const t=Or(e.initializationStrategy);return this.get(t)}}var Ar=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class Tr{constructor(e,t,n,r){this._store=e,this._orderActionCreator=t,this._hostedFormFactory=n,this._ppsdkStepHandler=r}execute(e){return Ar(this,void 0,void 0,function*(){const t=this._hostedForm;if(!t)throw new Ve(Ue.PaymentNotInitialized);const{additionalAction:n,payment:r}=e;if(!r||!r.methodId)throw new ur([\"payment.methodId\"]);yield t.validate();const{payload:i}=yield t.submit(r,n),{response:o}=i;yield this._ppsdkStepHandler.handle(o,{continue:{humanVerification:t=>Ar(this,void 0,void 0,function*(){return this.execute(Object.assign({additionalAction:t},e))})}}),yield this._store.dispatch(this._orderActionCreator.loadCurrentOrder())})}initialize(e){return Ar(this,void 0,void 0,function*(){const t=e&&e.creditCard&&e.creditCard.form,{config:n,checkout:r}=this._store.getState(),{paymentSettings:{bigpayBaseUrl:i=\"\"}={}}=n.getStoreConfig()||{},o=r.getCheckoutOrThrow().id;if(!t)throw new he;const s=t&&this._hostedFormFactory.create(i,t,o);yield s.attach(),this._hostedForm=s})}deinitialize(){this._hostedForm&&this._hostedForm.detach()}}class kr{constructor(e,t){this._requestSender=e,this._stepHandler=t}execute({methodId:e,bigpayBaseUrl:t,token:n}){const r={credentials:!1,body:{payment_method_id:e},headers:{authorization:n,\"X-XSRF-TOKEN\":null}};return this._requestSender.post(`${t}/payments`,r).then(e=>this._stepHandler.handle(e))}initialize(){return Promise.resolve()}deinitialize(){}}const xr=(e,t,n,r,i)=>{const o=new Pr;return o.register(Cr.CARD,()=>new Tr(e,t,i,r)),o.register(Cr.NONE,()=>new kr(n,r)),o.register(Cr.UNSUPPORTED,()=>{}),o};var Rr,Mr,Nr=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class Lr{constructor(e,t){this._requestSender=e,this._stepHandler=t}resume({paymentId:e,bigpayBaseUrl:t,orderId:n}){return Nr(this,void 0,void 0,function*(){const r={credentials:!1,headers:{authorization:yield this._getToken(n).catch(()=>{throw new on}),\"X-XSRF-TOKEN\":null}};return this._requestSender.get(`${t}/payments/${e}`,r).then(e=>this._stepHandler.handle(e))})}_getToken(e){return Nr(this,void 0,void 0,function*(){const t={params:{order_id:e}};return this._requestSender.get(\"/api/storefront/payments/auth-token\",t).then(({body:e})=>e.auth_token)})}}class Dr{constructor(e){this._requestSender=e}createBuyNowCart(e,{timeout:t}={}){const n=Object.assign({Accept:R.JsonV1},_);return this._requestSender.post(\"/api/storefront/carts\",{body:e,headers:n,timeout:t})}}!function(e){e.UpdatePaymentProviderCustomer=\"UPDATE_PAYMENT_PROVIDER_CUSTOMER\"}(Rr||(Rr={}));class jr{updatePaymentProviderCustomer(e){return(0,u.of)((0,a.VP)(Rr.UpdatePaymentProviderCustomer,e))}}!function(e){e.ForgetCheckoutRemoteCustomerRequested=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_REQUESTED\",e.ForgetCheckoutRemoteCustomerSucceeded=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_SUCCEEDED\",e.ForgetCheckoutRemoteCustomerFailed=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_FAILED\",e.InitializeRemoteBillingRequested=\"INITIALIZE_REMOTE_BILLING_REQUESTED\",e.InitializeRemoteBillingSucceeded=\"INITIALIZE_REMOTE_BILLING_SUCCEEDED\",e.InitializeRemoteBillingFailed=\"INITIALIZE_REMOTE_BILLING_FAILED\",e.InitializeRemoteShippingRequested=\"INITIALIZE_REMOTE_SHIPPING_REQUESTED\",e.InitializeRemoteShippingSucceeded=\"INITIALIZE_REMOTE_SHIPPING_SUCCEEDED\",e.InitializeRemoteShippingFailed=\"INITIALIZE_REMOTE_SHIPPING_FAILED\",e.InitializeRemotePaymentRequested=\"INITIALIZE_REMOTE_PAYMENT_REQUESTED\",e.InitializeRemotePaymentSucceeded=\"INITIALIZE_REMOTE_PAYMENT_SUCCEEDED\",e.InitializeRemotePaymentFailed=\"INITIALIZE_REMOTE_PAYMENT_FAILED\",e.LoadRemoteSettingsRequested=\"LOAD_REMOTE_SETTINGS_REQUESTED\",e.LoadRemoteSettingsSucceeded=\"LOAD_REMOTE_SETTINGS_SUCCEEDED\",e.LoadRemoteSettingsFailed=\"LOAD_REMOTE_SETTINGS_FAILED\",e.SignOutRemoteCustomerRequested=\"SIGN_OUT_REMOTE_CUSTOMER_REQUESTED\",e.SignOutRemoteCustomerSucceeded=\"SIGN_OUT_REMOTE_CUSTOMER_SUCCEEDED\",e.SignOutRemoteCustomerFailed=\"SIGN_OUT_REMOTE_CUSTOMER_FAILED\",e.UpdateRemoteCheckout=\"UPDATE_REMOTE_CHECKOUT\"}(Mr||(Mr={}));var Fr;class Ur{constructor(e,t){this._remoteCheckoutRequestSender=e,this._checkoutActionCreator=t}initializeBilling(e,t,n){return w.c.create(r=>{r.next((0,a.VP)(Mr.InitializeRemoteBillingRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializeBilling(e,t,n).then(({body:t={}})=>{r.next((0,a.VP)(Mr.InitializeRemoteBillingSucceeded,t,{methodId:e})),r.complete()}).catch(t=>{r.error((0,a.fQ)(Mr.InitializeRemoteBillingFailed,t,{methodId:e}))})})}initializeShipping(e,t,n){return w.c.create(r=>{r.next((0,a.VP)(Mr.InitializeRemoteShippingRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializeShipping(e,t,n).then(({body:t={}})=>{r.next((0,a.VP)(Mr.InitializeRemoteShippingSucceeded,t,{methodId:e})),r.complete()}).catch(t=>{r.error((0,a.fQ)(Mr.InitializeRemoteShippingFailed,t,{methodId:e}))})})}initializePayment(e,t,n){return w.c.create(r=>{r.next((0,a.VP)(Mr.InitializeRemotePaymentRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializePayment(e,t,n).then(({body:t={}})=>{r.next((0,a.VP)(Mr.InitializeRemotePaymentSucceeded,t,{methodId:e})),r.complete()}).catch(t=>{r.error((0,a.fQ)(Mr.InitializeRemotePaymentFailed,t,{methodId:e}))})})}loadSettings(e,t){return w.c.create(n=>{n.next((0,a.VP)(Mr.LoadRemoteSettingsRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.loadSettings(e,t).then(({body:t})=>{n.next((0,a.VP)(Mr.LoadRemoteSettingsSucceeded,t,{methodId:e})),n.complete()}).catch(t=>{n.error((0,a.fQ)(Mr.LoadRemoteSettingsFailed,t,{methodId:e}))})})}signOut(e,t){return w.c.create(n=>{n.next((0,a.VP)(Mr.SignOutRemoteCustomerRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.signOut(e,t).then(()=>{n.next((0,a.VP)(Mr.SignOutRemoteCustomerSucceeded,void 0,{methodId:e})),n.complete()}).catch(t=>{n.error((0,a.fQ)(Mr.SignOutRemoteCustomerFailed,t,{methodId:e}))})})}forgetCheckout(e,t){return(0,c.x)((0,u.of)((0,a.VP)(Mr.ForgetCheckoutRemoteCustomerRequested,void 0,{methodId:e})),(0,d.v)(()=>{return n=this,r=void 0,o=function*(){return yield this._remoteCheckoutRequestSender.forgetCheckout(t),yield this._checkoutActionCreator.loadCurrentCheckout(),(0,a.VP)(Mr.ForgetCheckoutRemoteCustomerSucceeded,void 0,{methodId:e})},new((i=void 0)||(i=Promise))(function(e,t){function s(e){try{c(o.next(e))}catch(e){t(e)}}function a(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}c((o=o.apply(n,r||[])).next())});var n,r,i,o})).pipe((0,l.W)(t=>y(Mr.ForgetCheckoutRemoteCustomerFailed,t,{methodId:e})))}updateCheckout(e,t){return(0,a.VP)(Mr.UpdateRemoteCheckout,t,{methodId:e})}}class Br{constructor(e){this._requestSender=e}initializeBilling(e,t,{timeout:n}={}){const r=`/remote-checkout/${e}/billing`;return this._requestSender.get(r,{params:t,timeout:n,headers:_})}initializeShipping(e,t,{timeout:n}={}){const r=`/remote-checkout/${e}/shipping`;return this._requestSender.get(r,{params:t,timeout:n,headers:_})}initializePayment(e,t,{timeout:n}={}){const r=`/remote-checkout/${e}/payment`;return this._requestSender.get(r,{params:t,timeout:n,headers:_})}loadSettings(e,{timeout:t}={}){const n=`/remote-checkout/${e}/settings`;return this._requestSender.get(n,{timeout:t,headers:_})}signOut(e,{timeout:t}={}){const n=`/remote-checkout/${e}/signout`;return this._requestSender.get(n,{timeout:t,headers:_})}generateToken({timeout:e}={}){return this._requestSender.get(\"/remote-checkout-token\",{timeout:e,headers:_})}trackAuthorizationEvent({timeout:e}={}){return this._requestSender.post(\"/remote-checkout/events/shopper-checkout-service-provider-authorization-requested\",{timeout:e,headers:_})}forgetCheckout({timeout:e}={}){return this._requestSender.post(\"/remote-checkout/forget-checkout\",{timeout:e,headers:_})}}!function(e){e.CreateConsignmentsRequested=\"CREATE_CONSIGNMENTS_REQUESTED\",e.CreateConsignmentsSucceeded=\"CREATE_CONSIGNMENTS_SUCCEEDED\",e.CreateConsignmentsFailed=\"CREATE_CONSIGNMENTS_FAILED\",e.UpdateConsignmentRequested=\"UPDATE_CONSIGNMENT_REQUESTED\",e.UpdateConsignmentSucceeded=\"UPDATE_CONSIGNMENT_SUCCEEDED\",e.UpdateConsignmentFailed=\"UPDATE_CONSIGNMENT_FAILED\",e.DeleteConsignmentRequested=\"DELETE_CONSIGNMENT_REQUESTED\",e.DeleteConsignmentSucceeded=\"DELETE_CONSIGNMENT_SUCCEEDED\",e.DeleteConsignmentFailed=\"DELETE_CONSIGNMENT_FAILED\",e.UpdateShippingOptionRequested=\"UPDATE_SHIPPING_OPTION_REQUESTED\",e.UpdateShippingOptionSucceeded=\"UPDATE_SHIPPING_OPTION_SUCCEEDED\",e.UpdateShippingOptionFailed=\"UPDATE_SHIPPING_OPTION_FAILED\",e.LoadShippingOptionsRequested=\"LOAD_SHIPPING_OPTIONS_REQUESTED\",e.LoadShippingOptionsSucceeded=\"LOAD_SHIPPING_OPTIONS_SUCCEEDED\",e.LoadShippingOptionsFailed=\"LOAD_SHIPPING_OPTIONS_FAILED\"}(Fr||(Fr={}));class zr{constructor(e,t){this._consignmentRequestSender=e,this._checkoutRequestSender=t}unassignItemsByAddress(e,t){return n=>{const r=n.getState();if(!r.checkout.getCheckout())throw new P(b.MissingCheckout);const i=this._consignmentHasAddress(e)?e.address:e.shippingAddress,o=r.consignments.getConsignmentByAddress(i);if(!o)throw new he(\"No consignment found for the specified address\");const s=this._removeLineItems(e.lineItems,o,r.cart.getCart());return s.length?this.updateConsignment({id:o.id,address:i,lineItems:s},t)(n):this.deleteConsignment(o.id,t)(n)}}assignItemsByAddress(e,t){return n=>{const r=n.getState(),i=this._consignmentHasAddress(e)?e.address:e.shippingAddress,o=r.consignments.getConsignmentByAddress(i);return this._createOrUpdateConsignment({id:o&&o.id,address:i,lineItems:this._addLineItems(e.lineItems,o,r.cart.getCart())},t)(n)}}selectShippingOption(e,t){return n=>w.c.create(r=>{const i=n.getState(),o=i.checkout.getCheckout(),s=i.consignments.getConsignments();if(!o)throw new P(b.MissingCheckout);if(!s||!s.length)throw new P(b.MissingConsignments);const c={id:s[0].id,shippingOptionId:e},u={id:s[0].id};r.next((0,a.VP)(Fr.UpdateShippingOptionRequested,void 0,u)),this._consignmentRequestSender.updateConsignment(o.id,c,t).then(({body:e})=>{r.next((0,a.VP)(Fr.UpdateShippingOptionSucceeded,e,u)),r.complete()}).catch(e=>{r.error((0,a.fQ)(Fr.UpdateShippingOptionFailed,e,u))})})}loadShippingOptions(e){return t=>w.c.create(n=>{const r=t.getState().checkout.getCheckout();if(!r)throw new P(b.MissingCheckout);n.next((0,a.VP)(Fr.LoadShippingOptionsRequested)),this._checkoutRequestSender.loadCheckout(r.id,Object.assign(Object.assign({},e),{params:{include:[oe.AvailableShippingOptions]}})).then(({body:e})=>{n.next((0,a.VP)(Fr.LoadShippingOptionsSucceeded,e)),n.complete()}).catch(e=>{n.error((0,a.fQ)(Fr.LoadShippingOptionsFailed,e))})})}updateAddress(e,t){return n=>{const r=this._getUpdateAddressRequestBody(e,n),i=n.getState().consignments.getConsignments();return i&&i.length&&(r.id=i[0].id),this._createOrUpdateConsignment(r,t)(n)}}createConsignments(e,t){return n=>w.c.create(r=>{const i=n.getState().checkout.getCheckout();if(!i||!i.id)throw new P(b.MissingCheckout);r.next((0,a.VP)(Fr.CreateConsignmentsRequested)),this._consignmentRequestSender.createConsignments(i.id,e,t).then(({body:e})=>{r.next((0,a.VP)(Fr.CreateConsignmentsSucceeded,e)),r.complete()}).catch(e=>{r.error((0,a.fQ)(Fr.CreateConsignmentsFailed,e))})})}updateConsignment(e,t){return n=>w.c.create(r=>{const i=n.getState().checkout.getCheckout();if(!i||!i.id)throw new P(b.MissingCheckout);const o={id:e.id};r.next((0,a.VP)(Fr.UpdateConsignmentRequested,void 0,o)),this._consignmentRequestSender.updateConsignment(i.id,e,t).then(({body:e})=>{r.next((0,a.VP)(Fr.UpdateConsignmentSucceeded,e,o)),r.complete()}).catch(e=>{r.error((0,a.fQ)(Fr.UpdateConsignmentFailed,e,o))})})}deleteConsignment(e,t){return n=>w.c.create(r=>{const i=n.getState().checkout.getCheckout(),o={id:e};if(!i||!i.id)throw new P(b.MissingCheckout);r.next((0,a.VP)(Fr.DeleteConsignmentRequested,void 0,o)),this._consignmentRequestSender.deleteConsignment(i.id,e,t).then(({body:e})=>{r.next((0,a.VP)(Fr.DeleteConsignmentSucceeded,e,o)),r.complete()}).catch(e=>{r.error((0,a.fQ)(Fr.DeleteConsignmentFailed,e,o))})})}updateShippingOption(e,t){return n=>w.c.create(r=>{var i;const o=n.getState().checkout.getCheckout(),s=n.getState().consignments.getConsignmentById(e.id);if((null===(i=null==s?void 0:s.selectedShippingOption)||void 0===i?void 0:i.id)===e.shippingOptionId)return void r.complete();if(!o||!o.id)throw new P(b.MissingCheckout);const c={id:e.id};r.next((0,a.VP)(Fr.UpdateShippingOptionRequested,void 0,c)),this._consignmentRequestSender.updateConsignment(o.id,e,t).then(({body:e})=>{r.next((0,a.VP)(Fr.UpdateShippingOptionSucceeded,e,c)),r.complete()}).catch(e=>{r.error((0,a.fQ)(Fr.UpdateShippingOptionFailed,e,c))})})}_createOrUpdateConsignment(e,t){return n=>{const r=n.getState().checkout.getCheckout();if(!r||!r.id)throw new P(b.MissingCheckout);return this._isUpdateConsignmentRequest(e)?this.updateConsignment(e,t)(n):this.createConsignments([e],t)(n)}}_getUpdateAddressRequestBody(e,t){const n=t.getState().cart.getCart();if(!n)throw new P(b.MissingCart);const{physicalItems:r,customItems:i=[]}=n.lineItems;return{address:e,lineItems:[...r,...i].map(e=>({itemId:e.id,quantity:e.quantity}))}}_removeLineItems(e,t,n){if(!n)throw new P(b.MissingCart);return this._hydrateLineItems(t.lineItemIds,n).map(t=>{const n=(0,E.find)(e,e=>e.itemId===t.itemId);return Object.assign(Object.assign({},t),{quantity:n?t.quantity-n.quantity:t.quantity})}).filter(e=>e.quantity>0)}_addLineItems(e,t,n){if(!t)return e;if(!n)throw new P(b.MissingCart);return e.concat(this._hydrateLineItems(t.lineItemIds,n)).filter(e=>e.quantity>0)}_hydrateLineItems(e,t){return e.map(e=>{const n=(0,E.find)(t.lineItems.physicalItems,t=>t.id===e);return{itemId:e,quantity:n?n.quantity:0}})}_isUpdateConsignmentRequest(e){return!!e.id}_consignmentHasAddress(e){return\"object\"==typeof e&&\"address\"in e}}const qr=[\"consignments.availableShippingOptions\",\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"promotions.banners\"];class Hr{constructor(e){this._requestSender=e}createConsignments(e,t,{timeout:n,params:{include:r}={}}={}){const i=`/api/storefront/checkouts/${e}/consignments`,o=Object.assign({Accept:R.JsonV1},_);return this._requestSender.post(i,{body:t,params:{include:Oe(qr,r)},headers:o,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new x;throw e})}updateConsignment(e,t,{timeout:n,params:{include:r}={}}={}){const{id:i}=t,o=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(t,[\"id\"]),s=`/api/storefront/checkouts/${e}/consignments/${i}`,a=Object.assign({Accept:R.JsonV1},_);return this._requestSender.put(s,{body:o,params:{include:Oe(qr,r)},headers:a,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new x;throw e})}deleteConsignment(e,t,{timeout:n}={}){const r=`/api/storefront/checkouts/${e}/consignments/${t}`,i=Object.assign({Accept:R.JsonV1},_),o=ae(qr);return this._requestSender.delete(r,{params:{include:o},headers:i,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new x;throw e})}}var Vr,Gr;!function(e){e.LoadShippingCountriesRequested=\"LOAD_SHIPPING_COUNTRIES_REQUESTED\",e.LoadShippingCountriesSucceeded=\"LOAD_SHIPPING_COUNTRIES_SUCCEEDED\",e.LoadShippingCountriesFailed=\"LOAD_SHIPPING_COUNTRIES_FAILED\"}(Vr||(Vr={}));class Yr{constructor(e,t){this._shippingCountryRequestSender=e,this._store=t}loadCountries(e){const{checkout:t}=this._store.getState(),n=t.getCheckout(),r=n?n.channelId:null;return w.c.create(t=>{t.next((0,a.VP)(Vr.LoadShippingCountriesRequested)),this._shippingCountryRequestSender.loadCountries(r,e).then(e=>{t.next((0,a.VP)(Vr.LoadShippingCountriesSucceeded,e.body.data)),t.complete()}).catch(e=>{t.error((0,a.fQ)(Vr.LoadShippingCountriesFailed,e))})})}}class Wr{constructor(e,t){this._requestSender=e,this._config=t}loadCountries(e,{timeout:t}={}){const n=\"/internalapi/v1/shipping/countries\"+(e?`?channel_id=${e}`:\"\"),r=Object.assign({\"Accept-Language\":this._config.locale},_);return this._requestSender.get(n,{headers:r,timeout:t})}}!function(e){e.ApplyStoreCreditRequested=\"APPLY_STORE_CREDIT_REQUESTED\",e.ApplyStoreCreditSucceeded=\"APPLY_STORE_CREDIT_SUCCEEDED\",e.ApplyStoreCreditFailed=\"APPLY_STORE_CREDIT_FAILED\"}(Gr||(Gr={}));var $r;class Kr{constructor(e){this._storeCreditRequestSender=e}applyStoreCredit(e,t){return n=>(0,c.x)((0,u.of)((0,a.VP)(Gr.ApplyStoreCreditRequested)),(0,d.v)(()=>{return r=this,i=void 0,s=function*(){var r;const i=n.getState().checkout.getCheckout();if(!i)throw new P(b.MissingCheckout);const{id:o}=i,s=null!==(r=null==t?void 0:t.version)&&void 0!==r?r:i.version,{body:c}=yield e?this._storeCreditRequestSender.applyStoreCredit(o,Object.assign(Object.assign({},t),{version:s})):this._storeCreditRequestSender.removeStoreCredit(o,Object.assign(Object.assign({},t),{version:s}));return(0,a.VP)(Gr.ApplyStoreCreditSucceeded,c)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function a(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o(function(e){e(r)})).then(n,a)}c((s=s.apply(r,i||[])).next())});var r,i,o,s})).pipe((0,l.W)(e=>y(Gr.ApplyStoreCreditFailed,e)))}}class Qr{constructor(e){this._requestSender=e}applyStoreCredit(e,{timeout:t,version:n}={}){const r=`/api/storefront/checkouts/${e}/store-credit`,i=Object.assign({Accept:R.JsonV1},_);return this._requestSender.post(r,{headers:i,timeout:t,params:{include:ae(ie)},body:{version:n}})}removeStoreCredit(e,{timeout:t,version:n}={}){const r=`/api/storefront/checkouts/${e}/store-credit`,i=Object.assign({Accept:R.JsonV1},_);return this._requestSender.delete(r,{headers:i,timeout:t,params:{include:ae(ie)},body:{version:n}})}}!function(e){e.UpdateSubscriptionsRequested=\"UPDATE_SUBSCRIPTIONS_REQUESTED\",e.UpdateSubscriptionsSucceeded=\"UPDATE_SUBSCRIPTIONS_SUCCEEDED\",e.UpdateSubscriptionsFailed=\"UPDATE_SUBSCRIPTIONS_FAILED\"}($r||($r={}));class Zr extends J{constructor(e){super(e),this.name=\"UpdateSubscriptionsError\",this.type=\"update_subscriptions\"}}class Jr{constructor(e){this._subscriptionsRequestSender=e}updateSubscriptions(e,t){return(0,c.x)((0,u.of)((0,a.VP)($r.UpdateSubscriptionsRequested)),(0,d.v)(()=>{return n=this,r=void 0,o=function*(){const{body:n}=yield this._subscriptionsRequestSender.updateSubscriptions(e,t);return(0,a.VP)($r.UpdateSubscriptionsSucceeded,n)},new((i=void 0)||(i=Promise))(function(e,t){function s(e){try{c(o.next(e))}catch(e){t(e)}}function a(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}c((o=o.apply(n,r||[])).next())});var n,r,i,o})).pipe((0,l.W)(e=>y($r.UpdateSubscriptionsFailed,new Zr(e))))}}class Xr{constructor(e){this._requestSender=e}updateSubscriptions(e,{timeout:t}={}){const n=Object.assign({Accept:R.JsonV1},_);return this._requestSender.post(\"/api/storefront/subscriptions\",{body:e,headers:n,timeout:t})}}function ei(e){return(0,E.isPlainObject)(e)}const ti=(0,E.memoize)(e=>Array.isArray(e)?e.map(e=>ni(e)):ei(e)?Object.keys(e).reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:ni(e[n])}),{}):e);ti.cache=new WeakMap;const ni=e=>\"object\"==typeof e&&null!==e?ti(e):e;function ri(e){return(...t)=>ni(e(...t))}function ii({billingAddress:{getBillingAddress:e,getBillingAddressOrThrow:t},cart:{getCart:n,getCartOrThrow:r,getLocale:i},checkout:{getCheckout:o,getCheckoutOrThrow:s,getOutstandingBalance:a},config:{getContextConfig:c,getHost:u,getLocale:d,getStoreConfig:l,getStoreConfigOrThrow:h,getConfig:p},consignments:{getConsignments:f,getConsignmentsOrThrow:m},countries:{getCountries:y},customer:{getCustomer:g,getCustomerOrThrow:_},instruments:{getCardInstrument:v,getCardInstrumentOrThrow:b,getInstruments:S,getInstrumentsMeta:E},order:{getOrder:C,getOrderOrThrow:w,getOrderMeta:I},payment:{getPaymentToken:O,getPaymentTokenOrThrow:P,getPaymentId:A,getPaymentIdOrThrow:T,getPaymentStatus:k,getPaymentStatusOrThrow:x,getPaymentRedirectUrl:R,getPaymentRedirectUrlOrThrow:M,isPaymentDataRequired:N},paymentMethods:{getPaymentMethod:L,getPaymentMethodOrThrow:D,getPaymentMethodsMeta:j},paymentProviderCustomer:{getPaymentProviderCustomer:F,getPaymentProviderCustomerOrThrow:U},paymentStrategies:{isInitialized:B},shippingAddress:{getShippingAddress:z,getShippingAddressOrThrow:q,getShippingAddresses:H,getShippingAddressesOrThrow:V},shippingCountries:{getShippingCountries:G}}){return{getHost:ri(u),getLocale:ri(d),getCartLocale:ri(i),getBillingAddress:ri(e),getBillingAddressOrThrow:ri(t),getCart:ri(n),getCartOrThrow:ri(r),getCheckout:ri(o),getCheckoutOrThrow:ri(s),getCountries:ri(y),getStoreConfig:ri(l),getStoreConfigOrThrow:ri(h),getConfig:ri(p),getConsignments:ri(f),getConsignmentsOrThrow:ri(m),getContextConfig:ri(c),getCustomer:ri(g),getCustomerOrThrow:ri(_),getCardInstrument:ri(v),getInstruments:ri(S),getCardInstrumentOrThrow:ri(b),getOrder:ri(C),getOrderOrThrow:ri(w),getOrderMeta:ri(I),getInstrumentsMeta:ri(E),getPaymentToken:O,getPaymentTokenOrThrow:P,getPaymentId:A,getPaymentIdOrThrow:T,getPaymentStatus:k,getPaymentStatusOrThrow:x,getPaymentRedirectUrl:R,getPaymentRedirectUrlOrThrow:M,getPaymentMethod:ri(L),getPaymentMethodOrThrow:ri(D),getPaymentMethodsMeta:ri(j),getPaymentProviderCustomer:ri(F),getPaymentProviderCustomerOrThrow:ri(U),getShippingAddress:ri(z),getShippingAddressOrThrow:ri(q),getShippingAddresses:ri(H),getShippingAddressesOrThrow:ri(V),getShippingCountries:ri(G),getOutstandingBalance:ri(a),isPaymentDataRequired:N,isPaymentMethodInitialized:B}}var oi,si=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class ai{constructor(e,t,n,r,i,o,s,a,c,u,d,l,h,p,f,m,y,g,_,v){this._store=e,this._storeProjectionFactory=t,this._checkoutActionCreator=n,this._checkoutValidator=r,this._hostedFormFactory=i,this._orderActionCreator=o,this._billingAddressActionCreator=s,this._consignmentActionCreator=a,this._paymentMethodActionCreator=c,this._paymentActionCreator=u,this._paymentHumanVerificationHandler=d,this._customerActionCreator=l,this._cartRequestSender=h,this._storeCreditActionCreator=p,this._couponActionCreator=f,this._spamProtectionActionCreator=m,this._paymentProviderCustomerActionCreator=y,this._shippingCountryActionCreator=g,this._remoteCheckoutActionCreator=_,this._paymentStrategyWidgetActionCreator=v,this._storeProjection=this._storeProjectionFactory.create(this._store)}createHostedForm(e,t){const n=this._storeProjection.getState().getCheckoutOrThrow().id;return this._hostedFormFactory.create(e,t,n)}subscribe(e,...t){return this._storeProjection.subscribe(e,...t)}getState(){return this._storeProjection.getState()}initializeOffsitePayment(e){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentActionCreator.initializeOffsitePayment(e)),this._storeProjection.getState()})}loadCheckout(e){return si(this,void 0,void 0,function*(){return e?yield this._store.dispatch(this._checkoutActionCreator.loadCheckout(e)):yield this._store.dispatch(this._checkoutActionCreator.loadCurrentCheckout()),this._storeProjection.getState()})}loadDefaultCheckout(){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()),this._storeProjection.getState()})}loadPaymentMethod(e,t){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e,t)),this._storeProjection.getState()})}loadPaymentMethods(e){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethods(e)),this._storeProjection.getState()})}submitOrder(e,t){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._orderActionCreator.submitOrder(e,t)),this._storeProjection.getState()})}submitPayment(e){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentActionCreator.submitPayment(e)),this._storeProjection.getState()})}finalizeOrder(e){return si(this,void 0,void 0,function*(){const{order:{getOrderOrThrow:t}}=this._store.getState();return yield this._store.dispatch(this._orderActionCreator.finalizeOrder(t().orderId,e)),this._storeProjection.getState()})}updateBillingAddress(e){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(e)),this._storeProjection.getState()})}updateShippingAddress(e){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.updateAddress(e)),this._storeProjection.getState()})}selectShippingOption(e,t){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t)),this._storeProjection.getState()})}signInCustomer(e,t){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._customerActionCreator.signInCustomer(e,t)),this._storeProjection.getState()})}signOutCustomer(e){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._customerActionCreator.signOutCustomer(e)),this._storeProjection.getState()})}createBuyNowCart(e,t){return si(this,void 0,void 0,function*(){const{body:n}=yield this._cartRequestSender.createBuyNowCart(e,t);return n})}applyStoreCredit(e,t){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._storeCreditActionCreator.applyStoreCredit(e,t)),this._storeProjection.getState()})}applyCoupon(e,t){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._couponActionCreator.applyCoupon(e,t)),this._storeProjection.getState()})}removeCoupon(e,t){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._couponActionCreator.removeCoupon(e,t)),this._storeProjection.getState()})}verifyCheckoutSpamProtection(){return si(this,void 0,void 0,function*(){const{checkout:e}=this._store.getState(),{shouldExecuteSpamCheck:t}=e.getCheckoutOrThrow();return t&&(yield this._store.dispatch(this._spamProtectionActionCreator.verifyCheckoutSpamProtection())),this._storeProjection.getState()})}loadCurrentOrder(e){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._orderActionCreator.loadCurrentOrder(e)),this._storeProjection.getState()})}updatePaymentProviderCustomer(e){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(e)),this._storeProjection.getState()})}loadShippingCountries(e){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._shippingCountryActionCreator.loadCountries(e)),this._storeProjection.getState()})}deleteConsignment(e,t){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.deleteConsignment(e,t)),this._storeProjection.getState()})}initializePayment(e,t,n){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.initializePayment(e,t,n)),this._storeProjection.getState()})}forgetCheckout(e,t){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.forgetCheckout(e,t)),this._storeProjection.getState()})}remoteCheckoutSignOut(e,t){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.signOut(e,t)),this._storeProjection.getState()})}validateCheckout(e,t){return si(this,void 0,void 0,function*(){yield this._checkoutValidator.validate(e,t)})}handlePaymentHumanVerification(e,t){return si(this,void 0,void 0,function*(){return\"string\"==typeof e?this._paymentHumanVerificationHandler.handle(e,null!=t?t:\"\"):this._paymentHumanVerificationHandler.handle(e)})}widgetInteraction(e){return si(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentStrategyWidgetActionCreator.widgetInteraction(e),{queueId:\"widgetInteraction\"}),this._storeProjection.getState()})}}class ci{constructor(e){this._transformSelectors=e}create(e){return j(e,this._transformSelectors)}}function ui(t,n){const{config:{getHost:r,getLocale:i}}=t.getState();n||(n=(0,e.createRequestSender)({host:r()}));const o=new ci(ii),a=new Te(new Pe(n),new Q(new te(n)),new ke(new xe(n))),c=new hn(new Pe(n)),u=new Mn(t),d=new Yt(new Vt(n),new hn(new Pe(n))),l=new k(new N(n),new Jr(new Xr(n))),h=new zr(new Hr(n),new Pe(n)),p=new Xt(new en(n),new rn(n)),f=new Nn(new Ln($t(t)),d,new rr,new bn($e((0,s.Hb)()))),m=new bn($e((0,s.Hb)())),y=new Ee(new Ce(n),a,new je($e((0,s.Hb)()),new Ke(n))),g=new Kr(new Qr(n)),_=new re(new ce(n)),v=$e((0,s.Hb)()),b=new Ke(n),S=new je(v,b),E=new Dr(n),C=new jr,w=new Yr(new Wr(n,{locale:i()}),t),I=new Ur(new Br(n),a),O=new an;return new ai(t,o,a,c,u,d,l,h,p,f,m,y,E,g,_,S,C,w,I,O)}!function(e){e.LoadInstrumentsRequested=\"LOAD_INSTRUMENTS_REQUESTED\",e.LoadInstrumentsSucceeded=\"LOAD_INSTRUMENTS_SUCCEEDED\",e.LoadInstrumentsFailed=\"LOAD_INSTRUMENTS_FAILED\",e.DeleteInstrumentRequested=\"DELETE_INSTRUMENT_REQUESTED\",e.DeleteInstrumentSucceeded=\"DELETE_INSTRUMENT_SUCCEEDED\",e.DeleteInstrumentFailed=\"DELETE_INSTRUMENT_FAILED\"}(oi||(oi={}));class di{constructor(e){this._instrumentRequestSender=e}loadInstruments(){return e=>w.c.create(t=>{t.next((0,a.VP)(oi.LoadInstrumentsRequested));const n=this._getSessionContext(e),r=this._getCurrentAccessToken(e),i=this._getShippingAddress(e);return this._getValidAccessToken(r).then(e=>this._instrumentRequestSender.loadInstruments(Object.assign(Object.assign({},n),{authToken:e.vaultAccessToken}),i).then(({body:n})=>{t.next((0,a.VP)(oi.LoadInstrumentsSucceeded,n,e)),t.complete()})).catch(e=>{t.error((0,a.fQ)(oi.LoadInstrumentsFailed,e))})})}deleteInstrument(e){return t=>w.c.create(n=>{n.next((0,a.VP)(oi.DeleteInstrumentRequested,void 0,{instrumentId:e}));const r=this._getSessionContext(t),i=this._getCurrentAccessToken(t);return this._getValidAccessToken(i).then(t=>this._instrumentRequestSender.deleteInstrument(Object.assign(Object.assign({},r),{authToken:t.vaultAccessToken}),e).then(({body:r})=>{n.next((0,a.VP)(oi.DeleteInstrumentSucceeded,r,Object.assign({instrumentId:e},t))),n.complete()})).catch(t=>{n.error((0,a.fQ)(oi.DeleteInstrumentFailed,t,{instrumentId:e}))})})}_isValidVaultAccessToken(e){if(!e||!e.vaultAccessToken)return!1;return function(e){const t=new Date(e.getTime());return t.setMinutes(e.getMinutes()+2),t}(new Date(e.vaultAccessExpiry)).valueOf()>Date.now()}_getCurrentAccessToken(e){const{instruments:t}=e.getState(),n=t.getInstrumentsMeta();if(n)return{vaultAccessToken:n.vaultAccessToken,vaultAccessExpiry:n.vaultAccessExpiry}}_getValidAccessToken(e){return e&&this._isValidVaultAccessToken(e)?Promise.resolve(e):this._instrumentRequestSender.getVaultAccessToken().then(({body:e})=>e)}_getShippingAddress(e){const t=e.getState(),n=t.shippingAddress.getShippingAddresses();return n.length>1?n:t.shippingAddress.getShippingAddress()}_getSessionContext(e){const t=e.getState(),n=t.config.getStoreConfig(),r=t.cart.getCart();if(!n)throw new P(b.MissingCheckoutConfig);if(!r)throw new P(b.MissingCart);const{customerId:i}=r,{storeId:o}=n.storeProfile,{code:s}=n.shopperCurrency.isTransactional?n.shopperCurrency:n.currency;return{customerId:i,storeId:o,currencyCode:s}}}var li,hi,pi,fi,mi=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n};class yi{transformResponse(e){const t=this._transformResponse(e),{body:n}=t,r=mi(t,[\"body\"]);return Object.assign(Object.assign({},r),{body:{vaultedInstruments:this._transformVaultedInstruments(n.vaulted_instruments)}})}transformErrorResponse(e){return this._transformResponse(e)}transformVaultAccessResponse(e){return Object.assign(Object.assign({},e),{body:{vaultAccessToken:e.body.data.token,vaultAccessExpiry:e.body.data.expires_at}})}_transformVaultedInstruments(e=[]){return e.map(e=>this._isPayPalInstrument(e)?function(e){return{bigpayToken:e.bigpay_token,defaultInstrument:e.default_instrument,provider:e.provider,externalId:e.external_id,trustedShippingAddress:e.trusted_shipping_address,method:\"paypal\",type:\"account\"}}(e):this._isBankInstrument(e)?function(e){return{bigpayToken:e.bigpay_token,defaultInstrument:e.default_instrument,provider:e.provider,trustedShippingAddress:e.trusted_shipping_address,accountNumber:e.account_number,issuer:e.issuer,iban:e.iban,method:e.method,type:\"bank\"}}(e):function(e){return{bigpayToken:e.bigpay_token,defaultInstrument:e.default_instrument,provider:e.provider,iin:e.iin,last4:e.last_4,expiryMonth:e.expiry_month,expiryYear:e.expiry_year,brand:e.brand,trustedShippingAddress:e.trusted_shipping_address,untrustedShippingCardVerificationMode:e.untrusted_shipping_address_card_verification_mode,method:e.method,type:\"card\"}}(e))}_isPayPalInstrument(e){return\"paypal\"===e.method_type}_isBankInstrument(e){return\"bank\"===e.method_type}_transformResponse(e){const{data:t}=e,n=mi(e,[\"data\"]);return Object.assign(Object.assign({},n),{body:t})}}class gi{constructor(e,t){this._client=e,this._requestSender=t,this._transformer=new yi}getVaultAccessToken({timeout:e}={}){return this._requestSender.get(\"/internalapi/v1/checkout/payments/vault-access-token\",{timeout:e}).then(e=>Object.assign(Object.assign({},e),{body:{vaultAccessToken:e.body.data.token,vaultAccessExpiry:e.body.data.expires_at}}))}loadInstruments(e,t){return t?this._loadInstrumentsWithAddress(e,t):this._loadInstruments(e)}deleteInstrument(e,t){const n=Object.assign(Object.assign({},e),{instrumentId:t});return new Promise((e,t)=>{this._client.deleteShopperInstrument(n,(n,r)=>n?t(this._transformer.transformErrorResponse(n)):e(this._transformer.transformResponse(r)))})}_loadInstruments(e){return new Promise((t,n)=>{this._client.loadInstruments(e,(e,r)=>e?n(this._transformer.transformErrorResponse(e)):t(this._transformer.transformResponse(r)))})}_loadInstrumentsWithAddress(e,t){const n=Object.assign(Object.assign({},e),{shippingAddress:Array.isArray(t)?t.map(e=>Dn(e)):Dn(t)});return new Promise((e,t)=>{this._client.loadInstrumentsWithAddress(n,(n,r)=>n?t(this._transformer.transformErrorResponse(n)):e(this._transformer.transformResponse(r)))})}}!function(e){e.LoadPickupOptionsRequested=\"LOAD_PICKUP_OPTIONS_REQUESTED\",e.LoadPickupOptionsSucceeded=\"LOAD_PICKUP_OPTIONS_SUCCEEDED\",e.LoadPickupOptionsFailed=\"LOAD_PICKUP_OPTIONS_FAILED\"}(li||(li={}));class _i{constructor(e){this._pickupOptionRequestSender=e}loadPickupOptions(e){return t=>new w.c(n=>{const r=this._hydrateApiQuery(t,e);n.next((0,a.VP)(li.LoadPickupOptionsRequested)),this._pickupOptionRequestSender.fetchPickupOptions(r).then(t=>{n.next((0,a.VP)(li.LoadPickupOptionsSucceeded,t.body.results,e)),n.complete()}).catch(e=>{n.error((0,a.fQ)(li.LoadPickupOptionsFailed,e))})})}_hydrateApiQuery(e,t){const n=e.getState(),r=n.cart.getCartOrThrow();if(!r)throw new P(b.MissingCart);const i=n.consignments.getConsignmentById(t.consignmentId);if(!i)throw new P(b.MissingConsignments);const o=i.lineItemIds,s=r.lineItems.physicalItems.filter(e=>(0,E.includes)(o,e.id)).map(e=>({variantId:e.variantId,quantity:e.quantity}));return{searchArea:t.searchArea,items:s}}}class vi{constructor(e){this._requestSender=e}fetchPickupOptions(e){return this._requestSender.post(\"/api/storefront/pickup-options\",{headers:Object.assign({Accept:R.Json},_),body:e})}}!function(e){e.UpdateAddressFailed=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_FAILED\",e.UpdateAddressRequested=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_REQUESTED\",e.UpdateAddressSucceeded=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_SUCCEEDED\",e.SelectOptionFailed=\"SHIPPING_STRATEGY_SELECT_OPTION_FAILED\",e.SelectOptionRequested=\"SHIPPING_STRATEGY_SELECT_OPTION_REQUESTED\",e.SelectOptionSucceeded=\"SHIPPING_STRATEGY_SELECT_OPTION_SUCCEEDED\",e.InitializeFailed=\"SHIPPING_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"SHIPPING_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"SHIPPING_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"SHIPPING_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"SHIPPING_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"SHIPPING_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_FAILED\"}(hi||(hi={}));class bi{constructor(e){this._strategyRegistry=e}updateAddress(e,t){return n=>w.c.create(r=>{const i=n.getState().payment.getPaymentId(),o=t&&t.methodId||i&&i.providerId;r.next((0,a.VP)(hi.UpdateAddressRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).updateAddress(e,Object.assign(Object.assign({},t),{methodId:o})).then(()=>{r.next((0,a.VP)(hi.UpdateAddressSucceeded,void 0,{methodId:o})),r.complete()}).catch(e=>{r.error((0,a.fQ)(hi.UpdateAddressFailed,e,{methodId:o}))})})}selectOption(e,t){return n=>w.c.create(r=>{const i=n.getState().payment.getPaymentId(),o=t&&t.methodId||i&&i.providerId;r.next((0,a.VP)(hi.SelectOptionRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).selectOption(e,Object.assign(Object.assign({},t),{methodId:o})).then(()=>{r.next((0,a.VP)(hi.SelectOptionSucceeded,void 0,{methodId:o})),r.complete()}).catch(e=>{r.error((0,a.fQ)(hi.SelectOptionFailed,e,{methodId:o}))})})}initialize(e){return t=>w.c.create(n=>{const r=t.getState(),i=r.payment.getPaymentId(),o=e&&e.methodId||i&&i.providerId,s=Object.assign(Object.assign({},e),{methodId:o});if(o&&r.shippingStrategies.isInitialized(o))return n.complete();n.next((0,a.VP)(hi.InitializeRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).initialize(s).then(()=>{n.next((0,a.VP)(hi.InitializeSucceeded,void 0,{methodId:o})),n.complete()}).catch(e=>{n.error((0,a.fQ)(hi.InitializeFailed,e,{methodId:o}))})})}deinitialize(e){return t=>w.c.create(n=>{const r=t.getState(),i=r.payment.getPaymentId(),o=e&&e.methodId||i&&i.providerId;if(o&&!r.shippingStrategies.isInitialized(o))return n.complete();n.next((0,a.VP)(hi.DeinitializeRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).deinitialize(Object.assign(Object.assign({},e),{methodId:o})).then(()=>{n.next((0,a.VP)(hi.DeinitializeSucceeded,void 0,{methodId:o})),n.complete()}).catch(e=>{n.error((0,a.fQ)(hi.DeinitializeFailed,e,{methodId:o}))})})}widgetInteraction(e,t){return w.c.create(n=>{const r={methodId:t&&t.methodId};n.next((0,a.VP)(hi.WidgetInteractionStarted,void 0,r)),e().then(()=>{n.next((0,a.VP)(hi.WidgetInteractionFinished,void 0,r)),n.complete()}).catch(e=>{n.error((0,a.fQ)(hi.WidgetInteractionFailed,e,r))})})}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(pi||(pi={}));class Si extends xt{constructor(e){super(function(e){switch(e){case pi.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case pi.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case pi.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case pi.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case pi.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case pi.MissingCheckoutConfig:case pi.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case pi.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case pi.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case pi.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case pi.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case pi.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case pi.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(fi||(fi={}));class Ei extends xt{constructor(e){super(function(e){switch(e){case fi.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case fi.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case fi.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case fi.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const Ci={de:\"eu\",jp:\"fe\",uk:\"eu\",us:\"na\"};var wi,Ii,Oi,Pi,Ai,Ti;!function(e){e.en_US=\"en_US\",e.en_GB=\"en_GB\",e.de_DE=\"de_DE\",e.fr_FR=\"fr_FR\",e.it_IT=\"it_IT\",e.es_ES=\"es_ES\",e.ja_JP=\"ja_JP\"}(wi||(wi={})),function(e){e.Home=\"Home\",e.Product=\"Product\",e.Cart=\"Cart\",e.Checkout=\"Checkout\",e.Other=\"Other\"}(Ii||(Ii={})),function(e){e.USD=\"USD\",e.EUR=\"EUR\",e.GBP=\"GBP\",e.JPY=\"JPY\"}(Oi||(Oi={})),function(e){e.PayAndShip=\"PayAndShip\",e.PayOnly=\"PayOnly\"}(Pi||(Pi={})),function(e){e.Gold=\"Gold\",e.LightGray=\"LightGray\",e.DarkGray=\"DarkGray\"}(Ai||(Ai={})),function(e){e.C0001=\"C0001\"}(Ti||(Ti={}));var ki=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class xi{constructor(e){this.amazonPayV2ScriptLoader=e}initialize(e){return ki(this,void 0,void 0,function*(){this.amazonPayV2SDK=yield this.amazonPayV2ScriptLoader.load(e),this.buttonParentContainer=this.buttonParentContainer||this.createAmazonPayButtonParentContainer()})}deinitialize(){var e;return this.amazonPayV2Button=void 0,null===(e=this.buttonParentContainer)||void 0===e||e.remove(),this.buttonParentContainer=void 0,this.amazonPayV2SDK=void 0,Promise.resolve()}bindButton(e,t,n){this.getAmazonPayV2SDK().Pay.bindChangeAction(`#${e}`,{amazonCheckoutSessionId:t,changeAction:n})}createButton(e,t){this.amazonPayV2Button=this.getAmazonPayV2SDK().Pay.renderButton(`#${e}`,t)}prepareCheckout(e){const t=this.prepareRequestConfig(e);this.getAmazonPayV2Button().onClick(()=>{this.getAmazonPayV2Button().initCheckout(t)})}prepareCheckoutWithCreationRequestConfig(e){this.getAmazonPayV2Button().onClick(()=>ki(this,void 0,void 0,function*(){const t=yield e();if(t){const e=this.prepareRequestConfig(t.createCheckoutSessionConfig,t.estimatedOrderAmount,t.productType);this.getAmazonPayV2Button().initCheckout(e)}}))}signout(){return ki(this,void 0,void 0,function*(){return this.amazonPayV2SDK&&this.amazonPayV2SDK.Pay.signout(),Promise.resolve()})}renderAmazonPayButton({buttonColor:e,checkoutState:t,containerId:n,decoupleCheckoutInitiation:r=!1,methodId:i,options:o,placement:s,isButtonMicroTextDisabled:a=!1}){const c=document.querySelector(`#${n}`);if(!c)return;const{id:u}=c.appendChild(this.getButtonParentContainer());o&&a&&(o.design=Ti.C0001);const d=null!=o?o:this.getAmazonPayV2ButtonOptions(t,i,s,r,e);return this.createButton(u,d),this.getButtonParentContainer()}updateBuyNowFlowFlag(e){this.isBuyNowFlow=Boolean(e)}isPh4Enabled(e,t){const n=!!e[\"PROJECT-3483.amazon_pay_ph4\"],r=!!e[\"INT-6885.amazon_pay_ph4_us_only\"];return n&&r?\"US\"===t:n}prepareRequestConfig(e,t,n){const{publicKeyId:r}=e,i=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"publicKeyId\"]);return Object.assign(Object.assign({createCheckoutSessionConfig:this.isEnvironmentSpecific(r)?i:e},t&&{estimatedOrderAmount:t}),n&&{productType:n})}createAmazonPayButtonParentContainer(){const e=Math.random().toString(16).substr(-4),t=document.createElement(\"div\");return t.id=`amazonpay_button_parent_container_${e}`,t}getAmazonPayV2ButtonOptions(e,t,n,r=!1,i=Ai.Gold){var o;const{getCart:s,getCheckout:a,getStoreConfigOrThrow:c,getPaymentMethodOrThrow:u}=this.getCheckoutState(e),{config:{merchantId:d,testMode:l},initializationData:h}=u(t);if(!h)throw new Si(pi.MissingPaymentMethod);const{checkoutLanguage:p,checkoutSessionMethod:f,createCheckoutSessionConfig:m,extractAmazonCheckoutSessionId:y,ledgerCurrency:g,publicKeyId:_=\"\",isButtonMicroTextDisabled:v}=h;if(!d||!g)throw new Si(pi.MissingPaymentMethod);const b=Object.assign({merchantId:d,ledgerCurrency:g,checkoutLanguage:p,placement:n,buttonColor:i},v?{design:Ti.C0001}:{});if(this.isBuyNowFlow)return Object.assign(Object.assign({},b),{sandbox:!!l});const S=s();b.productType=S&&0===function(e){return t=e.lineItems.physicalItems.filter(e=>!e.addedByPromotion),(0,E.reduce)(t,(e,t)=>e+t.quantity,0);var t}(S)?Pi.PayOnly:Pi.PayAndShip;const{checkoutSettings:{features:C},storeProfile:{shopPath:w,storeCountryCode:I}}=c();if(this.isPh4Enabled(C,I)){if(!m)throw new Si(pi.MissingPaymentMethod);const e=null===(o=a())||void 0===o?void 0:o.outstandingBalance.toString(),t=null==S?void 0:S.currency.code,n=Object.assign({},b);let i;return this.isEnvironmentSpecific(_)?(n.publicKeyId=_,i=m):(n.sandbox=!!l,i=Object.assign(Object.assign({},m),{publicKeyId:_})),r||(n.createCheckoutSessionConfig=i),e&&t&&(n.estimatedOrderAmount={amount:e,currencyCode:t}),n}const O={method:f,url:`${w}/remote-checkout/${t}/payment-session`,extractAmazonCheckoutSessionId:y};return Object.assign(Object.assign({},b),{createCheckoutSession:O,sandbox:!!l})}isEnvironmentSpecific(e){return/^(SANDBOX|LIVE)/.test(e)}getAmazonPayV2SDK(){return this.getOrThrow(this.amazonPayV2SDK)}getButtonParentContainer(){return this.getOrThrow(this.buttonParentContainer)}getAmazonPayV2Button(){return this.getOrThrow(this.amazonPayV2Button)}getOrThrow(e){return function(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}(e,()=>new Ei(fi.PaymentNotInitialized))}getCheckoutState(e){return\"object\"==typeof(t=e)&&null!==t&&\"cart\"in t&&\"checkout\"in t&&\"config\"in t&&\"paymentMethods\"in t?{getCart:e.cart.getCart,getCheckout:e.checkout.getCheckout,getStoreConfigOrThrow:e.config.getStoreConfigOrThrow,getPaymentMethodOrThrow:t=>e.paymentMethods.getPaymentMethodOrThrow(t)}:e;var t}}class Ri extends xt{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class Mi{constructor(e,t=window){this.scriptLoader=e,this.windowWithAmazonPay=t}load(e){return t=this,n=void 0,i=function*(){const{initializationData:t}=e,n=(null==t?void 0:t.region)||\"us\",r=Ci[n];if(yield this.scriptLoader.loadScript(`https://static-${r}.payments-amazon.com/checkout.js`),!this.windowWithAmazonPay.amazon)throw new Ri;return this.windowWithAmazonPay.amazon},new((r=void 0)||(r=Promise))(function(e,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}c((i=i.apply(t,n||[])).next())});var t,n,r,i}}function Ni(e,t,n=!0){var r;return null!==(r=e[t])&&void 0!==r?r:n}const Li=\"3.128.0\",Di=\"3.123.2\",ji=\"3.106.0\";class Fi{constructor(e){this.paymentIntegrationService=e,this.braintreeWindow=window}getSDKVersion(){const e=this.paymentIntegrationService.getState().getStoreConfig(),t=(null==e?void 0:e.checkoutSettings.features)||{};return this.getPreloadedSDKVersion()||(Ni(t,\"PAYPAL-5809.braintree_hosted_fields_fix_version\")?Li:Ni(t,\"PAYPAL-5636.update_braintree_sdk_version\")?Di:ji)}getPreloadedSDKVersion(){const e=this.braintreeWindow.braintree;if(e){const t=(0,E.find)(Object.values(e),e=>!!e.VERSION);return null==t?void 0:t.VERSION}}}var Ui=n(6472);class Bi extends xt{constructor(e){super(e||\"Unsupported browser error\"),this.name=\"UnsupportedBrowserError\",this.type=\"unsupported_browser\"}}class zi extends xt{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class qi extends zi{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class Hi extends xt{constructor(e,t){super(t||\"Unable to proceed because the payment form contains invalid data.\"),this.details=e,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}class Vi extends xt{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}let Gi=null;const Yi=[\"buttons\",\"messages\"];var Wi,$i,Ki,Qi,Zi,Ji,Xi,eo,to;!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(Wi||(Wi={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}($i||($i={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(Ki||(Ki={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(Qi||(Qi={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(Zi||(Zi={})),function(e){e.CART=\"cart\",e.HOME=\"homepage\",e.PAYMENT=\"payment\",e.PRODUCT=\"product\"}(Ji||(Ji={})),function(e){e.Sandbox=\"sandbox\",e.Production=\"production\"}(Xi||(Xi={})),function(e){e.Client=\"client\",e.DataCollector=\"dataCollector\",e.Fastlane=\"fastlane\",e.GooglePayment=\"googlePayment\",e.HostedFields=\"hostedFields\",e.LocalPayment=\"localPayment\",e.Paypal=\"paypal\",e.PaypalCheckout=\"paypalCheckout\",e.ThreeDSecure=\"threeDSecure\",e.UsBankAccount=\"usBankAccount\",e.Venmo=\"venmo\",e.VisaCheckout=\"visaCheckout\"}(eo||(eo={})),function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\"}(to||(to={}));var no=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class ro{constructor(e,t,n){this.braintreeScriptLoader=e,this.braintreeHostWindow=t,this.overlay=n,this.dataCollectors={}}initialize(e,t){this.clientToken=e,this.threeDSecureOptions=t}getBraintreeFastlane(e,t,n){return no(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"axoEnv\",\"sandbox\"),window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\")),!this.braintreeHostWindow.braintreeFastlane){const t=this.getClientTokenOrThrow(),r=yield this.getClient(),i=yield this.getSessionId(e),o=yield this.braintreeScriptLoader.loadFastlane(),s={root:{backgroundColorPrimary:\"transparent\"}};this.braintreeHostWindow.braintreeFastlane=yield o.create({authorization:t,client:r,deviceData:i,styles:n||s})}return this.braintreeHostWindow.braintreeFastlane})}getClient(){return no(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=t.create({authorization:e})}return this.client})}getPaypal(){return this.braintreePaypal||(this.braintreePaypal=Promise.all([this.getClient(),this.braintreeScriptLoader.loadPaypal()]).then(([e,t])=>t.create({client:e}))),this.braintreePaypal}paypal(e){var{shouldSaveInstrument:t}=e,n=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"shouldSaveInstrument\"]);const r=(0,Ui.Jt)();return this.getPaypal().then(e=>{var i;return r&&(null===(i=this.overlay)||void 0===i||i.show({onClick:()=>e.focusWindow()})),e.tokenize(Object.assign({enableShippingAddress:!0,flow:t?\"vault\":\"checkout\",useraction:\"commit\"},n))}).then(e=>{var t;return null===(t=this.overlay)||void 0===t||t.remove(),e}).catch(e=>{var t;throw null===(t=this.overlay)||void 0===t||t.remove(),e})}getPaypalCheckout(e,t,n){return no(this,void 0,void 0,function*(){const r=yield this.getClient(),i=yield this.braintreeScriptLoader.loadPaypalCheckout(),o={client:r};return this.paypalCheckout=yield i.create(o,(r,i)=>{var o;if(r)return n(r);const s=Object.assign(Object.assign({currency:e.currency},e.isCreditEnabled&&{\"enable-funding\":\"paylater\"}),{components:Yi.toString(),intent:e.intent,commit:null===(o=e.commit)||void 0===o||o});this.braintreeHostWindow.paypal?t(i):function(e,t){return Gi||(Gi=new Promise((n,r)=>{e.loadPayPalSDK(t,t=>{t?(Gi=null,r(t)):n(e)})})),Gi}(i,s).then(()=>t(i))}),this.paypalCheckout})}getDataCollector(e){return no(this,void 0,void 0,function*(){const t=(null==e?void 0:e.paypal)?\"paypal\":\"default\";let n=this.dataCollectors[t];if(!n){try{const t=yield this.getClient(),r=yield this.braintreeScriptLoader.loadDataCollector(),i=Object.assign({client:t,kount:!0},e);n=yield r.create(i)}catch(e){if(!function(e){return Boolean(\"object\"==typeof e&&null!==e&&(\"type\"in e||\"message\"in e||\"code\"in e))}(e)||\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"!==e.code)throw e;n={deviceData:void 0,teardown:()=>Promise.resolve()}}this.dataCollectors[t]=n}return n})}getBraintreeEnv(e=!1){return e?Xi.Sandbox:Xi.Production}mapToBraintreeShippingAddressOverride(e){return{recipientName:`${e.firstName} ${e.lastName}`,line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,postalCode:e.postalCode,countryCode:e.countryCode,phone:e.phone}}mapToLegacyShippingAddress(e){const{email:t,phone:n,shippingAddress:r}=e,i=(null==r?void 0:r.recipientName)||\"\",[o,s]=i.split(\" \");return{email:t,first_name:o||\"\",last_name:s||\"\",phone_number:n,address_line_1:null==r?void 0:r.line1,address_line_2:null==r?void 0:r.line2,city:null==r?void 0:r.city,state:null==r?void 0:r.state,country_code:null==r?void 0:r.countryCode,postal_code:null==r?void 0:r.postalCode}}mapToLegacyBillingAddress(e){const{billingAddress:t,email:n,firstName:r,lastName:i,phone:o,shippingAddress:s}=e,a=t||s;return{email:n,first_name:r,last_name:i,phone_number:o,address_line_1:null==a?void 0:a.line1,address_line_2:null==a?void 0:a.line2,city:null==a?void 0:a.city,state:null==a?void 0:a.state,country_code:null==a?void 0:a.countryCode,postal_code:null==a?void 0:a.postalCode}}removeElement(e){const t=e&&document.getElementById(e);t&&t.remove()}getSessionId(e){return no(this,void 0,void 0,function*(){const{deviceData:t}=yield this.getDataCollector({riskCorrelationId:e});return t})}teardown(){return no(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollectors.default),yield this.teardownModule(this.dataCollectors.paypal),this.dataCollectors={},yield this.teardownModule(this.paypalCheckout),this.paypalCheckout=void 0})}get3DS(){return no(this,void 0,void 0,function*(){return this.threeDS||(this.threeDS=Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]).then(([e,t])=>t.create({client:e,version:2}))),this.threeDS})}getVenmoCheckout(e){return no(this,void 0,void 0,function*(){if(!this.venmoCheckout){const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadVenmoCheckout(),r=Object.assign({client:t,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},e||{});this.venmoCheckout=yield new Promise((e,t)=>{n.create(r,(n,r)=>n?t(n):r.isBrowserSupported()?void e(r):t(new Bi))})}return this.venmoCheckout})}verifyCard(e,t,n){return no(this,void 0,void 0,function*(){const r=yield this.tokenizeCard(e,t);return this.challenge3DSVerification(r,n)})}tokenizeCard(e,t){return no(this,void 0,void 0,function*(){const{paymentData:n}=e;if(!function(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;return\"object\"==typeof t.ccExpiry&&null!==t.ccExpiry&&\"string\"==typeof t.ccNumber&&\"string\"==typeof t.ccName}(n))throw new qi([\"payment.paymentData\"]);const r=this.getErrorsRequiredFields(n);if(!(0,E.isEmpty)(r))throw new Hi(r);const i=this.mapToCreditCard(n,t),o=yield this.getClient(),{creditCards:s}=yield o.request(i);return{nonce:s[0].nonce,bin:s[0].details.bin}})}challenge3DSVerification(e,t){return no(this,void 0,void 0,function*(){const n=yield this.get3DS();return this.present3DSChallenge(n,t,e)})}teardownModule(e){return e?e.teardown():Promise.resolve()}getClientTokenOrThrow(){if(!this.clientToken)throw new Ei(fi.PaymentNotInitialized);return this.clientToken}getErrorsRequiredFields(e){const{ccNumber:t,ccExpiry:n}=e,r={};return t||(r.ccNumber=[{message:\"Credit card number is required\",type:\"required\"}]),n||(r.ccExpiry=[{message:\"Expiration date is required\",type:\"required\"}]),r}mapToCreditCard(e,t){return{data:{creditCard:{cardholderName:e.ccName,number:e.ccNumber,cvv:e.ccCvv,expirationDate:`${e.ccExpiry.month}/${e.ccExpiry.year}`,options:{validate:!1},billingAddress:t&&{countryCodeAlpha2:t.countryCode,locality:t.city,countryName:t.country,postalCode:t.postalCode,streetAddress:t.address2?`${t.address1} ${t.address2}`:t.address1}}},endpoint:\"payment_methods/credit_cards\",method:\"post\"}}present3DSChallenge(e,t,n){const{nonce:r,bin:i}=n;if(!this.threeDSecureOptions||!r)throw new Ei(fi.PaymentNotInitialized);const{addFrame:o,removeFrame:s,challengeRequested:a=!0,additionalInformation:c}=this.threeDSecureOptions,u=()=>no(this,void 0,void 0,function*(){const t=yield e.cancelVerifyCard();return l.cancel(new Vi),t}),d=t.toFixed(2),l=new st(e.verifyCard({addFrame:(e,t)=>{o&&o(e,t,u)},amount:Number(d),bin:i,challengeRequested:a,nonce:r,removeFrame:s,onLookupComplete:(e,t)=>{t()},collectDeviceData:!0,additionalInformation:c}));return l.promise}}const io={[ji]:{[eo.Client]:\"sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt\",[eo.PaypalCheckout]:\"sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O\",[eo.Paypal]:\"sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+\",[eo.LocalPayment]:\"sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT\",[eo.DataCollector]:\"sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV\",[eo.UsBankAccount]:\"sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ\",[eo.GooglePayment]:\"sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe\",[eo.ThreeDSecure]:\"sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB\",[eo.VisaCheckout]:\"sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT\",[eo.Venmo]:\"sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov\",[eo.HostedFields]:\"sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy\",[eo.Fastlane]:\"sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa\"},[Di]:{[eo.Client]:\"sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO\",[eo.PaypalCheckout]:\"sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/\",[eo.Paypal]:\"sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt\",[eo.LocalPayment]:\"sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH\",[eo.DataCollector]:\"sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO\",[eo.UsBankAccount]:\"sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW\",[eo.GooglePayment]:\"sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO\",[eo.ThreeDSecure]:\"sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym\",[eo.VisaCheckout]:\"sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS\",[eo.Venmo]:\"sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU\",[eo.HostedFields]:\"sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P\",[eo.Fastlane]:\"sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y\"},[Li]:{[eo.Client]:\"sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq\",[eo.PaypalCheckout]:\"sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh\",[eo.Paypal]:\"sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH\",[eo.LocalPayment]:\"sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC\",[eo.DataCollector]:\"sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc\",[eo.UsBankAccount]:\"sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F\",[eo.GooglePayment]:\"sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i\",[eo.ThreeDSecure]:\"sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D\",[eo.VisaCheckout]:\"sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv\",[eo.Venmo]:\"sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz\",[eo.HostedFields]:\"sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z\",[eo.Fastlane]:\"sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr\"}};var oo=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class so{constructor(e,t,n){this.scriptLoader=e,this.braintreeHostWindow=t,this.braintreeSDKVersionManager=n}loadClient(){return oo(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(eo.Client,\"client.min.js\")})}loadFastlane(){return oo(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(eo.Fastlane,\"fastlane.min.js\")})}loadPaypalCheckout(){return oo(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(eo.PaypalCheckout,\"paypal-checkout.min.js\")})}loadPaypal(){return oo(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(eo.Paypal,\"paypal.min.js\")})}loadLocalPayment(){return oo(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(eo.LocalPayment,\"local-payment.min.js\")})}loadDataCollector(){return oo(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(eo.DataCollector,\"data-collector.min.js\")})}loadUsBankAccount(){return oo(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(eo.UsBankAccount,\"us-bank-account.min.js\")})}loadGooglePayment(){return oo(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(eo.GooglePayment,\"google-payment.min.js\")})}load3DS(){return oo(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(eo.ThreeDSecure,\"three-d-secure.min.js\")})}loadVisaCheckout(){return this.loadBraintreeModuleOrThrow(eo.VisaCheckout,\"visa-checkout.min.js\")}loadVenmoCheckout(){return this.loadBraintreeModuleOrThrow(eo.Venmo,\"venmo.min.js\")}loadHostedFields(){return oo(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(eo.HostedFields,\"hosted-fields.min.js\")})}loadVisaCheckoutSdk(e){return oo(this,void 0,void 0,function*(){if(this.braintreeHostWindow.V)return this.braintreeHostWindow.V;const t=e?\"sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm\":\"sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6\";return this.scriptLoader.loadScript(`//${e?\"sandbox-\":\"\"}assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,{async:!0,attributes:{integrity:t,crossorigin:\"anonymous\"}}).then(()=>{if(!this.braintreeHostWindow.V)throw new Ri;return this.braintreeHostWindow.V})})}loadBraintreeModuleOrThrow(e,t){return oo(this,void 0,void 0,function*(){let n=this.getBraintreeModule(e);if(n)return n;const r=this.braintreeSDKVersionManager.getSDKVersion(),i=`//js.braintreegateway.com/web/${r}/js/${t}`,o=r in io?this.getIntegrityValuesByModuleName(e,r):void 0;if(yield this.scriptLoader.loadScript(i,o?{async:!0,attributes:{integrity:o,crossorigin:\"anonymous\"}}:void 0),n=this.getBraintreeModule(e),!n)throw new Ri;return n})}getBraintreeModule(e){var t;return null===(t=this.braintreeHostWindow.braintree)||void 0===t?void 0:t[e]}getIntegrityValuesByModuleName(e,t){const n=io[t][e];if(!n)throw new Error(\"Unexpected fileName value\");return n}}const ao=[\"ar_BH\",\"ar_DZ\",\"ar_EG\",\"ar_JO\",\"ar_KW\",\"ar_MA\",\"ar_OM\",\"ar_QA\",\"ar_SA\",\"ar_TN\",\"ar_YE\",\"ar_AE\",\"bg_BG\",\"cs_CZ\",\"da_DK\",\"da_FO\",\"da_GL\",\"de_AT\",\"de_CH\",\"de_DE\",\"de_LU\",\"el_GR\",\"en_AD\",\"en_AE\",\"en_AG\",\"en_AI\",\"en_AL\",\"en_AM\",\"en_AN\",\"en_AO\",\"en_AT\",\"en_AU\",\"en_AW\",\"en_AZ\",\"en_BB\",\"en_BE\",\"en_BH\",\"en_BJ\",\"en_BM\",\"en_BN\",\"en_BS\",\"en_BT\",\"en_BW\",\"en_BY\",\"en_BZ\",\"en_C2\",\"en_CA\",\"en_CD\",\"en_CG\",\"en_CH\",\"en_CI\",\"en_CK\",\"en_CL\",\"en_CM\",\"en_CN\",\"en_CO\",\"en_CR\",\"en_CV\",\"en_CY\",\"en_CZ\",\"en_DE\",\"en_DJ\",\"en_DK\",\"en_DM\",\"en_DO\",\"en_DZ\",\"en_EC\",\"en_EE\",\"en_EG\",\"en_ER\",\"en_ES\",\"en_ET\",\"en_FI\",\"en_FJ\",\"en_FK\",\"en_FM\",\"en_FO\",\"en_FR\",\"en_GA\",\"en_GB\",\"en_GD\",\"en_GE\",\"en_GF\",\"en_GI\",\"en_GL\",\"en_GM\",\"en_GN\",\"en_GP\",\"en_GR\",\"en_GT\",\"en_GW\",\"en_GY\",\"en_HK\",\"en_HN\",\"en_HR\",\"en_HU\",\"en_ID\",\"en_IE\",\"en_IL\",\"en_IN\",\"en_IS\",\"en_IT\",\"en_JM\",\"en_JO\",\"en_JP\",\"en_KE\",\"en_KG\",\"en_KH\",\"en_KI\",\"en_KM\",\"en_KN\",\"en_KR\",\"en_KW\",\"en_KY\",\"en_KZ\",\"en_LA\",\"en_LC\",\"en_LI\",\"en_LK\",\"en_LS\",\"en_LT\",\"en_LU\",\"en_LV\",\"en_MA\",\"en_MC\",\"en_MD\",\"en_ME\",\"en_MG\",\"en_MH\",\"en_MK\",\"en_ML\",\"en_MN\",\"en_MQ\",\"en_MR\",\"en_MS\",\"en_MT\",\"en_MU\",\"en_MV\",\"en_MW\",\"en_MY\",\"en_MZ\",\"en_NA\",\"en_NC\",\"en_NE\",\"en_NF\",\"en_NG\",\"en_NI\",\"en_NL\",\"en_NO\",\"en_NP\",\"en_NR\",\"en_NU\",\"en_NZ\",\"en_OM\",\"en_PA\",\"en_PE\",\"en_PF\",\"en_PG\",\"en_PH\",\"en_PL\",\"en_PM\",\"en_PN\",\"en_PT\",\"en_PW\",\"en_PY\",\"en_QA\",\"en_RE\",\"en_RO\",\"en_RS\",\"en_RU\",\"en_RW\",\"en_SA\",\"en_SB\",\"en_SC\",\"en_SE\",\"en_SG\",\"en_SH\",\"en_SI\",\"en_SJ\",\"en_SK\",\"en_SL\",\"en_SM\",\"en_SN\",\"en_SO\",\"en_SR\",\"en_ST\",\"en_SV\",\"en_SZ\",\"en_TC\",\"en_TD\",\"en_TG\",\"en_TH\",\"en_TJ\",\"en_TM\",\"en_TN\",\"en_TO\",\"en_TR\",\"en_TT\",\"en_TV\",\"en_TW\",\"en_TZ\",\"en_UA\",\"en_UG\",\"en_US\",\"en_UY\",\"en_VA\",\"en_VC\",\"en_VE\",\"en_VG\",\"en_VN\",\"en_VU\",\"en_WF\",\"en_WS\",\"en_YE\",\"en_YT\",\"en_ZA\",\"en_ZM\",\"en_ZW\",\"es_AD\",\"es_AI\",\"es_AO\",\"es_AR\",\"es_AW\",\"es_BB\",\"es_BJ\",\"es_BM\",\"es_BO\",\"es_BS\",\"es_BZ\",\"es_CD\",\"es_CG\",\"es_CK\",\"es_CL\",\"es_CO\",\"es_CR\",\"es_CV\",\"es_DJ\",\"es_DM\",\"es_DO\",\"es_DZ\",\"es_EC\",\"es_EG\",\"es_ER\",\"es_ES\",\"es_ET\",\"es_FJ\",\"es_FK\",\"es_FO\",\"es_GA\",\"es_GD\",\"es_GE\",\"es_GI\",\"es_GL\",\"es_GM\",\"es_GN\",\"es_GT\",\"es_GW\",\"es_GY\",\"es_HN\",\"es_IE\",\"es_JM\",\"es_JO\",\"es_KE\",\"es_KG\",\"es_KI\",\"es_KM\",\"es_KN\",\"es_KW\",\"es_KY\",\"es_KZ\",\"es_LC\",\"es_LI\",\"es_LS\",\"es_LU\",\"es_MA\",\"es_MG\",\"es_MH\",\"es_ML\",\"es_MR\",\"es_MS\",\"es_MU\",\"es_MW\",\"es_MX\",\"es_MZ\",\"es_NA\",\"es_NC\",\"es_NE\",\"es_NF\",\"es_NI\",\"es_NR\",\"es_NU\",\"es_NZ\",\"es_OM\",\"es_PA\",\"es_PE\",\"es_PF\",\"es_PG\",\"es_PM\",\"es_PN\",\"es_PW\",\"es_PY\",\"es_QA\",\"es_RS\",\"es_RW\",\"es_SA\",\"es_SB\",\"es_SC\",\"es_SH\",\"es_SJ\",\"es_SL\",\"es_SM\",\"es_SN\",\"es_SO\",\"es_SR\",\"es_ST\",\"es_SV\",\"es_SZ\",\"es_TC\",\"es_TD\",\"es_TG\",\"es_TJ\",\"es_TM\",\"es_TN\",\"es_TT\",\"es_TV\",\"es_UA\",\"es_UG\",\"es_US\",\"es_UY\",\"es_VA\",\"es_VC\",\"es_VE\",\"es_VG\",\"es_VU\",\"es_WF\",\"es_YE\",\"es_ZM\",\"et_EE\",\"fi_FI\",\"fr_AD\",\"fr_AE\",\"fr_AI\",\"fr_AM\",\"fr_AO\",\"fr_AW\",\"fr_AZ\",\"fr_BB\",\"fr_BE\",\"fr_BF\",\"fr_BI\",\"fr_BJ\",\"fr_BM\",\"fr_BS\",\"fr_BZ\",\"fr_CA\",\"fr_CD\",\"fr_CG\",\"fr_CH\",\"fr_CI\",\"fr_CK\",\"fr_CM\",\"fr_CV\",\"fr_DJ\",\"fr_DM\",\"fr_DO\",\"fr_DZ\",\"fr_EC\",\"fr_ER\",\"fr_ET\",\"fr_FJ\",\"fr_FK\",\"fr_FO\",\"fr_FR\",\"fr_GA\",\"fr_GD\",\"fr_GE\",\"fr_GF\",\"fr_GI\",\"fr_GL\",\"fr_GM\",\"fr_GN\",\"fr_GP\",\"fr_GT\",\"fr_GW\",\"fr_GY\",\"fr_HN\",\"fr_IE\",\"fr_JM\",\"fr_JO\",\"fr_KE\",\"fr_KG\",\"fr_KI\",\"fr_KM\",\"fr_KN\",\"fr_KW\",\"fr_KY\",\"fr_KZ\",\"fr_LC\",\"fr_LI\",\"fr_LS\",\"fr_LU\",\"fr_MA\",\"fr_MC\",\"fr_MG\",\"fr_MH\",\"fr_ML\",\"fr_MQ\",\"fr_MR\",\"fr_MS\",\"fr_MU\",\"fr_MW\",\"fr_MZ\",\"fr_NA\",\"fr_NC\",\"fr_NE\",\"fr_NF\",\"fr_NI\",\"fr_NR\",\"fr_NU\",\"fr_NZ\",\"fr_OM\",\"fr_PA\",\"fr_PE\",\"fr_PF\",\"fr_PG\",\"fr_PM\",\"fr_PN\",\"fr_PW\",\"fr_QA\",\"fr_RE\",\"fr_RS\",\"fr_RW\",\"fr_SA\",\"fr_SB\",\"fr_SC\",\"fr_SH\",\"fr_SJ\",\"fr_SL\",\"fr_SM\",\"fr_SN\",\"fr_SO\",\"fr_SR\",\"fr_ST\",\"fr_SV\",\"fr_SZ\",\"fr_TC\",\"fr_TD\",\"fr_TG\",\"fr_TJ\",\"fr_TM\",\"fr_TN\",\"fr_TT\",\"fr_TV\",\"fr_UA\",\"fr_UG\",\"fr_US\",\"fr_UY\",\"fr_VA\",\"fr_VC\",\"fr_VE\",\"fr_VG\",\"fr_VU\",\"fr_WF\",\"fr_YE\",\"fr_YT\",\"fr_ZA\",\"fr_ZM\",\"he_IL\",\"hu_HU\",\"id_ID\",\"it_IT\",\"ja_JP\",\"ko_KR\",\"lv_LV\",\"lt_LT\",\"ms_BN\",\"ms_MY\",\"nl_BE\",\"nl_NL\",\"pl_PL\",\"pt_BR\",\"pt_PT\",\"ro_RO\",\"ru_EE\",\"ru_LT\",\"ru_LV\",\"ru_RU\",\"ru_UA\",\"si_LK\",\"sk_SK\",\"sl_SI\",\"sq_AL\",\"sv_SE\",\"tl_PH\",\"th_TH\",\"tr_TR\",\"vi_VN\",\"zh_C2\",\"zh_CN\",\"zh_HK\",\"zh_TW\",\"zh_AD\",\"zh_AE\",\"zh_AI\",\"zh_AO\",\"zh_AW\",\"zh_BB\",\"zh_BH\",\"zh_BJ\",\"zh_BM\",\"zh_BS\",\"zh_BZ\",\"zh_CD\",\"zh_CG\",\"zh_CK\",\"zh_CL\",\"zh_CO\",\"zh_CV\",\"zh_DJ\",\"zh_DM\",\"zh_DO\",\"zh_DZ\",\"zh_EC\",\"zh_EG\",\"zh_ER\",\"zh_ET\",\"zh_FJ\",\"zh_FK\",\"zh_FO\",\"zh_GA\",\"zh_GD\",\"zh_GE\",\"zh_GI\",\"zh_GL\",\"zh_GM\",\"zh_GN\",\"zh_GT\",\"zh_GW\",\"zh_GY\",\"zh_HN\",\"zh_IE\",\"zh_JM\",\"zh_JO\",\"zh_KE\",\"zh_KG\",\"zh_KI\",\"zh_KM\",\"zh_KN\",\"zh_KW\",\"zh_KY\",\"zh_KZ\",\"zh_LC\",\"zh_LI\",\"zh_LS\",\"zh_LT\",\"zh_LU\",\"zh_MA\",\"zh_MG\",\"zh_MH\",\"zh_ML\",\"zh_MR\",\"zh_MS\",\"zh_MU\",\"zh_MW\",\"zh_MZ\",\"zh_NA\",\"zh_NC\",\"zh_NE\",\"zh_NF\",\"zh_NI\",\"zh_NR\",\"zh_NU\",\"zh_NZ\",\"zh_OM\",\"zh_PA\",\"zh_PE\",\"zh_PF\",\"zh_PG\",\"zh_PM\",\"zh_PN\",\"zh_PW\",\"zh_QA\",\"zh_RS\",\"zh_RW\",\"zh_SA\",\"zh_SB\",\"zh_SC\",\"zh_SH\",\"zh_SJ\",\"zh_SL\",\"zh_SM\",\"zh_SN\",\"zh_SO\",\"zh_SR\",\"zh_ST\",\"zh_SV\",\"zh_SZ\",\"zh_TC\",\"zh_TD\",\"zh_TG\",\"zh_TJ\",\"zh_TM\",\"zh_TN\",\"zh_TT\",\"zh_TV\",\"zh_UA\",\"zh_UG\",\"zh_US\",\"zh_UY\",\"zh_VA\",\"zh_VC\",\"zh_VE\",\"zh_VG\",\"zh_VU\",\"zh_WF\",\"zh_YE\",\"zh_ZA\",\"zh_ZM\"];function co(e){if(!e)return;let t;if(e.includes(\"-\")){const[n,r]=e.split(\"-\");t=`${n}_${r.toUpperCase()}`}else t=`${e}_${e.toUpperCase()}`;return ao.includes(t)?t:void 0}var uo,lo,ho,po,fo,mo,yo,go,_o,vo,bo,So=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class Eo{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,r,i){return So(this,void 0,void 0,function*(){if(!this.window.paypal||i){const i=this.getPayPalSdkScriptConfigOrThrow(e,t,n,r);if(yield this.loadPayPalSdk(i),!this.window.paypal)throw new Ri}return this.window.paypal})}getPayPalFastlaneSdk(e,t,n,r){return So(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const i=this.getPayPalFastlaneSdkConfiguration(e,t,n,r);if(yield this.loadPayPalSdk(i),!this.window.paypalFastlaneSdk)throw new Ri}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,r,i){return So(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||i){const i=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,r);yield this.loadPayPalSdk(i)}if(!this.window.paypalGooglePay)throw new Ri;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return So(this,void 0,void 0,function*(){if(!this.window.paypalApms){const r=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(r),!this.window.paypalApms)throw new Ri}return this.window.paypalApms})}getPayPalMessages(e,t,n){return So(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const r=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(r)}if(!this.window.paypalMessages)throw new Ri;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return So(this,void 0,void 0,function*(){const n=this.transformConfig(e),r=this.transformConfig(t),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:r})})}getPayPalSdkScriptConfigOrThrow(e,t,n,r=!0){const{id:i,clientToken:o,initializationData:s}=e;if(!s||!s.clientId)throw new Si(pi.MissingPaymentMethod);const{intent:a,clientId:c,merchantId:u,buyerCountry:d,attributionId:l,isVenmoEnabled:h,isHostedCheckoutEnabled:p,isPayPalCreditAvailable:f,isDeveloperModeApplicable:m,availableAlternativePaymentMethods:y=[],enabledAlternativePaymentMethods:g=[],isGooglePayEnabled:_}=s,v=p||r,b=\"paypalcommercecreditcards\"===i||\"bigcommerce_payments_creditcards\"===i,S=b?[\"card\"]:[],E=f?[\"credit\",\"paylater\"]:[],C=h?[\"venmo\"]:[],w=_?[\"googlepay\"]:[],I=r?[\"card-fields\"]:[],O=[...b?[]:[\"card\"],...f?[]:[\"credit\",\"paylater\"],...h?[]:[\"venmo\"],...y.filter(e=>!g.includes(e))],P=[...S,...E,...C,...g],A=co(n);return{options:Object.assign(Object.assign({\"client-id\":c,\"merchant-id\":u,\"enable-funding\":P.length>0?P:void 0,\"disable-funding\":O.length>0?O:void 0,commit:v,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...w,...I],currency:t,intent:a},m&&{\"buyer-country\":d}),A&&{locale:A}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":o}}}getPayPalFastlaneSdkConfiguration(e,t,n,r){const{clientToken:i,initializationData:o}=e;if(!o||!o.clientId)throw new Si(pi.MissingPaymentMethod);const{intent:s,clientId:a,merchantId:c,attributionId:u}=o,d=co(r);return{options:Object.assign(Object.assign({\"client-id\":a,\"merchant-id\":c,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t},d&&{locale:d}),{intent:s}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":u,\"data-sdk-client-token\":i}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,r=!0){const{clientToken:i,initializationData:o}=e;if(!o||!o.clientId)throw new Si(pi.MissingPaymentMethod);const{intent:s,clientId:a,merchantId:c,buyerCountry:u,attributionId:d,isHostedCheckoutEnabled:l,isDeveloperModeApplicable:h}=o,p=l||r,f=co(n);return{options:Object.assign(Object.assign({\"client-id\":a,\"merchant-id\":c,commit:p,components:[\"googlepay\"],currency:t,intent:s},h&&{\"buyer-country\":u}),f&&{locale:f}),attributes:{\"data-partner-attribution-id\":d,\"data-client-token\":i,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:r}=e;if(!r||!r.clientId)throw new Si(pi.MissingPaymentMethod);const{intent:i,clientId:o,merchantId:s,buyerCountry:a,attributionId:c,isDeveloperModeApplicable:u,availableAlternativePaymentMethods:d=[],enabledAlternativePaymentMethods:l=[]}=r,h=l,p=d.filter(e=>!l.includes(e)),f=co(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":s,\"enable-funding\":h.length>0?h:void 0,\"disable-funding\":p.length>0?p:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:i},u&&{\"buyer-country\":a}),f&&{locale:f}),attributes:{\"data-partner-attribution-id\":c,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:r}=e;if(!r||!r.clientId)throw new Si(pi.MissingPaymentMethod);const{clientId:i,merchantId:o,attributionId:s,isDeveloperModeApplicable:a,buyerCountry:c}=r,u=co(n);return{options:Object.assign(Object.assign({\"client-id\":i,\"merchant-id\":o,components:[\"messages\"],currency:t},a&&{\"buyer-country\":c}),u&&{locale:u}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":s}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const r=e[n];null==r||\"\"===r||Array.isArray(r)&&0===r.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(r)?r.join(\",\"):r}))}),t}}!function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(uo||(uo={}));class Co{static get(e){const t=`${encodeURIComponent(`${e}`)}=`,n=document.cookie;let r=null;const i=n.indexOf(t);if(i>-1){let e=n.indexOf(\";\",i);-1===e&&(e=n.length),r=decodeURIComponent(n.substring(i+t.length,e))}return r}static set(e,t,n={secure:!0}){let r=`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;const{expires:i,path:o,domain:s,secure:a}=n;if(i)r+=`; expires=${i.toUTCString()}`;else{const e=new Date,t=60;e.setTime(e.getTime()+60*t*1e3),r+=`; expires=${e.toUTCString()}`}o&&(r+=`; path=${o}`),s&&(r+=`; domain=${s}`),a&&(r+=\"; secure\"),document.cookie=r}static remove(e,t){Co.set(e,\"\",Object.assign({expires:new Date(0)},t))}}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(lo||(lo={})),function(e){e.Always=\"SCA_ALWAYS\"}(ho||(ho={})),function(e){e.Succeeded=\"succeeded\",e.Cancelled=\"cancelled\",e.Errored=\"errored\"}(po||(po={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(fo||(fo={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(mo||(mo={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(yo||(yo={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(go||(go={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"canceled\",e.UNRECOGNIZED=\"unrecognized\"}(_o||(_o={})),function(e){e.OXXO=\"oxxo\"}(vo||(vo={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(bo||(bo={}));var wo,Io,Oo,Po,Ao,To,ko,xo,Ro,Mo,No,Lo,Do=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class jo{constructor(){this.window=window}initializePayPalFastlane(e,t,n){return Do(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\"),window.localStorage.setItem(\"axoEnv\",\"sandbox\")),!this.window.paypalFastlane){const t={root:{backgroundColorPrimary:\"transparent\"}};this.window.paypalFastlane=yield e.Fastlane({styles:n||t})}return this.window.paypalFastlane})}getPayPalFastlaneOrThrow(){if(!this.window.paypalFastlane)throw new Ri;return this.window.paypalFastlane}lookupCustomerOrThrow(e){return Do(this,void 0,void 0,function*(){return this.getPayPalFastlaneOrThrow().identity.lookupCustomerByEmail(e)})}triggerAuthenticationFlowOrThrow(e){return Do(this,void 0,void 0,function*(){return e?this.getPayPalFastlaneOrThrow().identity.triggerAuthenticationFlow(e):{}})}updateStorageSessionId(e){const t=new Date;t.setDate(t.getDate()+14);const n={expires:t,secure:!0};Co.set(\"bc-fastlane-sessionId\",e,n)}removeStorageSessionId(){Co.remove(\"bc-fastlane-sessionId\")}getStorageSessionId(){return Co.get(\"bc-fastlane-sessionId\")||\"\"}mapPayPalFastlaneProfileToBcCustomerData(e,t){var n,r,i;const{authenticationState:o,profileData:s}=t,a=null===(i=null===(r=null===(n=null==s?void 0:s.card)||void 0===n?void 0:n.paymentSource)||void 0===r?void 0:r.card)||void 0===i?void 0:i.billingAddress,c=null==s?void 0:s.shippingAddress,u=null==s?void 0:s.name,d=null==s?void 0:s.card,l=c?this.mapPayPalToBcAddress(c.address,c.name,c.phoneNumber):void 0,h=a&&u?this.mapPayPalToBcAddress(a,u,null==c?void 0:c.phoneNumber):void 0,p=d?this.mapPayPalToBcInstrument(e,d):[],f=this.filterAddresses([l,h]);return{authenticationState:o||_o.UNRECOGNIZED,addresses:f,billingAddress:h,shippingAddress:l,instruments:p}}mapPayPalToBcInstrument(e,t){const{id:n,paymentSource:r}=t,{brand:i,expiry:o,lastDigits:s}=r.card,[a,c]=o.split(\"-\");return[{bigpayToken:n,brand:i,defaultInstrument:!1,expiryMonth:c,expiryYear:a,iin:\"\",last4:s,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:uo.PAN,type:\"card\"}]}mapBcToPayPalAddress(e){return{company:(null==e?void 0:e.company)||\"\",addressLine1:(null==e?void 0:e.address1)||\"\",addressLine2:(null==e?void 0:e.address2)||\"\",adminArea1:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",adminArea2:(null==e?void 0:e.city)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\"}}mapPayPalToBcAddress(e,t,n,r){const[i,o]=t.fullName.split(\" \"),s=(null==n?void 0:n.nationalNumber)||\"\",a=(null==n?void 0:n.countryCode)||\"\";return{id:Date.now(),type:\"paypal-address\",firstName:t.firstName||i||\"\",lastName:t.lastName||o||\"\",company:e.company||\"\",address1:e.addressLine1,address2:e.addressLine2||\"\",city:e.adminArea2,stateOrProvince:e.adminArea1,stateOrProvinceCode:e.adminArea1,country:e.countryCode||\"\",countryCode:e.countryCode||\"\",postalCode:e.postalCode,phone:a+s,customFields:r||[]}}filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this.isEqualAddresses(e,t))?e:[...e,t]:e,[])}isEqualAddresses(e,t){return(0,E.isEqual)(this.normalizeAddress(e),this.normalizeAddress(t))}normalizeAddress(e){return(0,E.omit)(e,[\"id\",\"phone\"])}}!function(e){e.SHIPPING=\"shipping\",e.BILLING=\"billing\"}(wo||(wo={})),function(e){e.SPLIT=\"split\",e.FULL=\"full\",e.ORGANIZATION=\"organization\"}(Io||(Io={})),function(e){e.Open=\"open\",e.Expired=\"expired\",e.Complete=\"complete\"}(Oo||(Oo={})),function(e){e.Paid=\"paid\",e.UnPaid=\"unpaid\",e.NoPaymentRequired=\"no_payment_required\"}(Po||(Po={})),function(e){e.SUCCESS=\"success\",e.ERROR=\"error\"}(Ao||(Ao={})),function(e){e.CreditCard=\"card\",e.ACH=\"us_bank_account\",e.Link=\"link\",e.EPS=\"eps\",e.GRABPAY=\"grabpay\",e.BANCONTACT=\"bancontact\",e.IDEAL=\"ideal\",e.ALIPAY=\"alipay\",e.KLARNA=\"klarna\",e.OCS=\"optimized_checkout\",e.CHECKOUT_SESSION=\"checkout_session\"}(To||(To={})),function(e){e.NEVER=\"never\",e.AUTO=\"auto\",e.ALWAYS=\"always\",e.PAYMENT=\"payment\",e.IF_REQUIRED=\"if_required\"}(ko||(ko={})),function(e){e.V3=\"v3\",e.ACACIA=\"acacia\",e.BASIL=\"basil\",e.CLOVER=\"clover\"}(xo||(xo={})),function(e){e.PAYMENT=\"payment\",e.AUTHENTICATION=\"linkAuthentication\",e.SHIPPING=\"address\",e.EXPRESS_CHECKOUT=\"expressCheckout\"}(Ro||(Ro={})),function(e){e.REQUIRES_PAYMENT_METHOD=\"requires_payment_method\",e.REQUIRES_CONFIRMATION=\"requires_confirmation\",e.REQUIRES_ACTION=\"requires_action\",e.PROCESSING=\"processing\",e.SUCCEEDED=\"succeeded\",e.CANCELED=\"canceled\"}(Mo||(Mo={})),function(e){e.CLICK=\"click\",e.CHANGE=\"change\",e.READY=\"ready\",e.SHIPPING_ADDRESS_CHANGE=\"shippingaddresschange\",e.SHIPPING_RATE_CHANGE=\"shippingratechange\",e.CONFIRM=\"confirm\",e.CANCEL=\"cancel\",e.LOADER_START=\"loaderstart\"}(No||(No={})),function(e){e.ON_SESSION=\"on_session\",e.OFF_SESSION=\"off_session\"}(Lo||(Lo={}));var Fo=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class Uo{constructor(e,t=window){this.scriptLoader=e,this.stripeWindow=t}getStripeClient(e,t,n,r,i){return Fo(this,void 0,void 0,function*(){if(this.stripeWindow.bcStripeClient)return this.stripeWindow.bcStripeClient;const o=yield this.load(n),{stripePublishableKey:s,stripeConnectedAccount:a}=e,c=o(s,Object.assign(Object.assign(Object.assign(Object.assign({},a?{stripeAccount:a}:{}),t?{locale:t}:{}),r?{betas:r}:{}),i?{apiVersion:i}:{}));return Object.assign(this.stripeWindow,{bcStripeClient:c}),c})}getElements(e,t){return Fo(this,void 0,void 0,function*(){let n=this.stripeWindow.bcStripeElements;return n?yield this.updateStripeElements(t):(n=e.elements(t),Object.assign(this.stripeWindow,{bcStripeElements:n})),n})}updateStripeElements(e){return Fo(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeElements;t&&(t.update(e),yield t.fetchUpdates())})}getStripeCheckout(e,t){return Fo(this,void 0,void 0,function*(){let n=yield this.getStoredStripeCheckout(t);return n||(n=yield e.initCheckout(t),Object.assign(this.stripeWindow,{bcStripeCheckout:n})),n})}load(e){return Fo(this,void 0,void 0,function*(){if(!this.stripeWindow.Stripe&&(yield this.scriptLoader.loadScript(this.getScriptUrl(e)),!this.stripeWindow.Stripe))throw new Ri;return this.stripeWindow.Stripe})}getScriptUrl(e){return e&&e!==xo.V3?`https://js.stripe.com/${e}/stripe.js`:\"https://js.stripe.com/v3/\"}getStoredStripeCheckout(e){return Fo(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeCheckout;if(t)try{const{actions:n,error:r}=yield t.loadActions();if(r||!n)return void this.logErrorToConsole(r);const i=yield n.getSession(),o=e.clientSecret.split(\"_secret_\")[0];if(i.id===o)return t}catch(e){return void this.logErrorToConsole(e)}})}logErrorToConsole(e){e?console.error(e):console.error(\"No stripe checkout actions available on loadActions().\")}}var Bo,zo,qo,Ho,Vo,Go,Yo,Wo,$o=n(906),Ko=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class Qo{constructor(e,t,n,r,i){this._store=e,this._consignmentActionCreator=t,this._paymentMethodActionCreator=n,this._amazonPayV2PaymentProcessor=r,this._shippingStrategyActionCreator=i}updateAddress(e,t){const n=this._store.getState().shippingAddress.getShippingAddress();if(!n)throw new P(b.MissingShippingAddress);const r=Object.assign(Object.assign({},n),{customFields:e.customFields});return this._store.dispatch(this._consignmentActionCreator.updateAddress(r,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}initialize(e){return Ko(this,void 0,void 0,function*(){const{amazonpay:t,methodId:n}=e;if(!t||!n)throw new he('Unable to proceed because \"options.amazonpay\" argument is not provided.');const r=(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(n))).paymentMethods.getPaymentMethodOrThrow(n);yield this._amazonPayV2PaymentProcessor.initialize(r);const{paymentToken:i,region:o}=r.initializationData,s=t.editAddressButtonId;if(i&&s){const e=this._shouldShowLoadingSpinner(o);this._bindEditButton(s,i,\"changeAddress\",e)}return this._store.getState()})}deinitialize(){return Ko(this,void 0,void 0,function*(){return yield this._amazonPayV2PaymentProcessor.deinitialize(),Promise.resolve(this._store.getState())})}_bindEditButton(e,t,n,r){const i=document.getElementById(e);if(i&&i.parentNode){if(r){const e=i.cloneNode(!0);i.parentNode.replaceChild(e,i),e.addEventListener(\"click\",()=>this._showLoadingSpinner())}this._amazonPayV2PaymentProcessor.bindButton(e,t,n)}}_showLoadingSpinner(){return this._store.dispatch(this._shippingStrategyActionCreator.widgetInteraction(()=>new Promise($o.l)),{queueId:\"widgetInteraction\"})}_shouldShowLoadingSpinner(e){return\"us\"!==e}}function Zo(e){return\"string\"!=typeof e}function Jo(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}!function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(Bo||(Bo={})),function(e){e.Completed=\"COMPLETED\",e.Pending=\"PENDING\",e.Failed=\"FAILED\"}(zo||(zo={})),function(e){e.TRUSTLY=\"trustly\"}(qo||(qo={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"cancelled\",e.UNRECOGNIZED=\"unrecognized\"}(Ho||(Ho={})),function(e){e.Customer=\"CUSTOMER\",e.Merchant=\"MERCHANT\",e.Network=\"NETWORK\",e.Internal=\"INTERNAL\",e.Unknown=\"UNKNOWN\"}(Vo||(Vo={})),function(e){e.KountNotEnabled=\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"}(Go||(Go={})),function(e){e.Visa=\"visa\",e.Mastercard=\"mastercard\",e.AmericanExpress=\"american-express\",e.DinersClub=\"diners-club\",e.Discover=\"discover\",e.Jcb=\"jcb\",e.UnionPay=\"union-pay\",e.Maestro=\"maestro\",e.Elo=\"elo\",e.Mir=\"mir\",e.Hiper=\"hiper\",e.Hipercard=\"hipercard\"}(Yo||(Yo={})),function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(Wo||(Wo={}));var Xo=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class es{constructor(e,t,n,r,i,o){this._store=e,this._billingAddressActionCreator=t,this._consignmentActionCreator=n,this._paymentMethodActionCreator=r,this._paymentProviderCustomerActionCreator=i,this._braintreeIntegrationService=o}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}deinitialize(){return Promise.resolve(this._store.getState())}initialize(e){var t;return Xo(this,void 0,void 0,function*(){const{methodId:n,braintreefastlane:r,fastlane:i}=e||{},o=i||r,{onPayPalFastlaneAddressChange:s}=o||{};if(!n)throw new he('Unable to proceed because \"methodId\" argument is not provided.');const a=this._store.getState();if(!a.customer.getCustomerOrThrow().isGuest)return Promise.resolve(this._store.getState());try{if(this._shouldRunAuthenticationFlow()){const e=a.paymentMethods.getPaymentMethod(n),{clientToken:r,isFastlaneStylingEnabled:i}=(null==e?void 0:e.initializationData)||{};r||(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(n)));const s=function(e,t){if(t||e)return function(e){var t,n;const r={},i=(0,E.omitBy)(e.root,Zo),o=(0,E.omitBy)(e.input,Zo),s=(0,E.omitBy)(e.toggle,Zo),a=(0,E.omitBy)(null===(t=e.text)||void 0===t?void 0:t.body,Zo),c=(0,E.omitBy)(null===(n=e.text)||void 0===n?void 0:n.caption,Zo),u=e.branding;return Object.keys(i).length&&(r.root=i),Object.keys(o).length&&(r.input=o),Object.keys(s).length&&(r.toggle=s),Object.keys(a).length&&(r.text={},r.text.body=a),Object.keys(c).length&&(r.text=Object.assign({},r.text),r.text.caption=c),u&&(r.branding=u),r}(function(e,t){var n,r,i,o,s,a,c,u,d,l,h,p,f,m,y,g,_,v,b,S,E,C;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(f=null==t?void 0:t.toggle)||void 0===f?void 0:f.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(g=null===(y=null==t?void 0:t.text)||void 0===y?void 0:y.body)||void 0===g?void 0:g.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(v=null===(_=null==t?void 0:t.text)||void 0===_?void 0:_.body)||void 0===v?void 0:v.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(S=null===(b=null==t?void 0:t.text)||void 0===b?void 0:b.caption)||void 0===S?void 0:S.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(C=null===(E=null==t?void 0:t.text)||void 0===E?void 0:E.caption)||void 0===C?void 0:C.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}(i?null===(t=null==e?void 0:e.initializationData)||void 0===t?void 0:t.fastlaneStyles:void 0,null==o?void 0:o.styles);yield this._runAuthenticationFlowOrThrow(n,s)}\"function\"==typeof s&&(yield this._shouldUseBraintreeFastlaneShippingComponent(n))&&s(()=>this._handleBraintreeFastlaneShippingAddressChange())}catch(e){}return Promise.resolve(this._store.getState())})}_shouldRunAuthenticationFlow(){var e;const t=this._store.getState(),n=null===(e=t.cart.getCart())||void 0===e?void 0:e.id,r=Co.get(\"bc-fastlane-sessionId\")||\"\",i=t.paymentProviderCustomer.getPaymentProviderCustomer(),o=Jo(i)?i:{};return(null==o?void 0:o.authenticationState)!==Ho.CANCELED&&!(null==o?void 0:o.authenticationState)&&r===n}_runAuthenticationFlowOrThrow(e,t){var n,r;return Xo(this,void 0,void 0,function*(){const i=this._store.getState(),o=i.cart.getCartOrThrow(),s=i.countries.getCountries()||[],a=i.paymentMethods.getPaymentMethodOrThrow(e),{clientToken:c,config:u}=a;if(!c)throw new P(b.MissingPaymentMethod);this._braintreeIntegrationService.initialize(c);const d=yield this._braintreeIntegrationService.getBraintreeFastlane(null==o?void 0:o.id,null==u?void 0:u.testMode,t),l=(null===(n=i.customer.getCustomer())||void 0===n?void 0:n.email)||(null===(r=i.billingAddress.getBillingAddress())||void 0===r?void 0:r.email);if(!l)return;const{lookupCustomerByEmail:h,triggerAuthenticationFlow:p}=d.identity,{customerContextId:f}=yield h(l);if(!f)return;const{authenticationState:m,profileData:y}=yield p(f);if(m===Ho.CANCELED)return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({authenticationState:m,addresses:[],instruments:[]})),void Co.remove(\"bc-fastlane-sessionId\");const g=this._getPayPalBillingAddress(y),_=y.shippingAddress,v=y.shippingAddress.phoneNumber,S=this._mapPayPalToBcAddress(_,s,v),E=this._mapPayPalToBcAddress(g,s,v);if(E&&S){const t=this._mergeShippingAndBillingAddresses(S,E),n=this._mapPayPalToBcInstrument(e,y.card),r=n?[n]:[];yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({authenticationState:m,addresses:t,instruments:r})),E&&(yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(Object.assign(Object.assign({},E),{id:String(E.id)})))),S&&o.lineItems.physicalItems.length>0&&(yield this._store.dispatch(this._consignmentActionCreator.updateAddress(S)))}})}_getPayPalBillingAddress(e){const{name:t,card:n}=e,r=n.paymentSource.card.billingAddress;return Object.assign(Object.assign({},r),{firstName:r.firstName||(null==t?void 0:t.firstName),lastName:r.lastName||(null==t?void 0:t.lastName)})}_getCountryNameByCountryCode(e,t){const n=t.find(t=>t.code===e);return(null==n?void 0:n.name)||\"\"}_mapPayPalToBcAddress(e,t,n,r){return{id:Number(Date.now()),type:\"paypal-address\",firstName:e.firstName||\"\",lastName:e.lastName||\"\",company:e.company||\"\",address1:e.streetAddress,address2:e.extendedAddress||\"\",city:e.locality,stateOrProvince:e.region,stateOrProvinceCode:e.region,country:this._getCountryNameByCountryCode(e.countryCodeAlpha2,t),countryCode:e.countryCodeAlpha2,postalCode:e.postalCode,phone:n||\"\",customFields:r||[]}}_normalizeAddress(e){return(0,E.omit)(e,[\"id\"])}_mergeShippingAndBillingAddresses(e,t){return(0,E.isEqual)(this._normalizeAddress(e),this._normalizeAddress(t))?[e]:[e,t]}_mapPayPalToBcInstrument(e,t){if(!t)return;const{id:n,paymentSource:r}=t,{brand:i,expiry:o,lastDigits:s}=r.card,[a,c]=o.split(\"-\");return{bigpayToken:n,brand:i,defaultInstrument:!1,expiryMonth:c,expiryYear:a,iin:\"\",last4:s,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:Wo.CVV,type:\"card\"}}_handleBraintreeFastlaneShippingAddressChange(){var e;return Xo(this,void 0,void 0,function*(){const t=this._store.getState().countries.getCountries()||[],n=yield this._braintreeIntegrationService.getBraintreeFastlane(),{selectionChanged:r,selectedAddress:i}=yield n.profile.showShippingAddressSelector();if(r){const n=this._store.getState(),r=n.shippingAddress.getShippingAddressesOrThrow(),o=n.paymentProviderCustomer.getPaymentProviderCustomer(),s=Jo(o)?o:{},a=this._mapPayPalToBcAddress(i,t,i.phoneNumber,null===(e=r[0])||void 0===e?void 0:e.customFields);if(a){const e=this._filterAddresses([a,...s.addresses||[]]);return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(Object.assign(Object.assign({},s),{addresses:e}))),yield this._store.dispatch(this._consignmentActionCreator.updateAddress(a)),a}}})}_filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this._isEqualAddresses(e,t))?e:[...e,t]:e,[])}_isEqualAddresses(e,t){return(0,E.isEqual)(this._normalizeAddress(e),this._normalizeAddress(t))}_shouldUseBraintreeFastlaneShippingComponent(e){var t;return Xo(this,void 0,void 0,function*(){const n=this._store.getState().paymentProviderCustomer.getPaymentProviderCustomer(),r=Jo(n)?n:{};if(r&&(null==r?void 0:r.authenticationState)!==Ho.CANCELED){const n=yield this._getBraintreePaymentMethodOrThrow(e);return!!(null===(t=null==n?void 0:n.initializationData)||void 0===t?void 0:t.isFastlaneEnabled)}return!1})}_getBraintreePaymentMethodOrThrow(e){return Xo(this,void 0,void 0,function*(){const t=this._store.getState().paymentMethods.getPaymentMethod(e);return t||(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e))).paymentMethods.getPaymentMethodOrThrow(e)})}}class ts{constructor(e,t){this._store=e,this._consignmentActionCreator=t}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}initialize(){return Promise.resolve(this._store.getState())}deinitialize(){return Promise.resolve(this._store.getState())}}function ns(e){return\"string\"!=typeof e}var rs=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}c((r=r.apply(e,t||[])).next())})};class is{constructor(e,t,n,r,i,o,s){this._store=e,this._billingAddressActionCreator=t,this._consignmentActionCreator=n,this._paymentMethodActionCreator=r,this._paymentProviderCustomerActionCreator=i,this._paypalSdkScriptLoader=o,this._paypalCommerceFastlaneUtils=s}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}deinitialize(){return Promise.resolve(this._store.getState())}initialize(e){return rs(this,void 0,void 0,function*(){const{methodId:t,paypalcommercefastlane:n,fastlane:r}=e||{},i=r||n,{onPayPalFastlaneAddressChange:o,styles:s}=i||{};if(!t)throw new he('Unable to proceed because \"methodId\" argument is not provided.');const a=this._store.getState().customer.getCustomerOrThrow();if(!(null==a?void 0:a.isGuest))return Promise.resolve(this._store.getState());try{this._shouldAuthenticateUserWithFastlane()&&(yield this._initializePayPalSdk(t,s),yield this._authenticateUserWithFastlaneOtp(t)),\"function\"==typeof o&&this._shouldUsePayPalFastlaneShippingComponent()&&(yield this._initializePayPalSdk(t,s),o(()=>this._handlePayPalShippingAddressChange()))}catch(e){}return Promise.resolve(this._store.getState())})}_getPayPalPaymentMethodOrThrow(e){return rs(this,void 0,void 0,function*(){const t=this._store.getState().paymentMethods.getPaymentMethod(e);return t||(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e))).paymentMethods.getPaymentMethodOrThrow(e)})}_getPayPalCustomerAuthenticationState(){const e=this._store.getState().paymentProviderCustomer.getPaymentProviderCustomerOrThrow();var t;return((t=e)&&(\"authenticationState\"in t||\"addresses\"in t||\"instruments\"in t)?e:{}).authenticationState}_shouldAuthenticateUserWithFastlane(){const e=this._store.getState().cart.getCartOrThrow(),t=this._paypalCommerceFastlaneUtils.getStorageSessionId();return!this._getPayPalCustomerAuthenticationState()&&t===e.id}_shouldUsePayPalFastlaneShippingComponent(){const e=this._getPayPalCustomerAuthenticationState();return!!e&&e!==_o.CANCELED}_initializePayPalSdk(e,t){var n;return rs(this,void 0,void 0,function*(){const r=this._store.getState().cart.getCartOrThrow(),i=yield this._getPayPalPaymentMethodOrThrow(e),{isDeveloperModeApplicable:o,isFastlaneStylingEnabled:s}=(null==i?void 0:i.initializationData)||{},a=!!o,c=function(e,t){if(t||e)return function(e){var t,n;const r={},i=(0,E.omitBy)(e.root,ns),o=(0,E.omitBy)(e.input,ns),s=(0,E.omitBy)(e.toggle,ns),a=(0,E.omitBy)(null===(t=e.text)||void 0===t?void 0:t.body,ns),c=(0,E.omitBy)(null===(n=e.text)||void 0===n?void 0:n.caption,ns),u=e.branding;return Object.keys(i).length&&(r.root=i),Object.keys(o).length&&(r.input=o),Object.keys(s).length&&(r.toggle=s),Object.keys(a).length&&(r.text={},r.text.body=a),Object.keys(c).length&&(r.text=Object.assign({},r.text),r.text.caption=c),u&&(r.branding=u),r}(function(e,t){var n,r,i,o,s,a,c,u,d,l,h,p,f,m,y,g,_,v,b,S,E,C;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(f=null==t?void 0:t.toggle)||void 0===f?void 0:f.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(g=null===(y=null==t?void 0:t.text)||void 0===y?void 0:y.body)||void 0===g?void 0:g.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(v=null===(_=null==t?void 0:t.text)||void 0===_?void 0:_.body)||void 0===v?void 0:v.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(S=null===(b=null==t?void 0:t.text)||void 0===b?void 0:b.caption)||void 0===S?void 0:S.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(C=null===(E=null==t?void 0:t.text)||void 0===E?void 0:E.caption)||void 0===C?void 0:C.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}(s?null===(n=null==i?void 0:i.initializationData)||void 0===n?void 0:n.fastlaneStyles:{},t),u=yield this._paypalSdkScriptLoader.getPayPalFastlaneSdk(i,r.currency.code,r.id,r.locale);yield this._paypalCommerceFastlaneUtils.initializePayPalFastlane(u,a,c)})}_authenticateUserWithFastlaneOtp(e){var t,n;return rs(this,void 0,void 0,function*(){const r=this._store.getState(),i=r.cart.getCartOrThrow(),o=null===(t=r.customer.getCustomer())||void 0===t?void 0:t.email,s=null===(n=r.billingAddress.getBillingAddress())||void 0===n?void 0:n.email,a=o||s||\"\",{customerContextId:c}=yield this._paypalCommerceFastlaneUtils.lookupCustomerOrThrow(a),u=yield this._paypalCommerceFastlaneUtils.triggerAuthenticationFlowOrThrow(c),{authenticationState:d,addresses:l,billingAddress:h,shippingAddress:p,instruments:f}=this._paypalCommerceFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,u);yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({authenticationState:d,addresses:l,instruments:f})),u.authenticationState===_o.CANCELED?this._paypalCommerceFastlaneUtils.removeStorageSessionId():this._paypalCommerceFastlaneUtils.updateStorageSessionId(i.id),h&&(yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(Object.assign(Object.assign({},h),{id:String(h.id)})))),p&&i.lineItems.physicalItems.length>0&&(yield this._store.dispatch(this._consignmentActionCreator.updateAddress(p)))})}_handlePayPalShippingAddressChange(){var e;return rs(this,void 0,void 0,function*(){const t=this._paypalCommerceFastlaneUtils.getPayPalFastlaneOrThrow(),{selectionChanged:n,selectedAddress:r}=yield t.profile.showShippingAddressSelector();if(n){const t=this._store.getState(),n=t.shippingAddress.getShippingAddressesOrThrow(),o=t.paymentProviderCustomer.getPaymentProviderCustomer(),s=(i=o)&&(\"authenticationState\"in i||\"addresses\"in i||\"instruments\"in i)?o:{},a=this._paypalCommerceFastlaneUtils.mapPayPalToBcAddress(r.address,r.name,r.phoneNumber,null===(e=n[0])||void 0===e?void 0:e.customFields),c=this._paypalCommerceFastlaneUtils.filterAddresses([a,...s.addresses||[]]);return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(Object.assign(Object.assign({},s),{addresses:c}))),yield this._store.dispatch(this._consignmentActionCreator.updateAddress(a)),a}var i})}}const os=[\"payment_element_beta_2\",\"alipay_pm_beta_1\",\"link_default_integration_beta_1\",\"shipping_address_element_beta_1\",\"address_element_beta_1\"];var ss;class as{constructor(e,t,n,r){this._store=e,this._stripeScriptLoader=t,this._consignmentActionCreator=n,this._paymentMethodActionCreator=r}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}initialize(e){return t=this,n=void 0,i=function*(){if(!e.stripeupe)throw new he('Unable to proceed because \"options\" argument is not provided.');const{container:t,gatewayId:n,methodId:r,onChangeShipping:i,getStyles:o,availableCountries:s,getStripeState:a}=e.stripeupe;Object.entries(e.stripeupe).forEach(([e,t])=>{if(!t)throw new he(`Unable to proceed because \"${e}\" argument is not provided.`)});const c=yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(n,{params:{method:r}})),u=c.paymentMethods.getPaymentMethodOrThrow(r,n),{initializationData:d}=u;if(!u||!u.initializationData.stripePublishableKey||!u.clientToken)throw new P(b.MissingPaymentMethod);let l;this._stripeUPEClient=yield this._stripeScriptLoader.getStripeClient(d,c.cart.getLocale(),xo.V3,os,\"2020-03-02;alipay_beta=v1;link_beta=v1\");const h=o&&o(),{form:{getShippingAddressFields:p},shippingAddress:{getShippingAddress:f}}=this._store.getState(),m=p([],\"\");l=h?{variables:{colorPrimary:h.fieldInnerShadow,colorBackground:h.fieldBackground,colorText:h.labelText,colorDanger:h.fieldErrorText,colorTextSecondary:h.labelText,colorTextPlaceholder:h.fieldPlaceholderText,spacingUnit:\"4px\",borderRadius:\"4px\"},rules:{\".Input\":{borderColor:h.fieldBorder,color:h.fieldText,boxShadow:h.fieldInnerShadow}}}:{variables:{spacingUnit:\"4px\",borderRadius:\"4px\"}},this._stripeElements=yield this._stripeScriptLoader.getElements(this._stripeUPEClient,{clientSecret:u.clientToken,appearance:l});const y=f(),g=m.find(e=>\"phone\"===e.name);let _={mode:wo.SHIPPING,allowedCountries:[s],fields:{phone:\"always\"},validation:{phone:{required:g&&g.required?\"always\":\"never\"}},display:{name:Io.SPLIT}};if(y){const{stateOrProvinceCode:e,countryCode:t,lastName:n,firstName:r,phone:i,address1:o,address2:s,city:c,postalCode:u}=y,d=e&&t?a(t,e):e;_=Object.assign(Object.assign({},_),{defaultValues:{firstName:r,lastName:n,phone:i,address:{line1:o,line2:s,city:c,state:d,postal_code:u,country:t}}})}let v=this._stripeElements.getElement(Ro.SHIPPING);return v&&v.destroy(),v=this._stripeElements.create(Ro.SHIPPING,_),v.on(No.CHANGE,e=>{if(!(\"isNewAddress\"in e))throw new P(b.MissingShippingAddress);(e.complete||e.isNewAddress)&&(this.sendData&&clearTimeout(this.sendData),this.sendData=setTimeout(()=>{i(Object.assign(Object.assign({},e),{phoneFieldRequired:!!g&&g.required}))},1e3))}),v.mount(`#${t}`),Promise.resolve(this._store.getState())},new((r=void 0)||(r=Promise))(function(e,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}c((i=i.apply(t,n||[])).next())});var t,n,r,i}deinitialize(){return Promise.resolve(this._store.getState())}}!function(e){e.SendSignInEmailRequested=\"SEND_SIGNIN_EMAIL_REQUESTED\",e.SendSignInEmailSucceeded=\"SEND_SIGNIN_EMAIL_SUCCEEDED\",e.SendSignInEmailFailed=\"SEND_SIGNIN_EMAIL_FAILED\"}(ss||(ss={}));class cs{constructor(e){this._requestSender=e}sendSignInEmail(e,t){return(0,c.x)((0,u.of)((0,a.VP)(ss.SendSignInEmailRequested)),(0,d.v)(()=>{return n=this,r=void 0,o=function*(){const{body:n}=yield this._requestSender.sendSignInEmail(e,t);return(0,a.VP)(ss.SendSignInEmailSucceeded,n)},new((i=void 0)||(i=Promise))(function(e,t){function s(e){try{c(o.next(e))}catch(e){t(e)}}function a(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}c((o=o.apply(n,r||[])).next())});var n,r,i,o})).pipe((0,l.W)(e=>y(ss.SendSignInEmailFailed,e)))}}class us{constructor(e){this._requestSender=e}sendSignInEmail({email:e,redirectUrl:t},{timeout:n}={}){const r=Object.assign({Accept:R.JsonV1},_);return this._requestSender.post(\"/login.php?action=passwordless_login\",{body:{email:e,redirect_url:t||Ze(window.top?window.top.location.href:\"\").pathname},headers:r,timeout:n})}}class ds{constructor(e){this._messageCustomizer=e}transform(e){var t;return e.message=(t=this._messageCustomizer(e))?t.split(/(?:\\r\\n|\\n|\\r)/).map(e=>e.replace(/^\\s+/gm,\"\")).join(\" \").trim():\"\",e}}let ls=class{constructor(e,t,n,r,i,o,s,a,c,u,d,l,h,p,f,m,y,g,_,v,S,E,C,w,I,O,P,A,T){this._store=e,this._storeProjection=t,this._extensionMessenger=n,this._extensionEventBroadcaster=r,this._b2bTokenActionCreator=i,this._billingAddressActionCreator=o,this._checkoutActionCreator=s,this._configActionCreator=a,this._customerActionCreator=c,this._consignmentActionCreator=u,this._countryActionCreator=d,this._couponActionCreator=l,this._customerStrategyActionCreator=h,this._errorActionCreator=p,this._giftCertificateActionCreator=f,this._instrumentActionCreator=m,this._orderActionCreator=y,this._paymentMethodActionCreator=g,this._paymentStrategyActionCreator=_,this._pickupOptionActionCreator=v,this._shippingCountryActionCreator=S,this._shippingStrategyActionCreator=E,this._signInEmailActionCreator=C,this._spamProtectionActionCreator=w,this._storeCreditActionCreator=I,this._subscriptionsActionCreator=O,this._formFieldsActionCreator=P,this._extensionActionCreator=A,this._workerExtensionMessenger=T,this._errorTransformer=function(e=\"development\"===B()){return new ds(t=>{if(!e||!function(e){return!(!e.subtype&&!e.type)}(t))return t.message;switch(t.subtype||t.type){case b.MissingConsignments:return`\\n                ${t.message}\\n                The data could be unavailable because no shipping address has been provided.\\n                To fix this, create a consignment or update the shipping address before performing\\n                the same action again.\\n            `;case b.MissingCart:case b.MissingCheckout:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server yet.\\n                To fix this issue, you can try calling \\`CheckoutService#loadCheckout\\`\\n                before performing the same action again.\\n            `;case b.MissingCheckoutConfig:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server yet.\\n                To fix this issue, you need to make sure \\`CheckoutService\\` is initialized\\n                properly by calling \\`CheckoutService#loadCheckout\\` before performing any\\n                other actions.\\n            `;case b.MissingOrder:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server yet.\\n                To fix this issue, you can try calling \\`CheckoutService#loadOrder\\`\\n                before performing the same action again.\\n            `;case b.MissingOrderId:return`\\n                ${t.message}\\n                The data could be unavailable because no order has been created yet. You have\\n                to first create the order before you can perform the action.\\n            `;case b.MissingPaymentMethod:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server, or\\n                configured by the merchant yet. To fix the former issue, you can try calling\\n                \\`CheckoutService#loadPaymentMethods\\` before performing the same action again.\\n            `;case Ue.CustomerNotInitialized:return\"\\n                In order to initialize the customer step of checkout, you need to call\\n                `CheckoutService#initializeCustomer`. Afterwards, you should be able to\\n                submit customer details.\\n            \";case Ue.PaymentNotInitialized:return`\\n                ${t.message}\\n                In order to initialize the payment step of checkout, you need to call\\n                \\`CheckoutService#initializePayment\\`. Afterwards, you should be able to\\n                submit payment details.\\n            `;case Ue.ShippingNotInitialized:return`\\n                ${t.message}\\n                In order to initialize the shipping step of checkout, you need to call\\n                \\`CheckoutService#initializeShipping\\`. Afterwards, you should be able to\\n                submit shipping details.\\n            `;default:return t.message}})}()}getState(){return this._storeProjection.getState()}notifyState(){this._storeProjection.notifyState()}subscribe(e,...t){return this._storeProjection.subscribe(e,...t)}hydrateInitialState(e){return this._dispatch(this._checkoutActionCreator.hydrateInitialState(e))}loadCheckout(e,t){return this._dispatch(e?this._checkoutActionCreator.loadCheckout(e,t):this._checkoutActionCreator.loadDefaultCheckout(t))}updateCheckout(e,t){const n=this._checkoutActionCreator.updateCheckout(e,t);return this._dispatch(n)}loadOrder(e,t){const n=this._orderActionCreator.loadOrder(e,t),r=this._formFieldsActionCreator.loadFormFields(t),i=this._configActionCreator.loadConfig(t);return Promise.all([this._dispatch(n),this._dispatch(i,{queueId:\"config\"}),this._dispatch(r,{queueId:\"formFields\"})]).then(()=>this.getState())}submitOrder(e,t){const n=this._paymentStrategyActionCreator.execute(e,t);return this._dispatch(n,{queueId:\"paymentStrategy\"})}finalizeOrderIfNeeded(e){const t=this._paymentStrategyActionCreator.finalize(e);return this._dispatch(t,{queueId:\"paymentStrategy\"})}loadPaymentMethods(e){const t=this._paymentMethodActionCreator.loadPaymentMethods(e);return this._dispatch(t,{queueId:\"paymentMethods\"})}loadPaymentMethodByIds(e,t){const n=this._paymentMethodActionCreator.loadPaymentMethodsById(e,t);return this._dispatch(n,{queueId:\"paymentMethods\"})}loadPaymentMethod(e,t){const n=this._paymentMethodActionCreator.loadPaymentMethod(e,t);return this._dispatch(n,{queueId:\"paymentMethods\"})}initializePayment(e){const t=this._paymentStrategyActionCreator.initialize(e);return this._dispatch(t,{queueId:\"paymentStrategy\"})}deinitializePayment(e){const t=this._paymentStrategyActionCreator.deinitialize(e);return this._dispatch(t,{queueId:\"paymentStrategy\"})}loadBillingCountries(e){const t=this._countryActionCreator.loadCountries(e);return this._dispatch(t,{queueId:\"billingCountries\"})}loadShippingCountries(e){const t=this._shippingCountryActionCreator.loadCountries(e);return this._dispatch(t,{queueId:\"shippingCountries\"})}loadPickupOptions(e){const t=this._pickupOptionActionCreator.loadPickupOptions(e);return this._dispatch(t,{queueId:\"pickupOptions\"})}loadBillingAddressFields(e){return this.loadBillingCountries(e)}loadShippingAddressFields(e){return this.loadShippingCountries(e)}initializeCustomer(e){const t=this._customerStrategyActionCreator.initialize(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}deinitializeCustomer(e){const t=this._customerStrategyActionCreator.deinitialize(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}sendSignInEmail(e,t){const n=this._signInEmailActionCreator.sendSignInEmail(e,t);return this._dispatch(n,{queueId:\"signInEmail\"})}getB2BToken(e){const t=this._b2bTokenActionCreator.loadB2BToken(e);return this._dispatch(t,{queueId:\"b2bToken\"})}createCustomerAccount(e,t){const n=this._customerActionCreator.createCustomer(e,t);return this._dispatch(n)}createCustomerAddress(e,t){const n=this._customerActionCreator.createAddress(e,t);return this._dispatch(n)}updateSubscriptions(e,t){const n=this._subscriptionsActionCreator.updateSubscriptions(e,t);return this._dispatch(n,{queueId:\"subscriptions\"})}continueAsGuest(e,t){const n=this._billingAddressActionCreator.continueAsGuest(e,t);return this._dispatch(n)}signInCustomer(e,t){const n=this._customerStrategyActionCreator.signIn(e,t);return this._dispatch(n,{queueId:\"customerStrategy\"})}signOutCustomer(e){const t=this._customerStrategyActionCreator.signOut(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}executePaymentMethodCheckout(e){const t=this._customerStrategyActionCreator.executePaymentMethodCheckout(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}loadShippingOptions(e){const t=this._consignmentActionCreator.loadShippingOptions(e);return this._dispatch(t)}initializeShipping(e){const t=this._shippingStrategyActionCreator.initialize(e);return this._dispatch(t,{queueId:\"shippingStrategy\"})}deinitializeShipping(e){const t=this._shippingStrategyActionCreator.deinitialize(e);return this._dispatch(t,{queueId:\"shippingStrategy\"})}selectShippingOption(e,t){const n=this._shippingStrategyActionCreator.selectOption(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}updateShippingAddress(e,t){const n=this._shippingStrategyActionCreator.updateAddress(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}createConsignments(e,t){const n=this._consignmentActionCreator.createConsignments(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}deleteConsignment(e,t){const n=this._consignmentActionCreator.deleteConsignment(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}updateConsignment(e,t){const n=this._consignmentActionCreator.updateConsignment(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}assignItemsToAddress(e,t){const n=this._consignmentActionCreator.assignItemsByAddress(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}unassignItemsToAddress(e,t){const n=this._consignmentActionCreator.unassignItemsByAddress(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}selectConsignmentShippingOption(e,t,n){const r=this._consignmentActionCreator.updateShippingOption({id:e,shippingOptionId:t},n);return this._dispatch(r,{queueId:\"shippingStrategy\"})}updateBillingAddress(e,t={}){const n=this._billingAddressActionCreator.updateAddress(e,t);return this._dispatch(n)}applyStoreCredit(e,t){const n=this._storeCreditActionCreator.applyStoreCredit(e,t);return this._dispatch(n)}applyCoupon(e,t){const n=this._couponActionCreator.applyCoupon(e,t);return this._dispatch(n)}removeCoupon(e,t){const n=this._couponActionCreator.removeCoupon(e,t);return this._dispatch(n)}applyGiftCertificate(e,t){const n=this._giftCertificateActionCreator.applyGiftCertificate(e,t);return this._dispatch(n)}removeGiftCertificate(e,t){const n=this._giftCertificateActionCreator.removeGiftCertificate(e,t);return this._dispatch(n)}loadInstruments(){const e=this._instrumentActionCreator.loadInstruments();return this._dispatch(e)}deleteInstrument(e){const t=this._instrumentActionCreator.deleteInstrument(e);return this._dispatch(t).then(()=>this.loadInstruments())}clearError(e){const t=this._errorActionCreator.clearError(e);return this._dispatch(t)}initializeSpamProtection(e){const t=this._spamProtectionActionCreator.initialize(e);return this._dispatch(t,{queueId:\"spamProtection\"})}executeSpamCheck(){const e=this._spamProtectionActionCreator.verifyCheckoutSpamProtection();return this._dispatch(e,{queueId:\"spamProtection\"})}loadExtensions(e){const t=this._extensionActionCreator.loadExtensions(e);return this._dispatch(t,{queueId:\"extensions\"})}renderExtension(e,t){return n=this,r=void 0,o=function*(){const n=this._extensionActionCreator.renderExtension(e,t,this._workerExtensionMessenger),r=yield this._dispatch(n,{queueId:\"extensions\"});return this._extensionEventBroadcaster.listen(),r},new((i=void 0)||(i=Promise))(function(e,t){function s(e){try{c(o.next(e))}catch(e){t(e)}}function a(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}clearExtensionCache(e){this._extensionMessenger.clearCacheByRegion(e)}postMessageToExtension(e,t){this._extensionMessenger.post(e,t)}handleExtensionCommand(e,t,n){return this._extensionMessenger.listenForCommand(e,t,n)}handleExtensionQuery(e,t,n){return this._extensionMessenger.listenForQuery(e,t,n)}_dispatch(e,t){return this._store.dispatch(e,t).then(()=>this.getState()).catch(e=>{throw this._errorTransformer.transform(e)})}};ls=function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([yt],ls);const hs=ls;var ps=\"NOT_FOUND\",fs=function(e,t){return e===t};function ms(e,t){var n,r,i=\"object\"==typeof t?t:{equalityCheck:t},o=i.equalityCheck,s=void 0===o?fs:o,a=i.maxSize,c=void 0===a?1:a,u=i.resultEqualityCheck,d=function(e){return function(t,n){if(null===t||null===n||t.length!==n.length)return!1;for(var r=t.length,i=0;i<r;i++)if(!e(t[i],n[i]))return!1;return!0}}(s),l=1===c?(n=d,{get:function(e){return r&&n(r.key,e)?r.value:ps},put:function(e,t){r={key:e,value:t}},getEntries:function(){return r?[r]:[]},clear:function(){r=void 0}}):function(e,t){var n=[];function r(e){var r=n.findIndex(function(n){return t(e,n.key)});if(r>-1){var i=n[r];return r>0&&(n.splice(r,1),n.unshift(i)),i.value}return ps}return{get:r,put:function(t,i){r(t)===ps&&(n.unshift({key:t,value:i}),n.length>e&&n.pop())},getEntries:function(){return n},clear:function(){n=[]}}}(c,d);function h(){var t=l.get(arguments);if(t===ps){if(t=e.apply(null,arguments),u){var n=l.getEntries().find(function(e){return u(e.value,t)});n&&(t=n.value)}l.put(arguments,t)}return t}return h.clearCache=function(){return l.clear()},h}function ys(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return function(){for(var t=arguments.length,r=new Array(t),i=0;i<t;i++)r[i]=arguments[i];var o,s=0,a={memoizeOptions:void 0},c=r.pop();if(\"object\"==typeof c&&(a=c,c=r.pop()),\"function\"!=typeof c)throw new Error(\"createSelector expects an output function after the inputs, but received: [\"+typeof c+\"]\");var u=a.memoizeOptions,d=void 0===u?n:u,l=Array.isArray(d)?d:[d],h=function(e){var t=Array.isArray(e[0])?e[0]:e;if(!t.every(function(e){return\"function\"==typeof e})){var n=t.map(function(e){return\"function\"==typeof e?\"function \"+(e.name||\"unnamed\")+\"()\":typeof e}).join(\", \");throw new Error(\"createSelector expects all input-selectors to be functions, but received the following types: [\"+n+\"]\")}return t}(r),p=e.apply(void 0,[function(){return s++,c.apply(null,arguments)}].concat(l)),f=e(function(){for(var e=[],t=h.length,n=0;n<t;n++)e.push(h[n].apply(null,arguments));return o=p.apply(null,e)});return Object.assign(f,{resultFunc:c,memoizedResultFunc:p,dependencies:h,lastResult:function(){return o},recomputations:function(){return s},resetRecomputations:function(){return s=0}}),f}}function gs(e){return(...t)=>{const n=t.pop();return e(...t,(...e)=>{const t=n(...e);return\"function\"==typeof t?(0,Y.Bj)(t):t})}}const _s=gs(ys(ms));var vs=n(540),bs=n.n(vs);const Ss=gs(ys(ms,(e,t)=>bs()(e,t)));const Es={body:{},headers:{},status:0};class Cs extends xt{constructor(e,{message:t,errors:n}={}){const{body:r,headers:i,status:o}=e||Es;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=i,this.status=o,this.errors=n||[]}}class ws extends Cs{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class Is extends J{constructor(e,t){super(e,{message:t||\"An unexpected error has occurred. The checkout process cannot continue as a result.\"}),this.name=\"UnrecoverableError\",this.type=\"unrecoverable\"}}function Os(e){return e.reduce((e,t)=>t?[...e,t]:e,[]).join(\" \")}class Ps extends J{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}class As{constructor(){this._factoryMethods={},this.register(\"default\",(e,t)=>new J(e,{message:t})),this.register(\"internal\",(e,t)=>function(e,t){const{body:n}=e,{errors:r=[]}=n;return new J(e,{message:Os(r)||n.detail||n.title||t,errors:r.length?r.map(e=>({code:n.type,message:e})):[{code:n.type,message:n.detail||n.title}]})}(e,t)),this.register(\"storefront\",(e,t)=>function(e,t){const{body:n}=e;return new J(e,{message:t||n.detail||n.title,errors:[{code:n.code||n.type,message:n.detail||n.title}]})}(e,t)),this.register(\"payment\",(e,t)=>Sn(e,t)),this.register(\"timeout\",e=>new Ps(e))}register(e,t){this._factoryMethods[e]=t}createError(e,t){return(this._factoryMethods[this._getType(e)]||this._factoryMethods.default)(e,t)}_getType(e){if(0===e.status)return\"timeout\";if(this._isStorefrontErrorResponseBody(e.body))return\"storefront\";if(this._isInternalErrorResponseBody(e.body)){const t=(0,E.last)(e.body.type.split(\"/\"));return t&&this._factoryMethods[t]?t:\"internal\"}const t=(0,E.last)(e.body&&e.body.errors);return t&&t.code&&this._factoryMethods[t.code]?t.code:\"payment\"}_isStorefrontErrorResponseBody(e){const t=e;return!this._isInternalErrorResponseBody(e)&&\"string\"==typeof t.title&&\"string\"==typeof t.type&&\"number\"==typeof t.status&&\"string\"==typeof t.detail}_isInternalErrorResponseBody(e){const t=e;return\"object\"==typeof t.errors&&\"string\"==typeof t.title&&\"string\"==typeof t.type&&\"number\"==typeof t.status}}function Ts(e,t){return Array.isArray(e)?e.map(e=>Ts(e,t)):(0,E.isPlainObject)(e)?(0,E.transform)((0,E.omitBy)(e,t),(e,n,r)=>{e[r]=Ts(n,t)},{}):e}function ks(e,t){return function(e){return e.type===D.ClearError}(t)?Ts(e,e=>e===t.payload):e}function xs(e,t,n){return e===t||(e&&t&&\"object\"==typeof e&&\"object\"==typeof t?Array.isArray(e)&&Array.isArray(t)?function(e,t,n){if(e.length!==t.length)return!1;for(let r=0,i=e.length;r<i;r++)if(!xs(e[r],t[r],n))return!1;return!0}(e,t,n):!Array.isArray(e)&&!Array.isArray(t)&&(e instanceof Date&&t instanceof Date?function(e,t){return e.getTime()===t.getTime()}(e,t):!(e instanceof Date||t instanceof Date)&&(e instanceof RegExp&&t instanceof RegExp?function(e,t){return e.toString()===t.toString()}(e,t):!(e instanceof RegExp||t instanceof RegExp)&&function(e,t,n){const r=n&&n.keyFilter,i=r?Object.keys(e).filter(r):Object.keys(e),o=r?Object.keys(t).filter(r):Object.keys(t);if(i.length!==o.length)return!1;for(let r=0,o=i.length;r<o;r++){const o=i[r];if(!Object.prototype.hasOwnProperty.call(t,o))return!1;if(!xs(e[o],t[o],n))return!1}return!0}(e,t,n))):e===t)}function Rs(e,t,n){return e&&Object.prototype.hasOwnProperty.call(e,t)&&xs(e[t],n)?e:Object.assign(Object.assign({},e),{[t]:n})}const Ms={errors:{},statuses:{}};function Ns(e=Ms,t){return(0,a.HY)({data:Ls,errors:(0,a.om)(Ds,ks),statuses:js})(e,t)}function Ls(e,t){return t.type===f.LoadB2BTokenSucceeded?t.payload:e}function Ds(e=Ms.errors,t){switch(t.type){case f.LoadB2BTokenRequested:case f.LoadB2BTokenSucceeded:return Rs(e,\"loadError\",void 0);case f.LoadB2BTokenFailed:return Rs(e,\"loadError\",t.payload);default:return e}}function js(e=Ms.statuses,t){switch(t.type){case f.LoadB2BTokenRequested:return Rs(e,\"isLoading\",!0);case f.LoadB2BTokenFailed:case f.LoadB2BTokenSucceeded:return Rs(e,\"isLoading\",!1);default:return e}}function Fs(e,t){return void 0===t||xs(e,t)?e:t}const Us={errors:{},statuses:{}};function Bs(e=Us,t){return(0,a.HY)({data:zs,errors:(0,a.om)(qs,ks),statuses:Hs})(e,t)}function zs(e,t){var n,r;switch(t.type){case S.UpdateBillingAddressSucceeded:case S.ContinueAsGuestSucceeded:case be.LoadCheckoutSucceeded:return Fs(e,t.payload&&t.payload.billingAddress);case Se.HydrateInitialState:return Fs(e,null===(r=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===r?void 0:r.billingAddress);default:return e}}function qs(e=Us.errors,t){switch(t.type){case be.LoadCheckoutRequested:case be.LoadCheckoutSucceeded:return Rs(e,\"loadError\",void 0);case be.LoadCheckoutFailed:return Rs(e,\"loadError\",t.payload);case S.UpdateBillingAddressRequested:case S.UpdateBillingAddressSucceeded:return Rs(e,\"updateError\",void 0);case S.UpdateBillingAddressFailed:return Rs(e,\"updateError\",t.payload);case $r.UpdateSubscriptionsRequested:case $r.UpdateSubscriptionsSucceeded:case S.ContinueAsGuestRequested:case S.ContinueAsGuestSucceeded:return Rs(e,\"continueAsGuestError\",void 0);case $r.UpdateSubscriptionsFailed:case S.ContinueAsGuestFailed:return Rs(e,\"continueAsGuestError\",t.payload);default:return e}}function Hs(e=Us.statuses,t){switch(t.type){case be.LoadCheckoutRequested:return Rs(e,\"isLoading\",!0);case be.LoadCheckoutSucceeded:case be.LoadCheckoutFailed:return Rs(e,\"isLoading\",!1);case S.UpdateBillingAddressRequested:return Rs(e,\"isUpdating\",!0);case S.UpdateBillingAddressFailed:case S.UpdateBillingAddressSucceeded:return Rs(e,\"isUpdating\",!1);case S.ContinueAsGuestRequested:case $r.UpdateSubscriptionsRequested:return Rs(e,\"isContinuingAsGuest\",!0);case $r.UpdateSubscriptionsSucceeded:case $r.UpdateSubscriptionsFailed:case S.ContinueAsGuestFailed:case S.ContinueAsGuestSucceeded:return Rs(e,\"isContinuingAsGuest\",!1);default:return e}}const Vs=function e(t,n,r){const{matchObject:i=(e,t)=>void 0!==e.id&&e.id===t.id}=r||{};if(!t)return n;if(!n||t===n)return t;let o=0,s=0;const a=(e,t,n)=>(o+=e===t?1:0,s+=e===n?1:0,e),c=n.map((n,r)=>{const o=t&&t[r];return ei(o)&&ei(n)?i(o,n)?a(Gs(o,n),o,n):a(Fs(o,n),o,n):(0,E.isArray)(o)&&(0,E.isArray)(n)?a(e(o,n),o,n):a(Fs(o,n),o,n)});return o===n.length&&t&&t.length===n.length?t:s===n.length?n:c},Gs=function e(t,n){return t?n&&t!==n?Object.keys(n).reduce((t,r)=>{const i=t[r],o=n[r];return ei(i)&&ei(o)?Rs(t,r,e(i,o)):(0,E.isArray)(i)&&(0,E.isArray)(o)?Rs(t,r,Vs(i,o)):Rs(t,r,o)},t):t:n},Ys={errors:{},statuses:{}};function Ws(e=Ys,t){return(0,a.HY)({data:$s,errors:(0,a.om)(Qs,ks),statuses:Ks})(e,t)}function $s(e,t){var n,r;switch(t.type){case S.UpdateBillingAddressSucceeded:case be.LoadCheckoutSucceeded:case Fr.CreateConsignmentsSucceeded:case Fr.DeleteConsignmentSucceeded:case Fr.UpdateConsignmentSucceeded:case Fr.UpdateShippingOptionSucceeded:case Fr.LoadShippingOptionsSucceeded:case ne.ApplyCouponSucceeded:case ne.RemoveCouponSucceeded:case se.ApplyGiftCertificateSucceeded:case se.RemoveGiftCertificateSucceeded:return Gs(e,t.payload&&t.payload.cart);case Se.HydrateInitialState:return Gs(e,null===(r=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===r?void 0:r.cart);default:return e}}function Ks(e=Ys.statuses,t){switch(t.type){case be.LoadCheckoutRequested:return Rs(e,\"isLoading\",!0);case be.LoadCheckoutFailed:case be.LoadCheckoutSucceeded:return Rs(e,\"isLoading\",!1);default:return e}}function Qs(e=Ys.errors,t){switch(t.type){case be.LoadCheckoutRequested:case be.LoadCheckoutSucceeded:return Rs(e,\"loadError\",void 0);case be.LoadCheckoutFailed:return Rs(e,\"loadError\",t.payload);default:return e}}var Zs;!function(e){e.InitializeButtonFailed=\"INITIALIZE_BUTTON_FAILED\",e.InitializeButtonRequested=\"INITIALIZE_BUTTON_REQUESTED\",e.InitializeButtonSucceeded=\"INITIALIZE_BUTTON_SUCCEEDED\",e.DeinitializeButtonFailed=\"DEINITIALIZE_BUTTON_FAILED\",e.DeinitializeButtonRequested=\"DEINITIALIZE_BUTTON_REQUESTED\",e.DeinitializeButtonSucceeded=\"DEINITIALIZE_BUTTON_SUCCEEDED\"}(Zs||(Zs={}));const Js={data:{},errors:{},statuses:{}},Xs={initializedContainers:{}},ea={},ta={};function na(e=Js,t){return t.meta&&t.meta.methodId?(0,a.HY)({data:(0,a.HY)({[t.meta.methodId]:ra}),errors:(0,a.HY)({[t.meta.methodId]:ia}),statuses:(0,a.HY)({[t.meta.methodId]:oa})})(e,t):e}function ra(e=Xs,t){switch(t.type){case Zs.InitializeButtonSucceeded:return t.meta&&t.meta.containerId?Gs(e,{initializedContainers:{[t.meta.containerId]:!0}}):e;case Zs.DeinitializeButtonSucceeded:return Rs(e,\"initializedContainers\",{})}return e}function ia(e=ea,t){switch(t.type){case Zs.InitializeButtonRequested:case Zs.InitializeButtonSucceeded:return Rs(e,\"initializeError\",void 0);case Zs.InitializeButtonFailed:return Rs(e,\"initializeError\",t.payload);case Zs.DeinitializeButtonRequested:case Zs.DeinitializeButtonSucceeded:return Rs(e,\"deinitializeError\",void 0);case Zs.DeinitializeButtonFailed:return Rs(e,\"deinitializeError\",t.payload);default:return e}}function oa(e=ta,t){switch(t.type){case Zs.InitializeButtonRequested:return Rs(e,\"isInitializing\",!0);case Zs.InitializeButtonFailed:case Zs.InitializeButtonSucceeded:return Rs(e,\"isInitializing\",!1);case Zs.DeinitializeButtonRequested:return Rs(e,\"isDeinitializing\",!0);case Zs.DeinitializeButtonFailed:case Zs.DeinitializeButtonSucceeded:return Rs(e,\"isDeinitializing\",!1);default:return e}}const sa={meta:{},errors:{},statuses:{}};function aa(e=sa,t){return(0,a.HY)({data:ca,errors:(0,a.om)(ua,ks),statuses:da})(e,t)}function ca(e,t){var n,r;switch(t.type){case G.LoadConfigSucceeded:return Gs(e,t.payload);case Se.HydrateInitialState:{const i=Gs(e,null===(n=t.payload)||void 0===n?void 0:n.config);return i&&(null===(r=t.payload)||void 0===r?void 0:r.b2bApiSettings)?Object.assign(Object.assign({},i),{storeConfig:Object.assign(Object.assign({},i.storeConfig),{b2bApiSettings:t.payload.b2bApiSettings})}):i}default:return e}}function ua(e=sa.errors,t){switch(t.type){case G.LoadConfigSucceeded:return Rs(e,\"loadError\",void 0);case G.LoadConfigFailed:return Rs(e,\"loadError\",t.payload);default:return e}}function da(e=sa.statuses,t){switch(t.type){case G.LoadConfigRequested:return Rs(e,\"isLoading\",!0);case G.LoadConfigSucceeded:case G.LoadConfigFailed:return Rs(e,\"isLoading\",!1);default:return e}}const la={errors:{},statuses:{}};function ha(e=la,t){return(0,a.HY)({data:pa,errors:(0,a.om)(fa,ks),statuses:ma})(e,t)}function pa(e,t){var n,r;switch(t.type){case be.LoadCheckoutSucceeded:case ne.ApplyCouponSucceeded:case Fr.UpdateShippingOptionSucceeded:case ne.RemoveCouponSucceeded:case Dt.LoadOrderSucceeded:return Vs(e,t.payload&&t.payload.coupons);case Se.HydrateInitialState:return Vs(e,null===(r=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===r?void 0:r.coupons);default:return e}}function fa(e={},t){switch(t.type){case ne.ApplyCouponRequested:case ne.ApplyCouponSucceeded:return Rs(e,\"applyCouponError\",void 0);case ne.ApplyCouponFailed:return Rs(e,\"applyCouponError\",t.payload);case ne.RemoveCouponRequested:case ne.RemoveCouponSucceeded:return Rs(e,\"removeCouponError\",void 0);case ne.RemoveCouponFailed:return Rs(e,\"removeCouponError\",t.payload);default:return e}}function ma(e={},t){switch(t.type){case ne.ApplyCouponRequested:return Rs(e,\"isApplyingCoupon\",!0);case ne.ApplyCouponSucceeded:case ne.ApplyCouponFailed:return Rs(e,\"isApplyingCoupon\",!1);case ne.RemoveCouponRequested:return Rs(e,\"isRemovingCoupon\",!0);case ne.RemoveCouponSucceeded:case ne.RemoveCouponFailed:return Rs(e,\"isRemovingCoupon\",!1);default:return e}}const ya={errors:{},statuses:{}};function ga(e=ya,t){return(0,a.HY)({data:_a,errors:(0,a.om)(va,ks),statuses:ba})(e,t)}function _a(e,t){var n,r;switch(t.type){case be.LoadCheckoutSucceeded:case Fr.CreateConsignmentsSucceeded:case Fr.UpdateConsignmentSucceeded:case Fr.DeleteConsignmentSucceeded:case Fr.UpdateShippingOptionSucceeded:case ne.ApplyCouponSucceeded:case ne.RemoveCouponSucceeded:case se.ApplyGiftCertificateSucceeded:case se.RemoveGiftCertificateSucceeded:return Vs(e,t.payload&&t.payload.giftCertificates);case Se.HydrateInitialState:return Vs(e,null===(r=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===r?void 0:r.giftCertificates);default:return e}}function va(e=ya.errors,t){switch(t.type){case se.ApplyGiftCertificateRequested:case se.ApplyGiftCertificateSucceeded:return Rs(e,\"applyGiftCertificateError\",void 0);case se.ApplyGiftCertificateFailed:return Rs(e,\"applyGiftCertificateError\",t.payload);case se.RemoveGiftCertificateRequested:case se.RemoveGiftCertificateSucceeded:return Rs(e,\"removeGiftCertificateError\",void 0);case se.RemoveGiftCertificateFailed:return Rs(e,\"removeGiftCertificateError\",t.payload);default:return e}}function ba(e=ya.statuses,t){switch(t.type){case se.ApplyGiftCertificateRequested:return Rs(e,\"isApplyingGiftCertificate\",!0);case se.ApplyGiftCertificateSucceeded:case se.ApplyGiftCertificateFailed:return Rs(e,\"isApplyingGiftCertificate\",!1);case se.RemoveGiftCertificateRequested:return Rs(e,\"isRemovingGiftCertificate\",!0);case se.RemoveGiftCertificateSucceeded:case se.RemoveGiftCertificateFailed:return Rs(e,\"isRemovingGiftCertificate\",!1);default:return e}}const Sa={errors:{},statuses:{}};function Ea(e=Sa,t){return(0,a.HY)({data:Ca,errors:(0,a.om)(wa,ks),statuses:Ia})(e,t)}function Ca(e,t){var n,r;switch(t.type){case S.ContinueAsGuestSucceeded:case be.LoadCheckoutSucceeded:return Gs(e,t.payload&&t.payload.customer);case ye.CreateCustomerAddressSucceeded:return Gs(e,t.payload);case Se.HydrateInitialState:return Gs(e,null===(r=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===r?void 0:r.customer);default:return e}}function wa(e=Sa.errors,t){switch(t.type){case ye.CreateCustomerRequested:case ye.CreateCustomerSucceeded:return Rs(e,\"createError\",void 0);case ye.CreateCustomerFailed:return Rs(e,\"createError\",t.payload);case ye.CreateCustomerAddressRequested:case ye.CreateCustomerAddressSucceeded:return Rs(e,\"createAddressError\",void 0);case ye.CreateCustomerAddressFailed:return Rs(e,\"createAddressError\",t.payload);default:return e}}function Ia(e=Sa.statuses,t){switch(t.type){case ye.CreateCustomerRequested:return Rs(e,\"isCreating\",!0);case ye.CreateCustomerFailed:case ye.CreateCustomerSucceeded:return Rs(e,\"isCreating\",!1);case ye.CreateCustomerAddressRequested:return Rs(e,\"isCreatingAddress\",!0);case ye.CreateCustomerAddressFailed:case ye.CreateCustomerAddressSucceeded:return Rs(e,\"isCreatingAddress\",!1);default:return e}}const Oa={data:{},errors:{},statuses:{}};function Pa(e=Oa,t){return(0,a.HY)({data:Aa,errors:(0,a.om)(Ta,ks),statuses:ka})(e,t)}function Aa(e=Oa.data,t){switch(t.type){case ve.InitializeSucceeded:return Gs(e,{[t.meta&&t.meta.methodId]:{isInitialized:!0}});case ve.DeinitializeSucceeded:return Gs(e,{[t.meta&&t.meta.methodId]:{isInitialized:!1}})}return e}function Ta(e=Oa.errors,t){switch(t.type){case ve.InitializeRequested:case ve.InitializeSucceeded:return Gs(e,{initializeErrors:Object.assign({},e.initializeErrors),initializeMethodId:e.initializeMethodId?e.initializeMethodId:void 0});case ve.InitializeFailed:return Gs(e,{initializeErrors:Object.assign(Object.assign({},e.initializeErrors),{[t.meta&&t.meta.methodId]:t.payload}),initializeMethodId:t.meta&&t.meta.methodId});case ve.DeinitializeRequested:case ve.DeinitializeSucceeded:return Gs(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case ve.DeinitializeFailed:return Gs(e,{deinitializeError:t.payload,deinitializeMethodId:t.meta&&t.meta.methodId});case ve.SignInRequested:case ve.SignInSucceeded:return Gs(e,{signInError:void 0,signInMethodId:void 0});case ve.SignInFailed:return Gs(e,{signInError:t.payload,signInMethodId:t.meta&&t.meta.methodId});case ve.SignOutRequested:case ve.SignOutSucceeded:return Gs(e,{signOutError:void 0,signOutMethodId:void 0});case ve.SignOutFailed:return Gs(e,{signOutError:t.payload,signOutMethodId:t.meta&&t.meta.methodId});case ve.ExecutePaymentMethodCheckoutRequested:case ve.ExecutePaymentMethodCheckoutSucceeded:return Gs(e,{executePaymentMethodCheckoutError:void 0,executePaymentMethodCheckoutMethodId:void 0});case ve.ExecutePaymentMethodCheckoutFailed:return Gs(e,{executePaymentMethodCheckoutError:t.payload,executePaymentMethodCheckoutMethodId:t.meta&&t.meta.methodId});case ve.WidgetInteractionStarted:case ve.WidgetInteractionFinished:return Gs(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case ve.WidgetInteractionFailed:return Gs(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta.methodId});default:return e}}function ka(e=Oa.statuses,t){switch(t.type){case ve.InitializeRequested:return Gs(e,{isInitializing:!0,initializeMethodId:t.meta&&t.meta.methodId});case ve.InitializeFailed:case ve.InitializeSucceeded:return Gs(e,{isInitializing:!1,initializeMethodId:void 0});case ve.DeinitializeRequested:return Gs(e,{isDeinitializing:!0,deinitializeMethodId:t.meta&&t.meta.methodId});case ve.DeinitializeFailed:case ve.DeinitializeSucceeded:return Gs(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case ve.SignInRequested:return Gs(e,{isSigningIn:!0,signInMethodId:t.meta&&t.meta.methodId});case ve.SignInFailed:case ve.SignInSucceeded:return Gs(e,{isSigningIn:!1,signInMethodId:void 0});case ve.SignOutRequested:return Gs(e,{isSigningOut:!0,signOutMethodId:t.meta&&t.meta.methodId});case ve.SignOutFailed:case ve.SignOutSucceeded:return Gs(e,{isSigningOut:!1,signOutMethodId:void 0});case ve.ExecutePaymentMethodCheckoutRequested:return Gs(e,{isExecutingPaymentMethodCheckout:!0,executePaymentMethodCheckoutMethodId:t.meta&&t.meta.methodId});case ve.ExecutePaymentMethodCheckoutFailed:case ve.ExecutePaymentMethodCheckoutSucceeded:return Gs(e,{isExecutingPaymentMethodCheckout:!1,executePaymentMethodCheckoutMethodId:void 0});case ve.WidgetInteractionStarted:return Gs(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta.methodId});case ve.WidgetInteractionFinished:case ve.WidgetInteractionFailed:return Gs(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}const xa={errors:{},statuses:{}};function Ra(e=xa,t){return(0,a.HY)({data:Ma,errors:(0,a.om)(Na,ks),statuses:La})(e,t)}function Ma(e,t){var n;return t.type===Be.LoadExtensionsSucceeded?Vs(e,t.payload):t.type===Se.HydrateInitialState?Vs(e,null===(n=t.payload)||void 0===n?void 0:n.extensions):e}function Na(e=xa.errors,t){switch(t.type){case Be.LoadExtensionsRequested:case Be.LoadExtensionsSucceeded:return Rs(e,\"loadError\",void 0);case Be.RenderExtensionRequested:case Be.RenderExtensionSucceeded:return Rs(e,\"renderError\",void 0);case Be.LoadExtensionsFailed:return Rs(e,\"loadError\",t.payload);case Be.RenderExtensionFailed:return Rs(e,\"renderError\",t.payload);default:return e}}function La(e=xa.statuses,t){switch(t.type){case Be.LoadExtensionsRequested:return Rs(e,\"isLoading\",!0);case Be.LoadExtensionsSucceeded:case Be.LoadExtensionsFailed:return Rs(e,\"isLoading\",!1);default:return e}}const Da={errors:{},statuses:{}};function ja(e=Da,t){return(0,a.HY)({data:Fa,extraFields:Ua,errors:(0,a.om)(Ba,ks),statuses:za})(e,t)}function Fa(e,t){var n;switch(t.type){case Ae.LoadFormFieldsSucceeded:return Gs(e,t.payload);case Se.HydrateInitialState:return Gs(e,null===(n=t.payload)||void 0===n?void 0:n.formFields);default:return e}}function Ua(e,t){var n,r;return t.type===Se.HydrateInitialState&&null!==(r=null===(n=t.payload)||void 0===n?void 0:n.extraFields)&&void 0!==r?r:e}function Ba(e=Da.errors,t){switch(t.type){case Ae.LoadFormFieldsSucceeded:return Rs(e,\"loadError\",void 0);case Ae.LoadFormFieldsFailed:return Rs(e,\"loadError\",t.payload);default:return e}}function za(e=Da.statuses,t){switch(t.type){case Ae.LoadFormFieldsRequested:return Rs(e,\"isLoading\",!0);case Ae.LoadFormFieldsSucceeded:case Ae.LoadFormFieldsFailed:return Rs(e,\"isLoading\",!1);default:return e}}const qa={errors:{},statuses:{}};function Ha(e=qa,t){return(0,a.HY)({data:Va,errors:(0,a.om)(Ga,ks),statuses:Ya})(e,t)}function Va(e,t){return t.type===Lt.LoadCountriesSucceeded?Vs(e,t.payload):e}function Ga(e=qa.errors,t){switch(t.type){case Lt.LoadCountriesRequested:case Lt.LoadCountriesSucceeded:return Rs(e,\"loadError\",void 0);case Lt.LoadCountriesFailed:return Rs(e,\"loadError\",t.payload);default:return e}}function Ya(e=qa.statuses,t){switch(t.type){case Lt.LoadCountriesRequested:return Rs(e,\"isLoading\",!0);case Lt.LoadCountriesSucceeded:case Lt.LoadCountriesFailed:return Rs(e,\"isLoading\",!1);default:return e}}const Wa={errors:{},meta:{},statuses:{}};function $a(e=Wa,t){return(0,a.HY)({data:Ka,errors:(0,a.om)(Za,ks),meta:Qa,statuses:Ja})(e,t)}function Ka(e,t){switch(t.type){case Dt.LoadOrderSucceeded:case Dt.LoadOrderPaymentsSucceeded:return Gs(e,(0,E.omit)(t.payload,[\"billingAddress\",\"coupons\"]));default:return e}}function Qa(e,t){switch(t.type){case Dt.FinalizeOrderSucceeded:case Dt.SubmitOrderSucceeded:return Gs(e,Object.assign(Object.assign({},t.meta),{callbackUrl:t.payload&&t.payload.order.callbackUrl,orderToken:t.payload&&t.payload.order.token,payment:t.payload&&t.payload.order&&t.payload.order.payment}));default:return e}}function Za(e=Wa.errors,t){switch(t.type){case Dt.LoadOrderRequested:case Dt.LoadOrderSucceeded:case Dt.LoadOrderPaymentsSucceeded:case Dt.LoadOrderPaymentsRequested:return Rs(e,\"loadError\",void 0);case Dt.LoadOrderFailed:case Dt.LoadOrderPaymentsFailed:return Rs(e,\"loadError\",t.payload);default:return e}}function Ja(e=Wa.statuses,t){switch(t.type){case Dt.LoadOrderRequested:case Dt.LoadOrderPaymentsRequested:return Rs(e,\"isLoading\",!0);case Dt.LoadOrderSucceeded:case Dt.LoadOrderFailed:case Dt.LoadOrderPaymentsSucceeded:case Dt.LoadOrderPaymentsFailed:return Rs(e,\"isLoading\",!1);default:return e}}const Xa={};function ec(e=Xa,t){return(0,a.HY)({data:tc})(e,t)}function tc(e,t){switch(t.type){case Dt.LoadOrderPaymentsSucceeded:case Dt.LoadOrderSucceeded:return Fs(e,t.payload&&t.payload.billingAddress);default:return e}}function nc(e={},t){return(0,a.HY)({data:rc})(e,t)}function rc(e,t){return t.type===An.SubmitPaymentSucceeded?t.payload:e}const ic={errors:{},statuses:{}};function oc(e=ic,t){return(0,a.HY)({data:sc,errors:(0,a.om)(cc,ks),meta:ac,statuses:uc})(e,t)}function sc(e,t){switch(t.type){case Kt.LoadPaymentMethodSucceeded:return function(e,t,n){if(!t)return e;const r=(0,E.pick)(t,\"id\"),i=\"object\"==typeof n?(0,E.pickBy)(n):n||r,o=(0,E.findIndex)(e,i),s=[...e];if(-1===o)s.push(t);else{const n=e[o];s[o]=ei(n)&&ei(t)?Gs(n,t):t}return s}(e||[],t.payload,t.payload&&{id:t.payload.id,gateway:t.payload.gateway});case Kt.LoadPaymentMethodsSucceeded:return Vs(e,t.payload,{matchObject:(e,t)=>e.id===t.id&&e.gateway===t.gateway});default:return e}}function ac(e,t){return t.type===Kt.LoadPaymentMethodsSucceeded?Gs(e,t.meta):e}function cc(e=ic.errors,t){switch(t.type){case Kt.LoadPaymentMethodsRequested:case Kt.LoadPaymentMethodsSucceeded:return Rs(e,\"loadError\",void 0);case Kt.LoadPaymentMethodsFailed:return Rs(e,\"loadError\",t.payload);case Kt.LoadPaymentMethodRequested:case Kt.LoadPaymentMethodSucceeded:return Gs(e,{loadMethodId:void 0,loadMethodError:void 0});case Kt.LoadPaymentMethodFailed:return Gs(e,{loadMethodId:t.meta.methodId,loadMethodError:t.payload});default:return e}}function uc(e=ic.statuses,t){switch(t.type){case Kt.LoadPaymentMethodsRequested:return Rs(e,\"isLoading\",!0);case Kt.LoadPaymentMethodsSucceeded:case Kt.LoadPaymentMethodsFailed:return Rs(e,\"isLoading\",!1);case Kt.LoadPaymentMethodRequested:return Gs(e,{isLoadingMethod:!0,loadMethodId:t.meta.methodId});case Kt.LoadPaymentMethodSucceeded:case Kt.LoadPaymentMethodFailed:return Gs(e,{isLoadingMethod:!1,loadMethodId:void 0});default:return e}}const dc={data:{},errors:{},statuses:{}};function lc(e=dc,t){return(0,a.HY)({data:hc,errors:(0,a.om)(pc,ks),statuses:fc})(e,t)}function hc(e=dc.data,t){switch(t.type){case tn.InitializeSucceeded:if(t.meta){const{methodId:n,gatewayId:r}=t.meta,i=r?`${n}.${r}`:n;return Gs(e,{[i]:{isInitialized:!0}})}break;case tn.DeinitializeSucceeded:if(t.meta){const{methodId:n,gatewayId:r}=t.meta,i=r?`${n}.${r}`:n;return Gs(e,{[i]:{isInitialized:!1}})}}return e}function pc(e=dc.errors,t){switch(t.type){case tn.InitializeRequested:case tn.InitializeSucceeded:return Gs(e,{initializeError:void 0,initializeMethodId:void 0});case tn.InitializeFailed:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:r}=t.meta;n=r?`${e}.${r}`:e}return Gs(e,{initializeError:t.payload,initializeMethodId:n})}case tn.DeinitializeRequested:case tn.DeinitializeSucceeded:return Gs(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case tn.DeinitializeFailed:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:r}=t.meta;n=r?`${e}.${r}`:e}return Gs(e,{deinitializeError:t.payload,deinitializeMethodId:n})}case tn.ExecuteRequested:case tn.ExecuteSucceeded:return Gs(e,{executeError:void 0,executeMethodId:void 0});case tn.ExecuteFailed:return Gs(e,{executeError:t.payload,executeMethodId:t.meta&&t.meta.methodId});case tn.FinalizeRequested:case tn.FinalizeSucceeded:return Gs(e,{finalizeError:void 0,finalizeMethodId:void 0});case tn.FinalizeFailed:return Gs(e,{finalizeError:t.payload,finalizeMethodId:t.meta&&t.meta.methodId});case tn.WidgetInteractionStarted:case tn.WidgetInteractionFinished:return Gs(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case tn.WidgetInteractionFailed:return Gs(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta.methodId});default:return e}}function fc(e=dc.statuses,t){switch(t.type){case tn.InitializeRequested:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:r}=t.meta;n=r?`${e}.${r}`:e}return Gs(e,{isInitializing:!0,initializeMethodId:n})}case tn.InitializeFailed:case tn.InitializeSucceeded:return Gs(e,{isInitializing:!1,initializeMethodId:void 0});case tn.DeinitializeRequested:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:r}=t.meta;n=r?`${e}.${r}`:e}return Gs(e,{isDeinitializing:!0,deinitializeMethodId:n})}case tn.DeinitializeFailed:case tn.DeinitializeSucceeded:return Gs(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case tn.ExecuteRequested:return Gs(e,{isExecuting:!0,executeMethodId:t.meta&&t.meta.methodId});case tn.ExecuteFailed:case tn.ExecuteSucceeded:return Gs(e,{isExecuting:!1,executeMethodId:void 0});case tn.FinalizeRequested:return Gs(e,{isFinalizing:!0,finalizeMethodId:t.meta&&t.meta.methodId});case tn.FinalizeFailed:case tn.FinalizeSucceeded:return Gs(e,{isFinalizing:!1,finalizeMethodId:void 0});case tn.WidgetInteractionStarted:return Gs(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta.methodId});case tn.WidgetInteractionFinished:case tn.WidgetInteractionFailed:return Gs(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}const mc={data:{}};function yc(e=mc,t){return(0,a.HY)({data:gc})(e,t)}function gc(e=mc.data,t){return t.type===Rr.UpdatePaymentProviderCustomer?Gs(e,t.payload):e}const _c={data:[],errors:{},statuses:{}};function vc(e=_c,t){return(0,a.HY)({data:bc,errors:(0,a.om)(Ec,ks),meta:Sc,statuses:Cc})(e,t)}function bc(e=_c.data,t){return t.type===oi.LoadInstrumentsSucceeded?Vs(e,t.payload&&t.payload.vaultedInstruments||[]):e}function Sc(e,t){switch(t.type){case oi.LoadInstrumentsSucceeded:case oi.DeleteInstrumentSucceeded:return Gs(e,t.meta);default:return e}}function Ec(e=_c.errors,t){switch(t.type){case oi.LoadInstrumentsRequested:case oi.LoadInstrumentsSucceeded:return Rs(e,\"loadError\",void 0);case oi.DeleteInstrumentRequested:case oi.DeleteInstrumentSucceeded:return Gs(e,{deleteError:void 0,failedInstrument:void 0});case oi.LoadInstrumentsFailed:return Rs(e,\"loadError\",t.payload);case oi.DeleteInstrumentFailed:return Gs(e,{deleteError:t.payload,failedInstrument:t.meta.instrumentId});default:return e}}function Cc(e=_c.statuses,t){switch(t.type){case oi.LoadInstrumentsRequested:return Rs(e,\"isLoading\",!0);case oi.DeleteInstrumentRequested:return Gs(e,{isDeleting:!0,deletingInstrument:t.meta.instrumentId});case oi.LoadInstrumentsSucceeded:case oi.LoadInstrumentsFailed:return Rs(e,\"isLoading\",!1);case oi.DeleteInstrumentSucceeded:case oi.DeleteInstrumentFailed:return Gs(e,{isDeleting:!1,deletingInstrument:void 0});default:return e}}const wc={data:{}};function Ic(e=wc,t){return t.meta&&t.meta.methodId?(0,a.HY)({data:(0,a.HY)({[t.meta.methodId]:Oc})})(e,t):e}function Oc(e,t){switch(t.type){case Mr.InitializeRemoteBillingSucceeded:return Rs(e,\"billing\",t.payload&&t.payload.billing);case Mr.InitializeRemoteShippingSucceeded:return Rs(e,\"shipping\",t.payload&&t.payload.shipping);case Mr.LoadRemoteSettingsSucceeded:return Rs(e,\"settings\",t.payload);case Mr.UpdateRemoteCheckout:return Gs(e,t.payload);default:return e}}const Pc={errors:{updateShippingOptionError:{},updateError:{},deleteError:{}},statuses:{isUpdating:{},isUpdatingShippingOption:{},isDeleting:{}}};function Ac(e=Pc,t){return(0,a.HY)({data:Tc,errors:(0,a.om)(kc,ks),statuses:xc})(e,t)}function Tc(e,t){var n,r;switch(t.type){case be.LoadCheckoutSucceeded:case Fr.LoadShippingOptionsSucceeded:case Fr.CreateConsignmentsSucceeded:case Fr.UpdateConsignmentSucceeded:case Fr.DeleteConsignmentSucceeded:case Fr.UpdateShippingOptionSucceeded:case ne.ApplyCouponSucceeded:case ne.RemoveCouponSucceeded:return Vs(e,t.payload&&t.payload.consignments);case ye.SignOutCustomerSucceeded:return Vs(e,[]);case Se.HydrateInitialState:return Vs(e,null===(r=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===r?void 0:r.consignments);default:return e}}function kc(e=Pc.errors,t){switch(t.type){case be.LoadCheckoutRequested:case be.LoadCheckoutSucceeded:case Fr.LoadShippingOptionsSucceeded:case Fr.LoadShippingOptionsRequested:return Rs(e,\"loadError\",void 0);case be.LoadCheckoutFailed:case Fr.LoadShippingOptionsFailed:return Rs(e,\"loadError\",t.payload);case Fr.CreateConsignmentsRequested:case Fr.CreateConsignmentsSucceeded:return Rs(e,\"createError\",void 0);case Fr.CreateConsignmentsFailed:return Rs(e,\"createError\",t.payload);case Fr.UpdateConsignmentSucceeded:case Fr.UpdateConsignmentRequested:return t.meta?Gs(e,{updateError:{[t.meta.id]:void 0}}):e;case Fr.UpdateConsignmentFailed:return t.meta?Gs(e,{updateError:{[t.meta.id]:t.payload}}):e;case Fr.DeleteConsignmentSucceeded:case Fr.DeleteConsignmentRequested:return t.meta?Gs(e,{deleteError:{[t.meta.id]:void 0}}):e;case Fr.DeleteConsignmentFailed:return t.meta?Gs(e,{deleteError:{[t.meta.id]:t.payload}}):e;case Fr.UpdateShippingOptionRequested:case Fr.UpdateShippingOptionSucceeded:return t.meta?Gs(e,{updateShippingOptionError:{[t.meta.id]:void 0}}):e;case Fr.UpdateShippingOptionFailed:return t.meta?Gs(e,{updateShippingOptionError:{[t.meta.id]:t.payload}}):e;default:return e}}function xc(e=Pc.statuses,t){switch(t.type){case be.LoadCheckoutRequested:return Rs(e,\"isLoading\",!0);case Fr.LoadShippingOptionsRequested:return Rs(e,\"isLoadingShippingOptions\",!0);case be.LoadCheckoutSucceeded:case be.LoadCheckoutFailed:return Rs(e,\"isLoading\",!1);case Fr.LoadShippingOptionsSucceeded:case Fr.LoadShippingOptionsFailed:return Rs(e,\"isLoadingShippingOptions\",!1);case Fr.CreateConsignmentsRequested:return Rs(e,\"isCreating\",!0);case Fr.CreateConsignmentsSucceeded:case Fr.CreateConsignmentsFailed:return Rs(e,\"isCreating\",!1);case Fr.UpdateConsignmentRequested:return t.meta?Gs(e,{isUpdating:{[t.meta.id]:!0}}):e;case Fr.UpdateConsignmentSucceeded:case Fr.UpdateConsignmentFailed:return t.meta?Gs(e,{isUpdating:{[t.meta.id]:!1}}):e;case Fr.DeleteConsignmentRequested:return t.meta?Gs(e,{isDeleting:{[t.meta.id]:!0}}):e;case Fr.DeleteConsignmentSucceeded:case Fr.DeleteConsignmentFailed:return t.meta?Gs(e,{isDeleting:{[t.meta.id]:!1}}):e;case Fr.UpdateShippingOptionRequested:return t.meta?Gs(e,{isUpdatingShippingOption:{[t.meta.id]:!0}}):e;case Fr.UpdateShippingOptionSucceeded:case Fr.UpdateShippingOptionFailed:return t.meta?Gs(e,{isUpdatingShippingOption:{[t.meta.id]:!1}}):e;default:return e}}function Rc(e,t){const n={};return Object.keys(e).forEach(r=>{const i=e[r],o=t?`${t}.${r}`:r;\"object\"==typeof i?Object.assign(n,Rc(i,o)):n[o]=i}),n}function Mc(e){return Object.keys(e).sort().reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:e[n]}),{})}const Nc={errors:{},statuses:{}};function Lc(e=Nc,t){return(0,a.HY)({data:Dc,errors:(0,a.om)(jc,ks),statuses:Fc})(e,t)}function Dc(e,t){if(t.type!==li.LoadPickupOptionsSucceeded)return e;if(t.meta){const n=Mc(Rc({consignmentId:t.meta.consignmentId,searchArea:t.meta.searchArea}));return Rs(e,btoa(`${JSON.stringify(n)}`),t.payload)}}function jc(e=Nc.errors,t){switch(t.type){case li.LoadPickupOptionsRequested:case li.LoadPickupOptionsSucceeded:return Rs(e,\"loadError\",void 0);case li.LoadPickupOptionsFailed:return Rs(e,\"loadError\",t.payload);default:return e}}function Fc(e=Nc.statuses,t){switch(t.type){case li.LoadPickupOptionsRequested:return Rs(e,\"isLoading\",!0);case li.LoadPickupOptionsSucceeded:case li.LoadPickupOptionsFailed:return Rs(e,\"isLoading\",!1);default:return e}}const Uc={errors:{},statuses:{}};function Bc(e=Uc,t){return(0,a.HY)({data:zc,errors:(0,a.om)(qc,ks),statuses:Hc})(e,t)}function zc(e,t){return t.type===Vr.LoadShippingCountriesSucceeded?Vs(e,t.payload):e}function qc(e=Uc.errors,t){switch(t.type){case Vr.LoadShippingCountriesRequested:case Vr.LoadShippingCountriesSucceeded:return Rs(e,\"loadError\",void 0);case Vr.LoadShippingCountriesFailed:return Rs(e,\"loadError\",t.payload);default:return e}}function Hc(e=Uc.statuses,t){switch(t.type){case Vr.LoadShippingCountriesRequested:return Rs(e,\"isLoading\",!0);case Vr.LoadShippingCountriesSucceeded:case Vr.LoadShippingCountriesFailed:return Rs(e,\"isLoading\",!1);default:return e}}const Vc={data:{},errors:{},statuses:{}};function Gc(e=Vc,t){return(0,a.HY)({data:Yc,errors:(0,a.om)(Wc,ks),statuses:$c})(e,t)}function Yc(e=Vc.data,t){switch(t.type){case hi.InitializeSucceeded:return Gs(e,{[t.meta&&t.meta.methodId]:{isInitialized:!0}});case hi.DeinitializeSucceeded:return Gs(e,{[t.meta&&t.meta.methodId]:{isInitialized:!1}})}return e}function Wc(e=Vc.errors,t){switch(t.type){case hi.InitializeRequested:case hi.InitializeSucceeded:return Gs(e,{initializeError:void 0,initializeMethodId:void 0});case hi.InitializeFailed:return Gs(e,{initializeError:t.payload,initializeMethodId:t.meta&&t.meta.methodId});case hi.DeinitializeRequested:case hi.DeinitializeSucceeded:return Gs(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case hi.DeinitializeFailed:return Gs(e,{deinitializeError:t.payload,deinitializeMethodId:t.meta&&t.meta.methodId});case hi.UpdateAddressRequested:case hi.UpdateAddressSucceeded:return Gs(e,{updateAddressError:void 0,updateAddressMethodId:void 0});case hi.UpdateAddressFailed:return Gs(e,{updateAddressError:t.payload,updateAddressMethodId:t.meta&&t.meta.methodId});case hi.SelectOptionRequested:case hi.SelectOptionSucceeded:return Gs(e,{selectOptionError:void 0,selectOptionMethodId:void 0});case hi.SelectOptionFailed:return Gs(e,{selectOptionError:t.payload,selectOptionMethodId:t.meta&&t.meta.methodId});case hi.WidgetInteractionStarted:case hi.WidgetInteractionFinished:return Gs(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case hi.WidgetInteractionFailed:return Gs(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta&&t.meta.methodId});default:return e}}function $c(e=Vc.statuses,t){switch(t.type){case hi.InitializeRequested:return Gs(e,{isInitializing:!0,initializeMethodId:t.meta&&t.meta.methodId});case hi.InitializeFailed:case hi.InitializeSucceeded:return Gs(e,{isInitializing:!1,initializeMethodId:void 0});case hi.DeinitializeRequested:return Gs(e,{isDeinitializing:!0,deinitializeMethodId:t.meta&&t.meta.methodId});case hi.DeinitializeFailed:case hi.DeinitializeSucceeded:return Gs(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case hi.UpdateAddressRequested:return Gs(e,{isUpdatingAddress:!0,updateAddressMethodId:t.meta&&t.meta.methodId});case hi.UpdateAddressFailed:case hi.UpdateAddressSucceeded:return Gs(e,{isUpdatingAddress:!1,updateAddressMethodId:void 0});case hi.SelectOptionRequested:return Gs(e,{isSelectingOption:!0,selectOptionMethodId:t.meta&&t.meta.methodId});case hi.SelectOptionFailed:case hi.SelectOptionSucceeded:return Gs(e,{isSelectingOption:!1,selectOptionMethodId:void 0});case hi.WidgetInteractionStarted:return Gs(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta&&t.meta.methodId});case hi.WidgetInteractionFinished:case hi.WidgetInteractionFailed:return Gs(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}const Kc={errors:{},statuses:{}};function Qc(e=Kc,t){return(0,a.HY)({data:Zc,errors:(0,a.om)(Jc,ks),statuses:Xc})(e,t)}function Zc(e,t){return t.type===ss.SendSignInEmailSucceeded?Gs(e,t.payload):e}function Jc(e=Kc.errors,t){switch(t.type){case ss.SendSignInEmailRequested:case ss.SendSignInEmailSucceeded:return Rs(e,\"sendError\",void 0);case ss.SendSignInEmailFailed:return Rs(e,\"sendError\",t.payload);default:return e}}function Xc(e=Kc.statuses,t){switch(t.type){case ss.SendSignInEmailRequested:return Rs(e,\"isSending\",!0);case ss.SendSignInEmailFailed:case ss.SendSignInEmailSucceeded:return Rs(e,\"isSending\",!1);default:return e}}const eu={errors:{},statuses:{}};function tu(e=eu,t){return(0,a.HY)({errors:(0,a.om)(nu,ks),statuses:ru})(e,t)}function nu(e=eu.errors,t){switch(t.type){case Gr.ApplyStoreCreditRequested:case Gr.ApplyStoreCreditSucceeded:return Rs(e,\"applyError\",void 0);case Gr.ApplyStoreCreditFailed:return Rs(e,\"applyError\",t.payload);default:return e}}function ru(e=eu.statuses,t){switch(t.type){case Gr.ApplyStoreCreditRequested:return Rs(e,\"isApplying\",!0);case Gr.ApplyStoreCreditSucceeded:case Gr.ApplyStoreCreditFailed:return Rs(e,\"isApplying\",!1);default:return e}}const iu={errors:{},statuses:{}};function ou(e=iu,t){return(0,a.HY)({errors:(0,a.om)(su,ks),statuses:au})(e,t)}function su(e=iu.errors,t){switch(t.type){case $r.UpdateSubscriptionsRequested:case $r.UpdateSubscriptionsSucceeded:return Rs(e,\"updateError\",void 0);case $r.UpdateSubscriptionsFailed:return Rs(e,\"updateError\",t.payload);default:return e}}function au(e=iu.statuses,t){switch(t.type){case $r.UpdateSubscriptionsRequested:return Rs(e,\"isUpdating\",!0);case $r.UpdateSubscriptionsFailed:case $r.UpdateSubscriptionsSucceeded:return Rs(e,\"isUpdating\",!1);default:return e}}const cu={errors:{},statuses:{}};function uu(e=cu,t){return(0,a.HY)({data:du,errors:(0,a.om)(lu,ks),statuses:hu})(e,t)}function du(e,t){var n;switch(t.type){case be.LoadCheckoutSucceeded:case be.UpdateCheckoutSucceeded:case Gr.ApplyStoreCreditSucceeded:case S.UpdateBillingAddressSucceeded:case ne.ApplyCouponSucceeded:case ne.RemoveCouponSucceeded:case Fr.CreateConsignmentsSucceeded:case Fr.UpdateConsignmentSucceeded:case Fr.DeleteConsignmentSucceeded:case Fr.UpdateShippingOptionSucceeded:case Fr.LoadShippingOptionsSucceeded:case se.ApplyGiftCertificateSucceeded:case se.RemoveGiftCertificateSucceeded:case Re.VerifyCheckoutSucceeded:return Gs(e,(0,E.omit)(t.payload,[\"billingAddress\",\"cart\",\"consignments\",\"customer\",\"coupons\",\"giftCertificates\"]));case Dt.SubmitOrderSucceeded:return Rs(e,\"orderId\",t.payload&&t.payload.order.orderId);case Se.HydrateInitialState:return Gs(e,(0,E.omit)(null===(n=t.payload)||void 0===n?void 0:n.checkout,[\"billingAddress\",\"cart\",\"consignments\",\"customer\",\"coupons\",\"giftCertificates\"]));default:return e}}function lu(e=cu.errors,t){switch(t.type){case be.LoadCheckoutRequested:case be.LoadCheckoutSucceeded:return Rs(e,\"loadError\",void 0);case be.LoadCheckoutFailed:return Rs(e,\"loadError\",t.payload);case be.UpdateCheckoutRequested:case be.UpdateCheckoutSucceeded:return Rs(e,\"updateError\",void 0);case be.UpdateCheckoutFailed:return Rs(e,\"updateError\",t.payload);default:return e}}function hu(e=cu.statuses,t){switch(t.type){case be.LoadCheckoutRequested:return Rs(e,\"isLoading\",!0);case be.LoadCheckoutFailed:case be.LoadCheckoutSucceeded:return Rs(e,\"isLoading\",!1);case be.UpdateCheckoutRequested:return Rs(e,\"isUpdating\",!0);case be.UpdateCheckoutFailed:case be.UpdateCheckoutSucceeded:return Rs(e,\"isUpdating\",!1);case Re.ExecuteRequested:return Rs(e,\"isExecutingSpamCheck\",!0);case Re.ExecuteFailed:case Re.ExecuteSucceeded:return Rs(e,\"isExecutingSpamCheck\",!1);default:return e}}function pu(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}function fu(e){return function(e){const t=Object.create(e);return function(e,t){let n=Object.getPrototypeOf(e);for(;n;)t(n),n=Object.getPrototypeOf(n)}(e,n=>{Object.getOwnPropertyNames(n).forEach(n=>{\"constructor\"!==n&&\"function\"==typeof t[n]&&\"_\"!==n.charAt(0)&&(t[n]=((e,t)=>(...n)=>(0,a.ol)(e[t].call(e,...n)))(e,n))})}),t}(e)}const mu={\"mollie.credit_card\":{provider:\"mollie\",method:\"credit_card\"},\"adyenv2.scheme\":{provider:\"adyenv2\",method:\"scheme\"},\"adyenv3.scheme\":{provider:\"adyenv3\",method:\"scheme\"},\"adyenv2.bcmc\":{provider:\"adyenv2\",method:\"bcmc\"},\"adyenv2.ideal\":{provider:\"adyenv2\",method:\"ideal\"},\"adyenv2.sepadirectdebit\":{provider:\"adyenv2\",method:\"sepadirectdebit\"},\"adyenv2.directEbanking\":{provider:\"adyenv2\",method:\"directEbanking\"},\"adyenv2.giropay\":{provider:\"adyenv2\",method:\"giropay\"},braintree:{provider:\"braintree\",method:\"credit_card\"},braintreepaypal:{provider:\"braintree\",method:\"paypal\"},braintreeach:{provider:\"braintree\",method:\"ach\"},authorizenet:{provider:\"authorizenet\",method:\"credit_card\"},elavon:{provider:\"elavon\",method:\"credit_card\"},checkoutcom:{provider:\"checkoutcom\",method:\"credit_card\"},\"checkoutcom.credit_card\":{provider:\"checkoutcom\",method:\"credit_card\"},\"checkoutcom.card\":{provider:\"checkoutcom\",method:\"card\"},sagepay:{provider:\"sagepay\",method:\"credit_card\"},stripe:{provider:\"stripe\",method:\"credit_card\"},\"stripev3.card\":{provider:\"stripev3\",method:\"card\"},\"stripeupe.card\":{provider:\"stripeupe\",method:\"card\"},cybersource:{provider:\"cybersource\",method:\"credit_card\"},cybersourcev2:{provider:\"cybersourcev2\",method:\"credit_card\"},bnz:{provider:\"bnz\",method:\"credit_card\"},converge:{provider:\"converge\",method:\"credit_card\"},bluesnapv2:{provider:\"bluesnapv2\",method:\"credit_card\"},\"bluesnapdirect.credit_card\":{provider:\"bluesnapdirect\",method:\"credit_card\"},\"bluesnapdirect.ecp\":{provider:\"bluesnapdirect\",method:\"ecp\"},\"bluesnapdirect.sepa_direct_debit\":{provider:\"bluesnapdirect\",method:\"sepa_direct_debit\"},orbital:{provider:\"orbital\",method:\"credit_card\"},paymetric:{provider:\"paymetric\",method:\"credit_card\"},bolt:{provider:\"bolt\",method:\"credit_card\"},\"barclaycard.credit_card\":{provider:\"barclaycard\",method:\"credit_card\"},moneris:{provider:\"moneris\",method:\"credit_card\"},cba_mpgs:{provider:\"cba_mpgs\",method:\"credit_card\"},worldpayaccess:{provider:\"worldpayaccess\",method:\"credit_card\"},\"worldpayaccess.credit_card\":{provider:\"worldpayaccess\",method:\"credit_card\"},squarev2:{provider:\"squarev2\",method:\"credit_card\"},paypalcommercecreditcards:{provider:\"paypalcommerce\",method:\"credit_card\"},paypalcommerce:{provider:\"paypalcommerce\",method:\"paypal\"},bigcommerce_payments_creditcards:{provider:\"bigcommerce_payments\",method:\"credit_card\"},bigcommerce_payments:{provider:\"bigcommerce_payments\",method:\"paypal\"},tdonlinemart:{provider:\"tdonlinemart\",method:\"credit_card\"}};function yu(e){return(0,E.pickBy)({firstName:e.firstName,lastName:e.lastName,company:e.company,address1:e.address1,address2:e.address2,city:e.city,stateOrProvince:e.stateOrProvince,countryCode:e.countryCode,postalCode:e.postalCode,phone:e.phone,customFields:e.customFields},E.identity)}const gu={errors:{},statuses:{}};function _u(){const e=function(){const e=_s(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.token},e=>()=>e),t=_s(e=>e.errors.loadError,e=>()=>e),n=_s(e=>!!e.statuses.isLoading,e=>()=>e);return(0,Y.B4)((r=Ms)=>({getToken:e(r),getLoadError:t(r),isLoading:n(r)}))}(),t=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e,e=>()=>pu(e(),()=>new P(b.MissingBillingAddress))),n=_s(e=>e.errors.updateError,e=>()=>e),r=_s(e=>e.errors.continueAsGuestError,e=>()=>e),i=_s(e=>e.errors.loadError,e=>()=>e),o=_s(e=>!!e.statuses.isUpdating,e=>()=>e),s=_s(e=>!!e.statuses.isContinuingAsGuest,e=>()=>e),a=_s(e=>!!e.statuses.isLoading,e=>()=>e);return(0,Y.B4)((c=Us)=>({getBillingAddress:e(c),getBillingAddressOrThrow:t(c),getUpdateError:n(c),getContinueAsGuestError:r(c),getLoadError:i(c),isUpdating:o(c),isContinuingAsGuest:s(c),isLoading:a(c)}))}(),n=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e,e=>()=>pu(e(),()=>new P(b.MissingCart))),n=_s(e=>e.errors.loadError,e=>()=>e),r=_s(e=>!!e.statuses.isLoading,e=>()=>e),i=_s(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.locale},e=>()=>e);return(0,Y.B4)((o=Ys)=>({getCart:e(o),getCartOrThrow:t(o),getLoadError:n(o),isLoading:r(o),getLocale:i(o)}))}(),r=function(){const e=_s(e=>e,e=>()=>e),t=_s(e=>e.statuses,e=>(0,Y.Bj)(t=>{if(t){const n=e[t];return!0===(n&&n.isInitializing)}return(0,E.some)(e,{isInitializing:!0})})),n=_s(e=>e.data,e=>(0,Y.Bj)((t,n)=>{const r=e[t];return!!r&&(n?!0===r.initializedContainers[n]:(0,E.some)(r.initializedContainers,e=>!0===e))})),r=_s(e=>e.statuses,e=>(0,Y.Bj)(t=>{if(t){const n=e[t];return!0===(n&&n.isDeinitializing)}return(0,E.some)(e,{isDeinitializing:!0})})),i=_s(e=>e.errors,e=>(0,Y.Bj)(t=>{const n=t?e[t]:(0,E.find)((0,E.values)(e),e=>!(!e||!e.initializeError));return n&&n.initializeError})),o=_s(e=>e.errors,e=>(0,Y.Bj)(t=>{const n=t?e[t]:(0,E.find)((0,E.values)(e),e=>!(!e||!e.deinitializeError));return n&&n.deinitializeError}));return(0,Y.B4)((s=Js)=>({getState:e(s),isInitializing:t(s),isInitialized:n(s),isDeinitializing:r(s),getInitializeError:i(s),getDeinitializeError:o(s)}))}(),i=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e=>e.data,e=>t=>{if(!e)return;const{flashMessages:n}=e.context;return n?void 0!==t?n.filter(({type:e})=>t===e):n:void 0}),n=_s(e=>e.data,(e,{formState:t})=>t&&t.data,(e,t={customerAccount:[],shippingAddress:[],billingAddress:[]})=>()=>e?Object.assign(Object.assign({},e.storeConfig),{formFields:t}):void 0),r=_s(n,e=>()=>pu(e(),()=>new P(b.MissingCheckoutConfig))),i=_s(e=>e.data&&e.data.context,e=>()=>e),o=_s(e=>e.meta&&e.meta.externalSource,e=>()=>e),s=_s(e=>{var t;return null===(t=e.meta)||void 0===t?void 0:t.host},e=>()=>e),a=_s(e=>{var t;return null===(t=e.meta)||void 0===t?void 0:t.locale},e=>()=>e),c=_s(e=>e.meta&&e.meta.variantIdentificationToken,e=>()=>e),u=_s(e=>e.errors.loadError,e=>()=>e),d=_s(e=>!!e.statuses.isLoading,e=>()=>e);return(0,Y.B4)((l=sa,h)=>({getConfig:e(l),getFlashMessages:t(l),getStoreConfig:n(l,{formState:h}),getStoreConfigOrThrow:r(l,{formState:h}),getContextConfig:i(l),getExternalSource:o(l),getHost:s(l),getLocale:a(l),getVariantIdentificationToken:c(l),getLoadError:u(l),isLoading:d(l)}))}(),s=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e=>e.errors.loadError,e=>()=>e),n=_s(e=>!!e.statuses.isLoading,e=>()=>e);return(0,Y.B4)((r=qa)=>({getCountries:e(r),getLoadError:t(r),isLoading:n(r)}))}(),a=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e=>e.errors.removeCouponError,e=>()=>e),n=_s(e=>e.errors.applyCouponError,e=>()=>e),r=_s(e=>!!e.statuses.isApplyingCoupon,e=>()=>e),i=_s(e=>!!e.statuses.isRemovingCoupon,e=>()=>e);return(0,Y.B4)((o=la)=>({getCoupons:e(o),getRemoveError:t(o),getApplyError:n(o),isApplying:r(o),isRemoving:i(o)}))}(),c=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e,e=>()=>pu(e(),()=>new P(b.MissingCustomer))),n=_s(e=>e.errors.createError,e=>()=>e),r=_s(e=>!!e.statuses.isCreating,e=>()=>e),i=_s(e=>e.errors.createAddressError,e=>()=>e),o=_s(e=>!!e.statuses.isCreatingAddress,e=>()=>e);return(0,Y.B4)((s=Sa)=>({getCustomer:e(s),getCustomerOrThrow:t(s),getCreateAccountError:n(s),isCreatingCustomerAccount:r(s),getCreateAddressError:i(s),isCreatingCustomerAddress:o(s)}))}(),u=function(){const e=_s(e=>e.errors.signInMethodId,e=>e.errors.signInError,(e,t)=>n=>{if(!n||e===n)return t}),t=_s(e=>e.errors.signOutMethodId,e=>e.errors.signOutError,(e,t)=>n=>{if(!n||e===n)return t}),n=_s(e=>e.errors.executePaymentMethodCheckoutMethodId,e=>e.errors.executePaymentMethodCheckoutError,(e,t)=>n=>{if(!n||e===n)return t}),r=_s(e=>e.errors.initializeMethodId,e=>e.errors.initializeErrors,(e,t)=>n=>{if(e&&t)return n?t[n]:t[e]}),i=_s(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),o=_s(e=>e.statuses.signInMethodId,e=>e.statuses.isSigningIn,(e,t)=>n=>!(n&&e!==n||!t)),s=_s(e=>e.statuses.signOutMethodId,e=>e.statuses.isSigningOut,(e,t)=>n=>!(n&&e!==n||!t)),a=_s(e=>e.statuses.executePaymentMethodCheckoutMethodId,e=>e.statuses.isExecutingPaymentMethodCheckout,(e,t)=>n=>!(n&&e!==n||!t)),c=_s(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),u=_s(e=>e.data,e=>t=>!(!e[t]||!e[t].isInitialized)),d=_s(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return(0,Y.B4)((l=Oa)=>({getSignInError:e(l),getSignOutError:t(l),getExecutePaymentMethodCheckoutError:n(l),getInitializeError:r(l),getWidgetInteractionError:i(l),isSigningIn:o(l),isSigningOut:s(l),isExecutingPaymentMethodCheckout:a(l),isInitializing:c(l),isInitialized:u(l),isWidgetInteracting:d(l)}))}(),d=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e=>e.errors.removeGiftCertificateError,e=>()=>e),n=_s(e=>e.errors.applyGiftCertificateError,e=>()=>e),r=_s(e=>!!e.statuses.isApplyingGiftCertificate,e=>()=>e),i=_s(e=>!!e.statuses.isRemovingGiftCertificate,e=>()=>e);return(0,Y.B4)((o=ya)=>({getGiftCertificates:e(o),getRemoveError:t(o),getApplyError:n(o),isApplying:r(o),isRemoving:i(o)}))}(),l=function(){const e=_s(e=>e.data,e=>t=>{if(!e)return;const n=t.gateway?`${t.gateway}.${t.id}`:t.id,r=mu[n];return r?(0,E.filter)(e,r):[]}),t=_s(e=>e.data,(e=[])=>t=>{const n=(0,E.values)(mu);return e.find(e=>e.bigpayToken===t&&\"card\"===e.type&&n.some(t=>(0,E.isMatch)(e,t)))}),n=_s(t,e=>t=>pu(e(t),()=>new P(b.MissingPaymentInstrument))),r=_s(e=>e.data,e=>()=>{if(e)return(0,E.flatMap)(mu,t=>(0,E.filter)(e,e=>(0,E.isMatch)(e,t)))}),i=_s(e=>e.meta,e=>()=>e),o=_s(e=>e.errors.loadError,e=>()=>e),s=_s(e=>e.errors.failedInstrument,e=>e.errors.deleteError,(e,t)=>n=>{if(!n||e===n)return t}),a=_s(e=>e.statuses.isLoading,e=>()=>!!e),c=_s(e=>e.statuses.deletingInstrument,e=>e.statuses.isDeleting,(e,t)=>n=>!(n&&e!==n||!t));return(0,Y.B4)((u=_c)=>({getCardInstrument:t(u),getCardInstrumentOrThrow:n(u),getInstruments:r(u),getInstrumentsByPaymentMethod:e(u),getInstrumentsMeta:i(u),getLoadError:o(u),getDeleteError:s(u),isLoading:a(u),isDeleting:c(u)}))}(),h=function(){const e=_s(e=>e.data,e=>(t=[],n)=>{const r=(0,E.find)(t,{code:n});return(e?e.shippingAddress:[]).map(e=>c(e,t,r))}),t=_s(e=>e.data,e=>(t=[],n)=>{const r=(0,E.find)(t,{code:n});return(e?e.billingAddress:[]).map(e=>c(e,t,r))}),n=_s(e=>e.data,e=>()=>e?e.customerAccount:[]),r=_s(e=>e.extraFields,e=>()=>e&&e.address.length?e.address.map(o):[]),i=_s(e=>e.extraFields,e=>()=>e&&e.order.length?e.order.map(o):[]),s=_s(e=>e.errors.loadError,e=>()=>e),a=_s(e=>!!e.statuses.isLoading,e=>()=>e);function c(e,t,n){return\"countryCode\"===e.name?function(e,t=[],n){if(!t.length)return e;const{code:r=\"\"}=n||{},i=t.map(({code:e,name:t})=>({value:e,label:t}));return Object.assign(Object.assign({},e),{options:{items:i},default:r,type:\"array\",fieldType:\"dropdown\",itemtype:\"string\"})}(e,t,n):\"stateOrProvince\"===e.name?function(e,t){const{subdivisions:n=[],requiresState:r}=t||{};if(!n.length)return Object.assign(Object.assign({},e),{required:r??!1});const i=n.map(({code:e,name:t})=>({value:e,label:t}));return Object.assign(Object.assign({},e),{name:\"stateOrProvinceCode\",options:{items:i},required:r??!0,type:\"array\",fieldType:\"dropdown\",itemtype:\"string\"})}(e,n):\"postalCode\"===e.name?function(e,t){const{hasPostalCodes:n=[]}=t||{};return void 0===n?e:Object.assign(Object.assign({},e),{required:Boolean(n)})}(e,n):e}return(0,Y.B4)((o=Da)=>({getShippingAddressFields:e(o),getBillingAddressFields:t(o),getCustomerAccountFields:n(o),getAddressExtraFields:r(o),getOrderExtraFields:i(o),getLoadError:s(o),isLoading:a(o)}))}(),p=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e=>e.meta,e=>()=>e),n=_s(e=>e.data,e=>(t,n)=>n?(0,E.find)(e,{id:t,gateway:n}):(0,E.find)(e,{id:t})),r=_s(n,e=>(t,n)=>pu(e(t,n),()=>new P(b.MissingPaymentMethod))),i=_s(e=>e.errors.loadError,e=>()=>e),o=_s(e=>e.errors.loadMethodId,e=>e.errors.loadMethodError,(e,t)=>n=>{if(!n||e===n)return t}),s=_s(e=>e.statuses.isLoading,e=>()=>!!e),a=_s(e=>e.statuses.loadMethodId,e=>e.statuses.isLoadingMethod,(e,t)=>n=>!(n&&e!==n||!t));return(0,Y.B4)((c=ic)=>({getPaymentMethods:e(c),getPaymentMethodsMeta:t(c),getPaymentMethod:n(c),getPaymentMethodOrThrow:r(c),getLoadError:i(c),getLoadMethodError:o(c),isLoading:s(c),isLoadingMethod:a(c)}))}(),f=function(){const e=_s(e=>e.errors.initializeMethodId,e=>e.errors.initializeError,(e,t)=>n=>{if(!n||e===n)return t}),t=_s(e=>e.errors.executeMethodId,e=>e.errors.executeError,(e,t)=>n=>{if(!n||e===n)return t}),n=_s(e=>e.errors.finalizeMethodId,e=>e.errors.finalizeError,(e,t)=>n=>{if(!n||e===n)return t}),r=_s(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),i=_s(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),o=_s(e=>e.data,e=>t=>{const n=t.gatewayId?`${t.methodId}.${t.gatewayId}`:t.methodId;return!(!e[n]||!e[n].isInitialized)}),s=_s(e=>e.statuses.executeMethodId,e=>e.statuses.isExecuting,(e,t)=>n=>!(n&&e!==n||!t)),a=_s(e=>e.statuses.finalizeMethodId,e=>e.statuses.isFinalizing,(e,t)=>n=>!(n&&e!==n||!t)),c=_s(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return(0,Y.B4)((u=dc)=>({getInitializeError:e(u),getExecuteError:t(u),getFinalizeError:n(u),getWidgetInteractingError:r(u),isInitializing:i(u),isInitialized:o(u),isExecuting:s(u),isFinalizing:a(u),isWidgetInteracting:c(u)}))}(),m=function(){const e=_s(e=>e.data,e=>(t,n)=>{if(!e)return;const r=Mc(Rc({consignmentId:t,searchArea:n})),i=btoa(`${JSON.stringify(r)}`);return e[i]}),t=_s(e=>e.errors.loadError,e=>()=>e),n=_s(e=>!!e.statuses.isLoading,e=>()=>e);return(0,Y.B4)((r=Nc)=>({getPickupOptions:e(r),getLoadError:t(r),isLoading:n(r)}))}(),y=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e,e=>()=>pu(e(),()=>new P(b.MissingPaymentProviderCustomer)));return(0,Y.B4)((n=mc)=>({getPaymentProviderCustomer:e(n),getPaymentProviderCustomerOrThrow:t(n)}))}(),g=function(){const e=_s(e=>e.data,e=>t=>e[t]);return(0,Y.B4)((t=wc)=>({getCheckout:e(t)}))}(),_=function(){const e=_s(e=>e.data,e=>()=>{const t=null==e?void 0:e.find(e=>!e.selectedPickupOption);return null==t?void 0:t.shippingAddress}),t=_s(e,e=>()=>pu(e(),()=>new P(b.MissingShippingAddress))),n=_s(e=>e.data,e=>()=>{const t=null==e?void 0:e.filter(e=>!e.selectedPickupOption);return t?t.map(e=>e.shippingAddress):[]}),r=_s(n,e=>()=>pu(e(),()=>new P(b.MissingShippingAddress)));return(0,Y.B4)((i=Pc)=>({getShippingAddress:e(i),getShippingAddressOrThrow:t(i),getShippingAddresses:n(i),getShippingAddressesOrThrow:r(i)}))}(),v=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e=>e.errors.loadError,e=>()=>e),n=_s(e=>e.statuses.isLoading,e=>()=>!!e);return(0,Y.B4)((r=Uc)=>({getShippingCountries:e(r),getLoadError:t(r),isLoading:n(r)}))}(),S=function(){const e=_s(e=>e.errors.updateAddressMethodId,e=>e.errors.updateAddressError,(e,t)=>n=>{if(!n||e===n)return t}),t=_s(e=>e.errors.selectOptionMethodId,e=>e.errors.selectOptionError,(e,t)=>n=>{if(!n||e===n)return t}),n=_s(e=>e.errors.initializeMethodId,e=>e.errors.initializeError,(e,t)=>n=>{if(!n||e===n)return t}),r=_s(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),i=_s(e=>e.statuses.updateAddressMethodId,e=>e.statuses.isUpdatingAddress,(e,t)=>n=>!(n&&e!==n||!t)),o=_s(e=>e.statuses.selectOptionMethodId,e=>e.statuses.isSelectingOption,(e,t)=>n=>!(n&&e!==n||!t)),s=_s(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),a=_s(e=>e.data,e=>t=>!(!e[t]||!e[t].isInitialized)),c=_s(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return(0,Y.B4)((u=Vc)=>({getUpdateAddressError:e(u),getSelectOptionError:t(u),getInitializeError:n(u),getWidgetInteractionError:r(u),isUpdatingAddress:i(u),isSelectingOption:o(u),isInitializing:s(u),isInitialized:a(u),isWidgetInteracting:c(u)}))}(),C=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e,e=>()=>pu(e(),()=>new P(b.MissingConsignments))),n=_s(e=>e.data,e=>t=>{if(e&&e.length)return(0,E.find)(e,{id:t})}),r=_s(e=>e.data,e=>t=>{if(e&&e.length)return(0,E.find)(e,e=>{return n=e.shippingAddress,r=t,(0,E.isEqual)(yu(n),yu(r));var n,r})}),i=_s(e=>e.data,e=>()=>{if(e&&e.length)return e[0].selectedShippingOption}),o=_s(e=>e.errors.loadError,e=>()=>e),s=_s(e=>e.errors.createError,e=>()=>e),a=_s(e=>e.errors.loadShippingOptionsError,e=>()=>e),c=_s(e,(e,{cart:t})=>t.getCart,(e,t)=>()=>{const n=t();if(!n)return[];const r=(e()||[]).reduce((e,t)=>e.concat(t.lineItemIds),[]);return(n.lineItems.physicalItems||[]).filter(e=>r.indexOf(e.id)<0)}),u=_s(e=>e.errors.updateError,e=>t=>t?e[t]:(0,E.find)(e)),d=_s(e=>e.errors.deleteError,e=>t=>t?e[t]:(0,E.find)(e)),l=_s(r,u,s,(e,t,n)=>r=>{const i=e(r);return i?t(i.id):n()}),h=_s(e=>e.errors.updateShippingOptionError,e=>t=>t?e[t]:(0,E.find)(e)),p=_s(e=>e.statuses.isLoading,e=>()=>!0===e),f=_s(e=>e.statuses.isLoadingShippingOptions,e=>()=>!0===e),m=_s(e=>e.statuses.isCreating,e=>()=>!0===e),y=_s(e=>e.statuses.isUpdating,e=>t=>t?!0===e[t]:!0===(0,E.find)(e)),g=_s(e=>e.statuses.isDeleting,e=>t=>t?!0===e[t]:!0===(0,E.find)(e)),_=_s(r,y,m,(e,t,n)=>r=>{const i=e(r);return i?t(i.id):n()}),v=_s(e=>e.statuses.isUpdatingShippingOption,e=>t=>t?!0===e[t]:!0===(0,E.find)(e));return(0,Y.B4)((b=Pc,S)=>({getConsignments:e(b),getConsignmentsOrThrow:t(b),getConsignmentById:n(b),getConsignmentByAddress:r(b),getShippingOption:i(b),getLoadError:o(b),getCreateError:s(b),getLoadShippingOptionsError:a(b),getUnassignedItems:c(b,{cart:S}),getUpdateError:u(b),getDeleteError:d(b),getItemAssignmentError:l(b),getUpdateShippingOptionError:h(b),isLoading:p(b),isLoadingShippingOptions:f(b),isCreating:m(b),isUpdating:y(b),isDeleting:g(b),isAssigningItems:_(b),isUpdatingShippingOption:v(b)}))}(),w=function(){const e=_s(e=>e.data,(e,{billingAddress:t})=>t.getBillingAddress,(e,{cart:t})=>t.getCart,(e,{customer:t})=>t.getCustomer,(e,{consignments:t})=>t.getConsignments,(e,{coupons:t})=>t.getCoupons,(e,{giftCertificates:t})=>t.getGiftCertificates,(e,t,n,r,i,o,s)=>()=>{const a=t(),c=n(),u=r(),d=i()||[],l=o()||[],h=s()||[];if(e&&c&&u)return Object.assign(Object.assign({},e),{billingAddress:a,cart:c,customer:u,consignments:d,coupons:l,giftCertificates:h})}),t=_s(e,e=>()=>pu(e(),()=>new P(b.MissingCheckout))),n=_s(e,e=>t=>{const n=e();if(!n)return;const r=n.grandTotal||0,i=n.customer.storeCredit||0;return t?Math.max(r-i,0):n.outstandingBalance}),r=_s(e=>e.errors.loadError,e=>()=>e),i=_s(e=>e.errors.updateError,e=>()=>e),o=_s(e=>e.statuses.isExecutingSpamCheck,e=>()=>!0===e),s=_s(e=>e.statuses.isLoading,e=>()=>!0===e),a=_s(e=>e.statuses.isUpdating,e=>()=>!0===e);return(0,Y.B4)((c=cu,u,d,l,h,p,f)=>({getCheckout:e(c,{billingAddress:u,cart:d,consignments:l,coupons:h,customer:p,giftCertificates:f}),getCheckoutOrThrow:t(c,{billingAddress:u,cart:d,consignments:l,coupons:h,customer:p,giftCertificates:f}),getOutstandingBalance:n(c,{billingAddress:u,cart:d,consignments:l,coupons:h,customer:p,giftCertificates:f}),getLoadError:r(c),getUpdateError:i(c),isExecutingSpamCheck:o(c),isLoading:s(c),isUpdating:a(c)}))}(),I=function(){const e=_s(e=>e.data,(e,{billingAddress:t})=>t.getOrderBillingAddress(),(e,{coupons:t})=>t.getCoupons(),(e,t,n=[])=>()=>{if(e&&t)return Object.assign(Object.assign({},e),{billingAddress:t,coupons:n})}),t=_s(e,e=>()=>pu(e(),()=>new P(b.MissingOrder))),n=_s(e=>e.meta,e=>()=>e),r=_s(e=>e.errors.loadError,e=>()=>e),i=_s(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.payments},(e=[])=>t=>{const n=e.find(({providerId:e})=>e===t);return null==n?void 0:n.paymentId}),o=_s(e=>!!e.statuses.isLoading,e=>()=>e);return(0,Y.B4)((s=Wa,a,c)=>({getOrder:e(s,{billingAddress:a,coupons:c}),getOrderOrThrow:t(s,{billingAddress:a,coupons:c}),getOrderMeta:n(s),getLoadError:r(s),getPaymentId:i(s),isLoading:o(s)}))}(),O=function(){const e=_s(e=>e.data,e=>()=>e);return(0,Y.B4)((t=Xa)=>({getOrderBillingAddress:e(t)}))}(),A=function(){const e=_s(({order:e})=>e.getOrderMeta,e=>()=>{const t=e();return t&&t.payment}),t=_s(({order:e})=>e.getOrder,e=>()=>{const t=e();return(0,E.find)(t&&t.payments,({providerId:e})=>\"giftcertificate\"!==e&&\"storecredit\"!==e)}),n=_s(({checkout:e})=>e.getCheckout,e=>()=>{const t=e();return(0,E.find)(t&&t.payments,({providerType:e})=>e===ir)}),r=_s(e,n,t,(e,t,n)=>()=>{const r=e();if(r&&r.id)return{providerId:r.id,gatewayId:r.gateway};const i=t()||n();return i&&i.providerId?{providerId:i.providerId,gatewayId:i.gatewayId}:void 0}),i=_s(r,e=>()=>pu(e(),()=>new P(b.MissingPaymentId))),o=_s(e,n,t,(e,t,n)=>()=>{const r=e();if(r&&r.status)return r.status.replace(\"PAYMENT_STATUS_\",\"\");const i=t()||n();return i?i.detail.step:void 0}),s=_s(o,e=>()=>pu(e(),()=>new P(b.MissingPaymentStatus))),a=_s(({order:e})=>e.getOrderMeta,e=>()=>{const t=e();return t&&t.token}),c=_s(a,e=>()=>pu(e(),()=>new P(b.MissingPaymentToken))),u=_s(e,e=>()=>{const t=e();return t&&t.redirectUrl}),d=_s(u,e=>()=>pu(e(),()=>new P(b.MissingPaymentRedirectUrl))),l=_s(({checkout:e})=>e.getOutstandingBalance,e=>(t=!1)=>{const n=e(t);return!!n&&n>0}),h=_s(o,e=>t=>!(!t||!t.nonce)||e()===ar||e()===cr);return(0,Y.B4)((e,t)=>({getPaymentId:r({checkout:e,order:t}),getPaymentIdOrThrow:i({checkout:e,order:t}),getPaymentStatus:o({checkout:e,order:t}),getPaymentStatusOrThrow:s({checkout:e,order:t}),getPaymentToken:a({checkout:e,order:t}),getPaymentTokenOrThrow:c({checkout:e,order:t}),getPaymentRedirectUrl:u({checkout:e,order:t}),getPaymentRedirectUrlOrThrow:d({checkout:e,order:t}),isPaymentDataRequired:l({checkout:e,order:t}),isPaymentDataSubmitted:h({checkout:e,order:t})}))}(),T=function(){const e=_s(e=>e.errors.applyError,e=>()=>e),t=_s(e=>!!e.statuses.isApplying,e=>()=>e);return(0,Y.B4)((n=gu)=>({getApplyError:e(n),isApplying:t(n)}))}(),k=function(){const e=_s(e=>e.errors.updateError,e=>()=>e),t=_s(e=>!!e.statuses.isUpdating,e=>()=>e);return(0,Y.B4)((n=iu)=>({getUpdateError:e(n),isUpdating:t(n)}))}(),x=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e=>e.errors.sendError,e=>()=>e),n=_s(e=>!!e.statuses.isSending,e=>()=>e);return(0,Y.B4)((r=Kc)=>({getEmail:e(r),getSendError:t(r),isSending:n(r)}))}(),R=function(){const e=_s(e=>e.data,e=>()=>e),t=_s(e=>e.data,e=>t=>null==e?void 0:e.find(e=>e.region===t)),n=_s(e=>e.errors.loadError,e=>()=>e),r=_s(e=>e.statuses.isLoading,e=>()=>!!e);return(0,Y.B4)((i=xa)=>({getExtensions:e(i),getExtensionByRegion:t(i),getLoadError:n(i),isLoading:r(i)}))}();return(o,b={})=>{const E=e(o.b2bToken),P=t(o.billingAddress),M=n(o.cart),N=r(o.checkoutButton),L=s(o.countries),D=a(o.coupons),j=c(o.customer),F=u(o.customerStrategies),U=R(o.extensions),B=h(o.formFields),z=d(o.giftCertificates),q=l(o.instruments),H=O(o.orderBillingAddress),V=p(o.paymentMethods),G=y(o.paymentProviderCustomer),Y=f(o.paymentStrategies),W=m(o.pickupOptions),$=g(o.remoteCheckout),K=_(o.consignments),Q=v(o.shippingCountries),Z=S(o.shippingStrategies),J=k(o.subscriptions),X=T(o.storeCredit),ee=x(o.signInEmail),te=C(o.consignments,M),ne=w(o.checkout,P,M,te,D,j,z),re=I(o.order,H,D),ie=A(ne,re),oe={b2bToken:E,billingAddress:P,cart:M,checkout:ne,checkoutButton:N,config:i(o.config,o.formFields),consignments:te,countries:L,coupons:D,customer:j,customerStrategies:F,extensions:U,form:B,giftCertificates:z,instruments:q,order:re,orderBillingAddress:H,payment:ie,paymentMethods:V,paymentProviderCustomer:G,paymentStrategies:Y,pickupOptions:W,remoteCheckout:$,shippingAddress:K,shippingCountries:Q,shippingStrategies:Z,signInEmail:ee,subscriptions:J,storeCredit:X};return b.shouldWarnMutation?function(e){return Object.keys(e).reduce((t,n)=>(t[n]=fu(e[n]),t),{})}(oe):oe}}function vu(e={},t){const n=(o=function(){const e=new As;return[\"catalog_only\",\"empty_cart\",\"invalid_order_id\",\"invalid_order_token\",\"missing_order_token\",\"missing_provider_token\",\"missing_shipping_method\",\"order_completion_error\",\"order_could_not_be_finalized_error\",\"order_create_failed\",\"provider_fatal_error\",\"provider_setup_error\",\"stock_too_low\"].forEach(t=>{e.register(t,(e,t)=>new Is(e,t))}),e.register(\"invalid_payment_provider\",e=>new ws(e)),e.register(\"payment_config_not_found\",e=>new ws(e)),e}(),e=>(0,W.H)(e).pipe((0,l.W)(e=>{if(e instanceof Error||e.payload instanceof Error)throw e;if((t=e.payload)&&\"object\"==typeof t&&[\"body\",\"headers\",\"status\",\"statusText\"].every(e=>Object.prototype.hasOwnProperty.call(t,e))){const t=e.payload.body&&e.payload.body.detail;throw Object.assign(Object.assign({},e),{payload:o.createError(e.payload,t)})}var t;throw e}))),r=_u(),i=(0,a.HY)({b2bToken:Ns,billingAddress:Bs,cart:Ws,checkout:uu,checkoutButton:na,config:aa,consignments:Ac,countries:Ha,coupons:ha,customer:Ea,customerStrategies:Pa,extensions:Ra,formFields:ja,giftCertificates:ga,instruments:vc,orderBillingAddress:ec,order:$a,payment:nc,paymentMethods:oc,paymentStrategies:lc,pickupOptions:Lc,paymentProviderCustomer:yc,remoteCheckout:Ic,shippingCountries:Bc,shippingStrategies:Gc,signInEmail:Qc,subscriptions:ou,storeCredit:tu});var o;return(0,a.iN)(i,e,Object.assign({actionTransformer:n,stateTransformer:e=>r(e)},t))}function bu(t){\"https:\"!==document.location.protocol&&V().warn(\"The BigCommerce Checkout SDK should not be used on a non-HTTPS page\"),\"production\"!==B()&&V().warn(\"Note that the development build is not optimized. To create a production build, set process​.env.NODE_ENV to `production`.\");const n={meta:{externalSource:t&&t.externalSource,host:null==t?void 0:t.host,locale:null==t?void 0:t.locale,variantIdentificationToken:window.checkoutVariantIdentificationToken},errors:{},statuses:{}},{locale:r=\"\",shouldWarnMutation:i=!0}=t||{},o=(0,e.createRequestSender)({host:t&&t.host}),a=vu({config:n},{shouldWarnMutation:i}),c=new U(o,{getBasePath:()=>{var e,t;return null!==(t=null===(e=a.getState().config.getStoreConfig())||void 0===e?void 0:e.links.baseUrl)&&void 0!==t?t:void 0},getFeatures:()=>{var e,t,n;return null!==(n=null===(t=null===(e=a.getState().config.getStoreConfig())||void 0===e?void 0:e.checkoutSettings)||void 0===t?void 0:t.features)&&void 0!==n?n:{}}}),u=$t(a),d=new Vt(c),l=new Pe(c),h=new Q(new te(o)),p=$e((0,s.Hb)()),f=new Ke(c),m=new je(p,f),y=new Yt(d,new hn(l)),_=new Jr(new Xr(c)),b=new ke(new xe(c)),S=new Te(l,h,b),C=ui(a,c),w=function(e,t,n={useFallback:!1}){const{useFallback:r}=n,i=new fe(r);for(const[,n]of Object.entries(t))if(le(n))for(const t of n.resolveIds)i.register(t,()=>n(e));return i}(C,{createNoPaymentStrategy:Nt},{useFallback:!0}),I=function(e){const t=new fe;for(const[,n]of Object.entries({}))if(le(n))for(const r of n.resolveIds)t.register(r,()=>n(e));return t}(C),O=new ft(new mt(c)),P=new wt,A=new At(a,P),T=j(a,function(){const e=function(){const e=_s(({checkout:e})=>e.getCheckout,e=>ri(e)),t=_s(({order:e})=>e.getOrder,e=>ri(e)),n=_s(({config:e})=>e.getStoreConfig,e=>ri(e)),r=_s(({shippingAddress:e})=>e.getShippingAddress,({config:e})=>e.getContextConfig,(e,t)=>ri(()=>{const n=e(),r=t();if(!n){if(!r||!r.geoCountryCode)return;return{firstName:\"\",lastName:\"\",company:\"\",address1:\"\",address2:\"\",city:\"\",stateOrProvince:\"\",stateOrProvinceCode:\"\",postalCode:\"\",country:\"\",phone:\"\",customFields:[],countryCode:r.geoCountryCode}}return n})),i=_s(({consignments:e})=>e.getConsignments,e=>ri(()=>{const t=e(),n=null==t?void 0:t.find(e=>!e.selectedPickupOption);return null==n?void 0:n.availableShippingOptions})),o=_s(({consignments:e})=>e.getConsignments,e=>ri(e)),s=_s(({consignments:e})=>e.getConsignments,e=>ri(()=>{const t=e(),n=null==t?void 0:t.find(e=>!e.selectedPickupOption);return null==n?void 0:n.selectedShippingOption})),a=_s(({shippingCountries:e})=>e.getShippingCountries,e=>ri(e)),c=_s(({billingAddress:e})=>e.getBillingAddress,({config:e})=>e.getContextConfig,(e,t)=>ri(()=>{const n=e(),r=t();return(!n||(0,E.values)((0,E.omit)(n,\"shouldSaveAddress\",\"email\",\"id\")).every(e=>!e||!e.length))&&r&&r.geoCountryCode?{id:n?n.id:\"\",firstName:\"\",lastName:\"\",company:\"\",address1:\"\",address2:\"\",city:\"\",email:n?n.email:\"\",stateOrProvince:\"\",stateOrProvinceCode:\"\",postalCode:\"\",country:\"\",phone:\"\",customFields:[],countryCode:r.geoCountryCode}:n})),u=_s(({countries:e})=>e.getCountries,e=>ri(e)),d=_s(({paymentMethods:e})=>e.getPaymentMethods,e=>ri(e)),l=_s(({paymentMethods:e})=>e.getPaymentMethod,e=>ri(e)),h=_s(({payment:e})=>e.getPaymentId,({paymentMethods:e})=>e.getPaymentMethod,(e,t)=>ri(()=>{const n=e();return n&&t(n.providerId,n.gatewayId)})),p=_s(({cart:e})=>e.getCart,e=>ri(e)),f=_s(({coupons:e})=>e.getCoupons,e=>ri(e)),m=_s(({giftCertificates:e})=>e.getGiftCertificates,e=>ri(e)),y=_s(({customer:e})=>e.getCustomer,e=>ri(e)),g=_s(({signInEmail:e})=>e.getEmail,e=>ri(e)),_=_s(({b2bToken:e})=>e.getToken,e=>ri(e)),v=_s(({payment:e})=>e.isPaymentDataRequired,e=>ri(e)),b=_s(({payment:e})=>e.isPaymentDataSubmitted,({paymentMethods:e})=>e.getPaymentMethod,(e,t)=>ri((n,r)=>e(t(n,r)))),S=_s(({instruments:e})=>e.getInstruments,({instruments:e})=>e.getInstrumentsByPaymentMethod,(e,t)=>ri(function(n){return n?t(n):e()})),C=_s(({form:e})=>e.getCustomerAccountFields,e=>ri(e)),w=_s(({form:e})=>e.getBillingAddressFields,({countries:e})=>e.getCountries,(e,t)=>ri(n=>e(t(),n))),I=_s(({form:e})=>e.getShippingAddressFields,({shippingCountries:e})=>e.getShippingCountries,(e,t)=>ri(n=>e(t(),n))),O=_s(({form:e})=>e.getAddressExtraFields,e=>ri(e)),P=_s(({form:e})=>e.getOrderExtraFields,e=>ri(e)),A=_s(({config:e})=>e.getFlashMessages,e=>ri(e)),T=_s(({pickupOptions:e})=>e.getPickupOptions,e=>ri(e)),k=_s(({config:e})=>e.getStoreConfig,e=>ri(()=>{const t=e();if(t)return t.checkoutSettings.checkoutUserExperienceSettings})),x=_s(({extensions:e})=>e.getExtensions,e=>ri(e)),R=_s(({paymentProviderCustomer:e})=>e.getPaymentProviderCustomer,e=>ri(e)),M=_s(({extensions:e})=>e.getExtensionByRegion,e=>ri(e));return(0,Y.B4)(E=>({getCheckout:e(E),getOrder:t(E),getConfig:n(E),getExtensions:x(E),getExtensionByRegion:M(E),getFlashMessages:A(E),getShippingAddress:r(E),getShippingOptions:i(E),getConsignments:o(E),getSelectedShippingOption:s(E),getShippingCountries:a(E),getBillingAddress:c(E),getBillingCountries:u(E),getPaymentMethods:d(E),getPaymentMethod:l(E),getSelectedPaymentMethod:h(E),getCart:p(E),getCoupons:f(E),getGiftCertificates:m(E),getCustomer:y(E),isPaymentDataRequired:v(E),isPaymentDataSubmitted:b(E),getSignInEmail:g(E),getB2BToken:_(E),getInstruments:S(E),getCustomerAccountFields:C(E),getBillingAddressFields:w(E),getShippingAddressFields:I(E),getAddressExtraFields:O(E),getOrderExtraFields:P(E),getPickupOptions:T(E),getUserExperienceSettings:k(E),getPaymentProviderCustomer:R(E)}))}(),t=function(){const e=Ss(e=>e,e=>()=>{for(const t of Object.keys(e)){const n=e[t]();if(n)return n}}),t=_s(({shippingStrategies:e})=>e.getSelectOptionError,({consignments:e})=>e.getUpdateShippingOptionError,(e,t)=>n=>e()||t(n));return(0,Y.B4)(n=>{const r={getLoadCheckoutError:n.checkout.getLoadError,getUpdateCheckoutError:n.checkout.getUpdateError,getSubmitOrderError:n.paymentStrategies.getExecuteError,getFinalizeOrderError:n.paymentStrategies.getFinalizeError,getLoadOrderError:n.order.getLoadError,getLoadCartError:n.cart.getLoadError,getLoadBillingCountriesError:n.countries.getLoadError,getLoadShippingCountriesError:n.shippingCountries.getLoadError,getLoadPaymentMethodsError:n.paymentMethods.getLoadError,getLoadPaymentMethodError:n.paymentMethods.getLoadMethodError,getInitializePaymentError:n.paymentStrategies.getInitializeError,getSignInError:n.customerStrategies.getSignInError,getSignOutError:n.customerStrategies.getSignOutError,getInitializeCustomerError:n.customerStrategies.getInitializeError,getLoadShippingOptionsError:n.consignments.getLoadShippingOptionsError,getSelectShippingOptionError:t(n),getContinueAsGuestError:n.billingAddress.getContinueAsGuestError,getUpdateBillingAddressError:n.billingAddress.getUpdateError,getUpdateSubscriptionsError:n.subscriptions.getUpdateError,getUpdateShippingAddressError:n.shippingStrategies.getUpdateAddressError,getDeleteConsignmentError:n.consignments.getDeleteError,getUpdateConsignmentError:n.consignments.getUpdateError,getCreateConsignmentsError:n.consignments.getCreateError,getInitializeShippingError:n.shippingStrategies.getInitializeError,getApplyStoreCreditError:n.storeCredit.getApplyError,getApplyCouponError:n.coupons.getApplyError,getRemoveCouponError:n.coupons.getRemoveError,getApplyGiftCertificateError:n.giftCertificates.getApplyError,getRemoveGiftCertificateError:n.giftCertificates.getRemoveError,getLoadInstrumentsError:n.instruments.getLoadError,getDeleteInstrumentError:n.instruments.getDeleteError,getLoadConfigError:n.config.getLoadError,getSignInEmailError:n.signInEmail.getSendError,getLoadB2BTokenError:n.b2bToken.getLoadError,getCreateCustomerAccountError:n.customer.getCreateAccountError,getCreateCustomerAddressError:n.customer.getCreateAddressError,getPickupOptionsError:n.pickupOptions.getLoadError,getLoadExtensionsError:n.extensions.getLoadError};return Object.assign({getError:e(r)},r)})}(),n=function(){const e=Ss(e=>e,e=>()=>Object.keys(e).some(t=>e[t]())),t=_s(({shippingStrategies:e})=>e.isSelectingOption,({consignments:e})=>e.isUpdatingShippingOption,(e,t)=>n=>e()||t(n)),n=_s(({customerStrategies:e})=>e.isInitializing,({customerStrategies:e})=>e.isSigningIn,({customerStrategies:e})=>e.isSigningOut,({customerStrategies:e})=>e.isExecutingPaymentMethodCheckout,({customerStrategies:e})=>e.isWidgetInteracting,(e,t,n,r,i)=>o=>e(o)||t(o)||n(o)||r(o)||i(o)),r=_s(({shippingStrategies:e})=>e.isInitializing,({shippingStrategies:e})=>e.isUpdatingAddress,({shippingStrategies:e})=>e.isSelectingOption,({shippingStrategies:e})=>e.isWidgetInteracting,(e,t,n,r)=>i=>e(i)||t(i)||n(i)||r(i)),i=_s(({paymentStrategies:e})=>e.isInitializing,({paymentStrategies:e})=>e.isExecuting,({paymentStrategies:e})=>e.isFinalizing,({paymentStrategies:e})=>e.isWidgetInteracting,(e,t,n,r)=>i=>e(i)||t(i)||n(i)||r(i)),o=_s(({paymentStrategies:e})=>e.isExecuting,({checkout:e})=>e.isExecutingSpamCheck,(e,t)=>n=>e(n)||t());return(0,Y.B4)(s=>{const a={isLoadingCheckout:s.checkout.isLoading,isUpdatingCheckout:s.checkout.isUpdating,isExecutingSpamCheck:s.checkout.isExecutingSpamCheck,isSubmittingOrder:o(s),isFinalizingOrder:s.paymentStrategies.isFinalizing,isLoadingOrder:s.order.isLoading,isLoadingCart:s.cart.isLoading,isLoadingBillingCountries:s.countries.isLoading,isLoadingShippingCountries:s.shippingCountries.isLoading,isLoadingPaymentMethods:s.paymentMethods.isLoading,isLoadingPaymentMethod:s.paymentMethods.isLoadingMethod,isInitializingPayment:s.paymentStrategies.isInitializing,isSigningIn:s.customerStrategies.isSigningIn,isSigningOut:s.customerStrategies.isSigningOut,isExecutingPaymentMethodCheckout:s.customerStrategies.isExecutingPaymentMethodCheckout,isInitializingCustomer:s.customerStrategies.isInitializing,isInitializedCustomer:s.customerStrategies.isInitialized,isLoadingShippingOptions:s.consignments.isLoadingShippingOptions,isSelectingShippingOption:t(s),isUpdatingBillingAddress:s.billingAddress.isUpdating,isUpdatingSubscriptions:s.subscriptions.isUpdating,isCreatingCustomerAccount:s.customer.isCreatingCustomerAccount,isCreatingCustomerAddress:s.customer.isCreatingCustomerAddress,isContinuingAsGuest:s.billingAddress.isContinuingAsGuest,isUpdatingShippingAddress:s.shippingStrategies.isUpdatingAddress,isUpdatingConsignment:s.consignments.isUpdating,isDeletingConsignment:s.consignments.isDeleting,isCreatingConsignments:s.consignments.isCreating,isInitializingShipping:s.shippingStrategies.isInitializing,isApplyingStoreCredit:s.storeCredit.isApplying,isApplyingCoupon:s.coupons.isApplying,isRemovingCoupon:s.coupons.isRemoving,isApplyingGiftCertificate:s.giftCertificates.isApplying,isRemovingGiftCertificate:s.giftCertificates.isRemoving,isLoadingInstruments:s.instruments.isLoading,isDeletingInstrument:s.instruments.isDeleting,isLoadingConfig:s.config.isLoading,isSendingSignInEmail:s.signInEmail.isSending,isLoadingB2BToken:s.b2bToken.isLoading,isCustomerStepPending:n(s),isShippingStepPending:r(s),isPaymentStepPending:i(s),isLoadingPickupOptions:s.pickupOptions.isLoading};return Object.assign({isPending:e(a)},a)})}();return r=>({data:e(r),errors:t(r),statuses:n(r)})}());return new hs(a,T,A,function(e,t){const n={[Ot.ConsignmentsChanged]:kt};return new Tt(e,t,n)}(T,A),new g(new v(o)),new k(new N(c),_),S,h,new Ee(new Ce(c),S,m),new zr(new Hr(c),l),new jt(new Ft(c,{locale:r})),new re(new ce(c)),new Ie(function(e,t){const n=new pe,r=(0,s.vQ)(),i=new Pe(t),o=new Te(i,new Q(new te(t)),new ke(new xe(t))),a=new je($e(r),new Ke(t)),c=new Ee(new Ce(t),o,a);return n.register(\"default\",()=>new Qe(e,c)),n}(a,c),I,C),new F,new ue(new de(c)),new di(new gi(u,c)),y,new Xt(new en(c),new rn(o)),new cn(function(e,t,n){const r=new sr({defaultToken:sn.CREDIT_CARD}),i=new rr,o=new Ln(t),a=new Pe(n),c=new hn(a),u=new Yt(new Vt(n),c),d=new bn($e((0,s.Hb)())),l=new Nn(o,u,i,d),h=(0,un.createFormPoster)(),p=br(h,d),f=new Mn(e);return r.register(sn.CONVERGE,()=>new hr(e,u,l,f,h)),r.register(sn.PPSDK,()=>new Ir(e,u,xr(e,u,n,p,f),new Lr(n,p),new fn(\"PPSDK\"))),r}(a,u,c),w,y,m,C),new _i(new vi(c)),new Yr(new Wr(c,{locale:r}),a),new bi(function(e,t){const n=new pe,r=ui(e),i=new Pe(t),o=new Hr(t),a=new zr(o,i),c=new Xt(new en(t),new rn(t)),u=(0,s.vQ)(),d=new Jr(new Xr(t)),l=new k(new N(t),d),h=window,p=new Fi(r);return n.register(\"amazonpay\",()=>new Qo(e,a,c,new xi(new Mi((0,s.vQ)())),new bi(n))),n.register(\"stripeupe\",()=>new as(e,new Uo(u),a,c)),n.register(\"braintreeacceleratedcheckout\",()=>new es(e,l,a,c,new jr,new ro(new so((0,s.vQ)(),h,p),h))),n.register(\"paypalcommerceacceleratedcheckout\",()=>new is(e,l,a,c,new jr,new Eo((0,s.vQ)()),new jo)),n.register(\"default\",()=>new ts(e,a)),n}(a,c)),new cs(new us(c)),m,new Kr(new Qr(c)),_,b,O,P)}const Su=e=>{const t=(0,E.uniqueId)(e);return document.getElementById(t)?Su(e):t};function Eu(e){return Object.prototype.hasOwnProperty.call(e,\"cacheKey\")}class Cu{constructor(e){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=Object.assign({maxSize:0,isEqual:bs(),onExpire:E.noop},e)}getKey(...e){const t=this._resolveMap(...e),{index:n,parentMap:r}=t;let{map:i}=t;return i&&i.cacheKey?i.usedCount++:i=this._generateMap(r,e.slice(n)),this._removeLeastUsedMap(i),i.cacheKey}getUsedCount(...e){const{map:t}=this._resolveMap(...e);return t?t.usedCount:0}_resolveMap(...e){let t=0,n=this._map;for(;n.maps.length;){let r=!1;for(let i=0;i<n.maps.length;i++){const o=n.maps[i];if(this._options.isEqual(o.value,e[t])){if(n.maps.unshift(...n.maps.splice(i,1)),(0===e.length||t===e.length-1)&&Eu(o))return{index:t,map:o,parentMap:n};r=!0,n=o,t++;break}}if(!r)break}return{index:t,parentMap:n}}_generateMap(e,t){let n,r=0,i=e;do{n={maps:[],parentMap:i,usedCount:1,value:t[r]},i.maps.unshift(n),i=n,r++}while(r<t.length);const o=n;return o.cacheKey=\"\"+ ++this._lastId,o}_removeLeastUsedMap(e){if(!this._options.maxSize)return;const t=this._usedMaps.indexOf(e);if(this._usedMaps.splice(-1===t?0:t,-1===t?0:1,e),this._usedMaps.length<=this._options.maxSize)return;const n=this._usedMaps.pop();n&&(this._removeMap(n),this._options.onExpire(n.cacheKey))}_removeMap(e){e.parentMap&&(e.parentMap.maps.splice(e.parentMap.maps.indexOf(e),1),function(e){return Object.prototype.hasOwnProperty.call(e,\"parentMap\")}(e.parentMap)||this._removeMap(e.parentMap))}}function wu(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const r=Object.getOwnPropertyDescriptor(e.prototype,n);r&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,function(e,t,n){if(\"function\"!=typeof n.value)return n;let r=new Cu,i=n.value,o=(0,Y.Bj)(i);return yt(e,t,{get(){const e=(...e)=>{const t=o.call(this,...e);if(1===r.getUsedCount(...e))return t;const n=i.call(this,...e);return xs(n,t,{keyFilter:e=>!function(e){return 0===`${e}`.indexOf(\"$$\")||0===`${e}`.indexOf(\"_\")}(e)})?t:(o.cache.set(r.getKey(...e),n),n)};return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){r=new Cu,i=e,o=(0,Y.Bj)(i)}})}(e.prototype,n,r))}),t}let Iu=class{constructor(e){this._checkoutButton=e.checkoutButton}getInitializeButtonError(e){return this._checkoutButton.getInitializeError(e)}getDeinitializeButtonError(e){return this._checkoutButton.getDeinitializeError(e)}};Iu=function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([wu],Iu);const Ou=Iu;let Pu=class{constructor(e){this._checkoutButton=e.checkoutButton}isInitializingButton(e){return this._checkoutButton.isInitializing(e)}isDeinitializingButton(e){return this._checkoutButton.isDeinitializing(e)}};Pu=function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([wu],Pu);const Au=Pu;function Tu(e){return{errors:new Ou(e),statuses:new Au(e)}}let ku=class{constructor(e,t){this._store=e,this._buttonStrategyActionCreator=t,this._state=Tu(this._store.getState()),this._store.subscribe(e=>{this._state=Tu(e)})}getState(){return this._state}subscribe(e,...t){return this._store.subscribe(()=>e(this.getState()),e=>e.checkoutButton.getState(),...t.map(e=>t=>e(Tu(t))))}initializeButton(e){const t=(n=e.containerId,/^\\w[\\w\\-\\:\\.]*$/.test(n)?[e.containerId]:function(e,t){const n=document.querySelectorAll(e);if(!n.length)throw new he(`Unable to find any element with the specified selector: ${e}`);return Array.prototype.slice.call(n).map(e=>(e.id||(e.id=Su(t)),e.id))}(e.containerId,`${e.methodId}-container`));var n;return Promise.all(t.map(t=>{const n=this._buttonStrategyActionCreator.initialize(Object.assign(Object.assign({},e),{containerId:t})),r=`checkoutButtonStrategy:${e.methodId}:${t}`;return this._store.dispatch(n,{queueId:r})})).then(()=>this.getState())}deinitializeButton(e){const t=this._buttonStrategyActionCreator.deinitialize(e),n=`checkoutButtonStrategy:${e.methodId}`;return this._store.dispatch(t,{queueId:n}).then(()=>this.getState())}};ku=function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([yt],ku);const xu=ku;class Ru{constructor(e,t,n){this._registry=e,this._registryV2=t,this._paymentMethodActionCreator=n}initialize(e){return t=>{const n={methodId:e.methodId,containerId:e.containerId};if(t.getState().checkoutButton.isInitialized(e.methodId,e.containerId))return(0,I.I)();const r=e.currencyCode?{params:{currencyCode:e.currencyCode}}:{},i=Object.assign(Object.assign({},r),{timeout:e.timeout,useCache:!0});return(0,c.x)((0,u.of)((0,a.VP)(Zs.InitializeButtonRequested,void 0,n)),this._paymentMethodActionCreator.loadPaymentMethod(e.methodId,i)(t),(0,d.v)(()=>this._getStrategy(e.methodId).initialize(e).then(()=>(0,a.VP)(Zs.InitializeButtonSucceeded,void 0,n)))).pipe((0,l.W)(e=>y(Zs.InitializeButtonFailed,e,n)))}}deinitialize(e){return t=>{const n={methodId:e.methodId};return t.getState().checkoutButton.isInitialized(e.methodId)?(0,c.x)((0,u.of)((0,a.VP)(Zs.DeinitializeButtonRequested,void 0,n)),(0,d.v)(()=>this._getStrategy(e.methodId).deinitialize().then(()=>(0,a.VP)(Zs.DeinitializeButtonSucceeded,void 0,n)))).pipe((0,l.W)(e=>y(Zs.DeinitializeButtonFailed,e,n))):(0,I.I)()}}_getStrategy(e){let t;try{t=this._registryV2.get({id:e})}catch(n){t=this._registry.get(e)}return t}}class Mu extends O{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var Nu,Lu,Du,ju,Fu;class Uu{constructor(e){this._scriptLoader=e,this._window=window}loadPaypal(e=\"\"){return t=this,n=void 0,i=function*(){const t=\"//www.paypalobjects.com/api/checkout.min.js\",n={async:!0,attributes:{\"data-merchant-id\":e}};if(e?yield this._scriptLoader.loadScript(t,n):yield this._scriptLoader.loadScript(t),!this._window.paypal)throw new Mu;return this._window.paypal},new((r=void 0)||(r=Promise))(function(e,o){function s(e){try{c(i.next(e))}catch(e){o(e)}}function a(e){try{c(i.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}c((i=i.apply(t,n||[])).next())});var t,n,r,i}}!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(Nu||(Nu={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(Lu||(Lu={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(Du||(Du={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(ju||(ju={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(Fu||(Fu={}));class Bu{constructor(e,t,n,r,i=\"\"){this._store=e,this._checkoutActionCreator=t,this._paypalScriptLoader=n,this._formPoster=r,this._host=i}initialize(e){const t=e.paypal,n=this._store.getState(),r=this._paymentMethod=n.paymentMethods.getPaymentMethod(e.methodId);if(!t)throw new he;if(!r)throw new P(b.MissingPaymentMethod);return this._paypalScriptLoader.loadPaypal(r.config.merchantId).then(n=>{var i,o;if(!r||!r.config.merchantId)throw new P(b.MissingPaymentMethod);const s=r.config.merchantId,a=r.config.testMode?\"sandbox\":\"production\",c={[a]:t.clientId},u=n.FUNDING.CREDIT||\"credit\",d=t.allowCredit?[u]:[],l=t.allowCredit?[]:[u];return n.Button.render({env:a,client:c,commit:t.shouldProcessPayment,funding:{allowed:d,disallowed:l},style:Object.assign(Object.assign({shape:Fu.RECT},(0,E.pick)(t.style,\"layout\",\"color\",\"label\",\"shape\",\"tagline\",\"fundingicons\")),{size:\"paypalexpress\"===r.id&&\"small\"===(null===(i=t.style)||void 0===i?void 0:i.size)?Lu.RESPONSIVE:null===(o=t.style)||void 0===o?void 0:o.size}),payment:(e,n)=>this._setupPayment(s,n,t.onPaymentError),onAuthorize:(e,n)=>this._tokenizePayment(e,n,t.shouldProcessPayment,t.onAuthorizeError)},e.containerId)})}deinitialize(){return this._paymentMethod=void 0,Promise.resolve()}_setupPayment(e,t,n){if(!t)throw new Ve(Ue.CheckoutButtonNotInitialized);return this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then(n=>{const r=n.cart.getCart(),i=r?r.id:\"\";return t.request.post(`${this._host}/api/storefront/payment/paypalexpress`,{merchantId:e,cartId:i},{headers:Object.assign({\"X-API-INTERNAL\":ee},_)})}).then(e=>e.id).catch(e=>{throw n&&n(e),e})}_tokenizePayment(e,t,n,r){if(!this._paymentMethod)throw new Ve(Ue.CheckoutButtonNotInitialized);if(!t)throw new Ve(Ue.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new P(b.MissingPayment);const i=this._paymentMethod.id;return t.payment.get(e.paymentID).then(t=>{this._formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:i,action:n?\"process_payment\":\"set_external_checkout\",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(t.payer.payer_info)})})}}function zu(t){const{host:n}=null!=t?t:{},r=vu({config:{meta:{host:null==t?void 0:t.host,locale:null==t?void 0:t.locale},errors:{},statuses:{}}}),i=(0,e.createRequestSender)({host:n}),o=(0,un.createFormPoster)({host:n}),a=function(e){const t=new fe;for(const[,n]of Object.entries({}))if(le(n))for(const r of n.resolveIds)t.register(r,()=>n(e));return t}(ui(r));return new xu(r,new Ru(function(e,t,n,r){const i=new pe,o=(0,s.vQ)(),a=new Pe(t),c=new Te(a,new Q(new te(t)),new ke(new xe(t)));return i.register(Gn.PAYPALEXPRESS,()=>new Bu(e,c,new Uu(o),n,r)),i}(r,i,o,n),a,new Xt(new en(i),new rn(i))))}const qu={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},Hu=\"embedded-checkout-loading-indicator-rotation\";class Vu{constructor(e){this.styles=Object.assign(Object.assign({},qu),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${Hu} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(n=>{e.style.setProperty(n,t[n])})}defineAnimation(){var e;if(document.getElementById(Hu))return;const t=document.createElement(\"style\");t.id=Hu,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${Hu} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}var Gu,Yu,Wu;!function(e){e.CheckoutComplete=\"CHECKOUT_COMPLETE\",e.CheckoutError=\"CHECKOUT_ERROR\",e.CheckoutLoaded=\"CHECKOUT_LOADED\",e.FrameError=\"FRAME_ERROR\",e.FrameLoaded=\"FRAME_LOADED\",e.SignedOut=\"SIGNED_OUT\"}(Gu||(Gu={}));class $u extends J{constructor(e){super(e,{message:e.body.title}),this.name=\"InvalidLoginTokenError\",this.type=\"invalid_login_token\"}}!function(e){e.MissingContainer=\"missing_container\",e.MissingContent=\"missing_content\",e.UnknownError=\"unknown_error\"}(Yu||(Yu={}));class Ku extends O{constructor(e,t=Yu.UnknownError){super(e||\"Unable to embed the checkout form.\"),this.subtype=t,this.name=\"NotEmbeddableError\",this.type=\"not_embeddable\"}}!function(e){e.StyleConfigured=\"STYLE_CONFIGURED\"}(Wu||(Wu={}));const Qu=\"isCookieAllowed\",Zu=\"lastAllowCookieAttempt\";let Ju=class{constructor(e,t,n,r,i,o,s,a){this._iframeCreator=e,this._messageListener=t,this._messagePoster=n,this._loadingIndicator=r,this._requestSender=i,this._storage=o,this._location=s,this._options=a,this._isAttached=!1,this._options.onComplete&&this._messageListener.addListener(Gu.CheckoutComplete,this._options.onComplete),this._options.onError&&this._messageListener.addListener(Gu.CheckoutError,this._options.onError),this._options.onLoad&&this._messageListener.addListener(Gu.CheckoutLoaded,this._options.onLoad),this._options.onFrameLoad&&this._messageListener.addListener(Gu.FrameLoaded,this._options.onFrameLoad),this._options.onSignOut&&this._messageListener.addListener(Gu.SignedOut,this._options.onSignOut),this._messageListener.addListener(Gu.FrameLoaded,()=>this._configureStyles())}attach(){return this._isAttached?Promise.resolve(this):(this._isAttached=!0,this._messageListener.listen(),this._loadingIndicator.show(this._options.containerId),this._allowCookie().then(()=>this._attemptLogin()).then(e=>this._iframeCreator.createFrame(e,this._options.containerId)).then(e=>{this._iframe=e,this._configureStyles(),this._loadingIndicator.hide()}).catch(e=>(this._isAttached=!1,this._retryAllowCookie(e).catch(()=>{throw this._messageListener.trigger({type:Gu.FrameError,payload:e}),this._loadingIndicator.hide(),e}))).then(()=>this))}detach(){this._isAttached&&(this._isAttached=!1,this._messageListener.stopListen(),this._iframe&&this._iframe.parentNode&&(this._iframe.parentNode.removeChild(this._iframe),this._iframe.iFrameResizer.close()))}_configureStyles(){this._iframe&&this._iframe.contentWindow&&this._options.styles&&(this._messagePoster.setTarget(this._iframe.contentWindow),this._messagePoster.post({type:Wu.StyleConfigured,payload:this._options.styles}))}_attemptLogin(){return/^\\/login\\/token/.test(Ze(this._options.url).pathname)?this._requestSender.post(this._options.url).then(({body:{redirectUrl:e}})=>e).catch(e=>Promise.reject(new $u(e))):Promise.resolve(this._options.url)}_allowCookie(){if(this._storage.getItem(Qu))return Promise.resolve();this._storage.setItem(Qu,!0),this._storage.setItem(Zu,Date.now());const{origin:e}=Ze(this._options.url),t=`${e}/embedded-checkout/allow-cookie?returnUrl=${encodeURIComponent(this._location.href)}`;return document.body.style.visibility=\"hidden\",this._location.replace(t),new Promise(()=>{})}_retryAllowCookie(e){const t=Number(this._storage.getItem(Zu));return(!t||Date.now()-t>6e5)&&e instanceof Ku&&e.subtype===Yu.MissingContent?(this._storage.removeItem(Zu),this._storage.removeItem(Qu),this._allowCookie()):Promise.reject()}};Ju=function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([yt],Ju);const Xu=Ju;class ed{constructor(e){this._options=e}createFrame(e,t){const n=document.getElementById(t),{timeout:r=6e4}=this._options||{};if(!n)throw new Ku(\"Unable to embed the iframe because the container element could not be found.\",Yu.MissingContainer);const i=document.createElement(\"iframe\");return i.src=e,i.style.border=\"none\",i.style.display=\"none\",i.style.width=\"100%\",i.allowPaymentRequest=!0,i.allow=\"payment\",n.appendChild(i),this._toResizableFrame(i,r).catch(e=>{throw n.removeChild(i),e})}_toResizableFrame(e,t){return new Promise((n,r)=>{const i=window.setTimeout(()=>{r(new Ku(\"Unable to embed the iframe because the content could not be loaded.\"))},t),o=t=>{if((t.origin===Ze(e.src).origin||t.origin===It(Ze(e.src)).origin)&&(rt(t.data,Gu.FrameError)&&(s(),r(new Ku(t.data.payload.message,Yu.MissingContent))),rt(t.data,Gu.FrameLoaded))){e.style.display=\"\";const r=dt({scrolling:!1,sizeWidth:!1,heightCalculationMethod:t.data.payload&&t.data.payload.contentId?\"taggedElement\":\"lowestElement\"},e);s(),n(r[r.length-1])}},s=()=>{window.removeEventListener(\"message\",o),window.clearTimeout(i)};window.addEventListener(\"message\",o)})}}const td=\"BigCommerce.EmbeddedCheckout\";function nd(t){const n=Ze(t.url).origin;return new Xu(new ed,new Pt(n),new it(n),new Vu({styles:t.styles&&t.styles.loadingIndicator}),(0,e.createRequestSender)(),new fn(td),window.location,t).attach()}function rd(e){if(!e.payload||!e.payload.contentId)return;const t=document.getElementById(e.payload.contentId);t&&!t.hasAttribute(\"data-iframe-height\")&&t.setAttribute(\"data-iframe-height\",\"\")}function id(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"type\"in e}let od=class{constructor(e,t,n,r={}){this._messageListener=e,this._messagePoster=t,this._untargetedMessagePoster=n,this._messageHandlers=r,this._messageListener.listen()}postComplete(){const e={type:Gu.CheckoutComplete};this._postMessage(e)}postError(e){const t={type:Gu.CheckoutError,payload:this._transformError(e)};this._postMessage(t)}postFrameError(e){const t={type:Gu.FrameError,payload:this._transformError(e)};this._postMessage(t,{untargeted:!0})}postFrameLoaded(e){const t={type:Gu.FrameLoaded,payload:e};this._postMessage(t)}postLoaded(){const e={type:Gu.CheckoutLoaded};this._postMessage(e)}postSignedOut(){const e={type:Gu.SignedOut};this._postMessage(e)}receiveStyles(e){this._messageListener.addListener(Wu.StyleConfigured,({payload:t})=>{e(t)})}_postMessage(e,t){if(this._notifyMessageHandlers(e),t&&t.untargeted)return this._untargetedMessagePoster.post(e);this._messagePoster.post(e)}_notifyMessageHandlers(e){Object.keys(this._messageHandlers).forEach(t=>{if(e.type!==t)return;const n=this._messageHandlers[t];n&&n.call(null,e)})}_transformError(e){return{message:e.message,type:id(e)?e.type:void 0,subtype:id(e)?e.subtype:void 0}}};od=function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([yt],od);const sd=od;let ad=class{postComplete(){}postError(){}postFrameError(){}postFrameLoaded(){}postLoaded(){}postSignedOut(){}receiveStyles(){}};ad=function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([yt],ad);const cd=ad;function ud(e){n(5990);const t=e.parentWindow||window.parent;return window===t?new cd:new sd(new Pt(e.parentOrigin),new it(e.parentOrigin,t),new it(\"*\",t),{[Gu.FrameLoaded]:rd})}var dd=n(1635);function ld(e,t){var n=t&&t.cache?t.cache:Sd,r=t&&t.serializer?t.serializer:vd;return(t&&t.strategy?t.strategy:md)(e,{cache:n,serializer:r})}function hd(e,t,n,r){var i,o=null==(i=r)||\"number\"==typeof i||\"boolean\"==typeof i?r:n(r),s=t.get(o);return void 0===s&&(s=e.call(this,r),t.set(o,s)),s}function pd(e,t,n){var r=Array.prototype.slice.call(arguments,3),i=n(r),o=t.get(i);return void 0===o&&(o=e.apply(this,r),t.set(i,o)),o}function fd(e,t,n,r,i){return n.bind(t,e,r,i)}function md(e,t){return fd(e,this,1===e.length?hd:pd,t.cache.create(),t.serializer)}var yd,gd,_d,vd=function(){return JSON.stringify(arguments)},bd=function(){function e(){this.cache=Object.create(null)}return e.prototype.get=function(e){return this.cache[e]},e.prototype.set=function(e,t){this.cache[e]=t},e}(),Sd={create:function(){return new bd}},Ed={variadic:function(e,t){return fd(e,this,pd,t.cache.create(),t.serializer)},monadic:function(e,t){return fd(e,this,hd,t.cache.create(),t.serializer)}};function Cd(e){return e.type===gd.literal}function wd(e){return e.type===gd.argument}function Id(e){return e.type===gd.number}function Od(e){return e.type===gd.date}function Pd(e){return e.type===gd.time}function Ad(e){return e.type===gd.select}function Td(e){return e.type===gd.plural}function kd(e){return e.type===gd.pound}function xd(e){return e.type===gd.tag}function Rd(e){return!(!e||\"object\"!=typeof e||e.type!==_d.number)}function Md(e){return!(!e||\"object\"!=typeof e||e.type!==_d.dateTime)}!function(e){e[e.EXPECT_ARGUMENT_CLOSING_BRACE=1]=\"EXPECT_ARGUMENT_CLOSING_BRACE\",e[e.EMPTY_ARGUMENT=2]=\"EMPTY_ARGUMENT\",e[e.MALFORMED_ARGUMENT=3]=\"MALFORMED_ARGUMENT\",e[e.EXPECT_ARGUMENT_TYPE=4]=\"EXPECT_ARGUMENT_TYPE\",e[e.INVALID_ARGUMENT_TYPE=5]=\"INVALID_ARGUMENT_TYPE\",e[e.EXPECT_ARGUMENT_STYLE=6]=\"EXPECT_ARGUMENT_STYLE\",e[e.INVALID_NUMBER_SKELETON=7]=\"INVALID_NUMBER_SKELETON\",e[e.INVALID_DATE_TIME_SKELETON=8]=\"INVALID_DATE_TIME_SKELETON\",e[e.EXPECT_NUMBER_SKELETON=9]=\"EXPECT_NUMBER_SKELETON\",e[e.EXPECT_DATE_TIME_SKELETON=10]=\"EXPECT_DATE_TIME_SKELETON\",e[e.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE=11]=\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\",e[e.EXPECT_SELECT_ARGUMENT_OPTIONS=12]=\"EXPECT_SELECT_ARGUMENT_OPTIONS\",e[e.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE=13]=\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\",e[e.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE=14]=\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\",e[e.EXPECT_SELECT_ARGUMENT_SELECTOR=15]=\"EXPECT_SELECT_ARGUMENT_SELECTOR\",e[e.EXPECT_PLURAL_ARGUMENT_SELECTOR=16]=\"EXPECT_PLURAL_ARGUMENT_SELECTOR\",e[e.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT=17]=\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\",e[e.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT=18]=\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\",e[e.INVALID_PLURAL_ARGUMENT_SELECTOR=19]=\"INVALID_PLURAL_ARGUMENT_SELECTOR\",e[e.DUPLICATE_PLURAL_ARGUMENT_SELECTOR=20]=\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\",e[e.DUPLICATE_SELECT_ARGUMENT_SELECTOR=21]=\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\",e[e.MISSING_OTHER_CLAUSE=22]=\"MISSING_OTHER_CLAUSE\",e[e.INVALID_TAG=23]=\"INVALID_TAG\",e[e.INVALID_TAG_NAME=25]=\"INVALID_TAG_NAME\",e[e.UNMATCHED_CLOSING_TAG=26]=\"UNMATCHED_CLOSING_TAG\",e[e.UNCLOSED_TAG=27]=\"UNCLOSED_TAG\"}(yd||(yd={})),function(e){e[e.literal=0]=\"literal\",e[e.argument=1]=\"argument\",e[e.number=2]=\"number\",e[e.date=3]=\"date\",e[e.time=4]=\"time\",e[e.select=5]=\"select\",e[e.plural=6]=\"plural\",e[e.pound=7]=\"pound\",e[e.tag=8]=\"tag\"}(gd||(gd={})),function(e){e[e.number=0]=\"number\",e[e.dateTime=1]=\"dateTime\"}(_d||(_d={}));var Nd=/[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/,Ld=/(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;function Dd(e){var t={};return e.replace(Ld,function(e){var n=e.length;switch(e[0]){case\"G\":t.era=4===n?\"long\":5===n?\"narrow\":\"short\";break;case\"y\":t.year=2===n?\"2-digit\":\"numeric\";break;case\"Y\":case\"u\":case\"U\":case\"r\":throw new RangeError(\"`Y/u/U/r` (year) patterns are not supported, use `y` instead\");case\"q\":case\"Q\":throw new RangeError(\"`q/Q` (quarter) patterns are not supported\");case\"M\":case\"L\":t.month=[\"numeric\",\"2-digit\",\"short\",\"long\",\"narrow\"][n-1];break;case\"w\":case\"W\":throw new RangeError(\"`w/W` (week) patterns are not supported\");case\"d\":t.day=[\"numeric\",\"2-digit\"][n-1];break;case\"D\":case\"F\":case\"g\":throw new RangeError(\"`D/F/g` (day) patterns are not supported, use `d` instead\");case\"E\":t.weekday=4===n?\"long\":5===n?\"narrow\":\"short\";break;case\"e\":if(n<4)throw new RangeError(\"`e..eee` (weekday) patterns are not supported\");t.weekday=[\"short\",\"long\",\"narrow\",\"short\"][n-4];break;case\"c\":if(n<4)throw new RangeError(\"`c..ccc` (weekday) patterns are not supported\");t.weekday=[\"short\",\"long\",\"narrow\",\"short\"][n-4];break;case\"a\":t.hour12=!0;break;case\"b\":case\"B\":throw new RangeError(\"`b/B` (period) patterns are not supported, use `a` instead\");case\"h\":t.hourCycle=\"h12\",t.hour=[\"numeric\",\"2-digit\"][n-1];break;case\"H\":t.hourCycle=\"h23\",t.hour=[\"numeric\",\"2-digit\"][n-1];break;case\"K\":t.hourCycle=\"h11\",t.hour=[\"numeric\",\"2-digit\"][n-1];break;case\"k\":t.hourCycle=\"h24\",t.hour=[\"numeric\",\"2-digit\"][n-1];break;case\"j\":case\"J\":case\"C\":throw new RangeError(\"`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead\");case\"m\":t.minute=[\"numeric\",\"2-digit\"][n-1];break;case\"s\":t.second=[\"numeric\",\"2-digit\"][n-1];break;case\"S\":case\"A\":throw new RangeError(\"`S/A` (second) patterns are not supported, use `s` instead\");case\"z\":t.timeZoneName=n<4?\"short\":\"long\";break;case\"Z\":case\"O\":case\"v\":case\"V\":case\"X\":case\"x\":throw new RangeError(\"`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead\")}return\"\"}),t}var jd=/[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;function Fd(e){return e.replace(/^(.*?)-/,\"\")}var Ud=/^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g,Bd=/^(@+)?(\\+|#+)?[rs]?$/g,zd=/(\\*)(0+)|(#+)(0+)|(0+)/g,qd=/^(0+)$/;function Hd(e){var t={};return\"r\"===e[e.length-1]?t.roundingPriority=\"morePrecision\":\"s\"===e[e.length-1]&&(t.roundingPriority=\"lessPrecision\"),e.replace(Bd,function(e,n,r){return\"string\"!=typeof r?(t.minimumSignificantDigits=n.length,t.maximumSignificantDigits=n.length):\"+\"===r?t.minimumSignificantDigits=n.length:\"#\"===n[0]?t.maximumSignificantDigits=n.length:(t.minimumSignificantDigits=n.length,t.maximumSignificantDigits=n.length+(\"string\"==typeof r?r.length:0)),\"\"}),t}function Vd(e){switch(e){case\"sign-auto\":return{signDisplay:\"auto\"};case\"sign-accounting\":case\"()\":return{currencySign:\"accounting\"};case\"sign-always\":case\"+!\":return{signDisplay:\"always\"};case\"sign-accounting-always\":case\"()!\":return{signDisplay:\"always\",currencySign:\"accounting\"};case\"sign-except-zero\":case\"+?\":return{signDisplay:\"exceptZero\"};case\"sign-accounting-except-zero\":case\"()?\":return{signDisplay:\"exceptZero\",currencySign:\"accounting\"};case\"sign-never\":case\"+_\":return{signDisplay:\"never\"}}}function Gd(e){var t;if(\"E\"===e[0]&&\"E\"===e[1]?(t={notation:\"engineering\"},e=e.slice(2)):\"E\"===e[0]&&(t={notation:\"scientific\"},e=e.slice(1)),t){var n=e.slice(0,2);if(\"+!\"===n?(t.signDisplay=\"always\",e=e.slice(2)):\"+?\"===n&&(t.signDisplay=\"exceptZero\",e=e.slice(2)),!qd.test(e))throw new Error(\"Malformed concise eng/scientific notation\");t.minimumIntegerDigits=e.length}return t}function Yd(e){return Vd(e)||{}}function Wd(e){for(var t={},n=0,r=e;n<r.length;n++){var i=r[n];switch(i.stem){case\"percent\":case\"%\":t.style=\"percent\";continue;case\"%x100\":t.style=\"percent\",t.scale=100;continue;case\"currency\":t.style=\"currency\",t.currency=i.options[0];continue;case\"group-off\":case\",_\":t.useGrouping=!1;continue;case\"precision-integer\":case\".\":t.maximumFractionDigits=0;continue;case\"measure-unit\":case\"unit\":t.style=\"unit\",t.unit=Fd(i.options[0]);continue;case\"compact-short\":case\"K\":t.notation=\"compact\",t.compactDisplay=\"short\";continue;case\"compact-long\":case\"KK\":t.notation=\"compact\",t.compactDisplay=\"long\";continue;case\"scientific\":t=(0,dd.__assign)((0,dd.__assign)((0,dd.__assign)({},t),{notation:\"scientific\"}),i.options.reduce(function(e,t){return(0,dd.__assign)((0,dd.__assign)({},e),Yd(t))},{}));continue;case\"engineering\":t=(0,dd.__assign)((0,dd.__assign)((0,dd.__assign)({},t),{notation:\"engineering\"}),i.options.reduce(function(e,t){return(0,dd.__assign)((0,dd.__assign)({},e),Yd(t))},{}));continue;case\"notation-simple\":t.notation=\"standard\";continue;case\"unit-width-narrow\":t.currencyDisplay=\"narrowSymbol\",t.unitDisplay=\"narrow\";continue;case\"unit-width-short\":t.currencyDisplay=\"code\",t.unitDisplay=\"short\";continue;case\"unit-width-full-name\":t.currencyDisplay=\"name\",t.unitDisplay=\"long\";continue;case\"unit-width-iso-code\":t.currencyDisplay=\"symbol\";continue;case\"scale\":t.scale=parseFloat(i.options[0]);continue;case\"rounding-mode-floor\":t.roundingMode=\"floor\";continue;case\"rounding-mode-ceiling\":t.roundingMode=\"ceil\";continue;case\"rounding-mode-down\":t.roundingMode=\"trunc\";continue;case\"rounding-mode-up\":t.roundingMode=\"expand\";continue;case\"rounding-mode-half-even\":t.roundingMode=\"halfEven\";continue;case\"rounding-mode-half-down\":t.roundingMode=\"halfTrunc\";continue;case\"rounding-mode-half-up\":t.roundingMode=\"halfExpand\";continue;case\"integer-width\":if(i.options.length>1)throw new RangeError(\"integer-width stems only accept a single optional option\");i.options[0].replace(zd,function(e,n,r,i,o,s){if(n)t.minimumIntegerDigits=r.length;else{if(i&&o)throw new Error(\"We currently do not support maximum integer digits\");if(s)throw new Error(\"We currently do not support exact integer digits\")}return\"\"});continue}if(qd.test(i.stem))t.minimumIntegerDigits=i.stem.length;else if(Ud.test(i.stem)){if(i.options.length>1)throw new RangeError(\"Fraction-precision stems only accept a single optional option\");i.stem.replace(Ud,function(e,n,r,i,o,s){return\"*\"===r?t.minimumFractionDigits=n.length:i&&\"#\"===i[0]?t.maximumFractionDigits=i.length:o&&s?(t.minimumFractionDigits=o.length,t.maximumFractionDigits=o.length+s.length):(t.minimumFractionDigits=n.length,t.maximumFractionDigits=n.length),\"\"});var o=i.options[0];\"w\"===o?t=(0,dd.__assign)((0,dd.__assign)({},t),{trailingZeroDisplay:\"stripIfInteger\"}):o&&(t=(0,dd.__assign)((0,dd.__assign)({},t),Hd(o)))}else if(Bd.test(i.stem))t=(0,dd.__assign)((0,dd.__assign)({},t),Hd(i.stem));else{var s=Vd(i.stem);s&&(t=(0,dd.__assign)((0,dd.__assign)({},t),s));var a=Gd(i.stem);a&&(t=(0,dd.__assign)((0,dd.__assign)({},t),a))}}return t}var $d,Kd={\"001\":[\"H\",\"h\"],419:[\"h\",\"H\",\"hB\",\"hb\"],AC:[\"H\",\"h\",\"hb\",\"hB\"],AD:[\"H\",\"hB\"],AE:[\"h\",\"hB\",\"hb\",\"H\"],AF:[\"H\",\"hb\",\"hB\",\"h\"],AG:[\"h\",\"hb\",\"H\",\"hB\"],AI:[\"H\",\"h\",\"hb\",\"hB\"],AL:[\"h\",\"H\",\"hB\"],AM:[\"H\",\"hB\"],AO:[\"H\",\"hB\"],AR:[\"h\",\"H\",\"hB\",\"hb\"],AS:[\"h\",\"H\"],AT:[\"H\",\"hB\"],AU:[\"h\",\"hb\",\"H\",\"hB\"],AW:[\"H\",\"hB\"],AX:[\"H\"],AZ:[\"H\",\"hB\",\"h\"],BA:[\"H\",\"hB\",\"h\"],BB:[\"h\",\"hb\",\"H\",\"hB\"],BD:[\"h\",\"hB\",\"H\"],BE:[\"H\",\"hB\"],BF:[\"H\",\"hB\"],BG:[\"H\",\"hB\",\"h\"],BH:[\"h\",\"hB\",\"hb\",\"H\"],BI:[\"H\",\"h\"],BJ:[\"H\",\"hB\"],BL:[\"H\",\"hB\"],BM:[\"h\",\"hb\",\"H\",\"hB\"],BN:[\"hb\",\"hB\",\"h\",\"H\"],BO:[\"h\",\"H\",\"hB\",\"hb\"],BQ:[\"H\"],BR:[\"H\",\"hB\"],BS:[\"h\",\"hb\",\"H\",\"hB\"],BT:[\"h\",\"H\"],BW:[\"H\",\"h\",\"hb\",\"hB\"],BY:[\"H\",\"h\"],BZ:[\"H\",\"h\",\"hb\",\"hB\"],CA:[\"h\",\"hb\",\"H\",\"hB\"],CC:[\"H\",\"h\",\"hb\",\"hB\"],CD:[\"hB\",\"H\"],CF:[\"H\",\"h\",\"hB\"],CG:[\"H\",\"hB\"],CH:[\"H\",\"hB\",\"h\"],CI:[\"H\",\"hB\"],CK:[\"H\",\"h\",\"hb\",\"hB\"],CL:[\"h\",\"H\",\"hB\",\"hb\"],CM:[\"H\",\"h\",\"hB\"],CN:[\"H\",\"hB\",\"hb\",\"h\"],CO:[\"h\",\"H\",\"hB\",\"hb\"],CP:[\"H\"],CR:[\"h\",\"H\",\"hB\",\"hb\"],CU:[\"h\",\"H\",\"hB\",\"hb\"],CV:[\"H\",\"hB\"],CW:[\"H\",\"hB\"],CX:[\"H\",\"h\",\"hb\",\"hB\"],CY:[\"h\",\"H\",\"hb\",\"hB\"],CZ:[\"H\"],DE:[\"H\",\"hB\"],DG:[\"H\",\"h\",\"hb\",\"hB\"],DJ:[\"h\",\"H\"],DK:[\"H\"],DM:[\"h\",\"hb\",\"H\",\"hB\"],DO:[\"h\",\"H\",\"hB\",\"hb\"],DZ:[\"h\",\"hB\",\"hb\",\"H\"],EA:[\"H\",\"h\",\"hB\",\"hb\"],EC:[\"h\",\"H\",\"hB\",\"hb\"],EE:[\"H\",\"hB\"],EG:[\"h\",\"hB\",\"hb\",\"H\"],EH:[\"h\",\"hB\",\"hb\",\"H\"],ER:[\"h\",\"H\"],ES:[\"H\",\"hB\",\"h\",\"hb\"],ET:[\"hB\",\"hb\",\"h\",\"H\"],FI:[\"H\"],FJ:[\"h\",\"hb\",\"H\",\"hB\"],FK:[\"H\",\"h\",\"hb\",\"hB\"],FM:[\"h\",\"hb\",\"H\",\"hB\"],FO:[\"H\",\"h\"],FR:[\"H\",\"hB\"],GA:[\"H\",\"hB\"],GB:[\"H\",\"h\",\"hb\",\"hB\"],GD:[\"h\",\"hb\",\"H\",\"hB\"],GE:[\"H\",\"hB\",\"h\"],GF:[\"H\",\"hB\"],GG:[\"H\",\"h\",\"hb\",\"hB\"],GH:[\"h\",\"H\"],GI:[\"H\",\"h\",\"hb\",\"hB\"],GL:[\"H\",\"h\"],GM:[\"h\",\"hb\",\"H\",\"hB\"],GN:[\"H\",\"hB\"],GP:[\"H\",\"hB\"],GQ:[\"H\",\"hB\",\"h\",\"hb\"],GR:[\"h\",\"H\",\"hb\",\"hB\"],GT:[\"h\",\"H\",\"hB\",\"hb\"],GU:[\"h\",\"hb\",\"H\",\"hB\"],GW:[\"H\",\"hB\"],GY:[\"h\",\"hb\",\"H\",\"hB\"],HK:[\"h\",\"hB\",\"hb\",\"H\"],HN:[\"h\",\"H\",\"hB\",\"hb\"],HR:[\"H\",\"hB\"],HU:[\"H\",\"h\"],IC:[\"H\",\"h\",\"hB\",\"hb\"],ID:[\"H\"],IE:[\"H\",\"h\",\"hb\",\"hB\"],IL:[\"H\",\"hB\"],IM:[\"H\",\"h\",\"hb\",\"hB\"],IN:[\"h\",\"H\"],IO:[\"H\",\"h\",\"hb\",\"hB\"],IQ:[\"h\",\"hB\",\"hb\",\"H\"],IR:[\"hB\",\"H\"],IS:[\"H\"],IT:[\"H\",\"hB\"],JE:[\"H\",\"h\",\"hb\",\"hB\"],JM:[\"h\",\"hb\",\"H\",\"hB\"],JO:[\"h\",\"hB\",\"hb\",\"H\"],JP:[\"H\",\"K\",\"h\"],KE:[\"hB\",\"hb\",\"H\",\"h\"],KG:[\"H\",\"h\",\"hB\",\"hb\"],KH:[\"hB\",\"h\",\"H\",\"hb\"],KI:[\"h\",\"hb\",\"H\",\"hB\"],KM:[\"H\",\"h\",\"hB\",\"hb\"],KN:[\"h\",\"hb\",\"H\",\"hB\"],KP:[\"h\",\"H\",\"hB\",\"hb\"],KR:[\"h\",\"H\",\"hB\",\"hb\"],KW:[\"h\",\"hB\",\"hb\",\"H\"],KY:[\"h\",\"hb\",\"H\",\"hB\"],KZ:[\"H\",\"hB\"],LA:[\"H\",\"hb\",\"hB\",\"h\"],LB:[\"h\",\"hB\",\"hb\",\"H\"],LC:[\"h\",\"hb\",\"H\",\"hB\"],LI:[\"H\",\"hB\",\"h\"],LK:[\"H\",\"h\",\"hB\",\"hb\"],LR:[\"h\",\"hb\",\"H\",\"hB\"],LS:[\"h\",\"H\"],LT:[\"H\",\"h\",\"hb\",\"hB\"],LU:[\"H\",\"h\",\"hB\"],LV:[\"H\",\"hB\",\"hb\",\"h\"],LY:[\"h\",\"hB\",\"hb\",\"H\"],MA:[\"H\",\"h\",\"hB\",\"hb\"],MC:[\"H\",\"hB\"],MD:[\"H\",\"hB\"],ME:[\"H\",\"hB\",\"h\"],MF:[\"H\",\"hB\"],MG:[\"H\",\"h\"],MH:[\"h\",\"hb\",\"H\",\"hB\"],MK:[\"H\",\"h\",\"hb\",\"hB\"],ML:[\"H\"],MM:[\"hB\",\"hb\",\"H\",\"h\"],MN:[\"H\",\"h\",\"hb\",\"hB\"],MO:[\"h\",\"hB\",\"hb\",\"H\"],MP:[\"h\",\"hb\",\"H\",\"hB\"],MQ:[\"H\",\"hB\"],MR:[\"h\",\"hB\",\"hb\",\"H\"],MS:[\"H\",\"h\",\"hb\",\"hB\"],MT:[\"H\",\"h\"],MU:[\"H\",\"h\"],MV:[\"H\",\"h\"],MW:[\"h\",\"hb\",\"H\",\"hB\"],MX:[\"h\",\"H\",\"hB\",\"hb\"],MY:[\"hb\",\"hB\",\"h\",\"H\"],MZ:[\"H\",\"hB\"],NA:[\"h\",\"H\",\"hB\",\"hb\"],NC:[\"H\",\"hB\"],NE:[\"H\"],NF:[\"H\",\"h\",\"hb\",\"hB\"],NG:[\"H\",\"h\",\"hb\",\"hB\"],NI:[\"h\",\"H\",\"hB\",\"hb\"],NL:[\"H\",\"hB\"],NO:[\"H\",\"h\"],NP:[\"H\",\"h\",\"hB\"],NR:[\"H\",\"h\",\"hb\",\"hB\"],NU:[\"H\",\"h\",\"hb\",\"hB\"],NZ:[\"h\",\"hb\",\"H\",\"hB\"],OM:[\"h\",\"hB\",\"hb\",\"H\"],PA:[\"h\",\"H\",\"hB\",\"hb\"],PE:[\"h\",\"H\",\"hB\",\"hb\"],PF:[\"H\",\"h\",\"hB\"],PG:[\"h\",\"H\"],PH:[\"h\",\"hB\",\"hb\",\"H\"],PK:[\"h\",\"hB\",\"H\"],PL:[\"H\",\"h\"],PM:[\"H\",\"hB\"],PN:[\"H\",\"h\",\"hb\",\"hB\"],PR:[\"h\",\"H\",\"hB\",\"hb\"],PS:[\"h\",\"hB\",\"hb\",\"H\"],PT:[\"H\",\"hB\"],PW:[\"h\",\"H\"],PY:[\"h\",\"H\",\"hB\",\"hb\"],QA:[\"h\",\"hB\",\"hb\",\"H\"],RE:[\"H\",\"hB\"],RO:[\"H\",\"hB\"],RS:[\"H\",\"hB\",\"h\"],RU:[\"H\"],RW:[\"H\",\"h\"],SA:[\"h\",\"hB\",\"hb\",\"H\"],SB:[\"h\",\"hb\",\"H\",\"hB\"],SC:[\"H\",\"h\",\"hB\"],SD:[\"h\",\"hB\",\"hb\",\"H\"],SE:[\"H\"],SG:[\"h\",\"hb\",\"H\",\"hB\"],SH:[\"H\",\"h\",\"hb\",\"hB\"],SI:[\"H\",\"hB\"],SJ:[\"H\"],SK:[\"H\"],SL:[\"h\",\"hb\",\"H\",\"hB\"],SM:[\"H\",\"h\",\"hB\"],SN:[\"H\",\"h\",\"hB\"],SO:[\"h\",\"H\"],SR:[\"H\",\"hB\"],SS:[\"h\",\"hb\",\"H\",\"hB\"],ST:[\"H\",\"hB\"],SV:[\"h\",\"H\",\"hB\",\"hb\"],SX:[\"H\",\"h\",\"hb\",\"hB\"],SY:[\"h\",\"hB\",\"hb\",\"H\"],SZ:[\"h\",\"hb\",\"H\",\"hB\"],TA:[\"H\",\"h\",\"hb\",\"hB\"],TC:[\"h\",\"hb\",\"H\",\"hB\"],TD:[\"h\",\"H\",\"hB\"],TF:[\"H\",\"h\",\"hB\"],TG:[\"H\",\"hB\"],TH:[\"H\",\"h\"],TJ:[\"H\",\"h\"],TL:[\"H\",\"hB\",\"hb\",\"h\"],TM:[\"H\",\"h\"],TN:[\"h\",\"hB\",\"hb\",\"H\"],TO:[\"h\",\"H\"],TR:[\"H\",\"hB\"],TT:[\"h\",\"hb\",\"H\",\"hB\"],TW:[\"hB\",\"hb\",\"h\",\"H\"],TZ:[\"hB\",\"hb\",\"H\",\"h\"],UA:[\"H\",\"hB\",\"h\"],UG:[\"hB\",\"hb\",\"H\",\"h\"],UM:[\"h\",\"hb\",\"H\",\"hB\"],US:[\"h\",\"hb\",\"H\",\"hB\"],UY:[\"h\",\"H\",\"hB\",\"hb\"],UZ:[\"H\",\"hB\",\"h\"],VA:[\"H\",\"h\",\"hB\"],VC:[\"h\",\"hb\",\"H\",\"hB\"],VE:[\"h\",\"H\",\"hB\",\"hb\"],VG:[\"h\",\"hb\",\"H\",\"hB\"],VI:[\"h\",\"hb\",\"H\",\"hB\"],VN:[\"H\",\"h\"],VU:[\"h\",\"H\"],WF:[\"H\",\"hB\"],WS:[\"h\",\"H\"],XK:[\"H\",\"hB\",\"h\"],YE:[\"h\",\"hB\",\"hb\",\"H\"],YT:[\"H\",\"hB\"],ZA:[\"H\",\"h\",\"hb\",\"hB\"],ZM:[\"h\",\"hb\",\"H\",\"hB\"],ZW:[\"H\",\"h\"],\"af-ZA\":[\"H\",\"h\",\"hB\",\"hb\"],\"ar-001\":[\"h\",\"hB\",\"hb\",\"H\"],\"ca-ES\":[\"H\",\"h\",\"hB\"],\"en-001\":[\"h\",\"hb\",\"H\",\"hB\"],\"en-HK\":[\"h\",\"hb\",\"H\",\"hB\"],\"en-IL\":[\"H\",\"h\",\"hb\",\"hB\"],\"en-MY\":[\"h\",\"hb\",\"H\",\"hB\"],\"es-BR\":[\"H\",\"h\",\"hB\",\"hb\"],\"es-ES\":[\"H\",\"h\",\"hB\",\"hb\"],\"es-GQ\":[\"H\",\"h\",\"hB\",\"hb\"],\"fr-CA\":[\"H\",\"h\",\"hB\"],\"gl-ES\":[\"H\",\"h\",\"hB\"],\"gu-IN\":[\"hB\",\"hb\",\"h\",\"H\"],\"hi-IN\":[\"hB\",\"h\",\"H\"],\"it-CH\":[\"H\",\"h\",\"hB\"],\"it-IT\":[\"H\",\"h\",\"hB\"],\"kn-IN\":[\"hB\",\"h\",\"H\"],\"ml-IN\":[\"hB\",\"h\",\"H\"],\"mr-IN\":[\"hB\",\"hb\",\"h\",\"H\"],\"pa-IN\":[\"hB\",\"hb\",\"h\",\"H\"],\"ta-IN\":[\"hB\",\"h\",\"hb\",\"H\"],\"te-IN\":[\"hB\",\"h\",\"H\"],\"zu-ZA\":[\"H\",\"hB\",\"hb\",\"h\"]};function Qd(e){var t=e.hourCycle;if(void 0===t&&e.hourCycles&&e.hourCycles.length&&(t=e.hourCycles[0]),t)switch(t){case\"h24\":return\"k\";case\"h23\":return\"H\";case\"h12\":return\"h\";case\"h11\":return\"K\";default:throw new Error(\"Invalid hourCycle\")}var n,r=e.language;return\"root\"!==r&&(n=e.maximize().region),(Kd[n||\"\"]||Kd[r||\"\"]||Kd[\"\".concat(r,\"-001\")]||Kd[\"001\"])[0]}var Zd=new RegExp(\"^\".concat(Nd.source,\"*\")),Jd=new RegExp(\"\".concat(Nd.source,\"*$\"));function Xd(e,t){return{start:e,end:t}}var el=!!String.prototype.startsWith&&\"_a\".startsWith(\"a\",1),tl=!!String.fromCodePoint,nl=!!Object.fromEntries,rl=!!String.prototype.codePointAt,il=!!String.prototype.trimStart,ol=!!String.prototype.trimEnd,sl=Number.isSafeInteger?Number.isSafeInteger:function(e){return\"number\"==typeof e&&isFinite(e)&&Math.floor(e)===e&&Math.abs(e)<=9007199254740991},al=!0;try{al=\"a\"===(null===($d=ml(\"([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)\",\"yu\").exec(\"a\"))||void 0===$d?void 0:$d[0])}catch(e){al=!1}var cl,ul=el?function(e,t,n){return e.startsWith(t,n)}:function(e,t,n){return e.slice(n,n+t.length)===t},dl=tl?String.fromCodePoint:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n,r=\"\",i=e.length,o=0;i>o;){if((n=e[o++])>1114111)throw RangeError(n+\" is not a valid code point\");r+=n<65536?String.fromCharCode(n):String.fromCharCode(55296+((n-=65536)>>10),n%1024+56320)}return r},ll=nl?Object.fromEntries:function(e){for(var t={},n=0,r=e;n<r.length;n++){var i=r[n],o=i[0],s=i[1];t[o]=s}return t},hl=rl?function(e,t){return e.codePointAt(t)}:function(e,t){var n=e.length;if(!(t<0||t>=n)){var r,i=e.charCodeAt(t);return i<55296||i>56319||t+1===n||(r=e.charCodeAt(t+1))<56320||r>57343?i:r-56320+(i-55296<<10)+65536}},pl=il?function(e){return e.trimStart()}:function(e){return e.replace(Zd,\"\")},fl=ol?function(e){return e.trimEnd()}:function(e){return e.replace(Jd,\"\")};function ml(e,t){return new RegExp(e,t)}if(al){var yl=ml(\"([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)\",\"yu\");cl=function(e,t){var n;return yl.lastIndex=t,null!==(n=yl.exec(e)[1])&&void 0!==n?n:\"\"}}else cl=function(e,t){for(var n=[];;){var r=hl(e,t);if(void 0===r||Sl(r)||El(r))break;n.push(r),t+=r>=65536?2:1}return dl.apply(void 0,n)};var gl,_l=function(){function e(e,t){void 0===t&&(t={}),this.message=e,this.position={offset:0,line:1,column:1},this.ignoreTag=!!t.ignoreTag,this.locale=t.locale,this.requiresOtherClause=!!t.requiresOtherClause,this.shouldParseSkeletons=!!t.shouldParseSkeletons}return e.prototype.parse=function(){if(0!==this.offset())throw Error(\"parser can only be used once\");return this.parseMessage(0,\"\",!1)},e.prototype.parseMessage=function(e,t,n){for(var r=[];!this.isEOF();){var i=this.char();if(123===i){if((o=this.parseArgument(e,n)).err)return o;r.push(o.val)}else{if(125===i&&e>0)break;if(35!==i||\"plural\"!==t&&\"selectordinal\"!==t){if(60===i&&!this.ignoreTag&&47===this.peek()){if(n)break;return this.error(yd.UNMATCHED_CLOSING_TAG,Xd(this.clonePosition(),this.clonePosition()))}if(60===i&&!this.ignoreTag&&vl(this.peek()||0)){if((o=this.parseTag(e,t)).err)return o;r.push(o.val)}else{var o;if((o=this.parseLiteral(e,t)).err)return o;r.push(o.val)}}else{var s=this.clonePosition();this.bump(),r.push({type:gd.pound,location:Xd(s,this.clonePosition())})}}}return{val:r,err:null}},e.prototype.parseTag=function(e,t){var n=this.clonePosition();this.bump();var r=this.parseTagName();if(this.bumpSpace(),this.bumpIf(\"/>\"))return{val:{type:gd.literal,value:\"<\".concat(r,\"/>\"),location:Xd(n,this.clonePosition())},err:null};if(this.bumpIf(\">\")){var i=this.parseMessage(e+1,t,!0);if(i.err)return i;var o=i.val,s=this.clonePosition();if(this.bumpIf(\"</\")){if(this.isEOF()||!vl(this.char()))return this.error(yd.INVALID_TAG,Xd(s,this.clonePosition()));var a=this.clonePosition();return r!==this.parseTagName()?this.error(yd.UNMATCHED_CLOSING_TAG,Xd(a,this.clonePosition())):(this.bumpSpace(),this.bumpIf(\">\")?{val:{type:gd.tag,value:r,children:o,location:Xd(n,this.clonePosition())},err:null}:this.error(yd.INVALID_TAG,Xd(s,this.clonePosition())))}return this.error(yd.UNCLOSED_TAG,Xd(n,this.clonePosition()))}return this.error(yd.INVALID_TAG,Xd(n,this.clonePosition()))},e.prototype.parseTagName=function(){var e=this.offset();for(this.bump();!this.isEOF()&&bl(this.char());)this.bump();return this.message.slice(e,this.offset())},e.prototype.parseLiteral=function(e,t){for(var n=this.clonePosition(),r=\"\";;){var i=this.tryParseQuote(t);if(i)r+=i;else{var o=this.tryParseUnquoted(e,t);if(o)r+=o;else{var s=this.tryParseLeftAngleBracket();if(!s)break;r+=s}}}var a=Xd(n,this.clonePosition());return{val:{type:gd.literal,value:r,location:a},err:null}},e.prototype.tryParseLeftAngleBracket=function(){return this.isEOF()||60!==this.char()||!this.ignoreTag&&(vl(e=this.peek()||0)||47===e)?null:(this.bump(),\"<\");var e},e.prototype.tryParseQuote=function(e){if(this.isEOF()||39!==this.char())return null;switch(this.peek()){case 39:return this.bump(),this.bump(),\"'\";case 123:case 60:case 62:case 125:break;case 35:if(\"plural\"===e||\"selectordinal\"===e)break;return null;default:return null}this.bump();var t=[this.char()];for(this.bump();!this.isEOF();){var n=this.char();if(39===n){if(39!==this.peek()){this.bump();break}t.push(39),this.bump()}else t.push(n);this.bump()}return dl.apply(void 0,t)},e.prototype.tryParseUnquoted=function(e,t){if(this.isEOF())return null;var n=this.char();return 60===n||123===n||35===n&&(\"plural\"===t||\"selectordinal\"===t)||125===n&&e>0?null:(this.bump(),dl(n))},e.prototype.parseArgument=function(e,t){var n=this.clonePosition();if(this.bump(),this.bumpSpace(),this.isEOF())return this.error(yd.EXPECT_ARGUMENT_CLOSING_BRACE,Xd(n,this.clonePosition()));if(125===this.char())return this.bump(),this.error(yd.EMPTY_ARGUMENT,Xd(n,this.clonePosition()));var r=this.parseIdentifierIfPossible().value;if(!r)return this.error(yd.MALFORMED_ARGUMENT,Xd(n,this.clonePosition()));if(this.bumpSpace(),this.isEOF())return this.error(yd.EXPECT_ARGUMENT_CLOSING_BRACE,Xd(n,this.clonePosition()));switch(this.char()){case 125:return this.bump(),{val:{type:gd.argument,value:r,location:Xd(n,this.clonePosition())},err:null};case 44:return this.bump(),this.bumpSpace(),this.isEOF()?this.error(yd.EXPECT_ARGUMENT_CLOSING_BRACE,Xd(n,this.clonePosition())):this.parseArgumentOptions(e,t,r,n);default:return this.error(yd.MALFORMED_ARGUMENT,Xd(n,this.clonePosition()))}},e.prototype.parseIdentifierIfPossible=function(){var e=this.clonePosition(),t=this.offset(),n=cl(this.message,t),r=t+n.length;return this.bumpTo(r),{value:n,location:Xd(e,this.clonePosition())}},e.prototype.parseArgumentOptions=function(e,t,n,r){var i,o=this.clonePosition(),s=this.parseIdentifierIfPossible().value,a=this.clonePosition();switch(s){case\"\":return this.error(yd.EXPECT_ARGUMENT_TYPE,Xd(o,a));case\"number\":case\"date\":case\"time\":this.bumpSpace();var c=null;if(this.bumpIf(\",\")){this.bumpSpace();var u=this.clonePosition();if((g=this.parseSimpleArgStyleIfPossible()).err)return g;if(0===(p=fl(g.val)).length)return this.error(yd.EXPECT_ARGUMENT_STYLE,Xd(this.clonePosition(),this.clonePosition()));c={style:p,styleLocation:Xd(u,this.clonePosition())}}if((_=this.tryParseArgumentClose(r)).err)return _;var d=Xd(r,this.clonePosition());if(c&&ul(null==c?void 0:c.style,\"::\",0)){var l=pl(c.style.slice(2));if(\"number\"===s)return(g=this.parseNumberSkeletonFromString(l,c.styleLocation)).err?g:{val:{type:gd.number,value:n,location:d,style:g.val},err:null};if(0===l.length)return this.error(yd.EXPECT_DATE_TIME_SKELETON,d);var h=l;this.locale&&(h=function(e,t){for(var n=\"\",r=0;r<e.length;r++){var i=e.charAt(r);if(\"j\"===i){for(var o=0;r+1<e.length&&e.charAt(r+1)===i;)o++,r++;var s=1+(1&o),a=o<2?1:3+(o>>1),c=Qd(t);for(\"H\"!=c&&\"k\"!=c||(a=0);a-- >0;)n+=\"a\";for(;s-- >0;)n=c+n}else n+=\"J\"===i?\"H\":i}return n}(l,this.locale));var p={type:_d.dateTime,pattern:h,location:c.styleLocation,parsedOptions:this.shouldParseSkeletons?Dd(h):{}};return{val:{type:\"date\"===s?gd.date:gd.time,value:n,location:d,style:p},err:null}}return{val:{type:\"number\"===s?gd.number:\"date\"===s?gd.date:gd.time,value:n,location:d,style:null!==(i=null==c?void 0:c.style)&&void 0!==i?i:null},err:null};case\"plural\":case\"selectordinal\":case\"select\":var f=this.clonePosition();if(this.bumpSpace(),!this.bumpIf(\",\"))return this.error(yd.EXPECT_SELECT_ARGUMENT_OPTIONS,Xd(f,(0,dd.__assign)({},f)));this.bumpSpace();var m=this.parseIdentifierIfPossible(),y=0;if(\"select\"!==s&&\"offset\"===m.value){if(!this.bumpIf(\":\"))return this.error(yd.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,Xd(this.clonePosition(),this.clonePosition()));var g;if(this.bumpSpace(),(g=this.tryParseDecimalInteger(yd.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,yd.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE)).err)return g;this.bumpSpace(),m=this.parseIdentifierIfPossible(),y=g.val}var _,v=this.tryParsePluralOrSelectOptions(e,s,t,m);if(v.err)return v;if((_=this.tryParseArgumentClose(r)).err)return _;var b=Xd(r,this.clonePosition());return\"select\"===s?{val:{type:gd.select,value:n,options:ll(v.val),location:b},err:null}:{val:{type:gd.plural,value:n,options:ll(v.val),offset:y,pluralType:\"plural\"===s?\"cardinal\":\"ordinal\",location:b},err:null};default:return this.error(yd.INVALID_ARGUMENT_TYPE,Xd(o,a))}},e.prototype.tryParseArgumentClose=function(e){return this.isEOF()||125!==this.char()?this.error(yd.EXPECT_ARGUMENT_CLOSING_BRACE,Xd(e,this.clonePosition())):(this.bump(),{val:!0,err:null})},e.prototype.parseSimpleArgStyleIfPossible=function(){for(var e=0,t=this.clonePosition();!this.isEOF();)switch(this.char()){case 39:this.bump();var n=this.clonePosition();if(!this.bumpUntil(\"'\"))return this.error(yd.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE,Xd(n,this.clonePosition()));this.bump();break;case 123:e+=1,this.bump();break;case 125:if(!(e>0))return{val:this.message.slice(t.offset,this.offset()),err:null};e-=1;break;default:this.bump()}return{val:this.message.slice(t.offset,this.offset()),err:null}},e.prototype.parseNumberSkeletonFromString=function(e,t){var n=[];try{n=function(e){if(0===e.length)throw new Error(\"Number skeleton cannot be empty\");for(var t=[],n=0,r=e.split(jd).filter(function(e){return e.length>0});n<r.length;n++){var i=r[n].split(\"/\");if(0===i.length)throw new Error(\"Invalid number skeleton\");for(var o=i[0],s=i.slice(1),a=0,c=s;a<c.length;a++)if(0===c[a].length)throw new Error(\"Invalid number skeleton\");t.push({stem:o,options:s})}return t}(e)}catch(e){return this.error(yd.INVALID_NUMBER_SKELETON,t)}return{val:{type:_d.number,tokens:n,location:t,parsedOptions:this.shouldParseSkeletons?Wd(n):{}},err:null}},e.prototype.tryParsePluralOrSelectOptions=function(e,t,n,r){for(var i,o=!1,s=[],a=new Set,c=r.value,u=r.location;;){if(0===c.length){var d=this.clonePosition();if(\"select\"===t||!this.bumpIf(\"=\"))break;var l=this.tryParseDecimalInteger(yd.EXPECT_PLURAL_ARGUMENT_SELECTOR,yd.INVALID_PLURAL_ARGUMENT_SELECTOR);if(l.err)return l;u=Xd(d,this.clonePosition()),c=this.message.slice(d.offset,this.offset())}if(a.has(c))return this.error(\"select\"===t?yd.DUPLICATE_SELECT_ARGUMENT_SELECTOR:yd.DUPLICATE_PLURAL_ARGUMENT_SELECTOR,u);\"other\"===c&&(o=!0),this.bumpSpace();var h=this.clonePosition();if(!this.bumpIf(\"{\"))return this.error(\"select\"===t?yd.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT:yd.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT,Xd(this.clonePosition(),this.clonePosition()));var p=this.parseMessage(e+1,t,n);if(p.err)return p;var f=this.tryParseArgumentClose(h);if(f.err)return f;s.push([c,{value:p.val,location:Xd(h,this.clonePosition())}]),a.add(c),this.bumpSpace(),c=(i=this.parseIdentifierIfPossible()).value,u=i.location}return 0===s.length?this.error(\"select\"===t?yd.EXPECT_SELECT_ARGUMENT_SELECTOR:yd.EXPECT_PLURAL_ARGUMENT_SELECTOR,Xd(this.clonePosition(),this.clonePosition())):this.requiresOtherClause&&!o?this.error(yd.MISSING_OTHER_CLAUSE,Xd(this.clonePosition(),this.clonePosition())):{val:s,err:null}},e.prototype.tryParseDecimalInteger=function(e,t){var n=1,r=this.clonePosition();this.bumpIf(\"+\")||this.bumpIf(\"-\")&&(n=-1);for(var i=!1,o=0;!this.isEOF();){var s=this.char();if(!(s>=48&&s<=57))break;i=!0,o=10*o+(s-48),this.bump()}var a=Xd(r,this.clonePosition());return i?sl(o*=n)?{val:o,err:null}:this.error(t,a):this.error(e,a)},e.prototype.offset=function(){return this.position.offset},e.prototype.isEOF=function(){return this.offset()===this.message.length},e.prototype.clonePosition=function(){return{offset:this.position.offset,line:this.position.line,column:this.position.column}},e.prototype.char=function(){var e=this.position.offset;if(e>=this.message.length)throw Error(\"out of bound\");var t=hl(this.message,e);if(void 0===t)throw Error(\"Offset \".concat(e,\" is at invalid UTF-16 code unit boundary\"));return t},e.prototype.error=function(e,t){return{val:null,err:{kind:e,message:this.message,location:t}}},e.prototype.bump=function(){if(!this.isEOF()){var e=this.char();10===e?(this.position.line+=1,this.position.column=1,this.position.offset+=1):(this.position.column+=1,this.position.offset+=e<65536?1:2)}},e.prototype.bumpIf=function(e){if(ul(this.message,e,this.offset())){for(var t=0;t<e.length;t++)this.bump();return!0}return!1},e.prototype.bumpUntil=function(e){var t=this.offset(),n=this.message.indexOf(e,t);return n>=0?(this.bumpTo(n),!0):(this.bumpTo(this.message.length),!1)},e.prototype.bumpTo=function(e){if(this.offset()>e)throw Error(\"targetOffset \".concat(e,\" must be greater than or equal to the current offset \").concat(this.offset()));for(e=Math.min(e,this.message.length);;){var t=this.offset();if(t===e)break;if(t>e)throw Error(\"targetOffset \".concat(e,\" is at invalid UTF-16 code unit boundary\"));if(this.bump(),this.isEOF())break}},e.prototype.bumpSpace=function(){for(;!this.isEOF()&&Sl(this.char());)this.bump()},e.prototype.peek=function(){if(this.isEOF())return null;var e=this.char(),t=this.offset(),n=this.message.charCodeAt(t+(e>=65536?2:1));return null!=n?n:null},e}();function vl(e){return e>=97&&e<=122||e>=65&&e<=90}function bl(e){return 45===e||46===e||e>=48&&e<=57||95===e||e>=97&&e<=122||e>=65&&e<=90||183==e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8255&&e<=8256||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function Sl(e){return e>=9&&e<=13||32===e||133===e||e>=8206&&e<=8207||8232===e||8233===e}function El(e){return e>=33&&e<=35||36===e||e>=37&&e<=39||40===e||41===e||42===e||43===e||44===e||45===e||e>=46&&e<=47||e>=58&&e<=59||e>=60&&e<=62||e>=63&&e<=64||91===e||92===e||93===e||94===e||96===e||123===e||124===e||125===e||126===e||161===e||e>=162&&e<=165||166===e||167===e||169===e||171===e||172===e||174===e||176===e||177===e||182===e||187===e||191===e||215===e||247===e||e>=8208&&e<=8213||e>=8214&&e<=8215||8216===e||8217===e||8218===e||e>=8219&&e<=8220||8221===e||8222===e||8223===e||e>=8224&&e<=8231||e>=8240&&e<=8248||8249===e||8250===e||e>=8251&&e<=8254||e>=8257&&e<=8259||8260===e||8261===e||8262===e||e>=8263&&e<=8273||8274===e||8275===e||e>=8277&&e<=8286||e>=8592&&e<=8596||e>=8597&&e<=8601||e>=8602&&e<=8603||e>=8604&&e<=8607||8608===e||e>=8609&&e<=8610||8611===e||e>=8612&&e<=8613||8614===e||e>=8615&&e<=8621||8622===e||e>=8623&&e<=8653||e>=8654&&e<=8655||e>=8656&&e<=8657||8658===e||8659===e||8660===e||e>=8661&&e<=8691||e>=8692&&e<=8959||e>=8960&&e<=8967||8968===e||8969===e||8970===e||8971===e||e>=8972&&e<=8991||e>=8992&&e<=8993||e>=8994&&e<=9e3||9001===e||9002===e||e>=9003&&e<=9083||9084===e||e>=9085&&e<=9114||e>=9115&&e<=9139||e>=9140&&e<=9179||e>=9180&&e<=9185||e>=9186&&e<=9254||e>=9255&&e<=9279||e>=9280&&e<=9290||e>=9291&&e<=9311||e>=9472&&e<=9654||9655===e||e>=9656&&e<=9664||9665===e||e>=9666&&e<=9719||e>=9720&&e<=9727||e>=9728&&e<=9838||9839===e||e>=9840&&e<=10087||10088===e||10089===e||10090===e||10091===e||10092===e||10093===e||10094===e||10095===e||10096===e||10097===e||10098===e||10099===e||10100===e||10101===e||e>=10132&&e<=10175||e>=10176&&e<=10180||10181===e||10182===e||e>=10183&&e<=10213||10214===e||10215===e||10216===e||10217===e||10218===e||10219===e||10220===e||10221===e||10222===e||10223===e||e>=10224&&e<=10239||e>=10240&&e<=10495||e>=10496&&e<=10626||10627===e||10628===e||10629===e||10630===e||10631===e||10632===e||10633===e||10634===e||10635===e||10636===e||10637===e||10638===e||10639===e||10640===e||10641===e||10642===e||10643===e||10644===e||10645===e||10646===e||10647===e||10648===e||e>=10649&&e<=10711||10712===e||10713===e||10714===e||10715===e||e>=10716&&e<=10747||10748===e||10749===e||e>=10750&&e<=11007||e>=11008&&e<=11055||e>=11056&&e<=11076||e>=11077&&e<=11078||e>=11079&&e<=11084||e>=11085&&e<=11123||e>=11124&&e<=11125||e>=11126&&e<=11157||11158===e||e>=11159&&e<=11263||e>=11776&&e<=11777||11778===e||11779===e||11780===e||11781===e||e>=11782&&e<=11784||11785===e||11786===e||11787===e||11788===e||11789===e||e>=11790&&e<=11798||11799===e||e>=11800&&e<=11801||11802===e||11803===e||11804===e||11805===e||e>=11806&&e<=11807||11808===e||11809===e||11810===e||11811===e||11812===e||11813===e||11814===e||11815===e||11816===e||11817===e||e>=11818&&e<=11822||11823===e||e>=11824&&e<=11833||e>=11834&&e<=11835||e>=11836&&e<=11839||11840===e||11841===e||11842===e||e>=11843&&e<=11855||e>=11856&&e<=11857||11858===e||e>=11859&&e<=11903||e>=12289&&e<=12291||12296===e||12297===e||12298===e||12299===e||12300===e||12301===e||12302===e||12303===e||12304===e||12305===e||e>=12306&&e<=12307||12308===e||12309===e||12310===e||12311===e||12312===e||12313===e||12314===e||12315===e||12316===e||12317===e||e>=12318&&e<=12319||12320===e||12336===e||64830===e||64831===e||e>=65093&&e<=65094}function Cl(e){e.forEach(function(e){if(delete e.location,Ad(e)||Td(e))for(var t in e.options)delete e.options[t].location,Cl(e.options[t].value);else Id(e)&&Rd(e.style)||(Od(e)||Pd(e))&&Md(e.style)?delete e.style.location:xd(e)&&Cl(e.children)})}function wl(e,t){void 0===t&&(t={}),t=(0,dd.__assign)({shouldParseSkeletons:!0,requiresOtherClause:!0},t);var n=new _l(e,t).parse();if(n.err){var r=SyntaxError(yd[n.err.kind]);throw r.location=n.err.location,r.originalMessage=n.err.message,r}return(null==t?void 0:t.captureLocation)||Cl(n.val),n.val}!function(e){e.MISSING_VALUE=\"MISSING_VALUE\",e.INVALID_VALUE=\"INVALID_VALUE\",e.MISSING_INTL_API=\"MISSING_INTL_API\"}(gl||(gl={}));var Il,Ol=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.code=n,i.originalMessage=r,i}return(0,dd.__extends)(t,e),t.prototype.toString=function(){return\"[formatjs Error: \".concat(this.code,\"] \").concat(this.message)},t}(Error),Pl=function(e){function t(t,n,r,i){return e.call(this,'Invalid values for \"'.concat(t,'\": \"').concat(n,'\". Options are \"').concat(Object.keys(r).join('\", \"'),'\"'),gl.INVALID_VALUE,i)||this}return(0,dd.__extends)(t,e),t}(Ol),Al=function(e){function t(t,n,r){return e.call(this,'Value for \"'.concat(t,'\" must be of type ').concat(n),gl.INVALID_VALUE,r)||this}return(0,dd.__extends)(t,e),t}(Ol),Tl=function(e){function t(t,n){return e.call(this,'The intl string context variable \"'.concat(t,'\" was not provided to the string \"').concat(n,'\"'),gl.MISSING_VALUE,n)||this}return(0,dd.__extends)(t,e),t}(Ol);function kl(e){return\"function\"==typeof e}function xl(e,t,n,r,i,o,s){if(1===e.length&&Cd(e[0]))return[{type:Il.literal,value:e[0].value}];for(var a=[],c=0,u=e;c<u.length;c++){var d=u[c];if(Cd(d))a.push({type:Il.literal,value:d.value});else if(kd(d))\"number\"==typeof o&&a.push({type:Il.literal,value:n.getNumberFormat(t).format(o)});else{var l=d.value;if(!i||!(l in i))throw new Tl(l,s);var h=i[l];if(wd(d))h&&\"string\"!=typeof h&&\"number\"!=typeof h||(h=\"string\"==typeof h||\"number\"==typeof h?String(h):\"\"),a.push({type:\"string\"==typeof h?Il.literal:Il.object,value:h});else if(Od(d)){var p=\"string\"==typeof d.style?r.date[d.style]:Md(d.style)?d.style.parsedOptions:void 0;a.push({type:Il.literal,value:n.getDateTimeFormat(t,p).format(h)})}else if(Pd(d))p=\"string\"==typeof d.style?r.time[d.style]:Md(d.style)?d.style.parsedOptions:r.time.medium,a.push({type:Il.literal,value:n.getDateTimeFormat(t,p).format(h)});else if(Id(d))(p=\"string\"==typeof d.style?r.number[d.style]:Rd(d.style)?d.style.parsedOptions:void 0)&&p.scale&&(h*=p.scale||1),a.push({type:Il.literal,value:n.getNumberFormat(t,p).format(h)});else{if(xd(d)){var f=d.children,m=d.value,y=i[m];if(!kl(y))throw new Al(m,\"function\",s);var g=y(xl(f,t,n,r,i,o).map(function(e){return e.value}));Array.isArray(g)||(g=[g]),a.push.apply(a,g.map(function(e){return{type:\"string\"==typeof e?Il.literal:Il.object,value:e}}))}if(Ad(d)){if(!(_=d.options[h]||d.options.other))throw new Pl(d.value,h,Object.keys(d.options),s);a.push.apply(a,xl(_.value,t,n,r,i))}else if(Td(d)){var _;if(!(_=d.options[\"=\".concat(h)])){if(!Intl.PluralRules)throw new Ol('Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\\n',gl.MISSING_INTL_API,s);var v=n.getPluralRules(t,{type:d.pluralType}).select(h-(d.offset||0));_=d.options[v]||d.options.other}if(!_)throw new Pl(d.value,h,Object.keys(d.options),s);a.push.apply(a,xl(_.value,t,n,r,i,h-(d.offset||0)))}}}}return(b=a).length<2?b:b.reduce(function(e,t){var n=e[e.length-1];return n&&n.type===Il.literal&&t.type===Il.literal?n.value+=t.value:e.push(t),e},[]);var b}function Rl(e){return{create:function(){return{get:function(t){return e[t]},set:function(t,n){e[t]=n}}}}}!function(e){e[e.literal=0]=\"literal\",e[e.object=1]=\"object\"}(Il||(Il={}));var Ml=function(){function e(t,n,r,i){void 0===n&&(n=e.defaultLocale);var o,s,a,c=this;if(this.formatterCache={number:{},dateTime:{},pluralRules:{}},this.format=function(e){var t=c.formatToParts(e);if(1===t.length)return t[0].value;var n=t.reduce(function(e,t){return e.length&&t.type===Il.literal&&\"string\"==typeof e[e.length-1]?e[e.length-1]+=t.value:e.push(t.value),e},[]);return n.length<=1?n[0]||\"\":n},this.formatToParts=function(e){return xl(c.ast,c.locales,c.formatters,c.formats,e,void 0,c.message)},this.resolvedOptions=function(){var e;return{locale:(null===(e=c.resolvedLocale)||void 0===e?void 0:e.toString())||Intl.NumberFormat.supportedLocalesOf(c.locales)[0]}},this.getAst=function(){return c.ast},this.locales=n,this.resolvedLocale=e.resolveLocale(n),\"string\"==typeof t){if(this.message=t,!e.__parse)throw new TypeError(\"IntlMessageFormat.__parse must be set to process `message` of type `string`\");var u=i||{},d=(u.formatters,(0,dd.__rest)(u,[\"formatters\"]));this.ast=e.__parse(t,(0,dd.__assign)((0,dd.__assign)({},d),{locale:this.resolvedLocale}))}else this.ast=t;if(!Array.isArray(this.ast))throw new TypeError(\"A message must be provided as a String or AST.\");this.formats=(s=e.formats,(a=r)?Object.keys(s).reduce(function(e,t){var n,r;return e[t]=(n=s[t],(r=a[t])?(0,dd.__assign)((0,dd.__assign)((0,dd.__assign)({},n||{}),r||{}),Object.keys(n).reduce(function(e,t){return e[t]=(0,dd.__assign)((0,dd.__assign)({},n[t]),r[t]||{}),e},{})):n),e},(0,dd.__assign)({},s)):s),this.formatters=i&&i.formatters||(void 0===(o=this.formatterCache)&&(o={number:{},dateTime:{},pluralRules:{}}),{getNumberFormat:ld(function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return new((e=Intl.NumberFormat).bind.apply(e,(0,dd.__spreadArray)([void 0],t,!1)))},{cache:Rl(o.number),strategy:Ed.variadic}),getDateTimeFormat:ld(function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return new((e=Intl.DateTimeFormat).bind.apply(e,(0,dd.__spreadArray)([void 0],t,!1)))},{cache:Rl(o.dateTime),strategy:Ed.variadic}),getPluralRules:ld(function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return new((e=Intl.PluralRules).bind.apply(e,(0,dd.__spreadArray)([void 0],t,!1)))},{cache:Rl(o.pluralRules),strategy:Ed.variadic})})}return Object.defineProperty(e,\"defaultLocale\",{get:function(){return e.memoizedDefaultLocale||(e.memoizedDefaultLocale=(new Intl.NumberFormat).resolvedOptions().locale),e.memoizedDefaultLocale},enumerable:!1,configurable:!0}),e.memoizedDefaultLocale=null,e.resolveLocale=function(e){if(void 0!==Intl.Locale){var t=Intl.NumberFormat.supportedLocalesOf(e);return t.length>0?new Intl.Locale(t[0]):new Intl.Locale(\"string\"==typeof e?e:e[0])}},e.__parse=wl,e.formats={number:{integer:{maximumFractionDigits:0},currency:{style:\"currency\"},percent:{style:\"percent\"}},date:{short:{month:\"numeric\",day:\"numeric\",year:\"2-digit\"},medium:{month:\"short\",day:\"numeric\",year:\"numeric\"},long:{month:\"long\",day:\"numeric\",year:\"numeric\"},full:{weekday:\"long\",month:\"long\",day:\"numeric\",year:\"numeric\"}},time:{short:{hour:\"numeric\",minute:\"numeric\"},medium:{hour:\"numeric\",minute:\"numeric\",second:\"numeric\"},long:{hour:\"numeric\",minute:\"numeric\",second:\"numeric\",timeZoneName:\"short\"},full:{hour:\"numeric\",minute:\"numeric\",second:\"numeric\",timeZoneName:\"short\"}}},e}();const Nl=\"en\",Ll=\"optimized_checkout\";let Dl=class{constructor(e,t){this._logger=t;const{locale:n,locales:r,translations:i}=this._transformConfig(e);this._locale=n,this._locales=r,this._translations=i,this._formatters={}}mapKeys(e){Object.keys(e).forEach(t=>{const n=`${Ll}.${e[t]}`;this._translations[`${Ll}.${t}`]=this._translations[n]})}getLocale(){return this._hasTranslations()?this._locale:Nl}translate(e,t={}){var n;const r=`${Ll}.${e}`;if(\"string\"!=typeof this._translations[r])return this._logger.warn(`Translation key \"${r}\" is missing`),r;this._formatters[r]||(this._formatters[r]=new Ml(this._escapeSpecialCharacters(this._translations[r]||\"\"),this._locales[r],void 0,{ignoreTag:!0}));try{return this._formatters[r].format(this._transformData(t))}catch(e){if(this._isFormatError(e))return null!==(n=e.originalMessage)&&void 0!==n?n:\"\";throw e}}_transformConfig(e={}){const t={defaultLocale:\"\",defaultTranslations:{},translations:{},locales:{},locale:e.locale||Nl},n=e.locales||{},r=this._flattenObject(e.translations||{}),i=this._flattenObject(e.defaultTranslations||{}),o=this._flattenObject(e.fallbackTranslations||{});return(0,E.union)(Object.keys(o),Object.keys(i),Object.keys(r)).forEach(s=>{var a,c;r&&r[s]?(t.translations[s]=r[s],t.locales[s]=n[s]||t.locale):i[s]?(t.translations[s]=i[s],t.locales[s]=null!==(a=e.defaultLocale)&&void 0!==a?a:Nl):(t.translations[s]=o[s],t.locales[s]=null!==(c=e.fallbackLocale)&&void 0!==c?c:Nl)}),t}_flattenObject(e,t={},n=\"\"){try{Object.keys(e).forEach(r=>{const i=e[r],o=n?`${n}.${r}`:r;if((0,E.isObject)(i))return this._flattenObject(i,t,o);t[o]=i})}catch(e){this._logger.warn(`Unable to parse object: ${e}`)}return t}_transformData(e){return Object.keys(e).reduce((t,n)=>{const r=e[n];return t[n]=r??\"\",t},{})}_hasTranslations(){return Object.keys(this._locales).map(e=>this._locales[e]).filter(e=>e.split(\"-\")[0]===this._locale.split(\"-\")[0]).length>0}_isFormatError(e){return\"object\"==typeof e&&null!==e&&\"originalMessage\"in e}_escapeSpecialCharacters(e){return e.replace(/(\\w+)='([^']*)'/g,\"$1=''$2''\")}};Dl=function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([yt],Dl);const jl=Dl;function Fl(e={}){return new jl(e,V())}class Ul{constructor(e){if(!e)throw new Error(\"Currency settings missing\");const{decimalPlaces:t,symbolLocation:n,symbol:r,thousandsSeparator:i,decimalSeparator:o}=e;if(\"string\"!=typeof n||\"string\"!=typeof r||\"string\"!=typeof i||\"string\"!=typeof o||\"string\"!=typeof t)throw new zi(\"Invalid currency settings provided\");this._decimalPlaces=parseInt(t,10),this._symbolLocation=n,this._symbol=r,this._thousandsSeparator=i,this._decimalSeparator=o}format(e){if(\"number\"!=typeof e)throw new zi(\"Invalid amount provided\");const t=this._formatNumber(e),n=this._formatCurrency(t);return e<0?`-${n}`:n}_formatNumber(e){const t=Math.abs(e),[n,r=\"\"]=this._toFixed(t,this._decimalPlaces).split(\".\"),i=n.replace(/\\B(?=(\\d{3})+(?!\\d))/g,this._thousandsSeparator);return this._decimalPlaces<1?i:[i,r].join(this._decimalSeparator)}_formatCurrency(e){return\"left\"===this._symbolLocation.toLowerCase()?`${this._symbol}${e}`:`${e}${this._symbol}`}_toFixed(e,t){return(+`${Math.round(+`${e}e${t}`)}e${-t}`).toFixed(t)}}let Bl=class{constructor(e){this._storeConfig=e,this._customerFormatter=new Ul(this._storeConfig.shopperCurrency),this._storeFormatter=new Ul(this._storeConfig.currency)}toCustomerCurrency(e){const t=this._storeConfig.shopperCurrency.exchangeRate;return this._customerFormatter.format(e*t)}toStoreCurrency(e){return this._storeFormatter.format(e)}};Bl=function(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([yt],Bl);const zl=Bl;function ql(e){return new zl(e)}function Hl(e){return Boolean(e.hasOwnProperty(\"analytics\"))}class Vl{constructor(e){this.storage=e}saveExtraItemsData(e,t){const n=[...t.physicalItems,...t.digitalItems].reduce((e,t)=>(e[t.productId]={brand:t.brand?t.brand:\"\",category:t.categoryNames?t.categoryNames.join(\", \"):\"\"},e),{});try{return this.storage.setItem(this.getStorageKey(e),JSON.stringify(n)),n}catch(e){return{}}}readExtraItemsData(e){try{const t=this.storage.getItem(this.getStorageKey(e));if(!t)return null;const n=JSON.parse(t);return function(e){if(!(0,E.isObject)(e))return!1;const t=Object.values(e).some(e=>!(0,E.isObject)(e)||!(\"brand\"in e)||!(\"category\"in e));return Boolean(!t)}(n)?n:null}catch(e){return null}}clearExtraItemData(e){try{this.storage.removeItem(this.getStorageKey(e))}catch(e){}}getStorageKey(e){return e?`ORDER_ITEMS_${e}`:\"\"}}function Gl(e){return e&&\"ga\"in e&&\"function\"==typeof e.ga}function Yl(e,t){Gl(window)&&window.ga(\"send\",e,Object.assign(Object.assign({},t),{nonInteraction:!1}))}function Wl(e){return $l(e).length>=8096}function $l(e){return Object.keys(e).reduce((t,n)=>{const r=typeof e[n];return\"string\"===r||\"number\"===r?[...t,`${n}=${e[n]}`]:\"object\"===r&&null!==e[n]?[...t,$l(e[n])]:t},[]).join(\"&\")}var Kl;!function(e){e[e.CUSTOMER=1]=\"CUSTOMER\",e[e.SHIPPING=2]=\"SHIPPING\",e[e.BILLING=3]=\"BILLING\",e[e.PAYMENT=4]=\"PAYMENT\"}(Kl||(Kl={}));const Ql={customer:Kl.CUSTOMER,shipping:Kl.SHIPPING,billing:Kl.BILLING,payment:Kl.PAYMENT};class Zl{constructor(e,t,n,{checkoutSteps:r}={}){if(this.checkoutService=e,this.analyticsExtraItemsManager=t,this.analytics=n,this._checkoutStarted=!1,this._completedSteps={},this._viewedSteps={},this._analyticStepOrder=[\"customer\",\"shipping\",\"billing\",\"payment\"],void 0!==r){if(r.some(e=>!(e in Ql)))throw new he(`Invalid checkout steps provided. Valid values are: ${(0,E.keys)(Ql).join(\", \")}.`);this._analyticStepOrder=r}}trackCheckoutStarted(){if(this._checkoutStarted)return;const e=this.getCheckout();if(!e)return;const{coupons:t,grandTotal:n,shippingCostTotal:r,taxTotal:i,cart:{lineItems:o,discountAmount:s,id:a}}=e,c=this.analyticsExtraItemsManager.saveExtraItemsData(a,o);this.analytics.track(\"Checkout Started\",this.getTrackingPayload({revenue:n,shipping:r,tax:i,discount:s,coupons:t,lineItems:o,extraItemsData:c})),this._checkoutStarted=!0}trackOrderComplete(){var e;const t=this.getOrder();if(!t)return;const{isComplete:n,orderId:r,orderAmount:i,shippingCostTotal:o,taxTotal:s,discountAmount:a,coupons:c,lineItems:u,cartId:d}=t;if(!n)return;const l=this.analyticsExtraItemsManager.readExtraItemsData(d);if(null===l)return;const h=null===(e=this.checkoutService.getState().data.getConfig())||void 0===e?void 0:e.checkoutSettings.features[\"DATA-6891.missing_orders_within_GA\"],p=this.getTrackingPayload({orderId:r,revenue:i,shipping:o,tax:s,discount:a,coupons:c,extraItemsData:l,lineItems:u});if(h&&Hl(window)&&Gl(window)&&Wl(p))return Yl(\"transaction\",{\"&ti\":p.order_id,\"&ta\":p.affiliation,\"&tr\":p.revenue,\"&ts\":p.shipping,\"&tt\":p.tax,\"&tcc\":p.coupon,\"&cu\":p.currency}),p.products.forEach(e=>{Yl(\"item\",{\"&ti\":p.order_id,\"&in\":e.name,\"&ic\":e.sku,\"&iv\":`${e.category}`,\"&ip\":e.price,\"&iq\":e.quantity})}),this.analyticsExtraItemsManager.clearExtraItemData(d);this.analytics.track(\"Order Completed\",p),this.analyticsExtraItemsManager.clearExtraItemData(d)}trackStepViewed(e){const t=this.getIdFromStep(e);t&&!this.hasStepViewed(t)&&(this.trackViewed(t),this.backfill(t))}trackStepCompleted(e){const t=this.getIdFromStep(e);t&&!this.hasStepCompleted(t)&&(this.backfill(t),this.trackCompleted(t))}backfill(e){for(const t of this._analyticStepOrder){const n=this.getIdFromStep(t);if(!n)break;if(this.hasStepViewed(n)||this.trackViewed(n),n===e)break;this.hasStepCompleted(n)||this.trackCompleted(n)}}trackCompleted(e){const t=this.getSelectedShippingOption(),{code:n=\"\"}=this.getShopperCurrency()||{},r=this.getPaymentMethodName(),i={step:e,currency:n};t&&(i.shipping_method=t.description),r&&(i.payment_method=r),i.shipping_method||i.payment_method||(i.shipping_method=\" \"),this.analytics.track(\"Checkout Step Completed\",i);const o=t?t.id:\"\",s=e===Kl.SHIPPING?`${e}-${o}`:e;this._completedSteps[s]=!0}getTrackingPayload({orderId:e,revenue:t,shipping:n,tax:r,discount:i,coupons:o,extraItemsData:s,lineItems:a}){const{code:c=\"\"}=this.getShopperCurrency()||{},{storeName:u=\"\"}=this.getStoreProfile()||{};return{order_id:String(e),affiliation:u,revenue:this.toShopperCurrency(t),shipping:this.toShopperCurrency(n),tax:this.toShopperCurrency(r),discount:this.toShopperCurrency(i),coupon:(o||[]).map(e=>e.code.toUpperCase()).join(\",\"),currency:c,products:this.getProducts(s,a)}}hasStepCompleted(e){const t=this.getSelectedShippingOption(),n=t?t.id:\"\";return Object.prototype.hasOwnProperty.call(this._completedSteps,e)||e===Kl.SHIPPING&&Object.prototype.hasOwnProperty.call(this._completedSteps,`${e}-${n}`)}hasStepViewed(e){return!!this._viewedSteps[e]}getIdFromStep(e){const t=e.split(\".\");return Ql[t[0]]||null}trackViewed(e){const t=this.getShopperCurrency();this.analytics.track(\"Checkout Step Viewed\",{step:e,currency:t?t.code:\"\"}),this._viewedSteps[e]=!0}getOrder(){const{data:{getOrder:e}}=this.checkoutService.getState();return e()}getCheckout(){const{data:{getCheckout:e}}=this.checkoutService.getState();return e()}getShopperCurrency(){const{data:{getConfig:e}}=this.checkoutService.getState(),t=e();return t&&t.shopperCurrency}getStoreProfile(){const{data:{getConfig:e}}=this.checkoutService.getState(),t=e();return t&&t.storeProfile}toShopperCurrency(e){const{exchangeRate:t=1}=this.getShopperCurrency()||{};return Math.round(e*t*100)/100}getSelectedShippingOption(){const{data:e}=this.checkoutService.getState(),t=e.getSelectedShippingOption();return t&&t.id&&t.description?t:null}getPaymentMethodName(){const{data:e}=this.checkoutService.getState(),t=e.getSelectedPaymentMethod();return t&&t.config&&t.config.displayName||\"\"}getProducts(e,t){const n=(t.customItems||[]).map(e=>({product_id:e.id,sku:e.sku,price:e.listPrice,quantity:e.quantity,name:e.name})),r=t.giftCertificates.map(e=>({product_id:e.id,price:this.toShopperCurrency(e.amount),name:e.name,quantity:1}));return[...n,...[...t.physicalItems,...t.digitalItems].map(t=>{let n;t.options&&t.options.length&&(n=t.options.map(e=>`${e.name}:${e.value}`),n.sort());const r=Array.isArray(n)&&n.length?n.join(\", \"):\"single-product-option\",i=e[t.productId]&&e[t.productId].brand;return Object.assign({product_id:String(t.productId),sku:t.sku,price:t.salePrice,image_url:t.imageUrl,name:t.name,quantity:t.quantity,category:e[t.productId]?e[t.productId].category:\"\",variant:r},i&&{brand:i})}),...r]}}class Jl{trackCheckoutStarted(){}trackOrderComplete(){}trackStepViewed(){}trackStepCompleted(){}}function Xl(e,t){const{data:n}=e.getState(),r=n.getConfig();if(!r)throw new P(b.MissingCheckoutConfig);const{isAnalyticsEnabled:i}=r.checkoutSettings;return i&&Hl(window)?new Zl(e,new Vl(pn.Ay),window.analytics,t):new Jl}function eh(e){return Boolean(e.hasOwnProperty(\"braintreeFastlane\"))}class th{constructor(e){this.checkoutService=e,this._selectedPaymentMethodId=\"\"}customerPaymentMethodExecuted(){this._shouldTrackFastlaneEvent()&&this._trackEmailSubmitted()}paymentComplete(){this._shouldTrackFastlaneEvent()&&this._trackOrderPlaced(this._selectedPaymentMethodId)}selectedPaymentMethod(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!1))}walletButtonClick(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!0))}_shouldTrackFastlaneEvent(){const e=this.checkoutService.getState(),t=e.data.getPaymentMethod(\"braintree\")||e.data.getPaymentMethod(\"braintreeacceleratedcheckout\"),n=null==t?void 0:t.initializationData.isBraintreeAnalyticsV2Enabled,r=eh(window)&&window.braintreeFastlane.events;return n&&r}_getBraintreeEventsOrThrow(){if(eh(window))return window.braintreeFastlane.events;throw new Ri}_trackEmailSubmitted(){const{emailSubmitted:e}=this._getBraintreeEventsOrThrow();e(this._getEmailSubmittedEventOptions())}_trackApmSelected(e,t){const{apmSelected:n}=this._getBraintreeEventsOrThrow();n(this._getApmSelectedEventOptions(e,t))}_trackOrderPlaced(e){const{orderPlaced:t}=this._getBraintreeEventsOrThrow();t(this._getOrderPlacedEventOptions(e))}_getEventCommonOptions(){var e,t;const n=this.checkoutService.getState(),r=n.data.getCart(),i=null===(e=n.data.getConfig())||void 0===e?void 0:e.storeProfile,o=null===(t=n.data.getCustomer())||void 0===t?void 0:t.isGuest,s=n.data.getPaymentMethod(\"braintreeacceleratedcheckout\"),a=[{treatment_group:!n.errors.getLoadPaymentMethodError(\"braintreeacceleratedcheckout\")&&(null==s?void 0:s.initializationData.shouldRunAcceleratedCheckout)?\"test\":\"control\"}];return{context_type:\"cs_id\",context_id:(null==r?void 0:r.id)||\"\",page_type:\"checkout_page\",page_name:window.document.title,partner_name:\"bigc\",user_type:o?\"store_guest\":\"store_member\",store_id:(null==i?void 0:i.storeId)||\"\",merchant_name:(null==i?void 0:i.storeName)||\"\",experiment:JSON.stringify(a)}}_getEmailSubmittedEventOptions(){const e=(this.checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{user_email_saved:!1,apm_shown:e.length>1?\"1\":\"0\",apm_list:e.join(\",\")})}_getApmSelectedEventOptions(e,t){const n=(this.checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{apm_shown:n.length>1?\"1\":\"0\",apm_list:n.join(\",\"),apm_selected:e,apm_location:t?\"pre-email section\":\"payment section\"})}_getOrderPlacedEventOptions(e){const t=this.checkoutService.getState().data.getCart();return Object.assign(Object.assign({},this._getEventCommonOptions()),{selected_payment_method:e,currency_code:(null==t?void 0:t.currency.code)||\"\"})}}function nh(e){return new th(e)}class rh{constructor(e){this._checkoutService=e,this._selectedPaymentMethodId=\"\"}customerPaymentMethodExecuted(){this._shouldTrackFastlaneEvent()&&this._trackEmailSubmitted()}paymentComplete(){this._shouldTrackFastlaneEvent()&&this._trackOrderPlaced(this._selectedPaymentMethodId)}selectedPaymentMethod(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!1))}walletButtonClick(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!0))}_shouldTrackFastlaneEvent(){const e=this._checkoutService.getState().data.getPaymentMethod(\"paypalcommerce\"),t=((null==e?void 0:e.initializationData)||{}).isPayPalCommerceAnalyticsV2Enabled,n=window,r=!!n.paypalFastlane&&!!n.paypalFastlane.events;return t&&r}_getPayPalEventsOrThrow(){const e=window;if(e.paypalFastlane&&e.paypalFastlane.events)return e.paypalFastlane.events;throw new Ri}_trackEmailSubmitted(){const{emailSubmitted:e}=this._getPayPalEventsOrThrow();e(this._getEmailSubmittedEventOptions())}_trackApmSelected(e,t){const{apmSelected:n}=this._getPayPalEventsOrThrow();n(this._getApmSelectedEventOptions(e,t))}_trackOrderPlaced(e){const{orderPlaced:t}=this._getPayPalEventsOrThrow();t(this._getOrderPlacedEventOptions(e))}_getEventCommonOptions(){var e,t;const n=this._checkoutService.getState(),r=n.data.getCart(),i=null===(e=n.data.getConfig())||void 0===e?void 0:e.storeProfile,o=null===(t=n.data.getCustomer())||void 0===t?void 0:t.isGuest,s=\"paypalcommerceacceleratedcheckout\",a=n.data.getPaymentMethod(s),c=[{treatment_group:!n.errors.getLoadPaymentMethodError(s)&&(null==a?void 0:a.initializationData.shouldRunAcceleratedCheckout)?\"test\":\"control\"}];return{context_type:\"cs_id\",context_id:(null==r?void 0:r.id.replace(/-/g,\"\"))||\"\",page_type:\"checkout_page\",page_name:window.document.title,partner_name:\"bigc\",user_type:o?\"store_guest\":\"store_member\",store_id:(null==i?void 0:i.storeId)||\"\",merchant_name:(null==i?void 0:i.storeName)||\"\",experiment:JSON.stringify(c)}}_getEmailSubmittedEventOptions(){const e=(this._checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{user_email_saved:!1,apm_shown:e.length>1?\"1\":\"0\",apm_list:e.join(\",\")})}_getApmSelectedEventOptions(e,t){const n=(this._checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{apm_shown:n.length>1?\"1\":\"0\",apm_list:n.join(\",\"),apm_selected:e,apm_location:t?\"pre-email section\":\"payment section\"})}_getOrderPlacedEventOptions(e){const t=this._checkoutService.getState().data.getCart();return Object.assign(Object.assign({},this._getEventCommonOptions()),{selected_payment_method:e,currency_code:(null==t?void 0:t.currency.code)||\"\"})}}function ih(e){return new rh(e)}var oh;class sh{constructor(e,t){this._host=e,this._hostedFormFactory=t}submitStoredCard(e,t){return n=this,r=void 0,o=function*(){const n=this._hostedForm;if(!n)throw new Ve(Ue.PaymentNotInitialized);yield n.validate().then(()=>n.submitStoredCard({fields:e,data:t}))},new((i=void 0)||(i=Promise))(function(e,t){function s(e){try{c(o.next(e))}catch(e){t(e)}}function a(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}initialize(e){const t=this._hostedFormFactory.create(this._host,e);return t.attach().then(()=>{this._hostedForm=t})}deinitialize(){this._hostedForm&&this._hostedForm.detach()}}function ah(e){const t=vu();return new sh(e,new Mn(t))}!function(e){e.CUSTOMER=\"customer\",e.SHIPPING=\"shipping\",e.BILLING=\"billing\",e.PAYMENT=\"payment\"}(oh||(oh={}));const ch=[oh.CUSTOMER,oh.SHIPPING,oh.BILLING,oh.PAYMENT];class uh{constructor(e,t){this.subscribe=e,this.bodlEvents=t,this._checkoutStarted=!1,this._emailEntryBegan=!1,this._shippingOptionsShown=!1,this._completedSteps={},this.subscribe(e=>{var t;if(this.setState(e.data),!(null===(t=this.state)||void 0===t?void 0:t.getConfig()))throw new P(b.MissingCheckoutConfig)})}setState(e){this.state=e}checkoutBegin(){const e=this._getCommonCheckoutData();!this._checkoutStarted&&e&&(this.bodlEvents.emitCheckoutBeginEvent(e),this._checkoutStarted=!0)}orderPurchased(){var e;const t=null===(e=this.state)||void 0===e?void 0:e.getOrder();if(!t)return;const{currency:n,isComplete:r,orderId:i,orderAmount:o,shippingCostTotal:s,lineItems:a,cartId:c,coupons:u,channelId:d,taxTotal:l}=t;r&&this.bodlEvents.emitOrderPurchasedEvent({event_id:c,currency:n.code,order_id:i,tax:l,channel_id:d,cart_value:o,coupon_codes:u.map(e=>e.code.toUpperCase()),shipping_cost:s,line_items:this._getProducts(a,n.code)})}stepCompleted(e){e&&ch.some(t=>(this._hasStepCompleted(t)||this._trackCompletedStep(t),t===e))}customerEmailEntry(e){!this._emailEntryBegan&&(null==e?void 0:e.length)&&(this._emailEntryBegan=!0,this.bodlEvents.emit(\"bodl_checkout_email_entry_began\"))}customerSuggestionInit(e){this.bodlEvents.emit(\"bodl_checkout_customer_suggestion_initialization\",e)}customerSuggestionExecute(){this.bodlEvents.emit(\"bodl_checkout_customer_suggestion_execute\")}customerPaymentMethodExecuted(e){this.bodlEvents.emit(\"bodl_checkout_customer_payment_method_executed\",e)}showShippingMethods(){this._shippingOptionsShown||(this._shippingOptionsShown=!0,this.bodlEvents.emit(\"bodl_checkout_show_shipping_options\"))}selectedPaymentMethod(e){const t=this._getCommonCheckoutData();t&&e&&this.bodlEvents.emitPaymentDetailsProvidedEvent(Object.assign(Object.assign({},t),{payment_type:e}))}clickPayButton(e){this.bodlEvents.emit(\"bodl_checkout_click_pay_button\",e)}paymentRejected(){this.bodlEvents.emit(\"bodl_checkout_payment_rejected\")}paymentComplete(){this.bodlEvents.emit(\"bodl_checkout_payment_complete\")}exitCheckout(){this.bodlEvents.emit(\"bodl_checkout_exit\")}_trackCompletedStep(e){this._completedSteps[e]=!0;const t={[oh.SHIPPING]:this._trackShippingStepCompleted.bind(this)}[e];t?t():this.bodlEvents.emit(\"bodl_checkout_step_completed\",{step:e})}_trackShippingStepCompleted(){var e,t;const n=null===(t=null===(e=this.state)||void 0===e?void 0:e.getSelectedShippingOption())||void 0===t?void 0:t.description,r=this._getCommonCheckoutData();r&&n&&this.bodlEvents.emitShippingDetailsProvidedEvent(Object.assign(Object.assign({},r),{shipping_method:n}))}_getCommonCheckoutData(){var e;const t=null===(e=this.state)||void 0===e?void 0:e.getCheckout();if(!t)return null;const{cart:{cartAmount:n,currency:r,lineItems:i,id:o,coupons:s},channelId:a}=t;return{event_id:o,currency:r.code,cart_value:n,coupon_codes:s.map(e=>e.code.toUpperCase()),line_items:this._getProducts(i,r.code),channel_id:a}}_getProducts(e,t){const n=(e.customItems||[]).map(e=>({product_id:e.id,sku:e.sku,base_price:e.listPrice,sale_price:e.listPrice,purchase_price:e.listPrice,quantity:e.quantity,product_name:e.name,currency:t})),r=e.giftCertificates.map(e=>({product_id:e.id,gift_certificate_id:e.id,base_price:e.amount,sale_price:e.amount,purchase_price:e.amount,product_name:e.name,gift_certificate_name:e.name,gift_certificate_theme:e.theme,quantity:1,currency:t}));return[...n,...[...e.physicalItems,...e.digitalItems].map(e=>{let n;return e.options&&e.options.length&&(n=e.options.map(e=>`${e.name}:${e.value}`),n.sort()),{product_id:e.productId,quantity:e.quantity,product_name:e.name,base_price:e.listPrice,sale_price:e.salePrice,purchase_price:e.salePrice>0?e.salePrice:e.listPrice,sku:e.sku,variant_id:e.variantId,discount:e.discountAmount,coupon_amount:e.couponAmount,brand_name:e.brand,currency:t,category_names:(r=e,Array.isArray(r.categoryNames)?r.categoryNames:Array.isArray(r.categories)?(0,E.flatten)(r.categories).map(({name:e})=>e):[]),retail_price:e.retailPrice};var r}),...r].map(e=>Object.assign(Object.assign({},e),{product_id:String(e.product_id)}))}_hasStepCompleted(e){return this._completedSteps[e]}}class dh{checkoutBegin(){}orderPurchased(){}stepCompleted(){}customerEmailEntry(){}customerSuggestionInit(){}customerSuggestionExecute(){}customerPaymentMethodExecuted(){}showShippingMethods(){}selectedPaymentMethod(){}clickPayButton(){}paymentRejected(){}paymentComplete(){}exitCheckout(){}}function lh(e){return function(e){return\"bodlEvents\"in e}(window)?new uh(e,window.bodlEvents.checkout):new dh}})(),module.exports=r})();\n//# sourceMappingURL=checkout-sdk-essential.js.map"
  },
  {
    "path": "dist/cjs/checkout-sdk-essential.js.LICENSE.txt",
    "content": "/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n"
  },
  {
    "path": "dist/cjs/checkout-sdk.js",
    "content": "/*! For license information please see checkout-sdk.js.LICENSE.txt */\n(()=>{var e={3825(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=d(n(4475)),r=d(n(8015)),o=d(n(8615)),a=d(n(9504)),s=d(n(4351)),c=d(n(3072));function d(e){return e&&e.__esModule?e:{default:e}}function u(e){return u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},u(e)}function l(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,h(i.key),i)}}function h(e){var t=function(e){if(\"object\"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=u(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==u(t)?t:t+\"\"}t.default=function(){function e(t,n,i,r,o){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.config=t,this.paymentSubmitter=n,this.offsitePaymentInitializer=i,this.clientTokenGenerator=r,this.storeRequestSender=o}return t=e,d=[{key:\"create\",value:function(t){var n=(0,i.default)({},c.default,t),d=r.default.create(n);return new e(n,o.default.create(n),d,a.default.create(n),s.default.create(n))}}],(n=[{key:\"setHost\",value:function(e){this.config.host=e}},{key:\"initializeOffsitePayment\",value:function(e,t,n){this.offsitePaymentInitializer.initializeOffsitePayment(e,t,n)}},{key:\"submitPayment\",value:function(e,t){this.paymentSubmitter.submitPayment(e,t)}},{key:\"generateClientToken\",value:function(e,t){this.clientTokenGenerator.generateClientToken(e,t)}},{key:\"loadInstruments\",value:function(e,t){this.storeRequestSender.loadInstruments(e,t)}},{key:\"loadInstrumentsWithAddress\",value:function(e,t){this.storeRequestSender.loadInstrumentsWithAddress(e,t)}},{key:\"deleteShopperInstrument\",value:function(e,t){this.storeRequestSender.deleteShopperInstrument(e,t)}}])&&l(t.prototype,n),d&&l(t,d),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,d}()},3072(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0,t.default={host:\"\"}},9554(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.APPLICATION_JSON=void 0,t.APPLICATION_JSON=\"application/json\"},7257(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(9554),r=n(9726),o={headers:{Accept:i.APPLICATION_JSON,\"Content-Type\":i.APPLICATION_JSON},method:r.GET};t.default=o},9726(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.POST=t.GET=t.DELETE=void 0,t.GET=\"GET\",t.POST=\"POST\",t.DELETE=\"DELETE\"},9731(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i,r=(i=n(4475))&&i.__esModule?i:{default:i},o=n(9554),a=n(5916);function s(e){return s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s(e)}function c(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,d(i.key),i)}}function d(e){var t=function(e){if(\"object\"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=s(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==s(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return function(e,t,n){return t&&c(e.prototype,t),n&&c(e,n),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(e,[{key:\"toRequest\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.APPLICATION_JSON;return e&&(0,a.includes)(t,o.APPLICATION_JSON)?JSON.stringify(e):e}},{key:\"fromResponse\",value:function(e){var t=this.parseResponseHeaders(e.getAllResponseHeaders()),n=e.getResponseHeader(\"Content-Type\"),i=e.status,r=e.statusText,s=\"response\"in e?e.response:e.responseText;return s&&(0,a.includes)(n,o.APPLICATION_JSON)&&(s=JSON.parse(s)),{data:s,headers:t,status:i,statusText:r}}},{key:\"parseResponseHeaders\",value:function(e){return(e?e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(e,t){var n=t.split(\":\"),i=(n.shift()||\"\").trim();return i?(0,r.default)({},e,function(e,t,n){return(t=d(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}({},i.toLowerCase(),n.join(\":\").trim())):e},{})}}],[{key:\"create\",value:function(){return new e}}])}()},5101(e,t){\"use strict\";function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,r(i.key),i)}}function r(e){var t=function(e){if(\"object\"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var i=t.call(e,\"string\");if(\"object\"!=n(i))return i;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==n(t)?t:t+\"\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0,t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,r=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"createRequest\",value:function(e,t,n){var i=new XMLHttpRequest;return i.onerror=function(){n&&n(new Error(i.statusText))},i.onload=function(){n&&n()},i.open(t.method,e,!0),this.setOptions(i,t),i}},{key:\"setHeaders\",value:function(e,t){Object.keys(t).forEach(function(n){var i=t[n];e.setRequestHeader(n,i)})}},{key:\"setOptions\",value:function(e,t){e.withCredentials=t.withCredentials,t.headers&&this.setHeaders(e,t.headers)}}])&&i(t.prototype,n),r&&i(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},7542(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=d(n(3592)),r=d(n(4475)),o=n(9726),a=d(n(7257)),s=d(n(9731)),c=d(n(5101));function d(e){return e&&e.__esModule?e:{default:e}}function u(e){return u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},u(e)}function l(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,h(i.key),i)}}function h(e){var t=function(e){if(\"object\"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=u(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==u(t)?t:t+\"\"}t.default=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.requestFactory=t,this.payloadTransformer=n}return t=e,d=[{key:\"create\",value:function(){return new e(c.default.create(),s.default.create())}}],(n=[{key:\"sendRequest\",value:function(e,t,n,r){var o=this,s=(0,i.default)({},a.default,n),c=this.requestFactory.createRequest(e,s,function(e){var t=o.payloadTransformer.fromResponse(c);r&&(!e&&o.isSuccessfulRequest(c)?r(null,t):r(t))}),d=this.payloadTransformer.toRequest(t,s.headers[\"Content-Type\"]);c.send(d)}},{key:\"postRequest\",value:function(e,t,n,i){var a=(0,r.default)({},n,{method:o.POST});this.sendRequest(e,t,a,i)}},{key:\"isSuccessfulRequest\",value:function(e){return e.status>=200&&e.status<300}}])&&l(t.prototype,n),d&&l(t,d),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,d}()},6207(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){return!(!Array.isArray(e)&&\"string\"!=typeof e)&&-1!==e.indexOf(t)}},5916(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),Object.defineProperty(t,\"includes\",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,\"isNil\",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,\"isObject\",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,\"omitEmptyStringAndNil\",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,\"omitNil\",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,\"omitProperty\",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,\"toNumber\",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,\"toSnakeCase\",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,\"toString\",{enumerable:!0,get:function(){return l.default}});var i=h(n(6207)),r=h(n(848)),o=h(n(216)),a=h(n(1144)),s=h(n(2433)),c=h(n(2265)),d=h(n(3897)),u=h(n(987)),l=h(n(6645));function h(e){return e&&e.__esModule?e:{default:e}}},7914(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return\"\"===e}},223(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return(0,i.default)(e)||(0,r.default)(e)};var i=o(n(7914)),r=o(n(848));function o(e){return e&&e.__esModule?e:{default:e}}},848(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return null==e}},216(e,t){\"use strict\";function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return null!==e&&\"object\"===n(e)&&!Array.isArray(e)}},1144(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return(0,r.default)(e,i.default)};var i=o(n(223)),r=o(n(2265));function o(e){return e&&e.__esModule?e:{default:e}}},2433(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return(0,r.default)(e,i.default)};var i=o(n(848)),r=o(n(2265));function o(e){return e&&e.__esModule?e:{default:e}}},2265(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){return(0,r.default)(e)?Object.keys(e).reduce(function(n,i){var r=e[i];return t(r)||(n[i]=r),n},{}):e};var i,r=(i=n(216))&&i.__esModule?i:{default:i}},3897(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return parseFloat(e)||0}},987(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return\"string\"!=typeof e?e:e.replace(/([a-z\\d])([A-Z]+)/g,\"$1_$2\").replace(/[-\\s]+/g,\"_\").toLowerCase()}},6645(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return\"string\"==typeof e?e:\"number\"!=typeof e||Number.isNaN(e)?\"\":e.toString()}},2742(e,t,n){\"use strict\";t.U=function(e){return r.default.create(e)};var i,r=(i=n(3825))&&i.__esModule?i:{default:i}},9504(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=a(n(7542)),r=a(n(3373)),o=a(n(2815));function a(e){return e&&e.__esModule?e:{default:e}}function s(e){return s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s(e)}function c(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,d(i.key),i)}}function d(e){var t=function(e){if(\"object\"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=s(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==s(t)?t:t+\"\"}t.default=function(){function e(t,n,i){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.urlHelper=t,this.requestSender=n,this.clientTokenMapper=i}return t=e,a=[{key:\"create\",value:function(t){return new e(o.default.create(t),i.default.create(),r.default.create())}}],(n=[{key:\"generateClientToken\",value:function(e,t){var n=this.urlHelper.getGenerateClientTokenUrl(),i=this.clientTokenMapper.mapToClientToken(e);this.requestSender.postRequest(n,i,{},t)}}])&&c(t.prototype,n),a&&c(t,a),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,a}()},8015(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(8686),r=n(2157),o=s(n(2216)),a=s(n(2815));function s(e){return e&&e.__esModule?e:{default:e}}function c(e){return c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c(e)}function d(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,u(i.key),i)}}function u(e){var t=function(e){if(\"object\"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=c(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==c(t)?t:t+\"\"}t.default=function(){function e(t,n,i){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.urlHelper=t,this.formPoster=n,this.payloadMapper=i}return t=e,s=[{key:\"create\",value:function(t){return new e(a.default.create(t),(0,i.createFormPoster)(),o.default.create())}}],(n=[{key:\"initializeOffsitePayment\",value:function(e,t,n){var i=e.paymentMethod,o=void 0===i?{}:i;if(o.type!==r.HOSTED)throw new Error(\"\".concat(o.type,\" is not supported.\"));var a=this.payloadMapper.mapToPayload(e),s=this.urlHelper.getOffsitePaymentUrl();this.formPoster.postForm(s,a,t,n)}}])&&d(t.prototype,n),s&&d(t,s),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,s}()},7034(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916);function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function o(e,t,n){return(t=s(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,s(i.key),i)}}function s(e){var t=function(e){if(\"object\"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==r(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,r=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToBillingAddress\",value:function(e){return this.mapToAddress(e,\"billingAddress\")}},{key:\"mapToShippingAddress\",value:function(e){return this.mapToAddress(e,\"shippingAddress\")}},{key:\"mapToAddress\",value:function(e,t){var n,r=e[t]||{},a=(0,i.toSnakeCase)(t);return(0,i.omitNil)((o(o(o(o(o(o(o(o(o(o(n={},\"\".concat(a,\"_city\"),r.city),\"\".concat(a,\"_company\"),r.company),\"\".concat(a,\"_country_code\"),r.countryCode),\"\".concat(a,\"_country\"),r.country),\"\".concat(a,\"_first_name\"),r.firstName),\"\".concat(a,\"_last_name\"),r.lastName),\"\".concat(a,\"_phone\"),r.phone),\"\".concat(a,\"_state_code\"),r.provinceCode),\"\".concat(a,\"_state\"),r.province),\"\".concat(a,\"_street_1\"),r.addressLine1),o(o(n,\"\".concat(a,\"_street_2\"),r.addressLine2),\"\".concat(a,\"_zip\"),r.postCode)))}}])&&a(t.prototype,n),r&&a(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},5452(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916);function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,a(i.key),i)}}function a(e){var t=function(e){if(\"object\"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==r(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,r=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToCustomer\",value:function(e){var t=e.customer,n=void 0===t?{}:t,r=e.quoteMeta,o=void 0===r?{}:r,a=e.store,s=void 0===a?{}:a;return(0,i.omitNil)({customer_browser_info:navigator.userAgent,customer_email:n.email,customer_first_name:n.firstName,customer_geo_ip_country_code:o.request?o.request.geoCountryCode:null,customer_id:n.customerId,customer_last_name:n.lastName,customer_locale:s.storeLanguage,customer_name:n.name,customer_phone:n.phoneNumber,customer_reference:n.email})}}])&&o(t.prototype,n),r&&o(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},7403(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916);function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,a(i.key),i)}}function a(e){var t=function(e){if(\"object\"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==r(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,r=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToMeta\",value:function(e){var t=e.source;return(0,i.omitNil)({meta_referrer:document.referrer,meta_source:t,meta_user_agent:navigator.userAgent})}}])&&o(t.prototype,n),r&&o(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},2216(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=u(n(4475)),r=n(5916),o=u(n(7034)),a=u(n(5452)),s=u(n(7403)),c=u(n(187)),d=u(n(9229));function u(e){return e&&e.__esModule?e:{default:e}}function l(e){return l=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},l(e)}function h(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,p(i.key),i)}}function p(e){var t=function(e){if(\"object\"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=l(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==l(t)?t:t+\"\"}t.default=function(){function e(t,n,i,r,o){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.addressMapper=t,this.customerMapper=n,this.metaMapper=i,this.paymentMethodIdMapper=r,this.storeMapper=o}return t=e,u=[{key:\"create\",value:function(){return new e(o.default.create(),a.default.create(),s.default.create(),c.default.create(),d.default.create())}}],(n=[{key:\"mapToPayload\",value:function(e){var t=e.authToken,n=e.order,o=void 0===n?{}:n,a=e.payment,s=void 0===a?{}:a,c=e.paymentMethod,d=void 0===c?{}:c,u=(0,i.default)({amount:o.grandTotal?o.grandTotal.integerAmount:null,tax:o.taxTotal?o.taxTotal.integerAmount:null,bc_auth_token:t,currency:o.currency,gateway:this.paymentMethodIdMapper.mapToId(d),notify_url:o.callbackUrl,order_id:o.orderId?(0,r.toString)(o.orderId):null,page_title:document.title?document.title:null,payment_method_id:d.id,reference_id:o.orderId?(0,r.toString)(o.orderId):null,return_url:d.returnUrl||(o.payment?o.payment.returnUrl:null)},this.addressMapper.mapToBillingAddress(e),this.customerMapper.mapToCustomer(e),this.metaMapper.mapToMeta(e),this.addressMapper.mapToShippingAddress(e),this.storeMapper.mapToStore(e)),l=s.formattedPayload,h=void 0===l?{}:l;return(0,i.default)(u,h),(0,r.omitNil)(u)}}])&&h(t.prototype,n),u&&h(t,u),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,u}()},9229(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916);function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,a(i.key),i)}}function a(e){var t=function(e){if(\"object\"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==r(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,r=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToStore\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,i.omitNil)({store_hash:n.storeHash,store_id:n.storeId?(0,i.toString)(n.storeId):null})}}])&&o(t.prototype,n),r&&o(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},4432(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PAYPAL_COMMERCE_VENMO=t.PAYPAL_COMMERCE_CREDIT_CARDS=t.PAYPAL_COMMERCE_CREDIT=t.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=t.PAYPAL_COMMERCE_ACCELERATED_CHECKOUT=t.PAYPAL_COMMERCE=t.BRAINTREE_VISACHECKOUT=t.BRAINTREE_PAYPAL_CREDIT=t.BRAINTREE_PAYPAL=t.BRAINTREE_LOCAL_METHODS=t.BRAINTREE_GOOGLEPAY=t.BRAINTREE_ACH=t.BRAINTREE_ACCELERATED_CHECKOUT=t.BRAINTREE=t.BIGCOMMERCE_PAYMENTS_VENMO=t.BIGCOMMERCE_PAYMENTS_PAYLATER=t.BIGCOMMERCE_PAYMENTS_FASTLANE=t.BIGCOMMERCE_PAYMENTS_CREDIT_CARDS=t.BIGCOMMERCE_PAYMENTS_APMS=t.BIGCOMMERCE_PAYMENTS=void 0,t.BIGCOMMERCE_PAYMENTS=\"bigcommerce_payments\",t.BIGCOMMERCE_PAYMENTS_PAYLATER=\"bigcommerce_payments_paylater\",t.BIGCOMMERCE_PAYMENTS_CREDIT_CARDS=\"bigcommerce_payments_creditcards\",t.BIGCOMMERCE_PAYMENTS_FASTLANE=\"bigcommerce_payments_fastlane\",t.BIGCOMMERCE_PAYMENTS_APMS=\"bigcommerce_payments_apms\",t.BIGCOMMERCE_PAYMENTS_VENMO=\"bigcommerce_payments_venmo\",t.BRAINTREE=\"braintree\",t.BRAINTREE_PAYPAL=\"braintreepaypal\",t.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",t.BRAINTREE_VISACHECKOUT=\"braintreevisacheckout\",t.BRAINTREE_LOCAL_METHODS=\"braintreelocalmethods\",t.BRAINTREE_GOOGLEPAY=\"googlepaybraintree\",t.BRAINTREE_ACH=\"braintreeach\",t.BRAINTREE_ACCELERATED_CHECKOUT=\"braintreeacceleratedcheckout\",t.PAYPAL_COMMERCE=\"paypalcommerce\",t.PAYPAL_COMMERCE_ACCELERATED_CHECKOUT=\"paypalcommerceacceleratedcheckout\",t.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=\"paypalcommercealternativemethods\",t.PAYPAL_COMMERCE_CREDIT=\"paypalcommercecredit\",t.PAYPAL_COMMERCE_CREDIT_CARDS=\"paypalcommercecreditcards\",t.PAYPAL_COMMERCE_VENMO=\"paypalcommercevenmo\"},187(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(3491),r=n(4432);function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}function a(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,s(i.key),i)}}function s(e){var t=function(e){if(\"object\"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=o(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==o(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,o=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToId\",value:function(e){var t=e.id;return e.method===i.MULTI_OPTION&&(t=e.gateway),function(e){switch(e){case r.BRAINTREE_PAYPAL:case r.BRAINTREE_PAYPAL_CREDIT:case r.BRAINTREE_VISACHECKOUT:case r.BRAINTREE_GOOGLEPAY:case r.BRAINTREE_ACH:case r.BRAINTREE_LOCAL_METHODS:case r.BRAINTREE_ACCELERATED_CHECKOUT:return!0;default:return!1}}(t)?r.BRAINTREE:function(e){switch(e){case r.PAYPAL_COMMERCE_CREDIT:case r.PAYPAL_COMMERCE_CREDIT_CARDS:case r.PAYPAL_COMMERCE_ACCELERATED_CHECKOUT:case r.PAYPAL_COMMERCE_ALTERNATIVE_METHODS:case r.PAYPAL_COMMERCE_VENMO:return!0;default:return!1}}(t)?r.PAYPAL_COMMERCE:function(e){switch(e){case r.BIGCOMMERCE_PAYMENTS:case r.BIGCOMMERCE_PAYMENTS_PAYLATER:case r.BIGCOMMERCE_PAYMENTS_CREDIT_CARDS:case r.BIGCOMMERCE_PAYMENTS_FASTLANE:case r.BIGCOMMERCE_PAYMENTS_APMS:case r.BIGCOMMERCE_PAYMENTS_VENMO:return!0;default:return!1}}(t)?r.BIGCOMMERCE_PAYMENTS:t}}])&&a(t.prototype,n),o&&a(t,o),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,o}()},3491(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.PPSDK_CREDIT_CARD=t.MULTI_OPTION=t.CREDIT_CARD=void 0,t.CREDIT_CARD=\"credit-card\",t.MULTI_OPTION=\"multi-option\",t.PPSDK_CREDIT_CARD=\"card\"},8615(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=c(n(7542)),r=n(2157),o=c(n(2719)),a=c(n(4507)),s=c(n(2815));function c(e){return e&&e.__esModule?e:{default:e}}function d(e){return d=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},d(e)}function u(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,l(i.key),i)}}function l(e){var t=function(e){if(\"object\"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=d(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==d(t)?t:t+\"\"}t.default=function(){function e(t,n,i,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.urlHelper=t,this.requestSender=n,this.payloadMapper=i,this.ppsdkPayloadMapper=r}return t=e,c=[{key:\"create\",value:function(t){return new e(s.default.create(t),i.default.create(),o.default.create(),a.default.create())}}],(n=[{key:\"submitPayment\",value:function(e,t){var n=e.paymentMethod,i=void 0===n?{}:n;if(i.type!==r.API&&i.type!==r.SDK)throw new Error(\"\".concat(i.type,\" is not supported.\"));var o=i.type===r.SDK?this.ppsdkPayloadMapper.mapToPayload(e):this.payloadMapper.mapToPayload(e),a=i.type===r.SDK?this.urlHelper.getPpsdkPaymentUrl():this.urlHelper.getPaymentUrl(),s={headers:this.payloadMapper.mapToHeaders(e)};this.requestSender.postRequest(a,o,s,t)}}])&&u(t.prototype,n),c&&u(t,c),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,c}()},2157(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.SDK=t.OFFLINE=t.HOSTED=t.API=void 0,t.API=\"PAYMENT_TYPE_API\",t.HOSTED=\"PAYMENT_TYPE_HOSTED\",t.OFFLINE=\"PAYMENT_TYPE_OFFLINE\",t.SDK=\"PAYMENT_TYPE_SDK\"},4507(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916),r=n(3491);function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}function a(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,s(i.key),i)}}function s(e){var t=function(e){if(\"object\"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=o(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==o(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,o=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToPayload\",value:function(e){var t=e.additionalAction,n=e.payment,o=void 0===n?{}:n,a=e.paymentMethod;return(0,i.omitNil)({instrument:{expires:{month:o.ccExpiry?(0,i.toNumber)(o.ccExpiry.month):null,year:o.ccExpiry?(0,i.toNumber)(o.ccExpiry.year):null},name:o.ccName,number:o.ccNumber,verification_value:o.ccCvv,type:r.PPSDK_CREDIT_CARD},form_nonce:o.hostedFormNonce,payment_method_id:a.id,human_verification:t?{id:\"recaptcha_v2_verification\",parameters:{token:t?t.data.human_verification_token:null}}:null})}},{key:\"mapToHeaders\",value:function(e){var t=e.authToken;return(0,i.omitNil)({Authorization:t})}}])&&a(t.prototype,n),o&&a(t,o),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,o}()},2815(e,t){\"use strict\";function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,r(i.key),i)}}function r(e){var t=function(e){if(\"object\"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var i=t.call(e,\"string\");if(\"object\"!=n(i))return i;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==n(t)?t:t+\"\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0,t.default=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.config=t}return t=e,r=[{key:\"create\",value:function(t){return new e(t)}}],(n=[{key:\"host\",get:function(){return this.config.host}},{key:\"getOffsitePaymentUrl\",value:function(){return\"\".concat(this.host,\"/pay/initialize\")}},{key:\"getPaymentUrl\",value:function(){return\"\".concat(this.host,\"/api/public/v1/orders/payments\")}},{key:\"getPpsdkPaymentUrl\",value:function(){return\"\".concat(this.host,\"/payments\")}},{key:\"getGenerateClientTokenUrl\",value:function(){return\"\".concat(this.host,\"/api/v2/public/payments/client_tokens\")}}])&&i(t.prototype,n),r&&i(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},1517(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916);function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,a(i.key),i)}}function a(e){var t=function(e){if(\"object\"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==r(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,r=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToCustomer\",value:function(e){var t=e.customer,n=void 0===t?{}:t,r=e.quoteMeta,o=void 0===r?{}:r;return(0,i.omitNil)({customer_group:n.customerGroupName?{name:n.customerGroupName}:null,geo_ip_country_code:o.request?o.request.geoCountryCode:null,id:n.customerId?(0,i.toString)(n.customerId):null,session_token:o.request?o.request.sessionHash:null})}}])&&o(t.prototype,n),r&&o(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},3805(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916);function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,a(i.key),i)}}function a(e){var t=function(e){if(\"object\"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==r(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,r=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToOrder\",value:function(e){var t=e.order,n=void 0===t?{}:t;return(0,i.omitNil)({billing_address:this.mapToBillingAddress(e),coupons:this.mapToCoupons(e),currency:n.currency,id:n.orderId?(0,i.toString)(n.orderId):null,items:this.mapToItems(e),shipping:this.mapToShipping(e),shipping_address:this.mapToShippingAddress(e),token:n.token,totals:this.mapToOrderTotals(e)})}},{key:\"mapToBillingAddress\",value:function(e){var t=e.customer,n=void 0===t?{}:t,i=this.mapToAddress(e,\"billingAddress\");return n.email&&(i.email=n.email),i}},{key:\"mapToShipping\",value:function(e){var t=e.shippingOption||{},n=t.description,r=t.transitTime;return n?[(0,i.omitEmptyStringAndNil)({method:n,transit_time:r})]:[]}},{key:\"mapToCoupons\",value:function(e){var t=e.order,n=void 0===t?{}:t;return n.coupon&&n.coupon.coupons?n.coupon.coupons.map(function(e){return{code:e.code}}):[]}},{key:\"mapToShippingAddress\",value:function(e){return this.mapToAddress(e,\"shippingAddress\")}},{key:\"mapToAddress\",value:function(e,t){var n=e[t]||{};return(0,i.omitEmptyStringAndNil)({city:n.city,company:n.company,country_code:n.countryCode,country:n.country,first_name:n.firstName,last_name:n.lastName,phone:n.phone,state_code:n.provinceCode,state:n.province,street_1:n.addressLine1,street_2:n.addressLine2,zip:n.postCode})}},{key:\"mapToItems\",value:function(e){var t=e.cart;return(void 0===t?{items:[]}:t).items.map(function(e){return(0,i.omitNil)({code:e.id,variant_id:e.variantId,name:e.name,price:e.integerAmount,unit_price:e.integerUnitPrice,quantity:e.quantity,sku:e.sku})})}},{key:\"mapToOrderTotals\",value:function(e){var t=e.order,n=void 0===t?{}:t;return(0,i.omitNil)({grand_total:n.grandTotal?n.grandTotal.integerAmount:null,handling:n.handling?n.handling.integerAmount:null,shipping:n.shipping?n.shipping.integerAmount:null,subtotal:n.subtotal?n.subtotal.integerAmount:null,tax:n.taxTotal?n.taxTotal.integerAmount:null})}}])&&o(t.prototype,n),r&&o(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},2719(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916),r=c(n(1517)),o=c(n(3805)),a=c(n(3199)),s=c(n(2310));function c(e){return e&&e.__esModule?e:{default:e}}function d(e){return d=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},d(e)}function u(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,l(i.key),i)}}function l(e){var t=function(e){if(\"object\"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=d(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==d(t)?t:t+\"\"}t.default=function(){function e(t,n,i,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.customerMapper=t,this.orderMapper=n,this.paymentMapper=i,this.storeMapper=r}return t=e,c=[{key:\"create\",value:function(){return new e(r.default.create(),o.default.create(),a.default.create(),s.default.create())}}],(n=[{key:\"mapToPayload\",value:function(e){var t=e.order,n=void 0===t?{}:t,r=e.additionalAction;return(0,i.omitNil)({customer:this.customerMapper.mapToCustomer(e),notify_url:n.callbackUrl,order:this.orderMapper.mapToOrder(e),payment:this.paymentMapper.mapToPayment(e),store:this.storeMapper.mapToStore(e),additional_action:r})}},{key:\"mapToHeaders\",value:function(e){var t=e.authToken;return(0,i.omitNil)({Authorization:t})}}])&&u(t.prototype,n),c&&u(t,c),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,c}()},3199(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=a(n(4475)),r=n(5916),o=a(n(187));function a(e){return e&&e.__esModule?e:{default:e}}function s(e){return s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s(e)}function c(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,d(i.key),i)}}function d(e){var t=function(e){if(\"object\"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=s(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==s(t)?t:t+\"\"}t.default=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.paymentMethodIdMapper=t}return t=e,a=[{key:\"create\",value:function(){return new e(o.default.create())}}],(n=[{key:\"mapToPayment\",value:function(e){var t=e.order,n=void 0===t?{}:t,o=e.orderMeta,a=void 0===o?{}:o,s=e.payment,c=void 0===s?{}:s,d=e.paymentMethod,u=void 0===d?{}:d,l={device_info:c.deviceSessionId?c.deviceSessionId:null,device:a.deviceFingerprint?{fingerprint_id:a.deviceFingerprint}:null,gateway:this.paymentMethodIdMapper.mapToId(u),notify_url:n.callbackUrl,return_url:u.returnUrl||(n.payment?n.payment.returnUrl:null),vault_payment_instrument:c.instrumentId?null:c.shouldSaveInstrument,set_as_default_stored_instrument:c.instrumentId||c.shouldSaveInstrument?c.shouldSetAsDefaultInstrument:null},h=u.method;h&&(0,i.default)(l,{method:h});var p=c.nonce||u.nonce;return c.formattedPayload?(0,i.default)(l,c.formattedPayload):c.instrumentId?(0,i.default)(l,{bigpay_token:this.mapToBigPayToken(e)}):p?(0,i.default)(l,{credit_card_token:{token:p}}):c.cryptogramId?(0,i.default)(l,{credit_card_cryptogram:this.mapToCryptogram(e)}):(0,i.default)(l,{credit_card:this.mapToCreditCard(e)}),c.browser_info&&(0,i.default)(l,{browser_info:c.browser_info}),(0,r.omitNil)(l)}},{key:\"mapToCreditCard\",value:function(e){var t=e.payment,n=void 0===t?{}:t;return(0,r.omitNil)({account_name:n.ccName,month:n.ccExpiry?(0,r.toNumber)(n.ccExpiry.month):null,number:n.ccNumber,verification_value:n.ccCvv,year:n.ccExpiry?(0,r.toNumber)(n.ccExpiry.year):null,customer_code:n.ccCustomerCode,three_d_secure:n.threeDSecure,hosted_form_nonce:n.hostedFormNonce})}},{key:\"mapToBigPayToken\",value:function(e){var t=e.payment;return(0,r.omitNil)({credit_card_number_confirmation:t.ccNumber,token:t.instrumentId,verification_value:t.ccCvv,verification_nonce:t.nonce,three_d_secure:t.threeDSecure,hosted_form_nonce:t.hostedFormNonce,token_type:t.tokenType})}},{key:\"mapToCryptogram\",value:function(e){var t=e.payment;return(0,r.omitNil)({payment_cryptogram:t.cryptogramId,eci:t.eci,xid:t.transactionId,month:t.ccExpiry?(0,r.toNumber)(t.ccExpiry.month):null,number:t.ccNumber,year:t.ccExpiry?(0,r.toNumber)(t.ccExpiry.year):null,account_mask:t.accountMask})}}])&&c(t.prototype,n),a&&c(t,a),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,a}()},2310(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916);function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,a(i.key),i)}}function a(e){var t=function(e){if(\"object\"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==r(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,r=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToStore\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,i.omitNil)({hash:n.storeHash,id:n.storeId?(0,i.toString)(n.storeId):null,name:n.storeName})}}])&&o(t.prototype,n),r&&o(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},3538(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916);function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,a(i.key),i)}}function a(e){var t=function(e){if(\"object\"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==r(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,r=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToCart\",value:function(e){var t=e.cart,n=void 0===t?{}:t;return(0,i.omitNil)({currency_code:n.currency,items:this.mapToItems(e),totals:this.mapToOrderTotals(e)})}},{key:\"mapToItems\",value:function(e){var t=this,n=e.cart;return(void 0===n?{items:[]}:n).items.map(function(e){return(0,i.omitNil)({discount_amount:e.integerDiscount,name:e.name,price:e.integerAmount,unit_price:e.integerUnitPrice,quantity:e.quantity,sku:e.sku,tax_amount:e.integerTax,amount:e.integerAmountAfterDiscount,type:t.mapToType(e)})})}},{key:\"mapToOrderTotals\",value:function(e){var t=e.cart,n=void 0===t?{}:t;return(0,i.omitNil)({discount_total:n.discount?n.discount.integerAmount:null,grand_total:n.grandTotal?n.grandTotal.integerAmount:null,shipping_total:n.shipping?n.shipping.integerAmount:null,subtotal:n.subtotal?n.subtotal.integerAmount:null,surcharge_total:n.handling?n.handling.integerAmount:null,tax_total:n.taxTotal?n.taxTotal.integerAmount:null})}},{key:\"mapToType\",value:function(e){return{ItemPhysicalEntity:\"physical\",ItemDigitalEntity:\"digital\",ItemGiftCertificateEntity:\"gift_card\"}[e.type]}}])&&o(t.prototype,n),r&&o(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},3373(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916),r=c(n(3538)),o=c(n(2740)),a=c(n(1138)),s=c(n(5913));function c(e){return e&&e.__esModule?e:{default:e}}function d(e){return d=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},d(e)}function u(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,l(i.key),i)}}function l(e){var t=function(e){if(\"object\"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=d(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==d(t)?t:t+\"\"}t.default=function(){function e(t,n,i,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.cartMapper=t,this.gatewayMapper=n,this.quoteMapper=i,this.storeMapper=r}return t=e,c=[{key:\"create\",value:function(){return new e(r.default.create(),o.default.create(),a.default.create(),s.default.create())}}],(n=[{key:\"mapToClientToken\",value:function(e){return(0,i.omitNil)({cart:this.cartMapper.mapToCart(e),gateway:this.gatewayMapper.mapToGateway(e),quote:this.quoteMapper.mapToQuote(e),store:this.storeMapper.mapToStore(e)})}}])&&u(t.prototype,n),c&&u(t,c),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,c}()},2740(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i,r=n(5916),o=(i=n(187))&&i.__esModule?i:{default:i};function a(e){return a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},a(e)}function s(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,c(i.key),i)}}function c(e){var t=function(e){if(\"object\"!=a(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=a(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==a(t)?t:t+\"\"}t.default=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.paymentMethodIdMapper=t}return function(e,t,n){return t&&s(e.prototype,t),n&&s(e,n),Object.defineProperty(e,\"prototype\",{writable:!1}),e}(e,[{key:\"mapToGateway\",value:function(e){var t=e.paymentMethod,n=void 0===t?{}:t;return(0,r.omitNil)({name:this.paymentMethodIdMapper.mapToId(n)})}}],[{key:\"create\",value:function(){return new e(o.default.create())}}])}()},1138(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916);function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,a(i.key),i)}}function a(e){var t=function(e){if(\"object\"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==r(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,r=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToQuote\",value:function(e){return(0,i.omitNil)({billing_address:this.mapToAddress(e,\"billingAddress\"),shipping_address:this.mapToAddress(e,\"shippingAddress\")})}},{key:\"mapToAddress\",value:function(e,t){var n=e.customer,r=void 0===n?{}:n,o=e[t]||{};return(0,i.omitNil)({address_line_1:o.addressLine1,address_line_2:o.addressLine2,city:o.city,company:o.company,country_code:o.countryCode,email:r.email,first_name:o.firstName,last_name:o.lastName,phone:o.phone,postal_code:o.postCode,state:o.province})}}])&&o(t.prototype,n),r&&o(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},5913(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=n(5916);function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function o(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,a(i.key),i)}}function a(e){var t=function(e){if(\"object\"!=r(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==r(t)?t:t+\"\"}t.default=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}return t=e,r=[{key:\"create\",value:function(){return new e}}],(n=[{key:\"mapToStore\",value:function(e){return(0,i.omitNil)({locale:this.mapToLocale(e),store_identity:this.mapToIdentity(e),urls:this.mapToUrls(e)})}},{key:\"mapToLocale\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,i.omitNil)({country_code:n.countryCode,currency_code:n.currencyCode,language_code:n.storeLanguage})}},{key:\"mapToIdentity\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,i.omitNil)({id:n.storeId?(0,i.toNumber)(n.storeId):null,name:n.storeName})}},{key:\"mapToUrls\",value:function(e){var t=e.store,n=void 0===t?{}:t;return(0,i.omitNil)({cart:n.cartLink,checkout:n.checkoutLink,confirmation:n.orderConfirmationLink,home:n.shopPath})}}])&&o(t.prototype,n),r&&o(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},4351(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0;var i=s(n(7542)),r=n(9726),o=s(n(6258)),a=n(3152);function s(e){return e&&e.__esModule?e:{default:e}}function c(e){return c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c(e)}function d(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,u(i.key),i)}}function u(e){var t=function(e){if(\"object\"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,\"string\");if(\"object\"!=c(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==c(t)?t:t+\"\"}t.default=function(){function e(t,n){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.urlHelper=t,this.requestSender=n}return t=e,s=[{key:\"create\",value:function(t){return new e(o.default.create(t),i.default.create())}}],(n=[{key:\"loadInstruments\",value:function(e,t){var n=this.urlHelper.getInstrumentsUrl(e.storeId,e.customerId,e.currencyCode),i={headers:(0,a.mapToHeaders)(e)};this.requestSender.sendRequest(n,null,i,t)}},{key:\"loadInstrumentsWithAddress\",value:function(e,t){var n=this.urlHelper.getTrustedShippingAddressUrl(e.storeId,e.customerId,e.currencyCode),i=(0,a.mapToTrustedShippingAddressPayload)(e),o={method:r.POST,headers:(0,a.mapToHeaders)(e)};this.requestSender.postRequest(n,i,o,t)}},{key:\"deleteShopperInstrument\",value:function(e,t){var n=this.urlHelper.getInstrumentByIdUrl(e.storeId,e.customerId,e.instrumentId,e.currencyCode),i={method:r.DELETE,headers:(0,a.mapToHeaders)(e)};this.requestSender.sendRequest(n,null,i,t)}}])&&d(t.prototype,n),s&&d(t,s),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,s}()},6258(e,t){\"use strict\";function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,r(i.key),i)}}function r(e){var t=function(e){if(\"object\"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var i=t.call(e,\"string\");if(\"object\"!=n(i))return i;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==n(t)?t:t+\"\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=void 0,t.default=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.config=t}return t=e,r=[{key:\"create\",value:function(t){return new e(t)}}],(n=[{key:\"host\",get:function(){if(!this.config||!this.config.host)throw new Error(\"Host URL unavailable or not supplied.\");return this.config.host}},{key:\"getInstrumentsUrl\",value:function(e,t,n){return\"\".concat(this.host,\"/api/v3/stores/\").concat(e,\"/shoppers/\").concat(t,\"/instruments?currency_code=\").concat(n)}},{key:\"getTrustedShippingAddressUrl\",value:function(e,t,n){return\"\".concat(this.host,\"/api/v3/stores/\").concat(e,\"/shoppers/\").concat(t,\"/instruments/trusted_shipping_address?currency_code=\").concat(n)}},{key:\"getInstrumentByIdUrl\",value:function(e,t,n,i){return\"\".concat(this.host,\"/api/v2/stores/\").concat(e,\"/shoppers/\").concat(t,\"/instruments/\").concat(n,\"?currency_code=\").concat(i)}}])&&i(t.prototype,n),r&&i(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t;var t,n,r}()},3152(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.mapToHeaders=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).authToken;return(0,i.omitNil)({Authorization:e})},t.mapToInstrumentPayload=function(){var e,t,n,o,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=a.providerName,c=a.defaultInstrument,d=(0,i.omitNil)({name:s});return(0,i.omitNil)({provider:d,credit_card:(e=a,t=e.creditCard,n=void 0===t?{}:t,o=(0,i.omitNil)(n.threeDSecure),(0,i.omitNil)({cardholder_name:n.cardholderName,number:n.number,month:n.month,year:n.year,verification_code:n.verificationCode,issue_month:n.issueMonth,issue_year:n.issueYear,issue_number:n.issueNumber,track_data:n.trackData,is_manual_entry:n.isManualEntry,icc_data:n.iccData,fallback_reason:n.fallbackReason,is_contactless:n.isContactless,encrypted_pin_cryptogram:n.encryptedPinCryptogram,encrypted_pin_ksn:n.encryptedPinKsn,three_d_secure:o})),billing_address:r(a.billingAddress),default_instrument:c})},t.mapToTrustedShippingAddressPayload=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Array.isArray(e.shippingAddress)?(0,i.omitNil)({shipping_addresses:e.shippingAddress.map(function(e){return r(e)})}):(0,i.omitNil)({shipping_address:r(e.shippingAddress)})};var i=n(5916);function r(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=(e=n.provinceCode,t=n.province,(0,i.omitNil)({code:e,name:t}));return(0,i.omitNil)({address_line_1:n.addressLine1,address_line_2:n.addressLine2,city:n.city,company:n.company,country_code:n.countryCode,email:n.email,first_name:n.firstName,last_name:n.lastName,phone:n.phone,postal_code:n.postCode,state:r})}},1953(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(9440),r=n(540);t.default=function(e,t){var n=(t||{}).equalityCheck,o=void 0===n?r:n;return function(t,n){return Object.keys(e).reduce(function(r,a){var s,c=e[a],d=t?t[a]:void 0,u=c(d,n);return o(d,u)&&r?r:i.assign({},r,((s={})[a]=u,s))},t||{})}}},3050(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(1635),r=n(9440),o=n(540);t.default=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e,a={};\"object\"==typeof e[e.length-1]&&(n=e.slice(0,-1),a=i.__assign({},a,e[e.length-1]));var s=a.equalityCheck,c=void 0===s?o:s;return function(e,t){var i=r.flowRight(n.map(function(e){return r.curryRight(e,2)(t)}))(e);return c(e,i)?e:i}}},7963(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(1635),r=n(9440);t.default=function(e,t,n){if(\"string\"!=typeof e||\"\"===e)throw new Error(\"`type` must be a string\");return i.__assign({type:e},r.omitBy({payload:t,meta:n},function(e){return void 0===e}))}},7821(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(1953),r=n(76);t.default=function(e,t,n){return\"function\"==typeof e?new r.default(e,t,n):new r.default(i.default(e,{equalityCheck:n&&n.equalityCheck}),t,n)}},6142(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(1635),r=n(7963);t.default=function(e,t,n){return i.__assign({},r.default(e,t,n),{error:!0})}},76(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(1635),r=n(9440),o=n(7554),a=n(473),s=n(540),c=n(8820),d=n(6019),u=n(1429),l=n(1058),h=function(){function e(e,t,n){void 0===t&&(t={});var r=this;this._reducer=e,this._options=i.__assign({actionTransformer:u.default,equalityCheck:s,shouldWarnMutation:!0,stateTransformer:l.default},n),this._state$=new o.BehaviorSubject(this._options.stateTransformer(t)),this._notification$=new o.Subject,this._dispatchers={},this._dispatchQueue$=new o.Subject,this._errors={},this._dispatchQueue$.pipe(a.mergeMap(function(e){return e.pipe(a.concatMap(function(e){return e}))}),a.filter(function(e){return!!e.type}),a.scan(function(e,t){return r._transformStates(e,t)},{state:t,transformedState:this._state$.getValue()}),a.distinctUntilChanged(function(e,t){var n=e.state,i=t.state;return r._options.equalityCheck(n,i)}),a.map(function(e){return e.transformedState})).subscribe(this._state$),this.dispatch({type:\"INIT\"})}return e.prototype.dispatch=function(e,t){return d.default(e)?this._dispatchObservableAction(e,t):\"function\"==typeof e?this._dispatchThunkAction(e,t):this._dispatchAction(e)},e.prototype.getState=function(){return this._state$.getValue()},e.prototype.notifyState=function(){this._notification$.next(this.getState())},e.prototype.subscribe=function(e){for(var t=this,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];var r=\"object\"==typeof n[0]?n[0]:void 0,o=r?r.filters||[]:n,s=this._state$;o.length>0&&(s=s.pipe(a.distinctUntilChanged(function(e,n){return o.every(function(i){return t._options.equalityCheck(i(e),i(n))})}))),r&&!1===r.initial&&(s=s.pipe(a.skip(1)));var c=[s.subscribe(e),this._notification$.subscribe(e)];return function(){return c.forEach(function(e){return e.unsubscribe()})}},e.prototype._transformStates=function(e,t){try{var n=!1===this._options.shouldWarnMutation?this._reducer(e.state,t):c.default(this._reducer(e.state,t),{equalityCheck:this._options.equalityCheck,previousValue:e.state});return{state:n,transformedState:this._options.stateTransformer(n)}}catch(n){return this._getDispatchError(t.meta&&t.meta.queueId).next(n),{state:e.state,transformedState:e.transformedState}}},e.prototype._dispatchAction=function(e){return this._dispatchObservableAction(e.error?o.throwError(e):o.of(e))},e.prototype._dispatchObservableAction=function(e,t){var n=this;return void 0===t&&(t={}),new Promise(function(i,s){var c=n._getDispatchError(t.queueId),d=n._options.actionTransformer(o.from(e).pipe(a.map(function(e){return t.queueId?r.merge({},e,{meta:{queueId:t.queueId}}):e})));n._getDispatcher(t.queueId).next(o.from(d).pipe(a.map(function(e,t){return 0===t&&c.pipe(a.first()).subscribe(s),e.error&&s(e.payload),e}),a.catchError(function(e){return s(e instanceof Error?e:e.payload),o.of(e)}),a.tap({complete:function(){i(n.getState())}})))})},e.prototype._dispatchThunkAction=function(e,t){var n=this;return void 0===t&&(t={}),this._dispatchObservableAction(o.defer(function(){return e(n)}),t)},e.prototype._getDispatcher=function(e){return void 0===e&&(e=\"default\"),this._dispatchers[e]||(this._dispatchers[e]=new o.Subject,this._dispatchQueue$.next(this._dispatchers[e])),this._dispatchers[e]},e.prototype._getDispatchError=function(e){return void 0===e&&(e=\"default\"),this._errors[e]||(this._errors[e]=new o.Subject),this._errors[e]},e}();t.default=h},8820(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(9440),r=n(540);t.default=function e(t,n){try{var o=n||{},a=o.equalityCheck,s=void 0===a?r:a,c=o.previousValue,d=void 0===c?null:c;return s(t,d)&&Object.isFrozen(d)?d:Object.isFrozen(t)||!Array.isArray(t)&&!i.isPlainObject(t)?t:Array.isArray(t)?Object.freeze(t.map(function(t,n){return e(t,{equalityCheck:s,previousValue:Array.isArray(d)?d[n]:void 0})})):Object.freeze(Object.getOwnPropertyNames(t).reduce(function(n,i){return n[i]=e(t[i],{equalityCheck:s,previousValue:d&&d.hasOwnProperty(i)?d[i]:void 0}),n},{}))}catch(e){if(e instanceof TypeError)return t;throw e}}},9526(e,t,n){\"use strict\";n(76).default;var i=n(1953);t.HY=i.default;var r=n(3050);t.om=r.default;var o=n(7963);t.VP=o.default;var a=n(7821);t.iN=a.default;var s=n(6142);t.fQ=s.default;var c=n(8820);t.ol=c.default},6019(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return\"function\"==typeof e.subscribe||\"function\"==typeof e.then}},1429(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return e}},1058(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return e}},9165(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){var t=new i.default;return new r.default(t,e)};var i=n(9828),r=n(5470)},9828(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.build=function(e,t,n){var i=this,r=document.createElement(\"form\");return r.style.display=\"none\",r.setAttribute(\"action\",e),r.setAttribute(\"method\",\"POST\"),r.setAttribute(\"target\",n||\"_top\"),Object.keys(t).forEach(function(e){var n=t[e];r.appendChild(i._createInput(n,e))}),r},e.prototype._createInput=function(e,t){var n=document.createElement(\"input\");return n.setAttribute(\"name\",t),n.setAttribute(\"type\",\"hidden\"),n.setAttribute(\"value\",e),n},e}();t.default=n},5470(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(9783),r=function(){function e(e,t){this._formBuilder=e,this._options=t}return e.prototype.postForm=function(e,t,n,i){var r=this._formBuilder.build(this._prependHost(e),t,i);window.addEventListener(\"unload\",function e(){window.removeEventListener(\"unload\",e),n&&n()}),document.body.appendChild(r),r.submit()},e.prototype._prependHost=function(e){return this._options&&this._options.host&&!(0,i.isAbsoluteUrl)(e)?(0,i.joinPaths)(this._options.host,e):e},e}();t.default=r},8686(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.FormPoster=t.createFormPoster=void 0;var i=n(9165);Object.defineProperty(t,\"createFormPoster\",{enumerable:!0,get:function(){return i.default}});var r=n(5470);Object.defineProperty(t,\"FormPoster\",{enumerable:!0,get:function(){return r.default}})},9783(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isAbsoluteUrl=function(e){return/^https?:\\/\\//.test(e)},t.joinPaths=function(e,t){return\"\".concat((n=e,n.replace(/\\/$/,\"\")),\"/\").concat(function(e){return e.replace(/^\\//,\"\")}(t));var n}},2356(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isTerminalCacheKeyMap=function(e){return e.hasOwnProperty(\"cacheKey\")},t.isRootCacheKeyMap=function(e){return e.hasOwnProperty(\"parentMap\")}},3909(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(1635),r=n(9440),o=i.__importDefault(n(540)),a=n(2356),s=function(){function e(e){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=i.__assign({isEqual:o.default,maxSize:0,onExpire:r.noop},e)}return e.prototype.getKey=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=this._resolveMap.apply(this,e),i=n.index,r=n.parentMap,o=n.map;return o&&o.cacheKey?o.usedCount++:o=this._generateMap(r,e.slice(i)),this._removeLeastUsedMap(o),o.cacheKey},e.prototype.getUsedCount=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=this._resolveMap.apply(this,e).map;return n?n.usedCount:0},e.prototype._resolveMap=function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var i=0,r=this._map;r.maps.length;){for(var o=!1,s=0;s<r.maps.length;s++){var c=r.maps[s];if(this._options.isEqual(c.value,t[i])){if((e=r.maps).unshift.apply(e,r.maps.splice(s,1)),(0===t.length||i===t.length-1)&&(0,a.isTerminalCacheKeyMap)(c))return{index:i,map:c,parentMap:r};o=!0,r=c,i++;break}}if(!o)break}return{index:i,parentMap:r}},e.prototype._generateMap=function(e,t){var n,i=0,r=e;do{n={maps:[],parentMap:r,usedCount:1,value:t[i]},r.maps.unshift(n),r=n,i++}while(i<t.length);var o=n;return o.cacheKey=\"\".concat(++this._lastId),o},e.prototype._removeLeastUsedMap=function(e){if(this._options.maxSize){var t=this._usedMaps.indexOf(e);if(this._usedMaps.splice(-1===t?0:t,-1===t?0:1,e),!(this._usedMaps.length<=this._options.maxSize)){var n=this._usedMaps.pop();n&&(this._removeMap(n),this._options.onExpire(n.cacheKey))}}},e.prototype._removeMap=function(e){e.parentMap&&(e.parentMap.maps.splice(e.parentMap.maps.indexOf(e),1),(0,a.isRootCacheKeyMap)(e.parentMap)||this._removeMap(e.parentMap))},e}();t.default=s},4218(e,t,n){\"use strict\";t.B4=t.Bj=void 0;var i=n(1635),r=n(8158);Object.defineProperty(t,\"Bj\",{enumerable:!0,get:function(){return i.__importDefault(r).default}}),Object.defineProperty(t,\"B4\",{enumerable:!0,get:function(){return r.memoizeOne}})},8158(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=s,t.memoizeOne=function(e,t){return s(e,i.__assign(i.__assign({},t),{maxSize:1}))};var i=n(1635),r=i.__importDefault(n(9655)),o=i.__importDefault(n(540)),a=i.__importDefault(n(3909));function s(e,t){var n=i.__assign({maxSize:0,isEqual:o.default},t),s=n.maxSize,c=n.isEqual,d=new Map,u=new a.default({isEqual:c,maxSize:s,onExpire:function(e){return d.delete(e)}}),l=(0,r.default)(e,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return u.getKey.apply(u,e)});return l.cache=d,l}},4325(e,t,n){\"use strict\";n.d(t,{g:()=>r});var i=n(5889),r=function(){function e(){this._cache={}}return e.prototype.read=function(e,t){var n=this.getKey(e,t.params);return this._cache[n]||null},e.prototype.write=function(e,t,n){var i=this.getKey(e,t.params);this._cache[i]=n},e.prototype.getKey=function(e,t){return void 0===t&&(t={}),0===Object.keys(t).length?e:\"\".concat(e,\"?\").concat(i.stringify(t))},e}()},321(e,t,n){\"use strict\";n.d(t,{A:()=>s});var i=n(168),r=n(1675),o=n(5861),a=n(4670);function s(e){return new a.A(new o.A,new r.A,i,e)}},6889(e,t,n){\"use strict\";n.d(t,{A:()=>r});var i=n(2024);function r(e){return new i.A(e)}},4043(e,t,n){\"use strict\";n.r(t),n.d(t,{RequestSender:()=>o.A,Timeout:()=>a.A,createRequestSender:()=>i.A,createTimeout:()=>r.A});var i=n(321),r=n(6889),o=n(4670),a=n(2024)},4843(e,t,n){\"use strict\";function i(e){return!!e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof e.then}n.d(t,{A:()=>i})},1675(e,t,n){\"use strict\";n.d(t,{A:()=>s});var i=n(1635),r=n(710),o=/application\\/(\\w+\\+)?json/,a=/application\\/x-www-form-urlencoded/;const s=function(){function e(){}return e.prototype.toRequestBody=function(e){var t=e.headers?this._getHeader(e.headers,\"Content-Type\"):\"\";if(e.body){if(o.test(t))return JSON.stringify(e.body);if(a.test(t))return(0,r.A)(e.body)}return e.body},e.prototype.toResponse=function(e){var t=this._parseResponseHeaders(e.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in e?e.response:e.responseText,t),headers:t,status:e.status,statusText:e.statusText}},e.prototype._parseResponseBody=function(e,t){var n=this._getHeader(t,\"Content-Type\");return e&&o.test(n)?JSON.parse(e):e},e.prototype._parseResponseHeaders=function(e){return(e?e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(e,t){var n,r=t.split(\":\"),o=(r.shift()||\"\").trim();return o?(0,i.__assign)((0,i.__assign)({},e),((n={})[o.toLowerCase()]=r.join(\":\").trim(),n)):e},{})},e.prototype._getHeader=function(e,t){return e&&t&&(e[t]||e[t.toLowerCase()])||\"\"},e}()},5861(e,t,n){\"use strict\";n.d(t,{A:()=>r});var i=n(5889);const r=function(){function e(){}return e.prototype.createRequest=function(e,t){var n=new XMLHttpRequest;return this._configureRequest(n,e,t),n},e.prototype._configureRequest=function(e,t,n){void 0===n&&(n={}),e.open(n.method||\"GET\",this._formatUrl(t,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(e,n.headers),\"boolean\"==typeof n.credentials&&(e.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(e.timeout=n.timeout)},e.prototype._configureRequestHeaders=function(e,t){Object.keys(t).filter(function(e){return null!==t[e]}).forEach(function(n){e.setRequestHeader(n,t[n])})},e.prototype._formatUrl=function(e,t,n){return void 0===n&&(n=!0),t&&0!==Object.keys(t).length?\"\".concat(e,\"?\").concat(i.stringify(t,{encode:n})):e},e}()},4670(e,t,n){\"use strict\";n.d(t,{A:()=>d});var i=n(1635),r=n(35),o=n.n(r),a=n(4325),s=n(4843),c=n(2024);const d=function(){function e(e,t,n,i){void 0===i&&(i={}),this._requestFactory=e,this._payloadTransformer=t,this._cookie=n,this._options=i,this._cache=this._options.cache||new a.g}return e.prototype.sendRequest=function(e,t){var n=this,i=this._mergeDefaultOptions(e,t),r=this._getCachedRequest(e,i);if(r)return Promise.resolve(r);var o=this._requestFactory.createRequest(this._prependHost(e),i);return new Promise(function(t,r){var a=function(){var a=n._payloadTransformer.toResponse(o);a.status>=200&&a.status<300?(n._cacheRequest(e,i,a),t(a)):r(a)};o.onload=a,o.onerror=a,o.onabort=a,o.ontimeout=a,i.timeout instanceof c.A&&(i.timeout.onComplete(function(){return o.abort()}),i.timeout.start()),(0,s.A)(i.timeout)&&i.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(i))})},e.prototype.get=function(e,t){return this.sendRequest(e,(0,i.__assign)((0,i.__assign)({},t),{method:\"GET\"}))},e.prototype.post=function(e,t){return this.sendRequest(e,(0,i.__assign)((0,i.__assign)({},t),{method:\"POST\"}))},e.prototype.put=function(e,t){return this.sendRequest(e,(0,i.__assign)((0,i.__assign)({},t),{method:\"PUT\"}))},e.prototype.patch=function(e,t){return this.sendRequest(e,(0,i.__assign)((0,i.__assign)({},t),{method:\"PATCH\"}))},e.prototype.delete=function(e,t){return this.sendRequest(e,(0,i.__assign)((0,i.__assign)({},t),{method:\"DELETE\"}))},e.prototype._mergeDefaultOptions=function(e,t){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},i=this._cookie.get(\"XSRF-TOKEN\");return i&&n.headers&&!this._isAssetRequest(e,t)&&this._isLocalRequest(e)&&(n.headers[\"X-XSRF-TOKEN\"]=i),t&&t.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,t)},e.prototype._prependHost=function(e){return!this._options.host||/^https?:\\/\\//.test(e)?e:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(e.replace(/^\\//,\"\"))},e.prototype._shouldCacheRequest=function(e){return\"GET\"===(e.method||\"GET\").toUpperCase()&&Boolean(e.cache)},e.prototype._getCachedRequest=function(e,t){return this._shouldCacheRequest(t)?this._cache.read(e,t):null},e.prototype._cacheRequest=function(e,t,n){this._shouldCacheRequest(t)&&this._cache.write(e,t,n)},e.prototype._isAssetRequest=function(e,t){return(!t||!t.method||\"GET\"===t.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(e.split(\"?\")[0])},e.prototype._isLocalRequest=function(e){return!!e.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!e.match(new RegExp(\"^(https?:)?//\"))},e}()},2024(e,t,n){\"use strict\";n.d(t,{A:()=>i});const i=function(){function e(e){var t=this;this._delay=e,this._promise=new Promise(function(e){t._resolve=e})}return e.prototype.onComplete=function(e){this._promise.then(e)},e.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},e.prototype.start=function(){var e=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return e.complete()},this._delay))},e}()},710(e,t,n){\"use strict\";function i(e){return\"object\"!=typeof e||null===e?e:Object.keys(e).filter(function(t){return void 0!==e[t]}).map(function(t){var n=e[t];return\"string\"==typeof n?\"\".concat(t,\"=\").concat(encodeURIComponent(n)):\"\".concat(t,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(t,{A:()=>i})},5889(e,t,n){\"use strict\";const i=n(803),r=n(1915),o=n(1657),a=n(3814);function s(e){if(\"string\"!=typeof e||1!==e.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(e,t){return t.encode?t.strict?i(e):encodeURIComponent(e):e}function d(e,t){return t.decode?r(e):e}function u(e){return Array.isArray(e)?e.sort():\"object\"==typeof e?u(Object.keys(e)).sort((e,t)=>Number(e)-Number(t)).map(t=>e[t]):e}function l(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function h(e){const t=(e=l(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function p(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&\"string\"==typeof e&&\"\"!==e.trim()?e=Number(e):!t.parseBooleans||null===e||\"true\"!==e.toLowerCase()&&\"false\"!==e.toLowerCase()||(e=\"true\"===e.toLowerCase()),e}function m(e,t){s((t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,n,i)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===i[e]&&(i[e]={}),i[e][t[1]]=n):i[e]=n};case\"bracket\":return(e,n,i)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==i[e]?i[e]=[].concat(i[e],n):i[e]=[n]:i[e]=n};case\"comma\":case\"separator\":return(t,n,i)=>{const r=\"string\"==typeof n&&n.includes(e.arrayFormatSeparator),o=\"string\"==typeof n&&!r&&d(n,e).includes(e.arrayFormatSeparator);n=o?d(n,e):n;const a=r||o?n.split(e.arrayFormatSeparator).map(t=>d(t,e)):null===n?n:d(n,e);i[t]=a};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),i=Object.create(null);if(\"string\"!=typeof e)return i;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return i;for(const r of e.split(\"&\")){if(\"\"===r)continue;let[e,a]=o(t.decode?r.replace(/\\+/g,\" \"):r,\"=\");a=void 0===a?null:[\"comma\",\"separator\"].includes(t.arrayFormat)?a:d(a,t),n(d(e,t),a,i)}for(const e of Object.keys(i)){const n=i[e];if(\"object\"==typeof n&&null!==n)for(const e of Object.keys(n))n[e]=p(n[e],t);else i[e]=p(n,t)}return!1===t.sort?i:(!0===t.sort?Object.keys(i).sort():Object.keys(i).sort(t.sort)).reduce((e,t)=>{const n=i[t];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?e[t]=u(n):e[t]=n,e},Object.create(null))}t.extract=h,t.parse=m,t.stringify=(e,t)=>{if(!e)return\"\";s((t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},t)).arrayFormatSeparator);const n=n=>t.skipNull&&null==e[n]||t.skipEmptyString&&\"\"===e[n],i=function(e){switch(e.arrayFormat){case\"index\":return t=>(n,i)=>{const r=n.length;return void 0===i||e.skipNull&&null===i||e.skipEmptyString&&\"\"===i?n:null===i?[...n,[c(t,e),\"[\",r,\"]\"].join(\"\")]:[...n,[c(t,e),\"[\",c(r,e),\"]=\",c(i,e)].join(\"\")]};case\"bracket\":return t=>(n,i)=>void 0===i||e.skipNull&&null===i||e.skipEmptyString&&\"\"===i?n:null===i?[...n,[c(t,e),\"[]\"].join(\"\")]:[...n,[c(t,e),\"[]=\",c(i,e)].join(\"\")];case\"comma\":case\"separator\":return t=>(n,i)=>null==i||0===i.length?n:0===n.length?[[c(t,e),\"=\",c(i,e)].join(\"\")]:[[n,c(i,e)].join(e.arrayFormatSeparator)];default:return t=>(n,i)=>void 0===i||e.skipNull&&null===i||e.skipEmptyString&&\"\"===i?n:null===i?[...n,c(t,e)]:[...n,[c(t,e),\"=\",c(i,e)].join(\"\")]}}(t),r={};for(const t of Object.keys(e))n(t)||(r[t]=e[t]);const o=Object.keys(r);return!1!==t.sort&&o.sort(t.sort),o.map(n=>{const r=e[n];return void 0===r?\"\":null===r?c(n,t):Array.isArray(r)?r.reduce(i(n),[]).join(\"&\"):c(n,t)+\"=\"+c(r,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,i]=o(e,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:m(h(e),t)},t&&t.parseFragmentIdentifier&&i?{fragmentIdentifier:d(i,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0},n);const i=l(e.url).split(\"?\")[0]||\"\",r=t.extract(e.url),o=t.parse(r,{sort:!1}),a=Object.assign(o,e.query);let s=t.stringify(a,n);s&&(s=`?${s}`);let d=function(e){let t=\"\";const n=e.indexOf(\"#\");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(d=`#${c(e.fragmentIdentifier,n)}`),`${i}${s}${d}`},t.pick=(e,n,i)=>{i=Object.assign({parseFragmentIdentifier:!0},i);const{url:r,query:o,fragmentIdentifier:s}=t.parseUrl(e,i);return t.stringifyUrl({url:r,query:a(o,n),fragmentIdentifier:s},i)},t.exclude=(e,n,i)=>{const r=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,r,i)}},5477(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.canSupportRel=function(e){var t=document.createElement(\"link\");return!!(t.relList&&t.relList.supports&&t.relList.supports(e))},e}();t.default=n},471(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new o.default(new r.default,(0,i.createRequestSender)())};var i=n(4043),r=n(5477),o=n(4886)},9722(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new o.default(new r.default,(0,i.createRequestSender)())};var i=n(4043),r=n(5477),o=n(7995)},5895(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return i||(i=(0,r.default)()),i};var i,r=n(471)},282(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return i||(i=(0,r.default)()),i};var i,r=n(9722)},315(e,t,n){\"use strict\";t._U=t.vQ=t.Hb=t.B2=void 0;var i=n(4886);Object.defineProperty(t,\"B2\",{enumerable:!0,get:function(){return i.default}});var r=n(471);Object.defineProperty(t,\"Hb\",{enumerable:!0,get:function(){return r.default}});var o=n(5895);Object.defineProperty(t,\"vQ\",{enumerable:!0,get:function(){return o.default}});n(7995),n(9722);var a=n(282);Object.defineProperty(t,\"_U\",{enumerable:!0,get:function(){return a.default}})},4886(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._scripts={},this._preloadedScripts={}}return e.prototype.loadScript=function(e,t){var n=this;return this._scripts[e]||(this._scripts[e]=new Promise(function(i,r){var o=document.createElement(\"script\"),a=t||{},s=a.async,c=void 0!==s&&s,d=a.attributes,u=void 0===d?{}:d;Object.keys(u).forEach(function(e){o.setAttribute(e,u[e])}),o.onload=function(){return i()},o.onreadystatechange=function(){return i()},o.onerror=function(t){delete n._scripts[e],r(t)},o.async=c,o.src=e,document.body.appendChild(o)})),this._scripts[e]},e.prototype.loadScripts=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.loadScript(e,t)})).then(function(){})},e.prototype.preloadScript=function(e,t){var n=this;return this._preloadedScripts[e]||(this._preloadedScripts[e]=new Promise(function(i,r){var o=(t||{}).prefetch,a=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var s=document.createElement(\"link\");s.as=\"script\",s.rel=a,s.href=e,s.onload=function(){i()},s.onerror=function(){delete n._preloadedScripts[e],r()},document.head.appendChild(s)}else n._requestSender.get(e,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return i()}).catch(r)})),this._preloadedScripts[e]},e.prototype.preloadScripts=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.preloadScript(e,t)})).then(function(){})},e}();t.default=n},7995(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._stylesheets={},this._preloadedStylesheets={}}return e.prototype.loadStylesheet=function(e,t){var n=this;return this._stylesheets[e]||(this._stylesheets[e]=new Promise(function(i,r){var o=document.createElement(\"link\"),a=t||{},s=a.prepend,c=void 0!==s&&s,d=a.attributes,u=void 0===d?{}:d;Object.keys(u).forEach(function(e){o.setAttribute(e,u[e])}),o.onload=function(){return i()},o.onerror=function(t){delete n._stylesheets[e],r(t)},o.rel=\"stylesheet\",o.href=e,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[e]},e.prototype.loadStylesheets=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.loadStylesheet(e,t)})).then(function(){})},e.prototype.preloadStylesheet=function(e,t){var n=this;return this._preloadedStylesheets[e]||(this._preloadedStylesheets[e]=new Promise(function(i,r){var o=(t||{}).prefetch,a=void 0!==o&&o,s=a?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(s)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=a?\"prefetch\":\"preload\",c.href=e,c.onload=function(){i()},c.onerror=function(t){delete n._preloadedStylesheets[e],r(t)},document.head.appendChild(c)}else n._requestSender.get(e,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return i()}).catch(r)})),this._preloadedStylesheets[e]},e.prototype.preloadStylesheets=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.preloadStylesheet(e,t)})).then(function(){})},e}();t.default=n},6472(e,t,n){\"use strict\";t.Jt=void 0,n(8914),n(9690),n(3255),n(523),n(7571),n(2100),n(3302),n(1045),n(5160),n(9356),n(9225),n(72),n(236),n(3069),n(441),n(7520),n(3686),n(648),n(1439),n(4651),n(9014),n(3761),n(9060),n(5886);var i=n(9262);t.Jt=i,n(8990)},5886(e,t,n){\"use strict\";var i=n(8914),r=n(9690),o=n(72);e.exports=function(){return i()||r()||o()}},8914(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/Android/i.test(e)}},9690(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/CrOS/i.test(e)}},3255(e,t,n){\"use strict\";var i=n(5160),r=n(3761),o=n(523),a=n(9014),s=n(9060);e.exports=function(e){return!(-1===(e=e||window.navigator.userAgent).indexOf(\"Chrome\")&&-1===e.indexOf(\"CriOS\")||i(e)||r(e)||o(e)||a(e)||s(e))}},523(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"DuckDuckGo/\")}},5160(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"Edge/\")||-1!==e.indexOf(\"Edg/\")}},9356(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/Firefox/i.test(e)}},7571(e,t,n){\"use strict\";var i=n(1045);e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"MSIE\")||i(e)}},3302(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"MSIE 10\")}},1045(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"Trident/7\")}},2100(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"MSIE 9\")}},236(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/FxiOS/i.test(e)}},3069(e,t,n){\"use strict\";var i=n(72);e.exports=function(e){return e=e||window.navigator.userAgent,i(e)&&function(e){return/\\bGSA\\b/.test(e)}(e)}},441(e,t,n){\"use strict\";var i=n(72),r=n(236),o=/webkit/i;e.exports=function(e){return e=e||window.navigator.userAgent,i(e)&&function(e){return o.test(e)}(e)&&!function(e){return e.indexOf(\"CriOS\")>-1}(e)&&!r(e)&&!function(e){return e.indexOf(\"FBAN\")>-1}(e)}},7520(e,t,n){\"use strict\";var i=n(3686);e.exports=function(e,t){return t=void 0!==t?t:window.statusbar.visible,i(e)&&!t}},3686(e,t,n){\"use strict\";var i=n(72),r=n(3069);e.exports=function(e){return e=e||window.navigator.userAgent,!!i(e)&&(!!r(e)||/.+AppleWebKit(?!.*Safari)/i.test(e))}},648(e,t,n){\"use strict\";var i=n(3686);e.exports=function(e,t){return t=void 0!==t?t:window.statusbar.visible,i(e)&&t}},72(e,t,n){\"use strict\";var i=n(1439);e.exports=function(e,t,n){void 0===t&&(t=!0),e=e||window.navigator.userAgent;var r=/iPhone|iPod|iPad/i.test(e);return t?r||i(e,n):r}},1439(e){\"use strict\";e.exports=function(e,t){return e=e||window.navigator.userAgent,t=t||window.document,/Mac|iPad/i.test(e)&&\"ontouchend\"in t}},4651(e,t,n){\"use strict\";var i=n(236),r=n(9356);e.exports=function(e){return e=e||window.navigator.userAgent,i(e)||/iPhone|iPod|iPad|Mobile|Tablet/i.test(e)&&r(e)}},9014(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"OPR/\")||-1!==e.indexOf(\"Opera/\")||-1!==e.indexOf(\"OPT/\")}},9225(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/^Mozilla\\/5\\.0.*Safari\\//.test(e)&&!/(iPhone|iPad|iPod|Android|SM-)/i.test(e)&&!/Chrome|CriOS|FxiOS|OPiOS|mercury/i.test(e)}},3761(e){\"use strict\";e.exports=function(e){return e=e||window.navigator.userAgent,/SamsungBrowser/i.test(e)}},9060(e){\"use strict\";e.exports=function(e){return-1!==(e=e||window.navigator.userAgent).indexOf(\"Silk/\")}},8990(e,t,n){\"use strict\";var i=n(3255);e.exports=function(e){return e=e||window.navigator.userAgent,!!window.PaymentRequest&&(!i(e)||function(e){var t=e.match(/Chrome\\/(\\d+)\\./);return!!t&&parseInt(t[1],10)>=61}(e))}},9262(e,t,n){\"use strict\";var i=n(8914),r=n(236),o=n(3686),a=n(3255),s=n(3761),c=n(523);function d(e){return(e=e||window.navigator.userAgent).indexOf(\"Opera Mini\")>-1}e.exports=function(e){return e=e||window.navigator.userAgent,!(o(e)||r(e)||function(e){return e=e||window.navigator.userAgent,!!i(e)&&/Version\\/[\\d.]+/i.test(e)&&!d(e)&&!c(e)}(e)||d(e)||function(e){var t=(e=e||window.navigator.userAgent).match(/CriOS\\/(\\d+)\\./);return!!t&&parseInt(t[1],10)<48}(e)||function(e){return!a(e)&&!s(e)&&/samsung/i.test(e)}(e))}},2437(e,t,n){\"use strict\";e.exports={number:n(36),expirationDate:n(1644),expirationMonth:n(188),expirationYear:n(7209),cvv:n(3221),postalCode:n(583),creditCardType:n(2921)}},36(e,t,n){\"use strict\";var i=n(1653),r=n(2921);function o(e,t,n){return{card:e,isPotentiallyValid:t,isValid:n}}e.exports=function(e,t){var n,a,s,c,d;if(t=t||{},\"number\"==typeof e&&(e=String(e)),\"string\"!=typeof e)return o(null,!1,!1);if(e=e.replace(/\\-|\\s/g,\"\"),!/^\\d*$/.test(e))return o(null,!1,!1);if(0===(n=r(e)).length)return o(null,!1,!1);if(1!==n.length)return o(null,!0,!1);if(a=n[0],t.maxLength&&e.length>t.maxLength)return o(a,!1,!1);for(s=a.type===r.types.UNIONPAY&&!0!==t.luhnValidateUnionPay||i(e),d=Math.max.apply(null,a.lengths),t.maxLength&&(d=Math.min(t.maxLength,d)),c=0;c<a.lengths.length;c++)if(a.lengths[c]===e.length)return o(a,e.length<d||s,s);return o(a,e.length<d,!1)}},3221(e){\"use strict\";function t(e,t){return{isValid:e,isPotentiallyValid:t}}e.exports=function(e,n){return n=(n=n||3)instanceof Array?n:[n],\"string\"!=typeof e?t(!1,!1):/^\\d*$/.test(e)?function(e,t){for(var n=0;n<e.length;n++)if(t===e[n])return!0;return!1}(n,e.length)?t(!0,!0):e.length<Math.min.apply(null,n)?t(!1,!0):e.length>function(e){for(var t=3,n=0;n<e.length;n++)t=e[n]>t?e[n]:t;return t}(n)?t(!1,!1):t(!0,!0):t(!1,!1)}},1644(e,t,n){\"use strict\";var i=n(9376),r=n(188),o=n(7209);function a(e,t,n,i){return{isValid:e,isPotentiallyValid:t,month:n,year:i}}e.exports=function(e,t){var n,s,c,d;if(\"string\"==typeof e)e=e.replace(/^(\\d\\d) (\\d\\d(\\d\\d)?)$/,\"$1/$2\"),n=i(e);else{if(null===e||\"object\"!=typeof e)return a(!1,!1,null,null);n={month:String(e.month),year:String(e.year)}}if(s=r(n.month),c=o(n.year,t),s.isValid){if(c.isCurrentYear)return a(d=s.isValidForThisYear,d,n.month,n.year);if(c.isValid)return a(!0,!0,n.month,n.year)}return s.isPotentiallyValid&&c.isPotentiallyValid?a(!1,!0,null,null):a(!1,!1,null,null)}},188(e){\"use strict\";function t(e,t,n){return{isValid:e,isPotentiallyValid:t,isValidForThisYear:n||!1}}e.exports=function(e){var n,i,r=(new Date).getMonth()+1;return\"string\"!=typeof e?t(!1,!1):\"\"===e.replace(/\\s/g,\"\")||\"0\"===e?t(!1,!0):/^\\d*$/.test(e)?(n=parseInt(e,10),isNaN(e)?t(!1,!1):t(i=n>0&&n<13,i,i&&n>=r)):t(!1,!1)}},7209(e){\"use strict\";function t(e,t,n){return{isValid:e,isPotentiallyValid:t,isCurrentYear:n||!1}}e.exports=function(e,n){var i,r,o,a,s;return n=n||19,\"string\"!=typeof e?t(!1,!1):\"\"===e.replace(/\\s/g,\"\")?t(!1,!0):/^\\d*$/.test(e)?(r=e.length)<2?t(!1,!0):(i=(new Date).getFullYear(),3===r?t(!1,e.slice(0,2)===String(i).slice(0,2)):r>4?t(!1,!1):(e=parseInt(e,10),o=Number(String(i).substr(2,2)),2===r?(s=o===e,a=e>=o&&e<=o+n):4===r&&(s=i===e,a=e>=i&&e<=i+n),t(a,a,s))):t(!1,!1)}},2278(e){\"use strict\";e.exports=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)}},1653(e){\"use strict\";e.exports=function(e){for(var t,n=0,i=!1,r=e.length-1;r>=0;)t=parseInt(e.charAt(r),10),i&&(t*=2)>9&&(t=t%10+1),i=!i,n+=t,r--;return n%10==0}},9376(e,t,n){\"use strict\";var i=n(7209),r=n(2278);e.exports=function(e){var t,n,o,a,s;return/^\\d{4}-\\d{1,2}$/.test(e)?e=e.split(\"-\").reverse():/\\//.test(e)?e=e.split(/\\s*\\/\\s*/g):/\\s/.test(e)&&(e=e.split(/ +/g)),r(e)?{month:e[0]||\"\",year:e.slice(1).join()}:(o=e,n=0===(s=Number(o[0]))?2:s>1||1===s&&Number(o[1])>2?1:1===s?(a=o.substr(1),i(a).isPotentiallyValid?1:2):5===o.length?1:o.length>5?2:1,{month:t=e.substr(0,n),year:e.substr(t.length)})}},583(e){\"use strict\";function t(e,t){return{isValid:e,isPotentiallyValid:t}}e.exports=function(e,n){var i;return i=(n=n||{}).minLength||3,\"string\"!=typeof e?t(!1,!1):e.length<i?t(!1,!0):t(!0,!0)}},3658(e,t){\"use strict\";t.parse=function(e,t){if(\"string\"!=typeof e)throw new TypeError(\"argument str must be a string\");var n={},r=e.length;if(r<2)return n;var o=t&&t.decode||u,a=0,s=0,h=0;do{if(-1===(s=e.indexOf(\"=\",a)))break;if(-1===(h=e.indexOf(\";\",a)))h=r;else if(s>h){a=e.lastIndexOf(\";\",s-1)+1;continue}var p=c(e,a,s),m=d(e,s,p),y=e.slice(p,m);if(!i.call(n,y)){var f=c(e,s+1,h),g=d(e,h,f);34===e.charCodeAt(f)&&34===e.charCodeAt(g-1)&&(f++,g--);var v=e.slice(f,g);n[y]=l(v,o)}a=h+1}while(a<r);return n},t.serialize=function(e,t,i){var c=i&&i.encode||encodeURIComponent;if(\"function\"!=typeof c)throw new TypeError(\"option encode is invalid\");if(!r.test(e))throw new TypeError(\"argument name is invalid\");var d=c(t);if(!o.test(d))throw new TypeError(\"argument val is invalid\");var u=e+\"=\"+d;if(!i)return u;if(null!=i.maxAge){var l=Math.floor(i.maxAge);if(!isFinite(l))throw new TypeError(\"option maxAge is invalid\");u+=\"; Max-Age=\"+l}if(i.domain){if(!a.test(i.domain))throw new TypeError(\"option domain is invalid\");u+=\"; Domain=\"+i.domain}if(i.path){if(!s.test(i.path))throw new TypeError(\"option path is invalid\");u+=\"; Path=\"+i.path}if(i.expires){var h=i.expires;if(!function(e){return\"[object Date]\"===n.call(e)}(h)||isNaN(h.valueOf()))throw new TypeError(\"option expires is invalid\");u+=\"; Expires=\"+h.toUTCString()}if(i.httpOnly&&(u+=\"; HttpOnly\"),i.secure&&(u+=\"; Secure\"),i.partitioned&&(u+=\"; Partitioned\"),i.priority)switch(\"string\"==typeof i.priority?i.priority.toLowerCase():i.priority){case\"low\":u+=\"; Priority=Low\";break;case\"medium\":u+=\"; Priority=Medium\";break;case\"high\":u+=\"; Priority=High\";break;default:throw new TypeError(\"option priority is invalid\")}if(i.sameSite)switch(\"string\"==typeof i.sameSite?i.sameSite.toLowerCase():i.sameSite){case!0:u+=\"; SameSite=Strict\";break;case\"lax\":u+=\"; SameSite=Lax\";break;case\"strict\":u+=\"; SameSite=Strict\";break;case\"none\":u+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}return u};var n=Object.prototype.toString,i=Object.prototype.hasOwnProperty,r=/^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/,o=/^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/,a=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,s=/^[\\u0020-\\u003A\\u003D-\\u007E]*$/;function c(e,t,n){do{var i=e.charCodeAt(t);if(32!==i&&9!==i)return t}while(++t<n);return n}function d(e,t,n){for(;t>n;){var i=e.charCodeAt(--t);if(32!==i&&9!==i)return t+1}return n}function u(e){return-1!==e.indexOf(\"%\")?decodeURIComponent(e):e}function l(e,t){try{return t(e)}catch(t){return e}}},2921(e,t,n){\"use strict\";var i,r=n(2931),o=n(7695),a=n(4461),s=n(6520),c=n(9545),d={},u={VISA:\"visa\",MASTERCARD:\"mastercard\",AMERICAN_EXPRESS:\"american-express\",DINERS_CLUB:\"diners-club\",DISCOVER:\"discover\",JCB:\"jcb\",UNIONPAY:\"unionpay\",MAESTRO:\"maestro\",ELO:\"elo\",MIR:\"mir\",HIPER:\"hiper\",HIPERCARD:\"hipercard\"},l=[u.VISA,u.MASTERCARD,u.AMERICAN_EXPRESS,u.DINERS_CLUB,u.DISCOVER,u.JCB,u.UNIONPAY,u.MAESTRO,u.ELO,u.MIR,u.HIPER,u.HIPERCARD];function h(e){return d[e]||r[e]}function p(e,t){var n=i.indexOf(e);if(!t&&-1===n)throw new Error('\"'+e+'\" is not a supported card type.');return n}function m(e){var t,n=[];return s(e)?0===e.length?i.map(function(e){return o(h(e))}):(i.forEach(function(t){var i=h(t);c(e,i,n)}),(t=a(n))?[t]:n):[]}i=o(l),m.getTypeInfo=function(e){return o(h(e))},m.removeCard=function(e){var t=p(e);i.splice(t,1)},m.addCard=function(e){var t=p(e.type,!0);d[e.type]=e,-1===t&&i.push(e.type)},m.updateCard=function(e,t){var n,i=d[e]||r[e];if(!i)throw new Error('\"'+e+'\" is not a recognized type. Use `addCard` instead.');if(t.type&&i.type!==t.type)throw new Error(\"Cannot overwrite type parameter.\");n=o(i,!0),Object.keys(n).forEach(function(e){t[e]&&(n[e]=t[e])}),d[n.type]=n},m.changeOrder=function(e,t){var n=p(e);i.splice(n,1),i.splice(t,0,e)},m.resetModifications=function(){i=o(l),d={}},m.types=u,e.exports=m},9545(e,t,n){\"use strict\";var i=n(7695),r=n(6744);e.exports=function(e,t,n){var o,a,s,c;for(o=0;o<t.patterns.length;o++)if(a=t.patterns[o],r(e,a)){c=i(t),s=Array.isArray(a)?String(a[0]).length:String(a).length,e.length>=s&&(c.matchStrength=s),n.push(c);break}}},2931(e){\"use strict\";e.exports={visa:{niceType:\"Visa\",type:\"visa\",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:\"CVV\",size:3}},mastercard:{niceType:\"Mastercard\",type:\"mastercard\",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}},\"american-express\":{niceType:\"American Express\",type:\"american-express\",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:\"CID\",size:4}},\"diners-club\":{niceType:\"Diners Club\",type:\"diners-club\",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:\"CVV\",size:3}},discover:{niceType:\"Discover\",type:\"discover\",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:\"CID\",size:3}},jcb:{niceType:\"JCB\",type:\"jcb\",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:\"CVV\",size:3}},unionpay:{niceType:\"UnionPay\",type:\"unionpay\",patterns:[620,[624,626],[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[622019,622999],[62207,62209],[622126,622925],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:\"CVN\",size:3}},maestro:{niceType:\"Maestro\",type:\"maestro\",patterns:[493698,[5e5,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:\"CVC\",size:3}},elo:{niceType:\"Elo\",type:\"elo\",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:\"CVE\",size:3}},mir:{niceType:\"Mir\",type:\"mir\",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:\"CVP2\",size:3}},hiper:{niceType:\"Hiper\",type:\"hiper\",patterns:[637095,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}},hipercard:{niceType:\"Hipercard\",type:\"hipercard\",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}}}},7695(e){\"use strict\";e.exports=function(e){return e?JSON.parse(JSON.stringify(e)):null}},4461(e){\"use strict\";e.exports=function(e){if(function(e){var t=e.filter(function(e){return e.matchStrength}).length;return t>0&&t===e.length}(e))return e.reduce(function(e,t){return e?e.matchStrength<t.matchStrength?t:e:t})}},6520(e){\"use strict\";e.exports=function(e){return\"string\"==typeof e||e instanceof String}},6744(e){\"use strict\";e.exports=function(e,t){return Array.isArray(t)?function(e,t,n){var i=String(t).length,r=e.substr(0,i),o=parseInt(r,10);return t=parseInt(String(t).substr(0,r.length),10),n=parseInt(String(n).substr(0,r.length),10),o>=t&&o<=n}(e,t[0],t[1]):function(e,t){return(t=String(t)).substring(0,e.length)===e.substring(0,t.length)}(e,t)}},1915(e){\"use strict\";var t=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+t+\")|([^%]+?)\",\"gi\"),i=new RegExp(\"(\"+t+\")+\",\"gi\");function r(e,t){try{return[decodeURIComponent(e.join(\"\"))]}catch(e){}if(1===e.length)return e;t=t||1;var n=e.slice(0,t),i=e.slice(t);return Array.prototype.concat.call([],r(n),r(i))}function o(e){try{return decodeURIComponent(e)}catch(o){for(var t=e.match(n)||[],i=1;i<t.length;i++)t=(e=r(t,i).join(\"\")).match(n)||[];return e}}e.exports=function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof e+\"`\");try{return e=e.replace(/\\+/g,\" \"),decodeURIComponent(e)}catch(t){return function(e){for(var t={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=i.exec(e);n;){try{t[n[0]]=decodeURIComponent(n[0])}catch(e){var r=o(n[0]);r!==n[0]&&(t[n[0]]=r)}n=i.exec(e)}t[\"%C2\"]=\"�\";for(var a=Object.keys(t),s=0;s<a.length;s++){var c=a[s];e=e.replace(new RegExp(c,\"g\"),t[c])}return e}(e)}}},3592(e,t,n){\"use strict\";var i=n(4684),r=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function a(e,t,n){var o=t[n];if(null!=o){if(r.call(e,n)&&(void 0===e[n]||null===e[n]))throw new TypeError(\"Cannot convert undefined or null to object (\"+n+\")\");r.call(e,n)&&i(o)?e[n]=s(Object(e[n]),t[n]):e[n]=o}}function s(e,t){if(e===t)return e;for(var n in t=Object(t))r.call(t,n)&&a(e,t,n);if(Object.getOwnPropertySymbols)for(var i=Object.getOwnPropertySymbols(t),s=0;s<i.length;s++)o.call(t,i[s])&&a(e,t,i[s]);return e}e.exports=function(e){e=function(e){if(null==e)throw new TypeError(\"Sources cannot be null or undefined\");return Object(e)}(e);for(var t=1;t<arguments.length;t++)s(e,arguments[t]);return e}},3814(e){\"use strict\";e.exports=function(e,t){for(var n={},i=Object.keys(e),r=Array.isArray(t),o=0;o<i.length;o++){var a=i[o],s=e[a];(r?-1!==t.indexOf(a):t(a,s,e))&&(n[a]=s)}return n}},3347(e,t,n){\"use strict\";e.exports=n(344)},5990(e){!function(t){\"use strict\";if(\"undefined\"!=typeof window){var n=!0,i=\"\",r=0,o=\"\",a=null,s=\"\",c=!1,d={resize:1,click:1},u=128,l=!0,h=1,p=\"bodyOffset\",m=p,y=!0,f=\"\",g={},v=32,_=null,b=!1,S=\"[iFrameSizer]\",w=\"\",C={max:1,min:1,bodyScroll:1,documentElementScroll:1},I=\"child\",P=!0,E=window.parent,O=\"*\",A=0,T=!1,k=null,x=16,M=1,N=\"scroll\",D=N,R=window,z=function(){ae(\"MessageCallback function not defined\")},F=function(){},B=function(){},j={height:function(){return ae(\"Custom height calculation function not defined\"),document.documentElement.offsetHeight},width:function(){return ae(\"Custom width calculation function not defined\"),document.body.scrollWidth}},L={},U=!1;try{var V=Object.create({},{passive:{get:function(){U=!0}},once:{get:function(){}}});window.addEventListener(\"test\",ee,V),window.removeEventListener(\"test\",ee,V)}catch(e){}var q,H,G,W,$,Y,K,Q=Date.now||function(){return(new Date).getTime()},J={bodyOffset:function(){return document.body.offsetHeight+ge(\"marginTop\")+ge(\"marginBottom\")},offset:function(){return J.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return j.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,_e(J))},min:function(){return Math.min.apply(null,_e(J))},grow:function(){return J.max()},lowestElement:function(){return Math.max(J.bodyOffset()||J.documentElementOffset(),ve(\"bottom\",Se()))},taggedElement:function(){return be(\"bottom\",\"data-iframe-height\")}},Z={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return j.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(Z.bodyScroll(),Z.documentElementScroll())},max:function(){return Math.max.apply(null,_e(Z))},min:function(){return Math.min.apply(null,_e(Z))},rightMostElement:function(){return ve(\"right\",Se())},taggedElement:function(){return be(\"right\",\"data-iframe-width\")}},X=(q=we,$=null,Y=0,K=function(){Y=Q(),$=null,W=q.apply(H,G),$||(H=G=null)},function(){var e=Q();Y||(Y=e);var t=x-(e-Y);return H=this,G=arguments,t<=0||t>x?($&&(clearTimeout($),$=null),Y=e,W=q.apply(H,G),$||(H=G=null)):$||($=setTimeout(K,t)),W});te(window,\"message\",Ae),te(window,\"readystatechange\",Te),Te()}function ee(){}function te(e,t,n,i){\"addEventListener\"in window?e.addEventListener(t,n,!!U&&(i||{})):\"attachEvent\"in window&&e.attachEvent(\"on\"+t,n)}function ne(e,t,n){\"removeEventListener\"in window?e.removeEventListener(t,n,!1):\"detachEvent\"in window&&e.detachEvent(\"on\"+t,n)}function ie(e){return e.charAt(0).toUpperCase()+e.slice(1)}function re(e){return S+\"[\"+w+\"] \"+e}function oe(e){b&&\"object\"==typeof window.console&&console.log(re(e))}function ae(e){\"object\"==typeof window.console&&console.warn(re(e))}function se(){var e,a;!function(){function e(e){return\"true\"===e}var a=f.substr(13).split(\":\");w=a[0],r=t!==a[1]?Number(a[1]):r,c=t!==a[2]?e(a[2]):c,b=t!==a[3]?e(a[3]):b,v=t!==a[4]?Number(a[4]):v,n=t!==a[6]?e(a[6]):n,o=a[7],m=t!==a[8]?a[8]:m,i=a[9],s=a[10],A=t!==a[11]?Number(a[11]):A,g.enable=t!==a[12]&&e(a[12]),I=t!==a[13]?a[13]:I,D=t!==a[14]?a[14]:D}(),oe(\"Initialising iFrame (\"+location.href+\")\"),function(){function e(e,t){return\"function\"==typeof e&&(oe(\"Setup custom \"+t+\"CalcMethod\"),j[t]=e,e=\"custom\"),e}var t;\"iFrameResizer\"in window&&Object===window.iFrameResizer.constructor&&(t=window.iFrameResizer,oe(\"Reading data from page: \"+JSON.stringify(t)),z=\"messageCallback\"in t?t.messageCallback:z,F=\"readyCallback\"in t?t.readyCallback:F,O=\"targetOrigin\"in t?t.targetOrigin:O,m=\"heightCalculationMethod\"in t?t.heightCalculationMethod:m,D=\"widthCalculationMethod\"in t?t.widthCalculationMethod:D,m=e(m,\"height\"),D=e(D,\"width\")),oe(\"TargetOrigin for parent set to: \"+O)}(),t===o&&(o=r+\"px\"),ce(\"margin\",(-1!==(a=o).indexOf(\"-\")&&(ae(\"Negative CSS value ignored for margin\"),a=\"\"),a)),ce(\"background\",i),ce(\"padding\",s),(e=document.createElement(\"div\")).style.clear=\"both\",e.style.display=\"block\",document.body.appendChild(e),he(),pe(),document.documentElement.style.height=\"\",document.body.style.height=\"\",oe('HTML & body height set to \"auto\"'),oe(\"Enable public methods\"),R.parentIFrame={autoResize:function(e){return!0===e&&!1===n?(n=!0,me()):!1===e&&!0===n&&(n=!1,ye()),n},close:function(){Oe(0,0,\"close\"),oe(\"Disable outgoing messages\"),P=!1,oe(\"Remove event listener: Message\"),ne(window,\"message\",Ae),!0===n&&ye()},getId:function(){return w},getPageInfo:function(e){\"function\"==typeof e?(B=e,Oe(0,0,\"pageInfo\")):(B=function(){},Oe(0,0,\"pageInfoStop\"))},moveToAnchor:function(e){g.findTarget(e)},reset:function(){Ee(\"parentIFrame.reset\")},scrollTo:function(e,t){Oe(t,e,\"scrollTo\")},scrollToOffset:function(e,t){Oe(t,e,\"scrollToOffset\")},sendMessage:function(e,t){Oe(0,0,\"message\",JSON.stringify(e),t)},setHeightCalculationMethod:function(e){m=e,he()},setWidthCalculationMethod:function(e){D=e,pe()},setTargetOrigin:function(e){oe(\"Set targetOrigin: \"+e),O=e},size:function(e,t){Ce(\"size\",\"parentIFrame.size(\"+(e||\"\")+(t?\",\"+t:\"\")+\")\",e,t)}},me(),g=function(){function e(e){var n=e.getBoundingClientRect(),i={x:window.pageXOffset!==t?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==t?window.pageYOffset:document.documentElement.scrollTop};return{x:parseInt(n.left,10)+parseInt(i.x,10),y:parseInt(n.top,10)+parseInt(i.y,10)}}function n(n){var i=n.split(\"#\")[1]||n,r=decodeURIComponent(i),o=document.getElementById(r)||document.getElementsByName(r)[0];t!==o?function(t){var n=e(t);oe(\"Moving to in page link (#\"+i+\") at x: \"+n.x+\" y: \"+n.y),Oe(n.y,n.x,\"scrollToOffset\")}(o):(oe(\"In page link (#\"+i+\") not found in iFrame, so sending to parent\"),Oe(0,0,\"inPageLink\",\"#\"+i))}function i(){\"\"!==location.hash&&\"#\"!==location.hash&&n(location.href)}return g.enable?Array.prototype.forEach&&document.querySelectorAll?(oe(\"Setting up location.hash handlers\"),Array.prototype.forEach.call(document.querySelectorAll('a[href^=\"#\"]'),function(e){\"#\"!==e.getAttribute(\"href\")&&te(e,\"click\",function(e){e.preventDefault(),n(this.getAttribute(\"href\"))})}),te(window,\"hashchange\",i),setTimeout(i,u)):ae(\"In page linking not fully supported in this browser! (See README.md for IE8 workaround)\"):oe(\"In page linking not enabled\"),{findTarget:n}}(),Ce(\"init\",\"Init message from host page\"),F()}function ce(e,n){t!==n&&\"\"!==n&&\"null\"!==n&&(document.body.style[e]=n,oe(\"Body \"+e+' set to \"'+n+'\"'))}function de(e){var t={add:function(t){function n(){Ce(e.eventName,e.eventType)}L[t]=n,te(window,t,n,{passive:!0})},remove:function(e){var t=L[e];delete L[e],ne(window,e,t)}};e.eventNames&&Array.prototype.map?(e.eventName=e.eventNames[0],e.eventNames.map(t[e.method])):t[e.method](e.eventName),oe(ie(e.method)+\" event listener: \"+e.eventType)}function ue(e){de({method:e,eventType:\"Animation Start\",eventNames:[\"animationstart\",\"webkitAnimationStart\"]}),de({method:e,eventType:\"Animation Iteration\",eventNames:[\"animationiteration\",\"webkitAnimationIteration\"]}),de({method:e,eventType:\"Animation End\",eventNames:[\"animationend\",\"webkitAnimationEnd\"]}),de({method:e,eventType:\"Input\",eventName:\"input\"}),de({method:e,eventType:\"Mouse Up\",eventName:\"mouseup\"}),de({method:e,eventType:\"Mouse Down\",eventName:\"mousedown\"}),de({method:e,eventType:\"Orientation Change\",eventName:\"orientationchange\"}),de({method:e,eventType:\"Print\",eventName:[\"afterprint\",\"beforeprint\"]}),de({method:e,eventType:\"Ready State Change\",eventName:\"readystatechange\"}),de({method:e,eventType:\"Touch Start\",eventName:\"touchstart\"}),de({method:e,eventType:\"Touch End\",eventName:\"touchend\"}),de({method:e,eventType:\"Touch Cancel\",eventName:\"touchcancel\"}),de({method:e,eventType:\"Transition Start\",eventNames:[\"transitionstart\",\"webkitTransitionStart\",\"MSTransitionStart\",\"oTransitionStart\",\"otransitionstart\"]}),de({method:e,eventType:\"Transition Iteration\",eventNames:[\"transitioniteration\",\"webkitTransitionIteration\",\"MSTransitionIteration\",\"oTransitionIteration\",\"otransitioniteration\"]}),de({method:e,eventType:\"Transition End\",eventNames:[\"transitionend\",\"webkitTransitionEnd\",\"MSTransitionEnd\",\"oTransitionEnd\",\"otransitionend\"]}),\"child\"===I&&de({method:e,eventType:\"IFrame Resized\",eventName:\"resize\"})}function le(e,t,n,i){return t!==e&&(e in n||(ae(e+\" is not a valid option for \"+i+\"CalculationMethod.\"),e=t),oe(i+' calculation method set to \"'+e+'\"')),e}function he(){m=le(m,p,J,\"height\")}function pe(){D=le(D,N,Z,\"width\")}function me(){var e;!0===n?(ue(\"add\"),e=0>v,window.MutationObserver||window.WebKitMutationObserver?e?fe():a=function(){function e(e){function t(e){!1===e.complete&&(oe(\"Attach listeners to \"+e.src),e.addEventListener(\"load\",r,!1),e.addEventListener(\"error\",o,!1),s.push(e))}\"attributes\"===e.type&&\"src\"===e.attributeName?t(e.target):\"childList\"===e.type&&Array.prototype.forEach.call(e.target.querySelectorAll(\"img\"),t)}function n(e){oe(\"Remove listeners from \"+e.src),e.removeEventListener(\"load\",r,!1),e.removeEventListener(\"error\",o,!1),function(e){s.splice(s.indexOf(e),1)}(e)}function i(e,i,r){n(e.target),Ce(i,r+\": \"+e.target.src,t,t)}function r(e){i(e,\"imageLoad\",\"Image loaded\")}function o(e){i(e,\"imageLoadFailed\",\"Image load failed\")}function a(t){Ce(\"mutationObserver\",\"mutationObserver: \"+t[0].target+\" \"+t[0].type),t.forEach(e)}var s=[],c=window.MutationObserver||window.WebKitMutationObserver,d=function(){var e=document.querySelector(\"body\");return d=new c(a),oe(\"Create body MutationObserver\"),d.observe(e,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}),d}();return{disconnect:function(){\"disconnect\"in d&&(oe(\"Disconnect body MutationObserver\"),d.disconnect(),s.forEach(n))}}}():(oe(\"MutationObserver not supported in this browser!\"),fe())):oe(\"Auto Resize disabled\")}function ye(){ue(\"remove\"),null!==a&&a.disconnect(),clearInterval(_)}function fe(){0!==v&&(oe(\"setInterval: \"+v+\"ms\"),_=setInterval(function(){Ce(\"interval\",\"setInterval: \"+v)},Math.abs(v)))}function ge(e,t){var n=0;return t=t||document.body,n=\"defaultView\"in document&&\"getComputedStyle\"in document.defaultView?null!==(n=document.defaultView.getComputedStyle(t,null))?n[e]:0:function(e){if(/^\\d+(px)?$/i.test(e))return parseInt(e,10);var n=t.style.left,i=t.runtimeStyle.left;return t.runtimeStyle.left=t.currentStyle.left,t.style.left=e||0,e=t.style.pixelLeft,t.style.left=n,t.runtimeStyle.left=i,e}(t.currentStyle[e]),parseInt(n,10)}function ve(e,t){for(var n=t.length,i=0,r=0,o=ie(e),a=Q(),s=0;s<n;s++)(i=t[s].getBoundingClientRect()[e]+ge(\"margin\"+o,t[s]))>r&&(r=i);return a=Q()-a,oe(\"Parsed \"+n+\" HTML elements\"),oe(\"Element position calculated in \"+a+\"ms\"),function(e){e>x/2&&oe(\"Event throttle increased to \"+(x=2*e)+\"ms\")}(a),r}function _e(e){return[e.bodyOffset(),e.bodyScroll(),e.documentElementOffset(),e.documentElementScroll()]}function be(e,t){var n=document.querySelectorAll(\"[\"+t+\"]\");return 0===n.length&&(ae(\"No tagged elements (\"+t+\") found on page\"),document.querySelectorAll(\"body *\")),ve(e,n)}function Se(){return document.querySelectorAll(\"body *\")}function we(e,n,i,r){var o,a;!function(){function e(e,t){return!(Math.abs(e-t)<=A)}return o=t!==i?i:J[m](),a=t!==r?r:Z[D](),e(h,o)||c&&e(M,a)}()&&\"init\"!==e?!(e in{init:1,interval:1,size:1})&&(m in C||c&&D in C)?Ee(n):e in{interval:1}||oe(\"No change in size detected\"):(Ie(),Oe(h=o,M=a,e))}function Ce(e,t,n,i){T&&e in d?oe(\"Trigger event cancelled: \"+e):(e in{reset:1,resetPage:1,init:1}||oe(\"Trigger event: \"+t),\"init\"===e?we(e,t,n,i):X(e,t,n,i))}function Ie(){T||(T=!0,oe(\"Trigger event lock on\")),clearTimeout(k),k=setTimeout(function(){T=!1,oe(\"Trigger event lock off\"),oe(\"--\")},u)}function Pe(e){h=J[m](),M=Z[D](),Oe(h,M,e)}function Ee(e){var t=m;m=p,oe(\"Reset trigger event: \"+e),Ie(),Pe(\"reset\"),m=t}function Oe(e,n,i,r,o){var a;!0===P&&(t===o?o=O:oe(\"Message targetOrigin: \"+o),oe(\"Sending message to host page (\"+(a=w+\":\"+e+\":\"+n+\":\"+i+(t!==r?\":\"+r:\"\"))+\")\"),E.postMessage(S+a,o))}function Ae(t){var n,i={init:function(){f=t.data,E=t.source,se(),l=!1,setTimeout(function(){y=!1},u)},reset:function(){y?oe(\"Page reset ignored by init\"):(oe(\"Page size reset by host page\"),Pe(\"resetPage\"))},resize:function(){Ce(\"resizeParent\",\"Parent window requested size check\")},moveToAnchor:function(){g.findTarget(o())},inPageLink:function(){this.moveToAnchor()},pageInfo:function(){var e=o();oe(\"PageInfoFromParent called from parent: \"+e),B(JSON.parse(e)),oe(\" --\")},message:function(){var e=o();oe(\"MessageCallback called from parent: \"+e),z(JSON.parse(e)),oe(\" --\")}};function r(){return t.data.split(\"]\")[1].split(\":\")[0]}function o(){return t.data.substr(t.data.indexOf(\":\")+1)}function a(){return t.data.split(\":\")[2]in{true:1,false:1}}S===(\"\"+t.data).substr(0,13)&&(!1===l?(n=r())in i?i[n]():!e.exports&&\"iFrameResize\"in window||\"jQuery\"in window&&\"iFrameResize\"in window.jQuery.prototype||a()||ae(\"Unexpected message (\"+t.data+\")\"):a()?i.init():oe('Ignored message of type \"'+r()+'\". Received before initialization.'))}function Te(){\"loading\"!==document.readyState&&window.parent.postMessage(\"[iFrameResizerChild]Ready\",\"*\")}}()},7521(e){!function(t){\"use strict\";if(\"undefined\"!=typeof window){var n,i=0,r=!1,o=!1,a=\"[iFrameSizer]\",s=null,c=window.requestAnimationFrame,d={max:1,scroll:1,bodyScroll:1,documentElementScroll:1},u={},l=null,h={autoResize:!0,bodyBackground:null,bodyMargin:null,bodyMarginV1:8,bodyPadding:null,checkOrigin:!0,inPageLinks:!1,enablePublicMethods:!0,heightCalculationMethod:\"bodyOffset\",id:\"iFrameResizer\",interval:32,log:!1,maxHeight:1/0,maxWidth:1/0,minHeight:0,minWidth:0,resizeFrom:\"parent\",scrolling:!1,sizeHeight:!0,sizeWidth:!1,warningTimeout:5e3,tolerance:0,widthCalculationMethod:\"scroll\",closedCallback:function(){},initCallback:function(){},messageCallback:function(){b(\"MessageCallback function not defined\")},resizedCallback:function(){},scrollCallback:function(){return!0}},p={};window.jQuery&&((n=window.jQuery).fn?n.fn.iFrameResize||(n.fn.iFrameResize=function(e){return this.filter(\"iframe\").each(function(t,n){D(n,e)}).end()}):_(\"\",\"Unable to bind to jQuery, it is not fully loaded.\")),\"function\"==typeof define&&define.amd?define([],j):\"object\"==typeof e.exports&&(e.exports=j()),window.iFrameResize=window.iFrameResize||j()}function m(){return window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver}function y(e,t,n){\"addEventListener\"in window?e.addEventListener(t,n,!1):\"attachEvent\"in window&&e.attachEvent(\"on\"+t,n)}function f(e,t,n){\"removeEventListener\"in window?e.removeEventListener(t,n,!1):\"detachEvent\"in window&&e.detachEvent(\"on\"+t,n)}function g(e){return u[e]?u[e].log:r}function v(e,t){S(\"log\",e,t,g(e))}function _(e,t){S(\"info\",e,t,g(e))}function b(e,t){S(\"warn\",e,t,!0)}function S(e,t,n,i){!0===i&&\"object\"==typeof window.console&&console[e](function(e){return a+\"[\"+function(e){var t=\"Host page: \"+e;return window.top!==window.self&&(t=window.parentIFrame&&window.parentIFrame.getId?window.parentIFrame.getId()+\": \"+e:\"Nested host page: \"+e),t}(e)+\"]\"}(t),n)}function w(e){function t(){n(\"Height\"),n(\"Width\"),x(function(){k(w),O(I),l(\"resizedCallback\",w)},w,\"init\")}function n(e){var t=Number(u[I][\"max\"+e]),n=Number(u[I][\"min\"+e]),i=e.toLowerCase(),r=Number(w[i]);v(I,\"Checking \"+i+\" is in range \"+n+\"-\"+t),r<n&&(r=n,v(I,\"Set \"+i+\" to min value\")),r>t&&(r=t,v(I,\"Set \"+i+\" to max value\")),w[i]=\"\"+r}function i(e){return S.substr(S.indexOf(\":\")+7+e)}function r(e,t){var n,i;n=function(){var n,i;M(\"Send Page Info\",\"pageInfo:\"+(n=document.body.getBoundingClientRect(),i=w.iframe.getBoundingClientRect(),JSON.stringify({iframeHeight:i.height,iframeWidth:i.width,clientHeight:Math.max(document.documentElement.clientHeight,window.innerHeight||0),clientWidth:Math.max(document.documentElement.clientWidth,window.innerWidth||0),offsetTop:parseInt(i.top-n.top,10),offsetLeft:parseInt(i.left-n.left,10),scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset})),e,t)},p[i=t]||(p[i]=setTimeout(function(){p[i]=null,n()},32))}function o(e){var t=e.getBoundingClientRect();return E(I),{x:Math.floor(Number(t.left)+Number(s.x)),y:Math.floor(Number(t.top)+Number(s.y))}}function c(e){var t=e?o(w.iframe):{x:0,y:0},n={x:Number(w.width)+t.x,y:Number(w.height)+t.y};v(I,\"Reposition requested from iFrame (offset x:\"+t.x+\" y:\"+t.y+\")\"),window.top!==window.self?window.parentIFrame?window.parentIFrame[\"scrollTo\"+(e?\"Offset\":\"\")](n.x,n.y):b(I,\"Unable to scroll to requested position, window.parentIFrame not found\"):(s=n,d(),v(I,\"--\"))}function d(){!1!==l(\"scrollCallback\",s)?O(I):A()}function l(e,t){return C(I,e,t)}var h,m,g,S=e.data,w={},I=null;\"[iFrameResizerChild]Ready\"===S?function(){for(var e in u)M(\"iFrame requested init\",N(e),document.getElementById(e),e)}():a===(\"\"+S).substr(0,13)&&S.substr(13).split(\":\")[0]in u?(g=S.substr(13).split(\":\"),w={iframe:u[g[0]]&&u[g[0]].iframe,id:g[0],height:g[1],width:g[2],type:g[3]},I=w.id,u[I]&&(u[I].loaded=!0),(m=w.type in{true:1,false:1,undefined:1})&&v(I,\"Ignoring init message from meta parent page\"),!m&&function(e){var t=!0;return u[e]||(t=!1,b(w.type+\" No settings for \"+e+\". Message was: \"+S)),t}(I)&&(v(I,\"Received: \"+S),h=!0,null===w.iframe&&(b(I,\"IFrame (\"+w.id+\") not found\"),h=!1),h&&function(){var t,n=e.origin,i=u[I]&&u[I].checkOrigin;if(i&&\"\"+n!=\"null\"&&!(i.constructor===Array?function(){var e=0,t=!1;for(v(I,\"Checking connection is from allowed list of origins: \"+i);e<i.length;e++)if(i[e]===n){t=!0;break}return t}():(t=u[I]&&u[I].remoteHost,v(I,\"Checking connection is from: \"+t),n===t)))throw new Error(\"Unexpected message received from: \"+n+\" for \"+w.iframe.id+\". Message was: \"+e.data+\". This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.\");return!0}()&&function(){switch(u[I]&&u[I].firstRun&&u[I]&&(u[I].firstRun=!1),w.type){case\"close\":u[I].closeRequestCallback?C(I,\"closeRequestCallback\",u[I].iframe):P(w.iframe);break;case\"message\":e=i(6),v(I,\"MessageCallback passed: {iframe: \"+w.iframe.id+\", message: \"+e+\"}\"),l(\"messageCallback\",{iframe:w.iframe,message:JSON.parse(e)}),v(I,\"--\");break;case\"scrollTo\":c(!1);break;case\"scrollToOffset\":c(!0);break;case\"pageInfo\":r(u[I]&&u[I].iframe,I),function(){function e(e,i){function o(){u[n]?r(u[n].iframe,n):t()}[\"scroll\",\"resize\"].forEach(function(t){v(n,e+t+\" listener for sendPageInfo\"),i(window,t,o)})}function t(){e(\"Remove \",f)}var n=I;e(\"Add \",y),u[n]&&(u[n].stopPageInfo=t)}();break;case\"pageInfoStop\":u[I]&&u[I].stopPageInfo&&(u[I].stopPageInfo(),delete u[I].stopPageInfo);break;case\"inPageLink\":!function(e){var t,n=e.split(\"#\")[1]||\"\",i=decodeURIComponent(n),r=document.getElementById(i)||document.getElementsByName(i)[0];r?(t=o(r),v(I,\"Moving to in page link (#\"+n+\") at x: \"+t.x+\" y: \"+t.y),s={x:t.x,y:t.y},d(),v(I,\"--\")):window.top!==window.self?window.parentIFrame?window.parentIFrame.moveToAnchor(n):v(I,\"In page link #\"+n+\" not found and window.parentIFrame not found\"):v(I,\"In page link #\"+n+\" not found\")}(i(9));break;case\"reset\":T(w);break;case\"init\":t(),l(\"initCallback\",w.iframe);break;default:t()}var e}())):_(I,\"Ignored: \"+S)}function C(e,t,n){var i=null,r=null;if(u[e]){if(\"function\"!=typeof(i=u[e][t]))throw new TypeError(t+\" on iFrame[\"+e+\"] is not a function\");r=i(n)}return r}function I(e){var t=e.id;delete u[t]}function P(e){var t=e.id;v(t,\"Removing iFrame: \"+t);try{e.parentNode&&e.parentNode.removeChild(e)}catch(e){}C(t,\"closedCallback\",t),v(t,\"--\"),I(e)}function E(e){null===s&&v(e,\"Get page position: \"+(s={x:window.pageXOffset!==t?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==t?window.pageYOffset:document.documentElement.scrollTop}).x+\",\"+s.y)}function O(e){null!==s&&(window.scrollTo(s.x,s.y),v(e,\"Set page position: \"+s.x+\",\"+s.y),A())}function A(){s=null}function T(e){v(e.id,\"Size reset requested by \"+(\"init\"===e.type?\"host page\":\"iFrame\")),E(e.id),x(function(){k(e),M(\"reset\",\"reset\",e.iframe,e.id)},e,\"reset\")}function k(e){function t(t){!function(t){e.id?(e.iframe.style[t]=e[t]+\"px\",v(e.id,\"IFrame (\"+n+\") \"+t+\" set to \"+e[t]+\"px\")):v(\"undefined\",\"messageData id not set\")}(t),function(t){o||\"0\"!==e[t]||(o=!0,v(n,\"Hidden iFrame detected, creating visibility listener\"),function(){function e(){function e(e){function t(t){return\"0px\"===(u[e]&&u[e].iframe.style[t])}u[e]&&null!==u[e].iframe.offsetParent&&(t(\"height\")||t(\"width\"))&&M(\"Visibility change\",\"resize\",u[e].iframe,e)}for(var t in u)e(t)}function t(t){v(\"window\",\"Mutation observed: \"+t[0].target+\" \"+t[0].type),R(e,16)}var n,i=m();i&&(n=document.querySelector(\"body\"),new i(t).observe(n,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}))}())}(t)}var n=e.iframe.id;u[n]&&(u[n].sizeHeight&&t(\"height\"),u[n].sizeWidth&&t(\"width\"))}function x(e,t,n){n!==t.type&&c?(v(t.id,\"Requesting animation frame\"),c(e)):e()}function M(e,t,n,i,r){var o,s=!1;i=i||n.id,u[i]&&(n&&\"contentWindow\"in n&&null!==n.contentWindow?(o=u[i]&&u[i].targetOrigin,v(i,\"[\"+e+\"] Sending msg to iframe[\"+i+\"] (\"+t+\") targetOrigin: \"+o),n.contentWindow.postMessage(a+t,o)):b(i,\"[\"+e+\"] IFrame(\"+i+\") not found\"),r&&u[i]&&u[i].warningTimeout&&(u[i].msgTimeout=setTimeout(function(){!u[i]||u[i].loaded||s||(s=!0,b(i,\"IFrame has not responded within \"+u[i].warningTimeout/1e3+\" seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.\"))},u[i].warningTimeout)))}function N(e){return e+\":\"+u[e].bodyMarginV1+\":\"+u[e].sizeWidth+\":\"+u[e].log+\":\"+u[e].interval+\":\"+u[e].enablePublicMethods+\":\"+u[e].autoResize+\":\"+u[e].bodyMargin+\":\"+u[e].heightCalculationMethod+\":\"+u[e].bodyBackground+\":\"+u[e].bodyPadding+\":\"+u[e].tolerance+\":\"+u[e].inPageLinks+\":\"+u[e].resizeFrom+\":\"+u[e].widthCalculationMethod}function D(e,n){var o,a,s=function(t){var o;return\"\"===t&&(e.id=(o=n&&n.id||h.id+i++,null!==document.getElementById(o)&&(o+=i++),t=o),r=(n||{}).log,v(t,\"Added missing iframe ID: \"+t+\" (\"+e.src+\")\")),t}(e.id);s in u&&\"iFrameResizer\"in e?b(s,\"Ignored iFrame, already setup.\"):(function(t){var n;t=t||{},u[s]={firstRun:!0,iframe:e,remoteHost:e.src.split(\"/\").slice(0,3).join(\"/\")},function(e){if(\"object\"!=typeof e)throw new TypeError(\"Options is not an object\")}(t),function(e){for(var t in h)h.hasOwnProperty(t)&&(u[s][t]=e.hasOwnProperty(t)?e[t]:h[t])}(t),u[s]&&(u[s].targetOrigin=!0===u[s].checkOrigin?\"\"===(n=u[s].remoteHost)||\"file://\"===n?\"*\":n:\"*\")}(n),function(){switch(v(s,\"IFrame scrolling \"+(u[s]&&u[s].scrolling?\"enabled\":\"disabled\")+\" for \"+s),e.style.overflow=!1===(u[s]&&u[s].scrolling)?\"hidden\":\"auto\",u[s]&&u[s].scrolling){case\"omit\":break;case!0:e.scrolling=\"yes\";break;case!1:e.scrolling=\"no\";break;default:e.scrolling=u[s]?u[s].scrolling:\"no\"}}(),function(){function t(t){1/0!==u[s][t]&&0!==u[s][t]&&(e.style[t]=u[s][t]+\"px\",v(s,\"Set \"+t+\" = \"+u[s][t]+\"px\"))}function n(e){if(u[s][\"min\"+e]>u[s][\"max\"+e])throw new Error(\"Value for min\"+e+\" can not be greater than max\"+e)}n(\"Height\"),n(\"Width\"),t(\"maxHeight\"),t(\"minHeight\"),t(\"maxWidth\"),t(\"minWidth\")}(),\"number\"!=typeof(u[s]&&u[s].bodyMargin)&&\"0\"!==(u[s]&&u[s].bodyMargin)||(u[s].bodyMarginV1=u[s].bodyMargin,u[s].bodyMargin=u[s].bodyMargin+\"px\"),o=N(s),(a=m())&&function(t){e.parentNode&&new t(function(t){t.forEach(function(t){Array.prototype.slice.call(t.removedNodes).forEach(function(t){t===e&&P(e)})})}).observe(e.parentNode,{childList:!0})}(a),y(e,\"load\",function(){var n,i;M(\"iFrame.onload\",o,e,t,!0),n=u[s]&&u[s].firstRun,i=u[s]&&u[s].heightCalculationMethod in d,!n&&i&&T({iframe:e,height:0,width:0,type:\"init\"})}),M(\"init\",o,e,t,!0),Function.prototype.bind&&u[s]&&(u[s].iframe.iFrameResizer={close:P.bind(null,u[s].iframe),removeListeners:I.bind(null,u[s].iframe),resize:M.bind(null,\"Window resize\",\"resize\",u[s].iframe),moveToAnchor:function(e){M(\"Move to anchor\",\"moveToAnchor:\"+e,u[s].iframe,s)},sendMessage:function(e){M(\"Send Message\",\"message:\"+(e=JSON.stringify(e)),u[s].iframe,s)}}))}function R(e,t){null===l&&(l=setTimeout(function(){l=null,e()},t))}function z(e){v(\"window\",\"Trigger event: \"+e),R(function(){B(\"Window \"+e,\"resize\")},16)}function F(){\"hidden\"!==document.visibilityState&&(v(\"document\",\"Trigger event: Visiblity change\"),R(function(){B(\"Tab Visable\",\"resize\")},16))}function B(e,t){function n(e){return u[e]&&\"parent\"===u[e].resizeFrom&&u[e].autoResize&&!u[e].firstRun}for(var i in u)n(i)&&M(e,t,document.getElementById(i),i)}function j(){function e(e,t){t&&(function(){if(!t.tagName)throw new TypeError(\"Object is not a valid DOM element\");if(\"IFRAME\"!==t.tagName.toUpperCase())throw new TypeError(\"Expected <IFRAME> tag, found <\"+t.tagName+\">\")}(),D(t,e),n.push(t))}var n;return function(){var e,t=[\"moz\",\"webkit\",\"o\",\"ms\"];for(e=0;e<t.length&&!c;e+=1)c=window[t[e]+\"RequestAnimationFrame\"];c||v(\"setup\",\"RequestAnimationFrame not supported\")}(),y(window,\"message\",w),y(window,\"resize\",function(){z(\"resize\")}),y(document,\"visibilitychange\",F),y(document,\"-webkit-visibilitychange\",F),y(window,\"focusin\",function(){z(\"focus\")}),y(window,\"focus\",function(){z(\"focus\")}),function(i,r){switch(n=[],function(e){e&&e.enablePublicMethods&&b(\"enablePublicMethods option has been removed, public methods are now always available in the iFrame\")}(i),typeof r){case\"undefined\":case\"string\":Array.prototype.forEach.call(document.querySelectorAll(r||\"iframe\"),e.bind(t,i));break;case\"object\":e(i,r);break;default:throw new TypeError(\"Unexpected data type (\"+typeof r+\")\")}return n}}}()},344(e,t,n){t.iframeResizer=n(7521),n(5990)},4684(e){\"use strict\";e.exports=function(e){var t=typeof e;return null!==e&&(\"object\"===t||\"function\"===t)}},168(e){var t;t=function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var i in n)t[i]=n[i]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(i){function r(){}function o(t,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=e({path:\"/\"},r.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var a=JSON.stringify(n);/^[\\{\\[]/.test(a)&&(n=a)}catch(e){}n=i.write?i.write(n,t):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var s=\"\";for(var c in o)o[c]&&(s+=\"; \"+c,!0!==o[c]&&(s+=\"=\"+o[c].split(\";\")[0]));return document.cookie=t+\"=\"+n+s}}function a(e,n){if(\"undefined\"!=typeof document){for(var r={},o=document.cookie?document.cookie.split(\"; \"):[],a=0;a<o.length;a++){var s=o[a].split(\"=\"),c=s.slice(1).join(\"=\");n||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var d=t(s[0]);if(c=(i.read||i)(c,d)||t(c),n)try{c=JSON.parse(c)}catch(e){}if(r[d]=c,e===d)break}catch(e){}}return e?r[e]:r}}return r.set=o,r.get=function(e){return a(e,!1)},r.getJSON=function(e){return a(e,!0)},r.remove=function(t,n){o(t,\"\",e(n,{expires:-1}))},r.defaults={},r.withConverter=n,r}(function(){})},\"function\"==typeof define&&define.amd&&define(t),e.exports=t()},4963(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();t.hasCookies=function(){var e=new s;try{var t=\"__test\";e.setItem(t,\"1\");var n=e.getItem(t);return e.removeItem(t),\"1\"===n}catch(e){return!1}};var r,o=(r=n(3658))&&r.__esModule?r:{default:r},a=\"lS_\",s=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.cookieOptions=Object.assign({path:\"/\"},t),a=void 0===t.prefix?a:t.prefix}return i(e,[{key:\"getItem\",value:function(e){var t=o.default.parse(document.cookie);return t&&t.hasOwnProperty(a+e)?t[a+e]:null}},{key:\"setItem\",value:function(e,t){return document.cookie=o.default.serialize(a+e,t,this.cookieOptions),t}},{key:\"removeItem\",value:function(e){var t=Object.assign({},this.cookieOptions,{maxAge:-1});return document.cookie=o.default.serialize(a+e,\"\",t),null}},{key:\"clear\",value:function(){var e=o.default.parse(document.cookie);for(var t in e)0===t.indexOf(a)&&this.removeItem(t.substr(a.length));return null}}]),e}();t.default=s},3952(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),i=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this._data={}}return n(e,[{key:\"getItem\",value:function(e){return this._data.hasOwnProperty(e)?this._data[e]:null}},{key:\"setItem\",value:function(e,t){return this._data[e]=String(t)}},{key:\"removeItem\",value:function(e){return delete this._data[e]}},{key:\"clear\",value:function(){return this._data={}}}]),e}();t.default=i},7576(e,t,n){\"use strict\";var i=a(n(1322)),r=a(n(4963)),o=a(n(3952));function a(e){return e&&e.__esModule?e:{default:e}}var s;s=(0,i.default)(\"localStorage\")?window.localStorage:(0,i.default)(\"sessionStorage\")?window.sessionStorage:(0,i.default)(\"cookieStorage\")?new r.default:new o.default,t.Ay=s,i.default,r.default,o.default},1322(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"localStorage\",t=String(e).replace(/storage$/i,\"\").toLowerCase();if(\"local\"===t)return o(\"localStorage\");if(\"session\"===t)return o(\"sessionStorage\");if(\"cookie\"===t)return(0,i.hasCookies)();if(\"memory\"===t)return!0;throw new Error(\"Storage method `\"+e+\"` is not available.\\n    Please use one of the following: localStorage, sessionStorage, cookieStorage, memoryStorage.\")};var i=n(4963),r=\"__test\";function o(e){try{var t=window[e];return t.setItem(r,\"1\"),t.removeItem(r),!0}catch(e){return!1}}},9655(e,t,n){var i,r=\"__lodash_hash_undefined__\",o=/^\\[object .+?Constructor\\]$/,a=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,s=\"object\"==typeof self&&self&&self.Object===Object&&self,c=a||s||Function(\"return this\")(),d=Array.prototype,u=Function.prototype,l=Object.prototype,h=c[\"__core-js_shared__\"],p=(i=/[^.]+$/.exec(h&&h.keys&&h.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+i:\"\",m=u.toString,y=l.hasOwnProperty,f=l.toString,g=RegExp(\"^\"+m.call(y).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),v=d.splice,_=E(c,\"Map\"),b=E(Object,\"create\");function S(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function w(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function C(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function I(e,t){for(var n=e.length;n--;)if(A(e[n][0],t))return n;return-1}function P(e,t){var n,i,r=e.__data__;return(\"string\"==(i=typeof(n=t))||\"number\"==i||\"symbol\"==i||\"boolean\"==i?\"__proto__\"!==n:null===n)?r[\"string\"==typeof t?\"string\":\"hash\"]:r.map}function E(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){if(!T(e)||p&&p in e)return!1;var t=function(e){var t=T(e)?f.call(e):\"\";return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t}(e)||function(e){var t=!1;if(null!=e&&\"function\"!=typeof e.toString)try{t=!!(e+\"\")}catch(e){}return t}(e)?g:o;return t.test(function(e){if(null!=e){try{return m.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e))}(n)?n:void 0}function O(e,t){if(\"function\"!=typeof e||t&&\"function\"!=typeof t)throw new TypeError(\"Expected a function\");var n=function(){var i=arguments,r=t?t.apply(this,i):i[0],o=n.cache;if(o.has(r))return o.get(r);var a=e.apply(this,i);return n.cache=o.set(r,a),a};return n.cache=new(O.Cache||C),n}function A(e,t){return e===t||e!=e&&t!=t}function T(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}S.prototype.clear=function(){this.__data__=b?b(null):{}},S.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},S.prototype.get=function(e){var t=this.__data__;if(b){var n=t[e];return n===r?void 0:n}return y.call(t,e)?t[e]:void 0},S.prototype.has=function(e){var t=this.__data__;return b?void 0!==t[e]:y.call(t,e)},S.prototype.set=function(e,t){return this.__data__[e]=b&&void 0===t?r:t,this},w.prototype.clear=function(){this.__data__=[]},w.prototype.delete=function(e){var t=this.__data__,n=I(t,e);return!(n<0||(n==t.length-1?t.pop():v.call(t,n,1),0))},w.prototype.get=function(e){var t=this.__data__,n=I(t,e);return n<0?void 0:t[n][1]},w.prototype.has=function(e){return I(this.__data__,e)>-1},w.prototype.set=function(e,t){var n=this.__data__,i=I(n,e);return i<0?n.push([e,t]):n[i][1]=t,this},C.prototype.clear=function(){this.__data__={hash:new S,map:new(_||w),string:new S}},C.prototype.delete=function(e){return P(this,e).delete(e)},C.prototype.get=function(e){return P(this,e).get(e)},C.prototype.has=function(e){return P(this,e).has(e)},C.prototype.set=function(e,t){return P(this,e).set(e,t),this},O.Cache=C,e.exports=O},35(e,t,n){e=n.nmd(e);var i=\"__lodash_hash_undefined__\",r=9007199254740991,o=\"[object Arguments]\",a=\"[object Function]\",s=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,d=/^(?:0|[1-9]\\d*)$/,u={};u[\"[object Float32Array]\"]=u[\"[object Float64Array]\"]=u[\"[object Int8Array]\"]=u[\"[object Int16Array]\"]=u[\"[object Int32Array]\"]=u[\"[object Uint8Array]\"]=u[\"[object Uint8ClampedArray]\"]=u[\"[object Uint16Array]\"]=u[\"[object Uint32Array]\"]=!0,u[o]=u[\"[object Array]\"]=u[\"[object ArrayBuffer]\"]=u[\"[object Boolean]\"]=u[\"[object DataView]\"]=u[\"[object Date]\"]=u[\"[object Error]\"]=u[a]=u[\"[object Map]\"]=u[\"[object Number]\"]=u[s]=u[\"[object RegExp]\"]=u[\"[object Set]\"]=u[\"[object String]\"]=u[\"[object WeakMap]\"]=!1;var l,h,p,m=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,y=\"object\"==typeof self&&self&&self.Object===Object&&self,f=m||y||Function(\"return this\")(),g=t&&!t.nodeType&&t,v=g&&e&&!e.nodeType&&e,_=v&&v.exports===g,b=_&&m.process,S=function(){try{return v&&v.require&&v.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(e){}}(),w=S&&S.isTypedArray,C=Array.prototype,I=Function.prototype,P=Object.prototype,E=f[\"__core-js_shared__\"],O=I.toString,A=P.hasOwnProperty,T=(l=/[^.]+$/.exec(E&&E.keys&&E.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",k=P.toString,x=O.call(Object),M=RegExp(\"^\"+O.call(A).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),N=_?f.Buffer:void 0,D=f.Symbol,R=f.Uint8Array,z=(N&&N.allocUnsafe,h=Object.getPrototypeOf,p=Object,function(e){return h(p(e))}),F=Object.create,B=P.propertyIsEnumerable,j=C.splice,L=D?D.toStringTag:void 0,U=function(){try{var e=se(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),V=N?N.isBuffer:void 0,q=Math.max,H=Date.now,G=se(f,\"Map\"),W=se(Object,\"create\"),$=function(){function e(){}return function(t){if(!_e(t))return{};if(F)return F(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function Y(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function K(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function Q(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function J(e){var t=this.__data__=new K(e);this.size=t.size}function Z(e,t,n){(void 0!==n&&!he(e[t],n)||void 0===n&&!(t in e))&&te(e,t,n)}function X(e,t,n){var i=e[t];A.call(e,t)&&he(i,n)&&(void 0!==n||t in e)||te(e,t,n)}function ee(e,t){for(var n=e.length;n--;)if(he(e[n][0],t))return n;return-1}function te(e,t,n){\"__proto__\"==t&&U?U(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}Y.prototype.clear=function(){this.__data__=W?W(null):{},this.size=0},Y.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Y.prototype.get=function(e){var t=this.__data__;if(W){var n=t[e];return n===i?void 0:n}return A.call(t,e)?t[e]:void 0},Y.prototype.has=function(e){var t=this.__data__;return W?void 0!==t[e]:A.call(t,e)},Y.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=W&&void 0===t?i:t,this},K.prototype.clear=function(){this.__data__=[],this.size=0},K.prototype.delete=function(e){var t=this.__data__,n=ee(t,e);return!(n<0||(n==t.length-1?t.pop():j.call(t,n,1),--this.size,0))},K.prototype.get=function(e){var t=this.__data__,n=ee(t,e);return n<0?void 0:t[n][1]},K.prototype.has=function(e){return ee(this.__data__,e)>-1},K.prototype.set=function(e,t){var n=this.__data__,i=ee(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this},Q.prototype.clear=function(){this.size=0,this.__data__={hash:new Y,map:new(G||K),string:new Y}},Q.prototype.delete=function(e){var t=ae(this,e).delete(e);return this.size-=t?1:0,t},Q.prototype.get=function(e){return ae(this,e).get(e)},Q.prototype.has=function(e){return ae(this,e).has(e)},Q.prototype.set=function(e,t){var n=ae(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this},J.prototype.clear=function(){this.__data__=new K,this.size=0},J.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},J.prototype.get=function(e){return this.__data__.get(e)},J.prototype.has=function(e){return this.__data__.has(e)},J.prototype.set=function(e,t){var n=this.__data__;if(n instanceof K){var i=n.__data__;if(!G||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new Q(i)}return n.set(e,t),this.size=n.size,this};function ne(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":L&&L in Object(e)?function(e){var t=A.call(e,L),n=e[L];try{e[L]=void 0;var i=!0}catch(e){}var r=k.call(e);return i&&(t?e[L]=n:delete e[L]),r}(e):function(e){return k.call(e)}(e)}function ie(e){return be(e)&&ne(e)==o}function re(e,t,n,i,r){e!==t&&function(e,t,n){for(var i=-1,r=Object(e),o=n(e),a=o.length;a--;){var s=o[++i];if(!1===t(r[s],s,r))break}}(t,function(o,a){if(r||(r=new J),_e(o))!function(e,t,n,i,r,o,a){var c=ue(e,n),d=ue(t,n),u=a.get(d);if(u)Z(e,n,u);else{var l,h,p,m,y,f=o?o(c,d,n+\"\",e,t,a):void 0,g=void 0===f;if(g){var v=me(d),_=!v&&fe(d),b=!v&&!_&&Se(d);f=d,v||_||b?me(c)?f=c:be(y=c)&&ye(y)?f=function(e,t){var n=-1,i=e.length;for(t||(t=Array(i));++n<i;)t[n]=e[n];return t}(c):_?(g=!1,f=function(e){return e.slice()}(d)):b?(g=!1,m=new(p=(l=d).buffer).constructor(p.byteLength),new R(m).set(new R(p)),h=m,f=new l.constructor(h,l.byteOffset,l.length)):f=[]:function(e){if(!be(e)||ne(e)!=s)return!1;var t=z(e);if(null===t)return!0;var n=A.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&O.call(n)==x}(d)||pe(d)?(f=c,pe(c)?f=function(e){return function(e,t,n){var i=!n;n||(n={});for(var r=-1,o=t.length;++r<o;){var a=t[r],s=void 0;void 0===s&&(s=e[a]),i?te(n,a,s):X(n,a,s)}return n}(e,we(e))}(c):_e(c)&&!ge(c)||(f=function(e){return\"function\"!=typeof e.constructor||de(e)?{}:$(z(e))}(d))):g=!1}g&&(a.set(d,f),r(f,d,i,o,a),a.delete(d)),Z(e,n,f)}}(e,t,a,n,re,i,r);else{var c=i?i(ue(e,a),o,a+\"\",e,t,r):void 0;void 0===c&&(c=o),Z(e,a,c)}},we)}var oe=U?function(e,t){return U(e,\"toString\",{configurable:!0,enumerable:!1,value:(n=t,function(){return n}),writable:!0});var n}:Pe;function ae(e,t){var n,i,r=e.__data__;return(\"string\"==(i=typeof(n=t))||\"number\"==i||\"symbol\"==i||\"boolean\"==i?\"__proto__\"!==n:null===n)?r[\"string\"==typeof t?\"string\":\"hash\"]:r.map}function se(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!_e(e)||function(e){return!!T&&T in e}(e))&&(ge(e)?M:c).test(function(e){if(null!=e){try{return O.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e))}(n)?n:void 0}function ce(e,t){var n=typeof e;return!!(t=t??r)&&(\"number\"==n||\"symbol\"!=n&&d.test(e))&&e>-1&&e%1==0&&e<t}function de(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||P)}function ue(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var le=function(e){var t=0,n=0;return function(){var i=H(),r=16-(i-n);if(n=i,r>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(oe);function he(e,t){return e===t||e!=e&&t!=t}var pe=ie(function(){return arguments}())?ie:function(e){return be(e)&&A.call(e,\"callee\")&&!B.call(e,\"callee\")},me=Array.isArray;function ye(e){return null!=e&&ve(e.length)&&!ge(e)}var fe=V||function(){return!1};function ge(e){if(!_e(e))return!1;var t=ne(e);return t==a||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function ve(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=r}function _e(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function be(e){return null!=e&&\"object\"==typeof e}var Se=w?function(e){return function(t){return e(t)}}(w):function(e){return be(e)&&ve(e.length)&&!!u[ne(e)]};function we(e){return ye(e)?function(e,t){var n=me(e),i=!n&&pe(e),r=!n&&!i&&fe(e),o=!n&&!i&&!r&&Se(e),a=n||i||r||o,s=a?function(e,t){for(var n=-1,i=Array(e);++n<e;)i[n]=t(n);return i}(e.length,String):[],c=s.length;for(var d in e)!t&&!A.call(e,d)||a&&(\"length\"==d||r&&(\"offset\"==d||\"parent\"==d)||o&&(\"buffer\"==d||\"byteLength\"==d||\"byteOffset\"==d)||ce(d,c))||s.push(d);return s}(e,!0):function(e){if(!_e(e))return function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}(e);var t=de(e),n=[];for(var i in e)(\"constructor\"!=i||!t&&A.call(e,i))&&n.push(i);return n}(e)}var Ce,Ie=(Ce=function(e,t,n){re(e,t,n)},function(e,t){return le(function(e,t,n){return t=q(void 0===t?e.length-1:t,0),function(){for(var i=arguments,r=-1,o=q(i.length-t,0),a=Array(o);++r<o;)a[r]=i[t+r];r=-1;for(var s=Array(t+1);++r<t;)s[r]=i[r];return s[t]=n(a),function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}(e,this,s)}}(e,t,Pe),e+\"\")}(function(e,t){var n=-1,i=t.length,r=i>1?t[i-1]:void 0,o=i>2?t[2]:void 0;for(r=Ce.length>3&&\"function\"==typeof r?(i--,r):void 0,o&&function(e,t,n){if(!_e(n))return!1;var i=typeof t;return!!(\"number\"==i?ye(n)&&ce(t,n.length):\"string\"==i&&t in n)&&he(n[t],e)}(t[0],t[1],o)&&(r=i<3?void 0:r,i=1),e=Object(e);++n<i;){var a=t[n];a&&Ce(e,a,n)}return e}));function Pe(e){return e}e.exports=Ie},9440(e,t,n){e=n.nmd(e),function(){var i,r=\"Expected a function\",o=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",s=32,c=128,d=1/0,u=9007199254740991,l=NaN,h=4294967295,p=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",s],[\"partialRight\",64],[\"rearg\",256]],m=\"[object Arguments]\",y=\"[object Array]\",f=\"[object Boolean]\",g=\"[object Date]\",v=\"[object Error]\",_=\"[object Function]\",b=\"[object GeneratorFunction]\",S=\"[object Map]\",w=\"[object Number]\",C=\"[object Object]\",I=\"[object Promise]\",P=\"[object RegExp]\",E=\"[object Set]\",O=\"[object String]\",A=\"[object Symbol]\",T=\"[object WeakMap]\",k=\"[object ArrayBuffer]\",x=\"[object DataView]\",M=\"[object Float32Array]\",N=\"[object Float64Array]\",D=\"[object Int8Array]\",R=\"[object Int16Array]\",z=\"[object Int32Array]\",F=\"[object Uint8Array]\",B=\"[object Uint8ClampedArray]\",j=\"[object Uint16Array]\",L=\"[object Uint32Array]\",U=/\\b__p \\+= '';/g,V=/\\b(__p \\+=) '' \\+/g,q=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,H=/&(?:amp|lt|gt|quot|#39);/g,G=/[&<>\"']/g,W=RegExp(H.source),$=RegExp(G.source),Y=/<%-([\\s\\S]+?)%>/g,K=/<%([\\s\\S]+?)%>/g,Q=/<%=([\\s\\S]+?)%>/g,J=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Z=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,ee=/[\\\\^$.*+?()[\\]{}|]/g,te=RegExp(ee.source),ne=/^\\s+/,ie=/\\s/,re=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,oe=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ae=/,? & /,se=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ce=/[()=,{}\\[\\]\\/\\s]/,de=/\\\\(\\\\)?/g,ue=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,le=/\\w*$/,he=/^[-+]0x[0-9a-f]+$/i,pe=/^0b[01]+$/i,me=/^\\[object .+?Constructor\\]$/,ye=/^0o[0-7]+$/i,fe=/^(?:0|[1-9]\\d*)$/,ge=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,ve=/($^)/,_e=/['\\n\\r\\u2028\\u2029\\\\]/g,be=\"\\\\ud800-\\\\udfff\",Se=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",we=\"\\\\u2700-\\\\u27bf\",Ce=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Ie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Pe=\"\\\\ufe0e\\\\ufe0f\",Ee=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Oe=\"[\"+be+\"]\",Ae=\"[\"+Ee+\"]\",Te=\"[\"+Se+\"]\",ke=\"\\\\d+\",xe=\"[\"+we+\"]\",Me=\"[\"+Ce+\"]\",Ne=\"[^\"+be+Ee+ke+we+Ce+Ie+\"]\",De=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Re=\"[^\"+be+\"]\",ze=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Fe=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Be=\"[\"+Ie+\"]\",je=\"\\\\u200d\",Le=\"(?:\"+Me+\"|\"+Ne+\")\",Ue=\"(?:\"+Be+\"|\"+Ne+\")\",Ve=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",qe=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",He=\"(?:\"+Te+\"|\"+De+\")?\",Ge=\"[\"+Pe+\"]?\",We=Ge+He+\"(?:\"+je+\"(?:\"+[Re,ze,Fe].join(\"|\")+\")\"+Ge+He+\")*\",$e=\"(?:\"+[xe,ze,Fe].join(\"|\")+\")\"+We,Ye=\"(?:\"+[Re+Te+\"?\",Te,ze,Fe,Oe].join(\"|\")+\")\",Ke=RegExp(\"['’]\",\"g\"),Qe=RegExp(Te,\"g\"),Je=RegExp(De+\"(?=\"+De+\")|\"+Ye+We,\"g\"),Ze=RegExp([Be+\"?\"+Me+\"+\"+Ve+\"(?=\"+[Ae,Be,\"$\"].join(\"|\")+\")\",Ue+\"+\"+qe+\"(?=\"+[Ae,Be+Le,\"$\"].join(\"|\")+\")\",Be+\"?\"+Le+\"+\"+Ve,Be+\"+\"+qe,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",ke,$e].join(\"|\"),\"g\"),Xe=RegExp(\"[\"+je+be+Se+Pe+\"]\"),et=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,tt=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],nt=-1,it={};it[M]=it[N]=it[D]=it[R]=it[z]=it[F]=it[B]=it[j]=it[L]=!0,it[m]=it[y]=it[k]=it[f]=it[x]=it[g]=it[v]=it[_]=it[S]=it[w]=it[C]=it[P]=it[E]=it[O]=it[T]=!1;var rt={};rt[m]=rt[y]=rt[k]=rt[x]=rt[f]=rt[g]=rt[M]=rt[N]=rt[D]=rt[R]=rt[z]=rt[S]=rt[w]=rt[C]=rt[P]=rt[E]=rt[O]=rt[A]=rt[F]=rt[B]=rt[j]=rt[L]=!0,rt[v]=rt[_]=rt[T]=!1;var ot={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},at=parseFloat,st=parseInt,ct=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,dt=\"object\"==typeof self&&self&&self.Object===Object&&self,ut=ct||dt||Function(\"return this\")(),lt=t&&!t.nodeType&&t,ht=lt&&e&&!e.nodeType&&e,pt=ht&&ht.exports===lt,mt=pt&&ct.process,yt=function(){try{return ht&&ht.require&&ht.require(\"util\").types||mt&&mt.binding&&mt.binding(\"util\")}catch(e){}}(),ft=yt&&yt.isArrayBuffer,gt=yt&&yt.isDate,vt=yt&&yt.isMap,_t=yt&&yt.isRegExp,bt=yt&&yt.isSet,St=yt&&yt.isTypedArray;function wt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function Ct(e,t,n,i){for(var r=-1,o=null==e?0:e.length;++r<o;){var a=e[r];t(i,a,n(a),e)}return i}function It(e,t){for(var n=-1,i=null==e?0:e.length;++n<i&&!1!==t(e[n],n,e););return e}function Pt(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function Et(e,t){for(var n=-1,i=null==e?0:e.length;++n<i;)if(!t(e[n],n,e))return!1;return!0}function Ot(e,t){for(var n=-1,i=null==e?0:e.length,r=0,o=[];++n<i;){var a=e[n];t(a,n,e)&&(o[r++]=a)}return o}function At(e,t){return!(null==e||!e.length)&&Bt(e,t,0)>-1}function Tt(e,t,n){for(var i=-1,r=null==e?0:e.length;++i<r;)if(n(t,e[i]))return!0;return!1}function kt(e,t){for(var n=-1,i=null==e?0:e.length,r=Array(i);++n<i;)r[n]=t(e[n],n,e);return r}function xt(e,t){for(var n=-1,i=t.length,r=e.length;++n<i;)e[r+n]=t[n];return e}function Mt(e,t,n,i){var r=-1,o=null==e?0:e.length;for(i&&o&&(n=e[++r]);++r<o;)n=t(n,e[r],r,e);return n}function Nt(e,t,n,i){var r=null==e?0:e.length;for(i&&r&&(n=e[--r]);r--;)n=t(n,e[r],r,e);return n}function Dt(e,t){for(var n=-1,i=null==e?0:e.length;++n<i;)if(t(e[n],n,e))return!0;return!1}var Rt=Vt(\"length\");function zt(e,t,n){var i;return n(e,function(e,n,r){if(t(e,n,r))return i=n,!1}),i}function Ft(e,t,n,i){for(var r=e.length,o=n+(i?1:-1);i?o--:++o<r;)if(t(e[o],o,e))return o;return-1}function Bt(e,t,n){return t==t?function(e,t,n){for(var i=n-1,r=e.length;++i<r;)if(e[i]===t)return i;return-1}(e,t,n):Ft(e,Lt,n)}function jt(e,t,n,i){for(var r=n-1,o=e.length;++r<o;)if(i(e[r],t))return r;return-1}function Lt(e){return e!=e}function Ut(e,t){var n=null==e?0:e.length;return n?Gt(e,t)/n:l}function Vt(e){return function(t){return null==t?i:t[e]}}function qt(e){return function(t){return null==e?i:e[t]}}function Ht(e,t,n,i,r){return r(e,function(e,r,o){n=i?(i=!1,e):t(n,e,r,o)}),n}function Gt(e,t){for(var n,r=-1,o=e.length;++r<o;){var a=t(e[r]);a!==i&&(n=n===i?a:n+a)}return n}function Wt(e,t){for(var n=-1,i=Array(e);++n<e;)i[n]=t(n);return i}function $t(e){return e?e.slice(0,ln(e)+1).replace(ne,\"\"):e}function Yt(e){return function(t){return e(t)}}function Kt(e,t){return kt(t,function(t){return e[t]})}function Qt(e,t){return e.has(t)}function Jt(e,t){for(var n=-1,i=e.length;++n<i&&Bt(t,e[n],0)>-1;);return n}function Zt(e,t){for(var n=e.length;n--&&Bt(t,e[n],0)>-1;);return n}var Xt=qt({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),en=qt({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function tn(e){return\"\\\\\"+ot[e]}function nn(e){return Xe.test(e)}function rn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,i){n[++t]=[i,e]}),n}function on(e,t){return function(n){return e(t(n))}}function an(e,t){for(var n=-1,i=e.length,r=0,o=[];++n<i;){var s=e[n];s!==t&&s!==a||(e[n]=a,o[r++]=n)}return o}function sn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}function cn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=[e,e]}),n}function dn(e){return nn(e)?function(e){for(var t=Je.lastIndex=0;Je.test(e);)++t;return t}(e):Rt(e)}function un(e){return nn(e)?function(e){return e.match(Je)||[]}(e):function(e){return e.split(\"\")}(e)}function ln(e){for(var t=e.length;t--&&ie.test(e.charAt(t)););return t}var hn=qt({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pn=function e(t){var n,ie=(t=null==t?ut:pn.defaults(ut.Object(),t,pn.pick(ut,tt))).Array,be=t.Date,Se=t.Error,we=t.Function,Ce=t.Math,Ie=t.Object,Pe=t.RegExp,Ee=t.String,Oe=t.TypeError,Ae=ie.prototype,Te=we.prototype,ke=Ie.prototype,xe=t[\"__core-js_shared__\"],Me=Te.toString,Ne=ke.hasOwnProperty,De=0,Re=(n=/[^.]+$/.exec(xe&&xe.keys&&xe.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",ze=ke.toString,Fe=Me.call(Ie),Be=ut._,je=Pe(\"^\"+Me.call(Ne).replace(ee,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Le=pt?t.Buffer:i,Ue=t.Symbol,Ve=t.Uint8Array,qe=Le?Le.allocUnsafe:i,He=on(Ie.getPrototypeOf,Ie),Ge=Ie.create,We=ke.propertyIsEnumerable,$e=Ae.splice,Ye=Ue?Ue.isConcatSpreadable:i,Je=Ue?Ue.iterator:i,Xe=Ue?Ue.toStringTag:i,ot=function(){try{var e=co(Ie,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),ct=t.clearTimeout!==ut.clearTimeout&&t.clearTimeout,dt=be&&be.now!==ut.Date.now&&be.now,lt=t.setTimeout!==ut.setTimeout&&t.setTimeout,ht=Ce.ceil,mt=Ce.floor,yt=Ie.getOwnPropertySymbols,Rt=Le?Le.isBuffer:i,qt=t.isFinite,mn=Ae.join,yn=on(Ie.keys,Ie),fn=Ce.max,gn=Ce.min,vn=be.now,_n=t.parseInt,bn=Ce.random,Sn=Ae.reverse,wn=co(t,\"DataView\"),Cn=co(t,\"Map\"),In=co(t,\"Promise\"),Pn=co(t,\"Set\"),En=co(t,\"WeakMap\"),On=co(Ie,\"create\"),An=En&&new En,Tn={},kn=Fo(wn),xn=Fo(Cn),Mn=Fo(In),Nn=Fo(Pn),Dn=Fo(En),Rn=Ue?Ue.prototype:i,zn=Rn?Rn.valueOf:i,Fn=Rn?Rn.toString:i;function Bn(e){if(es(e)&&!qa(e)&&!(e instanceof Vn)){if(e instanceof Un)return e;if(Ne.call(e,\"__wrapped__\"))return Bo(e)}return new Un(e)}var jn=function(){function e(){}return function(t){if(!Xa(t))return{};if(Ge)return Ge(t);e.prototype=t;var n=new e;return e.prototype=i,n}}();function Ln(){}function Un(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=i}function Vn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function qn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function Hn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function Gn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function Wn(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new Gn;++t<n;)this.add(e[t])}function $n(e){var t=this.__data__=new Hn(e);this.size=t.size}function Yn(e,t){var n=qa(e),i=!n&&Va(e),r=!n&&!i&&$a(e),o=!n&&!i&&!r&&cs(e),a=n||i||r||o,s=a?Wt(e.length,Ee):[],c=s.length;for(var d in e)!t&&!Ne.call(e,d)||a&&(\"length\"==d||r&&(\"offset\"==d||\"parent\"==d)||o&&(\"buffer\"==d||\"byteLength\"==d||\"byteOffset\"==d)||fo(d,c))||s.push(d);return s}function Kn(e){var t=e.length;return t?e[Gi(0,t-1)]:i}function Qn(e,t){return Mo(Er(e),oi(t,0,e.length))}function Jn(e){return Mo(Er(e))}function Zn(e,t,n){(n!==i&&!ja(e[t],n)||n===i&&!(t in e))&&ii(e,t,n)}function Xn(e,t,n){var r=e[t];Ne.call(e,t)&&ja(r,n)&&(n!==i||t in e)||ii(e,t,n)}function ei(e,t){for(var n=e.length;n--;)if(ja(e[n][0],t))return n;return-1}function ti(e,t,n,i){return ui(e,function(e,r,o){t(i,e,n(e),o)}),i}function ni(e,t){return e&&Or(t,ks(t),e)}function ii(e,t,n){\"__proto__\"==t&&ot?ot(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function ri(e,t){for(var n=-1,r=t.length,o=ie(r),a=null==e;++n<r;)o[n]=a?i:Ps(e,t[n]);return o}function oi(e,t,n){return e==e&&(n!==i&&(e=e<=n?e:n),t!==i&&(e=e>=t?e:t)),e}function ai(e,t,n,r,o,a){var s,c=1&t,d=2&t,u=4&t;if(n&&(s=o?n(e,r,o,a):n(e)),s!==i)return s;if(!Xa(e))return e;var l=qa(e);if(l){if(s=function(e){var t=e.length,n=new e.constructor(t);return t&&\"string\"==typeof e[0]&&Ne.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}(e),!c)return Er(e,s)}else{var h=ho(e),p=h==_||h==b;if($a(e))return br(e,c);if(h==C||h==m||p&&!o){if(s=d||p?{}:mo(e),!c)return d?function(e,t){return Or(e,lo(e),t)}(e,function(e,t){return e&&Or(t,xs(t),e)}(s,e)):function(e,t){return Or(e,uo(e),t)}(e,ni(s,e))}else{if(!rt[h])return o?e:{};s=function(e,t,n){var i,r=e.constructor;switch(t){case k:return Sr(e);case f:case g:return new r(+e);case x:return function(e,t){var n=t?Sr(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case M:case N:case D:case R:case z:case F:case B:case j:case L:return wr(e,n);case S:return new r;case w:case O:return new r(e);case P:return function(e){var t=new e.constructor(e.source,le.exec(e));return t.lastIndex=e.lastIndex,t}(e);case E:return new r;case A:return i=e,zn?Ie(zn.call(i)):{}}}(e,h,c)}}a||(a=new $n);var y=a.get(e);if(y)return y;a.set(e,s),os(e)?e.forEach(function(i){s.add(ai(i,t,n,i,e,a))}):ts(e)&&e.forEach(function(i,r){s.set(r,ai(i,t,n,r,e,a))});var v=l?i:(u?d?to:eo:d?xs:ks)(e);return It(v||e,function(i,r){v&&(i=e[r=i]),Xn(s,r,ai(i,t,n,r,e,a))}),s}function si(e,t,n){var r=n.length;if(null==e)return!r;for(e=Ie(e);r--;){var o=n[r],a=t[o],s=e[o];if(s===i&&!(o in e)||!a(s))return!1}return!0}function ci(e,t,n){if(\"function\"!=typeof e)throw new Oe(r);return Ao(function(){e.apply(i,n)},t)}function di(e,t,n,i){var r=-1,o=At,a=!0,s=e.length,c=[],d=t.length;if(!s)return c;n&&(t=kt(t,Yt(n))),i?(o=Tt,a=!1):t.length>=200&&(o=Qt,a=!1,t=new Wn(t));e:for(;++r<s;){var u=e[r],l=null==n?u:n(u);if(u=i||0!==u?u:0,a&&l==l){for(var h=d;h--;)if(t[h]===l)continue e;c.push(u)}else o(t,l,i)||c.push(u)}return c}Bn.templateSettings={escape:Y,evaluate:K,interpolate:Q,variable:\"\",imports:{_:Bn}},Bn.prototype=Ln.prototype,Bn.prototype.constructor=Bn,Un.prototype=jn(Ln.prototype),Un.prototype.constructor=Un,Vn.prototype=jn(Ln.prototype),Vn.prototype.constructor=Vn,qn.prototype.clear=function(){this.__data__=On?On(null):{},this.size=0},qn.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},qn.prototype.get=function(e){var t=this.__data__;if(On){var n=t[e];return n===o?i:n}return Ne.call(t,e)?t[e]:i},qn.prototype.has=function(e){var t=this.__data__;return On?t[e]!==i:Ne.call(t,e)},qn.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=On&&t===i?o:t,this},Hn.prototype.clear=function(){this.__data__=[],this.size=0},Hn.prototype.delete=function(e){var t=this.__data__,n=ei(t,e);return!(n<0||(n==t.length-1?t.pop():$e.call(t,n,1),--this.size,0))},Hn.prototype.get=function(e){var t=this.__data__,n=ei(t,e);return n<0?i:t[n][1]},Hn.prototype.has=function(e){return ei(this.__data__,e)>-1},Hn.prototype.set=function(e,t){var n=this.__data__,i=ei(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this},Gn.prototype.clear=function(){this.size=0,this.__data__={hash:new qn,map:new(Cn||Hn),string:new qn}},Gn.prototype.delete=function(e){var t=ao(this,e).delete(e);return this.size-=t?1:0,t},Gn.prototype.get=function(e){return ao(this,e).get(e)},Gn.prototype.has=function(e){return ao(this,e).has(e)},Gn.prototype.set=function(e,t){var n=ao(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this},Wn.prototype.add=Wn.prototype.push=function(e){return this.__data__.set(e,o),this},Wn.prototype.has=function(e){return this.__data__.has(e)},$n.prototype.clear=function(){this.__data__=new Hn,this.size=0},$n.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},$n.prototype.get=function(e){return this.__data__.get(e)},$n.prototype.has=function(e){return this.__data__.has(e)},$n.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Hn){var i=n.__data__;if(!Cn||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new Gn(i)}return n.set(e,t),this.size=n.size,this};var ui=kr(vi),li=kr(_i,!0);function hi(e,t){var n=!0;return ui(e,function(e,i,r){return n=!!t(e,i,r)}),n}function pi(e,t,n){for(var r=-1,o=e.length;++r<o;){var a=e[r],s=t(a);if(null!=s&&(c===i?s==s&&!ss(s):n(s,c)))var c=s,d=a}return d}function mi(e,t){var n=[];return ui(e,function(e,i,r){t(e,i,r)&&n.push(e)}),n}function yi(e,t,n,i,r){var o=-1,a=e.length;for(n||(n=yo),r||(r=[]);++o<a;){var s=e[o];t>0&&n(s)?t>1?yi(s,t-1,n,i,r):xt(r,s):i||(r[r.length]=s)}return r}var fi=xr(),gi=xr(!0);function vi(e,t){return e&&fi(e,t,ks)}function _i(e,t){return e&&gi(e,t,ks)}function bi(e,t){return Ot(t,function(t){return Qa(e[t])})}function Si(e,t){for(var n=0,r=(t=fr(t,e)).length;null!=e&&n<r;)e=e[zo(t[n++])];return n&&n==r?e:i}function wi(e,t,n){var i=t(e);return qa(e)?i:xt(i,n(e))}function Ci(e){return null==e?e===i?\"[object Undefined]\":\"[object Null]\":Xe&&Xe in Ie(e)?function(e){var t=Ne.call(e,Xe),n=e[Xe];try{e[Xe]=i;var r=!0}catch(e){}var o=ze.call(e);return r&&(t?e[Xe]=n:delete e[Xe]),o}(e):function(e){return ze.call(e)}(e)}function Ii(e,t){return e>t}function Pi(e,t){return null!=e&&Ne.call(e,t)}function Ei(e,t){return null!=e&&t in Ie(e)}function Oi(e,t,n){for(var r=n?Tt:At,o=e[0].length,a=e.length,s=a,c=ie(a),d=1/0,u=[];s--;){var l=e[s];s&&t&&(l=kt(l,Yt(t))),d=gn(l.length,d),c[s]=!n&&(t||o>=120&&l.length>=120)?new Wn(s&&l):i}l=e[0];var h=-1,p=c[0];e:for(;++h<o&&u.length<d;){var m=l[h],y=t?t(m):m;if(m=n||0!==m?m:0,!(p?Qt(p,y):r(u,y,n))){for(s=a;--s;){var f=c[s];if(!(f?Qt(f,y):r(e[s],y,n)))continue e}p&&p.push(y),u.push(m)}}return u}function Ai(e,t,n){var r=null==(e=Po(e,t=fr(t,e)))?e:e[zo(Ko(t))];return null==r?i:wt(r,e,n)}function Ti(e){return es(e)&&Ci(e)==m}function ki(e,t,n,r,o){return e===t||(null==e||null==t||!es(e)&&!es(t)?e!=e&&t!=t:function(e,t,n,r,o,a){var s=qa(e),c=qa(t),d=s?y:ho(e),u=c?y:ho(t),l=(d=d==m?C:d)==C,h=(u=u==m?C:u)==C,p=d==u;if(p&&$a(e)){if(!$a(t))return!1;s=!0,l=!1}if(p&&!l)return a||(a=new $n),s||cs(e)?Zr(e,t,n,r,o,a):function(e,t,n,i,r,o,a){switch(n){case x:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case k:return!(e.byteLength!=t.byteLength||!o(new Ve(e),new Ve(t)));case f:case g:case w:return ja(+e,+t);case v:return e.name==t.name&&e.message==t.message;case P:case O:return e==t+\"\";case S:var s=rn;case E:var c=1&i;if(s||(s=sn),e.size!=t.size&&!c)return!1;var d=a.get(e);if(d)return d==t;i|=2,a.set(e,t);var u=Zr(s(e),s(t),i,r,o,a);return a.delete(e),u;case A:if(zn)return zn.call(e)==zn.call(t)}return!1}(e,t,d,n,r,o,a);if(!(1&n)){var _=l&&Ne.call(e,\"__wrapped__\"),b=h&&Ne.call(t,\"__wrapped__\");if(_||b){var I=_?e.value():e,T=b?t.value():t;return a||(a=new $n),o(I,T,n,r,a)}}return!!p&&(a||(a=new $n),function(e,t,n,r,o,a){var s=1&n,c=eo(e),d=c.length;if(d!=eo(t).length&&!s)return!1;for(var u=d;u--;){var l=c[u];if(!(s?l in t:Ne.call(t,l)))return!1}var h=a.get(e),p=a.get(t);if(h&&p)return h==t&&p==e;var m=!0;a.set(e,t),a.set(t,e);for(var y=s;++u<d;){var f=e[l=c[u]],g=t[l];if(r)var v=s?r(g,f,l,t,e,a):r(f,g,l,e,t,a);if(!(v===i?f===g||o(f,g,n,r,a):v)){m=!1;break}y||(y=\"constructor\"==l)}if(m&&!y){var _=e.constructor,b=t.constructor;_==b||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof _&&_ instanceof _&&\"function\"==typeof b&&b instanceof b||(m=!1)}return a.delete(e),a.delete(t),m}(e,t,n,r,o,a))}(e,t,n,r,ki,o))}function xi(e,t,n,r){var o=n.length,a=o,s=!r;if(null==e)return!a;for(e=Ie(e);o--;){var c=n[o];if(s&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++o<a;){var d=(c=n[o])[0],u=e[d],l=c[1];if(s&&c[2]){if(u===i&&!(d in e))return!1}else{var h=new $n;if(r)var p=r(u,l,d,e,t,h);if(!(p===i?ki(l,u,3,r,h):p))return!1}}return!0}function Mi(e){return!(!Xa(e)||(t=e,Re&&Re in t))&&(Qa(e)?je:me).test(Fo(e));var t}function Ni(e){return\"function\"==typeof e?e:null==e?nc:\"object\"==typeof e?qa(e)?Bi(e[0],e[1]):Fi(e):lc(e)}function Di(e){if(!So(e))return yn(e);var t=[];for(var n in Ie(e))Ne.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}function Ri(e,t){return e<t}function zi(e,t){var n=-1,i=Ga(e)?ie(e.length):[];return ui(e,function(e,r,o){i[++n]=t(e,r,o)}),i}function Fi(e){var t=so(e);return 1==t.length&&t[0][2]?Co(t[0][0],t[0][1]):function(n){return n===e||xi(n,e,t)}}function Bi(e,t){return vo(e)&&wo(t)?Co(zo(e),t):function(n){var r=Ps(n,e);return r===i&&r===t?Es(n,e):ki(t,r,3)}}function ji(e,t,n,r,o){e!==t&&fi(t,function(a,s){if(o||(o=new $n),Xa(a))!function(e,t,n,r,o,a,s){var c=Eo(e,n),d=Eo(t,n),u=s.get(d);if(u)Zn(e,n,u);else{var l=a?a(c,d,n+\"\",e,t,s):i,h=l===i;if(h){var p=qa(d),m=!p&&$a(d),y=!p&&!m&&cs(d);l=d,p||m||y?qa(c)?l=c:Wa(c)?l=Er(c):m?(h=!1,l=br(d,!0)):y?(h=!1,l=wr(d,!0)):l=[]:is(d)||Va(d)?(l=c,Va(c)?l=fs(c):Xa(c)&&!Qa(c)||(l=mo(d))):h=!1}h&&(s.set(d,l),o(l,d,r,a,s),s.delete(d)),Zn(e,n,l)}}(e,t,s,n,ji,r,o);else{var c=r?r(Eo(e,s),a,s+\"\",e,t,o):i;c===i&&(c=a),Zn(e,s,c)}},xs)}function Li(e,t){var n=e.length;if(n)return fo(t+=t<0?n:0,n)?e[t]:i}function Ui(e,t,n){t=t.length?kt(t,function(e){return qa(e)?function(t){return Si(t,1===e.length?e[0]:e)}:e}):[nc];var i=-1;t=kt(t,Yt(oo()));var r=zi(e,function(e,n,r){var o=kt(t,function(t){return t(e)});return{criteria:o,index:++i,value:e}});return function(e){var t=e.length;for(e.sort(function(e,t){return function(e,t,n){for(var i=-1,r=e.criteria,o=t.criteria,a=r.length,s=n.length;++i<a;){var c=Cr(r[i],o[i]);if(c)return i>=s?c:c*(\"desc\"==n[i]?-1:1)}return e.index-t.index}(e,t,n)});t--;)e[t]=e[t].value;return e}(r)}function Vi(e,t,n){for(var i=-1,r=t.length,o={};++i<r;){var a=t[i],s=Si(e,a);n(s,a)&&Qi(o,fr(a,e),s)}return o}function qi(e,t,n,i){var r=i?jt:Bt,o=-1,a=t.length,s=e;for(e===t&&(t=Er(t)),n&&(s=kt(e,Yt(n)));++o<a;)for(var c=0,d=t[o],u=n?n(d):d;(c=r(s,u,c,i))>-1;)s!==e&&$e.call(s,c,1),$e.call(e,c,1);return e}function Hi(e,t){for(var n=e?t.length:0,i=n-1;n--;){var r=t[n];if(n==i||r!==o){var o=r;fo(r)?$e.call(e,r,1):cr(e,r)}}return e}function Gi(e,t){return e+mt(bn()*(t-e+1))}function Wi(e,t){var n=\"\";if(!e||t<1||t>u)return n;do{t%2&&(n+=e),(t=mt(t/2))&&(e+=e)}while(t);return n}function $i(e,t){return To(Io(e,t,nc),e+\"\")}function Yi(e){return Kn(js(e))}function Ki(e,t){var n=js(e);return Mo(n,oi(t,0,n.length))}function Qi(e,t,n,r){if(!Xa(e))return e;for(var o=-1,a=(t=fr(t,e)).length,s=a-1,c=e;null!=c&&++o<a;){var d=zo(t[o]),u=n;if(\"__proto__\"===d||\"constructor\"===d||\"prototype\"===d)return e;if(o!=s){var l=c[d];(u=r?r(l,d,c):i)===i&&(u=Xa(l)?l:fo(t[o+1])?[]:{})}Xn(c,d,u),c=c[d]}return e}var Ji=An?function(e,t){return An.set(e,t),e}:nc,Zi=ot?function(e,t){return ot(e,\"toString\",{configurable:!0,enumerable:!1,value:Xs(t),writable:!0})}:nc;function Xi(e){return Mo(js(e))}function er(e,t,n){var i=-1,r=e.length;t<0&&(t=-t>r?0:r+t),(n=n>r?r:n)<0&&(n+=r),r=t>n?0:n-t>>>0,t>>>=0;for(var o=ie(r);++i<r;)o[i]=e[i+t];return o}function tr(e,t){var n;return ui(e,function(e,i,r){return!(n=t(e,i,r))}),!!n}function nr(e,t,n){var i=0,r=null==e?i:e.length;if(\"number\"==typeof t&&t==t&&r<=2147483647){for(;i<r;){var o=i+r>>>1,a=e[o];null!==a&&!ss(a)&&(n?a<=t:a<t)?i=o+1:r=o}return r}return ir(e,t,nc,n)}function ir(e,t,n,r){var o=0,a=null==e?0:e.length;if(0===a)return 0;for(var s=(t=n(t))!=t,c=null===t,d=ss(t),u=t===i;o<a;){var l=mt((o+a)/2),h=n(e[l]),p=h!==i,m=null===h,y=h==h,f=ss(h);if(s)var g=r||y;else g=u?y&&(r||p):c?y&&p&&(r||!m):d?y&&p&&!m&&(r||!f):!m&&!f&&(r?h<=t:h<t);g?o=l+1:a=l}return gn(a,4294967294)}function rr(e,t){for(var n=-1,i=e.length,r=0,o=[];++n<i;){var a=e[n],s=t?t(a):a;if(!n||!ja(s,c)){var c=s;o[r++]=0===a?0:a}}return o}function or(e){return\"number\"==typeof e?e:ss(e)?l:+e}function ar(e){if(\"string\"==typeof e)return e;if(qa(e))return kt(e,ar)+\"\";if(ss(e))return Fn?Fn.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function sr(e,t,n){var i=-1,r=At,o=e.length,a=!0,s=[],c=s;if(n)a=!1,r=Tt;else if(o>=200){var d=t?null:Wr(e);if(d)return sn(d);a=!1,r=Qt,c=new Wn}else c=t?[]:s;e:for(;++i<o;){var u=e[i],l=t?t(u):u;if(u=n||0!==u?u:0,a&&l==l){for(var h=c.length;h--;)if(c[h]===l)continue e;t&&c.push(l),s.push(u)}else r(c,l,n)||(c!==s&&c.push(l),s.push(u))}return s}function cr(e,t){var n=-1,i=(t=fr(t,e)).length;if(!i)return!0;for(;++n<i;){var r=zo(t[n]);if(\"__proto__\"===r&&!Ne.call(e,\"__proto__\"))return!1;if((\"constructor\"===r||\"prototype\"===r)&&n<i-1)return!1}var o=Po(e,t);return null==o||delete o[zo(Ko(t))]}function dr(e,t,n,i){return Qi(e,t,n(Si(e,t)),i)}function ur(e,t,n,i){for(var r=e.length,o=i?r:-1;(i?o--:++o<r)&&t(e[o],o,e););return n?er(e,i?0:o,i?o+1:r):er(e,i?o+1:0,i?r:o)}function lr(e,t){var n=e;return n instanceof Vn&&(n=n.value()),Mt(t,function(e,t){return t.func.apply(t.thisArg,xt([e],t.args))},n)}function hr(e,t,n){var i=e.length;if(i<2)return i?sr(e[0]):[];for(var r=-1,o=ie(i);++r<i;)for(var a=e[r],s=-1;++s<i;)s!=r&&(o[r]=di(o[r]||a,e[s],t,n));return sr(yi(o,1),t,n)}function pr(e,t,n){for(var r=-1,o=e.length,a=t.length,s={};++r<o;){var c=r<a?t[r]:i;n(s,e[r],c)}return s}function mr(e){return Wa(e)?e:[]}function yr(e){return\"function\"==typeof e?e:nc}function fr(e,t){return qa(e)?e:vo(e,t)?[e]:Ro(gs(e))}var gr=$i;function vr(e,t,n){var r=e.length;return n=n===i?r:n,!t&&n>=r?e:er(e,t,n)}var _r=ct||function(e){return ut.clearTimeout(e)};function br(e,t){if(t)return e.slice();var n=e.length,i=qe?qe(n):new e.constructor(n);return e.copy(i),i}function Sr(e){var t=new e.constructor(e.byteLength);return new Ve(t).set(new Ve(e)),t}function wr(e,t){var n=t?Sr(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function Cr(e,t){if(e!==t){var n=e!==i,r=null===e,o=e==e,a=ss(e),s=t!==i,c=null===t,d=t==t,u=ss(t);if(!c&&!u&&!a&&e>t||a&&s&&d&&!c&&!u||r&&s&&d||!n&&d||!o)return 1;if(!r&&!a&&!u&&e<t||u&&n&&o&&!r&&!a||c&&n&&o||!s&&o||!d)return-1}return 0}function Ir(e,t,n,i){for(var r=-1,o=e.length,a=n.length,s=-1,c=t.length,d=fn(o-a,0),u=ie(c+d),l=!i;++s<c;)u[s]=t[s];for(;++r<a;)(l||r<o)&&(u[n[r]]=e[r]);for(;d--;)u[s++]=e[r++];return u}function Pr(e,t,n,i){for(var r=-1,o=e.length,a=-1,s=n.length,c=-1,d=t.length,u=fn(o-s,0),l=ie(u+d),h=!i;++r<u;)l[r]=e[r];for(var p=r;++c<d;)l[p+c]=t[c];for(;++a<s;)(h||r<o)&&(l[p+n[a]]=e[r++]);return l}function Er(e,t){var n=-1,i=e.length;for(t||(t=ie(i));++n<i;)t[n]=e[n];return t}function Or(e,t,n,r){var o=!n;n||(n={});for(var a=-1,s=t.length;++a<s;){var c=t[a],d=r?r(n[c],e[c],c,n,e):i;d===i&&(d=e[c]),o?ii(n,c,d):Xn(n,c,d)}return n}function Ar(e,t){return function(n,i){var r=qa(n)?Ct:ti,o=t?t():{};return r(n,e,oo(i,2),o)}}function Tr(e){return $i(function(t,n){var r=-1,o=n.length,a=o>1?n[o-1]:i,s=o>2?n[2]:i;for(a=e.length>3&&\"function\"==typeof a?(o--,a):i,s&&go(n[0],n[1],s)&&(a=o<3?i:a,o=1),t=Ie(t);++r<o;){var c=n[r];c&&e(t,c,r,a)}return t})}function kr(e,t){return function(n,i){if(null==n)return n;if(!Ga(n))return e(n,i);for(var r=n.length,o=t?r:-1,a=Ie(n);(t?o--:++o<r)&&!1!==i(a[o],o,a););return n}}function xr(e){return function(t,n,i){for(var r=-1,o=Ie(t),a=i(t),s=a.length;s--;){var c=a[e?s:++r];if(!1===n(o[c],c,o))break}return t}}function Mr(e){return function(t){var n=nn(t=gs(t))?un(t):i,r=n?n[0]:t.charAt(0),o=n?vr(n,1).join(\"\"):t.slice(1);return r[e]()+o}}function Nr(e){return function(t){return Mt(Qs(Vs(t).replace(Ke,\"\")),e,\"\")}}function Dr(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=jn(e.prototype),i=e.apply(n,t);return Xa(i)?i:n}}function Rr(e){return function(t,n,r){var o=Ie(t);if(!Ga(t)){var a=oo(n,3);t=ks(t),n=function(e){return a(o[e],e,o)}}var s=e(t,n,r);return s>-1?o[a?t[s]:s]:i}}function zr(e){return Xr(function(t){var n=t.length,o=n,a=Un.prototype.thru;for(e&&t.reverse();o--;){var s=t[o];if(\"function\"!=typeof s)throw new Oe(r);if(a&&!c&&\"wrapper\"==io(s))var c=new Un([],!0)}for(o=c?o:n;++o<n;){var d=io(s=t[o]),u=\"wrapper\"==d?no(s):i;c=u&&_o(u[0])&&424==u[1]&&!u[4].length&&1==u[9]?c[io(u[0])].apply(c,u[3]):1==s.length&&_o(s)?c[d]():c.thru(s)}return function(){var e=arguments,i=e[0];if(c&&1==e.length&&qa(i))return c.plant(i).value();for(var r=0,o=n?t[r].apply(this,e):i;++r<n;)o=t[r].call(this,o);return o}})}function Fr(e,t,n,r,o,a,s,d,u,l){var h=t&c,p=1&t,m=2&t,y=24&t,f=512&t,g=m?i:Dr(e);return function c(){for(var v=arguments.length,_=ie(v),b=v;b--;)_[b]=arguments[b];if(y)var S=ro(c),w=function(e,t){for(var n=e.length,i=0;n--;)e[n]===t&&++i;return i}(_,S);if(r&&(_=Ir(_,r,o,y)),a&&(_=Pr(_,a,s,y)),v-=w,y&&v<l){var C=an(_,S);return Hr(e,t,Fr,c.placeholder,n,_,C,d,u,l-v)}var I=p?n:this,P=m?I[e]:e;return v=_.length,d?_=function(e,t){for(var n=e.length,r=gn(t.length,n),o=Er(e);r--;){var a=t[r];e[r]=fo(a,n)?o[a]:i}return e}(_,d):f&&v>1&&_.reverse(),h&&u<v&&(_.length=u),this&&this!==ut&&this instanceof c&&(P=g||Dr(P)),P.apply(I,_)}}function Br(e,t){return function(n,i){return function(e,t,n,i){return vi(e,function(e,r,o){t(i,n(e),r,o)}),i}(n,e,t(i),{})}}function jr(e,t){return function(n,r){var o;if(n===i&&r===i)return t;if(n!==i&&(o=n),r!==i){if(o===i)return r;\"string\"==typeof n||\"string\"==typeof r?(n=ar(n),r=ar(r)):(n=or(n),r=or(r)),o=e(n,r)}return o}}function Lr(e){return Xr(function(t){return t=kt(t,Yt(oo())),$i(function(n){var i=this;return e(t,function(e){return wt(e,i,n)})})})}function Ur(e,t){var n=(t=t===i?\" \":ar(t)).length;if(n<2)return n?Wi(t,e):t;var r=Wi(t,ht(e/dn(t)));return nn(t)?vr(un(r),0,e).join(\"\"):r.slice(0,e)}function Vr(e){return function(t,n,r){return r&&\"number\"!=typeof r&&go(t,n,r)&&(n=r=i),t=hs(t),n===i?(n=t,t=0):n=hs(n),function(e,t,n,i){for(var r=-1,o=fn(ht((t-e)/(n||1)),0),a=ie(o);o--;)a[i?o:++r]=e,e+=n;return a}(t,n,r=r===i?t<n?1:-1:hs(r),e)}}function qr(e){return function(t,n){return\"string\"==typeof t&&\"string\"==typeof n||(t=ys(t),n=ys(n)),e(t,n)}}function Hr(e,t,n,r,o,a,c,d,u,l){var h=8&t;t|=h?s:64,4&(t&=~(h?64:s))||(t&=-4);var p=[e,t,o,h?a:i,h?c:i,h?i:a,h?i:c,d,u,l],m=n.apply(i,p);return _o(e)&&Oo(m,p),m.placeholder=r,ko(m,e,t)}function Gr(e){var t=Ce[e];return function(e,n){if(e=ys(e),(n=null==n?0:gn(ps(n),292))&&qt(e)){var i=(gs(e)+\"e\").split(\"e\");return+((i=(gs(t(i[0]+\"e\"+(+i[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+i[1]-n))}return t(e)}}var Wr=Pn&&1/sn(new Pn([,-0]))[1]==d?function(e){return new Pn(e)}:sc;function $r(e){return function(t){var n=ho(t);return n==S?rn(t):n==E?cn(t):function(e,t){return kt(t,function(t){return[t,e[t]]})}(t,e(t))}}function Yr(e,t,n,o,d,u,l,h){var p=2&t;if(!p&&\"function\"!=typeof e)throw new Oe(r);var m=o?o.length:0;if(m||(t&=-97,o=d=i),l=l===i?l:fn(ps(l),0),h=h===i?h:ps(h),m-=d?d.length:0,64&t){var y=o,f=d;o=d=i}var g=p?i:no(e),v=[e,t,n,o,d,y,f,u,l,h];if(g&&function(e,t){var n=e[1],i=t[1],r=n|i,o=r<131,s=i==c&&8==n||i==c&&256==n&&e[7].length<=t[8]||384==i&&t[7].length<=t[8]&&8==n;if(!o&&!s)return e;1&i&&(e[2]=t[2],r|=1&n?0:4);var d=t[3];if(d){var u=e[3];e[3]=u?Ir(u,d,t[4]):d,e[4]=u?an(e[3],a):t[4]}(d=t[5])&&(u=e[5],e[5]=u?Pr(u,d,t[6]):d,e[6]=u?an(e[5],a):t[6]),(d=t[7])&&(e[7]=d),i&c&&(e[8]=null==e[8]?t[8]:gn(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=r}(v,g),e=v[0],t=v[1],n=v[2],o=v[3],d=v[4],!(h=v[9]=v[9]===i?p?0:e.length:fn(v[9]-m,0))&&24&t&&(t&=-25),t&&1!=t)_=8==t||16==t?function(e,t,n){var r=Dr(e);return function o(){for(var a=arguments.length,s=ie(a),c=a,d=ro(o);c--;)s[c]=arguments[c];var u=a<3&&s[0]!==d&&s[a-1]!==d?[]:an(s,d);return(a-=u.length)<n?Hr(e,t,Fr,o.placeholder,i,s,u,i,i,n-a):wt(this&&this!==ut&&this instanceof o?r:e,this,s)}}(e,t,h):t!=s&&33!=t||d.length?Fr.apply(i,v):function(e,t,n,i){var r=1&t,o=Dr(e);return function t(){for(var a=-1,s=arguments.length,c=-1,d=i.length,u=ie(d+s),l=this&&this!==ut&&this instanceof t?o:e;++c<d;)u[c]=i[c];for(;s--;)u[c++]=arguments[++a];return wt(l,r?n:this,u)}}(e,t,n,o);else var _=function(e,t,n){var i=1&t,r=Dr(e);return function t(){return(this&&this!==ut&&this instanceof t?r:e).apply(i?n:this,arguments)}}(e,t,n);return ko((g?Ji:Oo)(_,v),e,t)}function Kr(e,t,n,r){return e===i||ja(e,ke[n])&&!Ne.call(r,n)?t:e}function Qr(e,t,n,r,o,a){return Xa(e)&&Xa(t)&&(a.set(t,e),ji(e,t,i,Qr,a),a.delete(t)),e}function Jr(e){return is(e)?i:e}function Zr(e,t,n,r,o,a){var s=1&n,c=e.length,d=t.length;if(c!=d&&!(s&&d>c))return!1;var u=a.get(e),l=a.get(t);if(u&&l)return u==t&&l==e;var h=-1,p=!0,m=2&n?new Wn:i;for(a.set(e,t),a.set(t,e);++h<c;){var y=e[h],f=t[h];if(r)var g=s?r(f,y,h,t,e,a):r(y,f,h,e,t,a);if(g!==i){if(g)continue;p=!1;break}if(m){if(!Dt(t,function(e,t){if(!Qt(m,t)&&(y===e||o(y,e,n,r,a)))return m.push(t)})){p=!1;break}}else if(y!==f&&!o(y,f,n,r,a)){p=!1;break}}return a.delete(e),a.delete(t),p}function Xr(e){return To(Io(e,i,Ho),e+\"\")}function eo(e){return wi(e,ks,uo)}function to(e){return wi(e,xs,lo)}var no=An?function(e){return An.get(e)}:sc;function io(e){for(var t=e.name+\"\",n=Tn[t],i=Ne.call(Tn,t)?n.length:0;i--;){var r=n[i],o=r.func;if(null==o||o==e)return r.name}return t}function ro(e){return(Ne.call(Bn,\"placeholder\")?Bn:e).placeholder}function oo(){var e=Bn.iteratee||ic;return e=e===ic?Ni:e,arguments.length?e(arguments[0],arguments[1]):e}function ao(e,t){var n,i,r=e.__data__;return(\"string\"==(i=typeof(n=t))||\"number\"==i||\"symbol\"==i||\"boolean\"==i?\"__proto__\"!==n:null===n)?r[\"string\"==typeof t?\"string\":\"hash\"]:r.map}function so(e){for(var t=ks(e),n=t.length;n--;){var i=t[n],r=e[i];t[n]=[i,r,wo(r)]}return t}function co(e,t){var n=function(e,t){return null==e?i:e[t]}(e,t);return Mi(n)?n:i}var uo=yt?function(e){return null==e?[]:(e=Ie(e),Ot(yt(e),function(t){return We.call(e,t)}))}:mc,lo=yt?function(e){for(var t=[];e;)xt(t,uo(e)),e=He(e);return t}:mc,ho=Ci;function po(e,t,n){for(var i=-1,r=(t=fr(t,e)).length,o=!1;++i<r;){var a=zo(t[i]);if(!(o=null!=e&&n(e,a)))break;e=e[a]}return o||++i!=r?o:!!(r=null==e?0:e.length)&&Za(r)&&fo(a,r)&&(qa(e)||Va(e))}function mo(e){return\"function\"!=typeof e.constructor||So(e)?{}:jn(He(e))}function yo(e){return qa(e)||Va(e)||!!(Ye&&e&&e[Ye])}function fo(e,t){var n=typeof e;return!!(t=t??u)&&(\"number\"==n||\"symbol\"!=n&&fe.test(e))&&e>-1&&e%1==0&&e<t}function go(e,t,n){if(!Xa(n))return!1;var i=typeof t;return!!(\"number\"==i?Ga(n)&&fo(t,n.length):\"string\"==i&&t in n)&&ja(n[t],e)}function vo(e,t){if(qa(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!ss(e))||Z.test(e)||!J.test(e)||null!=t&&e in Ie(t)}function _o(e){var t=io(e),n=Bn[t];if(\"function\"!=typeof n||!(t in Vn.prototype))return!1;if(e===n)return!0;var i=no(n);return!!i&&e===i[0]}(wn&&ho(new wn(new ArrayBuffer(1)))!=x||Cn&&ho(new Cn)!=S||In&&ho(In.resolve())!=I||Pn&&ho(new Pn)!=E||En&&ho(new En)!=T)&&(ho=function(e){var t=Ci(e),n=t==C?e.constructor:i,r=n?Fo(n):\"\";if(r)switch(r){case kn:return x;case xn:return S;case Mn:return I;case Nn:return E;case Dn:return T}return t});var bo=xe?Qa:yc;function So(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||ke)}function wo(e){return e==e&&!Xa(e)}function Co(e,t){return function(n){return null!=n&&n[e]===t&&(t!==i||e in Ie(n))}}function Io(e,t,n){return t=fn(t===i?e.length-1:t,0),function(){for(var i=arguments,r=-1,o=fn(i.length-t,0),a=ie(o);++r<o;)a[r]=i[t+r];r=-1;for(var s=ie(t+1);++r<t;)s[r]=i[r];return s[t]=n(a),wt(e,this,s)}}function Po(e,t){return t.length<2?e:Si(e,er(t,0,-1))}function Eo(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var Oo=xo(Ji),Ao=lt||function(e,t){return ut.setTimeout(e,t)},To=xo(Zi);function ko(e,t,n){var i=t+\"\";return To(e,function(e,t){var n=t.length;if(!n)return e;var i=n-1;return t[i]=(n>1?\"& \":\"\")+t[i],t=t.join(n>2?\", \":\" \"),e.replace(re,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(i,function(e,t){return It(p,function(n){var i=\"_.\"+n[0];t&n[1]&&!At(e,i)&&e.push(i)}),e.sort()}(function(e){var t=e.match(oe);return t?t[1].split(ae):[]}(i),n)))}function xo(e){var t=0,n=0;return function(){var r=vn(),o=16-(r-n);if(n=r,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(i,arguments)}}function Mo(e,t){var n=-1,r=e.length,o=r-1;for(t=t===i?r:t;++n<t;){var a=Gi(n,o),s=e[a];e[a]=e[n],e[n]=s}return e.length=t,e}var No,Do,Ro=(No=Na(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(X,function(e,n,i,r){t.push(i?r.replace(de,\"$1\"):n||e)}),t},function(e){return 500===Do.size&&Do.clear(),e}),Do=No.cache,No);function zo(e){if(\"string\"==typeof e||ss(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function Fo(e){if(null!=e){try{return Me.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}function Bo(e){if(e instanceof Vn)return e.clone();var t=new Un(e.__wrapped__,e.__chain__);return t.__actions__=Er(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var jo=$i(function(e,t){return Wa(e)?di(e,yi(t,1,Wa,!0)):[]}),Lo=$i(function(e,t){var n=Ko(t);return Wa(n)&&(n=i),Wa(e)?di(e,yi(t,1,Wa,!0),oo(n,2)):[]}),Uo=$i(function(e,t){var n=Ko(t);return Wa(n)&&(n=i),Wa(e)?di(e,yi(t,1,Wa,!0),i,n):[]});function Vo(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var r=null==n?0:ps(n);return r<0&&(r=fn(i+r,0)),Ft(e,oo(t,3),r)}function qo(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var o=r-1;return n!==i&&(o=ps(n),o=n<0?fn(r+o,0):gn(o,r-1)),Ft(e,oo(t,3),o,!0)}function Ho(e){return null!=e&&e.length?yi(e,1):[]}function Go(e){return e&&e.length?e[0]:i}var Wo=$i(function(e){var t=kt(e,mr);return t.length&&t[0]===e[0]?Oi(t):[]}),$o=$i(function(e){var t=Ko(e),n=kt(e,mr);return t===Ko(n)?t=i:n.pop(),n.length&&n[0]===e[0]?Oi(n,oo(t,2)):[]}),Yo=$i(function(e){var t=Ko(e),n=kt(e,mr);return(t=\"function\"==typeof t?t:i)&&n.pop(),n.length&&n[0]===e[0]?Oi(n,i,t):[]});function Ko(e){var t=null==e?0:e.length;return t?e[t-1]:i}var Qo=$i(Jo);function Jo(e,t){return e&&e.length&&t&&t.length?qi(e,t):e}var Zo=Xr(function(e,t){var n=null==e?0:e.length,i=ri(e,t);return Hi(e,kt(t,function(e){return fo(e,n)?+e:e}).sort(Cr)),i});function Xo(e){return null==e?e:Sn.call(e)}var ea=$i(function(e){return sr(yi(e,1,Wa,!0))}),ta=$i(function(e){var t=Ko(e);return Wa(t)&&(t=i),sr(yi(e,1,Wa,!0),oo(t,2))}),na=$i(function(e){var t=Ko(e);return t=\"function\"==typeof t?t:i,sr(yi(e,1,Wa,!0),i,t)});function ia(e){if(!e||!e.length)return[];var t=0;return e=Ot(e,function(e){if(Wa(e))return t=fn(e.length,t),!0}),Wt(t,function(t){return kt(e,Vt(t))})}function ra(e,t){if(!e||!e.length)return[];var n=ia(e);return null==t?n:kt(n,function(e){return wt(t,i,e)})}var oa=$i(function(e,t){return Wa(e)?di(e,t):[]}),aa=$i(function(e){return hr(Ot(e,Wa))}),sa=$i(function(e){var t=Ko(e);return Wa(t)&&(t=i),hr(Ot(e,Wa),oo(t,2))}),ca=$i(function(e){var t=Ko(e);return t=\"function\"==typeof t?t:i,hr(Ot(e,Wa),i,t)}),da=$i(ia),ua=$i(function(e){var t=e.length,n=t>1?e[t-1]:i;return n=\"function\"==typeof n?(e.pop(),n):i,ra(e,n)});function la(e){var t=Bn(e);return t.__chain__=!0,t}function ha(e,t){return t(e)}var pa=Xr(function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,o=function(t){return ri(t,e)};return!(t>1||this.__actions__.length)&&r instanceof Vn&&fo(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:ha,args:[o],thisArg:i}),new Un(r,this.__chain__).thru(function(e){return t&&!e.length&&e.push(i),e})):this.thru(o)}),ma=Ar(function(e,t,n){Ne.call(e,n)?++e[n]:ii(e,n,1)}),ya=Rr(Vo),fa=Rr(qo);function ga(e,t){return(qa(e)?It:ui)(e,oo(t,3))}function va(e,t){return(qa(e)?Pt:li)(e,oo(t,3))}var _a=Ar(function(e,t,n){Ne.call(e,n)?e[n].push(t):ii(e,n,[t])}),ba=$i(function(e,t,n){var i=-1,r=\"function\"==typeof t,o=Ga(e)?ie(e.length):[];return ui(e,function(e){o[++i]=r?wt(t,e,n):Ai(e,t,n)}),o}),Sa=Ar(function(e,t,n){ii(e,n,t)});function wa(e,t){return(qa(e)?kt:zi)(e,oo(t,3))}var Ca=Ar(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]}),Ia=$i(function(e,t){if(null==e)return[];var n=t.length;return n>1&&go(e,t[0],t[1])?t=[]:n>2&&go(t[0],t[1],t[2])&&(t=[t[0]]),Ui(e,yi(t,1),[])}),Pa=dt||function(){return ut.Date.now()};function Ea(e,t,n){return t=n?i:t,t=e&&null==t?e.length:t,Yr(e,c,i,i,i,i,t)}function Oa(e,t){var n;if(\"function\"!=typeof t)throw new Oe(r);return e=ps(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=i),n}}var Aa=$i(function(e,t,n){var i=1;if(n.length){var r=an(n,ro(Aa));i|=s}return Yr(e,i,t,n,r)}),Ta=$i(function(e,t,n){var i=3;if(n.length){var r=an(n,ro(Ta));i|=s}return Yr(t,i,e,n,r)});function ka(e,t,n){var o,a,s,c,d,u,l=0,h=!1,p=!1,m=!0;if(\"function\"!=typeof e)throw new Oe(r);function y(t){var n=o,r=a;return o=a=i,l=t,c=e.apply(r,n)}function f(e){var n=e-u;return u===i||n>=t||n<0||p&&e-l>=s}function g(){var e=Pa();if(f(e))return v(e);d=Ao(g,function(e){var n=t-(e-u);return p?gn(n,s-(e-l)):n}(e))}function v(e){return d=i,m&&o?y(e):(o=a=i,c)}function _(){var e=Pa(),n=f(e);if(o=arguments,a=this,u=e,n){if(d===i)return function(e){return l=e,d=Ao(g,t),h?y(e):c}(u);if(p)return _r(d),d=Ao(g,t),y(u)}return d===i&&(d=Ao(g,t)),c}return t=ys(t)||0,Xa(n)&&(h=!!n.leading,s=(p=\"maxWait\"in n)?fn(ys(n.maxWait)||0,t):s,m=\"trailing\"in n?!!n.trailing:m),_.cancel=function(){d!==i&&_r(d),l=0,o=u=a=d=i},_.flush=function(){return d===i?c:v(Pa())},_}var xa=$i(function(e,t){return ci(e,1,t)}),Ma=$i(function(e,t,n){return ci(e,ys(t)||0,n)});function Na(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new Oe(r);var n=function(){var i=arguments,r=t?t.apply(this,i):i[0],o=n.cache;if(o.has(r))return o.get(r);var a=e.apply(this,i);return n.cache=o.set(r,a)||o,a};return n.cache=new(Na.Cache||Gn),n}function Da(e){if(\"function\"!=typeof e)throw new Oe(r);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}Na.Cache=Gn;var Ra=gr(function(e,t){var n=(t=1==t.length&&qa(t[0])?kt(t[0],Yt(oo())):kt(yi(t,1),Yt(oo()))).length;return $i(function(i){for(var r=-1,o=gn(i.length,n);++r<o;)i[r]=t[r].call(this,i[r]);return wt(e,this,i)})}),za=$i(function(e,t){var n=an(t,ro(za));return Yr(e,s,i,t,n)}),Fa=$i(function(e,t){var n=an(t,ro(Fa));return Yr(e,64,i,t,n)}),Ba=Xr(function(e,t){return Yr(e,256,i,i,i,t)});function ja(e,t){return e===t||e!=e&&t!=t}var La=qr(Ii),Ua=qr(function(e,t){return e>=t}),Va=Ti(function(){return arguments}())?Ti:function(e){return es(e)&&Ne.call(e,\"callee\")&&!We.call(e,\"callee\")},qa=ie.isArray,Ha=ft?Yt(ft):function(e){return es(e)&&Ci(e)==k};function Ga(e){return null!=e&&Za(e.length)&&!Qa(e)}function Wa(e){return es(e)&&Ga(e)}var $a=Rt||yc,Ya=gt?Yt(gt):function(e){return es(e)&&Ci(e)==g};function Ka(e){if(!es(e))return!1;var t=Ci(e);return t==v||\"[object DOMException]\"==t||\"string\"==typeof e.message&&\"string\"==typeof e.name&&!is(e)}function Qa(e){if(!Xa(e))return!1;var t=Ci(e);return t==_||t==b||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function Ja(e){return\"number\"==typeof e&&e==ps(e)}function Za(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=u}function Xa(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function es(e){return null!=e&&\"object\"==typeof e}var ts=vt?Yt(vt):function(e){return es(e)&&ho(e)==S};function ns(e){return\"number\"==typeof e||es(e)&&Ci(e)==w}function is(e){if(!es(e)||Ci(e)!=C)return!1;var t=He(e);if(null===t)return!0;var n=Ne.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&Me.call(n)==Fe}var rs=_t?Yt(_t):function(e){return es(e)&&Ci(e)==P},os=bt?Yt(bt):function(e){return es(e)&&ho(e)==E};function as(e){return\"string\"==typeof e||!qa(e)&&es(e)&&Ci(e)==O}function ss(e){return\"symbol\"==typeof e||es(e)&&Ci(e)==A}var cs=St?Yt(St):function(e){return es(e)&&Za(e.length)&&!!it[Ci(e)]},ds=qr(Ri),us=qr(function(e,t){return e<=t});function ls(e){if(!e)return[];if(Ga(e))return as(e)?un(e):Er(e);if(Je&&e[Je])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Je]());var t=ho(e);return(t==S?rn:t==E?sn:js)(e)}function hs(e){return e?(e=ys(e))===d||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function ps(e){var t=hs(e),n=t%1;return t==t?n?t-n:t:0}function ms(e){return e?oi(ps(e),0,h):0}function ys(e){if(\"number\"==typeof e)return e;if(ss(e))return l;if(Xa(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=Xa(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=$t(e);var n=pe.test(e);return n||ye.test(e)?st(e.slice(2),n?2:8):he.test(e)?l:+e}function fs(e){return Or(e,xs(e))}function gs(e){return null==e?\"\":ar(e)}var vs=Tr(function(e,t){if(So(t)||Ga(t))Or(t,ks(t),e);else for(var n in t)Ne.call(t,n)&&Xn(e,n,t[n])}),_s=Tr(function(e,t){Or(t,xs(t),e)}),bs=Tr(function(e,t,n,i){Or(t,xs(t),e,i)}),Ss=Tr(function(e,t,n,i){Or(t,ks(t),e,i)}),ws=Xr(ri),Cs=$i(function(e,t){e=Ie(e);var n=-1,r=t.length,o=r>2?t[2]:i;for(o&&go(t[0],t[1],o)&&(r=1);++n<r;)for(var a=t[n],s=xs(a),c=-1,d=s.length;++c<d;){var u=s[c],l=e[u];(l===i||ja(l,ke[u])&&!Ne.call(e,u))&&(e[u]=a[u])}return e}),Is=$i(function(e){return e.push(i,Qr),wt(Ns,i,e)});function Ps(e,t,n){var r=null==e?i:Si(e,t);return r===i?n:r}function Es(e,t){return null!=e&&po(e,t,Ei)}var Os=Br(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=ze.call(t)),e[t]=n},Xs(nc)),As=Br(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=ze.call(t)),Ne.call(e,t)?e[t].push(n):e[t]=[n]},oo),Ts=$i(Ai);function ks(e){return Ga(e)?Yn(e):Di(e)}function xs(e){return Ga(e)?Yn(e,!0):function(e){if(!Xa(e))return function(e){var t=[];if(null!=e)for(var n in Ie(e))t.push(n);return t}(e);var t=So(e),n=[];for(var i in e)(\"constructor\"!=i||!t&&Ne.call(e,i))&&n.push(i);return n}(e)}var Ms=Tr(function(e,t,n){ji(e,t,n)}),Ns=Tr(function(e,t,n,i){ji(e,t,n,i)}),Ds=Xr(function(e,t){var n={};if(null==e)return n;var i=!1;t=kt(t,function(t){return t=fr(t,e),i||(i=t.length>1),t}),Or(e,to(e),n),i&&(n=ai(n,7,Jr));for(var r=t.length;r--;)cr(n,t[r]);return n}),Rs=Xr(function(e,t){return null==e?{}:function(e,t){return Vi(e,t,function(t,n){return Es(e,n)})}(e,t)});function zs(e,t){if(null==e)return{};var n=kt(to(e),function(e){return[e]});return t=oo(t),Vi(e,n,function(e,n){return t(e,n[0])})}var Fs=$r(ks),Bs=$r(xs);function js(e){return null==e?[]:Kt(e,ks(e))}var Ls=Nr(function(e,t,n){return t=t.toLowerCase(),e+(n?Us(t):t)});function Us(e){return Ks(gs(e).toLowerCase())}function Vs(e){return(e=gs(e))&&e.replace(ge,Xt).replace(Qe,\"\")}var qs=Nr(function(e,t,n){return e+(n?\"-\":\"\")+t.toLowerCase()}),Hs=Nr(function(e,t,n){return e+(n?\" \":\"\")+t.toLowerCase()}),Gs=Mr(\"toLowerCase\"),Ws=Nr(function(e,t,n){return e+(n?\"_\":\"\")+t.toLowerCase()}),$s=Nr(function(e,t,n){return e+(n?\" \":\"\")+Ks(t)}),Ys=Nr(function(e,t,n){return e+(n?\" \":\"\")+t.toUpperCase()}),Ks=Mr(\"toUpperCase\");function Qs(e,t,n){return e=gs(e),(t=n?i:t)===i?function(e){return et.test(e)}(e)?function(e){return e.match(Ze)||[]}(e):function(e){return e.match(se)||[]}(e):e.match(t)||[]}var Js=$i(function(e,t){try{return wt(e,i,t)}catch(e){return Ka(e)?e:new Se(e)}}),Zs=Xr(function(e,t){return It(t,function(t){t=zo(t),ii(e,t,Aa(e[t],e))}),e});function Xs(e){return function(){return e}}var ec=zr(),tc=zr(!0);function nc(e){return e}function ic(e){return Ni(\"function\"==typeof e?e:ai(e,1))}var rc=$i(function(e,t){return function(n){return Ai(n,e,t)}}),oc=$i(function(e,t){return function(n){return Ai(e,n,t)}});function ac(e,t,n){var i=ks(t),r=bi(t,i);null!=n||Xa(t)&&(r.length||!i.length)||(n=t,t=e,e=this,r=bi(t,ks(t)));var o=!(Xa(n)&&\"chain\"in n&&!n.chain),a=Qa(e);return It(r,function(n){var i=t[n];e[n]=i,a&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__);return(n.__actions__=Er(this.__actions__)).push({func:i,args:arguments,thisArg:e}),n.__chain__=t,n}return i.apply(e,xt([this.value()],arguments))})}),e}function sc(){}var cc=Lr(kt),dc=Lr(Et),uc=Lr(Dt);function lc(e){return vo(e)?Vt(zo(e)):function(e){return function(t){return Si(t,e)}}(e)}var hc=Vr(),pc=Vr(!0);function mc(){return[]}function yc(){return!1}var fc,gc=jr(function(e,t){return e+t},0),vc=Gr(\"ceil\"),_c=jr(function(e,t){return e/t},1),bc=Gr(\"floor\"),Sc=jr(function(e,t){return e*t},1),wc=Gr(\"round\"),Cc=jr(function(e,t){return e-t},0);return Bn.after=function(e,t){if(\"function\"!=typeof t)throw new Oe(r);return e=ps(e),function(){if(--e<1)return t.apply(this,arguments)}},Bn.ary=Ea,Bn.assign=vs,Bn.assignIn=_s,Bn.assignInWith=bs,Bn.assignWith=Ss,Bn.at=ws,Bn.before=Oa,Bn.bind=Aa,Bn.bindAll=Zs,Bn.bindKey=Ta,Bn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return qa(e)?e:[e]},Bn.chain=la,Bn.chunk=function(e,t,n){t=(n?go(e,t,n):t===i)?1:fn(ps(t),0);var r=null==e?0:e.length;if(!r||t<1)return[];for(var o=0,a=0,s=ie(ht(r/t));o<r;)s[a++]=er(e,o,o+=t);return s},Bn.compact=function(e){for(var t=-1,n=null==e?0:e.length,i=0,r=[];++t<n;){var o=e[t];o&&(r[i++]=o)}return r},Bn.concat=function(){var e=arguments.length;if(!e)return[];for(var t=ie(e-1),n=arguments[0],i=e;i--;)t[i-1]=arguments[i];return xt(qa(n)?Er(n):[n],yi(t,1))},Bn.cond=function(e){var t=null==e?0:e.length,n=oo();return e=t?kt(e,function(e){if(\"function\"!=typeof e[1])throw new Oe(r);return[n(e[0]),e[1]]}):[],$i(function(n){for(var i=-1;++i<t;){var r=e[i];if(wt(r[0],this,n))return wt(r[1],this,n)}})},Bn.conforms=function(e){return function(e){var t=ks(e);return function(n){return si(n,e,t)}}(ai(e,1))},Bn.constant=Xs,Bn.countBy=ma,Bn.create=function(e,t){var n=jn(e);return null==t?n:ni(n,t)},Bn.curry=function e(t,n,r){var o=Yr(t,8,i,i,i,i,i,n=r?i:n);return o.placeholder=e.placeholder,o},Bn.curryRight=function e(t,n,r){var o=Yr(t,16,i,i,i,i,i,n=r?i:n);return o.placeholder=e.placeholder,o},Bn.debounce=ka,Bn.defaults=Cs,Bn.defaultsDeep=Is,Bn.defer=xa,Bn.delay=Ma,Bn.difference=jo,Bn.differenceBy=Lo,Bn.differenceWith=Uo,Bn.drop=function(e,t,n){var r=null==e?0:e.length;return r?er(e,(t=n||t===i?1:ps(t))<0?0:t,r):[]},Bn.dropRight=function(e,t,n){var r=null==e?0:e.length;return r?er(e,0,(t=r-(t=n||t===i?1:ps(t)))<0?0:t):[]},Bn.dropRightWhile=function(e,t){return e&&e.length?ur(e,oo(t,3),!0,!0):[]},Bn.dropWhile=function(e,t){return e&&e.length?ur(e,oo(t,3),!0):[]},Bn.fill=function(e,t,n,r){var o=null==e?0:e.length;return o?(n&&\"number\"!=typeof n&&go(e,t,n)&&(n=0,r=o),function(e,t,n,r){var o=e.length;for((n=ps(n))<0&&(n=-n>o?0:o+n),(r=r===i||r>o?o:ps(r))<0&&(r+=o),r=n>r?0:ms(r);n<r;)e[n++]=t;return e}(e,t,n,r)):[]},Bn.filter=function(e,t){return(qa(e)?Ot:mi)(e,oo(t,3))},Bn.flatMap=function(e,t){return yi(wa(e,t),1)},Bn.flatMapDeep=function(e,t){return yi(wa(e,t),d)},Bn.flatMapDepth=function(e,t,n){return n=n===i?1:ps(n),yi(wa(e,t),n)},Bn.flatten=Ho,Bn.flattenDeep=function(e){return null!=e&&e.length?yi(e,d):[]},Bn.flattenDepth=function(e,t){return null!=e&&e.length?yi(e,t=t===i?1:ps(t)):[]},Bn.flip=function(e){return Yr(e,512)},Bn.flow=ec,Bn.flowRight=tc,Bn.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,i={};++t<n;){var r=e[t];ii(i,r[0],r[1])}return i},Bn.functions=function(e){return null==e?[]:bi(e,ks(e))},Bn.functionsIn=function(e){return null==e?[]:bi(e,xs(e))},Bn.groupBy=_a,Bn.initial=function(e){return null!=e&&e.length?er(e,0,-1):[]},Bn.intersection=Wo,Bn.intersectionBy=$o,Bn.intersectionWith=Yo,Bn.invert=Os,Bn.invertBy=As,Bn.invokeMap=ba,Bn.iteratee=ic,Bn.keyBy=Sa,Bn.keys=ks,Bn.keysIn=xs,Bn.map=wa,Bn.mapKeys=function(e,t){var n={};return t=oo(t,3),vi(e,function(e,i,r){ii(n,t(e,i,r),e)}),n},Bn.mapValues=function(e,t){var n={};return t=oo(t,3),vi(e,function(e,i,r){ii(n,i,t(e,i,r))}),n},Bn.matches=function(e){return Fi(ai(e,1))},Bn.matchesProperty=function(e,t){return Bi(e,ai(t,1))},Bn.memoize=Na,Bn.merge=Ms,Bn.mergeWith=Ns,Bn.method=rc,Bn.methodOf=oc,Bn.mixin=ac,Bn.negate=Da,Bn.nthArg=function(e){return e=ps(e),$i(function(t){return Li(t,e)})},Bn.omit=Ds,Bn.omitBy=function(e,t){return zs(e,Da(oo(t)))},Bn.once=function(e){return Oa(2,e)},Bn.orderBy=function(e,t,n,r){return null==e?[]:(qa(t)||(t=null==t?[]:[t]),qa(n=r?i:n)||(n=null==n?[]:[n]),Ui(e,t,n))},Bn.over=cc,Bn.overArgs=Ra,Bn.overEvery=dc,Bn.overSome=uc,Bn.partial=za,Bn.partialRight=Fa,Bn.partition=Ca,Bn.pick=Rs,Bn.pickBy=zs,Bn.property=lc,Bn.propertyOf=function(e){return function(t){return null==e?i:Si(e,t)}},Bn.pull=Qo,Bn.pullAll=Jo,Bn.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?qi(e,t,oo(n,2)):e},Bn.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?qi(e,t,i,n):e},Bn.pullAt=Zo,Bn.range=hc,Bn.rangeRight=pc,Bn.rearg=Ba,Bn.reject=function(e,t){return(qa(e)?Ot:mi)(e,Da(oo(t,3)))},Bn.remove=function(e,t){var n=[];if(!e||!e.length)return n;var i=-1,r=[],o=e.length;for(t=oo(t,3);++i<o;){var a=e[i];t(a,i,e)&&(n.push(a),r.push(i))}return Hi(e,r),n},Bn.rest=function(e,t){if(\"function\"!=typeof e)throw new Oe(r);return $i(e,t=t===i?t:ps(t))},Bn.reverse=Xo,Bn.sampleSize=function(e,t,n){return t=(n?go(e,t,n):t===i)?1:ps(t),(qa(e)?Qn:Ki)(e,t)},Bn.set=function(e,t,n){return null==e?e:Qi(e,t,n)},Bn.setWith=function(e,t,n,r){return r=\"function\"==typeof r?r:i,null==e?e:Qi(e,t,n,r)},Bn.shuffle=function(e){return(qa(e)?Jn:Xi)(e)},Bn.slice=function(e,t,n){var r=null==e?0:e.length;return r?(n&&\"number\"!=typeof n&&go(e,t,n)?(t=0,n=r):(t=null==t?0:ps(t),n=n===i?r:ps(n)),er(e,t,n)):[]},Bn.sortBy=Ia,Bn.sortedUniq=function(e){return e&&e.length?rr(e):[]},Bn.sortedUniqBy=function(e,t){return e&&e.length?rr(e,oo(t,2)):[]},Bn.split=function(e,t,n){return n&&\"number\"!=typeof n&&go(e,t,n)&&(t=n=i),(n=n===i?h:n>>>0)?(e=gs(e))&&(\"string\"==typeof t||null!=t&&!rs(t))&&!(t=ar(t))&&nn(e)?vr(un(e),0,n):e.split(t,n):[]},Bn.spread=function(e,t){if(\"function\"!=typeof e)throw new Oe(r);return t=null==t?0:fn(ps(t),0),$i(function(n){var i=n[t],r=vr(n,0,t);return i&&xt(r,i),wt(e,this,r)})},Bn.tail=function(e){var t=null==e?0:e.length;return t?er(e,1,t):[]},Bn.take=function(e,t,n){return e&&e.length?er(e,0,(t=n||t===i?1:ps(t))<0?0:t):[]},Bn.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?er(e,(t=r-(t=n||t===i?1:ps(t)))<0?0:t,r):[]},Bn.takeRightWhile=function(e,t){return e&&e.length?ur(e,oo(t,3),!1,!0):[]},Bn.takeWhile=function(e,t){return e&&e.length?ur(e,oo(t,3)):[]},Bn.tap=function(e,t){return t(e),e},Bn.throttle=function(e,t,n){var i=!0,o=!0;if(\"function\"!=typeof e)throw new Oe(r);return Xa(n)&&(i=\"leading\"in n?!!n.leading:i,o=\"trailing\"in n?!!n.trailing:o),ka(e,t,{leading:i,maxWait:t,trailing:o})},Bn.thru=ha,Bn.toArray=ls,Bn.toPairs=Fs,Bn.toPairsIn=Bs,Bn.toPath=function(e){return qa(e)?kt(e,zo):ss(e)?[e]:Er(Ro(gs(e)))},Bn.toPlainObject=fs,Bn.transform=function(e,t,n){var i=qa(e),r=i||$a(e)||cs(e);if(t=oo(t,4),null==n){var o=e&&e.constructor;n=r?i?new o:[]:Xa(e)&&Qa(o)?jn(He(e)):{}}return(r?It:vi)(e,function(e,i,r){return t(n,e,i,r)}),n},Bn.unary=function(e){return Ea(e,1)},Bn.union=ea,Bn.unionBy=ta,Bn.unionWith=na,Bn.uniq=function(e){return e&&e.length?sr(e):[]},Bn.uniqBy=function(e,t){return e&&e.length?sr(e,oo(t,2)):[]},Bn.uniqWith=function(e,t){return t=\"function\"==typeof t?t:i,e&&e.length?sr(e,i,t):[]},Bn.unset=function(e,t){return null==e||cr(e,t)},Bn.unzip=ia,Bn.unzipWith=ra,Bn.update=function(e,t,n){return null==e?e:dr(e,t,yr(n))},Bn.updateWith=function(e,t,n,r){return r=\"function\"==typeof r?r:i,null==e?e:dr(e,t,yr(n),r)},Bn.values=js,Bn.valuesIn=function(e){return null==e?[]:Kt(e,xs(e))},Bn.without=oa,Bn.words=Qs,Bn.wrap=function(e,t){return za(yr(t),e)},Bn.xor=aa,Bn.xorBy=sa,Bn.xorWith=ca,Bn.zip=da,Bn.zipObject=function(e,t){return pr(e||[],t||[],Xn)},Bn.zipObjectDeep=function(e,t){return pr(e||[],t||[],Qi)},Bn.zipWith=ua,Bn.entries=Fs,Bn.entriesIn=Bs,Bn.extend=_s,Bn.extendWith=bs,ac(Bn,Bn),Bn.add=gc,Bn.attempt=Js,Bn.camelCase=Ls,Bn.capitalize=Us,Bn.ceil=vc,Bn.clamp=function(e,t,n){return n===i&&(n=t,t=i),n!==i&&(n=(n=ys(n))==n?n:0),t!==i&&(t=(t=ys(t))==t?t:0),oi(ys(e),t,n)},Bn.clone=function(e){return ai(e,4)},Bn.cloneDeep=function(e){return ai(e,5)},Bn.cloneDeepWith=function(e,t){return ai(e,5,t=\"function\"==typeof t?t:i)},Bn.cloneWith=function(e,t){return ai(e,4,t=\"function\"==typeof t?t:i)},Bn.conformsTo=function(e,t){return null==t||si(e,t,ks(t))},Bn.deburr=Vs,Bn.defaultTo=function(e,t){return null==e||e!=e?t:e},Bn.divide=_c,Bn.endsWith=function(e,t,n){e=gs(e),t=ar(t);var r=e.length,o=n=n===i?r:oi(ps(n),0,r);return(n-=t.length)>=0&&e.slice(n,o)==t},Bn.eq=ja,Bn.escape=function(e){return(e=gs(e))&&$.test(e)?e.replace(G,en):e},Bn.escapeRegExp=function(e){return(e=gs(e))&&te.test(e)?e.replace(ee,\"\\\\$&\"):e},Bn.every=function(e,t,n){var r=qa(e)?Et:hi;return n&&go(e,t,n)&&(t=i),r(e,oo(t,3))},Bn.find=ya,Bn.findIndex=Vo,Bn.findKey=function(e,t){return zt(e,oo(t,3),vi)},Bn.findLast=fa,Bn.findLastIndex=qo,Bn.findLastKey=function(e,t){return zt(e,oo(t,3),_i)},Bn.floor=bc,Bn.forEach=ga,Bn.forEachRight=va,Bn.forIn=function(e,t){return null==e?e:fi(e,oo(t,3),xs)},Bn.forInRight=function(e,t){return null==e?e:gi(e,oo(t,3),xs)},Bn.forOwn=function(e,t){return e&&vi(e,oo(t,3))},Bn.forOwnRight=function(e,t){return e&&_i(e,oo(t,3))},Bn.get=Ps,Bn.gt=La,Bn.gte=Ua,Bn.has=function(e,t){return null!=e&&po(e,t,Pi)},Bn.hasIn=Es,Bn.head=Go,Bn.identity=nc,Bn.includes=function(e,t,n,i){e=Ga(e)?e:js(e),n=n&&!i?ps(n):0;var r=e.length;return n<0&&(n=fn(r+n,0)),as(e)?n<=r&&e.indexOf(t,n)>-1:!!r&&Bt(e,t,n)>-1},Bn.indexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var r=null==n?0:ps(n);return r<0&&(r=fn(i+r,0)),Bt(e,t,r)},Bn.inRange=function(e,t,n){return t=hs(t),n===i?(n=t,t=0):n=hs(n),function(e,t,n){return e>=gn(t,n)&&e<fn(t,n)}(e=ys(e),t,n)},Bn.invoke=Ts,Bn.isArguments=Va,Bn.isArray=qa,Bn.isArrayBuffer=Ha,Bn.isArrayLike=Ga,Bn.isArrayLikeObject=Wa,Bn.isBoolean=function(e){return!0===e||!1===e||es(e)&&Ci(e)==f},Bn.isBuffer=$a,Bn.isDate=Ya,Bn.isElement=function(e){return es(e)&&1===e.nodeType&&!is(e)},Bn.isEmpty=function(e){if(null==e)return!0;if(Ga(e)&&(qa(e)||\"string\"==typeof e||\"function\"==typeof e.splice||$a(e)||cs(e)||Va(e)))return!e.length;var t=ho(e);if(t==S||t==E)return!e.size;if(So(e))return!Di(e).length;for(var n in e)if(Ne.call(e,n))return!1;return!0},Bn.isEqual=function(e,t){return ki(e,t)},Bn.isEqualWith=function(e,t,n){var r=(n=\"function\"==typeof n?n:i)?n(e,t):i;return r===i?ki(e,t,i,n):!!r},Bn.isError=Ka,Bn.isFinite=function(e){return\"number\"==typeof e&&qt(e)},Bn.isFunction=Qa,Bn.isInteger=Ja,Bn.isLength=Za,Bn.isMap=ts,Bn.isMatch=function(e,t){return e===t||xi(e,t,so(t))},Bn.isMatchWith=function(e,t,n){return n=\"function\"==typeof n?n:i,xi(e,t,so(t),n)},Bn.isNaN=function(e){return ns(e)&&e!=+e},Bn.isNative=function(e){if(bo(e))throw new Se(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Mi(e)},Bn.isNil=function(e){return null==e},Bn.isNull=function(e){return null===e},Bn.isNumber=ns,Bn.isObject=Xa,Bn.isObjectLike=es,Bn.isPlainObject=is,Bn.isRegExp=rs,Bn.isSafeInteger=function(e){return Ja(e)&&e>=-9007199254740991&&e<=u},Bn.isSet=os,Bn.isString=as,Bn.isSymbol=ss,Bn.isTypedArray=cs,Bn.isUndefined=function(e){return e===i},Bn.isWeakMap=function(e){return es(e)&&ho(e)==T},Bn.isWeakSet=function(e){return es(e)&&\"[object WeakSet]\"==Ci(e)},Bn.join=function(e,t){return null==e?\"\":mn.call(e,t)},Bn.kebabCase=qs,Bn.last=Ko,Bn.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var o=r;return n!==i&&(o=(o=ps(n))<0?fn(r+o,0):gn(o,r-1)),t==t?function(e,t,n){for(var i=n+1;i--;)if(e[i]===t)return i;return i}(e,t,o):Ft(e,Lt,o,!0)},Bn.lowerCase=Hs,Bn.lowerFirst=Gs,Bn.lt=ds,Bn.lte=us,Bn.max=function(e){return e&&e.length?pi(e,nc,Ii):i},Bn.maxBy=function(e,t){return e&&e.length?pi(e,oo(t,2),Ii):i},Bn.mean=function(e){return Ut(e,nc)},Bn.meanBy=function(e,t){return Ut(e,oo(t,2))},Bn.min=function(e){return e&&e.length?pi(e,nc,Ri):i},Bn.minBy=function(e,t){return e&&e.length?pi(e,oo(t,2),Ri):i},Bn.stubArray=mc,Bn.stubFalse=yc,Bn.stubObject=function(){return{}},Bn.stubString=function(){return\"\"},Bn.stubTrue=function(){return!0},Bn.multiply=Sc,Bn.nth=function(e,t){return e&&e.length?Li(e,ps(t)):i},Bn.noConflict=function(){return ut._===this&&(ut._=Be),this},Bn.noop=sc,Bn.now=Pa,Bn.pad=function(e,t,n){e=gs(e);var i=(t=ps(t))?dn(e):0;if(!t||i>=t)return e;var r=(t-i)/2;return Ur(mt(r),n)+e+Ur(ht(r),n)},Bn.padEnd=function(e,t,n){e=gs(e);var i=(t=ps(t))?dn(e):0;return t&&i<t?e+Ur(t-i,n):e},Bn.padStart=function(e,t,n){e=gs(e);var i=(t=ps(t))?dn(e):0;return t&&i<t?Ur(t-i,n)+e:e},Bn.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),_n(gs(e).replace(ne,\"\"),t||0)},Bn.random=function(e,t,n){if(n&&\"boolean\"!=typeof n&&go(e,t,n)&&(t=n=i),n===i&&(\"boolean\"==typeof t?(n=t,t=i):\"boolean\"==typeof e&&(n=e,e=i)),e===i&&t===i?(e=0,t=1):(e=hs(e),t===i?(t=e,e=0):t=hs(t)),e>t){var r=e;e=t,t=r}if(n||e%1||t%1){var o=bn();return gn(e+o*(t-e+at(\"1e-\"+((o+\"\").length-1))),t)}return Gi(e,t)},Bn.reduce=function(e,t,n){var i=qa(e)?Mt:Ht,r=arguments.length<3;return i(e,oo(t,4),n,r,ui)},Bn.reduceRight=function(e,t,n){var i=qa(e)?Nt:Ht,r=arguments.length<3;return i(e,oo(t,4),n,r,li)},Bn.repeat=function(e,t,n){return t=(n?go(e,t,n):t===i)?1:ps(t),Wi(gs(e),t)},Bn.replace=function(){var e=arguments,t=gs(e[0]);return e.length<3?t:t.replace(e[1],e[2])},Bn.result=function(e,t,n){var r=-1,o=(t=fr(t,e)).length;for(o||(o=1,e=i);++r<o;){var a=null==e?i:e[zo(t[r])];a===i&&(r=o,a=n),e=Qa(a)?a.call(e):a}return e},Bn.round=wc,Bn.runInContext=e,Bn.sample=function(e){return(qa(e)?Kn:Yi)(e)},Bn.size=function(e){if(null==e)return 0;if(Ga(e))return as(e)?dn(e):e.length;var t=ho(e);return t==S||t==E?e.size:Di(e).length},Bn.snakeCase=Ws,Bn.some=function(e,t,n){var r=qa(e)?Dt:tr;return n&&go(e,t,n)&&(t=i),r(e,oo(t,3))},Bn.sortedIndex=function(e,t){return nr(e,t)},Bn.sortedIndexBy=function(e,t,n){return ir(e,t,oo(n,2))},Bn.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var i=nr(e,t);if(i<n&&ja(e[i],t))return i}return-1},Bn.sortedLastIndex=function(e,t){return nr(e,t,!0)},Bn.sortedLastIndexBy=function(e,t,n){return ir(e,t,oo(n,2),!0)},Bn.sortedLastIndexOf=function(e,t){if(null!=e&&e.length){var n=nr(e,t,!0)-1;if(ja(e[n],t))return n}return-1},Bn.startCase=$s,Bn.startsWith=function(e,t,n){return e=gs(e),n=null==n?0:oi(ps(n),0,e.length),t=ar(t),e.slice(n,n+t.length)==t},Bn.subtract=Cc,Bn.sum=function(e){return e&&e.length?Gt(e,nc):0},Bn.sumBy=function(e,t){return e&&e.length?Gt(e,oo(t,2)):0},Bn.template=function(e,t,n){var r=Bn.templateSettings;n&&go(e,t,n)&&(t=i),e=gs(e),t=Ss({},t,r,Kr);var o=Ss({},t.imports,r.imports,Kr),a=ks(o),s=Kt(o,a);It(a,function(e){if(ce.test(e))throw new Se(\"Invalid `imports` option passed into `_.template`\")});var c,d,u=0,l=t.interpolate||ve,h=\"__p += '\",p=Pe((t.escape||ve).source+\"|\"+l.source+\"|\"+(l===Q?ue:ve).source+\"|\"+(t.evaluate||ve).source+\"|$\",\"g\"),m=\"//# sourceURL=\"+(Ne.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++nt+\"]\")+\"\\n\";e.replace(p,function(t,n,i,r,o,a){return i||(i=r),h+=e.slice(u,a).replace(_e,tn),n&&(c=!0,h+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(d=!0,h+=\"';\\n\"+o+\";\\n__p += '\"),i&&(h+=\"' +\\n((__t = (\"+i+\")) == null ? '' : __t) +\\n'\"),u=a+t.length,t}),h+=\"';\\n\";var y=Ne.call(t,\"variable\")&&t.variable;if(y){if(ce.test(y))throw new Se(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(d?h.replace(U,\"\"):h).replace(V,\"$1\").replace(q,\"$1;\"),h=\"function(\"+(y||\"obj\")+\") {\\n\"+(y?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(d?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var f=Js(function(){return we(a,m+\"return \"+h).apply(i,s)});if(f.source=h,Ka(f))throw f;return f},Bn.times=function(e,t){if((e=ps(e))<1||e>u)return[];var n=h,i=gn(e,h);t=oo(t),e-=h;for(var r=Wt(i,t);++n<e;)t(n);return r},Bn.toFinite=hs,Bn.toInteger=ps,Bn.toLength=ms,Bn.toLower=function(e){return gs(e).toLowerCase()},Bn.toNumber=ys,Bn.toSafeInteger=function(e){return e?oi(ps(e),-9007199254740991,u):0===e?e:0},Bn.toString=gs,Bn.toUpper=function(e){return gs(e).toUpperCase()},Bn.trim=function(e,t,n){if((e=gs(e))&&(n||t===i))return $t(e);if(!e||!(t=ar(t)))return e;var r=un(e),o=un(t);return vr(r,Jt(r,o),Zt(r,o)+1).join(\"\")},Bn.trimEnd=function(e,t,n){if((e=gs(e))&&(n||t===i))return e.slice(0,ln(e)+1);if(!e||!(t=ar(t)))return e;var r=un(e);return vr(r,0,Zt(r,un(t))+1).join(\"\")},Bn.trimStart=function(e,t,n){if((e=gs(e))&&(n||t===i))return e.replace(ne,\"\");if(!e||!(t=ar(t)))return e;var r=un(e);return vr(r,Jt(r,un(t))).join(\"\")},Bn.truncate=function(e,t){var n=30,r=\"...\";if(Xa(t)){var o=\"separator\"in t?t.separator:o;n=\"length\"in t?ps(t.length):n,r=\"omission\"in t?ar(t.omission):r}var a=(e=gs(e)).length;if(nn(e)){var s=un(e);a=s.length}if(n>=a)return e;var c=n-dn(r);if(c<1)return r;var d=s?vr(s,0,c).join(\"\"):e.slice(0,c);if(o===i)return d+r;if(s&&(c+=d.length-c),rs(o)){if(e.slice(c).search(o)){var u,l=d;for(o.global||(o=Pe(o.source,gs(le.exec(o))+\"g\")),o.lastIndex=0;u=o.exec(l);)var h=u.index;d=d.slice(0,h===i?c:h)}}else if(e.indexOf(ar(o),c)!=c){var p=d.lastIndexOf(o);p>-1&&(d=d.slice(0,p))}return d+r},Bn.unescape=function(e){return(e=gs(e))&&W.test(e)?e.replace(H,hn):e},Bn.uniqueId=function(e){var t=++De;return gs(e)+t},Bn.upperCase=Ys,Bn.upperFirst=Ks,Bn.each=ga,Bn.eachRight=va,Bn.first=Go,ac(Bn,(fc={},vi(Bn,function(e,t){Ne.call(Bn.prototype,t)||(fc[t]=e)}),fc),{chain:!1}),Bn.VERSION=\"4.18.1\",It([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(e){Bn[e].placeholder=Bn}),It([\"drop\",\"take\"],function(e,t){Vn.prototype[e]=function(n){n=n===i?1:fn(ps(n),0);var r=this.__filtered__&&!t?new Vn(this):this.clone();return r.__filtered__?r.__takeCount__=gn(n,r.__takeCount__):r.__views__.push({size:gn(n,h),type:e+(r.__dir__<0?\"Right\":\"\")}),r},Vn.prototype[e+\"Right\"]=function(t){return this.reverse()[e](t).reverse()}}),It([\"filter\",\"map\",\"takeWhile\"],function(e,t){var n=t+1,i=1==n||3==n;Vn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:oo(e,3),type:n}),t.__filtered__=t.__filtered__||i,t}}),It([\"head\",\"last\"],function(e,t){var n=\"take\"+(t?\"Right\":\"\");Vn.prototype[e]=function(){return this[n](1).value()[0]}}),It([\"initial\",\"tail\"],function(e,t){var n=\"drop\"+(t?\"\":\"Right\");Vn.prototype[e]=function(){return this.__filtered__?new Vn(this):this[n](1)}}),Vn.prototype.compact=function(){return this.filter(nc)},Vn.prototype.find=function(e){return this.filter(e).head()},Vn.prototype.findLast=function(e){return this.reverse().find(e)},Vn.prototype.invokeMap=$i(function(e,t){return\"function\"==typeof e?new Vn(this):this.map(function(n){return Ai(n,e,t)})}),Vn.prototype.reject=function(e){return this.filter(Da(oo(e)))},Vn.prototype.slice=function(e,t){e=ps(e);var n=this;return n.__filtered__&&(e>0||t<0)?new Vn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==i&&(n=(t=ps(t))<0?n.dropRight(-t):n.take(t-e)),n)},Vn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Vn.prototype.toArray=function(){return this.take(h)},vi(Vn.prototype,function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),o=Bn[r?\"take\"+(\"last\"==t?\"Right\":\"\"):t],a=r||/^find/.test(t);o&&(Bn.prototype[t]=function(){var t=this.__wrapped__,s=r?[1]:arguments,c=t instanceof Vn,d=s[0],u=c||qa(t),l=function(e){var t=o.apply(Bn,xt([e],s));return r&&h?t[0]:t};u&&n&&\"function\"==typeof d&&1!=d.length&&(c=u=!1);var h=this.__chain__,p=!!this.__actions__.length,m=a&&!h,y=c&&!p;if(!a&&u){t=y?t:new Vn(this);var f=e.apply(t,s);return f.__actions__.push({func:ha,args:[l],thisArg:i}),new Un(f,h)}return m&&y?e.apply(this,s):(f=this.thru(l),m?r?f.value()[0]:f.value():f)})}),It([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(e){var t=Ae[e],n=/^(?:push|sort|unshift)$/.test(e)?\"tap\":\"thru\",i=/^(?:pop|shift)$/.test(e);Bn.prototype[e]=function(){var e=arguments;if(i&&!this.__chain__){var r=this.value();return t.apply(qa(r)?r:[],e)}return this[n](function(n){return t.apply(qa(n)?n:[],e)})}}),vi(Vn.prototype,function(e,t){var n=Bn[t];if(n){var i=n.name+\"\";Ne.call(Tn,i)||(Tn[i]=[]),Tn[i].push({name:t,func:n})}}),Tn[Fr(i,2).name]=[{name:\"wrapper\",func:i}],Vn.prototype.clone=function(){var e=new Vn(this.__wrapped__);return e.__actions__=Er(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Er(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Er(this.__views__),e},Vn.prototype.reverse=function(){if(this.__filtered__){var e=new Vn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Vn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=qa(e),i=t<0,r=n?e.length:0,o=function(e,t,n){for(var i=-1,r=n.length;++i<r;){var o=n[i],a=o.size;switch(o.type){case\"drop\":e+=a;break;case\"dropRight\":t-=a;break;case\"take\":t=gn(t,e+a);break;case\"takeRight\":e=fn(e,t-a)}}return{start:e,end:t}}(0,r,this.__views__),a=o.start,s=o.end,c=s-a,d=i?s:a-1,u=this.__iteratees__,l=u.length,h=0,p=gn(c,this.__takeCount__);if(!n||!i&&r==c&&p==c)return lr(e,this.__actions__);var m=[];e:for(;c--&&h<p;){for(var y=-1,f=e[d+=t];++y<l;){var g=u[y],v=g.iteratee,_=g.type,b=v(f);if(2==_)f=b;else if(!b){if(1==_)continue e;break e}}m[h++]=f}return m},Bn.prototype.at=pa,Bn.prototype.chain=function(){return la(this)},Bn.prototype.commit=function(){return new Un(this.value(),this.__chain__)},Bn.prototype.next=function(){this.__values__===i&&(this.__values__=ls(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?i:this.__values__[this.__index__++]}},Bn.prototype.plant=function(e){for(var t,n=this;n instanceof Ln;){var r=Bo(n);r.__index__=0,r.__values__=i,t?o.__wrapped__=r:t=r;var o=r;n=n.__wrapped__}return o.__wrapped__=e,t},Bn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Vn){var t=e;return this.__actions__.length&&(t=new Vn(this)),(t=t.reverse()).__actions__.push({func:ha,args:[Xo],thisArg:i}),new Un(t,this.__chain__)}return this.thru(Xo)},Bn.prototype.toJSON=Bn.prototype.valueOf=Bn.prototype.value=function(){return lr(this.__wrapped__,this.__actions__)},Bn.prototype.first=Bn.prototype.head,Je&&(Bn.prototype[Je]=function(){return this}),Bn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(ut._=pn,define(function(){return pn})):ht?((ht.exports=pn)._=pn,lt._=pn):ut._=pn}.call(this)},4475(e){\"use strict\";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String(\"abc\");if(e[5]=\"de\",\"5\"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(\"\"))return!1;var i={};return\"abcdefghijklmnopqrst\".split(\"\").forEach(function(e){i[e]=e}),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},i)).join(\"\")}catch(e){return!1}}()?Object.assign:function(e,r){for(var o,a,s=function(e){if(null==e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}(e),c=1;c<arguments.length;c++){for(var d in o=Object(arguments[c]))n.call(o,d)&&(s[d]=o[d]);if(t){a=t(o);for(var u=0;u<a.length;u++)i.call(o,a[u])&&(s[a[u]]=o[a[u]])}}return s}},2586(e,t,n){\"use strict\";const i=n(803),r=n(1915),o=n(1657),a=n(3814),s=Symbol(\"encodeFragmentIdentifier\");function c(e){if(\"string\"!=typeof e||1!==e.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function d(e,t){return t.encode?t.strict?i(e):encodeURIComponent(e):e}function u(e,t){return t.decode?r(e):e}function l(e){return Array.isArray(e)?e.sort():\"object\"==typeof e?l(Object.keys(e)).sort((e,t)=>Number(e)-Number(t)).map(t=>e[t]):e}function h(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function p(e){const t=(e=h(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function m(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&\"string\"==typeof e&&\"\"!==e.trim()?e=Number(e):!t.parseBooleans||null===e||\"true\"!==e.toLowerCase()&&\"false\"!==e.toLowerCase()||(e=\"true\"===e.toLowerCase()),e}function y(e,t){c((t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,n,i)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===i[e]&&(i[e]={}),i[e][t[1]]=n):i[e]=n};case\"bracket\":return(e,n,i)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==i[e]?i[e]=[].concat(i[e],n):i[e]=[n]:i[e]=n};case\"colon-list-separator\":return(e,n,i)=>{t=/(:list)$/.exec(e),e=e.replace(/:list$/,\"\"),t?void 0!==i[e]?i[e]=[].concat(i[e],n):i[e]=[n]:i[e]=n};case\"comma\":case\"separator\":return(t,n,i)=>{const r=\"string\"==typeof n&&n.includes(e.arrayFormatSeparator),o=\"string\"==typeof n&&!r&&u(n,e).includes(e.arrayFormatSeparator);n=o?u(n,e):n;const a=r||o?n.split(e.arrayFormatSeparator).map(t=>u(t,e)):null===n?n:u(n,e);i[t]=a};case\"bracket-separator\":return(t,n,i)=>{const r=/(\\[\\])$/.test(t);if(t=t.replace(/\\[\\]$/,\"\"),!r)return void(i[t]=n?u(n,e):n);const o=null===n?[]:n.split(e.arrayFormatSeparator).map(t=>u(t,e));void 0!==i[t]?i[t]=[].concat(i[t],o):i[t]=o};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),i=Object.create(null);if(\"string\"!=typeof e)return i;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return i;for(const r of e.split(\"&\")){if(\"\"===r)continue;let[e,a]=o(t.decode?r.replace(/\\+/g,\" \"):r,\"=\");a=void 0===a?null:[\"comma\",\"separator\",\"bracket-separator\"].includes(t.arrayFormat)?a:u(a,t),n(u(e,t),a,i)}for(const e of Object.keys(i)){const n=i[e];if(\"object\"==typeof n&&null!==n)for(const e of Object.keys(n))n[e]=m(n[e],t);else i[e]=m(n,t)}return!1===t.sort?i:(!0===t.sort?Object.keys(i).sort():Object.keys(i).sort(t.sort)).reduce((e,t)=>{const n=i[t];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?e[t]=l(n):e[t]=n,e},Object.create(null))}t.extract=p,t.parse=y,t.stringify=(e,t)=>{if(!e)return\"\";c((t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},t)).arrayFormatSeparator);const n=n=>t.skipNull&&null==e[n]||t.skipEmptyString&&\"\"===e[n],i=function(e){switch(e.arrayFormat){case\"index\":return t=>(n,i)=>{const r=n.length;return void 0===i||e.skipNull&&null===i||e.skipEmptyString&&\"\"===i?n:null===i?[...n,[d(t,e),\"[\",r,\"]\"].join(\"\")]:[...n,[d(t,e),\"[\",d(r,e),\"]=\",d(i,e)].join(\"\")]};case\"bracket\":return t=>(n,i)=>void 0===i||e.skipNull&&null===i||e.skipEmptyString&&\"\"===i?n:null===i?[...n,[d(t,e),\"[]\"].join(\"\")]:[...n,[d(t,e),\"[]=\",d(i,e)].join(\"\")];case\"colon-list-separator\":return t=>(n,i)=>void 0===i||e.skipNull&&null===i||e.skipEmptyString&&\"\"===i?n:null===i?[...n,[d(t,e),\":list=\"].join(\"\")]:[...n,[d(t,e),\":list=\",d(i,e)].join(\"\")];case\"comma\":case\"separator\":case\"bracket-separator\":{const t=\"bracket-separator\"===e.arrayFormat?\"[]=\":\"=\";return n=>(i,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?i:(r=null===r?\"\":r,0===i.length?[[d(n,e),t,d(r,e)].join(\"\")]:[[i,d(r,e)].join(e.arrayFormatSeparator)])}default:return t=>(n,i)=>void 0===i||e.skipNull&&null===i||e.skipEmptyString&&\"\"===i?n:null===i?[...n,d(t,e)]:[...n,[d(t,e),\"=\",d(i,e)].join(\"\")]}}(t),r={};for(const t of Object.keys(e))n(t)||(r[t]=e[t]);const o=Object.keys(r);return!1!==t.sort&&o.sort(t.sort),o.map(n=>{const r=e[n];return void 0===r?\"\":null===r?d(n,t):Array.isArray(r)?0===r.length&&\"bracket-separator\"===t.arrayFormat?d(n,t)+\"[]\":r.reduce(i(n),[]).join(\"&\"):d(n,t)+\"=\"+d(r,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,i]=o(e,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:y(p(e),t)},t&&t.parseFragmentIdentifier&&i?{fragmentIdentifier:u(i,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0,[s]:!0},n);const i=h(e.url).split(\"?\")[0]||\"\",r=t.extract(e.url),o=t.parse(r,{sort:!1}),a=Object.assign(o,e.query);let c=t.stringify(a,n);c&&(c=`?${c}`);let u=function(e){let t=\"\";const n=e.indexOf(\"#\");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(u=`#${n[s]?d(e.fragmentIdentifier,n):e.fragmentIdentifier}`),`${i}${c}${u}`},t.pick=(e,n,i)=>{i=Object.assign({parseFragmentIdentifier:!0,[s]:!1},i);const{url:r,query:o,fragmentIdentifier:c}=t.parseUrl(e,i);return t.stringifyUrl({url:r,query:a(o,n),fragmentIdentifier:c},i)},t.exclude=(e,n,i)=>{const r=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,r,i)}},7554(e,t,n){\"use strict\";n.r(t),n.d(t,{ArgumentOutOfRangeError:()=>x.k,AsyncSubject:()=>u.h,BehaviorSubject:()=>c.t,ConnectableObservable:()=>r.G,EMPTY:()=>Q.w,EmptyError:()=>M.G,GroupedObservable:()=>o.k,NEVER:()=>le,Notification:()=>E.E,NotificationKind:()=>E.I,ObjectUnsubscribedError:()=>N.P,Observable:()=>i.c,ReplaySubject:()=>d.m,Scheduler:()=>C._,Subject:()=>s.B7,Subscriber:()=>P.v,Subscription:()=>I.y,TimeoutError:()=>R.M,UnsubscriptionError:()=>D.Z,VirtualAction:()=>w,VirtualTimeScheduler:()=>S,animationFrame:()=>b,animationFrameScheduler:()=>_,asap:()=>l.I,asapScheduler:()=>l.$,async:()=>h.b,asyncScheduler:()=>h.E,bindCallback:()=>L,bindNodeCallback:()=>q,combineLatest:()=>$.zV,concat:()=>Y.x,config:()=>Te.$,defer:()=>K.v,empty:()=>Q.I,forkJoin:()=>X,from:()=>Z.H,fromEvent:()=>te.R,fromEventPattern:()=>ie,generate:()=>re,identity:()=>T.D,iif:()=>ae,interval:()=>ce,isObservable:()=>k,merge:()=>ue.h,never:()=>he,noop:()=>A.l,observable:()=>a.s,of:()=>pe.of,onErrorResumeNext:()=>me,pairs:()=>ye,partition:()=>be,pipe:()=>O.F,queue:()=>p.g,queueScheduler:()=>p.T,race:()=>Se.O4,range:()=>we,scheduled:()=>Ae.c,throwError:()=>Ie.$,timer:()=>Pe.O,using:()=>Ee,zip:()=>Oe.yU});var i=n(9386),r=n(9762),o=n(2331),a=n(9067),s=n(9023),c=n(2361),d=n(8358),u=n(1403),l=n(7734),h=n(5573),p=n(4126),m=n(5779),y=n(1897),f=function(e){function t(t,n){var i=e.call(this,t,n)||this;return i.scheduler=t,i.work=n,i}return m.C6(t,e),t.prototype.requestAsyncId=function(t,n,i){return void 0===i&&(i=0),null!==i&&i>0?e.prototype.requestAsyncId.call(this,t,n,i):(t.actions.push(this),t.scheduled||(t.scheduled=requestAnimationFrame(function(){return t.flush(null)})))},t.prototype.recycleAsyncId=function(t,n,i){if(void 0===i&&(i=0),null!==i&&i>0||null===i&&this.delay>0)return e.prototype.recycleAsyncId.call(this,t,n,i);0===t.actions.length&&(cancelAnimationFrame(n),t.scheduled=void 0)},t}(y.R),g=n(8044),v=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return m.C6(t,e),t.prototype.flush=function(e){this.active=!0,this.scheduled=void 0;var t,n=this.actions,i=-1,r=n.length;e=e||n.shift();do{if(t=e.execute(e.state,e.delay))break}while(++i<r&&(e=n.shift()));if(this.active=!1,t){for(;++i<r&&(e=n.shift());)e.unsubscribe();throw t}},t}(g.q),_=new v(f),b=_,S=function(e){function t(t,n){void 0===t&&(t=w),void 0===n&&(n=Number.POSITIVE_INFINITY);var i=e.call(this,t,function(){return i.frame})||this;return i.maxFrames=n,i.frame=0,i.index=-1,i}return m.C6(t,e),t.prototype.flush=function(){for(var e,t,n=this.actions,i=this.maxFrames;(t=n[0])&&t.delay<=i&&(n.shift(),this.frame=t.delay,!(e=t.execute(t.state,t.delay))););if(e){for(;t=n.shift();)t.unsubscribe();throw e}},t.frameTimeFactor=10,t}(g.q),w=function(e){function t(t,n,i){void 0===i&&(i=t.index+=1);var r=e.call(this,t,n)||this;return r.scheduler=t,r.work=n,r.index=i,r.active=!0,r.index=t.index=i,r}return m.C6(t,e),t.prototype.schedule=function(n,i){if(void 0===i&&(i=0),!this.id)return e.prototype.schedule.call(this,n,i);this.active=!1;var r=new t(this.scheduler,this.work);return this.add(r),r.schedule(n,i)},t.prototype.requestAsyncId=function(e,n,i){void 0===i&&(i=0),this.delay=e.frame+i;var r=e.actions;return r.push(this),r.sort(t.sortActions),!0},t.prototype.recycleAsyncId=function(e,t,n){void 0===n&&(n=0)},t.prototype._execute=function(t,n){if(!0===this.active)return e.prototype._execute.call(this,t,n)},t.sortActions=function(e,t){return e.delay===t.delay?e.index===t.index?0:e.index>t.index?1:-1:e.delay>t.delay?1:-1},t}(y.R),C=n(6182),I=n(9290),P=n(3409),E=n(2796),O=n(990),A=n(906),T=n(8604);function k(e){return!!e&&(e instanceof i.c||\"function\"==typeof e.lift&&\"function\"==typeof e.subscribe)}var x=n(2413),M=n(963),N=n(6306),D=n(9368),R=n(5),z=n(2035),F=n(2724),B=n(2733),j=n(3017);function L(e,t,n){if(t){if(!(0,j.m)(t))return function(){for(var i=[],r=0;r<arguments.length;r++)i[r]=arguments[r];return L(e,n).apply(void 0,i).pipe((0,z.T)(function(e){return(0,B.c)(e)?t.apply(void 0,e):t(e)}))};n=t}return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var o,a=this,s={context:a,subject:o,callbackFunc:e,scheduler:n};return new i.c(function(i){if(n){var r={args:t,subscriber:i,params:s};return n.schedule(U,0,r)}if(!o){o=new u.h;try{e.apply(a,t.concat([function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];o.next(e.length<=1?e[0]:e),o.complete()}]))}catch(e){(0,F.H)(o)?o.error(e):console.warn(e)}}return o.subscribe(i)})}}function U(e){var t=this,n=e.args,i=e.subscriber,r=e.params,o=r.callbackFunc,a=r.context,s=r.scheduler,c=r.subject;if(!c){c=r.subject=new u.h;try{o.apply(a,n.concat([function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var i=e.length<=1?e[0]:e;t.add(s.schedule(V,0,{value:i,subject:c}))}]))}catch(e){c.error(e)}}this.add(c.subscribe(i))}function V(e){var t=e.value,n=e.subject;n.next(t),n.complete()}function q(e,t,n){if(t){if(!(0,j.m)(t))return function(){for(var i=[],r=0;r<arguments.length;r++)i[r]=arguments[r];return q(e,n).apply(void 0,i).pipe((0,z.T)(function(e){return(0,B.c)(e)?t.apply(void 0,e):t(e)}))};n=t}return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var o={subject:void 0,args:t,callbackFunc:e,scheduler:n,context:this};return new i.c(function(i){var r=o.context,a=o.subject;if(n)return n.schedule(H,0,{params:o,subscriber:i,context:r});if(!a){a=o.subject=new u.h;try{e.apply(r,t.concat([function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.shift();n?a.error(n):(a.next(e.length<=1?e[0]:e),a.complete())}]))}catch(e){(0,F.H)(a)?a.error(e):console.warn(e)}}return a.subscribe(i)})}}function H(e){var t=this,n=e.params,i=e.subscriber,r=e.context,o=n.callbackFunc,a=n.args,s=n.scheduler,c=n.subject;if(!c){c=n.subject=new u.h;try{o.apply(r,a.concat([function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var i=e.shift();if(i)t.add(s.schedule(W,0,{err:i,subject:c}));else{var r=e.length<=1?e[0]:e;t.add(s.schedule(G,0,{value:r,subject:c}))}}]))}catch(e){this.add(s.schedule(W,0,{err:e,subject:c}))}}this.add(c.subscribe(i))}function G(e){var t=e.value,n=e.subject;n.next(t),n.complete()}function W(e){var t=e.err;e.subject.error(t)}var $=n(3483),Y=n(9301),K=n(277),Q=n(6780),J=n(9273),Z=n(8241);function X(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(1===e.length){var n=e[0];if((0,B.c)(n))return ee(n,null);if((0,J.G)(n)&&Object.getPrototypeOf(n)===Object.prototype){var i=Object.keys(n);return ee(i.map(function(e){return n[e]}),i)}}if(\"function\"==typeof e[e.length-1]){var r=e.pop();return ee(e=1===e.length&&(0,B.c)(e[0])?e[0]:e,null).pipe((0,z.T)(function(e){return r.apply(void 0,e)}))}return ee(e,null)}function ee(e,t){return new i.c(function(n){var i=e.length;if(0!==i)for(var r=new Array(i),o=0,a=0,s=function(s){var c=(0,Z.H)(e[s]),d=!1;n.add(c.subscribe({next:function(e){d||(d=!0,a++),r[s]=e},error:function(e){return n.error(e)},complete:function(){++o!==i&&d||(a===i&&n.next(t?t.reduce(function(e,t,n){return e[t]=r[n],e},{}):r),n.complete())}}))},c=0;c<i;c++)s(c);else n.complete()})}var te=n(1381),ne=n(3278);function ie(e,t,n){return n?ie(e,t).pipe((0,z.T)(function(e){return(0,B.c)(e)?n.apply(void 0,e):n(e)})):new i.c(function(n){var i,r=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n.next(1===e.length?e[0]:e)};try{i=e(r)}catch(e){return void n.error(e)}if((0,ne.T)(t))return function(){return t(r,i)}})}function re(e,t,n,r,o){var a,s;if(1==arguments.length){var c=e;s=c.initialState,t=c.condition,n=c.iterate,a=c.resultSelector||T.D,o=c.scheduler}else void 0===r||(0,j.m)(r)?(s=e,a=T.D,o=r):(s=e,a=r);return new i.c(function(e){var i=s;if(o)return o.schedule(oe,0,{subscriber:e,iterate:n,condition:t,resultSelector:a,state:i});for(;;){if(t){var r=void 0;try{r=t(i)}catch(t){return void e.error(t)}if(!r){e.complete();break}}var c=void 0;try{c=a(i)}catch(t){return void e.error(t)}if(e.next(c),e.closed)break;try{i=n(i)}catch(t){return void e.error(t)}}})}function oe(e){var t=e.subscriber,n=e.condition;if(!t.closed){if(e.needIterate)try{e.state=e.iterate(e.state)}catch(e){return void t.error(e)}else e.needIterate=!0;if(n){var i=void 0;try{i=n(e.state)}catch(e){return void t.error(e)}if(!i)return void t.complete();if(t.closed)return}var r;try{r=e.resultSelector(e.state)}catch(e){return void t.error(e)}if(!t.closed&&(t.next(r),!t.closed))return this.schedule(e)}}function ae(e,t,n){return void 0===t&&(t=Q.w),void 0===n&&(n=Q.w),(0,K.v)(function(){return e()?t:n})}var se=n(899);function ce(e,t){return void 0===e&&(e=0),void 0===t&&(t=h.b),(!(0,se.k)(e)||e<0)&&(e=0),t&&\"function\"==typeof t.schedule||(t=h.b),new i.c(function(n){return n.add(t.schedule(de,e,{subscriber:n,counter:0,period:e})),n})}function de(e){var t=e.subscriber,n=e.counter,i=e.period;t.next(n),this.schedule({subscriber:t,counter:n+1,period:i},i)}var ue=n(3837),le=new i.c(A.l);function he(){return le}var pe=n(4128);function me(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(0===e.length)return Q.w;var n=e[0],r=e.slice(1);return 1===e.length&&(0,B.c)(n)?me.apply(void 0,n):new i.c(function(e){var t=function(){return e.add(me.apply(void 0,r).subscribe(e))};return(0,Z.H)(n).subscribe({next:function(t){e.next(t)},error:t,complete:t})})}function ye(e,t){return t?new i.c(function(n){var i=Object.keys(e),r=new I.y;return r.add(t.schedule(fe,0,{keys:i,index:0,subscriber:n,subscription:r,obj:e})),r}):new i.c(function(t){for(var n=Object.keys(e),i=0;i<n.length&&!t.closed;i++){var r=n[i];e.hasOwnProperty(r)&&t.next([r,e[r]])}t.complete()})}function fe(e){var t=e.keys,n=e.index,i=e.subscriber,r=e.subscription,o=e.obj;if(!i.closed)if(n<t.length){var a=t[n];i.next([a,o[a]]),r.add(this.schedule({keys:t,index:n+1,subscriber:i,subscription:r,obj:o}))}else i.complete()}var ge=n(8153),ve=n(1109),_e=n(6275);function be(e,t,n){return[(0,_e.p)(t,n)(new i.c((0,ve.i)(e))),(0,_e.p)((0,ge.A)(t,n))(new i.c((0,ve.i)(e)))]}var Se=n(4460);function we(e,t,n){return void 0===e&&(e=0),new i.c(function(i){void 0===t&&(t=e,e=0);var r=0,o=e;if(n)return n.schedule(Ce,0,{index:r,count:t,start:e,subscriber:i});for(;;){if(r++>=t){i.complete();break}if(i.next(o++),i.closed)break}})}function Ce(e){var t=e.start,n=e.index,i=e.count,r=e.subscriber;n>=i?r.complete():(r.next(t),r.closed||(e.index=n+1,e.start=t+1,this.schedule(e)))}var Ie=n(4203),Pe=n(5520);function Ee(e,t){return new i.c(function(n){var i,r;try{i=e()}catch(e){return void n.error(e)}try{r=t(i)}catch(e){return void n.error(e)}var o=(r?(0,Z.H)(r):Q.w).subscribe(n);return function(){o.unsubscribe(),i&&i.unsubscribe()}})}var Oe=n(5778),Ae=n(2132),Te=n(6369)},1403(e,t,n){\"use strict\";n.d(t,{h:()=>a});var i=n(5779),r=n(9023),o=n(9290),a=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.value=null,t.hasNext=!1,t.hasCompleted=!1,t}return i.C6(t,e),t.prototype._subscribe=function(t){return this.hasError?(t.error(this.thrownError),o.y.EMPTY):this.hasCompleted&&this.hasNext?(t.next(this.value),t.complete(),o.y.EMPTY):e.prototype._subscribe.call(this,t)},t.prototype.next=function(e){this.hasCompleted||(this.value=e,this.hasNext=!0)},t.prototype.error=function(t){this.hasCompleted||e.prototype.error.call(this,t)},t.prototype.complete=function(){this.hasCompleted=!0,this.hasNext&&e.prototype.next.call(this,this.value),e.prototype.complete.call(this)},t}(r.B7)},2361(e,t,n){\"use strict\";n.d(t,{t:()=>a});var i=n(5779),r=n(9023),o=n(6306),a=function(e){function t(t){var n=e.call(this)||this;return n._value=t,n}return i.C6(t,e),Object.defineProperty(t.prototype,\"value\",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),t.prototype._subscribe=function(t){var n=e.prototype._subscribe.call(this,t);return n&&!n.closed&&t.next(this._value),n},t.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.P;return this._value},t.prototype.next=function(t){e.prototype.next.call(this,this._value=t)},t}(r.B7)},2796(e,t,n){\"use strict\";n.d(t,{E:()=>s,I:()=>i});var i,r=n(6780),o=n(4128),a=n(4203);i||(i={});var s=function(){function e(e,t,n){this.kind=e,this.value=t,this.error=n,this.hasValue=\"N\"===e}return e.prototype.observe=function(e){switch(this.kind){case\"N\":return e.next&&e.next(this.value);case\"E\":return e.error&&e.error(this.error);case\"C\":return e.complete&&e.complete()}},e.prototype.do=function(e,t,n){switch(this.kind){case\"N\":return e&&e(this.value);case\"E\":return t&&t(this.error);case\"C\":return n&&n()}},e.prototype.accept=function(e,t,n){return e&&\"function\"==typeof e.next?this.observe(e):this.do(e,t,n)},e.prototype.toObservable=function(){switch(this.kind){case\"N\":return(0,o.of)(this.value);case\"E\":return(0,a.$)(this.error);case\"C\":return(0,r.I)()}throw new Error(\"unexpected notification kind value\")},e.createNext=function(t){return void 0!==t?new e(\"N\",t):e.undefinedValueNotification},e.createError=function(t){return new e(\"E\",void 0,t)},e.createComplete=function(){return e.completeNotification},e.completeNotification=new e(\"C\"),e.undefinedValueNotification=new e(\"N\",void 0),e}()},9386(e,t,n){\"use strict\";n.d(t,{c:()=>c});var i=n(2724),r=n(9297),o=n(9067),a=n(990),s=n(6369),c=function(){function e(e){this._isScalar=!1,e&&(this._subscribe=e)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(e,t,n){var i=this.operator,o=(0,r.u)(e,t,n);if(i?o.add(i.call(o,this.source)):o.add(this.source||s.$.useDeprecatedSynchronousErrorHandling&&!o.syncErrorThrowable?this._subscribe(o):this._trySubscribe(o)),s.$.useDeprecatedSynchronousErrorHandling&&o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){s.$.useDeprecatedSynchronousErrorHandling&&(e.syncErrorThrown=!0,e.syncErrorValue=t),(0,i.H)(e)?e.error(t):console.warn(t)}},e.prototype.forEach=function(e,t){var n=this;return new(t=d(t))(function(t,i){var r;r=n.subscribe(function(t){try{e(t)}catch(e){i(e),r&&r.unsubscribe()}},i,t)})},e.prototype._subscribe=function(e){var t=this.source;return t&&t.subscribe(e)},e.prototype[o.s]=function(){return this},e.prototype.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return 0===e.length?this:(0,a.m)(e)(this)},e.prototype.toPromise=function(e){var t=this;return new(e=d(e))(function(e,n){var i;t.subscribe(function(e){return i=e},function(e){return n(e)},function(){return e(i)})})},e.create=function(t){return new e(t)},e}();function d(e){if(e||(e=s.$.Promise||Promise),!e)throw new Error(\"no Promise impl found\");return e}},8805(e,t,n){\"use strict\";n.d(t,{I:()=>o});var i=n(6369),r=n(3762),o={closed:!0,next:function(e){},error:function(e){if(i.$.useDeprecatedSynchronousErrorHandling)throw e;(0,r.T)(e)},complete:function(){}}},5422(e,t,n){\"use strict\";n.d(t,{E:()=>r});var i=n(5779),r=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i.C6(t,e),t.prototype.notifyNext=function(e,t,n,i,r){this.destination.next(t)},t.prototype.notifyError=function(e,t){this.destination.error(e)},t.prototype.notifyComplete=function(e){this.destination.complete()},t}(n(3409).v)},8358(e,t,n){\"use strict\";n.d(t,{m:()=>u});var i=n(5779),r=n(9023),o=n(4126),a=n(9290),s=n(3724),c=n(6306),d=n(9970),u=function(e){function t(t,n,i){void 0===t&&(t=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY);var r=e.call(this)||this;return r.scheduler=i,r._events=[],r._infiniteTimeWindow=!1,r._bufferSize=t<1?1:t,r._windowTime=n<1?1:n,n===Number.POSITIVE_INFINITY?(r._infiniteTimeWindow=!0,r.next=r.nextInfiniteTimeWindow):r.next=r.nextTimeWindow,r}return i.C6(t,e),t.prototype.nextInfiniteTimeWindow=function(t){if(!this.isStopped){var n=this._events;n.push(t),n.length>this._bufferSize&&n.shift()}e.prototype.next.call(this,t)},t.prototype.nextTimeWindow=function(t){this.isStopped||(this._events.push(new l(this._getNow(),t)),this._trimBufferThenGetEvents()),e.prototype.next.call(this,t)},t.prototype._subscribe=function(e){var t,n=this._infiniteTimeWindow,i=n?this._events:this._trimBufferThenGetEvents(),r=this.scheduler,o=i.length;if(this.closed)throw new c.P;if(this.isStopped||this.hasError?t=a.y.EMPTY:(this.observers.push(e),t=new d.Y(this,e)),r&&e.add(e=new s.YZ(e,r)),n)for(var u=0;u<o&&!e.closed;u++)e.next(i[u]);else for(u=0;u<o&&!e.closed;u++)e.next(i[u].value);return this.hasError?e.error(this.thrownError):this.isStopped&&e.complete(),t},t.prototype._getNow=function(){return(this.scheduler||o.g).now()},t.prototype._trimBufferThenGetEvents=function(){for(var e=this._getNow(),t=this._bufferSize,n=this._windowTime,i=this._events,r=i.length,o=0;o<r&&!(e-i[o].time<n);)o++;return r>t&&(o=Math.max(o,r-t)),o>0&&i.splice(0,o),i},t}(r.B7),l=function(){return function(e,t){this.time=e,this.value=t}}()},6182(e,t,n){\"use strict\";n.d(t,{_:()=>i});var i=function(){function e(t,n){void 0===n&&(n=e.now),this.SchedulerAction=t,this.now=n}return e.prototype.schedule=function(e,t,n){return void 0===t&&(t=0),new this.SchedulerAction(this,e).schedule(n,t)},e.now=function(){return Date.now()},e}()},9023(e,t,n){\"use strict\";n.d(t,{B7:()=>l,PJ:()=>u});var i=n(5779),r=n(9386),o=n(3409),a=n(9290),s=n(6306),c=n(9970),d=n(6014),u=function(e){function t(t){var n=e.call(this,t)||this;return n.destination=t,n}return i.C6(t,e),t}(o.v),l=function(e){function t(){var t=e.call(this)||this;return t.observers=[],t.closed=!1,t.isStopped=!1,t.hasError=!1,t.thrownError=null,t}return i.C6(t,e),t.prototype[d.D]=function(){return new u(this)},t.prototype.lift=function(e){var t=new h(this,this);return t.operator=e,t},t.prototype.next=function(e){if(this.closed)throw new s.P;if(!this.isStopped)for(var t=this.observers,n=t.length,i=t.slice(),r=0;r<n;r++)i[r].next(e)},t.prototype.error=function(e){if(this.closed)throw new s.P;this.hasError=!0,this.thrownError=e,this.isStopped=!0;for(var t=this.observers,n=t.length,i=t.slice(),r=0;r<n;r++)i[r].error(e);this.observers.length=0},t.prototype.complete=function(){if(this.closed)throw new s.P;this.isStopped=!0;for(var e=this.observers,t=e.length,n=e.slice(),i=0;i<t;i++)n[i].complete();this.observers.length=0},t.prototype.unsubscribe=function(){this.isStopped=!0,this.closed=!0,this.observers=null},t.prototype._trySubscribe=function(t){if(this.closed)throw new s.P;return e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){if(this.closed)throw new s.P;return this.hasError?(e.error(this.thrownError),a.y.EMPTY):this.isStopped?(e.complete(),a.y.EMPTY):(this.observers.push(e),new c.Y(this,e))},t.prototype.asObservable=function(){var e=new r.c;return e.source=this,e},t.create=function(e,t){return new h(e,t)},t}(r.c),h=function(e){function t(t,n){var i=e.call(this)||this;return i.destination=t,i.source=n,i}return i.C6(t,e),t.prototype.next=function(e){var t=this.destination;t&&t.next&&t.next(e)},t.prototype.error=function(e){var t=this.destination;t&&t.error&&this.destination.error(e)},t.prototype.complete=function(){var e=this.destination;e&&e.complete&&this.destination.complete()},t.prototype._subscribe=function(e){return this.source?this.source.subscribe(e):a.y.EMPTY},t}(l)},9970(e,t,n){\"use strict\";n.d(t,{Y:()=>r});var i=n(5779),r=function(e){function t(t,n){var i=e.call(this)||this;return i.subject=t,i.subscriber=n,i.closed=!1,i}return i.C6(t,e),t.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var e=this.subject,t=e.observers;if(this.subject=null,t&&0!==t.length&&!e.isStopped&&!e.closed){var n=t.indexOf(this.subscriber);-1!==n&&t.splice(n,1)}}},t}(n(9290).y)},3409(e,t,n){\"use strict\";n.d(t,{v:()=>u});var i=n(5779),r=n(3278),o=n(8805),a=n(9290),s=n(6014),c=n(6369),d=n(3762),u=function(e){function t(n,i,r){var a=e.call(this)||this;switch(a.syncErrorValue=null,a.syncErrorThrown=!1,a.syncErrorThrowable=!1,a.isStopped=!1,arguments.length){case 0:a.destination=o.I;break;case 1:if(!n){a.destination=o.I;break}if(\"object\"==typeof n){n instanceof t?(a.syncErrorThrowable=n.syncErrorThrowable,a.destination=n,n.add(a)):(a.syncErrorThrowable=!0,a.destination=new l(a,n));break}default:a.syncErrorThrowable=!0,a.destination=new l(a,n,i,r)}return a}return i.C6(t,e),t.prototype[s.D]=function(){return this},t.create=function(e,n,i){var r=new t(e,n,i);return r.syncErrorThrowable=!1,r},t.prototype.next=function(e){this.isStopped||this._next(e)},t.prototype.error=function(e){this.isStopped||(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this))},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){this.destination.error(e),this.unsubscribe()},t.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},t.prototype._unsubscribeAndRecycle=function(){var e=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=e,this},t}(a.y),l=function(e){function t(t,n,i,a){var s,c=e.call(this)||this;c._parentSubscriber=t;var d=c;return(0,r.T)(n)?s=n:n&&(s=n.next,i=n.error,a=n.complete,n!==o.I&&(d=Object.create(n),(0,r.T)(d.unsubscribe)&&c.add(d.unsubscribe.bind(d)),d.unsubscribe=c.unsubscribe.bind(c))),c._context=d,c._next=s,c._error=i,c._complete=a,c}return i.C6(t,e),t.prototype.next=function(e){if(!this.isStopped&&this._next){var t=this._parentSubscriber;c.$.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?this.__tryOrSetError(t,this._next,e)&&this.unsubscribe():this.__tryOrUnsub(this._next,e)}},t.prototype.error=function(e){if(!this.isStopped){var t=this._parentSubscriber,n=c.$.useDeprecatedSynchronousErrorHandling;if(this._error)n&&t.syncErrorThrowable?(this.__tryOrSetError(t,this._error,e),this.unsubscribe()):(this.__tryOrUnsub(this._error,e),this.unsubscribe());else if(t.syncErrorThrowable)n?(t.syncErrorValue=e,t.syncErrorThrown=!0):(0,d.T)(e),this.unsubscribe();else{if(this.unsubscribe(),n)throw e;(0,d.T)(e)}}},t.prototype.complete=function(){var e=this;if(!this.isStopped){var t=this._parentSubscriber;if(this._complete){var n=function(){return e._complete.call(e._context)};c.$.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},t.prototype.__tryOrUnsub=function(e,t){try{e.call(this._context,t)}catch(e){if(this.unsubscribe(),c.$.useDeprecatedSynchronousErrorHandling)throw e;(0,d.T)(e)}},t.prototype.__tryOrSetError=function(e,t,n){if(!c.$.useDeprecatedSynchronousErrorHandling)throw new Error(\"bad call\");try{t.call(this._context,n)}catch(t){return c.$.useDeprecatedSynchronousErrorHandling?(e.syncErrorValue=t,e.syncErrorThrown=!0,!0):((0,d.T)(t),!0)}return!1},t.prototype._unsubscribe=function(){var e=this._parentSubscriber;this._context=null,this._parentSubscriber=null,e.unsubscribe()},t}(u)},9290(e,t,n){\"use strict\";n.d(t,{y:()=>s});var i=n(2733),r=n(9273),o=n(3278),a=n(9368),s=function(){function e(e){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,e&&(this._ctorUnsubscribe=!0,this._unsubscribe=e)}var t;return e.prototype.unsubscribe=function(){var t;if(!this.closed){var n=this,s=n._parentOrParents,d=n._ctorUnsubscribe,u=n._unsubscribe,l=n._subscriptions;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,s instanceof e)s.remove(this);else if(null!==s)for(var h=0;h<s.length;++h)s[h].remove(this);if((0,o.T)(u)){d&&(this._unsubscribe=void 0);try{u.call(this)}catch(e){t=e instanceof a.Z?c(e.errors):[e]}}if((0,i.c)(l)){h=-1;for(var p=l.length;++h<p;){var m=l[h];if((0,r.G)(m))try{m.unsubscribe()}catch(e){t=t||[],e instanceof a.Z?t=t.concat(c(e.errors)):t.push(e)}}}if(t)throw new a.Z(t)}},e.prototype.add=function(t){var n=t;if(!t)return e.EMPTY;switch(typeof t){case\"function\":n=new e(t);case\"object\":if(n===this||n.closed||\"function\"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if(!(n instanceof e)){var i=n;(n=new e)._subscriptions=[i]}break;default:throw new Error(\"unrecognized teardown \"+t+\" added to Subscription.\")}var r=n._parentOrParents;if(null===r)n._parentOrParents=this;else if(r instanceof e){if(r===this)return n;n._parentOrParents=[r,this]}else{if(-1!==r.indexOf(this))return n;r.push(this)}var o=this._subscriptions;return null===o?this._subscriptions=[n]:o.push(n),n},e.prototype.remove=function(e){var t=this._subscriptions;if(t){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}},e.EMPTY=((t=new e).closed=!0,t),e}();function c(e){return e.reduce(function(e,t){return e.concat(t instanceof a.Z?t.errors:t)},[])}},6369(e,t,n){\"use strict\";n.d(t,{$:()=>r});var i=!1,r={Promise:void 0,set useDeprecatedSynchronousErrorHandling(e){e&&(new Error).stack,i=e},get useDeprecatedSynchronousErrorHandling(){return i}}},9559(e,t,n){\"use strict\";n.d(t,{gn:()=>c,tS:()=>d,zA:()=>s});var i=n(5779),r=n(3409),o=n(9386),a=n(1109),s=function(e){function t(t){var n=e.call(this)||this;return n.parent=t,n}return i.C6(t,e),t.prototype._next=function(e){this.parent.notifyNext(e)},t.prototype._error=function(e){this.parent.notifyError(e),this.unsubscribe()},t.prototype._complete=function(){this.parent.notifyComplete(),this.unsubscribe()},t}(r.v),c=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i.C6(t,e),t.prototype.notifyNext=function(e){this.destination.next(e)},t.prototype.notifyError=function(e){this.destination.error(e)},t.prototype.notifyComplete=function(){this.destination.complete()},t}(r.v);function d(e,t){if(!t.closed){if(e instanceof o.c)return e.subscribe(t);var n;try{n=(0,a.i)(e)(t)}catch(e){t.error(e)}return n}}},9762(e,t,n){\"use strict\";n.d(t,{G:()=>c,f:()=>d});var i=n(5779),r=n(9023),o=n(9386),a=n(9290),s=n(1709),c=function(e){function t(t,n){var i=e.call(this)||this;return i.source=t,i.subjectFactory=n,i._refCount=0,i._isComplete=!1,i}return i.C6(t,e),t.prototype._subscribe=function(e){return this.getSubject().subscribe(e)},t.prototype.getSubject=function(){var e=this._subject;return e&&!e.isStopped||(this._subject=this.subjectFactory()),this._subject},t.prototype.connect=function(){var e=this._connection;return e||(this._isComplete=!1,(e=this._connection=new a.y).add(this.source.subscribe(new u(this.getSubject(),this))),e.closed&&(this._connection=null,e=a.y.EMPTY)),e},t.prototype.refCount=function(){return(0,s.B)()(this)},t}(o.c),d=function(){var e=c.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:e._subscribe},_isComplete:{value:e._isComplete,writable:!0},getSubject:{value:e.getSubject},connect:{value:e.connect},refCount:{value:e.refCount}}}(),u=function(e){function t(t,n){var i=e.call(this,t)||this;return i.connectable=n,i}return i.C6(t,e),t.prototype._error=function(t){this._unsubscribe(),e.prototype._error.call(this,t)},t.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._connection;e._refCount=0,e._subject=null,e._connection=null,t&&t.unsubscribe()}},t}(r.PJ)},3483(e,t,n){\"use strict\";n.d(t,{ZS:()=>l,zV:()=>u});var i=n(5779),r=n(3017),o=n(2733),a=n(5422),s=n(7408),c=n(2564),d={};function u(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=void 0,i=void 0;return(0,r.m)(e[e.length-1])&&(i=e.pop()),\"function\"==typeof e[e.length-1]&&(n=e.pop()),1===e.length&&(0,o.c)(e[0])&&(e=e[0]),(0,c.c)(e,i).lift(new l(n))}var l=function(){function e(e){this.resultSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new h(e,this.resultSelector))},e}(),h=function(e){function t(t,n){var i=e.call(this,t)||this;return i.resultSelector=n,i.active=0,i.values=[],i.observables=[],i}return i.C6(t,e),t.prototype._next=function(e){this.values.push(d),this.observables.push(e)},t.prototype._complete=function(){var e=this.observables,t=e.length;if(0===t)this.destination.complete();else{this.active=t,this.toRespond=t;for(var n=0;n<t;n++){var i=e[n];this.add((0,s.F)(this,i,void 0,n))}}},t.prototype.notifyComplete=function(e){0==(this.active-=1)&&this.destination.complete()},t.prototype.notifyNext=function(e,t,n){var i=this.values,r=i[n],o=this.toRespond?r===d?--this.toRespond:this.toRespond:0;i[n]=t,0===o&&(this.resultSelector?this._tryResultSelector(i):this.destination.next(i.slice()))},t.prototype._tryResultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(a.E)},9301(e,t,n){\"use strict\";n.d(t,{x:()=>o});var i=n(4128),r=n(8930);function o(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return(0,r.K)()(i.of.apply(void 0,e))}},277(e,t,n){\"use strict\";n.d(t,{v:()=>a});var i=n(9386),r=n(8241),o=n(6780);function a(e){return new i.c(function(t){var n;try{n=e()}catch(e){return void t.error(e)}return(n?(0,r.H)(n):(0,o.I)()).subscribe(t)})}},6780(e,t,n){\"use strict\";n.d(t,{I:()=>o,w:()=>r});var i=n(9386),r=new i.c(function(e){return e.complete()});function o(e){return e?function(e){return new i.c(function(t){return e.schedule(function(){return t.complete()})})}(e):r}},8241(e,t,n){\"use strict\";n.d(t,{H:()=>a});var i=n(9386),r=n(1109),o=n(2132);function a(e,t){return t?(0,o.c)(e,t):e instanceof i.c?e:new i.c((0,r.i)(e))}},2564(e,t,n){\"use strict\";n.d(t,{c:()=>a});var i=n(9386),r=n(5168),o=n(941);function a(e,t){return t?(0,o.V)(e,t):new i.c((0,r.v)(e))}},1381(e,t,n){\"use strict\";n.d(t,{R:()=>s});var i=n(9386),r=n(2733),o=n(3278),a=n(2035);function s(e,t,n,d){return(0,o.T)(n)&&(d=n,n=void 0),d?s(e,t,n).pipe((0,a.T)(function(e){return(0,r.c)(e)?d.apply(void 0,e):d(e)})):new i.c(function(i){c(e,t,function(e){arguments.length>1?i.next(Array.prototype.slice.call(arguments)):i.next(e)},i,n)})}function c(e,t,n,i,r){var o;if(function(e){return e&&\"function\"==typeof e.addEventListener&&\"function\"==typeof e.removeEventListener}(e)){var a=e;e.addEventListener(t,n,r),o=function(){return a.removeEventListener(t,n,r)}}else if(function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.off}(e)){var s=e;e.on(t,n),o=function(){return s.off(t,n)}}else if(function(e){return e&&\"function\"==typeof e.addListener&&\"function\"==typeof e.removeListener}(e)){var d=e;e.addListener(t,n),o=function(){return d.removeListener(t,n)}}else{if(!e||!e.length)throw new TypeError(\"Invalid event target\");for(var u=0,l=e.length;u<l;u++)c(e[u],t,n,i,r)}i.add(o)}},3837(e,t,n){\"use strict\";n.d(t,{h:()=>s});var i=n(9386),r=n(3017),o=n(9050),a=n(2564);function s(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Number.POSITIVE_INFINITY,s=null,c=e[e.length-1];return(0,r.m)(c)?(s=e.pop(),e.length>1&&\"number\"==typeof e[e.length-1]&&(n=e.pop())):\"number\"==typeof c&&(n=e.pop()),null===s&&1===e.length&&e[0]instanceof i.c?e[0]:(0,o.U)(n)((0,a.c)(e,s))}},4128(e,t,n){\"use strict\";n.d(t,{of:()=>a});var i=n(3017),r=n(2564),o=n(941);function a(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[e.length-1];return(0,i.m)(n)?(e.pop(),(0,o.V)(e,n)):(0,r.c)(e)}},4460(e,t,n){\"use strict\";n.d(t,{O4:()=>c});var i=n(5779),r=n(2733),o=n(2564),a=n(5422),s=n(7408);function c(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(1===e.length){if(!(0,r.c)(e[0]))return e[0];e=e[0]}return(0,o.c)(e,void 0).lift(new d)}var d=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new u(e))},e}(),u=function(e){function t(t){var n=e.call(this,t)||this;return n.hasFirst=!1,n.observables=[],n.subscriptions=[],n}return i.C6(t,e),t.prototype._next=function(e){this.observables.push(e)},t.prototype._complete=function(){var e=this.observables,t=e.length;if(0===t)this.destination.complete();else{for(var n=0;n<t&&!this.hasFirst;n++){var i=e[n],r=(0,s.F)(this,i,void 0,n);this.subscriptions&&this.subscriptions.push(r),this.add(r)}this.observables=null}},t.prototype.notifyNext=function(e,t,n){if(!this.hasFirst){this.hasFirst=!0;for(var i=0;i<this.subscriptions.length;i++)if(i!==n){var r=this.subscriptions[i];r.unsubscribe(),this.remove(r)}this.subscriptions=null}this.destination.next(t)},t}(a.E)},4203(e,t,n){\"use strict\";n.d(t,{$:()=>r});var i=n(9386);function r(e,t){return t?new i.c(function(n){return t.schedule(o,0,{error:e,subscriber:n})}):new i.c(function(t){return t.error(e)})}function o(e){var t=e.error;e.subscriber.error(t)}},5520(e,t,n){\"use strict\";n.d(t,{O:()=>s});var i=n(9386),r=n(5573),o=n(899),a=n(3017);function s(e,t,n){void 0===e&&(e=0);var s=-1;return(0,o.k)(t)?s=Number(t)<1?1:Number(t):(0,a.m)(t)&&(n=t),(0,a.m)(n)||(n=r.b),new i.c(function(t){var i=(0,o.k)(e)?e:+e-n.now();return n.schedule(c,i,{index:0,period:s,subscriber:t})})}function c(e){var t=e.index,n=e.period,i=e.subscriber;if(i.next(t),!i.closed){if(-1===n)return i.complete();e.index=t+1,this.schedule(e,n)}}},5778(e,t,n){\"use strict\";n.d(t,{ee:()=>u,yU:()=>d});var i=n(5779),r=n(2564),o=n(2733),a=n(3409),s=n(3840),c=n(9559);function d(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[e.length-1];return\"function\"==typeof n&&e.pop(),(0,r.c)(e,void 0).lift(new u(n))}var u=function(){function e(e){this.resultSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new l(e,this.resultSelector))},e}(),l=function(e){function t(t,n,i){void 0===i&&(i=Object.create(null));var r=e.call(this,t)||this;return r.resultSelector=n,r.iterators=[],r.active=0,r.resultSelector=\"function\"==typeof n?n:void 0,r}return i.C6(t,e),t.prototype._next=function(e){var t=this.iterators;(0,o.c)(e)?t.push(new p(e)):\"function\"==typeof e[s.lJ]?t.push(new h(e[s.lJ]())):t.push(new m(this.destination,this,e))},t.prototype._complete=function(){var e=this.iterators,t=e.length;if(this.unsubscribe(),0!==t){this.active=t;for(var n=0;n<t;n++){var i=e[n];i.stillUnsubscribed?this.destination.add(i.subscribe()):this.active--}}else this.destination.complete()},t.prototype.notifyInactive=function(){this.active--,0===this.active&&this.destination.complete()},t.prototype.checkIterators=function(){for(var e=this.iterators,t=e.length,n=this.destination,i=0;i<t;i++)if(\"function\"==typeof(a=e[i]).hasValue&&!a.hasValue())return;var r=!1,o=[];for(i=0;i<t;i++){var a,s=(a=e[i]).next();if(a.hasCompleted()&&(r=!0),s.done)return void n.complete();o.push(s.value)}this.resultSelector?this._tryresultSelector(o):n.next(o),r&&n.complete()},t.prototype._tryresultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(a.v),h=function(){function e(e){this.iterator=e,this.nextResult=e.next()}return e.prototype.hasValue=function(){return!0},e.prototype.next=function(){var e=this.nextResult;return this.nextResult=this.iterator.next(),e},e.prototype.hasCompleted=function(){var e=this.nextResult;return Boolean(e&&e.done)},e}(),p=function(){function e(e){this.array=e,this.index=0,this.length=0,this.length=e.length}return e.prototype[s.lJ]=function(){return this},e.prototype.next=function(e){var t=this.index++,n=this.array;return t<this.length?{value:n[t],done:!1}:{value:null,done:!0}},e.prototype.hasValue=function(){return this.array.length>this.index},e.prototype.hasCompleted=function(){return this.array.length===this.index},e}(),m=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.parent=n,r.observable=i,r.stillUnsubscribed=!0,r.buffer=[],r.isComplete=!1,r}return i.C6(t,e),t.prototype[s.lJ]=function(){return this},t.prototype.next=function(){var e=this.buffer;return 0===e.length&&this.isComplete?{value:null,done:!0}:{value:e.shift(),done:!1}},t.prototype.hasValue=function(){return this.buffer.length>0},t.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete},t.prototype.notifyComplete=function(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()},t.prototype.notifyNext=function(e){this.buffer.push(e),this.parent.checkIterators()},t.prototype.subscribe=function(){return(0,c.tS)(this.observable,new c.zA(this))},t}(c.gn)},9586(e,t,n){\"use strict\";n.d(t,{W:()=>o});var i=n(5779),r=n(9559);function o(e){return function(t){var n=new a(e),i=t.lift(n);return n.caught=i}}var a=function(){function e(e){this.selector=e}return e.prototype.call=function(e,t){return t.subscribe(new s(e,this.selector,this.caught))},e}(),s=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.selector=n,r.caught=i,r}return i.C6(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=void 0;try{n=this.selector(t,this.caught)}catch(t){return void e.prototype.error.call(this,t)}this._unsubscribeAndRecycle();var i=new r.zA(this);this.add(i);var o=(0,r.tS)(n,i);o!==i&&this.add(o)}},t}(r.gn)},8930(e,t,n){\"use strict\";n.d(t,{K:()=>r});var i=n(9050);function r(){return(0,i.U)(1)}},3158(e,t,n){\"use strict\";n.d(t,{c:()=>c});var i=n(5779),r=n(5573),o=n(1454),a=n(3409),s=n(2796);function c(e,t){void 0===t&&(t=r.b);var n=(0,o.$)(e)?+e-t.now():Math.abs(e);return function(e){return e.lift(new d(n,t))}}var d=function(){function e(e,t){this.delay=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new u(e,this.delay,this.scheduler))},e}(),u=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.delay=n,r.scheduler=i,r.queue=[],r.active=!1,r.errored=!1,r}return i.C6(t,e),t.dispatch=function(e){for(var t=e.source,n=t.queue,i=e.scheduler,r=e.destination;n.length>0&&n[0].time-i.now()<=0;)n.shift().notification.observe(r);if(n.length>0){var o=Math.max(0,n[0].time-i.now());this.schedule(e,o)}else this.unsubscribe(),t.active=!1},t.prototype._schedule=function(e){this.active=!0,this.destination.add(e.schedule(t.dispatch,this.delay,{source:this,destination:this.destination,scheduler:e}))},t.prototype.scheduleNotification=function(e){if(!0!==this.errored){var t=this.scheduler,n=new l(t.now()+this.delay,e);this.queue.push(n),!1===this.active&&this._schedule(t)}},t.prototype._next=function(e){this.scheduleNotification(s.E.createNext(e))},t.prototype._error=function(e){this.errored=!0,this.queue=[],this.destination.error(e),this.unsubscribe()},t.prototype._complete=function(){this.scheduleNotification(s.E.createComplete()),this.unsubscribe()},t}(a.v),l=function(){return function(e,t){this.time=e,this.notification=t}}()},8669(e,t,n){\"use strict\";n.d(t,{F:()=>o});var i=n(5779),r=n(3409);function o(e,t){return function(n){return n.lift(new a(e,t))}}var a=function(){function e(e,t){this.compare=e,this.keySelector=t}return e.prototype.call=function(e,t){return t.subscribe(new s(e,this.compare,this.keySelector))},e}(),s=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.keySelector=i,r.hasKey=!1,\"function\"==typeof n&&(r.compare=n),r}return i.C6(t,e),t.prototype.compare=function(e,t){return e===t},t.prototype._next=function(e){var t;try{var n=this.keySelector;t=n?n(e):e}catch(e){return this.destination.error(e)}var i=!1;if(this.hasKey)try{i=(0,this.compare)(this.key,t)}catch(e){return this.destination.error(e)}else this.hasKey=!0;i||(this.key=t,this.destination.next(e))},t}(r.v)},6275(e,t,n){\"use strict\";n.d(t,{p:()=>o});var i=n(5779),r=n(3409);function o(e,t){return function(n){return n.lift(new a(e,t))}}var a=function(){function e(e,t){this.predicate=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate,this.thisArg))},e}(),s=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.predicate=n,r.thisArg=i,r.count=0,r}return i.C6(t,e),t.prototype._next=function(e){var t;try{t=this.predicate.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}t&&this.destination.next(e)},t}(r.v)},2331(e,t,n){\"use strict\";n.d(t,{$:()=>c,k:()=>h});var i=n(5779),r=n(3409),o=n(9290),a=n(9386),s=n(9023);function c(e,t,n,i){return function(r){return r.lift(new d(e,t,n,i))}}var d=function(){function e(e,t,n,i){this.keySelector=e,this.elementSelector=t,this.durationSelector=n,this.subjectSelector=i}return e.prototype.call=function(e,t){return t.subscribe(new u(e,this.keySelector,this.elementSelector,this.durationSelector,this.subjectSelector))},e}(),u=function(e){function t(t,n,i,r,o){var a=e.call(this,t)||this;return a.keySelector=n,a.elementSelector=i,a.durationSelector=r,a.subjectSelector=o,a.groups=null,a.attemptedToUnsubscribe=!1,a.count=0,a}return i.C6(t,e),t.prototype._next=function(e){var t;try{t=this.keySelector(e)}catch(e){return void this.error(e)}this._group(e,t)},t.prototype._group=function(e,t){var n=this.groups;n||(n=this.groups=new Map);var i,r=n.get(t);if(this.elementSelector)try{i=this.elementSelector(e)}catch(e){this.error(e)}else i=e;if(!r){r=this.subjectSelector?this.subjectSelector():new s.B7,n.set(t,r);var o=new h(t,r,this);if(this.destination.next(o),this.durationSelector){var a=void 0;try{a=this.durationSelector(new h(t,r))}catch(e){return void this.error(e)}this.add(a.subscribe(new l(t,r,this)))}}r.closed||r.next(i)},t.prototype._error=function(e){var t=this.groups;t&&(t.forEach(function(t,n){t.error(e)}),t.clear()),this.destination.error(e)},t.prototype._complete=function(){var e=this.groups;e&&(e.forEach(function(e,t){e.complete()}),e.clear()),this.destination.complete()},t.prototype.removeGroup=function(e){this.groups.delete(e)},t.prototype.unsubscribe=function(){this.closed||(this.attemptedToUnsubscribe=!0,0===this.count&&e.prototype.unsubscribe.call(this))},t}(r.v),l=function(e){function t(t,n,i){var r=e.call(this,n)||this;return r.key=t,r.group=n,r.parent=i,r}return i.C6(t,e),t.prototype._next=function(e){this.complete()},t.prototype._unsubscribe=function(){var e=this.parent,t=this.key;this.key=this.parent=null,e&&e.removeGroup(t)},t}(r.v),h=function(e){function t(t,n,i){var r=e.call(this)||this;return r.key=t,r.groupSubject=n,r.refCountSubscription=i,r}return i.C6(t,e),t.prototype._subscribe=function(e){var t=new o.y,n=this.refCountSubscription,i=this.groupSubject;return n&&!n.closed&&t.add(new p(n)),t.add(i.subscribe(e)),t},t}(a.c),p=function(e){function t(t){var n=e.call(this)||this;return n.parent=t,t.count++,n}return i.C6(t,e),t.prototype.unsubscribe=function(){var t=this.parent;t.closed||this.closed||(e.prototype.unsubscribe.call(this),t.count-=1,0===t.count&&t.attemptedToUnsubscribe&&t.unsubscribe())},t}(o.y)},2035(e,t,n){\"use strict\";n.d(t,{T:()=>o});var i=n(5779),r=n(3409);function o(e,t){return function(n){if(\"function\"!=typeof e)throw new TypeError(\"argument is not a function. Are you looking for `mapTo()`?\");return n.lift(new a(e,t))}}var a=function(){function e(e,t){this.project=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new s(e,this.project,this.thisArg))},e}(),s=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.project=n,r.count=0,r.thisArg=i||r,r}return i.C6(t,e),t.prototype._next=function(e){var t;try{t=this.project.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(r.v)},9050(e,t,n){\"use strict\";n.d(t,{U:()=>o});var i=n(6083),r=n(8604);function o(e){return void 0===e&&(e=Number.POSITIVE_INFINITY),(0,i.ZZ)(r.D,e)}},6083(e,t,n){\"use strict\";n.d(t,{ZZ:()=>s,qI:()=>u});var i=n(5779),r=n(2035),o=n(8241),a=n(9559);function s(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),\"function\"==typeof t?function(i){return i.pipe(s(function(n,i){return(0,o.H)(e(n,i)).pipe((0,r.T)(function(e,r){return t(n,e,i,r)}))},n))}:(\"number\"==typeof t&&(n=t),function(t){return t.lift(new c(e,n))})}var c=function(){function e(e,t){void 0===t&&(t=Number.POSITIVE_INFINITY),this.project=e,this.concurrent=t}return e.prototype.call=function(e,t){return t.subscribe(new d(e,this.project,this.concurrent))},e}(),d=function(e){function t(t,n,i){void 0===i&&(i=Number.POSITIVE_INFINITY);var r=e.call(this,t)||this;return r.project=n,r.concurrent=i,r.hasCompleted=!1,r.buffer=[],r.active=0,r.index=0,r}return i.C6(t,e),t.prototype._next=function(e){this.active<this.concurrent?this._tryNext(e):this.buffer.push(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this.active++,this._innerSub(t)},t.prototype._innerSub=function(e){var t=new a.zA(this),n=this.destination;n.add(t);var i=(0,a.tS)(e,t);i!==t&&n.add(i)},t.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete(),this.unsubscribe()},t.prototype.notifyNext=function(e){this.destination.next(e)},t.prototype.notifyComplete=function(){var e=this.buffer;this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},t}(a.gn),u=s},3724(e,t,n){\"use strict\";n.d(t,{QE:()=>a,YZ:()=>c});var i=n(5779),r=n(3409),o=n(2796);function a(e,t){return void 0===t&&(t=0),function(n){return n.lift(new s(e,t))}}var s=function(){function e(e,t){void 0===t&&(t=0),this.scheduler=e,this.delay=t}return e.prototype.call=function(e,t){return t.subscribe(new c(e,this.scheduler,this.delay))},e}(),c=function(e){function t(t,n,i){void 0===i&&(i=0);var r=e.call(this,t)||this;return r.scheduler=n,r.delay=i,r}return i.C6(t,e),t.dispatch=function(e){var t=e.notification,n=e.destination;t.observe(n),this.unsubscribe()},t.prototype.scheduleMessage=function(e){this.destination.add(this.scheduler.schedule(t.dispatch,this.delay,new d(e,this.destination)))},t.prototype._next=function(e){this.scheduleMessage(o.E.createNext(e))},t.prototype._error=function(e){this.scheduleMessage(o.E.createError(e)),this.unsubscribe()},t.prototype._complete=function(){this.scheduleMessage(o.E.createComplete()),this.unsubscribe()},t}(r.v),d=function(){return function(e,t){this.notification=e,this.destination=t}}()},1709(e,t,n){\"use strict\";n.d(t,{B:()=>o});var i=n(5779),r=n(3409);function o(){return function(e){return e.lift(new a(e))}}var a=function(){function e(e){this.connectable=e}return e.prototype.call=function(e,t){var n=this.connectable;n._refCount++;var i=new s(e,n),r=t.subscribe(i);return i.closed||(i.connection=n.connect()),r},e}(),s=function(e){function t(t,n){var i=e.call(this,t)||this;return i.connectable=n,i}return i.C6(t,e),t.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._refCount;if(t<=0)this.connection=null;else if(e._refCount=t-1,t>1)this.connection=null;else{var n=this.connection,i=e._connection;this.connection=null,!i||n&&i!==n||i.unsubscribe()}}else this.connection=null},t}(r.v)},2551(e,t,n){\"use strict\";n.d(t,{l:()=>a});var i=n(5779),r=n(9023),o=n(9559);function a(e){return function(t){return t.lift(new s(e,t))}}var s=function(){function e(e,t){this.notifier=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new c(e,this.notifier,this.source))},e}(),c=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.notifier=n,r.source=i,r}return i.C6(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=this.errors,i=this.retries,a=this.retriesSubscription;if(i)this.errors=void 0,this.retriesSubscription=void 0;else{n=new r.B7;try{i=(0,this.notifier)(n)}catch(t){return e.prototype.error.call(this,t)}a=(0,o.tS)(i,new o.zA(this))}this._unsubscribeAndRecycle(),this.errors=n,this.retries=i,this.retriesSubscription=a,n.next(t)}},t.prototype._unsubscribe=function(){var e=this.errors,t=this.retriesSubscription;e&&(e.unsubscribe(),this.errors=void 0),t&&(t.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0},t.prototype.notifyNext=function(){var e=this._unsubscribe;this._unsubscribe=null,this._unsubscribeAndRecycle(),this._unsubscribe=e,this.source.subscribe(this)},t}(o.gn)},2161(e,t,n){\"use strict\";n.d(t,{t:()=>r});var i=n(8358);function r(e,t,n){var r;return r=e&&\"object\"==typeof e?e:{bufferSize:e,windowTime:t,refCount:!1,scheduler:n},function(e){return e.lift(function(e){var t,n,r=e.bufferSize,o=void 0===r?Number.POSITIVE_INFINITY:r,a=e.windowTime,s=void 0===a?Number.POSITIVE_INFINITY:a,c=e.refCount,d=e.scheduler,u=0,l=!1,h=!1;return function(e){var r;u++,!t||l?(l=!1,t=new i.m(o,s,d),r=t.subscribe(this),n=e.subscribe({next:function(e){t.next(e)},error:function(e){l=!0,t.error(e)},complete:function(){h=!0,n=void 0,t.complete()}}),h&&(n=void 0)):r=t.subscribe(this),this.add(function(){u--,r.unsubscribe(),r=void 0,n&&!h&&c&&0===u&&(n.unsubscribe(),n=void 0,t=void 0)})}}(r))}}},9835(e,t,n){\"use strict\";n.d(t,{n:()=>s});var i=n(5779),r=n(2035),o=n(8241),a=n(9559);function s(e,t){return\"function\"==typeof t?function(n){return n.pipe(s(function(n,i){return(0,o.H)(e(n,i)).pipe((0,r.T)(function(e,r){return t(n,e,i,r)}))}))}:function(t){return t.lift(new c(e))}}var c=function(){function e(e){this.project=e}return e.prototype.call=function(e,t){return t.subscribe(new d(e,this.project))},e}(),d=function(e){function t(t,n){var i=e.call(this,t)||this;return i.project=n,i.index=0,i}return i.C6(t,e),t.prototype._next=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this._innerSub(t)},t.prototype._innerSub=function(e){var t=this.innerSubscription;t&&t.unsubscribe();var n=new a.zA(this),i=this.destination;i.add(n),this.innerSubscription=(0,a.tS)(e,n),this.innerSubscription!==n&&i.add(this.innerSubscription)},t.prototype._complete=function(){var t=this.innerSubscription;t&&!t.closed||e.prototype._complete.call(this),this.unsubscribe()},t.prototype._unsubscribe=function(){this.innerSubscription=void 0},t.prototype.notifyComplete=function(){this.innerSubscription=void 0,this.isStopped&&e.prototype._complete.call(this)},t.prototype.notifyNext=function(e){this.destination.next(e)},t}(a.gn)},1698(e,t,n){\"use strict\";n.d(t,{s:()=>s});var i=n(5779),r=n(3409),o=n(2413),a=n(6780);function s(e){return function(t){return 0===e?(0,a.I)():t.lift(new c(e))}}var c=function(){function e(e){if(this.total=e,this.total<0)throw new o.k}return e.prototype.call=function(e,t){return t.subscribe(new d(e,this.total))},e}(),d=function(e){function t(t,n){var i=e.call(this,t)||this;return i.total=n,i.count=0,i}return i.C6(t,e),t.prototype._next=function(e){var t=this.total,n=++this.count;n<=t&&(this.destination.next(e),n===t&&(this.destination.complete(),this.unsubscribe()))},t}(r.v)},941(e,t,n){\"use strict\";n.d(t,{V:()=>o});var i=n(9386),r=n(9290);function o(e,t){return new i.c(function(n){var i=new r.y,o=0;return i.add(t.schedule(function(){o!==e.length?(n.next(e[o++]),n.closed||i.add(this.schedule())):n.complete()})),i})}},2148(e,t,n){\"use strict\";n.d(t,{S:()=>a});var i=n(9386),r=n(9290),o=n(3840);function a(e,t){if(!e)throw new Error(\"Iterable cannot be null\");return new i.c(function(n){var i,a=new r.y;return a.add(function(){i&&\"function\"==typeof i.return&&i.return()}),a.add(t.schedule(function(){i=e[o.lJ](),a.add(t.schedule(function(){if(!n.closed){var e,t;try{var r=i.next();e=r.value,t=r.done}catch(e){return void n.error(e)}t?n.complete():(n.next(e),this.schedule())}}))})),a})}},9475(e,t,n){\"use strict\";n.d(t,{x:()=>a});var i=n(9386),r=n(9290),o=n(9067);function a(e,t){return new i.c(function(n){var i=new r.y;return i.add(t.schedule(function(){var r=e[o.s]();i.add(r.subscribe({next:function(e){i.add(t.schedule(function(){return n.next(e)}))},error:function(e){i.add(t.schedule(function(){return n.error(e)}))},complete:function(){i.add(t.schedule(function(){return n.complete()}))}}))})),i})}},4545(e,t,n){\"use strict\";n.d(t,{P:()=>o});var i=n(9386),r=n(9290);function o(e,t){return new i.c(function(n){var i=new r.y;return i.add(t.schedule(function(){return e.then(function(e){i.add(t.schedule(function(){n.next(e),i.add(t.schedule(function(){return n.complete()}))}))},function(e){i.add(t.schedule(function(){return n.error(e)}))})})),i})}},2132(e,t,n){\"use strict\";n.d(t,{c:()=>l});var i=n(9475),r=n(4545),o=n(941),a=n(2148),s=n(9184),c=n(689),d=n(1738),u=n(2068);function l(e,t){if(null!=e){if((0,s.l)(e))return(0,i.x)(e,t);if((0,c.y)(e))return(0,r.P)(e,t);if((0,d.X)(e))return(0,o.V)(e,t);if((0,u.x)(e)||\"string\"==typeof e)return(0,a.S)(e,t)}throw new TypeError((null!==e&&typeof e||e)+\" is not observable\")}},1897(e,t,n){\"use strict\";n.d(t,{R:()=>r});var i=n(5779),r=function(e){function t(t,n){var i=e.call(this,t,n)||this;return i.scheduler=t,i.work=n,i.pending=!1,i}return i.C6(t,e),t.prototype.schedule=function(e,t){if(void 0===t&&(t=0),this.closed)return this;this.state=e;var n=this.id,i=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(i,n,t)),this.pending=!0,this.delay=t,this.id=this.id||this.requestAsyncId(i,this.id,t),this},t.prototype.requestAsyncId=function(e,t,n){return void 0===n&&(n=0),setInterval(e.flush.bind(e,this),n)},t.prototype.recycleAsyncId=function(e,t,n){if(void 0===n&&(n=0),null!==n&&this.delay===n&&!1===this.pending)return t;clearInterval(t)},t.prototype.execute=function(e,t){if(this.closed)return new Error(\"executing a cancelled action\");this.pending=!1;var n=this._execute(e,t);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(e,t){var n=!1,i=void 0;try{this.work(e)}catch(e){n=!0,i=!!e&&e||new Error(e)}if(n)return this.unsubscribe(),i},t.prototype._unsubscribe=function(){var e=this.id,t=this.scheduler,n=t.actions,i=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==i&&n.splice(i,1),null!=e&&(this.id=this.recycleAsyncId(t,e,null)),this.delay=null},t}(function(e){function t(t,n){return e.call(this)||this}return i.C6(t,e),t.prototype.schedule=function(e,t){return void 0===t&&(t=0),this},t}(n(9290).y))},8044(e,t,n){\"use strict\";n.d(t,{q:()=>o});var i=n(5779),r=n(6182),o=function(e){function t(n,i){void 0===i&&(i=r._.now);var o=e.call(this,n,function(){return t.delegate&&t.delegate!==o?t.delegate.now():i()})||this;return o.actions=[],o.active=!1,o.scheduled=void 0,o}return i.C6(t,e),t.prototype.schedule=function(n,i,r){return void 0===i&&(i=0),t.delegate&&t.delegate!==this?t.delegate.schedule(n,i,r):e.prototype.schedule.call(this,n,i,r)},t.prototype.flush=function(e){var t=this.actions;if(this.active)t.push(e);else{var n;this.active=!0;do{if(n=e.execute(e.state,e.delay))break}while(e=t.shift());if(this.active=!1,n){for(;e=t.shift();)e.unsubscribe();throw n}}},t}(r._)},7734(e,t,n){\"use strict\";n.d(t,{I:()=>l,$:()=>u});var i=n(5779),r=1,o=function(){return Promise.resolve()}(),a={};function s(e){return e in a&&(delete a[e],!0)}var c=function(e){function t(t,n){var i=e.call(this,t,n)||this;return i.scheduler=t,i.work=n,i}return i.C6(t,e),t.prototype.requestAsyncId=function(t,n,i){return void 0===i&&(i=0),null!==i&&i>0?e.prototype.requestAsyncId.call(this,t,n,i):(t.actions.push(this),t.scheduled||(t.scheduled=(c=t.flush.bind(t,null),d=r++,a[d]=!0,o.then(function(){return s(d)&&c()}),d)));var c,d},t.prototype.recycleAsyncId=function(t,n,i){if(void 0===i&&(i=0),null!==i&&i>0||null===i&&this.delay>0)return e.prototype.recycleAsyncId.call(this,t,n,i);0===t.actions.length&&(s(n),t.scheduled=void 0)},t}(n(1897).R),d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i.C6(t,e),t.prototype.flush=function(e){this.active=!0,this.scheduled=void 0;var t,n=this.actions,i=-1,r=n.length;e=e||n.shift();do{if(t=e.execute(e.state,e.delay))break}while(++i<r&&(e=n.shift()));if(this.active=!1,t){for(;++i<r&&(e=n.shift());)e.unsubscribe();throw t}},t}(n(8044).q),u=new d(c),l=u},5573(e,t,n){\"use strict\";n.d(t,{E:()=>r,b:()=>o});var i=n(1897),r=new(n(8044).q)(i.R),o=r},4126(e,t,n){\"use strict\";n.d(t,{g:()=>s,T:()=>a});var i=n(5779),r=function(e){function t(t,n){var i=e.call(this,t,n)||this;return i.scheduler=t,i.work=n,i}return i.C6(t,e),t.prototype.schedule=function(t,n){return void 0===n&&(n=0),n>0?e.prototype.schedule.call(this,t,n):(this.delay=n,this.state=t,this.scheduler.flush(this),this)},t.prototype.execute=function(t,n){return n>0||this.closed?e.prototype.execute.call(this,t,n):this._execute(t,n)},t.prototype.requestAsyncId=function(t,n,i){return void 0===i&&(i=0),null!==i&&i>0||null===i&&this.delay>0?e.prototype.requestAsyncId.call(this,t,n,i):t.flush(this)},t}(n(1897).R),o=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i.C6(t,e),t}(n(8044).q),a=new o(r),s=a},3840(e,t,n){\"use strict\";function i(){return\"function\"==typeof Symbol&&Symbol.iterator?Symbol.iterator:\"@@iterator\"}n.d(t,{lJ:()=>r});var r=i()},9067(e,t,n){\"use strict\";n.d(t,{s:()=>i});var i=function(){return\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\"}()},6014(e,t,n){\"use strict\";n.d(t,{D:()=>i});var i=function(){return\"function\"==typeof Symbol?Symbol(\"rxSubscriber\"):\"@@rxSubscriber_\"+Math.random()}()},2413(e,t,n){\"use strict\";n.d(t,{k:()=>i});var i=function(){function e(){return Error.call(this),this.message=\"argument out of range\",this.name=\"ArgumentOutOfRangeError\",this}return e.prototype=Object.create(Error.prototype),e}()},963(e,t,n){\"use strict\";n.d(t,{G:()=>i});var i=function(){function e(){return Error.call(this),this.message=\"no elements in sequence\",this.name=\"EmptyError\",this}return e.prototype=Object.create(Error.prototype),e}()},6306(e,t,n){\"use strict\";n.d(t,{P:()=>i});var i=function(){function e(){return Error.call(this),this.message=\"object unsubscribed\",this.name=\"ObjectUnsubscribedError\",this}return e.prototype=Object.create(Error.prototype),e}()},5(e,t,n){\"use strict\";n.d(t,{M:()=>i});var i=function(){function e(){return Error.call(this),this.message=\"Timeout has occurred\",this.name=\"TimeoutError\",this}return e.prototype=Object.create(Error.prototype),e}()},9368(e,t,n){\"use strict\";n.d(t,{Z:()=>i});var i=function(){function e(e){return Error.call(this),this.message=e?e.length+\" errors occurred during unsubscription:\\n\"+e.map(function(e,t){return t+1+\") \"+e.toString()}).join(\"\\n  \"):\"\",this.name=\"UnsubscriptionError\",this.errors=e,this}return e.prototype=Object.create(Error.prototype),e}()},2724(e,t,n){\"use strict\";n.d(t,{H:()=>r});var i=n(3409);function r(e){for(;e;){var t=e,n=t.closed,r=t.destination,o=t.isStopped;if(n||o)return!1;e=r&&r instanceof i.v?r:null}return!0}},3762(e,t,n){\"use strict\";function i(e){setTimeout(function(){throw e},0)}n.d(t,{T:()=>i})},8604(e,t,n){\"use strict\";function i(e){return e}n.d(t,{D:()=>i})},2733(e,t,n){\"use strict\";n.d(t,{c:()=>i});var i=function(){return Array.isArray||function(e){return e&&\"number\"==typeof e.length}}()},1738(e,t,n){\"use strict\";n.d(t,{X:()=>i});var i=function(e){return e&&\"number\"==typeof e.length&&\"function\"!=typeof e}},1454(e,t,n){\"use strict\";function i(e){return e instanceof Date&&!isNaN(+e)}n.d(t,{$:()=>i})},3278(e,t,n){\"use strict\";function i(e){return\"function\"==typeof e}n.d(t,{T:()=>i})},9184(e,t,n){\"use strict\";n.d(t,{l:()=>r});var i=n(9067);function r(e){return e&&\"function\"==typeof e[i.s]}},2068(e,t,n){\"use strict\";n.d(t,{x:()=>r});var i=n(3840);function r(e){return e&&\"function\"==typeof e[i.lJ]}},899(e,t,n){\"use strict\";n.d(t,{k:()=>r});var i=n(2733);function r(e){return!(0,i.c)(e)&&e-parseFloat(e)+1>=0}},9273(e,t,n){\"use strict\";function i(e){return null!==e&&\"object\"==typeof e}n.d(t,{G:()=>i})},689(e,t,n){\"use strict\";function i(e){return!!e&&\"function\"!=typeof e.subscribe&&\"function\"==typeof e.then}n.d(t,{y:()=>i})},3017(e,t,n){\"use strict\";function i(e){return e&&\"function\"==typeof e.schedule}n.d(t,{m:()=>i})},906(e,t,n){\"use strict\";function i(){}n.d(t,{l:()=>i})},8153(e,t,n){\"use strict\";function i(e,t){function n(){return!n.pred.apply(n.thisArg,arguments)}return n.pred=e,n.thisArg=t,n}n.d(t,{A:()=>i})},990(e,t,n){\"use strict\";n.d(t,{F:()=>r,m:()=>o});var i=n(8604);function r(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return o(e)}function o(e){return 0===e.length?i.D:1===e.length?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)}}},1109(e,t,n){\"use strict\";n.d(t,{i:()=>h});var i=n(5168),r=n(7688),o=n(3683),a=n(2376),s=n(1738),c=n(689),d=n(9273),u=n(3840),l=n(9067),h=function(e){if(e&&\"function\"==typeof e[l.s])return(0,a.X)(e);if((0,s.X)(e))return(0,i.v)(e);if((0,c.y)(e))return(0,r.F)(e);if(e&&\"function\"==typeof e[u.lJ])return(0,o.S)(e);var t=(0,d.G)(e)?\"an invalid object\":\"'\"+e+\"'\";throw new TypeError(\"You provided \"+t+\" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.\")}},5168(e,t,n){\"use strict\";n.d(t,{v:()=>i});var i=function(e){return function(t){for(var n=0,i=e.length;n<i&&!t.closed;n++)t.next(e[n]);t.complete()}}},3683(e,t,n){\"use strict\";n.d(t,{S:()=>r});var i=n(3840),r=function(e){return function(t){for(var n=e[i.lJ]();;){var r=void 0;try{r=n.next()}catch(e){return t.error(e),t}if(r.done){t.complete();break}if(t.next(r.value),t.closed)break}return\"function\"==typeof n.return&&t.add(function(){n.return&&n.return()}),t}}},2376(e,t,n){\"use strict\";n.d(t,{X:()=>r});var i=n(9067),r=function(e){return function(t){var n=e[i.s]();if(\"function\"!=typeof n.subscribe)throw new TypeError(\"Provided object does not correctly implement Symbol.observable\");return n.subscribe(t)}}},7688(e,t,n){\"use strict\";n.d(t,{F:()=>r});var i=n(3762),r=function(e){return function(t){return e.then(function(e){t.closed||(t.next(e),t.complete())},function(e){return t.error(e)}).then(null,i.T),t}}},7408(e,t,n){\"use strict\";n.d(t,{F:()=>s});var i=n(5779),r=function(e){function t(t,n,i){var r=e.call(this)||this;return r.parent=t,r.outerValue=n,r.outerIndex=i,r.index=0,r}return i.C6(t,e),t.prototype._next=function(e){this.parent.notifyNext(this.outerValue,e,this.outerIndex,this.index++,this)},t.prototype._error=function(e){this.parent.notifyError(e,this),this.unsubscribe()},t.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},t}(n(3409).v),o=n(1109),a=n(9386);function s(e,t,n,i,s){if(void 0===s&&(s=new r(e,n,i)),!s.closed)return t instanceof a.c?t.subscribe(s):(0,o.i)(t)(s)}},9297(e,t,n){\"use strict\";n.d(t,{u:()=>a});var i=n(3409),r=n(6014),o=n(8805);function a(e,t,n){if(e){if(e instanceof i.v)return e;if(e[r.D])return e[r.D]()}return e||t||n?new i.v(e,t,n):new i.v(o.I)}},473(e,t,n){\"use strict\";n.r(t),n.d(t,{audit:()=>o,auditTime:()=>u,buffer:()=>l,bufferCount:()=>y,bufferTime:()=>b,bufferToggle:()=>k,bufferWhen:()=>N,catchError:()=>z.W,combineAll:()=>B,combineLatest:()=>U,concat:()=>q,concatAll:()=>H.K,concatMap:()=>W,concatMapTo:()=>$,count:()=>Y,debounce:()=>J,debounceTime:()=>ee,defaultIfEmpty:()=>re,delay:()=>se.c,delayWhen:()=>de,dematerialize:()=>me,distinct:()=>ge,distinctUntilChanged:()=>be.F,distinctUntilKeyChanged:()=>Se,elementAt:()=>ke,endWith:()=>Me,every:()=>Ne,exhaust:()=>ze,exhaustMap:()=>Le,expand:()=>qe,filter:()=>Ce.p,finalize:()=>We,find:()=>Ke,findIndex:()=>Ze,first:()=>et,flatMap:()=>G.qI,groupBy:()=>tt.$,ignoreElements:()=>nt,isEmpty:()=>ot,last:()=>ht,map:()=>je.T,mapTo:()=>pt,materialize:()=>gt,max:()=>Pt,merge:()=>Ot,mergeAll:()=>At.U,mergeMap:()=>G.ZZ,mergeMapTo:()=>Tt,mergeScan:()=>kt,min:()=>Nt,multicast:()=>Rt,observeOn:()=>Ft.QE,onErrorResumeNext:()=>Bt,pairwise:()=>Ut,partition:()=>Gt,pluck:()=>Wt,publish:()=>Yt,publishBehavior:()=>Qt,publishLast:()=>Zt,publishReplay:()=>en,race:()=>nn,reduce:()=>It,refCount:()=>mn.B,repeat:()=>rn,repeatWhen:()=>sn,retry:()=>un,retryWhen:()=>pn.l,sample:()=>yn,sampleTime:()=>vn,scan:()=>bt,sequenceEqual:()=>wn,share:()=>On,shareReplay:()=>An.t,single:()=>Tn,skip:()=>Mn,skipLast:()=>Rn,skipUntil:()=>Bn,skipWhile:()=>Un,startWith:()=>Hn,subscribeOn:()=>Yn,switchAll:()=>Jn,switchMap:()=>Qn.n,switchMapTo:()=>Zn,take:()=>Te.s,takeLast:()=>dt,takeUntil:()=>Xn,takeWhile:()=>ni,tap:()=>si,throttle:()=>li,throttleTime:()=>mi,throwIfEmpty:()=>Pe,timeInterval:()=>_i,timeout:()=>Oi,timeoutWith:()=>Ci,timestamp:()=>Ai,toArray:()=>xi,window:()=>Mi,windowCount:()=>Ri,windowTime:()=>Bi,windowToggle:()=>Gi,windowWhen:()=>Yi,withLatestFrom:()=>Ji,zip:()=>tr,zipAll:()=>nr});var i=n(5779),r=n(9559);function o(e){return function(t){return t.lift(new a(e))}}var a=function(){function e(e){this.durationSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new s(e,this.durationSelector))},e}(),s=function(e){function t(t,n){var i=e.call(this,t)||this;return i.durationSelector=n,i.hasValue=!1,i}return i.C6(t,e),t.prototype._next=function(e){if(this.value=e,this.hasValue=!0,!this.throttled){var t=void 0;try{t=(0,this.durationSelector)(e)}catch(e){return this.destination.error(e)}var n=(0,r.tS)(t,new r.zA(this));!n||n.closed?this.clearThrottle():this.add(this.throttled=n)}},t.prototype.clearThrottle=function(){var e=this,t=e.value,n=e.hasValue,i=e.throttled;i&&(this.remove(i),this.throttled=void 0,i.unsubscribe()),n&&(this.value=void 0,this.hasValue=!1,this.destination.next(t))},t.prototype.notifyNext=function(){this.clearThrottle()},t.prototype.notifyComplete=function(){this.clearThrottle()},t}(r.gn),c=n(5573),d=n(5520);function u(e,t){return void 0===t&&(t=c.b),o(function(){return(0,d.O)(e,t)})}function l(e){return function(t){return t.lift(new h(e))}}var h=function(){function e(e){this.closingNotifier=e}return e.prototype.call=function(e,t){return t.subscribe(new p(e,this.closingNotifier))},e}(),p=function(e){function t(t,n){var i=e.call(this,t)||this;return i.buffer=[],i.add((0,r.tS)(n,new r.zA(i))),i}return i.C6(t,e),t.prototype._next=function(e){this.buffer.push(e)},t.prototype.notifyNext=function(){var e=this.buffer;this.buffer=[],this.destination.next(e)},t}(r.gn),m=n(3409);function y(e,t){return void 0===t&&(t=null),function(n){return n.lift(new f(e,t))}}var f=function(){function e(e,t){this.bufferSize=e,this.startBufferEvery=t,this.subscriberClass=t&&e!==t?v:g}return e.prototype.call=function(e,t){return t.subscribe(new this.subscriberClass(e,this.bufferSize,this.startBufferEvery))},e}(),g=function(e){function t(t,n){var i=e.call(this,t)||this;return i.bufferSize=n,i.buffer=[],i}return i.C6(t,e),t.prototype._next=function(e){var t=this.buffer;t.push(e),t.length==this.bufferSize&&(this.destination.next(t),this.buffer=[])},t.prototype._complete=function(){var t=this.buffer;t.length>0&&this.destination.next(t),e.prototype._complete.call(this)},t}(m.v),v=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.bufferSize=n,r.startBufferEvery=i,r.buffers=[],r.count=0,r}return i.C6(t,e),t.prototype._next=function(e){var t=this,n=t.bufferSize,i=t.startBufferEvery,r=t.buffers,o=t.count;this.count++,o%i===0&&r.push([]);for(var a=r.length;a--;){var s=r[a];s.push(e),s.length===n&&(r.splice(a,1),this.destination.next(s))}},t.prototype._complete=function(){for(var t=this.buffers,n=this.destination;t.length>0;){var i=t.shift();i.length>0&&n.next(i)}e.prototype._complete.call(this)},t}(m.v),_=n(3017);function b(e){var t=arguments.length,n=c.b;(0,_.m)(arguments[arguments.length-1])&&(n=arguments[arguments.length-1],t--);var i=null;t>=2&&(i=arguments[1]);var r=Number.POSITIVE_INFINITY;return t>=3&&(r=arguments[2]),function(t){return t.lift(new S(e,i,r,n))}}var S=function(){function e(e,t,n,i){this.bufferTimeSpan=e,this.bufferCreationInterval=t,this.maxBufferSize=n,this.scheduler=i}return e.prototype.call=function(e,t){return t.subscribe(new C(e,this.bufferTimeSpan,this.bufferCreationInterval,this.maxBufferSize,this.scheduler))},e}(),w=function(){return function(){this.buffer=[]}}(),C=function(e){function t(t,n,i,r,o){var a=e.call(this,t)||this;a.bufferTimeSpan=n,a.bufferCreationInterval=i,a.maxBufferSize=r,a.scheduler=o,a.contexts=[];var s=a.openContext();if(a.timespanOnly=null==i||i<0,a.timespanOnly){var c={subscriber:a,context:s,bufferTimeSpan:n};a.add(s.closeAction=o.schedule(I,n,c))}else{var d={subscriber:a,context:s},u={bufferTimeSpan:n,bufferCreationInterval:i,subscriber:a,scheduler:o};a.add(s.closeAction=o.schedule(E,n,d)),a.add(o.schedule(P,i,u))}return a}return i.C6(t,e),t.prototype._next=function(e){for(var t,n=this.contexts,i=n.length,r=0;r<i;r++){var o=n[r],a=o.buffer;a.push(e),a.length==this.maxBufferSize&&(t=o)}t&&this.onBufferFull(t)},t.prototype._error=function(t){this.contexts.length=0,e.prototype._error.call(this,t)},t.prototype._complete=function(){for(var t=this.contexts,n=this.destination;t.length>0;){var i=t.shift();n.next(i.buffer)}e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){this.contexts=null},t.prototype.onBufferFull=function(e){this.closeContext(e);var t=e.closeAction;if(t.unsubscribe(),this.remove(t),!this.closed&&this.timespanOnly){e=this.openContext();var n=this.bufferTimeSpan,i={subscriber:this,context:e,bufferTimeSpan:n};this.add(e.closeAction=this.scheduler.schedule(I,n,i))}},t.prototype.openContext=function(){var e=new w;return this.contexts.push(e),e},t.prototype.closeContext=function(e){this.destination.next(e.buffer);var t=this.contexts;(t?t.indexOf(e):-1)>=0&&t.splice(t.indexOf(e),1)},t}(m.v);function I(e){var t=e.subscriber,n=e.context;n&&t.closeContext(n),t.closed||(e.context=t.openContext(),e.context.closeAction=this.schedule(e,e.bufferTimeSpan))}function P(e){var t=e.bufferCreationInterval,n=e.bufferTimeSpan,i=e.subscriber,r=e.scheduler,o=i.openContext();i.closed||(i.add(o.closeAction=r.schedule(E,n,{subscriber:i,context:o})),this.schedule(e,t))}function E(e){var t=e.subscriber,n=e.context;t.closeContext(n)}var O=n(9290),A=n(7408),T=n(5422);function k(e,t){return function(n){return n.lift(new x(e,t))}}var x=function(){function e(e,t){this.openings=e,this.closingSelector=t}return e.prototype.call=function(e,t){return t.subscribe(new M(e,this.openings,this.closingSelector))},e}(),M=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.closingSelector=i,r.contexts=[],r.add((0,A.F)(r,n)),r}return i.C6(t,e),t.prototype._next=function(e){for(var t=this.contexts,n=t.length,i=0;i<n;i++)t[i].buffer.push(e)},t.prototype._error=function(t){for(var n=this.contexts;n.length>0;){var i=n.shift();i.subscription.unsubscribe(),i.buffer=null,i.subscription=null}this.contexts=null,e.prototype._error.call(this,t)},t.prototype._complete=function(){for(var t=this.contexts;t.length>0;){var n=t.shift();this.destination.next(n.buffer),n.subscription.unsubscribe(),n.buffer=null,n.subscription=null}this.contexts=null,e.prototype._complete.call(this)},t.prototype.notifyNext=function(e,t){e?this.closeBuffer(e):this.openBuffer(t)},t.prototype.notifyComplete=function(e){this.closeBuffer(e.context)},t.prototype.openBuffer=function(e){try{var t=this.closingSelector.call(this,e);t&&this.trySubscribe(t)}catch(e){this._error(e)}},t.prototype.closeBuffer=function(e){var t=this.contexts;if(t&&e){var n=e.buffer,i=e.subscription;this.destination.next(n),t.splice(t.indexOf(e),1),this.remove(i),i.unsubscribe()}},t.prototype.trySubscribe=function(e){var t=this.contexts,n=new O.y,i={buffer:[],subscription:n};t.push(i);var r=(0,A.F)(this,e,i);!r||r.closed?this.closeBuffer(i):(r.context=i,this.add(r),n.add(r))},t}(T.E);function N(e){return function(t){return t.lift(new D(e))}}var D=function(){function e(e){this.closingSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new R(e,this.closingSelector))},e}(),R=function(e){function t(t,n){var i=e.call(this,t)||this;return i.closingSelector=n,i.subscribing=!1,i.openBuffer(),i}return i.C6(t,e),t.prototype._next=function(e){this.buffer.push(e)},t.prototype._complete=function(){var t=this.buffer;t&&this.destination.next(t),e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){this.buffer=void 0,this.subscribing=!1},t.prototype.notifyNext=function(){this.openBuffer()},t.prototype.notifyComplete=function(){this.subscribing?this.complete():this.openBuffer()},t.prototype.openBuffer=function(){var e=this.closingSubscription;e&&(this.remove(e),e.unsubscribe());var t,n=this.buffer;this.buffer&&this.destination.next(n),this.buffer=[];try{t=(0,this.closingSelector)()}catch(e){return this.error(e)}e=new O.y,this.closingSubscription=e,this.add(e),this.subscribing=!0,e.add((0,r.tS)(t,new r.zA(this))),this.subscribing=!1},t}(r.gn),z=n(9586),F=n(3483);function B(e){return function(t){return t.lift(new F.ZS(e))}}var j=n(2733),L=n(8241);function U(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=null;return\"function\"==typeof e[e.length-1]&&(n=e.pop()),1===e.length&&(0,j.c)(e[0])&&(e=e[0].slice()),function(t){return t.lift.call((0,L.H)([t].concat(e)),new F.ZS(n))}}var V=n(9301);function q(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return t.lift.call(V.x.apply(void 0,[t].concat(e)))}}var H=n(8930),G=n(6083);function W(e,t){return(0,G.ZZ)(e,t,1)}function $(e,t){return W(function(){return e},t)}function Y(e){return function(t){return t.lift(new K(e,t))}}var K=function(){function e(e,t){this.predicate=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new Q(e,this.predicate,this.source))},e}(),Q=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.predicate=n,r.source=i,r.count=0,r.index=0,r}return i.C6(t,e),t.prototype._next=function(e){this.predicate?this._tryPredicate(e):this.count++},t.prototype._tryPredicate=function(e){var t;try{t=this.predicate(e,this.index++,this.source)}catch(e){return void this.destination.error(e)}t&&this.count++},t.prototype._complete=function(){this.destination.next(this.count),this.destination.complete()},t}(m.v);function J(e){return function(t){return t.lift(new Z(e))}}var Z=function(){function e(e){this.durationSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new X(e,this.durationSelector))},e}(),X=function(e){function t(t,n){var i=e.call(this,t)||this;return i.durationSelector=n,i.hasValue=!1,i}return i.C6(t,e),t.prototype._next=function(e){try{var t=this.durationSelector.call(this,e);t&&this._tryNext(e,t)}catch(e){this.destination.error(e)}},t.prototype._complete=function(){this.emitValue(),this.destination.complete()},t.prototype._tryNext=function(e,t){var n=this.durationSubscription;this.value=e,this.hasValue=!0,n&&(n.unsubscribe(),this.remove(n)),(n=(0,r.tS)(t,new r.zA(this)))&&!n.closed&&this.add(this.durationSubscription=n)},t.prototype.notifyNext=function(){this.emitValue()},t.prototype.notifyComplete=function(){this.emitValue()},t.prototype.emitValue=function(){if(this.hasValue){var t=this.value,n=this.durationSubscription;n&&(this.durationSubscription=void 0,n.unsubscribe(),this.remove(n)),this.value=void 0,this.hasValue=!1,e.prototype._next.call(this,t)}},t}(r.gn);function ee(e,t){return void 0===t&&(t=c.b),function(n){return n.lift(new te(e,t))}}var te=function(){function e(e,t){this.dueTime=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new ne(e,this.dueTime,this.scheduler))},e}(),ne=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.dueTime=n,r.scheduler=i,r.debouncedSubscription=null,r.lastValue=null,r.hasValue=!1,r}return i.C6(t,e),t.prototype._next=function(e){this.clearDebounce(),this.lastValue=e,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(ie,this.dueTime,this))},t.prototype._complete=function(){this.debouncedNext(),this.destination.complete()},t.prototype.debouncedNext=function(){if(this.clearDebounce(),this.hasValue){var e=this.lastValue;this.lastValue=null,this.hasValue=!1,this.destination.next(e)}},t.prototype.clearDebounce=function(){var e=this.debouncedSubscription;null!==e&&(this.remove(e),e.unsubscribe(),this.debouncedSubscription=null)},t}(m.v);function ie(e){e.debouncedNext()}function re(e){return void 0===e&&(e=null),function(t){return t.lift(new oe(e))}}var oe=function(){function e(e){this.defaultValue=e}return e.prototype.call=function(e,t){return t.subscribe(new ae(e,this.defaultValue))},e}(),ae=function(e){function t(t,n){var i=e.call(this,t)||this;return i.defaultValue=n,i.isEmpty=!0,i}return i.C6(t,e),t.prototype._next=function(e){this.isEmpty=!1,this.destination.next(e)},t.prototype._complete=function(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()},t}(m.v),se=n(3158),ce=n(9386);function de(e,t){return t?function(n){return new he(n,t).lift(new ue(e))}:function(t){return t.lift(new ue(e))}}var ue=function(){function e(e){this.delayDurationSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new le(e,this.delayDurationSelector))},e}(),le=function(e){function t(t,n){var i=e.call(this,t)||this;return i.delayDurationSelector=n,i.completed=!1,i.delayNotifierSubscriptions=[],i.index=0,i}return i.C6(t,e),t.prototype.notifyNext=function(e,t,n,i,r){this.destination.next(e),this.removeSubscription(r),this.tryComplete()},t.prototype.notifyError=function(e,t){this._error(e)},t.prototype.notifyComplete=function(e){var t=this.removeSubscription(e);t&&this.destination.next(t),this.tryComplete()},t.prototype._next=function(e){var t=this.index++;try{var n=this.delayDurationSelector(e,t);n&&this.tryDelay(n,e)}catch(e){this.destination.error(e)}},t.prototype._complete=function(){this.completed=!0,this.tryComplete(),this.unsubscribe()},t.prototype.removeSubscription=function(e){e.unsubscribe();var t=this.delayNotifierSubscriptions.indexOf(e);return-1!==t&&this.delayNotifierSubscriptions.splice(t,1),e.outerValue},t.prototype.tryDelay=function(e,t){var n=(0,A.F)(this,e,t);n&&!n.closed&&(this.destination.add(n),this.delayNotifierSubscriptions.push(n))},t.prototype.tryComplete=function(){this.completed&&0===this.delayNotifierSubscriptions.length&&this.destination.complete()},t}(T.E),he=function(e){function t(t,n){var i=e.call(this)||this;return i.source=t,i.subscriptionDelay=n,i}return i.C6(t,e),t.prototype._subscribe=function(e){this.subscriptionDelay.subscribe(new pe(e,this.source))},t}(ce.c),pe=function(e){function t(t,n){var i=e.call(this)||this;return i.parent=t,i.source=n,i.sourceSubscribed=!1,i}return i.C6(t,e),t.prototype._next=function(e){this.subscribeToSource()},t.prototype._error=function(e){this.unsubscribe(),this.parent.error(e)},t.prototype._complete=function(){this.unsubscribe(),this.subscribeToSource()},t.prototype.subscribeToSource=function(){this.sourceSubscribed||(this.sourceSubscribed=!0,this.unsubscribe(),this.source.subscribe(this.parent))},t}(m.v);function me(){return function(e){return e.lift(new ye)}}var ye=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new fe(e))},e}(),fe=function(e){function t(t){return e.call(this,t)||this}return i.C6(t,e),t.prototype._next=function(e){e.observe(this.destination)},t}(m.v);function ge(e,t){return function(n){return n.lift(new ve(e,t))}}var ve=function(){function e(e,t){this.keySelector=e,this.flushes=t}return e.prototype.call=function(e,t){return t.subscribe(new _e(e,this.keySelector,this.flushes))},e}(),_e=function(e){function t(t,n,i){var o=e.call(this,t)||this;return o.keySelector=n,o.values=new Set,i&&o.add((0,r.tS)(i,new r.zA(o))),o}return i.C6(t,e),t.prototype.notifyNext=function(){this.values.clear()},t.prototype.notifyError=function(e){this._error(e)},t.prototype._next=function(e){this.keySelector?this._useKeySelector(e):this._finalizeNext(e,e)},t.prototype._useKeySelector=function(e){var t,n=this.destination;try{t=this.keySelector(e)}catch(e){return void n.error(e)}this._finalizeNext(t,e)},t.prototype._finalizeNext=function(e,t){var n=this.values;n.has(e)||(n.add(e),this.destination.next(t))},t}(r.gn),be=n(8669);function Se(e,t){return(0,be.F)(function(n,i){return t?t(n[e],i[e]):n[e]===i[e]})}var we=n(2413),Ce=n(6275),Ie=n(963);function Pe(e){return void 0===e&&(e=Ae),function(t){return t.lift(new Ee(e))}}var Ee=function(){function e(e){this.errorFactory=e}return e.prototype.call=function(e,t){return t.subscribe(new Oe(e,this.errorFactory))},e}(),Oe=function(e){function t(t,n){var i=e.call(this,t)||this;return i.errorFactory=n,i.hasValue=!1,i}return i.C6(t,e),t.prototype._next=function(e){this.hasValue=!0,this.destination.next(e)},t.prototype._complete=function(){if(this.hasValue)return this.destination.complete();var e=void 0;try{e=this.errorFactory()}catch(t){e=t}this.destination.error(e)},t}(m.v);function Ae(){return new Ie.G}var Te=n(1698);function ke(e,t){if(e<0)throw new we.k;var n=arguments.length>=2;return function(i){return i.pipe((0,Ce.p)(function(t,n){return n===e}),(0,Te.s)(1),n?re(t):Pe(function(){return new we.k}))}}var xe=n(4128);function Me(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return(0,V.x)(t,xe.of.apply(void 0,e))}}function Ne(e,t){return function(n){return n.lift(new De(e,t,n))}}var De=function(){function e(e,t,n){this.predicate=e,this.thisArg=t,this.source=n}return e.prototype.call=function(e,t){return t.subscribe(new Re(e,this.predicate,this.thisArg,this.source))},e}(),Re=function(e){function t(t,n,i,r){var o=e.call(this,t)||this;return o.predicate=n,o.thisArg=i,o.source=r,o.index=0,o.thisArg=i||o,o}return i.C6(t,e),t.prototype.notifyComplete=function(e){this.destination.next(e),this.destination.complete()},t.prototype._next=function(e){var t=!1;try{t=this.predicate.call(this.thisArg,e,this.index++,this.source)}catch(e){return void this.destination.error(e)}t||this.notifyComplete(!1)},t.prototype._complete=function(){this.notifyComplete(!0)},t}(m.v);function ze(){return function(e){return e.lift(new Fe)}}var Fe=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new Be(e))},e}(),Be=function(e){function t(t){var n=e.call(this,t)||this;return n.hasCompleted=!1,n.hasSubscription=!1,n}return i.C6(t,e),t.prototype._next=function(e){this.hasSubscription||(this.hasSubscription=!0,this.add((0,r.tS)(e,new r.zA(this))))},t.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete()},t.prototype.notifyComplete=function(){this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},t}(r.gn),je=n(2035);function Le(e,t){return t?function(n){return n.pipe(Le(function(n,i){return(0,L.H)(e(n,i)).pipe((0,je.T)(function(e,r){return t(n,e,i,r)}))}))}:function(t){return t.lift(new Ue(e))}}var Ue=function(){function e(e){this.project=e}return e.prototype.call=function(e,t){return t.subscribe(new Ve(e,this.project))},e}(),Ve=function(e){function t(t,n){var i=e.call(this,t)||this;return i.project=n,i.hasSubscription=!1,i.hasCompleted=!1,i.index=0,i}return i.C6(t,e),t.prototype._next=function(e){this.hasSubscription||this.tryNext(e)},t.prototype.tryNext=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(e){return void this.destination.error(e)}this.hasSubscription=!0,this._innerSub(t)},t.prototype._innerSub=function(e){var t=new r.zA(this),n=this.destination;n.add(t);var i=(0,r.tS)(e,t);i!==t&&n.add(i)},t.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete(),this.unsubscribe()},t.prototype.notifyNext=function(e){this.destination.next(e)},t.prototype.notifyError=function(e){this.destination.error(e)},t.prototype.notifyComplete=function(){this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},t}(r.gn);function qe(e,t,n){return void 0===t&&(t=Number.POSITIVE_INFINITY),t=(t||0)<1?Number.POSITIVE_INFINITY:t,function(i){return i.lift(new He(e,t,n))}}var He=function(){function e(e,t,n){this.project=e,this.concurrent=t,this.scheduler=n}return e.prototype.call=function(e,t){return t.subscribe(new Ge(e,this.project,this.concurrent,this.scheduler))},e}(),Ge=function(e){function t(t,n,i,r){var o=e.call(this,t)||this;return o.project=n,o.concurrent=i,o.scheduler=r,o.index=0,o.active=0,o.hasCompleted=!1,i<Number.POSITIVE_INFINITY&&(o.buffer=[]),o}return i.C6(t,e),t.dispatch=function(e){var t=e.subscriber,n=e.result,i=e.value,r=e.index;t.subscribeToProjection(n,i,r)},t.prototype._next=function(e){var n=this.destination;if(n.closed)this._complete();else{var i=this.index++;if(this.active<this.concurrent){n.next(e);try{var r=(0,this.project)(e,i);if(this.scheduler){var o={subscriber:this,result:r,value:e,index:i};this.destination.add(this.scheduler.schedule(t.dispatch,0,o))}else this.subscribeToProjection(r,e,i)}catch(e){n.error(e)}}else this.buffer.push(e)}},t.prototype.subscribeToProjection=function(e,t,n){this.active++,this.destination.add((0,r.tS)(e,new r.zA(this)))},t.prototype._complete=function(){this.hasCompleted=!0,this.hasCompleted&&0===this.active&&this.destination.complete(),this.unsubscribe()},t.prototype.notifyNext=function(e){this._next(e)},t.prototype.notifyComplete=function(){var e=this.buffer;this.active--,e&&e.length>0&&this._next(e.shift()),this.hasCompleted&&0===this.active&&this.destination.complete()},t}(r.gn);function We(e){return function(t){return t.lift(new $e(e))}}var $e=function(){function e(e){this.callback=e}return e.prototype.call=function(e,t){return t.subscribe(new Ye(e,this.callback))},e}(),Ye=function(e){function t(t,n){var i=e.call(this,t)||this;return i.add(new O.y(n)),i}return i.C6(t,e),t}(m.v);function Ke(e,t){if(\"function\"!=typeof e)throw new TypeError(\"predicate is not a function\");return function(n){return n.lift(new Qe(e,n,!1,t))}}var Qe=function(){function e(e,t,n,i){this.predicate=e,this.source=t,this.yieldIndex=n,this.thisArg=i}return e.prototype.call=function(e,t){return t.subscribe(new Je(e,this.predicate,this.source,this.yieldIndex,this.thisArg))},e}(),Je=function(e){function t(t,n,i,r,o){var a=e.call(this,t)||this;return a.predicate=n,a.source=i,a.yieldIndex=r,a.thisArg=o,a.index=0,a}return i.C6(t,e),t.prototype.notifyComplete=function(e){var t=this.destination;t.next(e),t.complete(),this.unsubscribe()},t.prototype._next=function(e){var t=this.predicate,n=this.thisArg,i=this.index++;try{t.call(n||this,e,i,this.source)&&this.notifyComplete(this.yieldIndex?i:e)}catch(e){this.destination.error(e)}},t.prototype._complete=function(){this.notifyComplete(this.yieldIndex?-1:void 0)},t}(m.v);function Ze(e,t){return function(n){return n.lift(new Qe(e,n,!0,t))}}var Xe=n(8604);function et(e,t){var n=arguments.length>=2;return function(i){return i.pipe(e?(0,Ce.p)(function(t,n){return e(t,n,i)}):Xe.D,(0,Te.s)(1),n?re(t):Pe(function(){return new Ie.G}))}}var tt=n(2331);function nt(){return function(e){return e.lift(new it)}}var it=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new rt(e))},e}(),rt=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return i.C6(t,e),t.prototype._next=function(e){},t}(m.v);function ot(){return function(e){return e.lift(new at)}}var at=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new st(e))},e}(),st=function(e){function t(t){return e.call(this,t)||this}return i.C6(t,e),t.prototype.notifyComplete=function(e){var t=this.destination;t.next(e),t.complete()},t.prototype._next=function(e){this.notifyComplete(!1)},t.prototype._complete=function(){this.notifyComplete(!0)},t}(m.v),ct=n(6780);function dt(e){return function(t){return 0===e?(0,ct.I)():t.lift(new ut(e))}}var ut=function(){function e(e){if(this.total=e,this.total<0)throw new we.k}return e.prototype.call=function(e,t){return t.subscribe(new lt(e,this.total))},e}(),lt=function(e){function t(t,n){var i=e.call(this,t)||this;return i.total=n,i.ring=new Array,i.count=0,i}return i.C6(t,e),t.prototype._next=function(e){var t=this.ring,n=this.total,i=this.count++;t.length<n?t.push(e):t[i%n]=e},t.prototype._complete=function(){var e=this.destination,t=this.count;if(t>0)for(var n=this.count>=this.total?this.total:this.count,i=this.ring,r=0;r<n;r++){var o=t++%n;e.next(i[o])}e.complete()},t}(m.v);function ht(e,t){var n=arguments.length>=2;return function(i){return i.pipe(e?(0,Ce.p)(function(t,n){return e(t,n,i)}):Xe.D,dt(1),n?re(t):Pe(function(){return new Ie.G}))}}function pt(e){return function(t){return t.lift(new mt(e))}}var mt=function(){function e(e){this.value=e}return e.prototype.call=function(e,t){return t.subscribe(new yt(e,this.value))},e}(),yt=function(e){function t(t,n){var i=e.call(this,t)||this;return i.value=n,i}return i.C6(t,e),t.prototype._next=function(e){this.destination.next(this.value)},t}(m.v),ft=n(2796);function gt(){return function(e){return e.lift(new vt)}}var vt=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new _t(e))},e}(),_t=function(e){function t(t){return e.call(this,t)||this}return i.C6(t,e),t.prototype._next=function(e){this.destination.next(ft.E.createNext(e))},t.prototype._error=function(e){var t=this.destination;t.next(ft.E.createError(e)),t.complete()},t.prototype._complete=function(){var e=this.destination;e.next(ft.E.createComplete()),e.complete()},t}(m.v);function bt(e,t){var n=!1;return arguments.length>=2&&(n=!0),function(i){return i.lift(new St(e,t,n))}}var St=function(){function e(e,t,n){void 0===n&&(n=!1),this.accumulator=e,this.seed=t,this.hasSeed=n}return e.prototype.call=function(e,t){return t.subscribe(new wt(e,this.accumulator,this.seed,this.hasSeed))},e}(),wt=function(e){function t(t,n,i,r){var o=e.call(this,t)||this;return o.accumulator=n,o._seed=i,o.hasSeed=r,o.index=0,o}return i.C6(t,e),Object.defineProperty(t.prototype,\"seed\",{get:function(){return this._seed},set:function(e){this.hasSeed=!0,this._seed=e},enumerable:!0,configurable:!0}),t.prototype._next=function(e){if(this.hasSeed)return this._tryNext(e);this.seed=e,this.destination.next(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.accumulator(this.seed,e,n)}catch(e){this.destination.error(e)}this.seed=t,this.destination.next(t)},t}(m.v),Ct=n(990);function It(e,t){return arguments.length>=2?function(n){return(0,Ct.F)(bt(e,t),dt(1),re(t))(n)}:function(t){return(0,Ct.F)(bt(function(t,n,i){return e(t,n,i+1)}),dt(1))(t)}}function Pt(e){return It(\"function\"==typeof e?function(t,n){return e(t,n)>0?t:n}:function(e,t){return e>t?e:t})}var Et=n(3837);function Ot(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return t.lift.call(Et.h.apply(void 0,[t].concat(e)))}}var At=n(9050);function Tt(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),\"function\"==typeof t?(0,G.ZZ)(function(){return e},t,n):(\"number\"==typeof t&&(n=t),(0,G.ZZ)(function(){return e},n))}function kt(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),function(i){return i.lift(new xt(e,t,n))}}var xt=function(){function e(e,t,n){this.accumulator=e,this.seed=t,this.concurrent=n}return e.prototype.call=function(e,t){return t.subscribe(new Mt(e,this.accumulator,this.seed,this.concurrent))},e}(),Mt=function(e){function t(t,n,i,r){var o=e.call(this,t)||this;return o.accumulator=n,o.acc=i,o.concurrent=r,o.hasValue=!1,o.hasCompleted=!1,o.buffer=[],o.active=0,o.index=0,o}return i.C6(t,e),t.prototype._next=function(e){if(this.active<this.concurrent){var t=this.index++,n=this.destination,i=void 0;try{i=(0,this.accumulator)(this.acc,e,t)}catch(e){return n.error(e)}this.active++,this._innerSub(i)}else this.buffer.push(e)},t.prototype._innerSub=function(e){var t=new r.zA(this),n=this.destination;n.add(t);var i=(0,r.tS)(e,t);i!==t&&n.add(i)},t.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete()),this.unsubscribe()},t.prototype.notifyNext=function(e){var t=this.destination;this.acc=e,this.hasValue=!0,t.next(e)},t.prototype.notifyComplete=function(){var e=this.buffer;this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete())},t}(r.gn);function Nt(e){return It(\"function\"==typeof e?function(t,n){return e(t,n)<0?t:n}:function(e,t){return e<t?e:t})}var Dt=n(9762);function Rt(e,t){return function(n){var i;if(i=\"function\"==typeof e?e:function(){return e},\"function\"==typeof t)return n.lift(new zt(i,t));var r=Object.create(n,Dt.f);return r.source=n,r.subjectFactory=i,r}}var zt=function(){function e(e,t){this.subjectFactory=e,this.selector=t}return e.prototype.call=function(e,t){var n=this.selector,i=this.subjectFactory(),r=n(i).subscribe(e);return r.add(t.subscribe(i)),r},e}(),Ft=n(3724);function Bt(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return 1===e.length&&(0,j.c)(e[0])&&(e=e[0]),function(t){return t.lift(new jt(e))}}var jt=function(){function e(e){this.nextSources=e}return e.prototype.call=function(e,t){return t.subscribe(new Lt(e,this.nextSources))},e}(),Lt=function(e){function t(t,n){var i=e.call(this,t)||this;return i.destination=t,i.nextSources=n,i}return i.C6(t,e),t.prototype.notifyError=function(){this.subscribeToNextSource()},t.prototype.notifyComplete=function(){this.subscribeToNextSource()},t.prototype._error=function(e){this.subscribeToNextSource(),this.unsubscribe()},t.prototype._complete=function(){this.subscribeToNextSource(),this.unsubscribe()},t.prototype.subscribeToNextSource=function(){var e=this.nextSources.shift();if(e){var t=new r.zA(this),n=this.destination;n.add(t);var i=(0,r.tS)(e,t);i!==t&&n.add(i)}else this.destination.complete()},t}(r.gn);function Ut(){return function(e){return e.lift(new Vt)}}var Vt=function(){function e(){}return e.prototype.call=function(e,t){return t.subscribe(new qt(e))},e}(),qt=function(e){function t(t){var n=e.call(this,t)||this;return n.hasPrev=!1,n}return i.C6(t,e),t.prototype._next=function(e){var t;this.hasPrev?t=[this.prev,e]:this.hasPrev=!0,this.prev=e,t&&this.destination.next(t)},t}(m.v),Ht=n(8153);function Gt(e,t){return function(n){return[(0,Ce.p)(e,t)(n),(0,Ce.p)((0,Ht.A)(e,t))(n)]}}function Wt(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.length;if(0===n)throw new Error(\"list of properties cannot be empty.\");return function(t){return(0,je.T)(function(e,t){return function(n){for(var i=n,r=0;r<t;r++){var o=null!=i?i[e[r]]:void 0;if(void 0===o)return;i=o}return i}}(e,n))(t)}}var $t=n(9023);function Yt(e){return e?Rt(function(){return new $t.B7},e):Rt(new $t.B7)}var Kt=n(2361);function Qt(e){return function(t){return Rt(new Kt.t(e))(t)}}var Jt=n(1403);function Zt(){return function(e){return Rt(new Jt.h)(e)}}var Xt=n(8358);function en(e,t,n,i){n&&\"function\"!=typeof n&&(i=n);var r=\"function\"==typeof n?n:void 0,o=new Xt.m(e,t,i);return function(e){return Rt(function(){return o},r)(e)}}var tn=n(4460);function nn(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return 1===e.length&&(0,j.c)(e[0])&&(e=e[0]),t.lift.call(tn.O4.apply(void 0,[t].concat(e)))}}function rn(e){return void 0===e&&(e=-1),function(t){return 0===e?(0,ct.I)():e<0?t.lift(new on(-1,t)):t.lift(new on(e-1,t))}}var on=function(){function e(e,t){this.count=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new an(e,this.count,this.source))},e}(),an=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.count=n,r.source=i,r}return i.C6(t,e),t.prototype.complete=function(){if(!this.isStopped){var t=this.source,n=this.count;if(0===n)return e.prototype.complete.call(this);n>-1&&(this.count=n-1),t.subscribe(this._unsubscribeAndRecycle())}},t}(m.v);function sn(e){return function(t){return t.lift(new cn(e))}}var cn=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){return t.subscribe(new dn(e,this.notifier,t))},e}(),dn=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.notifier=n,r.source=i,r.sourceIsBeingSubscribedTo=!0,r}return i.C6(t,e),t.prototype.notifyNext=function(){this.sourceIsBeingSubscribedTo=!0,this.source.subscribe(this)},t.prototype.notifyComplete=function(){if(!1===this.sourceIsBeingSubscribedTo)return e.prototype.complete.call(this)},t.prototype.complete=function(){if(this.sourceIsBeingSubscribedTo=!1,!this.isStopped){if(this.retries||this.subscribeToRetries(),!this.retriesSubscription||this.retriesSubscription.closed)return e.prototype.complete.call(this);this._unsubscribeAndRecycle(),this.notifications.next(void 0)}},t.prototype._unsubscribe=function(){var e=this.notifications,t=this.retriesSubscription;e&&(e.unsubscribe(),this.notifications=void 0),t&&(t.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0},t.prototype._unsubscribeAndRecycle=function(){var t=this._unsubscribe;return this._unsubscribe=null,e.prototype._unsubscribeAndRecycle.call(this),this._unsubscribe=t,this},t.prototype.subscribeToRetries=function(){var t;this.notifications=new $t.B7;try{t=(0,this.notifier)(this.notifications)}catch(t){return e.prototype.complete.call(this)}this.retries=t,this.retriesSubscription=(0,r.tS)(t,new r.zA(this))},t}(r.gn);function un(e){return void 0===e&&(e=-1),function(t){return t.lift(new ln(e,t))}}var ln=function(){function e(e,t){this.count=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new hn(e,this.count,this.source))},e}(),hn=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.count=n,r.source=i,r}return i.C6(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=this.source,i=this.count;if(0===i)return e.prototype.error.call(this,t);i>-1&&(this.count=i-1),n.subscribe(this._unsubscribeAndRecycle())}},t}(m.v),pn=n(2551),mn=n(1709);function yn(e){return function(t){return t.lift(new fn(e))}}var fn=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){var n=new gn(e),i=t.subscribe(n);return i.add((0,r.tS)(this.notifier,new r.zA(n))),i},e}(),gn=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.hasValue=!1,t}return i.C6(t,e),t.prototype._next=function(e){this.value=e,this.hasValue=!0},t.prototype.notifyNext=function(){this.emitValue()},t.prototype.notifyComplete=function(){this.emitValue()},t.prototype.emitValue=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.value))},t}(r.gn);function vn(e,t){return void 0===t&&(t=c.b),function(n){return n.lift(new _n(e,t))}}var _n=function(){function e(e,t){this.period=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new bn(e,this.period,this.scheduler))},e}(),bn=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.period=n,r.scheduler=i,r.hasValue=!1,r.add(i.schedule(Sn,n,{subscriber:r,period:n})),r}return i.C6(t,e),t.prototype._next=function(e){this.lastValue=e,this.hasValue=!0},t.prototype.notifyNext=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.lastValue))},t}(m.v);function Sn(e){var t=e.subscriber,n=e.period;t.notifyNext(),this.schedule(e,n)}function wn(e,t){return function(n){return n.lift(new Cn(e,t))}}var Cn=function(){function e(e,t){this.compareTo=e,this.comparator=t}return e.prototype.call=function(e,t){return t.subscribe(new In(e,this.compareTo,this.comparator))},e}(),In=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.compareTo=n,r.comparator=i,r._a=[],r._b=[],r._oneComplete=!1,r.destination.add(n.subscribe(new Pn(t,r))),r}return i.C6(t,e),t.prototype._next=function(e){this._oneComplete&&0===this._b.length?this.emit(!1):(this._a.push(e),this.checkValues())},t.prototype._complete=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0,this.unsubscribe()},t.prototype.checkValues=function(){for(var e=this,t=e._a,n=e._b,i=e.comparator;t.length>0&&n.length>0;){var r=t.shift(),o=n.shift(),a=!1;try{a=i?i(r,o):r===o}catch(e){this.destination.error(e)}a||this.emit(!1)}},t.prototype.emit=function(e){var t=this.destination;t.next(e),t.complete()},t.prototype.nextB=function(e){this._oneComplete&&0===this._a.length?this.emit(!1):(this._b.push(e),this.checkValues())},t.prototype.completeB=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0},t}(m.v),Pn=function(e){function t(t,n){var i=e.call(this,t)||this;return i.parent=n,i}return i.C6(t,e),t.prototype._next=function(e){this.parent.nextB(e)},t.prototype._error=function(e){this.parent.error(e),this.unsubscribe()},t.prototype._complete=function(){this.parent.completeB(),this.unsubscribe()},t}(m.v);function En(){return new $t.B7}function On(){return function(e){return(0,mn.B)()(Rt(En)(e))}}var An=n(2161);function Tn(e){return function(t){return t.lift(new kn(e,t))}}var kn=function(){function e(e,t){this.predicate=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new xn(e,this.predicate,this.source))},e}(),xn=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.predicate=n,r.source=i,r.seenValue=!1,r.index=0,r}return i.C6(t,e),t.prototype.applySingleValue=function(e){this.seenValue?this.destination.error(\"Sequence contains more than one element\"):(this.seenValue=!0,this.singleValue=e)},t.prototype._next=function(e){var t=this.index++;this.predicate?this.tryNext(e,t):this.applySingleValue(e)},t.prototype.tryNext=function(e,t){try{this.predicate(e,t,this.source)&&this.applySingleValue(e)}catch(e){this.destination.error(e)}},t.prototype._complete=function(){var e=this.destination;this.index>0?(e.next(this.seenValue?this.singleValue:void 0),e.complete()):e.error(new Ie.G)},t}(m.v);function Mn(e){return function(t){return t.lift(new Nn(e))}}var Nn=function(){function e(e){this.total=e}return e.prototype.call=function(e,t){return t.subscribe(new Dn(e,this.total))},e}(),Dn=function(e){function t(t,n){var i=e.call(this,t)||this;return i.total=n,i.count=0,i}return i.C6(t,e),t.prototype._next=function(e){++this.count>this.total&&this.destination.next(e)},t}(m.v);function Rn(e){return function(t){return t.lift(new zn(e))}}var zn=function(){function e(e){if(this._skipCount=e,this._skipCount<0)throw new we.k}return e.prototype.call=function(e,t){return 0===this._skipCount?t.subscribe(new m.v(e)):t.subscribe(new Fn(e,this._skipCount))},e}(),Fn=function(e){function t(t,n){var i=e.call(this,t)||this;return i._skipCount=n,i._count=0,i._ring=new Array(n),i}return i.C6(t,e),t.prototype._next=function(e){var t=this._skipCount,n=this._count++;if(n<t)this._ring[n]=e;else{var i=n%t,r=this._ring,o=r[i];r[i]=e,this.destination.next(o)}},t}(m.v);function Bn(e){return function(t){return t.lift(new jn(e))}}var jn=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){return t.subscribe(new Ln(e,this.notifier))},e}(),Ln=function(e){function t(t,n){var i=e.call(this,t)||this;i.hasValue=!1;var o=new r.zA(i);i.add(o),i.innerSubscription=o;var a=(0,r.tS)(n,o);return a!==o&&(i.add(a),i.innerSubscription=a),i}return i.C6(t,e),t.prototype._next=function(t){this.hasValue&&e.prototype._next.call(this,t)},t.prototype.notifyNext=function(){this.hasValue=!0,this.innerSubscription&&this.innerSubscription.unsubscribe()},t.prototype.notifyComplete=function(){},t}(r.gn);function Un(e){return function(t){return t.lift(new Vn(e))}}var Vn=function(){function e(e){this.predicate=e}return e.prototype.call=function(e,t){return t.subscribe(new qn(e,this.predicate))},e}(),qn=function(e){function t(t,n){var i=e.call(this,t)||this;return i.predicate=n,i.skipping=!0,i.index=0,i}return i.C6(t,e),t.prototype._next=function(e){var t=this.destination;this.skipping&&this.tryCallPredicate(e),this.skipping||t.next(e)},t.prototype.tryCallPredicate=function(e){try{var t=this.predicate(e,this.index++);this.skipping=Boolean(t)}catch(e){this.destination.error(e)}},t}(m.v);function Hn(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[e.length-1];return(0,_.m)(n)?(e.pop(),function(t){return(0,V.x)(e,t,n)}):function(t){return(0,V.x)(e,t)}}var Gn=n(7734),Wn=n(899),$n=function(e){function t(t,n,i){void 0===n&&(n=0),void 0===i&&(i=Gn.I);var r=e.call(this)||this;return r.source=t,r.delayTime=n,r.scheduler=i,(!(0,Wn.k)(n)||n<0)&&(r.delayTime=0),i&&\"function\"==typeof i.schedule||(r.scheduler=Gn.I),r}return i.C6(t,e),t.create=function(e,n,i){return void 0===n&&(n=0),void 0===i&&(i=Gn.I),new t(e,n,i)},t.dispatch=function(e){var t=e.source,n=e.subscriber;return this.add(t.subscribe(n))},t.prototype._subscribe=function(e){var n=this.delayTime,i=this.source;return this.scheduler.schedule(t.dispatch,n,{source:i,subscriber:e})},t}(ce.c);function Yn(e,t){return void 0===t&&(t=0),function(n){return n.lift(new Kn(e,t))}}var Kn=function(){function e(e,t){this.scheduler=e,this.delay=t}return e.prototype.call=function(e,t){return new $n(t,this.delay,this.scheduler).subscribe(e)},e}(),Qn=n(9835);function Jn(){return(0,Qn.n)(Xe.D)}function Zn(e,t){return t?(0,Qn.n)(function(){return e},t):(0,Qn.n)(function(){return e})}function Xn(e){return function(t){return t.lift(new ei(e))}}var ei=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){var n=new ti(e),i=(0,r.tS)(this.notifier,new r.zA(n));return i&&!n.seenValue?(n.add(i),t.subscribe(n)):n},e}(),ti=function(e){function t(t){var n=e.call(this,t)||this;return n.seenValue=!1,n}return i.C6(t,e),t.prototype.notifyNext=function(){this.seenValue=!0,this.complete()},t.prototype.notifyComplete=function(){},t}(r.gn);function ni(e,t){return void 0===t&&(t=!1),function(n){return n.lift(new ii(e,t))}}var ii=function(){function e(e,t){this.predicate=e,this.inclusive=t}return e.prototype.call=function(e,t){return t.subscribe(new ri(e,this.predicate,this.inclusive))},e}(),ri=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.predicate=n,r.inclusive=i,r.index=0,r}return i.C6(t,e),t.prototype._next=function(e){var t,n=this.destination;try{t=this.predicate(e,this.index++)}catch(e){return void n.error(e)}this.nextOrComplete(e,t)},t.prototype.nextOrComplete=function(e,t){var n=this.destination;Boolean(t)?n.next(e):(this.inclusive&&n.next(e),n.complete())},t}(m.v),oi=n(906),ai=n(3278);function si(e,t,n){return function(i){return i.lift(new ci(e,t,n))}}var ci=function(){function e(e,t,n){this.nextOrObserver=e,this.error=t,this.complete=n}return e.prototype.call=function(e,t){return t.subscribe(new di(e,this.nextOrObserver,this.error,this.complete))},e}(),di=function(e){function t(t,n,i,r){var o=e.call(this,t)||this;return o._tapNext=oi.l,o._tapError=oi.l,o._tapComplete=oi.l,o._tapError=i||oi.l,o._tapComplete=r||oi.l,(0,ai.T)(n)?(o._context=o,o._tapNext=n):n&&(o._context=n,o._tapNext=n.next||oi.l,o._tapError=n.error||oi.l,o._tapComplete=n.complete||oi.l),o}return i.C6(t,e),t.prototype._next=function(e){try{this._tapNext.call(this._context,e)}catch(e){return void this.destination.error(e)}this.destination.next(e)},t.prototype._error=function(e){try{this._tapError.call(this._context,e)}catch(e){return void this.destination.error(e)}this.destination.error(e)},t.prototype._complete=function(){try{this._tapComplete.call(this._context)}catch(e){return void this.destination.error(e)}return this.destination.complete()},t}(m.v),ui={leading:!0,trailing:!1};function li(e,t){return void 0===t&&(t=ui),function(n){return n.lift(new hi(e,!!t.leading,!!t.trailing))}}var hi=function(){function e(e,t,n){this.durationSelector=e,this.leading=t,this.trailing=n}return e.prototype.call=function(e,t){return t.subscribe(new pi(e,this.durationSelector,this.leading,this.trailing))},e}(),pi=function(e){function t(t,n,i,r){var o=e.call(this,t)||this;return o.destination=t,o.durationSelector=n,o._leading=i,o._trailing=r,o._hasValue=!1,o}return i.C6(t,e),t.prototype._next=function(e){this._hasValue=!0,this._sendValue=e,this._throttled||(this._leading?this.send():this.throttle(e))},t.prototype.send=function(){var e=this._hasValue,t=this._sendValue;e&&(this.destination.next(t),this.throttle(t)),this._hasValue=!1,this._sendValue=void 0},t.prototype.throttle=function(e){var t=this.tryDurationSelector(e);t&&this.add(this._throttled=(0,r.tS)(t,new r.zA(this)))},t.prototype.tryDurationSelector=function(e){try{return this.durationSelector(e)}catch(e){return this.destination.error(e),null}},t.prototype.throttlingDone=function(){var e=this._throttled,t=this._trailing;e&&e.unsubscribe(),this._throttled=void 0,t&&this.send()},t.prototype.notifyNext=function(){this.throttlingDone()},t.prototype.notifyComplete=function(){this.throttlingDone()},t}(r.gn);function mi(e,t,n){return void 0===t&&(t=c.b),void 0===n&&(n=ui),function(i){return i.lift(new yi(e,t,n.leading,n.trailing))}}var yi=function(){function e(e,t,n,i){this.duration=e,this.scheduler=t,this.leading=n,this.trailing=i}return e.prototype.call=function(e,t){return t.subscribe(new fi(e,this.duration,this.scheduler,this.leading,this.trailing))},e}(),fi=function(e){function t(t,n,i,r,o){var a=e.call(this,t)||this;return a.duration=n,a.scheduler=i,a.leading=r,a.trailing=o,a._hasTrailingValue=!1,a._trailingValue=null,a}return i.C6(t,e),t.prototype._next=function(e){this.throttled?this.trailing&&(this._trailingValue=e,this._hasTrailingValue=!0):(this.add(this.throttled=this.scheduler.schedule(gi,this.duration,{subscriber:this})),this.leading?this.destination.next(e):this.trailing&&(this._trailingValue=e,this._hasTrailingValue=!0))},t.prototype._complete=function(){this._hasTrailingValue?(this.destination.next(this._trailingValue),this.destination.complete()):this.destination.complete()},t.prototype.clearThrottle=function(){var e=this.throttled;e&&(this.trailing&&this._hasTrailingValue&&(this.destination.next(this._trailingValue),this._trailingValue=null,this._hasTrailingValue=!1),e.unsubscribe(),this.remove(e),this.throttled=null)},t}(m.v);function gi(e){e.subscriber.clearThrottle()}var vi=n(277);function _i(e){return void 0===e&&(e=c.b),function(t){return(0,vi.v)(function(){return t.pipe(bt(function(t,n){var i=t.current;return{value:n,current:e.now(),last:i}},{current:e.now(),value:void 0,last:void 0}),(0,je.T)(function(e){var t=e.current,n=e.last,i=e.value;return new bi(i,t-n)}))})}}var bi=function(){return function(e,t){this.value=e,this.interval=t}}(),Si=n(5),wi=n(1454);function Ci(e,t,n){return void 0===n&&(n=c.b),function(i){var r=(0,wi.$)(e),o=r?+e-n.now():Math.abs(e);return i.lift(new Ii(o,r,t,n))}}var Ii=function(){function e(e,t,n,i){this.waitFor=e,this.absoluteTimeout=t,this.withObservable=n,this.scheduler=i}return e.prototype.call=function(e,t){return t.subscribe(new Pi(e,this.absoluteTimeout,this.waitFor,this.withObservable,this.scheduler))},e}(),Pi=function(e){function t(t,n,i,r,o){var a=e.call(this,t)||this;return a.absoluteTimeout=n,a.waitFor=i,a.withObservable=r,a.scheduler=o,a.scheduleTimeout(),a}return i.C6(t,e),t.dispatchTimeout=function(e){var t=e.withObservable;e._unsubscribeAndRecycle(),e.add((0,r.tS)(t,new r.zA(e)))},t.prototype.scheduleTimeout=function(){var e=this.action;e?this.action=e.schedule(this,this.waitFor):this.add(this.action=this.scheduler.schedule(t.dispatchTimeout,this.waitFor,this))},t.prototype._next=function(t){this.absoluteTimeout||this.scheduleTimeout(),e.prototype._next.call(this,t)},t.prototype._unsubscribe=function(){this.action=void 0,this.scheduler=null,this.withObservable=null},t}(r.gn),Ei=n(4203);function Oi(e,t){return void 0===t&&(t=c.b),Ci(e,(0,Ei.$)(new Si.M),t)}function Ai(e){return void 0===e&&(e=c.b),(0,je.T)(function(t){return new Ti(t,e.now())})}var Ti=function(){return function(e,t){this.value=e,this.timestamp=t}}();function ki(e,t,n){return 0===n?[t]:(e.push(t),e)}function xi(){return It(ki,[])}function Mi(e){return function(t){return t.lift(new Ni(e))}}var Ni=function(){function e(e){this.windowBoundaries=e}return e.prototype.call=function(e,t){var n=new Di(e),i=t.subscribe(n);return i.closed||n.add((0,r.tS)(this.windowBoundaries,new r.zA(n))),i},e}(),Di=function(e){function t(t){var n=e.call(this,t)||this;return n.window=new $t.B7,t.next(n.window),n}return i.C6(t,e),t.prototype.notifyNext=function(){this.openWindow()},t.prototype.notifyError=function(e){this._error(e)},t.prototype.notifyComplete=function(){this._complete()},t.prototype._next=function(e){this.window.next(e)},t.prototype._error=function(e){this.window.error(e),this.destination.error(e)},t.prototype._complete=function(){this.window.complete(),this.destination.complete()},t.prototype._unsubscribe=function(){this.window=null},t.prototype.openWindow=function(){var e=this.window;e&&e.complete();var t=this.destination,n=this.window=new $t.B7;t.next(n)},t}(r.gn);function Ri(e,t){return void 0===t&&(t=0),function(n){return n.lift(new zi(e,t))}}var zi=function(){function e(e,t){this.windowSize=e,this.startWindowEvery=t}return e.prototype.call=function(e,t){return t.subscribe(new Fi(e,this.windowSize,this.startWindowEvery))},e}(),Fi=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.destination=t,r.windowSize=n,r.startWindowEvery=i,r.windows=[new $t.B7],r.count=0,t.next(r.windows[0]),r}return i.C6(t,e),t.prototype._next=function(e){for(var t=this.startWindowEvery>0?this.startWindowEvery:this.windowSize,n=this.destination,i=this.windowSize,r=this.windows,o=r.length,a=0;a<o&&!this.closed;a++)r[a].next(e);var s=this.count-i+1;if(s>=0&&s%t===0&&!this.closed&&r.shift().complete(),++this.count%t===0&&!this.closed){var c=new $t.B7;r.push(c),n.next(c)}},t.prototype._error=function(e){var t=this.windows;if(t)for(;t.length>0&&!this.closed;)t.shift().error(e);this.destination.error(e)},t.prototype._complete=function(){var e=this.windows;if(e)for(;e.length>0&&!this.closed;)e.shift().complete();this.destination.complete()},t.prototype._unsubscribe=function(){this.count=0,this.windows=null},t}(m.v);function Bi(e){var t=c.b,n=null,i=Number.POSITIVE_INFINITY;return(0,_.m)(arguments[3])&&(t=arguments[3]),(0,_.m)(arguments[2])?t=arguments[2]:(0,Wn.k)(arguments[2])&&(i=Number(arguments[2])),(0,_.m)(arguments[1])?t=arguments[1]:(0,Wn.k)(arguments[1])&&(n=Number(arguments[1])),function(r){return r.lift(new ji(e,n,i,t))}}var ji=function(){function e(e,t,n,i){this.windowTimeSpan=e,this.windowCreationInterval=t,this.maxWindowSize=n,this.scheduler=i}return e.prototype.call=function(e,t){return t.subscribe(new Ui(e,this.windowTimeSpan,this.windowCreationInterval,this.maxWindowSize,this.scheduler))},e}(),Li=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._numberOfNextedValues=0,t}return i.C6(t,e),t.prototype.next=function(t){this._numberOfNextedValues++,e.prototype.next.call(this,t)},Object.defineProperty(t.prototype,\"numberOfNextedValues\",{get:function(){return this._numberOfNextedValues},enumerable:!0,configurable:!0}),t}($t.B7),Ui=function(e){function t(t,n,i,r,o){var a=e.call(this,t)||this;a.destination=t,a.windowTimeSpan=n,a.windowCreationInterval=i,a.maxWindowSize=r,a.scheduler=o,a.windows=[];var s=a.openWindow();if(null!==i&&i>=0){var c={subscriber:a,window:s,context:null},d={windowTimeSpan:n,windowCreationInterval:i,subscriber:a,scheduler:o};a.add(o.schedule(Hi,n,c)),a.add(o.schedule(qi,i,d))}else{var u={subscriber:a,window:s,windowTimeSpan:n};a.add(o.schedule(Vi,n,u))}return a}return i.C6(t,e),t.prototype._next=function(e){for(var t=this.windows,n=t.length,i=0;i<n;i++){var r=t[i];r.closed||(r.next(e),r.numberOfNextedValues>=this.maxWindowSize&&this.closeWindow(r))}},t.prototype._error=function(e){for(var t=this.windows;t.length>0;)t.shift().error(e);this.destination.error(e)},t.prototype._complete=function(){for(var e=this.windows;e.length>0;){var t=e.shift();t.closed||t.complete()}this.destination.complete()},t.prototype.openWindow=function(){var e=new Li;return this.windows.push(e),this.destination.next(e),e},t.prototype.closeWindow=function(e){e.complete();var t=this.windows;t.splice(t.indexOf(e),1)},t}(m.v);function Vi(e){var t=e.subscriber,n=e.windowTimeSpan,i=e.window;i&&t.closeWindow(i),e.window=t.openWindow(),this.schedule(e,n)}function qi(e){var t=e.windowTimeSpan,n=e.subscriber,i=e.scheduler,r=e.windowCreationInterval,o=n.openWindow(),a=this,s={action:a,subscription:null},c={subscriber:n,window:o,context:s};s.subscription=i.schedule(Hi,t,c),a.add(s.subscription),a.schedule(e,r)}function Hi(e){var t=e.subscriber,n=e.window,i=e.context;i&&i.action&&i.subscription&&i.action.remove(i.subscription),t.closeWindow(n)}function Gi(e,t){return function(n){return n.lift(new Wi(e,t))}}var Wi=function(){function e(e,t){this.openings=e,this.closingSelector=t}return e.prototype.call=function(e,t){return t.subscribe(new $i(e,this.openings,this.closingSelector))},e}(),$i=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.openings=n,r.closingSelector=i,r.contexts=[],r.add(r.openSubscription=(0,A.F)(r,n,n)),r}return i.C6(t,e),t.prototype._next=function(e){var t=this.contexts;if(t)for(var n=t.length,i=0;i<n;i++)t[i].window.next(e)},t.prototype._error=function(t){var n=this.contexts;if(this.contexts=null,n)for(var i=n.length,r=-1;++r<i;){var o=n[r];o.window.error(t),o.subscription.unsubscribe()}e.prototype._error.call(this,t)},t.prototype._complete=function(){var t=this.contexts;if(this.contexts=null,t)for(var n=t.length,i=-1;++i<n;){var r=t[i];r.window.complete(),r.subscription.unsubscribe()}e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){var e=this.contexts;if(this.contexts=null,e)for(var t=e.length,n=-1;++n<t;){var i=e[n];i.window.unsubscribe(),i.subscription.unsubscribe()}},t.prototype.notifyNext=function(e,t,n,i,r){if(e===this.openings){var o=void 0;try{o=(0,this.closingSelector)(t)}catch(e){return this.error(e)}var a=new $t.B7,s=new O.y,c={window:a,subscription:s};this.contexts.push(c);var d=(0,A.F)(this,o,c);d.closed?this.closeWindow(this.contexts.length-1):(d.context=c,s.add(d)),this.destination.next(a)}else this.closeWindow(this.contexts.indexOf(e))},t.prototype.notifyError=function(e){this.error(e)},t.prototype.notifyComplete=function(e){e!==this.openSubscription&&this.closeWindow(this.contexts.indexOf(e.context))},t.prototype.closeWindow=function(e){if(-1!==e){var t=this.contexts,n=t[e],i=n.window,r=n.subscription;t.splice(e,1),i.complete(),r.unsubscribe()}},t}(T.E);function Yi(e){return function(t){return t.lift(new Ki(e))}}var Ki=function(){function e(e){this.closingSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new Qi(e,this.closingSelector))},e}(),Qi=function(e){function t(t,n){var i=e.call(this,t)||this;return i.destination=t,i.closingSelector=n,i.openWindow(),i}return i.C6(t,e),t.prototype.notifyNext=function(e,t,n,i,r){this.openWindow(r)},t.prototype.notifyError=function(e){this._error(e)},t.prototype.notifyComplete=function(e){this.openWindow(e)},t.prototype._next=function(e){this.window.next(e)},t.prototype._error=function(e){this.window.error(e),this.destination.error(e),this.unsubscribeClosingNotification()},t.prototype._complete=function(){this.window.complete(),this.destination.complete(),this.unsubscribeClosingNotification()},t.prototype.unsubscribeClosingNotification=function(){this.closingNotification&&this.closingNotification.unsubscribe()},t.prototype.openWindow=function(e){void 0===e&&(e=null),e&&(this.remove(e),e.unsubscribe());var t=this.window;t&&t.complete();var n,i=this.window=new $t.B7;this.destination.next(i);try{n=(0,this.closingSelector)()}catch(e){return this.destination.error(e),void this.window.error(e)}this.add(this.closingNotification=(0,A.F)(this,n))},t}(T.E);function Ji(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){var n;\"function\"==typeof e[e.length-1]&&(n=e.pop());var i=e;return t.lift(new Zi(i,n))}}var Zi=function(){function e(e,t){this.observables=e,this.project=t}return e.prototype.call=function(e,t){return t.subscribe(new Xi(e,this.observables,this.project))},e}(),Xi=function(e){function t(t,n,i){var r=e.call(this,t)||this;r.observables=n,r.project=i,r.toRespond=[];var o=n.length;r.values=new Array(o);for(var a=0;a<o;a++)r.toRespond.push(a);for(a=0;a<o;a++){var s=n[a];r.add((0,A.F)(r,s,void 0,a))}return r}return i.C6(t,e),t.prototype.notifyNext=function(e,t,n){this.values[n]=t;var i=this.toRespond;if(i.length>0){var r=i.indexOf(n);-1!==r&&i.splice(r,1)}},t.prototype.notifyComplete=function(){},t.prototype._next=function(e){if(0===this.toRespond.length){var t=[e].concat(this.values);this.project?this._tryProject(t):this.destination.next(t)}},t.prototype._tryProject=function(e){var t;try{t=this.project.apply(this,e)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(T.E),er=n(5778);function tr(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return t.lift.call(er.yU.apply(void 0,[t].concat(e)))}}function nr(e){return function(t){return t.lift(new er.ee(e))}}},5779(e,t,n){\"use strict\";n.d(t,{C6:()=>r});var i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},i(e,t)};function r(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}},540(e){e.exports=function(e,t,n,i){var r=n?n.call(i,e,t):void 0;if(void 0!==r)return!!r;if(e===t)return!0;if(\"object\"!=typeof e||!e||\"object\"!=typeof t||!t)return!1;var o=Object.keys(e),a=Object.keys(t);if(o.length!==a.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),c=0;c<o.length;c++){var d=o[c];if(!s(d))return!1;var u=e[d],l=t[d];if(!1===(r=n?n.call(i,u,l,d):void 0)||void 0===r&&u!==l)return!1}return!0}},1657(e){\"use strict\";e.exports=(e,t)=>{if(\"string\"!=typeof e||\"string\"!=typeof t)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===t)return[e];const n=e.indexOf(t);return-1===n?[e]:[e.slice(0,n),e.slice(n+t.length)]}},803(e){\"use strict\";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)},1635(e,t,n){\"use strict\";n.r(t),n.d(t,{__addDisposableResource:()=>R,__assign:()=>o,__asyncDelegator:()=>P,__asyncGenerator:()=>I,__asyncValues:()=>E,__await:()=>C,__awaiter:()=>m,__classPrivateFieldGet:()=>M,__classPrivateFieldIn:()=>D,__classPrivateFieldSet:()=>N,__createBinding:()=>f,__decorate:()=>s,__disposeResources:()=>F,__esDecorate:()=>d,__exportStar:()=>g,__extends:()=>r,__generator:()=>y,__importDefault:()=>x,__importStar:()=>k,__makeTemplateObject:()=>O,__metadata:()=>p,__param:()=>c,__propKey:()=>l,__read:()=>_,__rest:()=>a,__rewriteRelativeImportExtension:()=>B,__runInitializers:()=>u,__setFunctionName:()=>h,__spread:()=>b,__spreadArray:()=>w,__spreadArrays:()=>S,__values:()=>v,default:()=>j});var i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},i(e,t)};function r(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var o=function(){return o=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},o.apply(this,arguments)};function a(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}function s(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}function c(e,t){return function(n,i){t(n,i,e)}}function d(e,t,n,i,r,o){function a(e){if(void 0!==e&&\"function\"!=typeof e)throw new TypeError(\"Function expected\");return e}for(var s,c=i.kind,d=\"getter\"===c?\"get\":\"setter\"===c?\"set\":\"value\",u=!t&&e?i.static?e:e.prototype:null,l=t||(u?Object.getOwnPropertyDescriptor(u,i.name):{}),h=!1,p=n.length-1;p>=0;p--){var m={};for(var y in i)m[y]=\"access\"===y?{}:i[y];for(var y in i.access)m.access[y]=i.access[y];m.addInitializer=function(e){if(h)throw new TypeError(\"Cannot add initializers after decoration has completed\");o.push(a(e||null))};var f=(0,n[p])(\"accessor\"===c?{get:l.get,set:l.set}:l[d],m);if(\"accessor\"===c){if(void 0===f)continue;if(null===f||\"object\"!=typeof f)throw new TypeError(\"Object expected\");(s=a(f.get))&&(l.get=s),(s=a(f.set))&&(l.set=s),(s=a(f.init))&&r.unshift(s)}else(s=a(f))&&(\"field\"===c?r.unshift(s):l[d]=s)}u&&Object.defineProperty(u,i.name,l),h=!0}function u(e,t,n){for(var i=arguments.length>2,r=0;r<t.length;r++)n=i?t[r].call(e,n):t[r].call(e);return i?n:void 0}function l(e){return\"symbol\"==typeof e?e:\"\".concat(e)}function h(e,t,n){return\"symbol\"==typeof t&&(t=t.description?\"[\".concat(t.description,\"]\"):\"\"),Object.defineProperty(e,\"name\",{configurable:!0,value:n?\"\".concat(n,\" \",t):t})}function p(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function m(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})}function y(e,t){var n,i,r,o={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]},a=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),\"function\"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(c){return function(s){if(n)throw new TypeError(\"Generator is already executing.\");for(;a&&(a=0,s[0]&&(o=0)),o;)try{if(n=1,i&&(r=2&s[0]?i.return:s[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,s[1])).done)return r;switch(i=0,r&&(s=[2&s[0],r.value]),s[0]){case 0:case 1:r=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,i=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(!((r=(r=o.trys).length>0&&r[r.length-1])||6!==s[0]&&2!==s[0])){o=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]<r[3])){o.label=s[1];break}if(6===s[0]&&o.label<r[1]){o.label=r[1],r=s;break}if(r&&o.label<r[2]){o.label=r[2],o.ops.push(s);break}r[2]&&o.ops.pop(),o.trys.pop();continue}s=t.call(e,o)}catch(e){s=[6,e],i=0}finally{n=r=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,c])}}}var f=Object.create?function(e,t,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!(\"get\"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,r)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]};function g(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||f(t,e,n)}function v(e){var t=\"function\"==typeof Symbol&&Symbol.iterator,n=t&&e[t],i=0;if(n)return n.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}function _(e,t){var n=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var i,r,o=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(i=o.next()).done;)a.push(i.value)}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return a}function b(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(_(arguments[t]));return e}function S(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var i=Array(e),r=0;for(t=0;t<n;t++)for(var o=arguments[t],a=0,s=o.length;a<s;a++,r++)i[r]=o[a];return i}function w(e,t,n){if(n||2===arguments.length)for(var i,r=0,o=t.length;r<o;r++)!i&&r in t||(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))}function C(e){return this instanceof C?(this.v=e,this):new C(e)}function I(e,t,n){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var i,r=n.apply(e,t||[]),o=[];return i=Object.create((\"function\"==typeof AsyncIterator?AsyncIterator:Object).prototype),a(\"next\"),a(\"throw\"),a(\"return\",function(e){return function(t){return Promise.resolve(t).then(e,d)}}),i[Symbol.asyncIterator]=function(){return this},i;function a(e,t){r[e]&&(i[e]=function(t){return new Promise(function(n,i){o.push([e,t,n,i])>1||s(e,t)})},t&&(i[e]=t(i[e])))}function s(e,t){try{(n=r[e](t)).value instanceof C?Promise.resolve(n.value.v).then(c,d):u(o[0][2],n)}catch(e){u(o[0][3],e)}var n}function c(e){s(\"next\",e)}function d(e){s(\"throw\",e)}function u(e,t){e(t),o.shift(),o.length&&s(o[0][0],o[0][1])}}function P(e){var t,n;return t={},i(\"next\"),i(\"throw\",function(e){throw e}),i(\"return\"),t[Symbol.iterator]=function(){return this},t;function i(i,r){t[i]=e[i]?function(t){return(n=!n)?{value:C(e[i](t)),done:!1}:r?r(t):t}:r}}function E(e){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=v(e),t={},i(\"next\"),i(\"throw\"),i(\"return\"),t[Symbol.asyncIterator]=function(){return this},t);function i(n){t[n]=e[n]&&function(t){return new Promise(function(i,r){!function(e,t,n,i){Promise.resolve(i).then(function(t){e({value:t,done:n})},t)}(i,r,(t=e[n](t)).done,t.value)})}}}function O(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e}var A=Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t},T=function(e){return T=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},T(e)};function k(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=T(e),i=0;i<n.length;i++)\"default\"!==n[i]&&f(t,e,n[i]);return A(t,e),t}function x(e){return e&&e.__esModule?e:{default:e}}function M(e,t,n,i){if(\"a\"===n&&!i)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof t?e!==t||!i:!t.has(e))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===n?i:\"a\"===n?i.call(e):i?i.value:t.get(e)}function N(e,t,n,i,r){if(\"m\"===i)throw new TypeError(\"Private method is not writable\");if(\"a\"===i&&!r)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof t?e!==t||!r:!t.has(e))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===i?r.call(e,n):r?r.value=n:t.set(e,n),n}function D(e,t){if(null===t||\"object\"!=typeof t&&\"function\"!=typeof t)throw new TypeError(\"Cannot use 'in' operator on non-object\");return\"function\"==typeof e?t===e:e.has(t)}function R(e,t,n){if(null!=t){if(\"object\"!=typeof t&&\"function\"!=typeof t)throw new TypeError(\"Object expected.\");var i,r;if(n){if(!Symbol.asyncDispose)throw new TypeError(\"Symbol.asyncDispose is not defined.\");i=t[Symbol.asyncDispose]}if(void 0===i){if(!Symbol.dispose)throw new TypeError(\"Symbol.dispose is not defined.\");i=t[Symbol.dispose],n&&(r=i)}if(\"function\"!=typeof i)throw new TypeError(\"Object not disposable.\");r&&(i=function(){try{r.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:i,async:n})}else n&&e.stack.push({async:!0});return t}var z=\"function\"==typeof SuppressedError?SuppressedError:function(e,t,n){var i=new Error(n);return i.name=\"SuppressedError\",i.error=e,i.suppressed=t,i};function F(e){function t(t){e.error=e.hasError?new z(t,e.error,\"An error was suppressed during disposal.\"):t,e.hasError=!0}var n,i=0;return function r(){for(;n=e.stack.pop();)try{if(!n.async&&1===i)return i=0,e.stack.push(n),Promise.resolve().then(r);if(n.dispose){var o=n.dispose.call(n.value);if(n.async)return i|=2,Promise.resolve(o).then(r,function(e){return t(e),r()})}else i|=1}catch(e){t(e)}if(1===i)return e.hasError?Promise.reject(e.error):Promise.resolve();if(e.hasError)throw e.error}()}function B(e,t){return\"string\"==typeof e&&/^\\.\\.?\\//.test(e)?e.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i,function(e,n,i,r,o){return n?t?\".jsx\":\".js\":!i||r&&o?i+r+\".\"+o.toLowerCase()+\"js\":e}):e}const j={__extends:r,__assign:o,__rest:a,__decorate:s,__param:c,__esDecorate:d,__runInitializers:u,__propKey:l,__setFunctionName:h,__metadata:p,__awaiter:m,__generator:y,__createBinding:f,__exportStar:g,__values:v,__read:_,__spread:b,__spreadArrays:S,__spreadArray:w,__await:C,__asyncGenerator:I,__asyncDelegator:P,__asyncValues:E,__makeTemplateObject:O,__importStar:k,__importDefault:x,__classPrivateFieldGet:M,__classPrivateFieldSet:N,__classPrivateFieldIn:D,__addDisposableResource:R,__disposeResources:F,__rewriteRelativeImportExtension:B}}},t={};function n(i){var r=t[i];if(void 0!==r)return r.exports;var o=t[i]={id:i,loaded:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var i={};(()=>{\"use strict\";n.r(i),n.d(i,{ExtensionCommandType:()=>St,ExtensionQueryType:()=>wt,createBodlService:()=>gC,createBraintreeAnalyticTracker:()=>cC,createCheckoutButtonInitializer:()=>nS,createCheckoutService:()=>__,createCurrencyService:()=>Qw,createEmbeddedCheckoutMessenger:()=>vS,createLanguageService:()=>$w,createPayPalCommerceAnalyticTracker:()=>uC,createStepTracker:()=>oC,createStoredCardHostedFormService:()=>pC,createTimeout:()=>o.createTimeout,embedCheckout:()=>lS,isExtraField:()=>s});var e={};n.r(e),n.d(e,{createAmazonPayV2CustomerStrategy:()=>on,createApplePayCustomerStrategy:()=>zn,createBigCommercePaymentsCustomerStrategy:()=>ci,createBigCommercePaymentsFastlaneCustomerStrategy:()=>Ti,createBigCommercePaymentsPayLaterCustomerStrategy:()=>Mi,createBigCommercePaymentsVenmoCustomerStrategy:()=>Ri,createBoltCustomerStrategy:()=>Wi,createBraintreeFastlaneCustomerStrategy:()=>vr,createBraintreePaypalCreditCustomerStrategy:()=>lr,createBraintreePaypalCustomerStrategy:()=>cr,createBraintreeVisaCheckoutCustomerStrategy:()=>Sr,createGooglePayAdyenV2CustomerStrategy:()=>Yr,createGooglePayAdyenV3CustomerStrategy:()=>Kr,createGooglePayAuthorizeDotNetCustomerStrategy:()=>Jr,createGooglePayBigCommercePaymentsCustomerStrategy:()=>Wo,createGooglePayBnzCustomerStrategy:()=>oo,createGooglePayBraintreeCustomerStrategy:()=>Do,createGooglePayCheckoutComCustomerStrategy:()=>no,createGooglePayCybersourceCustomerStrategy:()=>ro,createGooglePayOrbitalCustomerStrategy:()=>so,createGooglePayPayPalCommerceCustomerStrategy:()=>qo,createGooglePayStripeCustomerStrategy:()=>Ao,createGooglePayStripeUpeCustomerStrategy:()=>To,createGooglePayTdOnlineMartCustomerStrategy:()=>Qo,createGooglePayWorldpayAccessCustomerStrategy:()=>xo,createPayPalCommerceCreditCustomerStrategy:()=>za,createPayPalCommerceCustomerStrategy:()=>_a,createPayPalCommerceFastlaneCustomerStrategy:()=>$a,createPayPalCommerceVenmoCustomerStrategy:()=>ja,createStripeLinkV2CustomerStrategy:()=>cs,createStripeUPECustomerStrategy:()=>Ja});var t={};n.r(t),n.d(t,{createAdyenV2PaymentStrategy:()=>Is,createAdyenV3PaymentStrategy:()=>Ts,createAffirmPaymentStrategy:()=>Ds,createAfterpayPaymentStrategy:()=>Us,createAmazonPayV2PaymentStrategy:()=>Hs,createApplePayPaymentStrategy:()=>Ys,createBigCommercePaymentsAlternativeMethodsPaymentStrategy:()=>Sc,createBigCommercePaymentsCreditCardsPaymentStrategy:()=>vc,createBigCommercePaymentsFastlanePaymentStrategy:()=>rc,createBigCommercePaymentsPayLaterPaymentStrategy:()=>sc,createBigCommercePaymentsPaymentStrategy:()=>ec,createBigCommercePaymentsRatePayPayPaymentStrategy:()=>lc,createBigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy:()=>Cc,createBigCommercePaymentsVenmoPaymentStrategy:()=>Ec,createBlueSnapDirectAPMPaymentStrategy:()=>Wc,createBlueSnapDirectCreditCardPaymentStrategy:()=>Hc,createBlueSnapV2PaymentStrategy:()=>Jc,createBoltPaymentStrategy:()=>od,createBraintreeAchPaymentStrategy:()=>dd,createBraintreeCreditCardPaymentStrategy:()=>jd,createBraintreeFastlanePaymentStrategy:()=>Pd,createBraintreeLocalMethodsPaymentStrategy:()=>Sd,createBraintreePaypalPaymentStrategy:()=>gd,createBraintreeVenmoPaymentStrategy:()=>xd,createBraintreeVisaCheckoutPaymentStrategy:()=>Ad,createCBAMPGSPaymentStrategy:()=>Wd,createCheckoutComAPMPaymentStrategy:()=>cu,createCheckoutComCreditCardPaymentStrategy:()=>tu,createCheckoutComFawryPaymentStrategy:()=>Qd,createCheckoutComIdealPaymentStrategy:()=>ou,createCheckoutComSepaPaymentStrategy:()=>iu,createClearpayPaymentStrategy:()=>hu,createCreditCardPaymentStrategy:()=>pu,createCyberSourcePaymentStrategy:()=>Au,createCyberSourceV2PaymentStrategy:()=>Nu,createGooglePayAdyenV2PaymentStrategy:()=>ju,createGooglePayAdyenV3PaymentStrategy:()=>Vu,createGooglePayAuthorizeNetPaymentStrategy:()=>qu,createGooglePayBigCommercePaymentsPaymentStrategy:()=>ol,createGooglePayBraintreePaymentStrategy:()=>Ku,createGooglePayCheckoutComPaymentStrategy:()=>Hu,createGooglePayCybersourcePaymentStrategy:()=>Gu,createGooglePayOrbitalPaymentStrategy:()=>Wu,createGooglePayPPCPPaymentStrategy:()=>el,createGooglePayStripePaymentStrategy:()=>$u,createGooglePayTdOnlineMartPaymentStrategy:()=>al,createGooglePayWorldpayAccessPaymentStrategy:()=>Yu,createHummPaymentStrategy:()=>dl,createKlarnaPaymentStrategy:()=>yl,createKlarnaV2PaymentStrategy:()=>bl,createLegacyPaymentStrategy:()=>wl,createMolliePaymentStrategy:()=>Al,createMonerisPaymentStrategy:()=>Ml,createNoPaymentStrategy:()=>ls,createOfflinePaymentStrategy:()=>Dl,createOffsitePaymentStrategy:()=>Fl,createPayPalCommerceAlternativeMethodsPaymentStrategy:()=>Jl,createPayPalCommerceCreditCardsPaymentStrategy:()=>eh,createPayPalCommerceCreditPaymentStrategy:()=>Hl,createPayPalCommerceFastlanePaymentStrategy:()=>sh,createPayPalCommercePaymentStrategy:()=>Ul,createPayPalCommerceRatePayPaymentStrategy:()=>ih,createPayPalCommerceVenmoPaymentStrategy:()=>$l,createPayPalProPaymentStrategy:()=>bh,createPaypalExpressPaymentStrategy:()=>gh,createSagePayPaymentStrategy:()=>wh,createSezzlePaymentStrategy:()=>Ph,createSquareV2PaymentStrategy:()=>Dh,createStripeCSPaymentStrategy:()=>ip,createStripeOCSPaymentStrategy:()=>ep,createStripeUPEPaymentStrategy:()=>Qh,createStripeV3PaymentStrategy:()=>Gh,createTDOnlineMartPaymentStrategy:()=>cp,createWorldpayAccessOpenBankingPaymentStrategy:()=>yp,createWorldpayAccessPaymentStrategy:()=>pp,createZipPaymentStrategy:()=>vp});var r={};n.r(r),n.d(r,{createAmazonPayV2ButtonStrategy:()=>P_,createApplePayButtonStrategy:()=>k_,createBigCommercePaymentsButtonStrategy:()=>N_,createBigCommercePaymentsPayLaterButtonStrategy:()=>z_,createBigCommercePaymentsVenmoButtonStrategy:()=>j_,createBoltButtonStrategy:()=>U_,createBraintreePaypalButtonStrategy:()=>W_,createBraintreePaypalCreditButtonStrategy:()=>K_,createBraintreeVenmoButtonStrategy:()=>rb,createBraintreeVisaCheckoutButtonStrategy:()=>Z_,createGooglePayAdyenV2ButtonStrategy:()=>ub,createGooglePayAdyenV3ButtonStrategy:()=>lb,createGooglePayAuthorizeDotNetButtonStrategy:()=>hb,createGooglePayBigCommercePaymentsButtonStrategy:()=>db,createGooglePayBraintreeButtonStrategy:()=>sb,createGooglePayCheckoutComButtonStrategy:()=>pb,createGooglePayCybersourceButtonStrategy:()=>mb,createGooglePayOrbitalButtonStrategy:()=>yb,createGooglePayPayPalCommerceButtonStrategy:()=>cb,createGooglePayStripeButtonStrategy:()=>fb,createGooglePayTdOnlineMartButtonStrategy:()=>vb,createGooglePayWorldpayAccessButtonStrategy:()=>gb,createLinkV2ButtonStrategy:()=>Mb,createPayPalCommerceButtonStrategy:()=>bb,createPayPalCommerceCreditButtonStrategy:()=>Cb,createPayPalCommerceVenmoButtonStrategy:()=>Eb,createPaypalExpressButtonStrategy:()=>Tb});var o=n(4043);const a=\"b2bExtraField_\";function s(e){return e.name.startsWith(a)}function c(e){var t;const{fieldType:n,type:i}=function(e){switch(e){case\"multiline_text\":return{fieldType:\"multiline\",type:\"string\"};case\"number\":return{fieldType:\"text\",type:\"integer\"};case\"dropdown\":return{fieldType:\"dropdown\",type:\"array\"};default:return{fieldType:\"text\",type:\"string\"}}}(e.type);let r;return e.config.numberOfRows&&(r={rows:e.config.numberOfRows}),(null===(t=e.config.options)||void 0===t?void 0:t.length)&&(r=Object.assign(Object.assign({},r),{items:e.config.options.map(e=>({value:e,label:e}))})),{id:`${a}${e.id}`,name:`${a}${e.id}`,custom:!1,label:e.name,hidden:!e.visibleToStorefront,required:e.isRequired,default:null!=e.config.defaultValue?String(e.config.defaultValue):void 0,fieldType:n,type:i,maxLength:e.config.maxLength,max:e.config.maxValue,options:r}}var d=n(315),u=n(9526),l=n(9301),h=n(4128),p=n(277),m=n(9586);function y(){if(\"undefined\"==typeof window||!window.location)return!1;try{return!!new URLSearchParams(window.location.search).has(\"enableB2bDevMode\")&&(console.log(\"B2B Dev Mode Enabled\"),!0)}catch(e){return!1}}function f(e){return y()?\"https://api-b2b.bigcommerce.com\":e}var g,v=n(4203);function _(e,t,n){return(i=t)&&i.type&&i.error?(0,l.x)((0,h.of)(t),(0,v.$)((0,u.fQ)(e,t.payload,n))):(0,v.$)((0,u.fQ)(e,t,n));var i}!function(e){e.LoadB2BTokenRequested=\"LOAD_B2B_TOKEN_REQUESTED\",e.LoadB2BTokenSucceeded=\"LOAD_B2B_TOKEN_SUCCEEDED\",e.LoadB2BTokenFailed=\"LOAD_B2B_TOKEN_FAILED\"}(g||(g={}));class b{constructor(e){this._requestSender=e}loadB2BToken(e){return t=>{var n;const i=t.getState(),r=i.config.getStoreConfigOrThrow(),{storeHash:o}=r.storeProfile,{baseUrl:a=\"\",clientId:s=\"\"}=null!==(n=r.b2bApiSettings)&&void 0!==n?n:{},c=(d=s,y()?\"dl7c39mdpul6hyc489yk0vzxl6jesyx\":d);var d;const v=f(a),{id:b}=i.customer.getCustomerOrThrow(),{channelId:S}=i.checkout.getCheckoutOrThrow();return(0,l.x)((0,h.of)((0,u.VP)(g.LoadB2BTokenRequested)),(0,p.v)(()=>{return t=this,n=void 0,r=function*(){const{body:t}=yield this._requestSender.getB2BToken(c,b,o,S,v,e);return(0,u.VP)(g.LoadB2BTokenSucceeded,{token:t.data.token})},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())});var t,n,i,r})).pipe((0,m.W)(e=>_(g.LoadB2BTokenFailed,e)))}}}const S={\"X-Checkout-SDK-Version\":\"1.916.1\"};class w{constructor(e){this._requestSender=e}getB2BToken(e,t,n,i,r,o){return a=this,s=void 0,d=function*(){const{body:a}=yield this._requestSender.get(\"/customer/current.jwt\",{timeout:null==o?void 0:o.timeout,params:{app_client_id:e},headers:S});return this._requestSender.post(`${r}/api/v2/login`,{timeout:null==o?void 0:o.timeout,credentials:!1,headers:{\"Content-Type\":\"application/json\"},body:{bcToken:a.token,customerId:t,storeHash:n,channelId:i}})},new((c=void 0)||(c=Promise))(function(e,t){function n(e){try{r(d.next(e))}catch(e){t(e)}}function i(e){try{r(d.throw(e))}catch(e){t(e)}}function r(t){var r;t.done?e(t.value):(r=t.value,r instanceof c?r:new c(function(e){e(r)})).then(n,i)}r((d=d.apply(a,s||[])).next())});var a,s,c,d}}var C,I,P=n(9440),E=n(3837),O=n(9386),A=n(6780);class T extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentProviderCustomer=13]=\"MissingPaymentProviderCustomer\",e[e.MissingPaymentRedirectUrl=14]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=15]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=16]=\"MissingPaymentToken\",e[e.MissingShippingAddress=17]=\"MissingShippingAddress\"}(C||(C={}));class k extends T{constructor(e){super(function(e){switch(e){case C.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case C.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case C.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case C.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case C.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case C.MissingCheckoutConfig:case C.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case C.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case C.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case C.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case C.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case C.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case C.MissingPaymentProviderCustomer:return\"Unable to proceed because payment provider customer is unavailable.\";case C.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(e){e.UpdateBillingAddressRequested=\"UPDATE_BILLING_ADDRESS_REQUESTED\",e.UpdateBillingAddressSucceeded=\"UPDATE_BILLING_ADDRESS_SUCCEEDED\",e.UpdateBillingAddressFailed=\"UPDATE_BILLING_ADDRESS_FAILED\",e.ContinueAsGuestRequested=\"CONTINUE_AS_GUEST_REQUESTED\",e.ContinueAsGuestSucceeded=\"CONTINUE_AS_GUEST_SUCCEEDED\",e.ContinueAsGuestFailed=\"CONTINUE_AS_GUEST_FAILED\"}(I||(I={}));class x extends T{constructor(e){super(e||\"Unable to continue as a guest because the customer is already signed in.\"),this.name=\"UnableToContinueAsGuestError\",this.type=\"unable_to_continue_as_guest\"}}var M;class N{constructor(e,t){this._requestSender=e,this._subscriptionActionCreator=t}continueAsGuest(e,t){return n=>{const i=n.getState(),r=i.checkout.getCheckout();if(!r)throw new k(C.MissingCheckout);const o=i.customer.getCustomer();if(o&&!o.isGuest)throw new x;const a=i.billingAddress.getBillingAddress();let s;if(a){const{country:t}=a,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(a,[\"country\"]);s=Object.assign(Object.assign({},n),e)}else s=e;const c=!(0,P.isEmpty)(a);return(0,E.h)((0,l.x)((0,h.of)((0,u.VP)(I.ContinueAsGuestRequested)),(0,p.v)(()=>{return e=this,n=void 0,o=function*(){const{body:e}=yield this._createOrUpdateBillingAddress(r.id,s,c,t);return(0,u.VP)(I.ContinueAsGuestSucceeded,e)},new((i=void 0)||(i=Promise))(function(t,r){function a(e){try{c(o.next(e))}catch(e){r(e)}}function s(e){try{c(o.throw(e))}catch(e){r(e)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((o=o.apply(e,n||[])).next())});var e,n,i,o})).pipe((0,m.W)(e=>_(I.ContinueAsGuestFailed,e))),this._updateCustomerConsent(e,t))}}updateAddress(e,t){return n=>O.c.create(i=>{const r=n.getState(),o=r.checkout.getCheckout();if(!o)throw new k(C.MissingCheckout);i.next((0,u.VP)(I.UpdateBillingAddressRequested));const a=r.billingAddress.getBillingAddress(),s=!(0,P.isEmpty)(a),c=Object.assign(Object.assign({},e),{email:void 0===e.email&&a?a.email:e.email});a&&a.id&&(c.id=a.id),this._createOrUpdateBillingAddress(o.id,c,s,t).then(({body:e})=>{i.next((0,u.VP)(I.UpdateBillingAddressSucceeded,e)),i.complete()}).catch(e=>{i.error((0,u.fQ)(I.UpdateBillingAddressFailed,e))})})}_updateCustomerConsent({email:e,acceptsAbandonedCartEmails:t,acceptsMarketingNewsletter:n},i){return null==t&&null==n?(0,A.I)():this._subscriptionActionCreator.updateSubscriptions({email:e,acceptsMarketingNewsletter:n||!1,acceptsAbandonedCartEmails:t||!1},i)}_createOrUpdateBillingAddress(e,t,n,i){return n?this._requestSender.updateAddress(e,t,i):this._requestSender.createAddress(e,t,i)}}class D extends T{constructor(e){super(e||\"Your checkout could not be processed because your cart is empty. Please add items to your cart and try again.\"),this.name=\"EmptyCartError\",this.type=\"empty_cart\"}}!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(M||(M={}));const R=M;const z={include:[\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"promotions.banners\"].join(\",\")};class F{constructor(e){this._requestSender=e}createAddress(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/billing-address`,r=Object.assign({Accept:R.JsonV1},S);return this._requestSender.post(i,{body:t,params:z,headers:r,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new D;throw e})}updateAddress(e,t,{timeout:n}={}){const{id:i}=t,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"id\"]),o=`/api/storefront/checkouts/${e}/billing-address/${i}`,a=Object.assign({Accept:R.JsonV1},S);return this._requestSender.put(o,{params:z,body:r,headers:a,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new D;throw e})}}var B,j;function L(e,t){const n=(0,u.iN)((e,t)=>t.type===B.Synchronize?t.payload:e,e.getState(),{stateTransformer:t});return e.subscribe(e=>{n.dispatch((0,u.VP)(B.Synchronize,e))},{initial:!1}),n}!function(e){e.Synchronize=\"SYNCHRONIZE\"}(B||(B={})),function(e){e.ClearError=\"CLEAR_ERROR\"}(j||(j={}));class U{clearError(e){return{type:j.ClearError,payload:e}}}class V{constructor(e,t){this._requestSender=e,this._config=t}sendRequest(e,t){return this._requestSender.sendRequest(e,t)}get(e,t){return this._requestSender.get(e,t)}post(e,t){return this._requestSender.post(this._prefixed(e),t)}put(e,t){return this._requestSender.put(this._prefixed(e),t)}patch(e,t){return this._requestSender.patch(this._prefixed(e),t)}delete(e,t){return this._requestSender.delete(this._prefixed(e),t)}_prefixed(e){const t=this._config.getBasePath();return!this._config.getFeatures()[\"CHECKOUT-9950.update_sf_checkout_url_for_subfolder\"]||!t||t.endsWith(\"/checkout\")||/^https?:\\/\\//.test(e)?e:`${t}${e}`}}function q(){try{return\"production\"}catch(e){return\"development\"}}class H{constructor(e){this._console=e}log(...e){this._logToConsole(\"log\",...e)}info(...e){this._logToConsole(\"info\",...e)}warn(...e){this._logToConsole(\"warn\",...e)}error(...e){this._logToConsole(\"error\",...e)}debug(...e){this._logToConsole(\"debug\",...e)}_logToConsole(e,...t){this._console&&this._console[e]&&this._console[e].call(this._console,...t)}}class G{log(){}info(){}warn(){}error(){}debug(){}}const W=function(e=!0){return e?new H(console):new G}(\"test\"!==q());function $(){return W}var Y,K=n(4218),Q=n(8241),J=n(2161);function Z(e,t,n){const i=new WeakMap;function r(e){return(...n)=>{const r=n[n.length-1],{useCache:o}=(a=r)&&\"boolean\"==typeof a.useCache?r:{useCache:!1};var a;if(!o)return e.call(this,...n);const s=i.get(this)||{};var c;return i.get(this)||i.set(this,s),s[t]||(s[t]=(c=e,(0,K.Bj)(function(...e){const t=c.call(this,...e);return t instanceof O.c?(0,Q.H)(t).pipe((0,J.t)()):\"function\"==typeof t?(0,K.Bj)(e=>(0,Q.H)(t(e)).pipe((0,J.t)()),{isEqual:P.isEqual}):t},{isEqual:P.isEqual}))),s[t].call(this,...n)}}return{get(){if(\"function\"!=typeof n.value)throw new Error(\"Decorator should be used in functions\");const e=r.call(this,n.value);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e}}}!function(e){e.LoadConfigRequested=\"LOAD_CONFIG_REQUESTED\",e.LoadConfigSucceeded=\"LOAD_CONFIG_SUCCEEDED\",e.LoadConfigFailed=\"LOAD_CONFIG_FAILED\"}(Y||(Y={}));class X{constructor(e){this._configRequestSender=e}loadConfig(e){return O.c.create(t=>{t.next((0,u.VP)(Y.LoadConfigRequested)),this._configRequestSender.loadConfig(e).then(e=>{t.next((0,u.VP)(Y.LoadConfigSucceeded,e.body)),t.complete()}).catch(e=>{t.error((0,u.fQ)(Y.LoadConfigFailed,e))})})}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([Z],X.prototype,\"loadConfig\",null);const ee={body:{},headers:{},status:0};class te extends T{constructor(e,{message:t,errors:n}={}){const{body:i,headers:r,status:o}=e||ee;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=r,this.status=o,this.errors=n||[]}}class ne extends te{constructor(e){super(e,{message:e.body.title}),this.name=\"CheckoutNotAvailableError\",this.type=\"checkout_not_available\"}}const ie=\"This API endpoint is for internal use only and may change in the future\";class re{constructor(e){this._requestSender=e}loadConfig({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/checkout-settings\",{timeout:e,headers:Object.assign({Accept:R.JsonV1,\"X-API-INTERNAL\":ie},S),params:t}).catch(e=>{if(e.status>=400&&e.status<500)throw new ne(e);throw e})}}var oe;!function(e){e.ApplyCouponRequested=\"APPLY_COUPON_REQUESTED\",e.ApplyCouponSucceeded=\"APPLY_COUPON_SUCCEEDED\",e.ApplyCouponFailed=\"APPLY_COUPON_FAILED\",e.RemoveCouponRequested=\"REMOVE_COUPON_REQUESTED\",e.RemoveCouponSucceeded=\"REMOVE_COUPON_SUCCEEDED\",e.RemoveCouponFailed=\"REMOVE_COUPON_FAILED\"}(oe||(oe={}));class ae{constructor(e){this._couponRequestSender=e}applyCoupon(e,t){return n=>O.c.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new k(C.MissingCheckout);i.next((0,u.VP)(oe.ApplyCouponRequested)),this._couponRequestSender.applyCoupon(r.id,e,t).then(({body:e})=>{i.next((0,u.VP)(oe.ApplyCouponSucceeded,e)),i.complete()}).catch(e=>{i.error((0,u.fQ)(oe.ApplyCouponFailed,e))})})}removeCoupon(e,t){return n=>O.c.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new k(C.MissingCheckout);i.next((0,u.VP)(oe.RemoveCouponRequested)),this._couponRequestSender.removeCoupon(r.id,e,t).then(({body:e})=>{i.next((0,u.VP)(oe.RemoveCouponSucceeded,e)),i.complete()}).catch(e=>{i.error((0,u.fQ)(oe.RemoveCouponFailed,e))})})}}const se=[\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"customer.customerGroup\",\"payments\",\"promotions.banners\"];var ce,de;function ue(e){return(0,P.uniq)(e).join(\",\")}!function(e){e.AvailableShippingOptions=\"consignments.availableShippingOptions\",e.PhysicalItemsCategoryNames=\"cart.lineItems.physicalItems.categoryNames\",e.DigitalItemsCategoryNames=\"cart.lineItems.digitalItems.categoryNames\"}(ce||(ce={}));class le{constructor(e){this._requestSender=e}applyCoupon(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/coupons`,r=Object.assign({Accept:R.JsonV1},S);return this._requestSender.post(i,{headers:r,timeout:n,params:{include:ue([...se,ce.AvailableShippingOptions])},body:{couponCode:t}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new D;throw e})}removeCoupon(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/coupons/${t}`,r=Object.assign({Accept:R.JsonV1},S);return this._requestSender.delete(i,{headers:r,timeout:n,params:{include:ue([...se,ce.AvailableShippingOptions])}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new D;throw e})}}!function(e){e.ApplyGiftCertificateRequested=\"APPLY_GIFT_CERTIFICATE_REQUESTED\",e.ApplyGiftCertificateSucceeded=\"APPLY_GIFT_CERTIFICATE_SUCCEEDED\",e.ApplyGiftCertificateFailed=\"APPLY_GIFT_CERTIFICATE_FAILED\",e.RemoveGiftCertificateRequested=\"REMOVE_GIFT_CERTIFICATE_REQUESTED\",e.RemoveGiftCertificateSucceeded=\"REMOVE_GIFT_CERTIFICATE_SUCCEEDED\",e.RemoveGiftCertificateFailed=\"REMOVE_GIFT_CERTIFICATE_FAILED\"}(de||(de={}));class he{constructor(e){this._giftCertificateRequestSender=e}applyGiftCertificate(e,t){return n=>O.c.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new k(C.MissingCheckout);i.next((0,u.VP)(de.ApplyGiftCertificateRequested)),this._giftCertificateRequestSender.applyGiftCertificate(r.id,e,t).then(({body:e})=>{i.next((0,u.VP)(de.ApplyGiftCertificateSucceeded,e)),i.complete()}).catch(e=>{i.error((0,u.fQ)(de.ApplyGiftCertificateFailed,e))})})}removeGiftCertificate(e,t){return n=>O.c.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new k(C.MissingCheckout);i.next((0,u.VP)(de.RemoveGiftCertificateRequested)),this._giftCertificateRequestSender.removeGiftCertificate(r.id,e,t).then(({body:e})=>{i.next((0,u.VP)(de.RemoveGiftCertificateSucceeded,e)),i.complete()}).catch(e=>{i.error((0,u.fQ)(de.RemoveGiftCertificateFailed,e))})})}}class pe{constructor(e){this._requestSender=e}applyGiftCertificate(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/gift-certificates`,r=Object.assign({Accept:R.JsonV1},S);return this._requestSender.post(i,{headers:r,timeout:n,params:{include:ue(se)},body:{giftCertificateCode:t}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new D;throw e})}removeGiftCertificate(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/gift-certificates/${t}`,r=Object.assign({Accept:R.JsonV1},S);return this._requestSender.delete(i,{headers:r,timeout:n,params:{include:ue(se)}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new D;throw e})}}function me(e){return e&&\"resolveIds\"in e}class ye extends T{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class fe{constructor(e){var t,n,i;this._factories={},this._instances={},this._defaultToken=null!==(t=null==e?void 0:e.defaultToken)&&void 0!==t?t:\"default\",this._useFallback=null===(n=null==e?void 0:e.useFallback)||void 0===n||n,this._tokenResolver=null!==(i=null==e?void 0:e.tokenResolver)&&void 0!==i?i:e=>e}get(e,t){try{return this._getInstance(e||this._defaultToken,t||e||this._defaultToken)}catch(e){if(!this._useFallback)throw e;return this._getInstance(this._defaultToken,t||this._defaultToken)}}getFactory(e,t){const n=this._tokenResolver(e,Object.keys(this._factories),t);return n?this._factories[n]:void 0}register(e,t){if(this._hasFactory(e))throw new ye(`'${e}' is already registered.`);this._factories[e]=t}_hasFactory(e){return!!this._factories[e]}_hasInstance(e){return!!this._instances[e]}_getInstance(e,t){if(!this._hasInstance(t)){const n=this.getFactory(e);if(!n)throw new ye(`'${e}' is not registered.`);this._instances[t]=n()}return this._instances[t]}}class ge{constructor(e=!1){this._useFallback=e,this._registry=new fe({tokenResolver:this._resolveToken.bind(this),defaultToken:this._encodeToken({default:!0}),useFallback:this._useFallback})}get(e){return this._registry.get(this._encodeToken(e))}getFactory(e,t){try{return this._registry.getFactory(this._encodeToken(e),t)}catch(e){return}}getUseFallback(){return this._useFallback}register(e,t){this._registry.register(this._encodeToken(e),t)}_encodeToken(e){return btoa(JSON.stringify(e))}_decodeToken(e){return JSON.parse(atob(e))}_resolveToken(e,t,n){var i;const r=this._decodeToken(e),o=[];t.forEach(e=>{const t=this._decodeToken(e),n={token:e,matches:0,default:!1,totalKeys:Object.keys(t).length};for(const[e,i]of Object.entries(t)){if(e in r&&r[e]!==i){n.matches=0;break}e in r&&r[e]===i&&n.matches++,\"default\"===e&&!0===i&&(n.default=!0)}o.push(n)});const a=o.sort((e,t)=>t.matches-e.matches).filter(e=>e.matches>0);a.length>1&&a[0].matches===a[1].matches&&\"development\"===q()&&$().warn(\"The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.\");const s=Object.keys(r).length;if(n){const e=a.find(e=>e.matches===s&&e.matches===e.totalKeys);if(!e)throw new Error(`Unable to resolve to a registered token with the provided token for ${JSON.stringify(r)} with exact match.`);return e.token}const c=a[0];if(c&&c.token)return c.token;if(this._useFallback){const e=null===(i=o.find(e=>e.default))||void 0===i?void 0:i.token;if(e)return e}throw new Error(`Unable to resolve to a registered token with the provided token for ${JSON.stringify(r)}.`)}}var ve,_e,be=n(9835);function Se(e){const t=e;return\"object\"==typeof t&&\"object\"==typeof t.payload&&\"string\"==typeof t.payload.token}!function(e){e.BuyNow=\"BUY_NOW\"}(ve||(ve={})),function(e){e.SignInCustomerRequested=\"SIGN_IN_CUSTOMER_REQUESTED\",e.SignInCustomerSucceeded=\"SIGN_IN_CUSTOMER_SUCCEEDED\",e.SignInCustomerFailed=\"SIGN_IN_CUSTOMER_FAILED\",e.SignOutCustomerRequested=\"SIGN_OUT_CUSTOMER_REQUESTED\",e.SignOutCustomerSucceeded=\"SIGN_OUT_CUSTOMER_SUCCEEDED\",e.SignOutCustomerFailed=\"SIGN_OUT_CUSTOMER_FAILED\",e.CreateCustomerRequested=\"CREATE_CUSTOMER_REQUESTED\",e.CreateCustomerSucceeded=\"CREATE_CUSTOMER_SUCCEEDED\",e.CreateCustomerFailed=\"CREATE_CUSTOMER_FAILED\",e.CreateCustomerAddressRequested=\"CREATE_CUSTOMER_ADDRESS_REQUESTED\",e.CreateCustomerAddressSucceeded=\"CREATE_CUSTOMER_ADDRESS_SUCCEEDED\",e.CreateCustomerAddressFailed=\"CREATE_CUSTOMER_ADDRESS_FAILED\",e.StripeLinkAuthenticated=\"STRIPE_LINK_AUTHENTICATED\"}(_e||(_e={}));var we,Ce,Ie;class Pe{constructor(e,t,n){this._customerRequestSender=e,this._checkoutActionCreator=t,this._spamProtectionActionCreator=n}createCustomer(e,t){return n=>{const i=n.getState().config.getStoreConfigOrThrow(),{isStorefrontSpamProtectionEnabled:r}=i.checkoutSettings,o=i=>(0,Q.H)(this._customerRequestSender.createAccount(Object.assign(Object.assign({},e),{token:i}),t)).pipe((0,be.n)(()=>(0,l.x)(this._checkoutActionCreator.loadCurrentCheckout(t)(n),(0,h.of)((0,u.VP)(_e.CreateCustomerSucceeded)))));return(0,l.x)((0,h.of)((0,u.VP)(_e.CreateCustomerRequested)),r?(0,Q.H)(this._spamProtectionActionCreator.execute()(n)).pipe((0,be.n)(e=>{var t;return Se(e)?(0,l.x)((0,h.of)(e),o(null===(t=e.payload)||void 0===t?void 0:t.token)):(0,h.of)(e)})):o()).pipe((0,m.W)(e=>_(_e.CreateCustomerFailed,e)))}}createAddress(e,t){return(0,l.x)((0,h.of)((0,u.VP)(_e.CreateCustomerAddressRequested)),(0,p.v)(()=>{return n=this,i=void 0,o=function*(){const{body:n}=yield this._customerRequestSender.createAddress(e,t);return(0,u.VP)(_e.CreateCustomerAddressSucceeded,n)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe((0,m.W)(e=>_(_e.CreateCustomerAddressFailed,e)))}signInCustomer(e,t){return n=>{const i=n.getState().checkout.getCheckoutOrThrow(),r=i.cart.source===ve.BuyNow?i.id:void 0;return(0,l.x)((0,h.of)((0,u.VP)(_e.SignInCustomerRequested)),(0,Q.H)(this._customerRequestSender.signInCustomer(Object.assign(Object.assign({},e),{cartId:r}),t)).pipe((0,be.n)(({body:e})=>e.data.persistentCartRetrievalInformation?(0,l.x)(this._checkoutActionCreator.loadCheckout(e.data.persistentCartRetrievalInformation.id,t)(n),(0,h.of)((0,u.VP)(_e.SignInCustomerSucceeded,e.data))):(0,l.x)(this._checkoutActionCreator.loadCurrentCheckout(t)(n),(0,h.of)((0,u.VP)(_e.SignInCustomerSucceeded,e.data)))))).pipe((0,m.W)(e=>_(_e.SignInCustomerFailed,e)))}}signOutCustomer(e){return t=>{const n=t.getState().checkout.getCheckoutOrThrow(),i=n.cart.source===ve.BuyNow?n.id:void 0;return(0,l.x)((0,h.of)((0,u.VP)(_e.SignOutCustomerRequested)),(0,Q.H)(this._customerRequestSender.signOutCustomer(e,i)).pipe((0,be.n)(({body:n})=>(0,l.x)(this._checkoutActionCreator.loadCurrentCheckout(e)(t),(0,h.of)((0,u.VP)(_e.SignOutCustomerSucceeded,n.data)))))).pipe((0,m.W)(e=>_(_e.SignOutCustomerFailed,e)))}}}class Ee{constructor(e){this._requestSender=e}createAccount(e,{timeout:t}={}){return this._requestSender.post(\"/api/storefront/customer\",{timeout:t,headers:S,body:e})}createAddress(e,{timeout:t}={}){return this._requestSender.post(\"/api/storefront/customer-address\",{timeout:t,headers:S,body:e})}signInCustomer(e,{timeout:t}={}){return this._requestSender.post(\"/internalapi/v1/checkout/customer\",{timeout:t,headers:S,body:e})}signOutCustomer({timeout:e}={},t){return this._requestSender.delete(\"/internalapi/v1/checkout/customer\",Object.assign({timeout:e,headers:S},t&&{body:{cartId:t}}))}}function Oe(e,t,n){t.forEach(t=>{me(t)&&t.resolveIds.forEach(i=>{e.getFactory(i,!0)||e.register(i,()=>t(n))})})}!function(e){e.SignInFailed=\"CUSTOMER_STRATEGY_SIGN_IN_FAILED\",e.SignInRequested=\"CUSTOMER_STRATEGY_SIGN_IN_REQUESTED\",e.SignInSucceeded=\"CUSTOMER_STRATEGY_SIGN_IN_SUCCEEDED\",e.SignOutFailed=\"CUSTOMER_STRATEGY_SIGN_OUT_FAILED\",e.SignOutRequested=\"CUSTOMER_STRATEGY_SIGN_OUT_REQUESTED\",e.SignOutSucceeded=\"CUSTOMER_STRATEGY_SIGN_OUT_SUCCEEDED\",e.ExecutePaymentMethodCheckoutFailed=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_FAILED\",e.ExecutePaymentMethodCheckoutRequested=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_REQUESTED\",e.ExecutePaymentMethodCheckoutSucceeded=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_SUCCEEDED\",e.InitializeFailed=\"CUSTOMER_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"CUSTOMER_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"CUSTOMER_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"CUSTOMER_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"CUSTOMER_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"CUSTOMER_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_FAILED\"}(we||(we={}));class Ae{constructor(e,t,n){this._strategyRegistry=e,this._strategyRegistryV2=t,this._paymentIntegrationService=n}signIn(e,t){return O.c.create(n=>{const i=t&&t.methodId,r={methodId:i};n.next((0,u.VP)(we.SignInRequested,void 0,r)),this._getStrategy(i).signIn(e,t).then(()=>{n.next((0,u.VP)(we.SignInSucceeded,void 0,r)),n.complete()}).catch(e=>{n.error((0,u.fQ)(we.SignInFailed,e,r))})})}signOut(e){return O.c.create(t=>{const n=e&&e.methodId,i={methodId:n};t.next((0,u.VP)(we.SignOutRequested,void 0,i)),this._getStrategy(n).signOut(e).then(()=>{t.next((0,u.VP)(we.SignOutSucceeded,void 0,i)),t.complete()}).catch(e=>{t.error((0,u.fQ)(we.SignOutFailed,e,i))})})}executePaymentMethodCheckout(e){return O.c.create(t=>{const n=e&&e.methodId,i={methodId:n};t.next((0,u.VP)(we.ExecutePaymentMethodCheckoutRequested,void 0,i)),this._getStrategy(n).executePaymentMethodCheckout(e).then(()=>{t.next((0,u.VP)(we.ExecutePaymentMethodCheckoutSucceeded,void 0,i)),t.complete()}).catch(e=>{t.error((0,u.fQ)(we.ExecutePaymentMethodCheckoutFailed,e,i))})})}initialize(e){return t=>O.c.create(n=>{var i;const r=t.getState(),o=e&&e.methodId,a={methodId:o};if(Oe(this._strategyRegistryV2,null!==(i=null==e?void 0:e.integrations)&&void 0!==i?i:[],this._paymentIntegrationService),o&&r.customerStrategies.isInitialized(o))return n.complete();n.next((0,u.VP)(we.InitializeRequested,void 0,a)),this._getStrategy(o).initialize(e).then(()=>{n.next((0,u.VP)(we.InitializeSucceeded,void 0,a)),n.complete()}).catch(e=>{n.error((0,u.fQ)(we.InitializeFailed,e,a))})})}deinitialize(e){return t=>O.c.create(n=>{const i=t.getState(),r=e&&e.methodId,o={methodId:r};if(r&&!i.customerStrategies.isInitialized(r))return n.complete();n.next((0,u.VP)(we.DeinitializeRequested,void 0,o)),this._getStrategy(r).deinitialize(e).then(()=>{n.next((0,u.VP)(we.DeinitializeSucceeded,void 0,o)),n.complete()}).catch(e=>{n.error((0,u.fQ)(we.DeinitializeFailed,e,o))})})}widgetInteraction(e,t){return O.c.create(n=>{const i={methodId:t&&t.methodId};n.next((0,u.VP)(we.WidgetInteractionStarted,void 0,i)),e().then(()=>{n.next((0,u.VP)(we.WidgetInteractionFinished,void 0,i)),n.complete()}).catch(e=>{n.error((0,u.fQ)(we.WidgetInteractionFailed,e,i))})})}_getStrategy(e){let t;try{t=this._strategyRegistryV2.get({id:e||\"\"})}catch(n){t=this._strategyRegistry.get(e)}return t}}function Te(e,t=[]){return Array.isArray(t)?ue([...e,...t]):function(e,t){const n=(0,P.keys)((0,P.pickBy)(t,e=>!e)),i=(0,P.keys)((0,P.filter)(t));return ue([...(0,P.difference)(e,n),...i])}(e,t)}class ke{constructor(e){this._requestSender=e}loadCheckout(e,{params:{include:t}={},timeout:n}={}){const i=`/api/storefront/checkout/${e}`,r=Object.assign({Accept:R.JsonV1},S);return this._requestSender.get(i,{params:{include:Te(se,t)},headers:r,timeout:n}).catch(e=>{if(e.status>=400&&e.status<500)throw new ne(e);throw e})}updateCheckout(e,t,{params:{include:n}={},timeout:i}={}){const r=`/api/storefront/checkout/${e}`,o=Object.assign({Accept:R.JsonV1},S);return this._requestSender.put(r,{params:{include:Te(se,n)},body:t,headers:o,timeout:i}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new D;throw e})}}!function(e){e.LoadCheckoutRequested=\"LOAD_CHECKOUT_REQUESTED\",e.LoadCheckoutSucceeded=\"LOAD_CHECKOUT_SUCCEEDED\",e.LoadCheckoutFailed=\"LOAD_CHECKOUT_FAILED\",e.UpdateCheckoutRequested=\"UPDATE_CHECKOUT_REQUESTED\",e.UpdateCheckoutSucceeded=\"UPDATE_CHECKOUT_SUCCEEDED\",e.UpdateCheckoutFailed=\"UPDATE_CHECKOUT_FAILED\"}(Ce||(Ce={})),function(e){e.HydrateInitialState=\"HYDRATE_INITIAL_STATE\"}(Ie||(Ie={}));var xe;class Me{constructor(e,t,n){this._checkoutRequestSender=e,this._configActionCreator=t,this._formFieldsActionCreator=n}loadCheckout(e,t){return()=>(0,l.x)((0,h.of)((0,u.VP)(Ce.LoadCheckoutRequested)),(0,E.h)(this._configActionCreator.loadConfig({useCache:!0,timeout:null==t?void 0:t.timeout,params:{checkoutId:e}}),this._formFieldsActionCreator.loadFormFields({useCache:!0,timeout:null==t?void 0:t.timeout})),(0,p.v)(()=>this._checkoutRequestSender.loadCheckout(e,t).then(({body:e})=>(0,u.VP)(Ce.LoadCheckoutSucceeded,this._transformCustomerAddresses(e))))).pipe((0,m.W)(e=>_(Ce.LoadCheckoutFailed,e)))}loadDefaultCheckout(e){return t=>(0,l.x)((0,h.of)((0,u.VP)(Ce.LoadCheckoutRequested)),(0,E.h)(this._configActionCreator.loadConfig({useCache:!0,timeout:null==e?void 0:e.timeout}),this._formFieldsActionCreator.loadFormFields({useCache:!0,timeout:null==e?void 0:e.timeout})),(0,p.v)(()=>{return n=this,i=void 0,o=function*(){const n=t.getState().config.getContextConfig();if(!n||!n.checkoutId)throw new k(C.MissingCheckoutConfig);const{body:i}=yield this._checkoutRequestSender.loadCheckout(n.checkoutId,e);return(0,u.VP)(Ce.LoadCheckoutSucceeded,this._transformCustomerAddresses(i))},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe((0,m.W)(e=>_(Ce.LoadCheckoutFailed,e)))}updateCheckout(e,t){return n=>new O.c(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new k(C.MissingCheckout);i.next((0,u.VP)(Ce.UpdateCheckoutRequested)),this._checkoutRequestSender.updateCheckout(r.id,e,t).then(({body:e})=>{i.next((0,u.VP)(Ce.UpdateCheckoutSucceeded,e)),i.complete()}).catch(e=>{i.error((0,u.fQ)(Ce.UpdateCheckoutFailed,e))})})}loadCurrentCheckout(e){return t=>{const n=t.getState().checkout.getCheckout();if(!n)throw new k(C.MissingCheckout);return this.loadCheckout(n.id,e)(t)}}hydrateInitialState(e){return{type:Ie.HydrateInitialState,payload:e}}_transformCustomerAddresses(e){return Object.assign(Object.assign({},e),{customer:Object.assign(Object.assign({},e.customer),{addresses:e.customer.addresses.map(e=>Object.assign(Object.assign({},e),{shouldSaveAddress:!1}))})})}}!function(e){e.LoadFormFieldsRequested=\"LOAD_FORM_FIELDS_REQUESTED\",e.LoadFormFieldsSucceeded=\"LOAD_FORM_FIELDS_SUCCEEDED\",e.LoadFormFieldsFailed=\"LOAD_FORM_FIELDS_FAILED\"}(xe||(xe={}));class Ne{constructor(e){this._formFieldsRequestSender=e}loadFormFields(e){return(0,l.x)((0,h.of)((0,u.VP)(xe.LoadFormFieldsRequested)),(0,p.v)(()=>{return t=this,n=void 0,r=function*(){const{body:t}=yield this._formFieldsRequestSender.loadFields(e);return(0,u.VP)(xe.LoadFormFieldsSucceeded,t)},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())});var t,n,i,r})).pipe((0,m.W)(e=>_(xe.LoadFormFieldsFailed,e)))}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([Z],Ne.prototype,\"loadFormFields\",null);class De{constructor(e){this._requestSender=e}loadFields({timeout:e}={}){return this._requestSender.get(\"/api/storefront/form-fields\",{timeout:e,headers:Object.assign({Accept:R.JsonV1,\"X-API-INTERNAL\":ie},S)})}}var Re,ze=n(1698);class Fe extends T{constructor(){super(\"You haven't complete our spam protection challenge. Please try again.\"),this.name=\"SpamProtectionChallengeNotCompletedError\",this.type=\"spam_protection_challenge_not_completed\"}}class Be extends T{constructor(){super(\"We were not able to complete your spam protection verification. Please try again.\"),this.name=\"SpamProtectionFailedError\",this.type=\"spam_protection_failed\"}}!function(e){e.InitializeFailed=\"SPAM_PROTECTION_INITIALIZE_FAILED\",e.InitializeSucceeded=\"SPAM_PROTECTION_INITIALIZE_SUCCEEDED\",e.InitializeRequested=\"SPAM_PROTECTION_INITIALIZE_REQUESTED\",e.VerifyCheckoutRequested=\"SPAM_PROTECTION_CHECKOUT_VERIFY_REQUESTED\",e.VerifyCheckoutSucceeded=\"SPAM_PROTECTION_CHECKOUT_VERIFY_SUCCEEDED\",e.VerifyCheckoutFailed=\"SPAM_PROTECTION_CHECKOUT_VERIFY_FAILED\",e.ExecuteRequested=\"SPAM_PROTECTION_EXECUTE_REQUESTED\",e.ExecuteSucceeded=\"SPAM_PROTECTION_EXECUTE_SUCCEEDED\",e.ExecuteFailed=\"SPAM_PROTECTION_EXECUTE_FAILED\"}(Re||(Re={}));var je=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Le{constructor(e,t){this._googleRecaptcha=e,this._requestSender=t}initialize(e){return t=>(0,l.x)((0,h.of)((0,u.VP)(Re.InitializeRequested,void 0)),(0,p.v)(()=>je(this,void 0,void 0,function*(){const n=e?e.containerId:\"spamProtectionContainer\";if(document.getElementById(n)&&this._googleRecaptcha.reset(n),!e&&!document.getElementById(n)){const e=document.createElement(\"div\");e.setAttribute(\"id\",n),document.body.appendChild(e)}const i=t.getState().config.getStoreConfigOrThrow().checkoutSettings.googleRecaptchaSitekey;return yield this._googleRecaptcha.load(n,i),(0,u.VP)(Re.InitializeSucceeded)}))).pipe((0,m.W)(e=>_(Re.InitializeFailed,e)))}verifyCheckoutSpamProtection(){return e=>(0,p.v)(()=>{const t=e.getState().checkout.getCheckout();if(!t)throw new k(C.MissingCheckout);return(0,l.x)((0,h.of)((0,u.VP)(Re.VerifyCheckoutRequested)),(0,Q.H)(this.execute()(e)).pipe((0,be.n)(e=>Se(e)&&e.payload?(0,Q.H)(this._requestSender.validate(t.id,e.payload.token)).pipe((0,be.n)(({body:t})=>(0,l.x)((0,h.of)(e),(0,h.of)((0,u.VP)(Re.VerifyCheckoutSucceeded,t))))):(0,h.of)(e)))).pipe((0,m.W)(e=>_(Re.VerifyCheckoutFailed,e)))})}execute(){return e=>(0,l.x)((0,h.of)((0,u.VP)(Re.ExecuteRequested)),this.initialize()(e),this._googleRecaptcha.execute().pipe((0,ze.s)(1)).pipe((0,be.n)(({error:e,token:t})=>je(this,void 0,void 0,function*(){if(e instanceof Fe)throw e;if(e||!t)throw new Be;return(0,u.VP)(Re.ExecuteSucceeded,{token:t})})))).pipe((0,m.W)(e=>_(Re.ExecuteFailed,e)))}}class Ue{constructor(e=window){this._window=e}create(e){return new this._window.MutationObserver(e)}}var Ve,qe,He=n(9023),Ge=n(2551),We=n(3158);!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(Ve||(Ve={}));class $e extends T{constructor(e){super(function(e){switch(e){case Ve.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case Ve.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case Ve.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case Ve.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class Ye extends T{constructor(){super(\"Spam protection is not loaded. Please try again.\"),this.name=\"SpamProtectionNotLoadedError\",this.type=\"spam_protection_failed\"}}class Ke{constructor(e,t){this.googleRecaptchaScriptLoader=e,this.mutationObserverFactory=t,this._memoized=(0,K.Bj)((e,t,n)=>{const i=new He.B7;if(!n)throw new Error;return this._widgetId=e.render(n.id,{sitekey:t,size:\"invisible\",callback:()=>{i.next({token:e.getResponse(this._widgetId)}),e.reset(this._widgetId)},\"error-callback\":()=>{i.next({error:new Be})}}),i},{isEqual:(e,t)=>e===t})}load(e,t){return this.googleRecaptchaScriptLoader.load().then(n=>{n&&(this._event$=this._memoized(n,t,document.getElementById(e)),this._recaptcha=n)}).catch(e=>{throw e})}reset(e){var t;const n=document.getElementById(e);null==n||n.remove(),null===(t=this._recaptcha)||void 0===t||t.reset(this._widgetId)}execute(){return(0,p.v)(()=>{const e=this._event$,t=this._recaptcha;if(!e||!t)throw new $e(Ve.SpamProtectionNotInitialized);return(0,p.v)(()=>{const e=document.querySelector('iframe[src*=\"bframe\"]');return e?(0,h.of)(e):(0,v.$)(new Ye)}).pipe((0,Ge.l)(e=>e.pipe((0,We.c)(250),(0,be.n)((e,t)=>t<28?(0,h.of)(e):(0,v.$)(e)))),(0,be.n)(n=>(this._watchRecaptchaChallengeWindow(e,n),t.execute(this._widgetId),e)),(0,m.W)(e=>(0,h.of)({error:e})))})}_watchRecaptchaChallengeWindow(e,t){const n=t.parentElement;if(!n)throw new Ye;const i=n.parentElement;if(!i)throw new Ye;this.mutationObserverFactory.create(()=>{\"hidden\"===i.style.visibility&&e.next({error:new Fe})}).observe(i,{attributes:!0,attributeFilter:[\"style\"]})}}class Qe{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(){return this._loadPromise||(this._loadPromise=this._loadScript()),this._loadPromise}_loadScript(){const e=\"initRecaptcha\",t=[`onload=${e}`,\"render=explicit\"].join(\"&\");return new Promise((n,i)=>{this._window[e]=()=>n(this._window.grecaptcha),this._scriptLoader.loadScript(`//www.google.com/recaptcha/api.js?${t}`).catch(e=>{this._loadPromise=void 0,i(e)})})}}function Je(e){return new Ke(new Qe(e),new Ue)}class Ze{constructor(e){this._requestSender=e}validate(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/spam-protection`,r=Object.assign({Accept:R.JsonV1},S);return this._requestSender.post(i,{body:{token:t},headers:r,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new D;throw e})}}class Xe{constructor(e,t){this._store=e,this._customerActionCreator=t}signIn(e,t){return this._store.dispatch(this._customerActionCreator.signInCustomer(e,t))}signOut(e){return this._store.dispatch(this._customerActionCreator.signOutCustomer(e))}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve(this._store.getState())}initialize(){return Promise.resolve(this._store.getState())}deinitialize(){return Promise.resolve(this._store.getState())}}function et(e){if(!/^(https?:)?\\/\\//.test(e))throw new ye(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=e;const n=t.port&&-1!==e.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${n?`:${n}`:\"\"}`,pathname:t.pathname,port:n,protocol:t.protocol,search:t.search}}class tt extends T{constructor(e){super(e||\"Unable to proceed due to no extension configured for this region.\"),this.name=\"ExtensionNotFoundError\",this.type=\"extension_not_found\"}}!function(e){e.LoadExtensionsRequested=\"LOAD_EXTENSIONS_REQUESTED\",e.LoadExtensionsSucceeded=\"LOAD_EXTENSIONS_SUCCEEDED\",e.LoadExtensionsFailed=\"LOAD_EXTENSIONS_FAILED\",e.RenderExtensionRequested=\"RENDER_EXTENSION_REQUESTED\",e.RenderExtensionSucceeded=\"RENDER_EXTENSION_SUCCEEDED\",e.RenderExtensionFailed=\"RENDER_EXTENSION_FAILED\"}(qe||(qe={}));var nt,it=n(1381),rt=n(6275),ot=n(2035);function at(e,t){return e.type===t}class st{constructor(e,t,n){this._targetWindow=t,this._context=n,this._targetOrigin=\"*\"===e?\"*\":et(e).origin}post(e,t){const n=this._targetWindow;if(window===n)return;if(!n)throw new Error(\"Unable to post message because target window is not set.\");const i=t&&(0,it.R)(window,\"message\").pipe((0,rt.p)(e=>e.origin===this._targetOrigin&&at(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)),(0,ot.T)(e=>{if(t.errorType===e.data.type)throw e.data;return e.data}),(0,ze.s)(1)).toPromise();return n.postMessage(Object.assign(Object.assign({},e),{context:this._context}),this._targetOrigin),i}setTarget(e){this._targetWindow=e}setContext(e){this._context=e}}function ct(e){var t;const n=null===(t=document.querySelector(`[data-extension-id=\"${e.id}\"]`))||void 0===t?void 0:t.querySelector(\"iframe\");if(!(null==n?void 0:n.contentWindow))throw new tt(`Unable to post due to no extension rendered for ID: ${e.id}.`);return new st(e.url,n.contentWindow)}!function(e){e.ExtensionReady=\"EXTENSION:READY\",e.ExtensionFailed=\"EXTENSION:FAILED\"}(nt||(nt={}));class dt{constructor(e){const t=new Promise((e,t)=>{this.cancel=t});this.promise=Promise.race([e,t])}}class ut extends T{constructor(e){super(e||\"Unable to proceed because the required element is unexpectedly detached from the page.\"),this.name=\"UnexpectedDetachmentError\",this.type=\"unexpected_detachment\"}}var lt;class ht{constructor(e){this._mutationObserver=e}ensurePresence(e,t){return n=this,i=void 0,o=function*(){const n=new dt(t),i=this._mutationObserver.create(t=>{t.forEach(t=>{0!==Array.from(t.removedNodes).filter(t=>e.some(e=>t===e||t.contains(e))).length&&n.cancel(new ut)})});i.observe(document.body,{childList:!0,subtree:!0});try{const e=yield n.promise;return i.disconnect(),e}catch(e){throw i.disconnect(),e}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}}function pt(e,t){const{iframeResizer:i}=n(3347);return i(e,t)}class mt extends T{constructor(e){super(e||\"Unable to load an extension\"),this.name=\"ExtensionNotLoadedError\",this.type=\"extension_not_loaded\"}}!function(e){e.Subscribe=\"EXTENSION_INTERNAL:SUBSCRIBE\",e.Unsubscribe=\"EXTENSION_INTERNAL:UNSUBSCRIBE\",e.ResizeIframe=\"EXTENSION_INTERNAL:RESIZE_IFRAME\"}(lt||(lt={}));class yt{constructor(e){this._options=e}createFrame(e,t,n,i){const r=document.getElementById(t),{timeout:o=6e4}=this._options||{};if(!r)throw new mt(\"Unable to embed the iframe because the container element could not be found.\");const a=document.createElement(\"iframe\");return a.src=e,a.style.border=\"none\",a.style.display=\"none\",a.style.width=\"100%\",r.appendChild(a),this._toResizableFrame(a,o,n,i).catch(e=>{throw r.removeChild(a),e})}_toResizableFrame(e,t,n,i){return r=this,o=void 0,s=function*(){const r=new ht(new Ue),o=new Promise((r,o)=>{const a=window.setTimeout(()=>{try{i()}catch(e){e instanceof Error&&console.error(`Extension rendering timed out after ${t}ms, and the callback function could not be executed. Error: ${e.message}`)}o(new mt(\"Unable to load the extension because the content could not be loaded.\"))},t),s=t=>{if(t.origin===et(e.src).origin&&at(t.data,lt.ResizeIframe)){e.style.display=\"\";const t=pt({autoResize:!1,scrolling:!1,sizeWidth:!1,heightCalculationMethod:\"bodyOffset\",initCallback:n},e);c(),r(t[t.length-1])}},c=()=>{window.removeEventListener(\"message\",s),window.clearTimeout(a)};window.addEventListener(\"message\",s)});return r.ensurePresence([e],o)},new((a=void 0)||(a=Promise))(function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function i(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof a?r:new a(function(e){e(r)})).then(n,i)}c((s=s.apply(r,o||[])).next())});var r,o,a,s}}class ft{constructor(e,t,n){this._containerId=e,this._extension=t,this._config=n;const{cartId:i,parentOrigin:r}=this._config;this._url=new URL(this._extension.url),this._url.searchParams.set(\"extensionId\",this._extension.id),this._url.searchParams.set(\"cartId\",i),this._url.searchParams.set(\"parentOrigin\",r)}attach(){var e,t,n,i,r;return t=this,n=void 0,r=function*(){if(null===(e=document.querySelector(`[data-extension-id=\"${this._extension.id}\"]`))||void 0===e?void 0:e.querySelector(\"iframe\"))return;const t=new yt,n=e=>{ct(this._extension).post({type:e})};this._iframe=yield t.createFrame(this._url.toString(),this._containerId,()=>{n(nt.ExtensionReady)},()=>{n(nt.ExtensionFailed)});const i=document.getElementById(this._containerId);null==i||i.setAttribute(\"data-extension-id\",this._extension.id)},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())})}detach(){this._iframe&&this._iframe.parentElement&&this._iframe.parentElement.removeChild(this._iframe)}}class gt{constructor(e){this._requestSender=e}loadExtensions(e){return()=>O.c.create(t=>{t.next((0,u.VP)(qe.LoadExtensionsRequested)),this._requestSender.loadExtensions(e).then(e=>{const n=e.body;t.next((0,u.VP)(qe.LoadExtensionsSucceeded,n)),t.complete()}).catch(e=>{t.error((0,u.fQ)(qe.LoadExtensionsFailed,e))})})}renderExtension(e,t,n){return i=>O.c.create(r=>{return o=this,a=void 0,c=function*(){const o=i.getState(),{id:a}=o.cart.getCartOrThrow(),{links:{checkoutLink:s}}=o.config.getStoreConfigOrThrow(),c=o.extensions.getExtensionByRegion(t);try{if(!c)throw new tt(`Unable to proceed due to no extension configured for the region: ${t}.`);if(r.next((0,u.VP)(qe.RenderExtensionRequested)),\"worker\"===c.type){const e=function(e){if(!window.Worker)throw new Error(\"Unable to load the extension's web worker: your browser does not support Web Workers.\");try{const t=URL.createObjectURL(new Blob([`importScripts=((i)=>(...a)=>i(...a.map((u)=>''+new URL(u,\"${e}\"))))(importScripts);importScripts(\"${e}\")`],{type:\"text/javascript\"}));return new Worker(t)}catch(e){throw new Error(\"Unable to load the extension's web worker\")}}(c.url);n.add(c.id,e)}else{const t=new ft(e,c,{cartId:a,parentOrigin:et(s).origin});yield t.attach()}r.next((0,u.VP)(qe.RenderExtensionSucceeded)),r.complete()}catch(e){r.error((0,u.fQ)(qe.RenderExtensionFailed,e))}},new((s=void 0)||(s=Promise))(function(e,t){function n(e){try{r(c.next(e))}catch(e){t(e)}}function i(e){try{r(c.throw(e))}catch(e){t(e)}}function r(t){var r;t.done?e(t.value):(r=t.value,r instanceof s?r:new s(function(e){e(r)})).then(n,i)}r((c=c.apply(o,a||[])).next())});var o,a,s,c})}}class vt{constructor(e){this._requestSender=e}loadExtensions({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/checkout-extensions\",{timeout:e,headers:Object.assign({Accept:R.JsonV1},S),params:t})}}const _t=function(e,t,n){return t&&n?bt(0,t,n):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const i=Object.getOwnPropertyDescriptor(e.prototype,n);i&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,bt(e.prototype,n,i))}),t}(e)};function bt(e,t,n){if(\"function\"!=typeof n.value)return n;let i=n.value;return{get(){const e=i.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){i=e}}}var St,wt;class Ct{constructor(e){this._worker=e,this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,this._worker.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,this._worker.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const i=n.indexOf(t);i>=0&&n.splice(i,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){const t=e.data,{context:n}=t,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"context\"]);this.trigger(i,n)}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([_t],Ct.prototype,\"_handleMessage\",null);class It{constructor(e,t){this._worker=e,this._context=t}post(e){if(!this._worker)throw new Error(\"WorkerPoster: Worker is not initialized or creation failed. Cannot post message.\");this._worker.postMessage(Object.assign(Object.assign({},e),{context:this._context}))}}class Pt extends T{constructor(e){super(e||\"Unable to proceed due to unsupported extension command.\"),this.name=\"UnsupportedExtensionCommandError\",this.type=\"unsupported_extension_command_error\"}}class Et extends T{constructor(e){super(e||\"Unable to proceed due to unsupported extension query.\"),this.name=\"UnsupportedExtensionQueryError\",this.type=\"unsupported_extension_query_error\"}}!function(e){e.ReloadCheckout=\"EXTENSION:RELOAD_CHECKOUT\",e.ShowLoadingIndicator=\"EXTENSION:SHOW_LOADING_INDICATOR\",e.SetIframeStyle=\"EXTENSION:SET_IFRAME_STYLE\",e.ReRenderShippingForm=\"EXTENSION:RE_RENDER_SHIPPING_FORM\",e.ReRenderShippingStep=\"EXTENSION:RE_RENDER_SHIPPING_STEP\"}(St||(St={})),function(e){e.GetConsignments=\"EXTENSION:GET_CONSIGNMENTS\"}(wt||(wt={}));class Ot{constructor(e={},t={},n={}){this._workers=e,this._commandListeners=t,this._queryListeners=n}add(e,t){this._workers[e]=t}listenForCommand(e,t,n){const i=this._getWorkerById(e);this._commandListeners[e]||(this._commandListeners[e]=new Ct(i));const r=this._commandListeners[e];r.listen();const o=this._validateCommand(t),a=(t,i)=>{(null==i?void 0:i.extensionId)===e&&n(t,i)};return r.addListener(o,a),()=>{r.removeListener(o,a)}}listenForQuery(e,t,n){const i=this._getWorkerById(e);this._queryListeners[e]||(this._queryListeners[e]=new Ct(i));const r=this._queryListeners[e];r.listen();const o=this._validateQuery(t),a=(t,i)=>{(null==i?void 0:i.extensionId)===e&&n(t,i)};return r.addListener(o,a),()=>{r.removeListener(o,a)}}stopListen(e){this._commandListeners[e]&&this._commandListeners[e].stopListen(),this._queryListeners[e]&&this._queryListeners[e].stopListen()}post(e,t){if(!this._workers[e])throw new Error(`Worker with extensionId ${e} not found`);new It(this._workers[e],e).post(t)}clearCacheById(e){delete this._workers[e]}_getWorkerById(e){const t=this._workers[e];if(!t)throw new tt(`Worker with extensionId ${e} not found`);return t}_validateCommand(e){if(Object.values(St).includes(e))return e;throw new Pt}_validateQuery(e){if(Object.values(wt).includes(e))return e;throw new Et}}function At(e){return et(0===e.hostname.indexOf(\"www\")?e.href:e.href.replace(e.hostname,`www.${e.hostname}`))}var Tt;class kt{constructor(e){this._sourceOrigins=[et(e).origin,At(et(e)).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const i=n.indexOf(t);i>=0&&n.splice(i,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){if(-1===this._sourceOrigins.indexOf(e.origin)||!at(e.data,e.data.type))return;const t=e.data,{context:n}=t,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"context\"]);this.trigger(i,n)}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([_t],kt.prototype,\"_handleMessage\",null);class xt{constructor(e,t,n={},i={},r={}){this._store=e,this._workerExtensionMessenger=t,this._commandListeners=n,this._queryListeners=i,this._posters=r}clearCacheByRegion(e){const t=this._getExtensionByRegion(e);\"worker\"!==t.type?this.clearCacheById(t.id):this._workerExtensionMessenger.clearCacheById(t.id)}clearCacheById(e){const t=this._getExtensionById(e);\"worker\"!==t.type?(this._commandListeners[e]&&delete this._commandListeners[e],this._queryListeners[e]&&delete this._queryListeners[e],this._posters[e]&&delete this._posters[e]):this._workerExtensionMessenger.clearCacheById(t.id)}listenForCommand(e,t,n){const i=this._getExtensionById(e);if(\"worker\"===i.type)return this._workerExtensionMessenger.listenForCommand(e,t,n);this._commandListeners[e]||(this._commandListeners[e]=new kt(i.url));const r=this._commandListeners[e];r.listen();const o=this._validateCommand(t),a=(t,i)=>{(null==i?void 0:i.extensionId)===e&&n(t,i)};return r.addListener(o,a),()=>{r.removeListener(o,a)}}listenForQuery(e,t,n){const i=this._getExtensionById(e);if(\"worker\"===i.type)return this._workerExtensionMessenger.listenForQuery(e,t,n);this._queryListeners[e]||(this._queryListeners[e]=new kt(i.url));const r=this._queryListeners[e];r.listen();const o=this._validateQuery(t),a=(t,i)=>{(null==i?void 0:i.extensionId)===e&&n(t,i)};return r.addListener(o,a),()=>{r.removeListener(o,a)}}stopListen(e){\"worker\"!==this._getExtensionById(e).type?(this._commandListeners[e]&&this._commandListeners[e].stopListen(),this._queryListeners[e]&&this._queryListeners[e].stopListen()):this._workerExtensionMessenger.stopListen(e)}post(e,t){try{const n=this._getExtensionById(e);if(\"worker\"===n.type)return void this._workerExtensionMessenger.post(e,t);this._posters[e]||(this._posters[e]=ct(n)),this._posters[e].post(t)}catch(n){this.clearCacheById(e),console.log(`Unable to post event to extension(${e}) because extension iframe is not mounted.\\nThe event that could not be delivered:`,t)}}_getExtensionById(e){var t;this._getExtensions();const n=null===(t=this._extensions)||void 0===t?void 0:t.find(t=>t.id===e);if(!n)throw new tt(`Unable to proceed due to no extension found for ID: ${e}.`);return n}_getExtensionByRegion(e){var t;this._getExtensions();const n=null===(t=this._extensions)||void 0===t?void 0:t.find(t=>t.region===e);if(!n)throw new tt(`Unable to proceed due to no extension found for region: ${e}.`);return n}_getExtensions(){if(this._extensions)return;const{extensions:{getExtensions:e}}=this._store.getState();if(this._extensions=e(),!this._extensions)throw new tt(\"Extension configurations not found.\")}_validateCommand(e){if(Object.values(St).includes(e))return e;throw new Pt}_validateQuery(e){if(Object.values(wt).includes(e))return e;throw new Et}}class Mt{constructor(e,t,n){this._store=e,this._extensionMessenger=t,this._subscribers=n,this._subscribed={},this._unsubscribers={},this._listeners={}}listen(){var e;const{data:{getExtensions:t}}=this._store.getState();null===(e=t())||void 0===e||e.forEach(e=>{if(this._listeners[e.id])return;const t=new kt(e.url);t.addListener(lt.Subscribe,this._handleSubscribe.bind(this)),t.addListener(lt.Unsubscribe,this._handleUnsubscribe.bind(this)),t.listen(),this._listeners[e.id]=t})}broadcast(e){var t;const{data:{getExtensions:n}}=this._store.getState();null===(t=n())||void 0===t||t.forEach(t=>{this._subscribed[t.id]&&this._extensionMessenger.post(t.id,e)})}_handleSubscribe({payload:{eventType:e,extensionId:t}}){this._subscribed[t]=!0,this._unsubscribers[e]||(this._unsubscribers[e]=this._subscribers[e](this._store,this))}_handleUnsubscribe({payload:{eventType:e,extensionId:t}}){var n,i;delete this._subscribed[t],Object.keys(this._subscribed).length||(null===(i=(n=this._unsubscribers)[e])||void 0===i||i.call(n),delete this._unsubscribers[e])}}!function(e){e.ConsignmentsChanged=\"EXTENSION:CONSIGNMENTS_CHANGED\"}(Tt||(Tt={}));const Nt=(e,t)=>{var n;const{data:{getConsignments:i}}=e.getState();let r=null!==(n=i())&&void 0!==n?n:[];return e.subscribe(({data:{getConsignments:e}})=>{var n;const i=null!==(n=e())&&void 0!==n?n:[];i!==r&&(t.broadcast({type:Tt.ConsignmentsChanged,payload:{consignments:i,previousConsignments:r}}),r=i)},({data:{getConsignments:e}})=>e())};class Dt extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}var Rt,zt;!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(Rt||(Rt={}));class Ft extends Dt{constructor(e){super(function(e){switch(e){case Rt.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case Rt.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case Rt.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case Rt.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case Rt.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case Rt.MissingCheckoutConfig:case Rt.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case Rt.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case Rt.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case Rt.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case Rt.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case Rt.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case Rt.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function Bt(e){return t=e.lineItems.physicalItems.filter(e=>!e.addedByPromotion),(0,P.reduce)(t,(e,t)=>e+t.quantity,0);var t}function jt(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(zt||(zt={}));class Lt extends Dt{constructor(e){super(function(e){switch(e){case zt.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case zt.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case zt.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case zt.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const Ut={de:\"eu\",jp:\"fe\",uk:\"eu\",us:\"na\"};var Vt,qt,Ht,Gt,Wt,$t;!function(e){e.en_US=\"en_US\",e.en_GB=\"en_GB\",e.de_DE=\"de_DE\",e.fr_FR=\"fr_FR\",e.it_IT=\"it_IT\",e.es_ES=\"es_ES\",e.ja_JP=\"ja_JP\"}(Vt||(Vt={})),function(e){e.Home=\"Home\",e.Product=\"Product\",e.Cart=\"Cart\",e.Checkout=\"Checkout\",e.Other=\"Other\"}(qt||(qt={})),function(e){e.USD=\"USD\",e.EUR=\"EUR\",e.GBP=\"GBP\",e.JPY=\"JPY\"}(Ht||(Ht={})),function(e){e.PayAndShip=\"PayAndShip\",e.PayOnly=\"PayOnly\"}(Gt||(Gt={})),function(e){e.Gold=\"Gold\",e.LightGray=\"LightGray\",e.DarkGray=\"DarkGray\"}(Wt||(Wt={})),function(e){e.C0001=\"C0001\"}($t||($t={}));var Yt=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Kt{constructor(e){this.amazonPayV2ScriptLoader=e}initialize(e){return Yt(this,void 0,void 0,function*(){this.amazonPayV2SDK=yield this.amazonPayV2ScriptLoader.load(e),this.buttonParentContainer=this.buttonParentContainer||this.createAmazonPayButtonParentContainer()})}deinitialize(){var e;return this.amazonPayV2Button=void 0,null===(e=this.buttonParentContainer)||void 0===e||e.remove(),this.buttonParentContainer=void 0,this.amazonPayV2SDK=void 0,Promise.resolve()}bindButton(e,t,n){this.getAmazonPayV2SDK().Pay.bindChangeAction(`#${e}`,{amazonCheckoutSessionId:t,changeAction:n})}createButton(e,t){this.amazonPayV2Button=this.getAmazonPayV2SDK().Pay.renderButton(`#${e}`,t)}prepareCheckout(e){const t=this.prepareRequestConfig(e);this.getAmazonPayV2Button().onClick(()=>{this.getAmazonPayV2Button().initCheckout(t)})}prepareCheckoutWithCreationRequestConfig(e){this.getAmazonPayV2Button().onClick(()=>Yt(this,void 0,void 0,function*(){const t=yield e();if(t){const e=this.prepareRequestConfig(t.createCheckoutSessionConfig,t.estimatedOrderAmount,t.productType);this.getAmazonPayV2Button().initCheckout(e)}}))}signout(){return Yt(this,void 0,void 0,function*(){return this.amazonPayV2SDK&&this.amazonPayV2SDK.Pay.signout(),Promise.resolve()})}renderAmazonPayButton({buttonColor:e,checkoutState:t,containerId:n,decoupleCheckoutInitiation:i=!1,methodId:r,options:o,placement:a,isButtonMicroTextDisabled:s=!1}){const c=document.querySelector(`#${n}`);if(!c)return;const{id:d}=c.appendChild(this.getButtonParentContainer());o&&s&&(o.design=$t.C0001);const u=null!=o?o:this.getAmazonPayV2ButtonOptions(t,r,a,i,e);return this.createButton(d,u),this.getButtonParentContainer()}updateBuyNowFlowFlag(e){this.isBuyNowFlow=Boolean(e)}isPh4Enabled(e,t){const n=!!e[\"PROJECT-3483.amazon_pay_ph4\"],i=!!e[\"INT-6885.amazon_pay_ph4_us_only\"];return n&&i?\"US\"===t:n}prepareRequestConfig(e,t,n){const{publicKeyId:i}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"publicKeyId\"]);return Object.assign(Object.assign({createCheckoutSessionConfig:this.isEnvironmentSpecific(i)?r:e},t&&{estimatedOrderAmount:t}),n&&{productType:n})}createAmazonPayButtonParentContainer(){const e=Math.random().toString(16).substr(-4),t=document.createElement(\"div\");return t.id=`amazonpay_button_parent_container_${e}`,t}getAmazonPayV2ButtonOptions(e,t,n,i=!1,r=Wt.Gold){var o;const{getCart:a,getCheckout:s,getStoreConfigOrThrow:c,getPaymentMethodOrThrow:d}=this.getCheckoutState(e),{config:{merchantId:u,testMode:l},initializationData:h}=d(t);if(!h)throw new Ft(Rt.MissingPaymentMethod);const{checkoutLanguage:p,checkoutSessionMethod:m,createCheckoutSessionConfig:y,extractAmazonCheckoutSessionId:f,ledgerCurrency:g,publicKeyId:v=\"\",isButtonMicroTextDisabled:_}=h;if(!u||!g)throw new Ft(Rt.MissingPaymentMethod);const b=Object.assign({merchantId:u,ledgerCurrency:g,checkoutLanguage:p,placement:n,buttonColor:r},_?{design:$t.C0001}:{});if(this.isBuyNowFlow)return Object.assign(Object.assign({},b),{sandbox:!!l});const S=a();b.productType=S&&0===Bt(S)?Gt.PayOnly:Gt.PayAndShip;const{checkoutSettings:{features:w},storeProfile:{shopPath:C,storeCountryCode:I}}=c();if(this.isPh4Enabled(w,I)){if(!y)throw new Ft(Rt.MissingPaymentMethod);const e=null===(o=s())||void 0===o?void 0:o.outstandingBalance.toString(),t=null==S?void 0:S.currency.code,n=Object.assign({},b);let r;return this.isEnvironmentSpecific(v)?(n.publicKeyId=v,r=y):(n.sandbox=!!l,r=Object.assign(Object.assign({},y),{publicKeyId:v})),i||(n.createCheckoutSessionConfig=r),e&&t&&(n.estimatedOrderAmount={amount:e,currencyCode:t}),n}const P={method:m,url:`${C}/remote-checkout/${t}/payment-session`,extractAmazonCheckoutSessionId:f};return Object.assign(Object.assign({},b),{createCheckoutSession:P,sandbox:!!l})}isEnvironmentSpecific(e){return/^(SANDBOX|LIVE)/.test(e)}getAmazonPayV2SDK(){return this.getOrThrow(this.amazonPayV2SDK)}getButtonParentContainer(){return this.getOrThrow(this.buttonParentContainer)}getAmazonPayV2Button(){return this.getOrThrow(this.amazonPayV2Button)}getOrThrow(e){return jt(e,()=>new Lt(zt.PaymentNotInitialized))}getCheckoutState(e){return\"object\"==typeof(t=e)&&null!==t&&\"cart\"in t&&\"checkout\"in t&&\"config\"in t&&\"paymentMethods\"in t?{getCart:e.cart.getCart,getCheckout:e.checkout.getCheckout,getStoreConfigOrThrow:e.config.getStoreConfigOrThrow,getPaymentMethodOrThrow:t=>e.paymentMethods.getPaymentMethodOrThrow(t)}:e;var t}}class Qt extends Dt{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class Jt{constructor(e,t=window){this.scriptLoader=e,this.windowWithAmazonPay=t}load(e){return t=this,n=void 0,r=function*(){const{initializationData:t}=e,n=(null==t?void 0:t.region)||\"us\",i=Ut[n];if(yield this.scriptLoader.loadScript(`https://static-${i}.payments-amazon.com/checkout.js`),!this.windowWithAmazonPay.amazon)throw new Qt;return this.windowWithAmazonPay.amazon},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())});var t,n,i,r}}function Zt(){return new Kt(new Jt((0,d.vQ)()))}function Xt(e,t){return Object.assign(e,{resolveIds:t})}class en extends Dt{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class tn extends Dt{constructor(e){super(e||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var nn=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class rn{constructor(e,t){this.paymentIntegrationService=e,this.amazonPayV2PaymentProcessor=t}initialize(e){return nn(this,void 0,void 0,function*(){const{methodId:t,amazonpay:n}=e;if(!t||!(null==n?void 0:n.container))throw new en('Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.');let i;try{i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t)}catch(e){yield this.paymentIntegrationService.loadPaymentMethod(t),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t)}yield this.amazonPayV2PaymentProcessor.initialize(i),this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:this.paymentIntegrationService.getState(),containerId:n.container,methodId:t,placement:qt.Checkout})})}deinitialize(){return nn(this,void 0,void 0,function*(){yield this.amazonPayV2PaymentProcessor.deinitialize()})}signIn(){throw new tn('In order to sign in via Amazon, the shopper must click on \"Amazon Pay\" button.')}signOut(e){return nn(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getPaymentId();t&&(yield this.amazonPayV2PaymentProcessor.signout(),yield this.paymentIntegrationService.remoteCheckoutSignOut(t.providerId,e))})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}}const on=Xt(e=>new rn(e,Zt()),[{id:\"amazonpay\"}]);function an(e,t,n=!0){var i;return null!==(i=e[t])&&void 0!==i?i:n}const sn=\"3.128.0\",cn=\"3.123.2\",dn=\"3.106.0\";class un{constructor(e){this.paymentIntegrationService=e,this.braintreeWindow=window}getSDKVersion(){const e=this.paymentIntegrationService.getState().getStoreConfig(),t=(null==e?void 0:e.checkoutSettings.features)||{};return this.getPreloadedSDKVersion()||(an(t,\"PAYPAL-5809.braintree_hosted_fields_fix_version\")?sn:an(t,\"PAYPAL-5636.update_braintree_sdk_version\")?cn:dn)}getPreloadedSDKVersion(){const e=this.braintreeWindow.braintree;if(e){const t=(0,P.find)(Object.values(e),e=>!!e.VERSION);return null==t?void 0:t.VERSION}}}class ln extends Dt{constructor(e){super(e||\"Unsupported browser error\"),this.name=\"UnsupportedBrowserError\",this.type=\"unsupported_browser\"}}var hn,pn,mn,yn,fn,gn,vn;function _n(e){return Boolean(\"object\"==typeof e&&null!==e&&(\"type\"in e||\"message\"in e||\"code\"in e))}!function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(hn||(hn={})),function(e){e.Completed=\"COMPLETED\",e.Pending=\"PENDING\",e.Failed=\"FAILED\"}(pn||(pn={})),function(e){e.TRUSTLY=\"trustly\"}(mn||(mn={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"cancelled\",e.UNRECOGNIZED=\"unrecognized\"}(yn||(yn={})),function(e){e.Customer=\"CUSTOMER\",e.Merchant=\"MERCHANT\",e.Network=\"NETWORK\",e.Internal=\"INTERNAL\",e.Unknown=\"UNKNOWN\"}(fn||(fn={})),function(e){e.KountNotEnabled=\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"}(gn||(gn={})),function(e){e.Visa=\"visa\",e.Mastercard=\"mastercard\",e.AmericanExpress=\"american-express\",e.DinersClub=\"diners-club\",e.Discover=\"discover\",e.Jcb=\"jcb\",e.UnionPay=\"union-pay\",e.Maestro=\"maestro\",e.Elo=\"elo\",e.Mir=\"mir\",e.Hiper=\"hiper\",e.Hipercard=\"hipercard\"}(vn||(vn={}));var bn,Sn,wn,Cn=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class In{constructor(e){this.braintreeScriptLoader=e}initialize(e){this.setClientToken(e)}deinitialize(){return Cn(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollector),this.dataCollector=void 0})}getClient(){return Cn(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=yield t.create({authorization:e})}return this.client})}getDataCollectorOrThrow(e){return Cn(this,void 0,void 0,function*(){const t={deviceData:void 0,teardown:()=>Promise.resolve()};if(!this.dataCollector)try{const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadDataCollector(),i=Object.assign({client:t,kount:!0},e);this.dataCollector=yield n.create(i)}catch(e){if(_n(e)&&e.code===gn.KountNotEnabled)return t;throw e}return this.dataCollector})}getBraintreeGooglePayment(){return Cn(this,void 0,void 0,function*(){if(!this.googlePayment){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadGooglePayment()]);this.googlePayment=yield t.create({client:e})}return this.googlePayment})}getBraintreeThreeDS(){return Cn(this,void 0,void 0,function*(){if(!this.threeDS){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]);this.threeDS=yield t.create({client:e,version:2})}return this.threeDS})}getBraintreeLocalPayment(e){return Cn(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment){const[t,n]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadLocalPayment()]);this.braintreeLocalPayment=yield new Promise((i,r)=>{n.create({client:t,merchantAccountId:e},(e,t)=>{e&&r(e),i(t)})})}return this.braintreeLocalPayment})}getUsBankAccount(){return Cn(this,void 0,void 0,function*(){if(!this.usBankAccount){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadUsBankAccount();this.usBankAccount=yield t.create({client:e})}return this.usBankAccount})}getBraintreeVisaCheckout(){return this.visaCheckout||(this.visaCheckout=Promise.all([this.getClient(),this.braintreeScriptLoader.loadVisaCheckout()]).then(([e,t])=>t.create({client:e}))),this.visaCheckout}getVisaCheckoutSdk(e){return Cn(this,void 0,void 0,function*(){return this.visaCheckoutSDK||(this.visaCheckoutSDK=yield this.braintreeScriptLoader.loadVisaCheckoutSdk(e)),this.visaCheckoutSDK})}getVenmoCheckoutOrThrow(){return Cn(this,void 0,void 0,function*(){if(!this.braintreeVenmo){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadVenmoCheckout(),n={client:e,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},i=yield t.create(n);if(!i.isBrowserSupported())throw new ln;this.braintreeVenmo=i}return this.braintreeVenmo})}setClientToken(e){this.clientToken=e}getClientTokenOrThrow(){if(!this.clientToken)throw new Lt(zt.PaymentNotInitialized);return this.clientToken}teardownModule(e){return e?e.teardown():Promise.resolve()}}!function(e){e.Sandbox=\"sandbox\",e.Production=\"production\"}(bn||(bn={})),function(e){e.Client=\"client\",e.DataCollector=\"dataCollector\",e.Fastlane=\"fastlane\",e.GooglePayment=\"googlePayment\",e.HostedFields=\"hostedFields\",e.LocalPayment=\"localPayment\",e.Paypal=\"paypal\",e.PaypalCheckout=\"paypalCheckout\",e.ThreeDSecure=\"threeDSecure\",e.UsBankAccount=\"usBankAccount\",e.Venmo=\"venmo\",e.VisaCheckout=\"visaCheckout\"}(Sn||(Sn={})),function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\"}(wn||(wn={}));const Pn={[dn]:{[Sn.Client]:\"sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt\",[Sn.PaypalCheckout]:\"sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O\",[Sn.Paypal]:\"sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+\",[Sn.LocalPayment]:\"sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT\",[Sn.DataCollector]:\"sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV\",[Sn.UsBankAccount]:\"sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ\",[Sn.GooglePayment]:\"sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe\",[Sn.ThreeDSecure]:\"sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB\",[Sn.VisaCheckout]:\"sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT\",[Sn.Venmo]:\"sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov\",[Sn.HostedFields]:\"sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy\",[Sn.Fastlane]:\"sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa\"},[cn]:{[Sn.Client]:\"sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO\",[Sn.PaypalCheckout]:\"sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/\",[Sn.Paypal]:\"sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt\",[Sn.LocalPayment]:\"sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH\",[Sn.DataCollector]:\"sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO\",[Sn.UsBankAccount]:\"sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW\",[Sn.GooglePayment]:\"sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO\",[Sn.ThreeDSecure]:\"sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym\",[Sn.VisaCheckout]:\"sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS\",[Sn.Venmo]:\"sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU\",[Sn.HostedFields]:\"sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P\",[Sn.Fastlane]:\"sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y\"},[sn]:{[Sn.Client]:\"sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq\",[Sn.PaypalCheckout]:\"sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh\",[Sn.Paypal]:\"sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH\",[Sn.LocalPayment]:\"sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC\",[Sn.DataCollector]:\"sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc\",[Sn.UsBankAccount]:\"sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F\",[Sn.GooglePayment]:\"sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i\",[Sn.ThreeDSecure]:\"sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D\",[Sn.VisaCheckout]:\"sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv\",[Sn.Venmo]:\"sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz\",[Sn.HostedFields]:\"sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z\",[Sn.Fastlane]:\"sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr\"}};var En,On=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class An{constructor(e,t,n){this.scriptLoader=e,this.braintreeHostWindow=t,this.braintreeSDKVersionManager=n}loadClient(){return On(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Sn.Client,\"client.min.js\")})}loadFastlane(){return On(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Sn.Fastlane,\"fastlane.min.js\")})}loadPaypalCheckout(){return On(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Sn.PaypalCheckout,\"paypal-checkout.min.js\")})}loadPaypal(){return On(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Sn.Paypal,\"paypal.min.js\")})}loadLocalPayment(){return On(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Sn.LocalPayment,\"local-payment.min.js\")})}loadDataCollector(){return On(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Sn.DataCollector,\"data-collector.min.js\")})}loadUsBankAccount(){return On(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Sn.UsBankAccount,\"us-bank-account.min.js\")})}loadGooglePayment(){return On(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Sn.GooglePayment,\"google-payment.min.js\")})}load3DS(){return On(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Sn.ThreeDSecure,\"three-d-secure.min.js\")})}loadVisaCheckout(){return this.loadBraintreeModuleOrThrow(Sn.VisaCheckout,\"visa-checkout.min.js\")}loadVenmoCheckout(){return this.loadBraintreeModuleOrThrow(Sn.Venmo,\"venmo.min.js\")}loadHostedFields(){return On(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Sn.HostedFields,\"hosted-fields.min.js\")})}loadVisaCheckoutSdk(e){return On(this,void 0,void 0,function*(){if(this.braintreeHostWindow.V)return this.braintreeHostWindow.V;const t=e?\"sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm\":\"sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6\";return this.scriptLoader.loadScript(`//${e?\"sandbox-\":\"\"}assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,{async:!0,attributes:{integrity:t,crossorigin:\"anonymous\"}}).then(()=>{if(!this.braintreeHostWindow.V)throw new Qt;return this.braintreeHostWindow.V})})}loadBraintreeModuleOrThrow(e,t){return On(this,void 0,void 0,function*(){let n=this.getBraintreeModule(e);if(n)return n;const i=this.braintreeSDKVersionManager.getSDKVersion(),r=`//js.braintreegateway.com/web/${i}/js/${t}`,o=i in Pn?this.getIntegrityValuesByModuleName(e,i):void 0;if(yield this.scriptLoader.loadScript(r,o?{async:!0,attributes:{integrity:o,crossorigin:\"anonymous\"}}:void 0),n=this.getBraintreeModule(e),!n)throw new Qt;return n})}getBraintreeModule(e){var t;return null===(t=this.braintreeHostWindow.braintree)||void 0===t?void 0:t[e]}getIntegrityValuesByModuleName(e,t){const n=Pn[t][e];if(!n)throw new Error(\"Unexpected fileName value\");return n}}class Tn extends Dt{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}!function(e){e.BRAINTREE=\"braintree\",e.BRAINTREE_FASTLANE=\"braintreeacceleratedcheckout\"}(En||(En={}));var kn,xn=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};!function(e){e.Subtotal=\"Subtotal\",e.Shipping=\"Shipping\"}(kn||(kn={}));class Mn{constructor(e,t,n,i,r){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=n,this._braintreeSdk=i,this._applePayScriptLoader=r,this._onAuthorizeCallback=P.noop,this._onError=P.noop,this._onClick=P.noop,this._subTotalLabel=kn.Subtotal,this._shippingLabel=kn.Shipping,this._hasApplePaySession=!1}initialize(e){var t;return xn(this,void 0,void 0,function*(){const{methodId:n,applepay:i}=e;if(!n||!i)throw new Ft(Rt.MissingPaymentMethod);const{container:r,shippingLabel:o,subtotalLabel:a,onError:s=P.noop,onClick:c=P.noop,onPaymentAuthorize:d}=i;this._shippingLabel=o||kn.Shipping,this._subTotalLabel=a||kn.Subtotal,this._onAuthorizeCallback=d,this._onError=s,this._onClick=c;let u=this._paymentIntegrationService.getState();yield this._applePayScriptLoader.loadSdk();try{this._paymentMethod=u.getPaymentMethodOrThrow(n)}catch(e){u=yield this._paymentIntegrationService.loadPaymentMethod(n),this._paymentMethod=u.getPaymentMethodOrThrow(n)}yield this._paymentIntegrationService.verifyCheckoutSpamProtection(),this._applePayButton=this._createButton(r),this._applePayButton.addEventListener(\"click\",this._handleWalletButtonClick.bind(this)),(null===(t=this._paymentMethod.initializationData)||void 0===t?void 0:t.gateway)===En.BRAINTREE&&this._paymentMethod.clientToken&&this._braintreeSdk.initialize(this._paymentMethod.clientToken)})}deinitialize(){return Promise.resolve()}signIn(){throw new tn('In order to sign in via Apple, the shopper must click on \"Apple Pay\" button.')}signOut(){throw new tn(\"Need to do signout via apple.\")}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}_createButton(e){const t=document.getElementById(e);if(!t)throw new en(\"Unable to create sign-in button without valid container ID.\");const n=this._createApplePayButtonElement();return t.appendChild(n),n}_createApplePayButtonElement(){const e=document.createElement(\"apple-pay-button\");return e.setAttribute(\"buttonstyle\",\"black\"),e.setAttribute(\"type\",\"plain\"),e.setAttribute(\"style\",\"--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;\"),e}_handleWalletButtonClick(e){if(e.preventDefault(),this._hasApplePaySession)return;this._onClick();const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getStoreConfigOrThrow(),r=t.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new Ft(Rt.MissingPaymentMethod);const o=this._getBaseRequest(n,r,i,this._paymentMethod),a=this._sessionFactory.create(o);this._handleApplePayEvents(a,this._paymentMethod,i),a.begin(),this._hasApplePaySession=!0}_getBaseRequest(e,t,n,i){var r;const{storeProfile:{storeCountryCode:o,storeName:a}}=n,{currency:{code:s,decimalPlaces:c}}=e,{initializationData:{merchantCapabilities:d,supportedNetworks:u}}=i,l=e.lineItems.physicalItems.length>0,h={requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"],countryCode:o,currencyCode:s,merchantCapabilities:d,supportedNetworks:u,lineItems:[],total:l?{label:a,amount:`${t.grandTotal.toFixed(c)}`,type:\"pending\"}:{label:a,amount:`${t.grandTotal.toFixed(c)}`,type:\"final\"}};if(l)null===(r=h.requiredShippingContactFields)||void 0===r||r.push(\"postalAddress\");else{const e=[{label:this._subTotalLabel,amount:`${t.subtotal.toFixed(c)}`}];t.taxes.forEach(t=>e.push({label:t.name,amount:`${t.amount.toFixed(c)}`})),h.lineItems=e}return h}_handleApplePayEvents(e,t,n){e.onvalidatemerchant=n=>xn(this,void 0,void 0,function*(){try{const{body:i}=yield this._onValidateMerchant(t,n);e.completeMerchantValidation(i)}catch(e){this._onError(e)}}),e.onshippingcontactselected=t=>xn(this,void 0,void 0,function*(){return this._handleShippingContactSelected(e,n,t)}),e.onshippingmethodselected=t=>xn(this,void 0,void 0,function*(){return this._handleShippingMethodSelected(e,n,t)}),e.oncancel=()=>xn(this,void 0,void 0,function*(){this._hasApplePaySession=!1;try{const e=`/remote-checkout/${t.id}/signout`;return yield this._requestSender.get(e),yield this._paymentIntegrationService.loadCheckout()}catch(e){return this._onError(new Tn)}}),e.onpaymentauthorized=n=>xn(this,void 0,void 0,function*(){return this._onPaymentAuthorized(n,e,t)})}_handleShippingContactSelected(e,t,n){var i;return xn(this,void 0,void 0,function*(){const r=this._transformContactToAddress(n.shippingContact);try{yield this._paymentIntegrationService.updateShippingAddress(r)}catch(t){return e.abort(),this._hasApplePaySession=!1,this._onError(t)}const{storeProfile:{storeName:o}}=t;let a=this._paymentIntegrationService.getState();const{currency:{decimalPlaces:s}}=a.getCartOrThrow();let c=a.getCheckoutOrThrow();const d=null===(i=c.consignments[0].selectedShippingOption)||void 0===i?void 0:i.id,u=c.consignments[0].availableShippingOptions,l=null==u?void 0:u.find(({id:e})=>e===d),h=null==u?void 0:u.filter(e=>e.id!==d),p=l?[{label:l.description,amount:`${l.cost.toFixed(s)}`,detail:l.additionalDescription,identifier:l.id}]:[];if(h&&[...h.filter(e=>e.isRecommended),...h.filter(e=>!e.isRecommended)].forEach(e=>p.push({label:e.description,amount:`${e.cost.toFixed(s)}`,detail:e.additionalDescription,identifier:e.id})),!(u instanceof Array))throw new Error(\"Shipping options not available.\");if(0===u.length)return void e.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:\"pending\",label:o,amount:`${c.grandTotal.toFixed(s)}`},[]);const m=u.find(e=>e.isRecommended),y=m?m.id:u[0].id,f=l?l.id:y;try{yield this._updateShippingOption(f)}catch(e){return this._onError(e)}a=this._paymentIntegrationService.getState(),c=a.getCheckoutOrThrow(),e.completeShippingContactSelection({newShippingMethods:p,newTotal:{type:\"final\",label:o,amount:`${c.grandTotal.toFixed(s)}`},newLineItems:this._getUpdatedLineItems(c,s)})})}_handleShippingMethodSelected(e,t,n){return xn(this,void 0,void 0,function*(){const{storeProfile:{storeName:i}}=t,{shippingMethod:{identifier:r}}=n;try{yield this._updateShippingOption(r)}catch(t){return e.abort(),this._hasApplePaySession=!1,this._onError(t)}const o=this._paymentIntegrationService.getState(),{currency:{decimalPlaces:a}}=o.getCartOrThrow(),s=o.getCheckoutOrThrow();e.completeShippingMethodSelection({newTotal:{type:\"final\",label:i,amount:`${s.grandTotal.toFixed(a)}`},newLineItems:this._getUpdatedLineItems(s,a)})})}_getUpdatedLineItems(e,t){const n=[{label:this._subTotalLabel,amount:`${e.subtotal.toFixed(t)}`}];return e.taxes.forEach(e=>n.push({label:e.name,amount:`${e.amount.toFixed(t)}`})),n.push({label:this._shippingLabel,amount:`${e.shippingCostTotal.toFixed(t)}`}),n}_updateShippingOption(e){return xn(this,void 0,void 0,function*(){return this._paymentIntegrationService.selectShippingOption(e)})}_onValidateMerchant(e,t){return xn(this,void 0,void 0,function*(){const n=[`validationUrl=${t.validationURL}`,`merchantIdentifier=${e.initializationData.merchantId}`,`displayName=${e.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${e.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:n})})}_onPaymentAuthorized(e,t,n){var i;return xn(this,void 0,void 0,function*(){const{token:r,billingContact:o,shippingContact:a}=e.payment,s=this._paymentIntegrationService.getState().getCartOrThrow().lineItems.physicalItems.length>0;let c;(null===(i=n.initializationData)||void 0===i?void 0:i.gateway)===En.BRAINTREE&&(c=yield this._getBraintreeDeviceData());const d={methodId:n.id,paymentData:{deviceSessionId:c,formattedPayload:{apple_pay_token:{payment_data:r.paymentData,payment_method:r.paymentMethod,transaction_id:r.transactionIdentifier}}}},u=this._transformContactToAddress(o),l=this._transformContactToAddress(a),h=null==a?void 0:a.emailAddress,p=(null==a?void 0:a.phoneNumber)||\"\";try{return yield this._paymentIntegrationService.updateBillingAddress(Object.assign(Object.assign({},u),{email:h,phone:p})),s&&(yield this._paymentIntegrationService.updateShippingAddress(l)),yield this._paymentIntegrationService.submitOrder({useStoreCredit:!1}),yield this._paymentIntegrationService.submitPayment(d),t.completePayment(ApplePaySession.STATUS_SUCCESS),this._onAuthorizeCallback()}catch(e){return t.completePayment(ApplePaySession.STATUS_FAILURE),this._onError(e)}})}_transformContactToAddress(e){return{firstName:(null==e?void 0:e.givenName)||\"\",lastName:(null==e?void 0:e.familyName)||\"\",city:(null==e?void 0:e.locality)||\"\",company:\"\",address1:(null==e?void 0:e.addressLines)&&e.addressLines[0]||\"\",address2:(null==e?void 0:e.addressLines)&&e.addressLines[1]||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",phone:(null==e?void 0:e.phoneNumber)||\"\",stateOrProvince:(null==e?void 0:e.administrativeArea)||\"\",stateOrProvinceCode:(null==e?void 0:e.administrativeArea)||\"\",customFields:[]}}_getBraintreeDeviceData(){return xn(this,void 0,void 0,function*(){try{const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e}catch(e){}})}}function Nn(e){if(!function(e){return\"ApplePaySession\"in e}(e))throw new Error(\"Apple pay is not supported\")}class Dn{create(e){return Nn(window),new ApplePaySession(1,e)}}class Rn{constructor(e){this.scriptLoader=e,this.sdkVersion=\"1.latest\"}loadSdk(){return e=this,t=void 0,i=function*(){(function(e){return\"ApplePaySDK\"in e})(window)||(yield this.scriptLoader.loadScript(`https://applepay.cdn-apple.com/jsapi/${this.sdkVersion}/apple-pay-sdk.js`),Nn(window))},new((n=void 0)||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())});var e,t,n,i}}const zn=Xt(e=>{const{getHost:t}=e.getState(),n=new un(e);return new Mn((0,o.createRequestSender)({host:t()}),e,new Dn,new In(new An((0,d.vQ)(),window,n)),new Rn(new d.B2))},[{id:\"applepay\"}]);var Fn=n(8686);class Bn extends Dt{constructor(e){super(e||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}const jn={body:{},headers:{},status:0};class Ln extends Dt{constructor(e,{message:t,errors:n}={}){const{body:i,headers:r,status:o}=e||jn;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=r,this.status=o,this.errors=n||[]}}var Un,Vn,qn,Hn,Gn,Wn,$n;!function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(Un||(Un={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Vn||(Vn={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(qn||(qn={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(Hn||(Hn={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(Gn||(Gn={})),function(e){e.OXXO=\"oxxo\"}(Wn||(Wn={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}($n||($n={}));var Yn=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Kn{constructor(e,t,n,i){this.formPoster=e,this.paymentIntegrationService=t,this.bigCommercePaymentsRequestSender=n,this.bigCommercePaymentsScriptLoader=i}loadPayPalSdk(e,t,n,i){return Yn(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e);return this.paypalSdk=yield this.bigCommercePaymentsScriptLoader.getPayPalSDK(a,o,n,i),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new Qt;return this.paypalSdk}createBuyNowCartOrThrow(e){return Yn(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new Ft(Rt.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new Bn}})}createOrder(e,t){return Yn(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i}=yield this.bigCommercePaymentsRequestSender.createOrder(e,Object.assign({cartId:n},t));return i})}createOrderCardFields(e,t){return Yn(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i,setupToken:r}=yield this.bigCommercePaymentsRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:i},r?{setupToken:r}:{})})}updateOrder(e){return Yn(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow();let i;e||(i=t.getConsignmentsOrThrow()[0]);try{yield this.bigCommercePaymentsRequestSender.updateOrder({availableShippingOptions:e?[]:null==i?void 0:i.availableShippingOptions,cartId:n.id,selectedShippingOption:e?null:null==i?void 0:i.selectedShippingOption})}catch(e){throw new Ln}})}getOrderStatus(e,t){return Yn(this,void 0,void 0,function*(){try{const{status:n}=yield this.bigCommercePaymentsRequestSender.getOrderStatus(e,t);return n}catch(e){throw new Ln}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new Ft(Rt.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===ve.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return Yn(this,void 0,void 0,function*(){const i={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:i},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],i=n.find(e=>e.isRecommended),r=e?n.find(t=>t.id===e):n.find(e=>{var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)}),o=r||i||n[0];if(!o)throw new Error(\"Your order can't be shipped to this address\");return o}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:i,name:{full_name:r}}=n[0].shipping,[o,...a]=r.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:i.address_line_1,address2:i.address_line_2,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})}getValidButtonStyle(e){const{color:t,height:n,label:i,shape:r}=e||{},o={color:t&&Hn[t]?t:void 0,height:this.getValidHeight(n),label:i&&qn[i]?i:void 0,shape:r&&Gn[r]?r:void 0};return(0,P.omitBy)(o,P.isNil)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}const Qn=\"This API endpoint is for internal use only and may change in the future\";var Jn;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(Jn||(Jn={}));const Zn=Jn,Xn={\"X-Checkout-SDK-Version\":\"1.916.1\"};var ei=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ti{constructor(e){this.requestSender=e}createOrder(e,t){return ei(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn);return(yield this.requestSender.post(n,{headers:r,body:i})).body})}updateOrder(e){return ei(this,void 0,void 0,function*(){const t=e,n=Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn);return(yield this.requestSender.put(\"/api/storefront/initialization/bigcommerce_payments\",{headers:n,body:t})).body})}getOrderStatus(e=\"bigcommerce_payments\",t){return ei(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body})}}var ni=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ii{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,i){return ni(this,void 0,void 0,function*(){const r=this.getPayPalSdkScriptConfigOrThrow(e,t,n);return this.loadPayPalSDK(r,i)})}loadPayPalSDK(e,t=!1){return ni(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsPayPalSDK||t){const t=this.transformConfig(e.options),n=this.transformConfig(e.attributes),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(t).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:n})}if(!this.window.bigCommercePaymentsPayPalSDK)throw new Qt;return this.window.bigCommercePaymentsPayPalSDK})}getPayPalSdkScriptConfigOrThrow(e,t,n=!0){const{id:i,clientToken:r,initializationData:o}=e;if(!(null==o?void 0:o.clientId))throw new Ft(Rt.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:c,buyerCountry:d,attributionId:u,isVenmoEnabled:l,isHostedCheckoutEnabled:h,isPayPalCreditAvailable:p,isDeveloperModeApplicable:m,availableAlternativePaymentMethods:y=[],enabledAlternativePaymentMethods:f=[],isGooglePayEnabled:g}=o,v=h||n,_=\"bigcommerce_payments_creditcards\"===i,b=_?[\"card\"]:[],S=_?[]:[\"card\"],w=p?[\"credit\",\"paylater\"]:[],C=p?[]:[\"credit\",\"paylater\"],I=l?[\"venmo\"]:[],P=l?[]:[\"venmo\"],E=y.filter(e=>!f.includes(e)),O=g?[\"googlepay\"]:[],A=n?[\"card-fields\"]:[],T=this.filterFundingOptions([...S,...C,...P,...E]),k=this.filterFundingOptions([...b,...w,...I,...f]);return{options:Object.assign({\"client-id\":s,\"merchant-id\":c,\"enable-funding\":k.length>0?k:void 0,\"disable-funding\":T.length>0?T:void 0,commit:v,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...O,...A],currency:t,intent:a},m&&{\"buyer-country\":d}),attributes:{\"data-partner-attribution-id\":u,\"data-client-token\":r,\"data-namespace\":\"bigCommercePaymentsPayPalSDK\"}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}const ri=e=>{const{getHost:t}=e.getState();return new Kn((0,Fn.createFormPoster)(),e,new ti((0,o.createRequestSender)({host:t()})),new ii((0,d.vQ)()))},oi=40;var ai=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class si{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.onError=P.noop}initialize(e){return ai(this,void 0,void 0,function*(){const{bigcommerce_payments:t,methodId:n}=e;if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');if(!t.container)throw new en('Unable to initialize payment because \"options.bigcommerce_payments.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new en('Unable to initialize payment because \"options.bigcommerce_payments.onClick\" argument is not a function.');this.onError=t.onError||P.noop,this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return ai(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()})}signOut(e){return ai(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:i,onComplete:r}=t,o=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:s,paymentButtonStyles:c,isServerSideShippingCallbacksEnabled:d}=a.initializationData||{},{checkoutTopButtonStyles:u}=c||{},l=Object.assign({createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments\"),onApprove:({orderID:t})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(e,t)},i&&{onClick:()=>i()}),h=Object.assign(Object.assign({},!d&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(t,n)=>this.onHostedCheckoutApprove(t,n,e,r,d)}),p=Object.assign(Object.assign({fundingSource:o.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},u),{height:oi}))},l),s&&h),m=o.Buttons(p);m.isEligible()?m.render(`#${n}`):this.bigCommercePaymentsIntegrationService.removeElement(n)}onHostedCheckoutApprove(e,t,n,i,r){return ai(this,void 0,void 0,function*(){if(!e.orderID)throw new Ft(Rt.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!r){const e=yield t.order.get(),n=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}a&&(yield this.bigCommercePaymentsIntegrationService.updateOrder(r)),r&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i()}catch(e){this.handleError(e)}})}onShippingAddressChange(e){return ai(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}onShippingOptionsChange(e){return ai(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const ci=Xt(e=>new si(e,ri(e)),[{id:\"bigcommerce_payments\"}]);var di,ui,li,hi,pi,mi,yi,fi,gi,vi=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class _i{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n){return vi(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsFastlaneSdk){const i=this.getPayPalFastlaneSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.bigCommercePaymentsFastlaneSdk)throw new Qt}return this.window.bigCommercePaymentsFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i){return vi(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsGooglePay||i){const i=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.bigCommercePaymentsGooglePay)throw new Qt;return this.window.bigCommercePaymentsGooglePay})}getPayPalApmsSdk(e,t){return vi(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsApms){const n=this.getPayPalApmSdkConfiguration(e,t);if(yield this.loadPayPalSdk(n),!this.window.bigCommercePaymentsApms)throw new Qt}return this.window.bigCommercePaymentsApms})}getPayPalMessages(e,t){return vi(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsMessages){const n=this.getPayPalSdkMessagesConfiguration(e,t);yield this.loadPayPalSdk(n)}if(!this.window.bigCommercePaymentsMessages)throw new Qt;return this.window.bigCommercePaymentsMessages})}loadPayPalSdk({options:e,attributes:t}){return vi(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:i})})}getPayPalFastlaneSdkConfiguration(e,t,n){const{clientToken:i,initializationData:r}=e;if(!r||!r.clientId)throw new Ft(Rt.MissingPaymentMethod);const{intent:o,clientId:a,merchantId:s,attributionId:c}=r;return{options:{\"client-id\":a,\"merchant-id\":s,commit:!0,components:[\"fastlane\",\"three-domain-secure\"],currency:t,intent:o},attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"bigCommercePaymentsFastlaneSdk\",\"data-partner-attribution-id\":c,\"data-sdk-client-token\":i}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n=!0){const{clientToken:i,initializationData:r}=e;if(!r||!r.clientId)throw new Ft(Rt.MissingPaymentMethod);const{intent:o,clientId:a,merchantId:s,buyerCountry:c,attributionId:d,isHostedCheckoutEnabled:u,isDeveloperModeApplicable:l}=r,h=u||n;return{options:Object.assign({\"client-id\":a,\"merchant-id\":s,commit:h,components:[\"googlepay\"],currency:t,intent:o},l&&{\"buyer-country\":c}),attributes:{\"data-partner-attribution-id\":d,\"data-client-token\":i,\"data-namespace\":\"bigCommercePaymentsGooglePay\"}}}getPayPalApmSdkConfiguration(e,t){const{initializationData:n}=e;if(!n||!n.clientId)throw new Ft(Rt.MissingPaymentMethod);const{intent:i,clientId:r,merchantId:o,buyerCountry:a,attributionId:s,isDeveloperModeApplicable:c,availableAlternativePaymentMethods:d=[],enabledAlternativePaymentMethods:u=[]}=n,l=this.filterFundingOptions(u),h=this.filterFundingOptions(d.filter(e=>!u.includes(e)));return{options:Object.assign({\"client-id\":r,\"merchant-id\":o,\"enable-funding\":l.length>0?l:void 0,\"disable-funding\":h.length>0?h:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:i},c&&{\"buyer-country\":a}),attributes:{\"data-partner-attribution-id\":s,\"data-namespace\":\"bigCommercePaymentsApms\"}}}getPayPalSdkMessagesConfiguration(e,t){const{initializationData:n}=e;if(!n||!n.clientId)throw new Ft(Rt.MissingPaymentMethod);const{clientId:i,merchantId:r,attributionId:o,isDeveloperModeApplicable:a,buyerCountry:s}=n;return{options:Object.assign({\"client-id\":i,\"merchant-id\":r,components:[\"messages\"],currency:t},a&&{\"buyer-country\":s}),attributes:{\"data-namespace\":\"bigCommercePaymentsMessages\",\"data-partner-attribution-id\":o}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}function bi(){return new _i((0,d.Hb)())}!function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(di||(di={}));class Si{static get(e){const t=`${encodeURIComponent(`${e}`)}=`,n=document.cookie;let i=null;const r=n.indexOf(t);if(r>-1){let e=n.indexOf(\";\",r);-1===e&&(e=n.length),i=decodeURIComponent(n.substring(r+t.length,e))}return i}static set(e,t,n={secure:!0}){let i=`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;const{expires:r,path:o,domain:a,secure:s}=n;if(r)i+=`; expires=${r.toUTCString()}`;else{const e=new Date,t=60;e.setTime(e.getTime()+60*t*1e3),i+=`; expires=${e.toUTCString()}`}o&&(i+=`; path=${o}`),a&&(i+=`; domain=${a}`),s&&(i+=\"; secure\"),document.cookie=i}static remove(e,t){Si.set(e,\"\",Object.assign({expires:new Date(0)},t))}}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(ui||(ui={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(li||(li={})),function(e){e.Always=\"SCA_ALWAYS\"}(hi||(hi={})),function(e){e.Succeeded=\"succeeded\",e.Cancelled=\"cancelled\",e.Errored=\"errored\"}(pi||(pi={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(mi||(mi={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(yi||(yi={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(fi||(fi={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"canceled\",e.UNRECOGNIZED=\"unrecognized\"}(gi||(gi={}));var wi=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ci{constructor(){this.window=window}initializePayPalFastlane(e,t,n){return wi(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\"),window.localStorage.setItem(\"axoEnv\",\"sandbox\")),!this.window.bigCommercePaymentsFastlane){const t={root:{backgroundColorPrimary:\"transparent\"}};this.window.bigCommercePaymentsFastlane=yield e.Fastlane({styles:n||t})}return this.window.bigCommercePaymentsFastlane})}getPayPalFastlaneOrThrow(){if(!this.window.bigCommercePaymentsFastlane)throw new Qt;return this.window.bigCommercePaymentsFastlane}lookupCustomerOrThrow(e){return wi(this,void 0,void 0,function*(){return this.getPayPalFastlaneOrThrow().identity.lookupCustomerByEmail(e)})}triggerAuthenticationFlowOrThrow(e){return wi(this,void 0,void 0,function*(){return e?this.getPayPalFastlaneOrThrow().identity.triggerAuthenticationFlow(e):{}})}updateStorageSessionId(e){const t=new Date;t.setDate(t.getDate()+14);const n={expires:t,secure:!0};Si.set(\"bc-fastlane-sessionId\",e,n)}removeStorageSessionId(){Si.remove(\"bc-fastlane-sessionId\")}getStorageSessionId(){return Si.get(\"bc-fastlane-sessionId\")||\"\"}mapPayPalFastlaneProfileToBcCustomerData(e,t){var n,i,r;const{authenticationState:o,profileData:a}=t,s=null===(r=null===(i=null===(n=null==a?void 0:a.card)||void 0===n?void 0:n.paymentSource)||void 0===i?void 0:i.card)||void 0===r?void 0:r.billingAddress,c=null==a?void 0:a.shippingAddress,d=null==a?void 0:a.name,u=null==a?void 0:a.card,l=c?this.mapPayPalToBcAddress(c.address,c.name,c.phoneNumber):void 0,h=s&&d?this.mapPayPalToBcAddress(s,d,null==c?void 0:c.phoneNumber):void 0,p=u?this.mapPayPalToBcInstrument(e,u):[],m=this.filterAddresses([l,h]);return{authenticationState:o||gi.UNRECOGNIZED,addresses:m,billingAddress:h,shippingAddress:l,instruments:p}}mapPayPalToBcInstrument(e,t){const{id:n,paymentSource:i}=t,{brand:r,expiry:o,lastDigits:a}=i.card,[s,c]=o.split(\"-\");return[{bigpayToken:n,brand:r,defaultInstrument:!1,expiryMonth:c,expiryYear:s,iin:\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:di.PAN,type:\"card\"}]}mapBcToPayPalAddress(e){return{company:(null==e?void 0:e.company)||\"\",addressLine1:(null==e?void 0:e.address1)||\"\",addressLine2:(null==e?void 0:e.address2)||\"\",adminArea1:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",adminArea2:(null==e?void 0:e.city)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\"}}mapPayPalToBcAddress(e,t,n,i){const[r,o]=t.fullName.split(\" \"),a=(null==n?void 0:n.nationalNumber)||\"\",s=(null==n?void 0:n.countryCode)||\"\";return{id:Date.now(),type:\"paypal-address\",firstName:t.firstName||r||\"\",lastName:t.lastName||o||\"\",company:e.company||\"\",address1:e.addressLine1,address2:e.addressLine2||\"\",city:e.adminArea2,stateOrProvince:e.adminArea1,stateOrProvinceCode:e.adminArea1,country:e.countryCode||\"\",countryCode:e.countryCode||\"\",postalCode:e.postalCode,phone:s+a,customFields:i||[]}}filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this.isEqualAddresses(e,t))?e:[...e,t]:e,[])}isEqualAddresses(e,t){return(0,P.isEqual)(this.normalizeAddress(e),this.normalizeAddress(t))}normalizeAddress(e){return(0,P.omit)(e,[\"id\",\"phone\"])}}function Ii(){return new Ci}function Pi(e){return\"string\"!=typeof e}function Ei(e,t){if(t||e)return function(e){var t,n;const i={},r=(0,P.omitBy)(e.root,Pi),o=(0,P.omitBy)(e.input,Pi),a=(0,P.omitBy)(e.toggle,Pi),s=(0,P.omitBy)(null===(t=e.text)||void 0===t?void 0:t.body,Pi),c=(0,P.omitBy)(null===(n=e.text)||void 0===n?void 0:n.caption,Pi),d=e.branding;return Object.keys(r).length&&(i.root=r),Object.keys(o).length&&(i.input=o),Object.keys(a).length&&(i.toggle=a),Object.keys(s).length&&(i.text={},i.text.body=s),Object.keys(c).length&&(i.text=Object.assign({},i.text),i.text.caption=c),d&&(i.branding=d),i}(function(e,t){var n,i,r,o,a,s,c,d,u,l,h,p,m,y,f,g,v,_,b,S,w,C;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(y=null==t?void 0:t.toggle)||void 0===y?void 0:y.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(g=null===(f=null==t?void 0:t.text)||void 0===f?void 0:f.body)||void 0===g?void 0:g.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(_=null===(v=null==t?void 0:t.text)||void 0===v?void 0:v.body)||void 0===_?void 0:_.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(S=null===(b=null==t?void 0:t.text)||void 0===b?void 0:b.caption)||void 0===S?void 0:S.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(C=null===(w=null==t?void 0:t.text)||void 0===w?void 0:w.caption)||void 0===C?void 0:C.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}var Oi=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ai{constructor(e,t,n){this.paymentIntegrationService=e,this.bigCommercePaymentsSdk=t,this.bigCommercePaymentsFastlaneUtils=n}initialize(e){var t;return Oi(this,void 0,void 0,function*(){const{methodId:n,bigcommerce_payments_fastlane:i}=e;if(!n)throw new en('Unable to proceed because \"methodId\" argument is not provided.');try{yield this.paymentIntegrationService.loadPaymentMethod(n);const e=this.paymentIntegrationService.getState(),r=e.getCartOrThrow(),o=e.getPaymentMethodOrThrow(n),a=!!(null===(t=o.initializationData)||void 0===t?void 0:t.isDeveloperModeApplicable),s=yield this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(o,r.currency.code,r.id);yield this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(s,a,this.getFastlaneStyles(n,i))}catch(e){}return Promise.resolve()})}deinitialize(){return Oi(this,void 0,void 0,function*(){return Promise.resolve()})}signIn(e,t){return Oi(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t),yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:void 0,addresses:void 0,instruments:void 0}),this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId()})}signOut(e){return Oi(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){return Oi(this,void 0,void 0,function*(){const{checkoutPaymentMethodExecuted:t,continueWithCheckoutCallback:n,methodId:i}=e||{};if(!i)throw new en('Unable to proceed because \"methodId\" argument is not provided.');if(\"function\"!=typeof n)throw new en('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');if(this.paymentIntegrationService.getState().getCustomerOrThrow().isGuest){t&&\"function\"==typeof t&&t();try{yield this.runPayPalAuthenticationFlowOrThrow(i)}catch(e){}}n()})}runPayPalAuthenticationFlowOrThrow(e){return Oi(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow().id,i=t.getCustomer(),r=t.getBillingAddress(),o=(null==i?void 0:i.email)||(null==r?void 0:r.email)||\"\",{customerContextId:a}=yield this.bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow(a),c=s.authenticationState===gi.CANCELED;yield this.updateCustomerDataState(e,s),c?this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId():this.bigCommercePaymentsFastlaneUtils.updateStorageSessionId(n)})}updateCustomerDataState(e,t){var n;return Oi(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState().getCartOrThrow(),{authenticationState:r,addresses:o,billingAddress:a,shippingAddress:s,instruments:c}=this.bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,t);if(yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:r,addresses:o,instruments:c}),a&&(yield this.paymentIntegrationService.updateBillingAddress(a)),s&&i.lineItems.physicalItems.length>0){const t=yield this.paymentIntegrationService.updateShippingAddress(s),i=t.getPaymentMethodOrThrow(e),{isFastlaneShippingOptionAutoSelectEnabled:r}=i.initializationData||{},o=t.getConsignments()||[],a=(null===(n=o[0])||void 0===n?void 0:n.availableShippingOptions)||[],c=a[0],d=a.find(e=>e.isRecommended);if((d||c)&&r){const e=(null==d?void 0:d.id)||c.id;yield this.paymentIntegrationService.selectShippingOption(e)}}})}getFastlaneStyles(e,t){const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{fastlaneStyles:i,isFastlaneStylingEnabled:r}=n.initializationData||{};return Ei(r?i:{},null==t?void 0:t.styles)}}const Ti=Xt(e=>new Ai(e,bi(),Ii()),[{id:\"bigcommerce_payments_fastlane\"},{id:\"bigcommerce_payments_creditcards\"}]);var ki=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class xi{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.onError=P.noop}initialize(e){return ki(this,void 0,void 0,function*(){const{bigcommerce_payments_paylater:t,methodId:n}=e;if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');if(!t.container)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_paylater.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_paylater.onClick\" argument is not a function.');this.onError=t.onError||P.noop,this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC BigCommercePayments PayLater]: button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return ki(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return ki(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onComplete:i,onClick:r}=t,o=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:s,paymentButtonStyles:c}=a.initializationData||{},{checkoutTopButtonStyles:d}=c||{},u=Object.assign({createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onApprove:({orderID:t})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(e,t)},r&&{onClick:()=>r()}),l={onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e),onApprove:(t,n)=>this.onHostedCheckoutApprove(t,n,e,i)},h=[o.FUNDING.PAYLATER,o.FUNDING.CREDIT];let p=!1;h.forEach(e=>{if(!p){const t=Object.assign(Object.assign({fundingSource:e,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},d),{height:oi}))},u),s&&l),i=o.Buttons(t);i.isEligible()&&(i.render(`#${n}`),p=!0)}}),p||this.bigCommercePaymentsIntegrationService.removeElement(n)}onHostedCheckoutApprove(e,t,n,i){return ki(this,void 0,void 0,function*(){if(!e.orderID)throw new Ft(Rt.MissingOrderId);const r=this.paymentIntegrationService.getState().getCartOrThrow(),o=yield t.order.get();try{const t=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(o);if(yield this.paymentIntegrationService.updateBillingAddress(t),r.lineItems.physicalItems.length>0){const e=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(o);yield this.paymentIntegrationService.updateShippingAddress(e),yield this.bigCommercePaymentsIntegrationService.updateOrder()}yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i()}catch(e){this.handleError(e)}})}onShippingAddressChange(e){return ki(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}onShippingOptionsChange(e){return ki(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const Mi=Xt(e=>new xi(e,ri(e)),[{id:\"bigcommerce_payments_paylater\"}]);var Ni=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Di{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return Ni(this,void 0,void 0,function*(){const{bigcommerce_payments_venmo:t,methodId:n}=e;if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');if(!t.container)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_venmo.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_venmo.onClick\" argument is not a function.');this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC Payments Venmo]: Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Ni(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Ni(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:i}=t,r=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:a}=o.initializationData||{},{checkoutTopButtonStyles:s}=a||{},c=Object.assign({fundingSource:r.FUNDING.VENMO,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},s),{height:oi})),createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmo\"),onApprove:({orderID:t})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(e,t)},i&&{onClick:()=>i()}),d=r.Buttons(c);d.isEligible()?d.render(`#${n}`):this.bigCommercePaymentsIntegrationService.removeElement(n)}}const Ri=Xt(e=>new Di(e,ri(e)),[{id:\"bigcommerce_payments_venmo\"}]);var zi=n(906);class Fi extends Dt{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}class Bi extends Ln{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}var ji,Li,Ui,Vi=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class qi{constructor(e,t){this.paymentIntegrationService=e,this.boltScriptLoader=t,this.boltHostWindow=window}initialize(e){var t;return Vi(this,void 0,void 0,function*(){const{methodId:n,bolt:i}=e,{onInit:r}=i||{};if(!n)throw new en('Unable to proceed because \"methodId\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n);if(!(null===(t=o.initializationData)||void 0===t?void 0:t.publishableKey))throw new Ft(Rt.MissingPaymentMethod);const{developerConfig:a,publishableKey:s}=o.initializationData;if(yield this.boltScriptLoader.loadBoltClient(s,o.config.testMode,a),r&&\"function\"==typeof r){const e=this.getCustomerEmail();r(yield this.hasBoltAccount(e),e)}})}deinitialize(){return Promise.resolve()}signIn(e,t){return Vi(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()})}signOut(e){return Vi(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){return Vi(this,void 0,void 0,function*(){const{continueWithCheckoutCallback:t=zi.l,checkoutPaymentMethodExecuted:n,methodId:i}=e||{},r=this.getCustomerEmail();if(!i)throw new en('Unable to proceed because \"methodId\" argument is not provided.');if(\"function\"!=typeof t)throw new en('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');if(r)return this.openBoltCheckoutModalOrThrow(r,i,t,n);t()})}openBoltCheckoutModalOrThrow(e,t,n,i){var r;return Vi(this,void 0,void 0,function*(){const o=this.getBoltClientOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethod(t);try{if(null===(r=null==a?void 0:a.initializationData)||void 0===r?void 0:r.embeddedOneClickEnabled){const t=yield this.hasBoltAccount(e);if(t){const t={close:()=>{n()}};yield o.openCheckout(e,t)}else n();\"function\"==typeof i&&i({hasBoltAccount:t})}else n()}catch(e){if(function(e){return\"string\"==typeof e.message&&\"string\"==typeof e.type&&(\"string\"==typeof e.subtype||!e.subtype)&&e instanceof Error}(e)&&\"MissingDataError\"!==e.name&&\"NotInitializedError\"!==e.name)throw new Fi(e.message);throw e}})}getBoltClientOrThrow(){const e=this.boltHostWindow.BoltCheckout;if(!e)throw new Lt(zt.PaymentNotInitialized);return e}hasBoltAccount(e){return Vi(this,void 0,void 0,function*(){const t=this.getBoltClientOrThrow();try{return yield t.hasBoltAccount(e)}catch(e){throw new Bi}})}getCustomerEmail(){const e=this.paymentIntegrationService.getState(),t=e.getCustomer(),n=e.getBillingAddress();return(null==t?void 0:t.email)||(null==n?void 0:n.email)||\"\"}}!function(e){e.SandboxMode=\"bolt_sandbox\",e.StagingMode=\"bolt_staging\",e.DevelopmentMode=\"bolt_development\"}(ji||(ji={})),function(e){e.Small=\"small\",e.Medium=\"medium\",e.Large=\"large\"}(Li||(Li={})),function(e){e.Pill=\"pill\",e.Rect=\"rect\"}(Ui||(Ui={}));var Hi=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Gi{constructor(e,t=window){this.scriptLoader=e,this.boltHostWindow=t}loadBoltClient(e,t,n,i,r){return Hi(this,void 0,void 0,function*(){if(this.boltHostWindow.BoltCheckout)return this.boltHostWindow.BoltCheckout;if(!e)throw new en('Unable to initialize payment because \"publishableKey\" argument is not provided.');if(yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!t,n)}/connect-bigcommerce.js`,this.getScriptOptions(\"bolt-connect\",e,i,r)),yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!t,n)}/track.js`,this.getScriptOptions(\"bolt-track\",e)),!this.boltHostWindow.BoltCheckout)throw new Qt;return this.boltHostWindow.BoltCheckout})}loadBoltEmbedded(e,t,n){return Hi(this,void 0,void 0,function*(){if(yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!t,n)}/embed.js`,{async:!0,attributes:{id:\"bolt-embedded\"}}),!this.boltHostWindow.Bolt)throw new Qt;return this.boltHostWindow.Bolt(e)})}getDomainURL(e,t){if(!e)return\"connect.bolt.com\";if(t)switch(t.developerMode){case ji.StagingMode:return\"connect-staging.bolt.com\";case ji.DevelopmentMode:return`connect.${t.developerDomain}`}return\"connect-sandbox.bolt.com\"}getScriptOptions(e,t,n,i){return{async:!0,attributes:Object.assign(Object.assign({id:e,\"data-publishable-key\":t},n&&{\"data-shopping-cart-id\":n}),i&&{\"data-storefront-api-token\":i})}}}const Wi=Xt(e=>new qi(e,new Gi((0,d.vQ)())),[{id:\"bolt\"}]);var $i=n(6472);class Yi extends en{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class Ki extends Dt{constructor(e,t){super(t||\"Unable to proceed because the payment form contains invalid data.\"),this.details=e,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}let Qi=null;const Ji=[\"buttons\",\"messages\"];var Zi,Xi,er,tr,nr,ir;!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(Zi||(Zi={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(Xi||(Xi={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(er||(er={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(tr||(tr={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(nr||(nr={})),function(e){e.CART=\"cart\",e.HOME=\"homepage\",e.PAYMENT=\"payment\",e.PRODUCT=\"product\"}(ir||(ir={}));var rr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class or{constructor(e,t,n){this.braintreeScriptLoader=e,this.braintreeHostWindow=t,this.overlay=n,this.dataCollectors={}}initialize(e,t){this.clientToken=e,this.threeDSecureOptions=t}getBraintreeFastlane(e,t,n){return rr(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"axoEnv\",\"sandbox\"),window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\")),!this.braintreeHostWindow.braintreeFastlane){const t=this.getClientTokenOrThrow(),i=yield this.getClient(),r=yield this.getSessionId(e),o=yield this.braintreeScriptLoader.loadFastlane(),a={root:{backgroundColorPrimary:\"transparent\"}};this.braintreeHostWindow.braintreeFastlane=yield o.create({authorization:t,client:i,deviceData:r,styles:n||a})}return this.braintreeHostWindow.braintreeFastlane})}getClient(){return rr(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=t.create({authorization:e})}return this.client})}getPaypal(){return this.braintreePaypal||(this.braintreePaypal=Promise.all([this.getClient(),this.braintreeScriptLoader.loadPaypal()]).then(([e,t])=>t.create({client:e}))),this.braintreePaypal}paypal(e){var{shouldSaveInstrument:t}=e,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"shouldSaveInstrument\"]);const i=(0,$i.Jt)();return this.getPaypal().then(e=>{var r;return i&&(null===(r=this.overlay)||void 0===r||r.show({onClick:()=>e.focusWindow()})),e.tokenize(Object.assign({enableShippingAddress:!0,flow:t?\"vault\":\"checkout\",useraction:\"commit\"},n))}).then(e=>{var t;return null===(t=this.overlay)||void 0===t||t.remove(),e}).catch(e=>{var t;throw null===(t=this.overlay)||void 0===t||t.remove(),e})}getPaypalCheckout(e,t,n){return rr(this,void 0,void 0,function*(){const i=yield this.getClient(),r=yield this.braintreeScriptLoader.loadPaypalCheckout(),o={client:i};return this.paypalCheckout=yield r.create(o,(i,r)=>{var o;if(i)return n(i);const a=Object.assign(Object.assign({currency:e.currency},e.isCreditEnabled&&{\"enable-funding\":\"paylater\"}),{components:Ji.toString(),intent:e.intent,commit:null===(o=e.commit)||void 0===o||o});this.braintreeHostWindow.paypal?t(r):function(e,t){return Qi||(Qi=new Promise((n,i)=>{e.loadPayPalSDK(t,t=>{t?(Qi=null,i(t)):n(e)})})),Qi}(r,a).then(()=>t(r))}),this.paypalCheckout})}getDataCollector(e){return rr(this,void 0,void 0,function*(){const t=(null==e?void 0:e.paypal)?\"paypal\":\"default\";let n=this.dataCollectors[t];if(!n){try{const t=yield this.getClient(),i=yield this.braintreeScriptLoader.loadDataCollector(),r=Object.assign({client:t,kount:!0},e);n=yield i.create(r)}catch(e){if(!_n(e)||\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"!==e.code)throw e;n={deviceData:void 0,teardown:()=>Promise.resolve()}}this.dataCollectors[t]=n}return n})}getBraintreeEnv(e=!1){return e?bn.Sandbox:bn.Production}mapToBraintreeShippingAddressOverride(e){return{recipientName:`${e.firstName} ${e.lastName}`,line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,postalCode:e.postalCode,countryCode:e.countryCode,phone:e.phone}}mapToLegacyShippingAddress(e){const{email:t,phone:n,shippingAddress:i}=e,r=(null==i?void 0:i.recipientName)||\"\",[o,a]=r.split(\" \");return{email:t,first_name:o||\"\",last_name:a||\"\",phone_number:n,address_line_1:null==i?void 0:i.line1,address_line_2:null==i?void 0:i.line2,city:null==i?void 0:i.city,state:null==i?void 0:i.state,country_code:null==i?void 0:i.countryCode,postal_code:null==i?void 0:i.postalCode}}mapToLegacyBillingAddress(e){const{billingAddress:t,email:n,firstName:i,lastName:r,phone:o,shippingAddress:a}=e,s=t||a;return{email:n,first_name:i,last_name:r,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}removeElement(e){const t=e&&document.getElementById(e);t&&t.remove()}getSessionId(e){return rr(this,void 0,void 0,function*(){const{deviceData:t}=yield this.getDataCollector({riskCorrelationId:e});return t})}teardown(){return rr(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollectors.default),yield this.teardownModule(this.dataCollectors.paypal),this.dataCollectors={},yield this.teardownModule(this.paypalCheckout),this.paypalCheckout=void 0})}get3DS(){return rr(this,void 0,void 0,function*(){return this.threeDS||(this.threeDS=Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]).then(([e,t])=>t.create({client:e,version:2}))),this.threeDS})}getVenmoCheckout(e){return rr(this,void 0,void 0,function*(){if(!this.venmoCheckout){const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadVenmoCheckout(),i=Object.assign({client:t,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},e||{});this.venmoCheckout=yield new Promise((e,t)=>{n.create(i,(n,i)=>n?t(n):i.isBrowserSupported()?void e(i):t(new ln))})}return this.venmoCheckout})}verifyCard(e,t,n){return rr(this,void 0,void 0,function*(){const i=yield this.tokenizeCard(e,t);return this.challenge3DSVerification(i,n)})}tokenizeCard(e,t){return rr(this,void 0,void 0,function*(){const{paymentData:n}=e;if(!function(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;return\"object\"==typeof t.ccExpiry&&null!==t.ccExpiry&&\"string\"==typeof t.ccNumber&&\"string\"==typeof t.ccName}(n))throw new Yi([\"payment.paymentData\"]);const i=this.getErrorsRequiredFields(n);if(!(0,P.isEmpty)(i))throw new Ki(i);const r=this.mapToCreditCard(n,t),o=yield this.getClient(),{creditCards:a}=yield o.request(r);return{nonce:a[0].nonce,bin:a[0].details.bin}})}challenge3DSVerification(e,t){return rr(this,void 0,void 0,function*(){const n=yield this.get3DS();return this.present3DSChallenge(n,t,e)})}teardownModule(e){return e?e.teardown():Promise.resolve()}getClientTokenOrThrow(){if(!this.clientToken)throw new Lt(zt.PaymentNotInitialized);return this.clientToken}getErrorsRequiredFields(e){const{ccNumber:t,ccExpiry:n}=e,i={};return t||(i.ccNumber=[{message:\"Credit card number is required\",type:\"required\"}]),n||(i.ccExpiry=[{message:\"Expiration date is required\",type:\"required\"}]),i}mapToCreditCard(e,t){return{data:{creditCard:{cardholderName:e.ccName,number:e.ccNumber,cvv:e.ccCvv,expirationDate:`${e.ccExpiry.month}/${e.ccExpiry.year}`,options:{validate:!1},billingAddress:t&&{countryCodeAlpha2:t.countryCode,locality:t.city,countryName:t.country,postalCode:t.postalCode,streetAddress:t.address2?`${t.address1} ${t.address2}`:t.address1}}},endpoint:\"payment_methods/credit_cards\",method:\"post\"}}present3DSChallenge(e,t,n){const{nonce:i,bin:r}=n;if(!this.threeDSecureOptions||!i)throw new Lt(zt.PaymentNotInitialized);const{addFrame:o,removeFrame:a,challengeRequested:s=!0,additionalInformation:c}=this.threeDSecureOptions,d=()=>rr(this,void 0,void 0,function*(){const t=yield e.cancelVerifyCard();return l.cancel(new Tn),t}),u=t.toFixed(2),l=new dt(e.verifyCard({addFrame:(e,t)=>{o&&o(e,t,d)},amount:Number(u),bin:r,challengeRequested:s,nonce:i,removeFrame:a,onLookupComplete:(e,t)=>{t()},collectDeviceData:!0,additionalInformation:c}));return l.promise}}var ar=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class sr{constructor(e,t,n,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=n,this.braintreeHostWindow=i}initialize(e){return ar(this,void 0,void 0,function*(){const{braintreepaypal:t,methodId:n}=e,{container:i,onError:r}=t||{};if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.');if(!i)throw new en('Unable to initialize payment because \"options.braintreepaypal.container\" argument is not provided.');let o,a=this.paymentIntegrationService.getState();try{if(o=a.getPaymentMethodOrThrow(n),!o.clientToken)throw new Ft(Rt.MissingPaymentToken)}catch(e){a=yield this.paymentIntegrationService.loadPaymentMethod(n),o=a.getPaymentMethodOrThrow(n)}const{clientToken:s,config:c,initializationData:d}=o,{paymentButtonStyles:u}=d||{},{checkoutTopButtonStyles:l}=u||{};if(!s||!d)throw new Ft(Rt.MissingPaymentMethod);const h={currency:a.getCartOrThrow().currency.code,intent:d.intent,isCreditEnabled:d.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(h,e=>{this.renderPayPalButton(e,t,n,Boolean(c.testMode),l)},e=>this.handleError(e,i,r))})}deinitialize(){return ar(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}signIn(e,t){return ar(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return ar(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderPayPalButton(e,t,n,i,r){const{container:o,onClick:a=P.noop}=t,{paypal:s}=this.braintreeHostWindow,c=null==s?void 0:s.FUNDING.PAYPAL;if(s&&c){const d=s.Buttons({env:this.braintreeIntegrationService.getBraintreeEnv(i),fundingSource:c,style:Object.assign(Object.assign({},r),{height:oi}),createOrder:()=>this.setupPayment(e,t,n),onApprove:i=>this.tokenizePayment(i,e,n,t),onClick:a});d.isEligible()&&d.render(`#${o}`)}else this.braintreeIntegrationService.removeElement(o)}setupPayment(e,t,n){var i;return ar(this,void 0,void 0,function*(){try{yield this.paymentIntegrationService.loadDefaultCheckout();const t=this.paymentIntegrationService.getState(),r=t.getCheckoutOrThrow().outstandingBalance,o=t.getCartOrThrow().currency.code,a=t.getCustomer(),s=t.getPaymentMethodOrThrow(n),c=null==a?void 0:a.addresses[0],d=c?this.braintreeIntegrationService.mapToBraintreeShippingAddressOverride(c):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:d,amount:r,currency:o,offerCredit:!1,intent:null===(i=s.initializationData)||void 0===i?void 0:i.intent})}catch(e){const{container:n,onError:i}=t;this.handleError(e,n,i)}})}tokenizePayment(e,t,n,i){return ar(this,void 0,void 0,function*(){try{const{deviceData:i}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),r=yield t.tokenizePayment(e),{details:o,nonce:a}=r,s=this.braintreeIntegrationService.mapToLegacyBillingAddress(o),c=this.braintreeIntegrationService.mapToLegacyShippingAddress(o);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:n,action:\"set_external_checkout\",nonce:a,device_data:i,billing_address:JSON.stringify(s),shipping_address:JSON.stringify(c)}),r}catch(e){const{container:t,onError:n}=i;this.handleError(e,t,n)}})}handleError(e,t,n){if(this.braintreeIntegrationService.removeElement(t),!n||!_n(e))throw e;n(e)}}const cr=Xt(e=>{const t=window,n=new un(e),i=new or(new An((0,d.vQ)(),t,n),t);return new sr(e,(0,Fn.createFormPoster)(),i,t)},[{id:\"braintreepaypal\"}]);var dr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ur{constructor(e,t,n,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=n,this.braintreeHostWindow=i}initialize(e){return dr(this,void 0,void 0,function*(){const{braintreepaypalcredit:t,methodId:n}=e,{container:i,onError:r}=t||{};if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.');if(!i)throw new en('Unable to initialize payment because \"options.braintreepaypalcredit.container\" argument is not provided.');let o,a=this.paymentIntegrationService.getState();try{if(o=a.getPaymentMethodOrThrow(n),!o.clientToken)throw new Ft(Rt.MissingPaymentToken)}catch(e){a=yield this.paymentIntegrationService.loadPaymentMethod(n),o=a.getPaymentMethodOrThrow(n)}const{clientToken:s,config:c,initializationData:d}=o,{paymentButtonStyles:u}=d||{},{checkoutTopButtonStyles:l}=u||{};if(!s||!d)throw new Ft(Rt.MissingPaymentMethod);const h={currency:a.getCartOrThrow().currency.code,intent:d.intent,isCreditEnabled:d.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(h,e=>{this.renderPayPalButton(e,t,n,Boolean(c.testMode),Object.assign(Object.assign({},l),{height:oi}))},e=>this.handleError(e,i,r))})}deinitialize(){return dr(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}signIn(e,t){return dr(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return dr(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderPayPalButton(e,t,n,i,r){const{container:o,onClick:a=P.noop}=t,{paypal:s}=this.braintreeHostWindow;let c=!1;s&&[s.FUNDING.PAYLATER,s.FUNDING.CREDIT].forEach(d=>{if(!c){const u=s.Buttons({env:i?\"sandbox\":\"production\",fundingSource:d,style:r,createOrder:()=>this.setupPayment(e,t,n),onApprove:i=>this.tokenizePayment(i,e,n,t),onClick:a});u.isEligible()&&(u.render(`#${o}`),c=!0)}}),s&&c||this.braintreeIntegrationService.removeElement(o)}setupPayment(e,t,n){var i;return dr(this,void 0,void 0,function*(){try{yield this.paymentIntegrationService.loadDefaultCheckout();const t=this.paymentIntegrationService.getState(),r=t.getCheckoutOrThrow().outstandingBalance,o=t.getCartOrThrow().currency.code,a=t.getCustomer(),s=t.getPaymentMethodOrThrow(n),c=null==a?void 0:a.addresses[0],d=c?this.braintreeIntegrationService.mapToBraintreeShippingAddressOverride(c):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:d,amount:r,currency:o,offerCredit:!0,intent:null===(i=s.initializationData)||void 0===i?void 0:i.intent})}catch(e){const{container:n,onError:i}=t;this.handleError(e,n,i)}})}tokenizePayment(e,t,n,i){return dr(this,void 0,void 0,function*(){try{const{deviceData:i}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),r=yield t.tokenizePayment(e),{details:o,nonce:a}=r,s=this.braintreeIntegrationService.mapToLegacyBillingAddress(o),c=this.braintreeIntegrationService.mapToLegacyShippingAddress(o);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:n,action:\"set_external_checkout\",nonce:a,device_data:i,billing_address:JSON.stringify(s),shipping_address:JSON.stringify(c)}),r}catch(e){const{container:t,onError:n}=i;this.handleError(e,t,n)}})}handleError(e,t,n){if(this.braintreeIntegrationService.removeElement(t),!n||!_n(e))throw e;n(e)}}const lr=Xt(e=>{const t=window,n=new un(e),i=new or(new An((0,d.vQ)(),t,n),t);return new ur(e,(0,Fn.createFormPoster)(),i,t)},[{id:\"braintreepaypalcredit\"}]);function hr(e){return\"string\"!=typeof e}function pr(e,t){if(t||e)return function(e){var t,n;const i={},r=(0,P.omitBy)(e.root,hr),o=(0,P.omitBy)(e.input,hr),a=(0,P.omitBy)(e.toggle,hr),s=(0,P.omitBy)(null===(t=e.text)||void 0===t?void 0:t.body,hr),c=(0,P.omitBy)(null===(n=e.text)||void 0===n?void 0:n.caption,hr),d=e.branding;return Object.keys(r).length&&(i.root=r),Object.keys(o).length&&(i.input=o),Object.keys(a).length&&(i.toggle=a),Object.keys(s).length&&(i.text={},i.text.body=s),Object.keys(c).length&&(i.text=Object.assign({},i.text),i.text.caption=c),d&&(i.branding=d),i}(function(e,t){var n,i,r,o,a,s,c,d,u,l,h,p,m,y,f,g,v,_,b,S,w,C;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(y=null==t?void 0:t.toggle)||void 0===y?void 0:y.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(g=null===(f=null==t?void 0:t.text)||void 0===f?void 0:f.body)||void 0===g?void 0:g.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(_=null===(v=null==t?void 0:t.text)||void 0===v?void 0:v.body)||void 0===_?void 0:_.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(S=null===(b=null==t?void 0:t.text)||void 0===b?void 0:b.caption)||void 0===S?void 0:S.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(C=null===(w=null==t?void 0:t.text)||void 0===w?void 0:w.caption)||void 0===C?void 0:C.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}var mr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class yr{constructor(e,t){this.paymentIntegrationService=e,this.braintreeFastlaneUtils=t,this.isAcceleratedCheckoutEnabled=!1}initialize({methodId:e,braintreefastlane:t}){var n;return mr(this,void 0,void 0,function*(){if(!e)throw new en('Unable to proceed because \"methodId\" argument is not provided.');const i=yield this.getValidPaymentMethodOrThrow(e),{isAcceleratedCheckoutEnabled:r,isFastlaneStylingEnabled:o}=i.initializationData||{},a=o?null===(n=i.initializationData)||void 0===n?void 0:n.fastlaneStyles:void 0;this.isAcceleratedCheckoutEnabled=!!r;try{if(this.isAcceleratedCheckoutEnabled){const e=pr(a,null==t?void 0:t.styles);yield this.braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow(i.id,e)}}catch(e){}return Promise.resolve()})}deinitialize(){return mr(this,void 0,void 0,function*(){return Promise.resolve()})}signIn(e,t){return mr(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return mr(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){return mr(this,void 0,void 0,function*(){const{checkoutPaymentMethodExecuted:t,continueWithCheckoutCallback:n}=e||{};if(\"function\"!=typeof n)throw new en('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');const i=this.paymentIntegrationService.getState().getCustomerOrThrow();if(this.isAcceleratedCheckoutEnabled&&i.isGuest){const e=yield this.shouldRunAuthenticationFlow();t&&\"function\"==typeof t&&t(),e&&(yield this.braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow(void 0,!0))}n()})}shouldRunAuthenticationFlow(){var e;return mr(this,void 0,void 0,function*(){const t=\"braintreeacceleratedcheckout\";try{yield this.paymentIntegrationService.loadPaymentMethod(t);const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t);return(null===(e=n.initializationData)||void 0===e?void 0:e.shouldRunAcceleratedCheckout)||!1}catch(e){return!1}})}getValidPaymentMethodOrThrow(e){return mr(this,void 0,void 0,function*(){let t=e;try{yield this.paymentIntegrationService.loadPaymentMethod(t)}catch(n){t=\"braintree\"===e?\"braintreeacceleratedcheckout\":\"braintree\",yield this.paymentIntegrationService.loadPaymentMethod(t)}return this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t)})}}var fr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class gr{constructor(e,t){this.paymentIntegrationService=e,this.braintreeIntegrationService=t}getDeviceSessionId(){return fr(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getCart();return this.braintreeIntegrationService.getSessionId(null==e?void 0:e.id)})}initializeBraintreeFastlaneOrThrow(e,t){return fr(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getCart(),{clientToken:r,config:o}=n.getPaymentMethodOrThrow(e);if(!r)throw new Ft(Rt.MissingPaymentMethod);this.methodId=e,this.braintreeIntegrationService.initialize(r),this.braintreeFastlane=yield this.braintreeIntegrationService.getBraintreeFastlane(null==i?void 0:i.id,o.testMode,t)})}getBraintreeFastlaneOrThrow(){if(!this.braintreeFastlane)throw new Qt;return this.braintreeFastlane}getBraintreeFastlaneComponentOrThrow(){return this.getBraintreeFastlaneOrThrow().FastlaneCardComponent}runPayPalAuthenticationFlowOrThrow(e,t){var n;return fr(this,void 0,void 0,function*(){try{const i=this.getMethodIdOrThrow(),r=this.getBraintreeFastlaneOrThrow(),{lookupCustomerByEmail:o,triggerAuthenticationFlow:a}=r.identity,s=this.paymentIntegrationService.getState(),c=s.getCartOrThrow(),d=s.getCustomer(),u=s.getBillingAddress(),{isFastlaneShippingOptionAutoSelectEnabled:l}=s.getPaymentMethodOrThrow(i).initializationData||{},h=e||(null==d?void 0:d.email)||(null==u?void 0:u.email)||\"\",{customerContextId:p}=yield o(h);if(!p)return yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:yn.UNRECOGNIZED,addresses:[],instruments:[]}),void this.saveSessionIdToCookies(c.id);const{authenticationState:m,profileData:y}=yield a(p),f=(null===(n=null==y?void 0:y.shippingAddress)||void 0===n?void 0:n.phoneNumber)||\"\";if(m===yn.CANCELED)return yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:m,addresses:[],instruments:[]}),void this.removeSessionIdFromCookies();const g=this.mapPayPalToBcAddress([y.shippingAddress],[f])||[],v=this.getPayPalBillingAddresses(y),_=v?this.mapPayPalToBcAddress([v],[f]):[],b=y.card?this.mapPayPalToBcInstrument(i,[y.card]):[],S=this.mergeShippingAndBillingAddresses(g,_);if(this.saveSessionIdToCookies(c.id),yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:m,addresses:S,instruments:b}),_.length>0&&c.lineItems.physicalItems.length>0&&(yield this.paymentIntegrationService.updateBillingAddress(_[0])),_.length>0&&c.lineItems.digitalItems.length>0&&0===c.lineItems.physicalItems.length){const{firstName:e,lastName:t}=S[0],n=Object.assign(Object.assign({},_[0]),{firstName:e,lastName:t});yield this.paymentIntegrationService.updateBillingAddress(n)}g.length>0&&c.lineItems.physicalItems.length>0&&(yield this.paymentIntegrationService.updateShippingAddress(g[0]),t&&l&&(yield this.setShippingOption()))}catch(e){}})}getSessionIdFromCookies(){return Si.get(\"bc-fastlane-sessionId\")||\"\"}saveSessionIdToCookies(e){const t=new Date;t.setDate(t.getDate()+14),Si.set(\"bc-fastlane-sessionId\",e,{expires:t,secure:!0})}removeSessionIdFromCookies(){Si.remove(\"bc-fastlane-sessionId\")}mapPayPalToBcInstrument(e,t){if(t)return t.map(t=>{const{id:n,paymentSource:i}=t,{brand:r,expiry:o,lastDigits:a,binDetails:s}=i.card,[c,d]=o.split(\"-\");return{bigpayToken:n,brand:r,defaultInstrument:!1,expiryMonth:d,expiryYear:c,iin:(null==s?void 0:s.bin)||\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,type:\"card\",untrustedShippingCardVerificationMode:di.PAN}})}mapPayPalToBcAddress(e,t){if(!e)return[];const n=this.paymentIntegrationService.getState().getCountries()||[],i=e=>{const t=n.find(t=>t.code===e);return(null==t?void 0:t.name)||\"\"};return e.map(e=>({id:Date.now(),type:\"paypal-address\",firstName:e.firstName||\"\",lastName:e.lastName||\"\",company:e.company||\"\",address1:e.streetAddress,address2:e.extendedAddress||\"\",city:e.locality,stateOrProvince:e.region,stateOrProvinceCode:e.region,country:i(e.countryCodeAlpha2),countryCode:e.countryCodeAlpha2,postalCode:e.postalCode,phone:t&&t[0]||\"\",customFields:[]}))}getPayPalBillingAddresses(e){const{card:t,name:n}=e||{};if(!t)return;const{firstName:i,lastName:r}=t.paymentSource.card.billingAddress,{firstName:o,lastName:a}=n||{},{shippingAddress:s}=e||{},c=Object.assign(Object.assign({},t.paymentSource.card.billingAddress),{firstName:i||o,lastName:r||a});return s&&(0,P.isEqual)(this.normalizeAddress(c),this.normalizeAddress(s))?s:c}normalizeAddress(e){return(0,P.omit)(e,[\"id\"])}mergeShippingAndBillingAddresses(e,t){const n=t.filter(t=>!e.some(e=>(0,P.isEqual)(this.normalizeAddress(e),this.normalizeAddress(t))));return[...e,...n]}getMethodIdOrThrow(){if(!this.methodId)throw new en('Unable to proceed because \"methodId\" argument is not provided.');return this.methodId}setShippingOption(){var e;return fr(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getConsignments()||[],n=(null===(e=t[0])||void 0===e?void 0:e.availableShippingOptions)||[],i=n.find(e=>e.isRecommended);if(i||n.length){const e=i||n[0];yield this.paymentIntegrationService.selectShippingOption(e.id)}})}}const vr=Xt(e=>{const t=window,n=new un(e),i=new or(new An((0,d.vQ)(),t,n),t),r=new gr(e,i);return new yr(e,r)},[{id:\"braintreeacceleratedcheckout\"},{id:\"braintree\"}]);var _r=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class br{constructor(e,t,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=n,this.buttonClassName=\"visa-checkout-wrapper\",this.onError=P.noop}initialize(e){return _r(this,void 0,void 0,function*(){const{braintreevisacheckout:t,methodId:n}=e;if(!n)throw new en('Unable to proceed because \"methodId\" argument is not provided.');if(!t)throw new en('Unable to proceed because \"options.braintreevisacheckout\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const i=this.paymentIntegrationService.getState(),r=i.getCheckoutOrThrow(),{clientToken:o,config:a}=i.getPaymentMethodOrThrow(n),s=i.getStoreConfigOrThrow();if(!o)throw new Ft(Rt.MissingPaymentMethod);this.braintreeSdk.initialize(o);const c=yield this.braintreeSdk.getBraintreeVisaCheckout(),d=yield this.braintreeSdk.getVisaCheckoutSdk(a.testMode),{container:u,onError:l}=t;this.onError=l||P.noop;const h=c.createInitOptions({paymentRequest:{currencyCode:s.currency.code,subtotal:String(r.subtotal)},settings:{locale:s.storeProfile.storeLanguage,shipping:{collectShipping:!0}}}),p=this.createSignInButton(u,this.buttonClassName);yield d.init(h),d.on(\"payment.success\",e=>this.tokenizePayment(c,e).then(()=>this.paymentIntegrationService.loadCheckout()).catch(e=>this.handleError(e))),d.on(\"payment.error\",(e,t)=>this.handleError(t)),p.style.visibility=\"visible\"})}deinitialize(){return _r(this,void 0,void 0,function*(){yield this.braintreeSdk.deinitialize()})}signIn(){throw new tn('In order to sign in via VisaCheckout, the shopper must click on \"Visa Checkout\" button.')}signOut(e){return _r(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}tokenizePayment(e,t){return _r(this,void 0,void 0,function*(){return Promise.all([e.tokenize(t),this.braintreeSdk.getDataCollectorOrThrow()]).then(([e,t])=>{const n=this.paymentIntegrationService.getState(),i=n.getShippingAddress(),r=n.getBillingAddress(),{shippingAddress:o=this.mapToVisaCheckoutAddress(i),billingAddress:a=this.mapToVisaCheckoutAddress(r)}=e;return this.postForm(Object.assign(Object.assign({},e),{shippingAddress:o,billingAddress:a}),t)})})}postForm(e,t){const{userData:n,billingAddress:i,shippingAddress:r,details:o}=e,{userEmail:a}=n,{deviceData:s}=t;return this.formPoster.postForm(\"/checkout.php\",{payment_type:e.type,nonce:e.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,i)),shipping_address:JSON.stringify(this.getAddress(a,r))})}mapToVisaCheckoutAddress(e){return e?{firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phone,streetAddress:e.address1,extendedAddress:e.address2,locality:e.city,region:e.stateOrProvinceCode,countryCode:e.countryCode,postalCode:e.postalCode}:{}}getAddress(e,t={}){return{email:e,first_name:t.firstName,last_name:t.lastName,phone_number:t.phoneNumber,address_line_1:t.streetAddress,address_line_2:t.extendedAddress,city:t.locality,state:t.region,country_code:t.countryCode,postal_code:t.postalCode}}createSignInButton(e,t){const n=document.querySelector(`#${e}`);if(!n)throw new Error(\"Unable to proceed because the provided container ID is not valid.\");return this.insertVisaCheckoutButton(n,t)}insertVisaCheckoutButton(e,t){const n=document.createElement(\"div\");return n.style.display=\"flex\",n.style.flexDirection=\"column\",n.style.visibility=\"hidden\",n.style.width=\"max-content\",n.className=t,n.innerHTML='\\n            <img\\n                alt=\"Visa Checkout\"\\n                class=\"v-button\"\\n                role=\"button\"\\n                src=\"https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178\"\\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>',e.appendChild(n),n}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const Sr=Xt(e=>{const t=window,n=new un(e),i=new In(new An((0,d.vQ)(),t,n));return new br(e,(0,Fn.createFormPoster)(),i)},[{id:\"braintreevisacheckout\"}]);class wr{constructor(e){if(!e)throw new Error(\"Currency settings missing\");const{decimalPlaces:t,symbolLocation:n,symbol:i,thousandsSeparator:r,decimalSeparator:o}=e;if(\"string\"!=typeof n||\"string\"!=typeof i||\"string\"!=typeof r||\"string\"!=typeof o||\"string\"!=typeof t)throw new en(\"Invalid currency settings provided\");this._decimalPlaces=parseInt(t,10),this._symbolLocation=n,this._symbol=i,this._thousandsSeparator=r,this._decimalSeparator=o}format(e){if(\"number\"!=typeof e)throw new en(\"Invalid amount provided\");const t=this._formatNumber(e),n=this._formatCurrency(t);return e<0?`-${n}`:n}_formatNumber(e){const t=Math.abs(e),[n,i=\"\"]=this._toFixed(t,this._decimalPlaces).split(\".\"),r=n.replace(/\\B(?=(\\d{3})+(?!\\d))/g,this._thousandsSeparator);return this._decimalPlaces<1?r:[r,i].join(this._decimalSeparator)}_formatCurrency(e){return\"left\"===this._symbolLocation.toLowerCase()?`${this._symbol}${e}`:`${e}${this._symbol}`}_toFixed(e,t){return(+`${Math.round(+`${e}e${t}`)}e${-t}`).toFixed(t)}}let Cr=class{constructor(e){this._storeConfig=e,this._customerFormatter=new wr(this._storeConfig.shopperCurrency),this._storeFormatter=new wr(this._storeConfig.currency)}toCustomerCurrency(e){const t=this._storeConfig.shopperCurrency.exchangeRate;return this._customerFormatter.format(e*t)}toStoreCurrency(e){return this._storeFormatter.format(e)}};Cr=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([_t],Cr);const Ir=Cr,Pr=(e,t)=>!!e&&(!!e.lineItems.physicalItems.some(e=>e.isShippingRequired)||!(!t||!e.lineItems.customItems)&&e.lineItems.customItems.length>0);function Er(){if(\"undefined\"==typeof window)return!1;if(function(e){return\"ReactNativeWebView\"in e}(window))return!0;const e=navigator.userAgent||navigator.vendor||(function(e){return\"opera\"in e}(window)?window.opera:\"\"),t=/android.+; wv/i.test(e),n=/iPhone|iPod|iPad/i.test(e)&&/AppleWebKit/i.test(e)&&!/Safari/i.test(e);return t||n}var Or,Ar,Tr,kr,xr,Mr,Nr,Dr,Rr;function zr(e){return e in Mr}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Or||(Or={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(Ar||(Ar={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(Tr||(Tr={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(kr||(kr={})),function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(xr||(xr={})),function(e){e.AMEX=\"AMEX\",e.DISCOVER=\"DISCOVER\",e.INTERAC=\"INTERAC\",e.JCB=\"JCB\",e.MC=\"MASTERCARD\",e.VISA=\"VISA\"}(Mr||(Mr={})),function(e){e.OFFER=\"OFFER\",e.PAYMENT_AUTHORIZATION=\"PAYMENT_AUTHORIZATION\",e.SHIPPING_ADDRESS=\"SHIPPING_ADDRESS\",e.SHIPPING_OPTION=\"SHIPPING_OPTION\"}(Nr||(Nr={})),function(e){e.OFFER_INVALID=\"OFFER_INVALID\",e.PAYMENT_DATA_INVALID=\"PAYMENT_DATA_INVALID\",e.SHIPPING_ADDRESS_INVALID=\"SHIPPING_ADDRESS_INVALID\",e.SHIPPING_ADDRESS_UNSERVICEABLE=\"SHIPPING_ADDRESS_UNSERVICEABLE\",e.SHIPPING_OPTION_INVALID=\"SHIPPING_OPTION_INVALID\",e.OTHER_ERROR=\"OTHER_ERROR\"}(Dr||(Dr={})),function(e){e.INITIALIZE=\"INITIALIZE\",e.SHIPPING_OPTION=\"SHIPPING_OPTION\",e.SHIPPING_ADDRESS=\"SHIPPING_ADDRESS\",e.OFFER=\"OFFER\"}(Rr||(Rr={}));var Fr,Br=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class jr{constructor(e,t){this._gatewayIdentifier=e,this._paymentIntegrationService=t,this._isBuyNowFlow=!1,this._shouldRequestShipping=!0,this._isWebViewExperimentOn=null}mapToShippingAddressRequestBody({shippingAddress:e}){if(!e)return;const{company:t=\"\",phone:n=\"\"}=this._paymentIntegrationService.getState().getShippingAddress()||{};return this._mapToAddressRequestBody(e,t,n)}mapToBillingAddressRequestBody(e){const{billingAddress:t}=e.paymentMethodData.info;if(!t)return;const{company:n=\"\",phone:i=\"\",email:r,customFields:o=[]}=this._paymentIntegrationService.getState().getBillingAddress()||{};return Object.assign(Object.assign({},this._mapToAddressRequestBody(t,n,i,o)),{email:r||e.email})}mapToExternalCheckoutData(e){var t;const{paymentMethodData:{tokenizationData:{token:n},info:{cardNetwork:i,cardDetails:r}}}=e;if(!n)throw new Ft(Rt.MissingPaymentToken);return Promise.resolve(Object.assign({nonce:n,card_information:{type:i,number:r}},this._isBuyNowFlow&&{cart_id:null===(t=this._paymentIntegrationService.getState().getCart())||void 0===t?void 0:t.id}))}getRequiredData(){var e;return Br(this,void 0,void 0,function*(){const t={emailRequired:!0};if(!this._isShippingAddressRequired())return t;const n=yield this._paymentIntegrationService.loadShippingCountries(),i=null===(e=n.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code);return Object.assign(Object.assign({},t),{shippingAddressRequired:!0,shippingAddressParameters:Object.assign({phoneNumberRequired:!0},i&&{allowedCountryCodes:i}),shippingOptionRequired:!0})})}getCallbackIntents(){return this._isShippingAddressRequired()?[Nr.OFFER,Nr.SHIPPING_ADDRESS,Nr.SHIPPING_OPTION]:[Nr.OFFER]}getCallbackTriggers(){return{availableTriggers:[Rr.INITIALIZE,Rr.SHIPPING_ADDRESS,Rr.SHIPPING_OPTION,Rr.OFFER],initializationTrigger:[Rr.INITIALIZE],addressChangeTriggers:[Rr.INITIALIZE,Rr.SHIPPING_ADDRESS],shippingOptionsChangeTriggers:[Rr.SHIPPING_OPTION],offerChangeTriggers:[Rr.OFFER]}}getNonce(e){var t;const n=null===(t=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e).initializationData)||void 0===t?void 0:t.nonce;if(!n)throw new Ft(Rt.MissingPaymentToken);return Promise.resolve(n)}extraPaymentData(){return Promise.resolve(void 0)}getMerchantInfo(){const{googleMerchantName:e,googleMerchantId:t,platformToken:n}=this.getGooglePayInitializationData();return{merchantName:e,merchantId:t,authJwt:n}}getTransactionInfo(){let e;const{getCartOrThrow:t}=this._paymentIntegrationService.getState();e=this._isBuyNowFlow?this._getCurrencyCodeOrThrow():t().currency.code;const n=this.getGooglePayInitializationData().storeCountry;if(this.isWebViewWithRestrictions()){const t=this.getTotalPrice();return Object.assign(Object.assign({},n&&{countryCode:n}),{currencyCode:e,totalPrice:t,totalPriceStatus:xr.ESTIMATED})}return Object.assign(Object.assign({},n&&{countryCode:n}),{currencyCode:e,totalPriceStatus:xr.ESTIMATED,totalPrice:\"0\"})}isWebViewWithRestrictions(){return null!==this._isWebViewExperimentOn?this._isWebViewExperimentOn&&Er():Er()}setIsWebViewExperimentOn(e){this._isWebViewExperimentOn=e}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData().gatewayMerchantId;if(!e)throw new en(\"Unable to proceed, gatewayMerchantId is missing.\");return{gateway:this._gatewayIdentifier,gatewayMerchantId:e}}getCardParameters(){return{allowedAuthMethods:[\"PAN_ONLY\",\"CRYPTOGRAM_3DS\"],allowedCardNetworks:this.getPaymentMethod().supportedCards.filter(zr).map(e=>Mr[e]),billingAddressRequired:!0,billingAddressParameters:{format:\"FULL\",phoneNumberRequired:!0}}}initialize(e,t,n){return this._getPaymentMethodFn=e,this._isBuyNowFlow=Boolean(t),this._currencyCode=n,this._isBuyNowFlow&&this._getCurrencyCodeOrThrow(),Promise.resolve()}handleShippingAddressChange(e){var t,n,i,r;return Br(this,void 0,void 0,function*(){e&&(e.name=e.name||\"\",e.address1=e.address1||\"\");const o=this.mapToShippingAddressRequestBody({shippingAddress:e});o&&(yield this._paymentIntegrationService.updateShippingAddress(o));const a=this._paymentIntegrationService.getState(),s=a.getConsignments();if(!(null==s?void 0:s[0]))return;const c=s[0],d=a.getStoreConfigOrThrow();this._currencyService||(this._currencyService=new Ir(d));const u=(c.availableShippingOptions||[]).map(this._getGooglePayShippingOption.bind(this)),l=null===(t=c.availableShippingOptions)||void 0===t?void 0:t.find(e=>e.isRecommended);if(u.length){const e=(null===(n=c.selectedShippingOption)||void 0===n?void 0:n.id)||(null==l?void 0:l.id)||(null===(i=u[0])||void 0===i?void 0:i.id);return!(null===(r=c.selectedShippingOption)||void 0===r?void 0:r.id)&&u[0]&&(yield this.handleShippingOptionChange((null==l?void 0:l.id)||u[0].id)),{defaultSelectedOptionId:e,shippingOptions:u}}})}handleShippingOptionChange(e){return Br(this,void 0,void 0,function*(){if(\"shipping_option_unselected\"!==e)return this._paymentIntegrationService.selectShippingOption(e)})}getTotalPrice(){const{getCheckoutOrThrow:e,getCartOrThrow:t,getStoreConfigOrThrow:n}=this._paymentIntegrationService.getState(),{decimalPlaces:i}=t().currency,r=an(n().checkoutSettings.features,\"PI-5075.google_pay_round_total_price_to_max_2_decimal_places\")?Math.min(i,2):i;return(0,P.round)(e().outstandingBalance,r).toFixed(r)}handleCoupons(e){return Br(this,void 0,void 0,function*(){const{redemptionCodes:t=[]}=e,{offers:n}=this.getAppliedCoupons()||{};let i;return yield t.reduce((e,t)=>Br(this,void 0,void 0,function*(){if(yield e,(n||[]).some(({redemptionCode:e})=>e===t))return;const r=yield this.applyCoupon(t);r&&(i=r)}),Promise.resolve()),yield(n||[]).reduce((e,n)=>Br(this,void 0,void 0,function*(){yield e,t.includes(n.redemptionCode)||(yield this._paymentIntegrationService.removeCoupon(n.redemptionCode))}),Promise.resolve()),{newOfferInfo:this.getAppliedCoupons(),error:i}})}getAppliedCoupons(){const e=this._paymentIntegrationService.getState(),{coupons:t}=e.getCheckout()||{};return{offers:(t||[]).map(e=>{const{displayName:t,code:n}=e;return{redemptionCode:n,description:t}})}}applyCoupon(e){return Br(this,void 0,void 0,function*(){let t;try{yield this._paymentIntegrationService.applyCoupon(e)}catch(e){return e instanceof Error&&(t={reason:Dr.OFFER_INVALID,message:e.message,intent:Rr.OFFER}),t}})}setShouldRequestShipping(e){this._shouldRequestShipping=e}getGooglePayInitializationData(){return jt(this.getPaymentMethod().initializationData,()=>new en(\"Missing initialization data.\"))}getPaymentMethod(){return jt(this._getPaymentMethodFn,()=>new Lt(zt.PaymentNotInitialized))()}getGatewayIdentifier(){return this._gatewayIdentifier}setGatewayIdentifier(e){this._gatewayIdentifier=e||this.getGatewayIdentifier()}_isShippingAddressRequired(){const{getCartOrThrow:e,getStoreConfigOrThrow:t,getShippingAddress:n}=this._paymentIntegrationService.getState(),i=t();let r;return r=an(i.checkoutSettings.features,\"PI-4290.google_pay_require_shipping_address\")?this._shouldRequestShipping:void 0===n(),r&&Pr(e(),i)}_mapToAddressRequestBody(e,t,n,i){const{name:r,address1:o,address2:a,address3:s,locality:c,administrativeArea:d,countryCode:u,postalCode:l,phoneNumber:h}=e,[p,m]=this._getFirstAndLastName(r);return{firstName:p,lastName:m,company:t,address1:o,address2:`${a} ${s}`.trim(),city:c||d,stateOrProvince:d,stateOrProvinceCode:d,countryCode:u,postalCode:l,phone:h||n,customFields:i||[]}}_getFirstAndLastName(e){const t=e.split(\" \");return 1===t.length?[e,\"\"]:[t.slice(0,-1).join(\" \"),t[t.length-1]]}_getCurrencyCodeOrThrow(){return jt(this._currencyCode,()=>new en('Unable to initialize payment because \"options.currencyCode\" argument is not provided.'))}_getGooglePayShippingOption({id:e,cost:t,description:n,additionalDescription:i}){var r;return{id:e,label:`${(null===(r=this._currencyService)||void 0===r?void 0:r.toCustomerCurrency(t))||t} ${n}`,description:i}}}function Lr(e){return\"object\"==typeof e&&null!==e&&\"statusCode\"in e}function Ur(e){return Object.values(Fr).includes(e)}!function(e){e.ADYEN_V2=\"googlepayadyenv2\",e.ADYEN_V3=\"googlepayadyenv3\",e.AUTHORIZE_NET=\"googlepayauthorizenet\",e.BNZ=\"googlepaybnz\",e.BRAINTREE=\"googlepaybraintree\",e.PAYPAL_COMMERCE=\"googlepaypaypalcommerce\",e.BIGCOMMERCE_PAYMENTS=\"googlepay_bigcommerce_payments\",e.CHECKOUT_COM=\"googlepaycheckoutcom\",e.CYBERSOURCE_V2=\"googlepaycybersourcev2\",e.ORBITAL=\"googlepayorbital\",e.STRIPE=\"googlepaystripe\",e.STRIPE_UPE=\"googlepaystripeupe\",e.STRIPE_OCS=\"googlepaystripeocs\",e.WORLDPAY_ACCESS=\"googlepayworldpayaccess\",e.TD_ONLINE_MART=\"googlepaytdonlinemart\"}(Fr||(Fr={}));var Vr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class qr{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t}initialize(e){var t,n;return Vr(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId)||!Ur(e.methodId))throw new en('Unable to proceed because \"methodId\" is not a valid key.');this._methodId=e.methodId;const i=e[this._getMethodId()];if(!i)throw new en(\"Unable to proceed without valid options.\");let r,o=this._paymentIntegrationService.getState();try{r=o.getPaymentMethodOrThrow(this._getMethodId())}catch(e){o=yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodId()),r=o.getPaymentMethodOrThrow(this._getMethodId())}try{this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(t=r.initializationData)||void 0===t?void 0:t.isWebViewExperimentOn)),yield this._googlePayPaymentProcessor.initialize(()=>r,this._getGooglePayClientOptions(null===(n=r.initializationData)||void 0===n?void 0:n.storeCountry))}catch(e){return}this._addPaymentButton(i)})}signIn(){return Promise.reject(new tn('In order to sign in via Google Pay, the shopper must click on \"Google Pay\" button.'))}signOut(){var e;return Vr(this,void 0,void 0,function*(){const t=null===(e=this._paymentIntegrationService.getState().getPaymentId())||void 0===e?void 0:e.providerId;t&&(yield this._googlePayPaymentProcessor.signOut(t))})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}deinitialize(){var e;return null===(e=this._paymentButton)||void 0===e||e.remove(),this._paymentButton=void 0,this._methodId=void 0,Promise.resolve()}_getGooglePayClientOptions(e){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:t,shippingAddress:n,shippingOptionData:i,offerData:r})=>Vr(this,void 0,void 0,function*(){const{availableTriggers:o,addressChangeTriggers:a,shippingOptionsChangeTriggers:s,offerChangeTriggers:c}=this._googlePayPaymentProcessor.getCallbackTriggers();if(!o.includes(t))return;const d=a.includes(t)?yield this._googlePayPaymentProcessor.handleShippingAddressChange(n):void 0;s.includes(t)&&(yield this._googlePayPaymentProcessor.handleShippingOptionChange(i.id));const{newOfferInfo:u,error:l}=c.includes(t)?yield this._googlePayPaymentProcessor.handleCoupons(r):{},h=l;yield this._paymentIntegrationService.loadCheckout();const p=this._googlePayPaymentProcessor.getTotalPrice(),{code:m}=this._paymentIntegrationService.getState().getCartOrThrow().currency;return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},e&&{countryCode:e}),{currencyCode:m,totalPriceStatus:xr.FINAL,totalPrice:p})},d&&{newShippingOptionParameters:d}),u&&{newOfferInfo:u}),h&&{error:h})})}}}_addPaymentButton({container:e,buttonColor:t,buttonType:n,onClick:i,onError:r}){var o;this._paymentButton=null!==(o=this._paymentButton)&&void 0!==o?o:this._googlePayPaymentProcessor.addPaymentButton(e,{buttonColor:null!=t?t:\"default\",buttonType:null!=n?n:\"plain\",onClick:this._handleClick(r,i)})}_handleClick(e,t){return n=>Vr(this,void 0,void 0,function*(){n.preventDefault(),t&&\"function\"==typeof t&&t();try{yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheet()}catch(t){let n=t;if(Lr(t)){if(\"CANCELED\"===t.statusCode)throw new Tn;n=new Fi(JSON.stringify(t))}throw null==e||e(new Fi(\"An error occurred while requesting your Google Pay payment details.\")),n}})}_interactWithPaymentSheet(){return Vr(this,void 0,void 0,function*(){const e=yield this._googlePayPaymentProcessor.showPaymentSheet(),t=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(e),n=this._googlePayPaymentProcessor.mapToShippingAddressRequestBody(e),i=\"/embedded-checkout\"===window.location.pathname?this._paymentIntegrationService.getState().getStoreConfigOrThrow().links.siteLink:void 0;t&&(yield this._paymentIntegrationService.updateBillingAddress(t)),n&&(yield this._paymentIntegrationService.updateShippingAddress(n)),yield this._googlePayPaymentProcessor.setExternalCheckoutForm(this._getMethodId(),e,i)})}_getMethodId(){return jt(this._methodId,()=>new Lt(zt.PaymentNotInitialized))}}var Hr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Gr{constructor(e,t,n,i){this._scriptLoader=e,this._gateway=t,this._requestSender=n,this._formPoster=i,this._baseRequest={apiVersion:2,apiVersionMinor:0}}initialize(e,t,n,i){return Hr(this,void 0,void 0,function*(){this._paymentsClient=yield this._scriptLoader.getGooglePaymentsClient(e().config.testMode,t),yield this._gateway.initialize(e,n,i),this._buildButtonPayloads()})}initializeWidget(){return Hr(this,void 0,void 0,function*(){yield this._buildWidgetPayloads(),yield this._determineReadinessToPay(),this._prefetchGooglePaymentData()})}getNonce(e){return this._gateway.getNonce(e)}extraPaymentData(){return Hr(this,void 0,void 0,function*(){return this._gateway.extraPaymentData()})}addPaymentButton(e,t){const n=document.querySelector(`#${e}`);if(!n)return;const i=this._getPaymentsClient().createButton(Object.assign(Object.assign({},t),{allowedPaymentMethods:[this._getBaseCardPaymentMethod()]}));return n.appendChild(i)}showPaymentSheet(){return Hr(this,void 0,void 0,function*(){const e=this._getPaymentDataRequest();return this._getPaymentsClient().loadPaymentData(e)})}setExternalCheckoutXhr(e,t){return Hr(this,void 0,void 0,function*(){return this._setExternalCheckout(e,t)})}setExternalCheckoutForm(e,t,n){return Hr(this,void 0,void 0,function*(){return this._setExternalCheckout(e,t,!0,n)})}mapToBillingAddressRequestBody(e){return this._gateway.mapToBillingAddressRequestBody(e)}mapToShippingAddressRequestBody(e){return this._gateway.mapToShippingAddressRequestBody(e)}processAdditionalAction(e,t){return\"processAdditionalAction\"in this._gateway?this._gateway.processAdditionalAction(e,t):Promise.reject(e)}signOut(e){return Hr(this,void 0,void 0,function*(){yield this._requestSender.get(`/remote-checkout/${e}/signout`)})}getCallbackTriggers(){return this._gateway.getCallbackTriggers()}setShouldRequestShipping(e){return this._gateway.setShouldRequestShipping(e)}handleShippingAddressChange(e){return Hr(this,void 0,void 0,function*(){return this._gateway.handleShippingAddressChange(e)})}handleShippingOptionChange(e){return Hr(this,void 0,void 0,function*(){yield this._gateway.handleShippingOptionChange(e)})}handleCoupons(e){return Hr(this,void 0,void 0,function*(){return this._gateway.handleCoupons(e)})}getTotalPrice(){return this._gateway.getTotalPrice()}_setExternalCheckout(e,t,n=!1,i){return Hr(this,void 0,void 0,function*(){const r=\"/checkout.php\",o=Object.assign({action:\"set_external_checkout\",provider:e},yield this._gateway.mapToExternalCheckoutData(t));if(n)return new Promise(e=>{this._formPoster.postForm(i?`${i}/checkout`:r,Object.assign(Object.assign({},o),{card_information:JSON.stringify(o.card_information)}),e)});yield this._requestSender.post(r,{headers:Object.assign({Accept:\"text/html\",\"Content-Type\":\"application/x-www-form-urlencoded\"},Xn),body:o})})}isWebViewWithRestrictions(){return this._gateway.isWebViewWithRestrictions()}setIsWebViewExperimentOn(e){return this._gateway.setIsWebViewExperimentOn(e)}_prefetchGooglePaymentData(){const e=this._getPaymentDataRequest();e.transactionInfo=this._gateway.getTransactionInfo(),this._getPaymentsClient().prefetchPaymentData(e)}_determineReadinessToPay(){return Hr(this,void 0,void 0,function*(){try{const{result:e}=yield this._getPaymentsClient().isReadyToPay(this._getIsReadyToPayRequest());if(!1===e)throw new Fi(\"Google Pay is not supported by the current device and browser, please try another payment method.\")}catch(e){if(e instanceof Fi)throw e;throw new Fi}})}_buildButtonPayloads(){this._baseCardPaymentMethod={type:\"CARD\",parameters:this._gateway.getCardParameters()}}_buildWidgetPayloads(){return Hr(this,void 0,void 0,function*(){const e=this._getBaseCardPaymentMethod();this._cardPaymentMethod=Object.assign(Object.assign({},e),{tokenizationSpecification:{type:\"PAYMENT_GATEWAY\",parameters:yield this._gateway.getPaymentGatewayParameters()}});const t=this._gateway.isWebViewWithRestrictions()?{shippingOptionRequired:!1}:{callbackIntents:this._gateway.getCallbackIntents(),offerInfo:this._gateway.getAppliedCoupons()};this._paymentDataRequest=Object.assign(Object.assign(Object.assign(Object.assign({},this._baseRequest),{allowedPaymentMethods:[this._cardPaymentMethod],transactionInfo:this._gateway.getTransactionInfo(),merchantInfo:this._gateway.getMerchantInfo()}),yield this._gateway.getRequiredData()),t),this._isReadyToPayRequest=Object.assign(Object.assign({},this._baseRequest),{allowedPaymentMethods:[e]})})}_getBaseCardPaymentMethod(){return this._getOrThrow(this._baseCardPaymentMethod)}_getPaymentDataRequest(){return this._getOrThrow(this._paymentDataRequest)}_getIsReadyToPayRequest(){return this._getOrThrow(this._isReadyToPayRequest)}_getPaymentsClient(){return this._getOrThrow(this._paymentsClient)}_getOrThrow(e){return jt(e,()=>new Lt(zt.PaymentNotInitialized))}}class Wr{constructor(e){this._scriptLoader=e,this._window=window}getGooglePaymentsClient(e=!1,t){return n=this,i=void 0,o=function*(){if(yield this._scriptLoader.loadScript(\"https://pay.google.com/gp/p/js/pay.js\"),!this._window.google)throw new Qt;return void 0===this._paymentsClient&&(this._paymentsClient=new this._window.google.payments.api.PaymentsClient(Object.assign({environment:e?\"TEST\":\"PRODUCTION\"},null!=t?t:{}))),this._paymentsClient},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}}function $r(){return new Wr((0,d.vQ)())}const Yr=Xt(e=>{const t=(0,o.createRequestSender)();return new qr(e,new Gr($r(),new jr(\"adyen\",e),t,(0,Fn.createFormPoster)()))},[{id:\"googlepayadyenv2\"}]),Kr=Xt(e=>{const t=(0,o.createRequestSender)();return new qr(e,new Gr($r(),new jr(\"adyen\",e),t,(0,Fn.createFormPoster)()))},[{id:\"googlepayadyenv3\"}]);class Qr extends jr{constructor(e){super(\"authorizenet\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();return function(e){if(!function(e){return\"paymentGatewayId\"in e}(e))throw new Ft(Rt.MissingPaymentMethod)}(e),{gateway:this.getGatewayIdentifier(),gatewayMerchantId:e.paymentGatewayId}}}const Jr=Xt(e=>new qr(e,new Gr($r(),new Qr(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepayauthorizenet\"}]),Zr=e=>\"object\"==typeof e&&null!==e&&\"body\"in e;function Xr(e){if(!function(e){return\"checkoutcomkey\"in e}(e))throw new Ft(Rt.MissingPaymentMethod)}var eo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class to extends jr{constructor(e,t){super(\"checkoutltd\",e),this._requestSender=t}processAdditionalAction(e){return new Promise((t,n)=>{if(Zr(e)&&function(e){var t;if(\"object\"!=typeof e||null===e)return!1;const n=e;return\"string\"==typeof(null===(t=n.three_ds_result)||void 0===t?void 0:t.acs_url)&&\"string\"==typeof n.three_ds_result.code}(e.body)&&\"three_d_secure_required\"===e.body.three_ds_result.code)return window.location.assign(e.body.three_ds_result.acs_url);n(e)})}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return eo(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let i;try{i=JSON.parse(n.nonce)}catch(e){throw new en(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"protocolVersion\"in e&&\"signature\"in e&&\"signedMessage\"in e}(e))throw new Ft(Rt.MissingPaymentToken)}(i),n.nonce=yield this._tokenize(i),n})}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();return Xr(e),{gateway:this.getGatewayIdentifier(),gatewayMerchantId:e.checkoutcomkey}}_tokenize(e){return eo(this,void 0,void 0,function*(){const t=this.getPaymentMethod().config.testMode?\"https://api.sandbox.checkout.com/tokens\":\"https://api.checkout.com/tokens\",n=this.getGooglePayInitializationData();Xr(n);const{body:i}=yield this._requestSender.post(t,{credentials:!1,body:{type:\"googlepay\",token_data:e},headers:{Authorization:n.checkoutcomkey,\"Content-Type\":Zn.Json,\"X-XSRF-TOKEN\":null}});return i.token})}}const no=Xt(e=>{const t=(0,o.createRequestSender)();return new qr(e,new Gr($r(),new to(e,t),t,(0,Fn.createFormPoster)()))},[{id:\"googlepaycheckoutcom\"}]);class io extends jr{constructor(e){super(\"cybersource\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}}const ro=Xt(e=>new qr(e,new Gr($r(),new io(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaycybersourcev2\"}]),oo=Xt(e=>new qr(e,new Gr($r(),new io(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaybnz\"}]);class ao extends jr{constructor(e){super(\"chase\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}}const so=Xt(e=>new qr(e,new Gr($r(),new ao(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepayorbital\"}]);var co,uo,lo,ho,po,mo,yo,fo,go,vo,_o,bo;!function(e){e.SHIPPING=\"shipping\",e.BILLING=\"billing\"}(co||(co={})),function(e){e.SPLIT=\"split\",e.FULL=\"full\",e.ORGANIZATION=\"organization\"}(uo||(uo={})),function(e){e.Open=\"open\",e.Expired=\"expired\",e.Complete=\"complete\"}(lo||(lo={})),function(e){e.Paid=\"paid\",e.UnPaid=\"unpaid\",e.NoPaymentRequired=\"no_payment_required\"}(ho||(ho={})),function(e){e.SUCCESS=\"success\",e.ERROR=\"error\"}(po||(po={})),function(e){e.CreditCard=\"card\",e.ACH=\"us_bank_account\",e.Link=\"link\",e.EPS=\"eps\",e.GRABPAY=\"grabpay\",e.BANCONTACT=\"bancontact\",e.IDEAL=\"ideal\",e.ALIPAY=\"alipay\",e.KLARNA=\"klarna\",e.OCS=\"optimized_checkout\",e.CHECKOUT_SESSION=\"checkout_session\"}(mo||(mo={})),function(e){e.NEVER=\"never\",e.AUTO=\"auto\",e.ALWAYS=\"always\",e.PAYMENT=\"payment\",e.IF_REQUIRED=\"if_required\"}(yo||(yo={})),function(e){e.V3=\"v3\",e.ACACIA=\"acacia\",e.BASIL=\"basil\",e.CLOVER=\"clover\"}(fo||(fo={})),function(e){e.PAYMENT=\"payment\",e.AUTHENTICATION=\"linkAuthentication\",e.SHIPPING=\"address\",e.EXPRESS_CHECKOUT=\"expressCheckout\"}(go||(go={})),function(e){e.REQUIRES_PAYMENT_METHOD=\"requires_payment_method\",e.REQUIRES_CONFIRMATION=\"requires_confirmation\",e.REQUIRES_ACTION=\"requires_action\",e.PROCESSING=\"processing\",e.SUCCEEDED=\"succeeded\",e.CANCELED=\"canceled\"}(vo||(vo={})),function(e){e.CLICK=\"click\",e.CHANGE=\"change\",e.READY=\"ready\",e.SHIPPING_ADDRESS_CHANGE=\"shippingaddresschange\",e.SHIPPING_RATE_CHANGE=\"shippingratechange\",e.CONFIRM=\"confirm\",e.CANCEL=\"cancel\",e.LOADER_START=\"loaderstart\"}(_o||(_o={})),function(e){e.ON_SESSION=\"on_session\",e.OFF_SESSION=\"off_session\"}(bo||(bo={}));var So=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class wo{constructor(e,t=window){this.scriptLoader=e,this.stripeWindow=t}getStripeClient(e,t,n,i,r){return So(this,void 0,void 0,function*(){if(this.stripeWindow.bcStripeClient)return this.stripeWindow.bcStripeClient;const o=yield this.load(n),{stripePublishableKey:a,stripeConnectedAccount:s}=e,c=o(a,Object.assign(Object.assign(Object.assign(Object.assign({},s?{stripeAccount:s}:{}),t?{locale:t}:{}),i?{betas:i}:{}),r?{apiVersion:r}:{}));return Object.assign(this.stripeWindow,{bcStripeClient:c}),c})}getElements(e,t){return So(this,void 0,void 0,function*(){let n=this.stripeWindow.bcStripeElements;return n?yield this.updateStripeElements(t):(n=e.elements(t),Object.assign(this.stripeWindow,{bcStripeElements:n})),n})}updateStripeElements(e){return So(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeElements;t&&(t.update(e),yield t.fetchUpdates())})}getStripeCheckout(e,t){return So(this,void 0,void 0,function*(){let n=yield this.getStoredStripeCheckout(t);return n||(n=yield e.initCheckout(t),Object.assign(this.stripeWindow,{bcStripeCheckout:n})),n})}load(e){return So(this,void 0,void 0,function*(){if(!this.stripeWindow.Stripe&&(yield this.scriptLoader.loadScript(this.getScriptUrl(e)),!this.stripeWindow.Stripe))throw new Qt;return this.stripeWindow.Stripe})}getScriptUrl(e){return e&&e!==fo.V3?`https://js.stripe.com/${e}/stripe.js`:\"https://js.stripe.com/v3/\"}getStoredStripeCheckout(e){return So(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeCheckout;if(t)try{const{actions:n,error:i}=yield t.loadActions();if(i||!n)return void this.logErrorToConsole(i);const r=yield n.getSession(),o=e.clientSecret.split(\"_secret_\")[0];if(r.id===o)return t}catch(e){return void this.logErrorToConsole(e)}})}logErrorToConsole(e){e?console.error(e):console.error(\"No stripe checkout actions available on loadActions().\")}}const Co=[\"payment_element_beta_2\",\"alipay_pm_beta_1\",\"link_default_integration_beta_1\",\"shipping_address_element_beta_1\",\"address_element_beta_1\"],Io=\"2020-03-02;alipay_beta=v1;link_beta=v1\";function Po(e){if(!function(e){return\"stripeConnectedAccount\"in e&&\"stripePublishableKey\"in e&&\"stripeVersion\"in e}(e))throw new Ft(Rt.MissingPaymentMethod)}var Eo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Oo extends jr{constructor(e,t){super(\"stripe\",e),this.paymentIntegrationService=e,this.scriptLoader=t}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return Eo(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let i;try{i=JSON.parse(n.nonce)}catch(e){throw new en(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"id\"in e}(e))throw new Ft(Rt.MissingPaymentToken)}(i),n.nonce=i.id,n})}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();Po(e);const{stripeVersion:t,stripePublishableKey:n,stripeConnectedAccount:i}=e;return{gateway:this.getGatewayIdentifier(),\"stripe:version\":t,\"stripe:publishableKey\":`${n}/${i}`}}processAdditionalAction(e,t){var n;return Eo(this,void 0,void 0,function*(){if(!t)throw new Yi([\"payment\"]);if(!Zr(e)||(\"object\"!=typeof(i=e.body)||null===i||!(\"three_ds_result\"in i)||!(\"errors\"in i)))throw e;var i;if((0,P.some)(e.body.errors,{code:\"three_d_secure_required\"})){const i=this.getGooglePayInitializationData();Po(i),this.stripeUPEClient=yield this.loadStripeJs(i,t);const r=e.body.three_ds_result.token;let o,a=!1;try{o=yield this.stripeUPEClient.confirmCardPayment(r)}catch(e){try{o=yield this.stripeUPEClient.retrievePaymentIntent(r)}catch(e){a=!0}}if(null==o?void 0:o.error){if(this._throwDisplayableStripeError(o.error),this._isCancellationError(o.error))throw new Tn;throw new Fi}if(!(null==o?void 0:o.paymentIntent)&&!a)throw new Ln;return this.paymentIntegrationService.submitPayment({methodId:t,paymentData:{nonce:(null===(n=null==o?void 0:o.paymentIntent)||void 0===n?void 0:n.id)||r}})}throw e})}loadStripeJs(e,t){return Eo(this,void 0,void 0,function*(){if(this.stripeUPEClient)return this.stripeUPEClient;const n=this.paymentIntegrationService.getState().getCartLocale();return\"googlepaystripeocs\"===t&&e.useNewStripeJsVersion?this.scriptLoader.getStripeClient(e,n,fo.CLOVER):this.scriptLoader.getStripeClient(e,n,fo.V3,Co,Io)})}_isCancellationError(e){var t,n;return e&&-1!==(null===(n=null===(t=e.payment_intent.last_payment_error)||void 0===t?void 0:t.message)||void 0===n?void 0:n.indexOf(\"canceled\"))}_throwDisplayableStripeError(e){if((0,P.includes)([\"card_error\",\"invalid_request_error\",\"validation_error\"],e.type))throw new Error(e.message)}}const Ao=Xt(e=>new qr(e,new Gr($r(),new Oo(e,new wo((0,d.vQ)())),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeocs\"}]),To=Xt(e=>new qr(e,new Gr($r(),new Oo(e,new wo((0,d.vQ)())),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaystripeupe\"}]);class ko extends jr{constructor(e){super(\"worldpay\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}}const xo=Xt(e=>new qr(e,new Gr($r(),new ko(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepayworldpayaccess\"}]);var Mo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class No extends jr{constructor(e,t){super(\"braintree\",e),this._braintreeSdk=t,this._methodId=Fr.BRAINTREE,this._service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return Mo(this,void 0,void 0,function*(){yield i.initialize.call(this,e,t,n);let r=i.getPaymentMethod.call(this);if(r.clientToken||(r=(yield this._service.loadPaymentMethod(this._methodId)).getPaymentMethodOrThrow(this._methodId)),!r.clientToken||!r.initializationData)throw new Ft(Rt.MissingPaymentMethod);return this._braintreeSdk.initialize(r.clientToken),this._braintreeGooglePayment=yield this._braintreeSdk.getBraintreeGooglePayment(),Promise.resolve()})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});var n;return Mo(this,void 0,void 0,function*(){const i=yield t.getNonce.call(this,e),{clientToken:r,initializationData:o}=t.getPaymentMethod.call(this);if(!r||!o||!(null===(n=o.card_information)||void 0===n?void 0:n.bin))throw new Ft(Rt.MissingPaymentMethod);const{isThreeDSecureEnabled:a,card_information:{bin:s,isNetworkTokenized:c}}=o;if(a&&!c){const e=yield this._braintreeSdk.getBraintreeThreeDS(),{orderAmount:t}=this._service.getState().getOrderOrThrow();return(yield this._braintreePresent3DSChallenge(e,t,i,s)).nonce}return i})}extraPaymentData(){return Mo(this,void 0,void 0,function*(){return{deviceSessionId:yield this._getBraintreeDeviceData()}})}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return Mo(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let i;try{i=JSON.parse(n.nonce)}catch(e){throw new en(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"androidPayCards\"in e}(e))throw new Ft(Rt.MissingPaymentToken)}(i),n.nonce=i.androidPayCards[0].nonce,n.card_information.bin=i.androidPayCards[0].details.bin,n.card_information.isNetworkTokenized=i.androidPayCards[0].details.isNetworkTokenized,n})}getCardParameters(){return super.getCardParameters()}getPaymentGatewayParameters(){const e=Object.create(null,{getMerchantInfo:{get:()=>super.getMerchantInfo},getTransactionInfo:{get:()=>super.getTransactionInfo},getRequiredData:{get:()=>super.getRequiredData}});return Mo(this,void 0,void 0,function*(){return this.getBraintreeGooglePayment().createPaymentDataRequest(Object.assign({merchantInfo:e.getMerchantInfo.call(this),transactionInfo:e.getTransactionInfo.call(this),cardRequirements:{billingAddressRequired:!0,billingAddressFormat:\"FULL\"}},yield e.getRequiredData.call(this))).paymentMethodTokenizationParameters.parameters})}getBraintreeGooglePayment(){if(!this._braintreeGooglePayment)throw new Ft(Rt.MissingPaymentMethod);return this._braintreeGooglePayment}_getBraintreeDeviceData(){return Mo(this,void 0,void 0,function*(){const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e})}_braintreePresent3DSChallenge(e,t,n,i){return new dt(e.verifyCard({amount:t,bin:i,nonce:n,onLookupComplete:(e,t)=>{t()}})).promise}}const Do=Xt(e=>{const t=(0,o.createRequestSender)(),n=window,i=new un(e),r=new In(new An((0,d.vQ)(),n,i));return new qr(e,new Gr($r(),new No(e,r),t,(0,Fn.createFormPoster)()))},[{id:\"googlepaybraintree\"}]),Ro={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},zo=[\"ar_BH\",\"ar_DZ\",\"ar_EG\",\"ar_JO\",\"ar_KW\",\"ar_MA\",\"ar_OM\",\"ar_QA\",\"ar_SA\",\"ar_TN\",\"ar_YE\",\"ar_AE\",\"bg_BG\",\"cs_CZ\",\"da_DK\",\"da_FO\",\"da_GL\",\"de_AT\",\"de_CH\",\"de_DE\",\"de_LU\",\"el_GR\",\"en_AD\",\"en_AE\",\"en_AG\",\"en_AI\",\"en_AL\",\"en_AM\",\"en_AN\",\"en_AO\",\"en_AT\",\"en_AU\",\"en_AW\",\"en_AZ\",\"en_BB\",\"en_BE\",\"en_BH\",\"en_BJ\",\"en_BM\",\"en_BN\",\"en_BS\",\"en_BT\",\"en_BW\",\"en_BY\",\"en_BZ\",\"en_C2\",\"en_CA\",\"en_CD\",\"en_CG\",\"en_CH\",\"en_CI\",\"en_CK\",\"en_CL\",\"en_CM\",\"en_CN\",\"en_CO\",\"en_CR\",\"en_CV\",\"en_CY\",\"en_CZ\",\"en_DE\",\"en_DJ\",\"en_DK\",\"en_DM\",\"en_DO\",\"en_DZ\",\"en_EC\",\"en_EE\",\"en_EG\",\"en_ER\",\"en_ES\",\"en_ET\",\"en_FI\",\"en_FJ\",\"en_FK\",\"en_FM\",\"en_FO\",\"en_FR\",\"en_GA\",\"en_GB\",\"en_GD\",\"en_GE\",\"en_GF\",\"en_GI\",\"en_GL\",\"en_GM\",\"en_GN\",\"en_GP\",\"en_GR\",\"en_GT\",\"en_GW\",\"en_GY\",\"en_HK\",\"en_HN\",\"en_HR\",\"en_HU\",\"en_ID\",\"en_IE\",\"en_IL\",\"en_IN\",\"en_IS\",\"en_IT\",\"en_JM\",\"en_JO\",\"en_JP\",\"en_KE\",\"en_KG\",\"en_KH\",\"en_KI\",\"en_KM\",\"en_KN\",\"en_KR\",\"en_KW\",\"en_KY\",\"en_KZ\",\"en_LA\",\"en_LC\",\"en_LI\",\"en_LK\",\"en_LS\",\"en_LT\",\"en_LU\",\"en_LV\",\"en_MA\",\"en_MC\",\"en_MD\",\"en_ME\",\"en_MG\",\"en_MH\",\"en_MK\",\"en_ML\",\"en_MN\",\"en_MQ\",\"en_MR\",\"en_MS\",\"en_MT\",\"en_MU\",\"en_MV\",\"en_MW\",\"en_MY\",\"en_MZ\",\"en_NA\",\"en_NC\",\"en_NE\",\"en_NF\",\"en_NG\",\"en_NI\",\"en_NL\",\"en_NO\",\"en_NP\",\"en_NR\",\"en_NU\",\"en_NZ\",\"en_OM\",\"en_PA\",\"en_PE\",\"en_PF\",\"en_PG\",\"en_PH\",\"en_PL\",\"en_PM\",\"en_PN\",\"en_PT\",\"en_PW\",\"en_PY\",\"en_QA\",\"en_RE\",\"en_RO\",\"en_RS\",\"en_RU\",\"en_RW\",\"en_SA\",\"en_SB\",\"en_SC\",\"en_SE\",\"en_SG\",\"en_SH\",\"en_SI\",\"en_SJ\",\"en_SK\",\"en_SL\",\"en_SM\",\"en_SN\",\"en_SO\",\"en_SR\",\"en_ST\",\"en_SV\",\"en_SZ\",\"en_TC\",\"en_TD\",\"en_TG\",\"en_TH\",\"en_TJ\",\"en_TM\",\"en_TN\",\"en_TO\",\"en_TR\",\"en_TT\",\"en_TV\",\"en_TW\",\"en_TZ\",\"en_UA\",\"en_UG\",\"en_US\",\"en_UY\",\"en_VA\",\"en_VC\",\"en_VE\",\"en_VG\",\"en_VN\",\"en_VU\",\"en_WF\",\"en_WS\",\"en_YE\",\"en_YT\",\"en_ZA\",\"en_ZM\",\"en_ZW\",\"es_AD\",\"es_AI\",\"es_AO\",\"es_AR\",\"es_AW\",\"es_BB\",\"es_BJ\",\"es_BM\",\"es_BO\",\"es_BS\",\"es_BZ\",\"es_CD\",\"es_CG\",\"es_CK\",\"es_CL\",\"es_CO\",\"es_CR\",\"es_CV\",\"es_DJ\",\"es_DM\",\"es_DO\",\"es_DZ\",\"es_EC\",\"es_EG\",\"es_ER\",\"es_ES\",\"es_ET\",\"es_FJ\",\"es_FK\",\"es_FO\",\"es_GA\",\"es_GD\",\"es_GE\",\"es_GI\",\"es_GL\",\"es_GM\",\"es_GN\",\"es_GT\",\"es_GW\",\"es_GY\",\"es_HN\",\"es_IE\",\"es_JM\",\"es_JO\",\"es_KE\",\"es_KG\",\"es_KI\",\"es_KM\",\"es_KN\",\"es_KW\",\"es_KY\",\"es_KZ\",\"es_LC\",\"es_LI\",\"es_LS\",\"es_LU\",\"es_MA\",\"es_MG\",\"es_MH\",\"es_ML\",\"es_MR\",\"es_MS\",\"es_MU\",\"es_MW\",\"es_MX\",\"es_MZ\",\"es_NA\",\"es_NC\",\"es_NE\",\"es_NF\",\"es_NI\",\"es_NR\",\"es_NU\",\"es_NZ\",\"es_OM\",\"es_PA\",\"es_PE\",\"es_PF\",\"es_PG\",\"es_PM\",\"es_PN\",\"es_PW\",\"es_PY\",\"es_QA\",\"es_RS\",\"es_RW\",\"es_SA\",\"es_SB\",\"es_SC\",\"es_SH\",\"es_SJ\",\"es_SL\",\"es_SM\",\"es_SN\",\"es_SO\",\"es_SR\",\"es_ST\",\"es_SV\",\"es_SZ\",\"es_TC\",\"es_TD\",\"es_TG\",\"es_TJ\",\"es_TM\",\"es_TN\",\"es_TT\",\"es_TV\",\"es_UA\",\"es_UG\",\"es_US\",\"es_UY\",\"es_VA\",\"es_VC\",\"es_VE\",\"es_VG\",\"es_VU\",\"es_WF\",\"es_YE\",\"es_ZM\",\"et_EE\",\"fi_FI\",\"fr_AD\",\"fr_AE\",\"fr_AI\",\"fr_AM\",\"fr_AO\",\"fr_AW\",\"fr_AZ\",\"fr_BB\",\"fr_BE\",\"fr_BF\",\"fr_BI\",\"fr_BJ\",\"fr_BM\",\"fr_BS\",\"fr_BZ\",\"fr_CA\",\"fr_CD\",\"fr_CG\",\"fr_CH\",\"fr_CI\",\"fr_CK\",\"fr_CM\",\"fr_CV\",\"fr_DJ\",\"fr_DM\",\"fr_DO\",\"fr_DZ\",\"fr_EC\",\"fr_ER\",\"fr_ET\",\"fr_FJ\",\"fr_FK\",\"fr_FO\",\"fr_FR\",\"fr_GA\",\"fr_GD\",\"fr_GE\",\"fr_GF\",\"fr_GI\",\"fr_GL\",\"fr_GM\",\"fr_GN\",\"fr_GP\",\"fr_GT\",\"fr_GW\",\"fr_GY\",\"fr_HN\",\"fr_IE\",\"fr_JM\",\"fr_JO\",\"fr_KE\",\"fr_KG\",\"fr_KI\",\"fr_KM\",\"fr_KN\",\"fr_KW\",\"fr_KY\",\"fr_KZ\",\"fr_LC\",\"fr_LI\",\"fr_LS\",\"fr_LU\",\"fr_MA\",\"fr_MC\",\"fr_MG\",\"fr_MH\",\"fr_ML\",\"fr_MQ\",\"fr_MR\",\"fr_MS\",\"fr_MU\",\"fr_MW\",\"fr_MZ\",\"fr_NA\",\"fr_NC\",\"fr_NE\",\"fr_NF\",\"fr_NI\",\"fr_NR\",\"fr_NU\",\"fr_NZ\",\"fr_OM\",\"fr_PA\",\"fr_PE\",\"fr_PF\",\"fr_PG\",\"fr_PM\",\"fr_PN\",\"fr_PW\",\"fr_QA\",\"fr_RE\",\"fr_RS\",\"fr_RW\",\"fr_SA\",\"fr_SB\",\"fr_SC\",\"fr_SH\",\"fr_SJ\",\"fr_SL\",\"fr_SM\",\"fr_SN\",\"fr_SO\",\"fr_SR\",\"fr_ST\",\"fr_SV\",\"fr_SZ\",\"fr_TC\",\"fr_TD\",\"fr_TG\",\"fr_TJ\",\"fr_TM\",\"fr_TN\",\"fr_TT\",\"fr_TV\",\"fr_UA\",\"fr_UG\",\"fr_US\",\"fr_UY\",\"fr_VA\",\"fr_VC\",\"fr_VE\",\"fr_VG\",\"fr_VU\",\"fr_WF\",\"fr_YE\",\"fr_YT\",\"fr_ZA\",\"fr_ZM\",\"he_IL\",\"hu_HU\",\"id_ID\",\"it_IT\",\"ja_JP\",\"ko_KR\",\"lv_LV\",\"lt_LT\",\"ms_BN\",\"ms_MY\",\"nl_BE\",\"nl_NL\",\"pl_PL\",\"pt_BR\",\"pt_PT\",\"ro_RO\",\"ru_EE\",\"ru_LT\",\"ru_LV\",\"ru_RU\",\"ru_UA\",\"si_LK\",\"sk_SK\",\"sl_SI\",\"sq_AL\",\"sv_SE\",\"tl_PH\",\"th_TH\",\"tr_TR\",\"vi_VN\",\"zh_C2\",\"zh_CN\",\"zh_HK\",\"zh_TW\",\"zh_AD\",\"zh_AE\",\"zh_AI\",\"zh_AO\",\"zh_AW\",\"zh_BB\",\"zh_BH\",\"zh_BJ\",\"zh_BM\",\"zh_BS\",\"zh_BZ\",\"zh_CD\",\"zh_CG\",\"zh_CK\",\"zh_CL\",\"zh_CO\",\"zh_CV\",\"zh_DJ\",\"zh_DM\",\"zh_DO\",\"zh_DZ\",\"zh_EC\",\"zh_EG\",\"zh_ER\",\"zh_ET\",\"zh_FJ\",\"zh_FK\",\"zh_FO\",\"zh_GA\",\"zh_GD\",\"zh_GE\",\"zh_GI\",\"zh_GL\",\"zh_GM\",\"zh_GN\",\"zh_GT\",\"zh_GW\",\"zh_GY\",\"zh_HN\",\"zh_IE\",\"zh_JM\",\"zh_JO\",\"zh_KE\",\"zh_KG\",\"zh_KI\",\"zh_KM\",\"zh_KN\",\"zh_KW\",\"zh_KY\",\"zh_KZ\",\"zh_LC\",\"zh_LI\",\"zh_LS\",\"zh_LT\",\"zh_LU\",\"zh_MA\",\"zh_MG\",\"zh_MH\",\"zh_ML\",\"zh_MR\",\"zh_MS\",\"zh_MU\",\"zh_MW\",\"zh_MZ\",\"zh_NA\",\"zh_NC\",\"zh_NE\",\"zh_NF\",\"zh_NI\",\"zh_NR\",\"zh_NU\",\"zh_NZ\",\"zh_OM\",\"zh_PA\",\"zh_PE\",\"zh_PF\",\"zh_PG\",\"zh_PM\",\"zh_PN\",\"zh_PW\",\"zh_QA\",\"zh_RS\",\"zh_RW\",\"zh_SA\",\"zh_SB\",\"zh_SC\",\"zh_SH\",\"zh_SJ\",\"zh_SL\",\"zh_SM\",\"zh_SN\",\"zh_SO\",\"zh_SR\",\"zh_ST\",\"zh_SV\",\"zh_SZ\",\"zh_TC\",\"zh_TD\",\"zh_TG\",\"zh_TJ\",\"zh_TM\",\"zh_TN\",\"zh_TT\",\"zh_TV\",\"zh_UA\",\"zh_UG\",\"zh_US\",\"zh_UY\",\"zh_VA\",\"zh_VC\",\"zh_VE\",\"zh_VG\",\"zh_VU\",\"zh_WF\",\"zh_YE\",\"zh_ZA\",\"zh_ZM\"];function Fo(e){if(!e)return;let t;if(e.includes(\"-\")){const[n,i]=e.split(\"-\");t=`${n}_${i.toUpperCase()}`}else t=`${e}_${e.toUpperCase()}`;return zo.includes(t)?t:void 0}var Bo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class jo{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n,i){return Bo(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const r=this.getPayPalFastlaneSdkConfiguration(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypalFastlaneSdk)throw new Qt}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i,r){return Bo(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||r){const r=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i);yield this.loadPayPalSdk(r)}if(!this.window.paypalGooglePay)throw new Qt;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return Bo(this,void 0,void 0,function*(){if(!this.window.paypalApms){const i=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.paypalApms)throw new Qt}return this.window.paypalApms})}getPayPalMessages(e,t,n){return Bo(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const i=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.paypalMessages)throw new Qt;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return Bo(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:i})})}getPayPalFastlaneSdkConfiguration(e,t,n,i){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new Ft(Rt.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:c,attributionId:d}=o,u=Fo(i);return{options:Object.assign({\"client-id\":s,\"merchant-id\":c,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t,intent:a},u&&{locale:u}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":d,\"data-sdk-client-token\":r}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i=!0){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new Ft(Rt.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:c,buyerCountry:d,attributionId:u,isHostedCheckoutEnabled:l,isDeveloperModeApplicable:h}=o,p=l||i,m=Fo(n);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":c,commit:p,components:[\"googlepay\"],currency:t,intent:a},h&&{\"buyer-country\":d}),m&&{locale:m}),attributes:{\"data-partner-attribution-id\":u,\"data-client-token\":r,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new Ft(Rt.MissingPaymentMethod);const{intent:r,clientId:o,merchantId:a,buyerCountry:s,attributionId:c,isDeveloperModeApplicable:d,availableAlternativePaymentMethods:u=[],enabledAlternativePaymentMethods:l=[]}=i,h=l,p=u.filter(e=>!l.includes(e)),m=Fo(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":a,\"enable-funding\":h.length>0?h:void 0,\"disable-funding\":p.length>0?p:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:r},d&&{\"buyer-country\":s}),m&&{locale:m}),attributes:{\"data-partner-attribution-id\":c,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new Ft(Rt.MissingPaymentMethod);const{clientId:r,merchantId:o,attributionId:a,isDeveloperModeApplicable:s,buyerCountry:c}=i,d=Fo(n);return{options:Object.assign(Object.assign({\"client-id\":r,\"merchant-id\":o,components:[\"messages\"],currency:t},s&&{\"buyer-country\":c}),d&&{locale:d}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":a}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}function Lo(e){if(!function(e){return!!e.initializationData&&\"attributionId\"in e.initializationData&&\"isVenmoEnabled\"in e.initializationData&&\"isGooglePayEnabled\"in e.initializationData&&\"isPayPalCreditAvailable\"in e.initializationData}(e))throw new Ft(Rt.MissingPaymentMethod)}var Uo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Vo extends jr{constructor(e,t){super(\"paypalsb\",e),this.payPalCommerceSdk=t,this.service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});var r,o,a,s,c;return Uo(this,void 0,void 0,function*(){const d=this.service.getState(),u=null!==(o=null===(r=d.getStoreConfig())||void 0===r?void 0:r.currency.code)&&void 0!==o?o:n;if(!u)throw new Ft(Rt.MissingPaymentMethod);yield i.initialize.call(this,e,t,u);const l=i.getPaymentMethod.call(this);if(!l.initializationData)throw new Ft(Rt.MissingPaymentMethod);Lo(l);const h=yield this.payPalCommerceSdk.getPayPalGooglePaySdk(l,u,d.getLocale());this.googlepayConfig=yield h.Googlepay().config();const{allowedPaymentMethods:p}=this.googlepayConfig;this.setGatewayIdentifier(null===(c=null===(s=null===(a=p[0])||void 0===a?void 0:a.tokenizationSpecification)||void 0===s?void 0:s.parameters)||void 0===c?void 0:c.gateway)})}getPaymentGatewayParameters(){if(this.googlepayConfig){const{allowedPaymentMethods:e}=this.googlepayConfig,{gatewayMerchantId:t}=e[0].tokenizationSpecification.parameters;return{gateway:this.getGatewayIdentifier(),gatewayMerchantId:t}}return{gateway:this.getGatewayIdentifier()}}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return Uo(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n})}}const qo=Xt(e=>new qr(e,new Gr($r(),new Vo(e,new jo((0,d.vQ)())),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaypaypalcommerce\"}]);var Ho=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Go extends jr{constructor(e,t){super(\"googlepay_bigcommerce_payments\",e),this.payPalSdkHelper=t,this.service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});var r,o,a,s,c;return Ho(this,void 0,void 0,function*(){const d=null!==(o=null===(r=this.service.getState().getStoreConfig())||void 0===r?void 0:r.currency.code)&&void 0!==o?o:n;if(!d)throw new Ft(Rt.MissingPaymentMethod);yield i.initialize.call(this,e,t,d);const u=i.getPaymentMethod.call(this);if(!u.initializationData)throw new Ft(Rt.MissingPaymentMethod);Lo(u);const l=yield this.payPalSdkHelper.getPayPalGooglePaySdk(u,d);this.googlepayConfig=yield l.Googlepay().config();const{allowedPaymentMethods:h}=this.googlepayConfig;this.setGatewayIdentifier(null===(c=null===(s=null===(a=h[0])||void 0===a?void 0:a.tokenizationSpecification)||void 0===s?void 0:s.parameters)||void 0===c?void 0:c.gateway)})}getPaymentGatewayParameters(){if(this.googlepayConfig){const{allowedPaymentMethods:e}=this.googlepayConfig,{gatewayMerchantId:t}=e[0].tokenizationSpecification.parameters;return{gateway:this.getGatewayIdentifier(),gatewayMerchantId:t}}return{gateway:this.getGatewayIdentifier()}}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return Ho(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n})}}const Wo=Xt(e=>new qr(e,new Gr($r(),new Go(e,new _i((0,d.vQ)())),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepay_bigcommerce_payments\"}]);function $o(){const{navigator:e}=window;let t;return t=e.language?e.language:e.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof e.javaEnabled&&e.javaEnabled(),language:t,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}var Yo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ko extends jr{constructor(e,t){super(\"worldlinena\",e),this.formPoster=t}extraPaymentData(){return Yo(this,void 0,void 0,function*(){return Promise.resolve({browser_info:$o()})})}processAdditionalAction(e){return Yo(this,void 0,void 0,function*(){if(!function(e){return Zr(e)&&(t=e.body,(0,P.isObject)(t)&&\"object\"==typeof t&&\"errors\"in t&&\"three_ds_result\"in t&&(0,P.isArray)(t.errors)&&(0,P.some)(t.errors,{code:\"three_d_secure_required\"}));var t}(e))throw e;const{three_ds_result:t}=e.body,{acs_url:n,payer_auth_request:i,merchant_data:r}=t||{};if(!n||!i||!r)throw new Yi([\"formUrl\",\"threeDSSessionData\",\"creq\"]);return new Promise(e=>{this.formPoster.postForm(n,{threeDSSessionData:i,creq:r},e,\"_top\")})})}}const Qo=Xt(e=>new qr(e,new Gr($r(),new Ko(e,(0,Fn.createFormPoster)()),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaytdonlinemart\"}]);var Jo,Zo,Xo,ea,ta,na,ia,ra,oa,aa,sa=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ca{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,i,r){return sa(this,void 0,void 0,function*(){if(!this.window.paypal||r){const r=this.getPayPalSdkScriptConfigOrThrow(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypal)throw new Qt}return this.window.paypal})}getPayPalFastlaneSdk(e,t,n,i){return sa(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const r=this.getPayPalFastlaneSdkConfiguration(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypalFastlaneSdk)throw new Qt}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i,r){return sa(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||r){const r=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i);yield this.loadPayPalSdk(r)}if(!this.window.paypalGooglePay)throw new Qt;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return sa(this,void 0,void 0,function*(){if(!this.window.paypalApms){const i=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.paypalApms)throw new Qt}return this.window.paypalApms})}getPayPalMessages(e,t,n){return sa(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const i=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.paypalMessages)throw new Qt;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return sa(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:i})})}getPayPalSdkScriptConfigOrThrow(e,t,n,i=!0){const{id:r,clientToken:o,initializationData:a}=e;if(!a||!a.clientId)throw new Ft(Rt.MissingPaymentMethod);const{intent:s,clientId:c,merchantId:d,buyerCountry:u,attributionId:l,isVenmoEnabled:h,isHostedCheckoutEnabled:p,isPayPalCreditAvailable:m,isDeveloperModeApplicable:y,availableAlternativePaymentMethods:f=[],enabledAlternativePaymentMethods:g=[],isGooglePayEnabled:v}=a,_=p||i,b=\"paypalcommercecreditcards\"===r||\"bigcommerce_payments_creditcards\"===r,S=b?[\"card\"]:[],w=m?[\"credit\",\"paylater\"]:[],C=h?[\"venmo\"]:[],I=v?[\"googlepay\"]:[],P=i?[\"card-fields\"]:[],E=[...b?[]:[\"card\"],...m?[]:[\"credit\",\"paylater\"],...h?[]:[\"venmo\"],...f.filter(e=>!g.includes(e))],O=[...S,...w,...C,...g],A=Fo(n);return{options:Object.assign(Object.assign({\"client-id\":c,\"merchant-id\":d,\"enable-funding\":O.length>0?O:void 0,\"disable-funding\":E.length>0?E:void 0,commit:_,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...I,...P],currency:t,intent:s},y&&{\"buyer-country\":u}),A&&{locale:A}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":o}}}getPayPalFastlaneSdkConfiguration(e,t,n,i){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new Ft(Rt.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:c,attributionId:d}=o,u=Fo(i);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":c,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t},u&&{locale:u}),{intent:a}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":d,\"data-sdk-client-token\":r}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i=!0){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new Ft(Rt.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:c,buyerCountry:d,attributionId:u,isHostedCheckoutEnabled:l,isDeveloperModeApplicable:h}=o,p=l||i,m=Fo(n);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":c,commit:p,components:[\"googlepay\"],currency:t,intent:a},h&&{\"buyer-country\":d}),m&&{locale:m}),attributes:{\"data-partner-attribution-id\":u,\"data-client-token\":r,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new Ft(Rt.MissingPaymentMethod);const{intent:r,clientId:o,merchantId:a,buyerCountry:s,attributionId:c,isDeveloperModeApplicable:d,availableAlternativePaymentMethods:u=[],enabledAlternativePaymentMethods:l=[]}=i,h=l,p=u.filter(e=>!l.includes(e)),m=Fo(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":a,\"enable-funding\":h.length>0?h:void 0,\"disable-funding\":p.length>0?p:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:r},d&&{\"buyer-country\":s}),m&&{locale:m}),attributes:{\"data-partner-attribution-id\":c,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new Ft(Rt.MissingPaymentMethod);const{clientId:r,merchantId:o,attributionId:a,isDeveloperModeApplicable:s,buyerCountry:c}=i,d=Fo(n);return{options:Object.assign(Object.assign({\"client-id\":r,\"merchant-id\":o,components:[\"messages\"],currency:t},s&&{\"buyer-country\":c}),d&&{locale:d}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":a}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}function da(){return new ca((0,d.vQ)())}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Jo||(Jo={})),function(e){e.Always=\"SCA_ALWAYS\"}(Zo||(Zo={})),function(e){e.Succeeded=\"succeeded\",e.Cancelled=\"cancelled\",e.Errored=\"errored\"}(Xo||(Xo={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(ea||(ea={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(ta||(ta={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(na||(na={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(ia||(ia={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"canceled\",e.UNRECOGNIZED=\"unrecognized\"}(ra||(ra={})),function(e){e.OXXO=\"oxxo\"}(oa||(oa={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(aa||(aa={}));var ua=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class la{constructor(e,t,n,i){this.formPoster=e,this.paymentIntegrationService=t,this.paypalRequestSender=n,this.paypalSdkLoader=i}loadPayPalSdk(e,t,n,i){return ua(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e),s=r.getLocale();return this.paypalSdk=yield this.paypalSdkLoader.getPayPalSDK(a,o,s,n,i),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new Qt;return this.paypalSdk}createBuyNowCartOrThrow(e){return ua(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new Ft(Rt.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new Bn}})}createOrder(e,t){return ua(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i}=yield this.paypalRequestSender.createOrder(e,Object.assign({cartId:n},t));return i})}createOrderCardFields(e,t){return ua(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i,setupToken:r}=yield this.paypalRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:i},r?{setupToken:r}:{})})}updateOrder(e,t,n,i){return ua(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=r.getCartOrThrow();let a;i||(a=r.getConsignmentsOrThrow()[0]);try{yield this.paypalRequestSender.updateOrder(e,Object.assign(Object.assign({availableShippingOptions:i?[]:null==a?void 0:a.availableShippingOptions,cartId:o.id,selectedShippingOption:i?null:null==a?void 0:a.selectedShippingOption},t?{methodId:t}:{}),n?{orderId:n}:{}))}catch(e){throw new Ln}})}getOrderStatus(e,t){return ua(this,void 0,void 0,function*(){try{const{status:n}=yield this.paypalRequestSender.getOrderStatus(e,t);return n}catch(e){throw new Ln}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new Ft(Rt.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===ve.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return ua(this,void 0,void 0,function*(){const i={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:i},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],i=n.find(e=>e.isRecommended),r=(e?n.find(t=>t.id===e):n.find(e=>{if(t.selectedShippingOption){const n=t.selectedShippingOption.id;return e.id===n}return!1}))||i||n[0];if(!r)throw new Error(\"Your order can't be shipped to this address\");return r}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:i,name:{full_name:r}}=n[0].shipping,[o,...a]=r.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:i.address_line_1,address2:i.address_line_2,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})}getValidButtonStyle(e={}){const{color:t,height:n,label:i,shape:r}=e,o={color:t&&na[t]?t:void 0,height:this.getValidHeight(n),label:i&&ta[i]?i:void 0,shape:r&&ia[r]?r:void 0};return(0,P.omitBy)(o,P.isNil)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}var ha=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class pa{constructor(e){this.requestSender=e}createOrder(e,t){return ha(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn);return(yield this.requestSender.post(n,{headers:r,body:i})).body})}updateOrder(e,t){return ha(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn);return(yield this.requestSender.put(n,{headers:r,body:i})).body})}getOrderStatus(e,t){return ha(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body})}}const ma=e=>{const{getHost:t}=e.getState();return new la((0,Fn.createFormPoster)(),e,new pa((0,o.createRequestSender)({host:t()})),da())};var ya=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};const fa=class{constructor(e,t){this.paymentIntegrationService=e,this.paypalIntegrationService=t}createPayPalButton(e,t,n,i){const{style:r,fundingSource:o,isHostedCheckoutEnabled:a,isServerSideShippingCallbacksEnabled:s,onClick:c,onCancel:d,onPaymentComplete:u,onError:l}=n;this.onError=l;const h=this.paypalIntegrationService.getPayPalSdkOrThrow();if(!Object.values(h.FUNDING).includes(o))throw new en('Unable to initialize PayPal button because \"fundingSource\" argument is not valid funding source.');const p=Object.assign(Object.assign({},!s&&{onShippingAddressChange:t=>this.onShippingAddressChange(t,e),onShippingOptionsChange:t=>this.onShippingOptionsChange(t,e)}),{onApprove:(n,i)=>this.onHostedCheckoutApprove(n,i,t,e,u,s)});return h.Buttons(Object.assign(Object.assign(Object.assign({fundingSource:o,style:this.paypalIntegrationService.getValidButtonStyle(r),createOrder:()=>ya(this,void 0,void 0,function*(){if(i){const e=yield this.paypalIntegrationService.createBuyNowCartOrThrow(i);yield this.paymentIntegrationService.loadCheckout(e.id)}return this.paypalIntegrationService.createOrder(e)}),onApprove:({orderID:e})=>this.paypalIntegrationService.tokenizePayment(t,e)},c?{onClick:c}:{}),d?{onCancel:d}:{}),a&&p))}onHostedCheckoutApprove(e,t,n,i,r,o){return ya(this,void 0,void 0,function*(){if(!e.orderID)throw new Ft(Rt.MissingOrderId);const a=this.paymentIntegrationService.getState().getCartOrThrow();try{const s=a.lineItems.physicalItems.length>0;if(!o){const e=yield t.order.get(),n=this.paypalIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),s){const t=this.paypalIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}s&&(yield this.paypalIntegrationService.updateOrder(i,void 0,void 0,o)),o&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalIntegrationService.submitPayment(n,e.orderID),r&&\"function\"==typeof r&&r()}catch(e){this.handleError(e)}})}onShippingAddressChange(e,t){return ya(this,void 0,void 0,function*(){const n=this.paypalIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(n),yield this.paymentIntegrationService.updateShippingAddress(n);const e=this.paypalIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalIntegrationService.updateOrder(t)}catch(e){this.handleError(e)}})}onShippingOptionsChange(e,t){return ya(this,void 0,void 0,function*(){const n=this.paypalIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(n.id),yield this.paypalIntegrationService.updateOrder(t)}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}};var ga=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class va{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalButtonCreationService=n}initialize(e){return ga(this,void 0,void 0,function*(){const{paypalcommerce:t,methodId:n}=e;if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');if(!t.container)throw new en('Unable to initialize payment because \"options.paypalcommerce.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new en('Unable to initialize payment because \"options.paypalcommerce.onClick\" argument is not a function.');this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.paypalIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return ga(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()})}signOut(e){return ga(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:i,onComplete:r,onError:o}=t,a=this.paypalIntegrationService.getPayPalSdkOrThrow(),s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:c,paymentButtonStyles:d,isServerSideShippingCallbacksEnabled:u}=s.initializationData||{},{checkoutTopButtonStyles:l}=d||{},h=Object.assign(Object.assign(Object.assign({fundingSource:a.FUNDING.PAYPAL,isServerSideShippingCallbacksEnabled:u,isHostedCheckoutEnabled:c,style:Object.assign(Object.assign({},l),{height:oi})},i&&{onClick:()=>i()}),c&&r&&{onPaymentComplete:()=>r()}),{onError:o}),p=this.paypalButtonCreationService.createPayPalButton(\"paypalcommerce\",e,h);p.isEligible()?p.render(`#${n}`):this.paypalIntegrationService.removeElement(n)}}const _a=Xt(e=>{const t=ma(e),n=new fa(e,t);return new va(e,t,n)},[{id:\"paypalcommerce\"}]);var ba,Sa,wa,Ca,Ia,Pa,Ea;!function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(ba||(ba={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Sa||(Sa={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(wa||(wa={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(Ca||(Ca={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(Ia||(Ia={})),function(e){e.OXXO=\"oxxo\",e.IDEAL=\"ideal\"}(Pa||(Pa={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(Ea||(Ea={}));var Oa=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Aa{constructor(e,t,n,i){this.formPoster=e,this.paymentIntegrationService=t,this.paypalCommerceRequestSender=n,this.paypalCommerceScriptLoader=i}loadPayPalSdk(e,t,n,i){return Oa(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e);return this.paypalSdk=yield this.paypalCommerceScriptLoader.getPayPalSDK(a,o,r.getLocale(),n,i),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new Qt;return this.paypalSdk}createBuyNowCartOrThrow(e){return Oa(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new Ft(Rt.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new Bn}})}createOrder(e,t){return Oa(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i}=yield this.paypalCommerceRequestSender.createOrder(e,Object.assign({cartId:n},t));return i})}createOrderCardFields(e,t){return Oa(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i,setupToken:r}=yield this.paypalCommerceRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:i},r?{setupToken:r}:{})})}updateOrder(e){return Oa(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getConsignmentsOrThrow()[0];try{yield this.paypalCommerceRequestSender.updateOrder({availableShippingOptions:e?[]:i.availableShippingOptions,cartId:n.id,selectedShippingOption:e?null:i.selectedShippingOption})}catch(e){throw new Ln}})}getOrderStatus(e,t){return Oa(this,void 0,void 0,function*(){try{const{status:n}=yield this.paypalCommerceRequestSender.getOrderStatus(e,t);return n}catch(e){throw new Ln}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new Ft(Rt.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===ve.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return Oa(this,void 0,void 0,function*(){const i={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:i},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],i=n.find(e=>e.isRecommended),r=e?n.find(t=>t.id===e):n.find(e=>{var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)}),o=r||i||n[0];if(!o)throw new Error(\"Your order can't be shipped to this address\");return o}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:i,name:{full_name:r}}=n[0].shipping,[o,...a]=r.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:i.address_line_1,address2:i.address_line_2,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})}getValidButtonStyle(e){const{color:t,height:n,label:i,shape:r}=e||{},o={color:t&&Ca[t]?t:void 0,height:this.getValidHeight(n),label:i&&wa[i]?i:void 0,shape:r&&Ia[r]?r:void 0};return(0,P.omitBy)(o,P.isNil)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}var Ta=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ka{constructor(e){this.requestSender=e}createOrder(e,t){return Ta(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn);return(yield this.requestSender.post(n,{headers:r,body:i})).body})}updateOrder(e){return Ta(this,void 0,void 0,function*(){const t=e,n=Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn);return(yield this.requestSender.put(\"/api/storefront/initialization/paypalcommerce\",{headers:n,body:t})).body})}getOrderStatus(e=\"paypalcommerce\",t){return Ta(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body})}}var xa=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ma{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,i,r){return xa(this,void 0,void 0,function*(){const o=this.getPayPalSdkScriptConfigOrThrow(e,t,n,i);return this.loadPayPalSDK(o,r)})}loadPayPalSDK(e,t=!1){return xa(this,void 0,void 0,function*(){if(!this.window.paypal||t){const t=this.transformConfig(e.options),n=this.transformConfig(e.attributes),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(t).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:n})}if(!this.window.paypal)throw new Qt;return this.window.paypal})}getPayPalSdkScriptConfigOrThrow(e,t,n,i=!0){const{id:r,clientToken:o,initializationData:a}=e;if(!(null==a?void 0:a.clientId))throw new Ft(Rt.MissingPaymentMethod);const{intent:s,clientId:c,merchantId:d,buyerCountry:u,attributionId:l,isVenmoEnabled:h,isHostedCheckoutEnabled:p,isPayPalCreditAvailable:m,isDeveloperModeApplicable:y,availableAlternativePaymentMethods:f=[],enabledAlternativePaymentMethods:g=[],isGooglePayEnabled:v}=a,_=p||i,b=\"paypalcommercecreditcards\"===r,S=b?[\"card\"]:[],w=m?[\"credit\",\"paylater\"]:[],C=h?[\"venmo\"]:[],I=v?[\"googlepay\"]:[],P=i?[\"card-fields\"]:[],E=[...b?[]:[\"card\"],...m?[]:[\"credit\",\"paylater\"],...h?[]:[\"venmo\"],...f.filter(e=>!g.includes(e))],O=[...S,...w,...C,...g],A=Fo(n);return{options:Object.assign(Object.assign({\"client-id\":c,\"merchant-id\":d,\"enable-funding\":O.length>0?O:void 0,\"disable-funding\":E.length>0?E:void 0,commit:_,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...I,...P],currency:t,intent:s},y&&{\"buyer-country\":u}),A&&{locale:A}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":o}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}const Na=e=>{const{getHost:t}=e.getState();return new Aa((0,Fn.createFormPoster)(),e,new ka((0,o.createRequestSender)({host:t()})),new Ma((0,d.vQ)()))};var Da=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ra{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t,this.onError=P.noop}initialize(e){return Da(this,void 0,void 0,function*(){const{paypalcommercecredit:t,methodId:n}=e;if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.');if(!t.container)throw new en('Unable to initialize payment because \"options.paypalcommercecredit.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new en('Unable to initialize payment because \"options.paypalcommercecredit.onClick\" argument is not a function.');this.onError=t.onError||P.noop,this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.paypalCommerceIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Da(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Da(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onComplete:i,onClick:r}=t,o=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:s,paymentButtonStyles:c,isServerSideShippingCallbacksEnabled:d}=a.initializationData||{},{checkoutTopButtonStyles:u}=c||{},l=Object.assign({createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercecredit\"),onApprove:({orderID:t})=>this.paypalCommerceIntegrationService.tokenizePayment(e,t)},r&&{onClick:()=>r()}),h=Object.assign(Object.assign({},!d&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(t,n)=>this.onHostedCheckoutApprove(t,n,e,i,d)}),p=[o.FUNDING.PAYLATER,o.FUNDING.CREDIT];let m=!1;p.forEach(e=>{if(!m){const t=Object.assign(Object.assign({fundingSource:e,style:this.paypalCommerceIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},u),{height:oi}))},l),s&&h),i=o.Buttons(t);i.isEligible()&&(i.render(`#${n}`),m=!0)}}),m||this.paypalCommerceIntegrationService.removeElement(n)}onHostedCheckoutApprove(e,t,n,i,r){return Da(this,void 0,void 0,function*(){if(!e.orderID)throw new Ft(Rt.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!r){const e=yield t.order.get(),n=this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}a&&(yield this.paypalCommerceIntegrationService.updateOrder(r)),r&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalCommerceIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i()}catch(e){this.handleError(e)}})}onShippingAddressChange(e){return Da(this,void 0,void 0,function*(){const t=this.paypalCommerceIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.paypalCommerceIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalCommerceIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}onShippingOptionsChange(e){return Da(this,void 0,void 0,function*(){const t=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.paypalCommerceIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const za=Xt(e=>new Ra(e,Na(e)),[{id:\"paypalcommercecredit\"}]);var Fa=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ba{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}initialize(e){return Fa(this,void 0,void 0,function*(){const{paypalcommercevenmo:t,methodId:n}=e;if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');if(!t.container)throw new en('Unable to initialize payment because \"options.paypalcommercevenmo.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new en('Unable to initialize payment because \"options.paypalcommercevenmo.onClick\" argument is not a function.');this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.paypalCommerceIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Fa(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Fa(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:i}=t,r=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:a}=o.initializationData||{},{checkoutTopButtonStyles:s}=a||{},c=Object.assign({fundingSource:r.FUNDING.VENMO,style:this.paypalCommerceIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},s),{height:oi})),createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercevenmo\"),onApprove:({orderID:t})=>this.paypalCommerceIntegrationService.tokenizePayment(e,t)},i&&{onClick:()=>i()}),d=r.Buttons(c);d.isEligible()?d.render(`#${n}`):this.paypalCommerceIntegrationService.removeElement(n)}}const ja=Xt(e=>new Ba(e,Na(e)),[{id:\"paypalcommercevenmo\"}]);var La=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ua{constructor(){this.window=window}initializePayPalFastlane(e,t,n){return La(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\"),window.localStorage.setItem(\"axoEnv\",\"sandbox\")),!this.window.paypalFastlane){const t={root:{backgroundColorPrimary:\"transparent\"}};this.window.paypalFastlane=yield e.Fastlane({styles:n||t})}return this.window.paypalFastlane})}getPayPalFastlaneOrThrow(){if(!this.window.paypalFastlane)throw new Qt;return this.window.paypalFastlane}lookupCustomerOrThrow(e){return La(this,void 0,void 0,function*(){return this.getPayPalFastlaneOrThrow().identity.lookupCustomerByEmail(e)})}triggerAuthenticationFlowOrThrow(e){return La(this,void 0,void 0,function*(){return e?this.getPayPalFastlaneOrThrow().identity.triggerAuthenticationFlow(e):{}})}updateStorageSessionId(e){const t=new Date;t.setDate(t.getDate()+14);const n={expires:t,secure:!0};Si.set(\"bc-fastlane-sessionId\",e,n)}removeStorageSessionId(){Si.remove(\"bc-fastlane-sessionId\")}getStorageSessionId(){return Si.get(\"bc-fastlane-sessionId\")||\"\"}mapPayPalFastlaneProfileToBcCustomerData(e,t){var n,i,r;const{authenticationState:o,profileData:a}=t,s=null===(r=null===(i=null===(n=null==a?void 0:a.card)||void 0===n?void 0:n.paymentSource)||void 0===i?void 0:i.card)||void 0===r?void 0:r.billingAddress,c=null==a?void 0:a.shippingAddress,d=null==a?void 0:a.name,u=null==a?void 0:a.card,l=c?this.mapPayPalToBcAddress(c.address,c.name,c.phoneNumber):void 0,h=s&&d?this.mapPayPalToBcAddress(s,d,null==c?void 0:c.phoneNumber):void 0,p=u?this.mapPayPalToBcInstrument(e,u):[],m=this.filterAddresses([l,h]);return{authenticationState:o||ra.UNRECOGNIZED,addresses:m,billingAddress:h,shippingAddress:l,instruments:p}}mapPayPalToBcInstrument(e,t){const{id:n,paymentSource:i}=t,{brand:r,expiry:o,lastDigits:a}=i.card,[s,c]=o.split(\"-\");return[{bigpayToken:n,brand:r,defaultInstrument:!1,expiryMonth:c,expiryYear:s,iin:\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:di.PAN,type:\"card\"}]}mapBcToPayPalAddress(e){return{company:(null==e?void 0:e.company)||\"\",addressLine1:(null==e?void 0:e.address1)||\"\",addressLine2:(null==e?void 0:e.address2)||\"\",adminArea1:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",adminArea2:(null==e?void 0:e.city)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\"}}mapPayPalToBcAddress(e,t,n,i){const[r,o]=t.fullName.split(\" \"),a=(null==n?void 0:n.nationalNumber)||\"\",s=(null==n?void 0:n.countryCode)||\"\";return{id:Date.now(),type:\"paypal-address\",firstName:t.firstName||r||\"\",lastName:t.lastName||o||\"\",company:e.company||\"\",address1:e.addressLine1,address2:e.addressLine2||\"\",city:e.adminArea2,stateOrProvince:e.adminArea1,stateOrProvinceCode:e.adminArea1,country:e.countryCode||\"\",countryCode:e.countryCode||\"\",postalCode:e.postalCode,phone:s+a,customFields:i||[]}}filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this.isEqualAddresses(e,t))?e:[...e,t]:e,[])}isEqualAddresses(e,t){return(0,P.isEqual)(this.normalizeAddress(e),this.normalizeAddress(t))}normalizeAddress(e){return(0,P.omit)(e,[\"id\",\"phone\"])}}function Va(){return new Ua}function qa(e){return\"string\"!=typeof e}function Ha(e,t){if(t||e)return function(e){var t,n;const i={},r=(0,P.omitBy)(e.root,qa),o=(0,P.omitBy)(e.input,qa),a=(0,P.omitBy)(e.toggle,qa),s=(0,P.omitBy)(null===(t=e.text)||void 0===t?void 0:t.body,qa),c=(0,P.omitBy)(null===(n=e.text)||void 0===n?void 0:n.caption,qa),d=e.branding;return Object.keys(r).length&&(i.root=r),Object.keys(o).length&&(i.input=o),Object.keys(a).length&&(i.toggle=a),Object.keys(s).length&&(i.text={},i.text.body=s),Object.keys(c).length&&(i.text=Object.assign({},i.text),i.text.caption=c),d&&(i.branding=d),i}(function(e,t){var n,i,r,o,a,s,c,d,u,l,h,p,m,y,f,g,v,_,b,S,w,C;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(y=null==t?void 0:t.toggle)||void 0===y?void 0:y.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(g=null===(f=null==t?void 0:t.text)||void 0===f?void 0:f.body)||void 0===g?void 0:g.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(_=null===(v=null==t?void 0:t.text)||void 0===v?void 0:v.body)||void 0===_?void 0:_.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(S=null===(b=null==t?void 0:t.text)||void 0===b?void 0:b.caption)||void 0===S?void 0:S.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(C=null===(w=null==t?void 0:t.text)||void 0===w?void 0:w.caption)||void 0===C?void 0:C.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}var Ga=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Wa{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalSdkScriptLoader=t,this.paypalFastlaneUtils=n}initialize(e){var t;return Ga(this,void 0,void 0,function*(){const{methodId:n,paypalcommercefastlane:i}=e;if(!n)throw new en('Unable to proceed because \"methodId\" argument is not provided.');try{yield this.paymentIntegrationService.loadPaymentMethod(n);const e=this.paymentIntegrationService.getState(),r=e.getCartOrThrow(),o=e.getPaymentMethodOrThrow(n),a=!!(null===(t=o.initializationData)||void 0===t?void 0:t.isDeveloperModeApplicable),s=yield this.paypalSdkScriptLoader.getPayPalFastlaneSdk(o,r.currency.code,r.id,e.getLocale());yield this.paypalFastlaneUtils.initializePayPalFastlane(s,a,this.getFastlaneStyles(n,i))}catch(e){}return Promise.resolve()})}deinitialize(){return Ga(this,void 0,void 0,function*(){return Promise.resolve()})}signIn(e,t){return Ga(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t),yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:void 0,addresses:void 0,instruments:void 0}),this.paypalFastlaneUtils.removeStorageSessionId()})}signOut(e){return Ga(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){return Ga(this,void 0,void 0,function*(){const{checkoutPaymentMethodExecuted:t,continueWithCheckoutCallback:n,methodId:i}=e||{};if(!i)throw new en('Unable to proceed because \"methodId\" argument is not provided.');if(\"function\"!=typeof n)throw new en('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');if(this.paymentIntegrationService.getState().getCustomerOrThrow().isGuest){t&&\"function\"==typeof t&&t();try{yield this.runPayPalAuthenticationFlowOrThrow(i)}catch(e){}}n()})}runPayPalAuthenticationFlowOrThrow(e){return Ga(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow().id,i=t.getCustomer(),r=t.getBillingAddress(),o=(null==i?void 0:i.email)||(null==r?void 0:r.email)||\"\",{customerContextId:a}=yield this.paypalFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(a),c=s.authenticationState===ra.CANCELED;yield this.updateCustomerDataState(e,s),c?this.paypalFastlaneUtils.removeStorageSessionId():this.paypalFastlaneUtils.updateStorageSessionId(n)})}updateCustomerDataState(e,t){var n;return Ga(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState().getCartOrThrow(),{authenticationState:r,addresses:o,billingAddress:a,shippingAddress:s,instruments:c}=this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,t);if(yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:r,addresses:o,instruments:c}),a&&(yield this.paymentIntegrationService.updateBillingAddress(a)),s&&i.lineItems.physicalItems.length>0){const t=yield this.paymentIntegrationService.updateShippingAddress(s),i=t.getPaymentMethodOrThrow(e),{isFastlaneShippingOptionAutoSelectEnabled:r}=i.initializationData||{},o=t.getConsignments()||[],a=(null===(n=o[0])||void 0===n?void 0:n.availableShippingOptions)||[],c=a[0],d=a.find(e=>e.isRecommended);if((d||c)&&r){const e=(null==d?void 0:d.id)||c.id;yield this.paymentIntegrationService.selectShippingOption(e)}}})}getFastlaneStyles(e,t){const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{fastlaneStyles:i,isFastlaneStylingEnabled:r}=n.initializationData||{};return Ha(r?i:{},null==t?void 0:t.styles)}}const $a=Xt(e=>new Wa(e,da(),Va()),[{id:\"paypalcommerceacceleratedcheckout\"},{id:\"paypalcommercecreditcards\"}]);function Ya(e){return\"object\"==typeof e&&null!==e&&\"initializationData\"in e&&void 0!==e.initializationData&&null!==e.initializationData&&\"object\"==typeof e.initializationData&&\"stripePublishableKey\"in e.initializationData&&\"stripeConnectedAccount\"in e.initializationData&&\"shopperLanguage\"in e.initializationData&&void 0!==e.initializationData.stripePublishableKey&&void 0!==e.initializationData.stripeConnectedAccount&&void 0!==e.initializationData.shopperLanguage}function Ka(e){return\"stripeLinkAuthenticationState\"in e}class Qa{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t}initialize(e){var t,n,i,r,o;return n=this,i=void 0,o=function*(){let n;if(!e.stripeupe)throw new en('Unable to proceed because \"options\" argument is not provided.');const{container:i,gatewayId:r,methodId:o,onEmailChange:a,getStyles:s,isLoading:c}=e.stripeupe;Object.entries(e.stripeupe).forEach(([e,t])=>{if(!t)throw new en(`Unable to proceed because \"${e}\" argument is not provided.`)}),yield this.paymentIntegrationService.loadPaymentMethod(r,{params:{method:o}});const d=this.paymentIntegrationService.getState(),u=d.getPaymentMethodOrThrow(o,r),{clientToken:l}=u;if(!Ya(u)||!l)throw new Ft(Rt.MissingPaymentToken);const{email:h}=d.getCustomerOrThrow(),p=d.getPaymentProviderCustomerOrThrow(),m=(Ka(p)?p:{}).stripeLinkAuthenticationState;if(!h){let e;const r=\"function\"==typeof s&&s();e=r?{variables:{colorPrimary:r.fieldInnerShadow,colorBackground:r.fieldBackground,colorText:r.labelText,colorDanger:r.fieldErrorText,colorTextSecondary:r.labelText,colorTextPlaceholder:r.fieldPlaceholderText},rules:{\".Input\":{borderColor:r.fieldBorder,color:r.fieldText,boxShadow:r.fieldInnerShadow}}}:{},n=yield this.scriptLoader.getStripeClient(u.initializationData,d.getCartLocale(),fo.V3,Co,Io),this._stripeElements=yield this.scriptLoader.getElements(n,{clientSecret:l,appearance:e});const{getBillingAddress:o,getConsignments:h}=this.paymentIntegrationService.getState(),p=h(),y=null===(t=null==p?void 0:p[0])||void 0===t?void 0:t.id,{email:f}=o()||{},g=f?{defaultValues:{mode:co.SHIPPING,email:f}}:{},v=this._stripeElements.getElement(go.AUTHENTICATION)||this._stripeElements.create(go.AUTHENTICATION,g);v.on(_o.CHANGE,e=>{if(!(\"authenticated\"in e))throw new Ft(Rt.MissingCustomer);this.paymentIntegrationService.updatePaymentProviderCustomer({stripeLinkAuthenticationState:e.authenticated}),e.complete?a(e.authenticated,e.value.email):a(!1,\"\"),c&&c(!1),void 0===m&&e.authenticated&&y&&this.paymentIntegrationService.deleteConsignment(y)}),v.mount(`#${i}`)}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())})}deinitialize(){var e,t;return null===(t=null===(e=this._stripeElements)||void 0===e?void 0:e.getElement(go.AUTHENTICATION))||void 0===t||t.unmount(),Promise.resolve()}signIn(e,t){return this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()}signOut(e){return this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}}const Ja=Xt(e=>new Qa(e,new wo((0,d.vQ)())),[{id:\"stripeupe\"}]);var Za=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Xa{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t,this.isMounted=!1}deinitialize(){var e;null===(e=this.checkoutEventsUnsubscribe)||void 0===e||e.call(this),this.isMounted=!1}initCheckoutEventsSubscription(e,t,n,i){this.checkoutEventsUnsubscribe=this.paymentIntegrationService.subscribe(()=>Za(this,void 0,void 0,function*(){var r;const o=null==i?void 0:i.getElement(go.PAYMENT);if(o){try{yield this.updateStripePaymentIntent(e,t)}catch(e){return this.isMounted&&(o.unmount(),this.isMounted=!1),void(e instanceof Error&&(null===(r=n.onError)||void 0===r||r.call(n,e)))}this.isMounted||(yield null==i?void 0:i.fetchUpdates(),this.mountElement(o,n.containerId))}}),e=>{var t;return null===(t=e.getCheckout())||void 0===t?void 0:t.outstandingBalance},e=>{var t;return null===(t=e.getCheckout())||void 0===t?void 0:t.coupons})}mountElement(e,t){document.getElementById(t)&&(e.mount(`#${t}`),this.isMounted=!0)}mapAppearanceVariables(e){return{colorPrimary:e.fieldInnerShadow,colorBackground:e.fieldBackground,colorText:e.labelText,colorDanger:e.fieldErrorText,colorTextSecondary:e.labelText,colorTextPlaceholder:e.fieldPlaceholderText,colorIcon:e.fieldPlaceholderText}}mapInputAppearanceRules(e){return{borderColor:e.fieldBorder,color:e.fieldText,boxShadow:e.fieldInnerShadow}}throwStripeError(e){if(\"object\"==typeof(t=e)&&null!==t&&\"type\"in t&&(this.throwDisplayableStripeError(e),this.isCancellationError(e)))throw new Tn;var t;throw new Fi}throwDisplayableStripeError(e){if((0,P.includes)([\"card_error\",\"invalid_request_error\",\"validation_error\"],e.type))throw new Error(e.message)}isCancellationError(e){var t;const n=null===(t=null==e?void 0:e.payment_intent.last_payment_error)||void 0===t?void 0:t.message;return!!n&&-1!==n.indexOf(\"canceled\")}throwPaymentConfirmationProceedMessage(){throw new Fi(\"We've received your order and are processing your payment. Once the payment is verified, your order will be completed. We will send you an email when it's completed. Please note, this process may take a few minutes depending on the processing times of your chosen method.\")}isPaymentCompleted(e,t){return Za(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getPaymentMethodOrThrow(e),{features:r}=n.getStoreConfigOrThrow().checkoutSettings;if(!i.clientToken||!t||!r[\"PI-626.Block_unnecessary_payment_confirmation_for_StripeUPE\"])return!1;const{paymentIntent:o}=yield t.retrievePaymentIntent(i.clientToken);return(null==o?void 0:o.status)===vo.SUCCEEDED})}mapStripePaymentData(e,t,n=!1){const i=this.paymentIntegrationService.getState().getBillingAddress(),{firstName:r=\"\",lastName:o=\"\",email:a=\"\"}=i||{},s=this.mapStripeAddress(i);if(!e)throw new Lt(zt.PaymentNotInitialized);if(!(a&&s&&s.city&&s.country&&r&&o))throw new Ft(Rt.MissingBillingAddress);return{elements:e,redirect:yo.IF_REQUIRED,confirmParams:Object.assign({payment_method_data:Object.assign(Object.assign({},n?{allow_redisplay:\"always\"}:{}),{billing_details:{email:a,address:s,name:this.getShopperFullName(i)}})},t&&{return_url:t})}}isAdditionalActionError(e){return(0,P.some)(e,{code:\"additional_action_required\"})}isRedirectAction(e){const{type:t,data:{redirect_url:n}}=e;return\"redirect_to_url\"===t&&!!n}isOnPageAdditionalAction(e){const{type:t,data:{token:n}}=e;return\"additional_action_requires_payment_method\"===t&&!!n}updateStripePaymentIntent(e,t){return Za(this,void 0,void 0,function*(){const n=yield this.paymentIntegrationService.loadPaymentMethod(e,{params:{method:t}}),{clientToken:i}=n.getPaymentMethodOrThrow(t);i&&this.scriptLoader.updateStripeElements({clientSecret:i})})}getStripeJsVersion(e){return e.useNewStripeJsVersion?fo.CLOVER:fo.V3}mapStripeAddress(e){if(e){const{city:t,address1:n,address2:i,countryCode:r,postalCode:o,stateOrProvinceCode:a}=e;return Object.assign({city:t,country:r,postal_code:o,line1:n,line2:i},a?{state:a}:{})}throw new Ft(Rt.MissingBillingAddress)}getShopperFullName(e){const{firstName:t=\"\",lastName:n=\"\"}=e||{};return`${t} ${n}`.trim()}verifyCheckoutSpamProtection(){return Za(this,void 0,void 0,function*(){const{shouldExecuteSpamCheck:e}=this.paymentIntegrationService.getState().getCheckoutOrThrow();e&&(yield this.paymentIntegrationService.verifyCheckoutSpamProtection())})}}const es={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},ts={position:\"fixed\",\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},ns=\"embedded-checkout-loading-indicator-rotation\";class is{constructor(e){this.styles=Object.assign(Object.assign({},es),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${ns} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(n=>{e.style.setProperty(n,t[n])})}defineAnimation(){var e;if(document.getElementById(ns))return;const t=document.createElement(\"style\");t.id=ns,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${ns} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}class rs{constructor(e){this._decimalPlaces=e}toInteger(e){return Math.round(e*Math.pow(10,this._decimalPlaces))}}const os=[\"AC\",\"AD\",\"AE\",\"AF\",\"AG\",\"AI\",\"AL\",\"AM\",\"AO\",\"AQ\",\"AR\",\"AT\",\"AU\",\"AW\",\"AX\",\"AZ\",\"BA\",\"BB\",\"BD\",\"BE\",\"BF\",\"BG\",\"BH\",\"BI\",\"BJ\",\"BL\",\"BM\",\"BN\",\"BO\",\"BQ\",\"BR\",\"BS\",\"BT\",\"BV\",\"BW\",\"BY\",\"BZ\",\"CA\",\"CD\",\"CF\",\"CG\",\"CH\",\"CI\",\"CK\",\"CL\",\"CM\",\"CN\",\"CO\",\"CR\",\"CV\",\"CW\",\"CY\",\"CZ\",\"DE\",\"DJ\",\"DK\",\"DM\",\"DO\",\"DZ\",\"EC\",\"EE\",\"EG\",\"EH\",\"ER\",\"ES\",\"ET\",\"FI\",\"FJ\",\"FK\",\"FO\",\"FR\",\"GA\",\"GB\",\"GD\",\"GE\",\"GF\",\"GG\",\"GH\",\"GI\",\"GL\",\"GM\",\"GN\",\"GP\",\"GQ\",\"GR\",\"GS\",\"GT\",\"GU\",\"GW\",\"GY\",\"HK\",\"HN\",\"HR\",\"HT\",\"HU\",\"ID\",\"IE\",\"IL\",\"IM\",\"IN\",\"IO\",\"IQ\",\"IS\",\"IT\",\"JE\",\"JM\",\"JO\",\"JP\",\"KE\",\"KG\",\"KH\",\"KI\",\"KM\",\"KN\",\"KR\",\"KW\",\"KY\",\"KZ\",\"LA\",\"LB\",\"LC\",\"LI\",\"LK\",\"LR\",\"LS\",\"LT\",\"LU\",\"LV\",\"LY\",\"MA\",\"MC\",\"MD\",\"ME\",\"MF\",\"MG\",\"MK\",\"ML\",\"MM\",\"MN\",\"MO\",\"MQ\",\"MR\",\"MS\",\"MT\",\"MU\",\"MV\",\"MW\",\"MX\",\"MY\",\"MZ\",\"NA\",\"NC\",\"NE\",\"NG\",\"NI\",\"NL\",\"NO\",\"NP\",\"NR\",\"NU\",\"NZ\",\"OM\",\"PA\",\"PE\",\"PF\",\"PG\",\"PH\",\"PK\",\"PL\",\"PM\",\"PN\",\"PR\",\"PS\",\"PT\",\"PY\",\"QA\",\"RE\",\"RO\",\"RS\",\"RU\",\"RW\",\"SA\",\"SB\",\"SC\",\"SD\",\"SE\",\"SG\",\"SH\",\"SI\",\"SJ\",\"SK\",\"SL\",\"SM\",\"SN\",\"SO\",\"SR\",\"SS\",\"ST\",\"SV\",\"SX\",\"SZ\",\"TA\",\"TC\",\"TD\",\"TF\",\"TG\",\"TH\",\"TJ\",\"TK\",\"TL\",\"TM\",\"TN\",\"TO\",\"TR\",\"TT\",\"TV\",\"TW\",\"TZ\",\"UA\",\"UG\",\"US\",\"UY\",\"UZ\",\"VA\",\"VC\",\"VE\",\"VG\",\"VN\",\"VU\",\"WF\",\"WS\",\"XK\",\"YE\",\"YT\",\"ZA\",\"ZM\",\"ZW\",\"ZZ\"];var as=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ss{constructor(e,t,n,i){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=n,this.loadingIndicator=i}initialize(e){return as(this,void 0,void 0,function*(){const{stripeocs:t}=e||{};if(!t)throw new en('Unable to proceed because \"options\" argument is not provided.');const{gatewayId:n,container:i}=t;if(!i||!n)throw new Lt(zt.PaymentNotInitialized);const r=this._getMethodId(n),o=yield this.paymentIntegrationService.loadPaymentMethod(n,{params:{method:r}}),a=o.getPaymentMethodOrThrow(r,n),{loadingContainerId:s,buttonHeight:c,onComplete:d}=t;if(this._loadingIndicatorContainer=s,this._onComplete=d,!Ya(a))throw new Ft(Rt.MissingPaymentMethod);const{initializationData:u}=a,{captureMethod:l}=u,h=this.stripeIntegrationService.getStripeJsVersion(u);this._captureMethod=l,this._stripeClient=yield this.scriptLoader.getStripeClient(u,o.getCartLocale(),h),yield this._mountExpressCheckoutElement(i,this._stripeClient,c),this._initializeEvents(r)})}signIn(){return Promise.resolve()}signOut(){return Promise.resolve()}executePaymentMethodCheckout(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_mountExpressCheckoutElement(e,t,n=40){return as(this,void 0,void 0,function*(){const i=this._shouldRequireShippingAddress(),r=Object.assign(Object.assign(Object.assign({shippingAddressRequired:i},i?{allowedShippingCountries:yield this._getAvailableCountries()}:{}),i?{shippingRates:[{id:\"_\",amount:0,displayName:\"Pending rates\"}]}:{}),{billingAddressRequired:!0,emailRequired:!0,phoneNumberRequired:!0,paymentMethods:{link:yo.AUTO,applePay:yo.NEVER,googlePay:yo.NEVER,amazonPay:yo.NEVER,paypal:yo.NEVER,klarna:yo.NEVER},buttonHeight:n}),{cartAmount:o}=this.paymentIntegrationService.getState().getCartOrThrow(),a=Object.assign({mode:\"payment\",amount:this._toCents(o),currency:this._getCurrency()},this._captureMethod?{captureMethod:this._captureMethod}:{});return this._stripeElements=t.elements(a),this._linkV2Element=this._stripeElements.create(go.EXPRESS_CHECKOUT,r),this._linkV2Element.mount(`#${e}`),this._linkV2Element})}_initializeEvents(e){this._linkV2Element&&(this._shouldRequireShippingAddress()&&(this._linkV2Element.on(_o.SHIPPING_ADDRESS_CHANGE,e=>as(this,void 0,void 0,function*(){return this._onShippingAddressChange(e)})),this._linkV2Element.on(_o.SHIPPING_RATE_CHANGE,e=>as(this,void 0,void 0,function*(){return this._onShippingRateChange(e)}))),this._linkV2Element.on(_o.CONFIRM,t=>as(this,void 0,void 0,function*(){return this._onConfirm(t,e)})),this._linkV2Element.on(_o.CANCEL,this._onCancel))}_onShippingAddressChange(e){return as(this,void 0,void 0,function*(){if(!(\"address\"in e))return;const t=e.address,n={firstName:\"\",lastName:\"\",phone:\"\",company:\"\",address1:\"\",address2:\"\",city:(null==t?void 0:t.city)||\"\",countryCode:(null==t?void 0:t.country)||\"\",postalCode:(null==t?void 0:t.postal_code)||\"\",stateOrProvince:(null==t?void 0:t.state)||\"\",stateOrProvinceCode:(null==t?void 0:t.state)||\"\",customFields:[]};yield this.paymentIntegrationService.updateShippingAddress(n);const i=yield this._getAvailableShippingOptions();yield this._updateDisplayedPrice(),(null==i?void 0:i.length)?e.resolve({shippingRates:i}):e.reject()})}_onCancel(){throw new Tn}_onShippingRateChange(e){return as(this,void 0,void 0,function*(){if(\"shippingRate\"in e){const{shippingRate:t}=e;yield this._handleShippingOptionChange(null==t?void 0:t.id),yield this._updateDisplayedPrice(),e.resolve({})}})}_onConfirm(e,t){return as(this,void 0,void 0,function*(){if(\"billingDetails\"in e&&\"shippingAddress\"in e&&this._stripeClient&&this._stripeElements){yield this.stripeIntegrationService.verifyCheckoutSpamProtection(),yield this._updateShippingAndBillingAddress(e),yield this.paymentIntegrationService.submitOrder();const n=this._getPaymentPayload(t);try{yield this.paymentIntegrationService.submitPayment(n)}catch(e){yield this._processAdditionalAction(e,t)}}return Promise.resolve()})}_updateShippingAndBillingAddress(e){var t,n,i,r,o,a,s,c;return as(this,void 0,void 0,function*(){const d=this._shouldRequireShippingAddress(),u=(null===(n=null===(t=e.shippingAddress)||void 0===t?void 0:t.name)||void 0===n?void 0:n.split(\" \")[0])||(null===(r=null===(i=e.billingDetails)||void 0===i?void 0:i.name)||void 0===r?void 0:r.split(\" \")[0])||\"\",l=(null===(a=null===(o=e.shippingAddress)||void 0===o?void 0:o.name)||void 0===a?void 0:a.split(\" \")[1])||(null===(c=null===(s=e.billingDetails)||void 0===s?void 0:s.name)||void 0===c?void 0:c.split(\" \")[1])||\"\";if(d){const t=this._mapShippingAddress(e.shippingAddress,e.billingDetails,u,l);yield this.paymentIntegrationService.updateShippingAddress(t)}const h=this._mapBillingAddress(e.shippingAddress,e.billingDetails,u,l);yield this.paymentIntegrationService.updateBillingAddress(h)})}_mapShippingAddress(e,t,n,i){var r,o,a,s,c,d,u;return{firstName:n,lastName:i,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==e?void 0:e.address)||void 0===r?void 0:r.line1)||\"\",address2:(null===(o=null==e?void 0:e.address)||void 0===o?void 0:o.line2)||\"\",city:(null===(a=null==e?void 0:e.address)||void 0===a?void 0:a.city)||\"\",countryCode:(null===(s=null==e?void 0:e.address)||void 0===s?void 0:s.country)||\"\",postalCode:(null===(c=null==e?void 0:e.address)||void 0===c?void 0:c.postal_code)||\"\",stateOrProvince:(null===(d=null==e?void 0:e.address)||void 0===d?void 0:d.state)||\"\",stateOrProvinceCode:(null===(u=null==e?void 0:e.address)||void 0===u?void 0:u.state)||\"\",customFields:[]}}_mapBillingAddress(e,t,n,i){var r,o,a,s,c,d;return{email:(null==t?void 0:t.email)||\"\",firstName:n,lastName:i,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==t?void 0:t.address)||void 0===r?void 0:r.line1)||\"\",address2:\"\",city:(null===(o=null==t?void 0:t.address)||void 0===o?void 0:o.city)||\"\",countryCode:(null===(a=null==t?void 0:t.address)||void 0===a?void 0:a.country)||\"\",postalCode:(null===(s=null==t?void 0:t.address)||void 0===s?void 0:s.postal_code)||\"\",stateOrProvince:(null===(c=null==t?void 0:t.address)||void 0===c?void 0:c.state)||\"\",stateOrProvinceCode:(null===(d=null==e?void 0:e.address)||void 0===d?void 0:d.state)||\"\",customFields:[]}}_processAdditionalAction(e,t){return as(this,void 0,void 0,function*(){if(!Zr(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this._stripeClient||!this._stripeElements)throw new Lt(zt.PaymentNotInitialized);const{data:n}=e.body.additional_action_required,{token:i}=n,{paymentIntent:r}=yield this._confirmStripePaymentOrThrow(n,t),o=this._getPaymentPayload(t,(null==r?void 0:r.id)||i);try{this._toggleLoadingIndicator(!0),yield this.paymentIntegrationService.submitPayment(o),yield this._completeCheckoutFlow()}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}finally{this._toggleLoadingIndicator(!1)}})}_confirmStripePaymentOrThrow(e,t){var n,i,r;return as(this,void 0,void 0,function*(){const{token:o,redirect_url:a}=e,s=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,a);let c;try{const e=(yield this.stripeIntegrationService.isPaymentCompleted(t,this._stripeClient))?yield null===(r=this._stripeClient)||void 0===r?void 0:r.retrievePaymentIntent(o||\"\"):yield null===(n=this._stripeClient)||void 0===n?void 0:n.confirmPayment({elements:s.elements,clientSecret:o,redirect:yo.IF_REQUIRED,confirmParams:{return_url:null===(i=s.confirmParams)||void 0===i?void 0:i.return_url}});if(c=null==e?void 0:e.error,c||!(null==e?void 0:e.paymentIntent))throw new Fi;return e}catch(e){return this.stripeIntegrationService.throwStripeError(c)}})}_completeCheckoutFlow(){return as(this,void 0,void 0,function*(){return\"function\"==typeof this._onComplete?this._onComplete():(window.location.replace(\"/order-confirmation\"),Promise.resolve())})}_getPaymentPayload(e,t){var n;const i=(null===(n=this.paymentIntegrationService.getState().getCart())||void 0===n?void 0:n.id)||\"\";return{methodId:e,paymentData:{formattedPayload:Object.assign(Object.assign({cart_id:i},t?{credit_card_token:{token:t}}:{}),{confirm:!1,method:mo.Link})}}}_shouldRequireShippingAddress(){const{getCartOrThrow:e}=this.paymentIntegrationService.getState(),{lineItems:t}=e();return!!t.physicalItems.length}_updateDisplayedPrice(){return as(this,void 0,void 0,function*(){this._stripeElements&&this._stripeElements.update({currency:this._getCurrency(),mode:\"payment\",amount:yield this._getTotalPrice()})})}_getCurrency(){if(!this._currencyCode){const{code:e}=this.paymentIntegrationService.getState().getCartOrThrow().currency;this._currencyCode=e.toLowerCase()}return this._currencyCode}_getTotalPrice(){return as(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const{getCheckoutOrThrow:e,getCartOrThrow:t}=this.paymentIntegrationService.getState(),{decimalPlaces:n}=t().currency,i=(0,P.round)(e().outstandingBalance,n).toFixed(n);return this._toCents(+i)})}_getAvailableCountries(){var e;return as(this,void 0,void 0,function*(){const t=yield this.paymentIntegrationService.loadShippingCountries();return((null===(e=t.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code))||[]).filter(e=>os.includes(e))})}_getAvailableShippingOptions(){var e,t,n;return as(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState().getConsignments();if(!(null==i?void 0:i[0]))return;const r=i[0],o=(r.availableShippingOptions||[]).map(this._getStripeShippingOption.bind(this)),a=null===(e=r.availableShippingOptions)||void 0===e?void 0:e.find(e=>e.isRecommended),s=null===(t=r.selectedShippingOption)||void 0===t?void 0:t.id,c=null==a?void 0:a.id;return s?o.sort(e=>e.id===s?-1:0):c?(o.sort(e=>e.id===c?-1:0),yield this._handleShippingOptionChange(c)):yield this._handleShippingOptionChange(null===(n=o[0])||void 0===n?void 0:n.id),o.slice(0,9)})}_getStripeShippingOption({id:e,cost:t,description:n}){return{id:e,displayName:n,amount:this._toCents(t)}}_handleShippingOptionChange(e){return as(this,void 0,void 0,function*(){if(e&&\"shipping_option_unselected\"!==e)return this.paymentIntegrationService.selectShippingOption(e)})}_getAmountTransformer(){if(this._amountTransformer)return this._amountTransformer;const{getCart:e}=this.paymentIntegrationService.getState(),{currency:t}=e()||{};return t?new rs(t.decimalPlaces):void 0}_toCents(e){const t=Math.round(100*e),n=this._getAmountTransformer();return n?n.toInteger(e):t}_toggleLoadingIndicator(e){e&&this._loadingIndicatorContainer?this.loadingIndicator.show(this._loadingIndicatorContainer):this.loadingIndicator.hide()}_getMethodId(e){const{initializationData:{checkoutSessionEnabled:t}={}}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e);return t?mo.CHECKOUT_SESSION:mo.OCS}}const cs=Xt(e=>{const t=new wo((0,d.vQ)()),n=new is({containerStyles:ts});return new ss(e,t,new Xa(e,t),n)},[{id:\"stripeocs\"}]);class ds extends Dt{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class us{constructor(e){this._paymentIntegrationService=e}execute(e,t){return n=this,i=void 0,o=function*(){yield this._paymentIntegrationService.submitOrder((0,P.omit)(e,\"payment\"),t)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new ds)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const ls=Xt(e=>new us(e),[{id:\"nopaymentdatarequired\"}]);var hs,ps,ms,ys,fs,gs,vs;class _s{constructor(e,t,n=window){this._scriptLoader=e,this._stylesheetLoader=t,this._window=n}load(e){var t,n,i,r,o,a;return i=this,r=void 0,a=function*(){if(yield Promise.all([this._stylesheetLoader.loadStylesheet(`https://checkoutshopper-${null!==(t=e.environment)&&void 0!==t?t:\"\"}.adyen.com/checkoutshopper/sdk/3.10.1/adyen.css`,{prepend:!1,attributes:{integrity:\"sha384-8ofgICZZ/k5cC5N7xegqFZOA73H9RQ7H13439JfAZW8Gj3qjuKL2isaTD3GMIhDE\",crossorigin:\"anonymous\"}}),this._scriptLoader.loadScript(`https://checkoutshopper-${null!==(n=e.environment)&&void 0!==n?n:\"\"}.adyen.com/checkoutshopper/sdk/3.10.1/adyen.js`,{async:!0,attributes:{integrity:\"sha384-wG2z9zSQo61EIvyXmiFCo+zB3y0ZB4hsrXVcANmpP8HLthjoQJQPBh7tZKJSV8jA\",crossorigin:\"anonymous\"}})]),!this._window.AdyenCheckout)throw new Qt;return new this._window.AdyenCheckout(e)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}c((a=a.apply(i,r||[])).next())})}}function bs(e){return\"object\"==typeof e&&\"string\"==typeof e.data.paymentMethod.encryptedSecurityCode||\"string\"==typeof e.data.paymentMethod.encryptedExpiryMonth}function Ss(e){return Boolean(e.instrumentId)}!function(e){e.ThreeDS2Fingerprint=\"threeDS2Fingerprint\",e.ThreeDS2=\"threeDS2\",e.Redirect=\"redirect\",e.QRCode=\"qrCode\",e.Voucher=\"voucher\",e.Sdk=\"sdk\"}(hs||(hs={})),function(e){e.ThreeDS2Fingerprint=\"threeDS2Fingerprint\",e.ThreeDS2Challenge=\"threeDS2Challenge\",e.Redirect=\"redirect\",e.QRCode=\"qrCode\",e.Voucher=\"voucher\"}(ps||(ps={})),function(e){e.SecuredFields=\"securedfields\"}(ms||(ms={})),function(e){e.ACH=\"ach\",e.AliPay=\"alipay\",e.Bancontact=\"bcmc\",e.CreditCard=\"scheme\",e.Klarna=\"klarna\",e.KlarnaPayNow=\"klarna_paynow\",e.KlarnaAccount=\"klarna_account\",e.IDEAL=\"ideal\",e.GiroPay=\"giropay\",e.GooglePay=\"paywithgoogle\",e.SEPA=\"sepadirectdebit\",e.Sofort=\"directEbanking\",e.Vipps=\"vipps\",e.WeChatPayQR=\"wechatpayQR\"}(ys||(ys={})),function(e){e.POST=\"POST\"}(fs||(fs={})),function(e){e.ChallengeShopper=\"ChallengeShopper\",e.Error=\"Error\",e.IdentifyShopper=\"IdentifyShopper\"}(gs||(gs={})),function(e){e.CardNumber=\"encryptedCardNumber\",e.SecurityCode=\"encryptedSecurityCode\",e.ExpiryDate=\"encryptedExpiryDate\"}(vs||(vs={}));var ws=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Cs{constructor(e,t){this._paymentIntegrationService=e,this._scriptLoader=t}initialize(e){return ws(this,void 0,void 0,function*(){const{adyenv2:t}=e;if(!t)throw new en('Unable to initialize payment because \"options.adyenv2\" argument is not provided.');this._paymentInitializeOptions=t;const n=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId),{originKey:i,clientKey:r,environment:o,paymentMethodsResponse:a}=n.initializationData||{},s={key:\"\",value:\"\"};return i?(s.key=\"originKey\",s.value=i):(s.key=\"clientKey\",s.value=r||\"\"),this._adyenClient=yield this._scriptLoader.load({environment:o,locale:this._paymentIntegrationService.getState().getLocale(),[s.key]:s.value,paymentMethodsResponse:a,translations:{es:{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-AR\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-ES\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-MX\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CL\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CO\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-PE\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"}}}),this._paymentComponent=yield this._mountPaymentComponent(n),n.method!==ys.CreditCard&&n.method!==ys.Bancontact||(this._cardVerificationComponent=yield this._mountCardVerificationComponent()),Promise.resolve()})}execute(e,t){return ws(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=n&&n.paymentData,o=r&&r.shouldSaveInstrument,a=r&&r.shouldSetAsDefaultInstrument;if(!n)return Promise.reject(new Yi([\"payment\"]));this._validateCardData(),yield this._paymentIntegrationService.submitOrder(i,t);const s=this._componentState;if(!s)throw new Lt(zt.PaymentNotInitialized);if(r&&Ss(r)){let e={};if(bs(s)){const{encryptedCardNumber:t,encryptedSecurityCode:n,encryptedExpiryMonth:i,encryptedExpiryYear:r}=s.data.paymentMethod;e={credit_card_number_confirmation:t,expiry_month:i,expiry_year:r,verification_value:n}}if(bs(s)||-1!==[\"ideal\",\"sepadirectdebit\",\"directEbanking\",\"giropay\"].indexOf(s.data.paymentMethod.type))try{return void(yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:{formattedPayload:{bigpay_token:Object.assign(Object.assign({},e),{token:r.instrumentId}),origin:window.location.origin,browser_info:$o(),set_as_default_stored_instrument:a||null}}})))}catch(e){return void(yield this._processAdditionalAction(e,o,a))}}try{yield this._paymentIntegrationService.submitPayment({methodId:n.methodId,paymentData:{formattedPayload:{credit_card_token:{token:JSON.stringify(Object.assign(Object.assign({},s.data.paymentMethod),{origin:window.location.origin}))},browser_info:$o(),vault_payment_instrument:o||null,set_as_default_stored_instrument:a||null}}})}catch(e){yield this._processAdditionalAction(e,o,a)}})}finalize(){return Promise.reject(new ds)}deinitialize(){return this._componentState=void 0,this._paymentComponent&&(this._paymentComponent.unmount(),this._paymentComponent=void 0),this._cardVerificationComponent&&(this._cardVerificationComponent.unmount(),this._cardVerificationComponent=void 0),Promise.resolve()}_getAdyenClient(){if(!this._adyenClient)throw new Lt(zt.PaymentNotInitialized);return this._adyenClient}_getPaymentInitializeOptions(){if(!this._paymentInitializeOptions)throw new en('\"options.adyenv2\" argument was not provided during initialization.');return this._paymentInitializeOptions}_getThreeDS2ChallengeWidgetSize(){const{additionalActionOptions:e,threeDS2Options:t}=this._getPaymentInitializeOptions();return e.widgetSize||(null==t?void 0:t.widgetSize)||\"05\"}_handleAction(e){return new Promise((t,n)=>{const{threeDS2ContainerId:i,additionalActionOptions:r}=this._getPaymentInitializeOptions(),{onBeforeLoad:o,containerId:a,onLoad:s,onComplete:c}=r,d=JSON.parse(e.action),u=this._getAdyenClient().createFromAction(d,{onAdditionalDetails:e=>{const n={methodId:d.paymentMethodType,paymentData:{nonce:JSON.stringify(e.data)}};c&&c(),t(n)},size:this._getThreeDS2ChallengeWidgetSize(),onError:e=>n(e)});o&&o(d.type===ps.ThreeDS2Challenge||d.type===ps.QRCode),u.mount(`#${a||i}`),s&&s(()=>{n(new Tn),u.unmount()})})}_mapAdyenPlaceholderData(e,t){if(!e)return{};const{firstName:n,lastName:i,address1:r,address2:o,postalCode:a,city:s,stateOrProvinceCode:c,countryCode:d}=e;return{holderName:t?`${n} ${i}`:\"\",billingAddress:{street:r,houseNumberOrName:o,postalCode:a,city:s,stateOrProvince:c,country:d}}}_mountCardVerificationComponent(){const e=this._getPaymentInitializeOptions(),t=this._getAdyenClient();let n;return new Promise((i,r)=>{var o,a,s;if(e.cardVerificationContainerId){n=t.create(ms.SecuredFields,Object.assign(Object.assign({},e.options),{styles:Object.assign(Object.assign({},null===(o=e.options)||void 0===o?void 0:o.styles),{placeholder:Object.assign({color:\"transparent\",caretColor:\"#000\"},null===(s=null===(a=e.options)||void 0===a?void 0:a.styles)||void 0===s?void 0:s.placeholder)}),onChange:e=>this._updateComponentState(e),onError:t=>e.validateCardFields(t),onFieldValid:t=>e.validateCardFields(t)}));try{n.mount(`#${e.cardVerificationContainerId}`)}catch(e){r(new Lt(zt.PaymentNotInitialized))}}i(n)})}_mountPaymentComponent(e){let t;const n=this._getPaymentInitializeOptions(),i=this._getAdyenClient();return new Promise((r,o)=>{switch(e.method){case ys.CreditCard:case ys.ACH:case ys.Bancontact:{const r=this._paymentIntegrationService.getState().getBillingAddress(),{prefillCardHolderName:a}=e.initializationData;t=i.create(e.method,Object.assign(Object.assign({},n.options),{onChange:e=>this._updateComponentState(e),data:this._mapAdyenPlaceholderData(r,a)}));try{t.mount(`#${n.containerId}`)}catch(e){o(new Lt(zt.PaymentNotInitialized))}break}case ys.IDEAL:case ys.SEPA:if(n.hasVaultedInstruments)this._updateComponentState({data:{paymentMethod:{type:e.method}}});else{t=i.create(e.method,Object.assign(Object.assign({},n.options),{onChange:e=>this._updateComponentState(e)}));try{t.mount(`#${n.containerId}`)}catch(e){o(new Lt(zt.PaymentNotInitialized))}}break;case ys.AliPay:case ys.GiroPay:case ys.Sofort:case ys.Klarna:case ys.KlarnaPayNow:case ys.KlarnaAccount:case ys.Vipps:case ys.WeChatPayQR:this._updateComponentState({data:{paymentMethod:{type:e.method}}})}r(t)})}_processAdditionalAction(e,t,n){return ws(this,void 0,void 0,function*(){if(!Zr(e)||!(0,P.some)(e.body.errors,{code:\"additional_action_required\"}))throw e;const i=yield this._handleAction(e.body.provider_data);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},i),{paymentData:Object.assign(Object.assign({},i.paymentData),{shouldSaveInstrument:t,shouldSetAsDefaultInstrument:n})}))}catch(e){return this._processAdditionalAction(e,t,n)}})}_updateComponentState(e){this._componentState=e}_validateCardData(){var e,t;const n=this._getPaymentInitializeOptions().hasVaultedInstruments?this._cardVerificationComponent:this._paymentComponent;if((null===(e=null==n?void 0:n.componentRef)||void 0===e?void 0:e.showValidation)&&n.state&&(n.componentRef.showValidation(),0===Object.keys(n.state).length||!n.state.isValid&&!n.state.issuer||\"sepadirectdebit\"===(null===(t=n.props)||void 0===t?void 0:t.type)&&n.state.data&&Object.values(n.state.data).some(e=>0===e.toString().trim().length)))throw new Ki(this._mapCardErrors(n.state.errors))}_mapCardErrors(e={}){const t={};return Object.keys(e).forEach(n=>{t[n]=[{message:e[n],type:n}]}),t}}const Is=Xt(e=>new Cs(e,new _s((0,d.vQ)(),(0,d._U)())),[{gateway:\"adyenv2\"}]);class Ps{constructor(e,t,n=window){this._scriptLoader=e,this._stylesheetLoader=t,this._window=n}load(e){var t,n,i,r,o,a;return i=this,r=void 0,a=function*(){if(yield Promise.all([this._stylesheetLoader.loadStylesheet(`https://checkoutshopper-${null!==(t=e.environment)&&void 0!==t?t:\"\"}.adyen.com/checkoutshopper/sdk/5.71.1/adyen.css`,{prepend:!1,attributes:{integrity:\"sha384-5MvB4RnzvviA3VBT4KYABZ4HXNZG5LRqREEgd41xt/pf/QvKmsj2O9GuNuywRXx9\",crossorigin:\"anonymous\"}}),this._scriptLoader.loadScript(`https://checkoutshopper-${null!==(n=e.environment)&&void 0!==n?n:\"\"}.adyen.com/checkoutshopper/sdk/5.71.1/adyen.js`,{async:!0,attributes:{integrity:\"sha384-yvY2yFNR4WqIjPqP9MzjI+gJimmaJnAvj4rLHKvgJbgFD5fMuf8zIJrFJOW8Lhhf\",crossorigin:\"anonymous\"}})]),!this._window.AdyenCheckout)throw new Qt;return yield this._window.AdyenCheckout(e)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}c((a=a.apply(i,r||[])).next())})}}function Es(e){return!(\"object\"!=typeof e||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument)}var Os=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class As{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t}initialize(e){return Os(this,void 0,void 0,function*(){const{adyenv3:t}=e;if(!t)throw new en('Unable to initialize payment because \"options.adyenv3\" argument is not provided.');this.paymentInitializeOptions=t;const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId),{environment:i,clientKey:r,paymentMethodsResponse:o,installmentOptions:a}=n.initializationData||{};return this.adyenClient=yield this.scriptLoader.load({paymentMethodsConfiguration:Object.assign({klarna:{useKlarnaWidget:!0},klarna_account:{useKlarnaWidget:!0},klarna_paynow:{useKlarnaWidget:!0}},a?{card:{installmentOptions:Object.assign({showInstallmentAmounts:!0},a)}}:{}),environment:i,locale:this._getLocale(),clientKey:r,paymentMethodsResponse:o,showPayButton:!1,translations:{es:{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-AR\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-ES\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-MX\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CL\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CO\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-PE\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"}}}),this.paymentComponent=yield this._mountPaymentComponent(n),n.method!==ys.CreditCard&&n.method!==ys.Bancontact||(this.cardVerificationComponent=yield this._mountCardVerificationComponent()),Promise.resolve()})}execute(e,t){var n;return Os(this,void 0,void 0,function*(){const{payment:i}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!i)throw new Yi([\"payment\"]);const o=i.paymentData,{shouldSaveInstrument:a,shouldSetAsDefaultInstrument:s}=Es(o)?o:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1};this._validateCardData(),\"klarna\"!==i.methodId&&\"klarna_account\"!==i.methodId&&\"klarna_paynow\"!==i.methodId||null===(n=this.paymentComponent)||void 0===n||n.submit(),yield this.paymentIntegrationService.submitOrder(r,t);const c=this.componentState||{data:{paymentMethod:{type:i.methodId}}};if(o&&Ss(o)){let e={};if(bs(c)){const{encryptedCardNumber:t,encryptedSecurityCode:n,encryptedExpiryMonth:i,encryptedExpiryYear:r}=c.data.paymentMethod;e={credit_card_number_confirmation:t,expiry_month:i,expiry_year:r,verification_value:n}}try{return void(yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},i),{paymentData:{formattedPayload:{bigpay_token:Object.assign(Object.assign({},e),{token:o.instrumentId}),origin:window.location.origin,browser_info:$o(),set_as_default_stored_instrument:s||null}}})))}catch(t){return void(yield this._processAdditionalAction(t,a,s,o.instrumentId,e))}}let d=JSON.stringify(Object.assign(Object.assign({},c.data.paymentMethod),{type:i.methodId,origin:window.location.origin}));\"boletobancario\"===i.methodId&&function(e){var t,n;return\"string\"===(\"object\"==typeof e&&typeof e.data.socialSecurityNumber)&&\"string\"==typeof(null===(t=e.data.shopperName)||void 0===t?void 0:t.firstName)&&\"string\"==typeof(null===(n=e.data.shopperName)||void 0===n?void 0:n.lastName)}(c)&&(d=JSON.stringify(Object.assign(Object.assign({socialSecurityNumber:c.data.socialSecurityNumber},c.data.shopperName),{type:i.methodId,origin:window.location.origin})));try{yield this.paymentIntegrationService.submitPayment({methodId:i.methodId,paymentData:{formattedPayload:Object.assign(Object.assign({credit_card_token:{token:d}},bs(c)&&c.data.installments?{installments:{value:c.data.installments.value,plan:c.data.installments.plan||\"regular\"}}:{}),{browser_info:$o(),vault_payment_instrument:a||null,set_as_default_stored_instrument:s||null})}})}catch(e){yield this._processAdditionalAction(e,a,s)}})}finalize(){return Promise.reject(new ds)}deinitialize(){return this.componentState=void 0,this.paymentComponent&&(this.paymentComponent.unmount(),this.paymentComponent=void 0),this.cardVerificationComponent&&(this.cardVerificationComponent.unmount(),this.cardVerificationComponent=void 0),Promise.resolve()}_updateComponentState(e){this.componentState=e}_getLocale(){const e=this.paymentIntegrationService.getState().getLocale();return e&&\"es\"===e.substring(0,2)?\"es\":e}_getAdyenClient(){if(!this.adyenClient)throw new Lt(zt.PaymentNotInitialized);return this.adyenClient}_getPaymentInitializeOptions(){if(!this.paymentInitializeOptions)throw new en('\"options.adyenv3\" argument was not provided during initialization.');return this.paymentInitializeOptions}_handleAction(e){return new Promise((t,n)=>{const{additionalActionOptions:i}=this._getPaymentInitializeOptions(),{onBeforeLoad:r,containerId:o,onLoad:a,onComplete:s,widgetSize:c,onActionHandled:d}=i,u=JSON.parse(e.action),l=this._getAdyenClient().createFromAction(u,{onActionHandled:e=>{d&&\"function\"==typeof d&&\"3DS2Fingerprint\"!==e.componentType&&d()},onAdditionalDetails:e=>{const n={methodId:u.paymentMethodType,paymentData:{nonce:JSON.stringify(e.data)}};s&&\"function\"==typeof s&&s(),t(n)},challengeWindowSize:c||\"05\",onError:e=>n(e)});r&&\"function\"==typeof r&&r(u.type===hs.ThreeDS2||u.type===hs.QRCode||u.type===hs.Sdk),this._mountElement(l,o).then(()=>{a&&\"function\"==typeof a&&a(()=>{n(new Tn),l.unmount()})}).catch(n)})}_mapAdyenPlaceholderData(e,t){if(!e)return{};const{firstName:n,lastName:i,address1:r,address2:o,postalCode:a,city:s,stateOrProvinceCode:c,countryCode:d}=e;return{holderName:t?`${n} ${i}`:\"\",firstName:t?n:\"\",lastName:t?i:\"\",billingAddress:{street:r,houseNumberOrName:o,postalCode:a,city:s,stateOrProvince:c,country:d}}}_mountCardVerificationComponent(){var e,t,n;return Os(this,void 0,void 0,function*(){const i=this._getPaymentInitializeOptions(),r=this._getAdyenClient();if(!i.cardVerificationContainerId)return;const o=r.create(ms.SecuredFields,Object.assign(Object.assign({},i.options),{styles:Object.assign(Object.assign({},null===(e=i.options)||void 0===e?void 0:e.styles),{placeholder:Object.assign({color:\"transparent\",caretColor:\"#000\"},null===(n=null===(t=i.options)||void 0===t?void 0:t.styles)||void 0===n?void 0:n.placeholder)}),onChange:e=>this._updateComponentState(e),onError:e=>i.validateCardFields(e),onFieldValid:e=>i.validateCardFields(e)}));try{yield this._mountElement(o,i.cardVerificationContainerId)}catch(e){throw new Lt(zt.PaymentNotInitialized)}return o})}_mountPaymentComponent(e){return Os(this,void 0,void 0,function*(){const t=this._getPaymentInitializeOptions(),n=this._getAdyenClient(),i=this.paymentIntegrationService.getState().getBillingAddress(),{prefillCardHolderName:r}=e.initializationData,o=n.create(e.method,Object.assign(Object.assign(Object.assign(Object.assign({},this._isOneyPaymentMethod(e.method)?{visibility:{personalDetails:\"hidden\",billingAddress:\"hidden\",deliveryAddress:\"hidden\"}}:{}),t.options),{showBrandsUnderCardNumber:!1,billingAddressRequired:!1,showEmailAddress:!1,onChange:e=>this._updateComponentState(e),onSubmit:e=>this._updateComponentState(e)}),i?{data:this._mapAdyenPlaceholderData(i,r)}:{}));try{yield this._mountElement(o,t.containerId)}catch(e){throw new Lt(zt.PaymentNotInitialized)}return o})}_isOneyPaymentMethod(e){return e.startsWith(\"facilypay\")}_processAdditionalAction(e,t,n,i,r){return Os(this,void 0,void 0,function*(){if(!Zr(e)||!(0,P.some)(e.body.errors,{code:\"additional_action_required\"}))throw e;const o=yield this._handleAction(e.body.provider_data);try{const e=Object.assign(Object.assign({},o.paymentData),{shouldSaveInstrument:t,shouldSetAsDefaultInstrument:n}),a=n&&!t?{instrumentId:i,formattedPayload:{bigpay_token:Object.assign(Object.assign({},r),{token:i})}}:{};yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},o),{paymentData:Object.assign(Object.assign({},e),a)}))}catch(e){return this._processAdditionalAction(e,t,n,i,r)}})}_validateCardData(){var e;const t=this._getPaymentInitializeOptions().hasVaultedInstruments?this.cardVerificationComponent:this.paymentComponent;if((null===(e=null==t?void 0:t.componentRef)||void 0===e?void 0:e.showValidation)&&t.state&&(t.componentRef.showValidation(),0===Object.keys(t.state).length||!t.state.isValid))throw new Ki(this._mapCardErrors(t.state.errors))}_mapCardErrors(e={}){const t={};return Object.keys(e).forEach(n=>{t[n]=[{message:e[n],type:n}]}),t}_mountElement(e,t){return Os(this,void 0,void 0,function*(){yield this._waitForMountContainer(t);try{e.mount(`#${t}`)}catch(e){throw new Lt(zt.PaymentNotInitialized)}})}_waitForMountContainer(e){return Os(this,void 0,void 0,function*(){const t=Math.ceil(As.mountContainerMaxWaitMs/As.mountContainerPollIntervalMs),n=As.mountContainerPollIntervalMs;let i=0;const r=()=>Os(this,void 0,void 0,function*(){if(i===t)throw new Lt(zt.PaymentNotInitialized);document.getElementById(e)||(yield new Promise(e=>{setTimeout(e,n)}),i+=1,yield r())});yield r()})}}As.mountContainerMaxWaitMs=5e3,As.mountContainerPollIntervalMs=50;const Ts=Xt(e=>new As(e,new Ps((0,d.vQ)(),(0,d._U)())),[{gateway:\"adyenv3\"}]);var ks,xs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ms{constructor(e,t){this.paymentIntegrationService=e,this.affirmScriptLoader=t}initialize(e){return xs(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadPaymentMethod(e.methodId);const t=this.paymentIntegrationService.getState(),{clientToken:n,config:{testMode:i}}=t.getPaymentMethodOrThrow(e.methodId);if(!n)throw new Ft(Rt.MissingPaymentMethod);this.affirm=yield this.affirmScriptLoader.load(n,i)})}execute(e,t){var n;return xs(this,void 0,void 0,function*(){const i=null===(n=e.payment)||void 0===n?void 0:n.methodId,{useStoreCredit:r}=e;if(!this.affirm)throw new Lt(zt.PaymentNotInitialized);if(!i)throw new Yi([\"payment.methodId\"]);yield this.paymentIntegrationService.submitOrder({useStoreCredit:r},t);const o={methodId:i,paymentData:{nonce:(yield this.initializeAffirmCheckout()).checkout_token}};yield this.paymentIntegrationService.submitPayment(o)})}deinitialize(){return this.affirm&&(this.affirm=void 0),Promise.resolve()}finalize(){return Promise.reject(new ds)}initializeAffirmCheckout(){var e;return null===(e=this.affirm)||void 0===e||e.checkout(this.getCheckoutInformation()),new Promise((e,t)=>{var n,i;null===(n=this.affirm)||void 0===n||n.checkout.open({onFail:e=>{\"canceled\"===e.reason?t(new Tn):t(new Bi)},onSuccess:t=>{e(t)}}),null===(i=this.affirm)||void 0===i||i.ui.error.on(\"close\",()=>{t(new Tn)})})}getCheckoutInformation(){const e=this.paymentIntegrationService.getState(),t=e.getStoreConfig(),n=e.getConsignments(),i=e.getOrder(),r=e.getCart();if(!t)throw new Ft(Rt.MissingCheckoutConfig);if(!i)throw new Ft(Rt.MissingCheckout);const o=new rs(i.currency.decimalPlaces),a=this.getBillingAddress(),s=this.getShippingAddress(),c=Pr(r,t)&&s?s:a;return{merchant:{user_confirmation_url:t.links.checkoutLink,user_cancel_url:t.links.checkoutLink,user_confirmation_url_action:\"POST\"},shipping:c,billing:a,items:this.getItems(o,i),metadata:{shipping_type:this.getShippingType(n),mode:\"modal\",platform_type:\"BigCommerce\",platform_version:\"\",platform_affirm:\"\"},discounts:this.getDiscounts(o,i),order_id:i.orderId?i.orderId.toString():\"\",shipping_amount:o.toInteger(i.shippingCostTotal),tax_amount:o.toInteger(i.taxTotal),total:o.toInteger(i.orderAmount)}}getShippingType(e){if(!e)return\"\";const t=e[0];return(null==t?void 0:t.selectedShippingOption)?t.selectedShippingOption.type:\"\"}getBillingAddress(){const e=this.paymentIntegrationService.getState().getBillingAddress();if(!e)throw new Ft(Rt.MissingBillingAddress);return{name:{first:e.firstName,last:e.lastName,full:`${e.firstName} ${e.lastName}`},address:{line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,zipcode:e.postalCode,country:e.countryCode},phone_number:e.phone,email:e.email}}getShippingAddress(){const e=this.paymentIntegrationService.getState().getShippingAddress();if(e)return{name:{first:e.firstName,last:e.lastName,full:`${e.firstName} ${e.lastName}`},address:{line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,zipcode:e.postalCode,country:e.countryCode},phone_number:e.phone}}getItems(e,t){const n=[];return t.lineItems.physicalItems.forEach(t=>{n.push({display_name:t.name,sku:t.sku,unit_price:e.toInteger(t.salePrice),qty:t.quantity,item_image_url:t.imageUrl,item_url:t.url,categories:this.getCategories(t.categories)})}),t.lineItems.digitalItems.forEach(t=>{n.push({display_name:t.name,sku:t.sku,unit_price:e.toInteger(t.salePrice),qty:t.quantity,item_image_url:t.imageUrl,item_url:t.url,categories:this.getCategories(t.categories)})}),t.lineItems.giftCertificates.forEach(t=>{n.push({display_name:t.name,sku:\"\",unit_price:e.toInteger(t.amount),qty:1,item_image_url:\"\",item_url:\"\"})}),t.lineItems.customItems&&t.lineItems.customItems.forEach(t=>{n.push({display_name:t.name,sku:t.sku,unit_price:e.toInteger(t.listPrice),qty:t.quantity,item_image_url:\"\",item_url:\"\"})}),n}getDiscounts(e,t){const n={};return t.coupons.forEach(t=>{t.discountedAmount>0&&(n[t.code]={discount_amount:e.toInteger(t.discountedAmount),discount_display_name:t.displayName})}),t.discountAmount>0&&(n.DISCOUNTED_AMOUNT={discount_amount:e.toInteger(t.discountAmount),discount_display_name:\"discount\"}),n}getCategories(e){return e?e.map(e=>e.map(e=>e.name)):[[]]}}!function(e){e.PROD=\"//cdn1.affirm.com/js/v2/affirm.js\",e.SANDBOX=\"//cdn1-sandbox.affirm.com/js/v2/affirm.js\"}(ks||(ks={}));class Ns{constructor(e=window){this.affirmWindow=e}load(e=\"\",t){const n=t?ks.SANDBOX:ks.PROD;if(function(e,t,n,i,r,o,a){const s=e[n]||{},c=document.createElement(o),d=document.getElementsByTagName(o)[0],u=function(e,t,n){return function(){e[t]._.push([n,arguments])}};s[i]=u(s,i,\"set\");const l=s[i];s[r]={},s[r]._=[],l._=[],s._=[],s[r][a]=u(s,r,a),s.jsReady=function(){s._.push([a,arguments])};let h=0;for(const e=\"set add save post open empty reset on off trigger ready setProduct\".split(\" \");h<e.length;h++)l[e[h]]=u(s,i,e[h]);let p=0;for(const e=[\"get\",\"token\",\"url\",\"items\"];p<e.length;p++)l[e[p]]=function(){};c.async=!0,c.src=t[o],d.parentNode&&d.parentNode.insertBefore(c,d),delete t[o],l(t),e[n]=s}(window,{public_api_key:e,script:n},\"affirm\",\"checkout\",\"ui\",\"script\",\"ready\"),!this.affirmWindow.affirm)throw new Qt;return Promise.resolve(this.affirmWindow.affirm)}}const Ds=Xt(e=>new Ms(e,new Ns),[{id:\"affirm\"}]);class Rs extends Dt{constructor(e){super(e||\"The current order could not be finalized successfully\"),this.name=\"OrderFinalizationNotCompletedError\",this.type=\"order_finalization_not_completed\"}}var zs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Fs{constructor(e,t){this._paymentIntegrationService=e,this._afterpayScriptLoader=t}initialize(e){var t;return zs(this,void 0,void 0,function*(){const n=this._paymentIntegrationService.getState(),i=n.getPaymentMethod(e.methodId,e.gatewayId),r=(null===(t=n.getCart())||void 0===t?void 0:t.currency.code)||\"\",o=this._mapCurrencyToISO2(r),a=an(n.getStoreConfigOrThrow().checkoutSettings.features,\"PI-4789.afterpay_script_use_https\",!1);if(!i)throw new Ft(Rt.MissingPaymentMethod);this._afterpaySdk=yield this._afterpayScriptLoader.load(i,o,a)})}deinitialize(){return this._afterpaySdk&&(this._afterpaySdk=void 0),Promise.resolve()}execute(e,t){var n;return zs(this,void 0,void 0,function*(){if(!e.payment)throw new Yi([\"payment.gatewayId\",\"payment.methodId\"]);const{gatewayId:i,methodId:r}=e.payment;if(!i||!r)throw new Yi([\"payment.gatewayId\",\"payment.methodId\"]);const{useStoreCredit:o}=e;void 0!==o&&(yield this._paymentIntegrationService.applyStoreCredit(o)),yield this._loadPaymentMethod(i,r,t);const a=this._paymentIntegrationService.getState();yield this._paymentIntegrationService.validateCheckout(a.getCheckout(),t);const s=(null===(n=a.getCart())||void 0===n?void 0:n.currency.code)||\"\",c=this._mapCurrencyToISO2(s);return this._redirectToAfterpay(c,a.getPaymentMethod(r,i)),new Promise(()=>{})})}finalize(e){var t,n,i;return zs(this,void 0,void 0,function*(){const r=this._paymentIntegrationService.getState(),o=r.getPaymentId(),a=r.getContextConfig();if(!o)throw new Ft(Rt.MissingCheckout);if(!(null==a?void 0:a.payment.token))throw new Ft(Rt.MissingCheckoutConfig);const s={methodId:o.providerId,paymentData:{nonce:a.payment.token}};yield this._paymentIntegrationService.submitOrder({},e);try{yield this._paymentIntegrationService.submitPayment(s)}catch(e){if(yield this._paymentIntegrationService.forgetCheckout(o.providerId),yield this._paymentIntegrationService.loadPaymentMethods(),Zr(e))throw new Rs(null===(i=null===(n=null===(t=e.body)||void 0===t?void 0:t.errors)||void 0===n?void 0:n[0])||void 0===i?void 0:i.message)}})}_redirectToAfterpay(e,t){if(!this._afterpaySdk||!(null==t?void 0:t.clientToken))throw new Lt(zt.PaymentNotInitialized);this._afterpaySdk.initialize({countryCode:e}),this._afterpaySdk.redirect({token:t.clientToken})}_mapCurrencyToISO2(e){return{AUD:\"AU\",NZD:\"NZ\",CAD:\"CA\",USD:\"US\"}[e]||\"AU\"}_loadPaymentMethod(e,t,n){var i;return zs(this,void 0,void 0,function*(){try{return yield this._paymentIntegrationService.loadPaymentMethod(e,Object.assign(Object.assign({},n),{params:Object.assign(Object.assign({},null==n?void 0:n.params),{method:t})}))}catch(e){if(e instanceof Ln&&422===(null===(i=e.body)||void 0===i?void 0:i.status))throw new en(\"Afterpay can't process your payment for this order, please try another payment method\");throw e}})}}var Bs,js;!function(e){e.PROD=\"//portal.afterpay.com/afterpay-async.js\",e.SANDBOX=\"//portal.sandbox.afterpay.com/afterpay.js\",e.HTTPS_PROD=\"https://portal.afterpay.com/afterpay-async.js\",e.HTTPS_SANDBOX=\"https://portal.sandbox.afterpay.com/afterpay.js\"}(Bs||(Bs={})),function(e){e.PROD=\"//portal.afterpay.com/afterpay-async.js\",e.SANDBOX=\"//portal.sandbox.afterpay.com/afterpay.js\",e.HTTPS_PROD=\"https://portal.afterpay.com/afterpay-async.js\",e.HTTPS_SANDBOX=\"https://portal.sandbox.afterpay.com/afterpay.js\"}(js||(js={}));class Ls{constructor(e){this._scriptLoader=e}load(e,t,n=!1){return i=this,r=void 0,a=function*(){const i=e.config.testMode||!1,r=this._getScriptURI(t,i,n);return this._scriptLoader.loadScript(r).then(()=>{if(!function(e){return\"AfterPay\"in e}(window))throw new Qt;return window.AfterPay})},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}c((a=a.apply(i,r||[])).next())});var i,r,o,a}_getScriptURI(e,t,n=!1){return\"US\"===e?n?t?js.HTTPS_SANDBOX:js.HTTPS_PROD:t?js.SANDBOX:js.PROD:n?t?Bs.HTTPS_SANDBOX:Bs.HTTPS_PROD:t?Bs.SANDBOX:Bs.PROD}}const Us=Xt(e=>new Fs(e,new Ls((0,d.Hb)())),[{gateway:\"afterpay\"},{id:\"afterpay\"}]);var Vs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class qs{constructor(e,t){this.paymentIntegrationService=e,this.amazonPayV2PaymentProcessor=t}initialize(e){return Vs(this,void 0,void 0,function*(){const{methodId:t,amazonpay:n}=e;if(!t)throw new en('Unable to proceed because \"methodId\" argument is not provided.');const i=this.paymentIntegrationService.getState(),{features:r}=i.getStoreConfigOrThrow().checkoutSettings,o=i.getPaymentMethodOrThrow(t),a=o.initializationData||{},{paymentToken:s=\"\",region:c=\"\",isButtonMicroTextDisabled:d}=a;if(yield this.amazonPayV2PaymentProcessor.initialize(o),this._isReadyToPay(s))(null==n?void 0:n.editButtonId)&&this._bindEditButton(n.editButtonId,s,\"changePayment\",this._isModalFlow(c));else{const{id:e}=this._createContainer();if(this._amazonPayButton=this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:i,containerId:e,decoupleCheckoutInitiation:this._isOneTimeTransaction(r,c.toUpperCase()),methodId:t,placement:qt.Checkout,isButtonMicroTextDisabled:d}),!this._amazonPayButton)throw new en(\"Unable to render the Amazon Pay button to an invalid HTML container element.\")}})}execute(e,t){return Vs(this,void 0,void 0,function*(){const{payment:n}=e;if(!n)throw new Yi([\"payment\"]);const{methodId:i}=n,r=this.paymentIntegrationService.getState(),{features:o}=r.getStoreConfigOrThrow().checkoutSettings,a=r.getPaymentMethodOrThrow(i).initializationData||{},{paymentToken:s=\"\",region:c=\"\"}=a;if(this._isReadyToPay(s)||this._isOneTimeTransaction(o,c.toUpperCase())){const n={methodId:i,paymentData:{nonce:s||\"apb\"}};yield this.paymentIntegrationService.submitOrder(e,t);try{return void(yield this.paymentIntegrationService.submitPayment(n))}catch(e){if(!(Zr(e)&&(d=e.body,\"object\"==typeof d&&null!==d&&\"status\"in d&&\"additional_action_required\"in d&&\"additional_action_required\"===d.status&&\"data\"in d.additional_action_required&&\"redirect_url\"in d.additional_action_required.data&&\"string\"==typeof d.additional_action_required.data.redirect_url)))throw e;const{additional_action_required:t}=e.body,{redirect_url:n}=t.data;if(s)return new Promise(()=>window.location.assign(n));this.amazonPayV2PaymentProcessor.prepareCheckout(JSON.parse(n))}}var d;return this._getAmazonPayButton().click(),this._isModalFlow(c)?new Promise((e,t)=>{const n=()=>{window.removeEventListener(\"focus\",n),t(new Tn(\"Shopper needs to login to Amazonpay to continue\"))};window.addEventListener(\"focus\",n)}):new Promise(P.noop)})}finalize(){return Promise.reject(new ds)}deinitialize(){return Vs(this,void 0,void 0,function*(){yield this.amazonPayV2PaymentProcessor.deinitialize(),this._amazonPayButton=void 0})}_bindEditButton(e,t,n,i){const r=document.getElementById(e);if(r&&r.parentNode){if(!i){const e=r.cloneNode(!0);r.parentNode.replaceChild(e,r),e.addEventListener(\"click\",()=>{this._showLoadingSpinner()})}this.amazonPayV2PaymentProcessor.bindButton(e,t,n)}}_isModalFlow(e){return\"us\"===e}_showLoadingSpinner(){return Vs(this,void 0,void 0,function*(){yield this.paymentIntegrationService.widgetInteraction(()=>new Promise(P.noop))})}_createContainer(){let e=document.getElementById(\"AmazonPayButton\");return e||(e=document.createElement(\"div\"),e.id=\"AmazonPayButton\",e.style.display=\"none\",document.body.appendChild(e))}_getAmazonPayButton(){return jt(this._amazonPayButton,()=>new Lt(zt.PaymentNotInitialized))}_isOneTimeTransaction(e,t){return this.amazonPayV2PaymentProcessor.isPh4Enabled(e,t)&&e[\"INT-6399.amazon_pay_apb\"]}_isReadyToPay(e){return!!e}}const Hs=Xt(e=>new qs(e,Zt()),[{id:\"amazonpay\"}]);var Gs,Ws=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};!function(e){e.Shipping=\"Shipping\",e.Subtotal=\"Subtotal\",e.StoreCredit=\"Store Credit\"}(Gs||(Gs={}));class $s{constructor(e,t,n,i,r){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=n,this._braintreeSdk=i,this._applePayScriptLoader=r,this._shippingLabel=Gs.Shipping,this._subTotalLabel=Gs.Subtotal,this._storeCreditLabel=Gs.StoreCredit}initialize(e){var t,n,i,r;return Ws(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new en('Unable to submit payment because \"options.methodId\" argument is not provided.');const{methodId:o}=e;yield this._applePayScriptLoader.loadSdk(),this._shippingLabel=(null===(t=e.applepay)||void 0===t?void 0:t.shippingLabel)||Gs.Shipping,this._subTotalLabel=(null===(n=e.applepay)||void 0===n?void 0:n.subtotalLabel)||Gs.Subtotal,this._storeCreditLabel=(null===(i=e.applepay)||void 0===i?void 0:i.storeCreditLabel)||Gs.StoreCredit;const a=(yield this._paymentIntegrationService.loadPaymentMethod(o)).getPaymentMethodOrThrow(o);(null===(r=a.initializationData)||void 0===r?void 0:r.gateway)===En.BRAINTREE&&a.clientToken&&this._braintreeSdk.initialize(a.clientToken)})}execute(e,t){return Ws(this,void 0,void 0,function*(){const{payment:n}=e,i=this._paymentIntegrationService.getState();if(!n)throw new Yi([\"payment\"]);const{methodId:r}=n,o=i.getPaymentMethodOrThrow(r),a=this._getBaseRequest(i,o),s=this._sessionFactory.create(a);return yield this._paymentIntegrationService.submitOrder({useStoreCredit:e.useStoreCredit},t),s.begin(),new Promise((e,t)=>{this._handleApplePayEvents(s,o,{resolve:e,reject:t})})})}finalize(){return Promise.reject(new ds)}deinitialize(){return Promise.resolve()}_getBaseRequest(e,t){const n=e.getCheckoutOrThrow(),i=e.getCartOrThrow(),r=e.getStoreConfigOrThrow(),{storeProfile:{storeCountryCode:o,storeName:a}}=r,{currency:{code:s,decimalPlaces:c}}=i,{initializationData:{merchantCapabilities:d,supportedNetworks:u}}=t,{grandTotal:l,isStoreCreditApplied:h,outstandingBalance:p}=n,m=[{label:this._subTotalLabel,amount:`${n.subtotal.toFixed(c)}`}];if(n.taxes.forEach(e=>m.push({label:e.name,amount:`${e.amount.toFixed(c)}`})),m.push({label:this._shippingLabel,amount:`${n.shippingCostTotal.toFixed(c)}`}),h){const{storeCredit:t}=e.getCustomerOrThrow();m.push({label:this._storeCreditLabel,amount:`-${Math.min(l,t).toFixed(c)}`})}return{countryCode:o,currencyCode:s,merchantCapabilities:d,supportedNetworks:u,lineItems:m,total:{label:a,amount:`${p.toFixed(c)}`,type:\"final\"}}}_handleApplePayEvents(e,t,n){e.onvalidatemerchant=n=>Ws(this,void 0,void 0,function*(){try{const{body:i}=yield this._onValidateMerchant(t,n);e.completeMerchantValidation(i)}catch(e){throw new Error(\"Merchant validation failed\")}}),e.oncancel=()=>Ws(this,void 0,void 0,function*(){return n.reject(new Tn(\"Continue with applepay\"))}),e.onpaymentauthorized=i=>this._onPaymentAuthorized(i,e,t,n)}_onValidateMerchant(e,t){return Ws(this,void 0,void 0,function*(){const n=[`validationUrl=${t.validationURL}`,`merchantIdentifier=${e.initializationData.merchantId}`,`displayName=${e.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${e.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:n})})}_onPaymentAuthorized(e,t,n,i){var r;return Ws(this,void 0,void 0,function*(){const{token:o}=e.payment;let a;(null===(r=n.initializationData)||void 0===r?void 0:r.gateway)===En.BRAINTREE&&(a=yield this._getBraintreeDeviceData());const s={methodId:n.id,paymentData:{deviceSessionId:a,formattedPayload:{apple_pay_token:{payment_data:o.paymentData,payment_method:o.paymentMethod,transaction_id:o.transactionIdentifier}}}};try{return yield this._paymentIntegrationService.submitPayment(s),t.completePayment(ApplePaySession.STATUS_SUCCESS),i.resolve()}catch(e){return t.completePayment(ApplePaySession.STATUS_FAILURE),i.reject(new Lt(zt.PaymentNotInitialized))}})}_getBraintreeDeviceData(){return Ws(this,void 0,void 0,function*(){try{const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e}catch(e){}})}}const Ys=Xt(e=>{const{getHost:t}=e.getState(),n=new un(e);return new $s((0,o.createRequestSender)({host:t()}),e,new Dn,new In(new An((0,d.vQ)(),window,n)),new Rn(new d.B2))},[{id:\"applepay\"}]),Ks={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},Qs=function({styles:e}){const t={};return e.color&&(t.color=e.color),e.layout&&(t.layout=e.layout),(e[\"logo-type\"]||e[\"logo-position\"])&&(t.logo={},e[\"logo-type\"]&&(t.logo.type=e[\"logo-type\"]),e[\"logo-position\"]&&(t.logo.position=e[\"logo-position\"])),e.ratio&&(t.ratio=e.ratio),(e[\"text-color\"]||e[\"text-size\"])&&(t.text={},e[\"text-color\"]&&(t.text.color=e[\"text-color\"]),e[\"text-size\"]&&(t.text.size=+e[\"text-size\"])),t};function Js(e){return\"object\"==typeof e&&null!==e&&\"bigpayToken\"in e&&\"defaultInstrument\"in e&&\"provider\"in e&&\"trustedShippingAddress\"in e&&\"method\"in e&&\"type\"in e}var Zs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Xs{constructor(e,t,n,i){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.paypalSdkHelper=n,this.loadingIndicator=i}initialize(e){return Zs(this,void 0,void 0,function*(){const{methodId:t,bigcommerce_payments:n}=e||{};if(this.bigcommerce_payments=n,!t)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new en('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(t);const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(t),{container:o,bannerContainerId:a}=n,{orderId:s,paypalBNPLConfiguration:c=[],isPayPalCreditAvailable:d}=r.initializationData||{};if(void 0!==a){if(!document.getElementById(a))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=null==c?void 0:c.find(({id:e})=>\"checkout\"===e);if(d||!(null==e?void 0:e.status))return;const t=yield this.paypalSdkHelper.getPayPalMessages(r,i.getCartOrThrow().currency.code);return t&&\"function\"==typeof(null==t?void 0:t.Messages)?this.renderMessages(t,a,e):void console.error(\"[BC PayPalCommerce PayLater]: banner could not be rendered, due to issues with loading PayPal SDK\")}s?this.orderId=s:(this.loadingIndicatorContainer=null==o?void 0:o.split(\"#\")[1],yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(t),n.onInit&&\"function\"==typeof n.onInit&&n.onInit(()=>this.renderButton(t,n)),(void 0===n.shouldRenderPayPalButtonOnInitialization||n.shouldRenderPayPalButtonOnInitialization)&&this.renderButton(t,n))})}execute(e,t){return Zs(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{onError:r}=this.bigcommerce_payments||{};if(!n)throw new Yi([\"payment\"]);const{methodId:o,paymentData:a}=n;if(this.isPayPalVaultedInstrumentPaymentData(a)&&!this.orderId&&(this.orderId=yield this.createOrder()),!this.orderId)throw new Bi;const s=this.isPayPalVaultedInstrumentPaymentData(a)?this.prepareVaultedInstrumentPaymentPayload(o,this.orderId,a):this.preparePaymentPayload(o,this.orderId,a);try{yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment(s)}catch(e){return this.isProviderError(e)&&(yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n.methodId),yield new Promise((e,t)=>{var i;this.bigcommerce_payments&&(null===(i=this.paypalButton)||void 0===i||i.close(),this.renderButton(n.methodId,this.bigcommerce_payments),this.handleError(new Error(\"INSTRUMENT_DECLINED\"),r)),t()})),this.handleError(e,r),Promise.reject()}})}finalize(){return Promise.reject(new ds)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}prepareVaultedInstrumentPaymentPayload(e,t,n){const{instrumentId:i,shouldSetAsDefaultInstrument:r}=n,o=!this.isTrustedVaultingFlow(n);return o?{methodId:e,paymentData:{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t}}}}:{methodId:e,paymentData:{instrumentId:i,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t},bigpay_token:{token:i}}}}}preparePaymentPayload(e,t,n){const{shouldSaveInstrument:i=!1,shouldSetAsDefaultInstrument:r=!1}=Es(n)?n:{};return{methodId:e,paymentData:{shouldSaveInstrument:i,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t}}}}}renderButton(e,t){const n=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:c,onValidate:d,submitForm:u}=t;if(!a)throw new en('Unable to initialize payment because \"container\" argument is not provided.');const l={fundingSource:n.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o),createOrder:()=>this.createOrder(),onClick:(e,t)=>this.handleClick(t,d),onApprove:e=>this.handleApprove(e,u),onError:e=>this.handleError(e,s),onCancel:()=>this.toggleLoadingIndicator(!1)};this.paypalButton=n.Buttons(l),this.paypalButton.isEligible()&&(c&&\"function\"==typeof c&&c(),this.paypalButton.render(a))}handleClick(e,t){return Zs(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;yield null==t?void 0:t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,null==t||t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createOrder(){return Zs(this,void 0,void 0,function*(){const e=this.getFieldsValues();return this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_paymentscheckout\",{shouldSaveInstrument:(null==e?void 0:e.shouldSaveInstrument)||!1})})}getFieldsValues(){const{getFieldsValues:e}=this.bigcommerce_payments||{};return\"function\"==typeof e?e():void 0}isTrustedVaultingFlow(e){if(e&&Ss(e)){const t=this.paymentIntegrationService.getState().getInstruments(),n=null==t?void 0:t.find(t=>Js(t)&&t.bigpayToken===e.instrumentId);return!(Js(n)&&!n.trustedShippingAddress)}return!1}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isPayPalVaultedInstrumentPaymentData(e){return!!e&&Ss(e)&&Es(e)}renderMessages(e,t,n){const i={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:Qs(n)};e.Messages(i).render(`#${t}`)}isProviderError(e){var t,n,i;return!!function(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e}(e)&&\"INSTRUMENT_DECLINED\"===(null===(i=null===(n=((null===(t=null==e?void 0:e.errors)||void 0===t?void 0:t.filter(e=>e.provider_error))||[])[0])||void 0===n?void 0:n.provider_error)||void 0===i?void 0:i.code)}}const ec=Xt(e=>new Xs(e,ri(e),bi(),new is({containerStyles:Ks})),[{id:\"bigcommerce_payments\"}]);function tc(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}var nc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ic{constructor(e,t,n,i){this.paymentIntegrationService=e,this.bigCommercePaymentsRequestSender=t,this.bigCommercePaymentsSdk=n,this.bigCommercePaymentsFastlaneUtils=i}initialize(e){var t,n;return nc(this,void 0,void 0,function*(){const{methodId:i,bigcommerce_payments_fastlane:r}=e;if(!i)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(this.methodId=i,!r)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_fastlane\" argument is not provided.');if(this.bigcommerce_payments_fastlane=r,!r.onInit||\"function\"!=typeof r.onInit)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_fastlane.onInit\" argument is not provided or it is not a function.');if(!r.onChange||\"function\"!=typeof r.onChange)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_fastlane.onChange\" argument is not provided or it is not a function.');yield this.paymentIntegrationService.loadPaymentMethod(i);const o=this.paymentIntegrationService.getState(),a=o.getCartOrThrow(),s=o.getPaymentMethodOrThrow(i),{isDeveloperModeApplicable:c,isFastlaneStylingEnabled:d}=s.initializationData||{};this.threeDSVerificationMethod=null===(t=s.initializationData)||void 0===t?void 0:t.threeDSVerificationMethod,this.paypalFastlaneSdk=yield this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(s,a.currency.code,a.id);const u=Ei(d?null===(n=null==s?void 0:s.initializationData)||void 0===n?void 0:n.fastlaneStyles:{},null==r?void 0:r.styles);yield this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(this.paypalFastlaneSdk,!!c,u),this.shouldRunAuthenticationFlow()&&(yield this.runPayPalAuthenticationFlowOrThrow(i)),yield this.initializePayPalPaymentComponent(),r.onInit(e=>this.renderPayPalPaymentComponent(e)),r.onChange(()=>this.handlePayPalStoredInstrumentChange(i))})}execute(e,t){return nc(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);const{paymentData:r,methodId:o}=n,a=r&&Ss(r);try{yield this.paymentIntegrationService.submitOrder(i,t);const e=a?yield this.prepareVaultedInstrumentPaymentPayload(o,r):yield this.preparePaymentPayload(o,r);yield this.paymentIntegrationService.submitPayment(e),this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId()}catch(e){if(function(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"response\"in e&&\"name\"in e.response}(e)&&\"INVALID_REQUEST\"===e.response.name){const e={translationKey:\"payment.errors.invalid_request_error\"};return this.handleError(e),Promise.reject()}if(e instanceof Error&&\"FastlaneError\"!==e.name)throw e;return Promise.reject()}})}finalize(){return Promise.reject(new ds)}deinitialize(){return nc(this,void 0,void 0,function*(){return Promise.resolve()})}shouldRunAuthenticationFlow(){const e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getCustomerOrThrow(),i=e.getPaymentProviderCustomer(),r=tc(i)?i:{},o=this.bigCommercePaymentsFastlaneUtils.getStorageSessionId();return!(!n.isGuest||(null==r?void 0:r.authenticationState)===gi.CANCELED||(null==r?void 0:r.authenticationState)||o!==t.id)}runPayPalAuthenticationFlowOrThrow(e){return nc(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getCustomer(),r=t.getBillingAddress(),o=(null==i?void 0:i.email)||(null==r?void 0:r.email)||\"\",{customerContextId:a}=yield this.bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow(a),{authenticationState:c,addresses:d,instruments:u}=this.bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,s);yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:c,addresses:d,instruments:u}),s.authenticationState===gi.CANCELED?this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId():this.bigCommercePaymentsFastlaneUtils.updateStorageSessionId(n.id)}catch(e){}})}initializePayPalPaymentComponent(){return nc(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),t=e.phone,n=`${e.firstName} ${e.lastName}`.trim(),i=this.bigCommercePaymentsFastlaneUtils.getPayPalFastlaneOrThrow(),r={fields:Object.assign({cardholderName:{prefill:n,enabled:!0}},t&&{phoneNumber:{prefill:t}})};this.paypalComponentMethods=yield i.FastlaneCardComponent(r)})}renderPayPalPaymentComponent(e){const t=this.getPayPalComponentMethodsOrThrow();if(!e)throw new en('Unable to render card component because \"container\" argument is not provided.');t.render(e)}getPayPalComponentMethodsOrThrow(){if(!this.paypalComponentMethods)throw new Qt;return this.paypalComponentMethods}prepareVaultedInstrumentPaymentPayload(e,t){return nc(this,void 0,void 0,function*(){const{instrumentId:n}=t,i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),r=this.isBigcommercePaymentsFastlaneThreeDSAvailable()&&i.config.is3dsEnabled?yield this.get3DSNonce(n):n;return yield this.createOrder(r),{methodId:e,paymentData:{formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:r}}}}})}preparePaymentPayload(e,t){return nc(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getBillingAddressOrThrow(),r=n.getPaymentMethodOrThrow(e),o=`${i.firstName} ${i.lastName}`.trim(),{getPaymentToken:a}=this.getPayPalComponentMethodsOrThrow(),{id:s}=yield a({name:{fullName:o},billingAddress:this.bigCommercePaymentsFastlaneUtils.mapBcToPayPalAddress(i)}),c=this.isBigcommercePaymentsFastlaneThreeDSAvailable()&&r.config.is3dsEnabled,{shouldSaveInstrument:d=!1,shouldSetAsDefaultInstrument:u=!1}=Es(t)?t:{},l=c?yield this.get3DSNonce(s):s;return yield this.createOrder(l),{methodId:e,paymentData:Object.assign(Object.assign({},t),{shouldSaveInstrument:d,shouldSetAsDefaultInstrument:u,formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:l}}})}})}createOrder(e){return nc(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getCartOrThrow().id;if(this.methodId){const{orderId:n}=yield this.bigCommercePaymentsRequestSender.createOrder(this.methodId,{cartId:t,fastlaneToken:e});this.orderId=n}})}get3DSNonce(e){var t;return nc(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getCartOrThrow(),r=n.getOrderOrThrow(),o=n.getStoreConfigOrThrow().links.checkoutLink,a=null===(t=this.paypalFastlaneSdk)||void 0===t?void 0:t.ThreeDomainSecureClient;if(!a)throw new Qt;const s={amount:r.orderAmount.toFixed(2),currency:i.currency.code,nonce:e,threeDSRequested:this.threeDSVerificationMethod===hi.Always,transactionContext:{experience_context:{locale:\"en-US\",return_url:o,cancel_url:o}}},c=yield a.isEligible(s);if(this.threeDSVerificationMethod===hi.Always&&!c)throw new Bi;if(c){const{liabilityShift:e,authenticationState:t,nonce:n}=yield a.show();if(e===Un.No||e===Un.Unknown||t===pi.Errored||t===pi.Cancelled)throw new Bi;if(t===pi.Succeeded&&[Un.Yes,Un.Possible].includes(e))return n}return e})}handlePayPalStoredInstrumentChange(e){return nc(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsFastlaneUtils.getPayPalFastlaneOrThrow(),{selectionChanged:n,selectedCard:i}=yield t.profile.showCardSelector();if(n){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomer(),n=tc(t)?t:{},r=this.bigCommercePaymentsFastlaneUtils.mapPayPalToBcInstrument(e,i)[0];return yield this.paymentIntegrationService.updatePaymentProviderCustomer(Object.assign(Object.assign({},n),{instruments:[r]})),r}})}isBigcommercePaymentsFastlaneThreeDSAvailable(){return an(this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features,\"PROJECT-7080.bcp_fastlane_three_ds\")}handleError(e){var t;(null===(t=this.bigcommerce_payments_fastlane)||void 0===t?void 0:t.onError)&&\"function\"==typeof this.bigcommerce_payments_fastlane.onError&&this.bigcommerce_payments_fastlane.onError(e)}}const rc=Xt(e=>{const{getHost:t}=e.getState();return new ic(e,new ti((0,o.createRequestSender)({host:t()})),bi(),Ii())},[{id:\"bigcommerce_payments_fastlane\"}]);var oc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ac{constructor(e,t,n,i){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.loadingIndicator=n,this.paypalSdkHelper=i}initialize(e){return oc(this,void 0,void 0,function*(){const{methodId:t,bigcommerce_payments_paylater:n}=e||{};if(!t)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(t);const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(t),{paypalBNPLConfiguration:o=[],orderId:a}=r.initializationData||{},{bannerContainerId:s,container:c}=n;if(void 0!==s){if(!document.getElementById(s))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=o&&o.find(({id:e})=>\"checkout\"===e);if(!(null==e?void 0:e.status))return;const t=yield this.paypalSdkHelper.getPayPalMessages(r,i.getCartOrThrow().currency.code);return this.renderMessages(t,s,e)}a?this.orderId=a:(yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(t),this.loadingIndicatorContainer=null==c?void 0:c.split(\"#\")[1],this.renderButton(t,n))})}execute(e,t){return oc(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);if(!this.orderId)throw new Bi;yield this.paymentIntegrationService.submitOrder(i,t),yield this.bigCommercePaymentsIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new ds)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.bigCommercePaymentsButtons)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){if(!(null==t?void 0:t.container))throw new en('Unable to initialize payment because \"container\" argument is not provided.');const n=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:c,onValidate:d,submitForm:u}=t,l=[n.FUNDING.PAYLATER,n.FUNDING.CREDIT];let h=!1;l.forEach(e=>{if(h)return;const t={fundingSource:e,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o),createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onClick:(e,t)=>this.handleClick(t,d),onApprove:e=>this.handleApprove(e,u),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.bigCommercePaymentsButtons=n.Buttons(t),this.bigCommercePaymentsButtons.isEligible()||e!==n.FUNDING.PAYLATER){if(!this.bigCommercePaymentsButtons.isEligible()&&e===n.FUNDING.CREDIT)throw new tn(`BigCommercePayments ${e} is not available for your region. Please use BigCommercePayments Checkout instead.`);c&&\"function\"==typeof c&&c(),this.bigCommercePaymentsButtons.render(a),h=!0}})}handleClick(e,t){return oc(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;t&&\"function\"==typeof t&&(yield t(()=>(this.toggleLoadingIndicator(!0),n()),i))})}handleApprove({orderID:e},t){this.orderId=e,t&&\"function\"==typeof t&&t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}renderMessages(e,t,n){const i={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:Qs(n)};e.Messages(i).render(`#${t}`)}}const sc=Xt(e=>new ac(e,ri(e),new is({containerStyles:Ks}),bi()),[{id:\"bigcommerce_payments_paylater\"}]);class cc extends Ln{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}var dc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class uc{constructor(e,t,n,i=3e3,r=3e5){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.loadingIndicator=n,this.pollingInterval=i,this.maxPollingIntervalTime=r,this.pollingTimer=0,this.stopPolling=P.noop}initialize(e){return dc(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,bigcommerce_payments_ratepay:i}=e;if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!i)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_ratepay\" argument is not provided.');const{legalTextContainer:r,container:o,loadingContainerId:a}=i;if(!o)throw new en('Unable to initialize payment because \"options.container\" argument is not provided.');if(!r)throw new en('Unable to initialize payment because \"options.legalTextContainer\" argument is not provided.');if(!a)throw new en('Unable to initialize payment because \"options.loadingContainerId\" argument is not provided.');this.loadingIndicatorContainer=a;const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,t),{merchantId:c}=s.initializationData||{};if(!c)throw new en(\"Unable to initialize payment because merchantId argument is not provided.\");this.bigcommerce_payments_ratepay=i,yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n),this.createFraudNetScript(c,n,t),this.loadFraudnetConfig(),this.renderLegalText(r,o)})}execute(e,t){return dc(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{getFieldsValues:r}=this.bigcommerce_payments_ratepay||{};if(!n)throw new Yi([\"payment\"]);if(!r||\"function\"!=typeof r)throw new en('Unable to initialize payment because \"options.getFieldsValues\" argument is not provided.');this.toggleLoadingIndicator(!0);try{const e=yield this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_apmscheckout\",{metadataId:this.guid}),{ratepayBirthDate:o,ratepayPhoneNumber:a,ratepayPhoneCountryCode:s}=r(),c={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:n.methodId,rate_pay:{birth_date:this.normalizeDate(o),phone:{national_number:a,country_code:s.split(\"+\")[1]}},paypal_account:{order_id:e}}};return yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment({methodId:n.methodId,paymentData:c}),yield new Promise((e,t)=>{this.initializePollingMechanism(n.methodId,e,t,n.gatewayId)})}catch(e){return this.handleError(e),new Promise((e,t)=>t())}})}finalize(){return Promise.reject(new ds)}deinitialize(){const{legalTextContainer:e}=this.bigcommerce_payments_ratepay||{},t=document.querySelectorAll('[data-id=\"fraudnetScript\"]')[0],n=document.querySelectorAll('[data-id=\"fraudnetConfig\"]')[0];if(this.deinitializePollingMechanism(),t.remove(),n.remove(),e){const t=document.getElementById(e);null==t||t.remove()}return Promise.resolve()}normalizeDate(e){const t=this.formatDate(e.getDate()),n=this.formatDate(e.getMonth()+1);return`${e.getFullYear()}-${n}-${t}`}formatDate(e){return`${e<10?0:\"\"}${e}`}renderLegalText(e,t){const n=e,i=t.split(\"#\")[1],r=document.getElementById(i),o=null==r?void 0:r.parentNode,a=document.createElement(\"div\");a.style.marginBottom=\"20px\",a.setAttribute(\"id\",n),null==o||o.prepend(a);const s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),c=s.Legal({fundingSource:s.Legal.FUNDING.PAY_UPON_INVOICE});if(!document.getElementById(n))throw new en('Unable to initialize payment because \"legalTextContainerElement\" argument is not found.');c.render(`#${n}`)}handleError(e){const{onError:t}=this.bigcommerce_payments_ratepay||{};this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createFraudNetScript(e,t,n){const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n),{testMode:r}=i.config,o=document.createElement(\"script\");o.setAttribute(\"type\",\"application/json\"),o.setAttribute(\"fncls\",\"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\"),o.setAttribute(\"data-id\",\"fraudnetScript\"),this.guid=this.generateGUID();const a={f:this.guid,s:`${e}_checkout-page`,sandbox:r};o.innerHTML=JSON.stringify(a),document.body.appendChild(o)}generateGUID(){let e=\"\";for(let t=0;t<32;t+=1)e+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"[Math.floor(62*Math.random())];return e}loadFraudnetConfig(){const e=document.createElement(\"script\");e.setAttribute(\"data-id\",\"fraudnetConfig\"),e.src=\"https://c.paypal.com/da/r/fb.js\",document.body.appendChild(e)}reinitializeStrategy(e){return dc(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}initializePollingMechanism(e,t,n,i){return dc(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.bigCommercePaymentsIntegrationService.getOrderStatus(\"bigcommerce_payments_apms\",{params:{useMetadata:!0}}),o=r===$n.PollingStop,a=r===$n.PollingError;if(o)return this.deinitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,i);yield this.reinitializeStrategy({methodId:e,gatewayId:i,bigcommerce_payments_ratepay:this.bigcommerce_payments_ratepay}),this.handleError(new cc)}catch(e){this.handleError(e),n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const lc=Xt(e=>new uc(e,ri(e),new is({containerStyles:Object.assign(Object.assign({},Ks),{position:\"fixed\"})})),[{gateway:\"bigcommerce_payments_apms\",id:\"ratepay\"}]);var hc;!function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\",e.CardExpiryVerification=\"cardExpiryVerification\"}(hc||(hc={}));const pc=hc;function mc(e){return pc.CardNumber in e&&pc.CardName in e&&pc.CardExpiry in e}function yc(e){return pc.CardNumberVerification in e&&pc.CardCodeVerification in e&&pc.CardExpiryVerification in e}var fc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class gc{constructor(e,t,n,i){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.bigCommercePaymentsSdk=n,this.bigCommercePaymentsFastlaneUtils=i}initialize(e){return fc(this,void 0,void 0,function*(){const{methodId:t,bigcommerce_payments_creditcards:n}=e,i=n,{form:r,onCreditCardFieldsRenderingError:o,onLoadComplete:a}=i||{};if(!t)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new en('Unable to proceed because \"options.bigcommerce_payments_creditcards.form\" argument is not provided.');this.hostedFormOptions=r,this.isCreditCardForm=mc(r.fields),this.isCreditCardVaultedForm=yc(r.fields)&&!this.hasUndefinedValues(),yield this.paymentIntegrationService.loadPaymentMethod(t),yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(t,void 0,!0,!0),(this.isCreditCardForm||this.isCreditCardVaultedForm)&&(yield this.initializeFields(r,o)),null==a||a(),this.shouldInitializePayPalFastlane(t)&&(yield this.initializePayPalFastlaneOrThrow(t))})}execute(e,t){return fc(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{methodId:r,paymentData:o}=n||{};if(!n||!r)throw new Yi([\"payment\"]);if(this.executionPaymentData=o,this.isCreditCardForm||this.isCreditCardVaultedForm)yield this.validateHostedFormOrThrow(),yield this.submitHostedForm();else{const{orderId:e}=yield this.bigCommercePaymentsIntegrationService.createOrderCardFields(\"bigcommerce_payments_creditcardscheckout\",this.getInstrumentParams());this.returnedOrderId=e}const a=this.preparePaymentPayload(r,o,this.returnedOrderId,this.returnedVaultedToken);yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment(a)})}finalize(){return Promise.reject(new ds)}deinitialize(){var e,t,n,i;return fc(this,void 0,void 0,function*(){return yield null===(e=this.cvvField)||void 0===e?void 0:e.close(),yield null===(t=this.expiryField)||void 0===t?void 0:t.close(),yield null===(n=this.numberField)||void 0===n?void 0:n.close(),yield null===(i=this.nameField)||void 0===i?void 0:i.close(),Promise.resolve()})}preparePaymentPayload(e,t,n,i){const{shouldSaveInstrument:r=!1,shouldSetAsDefaultInstrument:o=!1}=Es(t)?t:{},a=t&&Ss(t)?t.instrumentId:void 0,s=(0,P.omitBy)({verification_nonce:i,token:a},P.isNil);return{methodId:e,paymentData:{shouldSaveInstrument:r,shouldSetAsDefaultInstrument:o,instrumentId:a,formattedPayload:Object.assign(Object.assign({},i||a?{bigpay_token:s}:{}),n?{card_with_order:{order_id:n}}:{})}}}initializeFields(e,t){return fc(this,void 0,void 0,function*(){const{fields:n,styles:i}=e,r=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),o=this.getExecuteCallback(n),a=Object.assign({style:this.getInputStyles(i),onApprove:({orderID:e,vaultSetupToken:t,liabilityShift:n})=>{if(n===Un.No||n===Un.Unknown)throw new Error;return this.handleApprove({orderID:e,vaultSetupToken:t})},onError:()=>{throw new Fi},inputEvents:{onChange:t=>this.onChangeHandler(e,t),onFocus:t=>this.onFocusHandler(e,t),onBlur:t=>this.onBlurHandler(e,t),onInputSubmitRequest:t=>this.onInputSubmitRequest(e,t)}},o);if(this.cardFields=yield r.CardFields(a),!this.cardFields.isEligible())throw new Lt(zt.PaymentNotInitialized);try{this.stylizeInputContainers(n),mc(n)&&(yield this.renderFields(n)),yc(n)&&(yield this.renderVaultedFields(n))}catch(e){\"function\"==typeof t&&t(e)}})}getExecuteCallback(e){return yc(e)?this.createVaultSetupTokenCallback():this.createOrderCallback()}createVaultSetupTokenCallback(){return{createVaultSetupToken:()=>fc(this,void 0,void 0,function*(){const{setupToken:e}=(yield this.bigCommercePaymentsIntegrationService.createOrderCardFields(\"bigcommerce_payments_creditcardscheckout\",Object.assign(Object.assign({},this.getInstrumentParams()),{setupToken:!0})))||{};return e})}}createOrderCallback(){return{createOrder:()=>fc(this,void 0,void 0,function*(){const{orderId:e}=(yield this.bigCommercePaymentsIntegrationService.createOrderCardFields(\"bigcommerce_payments_creditcardscheckout\",this.getInstrumentParams()))||{};return e})}}handleApprove({orderID:e,vaultSetupToken:t}){e&&(this.returnedOrderId=e),t&&(this.returnedVaultedToken=t)}renderFields(e){var t,n,i,r;return fc(this,void 0,void 0,function*(){const o=this.getCardFieldsOrThrow();(null===(t=e.cardCode)||void 0===t?void 0:t.containerId)&&(this.cvvField=o.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCode.containerId}`)),(null===(n=e.cardExpiry)||void 0===n?void 0:n.containerId)&&(this.expiryField=o.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiry.containerId}`)),(null===(i=e.cardName)||void 0===i?void 0:i.containerId)&&(this.nameField=o.NameField({placeholder:\"\"}),yield this.nameField.render(`#${e.cardName.containerId}`)),(null===(r=e.cardNumber)||void 0===r?void 0:r.containerId)&&(this.numberField=o.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumber.containerId}`))})}renderVaultedFields(e){var t,n,i;return fc(this,void 0,void 0,function*(){const r=this.getCardFieldsOrThrow();(null===(t=e.cardCodeVerification)||void 0===t?void 0:t.containerId)&&(this.cvvField=r.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCodeVerification.containerId}`)),(null===(n=e.cardExpiryVerification)||void 0===n?void 0:n.containerId)&&(this.expiryField=r.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiryVerification.containerId}`)),(null===(i=e.cardNumberVerification)||void 0===i?void 0:i.containerId)&&(this.numberField=r.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumberVerification.containerId}`))})}getInstrumentParams(){if(!this.executionPaymentData)return{};if(Es(this.executionPaymentData)){const{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}=this.executionPaymentData;return{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}}if(Ss(this.executionPaymentData)){const{instrumentId:e}=this.executionPaymentData;return{instrumentId:e}}return{}}getFieldTypeByEmittedField({emittedBy:e}){return{fieldType:this.mapFieldType(e)}}submitHostedForm(){return fc(this,void 0,void 0,function*(){const e=this.getCardFieldsOrThrow(),t=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),n={billingAddress:{company:t.company,addressLine1:t.address1,addressLine2:t.address2,adminArea1:t.stateOrProvinceCode,adminArea2:t.city,postalCode:t.postalCode,countryCode:t.countryCode}};try{this.isCreditCardVaultedForm?yield e.submit():yield e.submit(n)}catch(e){throw new Fi(\"Failed authentication. Please try to authorize again.\")}})}validateHostedFormOrThrow(){var e,t;return fc(this,void 0,void 0,function*(){const n=this.getCardFieldsOrThrow(),i=yield n.getState().then(e=>e),r=this.getValidityData(i);if(!r.isValid)throw null===(t=null===(e=this.hostedFormOptions)||void 0===e?void 0:e.onValidate)||void 0===t||t.call(e,r),new Ki(this.mapValidationErrors(r.errors))})}getValidityData({fields:e}){const t=Object.assign({},e);delete t.cardNameField;const n=Object.keys(t),i=n.every(e=>{var n;return null===(n=t[e])||void 0===n?void 0:n.isValid}),r=n.reduce((e,n)=>{var i;const r=this.mapFieldType(n);return Object.assign(Object.assign({},e),{[r]:(null===(i=t[n])||void 0===i?void 0:i.isValid)?void 0:[this.getInvalidErrorByFieldType(r)]})},{});return{isValid:i,errors:r}}getInvalidErrorByFieldType(e){switch(e){case pc.CardCode:case pc.CardCodeVerification:return{fieldType:e,message:\"Invalid card code\",type:\"invalid_card_code\"};case pc.CardNumber:case pc.CardNumberVerification:return{fieldType:e,message:\"Invalid card number\",type:\"invalid_card_number\"};case pc.CardExpiry:case pc.CardExpiryVerification:return{fieldType:e,message:\"Invalid card expiry\",type:\"invalid_card_expiry\"};default:return{fieldType:e,message:\"Invalid field\",type:\"invalid\"}}}mapValidationErrors(e={}){const t={};return Object.keys(e).forEach(n=>{var i,r;t[n]=[{message:(null===(r=null===(i=e[n])||void 0===i?void 0:i[0])||void 0===r?void 0:r.message)||\"\",type:n}]}),t}mapFieldType(e){switch(e){case\"name\":return pc.CardName;case\"cardNumberField\":case\"number\":return this.isCreditCardForm?pc.CardNumber:pc.CardNumberVerification;case\"cardExpiryField\":case\"expiry\":return this.isCreditCardForm?pc.CardExpiry:pc.CardExpiryVerification;case\"cardCvvField\":case\"cvv\":return this.isCreditCardForm?pc.CardCode:pc.CardCodeVerification;default:throw new Error(\"Unexpected field type\")}}getCardFieldsOrThrow(){if(!this.cardFields)throw new Lt(zt.PaymentNotInitialized);return this.cardFields}getInputStyles(e){var t,n,i;const r={\"font-size\":(null===(t=null==e?void 0:e.default)||void 0===t?void 0:t.fontSize)||\"1rem\",\"font-family\":(null===(n=null==e?void 0:e.default)||void 0===n?void 0:n.fontFamily)||\"Montserrat, Arial, Helvetica, sans-serif\",\"font-weight\":(null===(i=null==e?void 0:e.default)||void 0===i?void 0:i.fontWeight)||\"400\",outline:\"none\",padding:\"9px 13px\"},o=Object.assign(Object.assign({},r),{color:\"#333333\"});return{input:o,\".invalid\":Object.assign(Object.assign({},r),{color:\"red\"}),\".valid\":o,\":focus\":o}}stylizeInputContainers(e){Object.values(e||{}).forEach(e=>{const t=document.getElementById(`${(null==e?void 0:e.containerId)||\"\"}`);t&&(t.style.padding=\"0px\",t.style.boxShadow=\"none\",t.style.border=\"none\",t.style.background=\"transparent\",t.style.marginBottom=\"10px\",t.style.marginLeft=\"-5px\")})}hasUndefinedValues(){return!this.hostedFormOptions||Object.values(this.hostedFormOptions.fields).some(e=>void 0===e)}onChangeHandler(e,t){var n;null===(n=null==e?void 0:e.onValidate)||void 0===n||n.call(e,this.getValidityData(t))}onFocusHandler(e,t){var n;null===(n=null==e?void 0:e.onFocus)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onBlurHandler(e,t){var n;null===(n=null==e?void 0:e.onBlur)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onInputSubmitRequest(e,t){var n;null===(n=null==e?void 0:e.onEnter)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}shouldInitializePayPalFastlane(e){var t,n;const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(e),o=i.getPaymentProviderCustomer(),a=(s=o)&&(\"authenticationState\"in s||\"addresses\"in s||\"instruments\"in s)?o:{};var s;return(null===(t=null==r?void 0:r.initializationData)||void 0===t?void 0:t.isAcceleratedCheckoutEnabled)&&(null===(n=null==r?void 0:r.initializationData)||void 0===n?void 0:n.isBigCommercePaymentsAnalyticsV2Enabled)&&!(null==a?void 0:a.authenticationState)}initializePayPalFastlaneOrThrow(e){return fc(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getPaymentMethodOrThrow(e),{initializationData:r}=i;if(!(null==r?void 0:r.connectClientToken))return;const o=yield this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(i,n.currency.code,n.id);yield this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(o,!!(null==r?void 0:r.isDeveloperModeApplicable))}catch(e){}})}}const vc=Xt(e=>new gc(e,ri(e),bi(),Ii()),[{id:\"bigcommerce_payments_creditcards\"}]);var _c=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class bc{constructor(e,t,n,i,r=3e3,o=3e5){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.bigCommercePaymentsSdkHelper=n,this.loadingIndicator=i,this.pollingInterval=r,this.maxPollingIntervalTime=o,this.pollingTimer=0,this.stopPolling=P.noop,this.isPollingEnabled=!1}initialize(e){return _c(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,bigcommerce_payments_apms:i}=e;if(this.bigCommercePaymentsAlternativeMethods=i,!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!i)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_apms\" argument is not provided.');const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(n,t),{orderId:a,shouldRenderFields:s}=o.initializationData||{},c=r.getStoreConfigOrThrow().checkoutSettings.features;this.isPollingEnabled=an(c,\"PAYPAL-5624.bcp_ideal_polling\"),a?this.orderId=a:(this.paypalApms=yield this.bigCommercePaymentsSdkHelper.getPayPalApmsSdk(o,r.getCartOrThrow().currency.code),this.loadingIndicatorContainer=i.container.split(\"#\")[1],this.renderButton(n,t,i),s&&this.renderFields(n,i))})}execute(e,t){return _c(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);const{methodId:r,gatewayId:o}=n;if(!this.orderId)throw new Bi;this.isPollingEnabled&&\"ideal\"===r&&(yield new Promise((e,t)=>{this.initializePollingMechanism(r,e,t,o)})),this.isNonInstantPaymentMethod(r)||(yield this.paymentIntegrationService.submitOrder(i,t)),yield this.bigCommercePaymentsIntegrationService.submitPayment(r,this.orderId,o)})}finalize(){return Promise.reject(new ds)}deinitialize(){var e;return this.orderId=void 0,this.isPollingEnabled&&this.resetPollingMechanism(),null===(e=this.bigCommercePaymentsButton)||void 0===e||e.close(),Promise.resolve()}initializePollingMechanism(e,t,n,i){return _c(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.bigCommercePaymentsIntegrationService.getOrderStatus(i),o=r===$n.Approved,a=r===$n.PollingError;if(o)return this.deInitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,i);yield this.reinitializeStrategy({methodId:e,gatewayId:i,bigCommercePaymentsAlternativeMethods:this.bigCommercePaymentsAlternativeMethods}),this.handleError(new cc)}catch(e){n()}})}deInitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deInitializePollingMechanism()}reinitializeStrategy(e){return _c(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}handleError(e){const{onError:t}=this.bigCommercePaymentsAlternativeMethods||{};this.isPollingEnabled&&this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderButton(e,t,n){const i=this.getPaypalAmpsSdkOrThrow(),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t),{buttonStyle:o}=r.initializationData||{},{container:a,onError:s,onRenderButton:c,submitForm:d}=n,u={fundingSource:e,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o),onInit:(e,t)=>n.onInitButton(t),createOrder:()=>this.onCreateOrder(e,t,n),onApprove:e=>this.handleApprove(e,d),onCancel:()=>{this.toggleLoadingIndicator(!1),this.deInitializePollingMechanism()},onError:e=>{this.deInitializePollingMechanism(),this.handleFailure(e,s)},onClick:(e,t)=>_c(this,void 0,void 0,function*(){return n.onValidate(t.resolve,t.reject)})};this.bigCommercePaymentsButton=i.Buttons(u),this.bigCommercePaymentsButton.isEligible()&&(c&&\"function\"==typeof c&&c(),this.bigCommercePaymentsButton.render(a))}onCreateOrder(e,t,n){return _c(this,void 0,void 0,function*(){const{onValidate:i}=n;yield i(()=>(this.toggleLoadingIndicator(!0),()=>Promise.resolve()),P.noop);const r=yield this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_apms\");if(this.isNonInstantPaymentMethod(e)){const n={useStoreCredit:!1},i={params:{methodId:e,gatewayId:t}};yield this.paymentIntegrationService.submitOrder(n,i),yield this.bigCommercePaymentsIntegrationService.submitPayment(e,r,t)}return r})}handleApprove({orderID:e},t){this.orderId=e,t()}handleFailure(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderFields(e,t){const n=this.getPaypalAmpsSdkOrThrow(),i=this.paymentIntegrationService.getState(),{firstName:r,lastName:o,email:a}=i.getBillingAddressOrThrow(),{apmFieldsContainer:s,apmFieldsStyles:c}=t;if(!s)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_apms\" argument should contain \"apmFieldsContainer\".');const d=document.querySelector(s);d&&(d.innerHTML=\"\");const u={fundingSource:e,style:c||{},fields:{name:{value:`${r} ${o}`},email:{value:a}}};n.PaymentFields(u).render(s)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isNonInstantPaymentMethod(e){return e.toUpperCase()in Wn}getPaypalAmpsSdkOrThrow(){if(!this.paypalApms)throw new Qt;return this.paypalApms}}const Sc=Xt(e=>new bc(e,ri(e),bi(),new is({containerStyles:Ks})),[{gateway:\"bigcommerce_payments_apms\"}]);class wc{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){const{gatewayId:t,methodId:n,bigcommerce_payments_apms:i}=e;if(this.bigCommercePaymentsAlternativeMethods=i,!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');return Promise.resolve()}execute(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);const{methodId:r,gatewayId:o}=n;try{const e={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:r,paypal_account:{order_id:yield this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_apms\",{gatewayId:\"bigcommerce_payments_apms\",methodId:r})}}};yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment({methodId:r,gatewayId:o,paymentData:e})}catch(e){if(function(e){var t,n;return Zr(e)&&(null===(n=null===(t=e.body)||void 0===t?void 0:t.additional_action_required)||void 0===n?void 0:n.data.redirect_url)}(e)){const t=e.body.additional_action_required.data.redirect_url;return new Promise((e,n)=>{window.location.replace(t),n()})}return this.handleError(e),Promise.reject(e)}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new ds)}deinitialize(){return Promise.resolve()}handleError(e){const{onError:t}=this.bigCommercePaymentsAlternativeMethods||{};t&&\"function\"==typeof t&&t(e)}}const Cc=Xt(e=>new wc(e,ri(e)),[{gateway:\"bigcommerce_payments_apms\",id:\"klarna\"},{gateway:\"bigcommerce_payments_apms\",id:\"afterpay\"}]);var Ic=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Pc{constructor(e,t,n){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.loadingIndicator=n}initialize(e){var t,n;return Ic(this,void 0,void 0,function*(){const{methodId:i,bigcommerce_payments_venmo:r}=e||{};if(!i)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(i);const o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i);(null===(t=o.initializationData)||void 0===t?void 0:t.orderId)?this.orderId=null===(n=o.initializationData)||void 0===n?void 0:n.orderId:(yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i),this.loadingIndicatorContainer=r.container.split(\"#\")[1],this.renderButton(i,r))})}execute(e,t){return Ic(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);if(!this.orderId)throw new Bi;yield this.paymentIntegrationService.submitOrder(i,t),yield this.bigCommercePaymentsIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new ds)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){const n=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:c,onValidate:d,submitForm:u}=t,l={fundingSource:n.FUNDING.VENMO,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o),createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmocheckout\"),onClick:(e,t)=>this.handleClick(t,d),onApprove:e=>this.handleApprove(e,u),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.paypalButton=n.Buttons(l),!this.paypalButton.isEligible())throw new tn(\"Venmo is not available for your region. Please another payment method instead.\");c&&\"function\"==typeof c&&c(),this.paypalButton.render(a)}handleClick(e,t){return Ic(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;yield t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,t(),this.toggleLoadingIndicator(!1)}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const Ec=Xt(e=>new Pc(e,ri(e),new is({styles:{backgroundColor:\"black\"}})),[{id:\"bigcommerce_payments_venmo\"}]);class Oc{initialize(e){this._blueSnapSdk=e}initialize3ds(e,t){return n=this,i=void 0,o=function*(){const n=this._getBlueSnapSdk();return new Promise((i,r)=>{n.threeDsPaymentsSetup(e,e=>\"1\"===e.code?i(e.threeDSecure.threeDSecureReferenceId):r(new Fi)),n.threeDsPaymentsSubmitData(t)})},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}_getBlueSnapSdk(){return jt(this._blueSnapSdk,()=>new Lt(zt.PaymentNotInitialized))}}function Ac(e){return pc.CardNumber in e}function Tc(e){return pc.CardCodeVerification in e||pc.CardNumberVerification in e}var kc,xc,Mc,Nc,Dc,Rc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class zc{constructor(e,t,n,i){this._scriptLoader=e,this._paymentIntegrationService=t,this._blueSnapDirectHostedForm=n,this._blueSnapDirect3ds=i}initialize(e){return Rc(this,void 0,void 0,function*(){const{methodId:t,gatewayId:n,creditCard:i}=e;if(!n||!i)throw new en;const r=yield this._paymentIntegrationService.loadPaymentMethod(n,{params:{method:t,bigpayToken:i.bigpayToken}}),{config:{testMode:o,is3dsEnabled:a},clientToken:s}=r.getPaymentMethodOrThrow(t,n);if(this._blueSnapSdk=yield this._scriptLoader.load(o),this._paymentFieldsToken=s,this._shouldUseHostedFields=Ac(i.form.fields)||Tc(i.form.fields)&&!!i.form.fields.cardNumberVerification,this._shouldUseHostedFields){this._blueSnapDirectHostedForm.initialize(this._blueSnapSdk,i.form.fields);try{yield this._blueSnapDirectHostedForm.attach(this._getPaymentFieldsToken(),i,a)}catch(e){if(e instanceof en)return;throw e}}})}execute(e){return Rc(this,void 0,void 0,function*(){if(!e.payment)throw new Yi([\"payment\"]);if(!this._blueSnapSdk)throw new Yi([\"payment\"]);const{paymentData:t}=e.payment,{shouldSaveInstrument:n,shouldSetAsDefaultInstrument:i}=Es(t)?t:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1},r=this._getPaymentFieldsToken();let o;const{is3dsEnabled:a}=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e.payment.methodId,e.payment.gatewayId).config,s=this._shouldUseHostedFields?yield this._blueSnapDirectHostedForm.validate().submit(a?this._getBlueSnapDirectThreeDSecureData():void 0,!(Es(t)&&Ss(t))):void 0;if(yield this._paymentIntegrationService.submitOrder(),Es(t)&&Ss(t)&&this._paymentFieldsToken&&t.instrumentId){if(a){this._blueSnapDirect3ds.initialize(this._blueSnapSdk);const{last4:e,brand:n}=this._paymentIntegrationService.getState().getCardInstrumentOrThrow(t.instrumentId),i=Object.assign({last4Digits:e,ccType:n.toUpperCase()},this._getBlueSnapDirectThreeDSecureData());o=yield this._blueSnapDirect3ds.initialize3ds(this._paymentFieldsToken,i)}yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e.payment),{paymentData:Object.assign(Object.assign(Object.assign({instrumentId:t.instrumentId},this._shouldUseHostedFields?{nonce:r}:{}),o?{deviceSessionId:o}:{}),{shouldSetAsDefaultInstrument:!!i})}))}else yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e.payment),{paymentData:{formattedPayload:{credit_card_token:{token:JSON.stringify({pfToken:r,cardHolderName:s&&s.cardHolderName})},vault_payment_instrument:n,set_as_default_stored_instrument:i}}}))})}finalize(){return Promise.reject(new ds)}deinitialize(){return this._shouldUseHostedFields&&this._blueSnapDirectHostedForm.detach(),Promise.resolve()}_getBlueSnapDirectThreeDSecureData(){var e;const{getBillingAddress:t,getShippingAddress:n,getCustomer:i,getCheckoutOrThrow:r,getCartOrThrow:o}=this._paymentIntegrationService.getState(),a=t(),s=n(),c=(null===(e=i())||void 0===e?void 0:e.email)||(null==a?void 0:a.email),d=(null==a?void 0:a.phone)||(null==s?void 0:s.phone);return Object.assign(Object.assign(Object.assign(Object.assign({amount:r().outstandingBalance,currency:o().currency.code},c&&{email:c}),d&&{phone:d}),a&&{billingFirstName:a.firstName,billingLastName:a.lastName,billingCountry:a.countryCode,billingCity:a.city,billingAddress:`${a.address1} ${a.address2}`.trim(),billingZip:a.postalCode}),s&&{shippingFirstName:s.firstName,shippingLastName:s.lastName,shippingCountry:s.countryCode,shippingCity:s.city,shippingAddress:`${s.address1} ${s.address2}`.trim(),shippingZip:s.postalCode})}_getPaymentFieldsToken(){return jt(this._paymentFieldsToken,()=>new Ft(Rt.MissingPaymentToken))}}!function(e){e.AMEX=\"american-express\",e.CHINA_UNION_PAY=\"unionpay\",e.DINERS=\"diners-club\",e.DISCOVER=\"discover\",e.JCB=\"jcb\",e.MASTERCARD=\"mastercard\",e.UNKNOWN=\"unknown\",e.VISA=\"visa\"}(kc||(kc={})),function(e){e.ON_BLUR=\"onBlur\",e.ON_SUBMIT=\"onSubmit\"}(xc||(xc={})),function(e){e.EMPTY=\"empty\",e.INVALID=\"invalid\",e.THREE_DS_NOT_ENABLED=\"3D Secure is not enabled\"}(Mc||(Mc={})),function(e){e.CC_NOT_SUPORTED=\"22013\",e.ERROR_403=\"403\",e.ERROR_404=\"404\",e.ERROR_500=\"500\",e.INVALID_OR_EMPTY=\"10\",e.SESSION_EXPIRED=\"400\",e.THREE_DS_AUTH_FAILED=\"14101\",e.THREE_DS_CLIENT_ERROR=\"14103\",e.THREE_DS_MISSING_FIELDS=\"14102\",e.THREE_DS_NOT_ENABLED=\"14100\",e.TOKEN_EXPIRED=\"14040\",e.TOKEN_NOT_ASSOCIATED=\"14042\",e.TOKEN_NOT_FOUND=\"14041\"}(Nc||(Nc={})),function(e){e.CardCode=\"cvv\",e.CardExpiry=\"exp\",e.CardName=\"noc\",e.CardNumber=\"ccn\"}(Dc||(Dc={}));const Fc={[Dc.CardNumber]:pc.CardNumber,[Dc.CardExpiry]:pc.CardExpiry,[Dc.CardName]:pc.CardName,[Dc.CardCode]:pc.CardCode},Bc={empty:{[pc.CardNumber]:{fieldType:\"cardNumber\",message:\"Credit card number is required\",type:\"required\"},[pc.CardNumberVerification]:{fieldType:\"cardNumber\",message:\"Credit card number is required\",type:\"required\"},[pc.CardExpiry]:{fieldType:\"cardExpiry\",message:\"Expiration date is required\",type:\"required\"},[pc.CardCode]:{fieldType:\"cardCode\",message:\"CVV is required\",type:\"required\"},[pc.CardName]:{fieldType:\"cardName\",message:\"Full name is required\",type:\"required\"}},invalid:{[pc.CardNumber]:{fieldType:\"cardNumber\",message:\"Credit card number must be valid\",type:\"invalid_card_number\"},[pc.CardNumberVerification]:{fieldType:\"cardNumber\",message:\"Credit card number must be valid\",type:\"invalid_card_number\"},[pc.CardExpiry]:{fieldType:\"cardExpiry\",message:\"Expiration date must be a valid future date in MM / YY format\",type:\"invalid_card_expiry\"},[pc.CardCode]:{fieldType:\"cardCode\",message:\"CVV must be valid\",type:\"invalid_card_code\"},[pc.CardName]:{fieldType:\"cardName\",message:\"Full name is required\",type:\"required\"}}};class jc{constructor(e,t){this._nameOnCardInput=e,this._hostedInputValidator=t}initialize(e,t){this._blueSnapSdk=e,t&&(Ac(t)?this._hostedInputValidator.initialize():Tc(t)&&t.cardNumberVerification&&this._hostedInputValidator.initializeValidationFields())}attach(e,t,n){var i,r,o,a,s=t.form,{fields:c}=s,d=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(s,[\"fields\"]);return void 0===n&&(n=!1),i=this,r=void 0,a=function*(){const t=this._getBlueSnapSdk();if(!Ac(c)&&!Tc(c))throw new en(\"Field options must be of type HostedCardFieldOptionsMap\");return this._onValidate=d.onValidate,Ac(c)&&this._setCustomBlueSnapAttributes(c),Tc(c)&&this._setCustomStoredCardsBlueSnapAttributes(c),new Promise(i=>{const r=this._getHostedPaymentFieldsOptions(e,c,d,i,n);t.hostedPaymentFieldsCreate(r),Ac(c)&&this._nameOnCardInput.attach(r,c.cardName.accessibilityLabel,c.cardName.placeholder)})},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}c((a=a.apply(i,r||[])).next())})}validate(){var e;const t=this._hostedInputValidator.validate();if(null===(e=this._onValidate)||void 0===e||e.call(this,t),!t.isValid){const e=Object.entries(t.errors).reduce((e,[t,n])=>Object.assign(Object.assign({},e),{[t]:n.map(({message:e,type:t})=>({message:e,type:t}))}),{});throw new Ki(e)}return this}submit(e,t=!1){return new Promise((n,i)=>this._getBlueSnapSdk().hostedPaymentFieldsSubmitData(e=>this._isBlueSnapDirectCallbackError(e)?i(new Fi(e.statusCode===Nc.THREE_DS_AUTH_FAILED?e.error[0].errorDescription:`Submission failed with status: ${e.statusCode} and errors: ${JSON.stringify(e.error)}`)):n(Object.assign(Object.assign({},e.cardData),t?{cardHolderName:this._nameOnCardInput.getValue()}:{})),e))}detach(){this._nameOnCardInput.detach()}_isBlueSnapDirectCallbackError(e){return\"error\"in e}_getHostedPaymentFieldsOptions(e,t,{onFocus:n,onBlur:i,onValidate:r,onCardTypeChange:o,onEnter:a,styles:s},c,d){var u;return Object.assign(Object.assign(Object.assign({token:e,onFieldEventHandler:{setupComplete:()=>c(),onFocus:this._usetUiEventCallback(n),onBlur:this._usetUiEventCallback(i),onError:this._handleError(r),onType:(e,t)=>null==o?void 0:o({cardType:kc[t]}),onEnter:this._usetUiEventCallback(a),onValid:e=>null==r?void 0:r(this._hostedInputValidator.validate({tagId:e}))}},Ac(t)&&{ccnPlaceHolder:t.cardNumber.placeholder||\"\",cvvPlaceHolder:(null===(u=t.cardCode)||void 0===u?void 0:u.placeholder)||\"\",expPlaceHolder:t.cardExpiry.placeholder||\"MM / YY\"}),s&&{style:this._mapStyles(s)}),{\"3DS\":d})}_mapStyles({default:e,error:t,focus:n}){return Object.entries(Object.assign(Object.assign(Object.assign({},e&&{input:e}),t&&{\".invalid\":t}),n&&{\":focus\":n})).reduce((e,[t,n])=>Object.assign(Object.assign({},e),{[t]:Object.entries(n).reduce((e,[t,n])=>Object.assign(Object.assign({},e),{[(0,P.kebabCase)(t)]:n}),{})}),{})}_handleError(e){return(t,n,i,r)=>{if(n===Nc.INVALID_OR_EMPTY&&t&&function(e){return void 0!==e&&[Mc.EMPTY,Mc.INVALID].includes(e)}(i))return null==e?void 0:e(this._hostedInputValidator.validate({tagId:t,errorDescription:i}));throw new Fi(`An unexpected error has occurred: ${JSON.stringify({tagId:t,errorCode:n,errorDescription:i,eventOrigin:r})}`)}}_usetUiEventCallback(e){return t=>{e&&e({fieldType:Fc[t]})}}_getBlueSnapSdk(){return jt(this._blueSnapSdk,()=>new Lt(zt.PaymentNotInitialized))}_setCustomBlueSnapAttributes(e){const{cardNumber:t,cardExpiry:n,cardCode:i,cardName:r}=e,o=document.getElementById(t.containerId),a=document.getElementById(n.containerId),s=i&&document.getElementById(i.containerId),c=document.getElementById(r.containerId);if(!(o&&a&&s&&c))throw new en(\"Unable to create hosted payment fields to invalid HTML container elements.\");o.dataset.bluesnap=Dc.CardNumber,a.dataset.bluesnap=Dc.CardExpiry,s.dataset.bluesnap=Dc.CardCode,c.dataset.bluesnap=Dc.CardName}_setCustomStoredCardsBlueSnapAttributes(e){const{cardNumberVerification:t,cardCodeVerification:n}=e,i=t&&document.getElementById(t.containerId),r=n&&document.getElementById(n.containerId);(i||r)&&(i&&(i.dataset.bluesnap=Dc.CardNumber),r&&(r.dataset.bluesnap=Dc.CardCode))}}class Lc{constructor(){this._errors={}}initialize(){this._errors={cardNumber:[Bc.empty.cardNumber],cardExpiry:[Bc.empty.cardExpiry],cardCode:[Bc.empty.cardCode],cardName:[Bc.empty.cardName]}}initializeValidationFields(){this._errors={cardNumberVerification:[Bc.empty.cardNumber]}}validate(e){return e&&this._updateErrors(e.tagId,e.errorDescription),{isValid:Object.values(this._errors).every(e=>0===e.length),errors:this._errors}}_updateErrors(e,t){const n=this._errors.cardNumberVerification?pc.CardNumberVerification:Fc[e];this._errors[n]=t?[Bc[t][n]]:[]}}class Uc{attach({style:e,onFieldEventHandler:{onFocus:t,onBlur:n,onValid:i,onError:r,onEnter:o}={}},a,s){var c;this._style=e,this._create(),this._getInput().addEventListener(\"focus\",this._handleFocus(t)),this._getInput().addEventListener(\"blur\",this._handleBlur(n,i,r)),this._getInput().addEventListener(\"enter\",this._handleEnter(o)),a&&this._getInput().setAttribute(\"aria-label\",a),s&&(this._getInput().placeholder=s),null===(c=document.querySelector('[data-bluesnap=\"noc\"]'))||void 0===c||c.appendChild(this._getInput())}getValue(){return this._getInput().value}detach(){this._input&&(this._input.remove(),this._input=void 0)}_handleFocus(e){return()=>{var t;this._applyStyles(null===(t=this._style)||void 0===t?void 0:t[\":focus\"]),null==e||e(Dc.CardName)}}_handleBlur(e,t,n){return({target:i})=>{var r,o;null==e||e(Dc.CardName),i instanceof HTMLInputElement&&(/\\w{1,200}/.test(i.value)?(this._applyStyles(null===(r=this._style)||void 0===r?void 0:r.input),null==t||t(Dc.CardName)):(this._applyStyles(null===(o=this._style)||void 0===o?void 0:o[\".invalid\"]),null==n||n(Dc.CardName,Nc.INVALID_OR_EMPTY,Mc.EMPTY,xc.ON_BLUR)))}}_handleEnter(e){return()=>null==e?void 0:e(Dc.CardName)}_applyStyles(e={}){const t={color:e.color,fontFamily:e[\"font-family\"],fontSize:e[\"font-size\"],fontWeight:e[\"font-weight\"]},n=Object.keys(t);n.every(e=>[\"color\",\"fontFamily\",\"fontSize\",\"fontWeight\"].includes(e))&&n.forEach(e=>{t[e]&&(this._getInput().style[e]=t[e]||\"\")})}_configureInput(){this._getInput().autocomplete=\"cc-name\",this._getInput().id=Dc.CardName,this._getInput().inputMode=\"text\",this._getInput().maxLength=200,this._getInput().style.backgroundColor=\"transparent\",this._getInput().style.border=\"0\",this._getInput().style.height=\"100%\",this._getInput().style.margin=\"0\",this._getInput().style.outline=\"none\",this._getInput().style.padding=\"0\",this._getInput().style.width=\"100%\",this._getInput().type=\"text\"}_getInput(){return jt(this._input,()=>new Lt(zt.PaymentNotInitialized))}_create(){var e;this._input=document.createElement(\"input\"),this._configureInput(),this._applyStyles(null===(e=this._style)||void 0===e?void 0:e.input)}}var Vc;!function(e){e.PRODUCTION=\"https://pay.bluesnap.com/web-sdk/5/bluesnap.js\",e.SANDBOX=\"https://sandpay.bluesnap.com/web-sdk/5/bluesnap.js\"}(Vc||(Vc={}));class qc{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e=!1){return t=this,n=void 0,r=function*(){if(this._window.bluesnap)return this._window.bluesnap;if(yield this._scriptLoader.loadScript(e?Vc.SANDBOX:Vc.PRODUCTION),!this._window.bluesnap)throw new Qt;return this._window.bluesnap},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())});var t,n,i,r}}const Hc=Xt(e=>new zc(new qc((0,d.vQ)()),e,new jc(new Uc,new Lc),new Oc),[{id:\"credit_card\",gateway:\"bluesnapdirect\"}]);class Gc{constructor(e){this._paymentIntegrationService=e}execute(e){return t=this,n=void 0,r=function*(){const t=this._formatePaymentPayload(e);yield this._paymentIntegrationService.submitOrder();try{yield this._paymentIntegrationService.submitPayment(t)}catch(e){if(this._isBlueSnapDirectRedirectResponse(e)){const t=e.body.provider_data&&JSON.parse(e.body.provider_data);let n=e.body.additional_action_required.data.redirect_url;if(function(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;return!!t.merchantid&&\"string\"==typeof t.merchantid}(t)){const e=new URLSearchParams(t).toString();n=`${n}&${e}`}return new Promise(()=>window.location.replace(n))}return Promise.reject(e)}},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())});var t,n,i,r}initialize(){return Promise.resolve()}finalize(){return Promise.reject(new ds)}deinitialize(){return Promise.resolve()}_formatePaymentPayload({payment:e}){if(!e)throw new Yi([\"payment\"]);return e.paymentData&&Ss(e.paymentData)&&Es(e.paymentData)?Object.assign(Object.assign({},e),{paymentData:{instrumentId:e.paymentData.instrumentId,shouldSetAsDefaultInstrument:!!e.paymentData.shouldSetAsDefaultInstrument}}):(t=e.paymentData,Boolean(\"object\"==typeof t&&null!==t&&\"accountNumber\"in t&&\"accountType\"in t&&\"shopperPermission\"in t&&\"routingNumber\"in t)?Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{ecp:Object.assign({account_number:e.paymentData.accountNumber,account_type:e.paymentData.accountType,shopper_permission:e.paymentData.shopperPermission,routing_number:e.paymentData.routingNumber},e.paymentData.companyName?{company_name:e.paymentData.companyName}:{}),vault_payment_instrument:e.paymentData.shouldSaveInstrument,set_as_default_stored_instrument:e.paymentData.shouldSetAsDefaultInstrument}}}):(n=e.paymentData,Boolean(\"object\"==typeof n&&null!==n&&\"iban\"in n&&\"firstName\"in n&&\"lastName\"in n&&\"shopperPermission\"in n)?Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{sepa_direct_debit:{iban:e.paymentData.iban,first_name:e.paymentData.firstName,last_name:e.paymentData.lastName,shopper_permission:e.paymentData.shopperPermission},vault_payment_instrument:e.paymentData.shouldSaveInstrument,set_as_default_stored_instrument:e.paymentData.shouldSetAsDefaultInstrument}}}):function(e){return Boolean(\"object\"==typeof e&&null!==e&&\"bic\"in e)}(e.paymentData)?Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{ideal:{bic:e.paymentData.bic}}}}):function(e){return Boolean(\"object\"==typeof e&&null!==e&&\"iban\"in e&&!(\"firstName\"in e)&&!(\"lastName\"in e)&&!(\"shopperPermission\"in e))}(e.paymentData)?Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{pay_by_bank:{iban:e.paymentData.iban}}}}):{methodId:e.methodId}));var t,n}_isBlueSnapDirectRedirectResponse(e){var t;if(\"object\"!=typeof e||null===e)return!1;const n=e;if(!n.body)return!1;const i=n.body;return\"additional_action_required\"===i.status&&!!(null===(t=i.additional_action_required)||void 0===t?void 0:t.data.redirect_url)}}const Wc=Xt(e=>new Gc(e),[{gateway:\"bluesnapdirect\"}]);var $c;!function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}($c||($c={}));const Yc=$c;var Kc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Qc{constructor(e){this._paymentIntegrationService=e}execute(e,t){return Kc(this,void 0,void 0,function*(){const{payment:n}=e;if(!n)throw new Yi([\"payment\"]);if(!this._initializeOptions)throw new Lt(zt.PaymentNotInitialized);const{onLoad:i,style:r}=this._initializeOptions,o=this._createIframe(\"bluesnapv2_hosted_payment_page\",r),a=new dt(new Promise(P.noop));i(o,()=>a.cancel(new Tn)),yield this._paymentIntegrationService.submitOrder(e,t),yield this._paymentIntegrationService.initializeOffsitePayment({methodId:n.methodId,gatewayId:n.gatewayId,shouldSaveInstrument:!1,target:o.name,promise:a.promise})})}finalize(e){return Kc(this,void 0,void 0,function*(){const t=this._paymentIntegrationService.getState(),n=t.getOrder(),i=t.getPaymentStatus();if(!n||i!==Yc.ACKNOWLEDGE&&i!==Yc.FINALIZE)return Promise.reject(new ds);yield this._paymentIntegrationService.finalizeOrder(e)})}initialize(e){return Kc(this,void 0,void 0,function*(){this._initializeOptions=e&&e.bluesnapv2,yield Promise.resolve()})}deinitialize(){return Promise.resolve()}_createIframe(e,t){const n=document.createElement(\"iframe\");if(n.setAttribute(\"sandbox\",\"allow-top-navigation allow-scripts allow-forms allow-same-origin\"),n.name=e,t){const{border:e,height:i,width:r}=t;n.style.border=null!=e?e:\"\",n.style.height=null!=i?i:\"\",n.style.width=null!=r?r:\"\"}return n}}const Jc=Xt(e=>new Qc(e),[{gateway:\"bluesnapv2\"}]);var Zc=n(7576);class Xc{constructor(e){this.storage=e}saveExtraItemsData(e,t){const n=[...t.physicalItems,...t.digitalItems].reduce((e,t)=>(e[t.productId]={brand:t.brand?t.brand:\"\",category:t.categoryNames?t.categoryNames.join(\", \"):\"\"},e),{});try{return this.storage.setItem(this.getStorageKey(e),JSON.stringify(n)),n}catch(e){return{}}}readExtraItemsData(e){try{const t=this.storage.getItem(this.getStorageKey(e));if(!t)return null;const n=JSON.parse(t);return function(e){if(!(0,P.isObject)(e))return!1;const t=Object.values(e).some(e=>!(0,P.isObject)(e)||!(\"brand\"in e)||!(\"category\"in e));return Boolean(!t)}(n)?n:null}catch(e){return null}}clearExtraItemData(e){try{this.storage.removeItem(this.getStorageKey(e))}catch(e){}}getStorageKey(e){return e?`ORDER_ITEMS_${e}`:\"\"}}function ed(e){return Boolean(e.hasOwnProperty(\"analytics\"))}function td(e){return\"object\"==typeof e&&null!==e&&\"shouldCreateAccount\"in e}class nd extends Dt{constructor(e){super(),this.errorCode=e,this.name=\"BoltPaymentsFieldError\",this.type=\"bolt_payments_field_error\",this.body={errors:[nd.getError(e)]}}static getError(e){switch(e){case\"1000\":case\"2000\":case\"3000\":return{code:\"invalid_number\"};case\"1001\":case\"2001\":case\"3001\":return{code:\"invalid_expiry_date\"};case\"1002\":case\"2002\":return{code:\"invalid_cvc\"};case\"1003\":return{code:\"invalid_zip\"};case\"2003\":return{code:\"incorrect_zip\"};default:return{code:\"general_error\"}}}}var id=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class rd{constructor(e,t,n){this.paymentIntegrationService=e,this.boltScriptLoader=t,this.analyticsExtraItemsManager=n,this.useBoltClient=!1,this.useBoltEmbedded=!1}initialize(e){return id(this,void 0,void 0,function*(){const{bolt:t,methodId:n}=e,{containerId:i,onPaymentSelect:r,useBigCommerceCheckout:o}=t||{};if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!o)return void(this.boltClient=yield this.boltScriptLoader.loadBoltClient());const a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId),{initializationData:s,config:c}=a,{publishableKey:d,developerConfig:u,embeddedOneClickEnabled:l}=s||{},{testMode:h}=c;if(!d)throw new Ft(Rt.MissingPaymentMethod);if(this.boltClient=yield this.boltScriptLoader.loadBoltClient(d,h,u),this.useBoltClient=!l,this.useBoltEmbedded=!!l,this.useBoltEmbedded){if(!i)throw new en('Unable to initialize payment because \"options.bolt.containerId\" argument is not provided.');if(!r)throw new en('Unable to initialize payment because \"options.bolt.onPaymentSelect\" argument is not provided.');this.boltEmbedded=yield this.boltScriptLoader.loadBoltEmbedded(d,h,u),this.mountBoltEmbeddedField(i),r(yield this.hasBoltAccount())}})}deinitialize(){var e;return null===(e=this.embeddedField)||void 0===e||e.unmount(),this.boltClient=void 0,this.boltEmbedded=void 0,Promise.resolve()}finalize(){return Promise.reject(new ds)}execute(e,t){return id(this,void 0,void 0,function*(){this.setExtraItemsForAnalytics();const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{methodId:r,paymentData:o}=n||{};let a;if(!e.payment)throw new Yi([\"payment\"]);if(!r)throw new Ft(Rt.MissingPaymentMethod);if(!o||!function(e){return Boolean((0,P.isObject)(e)&&(\"shouldSaveInstrument\"in e||\"nonce\"in e||td(e)))}(o))throw new Ft(Rt.MissingPayment);yield this.paymentIntegrationService.submitOrder(i,t),a=this.useBoltClient?yield this.getBoltClientPaymentPayload(r,o,t):this.useBoltEmbedded?yield this.getBoltEmbeddedPaymentPayload(r,o):yield this.getBoltFullCheckoutPaymentPayload(r,o),yield this.paymentIntegrationService.submitPayment(a)})}getBoltClientPaymentPayload(e,t,n){return id(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadPaymentMethod(e,n);const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(e).clientToken,{isStoreCreditApplied:o}=i.getCheckoutOrThrow(),{shouldSaveInstrument:a}=t,s=this.getBoltClientOrThrow();if(yield this.paymentIntegrationService.applyStoreCredit(o),!r)throw new Ft(Rt.MissingPaymentMethod);const c=yield new Promise((e,t)=>{const n={success:(n,i)=>{n.reference?e(n):t(new Fi(\"Unable to proceed because transaction reference is unavailable. Please try again later.\")),i()},close:()=>{t(new Tn)}};s.configure({orderToken:r},{},n).open()});return{methodId:e,paymentData:{nonce:c.reference,shouldSaveInstrument:a}}})}getBoltEmbeddedPaymentPayload(e,t){var n;return id(this,void 0,void 0,function*(){if(!td(t))throw new Ft(Rt.MissingPayment);const i=this.validateTokenizeResultOrThrow(yield null===(n=this.embeddedField)||void 0===n?void 0:n.tokenize());return{methodId:e,paymentData:{formattedPayload:{credit_card_token:{token:i.token,last_four_digits:i.last4,iin:i.bin,expiration_month:+i.expiration.split(\"-\")[1],expiration_year:+i.expiration.split(\"-\")[0]},provider_data:{create_account:!!t.shouldCreateAccount,embedded_checkout:!0}}}}})}getBoltFullCheckoutPaymentPayload(e,t){return id(this,void 0,void 0,function*(){yield this.setBoltOrderId();const n=this.getBoltClientOrThrow(),i=yield n.getTransactionReference();if(!i)throw new Bi;return{methodId:e,paymentData:Object.assign(Object.assign({},t),{nonce:i})}})}getBoltClientOrThrow(){if(!this.boltClient)throw new Lt(zt.PaymentNotInitialized);return this.boltClient}getBoltEmbeddedOrThrow(){if(!this.boltEmbedded)throw new Lt(zt.PaymentNotInitialized);return this.boltEmbedded}hasBoltAccount(){return id(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState(),t=e.getCustomer(),n=e.getBillingAddress(),i=(null==t?void 0:t.email)||(null==n?void 0:n.email)||\"\",r=this.getBoltClientOrThrow();try{return yield r.hasBoltAccount(i)}catch(e){throw new Bi}})}setBoltOrderId(){return id(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getOrderOrThrow(),t=this.getBoltClientOrThrow();try{yield t.setOrderId(e.orderId)}catch(e){throw new Bi}})}mountBoltEmbeddedField(e){const t=this.getBoltEmbeddedOrThrow().create(\"payment_field\",{styles:{backgroundColor:\"#fff\"},renderSeparateFields:!0});t.mount(`#${e}`),this.embeddedField=t}validateTokenizeResultOrThrow(e){if(!e)throw new Bi;if(e instanceof Error)throw new nd(e.message);const{token:t,last4:n,bin:i,expiration:r}=e,o=+n,a=+i,s=+`${r}`.split(\"-\")[1],c=+`${r}`.split(\"-\")[0];if(!t||Number.isNaN(o)||Number.isNaN(a)||Number.isNaN(s)||Number.isNaN(c))throw new Yi;return e}setExtraItemsForAnalytics(){const e=this.paymentIntegrationService.getState(),t=e.getStoreConfigOrThrow(),n=e.getCartOrThrow();if(t.checkoutSettings.isAnalyticsEnabled&&ed(window)){const{id:e,lineItems:t}=n;this.analyticsExtraItemsManager.saveExtraItemsData(e,t)}}}const od=Xt(e=>new rd(e,new Gi((0,d.vQ)()),new Xc(Zc.Ay)),[{id:\"bolt\"}]);function ad(e){return!!e&&\"accountNumber\"in e&&\"routingNumber\"in e&&\"ownershipType\"in e&&\"accountType\"in e}var sd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class cd{constructor(e,t){this.paymentIntegrationService=e,this.braintreeSdk=t}initialize(e){return sd(this,void 0,void 0,function*(){const{methodId:t,braintreeach:n}=e||{};if(!t)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');this.getMandateText=null==n?void 0:n.getMandateText,yield this.paymentIntegrationService.loadPaymentMethod(t);const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{clientToken:r,initializationData:o}=i;if(!r||!o)throw new Ft(Rt.MissingPaymentMethod);this.braintreeSdk.initialize(r);try{this.usBankAccount=yield this.braintreeSdk.getUsBankAccount()}catch(e){this.handleBraintreeError(e)}})}execute(e,t){return sd(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);const r=Ss(n.paymentData||{}),o=r?yield this.tokenizePaymentForVaultedInstrument(n):yield this.tokenizePayment(n),a=r?yield this.preparePaymentDataForVaultedInstrument(o,n):yield this.preparePaymentData(o,n);yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment(a)})}finalize(){return Promise.reject(new ds)}deinitialize(){return sd(this,void 0,void 0,function*(){return yield this.braintreeSdk.deinitialize(),Promise.resolve()})}tokenizePayment({paymentData:e}){return sd(this,void 0,void 0,function*(){const t=this.getUsBankAccountOrThrow();if(!ad(e))throw new Yi([\"payment.paymentData\"]);const n=Ss(e)?\"The data are used for stored instrument verification\":\"function\"==typeof this.getMandateText&&this.getMandateText();if(!n)throw new en(\"Unable to proceed because getMandateText is not provided or returned undefined value.\");try{const{nonce:i}=yield t.tokenize({bankDetails:this.getBankDetails(e),mandateText:n});return i}catch(e){this.handleBraintreeError(e)}})}tokenizePaymentForVaultedInstrument(e){return sd(this,void 0,void 0,function*(){const{methodId:t,paymentData:n={}}=e,i=this.paymentIntegrationService.getState(),{config:r}=i.getPaymentMethodOrThrow(t);if(!r.isVaultingEnabled)throw new en(\"Vaulting is disabled but a vaulted instrument was being used for this transaction\");return ad(n)?this.tokenizePayment(e):null})}preparePaymentData(e,t){return sd(this,void 0,void 0,function*(){const{methodId:n,paymentData:i={}}=t;if(!ad(i))throw new Yi([\"payment.paymentData\"]);const{deviceData:r}=yield this.braintreeSdk.getDataCollectorOrThrow(),{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a,routingNumber:s,accountNumber:c}=i;return{methodId:n,paymentData:{deviceSessionId:r,shouldSetAsDefaultInstrument:a,shouldSaveInstrument:o,formattedPayload:{tokenized_bank_account:{issuer:s,masked_account_number:c.substr(-4),token:e}}}}})}preparePaymentDataForVaultedInstrument(e,t){return sd(this,void 0,void 0,function*(){const{methodId:n,paymentData:i={}}=t;if(!Ss(i)||!Es(i))throw new Yi([\"payment.paymentData\"]);const{deviceData:r}=yield this.braintreeSdk.getDataCollectorOrThrow(),{instrumentId:o,shouldSetAsDefaultInstrument:a}=i;return{methodId:n,paymentData:Object.assign({deviceSessionId:r,instrumentId:o,shouldSetAsDefaultInstrument:a},e&&{nonce:e})}})}getBankDetails(e){const t=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),n=e.ownershipType.toLowerCase(),i=e.accountType.toLowerCase();return Object.assign(Object.assign({accountNumber:e.accountNumber,routingNumber:e.routingNumber,ownershipType:n},\"personal\"===n?{firstName:e.firstName,lastName:e.lastName}:{businessName:e.businessName}),{accountType:i,billingAddress:{streetAddress:t.address1,extendedAddress:t.address2,locality:t.city,region:t.stateOrProvinceCode,postalCode:t.postalCode}})}getUsBankAccountOrThrow(){if(!this.usBankAccount)throw new Lt(zt.PaymentNotInitialized);return this.usBankAccount}handleBraintreeError(e){if(!_n(e))throw e;throw new Fi(e.message)}}const dd=Xt(e=>new cd(e,(e=>{const t=new un(e),n=new An((0,d.vQ)(),window,t);return new In(n)})(e)),[{id:\"braintreeach\"}]);class ud{constructor(e){this.paymentIntegrationService=e,this.braintreeHostWindow=window}render(e,t,n){const i=t&&document.getElementById(t);if(this.braintreeHostWindow.paypal&&i){const r=this.paymentIntegrationService.getState(),o=r.getCartOrThrow(),a=r.getBillingAddressOrThrow(),s=r.getPaymentMethodOrThrow(e);if(!s.initializationData)return;const{paypalBNPLConfiguration:c=[]}=s.initializationData,d=n===ir.PAYMENT?\"checkout\":n,u=c&&c.find(({id:e})=>e===d);if(!u||!u.status)return;n===ir.CART&&(i.removeAttribute(\"data-pp-style-logo-type\"),i.removeAttribute(\"data-pp-style-logo-position\"),i.removeAttribute(\"data-pp-style-text-color\"),i.removeAttribute(\"data-pp-style-text-size\")),this.braintreeHostWindow.paypal.Messages({amount:o.cartAmount,buyerCountry:a.countryCode,placement:n,style:this.getPaypalMessagesStylesFromBNPLConfig(u)}).render(`#${t}`)}}getPaypalMessagesStylesFromBNPLConfig({styles:e}){const t={};return e.color&&(t.color=e.color),e.layout&&(t.layout=e.layout),(e[\"logo-type\"]||e[\"logo-position\"])&&(t.logo={},e[\"logo-type\"]&&(t.logo.type=e[\"logo-type\"]),e[\"logo-position\"]&&(t.logo.position=e[\"logo-position\"])),e.ratio&&(t.ratio=e.ratio),(e[\"text-color\"]||e[\"text-size\"])&&(t.text={},e[\"text-color\"]&&(t.text.color=e[\"text-color\"]),e[\"text-size\"]&&(t.text.size=+e[\"text-size\"])),t}}class ld{constructor(e){const{element:t,closeElement:n,mainElement:i}=this._createElements(e);this._element=t,this._closeElement=n,this._mainElement=i}show(e){this._mainElement.parentElement||(this._registerClick(e),document.body.appendChild(this._mainElement),setTimeout(()=>this._element.style.opacity=\"1\"))}remove(){this._mainElement.parentElement&&(this._unregisterClick&&this._unregisterClick(),this._removeAfterTransition(),setTimeout(()=>this._element.style.opacity=\"0\"))}_createElements(e){const t=document.createElement(\"div\"),{background:n=\"rgba(0, 0, 0, 0.8)\",id:i=\"checkoutOverlay\",transitionDuration:r=400,hasCloseButton:o=!1,innerHtml:a=null}=e||{};let s,c,d,u,l=t;if(i&&(t.id=i),a){const e=document.createElement(\"div\");u=`${i}--overlayText`,e.className=u,e.appendChild(a),t.appendChild(e)}return o&&(d=`${i}--close`,s=document.createElement(\"div\"),s.className=d,c=`${i}--layout`,l=document.createElement(\"div\"),l.className=c,l.appendChild(t),l.appendChild(s)),l.appendChild(function(e){const{id:t,background:n,transitionDuration:i,classLayout:r,classOverlayText:o,classClose:a}=e,s=document.createElement(\"style\"),c=r?`, .${r}`:\"\";return s.id=`${t}--styles`,s.type=\"text/css\",s.innerText=`\\n        #${t}${c} {\\n            display: block;\\n            height: 100%;\\n            width: 100%;\\n            left: 0;\\n            top: 0;\\n            position: fixed;\\n            z-index: 2147483647;\\n        }\\n        #${t} {\\n            transition: opacity ${i}ms ease-out;\\n            background: ${n};\\n            opacity: 0;\\n        }\\n    `,o&&(s.innerText+=`\\n             #${t} {\\n                display: flex;\\n                align-items: center;\\n                justify-content: center;\\n             }\\n             #${t} .${o} {\\n                color: white;\\n                max-width: 330px;\\n                font-size: 1.2em;\\n                text-align: center;\\n             }\\n        `),a&&(s.innerText+=`\\n            #${t} {\\n                opacity: 1;\\n            }\\n            .${r} .${a} {\\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            .${r} .${a}::after, .${r} .${a}::before {\\n                position: absolute;\\n                left: 8px;\\n                content: '';\\n                height: 16px;\\n                width: 2px;\\n                background-color: #fff;\\n            }\\n            .${r} .${a}::after {\\n                transform: rotate(-45deg);\\n            }\\n            .${r} .${a}::before {\\n                transform: rotate(45deg);\\n            }\\n        `),s}({id:i,background:n,transitionDuration:r,classLayout:c,classOverlayText:u,classClose:d})),{element:t,closeElement:s,mainElement:l}}_addEventListener(e,t){e&&t&&e.addEventListener(\"click\",t)}_removeEventListener(e,t){e&&t&&e.removeEventListener(\"click\",t)}_registerClick(e){if(this._unregisterClick&&this._unregisterClick(),e){const{onClick:t,onClickClose:n}=e;this._addEventListener(this._element,t),this._addEventListener(this._closeElement,n),this._unregisterClick=()=>{this._removeEventListener(this._element,t),this._removeEventListener(this._closeElement,n),this._unregisterClick=void 0}}}_removeAfterTransition(){const e=t=>{\"opacity\"===t.propertyName&&(this._mainElement.parentElement&&this._mainElement.remove(),this._element.removeEventListener(\"transitionend\",e))};this._element.addEventListener(\"transitionend\",e)}}const hd={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"};function pd(e){return\"object\"==typeof e&&null!==e&&\"name\"in e&&\"BraintreeError\"===e.name}function md(e){return{recipientName:`${e.firstName} ${e.lastName}`,line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,postalCode:e.postalCode,countryCode:e.countryCode,phone:e.phone}}var yd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class fd{constructor(e,t,n,i){this.paymentIntegrationService=e,this.braintreeIntegrationService=t,this.braintreeMessages=n,this.loadingIndicator=i,this.braintreeHostWindow=window}initialize(e){return yd(this,void 0,void 0,function*(){const{braintree:t,methodId:n}=e;if((null==t?void 0:t.containerId)&&(this.braintreeButtonOptions=t),this.paymentMethod&&this.paymentMethod.nonce||(this.paymentMethod=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n)),this.paymentMethod.clientToken&&(null==t?void 0:t.bannerContainerId))return yield this.loadPaypal(),this.loadPaypalCheckoutInstance(t);if(this.paymentMethod.clientToken)return this.loadPaypal();const i=yield this.paymentIntegrationService.loadPaymentMethod(n);if(this.paymentMethod=i.getPaymentMethodOrThrow(n),null==t?void 0:t.bannerContainerId)return this.loadPaypalCheckoutInstance(t);if(!this.paymentMethod.clientToken)throw new Ft(Rt.MissingPaymentMethod);return this.loadPaypal()})}execute(e,t){var n;return yd(this,void 0,void 0,function*(){const{payment:i}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!i)throw new Yi([\"payment\"]);const{onError:o}=this.braintreeButtonOptions||{};try{const e=yield this.preparePaymentData(i,r.useStoreCredit);yield this.paymentIntegrationService.submitOrder(r,t),yield this.paymentIntegrationService.submitPayment(e)}catch(e){this.isProviderError(e)&&(yield this.loadPaypal(),null===(n=this.paypalButtonRender)||void 0===n||n.close(),yield this.loadPaypalCheckoutInstance(this.braintreeButtonOptions),yield new Promise((e,t)=>{o&&\"function\"==typeof o&&o(new Error(\"INSTRUMENT_DECLINED\")),t()})),this.handleError(e)}})}finalize(){return Promise.reject(new ds)}deinitialize(){var e;return this.braintreeTokenizePayload=void 0,null===(e=this.paypalButtonRender)||void 0===e||e.close(),this.braintreeIntegrationService.teardown()}preparePaymentData(e,t){var n;return yd(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),r=i.getOutstandingBalance(t),o=i.getStoreConfig();if(!r)throw new Ft(Rt.MissingCheckout);if(!o)throw new Ft(Rt.MissingCheckoutConfig);if(!this.paymentMethod)throw new Lt(zt.PaymentNotInitialized);const{currency:a,storeProfile:{storeLanguage:s}}=o,{nonce:c,config:{isVaultingEnabled:d}}=this.paymentMethod,{methodId:u,paymentData:l={}}=e,h=(null===(n=this.braintreeTokenizePayload)||void 0===n?void 0:n.nonce)||c;if(h){const t=yield this.paymentIntegrationService.loadPaymentMethod(u);return this.paymentMethod=t.getPaymentMethod(u),Object.assign(Object.assign({},e),{paymentData:this.formattedPayload(h)})}if(Ss(l)||(p=l,Boolean(p.instrumentId)&&!Object.prototype.hasOwnProperty.call(p,\"ccNumber\")&&!Object.prototype.hasOwnProperty.call(p,\"ccCvv\"))){if(!d)throw new en(\"Vaulting is disabled but a vaulted instrument was being used for this transaction\");return Promise.resolve(e)}var p;if(!Es(l))throw new Ft(Rt.MissingPayment);const{shouldSaveInstrument:m,shouldSetAsDefaultInstrument:y}=l;if(m&&!d)throw new en(\"Vaulting is disabled but shouldSaveInstrument is set to true\");const f=i.getShippingAddress(),g=f?md(f):void 0;return Promise.all([this.braintreeIntegrationService.paypal({amount:r,locale:s,currency:a.code,offerCredit:\"braintreepaypalcredit\"===this.paymentMethod.id,shippingAddressOverride:g,shouldSaveInstrument:m||!1,shippingAddressEditable:!1}),this.braintreeIntegrationService.getSessionId()]).then(([{nonce:t,details:n}={},i])=>Object.assign(Object.assign({},e),{paymentData:this.formattedPayload(t,n&&n.email,i,m,y)}))})}formattedPayload(e,t,n,i,r){return{formattedPayload:{vault_payment_instrument:i||null,set_as_default_stored_instrument:r||null,device_info:n||null,paypal_account:{token:e,email:t||null}}}}loadPaypalCheckoutInstance(e){return yd(this,void 0,void 0,function*(){const{clientToken:t,initializationData:n,id:i}=this.paymentMethod||{};if(!t)throw new Ft(Rt.MissingPaymentMethod);try{this.braintreeIntegrationService.initialize(t);const r={currency:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,intent:null==n?void 0:n.intent,isCreditEnabled:null==n?void 0:n.isCreditEnabled},o=\"braintreepaypalcredit\"===i||!(null==n?void 0:n.isCreditEnabled);yield this.braintreeIntegrationService.getPaypalCheckout(r,t=>{o&&i&&(null==e?void 0:e.bannerContainerId)&&this.renderPayPalMessages(i,e.bannerContainerId),this.renderPayPalButton(t,e)},this.handleError)}catch(e){this.handleError(e)}})}renderPayPalMessages(e,t){this.braintreeMessages.render(e,t,ir.PAYMENT)}renderPayPalButton(e,t){const{onPaymentError:n,submitForm:i,onRenderButton:r,containerId:o,onError:a}=t||{};if(!o)return;const s=this.getSmartButtonContainerId(o);if(!document.getElementById(s))throw new en(`Unable to initialize payment because element with id ${o} does not exist.`);if(!this.paymentMethod)throw new Lt(zt.PaymentNotInitialized);this.loadingIndicatorContainer=o.split(\"#\")[1];const{id:c,config:{testMode:d}}=this.paymentMethod,{paypal:u}=this.braintreeHostWindow,l=null==u?void 0:u.FUNDING.PAYPAL;u&&l?(this.paypalButtonRender=u.Buttons({env:d?\"sandbox\":\"production\",commit:!1,fundingSource:l,onClick:()=>{this.toggleLoadingIndicator(!0)},createOrder:()=>this.setupPayment(e,c,n),onApprove:t=>yd(this,void 0,void 0,function*(){this.braintreeTokenizePayload=yield this.tokenizePaymentOrThrow(t,e),i&&\"function\"==typeof i&&i()}),onCancel:()=>{this.toggleLoadingIndicator(!1)},onError:e=>{this.toggleLoadingIndicator(!1),null==a||a(e)}}),r&&\"function\"==typeof r&&r(),this.paypalButtonRender.isEligible()&&this.paypalButtonRender.render(`${o}`)):this.removeElement(o.split(\"#\")[1])}setupPayment(e,t,n){return yd(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState();try{const n=i.getCustomer(),r=i.getPaymentMethodOrThrow(t),o=i.getCheckoutOrThrow().outstandingBalance,a=i.getStoreConfigOrThrow().currency.code,s=i.getShippingAddress()||(null==n?void 0:n.addresses[0]),c=s?md(s):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:c,amount:o,currency:a,offerCredit:!1,intent:r.initializationData.intent})}catch(e){throw n&&(pd(e)||e instanceof Dt)&&n(e),e}})}tokenizePaymentOrThrow(e,t,n){return yd(this,void 0,void 0,function*(){try{return yield t.tokenizePayment(e)}catch(e){throw n&&(pd(e)||e instanceof Dt)&&n(e),e}})}loadPaypal(){return yd(this,void 0,void 0,function*(){const{clientToken:e,initializationData:t}=this.paymentMethod||{};if(!e||!t)throw new Ft(Rt.MissingPaymentMethod);try{this.braintreeIntegrationService.initialize(e),yield this.braintreeIntegrationService.getPaypal()}catch(e){this.handleError(e)}return Promise.resolve()})}handleError(e){if(!pd(e))throw e;if(\"PAYPAL_POPUP_CLOSED\"===e.code)throw new Tn(e.message);throw new Fi(e.message)}isProviderError(e){var t,n,i;return!!function(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e}(e)&&\"2046\"===(null===(i=null===(n=((null===(t=null==e?void 0:e.errors)||void 0===t?void 0:t.filter(e=>e.provider_error))||[])[0])||void 0===n?void 0:n.provider_error)||void 0===i?void 0:i.code)}removeElement(e){const t=e&&document.getElementById(e);t&&t.remove()}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}getSmartButtonContainerId(e){var t;return null!==(t=e.split(\"#\")[1])&&void 0!==t?t:e}}const gd=Xt(e=>{const t=window,n=new ld,i=new un(e),r=new or(new An((0,d.vQ)(),t,i),t,n),o=new ud(e);return new fd(e,r,o,new is({containerStyles:hd}))},[{id:\"braintreepaypal\"},{id:\"braintreepaypalcredit\"}]);class vd{constructor(e){this.requestSender=e}getOrderStatus(e=\"braintreelocalmethods\",t){return n=this,i=void 0,o=function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}}var _d=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class bd{constructor(e,t,n,i,r=3e3,o=3e5){this.paymentIntegrationService=e,this.braintreeSdk=t,this.braintreeRequestSender=n,this.loadingIndicator=i,this.pollingInterval=r,this.maxPollingIntervalTime=o,this.isLPMsUpdateExperimentEnabled=!1,this.pollingTimer=0,this.stopPolling=P.noop,this.isPollingEnabled=!1}initialize(e){return _d(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,braintreelocalmethods:i}=e;if(this.gatewayId=t,!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!i)throw new en('Unable to initialize payment because \"options.braintreelocalmethods\" argument is not provided.');this.braintreelocalmethods=i,this.loadingIndicatorContainer=i.container.split(\"#\")[1],yield this.paymentIntegrationService.loadPaymentMethod(t);const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(t),{clientToken:a,config:s,initializationData:c}=o,d=r.getStoreConfigOrThrow().checkoutSettings.features;if(this.isPollingEnabled=an(d,\"PAYPAL-5258.braintree_local_methods_polling\"),this.isLPMsUpdateExperimentEnabled=an(d,\"PAYPAL-4853.add_new_payment_flow_for_braintree_lpms\"),!a||!c||!s.merchantId)throw new Ft(Rt.MissingPaymentMethod);try{this.braintreeSdk.initialize(a),this.isNonInstantPaymentMethod(n)||(this.braintreeLocalPayment=yield this.braintreeSdk.getBraintreeLocalPayment(s.merchantId))}catch(e){this.handleError(e)}})}finalize(){return Promise.reject(new ds)}deinitialize(){return _d(this,void 0,void 0,function*(){return this.toggleLoadingIndicator(!1),Promise.resolve()})}execute(e,t){return _d(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);const{methodId:r}=n;this.toggleLoadingIndicator(!0),this.isNonInstantPaymentMethod(r)?yield this.executeWithNotInstantLPM(r):yield this.executeWithInstantLPM(r,i,t)})}executeWithNotInstantLPM(e){return _d(this,void 0,void 0,function*(){try{const t=yield this.getLPMsBasicPaymentData();yield this.paymentIntegrationService.submitOrder(),yield this.paymentIntegrationService.submitPayment({methodId:e,paymentData:Object.assign(Object.assign({},t),{formattedPayload:{method:e}})})}catch(e){if(this.isBraintreeRedirectError(e)){const t=e.body.additional_action_required.data.redirect_url;return new Promise((e,n)=>{window.location.replace(t),this.toggleLoadingIndicator(!1),n()})}return this.handleError(e),Promise.reject(e)}})}executeWithInstantLPM(e,t,n){return _d(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment)throw new Bi;yield new Promise((i,r)=>{var o;null===(o=this.braintreeLocalPayment)||void 0===o||o.startPayment(this.getInstantLPMConfig(e,t,n),this.getInstantLPMCallback(i,r,e,t,n))})})}getLPMsBasicPaymentData(){return _d(this,void 0,void 0,function*(){const{deviceData:e}=yield this.braintreeSdk.getDataCollectorOrThrow();return{deviceSessionId:e}})}getInstantLPMConfig(e,t,n){const i=this.paymentIntegrationService.getState(),r=i.getCartOrThrow(),o=i.getBillingAddressOrThrow(),{firstName:a,lastName:s,countryCode:c}=o,{currency:d,email:u,lineItems:l}=r,h=l.physicalItems.length>0,p=i.getCheckoutOrThrow().outstandingBalance,m=i.getStoreConfigOrThrow().links.checkoutLink;return{paymentType:e,amount:p,fallback:{url:m,buttonText:\"Complete Payment\"},currencyCode:d.code,shippingAddressRequired:h,email:u,givenName:a,surname:s,address:{countryCode:c},onPaymentStart:(i,r)=>_d(this,void 0,void 0,function*(){if(!this.isLPMsUpdateExperimentEnabled)return this.orderId=i.paymentId,void r();const o=yield this.getLPMsBasicPaymentData(),a=Object.assign(Object.assign({},o),{formattedPayload:{method:e,[`${e}_account`]:{order_id:i.paymentId}}});try{yield this.paymentIntegrationService.submitOrder(t,n),yield this.paymentIntegrationService.submitPayment({methodId:e,paymentData:a})}catch(t){if(this.isBraintreeOrderSavedResponse(t)&&t.body.additional_action_required.data.order_id_saved_successfully)return r(),this.isPollingEnabled?new Promise((t,n)=>{this.initializePollingMechanism(e,t,n,this.gatewayId)}):void 0;throw t}})}}getInstantLPMCallback(e,t,n,i,r){const o=this.paymentIntegrationService.getState().getCartOrThrow();return(a,s)=>_d(this,void 0,void 0,function*(){if(a)return\"LOCAL_PAYMENT_WINDOW_CLOSED\"===a.code?(this.toggleLoadingIndicator(!1),this.resetPollingMechanism(),t()):(this.isPollingEnabled&&this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t(new Bi));const c=yield this.getLPMsBasicPaymentData(),d=Object.assign(Object.assign({},c),{formattedPayload:{method:n,[`${n}_account`]:Object.assign({email:o.email,token:s.nonce},this.isLPMsUpdateExperimentEnabled?{}:{order_id:this.orderId})}});try{return this.isLPMsUpdateExperimentEnabled||(yield this.paymentIntegrationService.submitOrder(i,r)),yield this.paymentIntegrationService.submitPayment({methodId:n,paymentData:d}),e(void 0)}catch(e){return this.handleError(e),t(e)}})}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}handleError(e){const{onError:t}=this.braintreelocalmethods||{};this.isPollingEnabled&&this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}isNonInstantPaymentMethod(e){return e.toUpperCase()in mn}isBraintreeRedirectError(e){var t;if(\"object\"!=typeof e||null===e)return!1;const{body:n}=e;return!!n&&!!(null===(t=n.additional_action_required)||void 0===t?void 0:t.data.redirect_url)}isBraintreeOrderSavedResponse(e){var t;if(\"object\"!=typeof e||null===e)return!1;const{body:n}=e;return!!n&&(null===(t=n.additional_action_required)||void 0===t?void 0:t.data.hasOwnProperty(\"order_id_saved_successfully\"))}initializePollingMechanism(e,t,n,i){return _d(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.braintreeRequestSender.getOrderStatus(i,{params:{useMetadata:!1}}),o=r.status===pn.Pending,a=r.status===pn.Completed,s=r.status===pn.Failed;if(a)return this.deinitializePollingMechanism(),t();if(s)return n();if(!a&&o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,i);yield this.reinitializeStrategy({methodId:e,gatewayId:i,braintreelocalmethods:this.braintreelocalmethods}),this.handleError(new cc)}catch(e){n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}reinitializeStrategy(e){return _d(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}}const Sd=Xt(e=>{const t=window,n=new un(e),i=new In(new An((0,d.vQ)(),t,n)),r=(0,o.createRequestSender)(),a=new vd(r);return new bd(e,i,a,new is({styles:{backgroundColor:\"black\"}}))},[{gateway:\"braintreelocalmethods\"}]);function wd(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}var Cd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Id{constructor(e,t,n){this.paymentIntegrationService=e,this.braintreeFastlaneUtils=t,this.braintreeSdk=n}initialize(e){var t;return Cd(this,void 0,void 0,function*(){const{methodId:n,braintreefastlane:i}=e;if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new en('Unable to initialize payment because \"options.braintreefastlane\" argument is not provided.');if(!i.onInit||\"function\"!=typeof i.onInit)throw new en('Unable to initialize payment because \"options.braintreefastlane.onInit\" argument is not provided or it is not a function.');if(!i.onChange||\"function\"!=typeof i.onChange)throw new en('Unable to initialize payment because \"options.braintreefastlane.onChange\" argument is not provided or it is not a function.');yield this.paymentIntegrationService.loadPaymentMethod(n);const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(n),{initializationData:a,clientToken:s}=o||{},{isFastlaneStylingEnabled:c}=a||{},d=an(r.getStoreConfigOrThrow().checkoutSettings.features,\"PROJECT-7080.braintree_fastlane_three_ds\");this.is3DSEnabled=o.config.is3dsEnabled,s&&d&&this.braintreeSdk.initialize(s);const u=pr(c?null===(t=o.initializationData)||void 0===t?void 0:t.fastlaneStyles:void 0,i.styles);yield this.braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow(n,u),this.shouldRunAuthenticationFlow()&&(yield this.braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow()),yield this.initializeCardComponent(),this.onError=i.onError,i.onInit(e=>this.renderBraintreeCardComponent(e)),i.onChange(()=>this.handleBraintreeStoredInstrumentChange(n))})}execute(e,t){return Cd(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);yield this.paymentIntegrationService.submitOrder(i,t);const r=yield this.preparePaymentPayload(n.methodId);yield this.paymentIntegrationService.submitPayment(r),this.braintreeFastlaneUtils.removeSessionIdFromCookies()})}finalize(){return Promise.reject(new ds)}deinitialize(){return Cd(this,void 0,void 0,function*(){return this.braintreeCardComponent=void 0,Promise.resolve()})}initializeCardComponent(){return Cd(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState(),{phone:t,firstName:n,lastName:i}=e.getBillingAddressOrThrow(),r=`${n} ${i}`,o={styles:{},fields:Object.assign({cardholderName:{prefill:r,enabled:!0}},t&&{phoneNumber:{prefill:t}})},a=this.braintreeFastlaneUtils.getBraintreeFastlaneComponentOrThrow();this.braintreeCardComponent=yield a(o)})}renderBraintreeCardComponent(e){const t=this.getBraintreeCardComponentOrThrow();if(!e)throw new en('Unable to initialize payment because \"container\" argument is not provided.');t.render(e)}preparePaymentPayload(e){var t,n;return Cd(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),r=i.getBillingAddressOrThrow(),o=`${r.firstName} ${r.lastName}`,a=this.getPayPalInstruments()[0],s=yield this.braintreeFastlaneUtils.getDeviceSessionId(),c=an(i.getStoreConfigOrThrow().checkoutSettings.features,\"PROJECT-7080.braintree_fastlane_three_ds\");if(a){const t=this.is3DSEnabled&&c?yield this.get3DS(a.bigpayToken,(null==a?void 0:a.iin)||\"\"):void 0;return{methodId:e,paymentData:{deviceSessionId:s,formattedPayload:{paypal_fastlane_token:{token:t||a.bigpayToken}}}}}const{getPaymentToken:d}=this.getBraintreeCardComponentOrThrow(),u=yield d({name:{fullName:o},billingAddress:this.mapToPayPalAddress(r)}),l=(null===(n=null===(t=u.paymentSource.card)||void 0===t?void 0:t.binDetails)||void 0===n?void 0:n.bin)||\"\",h=this.is3DSEnabled&&c?yield this.get3DS(u.id,l):void 0;return{methodId:e,paymentData:{deviceSessionId:s,nonce:h||u.id}}})}get3DS(e,t){return Cd(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=yield this.braintreeSdk.getBraintreeThreeDS(),r=n.getOrderOrThrow();return new Promise((n,o)=>{i.verifyCard({amount:null==r?void 0:r.orderAmount,nonce:e,bin:t,onLookupComplete:(e,t)=>{i.on(\"customer-canceled\",()=>{\"function\"==typeof this.onError&&this.onError(new Tn),o(new Tn)}),t()}},(e,t)=>(e&&\"THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT\"===e.code&&(\"function\"==typeof this.onError&&this.onError(new Tn),o(new Tn)),n(t.nonce)))})})}mapToPayPalAddress(e){return{streetAddress:(null==e?void 0:e.address1)||\"\",locality:(null==e?void 0:e.city)||\"\",region:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCodeAlpha2:(null==e?void 0:e.countryCode)||\"\"}}shouldRunAuthenticationFlow(){const e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getCustomerOrThrow(),i=e.getPaymentProviderCustomer(),r=wd(i)?i:{},o=this.braintreeFastlaneUtils.getSessionIdFromCookies();return!(!n.isGuest||(null==r?void 0:r.authenticationState)===yn.CANCELED||(null==r?void 0:r.authenticationState)||o!==t.id)}getBraintreeCardComponentOrThrow(){if(!this.braintreeCardComponent)throw new Qt;return this.braintreeCardComponent}getPayPalInstruments(){const e=this.paymentIntegrationService.getState().getPaymentProviderCustomerOrThrow();return(wd(e)?e:{}).instruments||[]}handleBraintreeStoredInstrumentChange(e){return Cd(this,void 0,void 0,function*(){const t=this.braintreeFastlaneUtils.getBraintreeFastlaneOrThrow(),{selectionChanged:n,selectedCard:i}=yield t.profile.showCardSelector();if(n){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomer(),n=wd(t)?t:{},r=this.braintreeFastlaneUtils.mapPayPalToBcInstrument(e,[i]);if(r&&r.length>0)return yield this.paymentIntegrationService.updatePaymentProviderCustomer(Object.assign(Object.assign({},n),{instruments:[...r]})),r[0]}})}}const Pd=Xt(e=>{const t=window,n=new un(e),i=new or(new An((0,d.vQ)(),t,n),t),r=new gr(e,i),o=new An((0,d.vQ)(),t,n),a=new In(o);return new Id(e,r,a)},[{id:\"braintreeacceleratedcheckout\"}]);var Ed=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Od{constructor(e,t,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=n}initialize(e){return Ed(this,void 0,void 0,function*(){const{braintreevisacheckout:t,methodId:n}=e;if(!t)throw new en('Unable to initialize payment because \"options.braintreevisacheckout\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const i=this.paymentIntegrationService.getState();this.paymentMethod=i.getPaymentMethodOrThrow(n);const r=i.getCheckoutOrThrow(),o=i.getStoreConfigOrThrow(),{clientToken:a,config:s}=this.paymentMethod||{};if(!a)throw new Ft(Rt.MissingPaymentMethod);const{onError:c=P.noop,onPaymentSelect:d=P.noop}=t;this.braintreeSdk.initialize(a);const u=yield this.braintreeSdk.getBraintreeVisaCheckout(),l=yield this.braintreeSdk.getVisaCheckoutSdk(null==s?void 0:s.testMode),h=u.createInitOptions({settings:{locale:o.storeProfile.storeLanguage,shipping:{collectShipping:!1}},paymentRequest:{currencyCode:o.currency.code,subtotal:String(r.subtotal)}});yield l.init(h),l.on(\"payment.success\",e=>this.tokenizePayment(u,e).then(()=>Promise.all([this.paymentIntegrationService.loadCheckout(),this.paymentIntegrationService.loadPaymentMethod(n)])).then(()=>d()).catch(e=>c(e))),l.on(\"payment.error\",(e,t)=>c(t))})}execute(e,t){var n,i;return Ed(this,void 0,void 0,function*(){const{payment:r}=e,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!r)throw new en('Unable to submit payment because \"payload.payment\" argument is not provided.');if(!(null===(i=null===(n=this.paymentMethod)||void 0===n?void 0:n.initializationData)||void 0===i?void 0:i.nonce))throw new Ft(Rt.MissingPaymentMethod);const{nonce:a}=this.paymentMethod.initializationData;try{yield this.paymentIntegrationService.submitOrder(o,t),yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:{nonce:a}}))}catch(e){this.handleError(e)}})}finalize(){return Promise.reject(new ds)}deinitialize(){return Ed(this,void 0,void 0,function*(){yield this.braintreeSdk.deinitialize()})}tokenizePayment(e,t){return Ed(this,void 0,void 0,function*(){return Promise.all([e.tokenize(t),this.braintreeSdk.getDataCollectorOrThrow()]).then(([e,t])=>{const n=this.paymentIntegrationService.getState(),i=n.getShippingAddress(),r=n.getBillingAddress(),{shippingAddress:o=this.mapToVisaCheckoutAddress(i),billingAddress:a=this.mapToVisaCheckoutAddress(r)}=e;return this.postForm(Object.assign(Object.assign({},e),{shippingAddress:o,billingAddress:a}),t)})})}mapToVisaCheckoutAddress(e){return e?{firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phone,streetAddress:e.address1,extendedAddress:e.address2,locality:e.city,region:e.stateOrProvinceCode,countryCode:e.countryCode,postalCode:e.postalCode}:{}}postForm(e,t){const{userData:n,billingAddress:i,shippingAddress:r,details:o}=e,{userEmail:a}=n,{deviceData:s}=t;return this.formPoster.postForm(\"/checkout.php\",{payment_type:e.type,nonce:e.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,i)),shipping_address:JSON.stringify(this.getAddress(a,r))})}getAddress(e,t={}){return{email:e,first_name:t.firstName,last_name:t.lastName,phone_number:t.phoneNumber,address_line_1:t.streetAddress,address_line_2:t.extendedAddress,city:t.locality,state:t.region,country_code:t.countryCode,postal_code:t.postalCode}}handleError(e){if(e instanceof Error&&\"BraintreeError\"===e.name)throw new Fi(e.message);throw e}}const Ad=Xt(e=>{const t=window,n=new un(e),i=new In(new An((0,d.vQ)(),t,n));return new Od(e,(0,Fn.createFormPoster)(),i)},[{id:\"braintreevisacheckout\"}]);var Td=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class kd{constructor(e,t){this.paymentIntegrationService=e,this.braintreeIntegrationService=t}initialize(e){return Td(this,void 0,void 0,function*(){const{methodId:t}=e;yield this.paymentIntegrationService.loadPaymentMethod(t);const n=this.paymentIntegrationService.getState();this.venmoOptions=e.braintreevenmo;const i=n.getPaymentMethodOrThrow(t);yield this.initializeBraintreeVenmo(i)})}execute(e){return Td(this,void 0,void 0,function*(){const{payment:t}=e,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!t)throw new Yi([\"payment\"]);try{const e=yield this.preparePaymentData(t);yield this.paymentIntegrationService.submitOrder(n),yield this.paymentIntegrationService.submitPayment(e)}catch(e){this.handleError(e)}})}finalize(){return Promise.reject(new ds)}deinitialize(){return Td(this,void 0,void 0,function*(){return yield this.braintreeIntegrationService.teardown(),Promise.resolve()})}handleError(e){if(!_n(e))throw e;if(\"PAYPAL_POPUP_CLOSED\"===e.code)throw new Tn(e.message);throw new Fi(e.message)}initializeBraintreeVenmo(e){var t;return Td(this,void 0,void 0,function*(){const{clientToken:n}=e;if(!n)throw new Ft(Rt.MissingPaymentMethod);const i=an(this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features,\"PAYPAL-5406.braintree_venmo_web_fallback_support\");try{this.braintreeIntegrationService.initialize(n),this.braintreeVenmoCheckout=yield this.braintreeIntegrationService.getVenmoCheckout(Object.assign(Object.assign({},void 0!==(null===(t=this.venmoOptions)||void 0===t?void 0:t.allowDesktop)?{allowDesktop:this.venmoOptions.allowDesktop}:{}),i?{mobileWebFallBack:i}:{}))}catch(e){this.handleError(e)}})}preparePaymentData(e){return Td(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),{nonce:n}=t.getPaymentMethodOrThrow(e.methodId);if(n)return Object.assign(Object.assign({},e),{paymentData:this.formattedPayload(n)});const i=yield this.braintreeVenmoTokenize(),r=yield this.braintreeIntegrationService.getSessionId();return Object.assign(Object.assign({},e),{paymentData:this.formattedPayload(i.nonce,i.details.email,r)})})}formattedPayload(e,t,n){return{formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:n||null,paypal_account:{token:e,email:t||null}}}}braintreeVenmoTokenize(){return new Promise((e,t)=>{var n;null===(n=this.braintreeVenmoCheckout)||void 0===n||n.tokenize((n,i)=>{if(n)return t(n);e(i)})})}}const xd=Xt(e=>{const t=window,n=(0,d.vQ)(),i=new un(e),r=new An(n,t,i),o=new or(r,t);return new kd(e,o)},[{id:\"braintreevenmo\"}]);var Md=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Nd{constructor(e,t,n){this.paymentIntegrationService=e,this.braintreeIntegrationService=t,this.braintreeHostedForm=n}initialize(e){return Md(this,void 0,void 0,function*(){const{methodId:t,gatewayId:n,braintree:i}=e;yield this.paymentIntegrationService.loadPaymentMethod(t);const r=this.paymentIntegrationService.getState();this.paymentMethod=r.getPaymentMethodOrThrow(t);const{clientToken:o}=this.paymentMethod;if(!o)throw new Ft(Rt.MissingPaymentMethod);this.threeDSecure=null==i?void 0:i.threeDSecure,this.onPaymentError=null==i?void 0:i.onPaymentError;try{this.braintreeIntegrationService.initialize(o,this.threeDSecure),this.isHostedPaymentFormEnabled(t,n)&&(null==i?void 0:i.form)&&(yield this.braintreeHostedForm.initialize(i.form,i.unsupportedCardBrands,o),this.isHostedFormInitialized=this.braintreeHostedForm.isInitialized()),this.is3dsEnabled=this.paymentMethod.config.is3dsEnabled,this.deviceSessionId=yield this.braintreeIntegrationService.getSessionId(),this.shouldInitializeBraintreeFastlane()&&(yield this.initializeBraintreeFastlaneOrThrow(t))}catch(e){return this.handleError(e,t)}})}execute(e){return Md(this,void 0,void 0,function*(){const{payment:t}=e,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!t)throw new Yi([\"payment\"]);this.isHostedFormInitialized&&this.braintreeHostedForm.validate(),yield this.paymentIntegrationService.submitOrder(n);const i=this.paymentIntegrationService.getState(),r=i.getBillingAddressOrThrow(),o=i.getOrderOrThrow().orderAmount;try{const e=this.isHostedFormInitialized?yield this.prepareHostedPaymentData(t,r,o):yield this.preparePaymentData(t,r,o);yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},t),{paymentData:e}))}catch(e){return this.processAdditionalAction(e,t,o)}})}finalize(){return Promise.reject(new ds)}deinitialize(){return Md(this,void 0,void 0,function*(){return this.isHostedFormInitialized=!1,yield Promise.all([this.braintreeIntegrationService.teardown(),this.braintreeHostedForm.deinitialize()]),Promise.resolve()})}handleError(e,t){var n;if(pd(e)){if(!(t&&this.paymentIntegrationService.getState().isPaymentMethodInitialized({methodId:t})||\"HOSTED_FIELDS_INVALID_FIELD_SELECTOR\"!==e.code))return;if(e.code.startsWith(\"THREEDS_\"))return null===(n=this.onPaymentError)||void 0===n||n.call(this,new Fi(\"THREEDS_VERIFICATION_FAILED\")),Promise.reject();throw new Fi(e.message)}throw e}preparePaymentData(e,t,n){return Md(this,void 0,void 0,function*(){const{paymentData:i}=e,r={deviceSessionId:this.deviceSessionId};if(this.isSubmittingWithStoredCard(e))return Object.assign(Object.assign({},r),i);const{shouldSaveInstrument:o=!1,shouldSetAsDefaultInstrument:a=!1}=Es(i)?i:{},{nonce:s}=this.shouldPerform3DSVerification(e)?yield this.braintreeIntegrationService.verifyCard(e,t,n):yield this.braintreeIntegrationService.tokenizeCard(e,t);return Object.assign(Object.assign({},r),{nonce:s,shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a})})}prepareHostedPaymentData(e,t,n){return Md(this,void 0,void 0,function*(){const{paymentData:i}=e,r={deviceSessionId:this.deviceSessionId};if(this.isSubmittingWithStoredCard(e)){const{nonce:e}=yield this.braintreeHostedForm.tokenizeForStoredCardVerification();return Object.assign(Object.assign(Object.assign({},r),i),{nonce:e})}const{shouldSaveInstrument:o=!1,shouldSetAsDefaultInstrument:a=!1}=Es(i)?i:{},{nonce:s}=this.shouldPerform3DSVerification(e)?yield this.verifyCardWithHostedForm(t,n):yield this.braintreeHostedForm.tokenize(t);return Object.assign(Object.assign({},r),{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a,nonce:s})})}prepareAdditionalActionPaymentData(e,t){const{paymentData:n}=e,i={deviceSessionId:this.deviceSessionId,nonce:t},{shouldSaveInstrument:r=!1,shouldSetAsDefaultInstrument:o=!1}=Es(n)?n:{};return this.isSubmittingWithStoredCard(e)&&(r||o)?Object.assign(Object.assign({},n),i):Object.assign({},i)}verifyCardWithHostedForm(e,t){return Md(this,void 0,void 0,function*(){const n=yield this.braintreeHostedForm.tokenize(e);return this.braintreeIntegrationService.challenge3DSVerification(n,t)})}processAdditionalAction(e,t,n){return Md(this,void 0,void 0,function*(){if(!Zr(e)||!(0,P.some)(e.body.errors,{code:\"three_d_secure_required\"}))return this.handleError(e);try{const{payer_auth_request:i}=function(e){return\"object\"==typeof e&&null!==e&&\"name\"in e&&\"body\"in e&&\"status\"in e.body&&\"three_ds_result\"in e.body&&\"payer_auth_request\"in e.body.three_ds_result&&\"errors\"in e.body}(e)&&e.body.three_ds_result||{},{paymentData:r}=t,o=this.paymentIntegrationService.getState();if(!r||!Ss(r))throw new Yi([\"instrumentId\"]);const a=o.getCardInstrumentOrThrow(r.instrumentId),{nonce:s}=yield this.braintreeIntegrationService.challenge3DSVerification({nonce:i||\"\",bin:a.iin},n),c=this.prepareAdditionalActionPaymentData(t,s);yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},t),{paymentData:c}))}catch(e){return this.handleError(e)}})}isHostedPaymentFormEnabled(e,t){return!!e&&!0===this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t).config.isHostedFormEnabled}isSubmittingWithStoredCard(e){return!(!e.paymentData||!Ss(e.paymentData))}shouldPerform3DSVerification(e){return!(!this.is3dsEnabled||this.isSubmittingWithStoredCard(e))}shouldInitializeBraintreeFastlane(){var e;const t=this.paymentIntegrationService.getState().getPaymentProviderCustomerOrThrow(),n=wd(t)?t:{};return(null===(e=this.paymentMethod)||void 0===e?void 0:e.initializationData.isAcceleratedCheckoutEnabled)&&!(null==n?void 0:n.authenticationState)}initializeBraintreeFastlaneOrThrow(e){return Md(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getPaymentMethodOrThrow(e),{clientToken:r,config:o}=i;if(!r)throw new Ft(Rt.MissingPaymentMethod);this.braintreeIntegrationService.initialize(r,this.threeDSecure),yield this.braintreeIntegrationService.getBraintreeFastlane(n.id,o.testMode)})}}function Dd(e){return\"cardNumber\"in e}function Rd(e){if(!_n(e))return!1;const{details:t}=e;return void 0===t||\"object\"==typeof t&&null!==t&&void 0===t.invalidFieldKeys||(n=t,Array.isArray(n)&&n.every(e=>\"string\"==typeof e));var n}var zd,Fd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};!function(e){e[e.CreditCard=0]=\"CreditCard\",e[e.StoredCardVerification=1]=\"StoredCardVerification\"}(zd||(zd={}));class Bd{constructor(e,t){this.braintreeScriptLoader=e,this.braintreeSDKVersionManager=t,this.isInitializedHostedForm=!1,this.handleBlur=e=>{var t,n;null===(n=null===(t=this.formOptions)||void 0===t?void 0:t.onBlur)||void 0===n||n.call(t,{fieldType:this.mapFieldType(e.emittedBy),errors:this.mapErrors(e.fields)})},this.handleFocus=e=>{var t,n;null===(n=null===(t=this.formOptions)||void 0===t?void 0:t.onFocus)||void 0===n||n.call(t,{fieldType:this.mapFieldType(e.emittedBy)})},this.handleCardTypeChange=e=>{var t,n;const i=1===e.cards.length?e.cards[0].type.replace(/^master-card$/,\"mastercard\"):void 0;null===(n=null===(t=this.formOptions)||void 0===t?void 0:t.onCardTypeChange)||void 0===n||n.call(t,{cardType:i})},this.handleInputSubmitRequest=e=>{var t,n;null===(n=null===(t=this.formOptions)||void 0===t?void 0:t.onEnter)||void 0===n||n.call(t,{fieldType:this.mapFieldType(e.emittedBy)})},this.handleValidityChange=e=>{var t,n;null===(n=null===(t=this.formOptions)||void 0===t?void 0:t.onValidate)||void 0===n||n.call(t,{isValid:this.isValidForm(e),errors:this.mapValidationErrors(e.fields)})}}initialize(e,t,n){var i,r,o,a,s;return Fd(this,void 0,void 0,function*(){this.clientToken=n,this.formOptions=e,this.type=Dd(e.fields)?zd.CreditCard:zd.StoredCardVerification;const c=this.mapFieldOptions(e.fields,t);(0,P.isEmpty)(c)?this.isInitializedHostedForm=!1:(this.cardFields=yield this.createHostedFields({fields:c,styles:e.styles&&this.mapStyleOptions(e.styles)}),null===(i=this.cardFields)||void 0===i||i.on(\"blur\",this.handleBlur),null===(r=this.cardFields)||void 0===r||r.on(\"focus\",this.handleFocus),null===(o=this.cardFields)||void 0===o||o.on(\"cardTypeChange\",this.handleCardTypeChange),null===(a=this.cardFields)||void 0===a||a.on(\"validityChange\",this.handleValidityChange),null===(s=this.cardFields)||void 0===s||s.on(\"inputSubmitRequest\",this.handleInputSubmitRequest),this.isInitializedHostedForm=!0)})}isInitialized(){return!!this.isInitializedHostedForm}deinitialize(){var e;return Fd(this,void 0,void 0,function*(){this.isInitializedHostedForm&&(this.isInitializedHostedForm=!1,yield null===(e=this.cardFields)||void 0===e?void 0:e.teardown())})}validate(){if(!this.cardFields)throw new Lt(zt.PaymentNotInitialized);const e=this.cardFields.getState();if(!this.isValidForm(e)){this.handleValidityChange(e);const t=this.mapValidationErrors(e.fields);throw new Ki(t)}}tokenize(e){var t,n,i,r,o;return Fd(this,void 0,void 0,function*(){if(!this.cardFields)throw new Lt(zt.PaymentNotInitialized);try{const r=yield this.cardFields.tokenize((0,P.omitBy)({billingAddress:e&&this.mapBillingAddress(e)},P.isNil));return null===(n=null===(t=this.formOptions)||void 0===t?void 0:t.onValidate)||void 0===n||n.call(t,{isValid:!0,errors:{}}),{nonce:r.nonce,bin:null===(i=r.details)||void 0===i?void 0:i.bin}}catch(e){if(Rd(e)){const t=this.mapTokenizeError(e);if(t)throw null===(o=null===(r=this.formOptions)||void 0===r?void 0:r.onValidate)||void 0===o||o.call(r,{isValid:!1,errors:t}),new Ki(t)}throw e}})}tokenizeForStoredCardVerification(){var e,t,n,i,r;return Fd(this,void 0,void 0,function*(){if(!this.cardFields)throw new Lt(zt.PaymentNotInitialized);try{const i=yield this.cardFields.tokenize();return null===(t=null===(e=this.formOptions)||void 0===e?void 0:e.onValidate)||void 0===t||t.call(e,{isValid:!0,errors:{}}),{nonce:i.nonce,bin:null===(n=i.details)||void 0===n?void 0:n.bin}}catch(e){if(Rd(e)){const t=this.mapTokenizeError(e,!0);if(t)throw null===(r=null===(i=this.formOptions)||void 0===i?void 0:i.onValidate)||void 0===r||r.call(i,{isValid:!1,errors:t}),new Ki(t)}throw e}})}createHostedFields(e){return Fd(this,void 0,void 0,function*(){const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadHostedFields(),i=this.braintreeSDKVersionManager.getSDKVersion()===sn?Object.assign(Object.assign({},e),{preventCursorJumps:!0}):e;return n.create(Object.assign(Object.assign({},i),{client:t}))})}getClient(){return Fd(this,void 0,void 0,function*(){if(!this.clientToken)throw new Lt(zt.PaymentNotInitialized);if(!this.client){const e=yield this.braintreeScriptLoader.loadClient();this.client=e.create({authorization:this.clientToken})}return this.client})}mapBillingAddress(e){return{countryName:e.country,postalCode:e.postalCode,streetAddress:e.address2?`${e.address1} ${e.address2}`:e.address1}}mapFieldOptions(e,t){if(Dd(e)){const n={};return null==t||t.forEach(e=>{(e=>Object.values(vn).includes(e))(e)&&(n[e]=!1)}),(0,P.omitBy)({number:Object.assign({container:`#${e.cardNumber.containerId}`,placeholder:e.cardNumber.placeholder,internalLabel:e.cardNumber.accessibilityLabel},Object.keys(n).length>0?{supportedCardBrands:n}:{}),expirationDate:{container:`#${e.cardExpiry.containerId}`,placeholder:e.cardExpiry.placeholder,internalLabel:e.cardExpiry.accessibilityLabel},cvv:e.cardCode&&{container:`#${e.cardCode.containerId}`,placeholder:e.cardCode.placeholder,internalLabel:e.cardCode.accessibilityLabel},cardholderName:{container:`#${e.cardName.containerId}`,placeholder:e.cardName.placeholder,internalLabel:e.cardName.accessibilityLabel}},P.isNil)}return(0,P.omitBy)({number:e.cardNumberVerification&&{container:`#${e.cardNumberVerification.containerId}`,placeholder:e.cardNumberVerification.placeholder},cvv:e.cardCodeVerification&&{container:`#${e.cardCodeVerification.containerId}`,placeholder:e.cardCodeVerification.placeholder}},P.isNil)}mapStyleOptions(e){const t=(e={})=>(0,P.omitBy)({color:e.color,\"font-family\":e.fontFamily,\"font-size\":e.fontSize,\"font-weight\":e.fontWeight},P.isNil);return{input:t(e.default),\".invalid\":t(e.error),\":focus\":t(e.focus)}}mapFieldType(e){switch(e){case\"number\":return this.type===zd.StoredCardVerification?wn.CardNumberVerification:wn.CardNumber;case\"expirationDate\":return wn.CardExpiry;case\"cvv\":return this.type===zd.StoredCardVerification?wn.CardCodeVerification:wn.CardCode;case\"cardholderName\":return wn.CardName;default:throw new Error(\"Unexpected field type\")}}mapErrors(e){const t={};if(e)for(const[n,i]of Object.entries(e))if(i&&this.isValidParam(n)){const{isValid:e,isEmpty:r,isPotentiallyValid:o}=i;t[n]={isValid:e,isEmpty:r,isPotentiallyValid:o}}return t}mapValidationErrors(e){return Object.keys(e).reduce((t,n)=>{var i;return Object.assign(Object.assign({},t),{[this.mapFieldType(n)]:(null===(i=e[n])||void 0===i?void 0:i.isValid)?void 0:[this.createInvalidError(this.mapFieldType(n))]})},{})}mapTokenizeError(e,t=!1){var n,i;if(\"HOSTED_FIELDS_FIELDS_EMPTY\"===e.code){const e=[this.createRequiredError(this.mapFieldType(\"cvv\"))];return t?{[this.mapFieldType(\"cvv\")]:e}:{[this.mapFieldType(\"cvv\")]:e,[this.mapFieldType(\"expirationDate\")]:[this.createRequiredError(this.mapFieldType(\"expirationDate\"))],[this.mapFieldType(\"number\")]:[this.createRequiredError(this.mapFieldType(\"number\"))],[this.mapFieldType(\"cardholderName\")]:[this.createRequiredError(this.mapFieldType(\"cardholderName\"))]}}return null===(i=null===(n=e.details)||void 0===n?void 0:n.invalidFieldKeys)||void 0===i?void 0:i.reduce((e,t)=>{const n=this.mapFieldType(t);return Object.assign(Object.assign({},e),{[n]:[this.createInvalidError(n)]})},{})}createRequiredError(e){var t;return{fieldType:e,message:null!==(t={[wn.CardCode]:\"CVV is required\",[wn.CardCodeVerification]:\"CVV is required\",[wn.CardNumber]:\"Credit card number is required\",[wn.CardNumberVerification]:\"Credit card number is required\",[wn.CardExpiry]:\"Expiration date is required\",[wn.CardName]:\"Full name is required\"}[e])&&void 0!==t?t:\"Field is required\",type:\"required\"}}createInvalidError(e){var t,n,i,r;const o={[wn.CardCode]:{message:\"Invalid card code\",type:\"invalid_card_code\"},[wn.CardCodeVerification]:{message:\"Invalid card code\",type:\"invalid_card_code\"},[wn.CardNumber]:{message:\"Invalid card number\",type:\"invalid_card_number\"},[wn.CardNumberVerification]:{message:\"Invalid card number\",type:\"invalid_card_number\"},[wn.CardExpiry]:{message:\"Invalid card expiry\",type:\"invalid_card_expiry\"},[wn.CardName]:{message:\"Invalid card name\",type:\"invalid_card_name\"}};return{fieldType:e,message:null!==(n=null===(t=o[e])||void 0===t?void 0:t.message)&&void 0!==n?n:\"Invalid field\",type:null!==(r=null===(i=o[e])||void 0===i?void 0:i.type)&&void 0!==r?r:\"invalid\"}}isValidForm(e){return Object.keys(e.fields).every(t=>{var n;return null===(n=e.fields[t])||void 0===n?void 0:n.isValid})}isValidParam(e){return[\"number\",\"cvv\",\"expirationDate\",\"postalCode\",\"cardholderName\",\"cardType\"].includes(e)}}const jd=Xt(e=>{const t=window,n=new un(e),i=new An((0,d.vQ)(),t,n),r=new or(i,t),o=new Bd(i,n);return new Nd(e,r,o)},[{id:\"braintree\"}]);var Ld=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})},Ud=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n};class Vd{constructor(e){this._paymentIntegrationService=e}execute(e,t){var n,i;return this._isHostedPaymentFormEnabled(null===(n=e.payment)||void 0===n?void 0:n.methodId,null===(i=e.payment)||void 0===i?void 0:i.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve();const t=e&&e.creditCard&&e.creditCard.form,n=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:i=\"\"}={}}=n.getStoreConfigOrThrow();if(!t)throw new en;const r=this._paymentIntegrationService.createHostedForm(i,t);return r.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=r,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new ds)}_executeWithoutHostedForm(e,t){return Ld(this,void 0,void 0,function*(){const{payment:n}=e,i=Ud(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new Yi([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:r}))})}_executeWithHostedForm(e,t){return Ld(this,void 0,void 0,function*(){const{payment:n}=e,i=Ud(e,[\"payment\"]),r=this._hostedForm;if(!r)throw new Lt(zt.PaymentNotInitialized);if(!n||!n.methodId)throw new Yi([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(i,t),yield r.validate().then(()=>r.submit(n))})}_isHostedPaymentFormEnabled(e,t){return!!e&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(e){return!(0,P.values)(e&&e.creditCard&&e.creditCard.form.fields).every(P.isNil)}}var qd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Hd extends Vd{constructor(e,t){super(e),this.paymentIntegrationService=e,this.cbaMGPSScriptLoader=t,this.sessionId=\"\"}initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return qd(this,void 0,void 0,function*(){yield t.initialize.call(this,e);const{methodId:n}=e;yield this.paymentIntegrationService.loadPaymentMethod(n);const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(n);if(!function(e){return\"object\"==typeof e&&null!==e&&\"initializationData\"in e&&\"object\"==typeof e.initializationData&&null!==e.initializationData&&\"merchantId\"in e.initializationData&&\"string\"==typeof e.initializationData.merchantId&&(\"boolean\"==typeof e.initializationData.isTestModeFlagEnabled||void 0===e.initializationData.isTestModeFlagEnabled)}(r))throw new Ft(Rt.MissingPaymentMethod);const{clientToken:o,initializationData:{isTestModeFlagEnabled:a=!1,merchantId:s},config:{is3dsEnabled:c}}=r;if(c){if(this.threeDSjs=yield this.cbaMGPSScriptLoader.load(a),!this.threeDSjs)throw new Lt(zt.PaymentNotInitialized);if(!o||!s)throw new Ft(Rt.MissingPaymentMethod);if(this.sessionId=o,this.locale=i.getLocale(),!this.locale)throw new Ft(Rt.MissingCart);yield this.threeDSjs.configure({merchantId:s,sessionId:this.sessionId,callback:()=>{var e;if(null===(e=this.threeDSjs)||void 0===e?void 0:e.isConfigured())return this.paymentIntegrationService.getState();throw new Fi(\"Failed to configure 3DS API.\")},configuration:{userLanguage:this.locale,wsVersion:62}})}return Promise.resolve()})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return qd(this,void 0,void 0,function*(){const{payment:i}=e,r=i&&i.paymentData;if(!i||!r)throw new Yi([\"payment.paymentData\"]);const o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i.methodId),{is3dsEnabled:a}=o.config;if(a){const t=Object.assign(Object.assign({},r),{threeDSecure:{token:this.sessionId}});e.payment&&(e.payment.paymentData=t)}return n.execute.call(this,e,t).catch(e=>{if(!a||!Zr(e)||!(0,P.some)(e.body.errors,{code:\"three_d_secure_required\"}))return Promise.reject(e);const t=this.paymentIntegrationService.getState(),n=t.getOrder(),{storeProfile:{storeId:i}}=t.getStoreConfigOrThrow();if(!n||!this.sessionId)throw new Ft(Rt.MissingCheckout);const r=`${i}_${n.orderId}`;if(\"object\"!=typeof(o=e.body)||null===o||!(\"three_ds_result\"in o)||\"object\"!=typeof o.three_ds_result||null===o.three_ds_result||!(\"token\"in o.three_ds_result)||\"string\"!=typeof o.three_ds_result.token)throw new Ln;var o;const{three_ds_result:{token:s}}=e.body;return s?this.initiateAuthentication(r,s):Promise.reject(e)})})}finalize(e){return qd(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState();return t.getOrder()&&t.getPaymentStatus()===Yc.FINALIZE?(yield this.paymentIntegrationService.finalizeOrder(e),Promise.resolve()):Promise.reject(new ds)})}deinitialize(){return this.threeDSjs=void 0,this.sessionId=\"\",super.deinitialize()}initiateAuthentication(e,t){return qd(this,void 0,void 0,function*(){const n=yield new Promise((n,i)=>{if(!this.threeDSjs)throw new Lt(zt.PaymentNotInitialized);this.threeDSjs.initiateAuthentication(e,t,e=>{const t=e.error;return t?i(new Fi(t.msg)):this.threeDSjs&&\"PROCEED\"===e.gatewayRecommendation?n(e.restApiResponse):i(new Fi)})});if(n.transaction&&\"AUTHENTICATION_AVAILABLE\"===n.transaction.authenticationStatus)return this.authenticatePayer(e,t);throw new Fi})}authenticatePayer(e,t,n=1){return qd(this,void 0,void 0,function*(){return new Promise((i,r)=>{if(!this.threeDSjs)return r(new Lt(zt.PaymentNotInitialized));this.threeDSjs.authenticatePayer(e,t,i=>qd(this,void 0,void 0,function*(){const o=i.error;return o?o.cause&&\"SERVER_BUSY\"===o.cause&&n<5?(yield new Promise(e=>setTimeout(e,3e3)),this.authenticatePayer(e,t,++n)):r(new Fi):new Promise(P.noop)}),{fullScreenRedirect:!0})})})}}class Gd{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e){return t=this,n=void 0,r=function*(){if(yield this._scriptLoader.loadScript(`//${e?\"test\":\"ap\"}-gateway.mastercard.com/static/threeDS/1.3.0/three-ds.min.js`),!this._window.ThreeDS)throw new Qt;return this._window.ThreeDS},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())});var t,n,i,r}}const Wd=Xt(e=>new Hd(e,new Gd((0,d.vQ)())),[{id:\"cba_mpgs\"}]);var $d;!function(e){e.OffsiteRedirect=\"offsite_redirect\"}($d||($d={}));class Yd extends Vd{constructor(e){super(e),this.paymentIntegrationService=e}finalize(e){const t=this.paymentIntegrationService.getState();return t.getOrder()&&t.getPaymentStatus()===Yc.FINALIZE&&this.paymentIntegrationService.finalizeOrder(e),Promise.reject(new ds)}_executeWithHostedForm(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=this._hostedForm;if(!r)throw new Lt(zt.PaymentNotInitialized);if(!n||!n.methodId)throw new Yi([\"payment.methodId\"]);try{yield r.validate(),yield this.paymentIntegrationService.submitOrder(i,t),yield r.submit(n)}catch(e){return this._processResponse(e)}this.paymentIntegrationService.loadCurrentOrder()},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}_processResponse(e){if(!Zr(e))return Promise.reject(e);const t=e.body.additional_action_required;return t&&t.type===$d.OffsiteRedirect?this._performRedirect(t):Promise.reject(e)}_performRedirect(e){return new Promise(()=>{window.location.replace(e.data.redirect_url)})}}class Kd extends Yd{_executeWithoutHostedForm(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new Yi([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:Object.assign(Object.assign({},r),{formattedPayload:this._createFormattedPayload(n.methodId,r)})}))}catch(e){return this._processResponse(e)}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}_createFormattedPayload(e,t){if(\"fawry\"===e&&\"customerMobile\"in t&&\"customerEmail\"in t){const e=t;return{customerMobile:e.customerMobile,customerEmail:e.customerEmail}}}}const Qd=Xt(e=>new Kd(e),[{gateway:\"checkoutcom\",id:\"fawry\"}]);function Jd(e){return Zr(e)&&(0,P.some)(e.body.errors,{code:\"three_d_secure_required\"})}var Zd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})},Xd=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n};class eu extends Vd{constructor(e,t){super(e),this.paymentIntegrationService=e,this.formPoster=t}finalize(e){const t=this.paymentIntegrationService.getState();return t.getOrder()&&t.getPaymentStatus()===Yc.FINALIZE&&this.paymentIntegrationService.finalizeOrder(e),Promise.reject(new ds)}_executeWithoutHostedForm(e,t){return Zd(this,void 0,void 0,function*(){const{payment:n}=e,i=Xd(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new Yi([\"payment.paymentData\"]);yield this.paymentIntegrationService.submitOrder(i,t);try{yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:r}))}catch(e){return Jd(e)?this._handleThreeDSecure(e):Promise.reject(e)}})}_executeWithHostedForm(e,t){return Zd(this,void 0,void 0,function*(){const{payment:n}=e,i=Xd(e,[\"payment\"]),r=this._hostedForm;if(!r)throw new Lt(zt.PaymentNotInitialized);if(!n||!n.methodId)throw new Yi([\"payment.methodId\"]);try{yield r.validate(),yield this.paymentIntegrationService.submitOrder(i,t),yield r.submit(n)}catch(e){return Jd(e)?this._handleThreeDSecure(e):Promise.reject(e)}this.paymentIntegrationService.loadCurrentOrder()})}_handleThreeDSecure(e){const{acs_url:t,payer_auth_request:n,callback_url:i,merchant_data:r}=e.body.three_ds_result;return new Promise(()=>this.formPoster.postForm(t,{PaReq:n||null,TermUrl:i||null,MD:r||null}))}}const tu=Xt(e=>new eu(e,(0,Fn.createFormPoster)()),[{gateway:\"checkoutcom\",id:\"credit_card\"},{gateway:\"checkoutcom\",id:\"card\"}]);class nu extends Yd{_executeWithoutHostedForm(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=null==n?void 0:n.paymentData;if(!n||!r)throw new Yi([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:Object.assign(Object.assign({},r),{formattedPayload:this._createFormattedPayload(n.methodId,r)})}))}catch(e){return this._processResponse(e)}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}_createFormattedPayload(e,t){const n={iban:\"\",bic:\"\"};if(\"sepa\"===e&&document&&\"iban\"in t&&\"bic\"in t){const{iban:e,bic:i}=t;n.iban=e,n.bic=i}return n}}const iu=Xt(e=>new nu(e),[{gateway:\"checkoutcom\",id:\"sepa\"}]);class ru extends Yd{_executeWithoutHostedForm(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=null==n?void 0:n.paymentData;if(!n||!r)throw new Yi([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:Object.assign(Object.assign({},r),{formattedPayload:this._createFormattedPayload(n.methodId,r)})}))}catch(e){return this._processResponse(e)}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}_createFormattedPayload(e,t){if(\"ideal\"===e&&\"bic\"in t)return{bic:t.bic}}}const ou=Xt(e=>new ru(e),[{gateway:\"checkoutcom\",id:\"ideal\"}]);const au=[\"boleto\",\"oxxo\",\"qpay\",\"ideal\"];class su extends Yd{_executeWithoutHostedForm(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=null==n?void 0:n.paymentData;if(!n||!r)throw new Yi([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:Object.assign(Object.assign({},r),{formattedPayload:this._createFormattedPayload(n.methodId,r)})}))}catch(e){return this._processResponse(e)}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}_createFormattedPayload(e,t){const n={ccDocument:\"\"},i=\"ccDocument\"in t?t.ccDocument:\"\";return-1!==au.indexOf(e)&&i&&(n.ccDocument=i),n}}const cu=Xt(e=>new su(e),[{gateway:\"checkoutcom\"}]);var du=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class uu{constructor(e,t){this._paymentIntegrationService=e,this._clearpayScriptLoader=t}initialize(e){return du(this,void 0,void 0,function*(){const{getPaymentMethodOrThrow:t}=this._paymentIntegrationService.getState(),n=t(e.methodId,e.gatewayId),i=this._paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features;this._clearpaySdk=yield this._clearpayScriptLoader.load(n,i)})}deinitialize(){return this._clearpaySdk=void 0,Promise.resolve()}execute(e,t){return du(this,void 0,void 0,function*(){const{gatewayId:n,methodId:i}=e.payment||{};if(!n||!i)throw new Yi([\"payment.gatewayId\",\"payment.methodId\"]);const r=this._paymentIntegrationService.getState(),{isStoreCreditApplied:o}=r.getCheckoutOrThrow();yield this._paymentIntegrationService.applyStoreCredit(o),yield this._paymentIntegrationService.validateCheckout(r.getCheckout(),t);const{countryCode:a}=r.getBillingAddressOrThrow();if(!this._isCountrySupported(a))throw new en(\"Unable to proceed because billing country is not supported.\");return yield this._loadPaymentMethod(n,i,t),yield this._redirectToClearpay(a,this._paymentIntegrationService.getState().getPaymentMethod(i,n)),new Promise(P.noop)})}finalize(e){var t,n,i;return du(this,void 0,void 0,function*(){const r=this._paymentIntegrationService.getState(),o=r.getPaymentId(),a=r.getContextConfig();if(!o)throw new Ft(Rt.MissingCheckout);if(!a||!a.payment.token)throw new Ft(Rt.MissingCheckoutConfig);const s={methodId:o.providerId,paymentData:{nonce:a.payment.token}};yield this._paymentIntegrationService.submitOrder({},e);try{yield this._paymentIntegrationService.submitPayment(s)}catch(e){if(yield this._paymentIntegrationService.forgetCheckout(o.providerId),yield this._paymentIntegrationService.loadPaymentMethods(),Zr(e))throw new Rs(null===(i=null===(n=null===(t=e.body)||void 0===t?void 0:t.errors)||void 0===n?void 0:n[0])||void 0===i?void 0:i.message)}})}_redirectToClearpay(e,t){return du(this,void 0,void 0,function*(){if(!this._clearpaySdk||!t||!t.clientToken)throw new Lt(zt.PaymentNotInitialized);return this._clearpaySdk.initialize({countryCode:e}),this._clearpaySdk.redirect({token:t.clientToken}),Promise.resolve()})}_isCountrySupported(e){return\"GB\"===e}_loadPaymentMethod(e,t,n){var i;return du(this,void 0,void 0,function*(){try{return yield this._paymentIntegrationService.loadPaymentMethod(e,Object.assign(Object.assign({},n),{params:Object.assign(Object.assign({},null==n?void 0:n.params),{method:t})}))}catch(e){if(e instanceof Ln&&422===(null===(i=e.body)||void 0===i?void 0:i.status))throw new en(\"Clearpay can't process your payment for this order, please try another payment method\");throw e}})}}class lu{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e,t={}){return n=this,i=void 0,o=function*(){if(yield this._scriptLoader.loadScript(this._getScriptUrl(e.config.testMode,t)),!this._window.AfterPay)throw new Qt;return this._window.AfterPay},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}_getScriptUrl(e,t={}){const n=an(t,\"PI-4555.clearpay_add_https_to_prod_script\",!1);return e?n?\"https://portal.sandbox.clearpay.co.uk/afterpay-async.js\":\"//portal.sandbox.clearpay.co.uk/afterpay-async.js\":n?\"https://portal.clearpay.co.uk/afterpay-async.js\":\"//portal.clearpay.co.uk/afterpay-async.js\"}}const hu=Xt(e=>new uu(e,new lu((0,d.vQ)())),[{gateway:\"clearpay\"},{id:\"clearpay\"}]),pu=Xt(e=>new Vd(e),[{default:!0}]);var mu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class yu{constructor(e,t){this._paymentIntegrationService=e,this._cardinalClient=t}prepare(e){return mu(this,void 0,void 0,function*(){yield this._cardinalClient.load(e.id,e.config.testMode),yield this._cardinalClient.configure(yield this._getClientToken(e))})}start(e,t,n,i){return mu(this,void 0,void 0,function*(){const{getCardInstrument:r,getPaymentMethodOrThrow:o}=this._paymentIntegrationService.getState(),{payment:{methodId:a=\"\",paymentData:s={}}={}}=t,c=Ss(s)&&r(s.instrumentId),d=c?c.iin:i&&i.getBin();d&&(yield this._cardinalClient.runBinProcess(d));try{return yield e((0,P.merge)(t,{payment:{paymentData:{threeDSecure:{token:o(a).clientToken}}}}),n)}catch(e){if(!Zr(e)||!(0,P.some)(e.body.errors,{code:\"three_d_secure_required\"}))throw e;const n=yield this._cardinalClient.getThreeDSecureData(e.body.three_ds_result,this._getOrderData());if(!i)return void(yield this._paymentIntegrationService.submitPayment((0,P.merge)(t.payment,{paymentData:{threeDSecure:n}})));yield i.submit((0,P.merge)(t.payment,{paymentData:{threeDSecure:n}}))}})}_getClientToken(e){return mu(this,void 0,void 0,function*(){return e.clientToken?e.clientToken:(yield this._paymentIntegrationService.loadPaymentMethod(e.id),this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e.id).clientToken||\"\")})}_getOrderData(){const e=this._paymentIntegrationService.getState(),t=e.getBillingAddressOrThrow(),n=e.getShippingAddress(),i=e.getCheckoutOrThrow(),r=e.getOrderOrThrow();return{billingAddress:t,shippingAddress:n,currencyCode:i.cart.currency.code,id:r.orderId.toString(),amount:i.cart.cartAmount}}}const fu=[100004,1010,1011,1020];var gu,vu,_u,bu,Su,wu,Cu;!function(e){e.SetupCompleted=\"payments.setupComplete\",e.Validated=\"payments.validated\"}(gu||(gu={})),function(e){e.Init=\"init\",e.Complete=\"complete\",e.Confirm=\"confirm\"}(vu||(vu={})),function(e){e.Success=\"SUCCESS\",e.NoAction=\"NOACTION\",e.Failure=\"FAILURE\",e.Error=\"ERROR\"}(_u||(_u={})),function(e){e.CCA=\"CCA\",e.Paypal=\"Paypal\",e.Wallet=\"Wallet\",e.VisaCheckout=\"VisaCheckout\",e.ApplePay=\"ApplePay\",e.DiscoverWallet=\"DiscoverWallet\"}(bu||(bu={})),function(e){e.BinProcess=\"bin.process\"}(Su||(Su={})),function(e){e.CCA=\"cca\"}(wu||(wu={})),function(e){e.Yes=\"Y\",e.No=\"N\"}(Cu||(Cu={}));class Iu{constructor(e){this._scriptLoader=e,this._provider=\"\",this._testMode=!1,this._configurationToken=\"\"}load(e,t=!1){return this._provider=e,this._testMode=t,this._sdk||(this._sdk=this._scriptLoader.load(e,t)),this._sdk.then(P.noop)}configure(e){if(this._configurationToken){if(this._configurationToken===e)return Promise.resolve();this._sdk=this._scriptLoader.load(`${this._provider}.${Date.now()}`,this._testMode)}return this._getClientSDK().then(t=>new Promise((n,i)=>{t.on(gu.SetupCompleted,()=>{t.off(gu.SetupCompleted),t.off(gu.Validated),this._configurationToken=e,n()}),t.on(gu.Validated,e=>{t.off(gu.SetupCompleted),t.off(gu.Validated),e.ActionCode===_u.Error&&((0,P.includes)(fu,e.ErrorNumber)&&i(new Ft(Rt.MissingPaymentMethod)),i(new Fi(e.ErrorDescription)))}),t.setup(vu.Init,{jwt:e})}))}runBinProcess(e){return this._getClientSDK().then(t=>t.trigger(Su.BinProcess,e).catch(P.noop)).then(e=>{if(!e||!e.Status)throw new Lt(zt.PaymentNotInitialized)})}getThreeDSecureData(e,t){return this._getClientSDK().then(n=>new Promise((i,r)=>{n.on(gu.Validated,(e,t)=>{if(n.off(gu.Validated),!t)return r(new Fi(e.ErrorDescription?e.ErrorDescription:\"An error was encountered while processing the transaction.\"));if(!e.ActionCode)return i({token:t});switch(e.ActionCode){case _u.Success:return i({token:t});case _u.NoAction:return e.ErrorNumber>0?r(new Fi(e.ErrorDescription)):e.Payment&&e.Payment.ExtendedData&&e.Payment.ExtendedData.SignatureVerification===Cu.Yes?i({token:t}):r(new Fi(\"Transaction signature could not be validated.\"));case _u.Failure:return r(new Fi(\"User failed authentication or an error was encountered while processing the transaction.\"));case _u.Error:return r(new Fi(e.ErrorDescription))}});const o={AcsUrl:e.acs_url,Payload:e.merchant_data},a=this._mapToPartialOrder(t,e.payer_auth_request);n.continue(wu.CCA,o,a)}))}_mapToPartialOrder(e,t){const n={BillingAddress:this._mapToCardinalAddress(e.billingAddress)};return e.paymentData&&(n.Account=this._mapToCardinalAccount(e.paymentData)),e.billingAddress.email&&(n.Email1=e.billingAddress.email),e.shippingAddress&&(n.ShippingAddress=this._mapToCardinalAddress(e.shippingAddress)),{Consumer:n,OrderDetails:{OrderNumber:e.id,Amount:e.amount,CurrencyCode:e.currencyCode,OrderChannel:\"S\",TransactionId:t}}}_mapToCardinalAccount(e){return{AccountNumber:Number(e.ccNumber),ExpirationMonth:Number(e.ccExpiry.month),ExpirationYear:Number(e.ccExpiry.year),NameOnAccount:e.ccName,CardCode:Number(e.ccCvv)}}_mapToCardinalAddress(e){const t={FirstName:e.firstName,LastName:e.lastName,Address1:e.address1,City:e.city,State:e.stateOrProvince,PostalCode:e.postalCode,CountryCode:e.countryCode};return e.address2&&(t.Address2=e.address2),e.phone&&(t.Phone1=e.phone),t}_getClientSDK(){if(!this._sdk)throw new Lt(zt.PaymentNotInitialized);return this._sdk}}class Pu{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e,t){const n=t?\"https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js\":\"https://static.client.cardinaltrusted.com/songbird/v2.0.0/songbird.js\";return this._scriptLoader.loadScript(`${n}?v=${e}`).then(()=>{if(!this._window.Cardinal)throw new Qt;return this._window.Cardinal})}}var Eu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ou extends Vd{constructor(e,t){super(e),this._threeDSecureFlow=t}initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return Eu(this,void 0,void 0,function*(){yield t.initialize.call(this,e);const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),i=n(e.methodId);i.config.is3dsEnabled&&(yield this._threeDSecureFlow.prepare(i))})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return Eu(this,void 0,void 0,function*(){const{payment:{methodId:i=\"\"}={}}=e,{getPaymentMethodOrThrow:r}=this._paymentIntegrationService.getState();return r(i).config.is3dsEnabled?this._threeDSecureFlow.start(n.execute.bind(this),e,t,this._hostedForm):n.execute.call(this,e,t)})}}const Au=Xt(e=>new Ou(e,new yu(e,new Iu(new Pu((0,d.vQ)())))),[{id:\"cybersource\"}]);var Tu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ku{constructor(e,t){this._paymentIntegrationService=e,this._cardinalClient=t}prepare(e){return Tu(this,void 0,void 0,function*(){yield this._cardinalClient.load(e.id,e.config.testMode)})}start(e,t,n,i){var r,o,a,s;return Tu(this,void 0,void 0,function*(){const{getCardInstrument:c}=this._paymentIntegrationService.getState(),{payment:d={methodId:\"\"}}=t,{paymentData:u={}}=d;try{return yield e(t,n)}catch(e){if(Zr(e)&&\"additional_action_required\"===(null===(r=e.body)||void 0===r?void 0:r.status)){const t=null===(a=null===(o=e.body.additional_action_required)||void 0===o?void 0:o.data)||void 0===a?void 0:a.token,n=null===(s=e.body.three_ds_result)||void 0===s?void 0:s.payer_auth_request;yield this._cardinalClient.configure(t);const r=this._getBin(u,c,i);r&&(yield this._cardinalClient.runBinProcess(r));try{return yield this._submitPayment(d,{xid:n},i)}catch(e){if(Zr(e)&&(0,P.some)(e.body.errors,{code:\"three_d_secure_required\"})){const t=e.body.three_ds_result,n=null==t?void 0:t.payer_auth_request;return yield this._cardinalClient.getThreeDSecureData(t,this._getOrderData()),this._submitPayment(d,{token:n},i)}throw e}}throw e}})}_getOrderData(){const e=this._paymentIntegrationService.getState(),t=e.getBillingAddressOrThrow(),n=e.getShippingAddress(),{cart:{currency:{code:i},cartAmount:r}}=e.getCheckoutOrThrow();return{billingAddress:t,shippingAddress:n,currencyCode:i,id:e.getOrderOrThrow().orderId.toString(),amount:r}}_submitPayment(e,t,n){return Tu(this,void 0,void 0,function*(){const i=(0,P.merge)({},e,{paymentData:{threeDSecure:t}});n||(yield this._paymentIntegrationService.submitPayment(i)),yield null==n?void 0:n.submit(i)})}_getBin(e,t,n){const i=Ss(e)&&t(e.instrumentId),r=function(e){const t=e;return!Ss(t)&&\"string\"==typeof t.ccName&&\"string\"==typeof t.ccNumber&&\"object\"==typeof t.ccExpiry&&\"string\"==typeof t.ccExpiry.month&&\"string\"==typeof t.ccExpiry.year}(e)&&e.ccNumber,o=n?n.getBin():r;return(i?i.iin:o)||\"\"}}var xu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Mu extends Vd{constructor(e,t){super(e),this._threeDSecureFlow=t}initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return xu(this,void 0,void 0,function*(){yield t.initialize.call(this,e);const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),i=n(e.methodId);i.config.is3dsEnabled&&(yield this._threeDSecureFlow.prepare(i))})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return xu(this,void 0,void 0,function*(){const{payment:{methodId:i=\"\"}={}}=e,{getPaymentMethodOrThrow:r}=this._paymentIntegrationService.getState();return r(i).config.is3dsEnabled?this._threeDSecureFlow.start(n.execute.bind(this),e,t,this._hostedForm):n.execute.call(this,e,t)})}}const Nu=Xt(e=>new Mu(e,new ku(e,new Iu(new Pu((0,d.vQ)())))),[{id:\"cybersourcev2\"},{id:\"bnz\"}]);function Du(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e&&Array.isArray(e.errors)&&\"code\"in e.errors[0]&&\"string\"==typeof e.errors[0].code&&\"provider_data\"in e&&\"object\"==typeof e.provider_data}var Ru=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class zu extends jr{constructor(e,t){super(\"adyen\",e),this._scriptLoader=t,this._service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return Ru(this,void 0,void 0,function*(){yield i.initialize.call(this,e,t,n);const r=i.getPaymentMethod.call(this),o=this._service.getState().getStoreConfig();if(!o)throw new Ft(Rt.MissingCheckoutConfig);return this._adyenClient=yield this._scriptLoader.load({environment:r.config.testMode?\"test\":\"live\",locale:o.storeProfile.storeLanguage}),Promise.resolve()})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});return Ru(this,void 0,void 0,function*(){const n=yield t.getNonce.call(this,e),i=t.getPaymentMethod.call(this);return JSON.stringify({type:i.method,googlePayToken:n,browser_info:$o()})})}processAdditionalAction(e){return Ru(this,void 0,void 0,function*(){if(!Zr(e)||!Du(e.body))throw e;const t=yield this._handleAction(e.body.provider_data);try{return yield this._service.submitPayment(t)}catch(e){return this.processAdditionalAction(e)}})}_handleAction(e){return new Promise((t,n)=>{const i=JSON.parse(e.action);this._getAdyenClient().createFromAction(i,{onAdditionalDetails:e=>{const n={methodId:i.paymentMethodType,paymentData:{nonce:JSON.stringify(e.data)}};t(n)},size:\"05\",onError:e=>n(e)}).mount(\"body\"),n(new Tn)})}_getAdyenClient(){if(!this._adyenClient)throw new Lt(zt.PaymentNotInitialized);return this._adyenClient}}var Fu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Bu{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t,this._isDeinitializationBlocked=!1,this._isContainerMode=!1,this._loadingIndicator=new is({containerStyles:ts})}initialize(e){var t,n;return Fu(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId)||!Ur(e.methodId))throw new en('Unable to proceed because \"methodId\" is not a valid key.');this._methodId=e.methodId;const i=e[this._getMethodId()];if(!(null==i?void 0:i.walletButton)&&!(null==i?void 0:i.container))throw new en(\"Unable to proceed without valid options.\");const{walletButton:r,loadingContainerId:o,container:a,buttonColor:s,buttonSizeMode:c,buttonType:d,onInit:u}=i,l=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(i,[\"walletButton\",\"loadingContainerId\",\"container\",\"buttonColor\",\"buttonSizeMode\",\"buttonType\",\"onInit\"]);this._loadingIndicatorContainer=o,yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodId());const h=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(this._getMethodId());if(this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(t=h.initializationData)||void 0===t?void 0:t.isWebViewExperimentOn)),yield this._googlePayPaymentProcessor.initialize(()=>h,this._getGooglePayClientOptions(null===(n=h.initializationData)||void 0===n?void 0:n.storeCountry)),a){this._isContainerMode=!0;const e=()=>this._addPaymentButtonToContainer(i);u?u(e):e()}else this._addPaymentButton(r,l)})}execute({payment:e}){return Fu(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new Yi([\"payment\"]);yield this._paymentIntegrationService.submitOrder();const t=yield this._googlePayPaymentProcessor.getNonce(e.methodId),n=yield this._googlePayPaymentProcessor.extraPaymentData();try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:Object.assign({nonce:t},n)}))}catch(t){yield this._googlePayPaymentProcessor.processAdditionalAction(t,e.methodId)}})}finalize(){return Promise.reject(new ds)}deinitialize(){var e,t;return this._isDeinitializationBlocked||(this._isContainerMode?null===(e=this._paymentButton)||void 0===e||e.remove():this._clickListener&&(null===(t=this._paymentButton)||void 0===t||t.removeEventListener(\"click\",this._clickListener)),this._paymentButton=void 0,this._clickListener=void 0,this._methodId=void 0,this._isContainerMode=!1),Promise.resolve()}_addPaymentButton(e,t){if(this._paymentButton)return;const n=document.getElementById(e);if(!n)throw new en(\"Unable to proceed without a walletButton.\");this._paymentButton=n,this._clickListener=this._handleClick(t),this._paymentButton.addEventListener(\"click\",this._clickListener)}_addPaymentButtonToContainer(e){if(this._paymentButton)return;const{container:t,buttonColor:n,buttonSizeMode:i,buttonType:r,onError:o}=e;if(!t)throw new en(\"Unable to proceed: container ID is not valid.\");const a=this._googlePayPaymentProcessor.addPaymentButton(t,{buttonColor:null!=n?n:\"default\",buttonSizeMode:null!=i?i:\"fill\",buttonType:null!=r?r:\"pay\",onClick:this._handleContainerButtonClick(o)});if(!a)throw new en(`Unable to proceed: container element \"#${t}\" not found in the DOM.`);this._paymentButton=a}_handleContainerButtonClick(e){return t=>Fu(this,void 0,void 0,function*(){t.preventDefault(),yield this._runGooglePayWidgetInteractionWithErrorHandling(e,()=>Fu(this,void 0,void 0,function*(){this._googlePayPaymentProcessor.setShouldRequestShipping(!1),yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheetAndPay()}))})}_handleClick({onPaymentSelect:e,onError:t}){return n=>Fu(this,void 0,void 0,function*(){n.preventDefault(),yield this._runGooglePayWidgetInteractionWithErrorHandling(t,()=>Fu(this,void 0,void 0,function*(){this._googlePayPaymentProcessor.setShouldRequestShipping(!1),yield this._googlePayPaymentProcessor.initializeWidget(),this._isDirectPayOnClickEnabled()?yield this._interactWithPaymentSheetAndPay():yield this._interactWithPaymentSheet()})),null==e||e()})}_interactWithPaymentSheetAndPay(){return Fu(this,void 0,void 0,function*(){const e=yield this._googlePayPaymentProcessor.showPaymentSheet();this._toggleBlockDeinitialization(!0),this._toggleLoadingIndicator(!0);const t=this._getMethodId(),n=this._paymentIntegrationService.getState(),{features:i}=n.getStoreConfigOrThrow().checkoutSettings,r=an(i,\"PI-5031.google_pay_dont_override_address\"),o=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(e);o&&!r&&(yield this._paymentIntegrationService.updateBillingAddress(o)),yield this._googlePayPaymentProcessor.setExternalCheckoutXhr(t,e),yield this._paymentIntegrationService.loadCheckout(),yield this._paymentIntegrationService.loadPaymentMethod(t);const a=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t);yield this._googlePayPaymentProcessor.initialize(()=>a),yield this.execute({useStoreCredit:!1,payment:{methodId:t}}),this._completeCheckoutFlow()})}_completeCheckoutFlow(){window.location.replace(\"/checkout/order-confirmation\"),this._toggleLoadingIndicator(!1),this._toggleBlockDeinitialization(!1)}_interactWithPaymentSheet(){return Fu(this,void 0,void 0,function*(){const e=yield this._googlePayPaymentProcessor.showPaymentSheet(),t=this._paymentIntegrationService.getState(),{features:n}=t.getStoreConfigOrThrow().checkoutSettings,i=an(n,\"PI-5031.google_pay_dont_override_address\");this._toggleBlockDeinitialization(!0),this._toggleLoadingIndicator(!0);const r=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(e);r&&!i&&(yield this._paymentIntegrationService.updateBillingAddress(r)),yield this._googlePayPaymentProcessor.setExternalCheckoutXhr(this._getMethodId(),e),yield this._paymentIntegrationService.loadCheckout(),yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodId()),this._toggleLoadingIndicator(!1),this._toggleBlockDeinitialization(!1)})}_getMethodId(){return jt(this._methodId,()=>new Lt(zt.PaymentNotInitialized))}_getIsSignedInOrThrow(){return Fu(this,void 0,void 0,function*(){try{return!!(yield this._googlePayPaymentProcessor.getNonce(this._getMethodId()))}catch(e){if(e instanceof Ft&&e.subtype===Rt.MissingPaymentToken)return!1;throw e}})}_handleOfferTrigger(e){return Fu(this,void 0,void 0,function*(){let t=!1,n=\"Sign in to Google Pay first to apply or remove promo codes.\";try{t=yield this._getIsSignedInOrThrow()}catch(e){e instanceof Ft&&(n=e.message)}if(t){const{newOfferInfo:t,error:n}=yield this._googlePayPaymentProcessor.handleCoupons(e);return{newOfferInfo:t,error:n}}return{error:{reason:Dr.OFFER_INVALID,message:n,intent:Rr.OFFER}}})}_getGooglePayClientOptions(e){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:t,offerData:n})=>Fu(this,void 0,void 0,function*(){if(t!==Rr.INITIALIZE&&t!==Rr.OFFER)return;const{offerChangeTriggers:i}=this._googlePayPaymentProcessor.getCallbackTriggers(),{newOfferInfo:r,error:o}=i.includes(t)?yield this._handleOfferTrigger(n):{},a=o;yield this._paymentIntegrationService.loadCheckout();const{code:s}=this._paymentIntegrationService.getState().getCartOrThrow().currency,c=this._googlePayPaymentProcessor.getTotalPrice();return Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},e&&{countryCode:e}),{currencyCode:s,totalPriceStatus:xr.FINAL,totalPrice:c})},r&&{newOfferInfo:r}),a&&{error:a})})}}}_runGooglePayWidgetInteractionWithErrorHandling(e,t){return Fu(this,void 0,void 0,function*(){try{yield t()}catch(t){let n=t;if(this._toggleLoadingIndicator(!1),Lr(t)){if(\"CANCELED\"===t.statusCode)throw new Tn;n=new Fi(JSON.stringify(t))}throw null==e||e(new Fi(\"An error occurred while requesting your Google Pay payment details.\")),n}finally{this._toggleBlockDeinitialization(!1)}})}_isDirectPayOnClickEnabled(){const{features:e}=this._paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings;return an(e,\"PI-5111.google_pay_direct_pay_on_click\")}_toggleBlockDeinitialization(e){this._isDeinitializationBlocked=e}_toggleLoadingIndicator(e){e&&this._loadingIndicatorContainer?this._loadingIndicator.show(this._loadingIndicatorContainer):this._loadingIndicator.hide()}}const ju=Xt(e=>new Bu(e,new Gr($r(),new zu(e,new _s((0,d.vQ)(),(0,d._U)())),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepayadyenv2\"}]);var Lu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Uu extends jr{constructor(e,t){super(\"adyen\",e),this._scriptLoader=t,this._service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return Lu(this,void 0,void 0,function*(){yield i.initialize.call(this,e,t,n);const r=i.getPaymentMethod.call(this),o=this._service.getState().getStoreConfig();if(!o)throw new Ft(Rt.MissingCheckoutConfig);return this._adyenClient=yield this._scriptLoader.load({environment:r.config.testMode?\"test\":\"live\",locale:o.storeProfile.storeLanguage}),Promise.resolve()})}processAdditionalAction(e){return Lu(this,void 0,void 0,function*(){if(!Zr(e)||!Du(e.body))throw e;const t=yield this._handleAction(e.body.provider_data);try{return yield this._service.submitPayment(t)}catch(e){return this.processAdditionalAction(e)}})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});return Lu(this,void 0,void 0,function*(){const n=yield t.getNonce.call(this,e),i=t.getPaymentMethod.call(this);return JSON.stringify({type:i.method,googlePayToken:n,browser_info:$o()})})}_handleAction(e){return new Promise((t,n)=>{const i=JSON.parse(e.action);this._getAdyenClient().createFromAction(i,{onAdditionalDetails:e=>{const n={methodId:i.paymentMethodType,paymentData:{nonce:JSON.stringify(e.data)}};t(n)},size:\"05\",onError:e=>n(e)}).mount(\"body\"),n(new Tn)})}_getAdyenClient(){if(!this._adyenClient)throw new Lt(zt.PaymentNotInitialized);return this._adyenClient}}const Vu=Xt(e=>new Bu(e,new Gr($r(),new Uu(e,new Ps((0,d.vQ)(),(0,d._U)())),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepayadyenv3\"}]),qu=Xt(e=>new Bu(e,new Gr($r(),new Qr(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepayauthorizenet\"}]),Hu=Xt(e=>{const t=(0,o.createRequestSender)();return new Bu(e,new Gr($r(),new to(e,t),t,(0,Fn.createFormPoster)()))},[{id:\"googlepaycheckoutcom\"}]),Gu=Xt(e=>new Bu(e,new Gr($r(),new io(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaycybersourcev2\"},{id:\"googlepaybnz\"}]),Wu=Xt(e=>new Bu(e,new Gr($r(),new ao(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepayorbital\"}]),$u=Xt(e=>new Bu(e,new Gr($r(),new Oo(e,new wo((0,d.vQ)())),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeupe\"},{id:\"googlepaystripeocs\"}]),Yu=Xt(e=>new Bu(e,new Gr($r(),new ko(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepayworldpayaccess\"}]),Ku=Xt(e=>{const t=(0,o.createRequestSender)(),n=window,i=new un(e),r=new In(new An((0,d.vQ)(),n,i));return new Bu(e,new Gr($r(),new No(e,r),t,(0,Fn.createFormPoster)()))},[{id:\"googlepaybraintree\"}]);var Qu,Ju;!function(e){e.Approved=\"APPROVED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\"}(Qu||(Qu={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Ju||(Ju={}));var Zu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Xu extends Bu{constructor(e,t,n,i){super(e,t),this._payPalCommerceSdk=n,this._requestSender=i}execute({payment:e}){return Zu(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new Yi([\"payment\"]);const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow().id,{initializationData:i}=t.getPaymentMethodOrThrow(this._getMethodId()),{orderId:r}=yield this.getOrderId(n),{card_information:o}=i||{},a=yield this._googlePayPaymentProcessor.getNonce(e.methodId),s={tokenizationData:{type:\"PAYMENT_GATEWAY\",token:atob(a)},info:{cardNetwork:(null==o?void 0:o.type)||\"\",cardDetails:(null==o?void 0:o.number)||\"\"},type:\"CARD\"};yield this.confirmOrder(r,s),yield this._paymentIntegrationService.submitOrder();try{const t={formattedPayload:{method_id:e.methodId,paypal_account:{order_id:r}}};yield this._paymentIntegrationService.submitPayment({methodId:e.methodId,paymentData:t})}catch(e){yield this._googlePayPaymentProcessor.processAdditionalAction(e)}})}confirmOrder(e,t){return Zu(this,void 0,void 0,function*(){const n=this._paymentIntegrationService.getState(),i=n.getPaymentMethodOrThrow(this._getMethodId());if(!i.initializationData)throw new Ft(Rt.MissingPaymentMethod);const r=n.getCartOrThrow().currency.code,o=yield this._payPalCommerceSdk.getPayPalGooglePaySdk(i,r,n.getLocale(),!0),{status:a}=yield o.Googlepay().confirmOrder({orderId:e,paymentMethodData:t});if(a===Qu.PayerActionRequired)return yield o.Googlepay().initiatePayerAction({orderId:e}),Promise.resolve();if(a!==Qu.Approved)throw new en(\"Payment is not approved.\");return Promise.resolve()})}getOrderId(e){return Zu(this,void 0,void 0,function*(){const t={cartId:e,shouldSaveInstrument:!1},{body:n}=yield this._requestSender.post(\"/api/storefront/payments/googlepaypaypalcommercecheckout\",{headers:Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn),body:t});return n})}}const el=Xt(e=>{const t=new jo((0,d.vQ)());return new Xu(e,new Gr($r(),new Vo(e,t),(0,o.createRequestSender)(),(0,Fn.createFormPoster)()),t,(0,o.createRequestSender)())},[{id:\"googlepaypaypalcommerce\"}]);var tl,nl;!function(e){e.Approved=\"APPROVED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\"}(tl||(tl={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(nl||(nl={}));var il=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class rl extends Bu{constructor(e,t,n,i){super(e,t),this._payPalSdkHelper=n,this._requestSender=i}execute({payment:e}){return il(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new Yi([\"payment\"]);const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow().id,{initializationData:i}=t.getPaymentMethodOrThrow(this._getMethodId()),{orderId:r}=yield this.getOrderId(n),{card_information:o}=i||{},a=yield this._googlePayPaymentProcessor.getNonce(e.methodId),s={tokenizationData:{type:\"PAYMENT_GATEWAY\",token:atob(a)},info:{cardNetwork:(null==o?void 0:o.type)||\"\",cardDetails:(null==o?void 0:o.number)||\"\"},type:\"CARD\"};yield this.confirmOrder(r,s),yield this._paymentIntegrationService.submitOrder();try{const t={formattedPayload:{method_id:e.methodId,paypal_account:{order_id:r}}};yield this._paymentIntegrationService.submitPayment({methodId:e.methodId,paymentData:t})}catch(e){yield this._googlePayPaymentProcessor.processAdditionalAction(e)}})}confirmOrder(e,t){return il(this,void 0,void 0,function*(){const n=this._paymentIntegrationService.getState(),i=n.getPaymentMethodOrThrow(this._getMethodId());if(!i.initializationData)throw new Ft(Rt.MissingPaymentMethod);const r=n.getCartOrThrow().currency.code,o=yield this._payPalSdkHelper.getPayPalGooglePaySdk(i,r,!0),{status:a}=yield o.Googlepay().confirmOrder({orderId:e,paymentMethodData:t});if(a===tl.PayerActionRequired)return yield o.Googlepay().initiatePayerAction({orderId:e}),Promise.resolve();if(a!==tl.Approved)throw new en(\"Payment is not approved.\");return Promise.resolve()})}getOrderId(e){return il(this,void 0,void 0,function*(){const t={cartId:e,shouldSaveInstrument:!1},{body:n}=yield this._requestSender.post(\"/api/storefront/payments/googlepay_bigcommerce_paymentscheckout\",{headers:Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn),body:t});return n})}}const ol=Xt(e=>{const t=new _i((0,d.vQ)());return new rl(e,new Gr($r(),new Go(e,t),(0,o.createRequestSender)(),(0,Fn.createFormPoster)()),t,(0,o.createRequestSender)())},[{id:\"googlepay_bigcommerce_payments\"}]),al=Xt(e=>new Bu(e,new Gr($r(),new Ko(e,(0,Fn.createFormPoster)()),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaytdonlinemart\"}]);class sl extends Dt{constructor(e,t,n){super(n||\"Payment cannot be processed for this order, please select another payment method\"),this.type=\"custom_provider_execute_error\",this.name=t,this.subtype=e}}class cl{constructor(e,t){this.paymentIntegrationService=e,this.formPoster=t}execute(e,t){var n,i,r,o,a;return i=this,r=void 0,a=function*(){const{payment:i}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!(null==i?void 0:i.methodId))throw new Yi([\"payment.methodId\"]);yield this.paymentIntegrationService.loadPaymentMethod(i.methodId,t);const o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i.methodId);if(!(null===(n=o.initializationData)||void 0===n?void 0:n.processable))throw new sl(\"payment.humm_not_processable_error\",\"hummNotProcessableError\");yield this.paymentIntegrationService.submitOrder(r,t);try{yield this.paymentIntegrationService.submitPayment({methodId:i.methodId})}catch(e){return this.isOffsiteRedirectResponse(e)?this.handleOffsiteRedirectResponse(e):Promise.reject(e)}},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}c((a=a.apply(i,r||[])).next())})}finalize(){return Promise.reject(new ds)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}handleOffsiteRedirectResponse(e){const t=e.body.additional_action_required.data.redirect_url,n=e.body.provider_data;return new Promise(e=>{this.formPoster.postForm(t,JSON.parse(n),e)})}isOffsiteRedirectResponse(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;if(!t.body)return!1;const n=t.body;return\"additional_action_required\"===n.status&&!!n.additional_action_required&&\"offsite_redirect\"===n.additional_action_required.type&&\"string\"==typeof n.provider_data}}const dl=Xt(e=>new cl(e,(0,Fn.createFormPoster)()),[{id:\"humm\"}]),ul=[\"AT\",\"BE\",\"CA\",\"CH\",\"CZ\",\"DE\",\"DK\",\"ES\",\"FI\",\"FR\",\"GB\",\"GR\",\"IE\",\"IT\",\"NL\",\"NO\",\"NZ\",\"PL\",\"PT\",\"SE\"],ll=[\"AU\"];var hl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class pl{constructor(e,t){this.paymentIntegrationService=e,this.klarnaScriptLoader=t}initialize(e){return hl(this,void 0,void 0,function*(){this.klarnaCredit=yield this.klarnaScriptLoader.load(),this.unsubscribe=this.paymentIntegrationService.subscribe(t=>{t.isPaymentMethodInitialized({methodId:e.methodId,gatewayId:e.gatewayId})&&this.loadWidget(e)},e=>{const t=e.getCheckout();return t&&t.outstandingBalance},e=>{const t=e.getCheckout();return t&&t.coupons}),yield this.loadWidget(e)})}deinitialize(){return this.unsubscribe&&this.unsubscribe(),Promise.resolve()}execute(e,t){return hl(this,void 0,void 0,function*(){if(!e.payment)throw new en('Unable to proceed because \"payload.payment\" argument is not provided.');const n=e.payment,{paymentData:i}=n,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(n,[\"paymentData\"]),{authorization_token:o}=yield this.authorize();yield this.paymentIntegrationService.initializePayment(r.methodId,{authorizationToken:o}),yield this.paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:r,useStoreCredit:e.useStoreCredit}),t)})}finalize(){return Promise.reject(new ds)}loadWidget(e){return hl(this,void 0,void 0,function*(){if(!e.klarna)throw new en('Unable to load widget because \"options.klarna\" argument is not provided.');const{methodId:t,klarna:{container:n,onLoad:i}}=e;return yield this.paymentIntegrationService.loadPaymentMethod(t),new Promise(e=>{const r=this.paymentIntegrationService.getState().getPaymentMethod(t);if(!r)throw new Ft(Rt.MissingPaymentMethod);if(!this.klarnaCredit||!r.clientToken)throw new Lt(zt.PaymentNotInitialized);this.klarnaCredit.init({client_token:r.clientToken}),this.klarnaCredit.load({container:n},t=>{i&&i(t),e(t)})})})}getUpdateSessionData(e,t){if(!(0,P.includes)([...ul,...ll],e.countryCode))return{};const n={billing_address:this.mapToKlarnaAddress(e,e.email)};return t&&(n.shipping_address=this.mapToKlarnaAddress(t,e.email)),n}needsStateCode(e){return(0,P.includes)(ll,e)}mapToKlarnaAddress(e,t){const n={street_address:e.address1,city:e.city,country:e.countryCode,given_name:e.firstName,family_name:e.lastName,postal_code:e.postalCode,region:this.needsStateCode(e.countryCode)?e.stateOrProvinceCode:e.stateOrProvince,email:t};return e.address2&&(n.street_address2=e.address2),e.phone&&(n.phone=e.phone),n}authorize(){return new Promise((e,t)=>{const n=this.paymentIntegrationService.getState(),i=n.getBillingAddress(),r=n.getShippingAddress();if(!i)throw new Ft(Rt.MissingBillingAddress);if(!this.klarnaCredit)throw new Lt(zt.PaymentNotInitialized);const o=this.getUpdateSessionData(i,r);this.klarnaCredit.authorize(o,n=>n.approved?e(n):n.show_form?t(new Tn):void t(new Bi))})}}class ml{constructor(e,t=window){this.scriptLoader=e,this.klarnaWindow=t}load(){var e,t,n,i,r,o;return n=this,i=void 0,o=function*(){if((null===(e=this.klarnaWindow.Klarna)||void 0===e?void 0:e.Credit)||(yield this.scriptLoader.loadScript(\"//credit.klarnacdn.net/lib/v1/api.js\")),!(null===(t=this.klarnaWindow.Klarna)||void 0===t?void 0:t.Credit))throw new Qt;return this.klarnaWindow.Klarna.Credit},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())})}}const yl=Xt(e=>new pl(e,new ml((0,d.vQ)())),[{id:\"klarna\"}]);var fl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class gl{constructor(e,t,n){this.paymentIntegrationService=e,this.klarnav2ScriptLoader=t,this.klarnav2TokenUpdater=n}initialize(e){return fl(this,void 0,void 0,function*(){this.klarnaPayments=yield this.klarnav2ScriptLoader.load(),this.unsubscribe=this.paymentIntegrationService.subscribe(t=>{t.isPaymentMethodInitialized({methodId:e.methodId,gatewayId:e.gatewayId})&&this.loadPaymentsWidget(e)},e=>{const t=e.getCheckout();return t&&t.outstandingBalance},e=>{const t=e.getCheckout();return t&&t.coupons}),yield this.loadPaymentsWidget(e)})}deinitialize(){return this.unsubscribe&&this.unsubscribe(),Promise.resolve()}execute(e,t){return fl(this,void 0,void 0,function*(){if(!e.payment)throw new en('Unable to proceed because \"payload.payment\" argument is not provided.');const n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e.payment,[]),{gatewayId:i,methodId:r}=n;if(!i)throw new en('Unable to proceed because \"payload.payment.gatewayId\" argument is not provided.');const o=this.paymentIntegrationService.getState(),{id:a}=o.getCartOrThrow(),{clientToken:s,initializationData:c}=o.getPaymentMethodOrThrow(r),{klarnaMultipleRadioButton:d}=c||{};yield this.klarnav2TokenUpdater.klarnaOrderInitialization(a,s);const u=this.isKlarnaMultipleRadioButtonEnabled(d,i,r),{authorization_token:l}=yield this.authorizeOrThrow(u,r);yield this.paymentIntegrationService.initializePayment(i,{authorizationToken:l}),yield this.paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:n,useStoreCredit:e.useStoreCredit}),t)})}finalize(){return Promise.reject(new ds)}loadPaymentsWidget(e){return fl(this,void 0,void 0,function*(){if(!e.klarnav2)throw new en('Unable to load widget because \"options.klarnav2\" argument is not provided.');const{methodId:t,gatewayId:n,klarnav2:{container:i,onLoad:r}}=e;if(!n)throw new en('Unable to proceed because \"payload.payment.gatewayId\" argument is not provided.');const o=this.paymentIntegrationService.getState(),a={params:o.getCartOrThrow().id};return yield this.klarnav2TokenUpdater.updateClientToken(n,{params:a}).catch(()=>{throw new Ft(Rt.MissingPaymentMethod)}),new Promise(e=>{const a=o.getPaymentMethodOrThrow(t),{klarnaMultipleRadioButton:s}=a.initializationData||{};if(!this.klarnaPayments||!a.clientToken)throw new Lt(zt.PaymentNotInitialized);this.klarnaPayments.init({client_token:a.clientToken}),this.klarnaPayments.load({container:i,payment_method_category:this.isKlarnaMultipleRadioButtonEnabled(s,n,t)},t=>{r&&r(t),e(t)})})})}getUpdateSessionData(e,t,n){if(!(0,P.includes)([...ul,...ll],t.countryCode))return{};const i={billing_address:this.mapToKlarnaAddress(e,t,t.email)};return n&&(i.shipping_address=this.mapToKlarnaAddress(e,n,t.email)),i}needsStateCode(e){return(0,P.includes)(ll,e)}isKlarnaMultipleRadioButtonEnabled(e,t,n){return e?n:t}mapToKlarnaAddress(e,t,n){const i=this.paymentIntegrationService.getState(),{checkoutSettings:r}=i.getStoreConfigOrThrow(),o=i.getPaymentMethodOrThrow(e),{enableBillie:a}=o.initializationData||{},s={street_address:t.address1,city:t.city,country:t.countryCode,given_name:t.firstName,family_name:t.lastName,postal_code:t.postalCode,region:this.needsStateCode(t.countryCode)?t.stateOrProvinceCode:t.stateOrProvince,email:n};return t.address2&&(s.street_address2=t.address2),t.phone&&(s.phone=t.phone),t.company&&a&&an(r.features,\"PI-3915.b2b_payment_session_for_klarna\")&&(s.organization_name=t.company),s}authorizeOrThrow(e,t){return fl(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const n=this.paymentIntegrationService.getState(),i=n.getBillingAddressOrThrow(),r=n.getShippingAddress(),o=this.getUpdateSessionData(t,i,r);return new Promise((t,n)=>{if(!this.klarnaPayments)return n(new Lt(zt.PaymentNotInitialized));this.klarnaPayments.authorize({payment_method_category:e},o,e=>e.approved?t(e):e.show_form?n(new Tn):void n(new Bi))})})}}class vl{constructor(e,t=window){this.scriptLoader=e,this.klarnaWindow=t}load(){var e,t,n,i,r,o;return n=this,i=void 0,o=function*(){if((null===(e=this.klarnaWindow.Klarna)||void 0===e?void 0:e.Payments)||(yield this.scriptLoader.loadScript(\"https://x.klarnacdn.net/kp/lib/v1/api.js\")),!(null===(t=this.klarnaWindow.Klarna)||void 0===t?void 0:t.Payments))throw new Qt;return this.klarnaWindow.Klarna.Payments},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())})}}class _l{constructor(e){this.requestSender=e}updateClientToken(e,{timeout:t,params:n}={}){const i=`/api/storefront/payments/${e}`;return this.requestSender.get(i,{timeout:t,headers:Object.assign({Accept:Zn.JsonV1,\"X-API-INTERNAL\":Qn},Xn),params:n})}klarnaOrderInitialization(e,t){return n=this,i=void 0,o=function*(){const n={headers:Object.assign({Accept:Zn.JsonV1,\"X-API-INTERNAL\":Qn},Xn),body:{cartId:e,clientToken:t}};yield this.requestSender.put(\"/api/storefront/initialization/klarna\",n)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}}const bl=Xt(e=>{const{getHost:t}=e.getState(),n=(0,o.createRequestSender)({host:t()});return new gl(e,new vl((0,d.vQ)()),new _l(n))},[{gateway:\"klarna\"}]);class Sl{constructor(e){this._paymentIntegrationService=e}execute(e,t){return n=this,i=void 0,o=function*(){return yield this._paymentIntegrationService.submitOrder(e,t),Promise.resolve()},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new ds)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const wl=Xt(e=>new Sl(e),[{id:\"testgateway\"}]);var Cl,Il=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};!function(e){e.CREDIT_CARD=\"credit_card\"}(Cl||(Cl={}));const Pl=[\"klarnapaylater\",\"klarnasliceit\"];class El{constructor(e,t){this.mollieScriptLoader=e,this.paymentIntegrationService=t}initialize(e){return Il(this,void 0,void 0,function*(){const{mollie:t,methodId:n,gatewayId:i}=e;if(!t)throw new en('Unable to initialize payment because \"options.mollie\" argument is not provided.');if(!n||!i)throw new en('Unable to initialize payment because \"methodId\" and/or \"gatewayId\" argument is not provided.');const r=document.querySelectorAll(\".mollie-components-controller\");(0,P.each)(r,e=>e.remove());const o=this.paymentIntegrationService.getState(),a=o.getStoreConfigOrThrow();this.initializeOptions=t;const s=o.getPaymentMethodOrThrow(n,i),{config:{merchantId:c,testMode:d}}=s;if(this.locale=o.getLocale(),!c)throw new Ft(Rt.MissingPaymentMethod);return this.isCreditCard(n)&&t.form&&this.shouldShowTSVHostedForm(n,i)?this.hostedForm=yield this.mountCardVerificationfields(t.form):this.isCreditCard(n)&&(this.mollieClient=yield this.loadMollieJs(c,a.storeProfile.storeLanguage,d),this.mountElements()),this.unsubscribe=()=>{if(this.paymentIntegrationService.getState().isPaymentMethodInitialized({methodId:e.methodId,gatewayId:e.gatewayId})){const e=document.getElementById(`${i}-${n}-paragraph`);e&&e.remove(),t.disableButton(!1),this.loadPaymentMethodsAllowed(t,n,i)}},this.unsubscribe(),this.loadPaymentMethodsAllowed(t,n,i),Promise.resolve()})}execute(e,t){return Il(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=null==n?void 0:n.paymentData;if(!n||!n.gatewayId||!r)throw new Yi([\"payment\",\"gatewayId\",\"paymentData\"]);try{return yield this.paymentIntegrationService.submitOrder(i,t),Ss(r)?yield this.executeWithVaulted(n):this.isCreditCard(n.methodId)?yield this.executeWithCC(n):yield this.executeWithAPM(n)}catch(e){yield this.processAdditionalAction(e)}})}finalize(){return Promise.resolve()}deinitialize(e){if(this.unsubscribe&&this.unsubscribe(),this.hostedForm&&this.hostedForm.detach(),e&&e.methodId&&e.gatewayId&&!this.hostedForm){const t=document.getElementById(`${e.gatewayId}-${e.methodId}`);t&&t.remove()}else e&&e.methodId&&this.isCreditCard(e.methodId)&&this.cardHolderElement&&this.cardNumberElement&&this.verificationCodeElement&&this.expiryDateElement&&(this.cardHolderElement.unmount(),this.cardHolderElement=void 0,this.cardNumberElement.unmount(),this.cardNumberElement=void 0,this.verificationCodeElement.unmount(),this.verificationCodeElement=void 0,this.expiryDateElement.unmount(),this.expiryDateElement=void 0);return this.mollieClient=void 0,Promise.resolve()}executeWithCC(e){return Il(this,void 0,void 0,function*(){const t=e.paymentData,{shouldSaveInstrument:n=!1,shouldSetAsDefaultInstrument:i=!1}=Es(t)?t:{},{token:r,error:o}=yield this.getMollieClient().createToken();if(o)return Promise.reject(o);const a={credit_card_token:{token:r},vault_payment_instrument:n,set_as_default_stored_instrument:i,browser_info:$o(),shopper_locale:this.getShopperLocale()};yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:{formattedPayload:a}}))})}executeWithVaulted(e){return Il(this,void 0,void 0,function*(){if(this.isHostedPaymentFormEnabled(e.methodId,e.gatewayId)){const t=this.hostedForm;if(!t)throw new Lt(zt.PaymentNotInitialized);yield t.validate(),yield t.submit(e),yield this.paymentIntegrationService.loadCurrentOrder()}else yield this.paymentIntegrationService.submitPayment(e)})}executeWithAPM(e){return Il(this,void 0,void 0,function*(){const t=e.paymentData,n=t&&\"issuer\"in t?t.issuer:\"\";yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:Object.assign(Object.assign({},t),{formattedPayload:{issuer:n,shopper_locale:this.getShopperLocale()}})}))})}isCreditCard(e){return e===Cl.CREDIT_CARD}shouldShowTSVHostedForm(e,t){return this.isHostedPaymentFormEnabled(e,t)&&this.isHostedFieldAvailable()}mountCardVerificationfields(e){return new Promise((t,n)=>Il(this,void 0,void 0,function*(){try{const n=this.paymentIntegrationService.getState().getStoreConfig(),i=null==n?void 0:n.paymentSettings.bigpayBaseUrl;if(!i)throw new Ft(Rt.MissingCheckoutConfig);const r=this.paymentIntegrationService.createHostedForm(i,e);yield r.attach(),t(r)}catch(e){n(e)}}))}isHostedPaymentFormEnabled(e,t){const{getPaymentMethodOrThrow:n}=this.paymentIntegrationService.getState();return!0===n(e,t).config.isHostedFormEnabled}isHostedFieldAvailable(){var e;return!!(null===(e=this.getInitializeOptions().form)||void 0===e?void 0:e.fields)}processAdditionalAction(e){if(!Zr(e))return Promise.reject(e);if((0,P.some)(e.body.errors,{code:\"additional_action_required\"})){const{additional_action_required:{data:{redirect_url:t}}}=e.body;return new Promise(()=>window.location.replace(t))}return Promise.reject(e)}getInitializeOptions(){if(!this.initializeOptions)throw new Lt(zt.PaymentNotInitialized);return this.initializeOptions}loadMollieJs(e,t,n=!1){return this.mollieClient?Promise.resolve(this.mollieClient):this.mollieScriptLoader.load(e,t,n)}getMollieClient(){if(!this.mollieClient)throw new Lt(zt.PaymentNotInitialized);return this.mollieClient}getShopperLocale(){if(!this.locale)throw new Lt(zt.PaymentNotInitialized);return this.locale}mountElements(){const{containerId:e,cardNumberId:t,cardCvcId:n,cardExpiryId:i,cardHolderId:r,styles:o}=this.getInitializeOptions();let a;e&&(a=document.getElementById(e)),setTimeout(()=>{if(!e||\"none\"!==(null==a?void 0:a.style.display)){const e=this.getMollieClient();this.cardHolderElement=e.createComponent(\"cardHolder\",{styles:o}),this.cardHolderElement.mount(`#${r}`),this.cardNumberElement=e.createComponent(\"cardNumber\",{styles:o}),this.cardNumberElement.mount(`#${t}`),this.verificationCodeElement=e.createComponent(\"verificationCode\",{styles:o}),this.verificationCodeElement.mount(`#${n}`),this.expiryDateElement=e.createComponent(\"expiryDate\",{styles:o}),this.expiryDateElement.mount(`#${i}`)}},0)}loadPaymentMethodsAllowed(e,t,n){var i;if(Pl.includes(t)){const r=null===(i=this.paymentIntegrationService.getState().getCartOrThrow().lineItems)||void 0===i?void 0:i.digitalItems;if(r&&r.length>0){const{containerId:i}=this.getInitializeOptions();if(i){const r=document.getElementById(i);if(r){const i=document.createElement(\"p\");i.setAttribute(\"id\",`${n}-${t}-paragraph`),e.unsupportedMethodMessage&&(i.innerText=e.unsupportedMethodMessage,r.appendChild(i),e.disableButton(!0))}}}}}}class Ol{constructor(e,t=window){this.scriptLoader=e,this.mollieHostWindow=t}load(e,t,n){return i=this,r=void 0,a=function*(){if(yield this.scriptLoader.loadScript(\"https://js.mollie.com/v1/mollie.js\"),!function(e){return\"Mollie\"in e}(this.mollieHostWindow))throw new Qt;return this.mollieHostWindow.Mollie(e,{locale:t,testmode:n})},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}c((a=a.apply(i,r||[])).next())});var i,r,o,a}}const Al=Xt(e=>new El(new Ol((0,d.vQ)()),e),[{gateway:\"mollie\"},{gateway:\"mollie\",id:\"applepay\"}]);var Tl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};const kl=\"moneris-payment-iframe\";class xl{constructor(e){this.paymentIntegrationService=e}initialize(e){return Tl(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),{moneris:n,methodId:i}=e;if(!i)throw new en('Unable to initialize payment because \"methodId\" argument is not provided.');if(!n)throw new en('Unable to initialize payment because \"options.moneris\" argument is not provided.');this.initializeOptions=n;const{config:r,initializationData:o}=t.getPaymentMethodOrThrow(i);if(!(null==o?void 0:o.profileId))throw new Ft(Rt.MissingPaymentMethod);return n.form&&this.shouldShowTSVHostedForm(i)&&(this.hostedForm=yield this.mountCardVerificationfields(n.form)),this.iframe||(this.iframe=this.createIframe(n.containerId,o,!!r.testMode)),Promise.resolve()})}execute(e,t){return Tl(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);const{isStoreCreditApplied:r}=this.paymentIntegrationService.getState().getCheckoutOrThrow();if(r&&(yield this.paymentIntegrationService.applyStoreCredit(r)),yield this.paymentIntegrationService.submitOrder(i,t),!n.paymentData||!Ss(n.paymentData))return this.executeWithCC(n);yield this.executeWithVaulted(n)})}finalize(){return Promise.reject(new ds)}deinitialize(){return this.hostedForm&&this.hostedForm.detach(),this.windowEventListener&&(window.removeEventListener(\"message\",this.windowEventListener),this.windowEventListener=void 0),this.iframe&&this.iframe.parentNode&&(this.iframe.parentNode.removeChild(this.iframe),this.iframe=void 0),Promise.resolve()}executeWithCC(e){return Tl(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId).config.testMode,n=e.paymentData||{},i=Es(n)?n:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1},{shouldSaveInstrument:r,shouldSetAsDefaultInstrument:o}=i,a=yield new Promise((e,n)=>{if(!this.iframe)throw new Lt(zt.PaymentNotInitialized);const i=this.iframe.contentWindow;if(null===i)throw new Lt(zt.PaymentNotInitialized);i.postMessage(\"tokenize\",this.monerisURL(!!t)),this.windowEventListener=i=>{if(\"string\"==typeof i.data&&i.origin===`https://${t?\"esqa\":\"www3\"}.moneris.com`)try{e(this.handleMonerisResponse(i))}catch(e){n(e)}},window.addEventListener(\"message\",this.windowEventListener)});void 0!==a&&(yield this.paymentIntegrationService.submitPayment({methodId:e.methodId,paymentData:{nonce:a,shouldSaveInstrument:r,shouldSetAsDefaultInstrument:o}}))})}executeWithVaulted(e){return Tl(this,void 0,void 0,function*(){if(this.hostedForm){const t=this.hostedForm;return yield t.validate(),yield t.submit(e),this.paymentIntegrationService.loadCurrentOrder()}return this.paymentIntegrationService.submitPayment(e)})}shouldShowTSVHostedForm(e){return this.isHostedPaymentFormEnabled(e)&&this.isHostedFieldAvailable()}isHostedPaymentFormEnabled(e){const t=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e);return Boolean(t.config.isHostedFormEnabled)}isHostedFieldAvailable(){var e;const t=this.getInitializeOptions(),n=(0,P.omitBy)(null===(e=t.form)||void 0===e?void 0:e.fields,P.isEmpty);return!(0,P.isEmpty)(n)}getInitializeOptions(){if(!this.initializeOptions)throw new Lt(zt.PaymentNotInitialized);return this.initializeOptions}mountCardVerificationfields(e){var t;return Tl(this,void 0,void 0,function*(){const n=null===(t=this.paymentIntegrationService.getState().getStoreConfig())||void 0===t?void 0:t.paymentSettings.bigpayBaseUrl;if(!n)throw new Ft(Rt.MissingCheckoutConfig);const i=this.paymentIntegrationService.createHostedForm(n,e);return yield i.attach(),i})}createIframe(e,t,n,i){const r=document.getElementById(e);if(!r)throw new en(\"Unable to create iframe without valid container ID.\");const o=document.createElement(\"iframe\"),a={id:t.profileId,pmmsg:!0,display_labels:1,enable_exp:1,enable_cvd:1,css_body:(null==i?void 0:i.cssBody)||\"font-family: Arial, Helvetica,sans-serif;background: transparent;\",css_textbox:(null==i?void 0:i.cssTextbox)||\"border-radius:4px;border: 2px solid rgb(00,00,00);width: 100%;font-weight: 600;padding: 8px 8px;outline: 0;\",css_textbox_pan:(null==i?void 0:i.cssTextboxCardNumber)||\"width: 240px;\",css_textbox_exp:(null==i?void 0:i.cssTextboxExpiryDate)||\"margin-bottom: 0;width: calc(30% - 12px);\",css_textbox_cvd:(null==i?void 0:i.cssTextboxCVV)||\"margin-bottom: 0;width: calc(30% - 12px);\",css_input_label:(null==i?void 0:i.cssInputLabel)||\"font-size: 10px;position: relative;top: 8px;left: 6px;background: rgb(255,255,255);padding: 3px 2px;color: rgb(66,66,66);font-weight: 600;z-index: 2;\",pan_label:t.creditCardLabel||\"Credit Card Number\",exp_label:t.expiryDateLabel||\"Expiration\",cvd_label:t.cvdLabel||\"CVD\"},s=(0,P.map)(a,(e,t)=>`${t}=${e}`).join(\"&\");return o.width=\"100%\",o.height=\"100%\",o.name=kl,o.id=kl,o.style.border=\"none\",o.src=`${this.monerisURL(n)}?${s}`,o.allow=\"payment\",r.appendChild(o),o}handleMonerisResponse(e){const t=JSON.parse(e.data);if(\"001\"!==t.responseCode[0])throw new Error(t.errorMessage);return t.dataKey}monerisURL(e){return`https://${e?\"esqa\":\"www3\"}.moneris.com/HPPtoken/index.php`}}const Ml=Xt(e=>new xl(e),[{id:\"moneris\"}]);class Nl{constructor(e){this._paymentIntegrationService=e}execute(e,t){return n=this,i=void 0,o=function*(){return yield this._paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:e.payment?{methodId:e.payment.methodId}:void 0}),t),Promise.resolve()},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new ds)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const Dl=Xt(e=>new Nl(e),[{type:\"PAYMENT_TYPE_OFFLINE\"}]);var Rl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class zl{constructor(e){this._paymentIntegrationService=e}execute(e,t){return Rl(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=this._shouldSubmitFullPayload(n)?e:i,o=n&&n.paymentData,a=o&&Ss(o)&&o.instrumentId||void 0,s=o&&Es(o)&&o.shouldSaveInstrument||void 0,c=o&&Es(o)&&o.shouldSetAsDefaultInstrument||void 0;if(!n)throw new Yi([\"payment\"]);const{methodId:d,gatewayId:u}=n;yield this._paymentIntegrationService.submitOrder(r,t),yield this._paymentIntegrationService.initializeOffsitePayment({methodId:d,gatewayId:u,instrumentId:a,shouldSaveInstrument:s,shouldSetAsDefaultInstrument:c})})}finalize(e){return Rl(this,void 0,void 0,function*(){const t=this._paymentIntegrationService.getState(),n=t.getOrder(),i=t.getPaymentStatus();if(!n||i!==Yc.ACKNOWLEDGE&&i!==Yc.FINALIZE)return Promise.reject(new ds);yield this._paymentIntegrationService.finalizeOrder(e)})}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_shouldSubmitFullPayload(e){return!!e&&(\"adyen\"===e.gatewayId||\"barclaycard\"===e.gatewayId)}}const Fl=Xt(e=>new zl(e),[{type:\"PAYMENT_TYPE_HOSTED\"}]),Bl=function({styles:e}){const t={};return e.color&&(t.color=e.color),e.layout&&(t.layout=e.layout),(e[\"logo-type\"]||e[\"logo-position\"])&&(t.logo={},e[\"logo-type\"]&&(t.logo.type=e[\"logo-type\"]),e[\"logo-position\"]&&(t.logo.position=e[\"logo-position\"])),e.ratio&&(t.ratio=e.ratio),(e[\"text-color\"]||e[\"text-size\"])&&(t.text={},e[\"text-color\"]&&(t.text.color=e[\"text-color\"]),e[\"text-size\"]&&(t.text.size=+e[\"text-size\"])),t};var jl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ll{constructor(e,t,n,i){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.payPalSdkScriptLoader=n,this.loadingIndicator=i}initialize(e){var t;return jl(this,void 0,void 0,function*(){const{methodId:n,paypalcommerce:i}=e||{};if(this.paypalcommerce=i,!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new en('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(n),{container:a,bannerContainerId:s}=i,{orderId:c,paypalBNPLConfiguration:d=[],isPayPalCreditAvailable:u}=o.initializationData||{};if(void 0!==s){if(!document.getElementById(s))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=null==d?void 0:d.find(({id:e})=>\"checkout\"===e);if(u||!(null==e?void 0:e.status))return;const t=yield this.payPalSdkScriptLoader.getPayPalMessages(o,r.getCartOrThrow().currency.code,r.getLocale());return t&&\"function\"==typeof(null==t?void 0:t.Messages)?this.renderMessages(t,s,e):void console.error(\"[BC PayPalCommerce PayLater]: banner could not be rendered, due to issues with loading PayPal SDK\")}c?this.orderId=null===(t=o.initializationData)||void 0===t?void 0:t.orderId:(this.loadingIndicatorContainer=null==a?void 0:a.split(\"#\")[1],yield this.paypalIntegrationService.loadPayPalSdk(n),i.onInit&&\"function\"==typeof i.onInit&&i.onInit(()=>this.renderButton(n,i)),(void 0===i.shouldRenderPayPalButtonOnInitialization||i.shouldRenderPayPalButtonOnInitialization)&&this.renderButton(n,i))})}execute(e,t){var n,i;return jl(this,void 0,void 0,function*(){const{payment:r}=e,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{onError:a}=this.paypalcommerce||{};if(!r)throw new Yi([\"payment\"]);const{methodId:s,paymentData:c}=r;if(this.isPayPalVaultedInstrumentPaymentData(c)&&!this.orderId&&(this.orderId=yield this.createOrder()),!this.orderId)throw new Bi;const d=this.isPayPalVaultedInstrumentPaymentData(c)?this.prepareVaultedInstrumentPaymentPayload(s,this.orderId,c):this.preparePaymentPayload(s,this.orderId,c);try{yield this.paymentIntegrationService.submitOrder(o,t),yield this.paymentIntegrationService.submitPayment(d)}catch(e){if(function(e){var t;return Zr(e)&&\"offsite_redirect\"===(null===(t=e.body.additional_action_required)||void 0===t?void 0:t.type)}(e)){const t=null===(i=null===(n=e.body.additional_action_required)||void 0===n?void 0:n.data)||void 0===i?void 0:i.redirect_url;return new Promise(()=>window.location.replace(t))}return this.isProviderError(e)&&(yield this.paypalIntegrationService.loadPayPalSdk(r.methodId),yield new Promise((e,t)=>{var n;this.paypalcommerce&&(null===(n=this.paypalButton)||void 0===n||n.close(),this.renderButton(r.methodId,this.paypalcommerce),this.handleError(new Error(\"INSTRUMENT_DECLINED\"),a)),t()})),this.handleError(e,a),Promise.reject()}})}finalize(){return Promise.reject(new ds)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}prepareVaultedInstrumentPaymentPayload(e,t,n){const{instrumentId:i,shouldSetAsDefaultInstrument:r}=n,o=!this.isTrustedVaultingFlow(n);return o?{methodId:e,paymentData:{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t}}}}:{methodId:e,paymentData:{instrumentId:i,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t},bigpay_token:{token:i}}}}}preparePaymentPayload(e,t,n){const{shouldSaveInstrument:i=!1,shouldSetAsDefaultInstrument:r=!1}=Es(n)?n:{};return{methodId:e,paymentData:{shouldSaveInstrument:i,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t}}}}}renderButton(e,t){const n=this.paypalIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:c,onValidate:d,submitForm:u}=t;if(!a)throw new en('Unable to initialize payment because \"container\" argument is not provided.');const l=this.getSmartButtonContainerId(a);if(!document.getElementById(l))throw new en(`Unable to initialize payment because element with id ${l} does not exist.`);const h={fundingSource:n.FUNDING.PAYPAL,style:this.paypalIntegrationService.getValidButtonStyle(o),createOrder:()=>this.createOrder(),onClick:(e,t)=>this.handleClick(t,d),onApprove:e=>this.handleApprove(e,u),onError:e=>this.handleError(e,s),onCancel:()=>this.toggleLoadingIndicator(!1)};this.paypalButton=n.Buttons(h),this.paypalButton.isEligible()&&(c&&\"function\"==typeof c&&c(),this.paypalButton.render(a))}handleClick(e,t){return jl(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;return null==t?void 0:t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,null==t||t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createOrder(){return jl(this,void 0,void 0,function*(){const e=this.getFieldsValues();return this.paypalIntegrationService.createOrder(\"paypalcommercecheckout\",{shouldSaveInstrument:(null==e?void 0:e.shouldSaveInstrument)||!1})})}getFieldsValues(){const{getFieldsValues:e}=this.paypalcommerce||{};return\"function\"==typeof e?e():void 0}isTrustedVaultingFlow(e){if(e&&Ss(e)){const t=this.paymentIntegrationService.getState().getInstruments(),n=null==t?void 0:t.find(t=>Js(t)&&t.bigpayToken===e.instrumentId);return!(Js(n)&&!n.trustedShippingAddress)}return!1}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isPayPalVaultedInstrumentPaymentData(e){return!!e&&Ss(e)&&Es(e)}renderMessages(e,t,n){const i={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:Bl(n)};e.Messages(i).render(`#${t}`)}isProviderError(e){var t,n,i;return!!function(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e}(e)&&\"INSTRUMENT_DECLINED\"===(null===(i=null===(n=((null===(t=null==e?void 0:e.errors)||void 0===t?void 0:t.filter(e=>e.provider_error))||[])[0])||void 0===n?void 0:n.provider_error)||void 0===i?void 0:i.code)}getSmartButtonContainerId(e){var t;return null!==(t=e.split(\"#\")[1])&&void 0!==t?t:e}}const Ul=Xt(e=>new Ll(e,ma(e),new ca((0,d.vQ)()),new is({containerStyles:Ro})),[{id:\"paypalcommerce\"}]);var Vl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ql{constructor(e,t,n,i){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.loadingIndicator=n,this.payPalSdkScriptLoader=i}initialize(e){return Vl(this,void 0,void 0,function*(){const{methodId:t,paypalcommerce:n,paypalcommercecredit:i}=e||{},r=i||n;if(!t)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new en('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(t);const o=this.paymentIntegrationService.getState(),a=o.getPaymentMethodOrThrow(t),{paypalBNPLConfiguration:s=[],orderId:c}=a.initializationData||{},{bannerContainerId:d,container:u}=r;if(void 0!==d){if(!document.getElementById(d))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=s&&s.find(({id:e})=>\"checkout\"===e);if(!(null==e?void 0:e.status))return;const t=yield this.payPalSdkScriptLoader.getPayPalMessages(a,o.getCartOrThrow().currency.code,o.getLocale());return this.renderMessages(t,d,e)}c?this.orderId=c:(yield this.paypalIntegrationService.loadPayPalSdk(t),this.loadingIndicatorContainer=null==u?void 0:u.split(\"#\")[1],this.renderButton(t,r))})}execute(e,t){return Vl(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);if(!this.orderId)throw new Bi;yield this.paymentIntegrationService.submitOrder(i,t),yield this.paypalIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new ds)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){if(!(null==t?void 0:t.container))throw new en('Unable to initialize payment because \"container\" argument is not provided.');const n=this.paypalIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:c,onValidate:d,submitForm:u}=t,l=[n.FUNDING.PAYLATER,n.FUNDING.CREDIT];let h=!1;l.forEach(e=>{if(h)return;const t={fundingSource:e,style:this.paypalIntegrationService.getValidButtonStyle(o),createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercecreditcheckout\"),onClick:(e,t)=>this.handleClick(t,d),onApprove:e=>this.handleApprove(e,u),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.paypalButton=n.Buttons(t),this.paypalButton.isEligible()||e!==n.FUNDING.PAYLATER){if(!this.paypalButton.isEligible()&&e===n.FUNDING.CREDIT)throw new tn(`PayPal ${e} is not available for your region. Please use PayPal Checkout instead.`);c&&\"function\"==typeof c&&c(),this.paypalButton.render(a),h=!0}})}handleClick(e,t){return Vl(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;if(t&&\"function\"==typeof t)return t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,t&&\"function\"==typeof t&&t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}renderMessages(e,t,n){const i={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:Bl(n)};e.Messages(i).render(`#${t}`)}}const Hl=Xt(e=>new ql(e,ma(e),new is({containerStyles:Ro}),da()),[{id:\"paypalcommercecredit\"}]);var Gl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Wl{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.loadingIndicator=n}initialize(e){var t,n;return Gl(this,void 0,void 0,function*(){const{methodId:i,paypalcommerce:r,paypalcommercevenmo:o}=e||{},a=o||r;if(!i)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!a)throw new en('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(i);const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i);(null===(t=s.initializationData)||void 0===t?void 0:t.orderId)?this.orderId=null===(n=s.initializationData)||void 0===n?void 0:n.orderId:(yield this.paypalIntegrationService.loadPayPalSdk(i),this.loadingIndicatorContainer=a.container.split(\"#\")[1],this.renderButton(i,a))})}execute(e,t){return Gl(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);if(!this.orderId)throw new Bi;yield this.paymentIntegrationService.submitOrder(i,t),yield this.paypalIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new ds)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){const n=this.paypalIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:c,onValidate:d,submitForm:u}=t,l={fundingSource:n.FUNDING.VENMO,style:this.paypalIntegrationService.getValidButtonStyle(o),createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercevenmocheckout\"),onClick:(e,t)=>this.handleClick(t,d),onApprove:e=>this.handleApprove(e,u),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.paypalButton=n.Buttons(l),!this.paypalButton.isEligible())throw new tn(\"PayPal Venmo is not available for your region. Please use PayPal Checkout instead.\");c&&\"function\"==typeof c&&c(),this.paypalButton.render(a)}handleClick(e,t){return Gl(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;return t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,t(),this.toggleLoadingIndicator(!1)}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const $l=Xt(e=>new Wl(e,ma(e),new is({styles:{backgroundColor:\"black\"}})),[{id:\"paypalcommercevenmo\"}]),Yl={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"};var Kl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ql{constructor(e,t,n,i,r=3e3,o=3e5){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t,this.paypalSdkScriptLoader=n,this.loadingIndicator=i,this.pollingInterval=r,this.maxPollingIntervalTime=o,this.pollingTimer=0,this.stopPolling=P.noop,this.isOrderApprovedProcessing=!1}initialize(e){return Kl(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,paypalcommerce:i,paypalcommercealternativemethods:r}=e,o=r||i;if(this.paypalcommercealternativemethods=r,!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!o)throw new en('Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument is not provided.');const a=this.paymentIntegrationService.getState(),s=a.getPaymentMethodOrThrow(n,t),{orderId:c,shouldRenderFields:d}=s.initializationData||{},u=a.getStoreConfigOrThrow().checkoutSettings.features;this.isOrderApprovedProcessing=an(u,\"PAYPAL-5431.order_approved_processing\",!1),c?this.orderId=c:(this.paypalApms=yield this.paypalSdkScriptLoader.getPayPalApmsSdk(s,a.getCartOrThrow().currency.code,a.getLocale()),this.loadingIndicatorContainer=o.container.split(\"#\")[1],this.renderButton(n,t,o),d&&this.renderFields(n,o))})}execute(e,t){return Kl(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);const{methodId:r,gatewayId:o}=n;if(!this.orderId)throw new Bi;this.isOrderApprovedProcessing||\"ideal\"!==r||(yield new Promise((e,t)=>{this.initializePollingMechanism(r,e,t,o)})),this.isNonInstantPaymentMethod(r)&&(r!==Pa.IDEAL||this.isOrderApprovedProcessing)||(yield this.paymentIntegrationService.submitOrder(i,t)),yield this.paypalCommerceIntegrationService.submitPayment(r,this.orderId,o)})}finalize(){return Promise.reject(new ds)}deinitialize(){var e;return this.orderId=void 0,this.isOrderApprovedProcessing||this.resetPollingMechanism(),null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}initializePollingMechanism(e,t,n,i){return Kl(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.paypalCommerceIntegrationService.getOrderStatus(null!=i?i:\"paypalcommerce\"),o=r===Ea.Approved,a=r===Ea.PollingError;if(o)return this.deinitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,i);yield this.reinitializeStrategy({methodId:e,gatewayId:i,paypalcommercealternativemethods:this.paypalcommercealternativemethods}),this.handleError(new cc)}catch(e){n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}reinitializeStrategy(e){return Kl(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}handleError(e){const{onError:t}=this.paypalcommercealternativemethods||{};this.isOrderApprovedProcessing||this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderButton(e,t,n){const i=this.getPaypalAmpsSdkOrThrow(),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t),{buttonStyle:o}=r.initializationData||{},{container:a,onError:s,onRenderButton:c,submitForm:d}=n,u={fundingSource:e,style:this.paypalCommerceIntegrationService.getValidButtonStyle(o),onInit:(e,t)=>n.onInitButton(t),createOrder:()=>this.onCreateOrder(e,t,n),onApprove:e=>this.handleApprove(e,d),onCancel:()=>{this.toggleLoadingIndicator(!1),this.deinitializePollingMechanism()},onError:e=>{this.deinitializePollingMechanism(),this.handleFailure(e,s)},onClick:(e,t)=>Kl(this,void 0,void 0,function*(){return n.onValidate(t.resolve,t.reject)})};this.paypalButton=i.Buttons(u),this.paypalButton.isEligible()&&(c&&\"function\"==typeof c&&c(),this.paypalButton.render(a))}onCreateOrder(e,t,n){var i;return Kl(this,void 0,void 0,function*(){const{onValidate:r}=n;yield r(()=>(this.toggleLoadingIndicator(!0),()=>Promise.resolve()),P.noop);const o=yield this.paypalCommerceIntegrationService.createOrder(\"paypalcommercealternativemethodscheckout\");if(this.isNonInstantPaymentMethod(e)&&(e===Pa.IDEAL&&this.isOrderApprovedProcessing||e===Pa.OXXO)){const n={useStoreCredit:!1},r={params:{methodId:e,gatewayId:t}};if(yield this.paymentIntegrationService.submitOrder(n,r),e===Pa.IDEAL){const t=this.paymentIntegrationService.getState(),n=null===(i=t.getOrder())||void 0===i?void 0:i.orderId;yield this.paypalCommerceIntegrationService.updateOrder(\"paypalcommercealternativemethods\",e,n)}yield this.paypalCommerceIntegrationService.submitPayment(e,o,t)}return o})}handleApprove({orderID:e},t){this.orderId=e,t()}handleFailure(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderFields(e,t){const n=this.getPaypalAmpsSdkOrThrow(),i=this.paymentIntegrationService.getState(),{firstName:r,lastName:o,email:a}=i.getBillingAddressOrThrow(),{apmFieldsContainer:s,apmFieldsStyles:c}=t;if(!s)throw new en('Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument should contain \"apmFieldsContainer\".');const d=document.querySelector(s);d&&(d.innerHTML=\"\");const u={fundingSource:e,style:c||{},fields:{name:{value:`${r} ${o}`},email:{value:a}}};n.PaymentFields(u).render(s)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isNonInstantPaymentMethod(e){return e.toUpperCase()in Pa}getPaypalAmpsSdkOrThrow(){if(!this.paypalApms)throw new Qt;return this.paypalApms}}const Jl=Xt(e=>new Ql(e,ma(e),da(),new is({containerStyles:Yl})),[{gateway:\"paypalcommercealternativemethods\"}]);var Zl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Xl{constructor(e,t,n,i){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalSdkScriptLoader=n,this.paypalFastlaneUtils=i}initialize(e){return Zl(this,void 0,void 0,function*(){const{methodId:t,paypalcommercecreditcards:n,paypalcommerce:i}=e,r=n||i,{form:o,onCreditCardFieldsRenderingError:a,onLoadComplete:s}=r||{};if(!t)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!o)throw new en('Unable to proceed because \"options.paypalcommercecreditcards.form\" argument is not provided.');this.hostedFormOptions=o,this.isCreditCardForm=mc(o.fields),this.isCreditCardVaultedForm=yc(o.fields)&&!this.hasUndefinedValues(),yield this.paymentIntegrationService.loadPaymentMethod(t),yield this.paypalIntegrationService.loadPayPalSdk(t,void 0,!0,!0),(this.isCreditCardForm||this.isCreditCardVaultedForm)&&(yield this.initializeFields(o,a)),null==s||s(),this.shouldInitializePayPalFastlane(t)&&(yield this.initializePayPalFastlaneOrThrow(t))})}execute(e,t){return Zl(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{methodId:r,paymentData:o}=n||{};if(!n||!r)throw new Yi([\"payment\"]);if(this.executionPaymentData=o,this.isCreditCardForm||this.isCreditCardVaultedForm)yield this.validateHostedFormOrThrow(),yield this.submitHostedForm();else{const{orderId:e}=yield this.paypalIntegrationService.createOrderCardFields(\"paypalcommercecreditcardscheckout\",this.getInstrumentParams());this.returnedOrderId=e}const a=this.preparePaymentPayload(r,o,this.returnedOrderId,this.returnedVaultedToken);yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment(a)})}finalize(){return Promise.reject(new ds)}deinitialize(){var e,t,n,i;return Zl(this,void 0,void 0,function*(){return yield null===(e=this.cvvField)||void 0===e?void 0:e.close(),yield null===(t=this.expiryField)||void 0===t?void 0:t.close(),yield null===(n=this.numberField)||void 0===n?void 0:n.close(),yield null===(i=this.nameField)||void 0===i?void 0:i.close(),Promise.resolve()})}preparePaymentPayload(e,t,n,i){const{shouldSaveInstrument:r=!1,shouldSetAsDefaultInstrument:o=!1}=Es(t)?t:{},a=t&&Ss(t)?t.instrumentId:void 0,s=(0,P.omitBy)({verification_nonce:i,token:a},P.isNil);return{methodId:e,paymentData:{shouldSaveInstrument:r,shouldSetAsDefaultInstrument:o,instrumentId:a,formattedPayload:Object.assign(Object.assign({},i||a?{bigpay_token:s}:{}),n?{card_with_order:{order_id:n}}:{})}}}initializeFields(e,t){return Zl(this,void 0,void 0,function*(){const{fields:n,styles:i}=e,r=this.paypalIntegrationService.getPayPalSdkOrThrow(),o=this.getExecuteCallback(n),a=Object.assign({style:this.getInputStyles(i),onApprove:({orderID:e,vaultSetupToken:t,liabilityShift:n})=>{if(n===ba.No||n===ba.Unknown)throw new Error;return this.handleApprove({orderID:e,vaultSetupToken:t})},onError:()=>{throw new Fi},inputEvents:{onChange:t=>this.onChangeHandler(e,t),onFocus:t=>this.onFocusHandler(e,t),onBlur:t=>this.onBlurHandler(e,t),onInputSubmitRequest:t=>this.onInputSubmitRequest(e,t)}},o);if(this.cardFields=yield r.CardFields(a),!this.cardFields.isEligible())throw new Lt(zt.PaymentNotInitialized);try{this.stylizeInputContainers(n),mc(n)&&(yield this.renderFields(n)),yc(n)&&(yield this.renderVaultedFields(n))}catch(e){\"function\"==typeof t&&t(e)}})}getExecuteCallback(e){return yc(e)?this.createVaultSetupTokenCallback():this.createOrderCallback()}createVaultSetupTokenCallback(){return{createVaultSetupToken:()=>Zl(this,void 0,void 0,function*(){const{setupToken:e}=(yield this.paypalIntegrationService.createOrderCardFields(\"paypalcommercecreditcardscheckout\",Object.assign(Object.assign({},this.getInstrumentParams()),{setupToken:!0})))||{};return e})}}createOrderCallback(){return{createOrder:()=>Zl(this,void 0,void 0,function*(){const{orderId:e}=(yield this.paypalIntegrationService.createOrderCardFields(\"paypalcommercecreditcardscheckout\",this.getInstrumentParams()))||{};return e})}}handleApprove({orderID:e,vaultSetupToken:t}){e&&(this.returnedOrderId=e),t&&(this.returnedVaultedToken=t)}renderFields(e){var t,n,i,r;return Zl(this,void 0,void 0,function*(){const o=this.getCardFieldsOrThrow();(null===(t=e.cardCode)||void 0===t?void 0:t.containerId)&&(this.cvvField=o.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCode.containerId}`)),(null===(n=e.cardExpiry)||void 0===n?void 0:n.containerId)&&(this.expiryField=o.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiry.containerId}`)),(null===(i=e.cardName)||void 0===i?void 0:i.containerId)&&(this.nameField=o.NameField({placeholder:\"\"}),yield this.nameField.render(`#${e.cardName.containerId}`)),(null===(r=e.cardNumber)||void 0===r?void 0:r.containerId)&&(this.numberField=o.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumber.containerId}`))})}renderVaultedFields(e){var t,n,i;return Zl(this,void 0,void 0,function*(){const r=this.getCardFieldsOrThrow();(null===(t=e.cardCodeVerification)||void 0===t?void 0:t.containerId)&&(this.cvvField=r.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCodeVerification.containerId}`)),(null===(n=e.cardExpiryVerification)||void 0===n?void 0:n.containerId)&&(this.expiryField=r.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiryVerification.containerId}`)),(null===(i=e.cardNumberVerification)||void 0===i?void 0:i.containerId)&&(this.numberField=r.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumberVerification.containerId}`))})}getInstrumentParams(){if(!this.executionPaymentData)return{};if(Es(this.executionPaymentData)){const{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}=this.executionPaymentData;return{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}}if(Ss(this.executionPaymentData)){const{instrumentId:e}=this.executionPaymentData;return{instrumentId:e}}return{}}getFieldTypeByEmittedField({emittedBy:e}){return{fieldType:this.mapFieldType(e)}}submitHostedForm(){return Zl(this,void 0,void 0,function*(){const e=this.getCardFieldsOrThrow(),t=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),n={billingAddress:{company:t.company,addressLine1:t.address1,addressLine2:t.address2,adminArea1:t.stateOrProvinceCode,adminArea2:t.city,postalCode:t.postalCode,countryCode:t.countryCode}};try{this.isCreditCardVaultedForm?yield e.submit():yield e.submit(n)}catch(e){throw new Fi(\"Failed authentication. Please try to authorize again.\")}})}validateHostedFormOrThrow(){var e,t;return Zl(this,void 0,void 0,function*(){const n=this.getCardFieldsOrThrow(),i=yield n.getState().then(e=>e),r=this.getValidityData(i);if(!r.isValid)throw null===(t=null===(e=this.hostedFormOptions)||void 0===e?void 0:e.onValidate)||void 0===t||t.call(e,r),new Ki(this.mapValidationErrors(r.errors))})}getValidityData({fields:e}){const t=Object.assign({},e);delete t.cardNameField;const n=Object.keys(t),i=n.every(e=>{var n;return null===(n=t[e])||void 0===n?void 0:n.isValid}),r=n.reduce((e,n)=>{var i;const r=this.mapFieldType(n);return Object.assign(Object.assign({},e),{[r]:(null===(i=t[n])||void 0===i?void 0:i.isValid)?void 0:[this.getInvalidErrorByFieldType(r)]})},{});return{isValid:i,errors:r}}getInvalidErrorByFieldType(e){switch(e){case pc.CardCode:case pc.CardCodeVerification:return{fieldType:e,message:\"Invalid card code\",type:\"invalid_card_code\"};case pc.CardNumber:case pc.CardNumberVerification:return{fieldType:e,message:\"Invalid card number\",type:\"invalid_card_number\"};case pc.CardExpiry:case pc.CardExpiryVerification:return{fieldType:e,message:\"Invalid card expiry\",type:\"invalid_card_expiry\"};default:return{fieldType:e,message:\"Invalid field\",type:\"invalid\"}}}mapValidationErrors(e={}){const t={};return Object.keys(e).forEach(n=>{var i,r;t[n]=[{message:(null===(r=null===(i=e[n])||void 0===i?void 0:i[0])||void 0===r?void 0:r.message)||\"\",type:n}]}),t}mapFieldType(e){switch(e){case\"name\":return pc.CardName;case\"cardNumberField\":case\"number\":return this.isCreditCardForm?pc.CardNumber:pc.CardNumberVerification;case\"cardExpiryField\":case\"expiry\":return this.isCreditCardForm?pc.CardExpiry:pc.CardExpiryVerification;case\"cardCvvField\":case\"cvv\":return this.isCreditCardForm?pc.CardCode:pc.CardCodeVerification;default:throw new Error(\"Unexpected field type\")}}getCardFieldsOrThrow(){if(!this.cardFields)throw new Lt(zt.PaymentNotInitialized);return this.cardFields}getInputStyles(e){var t,n,i;const r={\"font-size\":(null===(t=null==e?void 0:e.default)||void 0===t?void 0:t.fontSize)||\"1rem\",\"font-family\":(null===(n=null==e?void 0:e.default)||void 0===n?void 0:n.fontFamily)||\"Montserrat, Arial, Helvetica, sans-serif\",\"font-weight\":(null===(i=null==e?void 0:e.default)||void 0===i?void 0:i.fontWeight)||\"400\",outline:\"none\",padding:\"9px 13px\"},o=Object.assign(Object.assign({},r),{color:\"#333333\"});return{input:o,\".invalid\":Object.assign(Object.assign({},r),{color:\"red\"}),\".valid\":o,\":focus\":o}}stylizeInputContainers(e){Object.values(e||{}).forEach(e=>{const t=document.getElementById(`${(null==e?void 0:e.containerId)||\"\"}`);t&&(t.style.padding=\"0px\",t.style.boxShadow=\"none\",t.style.border=\"none\",t.style.background=\"transparent\",t.style.marginBottom=\"10px\",t.style.marginLeft=\"-5px\")})}hasUndefinedValues(){return!this.hostedFormOptions||Object.values(this.hostedFormOptions.fields).some(e=>void 0===e)}onChangeHandler(e,t){var n;null===(n=null==e?void 0:e.onValidate)||void 0===n||n.call(e,this.getValidityData(t))}onFocusHandler(e,t){var n;null===(n=null==e?void 0:e.onFocus)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onBlurHandler(e,t){var n;null===(n=null==e?void 0:e.onBlur)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onInputSubmitRequest(e,t){var n;null===(n=null==e?void 0:e.onEnter)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}shouldInitializePayPalFastlane(e){var t,n;const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(e),o=i.getPaymentProviderCustomer(),a=(s=o)&&(\"authenticationState\"in s||\"addresses\"in s||\"instruments\"in s)?o:{};var s;return(null===(t=null==r?void 0:r.initializationData)||void 0===t?void 0:t.isAcceleratedCheckoutEnabled)&&(null===(n=null==r?void 0:r.initializationData)||void 0===n?void 0:n.isPayPalCommerceAnalyticsV2Enabled)&&!(null==a?void 0:a.authenticationState)}initializePayPalFastlaneOrThrow(e){return Zl(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getPaymentMethodOrThrow(e),{initializationData:r}=i;if(!(null==r?void 0:r.connectClientToken))return;const o=yield this.paypalSdkScriptLoader.getPayPalFastlaneSdk(i,n.currency.code,n.id,t.getLocale());yield this.paypalFastlaneUtils.initializePayPalFastlane(o,!!(null==r?void 0:r.isDeveloperModeApplicable))}catch(e){}})}}const eh=Xt(e=>new Xl(e,ma(e),da(),Va()),[{id:\"paypalcommercecreditcards\"}]);var th=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class nh{constructor(e,t,n,i=3e3,r=3e5){this.paymentIntegrationService=e,this.paypalCommerceService=t,this.loadingIndicator=n,this.pollingInterval=i,this.maxPollingIntervalTime=r,this.pollingTimer=0,this.stopPolling=P.noop}initialize(e){return th(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,paypalcommerceratepay:i}=e;if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!i)throw new en('Unable to initialize payment because \"options.paypalcommerceratepay\" argument is not provided.');const{legalTextContainer:r,container:o,loadingContainerId:a}=i;if(!o)throw new en('Unable to initialize payment because \"options.container\" argument is not provided.');if(!r)throw new en('Unable to initialize payment because \"options.legalTextContainer\" argument is not provided.');if(!a)throw new en('Unable to initialize payment because \"options.loadingContainerId\" argument is not provided.');this.loadingIndicatorContainer=a;const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,t),{merchantId:c}=s.initializationData||{};if(!c)throw new en(\"Unable to initialize payment because merchantId argument is not provided.\");this.paypalcommerceratepay=i,yield this.paypalCommerceService.loadPayPalSdk(n),this.createFraudNetScript(c,n,t),this.loadFraudnetConfig(),this.renderLegalText(r,o)})}execute(e,t){return th(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{getFieldsValues:r}=this.paypalcommerceratepay||{};if(!n)throw new Yi([\"payment\"]);if(!r||\"function\"!=typeof r)throw new en('Unable to initialize payment because \"options.getFieldsValues\" argument is not provided.');this.toggleLoadingIndicator(!0);try{const e=yield this.paypalCommerceService.createOrder(\"paypalcommercealternativemethodscheckout\",{metadataId:this.guid}),{ratepayBirthDate:o,ratepayPhoneNumber:a,ratepayPhoneCountryCode:s}=r(),c={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:n.methodId,rate_pay:{birth_date:this.normalizeDate(o),phone:{national_number:a,country_code:s.split(\"+\")[1]}},paypal_account:{order_id:e}}};return yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment({methodId:n.methodId,paymentData:c}),yield new Promise((e,t)=>{this.initializePollingMechanism(n.methodId,e,t,n.gatewayId)})}catch(e){return this.handleError(e),new Promise((e,t)=>t())}})}finalize(){return Promise.reject(new ds)}deinitialize(){const{legalTextContainer:e}=this.paypalcommerceratepay||{},t=document.querySelectorAll('[data-id=\"fraudnetScript\"]')[0],n=document.querySelectorAll('[data-id=\"fraudnetConfig\"]')[0];if(this.deinitializePollingMechanism(),t.remove(),n.remove(),e){const t=document.getElementById(e);null==t||t.remove()}return Promise.resolve()}normalizeDate(e){const t=this.formatDate(e.getDate()),n=this.formatDate(e.getMonth()+1);return`${e.getFullYear()}-${n}-${t}`}formatDate(e){return`${e<10?0:\"\"}${e}`}renderLegalText(e,t){const n=e,i=t.split(\"#\")[1],r=document.getElementById(i),o=null==r?void 0:r.parentNode,a=document.createElement(\"div\");a.style.marginBottom=\"20px\",a.setAttribute(\"id\",n),null==o||o.prepend(a);const s=this.paypalCommerceService.getPayPalSdkOrThrow(),c=s.Legal({fundingSource:s.Legal.FUNDING.PAY_UPON_INVOICE});if(!document.getElementById(n))throw new en('Unable to initialize payment because \"legalTextContainerElement\" argument is not found.');c.render(`#${n}`)}handleError(e){const{onError:t}=this.paypalcommerceratepay||{};this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createFraudNetScript(e,t,n){const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n),{testMode:r}=i.config,o=document.createElement(\"script\");o.setAttribute(\"type\",\"application/json\"),o.setAttribute(\"fncls\",\"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\"),o.setAttribute(\"data-id\",\"fraudnetScript\"),this.guid=this.generateGUID();const a={f:this.guid,s:`${e}_checkout-page`,sandbox:r};o.innerHTML=JSON.stringify(a),document.body.appendChild(o)}generateGUID(){let e=\"\";for(let t=0;t<32;t+=1)e+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"[Math.floor(62*Math.random())];return e}loadFraudnetConfig(){const e=document.createElement(\"script\");e.setAttribute(\"data-id\",\"fraudnetConfig\"),e.src=\"https://c.paypal.com/da/r/fb.js\",document.body.appendChild(e)}reinitializeStrategy(e){return th(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}initializePollingMechanism(e,t,n,i){return th(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.paypalCommerceService.getOrderStatus(\"paypalcommercealternativemethods\",{params:{useMetadata:!0}}),o=r===aa.PollingStop,a=r===aa.PollingError;if(o)return this.deinitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,i);yield this.reinitializeStrategy({methodId:e,gatewayId:i,paypalcommerceratepay:this.paypalcommerceratepay}),this.handleError(new cc)}catch(e){this.handleError(e),n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const ih=Xt(e=>new nh(e,ma(e),new is({containerStyles:Object.assign(Object.assign({},Ro),{position:\"fixed\"})})),[{gateway:\"paypalcommercealternativemethods\",id:\"ratepay\"}]);function rh(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}var oh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ah{constructor(e,t,n,i){this.paymentIntegrationService=e,this.paypalCommerceRequestSender=t,this.paypalSdkScriptLoader=n,this.paypalFastlaneUtils=i}initialize(e){var t,n;return oh(this,void 0,void 0,function*(){const{methodId:i,paypalcommercefastlane:r}=e;if(this.methodId=i,this.paypalcommercefastlane=r,!i)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new en('Unable to initialize payment because \"options.paypalcommercefastlane\" argument is not provided.');if(!r.onInit||\"function\"!=typeof r.onInit)throw new en('Unable to initialize payment because \"options.paypalcommercefastlane.onInit\" argument is not provided or it is not a function.');if(!r.onChange||\"function\"!=typeof r.onChange)throw new en('Unable to initialize payment because \"options.paypalcommercefastlane.onChange\" argument is not provided or it is not a function.');yield this.paymentIntegrationService.loadPaymentMethod(i);const o=this.paymentIntegrationService.getState(),a=o.getCartOrThrow(),s=o.getPaymentMethodOrThrow(i),{isDeveloperModeApplicable:c,isFastlaneStylingEnabled:d}=s.initializationData||{};this.threeDSVerificationMethod=null===(t=s.initializationData)||void 0===t?void 0:t.threeDSVerificationMethod,this.paypalFastlaneSdk=yield this.paypalSdkScriptLoader.getPayPalFastlaneSdk(s,a.currency.code,a.id,o.getLocale());const u=Ha(d?null===(n=null==s?void 0:s.initializationData)||void 0===n?void 0:n.fastlaneStyles:{},null==r?void 0:r.styles);yield this.paypalFastlaneUtils.initializePayPalFastlane(this.paypalFastlaneSdk,!!c,u),this.shouldRunAuthenticationFlow()&&(yield this.runPayPalAuthenticationFlowOrThrow(i)),yield this.initializePayPalPaymentComponent(),r.onInit(e=>this.renderPayPalPaymentComponent(e)),r.onChange(()=>this.handlePayPalStoredInstrumentChange(i))})}execute(e,t){return oh(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);const{paymentData:r,methodId:o}=n,a=r&&Ss(r);try{yield this.paymentIntegrationService.submitOrder(i,t);const e=a?yield this.prepareVaultedInstrumentPaymentPayload(o,r):yield this.preparePaymentPayload(o,r);yield this.paymentIntegrationService.submitPayment(e),this.paypalFastlaneUtils.removeStorageSessionId()}catch(e){if(function(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"response\"in e&&\"body\"in e.response&&\"name\"in e.response.body}(e)&&\"INVALID_REQUEST\"===e.response.body.name){const e={translationKey:\"payment.errors.invalid_request_error\"};return this.handleError(e),Promise.reject()}if(e instanceof Error&&\"FastlaneError\"!==e.name)throw e;return Promise.reject()}})}finalize(){return Promise.reject(new ds)}deinitialize(){return oh(this,void 0,void 0,function*(){return Promise.resolve()})}shouldRunAuthenticationFlow(){const e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getCustomerOrThrow(),i=e.getPaymentProviderCustomer(),r=rh(i)?i:{},o=this.paypalFastlaneUtils.getStorageSessionId();return!(!n.isGuest||(null==r?void 0:r.authenticationState)===ra.CANCELED||(null==r?void 0:r.authenticationState)||o!==t.id)}runPayPalAuthenticationFlowOrThrow(e){return oh(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getCustomer(),r=t.getBillingAddress(),o=(null==i?void 0:i.email)||(null==r?void 0:r.email)||\"\",{customerContextId:a}=yield this.paypalFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(a),{authenticationState:c,addresses:d,instruments:u}=this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,s);yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:c,addresses:d,instruments:u}),s.authenticationState===ra.CANCELED?this.paypalFastlaneUtils.removeStorageSessionId():this.paypalFastlaneUtils.updateStorageSessionId(n.id)}catch(e){}})}initializePayPalPaymentComponent(){return oh(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),t=e.phone,n=`${e.firstName} ${e.lastName}`.trim(),i=this.paypalFastlaneUtils.getPayPalFastlaneOrThrow(),r={fields:Object.assign({cardholderName:{prefill:n,enabled:!0}},t&&{phoneNumber:{prefill:t}})};this.paypalComponentMethods=yield i.FastlaneCardComponent(r)})}renderPayPalPaymentComponent(e){const t=this.getPayPalComponentMethodsOrThrow();if(!e)throw new en('Unable to render card component because \"container\" argument is not provided.');t.render(e)}getPayPalComponentMethodsOrThrow(){if(!this.paypalComponentMethods)throw new Qt;return this.paypalComponentMethods}prepareVaultedInstrumentPaymentPayload(e,t){return oh(this,void 0,void 0,function*(){const{instrumentId:n}=t,i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e).config.is3dsEnabled?yield this.get3DSNonce(n):n;return yield this.createOrder(i),{methodId:e,paymentData:{formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:i}}}}})}preparePaymentPayload(e,t){return oh(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getBillingAddressOrThrow(),r=n.getPaymentMethodOrThrow(e),o=`${i.firstName} ${i.lastName}`.trim(),{getPaymentToken:a}=this.getPayPalComponentMethodsOrThrow(),{id:s}=yield a({name:{fullName:o},billingAddress:this.paypalFastlaneUtils.mapBcToPayPalAddress(i)}),c=r.config.is3dsEnabled?yield this.get3DSNonce(s):s;yield this.createOrder(c);const{shouldSaveInstrument:d=!1,shouldSetAsDefaultInstrument:u=!1}=Es(t)?t:{};return{methodId:e,paymentData:Object.assign(Object.assign({},t),{shouldSaveInstrument:d,shouldSetAsDefaultInstrument:u,formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:c}}})}})}createOrder(e){return oh(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getCartOrThrow().id;if(this.methodId){const{orderId:n}=yield this.paypalCommerceRequestSender.createOrder(this.methodId,{cartId:t,fastlaneToken:e});this.orderId=n}})}get3DSNonce(e){var t;return oh(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getCartOrThrow(),r=n.getOrderOrThrow(),o=n.getStoreConfigOrThrow().links.checkoutLink,a=null===(t=this.paypalFastlaneSdk)||void 0===t?void 0:t.ThreeDomainSecureClient;if(!a)throw new Qt;const s={amount:r.orderAmount.toFixed(2),currency:i.currency.code,nonce:e,threeDSRequested:this.threeDSVerificationMethod===Zo.Always,transactionContext:{experience_context:{locale:\"en-US\",return_url:o,cancel_url:o}}},c=yield a.isEligible(s);if(this.threeDSVerificationMethod===Zo.Always&&!c)throw new Bi;if(c){const{liabilityShift:e,authenticationState:t,nonce:n}=yield a.show();if(e===ba.No||e===ba.Unknown||t===Xo.Errored||t===Xo.Cancelled)throw new Bi;if(t===Xo.Succeeded&&[ba.Yes,ba.Possible].includes(e))return n;throw new Bi}return e})}handlePayPalStoredInstrumentChange(e){return oh(this,void 0,void 0,function*(){const t=this.paypalFastlaneUtils.getPayPalFastlaneOrThrow(),{selectionChanged:n,selectedCard:i}=yield t.profile.showCardSelector();if(n){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomer(),n=rh(t)?t:{},r=this.paypalFastlaneUtils.mapPayPalToBcInstrument(e,i)[0];return yield this.paymentIntegrationService.updatePaymentProviderCustomer(Object.assign(Object.assign({},n),{instruments:[r]})),r}})}handleError(e){var t;(null===(t=this.paypalcommercefastlane)||void 0===t?void 0:t.onError)&&\"function\"==typeof this.paypalcommercefastlane.onError&&this.paypalcommercefastlane.onError(e)}}const sh=Xt(e=>{const{getHost:t}=e.getState();return new ah(e,new ka((0,o.createRequestSender)({host:t()})),da(),Va())},[{id:\"paypalcommerceacceleratedcheckout\"}]);var ch,dh,uh,lh,hh,ph;!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(ch||(ch={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(dh||(dh={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\"}(uh||(uh={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(lh||(lh={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(hh||(hh={})),function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(ph||(ph={}));var mh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class yh{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t,this.useRedirectFlow=!1,this.window=window}initialize(e){return mh(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState();this.paymentMethod=t.getPaymentMethodOrThrow(e.methodId),this.useRedirectFlow=!0===(e.paypalexpress&&e.paypalexpress.useRedirectFlow);const n=this.paymentMethod.config.merchantId;if(!this.isInContextEnabled()||!n)throw new Ft(Rt.MissingPaymentMethod);const i=yield this.scriptLoader.loadPaypalSDK();this.paypalSdk=i,this.paypalSdk.checkout.setup(n,{button:\"paypal-button\",environment:this.paymentMethod.config.testMode?\"sandbox\":\"production\"})})}deinitialize(){return this.isInContextEnabled()&&this.paypalSdk&&(this.paypalSdk.checkout.closeFlow(),this.paypalSdk=void 0),Promise.resolve()}execute(e,t){return mh(this,void 0,void 0,function*(){let n,i;const r=this.paypalSdk;if(!this.isAcknowledgedOrFinalized()){if(!this.isInContextEnabled()||this.useRedirectFlow)return n=yield this.paymentIntegrationService.submitOrder(e,t),i=n.getPaymentRedirectUrl(),i&&this.window.top&&(this.window.top.location.href=i),new Promise(P.noop);if(!r)throw new Lt(zt.PaymentNotInitialized);r.checkout.initXO();try{n=yield this.paymentIntegrationService.submitOrder(e,t)}catch(e){return r.checkout.closeFlow(),Promise.reject(e)}return i=n.getPaymentRedirectUrl(),i&&r.checkout.startFlow(i),new Promise(P.noop)}yield this.paymentIntegrationService.submitOrder(e,t)})}finalize(e){return mh(this,void 0,void 0,function*(){return this.paymentIntegrationService.getState().getOrder()&&this.isAcknowledgedOrFinalized()?(yield this.paymentIntegrationService.finalizeOrder(e),Promise.resolve()):Promise.reject(new ds)})}isAcknowledgedOrFinalized(){const e=this.paymentIntegrationService.getState();return e.getPaymentStatus()===ph.ACKNOWLEDGE||e.getPaymentStatus()===ph.FINALIZE}isInContextEnabled(){return!(!this.paymentMethod||!this.paymentMethod.config.merchantId)}}class fh{constructor(e){this.scriptLoader=e,this.window=window}loadPaypalSDK(e=\"\"){return t=this,n=void 0,r=function*(){const t=Object.assign({async:!0,attributes:{\"data-merchant-id\":e}},e&&{attributes:{\"data-merchant-id\":e}});if(yield this.scriptLoader.loadScript(\"//www.paypalobjects.com/api/checkout.min.js\",t),!this.window.paypal)throw new Qt;return this.window.paypal},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())});var t,n,i,r}}const gh=Xt(e=>new yh(e,new fh((0,d.vQ)())),[{id:\"paypalexpress\",type:\"PAYMENT_TYPE_HOSTED\"},{id:\"paypalexpresscredit\",type:\"PAYMENT_TYPE_HOSTED\"}]);var vh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class _h extends Vd{constructor(e,t){super(e),this.paymentIntegrationService=e,this.threeDSecureFlow=t}initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return vh(this,void 0,void 0,function*(){yield t.initialize.call(this,e);const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);n.config.is3dsEnabled&&(yield this.threeDSecureFlow.prepare(n))})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return vh(this,void 0,void 0,function*(){const{payment:{methodId:i=\"\"}={}}=e,r=this.paymentIntegrationService.getState();return r.getPaymentStatus()===Yc.ACKNOWLEDGE?(yield this.paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:{methodId:i}}),t),Promise.resolve()):r.getPaymentMethodOrThrow(i).config.is3dsEnabled?this.threeDSecureFlow.start(n.execute.bind(this),e,t,this._hostedForm):n.execute.call(this,e,t)})}}const bh=Xt(e=>new _h(e,new yu(e,new Iu(new Pu((0,d.vQ)())))),[{id:\"paypal\"}]);class Sh extends Vd{constructor(e,t){super(e),this.paymentIntegrationService=e,this._formPoster=t}execute(e,t){const{payment:n}=e;if(!n)throw new Lt(zt.PaymentNotInitialized);const{paymentData:i}=n;if(!i)throw new Ft(Rt.MissingPayment);if(this._isThreeDSTwoExperimentOn()){const t=Object.assign(Object.assign({},i),{browser_info:$o()});e.payment&&(e.payment.paymentData=t)}return super.execute(e,t).catch(e=>Zr(e)&&(0,P.some)(e.body.errors,{code:\"three_d_secure_required\"})?new Promise(()=>{let t;t=this._isThreeDSTwoExperimentOn()&&!e.body.three_ds_result.merchant_data?{creq:e.body.three_ds_result.payer_auth_request}:{PaReq:e.body.three_ds_result.payer_auth_request,TermUrl:e.body.three_ds_result.callback_url,MD:e.body.three_ds_result.merchant_data},this._formPoster.postForm(e.body.three_ds_result.acs_url,t,void 0,\"_top\")}):Promise.reject(e))}finalize(e){const t=this.paymentIntegrationService.getState();return t.getOrder()&&t.getPaymentStatus()===Yc.FINALIZE&&this.paymentIntegrationService.finalizeOrder(e),super.finalize()}_isThreeDSTwoExperimentOn(){return!0===this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features[\"INT-4994.Opayo_3DS2\"]}}const wh=Xt(e=>new Sh(e,(0,Fn.createFormPoster)()),[{id:\"sagepay\"}]);class Ch{constructor(e,t){this._formPoster=e,this._paymentIntegrationService=t}execute(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new Yi([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:r}))}catch(e){if(!Zr(e)||\"object\"!=typeof(o=e.body)||null===o||!(\"additional_action_required\"in o)||!this._isAdditionalActionRequired(e.body))return Promise.reject(e);const{body:{additional_action_required:{data:{redirect_url:t}}}}=e;return new Promise(()=>{this.redirectUrl(t)})}var o},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new ds)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}redirectUrl(e){return this._formPoster.postForm(e,{})}_isAdditionalActionRequired(e){const{additional_action_required:t,status:n}=e;return\"additional_action_required\"===n&&t&&\"offsite_redirect\"===t.type}}class Ih extends Ch{redirectUrl(e){window.location.replace(e)}}const Ph=Xt(e=>new Ih((0,Fn.createFormPoster)(),e),[{id:\"sezzle\"}]);var Eh,Oh=n(8669);!function(e){e.CHARGE=\"CHARGE\",e.STORE=\"STORE\"}(Eh||(Eh={}));var Ah=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Th{constructor(e,t){this._scriptLoader=e,this._paymentIntegrationService=t}initialize({testMode:e,applicationId:t,locationId:n}){return Ah(this,void 0,void 0,function*(){const i=yield this._scriptLoader.load(e);this._payments=i.payments(t,n)})}deinitialize(){return Ah(this,void 0,void 0,function*(){this._formValidationSubscription&&this._formValidationSubscription.unsubscribe(),this._card&&(yield this._card.destroy()),this._formValidationSubscription=void 0,this._card=void 0,this._payments=void 0})}initializeCard({containerId:e,style:t,onValidationChange:n}){return Ah(this,void 0,void 0,function*(){const{postalCode:i}=this._paymentIntegrationService.getState().getBillingAddress()||{};this._card=yield this._getPayments().card(),yield this._card.attach(`#${e}`);try{yield this._card.configure({postalCode:i,style:t})}catch(e){}n&&(this._formValidationSubscription=this._subscribeToFormValidation(this._card,n))})}tokenize(){return Ah(this,void 0,void 0,function*(){const e=yield this._getCard().tokenize();if(\"OK\"!==e.status||!e.token){let t=`Tokenization failed with status: ${e.status}`;throw\"errors\"in e&&e.errors&&(t+=` and errors: ${JSON.stringify(e.errors)}`),new sl(\"payment.errors.card_error\",\"SquareV2TokenizationError\",t)}return e.token})}verifyBuyer(e,t){return Ah(this,void 0,void 0,function*(){return t===Eh.CHARGE?this._chargeVerifyBuyer(e):this._storeVerifyBuyer(e)})}_getPayments(){return jt(this._payments,()=>new Lt(zt.PaymentNotInitialized))}_subscribeToFormValidation(e,t){const n=[\"cardNumber\",\"cvv\"],i=new Set(n),r=[\"focusClassAdded\",\"focusClassRemoved\",\"errorClassAdded\",\"errorClassRemoved\",\"cardBrandChanged\",\"postalCodeChanged\"].map(t=>(0,it.R)(e,t));return(0,E.h)(...r).pipe((0,ot.T)(e=>{const{detail:{field:t,currentState:{isCompletelyValid:r}}}=e;return n.includes(t)&&i[r?\"delete\":\"add\"](t),0===i.size}),(0,Oh.F)()).subscribe(t)}_getCard(){return jt(this._card,()=>new Lt(zt.PaymentNotInitialized))}_mapToSquareBillingContact({firstName:e,lastName:t,address1:n,address2:i,city:r,stateOrProvinceCode:o,postalCode:a,countryCode:s,email:c,phone:d}){return{givenName:e,familyName:t,addressLines:[n,i],city:r,state:o,postalCode:a,countryCode:s,email:c,phone:d}}_chargeVerifyBuyer(e){return Ah(this,void 0,void 0,function*(){const{getCheckoutOrThrow:t,getBillingAddressOrThrow:n}=this._paymentIntegrationService.getState(),{outstandingBalance:i,cart:r}=t(),o={amount:i.toString(),billingContact:this._mapToSquareBillingContact(n()),currencyCode:r.currency.code,intent:Eh.CHARGE},a=yield this._getPayments().verifyBuyer(e,o);return a?a.token:\"\"})}_storeVerifyBuyer(e){return Ah(this,void 0,void 0,function*(){const{getBillingAddressOrThrow:t}=this._paymentIntegrationService.getState(),n={billingContact:this._mapToSquareBillingContact(t()),intent:Eh.STORE},i=yield this._getPayments().verifyBuyer(e,n);return i?i.token:\"\"})}}var kh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class xh{constructor(e,t){this._paymentIntegrationService=e,this._squareV2PaymentProcessor=t}initialize(e){var t;return kh(this,void 0,void 0,function*(){if(!(null===(t=null==e?void 0:e.squarev2)||void 0===t?void 0:t.containerId))throw new en('Unable to proceed because \"containerId\" argument is not provided.');const{methodId:n,squarev2:i}=e,{config:{testMode:r},initializationData:o}=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(n),{applicationId:a,locationId:s}=o||{};if(!a)throw new Bi;yield this._squareV2PaymentProcessor.initialize({applicationId:a,locationId:s,testMode:r}),yield this._squareV2PaymentProcessor.initializeCard(i)})}execute({payment:e}){return kh(this,void 0,void 0,function*(){if(!e)throw new Yi([\"payment\"]);const{methodId:t,paymentData:n}=e,{shouldSaveInstrument:i,shouldSetAsDefaultInstrument:r}=Es(n)?n:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1};yield this._paymentIntegrationService.submitOrder();const o=n&&Ss(n)?yield this._getVaultedInstrumentPayload(t,n):yield this._getCardPayload(t,i);yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:{formattedPayload:Object.assign(Object.assign({},o),{vault_payment_instrument:i||!1,set_as_default_stored_instrument:r||!1})}}))})}finalize(){return Promise.reject(new ds)}deinitialize(){return this._squareV2PaymentProcessor.deinitialize()}shouldVerify(){const{features:e}=this._paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings;return e[\"PROJECT-3828.add_3ds_support_on_squarev2\"]}_getCardPayload(e,t){return kh(this,void 0,void 0,function*(){const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),{initializationData:i}=n(e),r=yield this._squareV2PaymentProcessor.tokenize();if(i&&\"isSquareV2ApiV2Enabled\"in i?!i.isSquareV2ApiV2Enabled:!this.shouldVerify())return{credit_card_token:{token:r}};let o={nonce:r,token:yield this._squareV2PaymentProcessor.verifyBuyer(r,Eh.CHARGE)};if(t){const e=yield this._squareV2PaymentProcessor.tokenize();o=Object.assign(Object.assign({},o),{store_card_nonce:e,store_card_token:yield this._squareV2PaymentProcessor.verifyBuyer(e,Eh.STORE)})}return{credit_card_token:{token:JSON.stringify(o)}}})}_getVaultedInstrumentPayload(e,t){return kh(this,void 0,void 0,function*(){const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),{initializationData:i}=n(e),{instrumentId:r}=t,o=(i&&\"isSquareV2ApiV2Enabled\"in i?i.isSquareV2ApiV2Enabled:this.shouldVerify())?yield this._squareV2PaymentProcessor.verifyBuyer(yield this._getSquareCardIdOrThrow(e,r),Eh.CHARGE):void 0;return{bigpay_token:Object.assign({token:r},o&&{three_d_secure:{token:o}})}})}_getSquareCardIdOrThrow(e,t){return kh(this,void 0,void 0,function*(){const n=yield this._paymentIntegrationService.loadPaymentMethod(e,{params:{method:e,bigpayToken:t}}),{initializationData:i}=n.getPaymentMethodOrThrow(e),{cardId:r}=i||{};if(!r)throw new Yi([\"cardId\"]);return r})}}var Mh;!function(e){e.LIVE=\"https://web.squarecdn.com/v1/square.js\",e.SANDBOX=\"https://sandbox.web.squarecdn.com/v1/square.js\"}(Mh||(Mh={}));class Nh{constructor(e){this._scriptLoader=e}load(e=!1){return t=this,n=void 0,r=function*(){return yield this._scriptLoader.loadScript(e?Mh.SANDBOX:Mh.LIVE),function(e){if(!function(e){return\"Square\"in e}(e))throw new Qt}(window),window.Square},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())});var t,n,i,r}}const Dh=Xt(e=>new xh(e,new Th(new Nh((0,d.vQ)()),e)),[{id:\"squarev2\"}]);function Rh(e){return null!==e&&\"object\"==typeof e&&\"cardNumberElementOptions\"in e&&\"cardCvcElementOptions\"in e&&\"cardExpiryElementOptions\"in e&&void 0!==e.cardNumberElementOptions&&void 0!==e.cardCvcElementOptions&&void 0!==e.cardExpiryElementOptions}var zh,Fh,Bh,jh;!function(e){e.Solid=\"solid\",e.Default=\"default\"}(zh||(zh={})),function(e){e.Alipay=\"alipay\",e.CardCvc=\"cardCvc\",e.CardExpiry=\"cardExpiry\",e.CardNumber=\"cardNumber\",e.CreditCard=\"card\",e.IDEAL=\"idealBank\",e.Sepa=\"iban\"}(Fh||(Fh={})),function(e){e.Alipay=\"alipay\",e.CreditCard=\"card\",e.IDEAL=\"ideal\",e.Sepa=\"sepa_debit\"}(Bh||(Bh={})),function(e){e.AuthFailure=\"auth_failure\"}(jh||(jh={}));class Lh extends Dt{constructor(e){super(e===jh.AuthFailure?\"User did not authenticate\":\"There was an error while processing your payment. Please try again or contact us.\"),this.type=\"stripev3_error\",this.subtype=e}}var Uh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};const Vh=[Fh.Alipay,Fh.IDEAL];class qh{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t}initialize(e){return Uh(this,void 0,void 0,function*(){const{stripev3:t,methodId:n,gatewayId:i}=e;if(!i)throw new en('Unable to initialize payment because \"gatewayId\" argument is not provided.');this.initializeOptions=t,this.isDeinitialize=!1;const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n),{initializationData:{stripePublishableKey:o,stripeConnectedAccount:a,useIndividualCardFields:s,allowRedisplayForStoredInstruments:c}}=r;this._allowRedisplayForStoredInstruments=c;const d=this.getInitializeOptions().form;this.useIndividualCardFields=s,this.stripeV3Client=yield this.loadStripeJs(o,a),this.isCreditCard(n)&&this.shouldShowTSVHostedForm(n,i)&&d?this.hostedForm=yield this.mountCardVerificationFields(d):this.stripeElement=yield this.mountCardFields(n)})}execute(e,t){var n,i;return Uh(this,void 0,void 0,function*(){const{payment:r}=e,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);let a,s;if(!r||!r.paymentData)throw new Yi([\"payment.paymentData\"]);const{paymentData:c,gatewayId:d,methodId:u}=r,{shouldSaveInstrument:l,shouldSetAsDefaultInstrument:h}=Es(c)?c:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1},p=(0,P.includes)(Vh,u),{isStoreCreditApplied:m}=this.paymentIntegrationService.getState().getCheckoutOrThrow();m&&(yield this.paymentIntegrationService.applyStoreCredit(m));try{p&&(yield this.paymentIntegrationService.submitOrder(o,t)),d&&(yield this.paymentIntegrationService.loadPaymentMethod(d,{params:{method:u}}));const e=this.paymentIntegrationService.getState();if(Ss(c)){yield this.paymentIntegrationService.submitOrder(o,t);const{instrumentId:n}=c,i=e.getPaymentMethodOrThrow(r.methodId).clientToken;if(!i)throw new Ft(Rt.MissingPaymentMethod);return yield this.executeWithVaulted(r,n,h,i)}const m=e.getPaymentMethodOrThrow(u),y=yield this.confirmStripePayment(m),{clientToken:f,method:g}=m,{id:v}=null!==(i=null!==(n=y.paymentIntent)&&void 0!==n?n:y.paymentMethod)&&void 0!==i?i:{id:\"\"};s=y.error,a={credit_card_token:{token:v},vault_payment_instrument:l,confirm:!1,set_as_default_stored_instrument:h},g===Fh.CreditCard&&(a.client_token=f),p||(yield this.paymentIntegrationService.submitOrder(o,t));const _=this.buildPaymentPayload(u,a,h);yield this.paymentIntegrationService.submitPayment(_)}catch(e){yield this.processAdditionalAction(this.handleEmptyPaymentIntentError(e,s),u,l,h)}})}finalize(){return Promise.reject(new ds)}deinitialize(){return this.hostedForm&&this.hostedForm.detach(),this.isDeinitialize=!0,this.unmountElement(),Promise.resolve()}buildPaymentPayload(e,t,n){return{methodId:e,paymentData:n?{formattedPayload:Object.assign(Object.assign({},t),{set_as_default_stored_instrument:n})}:{formattedPayload:t}}}isCancellationError(e){var t,n;return e&&-1!==(null===(n=null===(t=e.payment_intent.last_payment_error)||void 0===t?void 0:t.message)||void 0===n?void 0:n.indexOf(\"canceled\"))}isAuthError(e){return\"payment_intent_authentication_failure\"===(null==e?void 0:e.code)}isCreditCard(e){return e===Bh.CreditCard}isHostedFieldAvailable(){var e;const t=this.getInitializeOptions(),n=(0,P.omitBy)(null===(e=t.form)||void 0===e?void 0:e.fields,P.isEmpty);return!(0,P.isEmpty)(n)}isHostedPaymentFormEnabled(e,t){const{getPaymentMethodOrThrow:n}=this.paymentIntegrationService.getState(),i=n(e,t);return Boolean(i.config.isHostedFormEnabled)}confirmStripePayment(e){return Uh(this,void 0,void 0,function*(){const{clientToken:t,method:n,returnUrl:i}=e;if(!t)throw new Ft(Rt.MissingPaymentMethod);switch(n){case Fh.Alipay:return this.getStripeJs().confirmAlipayPayment(t,{return_url:i},{handleActions:!1});case Fh.IDEAL:{const e=this.mapStripePaymentData(Bh.IDEAL,i);return this.getStripeJs().confirmIdealPayment(t,e,{handleActions:!1})}case Fh.Sepa:{const e=this.mapStripePaymentData(Bh.Sepa);return this.getStripeJs().confirmSepaDebitPayment(t,e)}default:{const e=this.useIndividualCardFields?this.getStripeCardElements()[0]:this.getStripeElement(),t=this.mapStripeBillingDetails(this.paymentIntegrationService.getState().getBillingAddress(),this.paymentIntegrationService.getState().getCustomer()),n=this._allowRedisplayForStoredInstruments;return this.getStripeJs().createPaymentMethod(Object.assign({type:Bh.CreditCard,card:e,billing_details:t},n?{allow_redisplay:\"always\"}:{}))}}})}executeWithVaulted(e,t,n,i){var r;return Uh(this,void 0,void 0,function*(){const o={bigpay_token:{token:t},confirm:!0,client_token:i,set_as_default_stored_instrument:n};if(this.isHostedPaymentFormEnabled(e.methodId,e.gatewayId)&&this.hostedForm){const t=this.hostedForm;return e.paymentData&&Ss(e.paymentData)&&(e.paymentData=Object.assign(Object.assign({},e.paymentData),{instrumentId:JSON.stringify({token:(null===(r=e.paymentData)||void 0===r?void 0:r.instrumentId)||\"\",client_token:i})})),yield t.validate(),yield t.submit(e),this.paymentIntegrationService.loadCurrentOrder()}const a=this.buildPaymentPayload(e.methodId,o,n);return this.paymentIntegrationService.submitPayment(a)})}getInitializeOptions(){if(!this.initializeOptions)throw new Lt(zt.PaymentNotInitialized);return this.initializeOptions}getStripeCardElements(){if(!this.stripeCardElements)throw new Lt(zt.PaymentNotInitialized);return this.stripeCardElements}getStripeElement(){if(!this.stripeElement)throw new Lt(zt.PaymentNotInitialized);return this.stripeElement}getStripeJs(){if(!this.stripeV3Client)throw new Lt(zt.PaymentNotInitialized);return this.stripeV3Client}handleEmptyPaymentIntentError(e,t){return Zr(e)&&(0,P.some)(e.body.errors,{code:\"required_field\"})&&t?new Error(t.message):e}loadStripeJs(e,t){return Uh(this,void 0,void 0,function*(){return this.stripeV3Client?Promise.resolve(this.stripeV3Client):this.scriptLoader.load(e,t,this.paymentIntegrationService.getState().getLocale())})}mapStripeAddress(e){if(e){const{city:t,countryCode:n,address1:i,address2:r,postalCode:o,stateOrProvinceCode:a}=e;return{city:t,country:n,line1:i,line2:r,postal_code:o,state:a}}return{line1:\"\"}}mapStripeBillingDetails(e,t){const{firstName:n,lastName:i}=e||t||{firstName:\"Guest\",lastName:\"\"},r=`${n} ${i}`.trim(),{options:o}=this.getInitializeOptions();if(this.useIndividualCardFields&&Rh(o)){const{zipCodeElementOptions:t}=o;if(t){const n=document.getElementById(t.containerId)?document.getElementById(t.containerId).value:\"\";n&&e&&(e=Object.assign(Object.assign({},e),{postalCode:n}))}}const a={address:this.mapStripeAddress(e)};if(t&&t.addresses[0]&&function(e){return\"object\"==typeof e&&null!==e&&\"id\"in e&&void 0!==e.id}(t.addresses[0])){const e=t.addresses[0],{email:n}=t,{phone:i}=e;return i?Object.assign(Object.assign({},a),{email:n,name:r,phone:i}):Object.assign(Object.assign({},a),{email:n,name:r})}if(e){const{email:t,phone:n}=e;return n?Object.assign(Object.assign({},a),{email:t,name:r,phone:n}):Object.assign(Object.assign({},a),{email:t,name:r})}return Object.assign(Object.assign({},a),{name:r})}mapStripePaymentData(e,t){const n=this.paymentIntegrationService.getState().getCustomer(),i=this.paymentIntegrationService.getState().getBillingAddress(),r={payment_method:{[e]:this.getStripeElement(),billing_details:this.mapStripeBillingDetails(i,n)}};return e===Bh.IDEAL?Object.assign(Object.assign({},r),{return_url:t}):r}mountCardFields(e){const{options:t,containerId:n}=this.getInitializeOptions();let i;return new Promise((r,o)=>{switch(this.stripeElements||(this.stripeElements=this.getStripeJs().elements()),e){case Fh.CreditCard:if(this.useIndividualCardFields&&Rh(t)){const{cardNumberElementOptions:e,cardExpiryElementOptions:n,cardCvcElementOptions:r}=t,a=this.stripeElements.getElement(Fh.CardNumber)||this.stripeElements.create(Fh.CardNumber,e),s=this.stripeElements.getElement(Fh.CardExpiry)||this.stripeElements.create(Fh.CardExpiry,n),c=this.stripeElements.getElement(Fh.CardCvc)||this.stripeElements.create(Fh.CardCvc,r);this.stripeCardElements=[a,s,c],i=this.stripeCardElements[0];try{a.mount(`#${e.containerId}`),s.mount(`#${n.containerId}`),c.mount(`#${r.containerId}`)}catch(e){this.isDeinitialize||o(new en(\"Unable to mount Stripe component without valid container ID.\"))}}else{i=this.stripeElements.getElement(e)||this.stripeElements.create(e,t);try{i.mount(`#${n}`)}catch(e){this.isDeinitialize||o(new en(\"Unable to mount Stripe component without valid container ID.\"))}}break;case Fh.IDEAL:case Fh.Sepa:i=this.stripeElements.getElement(e)||this.stripeElements.create(e,t);try{i.mount(`#${n}`)}catch(e){this.isDeinitialize||o(new en(\"Unable to mount Stripe component without valid container ID.\"))}case Fh.Alipay:}r(i)})}mountCardVerificationFields(e){return Uh(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getStoreConfig();if(!t)throw new Ft(Rt.MissingCheckoutConfig);const n=t.paymentSettings.bigpayBaseUrl,i=this.paymentIntegrationService.createHostedForm(n,e);return yield i.attach(),i})}processAdditionalAction(e,t,n=!1,i=!1){return Uh(this,void 0,void 0,function*(){if(!Zr(e))throw e;const r=(0,P.some)(e.body.errors,{code:\"additional_action_required\"}),o=(0,P.some)(e.body.errors,{code:\"three_d_secure_required\"});if(r){const t=e.body.additional_action_required;if(t&&\"redirect_to_url\"===t.type)return new Promise(()=>{t.data.redirect_url&&window.location.replace(t.data.redirect_url)})}if(o){const r=e.body.three_ds_result.token,o=!1;let a,s=!1;try{a=yield this.getStripeJs().confirmCardPayment(r)}catch(e){s=!0}if(null==a?void 0:a.error){if(this.isCancellationError(a.error))throw new Tn;if(this.isAuthError(a.error))throw new Lh(jh.AuthFailure);throw new Error(a.error.message)}const c={credit_card_token:{token:this.getPaymentToken(null==a?void 0:a.paymentIntent,r,s)},vault_payment_instrument:n,confirm:o},d=this.buildPaymentPayload(t,c,i);try{return yield this.paymentIntegrationService.submitPayment(d)}catch(e){throw this.handleEmptyPaymentIntentError(e,null==a?void 0:a.error)}}throw e})}getPaymentToken(e,t,n){return!e||n?t:e.id}shouldShowTSVHostedForm(e,t){return this.isHostedFieldAvailable()&&this.isHostedPaymentFormEnabled(e,t)}unmountElement(){this.stripeElement&&(this.stripeElement.unmount(),this.stripeElement=void 0)}}class Hh{constructor(e,t=window){this.scriptLoader=e,this.stripeWindow=t}load(e,t,n){return this.scriptLoader.loadScript(\"https://js.stripe.com/v3/\").then(()=>{if(!this.stripeWindow.Stripe)throw new Qt;return this.stripeWindow.Stripe(e,{stripeAccount:t,locale:n,betas:[\"payment_intent_beta_3\",\"alipay_pm_beta_1\"],apiVersion:\"2020-03-02;alipay_beta=v1\"})})}}const Gh=Xt(e=>new qh(e,new Hh((0,d.vQ)())),[{gateway:\"stripev3\"}]),Wh={ar:[\"ar\"],bg:[\"bg\"],cs:[\"cs\"],da:[\"da\"],de:[\"de\"],el:[\"el\"],en:[\"en\",\"en-GB\"],es:[\"es\",\"es-419\"],et:[\"et\"],fi:[\"fi\"],fil:[\"fil\"],fr:[\"fr\",\"fr-CA\"],he:[\"he\"],hr:[\"hr\"],hu:[\"hu\"],id:[\"id\"],it:[\"it\"],ja:[\"ja\"],ko:[\"ko\"],lt:[\"lt\"],lv:[\"lv\"],ms:[\"ms\"],mt:[\"mt\"],nb:[\"nb\"],nl:[\"nl\"],pl:[\"pl\"],pt:[\"pt\",\"pt-BR\"],ro:[\"ro\"],ru:[\"ru\"],sk:[\"sk\"],sl:[\"sl\"],sv:[\"sv\"],th:[\"th\"],tr:[\"tr\"],vi:[\"vi\"],zh:[\"zh\",\"zh-HK\",\"zh-TW\"]};function $h(e){const[t,n]=e.replace(/_/g,\"-\").toLowerCase().split(\"-\"),i=Wh[t];if(!i)return\"auto\";const r=n?`${t}-${n.toUpperCase()}`:t;return i.indexOf(r)>-1?r:i[0]}var Yh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Kh{constructor(e,t,n){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=n}initialize(e){return Yh(this,void 0,void 0,function*(){const{stripeupe:t,methodId:n,gatewayId:i}=e;if(!(null==t?void 0:t.containerId))throw new Lt(zt.PaymentNotInitialized);if(!i)throw new en('Unable to initialize payment because \"gatewayId\" argument is not provided.');return this._loadStripeElement(t,i,n).catch(e=>{var n;return null===(n=t.onError)||void 0===n?void 0:n.call(t,e)}),this.stripeIntegrationService.initCheckoutEventsSubscription(i,n,t,this._stripeElements),Promise.resolve()})}execute(e,t){return Yh(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n||!n.paymentData)throw new Yi([\"payment.paymentData\"]);if(!this._stripeUPEClient)throw new Lt(zt.PaymentNotInitialized);const{paymentData:r,methodId:o,gatewayId:a}=n,{shouldSaveInstrument:s=!1,shouldSetAsDefaultInstrument:c=!1}=Es(r)?r:{},d=this.paymentIntegrationService.getState(),{isStoreCreditApplied:u}=d.getCheckoutOrThrow(),l=d.getPaymentProviderCustomerOrThrow(),h=(Ka(l)?l:{}).stripeLinkAuthenticationState;if(u&&(yield this.paymentIntegrationService.applyStoreCredit(u)),a){yield this.stripeIntegrationService.updateStripePaymentIntent(a,o);const{email:e}=d.getCustomerOrThrow();if(void 0!==h&&!e){const e=d.getBillingAddressOrThrow();yield this.paymentIntegrationService.updateBillingAddress(e)}}if(yield this.paymentIntegrationService.submitOrder(i,t),Ss(r)){const{instrumentId:e}=r;return void(yield this._executeWithVaulted(n.methodId,e,c))}yield this._executeWithStripeConfirmation(n.methodId,n.gatewayId,!h&&s,c)})}finalize(){return Promise.reject(new ds)}deinitialize(){var e,t;return null===(t=null===(e=this._stripeElements)||void 0===e?void 0:e.getElement(go.PAYMENT))||void 0===t||t.unmount(),this.stripeIntegrationService.deinitialize(),this._stripeElements=void 0,this._stripeUPEClient=void 0,Promise.resolve()}_executeWithStripeConfirmation(e,t,n,i){return Yh(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),{clientToken:o}=r.getPaymentMethodOrThrow(e),a=this._getPaymentPayload(e,o||\"\",n,i);try{yield this.paymentIntegrationService.submitPayment(a)}catch(r){yield this._processAdditionalActionWithStripeConfirmation(r,e,t,n,i)}})}_executeWithVaulted(e,t,n){var i;return Yh(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(e),a=null===(i=r.getCart())||void 0===i?void 0:i.id;try{const i={methodId:e,paymentData:{formattedPayload:{cart_id:a,bigpay_token:{token:t},confirm:!1,client_token:o.clientToken,set_as_default_stored_instrument:n}}};return yield this.paymentIntegrationService.submitPayment(i)}catch(t){return this._processVaultedAdditionalAction(t,e,n)}})}_loadStripeElement(e,t,n){return Yh(this,void 0,void 0,function*(){const{containerId:i,style:r,render:o,initStripeElementUpdateTrigger:a}=e,s=yield this.paymentIntegrationService.loadPaymentMethod(t,{params:{method:n}}),c=s.getPaymentMethodOrThrow(n);if(!Ya(c))throw new Ft(Rt.MissingPaymentMethod);const{clientToken:d,initializationData:u}=c,{shopperLanguage:l,allowRedisplayForStoredInstruments:h=!1,enableLink:p}=u;if(this._allowRedisplayForStoredInstruments=h,!d)throw new Ft(Rt.MissingPaymentMethod);let m;if(this._stripeUPEClient=yield this._loadStripeJs(u),this._isStripeElementUpdateEnabled=\"function\"==typeof a,r){const e=r;m={variables:this.stripeIntegrationService.mapAppearanceVariables(r),rules:{\".Input\":this.stripeIntegrationService.mapInputAppearanceRules(e)}}}this._stripeElements=yield this.scriptLoader.getElements(this._stripeUPEClient,{clientSecret:d,locale:$h(l),appearance:m});const{getBillingAddress:y,getShippingAddress:f}=s,{postalCode:g}=f()||y()||{},v=this._stripeElements.getElement(go.PAYMENT)||this._stripeElements.create(go.PAYMENT,Object.assign({fields:{billingDetails:{email:yo.NEVER,address:{country:yo.NEVER,city:yo.NEVER,postalCode:g?yo.NEVER:yo.AUTO}}},wallets:{applePay:yo.NEVER,googlePay:yo.NEVER,link:p?yo.AUTO:yo.NEVER}},this._getStripeElementTerms()));this.stripeIntegrationService.mountElement(v,i),v.on(_o.READY,()=>{o()}),v.on(_o.CHANGE,e=>{(null==e?void 0:e.value)&&\"type\"in e.value&&this._updateStripeLinkStateByElementType(e.value.type)}),this._isStripeElementUpdateEnabled&&(null==a||a(this._updateStripeElement.bind(this)))})}_processAdditionalActionWithStripeConfirmation(e,t,n,i=!1,r=!1){return Yh(this,void 0,void 0,function*(){if(!Zr(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this._stripeUPEClient||!this._stripeElements)throw new Lt(zt.PaymentNotInitialized);const{data:o}=e.body.additional_action_required,{token:a}=o,{paymentIntent:s,error:c}=yield this._confirmStripePaymentOrThrow(t,o),d=this._getPaymentPayload(t,(null==s?void 0:s.id)||a,i,r);if(c||!s){const{initializationData:e}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n),{sendSecondPaymentRequestOnStripeError:i}=e||{};if(i)try{const e=(0,P.merge)({},d,{paymentData:{formattedPayload:{client_side_error:!0}}});yield this.paymentIntegrationService.submitPayment(e)}catch(e){}this.stripeIntegrationService.throwStripeError(c)}try{yield this.paymentIntegrationService.submitPayment(d)}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}})}_confirmStripePaymentOrThrow(e,t){return Yh(this,void 0,void 0,function*(){if(!this._stripeUPEClient)throw new Lt(zt.PaymentNotInitialized);const{token:n,redirect_url:i}=t,r=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,i,!!this._allowRedisplayForStoredInstruments);return(yield this.stripeIntegrationService.isPaymentCompleted(e,this._stripeUPEClient))?this._stripeUPEClient.retrievePaymentIntent(n||\"\"):this._stripeUPEClient.confirmPayment(r)})}_processVaultedAdditionalAction(e,t,n=!1){var i;return Yh(this,void 0,void 0,function*(){if(!t||!Zr(e)||!(0,P.some)(e.body.errors,{code:\"three_d_secure_required\"}))throw e;if(!this._stripeUPEClient||!this._stripeElements)throw new Lt(zt.PaymentNotInitialized);const r=e.body.three_ds_result.token;let o,a=!1;try{o=yield this._stripeUPEClient.confirmCardPayment(r)}catch(e){try{o=yield this._stripeUPEClient.retrievePaymentIntent(r)}catch(e){a=!0}}if((null==o?void 0:o.error)&&this.stripeIntegrationService.throwStripeError(o.error),!(null==o?void 0:o.paymentIntent)&&!a)throw new Ln;const s=this._getPaymentPayload(t,a?r:null===(i=null==o?void 0:o.paymentIntent)||void 0===i?void 0:i.id,!1,n);return this.paymentIntegrationService.submitPayment(s)})}_loadStripeJs(e){return Yh(this,void 0,void 0,function*(){if(this._stripeUPEClient)return this._stripeUPEClient;const t=this.paymentIntegrationService.getState();return this.scriptLoader.getStripeClient(e,t.getCartLocale(),fo.V3,Co,Io)})}_getPaymentPayload(e,t,n=!1,i=!1){var r;return{methodId:e,paymentData:{formattedPayload:{cart_id:(null===(r=this.paymentIntegrationService.getState().getCart())||void 0===r?void 0:r.id)||\"\",credit_card_token:{token:t},confirm:!1,vault_payment_instrument:n,set_as_default_stored_instrument:i}}}}_updateStripeElement({shouldShowTerms:e}){var t;const n=null===(t=this._stripeElements)||void 0===t?void 0:t.getElement(go.PAYMENT);null==n||n.update(Object.assign({},this._getStripeElementTerms(e)))}_getStripeElementTerms(e){let t=yo.AUTO;return this._isStripeElementUpdateEnabled&&(t=e?yo.AUTO:yo.NEVER),{terms:{card:t}}}_updateStripeLinkStateByElementType(e){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomerOrThrow(),n=e===mo.Link;!Ka(t)&&n&&this.paymentIntegrationService.updatePaymentProviderCustomer({stripeLinkAuthenticationState:n})}}const Qh=Xt(e=>{const t=new wo((0,d.vQ)());return new Kh(e,t,new Xa(e,t))},[{gateway:\"stripeupe\"},{gateway:\"stripeupe\",id:\"klarna\"}]),Jh=e=>\"object\"==typeof e&&null!==e&&\"value\"in e&&\"collapsed\"in e;var Zh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Xh{constructor(e,t,n){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=n}initialize(e){var t;return Zh(this,void 0,void 0,function*(){const{stripeocs:n,methodId:i,gatewayId:r}=e;if(!(null==n?void 0:n.containerId))throw new Lt(zt.PaymentNotInitialized);if(!r)throw new en('Unable to initialize payment because \"gatewayId\" argument is not provided.');try{yield this._initializeStripeElement(n,r,i)}catch(e){e instanceof Error&&(null===(t=n.onError)||void 0===t||t.call(n,e))}this.stripeIntegrationService.initCheckoutEventsSubscription(r,i,n,this.stripeElements)})}execute(e,t){return Zh(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{methodId:r,gatewayId:o}=n||{};if(!this.stripeClient)throw new Lt(zt.PaymentNotInitialized);if(!o||!r)throw new en('Unable to initialize payment because \"gatewayId\" or \"methodId\" argument is not provided.');const{isStoreCreditApplied:a}=this.paymentIntegrationService.getState().getCheckoutOrThrow();a&&(yield this.paymentIntegrationService.applyStoreCredit(a)),yield this.stripeIntegrationService.updateStripePaymentIntent(o,r),yield this.paymentIntegrationService.submitOrder(i,t);const{clientToken:s}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r,o),c=this._getPaymentPayload(r,s||\"\");try{yield this.paymentIntegrationService.submitPayment(c)}catch(e){yield this._processAdditionalAction(e,r,o)}})}finalize(){return Promise.reject(new ds)}deinitialize(){var e;const t=null===(e=this.stripeElements)||void 0===e?void 0:e.getElement(go.PAYMENT);return null==t||t.unmount(),null==t||t.destroy(),this.stripeIntegrationService.deinitialize(),this.stripeElements=void 0,this.stripeClient=void 0,Promise.resolve()}_initializeStripeElement(e,t,n){return Zh(this,void 0,void 0,function*(){let i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,t);if((null==i?void 0:i.clientToken)||(i=(yield this.paymentIntegrationService.loadPaymentMethod(t,{params:{method:n}})).getPaymentMethodOrThrow(n,t)),!Ya(i))throw new Ft(Rt.MissingPaymentMethod);const{clientToken:r,initializationData:o}=i,{customerSessionToken:a,enableLink:s}=o;if(!r)throw new Ft(Rt.MissingPaymentMethod);this.stripeClient=yield this._loadStripeJs(o);const{appearance:c,containerId:d,fonts:u,layout:l,render:h,paymentMethodSelect:p,handleClosePaymentMethod:m,togglePreloader:y}=e;this.stripeElements=yield this.scriptLoader.getElements(this.stripeClient,{clientSecret:r,customerSessionClientSecret:a,appearance:c,fonts:u});const{getBillingAddress:f,getShippingAddress:g}=this.paymentIntegrationService.getState(),v=f(),{postalCode:_}=g()||v||{},b=this.stripeElements.getElement(go.PAYMENT)||this.stripeElements.create(go.PAYMENT,{fields:{billingDetails:{email:yo.NEVER,address:{country:yo.NEVER,city:yo.NEVER,postalCode:_?yo.NEVER:yo.AUTO}}},wallets:{applePay:yo.NEVER,googlePay:yo.NEVER,link:s?yo.AUTO:yo.NEVER},layout:l,savePaymentMethod:{maxVisiblePaymentMethods:20},defaultValues:{billingDetails:{email:(null==v?void 0:v.email)||\"\"}}});this.stripeIntegrationService.mountElement(b,d),b.on(_o.LOADER_START,()=>{null==y||y(!1)}),b.on(_o.READY,()=>{h()}),b.on(_o.CHANGE,e=>{this._onStripeElementChange(e,t,n,p)}),null==m||m(this._collapseStripeElement.bind(this))})}_loadStripeJs(e){return Zh(this,void 0,void 0,function*(){if(this.stripeClient)return this.stripeClient;const t=this.paymentIntegrationService.getState(),n=this.stripeIntegrationService.getStripeJsVersion(e);return this.scriptLoader.getStripeClient(e,t.getCartLocale(),n)})}_collapseStripeElement(){var e;const t=null===(e=this.stripeElements)||void 0===e?void 0:e.getElement(go.PAYMENT);null==t||t.collapse()}_getPaymentPayload(e,t,n){var i;const r=(null===(i=this.paymentIntegrationService.getState().getCart())||void 0===i?void 0:i.id)||\"\",{card:o,us_bank_account:a}=n||{},s=this._shouldSaveInstrument(o)||this._shouldSaveInstrument(a),c=this._getTokenizedOptions(t,n);return{methodId:e,paymentData:{formattedPayload:Object.assign({cart_id:r,confirm:!1,method:this.selectedMethodId,vault_payment_instrument:s},c)}}}_processAdditionalAction(e,t,n){return Zh(this,void 0,void 0,function*(){if(!Zr(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this.stripeClient||!this.stripeElements)throw new Lt(zt.PaymentNotInitialized);const{data:i}=e.body.additional_action_required,{token:r}=i,{paymentIntent:o,error:a}=yield this._confirmStripePaymentOrThrow(t,i),{client_secret:s,payment_method_options:c}=o||{},d=this._getPaymentPayload(t,s||r,c);if(a||!o){const{initializationData:e}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n),{sendSecondPaymentRequestOnStripeError:i}=e||{};if(i)try{const e=(0,P.merge)({},d,{paymentData:{formattedPayload:{client_side_error:!0}}});yield this.paymentIntegrationService.submitPayment(e)}catch(e){}this.stripeIntegrationService.throwStripeError(a)}try{return yield this.paymentIntegrationService.submitPayment(d)}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}})}_confirmStripePaymentOrThrow(e,t){return Zh(this,void 0,void 0,function*(){if(!this.stripeClient)throw new Lt(zt.PaymentNotInitialized);const{token:n,redirect_url:i}=t,r=this.stripeIntegrationService.mapStripePaymentData(this.stripeElements,i);return(yield this.stripeIntegrationService.isPaymentCompleted(e,this.stripeClient))?this.stripeClient.retrievePaymentIntent(n||\"\"):this.stripeClient.confirmPayment(r)})}_onStripeElementChange(e,t,n,i){Jh(e)&&!e.collapsed&&(this.selectedMethodId=e.value.type,null==i||i(`${t}-${n}`))}_shouldSaveInstrument(e){const t=null==e?void 0:e.setup_future_usage;return t===bo.ON_SESSION||t===bo.OFF_SESSION}_getTokenizedOptions(e,t){return this._shouldSaveInstrument(null==t?void 0:t.us_bank_account)?{tokenized_ach:{token:e}}:{credit_card_token:{token:e}}}}const ep=Xt(e=>{const t=new wo((0,d.vQ)());return new Xh(e,t,new Xa(e,t))},[{gateway:\"stripeocs\",id:\"optimized_checkout\"}]);var tp=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class np{constructor(e,t,n){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=n}initialize(e){var t;return tp(this,void 0,void 0,function*(){const{stripeocs:n,methodId:i,gatewayId:r}=e;if(!(null==n?void 0:n.containerId)||!r)throw new Lt(zt.PaymentNotInitialized);let o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i,r);(null==o?void 0:o.clientToken)||(yield this.paymentIntegrationService.loadPaymentMethod(r,{params:{method:i}}),o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i,r));try{yield this._initStripeCheckoutSession(n,o),yield this._updateStripeShopperData(),this._initializePaymentElement(n,o),this._initializeAdaptivePricingElement(n,o)}catch(e){e instanceof Error&&(null===(t=n.onError)||void 0===t||t.call(n,e))}})}execute(e,t){return tp(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{methodId:r,gatewayId:o}=n||{};if(!this.stripeClient)throw new Lt(zt.PaymentNotInitialized);if(!o||!r)throw new en('Unable to initialize payment because \"gatewayId\" or \"methodId\" argument is not provided.');const a=this.paymentIntegrationService.getState(),{isStoreCreditApplied:s}=a.getCheckoutOrThrow();s&&(yield this.paymentIntegrationService.applyStoreCredit(s)),yield this._updateCheckoutSessionData(o,r),yield this.paymentIntegrationService.submitOrder(i,t);const{clientToken:c}=a.getPaymentMethodOrThrow(r,o),d=this._getPaymentPayload(r,c||\"\");try{yield this.paymentIntegrationService.submitPayment(d)}catch(e){yield this._processAdditionalAction(e,o,r)}})}finalize(){return Promise.reject(new ds)}deinitialize(){var e,t;const n=null===(e=this.stripeCheckout)||void 0===e?void 0:e.getPaymentElement(),i=null===(t=this.stripeCheckout)||void 0===t?void 0:t.getCurrencySelectorElement();return null==n||n.unmount(),null==n||n.destroy(),null==i||i.unmount(),null==i||i.destroy(),this.stripeCheckout=void 0,this.stripeClient=void 0,this.selectedMethodId=void 0,Promise.resolve()}_initStripeCheckoutSession(e,t){return tp(this,void 0,void 0,function*(){const{clientToken:n,initializationData:i}=t;if(!n||!i)throw new Ft(Rt.MissingPaymentMethod);this.stripeClient=yield this._loadStripeJs(i);const{appearance:r,fonts:o}=e;this.stripeCheckout=yield this.scriptLoader.getStripeCheckout(this.stripeClient,{clientSecret:n,elementsOptions:{appearance:r,fonts:o},adaptivePricing:{allowed:!!(null==i?void 0:i.adaptivePricingEnabled)}})})}_initializePaymentElement(e,t){const{initializationData:n,id:i,gateway:r}=t,{enableLink:o}=n||{},{containerId:a,layout:s,render:c,paymentMethodSelect:d,handleClosePaymentMethod:u,togglePreloader:l}=e,h=this._getStripeElement({fields:{billingDetails:{email:yo.NEVER,name:yo.NEVER,address:yo.NEVER}},wallets:{applePay:yo.NEVER,googlePay:yo.NEVER,link:o?yo.AUTO:yo.NEVER},layout:s});if(!h||!r)throw new Lt(zt.PaymentNotInitialized);this.stripeIntegrationService.mountElement(h,a),h.on(_o.LOADER_START,()=>{null==l||l(!1)}),h.on(_o.READY,()=>{c()}),h.on(_o.CHANGE,e=>{this._onStripeElementChange(e,r,i,d)}),null==u||u(this._collapseStripeElement.bind(this))}_loadStripeJs(e){return tp(this,void 0,void 0,function*(){if(this.stripeClient)return this.stripeClient;const t=this.paymentIntegrationService.getState();return this.scriptLoader.getStripeClient(e,t.getCartLocale(),fo.CLOVER)})}_getStripeActionsOrThrow(){return tp(this,void 0,void 0,function*(){if(!this.stripeCheckout)throw new Lt(zt.PaymentNotInitialized);const{actions:e,error:t}=yield this.stripeCheckout.loadActions();if(!e||t)throw new Fi(null==t?void 0:t.message);return e})}_getStripeElement(e){var t,n;return(null===(t=this.stripeCheckout)||void 0===t?void 0:t.getPaymentElement())||(null===(n=this.stripeCheckout)||void 0===n?void 0:n.createPaymentElement(e))}_onStripeElementChange(e,t,n,i){Jh(e)&&!e.collapsed&&(this.selectedMethodId=e.value.type,null==i||i(`${t}-${n}`))}_collapseStripeElement(){var e;const t=null===(e=this.stripeCheckout)||void 0===e?void 0:e.getPaymentElement();null==t||t.collapse()}_updateCheckoutSessionData(e,t){return tp(this,void 0,void 0,function*(){yield this._updateStripeShopperData(),yield this.paymentIntegrationService.loadPaymentMethod(e,{params:{method:t}})})}_getPaymentPayload(e,t,n){var i;const r=(null===(i=this.paymentIntegrationService.getState().getCart())||void 0===i?void 0:i.id)||\"\",o=this._getTokenizedOptions(t,n);return{methodId:e,paymentData:{formattedPayload:Object.assign({cart_id:r,confirm:!1,method:this.selectedMethodId,vault_payment_instrument:!!n},o)}}}_processAdditionalAction(e,t,n){var i;return tp(this,void 0,void 0,function*(){if(!Zr(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;const{data:r}=(null===(i=e.body)||void 0===i?void 0:i.additional_action_required)||{},{token:o}=r||{},a=yield this._getStripeSavedPaymentMethodsOrThrow(),{session:s,error:c}=yield this._confirmStripePayment(r),d=yield this._getStripeSavedPaymentMethodsOrThrow(s),{id:u,status:l}=s||{},h=this._getNewVaultedStripeInstrument(a,d),p=this._getPaymentPayload(n,u||o,h),{initializationData:m}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,t),{sendSecondPaymentRequestOnStripeError:y}=m||{};if(c||!s){if(y)try{const e=(0,P.merge)({},p,{paymentData:{formattedPayload:{client_side_error:!0}}});yield this.paymentIntegrationService.submitPayment(e)}catch(e){}throw new Fi(null==c?void 0:c.message)}try{return yield this.paymentIntegrationService.submitPayment(p)}catch(e){throw(null==l?void 0:l.paymentStatus)===ho.Paid&&this.stripeIntegrationService.throwPaymentConfirmationProceedMessage(),e}})}_confirmStripePayment(e){return tp(this,void 0,void 0,function*(){const{redirect_url:t}=e||{};if(!this.stripeCheckout)throw new Lt(zt.PaymentNotInitialized);return(yield this._getStripeActionsOrThrow()).confirm({redirect:yo.IF_REQUIRED,returnUrl:t})})}_updateStripeShopperData(){return tp(this,void 0,void 0,function*(){const e=yield this._getStripeActionsOrThrow();yield this._updateStripeEmail(e),yield this._updateStripeShippingAddress(e),yield this._updateStripeBillingAddress(e)})}_updateStripeEmail(e){return tp(this,void 0,void 0,function*(){if((yield e.getSession()).email)return;const{getBillingAddress:t}=this.paymentIntegrationService.getState(),n=t();yield e.updateEmail((null==n?void 0:n.email)||\"\")})}_updateStripeShippingAddress(e){return tp(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getShippingAddress();t&&(yield e.updateShippingAddress({name:this.stripeIntegrationService.getShopperFullName(t),address:this.stripeIntegrationService.mapStripeAddress(t)}))})}_updateStripeBillingAddress(e){return tp(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getBillingAddress();t&&(yield e.updateBillingAddress({name:this.stripeIntegrationService.getShopperFullName(t),address:this.stripeIntegrationService.mapStripeAddress(t)}))})}_getStripeSavedPaymentMethodsOrThrow(e){return tp(this,void 0,void 0,function*(){if(null==e?void 0:e.savedPaymentMethods)return e.savedPaymentMethods;const t=yield this._getStripeActionsOrThrow(),{savedPaymentMethods:n}=yield t.getSession();return n||[]})}_getNewVaultedStripeInstrument(e,t){return t.find(t=>!e.some(e=>e.id===t.id))}_getTokenizedOptions(e,t){return(null==t?void 0:t.type)===mo.ACH?{tokenized_ach:{token:e}}:{credit_card_token:{token:e}}}_initializeAdaptivePricingElement(e,t){const{initializationData:n}=t,{currencySelectorContainerId:i}=e;if(!(null==n?void 0:n.adaptivePricingEnabled))return;if(!i)throw new Lt(zt.PaymentNotInitialized);const r=this._getCurrencySelectorElement();r&&(r.mount(`#${i}`),this._initAdaptivePricingEvents(r))}_getCurrencySelectorElement(){var e,t;return(null===(e=this.stripeCheckout)||void 0===e?void 0:e.getCurrencySelectorElement())||(null===(t=this.stripeCheckout)||void 0===t?void 0:t.createCurrencySelectorElement())}_initAdaptivePricingEvents(e){e.on(_o.CHANGE,e=>tp(this,void 0,void 0,function*(){if(!e.value||!(\"currency\"in e.value))return;const{currency:t}=this.paymentIntegrationService.getState().getCartOrThrow(),n=t.code.toLowerCase(),i=e.value.currency.toLowerCase();yield this.paymentIntegrationService.updatePaymentProviderCustomer({isCustomerCurrencySelected:n!==i,customerCurrency:i})}))}}const ip=Xt(e=>{const t=new wo((0,d.vQ)());return new np(e,t,new Xa(e,t))},[{gateway:\"stripeocs\",id:\"checkout_session\"}]);var rp;!function(e){e.CARD_NUMBER=\"card-number\",e.CVV=\"cvv\",e.EXPIRY=\"expiry\"}(rp||(rp={}));var op=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ap{constructor(e,t,n){this.paymentIntegrationService=e,this.tdOnlineMartScriptLoader=t,this.formPoster=n,this.tdInputs=[{id:\"ccNumber\",fieldType:rp.CARD_NUMBER},{id:\"ccCvv\",fieldType:rp.CVV},{id:\"ccExpiry\",fieldType:rp.EXPIRY}]}initialize(e){return op(this,void 0,void 0,function*(){const{methodId:t}=e;if(!t)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');this.tdOnlineMartClient=yield this.loadTDOnlineMartJs(),this.mountHostedFields(t)})}execute(e,t){return op(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);if(!n.methodId)throw new Ft(Rt.MissingPaymentMethod);const r=yield this.getPaymentPayloadOrThrow(n);yield this.paymentIntegrationService.submitOrder(i,t);try{yield this.paymentIntegrationService.submitPayment(r)}catch(e){yield this.processWithAdditionalAction(e)}})}finalize(){return Promise.reject(new ds)}deinitialize(){return this.tdOnlineMartClient=void 0,this.tdInputs.forEach(({inputElement:e})=>{null==e||e.unmount()}),Promise.resolve()}getPaymentPayloadOrThrow(e){return op(this,void 0,void 0,function*(){const{methodId:t,paymentData:n}=e,{shouldSaveInstrument:i=!1,shouldSetAsDefaultInstrument:r=!1}=Es(n)?n:{},o={browser_info:$o(),shouldSaveInstrument:i,shouldSetAsDefaultInstrument:r};if(Es(n)&&Ss(n)&&n.instrumentId){const e=!!this.paymentIntegrationService.getState().getCartOrThrow().lineItems.digitalItems.length,i=!this.isTrustedVaultingInstrument(n.instrumentId)||e;return{methodId:t,paymentData:Object.assign(Object.assign(Object.assign({},o),{instrumentId:n.instrumentId}),i?{nonce:n.instrumentId}:{})}}let a;try{a=yield this.getTokenOrThrow()}catch(e){this.throwTokenizationError(e)}return{methodId:t,paymentData:Object.assign(Object.assign({},o),{nonce:a})}})}mountHostedFields(e){const t=this.getHostedFieldsOptions(),n=this.getTDOnlineMartClientOrThrow();this.tdInputs.forEach(i=>{const r=`${e}-${i.id}`;document.getElementById(r)&&(i.inputElement=n.create(i.fieldType,t),i.inputElement.mount(`#${r}`))})}loadTDOnlineMartJs(){return op(this,void 0,void 0,function*(){return this.tdOnlineMartClient?this.tdOnlineMartClient:this.tdOnlineMartScriptLoader.load()})}getTokenOrThrow(){return new Promise((e,t)=>{this.getTDOnlineMartClientOrThrow().createToken(n=>{const{error:i,token:r}=n;if(i||!r)return t(i);e(r)})})}getTDOnlineMartClientOrThrow(){if(!this.tdOnlineMartClient)throw new Lt(zt.PaymentNotInitialized);return this.tdOnlineMartClient}processWithAdditionalAction(e){return op(this,void 0,void 0,function*(){if(!function(e){return Zr(e)&&(t=e.body,(0,P.isObject)(t)&&\"object\"==typeof t&&\"errors\"in t&&\"three_ds_result\"in t&&(0,P.isArray)(t.errors)&&(0,P.some)(t.errors,{code:\"three_d_secure_required\"}));var t}(e))throw e;const{three_ds_result:t}=e.body,{acs_url:n,payer_auth_request:i,merchant_data:r}=t||{};if(!n||!i||!r)throw new Yi([\"formUrl\",\"threeDSSessionData\",\"creq\"]);return new Promise(e=>{this.formPoster.postForm(n,{threeDSSessionData:i,creq:r},e,\"_top\")})})}throwTokenizationError(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"field\"in e&&\"type\"in e&&\"message\"in e}(e))throw new Ft(Rt.MissingPaymentToken);throw new Error(e.message)}getHostedFieldsOptions(){return{style:{error:{color:\"#d14343\"}},classes:{error:\"form-input--error\"}}}isTrustedVaultingInstrument(e){const t=this.paymentIntegrationService.getState().getInstruments(),n=null==t?void 0:t.find(t=>Js(t)&&t.bigpayToken===e);return!(Js(n)&&!n.trustedShippingAddress)}}class sp{constructor(e,t=window){this.scriptLoader=e,this.tdOnlineMartWindow=t}load(){return e=this,t=void 0,i=function*(){if(this.tdOnlineMartWindow.customcheckout||(yield this.scriptLoader.loadScript(\"https://libs.na.bambora.com/customcheckout/1/customcheckout.js\")),!this.tdOnlineMartWindow.customcheckout)throw new Qt;return this.tdOnlineMartWindow.customcheckout()},new((n=void 0)||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())});var e,t,n,i}}const cp=Xt(e=>new ap(e,new sp((0,d.vQ)()),(0,Fn.createFormPoster)()),[{id:\"tdonlinemart\"}]);var dp=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};const up=\"Payment cannot continue\";let lp;class hp extends Vd{initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return dp(this,void 0,void 0,function*(){if(this._initializeOptions=e&&e.worldpay,!this._initializeOptions)throw new Lt(zt.PaymentNotInitialized);return t.initialize.call(this,e)})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return dp(this,void 0,void 0,function*(){const{payment:i}=e;if(lp=this._submitAdditionalAction(),!i)throw new Yi([\"payment\"]);try{return yield n.execute.call(this,e,t)}catch(e){return this._processAdditionalAction(e,i)}})}_processAdditionalAction(e,t){return dp(this,void 0,void 0,function*(){return Zr(e)&&(0,P.some)(e.body.errors,{code:\"additional_action_required\"})?new Promise((n,i)=>{const r=e=>dp(this,void 0,void 0,function*(){if(-1===e.origin.indexOf(\"cardinalcommerce.com\"))return;if(\"string\"!=typeof e.data||!this._isValidJsonWithSessionId(e.data))return i(new Error(up));window.removeEventListener(\"message\",r),o.remove();const a=JSON.parse(e.data),s=(0,P.merge)({},t,{paymentData:{threeDSecure:{token:a.SessionId}}});try{n(yield lp(s))}catch(e){if(!Zr(e)||!(0,P.some)(e.body.errors,{code:\"three_d_secure_required\"}))return i(e);if(!this._initializeOptions)return i(new Lt(zt.PaymentNotInitialized));const{onLoad:t}=this._initializeOptions,n=this._createIframe(e.body.three_ds_result);try{t(n,()=>i(new Error(\"Payment was cancelled\")))}catch(e){i(new Error(up))}}});let o;window.addEventListener(\"message\",r);try{o=this._createHiddenIframe(e.body)}catch(e){throw window.removeEventListener(\"message\",r),new Error(up)}}):Promise.reject(e)})}_createHiddenIframe(e){const t=document.createElement(\"iframe\");if(document.body.appendChild(t),!t.contentWindow)throw new Error;t.id=\"worldpay_hosted_hidden_payment_page\",t.height=\"0px\",t.width=\"0px\";const n=document.createElement(\"form\"),i=\"collectionForm\";n.id=i,n.name=\"devicedata\",n.method=\"post\";const r=e.additional_action_required.data.redirect_url;n.action=r;const o=document.createElement(\"input\");o.name=\"Bin\",o.type=\"hidden\",o.value=e.provider_data.source_id,n.appendChild(o);const a=document.createElement(\"input\");a.name=\"JWT\",a.type=\"hidden\",a.value=e.provider_data.data,n.appendChild(a);const s=document.createElement(\"button\");s.type=\"submit\",s.id=\"btnsubmit\",n.appendChild(s),navigator.userAgent.match(\"Firefox\")?t.srcdoc=n.outerHTML:t.contentWindow.document.body.appendChild(n);const c=document.createElement(\"script\");return c.innerHTML=`\\n            document.getElementById('${i}').submit();\\n        `,t.contentWindow.document.body.appendChild(c),t}_createIframe(e){const t=document.createElement(\"form\");t.id=\"challengeForm\",t.method=\"POST\",t.action=e.acs_url;const n=document.createElement(\"input\");n.name=\"JWT\",n.type=\"hidden\",n.value=e.payer_auth_request,t.appendChild(n);const i=document.createElement(\"input\");i.name=\"MD\",i.type=\"hidden\",i.value=`merchantSessionId=${e.merchant_data}`,t.appendChild(i);const r=document.createElement(\"script\");r.type=\"text/javascript\",r.innerHTML=\"window.onload = function() { document.getElementById('challengeForm').submit(); }\";const o=document.createElement(\"iframe\");return o.name=\"worldpay_hosted_payment_page\",o.height=\"400\",o.width=\"100%\",o.srcdoc=`${t.outerHTML} ${r.outerHTML}`,o}_submitAdditionalAction(){if(this._shouldRenderHostedForm){if(!this._hostedForm)throw new Lt(zt.PaymentNotInitialized);const e=this._hostedForm;return t=>dp(this,void 0,void 0,function*(){yield e.submit(t)})}return e=>dp(this,void 0,void 0,function*(){yield this._paymentIntegrationService.submitPayment(e)})}_isValidJsonWithSessionId(e){try{const t=JSON.parse(e);return!(!t.SessionId||!t.Status)}catch(e){return!1}}}const pp=Xt(e=>new hp(e),[{gateway:\"worldpayaccess\",id:\"credit_card\"},{id:\"worldpayaccess\"}]);class mp{constructor(e){this._paymentIntegrationService=e}execute({payment:e}){return t=this,n=void 0,r=function*(){if(!e)throw new Yi([\"payment\"]);yield this._paymentIntegrationService.submitOrder();try{yield this._paymentIntegrationService.submitPayment(this._buildOpenBankingSubmitPayment(e))}catch(e){if(this._isWorldpayAccessRedirectResponse(e)){const t=e.body.additional_action_required.data.redirect_url;return new Promise(()=>window.location.replace(t))}return Promise.reject(e)}},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())});var t,n,i,r}initialize(){return Promise.resolve()}finalize(){return Promise.reject(new ds)}deinitialize(){return Promise.resolve()}_buildOpenBankingSubmitPayment(e){const{shouldSaveInstrument:t,shouldSetAsDefaultInstrument:n}=Es(e.paymentData)?e.paymentData:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1};return Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{open_banking:{},vault_payment_instrument:t||!1,set_as_default_stored_instrument:n||!1}}})}_isWorldpayAccessRedirectResponse(e){var t,n;if(\"object\"!=typeof e||null===e)return!1;const i=e;if(!i.body)return!1;const r=i.body;return\"additional_action_required\"===r.status&&!!(null===(n=null===(t=r.additional_action_required)||void 0===t?void 0:t.data)||void 0===n?void 0:n.redirect_url)}}const yp=Xt(e=>new mp(e),[{id:\"open_banking\",gateway:\"worldpayaccess\"}]);class fp{constructor(e){this._requestSender=e}saveExternalId(e,t){return n=this,i=void 0,o=function*(){const n=`/api/storefront/payment/${e}/save-external-id`,i={headers:Object.assign({Accept:Zn.JsonV1,\"X-API-INTERNAL\":Qn},Xn),body:{externalId:t,provider:e}};yield this._requestSender.post(n,i)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}}class gp{constructor(e,t){this.paymentIntegrationService=e,this.storefrontPaymentRequestSender=t}initialize(){return Promise.resolve()}execute(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new Yi([\"payment\"]);const{methodId:r}=n,{getPaymentMethodOrThrow:o}=yield this.paymentIntegrationService.loadPaymentMethod(r,t),{clientToken:a,initializationData:s}=o(r),c=null==s?void 0:s.redirectUrl;if(!a||!c)throw new Ft(Rt.MissingPaymentMethod);const{id:d}=JSON.parse(a);if(!d)throw new Ft(Rt.MissingPaymentToken);const{isStoreCreditApplied:u}=this.paymentIntegrationService.getState().getCheckoutOrThrow();yield this.paymentIntegrationService.applyStoreCredit(u),yield this.paymentIntegrationService.initializePayment(r,{useStoreCredit:u}),yield this.paymentIntegrationService.submitOrder(i,t),yield this._prepareForReferredRegistration(r,d);try{yield this.paymentIntegrationService.submitPayment({methodId:r,paymentData:{nonce:d}})}catch(e){if(Zr(e)&&\"additional_action_required\"===e.body.status)return new Promise(()=>window.location.replace(c));throw e}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new ds)}deinitialize(){return Promise.resolve()}_prepareForReferredRegistration(e,t){return this.storefrontPaymentRequestSender.saveExternalId(e,t)}}const vp=Xt(e=>{const{getHost:t}=e.getState(),n=(0,o.createRequestSender)({host:t()}),i=new fp(n);return new gp(e,i)},[{id:\"zip\"},{id:\"quadpay\"}]);var _p,bp;!function(e){e.LoadCountriesRequested=\"LOAD_COUNTRIES_REQUESTED\",e.LoadCountriesSucceeded=\"LOAD_COUNTRIES_SUCCEEDED\",e.LoadCountriesFailed=\"LOAD_COUNTRIES_FAILED\"}(_p||(_p={}));class Sp{constructor(e){this._countryRequestSender=e}loadCountries(e){return O.c.create(t=>{t.next((0,u.VP)(_p.LoadCountriesRequested)),this._countryRequestSender.loadCountries(e).then(e=>{t.next((0,u.VP)(_p.LoadCountriesSucceeded,e.body.data)),t.complete()}).catch(e=>{t.error((0,u.fQ)(_p.LoadCountriesFailed,e))})})}}class wp{constructor(e,t){this._requestSender=e,this._config=t}loadCountries({timeout:e}={}){const t=Object.assign({\"Accept-Language\":this._config.locale},S);return this._requestSender.get(\"/internalapi/v1/store/countries\",{headers:t,timeout:e})}}class Cp extends T{constructor(e){super(e||\"Your checkout could not be processed because some details have changed. Please review your order and try again.\"),this.name=\"CartConsistencyError\",this.type=\"cart_consistency\"}}class Ip extends T{constructor(e,t){super(t||\"At least one item changed stock position. Please review your cart and try again.\"),this.name=\"CartStockPositionsChangedError\",this.type=\"cart_stock_positions_changed\",this.changedItemIds=e}}class Pp extends T{constructor(e){super(e||\"The tax provider is unavailable.\"),this.name=\"OrderTaxProviderUnavailableError\",this.type=\"tax_provider_unavailable\"}}class Ep extends T{constructor(e){super(e),this.name=\"MissingShippingMethodError\",this.type=\"missing_shipping_method\"}}class Op extends T{constructor(e){super(e),this.name=\"InvalidShippingAddressError\",this.type=\"invalid_shipping_address\"}}class Ap{constructor(e){this._requestSender=e}loadOrder(e,{timeout:t}={}){const n=`/api/storefront/orders/${e}`,i=Object.assign({Accept:R.JsonV1},S);return this._requestSender.get(n,{params:{include:ue([\"payments\",\"lineItems.physicalItems.socialMedia\",\"lineItems.physicalItems.options\",\"lineItems.physicalItems.categories\",\"lineItems.digitalItems.socialMedia\",\"lineItems.digitalItems.options\",\"lineItems.digitalItems.categories\"])},headers:i,timeout:t})}submitOrder(e,{headers:t,timeout:n}={}){return this._requestSender.post(\"/internalapi/v1/checkout/order\",{body:e,headers:(0,P.omitBy)(Object.assign({\"X-Checkout-Variant\":t&&t.checkoutVariant},S),P.isNil),timeout:n}).catch(e=>{var t,n;if(\"tax_provider_unavailable\"===e.body.type)throw new Pp;if(\"cart_has_changed\"===e.body.type)throw new Cp;if(\"cart_stock_positions_changed\"===e.body.type){const i=null!==(n=null===(t=e.body.errors)||void 0===t?void 0:t.changedItemIds)&&void 0!==n?n:[];throw new Ip(i)}if(\"missing_shipping_method\"===e.body.type)throw new Ep(e.body.detail);if(\"invalid_shipping_address\"===e.body.type)throw new Op(e.body.detail);if(\"empty_cart\"===e.body.type)throw new D;throw e})}finalizeOrder(e,{timeout:t}={}){const n=`/internalapi/v1/checkout/order/${e}`;return this._requestSender.post(n,{timeout:t,headers:S})}}class Tp extends T{constructor(){super(\"You haven't complete our spam check. Please try again.\"),this.name=\"SpamProtectionNotCompletedError\",this.type=\"spam_protection_not_completed\"}}!function(e){e.LoadOrderRequested=\"LOAD_ORDER_REQUESTED\",e.LoadOrderSucceeded=\"LOAD_ORDER_SUCCEEDED\",e.LoadOrderFailed=\"LOAD_ORDER_FAILED\",e.LoadOrderPaymentsRequested=\"LOAD_ORDER_PAYMENTS_REQUESTED\",e.LoadOrderPaymentsSucceeded=\"LOAD_ORDER_PAYMENTS_SUCCEEDED\",e.LoadOrderPaymentsFailed=\"LOAD_ORDER_PAYMENTS_FAILED\",e.SubmitOrderRequested=\"SUBMIT_ORDER_REQUESTED\",e.SubmitOrderSucceeded=\"SUBMIT_ORDER_SUCCEEDED\",e.SubmitOrderFailed=\"SUBMIT_ORDER_FAILED\",e.FinalizeOrderRequested=\"FINALIZE_ORDER_REQUESTED\",e.FinalizeOrderSucceeded=\"FINALIZE_ORDER_SUCCEEDED\",e.FinalizeOrderFailed=\"FINALIZE_ORDER_FAILED\"}(bp||(bp={}));class kp{constructor(e,t){this._orderRequestSender=e,this._checkoutValidator=t}loadOrder(e,t){return new O.c(n=>{n.next((0,u.VP)(bp.LoadOrderRequested)),this._orderRequestSender.loadOrder(e,t).then(e=>{n.next((0,u.VP)(bp.LoadOrderSucceeded,e.body)),n.complete()}).catch(e=>{n.error((0,u.fQ)(bp.LoadOrderFailed,e))})})}loadOrderPayments(e,t){return new O.c(n=>{n.next((0,u.VP)(bp.LoadOrderPaymentsRequested)),this._orderRequestSender.loadOrder(e,t).then(e=>{n.next((0,u.VP)(bp.LoadOrderPaymentsSucceeded,e.body)),n.complete()}).catch(e=>{n.error((0,u.fQ)(bp.LoadOrderPaymentsFailed,e))})})}loadCurrentOrder(e){return t=>(0,p.v)(()=>{const n=this._getCurrentOrderId(t.getState());if(!n)throw new k(C.MissingOrderId);return this.loadOrder(n,e)})}submitOrder(e,t){return n=>(0,l.x)((0,h.of)((0,u.VP)(bp.SubmitOrderRequested)),(0,p.v)(()=>{const i=n.getState(),r=i.config.getExternalSource(),o=i.config.getVariantIdentificationToken(),a=i.checkout.getCheckout();if(!a)throw new k(C.MissingCheckout);if(a.shouldExecuteSpamCheck)throw new Tp;return(0,Q.H)(this._checkoutValidator.validate(a,t).then(()=>this._orderRequestSender.submitOrder(this._mapToOrderRequestBody(null!=e?e:{},a.id,a.customerMessage,r),Object.assign(Object.assign({},t),{headers:{checkoutVariant:o}})))).pipe((0,be.n)(e=>(0,l.x)(this.loadOrder(e.body.data.order.orderId,t),(0,h.of)((0,u.VP)(bp.SubmitOrderSucceeded,e.body.data,Object.assign(Object.assign({},e.body.meta),{token:e.headers.token}))))))}).pipe((0,m.W)(e=>_(bp.SubmitOrderFailed,e))))}finalizeOrder(e,t){return(0,l.x)((0,h.of)((0,u.VP)(bp.FinalizeOrderRequested)),(0,Q.H)(this._orderRequestSender.finalizeOrder(e,t)).pipe((0,be.n)(n=>(0,l.x)(this.loadOrder(e,t),(0,h.of)((0,u.VP)(bp.FinalizeOrderSucceeded,n.body.data)))))).pipe((0,m.W)(e=>_(bp.FinalizeOrderFailed,e)))}_getCurrentOrderId(e){const t=e.order.getOrder(),n=e.checkout.getCheckout();return t&&t.orderId||n&&n.orderId}_mapToOrderRequestBody(e,t,n,i){const{payment:r}=e,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);return r?Object.assign(Object.assign({},o),{cartId:t,customerMessage:n,externalSource:i,payment:{paymentData:r.paymentData,name:r.methodId,gateway:r.gatewayId}}):Object.assign(Object.assign({},o),{cartId:t,customerMessage:n,externalSource:i})}}var xp=n(2742);function Mp(e){const t=(0,xp.U)();return e.subscribe(e=>{const n=e.config.getStoreConfig();n&&t.setHost(n.paymentSettings.bigpayBaseUrl)},e=>e.config.getStoreConfig()),t}var Np;function Dp(e,t,n,i){var r,o,a,s,c,d,u,l;return c=this,d=void 0,l=function*(){const c=t.customer.getCustomer(),d=t.b2bToken.getToken(),u=f(null!==(a=null===(o=null===(r=t.config.getStoreConfig())||void 0===r?void 0:r.b2bApiSettings)||void 0===o?void 0:o.baseUrl)&&void 0!==a?a:\"\"),l=null===(s=t.cart.getCart())||void 0===s?void 0:s.companyId;if(!c||c.isGuest||!d||!u||!l)throw new k(C.MissingCheckoutConfig);const{body:h}=yield n.getB2BCompanyPaymentMethods(l,d,u,i);return function(e,t){const n=new Set(t.data.filter(e=>\"1\"===e.isEnabled).map(e=>e.code));return e.filter(e=>n.has(e.id))}(e,h)},new((u=void 0)||(u=Promise))(function(e,t){function n(e){try{r(l.next(e))}catch(e){t(e)}}function i(e){try{r(l.throw(e))}catch(e){t(e)}}function r(t){var r;t.done?e(t.value):(r=t.value,r instanceof u?r:new u(function(e){e(r)})).then(n,i)}r((l=l.apply(c,d||[])).next())})}!function(e){e.LoadPaymentMethodRequested=\"LOAD_PAYMENT_METHOD_REQUESTED\",e.LoadPaymentMethodSucceeded=\"LOAD_PAYMENT_METHOD_SUCCEEDED\",e.LoadPaymentMethodFailed=\"LOAD_PAYMENT_METHOD_FAILED\",e.LoadPaymentMethodsRequested=\"LOAD_PAYMENT_METHODS_REQUESTED\",e.LoadPaymentMethodsSucceeded=\"LOAD_PAYMENT_METHODS_SUCCEEDED\",e.LoadPaymentMethodsFailed=\"LOAD_PAYMENT_METHODS_FAILED\"}(Np||(Np={}));var Rp=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};const zp=e=>!!e;class Fp{constructor(e,t){this._requestSender=e,this._b2bCompanyPaymentMethodRequestSender=t}loadPaymentMethodsById(e,t){return n=>new O.c(i=>{var r;const o=null===(r=n.getState().cart.getCart())||void 0===r?void 0:r.id,a=o?Object.assign(Object.assign({},null==t?void 0:t.params),{cartId:o}):Object.assign({},null==t?void 0:t.params);i.next((0,u.VP)(Np.LoadPaymentMethodsRequested)),Promise.all(e.map(e=>Rp(this,void 0,void 0,function*(){try{return(yield this._requestSender.loadPaymentMethod(e,Object.assign(Object.assign({},t),{params:a}))).body}catch(e){return}}))).then(e=>{const t=e.filter(zp);i.next((0,u.VP)(Np.LoadPaymentMethodsSucceeded,t)),i.complete()}).catch(e=>{i.next((0,u.VP)(Np.LoadPaymentMethodsFailed,e)),i.complete()})})}loadPaymentMethods(e){return t=>O.c.create(n=>{const i=t.getState(),r=i.cart.getCartOrThrow();n.next((0,u.VP)(Np.LoadPaymentMethodsRequested)),this._requestSender.loadPaymentMethods(Object.assign(Object.assign({},e),{params:Object.assign(Object.assign({},null==e?void 0:e.params),{cartId:r.id})})).then(t=>Rp(this,void 0,void 0,function*(){var r,o,a,s;const c={deviceSessionId:t.headers[\"x-device-session-id\"],sessionHash:t.headers[\"x-session-hash\"]};let d=t.body;null!==(s=null===(a=null===(o=null===(r=i.config.getStoreConfig())||void 0===r?void 0:r.checkoutSettings.capabilities)||void 0===o?void 0:o.payment)||void 0===a?void 0:a.b2bPaymentMethodFilter)&&void 0!==s&&s&&(d=yield Dp(d,i,this._b2bCompanyPaymentMethodRequestSender,e)),n.next((0,u.VP)(Np.LoadPaymentMethodsSucceeded,d,c)),n.complete()})).catch(e=>{n.error((0,u.fQ)(Np.LoadPaymentMethodsFailed,e))})})}loadPaymentMethod(e,t){return n=>O.c.create(i=>{var r;const o=null===(r=n.getState().cart.getCart())||void 0===r?void 0:r.id,a=o?Object.assign(Object.assign({},null==t?void 0:t.params),{cartId:o}):Object.assign({},null==t?void 0:t.params);i.next((0,u.VP)(Np.LoadPaymentMethodRequested,void 0,{methodId:e})),this._requestSender.loadPaymentMethod(e,Object.assign(Object.assign({},t),{params:a})).then(t=>{i.next((0,u.VP)(Np.LoadPaymentMethodSucceeded,t.body,{methodId:e})),i.complete()}).catch(t=>{i.error((0,u.fQ)(Np.LoadPaymentMethodFailed,t,{methodId:e}))})})}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([Z],Fp.prototype,\"loadPaymentMethod\",null);class Bp{constructor(e){this._requestSender=e}loadPaymentMethods({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/payments\",{timeout:e,headers:Object.assign({Accept:R.JsonV1,\"X-API-INTERNAL\":ie},S),params:t})}loadPaymentMethod(e,{timeout:t,params:n}={}){const i=`/api/storefront/payments/${e}`;return this._requestSender.get(i,{timeout:t,headers:Object.assign({Accept:R.JsonV1,\"X-API-INTERNAL\":ie},S),params:n})}}var jp,Lp;class Up{constructor(e){this._requestSender=e}getB2BCompanyPaymentMethods(e,t,n,i){return r=this,o=void 0,s=function*(){return this._requestSender.get(`${n}/api/v2/companies/${e}/payments`,{timeout:null==i?void 0:i.timeout,credentials:!1,headers:{authToken:t,Authorization:`Bearer ${t}`}})},new((a=void 0)||(a=Promise))(function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function i(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof a?r:new a(function(e){e(r)})).then(n,i)}c((s=s.apply(r,o||[])).next())});var r,o,a,s}}class Vp extends T{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(e){e.ExecuteFailed=\"PAYMENT_STRATEGY_EXECUTE_FAILED\",e.ExecuteRequested=\"PAYMENT_STRATEGY_EXECUTE_REQUESTED\",e.ExecuteSucceeded=\"PAYMENT_STRATEGY_EXECUTE_SUCCEEDED\",e.FinalizeFailed=\"PAYMENT_STRATEGY_FINALIZE_FAILED\",e.FinalizeRequested=\"PAYMENT_STRATEGY_FINALIZE_REQUESTED\",e.FinalizeSucceeded=\"PAYMENT_STRATEGY_FINALIZE_SUCCEEDED\",e.InitializeFailed=\"PAYMENT_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"PAYMENT_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"PAYMENT_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"PAYMENT_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"PAYMENT_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"PAYMENT_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_FAILED\"}(jp||(jp={})),function(e){e.ADYENV2=\"adyenv2\",e.ADYENV2_GOOGLEPAY=\"googlepayadyenv2\",e.ADYENV3=\"adyenv3\",e.ADYENV3_GOOGLEPAY=\"googlepayadyenv3\",e.AFFIRM=\"affirm\",e.AFTERPAY=\"afterpay\",e.AUTHORIZENET_GOOGLE_PAY=\"googlepayauthorizenet\",e.AMAZONPAY=\"amazonpay\",e.APPLEPAY=\"applepay\",e.BLUESNAPV2=\"bluesnapv2\",e.BOLT=\"bolt\",e.CBA_MPGS=\"cba_mpgs\",e.CHECKOUTCOM=\"checkoutcom\",e.CHECKOUTCOM_APM=\"checkoutcomapm\",e.CHECKOUTCOM_FAWRY=\"checkoutcomfawry\",e.CHECKOUTCOM_SEPA=\"checkoutcomsepa\",e.CHECKOUTCOM_IDEAL=\"checkoutcomideal\",e.CREDIT_CARD=\"creditcard\",e.CHECKOUTCOM_GOOGLE_PAY=\"googlepaycheckoutcom\",e.CLEARPAY=\"clearpay\",e.CONVERGE=\"converge\",e.CYBERSOURCE=\"cybersource\",e.CYBERSOURCEV2=\"cybersourcev2\",e.BNZ=\"bnz\",e.BNZ_GOOGLEPAY=\"googlepaybnz\",e.CYBERSOURCEV2_GOOGLE_PAY=\"googlepaycybersourcev2\",e.HUMM=\"humm\",e.KLARNA=\"klarna\",e.KLARNAV2=\"klarnav2\",e.LEGACY=\"legacy\",e.MOLLIE=\"mollie\",e.MONERIS=\"moneris\",e.NO_PAYMENT_DATA_REQUIRED=\"nopaymentdatarequired\",e.OFFLINE=\"offline\",e.OFFSITE=\"offsite\",e.ORBITAL_GOOGLE_PAY=\"googlepayorbital\",e.PAYPAL_EXPRESS=\"paypalexpress\",e.PAYPAL_EXPRESS_CREDIT=\"paypalexpresscredit\",e.PAYPAL_COMMERCE=\"paypalcommerce\",e.PAYPAL_COMMERCE_CREDIT=\"paypalcommercecredit\",e.PAYPAL_COMMERCE_CREDIT_CARD=\"paypalcommercecreditcards\",e.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=\"paypalcommercealternativemethods\",e.PAYPAL_COMMERCE_VENMO=\"paypalcommercevenmo\",e.PPSDK=\"PAYMENT_TYPE_SDK\",e.QUADPAY=\"quadpay\",e.SAGE_PAY=\"sagepay\",e.SQUARE=\"squarev2\",e.STRIPEV3=\"stripev3\",e.STRIPE_UPE=\"stripeupe\",e.STRIPE_UPE_GOOGLE_PAY=\"googlepaystripeupe\",e.BRAINTREE=\"braintree\",e.BRAINTREE_PAYPAL=\"braintreepaypal\",e.BRAINTREE_VENMO=\"braintreevenmo\",e.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",e.BRAINTREE_VISA_CHECKOUT=\"braintreevisacheckout\",e.BRAINTREE_GOOGLE_PAY=\"googlepaybraintree\",e.WORLDPAYACCESS=\"worldpayaccess\",e.WORLDPAYACCESS_GOOGLE_PAY=\"googlepayworldpayaccess\",e.STRIPE_GOOGLE_PAY=\"googlepaystripe\",e.SEZZLE=\"sezzle\",e.ZIP=\"zip\"}(Lp||(Lp={}));const qp=Lp;class Hp{widgetInteraction(e,t){const n={methodId:t&&t.methodId};return(0,l.x)((0,h.of)((0,u.VP)(jp.WidgetInteractionStarted,void 0,n)),(0,p.v)(()=>e().then(()=>(0,u.VP)(jp.WidgetInteractionFinished,void 0,n)))).pipe((0,m.W)(e=>_(jp.WidgetInteractionFailed,e,n)))}}class Gp{constructor(e,t,n,i,r){this._strategyRegistry=e,this._strategyRegistryV2=t,this._orderActionCreator=n,this._spamProtectionActionCreator=i,this._paymentIntegrationService=r,this._paymentStrategyWidgetActionCreator=new Hp}execute(e,t){const{payment:n={},useStoreCredit:i}=e,r={methodId:n.methodId};return o=>{const{checkout:a}=o.getState(),{shouldExecuteSpamCheck:s}=a.getCheckoutOrThrow();return(0,l.x)(s?this._spamProtectionActionCreator.verifyCheckoutSpamProtection()(o):(0,A.I)(),(0,h.of)((0,u.VP)(jp.ExecuteRequested,void 0,r)),(0,p.v)(()=>{const a=o.getState();let s;if(a.payment.isPaymentDataRequired(i)){const e=a.paymentMethods.getPaymentMethod(n.methodId,n.gatewayId);if(!e)throw new k(C.MissingPaymentMethod);s=this._getStrategy(e)}else s=this._strategyRegistryV2.get({id:qp.NO_PAYMENT_DATA_REQUIRED});return s.execute(e,Object.assign(Object.assign({},t),{methodId:n.methodId,gatewayId:n.gatewayId})).then(()=>(0,u.VP)(jp.ExecuteSucceeded,void 0,r))})).pipe((0,m.W)(e=>_(jp.ExecuteFailed,e,r)))}}finalize(e){const{integrations:t}=null!=e?e:{};return n=>(0,l.x)((0,h.of)((0,u.VP)(jp.FinalizeRequested)),this._loadOrderPaymentsIfNeeded(n,e),(0,p.v)(()=>{return i=this,r=void 0,a=function*(){const i=n.getState(),{providerId:r=\"\",gatewayId:o=\"\"}=i.payment.getPaymentId()||{},a=i.paymentMethods.getPaymentMethod(r,o);if(!a)throw new Vp;let s;Oe(this._strategyRegistryV2,null!=t?t:[],this._paymentIntegrationService);try{s=this._getStrategy(a)}catch(e){throw new Vp}return yield s.finalize(Object.assign(Object.assign({},e),{methodId:a.id,gatewayId:a.gateway})),(0,u.VP)(jp.FinalizeSucceeded,void 0,{methodId:a.id})},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}c((a=a.apply(i,r||[])).next())});var i,r,o,a})).pipe((0,m.W)(e=>{const t=n.getState().payment.getPaymentId();return _(jp.FinalizeFailed,e,{methodId:t&&t.providerId})}))}initialize(e){const{methodId:t,gatewayId:n,integrations:i}=e;return r=>(0,p.v)(()=>{const o=r.getState(),a=o.paymentMethods.getPaymentMethod(t,n);if(!a)throw new k(C.MissingPaymentMethod);if(t&&o.paymentStrategies.isInitialized({methodId:t,gatewayId:n}))return(0,A.I)();Oe(this._strategyRegistryV2,null!=i?i:[],this._paymentIntegrationService);const s=this._getStrategy(a).initialize(Object.assign(Object.assign({},e),{methodId:t,gatewayId:n}));return(0,l.x)((0,h.of)((0,u.VP)(jp.InitializeRequested,void 0,{methodId:t,gatewayId:n})),s.then(()=>(0,u.VP)(jp.InitializeSucceeded,void 0,{methodId:t,gatewayId:n})))}).pipe((0,m.W)(e=>_(jp.InitializeFailed,e,{methodId:t,gatewayId:n})))}deinitialize(e){const{methodId:t,gatewayId:n}=e;return i=>(0,p.v)(()=>{const r=i.getState(),o=r.paymentMethods.getPaymentMethod(t,n);if(!o)throw new k(C.MissingPaymentMethod);if(t&&!r.paymentStrategies.isInitialized({methodId:t,gatewayId:n}))return(0,A.I)();const a=this._getStrategy(o).deinitialize(Object.assign(Object.assign({},e),{methodId:t,gatewayId:n}));return(0,l.x)((0,h.of)((0,u.VP)(jp.DeinitializeRequested,void 0,{methodId:t,gatewayId:n})),a.then(()=>(0,u.VP)(jp.DeinitializeSucceeded,void 0,{methodId:t,gatewayId:n})))}).pipe((0,m.W)(e=>_(jp.DeinitializeFailed,e,{methodId:t,gatewayId:n})))}widgetInteraction(e,t){return this._paymentStrategyWidgetActionCreator.widgetInteraction(e,t)}_getStrategy(e){let t;try{t=this._strategyRegistry.getByMethod(e)}catch(n){try{t=this._strategyRegistryV2.get({id:e.id,gateway:e.gateway,type:e.type})}catch(t){throw $().error(`[PaymentStrategyActionCreator] Unable to resolve V2 strategy for id: ${e.id}, gateway: ${e.gateway}, type: ${e.type}`),t}}return t}_loadOrderPaymentsIfNeeded(e,t){const n=e.getState().checkout.getCheckout();return n&&n.orderId?this._orderActionCreator.loadOrderPayments(n.orderId,t):(0,A.I)()}}class Wp{isEqual(e,t){return(0,P.isEqual)(this._normalize(e),this._normalize(t))}_normalize(e){return{cartAmount:e.cartAmount,currency:e.currency,id:e.id,lineItems:{digitalItems:e.lineItems.digitalItems.slice().sort((e,t)=>`${e.productId}${e.variantId}`.localeCompare(`${t.productId}${t.variantId}`)).map(e=>({extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId})),giftCertificates:e.lineItems.giftCertificates.slice().sort((e,t)=>`${e.id}`.localeCompare(`${t.id}`)).map(e=>({amount:e.amount,recipient:e.recipient})),physicalItems:e.lineItems.physicalItems.slice().sort((e,t)=>`${e.productId}${e.variantId}`.localeCompare(`${t.productId}${t.variantId}`)).map(e=>({extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId,giftWrapping:e.giftWrapping}))}}}}class $p extends T{constructor(e,t){super(\"An update to your shopping cart has been detected and your available shipping costs have been updated.\"),this.name=\"CartChangedError\",this.type=\"cart_changed\",this.data={previous:e,updated:t}}}class Yp{constructor(e){this._checkoutRequestSender=e}validate(e,t){if(!e)throw new k(C.MissingCheckout);return this._checkoutRequestSender.loadCheckout(e.id,t).then(t=>{const n=new Wp;if(!(e.outstandingBalance===t.body.outstandingBalance&&this._compareCoupons(e.coupons,t.body.coupons)&&this._compareGiftCertificates(e.giftCertificates,t.body.giftCertificates)&&n.isEqual(e.cart,t.body.cart)))throw new $p(this._getComparableCheckout(e),this._getComparableCheckout(t.body))})}_compareCoupons(e,t){return(0,P.isEqual)((0,P.map)(e,\"code\"),(0,P.map)(t,\"code\"))}_compareGiftCertificates(e,t){return(0,P.isEqual)((0,P.map)(e,\"code\"),(0,P.map)(t,\"code\"))}_getComparableCheckout(e){const{cart:t,coupons:n,giftCertificates:i,outstandingBalance:r}=e;return{cart:{cartAmount:t.cartAmount,currency:t.currency,lineItems:t.lineItems},coupons:n,giftCertificates:i,outstandingBalance:r}}}class Kp{constructor(e){this._namespace=e}getItem(e){const t=Zc.Ay.getItem(this.withNamespace(e));if(null===t)return null;try{return JSON.parse(t)}catch(t){return this.removeItem(this.withNamespace(e)),null}}getItemOnce(e){const t=this.getItem(e);return this.removeItem(e),t}setItem(e,t){return Zc.Ay.setItem(this.withNamespace(e),JSON.stringify(t))}removeItem(e){return Zc.Ay.removeItem(this.withNamespace(e))}withNamespace(e){return`${this._namespace}.${e}`}}class Qp extends T{constructor(){super(\"Please complete our human verification challenge and try again.\"),this.name=\"CardingProtectionChallengeNotCompletedError\",this.type=\"carding_protection_challenge_not_completed\"}}class Jp extends T{constructor(){super(\"We were not able to verify that you are not a robot. Please try again.\"),this.name=\"CardingProtectionFailedError\",this.type=\"carding_protection_failed\"}}var Zp,Xp,em=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class tm{constructor(e){this._googleRecaptcha=e}handle(e,t){return em(this,void 0,void 0,function*(){return\"string\"==typeof e?this.handleWithRecaptchaSitekey(e,t):this.handleWithPaymentHumanVerificationRequestError(e)})}handleWithPaymentHumanVerificationRequestError(e){return em(this,void 0,void 0,function*(){if(!this._isPaymentHumanVerificationRequest(e))throw e;return yield this._initialize(e.body.additional_action_required.data.key),this._performRecaptcha()})}handleWithRecaptchaSitekey(e,t){return em(this,void 0,void 0,function*(){if(\"recaptcha_v2\"!==e)throw Error(\"Human verification method is not supported.\");if(!t)throw Error(\"Recaptcha site key is missing.\");return yield this._initialize(t),this._performRecaptcha()})}_performRecaptcha(){return this._googleRecaptcha.execute().pipe((0,ze.s)(1)).pipe((0,be.n)(({error:e,token:t})=>em(this,void 0,void 0,function*(){if(e instanceof Fe)throw new Qp;if(e||!t)throw new Jp;return{type:\"recaptcha_v2_verification\",data:{human_verification_token:t}}}))).toPromise()}_initialize(e){const t=\"cardingProtectionContainer\";let n=document.getElementById(t);return n&&n.parentNode&&n.parentNode.removeChild(n),n=document.createElement(\"div\"),n.setAttribute(\"id\",t),document.body.appendChild(n),this._googleRecaptcha.load(t,e)}_isPaymentHumanVerificationRequest(e){const{additional_action_required:t,status:n}=e.body||{};return\"additional_action_required\"===n&&t&&\"recaptcha_v2_verification\"===t.type}}function nm(e,t){const{body:n}=e,{errors:i=[]}=n;return new te(e,{message:im(i)||t,errors:i})}function im(e){if(Array.isArray(e))return e.reduce((e,t)=>t&&t.message?[...e,t.message]:e,[]).join(\" \")}class rm extends T{constructor(e){super(e||\"Unable to proceed due to invalid configuration provided for the hosted payment form.\"),this.name=\"InvalidHostedFormConfigError\",this.type=\"invalid_hosted_form_config\"}}class om extends T{constructor(e){super(e||\"Unable to proceed due to an unknown error with the hosted payment form.\"),this.name=\"InvalidHostedFormError\",this.type=\"invalid_hosted_form\"}}class am extends T{constructor(e){super([\"Unable to proceed due to invalid user input values\",...(0,P.flatMap)((0,P.values)(e),e=>(0,P.map)(e,({message:e})=>e))].join(\". \")),this.errors=e,this.name=\"InvalidHostedFormValueError\",this.type=\"invalid_hosted_form_value\"}}!function(e){e.AttachRequested=\"HOSTED_FIELD:ATTACH_REQUESTED\",e.SubmitRequested=\"HOSTED_FIELD:SUBMITTED_REQUESTED\",e.ValidateRequested=\"HOSTED_FIELD:VALIDATE_REQUESTED\",e.StoredCardRequested=\"HOSTED_FIELD:STORED_CARD_REQUESTED\"}(Zp||(Zp={})),function(e){e.AttachSucceeded=\"HOSTED_INPUT:ATTACH_SUCCEEDED\",e.AttachFailed=\"HOSTED_INPUT:ATTACH_FAILED\",e.BinChanged=\"HOSTED_INPUT:BIN_CHANGED\",e.Blurred=\"HOSTED_INPUT:BLURRED\",e.Changed=\"HOSTED_INPUT:CHANGED\",e.CardTypeChanged=\"HOSTED_INPUT:CARD_TYPE_CHANGED\",e.Entered=\"HOSTED_INPUT:ENTERED\",e.Focused=\"HOSTED_INPUT:FOCUSED\",e.SubmitSucceeded=\"HOSTED_INPUT:SUBMIT_SUCCEEDED\",e.SubmitFailed=\"HOSTED_INPUT:SUBMIT_FAILED\",e.Validated=\"HOSTED_INPUT:VALIDATED\",e.StoredCardSucceeded=\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",e.StoredCardFailed=\"HOSTED_INPUT:STORED_CARD_FAILED\"}(Xp||(Xp={}));var sm=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class cm{constructor(e,t,n,i,r,o,a,s,c,d){this._type=e,this._containerId=t,this._placeholder=n,this._accessibilityLabel=i,this._styles=r,this._eventPoster=o,this._eventListener=a,this._detachmentObserver=s,this._checkoutId=c,this._cardInstrument=d,this._iframe=document.createElement(\"iframe\");const u=this._checkoutId?`/checkout/payment/hosted-field?version=1.916.1&checkoutId=${this._checkoutId}`:\"/checkout/payment/hosted-field?version=1.916.1\";this._iframe.src=u,this._iframe.style.border=\"none\",this._iframe.style.height=\"100%\",this._iframe.style.overflow=\"hidden\",this._iframe.style.width=\"100%\"}getType(){return this._type}attach(){return sm(this,void 0,void 0,function*(){const e=document.getElementById(this._containerId);if(!e)throw new rm(\"Unable to proceed because the provided container ID is not valid.\");e.appendChild(this._iframe),this._eventListener.listen();const t=(0,it.R)(this._iframe,\"load\").pipe((0,be.n)(({target:e})=>sm(this,void 0,void 0,function*(){const t=e&&e.contentWindow;if(!t)throw new Error(\"The content window of the iframe cannot be accessed.\");this._eventPoster.setTarget(t),yield this._eventPoster.post({type:Zp.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,cardInstrument:this._cardInstrument,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:Xp.AttachSucceeded,errorType:Xp.AttachFailed})})),(0,ze.s)(1)).toPromise();yield this._detachmentObserver.ensurePresence([this._iframe],t)})}detach(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())}submitForm(e,t){return sm(this,void 0,void 0,function*(){try{const n=this._eventPoster.post({type:Zp.SubmitRequested,payload:{fields:e,data:t}},{successType:Xp.SubmitSucceeded,errorType:Xp.SubmitFailed});return yield this._detachmentObserver.ensurePresence([this._iframe],n)}catch(e){if(this._isSubmitErrorEvent(e)){if(\"hosted_form_error\"===e.payload.error.code)throw new om(e.payload.error.message);if(e.payload.response)throw nm(e.payload.response);throw new Error(e.payload.error.message)}throw e}})}submitStoredCardForm(e,t){return sm(this,void 0,void 0,function*(){const n=this._eventPoster.post({type:Zp.StoredCardRequested,payload:{fields:e,data:t}},{successType:Xp.StoredCardSucceeded,errorType:Xp.StoredCardFailed});return this._detachmentObserver.ensurePresence([this._iframe],n)})}validateForm(){return sm(this,void 0,void 0,function*(){const e=this._eventPoster.post({type:Zp.ValidateRequested},{successType:Xp.Validated}),{payload:t}=yield this._detachmentObserver.ensurePresence([this._iframe],e);if(!t.isValid)throw new am(t.errors)})}_getFontUrls(){const e=\"fonts.googleapis.com\",t=document.querySelectorAll(`link[href*='${e}'][rel='stylesheet']`);return Array.prototype.slice.call(t).filter(t=>et(t.href).hostname===e).filter(e=>(0,P.values)(this._styles).map(e=>e&&e.fontFamily).filter(e=>\"string\"==typeof e).some(t=>t.split(/,\\s/).some(t=>-1!==e.href.indexOf(t.replace(\" \",\"+\"))))).map(e=>e.href)}_isSubmitErrorEvent(e){return e.type===Xp.SubmitFailed}}var dm,um=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class lm{constructor(e,t,n,i,r){this._fields=e,this._eventListener=t,this._payloadTransformer=n,this._eventCallbacks=i,this._paymentHumanVerificationHandler=r,this._handleEnter=({payload:e})=>um(this,void 0,void 0,function*(){try{yield this.validate()}catch(e){if(e instanceof Error&&\"InvalidHostedFormValueError\"!==e.name)throw e}const{onEnter:t=P.noop}=this._eventCallbacks;t(e)});const{onBlur:o=P.noop,onCardTypeChange:a=P.noop,onFocus:s=P.noop,onValidate:c=P.noop}=this._eventCallbacks;this._eventListener.addListener(Xp.Blurred,({payload:e})=>o(e)),this._eventListener.addListener(Xp.CardTypeChanged,({payload:e})=>a(e)),this._eventListener.addListener(Xp.Focused,({payload:e})=>s(e)),this._eventListener.addListener(Xp.Validated,({payload:e})=>c(e)),this._eventListener.addListener(Xp.Entered,this._handleEnter),this._eventListener.addListener(Xp.CardTypeChanged,({payload:e})=>this._cardType=e.cardType),this._eventListener.addListener(Xp.BinChanged,({payload:e})=>this._bin=e.bin)}getBin(){return this._bin}getCardType(){return this._cardType}attach(){return um(this,void 0,void 0,function*(){this._eventListener.listen();const e=this._getFirstField(),t=(0,P.without)(this._fields,e);yield e.attach(),yield Promise.all(t.map(e=>e.attach()))})}detach(){this._eventListener.stopListen(),this._fields.forEach(e=>{e.detach()})}submit(e,t){return um(this,void 0,void 0,function*(){try{return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),this._payloadTransformer.transform(e,t))}catch(t){const n=yield this._paymentHumanVerificationHandler.handle(t);return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),this._payloadTransformer.transform(e,n))}})}submitStoredCard(e){return um(this,void 0,void 0,function*(){return this._getFirstField().submitStoredCardForm(e.fields,e.data)})}validate(){return um(this,void 0,void 0,function*(){return this._getFirstField().validateForm()})}_getFirstField(){const e=this._fields[0];if(!e)throw new rm(\"Unable to proceed because the payment form has no field defined.\");return e}}function hm(e){return Boolean(e.instrumentId)}class pm{constructor(e){this._store=e}transform(e,t){const n=this._store.getState(),i=n.checkout.getCheckout(),r=n.config.getConfig(),o=n.instruments.getInstrumentsMeta(),a=n.order.getOrder(),s=n.order.getOrderMeta(),c=(0,P.omit)(e.paymentData,\"ccExpiry\",\"ccName\",\"ccNumber\",\"ccCvv\");let d=n.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId);\"worldpayaccess\"===(null==d?void 0:d.gateway)&&\"credit_card\"===(null==d?void 0:d.id)&&(d=Object.assign(Object.assign({},d),{id:\"worldpayaccess\",method:\"credit-card\"}));const u=n.paymentMethods.getPaymentMethodsMeta(),l=o&&c&&hm(c)?`${n.payment.getPaymentToken()}, ${o.vaultAccessToken}`:n.payment.getPaymentToken();if(!l)throw new k(C.MissingPaymentToken);return{additionalAction:t,authToken:l,checkout:i,config:r,order:a,orderMeta:s,payment:c,paymentMethod:d,paymentMethodMeta:u}}}class mm{constructor(e){this._store=e}create(e,t,n){const i=Object.keys(t.fields).reduce((i,r)=>{const o=t.fields[r];return o?[...i,new cm(r,o.containerId,o.placeholder||\"\",o.accessibilityLabel||\"\",t.styles||{},new st(e),new kt(e),new ht(new Ue),n,\"instrumentId\"in o?this._getCardInstrument(o.instrumentId):void 0)]:i},[]);return new lm(i,new kt(e),new pm(this._store),(0,P.pick)(t,\"onBlur\",\"onEnter\",\"onFocus\",\"onCardTypeChange\",\"onValidate\"),new tm(Je((0,d.Hb)())))}_getCardInstrument(e){const{instruments:{getCardInstrument:t}}=this._store.getState(),n=t(e);if(!n)throw new k(C.MissingPaymentInstrument);return n}}!function(e){e.SubmitPaymentRequested=\"SUBMIT_PAYMENT_REQUESTED\",e.SubmitPaymentSucceeded=\"SUBMIT_PAYMENT_SUCCEEDED\",e.SubmitPaymentFailed=\"SUBMIT_PAYMENT_FAILED\",e.InitializeOffsitePaymentRequested=\"INITIALIZE_OFFSITE_PAYMENT_REQUESTED\",e.InitializeOffsitePaymentSucceeded=\"INITIALIZE_OFFSITE_PAYMENT_SUCCEEDED\",e.InitializeOffsitePaymentFailed=\"INITIALIZE_OFFSITE_PAYMENT_FAILED\"}(dm||(dm={}));class ym{constructor(e,t,n,i){this._paymentRequestSender=e,this._orderActionCreator=t,this._paymentRequestTransformer=n,this._paymentHumanVerificationHandler=i,this.initializeOffsitePayment=({methodId:e,gatewayId:t,instrumentId:n,target:i,promise:r,shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a})=>s=>{let c;n?c={formattedPayload:{bigpay_token:n}}:o&&(c={formattedPayload:{vault_payment_instrument:o,set_as_default_stored_instrument:a||null}});const d=this._paymentRequestTransformer.transform({gatewayId:t,methodId:e,paymentData:c},s.getState());return(0,l.x)((0,h.of)((0,u.VP)(dm.InitializeOffsitePaymentRequested)),Promise.race([this._paymentRequestSender.initializeOffsitePayment(d,i),r].filter(Boolean)).then(()=>(0,u.VP)(dm.InitializeOffsitePaymentSucceeded))).pipe((0,m.W)(e=>_(dm.InitializeOffsitePaymentFailed,e)))}}submitPayment(e){return t=>(0,l.x)((0,h.of)((0,u.VP)(dm.SubmitPaymentRequested)),(0,p.v)(()=>{return n=this,i=void 0,o=function*(){try{return yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(e,t.getState()))}catch(n){const i=yield this._paymentHumanVerificationHandler.handle(n);return yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(Object.assign(Object.assign({},e),{additionalAction:i}),t.getState()))}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}).pipe((0,be.n)(({body:e})=>(0,l.x)(this._orderActionCreator.loadCurrentOrder()(t),(0,h.of)((0,u.VP)(dm.SubmitPaymentSucceeded,e)))))).pipe((0,m.W)(e=>_(dm.SubmitPaymentFailed,e)))}}class fm{constructor(e){this._client=e}submitPayment(e){return new Promise((t,n)=>{this._client.submitPayment(e,(e,i)=>{e?n(this._transformResponse(e)):t(this._transformResponse(i))})})}initializeOffsitePayment(e,t){return new Promise(()=>{this._client.initializeOffsitePayment(e,null,t)})}_transformResponse(e){return{headers:e.headers,body:e.data,status:e.status,statusText:e.statusText}}}function gm(e,t){let n;return function(e){return void 0!==e.id}(e)?n=e.id:t&&t.length&&(n=t[0].id),{id:n,firstName:e.firstName,lastName:e.lastName,company:e.company,addressLine1:e.address1,addressLine2:e.address2,city:e.city,province:e.stateOrProvince,provinceCode:e.stateOrProvinceCode,postCode:e.postalCode,country:e.country,countryCode:e.countryCode,phone:e.phone,customFields:e.customFields}}const vm=[\"per_item_discount\",\"percentage_discount\",\"per_total_discount\",\"shipping_discount\",\"free_shipping\"];function _m(e){return{code:e.code,discount:e.displayName,discountType:vm.indexOf(e.couponType)}}function bm(e){return{code:e.code,discountedAmount:e.used,remainingBalance:e.remaining,giftCertificate:{balance:e.balance,code:e.code,purchaseDate:e.purchaseDate}}}function Sm(e){const t=[];return(e||[]).forEach(e=>{(e.banners||[]).forEach(e=>{t.push({placeholders:[],discountType:null,message:\"\",messageHtml:e.text})})}),t}function wm(e,t,n=\"id\"){return Object.keys(e).reduce((i,r)=>[...i,...e[r].map(e=>\"giftCertificates\"===r?function(e,t){const n=new rs(t);return{id:e.id,imageUrl:\"\",name:e.name,amount:e.amount,amountAfterDiscount:e.amount,discount:0,integerAmount:n.toInteger(e.amount),integerAmountAfterDiscount:n.toInteger(e.amount),integerUnitPrice:n.toInteger(e.amount),integerUnitPriceAfterDiscount:n.toInteger(e.amount),integerDiscount:0,quantity:1,sender:e.sender,recipient:e.recipient,type:\"ItemGiftCertificateEntity\",attributes:[],variantId:null}}(e,t):function(e,t,n,i=\"id\"){const r=new rs(n);return{id:e[i],imageUrl:e.imageUrl,amount:e.extendedListPrice,amountAfterDiscount:e.extendedSalePrice,discount:e.discountAmount,integerAmount:r.toInteger(e.extendedListPrice),integerAmountAfterDiscount:r.toInteger(e.extendedSalePrice),integerDiscount:r.toInteger(e.discountAmount),integerUnitPrice:r.toInteger(e.listPrice),integerUnitPriceAfterDiscount:r.toInteger(e.salePrice),downloadsPageUrl:e.downloadPageUrl,name:e.name,quantity:e.quantity,brand:e.brand,sku:e.sku,categoryNames:e.categoryNames,variantId:e.variantId,productId:e.productId,attributes:(e.options||[]).map(e=>({name:e.name,value:e.value})),addedByPromotion:e.addedByPromotion,type:t}}(e,function(e){switch(e){case\"physicalItems\":return\"ItemPhysicalEntity\";case\"digitalItems\":return\"ItemDigitalEntity\";case\"giftCertificates\":return\"ItemGiftCertificateEntity\";default:return\"\"}}(r),t,n))],[])}function Cm(e){const t=e.cart.currency.decimalPlaces,n=new rs(t);return{id:e.cart.id,items:wm(e.cart.lineItems,t),currency:e.cart.currency.code,coupon:{discountedAmount:(0,P.reduce)(e.cart.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.cart.coupons.map(_m)},discount:{amount:e.cart.discountAmount,integerAmount:n.toInteger(e.cart.discountAmount)},discountNotifications:Sm(e.promotions),giftCertificate:{totalDiscountedAmount:(0,P.reduce)(e.giftCertificates,(e,t)=>e+t.used,0),appliedGiftCertificates:(0,P.keyBy)(e.giftCertificates.map(bm),\"code\")},shipping:{amount:e.shippingCostTotal,integerAmount:n.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:n.toInteger(e.shippingCostBeforeDiscount),required:(0,P.some)(e.cart.lineItems.physicalItems,e=>e.isShippingRequired)},subtotal:{amount:e.subtotal,integerAmount:n.toInteger(e.subtotal)},storeCredit:{amount:e.customer?e.customer.storeCredit:0},taxSubtotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:n.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.grandTotal,integerAmount:n.toInteger(e.grandTotal)}}}var Im;!function(e){e.APPLEPAY=\"applepay\",e.AMAZON_PAY_V2=\"amazonpay\",e.BRAINTREE_PAYPAL=\"braintreepaypal\",e.BRAINTREE_VENMO=\"braintreevenmo\",e.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",e.GOOGLEPAY_ADYENV2=\"googlepayadyenv2\",e.GOOGLEPAY_ADYENV3=\"googlepayadyenv3\",e.GOOGLEPAY_AUTHORIZENET=\"googlepayauthorizenet\",e.GOOGLEPAY_BNZ=\"googlepaybnz\",e.GOOGLEPAY_BRAINTREE=\"googlepaybraintree\",e.GOOGLEPAY_CHECKOUTCOM=\"googlepaycheckoutcom\",e.GOOGLEPAY_CYBERSOURCEV2=\"googlepaycybersourcev2\",e.GOOGLEPAY_ORBITAL=\"googlepayorbital\",e.GOOGLEPAY_STRIPE=\"googlepaystripe\",e.GOOGLEPAY_STRIPEUPE=\"googlepaystripeupe\",e.GOOGLEPAY_WORLDPAYACCESS=\"googlepayworldpayaccess\",e.PAYPALEXPRESS=\"paypalexpress\"}(Im||(Im={}));const Pm=Im;function Em(e,t){const n=e.firstName||t.firstName||\"\",i=e.lastName||t.lastName||\"\";return{addresses:(e.addresses||[]).map(e=>gm(e)),customerId:e.id,isGuest:e.isGuest,storeCredit:e.storeCredit,email:e.email||t.email||\"\",firstName:n,lastName:i,name:e.fullName||[n,i].join(\" \"),customerGroupName:e.customerGroup&&e.customerGroup.name}}class Om{format(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\")),i=t.slice(0,2),r=4===n.length?n.slice(-2):n?n.slice(0,2):t.slice(2);return e.length<2?t:e.length>3&&!r?i:`${i} / ${r}`}toObject(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\"));return/^\\d+$/.test(t)&&/^\\d+$/.test(n)?{month:1===t.length?`0${t}`:t.slice(0,2),year:2===n.length?`20${n}`:n.slice(0,4)}:{month:\"\",year:\"\"}}}var Am=n(2437);class Tm{format(e){const{card:t}=(0,Am.number)(e);if(!t)return e;const n=(0,P.max)((0,Am.creditCardType)(e).map(e=>(0,P.max)(e.lengths))),i=this.unformat(e).slice(0,n);return t.gaps.filter(e=>i.length>e).reduce((e,t,n)=>[e.slice(0,t+n),e.slice(t+n)].join(\" \"),i)}unformat(e){const{card:t}=(0,Am.number)(e);return t?e.replace(new RegExp(\" \",\"g\"),\"\"):e}}function km(e,t={}){const n=e.currency.decimalPlaces,i=new rs(n);return{id:e.orderId,items:wm(e.lineItems,e.currency.decimalPlaces,\"productId\"),orderId:e.orderId,currency:e.currency.code,customerCanBeCreated:e.customerCanBeCreated,payment:Nm(e.payments,t.payment),subtotal:{amount:e.baseAmount,integerAmount:i.toInteger(e.baseAmount)},coupon:{discountedAmount:(0,P.reduce)(e.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.coupons.map(_m)},discount:{amount:e.discountAmount,integerAmount:i.toInteger(e.discountAmount)},token:t.orderToken,callbackUrl:t.callbackUrl,discountNotifications:[],giftCertificate:Mm(e.payments),socialData:Rm(e),status:e.status,hasDigitalItems:e.hasDigitalItems,isDownloadable:e.isDownloadable,isComplete:e.isComplete,shipping:{amount:e.shippingCostTotal,integerAmount:i.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:i.toInteger(e.shippingCostBeforeDiscount)},storeCredit:{amount:xm(e.payments)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:i.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:i.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.orderAmount,integerAmount:e.orderAmountAsInteger}}}function xm(e){const t=(0,P.find)(e,{providerId:\"storecredit\"});return t?t.amount:0}function Mm(e){const t=(0,P.filter)(e,{providerId:\"giftcertificate\"});return{totalDiscountedAmount:(0,P.reduce)(t,(e,t)=>t.amount+e,0),appliedGiftCertificates:(0,P.keyBy)(t.map(e=>({code:e.detail.code,discountedAmount:e.amount,remainingBalance:e.detail.remaining,giftCertificate:{balance:e.amount+e.detail.remaining,code:e.detail.code,purchaseDate:\"\"}})),\"code\")}}function Nm(e,t={}){const n=(0,P.find)(e,Dm);return n?{id:n.providerId,status:(i=n.detail.step,`PAYMENT_STATUS_${i}`),helpText:n.detail.instructions,returnUrl:t.returnUrl}:{};var i}function Dm(e){return\"giftcertificate\"!==e.providerId&&\"storecredit\"!==e.providerId}function Rm(e){const t={};return[...e.lineItems.physicalItems,...e.lineItems.digitalItems].forEach(e=>{var n;t[e.id]=(n=e,[\"fb\",\"tw\",\"gp\"].reduce((e,t)=>{const i=n.socialMedia&&(0,P.find)(n.socialMedia,e=>e.code===t);return i?(e[t]={name:n.name,description:n.name,image:n.imageUrl,url:i.link,shareText:i.text,sharingLink:i.link,channelName:i.channel,channelCode:i.code},e):e},{}))}),t}function zm(e,t){return{description:e.description,module:e.type,price:e.cost,id:e.id,selected:t,isRecommended:e.isRecommended,imageUrl:e.imageUrl,transitTime:e.transitTime}}class Fm{constructor(){this._cardExpiryFormatter=new Om,this._cardNumberFormatter=new Tm}transform(e,t){const n=t.billingAddress.getBillingAddress(),i=t.checkout.getCheckout(),r=t.customer.getCustomer(),o=t.order.getOrder(),a=t.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId),s=this._mapShippingAddress(t,a),c=t.consignments.getConsignments(),d=t.consignments.getShippingOption(),u=t.config.getStoreConfig(),l=t.config.getContextConfig(),h=t.instruments.getInstrumentsMeta(),p=t.paymentMethods.getPaymentMethodsMeta(),m=t.order.getOrderMeta(),y=r&&n&&Em(r,n),f=h&&e.paymentData&&(hm(e.paymentData)||function(e){const t=e.formattedPayload;return!!t&&(\"string\"==typeof t.bigpay_token||Boolean(t.bigpay_token&&t.bigpay_token.token))}(e.paymentData))?`${t.payment.getPaymentToken()}, ${h.vaultAccessToken}`:t.payment.getPaymentToken();if(!f)throw new k(C.MissingPaymentToken);return{additionalAction:e.additionalAction,authToken:f,customer:y,billingAddress:n&&gm(n),shippingAddress:s&&gm(s,c),shippingOption:d&&zm(d,!0),cart:i&&Cm(i),order:o&&km(o,m),orderMeta:m,payment:e.paymentData,paymentMethod:a&&this._transformPaymentMethod(a),quoteMeta:{request:Object.assign(Object.assign({},p),{geoCountryCode:l&&l.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:(0,P.pick)(u&&u.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}transformWithHostedFormData(e,t,n){const{additionalAction:i,authToken:r,checkout:o,config:a,order:s,orderMeta:c,payment:d={},paymentMethod:u,paymentMethodMeta:l}=t,h=o&&o.consignments[0],p=h&&h.shippingAddress,m=h&&h.selectedShippingOption;return{additionalAction:i,authToken:r,paymentMethod:u&&this._transformPaymentMethod(u),customer:s&&s.billingAddress&&o&&Em(o.customer,s.billingAddress),billingAddress:s&&s.billingAddress&&gm(s.billingAddress),shippingAddress:p&&o&&gm(p,o.consignments),shippingOption:m&&zm(m,!0),cart:o&&Cm(o),order:s&&km(s,c),orderMeta:c,payment:this._transformHostedInputValues(e,d,n),quoteMeta:{request:Object.assign(Object.assign({},l),{geoCountryCode:a&&a.context.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:a&&(0,P.pick)(a.storeConfig.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}_transformPaymentMethod(e){if(\"multi-option\"===e.method&&!e.gateway)return Object.assign(Object.assign({},e),{gateway:e.id});if(e.initializationData&&e.initializationData.gateway)return Object.assign(Object.assign({},e),{id:e.initializationData.gateway});if(\"worldpayaccess\"===e.gateway){if(\"credit_card\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"credit-card\"});if(\"open_banking\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"open_banking\"})}return e.id===Pm.BRAINTREE_VENMO?Object.assign(Object.assign({},e),{id:Pm.BRAINTREE_PAYPAL}):e}_transformHostedInputValues(e,t,n){return\"instrumentId\"in t?Object.assign(Object.assign({},t),{ccCvv:e.cardCodeVerification,ccNumber:e.cardNumberVerification&&this._cardNumberFormatter.unformat(e.cardNumberVerification),hostedFormNonce:n}):Object.assign(Object.assign({},t),{ccCvv:e.cardCode,ccExpiry:this._cardExpiryFormatter.toObject(e.cardExpiry||\"\"),ccName:e.cardName||\"\",ccNumber:this._cardNumberFormatter.unformat(e.cardNumber||\"\"),hostedFormNonce:n})}_mapShippingAddress(e,t){var n,i,r,o;if(t){const a=null===(i=null===(n=t.initializationData)||void 0===n?void 0:n.bopis)||void 0===i?void 0:i.enabled,s=null===(o=null===(r=t.initializationData)||void 0===r?void 0:r.bopis)||void 0===o?void 0:o.requiredAddress,c=e.consignments.getConsignments(),d=null==c?void 0:c.every(e=>e.selectedPickupOption);if(a&&d&&\"none\"===s)return}return e.shippingAddress.getShippingAddress()}}const Bm=\"PAYMENT_TYPE_HOSTED\",jm=e=>{const{type:t,initializationStrategy:n}=e;return t===qp.PPSDK&&\"string\"==typeof(null==n?void 0:n.type)};class Lm extends fe{getByMethod(e){if(!e)return this.get();const t=this._getToken(e),n=[e.gateway,e.id].filter(e=>null!=e).join(\"-\");return this.get(t,n)}_getToken(e){if(jm(e))return qp.PPSDK;if(\"klarna\"===e.gateway)return qp.KLARNAV2;const t=e.gateway||e.id;if(this._hasFactoryForMethod(t))return t;if(\"PAYMENT_TYPE_OFFLINE\"===e.type)return qp.OFFLINE;throw new ye(`'${t}' is not registered.`)}_hasFactoryForMethod(e){return this._hasFactory(e)}}const Um=\"ACKNOWLEDGE\",Vm=\"FINALIZE\";class qm extends ye{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}var Hm=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n};class Gm{constructor(e,t,n,i){this._store=e,this._orderActionCreator=t,this._paymentActionCreator=n,this._hostedFormFactory=i}execute(e,t){var n,i;return this._isHostedPaymentFormEnabled(null===(n=e.payment)||void 0===n?void 0:n.methodId,null===(i=e.payment)||void 0===i?void 0:i.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}finalize(e){return Promise.reject(new Vp)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve(this._store.getState());const t=e&&e.creditCard&&e.creditCard.form,{config:n}=this._store.getState(),{paymentSettings:{bigpayBaseUrl:i=\"\"}={}}=n.getStoreConfig()||{};if(!t)throw new ye;const r=this._hostedFormFactory.create(i,t);return r.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=r,this._store.getState()))}deinitialize(e){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve(this._store.getState())}_executeWithoutHostedForm(e,t){const{payment:n}=e,i=Hm(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new qm([\"payment.paymentData\"]);return this._store.dispatch(this._orderActionCreator.submitOrder(i,t)).then(()=>this._store.dispatch(this._paymentActionCreator.submitPayment(Object.assign(Object.assign({},n),{paymentData:r}))))}_executeWithHostedForm(e,t){const{payment:n}=e,i=Hm(e,[\"payment\"]),r=this._hostedForm;if(!r)throw new $e(Ve.PaymentNotInitialized);if(!n||!n.methodId)throw new qm([\"payment.methodId\"]);return r.validate().then(()=>this._store.dispatch(this._orderActionCreator.submitOrder(i,t))).then(()=>r.submit(n)).then(()=>this._store.dispatch(this._orderActionCreator.loadCurrentOrder()))}_isHostedPaymentFormEnabled(e,t){if(!e)return!1;const{paymentMethods:{getPaymentMethodOrThrow:n}}=this._store.getState();return!0===n(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(e){return!(0,P.values)(e&&e.creditCard&&e.creditCard.form.fields).every(P.isNil)}}class Wm extends Gm{constructor(e,t,n,i,r){super(e,t,n,i),this._formPoster=r}execute(e,t){return super.execute(e,t).catch(e=>e instanceof te&&(0,P.some)(e.body.errors,{code:\"three_d_secure_required\"})?new Promise(()=>{this._formPoster.postForm(e.body.three_ds_result.acs_url,{PaReq:e.body.three_ds_result.payer_auth_request,TermUrl:e.body.three_ds_result.callback_url,MD:e.body.three_ds_result.merchant_data})}):Promise.reject(e))}finalize(e){const t=this._store.getState(),n=t.order.getOrder();return n&&t.payment.getPaymentStatus()===Vm?this._store.dispatch(this._orderActionCreator.finalizeOrder(n.orderId,e)):Promise.reject(new Vp)}}class $m extends T{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}var Ym=n(2586);const Km=\"redirecting\";class Qm{constructor(){this._isRedirecting=this.currentUrlHasRedirectingParam()}isRedirecting(){return this._isRedirecting}setRedirecting(e){e?this.setRedirectingParamOnUrl():this.removeRedirectingParamFromUrl(),this._isRedirecting=e}currentUrlHasRedirectingParam(){return Km in this.getCurrentUrl().query}getCurrentUrl(){return(0,Ym.parseUrl)(window.location.href)}replaceCurrentUrl(e){window.history.replaceState(null,\"\",e)}setRedirectingParamOnUrl(){if(this.currentUrlHasRedirectingParam())return;const e=this.getCurrentUrl(),t=Object.assign(Object.assign({},e),{query:Object.assign(Object.assign({},e.query),{[Km]:\"true\"})});this.replaceCurrentUrl((0,Ym.stringifyUrl)(t))}removeRedirectingParamFromUrl(){this.currentUrlHasRedirectingParam()&&this.replaceCurrentUrl((0,Ym.exclude)(window.location.href,[Km]))}}const Jm=(0,P.overSome)([e=>\"continue\"===(0,P.get)(e,\"type\")&&\"redirect\"===(0,P.get)(e,\"code\")&&(e=>{const t=(0,P.get)(e,\"form_fields\");return(0,P.isString)((0,P.get)(e,\"url\"))&&((0,P.isUndefined)(t)||(0,P.isObject)(t))})((0,P.get)(e,\"parameters\")),e=>\"continue\"===(0,P.get)(e,\"type\")&&\"resubmit_with_human_verification\"===(0,P.get)(e,\"code\")&&(e=>{const t=(0,P.get)(e,\"available_methods\");return(0,P.isArray)(t)})((0,P.get)(e,\"parameters\"))]);class Zm{constructor(e,t){this._formPoster=e,this._humanVerificationHandler=t}handle(e,t){switch(e.code){case\"redirect\":return(({url:e,form_fields:t},n)=>{const i=new Qm;return i.isRedirecting()?(i.setRedirecting(!1),Promise.reject(new $m)):(i.setRedirecting(!0),t?n.postForm(e,t):window.location.assign(e),new Promise(P.noop))})(e.parameters,this._formPoster);case\"resubmit_with_human_verification\":return(({available_methods:e},t,n)=>{return i=void 0,r=void 0,a=function*(){if(!n)throw new Error(\"PPSDK human verification callback function is missing.\");if(!t)throw new Error(\"PPSDK human verification handler is missing.\");if(0===e.length)throw Error(\"Human verification method is missing.\");const{id:i,parameters:r}=e[0],o=yield t.handle(i,r.key);return n(o)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}c((a=a.apply(i,r||[])).next())});var i,r,o,a})(e.parameters,this._humanVerificationHandler,null==t?void 0:t.humanVerification)}}}class Xm{constructor(e){this._continueHandler=e}handle(e,t){const{body:n}=e;return(e=>\"success\"===(0,P.get)(e,\"type\"))(n)?Promise.resolve():(e=>Jm(e))(n)?this._continueHandler.handle(n,null==t?void 0:t.continue):(e=>\"failure\"===(0,P.get)(e.body,\"type\")&&(0,P.isString)((0,P.get)(e.body,\"code\")))(e)?(e=>{return Promise.reject(new te((t=e,Object.assign(Object.assign({},t),{body:{errors:[{code:t.body.code}]}}))));var t})(e):((e=>{(0,P.get)(e.body,\"type\")})(e),(e=>Promise.reject(new te(e)))(e))}}const ey=(e,t)=>new Xm(new Zm(e,t)),ty=\"completed-payments\";class ny{constructor(e){this._browserStorage=e}isCompleted(e){return this.getCompletedPayments().indexOf(e)>=0}setCompleted(e){const t=this.getCompletedPayments();t.push(e),this.setCompletedPayments(t)}getCompletedPayments(){return this._browserStorage.getItem(ty)||[]}setCompletedPayments(e){this._browserStorage.setItem(ty,e)}}var iy,ry=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class oy{constructor(e,t,n,i,r){this._store=e,this._orderActionCreator=t,this._subStrategyRegistry=n,this._paymentResumer=i,this._completedPayments=new ny(r)}execute(e,t){var n;return ry(this,void 0,void 0,function*(){const{bigpayBaseUrl:i}=this._store.getState().config.getStoreConfigOrThrow().paymentSettings;if(!(null==t?void 0:t.methodId))throw new ye('Unable to submit payment because \"options.methodId\" argument is not provided.');const{methodId:r}=t,{payment:o}=e,a=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{_subStrategy:s}=this;if(!s)throw new $e(Ve.PaymentNotInitialized);yield this._store.dispatch(this._orderActionCreator.submitOrder(a,t));const c=null===(n=this._store.getState().order.getOrderMeta())||void 0===n?void 0:n.token;if(!c)throw new k(C.MissingOrder);return yield s.execute({methodId:r,payment:o,bigpayBaseUrl:i,token:c}),this._store.getState()})}finalize(e){return ry(this,void 0,void 0,function*(){const t=this._store.getState().order.getOrderOrThrow();if(t.isComplete)return this._store.getState();const{bigpayBaseUrl:n}=this._store.getState().config.getStoreConfigOrThrow().paymentSettings;if(!(null==e?void 0:e.methodId))throw new ye('Unable to submit payment because \"options.methodId\" argument is not provided.');const i=this._store.getState().order.getPaymentId(e.methodId);if(!i||!t||this._completedPayments.isCompleted(i))throw new Vp;const{orderId:r}=t;return yield this._paymentResumer.resume({paymentId:i,bigpayBaseUrl:n,orderId:r}).catch(e=>{throw this._completedPayments.setCompleted(i),e}),this._store.getState()})}initialize(e){return ry(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new ye('Unable to submit payment because \"options.methodId\" argument is not provided.');const t=((e,t)=>{const n=e.getState().paymentMethods.getPaymentMethod(t);if(n&&jm(n))return n})(this._store,e.methodId);if(!t)throw new $e(Ve.PaymentNotInitialized);if(this._subStrategy=this._subStrategyRegistry.getByMethod(t),!this._subStrategy)throw new $e(Ve.PaymentNotInitialized);return yield this._subStrategy.initialize(e),this._store.getState()})}deinitialize(e){var t;return ry(this,void 0,void 0,function*(){return null===(t=this._subStrategy)||void 0===t||t.deinitialize(),this._store.getState()})}}!function(e){e.CARD=\"card_ui\",e.NONE=\"none\",e.UNSUPPORTED=\"unsupported\"}(iy||(iy={}));const ay=(0,P.cond)([[e=>\"card_ui\"===e.type,(0,P.constant)(iy.CARD)],[e=>\"none\"===e.type,(0,P.constant)(iy.NONE)],[P.stubTrue,(0,P.constant)(iy.UNSUPPORTED)]]);class sy extends fe{getByMethod(e){const t=ay(e.initializationStrategy);return this.get(t)}}var cy=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class dy{constructor(e,t,n,i){this._store=e,this._orderActionCreator=t,this._hostedFormFactory=n,this._ppsdkStepHandler=i}execute(e){return cy(this,void 0,void 0,function*(){const t=this._hostedForm;if(!t)throw new $e(Ve.PaymentNotInitialized);const{additionalAction:n,payment:i}=e;if(!i||!i.methodId)throw new qm([\"payment.methodId\"]);yield t.validate();const{payload:r}=yield t.submit(i,n),{response:o}=r;yield this._ppsdkStepHandler.handle(o,{continue:{humanVerification:t=>cy(this,void 0,void 0,function*(){return this.execute(Object.assign({additionalAction:t},e))})}}),yield this._store.dispatch(this._orderActionCreator.loadCurrentOrder())})}initialize(e){return cy(this,void 0,void 0,function*(){const t=e&&e.creditCard&&e.creditCard.form,{config:n,checkout:i}=this._store.getState(),{paymentSettings:{bigpayBaseUrl:r=\"\"}={}}=n.getStoreConfig()||{},o=i.getCheckoutOrThrow().id;if(!t)throw new ye;const a=t&&this._hostedFormFactory.create(r,t,o);yield a.attach(),this._hostedForm=a})}deinitialize(){this._hostedForm&&this._hostedForm.detach()}}class uy{constructor(e,t){this._requestSender=e,this._stepHandler=t}execute({methodId:e,bigpayBaseUrl:t,token:n}){const i={credentials:!1,body:{payment_method_id:e},headers:{authorization:n,\"X-XSRF-TOKEN\":null}};return this._requestSender.post(`${t}/payments`,i).then(e=>this._stepHandler.handle(e))}initialize(){return Promise.resolve()}deinitialize(){}}const ly=(e,t,n,i,r)=>{const o=new sy;return o.register(iy.CARD,()=>new dy(e,t,r,i)),o.register(iy.NONE,()=>new uy(n,i)),o.register(iy.UNSUPPORTED,()=>{}),o};var hy,py,my=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class yy{constructor(e,t){this._requestSender=e,this._stepHandler=t}resume({paymentId:e,bigpayBaseUrl:t,orderId:n}){return my(this,void 0,void 0,function*(){const i={credentials:!1,headers:{authorization:yield this._getToken(n).catch(()=>{throw new Vp}),\"X-XSRF-TOKEN\":null}};return this._requestSender.get(`${t}/payments/${e}`,i).then(e=>this._stepHandler.handle(e))})}_getToken(e){return my(this,void 0,void 0,function*(){const t={params:{order_id:e}};return this._requestSender.get(\"/api/storefront/payments/auth-token\",t).then(({body:e})=>e.auth_token)})}}class fy{constructor(e){this._requestSender=e}createBuyNowCart(e,{timeout:t}={}){const n=Object.assign({Accept:R.JsonV1},S);return this._requestSender.post(\"/api/storefront/carts\",{body:e,headers:n,timeout:t})}}!function(e){e.UpdatePaymentProviderCustomer=\"UPDATE_PAYMENT_PROVIDER_CUSTOMER\"}(hy||(hy={}));class gy{updatePaymentProviderCustomer(e){return(0,h.of)((0,u.VP)(hy.UpdatePaymentProviderCustomer,e))}}!function(e){e.ForgetCheckoutRemoteCustomerRequested=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_REQUESTED\",e.ForgetCheckoutRemoteCustomerSucceeded=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_SUCCEEDED\",e.ForgetCheckoutRemoteCustomerFailed=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_FAILED\",e.InitializeRemoteBillingRequested=\"INITIALIZE_REMOTE_BILLING_REQUESTED\",e.InitializeRemoteBillingSucceeded=\"INITIALIZE_REMOTE_BILLING_SUCCEEDED\",e.InitializeRemoteBillingFailed=\"INITIALIZE_REMOTE_BILLING_FAILED\",e.InitializeRemoteShippingRequested=\"INITIALIZE_REMOTE_SHIPPING_REQUESTED\",e.InitializeRemoteShippingSucceeded=\"INITIALIZE_REMOTE_SHIPPING_SUCCEEDED\",e.InitializeRemoteShippingFailed=\"INITIALIZE_REMOTE_SHIPPING_FAILED\",e.InitializeRemotePaymentRequested=\"INITIALIZE_REMOTE_PAYMENT_REQUESTED\",e.InitializeRemotePaymentSucceeded=\"INITIALIZE_REMOTE_PAYMENT_SUCCEEDED\",e.InitializeRemotePaymentFailed=\"INITIALIZE_REMOTE_PAYMENT_FAILED\",e.LoadRemoteSettingsRequested=\"LOAD_REMOTE_SETTINGS_REQUESTED\",e.LoadRemoteSettingsSucceeded=\"LOAD_REMOTE_SETTINGS_SUCCEEDED\",e.LoadRemoteSettingsFailed=\"LOAD_REMOTE_SETTINGS_FAILED\",e.SignOutRemoteCustomerRequested=\"SIGN_OUT_REMOTE_CUSTOMER_REQUESTED\",e.SignOutRemoteCustomerSucceeded=\"SIGN_OUT_REMOTE_CUSTOMER_SUCCEEDED\",e.SignOutRemoteCustomerFailed=\"SIGN_OUT_REMOTE_CUSTOMER_FAILED\",e.UpdateRemoteCheckout=\"UPDATE_REMOTE_CHECKOUT\"}(py||(py={}));var vy;class _y{constructor(e,t){this._remoteCheckoutRequestSender=e,this._checkoutActionCreator=t}initializeBilling(e,t,n){return O.c.create(i=>{i.next((0,u.VP)(py.InitializeRemoteBillingRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializeBilling(e,t,n).then(({body:t={}})=>{i.next((0,u.VP)(py.InitializeRemoteBillingSucceeded,t,{methodId:e})),i.complete()}).catch(t=>{i.error((0,u.fQ)(py.InitializeRemoteBillingFailed,t,{methodId:e}))})})}initializeShipping(e,t,n){return O.c.create(i=>{i.next((0,u.VP)(py.InitializeRemoteShippingRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializeShipping(e,t,n).then(({body:t={}})=>{i.next((0,u.VP)(py.InitializeRemoteShippingSucceeded,t,{methodId:e})),i.complete()}).catch(t=>{i.error((0,u.fQ)(py.InitializeRemoteShippingFailed,t,{methodId:e}))})})}initializePayment(e,t,n){return O.c.create(i=>{i.next((0,u.VP)(py.InitializeRemotePaymentRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializePayment(e,t,n).then(({body:t={}})=>{i.next((0,u.VP)(py.InitializeRemotePaymentSucceeded,t,{methodId:e})),i.complete()}).catch(t=>{i.error((0,u.fQ)(py.InitializeRemotePaymentFailed,t,{methodId:e}))})})}loadSettings(e,t){return O.c.create(n=>{n.next((0,u.VP)(py.LoadRemoteSettingsRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.loadSettings(e,t).then(({body:t})=>{n.next((0,u.VP)(py.LoadRemoteSettingsSucceeded,t,{methodId:e})),n.complete()}).catch(t=>{n.error((0,u.fQ)(py.LoadRemoteSettingsFailed,t,{methodId:e}))})})}signOut(e,t){return O.c.create(n=>{n.next((0,u.VP)(py.SignOutRemoteCustomerRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.signOut(e,t).then(()=>{n.next((0,u.VP)(py.SignOutRemoteCustomerSucceeded,void 0,{methodId:e})),n.complete()}).catch(t=>{n.error((0,u.fQ)(py.SignOutRemoteCustomerFailed,t,{methodId:e}))})})}forgetCheckout(e,t){return(0,l.x)((0,h.of)((0,u.VP)(py.ForgetCheckoutRemoteCustomerRequested,void 0,{methodId:e})),(0,p.v)(()=>{return n=this,i=void 0,o=function*(){return yield this._remoteCheckoutRequestSender.forgetCheckout(t),yield this._checkoutActionCreator.loadCurrentCheckout(),(0,u.VP)(py.ForgetCheckoutRemoteCustomerSucceeded,void 0,{methodId:e})},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe((0,m.W)(t=>_(py.ForgetCheckoutRemoteCustomerFailed,t,{methodId:e})))}updateCheckout(e,t){return(0,u.VP)(py.UpdateRemoteCheckout,t,{methodId:e})}}class by{constructor(e){this._requestSender=e}initializeBilling(e,t,{timeout:n}={}){const i=`/remote-checkout/${e}/billing`;return this._requestSender.get(i,{params:t,timeout:n,headers:S})}initializeShipping(e,t,{timeout:n}={}){const i=`/remote-checkout/${e}/shipping`;return this._requestSender.get(i,{params:t,timeout:n,headers:S})}initializePayment(e,t,{timeout:n}={}){const i=`/remote-checkout/${e}/payment`;return this._requestSender.get(i,{params:t,timeout:n,headers:S})}loadSettings(e,{timeout:t}={}){const n=`/remote-checkout/${e}/settings`;return this._requestSender.get(n,{timeout:t,headers:S})}signOut(e,{timeout:t}={}){const n=`/remote-checkout/${e}/signout`;return this._requestSender.get(n,{timeout:t,headers:S})}generateToken({timeout:e}={}){return this._requestSender.get(\"/remote-checkout-token\",{timeout:e,headers:S})}trackAuthorizationEvent({timeout:e}={}){return this._requestSender.post(\"/remote-checkout/events/shopper-checkout-service-provider-authorization-requested\",{timeout:e,headers:S})}forgetCheckout({timeout:e}={}){return this._requestSender.post(\"/remote-checkout/forget-checkout\",{timeout:e,headers:S})}}!function(e){e.CreateConsignmentsRequested=\"CREATE_CONSIGNMENTS_REQUESTED\",e.CreateConsignmentsSucceeded=\"CREATE_CONSIGNMENTS_SUCCEEDED\",e.CreateConsignmentsFailed=\"CREATE_CONSIGNMENTS_FAILED\",e.UpdateConsignmentRequested=\"UPDATE_CONSIGNMENT_REQUESTED\",e.UpdateConsignmentSucceeded=\"UPDATE_CONSIGNMENT_SUCCEEDED\",e.UpdateConsignmentFailed=\"UPDATE_CONSIGNMENT_FAILED\",e.DeleteConsignmentRequested=\"DELETE_CONSIGNMENT_REQUESTED\",e.DeleteConsignmentSucceeded=\"DELETE_CONSIGNMENT_SUCCEEDED\",e.DeleteConsignmentFailed=\"DELETE_CONSIGNMENT_FAILED\",e.UpdateShippingOptionRequested=\"UPDATE_SHIPPING_OPTION_REQUESTED\",e.UpdateShippingOptionSucceeded=\"UPDATE_SHIPPING_OPTION_SUCCEEDED\",e.UpdateShippingOptionFailed=\"UPDATE_SHIPPING_OPTION_FAILED\",e.LoadShippingOptionsRequested=\"LOAD_SHIPPING_OPTIONS_REQUESTED\",e.LoadShippingOptionsSucceeded=\"LOAD_SHIPPING_OPTIONS_SUCCEEDED\",e.LoadShippingOptionsFailed=\"LOAD_SHIPPING_OPTIONS_FAILED\"}(vy||(vy={}));class Sy{constructor(e,t){this._consignmentRequestSender=e,this._checkoutRequestSender=t}unassignItemsByAddress(e,t){return n=>{const i=n.getState();if(!i.checkout.getCheckout())throw new k(C.MissingCheckout);const r=this._consignmentHasAddress(e)?e.address:e.shippingAddress,o=i.consignments.getConsignmentByAddress(r);if(!o)throw new ye(\"No consignment found for the specified address\");const a=this._removeLineItems(e.lineItems,o,i.cart.getCart());return a.length?this.updateConsignment({id:o.id,address:r,lineItems:a},t)(n):this.deleteConsignment(o.id,t)(n)}}assignItemsByAddress(e,t){return n=>{const i=n.getState(),r=this._consignmentHasAddress(e)?e.address:e.shippingAddress,o=i.consignments.getConsignmentByAddress(r);return this._createOrUpdateConsignment({id:o&&o.id,address:r,lineItems:this._addLineItems(e.lineItems,o,i.cart.getCart())},t)(n)}}selectShippingOption(e,t){return n=>O.c.create(i=>{const r=n.getState(),o=r.checkout.getCheckout(),a=r.consignments.getConsignments();if(!o)throw new k(C.MissingCheckout);if(!a||!a.length)throw new k(C.MissingConsignments);const s={id:a[0].id,shippingOptionId:e},c={id:a[0].id};i.next((0,u.VP)(vy.UpdateShippingOptionRequested,void 0,c)),this._consignmentRequestSender.updateConsignment(o.id,s,t).then(({body:e})=>{i.next((0,u.VP)(vy.UpdateShippingOptionSucceeded,e,c)),i.complete()}).catch(e=>{i.error((0,u.fQ)(vy.UpdateShippingOptionFailed,e,c))})})}loadShippingOptions(e){return t=>O.c.create(n=>{const i=t.getState().checkout.getCheckout();if(!i)throw new k(C.MissingCheckout);n.next((0,u.VP)(vy.LoadShippingOptionsRequested)),this._checkoutRequestSender.loadCheckout(i.id,Object.assign(Object.assign({},e),{params:{include:[ce.AvailableShippingOptions]}})).then(({body:e})=>{n.next((0,u.VP)(vy.LoadShippingOptionsSucceeded,e)),n.complete()}).catch(e=>{n.error((0,u.fQ)(vy.LoadShippingOptionsFailed,e))})})}updateAddress(e,t){return n=>{const i=this._getUpdateAddressRequestBody(e,n),r=n.getState().consignments.getConsignments();return r&&r.length&&(i.id=r[0].id),this._createOrUpdateConsignment(i,t)(n)}}createConsignments(e,t){return n=>O.c.create(i=>{const r=n.getState().checkout.getCheckout();if(!r||!r.id)throw new k(C.MissingCheckout);i.next((0,u.VP)(vy.CreateConsignmentsRequested)),this._consignmentRequestSender.createConsignments(r.id,e,t).then(({body:e})=>{i.next((0,u.VP)(vy.CreateConsignmentsSucceeded,e)),i.complete()}).catch(e=>{i.error((0,u.fQ)(vy.CreateConsignmentsFailed,e))})})}updateConsignment(e,t){return n=>O.c.create(i=>{const r=n.getState().checkout.getCheckout();if(!r||!r.id)throw new k(C.MissingCheckout);const o={id:e.id};i.next((0,u.VP)(vy.UpdateConsignmentRequested,void 0,o)),this._consignmentRequestSender.updateConsignment(r.id,e,t).then(({body:e})=>{i.next((0,u.VP)(vy.UpdateConsignmentSucceeded,e,o)),i.complete()}).catch(e=>{i.error((0,u.fQ)(vy.UpdateConsignmentFailed,e,o))})})}deleteConsignment(e,t){return n=>O.c.create(i=>{const r=n.getState().checkout.getCheckout(),o={id:e};if(!r||!r.id)throw new k(C.MissingCheckout);i.next((0,u.VP)(vy.DeleteConsignmentRequested,void 0,o)),this._consignmentRequestSender.deleteConsignment(r.id,e,t).then(({body:e})=>{i.next((0,u.VP)(vy.DeleteConsignmentSucceeded,e,o)),i.complete()}).catch(e=>{i.error((0,u.fQ)(vy.DeleteConsignmentFailed,e,o))})})}updateShippingOption(e,t){return n=>O.c.create(i=>{var r;const o=n.getState().checkout.getCheckout(),a=n.getState().consignments.getConsignmentById(e.id);if((null===(r=null==a?void 0:a.selectedShippingOption)||void 0===r?void 0:r.id)===e.shippingOptionId)return void i.complete();if(!o||!o.id)throw new k(C.MissingCheckout);const s={id:e.id};i.next((0,u.VP)(vy.UpdateShippingOptionRequested,void 0,s)),this._consignmentRequestSender.updateConsignment(o.id,e,t).then(({body:e})=>{i.next((0,u.VP)(vy.UpdateShippingOptionSucceeded,e,s)),i.complete()}).catch(e=>{i.error((0,u.fQ)(vy.UpdateShippingOptionFailed,e,s))})})}_createOrUpdateConsignment(e,t){return n=>{const i=n.getState().checkout.getCheckout();if(!i||!i.id)throw new k(C.MissingCheckout);return this._isUpdateConsignmentRequest(e)?this.updateConsignment(e,t)(n):this.createConsignments([e],t)(n)}}_getUpdateAddressRequestBody(e,t){const n=t.getState().cart.getCart();if(!n)throw new k(C.MissingCart);const{physicalItems:i,customItems:r=[]}=n.lineItems;return{address:e,lineItems:[...i,...r].map(e=>({itemId:e.id,quantity:e.quantity}))}}_removeLineItems(e,t,n){if(!n)throw new k(C.MissingCart);return this._hydrateLineItems(t.lineItemIds,n).map(t=>{const n=(0,P.find)(e,e=>e.itemId===t.itemId);return Object.assign(Object.assign({},t),{quantity:n?t.quantity-n.quantity:t.quantity})}).filter(e=>e.quantity>0)}_addLineItems(e,t,n){if(!t)return e;if(!n)throw new k(C.MissingCart);return e.concat(this._hydrateLineItems(t.lineItemIds,n)).filter(e=>e.quantity>0)}_hydrateLineItems(e,t){return e.map(e=>{const n=(0,P.find)(t.lineItems.physicalItems,t=>t.id===e);return{itemId:e,quantity:n?n.quantity:0}})}_isUpdateConsignmentRequest(e){return!!e.id}_consignmentHasAddress(e){return\"object\"==typeof e&&\"address\"in e}}const wy=[\"consignments.availableShippingOptions\",\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"promotions.banners\"];class Cy{constructor(e){this._requestSender=e}createConsignments(e,t,{timeout:n,params:{include:i}={}}={}){const r=`/api/storefront/checkouts/${e}/consignments`,o=Object.assign({Accept:R.JsonV1},S);return this._requestSender.post(r,{body:t,params:{include:Te(wy,i)},headers:o,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new D;throw e})}updateConsignment(e,t,{timeout:n,params:{include:i}={}}={}){const{id:r}=t,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"id\"]),a=`/api/storefront/checkouts/${e}/consignments/${r}`,s=Object.assign({Accept:R.JsonV1},S);return this._requestSender.put(a,{body:o,params:{include:Te(wy,i)},headers:s,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new D;throw e})}deleteConsignment(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/consignments/${t}`,r=Object.assign({Accept:R.JsonV1},S),o=ue(wy);return this._requestSender.delete(i,{params:{include:o},headers:r,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new D;throw e})}}var Iy,Py;!function(e){e.LoadShippingCountriesRequested=\"LOAD_SHIPPING_COUNTRIES_REQUESTED\",e.LoadShippingCountriesSucceeded=\"LOAD_SHIPPING_COUNTRIES_SUCCEEDED\",e.LoadShippingCountriesFailed=\"LOAD_SHIPPING_COUNTRIES_FAILED\"}(Iy||(Iy={}));class Ey{constructor(e,t){this._shippingCountryRequestSender=e,this._store=t}loadCountries(e){const{checkout:t}=this._store.getState(),n=t.getCheckout(),i=n?n.channelId:null;return O.c.create(t=>{t.next((0,u.VP)(Iy.LoadShippingCountriesRequested)),this._shippingCountryRequestSender.loadCountries(i,e).then(e=>{t.next((0,u.VP)(Iy.LoadShippingCountriesSucceeded,e.body.data)),t.complete()}).catch(e=>{t.error((0,u.fQ)(Iy.LoadShippingCountriesFailed,e))})})}}class Oy{constructor(e,t){this._requestSender=e,this._config=t}loadCountries(e,{timeout:t}={}){const n=\"/internalapi/v1/shipping/countries\"+(e?`?channel_id=${e}`:\"\"),i=Object.assign({\"Accept-Language\":this._config.locale},S);return this._requestSender.get(n,{headers:i,timeout:t})}}!function(e){e.ApplyStoreCreditRequested=\"APPLY_STORE_CREDIT_REQUESTED\",e.ApplyStoreCreditSucceeded=\"APPLY_STORE_CREDIT_SUCCEEDED\",e.ApplyStoreCreditFailed=\"APPLY_STORE_CREDIT_FAILED\"}(Py||(Py={}));var Ay;class Ty{constructor(e){this._storeCreditRequestSender=e}applyStoreCredit(e,t){return n=>(0,l.x)((0,h.of)((0,u.VP)(Py.ApplyStoreCreditRequested)),(0,p.v)(()=>{return i=this,r=void 0,a=function*(){var i;const r=n.getState().checkout.getCheckout();if(!r)throw new k(C.MissingCheckout);const{id:o}=r,a=null!==(i=null==t?void 0:t.version)&&void 0!==i?i:r.version,{body:s}=yield e?this._storeCreditRequestSender.applyStoreCredit(o,Object.assign(Object.assign({},t),{version:a})):this._storeCreditRequestSender.removeStoreCredit(o,Object.assign(Object.assign({},t),{version:a}));return(0,u.VP)(Py.ApplyStoreCreditSucceeded,s)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}c((a=a.apply(i,r||[])).next())});var i,r,o,a})).pipe((0,m.W)(e=>_(Py.ApplyStoreCreditFailed,e)))}}class ky{constructor(e){this._requestSender=e}applyStoreCredit(e,{timeout:t,version:n}={}){const i=`/api/storefront/checkouts/${e}/store-credit`,r=Object.assign({Accept:R.JsonV1},S);return this._requestSender.post(i,{headers:r,timeout:t,params:{include:ue(se)},body:{version:n}})}removeStoreCredit(e,{timeout:t,version:n}={}){const i=`/api/storefront/checkouts/${e}/store-credit`,r=Object.assign({Accept:R.JsonV1},S);return this._requestSender.delete(i,{headers:r,timeout:t,params:{include:ue(se)},body:{version:n}})}}!function(e){e.UpdateSubscriptionsRequested=\"UPDATE_SUBSCRIPTIONS_REQUESTED\",e.UpdateSubscriptionsSucceeded=\"UPDATE_SUBSCRIPTIONS_SUCCEEDED\",e.UpdateSubscriptionsFailed=\"UPDATE_SUBSCRIPTIONS_FAILED\"}(Ay||(Ay={}));class xy extends te{constructor(e){super(e),this.name=\"UpdateSubscriptionsError\",this.type=\"update_subscriptions\"}}class My{constructor(e){this._subscriptionsRequestSender=e}updateSubscriptions(e,t){return(0,l.x)((0,h.of)((0,u.VP)(Ay.UpdateSubscriptionsRequested)),(0,p.v)(()=>{return n=this,i=void 0,o=function*(){const{body:n}=yield this._subscriptionsRequestSender.updateSubscriptions(e,t);return(0,u.VP)(Ay.UpdateSubscriptionsSucceeded,n)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe((0,m.W)(e=>_(Ay.UpdateSubscriptionsFailed,new xy(e))))}}class Ny{constructor(e){this._requestSender=e}updateSubscriptions(e,{timeout:t}={}){const n=Object.assign({Accept:R.JsonV1},S);return this._requestSender.post(\"/api/storefront/subscriptions\",{body:e,headers:n,timeout:t})}}function Dy(e){return(0,P.isPlainObject)(e)}const Ry=(0,P.memoize)(e=>Array.isArray(e)?e.map(e=>zy(e)):Dy(e)?Object.keys(e).reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:zy(e[n])}),{}):e);Ry.cache=new WeakMap;const zy=e=>\"object\"==typeof e&&null!==e?Ry(e):e;function Fy(e){return(...t)=>zy(e(...t))}function By({billingAddress:{getBillingAddress:e,getBillingAddressOrThrow:t},cart:{getCart:n,getCartOrThrow:i,getLocale:r},checkout:{getCheckout:o,getCheckoutOrThrow:a,getOutstandingBalance:s},config:{getContextConfig:c,getHost:d,getLocale:u,getStoreConfig:l,getStoreConfigOrThrow:h,getConfig:p},consignments:{getConsignments:m,getConsignmentsOrThrow:y},countries:{getCountries:f},customer:{getCustomer:g,getCustomerOrThrow:v},instruments:{getCardInstrument:_,getCardInstrumentOrThrow:b,getInstruments:S,getInstrumentsMeta:w},order:{getOrder:C,getOrderOrThrow:I,getOrderMeta:P},payment:{getPaymentToken:E,getPaymentTokenOrThrow:O,getPaymentId:A,getPaymentIdOrThrow:T,getPaymentStatus:k,getPaymentStatusOrThrow:x,getPaymentRedirectUrl:M,getPaymentRedirectUrlOrThrow:N,isPaymentDataRequired:D},paymentMethods:{getPaymentMethod:R,getPaymentMethodOrThrow:z,getPaymentMethodsMeta:F},paymentProviderCustomer:{getPaymentProviderCustomer:B,getPaymentProviderCustomerOrThrow:j},paymentStrategies:{isInitialized:L},shippingAddress:{getShippingAddress:U,getShippingAddressOrThrow:V,getShippingAddresses:q,getShippingAddressesOrThrow:H},shippingCountries:{getShippingCountries:G}}){return{getHost:Fy(d),getLocale:Fy(u),getCartLocale:Fy(r),getBillingAddress:Fy(e),getBillingAddressOrThrow:Fy(t),getCart:Fy(n),getCartOrThrow:Fy(i),getCheckout:Fy(o),getCheckoutOrThrow:Fy(a),getCountries:Fy(f),getStoreConfig:Fy(l),getStoreConfigOrThrow:Fy(h),getConfig:Fy(p),getConsignments:Fy(m),getConsignmentsOrThrow:Fy(y),getContextConfig:Fy(c),getCustomer:Fy(g),getCustomerOrThrow:Fy(v),getCardInstrument:Fy(_),getInstruments:Fy(S),getCardInstrumentOrThrow:Fy(b),getOrder:Fy(C),getOrderOrThrow:Fy(I),getOrderMeta:Fy(P),getInstrumentsMeta:Fy(w),getPaymentToken:E,getPaymentTokenOrThrow:O,getPaymentId:A,getPaymentIdOrThrow:T,getPaymentStatus:k,getPaymentStatusOrThrow:x,getPaymentRedirectUrl:M,getPaymentRedirectUrlOrThrow:N,getPaymentMethod:Fy(R),getPaymentMethodOrThrow:Fy(z),getPaymentMethodsMeta:Fy(F),getPaymentProviderCustomer:Fy(B),getPaymentProviderCustomerOrThrow:Fy(j),getShippingAddress:Fy(U),getShippingAddressOrThrow:Fy(V),getShippingAddresses:Fy(q),getShippingAddressesOrThrow:Fy(H),getShippingCountries:Fy(G),getOutstandingBalance:Fy(s),isPaymentDataRequired:D,isPaymentMethodInitialized:L}}var jy,Ly=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Uy{constructor(e,t,n,i,r,o,a,s,c,d,u,l,h,p,m,y,f,g,v,_){this._store=e,this._storeProjectionFactory=t,this._checkoutActionCreator=n,this._checkoutValidator=i,this._hostedFormFactory=r,this._orderActionCreator=o,this._billingAddressActionCreator=a,this._consignmentActionCreator=s,this._paymentMethodActionCreator=c,this._paymentActionCreator=d,this._paymentHumanVerificationHandler=u,this._customerActionCreator=l,this._cartRequestSender=h,this._storeCreditActionCreator=p,this._couponActionCreator=m,this._spamProtectionActionCreator=y,this._paymentProviderCustomerActionCreator=f,this._shippingCountryActionCreator=g,this._remoteCheckoutActionCreator=v,this._paymentStrategyWidgetActionCreator=_,this._storeProjection=this._storeProjectionFactory.create(this._store)}createHostedForm(e,t){const n=this._storeProjection.getState().getCheckoutOrThrow().id;return this._hostedFormFactory.create(e,t,n)}subscribe(e,...t){return this._storeProjection.subscribe(e,...t)}getState(){return this._storeProjection.getState()}initializeOffsitePayment(e){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentActionCreator.initializeOffsitePayment(e)),this._storeProjection.getState()})}loadCheckout(e){return Ly(this,void 0,void 0,function*(){return e?yield this._store.dispatch(this._checkoutActionCreator.loadCheckout(e)):yield this._store.dispatch(this._checkoutActionCreator.loadCurrentCheckout()),this._storeProjection.getState()})}loadDefaultCheckout(){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()),this._storeProjection.getState()})}loadPaymentMethod(e,t){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e,t)),this._storeProjection.getState()})}loadPaymentMethods(e){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethods(e)),this._storeProjection.getState()})}submitOrder(e,t){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._orderActionCreator.submitOrder(e,t)),this._storeProjection.getState()})}submitPayment(e){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentActionCreator.submitPayment(e)),this._storeProjection.getState()})}finalizeOrder(e){return Ly(this,void 0,void 0,function*(){const{order:{getOrderOrThrow:t}}=this._store.getState();return yield this._store.dispatch(this._orderActionCreator.finalizeOrder(t().orderId,e)),this._storeProjection.getState()})}updateBillingAddress(e){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(e)),this._storeProjection.getState()})}updateShippingAddress(e){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.updateAddress(e)),this._storeProjection.getState()})}selectShippingOption(e,t){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t)),this._storeProjection.getState()})}signInCustomer(e,t){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._customerActionCreator.signInCustomer(e,t)),this._storeProjection.getState()})}signOutCustomer(e){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._customerActionCreator.signOutCustomer(e)),this._storeProjection.getState()})}createBuyNowCart(e,t){return Ly(this,void 0,void 0,function*(){const{body:n}=yield this._cartRequestSender.createBuyNowCart(e,t);return n})}applyStoreCredit(e,t){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._storeCreditActionCreator.applyStoreCredit(e,t)),this._storeProjection.getState()})}applyCoupon(e,t){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._couponActionCreator.applyCoupon(e,t)),this._storeProjection.getState()})}removeCoupon(e,t){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._couponActionCreator.removeCoupon(e,t)),this._storeProjection.getState()})}verifyCheckoutSpamProtection(){return Ly(this,void 0,void 0,function*(){const{checkout:e}=this._store.getState(),{shouldExecuteSpamCheck:t}=e.getCheckoutOrThrow();return t&&(yield this._store.dispatch(this._spamProtectionActionCreator.verifyCheckoutSpamProtection())),this._storeProjection.getState()})}loadCurrentOrder(e){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._orderActionCreator.loadCurrentOrder(e)),this._storeProjection.getState()})}updatePaymentProviderCustomer(e){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(e)),this._storeProjection.getState()})}loadShippingCountries(e){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._shippingCountryActionCreator.loadCountries(e)),this._storeProjection.getState()})}deleteConsignment(e,t){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.deleteConsignment(e,t)),this._storeProjection.getState()})}initializePayment(e,t,n){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.initializePayment(e,t,n)),this._storeProjection.getState()})}forgetCheckout(e,t){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.forgetCheckout(e,t)),this._storeProjection.getState()})}remoteCheckoutSignOut(e,t){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.signOut(e,t)),this._storeProjection.getState()})}validateCheckout(e,t){return Ly(this,void 0,void 0,function*(){yield this._checkoutValidator.validate(e,t)})}handlePaymentHumanVerification(e,t){return Ly(this,void 0,void 0,function*(){return\"string\"==typeof e?this._paymentHumanVerificationHandler.handle(e,null!=t?t:\"\"):this._paymentHumanVerificationHandler.handle(e)})}widgetInteraction(e){return Ly(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentStrategyWidgetActionCreator.widgetInteraction(e),{queueId:\"widgetInteraction\"}),this._storeProjection.getState()})}}class Vy{constructor(e){this._transformSelectors=e}create(e){return L(e,this._transformSelectors)}}function qy(e,t){const{config:{getHost:n,getLocale:i}}=e.getState();t||(t=(0,o.createRequestSender)({host:n()}));const r=new Vy(By),a=new Me(new ke(t),new X(new re(t)),new Ne(new De(t))),s=new Yp(new ke(t)),c=new mm(e),u=new kp(new Ap(t),new Yp(new ke(t))),l=new N(new F(t),new My(new Ny(t))),h=new Sy(new Cy(t),new ke(t)),p=new Fp(new Bp(t),new Up(t)),m=new ym(new fm(Mp(e)),u,new Fm,new tm(Je((0,d.Hb)()))),y=new tm(Je((0,d.Hb)())),f=new Pe(new Ee(t),a,new Le(Je((0,d.Hb)()),new Ze(t))),g=new Ty(new ky(t)),v=new ae(new le(t)),_=Je((0,d.Hb)()),b=new Ze(t),S=new Le(_,b),w=new fy(t),C=new gy,I=new Ey(new Oy(t,{locale:i()}),e),P=new _y(new by(t),a),E=new Hp;return new Uy(e,r,a,s,c,u,l,h,p,m,y,f,w,g,v,S,C,I,P,E)}!function(e){e.LoadInstrumentsRequested=\"LOAD_INSTRUMENTS_REQUESTED\",e.LoadInstrumentsSucceeded=\"LOAD_INSTRUMENTS_SUCCEEDED\",e.LoadInstrumentsFailed=\"LOAD_INSTRUMENTS_FAILED\",e.DeleteInstrumentRequested=\"DELETE_INSTRUMENT_REQUESTED\",e.DeleteInstrumentSucceeded=\"DELETE_INSTRUMENT_SUCCEEDED\",e.DeleteInstrumentFailed=\"DELETE_INSTRUMENT_FAILED\"}(jy||(jy={}));class Hy{constructor(e){this._instrumentRequestSender=e}loadInstruments(){return e=>O.c.create(t=>{t.next((0,u.VP)(jy.LoadInstrumentsRequested));const n=this._getSessionContext(e),i=this._getCurrentAccessToken(e),r=this._getShippingAddress(e);return this._getValidAccessToken(i).then(e=>this._instrumentRequestSender.loadInstruments(Object.assign(Object.assign({},n),{authToken:e.vaultAccessToken}),r).then(({body:n})=>{t.next((0,u.VP)(jy.LoadInstrumentsSucceeded,n,e)),t.complete()})).catch(e=>{t.error((0,u.fQ)(jy.LoadInstrumentsFailed,e))})})}deleteInstrument(e){return t=>O.c.create(n=>{n.next((0,u.VP)(jy.DeleteInstrumentRequested,void 0,{instrumentId:e}));const i=this._getSessionContext(t),r=this._getCurrentAccessToken(t);return this._getValidAccessToken(r).then(t=>this._instrumentRequestSender.deleteInstrument(Object.assign(Object.assign({},i),{authToken:t.vaultAccessToken}),e).then(({body:i})=>{n.next((0,u.VP)(jy.DeleteInstrumentSucceeded,i,Object.assign({instrumentId:e},t))),n.complete()})).catch(t=>{n.error((0,u.fQ)(jy.DeleteInstrumentFailed,t,{instrumentId:e}))})})}_isValidVaultAccessToken(e){if(!e||!e.vaultAccessToken)return!1;return function(e){const t=new Date(e.getTime());return t.setMinutes(e.getMinutes()+2),t}(new Date(e.vaultAccessExpiry)).valueOf()>Date.now()}_getCurrentAccessToken(e){const{instruments:t}=e.getState(),n=t.getInstrumentsMeta();if(n)return{vaultAccessToken:n.vaultAccessToken,vaultAccessExpiry:n.vaultAccessExpiry}}_getValidAccessToken(e){return e&&this._isValidVaultAccessToken(e)?Promise.resolve(e):this._instrumentRequestSender.getVaultAccessToken().then(({body:e})=>e)}_getShippingAddress(e){const t=e.getState(),n=t.shippingAddress.getShippingAddresses();return n.length>1?n:t.shippingAddress.getShippingAddress()}_getSessionContext(e){const t=e.getState(),n=t.config.getStoreConfig(),i=t.cart.getCart();if(!n)throw new k(C.MissingCheckoutConfig);if(!i)throw new k(C.MissingCart);const{customerId:r}=i,{storeId:o}=n.storeProfile,{code:a}=n.shopperCurrency.isTransactional?n.shopperCurrency:n.currency;return{customerId:r,storeId:o,currencyCode:a}}}var Gy,Wy,$y=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n};class Yy{transformResponse(e){const t=this._transformResponse(e),{body:n}=t,i=$y(t,[\"body\"]);return Object.assign(Object.assign({},i),{body:{vaultedInstruments:this._transformVaultedInstruments(n.vaulted_instruments)}})}transformErrorResponse(e){return this._transformResponse(e)}transformVaultAccessResponse(e){return Object.assign(Object.assign({},e),{body:{vaultAccessToken:e.body.data.token,vaultAccessExpiry:e.body.data.expires_at}})}_transformVaultedInstruments(e=[]){return e.map(e=>this._isPayPalInstrument(e)?function(e){return{bigpayToken:e.bigpay_token,defaultInstrument:e.default_instrument,provider:e.provider,externalId:e.external_id,trustedShippingAddress:e.trusted_shipping_address,method:\"paypal\",type:\"account\"}}(e):this._isBankInstrument(e)?function(e){return{bigpayToken:e.bigpay_token,defaultInstrument:e.default_instrument,provider:e.provider,trustedShippingAddress:e.trusted_shipping_address,accountNumber:e.account_number,issuer:e.issuer,iban:e.iban,method:e.method,type:\"bank\"}}(e):function(e){return{bigpayToken:e.bigpay_token,defaultInstrument:e.default_instrument,provider:e.provider,iin:e.iin,last4:e.last_4,expiryMonth:e.expiry_month,expiryYear:e.expiry_year,brand:e.brand,trustedShippingAddress:e.trusted_shipping_address,untrustedShippingCardVerificationMode:e.untrusted_shipping_address_card_verification_mode,method:e.method,type:\"card\"}}(e))}_isPayPalInstrument(e){return\"paypal\"===e.method_type}_isBankInstrument(e){return\"bank\"===e.method_type}_transformResponse(e){const{data:t}=e,n=$y(e,[\"data\"]);return Object.assign(Object.assign({},n),{body:t})}}class Ky{constructor(e,t){this._client=e,this._requestSender=t,this._transformer=new Yy}getVaultAccessToken({timeout:e}={}){return this._requestSender.get(\"/internalapi/v1/checkout/payments/vault-access-token\",{timeout:e}).then(e=>Object.assign(Object.assign({},e),{body:{vaultAccessToken:e.body.data.token,vaultAccessExpiry:e.body.data.expires_at}}))}loadInstruments(e,t){return t?this._loadInstrumentsWithAddress(e,t):this._loadInstruments(e)}deleteInstrument(e,t){const n=Object.assign(Object.assign({},e),{instrumentId:t});return new Promise((e,t)=>{this._client.deleteShopperInstrument(n,(n,i)=>n?t(this._transformer.transformErrorResponse(n)):e(this._transformer.transformResponse(i)))})}_loadInstruments(e){return new Promise((t,n)=>{this._client.loadInstruments(e,(e,i)=>e?n(this._transformer.transformErrorResponse(e)):t(this._transformer.transformResponse(i)))})}_loadInstrumentsWithAddress(e,t){const n=Object.assign(Object.assign({},e),{shippingAddress:Array.isArray(t)?t.map(e=>gm(e)):gm(t)});return new Promise((e,t)=>{this._client.loadInstrumentsWithAddress(n,(n,i)=>n?t(this._transformer.transformErrorResponse(n)):e(this._transformer.transformResponse(i)))})}}!function(e){e.LoadPickupOptionsRequested=\"LOAD_PICKUP_OPTIONS_REQUESTED\",e.LoadPickupOptionsSucceeded=\"LOAD_PICKUP_OPTIONS_SUCCEEDED\",e.LoadPickupOptionsFailed=\"LOAD_PICKUP_OPTIONS_FAILED\"}(Gy||(Gy={}));class Qy{constructor(e){this._pickupOptionRequestSender=e}loadPickupOptions(e){return t=>new O.c(n=>{const i=this._hydrateApiQuery(t,e);n.next((0,u.VP)(Gy.LoadPickupOptionsRequested)),this._pickupOptionRequestSender.fetchPickupOptions(i).then(t=>{n.next((0,u.VP)(Gy.LoadPickupOptionsSucceeded,t.body.results,e)),n.complete()}).catch(e=>{n.error((0,u.fQ)(Gy.LoadPickupOptionsFailed,e))})})}_hydrateApiQuery(e,t){const n=e.getState(),i=n.cart.getCartOrThrow();if(!i)throw new k(C.MissingCart);const r=n.consignments.getConsignmentById(t.consignmentId);if(!r)throw new k(C.MissingConsignments);const o=r.lineItemIds,a=i.lineItems.physicalItems.filter(e=>(0,P.includes)(o,e.id)).map(e=>({variantId:e.variantId,quantity:e.quantity}));return{searchArea:t.searchArea,items:a}}}class Jy{constructor(e){this._requestSender=e}fetchPickupOptions(e){return this._requestSender.post(\"/api/storefront/pickup-options\",{headers:Object.assign({Accept:R.Json},S),body:e})}}!function(e){e.UpdateAddressFailed=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_FAILED\",e.UpdateAddressRequested=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_REQUESTED\",e.UpdateAddressSucceeded=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_SUCCEEDED\",e.SelectOptionFailed=\"SHIPPING_STRATEGY_SELECT_OPTION_FAILED\",e.SelectOptionRequested=\"SHIPPING_STRATEGY_SELECT_OPTION_REQUESTED\",e.SelectOptionSucceeded=\"SHIPPING_STRATEGY_SELECT_OPTION_SUCCEEDED\",e.InitializeFailed=\"SHIPPING_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"SHIPPING_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"SHIPPING_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"SHIPPING_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"SHIPPING_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"SHIPPING_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_FAILED\"}(Wy||(Wy={}));class Zy{constructor(e){this._strategyRegistry=e}updateAddress(e,t){return n=>O.c.create(i=>{const r=n.getState().payment.getPaymentId(),o=t&&t.methodId||r&&r.providerId;i.next((0,u.VP)(Wy.UpdateAddressRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).updateAddress(e,Object.assign(Object.assign({},t),{methodId:o})).then(()=>{i.next((0,u.VP)(Wy.UpdateAddressSucceeded,void 0,{methodId:o})),i.complete()}).catch(e=>{i.error((0,u.fQ)(Wy.UpdateAddressFailed,e,{methodId:o}))})})}selectOption(e,t){return n=>O.c.create(i=>{const r=n.getState().payment.getPaymentId(),o=t&&t.methodId||r&&r.providerId;i.next((0,u.VP)(Wy.SelectOptionRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).selectOption(e,Object.assign(Object.assign({},t),{methodId:o})).then(()=>{i.next((0,u.VP)(Wy.SelectOptionSucceeded,void 0,{methodId:o})),i.complete()}).catch(e=>{i.error((0,u.fQ)(Wy.SelectOptionFailed,e,{methodId:o}))})})}initialize(e){return t=>O.c.create(n=>{const i=t.getState(),r=i.payment.getPaymentId(),o=e&&e.methodId||r&&r.providerId,a=Object.assign(Object.assign({},e),{methodId:o});if(o&&i.shippingStrategies.isInitialized(o))return n.complete();n.next((0,u.VP)(Wy.InitializeRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).initialize(a).then(()=>{n.next((0,u.VP)(Wy.InitializeSucceeded,void 0,{methodId:o})),n.complete()}).catch(e=>{n.error((0,u.fQ)(Wy.InitializeFailed,e,{methodId:o}))})})}deinitialize(e){return t=>O.c.create(n=>{const i=t.getState(),r=i.payment.getPaymentId(),o=e&&e.methodId||r&&r.providerId;if(o&&!i.shippingStrategies.isInitialized(o))return n.complete();n.next((0,u.VP)(Wy.DeinitializeRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).deinitialize(Object.assign(Object.assign({},e),{methodId:o})).then(()=>{n.next((0,u.VP)(Wy.DeinitializeSucceeded,void 0,{methodId:o})),n.complete()}).catch(e=>{n.error((0,u.fQ)(Wy.DeinitializeFailed,e,{methodId:o}))})})}widgetInteraction(e,t){return O.c.create(n=>{const i={methodId:t&&t.methodId};n.next((0,u.VP)(Wy.WidgetInteractionStarted,void 0,i)),e().then(()=>{n.next((0,u.VP)(Wy.WidgetInteractionFinished,void 0,i)),n.complete()}).catch(e=>{n.error((0,u.fQ)(Wy.WidgetInteractionFailed,e,i))})})}}var Xy,ef=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class tf{constructor(e,t,n,i,r){this._store=e,this._consignmentActionCreator=t,this._paymentMethodActionCreator=n,this._amazonPayV2PaymentProcessor=i,this._shippingStrategyActionCreator=r}updateAddress(e,t){const n=this._store.getState().shippingAddress.getShippingAddress();if(!n)throw new k(C.MissingShippingAddress);const i=Object.assign(Object.assign({},n),{customFields:e.customFields});return this._store.dispatch(this._consignmentActionCreator.updateAddress(i,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}initialize(e){return ef(this,void 0,void 0,function*(){const{amazonpay:t,methodId:n}=e;if(!t||!n)throw new ye('Unable to proceed because \"options.amazonpay\" argument is not provided.');const i=(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(n))).paymentMethods.getPaymentMethodOrThrow(n);yield this._amazonPayV2PaymentProcessor.initialize(i);const{paymentToken:r,region:o}=i.initializationData,a=t.editAddressButtonId;if(r&&a){const e=this._shouldShowLoadingSpinner(o);this._bindEditButton(a,r,\"changeAddress\",e)}return this._store.getState()})}deinitialize(){return ef(this,void 0,void 0,function*(){return yield this._amazonPayV2PaymentProcessor.deinitialize(),Promise.resolve(this._store.getState())})}_bindEditButton(e,t,n,i){const r=document.getElementById(e);if(r&&r.parentNode){if(i){const e=r.cloneNode(!0);r.parentNode.replaceChild(e,r),e.addEventListener(\"click\",()=>this._showLoadingSpinner())}this._amazonPayV2PaymentProcessor.bindButton(e,t,n)}}_showLoadingSpinner(){return this._store.dispatch(this._shippingStrategyActionCreator.widgetInteraction(()=>new Promise(zi.l)),{queueId:\"widgetInteraction\"})}_shouldShowLoadingSpinner(e){return\"us\"!==e}}!function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(Xy||(Xy={}));var nf=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class rf{constructor(e,t,n,i,r,o){this._store=e,this._billingAddressActionCreator=t,this._consignmentActionCreator=n,this._paymentMethodActionCreator=i,this._paymentProviderCustomerActionCreator=r,this._braintreeIntegrationService=o}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}deinitialize(){return Promise.resolve(this._store.getState())}initialize(e){var t;return nf(this,void 0,void 0,function*(){const{methodId:n,braintreefastlane:i,fastlane:r}=e||{},o=r||i,{onPayPalFastlaneAddressChange:a}=o||{};if(!n)throw new ye('Unable to proceed because \"methodId\" argument is not provided.');const s=this._store.getState();if(!s.customer.getCustomerOrThrow().isGuest)return Promise.resolve(this._store.getState());try{if(this._shouldRunAuthenticationFlow()){const e=s.paymentMethods.getPaymentMethod(n),{clientToken:i,isFastlaneStylingEnabled:r}=(null==e?void 0:e.initializationData)||{};i||(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(n)));const a=pr(r?null===(t=null==e?void 0:e.initializationData)||void 0===t?void 0:t.fastlaneStyles:void 0,null==o?void 0:o.styles);yield this._runAuthenticationFlowOrThrow(n,a)}\"function\"==typeof a&&(yield this._shouldUseBraintreeFastlaneShippingComponent(n))&&a(()=>this._handleBraintreeFastlaneShippingAddressChange())}catch(e){}return Promise.resolve(this._store.getState())})}_shouldRunAuthenticationFlow(){var e;const t=this._store.getState(),n=null===(e=t.cart.getCart())||void 0===e?void 0:e.id,i=Si.get(\"bc-fastlane-sessionId\")||\"\",r=t.paymentProviderCustomer.getPaymentProviderCustomer(),o=wd(r)?r:{};return(null==o?void 0:o.authenticationState)!==yn.CANCELED&&!(null==o?void 0:o.authenticationState)&&i===n}_runAuthenticationFlowOrThrow(e,t){var n,i;return nf(this,void 0,void 0,function*(){const r=this._store.getState(),o=r.cart.getCartOrThrow(),a=r.countries.getCountries()||[],s=r.paymentMethods.getPaymentMethodOrThrow(e),{clientToken:c,config:d}=s;if(!c)throw new k(C.MissingPaymentMethod);this._braintreeIntegrationService.initialize(c);const u=yield this._braintreeIntegrationService.getBraintreeFastlane(null==o?void 0:o.id,null==d?void 0:d.testMode,t),l=(null===(n=r.customer.getCustomer())||void 0===n?void 0:n.email)||(null===(i=r.billingAddress.getBillingAddress())||void 0===i?void 0:i.email);if(!l)return;const{lookupCustomerByEmail:h,triggerAuthenticationFlow:p}=u.identity,{customerContextId:m}=yield h(l);if(!m)return;const{authenticationState:y,profileData:f}=yield p(m);if(y===yn.CANCELED)return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({authenticationState:y,addresses:[],instruments:[]})),void Si.remove(\"bc-fastlane-sessionId\");const g=this._getPayPalBillingAddress(f),v=f.shippingAddress,_=f.shippingAddress.phoneNumber,b=this._mapPayPalToBcAddress(v,a,_),S=this._mapPayPalToBcAddress(g,a,_);if(S&&b){const t=this._mergeShippingAndBillingAddresses(b,S),n=this._mapPayPalToBcInstrument(e,f.card),i=n?[n]:[];yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({authenticationState:y,addresses:t,instruments:i})),S&&(yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(Object.assign(Object.assign({},S),{id:String(S.id)})))),b&&o.lineItems.physicalItems.length>0&&(yield this._store.dispatch(this._consignmentActionCreator.updateAddress(b)))}})}_getPayPalBillingAddress(e){const{name:t,card:n}=e,i=n.paymentSource.card.billingAddress;return Object.assign(Object.assign({},i),{firstName:i.firstName||(null==t?void 0:t.firstName),lastName:i.lastName||(null==t?void 0:t.lastName)})}_getCountryNameByCountryCode(e,t){const n=t.find(t=>t.code===e);return(null==n?void 0:n.name)||\"\"}_mapPayPalToBcAddress(e,t,n,i){return{id:Number(Date.now()),type:\"paypal-address\",firstName:e.firstName||\"\",lastName:e.lastName||\"\",company:e.company||\"\",address1:e.streetAddress,address2:e.extendedAddress||\"\",city:e.locality,stateOrProvince:e.region,stateOrProvinceCode:e.region,country:this._getCountryNameByCountryCode(e.countryCodeAlpha2,t),countryCode:e.countryCodeAlpha2,postalCode:e.postalCode,phone:n||\"\",customFields:i||[]}}_normalizeAddress(e){return(0,P.omit)(e,[\"id\"])}_mergeShippingAndBillingAddresses(e,t){return(0,P.isEqual)(this._normalizeAddress(e),this._normalizeAddress(t))?[e]:[e,t]}_mapPayPalToBcInstrument(e,t){if(!t)return;const{id:n,paymentSource:i}=t,{brand:r,expiry:o,lastDigits:a}=i.card,[s,c]=o.split(\"-\");return{bigpayToken:n,brand:r,defaultInstrument:!1,expiryMonth:c,expiryYear:s,iin:\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:Xy.CVV,type:\"card\"}}_handleBraintreeFastlaneShippingAddressChange(){var e;return nf(this,void 0,void 0,function*(){const t=this._store.getState().countries.getCountries()||[],n=yield this._braintreeIntegrationService.getBraintreeFastlane(),{selectionChanged:i,selectedAddress:r}=yield n.profile.showShippingAddressSelector();if(i){const n=this._store.getState(),i=n.shippingAddress.getShippingAddressesOrThrow(),o=n.paymentProviderCustomer.getPaymentProviderCustomer(),a=wd(o)?o:{},s=this._mapPayPalToBcAddress(r,t,r.phoneNumber,null===(e=i[0])||void 0===e?void 0:e.customFields);if(s){const e=this._filterAddresses([s,...a.addresses||[]]);return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(Object.assign(Object.assign({},a),{addresses:e}))),yield this._store.dispatch(this._consignmentActionCreator.updateAddress(s)),s}}})}_filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this._isEqualAddresses(e,t))?e:[...e,t]:e,[])}_isEqualAddresses(e,t){return(0,P.isEqual)(this._normalizeAddress(e),this._normalizeAddress(t))}_shouldUseBraintreeFastlaneShippingComponent(e){var t;return nf(this,void 0,void 0,function*(){const n=this._store.getState().paymentProviderCustomer.getPaymentProviderCustomer(),i=wd(n)?n:{};if(i&&(null==i?void 0:i.authenticationState)!==yn.CANCELED){const n=yield this._getBraintreePaymentMethodOrThrow(e);return!!(null===(t=null==n?void 0:n.initializationData)||void 0===t?void 0:t.isFastlaneEnabled)}return!1})}_getBraintreePaymentMethodOrThrow(e){return nf(this,void 0,void 0,function*(){const t=this._store.getState().paymentMethods.getPaymentMethod(e);return t||(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e))).paymentMethods.getPaymentMethodOrThrow(e)})}}class of{constructor(e,t){this._store=e,this._consignmentActionCreator=t}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}initialize(){return Promise.resolve(this._store.getState())}deinitialize(){return Promise.resolve(this._store.getState())}}var af=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class sf{constructor(e,t,n,i,r,o,a){this._store=e,this._billingAddressActionCreator=t,this._consignmentActionCreator=n,this._paymentMethodActionCreator=i,this._paymentProviderCustomerActionCreator=r,this._paypalSdkScriptLoader=o,this._paypalCommerceFastlaneUtils=a}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}deinitialize(){return Promise.resolve(this._store.getState())}initialize(e){return af(this,void 0,void 0,function*(){const{methodId:t,paypalcommercefastlane:n,fastlane:i}=e||{},r=i||n,{onPayPalFastlaneAddressChange:o,styles:a}=r||{};if(!t)throw new ye('Unable to proceed because \"methodId\" argument is not provided.');const s=this._store.getState().customer.getCustomerOrThrow();if(!(null==s?void 0:s.isGuest))return Promise.resolve(this._store.getState());try{this._shouldAuthenticateUserWithFastlane()&&(yield this._initializePayPalSdk(t,a),yield this._authenticateUserWithFastlaneOtp(t)),\"function\"==typeof o&&this._shouldUsePayPalFastlaneShippingComponent()&&(yield this._initializePayPalSdk(t,a),o(()=>this._handlePayPalShippingAddressChange()))}catch(e){}return Promise.resolve(this._store.getState())})}_getPayPalPaymentMethodOrThrow(e){return af(this,void 0,void 0,function*(){const t=this._store.getState().paymentMethods.getPaymentMethod(e);return t||(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e))).paymentMethods.getPaymentMethodOrThrow(e)})}_getPayPalCustomerAuthenticationState(){const e=this._store.getState().paymentProviderCustomer.getPaymentProviderCustomerOrThrow();var t;return((t=e)&&(\"authenticationState\"in t||\"addresses\"in t||\"instruments\"in t)?e:{}).authenticationState}_shouldAuthenticateUserWithFastlane(){const e=this._store.getState().cart.getCartOrThrow(),t=this._paypalCommerceFastlaneUtils.getStorageSessionId();return!this._getPayPalCustomerAuthenticationState()&&t===e.id}_shouldUsePayPalFastlaneShippingComponent(){const e=this._getPayPalCustomerAuthenticationState();return!!e&&e!==ra.CANCELED}_initializePayPalSdk(e,t){var n;return af(this,void 0,void 0,function*(){const i=this._store.getState().cart.getCartOrThrow(),r=yield this._getPayPalPaymentMethodOrThrow(e),{isDeveloperModeApplicable:o,isFastlaneStylingEnabled:a}=(null==r?void 0:r.initializationData)||{},s=!!o,c=Ha(a?null===(n=null==r?void 0:r.initializationData)||void 0===n?void 0:n.fastlaneStyles:{},t),d=yield this._paypalSdkScriptLoader.getPayPalFastlaneSdk(r,i.currency.code,i.id,i.locale);yield this._paypalCommerceFastlaneUtils.initializePayPalFastlane(d,s,c)})}_authenticateUserWithFastlaneOtp(e){var t,n;return af(this,void 0,void 0,function*(){const i=this._store.getState(),r=i.cart.getCartOrThrow(),o=null===(t=i.customer.getCustomer())||void 0===t?void 0:t.email,a=null===(n=i.billingAddress.getBillingAddress())||void 0===n?void 0:n.email,s=o||a||\"\",{customerContextId:c}=yield this._paypalCommerceFastlaneUtils.lookupCustomerOrThrow(s),d=yield this._paypalCommerceFastlaneUtils.triggerAuthenticationFlowOrThrow(c),{authenticationState:u,addresses:l,billingAddress:h,shippingAddress:p,instruments:m}=this._paypalCommerceFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,d);yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({authenticationState:u,addresses:l,instruments:m})),d.authenticationState===ra.CANCELED?this._paypalCommerceFastlaneUtils.removeStorageSessionId():this._paypalCommerceFastlaneUtils.updateStorageSessionId(r.id),h&&(yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(Object.assign(Object.assign({},h),{id:String(h.id)})))),p&&r.lineItems.physicalItems.length>0&&(yield this._store.dispatch(this._consignmentActionCreator.updateAddress(p)))})}_handlePayPalShippingAddressChange(){var e;return af(this,void 0,void 0,function*(){const t=this._paypalCommerceFastlaneUtils.getPayPalFastlaneOrThrow(),{selectionChanged:n,selectedAddress:i}=yield t.profile.showShippingAddressSelector();if(n){const t=this._store.getState(),n=t.shippingAddress.getShippingAddressesOrThrow(),r=t.paymentProviderCustomer.getPaymentProviderCustomer(),o=rh(r)?r:{},a=this._paypalCommerceFastlaneUtils.mapPayPalToBcAddress(i.address,i.name,i.phoneNumber,null===(e=n[0])||void 0===e?void 0:e.customFields),s=this._paypalCommerceFastlaneUtils.filterAddresses([a,...o.addresses||[]]);return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(Object.assign(Object.assign({},o),{addresses:s}))),yield this._store.dispatch(this._consignmentActionCreator.updateAddress(a)),a}})}}var cf;class df{constructor(e,t,n,i){this._store=e,this._stripeScriptLoader=t,this._consignmentActionCreator=n,this._paymentMethodActionCreator=i}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}initialize(e){return t=this,n=void 0,r=function*(){if(!e.stripeupe)throw new ye('Unable to proceed because \"options\" argument is not provided.');const{container:t,gatewayId:n,methodId:i,onChangeShipping:r,getStyles:o,availableCountries:a,getStripeState:s}=e.stripeupe;Object.entries(e.stripeupe).forEach(([e,t])=>{if(!t)throw new ye(`Unable to proceed because \"${e}\" argument is not provided.`)});const c=yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(n,{params:{method:i}})),d=c.paymentMethods.getPaymentMethodOrThrow(i,n),{initializationData:u}=d;if(!d||!d.initializationData.stripePublishableKey||!d.clientToken)throw new k(C.MissingPaymentMethod);let l;this._stripeUPEClient=yield this._stripeScriptLoader.getStripeClient(u,c.cart.getLocale(),fo.V3,Co,Io);const h=o&&o(),{form:{getShippingAddressFields:p},shippingAddress:{getShippingAddress:m}}=this._store.getState(),y=p([],\"\");l=h?{variables:{colorPrimary:h.fieldInnerShadow,colorBackground:h.fieldBackground,colorText:h.labelText,colorDanger:h.fieldErrorText,colorTextSecondary:h.labelText,colorTextPlaceholder:h.fieldPlaceholderText,spacingUnit:\"4px\",borderRadius:\"4px\"},rules:{\".Input\":{borderColor:h.fieldBorder,color:h.fieldText,boxShadow:h.fieldInnerShadow}}}:{variables:{spacingUnit:\"4px\",borderRadius:\"4px\"}},this._stripeElements=yield this._stripeScriptLoader.getElements(this._stripeUPEClient,{clientSecret:d.clientToken,appearance:l});const f=m(),g=y.find(e=>\"phone\"===e.name);let v={mode:co.SHIPPING,allowedCountries:[a],fields:{phone:\"always\"},validation:{phone:{required:g&&g.required?\"always\":\"never\"}},display:{name:uo.SPLIT}};if(f){const{stateOrProvinceCode:e,countryCode:t,lastName:n,firstName:i,phone:r,address1:o,address2:a,city:c,postalCode:d}=f,u=e&&t?s(t,e):e;v=Object.assign(Object.assign({},v),{defaultValues:{firstName:i,lastName:n,phone:r,address:{line1:o,line2:a,city:c,state:u,postal_code:d,country:t}}})}let _=this._stripeElements.getElement(go.SHIPPING);return _&&_.destroy(),_=this._stripeElements.create(go.SHIPPING,v),_.on(_o.CHANGE,e=>{if(!(\"isNewAddress\"in e))throw new k(C.MissingShippingAddress);(e.complete||e.isNewAddress)&&(this.sendData&&clearTimeout(this.sendData),this.sendData=setTimeout(()=>{r(Object.assign(Object.assign({},e),{phoneFieldRequired:!!g&&g.required}))},1e3))}),_.mount(`#${t}`),Promise.resolve(this._store.getState())},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())});var t,n,i,r}deinitialize(){return Promise.resolve(this._store.getState())}}!function(e){e.SendSignInEmailRequested=\"SEND_SIGNIN_EMAIL_REQUESTED\",e.SendSignInEmailSucceeded=\"SEND_SIGNIN_EMAIL_SUCCEEDED\",e.SendSignInEmailFailed=\"SEND_SIGNIN_EMAIL_FAILED\"}(cf||(cf={}));class uf{constructor(e){this._requestSender=e}sendSignInEmail(e,t){return(0,l.x)((0,h.of)((0,u.VP)(cf.SendSignInEmailRequested)),(0,p.v)(()=>{return n=this,i=void 0,o=function*(){const{body:n}=yield this._requestSender.sendSignInEmail(e,t);return(0,u.VP)(cf.SendSignInEmailSucceeded,n)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe((0,m.W)(e=>_(cf.SendSignInEmailFailed,e)))}}class lf{constructor(e){this._requestSender=e}sendSignInEmail({email:e,redirectUrl:t},{timeout:n}={}){const i=Object.assign({Accept:R.JsonV1},S);return this._requestSender.post(\"/login.php?action=passwordless_login\",{body:{email:e,redirect_url:t||et(window.top?window.top.location.href:\"\").pathname},headers:i,timeout:n})}}class hf{constructor(e){this._messageCustomizer=e}transform(e){var t;return e.message=(t=this._messageCustomizer(e))?t.split(/(?:\\r\\n|\\n|\\r)/).map(e=>e.replace(/^\\s+/gm,\"\")).join(\" \").trim():\"\",e}}let pf=class{constructor(e,t,n,i,r,o,a,s,c,d,u,l,h,p,m,y,f,g,v,_,b,S,w,I,P,E,O,A,T){this._store=e,this._storeProjection=t,this._extensionMessenger=n,this._extensionEventBroadcaster=i,this._b2bTokenActionCreator=r,this._billingAddressActionCreator=o,this._checkoutActionCreator=a,this._configActionCreator=s,this._customerActionCreator=c,this._consignmentActionCreator=d,this._countryActionCreator=u,this._couponActionCreator=l,this._customerStrategyActionCreator=h,this._errorActionCreator=p,this._giftCertificateActionCreator=m,this._instrumentActionCreator=y,this._orderActionCreator=f,this._paymentMethodActionCreator=g,this._paymentStrategyActionCreator=v,this._pickupOptionActionCreator=_,this._shippingCountryActionCreator=b,this._shippingStrategyActionCreator=S,this._signInEmailActionCreator=w,this._spamProtectionActionCreator=I,this._storeCreditActionCreator=P,this._subscriptionsActionCreator=E,this._formFieldsActionCreator=O,this._extensionActionCreator=A,this._workerExtensionMessenger=T,this._errorTransformer=function(e=\"development\"===q()){return new hf(t=>{if(!e||!function(e){return!(!e.subtype&&!e.type)}(t))return t.message;switch(t.subtype||t.type){case C.MissingConsignments:return`\\n                ${t.message}\\n                The data could be unavailable because no shipping address has been provided.\\n                To fix this, create a consignment or update the shipping address before performing\\n                the same action again.\\n            `;case C.MissingCart:case C.MissingCheckout:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server yet.\\n                To fix this issue, you can try calling \\`CheckoutService#loadCheckout\\`\\n                before performing the same action again.\\n            `;case C.MissingCheckoutConfig:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server yet.\\n                To fix this issue, you need to make sure \\`CheckoutService\\` is initialized\\n                properly by calling \\`CheckoutService#loadCheckout\\` before performing any\\n                other actions.\\n            `;case C.MissingOrder:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server yet.\\n                To fix this issue, you can try calling \\`CheckoutService#loadOrder\\`\\n                before performing the same action again.\\n            `;case C.MissingOrderId:return`\\n                ${t.message}\\n                The data could be unavailable because no order has been created yet. You have\\n                to first create the order before you can perform the action.\\n            `;case C.MissingPaymentMethod:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server, or\\n                configured by the merchant yet. To fix the former issue, you can try calling\\n                \\`CheckoutService#loadPaymentMethods\\` before performing the same action again.\\n            `;case Ve.CustomerNotInitialized:return\"\\n                In order to initialize the customer step of checkout, you need to call\\n                `CheckoutService#initializeCustomer`. Afterwards, you should be able to\\n                submit customer details.\\n            \";case Ve.PaymentNotInitialized:return`\\n                ${t.message}\\n                In order to initialize the payment step of checkout, you need to call\\n                \\`CheckoutService#initializePayment\\`. Afterwards, you should be able to\\n                submit payment details.\\n            `;case Ve.ShippingNotInitialized:return`\\n                ${t.message}\\n                In order to initialize the shipping step of checkout, you need to call\\n                \\`CheckoutService#initializeShipping\\`. Afterwards, you should be able to\\n                submit shipping details.\\n            `;default:return t.message}})}()}getState(){return this._storeProjection.getState()}notifyState(){this._storeProjection.notifyState()}subscribe(e,...t){return this._storeProjection.subscribe(e,...t)}hydrateInitialState(e){return this._dispatch(this._checkoutActionCreator.hydrateInitialState(e))}loadCheckout(e,t){return this._dispatch(e?this._checkoutActionCreator.loadCheckout(e,t):this._checkoutActionCreator.loadDefaultCheckout(t))}updateCheckout(e,t){const n=this._checkoutActionCreator.updateCheckout(e,t);return this._dispatch(n)}loadOrder(e,t){const n=this._orderActionCreator.loadOrder(e,t),i=this._formFieldsActionCreator.loadFormFields(t),r=this._configActionCreator.loadConfig(t);return Promise.all([this._dispatch(n),this._dispatch(r,{queueId:\"config\"}),this._dispatch(i,{queueId:\"formFields\"})]).then(()=>this.getState())}submitOrder(e,t){const n=this._paymentStrategyActionCreator.execute(e,t);return this._dispatch(n,{queueId:\"paymentStrategy\"})}finalizeOrderIfNeeded(e){const t=this._paymentStrategyActionCreator.finalize(e);return this._dispatch(t,{queueId:\"paymentStrategy\"})}loadPaymentMethods(e){const t=this._paymentMethodActionCreator.loadPaymentMethods(e);return this._dispatch(t,{queueId:\"paymentMethods\"})}loadPaymentMethodByIds(e,t){const n=this._paymentMethodActionCreator.loadPaymentMethodsById(e,t);return this._dispatch(n,{queueId:\"paymentMethods\"})}loadPaymentMethod(e,t){const n=this._paymentMethodActionCreator.loadPaymentMethod(e,t);return this._dispatch(n,{queueId:\"paymentMethods\"})}initializePayment(e){const t=this._paymentStrategyActionCreator.initialize(e);return this._dispatch(t,{queueId:\"paymentStrategy\"})}deinitializePayment(e){const t=this._paymentStrategyActionCreator.deinitialize(e);return this._dispatch(t,{queueId:\"paymentStrategy\"})}loadBillingCountries(e){const t=this._countryActionCreator.loadCountries(e);return this._dispatch(t,{queueId:\"billingCountries\"})}loadShippingCountries(e){const t=this._shippingCountryActionCreator.loadCountries(e);return this._dispatch(t,{queueId:\"shippingCountries\"})}loadPickupOptions(e){const t=this._pickupOptionActionCreator.loadPickupOptions(e);return this._dispatch(t,{queueId:\"pickupOptions\"})}loadBillingAddressFields(e){return this.loadBillingCountries(e)}loadShippingAddressFields(e){return this.loadShippingCountries(e)}initializeCustomer(e){const t=this._customerStrategyActionCreator.initialize(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}deinitializeCustomer(e){const t=this._customerStrategyActionCreator.deinitialize(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}sendSignInEmail(e,t){const n=this._signInEmailActionCreator.sendSignInEmail(e,t);return this._dispatch(n,{queueId:\"signInEmail\"})}getB2BToken(e){const t=this._b2bTokenActionCreator.loadB2BToken(e);return this._dispatch(t,{queueId:\"b2bToken\"})}createCustomerAccount(e,t){const n=this._customerActionCreator.createCustomer(e,t);return this._dispatch(n)}createCustomerAddress(e,t){const n=this._customerActionCreator.createAddress(e,t);return this._dispatch(n)}updateSubscriptions(e,t){const n=this._subscriptionsActionCreator.updateSubscriptions(e,t);return this._dispatch(n,{queueId:\"subscriptions\"})}continueAsGuest(e,t){const n=this._billingAddressActionCreator.continueAsGuest(e,t);return this._dispatch(n)}signInCustomer(e,t){const n=this._customerStrategyActionCreator.signIn(e,t);return this._dispatch(n,{queueId:\"customerStrategy\"})}signOutCustomer(e){const t=this._customerStrategyActionCreator.signOut(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}executePaymentMethodCheckout(e){const t=this._customerStrategyActionCreator.executePaymentMethodCheckout(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}loadShippingOptions(e){const t=this._consignmentActionCreator.loadShippingOptions(e);return this._dispatch(t)}initializeShipping(e){const t=this._shippingStrategyActionCreator.initialize(e);return this._dispatch(t,{queueId:\"shippingStrategy\"})}deinitializeShipping(e){const t=this._shippingStrategyActionCreator.deinitialize(e);return this._dispatch(t,{queueId:\"shippingStrategy\"})}selectShippingOption(e,t){const n=this._shippingStrategyActionCreator.selectOption(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}updateShippingAddress(e,t){const n=this._shippingStrategyActionCreator.updateAddress(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}createConsignments(e,t){const n=this._consignmentActionCreator.createConsignments(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}deleteConsignment(e,t){const n=this._consignmentActionCreator.deleteConsignment(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}updateConsignment(e,t){const n=this._consignmentActionCreator.updateConsignment(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}assignItemsToAddress(e,t){const n=this._consignmentActionCreator.assignItemsByAddress(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}unassignItemsToAddress(e,t){const n=this._consignmentActionCreator.unassignItemsByAddress(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}selectConsignmentShippingOption(e,t,n){const i=this._consignmentActionCreator.updateShippingOption({id:e,shippingOptionId:t},n);return this._dispatch(i,{queueId:\"shippingStrategy\"})}updateBillingAddress(e,t={}){const n=this._billingAddressActionCreator.updateAddress(e,t);return this._dispatch(n)}applyStoreCredit(e,t){const n=this._storeCreditActionCreator.applyStoreCredit(e,t);return this._dispatch(n)}applyCoupon(e,t){const n=this._couponActionCreator.applyCoupon(e,t);return this._dispatch(n)}removeCoupon(e,t){const n=this._couponActionCreator.removeCoupon(e,t);return this._dispatch(n)}applyGiftCertificate(e,t){const n=this._giftCertificateActionCreator.applyGiftCertificate(e,t);return this._dispatch(n)}removeGiftCertificate(e,t){const n=this._giftCertificateActionCreator.removeGiftCertificate(e,t);return this._dispatch(n)}loadInstruments(){const e=this._instrumentActionCreator.loadInstruments();return this._dispatch(e)}deleteInstrument(e){const t=this._instrumentActionCreator.deleteInstrument(e);return this._dispatch(t).then(()=>this.loadInstruments())}clearError(e){const t=this._errorActionCreator.clearError(e);return this._dispatch(t)}initializeSpamProtection(e){const t=this._spamProtectionActionCreator.initialize(e);return this._dispatch(t,{queueId:\"spamProtection\"})}executeSpamCheck(){const e=this._spamProtectionActionCreator.verifyCheckoutSpamProtection();return this._dispatch(e,{queueId:\"spamProtection\"})}loadExtensions(e){const t=this._extensionActionCreator.loadExtensions(e);return this._dispatch(t,{queueId:\"extensions\"})}renderExtension(e,t){return n=this,i=void 0,o=function*(){const n=this._extensionActionCreator.renderExtension(e,t,this._workerExtensionMessenger),i=yield this._dispatch(n,{queueId:\"extensions\"});return this._extensionEventBroadcaster.listen(),i},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}clearExtensionCache(e){this._extensionMessenger.clearCacheByRegion(e)}postMessageToExtension(e,t){this._extensionMessenger.post(e,t)}handleExtensionCommand(e,t,n){return this._extensionMessenger.listenForCommand(e,t,n)}handleExtensionQuery(e,t,n){return this._extensionMessenger.listenForQuery(e,t,n)}_dispatch(e,t){return this._store.dispatch(e,t).then(()=>this.getState()).catch(e=>{throw this._errorTransformer.transform(e)})}};pf=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([_t],pf);const mf=pf;var yf=\"NOT_FOUND\",ff=function(e,t){return e===t};function gf(e,t){var n,i,r=\"object\"==typeof t?t:{equalityCheck:t},o=r.equalityCheck,a=void 0===o?ff:o,s=r.maxSize,c=void 0===s?1:s,d=r.resultEqualityCheck,u=function(e){return function(t,n){if(null===t||null===n||t.length!==n.length)return!1;for(var i=t.length,r=0;r<i;r++)if(!e(t[r],n[r]))return!1;return!0}}(a),l=1===c?(n=u,{get:function(e){return i&&n(i.key,e)?i.value:yf},put:function(e,t){i={key:e,value:t}},getEntries:function(){return i?[i]:[]},clear:function(){i=void 0}}):function(e,t){var n=[];function i(e){var i=n.findIndex(function(n){return t(e,n.key)});if(i>-1){var r=n[i];return i>0&&(n.splice(i,1),n.unshift(r)),r.value}return yf}return{get:i,put:function(t,r){i(t)===yf&&(n.unshift({key:t,value:r}),n.length>e&&n.pop())},getEntries:function(){return n},clear:function(){n=[]}}}(c,u);function h(){var t=l.get(arguments);if(t===yf){if(t=e.apply(null,arguments),d){var n=l.getEntries().find(function(e){return d(e.value,t)});n&&(t=n.value)}l.put(arguments,t)}return t}return h.clearCache=function(){return l.clear()},h}function vf(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return function(){for(var t=arguments.length,i=new Array(t),r=0;r<t;r++)i[r]=arguments[r];var o,a=0,s={memoizeOptions:void 0},c=i.pop();if(\"object\"==typeof c&&(s=c,c=i.pop()),\"function\"!=typeof c)throw new Error(\"createSelector expects an output function after the inputs, but received: [\"+typeof c+\"]\");var d=s.memoizeOptions,u=void 0===d?n:d,l=Array.isArray(u)?u:[u],h=function(e){var t=Array.isArray(e[0])?e[0]:e;if(!t.every(function(e){return\"function\"==typeof e})){var n=t.map(function(e){return\"function\"==typeof e?\"function \"+(e.name||\"unnamed\")+\"()\":typeof e}).join(\", \");throw new Error(\"createSelector expects all input-selectors to be functions, but received the following types: [\"+n+\"]\")}return t}(i),p=e.apply(void 0,[function(){return a++,c.apply(null,arguments)}].concat(l)),m=e(function(){for(var e=[],t=h.length,n=0;n<t;n++)e.push(h[n].apply(null,arguments));return o=p.apply(null,e)});return Object.assign(m,{resultFunc:c,memoizedResultFunc:p,dependencies:h,lastResult:function(){return o},recomputations:function(){return a},resetRecomputations:function(){return a=0}}),m}}function _f(e){return(...t)=>{const n=t.pop();return e(...t,(...e)=>{const t=n(...e);return\"function\"==typeof t?(0,K.Bj)(t):t})}}const bf=_f(vf(gf));var Sf=n(540),wf=n.n(Sf);const Cf=_f(vf(gf,(e,t)=>wf()(e,t)));class If extends te{constructor(e,t){super(e,{message:t||\"An unexpected error has occurred. The checkout process cannot continue as a result.\"}),this.name=\"UnrecoverableError\",this.type=\"unrecoverable\"}}function Pf(e){return e.reduce((e,t)=>t?[...e,t]:e,[]).join(\" \")}class Ef extends te{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}class Of{constructor(){this._factoryMethods={},this.register(\"default\",(e,t)=>new te(e,{message:t})),this.register(\"internal\",(e,t)=>function(e,t){const{body:n}=e,{errors:i=[]}=n;return new te(e,{message:Pf(i)||n.detail||n.title||t,errors:i.length?i.map(e=>({code:n.type,message:e})):[{code:n.type,message:n.detail||n.title}]})}(e,t)),this.register(\"storefront\",(e,t)=>function(e,t){const{body:n}=e;return new te(e,{message:t||n.detail||n.title,errors:[{code:n.code||n.type,message:n.detail||n.title}]})}(e,t)),this.register(\"payment\",(e,t)=>nm(e,t)),this.register(\"timeout\",e=>new Ef(e))}register(e,t){this._factoryMethods[e]=t}createError(e,t){return(this._factoryMethods[this._getType(e)]||this._factoryMethods.default)(e,t)}_getType(e){if(0===e.status)return\"timeout\";if(this._isStorefrontErrorResponseBody(e.body))return\"storefront\";if(this._isInternalErrorResponseBody(e.body)){const t=(0,P.last)(e.body.type.split(\"/\"));return t&&this._factoryMethods[t]?t:\"internal\"}const t=(0,P.last)(e.body&&e.body.errors);return t&&t.code&&this._factoryMethods[t.code]?t.code:\"payment\"}_isStorefrontErrorResponseBody(e){const t=e;return!this._isInternalErrorResponseBody(e)&&\"string\"==typeof t.title&&\"string\"==typeof t.type&&\"number\"==typeof t.status&&\"string\"==typeof t.detail}_isInternalErrorResponseBody(e){const t=e;return\"object\"==typeof t.errors&&\"string\"==typeof t.title&&\"string\"==typeof t.type&&\"number\"==typeof t.status}}function Af(e,t){return Array.isArray(e)?e.map(e=>Af(e,t)):(0,P.isPlainObject)(e)?(0,P.transform)((0,P.omitBy)(e,t),(e,n,i)=>{e[i]=Af(n,t)},{}):e}function Tf(e,t){return function(e){return e.type===j.ClearError}(t)?Af(e,e=>e===t.payload):e}function kf(e,t,n){return e===t||(e&&t&&\"object\"==typeof e&&\"object\"==typeof t?Array.isArray(e)&&Array.isArray(t)?function(e,t,n){if(e.length!==t.length)return!1;for(let i=0,r=e.length;i<r;i++)if(!kf(e[i],t[i],n))return!1;return!0}(e,t,n):!Array.isArray(e)&&!Array.isArray(t)&&(e instanceof Date&&t instanceof Date?function(e,t){return e.getTime()===t.getTime()}(e,t):!(e instanceof Date||t instanceof Date)&&(e instanceof RegExp&&t instanceof RegExp?function(e,t){return e.toString()===t.toString()}(e,t):!(e instanceof RegExp||t instanceof RegExp)&&function(e,t,n){const i=n&&n.keyFilter,r=i?Object.keys(e).filter(i):Object.keys(e),o=i?Object.keys(t).filter(i):Object.keys(t);if(r.length!==o.length)return!1;for(let i=0,o=r.length;i<o;i++){const o=r[i];if(!Object.prototype.hasOwnProperty.call(t,o))return!1;if(!kf(e[o],t[o],n))return!1}return!0}(e,t,n))):e===t)}function xf(e,t,n){return e&&Object.prototype.hasOwnProperty.call(e,t)&&kf(e[t],n)?e:Object.assign(Object.assign({},e),{[t]:n})}const Mf={errors:{},statuses:{}};function Nf(e=Mf,t){return(0,u.HY)({data:Df,errors:(0,u.om)(Rf,Tf),statuses:zf})(e,t)}function Df(e,t){return t.type===g.LoadB2BTokenSucceeded?t.payload:e}function Rf(e=Mf.errors,t){switch(t.type){case g.LoadB2BTokenRequested:case g.LoadB2BTokenSucceeded:return xf(e,\"loadError\",void 0);case g.LoadB2BTokenFailed:return xf(e,\"loadError\",t.payload);default:return e}}function zf(e=Mf.statuses,t){switch(t.type){case g.LoadB2BTokenRequested:return xf(e,\"isLoading\",!0);case g.LoadB2BTokenFailed:case g.LoadB2BTokenSucceeded:return xf(e,\"isLoading\",!1);default:return e}}function Ff(e,t){return void 0===t||kf(e,t)?e:t}const Bf={errors:{},statuses:{}};function jf(e=Bf,t){return(0,u.HY)({data:Lf,errors:(0,u.om)(Uf,Tf),statuses:Vf})(e,t)}function Lf(e,t){var n,i;switch(t.type){case I.UpdateBillingAddressSucceeded:case I.ContinueAsGuestSucceeded:case Ce.LoadCheckoutSucceeded:return Ff(e,t.payload&&t.payload.billingAddress);case Ie.HydrateInitialState:return Ff(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.billingAddress);default:return e}}function Uf(e=Bf.errors,t){switch(t.type){case Ce.LoadCheckoutRequested:case Ce.LoadCheckoutSucceeded:return xf(e,\"loadError\",void 0);case Ce.LoadCheckoutFailed:return xf(e,\"loadError\",t.payload);case I.UpdateBillingAddressRequested:case I.UpdateBillingAddressSucceeded:return xf(e,\"updateError\",void 0);case I.UpdateBillingAddressFailed:return xf(e,\"updateError\",t.payload);case Ay.UpdateSubscriptionsRequested:case Ay.UpdateSubscriptionsSucceeded:case I.ContinueAsGuestRequested:case I.ContinueAsGuestSucceeded:return xf(e,\"continueAsGuestError\",void 0);case Ay.UpdateSubscriptionsFailed:case I.ContinueAsGuestFailed:return xf(e,\"continueAsGuestError\",t.payload);default:return e}}function Vf(e=Bf.statuses,t){switch(t.type){case Ce.LoadCheckoutRequested:return xf(e,\"isLoading\",!0);case Ce.LoadCheckoutSucceeded:case Ce.LoadCheckoutFailed:return xf(e,\"isLoading\",!1);case I.UpdateBillingAddressRequested:return xf(e,\"isUpdating\",!0);case I.UpdateBillingAddressFailed:case I.UpdateBillingAddressSucceeded:return xf(e,\"isUpdating\",!1);case I.ContinueAsGuestRequested:case Ay.UpdateSubscriptionsRequested:return xf(e,\"isContinuingAsGuest\",!0);case Ay.UpdateSubscriptionsSucceeded:case Ay.UpdateSubscriptionsFailed:case I.ContinueAsGuestFailed:case I.ContinueAsGuestSucceeded:return xf(e,\"isContinuingAsGuest\",!1);default:return e}}const qf=function e(t,n,i){const{matchObject:r=(e,t)=>void 0!==e.id&&e.id===t.id}=i||{};if(!t)return n;if(!n||t===n)return t;let o=0,a=0;const s=(e,t,n)=>(o+=e===t?1:0,a+=e===n?1:0,e),c=n.map((n,i)=>{const o=t&&t[i];return Dy(o)&&Dy(n)?r(o,n)?s(Hf(o,n),o,n):s(Ff(o,n),o,n):(0,P.isArray)(o)&&(0,P.isArray)(n)?s(e(o,n),o,n):s(Ff(o,n),o,n)});return o===n.length&&t&&t.length===n.length?t:a===n.length?n:c},Hf=function e(t,n){return t?n&&t!==n?Object.keys(n).reduce((t,i)=>{const r=t[i],o=n[i];return Dy(r)&&Dy(o)?xf(t,i,e(r,o)):(0,P.isArray)(r)&&(0,P.isArray)(o)?xf(t,i,qf(r,o)):xf(t,i,o)},t):t:n},Gf={errors:{},statuses:{}};function Wf(e=Gf,t){return(0,u.HY)({data:$f,errors:(0,u.om)(Kf,Tf),statuses:Yf})(e,t)}function $f(e,t){var n,i;switch(t.type){case I.UpdateBillingAddressSucceeded:case Ce.LoadCheckoutSucceeded:case vy.CreateConsignmentsSucceeded:case vy.DeleteConsignmentSucceeded:case vy.UpdateConsignmentSucceeded:case vy.UpdateShippingOptionSucceeded:case vy.LoadShippingOptionsSucceeded:case oe.ApplyCouponSucceeded:case oe.RemoveCouponSucceeded:case de.ApplyGiftCertificateSucceeded:case de.RemoveGiftCertificateSucceeded:return Hf(e,t.payload&&t.payload.cart);case Ie.HydrateInitialState:return Hf(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.cart);default:return e}}function Yf(e=Gf.statuses,t){switch(t.type){case Ce.LoadCheckoutRequested:return xf(e,\"isLoading\",!0);case Ce.LoadCheckoutFailed:case Ce.LoadCheckoutSucceeded:return xf(e,\"isLoading\",!1);default:return e}}function Kf(e=Gf.errors,t){switch(t.type){case Ce.LoadCheckoutRequested:case Ce.LoadCheckoutSucceeded:return xf(e,\"loadError\",void 0);case Ce.LoadCheckoutFailed:return xf(e,\"loadError\",t.payload);default:return e}}var Qf;!function(e){e.InitializeButtonFailed=\"INITIALIZE_BUTTON_FAILED\",e.InitializeButtonRequested=\"INITIALIZE_BUTTON_REQUESTED\",e.InitializeButtonSucceeded=\"INITIALIZE_BUTTON_SUCCEEDED\",e.DeinitializeButtonFailed=\"DEINITIALIZE_BUTTON_FAILED\",e.DeinitializeButtonRequested=\"DEINITIALIZE_BUTTON_REQUESTED\",e.DeinitializeButtonSucceeded=\"DEINITIALIZE_BUTTON_SUCCEEDED\"}(Qf||(Qf={}));const Jf={data:{},errors:{},statuses:{}},Zf={initializedContainers:{}},Xf={},eg={};function tg(e=Jf,t){return t.meta&&t.meta.methodId?(0,u.HY)({data:(0,u.HY)({[t.meta.methodId]:ng}),errors:(0,u.HY)({[t.meta.methodId]:ig}),statuses:(0,u.HY)({[t.meta.methodId]:rg})})(e,t):e}function ng(e=Zf,t){switch(t.type){case Qf.InitializeButtonSucceeded:return t.meta&&t.meta.containerId?Hf(e,{initializedContainers:{[t.meta.containerId]:!0}}):e;case Qf.DeinitializeButtonSucceeded:return xf(e,\"initializedContainers\",{})}return e}function ig(e=Xf,t){switch(t.type){case Qf.InitializeButtonRequested:case Qf.InitializeButtonSucceeded:return xf(e,\"initializeError\",void 0);case Qf.InitializeButtonFailed:return xf(e,\"initializeError\",t.payload);case Qf.DeinitializeButtonRequested:case Qf.DeinitializeButtonSucceeded:return xf(e,\"deinitializeError\",void 0);case Qf.DeinitializeButtonFailed:return xf(e,\"deinitializeError\",t.payload);default:return e}}function rg(e=eg,t){switch(t.type){case Qf.InitializeButtonRequested:return xf(e,\"isInitializing\",!0);case Qf.InitializeButtonFailed:case Qf.InitializeButtonSucceeded:return xf(e,\"isInitializing\",!1);case Qf.DeinitializeButtonRequested:return xf(e,\"isDeinitializing\",!0);case Qf.DeinitializeButtonFailed:case Qf.DeinitializeButtonSucceeded:return xf(e,\"isDeinitializing\",!1);default:return e}}const og={meta:{},errors:{},statuses:{}};function ag(e=og,t){return(0,u.HY)({data:sg,errors:(0,u.om)(cg,Tf),statuses:dg})(e,t)}function sg(e,t){var n,i;switch(t.type){case Y.LoadConfigSucceeded:return Hf(e,t.payload);case Ie.HydrateInitialState:{const r=Hf(e,null===(n=t.payload)||void 0===n?void 0:n.config);return r&&(null===(i=t.payload)||void 0===i?void 0:i.b2bApiSettings)?Object.assign(Object.assign({},r),{storeConfig:Object.assign(Object.assign({},r.storeConfig),{b2bApiSettings:t.payload.b2bApiSettings})}):r}default:return e}}function cg(e=og.errors,t){switch(t.type){case Y.LoadConfigSucceeded:return xf(e,\"loadError\",void 0);case Y.LoadConfigFailed:return xf(e,\"loadError\",t.payload);default:return e}}function dg(e=og.statuses,t){switch(t.type){case Y.LoadConfigRequested:return xf(e,\"isLoading\",!0);case Y.LoadConfigSucceeded:case Y.LoadConfigFailed:return xf(e,\"isLoading\",!1);default:return e}}const ug={errors:{},statuses:{}};function lg(e=ug,t){return(0,u.HY)({data:hg,errors:(0,u.om)(pg,Tf),statuses:mg})(e,t)}function hg(e,t){var n,i;switch(t.type){case Ce.LoadCheckoutSucceeded:case oe.ApplyCouponSucceeded:case vy.UpdateShippingOptionSucceeded:case oe.RemoveCouponSucceeded:case bp.LoadOrderSucceeded:return qf(e,t.payload&&t.payload.coupons);case Ie.HydrateInitialState:return qf(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.coupons);default:return e}}function pg(e={},t){switch(t.type){case oe.ApplyCouponRequested:case oe.ApplyCouponSucceeded:return xf(e,\"applyCouponError\",void 0);case oe.ApplyCouponFailed:return xf(e,\"applyCouponError\",t.payload);case oe.RemoveCouponRequested:case oe.RemoveCouponSucceeded:return xf(e,\"removeCouponError\",void 0);case oe.RemoveCouponFailed:return xf(e,\"removeCouponError\",t.payload);default:return e}}function mg(e={},t){switch(t.type){case oe.ApplyCouponRequested:return xf(e,\"isApplyingCoupon\",!0);case oe.ApplyCouponSucceeded:case oe.ApplyCouponFailed:return xf(e,\"isApplyingCoupon\",!1);case oe.RemoveCouponRequested:return xf(e,\"isRemovingCoupon\",!0);case oe.RemoveCouponSucceeded:case oe.RemoveCouponFailed:return xf(e,\"isRemovingCoupon\",!1);default:return e}}const yg={errors:{},statuses:{}};function fg(e=yg,t){return(0,u.HY)({data:gg,errors:(0,u.om)(vg,Tf),statuses:_g})(e,t)}function gg(e,t){var n,i;switch(t.type){case Ce.LoadCheckoutSucceeded:case vy.CreateConsignmentsSucceeded:case vy.UpdateConsignmentSucceeded:case vy.DeleteConsignmentSucceeded:case vy.UpdateShippingOptionSucceeded:case oe.ApplyCouponSucceeded:case oe.RemoveCouponSucceeded:case de.ApplyGiftCertificateSucceeded:case de.RemoveGiftCertificateSucceeded:return qf(e,t.payload&&t.payload.giftCertificates);case Ie.HydrateInitialState:return qf(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.giftCertificates);default:return e}}function vg(e=yg.errors,t){switch(t.type){case de.ApplyGiftCertificateRequested:case de.ApplyGiftCertificateSucceeded:return xf(e,\"applyGiftCertificateError\",void 0);case de.ApplyGiftCertificateFailed:return xf(e,\"applyGiftCertificateError\",t.payload);case de.RemoveGiftCertificateRequested:case de.RemoveGiftCertificateSucceeded:return xf(e,\"removeGiftCertificateError\",void 0);case de.RemoveGiftCertificateFailed:return xf(e,\"removeGiftCertificateError\",t.payload);default:return e}}function _g(e=yg.statuses,t){switch(t.type){case de.ApplyGiftCertificateRequested:return xf(e,\"isApplyingGiftCertificate\",!0);case de.ApplyGiftCertificateSucceeded:case de.ApplyGiftCertificateFailed:return xf(e,\"isApplyingGiftCertificate\",!1);case de.RemoveGiftCertificateRequested:return xf(e,\"isRemovingGiftCertificate\",!0);case de.RemoveGiftCertificateSucceeded:case de.RemoveGiftCertificateFailed:return xf(e,\"isRemovingGiftCertificate\",!1);default:return e}}const bg={errors:{},statuses:{}};function Sg(e=bg,t){return(0,u.HY)({data:wg,errors:(0,u.om)(Cg,Tf),statuses:Ig})(e,t)}function wg(e,t){var n,i;switch(t.type){case I.ContinueAsGuestSucceeded:case Ce.LoadCheckoutSucceeded:return Hf(e,t.payload&&t.payload.customer);case _e.CreateCustomerAddressSucceeded:return Hf(e,t.payload);case Ie.HydrateInitialState:return Hf(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.customer);default:return e}}function Cg(e=bg.errors,t){switch(t.type){case _e.CreateCustomerRequested:case _e.CreateCustomerSucceeded:return xf(e,\"createError\",void 0);case _e.CreateCustomerFailed:return xf(e,\"createError\",t.payload);case _e.CreateCustomerAddressRequested:case _e.CreateCustomerAddressSucceeded:return xf(e,\"createAddressError\",void 0);case _e.CreateCustomerAddressFailed:return xf(e,\"createAddressError\",t.payload);default:return e}}function Ig(e=bg.statuses,t){switch(t.type){case _e.CreateCustomerRequested:return xf(e,\"isCreating\",!0);case _e.CreateCustomerFailed:case _e.CreateCustomerSucceeded:return xf(e,\"isCreating\",!1);case _e.CreateCustomerAddressRequested:return xf(e,\"isCreatingAddress\",!0);case _e.CreateCustomerAddressFailed:case _e.CreateCustomerAddressSucceeded:return xf(e,\"isCreatingAddress\",!1);default:return e}}const Pg={data:{},errors:{},statuses:{}};function Eg(e=Pg,t){return(0,u.HY)({data:Og,errors:(0,u.om)(Ag,Tf),statuses:Tg})(e,t)}function Og(e=Pg.data,t){switch(t.type){case we.InitializeSucceeded:return Hf(e,{[t.meta&&t.meta.methodId]:{isInitialized:!0}});case we.DeinitializeSucceeded:return Hf(e,{[t.meta&&t.meta.methodId]:{isInitialized:!1}})}return e}function Ag(e=Pg.errors,t){switch(t.type){case we.InitializeRequested:case we.InitializeSucceeded:return Hf(e,{initializeErrors:Object.assign({},e.initializeErrors),initializeMethodId:e.initializeMethodId?e.initializeMethodId:void 0});case we.InitializeFailed:return Hf(e,{initializeErrors:Object.assign(Object.assign({},e.initializeErrors),{[t.meta&&t.meta.methodId]:t.payload}),initializeMethodId:t.meta&&t.meta.methodId});case we.DeinitializeRequested:case we.DeinitializeSucceeded:return Hf(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case we.DeinitializeFailed:return Hf(e,{deinitializeError:t.payload,deinitializeMethodId:t.meta&&t.meta.methodId});case we.SignInRequested:case we.SignInSucceeded:return Hf(e,{signInError:void 0,signInMethodId:void 0});case we.SignInFailed:return Hf(e,{signInError:t.payload,signInMethodId:t.meta&&t.meta.methodId});case we.SignOutRequested:case we.SignOutSucceeded:return Hf(e,{signOutError:void 0,signOutMethodId:void 0});case we.SignOutFailed:return Hf(e,{signOutError:t.payload,signOutMethodId:t.meta&&t.meta.methodId});case we.ExecutePaymentMethodCheckoutRequested:case we.ExecutePaymentMethodCheckoutSucceeded:return Hf(e,{executePaymentMethodCheckoutError:void 0,executePaymentMethodCheckoutMethodId:void 0});case we.ExecutePaymentMethodCheckoutFailed:return Hf(e,{executePaymentMethodCheckoutError:t.payload,executePaymentMethodCheckoutMethodId:t.meta&&t.meta.methodId});case we.WidgetInteractionStarted:case we.WidgetInteractionFinished:return Hf(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case we.WidgetInteractionFailed:return Hf(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta.methodId});default:return e}}function Tg(e=Pg.statuses,t){switch(t.type){case we.InitializeRequested:return Hf(e,{isInitializing:!0,initializeMethodId:t.meta&&t.meta.methodId});case we.InitializeFailed:case we.InitializeSucceeded:return Hf(e,{isInitializing:!1,initializeMethodId:void 0});case we.DeinitializeRequested:return Hf(e,{isDeinitializing:!0,deinitializeMethodId:t.meta&&t.meta.methodId});case we.DeinitializeFailed:case we.DeinitializeSucceeded:return Hf(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case we.SignInRequested:return Hf(e,{isSigningIn:!0,signInMethodId:t.meta&&t.meta.methodId});case we.SignInFailed:case we.SignInSucceeded:return Hf(e,{isSigningIn:!1,signInMethodId:void 0});case we.SignOutRequested:return Hf(e,{isSigningOut:!0,signOutMethodId:t.meta&&t.meta.methodId});case we.SignOutFailed:case we.SignOutSucceeded:return Hf(e,{isSigningOut:!1,signOutMethodId:void 0});case we.ExecutePaymentMethodCheckoutRequested:return Hf(e,{isExecutingPaymentMethodCheckout:!0,executePaymentMethodCheckoutMethodId:t.meta&&t.meta.methodId});case we.ExecutePaymentMethodCheckoutFailed:case we.ExecutePaymentMethodCheckoutSucceeded:return Hf(e,{isExecutingPaymentMethodCheckout:!1,executePaymentMethodCheckoutMethodId:void 0});case we.WidgetInteractionStarted:return Hf(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta.methodId});case we.WidgetInteractionFinished:case we.WidgetInteractionFailed:return Hf(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}const kg={errors:{},statuses:{}};function xg(e=kg,t){return(0,u.HY)({data:Mg,errors:(0,u.om)(Ng,Tf),statuses:Dg})(e,t)}function Mg(e,t){var n;return t.type===qe.LoadExtensionsSucceeded?qf(e,t.payload):t.type===Ie.HydrateInitialState?qf(e,null===(n=t.payload)||void 0===n?void 0:n.extensions):e}function Ng(e=kg.errors,t){switch(t.type){case qe.LoadExtensionsRequested:case qe.LoadExtensionsSucceeded:return xf(e,\"loadError\",void 0);case qe.RenderExtensionRequested:case qe.RenderExtensionSucceeded:return xf(e,\"renderError\",void 0);case qe.LoadExtensionsFailed:return xf(e,\"loadError\",t.payload);case qe.RenderExtensionFailed:return xf(e,\"renderError\",t.payload);default:return e}}function Dg(e=kg.statuses,t){switch(t.type){case qe.LoadExtensionsRequested:return xf(e,\"isLoading\",!0);case qe.LoadExtensionsSucceeded:case qe.LoadExtensionsFailed:return xf(e,\"isLoading\",!1);default:return e}}const Rg={errors:{},statuses:{}};function zg(e=Rg,t){return(0,u.HY)({data:Fg,extraFields:Bg,errors:(0,u.om)(jg,Tf),statuses:Lg})(e,t)}function Fg(e,t){var n;switch(t.type){case xe.LoadFormFieldsSucceeded:return Hf(e,t.payload);case Ie.HydrateInitialState:return Hf(e,null===(n=t.payload)||void 0===n?void 0:n.formFields);default:return e}}function Bg(e,t){var n,i;return t.type===Ie.HydrateInitialState&&null!==(i=null===(n=t.payload)||void 0===n?void 0:n.extraFields)&&void 0!==i?i:e}function jg(e=Rg.errors,t){switch(t.type){case xe.LoadFormFieldsSucceeded:return xf(e,\"loadError\",void 0);case xe.LoadFormFieldsFailed:return xf(e,\"loadError\",t.payload);default:return e}}function Lg(e=Rg.statuses,t){switch(t.type){case xe.LoadFormFieldsRequested:return xf(e,\"isLoading\",!0);case xe.LoadFormFieldsSucceeded:case xe.LoadFormFieldsFailed:return xf(e,\"isLoading\",!1);default:return e}}const Ug={errors:{},statuses:{}};function Vg(e=Ug,t){return(0,u.HY)({data:qg,errors:(0,u.om)(Hg,Tf),statuses:Gg})(e,t)}function qg(e,t){return t.type===_p.LoadCountriesSucceeded?qf(e,t.payload):e}function Hg(e=Ug.errors,t){switch(t.type){case _p.LoadCountriesRequested:case _p.LoadCountriesSucceeded:return xf(e,\"loadError\",void 0);case _p.LoadCountriesFailed:return xf(e,\"loadError\",t.payload);default:return e}}function Gg(e=Ug.statuses,t){switch(t.type){case _p.LoadCountriesRequested:return xf(e,\"isLoading\",!0);case _p.LoadCountriesSucceeded:case _p.LoadCountriesFailed:return xf(e,\"isLoading\",!1);default:return e}}const Wg={errors:{},meta:{},statuses:{}};function $g(e=Wg,t){return(0,u.HY)({data:Yg,errors:(0,u.om)(Qg,Tf),meta:Kg,statuses:Jg})(e,t)}function Yg(e,t){switch(t.type){case bp.LoadOrderSucceeded:case bp.LoadOrderPaymentsSucceeded:return Hf(e,(0,P.omit)(t.payload,[\"billingAddress\",\"coupons\"]));default:return e}}function Kg(e,t){switch(t.type){case bp.FinalizeOrderSucceeded:case bp.SubmitOrderSucceeded:return Hf(e,Object.assign(Object.assign({},t.meta),{callbackUrl:t.payload&&t.payload.order.callbackUrl,orderToken:t.payload&&t.payload.order.token,payment:t.payload&&t.payload.order&&t.payload.order.payment}));default:return e}}function Qg(e=Wg.errors,t){switch(t.type){case bp.LoadOrderRequested:case bp.LoadOrderSucceeded:case bp.LoadOrderPaymentsSucceeded:case bp.LoadOrderPaymentsRequested:return xf(e,\"loadError\",void 0);case bp.LoadOrderFailed:case bp.LoadOrderPaymentsFailed:return xf(e,\"loadError\",t.payload);default:return e}}function Jg(e=Wg.statuses,t){switch(t.type){case bp.LoadOrderRequested:case bp.LoadOrderPaymentsRequested:return xf(e,\"isLoading\",!0);case bp.LoadOrderSucceeded:case bp.LoadOrderFailed:case bp.LoadOrderPaymentsSucceeded:case bp.LoadOrderPaymentsFailed:return xf(e,\"isLoading\",!1);default:return e}}const Zg={};function Xg(e=Zg,t){return(0,u.HY)({data:ev})(e,t)}function ev(e,t){switch(t.type){case bp.LoadOrderPaymentsSucceeded:case bp.LoadOrderSucceeded:return Ff(e,t.payload&&t.payload.billingAddress);default:return e}}function tv(e={},t){return(0,u.HY)({data:nv})(e,t)}function nv(e,t){return t.type===dm.SubmitPaymentSucceeded?t.payload:e}const iv={errors:{},statuses:{}};function rv(e=iv,t){return(0,u.HY)({data:ov,errors:(0,u.om)(sv,Tf),meta:av,statuses:cv})(e,t)}function ov(e,t){switch(t.type){case Np.LoadPaymentMethodSucceeded:return function(e,t,n){if(!t)return e;const i=(0,P.pick)(t,\"id\"),r=\"object\"==typeof n?(0,P.pickBy)(n):n||i,o=(0,P.findIndex)(e,r),a=[...e];if(-1===o)a.push(t);else{const n=e[o];a[o]=Dy(n)&&Dy(t)?Hf(n,t):t}return a}(e||[],t.payload,t.payload&&{id:t.payload.id,gateway:t.payload.gateway});case Np.LoadPaymentMethodsSucceeded:return qf(e,t.payload,{matchObject:(e,t)=>e.id===t.id&&e.gateway===t.gateway});default:return e}}function av(e,t){return t.type===Np.LoadPaymentMethodsSucceeded?Hf(e,t.meta):e}function sv(e=iv.errors,t){switch(t.type){case Np.LoadPaymentMethodsRequested:case Np.LoadPaymentMethodsSucceeded:return xf(e,\"loadError\",void 0);case Np.LoadPaymentMethodsFailed:return xf(e,\"loadError\",t.payload);case Np.LoadPaymentMethodRequested:case Np.LoadPaymentMethodSucceeded:return Hf(e,{loadMethodId:void 0,loadMethodError:void 0});case Np.LoadPaymentMethodFailed:return Hf(e,{loadMethodId:t.meta.methodId,loadMethodError:t.payload});default:return e}}function cv(e=iv.statuses,t){switch(t.type){case Np.LoadPaymentMethodsRequested:return xf(e,\"isLoading\",!0);case Np.LoadPaymentMethodsSucceeded:case Np.LoadPaymentMethodsFailed:return xf(e,\"isLoading\",!1);case Np.LoadPaymentMethodRequested:return Hf(e,{isLoadingMethod:!0,loadMethodId:t.meta.methodId});case Np.LoadPaymentMethodSucceeded:case Np.LoadPaymentMethodFailed:return Hf(e,{isLoadingMethod:!1,loadMethodId:void 0});default:return e}}const dv={data:{},errors:{},statuses:{}};function uv(e=dv,t){return(0,u.HY)({data:lv,errors:(0,u.om)(hv,Tf),statuses:pv})(e,t)}function lv(e=dv.data,t){switch(t.type){case jp.InitializeSucceeded:if(t.meta){const{methodId:n,gatewayId:i}=t.meta,r=i?`${n}.${i}`:n;return Hf(e,{[r]:{isInitialized:!0}})}break;case jp.DeinitializeSucceeded:if(t.meta){const{methodId:n,gatewayId:i}=t.meta,r=i?`${n}.${i}`:n;return Hf(e,{[r]:{isInitialized:!1}})}}return e}function hv(e=dv.errors,t){switch(t.type){case jp.InitializeRequested:case jp.InitializeSucceeded:return Hf(e,{initializeError:void 0,initializeMethodId:void 0});case jp.InitializeFailed:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return Hf(e,{initializeError:t.payload,initializeMethodId:n})}case jp.DeinitializeRequested:case jp.DeinitializeSucceeded:return Hf(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case jp.DeinitializeFailed:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return Hf(e,{deinitializeError:t.payload,deinitializeMethodId:n})}case jp.ExecuteRequested:case jp.ExecuteSucceeded:return Hf(e,{executeError:void 0,executeMethodId:void 0});case jp.ExecuteFailed:return Hf(e,{executeError:t.payload,executeMethodId:t.meta&&t.meta.methodId});case jp.FinalizeRequested:case jp.FinalizeSucceeded:return Hf(e,{finalizeError:void 0,finalizeMethodId:void 0});case jp.FinalizeFailed:return Hf(e,{finalizeError:t.payload,finalizeMethodId:t.meta&&t.meta.methodId});case jp.WidgetInteractionStarted:case jp.WidgetInteractionFinished:return Hf(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case jp.WidgetInteractionFailed:return Hf(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta.methodId});default:return e}}function pv(e=dv.statuses,t){switch(t.type){case jp.InitializeRequested:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return Hf(e,{isInitializing:!0,initializeMethodId:n})}case jp.InitializeFailed:case jp.InitializeSucceeded:return Hf(e,{isInitializing:!1,initializeMethodId:void 0});case jp.DeinitializeRequested:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return Hf(e,{isDeinitializing:!0,deinitializeMethodId:n})}case jp.DeinitializeFailed:case jp.DeinitializeSucceeded:return Hf(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case jp.ExecuteRequested:return Hf(e,{isExecuting:!0,executeMethodId:t.meta&&t.meta.methodId});case jp.ExecuteFailed:case jp.ExecuteSucceeded:return Hf(e,{isExecuting:!1,executeMethodId:void 0});case jp.FinalizeRequested:return Hf(e,{isFinalizing:!0,finalizeMethodId:t.meta&&t.meta.methodId});case jp.FinalizeFailed:case jp.FinalizeSucceeded:return Hf(e,{isFinalizing:!1,finalizeMethodId:void 0});case jp.WidgetInteractionStarted:return Hf(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta.methodId});case jp.WidgetInteractionFinished:case jp.WidgetInteractionFailed:return Hf(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}const mv={data:{}};function yv(e=mv,t){return(0,u.HY)({data:fv})(e,t)}function fv(e=mv.data,t){return t.type===hy.UpdatePaymentProviderCustomer?Hf(e,t.payload):e}const gv={data:[],errors:{},statuses:{}};function vv(e=gv,t){return(0,u.HY)({data:_v,errors:(0,u.om)(Sv,Tf),meta:bv,statuses:wv})(e,t)}function _v(e=gv.data,t){return t.type===jy.LoadInstrumentsSucceeded?qf(e,t.payload&&t.payload.vaultedInstruments||[]):e}function bv(e,t){switch(t.type){case jy.LoadInstrumentsSucceeded:case jy.DeleteInstrumentSucceeded:return Hf(e,t.meta);default:return e}}function Sv(e=gv.errors,t){switch(t.type){case jy.LoadInstrumentsRequested:case jy.LoadInstrumentsSucceeded:return xf(e,\"loadError\",void 0);case jy.DeleteInstrumentRequested:case jy.DeleteInstrumentSucceeded:return Hf(e,{deleteError:void 0,failedInstrument:void 0});case jy.LoadInstrumentsFailed:return xf(e,\"loadError\",t.payload);case jy.DeleteInstrumentFailed:return Hf(e,{deleteError:t.payload,failedInstrument:t.meta.instrumentId});default:return e}}function wv(e=gv.statuses,t){switch(t.type){case jy.LoadInstrumentsRequested:return xf(e,\"isLoading\",!0);case jy.DeleteInstrumentRequested:return Hf(e,{isDeleting:!0,deletingInstrument:t.meta.instrumentId});case jy.LoadInstrumentsSucceeded:case jy.LoadInstrumentsFailed:return xf(e,\"isLoading\",!1);case jy.DeleteInstrumentSucceeded:case jy.DeleteInstrumentFailed:return Hf(e,{isDeleting:!1,deletingInstrument:void 0});default:return e}}const Cv={data:{}};function Iv(e=Cv,t){return t.meta&&t.meta.methodId?(0,u.HY)({data:(0,u.HY)({[t.meta.methodId]:Pv})})(e,t):e}function Pv(e,t){switch(t.type){case py.InitializeRemoteBillingSucceeded:return xf(e,\"billing\",t.payload&&t.payload.billing);case py.InitializeRemoteShippingSucceeded:return xf(e,\"shipping\",t.payload&&t.payload.shipping);case py.LoadRemoteSettingsSucceeded:return xf(e,\"settings\",t.payload);case py.UpdateRemoteCheckout:return Hf(e,t.payload);default:return e}}const Ev={errors:{updateShippingOptionError:{},updateError:{},deleteError:{}},statuses:{isUpdating:{},isUpdatingShippingOption:{},isDeleting:{}}};function Ov(e=Ev,t){return(0,u.HY)({data:Av,errors:(0,u.om)(Tv,Tf),statuses:kv})(e,t)}function Av(e,t){var n,i;switch(t.type){case Ce.LoadCheckoutSucceeded:case vy.LoadShippingOptionsSucceeded:case vy.CreateConsignmentsSucceeded:case vy.UpdateConsignmentSucceeded:case vy.DeleteConsignmentSucceeded:case vy.UpdateShippingOptionSucceeded:case oe.ApplyCouponSucceeded:case oe.RemoveCouponSucceeded:return qf(e,t.payload&&t.payload.consignments);case _e.SignOutCustomerSucceeded:return qf(e,[]);case Ie.HydrateInitialState:return qf(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.consignments);default:return e}}function Tv(e=Ev.errors,t){switch(t.type){case Ce.LoadCheckoutRequested:case Ce.LoadCheckoutSucceeded:case vy.LoadShippingOptionsSucceeded:case vy.LoadShippingOptionsRequested:return xf(e,\"loadError\",void 0);case Ce.LoadCheckoutFailed:case vy.LoadShippingOptionsFailed:return xf(e,\"loadError\",t.payload);case vy.CreateConsignmentsRequested:case vy.CreateConsignmentsSucceeded:return xf(e,\"createError\",void 0);case vy.CreateConsignmentsFailed:return xf(e,\"createError\",t.payload);case vy.UpdateConsignmentSucceeded:case vy.UpdateConsignmentRequested:return t.meta?Hf(e,{updateError:{[t.meta.id]:void 0}}):e;case vy.UpdateConsignmentFailed:return t.meta?Hf(e,{updateError:{[t.meta.id]:t.payload}}):e;case vy.DeleteConsignmentSucceeded:case vy.DeleteConsignmentRequested:return t.meta?Hf(e,{deleteError:{[t.meta.id]:void 0}}):e;case vy.DeleteConsignmentFailed:return t.meta?Hf(e,{deleteError:{[t.meta.id]:t.payload}}):e;case vy.UpdateShippingOptionRequested:case vy.UpdateShippingOptionSucceeded:return t.meta?Hf(e,{updateShippingOptionError:{[t.meta.id]:void 0}}):e;case vy.UpdateShippingOptionFailed:return t.meta?Hf(e,{updateShippingOptionError:{[t.meta.id]:t.payload}}):e;default:return e}}function kv(e=Ev.statuses,t){switch(t.type){case Ce.LoadCheckoutRequested:return xf(e,\"isLoading\",!0);case vy.LoadShippingOptionsRequested:return xf(e,\"isLoadingShippingOptions\",!0);case Ce.LoadCheckoutSucceeded:case Ce.LoadCheckoutFailed:return xf(e,\"isLoading\",!1);case vy.LoadShippingOptionsSucceeded:case vy.LoadShippingOptionsFailed:return xf(e,\"isLoadingShippingOptions\",!1);case vy.CreateConsignmentsRequested:return xf(e,\"isCreating\",!0);case vy.CreateConsignmentsSucceeded:case vy.CreateConsignmentsFailed:return xf(e,\"isCreating\",!1);case vy.UpdateConsignmentRequested:return t.meta?Hf(e,{isUpdating:{[t.meta.id]:!0}}):e;case vy.UpdateConsignmentSucceeded:case vy.UpdateConsignmentFailed:return t.meta?Hf(e,{isUpdating:{[t.meta.id]:!1}}):e;case vy.DeleteConsignmentRequested:return t.meta?Hf(e,{isDeleting:{[t.meta.id]:!0}}):e;case vy.DeleteConsignmentSucceeded:case vy.DeleteConsignmentFailed:return t.meta?Hf(e,{isDeleting:{[t.meta.id]:!1}}):e;case vy.UpdateShippingOptionRequested:return t.meta?Hf(e,{isUpdatingShippingOption:{[t.meta.id]:!0}}):e;case vy.UpdateShippingOptionSucceeded:case vy.UpdateShippingOptionFailed:return t.meta?Hf(e,{isUpdatingShippingOption:{[t.meta.id]:!1}}):e;default:return e}}function xv(e,t){const n={};return Object.keys(e).forEach(i=>{const r=e[i],o=t?`${t}.${i}`:i;\"object\"==typeof r?Object.assign(n,xv(r,o)):n[o]=r}),n}function Mv(e){return Object.keys(e).sort().reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:e[n]}),{})}const Nv={errors:{},statuses:{}};function Dv(e=Nv,t){return(0,u.HY)({data:Rv,errors:(0,u.om)(zv,Tf),statuses:Fv})(e,t)}function Rv(e,t){if(t.type!==Gy.LoadPickupOptionsSucceeded)return e;if(t.meta){const n=Mv(xv({consignmentId:t.meta.consignmentId,searchArea:t.meta.searchArea}));return xf(e,btoa(`${JSON.stringify(n)}`),t.payload)}}function zv(e=Nv.errors,t){switch(t.type){case Gy.LoadPickupOptionsRequested:case Gy.LoadPickupOptionsSucceeded:return xf(e,\"loadError\",void 0);case Gy.LoadPickupOptionsFailed:return xf(e,\"loadError\",t.payload);default:return e}}function Fv(e=Nv.statuses,t){switch(t.type){case Gy.LoadPickupOptionsRequested:return xf(e,\"isLoading\",!0);case Gy.LoadPickupOptionsSucceeded:case Gy.LoadPickupOptionsFailed:return xf(e,\"isLoading\",!1);default:return e}}const Bv={errors:{},statuses:{}};function jv(e=Bv,t){return(0,u.HY)({data:Lv,errors:(0,u.om)(Uv,Tf),statuses:Vv})(e,t)}function Lv(e,t){return t.type===Iy.LoadShippingCountriesSucceeded?qf(e,t.payload):e}function Uv(e=Bv.errors,t){switch(t.type){case Iy.LoadShippingCountriesRequested:case Iy.LoadShippingCountriesSucceeded:return xf(e,\"loadError\",void 0);case Iy.LoadShippingCountriesFailed:return xf(e,\"loadError\",t.payload);default:return e}}function Vv(e=Bv.statuses,t){switch(t.type){case Iy.LoadShippingCountriesRequested:return xf(e,\"isLoading\",!0);case Iy.LoadShippingCountriesSucceeded:case Iy.LoadShippingCountriesFailed:return xf(e,\"isLoading\",!1);default:return e}}const qv={data:{},errors:{},statuses:{}};function Hv(e=qv,t){return(0,u.HY)({data:Gv,errors:(0,u.om)(Wv,Tf),statuses:$v})(e,t)}function Gv(e=qv.data,t){switch(t.type){case Wy.InitializeSucceeded:return Hf(e,{[t.meta&&t.meta.methodId]:{isInitialized:!0}});case Wy.DeinitializeSucceeded:return Hf(e,{[t.meta&&t.meta.methodId]:{isInitialized:!1}})}return e}function Wv(e=qv.errors,t){switch(t.type){case Wy.InitializeRequested:case Wy.InitializeSucceeded:return Hf(e,{initializeError:void 0,initializeMethodId:void 0});case Wy.InitializeFailed:return Hf(e,{initializeError:t.payload,initializeMethodId:t.meta&&t.meta.methodId});case Wy.DeinitializeRequested:case Wy.DeinitializeSucceeded:return Hf(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case Wy.DeinitializeFailed:return Hf(e,{deinitializeError:t.payload,deinitializeMethodId:t.meta&&t.meta.methodId});case Wy.UpdateAddressRequested:case Wy.UpdateAddressSucceeded:return Hf(e,{updateAddressError:void 0,updateAddressMethodId:void 0});case Wy.UpdateAddressFailed:return Hf(e,{updateAddressError:t.payload,updateAddressMethodId:t.meta&&t.meta.methodId});case Wy.SelectOptionRequested:case Wy.SelectOptionSucceeded:return Hf(e,{selectOptionError:void 0,selectOptionMethodId:void 0});case Wy.SelectOptionFailed:return Hf(e,{selectOptionError:t.payload,selectOptionMethodId:t.meta&&t.meta.methodId});case Wy.WidgetInteractionStarted:case Wy.WidgetInteractionFinished:return Hf(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case Wy.WidgetInteractionFailed:return Hf(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta&&t.meta.methodId});default:return e}}function $v(e=qv.statuses,t){switch(t.type){case Wy.InitializeRequested:return Hf(e,{isInitializing:!0,initializeMethodId:t.meta&&t.meta.methodId});case Wy.InitializeFailed:case Wy.InitializeSucceeded:return Hf(e,{isInitializing:!1,initializeMethodId:void 0});case Wy.DeinitializeRequested:return Hf(e,{isDeinitializing:!0,deinitializeMethodId:t.meta&&t.meta.methodId});case Wy.DeinitializeFailed:case Wy.DeinitializeSucceeded:return Hf(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case Wy.UpdateAddressRequested:return Hf(e,{isUpdatingAddress:!0,updateAddressMethodId:t.meta&&t.meta.methodId});case Wy.UpdateAddressFailed:case Wy.UpdateAddressSucceeded:return Hf(e,{isUpdatingAddress:!1,updateAddressMethodId:void 0});case Wy.SelectOptionRequested:return Hf(e,{isSelectingOption:!0,selectOptionMethodId:t.meta&&t.meta.methodId});case Wy.SelectOptionFailed:case Wy.SelectOptionSucceeded:return Hf(e,{isSelectingOption:!1,selectOptionMethodId:void 0});case Wy.WidgetInteractionStarted:return Hf(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta&&t.meta.methodId});case Wy.WidgetInteractionFinished:case Wy.WidgetInteractionFailed:return Hf(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}const Yv={errors:{},statuses:{}};function Kv(e=Yv,t){return(0,u.HY)({data:Qv,errors:(0,u.om)(Jv,Tf),statuses:Zv})(e,t)}function Qv(e,t){return t.type===cf.SendSignInEmailSucceeded?Hf(e,t.payload):e}function Jv(e=Yv.errors,t){switch(t.type){case cf.SendSignInEmailRequested:case cf.SendSignInEmailSucceeded:return xf(e,\"sendError\",void 0);case cf.SendSignInEmailFailed:return xf(e,\"sendError\",t.payload);default:return e}}function Zv(e=Yv.statuses,t){switch(t.type){case cf.SendSignInEmailRequested:return xf(e,\"isSending\",!0);case cf.SendSignInEmailFailed:case cf.SendSignInEmailSucceeded:return xf(e,\"isSending\",!1);default:return e}}const Xv={errors:{},statuses:{}};function e_(e=Xv,t){return(0,u.HY)({errors:(0,u.om)(t_,Tf),statuses:n_})(e,t)}function t_(e=Xv.errors,t){switch(t.type){case Py.ApplyStoreCreditRequested:case Py.ApplyStoreCreditSucceeded:return xf(e,\"applyError\",void 0);case Py.ApplyStoreCreditFailed:return xf(e,\"applyError\",t.payload);default:return e}}function n_(e=Xv.statuses,t){switch(t.type){case Py.ApplyStoreCreditRequested:return xf(e,\"isApplying\",!0);case Py.ApplyStoreCreditSucceeded:case Py.ApplyStoreCreditFailed:return xf(e,\"isApplying\",!1);default:return e}}const i_={errors:{},statuses:{}};function r_(e=i_,t){return(0,u.HY)({errors:(0,u.om)(o_,Tf),statuses:a_})(e,t)}function o_(e=i_.errors,t){switch(t.type){case Ay.UpdateSubscriptionsRequested:case Ay.UpdateSubscriptionsSucceeded:return xf(e,\"updateError\",void 0);case Ay.UpdateSubscriptionsFailed:return xf(e,\"updateError\",t.payload);default:return e}}function a_(e=i_.statuses,t){switch(t.type){case Ay.UpdateSubscriptionsRequested:return xf(e,\"isUpdating\",!0);case Ay.UpdateSubscriptionsFailed:case Ay.UpdateSubscriptionsSucceeded:return xf(e,\"isUpdating\",!1);default:return e}}const s_={errors:{},statuses:{}};function c_(e=s_,t){return(0,u.HY)({data:d_,errors:(0,u.om)(u_,Tf),statuses:l_})(e,t)}function d_(e,t){var n;switch(t.type){case Ce.LoadCheckoutSucceeded:case Ce.UpdateCheckoutSucceeded:case Py.ApplyStoreCreditSucceeded:case I.UpdateBillingAddressSucceeded:case oe.ApplyCouponSucceeded:case oe.RemoveCouponSucceeded:case vy.CreateConsignmentsSucceeded:case vy.UpdateConsignmentSucceeded:case vy.DeleteConsignmentSucceeded:case vy.UpdateShippingOptionSucceeded:case vy.LoadShippingOptionsSucceeded:case de.ApplyGiftCertificateSucceeded:case de.RemoveGiftCertificateSucceeded:case Re.VerifyCheckoutSucceeded:return Hf(e,(0,P.omit)(t.payload,[\"billingAddress\",\"cart\",\"consignments\",\"customer\",\"coupons\",\"giftCertificates\"]));case bp.SubmitOrderSucceeded:return xf(e,\"orderId\",t.payload&&t.payload.order.orderId);case Ie.HydrateInitialState:return Hf(e,(0,P.omit)(null===(n=t.payload)||void 0===n?void 0:n.checkout,[\"billingAddress\",\"cart\",\"consignments\",\"customer\",\"coupons\",\"giftCertificates\"]));default:return e}}function u_(e=s_.errors,t){switch(t.type){case Ce.LoadCheckoutRequested:case Ce.LoadCheckoutSucceeded:return xf(e,\"loadError\",void 0);case Ce.LoadCheckoutFailed:return xf(e,\"loadError\",t.payload);case Ce.UpdateCheckoutRequested:case Ce.UpdateCheckoutSucceeded:return xf(e,\"updateError\",void 0);case Ce.UpdateCheckoutFailed:return xf(e,\"updateError\",t.payload);default:return e}}function l_(e=s_.statuses,t){switch(t.type){case Ce.LoadCheckoutRequested:return xf(e,\"isLoading\",!0);case Ce.LoadCheckoutFailed:case Ce.LoadCheckoutSucceeded:return xf(e,\"isLoading\",!1);case Ce.UpdateCheckoutRequested:return xf(e,\"isUpdating\",!0);case Ce.UpdateCheckoutFailed:case Ce.UpdateCheckoutSucceeded:return xf(e,\"isUpdating\",!1);case Re.ExecuteRequested:return xf(e,\"isExecutingSpamCheck\",!0);case Re.ExecuteFailed:case Re.ExecuteSucceeded:return xf(e,\"isExecutingSpamCheck\",!1);default:return e}}function h_(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}function p_(e){return function(e){const t=Object.create(e);return function(e,t){let n=Object.getPrototypeOf(e);for(;n;)t(n),n=Object.getPrototypeOf(n)}(e,n=>{Object.getOwnPropertyNames(n).forEach(n=>{\"constructor\"!==n&&\"function\"==typeof t[n]&&\"_\"!==n.charAt(0)&&(t[n]=((e,t)=>(...n)=>(0,u.ol)(e[t].call(e,...n)))(e,n))})}),t}(e)}const m_={\"mollie.credit_card\":{provider:\"mollie\",method:\"credit_card\"},\"adyenv2.scheme\":{provider:\"adyenv2\",method:\"scheme\"},\"adyenv3.scheme\":{provider:\"adyenv3\",method:\"scheme\"},\"adyenv2.bcmc\":{provider:\"adyenv2\",method:\"bcmc\"},\"adyenv2.ideal\":{provider:\"adyenv2\",method:\"ideal\"},\"adyenv2.sepadirectdebit\":{provider:\"adyenv2\",method:\"sepadirectdebit\"},\"adyenv2.directEbanking\":{provider:\"adyenv2\",method:\"directEbanking\"},\"adyenv2.giropay\":{provider:\"adyenv2\",method:\"giropay\"},braintree:{provider:\"braintree\",method:\"credit_card\"},braintreepaypal:{provider:\"braintree\",method:\"paypal\"},braintreeach:{provider:\"braintree\",method:\"ach\"},authorizenet:{provider:\"authorizenet\",method:\"credit_card\"},elavon:{provider:\"elavon\",method:\"credit_card\"},checkoutcom:{provider:\"checkoutcom\",method:\"credit_card\"},\"checkoutcom.credit_card\":{provider:\"checkoutcom\",method:\"credit_card\"},\"checkoutcom.card\":{provider:\"checkoutcom\",method:\"card\"},sagepay:{provider:\"sagepay\",method:\"credit_card\"},stripe:{provider:\"stripe\",method:\"credit_card\"},\"stripev3.card\":{provider:\"stripev3\",method:\"card\"},\"stripeupe.card\":{provider:\"stripeupe\",method:\"card\"},cybersource:{provider:\"cybersource\",method:\"credit_card\"},cybersourcev2:{provider:\"cybersourcev2\",method:\"credit_card\"},bnz:{provider:\"bnz\",method:\"credit_card\"},converge:{provider:\"converge\",method:\"credit_card\"},bluesnapv2:{provider:\"bluesnapv2\",method:\"credit_card\"},\"bluesnapdirect.credit_card\":{provider:\"bluesnapdirect\",method:\"credit_card\"},\"bluesnapdirect.ecp\":{provider:\"bluesnapdirect\",method:\"ecp\"},\"bluesnapdirect.sepa_direct_debit\":{provider:\"bluesnapdirect\",method:\"sepa_direct_debit\"},orbital:{provider:\"orbital\",method:\"credit_card\"},paymetric:{provider:\"paymetric\",method:\"credit_card\"},bolt:{provider:\"bolt\",method:\"credit_card\"},\"barclaycard.credit_card\":{provider:\"barclaycard\",method:\"credit_card\"},moneris:{provider:\"moneris\",method:\"credit_card\"},cba_mpgs:{provider:\"cba_mpgs\",method:\"credit_card\"},worldpayaccess:{provider:\"worldpayaccess\",method:\"credit_card\"},\"worldpayaccess.credit_card\":{provider:\"worldpayaccess\",method:\"credit_card\"},squarev2:{provider:\"squarev2\",method:\"credit_card\"},paypalcommercecreditcards:{provider:\"paypalcommerce\",method:\"credit_card\"},paypalcommerce:{provider:\"paypalcommerce\",method:\"paypal\"},bigcommerce_payments_creditcards:{provider:\"bigcommerce_payments\",method:\"credit_card\"},bigcommerce_payments:{provider:\"bigcommerce_payments\",method:\"paypal\"},tdonlinemart:{provider:\"tdonlinemart\",method:\"credit_card\"}};function y_(e){return(0,P.pickBy)({firstName:e.firstName,lastName:e.lastName,company:e.company,address1:e.address1,address2:e.address2,city:e.city,stateOrProvince:e.stateOrProvince,countryCode:e.countryCode,postalCode:e.postalCode,phone:e.phone,customFields:e.customFields},P.identity)}const f_={errors:{},statuses:{}};function g_(){const e=function(){const e=bf(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.token},e=>()=>e),t=bf(e=>e.errors.loadError,e=>()=>e),n=bf(e=>!!e.statuses.isLoading,e=>()=>e);return(0,K.B4)((i=Mf)=>({getToken:e(i),getLoadError:t(i),isLoading:n(i)}))}(),t=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e,e=>()=>h_(e(),()=>new k(C.MissingBillingAddress))),n=bf(e=>e.errors.updateError,e=>()=>e),i=bf(e=>e.errors.continueAsGuestError,e=>()=>e),r=bf(e=>e.errors.loadError,e=>()=>e),o=bf(e=>!!e.statuses.isUpdating,e=>()=>e),a=bf(e=>!!e.statuses.isContinuingAsGuest,e=>()=>e),s=bf(e=>!!e.statuses.isLoading,e=>()=>e);return(0,K.B4)((c=Bf)=>({getBillingAddress:e(c),getBillingAddressOrThrow:t(c),getUpdateError:n(c),getContinueAsGuestError:i(c),getLoadError:r(c),isUpdating:o(c),isContinuingAsGuest:a(c),isLoading:s(c)}))}(),n=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e,e=>()=>h_(e(),()=>new k(C.MissingCart))),n=bf(e=>e.errors.loadError,e=>()=>e),i=bf(e=>!!e.statuses.isLoading,e=>()=>e),r=bf(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.locale},e=>()=>e);return(0,K.B4)((o=Gf)=>({getCart:e(o),getCartOrThrow:t(o),getLoadError:n(o),isLoading:i(o),getLocale:r(o)}))}(),i=function(){const e=bf(e=>e,e=>()=>e),t=bf(e=>e.statuses,e=>(0,K.Bj)(t=>{if(t){const n=e[t];return!0===(n&&n.isInitializing)}return(0,P.some)(e,{isInitializing:!0})})),n=bf(e=>e.data,e=>(0,K.Bj)((t,n)=>{const i=e[t];return!!i&&(n?!0===i.initializedContainers[n]:(0,P.some)(i.initializedContainers,e=>!0===e))})),i=bf(e=>e.statuses,e=>(0,K.Bj)(t=>{if(t){const n=e[t];return!0===(n&&n.isDeinitializing)}return(0,P.some)(e,{isDeinitializing:!0})})),r=bf(e=>e.errors,e=>(0,K.Bj)(t=>{const n=t?e[t]:(0,P.find)((0,P.values)(e),e=>!(!e||!e.initializeError));return n&&n.initializeError})),o=bf(e=>e.errors,e=>(0,K.Bj)(t=>{const n=t?e[t]:(0,P.find)((0,P.values)(e),e=>!(!e||!e.deinitializeError));return n&&n.deinitializeError}));return(0,K.B4)((a=Jf)=>({getState:e(a),isInitializing:t(a),isInitialized:n(a),isDeinitializing:i(a),getInitializeError:r(a),getDeinitializeError:o(a)}))}(),r=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e=>e.data,e=>t=>{if(!e)return;const{flashMessages:n}=e.context;return n?void 0!==t?n.filter(({type:e})=>t===e):n:void 0}),n=bf(e=>e.data,(e,{formState:t})=>t&&t.data,(e,t={customerAccount:[],shippingAddress:[],billingAddress:[]})=>()=>e?Object.assign(Object.assign({},e.storeConfig),{formFields:t}):void 0),i=bf(n,e=>()=>h_(e(),()=>new k(C.MissingCheckoutConfig))),r=bf(e=>e.data&&e.data.context,e=>()=>e),o=bf(e=>e.meta&&e.meta.externalSource,e=>()=>e),a=bf(e=>{var t;return null===(t=e.meta)||void 0===t?void 0:t.host},e=>()=>e),s=bf(e=>{var t;return null===(t=e.meta)||void 0===t?void 0:t.locale},e=>()=>e),c=bf(e=>e.meta&&e.meta.variantIdentificationToken,e=>()=>e),d=bf(e=>e.errors.loadError,e=>()=>e),u=bf(e=>!!e.statuses.isLoading,e=>()=>e);return(0,K.B4)((l=og,h)=>({getConfig:e(l),getFlashMessages:t(l),getStoreConfig:n(l,{formState:h}),getStoreConfigOrThrow:i(l,{formState:h}),getContextConfig:r(l),getExternalSource:o(l),getHost:a(l),getLocale:s(l),getVariantIdentificationToken:c(l),getLoadError:d(l),isLoading:u(l)}))}(),o=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e=>e.errors.loadError,e=>()=>e),n=bf(e=>!!e.statuses.isLoading,e=>()=>e);return(0,K.B4)((i=Ug)=>({getCountries:e(i),getLoadError:t(i),isLoading:n(i)}))}(),a=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e=>e.errors.removeCouponError,e=>()=>e),n=bf(e=>e.errors.applyCouponError,e=>()=>e),i=bf(e=>!!e.statuses.isApplyingCoupon,e=>()=>e),r=bf(e=>!!e.statuses.isRemovingCoupon,e=>()=>e);return(0,K.B4)((o=ug)=>({getCoupons:e(o),getRemoveError:t(o),getApplyError:n(o),isApplying:i(o),isRemoving:r(o)}))}(),s=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e,e=>()=>h_(e(),()=>new k(C.MissingCustomer))),n=bf(e=>e.errors.createError,e=>()=>e),i=bf(e=>!!e.statuses.isCreating,e=>()=>e),r=bf(e=>e.errors.createAddressError,e=>()=>e),o=bf(e=>!!e.statuses.isCreatingAddress,e=>()=>e);return(0,K.B4)((a=bg)=>({getCustomer:e(a),getCustomerOrThrow:t(a),getCreateAccountError:n(a),isCreatingCustomerAccount:i(a),getCreateAddressError:r(a),isCreatingCustomerAddress:o(a)}))}(),d=function(){const e=bf(e=>e.errors.signInMethodId,e=>e.errors.signInError,(e,t)=>n=>{if(!n||e===n)return t}),t=bf(e=>e.errors.signOutMethodId,e=>e.errors.signOutError,(e,t)=>n=>{if(!n||e===n)return t}),n=bf(e=>e.errors.executePaymentMethodCheckoutMethodId,e=>e.errors.executePaymentMethodCheckoutError,(e,t)=>n=>{if(!n||e===n)return t}),i=bf(e=>e.errors.initializeMethodId,e=>e.errors.initializeErrors,(e,t)=>n=>{if(e&&t)return n?t[n]:t[e]}),r=bf(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),o=bf(e=>e.statuses.signInMethodId,e=>e.statuses.isSigningIn,(e,t)=>n=>!(n&&e!==n||!t)),a=bf(e=>e.statuses.signOutMethodId,e=>e.statuses.isSigningOut,(e,t)=>n=>!(n&&e!==n||!t)),s=bf(e=>e.statuses.executePaymentMethodCheckoutMethodId,e=>e.statuses.isExecutingPaymentMethodCheckout,(e,t)=>n=>!(n&&e!==n||!t)),c=bf(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),d=bf(e=>e.data,e=>t=>!(!e[t]||!e[t].isInitialized)),u=bf(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return(0,K.B4)((l=Pg)=>({getSignInError:e(l),getSignOutError:t(l),getExecutePaymentMethodCheckoutError:n(l),getInitializeError:i(l),getWidgetInteractionError:r(l),isSigningIn:o(l),isSigningOut:a(l),isExecutingPaymentMethodCheckout:s(l),isInitializing:c(l),isInitialized:d(l),isWidgetInteracting:u(l)}))}(),u=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e=>e.errors.removeGiftCertificateError,e=>()=>e),n=bf(e=>e.errors.applyGiftCertificateError,e=>()=>e),i=bf(e=>!!e.statuses.isApplyingGiftCertificate,e=>()=>e),r=bf(e=>!!e.statuses.isRemovingGiftCertificate,e=>()=>e);return(0,K.B4)((o=yg)=>({getGiftCertificates:e(o),getRemoveError:t(o),getApplyError:n(o),isApplying:i(o),isRemoving:r(o)}))}(),l=function(){const e=bf(e=>e.data,e=>t=>{if(!e)return;const n=t.gateway?`${t.gateway}.${t.id}`:t.id,i=m_[n];return i?(0,P.filter)(e,i):[]}),t=bf(e=>e.data,(e=[])=>t=>{const n=(0,P.values)(m_);return e.find(e=>e.bigpayToken===t&&\"card\"===e.type&&n.some(t=>(0,P.isMatch)(e,t)))}),n=bf(t,e=>t=>h_(e(t),()=>new k(C.MissingPaymentInstrument))),i=bf(e=>e.data,e=>()=>{if(e)return(0,P.flatMap)(m_,t=>(0,P.filter)(e,e=>(0,P.isMatch)(e,t)))}),r=bf(e=>e.meta,e=>()=>e),o=bf(e=>e.errors.loadError,e=>()=>e),a=bf(e=>e.errors.failedInstrument,e=>e.errors.deleteError,(e,t)=>n=>{if(!n||e===n)return t}),s=bf(e=>e.statuses.isLoading,e=>()=>!!e),c=bf(e=>e.statuses.deletingInstrument,e=>e.statuses.isDeleting,(e,t)=>n=>!(n&&e!==n||!t));return(0,K.B4)((d=gv)=>({getCardInstrument:t(d),getCardInstrumentOrThrow:n(d),getInstruments:i(d),getInstrumentsByPaymentMethod:e(d),getInstrumentsMeta:r(d),getLoadError:o(d),getDeleteError:a(d),isLoading:s(d),isDeleting:c(d)}))}(),h=function(){const e=bf(e=>e.data,e=>(t=[],n)=>{const i=(0,P.find)(t,{code:n});return(e?e.shippingAddress:[]).map(e=>s(e,t,i))}),t=bf(e=>e.data,e=>(t=[],n)=>{const i=(0,P.find)(t,{code:n});return(e?e.billingAddress:[]).map(e=>s(e,t,i))}),n=bf(e=>e.data,e=>()=>e?e.customerAccount:[]),i=bf(e=>e.extraFields,e=>()=>e&&e.address.length?e.address.map(c):[]),r=bf(e=>e.extraFields,e=>()=>e&&e.order.length?e.order.map(c):[]),o=bf(e=>e.errors.loadError,e=>()=>e),a=bf(e=>!!e.statuses.isLoading,e=>()=>e);function s(e,t,n){return\"countryCode\"===e.name?function(e,t=[],n){if(!t.length)return e;const{code:i=\"\"}=n||{},r=t.map(({code:e,name:t})=>({value:e,label:t}));return Object.assign(Object.assign({},e),{options:{items:r},default:i,type:\"array\",fieldType:\"dropdown\",itemtype:\"string\"})}(e,t,n):\"stateOrProvince\"===e.name?function(e,t){const{subdivisions:n=[],requiresState:i}=t||{};if(!n.length)return Object.assign(Object.assign({},e),{required:i??!1});const r=n.map(({code:e,name:t})=>({value:e,label:t}));return Object.assign(Object.assign({},e),{name:\"stateOrProvinceCode\",options:{items:r},required:i??!0,type:\"array\",fieldType:\"dropdown\",itemtype:\"string\"})}(e,n):\"postalCode\"===e.name?function(e,t){const{hasPostalCodes:n=[]}=t||{};return void 0===n?e:Object.assign(Object.assign({},e),{required:Boolean(n)})}(e,n):e}return(0,K.B4)((s=Rg)=>({getShippingAddressFields:e(s),getBillingAddressFields:t(s),getCustomerAccountFields:n(s),getAddressExtraFields:i(s),getOrderExtraFields:r(s),getLoadError:o(s),isLoading:a(s)}))}(),p=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e=>e.meta,e=>()=>e),n=bf(e=>e.data,e=>(t,n)=>n?(0,P.find)(e,{id:t,gateway:n}):(0,P.find)(e,{id:t})),i=bf(n,e=>(t,n)=>h_(e(t,n),()=>new k(C.MissingPaymentMethod))),r=bf(e=>e.errors.loadError,e=>()=>e),o=bf(e=>e.errors.loadMethodId,e=>e.errors.loadMethodError,(e,t)=>n=>{if(!n||e===n)return t}),a=bf(e=>e.statuses.isLoading,e=>()=>!!e),s=bf(e=>e.statuses.loadMethodId,e=>e.statuses.isLoadingMethod,(e,t)=>n=>!(n&&e!==n||!t));return(0,K.B4)((c=iv)=>({getPaymentMethods:e(c),getPaymentMethodsMeta:t(c),getPaymentMethod:n(c),getPaymentMethodOrThrow:i(c),getLoadError:r(c),getLoadMethodError:o(c),isLoading:a(c),isLoadingMethod:s(c)}))}(),m=function(){const e=bf(e=>e.errors.initializeMethodId,e=>e.errors.initializeError,(e,t)=>n=>{if(!n||e===n)return t}),t=bf(e=>e.errors.executeMethodId,e=>e.errors.executeError,(e,t)=>n=>{if(!n||e===n)return t}),n=bf(e=>e.errors.finalizeMethodId,e=>e.errors.finalizeError,(e,t)=>n=>{if(!n||e===n)return t}),i=bf(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),r=bf(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),o=bf(e=>e.data,e=>t=>{const n=t.gatewayId?`${t.methodId}.${t.gatewayId}`:t.methodId;return!(!e[n]||!e[n].isInitialized)}),a=bf(e=>e.statuses.executeMethodId,e=>e.statuses.isExecuting,(e,t)=>n=>!(n&&e!==n||!t)),s=bf(e=>e.statuses.finalizeMethodId,e=>e.statuses.isFinalizing,(e,t)=>n=>!(n&&e!==n||!t)),c=bf(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return(0,K.B4)((d=dv)=>({getInitializeError:e(d),getExecuteError:t(d),getFinalizeError:n(d),getWidgetInteractingError:i(d),isInitializing:r(d),isInitialized:o(d),isExecuting:a(d),isFinalizing:s(d),isWidgetInteracting:c(d)}))}(),y=function(){const e=bf(e=>e.data,e=>(t,n)=>{if(!e)return;const i=Mv(xv({consignmentId:t,searchArea:n})),r=btoa(`${JSON.stringify(i)}`);return e[r]}),t=bf(e=>e.errors.loadError,e=>()=>e),n=bf(e=>!!e.statuses.isLoading,e=>()=>e);return(0,K.B4)((i=Nv)=>({getPickupOptions:e(i),getLoadError:t(i),isLoading:n(i)}))}(),f=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e,e=>()=>h_(e(),()=>new k(C.MissingPaymentProviderCustomer)));return(0,K.B4)((n=mv)=>({getPaymentProviderCustomer:e(n),getPaymentProviderCustomerOrThrow:t(n)}))}(),g=function(){const e=bf(e=>e.data,e=>t=>e[t]);return(0,K.B4)((t=Cv)=>({getCheckout:e(t)}))}(),v=function(){const e=bf(e=>e.data,e=>()=>{const t=null==e?void 0:e.find(e=>!e.selectedPickupOption);return null==t?void 0:t.shippingAddress}),t=bf(e,e=>()=>h_(e(),()=>new k(C.MissingShippingAddress))),n=bf(e=>e.data,e=>()=>{const t=null==e?void 0:e.filter(e=>!e.selectedPickupOption);return t?t.map(e=>e.shippingAddress):[]}),i=bf(n,e=>()=>h_(e(),()=>new k(C.MissingShippingAddress)));return(0,K.B4)((r=Ev)=>({getShippingAddress:e(r),getShippingAddressOrThrow:t(r),getShippingAddresses:n(r),getShippingAddressesOrThrow:i(r)}))}(),_=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e=>e.errors.loadError,e=>()=>e),n=bf(e=>e.statuses.isLoading,e=>()=>!!e);return(0,K.B4)((i=Bv)=>({getShippingCountries:e(i),getLoadError:t(i),isLoading:n(i)}))}(),b=function(){const e=bf(e=>e.errors.updateAddressMethodId,e=>e.errors.updateAddressError,(e,t)=>n=>{if(!n||e===n)return t}),t=bf(e=>e.errors.selectOptionMethodId,e=>e.errors.selectOptionError,(e,t)=>n=>{if(!n||e===n)return t}),n=bf(e=>e.errors.initializeMethodId,e=>e.errors.initializeError,(e,t)=>n=>{if(!n||e===n)return t}),i=bf(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),r=bf(e=>e.statuses.updateAddressMethodId,e=>e.statuses.isUpdatingAddress,(e,t)=>n=>!(n&&e!==n||!t)),o=bf(e=>e.statuses.selectOptionMethodId,e=>e.statuses.isSelectingOption,(e,t)=>n=>!(n&&e!==n||!t)),a=bf(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),s=bf(e=>e.data,e=>t=>!(!e[t]||!e[t].isInitialized)),c=bf(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return(0,K.B4)((d=qv)=>({getUpdateAddressError:e(d),getSelectOptionError:t(d),getInitializeError:n(d),getWidgetInteractionError:i(d),isUpdatingAddress:r(d),isSelectingOption:o(d),isInitializing:a(d),isInitialized:s(d),isWidgetInteracting:c(d)}))}(),S=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e,e=>()=>h_(e(),()=>new k(C.MissingConsignments))),n=bf(e=>e.data,e=>t=>{if(e&&e.length)return(0,P.find)(e,{id:t})}),i=bf(e=>e.data,e=>t=>{if(e&&e.length)return(0,P.find)(e,e=>{return n=e.shippingAddress,i=t,(0,P.isEqual)(y_(n),y_(i));var n,i})}),r=bf(e=>e.data,e=>()=>{if(e&&e.length)return e[0].selectedShippingOption}),o=bf(e=>e.errors.loadError,e=>()=>e),a=bf(e=>e.errors.createError,e=>()=>e),s=bf(e=>e.errors.loadShippingOptionsError,e=>()=>e),c=bf(e,(e,{cart:t})=>t.getCart,(e,t)=>()=>{const n=t();if(!n)return[];const i=(e()||[]).reduce((e,t)=>e.concat(t.lineItemIds),[]);return(n.lineItems.physicalItems||[]).filter(e=>i.indexOf(e.id)<0)}),d=bf(e=>e.errors.updateError,e=>t=>t?e[t]:(0,P.find)(e)),u=bf(e=>e.errors.deleteError,e=>t=>t?e[t]:(0,P.find)(e)),l=bf(i,d,a,(e,t,n)=>i=>{const r=e(i);return r?t(r.id):n()}),h=bf(e=>e.errors.updateShippingOptionError,e=>t=>t?e[t]:(0,P.find)(e)),p=bf(e=>e.statuses.isLoading,e=>()=>!0===e),m=bf(e=>e.statuses.isLoadingShippingOptions,e=>()=>!0===e),y=bf(e=>e.statuses.isCreating,e=>()=>!0===e),f=bf(e=>e.statuses.isUpdating,e=>t=>t?!0===e[t]:!0===(0,P.find)(e)),g=bf(e=>e.statuses.isDeleting,e=>t=>t?!0===e[t]:!0===(0,P.find)(e)),v=bf(i,f,y,(e,t,n)=>i=>{const r=e(i);return r?t(r.id):n()}),_=bf(e=>e.statuses.isUpdatingShippingOption,e=>t=>t?!0===e[t]:!0===(0,P.find)(e));return(0,K.B4)((b=Ev,S)=>({getConsignments:e(b),getConsignmentsOrThrow:t(b),getConsignmentById:n(b),getConsignmentByAddress:i(b),getShippingOption:r(b),getLoadError:o(b),getCreateError:a(b),getLoadShippingOptionsError:s(b),getUnassignedItems:c(b,{cart:S}),getUpdateError:d(b),getDeleteError:u(b),getItemAssignmentError:l(b),getUpdateShippingOptionError:h(b),isLoading:p(b),isLoadingShippingOptions:m(b),isCreating:y(b),isUpdating:f(b),isDeleting:g(b),isAssigningItems:v(b),isUpdatingShippingOption:_(b)}))}(),w=function(){const e=bf(e=>e.data,(e,{billingAddress:t})=>t.getBillingAddress,(e,{cart:t})=>t.getCart,(e,{customer:t})=>t.getCustomer,(e,{consignments:t})=>t.getConsignments,(e,{coupons:t})=>t.getCoupons,(e,{giftCertificates:t})=>t.getGiftCertificates,(e,t,n,i,r,o,a)=>()=>{const s=t(),c=n(),d=i(),u=r()||[],l=o()||[],h=a()||[];if(e&&c&&d)return Object.assign(Object.assign({},e),{billingAddress:s,cart:c,customer:d,consignments:u,coupons:l,giftCertificates:h})}),t=bf(e,e=>()=>h_(e(),()=>new k(C.MissingCheckout))),n=bf(e,e=>t=>{const n=e();if(!n)return;const i=n.grandTotal||0,r=n.customer.storeCredit||0;return t?Math.max(i-r,0):n.outstandingBalance}),i=bf(e=>e.errors.loadError,e=>()=>e),r=bf(e=>e.errors.updateError,e=>()=>e),o=bf(e=>e.statuses.isExecutingSpamCheck,e=>()=>!0===e),a=bf(e=>e.statuses.isLoading,e=>()=>!0===e),s=bf(e=>e.statuses.isUpdating,e=>()=>!0===e);return(0,K.B4)((c=s_,d,u,l,h,p,m)=>({getCheckout:e(c,{billingAddress:d,cart:u,consignments:l,coupons:h,customer:p,giftCertificates:m}),getCheckoutOrThrow:t(c,{billingAddress:d,cart:u,consignments:l,coupons:h,customer:p,giftCertificates:m}),getOutstandingBalance:n(c,{billingAddress:d,cart:u,consignments:l,coupons:h,customer:p,giftCertificates:m}),getLoadError:i(c),getUpdateError:r(c),isExecutingSpamCheck:o(c),isLoading:a(c),isUpdating:s(c)}))}(),I=function(){const e=bf(e=>e.data,(e,{billingAddress:t})=>t.getOrderBillingAddress(),(e,{coupons:t})=>t.getCoupons(),(e,t,n=[])=>()=>{if(e&&t)return Object.assign(Object.assign({},e),{billingAddress:t,coupons:n})}),t=bf(e,e=>()=>h_(e(),()=>new k(C.MissingOrder))),n=bf(e=>e.meta,e=>()=>e),i=bf(e=>e.errors.loadError,e=>()=>e),r=bf(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.payments},(e=[])=>t=>{const n=e.find(({providerId:e})=>e===t);return null==n?void 0:n.paymentId}),o=bf(e=>!!e.statuses.isLoading,e=>()=>e);return(0,K.B4)((a=Wg,s,c)=>({getOrder:e(a,{billingAddress:s,coupons:c}),getOrderOrThrow:t(a,{billingAddress:s,coupons:c}),getOrderMeta:n(a),getLoadError:i(a),getPaymentId:r(a),isLoading:o(a)}))}(),E=function(){const e=bf(e=>e.data,e=>()=>e);return(0,K.B4)((t=Zg)=>({getOrderBillingAddress:e(t)}))}(),O=function(){const e=bf(({order:e})=>e.getOrderMeta,e=>()=>{const t=e();return t&&t.payment}),t=bf(({order:e})=>e.getOrder,e=>()=>{const t=e();return(0,P.find)(t&&t.payments,({providerId:e})=>\"giftcertificate\"!==e&&\"storecredit\"!==e)}),n=bf(({checkout:e})=>e.getCheckout,e=>()=>{const t=e();return(0,P.find)(t&&t.payments,({providerType:e})=>e===Bm)}),i=bf(e,n,t,(e,t,n)=>()=>{const i=e();if(i&&i.id)return{providerId:i.id,gatewayId:i.gateway};const r=t()||n();return r&&r.providerId?{providerId:r.providerId,gatewayId:r.gatewayId}:void 0}),r=bf(i,e=>()=>h_(e(),()=>new k(C.MissingPaymentId))),o=bf(e,n,t,(e,t,n)=>()=>{const i=e();if(i&&i.status)return i.status.replace(\"PAYMENT_STATUS_\",\"\");const r=t()||n();return r?r.detail.step:void 0}),a=bf(o,e=>()=>h_(e(),()=>new k(C.MissingPaymentStatus))),s=bf(({order:e})=>e.getOrderMeta,e=>()=>{const t=e();return t&&t.token}),c=bf(s,e=>()=>h_(e(),()=>new k(C.MissingPaymentToken))),d=bf(e,e=>()=>{const t=e();return t&&t.redirectUrl}),u=bf(d,e=>()=>h_(e(),()=>new k(C.MissingPaymentRedirectUrl))),l=bf(({checkout:e})=>e.getOutstandingBalance,e=>(t=!1)=>{const n=e(t);return!!n&&n>0}),h=bf(o,e=>t=>!(!t||!t.nonce)||e()===Um||e()===Vm);return(0,K.B4)((e,t)=>({getPaymentId:i({checkout:e,order:t}),getPaymentIdOrThrow:r({checkout:e,order:t}),getPaymentStatus:o({checkout:e,order:t}),getPaymentStatusOrThrow:a({checkout:e,order:t}),getPaymentToken:s({checkout:e,order:t}),getPaymentTokenOrThrow:c({checkout:e,order:t}),getPaymentRedirectUrl:d({checkout:e,order:t}),getPaymentRedirectUrlOrThrow:u({checkout:e,order:t}),isPaymentDataRequired:l({checkout:e,order:t}),isPaymentDataSubmitted:h({checkout:e,order:t})}))}(),A=function(){const e=bf(e=>e.errors.applyError,e=>()=>e),t=bf(e=>!!e.statuses.isApplying,e=>()=>e);return(0,K.B4)((n=f_)=>({getApplyError:e(n),isApplying:t(n)}))}(),T=function(){const e=bf(e=>e.errors.updateError,e=>()=>e),t=bf(e=>!!e.statuses.isUpdating,e=>()=>e);return(0,K.B4)((n=i_)=>({getUpdateError:e(n),isUpdating:t(n)}))}(),x=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e=>e.errors.sendError,e=>()=>e),n=bf(e=>!!e.statuses.isSending,e=>()=>e);return(0,K.B4)((i=Yv)=>({getEmail:e(i),getSendError:t(i),isSending:n(i)}))}(),M=function(){const e=bf(e=>e.data,e=>()=>e),t=bf(e=>e.data,e=>t=>null==e?void 0:e.find(e=>e.region===t)),n=bf(e=>e.errors.loadError,e=>()=>e),i=bf(e=>e.statuses.isLoading,e=>()=>!!e);return(0,K.B4)((r=kg)=>({getExtensions:e(r),getExtensionByRegion:t(r),getLoadError:n(r),isLoading:i(r)}))}();return(c,C={})=>{const P=e(c.b2bToken),k=t(c.billingAddress),N=n(c.cart),D=i(c.checkoutButton),R=o(c.countries),z=a(c.coupons),F=s(c.customer),B=d(c.customerStrategies),j=M(c.extensions),L=h(c.formFields),U=u(c.giftCertificates),V=l(c.instruments),q=E(c.orderBillingAddress),H=p(c.paymentMethods),G=f(c.paymentProviderCustomer),W=m(c.paymentStrategies),$=y(c.pickupOptions),Y=g(c.remoteCheckout),K=v(c.consignments),Q=_(c.shippingCountries),J=b(c.shippingStrategies),Z=T(c.subscriptions),X=A(c.storeCredit),ee=x(c.signInEmail),te=S(c.consignments,N),ne=w(c.checkout,k,N,te,z,F,U),ie=I(c.order,q,z),re=O(ne,ie),oe={b2bToken:P,billingAddress:k,cart:N,checkout:ne,checkoutButton:D,config:r(c.config,c.formFields),consignments:te,countries:R,coupons:z,customer:F,customerStrategies:B,extensions:j,form:L,giftCertificates:U,instruments:V,order:ie,orderBillingAddress:q,payment:re,paymentMethods:H,paymentProviderCustomer:G,paymentStrategies:W,pickupOptions:$,remoteCheckout:Y,shippingAddress:K,shippingCountries:Q,shippingStrategies:J,signInEmail:ee,subscriptions:Z,storeCredit:X};return C.shouldWarnMutation?function(e){return Object.keys(e).reduce((t,n)=>(t[n]=p_(e[n]),t),{})}(oe):oe}}function v_(e={},t){const n=(o=function(){const e=new Of;return[\"catalog_only\",\"empty_cart\",\"invalid_order_id\",\"invalid_order_token\",\"missing_order_token\",\"missing_provider_token\",\"missing_shipping_method\",\"order_completion_error\",\"order_could_not_be_finalized_error\",\"order_create_failed\",\"provider_fatal_error\",\"provider_setup_error\",\"stock_too_low\"].forEach(t=>{e.register(t,(e,t)=>new If(e,t))}),e.register(\"invalid_payment_provider\",e=>new Bi(e)),e.register(\"payment_config_not_found\",e=>new Bi(e)),e}(),e=>(0,Q.H)(e).pipe((0,m.W)(e=>{if(e instanceof Error||e.payload instanceof Error)throw e;if((t=e.payload)&&\"object\"==typeof t&&[\"body\",\"headers\",\"status\",\"statusText\"].every(e=>Object.prototype.hasOwnProperty.call(t,e))){const t=e.payload.body&&e.payload.body.detail;throw Object.assign(Object.assign({},e),{payload:o.createError(e.payload,t)})}var t;throw e}))),i=g_(),r=(0,u.HY)({b2bToken:Nf,billingAddress:jf,cart:Wf,checkout:c_,checkoutButton:tg,config:ag,consignments:Ov,countries:Vg,coupons:lg,customer:Sg,customerStrategies:Eg,extensions:xg,formFields:zg,giftCertificates:fg,instruments:vv,orderBillingAddress:Xg,order:$g,payment:tv,paymentMethods:rv,paymentStrategies:uv,pickupOptions:Dv,paymentProviderCustomer:yv,remoteCheckout:Iv,shippingCountries:jv,shippingStrategies:Hv,signInEmail:Kv,subscriptions:r_,storeCredit:e_});var o;return(0,u.iN)(r,e,Object.assign({actionTransformer:n,stateTransformer:e=>i(e)},t))}function __(n){\"https:\"!==document.location.protocol&&$().warn(\"The BigCommerce Checkout SDK should not be used on a non-HTTPS page\"),\"production\"!==q()&&$().warn(\"Note that the development build is not optimized. To create a production build, set process​.env.NODE_ENV to `production`.\");const i={meta:{externalSource:n&&n.externalSource,host:null==n?void 0:n.host,locale:null==n?void 0:n.locale,variantIdentificationToken:window.checkoutVariantIdentificationToken},errors:{},statuses:{}},{locale:r=\"\",shouldWarnMutation:a=!0}=n||{},s=(0,o.createRequestSender)({host:n&&n.host}),c=v_({config:i},{shouldWarnMutation:a}),u=new V(s,{getBasePath:()=>{var e,t;return null!==(t=null===(e=c.getState().config.getStoreConfig())||void 0===e?void 0:e.links.baseUrl)&&void 0!==t?t:void 0},getFeatures:()=>{var e,t,n;return null!==(n=null===(t=null===(e=c.getState().config.getStoreConfig())||void 0===e?void 0:e.checkoutSettings)||void 0===t?void 0:t.features)&&void 0!==n?n:{}}}),l=Mp(c),h=new Ap(u),p=new ke(u),m=new X(new re(s)),y=Je((0,d.Hb)()),f=new Ze(u),g=new Le(y,f),v=new kp(h,new Yp(p)),_=new My(new Ny(u)),S=new Ne(new De(u)),C=new Me(p,m,S),I=qy(c,u),E=function(e,t,n={useFallback:!1}){const{useFallback:i}=n,r=new ge(i);for(const[,n]of Object.entries(t))if(me(n))for(const t of n.resolveIds)r.register(t,()=>n(e));return r}(I,t,{useFallback:!0}),O=function(e,t){const n=new ge;for(const[,i]of Object.entries(t))if(me(i))for(const t of i.resolveIds)n.register(t,()=>i(e));return n}(I,e),A=new gt(new vt(u)),T=new Ot,k=new xt(c,T),x=L(c,function(){const e=function(){const e=bf(({checkout:e})=>e.getCheckout,e=>Fy(e)),t=bf(({order:e})=>e.getOrder,e=>Fy(e)),n=bf(({config:e})=>e.getStoreConfig,e=>Fy(e)),i=bf(({shippingAddress:e})=>e.getShippingAddress,({config:e})=>e.getContextConfig,(e,t)=>Fy(()=>{const n=e(),i=t();if(!n){if(!i||!i.geoCountryCode)return;return{firstName:\"\",lastName:\"\",company:\"\",address1:\"\",address2:\"\",city:\"\",stateOrProvince:\"\",stateOrProvinceCode:\"\",postalCode:\"\",country:\"\",phone:\"\",customFields:[],countryCode:i.geoCountryCode}}return n})),r=bf(({consignments:e})=>e.getConsignments,e=>Fy(()=>{const t=e(),n=null==t?void 0:t.find(e=>!e.selectedPickupOption);return null==n?void 0:n.availableShippingOptions})),o=bf(({consignments:e})=>e.getConsignments,e=>Fy(e)),a=bf(({consignments:e})=>e.getConsignments,e=>Fy(()=>{const t=e(),n=null==t?void 0:t.find(e=>!e.selectedPickupOption);return null==n?void 0:n.selectedShippingOption})),s=bf(({shippingCountries:e})=>e.getShippingCountries,e=>Fy(e)),c=bf(({billingAddress:e})=>e.getBillingAddress,({config:e})=>e.getContextConfig,(e,t)=>Fy(()=>{const n=e(),i=t();return(!n||(0,P.values)((0,P.omit)(n,\"shouldSaveAddress\",\"email\",\"id\")).every(e=>!e||!e.length))&&i&&i.geoCountryCode?{id:n?n.id:\"\",firstName:\"\",lastName:\"\",company:\"\",address1:\"\",address2:\"\",city:\"\",email:n?n.email:\"\",stateOrProvince:\"\",stateOrProvinceCode:\"\",postalCode:\"\",country:\"\",phone:\"\",customFields:[],countryCode:i.geoCountryCode}:n})),d=bf(({countries:e})=>e.getCountries,e=>Fy(e)),u=bf(({paymentMethods:e})=>e.getPaymentMethods,e=>Fy(e)),l=bf(({paymentMethods:e})=>e.getPaymentMethod,e=>Fy(e)),h=bf(({payment:e})=>e.getPaymentId,({paymentMethods:e})=>e.getPaymentMethod,(e,t)=>Fy(()=>{const n=e();return n&&t(n.providerId,n.gatewayId)})),p=bf(({cart:e})=>e.getCart,e=>Fy(e)),m=bf(({coupons:e})=>e.getCoupons,e=>Fy(e)),y=bf(({giftCertificates:e})=>e.getGiftCertificates,e=>Fy(e)),f=bf(({customer:e})=>e.getCustomer,e=>Fy(e)),g=bf(({signInEmail:e})=>e.getEmail,e=>Fy(e)),v=bf(({b2bToken:e})=>e.getToken,e=>Fy(e)),_=bf(({payment:e})=>e.isPaymentDataRequired,e=>Fy(e)),b=bf(({payment:e})=>e.isPaymentDataSubmitted,({paymentMethods:e})=>e.getPaymentMethod,(e,t)=>Fy((n,i)=>e(t(n,i)))),S=bf(({instruments:e})=>e.getInstruments,({instruments:e})=>e.getInstrumentsByPaymentMethod,(e,t)=>Fy(function(n){return n?t(n):e()})),w=bf(({form:e})=>e.getCustomerAccountFields,e=>Fy(e)),C=bf(({form:e})=>e.getBillingAddressFields,({countries:e})=>e.getCountries,(e,t)=>Fy(n=>e(t(),n))),I=bf(({form:e})=>e.getShippingAddressFields,({shippingCountries:e})=>e.getShippingCountries,(e,t)=>Fy(n=>e(t(),n))),E=bf(({form:e})=>e.getAddressExtraFields,e=>Fy(e)),O=bf(({form:e})=>e.getOrderExtraFields,e=>Fy(e)),A=bf(({config:e})=>e.getFlashMessages,e=>Fy(e)),T=bf(({pickupOptions:e})=>e.getPickupOptions,e=>Fy(e)),k=bf(({config:e})=>e.getStoreConfig,e=>Fy(()=>{const t=e();if(t)return t.checkoutSettings.checkoutUserExperienceSettings})),x=bf(({extensions:e})=>e.getExtensions,e=>Fy(e)),M=bf(({paymentProviderCustomer:e})=>e.getPaymentProviderCustomer,e=>Fy(e)),N=bf(({extensions:e})=>e.getExtensionByRegion,e=>Fy(e));return(0,K.B4)(P=>({getCheckout:e(P),getOrder:t(P),getConfig:n(P),getExtensions:x(P),getExtensionByRegion:N(P),getFlashMessages:A(P),getShippingAddress:i(P),getShippingOptions:r(P),getConsignments:o(P),getSelectedShippingOption:a(P),getShippingCountries:s(P),getBillingAddress:c(P),getBillingCountries:d(P),getPaymentMethods:u(P),getPaymentMethod:l(P),getSelectedPaymentMethod:h(P),getCart:p(P),getCoupons:m(P),getGiftCertificates:y(P),getCustomer:f(P),isPaymentDataRequired:_(P),isPaymentDataSubmitted:b(P),getSignInEmail:g(P),getB2BToken:v(P),getInstruments:S(P),getCustomerAccountFields:w(P),getBillingAddressFields:C(P),getShippingAddressFields:I(P),getAddressExtraFields:E(P),getOrderExtraFields:O(P),getPickupOptions:T(P),getUserExperienceSettings:k(P),getPaymentProviderCustomer:M(P)}))}(),t=function(){const e=Cf(e=>e,e=>()=>{for(const t of Object.keys(e)){const n=e[t]();if(n)return n}}),t=bf(({shippingStrategies:e})=>e.getSelectOptionError,({consignments:e})=>e.getUpdateShippingOptionError,(e,t)=>n=>e()||t(n));return(0,K.B4)(n=>{const i={getLoadCheckoutError:n.checkout.getLoadError,getUpdateCheckoutError:n.checkout.getUpdateError,getSubmitOrderError:n.paymentStrategies.getExecuteError,getFinalizeOrderError:n.paymentStrategies.getFinalizeError,getLoadOrderError:n.order.getLoadError,getLoadCartError:n.cart.getLoadError,getLoadBillingCountriesError:n.countries.getLoadError,getLoadShippingCountriesError:n.shippingCountries.getLoadError,getLoadPaymentMethodsError:n.paymentMethods.getLoadError,getLoadPaymentMethodError:n.paymentMethods.getLoadMethodError,getInitializePaymentError:n.paymentStrategies.getInitializeError,getSignInError:n.customerStrategies.getSignInError,getSignOutError:n.customerStrategies.getSignOutError,getInitializeCustomerError:n.customerStrategies.getInitializeError,getLoadShippingOptionsError:n.consignments.getLoadShippingOptionsError,getSelectShippingOptionError:t(n),getContinueAsGuestError:n.billingAddress.getContinueAsGuestError,getUpdateBillingAddressError:n.billingAddress.getUpdateError,getUpdateSubscriptionsError:n.subscriptions.getUpdateError,getUpdateShippingAddressError:n.shippingStrategies.getUpdateAddressError,getDeleteConsignmentError:n.consignments.getDeleteError,getUpdateConsignmentError:n.consignments.getUpdateError,getCreateConsignmentsError:n.consignments.getCreateError,getInitializeShippingError:n.shippingStrategies.getInitializeError,getApplyStoreCreditError:n.storeCredit.getApplyError,getApplyCouponError:n.coupons.getApplyError,getRemoveCouponError:n.coupons.getRemoveError,getApplyGiftCertificateError:n.giftCertificates.getApplyError,getRemoveGiftCertificateError:n.giftCertificates.getRemoveError,getLoadInstrumentsError:n.instruments.getLoadError,getDeleteInstrumentError:n.instruments.getDeleteError,getLoadConfigError:n.config.getLoadError,getSignInEmailError:n.signInEmail.getSendError,getLoadB2BTokenError:n.b2bToken.getLoadError,getCreateCustomerAccountError:n.customer.getCreateAccountError,getCreateCustomerAddressError:n.customer.getCreateAddressError,getPickupOptionsError:n.pickupOptions.getLoadError,getLoadExtensionsError:n.extensions.getLoadError};return Object.assign({getError:e(i)},i)})}(),n=function(){const e=Cf(e=>e,e=>()=>Object.keys(e).some(t=>e[t]())),t=bf(({shippingStrategies:e})=>e.isSelectingOption,({consignments:e})=>e.isUpdatingShippingOption,(e,t)=>n=>e()||t(n)),n=bf(({customerStrategies:e})=>e.isInitializing,({customerStrategies:e})=>e.isSigningIn,({customerStrategies:e})=>e.isSigningOut,({customerStrategies:e})=>e.isExecutingPaymentMethodCheckout,({customerStrategies:e})=>e.isWidgetInteracting,(e,t,n,i,r)=>o=>e(o)||t(o)||n(o)||i(o)||r(o)),i=bf(({shippingStrategies:e})=>e.isInitializing,({shippingStrategies:e})=>e.isUpdatingAddress,({shippingStrategies:e})=>e.isSelectingOption,({shippingStrategies:e})=>e.isWidgetInteracting,(e,t,n,i)=>r=>e(r)||t(r)||n(r)||i(r)),r=bf(({paymentStrategies:e})=>e.isInitializing,({paymentStrategies:e})=>e.isExecuting,({paymentStrategies:e})=>e.isFinalizing,({paymentStrategies:e})=>e.isWidgetInteracting,(e,t,n,i)=>r=>e(r)||t(r)||n(r)||i(r)),o=bf(({paymentStrategies:e})=>e.isExecuting,({checkout:e})=>e.isExecutingSpamCheck,(e,t)=>n=>e(n)||t());return(0,K.B4)(a=>{const s={isLoadingCheckout:a.checkout.isLoading,isUpdatingCheckout:a.checkout.isUpdating,isExecutingSpamCheck:a.checkout.isExecutingSpamCheck,isSubmittingOrder:o(a),isFinalizingOrder:a.paymentStrategies.isFinalizing,isLoadingOrder:a.order.isLoading,isLoadingCart:a.cart.isLoading,isLoadingBillingCountries:a.countries.isLoading,isLoadingShippingCountries:a.shippingCountries.isLoading,isLoadingPaymentMethods:a.paymentMethods.isLoading,isLoadingPaymentMethod:a.paymentMethods.isLoadingMethod,isInitializingPayment:a.paymentStrategies.isInitializing,isSigningIn:a.customerStrategies.isSigningIn,isSigningOut:a.customerStrategies.isSigningOut,isExecutingPaymentMethodCheckout:a.customerStrategies.isExecutingPaymentMethodCheckout,isInitializingCustomer:a.customerStrategies.isInitializing,isInitializedCustomer:a.customerStrategies.isInitialized,isLoadingShippingOptions:a.consignments.isLoadingShippingOptions,isSelectingShippingOption:t(a),isUpdatingBillingAddress:a.billingAddress.isUpdating,isUpdatingSubscriptions:a.subscriptions.isUpdating,isCreatingCustomerAccount:a.customer.isCreatingCustomerAccount,isCreatingCustomerAddress:a.customer.isCreatingCustomerAddress,isContinuingAsGuest:a.billingAddress.isContinuingAsGuest,isUpdatingShippingAddress:a.shippingStrategies.isUpdatingAddress,isUpdatingConsignment:a.consignments.isUpdating,isDeletingConsignment:a.consignments.isDeleting,isCreatingConsignments:a.consignments.isCreating,isInitializingShipping:a.shippingStrategies.isInitializing,isApplyingStoreCredit:a.storeCredit.isApplying,isApplyingCoupon:a.coupons.isApplying,isRemovingCoupon:a.coupons.isRemoving,isApplyingGiftCertificate:a.giftCertificates.isApplying,isRemovingGiftCertificate:a.giftCertificates.isRemoving,isLoadingInstruments:a.instruments.isLoading,isDeletingInstrument:a.instruments.isDeleting,isLoadingConfig:a.config.isLoading,isSendingSignInEmail:a.signInEmail.isSending,isLoadingB2BToken:a.b2bToken.isLoading,isCustomerStepPending:n(a),isShippingStepPending:i(a),isPaymentStepPending:r(a),isLoadingPickupOptions:a.pickupOptions.isLoading};return Object.assign({isPending:e(s)},s)})}();return i=>({data:e(i),errors:t(i),statuses:n(i)})}());return new mf(c,x,k,function(e,t){const n={[Tt.ConsignmentsChanged]:Nt};return new Mt(e,t,n)}(x,k),new b(new w(s)),new N(new F(u),_),C,m,new Pe(new Ee(u),C,g),new Sy(new Cy(u),p),new Sp(new wp(u,{locale:r})),new ae(new le(u)),new Ae(function(e,t){const n=new fe,i=(0,d.vQ)(),r=new ke(t),o=new Me(r,new X(new re(t)),new Ne(new De(t))),a=new Le(Je(i),new Ze(t)),s=new Pe(new Ee(t),o,a);return n.register(\"default\",()=>new Xe(e,s)),n}(c,u),O,I),new U,new he(new pe(u)),new Hy(new Ky(l,u)),v,new Fp(new Bp(u),new Up(s)),new Gp(function(e,t,n){const i=new Lm({defaultToken:qp.CREDIT_CARD}),r=new Fm,o=new fm(t),a=new ke(n),s=new Yp(a),c=new kp(new Ap(n),s),u=new tm(Je((0,d.Hb)())),l=new ym(o,c,r,u),h=(0,Fn.createFormPoster)(),p=ey(h,u),m=new mm(e);return i.register(qp.CONVERGE,()=>new Wm(e,c,l,m,h)),i.register(qp.PPSDK,()=>new oy(e,c,ly(e,c,n,p,m),new yy(n,p),new Kp(\"PPSDK\"))),i}(c,l,u),E,v,g,I),new Qy(new Jy(u)),new Ey(new Oy(u,{locale:r}),c),new Zy(function(e,t){const n=new fe,i=qy(e),r=new ke(t),o=new Cy(t),a=new Sy(o,r),s=new Fp(new Bp(t),new Up(t)),c=(0,d.vQ)(),u=new My(new Ny(t)),l=new N(new F(t),u),h=window,p=new un(i);return n.register(\"amazonpay\",()=>new tf(e,a,s,Zt(),new Zy(n))),n.register(\"stripeupe\",()=>new df(e,new wo(c),a,s)),n.register(\"braintreeacceleratedcheckout\",()=>new rf(e,l,a,s,new gy,new or(new An((0,d.vQ)(),h,p),h))),n.register(\"paypalcommerceacceleratedcheckout\",()=>new sf(e,l,a,s,new gy,da(),Va())),n.register(\"default\",()=>new of(e,a)),n}(c,u)),new uf(new lf(u)),g,new Ty(new ky(u)),_,S,A,T)}class b_ extends Dt{constructor(e){super(e||\"An unexpected error has occurred during config creation process. Please try again later.\"),this.name=\"AmazonPayV2ConfigCreationError\",this.type=\"amazon_pay_v2_config_creation_error\"}}function S_(e){return e instanceof Object&&\"buyNowInitializeOptions\"in e}var w_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class C_{constructor(e,t,n){this.paymentIntegrationService=e,this.amazonPayV2PaymentProcessor=t,this.amazonPayV2ConfigRequestSender=n}initialize(e){var t;return w_(this,void 0,void 0,function*(){const{methodId:n,containerId:i,amazonpay:r}=e,{buttonColor:o}=r||{};if(!n||!i)throw new en('Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.');const{getPaymentMethodOrThrow:a}=this.paymentIntegrationService.getState(),s=a(n),{initializationData:c}=s;yield this.amazonPayV2PaymentProcessor.initialize(s),r||(yield this.paymentIntegrationService.loadDefaultCheckout());const d=S_(r)?void 0:r;S_(r)&&\"function\"==typeof(null===(t=r.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody)&&(this._buyNowInitializeOptions=r.buyNowInitializeOptions,this.amazonPayV2PaymentProcessor.updateBuyNowFlowFlag(!0)),this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:this.paymentIntegrationService.getState(),containerId:i,methodId:n,options:d,placement:qt.Cart,buttonColor:o,isButtonMicroTextDisabled:null==c?void 0:c.isButtonMicroTextDisabled}),this._buyNowInitializeOptions&&this.amazonPayV2PaymentProcessor.prepareCheckoutWithCreationRequestConfig(this._getCheckoutCreationRequestConfig.bind(this))})}deinitialize(){return this.amazonPayV2PaymentProcessor.deinitialize()}_createBuyNowCartOrThrow(){var e,t;return w_(this,void 0,void 0,function*(){const n=null===(t=null===(e=this._buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody)||void 0===t?void 0:t.call(e);if(!n)throw new Ft(Rt.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(n)}catch(e){throw new Bn}})}_createCheckoutConfig(e){return w_(this,void 0,void 0,function*(){try{const t=(yield this.amazonPayV2ConfigRequestSender.createCheckoutConfig(e)).body,{payload:n,public_key:i}=t,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"payload\",\"public_key\"]);return Object.assign({payloadJSON:n,publicKeyId:i},r)}catch(e){throw new b_}})}_getCheckoutCreationRequestConfig(){return w_(this,void 0,void 0,function*(){const e=yield this._createBuyNowCartOrThrow(),t={amount:String(e.baseAmount),currencyCode:e.currency.code};return{createCheckoutSessionConfig:yield this._createCheckoutConfig(e.id),estimatedOrderAmount:t,productType:0===Bt(e)?Gt.PayOnly:Gt.PayAndShip}})}}class I_{constructor(e){this._requestSender=e}createCheckoutConfig(e){const t={cartId:e},n=Object.assign({\"X-API-INTERNAL\":Qn,\"Content-Type\":Zn.Json},Xn);return this._requestSender.post(\"/api/storefront/payment/amazonpay\",{headers:n,body:t})}}const P_=Xt(e=>{const t=(0,o.createRequestSender)(),n=new I_(t),i=Zt();return new C_(e,i,n)},[{id:\"amazonpay\"}]);var E_,O_,A_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};!function(e){e.Subtotal=\"Subtotal\",e.Shipping=\"Shipping\"}(E_||(E_={})),function(e){e.Black=\"black\",e.White=\"white\",e.WhiteBorder=\"white-border\"}(O_||(O_={}));class T_{constructor(e,t,n,i,r){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=n,this._braintreeSdk=i,this._applePayScriptLoader=r,this._onAuthorizeCallback=P.noop,this._subTotalLabel=E_.Subtotal,this._shippingLabel=E_.Shipping}initialize(e){var t,n;return A_(this,void 0,void 0,function*(){const{methodId:i,containerId:r,applepay:o}=e;if(!i||!o)throw new Ft(Rt.MissingPaymentMethod);yield this._applePayScriptLoader.loadSdk();const{onPaymentAuthorize:a,buyNowInitializeOptions:s,requiresShipping:c}=o;this._requiresShipping=c,this._buyNowInitializeOptions=s,this._onAuthorizeCallback=a,s||(yield this._paymentIntegrationService.loadDefaultCheckout()),yield this._paymentIntegrationService.loadPaymentMethod(i);const d=this._paymentIntegrationService.getState();return this._paymentMethod=d.getPaymentMethodOrThrow(i),d.getCart()&&(yield this._paymentIntegrationService.verifyCheckoutSpamProtection()),(null===(t=this._paymentMethod.initializationData)||void 0===t?void 0:t.gateway)===En.BRAINTREE&&this._paymentMethod.clientToken&&this._braintreeSdk.initialize(this._paymentMethod.clientToken),this._applePayButton=this._createButton(r,null===(n=this._paymentMethod.initializationData)||void 0===n?void 0:n.styleOption),this._applePayButton.addEventListener(\"click\",this._handleWalletButtonClick.bind(this)),Promise.resolve()})}deinitialize(){return Promise.resolve()}_createButton(e,t){const n=document.getElementById(e);if(!n)throw new en(\"Unable to create wallet button without valid container ID.\");const i=this._createApplePayButtonElement(t);return n.appendChild(i),i}_createApplePayButtonElement(e){const t=document.createElement(\"apple-pay-button\");return t.setAttribute(\"buttonstyle\",(e=>{switch(e){case O_.White:return\"white\";case O_.WhiteBorder:return\"white-outline\";case O_.Black:default:return\"black\"}})(e)),t.setAttribute(\"type\",\"plain\"),t.setAttribute(\"style\",\"--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;\"),t}_handleWalletButtonClick(e){var t;return A_(this,void 0,void 0,function*(){if(e.preventDefault(),!this._paymentMethod||!this._paymentMethod.initializationData)throw new Ft(Rt.MissingPaymentMethod);if(this._buyNowInitializeOptions&&\"function\"==typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody){const{countryCode:e,currencyCode:n,merchantCapabilities:i,supportedNetworks:r,storeName:o}=this._paymentMethod.initializationData,a=this._getRequestWithEmptyTotal(e,n,r,i);this._requiresShipping&&(null===(t=a.requiredShippingContactFields)||void 0===t||t.push(\"postalAddress\"));const s=this._sessionFactory.create(a);this._handleApplePayEvents(s,this._paymentMethod,o),s.begin()}else{const e=this._paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getStoreConfigOrThrow(),i=e.getCheckoutOrThrow(),r=this._getBaseRequest(t,i,n,this._paymentMethod),o=this._sessionFactory.create(r);this._handleApplePayEvents(o,this._paymentMethod,n.storeProfile.storeName),o.begin()}})}_getRequestWithEmptyTotal(e,t,n,i){return{countryCode:e,currencyCode:t,supportedNetworks:n,merchantCapabilities:i,total:{label:\"\",amount:\"0\",type:\"pending\"},requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"]}}_getBaseRequest(e,t,n,i){var r;const{storeProfile:{storeCountryCode:o,storeName:a}}=n,{currency:{code:s,decimalPlaces:c}}=e,{initializationData:{merchantCapabilities:d,supportedNetworks:u}}=i,l=e.lineItems.physicalItems.length>0,h={requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"],countryCode:o,currencyCode:s,merchantCapabilities:d,supportedNetworks:u,lineItems:[],total:l?{label:a,amount:`${t.grandTotal.toFixed(c)}`,type:\"pending\"}:{label:a,amount:`${t.grandTotal.toFixed(c)}`,type:\"final\"}};if(l)null===(r=h.requiredShippingContactFields)||void 0===r||r.push(\"postalAddress\");else{const e=[{label:this._subTotalLabel,amount:`${t.subtotal.toFixed(c)}`}];t.taxes.forEach(t=>e.push({label:t.name,amount:`${t.amount.toFixed(c)}`})),h.lineItems=e}return h}_handleApplePayEvents(e,t,n){e.onvalidatemerchant=n=>A_(this,void 0,void 0,function*(){try{const{body:i}=yield this._onValidateMerchant(t,n);e.completeMerchantValidation(i)}catch(e){throw new Error(\"Merchant validation failed\")}}),this._buyNowInitializeOptions&&!this._requiresShipping&&(e.onpaymentmethodselected=()=>A_(this,void 0,void 0,function*(){yield this._createBuyNowCart(),this._handlePaymentMethodSelected(e)})),e.onshippingcontactselected=t=>A_(this,void 0,void 0,function*(){this._buyNowInitializeOptions&&this._requiresShipping&&(yield this._createBuyNowCart()),yield this._handleShippingContactSelected(e,n,t)}),e.onshippingmethodselected=t=>A_(this,void 0,void 0,function*(){yield this._handleShippingMethodSelected(e,n,t)}),e.oncancel=()=>A_(this,void 0,void 0,function*(){try{const e=`/remote-checkout/${t.id}/signout`;return yield this._requestSender.get(e),yield this._paymentIntegrationService.loadCheckout()}catch(e){throw new Tn}}),e.onpaymentauthorized=n=>A_(this,void 0,void 0,function*(){return this._onPaymentAuthorized(n,e,t)})}_createBuyNowCart(){var e,t;return A_(this,void 0,void 0,function*(){try{const n=null===(t=null===(e=this._buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody)||void 0===t?void 0:t.call(e);if(!n)throw new Ft(Rt.MissingCart);const i=yield this._paymentIntegrationService.createBuyNowCart(n);yield this._paymentIntegrationService.loadCheckout(i.id);const r=this._paymentIntegrationService.getState(),{shouldExecuteSpamCheck:o}=r.getCheckoutOrThrow();o&&(yield this._paymentIntegrationService.verifyCheckoutSpamProtection())}catch(e){throw new Bn}})}_handlePaymentMethodSelected(e){const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getStoreConfigOrThrow(),r=t.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new Ft(Rt.MissingPaymentMethod);const o=this._getBaseRequest(n,r,i,this._paymentMethod);delete o.total.type,e.completePaymentMethodSelection({newTotal:o.total,newLineItems:o.lineItems})}_handleShippingContactSelected(e,t,n){var i;return A_(this,void 0,void 0,function*(){const r=this._transformContactToAddress(n.shippingContact);try{yield this._paymentIntegrationService.updateShippingAddress(r)}catch(t){throw e.abort(),new Error(\"Shipping address update failed\")}let o=this._paymentIntegrationService.getState();const{currency:{decimalPlaces:a}}=o.getCartOrThrow();let s=o.getCheckoutOrThrow();const c=null===(i=s.consignments[0].selectedShippingOption)||void 0===i?void 0:i.id,d=s.consignments[0].availableShippingOptions,u=null==d?void 0:d.find(({id:e})=>e===c),l=null==d?void 0:d.filter(e=>e.id!==c),h=u?[{label:u.description,amount:`${u.cost.toFixed(a)}`,detail:u.additionalDescription,identifier:u.id}]:[];if(l&&[...l.filter(e=>e.isRecommended),...l.filter(e=>!e.isRecommended)].forEach(e=>h.push({label:e.description,amount:`${e.cost.toFixed(a)}`,detail:e.additionalDescription,identifier:e.id})),!(d instanceof Array))throw new Error(\"Shipping options not available.\");if(0===d.length)return void e.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:\"pending\",label:t,amount:`${s.grandTotal.toFixed(a)}`},[]);const p=d.find(e=>e.isRecommended),m=p?p.id:d[0].id,y=u?u.id:m;try{yield this._updateShippingOption(y)}catch(e){throw new Error(\"Shipping options update failed\")}o=this._paymentIntegrationService.getState(),s=o.getCheckoutOrThrow(),e.completeShippingContactSelection({newShippingMethods:h,newTotal:{type:\"final\",label:t,amount:`${s.grandTotal.toFixed(a)}`},newLineItems:this._getUpdatedLineItems(s,a)})})}_handleShippingMethodSelected(e,t,n){return A_(this,void 0,void 0,function*(){const{shippingMethod:{identifier:i}}=n;try{yield this._updateShippingOption(i)}catch(t){throw e.abort(),new Error(\"Shipping option selection update failed.\")}const r=this._paymentIntegrationService.getState(),{currency:{decimalPlaces:o}}=r.getCartOrThrow(),a=r.getCheckoutOrThrow();e.completeShippingMethodSelection({newTotal:{type:\"final\",label:t,amount:`${a.grandTotal.toFixed(o)}`},newLineItems:this._getUpdatedLineItems(a,o)})})}_getUpdatedLineItems(e,t){const n=[{label:this._subTotalLabel,amount:`${e.subtotal.toFixed(t)}`}];return e.taxes.forEach(e=>n.push({label:e.name,amount:`${e.amount.toFixed(t)}`})),n.push({label:this._shippingLabel,amount:`${e.shippingCostTotal.toFixed(t)}`}),n}_updateShippingOption(e){return A_(this,void 0,void 0,function*(){return this._paymentIntegrationService.selectShippingOption(e)})}_onValidateMerchant(e,t){return A_(this,void 0,void 0,function*(){const n=[`validationUrl=${t.validationURL}`,`merchantIdentifier=${e.initializationData.merchantId}`,`displayName=${e.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${e.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:n})})}_onPaymentAuthorized(e,t,n){var i;return A_(this,void 0,void 0,function*(){const{token:r,billingContact:o,shippingContact:a}=e.payment,s=this._paymentIntegrationService.getState().getCartOrThrow().lineItems.physicalItems.length>0;let c;(null===(i=n.initializationData)||void 0===i?void 0:i.gateway)===En.BRAINTREE&&(c=yield this._getBraintreeDeviceData());const d={methodId:n.id,paymentData:{deviceSessionId:c,formattedPayload:{apple_pay_token:{payment_data:r.paymentData,payment_method:r.paymentMethod,transaction_id:r.transactionIdentifier}}}},u=this._transformContactToAddress(o),l=this._transformContactToAddress(a),h=null==a?void 0:a.emailAddress,p=(null==a?void 0:a.phoneNumber)||\"\";try{return yield this._paymentIntegrationService.updateBillingAddress(Object.assign(Object.assign({},u),{email:h,phone:p})),s&&(yield this._paymentIntegrationService.updateShippingAddress(l)),yield this._paymentIntegrationService.submitOrder({useStoreCredit:!1}),yield this._paymentIntegrationService.submitPayment(d),t.completePayment(ApplePaySession.STATUS_SUCCESS),this._onAuthorizeCallback()}catch(e){throw t.completePayment(ApplePaySession.STATUS_FAILURE),new Error(\"Payment cannot complete\")}})}_transformContactToAddress(e){return{firstName:(null==e?void 0:e.givenName)||\"\",lastName:(null==e?void 0:e.familyName)||\"\",city:(null==e?void 0:e.locality)||\"\",company:\"\",address1:(null==e?void 0:e.addressLines)&&e.addressLines[0]||\"\",address2:(null==e?void 0:e.addressLines)&&e.addressLines[1]||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",phone:(null==e?void 0:e.phoneNumber)||\"\",stateOrProvince:(null==e?void 0:e.administrativeArea)||\"\",stateOrProvinceCode:(null==e?void 0:e.administrativeArea)||\"\",customFields:[]}}_getBraintreeDeviceData(){return A_(this,void 0,void 0,function*(){try{const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e}catch(e){}})}}const k_=Xt(e=>{const{getHost:t}=e.getState(),n=new un(e);return new T_((0,o.createRequestSender)({host:t()}),e,new Dn,new In(new An((0,d.vQ)(),window,n)),new Rn(new d.B2))},[{id:\"applepay\"}]);var x_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class M_{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){var t;return x_(this,void 0,void 0,function*(){const{bigcommerce_payments:n,containerId:i,methodId:r}=e,o=Boolean(null==n?void 0:n.buyNowInitializeOptions);if(!r)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new en('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!n)throw new en('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');if(o&&!n.currencyCode)throw new en('Unable to initialize payment because \"options.bigcommerce_payments.currencyCode\" argument is not provided.');if(o&&\"function\"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new en('Unable to initialize payment because \"options.bigcommerce_payments.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');o||(yield this.paymentIntegrationService.loadDefaultCheckout());const a=o?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(r,a,!1),this.renderButton(i,r,n)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),c=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:d,isServerSideShippingCallbacksEnabled:u}=c.initializationData||{},l={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},h={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},p=Object.assign(Object.assign({},!u&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o,u)}),m=Object.assign(Object.assign(Object.assign({fundingSource:s.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(r)},l),i&&h),d&&p),y=s.Buttons(m);y.isEligible()?y.render(`#${e}`):a&&\"function\"==typeof a?a():this.bigCommercePaymentsIntegrationService.removeElement(e)}handleClick(e){return x_(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,i,r){return x_(this,void 0,void 0,function*(){if(!e.orderID)throw new Ft(Rt.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!r){const e=yield t.order.get(),n=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}return a&&(yield this.bigCommercePaymentsIntegrationService.updateOrder(r)),r&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return x_(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return x_(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const N_=Xt(e=>new M_(e,ri(e)),[{id:\"bigcommerce_payments\"}]);var D_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class R_{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return D_(this,void 0,void 0,function*(){const{bigcommerce_payments_paylater:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new en('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');if(a&&!o)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_paylater.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new en('Unable to initialize payment because \"options.bigcommerce_payments_paylater.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=this.paymentIntegrationService.getState(),c=a?o:s.getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i,c,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),c=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:d}=c.initializationData||{},u={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},l={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},h={onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e),onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o)},p=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT];let m=!1;p.forEach(t=>{if(!m){const n=Object.assign(Object.assign(Object.assign({fundingSource:t,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(r)},u),i&&l),d&&h),o=s.Buttons(n);o.isEligible()?(o.render(`#${e}`),m=!0):a&&\"function\"==typeof a&&a()}}),m||this.bigCommercePaymentsIntegrationService.removeElement(e)}handleClick(e){return D_(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,i){return D_(this,void 0,void 0,function*(){if(!e.orderID)throw new Ft(Rt.MissingOrderId);const r=this.paymentIntegrationService.getState().getCartOrThrow(),o=yield t.order.get();try{const t=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(o);if(yield this.paymentIntegrationService.updateBillingAddress(t),r.lineItems.physicalItems.length>0){const e=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(o);yield this.paymentIntegrationService.updateShippingAddress(e),yield this.bigCommercePaymentsIntegrationService.updateOrder()}return yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return D_(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return D_(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const z_=Xt(e=>new R_(e,ri(e)),[{id:\"bigcommerce_payments_paylater\"}]);var F_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class B_{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return F_(this,void 0,void 0,function*(){const{bigcommerce_payments_venmo:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new en('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');if(a&&!o)throw new en('Unable to initialize payment because \"options.bigcommerce_payments_venmo.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new en('Unable to initialize payment because \"options.bigcommerce_payments_venmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=a?o:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i,s,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onEligibilityFailure:o}=n,a=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),s=a.FUNDING.VENMO,c={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmo\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},d={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},u=Object.assign(Object.assign({fundingSource:s,style:this.getValidVenmoButtonStyles(r)},c),i&&d),l=a.Buttons(u);l.isEligible()?l.render(`#${e}`):o&&\"function\"==typeof o?o():this.bigCommercePaymentsIntegrationService.removeElement(e)}getValidVenmoButtonStyles(e){const t=this.bigCommercePaymentsIntegrationService.getValidButtonStyle(e);return t.color===Hn.gold?Object.assign(Object.assign({},t),{color:void 0}):t}handleClick(e){return F_(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}}const j_=Xt(e=>new B_(e,ri(e)),[{id:\"bigcommerce_payments_venmo\"}]);class L_{constructor(e,t,n=window){this.paymentIntegrationService=e,this.boltScriptLoader=t,this.boltHostWindow=n}initialize(e){return t=this,n=void 0,r=function*(){const{bolt:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,style:o}=t||{};if(!i)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new en('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.bolt\" argument is not provided.');if(!Boolean(r))throw new tn(\"Only buy now flow is implemented for Bolt button\");if(!(null==r?void 0:r.storefrontApiToken)||\"string\"!=typeof r.storefrontApiToken)throw new en('Unable to initialize payment because \"options.storefrontApiToken\" argument is not provided.');const a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i),{initializationData:s,config:c}=a,{publishableKey:d,developerConfig:u}=s||{};yield this.boltScriptLoader.loadBoltClient(d,c.testMode,u,\"BigCommerce\",r.storefrontApiToken),this.renderButton(n,a,o)},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())});var t,n,i,r}deinitialize(){return Promise.resolve()}renderButton(e,t,n){var i;\"function\"==typeof(null===(i=this.boltHostWindow.BoltConnect)||void 0===i?void 0:i.setupProductPageCheckout)&&(this.addButtonContainer(e,t,n),this.boltHostWindow.BoltConnect.setupProductPageCheckout())}addButtonContainer(e,t,n){const i=document.getElementById(e);if(!i)return;const r=document.createElement(\"div\"),o=document.createElement(\"object\");r.setAttribute(\"id\",\"product-page-checkout-wrapper\"),r.setAttribute(\"class\",\"bolt-button-wrapper\"),r.setAttribute(\"style\",\"display:none\"),r.setAttribute(\"data-tid\",\"product-page-checkout-wrapper\"),o.setAttribute(\"data\",this.getBoltObjectData(t,n)),o.setAttribute(\"class\",\"bolt-product-checkout-button\"),r.append(o),i.innerHTML=\"\",i.append(r)}getBoltObjectData(e,t){const{initializationData:n,config:i}=e,{publishableKey:r,developerConfig:o}=n||{},a=this.boltScriptLoader.getDomainURL(!!i.testMode,o),s=this.getButtonHeight(null==t?void 0:t.size),c=this.getButtonBorderRadius(null==t?void 0:t.shape,s);return(0,Ym.stringifyUrl)({url:`https://${a}/v1/checkout_button`,query:{publishable_key:r,variant:\"ppc\",height:s,border_radius:c}})}getButtonHeight(e){if(e)switch(e){case Li.Small:return 25;case Li.Large:return 45;case Li.Medium:default:return 40}}getButtonBorderRadius(e,t){if(e)switch(e){case Ui.Pill:return t?Math.round(t/2):void 0;case Ui.Rect:default:return 4}}}const U_=Xt(e=>new L_(e,new Gi((0,d.vQ)())),[{id:\"bolt\"}]);function V_(e){const{color:t,fundingicons:n,height:i=40,layout:r,shape:o,size:a,tagline:s}=e||{},c={color:t,fundingicons:n,height:q_(i),layout:r,shape:o||\"rect\",size:a,tagline:s};return(0,P.omitBy)(c,P.isNil)}function q_(e){const t=Number(e);return!t||Number.isNaN(t)?40:t>55?55:t<25?25:t}var H_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class G_{constructor(e,t,n,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=n,this.braintreeHostWindow=i}initialize(e){return H_(this,void 0,void 0,function*(){const{braintreepaypal:t,containerId:n,methodId:i}=e;if(!i)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new en('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.');let r,o=this.paymentIntegrationService.getState();if(t.buyNowInitializeOptions){if(!t.currencyCode)throw new en('Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.');r=t.currencyCode}else yield this.paymentIntegrationService.loadDefaultCheckout(),o=this.paymentIntegrationService.getState(),r=o.getCartOrThrow().currency.code;const a=o.getPaymentMethodOrThrow(i),{clientToken:s,config:c,initializationData:d}=a;if(!s||!d)throw new Ft(Rt.MissingPaymentMethod);const u={currency:r,intent:d.intent,isCreditEnabled:d.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(u,e=>{this.renderPayPalButton(e,t,n,i,!!c.testMode)},e=>this.handleError(e,n,t.onError))})}deinitialize(){return H_(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}renderPayPalButton(e,t,n,i,r){const{style:o,shouldProcessPayment:a,onAuthorizeError:s,onEligibilityFailure:c}=t,{paypal:d}=this.braintreeHostWindow;if(d){const u=d.Buttons({env:r?\"sandbox\":\"production\",fundingSource:d.FUNDING.PAYPAL,style:V_(o),createOrder:()=>this.setupPayment(e,t,i),onApprove:t=>this.tokenizePayment(t,e,i,a,s)});u.isEligible()?u.render(`#${n}`):c&&\"function\"==typeof c&&c()}else this.braintreeIntegrationService.removeElement(n)}setupPayment(e,t,n){var i;return H_(this,void 0,void 0,function*(){const{onPaymentError:r,shippingAddress:o,buyNowInitializeOptions:a}=t;try{const r=\"function\"==typeof(null==a?void 0:a.getBuyNowCartRequestBody)?yield this.createBuyNowCart(a.getBuyNowCartRequestBody()):void 0;this.buyNowCartId=null==r?void 0:r.id;const s=this.paymentIntegrationService.getState(),c=s.getCustomer(),d=s.getPaymentMethodOrThrow(n),u=r?r.cartAmount:s.getCartOrThrow().cartAmount,l=r?t.currencyCode:s.getCartOrThrow().currency.code,h=o||(null==c?void 0:c.addresses[0]),p=h?md(h):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:p,amount:u,currency:l,offerCredit:!1,intent:null===(i=d.initializationData)||void 0===i?void 0:i.intent})}catch(e){throw r&&(_n(e)||e instanceof Dt)&&r(e),e}})}tokenizePayment(e,t,n,i,r){return H_(this,void 0,void 0,function*(){try{const{deviceData:r}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),o=yield t.tokenizePayment(e),{details:a,nonce:s}=o,c=this.braintreeIntegrationService.mapToLegacyBillingAddress(a),d=this.braintreeIntegrationService.mapToLegacyShippingAddress(a);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",provider:n,action:i?\"process_payment\":\"set_external_checkout\",nonce:s,device_data:r,billing_address:JSON.stringify(c),shipping_address:JSON.stringify(d)},this.buyNowCartId&&{cart_id:this.buyNowCartId})),o}catch(e){throw r&&(_n(e)||e instanceof Dt)&&r(e),e}})}createBuyNowCart(e){return H_(this,void 0,void 0,function*(){if(!e)throw new Ft(Rt.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(e)}catch(e){throw new Bn}})}handleError(e,t,n){if(this.braintreeIntegrationService.removeElement(t),!n||!_n(e))throw e;n(e)}}const W_=Xt(e=>{const t=window,n=new un(e),i=new or(new An((0,d.vQ)(),t,n),t);return new G_(e,(0,Fn.createFormPoster)(),i,t)},[{id:\"braintreepaypal\"}]);var $_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Y_{constructor(e,t,n,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=n,this.braintreeHostWindow=i}initialize(e){return $_(this,void 0,void 0,function*(){const{braintreepaypalcredit:t,containerId:n,methodId:i}=e;if(!i)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new en('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.');let r,o=this.paymentIntegrationService.getState();if(t.buyNowInitializeOptions){if(!t.currencyCode)throw new en('Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.');r=t.currencyCode}else yield this.paymentIntegrationService.loadDefaultCheckout(),o=this.paymentIntegrationService.getState(),r=o.getCartOrThrow().currency.code;const a=o.getPaymentMethodOrThrow(i),{clientToken:s,config:c,initializationData:d}=a;if(!s||!d)throw new Ft(Rt.MissingPaymentMethod);const u={currency:r,intent:d.intent,isCreditEnabled:d.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(u,e=>{this.renderPayPalButton(e,t,n,i,!!c.testMode)},e=>this.handleError(e,n,t.onError))})}deinitialize(){return $_(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}renderPayPalButton(e,t,n,i,r){const{style:o,shouldProcessPayment:a,onAuthorizeError:s,onEligibilityFailure:c}=t,{paypal:d}=this.braintreeHostWindow;let u=!1;d&&[d.FUNDING.PAYLATER,d.FUNDING.CREDIT].forEach(l=>{const h=l===d.FUNDING.CREDIT?Object.assign({label:tr.CREDIT},V_(o)):V_(o);if(!u){const o=d.Buttons({env:r?\"sandbox\":\"production\",fundingSource:l,style:h,createOrder:()=>this.setupPayment(e,t,i),onApprove:t=>this.tokenizePayment(t,e,i,a,s)});o.isEligible()?(o.render(`#${n}`),u=!0):d.FUNDING.CREDIT&&c&&\"function\"==typeof c&&c()}}),d&&u||this.braintreeIntegrationService.removeElement(n)}setupPayment(e,t,n){var i;return $_(this,void 0,void 0,function*(){const{onPaymentError:r,shippingAddress:o,buyNowInitializeOptions:a}=t;try{const r=\"function\"==typeof(null==a?void 0:a.getBuyNowCartRequestBody)?yield this.createBuyNowCart(a.getBuyNowCartRequestBody()):void 0;this.buyNowCartId=null==r?void 0:r.id;const s=this.paymentIntegrationService.getState(),c=s.getCustomer(),d=s.getPaymentMethodOrThrow(n),u=r?r.cartAmount:s.getCartOrThrow().cartAmount,l=r?t.currencyCode:s.getCartOrThrow().currency.code,h=o||(null==c?void 0:c.addresses[0]),p=h?md(h):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:p,amount:u,currency:l,offerCredit:!0,intent:null===(i=d.initializationData)||void 0===i?void 0:i.intent})}catch(e){throw r&&(_n(e)||e instanceof Dt)&&r(e),e}})}tokenizePayment(e,t,n,i,r){return $_(this,void 0,void 0,function*(){try{const{deviceData:r}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),o=yield t.tokenizePayment(e),{details:a,nonce:s}=o,c=this.braintreeIntegrationService.mapToLegacyBillingAddress(a),d=this.braintreeIntegrationService.mapToLegacyShippingAddress(a);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",provider:n,action:i?\"process_payment\":\"set_external_checkout\",nonce:s,device_data:r,billing_address:JSON.stringify(c),shipping_address:JSON.stringify(d)},this.buyNowCartId&&{cart_id:this.buyNowCartId})),o}catch(e){throw r&&(_n(e)||e instanceof Dt)&&r(e),e}})}createBuyNowCart(e){return $_(this,void 0,void 0,function*(){if(!e)throw new Ft(Rt.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(e)}catch(e){throw new Bn}})}handleError(e,t,n){if(this.braintreeIntegrationService.removeElement(t),!n||!_n(e))throw e;n(e)}}const K_=Xt(e=>{const t=window,n=new un(e),i=new or(new An((0,d.vQ)(),t,n),t);return new Y_(e,(0,Fn.createFormPoster)(),i,t)},[{id:\"braintreepaypalcredit\"}]);var Q_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class J_{constructor(e,t,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=n}initialize(e){return Q_(this,void 0,void 0,function*(){const{containerId:t,methodId:n}=e;if(!n)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.containerId\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const i=this.paymentIntegrationService.getState(),{clientToken:r,initializationData:o,config:a}=i.getPaymentMethodOrThrow(n);if(!r||!o)throw new Ft(Rt.MissingPaymentMethod);this.braintreeSdk.initialize(r);const s=yield this.braintreeSdk.getBraintreeVisaCheckout(),{currency:{code:c},cartAmount:d}=i.getCartOrThrow(),u=yield this.braintreeSdk.getVisaCheckoutSdk(a.testMode),l=s.createInitOptions({paymentRequest:{currencyCode:c,subtotal:String(d)},settings:{shipping:{collectShipping:!0}}});this.createSignInButton(t),yield u.init(l),u.on(\"payment.success\",e=>Q_(this,void 0,void 0,function*(){yield this.paymentSuccess(s,e)}))})}deinitialize(){return Promise.resolve()}paymentSuccess(e,t){return Q_(this,void 0,void 0,function*(){return Promise.all([e.tokenize(t),this.braintreeSdk.getDataCollectorOrThrow()]).then(([e,t])=>{const n=this.paymentIntegrationService.getState(),i=n.getShippingAddress(),r=n.getBillingAddress(),{shippingAddress:o=this.toVisaCheckoutAddress(i),billingAddress:a=this.toVisaCheckoutAddress(r)}=e;return this.postForm(Object.assign(Object.assign({},e),{shippingAddress:o,billingAddress:a}),t)})})}postForm(e,t){const{userData:n,billingAddress:i,shippingAddress:r,details:o}=e,{userEmail:a}=n,{deviceData:s}=t;return this.formPoster.postForm(\"/checkout.php\",{payment_type:e.type,nonce:e.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,i)),shipping_address:JSON.stringify(this.getAddress(a,r))})}toVisaCheckoutAddress(e){return e?{firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phone,streetAddress:e.address1,extendedAddress:e.address2,locality:e.city,region:e.stateOrProvinceCode,countryCode:e.countryCode,postalCode:e.postalCode}:{}}getAddress(e,t={}){return{email:e,first_name:t.firstName,last_name:t.lastName,phone_number:t.phoneNumber,address_line_1:t.streetAddress,address_line_2:t.extendedAddress,city:t.locality,state:t.region,country_code:t.countryCode,postal_code:t.postalCode}}createSignInButton(e){const t=document.querySelector(`#${e}`);if(!t)throw new Error(\"Need a container to place the button\");return this.insertVisaCheckoutButton(t)}insertVisaCheckoutButton(e){const t=document.createElement(\"div\");return t.style.display=\"flex\",t.style.flexDirection=\"column\",t.style.alignItems=\"flex-end\",t.innerHTML='\\n            <img\\n                alt=\"Visa Checkout\"\\n                class=\"v-button\"\\n                role=\"button\"\\n                src=\"https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178\"\\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>',e.appendChild(t),t}}const Z_=Xt(e=>{const t=window,n=new un(e),i=new In(new An((0,d.vQ)(),t,n));return new J_(e,(0,Fn.createFormPoster)(),i)},[{id:\"braintreevisacheckout\"}]);function X_(e){const{billingAddress:t,email:n,firstName:i,lastName:r,phone:o,shippingAddress:a}=e,s=t||a;return{email:n,first_name:i,last_name:r,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}function eb(e){const{email:t,phone:n,shippingAddress:i}=e,r=(null==i?void 0:i.recipientName)||\"\",[o,a]=r.split(\" \");return{email:t,first_name:o||\"\",last_name:a||\"\",phone_number:n,address_line_1:null==i?void 0:i.line1,address_line_2:null==i?void 0:i.line2,city:null==i?void 0:i.city,state:null==i?void 0:i.state,country_code:null==i?void 0:i.countryCode,postal_code:null==i?void 0:i.postalCode}}var tb=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};const nb=e=>{const{color:t,height:n}=e;return{backgroundColor:(i=t||\"\",i===er.WHITE?\"#FFFFFF\":\"#3D95CE\"),backgroundPosition:\"50% 50%\",backgroundSize:\"80px auto\",backgroundImage:`url(\"/app/assets/img/payment-providers/venmo-logo-${t===er.WHITE?er.BLUE:er.WHITE}.svg\")`,backgroundRepeat:\"no-repeat\",borderRadius:\"4px\",cursor:\"pointer\",transition:\"0.2s ease\",minHeight:`${n||40}px`,minWidth:\"150px\",height:\"100%\",width:\"100%\",border:t===er.WHITE?\"1px solid black\":\"none\"};var i};class ib{constructor(e,t,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=n,this.onError=P.noop}initialize(e){return tb(this,void 0,void 0,function*(){const{braintreevenmo:t,containerId:n,methodId:i}=e;if(!i)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i),{clientToken:o,initializationData:a}=r,{paymentButtonStyles:s}=a,{cartButtonStyles:c}=s||{},d=(null==t?void 0:t.style)||c;if(!o||!a)throw new Ft(Rt.MissingPaymentMethod);if(!n)throw new en('Unable to initialize payment because \"options.containerId\" argument is not provided.');yield this.paymentIntegrationService.loadDefaultCheckout(),this.onError=(null==t?void 0:t.onError)||this.handleError,this.braintreeSdk.initialize(o);try{const e=yield this.braintreeSdk.getVenmoCheckoutOrThrow();this.renderVenmoButton(e,n,null==t?void 0:t.buyNowInitializeOptions,d)}catch(e){(pd(e)||function(e){return e instanceof ln}(e))&&this.handleInitializationVenmoError(e,n)}})}deinitialize(){return tb(this,void 0,void 0,function*(){return yield this.braintreeSdk.deinitialize(),Promise.resolve()})}handleError(e){throw new Error(e.message)}createBuyNowCart(e){return tb(this,void 0,void 0,function*(){if(\"function\"==typeof(null==e?void 0:e.getBuyNowCartRequestBody)){const t=null==e?void 0:e.getBuyNowCartRequestBody();if(!t)throw new Ft(Rt.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new Bn}}})}handleInitializationVenmoError(e,t){return this.removeVenmoContainer(t),this.onError(e)}removeVenmoContainer(e){const t=document.getElementById(e);t&&t.remove()}renderVenmoButton(e,t,n,i){const r=document.getElementById(t),{color:o}=i||{};if(!r)throw new en(\"Unable to create wallet button without valid container ID.\");r.setAttribute(\"aria-label\",\"Venmo\"),Object.assign(r.style,nb(i||{})),r.addEventListener(\"click\",()=>tb(this,void 0,void 0,function*(){r.setAttribute(\"disabled\",\"true\");const t=yield this.createBuyNowCart(n);e.tokenize&&e.tokenize((e,n)=>tb(this,void 0,void 0,function*(){r.removeAttribute(\"disabled\"),e&&this.onError(e),yield this.handlePostForm(n,null==t?void 0:t.id)}))})),o===er.BLUE&&(r.addEventListener(\"mouseenter\",()=>{r.style.backgroundColor=\"#0a7fc2\"}),r.addEventListener(\"mouseleave\",()=>{r.style.backgroundColor=nb(i||{}).backgroundColor}))}handlePostForm(e,t){return tb(this,void 0,void 0,function*(){const{deviceData:n}=yield this.braintreeSdk.getDataCollectorOrThrow(),{nonce:i,details:r}=e;this.formPoster.postForm(\"/checkout.php\",Object.assign({nonce:i,provider:\"braintreevenmo\",payment_type:\"paypal\",device_data:n,action:\"set_external_checkout\",billing_address:JSON.stringify(X_(r)),shipping_address:JSON.stringify(eb(r))},t&&{cart_id:t}))})}}const rb=Xt(e=>{const t=window,n=(0,d.vQ)(),i=new un(e),r=new An(n,t,i),o=new In(r);return new ib(e,(0,Fn.createFormPoster)(),o)},[{id:\"braintreevenmo\"}]);var ob=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ab{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t}initialize(e){var t,n,i;return ob(this,void 0,void 0,function*(){if(!e.methodId||!Ur(e.methodId))throw new en('Unable to proceed because \"methodId\" is not a valid key.');if(this._methodId=e.methodId,!e.containerId)throw new en('Unable to proceed because \"containerId\" is not a valid key.');const r=e[this._getMethodOrThrow()];if(!r)throw new en(\"Unable to proceed without valid options.\");const{buyNowInitializeOptions:o,currencyCode:a,buttonColor:s,buttonType:c,onError:d}=r;let u,l=this._paymentIntegrationService.getState();try{u=l.getPaymentMethodOrThrow(this._getMethodOrThrow())}catch(e){l=yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodOrThrow()),u=l.getPaymentMethodOrThrow(this._getMethodOrThrow())}if(this._countryCode=null===(t=u.initializationData)||void 0===t?void 0:t.storeCountry,this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(n=u.initializationData)||void 0===n?void 0:n.isWebViewExperimentOn)),o){if(!a)throw new en('Unable to initialize payment because \"options.currencyCode\" argument is not provided.');this._currencyCode=a,this._buyNowInitializeOptions=o,yield this._googlePayPaymentProcessor.initialize(()=>u,this._getGooglePayClientOptions(),!!o,a)}else yield this._paymentIntegrationService.loadDefaultCheckout(),yield this._googlePayPaymentProcessor.initialize(()=>u,this._getGooglePayClientOptions());this._paymentButton=null!==(i=this._paymentButton)&&void 0!==i?i:this._googlePayPaymentProcessor.addPaymentButton(e.containerId,{buttonColor:null!=s?s:\"default\",buttonType:null!=c?c:\"plain\",onClick:this._handleClick(d)})})}deinitialize(){var e;return null===(e=this._paymentButton)||void 0===e||e.remove(),this._paymentButton=void 0,this._methodId=void 0,Promise.resolve()}_handleClick(e){return t=>ob(this,void 0,void 0,function*(){t.preventDefault();try{this._buyNowInitializeOptions?yield this._createBuyNowCartOrThrow(this._buyNowInitializeOptions):yield this._paymentIntegrationService.loadDefaultCheckout(),yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheet()}catch(t){let n=t;if(Lr(t)){if(\"CANCELED\"===t.statusCode)throw new Tn;n=new Fi(JSON.stringify(t))}throw null==e||e(new Fi(\"An error occurred while requesting your Google Pay payment details.\")),n}})}_interactWithPaymentSheet(){var e;return ob(this,void 0,void 0,function*(){const t=yield this._googlePayPaymentProcessor.showPaymentSheet(),n=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(t),i=this._googlePayPaymentProcessor.mapToShippingAddressRequestBody(t),r=\"/embedded-checkout\"===window.location.pathname?this._paymentIntegrationService.getState().getStoreConfigOrThrow().links.siteLink:void 0;n&&(yield this._paymentIntegrationService.updateBillingAddress(n)),i&&!(null===(e=this._buyNowCart)||void 0===e?void 0:e.lineItems.digitalItems.length)&&(yield this._paymentIntegrationService.updateShippingAddress(i)),yield this._googlePayPaymentProcessor.setExternalCheckoutForm(this._getMethodOrThrow(),t,r)})}_getGooglePayClientOptions(){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:e,shippingAddress:t,shippingOptionData:n,offerData:i})=>ob(this,void 0,void 0,function*(){const{availableTriggers:r,addressChangeTriggers:o,shippingOptionsChangeTriggers:a,offerChangeTriggers:s}=this._googlePayPaymentProcessor.getCallbackTriggers();if(!r.includes(e))return;const c=o.includes(e)?yield this._googlePayPaymentProcessor.handleShippingAddressChange(t):void 0;a.includes(e)&&(yield this._googlePayPaymentProcessor.handleShippingOptionChange(n.id));const{newOfferInfo:d,error:u}=s.includes(e)?yield this._googlePayPaymentProcessor.handleCoupons(i):{},l=u;return this._buyNowInitializeOptions?this._getBuyNowTransactionInfo(c,d,l):this._getTransactionInfo(c,d,l)})}}}_createBuyNowCartOrThrow(e){return ob(this,void 0,void 0,function*(){if(\"function\"==typeof(null==e?void 0:e.getBuyNowCartRequestBody)){const t=e.getBuyNowCartRequestBody();try{this._buyNowCart=yield this._paymentIntegrationService.createBuyNowCart(t),yield this._paymentIntegrationService.loadCheckout(this._buyNowCart.id)}catch(e){if(\"string\"==typeof e)throw new Bn(e);throw e}}})}_getBuyNowTransactionInfo(e,t,n){if(!this._buyNowCart)return;const{cartAmount:i}=this._buyNowCart,r=this._googlePayPaymentProcessor.getTotalPrice();return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},this._countryCode&&{countryCode:this._countryCode}),{currencyCode:this._getCurrencyCodeOrThrow(),totalPrice:r||String(i),totalPriceStatus:xr.FINAL})},e&&{newShippingOptionParameters:e}),t&&{newOfferInfo:t}),n&&{error:n})}_getTransactionInfo(e,t,n){return ob(this,void 0,void 0,function*(){yield this._paymentIntegrationService.loadCheckout();const i=this._googlePayPaymentProcessor.getTotalPrice(),{code:r}=this._paymentIntegrationService.getState().getCartOrThrow().currency;return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},this._countryCode&&{countryCode:this._countryCode}),{currencyCode:r,totalPriceStatus:xr.FINAL,totalPrice:i})},e&&{newShippingOptionParameters:e}),t&&{newOfferInfo:t}),n&&{error:n})})}_getMethodOrThrow(){return jt(this._methodId,()=>new Lt(zt.PaymentNotInitialized))}_getCurrencyCodeOrThrow(){return jt(this._currencyCode,()=>new en('Unable to initialize payment because \"options.currencyCode\" argument is not provided.'))}}const sb=Xt(e=>{const t=(0,o.createRequestSender)(),n=window,i=new un(e),r=new In(new An((0,d.vQ)(),n,i));return new ab(e,new Gr($r(),new No(e,r),t,(0,Fn.createFormPoster)()))},[{id:\"googlepaybraintree\"}]),cb=Xt(e=>new ab(e,new Gr($r(),new Vo(e,new jo((0,d.vQ)())),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaypaypalcommerce\"}]),db=Xt(e=>new ab(e,new Gr($r(),new Go(e,new _i((0,d.vQ)())),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepay_bigcommerce_payments\"}]),ub=Xt(e=>{const t=(0,o.createRequestSender)();return new ab(e,new Gr($r(),new jr(\"adyen\",e),t,(0,Fn.createFormPoster)()))},[{id:\"googlepayadyenv2\"}]),lb=Xt(e=>{const t=(0,o.createRequestSender)();return new ab(e,new Gr($r(),new jr(\"adyen\",e),t,(0,Fn.createFormPoster)()))},[{id:\"googlepayadyenv3\"}]),hb=Xt(e=>new ab(e,new Gr($r(),new Qr(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepayauthorizenet\"}]),pb=Xt(e=>{const t=(0,o.createRequestSender)();return new ab(e,new Gr($r(),new to(e,t),t,(0,Fn.createFormPoster)()))},[{id:\"googlepaycheckoutcom\"}]),mb=Xt(e=>new ab(e,new Gr($r(),new io(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaycybersourcev2\"},{id:\"googlepaybnz\"}]),yb=Xt(e=>new ab(e,new Gr($r(),new ao(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepayorbital\"}]),fb=Xt(e=>new ab(e,new Gr($r(),new Oo(e,new wo((0,d.vQ)())),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeupe\"},{id:\"googlepaystripeocs\"}]),gb=Xt(e=>new ab(e,new Gr($r(),new ko(e),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepayworldpayaccess\"}]),vb=Xt(e=>new ab(e,new Gr($r(),new Ko(e,(0,Fn.createFormPoster)()),(0,o.createRequestSender)(),(0,Fn.createFormPoster)())),[{id:\"googlepaytdonlinemart\"}]);class _b{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalButtonCreationService=n}initialize(e){var t,n,i,r,o;return n=this,i=void 0,o=function*(){const{paypalcommerce:n,containerId:i,methodId:r}=e,o=Boolean(null==n?void 0:n.buyNowInitializeOptions);if(!r)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new en('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!n)throw new en('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');if(o&&!n.currencyCode)throw new en('Unable to initialize payment because \"options.paypalcommerce.currencyCode\" argument is not provided.');if(o&&\"function\"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new en('Unable to initialize payment because \"options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');o||(yield this.paymentIntegrationService.loadDefaultCheckout());const a=o?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.paypalIntegrationService.loadPayPalSdk(r,a,!1),this.renderButton(i,r,n)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.paypalIntegrationService.getPayPalSdkOrThrow(),c=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:d,isServerSideShippingCallbacksEnabled:u}=c.initializationData||{},l={onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},h=Object.assign(Object.assign({fundingSource:s.FUNDING.PAYPAL,style:this.paypalIntegrationService.getValidButtonStyle(r),isServerSideShippingCallbacksEnabled:u,isHostedCheckoutEnabled:d},i&&l),d&&o&&{onPaymentComplete:()=>o()}),p=this.paypalButtonCreationService.createPayPalButton(\"paypalcommerce\",t,h,i);p.isEligible()?p.render(`#${e}`):a&&\"function\"==typeof a?a():this.paypalIntegrationService.removeElement(e)}}const bb=Xt(e=>{const t=ma(e),n=new fa(e,t);return new _b(e,t,n)},[{id:\"paypalcommerce\"}]);var Sb=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class wb{constructor(e,t){this.paymentIntegrationService=e,this.paypalIntegrationService=t}initialize(e){return Sb(this,void 0,void 0,function*(){const{paypalcommercecredit:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new en('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.');if(a&&!o)throw new en('Unable to initialize payment because \"options.paypalcommercecredit.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new en('Unable to initialize payment because \"options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=this.paymentIntegrationService.getState(),c=a?o:s.getCartOrThrow().currency.code;yield this.paypalIntegrationService.loadPayPalSdk(i,c,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.paypalIntegrationService.getPayPalSdkOrThrow(),c=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:d,isServerSideShippingCallbacksEnabled:u}=c.initializationData||{},l={createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercecredit\"),onApprove:({orderID:e})=>this.paypalIntegrationService.tokenizePayment(t,e)},h={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},p=Object.assign(Object.assign({},!u&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o,u)}),m=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT];let y=!1;m.forEach(t=>{if(!y){const n=Object.assign(Object.assign(Object.assign({fundingSource:t,style:this.paypalIntegrationService.getValidButtonStyle(r)},l),i&&h),d&&p),o=s.Buttons(n);o.isEligible()?(o.render(`#${e}`),y=!0):a&&\"function\"==typeof a&&a()}}),y||this.paypalIntegrationService.removeElement(e)}handleClick(e){return Sb(this,void 0,void 0,function*(){if(e){const t=yield this.paypalIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,i,r){return Sb(this,void 0,void 0,function*(){if(!e.orderID)throw new Ft(Rt.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!r){const e=yield t.order.get(),n=this.paypalIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.paypalIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}return a&&(yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\",void 0,void 0,r)),r&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return Sb(this,void 0,void 0,function*(){const t=this.paypalIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.paypalIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\")}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return Sb(this,void 0,void 0,function*(){const t=this.paypalIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\")}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const Cb=Xt(e=>new wb(e,ma(e)),[{id:\"paypalcommercecredit\"}]);var Ib=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Pb{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}initialize(e){return Ib(this,void 0,void 0,function*(){const{paypalcommercevenmo:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new en('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new en('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new en('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');if(a&&!o)throw new en('Unable to initialize payment because \"options.paypalcommercevenmo.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new en('Unable to initialize payment because \"options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=a?o:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.paypalCommerceIntegrationService.loadPayPalSdk(i,s,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onEligibilityFailure:o}=n,a=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),s=a.FUNDING.VENMO,c={createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercevenmo\"),onApprove:({orderID:e})=>this.paypalCommerceIntegrationService.tokenizePayment(t,e)},d={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},u=Object.assign(Object.assign({fundingSource:s,style:this.getValidVenmoButtonStyles(r)},c),i&&d),l=a.Buttons(u);l.isEligible()?l.render(`#${e}`):o&&\"function\"==typeof o?o():this.paypalCommerceIntegrationService.removeElement(e)}getValidVenmoButtonStyles(e){const t=this.paypalCommerceIntegrationService.getValidButtonStyle(e);return t.color===Ca.gold?Object.assign(Object.assign({},t),{color:void 0}):t}handleClick(e){return Ib(this,void 0,void 0,function*(){if(e){const t=yield this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}}const Eb=Xt(e=>new Pb(e,Na(e)),[{id:\"paypalcommercevenmo\"}]);var Ob=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ab{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalExpressScriptLoader=t,this.formPoster=n}initialize(e){return Ob(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);if(!e.paypal)throw new en;if(!t.config.merchantId)throw new Ft(Rt.MissingPaymentMethod);const n=yield this.paypalExpressScriptLoader.loadPaypalSDK(t.config.merchantId);this.renderButton(e,n)})}deinitialize(){return Promise.resolve()}renderButton(e,t){const{containerId:n,methodId:i,paypal:r}=e,{allowCredit:o,clientId:a,onPaymentError:s,shouldProcessPayment:c,style:d}=r,u=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);if(!u.config.merchantId)throw new Ft(Rt.MissingPaymentMethod);const l=u.config.merchantId,h=u.config.testMode?\"sandbox\":\"production\",p={[h]:a},m=t.FUNDING.CREDIT||\"credit\",y=o?[m]:[],f=o?[]:[m];return t.Button.render({env:h,client:p,commit:c,funding:{allowed:y,disallowed:f},style:this.getStyle(d),payment:(e,t)=>this.setupPayment(l,t,s),onAuthorize:(e,t)=>this.tokenizePayment(e,i,t,c)},n)}getStyle(e){const{color:t,fundingicons:n,label:i,layout:r,shape:o,size:a,tagline:s}=e||{};return{color:t,fundingicons:n,label:i,layout:r,shape:o||hh.RECT,size:\"small\"===a?dh.RESPONSIVE:a,tagline:s}}setupPayment(e,t,n){return Ob(this,void 0,void 0,function*(){if(!t)throw new Lt(zt.CheckoutButtonNotInitialized);try{const n=yield this.paymentIntegrationService.loadDefaultCheckout(),{id:i}=n.getCartOrThrow(),r=n.getHost()||\"\";return(yield t.request.post(`${r}/api/storefront/payment/paypalexpress`,{merchantId:e,cartId:i},{headers:Object.assign({\"X-API-INTERNAL\":Qn},Xn)})).id}catch(e){throw n&&e instanceof Dt&&n(e),e}})}tokenizePayment(e,t,n,i){return Ob(this,void 0,void 0,function*(){if(!n)throw new Lt(zt.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new Ft(Rt.MissingPayment);const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),o=yield n.payment.get(e.paymentID);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:r.id,action:i?\"process_payment\":\"set_external_checkout\",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(o.payer.payer_info)})})}}const Tb=Xt(e=>new Ab(e,new fh((0,d.vQ)()),(0,Fn.createFormPoster)()),[{id:\"paypalexpress\"}]);var kb=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class xb{constructor(e,t,n,i){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=n,this.loadingIndicator=i}initialize(e){return kb(this,void 0,void 0,function*(){const{stripeocs:t,containerId:n}=e||{};if(!t||!n)throw new Lt(zt.PaymentNotInitialized);const{gatewayId:i}=t;if(!i)throw new Ft(Rt.MissingPaymentMethod);const r=this._getMethodId(i),o=yield this.paymentIntegrationService.loadPaymentMethod(i,{params:{method:r}}),a=o.getPaymentMethodOrThrow(r,i),{loadingContainerId:s,buttonHeight:c,onComplete:d}=t;if(this._loadingIndicatorContainer=s,this._onComplete=d,!Ya(a))throw new Ft(Rt.MissingPaymentMethod);const{initializationData:u}=a,{captureMethod:l}=u,h=this.stripeIntegrationService.getStripeJsVersion(u);this._captureMethod=l,this._stripeClient=yield this.scriptLoader.getStripeClient(u,o.getCartLocale(),h),yield this.paymentIntegrationService.loadDefaultCheckout(),yield this._mountExpressCheckoutElement(n,this._stripeClient,c),this._initializeEvents(r)})}signIn(){return Promise.resolve()}signOut(){return Promise.resolve()}executePaymentMethodCheckout(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_mountExpressCheckoutElement(e,t,n=40){return kb(this,void 0,void 0,function*(){const i=this._shouldRequireShippingAddress(),r=Object.assign(Object.assign(Object.assign({shippingAddressRequired:i},i?{allowedShippingCountries:yield this._getAvailableCountries()}:{}),i?{shippingRates:[{id:\"_\",amount:0,displayName:\"Pending rates\"}]}:{}),{billingAddressRequired:!0,emailRequired:!0,phoneNumberRequired:!0,paymentMethods:{link:yo.AUTO,applePay:yo.NEVER,googlePay:yo.NEVER,amazonPay:yo.NEVER,paypal:yo.NEVER,klarna:yo.NEVER},buttonHeight:n}),{cartAmount:o=1}=this.paymentIntegrationService.getState().getCart()||{},a=Object.assign({mode:\"payment\",amount:this._toCents(o),currency:this._getCurrency()},this._captureMethod?{captureMethod:this._captureMethod}:{});this._stripeElements=t.elements(a),this._linkV2Element=this._stripeElements.create(go.EXPRESS_CHECKOUT,r),this._linkV2Element.mount(`#${e}`)})}_initializeEvents(e){this._linkV2Element&&(this._shouldRequireShippingAddress()&&(this._linkV2Element.on(_o.SHIPPING_ADDRESS_CHANGE,e=>kb(this,void 0,void 0,function*(){return this._onShippingAddressChange(e)})),this._linkV2Element.on(_o.SHIPPING_RATE_CHANGE,e=>kb(this,void 0,void 0,function*(){return this._onShippingRateChange(e)}))),this._linkV2Element.on(_o.CONFIRM,t=>kb(this,void 0,void 0,function*(){return this._onConfirm(t,e)})),this._linkV2Element.on(_o.CANCEL,this._onCancel))}_onShippingAddressChange(e){return kb(this,void 0,void 0,function*(){if(!(\"address\"in e))return;const t=e.address,n={firstName:\"\",lastName:\"\",phone:\"\",company:\"\",address1:\"\",address2:\"\",city:(null==t?void 0:t.city)||\"\",countryCode:(null==t?void 0:t.country)||\"\",postalCode:(null==t?void 0:t.postal_code)||\"\",stateOrProvince:(null==t?void 0:t.state)||\"\",stateOrProvinceCode:(null==t?void 0:t.state)||\"\",customFields:[]};yield this.paymentIntegrationService.updateShippingAddress(n);const i=yield this._getAvailableShippingOptions();yield this._updateDisplayedPrice(),(null==i?void 0:i.length)?e.resolve({shippingRates:i}):e.reject()})}_onCancel(){throw new Tn}_onShippingRateChange(e){return kb(this,void 0,void 0,function*(){if(\"shippingRate\"in e){const{shippingRate:t}=e;yield this._handleShippingOptionChange(null==t?void 0:t.id),yield this._updateDisplayedPrice(),e.resolve({})}})}_onConfirm(e,t){return kb(this,void 0,void 0,function*(){if(\"billingDetails\"in e&&\"shippingAddress\"in e&&this._stripeClient&&this._stripeElements){yield this.stripeIntegrationService.verifyCheckoutSpamProtection(),yield this._updateShippingAndBillingAddress(e),yield this.paymentIntegrationService.submitOrder();const n=this._getPaymentPayload(t);try{yield this.paymentIntegrationService.submitPayment(n)}catch(e){yield this._processAdditionalAction(e,t)}}return Promise.resolve()})}_updateShippingAndBillingAddress(e){var t,n,i,r,o,a,s,c;return kb(this,void 0,void 0,function*(){const d=this._shouldRequireShippingAddress(),u=(null===(n=null===(t=e.shippingAddress)||void 0===t?void 0:t.name)||void 0===n?void 0:n.split(\" \")[0])||(null===(r=null===(i=e.billingDetails)||void 0===i?void 0:i.name)||void 0===r?void 0:r.split(\" \")[0])||\"\",l=(null===(a=null===(o=e.shippingAddress)||void 0===o?void 0:o.name)||void 0===a?void 0:a.split(\" \")[1])||(null===(c=null===(s=e.billingDetails)||void 0===s?void 0:s.name)||void 0===c?void 0:c.split(\" \")[1])||\"\";if(d){const t=this._mapShippingAddress(e.shippingAddress,e.billingDetails,u,l);yield this.paymentIntegrationService.updateShippingAddress(t)}const h=this._mapBillingAddress(e.shippingAddress,e.billingDetails,u,l);yield this.paymentIntegrationService.updateBillingAddress(h)})}_mapShippingAddress(e,t,n,i){var r,o,a,s,c,d,u;return{firstName:n,lastName:i,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==e?void 0:e.address)||void 0===r?void 0:r.line1)||\"\",address2:(null===(o=null==e?void 0:e.address)||void 0===o?void 0:o.line2)||\"\",city:(null===(a=null==e?void 0:e.address)||void 0===a?void 0:a.city)||\"\",countryCode:(null===(s=null==e?void 0:e.address)||void 0===s?void 0:s.country)||\"\",postalCode:(null===(c=null==e?void 0:e.address)||void 0===c?void 0:c.postal_code)||\"\",stateOrProvince:(null===(d=null==e?void 0:e.address)||void 0===d?void 0:d.state)||\"\",stateOrProvinceCode:(null===(u=null==e?void 0:e.address)||void 0===u?void 0:u.state)||\"\",customFields:[]}}_mapBillingAddress(e,t,n,i){var r,o,a,s,c,d;return{email:(null==t?void 0:t.email)||\"\",firstName:n,lastName:i,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==t?void 0:t.address)||void 0===r?void 0:r.line1)||\"\",address2:\"\",city:(null===(o=null==t?void 0:t.address)||void 0===o?void 0:o.city)||\"\",countryCode:(null===(a=null==t?void 0:t.address)||void 0===a?void 0:a.country)||\"\",postalCode:(null===(s=null==t?void 0:t.address)||void 0===s?void 0:s.postal_code)||\"\",stateOrProvince:(null===(c=null==t?void 0:t.address)||void 0===c?void 0:c.state)||\"\",stateOrProvinceCode:(null===(d=null==e?void 0:e.address)||void 0===d?void 0:d.state)||\"\",customFields:[]}}_processAdditionalAction(e,t){return kb(this,void 0,void 0,function*(){if(!Zr(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this._stripeClient||!this._stripeElements)throw new Lt(zt.PaymentNotInitialized);const{data:n}=e.body.additional_action_required,{token:i}=n,{paymentIntent:r}=yield this._confirmStripePaymentOrThrow(n,t),o=this._getPaymentPayload(t,(null==r?void 0:r.id)||i);try{this._toggleLoadingIndicator(!0),yield this.paymentIntegrationService.submitPayment(o),yield this._completeCheckoutFlow()}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}finally{this._toggleLoadingIndicator(!1)}})}_confirmStripePaymentOrThrow(e,t){var n,i,r;return kb(this,void 0,void 0,function*(){const{token:o,redirect_url:a}=e,s=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,a);let c;try{const e=(yield this.stripeIntegrationService.isPaymentCompleted(t,this._stripeClient))?yield null===(r=this._stripeClient)||void 0===r?void 0:r.retrievePaymentIntent(o||\"\"):yield null===(n=this._stripeClient)||void 0===n?void 0:n.confirmPayment({elements:s.elements,clientSecret:o,redirect:yo.IF_REQUIRED,confirmParams:{return_url:null===(i=s.confirmParams)||void 0===i?void 0:i.return_url}});if(c=null==e?void 0:e.error,c||!(null==e?void 0:e.paymentIntent))throw new Fi;return e}catch(e){return this.stripeIntegrationService.throwStripeError(c)}})}_completeCheckoutFlow(){return kb(this,void 0,void 0,function*(){return\"function\"==typeof this._onComplete?this._onComplete():(window.location.replace(\"/checkout/order-confirmation\"),Promise.resolve())})}_getPaymentPayload(e,t){var n;const i=(null===(n=this.paymentIntegrationService.getState().getCart())||void 0===n?void 0:n.id)||\"\";return{methodId:e,paymentData:{formattedPayload:Object.assign(Object.assign({cart_id:i},t?{credit_card_token:{token:t}}:{}),{confirm:!1,method:mo.Link})}}}_shouldRequireShippingAddress(){const{getCart:e}=this.paymentIntegrationService.getState(),{lineItems:t}=e()||{};return!!(null==t?void 0:t.physicalItems.length)}_updateDisplayedPrice(){return kb(this,void 0,void 0,function*(){this._stripeElements&&this._stripeElements.update({currency:this._getCurrency(),mode:\"payment\",amount:yield this._getTotalPrice()})})}_getCurrency(){var e;if(!this._currencyCode){const t=null===(e=this.paymentIntegrationService.getState().getCart())||void 0===e?void 0:e.currency;t&&(this._currencyCode=t.code.toLowerCase())}return this._currencyCode}_getTotalPrice(){var e;return kb(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const{getCheckoutOrThrow:t,getCart:n}=this.paymentIntegrationService.getState(),{decimalPlaces:i}=(null===(e=n())||void 0===e?void 0:e.currency)||{},r=(0,P.round)(t().outstandingBalance,i).toFixed(i);return this._toCents(+r)})}_getAvailableCountries(){var e;return kb(this,void 0,void 0,function*(){const t=yield this.paymentIntegrationService.loadShippingCountries();return((null===(e=t.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code))||[]).filter(e=>os.includes(e))})}_getAvailableShippingOptions(){var e,t,n;return kb(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState().getConsignments();if(!(null==i?void 0:i[0]))return;const r=i[0],o=(r.availableShippingOptions||[]).map(this._getStripeShippingOption.bind(this)),a=null===(e=r.availableShippingOptions)||void 0===e?void 0:e.find(e=>e.isRecommended),s=null===(t=r.selectedShippingOption)||void 0===t?void 0:t.id,c=null==a?void 0:a.id;return s?o.sort(e=>e.id===s?-1:0):c?(o.sort(e=>e.id===c?-1:0),yield this._handleShippingOptionChange(c)):yield this._handleShippingOptionChange(null===(n=o[0])||void 0===n?void 0:n.id),o.slice(0,9)})}_getStripeShippingOption({id:e,cost:t,description:n}){return{id:e,displayName:n,amount:this._toCents(t)}}_handleShippingOptionChange(e){return kb(this,void 0,void 0,function*(){if(e&&\"shipping_option_unselected\"!==e)return this.paymentIntegrationService.selectShippingOption(e)})}_getAmountTransformer(){if(this._amountTransformer)return this._amountTransformer;const{getCart:e}=this.paymentIntegrationService.getState(),{currency:t}=e()||{};return t?new rs(t.decimalPlaces):void 0}_toCents(e){const t=Math.round(100*e),n=this._getAmountTransformer();return n?n.toInteger(e):t}_toggleLoadingIndicator(e){e&&this._loadingIndicatorContainer?this.loadingIndicator.show(this._loadingIndicatorContainer):this.loadingIndicator.hide()}_getMethodId(e){const{initializationData:{checkoutSessionEnabled:t}={}}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e);return t?mo.CHECKOUT_SESSION:mo.OCS}}const Mb=Xt(e=>{const t=new wo((0,d.vQ)()),n=new is({containerStyles:ts});return new xb(e,t,new Xa(e,t),n)},[{id:\"stripeocs\"}]),Nb=e=>{const t=(0,P.uniqueId)(e);return document.getElementById(t)?Nb(e):t};function Db(e){return Object.prototype.hasOwnProperty.call(e,\"cacheKey\")}class Rb{constructor(e){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=Object.assign({maxSize:0,isEqual:wf(),onExpire:P.noop},e)}getKey(...e){const t=this._resolveMap(...e),{index:n,parentMap:i}=t;let{map:r}=t;return r&&r.cacheKey?r.usedCount++:r=this._generateMap(i,e.slice(n)),this._removeLeastUsedMap(r),r.cacheKey}getUsedCount(...e){const{map:t}=this._resolveMap(...e);return t?t.usedCount:0}_resolveMap(...e){let t=0,n=this._map;for(;n.maps.length;){let i=!1;for(let r=0;r<n.maps.length;r++){const o=n.maps[r];if(this._options.isEqual(o.value,e[t])){if(n.maps.unshift(...n.maps.splice(r,1)),(0===e.length||t===e.length-1)&&Db(o))return{index:t,map:o,parentMap:n};i=!0,n=o,t++;break}}if(!i)break}return{index:t,parentMap:n}}_generateMap(e,t){let n,i=0,r=e;do{n={maps:[],parentMap:r,usedCount:1,value:t[i]},r.maps.unshift(n),r=n,i++}while(i<t.length);const o=n;return o.cacheKey=\"\"+ ++this._lastId,o}_removeLeastUsedMap(e){if(!this._options.maxSize)return;const t=this._usedMaps.indexOf(e);if(this._usedMaps.splice(-1===t?0:t,-1===t?0:1,e),this._usedMaps.length<=this._options.maxSize)return;const n=this._usedMaps.pop();n&&(this._removeMap(n),this._options.onExpire(n.cacheKey))}_removeMap(e){e.parentMap&&(e.parentMap.maps.splice(e.parentMap.maps.indexOf(e),1),function(e){return Object.prototype.hasOwnProperty.call(e,\"parentMap\")}(e.parentMap)||this._removeMap(e.parentMap))}}function zb(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const i=Object.getOwnPropertyDescriptor(e.prototype,n);i&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,function(e,t,n){if(\"function\"!=typeof n.value)return n;let i=new Rb,r=n.value,o=(0,K.Bj)(r);return _t(e,t,{get(){const e=(...e)=>{const t=o.call(this,...e);if(1===i.getUsedCount(...e))return t;const n=r.call(this,...e);return kf(n,t,{keyFilter:e=>!function(e){return 0===`${e}`.indexOf(\"$$\")||0===`${e}`.indexOf(\"_\")}(e)})?t:(o.cache.set(i.getKey(...e),n),n)};return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){i=new Rb,r=e,o=(0,K.Bj)(r)}})}(e.prototype,n,i))}),t}let Fb=class{constructor(e){this._checkoutButton=e.checkoutButton}getInitializeButtonError(e){return this._checkoutButton.getInitializeError(e)}getDeinitializeButtonError(e){return this._checkoutButton.getDeinitializeError(e)}};Fb=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([zb],Fb);const Bb=Fb;let jb=class{constructor(e){this._checkoutButton=e.checkoutButton}isInitializingButton(e){return this._checkoutButton.isInitializing(e)}isDeinitializingButton(e){return this._checkoutButton.isDeinitializing(e)}};jb=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([zb],jb);const Lb=jb;function Ub(e){return{errors:new Bb(e),statuses:new Lb(e)}}let Vb=class{constructor(e,t){this._store=e,this._buttonStrategyActionCreator=t,this._state=Ub(this._store.getState()),this._store.subscribe(e=>{this._state=Ub(e)})}getState(){return this._state}subscribe(e,...t){return this._store.subscribe(()=>e(this.getState()),e=>e.checkoutButton.getState(),...t.map(e=>t=>e(Ub(t))))}initializeButton(e){const t=(n=e.containerId,/^\\w[\\w\\-\\:\\.]*$/.test(n)?[e.containerId]:function(e,t){const n=document.querySelectorAll(e);if(!n.length)throw new ye(`Unable to find any element with the specified selector: ${e}`);return Array.prototype.slice.call(n).map(e=>(e.id||(e.id=Nb(t)),e.id))}(e.containerId,`${e.methodId}-container`));var n;return Promise.all(t.map(t=>{const n=this._buttonStrategyActionCreator.initialize(Object.assign(Object.assign({},e),{containerId:t})),i=`checkoutButtonStrategy:${e.methodId}:${t}`;return this._store.dispatch(n,{queueId:i})})).then(()=>this.getState())}deinitializeButton(e){const t=this._buttonStrategyActionCreator.deinitialize(e),n=`checkoutButtonStrategy:${e.methodId}`;return this._store.dispatch(t,{queueId:n}).then(()=>this.getState())}};Vb=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([_t],Vb);const qb=Vb;class Hb{constructor(e,t,n){this._registry=e,this._registryV2=t,this._paymentMethodActionCreator=n}initialize(e){return t=>{const n={methodId:e.methodId,containerId:e.containerId};if(t.getState().checkoutButton.isInitialized(e.methodId,e.containerId))return(0,A.I)();const i=e.currencyCode?{params:{currencyCode:e.currencyCode}}:{},r=Object.assign(Object.assign({},i),{timeout:e.timeout,useCache:!0});return(0,l.x)((0,h.of)((0,u.VP)(Qf.InitializeButtonRequested,void 0,n)),this._paymentMethodActionCreator.loadPaymentMethod(e.methodId,r)(t),(0,p.v)(()=>this._getStrategy(e.methodId).initialize(e).then(()=>(0,u.VP)(Qf.InitializeButtonSucceeded,void 0,n)))).pipe((0,m.W)(e=>_(Qf.InitializeButtonFailed,e,n)))}}deinitialize(e){return t=>{const n={methodId:e.methodId};return t.getState().checkoutButton.isInitialized(e.methodId)?(0,l.x)((0,h.of)((0,u.VP)(Qf.DeinitializeButtonRequested,void 0,n)),(0,p.v)(()=>this._getStrategy(e.methodId).deinitialize().then(()=>(0,u.VP)(Qf.DeinitializeButtonSucceeded,void 0,n)))).pipe((0,m.W)(e=>_(Qf.DeinitializeButtonFailed,e,n))):(0,A.I)()}}_getStrategy(e){let t;try{t=this._registryV2.get({id:e})}catch(n){t=this._registry.get(e)}return t}}class Gb extends T{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var Wb,$b,Yb,Kb,Qb,Jb,Zb,Xb;class eS{constructor(e){this._scriptLoader=e,this._window=window}loadPaypal(e=\"\"){return t=this,n=void 0,r=function*(){const t=\"//www.paypalobjects.com/api/checkout.min.js\",n={async:!0,attributes:{\"data-merchant-id\":e}};if(e?yield this._scriptLoader.loadScript(t,n):yield this._scriptLoader.loadScript(t),!this._window.paypal)throw new Gb;return this._window.paypal},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((r=r.apply(t,n||[])).next())});var t,n,i,r}}!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(Wb||(Wb={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}($b||($b={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(Yb||(Yb={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(Kb||(Kb={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(Qb||(Qb={}));class tS{constructor(e,t,n,i,r=\"\"){this._store=e,this._checkoutActionCreator=t,this._paypalScriptLoader=n,this._formPoster=i,this._host=r}initialize(e){const t=e.paypal,n=this._store.getState(),i=this._paymentMethod=n.paymentMethods.getPaymentMethod(e.methodId);if(!t)throw new ye;if(!i)throw new k(C.MissingPaymentMethod);return this._paypalScriptLoader.loadPaypal(i.config.merchantId).then(n=>{var r,o;if(!i||!i.config.merchantId)throw new k(C.MissingPaymentMethod);const a=i.config.merchantId,s=i.config.testMode?\"sandbox\":\"production\",c={[s]:t.clientId},d=n.FUNDING.CREDIT||\"credit\",u=t.allowCredit?[d]:[],l=t.allowCredit?[]:[d];return n.Button.render({env:s,client:c,commit:t.shouldProcessPayment,funding:{allowed:u,disallowed:l},style:Object.assign(Object.assign({shape:Qb.RECT},(0,P.pick)(t.style,\"layout\",\"color\",\"label\",\"shape\",\"tagline\",\"fundingicons\")),{size:\"paypalexpress\"===i.id&&\"small\"===(null===(r=t.style)||void 0===r?void 0:r.size)?$b.RESPONSIVE:null===(o=t.style)||void 0===o?void 0:o.size}),payment:(e,n)=>this._setupPayment(a,n,t.onPaymentError),onAuthorize:(e,n)=>this._tokenizePayment(e,n,t.shouldProcessPayment,t.onAuthorizeError)},e.containerId)})}deinitialize(){return this._paymentMethod=void 0,Promise.resolve()}_setupPayment(e,t,n){if(!t)throw new $e(Ve.CheckoutButtonNotInitialized);return this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then(n=>{const i=n.cart.getCart(),r=i?i.id:\"\";return t.request.post(`${this._host}/api/storefront/payment/paypalexpress`,{merchantId:e,cartId:r},{headers:Object.assign({\"X-API-INTERNAL\":ie},S)})}).then(e=>e.id).catch(e=>{throw n&&n(e),e})}_tokenizePayment(e,t,n,i){if(!this._paymentMethod)throw new $e(Ve.CheckoutButtonNotInitialized);if(!t)throw new $e(Ve.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new k(C.MissingPayment);const r=this._paymentMethod.id;return t.payment.get(e.paymentID).then(t=>{this._formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:r,action:n?\"process_payment\":\"set_external_checkout\",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(t.payer.payer_info)})})}}function nS(e){const{host:t}=null!=e?e:{},n=v_({config:{meta:{host:null==e?void 0:e.host,locale:null==e?void 0:e.locale},errors:{},statuses:{}}}),i=(0,o.createRequestSender)({host:t}),a=(0,Fn.createFormPoster)({host:t}),s=function(e,t){const n=new ge;for(const[,i]of Object.entries(t))if(me(i))for(const t of i.resolveIds)n.register(t,()=>i(e));return n}(qy(n),r);return new qb(n,new Hb(function(e,t,n,i){const r=new fe,o=(0,d.vQ)(),a=new ke(t),s=new Me(a,new X(new re(t)),new Ne(new De(t)));return r.register(Pm.PAYPALEXPRESS,()=>new tS(e,s,new eS(o),n,i)),r}(n,i,a,t),s,new Fp(new Bp(i),new Up(i))))}!function(e){e.CheckoutComplete=\"CHECKOUT_COMPLETE\",e.CheckoutError=\"CHECKOUT_ERROR\",e.CheckoutLoaded=\"CHECKOUT_LOADED\",e.FrameError=\"FRAME_ERROR\",e.FrameLoaded=\"FRAME_LOADED\",e.SignedOut=\"SIGNED_OUT\"}(Jb||(Jb={}));class iS extends te{constructor(e){super(e,{message:e.body.title}),this.name=\"InvalidLoginTokenError\",this.type=\"invalid_login_token\"}}!function(e){e.MissingContainer=\"missing_container\",e.MissingContent=\"missing_content\",e.UnknownError=\"unknown_error\"}(Zb||(Zb={}));class rS extends T{constructor(e,t=Zb.UnknownError){super(e||\"Unable to embed the checkout form.\"),this.subtype=t,this.name=\"NotEmbeddableError\",this.type=\"not_embeddable\"}}!function(e){e.StyleConfigured=\"STYLE_CONFIGURED\"}(Xb||(Xb={}));const oS=\"isCookieAllowed\",aS=\"lastAllowCookieAttempt\";let sS=class{constructor(e,t,n,i,r,o,a,s){this._iframeCreator=e,this._messageListener=t,this._messagePoster=n,this._loadingIndicator=i,this._requestSender=r,this._storage=o,this._location=a,this._options=s,this._isAttached=!1,this._options.onComplete&&this._messageListener.addListener(Jb.CheckoutComplete,this._options.onComplete),this._options.onError&&this._messageListener.addListener(Jb.CheckoutError,this._options.onError),this._options.onLoad&&this._messageListener.addListener(Jb.CheckoutLoaded,this._options.onLoad),this._options.onFrameLoad&&this._messageListener.addListener(Jb.FrameLoaded,this._options.onFrameLoad),this._options.onSignOut&&this._messageListener.addListener(Jb.SignedOut,this._options.onSignOut),this._messageListener.addListener(Jb.FrameLoaded,()=>this._configureStyles())}attach(){return this._isAttached?Promise.resolve(this):(this._isAttached=!0,this._messageListener.listen(),this._loadingIndicator.show(this._options.containerId),this._allowCookie().then(()=>this._attemptLogin()).then(e=>this._iframeCreator.createFrame(e,this._options.containerId)).then(e=>{this._iframe=e,this._configureStyles(),this._loadingIndicator.hide()}).catch(e=>(this._isAttached=!1,this._retryAllowCookie(e).catch(()=>{throw this._messageListener.trigger({type:Jb.FrameError,payload:e}),this._loadingIndicator.hide(),e}))).then(()=>this))}detach(){this._isAttached&&(this._isAttached=!1,this._messageListener.stopListen(),this._iframe&&this._iframe.parentNode&&(this._iframe.parentNode.removeChild(this._iframe),this._iframe.iFrameResizer.close()))}_configureStyles(){this._iframe&&this._iframe.contentWindow&&this._options.styles&&(this._messagePoster.setTarget(this._iframe.contentWindow),this._messagePoster.post({type:Xb.StyleConfigured,payload:this._options.styles}))}_attemptLogin(){return/^\\/login\\/token/.test(et(this._options.url).pathname)?this._requestSender.post(this._options.url).then(({body:{redirectUrl:e}})=>e).catch(e=>Promise.reject(new iS(e))):Promise.resolve(this._options.url)}_allowCookie(){if(this._storage.getItem(oS))return Promise.resolve();this._storage.setItem(oS,!0),this._storage.setItem(aS,Date.now());const{origin:e}=et(this._options.url),t=`${e}/embedded-checkout/allow-cookie?returnUrl=${encodeURIComponent(this._location.href)}`;return document.body.style.visibility=\"hidden\",this._location.replace(t),new Promise(()=>{})}_retryAllowCookie(e){const t=Number(this._storage.getItem(aS));return(!t||Date.now()-t>6e5)&&e instanceof rS&&e.subtype===Zb.MissingContent?(this._storage.removeItem(aS),this._storage.removeItem(oS),this._allowCookie()):Promise.reject()}};sS=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([_t],sS);const cS=sS;class dS{constructor(e){this._options=e}createFrame(e,t){const n=document.getElementById(t),{timeout:i=6e4}=this._options||{};if(!n)throw new rS(\"Unable to embed the iframe because the container element could not be found.\",Zb.MissingContainer);const r=document.createElement(\"iframe\");return r.src=e,r.style.border=\"none\",r.style.display=\"none\",r.style.width=\"100%\",r.allowPaymentRequest=!0,r.allow=\"payment\",n.appendChild(r),this._toResizableFrame(r,i).catch(e=>{throw n.removeChild(r),e})}_toResizableFrame(e,t){return new Promise((n,i)=>{const r=window.setTimeout(()=>{i(new rS(\"Unable to embed the iframe because the content could not be loaded.\"))},t),o=t=>{if((t.origin===et(e.src).origin||t.origin===At(et(e.src)).origin)&&(at(t.data,Jb.FrameError)&&(a(),i(new rS(t.data.payload.message,Zb.MissingContent))),at(t.data,Jb.FrameLoaded))){e.style.display=\"\";const i=pt({scrolling:!1,sizeWidth:!1,heightCalculationMethod:t.data.payload&&t.data.payload.contentId?\"taggedElement\":\"lowestElement\"},e);a(),n(i[i.length-1])}},a=()=>{window.removeEventListener(\"message\",o),window.clearTimeout(r)};window.addEventListener(\"message\",o)})}}const uS=\"BigCommerce.EmbeddedCheckout\";function lS(e){const t=et(e.url).origin;return new cS(new dS,new kt(t),new st(t),new is({styles:e.styles&&e.styles.loadingIndicator}),(0,o.createRequestSender)(),new Kp(uS),window.location,e).attach()}function hS(e){if(!e.payload||!e.payload.contentId)return;const t=document.getElementById(e.payload.contentId);t&&!t.hasAttribute(\"data-iframe-height\")&&t.setAttribute(\"data-iframe-height\",\"\")}function pS(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"type\"in e}let mS=class{constructor(e,t,n,i={}){this._messageListener=e,this._messagePoster=t,this._untargetedMessagePoster=n,this._messageHandlers=i,this._messageListener.listen()}postComplete(){const e={type:Jb.CheckoutComplete};this._postMessage(e)}postError(e){const t={type:Jb.CheckoutError,payload:this._transformError(e)};this._postMessage(t)}postFrameError(e){const t={type:Jb.FrameError,payload:this._transformError(e)};this._postMessage(t,{untargeted:!0})}postFrameLoaded(e){const t={type:Jb.FrameLoaded,payload:e};this._postMessage(t)}postLoaded(){const e={type:Jb.CheckoutLoaded};this._postMessage(e)}postSignedOut(){const e={type:Jb.SignedOut};this._postMessage(e)}receiveStyles(e){this._messageListener.addListener(Xb.StyleConfigured,({payload:t})=>{e(t)})}_postMessage(e,t){if(this._notifyMessageHandlers(e),t&&t.untargeted)return this._untargetedMessagePoster.post(e);this._messagePoster.post(e)}_notifyMessageHandlers(e){Object.keys(this._messageHandlers).forEach(t=>{if(e.type!==t)return;const n=this._messageHandlers[t];n&&n.call(null,e)})}_transformError(e){return{message:e.message,type:pS(e)?e.type:void 0,subtype:pS(e)?e.subtype:void 0}}};mS=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([_t],mS);const yS=mS;let fS=class{postComplete(){}postError(){}postFrameError(){}postFrameLoaded(){}postLoaded(){}postSignedOut(){}receiveStyles(){}};fS=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([_t],fS);const gS=fS;function vS(e){n(5990);const t=e.parentWindow||window.parent;return window===t?new gS:new yS(new kt(e.parentOrigin),new st(e.parentOrigin,t),new st(\"*\",t),{[Jb.FrameLoaded]:hS})}var _S=n(1635);function bS(e,t){var n=t&&t.cache?t.cache:kS,i=t&&t.serializer?t.serializer:AS;return(t&&t.strategy?t.strategy:IS)(e,{cache:n,serializer:i})}function SS(e,t,n,i){var r,o=null==(r=i)||\"number\"==typeof r||\"boolean\"==typeof r?i:n(i),a=t.get(o);return void 0===a&&(a=e.call(this,i),t.set(o,a)),a}function wS(e,t,n){var i=Array.prototype.slice.call(arguments,3),r=n(i),o=t.get(r);return void 0===o&&(o=e.apply(this,i),t.set(r,o)),o}function CS(e,t,n,i,r){return n.bind(t,e,i,r)}function IS(e,t){return CS(e,this,1===e.length?SS:wS,t.cache.create(),t.serializer)}var PS,ES,OS,AS=function(){return JSON.stringify(arguments)},TS=function(){function e(){this.cache=Object.create(null)}return e.prototype.get=function(e){return this.cache[e]},e.prototype.set=function(e,t){this.cache[e]=t},e}(),kS={create:function(){return new TS}},xS={variadic:function(e,t){return CS(e,this,wS,t.cache.create(),t.serializer)},monadic:function(e,t){return CS(e,this,SS,t.cache.create(),t.serializer)}};function MS(e){return e.type===ES.literal}function NS(e){return e.type===ES.argument}function DS(e){return e.type===ES.number}function RS(e){return e.type===ES.date}function zS(e){return e.type===ES.time}function FS(e){return e.type===ES.select}function BS(e){return e.type===ES.plural}function jS(e){return e.type===ES.pound}function LS(e){return e.type===ES.tag}function US(e){return!(!e||\"object\"!=typeof e||e.type!==OS.number)}function VS(e){return!(!e||\"object\"!=typeof e||e.type!==OS.dateTime)}!function(e){e[e.EXPECT_ARGUMENT_CLOSING_BRACE=1]=\"EXPECT_ARGUMENT_CLOSING_BRACE\",e[e.EMPTY_ARGUMENT=2]=\"EMPTY_ARGUMENT\",e[e.MALFORMED_ARGUMENT=3]=\"MALFORMED_ARGUMENT\",e[e.EXPECT_ARGUMENT_TYPE=4]=\"EXPECT_ARGUMENT_TYPE\",e[e.INVALID_ARGUMENT_TYPE=5]=\"INVALID_ARGUMENT_TYPE\",e[e.EXPECT_ARGUMENT_STYLE=6]=\"EXPECT_ARGUMENT_STYLE\",e[e.INVALID_NUMBER_SKELETON=7]=\"INVALID_NUMBER_SKELETON\",e[e.INVALID_DATE_TIME_SKELETON=8]=\"INVALID_DATE_TIME_SKELETON\",e[e.EXPECT_NUMBER_SKELETON=9]=\"EXPECT_NUMBER_SKELETON\",e[e.EXPECT_DATE_TIME_SKELETON=10]=\"EXPECT_DATE_TIME_SKELETON\",e[e.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE=11]=\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\",e[e.EXPECT_SELECT_ARGUMENT_OPTIONS=12]=\"EXPECT_SELECT_ARGUMENT_OPTIONS\",e[e.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE=13]=\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\",e[e.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE=14]=\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\",e[e.EXPECT_SELECT_ARGUMENT_SELECTOR=15]=\"EXPECT_SELECT_ARGUMENT_SELECTOR\",e[e.EXPECT_PLURAL_ARGUMENT_SELECTOR=16]=\"EXPECT_PLURAL_ARGUMENT_SELECTOR\",e[e.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT=17]=\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\",e[e.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT=18]=\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\",e[e.INVALID_PLURAL_ARGUMENT_SELECTOR=19]=\"INVALID_PLURAL_ARGUMENT_SELECTOR\",e[e.DUPLICATE_PLURAL_ARGUMENT_SELECTOR=20]=\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\",e[e.DUPLICATE_SELECT_ARGUMENT_SELECTOR=21]=\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\",e[e.MISSING_OTHER_CLAUSE=22]=\"MISSING_OTHER_CLAUSE\",e[e.INVALID_TAG=23]=\"INVALID_TAG\",e[e.INVALID_TAG_NAME=25]=\"INVALID_TAG_NAME\",e[e.UNMATCHED_CLOSING_TAG=26]=\"UNMATCHED_CLOSING_TAG\",e[e.UNCLOSED_TAG=27]=\"UNCLOSED_TAG\"}(PS||(PS={})),function(e){e[e.literal=0]=\"literal\",e[e.argument=1]=\"argument\",e[e.number=2]=\"number\",e[e.date=3]=\"date\",e[e.time=4]=\"time\",e[e.select=5]=\"select\",e[e.plural=6]=\"plural\",e[e.pound=7]=\"pound\",e[e.tag=8]=\"tag\"}(ES||(ES={})),function(e){e[e.number=0]=\"number\",e[e.dateTime=1]=\"dateTime\"}(OS||(OS={}));var qS=/[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/,HS=/(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;function GS(e){var t={};return e.replace(HS,function(e){var n=e.length;switch(e[0]){case\"G\":t.era=4===n?\"long\":5===n?\"narrow\":\"short\";break;case\"y\":t.year=2===n?\"2-digit\":\"numeric\";break;case\"Y\":case\"u\":case\"U\":case\"r\":throw new RangeError(\"`Y/u/U/r` (year) patterns are not supported, use `y` instead\");case\"q\":case\"Q\":throw new RangeError(\"`q/Q` (quarter) patterns are not supported\");case\"M\":case\"L\":t.month=[\"numeric\",\"2-digit\",\"short\",\"long\",\"narrow\"][n-1];break;case\"w\":case\"W\":throw new RangeError(\"`w/W` (week) patterns are not supported\");case\"d\":t.day=[\"numeric\",\"2-digit\"][n-1];break;case\"D\":case\"F\":case\"g\":throw new RangeError(\"`D/F/g` (day) patterns are not supported, use `d` instead\");case\"E\":t.weekday=4===n?\"long\":5===n?\"narrow\":\"short\";break;case\"e\":if(n<4)throw new RangeError(\"`e..eee` (weekday) patterns are not supported\");t.weekday=[\"short\",\"long\",\"narrow\",\"short\"][n-4];break;case\"c\":if(n<4)throw new RangeError(\"`c..ccc` (weekday) patterns are not supported\");t.weekday=[\"short\",\"long\",\"narrow\",\"short\"][n-4];break;case\"a\":t.hour12=!0;break;case\"b\":case\"B\":throw new RangeError(\"`b/B` (period) patterns are not supported, use `a` instead\");case\"h\":t.hourCycle=\"h12\",t.hour=[\"numeric\",\"2-digit\"][n-1];break;case\"H\":t.hourCycle=\"h23\",t.hour=[\"numeric\",\"2-digit\"][n-1];break;case\"K\":t.hourCycle=\"h11\",t.hour=[\"numeric\",\"2-digit\"][n-1];break;case\"k\":t.hourCycle=\"h24\",t.hour=[\"numeric\",\"2-digit\"][n-1];break;case\"j\":case\"J\":case\"C\":throw new RangeError(\"`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead\");case\"m\":t.minute=[\"numeric\",\"2-digit\"][n-1];break;case\"s\":t.second=[\"numeric\",\"2-digit\"][n-1];break;case\"S\":case\"A\":throw new RangeError(\"`S/A` (second) patterns are not supported, use `s` instead\");case\"z\":t.timeZoneName=n<4?\"short\":\"long\";break;case\"Z\":case\"O\":case\"v\":case\"V\":case\"X\":case\"x\":throw new RangeError(\"`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead\")}return\"\"}),t}var WS=/[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;function $S(e){return e.replace(/^(.*?)-/,\"\")}var YS=/^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g,KS=/^(@+)?(\\+|#+)?[rs]?$/g,QS=/(\\*)(0+)|(#+)(0+)|(0+)/g,JS=/^(0+)$/;function ZS(e){var t={};return\"r\"===e[e.length-1]?t.roundingPriority=\"morePrecision\":\"s\"===e[e.length-1]&&(t.roundingPriority=\"lessPrecision\"),e.replace(KS,function(e,n,i){return\"string\"!=typeof i?(t.minimumSignificantDigits=n.length,t.maximumSignificantDigits=n.length):\"+\"===i?t.minimumSignificantDigits=n.length:\"#\"===n[0]?t.maximumSignificantDigits=n.length:(t.minimumSignificantDigits=n.length,t.maximumSignificantDigits=n.length+(\"string\"==typeof i?i.length:0)),\"\"}),t}function XS(e){switch(e){case\"sign-auto\":return{signDisplay:\"auto\"};case\"sign-accounting\":case\"()\":return{currencySign:\"accounting\"};case\"sign-always\":case\"+!\":return{signDisplay:\"always\"};case\"sign-accounting-always\":case\"()!\":return{signDisplay:\"always\",currencySign:\"accounting\"};case\"sign-except-zero\":case\"+?\":return{signDisplay:\"exceptZero\"};case\"sign-accounting-except-zero\":case\"()?\":return{signDisplay:\"exceptZero\",currencySign:\"accounting\"};case\"sign-never\":case\"+_\":return{signDisplay:\"never\"}}}function ew(e){var t;if(\"E\"===e[0]&&\"E\"===e[1]?(t={notation:\"engineering\"},e=e.slice(2)):\"E\"===e[0]&&(t={notation:\"scientific\"},e=e.slice(1)),t){var n=e.slice(0,2);if(\"+!\"===n?(t.signDisplay=\"always\",e=e.slice(2)):\"+?\"===n&&(t.signDisplay=\"exceptZero\",e=e.slice(2)),!JS.test(e))throw new Error(\"Malformed concise eng/scientific notation\");t.minimumIntegerDigits=e.length}return t}function tw(e){return XS(e)||{}}function nw(e){for(var t={},n=0,i=e;n<i.length;n++){var r=i[n];switch(r.stem){case\"percent\":case\"%\":t.style=\"percent\";continue;case\"%x100\":t.style=\"percent\",t.scale=100;continue;case\"currency\":t.style=\"currency\",t.currency=r.options[0];continue;case\"group-off\":case\",_\":t.useGrouping=!1;continue;case\"precision-integer\":case\".\":t.maximumFractionDigits=0;continue;case\"measure-unit\":case\"unit\":t.style=\"unit\",t.unit=$S(r.options[0]);continue;case\"compact-short\":case\"K\":t.notation=\"compact\",t.compactDisplay=\"short\";continue;case\"compact-long\":case\"KK\":t.notation=\"compact\",t.compactDisplay=\"long\";continue;case\"scientific\":t=(0,_S.__assign)((0,_S.__assign)((0,_S.__assign)({},t),{notation:\"scientific\"}),r.options.reduce(function(e,t){return(0,_S.__assign)((0,_S.__assign)({},e),tw(t))},{}));continue;case\"engineering\":t=(0,_S.__assign)((0,_S.__assign)((0,_S.__assign)({},t),{notation:\"engineering\"}),r.options.reduce(function(e,t){return(0,_S.__assign)((0,_S.__assign)({},e),tw(t))},{}));continue;case\"notation-simple\":t.notation=\"standard\";continue;case\"unit-width-narrow\":t.currencyDisplay=\"narrowSymbol\",t.unitDisplay=\"narrow\";continue;case\"unit-width-short\":t.currencyDisplay=\"code\",t.unitDisplay=\"short\";continue;case\"unit-width-full-name\":t.currencyDisplay=\"name\",t.unitDisplay=\"long\";continue;case\"unit-width-iso-code\":t.currencyDisplay=\"symbol\";continue;case\"scale\":t.scale=parseFloat(r.options[0]);continue;case\"rounding-mode-floor\":t.roundingMode=\"floor\";continue;case\"rounding-mode-ceiling\":t.roundingMode=\"ceil\";continue;case\"rounding-mode-down\":t.roundingMode=\"trunc\";continue;case\"rounding-mode-up\":t.roundingMode=\"expand\";continue;case\"rounding-mode-half-even\":t.roundingMode=\"halfEven\";continue;case\"rounding-mode-half-down\":t.roundingMode=\"halfTrunc\";continue;case\"rounding-mode-half-up\":t.roundingMode=\"halfExpand\";continue;case\"integer-width\":if(r.options.length>1)throw new RangeError(\"integer-width stems only accept a single optional option\");r.options[0].replace(QS,function(e,n,i,r,o,a){if(n)t.minimumIntegerDigits=i.length;else{if(r&&o)throw new Error(\"We currently do not support maximum integer digits\");if(a)throw new Error(\"We currently do not support exact integer digits\")}return\"\"});continue}if(JS.test(r.stem))t.minimumIntegerDigits=r.stem.length;else if(YS.test(r.stem)){if(r.options.length>1)throw new RangeError(\"Fraction-precision stems only accept a single optional option\");r.stem.replace(YS,function(e,n,i,r,o,a){return\"*\"===i?t.minimumFractionDigits=n.length:r&&\"#\"===r[0]?t.maximumFractionDigits=r.length:o&&a?(t.minimumFractionDigits=o.length,t.maximumFractionDigits=o.length+a.length):(t.minimumFractionDigits=n.length,t.maximumFractionDigits=n.length),\"\"});var o=r.options[0];\"w\"===o?t=(0,_S.__assign)((0,_S.__assign)({},t),{trailingZeroDisplay:\"stripIfInteger\"}):o&&(t=(0,_S.__assign)((0,_S.__assign)({},t),ZS(o)))}else if(KS.test(r.stem))t=(0,_S.__assign)((0,_S.__assign)({},t),ZS(r.stem));else{var a=XS(r.stem);a&&(t=(0,_S.__assign)((0,_S.__assign)({},t),a));var s=ew(r.stem);s&&(t=(0,_S.__assign)((0,_S.__assign)({},t),s))}}return t}var iw,rw={\"001\":[\"H\",\"h\"],419:[\"h\",\"H\",\"hB\",\"hb\"],AC:[\"H\",\"h\",\"hb\",\"hB\"],AD:[\"H\",\"hB\"],AE:[\"h\",\"hB\",\"hb\",\"H\"],AF:[\"H\",\"hb\",\"hB\",\"h\"],AG:[\"h\",\"hb\",\"H\",\"hB\"],AI:[\"H\",\"h\",\"hb\",\"hB\"],AL:[\"h\",\"H\",\"hB\"],AM:[\"H\",\"hB\"],AO:[\"H\",\"hB\"],AR:[\"h\",\"H\",\"hB\",\"hb\"],AS:[\"h\",\"H\"],AT:[\"H\",\"hB\"],AU:[\"h\",\"hb\",\"H\",\"hB\"],AW:[\"H\",\"hB\"],AX:[\"H\"],AZ:[\"H\",\"hB\",\"h\"],BA:[\"H\",\"hB\",\"h\"],BB:[\"h\",\"hb\",\"H\",\"hB\"],BD:[\"h\",\"hB\",\"H\"],BE:[\"H\",\"hB\"],BF:[\"H\",\"hB\"],BG:[\"H\",\"hB\",\"h\"],BH:[\"h\",\"hB\",\"hb\",\"H\"],BI:[\"H\",\"h\"],BJ:[\"H\",\"hB\"],BL:[\"H\",\"hB\"],BM:[\"h\",\"hb\",\"H\",\"hB\"],BN:[\"hb\",\"hB\",\"h\",\"H\"],BO:[\"h\",\"H\",\"hB\",\"hb\"],BQ:[\"H\"],BR:[\"H\",\"hB\"],BS:[\"h\",\"hb\",\"H\",\"hB\"],BT:[\"h\",\"H\"],BW:[\"H\",\"h\",\"hb\",\"hB\"],BY:[\"H\",\"h\"],BZ:[\"H\",\"h\",\"hb\",\"hB\"],CA:[\"h\",\"hb\",\"H\",\"hB\"],CC:[\"H\",\"h\",\"hb\",\"hB\"],CD:[\"hB\",\"H\"],CF:[\"H\",\"h\",\"hB\"],CG:[\"H\",\"hB\"],CH:[\"H\",\"hB\",\"h\"],CI:[\"H\",\"hB\"],CK:[\"H\",\"h\",\"hb\",\"hB\"],CL:[\"h\",\"H\",\"hB\",\"hb\"],CM:[\"H\",\"h\",\"hB\"],CN:[\"H\",\"hB\",\"hb\",\"h\"],CO:[\"h\",\"H\",\"hB\",\"hb\"],CP:[\"H\"],CR:[\"h\",\"H\",\"hB\",\"hb\"],CU:[\"h\",\"H\",\"hB\",\"hb\"],CV:[\"H\",\"hB\"],CW:[\"H\",\"hB\"],CX:[\"H\",\"h\",\"hb\",\"hB\"],CY:[\"h\",\"H\",\"hb\",\"hB\"],CZ:[\"H\"],DE:[\"H\",\"hB\"],DG:[\"H\",\"h\",\"hb\",\"hB\"],DJ:[\"h\",\"H\"],DK:[\"H\"],DM:[\"h\",\"hb\",\"H\",\"hB\"],DO:[\"h\",\"H\",\"hB\",\"hb\"],DZ:[\"h\",\"hB\",\"hb\",\"H\"],EA:[\"H\",\"h\",\"hB\",\"hb\"],EC:[\"h\",\"H\",\"hB\",\"hb\"],EE:[\"H\",\"hB\"],EG:[\"h\",\"hB\",\"hb\",\"H\"],EH:[\"h\",\"hB\",\"hb\",\"H\"],ER:[\"h\",\"H\"],ES:[\"H\",\"hB\",\"h\",\"hb\"],ET:[\"hB\",\"hb\",\"h\",\"H\"],FI:[\"H\"],FJ:[\"h\",\"hb\",\"H\",\"hB\"],FK:[\"H\",\"h\",\"hb\",\"hB\"],FM:[\"h\",\"hb\",\"H\",\"hB\"],FO:[\"H\",\"h\"],FR:[\"H\",\"hB\"],GA:[\"H\",\"hB\"],GB:[\"H\",\"h\",\"hb\",\"hB\"],GD:[\"h\",\"hb\",\"H\",\"hB\"],GE:[\"H\",\"hB\",\"h\"],GF:[\"H\",\"hB\"],GG:[\"H\",\"h\",\"hb\",\"hB\"],GH:[\"h\",\"H\"],GI:[\"H\",\"h\",\"hb\",\"hB\"],GL:[\"H\",\"h\"],GM:[\"h\",\"hb\",\"H\",\"hB\"],GN:[\"H\",\"hB\"],GP:[\"H\",\"hB\"],GQ:[\"H\",\"hB\",\"h\",\"hb\"],GR:[\"h\",\"H\",\"hb\",\"hB\"],GT:[\"h\",\"H\",\"hB\",\"hb\"],GU:[\"h\",\"hb\",\"H\",\"hB\"],GW:[\"H\",\"hB\"],GY:[\"h\",\"hb\",\"H\",\"hB\"],HK:[\"h\",\"hB\",\"hb\",\"H\"],HN:[\"h\",\"H\",\"hB\",\"hb\"],HR:[\"H\",\"hB\"],HU:[\"H\",\"h\"],IC:[\"H\",\"h\",\"hB\",\"hb\"],ID:[\"H\"],IE:[\"H\",\"h\",\"hb\",\"hB\"],IL:[\"H\",\"hB\"],IM:[\"H\",\"h\",\"hb\",\"hB\"],IN:[\"h\",\"H\"],IO:[\"H\",\"h\",\"hb\",\"hB\"],IQ:[\"h\",\"hB\",\"hb\",\"H\"],IR:[\"hB\",\"H\"],IS:[\"H\"],IT:[\"H\",\"hB\"],JE:[\"H\",\"h\",\"hb\",\"hB\"],JM:[\"h\",\"hb\",\"H\",\"hB\"],JO:[\"h\",\"hB\",\"hb\",\"H\"],JP:[\"H\",\"K\",\"h\"],KE:[\"hB\",\"hb\",\"H\",\"h\"],KG:[\"H\",\"h\",\"hB\",\"hb\"],KH:[\"hB\",\"h\",\"H\",\"hb\"],KI:[\"h\",\"hb\",\"H\",\"hB\"],KM:[\"H\",\"h\",\"hB\",\"hb\"],KN:[\"h\",\"hb\",\"H\",\"hB\"],KP:[\"h\",\"H\",\"hB\",\"hb\"],KR:[\"h\",\"H\",\"hB\",\"hb\"],KW:[\"h\",\"hB\",\"hb\",\"H\"],KY:[\"h\",\"hb\",\"H\",\"hB\"],KZ:[\"H\",\"hB\"],LA:[\"H\",\"hb\",\"hB\",\"h\"],LB:[\"h\",\"hB\",\"hb\",\"H\"],LC:[\"h\",\"hb\",\"H\",\"hB\"],LI:[\"H\",\"hB\",\"h\"],LK:[\"H\",\"h\",\"hB\",\"hb\"],LR:[\"h\",\"hb\",\"H\",\"hB\"],LS:[\"h\",\"H\"],LT:[\"H\",\"h\",\"hb\",\"hB\"],LU:[\"H\",\"h\",\"hB\"],LV:[\"H\",\"hB\",\"hb\",\"h\"],LY:[\"h\",\"hB\",\"hb\",\"H\"],MA:[\"H\",\"h\",\"hB\",\"hb\"],MC:[\"H\",\"hB\"],MD:[\"H\",\"hB\"],ME:[\"H\",\"hB\",\"h\"],MF:[\"H\",\"hB\"],MG:[\"H\",\"h\"],MH:[\"h\",\"hb\",\"H\",\"hB\"],MK:[\"H\",\"h\",\"hb\",\"hB\"],ML:[\"H\"],MM:[\"hB\",\"hb\",\"H\",\"h\"],MN:[\"H\",\"h\",\"hb\",\"hB\"],MO:[\"h\",\"hB\",\"hb\",\"H\"],MP:[\"h\",\"hb\",\"H\",\"hB\"],MQ:[\"H\",\"hB\"],MR:[\"h\",\"hB\",\"hb\",\"H\"],MS:[\"H\",\"h\",\"hb\",\"hB\"],MT:[\"H\",\"h\"],MU:[\"H\",\"h\"],MV:[\"H\",\"h\"],MW:[\"h\",\"hb\",\"H\",\"hB\"],MX:[\"h\",\"H\",\"hB\",\"hb\"],MY:[\"hb\",\"hB\",\"h\",\"H\"],MZ:[\"H\",\"hB\"],NA:[\"h\",\"H\",\"hB\",\"hb\"],NC:[\"H\",\"hB\"],NE:[\"H\"],NF:[\"H\",\"h\",\"hb\",\"hB\"],NG:[\"H\",\"h\",\"hb\",\"hB\"],NI:[\"h\",\"H\",\"hB\",\"hb\"],NL:[\"H\",\"hB\"],NO:[\"H\",\"h\"],NP:[\"H\",\"h\",\"hB\"],NR:[\"H\",\"h\",\"hb\",\"hB\"],NU:[\"H\",\"h\",\"hb\",\"hB\"],NZ:[\"h\",\"hb\",\"H\",\"hB\"],OM:[\"h\",\"hB\",\"hb\",\"H\"],PA:[\"h\",\"H\",\"hB\",\"hb\"],PE:[\"h\",\"H\",\"hB\",\"hb\"],PF:[\"H\",\"h\",\"hB\"],PG:[\"h\",\"H\"],PH:[\"h\",\"hB\",\"hb\",\"H\"],PK:[\"h\",\"hB\",\"H\"],PL:[\"H\",\"h\"],PM:[\"H\",\"hB\"],PN:[\"H\",\"h\",\"hb\",\"hB\"],PR:[\"h\",\"H\",\"hB\",\"hb\"],PS:[\"h\",\"hB\",\"hb\",\"H\"],PT:[\"H\",\"hB\"],PW:[\"h\",\"H\"],PY:[\"h\",\"H\",\"hB\",\"hb\"],QA:[\"h\",\"hB\",\"hb\",\"H\"],RE:[\"H\",\"hB\"],RO:[\"H\",\"hB\"],RS:[\"H\",\"hB\",\"h\"],RU:[\"H\"],RW:[\"H\",\"h\"],SA:[\"h\",\"hB\",\"hb\",\"H\"],SB:[\"h\",\"hb\",\"H\",\"hB\"],SC:[\"H\",\"h\",\"hB\"],SD:[\"h\",\"hB\",\"hb\",\"H\"],SE:[\"H\"],SG:[\"h\",\"hb\",\"H\",\"hB\"],SH:[\"H\",\"h\",\"hb\",\"hB\"],SI:[\"H\",\"hB\"],SJ:[\"H\"],SK:[\"H\"],SL:[\"h\",\"hb\",\"H\",\"hB\"],SM:[\"H\",\"h\",\"hB\"],SN:[\"H\",\"h\",\"hB\"],SO:[\"h\",\"H\"],SR:[\"H\",\"hB\"],SS:[\"h\",\"hb\",\"H\",\"hB\"],ST:[\"H\",\"hB\"],SV:[\"h\",\"H\",\"hB\",\"hb\"],SX:[\"H\",\"h\",\"hb\",\"hB\"],SY:[\"h\",\"hB\",\"hb\",\"H\"],SZ:[\"h\",\"hb\",\"H\",\"hB\"],TA:[\"H\",\"h\",\"hb\",\"hB\"],TC:[\"h\",\"hb\",\"H\",\"hB\"],TD:[\"h\",\"H\",\"hB\"],TF:[\"H\",\"h\",\"hB\"],TG:[\"H\",\"hB\"],TH:[\"H\",\"h\"],TJ:[\"H\",\"h\"],TL:[\"H\",\"hB\",\"hb\",\"h\"],TM:[\"H\",\"h\"],TN:[\"h\",\"hB\",\"hb\",\"H\"],TO:[\"h\",\"H\"],TR:[\"H\",\"hB\"],TT:[\"h\",\"hb\",\"H\",\"hB\"],TW:[\"hB\",\"hb\",\"h\",\"H\"],TZ:[\"hB\",\"hb\",\"H\",\"h\"],UA:[\"H\",\"hB\",\"h\"],UG:[\"hB\",\"hb\",\"H\",\"h\"],UM:[\"h\",\"hb\",\"H\",\"hB\"],US:[\"h\",\"hb\",\"H\",\"hB\"],UY:[\"h\",\"H\",\"hB\",\"hb\"],UZ:[\"H\",\"hB\",\"h\"],VA:[\"H\",\"h\",\"hB\"],VC:[\"h\",\"hb\",\"H\",\"hB\"],VE:[\"h\",\"H\",\"hB\",\"hb\"],VG:[\"h\",\"hb\",\"H\",\"hB\"],VI:[\"h\",\"hb\",\"H\",\"hB\"],VN:[\"H\",\"h\"],VU:[\"h\",\"H\"],WF:[\"H\",\"hB\"],WS:[\"h\",\"H\"],XK:[\"H\",\"hB\",\"h\"],YE:[\"h\",\"hB\",\"hb\",\"H\"],YT:[\"H\",\"hB\"],ZA:[\"H\",\"h\",\"hb\",\"hB\"],ZM:[\"h\",\"hb\",\"H\",\"hB\"],ZW:[\"H\",\"h\"],\"af-ZA\":[\"H\",\"h\",\"hB\",\"hb\"],\"ar-001\":[\"h\",\"hB\",\"hb\",\"H\"],\"ca-ES\":[\"H\",\"h\",\"hB\"],\"en-001\":[\"h\",\"hb\",\"H\",\"hB\"],\"en-HK\":[\"h\",\"hb\",\"H\",\"hB\"],\"en-IL\":[\"H\",\"h\",\"hb\",\"hB\"],\"en-MY\":[\"h\",\"hb\",\"H\",\"hB\"],\"es-BR\":[\"H\",\"h\",\"hB\",\"hb\"],\"es-ES\":[\"H\",\"h\",\"hB\",\"hb\"],\"es-GQ\":[\"H\",\"h\",\"hB\",\"hb\"],\"fr-CA\":[\"H\",\"h\",\"hB\"],\"gl-ES\":[\"H\",\"h\",\"hB\"],\"gu-IN\":[\"hB\",\"hb\",\"h\",\"H\"],\"hi-IN\":[\"hB\",\"h\",\"H\"],\"it-CH\":[\"H\",\"h\",\"hB\"],\"it-IT\":[\"H\",\"h\",\"hB\"],\"kn-IN\":[\"hB\",\"h\",\"H\"],\"ml-IN\":[\"hB\",\"h\",\"H\"],\"mr-IN\":[\"hB\",\"hb\",\"h\",\"H\"],\"pa-IN\":[\"hB\",\"hb\",\"h\",\"H\"],\"ta-IN\":[\"hB\",\"h\",\"hb\",\"H\"],\"te-IN\":[\"hB\",\"h\",\"H\"],\"zu-ZA\":[\"H\",\"hB\",\"hb\",\"h\"]};function ow(e){var t=e.hourCycle;if(void 0===t&&e.hourCycles&&e.hourCycles.length&&(t=e.hourCycles[0]),t)switch(t){case\"h24\":return\"k\";case\"h23\":return\"H\";case\"h12\":return\"h\";case\"h11\":return\"K\";default:throw new Error(\"Invalid hourCycle\")}var n,i=e.language;return\"root\"!==i&&(n=e.maximize().region),(rw[n||\"\"]||rw[i||\"\"]||rw[\"\".concat(i,\"-001\")]||rw[\"001\"])[0]}var aw=new RegExp(\"^\".concat(qS.source,\"*\")),sw=new RegExp(\"\".concat(qS.source,\"*$\"));function cw(e,t){return{start:e,end:t}}var dw=!!String.prototype.startsWith&&\"_a\".startsWith(\"a\",1),uw=!!String.fromCodePoint,lw=!!Object.fromEntries,hw=!!String.prototype.codePointAt,pw=!!String.prototype.trimStart,mw=!!String.prototype.trimEnd,yw=Number.isSafeInteger?Number.isSafeInteger:function(e){return\"number\"==typeof e&&isFinite(e)&&Math.floor(e)===e&&Math.abs(e)<=9007199254740991},fw=!0;try{fw=\"a\"===(null===(iw=Iw(\"([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)\",\"yu\").exec(\"a\"))||void 0===iw?void 0:iw[0])}catch(e){fw=!1}var gw,vw=dw?function(e,t,n){return e.startsWith(t,n)}:function(e,t,n){return e.slice(n,n+t.length)===t},_w=uw?String.fromCodePoint:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n,i=\"\",r=e.length,o=0;r>o;){if((n=e[o++])>1114111)throw RangeError(n+\" is not a valid code point\");i+=n<65536?String.fromCharCode(n):String.fromCharCode(55296+((n-=65536)>>10),n%1024+56320)}return i},bw=lw?Object.fromEntries:function(e){for(var t={},n=0,i=e;n<i.length;n++){var r=i[n],o=r[0],a=r[1];t[o]=a}return t},Sw=hw?function(e,t){return e.codePointAt(t)}:function(e,t){var n=e.length;if(!(t<0||t>=n)){var i,r=e.charCodeAt(t);return r<55296||r>56319||t+1===n||(i=e.charCodeAt(t+1))<56320||i>57343?r:i-56320+(r-55296<<10)+65536}},ww=pw?function(e){return e.trimStart()}:function(e){return e.replace(aw,\"\")},Cw=mw?function(e){return e.trimEnd()}:function(e){return e.replace(sw,\"\")};function Iw(e,t){return new RegExp(e,t)}if(fw){var Pw=Iw(\"([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)\",\"yu\");gw=function(e,t){var n;return Pw.lastIndex=t,null!==(n=Pw.exec(e)[1])&&void 0!==n?n:\"\"}}else gw=function(e,t){for(var n=[];;){var i=Sw(e,t);if(void 0===i||kw(i)||xw(i))break;n.push(i),t+=i>=65536?2:1}return _w.apply(void 0,n)};var Ew,Ow=function(){function e(e,t){void 0===t&&(t={}),this.message=e,this.position={offset:0,line:1,column:1},this.ignoreTag=!!t.ignoreTag,this.locale=t.locale,this.requiresOtherClause=!!t.requiresOtherClause,this.shouldParseSkeletons=!!t.shouldParseSkeletons}return e.prototype.parse=function(){if(0!==this.offset())throw Error(\"parser can only be used once\");return this.parseMessage(0,\"\",!1)},e.prototype.parseMessage=function(e,t,n){for(var i=[];!this.isEOF();){var r=this.char();if(123===r){if((o=this.parseArgument(e,n)).err)return o;i.push(o.val)}else{if(125===r&&e>0)break;if(35!==r||\"plural\"!==t&&\"selectordinal\"!==t){if(60===r&&!this.ignoreTag&&47===this.peek()){if(n)break;return this.error(PS.UNMATCHED_CLOSING_TAG,cw(this.clonePosition(),this.clonePosition()))}if(60===r&&!this.ignoreTag&&Aw(this.peek()||0)){if((o=this.parseTag(e,t)).err)return o;i.push(o.val)}else{var o;if((o=this.parseLiteral(e,t)).err)return o;i.push(o.val)}}else{var a=this.clonePosition();this.bump(),i.push({type:ES.pound,location:cw(a,this.clonePosition())})}}}return{val:i,err:null}},e.prototype.parseTag=function(e,t){var n=this.clonePosition();this.bump();var i=this.parseTagName();if(this.bumpSpace(),this.bumpIf(\"/>\"))return{val:{type:ES.literal,value:\"<\".concat(i,\"/>\"),location:cw(n,this.clonePosition())},err:null};if(this.bumpIf(\">\")){var r=this.parseMessage(e+1,t,!0);if(r.err)return r;var o=r.val,a=this.clonePosition();if(this.bumpIf(\"</\")){if(this.isEOF()||!Aw(this.char()))return this.error(PS.INVALID_TAG,cw(a,this.clonePosition()));var s=this.clonePosition();return i!==this.parseTagName()?this.error(PS.UNMATCHED_CLOSING_TAG,cw(s,this.clonePosition())):(this.bumpSpace(),this.bumpIf(\">\")?{val:{type:ES.tag,value:i,children:o,location:cw(n,this.clonePosition())},err:null}:this.error(PS.INVALID_TAG,cw(a,this.clonePosition())))}return this.error(PS.UNCLOSED_TAG,cw(n,this.clonePosition()))}return this.error(PS.INVALID_TAG,cw(n,this.clonePosition()))},e.prototype.parseTagName=function(){var e=this.offset();for(this.bump();!this.isEOF()&&Tw(this.char());)this.bump();return this.message.slice(e,this.offset())},e.prototype.parseLiteral=function(e,t){for(var n=this.clonePosition(),i=\"\";;){var r=this.tryParseQuote(t);if(r)i+=r;else{var o=this.tryParseUnquoted(e,t);if(o)i+=o;else{var a=this.tryParseLeftAngleBracket();if(!a)break;i+=a}}}var s=cw(n,this.clonePosition());return{val:{type:ES.literal,value:i,location:s},err:null}},e.prototype.tryParseLeftAngleBracket=function(){return this.isEOF()||60!==this.char()||!this.ignoreTag&&(Aw(e=this.peek()||0)||47===e)?null:(this.bump(),\"<\");var e},e.prototype.tryParseQuote=function(e){if(this.isEOF()||39!==this.char())return null;switch(this.peek()){case 39:return this.bump(),this.bump(),\"'\";case 123:case 60:case 62:case 125:break;case 35:if(\"plural\"===e||\"selectordinal\"===e)break;return null;default:return null}this.bump();var t=[this.char()];for(this.bump();!this.isEOF();){var n=this.char();if(39===n){if(39!==this.peek()){this.bump();break}t.push(39),this.bump()}else t.push(n);this.bump()}return _w.apply(void 0,t)},e.prototype.tryParseUnquoted=function(e,t){if(this.isEOF())return null;var n=this.char();return 60===n||123===n||35===n&&(\"plural\"===t||\"selectordinal\"===t)||125===n&&e>0?null:(this.bump(),_w(n))},e.prototype.parseArgument=function(e,t){var n=this.clonePosition();if(this.bump(),this.bumpSpace(),this.isEOF())return this.error(PS.EXPECT_ARGUMENT_CLOSING_BRACE,cw(n,this.clonePosition()));if(125===this.char())return this.bump(),this.error(PS.EMPTY_ARGUMENT,cw(n,this.clonePosition()));var i=this.parseIdentifierIfPossible().value;if(!i)return this.error(PS.MALFORMED_ARGUMENT,cw(n,this.clonePosition()));if(this.bumpSpace(),this.isEOF())return this.error(PS.EXPECT_ARGUMENT_CLOSING_BRACE,cw(n,this.clonePosition()));switch(this.char()){case 125:return this.bump(),{val:{type:ES.argument,value:i,location:cw(n,this.clonePosition())},err:null};case 44:return this.bump(),this.bumpSpace(),this.isEOF()?this.error(PS.EXPECT_ARGUMENT_CLOSING_BRACE,cw(n,this.clonePosition())):this.parseArgumentOptions(e,t,i,n);default:return this.error(PS.MALFORMED_ARGUMENT,cw(n,this.clonePosition()))}},e.prototype.parseIdentifierIfPossible=function(){var e=this.clonePosition(),t=this.offset(),n=gw(this.message,t),i=t+n.length;return this.bumpTo(i),{value:n,location:cw(e,this.clonePosition())}},e.prototype.parseArgumentOptions=function(e,t,n,i){var r,o=this.clonePosition(),a=this.parseIdentifierIfPossible().value,s=this.clonePosition();switch(a){case\"\":return this.error(PS.EXPECT_ARGUMENT_TYPE,cw(o,s));case\"number\":case\"date\":case\"time\":this.bumpSpace();var c=null;if(this.bumpIf(\",\")){this.bumpSpace();var d=this.clonePosition();if((g=this.parseSimpleArgStyleIfPossible()).err)return g;if(0===(p=Cw(g.val)).length)return this.error(PS.EXPECT_ARGUMENT_STYLE,cw(this.clonePosition(),this.clonePosition()));c={style:p,styleLocation:cw(d,this.clonePosition())}}if((v=this.tryParseArgumentClose(i)).err)return v;var u=cw(i,this.clonePosition());if(c&&vw(null==c?void 0:c.style,\"::\",0)){var l=ww(c.style.slice(2));if(\"number\"===a)return(g=this.parseNumberSkeletonFromString(l,c.styleLocation)).err?g:{val:{type:ES.number,value:n,location:u,style:g.val},err:null};if(0===l.length)return this.error(PS.EXPECT_DATE_TIME_SKELETON,u);var h=l;this.locale&&(h=function(e,t){for(var n=\"\",i=0;i<e.length;i++){var r=e.charAt(i);if(\"j\"===r){for(var o=0;i+1<e.length&&e.charAt(i+1)===r;)o++,i++;var a=1+(1&o),s=o<2?1:3+(o>>1),c=ow(t);for(\"H\"!=c&&\"k\"!=c||(s=0);s-- >0;)n+=\"a\";for(;a-- >0;)n=c+n}else n+=\"J\"===r?\"H\":r}return n}(l,this.locale));var p={type:OS.dateTime,pattern:h,location:c.styleLocation,parsedOptions:this.shouldParseSkeletons?GS(h):{}};return{val:{type:\"date\"===a?ES.date:ES.time,value:n,location:u,style:p},err:null}}return{val:{type:\"number\"===a?ES.number:\"date\"===a?ES.date:ES.time,value:n,location:u,style:null!==(r=null==c?void 0:c.style)&&void 0!==r?r:null},err:null};case\"plural\":case\"selectordinal\":case\"select\":var m=this.clonePosition();if(this.bumpSpace(),!this.bumpIf(\",\"))return this.error(PS.EXPECT_SELECT_ARGUMENT_OPTIONS,cw(m,(0,_S.__assign)({},m)));this.bumpSpace();var y=this.parseIdentifierIfPossible(),f=0;if(\"select\"!==a&&\"offset\"===y.value){if(!this.bumpIf(\":\"))return this.error(PS.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,cw(this.clonePosition(),this.clonePosition()));var g;if(this.bumpSpace(),(g=this.tryParseDecimalInteger(PS.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,PS.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE)).err)return g;this.bumpSpace(),y=this.parseIdentifierIfPossible(),f=g.val}var v,_=this.tryParsePluralOrSelectOptions(e,a,t,y);if(_.err)return _;if((v=this.tryParseArgumentClose(i)).err)return v;var b=cw(i,this.clonePosition());return\"select\"===a?{val:{type:ES.select,value:n,options:bw(_.val),location:b},err:null}:{val:{type:ES.plural,value:n,options:bw(_.val),offset:f,pluralType:\"plural\"===a?\"cardinal\":\"ordinal\",location:b},err:null};default:return this.error(PS.INVALID_ARGUMENT_TYPE,cw(o,s))}},e.prototype.tryParseArgumentClose=function(e){return this.isEOF()||125!==this.char()?this.error(PS.EXPECT_ARGUMENT_CLOSING_BRACE,cw(e,this.clonePosition())):(this.bump(),{val:!0,err:null})},e.prototype.parseSimpleArgStyleIfPossible=function(){for(var e=0,t=this.clonePosition();!this.isEOF();)switch(this.char()){case 39:this.bump();var n=this.clonePosition();if(!this.bumpUntil(\"'\"))return this.error(PS.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE,cw(n,this.clonePosition()));this.bump();break;case 123:e+=1,this.bump();break;case 125:if(!(e>0))return{val:this.message.slice(t.offset,this.offset()),err:null};e-=1;break;default:this.bump()}return{val:this.message.slice(t.offset,this.offset()),err:null}},e.prototype.parseNumberSkeletonFromString=function(e,t){var n=[];try{n=function(e){if(0===e.length)throw new Error(\"Number skeleton cannot be empty\");for(var t=[],n=0,i=e.split(WS).filter(function(e){return e.length>0});n<i.length;n++){var r=i[n].split(\"/\");if(0===r.length)throw new Error(\"Invalid number skeleton\");for(var o=r[0],a=r.slice(1),s=0,c=a;s<c.length;s++)if(0===c[s].length)throw new Error(\"Invalid number skeleton\");t.push({stem:o,options:a})}return t}(e)}catch(e){return this.error(PS.INVALID_NUMBER_SKELETON,t)}return{val:{type:OS.number,tokens:n,location:t,parsedOptions:this.shouldParseSkeletons?nw(n):{}},err:null}},e.prototype.tryParsePluralOrSelectOptions=function(e,t,n,i){for(var r,o=!1,a=[],s=new Set,c=i.value,d=i.location;;){if(0===c.length){var u=this.clonePosition();if(\"select\"===t||!this.bumpIf(\"=\"))break;var l=this.tryParseDecimalInteger(PS.EXPECT_PLURAL_ARGUMENT_SELECTOR,PS.INVALID_PLURAL_ARGUMENT_SELECTOR);if(l.err)return l;d=cw(u,this.clonePosition()),c=this.message.slice(u.offset,this.offset())}if(s.has(c))return this.error(\"select\"===t?PS.DUPLICATE_SELECT_ARGUMENT_SELECTOR:PS.DUPLICATE_PLURAL_ARGUMENT_SELECTOR,d);\"other\"===c&&(o=!0),this.bumpSpace();var h=this.clonePosition();if(!this.bumpIf(\"{\"))return this.error(\"select\"===t?PS.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT:PS.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT,cw(this.clonePosition(),this.clonePosition()));var p=this.parseMessage(e+1,t,n);if(p.err)return p;var m=this.tryParseArgumentClose(h);if(m.err)return m;a.push([c,{value:p.val,location:cw(h,this.clonePosition())}]),s.add(c),this.bumpSpace(),c=(r=this.parseIdentifierIfPossible()).value,d=r.location}return 0===a.length?this.error(\"select\"===t?PS.EXPECT_SELECT_ARGUMENT_SELECTOR:PS.EXPECT_PLURAL_ARGUMENT_SELECTOR,cw(this.clonePosition(),this.clonePosition())):this.requiresOtherClause&&!o?this.error(PS.MISSING_OTHER_CLAUSE,cw(this.clonePosition(),this.clonePosition())):{val:a,err:null}},e.prototype.tryParseDecimalInteger=function(e,t){var n=1,i=this.clonePosition();this.bumpIf(\"+\")||this.bumpIf(\"-\")&&(n=-1);for(var r=!1,o=0;!this.isEOF();){var a=this.char();if(!(a>=48&&a<=57))break;r=!0,o=10*o+(a-48),this.bump()}var s=cw(i,this.clonePosition());return r?yw(o*=n)?{val:o,err:null}:this.error(t,s):this.error(e,s)},e.prototype.offset=function(){return this.position.offset},e.prototype.isEOF=function(){return this.offset()===this.message.length},e.prototype.clonePosition=function(){return{offset:this.position.offset,line:this.position.line,column:this.position.column}},e.prototype.char=function(){var e=this.position.offset;if(e>=this.message.length)throw Error(\"out of bound\");var t=Sw(this.message,e);if(void 0===t)throw Error(\"Offset \".concat(e,\" is at invalid UTF-16 code unit boundary\"));return t},e.prototype.error=function(e,t){return{val:null,err:{kind:e,message:this.message,location:t}}},e.prototype.bump=function(){if(!this.isEOF()){var e=this.char();10===e?(this.position.line+=1,this.position.column=1,this.position.offset+=1):(this.position.column+=1,this.position.offset+=e<65536?1:2)}},e.prototype.bumpIf=function(e){if(vw(this.message,e,this.offset())){for(var t=0;t<e.length;t++)this.bump();return!0}return!1},e.prototype.bumpUntil=function(e){var t=this.offset(),n=this.message.indexOf(e,t);return n>=0?(this.bumpTo(n),!0):(this.bumpTo(this.message.length),!1)},e.prototype.bumpTo=function(e){if(this.offset()>e)throw Error(\"targetOffset \".concat(e,\" must be greater than or equal to the current offset \").concat(this.offset()));for(e=Math.min(e,this.message.length);;){var t=this.offset();if(t===e)break;if(t>e)throw Error(\"targetOffset \".concat(e,\" is at invalid UTF-16 code unit boundary\"));if(this.bump(),this.isEOF())break}},e.prototype.bumpSpace=function(){for(;!this.isEOF()&&kw(this.char());)this.bump()},e.prototype.peek=function(){if(this.isEOF())return null;var e=this.char(),t=this.offset(),n=this.message.charCodeAt(t+(e>=65536?2:1));return null!=n?n:null},e}();function Aw(e){return e>=97&&e<=122||e>=65&&e<=90}function Tw(e){return 45===e||46===e||e>=48&&e<=57||95===e||e>=97&&e<=122||e>=65&&e<=90||183==e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8255&&e<=8256||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function kw(e){return e>=9&&e<=13||32===e||133===e||e>=8206&&e<=8207||8232===e||8233===e}function xw(e){return e>=33&&e<=35||36===e||e>=37&&e<=39||40===e||41===e||42===e||43===e||44===e||45===e||e>=46&&e<=47||e>=58&&e<=59||e>=60&&e<=62||e>=63&&e<=64||91===e||92===e||93===e||94===e||96===e||123===e||124===e||125===e||126===e||161===e||e>=162&&e<=165||166===e||167===e||169===e||171===e||172===e||174===e||176===e||177===e||182===e||187===e||191===e||215===e||247===e||e>=8208&&e<=8213||e>=8214&&e<=8215||8216===e||8217===e||8218===e||e>=8219&&e<=8220||8221===e||8222===e||8223===e||e>=8224&&e<=8231||e>=8240&&e<=8248||8249===e||8250===e||e>=8251&&e<=8254||e>=8257&&e<=8259||8260===e||8261===e||8262===e||e>=8263&&e<=8273||8274===e||8275===e||e>=8277&&e<=8286||e>=8592&&e<=8596||e>=8597&&e<=8601||e>=8602&&e<=8603||e>=8604&&e<=8607||8608===e||e>=8609&&e<=8610||8611===e||e>=8612&&e<=8613||8614===e||e>=8615&&e<=8621||8622===e||e>=8623&&e<=8653||e>=8654&&e<=8655||e>=8656&&e<=8657||8658===e||8659===e||8660===e||e>=8661&&e<=8691||e>=8692&&e<=8959||e>=8960&&e<=8967||8968===e||8969===e||8970===e||8971===e||e>=8972&&e<=8991||e>=8992&&e<=8993||e>=8994&&e<=9e3||9001===e||9002===e||e>=9003&&e<=9083||9084===e||e>=9085&&e<=9114||e>=9115&&e<=9139||e>=9140&&e<=9179||e>=9180&&e<=9185||e>=9186&&e<=9254||e>=9255&&e<=9279||e>=9280&&e<=9290||e>=9291&&e<=9311||e>=9472&&e<=9654||9655===e||e>=9656&&e<=9664||9665===e||e>=9666&&e<=9719||e>=9720&&e<=9727||e>=9728&&e<=9838||9839===e||e>=9840&&e<=10087||10088===e||10089===e||10090===e||10091===e||10092===e||10093===e||10094===e||10095===e||10096===e||10097===e||10098===e||10099===e||10100===e||10101===e||e>=10132&&e<=10175||e>=10176&&e<=10180||10181===e||10182===e||e>=10183&&e<=10213||10214===e||10215===e||10216===e||10217===e||10218===e||10219===e||10220===e||10221===e||10222===e||10223===e||e>=10224&&e<=10239||e>=10240&&e<=10495||e>=10496&&e<=10626||10627===e||10628===e||10629===e||10630===e||10631===e||10632===e||10633===e||10634===e||10635===e||10636===e||10637===e||10638===e||10639===e||10640===e||10641===e||10642===e||10643===e||10644===e||10645===e||10646===e||10647===e||10648===e||e>=10649&&e<=10711||10712===e||10713===e||10714===e||10715===e||e>=10716&&e<=10747||10748===e||10749===e||e>=10750&&e<=11007||e>=11008&&e<=11055||e>=11056&&e<=11076||e>=11077&&e<=11078||e>=11079&&e<=11084||e>=11085&&e<=11123||e>=11124&&e<=11125||e>=11126&&e<=11157||11158===e||e>=11159&&e<=11263||e>=11776&&e<=11777||11778===e||11779===e||11780===e||11781===e||e>=11782&&e<=11784||11785===e||11786===e||11787===e||11788===e||11789===e||e>=11790&&e<=11798||11799===e||e>=11800&&e<=11801||11802===e||11803===e||11804===e||11805===e||e>=11806&&e<=11807||11808===e||11809===e||11810===e||11811===e||11812===e||11813===e||11814===e||11815===e||11816===e||11817===e||e>=11818&&e<=11822||11823===e||e>=11824&&e<=11833||e>=11834&&e<=11835||e>=11836&&e<=11839||11840===e||11841===e||11842===e||e>=11843&&e<=11855||e>=11856&&e<=11857||11858===e||e>=11859&&e<=11903||e>=12289&&e<=12291||12296===e||12297===e||12298===e||12299===e||12300===e||12301===e||12302===e||12303===e||12304===e||12305===e||e>=12306&&e<=12307||12308===e||12309===e||12310===e||12311===e||12312===e||12313===e||12314===e||12315===e||12316===e||12317===e||e>=12318&&e<=12319||12320===e||12336===e||64830===e||64831===e||e>=65093&&e<=65094}function Mw(e){e.forEach(function(e){if(delete e.location,FS(e)||BS(e))for(var t in e.options)delete e.options[t].location,Mw(e.options[t].value);else DS(e)&&US(e.style)||(RS(e)||zS(e))&&VS(e.style)?delete e.style.location:LS(e)&&Mw(e.children)})}function Nw(e,t){void 0===t&&(t={}),t=(0,_S.__assign)({shouldParseSkeletons:!0,requiresOtherClause:!0},t);var n=new Ow(e,t).parse();if(n.err){var i=SyntaxError(PS[n.err.kind]);throw i.location=n.err.location,i.originalMessage=n.err.message,i}return(null==t?void 0:t.captureLocation)||Mw(n.val),n.val}!function(e){e.MISSING_VALUE=\"MISSING_VALUE\",e.INVALID_VALUE=\"INVALID_VALUE\",e.MISSING_INTL_API=\"MISSING_INTL_API\"}(Ew||(Ew={}));var Dw,Rw=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.code=n,r.originalMessage=i,r}return(0,_S.__extends)(t,e),t.prototype.toString=function(){return\"[formatjs Error: \".concat(this.code,\"] \").concat(this.message)},t}(Error),zw=function(e){function t(t,n,i,r){return e.call(this,'Invalid values for \"'.concat(t,'\": \"').concat(n,'\". Options are \"').concat(Object.keys(i).join('\", \"'),'\"'),Ew.INVALID_VALUE,r)||this}return(0,_S.__extends)(t,e),t}(Rw),Fw=function(e){function t(t,n,i){return e.call(this,'Value for \"'.concat(t,'\" must be of type ').concat(n),Ew.INVALID_VALUE,i)||this}return(0,_S.__extends)(t,e),t}(Rw),Bw=function(e){function t(t,n){return e.call(this,'The intl string context variable \"'.concat(t,'\" was not provided to the string \"').concat(n,'\"'),Ew.MISSING_VALUE,n)||this}return(0,_S.__extends)(t,e),t}(Rw);function jw(e){return\"function\"==typeof e}function Lw(e,t,n,i,r,o,a){if(1===e.length&&MS(e[0]))return[{type:Dw.literal,value:e[0].value}];for(var s=[],c=0,d=e;c<d.length;c++){var u=d[c];if(MS(u))s.push({type:Dw.literal,value:u.value});else if(jS(u))\"number\"==typeof o&&s.push({type:Dw.literal,value:n.getNumberFormat(t).format(o)});else{var l=u.value;if(!r||!(l in r))throw new Bw(l,a);var h=r[l];if(NS(u))h&&\"string\"!=typeof h&&\"number\"!=typeof h||(h=\"string\"==typeof h||\"number\"==typeof h?String(h):\"\"),s.push({type:\"string\"==typeof h?Dw.literal:Dw.object,value:h});else if(RS(u)){var p=\"string\"==typeof u.style?i.date[u.style]:VS(u.style)?u.style.parsedOptions:void 0;s.push({type:Dw.literal,value:n.getDateTimeFormat(t,p).format(h)})}else if(zS(u))p=\"string\"==typeof u.style?i.time[u.style]:VS(u.style)?u.style.parsedOptions:i.time.medium,s.push({type:Dw.literal,value:n.getDateTimeFormat(t,p).format(h)});else if(DS(u))(p=\"string\"==typeof u.style?i.number[u.style]:US(u.style)?u.style.parsedOptions:void 0)&&p.scale&&(h*=p.scale||1),s.push({type:Dw.literal,value:n.getNumberFormat(t,p).format(h)});else{if(LS(u)){var m=u.children,y=u.value,f=r[y];if(!jw(f))throw new Fw(y,\"function\",a);var g=f(Lw(m,t,n,i,r,o).map(function(e){return e.value}));Array.isArray(g)||(g=[g]),s.push.apply(s,g.map(function(e){return{type:\"string\"==typeof e?Dw.literal:Dw.object,value:e}}))}if(FS(u)){if(!(v=u.options[h]||u.options.other))throw new zw(u.value,h,Object.keys(u.options),a);s.push.apply(s,Lw(v.value,t,n,i,r))}else if(BS(u)){var v;if(!(v=u.options[\"=\".concat(h)])){if(!Intl.PluralRules)throw new Rw('Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\\n',Ew.MISSING_INTL_API,a);var _=n.getPluralRules(t,{type:u.pluralType}).select(h-(u.offset||0));v=u.options[_]||u.options.other}if(!v)throw new zw(u.value,h,Object.keys(u.options),a);s.push.apply(s,Lw(v.value,t,n,i,r,h-(u.offset||0)))}}}}return(b=s).length<2?b:b.reduce(function(e,t){var n=e[e.length-1];return n&&n.type===Dw.literal&&t.type===Dw.literal?n.value+=t.value:e.push(t),e},[]);var b}function Uw(e){return{create:function(){return{get:function(t){return e[t]},set:function(t,n){e[t]=n}}}}}!function(e){e[e.literal=0]=\"literal\",e[e.object=1]=\"object\"}(Dw||(Dw={}));var Vw=function(){function e(t,n,i,r){void 0===n&&(n=e.defaultLocale);var o,a,s,c=this;if(this.formatterCache={number:{},dateTime:{},pluralRules:{}},this.format=function(e){var t=c.formatToParts(e);if(1===t.length)return t[0].value;var n=t.reduce(function(e,t){return e.length&&t.type===Dw.literal&&\"string\"==typeof e[e.length-1]?e[e.length-1]+=t.value:e.push(t.value),e},[]);return n.length<=1?n[0]||\"\":n},this.formatToParts=function(e){return Lw(c.ast,c.locales,c.formatters,c.formats,e,void 0,c.message)},this.resolvedOptions=function(){var e;return{locale:(null===(e=c.resolvedLocale)||void 0===e?void 0:e.toString())||Intl.NumberFormat.supportedLocalesOf(c.locales)[0]}},this.getAst=function(){return c.ast},this.locales=n,this.resolvedLocale=e.resolveLocale(n),\"string\"==typeof t){if(this.message=t,!e.__parse)throw new TypeError(\"IntlMessageFormat.__parse must be set to process `message` of type `string`\");var d=r||{},u=(d.formatters,(0,_S.__rest)(d,[\"formatters\"]));this.ast=e.__parse(t,(0,_S.__assign)((0,_S.__assign)({},u),{locale:this.resolvedLocale}))}else this.ast=t;if(!Array.isArray(this.ast))throw new TypeError(\"A message must be provided as a String or AST.\");this.formats=(a=e.formats,(s=i)?Object.keys(a).reduce(function(e,t){var n,i;return e[t]=(n=a[t],(i=s[t])?(0,_S.__assign)((0,_S.__assign)((0,_S.__assign)({},n||{}),i||{}),Object.keys(n).reduce(function(e,t){return e[t]=(0,_S.__assign)((0,_S.__assign)({},n[t]),i[t]||{}),e},{})):n),e},(0,_S.__assign)({},a)):a),this.formatters=r&&r.formatters||(void 0===(o=this.formatterCache)&&(o={number:{},dateTime:{},pluralRules:{}}),{getNumberFormat:bS(function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return new((e=Intl.NumberFormat).bind.apply(e,(0,_S.__spreadArray)([void 0],t,!1)))},{cache:Uw(o.number),strategy:xS.variadic}),getDateTimeFormat:bS(function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return new((e=Intl.DateTimeFormat).bind.apply(e,(0,_S.__spreadArray)([void 0],t,!1)))},{cache:Uw(o.dateTime),strategy:xS.variadic}),getPluralRules:bS(function(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return new((e=Intl.PluralRules).bind.apply(e,(0,_S.__spreadArray)([void 0],t,!1)))},{cache:Uw(o.pluralRules),strategy:xS.variadic})})}return Object.defineProperty(e,\"defaultLocale\",{get:function(){return e.memoizedDefaultLocale||(e.memoizedDefaultLocale=(new Intl.NumberFormat).resolvedOptions().locale),e.memoizedDefaultLocale},enumerable:!1,configurable:!0}),e.memoizedDefaultLocale=null,e.resolveLocale=function(e){if(void 0!==Intl.Locale){var t=Intl.NumberFormat.supportedLocalesOf(e);return t.length>0?new Intl.Locale(t[0]):new Intl.Locale(\"string\"==typeof e?e:e[0])}},e.__parse=Nw,e.formats={number:{integer:{maximumFractionDigits:0},currency:{style:\"currency\"},percent:{style:\"percent\"}},date:{short:{month:\"numeric\",day:\"numeric\",year:\"2-digit\"},medium:{month:\"short\",day:\"numeric\",year:\"numeric\"},long:{month:\"long\",day:\"numeric\",year:\"numeric\"},full:{weekday:\"long\",month:\"long\",day:\"numeric\",year:\"numeric\"}},time:{short:{hour:\"numeric\",minute:\"numeric\"},medium:{hour:\"numeric\",minute:\"numeric\",second:\"numeric\"},long:{hour:\"numeric\",minute:\"numeric\",second:\"numeric\",timeZoneName:\"short\"},full:{hour:\"numeric\",minute:\"numeric\",second:\"numeric\",timeZoneName:\"short\"}}},e}();const qw=\"en\",Hw=\"optimized_checkout\";let Gw=class{constructor(e,t){this._logger=t;const{locale:n,locales:i,translations:r}=this._transformConfig(e);this._locale=n,this._locales=i,this._translations=r,this._formatters={}}mapKeys(e){Object.keys(e).forEach(t=>{const n=`${Hw}.${e[t]}`;this._translations[`${Hw}.${t}`]=this._translations[n]})}getLocale(){return this._hasTranslations()?this._locale:qw}translate(e,t={}){var n;const i=`${Hw}.${e}`;if(\"string\"!=typeof this._translations[i])return this._logger.warn(`Translation key \"${i}\" is missing`),i;this._formatters[i]||(this._formatters[i]=new Vw(this._escapeSpecialCharacters(this._translations[i]||\"\"),this._locales[i],void 0,{ignoreTag:!0}));try{return this._formatters[i].format(this._transformData(t))}catch(e){if(this._isFormatError(e))return null!==(n=e.originalMessage)&&void 0!==n?n:\"\";throw e}}_transformConfig(e={}){const t={defaultLocale:\"\",defaultTranslations:{},translations:{},locales:{},locale:e.locale||qw},n=e.locales||{},i=this._flattenObject(e.translations||{}),r=this._flattenObject(e.defaultTranslations||{}),o=this._flattenObject(e.fallbackTranslations||{});return(0,P.union)(Object.keys(o),Object.keys(r),Object.keys(i)).forEach(a=>{var s,c;i&&i[a]?(t.translations[a]=i[a],t.locales[a]=n[a]||t.locale):r[a]?(t.translations[a]=r[a],t.locales[a]=null!==(s=e.defaultLocale)&&void 0!==s?s:qw):(t.translations[a]=o[a],t.locales[a]=null!==(c=e.fallbackLocale)&&void 0!==c?c:qw)}),t}_flattenObject(e,t={},n=\"\"){try{Object.keys(e).forEach(i=>{const r=e[i],o=n?`${n}.${i}`:i;if((0,P.isObject)(r))return this._flattenObject(r,t,o);t[o]=r})}catch(e){this._logger.warn(`Unable to parse object: ${e}`)}return t}_transformData(e){return Object.keys(e).reduce((t,n)=>{const i=e[n];return t[n]=i??\"\",t},{})}_hasTranslations(){return Object.keys(this._locales).map(e=>this._locales[e]).filter(e=>e.split(\"-\")[0]===this._locale.split(\"-\")[0]).length>0}_isFormatError(e){return\"object\"==typeof e&&null!==e&&\"originalMessage\"in e}_escapeSpecialCharacters(e){return e.replace(/(\\w+)='([^']*)'/g,\"$1=''$2''\")}};Gw=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([_t],Gw);const Ww=Gw;function $w(e={}){return new Ww(e,$())}let Yw=class{constructor(e){this._storeConfig=e,this._customerFormatter=new wr(this._storeConfig.shopperCurrency),this._storeFormatter=new wr(this._storeConfig.currency)}toCustomerCurrency(e){const t=this._storeConfig.shopperCurrency.exchangeRate;return this._customerFormatter.format(e*t)}toStoreCurrency(e){return this._storeFormatter.format(e)}};Yw=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([_t],Yw);const Kw=Yw;function Qw(e){return new Kw(e)}function Jw(e){return e&&\"ga\"in e&&\"function\"==typeof e.ga}function Zw(e,t){Jw(window)&&window.ga(\"send\",e,Object.assign(Object.assign({},t),{nonInteraction:!1}))}function Xw(e){return eC(e).length>=8096}function eC(e){return Object.keys(e).reduce((t,n)=>{const i=typeof e[n];return\"string\"===i||\"number\"===i?[...t,`${n}=${e[n]}`]:\"object\"===i&&null!==e[n]?[...t,eC(e[n])]:t},[]).join(\"&\")}var tC;!function(e){e[e.CUSTOMER=1]=\"CUSTOMER\",e[e.SHIPPING=2]=\"SHIPPING\",e[e.BILLING=3]=\"BILLING\",e[e.PAYMENT=4]=\"PAYMENT\"}(tC||(tC={}));const nC={customer:tC.CUSTOMER,shipping:tC.SHIPPING,billing:tC.BILLING,payment:tC.PAYMENT};class iC{constructor(e,t,n,{checkoutSteps:i}={}){if(this.checkoutService=e,this.analyticsExtraItemsManager=t,this.analytics=n,this._checkoutStarted=!1,this._completedSteps={},this._viewedSteps={},this._analyticStepOrder=[\"customer\",\"shipping\",\"billing\",\"payment\"],void 0!==i){if(i.some(e=>!(e in nC)))throw new ye(`Invalid checkout steps provided. Valid values are: ${(0,P.keys)(nC).join(\", \")}.`);this._analyticStepOrder=i}}trackCheckoutStarted(){if(this._checkoutStarted)return;const e=this.getCheckout();if(!e)return;const{coupons:t,grandTotal:n,shippingCostTotal:i,taxTotal:r,cart:{lineItems:o,discountAmount:a,id:s}}=e,c=this.analyticsExtraItemsManager.saveExtraItemsData(s,o);this.analytics.track(\"Checkout Started\",this.getTrackingPayload({revenue:n,shipping:i,tax:r,discount:a,coupons:t,lineItems:o,extraItemsData:c})),this._checkoutStarted=!0}trackOrderComplete(){var e;const t=this.getOrder();if(!t)return;const{isComplete:n,orderId:i,orderAmount:r,shippingCostTotal:o,taxTotal:a,discountAmount:s,coupons:c,lineItems:d,cartId:u}=t;if(!n)return;const l=this.analyticsExtraItemsManager.readExtraItemsData(u);if(null===l)return;const h=null===(e=this.checkoutService.getState().data.getConfig())||void 0===e?void 0:e.checkoutSettings.features[\"DATA-6891.missing_orders_within_GA\"],p=this.getTrackingPayload({orderId:i,revenue:r,shipping:o,tax:a,discount:s,coupons:c,extraItemsData:l,lineItems:d});if(h&&ed(window)&&Jw(window)&&Xw(p))return Zw(\"transaction\",{\"&ti\":p.order_id,\"&ta\":p.affiliation,\"&tr\":p.revenue,\"&ts\":p.shipping,\"&tt\":p.tax,\"&tcc\":p.coupon,\"&cu\":p.currency}),p.products.forEach(e=>{Zw(\"item\",{\"&ti\":p.order_id,\"&in\":e.name,\"&ic\":e.sku,\"&iv\":`${e.category}`,\"&ip\":e.price,\"&iq\":e.quantity})}),this.analyticsExtraItemsManager.clearExtraItemData(u);this.analytics.track(\"Order Completed\",p),this.analyticsExtraItemsManager.clearExtraItemData(u)}trackStepViewed(e){const t=this.getIdFromStep(e);t&&!this.hasStepViewed(t)&&(this.trackViewed(t),this.backfill(t))}trackStepCompleted(e){const t=this.getIdFromStep(e);t&&!this.hasStepCompleted(t)&&(this.backfill(t),this.trackCompleted(t))}backfill(e){for(const t of this._analyticStepOrder){const n=this.getIdFromStep(t);if(!n)break;if(this.hasStepViewed(n)||this.trackViewed(n),n===e)break;this.hasStepCompleted(n)||this.trackCompleted(n)}}trackCompleted(e){const t=this.getSelectedShippingOption(),{code:n=\"\"}=this.getShopperCurrency()||{},i=this.getPaymentMethodName(),r={step:e,currency:n};t&&(r.shipping_method=t.description),i&&(r.payment_method=i),r.shipping_method||r.payment_method||(r.shipping_method=\" \"),this.analytics.track(\"Checkout Step Completed\",r);const o=t?t.id:\"\",a=e===tC.SHIPPING?`${e}-${o}`:e;this._completedSteps[a]=!0}getTrackingPayload({orderId:e,revenue:t,shipping:n,tax:i,discount:r,coupons:o,extraItemsData:a,lineItems:s}){const{code:c=\"\"}=this.getShopperCurrency()||{},{storeName:d=\"\"}=this.getStoreProfile()||{};return{order_id:String(e),affiliation:d,revenue:this.toShopperCurrency(t),shipping:this.toShopperCurrency(n),tax:this.toShopperCurrency(i),discount:this.toShopperCurrency(r),coupon:(o||[]).map(e=>e.code.toUpperCase()).join(\",\"),currency:c,products:this.getProducts(a,s)}}hasStepCompleted(e){const t=this.getSelectedShippingOption(),n=t?t.id:\"\";return Object.prototype.hasOwnProperty.call(this._completedSteps,e)||e===tC.SHIPPING&&Object.prototype.hasOwnProperty.call(this._completedSteps,`${e}-${n}`)}hasStepViewed(e){return!!this._viewedSteps[e]}getIdFromStep(e){const t=e.split(\".\");return nC[t[0]]||null}trackViewed(e){const t=this.getShopperCurrency();this.analytics.track(\"Checkout Step Viewed\",{step:e,currency:t?t.code:\"\"}),this._viewedSteps[e]=!0}getOrder(){const{data:{getOrder:e}}=this.checkoutService.getState();return e()}getCheckout(){const{data:{getCheckout:e}}=this.checkoutService.getState();return e()}getShopperCurrency(){const{data:{getConfig:e}}=this.checkoutService.getState(),t=e();return t&&t.shopperCurrency}getStoreProfile(){const{data:{getConfig:e}}=this.checkoutService.getState(),t=e();return t&&t.storeProfile}toShopperCurrency(e){const{exchangeRate:t=1}=this.getShopperCurrency()||{};return Math.round(e*t*100)/100}getSelectedShippingOption(){const{data:e}=this.checkoutService.getState(),t=e.getSelectedShippingOption();return t&&t.id&&t.description?t:null}getPaymentMethodName(){const{data:e}=this.checkoutService.getState(),t=e.getSelectedPaymentMethod();return t&&t.config&&t.config.displayName||\"\"}getProducts(e,t){const n=(t.customItems||[]).map(e=>({product_id:e.id,sku:e.sku,price:e.listPrice,quantity:e.quantity,name:e.name})),i=t.giftCertificates.map(e=>({product_id:e.id,price:this.toShopperCurrency(e.amount),name:e.name,quantity:1}));return[...n,...[...t.physicalItems,...t.digitalItems].map(t=>{let n;t.options&&t.options.length&&(n=t.options.map(e=>`${e.name}:${e.value}`),n.sort());const i=Array.isArray(n)&&n.length?n.join(\", \"):\"single-product-option\",r=e[t.productId]&&e[t.productId].brand;return Object.assign({product_id:String(t.productId),sku:t.sku,price:t.salePrice,image_url:t.imageUrl,name:t.name,quantity:t.quantity,category:e[t.productId]?e[t.productId].category:\"\",variant:i},r&&{brand:r})}),...i]}}class rC{trackCheckoutStarted(){}trackOrderComplete(){}trackStepViewed(){}trackStepCompleted(){}}function oC(e,t){const{data:n}=e.getState(),i=n.getConfig();if(!i)throw new k(C.MissingCheckoutConfig);const{isAnalyticsEnabled:r}=i.checkoutSettings;return r&&ed(window)?new iC(e,new Xc(Zc.Ay),window.analytics,t):new rC}function aC(e){return Boolean(e.hasOwnProperty(\"braintreeFastlane\"))}class sC{constructor(e){this.checkoutService=e,this._selectedPaymentMethodId=\"\"}customerPaymentMethodExecuted(){this._shouldTrackFastlaneEvent()&&this._trackEmailSubmitted()}paymentComplete(){this._shouldTrackFastlaneEvent()&&this._trackOrderPlaced(this._selectedPaymentMethodId)}selectedPaymentMethod(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!1))}walletButtonClick(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!0))}_shouldTrackFastlaneEvent(){const e=this.checkoutService.getState(),t=e.data.getPaymentMethod(\"braintree\")||e.data.getPaymentMethod(\"braintreeacceleratedcheckout\"),n=null==t?void 0:t.initializationData.isBraintreeAnalyticsV2Enabled,i=aC(window)&&window.braintreeFastlane.events;return n&&i}_getBraintreeEventsOrThrow(){if(aC(window))return window.braintreeFastlane.events;throw new Qt}_trackEmailSubmitted(){const{emailSubmitted:e}=this._getBraintreeEventsOrThrow();e(this._getEmailSubmittedEventOptions())}_trackApmSelected(e,t){const{apmSelected:n}=this._getBraintreeEventsOrThrow();n(this._getApmSelectedEventOptions(e,t))}_trackOrderPlaced(e){const{orderPlaced:t}=this._getBraintreeEventsOrThrow();t(this._getOrderPlacedEventOptions(e))}_getEventCommonOptions(){var e,t;const n=this.checkoutService.getState(),i=n.data.getCart(),r=null===(e=n.data.getConfig())||void 0===e?void 0:e.storeProfile,o=null===(t=n.data.getCustomer())||void 0===t?void 0:t.isGuest,a=n.data.getPaymentMethod(\"braintreeacceleratedcheckout\"),s=[{treatment_group:!n.errors.getLoadPaymentMethodError(\"braintreeacceleratedcheckout\")&&(null==a?void 0:a.initializationData.shouldRunAcceleratedCheckout)?\"test\":\"control\"}];return{context_type:\"cs_id\",context_id:(null==i?void 0:i.id)||\"\",page_type:\"checkout_page\",page_name:window.document.title,partner_name:\"bigc\",user_type:o?\"store_guest\":\"store_member\",store_id:(null==r?void 0:r.storeId)||\"\",merchant_name:(null==r?void 0:r.storeName)||\"\",experiment:JSON.stringify(s)}}_getEmailSubmittedEventOptions(){const e=(this.checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{user_email_saved:!1,apm_shown:e.length>1?\"1\":\"0\",apm_list:e.join(\",\")})}_getApmSelectedEventOptions(e,t){const n=(this.checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{apm_shown:n.length>1?\"1\":\"0\",apm_list:n.join(\",\"),apm_selected:e,apm_location:t?\"pre-email section\":\"payment section\"})}_getOrderPlacedEventOptions(e){const t=this.checkoutService.getState().data.getCart();return Object.assign(Object.assign({},this._getEventCommonOptions()),{selected_payment_method:e,currency_code:(null==t?void 0:t.currency.code)||\"\"})}}function cC(e){return new sC(e)}class dC{constructor(e){this._checkoutService=e,this._selectedPaymentMethodId=\"\"}customerPaymentMethodExecuted(){this._shouldTrackFastlaneEvent()&&this._trackEmailSubmitted()}paymentComplete(){this._shouldTrackFastlaneEvent()&&this._trackOrderPlaced(this._selectedPaymentMethodId)}selectedPaymentMethod(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!1))}walletButtonClick(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!0))}_shouldTrackFastlaneEvent(){const e=this._checkoutService.getState().data.getPaymentMethod(\"paypalcommerce\"),t=((null==e?void 0:e.initializationData)||{}).isPayPalCommerceAnalyticsV2Enabled,n=window,i=!!n.paypalFastlane&&!!n.paypalFastlane.events;return t&&i}_getPayPalEventsOrThrow(){const e=window;if(e.paypalFastlane&&e.paypalFastlane.events)return e.paypalFastlane.events;throw new Qt}_trackEmailSubmitted(){const{emailSubmitted:e}=this._getPayPalEventsOrThrow();e(this._getEmailSubmittedEventOptions())}_trackApmSelected(e,t){const{apmSelected:n}=this._getPayPalEventsOrThrow();n(this._getApmSelectedEventOptions(e,t))}_trackOrderPlaced(e){const{orderPlaced:t}=this._getPayPalEventsOrThrow();t(this._getOrderPlacedEventOptions(e))}_getEventCommonOptions(){var e,t;const n=this._checkoutService.getState(),i=n.data.getCart(),r=null===(e=n.data.getConfig())||void 0===e?void 0:e.storeProfile,o=null===(t=n.data.getCustomer())||void 0===t?void 0:t.isGuest,a=\"paypalcommerceacceleratedcheckout\",s=n.data.getPaymentMethod(a),c=[{treatment_group:!n.errors.getLoadPaymentMethodError(a)&&(null==s?void 0:s.initializationData.shouldRunAcceleratedCheckout)?\"test\":\"control\"}];return{context_type:\"cs_id\",context_id:(null==i?void 0:i.id.replace(/-/g,\"\"))||\"\",page_type:\"checkout_page\",page_name:window.document.title,partner_name:\"bigc\",user_type:o?\"store_guest\":\"store_member\",store_id:(null==r?void 0:r.storeId)||\"\",merchant_name:(null==r?void 0:r.storeName)||\"\",experiment:JSON.stringify(c)}}_getEmailSubmittedEventOptions(){const e=(this._checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{user_email_saved:!1,apm_shown:e.length>1?\"1\":\"0\",apm_list:e.join(\",\")})}_getApmSelectedEventOptions(e,t){const n=(this._checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{apm_shown:n.length>1?\"1\":\"0\",apm_list:n.join(\",\"),apm_selected:e,apm_location:t?\"pre-email section\":\"payment section\"})}_getOrderPlacedEventOptions(e){const t=this._checkoutService.getState().data.getCart();return Object.assign(Object.assign({},this._getEventCommonOptions()),{selected_payment_method:e,currency_code:(null==t?void 0:t.currency.code)||\"\"})}}function uC(e){return new dC(e)}var lC;class hC{constructor(e,t){this._host=e,this._hostedFormFactory=t}submitStoredCard(e,t){return n=this,i=void 0,o=function*(){const n=this._hostedForm;if(!n)throw new $e(Ve.PaymentNotInitialized);yield n.validate().then(()=>n.submitStoredCard({fields:e,data:t}))},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}c((o=o.apply(n,i||[])).next())});var n,i,r,o}initialize(e){const t=this._hostedFormFactory.create(this._host,e);return t.attach().then(()=>{this._hostedForm=t})}deinitialize(){this._hostedForm&&this._hostedForm.detach()}}function pC(e){const t=v_();return new hC(e,new mm(t))}!function(e){e.CUSTOMER=\"customer\",e.SHIPPING=\"shipping\",e.BILLING=\"billing\",e.PAYMENT=\"payment\"}(lC||(lC={}));const mC=[lC.CUSTOMER,lC.SHIPPING,lC.BILLING,lC.PAYMENT];class yC{constructor(e,t){this.subscribe=e,this.bodlEvents=t,this._checkoutStarted=!1,this._emailEntryBegan=!1,this._shippingOptionsShown=!1,this._completedSteps={},this.subscribe(e=>{var t;if(this.setState(e.data),!(null===(t=this.state)||void 0===t?void 0:t.getConfig()))throw new k(C.MissingCheckoutConfig)})}setState(e){this.state=e}checkoutBegin(){const e=this._getCommonCheckoutData();!this._checkoutStarted&&e&&(this.bodlEvents.emitCheckoutBeginEvent(e),this._checkoutStarted=!0)}orderPurchased(){var e;const t=null===(e=this.state)||void 0===e?void 0:e.getOrder();if(!t)return;const{currency:n,isComplete:i,orderId:r,orderAmount:o,shippingCostTotal:a,lineItems:s,cartId:c,coupons:d,channelId:u,taxTotal:l}=t;i&&this.bodlEvents.emitOrderPurchasedEvent({event_id:c,currency:n.code,order_id:r,tax:l,channel_id:u,cart_value:o,coupon_codes:d.map(e=>e.code.toUpperCase()),shipping_cost:a,line_items:this._getProducts(s,n.code)})}stepCompleted(e){e&&mC.some(t=>(this._hasStepCompleted(t)||this._trackCompletedStep(t),t===e))}customerEmailEntry(e){!this._emailEntryBegan&&(null==e?void 0:e.length)&&(this._emailEntryBegan=!0,this.bodlEvents.emit(\"bodl_checkout_email_entry_began\"))}customerSuggestionInit(e){this.bodlEvents.emit(\"bodl_checkout_customer_suggestion_initialization\",e)}customerSuggestionExecute(){this.bodlEvents.emit(\"bodl_checkout_customer_suggestion_execute\")}customerPaymentMethodExecuted(e){this.bodlEvents.emit(\"bodl_checkout_customer_payment_method_executed\",e)}showShippingMethods(){this._shippingOptionsShown||(this._shippingOptionsShown=!0,this.bodlEvents.emit(\"bodl_checkout_show_shipping_options\"))}selectedPaymentMethod(e){const t=this._getCommonCheckoutData();t&&e&&this.bodlEvents.emitPaymentDetailsProvidedEvent(Object.assign(Object.assign({},t),{payment_type:e}))}clickPayButton(e){this.bodlEvents.emit(\"bodl_checkout_click_pay_button\",e)}paymentRejected(){this.bodlEvents.emit(\"bodl_checkout_payment_rejected\")}paymentComplete(){this.bodlEvents.emit(\"bodl_checkout_payment_complete\")}exitCheckout(){this.bodlEvents.emit(\"bodl_checkout_exit\")}_trackCompletedStep(e){this._completedSteps[e]=!0;const t={[lC.SHIPPING]:this._trackShippingStepCompleted.bind(this)}[e];t?t():this.bodlEvents.emit(\"bodl_checkout_step_completed\",{step:e})}_trackShippingStepCompleted(){var e,t;const n=null===(t=null===(e=this.state)||void 0===e?void 0:e.getSelectedShippingOption())||void 0===t?void 0:t.description,i=this._getCommonCheckoutData();i&&n&&this.bodlEvents.emitShippingDetailsProvidedEvent(Object.assign(Object.assign({},i),{shipping_method:n}))}_getCommonCheckoutData(){var e;const t=null===(e=this.state)||void 0===e?void 0:e.getCheckout();if(!t)return null;const{cart:{cartAmount:n,currency:i,lineItems:r,id:o,coupons:a},channelId:s}=t;return{event_id:o,currency:i.code,cart_value:n,coupon_codes:a.map(e=>e.code.toUpperCase()),line_items:this._getProducts(r,i.code),channel_id:s}}_getProducts(e,t){const n=(e.customItems||[]).map(e=>({product_id:e.id,sku:e.sku,base_price:e.listPrice,sale_price:e.listPrice,purchase_price:e.listPrice,quantity:e.quantity,product_name:e.name,currency:t})),i=e.giftCertificates.map(e=>({product_id:e.id,gift_certificate_id:e.id,base_price:e.amount,sale_price:e.amount,purchase_price:e.amount,product_name:e.name,gift_certificate_name:e.name,gift_certificate_theme:e.theme,quantity:1,currency:t}));return[...n,...[...e.physicalItems,...e.digitalItems].map(e=>{let n;return e.options&&e.options.length&&(n=e.options.map(e=>`${e.name}:${e.value}`),n.sort()),{product_id:e.productId,quantity:e.quantity,product_name:e.name,base_price:e.listPrice,sale_price:e.salePrice,purchase_price:e.salePrice>0?e.salePrice:e.listPrice,sku:e.sku,variant_id:e.variantId,discount:e.discountAmount,coupon_amount:e.couponAmount,brand_name:e.brand,currency:t,category_names:(i=e,Array.isArray(i.categoryNames)?i.categoryNames:Array.isArray(i.categories)?(0,P.flatten)(i.categories).map(({name:e})=>e):[]),retail_price:e.retailPrice};var i}),...i].map(e=>Object.assign(Object.assign({},e),{product_id:String(e.product_id)}))}_hasStepCompleted(e){return this._completedSteps[e]}}class fC{checkoutBegin(){}orderPurchased(){}stepCompleted(){}customerEmailEntry(){}customerSuggestionInit(){}customerSuggestionExecute(){}customerPaymentMethodExecuted(){}showShippingMethods(){}selectedPaymentMethod(){}clickPayButton(){}paymentRejected(){}paymentComplete(){}exitCheckout(){}}function gC(e){return function(e){return\"bodlEvents\"in e}(window)?new yC(e,window.bodlEvents.checkout):new fC}})(),module.exports=i})();\n//# sourceMappingURL=checkout-sdk.js.map"
  },
  {
    "path": "dist/cjs/checkout-sdk.js.LICENSE.txt",
    "content": "/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n"
  },
  {
    "path": "dist/cjs/embedded-checkout.js",
    "content": "/*! For license information please see embedded-checkout.js.LICENSE.txt */\n(()=>{var e={5889(e,t,n){\"use strict\";const r=n(803),o=n(1915),i=n(1657),s=n(3814);function a(e){if(\"string\"!=typeof e||1!==e.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}function u(e,t){return t.decode?o(e):e}function l(e){return Array.isArray(e)?e.sort():\"object\"==typeof e?l(Object.keys(e)).sort((e,t)=>Number(e)-Number(t)).map(t=>e[t]):e}function f(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function d(e){const t=(e=f(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function h(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&\"string\"==typeof e&&\"\"!==e.trim()?e=Number(e):!t.parseBooleans||null===e||\"true\"!==e.toLowerCase()&&\"false\"!==e.toLowerCase()||(e=\"true\"===e.toLowerCase()),e}function p(e,t){a((t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,n,r)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case\"bracket\":return(e,n,r)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case\"comma\":case\"separator\":return(t,n,r)=>{const o=\"string\"==typeof n&&n.includes(e.arrayFormatSeparator),i=\"string\"==typeof n&&!o&&u(n,e).includes(e.arrayFormatSeparator);n=i?u(n,e):n;const s=o||i?n.split(e.arrayFormatSeparator).map(t=>u(t,e)):null===n?n:u(n,e);r[t]=s};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),r=Object.create(null);if(\"string\"!=typeof e)return r;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return r;for(const o of e.split(\"&\")){if(\"\"===o)continue;let[e,s]=i(t.decode?o.replace(/\\+/g,\" \"):o,\"=\");s=void 0===s?null:[\"comma\",\"separator\"].includes(t.arrayFormat)?s:u(s,t),n(u(e,t),s,r)}for(const e of Object.keys(r)){const n=r[e];if(\"object\"==typeof n&&null!==n)for(const e of Object.keys(n))n[e]=h(n[e],t);else r[e]=h(n,t)}return!1===t.sort?r:(!0===t.sort?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((e,t)=>{const n=r[t];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?e[t]=l(n):e[t]=n,e},Object.create(null))}t.extract=d,t.parse=p,t.stringify=(e,t)=>{if(!e)return\"\";a((t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},t)).arrayFormatSeparator);const n=n=>t.skipNull&&null==e[n]||t.skipEmptyString&&\"\"===e[n],r=function(e){switch(e.arrayFormat){case\"index\":return t=>(n,r)=>{const o=n.length;return void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(t,e),\"[\",o,\"]\"].join(\"\")]:[...n,[c(t,e),\"[\",c(o,e),\"]=\",c(r,e)].join(\"\")]};case\"bracket\":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(t,e),\"[]\"].join(\"\")]:[...n,[c(t,e),\"[]=\",c(r,e)].join(\"\")];case\"comma\":case\"separator\":return t=>(n,r)=>null==r||0===r.length?n:0===n.length?[[c(t,e),\"=\",c(r,e)].join(\"\")]:[[n,c(r,e)].join(e.arrayFormatSeparator)];default:return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,c(t,e)]:[...n,[c(t,e),\"=\",c(r,e)].join(\"\")]}}(t),o={};for(const t of Object.keys(e))n(t)||(o[t]=e[t]);const i=Object.keys(o);return!1!==t.sort&&i.sort(t.sort),i.map(n=>{const o=e[n];return void 0===o?\"\":null===o?c(n,t):Array.isArray(o)?o.reduce(r(n),[]).join(\"&\"):c(n,t)+\"=\"+c(o,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,r]=i(e,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:p(d(e),t)},t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:u(r,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=f(e.url).split(\"?\")[0]||\"\",o=t.extract(e.url),i=t.parse(o,{sort:!1}),s=Object.assign(i,e.query);let a=t.stringify(s,n);a&&(a=`?${a}`);let u=function(e){let t=\"\";const n=e.indexOf(\"#\");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(u=`#${c(e.fragmentIdentifier,n)}`),`${r}${a}${u}`},t.pick=(e,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:o,query:i,fragmentIdentifier:a}=t.parseUrl(e,r);return t.stringifyUrl({url:o,query:s(i,n),fragmentIdentifier:a},r)},t.exclude=(e,n,r)=>{const o=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,o,r)}},3658(e,t){\"use strict\";t.parse=function(e,t){if(\"string\"!=typeof e)throw new TypeError(\"argument str must be a string\");var n={},o=e.length;if(o<2)return n;var i=t&&t.decode||l,s=0,a=0,d=0;do{if(-1===(a=e.indexOf(\"=\",s)))break;if(-1===(d=e.indexOf(\";\",s)))d=o;else if(a>d){s=e.lastIndexOf(\";\",a-1)+1;continue}var h=c(e,s,a),p=u(e,a,h),m=e.slice(h,p);if(!r.call(n,m)){var y=c(e,a+1,d),g=u(e,d,y);34===e.charCodeAt(y)&&34===e.charCodeAt(g-1)&&(y++,g--);var b=e.slice(y,g);n[m]=f(b,i)}s=d+1}while(s<o);return n},t.serialize=function(e,t,r){var c=r&&r.encode||encodeURIComponent;if(\"function\"!=typeof c)throw new TypeError(\"option encode is invalid\");if(!o.test(e))throw new TypeError(\"argument name is invalid\");var u=c(t);if(!i.test(u))throw new TypeError(\"argument val is invalid\");var l=e+\"=\"+u;if(!r)return l;if(null!=r.maxAge){var f=Math.floor(r.maxAge);if(!isFinite(f))throw new TypeError(\"option maxAge is invalid\");l+=\"; Max-Age=\"+f}if(r.domain){if(!s.test(r.domain))throw new TypeError(\"option domain is invalid\");l+=\"; Domain=\"+r.domain}if(r.path){if(!a.test(r.path))throw new TypeError(\"option path is invalid\");l+=\"; Path=\"+r.path}if(r.expires){var d=r.expires;if(!function(e){return\"[object Date]\"===n.call(e)}(d)||isNaN(d.valueOf()))throw new TypeError(\"option expires is invalid\");l+=\"; Expires=\"+d.toUTCString()}if(r.httpOnly&&(l+=\"; HttpOnly\"),r.secure&&(l+=\"; Secure\"),r.partitioned&&(l+=\"; Partitioned\"),r.priority)switch(\"string\"==typeof r.priority?r.priority.toLowerCase():r.priority){case\"low\":l+=\"; Priority=Low\";break;case\"medium\":l+=\"; Priority=Medium\";break;case\"high\":l+=\"; Priority=High\";break;default:throw new TypeError(\"option priority is invalid\")}if(r.sameSite)switch(\"string\"==typeof r.sameSite?r.sameSite.toLowerCase():r.sameSite){case!0:l+=\"; SameSite=Strict\";break;case\"lax\":l+=\"; SameSite=Lax\";break;case\"strict\":l+=\"; SameSite=Strict\";break;case\"none\":l+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}return l};var n=Object.prototype.toString,r=Object.prototype.hasOwnProperty,o=/^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/,i=/^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/,s=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,a=/^[\\u0020-\\u003A\\u003D-\\u007E]*$/;function c(e,t,n){do{var r=e.charCodeAt(t);if(32!==r&&9!==r)return t}while(++t<n);return n}function u(e,t,n){for(;t>n;){var r=e.charCodeAt(--t);if(32!==r&&9!==r)return t+1}return n}function l(e){return-1!==e.indexOf(\"%\")?decodeURIComponent(e):e}function f(e,t){try{return t(e)}catch(t){return e}}},1915(e){\"use strict\";var t=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+t+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+t+\")+\",\"gi\");function o(e,t){try{return[decodeURIComponent(e.join(\"\"))]}catch(e){}if(1===e.length)return e;t=t||1;var n=e.slice(0,t),r=e.slice(t);return Array.prototype.concat.call([],o(n),o(r))}function i(e){try{return decodeURIComponent(e)}catch(i){for(var t=e.match(n)||[],r=1;r<t.length;r++)t=(e=o(t,r).join(\"\")).match(n)||[];return e}}e.exports=function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof e+\"`\");try{return e=e.replace(/\\+/g,\" \"),decodeURIComponent(e)}catch(t){return function(e){for(var t={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(e);n;){try{t[n[0]]=decodeURIComponent(n[0])}catch(e){var o=i(n[0]);o!==n[0]&&(t[n[0]]=o)}n=r.exec(e)}t[\"%C2\"]=\"�\";for(var s=Object.keys(t),a=0;a<s.length;a++){var c=s[a];e=e.replace(new RegExp(c,\"g\"),t[c])}return e}(e)}}},3814(e){\"use strict\";e.exports=function(e,t){for(var n={},r=Object.keys(e),o=Array.isArray(t),i=0;i<r.length;i++){var s=r[i],a=e[s];(o?-1!==t.indexOf(s):t(s,a,e))&&(n[s]=a)}return n}},3347(e,t,n){\"use strict\";e.exports=n(344)},5990(e){!function(t){\"use strict\";if(\"undefined\"!=typeof window){var n=!0,r=\"\",o=0,i=\"\",s=null,a=\"\",c=!1,u={resize:1,click:1},l=128,f=!0,d=1,h=\"bodyOffset\",p=h,m=!0,y=\"\",g={},b=32,v=null,w=!1,_=\"[iFrameSizer]\",O=\"\",E={max:1,min:1,bodyScroll:1,documentElementScroll:1},S=\"child\",k=!0,x=window.parent,T=\"*\",j=0,C=!1,I=null,R=16,A=1,M=\"scroll\",F=M,L=window,P=function(){se(\"MessageCallback function not defined\")},z=function(){},N=function(){},U={height:function(){return se(\"Custom height calculation function not defined\"),document.documentElement.offsetHeight},width:function(){return se(\"Custom width calculation function not defined\"),document.body.scrollWidth}},q={},H=!1;try{var D=Object.create({},{passive:{get:function(){H=!0}},once:{get:function(){}}});window.addEventListener(\"test\",ee,D),window.removeEventListener(\"test\",ee,D)}catch(e){}var $,B,W,V,J,K,Y,G=Date.now||function(){return(new Date).getTime()},X={bodyOffset:function(){return document.body.offsetHeight+ge(\"marginTop\")+ge(\"marginBottom\")},offset:function(){return X.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return U.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,ve(X))},min:function(){return Math.min.apply(null,ve(X))},grow:function(){return X.max()},lowestElement:function(){return Math.max(X.bodyOffset()||X.documentElementOffset(),be(\"bottom\",_e()))},taggedElement:function(){return we(\"bottom\",\"data-iframe-height\")}},Q={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return U.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(Q.bodyScroll(),Q.documentElementScroll())},max:function(){return Math.max.apply(null,ve(Q))},min:function(){return Math.min.apply(null,ve(Q))},rightMostElement:function(){return be(\"right\",_e())},taggedElement:function(){return we(\"right\",\"data-iframe-width\")}},Z=($=Oe,J=null,K=0,Y=function(){K=G(),J=null,V=$.apply(B,W),J||(B=W=null)},function(){var e=G();K||(K=e);var t=R-(e-K);return B=this,W=arguments,t<=0||t>R?(J&&(clearTimeout(J),J=null),K=e,V=$.apply(B,W),J||(B=W=null)):J||(J=setTimeout(Y,t)),V});te(window,\"message\",je),te(window,\"readystatechange\",Ce),Ce()}function ee(){}function te(e,t,n,r){\"addEventListener\"in window?e.addEventListener(t,n,!!H&&(r||{})):\"attachEvent\"in window&&e.attachEvent(\"on\"+t,n)}function ne(e,t,n){\"removeEventListener\"in window?e.removeEventListener(t,n,!1):\"detachEvent\"in window&&e.detachEvent(\"on\"+t,n)}function re(e){return e.charAt(0).toUpperCase()+e.slice(1)}function oe(e){return _+\"[\"+O+\"] \"+e}function ie(e){w&&\"object\"==typeof window.console&&console.log(oe(e))}function se(e){\"object\"==typeof window.console&&console.warn(oe(e))}function ae(){var e,s;!function(){function e(e){return\"true\"===e}var s=y.substr(13).split(\":\");O=s[0],o=t!==s[1]?Number(s[1]):o,c=t!==s[2]?e(s[2]):c,w=t!==s[3]?e(s[3]):w,b=t!==s[4]?Number(s[4]):b,n=t!==s[6]?e(s[6]):n,i=s[7],p=t!==s[8]?s[8]:p,r=s[9],a=s[10],j=t!==s[11]?Number(s[11]):j,g.enable=t!==s[12]&&e(s[12]),S=t!==s[13]?s[13]:S,F=t!==s[14]?s[14]:F}(),ie(\"Initialising iFrame (\"+location.href+\")\"),function(){function e(e,t){return\"function\"==typeof e&&(ie(\"Setup custom \"+t+\"CalcMethod\"),U[t]=e,e=\"custom\"),e}var t;\"iFrameResizer\"in window&&Object===window.iFrameResizer.constructor&&(t=window.iFrameResizer,ie(\"Reading data from page: \"+JSON.stringify(t)),P=\"messageCallback\"in t?t.messageCallback:P,z=\"readyCallback\"in t?t.readyCallback:z,T=\"targetOrigin\"in t?t.targetOrigin:T,p=\"heightCalculationMethod\"in t?t.heightCalculationMethod:p,F=\"widthCalculationMethod\"in t?t.widthCalculationMethod:F,p=e(p,\"height\"),F=e(F,\"width\")),ie(\"TargetOrigin for parent set to: \"+T)}(),t===i&&(i=o+\"px\"),ce(\"margin\",(-1!==(s=i).indexOf(\"-\")&&(se(\"Negative CSS value ignored for margin\"),s=\"\"),s)),ce(\"background\",r),ce(\"padding\",a),(e=document.createElement(\"div\")).style.clear=\"both\",e.style.display=\"block\",document.body.appendChild(e),de(),he(),document.documentElement.style.height=\"\",document.body.style.height=\"\",ie('HTML & body height set to \"auto\"'),ie(\"Enable public methods\"),L.parentIFrame={autoResize:function(e){return!0===e&&!1===n?(n=!0,pe()):!1===e&&!0===n&&(n=!1,me()),n},close:function(){Te(0,0,\"close\"),ie(\"Disable outgoing messages\"),k=!1,ie(\"Remove event listener: Message\"),ne(window,\"message\",je),!0===n&&me()},getId:function(){return O},getPageInfo:function(e){\"function\"==typeof e?(N=e,Te(0,0,\"pageInfo\")):(N=function(){},Te(0,0,\"pageInfoStop\"))},moveToAnchor:function(e){g.findTarget(e)},reset:function(){xe(\"parentIFrame.reset\")},scrollTo:function(e,t){Te(t,e,\"scrollTo\")},scrollToOffset:function(e,t){Te(t,e,\"scrollToOffset\")},sendMessage:function(e,t){Te(0,0,\"message\",JSON.stringify(e),t)},setHeightCalculationMethod:function(e){p=e,de()},setWidthCalculationMethod:function(e){F=e,he()},setTargetOrigin:function(e){ie(\"Set targetOrigin: \"+e),T=e},size:function(e,t){Ee(\"size\",\"parentIFrame.size(\"+(e||\"\")+(t?\",\"+t:\"\")+\")\",e,t)}},pe(),g=function(){function e(e){var n=e.getBoundingClientRect(),r={x:window.pageXOffset!==t?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==t?window.pageYOffset:document.documentElement.scrollTop};return{x:parseInt(n.left,10)+parseInt(r.x,10),y:parseInt(n.top,10)+parseInt(r.y,10)}}function n(n){var r=n.split(\"#\")[1]||n,o=decodeURIComponent(r),i=document.getElementById(o)||document.getElementsByName(o)[0];t!==i?function(t){var n=e(t);ie(\"Moving to in page link (#\"+r+\") at x: \"+n.x+\" y: \"+n.y),Te(n.y,n.x,\"scrollToOffset\")}(i):(ie(\"In page link (#\"+r+\") not found in iFrame, so sending to parent\"),Te(0,0,\"inPageLink\",\"#\"+r))}function r(){\"\"!==location.hash&&\"#\"!==location.hash&&n(location.href)}return g.enable?Array.prototype.forEach&&document.querySelectorAll?(ie(\"Setting up location.hash handlers\"),Array.prototype.forEach.call(document.querySelectorAll('a[href^=\"#\"]'),function(e){\"#\"!==e.getAttribute(\"href\")&&te(e,\"click\",function(e){e.preventDefault(),n(this.getAttribute(\"href\"))})}),te(window,\"hashchange\",r),setTimeout(r,l)):se(\"In page linking not fully supported in this browser! (See README.md for IE8 workaround)\"):ie(\"In page linking not enabled\"),{findTarget:n}}(),Ee(\"init\",\"Init message from host page\"),z()}function ce(e,n){t!==n&&\"\"!==n&&\"null\"!==n&&(document.body.style[e]=n,ie(\"Body \"+e+' set to \"'+n+'\"'))}function ue(e){var t={add:function(t){function n(){Ee(e.eventName,e.eventType)}q[t]=n,te(window,t,n,{passive:!0})},remove:function(e){var t=q[e];delete q[e],ne(window,e,t)}};e.eventNames&&Array.prototype.map?(e.eventName=e.eventNames[0],e.eventNames.map(t[e.method])):t[e.method](e.eventName),ie(re(e.method)+\" event listener: \"+e.eventType)}function le(e){ue({method:e,eventType:\"Animation Start\",eventNames:[\"animationstart\",\"webkitAnimationStart\"]}),ue({method:e,eventType:\"Animation Iteration\",eventNames:[\"animationiteration\",\"webkitAnimationIteration\"]}),ue({method:e,eventType:\"Animation End\",eventNames:[\"animationend\",\"webkitAnimationEnd\"]}),ue({method:e,eventType:\"Input\",eventName:\"input\"}),ue({method:e,eventType:\"Mouse Up\",eventName:\"mouseup\"}),ue({method:e,eventType:\"Mouse Down\",eventName:\"mousedown\"}),ue({method:e,eventType:\"Orientation Change\",eventName:\"orientationchange\"}),ue({method:e,eventType:\"Print\",eventName:[\"afterprint\",\"beforeprint\"]}),ue({method:e,eventType:\"Ready State Change\",eventName:\"readystatechange\"}),ue({method:e,eventType:\"Touch Start\",eventName:\"touchstart\"}),ue({method:e,eventType:\"Touch End\",eventName:\"touchend\"}),ue({method:e,eventType:\"Touch Cancel\",eventName:\"touchcancel\"}),ue({method:e,eventType:\"Transition Start\",eventNames:[\"transitionstart\",\"webkitTransitionStart\",\"MSTransitionStart\",\"oTransitionStart\",\"otransitionstart\"]}),ue({method:e,eventType:\"Transition Iteration\",eventNames:[\"transitioniteration\",\"webkitTransitionIteration\",\"MSTransitionIteration\",\"oTransitionIteration\",\"otransitioniteration\"]}),ue({method:e,eventType:\"Transition End\",eventNames:[\"transitionend\",\"webkitTransitionEnd\",\"MSTransitionEnd\",\"oTransitionEnd\",\"otransitionend\"]}),\"child\"===S&&ue({method:e,eventType:\"IFrame Resized\",eventName:\"resize\"})}function fe(e,t,n,r){return t!==e&&(e in n||(se(e+\" is not a valid option for \"+r+\"CalculationMethod.\"),e=t),ie(r+' calculation method set to \"'+e+'\"')),e}function de(){p=fe(p,h,X,\"height\")}function he(){F=fe(F,M,Q,\"width\")}function pe(){var e;!0===n?(le(\"add\"),e=0>b,window.MutationObserver||window.WebKitMutationObserver?e?ye():s=function(){function e(e){function t(e){!1===e.complete&&(ie(\"Attach listeners to \"+e.src),e.addEventListener(\"load\",o,!1),e.addEventListener(\"error\",i,!1),a.push(e))}\"attributes\"===e.type&&\"src\"===e.attributeName?t(e.target):\"childList\"===e.type&&Array.prototype.forEach.call(e.target.querySelectorAll(\"img\"),t)}function n(e){ie(\"Remove listeners from \"+e.src),e.removeEventListener(\"load\",o,!1),e.removeEventListener(\"error\",i,!1),function(e){a.splice(a.indexOf(e),1)}(e)}function r(e,r,o){n(e.target),Ee(r,o+\": \"+e.target.src,t,t)}function o(e){r(e,\"imageLoad\",\"Image loaded\")}function i(e){r(e,\"imageLoadFailed\",\"Image load failed\")}function s(t){Ee(\"mutationObserver\",\"mutationObserver: \"+t[0].target+\" \"+t[0].type),t.forEach(e)}var a=[],c=window.MutationObserver||window.WebKitMutationObserver,u=function(){var e=document.querySelector(\"body\");return u=new c(s),ie(\"Create body MutationObserver\"),u.observe(e,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}),u}();return{disconnect:function(){\"disconnect\"in u&&(ie(\"Disconnect body MutationObserver\"),u.disconnect(),a.forEach(n))}}}():(ie(\"MutationObserver not supported in this browser!\"),ye())):ie(\"Auto Resize disabled\")}function me(){le(\"remove\"),null!==s&&s.disconnect(),clearInterval(v)}function ye(){0!==b&&(ie(\"setInterval: \"+b+\"ms\"),v=setInterval(function(){Ee(\"interval\",\"setInterval: \"+b)},Math.abs(b)))}function ge(e,t){var n=0;return t=t||document.body,n=\"defaultView\"in document&&\"getComputedStyle\"in document.defaultView?null!==(n=document.defaultView.getComputedStyle(t,null))?n[e]:0:function(e){if(/^\\d+(px)?$/i.test(e))return parseInt(e,10);var n=t.style.left,r=t.runtimeStyle.left;return t.runtimeStyle.left=t.currentStyle.left,t.style.left=e||0,e=t.style.pixelLeft,t.style.left=n,t.runtimeStyle.left=r,e}(t.currentStyle[e]),parseInt(n,10)}function be(e,t){for(var n=t.length,r=0,o=0,i=re(e),s=G(),a=0;a<n;a++)(r=t[a].getBoundingClientRect()[e]+ge(\"margin\"+i,t[a]))>o&&(o=r);return s=G()-s,ie(\"Parsed \"+n+\" HTML elements\"),ie(\"Element position calculated in \"+s+\"ms\"),function(e){e>R/2&&ie(\"Event throttle increased to \"+(R=2*e)+\"ms\")}(s),o}function ve(e){return[e.bodyOffset(),e.bodyScroll(),e.documentElementOffset(),e.documentElementScroll()]}function we(e,t){var n=document.querySelectorAll(\"[\"+t+\"]\");return 0===n.length&&(se(\"No tagged elements (\"+t+\") found on page\"),document.querySelectorAll(\"body *\")),be(e,n)}function _e(){return document.querySelectorAll(\"body *\")}function Oe(e,n,r,o){var i,s;!function(){function e(e,t){return!(Math.abs(e-t)<=j)}return i=t!==r?r:X[p](),s=t!==o?o:Q[F](),e(d,i)||c&&e(A,s)}()&&\"init\"!==e?!(e in{init:1,interval:1,size:1})&&(p in E||c&&F in E)?xe(n):e in{interval:1}||ie(\"No change in size detected\"):(Se(),Te(d=i,A=s,e))}function Ee(e,t,n,r){C&&e in u?ie(\"Trigger event cancelled: \"+e):(e in{reset:1,resetPage:1,init:1}||ie(\"Trigger event: \"+t),\"init\"===e?Oe(e,t,n,r):Z(e,t,n,r))}function Se(){C||(C=!0,ie(\"Trigger event lock on\")),clearTimeout(I),I=setTimeout(function(){C=!1,ie(\"Trigger event lock off\"),ie(\"--\")},l)}function ke(e){d=X[p](),A=Q[F](),Te(d,A,e)}function xe(e){var t=p;p=h,ie(\"Reset trigger event: \"+e),Se(),ke(\"reset\"),p=t}function Te(e,n,r,o,i){var s;!0===k&&(t===i?i=T:ie(\"Message targetOrigin: \"+i),ie(\"Sending message to host page (\"+(s=O+\":\"+e+\":\"+n+\":\"+r+(t!==o?\":\"+o:\"\"))+\")\"),x.postMessage(_+s,i))}function je(t){var n,r={init:function(){y=t.data,x=t.source,ae(),f=!1,setTimeout(function(){m=!1},l)},reset:function(){m?ie(\"Page reset ignored by init\"):(ie(\"Page size reset by host page\"),ke(\"resetPage\"))},resize:function(){Ee(\"resizeParent\",\"Parent window requested size check\")},moveToAnchor:function(){g.findTarget(i())},inPageLink:function(){this.moveToAnchor()},pageInfo:function(){var e=i();ie(\"PageInfoFromParent called from parent: \"+e),N(JSON.parse(e)),ie(\" --\")},message:function(){var e=i();ie(\"MessageCallback called from parent: \"+e),P(JSON.parse(e)),ie(\" --\")}};function o(){return t.data.split(\"]\")[1].split(\":\")[0]}function i(){return t.data.substr(t.data.indexOf(\":\")+1)}function s(){return t.data.split(\":\")[2]in{true:1,false:1}}_===(\"\"+t.data).substr(0,13)&&(!1===f?(n=o())in r?r[n]():!e.exports&&\"iFrameResize\"in window||\"jQuery\"in window&&\"iFrameResize\"in window.jQuery.prototype||s()||se(\"Unexpected message (\"+t.data+\")\"):s()?r.init():ie('Ignored message of type \"'+o()+'\". Received before initialization.'))}function Ce(){\"loading\"!==document.readyState&&window.parent.postMessage(\"[iFrameResizerChild]Ready\",\"*\")}}()},7521(e){!function(t){\"use strict\";if(\"undefined\"!=typeof window){var n,r=0,o=!1,i=!1,s=\"[iFrameSizer]\",a=null,c=window.requestAnimationFrame,u={max:1,scroll:1,bodyScroll:1,documentElementScroll:1},l={},f=null,d={autoResize:!0,bodyBackground:null,bodyMargin:null,bodyMarginV1:8,bodyPadding:null,checkOrigin:!0,inPageLinks:!1,enablePublicMethods:!0,heightCalculationMethod:\"bodyOffset\",id:\"iFrameResizer\",interval:32,log:!1,maxHeight:1/0,maxWidth:1/0,minHeight:0,minWidth:0,resizeFrom:\"parent\",scrolling:!1,sizeHeight:!0,sizeWidth:!1,warningTimeout:5e3,tolerance:0,widthCalculationMethod:\"scroll\",closedCallback:function(){},initCallback:function(){},messageCallback:function(){w(\"MessageCallback function not defined\")},resizedCallback:function(){},scrollCallback:function(){return!0}},h={};window.jQuery&&((n=window.jQuery).fn?n.fn.iFrameResize||(n.fn.iFrameResize=function(e){return this.filter(\"iframe\").each(function(t,n){F(n,e)}).end()}):v(\"\",\"Unable to bind to jQuery, it is not fully loaded.\")),\"function\"==typeof define&&define.amd?define([],U):\"object\"==typeof e.exports&&(e.exports=U()),window.iFrameResize=window.iFrameResize||U()}function p(){return window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver}function m(e,t,n){\"addEventListener\"in window?e.addEventListener(t,n,!1):\"attachEvent\"in window&&e.attachEvent(\"on\"+t,n)}function y(e,t,n){\"removeEventListener\"in window?e.removeEventListener(t,n,!1):\"detachEvent\"in window&&e.detachEvent(\"on\"+t,n)}function g(e){return l[e]?l[e].log:o}function b(e,t){_(\"log\",e,t,g(e))}function v(e,t){_(\"info\",e,t,g(e))}function w(e,t){_(\"warn\",e,t,!0)}function _(e,t,n,r){!0===r&&\"object\"==typeof window.console&&console[e](function(e){return s+\"[\"+function(e){var t=\"Host page: \"+e;return window.top!==window.self&&(t=window.parentIFrame&&window.parentIFrame.getId?window.parentIFrame.getId()+\": \"+e:\"Nested host page: \"+e),t}(e)+\"]\"}(t),n)}function O(e){function t(){n(\"Height\"),n(\"Width\"),R(function(){I(O),T(S),f(\"resizedCallback\",O)},O,\"init\")}function n(e){var t=Number(l[S][\"max\"+e]),n=Number(l[S][\"min\"+e]),r=e.toLowerCase(),o=Number(O[r]);b(S,\"Checking \"+r+\" is in range \"+n+\"-\"+t),o<n&&(o=n,b(S,\"Set \"+r+\" to min value\")),o>t&&(o=t,b(S,\"Set \"+r+\" to max value\")),O[r]=\"\"+o}function r(e){return _.substr(_.indexOf(\":\")+7+e)}function o(e,t){var n,r;n=function(){var n,r;A(\"Send Page Info\",\"pageInfo:\"+(n=document.body.getBoundingClientRect(),r=O.iframe.getBoundingClientRect(),JSON.stringify({iframeHeight:r.height,iframeWidth:r.width,clientHeight:Math.max(document.documentElement.clientHeight,window.innerHeight||0),clientWidth:Math.max(document.documentElement.clientWidth,window.innerWidth||0),offsetTop:parseInt(r.top-n.top,10),offsetLeft:parseInt(r.left-n.left,10),scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset})),e,t)},h[r=t]||(h[r]=setTimeout(function(){h[r]=null,n()},32))}function i(e){var t=e.getBoundingClientRect();return x(S),{x:Math.floor(Number(t.left)+Number(a.x)),y:Math.floor(Number(t.top)+Number(a.y))}}function c(e){var t=e?i(O.iframe):{x:0,y:0},n={x:Number(O.width)+t.x,y:Number(O.height)+t.y};b(S,\"Reposition requested from iFrame (offset x:\"+t.x+\" y:\"+t.y+\")\"),window.top!==window.self?window.parentIFrame?window.parentIFrame[\"scrollTo\"+(e?\"Offset\":\"\")](n.x,n.y):w(S,\"Unable to scroll to requested position, window.parentIFrame not found\"):(a=n,u(),b(S,\"--\"))}function u(){!1!==f(\"scrollCallback\",a)?T(S):j()}function f(e,t){return E(S,e,t)}var d,p,g,_=e.data,O={},S=null;\"[iFrameResizerChild]Ready\"===_?function(){for(var e in l)A(\"iFrame requested init\",M(e),document.getElementById(e),e)}():s===(\"\"+_).substr(0,13)&&_.substr(13).split(\":\")[0]in l?(g=_.substr(13).split(\":\"),O={iframe:l[g[0]]&&l[g[0]].iframe,id:g[0],height:g[1],width:g[2],type:g[3]},S=O.id,l[S]&&(l[S].loaded=!0),(p=O.type in{true:1,false:1,undefined:1})&&b(S,\"Ignoring init message from meta parent page\"),!p&&function(e){var t=!0;return l[e]||(t=!1,w(O.type+\" No settings for \"+e+\". Message was: \"+_)),t}(S)&&(b(S,\"Received: \"+_),d=!0,null===O.iframe&&(w(S,\"IFrame (\"+O.id+\") not found\"),d=!1),d&&function(){var t,n=e.origin,r=l[S]&&l[S].checkOrigin;if(r&&\"\"+n!=\"null\"&&!(r.constructor===Array?function(){var e=0,t=!1;for(b(S,\"Checking connection is from allowed list of origins: \"+r);e<r.length;e++)if(r[e]===n){t=!0;break}return t}():(t=l[S]&&l[S].remoteHost,b(S,\"Checking connection is from: \"+t),n===t)))throw new Error(\"Unexpected message received from: \"+n+\" for \"+O.iframe.id+\". Message was: \"+e.data+\". This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.\");return!0}()&&function(){switch(l[S]&&l[S].firstRun&&l[S]&&(l[S].firstRun=!1),O.type){case\"close\":l[S].closeRequestCallback?E(S,\"closeRequestCallback\",l[S].iframe):k(O.iframe);break;case\"message\":e=r(6),b(S,\"MessageCallback passed: {iframe: \"+O.iframe.id+\", message: \"+e+\"}\"),f(\"messageCallback\",{iframe:O.iframe,message:JSON.parse(e)}),b(S,\"--\");break;case\"scrollTo\":c(!1);break;case\"scrollToOffset\":c(!0);break;case\"pageInfo\":o(l[S]&&l[S].iframe,S),function(){function e(e,r){function i(){l[n]?o(l[n].iframe,n):t()}[\"scroll\",\"resize\"].forEach(function(t){b(n,e+t+\" listener for sendPageInfo\"),r(window,t,i)})}function t(){e(\"Remove \",y)}var n=S;e(\"Add \",m),l[n]&&(l[n].stopPageInfo=t)}();break;case\"pageInfoStop\":l[S]&&l[S].stopPageInfo&&(l[S].stopPageInfo(),delete l[S].stopPageInfo);break;case\"inPageLink\":!function(e){var t,n=e.split(\"#\")[1]||\"\",r=decodeURIComponent(n),o=document.getElementById(r)||document.getElementsByName(r)[0];o?(t=i(o),b(S,\"Moving to in page link (#\"+n+\") at x: \"+t.x+\" y: \"+t.y),a={x:t.x,y:t.y},u(),b(S,\"--\")):window.top!==window.self?window.parentIFrame?window.parentIFrame.moveToAnchor(n):b(S,\"In page link #\"+n+\" not found and window.parentIFrame not found\"):b(S,\"In page link #\"+n+\" not found\")}(r(9));break;case\"reset\":C(O);break;case\"init\":t(),f(\"initCallback\",O.iframe);break;default:t()}var e}())):v(S,\"Ignored: \"+_)}function E(e,t,n){var r=null,o=null;if(l[e]){if(\"function\"!=typeof(r=l[e][t]))throw new TypeError(t+\" on iFrame[\"+e+\"] is not a function\");o=r(n)}return o}function S(e){var t=e.id;delete l[t]}function k(e){var t=e.id;b(t,\"Removing iFrame: \"+t);try{e.parentNode&&e.parentNode.removeChild(e)}catch(e){}E(t,\"closedCallback\",t),b(t,\"--\"),S(e)}function x(e){null===a&&b(e,\"Get page position: \"+(a={x:window.pageXOffset!==t?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==t?window.pageYOffset:document.documentElement.scrollTop}).x+\",\"+a.y)}function T(e){null!==a&&(window.scrollTo(a.x,a.y),b(e,\"Set page position: \"+a.x+\",\"+a.y),j())}function j(){a=null}function C(e){b(e.id,\"Size reset requested by \"+(\"init\"===e.type?\"host page\":\"iFrame\")),x(e.id),R(function(){I(e),A(\"reset\",\"reset\",e.iframe,e.id)},e,\"reset\")}function I(e){function t(t){!function(t){e.id?(e.iframe.style[t]=e[t]+\"px\",b(e.id,\"IFrame (\"+n+\") \"+t+\" set to \"+e[t]+\"px\")):b(\"undefined\",\"messageData id not set\")}(t),function(t){i||\"0\"!==e[t]||(i=!0,b(n,\"Hidden iFrame detected, creating visibility listener\"),function(){function e(){function e(e){function t(t){return\"0px\"===(l[e]&&l[e].iframe.style[t])}l[e]&&null!==l[e].iframe.offsetParent&&(t(\"height\")||t(\"width\"))&&A(\"Visibility change\",\"resize\",l[e].iframe,e)}for(var t in l)e(t)}function t(t){b(\"window\",\"Mutation observed: \"+t[0].target+\" \"+t[0].type),L(e,16)}var n,r=p();r&&(n=document.querySelector(\"body\"),new r(t).observe(n,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}))}())}(t)}var n=e.iframe.id;l[n]&&(l[n].sizeHeight&&t(\"height\"),l[n].sizeWidth&&t(\"width\"))}function R(e,t,n){n!==t.type&&c?(b(t.id,\"Requesting animation frame\"),c(e)):e()}function A(e,t,n,r,o){var i,a=!1;r=r||n.id,l[r]&&(n&&\"contentWindow\"in n&&null!==n.contentWindow?(i=l[r]&&l[r].targetOrigin,b(r,\"[\"+e+\"] Sending msg to iframe[\"+r+\"] (\"+t+\") targetOrigin: \"+i),n.contentWindow.postMessage(s+t,i)):w(r,\"[\"+e+\"] IFrame(\"+r+\") not found\"),o&&l[r]&&l[r].warningTimeout&&(l[r].msgTimeout=setTimeout(function(){!l[r]||l[r].loaded||a||(a=!0,w(r,\"IFrame has not responded within \"+l[r].warningTimeout/1e3+\" seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.\"))},l[r].warningTimeout)))}function M(e){return e+\":\"+l[e].bodyMarginV1+\":\"+l[e].sizeWidth+\":\"+l[e].log+\":\"+l[e].interval+\":\"+l[e].enablePublicMethods+\":\"+l[e].autoResize+\":\"+l[e].bodyMargin+\":\"+l[e].heightCalculationMethod+\":\"+l[e].bodyBackground+\":\"+l[e].bodyPadding+\":\"+l[e].tolerance+\":\"+l[e].inPageLinks+\":\"+l[e].resizeFrom+\":\"+l[e].widthCalculationMethod}function F(e,n){var i,s,a=function(t){var i;return\"\"===t&&(e.id=(i=n&&n.id||d.id+r++,null!==document.getElementById(i)&&(i+=r++),t=i),o=(n||{}).log,b(t,\"Added missing iframe ID: \"+t+\" (\"+e.src+\")\")),t}(e.id);a in l&&\"iFrameResizer\"in e?w(a,\"Ignored iFrame, already setup.\"):(function(t){var n;t=t||{},l[a]={firstRun:!0,iframe:e,remoteHost:e.src.split(\"/\").slice(0,3).join(\"/\")},function(e){if(\"object\"!=typeof e)throw new TypeError(\"Options is not an object\")}(t),function(e){for(var t in d)d.hasOwnProperty(t)&&(l[a][t]=e.hasOwnProperty(t)?e[t]:d[t])}(t),l[a]&&(l[a].targetOrigin=!0===l[a].checkOrigin?\"\"===(n=l[a].remoteHost)||\"file://\"===n?\"*\":n:\"*\")}(n),function(){switch(b(a,\"IFrame scrolling \"+(l[a]&&l[a].scrolling?\"enabled\":\"disabled\")+\" for \"+a),e.style.overflow=!1===(l[a]&&l[a].scrolling)?\"hidden\":\"auto\",l[a]&&l[a].scrolling){case\"omit\":break;case!0:e.scrolling=\"yes\";break;case!1:e.scrolling=\"no\";break;default:e.scrolling=l[a]?l[a].scrolling:\"no\"}}(),function(){function t(t){1/0!==l[a][t]&&0!==l[a][t]&&(e.style[t]=l[a][t]+\"px\",b(a,\"Set \"+t+\" = \"+l[a][t]+\"px\"))}function n(e){if(l[a][\"min\"+e]>l[a][\"max\"+e])throw new Error(\"Value for min\"+e+\" can not be greater than max\"+e)}n(\"Height\"),n(\"Width\"),t(\"maxHeight\"),t(\"minHeight\"),t(\"maxWidth\"),t(\"minWidth\")}(),\"number\"!=typeof(l[a]&&l[a].bodyMargin)&&\"0\"!==(l[a]&&l[a].bodyMargin)||(l[a].bodyMarginV1=l[a].bodyMargin,l[a].bodyMargin=l[a].bodyMargin+\"px\"),i=M(a),(s=p())&&function(t){e.parentNode&&new t(function(t){t.forEach(function(t){Array.prototype.slice.call(t.removedNodes).forEach(function(t){t===e&&k(e)})})}).observe(e.parentNode,{childList:!0})}(s),m(e,\"load\",function(){var n,r;A(\"iFrame.onload\",i,e,t,!0),n=l[a]&&l[a].firstRun,r=l[a]&&l[a].heightCalculationMethod in u,!n&&r&&C({iframe:e,height:0,width:0,type:\"init\"})}),A(\"init\",i,e,t,!0),Function.prototype.bind&&l[a]&&(l[a].iframe.iFrameResizer={close:k.bind(null,l[a].iframe),removeListeners:S.bind(null,l[a].iframe),resize:A.bind(null,\"Window resize\",\"resize\",l[a].iframe),moveToAnchor:function(e){A(\"Move to anchor\",\"moveToAnchor:\"+e,l[a].iframe,a)},sendMessage:function(e){A(\"Send Message\",\"message:\"+(e=JSON.stringify(e)),l[a].iframe,a)}}))}function L(e,t){null===f&&(f=setTimeout(function(){f=null,e()},t))}function P(e){b(\"window\",\"Trigger event: \"+e),L(function(){N(\"Window \"+e,\"resize\")},16)}function z(){\"hidden\"!==document.visibilityState&&(b(\"document\",\"Trigger event: Visiblity change\"),L(function(){N(\"Tab Visable\",\"resize\")},16))}function N(e,t){function n(e){return l[e]&&\"parent\"===l[e].resizeFrom&&l[e].autoResize&&!l[e].firstRun}for(var r in l)n(r)&&A(e,t,document.getElementById(r),r)}function U(){function e(e,t){t&&(function(){if(!t.tagName)throw new TypeError(\"Object is not a valid DOM element\");if(\"IFRAME\"!==t.tagName.toUpperCase())throw new TypeError(\"Expected <IFRAME> tag, found <\"+t.tagName+\">\")}(),F(t,e),n.push(t))}var n;return function(){var e,t=[\"moz\",\"webkit\",\"o\",\"ms\"];for(e=0;e<t.length&&!c;e+=1)c=window[t[e]+\"RequestAnimationFrame\"];c||b(\"setup\",\"RequestAnimationFrame not supported\")}(),m(window,\"message\",O),m(window,\"resize\",function(){P(\"resize\")}),m(document,\"visibilitychange\",z),m(document,\"-webkit-visibilitychange\",z),m(window,\"focusin\",function(){P(\"focus\")}),m(window,\"focus\",function(){P(\"focus\")}),function(r,o){switch(n=[],function(e){e&&e.enablePublicMethods&&w(\"enablePublicMethods option has been removed, public methods are now always available in the iFrame\")}(r),typeof o){case\"undefined\":case\"string\":Array.prototype.forEach.call(document.querySelectorAll(o||\"iframe\"),e.bind(t,r));break;case\"object\":e(r,o);break;default:throw new TypeError(\"Unexpected data type (\"+typeof o+\")\")}return n}}}()},344(e,t,n){t.iframeResizer=n(7521),n(5990)},168(e){var t;t=function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function o(){}function i(t,n,i){if(\"undefined\"!=typeof document){\"number\"==typeof(i=e({path:\"/\"},o.defaults,i)).expires&&(i.expires=new Date(1*new Date+864e5*i.expires)),i.expires=i.expires?i.expires.toUTCString():\"\";try{var s=JSON.stringify(n);/^[\\{\\[]/.test(s)&&(n=s)}catch(e){}n=r.write?r.write(n,t):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in i)i[c]&&(a+=\"; \"+c,!0!==i[c]&&(a+=\"=\"+i[c].split(\";\")[0]));return document.cookie=t+\"=\"+n+a}}function s(e,n){if(\"undefined\"!=typeof document){for(var o={},i=document.cookie?document.cookie.split(\"; \"):[],s=0;s<i.length;s++){var a=i[s].split(\"=\"),c=a.slice(1).join(\"=\");n||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var u=t(a[0]);if(c=(r.read||r)(c,u)||t(c),n)try{c=JSON.parse(c)}catch(e){}if(o[u]=c,e===u)break}catch(e){}}return e?o[e]:o}}return o.set=i,o.get=function(e){return s(e,!1)},o.getJSON=function(e){return s(e,!0)},o.remove=function(t,n){i(t,\"\",e(n,{expires:-1}))},o.defaults={},o.withConverter=n,o}(function(){})},\"function\"==typeof define&&define.amd&&define(t),e.exports=t()},4963(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();t.hasCookies=function(){var e=new a;try{var t=\"__test\";e.setItem(t,\"1\");var n=e.getItem(t);return e.removeItem(t),\"1\"===n}catch(e){return!1}};var o,i=(o=n(3658))&&o.__esModule?o:{default:o},s=\"lS_\",a=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.cookieOptions=Object.assign({path:\"/\"},t),s=void 0===t.prefix?s:t.prefix}return r(e,[{key:\"getItem\",value:function(e){var t=i.default.parse(document.cookie);return t&&t.hasOwnProperty(s+e)?t[s+e]:null}},{key:\"setItem\",value:function(e,t){return document.cookie=i.default.serialize(s+e,t,this.cookieOptions),t}},{key:\"removeItem\",value:function(e){var t=Object.assign({},this.cookieOptions,{maxAge:-1});return document.cookie=i.default.serialize(s+e,\"\",t),null}},{key:\"clear\",value:function(){var e=i.default.parse(document.cookie);for(var t in e)0===t.indexOf(s)&&this.removeItem(t.substr(s.length));return null}}]),e}();t.default=a},3952(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this._data={}}return n(e,[{key:\"getItem\",value:function(e){return this._data.hasOwnProperty(e)?this._data[e]:null}},{key:\"setItem\",value:function(e,t){return this._data[e]=String(t)}},{key:\"removeItem\",value:function(e){return delete this._data[e]}},{key:\"clear\",value:function(){return this._data={}}}]),e}();t.default=r},7576(e,t,n){\"use strict\";var r=s(n(1322)),o=s(n(4963)),i=s(n(3952));function s(e){return e&&e.__esModule?e:{default:e}}var a;a=(0,r.default)(\"localStorage\")?window.localStorage:(0,r.default)(\"sessionStorage\")?window.sessionStorage:(0,r.default)(\"cookieStorage\")?new o.default:new i.default,t.Ay=a,r.default,o.default,i.default},1322(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"localStorage\",t=String(e).replace(/storage$/i,\"\").toLowerCase();if(\"local\"===t)return i(\"localStorage\");if(\"session\"===t)return i(\"sessionStorage\");if(\"cookie\"===t)return(0,r.hasCookies)();if(\"memory\"===t)return!0;throw new Error(\"Storage method `\"+e+\"` is not available.\\n    Please use one of the following: localStorage, sessionStorage, cookieStorage, memoryStorage.\")};var r=n(4963),o=\"__test\";function i(e){try{var t=window[e];return t.setItem(o,\"1\"),t.removeItem(o),!0}catch(e){return!1}}},35(e,t,n){e=n.nmd(e);var r=\"__lodash_hash_undefined__\",o=9007199254740991,i=\"[object Arguments]\",s=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,u=/^(?:0|[1-9]\\d*)$/,l={};l[\"[object Float32Array]\"]=l[\"[object Float64Array]\"]=l[\"[object Int8Array]\"]=l[\"[object Int16Array]\"]=l[\"[object Int32Array]\"]=l[\"[object Uint8Array]\"]=l[\"[object Uint8ClampedArray]\"]=l[\"[object Uint16Array]\"]=l[\"[object Uint32Array]\"]=!0,l[i]=l[\"[object Array]\"]=l[\"[object ArrayBuffer]\"]=l[\"[object Boolean]\"]=l[\"[object DataView]\"]=l[\"[object Date]\"]=l[\"[object Error]\"]=l[s]=l[\"[object Map]\"]=l[\"[object Number]\"]=l[a]=l[\"[object RegExp]\"]=l[\"[object Set]\"]=l[\"[object String]\"]=l[\"[object WeakMap]\"]=!1;var f,d,h,p=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,m=\"object\"==typeof self&&self&&self.Object===Object&&self,y=p||m||Function(\"return this\")(),g=t&&!t.nodeType&&t,b=g&&e&&!e.nodeType&&e,v=b&&b.exports===g,w=v&&p.process,_=function(){try{return b&&b.require&&b.require(\"util\").types||w&&w.binding&&w.binding(\"util\")}catch(e){}}(),O=_&&_.isTypedArray,E=Array.prototype,S=Function.prototype,k=Object.prototype,x=y[\"__core-js_shared__\"],T=S.toString,j=k.hasOwnProperty,C=(f=/[^.]+$/.exec(x&&x.keys&&x.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+f:\"\",I=k.toString,R=T.call(Object),A=RegExp(\"^\"+T.call(j).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),M=v?y.Buffer:void 0,F=y.Symbol,L=y.Uint8Array,P=(M&&M.allocUnsafe,d=Object.getPrototypeOf,h=Object,function(e){return d(h(e))}),z=Object.create,N=k.propertyIsEnumerable,U=E.splice,q=F?F.toStringTag:void 0,H=function(){try{var e=ae(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),D=M?M.isBuffer:void 0,$=Math.max,B=Date.now,W=ae(y,\"Map\"),V=ae(Object,\"create\"),J=function(){function e(){}return function(t){if(!ve(t))return{};if(z)return z(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function K(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Y(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function G(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function X(e){var t=this.__data__=new Y(e);this.size=t.size}function Q(e,t,n){(void 0!==n&&!de(e[t],n)||void 0===n&&!(t in e))&&te(e,t,n)}function Z(e,t,n){var r=e[t];j.call(e,t)&&de(r,n)&&(void 0!==n||t in e)||te(e,t,n)}function ee(e,t){for(var n=e.length;n--;)if(de(e[n][0],t))return n;return-1}function te(e,t,n){\"__proto__\"==t&&H?H(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}K.prototype.clear=function(){this.__data__=V?V(null):{},this.size=0},K.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},K.prototype.get=function(e){var t=this.__data__;if(V){var n=t[e];return n===r?void 0:n}return j.call(t,e)?t[e]:void 0},K.prototype.has=function(e){var t=this.__data__;return V?void 0!==t[e]:j.call(t,e)},K.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=V&&void 0===t?r:t,this},Y.prototype.clear=function(){this.__data__=[],this.size=0},Y.prototype.delete=function(e){var t=this.__data__,n=ee(t,e);return!(n<0||(n==t.length-1?t.pop():U.call(t,n,1),--this.size,0))},Y.prototype.get=function(e){var t=this.__data__,n=ee(t,e);return n<0?void 0:t[n][1]},Y.prototype.has=function(e){return ee(this.__data__,e)>-1},Y.prototype.set=function(e,t){var n=this.__data__,r=ee(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},G.prototype.clear=function(){this.size=0,this.__data__={hash:new K,map:new(W||Y),string:new K}},G.prototype.delete=function(e){var t=se(this,e).delete(e);return this.size-=t?1:0,t},G.prototype.get=function(e){return se(this,e).get(e)},G.prototype.has=function(e){return se(this,e).has(e)},G.prototype.set=function(e,t){var n=se(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},X.prototype.clear=function(){this.__data__=new Y,this.size=0},X.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},X.prototype.get=function(e){return this.__data__.get(e)},X.prototype.has=function(e){return this.__data__.has(e)},X.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Y){var r=n.__data__;if(!W||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new G(r)}return n.set(e,t),this.size=n.size,this};function ne(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":q&&q in Object(e)?function(e){var t=j.call(e,q),n=e[q];try{e[q]=void 0;var r=!0}catch(e){}var o=I.call(e);return r&&(t?e[q]=n:delete e[q]),o}(e):function(e){return I.call(e)}(e)}function re(e){return we(e)&&ne(e)==i}function oe(e,t,n,r,o){e!==t&&function(e,t,n){for(var r=-1,o=Object(e),i=n(e),s=i.length;s--;){var a=i[++r];if(!1===t(o[a],a,o))break}}(t,function(i,s){if(o||(o=new X),ve(i))!function(e,t,n,r,o,i,s){var c=le(e,n),u=le(t,n),l=s.get(u);if(l)Q(e,n,l);else{var f,d,h,p,m,y=i?i(c,u,n+\"\",e,t,s):void 0,g=void 0===y;if(g){var b=pe(u),v=!b&&ye(u),w=!b&&!v&&_e(u);y=u,b||v||w?pe(c)?y=c:we(m=c)&&me(m)?y=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}(c):v?(g=!1,y=function(e){return e.slice()}(u)):w?(g=!1,p=new(h=(f=u).buffer).constructor(h.byteLength),new L(p).set(new L(h)),d=p,y=new f.constructor(d,f.byteOffset,f.length)):y=[]:function(e){if(!we(e)||ne(e)!=a)return!1;var t=P(e);if(null===t)return!0;var n=j.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&T.call(n)==R}(u)||he(u)?(y=c,he(c)?y=function(e){return function(e,t,n){var r=!n;n||(n={});for(var o=-1,i=t.length;++o<i;){var s=t[o],a=void 0;void 0===a&&(a=e[s]),r?te(n,s,a):Z(n,s,a)}return n}(e,Oe(e))}(c):ve(c)&&!ge(c)||(y=function(e){return\"function\"!=typeof e.constructor||ue(e)?{}:J(P(e))}(u))):g=!1}g&&(s.set(u,y),o(y,u,r,i,s),s.delete(u)),Q(e,n,y)}}(e,t,s,n,oe,r,o);else{var c=r?r(le(e,s),i,s+\"\",e,t,o):void 0;void 0===c&&(c=i),Q(e,s,c)}},Oe)}var ie=H?function(e,t){return H(e,\"toString\",{configurable:!0,enumerable:!1,value:(n=t,function(){return n}),writable:!0});var n}:ke;function se(e,t){var n,r,o=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?o[\"string\"==typeof t?\"string\":\"hash\"]:o.map}function ae(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!ve(e)||function(e){return!!C&&C in e}(e))&&(ge(e)?A:c).test(function(e){if(null!=e){try{return T.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e))}(n)?n:void 0}function ce(e,t){var n=typeof e;return!!(t=t??o)&&(\"number\"==n||\"symbol\"!=n&&u.test(e))&&e>-1&&e%1==0&&e<t}function ue(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||k)}function le(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var fe=function(e){var t=0,n=0;return function(){var r=B(),o=16-(r-n);if(n=r,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(ie);function de(e,t){return e===t||e!=e&&t!=t}var he=re(function(){return arguments}())?re:function(e){return we(e)&&j.call(e,\"callee\")&&!N.call(e,\"callee\")},pe=Array.isArray;function me(e){return null!=e&&be(e.length)&&!ge(e)}var ye=D||function(){return!1};function ge(e){if(!ve(e))return!1;var t=ne(e);return t==s||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function be(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=o}function ve(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function we(e){return null!=e&&\"object\"==typeof e}var _e=O?function(e){return function(t){return e(t)}}(O):function(e){return we(e)&&be(e.length)&&!!l[ne(e)]};function Oe(e){return me(e)?function(e,t){var n=pe(e),r=!n&&he(e),o=!n&&!r&&ye(e),i=!n&&!r&&!o&&_e(e),s=n||r||o||i,a=s?function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}(e.length,String):[],c=a.length;for(var u in e)!t&&!j.call(e,u)||s&&(\"length\"==u||o&&(\"offset\"==u||\"parent\"==u)||i&&(\"buffer\"==u||\"byteLength\"==u||\"byteOffset\"==u)||ce(u,c))||a.push(u);return a}(e,!0):function(e){if(!ve(e))return function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}(e);var t=ue(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&j.call(e,r))&&n.push(r);return n}(e)}var Ee,Se=(Ee=function(e,t,n){oe(e,t,n)},function(e,t){return fe(function(e,t,n){return t=$(void 0===t?e.length-1:t,0),function(){for(var r=arguments,o=-1,i=$(r.length-t,0),s=Array(i);++o<i;)s[o]=r[t+o];o=-1;for(var a=Array(t+1);++o<t;)a[o]=r[o];return a[t]=n(s),function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}(e,this,a)}}(e,t,ke),e+\"\")}(function(e,t){var n=-1,r=t.length,o=r>1?t[r-1]:void 0,i=r>2?t[2]:void 0;for(o=Ee.length>3&&\"function\"==typeof o?(r--,o):void 0,i&&function(e,t,n){if(!ve(n))return!1;var r=typeof t;return!!(\"number\"==r?me(n)&&ce(t,n.length):\"string\"==r&&t in n)&&de(n[t],e)}(t[0],t[1],i)&&(o=r<3?void 0:o,r=1),e=Object(e);++n<r;){var s=t[n];s&&Ee(e,s,n)}return e}));function ke(e){return e}e.exports=Se},1657(e){\"use strict\";e.exports=(e,t)=>{if(\"string\"!=typeof e||\"string\"!=typeof t)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===t)return[e];const n=e.indexOf(t);return-1===n?[e]:[e.slice(0,n),e.slice(n+t.length)]}},803(e){\"use strict\";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={id:r,loaded:!1,exports:{}};return e[r](i,i.exports,n),i.loaded=!0,i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createEmbeddedCheckoutMessenger:()=>Ee,embedCheckout:()=>ye});var e=n(168),t=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},t.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError;var o=/application\\/(\\w+\\+)?json/,i=/application\\/x-www-form-urlencoded/;const s=function(){function e(){}return e.prototype.toRequestBody=function(e){var t,n=e.headers?this._getHeader(e.headers,\"Content-Type\"):\"\";if(e.body){if(o.test(n))return JSON.stringify(e.body);if(i.test(n))return\"object\"!=typeof(t=e.body)||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var n=t[e];return\"string\"==typeof n?\"\".concat(e,\"=\").concat(encodeURIComponent(n)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}return e.body},e.prototype.toResponse=function(e){var t=this._parseResponseHeaders(e.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in e?e.response:e.responseText,t),headers:t,status:e.status,statusText:e.statusText}},e.prototype._parseResponseBody=function(e,t){var n=this._getHeader(t,\"Content-Type\");return e&&o.test(n)?JSON.parse(e):e},e.prototype._parseResponseHeaders=function(e){return(e?e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(e,n){var r,o=n.split(\":\"),i=(o.shift()||\"\").trim();return i?t(t({},e),((r={})[i.toLowerCase()]=o.join(\":\").trim(),r)):e},{})},e.prototype._getHeader=function(e,t){return e&&t&&(e[t]||e[t.toLowerCase()])||\"\"},e}();var a=n(5889);const c=function(){function e(){}return e.prototype.createRequest=function(e,t){var n=new XMLHttpRequest;return this._configureRequest(n,e,t),n},e.prototype._configureRequest=function(e,t,n){void 0===n&&(n={}),e.open(n.method||\"GET\",this._formatUrl(t,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(e,n.headers),\"boolean\"==typeof n.credentials&&(e.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(e.timeout=n.timeout)},e.prototype._configureRequestHeaders=function(e,t){Object.keys(t).filter(function(e){return null!==t[e]}).forEach(function(n){e.setRequestHeader(n,t[n])})},e.prototype._formatUrl=function(e,t,n){return void 0===n&&(n=!0),t&&0!==Object.keys(t).length?\"\".concat(e,\"?\").concat(a.stringify(t,{encode:n})):e},e}();var u=n(35),l=n.n(u),f=function(){function e(){this._cache={}}return e.prototype.read=function(e,t){var n=this.getKey(e,t.params);return this._cache[n]||null},e.prototype.write=function(e,t,n){var r=this.getKey(e,t.params);this._cache[r]=n},e.prototype.getKey=function(e,t){return void 0===t&&(t={}),0===Object.keys(t).length?e:\"\".concat(e,\"?\").concat(a.stringify(t))},e}();const d=function(){function e(e){var t=this;this._delay=e,this._promise=new Promise(function(e){t._resolve=e})}return e.prototype.onComplete=function(e){this._promise.then(e)},e.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},e.prototype.start=function(){var e=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return e.complete()},this._delay))},e}(),h=function(){function e(e,t,n,r){void 0===r&&(r={}),this._requestFactory=e,this._payloadTransformer=t,this._cookie=n,this._options=r,this._cache=this._options.cache||new f}return e.prototype.sendRequest=function(e,t){var n=this,r=this._mergeDefaultOptions(e,t),o=this._getCachedRequest(e,r);if(o)return Promise.resolve(o);var i=this._requestFactory.createRequest(this._prependHost(e),r);return new Promise(function(t,o){var s,a=function(){var s=n._payloadTransformer.toResponse(i);s.status>=200&&s.status<300?(n._cacheRequest(e,r,s),t(s)):o(s)};i.onload=a,i.onerror=a,i.onabort=a,i.ontimeout=a,r.timeout instanceof d&&(r.timeout.onComplete(function(){return i.abort()}),r.timeout.start()),!(s=r.timeout)||\"object\"!=typeof s&&\"function\"!=typeof s||\"function\"!=typeof s.then||r.timeout.then(function(){return i.abort()}),i.send(n._payloadTransformer.toRequestBody(r))})},e.prototype.get=function(e,n){return this.sendRequest(e,t(t({},n),{method:\"GET\"}))},e.prototype.post=function(e,n){return this.sendRequest(e,t(t({},n),{method:\"POST\"}))},e.prototype.put=function(e,n){return this.sendRequest(e,t(t({},n),{method:\"PUT\"}))},e.prototype.patch=function(e,n){return this.sendRequest(e,t(t({},n),{method:\"PATCH\"}))},e.prototype.delete=function(e,n){return this.sendRequest(e,t(t({},n),{method:\"DELETE\"}))},e.prototype._mergeDefaultOptions=function(e,t){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(e,t)&&this._isLocalRequest(e)&&(n.headers[\"X-XSRF-TOKEN\"]=r),t&&t.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),l()({},n,t)},e.prototype._prependHost=function(e){return!this._options.host||/^https?:\\/\\//.test(e)?e:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(e.replace(/^\\//,\"\"))},e.prototype._shouldCacheRequest=function(e){return\"GET\"===(e.method||\"GET\").toUpperCase()&&Boolean(e.cache)},e.prototype._getCachedRequest=function(e,t){return this._shouldCacheRequest(t)?this._cache.read(e,t):null},e.prototype._cacheRequest=function(e,t,n){this._shouldCacheRequest(t)&&this._cache.write(e,t,n)},e.prototype._isAssetRequest=function(e,t){return(!t||!t.method||\"GET\"===t.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(e.split(\"?\")[0])},e.prototype._isLocalRequest=function(e){return!!e.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!e.match(new RegExp(\"^(https?:)?//\"))},e}(),p={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},m=\"embedded-checkout-loading-indicator-rotation\";class y{constructor(e){this.styles=Object.assign(Object.assign({},p),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${m} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(n=>{e.style.setProperty(n,t[n])})}defineAnimation(){var e;if(document.getElementById(m))return;const t=document.createElement(\"style\");t.id=m,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${m} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}const g=function(e,t,n){return t&&n?b(0,t,n):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const r=Object.getOwnPropertyDescriptor(e.prototype,n);r&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,b(e.prototype,n,r))}),t}(e)};function b(e,t,n){if(\"function\"!=typeof n.value)return n;let r=n.value;return{get(){const e=r.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){r=e}}}class v extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class w extends v{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function _(e){if(!/^(https?:)?\\/\\//.test(e))throw new w(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=e;const n=t.port&&-1!==e.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${n?`:${n}`:\"\"}`,pathname:t.pathname,port:n,protocol:t.protocol,search:t.search}}function O(e){return _(0===e.hostname.indexOf(\"www\")?e.href:e.href.replace(e.hostname,`www.${e.hostname}`))}function E(e,t){return e.type===t}class S{constructor(e){this._sourceOrigins=[_(e).origin,O(_(e)).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const r=n.indexOf(t);r>=0&&n.splice(r,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){if(-1===this._sourceOrigins.indexOf(e.origin)||!E(e.data,e.data.type))return;const t=e.data,{context:n}=t,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}(t,[\"context\"]);this.trigger(r,n)}}!function(e,t,n,r){var o,i=arguments.length,s=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(i<3?o(s):i>3?o(t,n,s):o(t,n))||s);i>3&&s&&Object.defineProperty(t,n,s)}([g],S.prototype,\"_handleMessage\",null);var k=function(e,t){return k=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},k(e,t)};function x(e,t){function n(){this.constructor=e}k(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function T(e){return\"function\"==typeof e}var j=!1,C={Promise:void 0,set useDeprecatedSynchronousErrorHandling(e){e&&(new Error).stack,j=e},get useDeprecatedSynchronousErrorHandling(){return j}};function I(e){setTimeout(function(){throw e},0)}var R={closed:!0,next:function(e){},error:function(e){if(C.useDeprecatedSynchronousErrorHandling)throw e;I(e)},complete:function(){}},A=function(){return Array.isArray||function(e){return e&&\"number\"==typeof e.length}}();function M(e){return null!==e&&\"object\"==typeof e}var F=function(){function e(e){return Error.call(this),this.message=e?e.length+\" errors occurred during unsubscription:\\n\"+e.map(function(e,t){return t+1+\") \"+e.toString()}).join(\"\\n  \"):\"\",this.name=\"UnsubscriptionError\",this.errors=e,this}return e.prototype=Object.create(Error.prototype),e}(),L=function(){function e(e){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,e&&(this._ctorUnsubscribe=!0,this._unsubscribe=e)}return e.prototype.unsubscribe=function(){var t;if(!this.closed){var n=this,r=n._parentOrParents,o=n._ctorUnsubscribe,i=n._unsubscribe,s=n._subscriptions;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,r instanceof e)r.remove(this);else if(null!==r)for(var a=0;a<r.length;++a)r[a].remove(this);if(T(i)){o&&(this._unsubscribe=void 0);try{i.call(this)}catch(e){t=e instanceof F?P(e.errors):[e]}}if(A(s)){a=-1;for(var c=s.length;++a<c;){var u=s[a];if(M(u))try{u.unsubscribe()}catch(e){t=t||[],e instanceof F?t=t.concat(P(e.errors)):t.push(e)}}}if(t)throw new F(t)}},e.prototype.add=function(t){var n=t;if(!t)return e.EMPTY;switch(typeof t){case\"function\":n=new e(t);case\"object\":if(n===this||n.closed||\"function\"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if(!(n instanceof e)){var r=n;(n=new e)._subscriptions=[r]}break;default:throw new Error(\"unrecognized teardown \"+t+\" added to Subscription.\")}var o=n._parentOrParents;if(null===o)n._parentOrParents=this;else if(o instanceof e){if(o===this)return n;n._parentOrParents=[o,this]}else{if(-1!==o.indexOf(this))return n;o.push(this)}var i=this._subscriptions;return null===i?this._subscriptions=[n]:i.push(n),n},e.prototype.remove=function(e){var t=this._subscriptions;if(t){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}},e.EMPTY=function(e){return e.closed=!0,e}(new e),e}();function P(e){return e.reduce(function(e,t){return e.concat(t instanceof F?t.errors:t)},[])}var z=function(){return\"function\"==typeof Symbol?Symbol(\"rxSubscriber\"):\"@@rxSubscriber_\"+Math.random()}(),N=function(e){function t(n,r,o){var i=e.call(this)||this;switch(i.syncErrorValue=null,i.syncErrorThrown=!1,i.syncErrorThrowable=!1,i.isStopped=!1,arguments.length){case 0:i.destination=R;break;case 1:if(!n){i.destination=R;break}if(\"object\"==typeof n){n instanceof t?(i.syncErrorThrowable=n.syncErrorThrowable,i.destination=n,n.add(i)):(i.syncErrorThrowable=!0,i.destination=new U(i,n));break}default:i.syncErrorThrowable=!0,i.destination=new U(i,n,r,o)}return i}return x(t,e),t.prototype[z]=function(){return this},t.create=function(e,n,r){var o=new t(e,n,r);return o.syncErrorThrowable=!1,o},t.prototype.next=function(e){this.isStopped||this._next(e)},t.prototype.error=function(e){this.isStopped||(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this))},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){this.destination.error(e),this.unsubscribe()},t.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},t.prototype._unsubscribeAndRecycle=function(){var e=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=e,this},t}(L),U=function(e){function t(t,n,r,o){var i,s=e.call(this)||this;s._parentSubscriber=t;var a=s;return T(n)?i=n:n&&(i=n.next,r=n.error,o=n.complete,n!==R&&(T((a=Object.create(n)).unsubscribe)&&s.add(a.unsubscribe.bind(a)),a.unsubscribe=s.unsubscribe.bind(s))),s._context=a,s._next=i,s._error=r,s._complete=o,s}return x(t,e),t.prototype.next=function(e){if(!this.isStopped&&this._next){var t=this._parentSubscriber;C.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?this.__tryOrSetError(t,this._next,e)&&this.unsubscribe():this.__tryOrUnsub(this._next,e)}},t.prototype.error=function(e){if(!this.isStopped){var t=this._parentSubscriber,n=C.useDeprecatedSynchronousErrorHandling;if(this._error)n&&t.syncErrorThrowable?(this.__tryOrSetError(t,this._error,e),this.unsubscribe()):(this.__tryOrUnsub(this._error,e),this.unsubscribe());else if(t.syncErrorThrowable)n?(t.syncErrorValue=e,t.syncErrorThrown=!0):I(e),this.unsubscribe();else{if(this.unsubscribe(),n)throw e;I(e)}}},t.prototype.complete=function(){var e=this;if(!this.isStopped){var t=this._parentSubscriber;if(this._complete){var n=function(){return e._complete.call(e._context)};C.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},t.prototype.__tryOrUnsub=function(e,t){try{e.call(this._context,t)}catch(e){if(this.unsubscribe(),C.useDeprecatedSynchronousErrorHandling)throw e;I(e)}},t.prototype.__tryOrSetError=function(e,t,n){if(!C.useDeprecatedSynchronousErrorHandling)throw new Error(\"bad call\");try{t.call(this._context,n)}catch(t){return C.useDeprecatedSynchronousErrorHandling?(e.syncErrorValue=t,e.syncErrorThrown=!0,!0):(I(t),!0)}return!1},t.prototype._unsubscribe=function(){var e=this._parentSubscriber;this._context=null,this._parentSubscriber=null,e.unsubscribe()},t}(N),q=function(){return\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\"}();function H(e){return e}var D=function(){function e(e){this._isScalar=!1,e&&(this._subscribe=e)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(e,t,n){var r=this.operator,o=function(e,t,n){if(e){if(e instanceof N)return e;if(e[z])return e[z]()}return e||t||n?new N(e,t,n):new N(R)}(e,t,n);if(r?o.add(r.call(o,this.source)):o.add(this.source||C.useDeprecatedSynchronousErrorHandling&&!o.syncErrorThrowable?this._subscribe(o):this._trySubscribe(o)),C.useDeprecatedSynchronousErrorHandling&&o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){C.useDeprecatedSynchronousErrorHandling&&(e.syncErrorThrown=!0,e.syncErrorValue=t),function(e){for(;e;){var t=e,n=t.closed,r=t.destination,o=t.isStopped;if(n||o)return!1;e=r&&r instanceof N?r:null}return!0}(e)?e.error(t):console.warn(t)}},e.prototype.forEach=function(e,t){var n=this;return new(t=$(t))(function(t,r){var o;o=n.subscribe(function(t){try{e(t)}catch(e){r(e),o&&o.unsubscribe()}},r,t)})},e.prototype._subscribe=function(e){var t=this.source;return t&&t.subscribe(e)},e.prototype[q]=function(){return this},e.prototype.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return 0===e.length?this:(0===(n=e).length?H:1===n.length?n[0]:function(e){return n.reduce(function(e,t){return t(e)},e)})(this);var n},e.prototype.toPromise=function(e){var t=this;return new(e=$(e))(function(e,n){var r;t.subscribe(function(e){return r=e},function(e){return n(e)},function(){return e(r)})})},e.create=function(t){return new e(t)},e}();function $(e){if(e||(e=C.Promise||Promise),!e)throw new Error(\"no Promise impl found\");return e}function B(e,t){return function(n){if(\"function\"!=typeof e)throw new TypeError(\"argument is not a function. Are you looking for `mapTo()`?\");return n.lift(new W(e,t))}}var W=function(){function e(e,t){this.project=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new V(e,this.project,this.thisArg))},e}(),V=function(e){function t(t,n,r){var o=e.call(this,t)||this;return o.project=n,o.count=0,o.thisArg=r||o,o}return x(t,e),t.prototype._next=function(e){var t;try{t=this.project.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}this.destination.next(t)},t}(N);function J(e,t,n,r){return T(n)&&(r=n,n=void 0),r?J(e,t,n).pipe(B(function(e){return A(e)?r.apply(void 0,e):r(e)})):new D(function(r){K(e,t,function(e){arguments.length>1?r.next(Array.prototype.slice.call(arguments)):r.next(e)},r,n)})}function K(e,t,n,r,o){var i;if(function(e){return e&&\"function\"==typeof e.addEventListener&&\"function\"==typeof e.removeEventListener}(e)){var s=e;e.addEventListener(t,n,o),i=function(){return s.removeEventListener(t,n,o)}}else if(function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.off}(e)){var a=e;e.on(t,n),i=function(){return a.off(t,n)}}else if(function(e){return e&&\"function\"==typeof e.addListener&&\"function\"==typeof e.removeListener}(e)){var c=e;e.addListener(t,n),i=function(){return c.removeListener(t,n)}}else{if(!e||!e.length)throw new TypeError(\"Invalid event target\");for(var u=0,l=e.length;u<l;u++)K(e[u],t,n,r,o)}r.add(i)}var Y=function(){function e(e,t){this.predicate=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new G(e,this.predicate,this.thisArg))},e}(),G=function(e){function t(t,n,r){var o=e.call(this,t)||this;return o.predicate=n,o.thisArg=r,o.count=0,o}return x(t,e),t.prototype._next=function(e){var t;try{t=this.predicate.call(this.thisArg,e,this.count++)}catch(e){return void this.destination.error(e)}t&&this.destination.next(e)},t}(N),X=function(){function e(){return Error.call(this),this.message=\"argument out of range\",this.name=\"ArgumentOutOfRangeError\",this}return e.prototype=Object.create(Error.prototype),e}();var Q=function(){function e(e){if(this.total=e,this.total<0)throw new X}return e.prototype.call=function(e,t){return t.subscribe(new Z(e,this.total))},e}(),Z=function(e){function t(t,n){var r=e.call(this,t)||this;return r.total=n,r.count=0,r}return x(t,e),t.prototype._next=function(e){var t=this.total,n=++this.count;n<=t&&(this.destination.next(e),n===t&&(this.destination.complete(),this.unsubscribe()))},t}(N);class ee{constructor(e,t,n){this._targetWindow=t,this._context=n,this._targetOrigin=\"*\"===e?\"*\":_(e).origin}post(e,t){const n=this._targetWindow;if(window===n)return;if(!n)throw new Error(\"Unable to post message because target window is not set.\");const r=t&&J(window,\"message\").pipe((o=e=>e.origin===this._targetOrigin&&E(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type),function(e){return e.lift(new Y(o,void 0))}),B(e=>{if(t.errorType===e.data.type)throw e.data;return e.data}),function(e){return e.lift(new Q(1))}).toPromise();var o;return n.postMessage(Object.assign(Object.assign({},e),{context:this._context}),this._targetOrigin),r}setTarget(e){this._targetWindow=e}setContext(e){this._context=e}}var te,ne=n(7576);class re{constructor(e){this._namespace=e}getItem(e){const t=ne.Ay.getItem(this.withNamespace(e));if(null===t)return null;try{return JSON.parse(t)}catch(t){return this.removeItem(this.withNamespace(e)),null}}getItemOnce(e){const t=this.getItem(e);return this.removeItem(e),t}setItem(e,t){return ne.Ay.setItem(this.withNamespace(e),JSON.stringify(t))}removeItem(e){return ne.Ay.removeItem(this.withNamespace(e))}withNamespace(e){return`${this._namespace}.${e}`}}!function(e){e.CheckoutComplete=\"CHECKOUT_COMPLETE\",e.CheckoutError=\"CHECKOUT_ERROR\",e.CheckoutLoaded=\"CHECKOUT_LOADED\",e.FrameError=\"FRAME_ERROR\",e.FrameLoaded=\"FRAME_LOADED\",e.SignedOut=\"SIGNED_OUT\"}(te||(te={}));const oe={body:{},headers:{},status:0};class ie extends v{constructor(e,{message:t,errors:n}={}){const{body:r,headers:o,status:i}=e||oe;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=o,this.status=i,this.errors=n||[]}}class se extends ie{constructor(e){super(e,{message:e.body.title}),this.name=\"InvalidLoginTokenError\",this.type=\"invalid_login_token\"}}var ae,ce;!function(e){e.MissingContainer=\"missing_container\",e.MissingContent=\"missing_content\",e.UnknownError=\"unknown_error\"}(ae||(ae={}));class ue extends v{constructor(e,t=ae.UnknownError){super(e||\"Unable to embed the checkout form.\"),this.subtype=t,this.name=\"NotEmbeddableError\",this.type=\"not_embeddable\"}}!function(e){e.StyleConfigured=\"STYLE_CONFIGURED\"}(ce||(ce={}));const le=\"isCookieAllowed\",fe=\"lastAllowCookieAttempt\";let de=class{constructor(e,t,n,r,o,i,s,a){this._iframeCreator=e,this._messageListener=t,this._messagePoster=n,this._loadingIndicator=r,this._requestSender=o,this._storage=i,this._location=s,this._options=a,this._isAttached=!1,this._options.onComplete&&this._messageListener.addListener(te.CheckoutComplete,this._options.onComplete),this._options.onError&&this._messageListener.addListener(te.CheckoutError,this._options.onError),this._options.onLoad&&this._messageListener.addListener(te.CheckoutLoaded,this._options.onLoad),this._options.onFrameLoad&&this._messageListener.addListener(te.FrameLoaded,this._options.onFrameLoad),this._options.onSignOut&&this._messageListener.addListener(te.SignedOut,this._options.onSignOut),this._messageListener.addListener(te.FrameLoaded,()=>this._configureStyles())}attach(){return this._isAttached?Promise.resolve(this):(this._isAttached=!0,this._messageListener.listen(),this._loadingIndicator.show(this._options.containerId),this._allowCookie().then(()=>this._attemptLogin()).then(e=>this._iframeCreator.createFrame(e,this._options.containerId)).then(e=>{this._iframe=e,this._configureStyles(),this._loadingIndicator.hide()}).catch(e=>(this._isAttached=!1,this._retryAllowCookie(e).catch(()=>{throw this._messageListener.trigger({type:te.FrameError,payload:e}),this._loadingIndicator.hide(),e}))).then(()=>this))}detach(){this._isAttached&&(this._isAttached=!1,this._messageListener.stopListen(),this._iframe&&this._iframe.parentNode&&(this._iframe.parentNode.removeChild(this._iframe),this._iframe.iFrameResizer.close()))}_configureStyles(){this._iframe&&this._iframe.contentWindow&&this._options.styles&&(this._messagePoster.setTarget(this._iframe.contentWindow),this._messagePoster.post({type:ce.StyleConfigured,payload:this._options.styles}))}_attemptLogin(){return/^\\/login\\/token/.test(_(this._options.url).pathname)?this._requestSender.post(this._options.url).then(({body:{redirectUrl:e}})=>e).catch(e=>Promise.reject(new se(e))):Promise.resolve(this._options.url)}_allowCookie(){if(this._storage.getItem(le))return Promise.resolve();this._storage.setItem(le,!0),this._storage.setItem(fe,Date.now());const{origin:e}=_(this._options.url),t=`${e}/embedded-checkout/allow-cookie?returnUrl=${encodeURIComponent(this._location.href)}`;return document.body.style.visibility=\"hidden\",this._location.replace(t),new Promise(()=>{})}_retryAllowCookie(e){const t=Number(this._storage.getItem(fe));return(!t||Date.now()-t>6e5)&&e instanceof ue&&e.subtype===ae.MissingContent?(this._storage.removeItem(fe),this._storage.removeItem(le),this._allowCookie()):Promise.reject()}};de=function(e,t,n,r){var o,i=arguments.length,s=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(i<3?o(s):i>3?o(t,n,s):o(t,n))||s);return i>3&&s&&Object.defineProperty(t,n,s),s}([g],de);const he=de;class pe{constructor(e){this._options=e}createFrame(e,t){const n=document.getElementById(t),{timeout:r=6e4}=this._options||{};if(!n)throw new ue(\"Unable to embed the iframe because the container element could not be found.\",ae.MissingContainer);const o=document.createElement(\"iframe\");return o.src=e,o.style.border=\"none\",o.style.display=\"none\",o.style.width=\"100%\",o.allowPaymentRequest=!0,o.allow=\"payment\",n.appendChild(o),this._toResizableFrame(o,r).catch(e=>{throw n.removeChild(o),e})}_toResizableFrame(e,t){return new Promise((r,o)=>{const i=window.setTimeout(()=>{o(new ue(\"Unable to embed the iframe because the content could not be loaded.\"))},t),s=t=>{if((t.origin===_(e.src).origin||t.origin===O(_(e.src)).origin)&&(E(t.data,te.FrameError)&&(a(),o(new ue(t.data.payload.message,ae.MissingContent))),E(t.data,te.FrameLoaded))){e.style.display=\"\";const o=function(e,t){const{iframeResizer:r}=n(3347);return r(e,t)}({scrolling:!1,sizeWidth:!1,heightCalculationMethod:t.data.payload&&t.data.payload.contentId?\"taggedElement\":\"lowestElement\"},e);a(),r(o[o.length-1])}},a=()=>{window.removeEventListener(\"message\",s),window.clearTimeout(i)};window.addEventListener(\"message\",s)})}}const me=\"BigCommerce.EmbeddedCheckout\";function ye(t){const n=_(t.url).origin;return new he(new pe,new S(n),new ee(n),new y({styles:t.styles&&t.styles.loadingIndicator}),new h(new c,new s,e,void 0),new re(me),window.location,t).attach()}function ge(e){if(!e.payload||!e.payload.contentId)return;const t=document.getElementById(e.payload.contentId);t&&!t.hasAttribute(\"data-iframe-height\")&&t.setAttribute(\"data-iframe-height\",\"\")}function be(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"type\"in e}let ve=class{constructor(e,t,n,r={}){this._messageListener=e,this._messagePoster=t,this._untargetedMessagePoster=n,this._messageHandlers=r,this._messageListener.listen()}postComplete(){const e={type:te.CheckoutComplete};this._postMessage(e)}postError(e){const t={type:te.CheckoutError,payload:this._transformError(e)};this._postMessage(t)}postFrameError(e){const t={type:te.FrameError,payload:this._transformError(e)};this._postMessage(t,{untargeted:!0})}postFrameLoaded(e){const t={type:te.FrameLoaded,payload:e};this._postMessage(t)}postLoaded(){const e={type:te.CheckoutLoaded};this._postMessage(e)}postSignedOut(){const e={type:te.SignedOut};this._postMessage(e)}receiveStyles(e){this._messageListener.addListener(ce.StyleConfigured,({payload:t})=>{e(t)})}_postMessage(e,t){if(this._notifyMessageHandlers(e),t&&t.untargeted)return this._untargetedMessagePoster.post(e);this._messagePoster.post(e)}_notifyMessageHandlers(e){Object.keys(this._messageHandlers).forEach(t=>{if(e.type!==t)return;const n=this._messageHandlers[t];n&&n.call(null,e)})}_transformError(e){return{message:e.message,type:be(e)?e.type:void 0,subtype:be(e)?e.subtype:void 0}}};ve=function(e,t,n,r){var o,i=arguments.length,s=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(i<3?o(s):i>3?o(t,n,s):o(t,n))||s);return i>3&&s&&Object.defineProperty(t,n,s),s}([g],ve);const we=ve;let _e=class{postComplete(){}postError(){}postFrameError(){}postFrameLoaded(){}postLoaded(){}postSignedOut(){}receiveStyles(){}};_e=function(e,t,n,r){var o,i=arguments.length,s=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(i<3?o(s):i>3?o(t,n,s):o(t,n))||s);return i>3&&s&&Object.defineProperty(t,n,s),s}([g],_e);const Oe=_e;function Ee(e){n(5990);const t=e.parentWindow||window.parent;return window===t?new Oe:new we(new S(e.parentOrigin),new ee(e.parentOrigin,t),new ee(\"*\",t),{[te.FrameLoaded]:ge})}})(),module.exports=r})();\n//# sourceMappingURL=embedded-checkout.js.map"
  },
  {
    "path": "dist/cjs/embedded-checkout.js.LICENSE.txt",
    "content": "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n"
  },
  {
    "path": "dist/cjs/extension.js",
    "content": "/*! For license information please see extension.js.LICENSE.txt */\n(()=>{var n={3347(n,t,e){\"use strict\";n.exports=e(344)},5990(n){!function(t){\"use strict\";if(\"undefined\"!=typeof window){var e=!0,r=\"\",i=0,o=\"\",u=null,a=\"\",c=!1,f={resize:1,click:1},s=128,l=!0,h=1,p=\"bodyOffset\",d=p,v=!0,g=\"\",y={},_=32,m=null,b=!1,w=\"[iFrameSizer]\",E=\"\",x={max:1,min:1,bodyScroll:1,documentElementScroll:1},O=\"child\",S=!0,T=window.parent,I=\"*\",A=0,k=!1,j=null,R=16,N=1,C=\"scroll\",z=C,M=window,L=function(){an(\"MessageCallback function not defined\")},P=function(){},F=function(){},W={height:function(){return an(\"Custom height calculation function not defined\"),document.documentElement.offsetHeight},width:function(){return an(\"Custom width calculation function not defined\"),document.body.scrollWidth}},D={},U=!1;try{var B=Object.create({},{passive:{get:function(){U=!0}},once:{get:function(){}}});window.addEventListener(\"test\",nn,B),window.removeEventListener(\"test\",nn,B)}catch(n){}var H,$,q,V,G,X,Y,K=Date.now||function(){return(new Date).getTime()},Z={bodyOffset:function(){return document.body.offsetHeight+_n(\"marginTop\")+_n(\"marginBottom\")},offset:function(){return Z.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return W.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,bn(Z))},min:function(){return Math.min.apply(null,bn(Z))},grow:function(){return Z.max()},lowestElement:function(){return Math.max(Z.bodyOffset()||Z.documentElementOffset(),mn(\"bottom\",En()))},taggedElement:function(){return wn(\"bottom\",\"data-iframe-height\")}},J={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return W.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(J.bodyScroll(),J.documentElementScroll())},max:function(){return Math.max.apply(null,bn(J))},min:function(){return Math.min.apply(null,bn(J))},rightMostElement:function(){return mn(\"right\",En())},taggedElement:function(){return wn(\"right\",\"data-iframe-width\")}},Q=(H=xn,G=null,X=0,Y=function(){X=K(),G=null,V=H.apply($,q),G||($=q=null)},function(){var n=K();X||(X=n);var t=R-(n-X);return $=this,q=arguments,t<=0||t>R?(G&&(clearTimeout(G),G=null),X=n,V=H.apply($,q),G||($=q=null)):G||(G=setTimeout(Y,t)),V});tn(window,\"message\",kn),tn(window,\"readystatechange\",jn),jn()}function nn(){}function tn(n,t,e,r){\"addEventListener\"in window?n.addEventListener(t,e,!!U&&(r||{})):\"attachEvent\"in window&&n.attachEvent(\"on\"+t,e)}function en(n,t,e){\"removeEventListener\"in window?n.removeEventListener(t,e,!1):\"detachEvent\"in window&&n.detachEvent(\"on\"+t,e)}function rn(n){return n.charAt(0).toUpperCase()+n.slice(1)}function on(n){return w+\"[\"+E+\"] \"+n}function un(n){b&&\"object\"==typeof window.console&&console.log(on(n))}function an(n){\"object\"==typeof window.console&&console.warn(on(n))}function cn(){var n,u;!function(){function n(n){return\"true\"===n}var u=g.substr(13).split(\":\");E=u[0],i=t!==u[1]?Number(u[1]):i,c=t!==u[2]?n(u[2]):c,b=t!==u[3]?n(u[3]):b,_=t!==u[4]?Number(u[4]):_,e=t!==u[6]?n(u[6]):e,o=u[7],d=t!==u[8]?u[8]:d,r=u[9],a=u[10],A=t!==u[11]?Number(u[11]):A,y.enable=t!==u[12]&&n(u[12]),O=t!==u[13]?u[13]:O,z=t!==u[14]?u[14]:z}(),un(\"Initialising iFrame (\"+location.href+\")\"),function(){function n(n,t){return\"function\"==typeof n&&(un(\"Setup custom \"+t+\"CalcMethod\"),W[t]=n,n=\"custom\"),n}var t;\"iFrameResizer\"in window&&Object===window.iFrameResizer.constructor&&(t=window.iFrameResizer,un(\"Reading data from page: \"+JSON.stringify(t)),L=\"messageCallback\"in t?t.messageCallback:L,P=\"readyCallback\"in t?t.readyCallback:P,I=\"targetOrigin\"in t?t.targetOrigin:I,d=\"heightCalculationMethod\"in t?t.heightCalculationMethod:d,z=\"widthCalculationMethod\"in t?t.widthCalculationMethod:z,d=n(d,\"height\"),z=n(z,\"width\")),un(\"TargetOrigin for parent set to: \"+I)}(),t===o&&(o=i+\"px\"),fn(\"margin\",(-1!==(u=o).indexOf(\"-\")&&(an(\"Negative CSS value ignored for margin\"),u=\"\"),u)),fn(\"background\",r),fn(\"padding\",a),(n=document.createElement(\"div\")).style.clear=\"both\",n.style.display=\"block\",document.body.appendChild(n),pn(),dn(),document.documentElement.style.height=\"\",document.body.style.height=\"\",un('HTML & body height set to \"auto\"'),un(\"Enable public methods\"),M.parentIFrame={autoResize:function(n){return!0===n&&!1===e?(e=!0,vn()):!1===n&&!0===e&&(e=!1,gn()),e},close:function(){An(0,0,\"close\"),un(\"Disable outgoing messages\"),S=!1,un(\"Remove event listener: Message\"),en(window,\"message\",kn),!0===e&&gn()},getId:function(){return E},getPageInfo:function(n){\"function\"==typeof n?(F=n,An(0,0,\"pageInfo\")):(F=function(){},An(0,0,\"pageInfoStop\"))},moveToAnchor:function(n){y.findTarget(n)},reset:function(){In(\"parentIFrame.reset\")},scrollTo:function(n,t){An(t,n,\"scrollTo\")},scrollToOffset:function(n,t){An(t,n,\"scrollToOffset\")},sendMessage:function(n,t){An(0,0,\"message\",JSON.stringify(n),t)},setHeightCalculationMethod:function(n){d=n,pn()},setWidthCalculationMethod:function(n){z=n,dn()},setTargetOrigin:function(n){un(\"Set targetOrigin: \"+n),I=n},size:function(n,t){On(\"size\",\"parentIFrame.size(\"+(n||\"\")+(t?\",\"+t:\"\")+\")\",n,t)}},vn(),y=function(){function n(n){var e=n.getBoundingClientRect(),r={x:window.pageXOffset!==t?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==t?window.pageYOffset:document.documentElement.scrollTop};return{x:parseInt(e.left,10)+parseInt(r.x,10),y:parseInt(e.top,10)+parseInt(r.y,10)}}function e(e){var r=e.split(\"#\")[1]||e,i=decodeURIComponent(r),o=document.getElementById(i)||document.getElementsByName(i)[0];t!==o?function(t){var e=n(t);un(\"Moving to in page link (#\"+r+\") at x: \"+e.x+\" y: \"+e.y),An(e.y,e.x,\"scrollToOffset\")}(o):(un(\"In page link (#\"+r+\") not found in iFrame, so sending to parent\"),An(0,0,\"inPageLink\",\"#\"+r))}function r(){\"\"!==location.hash&&\"#\"!==location.hash&&e(location.href)}return y.enable?Array.prototype.forEach&&document.querySelectorAll?(un(\"Setting up location.hash handlers\"),Array.prototype.forEach.call(document.querySelectorAll('a[href^=\"#\"]'),function(n){\"#\"!==n.getAttribute(\"href\")&&tn(n,\"click\",function(n){n.preventDefault(),e(this.getAttribute(\"href\"))})}),tn(window,\"hashchange\",r),setTimeout(r,s)):an(\"In page linking not fully supported in this browser! (See README.md for IE8 workaround)\"):un(\"In page linking not enabled\"),{findTarget:e}}(),On(\"init\",\"Init message from host page\"),P()}function fn(n,e){t!==e&&\"\"!==e&&\"null\"!==e&&(document.body.style[n]=e,un(\"Body \"+n+' set to \"'+e+'\"'))}function sn(n){var t={add:function(t){function e(){On(n.eventName,n.eventType)}D[t]=e,tn(window,t,e,{passive:!0})},remove:function(n){var t=D[n];delete D[n],en(window,n,t)}};n.eventNames&&Array.prototype.map?(n.eventName=n.eventNames[0],n.eventNames.map(t[n.method])):t[n.method](n.eventName),un(rn(n.method)+\" event listener: \"+n.eventType)}function ln(n){sn({method:n,eventType:\"Animation Start\",eventNames:[\"animationstart\",\"webkitAnimationStart\"]}),sn({method:n,eventType:\"Animation Iteration\",eventNames:[\"animationiteration\",\"webkitAnimationIteration\"]}),sn({method:n,eventType:\"Animation End\",eventNames:[\"animationend\",\"webkitAnimationEnd\"]}),sn({method:n,eventType:\"Input\",eventName:\"input\"}),sn({method:n,eventType:\"Mouse Up\",eventName:\"mouseup\"}),sn({method:n,eventType:\"Mouse Down\",eventName:\"mousedown\"}),sn({method:n,eventType:\"Orientation Change\",eventName:\"orientationchange\"}),sn({method:n,eventType:\"Print\",eventName:[\"afterprint\",\"beforeprint\"]}),sn({method:n,eventType:\"Ready State Change\",eventName:\"readystatechange\"}),sn({method:n,eventType:\"Touch Start\",eventName:\"touchstart\"}),sn({method:n,eventType:\"Touch End\",eventName:\"touchend\"}),sn({method:n,eventType:\"Touch Cancel\",eventName:\"touchcancel\"}),sn({method:n,eventType:\"Transition Start\",eventNames:[\"transitionstart\",\"webkitTransitionStart\",\"MSTransitionStart\",\"oTransitionStart\",\"otransitionstart\"]}),sn({method:n,eventType:\"Transition Iteration\",eventNames:[\"transitioniteration\",\"webkitTransitionIteration\",\"MSTransitionIteration\",\"oTransitionIteration\",\"otransitioniteration\"]}),sn({method:n,eventType:\"Transition End\",eventNames:[\"transitionend\",\"webkitTransitionEnd\",\"MSTransitionEnd\",\"oTransitionEnd\",\"otransitionend\"]}),\"child\"===O&&sn({method:n,eventType:\"IFrame Resized\",eventName:\"resize\"})}function hn(n,t,e,r){return t!==n&&(n in e||(an(n+\" is not a valid option for \"+r+\"CalculationMethod.\"),n=t),un(r+' calculation method set to \"'+n+'\"')),n}function pn(){d=hn(d,p,Z,\"height\")}function dn(){z=hn(z,C,J,\"width\")}function vn(){var n;!0===e?(ln(\"add\"),n=0>_,window.MutationObserver||window.WebKitMutationObserver?n?yn():u=function(){function n(n){function t(n){!1===n.complete&&(un(\"Attach listeners to \"+n.src),n.addEventListener(\"load\",i,!1),n.addEventListener(\"error\",o,!1),a.push(n))}\"attributes\"===n.type&&\"src\"===n.attributeName?t(n.target):\"childList\"===n.type&&Array.prototype.forEach.call(n.target.querySelectorAll(\"img\"),t)}function e(n){un(\"Remove listeners from \"+n.src),n.removeEventListener(\"load\",i,!1),n.removeEventListener(\"error\",o,!1),function(n){a.splice(a.indexOf(n),1)}(n)}function r(n,r,i){e(n.target),On(r,i+\": \"+n.target.src,t,t)}function i(n){r(n,\"imageLoad\",\"Image loaded\")}function o(n){r(n,\"imageLoadFailed\",\"Image load failed\")}function u(t){On(\"mutationObserver\",\"mutationObserver: \"+t[0].target+\" \"+t[0].type),t.forEach(n)}var a=[],c=window.MutationObserver||window.WebKitMutationObserver,f=function(){var n=document.querySelector(\"body\");return f=new c(u),un(\"Create body MutationObserver\"),f.observe(n,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}),f}();return{disconnect:function(){\"disconnect\"in f&&(un(\"Disconnect body MutationObserver\"),f.disconnect(),a.forEach(e))}}}():(un(\"MutationObserver not supported in this browser!\"),yn())):un(\"Auto Resize disabled\")}function gn(){ln(\"remove\"),null!==u&&u.disconnect(),clearInterval(m)}function yn(){0!==_&&(un(\"setInterval: \"+_+\"ms\"),m=setInterval(function(){On(\"interval\",\"setInterval: \"+_)},Math.abs(_)))}function _n(n,t){var e=0;return t=t||document.body,e=\"defaultView\"in document&&\"getComputedStyle\"in document.defaultView?null!==(e=document.defaultView.getComputedStyle(t,null))?e[n]:0:function(n){if(/^\\d+(px)?$/i.test(n))return parseInt(n,10);var e=t.style.left,r=t.runtimeStyle.left;return t.runtimeStyle.left=t.currentStyle.left,t.style.left=n||0,n=t.style.pixelLeft,t.style.left=e,t.runtimeStyle.left=r,n}(t.currentStyle[n]),parseInt(e,10)}function mn(n,t){for(var e=t.length,r=0,i=0,o=rn(n),u=K(),a=0;a<e;a++)(r=t[a].getBoundingClientRect()[n]+_n(\"margin\"+o,t[a]))>i&&(i=r);return u=K()-u,un(\"Parsed \"+e+\" HTML elements\"),un(\"Element position calculated in \"+u+\"ms\"),function(n){n>R/2&&un(\"Event throttle increased to \"+(R=2*n)+\"ms\")}(u),i}function bn(n){return[n.bodyOffset(),n.bodyScroll(),n.documentElementOffset(),n.documentElementScroll()]}function wn(n,t){var e=document.querySelectorAll(\"[\"+t+\"]\");return 0===e.length&&(an(\"No tagged elements (\"+t+\") found on page\"),document.querySelectorAll(\"body *\")),mn(n,e)}function En(){return document.querySelectorAll(\"body *\")}function xn(n,e,r,i){var o,u;!function(){function n(n,t){return!(Math.abs(n-t)<=A)}return o=t!==r?r:Z[d](),u=t!==i?i:J[z](),n(h,o)||c&&n(N,u)}()&&\"init\"!==n?!(n in{init:1,interval:1,size:1})&&(d in x||c&&z in x)?In(e):n in{interval:1}||un(\"No change in size detected\"):(Sn(),An(h=o,N=u,n))}function On(n,t,e,r){k&&n in f?un(\"Trigger event cancelled: \"+n):(n in{reset:1,resetPage:1,init:1}||un(\"Trigger event: \"+t),\"init\"===n?xn(n,t,e,r):Q(n,t,e,r))}function Sn(){k||(k=!0,un(\"Trigger event lock on\")),clearTimeout(j),j=setTimeout(function(){k=!1,un(\"Trigger event lock off\"),un(\"--\")},s)}function Tn(n){h=Z[d](),N=J[z](),An(h,N,n)}function In(n){var t=d;d=p,un(\"Reset trigger event: \"+n),Sn(),Tn(\"reset\"),d=t}function An(n,e,r,i,o){var u;!0===S&&(t===o?o=I:un(\"Message targetOrigin: \"+o),un(\"Sending message to host page (\"+(u=E+\":\"+n+\":\"+e+\":\"+r+(t!==i?\":\"+i:\"\"))+\")\"),T.postMessage(w+u,o))}function kn(t){var e,r={init:function(){g=t.data,T=t.source,cn(),l=!1,setTimeout(function(){v=!1},s)},reset:function(){v?un(\"Page reset ignored by init\"):(un(\"Page size reset by host page\"),Tn(\"resetPage\"))},resize:function(){On(\"resizeParent\",\"Parent window requested size check\")},moveToAnchor:function(){y.findTarget(o())},inPageLink:function(){this.moveToAnchor()},pageInfo:function(){var n=o();un(\"PageInfoFromParent called from parent: \"+n),F(JSON.parse(n)),un(\" --\")},message:function(){var n=o();un(\"MessageCallback called from parent: \"+n),L(JSON.parse(n)),un(\" --\")}};function i(){return t.data.split(\"]\")[1].split(\":\")[0]}function o(){return t.data.substr(t.data.indexOf(\":\")+1)}function u(){return t.data.split(\":\")[2]in{true:1,false:1}}w===(\"\"+t.data).substr(0,13)&&(!1===l?(e=i())in r?r[e]():!n.exports&&\"iFrameResize\"in window||\"jQuery\"in window&&\"iFrameResize\"in window.jQuery.prototype||u()||an(\"Unexpected message (\"+t.data+\")\"):u()?r.init():un('Ignored message of type \"'+i()+'\". Received before initialization.'))}function jn(){\"loading\"!==document.readyState&&window.parent.postMessage(\"[iFrameResizerChild]Ready\",\"*\")}}()},7521(n){!function(t){\"use strict\";if(\"undefined\"!=typeof window){var e,r=0,i=!1,o=!1,u=\"[iFrameSizer]\",a=null,c=window.requestAnimationFrame,f={max:1,scroll:1,bodyScroll:1,documentElementScroll:1},s={},l=null,h={autoResize:!0,bodyBackground:null,bodyMargin:null,bodyMarginV1:8,bodyPadding:null,checkOrigin:!0,inPageLinks:!1,enablePublicMethods:!0,heightCalculationMethod:\"bodyOffset\",id:\"iFrameResizer\",interval:32,log:!1,maxHeight:1/0,maxWidth:1/0,minHeight:0,minWidth:0,resizeFrom:\"parent\",scrolling:!1,sizeHeight:!0,sizeWidth:!1,warningTimeout:5e3,tolerance:0,widthCalculationMethod:\"scroll\",closedCallback:function(){},initCallback:function(){},messageCallback:function(){b(\"MessageCallback function not defined\")},resizedCallback:function(){},scrollCallback:function(){return!0}},p={};window.jQuery&&((e=window.jQuery).fn?e.fn.iFrameResize||(e.fn.iFrameResize=function(n){return this.filter(\"iframe\").each(function(t,e){z(e,n)}).end()}):m(\"\",\"Unable to bind to jQuery, it is not fully loaded.\")),\"function\"==typeof define&&define.amd?define([],W):\"object\"==typeof n.exports&&(n.exports=W()),window.iFrameResize=window.iFrameResize||W()}function d(){return window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver}function v(n,t,e){\"addEventListener\"in window?n.addEventListener(t,e,!1):\"attachEvent\"in window&&n.attachEvent(\"on\"+t,e)}function g(n,t,e){\"removeEventListener\"in window?n.removeEventListener(t,e,!1):\"detachEvent\"in window&&n.detachEvent(\"on\"+t,e)}function y(n){return s[n]?s[n].log:i}function _(n,t){w(\"log\",n,t,y(n))}function m(n,t){w(\"info\",n,t,y(n))}function b(n,t){w(\"warn\",n,t,!0)}function w(n,t,e,r){!0===r&&\"object\"==typeof window.console&&console[n](function(n){return u+\"[\"+function(n){var t=\"Host page: \"+n;return window.top!==window.self&&(t=window.parentIFrame&&window.parentIFrame.getId?window.parentIFrame.getId()+\": \"+n:\"Nested host page: \"+n),t}(n)+\"]\"}(t),e)}function E(n){function t(){e(\"Height\"),e(\"Width\"),R(function(){j(E),I(O),l(\"resizedCallback\",E)},E,\"init\")}function e(n){var t=Number(s[O][\"max\"+n]),e=Number(s[O][\"min\"+n]),r=n.toLowerCase(),i=Number(E[r]);_(O,\"Checking \"+r+\" is in range \"+e+\"-\"+t),i<e&&(i=e,_(O,\"Set \"+r+\" to min value\")),i>t&&(i=t,_(O,\"Set \"+r+\" to max value\")),E[r]=\"\"+i}function r(n){return w.substr(w.indexOf(\":\")+7+n)}function i(n,t){var e,r;e=function(){var e,r;N(\"Send Page Info\",\"pageInfo:\"+(e=document.body.getBoundingClientRect(),r=E.iframe.getBoundingClientRect(),JSON.stringify({iframeHeight:r.height,iframeWidth:r.width,clientHeight:Math.max(document.documentElement.clientHeight,window.innerHeight||0),clientWidth:Math.max(document.documentElement.clientWidth,window.innerWidth||0),offsetTop:parseInt(r.top-e.top,10),offsetLeft:parseInt(r.left-e.left,10),scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset})),n,t)},p[r=t]||(p[r]=setTimeout(function(){p[r]=null,e()},32))}function o(n){var t=n.getBoundingClientRect();return T(O),{x:Math.floor(Number(t.left)+Number(a.x)),y:Math.floor(Number(t.top)+Number(a.y))}}function c(n){var t=n?o(E.iframe):{x:0,y:0},e={x:Number(E.width)+t.x,y:Number(E.height)+t.y};_(O,\"Reposition requested from iFrame (offset x:\"+t.x+\" y:\"+t.y+\")\"),window.top!==window.self?window.parentIFrame?window.parentIFrame[\"scrollTo\"+(n?\"Offset\":\"\")](e.x,e.y):b(O,\"Unable to scroll to requested position, window.parentIFrame not found\"):(a=e,f(),_(O,\"--\"))}function f(){!1!==l(\"scrollCallback\",a)?I(O):A()}function l(n,t){return x(O,n,t)}var h,d,y,w=n.data,E={},O=null;\"[iFrameResizerChild]Ready\"===w?function(){for(var n in s)N(\"iFrame requested init\",C(n),document.getElementById(n),n)}():u===(\"\"+w).substr(0,13)&&w.substr(13).split(\":\")[0]in s?(y=w.substr(13).split(\":\"),E={iframe:s[y[0]]&&s[y[0]].iframe,id:y[0],height:y[1],width:y[2],type:y[3]},O=E.id,s[O]&&(s[O].loaded=!0),(d=E.type in{true:1,false:1,undefined:1})&&_(O,\"Ignoring init message from meta parent page\"),!d&&function(n){var t=!0;return s[n]||(t=!1,b(E.type+\" No settings for \"+n+\". Message was: \"+w)),t}(O)&&(_(O,\"Received: \"+w),h=!0,null===E.iframe&&(b(O,\"IFrame (\"+E.id+\") not found\"),h=!1),h&&function(){var t,e=n.origin,r=s[O]&&s[O].checkOrigin;if(r&&\"\"+e!=\"null\"&&!(r.constructor===Array?function(){var n=0,t=!1;for(_(O,\"Checking connection is from allowed list of origins: \"+r);n<r.length;n++)if(r[n]===e){t=!0;break}return t}():(t=s[O]&&s[O].remoteHost,_(O,\"Checking connection is from: \"+t),e===t)))throw new Error(\"Unexpected message received from: \"+e+\" for \"+E.iframe.id+\". Message was: \"+n.data+\". This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.\");return!0}()&&function(){switch(s[O]&&s[O].firstRun&&s[O]&&(s[O].firstRun=!1),E.type){case\"close\":s[O].closeRequestCallback?x(O,\"closeRequestCallback\",s[O].iframe):S(E.iframe);break;case\"message\":n=r(6),_(O,\"MessageCallback passed: {iframe: \"+E.iframe.id+\", message: \"+n+\"}\"),l(\"messageCallback\",{iframe:E.iframe,message:JSON.parse(n)}),_(O,\"--\");break;case\"scrollTo\":c(!1);break;case\"scrollToOffset\":c(!0);break;case\"pageInfo\":i(s[O]&&s[O].iframe,O),function(){function n(n,r){function o(){s[e]?i(s[e].iframe,e):t()}[\"scroll\",\"resize\"].forEach(function(t){_(e,n+t+\" listener for sendPageInfo\"),r(window,t,o)})}function t(){n(\"Remove \",g)}var e=O;n(\"Add \",v),s[e]&&(s[e].stopPageInfo=t)}();break;case\"pageInfoStop\":s[O]&&s[O].stopPageInfo&&(s[O].stopPageInfo(),delete s[O].stopPageInfo);break;case\"inPageLink\":!function(n){var t,e=n.split(\"#\")[1]||\"\",r=decodeURIComponent(e),i=document.getElementById(r)||document.getElementsByName(r)[0];i?(t=o(i),_(O,\"Moving to in page link (#\"+e+\") at x: \"+t.x+\" y: \"+t.y),a={x:t.x,y:t.y},f(),_(O,\"--\")):window.top!==window.self?window.parentIFrame?window.parentIFrame.moveToAnchor(e):_(O,\"In page link #\"+e+\" not found and window.parentIFrame not found\"):_(O,\"In page link #\"+e+\" not found\")}(r(9));break;case\"reset\":k(E);break;case\"init\":t(),l(\"initCallback\",E.iframe);break;default:t()}var n}())):m(O,\"Ignored: \"+w)}function x(n,t,e){var r=null,i=null;if(s[n]){if(\"function\"!=typeof(r=s[n][t]))throw new TypeError(t+\" on iFrame[\"+n+\"] is not a function\");i=r(e)}return i}function O(n){var t=n.id;delete s[t]}function S(n){var t=n.id;_(t,\"Removing iFrame: \"+t);try{n.parentNode&&n.parentNode.removeChild(n)}catch(n){}x(t,\"closedCallback\",t),_(t,\"--\"),O(n)}function T(n){null===a&&_(n,\"Get page position: \"+(a={x:window.pageXOffset!==t?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==t?window.pageYOffset:document.documentElement.scrollTop}).x+\",\"+a.y)}function I(n){null!==a&&(window.scrollTo(a.x,a.y),_(n,\"Set page position: \"+a.x+\",\"+a.y),A())}function A(){a=null}function k(n){_(n.id,\"Size reset requested by \"+(\"init\"===n.type?\"host page\":\"iFrame\")),T(n.id),R(function(){j(n),N(\"reset\",\"reset\",n.iframe,n.id)},n,\"reset\")}function j(n){function t(t){!function(t){n.id?(n.iframe.style[t]=n[t]+\"px\",_(n.id,\"IFrame (\"+e+\") \"+t+\" set to \"+n[t]+\"px\")):_(\"undefined\",\"messageData id not set\")}(t),function(t){o||\"0\"!==n[t]||(o=!0,_(e,\"Hidden iFrame detected, creating visibility listener\"),function(){function n(){function n(n){function t(t){return\"0px\"===(s[n]&&s[n].iframe.style[t])}s[n]&&null!==s[n].iframe.offsetParent&&(t(\"height\")||t(\"width\"))&&N(\"Visibility change\",\"resize\",s[n].iframe,n)}for(var t in s)n(t)}function t(t){_(\"window\",\"Mutation observed: \"+t[0].target+\" \"+t[0].type),M(n,16)}var e,r=d();r&&(e=document.querySelector(\"body\"),new r(t).observe(e,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}))}())}(t)}var e=n.iframe.id;s[e]&&(s[e].sizeHeight&&t(\"height\"),s[e].sizeWidth&&t(\"width\"))}function R(n,t,e){e!==t.type&&c?(_(t.id,\"Requesting animation frame\"),c(n)):n()}function N(n,t,e,r,i){var o,a=!1;r=r||e.id,s[r]&&(e&&\"contentWindow\"in e&&null!==e.contentWindow?(o=s[r]&&s[r].targetOrigin,_(r,\"[\"+n+\"] Sending msg to iframe[\"+r+\"] (\"+t+\") targetOrigin: \"+o),e.contentWindow.postMessage(u+t,o)):b(r,\"[\"+n+\"] IFrame(\"+r+\") not found\"),i&&s[r]&&s[r].warningTimeout&&(s[r].msgTimeout=setTimeout(function(){!s[r]||s[r].loaded||a||(a=!0,b(r,\"IFrame has not responded within \"+s[r].warningTimeout/1e3+\" seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.\"))},s[r].warningTimeout)))}function C(n){return n+\":\"+s[n].bodyMarginV1+\":\"+s[n].sizeWidth+\":\"+s[n].log+\":\"+s[n].interval+\":\"+s[n].enablePublicMethods+\":\"+s[n].autoResize+\":\"+s[n].bodyMargin+\":\"+s[n].heightCalculationMethod+\":\"+s[n].bodyBackground+\":\"+s[n].bodyPadding+\":\"+s[n].tolerance+\":\"+s[n].inPageLinks+\":\"+s[n].resizeFrom+\":\"+s[n].widthCalculationMethod}function z(n,e){var o,u,a=function(t){var o;return\"\"===t&&(n.id=(o=e&&e.id||h.id+r++,null!==document.getElementById(o)&&(o+=r++),t=o),i=(e||{}).log,_(t,\"Added missing iframe ID: \"+t+\" (\"+n.src+\")\")),t}(n.id);a in s&&\"iFrameResizer\"in n?b(a,\"Ignored iFrame, already setup.\"):(function(t){var e;t=t||{},s[a]={firstRun:!0,iframe:n,remoteHost:n.src.split(\"/\").slice(0,3).join(\"/\")},function(n){if(\"object\"!=typeof n)throw new TypeError(\"Options is not an object\")}(t),function(n){for(var t in h)h.hasOwnProperty(t)&&(s[a][t]=n.hasOwnProperty(t)?n[t]:h[t])}(t),s[a]&&(s[a].targetOrigin=!0===s[a].checkOrigin?\"\"===(e=s[a].remoteHost)||\"file://\"===e?\"*\":e:\"*\")}(e),function(){switch(_(a,\"IFrame scrolling \"+(s[a]&&s[a].scrolling?\"enabled\":\"disabled\")+\" for \"+a),n.style.overflow=!1===(s[a]&&s[a].scrolling)?\"hidden\":\"auto\",s[a]&&s[a].scrolling){case\"omit\":break;case!0:n.scrolling=\"yes\";break;case!1:n.scrolling=\"no\";break;default:n.scrolling=s[a]?s[a].scrolling:\"no\"}}(),function(){function t(t){1/0!==s[a][t]&&0!==s[a][t]&&(n.style[t]=s[a][t]+\"px\",_(a,\"Set \"+t+\" = \"+s[a][t]+\"px\"))}function e(n){if(s[a][\"min\"+n]>s[a][\"max\"+n])throw new Error(\"Value for min\"+n+\" can not be greater than max\"+n)}e(\"Height\"),e(\"Width\"),t(\"maxHeight\"),t(\"minHeight\"),t(\"maxWidth\"),t(\"minWidth\")}(),\"number\"!=typeof(s[a]&&s[a].bodyMargin)&&\"0\"!==(s[a]&&s[a].bodyMargin)||(s[a].bodyMarginV1=s[a].bodyMargin,s[a].bodyMargin=s[a].bodyMargin+\"px\"),o=C(a),(u=d())&&function(t){n.parentNode&&new t(function(t){t.forEach(function(t){Array.prototype.slice.call(t.removedNodes).forEach(function(t){t===n&&S(n)})})}).observe(n.parentNode,{childList:!0})}(u),v(n,\"load\",function(){var e,r;N(\"iFrame.onload\",o,n,t,!0),e=s[a]&&s[a].firstRun,r=s[a]&&s[a].heightCalculationMethod in f,!e&&r&&k({iframe:n,height:0,width:0,type:\"init\"})}),N(\"init\",o,n,t,!0),Function.prototype.bind&&s[a]&&(s[a].iframe.iFrameResizer={close:S.bind(null,s[a].iframe),removeListeners:O.bind(null,s[a].iframe),resize:N.bind(null,\"Window resize\",\"resize\",s[a].iframe),moveToAnchor:function(n){N(\"Move to anchor\",\"moveToAnchor:\"+n,s[a].iframe,a)},sendMessage:function(n){N(\"Send Message\",\"message:\"+(n=JSON.stringify(n)),s[a].iframe,a)}}))}function M(n,t){null===l&&(l=setTimeout(function(){l=null,n()},t))}function L(n){_(\"window\",\"Trigger event: \"+n),M(function(){F(\"Window \"+n,\"resize\")},16)}function P(){\"hidden\"!==document.visibilityState&&(_(\"document\",\"Trigger event: Visiblity change\"),M(function(){F(\"Tab Visable\",\"resize\")},16))}function F(n,t){function e(n){return s[n]&&\"parent\"===s[n].resizeFrom&&s[n].autoResize&&!s[n].firstRun}for(var r in s)e(r)&&N(n,t,document.getElementById(r),r)}function W(){function n(n,t){t&&(function(){if(!t.tagName)throw new TypeError(\"Object is not a valid DOM element\");if(\"IFRAME\"!==t.tagName.toUpperCase())throw new TypeError(\"Expected <IFRAME> tag, found <\"+t.tagName+\">\")}(),z(t,n),e.push(t))}var e;return function(){var n,t=[\"moz\",\"webkit\",\"o\",\"ms\"];for(n=0;n<t.length&&!c;n+=1)c=window[t[n]+\"RequestAnimationFrame\"];c||_(\"setup\",\"RequestAnimationFrame not supported\")}(),v(window,\"message\",E),v(window,\"resize\",function(){L(\"resize\")}),v(document,\"visibilitychange\",P),v(document,\"-webkit-visibilitychange\",P),v(window,\"focusin\",function(){L(\"focus\")}),v(window,\"focus\",function(){L(\"focus\")}),function(r,i){switch(e=[],function(n){n&&n.enablePublicMethods&&b(\"enablePublicMethods option has been removed, public methods are now always available in the iFrame\")}(r),typeof i){case\"undefined\":case\"string\":Array.prototype.forEach.call(document.querySelectorAll(i||\"iframe\"),n.bind(t,r));break;case\"object\":n(r,i);break;default:throw new TypeError(\"Unexpected data type (\"+typeof i+\")\")}return e}}}()},344(n,t,e){t.iframeResizer=e(7521),e(5990)},9440(n,t,e){n=e.nmd(n),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,f=1/0,s=9007199254740991,l=NaN,h=4294967295,p=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",v=\"[object Array]\",g=\"[object Boolean]\",y=\"[object Date]\",_=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",E=\"[object Number]\",x=\"[object Object]\",O=\"[object Promise]\",S=\"[object RegExp]\",T=\"[object Set]\",I=\"[object String]\",A=\"[object Symbol]\",k=\"[object WeakMap]\",j=\"[object ArrayBuffer]\",R=\"[object DataView]\",N=\"[object Float32Array]\",C=\"[object Float64Array]\",z=\"[object Int8Array]\",M=\"[object Int16Array]\",L=\"[object Int32Array]\",P=\"[object Uint8Array]\",F=\"[object Uint8ClampedArray]\",W=\"[object Uint16Array]\",D=\"[object Uint32Array]\",U=/\\b__p \\+= '';/g,B=/\\b(__p \\+=) '' \\+/g,H=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,$=/&(?:amp|lt|gt|quot|#39);/g,q=/[&<>\"']/g,V=RegExp($.source),G=RegExp(q.source),X=/<%-([\\s\\S]+?)%>/g,Y=/<%([\\s\\S]+?)%>/g,K=/<%=([\\s\\S]+?)%>/g,Z=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,J=/^\\w*$/,Q=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,nn=/[\\\\^$.*+?()[\\]{}|]/g,tn=RegExp(nn.source),en=/^\\s+/,rn=/\\s/,on=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,un=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,an=/,? & /,cn=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,fn=/[()=,{}\\[\\]\\/\\s]/,sn=/\\\\(\\\\)?/g,ln=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,hn=/\\w*$/,pn=/^[-+]0x[0-9a-f]+$/i,dn=/^0b[01]+$/i,vn=/^\\[object .+?Constructor\\]$/,gn=/^0o[0-7]+$/i,yn=/^(?:0|[1-9]\\d*)$/,_n=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,mn=/($^)/,bn=/['\\n\\r\\u2028\\u2029\\\\]/g,wn=\"\\\\ud800-\\\\udfff\",En=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",xn=\"\\\\u2700-\\\\u27bf\",On=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Sn=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Tn=\"\\\\ufe0e\\\\ufe0f\",In=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",An=\"[\"+wn+\"]\",kn=\"[\"+In+\"]\",jn=\"[\"+En+\"]\",Rn=\"\\\\d+\",Nn=\"[\"+xn+\"]\",Cn=\"[\"+On+\"]\",zn=\"[^\"+wn+In+Rn+xn+On+Sn+\"]\",Mn=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Ln=\"[^\"+wn+\"]\",Pn=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Fn=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Wn=\"[\"+Sn+\"]\",Dn=\"\\\\u200d\",Un=\"(?:\"+Cn+\"|\"+zn+\")\",Bn=\"(?:\"+Wn+\"|\"+zn+\")\",Hn=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",$n=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",qn=\"(?:\"+jn+\"|\"+Mn+\")?\",Vn=\"[\"+Tn+\"]?\",Gn=Vn+qn+\"(?:\"+Dn+\"(?:\"+[Ln,Pn,Fn].join(\"|\")+\")\"+Vn+qn+\")*\",Xn=\"(?:\"+[Nn,Pn,Fn].join(\"|\")+\")\"+Gn,Yn=\"(?:\"+[Ln+jn+\"?\",jn,Pn,Fn,An].join(\"|\")+\")\",Kn=RegExp(\"['’]\",\"g\"),Zn=RegExp(jn,\"g\"),Jn=RegExp(Mn+\"(?=\"+Mn+\")|\"+Yn+Gn,\"g\"),Qn=RegExp([Wn+\"?\"+Cn+\"+\"+Hn+\"(?=\"+[kn,Wn,\"$\"].join(\"|\")+\")\",Bn+\"+\"+$n+\"(?=\"+[kn,Wn+Un,\"$\"].join(\"|\")+\")\",Wn+\"?\"+Un+\"+\"+Hn,Wn+\"+\"+$n,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Rn,Xn].join(\"|\"),\"g\"),nt=RegExp(\"[\"+Dn+wn+En+Tn+\"]\"),tt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,et=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],rt=-1,it={};it[N]=it[C]=it[z]=it[M]=it[L]=it[P]=it[F]=it[W]=it[D]=!0,it[d]=it[v]=it[j]=it[g]=it[R]=it[y]=it[_]=it[m]=it[w]=it[E]=it[x]=it[S]=it[T]=it[I]=it[k]=!1;var ot={};ot[d]=ot[v]=ot[j]=ot[R]=ot[g]=ot[y]=ot[N]=ot[C]=ot[z]=ot[M]=ot[L]=ot[w]=ot[E]=ot[x]=ot[S]=ot[T]=ot[I]=ot[A]=ot[P]=ot[F]=ot[W]=ot[D]=!0,ot[_]=ot[m]=ot[k]=!1;var ut={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},at=parseFloat,ct=parseInt,ft=\"object\"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,st=\"object\"==typeof self&&self&&self.Object===Object&&self,lt=ft||st||Function(\"return this\")(),ht=t&&!t.nodeType&&t,pt=ht&&n&&!n.nodeType&&n,dt=pt&&pt.exports===ht,vt=dt&&ft.process,gt=function(){try{return pt&&pt.require&&pt.require(\"util\").types||vt&&vt.binding&&vt.binding(\"util\")}catch(n){}}(),yt=gt&&gt.isArrayBuffer,_t=gt&&gt.isDate,mt=gt&&gt.isMap,bt=gt&&gt.isRegExp,wt=gt&&gt.isSet,Et=gt&&gt.isTypedArray;function xt(n,t,e){switch(e.length){case 0:return n.call(t);case 1:return n.call(t,e[0]);case 2:return n.call(t,e[0],e[1]);case 3:return n.call(t,e[0],e[1],e[2])}return n.apply(t,e)}function Ot(n,t,e,r){for(var i=-1,o=null==n?0:n.length;++i<o;){var u=n[i];t(r,u,e(u),n)}return r}function St(n,t){for(var e=-1,r=null==n?0:n.length;++e<r&&!1!==t(n[e],e,n););return n}function Tt(n,t){for(var e=null==n?0:n.length;e--&&!1!==t(n[e],e,n););return n}function It(n,t){for(var e=-1,r=null==n?0:n.length;++e<r;)if(!t(n[e],e,n))return!1;return!0}function At(n,t){for(var e=-1,r=null==n?0:n.length,i=0,o=[];++e<r;){var u=n[e];t(u,e,n)&&(o[i++]=u)}return o}function kt(n,t){return!(null==n||!n.length)&&Wt(n,t,0)>-1}function jt(n,t,e){for(var r=-1,i=null==n?0:n.length;++r<i;)if(e(t,n[r]))return!0;return!1}function Rt(n,t){for(var e=-1,r=null==n?0:n.length,i=Array(r);++e<r;)i[e]=t(n[e],e,n);return i}function Nt(n,t){for(var e=-1,r=t.length,i=n.length;++e<r;)n[i+e]=t[e];return n}function Ct(n,t,e,r){var i=-1,o=null==n?0:n.length;for(r&&o&&(e=n[++i]);++i<o;)e=t(e,n[i],i,n);return e}function zt(n,t,e,r){var i=null==n?0:n.length;for(r&&i&&(e=n[--i]);i--;)e=t(e,n[i],i,n);return e}function Mt(n,t){for(var e=-1,r=null==n?0:n.length;++e<r;)if(t(n[e],e,n))return!0;return!1}var Lt=Ht(\"length\");function Pt(n,t,e){var r;return e(n,function(n,e,i){if(t(n,e,i))return r=e,!1}),r}function Ft(n,t,e,r){for(var i=n.length,o=e+(r?1:-1);r?o--:++o<i;)if(t(n[o],o,n))return o;return-1}function Wt(n,t,e){return t==t?function(n,t,e){for(var r=e-1,i=n.length;++r<i;)if(n[r]===t)return r;return-1}(n,t,e):Ft(n,Ut,e)}function Dt(n,t,e,r){for(var i=e-1,o=n.length;++i<o;)if(r(n[i],t))return i;return-1}function Ut(n){return n!=n}function Bt(n,t){var e=null==n?0:n.length;return e?Vt(n,t)/e:l}function Ht(n){return function(t){return null==t?r:t[n]}}function $t(n){return function(t){return null==n?r:n[t]}}function qt(n,t,e,r,i){return i(n,function(n,i,o){e=r?(r=!1,n):t(e,n,i,o)}),e}function Vt(n,t){for(var e,i=-1,o=n.length;++i<o;){var u=t(n[i]);u!==r&&(e=e===r?u:e+u)}return e}function Gt(n,t){for(var e=-1,r=Array(n);++e<n;)r[e]=t(e);return r}function Xt(n){return n?n.slice(0,le(n)+1).replace(en,\"\"):n}function Yt(n){return function(t){return n(t)}}function Kt(n,t){return Rt(t,function(t){return n[t]})}function Zt(n,t){return n.has(t)}function Jt(n,t){for(var e=-1,r=n.length;++e<r&&Wt(t,n[e],0)>-1;);return e}function Qt(n,t){for(var e=n.length;e--&&Wt(t,n[e],0)>-1;);return e}var ne=$t({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),te=$t({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function ee(n){return\"\\\\\"+ut[n]}function re(n){return nt.test(n)}function ie(n){var t=-1,e=Array(n.size);return n.forEach(function(n,r){e[++t]=[r,n]}),e}function oe(n,t){return function(e){return n(t(e))}}function ue(n,t){for(var e=-1,r=n.length,i=0,o=[];++e<r;){var a=n[e];a!==t&&a!==u||(n[e]=u,o[i++]=e)}return o}function ae(n){var t=-1,e=Array(n.size);return n.forEach(function(n){e[++t]=n}),e}function ce(n){var t=-1,e=Array(n.size);return n.forEach(function(n){e[++t]=[n,n]}),e}function fe(n){return re(n)?function(n){for(var t=Jn.lastIndex=0;Jn.test(n);)++t;return t}(n):Lt(n)}function se(n){return re(n)?function(n){return n.match(Jn)||[]}(n):function(n){return n.split(\"\")}(n)}function le(n){for(var t=n.length;t--&&rn.test(n.charAt(t)););return t}var he=$t({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pe=function n(t){var e,rn=(t=null==t?lt:pe.defaults(lt.Object(),t,pe.pick(lt,et))).Array,wn=t.Date,En=t.Error,xn=t.Function,On=t.Math,Sn=t.Object,Tn=t.RegExp,In=t.String,An=t.TypeError,kn=rn.prototype,jn=xn.prototype,Rn=Sn.prototype,Nn=t[\"__core-js_shared__\"],Cn=jn.toString,zn=Rn.hasOwnProperty,Mn=0,Ln=(e=/[^.]+$/.exec(Nn&&Nn.keys&&Nn.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+e:\"\",Pn=Rn.toString,Fn=Cn.call(Sn),Wn=lt._,Dn=Tn(\"^\"+Cn.call(zn).replace(nn,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Un=dt?t.Buffer:r,Bn=t.Symbol,Hn=t.Uint8Array,$n=Un?Un.allocUnsafe:r,qn=oe(Sn.getPrototypeOf,Sn),Vn=Sn.create,Gn=Rn.propertyIsEnumerable,Xn=kn.splice,Yn=Bn?Bn.isConcatSpreadable:r,Jn=Bn?Bn.iterator:r,nt=Bn?Bn.toStringTag:r,ut=function(){try{var n=co(Sn,\"defineProperty\");return n({},\"\",{}),n}catch(n){}}(),ft=t.clearTimeout!==lt.clearTimeout&&t.clearTimeout,st=wn&&wn.now!==lt.Date.now&&wn.now,ht=t.setTimeout!==lt.setTimeout&&t.setTimeout,pt=On.ceil,vt=On.floor,gt=Sn.getOwnPropertySymbols,Lt=Un?Un.isBuffer:r,$t=t.isFinite,de=kn.join,ve=oe(Sn.keys,Sn),ge=On.max,ye=On.min,_e=wn.now,me=t.parseInt,be=On.random,we=kn.reverse,Ee=co(t,\"DataView\"),xe=co(t,\"Map\"),Oe=co(t,\"Promise\"),Se=co(t,\"Set\"),Te=co(t,\"WeakMap\"),Ie=co(Sn,\"create\"),Ae=Te&&new Te,ke={},je=Po(Ee),Re=Po(xe),Ne=Po(Oe),Ce=Po(Se),ze=Po(Te),Me=Bn?Bn.prototype:r,Le=Me?Me.valueOf:r,Pe=Me?Me.toString:r;function Fe(n){if(na(n)&&!Hu(n)&&!(n instanceof Be)){if(n instanceof Ue)return n;if(zn.call(n,\"__wrapped__\"))return Fo(n)}return new Ue(n)}var We=function(){function n(){}return function(t){if(!Qu(t))return{};if(Vn)return Vn(t);n.prototype=t;var e=new n;return n.prototype=r,e}}();function De(){}function Ue(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=r}function Be(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function He(n){var t=-1,e=null==n?0:n.length;for(this.clear();++t<e;){var r=n[t];this.set(r[0],r[1])}}function $e(n){var t=-1,e=null==n?0:n.length;for(this.clear();++t<e;){var r=n[t];this.set(r[0],r[1])}}function qe(n){var t=-1,e=null==n?0:n.length;for(this.clear();++t<e;){var r=n[t];this.set(r[0],r[1])}}function Ve(n){var t=-1,e=null==n?0:n.length;for(this.__data__=new qe;++t<e;)this.add(n[t])}function Ge(n){var t=this.__data__=new $e(n);this.size=t.size}function Xe(n,t){var e=Hu(n),r=!e&&Bu(n),i=!e&&!r&&Gu(n),o=!e&&!r&&!i&&ca(n),u=e||r||i||o,a=u?Gt(n.length,In):[],c=a.length;for(var f in n)!t&&!zn.call(n,f)||u&&(\"length\"==f||i&&(\"offset\"==f||\"parent\"==f)||o&&(\"buffer\"==f||\"byteLength\"==f||\"byteOffset\"==f)||go(f,c))||a.push(f);return a}function Ye(n){var t=n.length;return t?n[qr(0,t-1)]:r}function Ke(n,t){return No(Ti(n),or(t,0,n.length))}function Ze(n){return No(Ti(n))}function Je(n,t,e){(e!==r&&!Wu(n[t],e)||e===r&&!(t in n))&&rr(n,t,e)}function Qe(n,t,e){var i=n[t];zn.call(n,t)&&Wu(i,e)&&(e!==r||t in n)||rr(n,t,e)}function nr(n,t){for(var e=n.length;e--;)if(Wu(n[e][0],t))return e;return-1}function tr(n,t,e,r){return sr(n,function(n,i,o){t(r,n,e(n),o)}),r}function er(n,t){return n&&Ii(t,ja(t),n)}function rr(n,t,e){\"__proto__\"==t&&ut?ut(n,t,{configurable:!0,enumerable:!0,value:e,writable:!0}):n[t]=e}function ir(n,t){for(var e=-1,i=t.length,o=rn(i),u=null==n;++e<i;)o[e]=u?r:Sa(n,t[e]);return o}function or(n,t,e){return n==n&&(e!==r&&(n=n<=e?n:e),t!==r&&(n=n>=t?n:t)),n}function ur(n,t,e,i,o,u){var a,c=1&t,f=2&t,s=4&t;if(e&&(a=o?e(n,i,o,u):e(n)),a!==r)return a;if(!Qu(n))return n;var l=Hu(n);if(l){if(a=function(n){var t=n.length,e=new n.constructor(t);return t&&\"string\"==typeof n[0]&&zn.call(n,\"index\")&&(e.index=n.index,e.input=n.input),e}(n),!c)return Ti(n,a)}else{var h=lo(n),p=h==m||h==b;if(Gu(n))return bi(n,c);if(h==x||h==d||p&&!o){if(a=f||p?{}:po(n),!c)return f?function(n,t){return Ii(n,so(n),t)}(n,function(n,t){return n&&Ii(t,Ra(t),n)}(a,n)):function(n,t){return Ii(n,fo(n),t)}(n,er(a,n))}else{if(!ot[h])return o?n:{};a=function(n,t,e){var r,i=n.constructor;switch(t){case j:return wi(n);case g:case y:return new i(+n);case R:return function(n,t){var e=t?wi(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}(n,e);case N:case C:case z:case M:case L:case P:case F:case W:case D:return Ei(n,e);case w:return new i;case E:case I:return new i(n);case S:return function(n){var t=new n.constructor(n.source,hn.exec(n));return t.lastIndex=n.lastIndex,t}(n);case T:return new i;case A:return r=n,Le?Sn(Le.call(r)):{}}}(n,h,c)}}u||(u=new Ge);var v=u.get(n);if(v)return v;u.set(n,a),oa(n)?n.forEach(function(r){a.add(ur(r,t,e,r,n,u))}):ta(n)&&n.forEach(function(r,i){a.set(i,ur(r,t,e,i,n,u))});var _=l?r:(s?f?to:no:f?Ra:ja)(n);return St(_||n,function(r,i){_&&(r=n[i=r]),Qe(a,i,ur(r,t,e,i,n,u))}),a}function ar(n,t,e){var i=e.length;if(null==n)return!i;for(n=Sn(n);i--;){var o=e[i],u=t[o],a=n[o];if(a===r&&!(o in n)||!u(a))return!1}return!0}function cr(n,t,e){if(\"function\"!=typeof n)throw new An(i);return Ao(function(){n.apply(r,e)},t)}function fr(n,t,e,r){var i=-1,o=kt,u=!0,a=n.length,c=[],f=t.length;if(!a)return c;e&&(t=Rt(t,Yt(e))),r?(o=jt,u=!1):t.length>=200&&(o=Zt,u=!1,t=new Ve(t));n:for(;++i<a;){var s=n[i],l=null==e?s:e(s);if(s=r||0!==s?s:0,u&&l==l){for(var h=f;h--;)if(t[h]===l)continue n;c.push(s)}else o(t,l,r)||c.push(s)}return c}Fe.templateSettings={escape:X,evaluate:Y,interpolate:K,variable:\"\",imports:{_:Fe}},Fe.prototype=De.prototype,Fe.prototype.constructor=Fe,Ue.prototype=We(De.prototype),Ue.prototype.constructor=Ue,Be.prototype=We(De.prototype),Be.prototype.constructor=Be,He.prototype.clear=function(){this.__data__=Ie?Ie(null):{},this.size=0},He.prototype.delete=function(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t},He.prototype.get=function(n){var t=this.__data__;if(Ie){var e=t[n];return e===o?r:e}return zn.call(t,n)?t[n]:r},He.prototype.has=function(n){var t=this.__data__;return Ie?t[n]!==r:zn.call(t,n)},He.prototype.set=function(n,t){var e=this.__data__;return this.size+=this.has(n)?0:1,e[n]=Ie&&t===r?o:t,this},$e.prototype.clear=function(){this.__data__=[],this.size=0},$e.prototype.delete=function(n){var t=this.__data__,e=nr(t,n);return!(e<0||(e==t.length-1?t.pop():Xn.call(t,e,1),--this.size,0))},$e.prototype.get=function(n){var t=this.__data__,e=nr(t,n);return e<0?r:t[e][1]},$e.prototype.has=function(n){return nr(this.__data__,n)>-1},$e.prototype.set=function(n,t){var e=this.__data__,r=nr(e,n);return r<0?(++this.size,e.push([n,t])):e[r][1]=t,this},qe.prototype.clear=function(){this.size=0,this.__data__={hash:new He,map:new(xe||$e),string:new He}},qe.prototype.delete=function(n){var t=uo(this,n).delete(n);return this.size-=t?1:0,t},qe.prototype.get=function(n){return uo(this,n).get(n)},qe.prototype.has=function(n){return uo(this,n).has(n)},qe.prototype.set=function(n,t){var e=uo(this,n),r=e.size;return e.set(n,t),this.size+=e.size==r?0:1,this},Ve.prototype.add=Ve.prototype.push=function(n){return this.__data__.set(n,o),this},Ve.prototype.has=function(n){return this.__data__.has(n)},Ge.prototype.clear=function(){this.__data__=new $e,this.size=0},Ge.prototype.delete=function(n){var t=this.__data__,e=t.delete(n);return this.size=t.size,e},Ge.prototype.get=function(n){return this.__data__.get(n)},Ge.prototype.has=function(n){return this.__data__.has(n)},Ge.prototype.set=function(n,t){var e=this.__data__;if(e instanceof $e){var r=e.__data__;if(!xe||r.length<199)return r.push([n,t]),this.size=++e.size,this;e=this.__data__=new qe(r)}return e.set(n,t),this.size=e.size,this};var sr=ji(_r),lr=ji(mr,!0);function hr(n,t){var e=!0;return sr(n,function(n,r,i){return e=!!t(n,r,i)}),e}function pr(n,t,e){for(var i=-1,o=n.length;++i<o;){var u=n[i],a=t(u);if(null!=a&&(c===r?a==a&&!aa(a):e(a,c)))var c=a,f=u}return f}function dr(n,t){var e=[];return sr(n,function(n,r,i){t(n,r,i)&&e.push(n)}),e}function vr(n,t,e,r,i){var o=-1,u=n.length;for(e||(e=vo),i||(i=[]);++o<u;){var a=n[o];t>0&&e(a)?t>1?vr(a,t-1,e,r,i):Nt(i,a):r||(i[i.length]=a)}return i}var gr=Ri(),yr=Ri(!0);function _r(n,t){return n&&gr(n,t,ja)}function mr(n,t){return n&&yr(n,t,ja)}function br(n,t){return At(t,function(t){return Ku(n[t])})}function wr(n,t){for(var e=0,i=(t=gi(t,n)).length;null!=n&&e<i;)n=n[Lo(t[e++])];return e&&e==i?n:r}function Er(n,t,e){var r=t(n);return Hu(n)?r:Nt(r,e(n))}function xr(n){return null==n?n===r?\"[object Undefined]\":\"[object Null]\":nt&&nt in Sn(n)?function(n){var t=zn.call(n,nt),e=n[nt];try{n[nt]=r;var i=!0}catch(n){}var o=Pn.call(n);return i&&(t?n[nt]=e:delete n[nt]),o}(n):function(n){return Pn.call(n)}(n)}function Or(n,t){return n>t}function Sr(n,t){return null!=n&&zn.call(n,t)}function Tr(n,t){return null!=n&&t in Sn(n)}function Ir(n,t,e){for(var i=e?jt:kt,o=n[0].length,u=n.length,a=u,c=rn(u),f=1/0,s=[];a--;){var l=n[a];a&&t&&(l=Rt(l,Yt(t))),f=ye(l.length,f),c[a]=!e&&(t||o>=120&&l.length>=120)?new Ve(a&&l):r}l=n[0];var h=-1,p=c[0];n:for(;++h<o&&s.length<f;){var d=l[h],v=t?t(d):d;if(d=e||0!==d?d:0,!(p?Zt(p,v):i(s,v,e))){for(a=u;--a;){var g=c[a];if(!(g?Zt(g,v):i(n[a],v,e)))continue n}p&&p.push(v),s.push(d)}}return s}function Ar(n,t,e){var i=null==(n=So(n,t=gi(t,n)))?n:n[Lo(Yo(t))];return null==i?r:xt(i,n,e)}function kr(n){return na(n)&&xr(n)==d}function jr(n,t,e,i,o){return n===t||(null==n||null==t||!na(n)&&!na(t)?n!=n&&t!=t:function(n,t,e,i,o,u){var a=Hu(n),c=Hu(t),f=a?v:lo(n),s=c?v:lo(t),l=(f=f==d?x:f)==x,h=(s=s==d?x:s)==x,p=f==s;if(p&&Gu(n)){if(!Gu(t))return!1;a=!0,l=!1}if(p&&!l)return u||(u=new Ge),a||ca(n)?Ji(n,t,e,i,o,u):function(n,t,e,r,i,o,u){switch(e){case R:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1;n=n.buffer,t=t.buffer;case j:return!(n.byteLength!=t.byteLength||!o(new Hn(n),new Hn(t)));case g:case y:case E:return Wu(+n,+t);case _:return n.name==t.name&&n.message==t.message;case S:case I:return n==t+\"\";case w:var a=ie;case T:var c=1&r;if(a||(a=ae),n.size!=t.size&&!c)return!1;var f=u.get(n);if(f)return f==t;r|=2,u.set(n,t);var s=Ji(a(n),a(t),r,i,o,u);return u.delete(n),s;case A:if(Le)return Le.call(n)==Le.call(t)}return!1}(n,t,f,e,i,o,u);if(!(1&e)){var m=l&&zn.call(n,\"__wrapped__\"),b=h&&zn.call(t,\"__wrapped__\");if(m||b){var O=m?n.value():n,k=b?t.value():t;return u||(u=new Ge),o(O,k,e,i,u)}}return!!p&&(u||(u=new Ge),function(n,t,e,i,o,u){var a=1&e,c=no(n),f=c.length;if(f!=no(t).length&&!a)return!1;for(var s=f;s--;){var l=c[s];if(!(a?l in t:zn.call(t,l)))return!1}var h=u.get(n),p=u.get(t);if(h&&p)return h==t&&p==n;var d=!0;u.set(n,t),u.set(t,n);for(var v=a;++s<f;){var g=n[l=c[s]],y=t[l];if(i)var _=a?i(y,g,l,t,n,u):i(g,y,l,n,t,u);if(!(_===r?g===y||o(g,y,e,i,u):_)){d=!1;break}v||(v=\"constructor\"==l)}if(d&&!v){var m=n.constructor,b=t.constructor;m==b||!(\"constructor\"in n)||!(\"constructor\"in t)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return u.delete(n),u.delete(t),d}(n,t,e,i,o,u))}(n,t,e,i,jr,o))}function Rr(n,t,e,i){var o=e.length,u=o,a=!i;if(null==n)return!u;for(n=Sn(n);o--;){var c=e[o];if(a&&c[2]?c[1]!==n[c[0]]:!(c[0]in n))return!1}for(;++o<u;){var f=(c=e[o])[0],s=n[f],l=c[1];if(a&&c[2]){if(s===r&&!(f in n))return!1}else{var h=new Ge;if(i)var p=i(s,l,f,n,t,h);if(!(p===r?jr(l,s,3,i,h):p))return!1}}return!0}function Nr(n){return!(!Qu(n)||(t=n,Ln&&Ln in t))&&(Ku(n)?Dn:vn).test(Po(n));var t}function Cr(n){return\"function\"==typeof n?n:null==n?ec:\"object\"==typeof n?Hu(n)?Fr(n[0],n[1]):Pr(n):lc(n)}function zr(n){if(!wo(n))return ve(n);var t=[];for(var e in Sn(n))zn.call(n,e)&&\"constructor\"!=e&&t.push(e);return t}function Mr(n,t){return n<t}function Lr(n,t){var e=-1,r=qu(n)?rn(n.length):[];return sr(n,function(n,i,o){r[++e]=t(n,i,o)}),r}function Pr(n){var t=ao(n);return 1==t.length&&t[0][2]?xo(t[0][0],t[0][1]):function(e){return e===n||Rr(e,n,t)}}function Fr(n,t){return _o(n)&&Eo(t)?xo(Lo(n),t):function(e){var i=Sa(e,n);return i===r&&i===t?Ta(e,n):jr(t,i,3)}}function Wr(n,t,e,i,o){n!==t&&gr(t,function(u,a){if(o||(o=new Ge),Qu(u))!function(n,t,e,i,o,u,a){var c=To(n,e),f=To(t,e),s=a.get(f);if(s)Je(n,e,s);else{var l=u?u(c,f,e+\"\",n,t,a):r,h=l===r;if(h){var p=Hu(f),d=!p&&Gu(f),v=!p&&!d&&ca(f);l=f,p||d||v?Hu(c)?l=c:Vu(c)?l=Ti(c):d?(h=!1,l=bi(f,!0)):v?(h=!1,l=Ei(f,!0)):l=[]:ra(f)||Bu(f)?(l=c,Bu(c)?l=ga(c):Qu(c)&&!Ku(c)||(l=po(f))):h=!1}h&&(a.set(f,l),o(l,f,i,u,a),a.delete(f)),Je(n,e,l)}}(n,t,a,e,Wr,i,o);else{var c=i?i(To(n,a),u,a+\"\",n,t,o):r;c===r&&(c=u),Je(n,a,c)}},Ra)}function Dr(n,t){var e=n.length;if(e)return go(t+=t<0?e:0,e)?n[t]:r}function Ur(n,t,e){t=t.length?Rt(t,function(n){return Hu(n)?function(t){return wr(t,1===n.length?n[0]:n)}:n}):[ec];var r=-1;t=Rt(t,Yt(oo()));var i=Lr(n,function(n,e,i){var o=Rt(t,function(t){return t(n)});return{criteria:o,index:++r,value:n}});return function(n){var t=n.length;for(n.sort(function(n,t){return function(n,t,e){for(var r=-1,i=n.criteria,o=t.criteria,u=i.length,a=e.length;++r<u;){var c=xi(i[r],o[r]);if(c)return r>=a?c:c*(\"desc\"==e[r]?-1:1)}return n.index-t.index}(n,t,e)});t--;)n[t]=n[t].value;return n}(i)}function Br(n,t,e){for(var r=-1,i=t.length,o={};++r<i;){var u=t[r],a=wr(n,u);e(a,u)&&Kr(o,gi(u,n),a)}return o}function Hr(n,t,e,r){var i=r?Dt:Wt,o=-1,u=t.length,a=n;for(n===t&&(t=Ti(t)),e&&(a=Rt(n,Yt(e)));++o<u;)for(var c=0,f=t[o],s=e?e(f):f;(c=i(a,s,c,r))>-1;)a!==n&&Xn.call(a,c,1),Xn.call(n,c,1);return n}function $r(n,t){for(var e=n?t.length:0,r=e-1;e--;){var i=t[e];if(e==r||i!==o){var o=i;go(i)?Xn.call(n,i,1):ci(n,i)}}return n}function qr(n,t){return n+vt(be()*(t-n+1))}function Vr(n,t){var e=\"\";if(!n||t<1||t>s)return e;do{t%2&&(e+=n),(t=vt(t/2))&&(n+=n)}while(t);return e}function Gr(n,t){return ko(Oo(n,t,ec),n+\"\")}function Xr(n){return Ye(Wa(n))}function Yr(n,t){var e=Wa(n);return No(e,or(t,0,e.length))}function Kr(n,t,e,i){if(!Qu(n))return n;for(var o=-1,u=(t=gi(t,n)).length,a=u-1,c=n;null!=c&&++o<u;){var f=Lo(t[o]),s=e;if(\"__proto__\"===f||\"constructor\"===f||\"prototype\"===f)return n;if(o!=a){var l=c[f];(s=i?i(l,f,c):r)===r&&(s=Qu(l)?l:go(t[o+1])?[]:{})}Qe(c,f,s),c=c[f]}return n}var Zr=Ae?function(n,t){return Ae.set(n,t),n}:ec,Jr=ut?function(n,t){return ut(n,\"toString\",{configurable:!0,enumerable:!1,value:Qa(t),writable:!0})}:ec;function Qr(n){return No(Wa(n))}function ni(n,t,e){var r=-1,i=n.length;t<0&&(t=-t>i?0:i+t),(e=e>i?i:e)<0&&(e+=i),i=t>e?0:e-t>>>0,t>>>=0;for(var o=rn(i);++r<i;)o[r]=n[r+t];return o}function ti(n,t){var e;return sr(n,function(n,r,i){return!(e=t(n,r,i))}),!!e}function ei(n,t,e){var r=0,i=null==n?r:n.length;if(\"number\"==typeof t&&t==t&&i<=2147483647){for(;r<i;){var o=r+i>>>1,u=n[o];null!==u&&!aa(u)&&(e?u<=t:u<t)?r=o+1:i=o}return i}return ri(n,t,ec,e)}function ri(n,t,e,i){var o=0,u=null==n?0:n.length;if(0===u)return 0;for(var a=(t=e(t))!=t,c=null===t,f=aa(t),s=t===r;o<u;){var l=vt((o+u)/2),h=e(n[l]),p=h!==r,d=null===h,v=h==h,g=aa(h);if(a)var y=i||v;else y=s?v&&(i||p):c?v&&p&&(i||!d):f?v&&p&&!d&&(i||!g):!d&&!g&&(i?h<=t:h<t);y?o=l+1:u=l}return ye(u,4294967294)}function ii(n,t){for(var e=-1,r=n.length,i=0,o=[];++e<r;){var u=n[e],a=t?t(u):u;if(!e||!Wu(a,c)){var c=a;o[i++]=0===u?0:u}}return o}function oi(n){return\"number\"==typeof n?n:aa(n)?l:+n}function ui(n){if(\"string\"==typeof n)return n;if(Hu(n))return Rt(n,ui)+\"\";if(aa(n))return Pe?Pe.call(n):\"\";var t=n+\"\";return\"0\"==t&&1/n==-1/0?\"-0\":t}function ai(n,t,e){var r=-1,i=kt,o=n.length,u=!0,a=[],c=a;if(e)u=!1,i=jt;else if(o>=200){var f=t?null:Vi(n);if(f)return ae(f);u=!1,i=Zt,c=new Ve}else c=t?[]:a;n:for(;++r<o;){var s=n[r],l=t?t(s):s;if(s=e||0!==s?s:0,u&&l==l){for(var h=c.length;h--;)if(c[h]===l)continue n;t&&c.push(l),a.push(s)}else i(c,l,e)||(c!==a&&c.push(l),a.push(s))}return a}function ci(n,t){var e=-1,r=(t=gi(t,n)).length;if(!r)return!0;for(;++e<r;){var i=Lo(t[e]);if(\"__proto__\"===i&&!zn.call(n,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&e<r-1)return!1}var o=So(n,t);return null==o||delete o[Lo(Yo(t))]}function fi(n,t,e,r){return Kr(n,t,e(wr(n,t)),r)}function si(n,t,e,r){for(var i=n.length,o=r?i:-1;(r?o--:++o<i)&&t(n[o],o,n););return e?ni(n,r?0:o,r?o+1:i):ni(n,r?o+1:0,r?i:o)}function li(n,t){var e=n;return e instanceof Be&&(e=e.value()),Ct(t,function(n,t){return t.func.apply(t.thisArg,Nt([n],t.args))},e)}function hi(n,t,e){var r=n.length;if(r<2)return r?ai(n[0]):[];for(var i=-1,o=rn(r);++i<r;)for(var u=n[i],a=-1;++a<r;)a!=i&&(o[i]=fr(o[i]||u,n[a],t,e));return ai(vr(o,1),t,e)}function pi(n,t,e){for(var i=-1,o=n.length,u=t.length,a={};++i<o;){var c=i<u?t[i]:r;e(a,n[i],c)}return a}function di(n){return Vu(n)?n:[]}function vi(n){return\"function\"==typeof n?n:ec}function gi(n,t){return Hu(n)?n:_o(n,t)?[n]:Mo(ya(n))}var yi=Gr;function _i(n,t,e){var i=n.length;return e=e===r?i:e,!t&&e>=i?n:ni(n,t,e)}var mi=ft||function(n){return lt.clearTimeout(n)};function bi(n,t){if(t)return n.slice();var e=n.length,r=$n?$n(e):new n.constructor(e);return n.copy(r),r}function wi(n){var t=new n.constructor(n.byteLength);return new Hn(t).set(new Hn(n)),t}function Ei(n,t){var e=t?wi(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}function xi(n,t){if(n!==t){var e=n!==r,i=null===n,o=n==n,u=aa(n),a=t!==r,c=null===t,f=t==t,s=aa(t);if(!c&&!s&&!u&&n>t||u&&a&&f&&!c&&!s||i&&a&&f||!e&&f||!o)return 1;if(!i&&!u&&!s&&n<t||s&&e&&o&&!i&&!u||c&&e&&o||!a&&o||!f)return-1}return 0}function Oi(n,t,e,r){for(var i=-1,o=n.length,u=e.length,a=-1,c=t.length,f=ge(o-u,0),s=rn(c+f),l=!r;++a<c;)s[a]=t[a];for(;++i<u;)(l||i<o)&&(s[e[i]]=n[i]);for(;f--;)s[a++]=n[i++];return s}function Si(n,t,e,r){for(var i=-1,o=n.length,u=-1,a=e.length,c=-1,f=t.length,s=ge(o-a,0),l=rn(s+f),h=!r;++i<s;)l[i]=n[i];for(var p=i;++c<f;)l[p+c]=t[c];for(;++u<a;)(h||i<o)&&(l[p+e[u]]=n[i++]);return l}function Ti(n,t){var e=-1,r=n.length;for(t||(t=rn(r));++e<r;)t[e]=n[e];return t}function Ii(n,t,e,i){var o=!e;e||(e={});for(var u=-1,a=t.length;++u<a;){var c=t[u],f=i?i(e[c],n[c],c,e,n):r;f===r&&(f=n[c]),o?rr(e,c,f):Qe(e,c,f)}return e}function Ai(n,t){return function(e,r){var i=Hu(e)?Ot:tr,o=t?t():{};return i(e,n,oo(r,2),o)}}function ki(n){return Gr(function(t,e){var i=-1,o=e.length,u=o>1?e[o-1]:r,a=o>2?e[2]:r;for(u=n.length>3&&\"function\"==typeof u?(o--,u):r,a&&yo(e[0],e[1],a)&&(u=o<3?r:u,o=1),t=Sn(t);++i<o;){var c=e[i];c&&n(t,c,i,u)}return t})}function ji(n,t){return function(e,r){if(null==e)return e;if(!qu(e))return n(e,r);for(var i=e.length,o=t?i:-1,u=Sn(e);(t?o--:++o<i)&&!1!==r(u[o],o,u););return e}}function Ri(n){return function(t,e,r){for(var i=-1,o=Sn(t),u=r(t),a=u.length;a--;){var c=u[n?a:++i];if(!1===e(o[c],c,o))break}return t}}function Ni(n){return function(t){var e=re(t=ya(t))?se(t):r,i=e?e[0]:t.charAt(0),o=e?_i(e,1).join(\"\"):t.slice(1);return i[n]()+o}}function Ci(n){return function(t){return Ct(Ka(Ba(t).replace(Kn,\"\")),n,\"\")}}function zi(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var e=We(n.prototype),r=n.apply(e,t);return Qu(r)?r:e}}function Mi(n){return function(t,e,i){var o=Sn(t);if(!qu(t)){var u=oo(e,3);t=ja(t),e=function(n){return u(o[n],n,o)}}var a=n(t,e,i);return a>-1?o[u?t[a]:a]:r}}function Li(n){return Qi(function(t){var e=t.length,o=e,u=Ue.prototype.thru;for(n&&t.reverse();o--;){var a=t[o];if(\"function\"!=typeof a)throw new An(i);if(u&&!c&&\"wrapper\"==ro(a))var c=new Ue([],!0)}for(o=c?o:e;++o<e;){var f=ro(a=t[o]),s=\"wrapper\"==f?eo(a):r;c=s&&mo(s[0])&&424==s[1]&&!s[4].length&&1==s[9]?c[ro(s[0])].apply(c,s[3]):1==a.length&&mo(a)?c[f]():c.thru(a)}return function(){var n=arguments,r=n[0];if(c&&1==n.length&&Hu(r))return c.plant(r).value();for(var i=0,o=e?t[i].apply(this,n):r;++i<e;)o=t[i].call(this,o);return o}})}function Pi(n,t,e,i,o,u,a,f,s,l){var h=t&c,p=1&t,d=2&t,v=24&t,g=512&t,y=d?r:zi(n);return function c(){for(var _=arguments.length,m=rn(_),b=_;b--;)m[b]=arguments[b];if(v)var w=io(c),E=function(n,t){for(var e=n.length,r=0;e--;)n[e]===t&&++r;return r}(m,w);if(i&&(m=Oi(m,i,o,v)),u&&(m=Si(m,u,a,v)),_-=E,v&&_<l){var x=ue(m,w);return $i(n,t,Pi,c.placeholder,e,m,x,f,s,l-_)}var O=p?e:this,S=d?O[n]:n;return _=m.length,f?m=function(n,t){for(var e=n.length,i=ye(t.length,e),o=Ti(n);i--;){var u=t[i];n[i]=go(u,e)?o[u]:r}return n}(m,f):g&&_>1&&m.reverse(),h&&s<_&&(m.length=s),this&&this!==lt&&this instanceof c&&(S=y||zi(S)),S.apply(O,m)}}function Fi(n,t){return function(e,r){return function(n,t,e,r){return _r(n,function(n,i,o){t(r,e(n),i,o)}),r}(e,n,t(r),{})}}function Wi(n,t){return function(e,i){var o;if(e===r&&i===r)return t;if(e!==r&&(o=e),i!==r){if(o===r)return i;\"string\"==typeof e||\"string\"==typeof i?(e=ui(e),i=ui(i)):(e=oi(e),i=oi(i)),o=n(e,i)}return o}}function Di(n){return Qi(function(t){return t=Rt(t,Yt(oo())),Gr(function(e){var r=this;return n(t,function(n){return xt(n,r,e)})})})}function Ui(n,t){var e=(t=t===r?\" \":ui(t)).length;if(e<2)return e?Vr(t,n):t;var i=Vr(t,pt(n/fe(t)));return re(t)?_i(se(i),0,n).join(\"\"):i.slice(0,n)}function Bi(n){return function(t,e,i){return i&&\"number\"!=typeof i&&yo(t,e,i)&&(e=i=r),t=ha(t),e===r?(e=t,t=0):e=ha(e),function(n,t,e,r){for(var i=-1,o=ge(pt((t-n)/(e||1)),0),u=rn(o);o--;)u[r?o:++i]=n,n+=e;return u}(t,e,i=i===r?t<e?1:-1:ha(i),n)}}function Hi(n){return function(t,e){return\"string\"==typeof t&&\"string\"==typeof e||(t=va(t),e=va(e)),n(t,e)}}function $i(n,t,e,i,o,u,c,f,s,l){var h=8&t;t|=h?a:64,4&(t&=~(h?64:a))||(t&=-4);var p=[n,t,o,h?u:r,h?c:r,h?r:u,h?r:c,f,s,l],d=e.apply(r,p);return mo(n)&&Io(d,p),d.placeholder=i,jo(d,n,t)}function qi(n){var t=On[n];return function(n,e){if(n=va(n),(e=null==e?0:ye(pa(e),292))&&$t(n)){var r=(ya(n)+\"e\").split(\"e\");return+((r=(ya(t(r[0]+\"e\"+(+r[1]+e)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-e))}return t(n)}}var Vi=Se&&1/ae(new Se([,-0]))[1]==f?function(n){return new Se(n)}:ac;function Gi(n){return function(t){var e=lo(t);return e==w?ie(t):e==T?ce(t):function(n,t){return Rt(t,function(t){return[t,n[t]]})}(t,n(t))}}function Xi(n,t,e,o,f,s,l,h){var p=2&t;if(!p&&\"function\"!=typeof n)throw new An(i);var d=o?o.length:0;if(d||(t&=-97,o=f=r),l=l===r?l:ge(pa(l),0),h=h===r?h:pa(h),d-=f?f.length:0,64&t){var v=o,g=f;o=f=r}var y=p?r:eo(n),_=[n,t,e,o,f,v,g,s,l,h];if(y&&function(n,t){var e=n[1],r=t[1],i=e|r,o=i<131,a=r==c&&8==e||r==c&&256==e&&n[7].length<=t[8]||384==r&&t[7].length<=t[8]&&8==e;if(!o&&!a)return n;1&r&&(n[2]=t[2],i|=1&e?0:4);var f=t[3];if(f){var s=n[3];n[3]=s?Oi(s,f,t[4]):f,n[4]=s?ue(n[3],u):t[4]}(f=t[5])&&(s=n[5],n[5]=s?Si(s,f,t[6]):f,n[6]=s?ue(n[5],u):t[6]),(f=t[7])&&(n[7]=f),r&c&&(n[8]=null==n[8]?t[8]:ye(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=i}(_,y),n=_[0],t=_[1],e=_[2],o=_[3],f=_[4],!(h=_[9]=_[9]===r?p?0:n.length:ge(_[9]-d,0))&&24&t&&(t&=-25),t&&1!=t)m=8==t||16==t?function(n,t,e){var i=zi(n);return function o(){for(var u=arguments.length,a=rn(u),c=u,f=io(o);c--;)a[c]=arguments[c];var s=u<3&&a[0]!==f&&a[u-1]!==f?[]:ue(a,f);return(u-=s.length)<e?$i(n,t,Pi,o.placeholder,r,a,s,r,r,e-u):xt(this&&this!==lt&&this instanceof o?i:n,this,a)}}(n,t,h):t!=a&&33!=t||f.length?Pi.apply(r,_):function(n,t,e,r){var i=1&t,o=zi(n);return function t(){for(var u=-1,a=arguments.length,c=-1,f=r.length,s=rn(f+a),l=this&&this!==lt&&this instanceof t?o:n;++c<f;)s[c]=r[c];for(;a--;)s[c++]=arguments[++u];return xt(l,i?e:this,s)}}(n,t,e,o);else var m=function(n,t,e){var r=1&t,i=zi(n);return function t(){return(this&&this!==lt&&this instanceof t?i:n).apply(r?e:this,arguments)}}(n,t,e);return jo((y?Zr:Io)(m,_),n,t)}function Yi(n,t,e,i){return n===r||Wu(n,Rn[e])&&!zn.call(i,e)?t:n}function Ki(n,t,e,i,o,u){return Qu(n)&&Qu(t)&&(u.set(t,n),Wr(n,t,r,Ki,u),u.delete(t)),n}function Zi(n){return ra(n)?r:n}function Ji(n,t,e,i,o,u){var a=1&e,c=n.length,f=t.length;if(c!=f&&!(a&&f>c))return!1;var s=u.get(n),l=u.get(t);if(s&&l)return s==t&&l==n;var h=-1,p=!0,d=2&e?new Ve:r;for(u.set(n,t),u.set(t,n);++h<c;){var v=n[h],g=t[h];if(i)var y=a?i(g,v,h,t,n,u):i(v,g,h,n,t,u);if(y!==r){if(y)continue;p=!1;break}if(d){if(!Mt(t,function(n,t){if(!Zt(d,t)&&(v===n||o(v,n,e,i,u)))return d.push(t)})){p=!1;break}}else if(v!==g&&!o(v,g,e,i,u)){p=!1;break}}return u.delete(n),u.delete(t),p}function Qi(n){return ko(Oo(n,r,$o),n+\"\")}function no(n){return Er(n,ja,fo)}function to(n){return Er(n,Ra,so)}var eo=Ae?function(n){return Ae.get(n)}:ac;function ro(n){for(var t=n.name+\"\",e=ke[t],r=zn.call(ke,t)?e.length:0;r--;){var i=e[r],o=i.func;if(null==o||o==n)return i.name}return t}function io(n){return(zn.call(Fe,\"placeholder\")?Fe:n).placeholder}function oo(){var n=Fe.iteratee||rc;return n=n===rc?Cr:n,arguments.length?n(arguments[0],arguments[1]):n}function uo(n,t){var e,r,i=n.__data__;return(\"string\"==(r=typeof(e=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==e:null===e)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function ao(n){for(var t=ja(n),e=t.length;e--;){var r=t[e],i=n[r];t[e]=[r,i,Eo(i)]}return t}function co(n,t){var e=function(n,t){return null==n?r:n[t]}(n,t);return Nr(e)?e:r}var fo=gt?function(n){return null==n?[]:(n=Sn(n),At(gt(n),function(t){return Gn.call(n,t)}))}:dc,so=gt?function(n){for(var t=[];n;)Nt(t,fo(n)),n=qn(n);return t}:dc,lo=xr;function ho(n,t,e){for(var r=-1,i=(t=gi(t,n)).length,o=!1;++r<i;){var u=Lo(t[r]);if(!(o=null!=n&&e(n,u)))break;n=n[u]}return o||++r!=i?o:!!(i=null==n?0:n.length)&&Ju(i)&&go(u,i)&&(Hu(n)||Bu(n))}function po(n){return\"function\"!=typeof n.constructor||wo(n)?{}:We(qn(n))}function vo(n){return Hu(n)||Bu(n)||!!(Yn&&n&&n[Yn])}function go(n,t){var e=typeof n;return!!(t=t??s)&&(\"number\"==e||\"symbol\"!=e&&yn.test(n))&&n>-1&&n%1==0&&n<t}function yo(n,t,e){if(!Qu(e))return!1;var r=typeof t;return!!(\"number\"==r?qu(e)&&go(t,e.length):\"string\"==r&&t in e)&&Wu(e[t],n)}function _o(n,t){if(Hu(n))return!1;var e=typeof n;return!(\"number\"!=e&&\"symbol\"!=e&&\"boolean\"!=e&&null!=n&&!aa(n))||J.test(n)||!Z.test(n)||null!=t&&n in Sn(t)}function mo(n){var t=ro(n),e=Fe[t];if(\"function\"!=typeof e||!(t in Be.prototype))return!1;if(n===e)return!0;var r=eo(e);return!!r&&n===r[0]}(Ee&&lo(new Ee(new ArrayBuffer(1)))!=R||xe&&lo(new xe)!=w||Oe&&lo(Oe.resolve())!=O||Se&&lo(new Se)!=T||Te&&lo(new Te)!=k)&&(lo=function(n){var t=xr(n),e=t==x?n.constructor:r,i=e?Po(e):\"\";if(i)switch(i){case je:return R;case Re:return w;case Ne:return O;case Ce:return T;case ze:return k}return t});var bo=Nn?Ku:vc;function wo(n){var t=n&&n.constructor;return n===(\"function\"==typeof t&&t.prototype||Rn)}function Eo(n){return n==n&&!Qu(n)}function xo(n,t){return function(e){return null!=e&&e[n]===t&&(t!==r||n in Sn(e))}}function Oo(n,t,e){return t=ge(t===r?n.length-1:t,0),function(){for(var r=arguments,i=-1,o=ge(r.length-t,0),u=rn(o);++i<o;)u[i]=r[t+i];i=-1;for(var a=rn(t+1);++i<t;)a[i]=r[i];return a[t]=e(u),xt(n,this,a)}}function So(n,t){return t.length<2?n:wr(n,ni(t,0,-1))}function To(n,t){if((\"constructor\"!==t||\"function\"!=typeof n[t])&&\"__proto__\"!=t)return n[t]}var Io=Ro(Zr),Ao=ht||function(n,t){return lt.setTimeout(n,t)},ko=Ro(Jr);function jo(n,t,e){var r=t+\"\";return ko(n,function(n,t){var e=t.length;if(!e)return n;var r=e-1;return t[r]=(e>1?\"& \":\"\")+t[r],t=t.join(e>2?\", \":\" \"),n.replace(on,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(r,function(n,t){return St(p,function(e){var r=\"_.\"+e[0];t&e[1]&&!kt(n,r)&&n.push(r)}),n.sort()}(function(n){var t=n.match(un);return t?t[1].split(an):[]}(r),e)))}function Ro(n){var t=0,e=0;return function(){var i=_e(),o=16-(i-e);if(e=i,o>0){if(++t>=800)return arguments[0]}else t=0;return n.apply(r,arguments)}}function No(n,t){var e=-1,i=n.length,o=i-1;for(t=t===r?i:t;++e<t;){var u=qr(e,o),a=n[u];n[u]=n[e],n[e]=a}return n.length=t,n}var Co,zo,Mo=(Co=Cu(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(\"\"),n.replace(Q,function(n,e,r,i){t.push(r?i.replace(sn,\"$1\"):e||n)}),t},function(n){return 500===zo.size&&zo.clear(),n}),zo=Co.cache,Co);function Lo(n){if(\"string\"==typeof n||aa(n))return n;var t=n+\"\";return\"0\"==t&&1/n==-1/0?\"-0\":t}function Po(n){if(null!=n){try{return Cn.call(n)}catch(n){}try{return n+\"\"}catch(n){}}return\"\"}function Fo(n){if(n instanceof Be)return n.clone();var t=new Ue(n.__wrapped__,n.__chain__);return t.__actions__=Ti(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}var Wo=Gr(function(n,t){return Vu(n)?fr(n,vr(t,1,Vu,!0)):[]}),Do=Gr(function(n,t){var e=Yo(t);return Vu(e)&&(e=r),Vu(n)?fr(n,vr(t,1,Vu,!0),oo(e,2)):[]}),Uo=Gr(function(n,t){var e=Yo(t);return Vu(e)&&(e=r),Vu(n)?fr(n,vr(t,1,Vu,!0),r,e):[]});function Bo(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var i=null==e?0:pa(e);return i<0&&(i=ge(r+i,0)),Ft(n,oo(t,3),i)}function Ho(n,t,e){var i=null==n?0:n.length;if(!i)return-1;var o=i-1;return e!==r&&(o=pa(e),o=e<0?ge(i+o,0):ye(o,i-1)),Ft(n,oo(t,3),o,!0)}function $o(n){return null!=n&&n.length?vr(n,1):[]}function qo(n){return n&&n.length?n[0]:r}var Vo=Gr(function(n){var t=Rt(n,di);return t.length&&t[0]===n[0]?Ir(t):[]}),Go=Gr(function(n){var t=Yo(n),e=Rt(n,di);return t===Yo(e)?t=r:e.pop(),e.length&&e[0]===n[0]?Ir(e,oo(t,2)):[]}),Xo=Gr(function(n){var t=Yo(n),e=Rt(n,di);return(t=\"function\"==typeof t?t:r)&&e.pop(),e.length&&e[0]===n[0]?Ir(e,r,t):[]});function Yo(n){var t=null==n?0:n.length;return t?n[t-1]:r}var Ko=Gr(Zo);function Zo(n,t){return n&&n.length&&t&&t.length?Hr(n,t):n}var Jo=Qi(function(n,t){var e=null==n?0:n.length,r=ir(n,t);return $r(n,Rt(t,function(n){return go(n,e)?+n:n}).sort(xi)),r});function Qo(n){return null==n?n:we.call(n)}var nu=Gr(function(n){return ai(vr(n,1,Vu,!0))}),tu=Gr(function(n){var t=Yo(n);return Vu(t)&&(t=r),ai(vr(n,1,Vu,!0),oo(t,2))}),eu=Gr(function(n){var t=Yo(n);return t=\"function\"==typeof t?t:r,ai(vr(n,1,Vu,!0),r,t)});function ru(n){if(!n||!n.length)return[];var t=0;return n=At(n,function(n){if(Vu(n))return t=ge(n.length,t),!0}),Gt(t,function(t){return Rt(n,Ht(t))})}function iu(n,t){if(!n||!n.length)return[];var e=ru(n);return null==t?e:Rt(e,function(n){return xt(t,r,n)})}var ou=Gr(function(n,t){return Vu(n)?fr(n,t):[]}),uu=Gr(function(n){return hi(At(n,Vu))}),au=Gr(function(n){var t=Yo(n);return Vu(t)&&(t=r),hi(At(n,Vu),oo(t,2))}),cu=Gr(function(n){var t=Yo(n);return t=\"function\"==typeof t?t:r,hi(At(n,Vu),r,t)}),fu=Gr(ru),su=Gr(function(n){var t=n.length,e=t>1?n[t-1]:r;return e=\"function\"==typeof e?(n.pop(),e):r,iu(n,e)});function lu(n){var t=Fe(n);return t.__chain__=!0,t}function hu(n,t){return t(n)}var pu=Qi(function(n){var t=n.length,e=t?n[0]:0,i=this.__wrapped__,o=function(t){return ir(t,n)};return!(t>1||this.__actions__.length)&&i instanceof Be&&go(e)?((i=i.slice(e,+e+(t?1:0))).__actions__.push({func:hu,args:[o],thisArg:r}),new Ue(i,this.__chain__).thru(function(n){return t&&!n.length&&n.push(r),n})):this.thru(o)}),du=Ai(function(n,t,e){zn.call(n,e)?++n[e]:rr(n,e,1)}),vu=Mi(Bo),gu=Mi(Ho);function yu(n,t){return(Hu(n)?St:sr)(n,oo(t,3))}function _u(n,t){return(Hu(n)?Tt:lr)(n,oo(t,3))}var mu=Ai(function(n,t,e){zn.call(n,e)?n[e].push(t):rr(n,e,[t])}),bu=Gr(function(n,t,e){var r=-1,i=\"function\"==typeof t,o=qu(n)?rn(n.length):[];return sr(n,function(n){o[++r]=i?xt(t,n,e):Ar(n,t,e)}),o}),wu=Ai(function(n,t,e){rr(n,e,t)});function Eu(n,t){return(Hu(n)?Rt:Lr)(n,oo(t,3))}var xu=Ai(function(n,t,e){n[e?0:1].push(t)},function(){return[[],[]]}),Ou=Gr(function(n,t){if(null==n)return[];var e=t.length;return e>1&&yo(n,t[0],t[1])?t=[]:e>2&&yo(t[0],t[1],t[2])&&(t=[t[0]]),Ur(n,vr(t,1),[])}),Su=st||function(){return lt.Date.now()};function Tu(n,t,e){return t=e?r:t,t=n&&null==t?n.length:t,Xi(n,c,r,r,r,r,t)}function Iu(n,t){var e;if(\"function\"!=typeof t)throw new An(i);return n=pa(n),function(){return--n>0&&(e=t.apply(this,arguments)),n<=1&&(t=r),e}}var Au=Gr(function(n,t,e){var r=1;if(e.length){var i=ue(e,io(Au));r|=a}return Xi(n,r,t,e,i)}),ku=Gr(function(n,t,e){var r=3;if(e.length){var i=ue(e,io(ku));r|=a}return Xi(t,r,n,e,i)});function ju(n,t,e){var o,u,a,c,f,s,l=0,h=!1,p=!1,d=!0;if(\"function\"!=typeof n)throw new An(i);function v(t){var e=o,i=u;return o=u=r,l=t,c=n.apply(i,e)}function g(n){var e=n-s;return s===r||e>=t||e<0||p&&n-l>=a}function y(){var n=Su();if(g(n))return _(n);f=Ao(y,function(n){var e=t-(n-s);return p?ye(e,a-(n-l)):e}(n))}function _(n){return f=r,d&&o?v(n):(o=u=r,c)}function m(){var n=Su(),e=g(n);if(o=arguments,u=this,s=n,e){if(f===r)return function(n){return l=n,f=Ao(y,t),h?v(n):c}(s);if(p)return mi(f),f=Ao(y,t),v(s)}return f===r&&(f=Ao(y,t)),c}return t=va(t)||0,Qu(e)&&(h=!!e.leading,a=(p=\"maxWait\"in e)?ge(va(e.maxWait)||0,t):a,d=\"trailing\"in e?!!e.trailing:d),m.cancel=function(){f!==r&&mi(f),l=0,o=s=u=f=r},m.flush=function(){return f===r?c:_(Su())},m}var Ru=Gr(function(n,t){return cr(n,1,t)}),Nu=Gr(function(n,t,e){return cr(n,va(t)||0,e)});function Cu(n,t){if(\"function\"!=typeof n||null!=t&&\"function\"!=typeof t)throw new An(i);var e=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=e.cache;if(o.has(i))return o.get(i);var u=n.apply(this,r);return e.cache=o.set(i,u)||o,u};return e.cache=new(Cu.Cache||qe),e}function zu(n){if(\"function\"!=typeof n)throw new An(i);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}Cu.Cache=qe;var Mu=yi(function(n,t){var e=(t=1==t.length&&Hu(t[0])?Rt(t[0],Yt(oo())):Rt(vr(t,1),Yt(oo()))).length;return Gr(function(r){for(var i=-1,o=ye(r.length,e);++i<o;)r[i]=t[i].call(this,r[i]);return xt(n,this,r)})}),Lu=Gr(function(n,t){var e=ue(t,io(Lu));return Xi(n,a,r,t,e)}),Pu=Gr(function(n,t){var e=ue(t,io(Pu));return Xi(n,64,r,t,e)}),Fu=Qi(function(n,t){return Xi(n,256,r,r,r,t)});function Wu(n,t){return n===t||n!=n&&t!=t}var Du=Hi(Or),Uu=Hi(function(n,t){return n>=t}),Bu=kr(function(){return arguments}())?kr:function(n){return na(n)&&zn.call(n,\"callee\")&&!Gn.call(n,\"callee\")},Hu=rn.isArray,$u=yt?Yt(yt):function(n){return na(n)&&xr(n)==j};function qu(n){return null!=n&&Ju(n.length)&&!Ku(n)}function Vu(n){return na(n)&&qu(n)}var Gu=Lt||vc,Xu=_t?Yt(_t):function(n){return na(n)&&xr(n)==y};function Yu(n){if(!na(n))return!1;var t=xr(n);return t==_||\"[object DOMException]\"==t||\"string\"==typeof n.message&&\"string\"==typeof n.name&&!ra(n)}function Ku(n){if(!Qu(n))return!1;var t=xr(n);return t==m||t==b||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function Zu(n){return\"number\"==typeof n&&n==pa(n)}function Ju(n){return\"number\"==typeof n&&n>-1&&n%1==0&&n<=s}function Qu(n){var t=typeof n;return null!=n&&(\"object\"==t||\"function\"==t)}function na(n){return null!=n&&\"object\"==typeof n}var ta=mt?Yt(mt):function(n){return na(n)&&lo(n)==w};function ea(n){return\"number\"==typeof n||na(n)&&xr(n)==E}function ra(n){if(!na(n)||xr(n)!=x)return!1;var t=qn(n);if(null===t)return!0;var e=zn.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof e&&e instanceof e&&Cn.call(e)==Fn}var ia=bt?Yt(bt):function(n){return na(n)&&xr(n)==S},oa=wt?Yt(wt):function(n){return na(n)&&lo(n)==T};function ua(n){return\"string\"==typeof n||!Hu(n)&&na(n)&&xr(n)==I}function aa(n){return\"symbol\"==typeof n||na(n)&&xr(n)==A}var ca=Et?Yt(Et):function(n){return na(n)&&Ju(n.length)&&!!it[xr(n)]},fa=Hi(Mr),sa=Hi(function(n,t){return n<=t});function la(n){if(!n)return[];if(qu(n))return ua(n)?se(n):Ti(n);if(Jn&&n[Jn])return function(n){for(var t,e=[];!(t=n.next()).done;)e.push(t.value);return e}(n[Jn]());var t=lo(n);return(t==w?ie:t==T?ae:Wa)(n)}function ha(n){return n?(n=va(n))===f||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function pa(n){var t=ha(n),e=t%1;return t==t?e?t-e:t:0}function da(n){return n?or(pa(n),0,h):0}function va(n){if(\"number\"==typeof n)return n;if(aa(n))return l;if(Qu(n)){var t=\"function\"==typeof n.valueOf?n.valueOf():n;n=Qu(t)?t+\"\":t}if(\"string\"!=typeof n)return 0===n?n:+n;n=Xt(n);var e=dn.test(n);return e||gn.test(n)?ct(n.slice(2),e?2:8):pn.test(n)?l:+n}function ga(n){return Ii(n,Ra(n))}function ya(n){return null==n?\"\":ui(n)}var _a=ki(function(n,t){if(wo(t)||qu(t))Ii(t,ja(t),n);else for(var e in t)zn.call(t,e)&&Qe(n,e,t[e])}),ma=ki(function(n,t){Ii(t,Ra(t),n)}),ba=ki(function(n,t,e,r){Ii(t,Ra(t),n,r)}),wa=ki(function(n,t,e,r){Ii(t,ja(t),n,r)}),Ea=Qi(ir),xa=Gr(function(n,t){n=Sn(n);var e=-1,i=t.length,o=i>2?t[2]:r;for(o&&yo(t[0],t[1],o)&&(i=1);++e<i;)for(var u=t[e],a=Ra(u),c=-1,f=a.length;++c<f;){var s=a[c],l=n[s];(l===r||Wu(l,Rn[s])&&!zn.call(n,s))&&(n[s]=u[s])}return n}),Oa=Gr(function(n){return n.push(r,Ki),xt(Ca,r,n)});function Sa(n,t,e){var i=null==n?r:wr(n,t);return i===r?e:i}function Ta(n,t){return null!=n&&ho(n,t,Tr)}var Ia=Fi(function(n,t,e){null!=t&&\"function\"!=typeof t.toString&&(t=Pn.call(t)),n[t]=e},Qa(ec)),Aa=Fi(function(n,t,e){null!=t&&\"function\"!=typeof t.toString&&(t=Pn.call(t)),zn.call(n,t)?n[t].push(e):n[t]=[e]},oo),ka=Gr(Ar);function ja(n){return qu(n)?Xe(n):zr(n)}function Ra(n){return qu(n)?Xe(n,!0):function(n){if(!Qu(n))return function(n){var t=[];if(null!=n)for(var e in Sn(n))t.push(e);return t}(n);var t=wo(n),e=[];for(var r in n)(\"constructor\"!=r||!t&&zn.call(n,r))&&e.push(r);return e}(n)}var Na=ki(function(n,t,e){Wr(n,t,e)}),Ca=ki(function(n,t,e,r){Wr(n,t,e,r)}),za=Qi(function(n,t){var e={};if(null==n)return e;var r=!1;t=Rt(t,function(t){return t=gi(t,n),r||(r=t.length>1),t}),Ii(n,to(n),e),r&&(e=ur(e,7,Zi));for(var i=t.length;i--;)ci(e,t[i]);return e}),Ma=Qi(function(n,t){return null==n?{}:function(n,t){return Br(n,t,function(t,e){return Ta(n,e)})}(n,t)});function La(n,t){if(null==n)return{};var e=Rt(to(n),function(n){return[n]});return t=oo(t),Br(n,e,function(n,e){return t(n,e[0])})}var Pa=Gi(ja),Fa=Gi(Ra);function Wa(n){return null==n?[]:Kt(n,ja(n))}var Da=Ci(function(n,t,e){return t=t.toLowerCase(),n+(e?Ua(t):t)});function Ua(n){return Ya(ya(n).toLowerCase())}function Ba(n){return(n=ya(n))&&n.replace(_n,ne).replace(Zn,\"\")}var Ha=Ci(function(n,t,e){return n+(e?\"-\":\"\")+t.toLowerCase()}),$a=Ci(function(n,t,e){return n+(e?\" \":\"\")+t.toLowerCase()}),qa=Ni(\"toLowerCase\"),Va=Ci(function(n,t,e){return n+(e?\"_\":\"\")+t.toLowerCase()}),Ga=Ci(function(n,t,e){return n+(e?\" \":\"\")+Ya(t)}),Xa=Ci(function(n,t,e){return n+(e?\" \":\"\")+t.toUpperCase()}),Ya=Ni(\"toUpperCase\");function Ka(n,t,e){return n=ya(n),(t=e?r:t)===r?function(n){return tt.test(n)}(n)?function(n){return n.match(Qn)||[]}(n):function(n){return n.match(cn)||[]}(n):n.match(t)||[]}var Za=Gr(function(n,t){try{return xt(n,r,t)}catch(n){return Yu(n)?n:new En(n)}}),Ja=Qi(function(n,t){return St(t,function(t){t=Lo(t),rr(n,t,Au(n[t],n))}),n});function Qa(n){return function(){return n}}var nc=Li(),tc=Li(!0);function ec(n){return n}function rc(n){return Cr(\"function\"==typeof n?n:ur(n,1))}var ic=Gr(function(n,t){return function(e){return Ar(e,n,t)}}),oc=Gr(function(n,t){return function(e){return Ar(n,e,t)}});function uc(n,t,e){var r=ja(t),i=br(t,r);null!=e||Qu(t)&&(i.length||!r.length)||(e=t,t=n,n=this,i=br(t,ja(t)));var o=!(Qu(e)&&\"chain\"in e&&!e.chain),u=Ku(n);return St(i,function(e){var r=t[e];n[e]=r,u&&(n.prototype[e]=function(){var t=this.__chain__;if(o||t){var e=n(this.__wrapped__);return(e.__actions__=Ti(this.__actions__)).push({func:r,args:arguments,thisArg:n}),e.__chain__=t,e}return r.apply(n,Nt([this.value()],arguments))})}),n}function ac(){}var cc=Di(Rt),fc=Di(It),sc=Di(Mt);function lc(n){return _o(n)?Ht(Lo(n)):function(n){return function(t){return wr(t,n)}}(n)}var hc=Bi(),pc=Bi(!0);function dc(){return[]}function vc(){return!1}var gc,yc=Wi(function(n,t){return n+t},0),_c=qi(\"ceil\"),mc=Wi(function(n,t){return n/t},1),bc=qi(\"floor\"),wc=Wi(function(n,t){return n*t},1),Ec=qi(\"round\"),xc=Wi(function(n,t){return n-t},0);return Fe.after=function(n,t){if(\"function\"!=typeof t)throw new An(i);return n=pa(n),function(){if(--n<1)return t.apply(this,arguments)}},Fe.ary=Tu,Fe.assign=_a,Fe.assignIn=ma,Fe.assignInWith=ba,Fe.assignWith=wa,Fe.at=Ea,Fe.before=Iu,Fe.bind=Au,Fe.bindAll=Ja,Fe.bindKey=ku,Fe.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return Hu(n)?n:[n]},Fe.chain=lu,Fe.chunk=function(n,t,e){t=(e?yo(n,t,e):t===r)?1:ge(pa(t),0);var i=null==n?0:n.length;if(!i||t<1)return[];for(var o=0,u=0,a=rn(pt(i/t));o<i;)a[u++]=ni(n,o,o+=t);return a},Fe.compact=function(n){for(var t=-1,e=null==n?0:n.length,r=0,i=[];++t<e;){var o=n[t];o&&(i[r++]=o)}return i},Fe.concat=function(){var n=arguments.length;if(!n)return[];for(var t=rn(n-1),e=arguments[0],r=n;r--;)t[r-1]=arguments[r];return Nt(Hu(e)?Ti(e):[e],vr(t,1))},Fe.cond=function(n){var t=null==n?0:n.length,e=oo();return n=t?Rt(n,function(n){if(\"function\"!=typeof n[1])throw new An(i);return[e(n[0]),n[1]]}):[],Gr(function(e){for(var r=-1;++r<t;){var i=n[r];if(xt(i[0],this,e))return xt(i[1],this,e)}})},Fe.conforms=function(n){return function(n){var t=ja(n);return function(e){return ar(e,n,t)}}(ur(n,1))},Fe.constant=Qa,Fe.countBy=du,Fe.create=function(n,t){var e=We(n);return null==t?e:er(e,t)},Fe.curry=function n(t,e,i){var o=Xi(t,8,r,r,r,r,r,e=i?r:e);return o.placeholder=n.placeholder,o},Fe.curryRight=function n(t,e,i){var o=Xi(t,16,r,r,r,r,r,e=i?r:e);return o.placeholder=n.placeholder,o},Fe.debounce=ju,Fe.defaults=xa,Fe.defaultsDeep=Oa,Fe.defer=Ru,Fe.delay=Nu,Fe.difference=Wo,Fe.differenceBy=Do,Fe.differenceWith=Uo,Fe.drop=function(n,t,e){var i=null==n?0:n.length;return i?ni(n,(t=e||t===r?1:pa(t))<0?0:t,i):[]},Fe.dropRight=function(n,t,e){var i=null==n?0:n.length;return i?ni(n,0,(t=i-(t=e||t===r?1:pa(t)))<0?0:t):[]},Fe.dropRightWhile=function(n,t){return n&&n.length?si(n,oo(t,3),!0,!0):[]},Fe.dropWhile=function(n,t){return n&&n.length?si(n,oo(t,3),!0):[]},Fe.fill=function(n,t,e,i){var o=null==n?0:n.length;return o?(e&&\"number\"!=typeof e&&yo(n,t,e)&&(e=0,i=o),function(n,t,e,i){var o=n.length;for((e=pa(e))<0&&(e=-e>o?0:o+e),(i=i===r||i>o?o:pa(i))<0&&(i+=o),i=e>i?0:da(i);e<i;)n[e++]=t;return n}(n,t,e,i)):[]},Fe.filter=function(n,t){return(Hu(n)?At:dr)(n,oo(t,3))},Fe.flatMap=function(n,t){return vr(Eu(n,t),1)},Fe.flatMapDeep=function(n,t){return vr(Eu(n,t),f)},Fe.flatMapDepth=function(n,t,e){return e=e===r?1:pa(e),vr(Eu(n,t),e)},Fe.flatten=$o,Fe.flattenDeep=function(n){return null!=n&&n.length?vr(n,f):[]},Fe.flattenDepth=function(n,t){return null!=n&&n.length?vr(n,t=t===r?1:pa(t)):[]},Fe.flip=function(n){return Xi(n,512)},Fe.flow=nc,Fe.flowRight=tc,Fe.fromPairs=function(n){for(var t=-1,e=null==n?0:n.length,r={};++t<e;){var i=n[t];rr(r,i[0],i[1])}return r},Fe.functions=function(n){return null==n?[]:br(n,ja(n))},Fe.functionsIn=function(n){return null==n?[]:br(n,Ra(n))},Fe.groupBy=mu,Fe.initial=function(n){return null!=n&&n.length?ni(n,0,-1):[]},Fe.intersection=Vo,Fe.intersectionBy=Go,Fe.intersectionWith=Xo,Fe.invert=Ia,Fe.invertBy=Aa,Fe.invokeMap=bu,Fe.iteratee=rc,Fe.keyBy=wu,Fe.keys=ja,Fe.keysIn=Ra,Fe.map=Eu,Fe.mapKeys=function(n,t){var e={};return t=oo(t,3),_r(n,function(n,r,i){rr(e,t(n,r,i),n)}),e},Fe.mapValues=function(n,t){var e={};return t=oo(t,3),_r(n,function(n,r,i){rr(e,r,t(n,r,i))}),e},Fe.matches=function(n){return Pr(ur(n,1))},Fe.matchesProperty=function(n,t){return Fr(n,ur(t,1))},Fe.memoize=Cu,Fe.merge=Na,Fe.mergeWith=Ca,Fe.method=ic,Fe.methodOf=oc,Fe.mixin=uc,Fe.negate=zu,Fe.nthArg=function(n){return n=pa(n),Gr(function(t){return Dr(t,n)})},Fe.omit=za,Fe.omitBy=function(n,t){return La(n,zu(oo(t)))},Fe.once=function(n){return Iu(2,n)},Fe.orderBy=function(n,t,e,i){return null==n?[]:(Hu(t)||(t=null==t?[]:[t]),Hu(e=i?r:e)||(e=null==e?[]:[e]),Ur(n,t,e))},Fe.over=cc,Fe.overArgs=Mu,Fe.overEvery=fc,Fe.overSome=sc,Fe.partial=Lu,Fe.partialRight=Pu,Fe.partition=xu,Fe.pick=Ma,Fe.pickBy=La,Fe.property=lc,Fe.propertyOf=function(n){return function(t){return null==n?r:wr(n,t)}},Fe.pull=Ko,Fe.pullAll=Zo,Fe.pullAllBy=function(n,t,e){return n&&n.length&&t&&t.length?Hr(n,t,oo(e,2)):n},Fe.pullAllWith=function(n,t,e){return n&&n.length&&t&&t.length?Hr(n,t,r,e):n},Fe.pullAt=Jo,Fe.range=hc,Fe.rangeRight=pc,Fe.rearg=Fu,Fe.reject=function(n,t){return(Hu(n)?At:dr)(n,zu(oo(t,3)))},Fe.remove=function(n,t){var e=[];if(!n||!n.length)return e;var r=-1,i=[],o=n.length;for(t=oo(t,3);++r<o;){var u=n[r];t(u,r,n)&&(e.push(u),i.push(r))}return $r(n,i),e},Fe.rest=function(n,t){if(\"function\"!=typeof n)throw new An(i);return Gr(n,t=t===r?t:pa(t))},Fe.reverse=Qo,Fe.sampleSize=function(n,t,e){return t=(e?yo(n,t,e):t===r)?1:pa(t),(Hu(n)?Ke:Yr)(n,t)},Fe.set=function(n,t,e){return null==n?n:Kr(n,t,e)},Fe.setWith=function(n,t,e,i){return i=\"function\"==typeof i?i:r,null==n?n:Kr(n,t,e,i)},Fe.shuffle=function(n){return(Hu(n)?Ze:Qr)(n)},Fe.slice=function(n,t,e){var i=null==n?0:n.length;return i?(e&&\"number\"!=typeof e&&yo(n,t,e)?(t=0,e=i):(t=null==t?0:pa(t),e=e===r?i:pa(e)),ni(n,t,e)):[]},Fe.sortBy=Ou,Fe.sortedUniq=function(n){return n&&n.length?ii(n):[]},Fe.sortedUniqBy=function(n,t){return n&&n.length?ii(n,oo(t,2)):[]},Fe.split=function(n,t,e){return e&&\"number\"!=typeof e&&yo(n,t,e)&&(t=e=r),(e=e===r?h:e>>>0)?(n=ya(n))&&(\"string\"==typeof t||null!=t&&!ia(t))&&!(t=ui(t))&&re(n)?_i(se(n),0,e):n.split(t,e):[]},Fe.spread=function(n,t){if(\"function\"!=typeof n)throw new An(i);return t=null==t?0:ge(pa(t),0),Gr(function(e){var r=e[t],i=_i(e,0,t);return r&&Nt(i,r),xt(n,this,i)})},Fe.tail=function(n){var t=null==n?0:n.length;return t?ni(n,1,t):[]},Fe.take=function(n,t,e){return n&&n.length?ni(n,0,(t=e||t===r?1:pa(t))<0?0:t):[]},Fe.takeRight=function(n,t,e){var i=null==n?0:n.length;return i?ni(n,(t=i-(t=e||t===r?1:pa(t)))<0?0:t,i):[]},Fe.takeRightWhile=function(n,t){return n&&n.length?si(n,oo(t,3),!1,!0):[]},Fe.takeWhile=function(n,t){return n&&n.length?si(n,oo(t,3)):[]},Fe.tap=function(n,t){return t(n),n},Fe.throttle=function(n,t,e){var r=!0,o=!0;if(\"function\"!=typeof n)throw new An(i);return Qu(e)&&(r=\"leading\"in e?!!e.leading:r,o=\"trailing\"in e?!!e.trailing:o),ju(n,t,{leading:r,maxWait:t,trailing:o})},Fe.thru=hu,Fe.toArray=la,Fe.toPairs=Pa,Fe.toPairsIn=Fa,Fe.toPath=function(n){return Hu(n)?Rt(n,Lo):aa(n)?[n]:Ti(Mo(ya(n)))},Fe.toPlainObject=ga,Fe.transform=function(n,t,e){var r=Hu(n),i=r||Gu(n)||ca(n);if(t=oo(t,4),null==e){var o=n&&n.constructor;e=i?r?new o:[]:Qu(n)&&Ku(o)?We(qn(n)):{}}return(i?St:_r)(n,function(n,r,i){return t(e,n,r,i)}),e},Fe.unary=function(n){return Tu(n,1)},Fe.union=nu,Fe.unionBy=tu,Fe.unionWith=eu,Fe.uniq=function(n){return n&&n.length?ai(n):[]},Fe.uniqBy=function(n,t){return n&&n.length?ai(n,oo(t,2)):[]},Fe.uniqWith=function(n,t){return t=\"function\"==typeof t?t:r,n&&n.length?ai(n,r,t):[]},Fe.unset=function(n,t){return null==n||ci(n,t)},Fe.unzip=ru,Fe.unzipWith=iu,Fe.update=function(n,t,e){return null==n?n:fi(n,t,vi(e))},Fe.updateWith=function(n,t,e,i){return i=\"function\"==typeof i?i:r,null==n?n:fi(n,t,vi(e),i)},Fe.values=Wa,Fe.valuesIn=function(n){return null==n?[]:Kt(n,Ra(n))},Fe.without=ou,Fe.words=Ka,Fe.wrap=function(n,t){return Lu(vi(t),n)},Fe.xor=uu,Fe.xorBy=au,Fe.xorWith=cu,Fe.zip=fu,Fe.zipObject=function(n,t){return pi(n||[],t||[],Qe)},Fe.zipObjectDeep=function(n,t){return pi(n||[],t||[],Kr)},Fe.zipWith=su,Fe.entries=Pa,Fe.entriesIn=Fa,Fe.extend=ma,Fe.extendWith=ba,uc(Fe,Fe),Fe.add=yc,Fe.attempt=Za,Fe.camelCase=Da,Fe.capitalize=Ua,Fe.ceil=_c,Fe.clamp=function(n,t,e){return e===r&&(e=t,t=r),e!==r&&(e=(e=va(e))==e?e:0),t!==r&&(t=(t=va(t))==t?t:0),or(va(n),t,e)},Fe.clone=function(n){return ur(n,4)},Fe.cloneDeep=function(n){return ur(n,5)},Fe.cloneDeepWith=function(n,t){return ur(n,5,t=\"function\"==typeof t?t:r)},Fe.cloneWith=function(n,t){return ur(n,4,t=\"function\"==typeof t?t:r)},Fe.conformsTo=function(n,t){return null==t||ar(n,t,ja(t))},Fe.deburr=Ba,Fe.defaultTo=function(n,t){return null==n||n!=n?t:n},Fe.divide=mc,Fe.endsWith=function(n,t,e){n=ya(n),t=ui(t);var i=n.length,o=e=e===r?i:or(pa(e),0,i);return(e-=t.length)>=0&&n.slice(e,o)==t},Fe.eq=Wu,Fe.escape=function(n){return(n=ya(n))&&G.test(n)?n.replace(q,te):n},Fe.escapeRegExp=function(n){return(n=ya(n))&&tn.test(n)?n.replace(nn,\"\\\\$&\"):n},Fe.every=function(n,t,e){var i=Hu(n)?It:hr;return e&&yo(n,t,e)&&(t=r),i(n,oo(t,3))},Fe.find=vu,Fe.findIndex=Bo,Fe.findKey=function(n,t){return Pt(n,oo(t,3),_r)},Fe.findLast=gu,Fe.findLastIndex=Ho,Fe.findLastKey=function(n,t){return Pt(n,oo(t,3),mr)},Fe.floor=bc,Fe.forEach=yu,Fe.forEachRight=_u,Fe.forIn=function(n,t){return null==n?n:gr(n,oo(t,3),Ra)},Fe.forInRight=function(n,t){return null==n?n:yr(n,oo(t,3),Ra)},Fe.forOwn=function(n,t){return n&&_r(n,oo(t,3))},Fe.forOwnRight=function(n,t){return n&&mr(n,oo(t,3))},Fe.get=Sa,Fe.gt=Du,Fe.gte=Uu,Fe.has=function(n,t){return null!=n&&ho(n,t,Sr)},Fe.hasIn=Ta,Fe.head=qo,Fe.identity=ec,Fe.includes=function(n,t,e,r){n=qu(n)?n:Wa(n),e=e&&!r?pa(e):0;var i=n.length;return e<0&&(e=ge(i+e,0)),ua(n)?e<=i&&n.indexOf(t,e)>-1:!!i&&Wt(n,t,e)>-1},Fe.indexOf=function(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var i=null==e?0:pa(e);return i<0&&(i=ge(r+i,0)),Wt(n,t,i)},Fe.inRange=function(n,t,e){return t=ha(t),e===r?(e=t,t=0):e=ha(e),function(n,t,e){return n>=ye(t,e)&&n<ge(t,e)}(n=va(n),t,e)},Fe.invoke=ka,Fe.isArguments=Bu,Fe.isArray=Hu,Fe.isArrayBuffer=$u,Fe.isArrayLike=qu,Fe.isArrayLikeObject=Vu,Fe.isBoolean=function(n){return!0===n||!1===n||na(n)&&xr(n)==g},Fe.isBuffer=Gu,Fe.isDate=Xu,Fe.isElement=function(n){return na(n)&&1===n.nodeType&&!ra(n)},Fe.isEmpty=function(n){if(null==n)return!0;if(qu(n)&&(Hu(n)||\"string\"==typeof n||\"function\"==typeof n.splice||Gu(n)||ca(n)||Bu(n)))return!n.length;var t=lo(n);if(t==w||t==T)return!n.size;if(wo(n))return!zr(n).length;for(var e in n)if(zn.call(n,e))return!1;return!0},Fe.isEqual=function(n,t){return jr(n,t)},Fe.isEqualWith=function(n,t,e){var i=(e=\"function\"==typeof e?e:r)?e(n,t):r;return i===r?jr(n,t,r,e):!!i},Fe.isError=Yu,Fe.isFinite=function(n){return\"number\"==typeof n&&$t(n)},Fe.isFunction=Ku,Fe.isInteger=Zu,Fe.isLength=Ju,Fe.isMap=ta,Fe.isMatch=function(n,t){return n===t||Rr(n,t,ao(t))},Fe.isMatchWith=function(n,t,e){return e=\"function\"==typeof e?e:r,Rr(n,t,ao(t),e)},Fe.isNaN=function(n){return ea(n)&&n!=+n},Fe.isNative=function(n){if(bo(n))throw new En(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Nr(n)},Fe.isNil=function(n){return null==n},Fe.isNull=function(n){return null===n},Fe.isNumber=ea,Fe.isObject=Qu,Fe.isObjectLike=na,Fe.isPlainObject=ra,Fe.isRegExp=ia,Fe.isSafeInteger=function(n){return Zu(n)&&n>=-9007199254740991&&n<=s},Fe.isSet=oa,Fe.isString=ua,Fe.isSymbol=aa,Fe.isTypedArray=ca,Fe.isUndefined=function(n){return n===r},Fe.isWeakMap=function(n){return na(n)&&lo(n)==k},Fe.isWeakSet=function(n){return na(n)&&\"[object WeakSet]\"==xr(n)},Fe.join=function(n,t){return null==n?\"\":de.call(n,t)},Fe.kebabCase=Ha,Fe.last=Yo,Fe.lastIndexOf=function(n,t,e){var i=null==n?0:n.length;if(!i)return-1;var o=i;return e!==r&&(o=(o=pa(e))<0?ge(i+o,0):ye(o,i-1)),t==t?function(n,t,e){for(var r=e+1;r--;)if(n[r]===t)return r;return r}(n,t,o):Ft(n,Ut,o,!0)},Fe.lowerCase=$a,Fe.lowerFirst=qa,Fe.lt=fa,Fe.lte=sa,Fe.max=function(n){return n&&n.length?pr(n,ec,Or):r},Fe.maxBy=function(n,t){return n&&n.length?pr(n,oo(t,2),Or):r},Fe.mean=function(n){return Bt(n,ec)},Fe.meanBy=function(n,t){return Bt(n,oo(t,2))},Fe.min=function(n){return n&&n.length?pr(n,ec,Mr):r},Fe.minBy=function(n,t){return n&&n.length?pr(n,oo(t,2),Mr):r},Fe.stubArray=dc,Fe.stubFalse=vc,Fe.stubObject=function(){return{}},Fe.stubString=function(){return\"\"},Fe.stubTrue=function(){return!0},Fe.multiply=wc,Fe.nth=function(n,t){return n&&n.length?Dr(n,pa(t)):r},Fe.noConflict=function(){return lt._===this&&(lt._=Wn),this},Fe.noop=ac,Fe.now=Su,Fe.pad=function(n,t,e){n=ya(n);var r=(t=pa(t))?fe(n):0;if(!t||r>=t)return n;var i=(t-r)/2;return Ui(vt(i),e)+n+Ui(pt(i),e)},Fe.padEnd=function(n,t,e){n=ya(n);var r=(t=pa(t))?fe(n):0;return t&&r<t?n+Ui(t-r,e):n},Fe.padStart=function(n,t,e){n=ya(n);var r=(t=pa(t))?fe(n):0;return t&&r<t?Ui(t-r,e)+n:n},Fe.parseInt=function(n,t,e){return e||null==t?t=0:t&&(t=+t),me(ya(n).replace(en,\"\"),t||0)},Fe.random=function(n,t,e){if(e&&\"boolean\"!=typeof e&&yo(n,t,e)&&(t=e=r),e===r&&(\"boolean\"==typeof t?(e=t,t=r):\"boolean\"==typeof n&&(e=n,n=r)),n===r&&t===r?(n=0,t=1):(n=ha(n),t===r?(t=n,n=0):t=ha(t)),n>t){var i=n;n=t,t=i}if(e||n%1||t%1){var o=be();return ye(n+o*(t-n+at(\"1e-\"+((o+\"\").length-1))),t)}return qr(n,t)},Fe.reduce=function(n,t,e){var r=Hu(n)?Ct:qt,i=arguments.length<3;return r(n,oo(t,4),e,i,sr)},Fe.reduceRight=function(n,t,e){var r=Hu(n)?zt:qt,i=arguments.length<3;return r(n,oo(t,4),e,i,lr)},Fe.repeat=function(n,t,e){return t=(e?yo(n,t,e):t===r)?1:pa(t),Vr(ya(n),t)},Fe.replace=function(){var n=arguments,t=ya(n[0]);return n.length<3?t:t.replace(n[1],n[2])},Fe.result=function(n,t,e){var i=-1,o=(t=gi(t,n)).length;for(o||(o=1,n=r);++i<o;){var u=null==n?r:n[Lo(t[i])];u===r&&(i=o,u=e),n=Ku(u)?u.call(n):u}return n},Fe.round=Ec,Fe.runInContext=n,Fe.sample=function(n){return(Hu(n)?Ye:Xr)(n)},Fe.size=function(n){if(null==n)return 0;if(qu(n))return ua(n)?fe(n):n.length;var t=lo(n);return t==w||t==T?n.size:zr(n).length},Fe.snakeCase=Va,Fe.some=function(n,t,e){var i=Hu(n)?Mt:ti;return e&&yo(n,t,e)&&(t=r),i(n,oo(t,3))},Fe.sortedIndex=function(n,t){return ei(n,t)},Fe.sortedIndexBy=function(n,t,e){return ri(n,t,oo(e,2))},Fe.sortedIndexOf=function(n,t){var e=null==n?0:n.length;if(e){var r=ei(n,t);if(r<e&&Wu(n[r],t))return r}return-1},Fe.sortedLastIndex=function(n,t){return ei(n,t,!0)},Fe.sortedLastIndexBy=function(n,t,e){return ri(n,t,oo(e,2),!0)},Fe.sortedLastIndexOf=function(n,t){if(null!=n&&n.length){var e=ei(n,t,!0)-1;if(Wu(n[e],t))return e}return-1},Fe.startCase=Ga,Fe.startsWith=function(n,t,e){return n=ya(n),e=null==e?0:or(pa(e),0,n.length),t=ui(t),n.slice(e,e+t.length)==t},Fe.subtract=xc,Fe.sum=function(n){return n&&n.length?Vt(n,ec):0},Fe.sumBy=function(n,t){return n&&n.length?Vt(n,oo(t,2)):0},Fe.template=function(n,t,e){var i=Fe.templateSettings;e&&yo(n,t,e)&&(t=r),n=ya(n),t=wa({},t,i,Yi);var o=wa({},t.imports,i.imports,Yi),u=ja(o),a=Kt(o,u);St(u,function(n){if(fn.test(n))throw new En(\"Invalid `imports` option passed into `_.template`\")});var c,f,s=0,l=t.interpolate||mn,h=\"__p += '\",p=Tn((t.escape||mn).source+\"|\"+l.source+\"|\"+(l===K?ln:mn).source+\"|\"+(t.evaluate||mn).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(zn.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++rt+\"]\")+\"\\n\";n.replace(p,function(t,e,r,i,o,u){return r||(r=i),h+=n.slice(s,u).replace(bn,ee),e&&(c=!0,h+=\"' +\\n__e(\"+e+\") +\\n'\"),o&&(f=!0,h+=\"';\\n\"+o+\";\\n__p += '\"),r&&(h+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),s=u+t.length,t}),h+=\"';\\n\";var v=zn.call(t,\"variable\")&&t.variable;if(v){if(fn.test(v))throw new En(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(f?h.replace(U,\"\"):h).replace(B,\"$1\").replace(H,\"$1;\"),h=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(f?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var g=Za(function(){return xn(u,d+\"return \"+h).apply(r,a)});if(g.source=h,Yu(g))throw g;return g},Fe.times=function(n,t){if((n=pa(n))<1||n>s)return[];var e=h,r=ye(n,h);t=oo(t),n-=h;for(var i=Gt(r,t);++e<n;)t(e);return i},Fe.toFinite=ha,Fe.toInteger=pa,Fe.toLength=da,Fe.toLower=function(n){return ya(n).toLowerCase()},Fe.toNumber=va,Fe.toSafeInteger=function(n){return n?or(pa(n),-9007199254740991,s):0===n?n:0},Fe.toString=ya,Fe.toUpper=function(n){return ya(n).toUpperCase()},Fe.trim=function(n,t,e){if((n=ya(n))&&(e||t===r))return Xt(n);if(!n||!(t=ui(t)))return n;var i=se(n),o=se(t);return _i(i,Jt(i,o),Qt(i,o)+1).join(\"\")},Fe.trimEnd=function(n,t,e){if((n=ya(n))&&(e||t===r))return n.slice(0,le(n)+1);if(!n||!(t=ui(t)))return n;var i=se(n);return _i(i,0,Qt(i,se(t))+1).join(\"\")},Fe.trimStart=function(n,t,e){if((n=ya(n))&&(e||t===r))return n.replace(en,\"\");if(!n||!(t=ui(t)))return n;var i=se(n);return _i(i,Jt(i,se(t))).join(\"\")},Fe.truncate=function(n,t){var e=30,i=\"...\";if(Qu(t)){var o=\"separator\"in t?t.separator:o;e=\"length\"in t?pa(t.length):e,i=\"omission\"in t?ui(t.omission):i}var u=(n=ya(n)).length;if(re(n)){var a=se(n);u=a.length}if(e>=u)return n;var c=e-fe(i);if(c<1)return i;var f=a?_i(a,0,c).join(\"\"):n.slice(0,c);if(o===r)return f+i;if(a&&(c+=f.length-c),ia(o)){if(n.slice(c).search(o)){var s,l=f;for(o.global||(o=Tn(o.source,ya(hn.exec(o))+\"g\")),o.lastIndex=0;s=o.exec(l);)var h=s.index;f=f.slice(0,h===r?c:h)}}else if(n.indexOf(ui(o),c)!=c){var p=f.lastIndexOf(o);p>-1&&(f=f.slice(0,p))}return f+i},Fe.unescape=function(n){return(n=ya(n))&&V.test(n)?n.replace($,he):n},Fe.uniqueId=function(n){var t=++Mn;return ya(n)+t},Fe.upperCase=Xa,Fe.upperFirst=Ya,Fe.each=yu,Fe.eachRight=_u,Fe.first=qo,uc(Fe,(gc={},_r(Fe,function(n,t){zn.call(Fe.prototype,t)||(gc[t]=n)}),gc),{chain:!1}),Fe.VERSION=\"4.18.1\",St([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(n){Fe[n].placeholder=Fe}),St([\"drop\",\"take\"],function(n,t){Be.prototype[n]=function(e){e=e===r?1:ge(pa(e),0);var i=this.__filtered__&&!t?new Be(this):this.clone();return i.__filtered__?i.__takeCount__=ye(e,i.__takeCount__):i.__views__.push({size:ye(e,h),type:n+(i.__dir__<0?\"Right\":\"\")}),i},Be.prototype[n+\"Right\"]=function(t){return this.reverse()[n](t).reverse()}}),St([\"filter\",\"map\",\"takeWhile\"],function(n,t){var e=t+1,r=1==e||3==e;Be.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:oo(n,3),type:e}),t.__filtered__=t.__filtered__||r,t}}),St([\"head\",\"last\"],function(n,t){var e=\"take\"+(t?\"Right\":\"\");Be.prototype[n]=function(){return this[e](1).value()[0]}}),St([\"initial\",\"tail\"],function(n,t){var e=\"drop\"+(t?\"\":\"Right\");Be.prototype[n]=function(){return this.__filtered__?new Be(this):this[e](1)}}),Be.prototype.compact=function(){return this.filter(ec)},Be.prototype.find=function(n){return this.filter(n).head()},Be.prototype.findLast=function(n){return this.reverse().find(n)},Be.prototype.invokeMap=Gr(function(n,t){return\"function\"==typeof n?new Be(this):this.map(function(e){return Ar(e,n,t)})}),Be.prototype.reject=function(n){return this.filter(zu(oo(n)))},Be.prototype.slice=function(n,t){n=pa(n);var e=this;return e.__filtered__&&(n>0||t<0)?new Be(e):(n<0?e=e.takeRight(-n):n&&(e=e.drop(n)),t!==r&&(e=(t=pa(t))<0?e.dropRight(-t):e.take(t-n)),e)},Be.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Be.prototype.toArray=function(){return this.take(h)},_r(Be.prototype,function(n,t){var e=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),o=Fe[i?\"take\"+(\"last\"==t?\"Right\":\"\"):t],u=i||/^find/.test(t);o&&(Fe.prototype[t]=function(){var t=this.__wrapped__,a=i?[1]:arguments,c=t instanceof Be,f=a[0],s=c||Hu(t),l=function(n){var t=o.apply(Fe,Nt([n],a));return i&&h?t[0]:t};s&&e&&\"function\"==typeof f&&1!=f.length&&(c=s=!1);var h=this.__chain__,p=!!this.__actions__.length,d=u&&!h,v=c&&!p;if(!u&&s){t=v?t:new Be(this);var g=n.apply(t,a);return g.__actions__.push({func:hu,args:[l],thisArg:r}),new Ue(g,h)}return d&&v?n.apply(this,a):(g=this.thru(l),d?i?g.value()[0]:g.value():g)})}),St([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(n){var t=kn[n],e=/^(?:push|sort|unshift)$/.test(n)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(n);Fe.prototype[n]=function(){var n=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(Hu(i)?i:[],n)}return this[e](function(e){return t.apply(Hu(e)?e:[],n)})}}),_r(Be.prototype,function(n,t){var e=Fe[t];if(e){var r=e.name+\"\";zn.call(ke,r)||(ke[r]=[]),ke[r].push({name:t,func:e})}}),ke[Pi(r,2).name]=[{name:\"wrapper\",func:r}],Be.prototype.clone=function(){var n=new Be(this.__wrapped__);return n.__actions__=Ti(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Ti(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Ti(this.__views__),n},Be.prototype.reverse=function(){if(this.__filtered__){var n=new Be(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},Be.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,e=Hu(n),r=t<0,i=e?n.length:0,o=function(n,t,e){for(var r=-1,i=e.length;++r<i;){var o=e[r],u=o.size;switch(o.type){case\"drop\":n+=u;break;case\"dropRight\":t-=u;break;case\"take\":t=ye(t,n+u);break;case\"takeRight\":n=ge(n,t-u)}}return{start:n,end:t}}(0,i,this.__views__),u=o.start,a=o.end,c=a-u,f=r?a:u-1,s=this.__iteratees__,l=s.length,h=0,p=ye(c,this.__takeCount__);if(!e||!r&&i==c&&p==c)return li(n,this.__actions__);var d=[];n:for(;c--&&h<p;){for(var v=-1,g=n[f+=t];++v<l;){var y=s[v],_=y.iteratee,m=y.type,b=_(g);if(2==m)g=b;else if(!b){if(1==m)continue n;break n}}d[h++]=g}return d},Fe.prototype.at=pu,Fe.prototype.chain=function(){return lu(this)},Fe.prototype.commit=function(){return new Ue(this.value(),this.__chain__)},Fe.prototype.next=function(){this.__values__===r&&(this.__values__=la(this.value()));var n=this.__index__>=this.__values__.length;return{done:n,value:n?r:this.__values__[this.__index__++]}},Fe.prototype.plant=function(n){for(var t,e=this;e instanceof De;){var i=Fo(e);i.__index__=0,i.__values__=r,t?o.__wrapped__=i:t=i;var o=i;e=e.__wrapped__}return o.__wrapped__=n,t},Fe.prototype.reverse=function(){var n=this.__wrapped__;if(n instanceof Be){var t=n;return this.__actions__.length&&(t=new Be(this)),(t=t.reverse()).__actions__.push({func:hu,args:[Qo],thisArg:r}),new Ue(t,this.__chain__)}return this.thru(Qo)},Fe.prototype.toJSON=Fe.prototype.valueOf=Fe.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},Fe.prototype.first=Fe.prototype.head,Jn&&(Fe.prototype[Jn]=function(){return this}),Fe}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(lt._=pe,define(function(){return pe})):pt?((pt.exports=pe)._=pe,ht._=pe):lt._=pe}.call(this)}},t={};function e(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={id:r,loaded:!1,exports:{}};return n[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}e.d=(n,t)=>{for(var r in t)e.o(t,r)&&!e.o(n,r)&&Object.defineProperty(n,r,{enumerable:!0,get:t[r]})},e.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(n){if(\"object\"==typeof window)return window}}(),e.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t),e.r=n=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(n,\"__esModule\",{value:!0})},e.nmd=n=>(n.paths=[],n.children||(n.children=[]),n);var r={};(()=>{\"use strict\";e.r(r),e.d(r,{ExtensionCommandType:()=>F,ExtensionEventType:()=>W,initializeExtensionService:()=>G});function n(n,t,e){if(\"function\"!=typeof e.value)return e;let r=e.value;return{get(){const n=r.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},e),{value:n})),n},set(n){r=n}}}class t extends Error{constructor(n){var t;super(n||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class i extends t{constructor(n){super(n||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function o(n){if(!/^(https?:)?\\/\\//.test(n))throw new i(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=n;const e=t.port&&-1!==n.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${e?`:${e}`:\"\"}`,pathname:t.pathname,port:e,protocol:t.protocol,search:t.search}}function u(n,t){return n.type===t}class a{constructor(n){var t;this._sourceOrigins=[o(n).origin,(t=o(n),o(0===t.hostname.indexOf(\"www\")?t.href:t.href.replace(t.hostname,`www.${t.hostname}`))).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(n,t){let e=this._listeners[n];e||(this._listeners[n]=e=[]),-1===e.indexOf(t)&&e.push(t)}removeListener(n,t){const e=this._listeners[n];if(!e)return;const r=e.indexOf(t);r>=0&&e.splice(r,1)}trigger(n,t){const e=this._listeners[n.type];e&&e.forEach(e=>t?e(n,t):e(n))}_handleMessage(n){if(-1===this._sourceOrigins.indexOf(n.origin)||!u(n.data,n.data.type))return;const t=n.data,{context:e}=t,r=function(n,t){var e={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&t.indexOf(r)<0&&(e[r]=n[r]);if(null!=n&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(n);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(n,r[i])&&(e[r[i]]=n[r[i]])}return e}(t,[\"context\"]);this.trigger(r,e)}}!function(n,t,e,r){var i,o=arguments.length,u=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,e):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)u=Reflect.decorate(n,t,e,r);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(u=(o<3?i(u):o>3?i(t,e,u):i(t,e))||u);o>3&&u&&Object.defineProperty(t,e,u)}([function(t,e,r){return e&&r?n(0,e,r):function(t){const e=class extends t{};return Object.getOwnPropertyNames(t.prototype).forEach(r=>{const i=Object.getOwnPropertyDescriptor(t.prototype,r);i&&\"constructor\"!==r&&Object.defineProperty(e.prototype,r,n(t.prototype,r,i))}),e}(t)}],a.prototype,\"_handleMessage\",null);var c=function(n,t){return c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var e in t)t.hasOwnProperty(e)&&(n[e]=t[e])},c(n,t)};function f(n,t){function e(){this.constructor=n}c(n,t),n.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}function s(n){return\"function\"==typeof n}var l=!1,h={Promise:void 0,set useDeprecatedSynchronousErrorHandling(n){n&&(new Error).stack,l=n},get useDeprecatedSynchronousErrorHandling(){return l}};function p(n){setTimeout(function(){throw n},0)}var d={closed:!0,next:function(n){},error:function(n){if(h.useDeprecatedSynchronousErrorHandling)throw n;p(n)},complete:function(){}},v=function(){return Array.isArray||function(n){return n&&\"number\"==typeof n.length}}();function g(n){return null!==n&&\"object\"==typeof n}var y=function(){function n(n){return Error.call(this),this.message=n?n.length+\" errors occurred during unsubscription:\\n\"+n.map(function(n,t){return t+1+\") \"+n.toString()}).join(\"\\n  \"):\"\",this.name=\"UnsubscriptionError\",this.errors=n,this}return n.prototype=Object.create(Error.prototype),n}(),_=function(){function n(n){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,n&&(this._ctorUnsubscribe=!0,this._unsubscribe=n)}return n.prototype.unsubscribe=function(){var t;if(!this.closed){var e=this,r=e._parentOrParents,i=e._ctorUnsubscribe,o=e._unsubscribe,u=e._subscriptions;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,r instanceof n)r.remove(this);else if(null!==r)for(var a=0;a<r.length;++a)r[a].remove(this);if(s(o)){i&&(this._unsubscribe=void 0);try{o.call(this)}catch(n){t=n instanceof y?m(n.errors):[n]}}if(v(u)){a=-1;for(var c=u.length;++a<c;){var f=u[a];if(g(f))try{f.unsubscribe()}catch(n){t=t||[],n instanceof y?t=t.concat(m(n.errors)):t.push(n)}}}if(t)throw new y(t)}},n.prototype.add=function(t){var e=t;if(!t)return n.EMPTY;switch(typeof t){case\"function\":e=new n(t);case\"object\":if(e===this||e.closed||\"function\"!=typeof e.unsubscribe)return e;if(this.closed)return e.unsubscribe(),e;if(!(e instanceof n)){var r=e;(e=new n)._subscriptions=[r]}break;default:throw new Error(\"unrecognized teardown \"+t+\" added to Subscription.\")}var i=e._parentOrParents;if(null===i)e._parentOrParents=this;else if(i instanceof n){if(i===this)return e;e._parentOrParents=[i,this]}else{if(-1!==i.indexOf(this))return e;i.push(this)}var o=this._subscriptions;return null===o?this._subscriptions=[e]:o.push(e),e},n.prototype.remove=function(n){var t=this._subscriptions;if(t){var e=t.indexOf(n);-1!==e&&t.splice(e,1)}},n.EMPTY=function(n){return n.closed=!0,n}(new n),n}();function m(n){return n.reduce(function(n,t){return n.concat(t instanceof y?t.errors:t)},[])}var b=function(){return\"function\"==typeof Symbol?Symbol(\"rxSubscriber\"):\"@@rxSubscriber_\"+Math.random()}(),w=function(n){function t(e,r,i){var o=n.call(this)||this;switch(o.syncErrorValue=null,o.syncErrorThrown=!1,o.syncErrorThrowable=!1,o.isStopped=!1,arguments.length){case 0:o.destination=d;break;case 1:if(!e){o.destination=d;break}if(\"object\"==typeof e){e instanceof t?(o.syncErrorThrowable=e.syncErrorThrowable,o.destination=e,e.add(o)):(o.syncErrorThrowable=!0,o.destination=new E(o,e));break}default:o.syncErrorThrowable=!0,o.destination=new E(o,e,r,i)}return o}return f(t,n),t.prototype[b]=function(){return this},t.create=function(n,e,r){var i=new t(n,e,r);return i.syncErrorThrowable=!1,i},t.prototype.next=function(n){this.isStopped||this._next(n)},t.prototype.error=function(n){this.isStopped||(this.isStopped=!0,this._error(n))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,n.prototype.unsubscribe.call(this))},t.prototype._next=function(n){this.destination.next(n)},t.prototype._error=function(n){this.destination.error(n),this.unsubscribe()},t.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},t.prototype._unsubscribeAndRecycle=function(){var n=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=n,this},t}(_),E=function(n){function t(t,e,r,i){var o,u=n.call(this)||this;u._parentSubscriber=t;var a=u;return s(e)?o=e:e&&(o=e.next,r=e.error,i=e.complete,e!==d&&(s((a=Object.create(e)).unsubscribe)&&u.add(a.unsubscribe.bind(a)),a.unsubscribe=u.unsubscribe.bind(u))),u._context=a,u._next=o,u._error=r,u._complete=i,u}return f(t,n),t.prototype.next=function(n){if(!this.isStopped&&this._next){var t=this._parentSubscriber;h.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?this.__tryOrSetError(t,this._next,n)&&this.unsubscribe():this.__tryOrUnsub(this._next,n)}},t.prototype.error=function(n){if(!this.isStopped){var t=this._parentSubscriber,e=h.useDeprecatedSynchronousErrorHandling;if(this._error)e&&t.syncErrorThrowable?(this.__tryOrSetError(t,this._error,n),this.unsubscribe()):(this.__tryOrUnsub(this._error,n),this.unsubscribe());else if(t.syncErrorThrowable)e?(t.syncErrorValue=n,t.syncErrorThrown=!0):p(n),this.unsubscribe();else{if(this.unsubscribe(),e)throw n;p(n)}}},t.prototype.complete=function(){var n=this;if(!this.isStopped){var t=this._parentSubscriber;if(this._complete){var e=function(){return n._complete.call(n._context)};h.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,e),this.unsubscribe()):(this.__tryOrUnsub(e),this.unsubscribe())}else this.unsubscribe()}},t.prototype.__tryOrUnsub=function(n,t){try{n.call(this._context,t)}catch(n){if(this.unsubscribe(),h.useDeprecatedSynchronousErrorHandling)throw n;p(n)}},t.prototype.__tryOrSetError=function(n,t,e){if(!h.useDeprecatedSynchronousErrorHandling)throw new Error(\"bad call\");try{t.call(this._context,e)}catch(t){return h.useDeprecatedSynchronousErrorHandling?(n.syncErrorValue=t,n.syncErrorThrown=!0,!0):(p(t),!0)}return!1},t.prototype._unsubscribe=function(){var n=this._parentSubscriber;this._context=null,this._parentSubscriber=null,n.unsubscribe()},t}(w),x=function(){return\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\"}();function O(n){return n}var S=function(){function n(n){this._isScalar=!1,n&&(this._subscribe=n)}return n.prototype.lift=function(t){var e=new n;return e.source=this,e.operator=t,e},n.prototype.subscribe=function(n,t,e){var r=this.operator,i=function(n,t,e){if(n){if(n instanceof w)return n;if(n[b])return n[b]()}return n||t||e?new w(n,t,e):new w(d)}(n,t,e);if(r?i.add(r.call(i,this.source)):i.add(this.source||h.useDeprecatedSynchronousErrorHandling&&!i.syncErrorThrowable?this._subscribe(i):this._trySubscribe(i)),h.useDeprecatedSynchronousErrorHandling&&i.syncErrorThrowable&&(i.syncErrorThrowable=!1,i.syncErrorThrown))throw i.syncErrorValue;return i},n.prototype._trySubscribe=function(n){try{return this._subscribe(n)}catch(t){h.useDeprecatedSynchronousErrorHandling&&(n.syncErrorThrown=!0,n.syncErrorValue=t),function(n){for(;n;){var t=n,e=t.closed,r=t.destination,i=t.isStopped;if(e||i)return!1;n=r&&r instanceof w?r:null}return!0}(n)?n.error(t):console.warn(t)}},n.prototype.forEach=function(n,t){var e=this;return new(t=T(t))(function(t,r){var i;i=e.subscribe(function(t){try{n(t)}catch(n){r(n),i&&i.unsubscribe()}},r,t)})},n.prototype._subscribe=function(n){var t=this.source;return t&&t.subscribe(n)},n.prototype[x]=function(){return this},n.prototype.pipe=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];return 0===n.length?this:(0===(e=n).length?O:1===e.length?e[0]:function(n){return e.reduce(function(n,t){return t(n)},n)})(this);var e},n.prototype.toPromise=function(n){var t=this;return new(n=T(n))(function(n,e){var r;t.subscribe(function(n){return r=n},function(n){return e(n)},function(){return n(r)})})},n.create=function(t){return new n(t)},n}();function T(n){if(n||(n=h.Promise||Promise),!n)throw new Error(\"no Promise impl found\");return n}function I(n,t){return function(e){if(\"function\"!=typeof n)throw new TypeError(\"argument is not a function. Are you looking for `mapTo()`?\");return e.lift(new A(n,t))}}var A=function(){function n(n,t){this.project=n,this.thisArg=t}return n.prototype.call=function(n,t){return t.subscribe(new k(n,this.project,this.thisArg))},n}(),k=function(n){function t(t,e,r){var i=n.call(this,t)||this;return i.project=e,i.count=0,i.thisArg=r||i,i}return f(t,n),t.prototype._next=function(n){var t;try{t=this.project.call(this.thisArg,n,this.count++)}catch(n){return void this.destination.error(n)}this.destination.next(t)},t}(w);function j(n,t,e,r){return s(e)&&(r=e,e=void 0),r?j(n,t,e).pipe(I(function(n){return v(n)?r.apply(void 0,n):r(n)})):new S(function(r){R(n,t,function(n){arguments.length>1?r.next(Array.prototype.slice.call(arguments)):r.next(n)},r,e)})}function R(n,t,e,r,i){var o;if(function(n){return n&&\"function\"==typeof n.addEventListener&&\"function\"==typeof n.removeEventListener}(n)){var u=n;n.addEventListener(t,e,i),o=function(){return u.removeEventListener(t,e,i)}}else if(function(n){return n&&\"function\"==typeof n.on&&\"function\"==typeof n.off}(n)){var a=n;n.on(t,e),o=function(){return a.off(t,e)}}else if(function(n){return n&&\"function\"==typeof n.addListener&&\"function\"==typeof n.removeListener}(n)){var c=n;n.addListener(t,e),o=function(){return c.removeListener(t,e)}}else{if(!n||!n.length)throw new TypeError(\"Invalid event target\");for(var f=0,s=n.length;f<s;f++)R(n[f],t,e,r,i)}r.add(o)}var N=function(){function n(n,t){this.predicate=n,this.thisArg=t}return n.prototype.call=function(n,t){return t.subscribe(new C(n,this.predicate,this.thisArg))},n}(),C=function(n){function t(t,e,r){var i=n.call(this,t)||this;return i.predicate=e,i.thisArg=r,i.count=0,i}return f(t,n),t.prototype._next=function(n){var t;try{t=this.predicate.call(this.thisArg,n,this.count++)}catch(n){return void this.destination.error(n)}t&&this.destination.next(n)},t}(w),z=function(){function n(){return Error.call(this),this.message=\"argument out of range\",this.name=\"ArgumentOutOfRangeError\",this}return n.prototype=Object.create(Error.prototype),n}();var M=function(){function n(n){if(this.total=n,this.total<0)throw new z}return n.prototype.call=function(n,t){return t.subscribe(new L(n,this.total))},n}(),L=function(n){function t(t,e){var r=n.call(this,t)||this;return r.total=e,r.count=0,r}return f(t,n),t.prototype._next=function(n){var t=this.total,e=++this.count;e<=t&&(this.destination.next(n),e===t&&(this.destination.complete(),this.unsubscribe()))},t}(w);class P{constructor(n,t,e){this._targetWindow=t,this._context=e,this._targetOrigin=\"*\"===n?\"*\":o(n).origin}post(n,t){const e=this._targetWindow;if(window===e)return;if(!e)throw new Error(\"Unable to post message because target window is not set.\");const r=t&&j(window,\"message\").pipe((i=n=>n.origin===this._targetOrigin&&u(n.data,n.data.type)&&-1!==[t.successType,t.errorType].indexOf(n.data.type),function(n){return n.lift(new N(i,void 0))}),I(n=>{if(t.errorType===n.data.type)throw n.data;return n.data}),function(n){return n.lift(new M(1))}).toPromise();var i;return e.postMessage(Object.assign(Object.assign({},n),{context:this._context}),this._targetOrigin),r}setTarget(n){this._targetWindow=n}setContext(n){this._context=n}}var F,W,D,U,B,H=e(9440);!function(n){n.ReloadCheckout=\"EXTENSION:RELOAD_CHECKOUT\",n.ShowLoadingIndicator=\"EXTENSION:SHOW_LOADING_INDICATOR\",n.SetIframeStyle=\"EXTENSION:SET_IFRAME_STYLE\",n.ReRenderShippingForm=\"EXTENSION:RE_RENDER_SHIPPING_FORM\",n.ReRenderShippingStep=\"EXTENSION:RE_RENDER_SHIPPING_STEP\"}(F||(F={})),function(n){n.ConsignmentsChanged=\"EXTENSION:CONSIGNMENTS_CHANGED\"}(W||(W={})),function(n){n.Subscribe=\"EXTENSION_INTERNAL:SUBSCRIBE\",n.Unsubscribe=\"EXTENSION_INTERNAL:UNSUBSCRIBE\",n.ResizeIframe=\"EXTENSION_INTERNAL:RESIZE_IFRAME\"}(D||(D={})),function(n){n.ExtensionReady=\"EXTENSION:READY\",n.ExtensionFailed=\"EXTENSION:FAILED\"}(U||(U={})),function(n){n.GetConsignments=\"EXTENSION:GET_CONSIGNMENTS\"}(B||(B={}));var $=function(n,t,e,r){return new(e||(e=Promise))(function(i,o){function u(n){try{c(r.next(n))}catch(n){o(n)}}function a(n){try{c(r.throw(n))}catch(n){o(n)}}function c(n){var t;n.done?i(n.value):(t=n.value,t instanceof e?t:new e(function(n){n(t)})).then(u,a)}c((r=r.apply(n,t||[])).next())})};class q{constructor(n,t,e,r){this._messageListener=n,this._eventListener=t,this._messagePoster=e,this._internalCommandPoster=r,this._messagePoster.setTarget(window.parent),this._internalCommandPoster.setTarget(window.parent)}initialize(n){return $(this,void 0,void 0,function*(){if(!n)throw new Error(\"Extension Id not found.\");this._extensionId=n,this._messageListener.listen(),this._eventListener.listen(),this._messagePoster.setContext({extensionId:n});try{yield this._internalCommandPoster.post({type:D.ResizeIframe,payload:{extensionId:n}},{successType:U.ExtensionReady,errorType:U.ExtensionFailed})}catch(n){if(this._isExtensionFailedEvent(n))throw new Error(\"Extension failed to load within 60 seconds; please reload and try again.\")}})}post(n){if(!this._isCommandOrQueryType(n.type))throw new Error(`${n.type} is not supported.`);this._messagePoster.post(n)}addListener(n,t=H.noop){if(!this._extensionId)throw new Error(\"Extension is not initialized.\");const e=this._extensionId;if(!Object.values(W).includes(n))throw new Error(`${n} is not supported.`);return this._internalCommandPoster.post({type:D.Subscribe,payload:{extensionId:e,eventType:n}}),this._eventListener.addListener(n,t),()=>{this._internalCommandPoster.post({type:D.Unsubscribe,payload:{extensionId:e,eventType:n}}),this._eventListener.removeListener(n,t)}}getConsignments(n=!0){return $(this,void 0,void 0,function*(){return new Promise(t=>{const e=n=>{this._messageListener.removeListener(\"EXTENSION:GET_CONSIGNMENTS\",e),t(n.payload.consignments)};this._messageListener.addListener(\"EXTENSION:GET_CONSIGNMENTS\",e),this.post({type:B.GetConsignments,payload:{useCache:n}})})})}_isExtensionFailedEvent(n){return n.type===U.ExtensionFailed}_isCommandOrQueryType(n){return Object.values(F).includes(n)||Object.values(B).includes(n)}}var V=function(n,t,e,r){return new(e||(e=Promise))(function(i,o){function u(n){try{c(r.next(n))}catch(n){o(n)}}function a(n){try{c(r.throw(n))}catch(n){o(n)}}function c(n){var t;n.done?i(n.value):(t=n.value,t instanceof e?t:new e(function(n){n(t)})).then(u,a)}c((r=r.apply(n,t||[])).next())})};function G(n){return V(this,void 0,void 0,function*(){const{extensionId:t,parentOrigin:r,taggedElementId:i,fixedHeight:o}=n;e(5990);const u=new q(new a(r),new a(r),new P(r),new P(r));return yield u.initialize(t),function(n,t){if(!function(n){return\"parentIFrame\"in n}(window))throw new Error(\"iFramerResizer window not found.\");if(t)window.parentIFrame.size(t);else if(window.parentIFrame.autoResize(!0),n){const t=document.getElementById(n);if(!t)throw new Error(\"Element not found.\");t.setAttribute(\"data-iframe-height\",\"\"),window.parentIFrame.setHeightCalculationMethod(\"taggedElement\")}else window.parentIFrame.setHeightCalculationMethod(\"bodyOffset\")}(i,o),u})}})(),module.exports=r})();\n//# sourceMappingURL=extension.js.map"
  },
  {
    "path": "dist/cjs/extension.js.LICENSE.txt",
    "content": "/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n"
  },
  {
    "path": "dist/cjs/hosted-form-v2-iframe-content.js",
    "content": "/*! For license information please see hosted-form-v2-iframe-content.js.LICENSE.txt */\n(()=>{var t={5889(t,e,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),u=n(3814);function s(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function a(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}function c(t,e){return e.decode?i(t):t}function l(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?l(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function f(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function p(t){const e=(t=f(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function h(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function d(t,e){s((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,n,r)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case\"bracket\":return(t,n,r)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"comma\":case\"separator\":return(e,n,r)=>{const i=\"string\"==typeof n&&n.includes(t.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&c(n,t).includes(t.arrayFormatSeparator);n=o?c(n,t):n;const u=i||o?n.split(t.arrayFormatSeparator).map(e=>c(e,t)):null===n?n:c(n,t);r[e]=u};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[].concat(n[t],e):n[t]=e}}}(e),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,u]=o(e.decode?i.replace(/\\+/g,\" \"):i,\"=\");u=void 0===u?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?u:c(u,e),n(c(t,e),u,r)}for(const t of Object.keys(r)){const n=r[t];if(\"object\"==typeof n&&null!==n)for(const t of Object.keys(n))n[t]=h(n[t],e);else r[t]=h(n,e)}return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce((t,e)=>{const n=r[e];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?t[e]=l(n):t[e]=n,t},Object.create(null))}e.extract=p,e.parse=d,e.stringify=(t,e)=>{if(!t)return\"\";s((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const n=n=>e.skipNull&&null==t[n]||e.skipEmptyString&&\"\"===t[n],r=function(t){switch(t.arrayFormat){case\"index\":return e=>(n,r)=>{const i=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[a(e,t),\"[\",i,\"]\"].join(\"\")]:[...n,[a(e,t),\"[\",a(i,t),\"]=\",a(r,t)].join(\"\")]};case\"bracket\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[a(e,t),\"[]\"].join(\"\")]:[...n,[a(e,t),\"[]=\",a(r,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(n,r)=>null==r||0===r.length?n:0===n.length?[[a(e,t),\"=\",a(r,t)].join(\"\")]:[[n,a(r,t)].join(t.arrayFormatSeparator)];default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,a(e,t)]:[...n,[a(e,t),\"=\",a(r,t)].join(\"\")]}}(e),i={};for(const e of Object.keys(t))n(e)||(i[e]=t[e]);const o=Object.keys(i);return!1!==e.sort&&o.sort(e.sort),o.map(n=>{const i=t[n];return void 0===i?\"\":null===i?a(n,e):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):a(n,e)+\"=\"+a(i,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[n,r]=o(t,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:d(p(t),e)},e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:c(r,e)}:{})},e.stringifyUrl=(t,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=f(t.url).split(\"?\")[0]||\"\",i=e.extract(t.url),o=e.parse(i,{sort:!1}),u=Object.assign(o,t.query);let s=e.stringify(u,n);s&&(s=`?${s}`);let c=function(t){let e=\"\";const n=t.indexOf(\"#\");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(c=`#${a(t.fragmentIdentifier,n)}`),`${r}${s}${c}`},e.pick=(t,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:s}=e.parseUrl(t,r);return e.stringifyUrl({url:i,query:u(o,n),fragmentIdentifier:s},r)},e.exclude=(t,n,r)=>{const i=Array.isArray(n)?t=>!n.includes(t):(t,e)=>!n(t,e);return e.pick(t,i,r)}},2437(t,e,n){\"use strict\";t.exports={number:n(36),expirationDate:n(1644),expirationMonth:n(188),expirationYear:n(7209),cvv:n(3221),postalCode:n(583),creditCardType:n(2921)}},36(t,e,n){\"use strict\";var r=n(1653),i=n(2921);function o(t,e,n){return{card:t,isPotentiallyValid:e,isValid:n}}t.exports=function(t,e){var n,u,s,a,c;if(e=e||{},\"number\"==typeof t&&(t=String(t)),\"string\"!=typeof t)return o(null,!1,!1);if(t=t.replace(/\\-|\\s/g,\"\"),!/^\\d*$/.test(t))return o(null,!1,!1);if(0===(n=i(t)).length)return o(null,!1,!1);if(1!==n.length)return o(null,!0,!1);if(u=n[0],e.maxLength&&t.length>e.maxLength)return o(u,!1,!1);for(s=u.type===i.types.UNIONPAY&&!0!==e.luhnValidateUnionPay||r(t),c=Math.max.apply(null,u.lengths),e.maxLength&&(c=Math.min(e.maxLength,c)),a=0;a<u.lengths.length;a++)if(u.lengths[a]===t.length)return o(u,t.length<c||s,s);return o(u,t.length<c,!1)}},3221(t){\"use strict\";function e(t,e){return{isValid:t,isPotentiallyValid:e}}t.exports=function(t,n){return n=(n=n||3)instanceof Array?n:[n],\"string\"!=typeof t?e(!1,!1):/^\\d*$/.test(t)?function(t,e){for(var n=0;n<t.length;n++)if(e===t[n])return!0;return!1}(n,t.length)?e(!0,!0):t.length<Math.min.apply(null,n)?e(!1,!0):t.length>function(t){for(var e=3,n=0;n<t.length;n++)e=t[n]>e?t[n]:e;return e}(n)?e(!1,!1):e(!0,!0):e(!1,!1)}},1644(t,e,n){\"use strict\";var r=n(9376),i=n(188),o=n(7209);function u(t,e,n,r){return{isValid:t,isPotentiallyValid:e,month:n,year:r}}t.exports=function(t,e){var n,s,a,c;if(\"string\"==typeof t)t=t.replace(/^(\\d\\d) (\\d\\d(\\d\\d)?)$/,\"$1/$2\"),n=r(t);else{if(null===t||\"object\"!=typeof t)return u(!1,!1,null,null);n={month:String(t.month),year:String(t.year)}}if(s=i(n.month),a=o(n.year,e),s.isValid){if(a.isCurrentYear)return u(c=s.isValidForThisYear,c,n.month,n.year);if(a.isValid)return u(!0,!0,n.month,n.year)}return s.isPotentiallyValid&&a.isPotentiallyValid?u(!1,!0,null,null):u(!1,!1,null,null)}},188(t){\"use strict\";function e(t,e,n){return{isValid:t,isPotentiallyValid:e,isValidForThisYear:n||!1}}t.exports=function(t){var n,r,i=(new Date).getMonth()+1;return\"string\"!=typeof t?e(!1,!1):\"\"===t.replace(/\\s/g,\"\")||\"0\"===t?e(!1,!0):/^\\d*$/.test(t)?(n=parseInt(t,10),isNaN(t)?e(!1,!1):e(r=n>0&&n<13,r,r&&n>=i)):e(!1,!1)}},7209(t){\"use strict\";function e(t,e,n){return{isValid:t,isPotentiallyValid:e,isCurrentYear:n||!1}}t.exports=function(t,n){var r,i,o,u,s;return n=n||19,\"string\"!=typeof t?e(!1,!1):\"\"===t.replace(/\\s/g,\"\")?e(!1,!0):/^\\d*$/.test(t)?(i=t.length)<2?e(!1,!0):(r=(new Date).getFullYear(),3===i?e(!1,t.slice(0,2)===String(r).slice(0,2)):i>4?e(!1,!1):(t=parseInt(t,10),o=Number(String(r).substr(2,2)),2===i?(s=o===t,u=t>=o&&t<=o+n):4===i&&(s=r===t,u=t>=r&&t<=r+n),e(u,u,s))):e(!1,!1)}},2278(t){\"use strict\";t.exports=Array.isArray||function(t){return\"[object Array]\"===Object.prototype.toString.call(t)}},1653(t){\"use strict\";t.exports=function(t){for(var e,n=0,r=!1,i=t.length-1;i>=0;)e=parseInt(t.charAt(i),10),r&&(e*=2)>9&&(e=e%10+1),r=!r,n+=e,i--;return n%10==0}},9376(t,e,n){\"use strict\";var r=n(7209),i=n(2278);t.exports=function(t){var e,n,o,u,s;return/^\\d{4}-\\d{1,2}$/.test(t)?t=t.split(\"-\").reverse():/\\//.test(t)?t=t.split(/\\s*\\/\\s*/g):/\\s/.test(t)&&(t=t.split(/ +/g)),i(t)?{month:t[0]||\"\",year:t.slice(1).join()}:(o=t,n=0===(s=Number(o[0]))?2:s>1||1===s&&Number(o[1])>2?1:1===s?(u=o.substr(1),r(u).isPotentiallyValid?1:2):5===o.length?1:o.length>5?2:1,{month:e=t.substr(0,n),year:t.substr(e.length)})}},583(t){\"use strict\";function e(t,e){return{isValid:t,isPotentiallyValid:e}}t.exports=function(t,n){var r;return r=(n=n||{}).minLength||3,\"string\"!=typeof t?e(!1,!1):t.length<r?e(!1,!0):e(!0,!0)}},2921(t,e,n){\"use strict\";var r,i=n(2931),o=n(7695),u=n(4461),s=n(6520),a=n(9545),c={},l={VISA:\"visa\",MASTERCARD:\"mastercard\",AMERICAN_EXPRESS:\"american-express\",DINERS_CLUB:\"diners-club\",DISCOVER:\"discover\",JCB:\"jcb\",UNIONPAY:\"unionpay\",MAESTRO:\"maestro\",ELO:\"elo\",MIR:\"mir\",HIPER:\"hiper\",HIPERCARD:\"hipercard\"},f=[l.VISA,l.MASTERCARD,l.AMERICAN_EXPRESS,l.DINERS_CLUB,l.DISCOVER,l.JCB,l.UNIONPAY,l.MAESTRO,l.ELO,l.MIR,l.HIPER,l.HIPERCARD];function p(t){return c[t]||i[t]}function h(t,e){var n=r.indexOf(t);if(!e&&-1===n)throw new Error('\"'+t+'\" is not a supported card type.');return n}function d(t){var e,n=[];return s(t)?0===t.length?r.map(function(t){return o(p(t))}):(r.forEach(function(e){var r=p(e);a(t,r,n)}),(e=u(n))?[e]:n):[]}r=o(f),d.getTypeInfo=function(t){return o(p(t))},d.removeCard=function(t){var e=h(t);r.splice(e,1)},d.addCard=function(t){var e=h(t.type,!0);c[t.type]=t,-1===e&&r.push(t.type)},d.updateCard=function(t,e){var n,r=c[t]||i[t];if(!r)throw new Error('\"'+t+'\" is not a recognized type. Use `addCard` instead.');if(e.type&&r.type!==e.type)throw new Error(\"Cannot overwrite type parameter.\");n=o(r,!0),Object.keys(n).forEach(function(t){e[t]&&(n[t]=e[t])}),c[n.type]=n},d.changeOrder=function(t,e){var n=h(t);r.splice(n,1),r.splice(e,0,t)},d.resetModifications=function(){r=o(f),c={}},d.types=l,t.exports=d},9545(t,e,n){\"use strict\";var r=n(7695),i=n(6744);t.exports=function(t,e,n){var o,u,s,a;for(o=0;o<e.patterns.length;o++)if(u=e.patterns[o],i(t,u)){a=r(e),s=Array.isArray(u)?String(u[0]).length:String(u).length,t.length>=s&&(a.matchStrength=s),n.push(a);break}}},2931(t){\"use strict\";t.exports={visa:{niceType:\"Visa\",type:\"visa\",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:\"CVV\",size:3}},mastercard:{niceType:\"Mastercard\",type:\"mastercard\",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}},\"american-express\":{niceType:\"American Express\",type:\"american-express\",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:\"CID\",size:4}},\"diners-club\":{niceType:\"Diners Club\",type:\"diners-club\",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:\"CVV\",size:3}},discover:{niceType:\"Discover\",type:\"discover\",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:\"CID\",size:3}},jcb:{niceType:\"JCB\",type:\"jcb\",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:\"CVV\",size:3}},unionpay:{niceType:\"UnionPay\",type:\"unionpay\",patterns:[620,[624,626],[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[622019,622999],[62207,62209],[622126,622925],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:\"CVN\",size:3}},maestro:{niceType:\"Maestro\",type:\"maestro\",patterns:[493698,[5e5,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:\"CVC\",size:3}},elo:{niceType:\"Elo\",type:\"elo\",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:\"CVE\",size:3}},mir:{niceType:\"Mir\",type:\"mir\",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:\"CVP2\",size:3}},hiper:{niceType:\"Hiper\",type:\"hiper\",patterns:[637095,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}},hipercard:{niceType:\"Hipercard\",type:\"hipercard\",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}}}},7695(t){\"use strict\";t.exports=function(t){return t?JSON.parse(JSON.stringify(t)):null}},4461(t){\"use strict\";t.exports=function(t){if(function(t){var e=t.filter(function(t){return t.matchStrength}).length;return e>0&&e===t.length}(t))return t.reduce(function(t,e){return t?t.matchStrength<e.matchStrength?e:t:e})}},6520(t){\"use strict\";t.exports=function(t){return\"string\"==typeof t||t instanceof String}},6744(t){\"use strict\";t.exports=function(t,e){return Array.isArray(e)?function(t,e,n){var r=String(e).length,i=t.substr(0,r),o=parseInt(i,10);return e=parseInt(String(e).substr(0,i.length),10),n=parseInt(String(n).substr(0,i.length),10),o>=e&&o<=n}(t,e[0],e[1]):function(t,e){return(e=String(e)).substring(0,t.length)===t.substring(0,e.length)}(t,e)}},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+e+\")+\",\"gi\");function i(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],i(n),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var e=t.match(n)||[],r=1;r<e.length;r++)e=(t=i(e,r).join(\"\")).match(n)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(t);n;){try{e[n[0]]=decodeURIComponent(n[0])}catch(t){var i=o(n[0]);i!==n[0]&&(e[n[0]]=i)}n=r.exec(t)}e[\"%C2\"]=\"�\";for(var u=Object.keys(e),s=0;s<u.length;s++){var a=u[s];t=t.replace(new RegExp(a,\"g\"),e[a])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,e){for(var n={},r=Object.keys(t),i=Array.isArray(e),o=0;o<r.length;o++){var u=r[o],s=t[u];(i?-1!==e.indexOf(u):e(u,s,t))&&(n[u]=s)}return n}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(e,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var u=JSON.stringify(n);/^[\\{\\[]/.test(u)&&(n=u)}catch(t){}n=r.write?r.write(n,e):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var s=\"\";for(var a in o)o[a]&&(s+=\"; \"+a,!0!==o[a]&&(s+=\"=\"+o[a].split(\";\")[0]));return document.cookie=e+\"=\"+n+s}}function u(t,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],u=0;u<o.length;u++){var s=o[u].split(\"=\"),a=s.slice(1).join(\"=\");n||'\"'!==a.charAt(0)||(a=a.slice(1,-1));try{var c=e(s[0]);if(a=(r.read||r)(a,c)||e(a),n)try{a=JSON.parse(a)}catch(t){}if(i[c]=a,t===c)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return u(t,!1)},i.getJSON=function(t){return u(t,!0)},i.remove=function(e,n){o(e,\"\",t(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},35(t,e,n){t=n.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",u=\"[object Function]\",s=\"[object Object]\",a=/^\\[object .+?Constructor\\]$/,c=/^(?:0|[1-9]\\d*)$/,l={};l[\"[object Float32Array]\"]=l[\"[object Float64Array]\"]=l[\"[object Int8Array]\"]=l[\"[object Int16Array]\"]=l[\"[object Int32Array]\"]=l[\"[object Uint8Array]\"]=l[\"[object Uint8ClampedArray]\"]=l[\"[object Uint16Array]\"]=l[\"[object Uint32Array]\"]=!0,l[o]=l[\"[object Array]\"]=l[\"[object ArrayBuffer]\"]=l[\"[object Boolean]\"]=l[\"[object DataView]\"]=l[\"[object Date]\"]=l[\"[object Error]\"]=l[u]=l[\"[object Map]\"]=l[\"[object Number]\"]=l[s]=l[\"[object RegExp]\"]=l[\"[object Set]\"]=l[\"[object String]\"]=l[\"[object WeakMap]\"]=!1;var f,p,h,d=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,y=\"object\"==typeof self&&self&&self.Object===Object&&self,_=d||y||Function(\"return this\")(),v=e&&!e.nodeType&&e,g=v&&t&&!t.nodeType&&t,m=g&&g.exports===v,b=m&&d.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),x=w&&w.isTypedArray,E=Array.prototype,O=Function.prototype,S=Object.prototype,j=_[\"__core-js_shared__\"],T=O.toString,C=S.hasOwnProperty,A=(f=/[^.]+$/.exec(j&&j.keys&&j.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+f:\"\",F=S.toString,k=T.call(Object),I=RegExp(\"^\"+T.call(C).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),D=m?_.Buffer:void 0,R=_.Symbol,$=_.Uint8Array,P=(D&&D.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(t){return p(h(t))}),N=Object.create,U=S.propertyIsEnumerable,V=E.splice,z=R?R.toStringTag:void 0,L=function(){try{var t=st(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),M=D?D.isBuffer:void 0,q=Math.max,H=Date.now,B=st(_,\"Map\"),W=st(Object,\"create\"),Z=function(){function t(){}return function(e){if(!mt(e))return{};if(N)return N(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function Y(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function J(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function K(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function G(t){var e=this.__data__=new J(t);this.size=e.size}function X(t,e,n){(void 0!==n&&!pt(t[e],n)||void 0===n&&!(e in t))&&et(t,e,n)}function Q(t,e,n){var r=t[e];C.call(t,e)&&pt(r,n)&&(void 0!==n||e in t)||et(t,e,n)}function tt(t,e){for(var n=t.length;n--;)if(pt(t[n][0],e))return n;return-1}function et(t,e,n){\"__proto__\"==e&&L?L(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}Y.prototype.clear=function(){this.__data__=W?W(null):{},this.size=0},Y.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Y.prototype.get=function(t){var e=this.__data__;if(W){var n=e[t];return n===r?void 0:n}return C.call(e,t)?e[t]:void 0},Y.prototype.has=function(t){var e=this.__data__;return W?void 0!==e[t]:C.call(e,t)},Y.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=W&&void 0===e?r:e,this},J.prototype.clear=function(){this.__data__=[],this.size=0},J.prototype.delete=function(t){var e=this.__data__,n=tt(e,t);return!(n<0||(n==e.length-1?e.pop():V.call(e,n,1),--this.size,0))},J.prototype.get=function(t){var e=this.__data__,n=tt(e,t);return n<0?void 0:e[n][1]},J.prototype.has=function(t){return tt(this.__data__,t)>-1},J.prototype.set=function(t,e){var n=this.__data__,r=tt(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},K.prototype.clear=function(){this.size=0,this.__data__={hash:new Y,map:new(B||J),string:new Y}},K.prototype.delete=function(t){var e=ut(this,t).delete(t);return this.size-=e?1:0,e},K.prototype.get=function(t){return ut(this,t).get(t)},K.prototype.has=function(t){return ut(this,t).has(t)},K.prototype.set=function(t,e){var n=ut(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},G.prototype.clear=function(){this.__data__=new J,this.size=0},G.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},G.prototype.get=function(t){return this.__data__.get(t)},G.prototype.has=function(t){return this.__data__.has(t)},G.prototype.set=function(t,e){var n=this.__data__;if(n instanceof J){var r=n.__data__;if(!B||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new K(r)}return n.set(t,e),this.size=n.size,this};function nt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":z&&z in Object(t)?function(t){var e=C.call(t,z),n=t[z];try{t[z]=void 0;var r=!0}catch(t){}var i=F.call(t);return r&&(e?t[z]=n:delete t[z]),i}(t):function(t){return F.call(t)}(t)}function rt(t){return bt(t)&&nt(t)==o}function it(t,e,n,r,i){t!==e&&function(t,e,n){for(var r=-1,i=Object(t),o=n(t),u=o.length;u--;){var s=o[++r];if(!1===e(i[s],s,i))break}}(e,function(o,u){if(i||(i=new G),mt(o))!function(t,e,n,r,i,o,u){var a=lt(t,n),c=lt(e,n),l=u.get(c);if(l)X(t,n,l);else{var f,p,h,d,y,_=o?o(a,c,n+\"\",t,e,u):void 0,v=void 0===_;if(v){var g=dt(c),m=!g&&_t(c),b=!g&&!m&&wt(c);_=c,g||m||b?dt(a)?_=a:bt(y=a)&&yt(y)?_=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}(a):m?(v=!1,_=function(t){return t.slice()}(c)):b?(v=!1,d=new(h=(f=c).buffer).constructor(h.byteLength),new $(d).set(new $(h)),p=d,_=new f.constructor(p,f.byteOffset,f.length)):_=[]:function(t){if(!bt(t)||nt(t)!=s)return!1;var e=P(t);if(null===e)return!0;var n=C.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&T.call(n)==k}(c)||ht(c)?(_=a,ht(a)?_=function(t){return function(t,e,n){var r=!n;n||(n={});for(var i=-1,o=e.length;++i<o;){var u=e[i],s=void 0;void 0===s&&(s=t[u]),r?et(n,u,s):Q(n,u,s)}return n}(t,xt(t))}(a):mt(a)&&!vt(a)||(_=function(t){return\"function\"!=typeof t.constructor||ct(t)?{}:Z(P(t))}(c))):v=!1}v&&(u.set(c,_),i(_,c,r,o,u),u.delete(c)),X(t,n,_)}}(t,e,u,n,it,r,i);else{var a=r?r(lt(t,u),o,u+\"\",t,e,i):void 0;void 0===a&&(a=o),X(t,u,a)}},xt)}var ot=L?function(t,e){return L(t,\"toString\",{configurable:!0,enumerable:!1,value:(n=e,function(){return n}),writable:!0});var n}:St;function ut(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function st(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!mt(t)||function(t){return!!A&&A in t}(t))&&(vt(t)?I:a).test(function(t){if(null!=t){try{return T.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(n)?n:void 0}function at(t,e){var n=typeof t;return!!(e=e??i)&&(\"number\"==n||\"symbol\"!=n&&c.test(t))&&t>-1&&t%1==0&&t<e}function ct(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||S)}function lt(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var ft=function(t){var e=0,n=0;return function(){var r=H(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ot);function pt(t,e){return t===e||t!=t&&e!=e}var ht=rt(function(){return arguments}())?rt:function(t){return bt(t)&&C.call(t,\"callee\")&&!U.call(t,\"callee\")},dt=Array.isArray;function yt(t){return null!=t&&gt(t.length)&&!vt(t)}var _t=M||function(){return!1};function vt(t){if(!mt(t))return!1;var e=nt(t);return e==u||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function mt(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=x?function(t){return function(e){return t(e)}}(x):function(t){return bt(t)&&gt(t.length)&&!!l[nt(t)]};function xt(t){return yt(t)?function(t,e){var n=dt(t),r=!n&&ht(t),i=!n&&!r&&_t(t),o=!n&&!r&&!i&&wt(t),u=n||r||i||o,s=u?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],a=s.length;for(var c in t)!e&&!C.call(t,c)||u&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||at(c,a))||s.push(c);return s}(t,!0):function(t){if(!mt(t))return function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}(t);var e=ct(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&C.call(t,r))&&n.push(r);return n}(t)}var Et,Ot=(Et=function(t,e,n){it(t,e,n)},function(t,e){return ft(function(t,e,n){return e=q(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=q(r.length-e,0),u=Array(o);++i<o;)u[i]=r[e+i];i=-1;for(var s=Array(e+1);++i<e;)s[i]=r[i];return s[e]=n(u),function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}(t,this,s)}}(t,e,St),t+\"\")}(function(t,e){var n=-1,r=e.length,i=r>1?e[r-1]:void 0,o=r>2?e[2]:void 0;for(i=Et.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,e,n){if(!mt(n))return!1;var r=typeof e;return!!(\"number\"==r?yt(n)&&at(e,n.length):\"string\"==r&&e in n)&&pt(n[e],t)}(e[0],e[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++n<r;){var u=e[n];u&&Et(t,u,n)}return t}));function St(t){return t}t.exports=Ot},9440(t,e,n){t=n.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",s=32,a=128,c=1/0,l=9007199254740991,f=NaN,p=4294967295,h=[[\"ary\",a],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",s],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",y=\"[object Array]\",_=\"[object Boolean]\",v=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",x=\"[object Number]\",E=\"[object Object]\",O=\"[object Promise]\",S=\"[object RegExp]\",j=\"[object Set]\",T=\"[object String]\",C=\"[object Symbol]\",A=\"[object WeakMap]\",F=\"[object ArrayBuffer]\",k=\"[object DataView]\",I=\"[object Float32Array]\",D=\"[object Float64Array]\",R=\"[object Int8Array]\",$=\"[object Int16Array]\",P=\"[object Int32Array]\",N=\"[object Uint8Array]\",U=\"[object Uint8ClampedArray]\",V=\"[object Uint16Array]\",z=\"[object Uint32Array]\",L=/\\b__p \\+= '';/g,M=/\\b(__p \\+=) '' \\+/g,q=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,H=/&(?:amp|lt|gt|quot|#39);/g,B=/[&<>\"']/g,W=RegExp(H.source),Z=RegExp(B.source),Y=/<%-([\\s\\S]+?)%>/g,J=/<%([\\s\\S]+?)%>/g,K=/<%=([\\s\\S]+?)%>/g,G=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,X=/^\\w*$/,Q=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,et=RegExp(tt.source),nt=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,st=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,at=/[()=,{}\\[\\]\\/\\s]/,ct=/\\\\(\\\\)?/g,lt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,ft=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,yt=/^0o[0-7]+$/i,_t=/^(?:0|[1-9]\\d*)$/,vt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",xt=\"\\\\u2700-\\\\u27bf\",Et=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Ot=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",St=\"\\\\ufe0e\\\\ufe0f\",jt=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Tt=\"[\"+bt+\"]\",Ct=\"[\"+jt+\"]\",At=\"[\"+wt+\"]\",Ft=\"\\\\d+\",kt=\"[\"+xt+\"]\",It=\"[\"+Et+\"]\",Dt=\"[^\"+bt+jt+Ft+xt+Et+Ot+\"]\",Rt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",$t=\"[^\"+bt+\"]\",Pt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Nt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ut=\"[\"+Ot+\"]\",Vt=\"\\\\u200d\",zt=\"(?:\"+It+\"|\"+Dt+\")\",Lt=\"(?:\"+Ut+\"|\"+Dt+\")\",Mt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",qt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Ht=\"(?:\"+At+\"|\"+Rt+\")?\",Bt=\"[\"+St+\"]?\",Wt=Bt+Ht+\"(?:\"+Vt+\"(?:\"+[$t,Pt,Nt].join(\"|\")+\")\"+Bt+Ht+\")*\",Zt=\"(?:\"+[kt,Pt,Nt].join(\"|\")+\")\"+Wt,Yt=\"(?:\"+[$t+At+\"?\",At,Pt,Nt,Tt].join(\"|\")+\")\",Jt=RegExp(\"['’]\",\"g\"),Kt=RegExp(At,\"g\"),Gt=RegExp(Rt+\"(?=\"+Rt+\")|\"+Yt+Wt,\"g\"),Xt=RegExp([Ut+\"?\"+It+\"+\"+Mt+\"(?=\"+[Ct,Ut,\"$\"].join(\"|\")+\")\",Lt+\"+\"+qt+\"(?=\"+[Ct,Ut+zt,\"$\"].join(\"|\")+\")\",Ut+\"?\"+zt+\"+\"+Mt,Ut+\"+\"+qt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Ft,Zt].join(\"|\"),\"g\"),Qt=RegExp(\"[\"+Vt+bt+wt+St+\"]\"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ne=-1,re={};re[I]=re[D]=re[R]=re[$]=re[P]=re[N]=re[U]=re[V]=re[z]=!0,re[d]=re[y]=re[F]=re[_]=re[k]=re[v]=re[g]=re[m]=re[w]=re[x]=re[E]=re[S]=re[j]=re[T]=re[A]=!1;var ie={};ie[d]=ie[y]=ie[F]=ie[k]=ie[_]=ie[v]=ie[I]=ie[D]=ie[R]=ie[$]=ie[P]=ie[w]=ie[x]=ie[E]=ie[S]=ie[j]=ie[T]=ie[C]=ie[N]=ie[U]=ie[V]=ie[z]=!0,ie[g]=ie[m]=ie[A]=!1;var oe={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ue=parseFloat,se=parseInt,ae=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,ce=\"object\"==typeof self&&self&&self.Object===Object&&self,le=ae||ce||Function(\"return this\")(),fe=e&&!e.nodeType&&e,pe=fe&&t&&!t.nodeType&&t,he=pe&&pe.exports===fe,de=he&&ae.process,ye=function(){try{return pe&&pe.require&&pe.require(\"util\").types||de&&de.binding&&de.binding(\"util\")}catch(t){}}(),_e=ye&&ye.isArrayBuffer,ve=ye&&ye.isDate,ge=ye&&ye.isMap,me=ye&&ye.isRegExp,be=ye&&ye.isSet,we=ye&&ye.isTypedArray;function xe(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Ee(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];e(r,u,n(u),t)}return r}function Oe(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function Se(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function je(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function Te(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var u=t[n];e(u,n,t)&&(o[i++]=u)}return o}function Ce(t,e){return!(null==t||!t.length)&&Ue(t,e,0)>-1}function Ae(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function Fe(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function ke(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function Ie(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function De(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function Re(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var $e=Me(\"length\");function Pe(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function Ne(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function Ue(t,e,n){return e==e?function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):Ne(t,ze,n)}function Ve(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function ze(t){return t!=t}function Le(t,e){var n=null==t?0:t.length;return n?Be(t,e)/n:f}function Me(t){return function(e){return null==e?r:e[t]}}function qe(t){return function(e){return null==t?r:t[e]}}function He(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function Be(t,e){for(var n,i=-1,o=t.length;++i<o;){var u=e(t[i]);u!==r&&(n=n===r?u:n+u)}return n}function We(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function Ze(t){return t?t.slice(0,fn(t)+1).replace(nt,\"\"):t}function Ye(t){return function(e){return t(e)}}function Je(t,e){return Fe(e,function(e){return t[e]})}function Ke(t,e){return t.has(e)}function Ge(t,e){for(var n=-1,r=t.length;++n<r&&Ue(e,t[n],0)>-1;);return n}function Xe(t,e){for(var n=t.length;n--&&Ue(e,t[n],0)>-1;);return n}var Qe=qe({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tn=qe({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function en(t){return\"\\\\\"+oe[t]}function nn(t){return Qt.test(t)}function rn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function on(t,e){return function(n){return t(e(n))}}function un(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var s=t[n];s!==e&&s!==u||(t[n]=u,o[i++]=n)}return o}function sn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function an(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function cn(t){return nn(t)?function(t){for(var e=Gt.lastIndex=0;Gt.test(t);)++e;return e}(t):$e(t)}function ln(t){return nn(t)?function(t){return t.match(Gt)||[]}(t):function(t){return t.split(\"\")}(t)}function fn(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}var pn=qe({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),hn=function t(e){var n,rt=(e=null==e?le:hn.defaults(le.Object(),e,hn.pick(le,ee))).Array,bt=e.Date,wt=e.Error,xt=e.Function,Et=e.Math,Ot=e.Object,St=e.RegExp,jt=e.String,Tt=e.TypeError,Ct=rt.prototype,At=xt.prototype,Ft=Ot.prototype,kt=e[\"__core-js_shared__\"],It=At.toString,Dt=Ft.hasOwnProperty,Rt=0,$t=(n=/[^.]+$/.exec(kt&&kt.keys&&kt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Pt=Ft.toString,Nt=It.call(Ot),Ut=le._,Vt=St(\"^\"+It.call(Dt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),zt=he?e.Buffer:r,Lt=e.Symbol,Mt=e.Uint8Array,qt=zt?zt.allocUnsafe:r,Ht=on(Ot.getPrototypeOf,Ot),Bt=Ot.create,Wt=Ft.propertyIsEnumerable,Zt=Ct.splice,Yt=Lt?Lt.isConcatSpreadable:r,Gt=Lt?Lt.iterator:r,Qt=Lt?Lt.toStringTag:r,oe=function(){try{var t=ao(Ot,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ae=e.clearTimeout!==le.clearTimeout&&e.clearTimeout,ce=bt&&bt.now!==le.Date.now&&bt.now,fe=e.setTimeout!==le.setTimeout&&e.setTimeout,pe=Et.ceil,de=Et.floor,ye=Ot.getOwnPropertySymbols,$e=zt?zt.isBuffer:r,qe=e.isFinite,dn=Ct.join,yn=on(Ot.keys,Ot),_n=Et.max,vn=Et.min,gn=bt.now,mn=e.parseInt,bn=Et.random,wn=Ct.reverse,xn=ao(e,\"DataView\"),En=ao(e,\"Map\"),On=ao(e,\"Promise\"),Sn=ao(e,\"Set\"),jn=ao(e,\"WeakMap\"),Tn=ao(Ot,\"create\"),Cn=jn&&new jn,An={},Fn=No(xn),kn=No(En),In=No(On),Dn=No(Sn),Rn=No(jn),$n=Lt?Lt.prototype:r,Pn=$n?$n.valueOf:r,Nn=$n?$n.toString:r;function Un(t){if(ts(t)&&!qu(t)&&!(t instanceof Mn)){if(t instanceof Ln)return t;if(Dt.call(t,\"__wrapped__\"))return Uo(t)}return new Ln(t)}var Vn=function(){function t(){}return function(e){if(!Qu(e))return{};if(Bt)return Bt(e);t.prototype=e;var n=new t;return t.prototype=r,n}}();function zn(){}function Ln(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=r}function Mn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function qn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Hn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Bn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Wn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Bn;++e<n;)this.add(t[e])}function Zn(t){var e=this.__data__=new Hn(t);this.size=e.size}function Yn(t,e){var n=qu(t),r=!n&&Mu(t),i=!n&&!r&&Zu(t),o=!n&&!r&&!i&&as(t),u=n||r||i||o,s=u?We(t.length,jt):[],a=s.length;for(var c in t)!e&&!Dt.call(t,c)||u&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||_o(c,a))||s.push(c);return s}function Jn(t){var e=t.length;return e?t[Br(0,e-1)]:r}function Kn(t,e){return Io(ji(t),or(e,0,t.length))}function Gn(t){return Io(ji(t))}function Xn(t,e,n){(n!==r&&!Vu(t[e],n)||n===r&&!(e in t))&&rr(t,e,n)}function Qn(t,e,n){var i=t[e];Dt.call(t,e)&&Vu(i,n)&&(n!==r||e in t)||rr(t,e,n)}function tr(t,e){for(var n=t.length;n--;)if(Vu(t[n][0],e))return n;return-1}function er(t,e,n,r){return lr(t,function(t,i,o){e(r,t,n(t),o)}),r}function nr(t,e){return t&&Ti(e,Fs(e),t)}function rr(t,e,n){\"__proto__\"==e&&oe?oe(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function ir(t,e){for(var n=-1,i=e.length,o=rt(i),u=null==t;++n<i;)o[n]=u?r:Ss(t,e[n]);return o}function or(t,e,n){return t==t&&(n!==r&&(t=t<=n?t:n),e!==r&&(t=t>=e?t:e)),t}function ur(t,e,n,i,o,u){var s,a=1&e,c=2&e,l=4&e;if(n&&(s=o?n(t,i,o,u):n(t)),s!==r)return s;if(!Qu(t))return t;var f=qu(t);if(f){if(s=function(t){var e=t.length,n=new t.constructor(e);return e&&\"string\"==typeof t[0]&&Dt.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}(t),!a)return ji(t,s)}else{var p=fo(t),h=p==m||p==b;if(Zu(t))return bi(t,a);if(p==E||p==d||h&&!o){if(s=c||h?{}:ho(t),!a)return c?function(t,e){return Ti(t,lo(t),e)}(t,function(t,e){return t&&Ti(e,ks(e),t)}(s,t)):function(t,e){return Ti(t,co(t),e)}(t,nr(s,t))}else{if(!ie[p])return o?t:{};s=function(t,e,n){var r,i=t.constructor;switch(e){case F:return wi(t);case _:case v:return new i(+t);case k:return function(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case I:case D:case R:case $:case P:case N:case U:case V:case z:return xi(t,n);case w:return new i;case x:case T:return new i(t);case S:return function(t){var e=new t.constructor(t.source,ft.exec(t));return e.lastIndex=t.lastIndex,e}(t);case j:return new i;case C:return r=t,Pn?Ot(Pn.call(r)):{}}}(t,p,a)}}u||(u=new Zn);var y=u.get(t);if(y)return y;u.set(t,s),os(t)?t.forEach(function(r){s.add(ur(r,e,n,r,t,u))}):es(t)&&t.forEach(function(r,i){s.set(i,ur(r,e,n,i,t,u))});var g=f?r:(l?c?eo:to:c?ks:Fs)(t);return Oe(g||t,function(r,i){g&&(r=t[i=r]),Qn(s,i,ur(r,e,n,i,t,u))}),s}function sr(t,e,n){var i=n.length;if(null==t)return!i;for(t=Ot(t);i--;){var o=n[i],u=e[o],s=t[o];if(s===r&&!(o in t)||!u(s))return!1}return!0}function ar(t,e,n){if(\"function\"!=typeof t)throw new Tt(i);return Co(function(){t.apply(r,n)},e)}function cr(t,e,n,r){var i=-1,o=Ce,u=!0,s=t.length,a=[],c=e.length;if(!s)return a;n&&(e=Fe(e,Ye(n))),r?(o=Ae,u=!1):e.length>=200&&(o=Ke,u=!1,e=new Wn(e));t:for(;++i<s;){var l=t[i],f=null==n?l:n(l);if(l=r||0!==l?l:0,u&&f==f){for(var p=c;p--;)if(e[p]===f)continue t;a.push(l)}else o(e,f,r)||a.push(l)}return a}Un.templateSettings={escape:Y,evaluate:J,interpolate:K,variable:\"\",imports:{_:Un}},Un.prototype=zn.prototype,Un.prototype.constructor=Un,Ln.prototype=Vn(zn.prototype),Ln.prototype.constructor=Ln,Mn.prototype=Vn(zn.prototype),Mn.prototype.constructor=Mn,qn.prototype.clear=function(){this.__data__=Tn?Tn(null):{},this.size=0},qn.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},qn.prototype.get=function(t){var e=this.__data__;if(Tn){var n=e[t];return n===o?r:n}return Dt.call(e,t)?e[t]:r},qn.prototype.has=function(t){var e=this.__data__;return Tn?e[t]!==r:Dt.call(e,t)},qn.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=Tn&&e===r?o:e,this},Hn.prototype.clear=function(){this.__data__=[],this.size=0},Hn.prototype.delete=function(t){var e=this.__data__,n=tr(e,t);return!(n<0||(n==e.length-1?e.pop():Zt.call(e,n,1),--this.size,0))},Hn.prototype.get=function(t){var e=this.__data__,n=tr(e,t);return n<0?r:e[n][1]},Hn.prototype.has=function(t){return tr(this.__data__,t)>-1},Hn.prototype.set=function(t,e){var n=this.__data__,r=tr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Bn.prototype.clear=function(){this.size=0,this.__data__={hash:new qn,map:new(En||Hn),string:new qn}},Bn.prototype.delete=function(t){var e=uo(this,t).delete(t);return this.size-=e?1:0,e},Bn.prototype.get=function(t){return uo(this,t).get(t)},Bn.prototype.has=function(t){return uo(this,t).has(t)},Bn.prototype.set=function(t,e){var n=uo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Wn.prototype.add=Wn.prototype.push=function(t){return this.__data__.set(t,o),this},Wn.prototype.has=function(t){return this.__data__.has(t)},Zn.prototype.clear=function(){this.__data__=new Hn,this.size=0},Zn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Zn.prototype.get=function(t){return this.__data__.get(t)},Zn.prototype.has=function(t){return this.__data__.has(t)},Zn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Hn){var r=n.__data__;if(!En||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Bn(r)}return n.set(t,e),this.size=n.size,this};var lr=Fi(gr),fr=Fi(mr,!0);function pr(t,e){var n=!0;return lr(t,function(t,r,i){return n=!!e(t,r,i)}),n}function hr(t,e,n){for(var i=-1,o=t.length;++i<o;){var u=t[i],s=e(u);if(null!=s&&(a===r?s==s&&!ss(s):n(s,a)))var a=s,c=u}return c}function dr(t,e){var n=[];return lr(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function yr(t,e,n,r,i){var o=-1,u=t.length;for(n||(n=yo),i||(i=[]);++o<u;){var s=t[o];e>0&&n(s)?e>1?yr(s,e-1,n,r,i):ke(i,s):r||(i[i.length]=s)}return i}var _r=ki(),vr=ki(!0);function gr(t,e){return t&&_r(t,e,Fs)}function mr(t,e){return t&&vr(t,e,Fs)}function br(t,e){return Te(e,function(e){return Ku(t[e])})}function wr(t,e){for(var n=0,i=(e=_i(e,t)).length;null!=t&&n<i;)t=t[Po(e[n++])];return n&&n==i?t:r}function xr(t,e,n){var r=e(t);return qu(t)?r:ke(r,n(t))}function Er(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Qt&&Qt in Ot(t)?function(t){var e=Dt.call(t,Qt),n=t[Qt];try{t[Qt]=r;var i=!0}catch(t){}var o=Pt.call(t);return i&&(e?t[Qt]=n:delete t[Qt]),o}(t):function(t){return Pt.call(t)}(t)}function Or(t,e){return t>e}function Sr(t,e){return null!=t&&Dt.call(t,e)}function jr(t,e){return null!=t&&e in Ot(t)}function Tr(t,e,n){for(var i=n?Ae:Ce,o=t[0].length,u=t.length,s=u,a=rt(u),c=1/0,l=[];s--;){var f=t[s];s&&e&&(f=Fe(f,Ye(e))),c=vn(f.length,c),a[s]=!n&&(e||o>=120&&f.length>=120)?new Wn(s&&f):r}f=t[0];var p=-1,h=a[0];t:for(;++p<o&&l.length<c;){var d=f[p],y=e?e(d):d;if(d=n||0!==d?d:0,!(h?Ke(h,y):i(l,y,n))){for(s=u;--s;){var _=a[s];if(!(_?Ke(_,y):i(t[s],y,n)))continue t}h&&h.push(y),l.push(d)}}return l}function Cr(t,e,n){var i=null==(t=So(t,e=_i(e,t)))?t:t[Po(Jo(e))];return null==i?r:xe(i,t,n)}function Ar(t){return ts(t)&&Er(t)==d}function Fr(t,e,n,i,o){return t===e||(null==t||null==e||!ts(t)&&!ts(e)?t!=t&&e!=e:function(t,e,n,i,o,u){var s=qu(t),a=qu(e),c=s?y:fo(t),l=a?y:fo(e),f=(c=c==d?E:c)==E,p=(l=l==d?E:l)==E,h=c==l;if(h&&Zu(t)){if(!Zu(e))return!1;s=!0,f=!1}if(h&&!f)return u||(u=new Zn),s||as(t)?Xi(t,e,n,i,o,u):function(t,e,n,r,i,o,u){switch(n){case k:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case F:return!(t.byteLength!=e.byteLength||!o(new Mt(t),new Mt(e)));case _:case v:case x:return Vu(+t,+e);case g:return t.name==e.name&&t.message==e.message;case S:case T:return t==e+\"\";case w:var s=rn;case j:var a=1&r;if(s||(s=sn),t.size!=e.size&&!a)return!1;var c=u.get(t);if(c)return c==e;r|=2,u.set(t,e);var l=Xi(s(t),s(e),r,i,o,u);return u.delete(t),l;case C:if(Pn)return Pn.call(t)==Pn.call(e)}return!1}(t,e,c,n,i,o,u);if(!(1&n)){var m=f&&Dt.call(t,\"__wrapped__\"),b=p&&Dt.call(e,\"__wrapped__\");if(m||b){var O=m?t.value():t,A=b?e.value():e;return u||(u=new Zn),o(O,A,n,i,u)}}return!!h&&(u||(u=new Zn),function(t,e,n,i,o,u){var s=1&n,a=to(t),c=a.length;if(c!=to(e).length&&!s)return!1;for(var l=c;l--;){var f=a[l];if(!(s?f in e:Dt.call(e,f)))return!1}var p=u.get(t),h=u.get(e);if(p&&h)return p==e&&h==t;var d=!0;u.set(t,e),u.set(e,t);for(var y=s;++l<c;){var _=t[f=a[l]],v=e[f];if(i)var g=s?i(v,_,f,e,t,u):i(_,v,f,t,e,u);if(!(g===r?_===v||o(_,v,n,i,u):g)){d=!1;break}y||(y=\"constructor\"==f)}if(d&&!y){var m=t.constructor,b=e.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return u.delete(t),u.delete(e),d}(t,e,n,i,o,u))}(t,e,n,i,Fr,o))}function kr(t,e,n,i){var o=n.length,u=o,s=!i;if(null==t)return!u;for(t=Ot(t);o--;){var a=n[o];if(s&&a[2]?a[1]!==t[a[0]]:!(a[0]in t))return!1}for(;++o<u;){var c=(a=n[o])[0],l=t[c],f=a[1];if(s&&a[2]){if(l===r&&!(c in t))return!1}else{var p=new Zn;if(i)var h=i(l,f,c,t,e,p);if(!(h===r?Fr(f,l,3,i,p):h))return!1}}return!0}function Ir(t){return!(!Qu(t)||(e=t,$t&&$t in e))&&(Ku(t)?Vt:dt).test(No(t));var e}function Dr(t){return\"function\"==typeof t?t:null==t?na:\"object\"==typeof t?qu(t)?Ur(t[0],t[1]):Nr(t):fa(t)}function Rr(t){if(!wo(t))return yn(t);var e=[];for(var n in Ot(t))Dt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function $r(t,e){return t<e}function Pr(t,e){var n=-1,r=Bu(t)?rt(t.length):[];return lr(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Nr(t){var e=so(t);return 1==e.length&&e[0][2]?Eo(e[0][0],e[0][1]):function(n){return n===t||kr(n,t,e)}}function Ur(t,e){return go(t)&&xo(e)?Eo(Po(t),e):function(n){var i=Ss(n,t);return i===r&&i===e?js(n,t):Fr(e,i,3)}}function Vr(t,e,n,i,o){t!==e&&_r(e,function(u,s){if(o||(o=new Zn),Qu(u))!function(t,e,n,i,o,u,s){var a=jo(t,n),c=jo(e,n),l=s.get(c);if(l)Xn(t,n,l);else{var f=u?u(a,c,n+\"\",t,e,s):r,p=f===r;if(p){var h=qu(c),d=!h&&Zu(c),y=!h&&!d&&as(c);f=c,h||d||y?qu(a)?f=a:Wu(a)?f=ji(a):d?(p=!1,f=bi(c,!0)):y?(p=!1,f=xi(c,!0)):f=[]:rs(c)||Mu(c)?(f=a,Mu(a)?f=_s(a):Qu(a)&&!Ku(a)||(f=ho(c))):p=!1}p&&(s.set(c,f),o(f,c,i,u,s),s.delete(c)),Xn(t,n,f)}}(t,e,s,n,Vr,i,o);else{var a=i?i(jo(t,s),u,s+\"\",t,e,o):r;a===r&&(a=u),Xn(t,s,a)}},ks)}function zr(t,e){var n=t.length;if(n)return _o(e+=e<0?n:0,n)?t[e]:r}function Lr(t,e,n){e=e.length?Fe(e,function(t){return qu(t)?function(e){return wr(e,1===t.length?t[0]:t)}:t}):[na];var r=-1;e=Fe(e,Ye(oo()));var i=Pr(t,function(t,n,i){var o=Fe(e,function(e){return e(t)});return{criteria:o,index:++r,value:t}});return function(t){var e=t.length;for(t.sort(function(t,e){return function(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,u=i.length,s=n.length;++r<u;){var a=Ei(i[r],o[r]);if(a)return r>=s?a:a*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)});e--;)t[e]=t[e].value;return t}(i)}function Mr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var u=e[r],s=wr(t,u);n(s,u)&&Kr(o,_i(u,t),s)}return o}function qr(t,e,n,r){var i=r?Ve:Ue,o=-1,u=e.length,s=t;for(t===e&&(e=ji(e)),n&&(s=Fe(t,Ye(n)));++o<u;)for(var a=0,c=e[o],l=n?n(c):c;(a=i(s,l,a,r))>-1;)s!==t&&Zt.call(s,a,1),Zt.call(t,a,1);return t}function Hr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;_o(i)?Zt.call(t,i,1):ai(t,i)}}return t}function Br(t,e){return t+de(bn()*(e-t+1))}function Wr(t,e){var n=\"\";if(!t||e<1||e>l)return n;do{e%2&&(n+=t),(e=de(e/2))&&(t+=t)}while(e);return n}function Zr(t,e){return Ao(Oo(t,e,na),t+\"\")}function Yr(t){return Jn(Vs(t))}function Jr(t,e){var n=Vs(t);return Io(n,or(e,0,n.length))}function Kr(t,e,n,i){if(!Qu(t))return t;for(var o=-1,u=(e=_i(e,t)).length,s=u-1,a=t;null!=a&&++o<u;){var c=Po(e[o]),l=n;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return t;if(o!=s){var f=a[c];(l=i?i(f,c,a):r)===r&&(l=Qu(f)?f:_o(e[o+1])?[]:{})}Qn(a,c,l),a=a[c]}return t}var Gr=Cn?function(t,e){return Cn.set(t,e),t}:na,Xr=oe?function(t,e){return oe(t,\"toString\",{configurable:!0,enumerable:!1,value:Qs(e),writable:!0})}:na;function Qr(t){return Io(Vs(t))}function ti(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+e];return o}function ei(t,e){var n;return lr(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ni(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;r<i;){var o=r+i>>>1,u=t[o];null!==u&&!ss(u)&&(n?u<=e:u<e)?r=o+1:i=o}return i}return ri(t,e,na,n)}function ri(t,e,n,i){var o=0,u=null==t?0:t.length;if(0===u)return 0;for(var s=(e=n(e))!=e,a=null===e,c=ss(e),l=e===r;o<u;){var f=de((o+u)/2),p=n(t[f]),h=p!==r,d=null===p,y=p==p,_=ss(p);if(s)var v=i||y;else v=l?y&&(i||h):a?y&&h&&(i||!d):c?y&&h&&!d&&(i||!_):!d&&!_&&(i?p<=e:p<e);v?o=f+1:u=f}return vn(u,4294967294)}function ii(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n],s=e?e(u):u;if(!n||!Vu(s,a)){var a=s;o[i++]=0===u?0:u}}return o}function oi(t){return\"number\"==typeof t?t:ss(t)?f:+t}function ui(t){if(\"string\"==typeof t)return t;if(qu(t))return Fe(t,ui)+\"\";if(ss(t))return Nn?Nn.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function si(t,e,n){var r=-1,i=Ce,o=t.length,u=!0,s=[],a=s;if(n)u=!1,i=Ae;else if(o>=200){var c=e?null:Wi(t);if(c)return sn(c);u=!1,i=Ke,a=new Wn}else a=e?[]:s;t:for(;++r<o;){var l=t[r],f=e?e(l):l;if(l=n||0!==l?l:0,u&&f==f){for(var p=a.length;p--;)if(a[p]===f)continue t;e&&a.push(f),s.push(l)}else i(a,f,n)||(a!==s&&a.push(f),s.push(l))}return s}function ai(t,e){var n=-1,r=(e=_i(e,t)).length;if(!r)return!0;for(;++n<r;){var i=Po(e[n]);if(\"__proto__\"===i&&!Dt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=So(t,e);return null==o||delete o[Po(Jo(e))]}function ci(t,e,n,r){return Kr(t,e,n(wr(t,e)),r)}function li(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function fi(t,e){var n=t;return n instanceof Mn&&(n=n.value()),Ie(e,function(t,e){return e.func.apply(e.thisArg,ke([t],e.args))},n)}function pi(t,e,n){var r=t.length;if(r<2)return r?si(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var u=t[i],s=-1;++s<r;)s!=i&&(o[i]=cr(o[i]||u,t[s],e,n));return si(yr(o,1),e,n)}function hi(t,e,n){for(var i=-1,o=t.length,u=e.length,s={};++i<o;){var a=i<u?e[i]:r;n(s,t[i],a)}return s}function di(t){return Wu(t)?t:[]}function yi(t){return\"function\"==typeof t?t:na}function _i(t,e){return qu(t)?t:go(t,e)?[t]:$o(vs(t))}var vi=Zr;function gi(t,e,n){var i=t.length;return n=n===r?i:n,!e&&n>=i?t:ti(t,e,n)}var mi=ae||function(t){return le.clearTimeout(t)};function bi(t,e){if(e)return t.slice();var n=t.length,r=qt?qt(n):new t.constructor(n);return t.copy(r),r}function wi(t){var e=new t.constructor(t.byteLength);return new Mt(e).set(new Mt(t)),e}function xi(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Ei(t,e){if(t!==e){var n=t!==r,i=null===t,o=t==t,u=ss(t),s=e!==r,a=null===e,c=e==e,l=ss(e);if(!a&&!l&&!u&&t>e||u&&s&&c&&!a&&!l||i&&s&&c||!n&&c||!o)return 1;if(!i&&!u&&!l&&t<e||l&&n&&o&&!i&&!u||a&&n&&o||!s&&o||!c)return-1}return 0}function Oi(t,e,n,r){for(var i=-1,o=t.length,u=n.length,s=-1,a=e.length,c=_n(o-u,0),l=rt(a+c),f=!r;++s<a;)l[s]=e[s];for(;++i<u;)(f||i<o)&&(l[n[i]]=t[i]);for(;c--;)l[s++]=t[i++];return l}function Si(t,e,n,r){for(var i=-1,o=t.length,u=-1,s=n.length,a=-1,c=e.length,l=_n(o-s,0),f=rt(l+c),p=!r;++i<l;)f[i]=t[i];for(var h=i;++a<c;)f[h+a]=e[a];for(;++u<s;)(p||i<o)&&(f[h+n[u]]=t[i++]);return f}function ji(t,e){var n=-1,r=t.length;for(e||(e=rt(r));++n<r;)e[n]=t[n];return e}function Ti(t,e,n,i){var o=!n;n||(n={});for(var u=-1,s=e.length;++u<s;){var a=e[u],c=i?i(n[a],t[a],a,n,t):r;c===r&&(c=t[a]),o?rr(n,a,c):Qn(n,a,c)}return n}function Ci(t,e){return function(n,r){var i=qu(n)?Ee:er,o=e?e():{};return i(n,t,oo(r,2),o)}}function Ai(t){return Zr(function(e,n){var i=-1,o=n.length,u=o>1?n[o-1]:r,s=o>2?n[2]:r;for(u=t.length>3&&\"function\"==typeof u?(o--,u):r,s&&vo(n[0],n[1],s)&&(u=o<3?r:u,o=1),e=Ot(e);++i<o;){var a=n[i];a&&t(e,a,i,u)}return e})}function Fi(t,e){return function(n,r){if(null==n)return n;if(!Bu(n))return t(n,r);for(var i=n.length,o=e?i:-1,u=Ot(n);(e?o--:++o<i)&&!1!==r(u[o],o,u););return n}}function ki(t){return function(e,n,r){for(var i=-1,o=Ot(e),u=r(e),s=u.length;s--;){var a=u[t?s:++i];if(!1===n(o[a],a,o))break}return e}}function Ii(t){return function(e){var n=nn(e=vs(e))?ln(e):r,i=n?n[0]:e.charAt(0),o=n?gi(n,1).join(\"\"):e.slice(1);return i[t]()+o}}function Di(t){return function(e){return Ie(Ks(Ms(e).replace(Jt,\"\")),t,\"\")}}function Ri(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Vn(t.prototype),r=t.apply(n,e);return Qu(r)?r:n}}function $i(t){return function(e,n,i){var o=Ot(e);if(!Bu(e)){var u=oo(n,3);e=Fs(e),n=function(t){return u(o[t],t,o)}}var s=t(e,n,i);return s>-1?o[u?e[s]:s]:r}}function Pi(t){return Qi(function(e){var n=e.length,o=n,u=Ln.prototype.thru;for(t&&e.reverse();o--;){var s=e[o];if(\"function\"!=typeof s)throw new Tt(i);if(u&&!a&&\"wrapper\"==ro(s))var a=new Ln([],!0)}for(o=a?o:n;++o<n;){var c=ro(s=e[o]),l=\"wrapper\"==c?no(s):r;a=l&&mo(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?a[ro(l[0])].apply(a,l[3]):1==s.length&&mo(s)?a[c]():a.thru(s)}return function(){var t=arguments,r=t[0];if(a&&1==t.length&&qu(r))return a.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Ni(t,e,n,i,o,u,s,c,l,f){var p=e&a,h=1&e,d=2&e,y=24&e,_=512&e,v=d?r:Ri(t);return function a(){for(var g=arguments.length,m=rt(g),b=g;b--;)m[b]=arguments[b];if(y)var w=io(a),x=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(m,w);if(i&&(m=Oi(m,i,o,y)),u&&(m=Si(m,u,s,y)),g-=x,y&&g<f){var E=un(m,w);return Hi(t,e,Ni,a.placeholder,n,m,E,c,l,f-g)}var O=h?n:this,S=d?O[t]:t;return g=m.length,c?m=function(t,e){for(var n=t.length,i=vn(e.length,n),o=ji(t);i--;){var u=e[i];t[i]=_o(u,n)?o[u]:r}return t}(m,c):_&&g>1&&m.reverse(),p&&l<g&&(m.length=l),this&&this!==le&&this instanceof a&&(S=v||Ri(S)),S.apply(O,m)}}function Ui(t,e){return function(n,r){return function(t,e,n,r){return gr(t,function(t,i,o){e(r,n(t),i,o)}),r}(n,t,e(r),{})}}function Vi(t,e){return function(n,i){var o;if(n===r&&i===r)return e;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ui(n),i=ui(i)):(n=oi(n),i=oi(i)),o=t(n,i)}return o}}function zi(t){return Qi(function(e){return e=Fe(e,Ye(oo())),Zr(function(n){var r=this;return t(e,function(t){return xe(t,r,n)})})})}function Li(t,e){var n=(e=e===r?\" \":ui(e)).length;if(n<2)return n?Wr(e,t):e;var i=Wr(e,pe(t/cn(e)));return nn(e)?gi(ln(i),0,t).join(\"\"):i.slice(0,t)}function Mi(t){return function(e,n,i){return i&&\"number\"!=typeof i&&vo(e,n,i)&&(n=i=r),e=ps(e),n===r?(n=e,e=0):n=ps(n),function(t,e,n,r){for(var i=-1,o=_n(pe((e-t)/(n||1)),0),u=rt(o);o--;)u[r?o:++i]=t,t+=n;return u}(e,n,i=i===r?e<n?1:-1:ps(i),t)}}function qi(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=ys(e),n=ys(n)),t(e,n)}}function Hi(t,e,n,i,o,u,a,c,l,f){var p=8&e;e|=p?s:64,4&(e&=~(p?64:s))||(e&=-4);var h=[t,e,o,p?u:r,p?a:r,p?r:u,p?r:a,c,l,f],d=n.apply(r,h);return mo(t)&&To(d,h),d.placeholder=i,Fo(d,t,e)}function Bi(t){var e=Et[t];return function(t,n){if(t=ys(t),(n=null==n?0:vn(hs(n),292))&&qe(t)){var r=(vs(t)+\"e\").split(\"e\");return+((r=(vs(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var Wi=Sn&&1/sn(new Sn([,-0]))[1]==c?function(t){return new Sn(t)}:sa;function Zi(t){return function(e){var n=fo(e);return n==w?rn(e):n==j?an(e):function(t,e){return Fe(e,function(e){return[e,t[e]]})}(e,t(e))}}function Yi(t,e,n,o,c,l,f,p){var h=2&e;if(!h&&\"function\"!=typeof t)throw new Tt(i);var d=o?o.length:0;if(d||(e&=-97,o=c=r),f=f===r?f:_n(hs(f),0),p=p===r?p:hs(p),d-=c?c.length:0,64&e){var y=o,_=c;o=c=r}var v=h?r:no(t),g=[t,e,n,o,c,y,_,l,f,p];if(v&&function(t,e){var n=t[1],r=e[1],i=n|r,o=i<131,s=r==a&&8==n||r==a&&256==n&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!o&&!s)return t;1&r&&(t[2]=e[2],i|=1&n?0:4);var c=e[3];if(c){var l=t[3];t[3]=l?Oi(l,c,e[4]):c,t[4]=l?un(t[3],u):e[4]}(c=e[5])&&(l=t[5],t[5]=l?Si(l,c,e[6]):c,t[6]=l?un(t[5],u):e[6]),(c=e[7])&&(t[7]=c),r&a&&(t[8]=null==t[8]?e[8]:vn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i}(g,v),t=g[0],e=g[1],n=g[2],o=g[3],c=g[4],!(p=g[9]=g[9]===r?h?0:t.length:_n(g[9]-d,0))&&24&e&&(e&=-25),e&&1!=e)m=8==e||16==e?function(t,e,n){var i=Ri(t);return function o(){for(var u=arguments.length,s=rt(u),a=u,c=io(o);a--;)s[a]=arguments[a];var l=u<3&&s[0]!==c&&s[u-1]!==c?[]:un(s,c);return(u-=l.length)<n?Hi(t,e,Ni,o.placeholder,r,s,l,r,r,n-u):xe(this&&this!==le&&this instanceof o?i:t,this,s)}}(t,e,p):e!=s&&33!=e||c.length?Ni.apply(r,g):function(t,e,n,r){var i=1&e,o=Ri(t);return function e(){for(var u=-1,s=arguments.length,a=-1,c=r.length,l=rt(c+s),f=this&&this!==le&&this instanceof e?o:t;++a<c;)l[a]=r[a];for(;s--;)l[a++]=arguments[++u];return xe(f,i?n:this,l)}}(t,e,n,o);else var m=function(t,e,n){var r=1&e,i=Ri(t);return function e(){return(this&&this!==le&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return Fo((v?Gr:To)(m,g),t,e)}function Ji(t,e,n,i){return t===r||Vu(t,Ft[n])&&!Dt.call(i,n)?e:t}function Ki(t,e,n,i,o,u){return Qu(t)&&Qu(e)&&(u.set(e,t),Vr(t,e,r,Ki,u),u.delete(e)),t}function Gi(t){return rs(t)?r:t}function Xi(t,e,n,i,o,u){var s=1&n,a=t.length,c=e.length;if(a!=c&&!(s&&c>a))return!1;var l=u.get(t),f=u.get(e);if(l&&f)return l==e&&f==t;var p=-1,h=!0,d=2&n?new Wn:r;for(u.set(t,e),u.set(e,t);++p<a;){var y=t[p],_=e[p];if(i)var v=s?i(_,y,p,e,t,u):i(y,_,p,t,e,u);if(v!==r){if(v)continue;h=!1;break}if(d){if(!Re(e,function(t,e){if(!Ke(d,e)&&(y===t||o(y,t,n,i,u)))return d.push(e)})){h=!1;break}}else if(y!==_&&!o(y,_,n,i,u)){h=!1;break}}return u.delete(t),u.delete(e),h}function Qi(t){return Ao(Oo(t,r,Ho),t+\"\")}function to(t){return xr(t,Fs,co)}function eo(t){return xr(t,ks,lo)}var no=Cn?function(t){return Cn.get(t)}:sa;function ro(t){for(var e=t.name+\"\",n=An[e],r=Dt.call(An,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function io(t){return(Dt.call(Un,\"placeholder\")?Un:t).placeholder}function oo(){var t=Un.iteratee||ra;return t=t===ra?Dr:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function so(t){for(var e=Fs(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,xo(i)]}return e}function ao(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return Ir(n)?n:r}var co=ye?function(t){return null==t?[]:(t=Ot(t),Te(ye(t),function(e){return Wt.call(t,e)}))}:da,lo=ye?function(t){for(var e=[];t;)ke(e,co(t)),t=Ht(t);return e}:da,fo=Er;function po(t,e,n){for(var r=-1,i=(e=_i(e,t)).length,o=!1;++r<i;){var u=Po(e[r]);if(!(o=null!=t&&n(t,u)))break;t=t[u]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Xu(i)&&_o(u,i)&&(qu(t)||Mu(t))}function ho(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Vn(Ht(t))}function yo(t){return qu(t)||Mu(t)||!!(Yt&&t&&t[Yt])}function _o(t,e){var n=typeof t;return!!(e=e??l)&&(\"number\"==n||\"symbol\"!=n&&_t.test(t))&&t>-1&&t%1==0&&t<e}function vo(t,e,n){if(!Qu(n))return!1;var r=typeof e;return!!(\"number\"==r?Bu(n)&&_o(e,n.length):\"string\"==r&&e in n)&&Vu(n[e],t)}function go(t,e){if(qu(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!ss(t))||X.test(t)||!G.test(t)||null!=e&&t in Ot(e)}function mo(t){var e=ro(t),n=Un[e];if(\"function\"!=typeof n||!(e in Mn.prototype))return!1;if(t===n)return!0;var r=no(n);return!!r&&t===r[0]}(xn&&fo(new xn(new ArrayBuffer(1)))!=k||En&&fo(new En)!=w||On&&fo(On.resolve())!=O||Sn&&fo(new Sn)!=j||jn&&fo(new jn)!=A)&&(fo=function(t){var e=Er(t),n=e==E?t.constructor:r,i=n?No(n):\"\";if(i)switch(i){case Fn:return k;case kn:return w;case In:return O;case Dn:return j;case Rn:return A}return e});var bo=kt?Ku:ya;function wo(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||Ft)}function xo(t){return t==t&&!Qu(t)}function Eo(t,e){return function(n){return null!=n&&n[t]===e&&(e!==r||t in Ot(n))}}function Oo(t,e,n){return e=_n(e===r?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=_n(r.length-e,0),u=rt(o);++i<o;)u[i]=r[e+i];i=-1;for(var s=rt(e+1);++i<e;)s[i]=r[i];return s[e]=n(u),xe(t,this,s)}}function So(t,e){return e.length<2?t:wr(t,ti(e,0,-1))}function jo(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var To=ko(Gr),Co=fe||function(t,e){return le.setTimeout(t,e)},Ao=ko(Xr);function Fo(t,e,n){var r=e+\"\";return Ao(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return Oe(h,function(n){var r=\"_.\"+n[0];e&n[1]&&!Ce(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(ot);return e?e[1].split(ut):[]}(r),n)))}function ko(t){var e=0,n=0;return function(){var i=gn(),o=16-(i-n);if(n=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(r,arguments)}}function Io(t,e){var n=-1,i=t.length,o=i-1;for(e=e===r?i:e;++n<e;){var u=Br(n,o),s=t[u];t[u]=t[n],t[n]=s}return t.length=e,t}var Do,Ro,$o=(Do=Du(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(Q,function(t,n,r,i){e.push(r?i.replace(ct,\"$1\"):n||t)}),e},function(t){return 500===Ro.size&&Ro.clear(),t}),Ro=Do.cache,Do);function Po(t){if(\"string\"==typeof t||ss(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function No(t){if(null!=t){try{return It.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Uo(t){if(t instanceof Mn)return t.clone();var e=new Ln(t.__wrapped__,t.__chain__);return e.__actions__=ji(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Vo=Zr(function(t,e){return Wu(t)?cr(t,yr(e,1,Wu,!0)):[]}),zo=Zr(function(t,e){var n=Jo(e);return Wu(n)&&(n=r),Wu(t)?cr(t,yr(e,1,Wu,!0),oo(n,2)):[]}),Lo=Zr(function(t,e){var n=Jo(e);return Wu(n)&&(n=r),Wu(t)?cr(t,yr(e,1,Wu,!0),r,n):[]});function Mo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:hs(n);return i<0&&(i=_n(r+i,0)),Ne(t,oo(e,3),i)}function qo(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return n!==r&&(o=hs(n),o=n<0?_n(i+o,0):vn(o,i-1)),Ne(t,oo(e,3),o,!0)}function Ho(t){return null!=t&&t.length?yr(t,1):[]}function Bo(t){return t&&t.length?t[0]:r}var Wo=Zr(function(t){var e=Fe(t,di);return e.length&&e[0]===t[0]?Tr(e):[]}),Zo=Zr(function(t){var e=Jo(t),n=Fe(t,di);return e===Jo(n)?e=r:n.pop(),n.length&&n[0]===t[0]?Tr(n,oo(e,2)):[]}),Yo=Zr(function(t){var e=Jo(t),n=Fe(t,di);return(e=\"function\"==typeof e?e:r)&&n.pop(),n.length&&n[0]===t[0]?Tr(n,r,e):[]});function Jo(t){var e=null==t?0:t.length;return e?t[e-1]:r}var Ko=Zr(Go);function Go(t,e){return t&&t.length&&e&&e.length?qr(t,e):t}var Xo=Qi(function(t,e){var n=null==t?0:t.length,r=ir(t,e);return Hr(t,Fe(e,function(t){return _o(t,n)?+t:t}).sort(Ei)),r});function Qo(t){return null==t?t:wn.call(t)}var tu=Zr(function(t){return si(yr(t,1,Wu,!0))}),eu=Zr(function(t){var e=Jo(t);return Wu(e)&&(e=r),si(yr(t,1,Wu,!0),oo(e,2))}),nu=Zr(function(t){var e=Jo(t);return e=\"function\"==typeof e?e:r,si(yr(t,1,Wu,!0),r,e)});function ru(t){if(!t||!t.length)return[];var e=0;return t=Te(t,function(t){if(Wu(t))return e=_n(t.length,e),!0}),We(e,function(e){return Fe(t,Me(e))})}function iu(t,e){if(!t||!t.length)return[];var n=ru(t);return null==e?n:Fe(n,function(t){return xe(e,r,t)})}var ou=Zr(function(t,e){return Wu(t)?cr(t,e):[]}),uu=Zr(function(t){return pi(Te(t,Wu))}),su=Zr(function(t){var e=Jo(t);return Wu(e)&&(e=r),pi(Te(t,Wu),oo(e,2))}),au=Zr(function(t){var e=Jo(t);return e=\"function\"==typeof e?e:r,pi(Te(t,Wu),r,e)}),cu=Zr(ru),lu=Zr(function(t){var e=t.length,n=e>1?t[e-1]:r;return n=\"function\"==typeof n?(t.pop(),n):r,iu(t,n)});function fu(t){var e=Un(t);return e.__chain__=!0,e}function pu(t,e){return e(t)}var hu=Qi(function(t){var e=t.length,n=e?t[0]:0,i=this.__wrapped__,o=function(e){return ir(e,t)};return!(e>1||this.__actions__.length)&&i instanceof Mn&&_o(n)?((i=i.slice(n,+n+(e?1:0))).__actions__.push({func:pu,args:[o],thisArg:r}),new Ln(i,this.__chain__).thru(function(t){return e&&!t.length&&t.push(r),t})):this.thru(o)}),du=Ci(function(t,e,n){Dt.call(t,n)?++t[n]:rr(t,n,1)}),yu=$i(Mo),_u=$i(qo);function vu(t,e){return(qu(t)?Oe:lr)(t,oo(e,3))}function gu(t,e){return(qu(t)?Se:fr)(t,oo(e,3))}var mu=Ci(function(t,e,n){Dt.call(t,n)?t[n].push(e):rr(t,n,[e])}),bu=Zr(function(t,e,n){var r=-1,i=\"function\"==typeof e,o=Bu(t)?rt(t.length):[];return lr(t,function(t){o[++r]=i?xe(e,t,n):Cr(t,e,n)}),o}),wu=Ci(function(t,e,n){rr(t,n,e)});function xu(t,e){return(qu(t)?Fe:Pr)(t,oo(e,3))}var Eu=Ci(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),Ou=Zr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&vo(t,e[0],e[1])?e=[]:n>2&&vo(e[0],e[1],e[2])&&(e=[e[0]]),Lr(t,yr(e,1),[])}),Su=ce||function(){return le.Date.now()};function ju(t,e,n){return e=n?r:e,e=t&&null==e?t.length:e,Yi(t,a,r,r,r,r,e)}function Tu(t,e){var n;if(\"function\"!=typeof e)throw new Tt(i);return t=hs(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=r),n}}var Cu=Zr(function(t,e,n){var r=1;if(n.length){var i=un(n,io(Cu));r|=s}return Yi(t,r,e,n,i)}),Au=Zr(function(t,e,n){var r=3;if(n.length){var i=un(n,io(Au));r|=s}return Yi(e,r,t,n,i)});function Fu(t,e,n){var o,u,s,a,c,l,f=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new Tt(i);function y(e){var n=o,i=u;return o=u=r,f=e,a=t.apply(i,n)}function _(t){var n=t-l;return l===r||n>=e||n<0||h&&t-f>=s}function v(){var t=Su();if(_(t))return g(t);c=Co(v,function(t){var n=e-(t-l);return h?vn(n,s-(t-f)):n}(t))}function g(t){return c=r,d&&o?y(t):(o=u=r,a)}function m(){var t=Su(),n=_(t);if(o=arguments,u=this,l=t,n){if(c===r)return function(t){return f=t,c=Co(v,e),p?y(t):a}(l);if(h)return mi(c),c=Co(v,e),y(l)}return c===r&&(c=Co(v,e)),a}return e=ys(e)||0,Qu(n)&&(p=!!n.leading,s=(h=\"maxWait\"in n)?_n(ys(n.maxWait)||0,e):s,d=\"trailing\"in n?!!n.trailing:d),m.cancel=function(){c!==r&&mi(c),f=0,o=l=u=c=r},m.flush=function(){return c===r?a:g(Su())},m}var ku=Zr(function(t,e){return ar(t,1,e)}),Iu=Zr(function(t,e,n){return ar(t,ys(e)||0,n)});function Du(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new Tt(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return n.cache=o.set(i,u)||o,u};return n.cache=new(Du.Cache||Bn),n}function Ru(t){if(\"function\"!=typeof t)throw new Tt(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Du.Cache=Bn;var $u=vi(function(t,e){var n=(e=1==e.length&&qu(e[0])?Fe(e[0],Ye(oo())):Fe(yr(e,1),Ye(oo()))).length;return Zr(function(r){for(var i=-1,o=vn(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return xe(t,this,r)})}),Pu=Zr(function(t,e){var n=un(e,io(Pu));return Yi(t,s,r,e,n)}),Nu=Zr(function(t,e){var n=un(e,io(Nu));return Yi(t,64,r,e,n)}),Uu=Qi(function(t,e){return Yi(t,256,r,r,r,e)});function Vu(t,e){return t===e||t!=t&&e!=e}var zu=qi(Or),Lu=qi(function(t,e){return t>=e}),Mu=Ar(function(){return arguments}())?Ar:function(t){return ts(t)&&Dt.call(t,\"callee\")&&!Wt.call(t,\"callee\")},qu=rt.isArray,Hu=_e?Ye(_e):function(t){return ts(t)&&Er(t)==F};function Bu(t){return null!=t&&Xu(t.length)&&!Ku(t)}function Wu(t){return ts(t)&&Bu(t)}var Zu=$e||ya,Yu=ve?Ye(ve):function(t){return ts(t)&&Er(t)==v};function Ju(t){if(!ts(t))return!1;var e=Er(t);return e==g||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!rs(t)}function Ku(t){if(!Qu(t))return!1;var e=Er(t);return e==m||e==b||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Gu(t){return\"number\"==typeof t&&t==hs(t)}function Xu(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=l}function Qu(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function ts(t){return null!=t&&\"object\"==typeof t}var es=ge?Ye(ge):function(t){return ts(t)&&fo(t)==w};function ns(t){return\"number\"==typeof t||ts(t)&&Er(t)==x}function rs(t){if(!ts(t)||Er(t)!=E)return!1;var e=Ht(t);if(null===e)return!0;var n=Dt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&It.call(n)==Nt}var is=me?Ye(me):function(t){return ts(t)&&Er(t)==S},os=be?Ye(be):function(t){return ts(t)&&fo(t)==j};function us(t){return\"string\"==typeof t||!qu(t)&&ts(t)&&Er(t)==T}function ss(t){return\"symbol\"==typeof t||ts(t)&&Er(t)==C}var as=we?Ye(we):function(t){return ts(t)&&Xu(t.length)&&!!re[Er(t)]},cs=qi($r),ls=qi(function(t,e){return t<=e});function fs(t){if(!t)return[];if(Bu(t))return us(t)?ln(t):ji(t);if(Gt&&t[Gt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Gt]());var e=fo(t);return(e==w?rn:e==j?sn:Vs)(t)}function ps(t){return t?(t=ys(t))===c||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function hs(t){var e=ps(t),n=e%1;return e==e?n?e-n:e:0}function ds(t){return t?or(hs(t),0,p):0}function ys(t){if(\"number\"==typeof t)return t;if(ss(t))return f;if(Qu(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=Qu(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Ze(t);var n=ht.test(t);return n||yt.test(t)?se(t.slice(2),n?2:8):pt.test(t)?f:+t}function _s(t){return Ti(t,ks(t))}function vs(t){return null==t?\"\":ui(t)}var gs=Ai(function(t,e){if(wo(e)||Bu(e))Ti(e,Fs(e),t);else for(var n in e)Dt.call(e,n)&&Qn(t,n,e[n])}),ms=Ai(function(t,e){Ti(e,ks(e),t)}),bs=Ai(function(t,e,n,r){Ti(e,ks(e),t,r)}),ws=Ai(function(t,e,n,r){Ti(e,Fs(e),t,r)}),xs=Qi(ir),Es=Zr(function(t,e){t=Ot(t);var n=-1,i=e.length,o=i>2?e[2]:r;for(o&&vo(e[0],e[1],o)&&(i=1);++n<i;)for(var u=e[n],s=ks(u),a=-1,c=s.length;++a<c;){var l=s[a],f=t[l];(f===r||Vu(f,Ft[l])&&!Dt.call(t,l))&&(t[l]=u[l])}return t}),Os=Zr(function(t){return t.push(r,Ki),xe(Ds,r,t)});function Ss(t,e,n){var i=null==t?r:wr(t,e);return i===r?n:i}function js(t,e){return null!=t&&po(t,e,jr)}var Ts=Ui(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Pt.call(e)),t[e]=n},Qs(na)),Cs=Ui(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Pt.call(e)),Dt.call(t,e)?t[e].push(n):t[e]=[n]},oo),As=Zr(Cr);function Fs(t){return Bu(t)?Yn(t):Rr(t)}function ks(t){return Bu(t)?Yn(t,!0):function(t){if(!Qu(t))return function(t){var e=[];if(null!=t)for(var n in Ot(t))e.push(n);return e}(t);var e=wo(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&Dt.call(t,r))&&n.push(r);return n}(t)}var Is=Ai(function(t,e,n){Vr(t,e,n)}),Ds=Ai(function(t,e,n,r){Vr(t,e,n,r)}),Rs=Qi(function(t,e){var n={};if(null==t)return n;var r=!1;e=Fe(e,function(e){return e=_i(e,t),r||(r=e.length>1),e}),Ti(t,eo(t),n),r&&(n=ur(n,7,Gi));for(var i=e.length;i--;)ai(n,e[i]);return n}),$s=Qi(function(t,e){return null==t?{}:function(t,e){return Mr(t,e,function(e,n){return js(t,n)})}(t,e)});function Ps(t,e){if(null==t)return{};var n=Fe(eo(t),function(t){return[t]});return e=oo(e),Mr(t,n,function(t,n){return e(t,n[0])})}var Ns=Zi(Fs),Us=Zi(ks);function Vs(t){return null==t?[]:Je(t,Fs(t))}var zs=Di(function(t,e,n){return e=e.toLowerCase(),t+(n?Ls(e):e)});function Ls(t){return Js(vs(t).toLowerCase())}function Ms(t){return(t=vs(t))&&t.replace(vt,Qe).replace(Kt,\"\")}var qs=Di(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Hs=Di(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),Bs=Ii(\"toLowerCase\"),Ws=Di(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Zs=Di(function(t,e,n){return t+(n?\" \":\"\")+Js(e)}),Ys=Di(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Js=Ii(\"toUpperCase\");function Ks(t,e,n){return t=vs(t),(e=n?r:e)===r?function(t){return te.test(t)}(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.match(st)||[]}(t):t.match(e)||[]}var Gs=Zr(function(t,e){try{return xe(t,r,e)}catch(t){return Ju(t)?t:new wt(t)}}),Xs=Qi(function(t,e){return Oe(e,function(e){e=Po(e),rr(t,e,Cu(t[e],t))}),t});function Qs(t){return function(){return t}}var ta=Pi(),ea=Pi(!0);function na(t){return t}function ra(t){return Dr(\"function\"==typeof t?t:ur(t,1))}var ia=Zr(function(t,e){return function(n){return Cr(n,t,e)}}),oa=Zr(function(t,e){return function(n){return Cr(t,n,e)}});function ua(t,e,n){var r=Fs(e),i=br(e,r);null!=n||Qu(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=br(e,Fs(e)));var o=!(Qu(n)&&\"chain\"in n&&!n.chain),u=Ku(t);return Oe(i,function(n){var r=e[n];t[n]=r,u&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=ji(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,ke([this.value()],arguments))})}),t}function sa(){}var aa=zi(Fe),ca=zi(je),la=zi(Re);function fa(t){return go(t)?Me(Po(t)):function(t){return function(e){return wr(e,t)}}(t)}var pa=Mi(),ha=Mi(!0);function da(){return[]}function ya(){return!1}var _a,va=Vi(function(t,e){return t+e},0),ga=Bi(\"ceil\"),ma=Vi(function(t,e){return t/e},1),ba=Bi(\"floor\"),wa=Vi(function(t,e){return t*e},1),xa=Bi(\"round\"),Ea=Vi(function(t,e){return t-e},0);return Un.after=function(t,e){if(\"function\"!=typeof e)throw new Tt(i);return t=hs(t),function(){if(--t<1)return e.apply(this,arguments)}},Un.ary=ju,Un.assign=gs,Un.assignIn=ms,Un.assignInWith=bs,Un.assignWith=ws,Un.at=xs,Un.before=Tu,Un.bind=Cu,Un.bindAll=Xs,Un.bindKey=Au,Un.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return qu(t)?t:[t]},Un.chain=fu,Un.chunk=function(t,e,n){e=(n?vo(t,e,n):e===r)?1:_n(hs(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,u=0,s=rt(pe(i/e));o<i;)s[u++]=ti(t,o,o+=e);return s},Un.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i},Un.concat=function(){var t=arguments.length;if(!t)return[];for(var e=rt(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return ke(qu(n)?ji(n):[n],yr(e,1))},Un.cond=function(t){var e=null==t?0:t.length,n=oo();return t=e?Fe(t,function(t){if(\"function\"!=typeof t[1])throw new Tt(i);return[n(t[0]),t[1]]}):[],Zr(function(n){for(var r=-1;++r<e;){var i=t[r];if(xe(i[0],this,n))return xe(i[1],this,n)}})},Un.conforms=function(t){return function(t){var e=Fs(t);return function(n){return sr(n,t,e)}}(ur(t,1))},Un.constant=Qs,Un.countBy=du,Un.create=function(t,e){var n=Vn(t);return null==e?n:nr(n,e)},Un.curry=function t(e,n,i){var o=Yi(e,8,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Un.curryRight=function t(e,n,i){var o=Yi(e,16,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Un.debounce=Fu,Un.defaults=Es,Un.defaultsDeep=Os,Un.defer=ku,Un.delay=Iu,Un.difference=Vo,Un.differenceBy=zo,Un.differenceWith=Lo,Un.drop=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=n||e===r?1:hs(e))<0?0:e,i):[]},Un.dropRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,0,(e=i-(e=n||e===r?1:hs(e)))<0?0:e):[]},Un.dropRightWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!0,!0):[]},Un.dropWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!0):[]},Un.fill=function(t,e,n,i){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&vo(t,e,n)&&(n=0,i=o),function(t,e,n,i){var o=t.length;for((n=hs(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:hs(i))<0&&(i+=o),i=n>i?0:ds(i);n<i;)t[n++]=e;return t}(t,e,n,i)):[]},Un.filter=function(t,e){return(qu(t)?Te:dr)(t,oo(e,3))},Un.flatMap=function(t,e){return yr(xu(t,e),1)},Un.flatMapDeep=function(t,e){return yr(xu(t,e),c)},Un.flatMapDepth=function(t,e,n){return n=n===r?1:hs(n),yr(xu(t,e),n)},Un.flatten=Ho,Un.flattenDeep=function(t){return null!=t&&t.length?yr(t,c):[]},Un.flattenDepth=function(t,e){return null!=t&&t.length?yr(t,e=e===r?1:hs(e)):[]},Un.flip=function(t){return Yi(t,512)},Un.flow=ta,Un.flowRight=ea,Un.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];rr(r,i[0],i[1])}return r},Un.functions=function(t){return null==t?[]:br(t,Fs(t))},Un.functionsIn=function(t){return null==t?[]:br(t,ks(t))},Un.groupBy=mu,Un.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Un.intersection=Wo,Un.intersectionBy=Zo,Un.intersectionWith=Yo,Un.invert=Ts,Un.invertBy=Cs,Un.invokeMap=bu,Un.iteratee=ra,Un.keyBy=wu,Un.keys=Fs,Un.keysIn=ks,Un.map=xu,Un.mapKeys=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,e(t,r,i),t)}),n},Un.mapValues=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,r,e(t,r,i))}),n},Un.matches=function(t){return Nr(ur(t,1))},Un.matchesProperty=function(t,e){return Ur(t,ur(e,1))},Un.memoize=Du,Un.merge=Is,Un.mergeWith=Ds,Un.method=ia,Un.methodOf=oa,Un.mixin=ua,Un.negate=Ru,Un.nthArg=function(t){return t=hs(t),Zr(function(e){return zr(e,t)})},Un.omit=Rs,Un.omitBy=function(t,e){return Ps(t,Ru(oo(e)))},Un.once=function(t){return Tu(2,t)},Un.orderBy=function(t,e,n,i){return null==t?[]:(qu(e)||(e=null==e?[]:[e]),qu(n=i?r:n)||(n=null==n?[]:[n]),Lr(t,e,n))},Un.over=aa,Un.overArgs=$u,Un.overEvery=ca,Un.overSome=la,Un.partial=Pu,Un.partialRight=Nu,Un.partition=Eu,Un.pick=$s,Un.pickBy=Ps,Un.property=fa,Un.propertyOf=function(t){return function(e){return null==t?r:wr(t,e)}},Un.pull=Ko,Un.pullAll=Go,Un.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?qr(t,e,oo(n,2)):t},Un.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?qr(t,e,r,n):t},Un.pullAt=Xo,Un.range=pa,Un.rangeRight=ha,Un.rearg=Uu,Un.reject=function(t,e){return(qu(t)?Te:dr)(t,Ru(oo(e,3)))},Un.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=oo(e,3);++r<o;){var u=t[r];e(u,r,t)&&(n.push(u),i.push(r))}return Hr(t,i),n},Un.rest=function(t,e){if(\"function\"!=typeof t)throw new Tt(i);return Zr(t,e=e===r?e:hs(e))},Un.reverse=Qo,Un.sampleSize=function(t,e,n){return e=(n?vo(t,e,n):e===r)?1:hs(e),(qu(t)?Kn:Jr)(t,e)},Un.set=function(t,e,n){return null==t?t:Kr(t,e,n)},Un.setWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:Kr(t,e,n,i)},Un.shuffle=function(t){return(qu(t)?Gn:Qr)(t)},Un.slice=function(t,e,n){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&vo(t,e,n)?(e=0,n=i):(e=null==e?0:hs(e),n=n===r?i:hs(n)),ti(t,e,n)):[]},Un.sortBy=Ou,Un.sortedUniq=function(t){return t&&t.length?ii(t):[]},Un.sortedUniqBy=function(t,e){return t&&t.length?ii(t,oo(e,2)):[]},Un.split=function(t,e,n){return n&&\"number\"!=typeof n&&vo(t,e,n)&&(e=n=r),(n=n===r?p:n>>>0)?(t=vs(t))&&(\"string\"==typeof e||null!=e&&!is(e))&&!(e=ui(e))&&nn(t)?gi(ln(t),0,n):t.split(e,n):[]},Un.spread=function(t,e){if(\"function\"!=typeof t)throw new Tt(i);return e=null==e?0:_n(hs(e),0),Zr(function(n){var r=n[e],i=gi(n,0,e);return r&&ke(i,r),xe(t,this,i)})},Un.tail=function(t){var e=null==t?0:t.length;return e?ti(t,1,e):[]},Un.take=function(t,e,n){return t&&t.length?ti(t,0,(e=n||e===r?1:hs(e))<0?0:e):[]},Un.takeRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=i-(e=n||e===r?1:hs(e)))<0?0:e,i):[]},Un.takeRightWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!1,!0):[]},Un.takeWhile=function(t,e){return t&&t.length?li(t,oo(e,3)):[]},Un.tap=function(t,e){return e(t),t},Un.throttle=function(t,e,n){var r=!0,o=!0;if(\"function\"!=typeof t)throw new Tt(i);return Qu(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),Fu(t,e,{leading:r,maxWait:e,trailing:o})},Un.thru=pu,Un.toArray=fs,Un.toPairs=Ns,Un.toPairsIn=Us,Un.toPath=function(t){return qu(t)?Fe(t,Po):ss(t)?[t]:ji($o(vs(t)))},Un.toPlainObject=_s,Un.transform=function(t,e,n){var r=qu(t),i=r||Zu(t)||as(t);if(e=oo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Qu(t)&&Ku(o)?Vn(Ht(t)):{}}return(i?Oe:gr)(t,function(t,r,i){return e(n,t,r,i)}),n},Un.unary=function(t){return ju(t,1)},Un.union=tu,Un.unionBy=eu,Un.unionWith=nu,Un.uniq=function(t){return t&&t.length?si(t):[]},Un.uniqBy=function(t,e){return t&&t.length?si(t,oo(e,2)):[]},Un.uniqWith=function(t,e){return e=\"function\"==typeof e?e:r,t&&t.length?si(t,r,e):[]},Un.unset=function(t,e){return null==t||ai(t,e)},Un.unzip=ru,Un.unzipWith=iu,Un.update=function(t,e,n){return null==t?t:ci(t,e,yi(n))},Un.updateWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:ci(t,e,yi(n),i)},Un.values=Vs,Un.valuesIn=function(t){return null==t?[]:Je(t,ks(t))},Un.without=ou,Un.words=Ks,Un.wrap=function(t,e){return Pu(yi(e),t)},Un.xor=uu,Un.xorBy=su,Un.xorWith=au,Un.zip=cu,Un.zipObject=function(t,e){return hi(t||[],e||[],Qn)},Un.zipObjectDeep=function(t,e){return hi(t||[],e||[],Kr)},Un.zipWith=lu,Un.entries=Ns,Un.entriesIn=Us,Un.extend=ms,Un.extendWith=bs,ua(Un,Un),Un.add=va,Un.attempt=Gs,Un.camelCase=zs,Un.capitalize=Ls,Un.ceil=ga,Un.clamp=function(t,e,n){return n===r&&(n=e,e=r),n!==r&&(n=(n=ys(n))==n?n:0),e!==r&&(e=(e=ys(e))==e?e:0),or(ys(t),e,n)},Un.clone=function(t){return ur(t,4)},Un.cloneDeep=function(t){return ur(t,5)},Un.cloneDeepWith=function(t,e){return ur(t,5,e=\"function\"==typeof e?e:r)},Un.cloneWith=function(t,e){return ur(t,4,e=\"function\"==typeof e?e:r)},Un.conformsTo=function(t,e){return null==e||sr(t,e,Fs(e))},Un.deburr=Ms,Un.defaultTo=function(t,e){return null==t||t!=t?e:t},Un.divide=ma,Un.endsWith=function(t,e,n){t=vs(t),e=ui(e);var i=t.length,o=n=n===r?i:or(hs(n),0,i);return(n-=e.length)>=0&&t.slice(n,o)==e},Un.eq=Vu,Un.escape=function(t){return(t=vs(t))&&Z.test(t)?t.replace(B,tn):t},Un.escapeRegExp=function(t){return(t=vs(t))&&et.test(t)?t.replace(tt,\"\\\\$&\"):t},Un.every=function(t,e,n){var i=qu(t)?je:pr;return n&&vo(t,e,n)&&(e=r),i(t,oo(e,3))},Un.find=yu,Un.findIndex=Mo,Un.findKey=function(t,e){return Pe(t,oo(e,3),gr)},Un.findLast=_u,Un.findLastIndex=qo,Un.findLastKey=function(t,e){return Pe(t,oo(e,3),mr)},Un.floor=ba,Un.forEach=vu,Un.forEachRight=gu,Un.forIn=function(t,e){return null==t?t:_r(t,oo(e,3),ks)},Un.forInRight=function(t,e){return null==t?t:vr(t,oo(e,3),ks)},Un.forOwn=function(t,e){return t&&gr(t,oo(e,3))},Un.forOwnRight=function(t,e){return t&&mr(t,oo(e,3))},Un.get=Ss,Un.gt=zu,Un.gte=Lu,Un.has=function(t,e){return null!=t&&po(t,e,Sr)},Un.hasIn=js,Un.head=Bo,Un.identity=na,Un.includes=function(t,e,n,r){t=Bu(t)?t:Vs(t),n=n&&!r?hs(n):0;var i=t.length;return n<0&&(n=_n(i+n,0)),us(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&Ue(t,e,n)>-1},Un.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:hs(n);return i<0&&(i=_n(r+i,0)),Ue(t,e,i)},Un.inRange=function(t,e,n){return e=ps(e),n===r?(n=e,e=0):n=ps(n),function(t,e,n){return t>=vn(e,n)&&t<_n(e,n)}(t=ys(t),e,n)},Un.invoke=As,Un.isArguments=Mu,Un.isArray=qu,Un.isArrayBuffer=Hu,Un.isArrayLike=Bu,Un.isArrayLikeObject=Wu,Un.isBoolean=function(t){return!0===t||!1===t||ts(t)&&Er(t)==_},Un.isBuffer=Zu,Un.isDate=Yu,Un.isElement=function(t){return ts(t)&&1===t.nodeType&&!rs(t)},Un.isEmpty=function(t){if(null==t)return!0;if(Bu(t)&&(qu(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Zu(t)||as(t)||Mu(t)))return!t.length;var e=fo(t);if(e==w||e==j)return!t.size;if(wo(t))return!Rr(t).length;for(var n in t)if(Dt.call(t,n))return!1;return!0},Un.isEqual=function(t,e){return Fr(t,e)},Un.isEqualWith=function(t,e,n){var i=(n=\"function\"==typeof n?n:r)?n(t,e):r;return i===r?Fr(t,e,r,n):!!i},Un.isError=Ju,Un.isFinite=function(t){return\"number\"==typeof t&&qe(t)},Un.isFunction=Ku,Un.isInteger=Gu,Un.isLength=Xu,Un.isMap=es,Un.isMatch=function(t,e){return t===e||kr(t,e,so(e))},Un.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:r,kr(t,e,so(e),n)},Un.isNaN=function(t){return ns(t)&&t!=+t},Un.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Ir(t)},Un.isNil=function(t){return null==t},Un.isNull=function(t){return null===t},Un.isNumber=ns,Un.isObject=Qu,Un.isObjectLike=ts,Un.isPlainObject=rs,Un.isRegExp=is,Un.isSafeInteger=function(t){return Gu(t)&&t>=-9007199254740991&&t<=l},Un.isSet=os,Un.isString=us,Un.isSymbol=ss,Un.isTypedArray=as,Un.isUndefined=function(t){return t===r},Un.isWeakMap=function(t){return ts(t)&&fo(t)==A},Un.isWeakSet=function(t){return ts(t)&&\"[object WeakSet]\"==Er(t)},Un.join=function(t,e){return null==t?\"\":dn.call(t,e)},Un.kebabCase=qs,Un.last=Jo,Un.lastIndexOf=function(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=hs(n))<0?_n(i+o,0):vn(o,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Ne(t,ze,o,!0)},Un.lowerCase=Hs,Un.lowerFirst=Bs,Un.lt=cs,Un.lte=ls,Un.max=function(t){return t&&t.length?hr(t,na,Or):r},Un.maxBy=function(t,e){return t&&t.length?hr(t,oo(e,2),Or):r},Un.mean=function(t){return Le(t,na)},Un.meanBy=function(t,e){return Le(t,oo(e,2))},Un.min=function(t){return t&&t.length?hr(t,na,$r):r},Un.minBy=function(t,e){return t&&t.length?hr(t,oo(e,2),$r):r},Un.stubArray=da,Un.stubFalse=ya,Un.stubObject=function(){return{}},Un.stubString=function(){return\"\"},Un.stubTrue=function(){return!0},Un.multiply=wa,Un.nth=function(t,e){return t&&t.length?zr(t,hs(e)):r},Un.noConflict=function(){return le._===this&&(le._=Ut),this},Un.noop=sa,Un.now=Su,Un.pad=function(t,e,n){t=vs(t);var r=(e=hs(e))?cn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Li(de(i),n)+t+Li(pe(i),n)},Un.padEnd=function(t,e,n){t=vs(t);var r=(e=hs(e))?cn(t):0;return e&&r<e?t+Li(e-r,n):t},Un.padStart=function(t,e,n){t=vs(t);var r=(e=hs(e))?cn(t):0;return e&&r<e?Li(e-r,n)+t:t},Un.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),mn(vs(t).replace(nt,\"\"),e||0)},Un.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&vo(t,e,n)&&(e=n=r),n===r&&(\"boolean\"==typeof e?(n=e,e=r):\"boolean\"==typeof t&&(n=t,t=r)),t===r&&e===r?(t=0,e=1):(t=ps(t),e===r?(e=t,t=0):e=ps(e)),t>e){var i=t;t=e,e=i}if(n||t%1||e%1){var o=bn();return vn(t+o*(e-t+ue(\"1e-\"+((o+\"\").length-1))),e)}return Br(t,e)},Un.reduce=function(t,e,n){var r=qu(t)?Ie:He,i=arguments.length<3;return r(t,oo(e,4),n,i,lr)},Un.reduceRight=function(t,e,n){var r=qu(t)?De:He,i=arguments.length<3;return r(t,oo(e,4),n,i,fr)},Un.repeat=function(t,e,n){return e=(n?vo(t,e,n):e===r)?1:hs(e),Wr(vs(t),e)},Un.replace=function(){var t=arguments,e=vs(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Un.result=function(t,e,n){var i=-1,o=(e=_i(e,t)).length;for(o||(o=1,t=r);++i<o;){var u=null==t?r:t[Po(e[i])];u===r&&(i=o,u=n),t=Ku(u)?u.call(t):u}return t},Un.round=xa,Un.runInContext=t,Un.sample=function(t){return(qu(t)?Jn:Yr)(t)},Un.size=function(t){if(null==t)return 0;if(Bu(t))return us(t)?cn(t):t.length;var e=fo(t);return e==w||e==j?t.size:Rr(t).length},Un.snakeCase=Ws,Un.some=function(t,e,n){var i=qu(t)?Re:ei;return n&&vo(t,e,n)&&(e=r),i(t,oo(e,3))},Un.sortedIndex=function(t,e){return ni(t,e)},Un.sortedIndexBy=function(t,e,n){return ri(t,e,oo(n,2))},Un.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=ni(t,e);if(r<n&&Vu(t[r],e))return r}return-1},Un.sortedLastIndex=function(t,e){return ni(t,e,!0)},Un.sortedLastIndexBy=function(t,e,n){return ri(t,e,oo(n,2),!0)},Un.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=ni(t,e,!0)-1;if(Vu(t[n],e))return n}return-1},Un.startCase=Zs,Un.startsWith=function(t,e,n){return t=vs(t),n=null==n?0:or(hs(n),0,t.length),e=ui(e),t.slice(n,n+e.length)==e},Un.subtract=Ea,Un.sum=function(t){return t&&t.length?Be(t,na):0},Un.sumBy=function(t,e){return t&&t.length?Be(t,oo(e,2)):0},Un.template=function(t,e,n){var i=Un.templateSettings;n&&vo(t,e,n)&&(e=r),t=vs(t),e=ws({},e,i,Ji);var o=ws({},e.imports,i.imports,Ji),u=Fs(o),s=Je(o,u);Oe(u,function(t){if(at.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var a,c,l=0,f=e.interpolate||gt,p=\"__p += '\",h=St((e.escape||gt).source+\"|\"+f.source+\"|\"+(f===K?lt:gt).source+\"|\"+(e.evaluate||gt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Dt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ne+\"]\")+\"\\n\";t.replace(h,function(e,n,r,i,o,u){return r||(r=i),p+=t.slice(l,u).replace(mt,en),n&&(a=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(c=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=u+e.length,e}),p+=\"';\\n\";var y=Dt.call(e,\"variable\")&&e.variable;if(y){if(at.test(y))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(c?p.replace(L,\"\"):p).replace(M,\"$1\").replace(q,\"$1;\"),p=\"function(\"+(y||\"obj\")+\") {\\n\"+(y?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(a?\", __e = _.escape\":\"\")+(c?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var _=Gs(function(){return xt(u,d+\"return \"+p).apply(r,s)});if(_.source=p,Ju(_))throw _;return _},Un.times=function(t,e){if((t=hs(t))<1||t>l)return[];var n=p,r=vn(t,p);e=oo(e),t-=p;for(var i=We(r,e);++n<t;)e(n);return i},Un.toFinite=ps,Un.toInteger=hs,Un.toLength=ds,Un.toLower=function(t){return vs(t).toLowerCase()},Un.toNumber=ys,Un.toSafeInteger=function(t){return t?or(hs(t),-9007199254740991,l):0===t?t:0},Un.toString=vs,Un.toUpper=function(t){return vs(t).toUpperCase()},Un.trim=function(t,e,n){if((t=vs(t))&&(n||e===r))return Ze(t);if(!t||!(e=ui(e)))return t;var i=ln(t),o=ln(e);return gi(i,Ge(i,o),Xe(i,o)+1).join(\"\")},Un.trimEnd=function(t,e,n){if((t=vs(t))&&(n||e===r))return t.slice(0,fn(t)+1);if(!t||!(e=ui(e)))return t;var i=ln(t);return gi(i,0,Xe(i,ln(e))+1).join(\"\")},Un.trimStart=function(t,e,n){if((t=vs(t))&&(n||e===r))return t.replace(nt,\"\");if(!t||!(e=ui(e)))return t;var i=ln(t);return gi(i,Ge(i,ln(e))).join(\"\")},Un.truncate=function(t,e){var n=30,i=\"...\";if(Qu(e)){var o=\"separator\"in e?e.separator:o;n=\"length\"in e?hs(e.length):n,i=\"omission\"in e?ui(e.omission):i}var u=(t=vs(t)).length;if(nn(t)){var s=ln(t);u=s.length}if(n>=u)return t;var a=n-cn(i);if(a<1)return i;var c=s?gi(s,0,a).join(\"\"):t.slice(0,a);if(o===r)return c+i;if(s&&(a+=c.length-a),is(o)){if(t.slice(a).search(o)){var l,f=c;for(o.global||(o=St(o.source,vs(ft.exec(o))+\"g\")),o.lastIndex=0;l=o.exec(f);)var p=l.index;c=c.slice(0,p===r?a:p)}}else if(t.indexOf(ui(o),a)!=a){var h=c.lastIndexOf(o);h>-1&&(c=c.slice(0,h))}return c+i},Un.unescape=function(t){return(t=vs(t))&&W.test(t)?t.replace(H,pn):t},Un.uniqueId=function(t){var e=++Rt;return vs(t)+e},Un.upperCase=Ys,Un.upperFirst=Js,Un.each=vu,Un.eachRight=gu,Un.first=Bo,ua(Un,(_a={},gr(Un,function(t,e){Dt.call(Un.prototype,e)||(_a[e]=t)}),_a),{chain:!1}),Un.VERSION=\"4.18.1\",Oe([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Un[t].placeholder=Un}),Oe([\"drop\",\"take\"],function(t,e){Mn.prototype[t]=function(n){n=n===r?1:_n(hs(n),0);var i=this.__filtered__&&!e?new Mn(this):this.clone();return i.__filtered__?i.__takeCount__=vn(n,i.__takeCount__):i.__views__.push({size:vn(n,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Mn.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),Oe([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=1==n||3==n;Mn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:oo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),Oe([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");Mn.prototype[t]=function(){return this[n](1).value()[0]}}),Oe([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");Mn.prototype[t]=function(){return this.__filtered__?new Mn(this):this[n](1)}}),Mn.prototype.compact=function(){return this.filter(na)},Mn.prototype.find=function(t){return this.filter(t).head()},Mn.prototype.findLast=function(t){return this.reverse().find(t)},Mn.prototype.invokeMap=Zr(function(t,e){return\"function\"==typeof t?new Mn(this):this.map(function(n){return Cr(n,t,e)})}),Mn.prototype.reject=function(t){return this.filter(Ru(oo(t)))},Mn.prototype.slice=function(t,e){t=hs(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Mn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==r&&(n=(e=hs(e))<0?n.dropRight(-e):n.take(e-t)),n)},Mn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Mn.prototype.toArray=function(){return this.take(p)},gr(Mn.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Un[i?\"take\"+(\"last\"==e?\"Right\":\"\"):e],u=i||/^find/.test(e);o&&(Un.prototype[e]=function(){var e=this.__wrapped__,s=i?[1]:arguments,a=e instanceof Mn,c=s[0],l=a||qu(e),f=function(t){var e=o.apply(Un,ke([t],s));return i&&p?e[0]:e};l&&n&&\"function\"==typeof c&&1!=c.length&&(a=l=!1);var p=this.__chain__,h=!!this.__actions__.length,d=u&&!p,y=a&&!h;if(!u&&l){e=y?e:new Mn(this);var _=t.apply(e,s);return _.__actions__.push({func:pu,args:[f],thisArg:r}),new Ln(_,p)}return d&&y?t.apply(this,s):(_=this.thru(f),d?i?_.value()[0]:_.value():_)})}),Oe([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=Ct[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Un.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(qu(i)?i:[],t)}return this[n](function(n){return e.apply(qu(n)?n:[],t)})}}),gr(Mn.prototype,function(t,e){var n=Un[e];if(n){var r=n.name+\"\";Dt.call(An,r)||(An[r]=[]),An[r].push({name:e,func:n})}}),An[Ni(r,2).name]=[{name:\"wrapper\",func:r}],Mn.prototype.clone=function(){var t=new Mn(this.__wrapped__);return t.__actions__=ji(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=ji(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=ji(this.__views__),t},Mn.prototype.reverse=function(){if(this.__filtered__){var t=new Mn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Mn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=qu(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],u=o.size;switch(o.type){case\"drop\":t+=u;break;case\"dropRight\":e-=u;break;case\"take\":e=vn(e,t+u);break;case\"takeRight\":t=_n(t,e-u)}}return{start:t,end:e}}(0,i,this.__views__),u=o.start,s=o.end,a=s-u,c=r?s:u-1,l=this.__iteratees__,f=l.length,p=0,h=vn(a,this.__takeCount__);if(!n||!r&&i==a&&h==a)return fi(t,this.__actions__);var d=[];t:for(;a--&&p<h;){for(var y=-1,_=t[c+=e];++y<f;){var v=l[y],g=v.iteratee,m=v.type,b=g(_);if(2==m)_=b;else if(!b){if(1==m)continue t;break t}}d[p++]=_}return d},Un.prototype.at=hu,Un.prototype.chain=function(){return fu(this)},Un.prototype.commit=function(){return new Ln(this.value(),this.__chain__)},Un.prototype.next=function(){this.__values__===r&&(this.__values__=fs(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Un.prototype.plant=function(t){for(var e,n=this;n instanceof zn;){var i=Uo(n);i.__index__=0,i.__values__=r,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e},Un.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Mn){var e=t;return this.__actions__.length&&(e=new Mn(this)),(e=e.reverse()).__actions__.push({func:pu,args:[Qo],thisArg:r}),new Ln(e,this.__chain__)}return this.thru(Qo)},Un.prototype.toJSON=Un.prototype.valueOf=Un.prototype.value=function(){return fi(this.__wrapped__,this.__actions__)},Un.prototype.first=Un.prototype.head,Gt&&(Un.prototype[Gt]=function(){return this}),Un}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(le._=hn,define(function(){return hn})):pe?((pe.exports=hn)._=hn,fe._=hn):le._=hn}.call(this)},575(t){\"use strict\";function e(t){this._maxSize=t,this.clear()}e.prototype.clear=function(){this._size=0,this._values=Object.create(null)},e.prototype.get=function(t){return this._values[t]},e.prototype.set=function(t,e){return this._size>=this._maxSize&&this.clear(),t in this._values||this._size++,this._values[t]=e};var n=/[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,r=/^\\d+$/,i=/^\\d/,o=/[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,u=/^\\s*(['\"]?)(.*?)(\\1)\\s*$/,s=new e(512),a=new e(512),c=new e(512);function l(t){return s.get(t)||s.set(t,f(t).map(function(t){return t.replace(u,\"$2\")}))}function f(t){return t.match(n)||[\"\"]}function p(t){return\"string\"==typeof t&&t&&-1!==[\"'\",'\"'].indexOf(t.charAt(0))}function h(t){return!p(t)&&(function(t){return t.match(i)&&!t.match(r)}(t)||function(t){return o.test(t)}(t))}t.exports={Cache:e,split:f,normalizePath:l,setter:function(t){var e=l(t);return a.get(t)||a.set(t,function(t,n){for(var r=0,i=e.length,o=t;r<i-1;){var u=e[r];if(\"__proto__\"===u||\"constructor\"===u||\"prototype\"===u)return t;o=o[e[r++]]}o[e[r]]=n})},getter:function(t,e){var n=l(t);return c.get(t)||c.set(t,function(t){for(var r=0,i=n.length;r<i;){if(null==t&&e)return;t=t[n[r++]]}return t})},join:function(t){return t.reduce(function(t,e){return t+(p(e)||r.test(e)?\"[\"+e+\"]\":(t?\".\":\"\")+e)},\"\")},forEach:function(t,e,n){!function(t,e,n){var r,i,o,u,s=t.length;for(i=0;i<s;i++)(r=t[i])&&(h(r)&&(r='\"'+r+'\"'),o=!(u=p(r))&&/^\\d+$/.test(r),e.call(n,r,u,o,i,t))}(Array.isArray(t)?t:f(t),e,n)}}},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1837(t){const e=/[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['’](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['’](?:D|LL|M|RE|S|T|VE))?|\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])|\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])|\\d+|(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*/g,n=t=>t.match(e)||[],r=t=>t[0].toUpperCase()+t.slice(1),i=(t,e)=>n(t).join(e).toLowerCase(),o=t=>n(t).reduce((t,e)=>`${t}${t?e[0].toUpperCase()+e.slice(1).toLowerCase():e.toLowerCase()}`,\"\");t.exports={words:n,upperFirst:r,camelCase:o,pascalCase:t=>r(o(t)),snakeCase:t=>i(t,\"_\"),kebabCase:t=>i(t,\"-\"),sentenceCase:t=>r(i(t,\" \")),titleCase:t=>n(t).map(r).join(\" \")}},7584(t){function e(t,e){var n=t.length,r=new Array(n),i={},o=n,u=function(t){for(var e=new Map,n=0,r=t.length;n<r;n++){var i=t[n];e.has(i[0])||e.set(i[0],new Set),e.has(i[1])||e.set(i[1],new Set),e.get(i[0]).add(i[1])}return e}(e),s=function(t){for(var e=new Map,n=0,r=t.length;n<r;n++)e.set(t[n],n);return e}(t);for(e.forEach(function(t){if(!s.has(t[0])||!s.has(t[1]))throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\")});o--;)i[o]||a(t[o],o,new Set);return r;function a(t,e,o){if(o.has(t)){var c;try{c=\", node was:\"+JSON.stringify(t)}catch(t){c=\"\"}throw new Error(\"Cyclic dependency\"+c)}if(!s.has(t))throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \"+JSON.stringify(t));if(!i[e]){i[e]=!0;var l=u.get(t)||new Set;if(e=(l=Array.from(l)).length){o.add(t);do{var f=l[--e];a(f,s.get(f),o)}while(e);o.delete(t)}r[--n]=t}}}t.exports=function(t){return e(function(t){for(var e=new Set,n=0,r=t.length;n<r;n++){var i=t[n];e.add(i[0]),e.add(i[1])}return Array.from(e)}(t),t)},t.exports.array=e}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{initializeHostedInput:()=>Le,notifyInitializeError:()=>qe});class t extends Error{constructor(t){super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",function(t,e){Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e}(this,new.target.prototype),\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class e extends t{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function i(t){if(!/^(https?:)?\\/\\//.test(t))throw new e(\"The provided URL must be absolute.\");const n=document.createElement(\"a\");n.href=t;const r=n.port&&-1!==t.indexOf(`${n.hostname}:${n.port}`)?n.port:\"\";return{hash:n.hash,hostname:n.hostname,href:n.href,origin:`${n.protocol}//${n.hostname}${r?`:${r}`:\"\"}`,pathname:n.pathname,port:r,protocol:n.protocol,search:n.search}}function o(t){return i(0===t.hostname.indexOf(\"www\")?t.href:t.href.replace(t.hostname,`www.${t.hostname}`))}function u(t,e,n){if(\"function\"!=typeof n.value)return n;let r=n.value;return{get(){const t=r.bind(this);return Object.defineProperty(this,e,Object.assign(Object.assign({},n),{value:t})),t},set(t){r=t}}}function s(t,e){return t.type===e}class a{constructor(t){this._sourceOrigins=[i(t).origin,o(i(t)).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(t,e){let n=this._listeners[t];n||(this._listeners[t]=n=[]),-1===n.indexOf(e)&&n.push(e)}removeListener(t,e){const n=this._listeners[t];if(!n)return;const r=n.indexOf(e);r>=0&&n.splice(r,1)}trigger(t,e){const n=this._listeners[t.type];n&&n.forEach(n=>e?n(t,e):n(t))}_handleMessage(t){if(-1===this._sourceOrigins.indexOf(t.origin)||!s(t.data,t.data.type))return;const e=t.data,{context:n}=e,r=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(e,[\"context\"]);this.trigger(r,n)}}!function(t,e,n,r){var i,o=arguments.length,u=o<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)u=Reflect.decorate(t,e,n,r);else for(var s=t.length-1;s>=0;s--)(i=t[s])&&(u=(o<3?i(u):o>3?i(e,n,u):i(e,n))||u);o>3&&u&&Object.defineProperty(e,n,u)}([function(t,e,n){return e&&n?u(0,e,n):function(t){const e=class extends t{};return Object.getOwnPropertyNames(t.prototype).forEach(n=>{const r=Object.getOwnPropertyDescriptor(t.prototype,n);r&&\"constructor\"!==n&&Object.defineProperty(e.prototype,n,u(t.prototype,n,r))}),e}(t)}],a.prototype,\"_handleMessage\",null);class c{setNonce(t){this._nonce=t}getNonce(){return this._nonce}}let l;function f(){return l=l||new c,l}var p=n(168),h=function(){return h=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},h.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError;var d=/application\\/(\\w+\\+)?json/,y=/application\\/x-www-form-urlencoded/;const _=function(){function t(){}return t.prototype.toRequestBody=function(t){var e,n=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(d.test(n))return JSON.stringify(t.body);if(y.test(n))return\"object\"!=typeof(e=t.body)||null===e?e:Object.keys(e).filter(function(t){return void 0!==e[t]}).map(function(t){var n=e[t];return\"string\"==typeof n?\"\".concat(t,\"=\").concat(encodeURIComponent(n)):\"\".concat(t,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,\"Content-Type\");return t&&d.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var n,r=e.split(\":\"),i=(r.shift()||\"\").trim();return i?h(h({},t),((n={})[i.toLowerCase()]=r.join(\":\").trim(),n)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}();var v=n(5889);const g=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||\"GET\",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),\"boolean\"==typeof n.credentials&&(t.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(n){t.setRequestHeader(n,e[n])})},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(v.stringify(e,{encode:n})):t},t}();var m=n(35),b=n.n(m),w=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(v.stringify(e))},t}();const x=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}(),E=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new w}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(e,i){var u,s=function(){var u=n._payloadTransformer.toResponse(o);u.status>=200&&u.status<300?(n._cacheRequest(t,r,u),e(u)):i(u)};o.onload=s,o.onerror=s,o.onabort=s,o.ontimeout=s,r.timeout instanceof x&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),!(u=r.timeout)||\"object\"!=typeof u&&\"function\"!=typeof u||\"function\"!=typeof u.then||r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,e){return this.sendRequest(t,h(h({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,h(h({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,h(h({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,h(h({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,h(h({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(n.headers[\"X-XSRF-TOKEN\"]=r),e&&e.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),b()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}();function O(t){return new E(new g,new _,p,t)}var S=function(t,e){return S=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},S(t,e)};function j(t,e){function n(){this.constructor=t}S(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}function T(t){return\"function\"==typeof t}var C=!1,A={Promise:void 0,set useDeprecatedSynchronousErrorHandling(t){t&&(new Error).stack,C=t},get useDeprecatedSynchronousErrorHandling(){return C}};function F(t){setTimeout(function(){throw t},0)}var k={closed:!0,next:function(t){},error:function(t){if(A.useDeprecatedSynchronousErrorHandling)throw t;F(t)},complete:function(){}},I=function(){return Array.isArray||function(t){return t&&\"number\"==typeof t.length}}();function D(t){return null!==t&&\"object\"==typeof t}var R=function(){function t(t){return Error.call(this),this.message=t?t.length+\" errors occurred during unsubscription:\\n\"+t.map(function(t,e){return e+1+\") \"+t.toString()}).join(\"\\n  \"):\"\",this.name=\"UnsubscriptionError\",this.errors=t,this}return t.prototype=Object.create(Error.prototype),t}(),$=function(){function t(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._ctorUnsubscribe=!0,this._unsubscribe=t)}return t.prototype.unsubscribe=function(){var e;if(!this.closed){var n=this,r=n._parentOrParents,i=n._ctorUnsubscribe,o=n._unsubscribe,u=n._subscriptions;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,r instanceof t)r.remove(this);else if(null!==r)for(var s=0;s<r.length;++s)r[s].remove(this);if(T(o)){i&&(this._unsubscribe=void 0);try{o.call(this)}catch(t){e=t instanceof R?P(t.errors):[t]}}if(I(u)){s=-1;for(var a=u.length;++s<a;){var c=u[s];if(D(c))try{c.unsubscribe()}catch(t){e=e||[],t instanceof R?e=e.concat(P(t.errors)):e.push(t)}}}if(e)throw new R(e)}},t.prototype.add=function(e){var n=e;if(!e)return t.EMPTY;switch(typeof e){case\"function\":n=new t(e);case\"object\":if(n===this||n.closed||\"function\"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if(!(n instanceof t)){var r=n;(n=new t)._subscriptions=[r]}break;default:throw new Error(\"unrecognized teardown \"+e+\" added to Subscription.\")}var i=n._parentOrParents;if(null===i)n._parentOrParents=this;else if(i instanceof t){if(i===this)return n;n._parentOrParents=[i,this]}else{if(-1!==i.indexOf(this))return n;i.push(this)}var o=this._subscriptions;return null===o?this._subscriptions=[n]:o.push(n),n},t.prototype.remove=function(t){var e=this._subscriptions;if(e){var n=e.indexOf(t);-1!==n&&e.splice(n,1)}},t.EMPTY=function(t){return t.closed=!0,t}(new t),t}();function P(t){return t.reduce(function(t,e){return t.concat(e instanceof R?e.errors:e)},[])}var N=function(){return\"function\"==typeof Symbol?Symbol(\"rxSubscriber\"):\"@@rxSubscriber_\"+Math.random()}(),U=function(t){function e(n,r,i){var o=t.call(this)||this;switch(o.syncErrorValue=null,o.syncErrorThrown=!1,o.syncErrorThrowable=!1,o.isStopped=!1,arguments.length){case 0:o.destination=k;break;case 1:if(!n){o.destination=k;break}if(\"object\"==typeof n){n instanceof e?(o.syncErrorThrowable=n.syncErrorThrowable,o.destination=n,n.add(o)):(o.syncErrorThrowable=!0,o.destination=new V(o,n));break}default:o.syncErrorThrowable=!0,o.destination=new V(o,n,r,i)}return o}return j(e,t),e.prototype[N]=function(){return this},e.create=function(t,n,r){var i=new e(t,n,r);return i.syncErrorThrowable=!1,i},e.prototype.next=function(t){this.isStopped||this._next(t)},e.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this))},e.prototype._next=function(t){this.destination.next(t)},e.prototype._error=function(t){this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},e.prototype._unsubscribeAndRecycle=function(){var t=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this},e}($),V=function(t){function e(e,n,r,i){var o,u=t.call(this)||this;u._parentSubscriber=e;var s=u;return T(n)?o=n:n&&(o=n.next,r=n.error,i=n.complete,n!==k&&(T((s=Object.create(n)).unsubscribe)&&u.add(s.unsubscribe.bind(s)),s.unsubscribe=u.unsubscribe.bind(u))),u._context=s,u._next=o,u._error=r,u._complete=i,u}return j(e,t),e.prototype.next=function(t){if(!this.isStopped&&this._next){var e=this._parentSubscriber;A.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}},e.prototype.error=function(t){if(!this.isStopped){var e=this._parentSubscriber,n=A.useDeprecatedSynchronousErrorHandling;if(this._error)n&&e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(e.syncErrorThrowable)n?(e.syncErrorValue=t,e.syncErrorThrown=!0):F(t),this.unsubscribe();else{if(this.unsubscribe(),n)throw t;F(t)}}},e.prototype.complete=function(){var t=this;if(!this.isStopped){var e=this._parentSubscriber;if(this._complete){var n=function(){return t._complete.call(t._context)};A.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?(this.__tryOrSetError(e,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},e.prototype.__tryOrUnsub=function(t,e){try{t.call(this._context,e)}catch(t){if(this.unsubscribe(),A.useDeprecatedSynchronousErrorHandling)throw t;F(t)}},e.prototype.__tryOrSetError=function(t,e,n){if(!A.useDeprecatedSynchronousErrorHandling)throw new Error(\"bad call\");try{e.call(this._context,n)}catch(e){return A.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=e,t.syncErrorThrown=!0,!0):(F(e),!0)}return!1},e.prototype._unsubscribe=function(){var t=this._parentSubscriber;this._context=null,this._parentSubscriber=null,t.unsubscribe()},e}(U),z=function(){return\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\"}();function L(t){return t}var M=function(){function t(t){this._isScalar=!1,t&&(this._subscribe=t)}return t.prototype.lift=function(e){var n=new t;return n.source=this,n.operator=e,n},t.prototype.subscribe=function(t,e,n){var r=this.operator,i=function(t,e,n){if(t){if(t instanceof U)return t;if(t[N])return t[N]()}return t||e||n?new U(t,e,n):new U(k)}(t,e,n);if(r?i.add(r.call(i,this.source)):i.add(this.source||A.useDeprecatedSynchronousErrorHandling&&!i.syncErrorThrowable?this._subscribe(i):this._trySubscribe(i)),A.useDeprecatedSynchronousErrorHandling&&i.syncErrorThrowable&&(i.syncErrorThrowable=!1,i.syncErrorThrown))throw i.syncErrorValue;return i},t.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){A.useDeprecatedSynchronousErrorHandling&&(t.syncErrorThrown=!0,t.syncErrorValue=e),function(t){for(;t;){var e=t,n=e.closed,r=e.destination,i=e.isStopped;if(n||i)return!1;t=r&&r instanceof U?r:null}return!0}(t)?t.error(e):console.warn(e)}},t.prototype.forEach=function(t,e){var n=this;return new(e=q(e))(function(e,r){var i;i=n.subscribe(function(e){try{t(e)}catch(t){r(t),i&&i.unsubscribe()}},r,e)})},t.prototype._subscribe=function(t){var e=this.source;return e&&e.subscribe(t)},t.prototype[z]=function(){return this},t.prototype.pipe=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return 0===t.length?this:(0===(n=t).length?L:1===n.length?n[0]:function(t){return n.reduce(function(t,e){return e(t)},t)})(this);var n},t.prototype.toPromise=function(t){var e=this;return new(t=q(t))(function(t,n){var r;e.subscribe(function(t){return r=t},function(t){return n(t)},function(){return t(r)})})},t.create=function(e){return new t(e)},t}();function q(t){if(t||(t=A.Promise||Promise),!t)throw new Error(\"no Promise impl found\");return t}function H(t,e){return function(n){if(\"function\"!=typeof t)throw new TypeError(\"argument is not a function. Are you looking for `mapTo()`?\");return n.lift(new B(t,e))}}var B=function(){function t(t,e){this.project=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new W(t,this.project,this.thisArg))},t}(),W=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.project=n,i.count=0,i.thisArg=r||i,i}return j(e,t),e.prototype._next=function(t){var e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(U);function Z(t,e,n,r){return T(n)&&(r=n,n=void 0),r?Z(t,e,n).pipe(H(function(t){return I(t)?r.apply(void 0,t):r(t)})):new M(function(r){Y(t,e,function(t){arguments.length>1?r.next(Array.prototype.slice.call(arguments)):r.next(t)},r,n)})}function Y(t,e,n,r,i){var o;if(function(t){return t&&\"function\"==typeof t.addEventListener&&\"function\"==typeof t.removeEventListener}(t)){var u=t;t.addEventListener(e,n,i),o=function(){return u.removeEventListener(e,n,i)}}else if(function(t){return t&&\"function\"==typeof t.on&&\"function\"==typeof t.off}(t)){var s=t;t.on(e,n),o=function(){return s.off(e,n)}}else if(function(t){return t&&\"function\"==typeof t.addListener&&\"function\"==typeof t.removeListener}(t)){var a=t;t.addListener(e,n),o=function(){return a.removeListener(e,n)}}else{if(!t||!t.length)throw new TypeError(\"Invalid event target\");for(var c=0,l=t.length;c<l;c++)Y(t[c],e,n,r,i)}r.add(o)}var J=function(){function t(t,e){this.predicate=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new K(t,this.predicate,this.thisArg))},t}(),K=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.predicate=n,i.thisArg=r,i.count=0,i}return j(e,t),e.prototype._next=function(t){var e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}e&&this.destination.next(t)},e}(U),G=function(){function t(){return Error.call(this),this.message=\"argument out of range\",this.name=\"ArgumentOutOfRangeError\",this}return t.prototype=Object.create(Error.prototype),t}(),X=new M(function(t){return t.complete()});function Q(t){return function(e){return 0===t?n?function(t){return new M(function(e){return t.schedule(function(){return e.complete()})})}(n):X:e.lift(new et(t));var n}}var tt,et=function(){function t(t){if(this.total=t,this.total<0)throw new G}return t.prototype.call=function(t,e){return e.subscribe(new nt(t,this.total))},t}(),nt=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return j(e,t),e.prototype._next=function(t){var e=this.total,n=++this.count;n<=e&&(this.destination.next(t),n===e&&(this.destination.complete(),this.unsubscribe()))},e}(U);class rt{constructor(t,e,n){this._targetWindow=e,this._context=n,this._targetOrigin=\"*\"===t?\"*\":i(t).origin}post(t,e){const n=this._targetWindow;if(window===n)return;if(!n)throw new Error(\"Unable to post message because target window is not set.\");const r=e&&Z(window,\"message\").pipe((i=t=>t.origin===this._targetOrigin&&s(t.data,t.data.type)&&-1!==[e.successType,e.errorType].indexOf(t.data.type),function(t){return t.lift(new J(i,void 0))}),H(t=>{if(e.errorType===t.data.type)throw t.data;return t.data}),Q(1)).toPromise();var i;return n.postMessage(Object.assign(Object.assign({},t),{context:this._context}),this._targetOrigin),r}setTarget(t){this._targetWindow=t}setContext(t){this._context=t}}!function(t){t.CardCode=\"cardCode\",t.CardExpiry=\"cardExpiry\",t.CardName=\"cardName\",t.CardNumber=\"cardNumber\",t.Note=\"note\",t.Hidden=\"hidden\"}(tt||(tt={}));const it=tt;var ot;!function(t){t.Json=\"application/json\",t.JsonV1=\"application/vnd.bc.v1+json\"}(ot||(ot={}));const ut=ot;var st,at,ct;!function(t){t.Card=\"card\",t.ManualPayment=\"manual_payment\"}(st||(st={})),function(t){t.BankDeposit=\"bigcommerce_offline.bank_deposit\",t.Cheque=\"bigcommerce_offline.cheque\",t.Cod=\"bigcommerce_offline.cod\",t.InStore=\"bigcommerce_offline.in_store\",t.MoneyOrder=\"bigcommerce_offline.money_order\"}(at||(at={})),function(t){t.BankDeposit=\"bank_deposit\",t.Cheque=\"cheque\",t.Cod=\"cod\",t.InStore=\"in_store\",t.MoneyOrder=\"money_order\"}(ct||(ct={}));const lt={[at.BankDeposit]:ct.BankDeposit,[at.Cheque]:ct.Cheque,[at.Cod]:ct.Cod,[at.InStore]:ct.InStore,[at.MoneyOrder]:ct.MoneyOrder},ft=t=>Object.values(at).includes(t);class pt{constructor(t,e){this._requestSender=t,this._paymentOrigin=e}submitPayment(t,e,n){var r,i,o,u,s,a,c;return u=this,s=void 0,c=function*(){const{paymentMethodId:u,paymentSessionToken:s}=t;let a;if(\"bigcommerce.manual_payment\"===u)a={type:st.ManualPayment,note:null!==(r=e.note)&&void 0!==r?r:\"\"};else if(ft(u))a={type:lt[u]};else{const[t,n]=e.cardExpiry?e.cardExpiry.split(\"/\"):[];a={type:st.Card,name:null!==(i=e.cardName)&&void 0!==i?i:\"\",number:e.cardNumber?e.cardNumber.replace(/ /g,\"\"):\"\",expires:{month:Number(t.trim()),year:Number(`20${n.trim()}`)},verification_value:null!==(o=e.cardCode)&&void 0!==o?o:void 0}}const c={headers:{Accept:ut.Json,\"Content-Type\":ut.Json,\"X-Payment-Session-Token\":s},body:{instrument:a,payment_method_id:u,form_nonce:null!=n?n:void 0}};return this._requestSender.post(`${this._paymentOrigin}/payments`,c)},new((a=void 0)||(a=Promise))(function(t,e){function n(t){try{i(c.next(t))}catch(t){e(t)}}function r(t){try{i(c.throw(t))}catch(t){e(t)}}function i(e){var i;e.done?t(e.value):(i=e.value,i instanceof a?i:new a(function(t){t(i)})).then(n,r)}i((c=c.apply(u,s||[])).next())})}}class ht{constructor(t){this._requestSender=t}submitPaymentInstrument(t,e){return n=this,r=void 0,o=function*(){const{providerId:n,currencyCode:r,paymentsUrl:i,shopperId:o,storeHash:u,vaultToken:s}=t,{billingAddress:a,instrument:c,defaultInstrument:l}=e,f=`${i}/stores/${u}/customers/${o}/stored_instruments`,p={headers:{Authorization:s,Accept:\"application/vnd.bc.v1+json\",\"Content-Type\":\"application/vnd.bc.v1+json\"},body:JSON.stringify({instrument:{type:c.type,cardholder_name:c.cardholderName,number:c.number,expiry_month:c.expiryMonth,expiry_year:c.expiryYear,verification_value:c.verificationValue},billing_address:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({email:a.email,address1:a.address1},a.address2&&{address2:a.address2}),{city:a.city,postal_code:a.postalCode,country_code:a.countryCode}),a.company&&{company:a.company}),{first_name:a.firstName,last_name:a.lastName}),a.phone&&{phone:a.phone}),a.stateOrProvinceCode&&{state_or_province_code:a.stateOrProvinceCode}),provider_id:n,default_instrument:l,currency_code:r})};yield this._requestSender.post(f,p)},new((i=void 0)||(i=Promise))(function(t,e){function u(t){try{a(o.next(t))}catch(t){e(t)}}function s(t){try{a(o.throw(t))}catch(t){e(t)}}function a(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i(function(t){t(n)})).then(u,s)}a((o=o.apply(n,r||[])).next())});var n,r,i,o}}class dt{format(t){const[e=\"\",n=\"\"]=t.split(new RegExp(\"\\\\s*/\\\\s*\")),r=e.slice(0,2),i=4===n.length?n.slice(-2):n?n.slice(0,2):e.slice(2);return t.length<2?e:t.length>3&&!i?r:`${r} / ${i}`}toObject(t){const[e=\"\",n=\"\"]=t.split(new RegExp(\"\\\\s*/\\\\s*\"));return/^\\d+$/.test(e)&&/^\\d+$/.test(n)?{month:1===e.length?`0${e}`:e.slice(0,2),year:2===n.length?`20${n}`:n.slice(0,4)}:{month:\"\",year:\"\"}}}var yt,_t,vt=n(2437),gt=n(9440);class mt{format(t){const{card:e}=(0,vt.number)(t);if(!e)return t;const n=(0,gt.max)((0,vt.creditCardType)(t).map(t=>(0,gt.max)(t.lengths))),r=this.unformat(t).slice(0,n);return e.gaps.filter(t=>r.length>t).reduce((t,e,n)=>[t.slice(0,e+n),t.slice(e+n)].join(\" \"),r)}unformat(t){const{card:e}=(0,vt.number)(t);return e?t.replace(new RegExp(\" \",\"g\"),\"\"):t}}function bt(t){switch(t){case it.CardCode:return\"cc-csc\";case it.CardExpiry:return\"cc-exp\";case it.CardName:return\"cc-name\";case it.CardNumber:return\"cc-number\";default:return\"\"}}class wt{constructor(t,e,n){this._form=t,this._fieldTypes=e,this._inputAggregator=n,this._handleChange=t=>{const e=t.target;if(!e)throw new Error(\"Unable to get a reference to the target of the change event.\");const n=this._inputAggregator.getInputs().find(t=>this._getAutocompleteElementId(t.getType())===e.id);n&&n.setValue(e.value)},this._inputs=this._fieldTypes.map(t=>this._createInput(t))}attach(){this._inputs.forEach(t=>this._form.appendChild(t))}detach(){this._inputs.forEach(t=>{t.parentElement&&t.parentElement.removeChild(t)})}_createInput(t){const e=document.createElement(\"input\");return e.autocomplete=bt(t),e.id=this._getAutocompleteElementId(t),e.tabIndex=-1,e.style.position=\"absolute\",e.style.opacity=\"0\",e.style.zIndex=\"-1\",e.addEventListener(\"change\",this._handleChange),e}_getAutocompleteElementId(t){return`autocomplete-${(0,gt.kebabCase)(t)}`}}!function(t){t.AttachRequested=\"HOSTED_FIELD:ATTACH_REQUESTED\",t.SubmitRequested=\"HOSTED_FIELD:SUBMITTED_REQUESTED\",t.SubmitManualOrderRequested=\"HOSTED_FIELD:SUBMIT_MANUAL_ORDER_REQUESTED\",t.ValidateRequested=\"HOSTED_FIELD:VALIDATE_REQUESTED\",t.StoredCardRequested=\"HOSTED_FIELD:STORED_CARD_REQUESTED\"}(yt||(yt={})),function(t){t.AttachSucceeded=\"HOSTED_INPUT:ATTACH_SUCCEEDED\",t.AttachFailed=\"HOSTED_INPUT:ATTACH_FAILED\",t.BinChanged=\"HOSTED_INPUT:BIN_CHANGED\",t.Blurred=\"HOSTED_INPUT:BLURRED\",t.Changed=\"HOSTED_INPUT:CHANGED\",t.CardTypeChanged=\"HOSTED_INPUT:CARD_TYPE_CHANGED\",t.Entered=\"HOSTED_INPUT:ENTERED\",t.Focused=\"HOSTED_INPUT:FOCUSED\",t.SubmitSucceeded=\"HOSTED_INPUT:SUBMIT_SUCCEEDED\",t.SubmitFailed=\"HOSTED_INPUT:SUBMIT_FAILED\",t.SubmitManualOrderSucceeded=\"HOSTED_INPUT:SUBMIT_MANUAL_ORDER_SUCCEEDED\",t.SubmitManualOrderFailed=\"HOSTED_INPUT:SUBMIT_MANUAL_ORDER_FAILED\",t.Validated=\"HOSTED_INPUT:VALIDATED\",t.StoredCardSucceeded=\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",t.StoredCardFailed=\"HOSTED_INPUT:STORED_CARD_FAILED\"}(_t||(_t={}));class xt{constructor(t,e,n,r,i,o,u,s,a,c,l,f,p){this._type=t,this._form=e,this._placeholder=n,this._accessibilityLabel=r,this._autocomplete=i,this._styles=o,this._fontUrls=u,this._eventListener=s,this._eventPoster=a,this._inputAggregator=c,this._inputValidator=l,this._manualOrderPaymentHandler=f,this._storedCardHandler=p,this._isTouched=!1,this._handleInput=t=>{const e=t.target;this._processChange(e.value)},this._handleBlur=()=>{this._applyStyles(this._styles.default),this._validateForm(),this._eventPoster.post({type:_t.Blurred,payload:{fieldType:this._type}})},this._handleFocus=()=>{this._applyStyles(this._styles.focus),this._eventPoster.post({type:_t.Focused,payload:{fieldType:this._type}})},this._handleValidate=()=>{this._validateForm()},this._handleSubmit=t=>{t.preventDefault(),this._eventPoster.post({type:_t.Entered,payload:{fieldType:this._type}})},this._forceFocusToInput=()=>{document.activeElement===document.body&&(navigator.userAgent.toLowerCase().indexOf(\"safari\")>-1?\"\"===this._input.value&&(this._input.setAttribute(\"value\",\" \"),this._input.setSelectionRange(0,1),this._input.setAttribute(\"value\",\"\")):this._input.focus())},this._input=document.createElement(\"input\"),this._input.addEventListener(\"input\",this._handleInput),this._input.addEventListener(\"blur\",this._handleBlur),this._input.addEventListener(\"focus\",this._handleFocus),this._eventListener.addListener(yt.ValidateRequested,this._handleValidate),this._eventListener.addListener(yt.SubmitManualOrderRequested,this._manualOrderPaymentHandler.handle),this._eventListener.addListener(yt.StoredCardRequested,this._storedCardHandler.handle),this._configureInput()}getType(){return this._type}getValue(){return this._input.value}setValue(t){this._processChange(t)}isTouched(){return this._isTouched}attach(){this._form.appendChild(this._input),this._form.addEventListener(\"submit\",this._handleSubmit),this._loadFonts(),this._eventPoster.setTarget(window.parent),this._eventListener.listen(),window.addEventListener(\"focus\",this._forceFocusToInput),window.hostedInput=this,this._eventPoster.post({type:_t.AttachSucceeded})}detach(){this._input.parentElement&&this._input.parentElement.removeChild(this._input),this._form.removeEventListener(\"submit\",this._handleSubmit),this._unloadFonts(),window.removeEventListener(\"focus\",this._forceFocusToInput),this._eventListener.stopListen()}_formatValue(t){this._input.value=t}_notifyChange(t){this._eventPoster.post({type:_t.Changed,payload:{fieldType:this._type}})}_configureInput(){switch(this._input.style.backgroundColor=\"transparent\",this._input.style.border=\"0\",this._input.style.display=\"block\",this._input.style.height=\"100%\",this._input.style.margin=\"0\",this._input.style.outline=\"none\",this._input.style.padding=\"0\",this._input.style.width=\"100%\",this._input.id=(0,gt.kebabCase)(this._type),this._input.placeholder=this._placeholder,this._input.autocomplete=this._autocomplete,this._input.setAttribute(\"aria-label\",this._accessibilityLabel),this._applyStyles(this._styles.default),this._input.id){case\"card-code\":case\"card-expiry\":case\"card-number\":this._input.type=\"text\",this._input.inputMode=\"numeric\",this._input.pattern=\"[0-9]*\";break;case\"card-name\":case\"note\":case\"hidden\":this._input.type=\"text\",this._input.inputMode=\"text\"}}_applyStyles(t={}){const e={color:t.color,fontFamily:t.fontFamily,fontSize:t.fontSize,fontWeight:t.fontWeight};Object.keys(e).forEach(t=>{e[t]&&(this._input.style[t]=e[t]||\"\")})}_loadFonts(){this._fontLinks||(this._fontLinks=this._fontUrls.filter(t=>\"fonts.googleapis.com\"===i(t).hostname).filter(t=>!document.querySelector(`link[href='${t}'][rel='stylesheet']`)).map(t=>{const e=document.createElement(\"link\");return e.rel=\"stylesheet\",e.href=t,document.head.appendChild(e),e}))}_unloadFonts(){this._fontLinks&&(this._fontLinks.forEach(t=>{t.parentElement&&t.parentElement.removeChild(t)}),this._fontLinks=void 0)}_validateForm(){return t=this,e=void 0,r=function*(){const t=this._inputAggregator.getInputValues(),e=yield this._inputValidator.validate(t);e.isValid?this._applyStyles(this._styles.default):this._applyStyles(this._styles.error),this._eventPoster.post({type:_t.Validated,payload:e})},new((n=void 0)||(n=Promise))(function(i,o){function u(t){try{a(r.next(t))}catch(t){o(t)}}function s(t){try{a(r.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,s)}a((r=r.apply(t,e||[])).next())});var t,e,n,r}_processChange(t){t!==this._previousValue&&(this._isTouched=!0,this._formatValue(t),this._validateForm(),this._notifyChange(t),this._previousValue=t)}}class Et extends xt{constructor(t,e,n,r,i,o,u,s,a,c,l,f,p){super(it.CardExpiry,t,e,n,r,i,o,u,s,a,c,l,f),this._formatter=p}_formatValue(t){this._input.value=this._formatter.format(t)}}class Ot extends xt{constructor(t,e,n,r,i,o,u,s,a,c,l,f,p,h,d){super(t,e,n,r,i,o,u,s,a,c,l,f,p),this._autocompleteFieldset=h,this._formatter=d}attach(){super.attach(),this._autocompleteFieldset.attach()}_notifyChange(t){const e=(0,vt.number)(t).card,n=this._previousValue&&(0,vt.number)(this._previousValue).card;(0,gt.get)(n,\"type\")!==(0,gt.get)(e,\"type\")&&this._eventPoster.post({type:_t.CardTypeChanged,payload:{cardType:e?e.type:void 0}});const r=this._formatter.unformat(t),i=this._previousValue?this._formatter.unformat(this._previousValue):\"\",o=r.length>=6&&(0,vt.number)(r).isPotentiallyValid?r.substr(0,6):\"\";o!==(i.length>=6?i.substr(0,6):\"\")&&this._eventPoster.post({type:_t.BinChanged,payload:{bin:o}})}_formatValue(t){const e=this._input.selectionEnd,n=this._formatter.format(t);e===t.length&&t.length<n.length?this._input.setSelectionRange(n.length,n.length):this._input.setSelectionRange(e||0,e||0),this._input.value=n}}class St{constructor(t){this._parentWindow=t}getInputs(t){return Array.prototype.slice.call(this._parentWindow.frames).reduce((e,n)=>{try{const r=n.hostedInput;return!r||t&&!t(r)?e:[...e,r]}catch(t){if(t instanceof DOMException)return e;if(t instanceof Error&&\"Permission denied\"===t.message)return e;throw t}},[])}getInputValues(t){return this.getInputs(t).reduce((t,e)=>Object.assign(Object.assign({},t),{[e.getType()]:e.getValue()}),{})}}class jt extends t{constructor(t){super([\"Unable to proceed due to invalid user input values\",...(0,gt.flatMap)((0,gt.values)(t),t=>(0,gt.map)(t,({message:t})=>t))].join(\". \")),this.errors=t,this.name=\"InvalidHostedFormValueError\",this.type=\"invalid_hosted_form_value\"}}class Tt{constructor(t,e,n,r,i){this._inputAggregator=t,this._inputValidator=e,this._inputStorage=n,this._eventPoster=r,this._manualOrderPaymentRequestSender=i,this.handle=t=>{return e=this,n=void 0,i=function*(){var e,n;const{payload:{data:r}}=t,i=this._inputAggregator.getInputValues(),o=yield this._inputValidator.validate(i);if(this._eventPoster.post({type:_t.Validated,payload:o}),!o.isValid){const t=new jt(o.errors);return this._eventPoster.post({type:_t.SubmitManualOrderFailed,payload:{error:{code:(0,gt.snakeCase)(t.name),message:t.message}}})}try{const t=yield this._manualOrderPaymentRequestSender.submitPayment(r,i,this._inputStorage.getNonce()),o=\"failure\"===(0,gt.get)(t.body,\"type\")&&(0,gt.isString)((0,gt.get)(t.body,\"code\")),u=\"error\"===(0,gt.get)(t.body,\"type\"),s=ft(r.paymentMethodId)&&\"continue\"===(0,gt.get)(t.body,\"type\")&&\"complete_offline\"===(0,gt.get)(t.body,\"code\"),a=\"continue\"===(0,gt.get)(t.body,\"type\")&&\"await_confirmation\"===(0,gt.get)(t.body,\"code\"),c=\"success\"===(0,gt.get)(t.body,\"type\")||s||a;o?this._eventPoster.post({type:_t.SubmitManualOrderFailed,payload:{error:{code:String(null!==(e=(0,gt.get)(t.body,\"code\"))&&void 0!==e?e:\"\")}}}):u?this._eventPoster.post({type:_t.SubmitManualOrderFailed,payload:{error:{code:String(null!==(n=(0,gt.get)(t.body,\"type\"))&&void 0!==n?n:\"\")}}}):c&&this._eventPoster.post({type:_t.SubmitManualOrderSucceeded,payload:{response:t}})}catch(t){this._isPaymentErrorResponse(t)?this._eventPoster.post({type:_t.SubmitManualOrderFailed,payload:{error:t.body.errors[0],response:t}}):this._isErrorResponse(t)&&this._eventPoster.post({type:_t.SubmitManualOrderFailed,payload:{error:{code:(0,gt.snakeCase)(t.name),message:t.message}}})}},new((r=void 0)||(r=Promise))(function(t,o){function u(t){try{a(i.next(t))}catch(t){o(t)}}function s(t){try{a(i.throw(t))}catch(t){o(t)}}function a(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(t){t(n)})).then(u,s)}a((i=i.apply(e,n||[])).next())});var e,n,r,i}}_isPaymentErrorResponse(t){const{body:{errors:e=[]}={}}=t||{};return\"string\"==typeof(e[0]&&e[0].code)&&\"string\"==typeof(e[0]&&e[0].message)}_isErrorResponse(t){return\"object\"==typeof t&&null!==t&&(\"name\"in t&&\"string\"==typeof t.name||!(\"name\"in t))&&(\"message\"in t&&\"string\"==typeof t.message||!(\"message\"in t))}}class Ct{constructor(t,e,n,r){this._inputAggregator=t,this._inputValidator=e,this._eventPoster=n,this._storedCardRequestSender=r,this.handle=t=>{return e=this,n=void 0,i=function*(){var e;const{payload:{data:n,fields:r}}=t,i=this._inputAggregator.getInputValues(),o=yield this._inputValidator.validate(i);if(this._eventPoster.post({type:_t.Validated,payload:o}),!o.isValid)return this._eventPoster.post({type:_t.StoredCardFailed});const{defaultInstrument:u}=r,s=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(r,[\"defaultInstrument\"]),[a,c]=i.cardExpiry?i.cardExpiry.split(\"/\"):[];try{yield this._storedCardRequestSender.submitPaymentInstrument(n,{billingAddress:s,instrument:{type:\"card\",cardholderName:i.cardName||\"\",number:i.cardNumber?i.cardNumber.replace(/ /g,\"\"):\"\",expiryMonth:Number(a.trim()),expiryYear:Number(`20${c.trim()}`),verificationValue:null!==(e=i.cardCode)&&void 0!==e?e:\"\"},defaultInstrument:u}),this._eventPoster.post({type:_t.StoredCardSucceeded})}catch(t){this._eventPoster.post({type:_t.StoredCardFailed})}},new((r=void 0)||(r=Promise))(function(t,o){function u(t){try{a(i.next(t))}catch(t){o(t)}}function s(t){try{a(i.throw(t))}catch(t){o(t)}}function a(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(t){t(n)})).then(u,s)}a((i=i.apply(e,n||[])).next())});var e,n,r,i}}}var At=n(575),Ft=n(1837),kt=n(7584),It=n.n(kt);const Dt=Object.prototype.toString,Rt=Error.prototype.toString,$t=RegExp.prototype.toString,Pt=\"undefined\"!=typeof Symbol?Symbol.prototype.toString:()=>\"\",Nt=/^Symbol\\((.*)\\)(.*)$/;function Ut(t,e=!1){if(null==t||!0===t||!1===t)return\"\"+t;const n=typeof t;if(\"number\"===n)return function(t){return t!=+t?\"NaN\":0===t&&1/t<0?\"-0\":\"\"+t}(t);if(\"string\"===n)return e?`\"${t}\"`:t;if(\"function\"===n)return\"[Function \"+(t.name||\"anonymous\")+\"]\";if(\"symbol\"===n)return Pt.call(t).replace(Nt,\"Symbol($1)\");const r=Dt.call(t).slice(8,-1);return\"Date\"===r?isNaN(t.getTime())?\"\"+t:t.toISOString(t):\"Error\"===r||t instanceof Error?\"[\"+Rt.call(t)+\"]\":\"RegExp\"===r?$t.call(t):null}function Vt(t,e){let n=Ut(t,e);return null!==n?n:JSON.stringify(t,function(t,n){let r=Ut(this[t],e);return null!==r?r:n},2)}function zt(t){return null==t?[]:[].concat(t)}let Lt,Mt,qt,Ht=/\\$\\{\\s*(\\w+)\\s*\\}/g;Lt=Symbol.toStringTag;class Bt{constructor(t,e,n,r){this.name=void 0,this.message=void 0,this.value=void 0,this.path=void 0,this.type=void 0,this.params=void 0,this.errors=void 0,this.inner=void 0,this[Lt]=\"Error\",this.name=\"ValidationError\",this.value=e,this.path=n,this.type=r,this.errors=[],this.inner=[],zt(t).forEach(t=>{if(Wt.isError(t)){this.errors.push(...t.errors);const e=t.inner.length?t.inner:[t];this.inner.push(...e)}else this.errors.push(t)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0]}}Mt=Symbol.hasInstance,qt=Symbol.toStringTag;class Wt extends Error{static formatError(t,e){const n=e.label||e.path||\"this\";return e=Object.assign({},e,{path:n,originalPath:e.path}),\"string\"==typeof t?t.replace(Ht,(t,n)=>Vt(e[n])):\"function\"==typeof t?t(e):t}static isError(t){return t&&\"ValidationError\"===t.name}constructor(t,e,n,r,i){const o=new Bt(t,e,n,r);if(i)return o;super(),this.value=void 0,this.path=void 0,this.type=void 0,this.params=void 0,this.errors=[],this.inner=[],this[qt]=\"Error\",this.name=o.name,this.message=o.message,this.type=o.type,this.value=o.value,this.path=o.path,this.errors=o.errors,this.inner=o.inner,Error.captureStackTrace&&Error.captureStackTrace(this,Wt)}static[Mt](t){return Bt[Symbol.hasInstance](t)||super[Symbol.hasInstance](t)}}let Zt={default:\"${path} is invalid\",required:\"${path} is a required field\",defined:\"${path} must be defined\",notNull:\"${path} cannot be null\",oneOf:\"${path} must be one of the following values: ${values}\",notOneOf:\"${path} must not be one of the following values: ${values}\",notType:({path:t,type:e,value:n,originalValue:r})=>{const i=null!=r&&r!==n?` (cast from the value \\`${Vt(r,!0)}\\`).`:\".\";return\"mixed\"!==e?`${t} must be a \\`${e}\\` type, but the final value was: \\`${Vt(n,!0)}\\``+i:`${t} must match the configured type. The validated value was: \\`${Vt(n,!0)}\\``+i}},Yt={length:\"${path} must be exactly ${length} characters\",min:\"${path} must be at least ${min} characters\",max:\"${path} must be at most ${max} characters\",matches:'${path} must match the following: \"${regex}\"',email:\"${path} must be a valid email\",url:\"${path} must be a valid URL\",uuid:\"${path} must be a valid UUID\",datetime:\"${path} must be a valid ISO date-time\",datetime_precision:\"${path} must be a valid ISO date-time with a sub-second precision of exactly ${precision} digits\",datetime_offset:'${path} must be a valid ISO date-time with UTC \"Z\" timezone',trim:\"${path} must be a trimmed string\",lowercase:\"${path} must be a lowercase string\",uppercase:\"${path} must be a upper case string\"},Jt={min:\"${path} must be greater than or equal to ${min}\",max:\"${path} must be less than or equal to ${max}\",lessThan:\"${path} must be less than ${less}\",moreThan:\"${path} must be greater than ${more}\",positive:\"${path} must be a positive number\",negative:\"${path} must be a negative number\",integer:\"${path} must be an integer\"},Kt={min:\"${path} field must be later than ${min}\",max:\"${path} field must be at earlier than ${max}\"},Gt={isValue:\"${path} field must be ${value}\"},Xt={noUnknown:\"${path} field has unspecified keys: ${unknown}\",exact:\"${path} object contains unknown properties: ${properties}\"},Qt={min:\"${path} field must have at least ${min} items\",max:\"${path} field must have less than or equal to ${max} items\",length:\"${path} must have ${length} items\"},te={notType:t=>{const{path:e,value:n,spec:r}=t,i=r.types.length;if(Array.isArray(n)){if(n.length<i)return`${e} tuple value has too few items, expected a length of ${i} but got ${n.length} for value: \\`${Vt(n,!0)}\\``;if(n.length>i)return`${e} tuple value has too many items, expected a length of ${i} but got ${n.length} for value: \\`${Vt(n,!0)}\\``}return Wt.formatError(Zt.notType,t)}};Object.assign(Object.create(null),{mixed:Zt,string:Yt,number:Jt,date:Kt,object:Xt,array:Qt,boolean:Gt,tuple:te});const ee=t=>t&&t.__isYupSchema__;class ne{static fromOptions(t,e){if(!e.then&&!e.otherwise)throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");let{is:n,then:r,otherwise:i}=e,o=\"function\"==typeof n?n:(...t)=>t.every(t=>t===n);return new ne(t,(t,e)=>{var n;let u=o(...t)?r:i;return null!=(n=null==u?void 0:u(e))?n:e})}constructor(t,e){this.fn=void 0,this.refs=t,this.refs=t,this.fn=e}resolve(t,e){let n=this.refs.map(t=>t.getValue(null==e?void 0:e.value,null==e?void 0:e.parent,null==e?void 0:e.context)),r=this.fn(n,t,e);if(void 0===r||r===t)return t;if(!ee(r))throw new TypeError(\"conditions must return a schema object\");return r.resolve(e)}}class re{constructor(t,e={}){if(this.key=void 0,this.isContext=void 0,this.isValue=void 0,this.isSibling=void 0,this.path=void 0,this.getter=void 0,this.map=void 0,\"string\"!=typeof t)throw new TypeError(\"ref must be a string, got: \"+t);if(this.key=t.trim(),\"\"===t)throw new TypeError(\"ref must be a non-empty string\");this.isContext=\"$\"===this.key[0],this.isValue=\".\"===this.key[0],this.isSibling=!this.isContext&&!this.isValue;let n=this.isContext?\"$\":this.isValue?\".\":\"\";this.path=this.key.slice(n.length),this.getter=this.path&&(0,At.getter)(this.path,!0),this.map=e.map}getValue(t,e,n){let r=this.isContext?n:this.isValue?t:e;return this.getter&&(r=this.getter(r||{})),this.map&&(r=this.map(r)),r}cast(t,e){return this.getValue(t,null==e?void 0:e.parent,null==e?void 0:e.context)}resolve(){return this}describe(){return{type:\"ref\",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(t){return t&&t.__isYupRef}}re.prototype.__isYupRef=!0;const ie=t=>null==t;function oe(t){function e({value:e,path:n=\"\",options:r,originalValue:i,schema:o},u,s){const{name:a,test:c,params:l,message:f,skipAbsent:p}=t;let{parent:h,context:d,abortEarly:y=o.spec.abortEarly,disableStackTrace:_=o.spec.disableStackTrace}=r;const v={value:e,parent:h,context:d};function g(t={}){const r=ue(Object.assign({value:e,originalValue:i,label:o.spec.label,path:t.path||n,spec:o.spec,disableStackTrace:t.disableStackTrace||_},l,t.params),v),u=new Wt(Wt.formatError(t.message||f,r),e,r.path,t.type||a,r.disableStackTrace);return u.params=r,u}const m=y?u:s;let b={path:n,parent:h,type:a,from:r.from,createError:g,resolve:t=>se(t,v),options:r,originalValue:i,schema:o};const w=t=>{Wt.isError(t)?m(t):t?s(null):m(g())},x=t=>{Wt.isError(t)?m(t):u(t)};if(p&&ie(e))return w(!0);let E;try{var O;if(E=c.call(b,e,b),\"function\"==typeof(null==(O=E)?void 0:O.then)){if(r.sync)throw new Error(`Validation test of type: \"${b.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`);return Promise.resolve(E).then(w,x)}}catch(t){return void x(t)}w(E)}return e.OPTIONS=t,e}function ue(t,e){if(!t)return t;for(const n of Object.keys(t))t[n]=se(t[n],e);return t}function se(t,e){return re.isRef(t)?t.getValue(e.value,e.parent,e.context):t}function ae(t,e,n,r=n){let i,o,u;return e?((0,At.forEach)(e,(s,a,c)=>{let l=a?s.slice(1,s.length-1):s,f=\"tuple\"===(t=t.resolve({context:r,parent:i,value:n})).type,p=c?parseInt(l,10):0;if(t.innerType||f){if(f&&!c)throw new Error(`Yup.reach cannot implicitly index into a tuple type. the path part \"${u}\" must contain an index to the tuple element, e.g. \"${u}[0]\"`);if(n&&p>=n.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${s}, in the path: ${e}. because there is no value at that index. `);i=n,n=n&&n[p],t=f?t.spec.types[p]:t.innerType}if(!c){if(!t.fields||!t.fields[l])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${u} which is a type: \"${t.type}\")`);i=n,n=n&&n[l],t=t.fields[l]}o=l,u=a?\"[\"+s+\"]\":\".\"+s}),{schema:t,parent:i,parentPath:o}):{parent:i,parentPath:e,schema:t}}class ce extends Set{describe(){const t=[];for(const e of this.values())t.push(re.isRef(e)?e.describe():e);return t}resolveAll(t){let e=[];for(const n of this.values())e.push(t(n));return e}clone(){return new ce(this.values())}merge(t,e){const n=this.clone();return t.forEach(t=>n.add(t)),e.forEach(t=>n.delete(t)),n}}function le(t,e=new Map){if(ee(t)||!t||\"object\"!=typeof t)return t;if(e.has(t))return e.get(t);let n;if(t instanceof Date)n=new Date(t.getTime()),e.set(t,n);else if(t instanceof RegExp)n=new RegExp(t),e.set(t,n);else if(Array.isArray(t)){n=new Array(t.length),e.set(t,n);for(let r=0;r<t.length;r++)n[r]=le(t[r],e)}else if(t instanceof Map){n=new Map,e.set(t,n);for(const[r,i]of t.entries())n.set(r,le(i,e))}else if(t instanceof Set){n=new Set,e.set(t,n);for(const r of t)n.add(le(r,e))}else{if(!(t instanceof Object))throw Error(`Unable to clone ${t}`);n={},e.set(t,n);for(const[r,i]of Object.entries(t))n[r]=le(i,e)}return n}function fe(t){if(null==t||!t.length)return;const e=[];let n=\"\",r=!1,i=!1;for(let o=0;o<t.length;o++){const u=t[o];\"[\"!==u||i?\"]\"!==u||i?'\"'!==u?\".\"!==u||r||i?n+=u:n&&(e.push(n),n=\"\"):i=!i:(n&&(/^\\d+$/.test(n)?e.push(n):e.push(n.replace(/^\"|\"$/g,\"\")),n=\"\"),r=!1):(n&&(e.push(...n.split(\".\").filter(Boolean)),n=\"\"),r=!0)}return n&&e.push(...n.split(\".\").filter(Boolean)),e}function pe(t,e){var n;if((null==(n=t.inner)||!n.length)&&t.errors.length)return function(t,e){const n=e?`${e}.${t.path}`:t.path;return t.errors.map(t=>({message:t,path:fe(n)}))}(t,e);const r=e?`${e}.${t.path}`:t.path;return t.inner.flatMap(t=>pe(t,r))}class he{constructor(t){this.type=void 0,this.deps=[],this.tests=void 0,this.transforms=void 0,this.conditions=[],this._mutate=void 0,this.internalTests={},this._whitelist=new ce,this._blacklist=new ce,this.exclusiveTests=Object.create(null),this._typeCheck=void 0,this.spec=void 0,this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(Zt.notType)}),this.type=t.type,this._typeCheck=t.check,this.spec=Object.assign({strip:!1,strict:!1,abortEarly:!0,recursive:!0,disableStackTrace:!1,nullable:!1,optional:!0,coerce:!0},null==t?void 0:t.spec),this.withMutation(t=>{t.nonNullable()})}get _type(){return this.type}clone(t){if(this._mutate)return t&&Object.assign(this.spec,t),this;const e=Object.create(Object.getPrototypeOf(this));return e.type=this.type,e._typeCheck=this._typeCheck,e._whitelist=this._whitelist.clone(),e._blacklist=this._blacklist.clone(),e.internalTests=Object.assign({},this.internalTests),e.exclusiveTests=Object.assign({},this.exclusiveTests),e.deps=[...this.deps],e.conditions=[...this.conditions],e.tests=[...this.tests],e.transforms=[...this.transforms],e.spec=le(Object.assign({},this.spec,t)),e}label(t){let e=this.clone();return e.spec.label=t,e}meta(...t){if(0===t.length)return this.spec.meta;let e=this.clone();return e.spec.meta=Object.assign(e.spec.meta||{},t[0]),e}withMutation(t){let e=this._mutate;this._mutate=!0;let n=t(this);return this._mutate=e,n}concat(t){if(!t||t===this)return this;if(t.type!==this.type&&\"mixed\"!==this.type)throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${t.type}`);let e=this,n=t.clone();const r=Object.assign({},e.spec,n.spec);return n.spec=r,n.internalTests=Object.assign({},e.internalTests,n.internalTests),n._whitelist=e._whitelist.merge(t._whitelist,t._blacklist),n._blacklist=e._blacklist.merge(t._blacklist,t._whitelist),n.tests=e.tests,n.exclusiveTests=e.exclusiveTests,n.withMutation(e=>{t.tests.forEach(t=>{e.test(t.OPTIONS)})}),n.transforms=[...e.transforms,...n.transforms],n}isType(t){return null==t?!(!this.spec.nullable||null!==t)||!(!this.spec.optional||void 0!==t):this._typeCheck(t)}resolve(t){let e=this;if(e.conditions.length){let n=e.conditions;e=e.clone(),e.conditions=[],e=n.reduce((e,n)=>n.resolve(e,t),e),e=e.resolve(t)}return e}resolveOptions(t){var e,n,r,i;return Object.assign({},t,{from:t.from||[],strict:null!=(e=t.strict)?e:this.spec.strict,abortEarly:null!=(n=t.abortEarly)?n:this.spec.abortEarly,recursive:null!=(r=t.recursive)?r:this.spec.recursive,disableStackTrace:null!=(i=t.disableStackTrace)?i:this.spec.disableStackTrace})}cast(t,e={}){let n=this.resolve(Object.assign({},e,{value:t})),r=\"ignore-optionality\"===e.assert,i=n._cast(t,e);if(!1!==e.assert&&!n.isType(i)){if(r&&ie(i))return i;let o=Vt(t),u=Vt(i);throw new TypeError(`The value of ${e.path||\"field\"} could not be cast to a value that satisfies the schema type: \"${n.type}\". \\n\\nattempted value: ${o} \\n`+(u!==o?`result of cast: ${u}`:\"\"))}return i}_cast(t,e){let n=void 0===t?t:this.transforms.reduce((n,r)=>r.call(this,n,t,this,e),t);return void 0===n&&(n=this.getDefault(e)),n}_validate(t,e={},n,r){let{path:i,originalValue:o=t,strict:u=this.spec.strict}=e,s=t;u||(s=this._cast(s,Object.assign({assert:!1},e)));let a=[];for(let t of Object.values(this.internalTests))t&&a.push(t);this.runTests({path:i,value:s,originalValue:o,options:e,tests:a},n,t=>{if(t.length)return r(t,s);this.runTests({path:i,value:s,originalValue:o,options:e,tests:this.tests},n,r)})}runTests(t,e,n){let r=!1,{tests:i,value:o,originalValue:u,path:s,options:a}=t,c=t=>{r||(r=!0,e(t,o))},l=t=>{r||(r=!0,n(t,o))},f=i.length,p=[];if(!f)return l([]);let h={value:o,originalValue:u,path:s,options:a,schema:this};for(let t=0;t<i.length;t++)(0,i[t])(h,c,function(t){t&&(Array.isArray(t)?p.push(...t):p.push(t)),--f<=0&&l(p)})}asNestedTest({key:t,index:e,parent:n,parentPath:r,originalParent:i,options:o}){const u=null!=t?t:e;if(null==u)throw TypeError(\"Must include `key` or `index` for nested validations\");const s=\"number\"==typeof u;let a=n[u];const c=Object.assign({},o,{strict:!0,parent:n,value:a,originalValue:i[u],key:void 0,[s?\"index\":\"key\"]:u,path:s||u.includes(\".\")?`${r||\"\"}[${s?u:`\"${u}\"`}]`:(r?`${r}.`:\"\")+t});return(t,e,n)=>this.resolve(c)._validate(a,c,e,n)}validate(t,e){var n;let r=this.resolve(Object.assign({},e,{value:t})),i=null!=(n=null==e?void 0:e.disableStackTrace)?n:r.spec.disableStackTrace;return new Promise((n,o)=>r._validate(t,e,(t,e)=>{Wt.isError(t)&&(t.value=e),o(t)},(t,e)=>{t.length?o(new Wt(t,e,void 0,void 0,i)):n(e)}))}validateSync(t,e){var n;let r,i=this.resolve(Object.assign({},e,{value:t})),o=null!=(n=null==e?void 0:e.disableStackTrace)?n:i.spec.disableStackTrace;return i._validate(t,Object.assign({},e,{sync:!0}),(t,e)=>{throw Wt.isError(t)&&(t.value=e),t},(e,n)=>{if(e.length)throw new Wt(e,t,void 0,void 0,o);r=n}),r}isValid(t,e){return this.validate(t,e).then(()=>!0,t=>{if(Wt.isError(t))return!1;throw t})}isValidSync(t,e){try{return this.validateSync(t,e),!0}catch(t){if(Wt.isError(t))return!1;throw t}}_getDefault(t){let e=this.spec.default;return null==e?e:\"function\"==typeof e?e.call(this,t):le(e)}getDefault(t){return this.resolve(t||{})._getDefault(t)}default(t){return 0===arguments.length?this._getDefault():this.clone({default:t})}strict(t=!0){return this.clone({strict:t})}nullability(t,e){const n=this.clone({nullable:t});return n.internalTests.nullable=oe({message:e,name:\"nullable\",test(t){return null!==t||this.schema.spec.nullable}}),n}optionality(t,e){const n=this.clone({optional:t});return n.internalTests.optionality=oe({message:e,name:\"optionality\",test(t){return void 0!==t||this.schema.spec.optional}}),n}optional(){return this.optionality(!0)}defined(t=Zt.defined){return this.optionality(!1,t)}nullable(){return this.nullability(!0)}nonNullable(t=Zt.notNull){return this.nullability(!1,t)}required(t=Zt.required){return this.clone().withMutation(e=>e.nonNullable(t).defined(t))}notRequired(){return this.clone().withMutation(t=>t.nullable().optional())}transform(t){let e=this.clone();return e.transforms.push(t),e}test(...t){let e;if(e=1===t.length?\"function\"==typeof t[0]?{test:t[0]}:t[0]:2===t.length?{name:t[0],test:t[1]}:{name:t[0],message:t[1],test:t[2]},void 0===e.message&&(e.message=Zt.default),\"function\"!=typeof e.test)throw new TypeError(\"`test` is a required parameters\");let n=this.clone(),r=oe(e),i=e.exclusive||e.name&&!0===n.exclusiveTests[e.name];if(e.exclusive&&!e.name)throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");return e.name&&(n.exclusiveTests[e.name]=!!e.exclusive),n.tests=n.tests.filter(t=>{if(t.OPTIONS.name===e.name){if(i)return!1;if(t.OPTIONS.test===r.OPTIONS.test)return!1}return!0}),n.tests.push(r),n}when(t,e){Array.isArray(t)||\"string\"==typeof t||(e=t,t=\".\");let n=this.clone(),r=zt(t).map(t=>new re(t));return r.forEach(t=>{t.isSibling&&n.deps.push(t.key)}),n.conditions.push(\"function\"==typeof e?new ne(r,e):ne.fromOptions(r,e)),n}typeError(t){let e=this.clone();return e.internalTests.typeError=oe({message:t,name:\"typeError\",skipAbsent:!0,test(t){return!!this.schema._typeCheck(t)||this.createError({params:{type:this.schema.type}})}}),e}oneOf(t,e=Zt.oneOf){let n=this.clone();return t.forEach(t=>{n._whitelist.add(t),n._blacklist.delete(t)}),n.internalTests.whiteList=oe({message:e,name:\"oneOf\",skipAbsent:!0,test(t){let e=this.schema._whitelist,n=e.resolveAll(this.resolve);return!!n.includes(t)||this.createError({params:{values:Array.from(e).join(\", \"),resolved:n}})}}),n}notOneOf(t,e=Zt.notOneOf){let n=this.clone();return t.forEach(t=>{n._blacklist.add(t),n._whitelist.delete(t)}),n.internalTests.blacklist=oe({message:e,name:\"notOneOf\",test(t){let e=this.schema._blacklist,n=e.resolveAll(this.resolve);return!n.includes(t)||this.createError({params:{values:Array.from(e).join(\", \"),resolved:n}})}}),n}strip(t=!0){let e=this.clone();return e.spec.strip=t,e}describe(t){const e=(t?this.resolve(t):this).clone(),{label:n,meta:r,optional:i,nullable:o}=e.spec;return{meta:r,label:n,optional:i,nullable:o,default:e.getDefault(t),type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.filter((t,e,n)=>n.findIndex(e=>e.OPTIONS.name===t.OPTIONS.name)===e).map(e=>{const n=e.OPTIONS.params&&t?ue(Object.assign({},e.OPTIONS.params),t):e.OPTIONS.params;return{name:e.OPTIONS.name,params:n}})}}get\"~standard\"(){const t=this;return{version:1,vendor:\"yup\",async validate(e){try{return{value:await t.validate(e,{abortEarly:!1})}}catch(t){if(t instanceof Wt)return{issues:pe(t)};throw t}}}}}he.prototype.__isYupSchema__=!0;for(const t of[\"validate\",\"validateSync\"])he.prototype[`${t}At`]=function(e,n,r={}){const{parent:i,parentPath:o,schema:u}=ae(this,e,n,r.context);return u[t](i&&i[o],Object.assign({},r,{parent:i,path:e}))};for(const t of[\"equals\",\"is\"])he.prototype[t]=he.prototype.oneOf;for(const t of[\"not\",\"nope\"])he.prototype[t]=he.prototype.notOneOf;const de=/^(\\d{4}|[+-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,.](\\d{1,}))?)?(?:(Z)|([+-])(\\d{2})(?::?(\\d{2}))?)?)?$/;function ye(t){var e,n;const r=de.exec(t);return r?{year:_e(r[1]),month:_e(r[2],1)-1,day:_e(r[3],1),hour:_e(r[4]),minute:_e(r[5]),second:_e(r[6]),millisecond:r[7]?_e(r[7].substring(0,3)):0,precision:null!=(e=null==(n=r[7])?void 0:n.length)?e:void 0,z:r[8]||void 0,plusMinus:r[9]||void 0,hourOffset:_e(r[10]),minuteOffset:_e(r[11])}:null}function _e(t,e=0){return Number(t)||e}let ve=/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,ge=/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,me=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,be=new RegExp(\"^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$\"),we=t=>ie(t)||t===t.trim(),xe={}.toString();function Ee(){return new Oe}class Oe extends he{constructor(){super({type:\"string\",check:t=>(t instanceof String&&(t=t.valueOf()),\"string\"==typeof t)}),this.withMutation(()=>{this.transform((t,e)=>{if(!this.spec.coerce||this.isType(t))return t;if(Array.isArray(t))return t;const n=null!=t&&t.toString?t.toString():t;return n===xe?t:n})})}required(t){return super.required(t).withMutation(e=>e.test({message:t||Zt.required,name:\"required\",skipAbsent:!0,test:t=>!!t.length}))}notRequired(){return super.notRequired().withMutation(t=>(t.tests=t.tests.filter(t=>\"required\"!==t.OPTIONS.name),t))}length(t,e=Yt.length){return this.test({message:e,name:\"length\",exclusive:!0,params:{length:t},skipAbsent:!0,test(e){return e.length===this.resolve(t)}})}min(t,e=Yt.min){return this.test({message:e,name:\"min\",exclusive:!0,params:{min:t},skipAbsent:!0,test(e){return e.length>=this.resolve(t)}})}max(t,e=Yt.max){return this.test({name:\"max\",exclusive:!0,message:e,params:{max:t},skipAbsent:!0,test(e){return e.length<=this.resolve(t)}})}matches(t,e){let n,r,i=!1;return e&&(\"object\"==typeof e?({excludeEmptyString:i=!1,message:n,name:r}=e):n=e),this.test({name:r||\"matches\",message:n||Yt.matches,params:{regex:t},skipAbsent:!0,test:e=>\"\"===e&&i||-1!==e.search(t)})}email(t=Yt.email){return this.matches(ve,{name:\"email\",message:t,excludeEmptyString:!0})}url(t=Yt.url){return this.matches(ge,{name:\"url\",message:t,excludeEmptyString:!0})}uuid(t=Yt.uuid){return this.matches(me,{name:\"uuid\",message:t,excludeEmptyString:!1})}datetime(t){let e,n,r=\"\";return t&&(\"object\"==typeof t?({message:r=\"\",allowOffset:e=!1,precision:n}=t):r=t),this.matches(be,{name:\"datetime\",message:r||Yt.datetime,excludeEmptyString:!0}).test({name:\"datetime_offset\",message:r||Yt.datetime_offset,params:{allowOffset:e},skipAbsent:!0,test:t=>{if(!t||e)return!0;const n=ye(t);return!!n&&!!n.z}}).test({name:\"datetime_precision\",message:r||Yt.datetime_precision,params:{precision:n},skipAbsent:!0,test:t=>{if(!t||null==n)return!0;const e=ye(t);return!!e&&e.precision===n}})}ensure(){return this.default(\"\").transform(t=>null===t?\"\":t)}trim(t=Yt.trim){return this.transform(t=>null!=t?t.trim():t).test({message:t,name:\"trim\",test:we})}lowercase(t=Yt.lowercase){return this.transform(t=>ie(t)?t:t.toLowerCase()).test({message:t,name:\"string_case\",exclusive:!0,skipAbsent:!0,test:t=>ie(t)||t===t.toLowerCase()})}uppercase(t=Yt.uppercase){return this.transform(t=>ie(t)?t:t.toUpperCase()).test({message:t,name:\"string_case\",exclusive:!0,skipAbsent:!0,test:t=>ie(t)||t===t.toUpperCase()})}}Ee.prototype=Oe.prototype;let Se=new Date(\"\");function je(){return new Te}class Te extends he{constructor(){super({type:\"date\",check(t){return e=t,\"[object Date]\"===Object.prototype.toString.call(e)&&!isNaN(t.getTime());var e}}),this.withMutation(()=>{this.transform((t,e)=>!this.spec.coerce||this.isType(t)||null===t?t:(t=function(t){const e=ye(t);if(!e)return Date.parse?Date.parse(t):Number.NaN;if(void 0===e.z&&void 0===e.plusMinus)return new Date(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond).valueOf();let n=0;return\"Z\"!==e.z&&void 0!==e.plusMinus&&(n=60*e.hourOffset+e.minuteOffset,\"+\"===e.plusMinus&&(n=0-n)),Date.UTC(e.year,e.month,e.day,e.hour,e.minute+n,e.second,e.millisecond)}(t),isNaN(t)?Te.INVALID_DATE:new Date(t)))})}prepareParam(t,e){let n;if(re.isRef(t))n=t;else{let r=this.cast(t);if(!this._typeCheck(r))throw new TypeError(`\\`${e}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);n=r}return n}min(t,e=Kt.min){let n=this.prepareParam(t,\"min\");return this.test({message:e,name:\"min\",exclusive:!0,params:{min:t},skipAbsent:!0,test(t){return t>=this.resolve(n)}})}max(t,e=Kt.max){let n=this.prepareParam(t,\"max\");return this.test({message:e,name:\"max\",exclusive:!0,params:{max:t},skipAbsent:!0,test(t){return t<=this.resolve(n)}})}}function Ce(t,e){let n=1/0;return t.some((t,r)=>{var i;if(null!=(i=e.path)&&i.includes(t))return n=r,!0}),n}function Ae(t){return(e,n)=>Ce(t,e)-Ce(t,n)}Te.INVALID_DATE=Se,je.prototype=Te.prototype,je.INVALID_DATE=Se;const Fe=(t,e,n)=>{if(\"string\"!=typeof t)return t;let r=t;try{r=JSON.parse(t)}catch(t){}return n.isType(r)?r:t};function ke(t){if(\"fields\"in t){const e={};for(const[n,r]of Object.entries(t.fields))e[n]=ke(r);return t.setFields(e)}if(\"array\"===t.type){const e=t.optional();return e.innerType&&(e.innerType=ke(e.innerType)),e}return\"tuple\"===t.type?t.optional().clone({types:t.spec.types.map(ke)}):\"optional\"in t?t.optional():t}let Ie=t=>\"[object Object]\"===Object.prototype.toString.call(t);function De(t,e){let n=Object.keys(t.fields);return Object.keys(e).filter(t=>-1===n.indexOf(t))}const Re=Ae([]);function $e(t){return new Pe(t)}class Pe extends he{constructor(t){super({type:\"object\",check:t=>Ie(t)||\"function\"==typeof t}),this.fields=Object.create(null),this._sortErrors=Re,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{t&&this.shape(t)})}_cast(t,e={}){var n;let r=super._cast(t,e);if(void 0===r)return this.getDefault(e);if(!this._typeCheck(r))return r;let i=this.fields,o=null!=(n=e.stripUnknown)?n:this.spec.noUnknown,u=[].concat(this._nodes,Object.keys(r).filter(t=>!this._nodes.includes(t))),s={},a=Object.assign({},e,{parent:s,__validating:e.__validating||!1}),c=!1;for(const t of u){let n=i[t],u=t in r,l=r[t];if(n){let i;a.path=(e.path?`${e.path}.`:\"\")+t,n=n.resolve({value:l,context:e.context,parent:s});let o=n instanceof he?n.spec:void 0,u=null==o?void 0:o.strict;if(null!=o&&o.strip){c=c||t in r;continue}i=e.__validating&&u?l:n.cast(l,a),void 0!==i&&(s[t]=i)}else u&&!o&&(s[t]=l);u===t in s&&s[t]===l||(c=!0)}return c?s:r}_validate(t,e={},n,r){let{from:i=[],originalValue:o=t,recursive:u=this.spec.recursive}=e;e.from=[{schema:this,value:o},...i],e.__validating=!0,e.originalValue=o,super._validate(t,e,n,(t,i)=>{if(!u||!Ie(i))return void r(t,i);o=o||i;let s=[];for(let t of this._nodes){let n=this.fields[t];n&&!re.isRef(n)&&s.push(n.asNestedTest({options:e,key:t,parent:i,parentPath:e.path,originalParent:o}))}this.runTests({tests:s,value:i,originalValue:o,options:e},n,e=>{r(e.sort(this._sortErrors).concat(t),i)})})}clone(t){const e=super.clone(t);return e.fields=Object.assign({},this.fields),e._nodes=this._nodes,e._excludedEdges=this._excludedEdges,e._sortErrors=this._sortErrors,e}concat(t){let e=super.concat(t),n=e.fields;for(let[t,e]of Object.entries(this.fields)){const r=n[t];n[t]=void 0===r?e:r}return e.withMutation(e=>e.setFields(n,[...this._excludedEdges,...t._excludedEdges]))}_getDefault(t){if(\"default\"in this.spec)return super._getDefault(t);if(!this._nodes.length)return;let e={};return this._nodes.forEach(n=>{var r;const i=this.fields[n];let o=t;null!=(r=o)&&r.value&&(o=Object.assign({},o,{parent:o.value,value:o.value[n]})),e[n]=i&&\"getDefault\"in i?i.getDefault(o):void 0}),e}setFields(t,e){let n=this.clone();return n.fields=t,n._nodes=function(t,e=[]){let n=[],r=new Set,i=new Set(e.map(([t,e])=>`${t}-${e}`));function o(t,e){let o=(0,At.split)(t)[0];r.add(o),i.has(`${e}-${o}`)||n.push([e,o])}for(const e of Object.keys(t)){let n=t[e];r.add(e),re.isRef(n)&&n.isSibling?o(n.path,e):ee(n)&&\"deps\"in n&&n.deps.forEach(t=>o(t,e))}return It().array(Array.from(r),n).reverse()}(t,e),n._sortErrors=Ae(Object.keys(t)),e&&(n._excludedEdges=e),n}shape(t,e=[]){return this.clone().withMutation(n=>{let r=n._excludedEdges;return e.length&&(Array.isArray(e[0])||(e=[e]),r=[...n._excludedEdges,...e]),n.setFields(Object.assign(n.fields,t),r)})}partial(){const t={};for(const[e,n]of Object.entries(this.fields))t[e]=\"optional\"in n&&n.optional instanceof Function?n.optional():n;return this.setFields(t)}deepPartial(){return ke(this)}pick(t){const e={};for(const n of t)this.fields[n]&&(e[n]=this.fields[n]);return this.setFields(e,this._excludedEdges.filter(([e,n])=>t.includes(e)&&t.includes(n)))}omit(t){const e=[];for(const n of Object.keys(this.fields))t.includes(n)||e.push(n);return this.pick(e)}from(t,e,n){let r=(0,At.getter)(t,!0);return this.transform(i=>{if(!i)return i;let o=i;return((t,e)=>{const n=[...(0,At.normalizePath)(e)];if(1===n.length)return n[0]in t;let r=n.pop(),i=(0,At.getter)((0,At.join)(n),!0)(t);return!(!i||!(r in i))})(i,t)&&(o=Object.assign({},i),n||delete o[t],o[e]=r(i)),o})}json(){return this.transform(Fe)}exact(t){return this.test({name:\"exact\",exclusive:!0,message:t||Xt.exact,test(t){if(null==t)return!0;const e=De(this.schema,t);return 0===e.length||this.createError({params:{properties:e.join(\", \")}})}})}stripUnknown(){return this.clone({noUnknown:!0})}noUnknown(t=!0,e=Xt.noUnknown){\"boolean\"!=typeof t&&(e=t,t=!0);let n=this.test({name:\"noUnknown\",exclusive:!0,message:e,test(e){if(null==e)return!0;const n=De(this.schema,e);return!t||0===n.length||this.createError({params:{unknown:n.join(\", \")}})}});return n.spec.noUnknown=t,n}unknown(t=!0,e=Xt.noUnknown){return this.noUnknown(!t,e)}transformKeys(t){return this.transform(e=>{if(!e)return e;const n={};for(const r of Object.keys(e))n[t(r)]=e[r];return n})}camelCase(){return this.transformKeys(Ft.camelCase)}snakeCase(){return this.transformKeys(Ft.snakeCase)}constantCase(){return this.transformKeys(t=>(0,Ft.snakeCase)(t).toUpperCase())}describe(t){const e=(t?this.resolve(t):this).clone(),n=super.describe(t);n.fields={};for(const[i,o]of Object.entries(e.fields)){var r;let e=t;null!=(r=e)&&r.value&&(e=Object.assign({},e,{parent:e.value,value:e.value[i]})),n.fields[i]=o.describe(e)}return n}}$e.prototype=Pe.prototype;class Ne{constructor(){this._completeSchema={cardCode:this._getCardCodeSchema(),cardExpiry:this._getCardExpirySchema(),cardName:this._getCardNameSchema(),cardNumber:this._getCardNumberSchema(),note:this._getNoteSchema()},this._configureCardValidator()}validate(t){return e=this,n=void 0,i=function*(){const e={},n={errors:{},isValid:!0};let r;for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=this._completeSchema[r],n.errors[r]=[]);try{return yield $e(e).validate(t,{abortEarly:!1}),n}catch(t){if(this._isValidationErrorType(t))throw t;return{errors:Object.keys(n.errors).reduce((e,n)=>Object.assign(Object.assign({},e),{[n]:t.inner.filter(t=>t.path===n).map(t=>({fieldType:t.path,message:t.errors.join(\" \"),type:t.type}))}),{}),isValid:!1}}},new((r=void 0)||(r=Promise))(function(t,o){function u(t){try{a(i.next(t))}catch(t){o(t)}}function s(t){try{a(i.throw(t))}catch(t){o(t)}}function a(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(t){t(n)})).then(u,s)}a((i=i.apply(e,n||[])).next())});var e,n,r,i}_configureCardValidator(){const t=vt.creditCardType.getTypeInfo(\"discover\"),e=vt.creditCardType.getTypeInfo(\"visa\");vt.creditCardType.updateCard(\"visa\",{lengths:[13,...e.lengths||[]]}),vt.creditCardType.updateCard(\"discover\",{patterns:[...t.patterns||[],[810,817]]}),vt.creditCardType.addCard({niceType:\"Mada\",type:\"mada\",patterns:[400861,401757,407197,407395,409201,410685,412565,417633,419593,422817,422818,422819,428331,428671,428672,428673,431361,432328,434107,439954,440533,440647,440795,445564,446393,446404,446672,455036,455708,457865,458456,462220,468540,468541,468542,468543,483010,483011,483012,484783,486094,486095,486096,489317,489318,489319,493428,504300,506968,508160,513213,520058,521076,524130,524514,529415,529741,530060,530906,531095,531196,532013,535825,535989,536023,537767,539931,543085,543357,549760,554180,557606,558848,585265,588845,588846,588847,588848,588849,588850,588851,588982,588983,589005,589206,604906,605141,636120,968201,968202,968203,968204,968205,968206,968207,968208,968209,968210,968211],gaps:[4,8,12],lengths:[16,18,19],code:{name:\"CVV\",size:3}})}_getCardCodeSchema(){return Ee().required(\"CVV is required\").test({message:\"CVV must be valid\",name:\"invalid_card_code\",test(t){const{card:e}=(0,vt.number)(this.parent.cardNumber||\"\");return(0,vt.cvv)(t,e&&e.code?e.code.size:void 0).isValid}})}_getCardExpirySchema(){return Ee().required(\"Expiration date is required\").test({message:\"Expiration date must be a valid future date in MM / YY format\",name:\"invalid_card_expiry\",test:t=>(0,vt.expirationDate)(t).isValid})}_getCardNameSchema(){return Ee().max(200).required(\"Full name is required\").test({message:\"Credit card name must be valid\",name:\"invalid_card_name\",test:t=>{const e=t.replace(/\\s/g,\"\").match(/[0-9]+/g);if(!(null==e?void 0:e.length))return!0;for(const t of e)if((0,vt.number)(t).isValid)return!1;return!0}})}_getNoteSchema(){return Ee().required(\"Manual payment description is required\").max(128,\"Payment description cannot exceed 128 letters\")}_getCardNumberSchema(){return Ee().required(\"Credit card number is required\").test({message:\"Credit card number must be valid\",name:\"invalid_card_number\",test:t=>(0,vt.number)(t).isValid})}_isValidationErrorType(t){return\"name\"in t&&\"ValidationError\"!==t.name}}class Ue{constructor(t,e){this._parentOrigin=t,this._paymentOrigin=e}create(t,e,n={},r=[],i=\"\",o=function(t){switch(t){case it.CardCode:return\"CVC\";case it.CardExpiry:return\"Expiration\";case it.CardName:return\"Name on card\";case it.CardNumber:return\"Credit card number\";case it.Note:return\"Payment note\";case it.Hidden:return\"Hidden field\"}}(e)){const u=bt(e);return e===it.CardNumber?this._createNumberInput(e,t,n,r,i,o,u):e===it.CardExpiry?this._createExpiryInput(t,n,r,i,o,u):this._createInput(e,t,n,r,i,o,u)}normalizeParentOrigin(t){this._parentOrigin!==t&&(this._parentOrigin!==o(i(t)).origin&&t!==o(i(this._parentOrigin)).origin||(this._parentOrigin=t))}getParentOrigin(){return this._parentOrigin}_createExpiryInput(t,e,n,r,i=\"\",o=\"\"){return new Et(t,r,i,o,e,n,new a(this._parentOrigin),new rt(this._parentOrigin,window.parent),new St(window.parent),new Ne,this._createManualOrderPaymentHandler(),this._createStoredCardHandler(),new dt)}_createNumberInput(t,e,n,r,i,o=\"\",u=\"\"){return new Ot(t,e,i,o,u,n,r,new a(this._parentOrigin),new rt(this._parentOrigin,window.parent),new St(window.parent),new Ne,this._createManualOrderPaymentHandler(),this._createStoredCardHandler(),new wt(e,[it.CardCode,it.CardExpiry,it.CardName],new St(window.parent)),new mt)}_createInput(t,e,n,r,i,o=\"\",u=\"\"){return new xt(t,e,i,o,u,n,r,new a(this._parentOrigin),new rt(this._parentOrigin,window.parent),new St(window.parent),new Ne,this._createManualOrderPaymentHandler(),this._createStoredCardHandler())}_createManualOrderPaymentHandler(){return new Tt(new St(window.parent),new Ne,f(),new rt(this._parentOrigin,window.parent),new pt(O(),this._paymentOrigin))}_createStoredCardHandler(){return new Ct(new St(window.parent),new Ne,new rt(this._parentOrigin,window.parent),new ht(O()))}}class Ve extends t{constructor(t){super(t||\"Unable to proceed due to invalid configuration provided for the hosted payment form.\"),this.name=\"InvalidHostedFormConfigError\",this.type=\"invalid_hosted_form_config\"}}class ze{constructor(t,e,n){this._factory=t,this._storage=e,this._eventListener=n}initialize(t,e){e&&this._storage.setNonce(e);const n=this._createFormContainer(t);return this._resetPageStyles(t),this._eventListener.listen(),Z(this._eventListener,yt.AttachRequested).pipe(H(({payload:t})=>{const{accessibilityLabel:e,fontUrls:r,placeholder:i,styles:o,origin:u,type:s}=t;u&&this._factory.normalizeParentOrigin(u);const a=this._factory.create(n,s,o,r,i,e);return a.attach(),a}),Q(1)).toPromise()}_resetPageStyles(t){[document.querySelector(\"html\"),document.querySelector(\"body\"),document.getElementById(t)].forEach(t=>{t&&(t.style.height=\"100%\",t.style.width=\"100%\",t.style.overflow=\"hidden\",t.style.padding=\"0\",t.style.margin=\"0\")})}_createFormContainer(t){const e=document.getElementById(t);if(!e)throw new Ve(\"Unable to proceed because the provided container ID is not valid.\");const n=document.createElement(\"form\"),r=document.createElement(\"button\");return n.noValidate=!0,n.style.height=\"100%\",n.style.width=\"100%\",r.style.display=\"none\",e.appendChild(n),n.appendChild(r),n}}function Le(t){const{containerId:e,nonce:n,parentOrigin:r,paymentOrigin:i}=t;return new ze(new Ue(r,i),f(),new a(r)).initialize(e,n)}const Me=new rt(\"*\",window.parent);function qe(t){Me.post({type:_t.AttachFailed,payload:{error:t}})}})(),module.exports=r})();\n//# sourceMappingURL=hosted-form-v2-iframe-content.js.map"
  },
  {
    "path": "dist/cjs/hosted-form-v2-iframe-content.js.LICENSE.txt",
    "content": "/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n"
  },
  {
    "path": "dist/cjs/hosted-form-v2-iframe-host.js",
    "content": "/*! For license information please see hosted-form-v2-iframe-host.js.LICENSE.txt */\n(()=>{var t={9440(t,n,r){t=r.nmd(t),function(){var e,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,s=1/0,f=9007199254740991,l=NaN,h=4294967295,p=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",_=\"[object Array]\",v=\"[object Boolean]\",y=\"[object Date]\",g=\"[object Error]\",b=\"[object Function]\",m=\"[object GeneratorFunction]\",w=\"[object Map]\",E=\"[object Number]\",S=\"[object Object]\",x=\"[object Promise]\",O=\"[object RegExp]\",T=\"[object Set]\",A=\"[object String]\",j=\"[object Symbol]\",I=\"[object WeakMap]\",D=\"[object ArrayBuffer]\",P=\"[object DataView]\",L=\"[object Float32Array]\",C=\"[object Float64Array]\",F=\"[object Int8Array]\",U=\"[object Int16Array]\",R=\"[object Int32Array]\",k=\"[object Uint8Array]\",z=\"[object Uint8ClampedArray]\",N=\"[object Uint16Array]\",M=\"[object Uint32Array]\",B=/\\b__p \\+= '';/g,H=/\\b(__p \\+=) '' \\+/g,W=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,$=/&(?:amp|lt|gt|quot|#39);/g,q=/[&<>\"']/g,V=RegExp($.source),Z=RegExp(q.source),G=/<%-([\\s\\S]+?)%>/g,Y=/<%([\\s\\S]+?)%>/g,K=/<%=([\\s\\S]+?)%>/g,Q=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,J=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,nt=RegExp(tt.source),rt=/^\\s+/,et=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,ht=/^[-+]0x[0-9a-f]+$/i,pt=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,_t=/^0o[0-7]+$/i,vt=/^(?:0|[1-9]\\d*)$/,yt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,bt=/['\\n\\r\\u2028\\u2029\\\\]/g,mt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",Et=\"\\\\u2700-\\\\u27bf\",St=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",xt=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ot=\"\\\\ufe0e\\\\ufe0f\",Tt=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",At=\"[\"+mt+\"]\",jt=\"[\"+Tt+\"]\",It=\"[\"+wt+\"]\",Dt=\"\\\\d+\",Pt=\"[\"+Et+\"]\",Lt=\"[\"+St+\"]\",Ct=\"[^\"+mt+Tt+Dt+Et+St+xt+\"]\",Ft=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Ut=\"[^\"+mt+\"]\",Rt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",kt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",zt=\"[\"+xt+\"]\",Nt=\"\\\\u200d\",Mt=\"(?:\"+Lt+\"|\"+Ct+\")\",Bt=\"(?:\"+zt+\"|\"+Ct+\")\",Ht=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Wt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",$t=\"(?:\"+It+\"|\"+Ft+\")?\",qt=\"[\"+Ot+\"]?\",Vt=qt+$t+\"(?:\"+Nt+\"(?:\"+[Ut,Rt,kt].join(\"|\")+\")\"+qt+$t+\")*\",Zt=\"(?:\"+[Pt,Rt,kt].join(\"|\")+\")\"+Vt,Gt=\"(?:\"+[Ut+It+\"?\",It,Rt,kt,At].join(\"|\")+\")\",Yt=RegExp(\"['’]\",\"g\"),Kt=RegExp(It,\"g\"),Qt=RegExp(Ft+\"(?=\"+Ft+\")|\"+Gt+Vt,\"g\"),Jt=RegExp([zt+\"?\"+Lt+\"+\"+Ht+\"(?=\"+[jt,zt,\"$\"].join(\"|\")+\")\",Bt+\"+\"+Wt+\"(?=\"+[jt,zt+Mt,\"$\"].join(\"|\")+\")\",zt+\"?\"+Mt+\"+\"+Ht,zt+\"+\"+Wt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Dt,Zt].join(\"|\"),\"g\"),Xt=RegExp(\"[\"+Nt+mt+wt+Ot+\"]\"),tn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,nn=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],rn=-1,en={};en[L]=en[C]=en[F]=en[U]=en[R]=en[k]=en[z]=en[N]=en[M]=!0,en[d]=en[_]=en[D]=en[v]=en[P]=en[y]=en[g]=en[b]=en[w]=en[E]=en[S]=en[O]=en[T]=en[A]=en[I]=!1;var on={};on[d]=on[_]=on[D]=on[P]=on[v]=on[y]=on[L]=on[C]=on[F]=on[U]=on[R]=on[w]=on[E]=on[S]=on[O]=on[T]=on[A]=on[j]=on[k]=on[z]=on[N]=on[M]=!0,on[g]=on[b]=on[I]=!1;var un={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},an=parseFloat,cn=parseInt,sn=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,fn=\"object\"==typeof self&&self&&self.Object===Object&&self,ln=sn||fn||Function(\"return this\")(),hn=n&&!n.nodeType&&n,pn=hn&&t&&!t.nodeType&&t,dn=pn&&pn.exports===hn,_n=dn&&sn.process,vn=function(){try{return pn&&pn.require&&pn.require(\"util\").types||_n&&_n.binding&&_n.binding(\"util\")}catch(t){}}(),yn=vn&&vn.isArrayBuffer,gn=vn&&vn.isDate,bn=vn&&vn.isMap,mn=vn&&vn.isRegExp,wn=vn&&vn.isSet,En=vn&&vn.isTypedArray;function Sn(t,n,r){switch(r.length){case 0:return t.call(n);case 1:return t.call(n,r[0]);case 2:return t.call(n,r[0],r[1]);case 3:return t.call(n,r[0],r[1],r[2])}return t.apply(n,r)}function xn(t,n,r,e){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];n(e,u,r(u),t)}return e}function On(t,n){for(var r=-1,e=null==t?0:t.length;++r<e&&!1!==n(t[r],r,t););return t}function Tn(t,n){for(var r=null==t?0:t.length;r--&&!1!==n(t[r],r,t););return t}function An(t,n){for(var r=-1,e=null==t?0:t.length;++r<e;)if(!n(t[r],r,t))return!1;return!0}function jn(t,n){for(var r=-1,e=null==t?0:t.length,i=0,o=[];++r<e;){var u=t[r];n(u,r,t)&&(o[i++]=u)}return o}function In(t,n){return!(null==t||!t.length)&&Nn(t,n,0)>-1}function Dn(t,n,r){for(var e=-1,i=null==t?0:t.length;++e<i;)if(r(n,t[e]))return!0;return!1}function Pn(t,n){for(var r=-1,e=null==t?0:t.length,i=Array(e);++r<e;)i[r]=n(t[r],r,t);return i}function Ln(t,n){for(var r=-1,e=n.length,i=t.length;++r<e;)t[i+r]=n[r];return t}function Cn(t,n,r,e){var i=-1,o=null==t?0:t.length;for(e&&o&&(r=t[++i]);++i<o;)r=n(r,t[i],i,t);return r}function Fn(t,n,r,e){var i=null==t?0:t.length;for(e&&i&&(r=t[--i]);i--;)r=n(r,t[i],i,t);return r}function Un(t,n){for(var r=-1,e=null==t?0:t.length;++r<e;)if(n(t[r],r,t))return!0;return!1}var Rn=Wn(\"length\");function kn(t,n,r){var e;return r(t,function(t,r,i){if(n(t,r,i))return e=r,!1}),e}function zn(t,n,r,e){for(var i=t.length,o=r+(e?1:-1);e?o--:++o<i;)if(n(t[o],o,t))return o;return-1}function Nn(t,n,r){return n==n?function(t,n,r){for(var e=r-1,i=t.length;++e<i;)if(t[e]===n)return e;return-1}(t,n,r):zn(t,Bn,r)}function Mn(t,n,r,e){for(var i=r-1,o=t.length;++i<o;)if(e(t[i],n))return i;return-1}function Bn(t){return t!=t}function Hn(t,n){var r=null==t?0:t.length;return r?Vn(t,n)/r:l}function Wn(t){return function(n){return null==n?e:n[t]}}function $n(t){return function(n){return null==t?e:t[n]}}function qn(t,n,r,e,i){return i(t,function(t,i,o){r=e?(e=!1,t):n(r,t,i,o)}),r}function Vn(t,n){for(var r,i=-1,o=t.length;++i<o;){var u=n(t[i]);u!==e&&(r=r===e?u:r+u)}return r}function Zn(t,n){for(var r=-1,e=Array(t);++r<t;)e[r]=n(r);return e}function Gn(t){return t?t.slice(0,lr(t)+1).replace(rt,\"\"):t}function Yn(t){return function(n){return t(n)}}function Kn(t,n){return Pn(n,function(n){return t[n]})}function Qn(t,n){return t.has(n)}function Jn(t,n){for(var r=-1,e=t.length;++r<e&&Nn(n,t[r],0)>-1;);return r}function Xn(t,n){for(var r=t.length;r--&&Nn(n,t[r],0)>-1;);return r}var tr=$n({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),nr=$n({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function rr(t){return\"\\\\\"+un[t]}function er(t){return Xt.test(t)}function ir(t){var n=-1,r=Array(t.size);return t.forEach(function(t,e){r[++n]=[e,t]}),r}function or(t,n){return function(r){return t(n(r))}}function ur(t,n){for(var r=-1,e=t.length,i=0,o=[];++r<e;){var a=t[r];a!==n&&a!==u||(t[r]=u,o[i++]=r)}return o}function ar(t){var n=-1,r=Array(t.size);return t.forEach(function(t){r[++n]=t}),r}function cr(t){var n=-1,r=Array(t.size);return t.forEach(function(t){r[++n]=[t,t]}),r}function sr(t){return er(t)?function(t){for(var n=Qt.lastIndex=0;Qt.test(t);)++n;return n}(t):Rn(t)}function fr(t){return er(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.split(\"\")}(t)}function lr(t){for(var n=t.length;n--&&et.test(t.charAt(n)););return n}var hr=$n({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pr=function t(n){var r,et=(n=null==n?ln:pr.defaults(ln.Object(),n,pr.pick(ln,nn))).Array,mt=n.Date,wt=n.Error,Et=n.Function,St=n.Math,xt=n.Object,Ot=n.RegExp,Tt=n.String,At=n.TypeError,jt=et.prototype,It=Et.prototype,Dt=xt.prototype,Pt=n[\"__core-js_shared__\"],Lt=It.toString,Ct=Dt.hasOwnProperty,Ft=0,Ut=(r=/[^.]+$/.exec(Pt&&Pt.keys&&Pt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",Rt=Dt.toString,kt=Lt.call(xt),zt=ln._,Nt=Ot(\"^\"+Lt.call(Ct).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Mt=dn?n.Buffer:e,Bt=n.Symbol,Ht=n.Uint8Array,Wt=Mt?Mt.allocUnsafe:e,$t=or(xt.getPrototypeOf,xt),qt=xt.create,Vt=Dt.propertyIsEnumerable,Zt=jt.splice,Gt=Bt?Bt.isConcatSpreadable:e,Qt=Bt?Bt.iterator:e,Xt=Bt?Bt.toStringTag:e,un=function(){try{var t=co(xt,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),sn=n.clearTimeout!==ln.clearTimeout&&n.clearTimeout,fn=mt&&mt.now!==ln.Date.now&&mt.now,hn=n.setTimeout!==ln.setTimeout&&n.setTimeout,pn=St.ceil,_n=St.floor,vn=xt.getOwnPropertySymbols,Rn=Mt?Mt.isBuffer:e,$n=n.isFinite,dr=jt.join,_r=or(xt.keys,xt),vr=St.max,yr=St.min,gr=mt.now,br=n.parseInt,mr=St.random,wr=jt.reverse,Er=co(n,\"DataView\"),Sr=co(n,\"Map\"),xr=co(n,\"Promise\"),Or=co(n,\"Set\"),Tr=co(n,\"WeakMap\"),Ar=co(xt,\"create\"),jr=Tr&&new Tr,Ir={},Dr=ko(Er),Pr=ko(Sr),Lr=ko(xr),Cr=ko(Or),Fr=ko(Tr),Ur=Bt?Bt.prototype:e,Rr=Ur?Ur.valueOf:e,kr=Ur?Ur.toString:e;function zr(t){if(ta(t)&&!Wu(t)&&!(t instanceof Hr)){if(t instanceof Br)return t;if(Ct.call(t,\"__wrapped__\"))return zo(t)}return new Br(t)}var Nr=function(){function t(){}return function(n){if(!Xu(n))return{};if(qt)return qt(n);t.prototype=n;var r=new t;return t.prototype=e,r}}();function Mr(){}function Br(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=e}function Hr(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function Wr(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function $r(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function qr(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function Vr(t){var n=-1,r=null==t?0:t.length;for(this.__data__=new qr;++n<r;)this.add(t[n])}function Zr(t){var n=this.__data__=new $r(t);this.size=n.size}function Gr(t,n){var r=Wu(t),e=!r&&Hu(t),i=!r&&!e&&Zu(t),o=!r&&!e&&!i&&ca(t),u=r||e||i||o,a=u?Zn(t.length,Tt):[],c=a.length;for(var s in t)!n&&!Ct.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||vo(s,c))||a.push(s);return a}function Yr(t){var n=t.length;return n?t[qe(0,n-1)]:e}function Kr(t,n){return Lo(Ti(t),oe(n,0,t.length))}function Qr(t){return Lo(Ti(t))}function Jr(t,n,r){(r!==e&&!Nu(t[n],r)||r===e&&!(n in t))&&ee(t,n,r)}function Xr(t,n,r){var i=t[n];Ct.call(t,n)&&Nu(i,r)&&(r!==e||n in t)||ee(t,n,r)}function te(t,n){for(var r=t.length;r--;)if(Nu(t[r][0],n))return r;return-1}function ne(t,n,r,e){return fe(t,function(t,i,o){n(e,t,r(t),o)}),e}function re(t,n){return t&&Ai(n,Da(n),t)}function ee(t,n,r){\"__proto__\"==n&&un?un(t,n,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[n]=r}function ie(t,n){for(var r=-1,i=n.length,o=et(i),u=null==t;++r<i;)o[r]=u?e:Oa(t,n[r]);return o}function oe(t,n,r){return t==t&&(r!==e&&(t=t<=r?t:r),n!==e&&(t=t>=n?t:n)),t}function ue(t,n,r,i,o,u){var a,c=1&n,s=2&n,f=4&n;if(r&&(a=o?r(t,i,o,u):r(t)),a!==e)return a;if(!Xu(t))return t;var l=Wu(t);if(l){if(a=function(t){var n=t.length,r=new t.constructor(n);return n&&\"string\"==typeof t[0]&&Ct.call(t,\"index\")&&(r.index=t.index,r.input=t.input),r}(t),!c)return Ti(t,a)}else{var h=lo(t),p=h==b||h==m;if(Zu(t))return mi(t,c);if(h==S||h==d||p&&!o){if(a=s||p?{}:po(t),!c)return s?function(t,n){return Ai(t,fo(t),n)}(t,function(t,n){return t&&Ai(n,Pa(n),t)}(a,t)):function(t,n){return Ai(t,so(t),n)}(t,re(a,t))}else{if(!on[h])return o?t:{};a=function(t,n,r){var e,i=t.constructor;switch(n){case D:return wi(t);case v:case y:return new i(+t);case P:return function(t,n){var r=n?wi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case L:case C:case F:case U:case R:case k:case z:case N:case M:return Ei(t,r);case w:return new i;case E:case A:return new i(t);case O:return function(t){var n=new t.constructor(t.source,lt.exec(t));return n.lastIndex=t.lastIndex,n}(t);case T:return new i;case j:return e=t,Rr?xt(Rr.call(e)):{}}}(t,h,c)}}u||(u=new Zr);var _=u.get(t);if(_)return _;u.set(t,a),oa(t)?t.forEach(function(e){a.add(ue(e,n,r,e,t,u))}):na(t)&&t.forEach(function(e,i){a.set(i,ue(e,n,r,i,t,u))});var g=l?e:(f?s?no:to:s?Pa:Da)(t);return On(g||t,function(e,i){g&&(e=t[i=e]),Xr(a,i,ue(e,n,r,i,t,u))}),a}function ae(t,n,r){var i=r.length;if(null==t)return!i;for(t=xt(t);i--;){var o=r[i],u=n[o],a=t[o];if(a===e&&!(o in t)||!u(a))return!1}return!0}function ce(t,n,r){if(\"function\"!=typeof t)throw new At(i);return jo(function(){t.apply(e,r)},n)}function se(t,n,r,e){var i=-1,o=In,u=!0,a=t.length,c=[],s=n.length;if(!a)return c;r&&(n=Pn(n,Yn(r))),e?(o=Dn,u=!1):n.length>=200&&(o=Qn,u=!1,n=new Vr(n));t:for(;++i<a;){var f=t[i],l=null==r?f:r(f);if(f=e||0!==f?f:0,u&&l==l){for(var h=s;h--;)if(n[h]===l)continue t;c.push(f)}else o(n,l,e)||c.push(f)}return c}zr.templateSettings={escape:G,evaluate:Y,interpolate:K,variable:\"\",imports:{_:zr}},zr.prototype=Mr.prototype,zr.prototype.constructor=zr,Br.prototype=Nr(Mr.prototype),Br.prototype.constructor=Br,Hr.prototype=Nr(Mr.prototype),Hr.prototype.constructor=Hr,Wr.prototype.clear=function(){this.__data__=Ar?Ar(null):{},this.size=0},Wr.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},Wr.prototype.get=function(t){var n=this.__data__;if(Ar){var r=n[t];return r===o?e:r}return Ct.call(n,t)?n[t]:e},Wr.prototype.has=function(t){var n=this.__data__;return Ar?n[t]!==e:Ct.call(n,t)},Wr.prototype.set=function(t,n){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Ar&&n===e?o:n,this},$r.prototype.clear=function(){this.__data__=[],this.size=0},$r.prototype.delete=function(t){var n=this.__data__,r=te(n,t);return!(r<0||(r==n.length-1?n.pop():Zt.call(n,r,1),--this.size,0))},$r.prototype.get=function(t){var n=this.__data__,r=te(n,t);return r<0?e:n[r][1]},$r.prototype.has=function(t){return te(this.__data__,t)>-1},$r.prototype.set=function(t,n){var r=this.__data__,e=te(r,t);return e<0?(++this.size,r.push([t,n])):r[e][1]=n,this},qr.prototype.clear=function(){this.size=0,this.__data__={hash:new Wr,map:new(Sr||$r),string:new Wr}},qr.prototype.delete=function(t){var n=uo(this,t).delete(t);return this.size-=n?1:0,n},qr.prototype.get=function(t){return uo(this,t).get(t)},qr.prototype.has=function(t){return uo(this,t).has(t)},qr.prototype.set=function(t,n){var r=uo(this,t),e=r.size;return r.set(t,n),this.size+=r.size==e?0:1,this},Vr.prototype.add=Vr.prototype.push=function(t){return this.__data__.set(t,o),this},Vr.prototype.has=function(t){return this.__data__.has(t)},Zr.prototype.clear=function(){this.__data__=new $r,this.size=0},Zr.prototype.delete=function(t){var n=this.__data__,r=n.delete(t);return this.size=n.size,r},Zr.prototype.get=function(t){return this.__data__.get(t)},Zr.prototype.has=function(t){return this.__data__.has(t)},Zr.prototype.set=function(t,n){var r=this.__data__;if(r instanceof $r){var e=r.__data__;if(!Sr||e.length<199)return e.push([t,n]),this.size=++r.size,this;r=this.__data__=new qr(e)}return r.set(t,n),this.size=r.size,this};var fe=Di(ge),le=Di(be,!0);function he(t,n){var r=!0;return fe(t,function(t,e,i){return r=!!n(t,e,i)}),r}function pe(t,n,r){for(var i=-1,o=t.length;++i<o;){var u=t[i],a=n(u);if(null!=a&&(c===e?a==a&&!aa(a):r(a,c)))var c=a,s=u}return s}function de(t,n){var r=[];return fe(t,function(t,e,i){n(t,e,i)&&r.push(t)}),r}function _e(t,n,r,e,i){var o=-1,u=t.length;for(r||(r=_o),i||(i=[]);++o<u;){var a=t[o];n>0&&r(a)?n>1?_e(a,n-1,r,e,i):Ln(i,a):e||(i[i.length]=a)}return i}var ve=Pi(),ye=Pi(!0);function ge(t,n){return t&&ve(t,n,Da)}function be(t,n){return t&&ye(t,n,Da)}function me(t,n){return jn(n,function(n){return Ku(t[n])})}function we(t,n){for(var r=0,i=(n=vi(n,t)).length;null!=t&&r<i;)t=t[Ro(n[r++])];return r&&r==i?t:e}function Ee(t,n,r){var e=n(t);return Wu(t)?e:Ln(e,r(t))}function Se(t){return null==t?t===e?\"[object Undefined]\":\"[object Null]\":Xt&&Xt in xt(t)?function(t){var n=Ct.call(t,Xt),r=t[Xt];try{t[Xt]=e;var i=!0}catch(t){}var o=Rt.call(t);return i&&(n?t[Xt]=r:delete t[Xt]),o}(t):function(t){return Rt.call(t)}(t)}function xe(t,n){return t>n}function Oe(t,n){return null!=t&&Ct.call(t,n)}function Te(t,n){return null!=t&&n in xt(t)}function Ae(t,n,r){for(var i=r?Dn:In,o=t[0].length,u=t.length,a=u,c=et(u),s=1/0,f=[];a--;){var l=t[a];a&&n&&(l=Pn(l,Yn(n))),s=yr(l.length,s),c[a]=!r&&(n||o>=120&&l.length>=120)?new Vr(a&&l):e}l=t[0];var h=-1,p=c[0];t:for(;++h<o&&f.length<s;){var d=l[h],_=n?n(d):d;if(d=r||0!==d?d:0,!(p?Qn(p,_):i(f,_,r))){for(a=u;--a;){var v=c[a];if(!(v?Qn(v,_):i(t[a],_,r)))continue t}p&&p.push(_),f.push(d)}}return f}function je(t,n,r){var i=null==(t=Oo(t,n=vi(n,t)))?t:t[Ro(Yo(n))];return null==i?e:Sn(i,t,r)}function Ie(t){return ta(t)&&Se(t)==d}function De(t,n,r,i,o){return t===n||(null==t||null==n||!ta(t)&&!ta(n)?t!=t&&n!=n:function(t,n,r,i,o,u){var a=Wu(t),c=Wu(n),s=a?_:lo(t),f=c?_:lo(n),l=(s=s==d?S:s)==S,h=(f=f==d?S:f)==S,p=s==f;if(p&&Zu(t)){if(!Zu(n))return!1;a=!0,l=!1}if(p&&!l)return u||(u=new Zr),a||ca(t)?Ji(t,n,r,i,o,u):function(t,n,r,e,i,o,u){switch(r){case P:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case D:return!(t.byteLength!=n.byteLength||!o(new Ht(t),new Ht(n)));case v:case y:case E:return Nu(+t,+n);case g:return t.name==n.name&&t.message==n.message;case O:case A:return t==n+\"\";case w:var a=ir;case T:var c=1&e;if(a||(a=ar),t.size!=n.size&&!c)return!1;var s=u.get(t);if(s)return s==n;e|=2,u.set(t,n);var f=Ji(a(t),a(n),e,i,o,u);return u.delete(t),f;case j:if(Rr)return Rr.call(t)==Rr.call(n)}return!1}(t,n,s,r,i,o,u);if(!(1&r)){var b=l&&Ct.call(t,\"__wrapped__\"),m=h&&Ct.call(n,\"__wrapped__\");if(b||m){var x=b?t.value():t,I=m?n.value():n;return u||(u=new Zr),o(x,I,r,i,u)}}return!!p&&(u||(u=new Zr),function(t,n,r,i,o,u){var a=1&r,c=to(t),s=c.length;if(s!=to(n).length&&!a)return!1;for(var f=s;f--;){var l=c[f];if(!(a?l in n:Ct.call(n,l)))return!1}var h=u.get(t),p=u.get(n);if(h&&p)return h==n&&p==t;var d=!0;u.set(t,n),u.set(n,t);for(var _=a;++f<s;){var v=t[l=c[f]],y=n[l];if(i)var g=a?i(y,v,l,n,t,u):i(v,y,l,t,n,u);if(!(g===e?v===y||o(v,y,r,i,u):g)){d=!1;break}_||(_=\"constructor\"==l)}if(d&&!_){var b=t.constructor,m=n.constructor;b==m||!(\"constructor\"in t)||!(\"constructor\"in n)||\"function\"==typeof b&&b instanceof b&&\"function\"==typeof m&&m instanceof m||(d=!1)}return u.delete(t),u.delete(n),d}(t,n,r,i,o,u))}(t,n,r,i,De,o))}function Pe(t,n,r,i){var o=r.length,u=o,a=!i;if(null==t)return!u;for(t=xt(t);o--;){var c=r[o];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++o<u;){var s=(c=r[o])[0],f=t[s],l=c[1];if(a&&c[2]){if(f===e&&!(s in t))return!1}else{var h=new Zr;if(i)var p=i(f,l,s,t,n,h);if(!(p===e?De(l,f,3,i,h):p))return!1}}return!0}function Le(t){return!(!Xu(t)||(n=t,Ut&&Ut in n))&&(Ku(t)?Nt:dt).test(ko(t));var n}function Ce(t){return\"function\"==typeof t?t:null==t?rc:\"object\"==typeof t?Wu(t)?ze(t[0],t[1]):ke(t):lc(t)}function Fe(t){if(!wo(t))return _r(t);var n=[];for(var r in xt(t))Ct.call(t,r)&&\"constructor\"!=r&&n.push(r);return n}function Ue(t,n){return t<n}function Re(t,n){var r=-1,e=qu(t)?et(t.length):[];return fe(t,function(t,i,o){e[++r]=n(t,i,o)}),e}function ke(t){var n=ao(t);return 1==n.length&&n[0][2]?So(n[0][0],n[0][1]):function(r){return r===t||Pe(r,t,n)}}function ze(t,n){return go(t)&&Eo(n)?So(Ro(t),n):function(r){var i=Oa(r,t);return i===e&&i===n?Ta(r,t):De(n,i,3)}}function Ne(t,n,r,i,o){t!==n&&ve(n,function(u,a){if(o||(o=new Zr),Xu(u))!function(t,n,r,i,o,u,a){var c=To(t,r),s=To(n,r),f=a.get(s);if(f)Jr(t,r,f);else{var l=u?u(c,s,r+\"\",t,n,a):e,h=l===e;if(h){var p=Wu(s),d=!p&&Zu(s),_=!p&&!d&&ca(s);l=s,p||d||_?Wu(c)?l=c:Vu(c)?l=Ti(c):d?(h=!1,l=mi(s,!0)):_?(h=!1,l=Ei(s,!0)):l=[]:ea(s)||Hu(s)?(l=c,Hu(c)?l=va(c):Xu(c)&&!Ku(c)||(l=po(s))):h=!1}h&&(a.set(s,l),o(l,s,i,u,a),a.delete(s)),Jr(t,r,l)}}(t,n,a,r,Ne,i,o);else{var c=i?i(To(t,a),u,a+\"\",t,n,o):e;c===e&&(c=u),Jr(t,a,c)}},Pa)}function Me(t,n){var r=t.length;if(r)return vo(n+=n<0?r:0,r)?t[n]:e}function Be(t,n,r){n=n.length?Pn(n,function(t){return Wu(t)?function(n){return we(n,1===t.length?t[0]:t)}:t}):[rc];var e=-1;n=Pn(n,Yn(oo()));var i=Re(t,function(t,r,i){var o=Pn(n,function(n){return n(t)});return{criteria:o,index:++e,value:t}});return function(t){var n=t.length;for(t.sort(function(t,n){return function(t,n,r){for(var e=-1,i=t.criteria,o=n.criteria,u=i.length,a=r.length;++e<u;){var c=Si(i[e],o[e]);if(c)return e>=a?c:c*(\"desc\"==r[e]?-1:1)}return t.index-n.index}(t,n,r)});n--;)t[n]=t[n].value;return t}(i)}function He(t,n,r){for(var e=-1,i=n.length,o={};++e<i;){var u=n[e],a=we(t,u);r(a,u)&&Ke(o,vi(u,t),a)}return o}function We(t,n,r,e){var i=e?Mn:Nn,o=-1,u=n.length,a=t;for(t===n&&(n=Ti(n)),r&&(a=Pn(t,Yn(r)));++o<u;)for(var c=0,s=n[o],f=r?r(s):s;(c=i(a,f,c,e))>-1;)a!==t&&Zt.call(a,c,1),Zt.call(t,c,1);return t}function $e(t,n){for(var r=t?n.length:0,e=r-1;r--;){var i=n[r];if(r==e||i!==o){var o=i;vo(i)?Zt.call(t,i,1):ci(t,i)}}return t}function qe(t,n){return t+_n(mr()*(n-t+1))}function Ve(t,n){var r=\"\";if(!t||n<1||n>f)return r;do{n%2&&(r+=t),(n=_n(n/2))&&(t+=t)}while(n);return r}function Ze(t,n){return Io(xo(t,n,rc),t+\"\")}function Ge(t){return Yr(Na(t))}function Ye(t,n){var r=Na(t);return Lo(r,oe(n,0,r.length))}function Ke(t,n,r,i){if(!Xu(t))return t;for(var o=-1,u=(n=vi(n,t)).length,a=u-1,c=t;null!=c&&++o<u;){var s=Ro(n[o]),f=r;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(o!=a){var l=c[s];(f=i?i(l,s,c):e)===e&&(f=Xu(l)?l:vo(n[o+1])?[]:{})}Xr(c,s,f),c=c[s]}return t}var Qe=jr?function(t,n){return jr.set(t,n),t}:rc,Je=un?function(t,n){return un(t,\"toString\",{configurable:!0,enumerable:!1,value:Xa(n),writable:!0})}:rc;function Xe(t){return Lo(Na(t))}function ti(t,n,r){var e=-1,i=t.length;n<0&&(n=-n>i?0:i+n),(r=r>i?i:r)<0&&(r+=i),i=n>r?0:r-n>>>0,n>>>=0;for(var o=et(i);++e<i;)o[e]=t[e+n];return o}function ni(t,n){var r;return fe(t,function(t,e,i){return!(r=n(t,e,i))}),!!r}function ri(t,n,r){var e=0,i=null==t?e:t.length;if(\"number\"==typeof n&&n==n&&i<=2147483647){for(;e<i;){var o=e+i>>>1,u=t[o];null!==u&&!aa(u)&&(r?u<=n:u<n)?e=o+1:i=o}return i}return ei(t,n,rc,r)}function ei(t,n,r,i){var o=0,u=null==t?0:t.length;if(0===u)return 0;for(var a=(n=r(n))!=n,c=null===n,s=aa(n),f=n===e;o<u;){var l=_n((o+u)/2),h=r(t[l]),p=h!==e,d=null===h,_=h==h,v=aa(h);if(a)var y=i||_;else y=f?_&&(i||p):c?_&&p&&(i||!d):s?_&&p&&!d&&(i||!v):!d&&!v&&(i?h<=n:h<n);y?o=l+1:u=l}return yr(u,4294967294)}function ii(t,n){for(var r=-1,e=t.length,i=0,o=[];++r<e;){var u=t[r],a=n?n(u):u;if(!r||!Nu(a,c)){var c=a;o[i++]=0===u?0:u}}return o}function oi(t){return\"number\"==typeof t?t:aa(t)?l:+t}function ui(t){if(\"string\"==typeof t)return t;if(Wu(t))return Pn(t,ui)+\"\";if(aa(t))return kr?kr.call(t):\"\";var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function ai(t,n,r){var e=-1,i=In,o=t.length,u=!0,a=[],c=a;if(r)u=!1,i=Dn;else if(o>=200){var s=n?null:Vi(t);if(s)return ar(s);u=!1,i=Qn,c=new Vr}else c=n?[]:a;t:for(;++e<o;){var f=t[e],l=n?n(f):f;if(f=r||0!==f?f:0,u&&l==l){for(var h=c.length;h--;)if(c[h]===l)continue t;n&&c.push(l),a.push(f)}else i(c,l,r)||(c!==a&&c.push(l),a.push(f))}return a}function ci(t,n){var r=-1,e=(n=vi(n,t)).length;if(!e)return!0;for(;++r<e;){var i=Ro(n[r]);if(\"__proto__\"===i&&!Ct.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&r<e-1)return!1}var o=Oo(t,n);return null==o||delete o[Ro(Yo(n))]}function si(t,n,r,e){return Ke(t,n,r(we(t,n)),e)}function fi(t,n,r,e){for(var i=t.length,o=e?i:-1;(e?o--:++o<i)&&n(t[o],o,t););return r?ti(t,e?0:o,e?o+1:i):ti(t,e?o+1:0,e?i:o)}function li(t,n){var r=t;return r instanceof Hr&&(r=r.value()),Cn(n,function(t,n){return n.func.apply(n.thisArg,Ln([t],n.args))},r)}function hi(t,n,r){var e=t.length;if(e<2)return e?ai(t[0]):[];for(var i=-1,o=et(e);++i<e;)for(var u=t[i],a=-1;++a<e;)a!=i&&(o[i]=se(o[i]||u,t[a],n,r));return ai(_e(o,1),n,r)}function pi(t,n,r){for(var i=-1,o=t.length,u=n.length,a={};++i<o;){var c=i<u?n[i]:e;r(a,t[i],c)}return a}function di(t){return Vu(t)?t:[]}function _i(t){return\"function\"==typeof t?t:rc}function vi(t,n){return Wu(t)?t:go(t,n)?[t]:Uo(ya(t))}var yi=Ze;function gi(t,n,r){var i=t.length;return r=r===e?i:r,!n&&r>=i?t:ti(t,n,r)}var bi=sn||function(t){return ln.clearTimeout(t)};function mi(t,n){if(n)return t.slice();var r=t.length,e=Wt?Wt(r):new t.constructor(r);return t.copy(e),e}function wi(t){var n=new t.constructor(t.byteLength);return new Ht(n).set(new Ht(t)),n}function Ei(t,n){var r=n?wi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function Si(t,n){if(t!==n){var r=t!==e,i=null===t,o=t==t,u=aa(t),a=n!==e,c=null===n,s=n==n,f=aa(n);if(!c&&!f&&!u&&t>n||u&&a&&s&&!c&&!f||i&&a&&s||!r&&s||!o)return 1;if(!i&&!u&&!f&&t<n||f&&r&&o&&!i&&!u||c&&r&&o||!a&&o||!s)return-1}return 0}function xi(t,n,r,e){for(var i=-1,o=t.length,u=r.length,a=-1,c=n.length,s=vr(o-u,0),f=et(c+s),l=!e;++a<c;)f[a]=n[a];for(;++i<u;)(l||i<o)&&(f[r[i]]=t[i]);for(;s--;)f[a++]=t[i++];return f}function Oi(t,n,r,e){for(var i=-1,o=t.length,u=-1,a=r.length,c=-1,s=n.length,f=vr(o-a,0),l=et(f+s),h=!e;++i<f;)l[i]=t[i];for(var p=i;++c<s;)l[p+c]=n[c];for(;++u<a;)(h||i<o)&&(l[p+r[u]]=t[i++]);return l}function Ti(t,n){var r=-1,e=t.length;for(n||(n=et(e));++r<e;)n[r]=t[r];return n}function Ai(t,n,r,i){var o=!r;r||(r={});for(var u=-1,a=n.length;++u<a;){var c=n[u],s=i?i(r[c],t[c],c,r,t):e;s===e&&(s=t[c]),o?ee(r,c,s):Xr(r,c,s)}return r}function ji(t,n){return function(r,e){var i=Wu(r)?xn:ne,o=n?n():{};return i(r,t,oo(e,2),o)}}function Ii(t){return Ze(function(n,r){var i=-1,o=r.length,u=o>1?r[o-1]:e,a=o>2?r[2]:e;for(u=t.length>3&&\"function\"==typeof u?(o--,u):e,a&&yo(r[0],r[1],a)&&(u=o<3?e:u,o=1),n=xt(n);++i<o;){var c=r[i];c&&t(n,c,i,u)}return n})}function Di(t,n){return function(r,e){if(null==r)return r;if(!qu(r))return t(r,e);for(var i=r.length,o=n?i:-1,u=xt(r);(n?o--:++o<i)&&!1!==e(u[o],o,u););return r}}function Pi(t){return function(n,r,e){for(var i=-1,o=xt(n),u=e(n),a=u.length;a--;){var c=u[t?a:++i];if(!1===r(o[c],c,o))break}return n}}function Li(t){return function(n){var r=er(n=ya(n))?fr(n):e,i=r?r[0]:n.charAt(0),o=r?gi(r,1).join(\"\"):n.slice(1);return i[t]()+o}}function Ci(t){return function(n){return Cn(Ka(Ha(n).replace(Yt,\"\")),t,\"\")}}function Fi(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var r=Nr(t.prototype),e=t.apply(r,n);return Xu(e)?e:r}}function Ui(t){return function(n,r,i){var o=xt(n);if(!qu(n)){var u=oo(r,3);n=Da(n),r=function(t){return u(o[t],t,o)}}var a=t(n,r,i);return a>-1?o[u?n[a]:a]:e}}function Ri(t){return Xi(function(n){var r=n.length,o=r,u=Br.prototype.thru;for(t&&n.reverse();o--;){var a=n[o];if(\"function\"!=typeof a)throw new At(i);if(u&&!c&&\"wrapper\"==eo(a))var c=new Br([],!0)}for(o=c?o:r;++o<r;){var s=eo(a=n[o]),f=\"wrapper\"==s?ro(a):e;c=f&&bo(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?c[eo(f[0])].apply(c,f[3]):1==a.length&&bo(a)?c[s]():c.thru(a)}return function(){var t=arguments,e=t[0];if(c&&1==t.length&&Wu(e))return c.plant(e).value();for(var i=0,o=r?n[i].apply(this,t):e;++i<r;)o=n[i].call(this,o);return o}})}function ki(t,n,r,i,o,u,a,s,f,l){var h=n&c,p=1&n,d=2&n,_=24&n,v=512&n,y=d?e:Fi(t);return function c(){for(var g=arguments.length,b=et(g),m=g;m--;)b[m]=arguments[m];if(_)var w=io(c),E=function(t,n){for(var r=t.length,e=0;r--;)t[r]===n&&++e;return e}(b,w);if(i&&(b=xi(b,i,o,_)),u&&(b=Oi(b,u,a,_)),g-=E,_&&g<l){var S=ur(b,w);return $i(t,n,ki,c.placeholder,r,b,S,s,f,l-g)}var x=p?r:this,O=d?x[t]:t;return g=b.length,s?b=function(t,n){for(var r=t.length,i=yr(n.length,r),o=Ti(t);i--;){var u=n[i];t[i]=vo(u,r)?o[u]:e}return t}(b,s):v&&g>1&&b.reverse(),h&&f<g&&(b.length=f),this&&this!==ln&&this instanceof c&&(O=y||Fi(O)),O.apply(x,b)}}function zi(t,n){return function(r,e){return function(t,n,r,e){return ge(t,function(t,i,o){n(e,r(t),i,o)}),e}(r,t,n(e),{})}}function Ni(t,n){return function(r,i){var o;if(r===e&&i===e)return n;if(r!==e&&(o=r),i!==e){if(o===e)return i;\"string\"==typeof r||\"string\"==typeof i?(r=ui(r),i=ui(i)):(r=oi(r),i=oi(i)),o=t(r,i)}return o}}function Mi(t){return Xi(function(n){return n=Pn(n,Yn(oo())),Ze(function(r){var e=this;return t(n,function(t){return Sn(t,e,r)})})})}function Bi(t,n){var r=(n=n===e?\" \":ui(n)).length;if(r<2)return r?Ve(n,t):n;var i=Ve(n,pn(t/sr(n)));return er(n)?gi(fr(i),0,t).join(\"\"):i.slice(0,t)}function Hi(t){return function(n,r,i){return i&&\"number\"!=typeof i&&yo(n,r,i)&&(r=i=e),n=ha(n),r===e?(r=n,n=0):r=ha(r),function(t,n,r,e){for(var i=-1,o=vr(pn((n-t)/(r||1)),0),u=et(o);o--;)u[e?o:++i]=t,t+=r;return u}(n,r,i=i===e?n<r?1:-1:ha(i),t)}}function Wi(t){return function(n,r){return\"string\"==typeof n&&\"string\"==typeof r||(n=_a(n),r=_a(r)),t(n,r)}}function $i(t,n,r,i,o,u,c,s,f,l){var h=8&n;n|=h?a:64,4&(n&=~(h?64:a))||(n&=-4);var p=[t,n,o,h?u:e,h?c:e,h?e:u,h?e:c,s,f,l],d=r.apply(e,p);return bo(t)&&Ao(d,p),d.placeholder=i,Do(d,t,n)}function qi(t){var n=St[t];return function(t,r){if(t=_a(t),(r=null==r?0:yr(pa(r),292))&&$n(t)){var e=(ya(t)+\"e\").split(\"e\");return+((e=(ya(n(e[0]+\"e\"+(+e[1]+r)))+\"e\").split(\"e\"))[0]+\"e\"+(+e[1]-r))}return n(t)}}var Vi=Or&&1/ar(new Or([,-0]))[1]==s?function(t){return new Or(t)}:ac;function Zi(t){return function(n){var r=lo(n);return r==w?ir(n):r==T?cr(n):function(t,n){return Pn(n,function(n){return[n,t[n]]})}(n,t(n))}}function Gi(t,n,r,o,s,f,l,h){var p=2&n;if(!p&&\"function\"!=typeof t)throw new At(i);var d=o?o.length:0;if(d||(n&=-97,o=s=e),l=l===e?l:vr(pa(l),0),h=h===e?h:pa(h),d-=s?s.length:0,64&n){var _=o,v=s;o=s=e}var y=p?e:ro(t),g=[t,n,r,o,s,_,v,f,l,h];if(y&&function(t,n){var r=t[1],e=n[1],i=r|e,o=i<131,a=e==c&&8==r||e==c&&256==r&&t[7].length<=n[8]||384==e&&n[7].length<=n[8]&&8==r;if(!o&&!a)return t;1&e&&(t[2]=n[2],i|=1&r?0:4);var s=n[3];if(s){var f=t[3];t[3]=f?xi(f,s,n[4]):s,t[4]=f?ur(t[3],u):n[4]}(s=n[5])&&(f=t[5],t[5]=f?Oi(f,s,n[6]):s,t[6]=f?ur(t[5],u):n[6]),(s=n[7])&&(t[7]=s),e&c&&(t[8]=null==t[8]?n[8]:yr(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i}(g,y),t=g[0],n=g[1],r=g[2],o=g[3],s=g[4],!(h=g[9]=g[9]===e?p?0:t.length:vr(g[9]-d,0))&&24&n&&(n&=-25),n&&1!=n)b=8==n||16==n?function(t,n,r){var i=Fi(t);return function o(){for(var u=arguments.length,a=et(u),c=u,s=io(o);c--;)a[c]=arguments[c];var f=u<3&&a[0]!==s&&a[u-1]!==s?[]:ur(a,s);return(u-=f.length)<r?$i(t,n,ki,o.placeholder,e,a,f,e,e,r-u):Sn(this&&this!==ln&&this instanceof o?i:t,this,a)}}(t,n,h):n!=a&&33!=n||s.length?ki.apply(e,g):function(t,n,r,e){var i=1&n,o=Fi(t);return function n(){for(var u=-1,a=arguments.length,c=-1,s=e.length,f=et(s+a),l=this&&this!==ln&&this instanceof n?o:t;++c<s;)f[c]=e[c];for(;a--;)f[c++]=arguments[++u];return Sn(l,i?r:this,f)}}(t,n,r,o);else var b=function(t,n,r){var e=1&n,i=Fi(t);return function n(){return(this&&this!==ln&&this instanceof n?i:t).apply(e?r:this,arguments)}}(t,n,r);return Do((y?Qe:Ao)(b,g),t,n)}function Yi(t,n,r,i){return t===e||Nu(t,Dt[r])&&!Ct.call(i,r)?n:t}function Ki(t,n,r,i,o,u){return Xu(t)&&Xu(n)&&(u.set(n,t),Ne(t,n,e,Ki,u),u.delete(n)),t}function Qi(t){return ea(t)?e:t}function Ji(t,n,r,i,o,u){var a=1&r,c=t.length,s=n.length;if(c!=s&&!(a&&s>c))return!1;var f=u.get(t),l=u.get(n);if(f&&l)return f==n&&l==t;var h=-1,p=!0,d=2&r?new Vr:e;for(u.set(t,n),u.set(n,t);++h<c;){var _=t[h],v=n[h];if(i)var y=a?i(v,_,h,n,t,u):i(_,v,h,t,n,u);if(y!==e){if(y)continue;p=!1;break}if(d){if(!Un(n,function(t,n){if(!Qn(d,n)&&(_===t||o(_,t,r,i,u)))return d.push(n)})){p=!1;break}}else if(_!==v&&!o(_,v,r,i,u)){p=!1;break}}return u.delete(t),u.delete(n),p}function Xi(t){return Io(xo(t,e,$o),t+\"\")}function to(t){return Ee(t,Da,so)}function no(t){return Ee(t,Pa,fo)}var ro=jr?function(t){return jr.get(t)}:ac;function eo(t){for(var n=t.name+\"\",r=Ir[n],e=Ct.call(Ir,n)?r.length:0;e--;){var i=r[e],o=i.func;if(null==o||o==t)return i.name}return n}function io(t){return(Ct.call(zr,\"placeholder\")?zr:t).placeholder}function oo(){var t=zr.iteratee||ec;return t=t===ec?Ce:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,n){var r,e,i=t.__data__;return(\"string\"==(e=typeof(r=n))||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==r:null===r)?i[\"string\"==typeof n?\"string\":\"hash\"]:i.map}function ao(t){for(var n=Da(t),r=n.length;r--;){var e=n[r],i=t[e];n[r]=[e,i,Eo(i)]}return n}function co(t,n){var r=function(t,n){return null==t?e:t[n]}(t,n);return Le(r)?r:e}var so=vn?function(t){return null==t?[]:(t=xt(t),jn(vn(t),function(n){return Vt.call(t,n)}))}:dc,fo=vn?function(t){for(var n=[];t;)Ln(n,so(t)),t=$t(t);return n}:dc,lo=Se;function ho(t,n,r){for(var e=-1,i=(n=vi(n,t)).length,o=!1;++e<i;){var u=Ro(n[e]);if(!(o=null!=t&&r(t,u)))break;t=t[u]}return o||++e!=i?o:!!(i=null==t?0:t.length)&&Ju(i)&&vo(u,i)&&(Wu(t)||Hu(t))}function po(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Nr($t(t))}function _o(t){return Wu(t)||Hu(t)||!!(Gt&&t&&t[Gt])}function vo(t,n){var r=typeof t;return!!(n=n??f)&&(\"number\"==r||\"symbol\"!=r&&vt.test(t))&&t>-1&&t%1==0&&t<n}function yo(t,n,r){if(!Xu(r))return!1;var e=typeof n;return!!(\"number\"==e?qu(r)&&vo(n,r.length):\"string\"==e&&n in r)&&Nu(r[n],t)}function go(t,n){if(Wu(t))return!1;var r=typeof t;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=t&&!aa(t))||J.test(t)||!Q.test(t)||null!=n&&t in xt(n)}function bo(t){var n=eo(t),r=zr[n];if(\"function\"!=typeof r||!(n in Hr.prototype))return!1;if(t===r)return!0;var e=ro(r);return!!e&&t===e[0]}(Er&&lo(new Er(new ArrayBuffer(1)))!=P||Sr&&lo(new Sr)!=w||xr&&lo(xr.resolve())!=x||Or&&lo(new Or)!=T||Tr&&lo(new Tr)!=I)&&(lo=function(t){var n=Se(t),r=n==S?t.constructor:e,i=r?ko(r):\"\";if(i)switch(i){case Dr:return P;case Pr:return w;case Lr:return x;case Cr:return T;case Fr:return I}return n});var mo=Pt?Ku:_c;function wo(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||Dt)}function Eo(t){return t==t&&!Xu(t)}function So(t,n){return function(r){return null!=r&&r[t]===n&&(n!==e||t in xt(r))}}function xo(t,n,r){return n=vr(n===e?t.length-1:n,0),function(){for(var e=arguments,i=-1,o=vr(e.length-n,0),u=et(o);++i<o;)u[i]=e[n+i];i=-1;for(var a=et(n+1);++i<n;)a[i]=e[i];return a[n]=r(u),Sn(t,this,a)}}function Oo(t,n){return n.length<2?t:we(t,ti(n,0,-1))}function To(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var Ao=Po(Qe),jo=hn||function(t,n){return ln.setTimeout(t,n)},Io=Po(Je);function Do(t,n,r){var e=n+\"\";return Io(t,function(t,n){var r=n.length;if(!r)return t;var e=r-1;return n[e]=(r>1?\"& \":\"\")+n[e],n=n.join(r>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+n+\"] */\\n\")}(e,function(t,n){return On(p,function(r){var e=\"_.\"+r[0];n&r[1]&&!In(t,e)&&t.push(e)}),t.sort()}(function(t){var n=t.match(ot);return n?n[1].split(ut):[]}(e),r)))}function Po(t){var n=0,r=0;return function(){var i=gr(),o=16-(i-r);if(r=i,o>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(e,arguments)}}function Lo(t,n){var r=-1,i=t.length,o=i-1;for(n=n===e?i:n;++r<n;){var u=qe(r,o),a=t[u];t[u]=t[r],t[r]=a}return t.length=n,t}var Co,Fo,Uo=(Co=Cu(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(\"\"),t.replace(X,function(t,r,e,i){n.push(e?i.replace(st,\"$1\"):r||t)}),n},function(t){return 500===Fo.size&&Fo.clear(),t}),Fo=Co.cache,Co);function Ro(t){if(\"string\"==typeof t||aa(t))return t;var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function ko(t){if(null!=t){try{return Lt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function zo(t){if(t instanceof Hr)return t.clone();var n=new Br(t.__wrapped__,t.__chain__);return n.__actions__=Ti(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}var No=Ze(function(t,n){return Vu(t)?se(t,_e(n,1,Vu,!0)):[]}),Mo=Ze(function(t,n){var r=Yo(n);return Vu(r)&&(r=e),Vu(t)?se(t,_e(n,1,Vu,!0),oo(r,2)):[]}),Bo=Ze(function(t,n){var r=Yo(n);return Vu(r)&&(r=e),Vu(t)?se(t,_e(n,1,Vu,!0),e,r):[]});function Ho(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=null==r?0:pa(r);return i<0&&(i=vr(e+i,0)),zn(t,oo(n,3),i)}function Wo(t,n,r){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return r!==e&&(o=pa(r),o=r<0?vr(i+o,0):yr(o,i-1)),zn(t,oo(n,3),o,!0)}function $o(t){return null!=t&&t.length?_e(t,1):[]}function qo(t){return t&&t.length?t[0]:e}var Vo=Ze(function(t){var n=Pn(t,di);return n.length&&n[0]===t[0]?Ae(n):[]}),Zo=Ze(function(t){var n=Yo(t),r=Pn(t,di);return n===Yo(r)?n=e:r.pop(),r.length&&r[0]===t[0]?Ae(r,oo(n,2)):[]}),Go=Ze(function(t){var n=Yo(t),r=Pn(t,di);return(n=\"function\"==typeof n?n:e)&&r.pop(),r.length&&r[0]===t[0]?Ae(r,e,n):[]});function Yo(t){var n=null==t?0:t.length;return n?t[n-1]:e}var Ko=Ze(Qo);function Qo(t,n){return t&&t.length&&n&&n.length?We(t,n):t}var Jo=Xi(function(t,n){var r=null==t?0:t.length,e=ie(t,n);return $e(t,Pn(n,function(t){return vo(t,r)?+t:t}).sort(Si)),e});function Xo(t){return null==t?t:wr.call(t)}var tu=Ze(function(t){return ai(_e(t,1,Vu,!0))}),nu=Ze(function(t){var n=Yo(t);return Vu(n)&&(n=e),ai(_e(t,1,Vu,!0),oo(n,2))}),ru=Ze(function(t){var n=Yo(t);return n=\"function\"==typeof n?n:e,ai(_e(t,1,Vu,!0),e,n)});function eu(t){if(!t||!t.length)return[];var n=0;return t=jn(t,function(t){if(Vu(t))return n=vr(t.length,n),!0}),Zn(n,function(n){return Pn(t,Wn(n))})}function iu(t,n){if(!t||!t.length)return[];var r=eu(t);return null==n?r:Pn(r,function(t){return Sn(n,e,t)})}var ou=Ze(function(t,n){return Vu(t)?se(t,n):[]}),uu=Ze(function(t){return hi(jn(t,Vu))}),au=Ze(function(t){var n=Yo(t);return Vu(n)&&(n=e),hi(jn(t,Vu),oo(n,2))}),cu=Ze(function(t){var n=Yo(t);return n=\"function\"==typeof n?n:e,hi(jn(t,Vu),e,n)}),su=Ze(eu),fu=Ze(function(t){var n=t.length,r=n>1?t[n-1]:e;return r=\"function\"==typeof r?(t.pop(),r):e,iu(t,r)});function lu(t){var n=zr(t);return n.__chain__=!0,n}function hu(t,n){return n(t)}var pu=Xi(function(t){var n=t.length,r=n?t[0]:0,i=this.__wrapped__,o=function(n){return ie(n,t)};return!(n>1||this.__actions__.length)&&i instanceof Hr&&vo(r)?((i=i.slice(r,+r+(n?1:0))).__actions__.push({func:hu,args:[o],thisArg:e}),new Br(i,this.__chain__).thru(function(t){return n&&!t.length&&t.push(e),t})):this.thru(o)}),du=ji(function(t,n,r){Ct.call(t,r)?++t[r]:ee(t,r,1)}),_u=Ui(Ho),vu=Ui(Wo);function yu(t,n){return(Wu(t)?On:fe)(t,oo(n,3))}function gu(t,n){return(Wu(t)?Tn:le)(t,oo(n,3))}var bu=ji(function(t,n,r){Ct.call(t,r)?t[r].push(n):ee(t,r,[n])}),mu=Ze(function(t,n,r){var e=-1,i=\"function\"==typeof n,o=qu(t)?et(t.length):[];return fe(t,function(t){o[++e]=i?Sn(n,t,r):je(t,n,r)}),o}),wu=ji(function(t,n,r){ee(t,r,n)});function Eu(t,n){return(Wu(t)?Pn:Re)(t,oo(n,3))}var Su=ji(function(t,n,r){t[r?0:1].push(n)},function(){return[[],[]]}),xu=Ze(function(t,n){if(null==t)return[];var r=n.length;return r>1&&yo(t,n[0],n[1])?n=[]:r>2&&yo(n[0],n[1],n[2])&&(n=[n[0]]),Be(t,_e(n,1),[])}),Ou=fn||function(){return ln.Date.now()};function Tu(t,n,r){return n=r?e:n,n=t&&null==n?t.length:n,Gi(t,c,e,e,e,e,n)}function Au(t,n){var r;if(\"function\"!=typeof n)throw new At(i);return t=pa(t),function(){return--t>0&&(r=n.apply(this,arguments)),t<=1&&(n=e),r}}var ju=Ze(function(t,n,r){var e=1;if(r.length){var i=ur(r,io(ju));e|=a}return Gi(t,e,n,r,i)}),Iu=Ze(function(t,n,r){var e=3;if(r.length){var i=ur(r,io(Iu));e|=a}return Gi(n,e,t,r,i)});function Du(t,n,r){var o,u,a,c,s,f,l=0,h=!1,p=!1,d=!0;if(\"function\"!=typeof t)throw new At(i);function _(n){var r=o,i=u;return o=u=e,l=n,c=t.apply(i,r)}function v(t){var r=t-f;return f===e||r>=n||r<0||p&&t-l>=a}function y(){var t=Ou();if(v(t))return g(t);s=jo(y,function(t){var r=n-(t-f);return p?yr(r,a-(t-l)):r}(t))}function g(t){return s=e,d&&o?_(t):(o=u=e,c)}function b(){var t=Ou(),r=v(t);if(o=arguments,u=this,f=t,r){if(s===e)return function(t){return l=t,s=jo(y,n),h?_(t):c}(f);if(p)return bi(s),s=jo(y,n),_(f)}return s===e&&(s=jo(y,n)),c}return n=_a(n)||0,Xu(r)&&(h=!!r.leading,a=(p=\"maxWait\"in r)?vr(_a(r.maxWait)||0,n):a,d=\"trailing\"in r?!!r.trailing:d),b.cancel=function(){s!==e&&bi(s),l=0,o=f=u=s=e},b.flush=function(){return s===e?c:g(Ou())},b}var Pu=Ze(function(t,n){return ce(t,1,n)}),Lu=Ze(function(t,n,r){return ce(t,_a(n)||0,r)});function Cu(t,n){if(\"function\"!=typeof t||null!=n&&\"function\"!=typeof n)throw new At(i);var r=function(){var e=arguments,i=n?n.apply(this,e):e[0],o=r.cache;if(o.has(i))return o.get(i);var u=t.apply(this,e);return r.cache=o.set(i,u)||o,u};return r.cache=new(Cu.Cache||qr),r}function Fu(t){if(\"function\"!=typeof t)throw new At(i);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}Cu.Cache=qr;var Uu=yi(function(t,n){var r=(n=1==n.length&&Wu(n[0])?Pn(n[0],Yn(oo())):Pn(_e(n,1),Yn(oo()))).length;return Ze(function(e){for(var i=-1,o=yr(e.length,r);++i<o;)e[i]=n[i].call(this,e[i]);return Sn(t,this,e)})}),Ru=Ze(function(t,n){var r=ur(n,io(Ru));return Gi(t,a,e,n,r)}),ku=Ze(function(t,n){var r=ur(n,io(ku));return Gi(t,64,e,n,r)}),zu=Xi(function(t,n){return Gi(t,256,e,e,e,n)});function Nu(t,n){return t===n||t!=t&&n!=n}var Mu=Wi(xe),Bu=Wi(function(t,n){return t>=n}),Hu=Ie(function(){return arguments}())?Ie:function(t){return ta(t)&&Ct.call(t,\"callee\")&&!Vt.call(t,\"callee\")},Wu=et.isArray,$u=yn?Yn(yn):function(t){return ta(t)&&Se(t)==D};function qu(t){return null!=t&&Ju(t.length)&&!Ku(t)}function Vu(t){return ta(t)&&qu(t)}var Zu=Rn||_c,Gu=gn?Yn(gn):function(t){return ta(t)&&Se(t)==y};function Yu(t){if(!ta(t))return!1;var n=Se(t);return n==g||\"[object DOMException]\"==n||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ea(t)}function Ku(t){if(!Xu(t))return!1;var n=Se(t);return n==b||n==m||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function Qu(t){return\"number\"==typeof t&&t==pa(t)}function Ju(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=f}function Xu(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function ta(t){return null!=t&&\"object\"==typeof t}var na=bn?Yn(bn):function(t){return ta(t)&&lo(t)==w};function ra(t){return\"number\"==typeof t||ta(t)&&Se(t)==E}function ea(t){if(!ta(t)||Se(t)!=S)return!1;var n=$t(t);if(null===n)return!0;var r=Ct.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof r&&r instanceof r&&Lt.call(r)==kt}var ia=mn?Yn(mn):function(t){return ta(t)&&Se(t)==O},oa=wn?Yn(wn):function(t){return ta(t)&&lo(t)==T};function ua(t){return\"string\"==typeof t||!Wu(t)&&ta(t)&&Se(t)==A}function aa(t){return\"symbol\"==typeof t||ta(t)&&Se(t)==j}var ca=En?Yn(En):function(t){return ta(t)&&Ju(t.length)&&!!en[Se(t)]},sa=Wi(Ue),fa=Wi(function(t,n){return t<=n});function la(t){if(!t)return[];if(qu(t))return ua(t)?fr(t):Ti(t);if(Qt&&t[Qt])return function(t){for(var n,r=[];!(n=t.next()).done;)r.push(n.value);return r}(t[Qt]());var n=lo(t);return(n==w?ir:n==T?ar:Na)(t)}function ha(t){return t?(t=_a(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function pa(t){var n=ha(t),r=n%1;return n==n?r?n-r:n:0}function da(t){return t?oe(pa(t),0,h):0}function _a(t){if(\"number\"==typeof t)return t;if(aa(t))return l;if(Xu(t)){var n=\"function\"==typeof t.valueOf?t.valueOf():t;t=Xu(n)?n+\"\":n}if(\"string\"!=typeof t)return 0===t?t:+t;t=Gn(t);var r=pt.test(t);return r||_t.test(t)?cn(t.slice(2),r?2:8):ht.test(t)?l:+t}function va(t){return Ai(t,Pa(t))}function ya(t){return null==t?\"\":ui(t)}var ga=Ii(function(t,n){if(wo(n)||qu(n))Ai(n,Da(n),t);else for(var r in n)Ct.call(n,r)&&Xr(t,r,n[r])}),ba=Ii(function(t,n){Ai(n,Pa(n),t)}),ma=Ii(function(t,n,r,e){Ai(n,Pa(n),t,e)}),wa=Ii(function(t,n,r,e){Ai(n,Da(n),t,e)}),Ea=Xi(ie),Sa=Ze(function(t,n){t=xt(t);var r=-1,i=n.length,o=i>2?n[2]:e;for(o&&yo(n[0],n[1],o)&&(i=1);++r<i;)for(var u=n[r],a=Pa(u),c=-1,s=a.length;++c<s;){var f=a[c],l=t[f];(l===e||Nu(l,Dt[f])&&!Ct.call(t,f))&&(t[f]=u[f])}return t}),xa=Ze(function(t){return t.push(e,Ki),Sn(Ca,e,t)});function Oa(t,n,r){var i=null==t?e:we(t,n);return i===e?r:i}function Ta(t,n){return null!=t&&ho(t,n,Te)}var Aa=zi(function(t,n,r){null!=n&&\"function\"!=typeof n.toString&&(n=Rt.call(n)),t[n]=r},Xa(rc)),ja=zi(function(t,n,r){null!=n&&\"function\"!=typeof n.toString&&(n=Rt.call(n)),Ct.call(t,n)?t[n].push(r):t[n]=[r]},oo),Ia=Ze(je);function Da(t){return qu(t)?Gr(t):Fe(t)}function Pa(t){return qu(t)?Gr(t,!0):function(t){if(!Xu(t))return function(t){var n=[];if(null!=t)for(var r in xt(t))n.push(r);return n}(t);var n=wo(t),r=[];for(var e in t)(\"constructor\"!=e||!n&&Ct.call(t,e))&&r.push(e);return r}(t)}var La=Ii(function(t,n,r){Ne(t,n,r)}),Ca=Ii(function(t,n,r,e){Ne(t,n,r,e)}),Fa=Xi(function(t,n){var r={};if(null==t)return r;var e=!1;n=Pn(n,function(n){return n=vi(n,t),e||(e=n.length>1),n}),Ai(t,no(t),r),e&&(r=ue(r,7,Qi));for(var i=n.length;i--;)ci(r,n[i]);return r}),Ua=Xi(function(t,n){return null==t?{}:function(t,n){return He(t,n,function(n,r){return Ta(t,r)})}(t,n)});function Ra(t,n){if(null==t)return{};var r=Pn(no(t),function(t){return[t]});return n=oo(n),He(t,r,function(t,r){return n(t,r[0])})}var ka=Zi(Da),za=Zi(Pa);function Na(t){return null==t?[]:Kn(t,Da(t))}var Ma=Ci(function(t,n,r){return n=n.toLowerCase(),t+(r?Ba(n):n)});function Ba(t){return Ya(ya(t).toLowerCase())}function Ha(t){return(t=ya(t))&&t.replace(yt,tr).replace(Kt,\"\")}var Wa=Ci(function(t,n,r){return t+(r?\"-\":\"\")+n.toLowerCase()}),$a=Ci(function(t,n,r){return t+(r?\" \":\"\")+n.toLowerCase()}),qa=Li(\"toLowerCase\"),Va=Ci(function(t,n,r){return t+(r?\"_\":\"\")+n.toLowerCase()}),Za=Ci(function(t,n,r){return t+(r?\" \":\"\")+Ya(n)}),Ga=Ci(function(t,n,r){return t+(r?\" \":\"\")+n.toUpperCase()}),Ya=Li(\"toUpperCase\");function Ka(t,n,r){return t=ya(t),(n=r?e:n)===e?function(t){return tn.test(t)}(t)?function(t){return t.match(Jt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(n)||[]}var Qa=Ze(function(t,n){try{return Sn(t,e,n)}catch(t){return Yu(t)?t:new wt(t)}}),Ja=Xi(function(t,n){return On(n,function(n){n=Ro(n),ee(t,n,ju(t[n],t))}),t});function Xa(t){return function(){return t}}var tc=Ri(),nc=Ri(!0);function rc(t){return t}function ec(t){return Ce(\"function\"==typeof t?t:ue(t,1))}var ic=Ze(function(t,n){return function(r){return je(r,t,n)}}),oc=Ze(function(t,n){return function(r){return je(t,r,n)}});function uc(t,n,r){var e=Da(n),i=me(n,e);null!=r||Xu(n)&&(i.length||!e.length)||(r=n,n=t,t=this,i=me(n,Da(n)));var o=!(Xu(r)&&\"chain\"in r&&!r.chain),u=Ku(t);return On(i,function(r){var e=n[r];t[r]=e,u&&(t.prototype[r]=function(){var n=this.__chain__;if(o||n){var r=t(this.__wrapped__);return(r.__actions__=Ti(this.__actions__)).push({func:e,args:arguments,thisArg:t}),r.__chain__=n,r}return e.apply(t,Ln([this.value()],arguments))})}),t}function ac(){}var cc=Mi(Pn),sc=Mi(An),fc=Mi(Un);function lc(t){return go(t)?Wn(Ro(t)):function(t){return function(n){return we(n,t)}}(t)}var hc=Hi(),pc=Hi(!0);function dc(){return[]}function _c(){return!1}var vc,yc=Ni(function(t,n){return t+n},0),gc=qi(\"ceil\"),bc=Ni(function(t,n){return t/n},1),mc=qi(\"floor\"),wc=Ni(function(t,n){return t*n},1),Ec=qi(\"round\"),Sc=Ni(function(t,n){return t-n},0);return zr.after=function(t,n){if(\"function\"!=typeof n)throw new At(i);return t=pa(t),function(){if(--t<1)return n.apply(this,arguments)}},zr.ary=Tu,zr.assign=ga,zr.assignIn=ba,zr.assignInWith=ma,zr.assignWith=wa,zr.at=Ea,zr.before=Au,zr.bind=ju,zr.bindAll=Ja,zr.bindKey=Iu,zr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Wu(t)?t:[t]},zr.chain=lu,zr.chunk=function(t,n,r){n=(r?yo(t,n,r):n===e)?1:vr(pa(n),0);var i=null==t?0:t.length;if(!i||n<1)return[];for(var o=0,u=0,a=et(pn(i/n));o<i;)a[u++]=ti(t,o,o+=n);return a},zr.compact=function(t){for(var n=-1,r=null==t?0:t.length,e=0,i=[];++n<r;){var o=t[n];o&&(i[e++]=o)}return i},zr.concat=function(){var t=arguments.length;if(!t)return[];for(var n=et(t-1),r=arguments[0],e=t;e--;)n[e-1]=arguments[e];return Ln(Wu(r)?Ti(r):[r],_e(n,1))},zr.cond=function(t){var n=null==t?0:t.length,r=oo();return t=n?Pn(t,function(t){if(\"function\"!=typeof t[1])throw new At(i);return[r(t[0]),t[1]]}):[],Ze(function(r){for(var e=-1;++e<n;){var i=t[e];if(Sn(i[0],this,r))return Sn(i[1],this,r)}})},zr.conforms=function(t){return function(t){var n=Da(t);return function(r){return ae(r,t,n)}}(ue(t,1))},zr.constant=Xa,zr.countBy=du,zr.create=function(t,n){var r=Nr(t);return null==n?r:re(r,n)},zr.curry=function t(n,r,i){var o=Gi(n,8,e,e,e,e,e,r=i?e:r);return o.placeholder=t.placeholder,o},zr.curryRight=function t(n,r,i){var o=Gi(n,16,e,e,e,e,e,r=i?e:r);return o.placeholder=t.placeholder,o},zr.debounce=Du,zr.defaults=Sa,zr.defaultsDeep=xa,zr.defer=Pu,zr.delay=Lu,zr.difference=No,zr.differenceBy=Mo,zr.differenceWith=Bo,zr.drop=function(t,n,r){var i=null==t?0:t.length;return i?ti(t,(n=r||n===e?1:pa(n))<0?0:n,i):[]},zr.dropRight=function(t,n,r){var i=null==t?0:t.length;return i?ti(t,0,(n=i-(n=r||n===e?1:pa(n)))<0?0:n):[]},zr.dropRightWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!0,!0):[]},zr.dropWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!0):[]},zr.fill=function(t,n,r,i){var o=null==t?0:t.length;return o?(r&&\"number\"!=typeof r&&yo(t,n,r)&&(r=0,i=o),function(t,n,r,i){var o=t.length;for((r=pa(r))<0&&(r=-r>o?0:o+r),(i=i===e||i>o?o:pa(i))<0&&(i+=o),i=r>i?0:da(i);r<i;)t[r++]=n;return t}(t,n,r,i)):[]},zr.filter=function(t,n){return(Wu(t)?jn:de)(t,oo(n,3))},zr.flatMap=function(t,n){return _e(Eu(t,n),1)},zr.flatMapDeep=function(t,n){return _e(Eu(t,n),s)},zr.flatMapDepth=function(t,n,r){return r=r===e?1:pa(r),_e(Eu(t,n),r)},zr.flatten=$o,zr.flattenDeep=function(t){return null!=t&&t.length?_e(t,s):[]},zr.flattenDepth=function(t,n){return null!=t&&t.length?_e(t,n=n===e?1:pa(n)):[]},zr.flip=function(t){return Gi(t,512)},zr.flow=tc,zr.flowRight=nc,zr.fromPairs=function(t){for(var n=-1,r=null==t?0:t.length,e={};++n<r;){var i=t[n];ee(e,i[0],i[1])}return e},zr.functions=function(t){return null==t?[]:me(t,Da(t))},zr.functionsIn=function(t){return null==t?[]:me(t,Pa(t))},zr.groupBy=bu,zr.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},zr.intersection=Vo,zr.intersectionBy=Zo,zr.intersectionWith=Go,zr.invert=Aa,zr.invertBy=ja,zr.invokeMap=mu,zr.iteratee=ec,zr.keyBy=wu,zr.keys=Da,zr.keysIn=Pa,zr.map=Eu,zr.mapKeys=function(t,n){var r={};return n=oo(n,3),ge(t,function(t,e,i){ee(r,n(t,e,i),t)}),r},zr.mapValues=function(t,n){var r={};return n=oo(n,3),ge(t,function(t,e,i){ee(r,e,n(t,e,i))}),r},zr.matches=function(t){return ke(ue(t,1))},zr.matchesProperty=function(t,n){return ze(t,ue(n,1))},zr.memoize=Cu,zr.merge=La,zr.mergeWith=Ca,zr.method=ic,zr.methodOf=oc,zr.mixin=uc,zr.negate=Fu,zr.nthArg=function(t){return t=pa(t),Ze(function(n){return Me(n,t)})},zr.omit=Fa,zr.omitBy=function(t,n){return Ra(t,Fu(oo(n)))},zr.once=function(t){return Au(2,t)},zr.orderBy=function(t,n,r,i){return null==t?[]:(Wu(n)||(n=null==n?[]:[n]),Wu(r=i?e:r)||(r=null==r?[]:[r]),Be(t,n,r))},zr.over=cc,zr.overArgs=Uu,zr.overEvery=sc,zr.overSome=fc,zr.partial=Ru,zr.partialRight=ku,zr.partition=Su,zr.pick=Ua,zr.pickBy=Ra,zr.property=lc,zr.propertyOf=function(t){return function(n){return null==t?e:we(t,n)}},zr.pull=Ko,zr.pullAll=Qo,zr.pullAllBy=function(t,n,r){return t&&t.length&&n&&n.length?We(t,n,oo(r,2)):t},zr.pullAllWith=function(t,n,r){return t&&t.length&&n&&n.length?We(t,n,e,r):t},zr.pullAt=Jo,zr.range=hc,zr.rangeRight=pc,zr.rearg=zu,zr.reject=function(t,n){return(Wu(t)?jn:de)(t,Fu(oo(n,3)))},zr.remove=function(t,n){var r=[];if(!t||!t.length)return r;var e=-1,i=[],o=t.length;for(n=oo(n,3);++e<o;){var u=t[e];n(u,e,t)&&(r.push(u),i.push(e))}return $e(t,i),r},zr.rest=function(t,n){if(\"function\"!=typeof t)throw new At(i);return Ze(t,n=n===e?n:pa(n))},zr.reverse=Xo,zr.sampleSize=function(t,n,r){return n=(r?yo(t,n,r):n===e)?1:pa(n),(Wu(t)?Kr:Ye)(t,n)},zr.set=function(t,n,r){return null==t?t:Ke(t,n,r)},zr.setWith=function(t,n,r,i){return i=\"function\"==typeof i?i:e,null==t?t:Ke(t,n,r,i)},zr.shuffle=function(t){return(Wu(t)?Qr:Xe)(t)},zr.slice=function(t,n,r){var i=null==t?0:t.length;return i?(r&&\"number\"!=typeof r&&yo(t,n,r)?(n=0,r=i):(n=null==n?0:pa(n),r=r===e?i:pa(r)),ti(t,n,r)):[]},zr.sortBy=xu,zr.sortedUniq=function(t){return t&&t.length?ii(t):[]},zr.sortedUniqBy=function(t,n){return t&&t.length?ii(t,oo(n,2)):[]},zr.split=function(t,n,r){return r&&\"number\"!=typeof r&&yo(t,n,r)&&(n=r=e),(r=r===e?h:r>>>0)?(t=ya(t))&&(\"string\"==typeof n||null!=n&&!ia(n))&&!(n=ui(n))&&er(t)?gi(fr(t),0,r):t.split(n,r):[]},zr.spread=function(t,n){if(\"function\"!=typeof t)throw new At(i);return n=null==n?0:vr(pa(n),0),Ze(function(r){var e=r[n],i=gi(r,0,n);return e&&Ln(i,e),Sn(t,this,i)})},zr.tail=function(t){var n=null==t?0:t.length;return n?ti(t,1,n):[]},zr.take=function(t,n,r){return t&&t.length?ti(t,0,(n=r||n===e?1:pa(n))<0?0:n):[]},zr.takeRight=function(t,n,r){var i=null==t?0:t.length;return i?ti(t,(n=i-(n=r||n===e?1:pa(n)))<0?0:n,i):[]},zr.takeRightWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!1,!0):[]},zr.takeWhile=function(t,n){return t&&t.length?fi(t,oo(n,3)):[]},zr.tap=function(t,n){return n(t),t},zr.throttle=function(t,n,r){var e=!0,o=!0;if(\"function\"!=typeof t)throw new At(i);return Xu(r)&&(e=\"leading\"in r?!!r.leading:e,o=\"trailing\"in r?!!r.trailing:o),Du(t,n,{leading:e,maxWait:n,trailing:o})},zr.thru=hu,zr.toArray=la,zr.toPairs=ka,zr.toPairsIn=za,zr.toPath=function(t){return Wu(t)?Pn(t,Ro):aa(t)?[t]:Ti(Uo(ya(t)))},zr.toPlainObject=va,zr.transform=function(t,n,r){var e=Wu(t),i=e||Zu(t)||ca(t);if(n=oo(n,4),null==r){var o=t&&t.constructor;r=i?e?new o:[]:Xu(t)&&Ku(o)?Nr($t(t)):{}}return(i?On:ge)(t,function(t,e,i){return n(r,t,e,i)}),r},zr.unary=function(t){return Tu(t,1)},zr.union=tu,zr.unionBy=nu,zr.unionWith=ru,zr.uniq=function(t){return t&&t.length?ai(t):[]},zr.uniqBy=function(t,n){return t&&t.length?ai(t,oo(n,2)):[]},zr.uniqWith=function(t,n){return n=\"function\"==typeof n?n:e,t&&t.length?ai(t,e,n):[]},zr.unset=function(t,n){return null==t||ci(t,n)},zr.unzip=eu,zr.unzipWith=iu,zr.update=function(t,n,r){return null==t?t:si(t,n,_i(r))},zr.updateWith=function(t,n,r,i){return i=\"function\"==typeof i?i:e,null==t?t:si(t,n,_i(r),i)},zr.values=Na,zr.valuesIn=function(t){return null==t?[]:Kn(t,Pa(t))},zr.without=ou,zr.words=Ka,zr.wrap=function(t,n){return Ru(_i(n),t)},zr.xor=uu,zr.xorBy=au,zr.xorWith=cu,zr.zip=su,zr.zipObject=function(t,n){return pi(t||[],n||[],Xr)},zr.zipObjectDeep=function(t,n){return pi(t||[],n||[],Ke)},zr.zipWith=fu,zr.entries=ka,zr.entriesIn=za,zr.extend=ba,zr.extendWith=ma,uc(zr,zr),zr.add=yc,zr.attempt=Qa,zr.camelCase=Ma,zr.capitalize=Ba,zr.ceil=gc,zr.clamp=function(t,n,r){return r===e&&(r=n,n=e),r!==e&&(r=(r=_a(r))==r?r:0),n!==e&&(n=(n=_a(n))==n?n:0),oe(_a(t),n,r)},zr.clone=function(t){return ue(t,4)},zr.cloneDeep=function(t){return ue(t,5)},zr.cloneDeepWith=function(t,n){return ue(t,5,n=\"function\"==typeof n?n:e)},zr.cloneWith=function(t,n){return ue(t,4,n=\"function\"==typeof n?n:e)},zr.conformsTo=function(t,n){return null==n||ae(t,n,Da(n))},zr.deburr=Ha,zr.defaultTo=function(t,n){return null==t||t!=t?n:t},zr.divide=bc,zr.endsWith=function(t,n,r){t=ya(t),n=ui(n);var i=t.length,o=r=r===e?i:oe(pa(r),0,i);return(r-=n.length)>=0&&t.slice(r,o)==n},zr.eq=Nu,zr.escape=function(t){return(t=ya(t))&&Z.test(t)?t.replace(q,nr):t},zr.escapeRegExp=function(t){return(t=ya(t))&&nt.test(t)?t.replace(tt,\"\\\\$&\"):t},zr.every=function(t,n,r){var i=Wu(t)?An:he;return r&&yo(t,n,r)&&(n=e),i(t,oo(n,3))},zr.find=_u,zr.findIndex=Ho,zr.findKey=function(t,n){return kn(t,oo(n,3),ge)},zr.findLast=vu,zr.findLastIndex=Wo,zr.findLastKey=function(t,n){return kn(t,oo(n,3),be)},zr.floor=mc,zr.forEach=yu,zr.forEachRight=gu,zr.forIn=function(t,n){return null==t?t:ve(t,oo(n,3),Pa)},zr.forInRight=function(t,n){return null==t?t:ye(t,oo(n,3),Pa)},zr.forOwn=function(t,n){return t&&ge(t,oo(n,3))},zr.forOwnRight=function(t,n){return t&&be(t,oo(n,3))},zr.get=Oa,zr.gt=Mu,zr.gte=Bu,zr.has=function(t,n){return null!=t&&ho(t,n,Oe)},zr.hasIn=Ta,zr.head=qo,zr.identity=rc,zr.includes=function(t,n,r,e){t=qu(t)?t:Na(t),r=r&&!e?pa(r):0;var i=t.length;return r<0&&(r=vr(i+r,0)),ua(t)?r<=i&&t.indexOf(n,r)>-1:!!i&&Nn(t,n,r)>-1},zr.indexOf=function(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=null==r?0:pa(r);return i<0&&(i=vr(e+i,0)),Nn(t,n,i)},zr.inRange=function(t,n,r){return n=ha(n),r===e?(r=n,n=0):r=ha(r),function(t,n,r){return t>=yr(n,r)&&t<vr(n,r)}(t=_a(t),n,r)},zr.invoke=Ia,zr.isArguments=Hu,zr.isArray=Wu,zr.isArrayBuffer=$u,zr.isArrayLike=qu,zr.isArrayLikeObject=Vu,zr.isBoolean=function(t){return!0===t||!1===t||ta(t)&&Se(t)==v},zr.isBuffer=Zu,zr.isDate=Gu,zr.isElement=function(t){return ta(t)&&1===t.nodeType&&!ea(t)},zr.isEmpty=function(t){if(null==t)return!0;if(qu(t)&&(Wu(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Zu(t)||ca(t)||Hu(t)))return!t.length;var n=lo(t);if(n==w||n==T)return!t.size;if(wo(t))return!Fe(t).length;for(var r in t)if(Ct.call(t,r))return!1;return!0},zr.isEqual=function(t,n){return De(t,n)},zr.isEqualWith=function(t,n,r){var i=(r=\"function\"==typeof r?r:e)?r(t,n):e;return i===e?De(t,n,e,r):!!i},zr.isError=Yu,zr.isFinite=function(t){return\"number\"==typeof t&&$n(t)},zr.isFunction=Ku,zr.isInteger=Qu,zr.isLength=Ju,zr.isMap=na,zr.isMatch=function(t,n){return t===n||Pe(t,n,ao(n))},zr.isMatchWith=function(t,n,r){return r=\"function\"==typeof r?r:e,Pe(t,n,ao(n),r)},zr.isNaN=function(t){return ra(t)&&t!=+t},zr.isNative=function(t){if(mo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Le(t)},zr.isNil=function(t){return null==t},zr.isNull=function(t){return null===t},zr.isNumber=ra,zr.isObject=Xu,zr.isObjectLike=ta,zr.isPlainObject=ea,zr.isRegExp=ia,zr.isSafeInteger=function(t){return Qu(t)&&t>=-9007199254740991&&t<=f},zr.isSet=oa,zr.isString=ua,zr.isSymbol=aa,zr.isTypedArray=ca,zr.isUndefined=function(t){return t===e},zr.isWeakMap=function(t){return ta(t)&&lo(t)==I},zr.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==Se(t)},zr.join=function(t,n){return null==t?\"\":dr.call(t,n)},zr.kebabCase=Wa,zr.last=Yo,zr.lastIndexOf=function(t,n,r){var i=null==t?0:t.length;if(!i)return-1;var o=i;return r!==e&&(o=(o=pa(r))<0?vr(i+o,0):yr(o,i-1)),n==n?function(t,n,r){for(var e=r+1;e--;)if(t[e]===n)return e;return e}(t,n,o):zn(t,Bn,o,!0)},zr.lowerCase=$a,zr.lowerFirst=qa,zr.lt=sa,zr.lte=fa,zr.max=function(t){return t&&t.length?pe(t,rc,xe):e},zr.maxBy=function(t,n){return t&&t.length?pe(t,oo(n,2),xe):e},zr.mean=function(t){return Hn(t,rc)},zr.meanBy=function(t,n){return Hn(t,oo(n,2))},zr.min=function(t){return t&&t.length?pe(t,rc,Ue):e},zr.minBy=function(t,n){return t&&t.length?pe(t,oo(n,2),Ue):e},zr.stubArray=dc,zr.stubFalse=_c,zr.stubObject=function(){return{}},zr.stubString=function(){return\"\"},zr.stubTrue=function(){return!0},zr.multiply=wc,zr.nth=function(t,n){return t&&t.length?Me(t,pa(n)):e},zr.noConflict=function(){return ln._===this&&(ln._=zt),this},zr.noop=ac,zr.now=Ou,zr.pad=function(t,n,r){t=ya(t);var e=(n=pa(n))?sr(t):0;if(!n||e>=n)return t;var i=(n-e)/2;return Bi(_n(i),r)+t+Bi(pn(i),r)},zr.padEnd=function(t,n,r){t=ya(t);var e=(n=pa(n))?sr(t):0;return n&&e<n?t+Bi(n-e,r):t},zr.padStart=function(t,n,r){t=ya(t);var e=(n=pa(n))?sr(t):0;return n&&e<n?Bi(n-e,r)+t:t},zr.parseInt=function(t,n,r){return r||null==n?n=0:n&&(n=+n),br(ya(t).replace(rt,\"\"),n||0)},zr.random=function(t,n,r){if(r&&\"boolean\"!=typeof r&&yo(t,n,r)&&(n=r=e),r===e&&(\"boolean\"==typeof n?(r=n,n=e):\"boolean\"==typeof t&&(r=t,t=e)),t===e&&n===e?(t=0,n=1):(t=ha(t),n===e?(n=t,t=0):n=ha(n)),t>n){var i=t;t=n,n=i}if(r||t%1||n%1){var o=mr();return yr(t+o*(n-t+an(\"1e-\"+((o+\"\").length-1))),n)}return qe(t,n)},zr.reduce=function(t,n,r){var e=Wu(t)?Cn:qn,i=arguments.length<3;return e(t,oo(n,4),r,i,fe)},zr.reduceRight=function(t,n,r){var e=Wu(t)?Fn:qn,i=arguments.length<3;return e(t,oo(n,4),r,i,le)},zr.repeat=function(t,n,r){return n=(r?yo(t,n,r):n===e)?1:pa(n),Ve(ya(t),n)},zr.replace=function(){var t=arguments,n=ya(t[0]);return t.length<3?n:n.replace(t[1],t[2])},zr.result=function(t,n,r){var i=-1,o=(n=vi(n,t)).length;for(o||(o=1,t=e);++i<o;){var u=null==t?e:t[Ro(n[i])];u===e&&(i=o,u=r),t=Ku(u)?u.call(t):u}return t},zr.round=Ec,zr.runInContext=t,zr.sample=function(t){return(Wu(t)?Yr:Ge)(t)},zr.size=function(t){if(null==t)return 0;if(qu(t))return ua(t)?sr(t):t.length;var n=lo(t);return n==w||n==T?t.size:Fe(t).length},zr.snakeCase=Va,zr.some=function(t,n,r){var i=Wu(t)?Un:ni;return r&&yo(t,n,r)&&(n=e),i(t,oo(n,3))},zr.sortedIndex=function(t,n){return ri(t,n)},zr.sortedIndexBy=function(t,n,r){return ei(t,n,oo(r,2))},zr.sortedIndexOf=function(t,n){var r=null==t?0:t.length;if(r){var e=ri(t,n);if(e<r&&Nu(t[e],n))return e}return-1},zr.sortedLastIndex=function(t,n){return ri(t,n,!0)},zr.sortedLastIndexBy=function(t,n,r){return ei(t,n,oo(r,2),!0)},zr.sortedLastIndexOf=function(t,n){if(null!=t&&t.length){var r=ri(t,n,!0)-1;if(Nu(t[r],n))return r}return-1},zr.startCase=Za,zr.startsWith=function(t,n,r){return t=ya(t),r=null==r?0:oe(pa(r),0,t.length),n=ui(n),t.slice(r,r+n.length)==n},zr.subtract=Sc,zr.sum=function(t){return t&&t.length?Vn(t,rc):0},zr.sumBy=function(t,n){return t&&t.length?Vn(t,oo(n,2)):0},zr.template=function(t,n,r){var i=zr.templateSettings;r&&yo(t,n,r)&&(n=e),t=ya(t),n=wa({},n,i,Yi);var o=wa({},n.imports,i.imports,Yi),u=Da(o),a=Kn(o,u);On(u,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,f=0,l=n.interpolate||gt,h=\"__p += '\",p=Ot((n.escape||gt).source+\"|\"+l.source+\"|\"+(l===K?ft:gt).source+\"|\"+(n.evaluate||gt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Ct.call(n,\"sourceURL\")?(n.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++rn+\"]\")+\"\\n\";t.replace(p,function(n,r,e,i,o,u){return e||(e=i),h+=t.slice(f,u).replace(bt,rr),r&&(c=!0,h+=\"' +\\n__e(\"+r+\") +\\n'\"),o&&(s=!0,h+=\"';\\n\"+o+\";\\n__p += '\"),e&&(h+=\"' +\\n((__t = (\"+e+\")) == null ? '' : __t) +\\n'\"),f=u+n.length,n}),h+=\"';\\n\";var _=Ct.call(n,\"variable\")&&n.variable;if(_){if(ct.test(_))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(s?h.replace(B,\"\"):h).replace(H,\"$1\").replace(W,\"$1;\"),h=\"function(\"+(_||\"obj\")+\") {\\n\"+(_?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var v=Qa(function(){return Et(u,d+\"return \"+h).apply(e,a)});if(v.source=h,Yu(v))throw v;return v},zr.times=function(t,n){if((t=pa(t))<1||t>f)return[];var r=h,e=yr(t,h);n=oo(n),t-=h;for(var i=Zn(e,n);++r<t;)n(r);return i},zr.toFinite=ha,zr.toInteger=pa,zr.toLength=da,zr.toLower=function(t){return ya(t).toLowerCase()},zr.toNumber=_a,zr.toSafeInteger=function(t){return t?oe(pa(t),-9007199254740991,f):0===t?t:0},zr.toString=ya,zr.toUpper=function(t){return ya(t).toUpperCase()},zr.trim=function(t,n,r){if((t=ya(t))&&(r||n===e))return Gn(t);if(!t||!(n=ui(n)))return t;var i=fr(t),o=fr(n);return gi(i,Jn(i,o),Xn(i,o)+1).join(\"\")},zr.trimEnd=function(t,n,r){if((t=ya(t))&&(r||n===e))return t.slice(0,lr(t)+1);if(!t||!(n=ui(n)))return t;var i=fr(t);return gi(i,0,Xn(i,fr(n))+1).join(\"\")},zr.trimStart=function(t,n,r){if((t=ya(t))&&(r||n===e))return t.replace(rt,\"\");if(!t||!(n=ui(n)))return t;var i=fr(t);return gi(i,Jn(i,fr(n))).join(\"\")},zr.truncate=function(t,n){var r=30,i=\"...\";if(Xu(n)){var o=\"separator\"in n?n.separator:o;r=\"length\"in n?pa(n.length):r,i=\"omission\"in n?ui(n.omission):i}var u=(t=ya(t)).length;if(er(t)){var a=fr(t);u=a.length}if(r>=u)return t;var c=r-sr(i);if(c<1)return i;var s=a?gi(a,0,c).join(\"\"):t.slice(0,c);if(o===e)return s+i;if(a&&(c+=s.length-c),ia(o)){if(t.slice(c).search(o)){var f,l=s;for(o.global||(o=Ot(o.source,ya(lt.exec(o))+\"g\")),o.lastIndex=0;f=o.exec(l);)var h=f.index;s=s.slice(0,h===e?c:h)}}else if(t.indexOf(ui(o),c)!=c){var p=s.lastIndexOf(o);p>-1&&(s=s.slice(0,p))}return s+i},zr.unescape=function(t){return(t=ya(t))&&V.test(t)?t.replace($,hr):t},zr.uniqueId=function(t){var n=++Ft;return ya(t)+n},zr.upperCase=Ga,zr.upperFirst=Ya,zr.each=yu,zr.eachRight=gu,zr.first=qo,uc(zr,(vc={},ge(zr,function(t,n){Ct.call(zr.prototype,n)||(vc[n]=t)}),vc),{chain:!1}),zr.VERSION=\"4.18.1\",On([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){zr[t].placeholder=zr}),On([\"drop\",\"take\"],function(t,n){Hr.prototype[t]=function(r){r=r===e?1:vr(pa(r),0);var i=this.__filtered__&&!n?new Hr(this):this.clone();return i.__filtered__?i.__takeCount__=yr(r,i.__takeCount__):i.__views__.push({size:yr(r,h),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Hr.prototype[t+\"Right\"]=function(n){return this.reverse()[t](n).reverse()}}),On([\"filter\",\"map\",\"takeWhile\"],function(t,n){var r=n+1,e=1==r||3==r;Hr.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:oo(t,3),type:r}),n.__filtered__=n.__filtered__||e,n}}),On([\"head\",\"last\"],function(t,n){var r=\"take\"+(n?\"Right\":\"\");Hr.prototype[t]=function(){return this[r](1).value()[0]}}),On([\"initial\",\"tail\"],function(t,n){var r=\"drop\"+(n?\"\":\"Right\");Hr.prototype[t]=function(){return this.__filtered__?new Hr(this):this[r](1)}}),Hr.prototype.compact=function(){return this.filter(rc)},Hr.prototype.find=function(t){return this.filter(t).head()},Hr.prototype.findLast=function(t){return this.reverse().find(t)},Hr.prototype.invokeMap=Ze(function(t,n){return\"function\"==typeof t?new Hr(this):this.map(function(r){return je(r,t,n)})}),Hr.prototype.reject=function(t){return this.filter(Fu(oo(t)))},Hr.prototype.slice=function(t,n){t=pa(t);var r=this;return r.__filtered__&&(t>0||n<0)?new Hr(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),n!==e&&(r=(n=pa(n))<0?r.dropRight(-n):r.take(n-t)),r)},Hr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Hr.prototype.toArray=function(){return this.take(h)},ge(Hr.prototype,function(t,n){var r=/^(?:filter|find|map|reject)|While$/.test(n),i=/^(?:head|last)$/.test(n),o=zr[i?\"take\"+(\"last\"==n?\"Right\":\"\"):n],u=i||/^find/.test(n);o&&(zr.prototype[n]=function(){var n=this.__wrapped__,a=i?[1]:arguments,c=n instanceof Hr,s=a[0],f=c||Wu(n),l=function(t){var n=o.apply(zr,Ln([t],a));return i&&h?n[0]:n};f&&r&&\"function\"==typeof s&&1!=s.length&&(c=f=!1);var h=this.__chain__,p=!!this.__actions__.length,d=u&&!h,_=c&&!p;if(!u&&f){n=_?n:new Hr(this);var v=t.apply(n,a);return v.__actions__.push({func:hu,args:[l],thisArg:e}),new Br(v,h)}return d&&_?t.apply(this,a):(v=this.thru(l),d?i?v.value()[0]:v.value():v)})}),On([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var n=jt[t],r=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",e=/^(?:pop|shift)$/.test(t);zr.prototype[t]=function(){var t=arguments;if(e&&!this.__chain__){var i=this.value();return n.apply(Wu(i)?i:[],t)}return this[r](function(r){return n.apply(Wu(r)?r:[],t)})}}),ge(Hr.prototype,function(t,n){var r=zr[n];if(r){var e=r.name+\"\";Ct.call(Ir,e)||(Ir[e]=[]),Ir[e].push({name:n,func:r})}}),Ir[ki(e,2).name]=[{name:\"wrapper\",func:e}],Hr.prototype.clone=function(){var t=new Hr(this.__wrapped__);return t.__actions__=Ti(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ti(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ti(this.__views__),t},Hr.prototype.reverse=function(){if(this.__filtered__){var t=new Hr(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Hr.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,r=Wu(t),e=n<0,i=r?t.length:0,o=function(t,n,r){for(var e=-1,i=r.length;++e<i;){var o=r[e],u=o.size;switch(o.type){case\"drop\":t+=u;break;case\"dropRight\":n-=u;break;case\"take\":n=yr(n,t+u);break;case\"takeRight\":t=vr(t,n-u)}}return{start:t,end:n}}(0,i,this.__views__),u=o.start,a=o.end,c=a-u,s=e?a:u-1,f=this.__iteratees__,l=f.length,h=0,p=yr(c,this.__takeCount__);if(!r||!e&&i==c&&p==c)return li(t,this.__actions__);var d=[];t:for(;c--&&h<p;){for(var _=-1,v=t[s+=n];++_<l;){var y=f[_],g=y.iteratee,b=y.type,m=g(v);if(2==b)v=m;else if(!m){if(1==b)continue t;break t}}d[h++]=v}return d},zr.prototype.at=pu,zr.prototype.chain=function(){return lu(this)},zr.prototype.commit=function(){return new Br(this.value(),this.__chain__)},zr.prototype.next=function(){this.__values__===e&&(this.__values__=la(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?e:this.__values__[this.__index__++]}},zr.prototype.plant=function(t){for(var n,r=this;r instanceof Mr;){var i=zo(r);i.__index__=0,i.__values__=e,n?o.__wrapped__=i:n=i;var o=i;r=r.__wrapped__}return o.__wrapped__=t,n},zr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Hr){var n=t;return this.__actions__.length&&(n=new Hr(this)),(n=n.reverse()).__actions__.push({func:hu,args:[Xo],thisArg:e}),new Br(n,this.__chain__)}return this.thru(Xo)},zr.prototype.toJSON=zr.prototype.valueOf=zr.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},zr.prototype.first=zr.prototype.head,Qt&&(zr.prototype[Qt]=function(){return this}),zr}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(ln._=pr,define(function(){return pr})):pn?((pn.exports=pr)._=pr,hn._=pr):ln._=pr}.call(this)}},n={};function r(e){var i=n[e];if(void 0!==i)return i.exports;var o=n[e]={id:e,loaded:!1,exports:{}};return t[e].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.d=(t,n)=>{for(var e in n)r.o(n,e)&&!r.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var e={};(()=>{\"use strict\";r.r(e),r.d(e,{createHostedFormService:()=>yt,createStoredCardHostedFormService:()=>bt});var t=r(9440);class n{constructor(t){const n=new Promise((t,n)=>{this.cancel=n});this.promise=Promise.race([t,n])}}class i extends Error{constructor(t){var n;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",n=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class o extends i{constructor(t){super(t||\"Unable to proceed because the required element is unexpectedly detached from the page.\"),this.name=\"UnexpectedDetachmentError\",this.type=\"unexpected_detachment\"}}class u{constructor(t){this._mutationObserver=t}ensurePresence(t,r){return e=this,i=void 0,a=function*(){const e=new n(r),i=this._mutationObserver.create(n=>{n.forEach(n=>{0!==Array.from(n.removedNodes).filter(n=>t.some(t=>n===t||n.contains(t))).length&&e.cancel(new o)})});i.observe(document.body,{childList:!0,subtree:!0});try{const t=yield e.promise;return i.disconnect(),t}catch(t){throw i.disconnect(),t}},new((u=void 0)||(u=Promise))(function(t,n){function r(t){try{c(a.next(t))}catch(t){n(t)}}function o(t){try{c(a.throw(t))}catch(t){n(t)}}function c(n){var e;n.done?t(n.value):(e=n.value,e instanceof u?e:new u(function(t){t(e)})).then(r,o)}c((a=a.apply(e,i||[])).next())});var e,i,u,a}}class a{constructor(t=window){this._window=t}create(t){return new this._window.MutationObserver(t)}}var c=function(t,n){return c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var r in n)n.hasOwnProperty(r)&&(t[r]=n[r])},c(t,n)};function s(t,n){function r(){this.constructor=t}c(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}function f(t){return\"function\"==typeof t}var l=!1,h={Promise:void 0,set useDeprecatedSynchronousErrorHandling(t){t&&(new Error).stack,l=t},get useDeprecatedSynchronousErrorHandling(){return l}};function p(t){setTimeout(function(){throw t},0)}var d={closed:!0,next:function(t){},error:function(t){if(h.useDeprecatedSynchronousErrorHandling)throw t;p(t)},complete:function(){}},_=function(){return Array.isArray||function(t){return t&&\"number\"==typeof t.length}}();function v(t){return null!==t&&\"object\"==typeof t}var y=function(){function t(t){return Error.call(this),this.message=t?t.length+\" errors occurred during unsubscription:\\n\"+t.map(function(t,n){return n+1+\") \"+t.toString()}).join(\"\\n  \"):\"\",this.name=\"UnsubscriptionError\",this.errors=t,this}return t.prototype=Object.create(Error.prototype),t}(),g=function(){function t(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._ctorUnsubscribe=!0,this._unsubscribe=t)}return t.prototype.unsubscribe=function(){var n;if(!this.closed){var r=this,e=r._parentOrParents,i=r._ctorUnsubscribe,o=r._unsubscribe,u=r._subscriptions;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,e instanceof t)e.remove(this);else if(null!==e)for(var a=0;a<e.length;++a)e[a].remove(this);if(f(o)){i&&(this._unsubscribe=void 0);try{o.call(this)}catch(t){n=t instanceof y?b(t.errors):[t]}}if(_(u)){a=-1;for(var c=u.length;++a<c;){var s=u[a];if(v(s))try{s.unsubscribe()}catch(t){n=n||[],t instanceof y?n=n.concat(b(t.errors)):n.push(t)}}}if(n)throw new y(n)}},t.prototype.add=function(n){var r=n;if(!n)return t.EMPTY;switch(typeof n){case\"function\":r=new t(n);case\"object\":if(r===this||r.closed||\"function\"!=typeof r.unsubscribe)return r;if(this.closed)return r.unsubscribe(),r;if(!(r instanceof t)){var e=r;(r=new t)._subscriptions=[e]}break;default:throw new Error(\"unrecognized teardown \"+n+\" added to Subscription.\")}var i=r._parentOrParents;if(null===i)r._parentOrParents=this;else if(i instanceof t){if(i===this)return r;r._parentOrParents=[i,this]}else{if(-1!==i.indexOf(this))return r;i.push(this)}var o=this._subscriptions;return null===o?this._subscriptions=[r]:o.push(r),r},t.prototype.remove=function(t){var n=this._subscriptions;if(n){var r=n.indexOf(t);-1!==r&&n.splice(r,1)}},t.EMPTY=function(t){return t.closed=!0,t}(new t),t}();function b(t){return t.reduce(function(t,n){return t.concat(n instanceof y?n.errors:n)},[])}var m=function(){return\"function\"==typeof Symbol?Symbol(\"rxSubscriber\"):\"@@rxSubscriber_\"+Math.random()}(),w=function(t){function n(r,e,i){var o=t.call(this)||this;switch(o.syncErrorValue=null,o.syncErrorThrown=!1,o.syncErrorThrowable=!1,o.isStopped=!1,arguments.length){case 0:o.destination=d;break;case 1:if(!r){o.destination=d;break}if(\"object\"==typeof r){r instanceof n?(o.syncErrorThrowable=r.syncErrorThrowable,o.destination=r,r.add(o)):(o.syncErrorThrowable=!0,o.destination=new E(o,r));break}default:o.syncErrorThrowable=!0,o.destination=new E(o,r,e,i)}return o}return s(n,t),n.prototype[m]=function(){return this},n.create=function(t,r,e){var i=new n(t,r,e);return i.syncErrorThrowable=!1,i},n.prototype.next=function(t){this.isStopped||this._next(t)},n.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},n.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},n.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this))},n.prototype._next=function(t){this.destination.next(t)},n.prototype._error=function(t){this.destination.error(t),this.unsubscribe()},n.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},n.prototype._unsubscribeAndRecycle=function(){var t=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this},n}(g),E=function(t){function n(n,r,e,i){var o,u=t.call(this)||this;u._parentSubscriber=n;var a=u;return f(r)?o=r:r&&(o=r.next,e=r.error,i=r.complete,r!==d&&(f((a=Object.create(r)).unsubscribe)&&u.add(a.unsubscribe.bind(a)),a.unsubscribe=u.unsubscribe.bind(u))),u._context=a,u._next=o,u._error=e,u._complete=i,u}return s(n,t),n.prototype.next=function(t){if(!this.isStopped&&this._next){var n=this._parentSubscriber;h.useDeprecatedSynchronousErrorHandling&&n.syncErrorThrowable?this.__tryOrSetError(n,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}},n.prototype.error=function(t){if(!this.isStopped){var n=this._parentSubscriber,r=h.useDeprecatedSynchronousErrorHandling;if(this._error)r&&n.syncErrorThrowable?(this.__tryOrSetError(n,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(n.syncErrorThrowable)r?(n.syncErrorValue=t,n.syncErrorThrown=!0):p(t),this.unsubscribe();else{if(this.unsubscribe(),r)throw t;p(t)}}},n.prototype.complete=function(){var t=this;if(!this.isStopped){var n=this._parentSubscriber;if(this._complete){var r=function(){return t._complete.call(t._context)};h.useDeprecatedSynchronousErrorHandling&&n.syncErrorThrowable?(this.__tryOrSetError(n,r),this.unsubscribe()):(this.__tryOrUnsub(r),this.unsubscribe())}else this.unsubscribe()}},n.prototype.__tryOrUnsub=function(t,n){try{t.call(this._context,n)}catch(t){if(this.unsubscribe(),h.useDeprecatedSynchronousErrorHandling)throw t;p(t)}},n.prototype.__tryOrSetError=function(t,n,r){if(!h.useDeprecatedSynchronousErrorHandling)throw new Error(\"bad call\");try{n.call(this._context,r)}catch(n){return h.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=n,t.syncErrorThrown=!0,!0):(p(n),!0)}return!1},n.prototype._unsubscribe=function(){var t=this._parentSubscriber;this._context=null,this._parentSubscriber=null,t.unsubscribe()},n}(w),S=function(){return\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\"}();function x(t){return t}var O=function(){function t(t){this._isScalar=!1,t&&(this._subscribe=t)}return t.prototype.lift=function(n){var r=new t;return r.source=this,r.operator=n,r},t.prototype.subscribe=function(t,n,r){var e=this.operator,i=function(t,n,r){if(t){if(t instanceof w)return t;if(t[m])return t[m]()}return t||n||r?new w(t,n,r):new w(d)}(t,n,r);if(e?i.add(e.call(i,this.source)):i.add(this.source||h.useDeprecatedSynchronousErrorHandling&&!i.syncErrorThrowable?this._subscribe(i):this._trySubscribe(i)),h.useDeprecatedSynchronousErrorHandling&&i.syncErrorThrowable&&(i.syncErrorThrowable=!1,i.syncErrorThrown))throw i.syncErrorValue;return i},t.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(n){h.useDeprecatedSynchronousErrorHandling&&(t.syncErrorThrown=!0,t.syncErrorValue=n),function(t){for(;t;){var n=t,r=n.closed,e=n.destination,i=n.isStopped;if(r||i)return!1;t=e&&e instanceof w?e:null}return!0}(t)?t.error(n):console.warn(n)}},t.prototype.forEach=function(t,n){var r=this;return new(n=T(n))(function(n,e){var i;i=r.subscribe(function(n){try{t(n)}catch(t){e(t),i&&i.unsubscribe()}},e,n)})},t.prototype._subscribe=function(t){var n=this.source;return n&&n.subscribe(t)},t.prototype[S]=function(){return this},t.prototype.pipe=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return 0===t.length?this:(0===(r=t).length?x:1===r.length?r[0]:function(t){return r.reduce(function(t,n){return n(t)},t)})(this);var r},t.prototype.toPromise=function(t){var n=this;return new(t=T(t))(function(t,r){var e;n.subscribe(function(t){return e=t},function(t){return r(t)},function(){return t(e)})})},t.create=function(n){return new t(n)},t}();function T(t){if(t||(t=h.Promise||Promise),!t)throw new Error(\"no Promise impl found\");return t}function A(t,n){return function(r){if(\"function\"!=typeof t)throw new TypeError(\"argument is not a function. Are you looking for `mapTo()`?\");return r.lift(new j(t,n))}}var j=function(){function t(t,n){this.project=t,this.thisArg=n}return t.prototype.call=function(t,n){return n.subscribe(new I(t,this.project,this.thisArg))},t}(),I=function(t){function n(n,r,e){var i=t.call(this,n)||this;return i.project=r,i.count=0,i.thisArg=e||i,i}return s(n,t),n.prototype._next=function(t){var n;try{n=this.project.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}this.destination.next(n)},n}(w);function D(t,n,r,e){return f(r)&&(e=r,r=void 0),e?D(t,n,r).pipe(A(function(t){return _(t)?e.apply(void 0,t):e(t)})):new O(function(e){P(t,n,function(t){arguments.length>1?e.next(Array.prototype.slice.call(arguments)):e.next(t)},e,r)})}function P(t,n,r,e,i){var o;if(function(t){return t&&\"function\"==typeof t.addEventListener&&\"function\"==typeof t.removeEventListener}(t)){var u=t;t.addEventListener(n,r,i),o=function(){return u.removeEventListener(n,r,i)}}else if(function(t){return t&&\"function\"==typeof t.on&&\"function\"==typeof t.off}(t)){var a=t;t.on(n,r),o=function(){return a.off(n,r)}}else if(function(t){return t&&\"function\"==typeof t.addListener&&\"function\"==typeof t.removeListener}(t)){var c=t;t.addListener(n,r),o=function(){return c.removeListener(n,r)}}else{if(!t||!t.length)throw new TypeError(\"Invalid event target\");for(var s=0,f=t.length;s<f;s++)P(t[s],n,r,e,i)}e.add(o)}var L=function(){function t(t,n){this.predicate=t,this.thisArg=n}return t.prototype.call=function(t,n){return n.subscribe(new C(t,this.predicate,this.thisArg))},t}(),C=function(t){function n(n,r,e){var i=t.call(this,n)||this;return i.predicate=r,i.thisArg=e,i.count=0,i}return s(n,t),n.prototype._next=function(t){var n;try{n=this.predicate.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}n&&this.destination.next(t)},n}(w),F=function(){function t(){return Error.call(this),this.message=\"argument out of range\",this.name=\"ArgumentOutOfRangeError\",this}return t.prototype=Object.create(Error.prototype),t}(),U=new O(function(t){return t.complete()});function R(t){return function(n){return 0===t?r?function(t){return new O(function(n){return t.schedule(function(){return n.complete()})})}(r):U:n.lift(new k(t));var r}}var k=function(){function t(t){if(this.total=t,this.total<0)throw new F}return t.prototype.call=function(t,n){return n.subscribe(new z(t,this.total))},t}(),z=function(t){function n(n,r){var e=t.call(this,n)||this;return e.total=r,e.count=0,e}return s(n,t),n.prototype._next=function(t){var n=this.total,r=++this.count;r<=n&&(this.destination.next(t),r===n&&(this.destination.complete(),this.unsubscribe()))},n}(w);class N extends i{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function M(t){if(!/^(https?:)?\\/\\//.test(t))throw new N(\"The provided URL must be absolute.\");const n=document.createElement(\"a\");n.href=t;const r=n.port&&-1!==t.indexOf(`${n.hostname}:${n.port}`)?n.port:\"\";return{hash:n.hash,hostname:n.hostname,href:n.href,origin:`${n.protocol}//${n.hostname}${r?`:${r}`:\"\"}`,pathname:n.pathname,port:r,protocol:n.protocol,search:n.search}}function B(t,n){return t.type===n}class H{constructor(t,n,r){this._targetWindow=n,this._context=r,this._targetOrigin=\"*\"===t?\"*\":M(t).origin}post(t,n){const r=this._targetWindow;if(window===r)return;if(!r)throw new Error(\"Unable to post message because target window is not set.\");const e=n&&D(window,\"message\").pipe((i=t=>t.origin===this._targetOrigin&&B(t.data,t.data.type)&&-1!==[n.successType,n.errorType].indexOf(t.data.type),function(t){return t.lift(new L(i,void 0))}),A(t=>{if(n.errorType===t.data.type)throw t.data;return t.data}),R(1)).toPromise();var i;return r.postMessage(Object.assign(Object.assign({},t),{context:this._context}),this._targetOrigin),e}setTarget(t){this._targetWindow=t}setContext(t){this._context=t}}function W(t,n,r){if(\"function\"!=typeof r.value)return r;let e=r.value;return{get(){const t=e.bind(this);return Object.defineProperty(this,n,Object.assign(Object.assign({},r),{value:t})),t},set(t){e=t}}}class ${constructor(t){var n;this._sourceOrigins=[M(t).origin,(n=M(t),M(0===n.hostname.indexOf(\"www\")?n.href:n.href.replace(n.hostname,`www.${n.hostname}`))).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(t,n){let r=this._listeners[t];r||(this._listeners[t]=r=[]),-1===r.indexOf(n)&&r.push(n)}removeListener(t,n){const r=this._listeners[t];if(!r)return;const e=r.indexOf(n);e>=0&&r.splice(e,1)}trigger(t,n){const r=this._listeners[t.type];r&&r.forEach(r=>n?r(t,n):r(t))}_handleMessage(t){if(-1===this._sourceOrigins.indexOf(t.origin)||!B(t.data,t.data.type))return;const n=t.data,{context:r}=n,e=function(t,n){var r={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.indexOf(e)<0&&(r[e]=t[e]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(e=Object.getOwnPropertySymbols(t);i<e.length;i++)n.indexOf(e[i])<0&&Object.prototype.propertyIsEnumerable.call(t,e[i])&&(r[e[i]]=t[e[i]])}return r}(n,[\"context\"]);this.trigger(e,r)}}function q(){return\"function\"==typeof Symbol&&Symbol.iterator?Symbol.iterator:\"@@iterator\"}!function(t,n,r,e){var i,o=arguments.length,u=o<3?n:null===e?e=Object.getOwnPropertyDescriptor(n,r):e;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)u=Reflect.decorate(t,n,r,e);else for(var a=t.length-1;a>=0;a--)(i=t[a])&&(u=(o<3?i(u):o>3?i(n,r,u):i(n,r))||u);o>3&&u&&Object.defineProperty(n,r,u)}([function(t,n,r){return n&&r?W(0,n,r):function(t){const n=class extends t{};return Object.getOwnPropertyNames(t.prototype).forEach(r=>{const e=Object.getOwnPropertyDescriptor(t.prototype,r);e&&\"constructor\"!==r&&Object.defineProperty(n.prototype,r,W(t.prototype,r,e))}),n}(t)}],$.prototype,\"_handleMessage\",null);var V=q(),Z=function(t){return t&&\"number\"==typeof t.length&&\"function\"!=typeof t};function G(t){return!!t&&\"function\"!=typeof t.subscribe&&\"function\"==typeof t.then}var Y=function(t){if(t&&\"function\"==typeof t[S])return i=t,function(t){var n=i[S]();if(\"function\"!=typeof n.subscribe)throw new TypeError(\"Provided object does not correctly implement Symbol.observable\");return n.subscribe(t)};if(Z(t))return e=t,function(t){for(var n=0,r=e.length;n<r&&!t.closed;n++)t.next(e[n]);t.complete()};if(G(t))return r=t,function(t){return r.then(function(n){t.closed||(t.next(n),t.complete())},function(n){return t.error(n)}).then(null,p),t};if(t&&\"function\"==typeof t[V])return n=t,function(t){for(var r=n[V]();;){var e=void 0;try{e=r.next()}catch(n){return t.error(n),t}if(e.done){t.complete();break}if(t.next(e.value),t.closed)break}return\"function\"==typeof r.return&&t.add(function(){r.return&&r.return()}),t};var n,r,e,i,o=v(t)?\"an invalid object\":\"'\"+t+\"'\";throw new TypeError(\"You provided \"+o+\" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.\")};var K=function(t){function n(n){var r=t.call(this)||this;return r.parent=n,r}return s(n,t),n.prototype._next=function(t){this.parent.notifyNext(t)},n.prototype._error=function(t){this.parent.notifyError(t),this.unsubscribe()},n.prototype._complete=function(){this.parent.notifyComplete(),this.unsubscribe()},n}(w),Q=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return s(n,t),n.prototype.notifyNext=function(t){this.destination.next(t)},n.prototype.notifyError=function(t){this.destination.error(t)},n.prototype.notifyComplete=function(){this.destination.complete()},n}(w);function J(t,n){return\"function\"==typeof n?function(r){return r.pipe(J(function(r,e){return(i=t(r,e),i instanceof O?i:new O(Y(i))).pipe(A(function(t,i){return n(r,t,e,i)}));var i}))}:function(n){return n.lift(new X(t))}}var X=function(){function t(t){this.project=t}return t.prototype.call=function(t,n){return n.subscribe(new tt(t,this.project))},t}(),tt=function(t){function n(n,r){var e=t.call(this,n)||this;return e.project=r,e.index=0,e}return s(n,t),n.prototype._next=function(t){var n,r=this.index++;try{n=this.project(t,r)}catch(t){return void this.destination.error(t)}this._innerSub(n)},n.prototype._innerSub=function(t){var n=this.innerSubscription;n&&n.unsubscribe();var r=new K(this),e=this.destination;e.add(r),this.innerSubscription=function(t,n){if(!n.closed){if(t instanceof O)return t.subscribe(n);var r;try{r=Y(t)(n)}catch(t){n.error(t)}return r}}(t,r),this.innerSubscription!==r&&e.add(this.innerSubscription)},n.prototype._complete=function(){var n=this.innerSubscription;n&&!n.closed||t.prototype._complete.call(this),this.unsubscribe()},n.prototype._unsubscribe=function(){this.innerSubscription=void 0},n.prototype.notifyComplete=function(){this.innerSubscription=void 0,this.isStopped&&t.prototype._complete.call(this)},n.prototype.notifyNext=function(t){this.destination.next(t)},n}(Q);const nt={body:{},headers:{},status:0};class rt extends i{constructor(t,{message:n,errors:r}={}){const{body:e,headers:i,status:o}=t||nt;super(n||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=e,this.headers=i,this.status=o,this.errors=r||[]}}function et(t){if(Array.isArray(t))return t.reduce((t,n)=>n&&n.message?[...t,n.message]:t,[]).join(\" \")}class it extends i{constructor(t){super(t||\"Unable to proceed due to invalid configuration provided for the hosted payment form.\"),this.name=\"InvalidHostedFormConfigError\",this.type=\"invalid_hosted_form_config\"}}class ot extends i{constructor(t){super(t||\"Unable to proceed due to an unknown error with the hosted payment form.\"),this.name=\"InvalidHostedFormError\",this.type=\"invalid_hosted_form\"}}class ut extends i{constructor(n){super([\"Unable to proceed due to invalid user input values\",...(0,t.flatMap)((0,t.values)(n),n=>(0,t.map)(n,({message:t})=>t))].join(\". \")),this.errors=n,this.name=\"InvalidHostedFormValueError\",this.type=\"invalid_hosted_form_value\"}}var at,ct;!function(t){t.AttachRequested=\"HOSTED_FIELD:ATTACH_REQUESTED\",t.SubmitRequested=\"HOSTED_FIELD:SUBMITTED_REQUESTED\",t.SubmitManualOrderRequested=\"HOSTED_FIELD:SUBMIT_MANUAL_ORDER_REQUESTED\",t.ValidateRequested=\"HOSTED_FIELD:VALIDATE_REQUESTED\",t.StoredCardRequested=\"HOSTED_FIELD:STORED_CARD_REQUESTED\"}(at||(at={})),function(t){t.AttachSucceeded=\"HOSTED_INPUT:ATTACH_SUCCEEDED\",t.AttachFailed=\"HOSTED_INPUT:ATTACH_FAILED\",t.BinChanged=\"HOSTED_INPUT:BIN_CHANGED\",t.Blurred=\"HOSTED_INPUT:BLURRED\",t.Changed=\"HOSTED_INPUT:CHANGED\",t.CardTypeChanged=\"HOSTED_INPUT:CARD_TYPE_CHANGED\",t.Entered=\"HOSTED_INPUT:ENTERED\",t.Focused=\"HOSTED_INPUT:FOCUSED\",t.SubmitSucceeded=\"HOSTED_INPUT:SUBMIT_SUCCEEDED\",t.SubmitFailed=\"HOSTED_INPUT:SUBMIT_FAILED\",t.SubmitManualOrderSucceeded=\"HOSTED_INPUT:SUBMIT_MANUAL_ORDER_SUCCEEDED\",t.SubmitManualOrderFailed=\"HOSTED_INPUT:SUBMIT_MANUAL_ORDER_FAILED\",t.Validated=\"HOSTED_INPUT:VALIDATED\",t.StoredCardSucceeded=\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",t.StoredCardFailed=\"HOSTED_INPUT:STORED_CARD_FAILED\"}(ct||(ct={}));var st=function(t,n,r,e){return new(r||(r=Promise))(function(i,o){function u(t){try{c(e.next(t))}catch(t){o(t)}}function a(t){try{c(e.throw(t))}catch(t){o(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof r?n:new r(function(t){t(n)})).then(u,a)}c((e=e.apply(t,n||[])).next())})};class ft{constructor(t,n,r,e,i,o,u,a,c){this._type=t,this._containerId=n,this._placeholder=r,this._accessibilityLabel=e,this._styles=i,this._eventPoster=o,this._eventListener=u,this._detachmentObserver=a,this._orderId=c,this._iframe=document.createElement(\"iframe\"),this._iframe.src=this.getFrameSrc(this._orderId),this._iframe.style.border=\"none\",this._iframe.style.height=\"100%\",this._iframe.style.overflow=\"hidden\",this._iframe.style.width=\"100%\"}getFrameSrc(t){return void 0!==t?`/admin/payments/${this._orderId}/hosted-form-field?version=1.916.1`:\"/account/stored-instruments/hosted-fields?version=1.916.1\"}getType(){return this._type}attach(){return st(this,void 0,void 0,function*(){const t=document.getElementById(this._containerId);if(!t)throw new it(\"Unable to proceed because the provided container ID is not valid.\");t.appendChild(this._iframe),this._eventListener.listen();const n=D(this._iframe,\"load\").pipe(J(({target:t})=>st(this,void 0,void 0,function*(){const n=t&&t.contentWindow;if(!n)throw new Error(\"The content window of the iframe cannot be accessed.\");this._eventPoster.setTarget(n),yield this._eventPoster.post({type:at.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:ct.AttachSucceeded,errorType:ct.AttachFailed})})),R(1)).toPromise();yield this._detachmentObserver.ensurePresence([this._iframe],n)})}detach(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())}submitForm(t,n){return st(this,void 0,void 0,function*(){try{const r=this._eventPoster.post({type:at.SubmitRequested,payload:{fields:t,data:n}},{successType:ct.SubmitSucceeded,errorType:ct.SubmitFailed});return yield this._detachmentObserver.ensurePresence([this._iframe],r)}catch(t){if(this._isSubmitErrorEvent(t)){if(\"hosted_form_error\"===t.payload.error.code)throw new ot(t.payload.error.message);if(t.payload.response)throw function(t){const{body:n}=t,{errors:r=[]}=n;return new rt(t,{message:et(r)||void 0,errors:r})}(t.payload.response);throw new Error(t.payload.error.message)}throw t}})}submitManualOrderForm(t){return st(this,void 0,void 0,function*(){try{const n=this._eventPoster.post({type:at.SubmitManualOrderRequested,payload:{data:t}},{successType:ct.SubmitManualOrderSucceeded,errorType:ct.SubmitManualOrderFailed});return yield this._detachmentObserver.ensurePresence([this._iframe],n)}catch(t){if(this._isSubmitManualOrderErrorEvent(t)){if(\"hosted_form_error\"===t.payload.error.code)throw new ot(t.payload.error.message);if(t.payload.error.message)throw new Error(t.payload.error.message);throw new Error(t.payload.error.code)}throw t}})}submitStoredCardForm(t,n){return st(this,void 0,void 0,function*(){const r=this._eventPoster.post({type:at.StoredCardRequested,payload:{fields:t,data:n}},{successType:ct.StoredCardSucceeded,errorType:ct.StoredCardFailed});return this._detachmentObserver.ensurePresence([this._iframe],r)})}validateForm(){return st(this,void 0,void 0,function*(){const t=this._eventPoster.post({type:at.ValidateRequested},{successType:ct.Validated}),{payload:n}=yield this._detachmentObserver.ensurePresence([this._iframe],t);if(!n.isValid)throw new ut(n.errors)})}_getFontUrls(){const n=\"fonts.googleapis.com\",r=document.querySelectorAll(`link[href*='${n}'][rel='stylesheet']`);return Array.prototype.slice.call(r).filter(t=>M(t.href).hostname===n).filter(n=>(0,t.values)(this._styles).map(t=>t&&t.fontFamily).filter(t=>\"string\"==typeof t).some(t=>t.split(/,\\s/).some(t=>-1!==n.href.indexOf(t.replace(\" \",\"+\"))))).map(t=>t.href)}_isSubmitManualOrderErrorEvent(t){return t instanceof Object&&null!==t&&\"type\"in t&&t.type===ct.SubmitManualOrderFailed}_isSubmitErrorEvent(t){return t.type===ct.SubmitFailed}}var lt,ht=function(t,n,r,e){return new(r||(r=Promise))(function(i,o){function u(t){try{c(e.next(t))}catch(t){o(t)}}function a(t){try{c(e.throw(t))}catch(t){o(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof r?n:new r(function(t){t(n)})).then(u,a)}c((e=e.apply(t,n||[])).next())})};class pt{constructor(n,r,e){this._fields=n,this._eventListener=r,this._eventCallbacks=e,this._handleEnter=({payload:n})=>ht(this,void 0,void 0,function*(){try{yield this.validate()}catch(t){if(t instanceof Error&&\"InvalidHostedFormValueError\"!==t.name)throw t}const{onEnter:r=t.noop}=this._eventCallbacks;r(n)});const{onBlur:i=t.noop,onCardTypeChange:o=t.noop,onFocus:u=t.noop,onValidate:a=t.noop}=this._eventCallbacks;this._eventListener.addListener(ct.Blurred,({payload:t})=>i(t)),this._eventListener.addListener(ct.CardTypeChanged,({payload:t})=>o(t)),this._eventListener.addListener(ct.Focused,({payload:t})=>u(t)),this._eventListener.addListener(ct.Validated,({payload:t})=>a(t)),this._eventListener.addListener(ct.Entered,this._handleEnter),this._eventListener.addListener(ct.CardTypeChanged,({payload:t})=>this._cardType=t.cardType),this._eventListener.addListener(ct.BinChanged,({payload:t})=>this._bin=t.bin)}getBin(){return this._bin}getCardType(){return this._cardType}attach(){return ht(this,void 0,void 0,function*(){this._eventListener.listen();const n=this._getFirstField(),r=(0,t.without)(this._fields,n);yield n.attach(),yield Promise.all(r.map(t=>t.attach()))})}detach(){this._eventListener.stopListen(),this._fields.forEach(t=>{t.detach()})}submitManualOrderPayment(t){return ht(this,void 0,void 0,function*(){return this._getFirstField().submitManualOrderForm(t.data)})}submitStoredCard(t){return ht(this,void 0,void 0,function*(){return this._getFirstField().submitStoredCardForm(t.fields,t.data)})}submit(t,n,r,e){return ht(this,void 0,void 0,function*(){try{return yield this._getFirstField().submitForm(this._fields.map(t=>t.getType()),r.transform(t,e))}catch(e){let i;if(!(e instanceof Error||\"string\"==typeof e))throw new Error(\"Unexpected error type\");return i=yield n.handlePaymentHumanVerification(e),yield this._getFirstField().submitForm(this._fields.map(t=>t.getType()),r.transform(t,i))}})}validate(){return ht(this,void 0,void 0,function*(){return this._getFirstField().validateForm()})}_getFirstField(){const t=this._fields[0];if(!t)throw new it(\"Unable to proceed because the payment form has no field defined.\");return t}}class dt{create(n,r){const e=Object.keys(r.fields).reduce((t,e)=>{const i=r.fields[e];return i?[...t,new ft(e,i.containerId,i.placeholder||\"\",i.accessibilityLabel||\"\",r.styles||{},new H(n),new $(n),new u(new a),r.orderId)]:t},[]);return new pt(e,new $(n),(0,t.pick)(r,\"onBlur\",\"onEnter\",\"onFocus\",\"onCardTypeChange\",\"onValidate\"))}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(lt||(lt={}));class _t extends i{constructor(t){super(function(t){switch(t){case lt.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case lt.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case lt.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case lt.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class vt{constructor(t,n){this._host=t,this._hostedFormFactory=n}initialize(t){const n=this._hostedFormFactory.create(this._host,t);return n.attach().then(()=>{this._hostedForm=n})}deinitialize(){this._hostedForm&&(this._hostedForm.detach(),this._hostedForm=void 0)}submitManualOrderPayment(t){return n=this,r=void 0,i=function*(){const n=this._hostedForm;if(!n)throw new _t(lt.PaymentNotInitialized);return yield n.validate(),n.submitManualOrderPayment({data:t})},new((e=void 0)||(e=Promise))(function(t,o){function u(t){try{c(i.next(t))}catch(t){o(t)}}function a(t){try{c(i.throw(t))}catch(t){o(t)}}function c(n){var r;n.done?t(n.value):(r=n.value,r instanceof e?r:new e(function(t){t(r)})).then(u,a)}c((i=i.apply(n,r||[])).next())});var n,r,e,i}}function yt(t){return new vt(t,new dt)}class gt{constructor(t,n){this._host=t,this._hostedFormFactory=n}submitStoredCard(t,n){return r=this,e=void 0,o=function*(){const r=this._hostedForm;if(!r)throw new _t(lt.PaymentNotInitialized);yield r.validate().then(()=>r.submitStoredCard({fields:t,data:n}))},new((i=void 0)||(i=Promise))(function(t,n){function u(t){try{c(o.next(t))}catch(t){n(t)}}function a(t){try{c(o.throw(t))}catch(t){n(t)}}function c(n){var r;n.done?t(n.value):(r=n.value,r instanceof i?r:new i(function(t){t(r)})).then(u,a)}c((o=o.apply(r,e||[])).next())});var r,e,i,o}initialize(t){const n=this._hostedFormFactory.create(this._host,t);return n.attach().then(()=>{this._hostedForm=n})}deinitialize(){this._hostedForm&&this._hostedForm.detach()}}function bt(t){return new gt(t,new dt)}})(),module.exports=e})();\n//# sourceMappingURL=hosted-form-v2-iframe-host.js.map"
  },
  {
    "path": "dist/cjs/hosted-form-v2-iframe-host.js.LICENSE.txt",
    "content": "/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n"
  },
  {
    "path": "dist/cjs/hosted-form.js",
    "content": "/*! For license information please see hosted-form.js.LICENSE.txt */\n(()=>{var t={3825(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=c(r(4475)),i=c(r(8015)),o=c(r(8615)),a=c(r(9504)),u=c(r(4351)),s=c(r(3072));function c(t){return t&&t.__esModule?t:{default:t}}function l(t){return l=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},l(t)}function f(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,p(n.key),n)}}function p(t){var e=function(t){if(\"object\"!=l(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=l(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==l(e)?e:e+\"\"}e.default=function(){function t(e,r,n,i,o){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.config=e,this.paymentSubmitter=r,this.offsitePaymentInitializer=n,this.clientTokenGenerator=i,this.storeRequestSender=o}return e=t,c=[{key:\"create\",value:function(e){var r=(0,n.default)({},s.default,e),c=i.default.create(r);return new t(r,o.default.create(r),c,a.default.create(r),u.default.create(r))}}],(r=[{key:\"setHost\",value:function(t){this.config.host=t}},{key:\"initializeOffsitePayment\",value:function(t,e,r){this.offsitePaymentInitializer.initializeOffsitePayment(t,e,r)}},{key:\"submitPayment\",value:function(t,e){this.paymentSubmitter.submitPayment(t,e)}},{key:\"generateClientToken\",value:function(t,e){this.clientTokenGenerator.generateClientToken(t,e)}},{key:\"loadInstruments\",value:function(t,e){this.storeRequestSender.loadInstruments(t,e)}},{key:\"loadInstrumentsWithAddress\",value:function(t,e){this.storeRequestSender.loadInstrumentsWithAddress(t,e)}},{key:\"deleteShopperInstrument\",value:function(t,e){this.storeRequestSender.deleteShopperInstrument(t,e)}}])&&f(e.prototype,r),c&&f(e,c),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,c}()},3072(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0,e.default={host:\"\"}},9554(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.APPLICATION_JSON=void 0,e.APPLICATION_JSON=\"application/json\"},7257(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(9554),i=r(9726),o={headers:{Accept:n.APPLICATION_JSON,\"Content-Type\":n.APPLICATION_JSON},method:i.GET};e.default=o},9726(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.POST=e.GET=e.DELETE=void 0,e.GET=\"GET\",e.POST=\"POST\",e.DELETE=\"DELETE\"},9731(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n,i=(n=r(4475))&&n.__esModule?n:{default:n},o=r(9554),a=r(5916);function u(t){return u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},u(t)}function s(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,c(n.key),n)}}function c(t){var e=function(t){if(\"object\"!=u(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=u(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==u(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return function(t,e,r){return e&&s(t.prototype,e),r&&s(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t}(t,[{key:\"toRequest\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.APPLICATION_JSON;return t&&(0,a.includes)(e,o.APPLICATION_JSON)?JSON.stringify(t):t}},{key:\"fromResponse\",value:function(t){var e=this.parseResponseHeaders(t.getAllResponseHeaders()),r=t.getResponseHeader(\"Content-Type\"),n=t.status,i=t.statusText,u=\"response\"in t?t.response:t.responseText;return u&&(0,a.includes)(r,o.APPLICATION_JSON)&&(u=JSON.parse(u)),{data:u,headers:e,status:n,statusText:i}}},{key:\"parseResponseHeaders\",value:function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var r=e.split(\":\"),n=(r.shift()||\"\").trim();return n?(0,i.default)({},t,function(t,e,r){return(e=c(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}({},n.toLowerCase(),r.join(\":\").trim())):t},{})}}],[{key:\"create\",value:function(){return new t}}])}()},5101(t,e){\"use strict\";function r(t){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},r(t)}function n(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,i(n.key),n)}}function i(t){var e=function(t){if(\"object\"!=r(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==r(e)?e:e+\"\"}Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0,e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,i=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"createRequest\",value:function(t,e,r){var n=new XMLHttpRequest;return n.onerror=function(){r&&r(new Error(n.statusText))},n.onload=function(){r&&r()},n.open(e.method,t,!0),this.setOptions(n,e),n}},{key:\"setHeaders\",value:function(t,e){Object.keys(e).forEach(function(r){var n=e[r];t.setRequestHeader(r,n)})}},{key:\"setOptions\",value:function(t,e){t.withCredentials=e.withCredentials,e.headers&&this.setHeaders(t,e.headers)}}])&&n(e.prototype,r),i&&n(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},7542(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=c(r(3592)),i=c(r(4475)),o=r(9726),a=c(r(7257)),u=c(r(9731)),s=c(r(5101));function c(t){return t&&t.__esModule?t:{default:t}}function l(t){return l=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},l(t)}function f(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,p(n.key),n)}}function p(t){var e=function(t){if(\"object\"!=l(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=l(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==l(e)?e:e+\"\"}e.default=function(){function t(e,r){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.requestFactory=e,this.payloadTransformer=r}return e=t,c=[{key:\"create\",value:function(){return new t(s.default.create(),u.default.create())}}],(r=[{key:\"sendRequest\",value:function(t,e,r,i){var o=this,u=(0,n.default)({},a.default,r),s=this.requestFactory.createRequest(t,u,function(t){var e=o.payloadTransformer.fromResponse(s);i&&(!t&&o.isSuccessfulRequest(s)?i(null,e):i(e))}),c=this.payloadTransformer.toRequest(e,u.headers[\"Content-Type\"]);s.send(c)}},{key:\"postRequest\",value:function(t,e,r,n){var a=(0,i.default)({},r,{method:o.POST});this.sendRequest(t,e,a,n)}},{key:\"isSuccessfulRequest\",value:function(t){return t.status>=200&&t.status<300}}])&&f(e.prototype,r),c&&f(e,c),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,c}()},6207(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t,e){return!(!Array.isArray(t)&&\"string\"!=typeof t)&&-1!==t.indexOf(e)}},5916(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),Object.defineProperty(e,\"includes\",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,\"isNil\",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(e,\"isObject\",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,\"omitEmptyStringAndNil\",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(e,\"omitNil\",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,\"omitProperty\",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(e,\"toNumber\",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(e,\"toSnakeCase\",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(e,\"toString\",{enumerable:!0,get:function(){return f.default}});var n=p(r(6207)),i=p(r(848)),o=p(r(216)),a=p(r(1144)),u=p(r(2433)),s=p(r(2265)),c=p(r(3897)),l=p(r(987)),f=p(r(6645));function p(t){return t&&t.__esModule?t:{default:t}}},7914(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t){return\"\"===t}},223(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t){return(0,n.default)(t)||(0,i.default)(t)};var n=o(r(7914)),i=o(r(848));function o(t){return t&&t.__esModule?t:{default:t}}},848(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t){return null==t}},216(t,e){\"use strict\";function r(t){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},r(t)}Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t){return null!==t&&\"object\"===r(t)&&!Array.isArray(t)}},1144(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t){return(0,i.default)(t,n.default)};var n=o(r(223)),i=o(r(2265));function o(t){return t&&t.__esModule?t:{default:t}}},2433(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t){return(0,i.default)(t,n.default)};var n=o(r(848)),i=o(r(2265));function o(t){return t&&t.__esModule?t:{default:t}}},2265(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t,e){return(0,i.default)(t)?Object.keys(t).reduce(function(r,n){var i=t[n];return e(i)||(r[n]=i),r},{}):t};var n,i=(n=r(216))&&n.__esModule?n:{default:n}},3897(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t){return parseFloat(t)||0}},987(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t){return\"string\"!=typeof t?t:t.replace(/([a-z\\d])([A-Z]+)/g,\"$1_$2\").replace(/[-\\s]+/g,\"_\").toLowerCase()}},6645(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t){return\"string\"==typeof t?t:\"number\"!=typeof t||Number.isNaN(t)?\"\":t.toString()}},2742(t,e,r){\"use strict\";e.U=function(t){return i.default.create(t)};var n,i=(n=r(3825))&&n.__esModule?n:{default:n}},9504(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=a(r(7542)),i=a(r(3373)),o=a(r(2815));function a(t){return t&&t.__esModule?t:{default:t}}function u(t){return u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},u(t)}function s(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,c(n.key),n)}}function c(t){var e=function(t){if(\"object\"!=u(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=u(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==u(e)?e:e+\"\"}e.default=function(){function t(e,r,n){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.urlHelper=e,this.requestSender=r,this.clientTokenMapper=n}return e=t,a=[{key:\"create\",value:function(e){return new t(o.default.create(e),n.default.create(),i.default.create())}}],(r=[{key:\"generateClientToken\",value:function(t,e){var r=this.urlHelper.getGenerateClientTokenUrl(),n=this.clientTokenMapper.mapToClientToken(t);this.requestSender.postRequest(r,n,{},e)}}])&&s(e.prototype,r),a&&s(e,a),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,a}()},8015(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(8686),i=r(2157),o=u(r(2216)),a=u(r(2815));function u(t){return t&&t.__esModule?t:{default:t}}function s(t){return s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},s(t)}function c(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,l(n.key),n)}}function l(t){var e=function(t){if(\"object\"!=s(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=s(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==s(e)?e:e+\"\"}e.default=function(){function t(e,r,n){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.urlHelper=e,this.formPoster=r,this.payloadMapper=n}return e=t,u=[{key:\"create\",value:function(e){return new t(a.default.create(e),(0,n.createFormPoster)(),o.default.create())}}],(r=[{key:\"initializeOffsitePayment\",value:function(t,e,r){var n=t.paymentMethod,o=void 0===n?{}:n;if(o.type!==i.HOSTED)throw new Error(\"\".concat(o.type,\" is not supported.\"));var a=this.payloadMapper.mapToPayload(t),u=this.urlHelper.getOffsitePaymentUrl();this.formPoster.postForm(u,a,e,r)}}])&&c(e.prototype,r),u&&c(e,u),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,u}()},7034(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916);function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function o(t,e,r){return(e=u(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,u(n.key),n)}}function u(t){var e=function(t){if(\"object\"!=i(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=i(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==i(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,i=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"mapToBillingAddress\",value:function(t){return this.mapToAddress(t,\"billingAddress\")}},{key:\"mapToShippingAddress\",value:function(t){return this.mapToAddress(t,\"shippingAddress\")}},{key:\"mapToAddress\",value:function(t,e){var r,i=t[e]||{},a=(0,n.toSnakeCase)(e);return(0,n.omitNil)((o(o(o(o(o(o(o(o(o(o(r={},\"\".concat(a,\"_city\"),i.city),\"\".concat(a,\"_company\"),i.company),\"\".concat(a,\"_country_code\"),i.countryCode),\"\".concat(a,\"_country\"),i.country),\"\".concat(a,\"_first_name\"),i.firstName),\"\".concat(a,\"_last_name\"),i.lastName),\"\".concat(a,\"_phone\"),i.phone),\"\".concat(a,\"_state_code\"),i.provinceCode),\"\".concat(a,\"_state\"),i.province),\"\".concat(a,\"_street_1\"),i.addressLine1),o(o(r,\"\".concat(a,\"_street_2\"),i.addressLine2),\"\".concat(a,\"_zip\"),i.postCode)))}}])&&a(e.prototype,r),i&&a(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},5452(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916);function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if(\"object\"!=i(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=i(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==i(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,i=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"mapToCustomer\",value:function(t){var e=t.customer,r=void 0===e?{}:e,i=t.quoteMeta,o=void 0===i?{}:i,a=t.store,u=void 0===a?{}:a;return(0,n.omitNil)({customer_browser_info:navigator.userAgent,customer_email:r.email,customer_first_name:r.firstName,customer_geo_ip_country_code:o.request?o.request.geoCountryCode:null,customer_id:r.customerId,customer_last_name:r.lastName,customer_locale:u.storeLanguage,customer_name:r.name,customer_phone:r.phoneNumber,customer_reference:r.email})}}])&&o(e.prototype,r),i&&o(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},7403(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916);function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if(\"object\"!=i(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=i(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==i(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,i=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"mapToMeta\",value:function(t){var e=t.source;return(0,n.omitNil)({meta_referrer:document.referrer,meta_source:e,meta_user_agent:navigator.userAgent})}}])&&o(e.prototype,r),i&&o(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},2216(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=l(r(4475)),i=r(5916),o=l(r(7034)),a=l(r(5452)),u=l(r(7403)),s=l(r(187)),c=l(r(9229));function l(t){return t&&t.__esModule?t:{default:t}}function f(t){return f=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},f(t)}function p(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,d(n.key),n)}}function d(t){var e=function(t){if(\"object\"!=f(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=f(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==f(e)?e:e+\"\"}e.default=function(){function t(e,r,n,i,o){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.addressMapper=e,this.customerMapper=r,this.metaMapper=n,this.paymentMethodIdMapper=i,this.storeMapper=o}return e=t,l=[{key:\"create\",value:function(){return new t(o.default.create(),a.default.create(),u.default.create(),s.default.create(),c.default.create())}}],(r=[{key:\"mapToPayload\",value:function(t){var e=t.authToken,r=t.order,o=void 0===r?{}:r,a=t.payment,u=void 0===a?{}:a,s=t.paymentMethod,c=void 0===s?{}:s,l=(0,n.default)({amount:o.grandTotal?o.grandTotal.integerAmount:null,tax:o.taxTotal?o.taxTotal.integerAmount:null,bc_auth_token:e,currency:o.currency,gateway:this.paymentMethodIdMapper.mapToId(c),notify_url:o.callbackUrl,order_id:o.orderId?(0,i.toString)(o.orderId):null,page_title:document.title?document.title:null,payment_method_id:c.id,reference_id:o.orderId?(0,i.toString)(o.orderId):null,return_url:c.returnUrl||(o.payment?o.payment.returnUrl:null)},this.addressMapper.mapToBillingAddress(t),this.customerMapper.mapToCustomer(t),this.metaMapper.mapToMeta(t),this.addressMapper.mapToShippingAddress(t),this.storeMapper.mapToStore(t)),f=u.formattedPayload,p=void 0===f?{}:f;return(0,n.default)(l,p),(0,i.omitNil)(l)}}])&&p(e.prototype,r),l&&p(e,l),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,l}()},9229(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916);function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if(\"object\"!=i(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=i(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==i(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,i=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"mapToStore\",value:function(t){var e=t.store,r=void 0===e?{}:e;return(0,n.omitNil)({store_hash:r.storeHash,store_id:r.storeId?(0,n.toString)(r.storeId):null})}}])&&o(e.prototype,r),i&&o(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},4432(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PAYPAL_COMMERCE_VENMO=e.PAYPAL_COMMERCE_CREDIT_CARDS=e.PAYPAL_COMMERCE_CREDIT=e.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=e.PAYPAL_COMMERCE_ACCELERATED_CHECKOUT=e.PAYPAL_COMMERCE=e.BRAINTREE_VISACHECKOUT=e.BRAINTREE_PAYPAL_CREDIT=e.BRAINTREE_PAYPAL=e.BRAINTREE_LOCAL_METHODS=e.BRAINTREE_GOOGLEPAY=e.BRAINTREE_ACH=e.BRAINTREE_ACCELERATED_CHECKOUT=e.BRAINTREE=e.BIGCOMMERCE_PAYMENTS_VENMO=e.BIGCOMMERCE_PAYMENTS_PAYLATER=e.BIGCOMMERCE_PAYMENTS_FASTLANE=e.BIGCOMMERCE_PAYMENTS_CREDIT_CARDS=e.BIGCOMMERCE_PAYMENTS_APMS=e.BIGCOMMERCE_PAYMENTS=void 0,e.BIGCOMMERCE_PAYMENTS=\"bigcommerce_payments\",e.BIGCOMMERCE_PAYMENTS_PAYLATER=\"bigcommerce_payments_paylater\",e.BIGCOMMERCE_PAYMENTS_CREDIT_CARDS=\"bigcommerce_payments_creditcards\",e.BIGCOMMERCE_PAYMENTS_FASTLANE=\"bigcommerce_payments_fastlane\",e.BIGCOMMERCE_PAYMENTS_APMS=\"bigcommerce_payments_apms\",e.BIGCOMMERCE_PAYMENTS_VENMO=\"bigcommerce_payments_venmo\",e.BRAINTREE=\"braintree\",e.BRAINTREE_PAYPAL=\"braintreepaypal\",e.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",e.BRAINTREE_VISACHECKOUT=\"braintreevisacheckout\",e.BRAINTREE_LOCAL_METHODS=\"braintreelocalmethods\",e.BRAINTREE_GOOGLEPAY=\"googlepaybraintree\",e.BRAINTREE_ACH=\"braintreeach\",e.BRAINTREE_ACCELERATED_CHECKOUT=\"braintreeacceleratedcheckout\",e.PAYPAL_COMMERCE=\"paypalcommerce\",e.PAYPAL_COMMERCE_ACCELERATED_CHECKOUT=\"paypalcommerceacceleratedcheckout\",e.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=\"paypalcommercealternativemethods\",e.PAYPAL_COMMERCE_CREDIT=\"paypalcommercecredit\",e.PAYPAL_COMMERCE_CREDIT_CARDS=\"paypalcommercecreditcards\",e.PAYPAL_COMMERCE_VENMO=\"paypalcommercevenmo\"},187(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(3491),i=r(4432);function o(t){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},o(t)}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,u(n.key),n)}}function u(t){var e=function(t){if(\"object\"!=o(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=o(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==o(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,o=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"mapToId\",value:function(t){var e=t.id;return t.method===n.MULTI_OPTION&&(e=t.gateway),function(t){switch(t){case i.BRAINTREE_PAYPAL:case i.BRAINTREE_PAYPAL_CREDIT:case i.BRAINTREE_VISACHECKOUT:case i.BRAINTREE_GOOGLEPAY:case i.BRAINTREE_ACH:case i.BRAINTREE_LOCAL_METHODS:case i.BRAINTREE_ACCELERATED_CHECKOUT:return!0;default:return!1}}(e)?i.BRAINTREE:function(t){switch(t){case i.PAYPAL_COMMERCE_CREDIT:case i.PAYPAL_COMMERCE_CREDIT_CARDS:case i.PAYPAL_COMMERCE_ACCELERATED_CHECKOUT:case i.PAYPAL_COMMERCE_ALTERNATIVE_METHODS:case i.PAYPAL_COMMERCE_VENMO:return!0;default:return!1}}(e)?i.PAYPAL_COMMERCE:function(t){switch(t){case i.BIGCOMMERCE_PAYMENTS:case i.BIGCOMMERCE_PAYMENTS_PAYLATER:case i.BIGCOMMERCE_PAYMENTS_CREDIT_CARDS:case i.BIGCOMMERCE_PAYMENTS_FASTLANE:case i.BIGCOMMERCE_PAYMENTS_APMS:case i.BIGCOMMERCE_PAYMENTS_VENMO:return!0;default:return!1}}(e)?i.BIGCOMMERCE_PAYMENTS:e}}])&&a(e.prototype,r),o&&a(e,o),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,o}()},3491(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PPSDK_CREDIT_CARD=e.MULTI_OPTION=e.CREDIT_CARD=void 0,e.CREDIT_CARD=\"credit-card\",e.MULTI_OPTION=\"multi-option\",e.PPSDK_CREDIT_CARD=\"card\"},8615(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=s(r(7542)),i=r(2157),o=s(r(2719)),a=s(r(4507)),u=s(r(2815));function s(t){return t&&t.__esModule?t:{default:t}}function c(t){return c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},c(t)}function l(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,f(n.key),n)}}function f(t){var e=function(t){if(\"object\"!=c(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=c(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==c(e)?e:e+\"\"}e.default=function(){function t(e,r,n,i){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.urlHelper=e,this.requestSender=r,this.payloadMapper=n,this.ppsdkPayloadMapper=i}return e=t,s=[{key:\"create\",value:function(e){return new t(u.default.create(e),n.default.create(),o.default.create(),a.default.create())}}],(r=[{key:\"submitPayment\",value:function(t,e){var r=t.paymentMethod,n=void 0===r?{}:r;if(n.type!==i.API&&n.type!==i.SDK)throw new Error(\"\".concat(n.type,\" is not supported.\"));var o=n.type===i.SDK?this.ppsdkPayloadMapper.mapToPayload(t):this.payloadMapper.mapToPayload(t),a=n.type===i.SDK?this.urlHelper.getPpsdkPaymentUrl():this.urlHelper.getPaymentUrl(),u={headers:this.payloadMapper.mapToHeaders(t)};this.requestSender.postRequest(a,o,u,e)}}])&&l(e.prototype,r),s&&l(e,s),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,s}()},2157(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SDK=e.OFFLINE=e.HOSTED=e.API=void 0,e.API=\"PAYMENT_TYPE_API\",e.HOSTED=\"PAYMENT_TYPE_HOSTED\",e.OFFLINE=\"PAYMENT_TYPE_OFFLINE\",e.SDK=\"PAYMENT_TYPE_SDK\"},4507(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916),i=r(3491);function o(t){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},o(t)}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,u(n.key),n)}}function u(t){var e=function(t){if(\"object\"!=o(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=o(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==o(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,o=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"mapToPayload\",value:function(t){var e=t.additionalAction,r=t.payment,o=void 0===r?{}:r,a=t.paymentMethod;return(0,n.omitNil)({instrument:{expires:{month:o.ccExpiry?(0,n.toNumber)(o.ccExpiry.month):null,year:o.ccExpiry?(0,n.toNumber)(o.ccExpiry.year):null},name:o.ccName,number:o.ccNumber,verification_value:o.ccCvv,type:i.PPSDK_CREDIT_CARD},form_nonce:o.hostedFormNonce,payment_method_id:a.id,human_verification:e?{id:\"recaptcha_v2_verification\",parameters:{token:e?e.data.human_verification_token:null}}:null})}},{key:\"mapToHeaders\",value:function(t){var e=t.authToken;return(0,n.omitNil)({Authorization:e})}}])&&a(e.prototype,r),o&&a(e,o),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,o}()},2815(t,e){\"use strict\";function r(t){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},r(t)}function n(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,i(n.key),n)}}function i(t){var e=function(t){if(\"object\"!=r(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==r(e)?e:e+\"\"}Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0,e.default=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.config=e}return e=t,i=[{key:\"create\",value:function(e){return new t(e)}}],(r=[{key:\"host\",get:function(){return this.config.host}},{key:\"getOffsitePaymentUrl\",value:function(){return\"\".concat(this.host,\"/pay/initialize\")}},{key:\"getPaymentUrl\",value:function(){return\"\".concat(this.host,\"/api/public/v1/orders/payments\")}},{key:\"getPpsdkPaymentUrl\",value:function(){return\"\".concat(this.host,\"/payments\")}},{key:\"getGenerateClientTokenUrl\",value:function(){return\"\".concat(this.host,\"/api/v2/public/payments/client_tokens\")}}])&&n(e.prototype,r),i&&n(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},1517(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916);function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if(\"object\"!=i(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=i(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==i(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,i=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"mapToCustomer\",value:function(t){var e=t.customer,r=void 0===e?{}:e,i=t.quoteMeta,o=void 0===i?{}:i;return(0,n.omitNil)({customer_group:r.customerGroupName?{name:r.customerGroupName}:null,geo_ip_country_code:o.request?o.request.geoCountryCode:null,id:r.customerId?(0,n.toString)(r.customerId):null,session_token:o.request?o.request.sessionHash:null})}}])&&o(e.prototype,r),i&&o(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},3805(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916);function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if(\"object\"!=i(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=i(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==i(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,i=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"mapToOrder\",value:function(t){var e=t.order,r=void 0===e?{}:e;return(0,n.omitNil)({billing_address:this.mapToBillingAddress(t),coupons:this.mapToCoupons(t),currency:r.currency,id:r.orderId?(0,n.toString)(r.orderId):null,items:this.mapToItems(t),shipping:this.mapToShipping(t),shipping_address:this.mapToShippingAddress(t),token:r.token,totals:this.mapToOrderTotals(t)})}},{key:\"mapToBillingAddress\",value:function(t){var e=t.customer,r=void 0===e?{}:e,n=this.mapToAddress(t,\"billingAddress\");return r.email&&(n.email=r.email),n}},{key:\"mapToShipping\",value:function(t){var e=t.shippingOption||{},r=e.description,i=e.transitTime;return r?[(0,n.omitEmptyStringAndNil)({method:r,transit_time:i})]:[]}},{key:\"mapToCoupons\",value:function(t){var e=t.order,r=void 0===e?{}:e;return r.coupon&&r.coupon.coupons?r.coupon.coupons.map(function(t){return{code:t.code}}):[]}},{key:\"mapToShippingAddress\",value:function(t){return this.mapToAddress(t,\"shippingAddress\")}},{key:\"mapToAddress\",value:function(t,e){var r=t[e]||{};return(0,n.omitEmptyStringAndNil)({city:r.city,company:r.company,country_code:r.countryCode,country:r.country,first_name:r.firstName,last_name:r.lastName,phone:r.phone,state_code:r.provinceCode,state:r.province,street_1:r.addressLine1,street_2:r.addressLine2,zip:r.postCode})}},{key:\"mapToItems\",value:function(t){var e=t.cart;return(void 0===e?{items:[]}:e).items.map(function(t){return(0,n.omitNil)({code:t.id,variant_id:t.variantId,name:t.name,price:t.integerAmount,unit_price:t.integerUnitPrice,quantity:t.quantity,sku:t.sku})})}},{key:\"mapToOrderTotals\",value:function(t){var e=t.order,r=void 0===e?{}:e;return(0,n.omitNil)({grand_total:r.grandTotal?r.grandTotal.integerAmount:null,handling:r.handling?r.handling.integerAmount:null,shipping:r.shipping?r.shipping.integerAmount:null,subtotal:r.subtotal?r.subtotal.integerAmount:null,tax:r.taxTotal?r.taxTotal.integerAmount:null})}}])&&o(e.prototype,r),i&&o(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},2719(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916),i=s(r(1517)),o=s(r(3805)),a=s(r(3199)),u=s(r(2310));function s(t){return t&&t.__esModule?t:{default:t}}function c(t){return c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},c(t)}function l(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,f(n.key),n)}}function f(t){var e=function(t){if(\"object\"!=c(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=c(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==c(e)?e:e+\"\"}e.default=function(){function t(e,r,n,i){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.customerMapper=e,this.orderMapper=r,this.paymentMapper=n,this.storeMapper=i}return e=t,s=[{key:\"create\",value:function(){return new t(i.default.create(),o.default.create(),a.default.create(),u.default.create())}}],(r=[{key:\"mapToPayload\",value:function(t){var e=t.order,r=void 0===e?{}:e,i=t.additionalAction;return(0,n.omitNil)({customer:this.customerMapper.mapToCustomer(t),notify_url:r.callbackUrl,order:this.orderMapper.mapToOrder(t),payment:this.paymentMapper.mapToPayment(t),store:this.storeMapper.mapToStore(t),additional_action:i})}},{key:\"mapToHeaders\",value:function(t){var e=t.authToken;return(0,n.omitNil)({Authorization:e})}}])&&l(e.prototype,r),s&&l(e,s),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,s}()},3199(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=a(r(4475)),i=r(5916),o=a(r(187));function a(t){return t&&t.__esModule?t:{default:t}}function u(t){return u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},u(t)}function s(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,c(n.key),n)}}function c(t){var e=function(t){if(\"object\"!=u(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=u(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==u(e)?e:e+\"\"}e.default=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.paymentMethodIdMapper=e}return e=t,a=[{key:\"create\",value:function(){return new t(o.default.create())}}],(r=[{key:\"mapToPayment\",value:function(t){var e=t.order,r=void 0===e?{}:e,o=t.orderMeta,a=void 0===o?{}:o,u=t.payment,s=void 0===u?{}:u,c=t.paymentMethod,l=void 0===c?{}:c,f={device_info:s.deviceSessionId?s.deviceSessionId:null,device:a.deviceFingerprint?{fingerprint_id:a.deviceFingerprint}:null,gateway:this.paymentMethodIdMapper.mapToId(l),notify_url:r.callbackUrl,return_url:l.returnUrl||(r.payment?r.payment.returnUrl:null),vault_payment_instrument:s.instrumentId?null:s.shouldSaveInstrument,set_as_default_stored_instrument:s.instrumentId||s.shouldSaveInstrument?s.shouldSetAsDefaultInstrument:null},p=l.method;p&&(0,n.default)(f,{method:p});var d=s.nonce||l.nonce;return s.formattedPayload?(0,n.default)(f,s.formattedPayload):s.instrumentId?(0,n.default)(f,{bigpay_token:this.mapToBigPayToken(t)}):d?(0,n.default)(f,{credit_card_token:{token:d}}):s.cryptogramId?(0,n.default)(f,{credit_card_cryptogram:this.mapToCryptogram(t)}):(0,n.default)(f,{credit_card:this.mapToCreditCard(t)}),s.browser_info&&(0,n.default)(f,{browser_info:s.browser_info}),(0,i.omitNil)(f)}},{key:\"mapToCreditCard\",value:function(t){var e=t.payment,r=void 0===e?{}:e;return(0,i.omitNil)({account_name:r.ccName,month:r.ccExpiry?(0,i.toNumber)(r.ccExpiry.month):null,number:r.ccNumber,verification_value:r.ccCvv,year:r.ccExpiry?(0,i.toNumber)(r.ccExpiry.year):null,customer_code:r.ccCustomerCode,three_d_secure:r.threeDSecure,hosted_form_nonce:r.hostedFormNonce})}},{key:\"mapToBigPayToken\",value:function(t){var e=t.payment;return(0,i.omitNil)({credit_card_number_confirmation:e.ccNumber,token:e.instrumentId,verification_value:e.ccCvv,verification_nonce:e.nonce,three_d_secure:e.threeDSecure,hosted_form_nonce:e.hostedFormNonce,token_type:e.tokenType})}},{key:\"mapToCryptogram\",value:function(t){var e=t.payment;return(0,i.omitNil)({payment_cryptogram:e.cryptogramId,eci:e.eci,xid:e.transactionId,month:e.ccExpiry?(0,i.toNumber)(e.ccExpiry.month):null,number:e.ccNumber,year:e.ccExpiry?(0,i.toNumber)(e.ccExpiry.year):null,account_mask:e.accountMask})}}])&&s(e.prototype,r),a&&s(e,a),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,a}()},2310(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916);function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if(\"object\"!=i(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=i(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==i(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,i=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"mapToStore\",value:function(t){var e=t.store,r=void 0===e?{}:e;return(0,n.omitNil)({hash:r.storeHash,id:r.storeId?(0,n.toString)(r.storeId):null,name:r.storeName})}}])&&o(e.prototype,r),i&&o(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},3538(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916);function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if(\"object\"!=i(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=i(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==i(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,i=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"mapToCart\",value:function(t){var e=t.cart,r=void 0===e?{}:e;return(0,n.omitNil)({currency_code:r.currency,items:this.mapToItems(t),totals:this.mapToOrderTotals(t)})}},{key:\"mapToItems\",value:function(t){var e=this,r=t.cart;return(void 0===r?{items:[]}:r).items.map(function(t){return(0,n.omitNil)({discount_amount:t.integerDiscount,name:t.name,price:t.integerAmount,unit_price:t.integerUnitPrice,quantity:t.quantity,sku:t.sku,tax_amount:t.integerTax,amount:t.integerAmountAfterDiscount,type:e.mapToType(t)})})}},{key:\"mapToOrderTotals\",value:function(t){var e=t.cart,r=void 0===e?{}:e;return(0,n.omitNil)({discount_total:r.discount?r.discount.integerAmount:null,grand_total:r.grandTotal?r.grandTotal.integerAmount:null,shipping_total:r.shipping?r.shipping.integerAmount:null,subtotal:r.subtotal?r.subtotal.integerAmount:null,surcharge_total:r.handling?r.handling.integerAmount:null,tax_total:r.taxTotal?r.taxTotal.integerAmount:null})}},{key:\"mapToType\",value:function(t){return{ItemPhysicalEntity:\"physical\",ItemDigitalEntity:\"digital\",ItemGiftCertificateEntity:\"gift_card\"}[t.type]}}])&&o(e.prototype,r),i&&o(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},3373(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916),i=s(r(3538)),o=s(r(2740)),a=s(r(1138)),u=s(r(5913));function s(t){return t&&t.__esModule?t:{default:t}}function c(t){return c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},c(t)}function l(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,f(n.key),n)}}function f(t){var e=function(t){if(\"object\"!=c(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=c(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==c(e)?e:e+\"\"}e.default=function(){function t(e,r,n,i){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.cartMapper=e,this.gatewayMapper=r,this.quoteMapper=n,this.storeMapper=i}return e=t,s=[{key:\"create\",value:function(){return new t(i.default.create(),o.default.create(),a.default.create(),u.default.create())}}],(r=[{key:\"mapToClientToken\",value:function(t){return(0,n.omitNil)({cart:this.cartMapper.mapToCart(t),gateway:this.gatewayMapper.mapToGateway(t),quote:this.quoteMapper.mapToQuote(t),store:this.storeMapper.mapToStore(t)})}}])&&l(e.prototype,r),s&&l(e,s),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,s}()},2740(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n,i=r(5916),o=(n=r(187))&&n.__esModule?n:{default:n};function a(t){return a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},a(t)}function u(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,s(n.key),n)}}function s(t){var e=function(t){if(\"object\"!=a(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=a(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==a(e)?e:e+\"\"}e.default=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.paymentMethodIdMapper=e}return function(t,e,r){return e&&u(t.prototype,e),r&&u(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),t}(t,[{key:\"mapToGateway\",value:function(t){var e=t.paymentMethod,r=void 0===e?{}:e;return(0,i.omitNil)({name:this.paymentMethodIdMapper.mapToId(r)})}}],[{key:\"create\",value:function(){return new t(o.default.create())}}])}()},1138(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916);function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if(\"object\"!=i(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=i(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==i(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,i=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"mapToQuote\",value:function(t){return(0,n.omitNil)({billing_address:this.mapToAddress(t,\"billingAddress\"),shipping_address:this.mapToAddress(t,\"shippingAddress\")})}},{key:\"mapToAddress\",value:function(t,e){var r=t.customer,i=void 0===r?{}:r,o=t[e]||{};return(0,n.omitNil)({address_line_1:o.addressLine1,address_line_2:o.addressLine2,city:o.city,company:o.company,country_code:o.countryCode,email:i.email,first_name:o.firstName,last_name:o.lastName,phone:o.phone,postal_code:o.postCode,state:o.province})}}])&&o(e.prototype,r),i&&o(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},5913(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(5916);function i(t){return i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if(\"object\"!=i(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=i(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==i(e)?e:e+\"\"}e.default=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t)}return e=t,i=[{key:\"create\",value:function(){return new t}}],(r=[{key:\"mapToStore\",value:function(t){return(0,n.omitNil)({locale:this.mapToLocale(t),store_identity:this.mapToIdentity(t),urls:this.mapToUrls(t)})}},{key:\"mapToLocale\",value:function(t){var e=t.store,r=void 0===e?{}:e;return(0,n.omitNil)({country_code:r.countryCode,currency_code:r.currencyCode,language_code:r.storeLanguage})}},{key:\"mapToIdentity\",value:function(t){var e=t.store,r=void 0===e?{}:e;return(0,n.omitNil)({id:r.storeId?(0,n.toNumber)(r.storeId):null,name:r.storeName})}},{key:\"mapToUrls\",value:function(t){var e=t.store,r=void 0===e?{}:e;return(0,n.omitNil)({cart:r.cartLink,checkout:r.checkoutLink,confirmation:r.orderConfirmationLink,home:r.shopPath})}}])&&o(e.prototype,r),i&&o(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},4351(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=u(r(7542)),i=r(9726),o=u(r(6258)),a=r(3152);function u(t){return t&&t.__esModule?t:{default:t}}function s(t){return s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},s(t)}function c(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,l(n.key),n)}}function l(t){var e=function(t){if(\"object\"!=s(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,\"string\");if(\"object\"!=s(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==s(e)?e:e+\"\"}e.default=function(){function t(e,r){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.urlHelper=e,this.requestSender=r}return e=t,u=[{key:\"create\",value:function(e){return new t(o.default.create(e),n.default.create())}}],(r=[{key:\"loadInstruments\",value:function(t,e){var r=this.urlHelper.getInstrumentsUrl(t.storeId,t.customerId,t.currencyCode),n={headers:(0,a.mapToHeaders)(t)};this.requestSender.sendRequest(r,null,n,e)}},{key:\"loadInstrumentsWithAddress\",value:function(t,e){var r=this.urlHelper.getTrustedShippingAddressUrl(t.storeId,t.customerId,t.currencyCode),n=(0,a.mapToTrustedShippingAddressPayload)(t),o={method:i.POST,headers:(0,a.mapToHeaders)(t)};this.requestSender.postRequest(r,n,o,e)}},{key:\"deleteShopperInstrument\",value:function(t,e){var r=this.urlHelper.getInstrumentByIdUrl(t.storeId,t.customerId,t.instrumentId,t.currencyCode),n={method:i.DELETE,headers:(0,a.mapToHeaders)(t)};this.requestSender.sendRequest(r,null,n,e)}}])&&c(e.prototype,r),u&&c(e,u),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,u}()},6258(t,e){\"use strict\";function r(t){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},r(t)}function n(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(t,i(n.key),n)}}function i(t){var e=function(t){if(\"object\"!=r(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,\"string\");if(\"object\"!=r(n))return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(t)}(t);return\"symbol\"==r(e)?e:e+\"\"}Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0,e.default=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.config=e}return e=t,i=[{key:\"create\",value:function(e){return new t(e)}}],(r=[{key:\"host\",get:function(){if(!this.config||!this.config.host)throw new Error(\"Host URL unavailable or not supplied.\");return this.config.host}},{key:\"getInstrumentsUrl\",value:function(t,e,r){return\"\".concat(this.host,\"/api/v3/stores/\").concat(t,\"/shoppers/\").concat(e,\"/instruments?currency_code=\").concat(r)}},{key:\"getTrustedShippingAddressUrl\",value:function(t,e,r){return\"\".concat(this.host,\"/api/v3/stores/\").concat(t,\"/shoppers/\").concat(e,\"/instruments/trusted_shipping_address?currency_code=\").concat(r)}},{key:\"getInstrumentByIdUrl\",value:function(t,e,r,n){return\"\".concat(this.host,\"/api/v2/stores/\").concat(t,\"/shoppers/\").concat(e,\"/instruments/\").concat(r,\"?currency_code=\").concat(n)}}])&&n(e.prototype,r),i&&n(e,i),Object.defineProperty(e,\"prototype\",{writable:!1}),e;var e,r,i}()},3152(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.mapToHeaders=function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).authToken;return(0,n.omitNil)({Authorization:t})},e.mapToInstrumentPayload=function(){var t,e,r,o,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},u=a.providerName,s=a.defaultInstrument,c=(0,n.omitNil)({name:u});return(0,n.omitNil)({provider:c,credit_card:(t=a,e=t.creditCard,r=void 0===e?{}:e,o=(0,n.omitNil)(r.threeDSecure),(0,n.omitNil)({cardholder_name:r.cardholderName,number:r.number,month:r.month,year:r.year,verification_code:r.verificationCode,issue_month:r.issueMonth,issue_year:r.issueYear,issue_number:r.issueNumber,track_data:r.trackData,is_manual_entry:r.isManualEntry,icc_data:r.iccData,fallback_reason:r.fallbackReason,is_contactless:r.isContactless,encrypted_pin_cryptogram:r.encryptedPinCryptogram,encrypted_pin_ksn:r.encryptedPinKsn,three_d_secure:o})),billing_address:i(a.billingAddress),default_instrument:s})},e.mapToTrustedShippingAddressPayload=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Array.isArray(t.shippingAddress)?(0,n.omitNil)({shipping_addresses:t.shippingAddress.map(function(t){return i(t)})}):(0,n.omitNil)({shipping_address:i(t.shippingAddress)})};var n=r(5916);function i(){var t,e,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=(t=r.provinceCode,e=r.province,(0,n.omitNil)({code:t,name:e}));return(0,n.omitNil)({address_line_1:r.addressLine1,address_line_2:r.addressLine2,city:r.city,company:r.company,country_code:r.countryCode,email:r.email,first_name:r.firstName,last_name:r.lastName,phone:r.phone,postal_code:r.postCode,state:i})}},9165(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t){var e=new n.default;return new i.default(e,t)};var n=r(9828),i=r(5470)},9828(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(){function t(){}return t.prototype.build=function(t,e,r){var n=this,i=document.createElement(\"form\");return i.style.display=\"none\",i.setAttribute(\"action\",t),i.setAttribute(\"method\",\"POST\"),i.setAttribute(\"target\",r||\"_top\"),Object.keys(e).forEach(function(t){var r=e[t];i.appendChild(n._createInput(r,t))}),i},t.prototype._createInput=function(t,e){var r=document.createElement(\"input\");return r.setAttribute(\"name\",e),r.setAttribute(\"type\",\"hidden\"),r.setAttribute(\"value\",t),r},t}();e.default=r},5470(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(9783),i=function(){function t(t,e){this._formBuilder=t,this._options=e}return t.prototype.postForm=function(t,e,r,n){var i=this._formBuilder.build(this._prependHost(t),e,n);window.addEventListener(\"unload\",function t(){window.removeEventListener(\"unload\",t),r&&r()}),document.body.appendChild(i),i.submit()},t.prototype._prependHost=function(t){return this._options&&this._options.host&&!(0,n.isAbsoluteUrl)(t)?(0,n.joinPaths)(this._options.host,t):t},t}();e.default=i},8686(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FormPoster=e.createFormPoster=void 0;var n=r(9165);Object.defineProperty(e,\"createFormPoster\",{enumerable:!0,get:function(){return n.default}});var i=r(5470);Object.defineProperty(e,\"FormPoster\",{enumerable:!0,get:function(){return i.default}})},9783(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isAbsoluteUrl=function(t){return/^https?:\\/\\//.test(t)},e.joinPaths=function(t,e){return\"\".concat((r=t,r.replace(/\\/$/,\"\")),\"/\").concat(function(t){return t.replace(/^\\//,\"\")}(e));var r}},5889(t,e,r){\"use strict\";const n=r(803),i=r(1915),o=r(1657),a=r(3814);function u(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function s(t,e){return e.encode?e.strict?n(t):encodeURIComponent(t):t}function c(t,e){return e.decode?i(t):t}function l(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?l(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function f(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function p(t){const e=(t=f(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function d(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function h(t,e){u((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const r=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,r,n)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===n[t]&&(n[t]={}),n[t][e[1]]=r):n[t]=r};case\"bracket\":return(t,r,n)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==n[t]?n[t]=[].concat(n[t],r):n[t]=[r]:n[t]=r};case\"comma\":case\"separator\":return(e,r,n)=>{const i=\"string\"==typeof r&&r.includes(t.arrayFormatSeparator),o=\"string\"==typeof r&&!i&&c(r,t).includes(t.arrayFormatSeparator);r=o?c(r,t):r;const a=i||o?r.split(t.arrayFormatSeparator).map(e=>c(e,t)):null===r?r:c(r,t);n[e]=a};default:return(t,e,r)=>{void 0!==r[t]?r[t]=[].concat(r[t],e):r[t]=e}}}(e),n=Object.create(null);if(\"string\"!=typeof t)return n;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return n;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,a]=o(e.decode?i.replace(/\\+/g,\" \"):i,\"=\");a=void 0===a?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?a:c(a,e),r(c(t,e),a,n)}for(const t of Object.keys(n)){const r=n[t];if(\"object\"==typeof r&&null!==r)for(const t of Object.keys(r))r[t]=d(r[t],e);else n[t]=d(r,e)}return!1===e.sort?n:(!0===e.sort?Object.keys(n).sort():Object.keys(n).sort(e.sort)).reduce((t,e)=>{const r=n[e];return Boolean(r)&&\"object\"==typeof r&&!Array.isArray(r)?t[e]=l(r):t[e]=r,t},Object.create(null))}e.extract=p,e.parse=h,e.stringify=(t,e)=>{if(!t)return\"\";u((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const r=r=>e.skipNull&&null==t[r]||e.skipEmptyString&&\"\"===t[r],n=function(t){switch(t.arrayFormat){case\"index\":return e=>(r,n)=>{const i=r.length;return void 0===n||t.skipNull&&null===n||t.skipEmptyString&&\"\"===n?r:null===n?[...r,[s(e,t),\"[\",i,\"]\"].join(\"\")]:[...r,[s(e,t),\"[\",s(i,t),\"]=\",s(n,t)].join(\"\")]};case\"bracket\":return e=>(r,n)=>void 0===n||t.skipNull&&null===n||t.skipEmptyString&&\"\"===n?r:null===n?[...r,[s(e,t),\"[]\"].join(\"\")]:[...r,[s(e,t),\"[]=\",s(n,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(r,n)=>null==n||0===n.length?r:0===r.length?[[s(e,t),\"=\",s(n,t)].join(\"\")]:[[r,s(n,t)].join(t.arrayFormatSeparator)];default:return e=>(r,n)=>void 0===n||t.skipNull&&null===n||t.skipEmptyString&&\"\"===n?r:null===n?[...r,s(e,t)]:[...r,[s(e,t),\"=\",s(n,t)].join(\"\")]}}(e),i={};for(const e of Object.keys(t))r(e)||(i[e]=t[e]);const o=Object.keys(i);return!1!==e.sort&&o.sort(e.sort),o.map(r=>{const i=t[r];return void 0===i?\"\":null===i?s(r,e):Array.isArray(i)?i.reduce(n(r),[]).join(\"&\"):s(r,e)+\"=\"+s(i,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[r,n]=o(t,\"#\");return Object.assign({url:r.split(\"?\")[0]||\"\",query:h(p(t),e)},e&&e.parseFragmentIdentifier&&n?{fragmentIdentifier:c(n,e)}:{})},e.stringifyUrl=(t,r)=>{r=Object.assign({encode:!0,strict:!0},r);const n=f(t.url).split(\"?\")[0]||\"\",i=e.extract(t.url),o=e.parse(i,{sort:!1}),a=Object.assign(o,t.query);let u=e.stringify(a,r);u&&(u=`?${u}`);let c=function(t){let e=\"\";const r=t.indexOf(\"#\");return-1!==r&&(e=t.slice(r)),e}(t.url);return t.fragmentIdentifier&&(c=`#${s(t.fragmentIdentifier,r)}`),`${n}${u}${c}`},e.pick=(t,r,n)=>{n=Object.assign({parseFragmentIdentifier:!0},n);const{url:i,query:o,fragmentIdentifier:u}=e.parseUrl(t,n);return e.stringifyUrl({url:i,query:a(o,r),fragmentIdentifier:u},n)},e.exclude=(t,r,n)=>{const i=Array.isArray(r)?t=>!r.includes(t):(t,e)=>!r(t,e);return e.pick(t,i,n)}},2437(t,e,r){\"use strict\";t.exports={number:r(36),expirationDate:r(1644),expirationMonth:r(188),expirationYear:r(7209),cvv:r(3221),postalCode:r(583),creditCardType:r(2921)}},36(t,e,r){\"use strict\";var n=r(1653),i=r(2921);function o(t,e,r){return{card:t,isPotentiallyValid:e,isValid:r}}t.exports=function(t,e){var r,a,u,s,c;if(e=e||{},\"number\"==typeof t&&(t=String(t)),\"string\"!=typeof t)return o(null,!1,!1);if(t=t.replace(/\\-|\\s/g,\"\"),!/^\\d*$/.test(t))return o(null,!1,!1);if(0===(r=i(t)).length)return o(null,!1,!1);if(1!==r.length)return o(null,!0,!1);if(a=r[0],e.maxLength&&t.length>e.maxLength)return o(a,!1,!1);for(u=a.type===i.types.UNIONPAY&&!0!==e.luhnValidateUnionPay||n(t),c=Math.max.apply(null,a.lengths),e.maxLength&&(c=Math.min(e.maxLength,c)),s=0;s<a.lengths.length;s++)if(a.lengths[s]===t.length)return o(a,t.length<c||u,u);return o(a,t.length<c,!1)}},3221(t){\"use strict\";function e(t,e){return{isValid:t,isPotentiallyValid:e}}t.exports=function(t,r){return r=(r=r||3)instanceof Array?r:[r],\"string\"!=typeof t?e(!1,!1):/^\\d*$/.test(t)?function(t,e){for(var r=0;r<t.length;r++)if(e===t[r])return!0;return!1}(r,t.length)?e(!0,!0):t.length<Math.min.apply(null,r)?e(!1,!0):t.length>function(t){for(var e=3,r=0;r<t.length;r++)e=t[r]>e?t[r]:e;return e}(r)?e(!1,!1):e(!0,!0):e(!1,!1)}},1644(t,e,r){\"use strict\";var n=r(9376),i=r(188),o=r(7209);function a(t,e,r,n){return{isValid:t,isPotentiallyValid:e,month:r,year:n}}t.exports=function(t,e){var r,u,s,c;if(\"string\"==typeof t)t=t.replace(/^(\\d\\d) (\\d\\d(\\d\\d)?)$/,\"$1/$2\"),r=n(t);else{if(null===t||\"object\"!=typeof t)return a(!1,!1,null,null);r={month:String(t.month),year:String(t.year)}}if(u=i(r.month),s=o(r.year,e),u.isValid){if(s.isCurrentYear)return a(c=u.isValidForThisYear,c,r.month,r.year);if(s.isValid)return a(!0,!0,r.month,r.year)}return u.isPotentiallyValid&&s.isPotentiallyValid?a(!1,!0,null,null):a(!1,!1,null,null)}},188(t){\"use strict\";function e(t,e,r){return{isValid:t,isPotentiallyValid:e,isValidForThisYear:r||!1}}t.exports=function(t){var r,n,i=(new Date).getMonth()+1;return\"string\"!=typeof t?e(!1,!1):\"\"===t.replace(/\\s/g,\"\")||\"0\"===t?e(!1,!0):/^\\d*$/.test(t)?(r=parseInt(t,10),isNaN(t)?e(!1,!1):e(n=r>0&&r<13,n,n&&r>=i)):e(!1,!1)}},7209(t){\"use strict\";function e(t,e,r){return{isValid:t,isPotentiallyValid:e,isCurrentYear:r||!1}}t.exports=function(t,r){var n,i,o,a,u;return r=r||19,\"string\"!=typeof t?e(!1,!1):\"\"===t.replace(/\\s/g,\"\")?e(!1,!0):/^\\d*$/.test(t)?(i=t.length)<2?e(!1,!0):(n=(new Date).getFullYear(),3===i?e(!1,t.slice(0,2)===String(n).slice(0,2)):i>4?e(!1,!1):(t=parseInt(t,10),o=Number(String(n).substr(2,2)),2===i?(u=o===t,a=t>=o&&t<=o+r):4===i&&(u=n===t,a=t>=n&&t<=n+r),e(a,a,u))):e(!1,!1)}},2278(t){\"use strict\";t.exports=Array.isArray||function(t){return\"[object Array]\"===Object.prototype.toString.call(t)}},1653(t){\"use strict\";t.exports=function(t){for(var e,r=0,n=!1,i=t.length-1;i>=0;)e=parseInt(t.charAt(i),10),n&&(e*=2)>9&&(e=e%10+1),n=!n,r+=e,i--;return r%10==0}},9376(t,e,r){\"use strict\";var n=r(7209),i=r(2278);t.exports=function(t){var e,r,o,a,u;return/^\\d{4}-\\d{1,2}$/.test(t)?t=t.split(\"-\").reverse():/\\//.test(t)?t=t.split(/\\s*\\/\\s*/g):/\\s/.test(t)&&(t=t.split(/ +/g)),i(t)?{month:t[0]||\"\",year:t.slice(1).join()}:(o=t,r=0===(u=Number(o[0]))?2:u>1||1===u&&Number(o[1])>2?1:1===u?(a=o.substr(1),n(a).isPotentiallyValid?1:2):5===o.length?1:o.length>5?2:1,{month:e=t.substr(0,r),year:t.substr(e.length)})}},583(t){\"use strict\";function e(t,e){return{isValid:t,isPotentiallyValid:e}}t.exports=function(t,r){var n;return n=(r=r||{}).minLength||3,\"string\"!=typeof t?e(!1,!1):t.length<n?e(!1,!0):e(!0,!0)}},2921(t,e,r){\"use strict\";var n,i=r(2931),o=r(7695),a=r(4461),u=r(6520),s=r(9545),c={},l={VISA:\"visa\",MASTERCARD:\"mastercard\",AMERICAN_EXPRESS:\"american-express\",DINERS_CLUB:\"diners-club\",DISCOVER:\"discover\",JCB:\"jcb\",UNIONPAY:\"unionpay\",MAESTRO:\"maestro\",ELO:\"elo\",MIR:\"mir\",HIPER:\"hiper\",HIPERCARD:\"hipercard\"},f=[l.VISA,l.MASTERCARD,l.AMERICAN_EXPRESS,l.DINERS_CLUB,l.DISCOVER,l.JCB,l.UNIONPAY,l.MAESTRO,l.ELO,l.MIR,l.HIPER,l.HIPERCARD];function p(t){return c[t]||i[t]}function d(t,e){var r=n.indexOf(t);if(!e&&-1===r)throw new Error('\"'+t+'\" is not a supported card type.');return r}function h(t){var e,r=[];return u(t)?0===t.length?n.map(function(t){return o(p(t))}):(n.forEach(function(e){var n=p(e);s(t,n,r)}),(e=a(r))?[e]:r):[]}n=o(f),h.getTypeInfo=function(t){return o(p(t))},h.removeCard=function(t){var e=d(t);n.splice(e,1)},h.addCard=function(t){var e=d(t.type,!0);c[t.type]=t,-1===e&&n.push(t.type)},h.updateCard=function(t,e){var r,n=c[t]||i[t];if(!n)throw new Error('\"'+t+'\" is not a recognized type. Use `addCard` instead.');if(e.type&&n.type!==e.type)throw new Error(\"Cannot overwrite type parameter.\");r=o(n,!0),Object.keys(r).forEach(function(t){e[t]&&(r[t]=e[t])}),c[r.type]=r},h.changeOrder=function(t,e){var r=d(t);n.splice(r,1),n.splice(e,0,t)},h.resetModifications=function(){n=o(f),c={}},h.types=l,t.exports=h},9545(t,e,r){\"use strict\";var n=r(7695),i=r(6744);t.exports=function(t,e,r){var o,a,u,s;for(o=0;o<e.patterns.length;o++)if(a=e.patterns[o],i(t,a)){s=n(e),u=Array.isArray(a)?String(a[0]).length:String(a).length,t.length>=u&&(s.matchStrength=u),r.push(s);break}}},2931(t){\"use strict\";t.exports={visa:{niceType:\"Visa\",type:\"visa\",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:\"CVV\",size:3}},mastercard:{niceType:\"Mastercard\",type:\"mastercard\",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}},\"american-express\":{niceType:\"American Express\",type:\"american-express\",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:\"CID\",size:4}},\"diners-club\":{niceType:\"Diners Club\",type:\"diners-club\",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:\"CVV\",size:3}},discover:{niceType:\"Discover\",type:\"discover\",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:\"CID\",size:3}},jcb:{niceType:\"JCB\",type:\"jcb\",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:\"CVV\",size:3}},unionpay:{niceType:\"UnionPay\",type:\"unionpay\",patterns:[620,[624,626],[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[622019,622999],[62207,62209],[622126,622925],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:\"CVN\",size:3}},maestro:{niceType:\"Maestro\",type:\"maestro\",patterns:[493698,[5e5,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:\"CVC\",size:3}},elo:{niceType:\"Elo\",type:\"elo\",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:\"CVE\",size:3}},mir:{niceType:\"Mir\",type:\"mir\",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:\"CVP2\",size:3}},hiper:{niceType:\"Hiper\",type:\"hiper\",patterns:[637095,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}},hipercard:{niceType:\"Hipercard\",type:\"hipercard\",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:\"CVC\",size:3}}}},7695(t){\"use strict\";t.exports=function(t){return t?JSON.parse(JSON.stringify(t)):null}},4461(t){\"use strict\";t.exports=function(t){if(function(t){var e=t.filter(function(t){return t.matchStrength}).length;return e>0&&e===t.length}(t))return t.reduce(function(t,e){return t?t.matchStrength<e.matchStrength?e:t:e})}},6520(t){\"use strict\";t.exports=function(t){return\"string\"==typeof t||t instanceof String}},6744(t){\"use strict\";t.exports=function(t,e){return Array.isArray(e)?function(t,e,r){var n=String(e).length,i=t.substr(0,n),o=parseInt(i,10);return e=parseInt(String(e).substr(0,i.length),10),r=parseInt(String(r).substr(0,i.length),10),o>=e&&o<=r}(t,e[0],e[1]):function(t,e){return(e=String(e)).substring(0,t.length)===t.substring(0,e.length)}(t,e)}},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",r=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),n=new RegExp(\"(\"+e+\")+\",\"gi\");function i(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var r=t.slice(0,e),n=t.slice(e);return Array.prototype.concat.call([],i(r),i(n))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var e=t.match(r)||[],n=1;n<e.length;n++)e=(t=i(e,n).join(\"\")).match(r)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},r=n.exec(t);r;){try{e[r[0]]=decodeURIComponent(r[0])}catch(t){var i=o(r[0]);i!==r[0]&&(e[r[0]]=i)}r=n.exec(t)}e[\"%C2\"]=\"�\";for(var a=Object.keys(e),u=0;u<a.length;u++){var s=a[u];t=t.replace(new RegExp(s,\"g\"),e[s])}return t}(t)}}},3592(t,e,r){\"use strict\";var n=r(4684),i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function a(t,e,r){var o=e[r];if(null!=o){if(i.call(t,r)&&(void 0===t[r]||null===t[r]))throw new TypeError(\"Cannot convert undefined or null to object (\"+r+\")\");i.call(t,r)&&n(o)?t[r]=u(Object(t[r]),e[r]):t[r]=o}}function u(t,e){if(t===e)return t;for(var r in e=Object(e))i.call(e,r)&&a(t,e,r);if(Object.getOwnPropertySymbols)for(var n=Object.getOwnPropertySymbols(e),u=0;u<n.length;u++)o.call(e,n[u])&&a(t,e,n[u]);return t}t.exports=function(t){t=function(t){if(null==t)throw new TypeError(\"Sources cannot be null or undefined\");return Object(t)}(t);for(var e=1;e<arguments.length;e++)u(t,arguments[e]);return t}},3814(t){\"use strict\";t.exports=function(t,e){for(var r={},n=Object.keys(t),i=Array.isArray(e),o=0;o<n.length;o++){var a=n[o],u=t[a];(i?-1!==e.indexOf(a):e(a,u,t))&&(r[a]=u)}return r}},4684(t){\"use strict\";t.exports=function(t){var e=typeof t;return null!==t&&(\"object\"===e||\"function\"===e)}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var r=arguments[t];for(var n in r)e[n]=r[n]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function r(n){function i(){}function o(e,r,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var a=JSON.stringify(r);/^[\\{\\[]/.test(a)&&(r=a)}catch(t){}r=n.write?n.write(r,e):encodeURIComponent(String(r)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var u=\"\";for(var s in o)o[s]&&(u+=\"; \"+s,!0!==o[s]&&(u+=\"=\"+o[s].split(\";\")[0]));return document.cookie=e+\"=\"+r+u}}function a(t,r){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],a=0;a<o.length;a++){var u=o[a].split(\"=\"),s=u.slice(1).join(\"=\");r||'\"'!==s.charAt(0)||(s=s.slice(1,-1));try{var c=e(u[0]);if(s=(n.read||n)(s,c)||e(s),r)try{s=JSON.parse(s)}catch(t){}if(i[c]=s,t===c)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return a(t,!1)},i.getJSON=function(t){return a(t,!0)},i.remove=function(e,r){o(e,\"\",t(r,{expires:-1}))},i.defaults={},i.withConverter=r,i}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},35(t,e,r){t=r.nmd(t);var n=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",a=\"[object Function]\",u=\"[object Object]\",s=/^\\[object .+?Constructor\\]$/,c=/^(?:0|[1-9]\\d*)$/,l={};l[\"[object Float32Array]\"]=l[\"[object Float64Array]\"]=l[\"[object Int8Array]\"]=l[\"[object Int16Array]\"]=l[\"[object Int32Array]\"]=l[\"[object Uint8Array]\"]=l[\"[object Uint8ClampedArray]\"]=l[\"[object Uint16Array]\"]=l[\"[object Uint32Array]\"]=!0,l[o]=l[\"[object Array]\"]=l[\"[object ArrayBuffer]\"]=l[\"[object Boolean]\"]=l[\"[object DataView]\"]=l[\"[object Date]\"]=l[\"[object Error]\"]=l[a]=l[\"[object Map]\"]=l[\"[object Number]\"]=l[u]=l[\"[object RegExp]\"]=l[\"[object Set]\"]=l[\"[object String]\"]=l[\"[object WeakMap]\"]=!1;var f,p,d,h=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,y=\"object\"==typeof self&&self&&self.Object===Object&&self,m=h||y||Function(\"return this\")(),v=e&&!e.nodeType&&e,g=v&&t&&!t.nodeType&&t,_=g&&g.exports===v,b=_&&h.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),E=w&&w.isTypedArray,O=Array.prototype,S=Function.prototype,T=Object.prototype,C=m[\"__core-js_shared__\"],A=S.toString,P=T.hasOwnProperty,x=(f=/[^.]+$/.exec(C&&C.keys&&C.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+f:\"\",j=T.toString,I=A.call(Object),k=RegExp(\"^\"+A.call(P).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),M=_?m.Buffer:void 0,R=m.Symbol,N=m.Uint8Array,D=(M&&M.allocUnsafe,p=Object.getPrototypeOf,d=Object,function(t){return p(d(t))}),F=Object.create,L=T.propertyIsEnumerable,U=O.splice,$=R?R.toStringTag:void 0,V=function(){try{var t=ut(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),q=M?M.isBuffer:void 0,z=Math.max,B=Date.now,H=ut(m,\"Map\"),Y=ut(Object,\"create\"),G=function(){function t(){}return function(e){if(!_t(e))return{};if(F)return F(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();function W(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function K(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function Z(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function J(t){var e=this.__data__=new K(t);this.size=e.size}function X(t,e,r){(void 0!==r&&!pt(t[e],r)||void 0===r&&!(e in t))&&et(t,e,r)}function Q(t,e,r){var n=t[e];P.call(t,e)&&pt(n,r)&&(void 0!==r||e in t)||et(t,e,r)}function tt(t,e){for(var r=t.length;r--;)if(pt(t[r][0],e))return r;return-1}function et(t,e,r){\"__proto__\"==e&&V?V(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}W.prototype.clear=function(){this.__data__=Y?Y(null):{},this.size=0},W.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},W.prototype.get=function(t){var e=this.__data__;if(Y){var r=e[t];return r===n?void 0:r}return P.call(e,t)?e[t]:void 0},W.prototype.has=function(t){var e=this.__data__;return Y?void 0!==e[t]:P.call(e,t)},W.prototype.set=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Y&&void 0===e?n:e,this},K.prototype.clear=function(){this.__data__=[],this.size=0},K.prototype.delete=function(t){var e=this.__data__,r=tt(e,t);return!(r<0||(r==e.length-1?e.pop():U.call(e,r,1),--this.size,0))},K.prototype.get=function(t){var e=this.__data__,r=tt(e,t);return r<0?void 0:e[r][1]},K.prototype.has=function(t){return tt(this.__data__,t)>-1},K.prototype.set=function(t,e){var r=this.__data__,n=tt(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this},Z.prototype.clear=function(){this.size=0,this.__data__={hash:new W,map:new(H||K),string:new W}},Z.prototype.delete=function(t){var e=at(this,t).delete(t);return this.size-=e?1:0,e},Z.prototype.get=function(t){return at(this,t).get(t)},Z.prototype.has=function(t){return at(this,t).has(t)},Z.prototype.set=function(t,e){var r=at(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this},J.prototype.clear=function(){this.__data__=new K,this.size=0},J.prototype.delete=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},J.prototype.get=function(t){return this.__data__.get(t)},J.prototype.has=function(t){return this.__data__.has(t)},J.prototype.set=function(t,e){var r=this.__data__;if(r instanceof K){var n=r.__data__;if(!H||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new Z(n)}return r.set(t,e),this.size=r.size,this};function rt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":$&&$ in Object(t)?function(t){var e=P.call(t,$),r=t[$];try{t[$]=void 0;var n=!0}catch(t){}var i=j.call(t);return n&&(e?t[$]=r:delete t[$]),i}(t):function(t){return j.call(t)}(t)}function nt(t){return bt(t)&&rt(t)==o}function it(t,e,r,n,i){t!==e&&function(t,e,r){for(var n=-1,i=Object(t),o=r(t),a=o.length;a--;){var u=o[++n];if(!1===e(i[u],u,i))break}}(e,function(o,a){if(i||(i=new J),_t(o))!function(t,e,r,n,i,o,a){var s=lt(t,r),c=lt(e,r),l=a.get(c);if(l)X(t,r,l);else{var f,p,d,h,y,m=o?o(s,c,r+\"\",t,e,a):void 0,v=void 0===m;if(v){var g=ht(c),_=!g&&mt(c),b=!g&&!_&&wt(c);m=c,g||_||b?ht(s)?m=s:bt(y=s)&&yt(y)?m=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}(s):_?(v=!1,m=function(t){return t.slice()}(c)):b?(v=!1,h=new(d=(f=c).buffer).constructor(d.byteLength),new N(h).set(new N(d)),p=h,m=new f.constructor(p,f.byteOffset,f.length)):m=[]:function(t){if(!bt(t)||rt(t)!=u)return!1;var e=D(t);if(null===e)return!0;var r=P.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof r&&r instanceof r&&A.call(r)==I}(c)||dt(c)?(m=s,dt(s)?m=function(t){return function(t,e,r){var n=!r;r||(r={});for(var i=-1,o=e.length;++i<o;){var a=e[i],u=void 0;void 0===u&&(u=t[a]),n?et(r,a,u):Q(r,a,u)}return r}(t,Et(t))}(s):_t(s)&&!vt(s)||(m=function(t){return\"function\"!=typeof t.constructor||ct(t)?{}:G(D(t))}(c))):v=!1}v&&(a.set(c,m),i(m,c,n,o,a),a.delete(c)),X(t,r,m)}}(t,e,a,r,it,n,i);else{var s=n?n(lt(t,a),o,a+\"\",t,e,i):void 0;void 0===s&&(s=o),X(t,a,s)}},Et)}var ot=V?function(t,e){return V(t,\"toString\",{configurable:!0,enumerable:!1,value:(r=e,function(){return r}),writable:!0});var r}:Tt;function at(t,e){var r,n,i=t.__data__;return(\"string\"==(n=typeof(r=e))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function ut(t,e){var r=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!_t(t)||function(t){return!!x&&x in t}(t))&&(vt(t)?k:s).test(function(t){if(null!=t){try{return A.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(r)?r:void 0}function st(t,e){var r=typeof t;return!!(e=e??i)&&(\"number\"==r||\"symbol\"!=r&&c.test(t))&&t>-1&&t%1==0&&t<e}function ct(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||T)}function lt(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var ft=function(t){var e=0,r=0;return function(){var n=B(),i=16-(n-r);if(r=n,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ot);function pt(t,e){return t===e||t!=t&&e!=e}var dt=nt(function(){return arguments}())?nt:function(t){return bt(t)&&P.call(t,\"callee\")&&!L.call(t,\"callee\")},ht=Array.isArray;function yt(t){return null!=t&&gt(t.length)&&!vt(t)}var mt=q||function(){return!1};function vt(t){if(!_t(t))return!1;var e=rt(t);return e==a||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function _t(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=E?function(t){return function(e){return t(e)}}(E):function(t){return bt(t)&&gt(t.length)&&!!l[rt(t)]};function Et(t){return yt(t)?function(t,e){var r=ht(t),n=!r&&dt(t),i=!r&&!n&&mt(t),o=!r&&!n&&!i&&wt(t),a=r||n||i||o,u=a?function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}(t.length,String):[],s=u.length;for(var c in t)!e&&!P.call(t,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||st(c,s))||u.push(c);return u}(t,!0):function(t){if(!_t(t))return function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e}(t);var e=ct(t),r=[];for(var n in t)(\"constructor\"!=n||!e&&P.call(t,n))&&r.push(n);return r}(t)}var Ot,St=(Ot=function(t,e,r){it(t,e,r)},function(t,e){return ft(function(t,e,r){return e=z(void 0===e?t.length-1:e,0),function(){for(var n=arguments,i=-1,o=z(n.length-e,0),a=Array(o);++i<o;)a[i]=n[e+i];i=-1;for(var u=Array(e+1);++i<e;)u[i]=n[i];return u[e]=r(a),function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}(t,this,u)}}(t,e,Tt),t+\"\")}(function(t,e){var r=-1,n=e.length,i=n>1?e[n-1]:void 0,o=n>2?e[2]:void 0;for(i=Ot.length>3&&\"function\"==typeof i?(n--,i):void 0,o&&function(t,e,r){if(!_t(r))return!1;var n=typeof e;return!!(\"number\"==n?yt(r)&&st(e,r.length):\"string\"==n&&e in r)&&pt(r[e],t)}(e[0],e[1],o)&&(i=n<3?void 0:i,n=1),t=Object(t);++r<n;){var a=e[r];a&&Ot(t,a,r)}return t}));function Tt(t){return t}t.exports=St},9440(t,e,r){t=r.nmd(t),function(){var n,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",u=32,s=128,c=1/0,l=9007199254740991,f=NaN,p=4294967295,d=[[\"ary\",s],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",u],[\"partialRight\",64],[\"rearg\",256]],h=\"[object Arguments]\",y=\"[object Array]\",m=\"[object Boolean]\",v=\"[object Date]\",g=\"[object Error]\",_=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",E=\"[object Number]\",O=\"[object Object]\",S=\"[object Promise]\",T=\"[object RegExp]\",C=\"[object Set]\",A=\"[object String]\",P=\"[object Symbol]\",x=\"[object WeakMap]\",j=\"[object ArrayBuffer]\",I=\"[object DataView]\",k=\"[object Float32Array]\",M=\"[object Float64Array]\",R=\"[object Int8Array]\",N=\"[object Int16Array]\",D=\"[object Int32Array]\",F=\"[object Uint8Array]\",L=\"[object Uint8ClampedArray]\",U=\"[object Uint16Array]\",$=\"[object Uint32Array]\",V=/\\b__p \\+= '';/g,q=/\\b(__p \\+=) '' \\+/g,z=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,B=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,Y=RegExp(B.source),G=RegExp(H.source),W=/<%-([\\s\\S]+?)%>/g,K=/<%([\\s\\S]+?)%>/g,Z=/<%=([\\s\\S]+?)%>/g,J=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,X=/^\\w*$/,Q=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,et=RegExp(tt.source),rt=/^\\s+/,nt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,at=/,? & /,ut=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,st=/[()=,{}\\[\\]\\/\\s]/,ct=/\\\\(\\\\)?/g,lt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,ft=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,dt=/^0b[01]+$/i,ht=/^\\[object .+?Constructor\\]$/,yt=/^0o[0-7]+$/i,mt=/^(?:0|[1-9]\\d*)$/,vt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,_t=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",Et=\"\\\\u2700-\\\\u27bf\",Ot=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",St=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Tt=\"\\\\ufe0e\\\\ufe0f\",Ct=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",At=\"[\"+bt+\"]\",Pt=\"[\"+Ct+\"]\",xt=\"[\"+wt+\"]\",jt=\"\\\\d+\",It=\"[\"+Et+\"]\",kt=\"[\"+Ot+\"]\",Mt=\"[^\"+bt+Ct+jt+Et+Ot+St+\"]\",Rt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Nt=\"[^\"+bt+\"]\",Dt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ft=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Lt=\"[\"+St+\"]\",Ut=\"\\\\u200d\",$t=\"(?:\"+kt+\"|\"+Mt+\")\",Vt=\"(?:\"+Lt+\"|\"+Mt+\")\",qt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",zt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Bt=\"(?:\"+xt+\"|\"+Rt+\")?\",Ht=\"[\"+Tt+\"]?\",Yt=Ht+Bt+\"(?:\"+Ut+\"(?:\"+[Nt,Dt,Ft].join(\"|\")+\")\"+Ht+Bt+\")*\",Gt=\"(?:\"+[It,Dt,Ft].join(\"|\")+\")\"+Yt,Wt=\"(?:\"+[Nt+xt+\"?\",xt,Dt,Ft,At].join(\"|\")+\")\",Kt=RegExp(\"['’]\",\"g\"),Zt=RegExp(xt,\"g\"),Jt=RegExp(Rt+\"(?=\"+Rt+\")|\"+Wt+Yt,\"g\"),Xt=RegExp([Lt+\"?\"+kt+\"+\"+qt+\"(?=\"+[Pt,Lt,\"$\"].join(\"|\")+\")\",Vt+\"+\"+zt+\"(?=\"+[Pt,Lt+$t,\"$\"].join(\"|\")+\")\",Lt+\"?\"+$t+\"+\"+qt,Lt+\"+\"+zt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jt,Gt].join(\"|\"),\"g\"),Qt=RegExp(\"[\"+Ut+bt+wt+Tt+\"]\"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],re=-1,ne={};ne[k]=ne[M]=ne[R]=ne[N]=ne[D]=ne[F]=ne[L]=ne[U]=ne[$]=!0,ne[h]=ne[y]=ne[j]=ne[m]=ne[I]=ne[v]=ne[g]=ne[_]=ne[w]=ne[E]=ne[O]=ne[T]=ne[C]=ne[A]=ne[x]=!1;var ie={};ie[h]=ie[y]=ie[j]=ie[I]=ie[m]=ie[v]=ie[k]=ie[M]=ie[R]=ie[N]=ie[D]=ie[w]=ie[E]=ie[O]=ie[T]=ie[C]=ie[A]=ie[P]=ie[F]=ie[L]=ie[U]=ie[$]=!0,ie[g]=ie[_]=ie[x]=!1;var oe={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ae=parseFloat,ue=parseInt,se=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,ce=\"object\"==typeof self&&self&&self.Object===Object&&self,le=se||ce||Function(\"return this\")(),fe=e&&!e.nodeType&&e,pe=fe&&t&&!t.nodeType&&t,de=pe&&pe.exports===fe,he=de&&se.process,ye=function(){try{return pe&&pe.require&&pe.require(\"util\").types||he&&he.binding&&he.binding(\"util\")}catch(t){}}(),me=ye&&ye.isArrayBuffer,ve=ye&&ye.isDate,ge=ye&&ye.isMap,_e=ye&&ye.isRegExp,be=ye&&ye.isSet,we=ye&&ye.isTypedArray;function Ee(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function Oe(t,e,r,n){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i];e(n,a,r(a),t)}return n}function Se(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t}function Te(t,e){for(var r=null==t?0:t.length;r--&&!1!==e(t[r],r,t););return t}function Ce(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(!e(t[r],r,t))return!1;return!0}function Ae(t,e){for(var r=-1,n=null==t?0:t.length,i=0,o=[];++r<n;){var a=t[r];e(a,r,t)&&(o[i++]=a)}return o}function Pe(t,e){return!(null==t||!t.length)&&Le(t,e,0)>-1}function xe(t,e,r){for(var n=-1,i=null==t?0:t.length;++n<i;)if(r(e,t[n]))return!0;return!1}function je(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}function Ie(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t}function ke(t,e,r,n){var i=-1,o=null==t?0:t.length;for(n&&o&&(r=t[++i]);++i<o;)r=e(r,t[i],i,t);return r}function Me(t,e,r,n){var i=null==t?0:t.length;for(n&&i&&(r=t[--i]);i--;)r=e(r,t[i],i,t);return r}function Re(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}var Ne=qe(\"length\");function De(t,e,r){var n;return r(t,function(t,r,i){if(e(t,r,i))return n=r,!1}),n}function Fe(t,e,r,n){for(var i=t.length,o=r+(n?1:-1);n?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function Le(t,e,r){return e==e?function(t,e,r){for(var n=r-1,i=t.length;++n<i;)if(t[n]===e)return n;return-1}(t,e,r):Fe(t,$e,r)}function Ue(t,e,r,n){for(var i=r-1,o=t.length;++i<o;)if(n(t[i],e))return i;return-1}function $e(t){return t!=t}function Ve(t,e){var r=null==t?0:t.length;return r?He(t,e)/r:f}function qe(t){return function(e){return null==e?n:e[t]}}function ze(t){return function(e){return null==t?n:t[e]}}function Be(t,e,r,n,i){return i(t,function(t,i,o){r=n?(n=!1,t):e(r,t,i,o)}),r}function He(t,e){for(var r,i=-1,o=t.length;++i<o;){var a=e(t[i]);a!==n&&(r=r===n?a:r+a)}return r}function Ye(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}function Ge(t){return t?t.slice(0,lr(t)+1).replace(rt,\"\"):t}function We(t){return function(e){return t(e)}}function Ke(t,e){return je(e,function(e){return t[e]})}function Ze(t,e){return t.has(e)}function Je(t,e){for(var r=-1,n=t.length;++r<n&&Le(e,t[r],0)>-1;);return r}function Xe(t,e){for(var r=t.length;r--&&Le(e,t[r],0)>-1;);return r}var Qe=ze({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tr=ze({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function er(t){return\"\\\\\"+oe[t]}function rr(t){return Qt.test(t)}function nr(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r}function ir(t,e){return function(r){return t(e(r))}}function or(t,e){for(var r=-1,n=t.length,i=0,o=[];++r<n;){var u=t[r];u!==e&&u!==a||(t[r]=a,o[i++]=r)}return o}function ar(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r}function ur(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=[t,t]}),r}function sr(t){return rr(t)?function(t){for(var e=Jt.lastIndex=0;Jt.test(t);)++e;return e}(t):Ne(t)}function cr(t){return rr(t)?function(t){return t.match(Jt)||[]}(t):function(t){return t.split(\"\")}(t)}function lr(t){for(var e=t.length;e--&&nt.test(t.charAt(e)););return e}var fr=ze({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pr=function t(e){var r,nt=(e=null==e?le:pr.defaults(le.Object(),e,pr.pick(le,ee))).Array,bt=e.Date,wt=e.Error,Et=e.Function,Ot=e.Math,St=e.Object,Tt=e.RegExp,Ct=e.String,At=e.TypeError,Pt=nt.prototype,xt=Et.prototype,jt=St.prototype,It=e[\"__core-js_shared__\"],kt=xt.toString,Mt=jt.hasOwnProperty,Rt=0,Nt=(r=/[^.]+$/.exec(It&&It.keys&&It.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",Dt=jt.toString,Ft=kt.call(St),Lt=le._,Ut=Tt(\"^\"+kt.call(Mt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),$t=de?e.Buffer:n,Vt=e.Symbol,qt=e.Uint8Array,zt=$t?$t.allocUnsafe:n,Bt=ir(St.getPrototypeOf,St),Ht=St.create,Yt=jt.propertyIsEnumerable,Gt=Pt.splice,Wt=Vt?Vt.isConcatSpreadable:n,Jt=Vt?Vt.iterator:n,Qt=Vt?Vt.toStringTag:n,oe=function(){try{var t=so(St,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),se=e.clearTimeout!==le.clearTimeout&&e.clearTimeout,ce=bt&&bt.now!==le.Date.now&&bt.now,fe=e.setTimeout!==le.setTimeout&&e.setTimeout,pe=Ot.ceil,he=Ot.floor,ye=St.getOwnPropertySymbols,Ne=$t?$t.isBuffer:n,ze=e.isFinite,dr=Pt.join,hr=ir(St.keys,St),yr=Ot.max,mr=Ot.min,vr=bt.now,gr=e.parseInt,_r=Ot.random,br=Pt.reverse,wr=so(e,\"DataView\"),Er=so(e,\"Map\"),Or=so(e,\"Promise\"),Sr=so(e,\"Set\"),Tr=so(e,\"WeakMap\"),Cr=so(St,\"create\"),Ar=Tr&&new Tr,Pr={},xr=Fo(wr),jr=Fo(Er),Ir=Fo(Or),kr=Fo(Sr),Mr=Fo(Tr),Rr=Vt?Vt.prototype:n,Nr=Rr?Rr.valueOf:n,Dr=Rr?Rr.toString:n;function Fr(t){if(tu(t)&&!za(t)&&!(t instanceof Vr)){if(t instanceof $r)return t;if(Mt.call(t,\"__wrapped__\"))return Lo(t)}return new $r(t)}var Lr=function(){function t(){}return function(e){if(!Qa(e))return{};if(Ht)return Ht(e);t.prototype=e;var r=new t;return t.prototype=n,r}}();function Ur(){}function $r(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=n}function Vr(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function qr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function zr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function Br(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function Hr(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new Br;++e<r;)this.add(t[e])}function Yr(t){var e=this.__data__=new zr(t);this.size=e.size}function Gr(t,e){var r=za(t),n=!r&&qa(t),i=!r&&!n&&Ga(t),o=!r&&!n&&!i&&su(t),a=r||n||i||o,u=a?Ye(t.length,Ct):[],s=u.length;for(var c in t)!e&&!Mt.call(t,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||mo(c,s))||u.push(c);return u}function Wr(t){var e=t.length;return e?t[Hn(0,e-1)]:n}function Kr(t,e){return ko(Ci(t),on(e,0,t.length))}function Zr(t){return ko(Ci(t))}function Jr(t,e,r){(r!==n&&!Ua(t[e],r)||r===n&&!(e in t))&&rn(t,e,r)}function Xr(t,e,r){var i=t[e];Mt.call(t,e)&&Ua(i,r)&&(r!==n||e in t)||rn(t,e,r)}function Qr(t,e){for(var r=t.length;r--;)if(Ua(t[r][0],e))return r;return-1}function tn(t,e,r,n){return ln(t,function(t,i,o){e(n,t,r(t),o)}),n}function en(t,e){return t&&Ai(e,ju(e),t)}function rn(t,e,r){\"__proto__\"==e&&oe?oe(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}function nn(t,e){for(var r=-1,i=e.length,o=nt(i),a=null==t;++r<i;)o[r]=a?n:Tu(t,e[r]);return o}function on(t,e,r){return t==t&&(r!==n&&(t=t<=r?t:r),e!==n&&(t=t>=e?t:e)),t}function an(t,e,r,i,o,a){var u,s=1&e,c=2&e,l=4&e;if(r&&(u=o?r(t,i,o,a):r(t)),u!==n)return u;if(!Qa(t))return t;var f=za(t);if(f){if(u=function(t){var e=t.length,r=new t.constructor(e);return e&&\"string\"==typeof t[0]&&Mt.call(t,\"index\")&&(r.index=t.index,r.input=t.input),r}(t),!s)return Ci(t,u)}else{var p=fo(t),d=p==_||p==b;if(Ga(t))return bi(t,s);if(p==O||p==h||d&&!o){if(u=c||d?{}:ho(t),!s)return c?function(t,e){return Ai(t,lo(t),e)}(t,function(t,e){return t&&Ai(e,Iu(e),t)}(u,t)):function(t,e){return Ai(t,co(t),e)}(t,en(u,t))}else{if(!ie[p])return o?t:{};u=function(t,e,r){var n,i=t.constructor;switch(e){case j:return wi(t);case m:case v:return new i(+t);case I:return function(t,e){var r=e?wi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case k:case M:case R:case N:case D:case F:case L:case U:case $:return Ei(t,r);case w:return new i;case E:case A:return new i(t);case T:return function(t){var e=new t.constructor(t.source,ft.exec(t));return e.lastIndex=t.lastIndex,e}(t);case C:return new i;case P:return n=t,Nr?St(Nr.call(n)):{}}}(t,p,s)}}a||(a=new Yr);var y=a.get(t);if(y)return y;a.set(t,u),ou(t)?t.forEach(function(n){u.add(an(n,e,r,n,t,a))}):eu(t)&&t.forEach(function(n,i){u.set(i,an(n,e,r,i,t,a))});var g=f?n:(l?c?eo:to:c?Iu:ju)(t);return Se(g||t,function(n,i){g&&(n=t[i=n]),Xr(u,i,an(n,e,r,i,t,a))}),u}function un(t,e,r){var i=r.length;if(null==t)return!i;for(t=St(t);i--;){var o=r[i],a=e[o],u=t[o];if(u===n&&!(o in t)||!a(u))return!1}return!0}function sn(t,e,r){if(\"function\"!=typeof t)throw new At(i);return Po(function(){t.apply(n,r)},e)}function cn(t,e,r,n){var i=-1,o=Pe,a=!0,u=t.length,s=[],c=e.length;if(!u)return s;r&&(e=je(e,We(r))),n?(o=xe,a=!1):e.length>=200&&(o=Ze,a=!1,e=new Hr(e));t:for(;++i<u;){var l=t[i],f=null==r?l:r(l);if(l=n||0!==l?l:0,a&&f==f){for(var p=c;p--;)if(e[p]===f)continue t;s.push(l)}else o(e,f,n)||s.push(l)}return s}Fr.templateSettings={escape:W,evaluate:K,interpolate:Z,variable:\"\",imports:{_:Fr}},Fr.prototype=Ur.prototype,Fr.prototype.constructor=Fr,$r.prototype=Lr(Ur.prototype),$r.prototype.constructor=$r,Vr.prototype=Lr(Ur.prototype),Vr.prototype.constructor=Vr,qr.prototype.clear=function(){this.__data__=Cr?Cr(null):{},this.size=0},qr.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},qr.prototype.get=function(t){var e=this.__data__;if(Cr){var r=e[t];return r===o?n:r}return Mt.call(e,t)?e[t]:n},qr.prototype.has=function(t){var e=this.__data__;return Cr?e[t]!==n:Mt.call(e,t)},qr.prototype.set=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Cr&&e===n?o:e,this},zr.prototype.clear=function(){this.__data__=[],this.size=0},zr.prototype.delete=function(t){var e=this.__data__,r=Qr(e,t);return!(r<0||(r==e.length-1?e.pop():Gt.call(e,r,1),--this.size,0))},zr.prototype.get=function(t){var e=this.__data__,r=Qr(e,t);return r<0?n:e[r][1]},zr.prototype.has=function(t){return Qr(this.__data__,t)>-1},zr.prototype.set=function(t,e){var r=this.__data__,n=Qr(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this},Br.prototype.clear=function(){this.size=0,this.__data__={hash:new qr,map:new(Er||zr),string:new qr}},Br.prototype.delete=function(t){var e=ao(this,t).delete(t);return this.size-=e?1:0,e},Br.prototype.get=function(t){return ao(this,t).get(t)},Br.prototype.has=function(t){return ao(this,t).has(t)},Br.prototype.set=function(t,e){var r=ao(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this},Hr.prototype.add=Hr.prototype.push=function(t){return this.__data__.set(t,o),this},Hr.prototype.has=function(t){return this.__data__.has(t)},Yr.prototype.clear=function(){this.__data__=new zr,this.size=0},Yr.prototype.delete=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},Yr.prototype.get=function(t){return this.__data__.get(t)},Yr.prototype.has=function(t){return this.__data__.has(t)},Yr.prototype.set=function(t,e){var r=this.__data__;if(r instanceof zr){var n=r.__data__;if(!Er||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new Br(n)}return r.set(t,e),this.size=r.size,this};var ln=ji(gn),fn=ji(_n,!0);function pn(t,e){var r=!0;return ln(t,function(t,n,i){return r=!!e(t,n,i)}),r}function dn(t,e,r){for(var i=-1,o=t.length;++i<o;){var a=t[i],u=e(a);if(null!=u&&(s===n?u==u&&!uu(u):r(u,s)))var s=u,c=a}return c}function hn(t,e){var r=[];return ln(t,function(t,n,i){e(t,n,i)&&r.push(t)}),r}function yn(t,e,r,n,i){var o=-1,a=t.length;for(r||(r=yo),i||(i=[]);++o<a;){var u=t[o];e>0&&r(u)?e>1?yn(u,e-1,r,n,i):Ie(i,u):n||(i[i.length]=u)}return i}var mn=Ii(),vn=Ii(!0);function gn(t,e){return t&&mn(t,e,ju)}function _n(t,e){return t&&vn(t,e,ju)}function bn(t,e){return Ae(e,function(e){return Za(t[e])})}function wn(t,e){for(var r=0,i=(e=mi(e,t)).length;null!=t&&r<i;)t=t[Do(e[r++])];return r&&r==i?t:n}function En(t,e,r){var n=e(t);return za(t)?n:Ie(n,r(t))}function On(t){return null==t?t===n?\"[object Undefined]\":\"[object Null]\":Qt&&Qt in St(t)?function(t){var e=Mt.call(t,Qt),r=t[Qt];try{t[Qt]=n;var i=!0}catch(t){}var o=Dt.call(t);return i&&(e?t[Qt]=r:delete t[Qt]),o}(t):function(t){return Dt.call(t)}(t)}function Sn(t,e){return t>e}function Tn(t,e){return null!=t&&Mt.call(t,e)}function Cn(t,e){return null!=t&&e in St(t)}function An(t,e,r){for(var i=r?xe:Pe,o=t[0].length,a=t.length,u=a,s=nt(a),c=1/0,l=[];u--;){var f=t[u];u&&e&&(f=je(f,We(e))),c=mr(f.length,c),s[u]=!r&&(e||o>=120&&f.length>=120)?new Hr(u&&f):n}f=t[0];var p=-1,d=s[0];t:for(;++p<o&&l.length<c;){var h=f[p],y=e?e(h):h;if(h=r||0!==h?h:0,!(d?Ze(d,y):i(l,y,r))){for(u=a;--u;){var m=s[u];if(!(m?Ze(m,y):i(t[u],y,r)))continue t}d&&d.push(y),l.push(h)}}return l}function Pn(t,e,r){var i=null==(t=To(t,e=mi(e,t)))?t:t[Do(Ko(e))];return null==i?n:Ee(i,t,r)}function xn(t){return tu(t)&&On(t)==h}function jn(t,e,r,i,o){return t===e||(null==t||null==e||!tu(t)&&!tu(e)?t!=t&&e!=e:function(t,e,r,i,o,a){var u=za(t),s=za(e),c=u?y:fo(t),l=s?y:fo(e),f=(c=c==h?O:c)==O,p=(l=l==h?O:l)==O,d=c==l;if(d&&Ga(t)){if(!Ga(e))return!1;u=!0,f=!1}if(d&&!f)return a||(a=new Yr),u||su(t)?Xi(t,e,r,i,o,a):function(t,e,r,n,i,o,a){switch(r){case I:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case j:return!(t.byteLength!=e.byteLength||!o(new qt(t),new qt(e)));case m:case v:case E:return Ua(+t,+e);case g:return t.name==e.name&&t.message==e.message;case T:case A:return t==e+\"\";case w:var u=nr;case C:var s=1&n;if(u||(u=ar),t.size!=e.size&&!s)return!1;var c=a.get(t);if(c)return c==e;n|=2,a.set(t,e);var l=Xi(u(t),u(e),n,i,o,a);return a.delete(t),l;case P:if(Nr)return Nr.call(t)==Nr.call(e)}return!1}(t,e,c,r,i,o,a);if(!(1&r)){var _=f&&Mt.call(t,\"__wrapped__\"),b=p&&Mt.call(e,\"__wrapped__\");if(_||b){var S=_?t.value():t,x=b?e.value():e;return a||(a=new Yr),o(S,x,r,i,a)}}return!!d&&(a||(a=new Yr),function(t,e,r,i,o,a){var u=1&r,s=to(t),c=s.length;if(c!=to(e).length&&!u)return!1;for(var l=c;l--;){var f=s[l];if(!(u?f in e:Mt.call(e,f)))return!1}var p=a.get(t),d=a.get(e);if(p&&d)return p==e&&d==t;var h=!0;a.set(t,e),a.set(e,t);for(var y=u;++l<c;){var m=t[f=s[l]],v=e[f];if(i)var g=u?i(v,m,f,e,t,a):i(m,v,f,t,e,a);if(!(g===n?m===v||o(m,v,r,i,a):g)){h=!1;break}y||(y=\"constructor\"==f)}if(h&&!y){var _=t.constructor,b=e.constructor;_==b||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof _&&_ instanceof _&&\"function\"==typeof b&&b instanceof b||(h=!1)}return a.delete(t),a.delete(e),h}(t,e,r,i,o,a))}(t,e,r,i,jn,o))}function In(t,e,r,i){var o=r.length,a=o,u=!i;if(null==t)return!a;for(t=St(t);o--;){var s=r[o];if(u&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++o<a;){var c=(s=r[o])[0],l=t[c],f=s[1];if(u&&s[2]){if(l===n&&!(c in t))return!1}else{var p=new Yr;if(i)var d=i(l,f,c,t,e,p);if(!(d===n?jn(f,l,3,i,p):d))return!1}}return!0}function kn(t){return!(!Qa(t)||(e=t,Nt&&Nt in e))&&(Za(t)?Ut:ht).test(Fo(t));var e}function Mn(t){return\"function\"==typeof t?t:null==t?rs:\"object\"==typeof t?za(t)?Ln(t[0],t[1]):Fn(t):fs(t)}function Rn(t){if(!wo(t))return hr(t);var e=[];for(var r in St(t))Mt.call(t,r)&&\"constructor\"!=r&&e.push(r);return e}function Nn(t,e){return t<e}function Dn(t,e){var r=-1,n=Ha(t)?nt(t.length):[];return ln(t,function(t,i,o){n[++r]=e(t,i,o)}),n}function Fn(t){var e=uo(t);return 1==e.length&&e[0][2]?Oo(e[0][0],e[0][1]):function(r){return r===t||In(r,t,e)}}function Ln(t,e){return go(t)&&Eo(e)?Oo(Do(t),e):function(r){var i=Tu(r,t);return i===n&&i===e?Cu(r,t):jn(e,i,3)}}function Un(t,e,r,i,o){t!==e&&mn(e,function(a,u){if(o||(o=new Yr),Qa(a))!function(t,e,r,i,o,a,u){var s=Co(t,r),c=Co(e,r),l=u.get(c);if(l)Jr(t,r,l);else{var f=a?a(s,c,r+\"\",t,e,u):n,p=f===n;if(p){var d=za(c),h=!d&&Ga(c),y=!d&&!h&&su(c);f=c,d||h||y?za(s)?f=s:Ya(s)?f=Ci(s):h?(p=!1,f=bi(c,!0)):y?(p=!1,f=Ei(c,!0)):f=[]:nu(c)||qa(c)?(f=s,qa(s)?f=mu(s):Qa(s)&&!Za(s)||(f=ho(c))):p=!1}p&&(u.set(c,f),o(f,c,i,a,u),u.delete(c)),Jr(t,r,f)}}(t,e,u,r,Un,i,o);else{var s=i?i(Co(t,u),a,u+\"\",t,e,o):n;s===n&&(s=a),Jr(t,u,s)}},Iu)}function $n(t,e){var r=t.length;if(r)return mo(e+=e<0?r:0,r)?t[e]:n}function Vn(t,e,r){e=e.length?je(e,function(t){return za(t)?function(e){return wn(e,1===t.length?t[0]:t)}:t}):[rs];var n=-1;e=je(e,We(oo()));var i=Dn(t,function(t,r,i){var o=je(e,function(e){return e(t)});return{criteria:o,index:++n,value:t}});return function(t){var e=t.length;for(t.sort(function(t,e){return function(t,e,r){for(var n=-1,i=t.criteria,o=e.criteria,a=i.length,u=r.length;++n<a;){var s=Oi(i[n],o[n]);if(s)return n>=u?s:s*(\"desc\"==r[n]?-1:1)}return t.index-e.index}(t,e,r)});e--;)t[e]=t[e].value;return t}(i)}function qn(t,e,r){for(var n=-1,i=e.length,o={};++n<i;){var a=e[n],u=wn(t,a);r(u,a)&&Zn(o,mi(a,t),u)}return o}function zn(t,e,r,n){var i=n?Ue:Le,o=-1,a=e.length,u=t;for(t===e&&(e=Ci(e)),r&&(u=je(t,We(r)));++o<a;)for(var s=0,c=e[o],l=r?r(c):c;(s=i(u,l,s,n))>-1;)u!==t&&Gt.call(u,s,1),Gt.call(t,s,1);return t}function Bn(t,e){for(var r=t?e.length:0,n=r-1;r--;){var i=e[r];if(r==n||i!==o){var o=i;mo(i)?Gt.call(t,i,1):si(t,i)}}return t}function Hn(t,e){return t+he(_r()*(e-t+1))}function Yn(t,e){var r=\"\";if(!t||e<1||e>l)return r;do{e%2&&(r+=t),(e=he(e/2))&&(t+=t)}while(e);return r}function Gn(t,e){return xo(So(t,e,rs),t+\"\")}function Wn(t){return Wr(Uu(t))}function Kn(t,e){var r=Uu(t);return ko(r,on(e,0,r.length))}function Zn(t,e,r,i){if(!Qa(t))return t;for(var o=-1,a=(e=mi(e,t)).length,u=a-1,s=t;null!=s&&++o<a;){var c=Do(e[o]),l=r;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return t;if(o!=u){var f=s[c];(l=i?i(f,c,s):n)===n&&(l=Qa(f)?f:mo(e[o+1])?[]:{})}Xr(s,c,l),s=s[c]}return t}var Jn=Ar?function(t,e){return Ar.set(t,e),t}:rs,Xn=oe?function(t,e){return oe(t,\"toString\",{configurable:!0,enumerable:!1,value:Qu(e),writable:!0})}:rs;function Qn(t){return ko(Uu(t))}function ti(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(r=r>i?i:r)<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var o=nt(i);++n<i;)o[n]=t[n+e];return o}function ei(t,e){var r;return ln(t,function(t,n,i){return!(r=e(t,n,i))}),!!r}function ri(t,e,r){var n=0,i=null==t?n:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;n<i;){var o=n+i>>>1,a=t[o];null!==a&&!uu(a)&&(r?a<=e:a<e)?n=o+1:i=o}return i}return ni(t,e,rs,r)}function ni(t,e,r,i){var o=0,a=null==t?0:t.length;if(0===a)return 0;for(var u=(e=r(e))!=e,s=null===e,c=uu(e),l=e===n;o<a;){var f=he((o+a)/2),p=r(t[f]),d=p!==n,h=null===p,y=p==p,m=uu(p);if(u)var v=i||y;else v=l?y&&(i||d):s?y&&d&&(i||!h):c?y&&d&&!h&&(i||!m):!h&&!m&&(i?p<=e:p<e);v?o=f+1:a=f}return mr(a,4294967294)}function ii(t,e){for(var r=-1,n=t.length,i=0,o=[];++r<n;){var a=t[r],u=e?e(a):a;if(!r||!Ua(u,s)){var s=u;o[i++]=0===a?0:a}}return o}function oi(t){return\"number\"==typeof t?t:uu(t)?f:+t}function ai(t){if(\"string\"==typeof t)return t;if(za(t))return je(t,ai)+\"\";if(uu(t))return Dr?Dr.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function ui(t,e,r){var n=-1,i=Pe,o=t.length,a=!0,u=[],s=u;if(r)a=!1,i=xe;else if(o>=200){var c=e?null:Yi(t);if(c)return ar(c);a=!1,i=Ze,s=new Hr}else s=e?[]:u;t:for(;++n<o;){var l=t[n],f=e?e(l):l;if(l=r||0!==l?l:0,a&&f==f){for(var p=s.length;p--;)if(s[p]===f)continue t;e&&s.push(f),u.push(l)}else i(s,f,r)||(s!==u&&s.push(f),u.push(l))}return u}function si(t,e){var r=-1,n=(e=mi(e,t)).length;if(!n)return!0;for(;++r<n;){var i=Do(e[r]);if(\"__proto__\"===i&&!Mt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&r<n-1)return!1}var o=To(t,e);return null==o||delete o[Do(Ko(e))]}function ci(t,e,r,n){return Zn(t,e,r(wn(t,e)),n)}function li(t,e,r,n){for(var i=t.length,o=n?i:-1;(n?o--:++o<i)&&e(t[o],o,t););return r?ti(t,n?0:o,n?o+1:i):ti(t,n?o+1:0,n?i:o)}function fi(t,e){var r=t;return r instanceof Vr&&(r=r.value()),ke(e,function(t,e){return e.func.apply(e.thisArg,Ie([t],e.args))},r)}function pi(t,e,r){var n=t.length;if(n<2)return n?ui(t[0]):[];for(var i=-1,o=nt(n);++i<n;)for(var a=t[i],u=-1;++u<n;)u!=i&&(o[i]=cn(o[i]||a,t[u],e,r));return ui(yn(o,1),e,r)}function di(t,e,r){for(var i=-1,o=t.length,a=e.length,u={};++i<o;){var s=i<a?e[i]:n;r(u,t[i],s)}return u}function hi(t){return Ya(t)?t:[]}function yi(t){return\"function\"==typeof t?t:rs}function mi(t,e){return za(t)?t:go(t,e)?[t]:No(vu(t))}var vi=Gn;function gi(t,e,r){var i=t.length;return r=r===n?i:r,!e&&r>=i?t:ti(t,e,r)}var _i=se||function(t){return le.clearTimeout(t)};function bi(t,e){if(e)return t.slice();var r=t.length,n=zt?zt(r):new t.constructor(r);return t.copy(n),n}function wi(t){var e=new t.constructor(t.byteLength);return new qt(e).set(new qt(t)),e}function Ei(t,e){var r=e?wi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function Oi(t,e){if(t!==e){var r=t!==n,i=null===t,o=t==t,a=uu(t),u=e!==n,s=null===e,c=e==e,l=uu(e);if(!s&&!l&&!a&&t>e||a&&u&&c&&!s&&!l||i&&u&&c||!r&&c||!o)return 1;if(!i&&!a&&!l&&t<e||l&&r&&o&&!i&&!a||s&&r&&o||!u&&o||!c)return-1}return 0}function Si(t,e,r,n){for(var i=-1,o=t.length,a=r.length,u=-1,s=e.length,c=yr(o-a,0),l=nt(s+c),f=!n;++u<s;)l[u]=e[u];for(;++i<a;)(f||i<o)&&(l[r[i]]=t[i]);for(;c--;)l[u++]=t[i++];return l}function Ti(t,e,r,n){for(var i=-1,o=t.length,a=-1,u=r.length,s=-1,c=e.length,l=yr(o-u,0),f=nt(l+c),p=!n;++i<l;)f[i]=t[i];for(var d=i;++s<c;)f[d+s]=e[s];for(;++a<u;)(p||i<o)&&(f[d+r[a]]=t[i++]);return f}function Ci(t,e){var r=-1,n=t.length;for(e||(e=nt(n));++r<n;)e[r]=t[r];return e}function Ai(t,e,r,i){var o=!r;r||(r={});for(var a=-1,u=e.length;++a<u;){var s=e[a],c=i?i(r[s],t[s],s,r,t):n;c===n&&(c=t[s]),o?rn(r,s,c):Xr(r,s,c)}return r}function Pi(t,e){return function(r,n){var i=za(r)?Oe:tn,o=e?e():{};return i(r,t,oo(n,2),o)}}function xi(t){return Gn(function(e,r){var i=-1,o=r.length,a=o>1?r[o-1]:n,u=o>2?r[2]:n;for(a=t.length>3&&\"function\"==typeof a?(o--,a):n,u&&vo(r[0],r[1],u)&&(a=o<3?n:a,o=1),e=St(e);++i<o;){var s=r[i];s&&t(e,s,i,a)}return e})}function ji(t,e){return function(r,n){if(null==r)return r;if(!Ha(r))return t(r,n);for(var i=r.length,o=e?i:-1,a=St(r);(e?o--:++o<i)&&!1!==n(a[o],o,a););return r}}function Ii(t){return function(e,r,n){for(var i=-1,o=St(e),a=n(e),u=a.length;u--;){var s=a[t?u:++i];if(!1===r(o[s],s,o))break}return e}}function ki(t){return function(e){var r=rr(e=vu(e))?cr(e):n,i=r?r[0]:e.charAt(0),o=r?gi(r,1).join(\"\"):e.slice(1);return i[t]()+o}}function Mi(t){return function(e){return ke(Zu(qu(e).replace(Kt,\"\")),t,\"\")}}function Ri(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var r=Lr(t.prototype),n=t.apply(r,e);return Qa(n)?n:r}}function Ni(t){return function(e,r,i){var o=St(e);if(!Ha(e)){var a=oo(r,3);e=ju(e),r=function(t){return a(o[t],t,o)}}var u=t(e,r,i);return u>-1?o[a?e[u]:u]:n}}function Di(t){return Qi(function(e){var r=e.length,o=r,a=$r.prototype.thru;for(t&&e.reverse();o--;){var u=e[o];if(\"function\"!=typeof u)throw new At(i);if(a&&!s&&\"wrapper\"==no(u))var s=new $r([],!0)}for(o=s?o:r;++o<r;){var c=no(u=e[o]),l=\"wrapper\"==c?ro(u):n;s=l&&_o(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?s[no(l[0])].apply(s,l[3]):1==u.length&&_o(u)?s[c]():s.thru(u)}return function(){var t=arguments,n=t[0];if(s&&1==t.length&&za(n))return s.plant(n).value();for(var i=0,o=r?e[i].apply(this,t):n;++i<r;)o=e[i].call(this,o);return o}})}function Fi(t,e,r,i,o,a,u,c,l,f){var p=e&s,d=1&e,h=2&e,y=24&e,m=512&e,v=h?n:Ri(t);return function s(){for(var g=arguments.length,_=nt(g),b=g;b--;)_[b]=arguments[b];if(y)var w=io(s),E=function(t,e){for(var r=t.length,n=0;r--;)t[r]===e&&++n;return n}(_,w);if(i&&(_=Si(_,i,o,y)),a&&(_=Ti(_,a,u,y)),g-=E,y&&g<f){var O=or(_,w);return Bi(t,e,Fi,s.placeholder,r,_,O,c,l,f-g)}var S=d?r:this,T=h?S[t]:t;return g=_.length,c?_=function(t,e){for(var r=t.length,i=mr(e.length,r),o=Ci(t);i--;){var a=e[i];t[i]=mo(a,r)?o[a]:n}return t}(_,c):m&&g>1&&_.reverse(),p&&l<g&&(_.length=l),this&&this!==le&&this instanceof s&&(T=v||Ri(T)),T.apply(S,_)}}function Li(t,e){return function(r,n){return function(t,e,r,n){return gn(t,function(t,i,o){e(n,r(t),i,o)}),n}(r,t,e(n),{})}}function Ui(t,e){return function(r,i){var o;if(r===n&&i===n)return e;if(r!==n&&(o=r),i!==n){if(o===n)return i;\"string\"==typeof r||\"string\"==typeof i?(r=ai(r),i=ai(i)):(r=oi(r),i=oi(i)),o=t(r,i)}return o}}function $i(t){return Qi(function(e){return e=je(e,We(oo())),Gn(function(r){var n=this;return t(e,function(t){return Ee(t,n,r)})})})}function Vi(t,e){var r=(e=e===n?\" \":ai(e)).length;if(r<2)return r?Yn(e,t):e;var i=Yn(e,pe(t/sr(e)));return rr(e)?gi(cr(i),0,t).join(\"\"):i.slice(0,t)}function qi(t){return function(e,r,i){return i&&\"number\"!=typeof i&&vo(e,r,i)&&(r=i=n),e=pu(e),r===n?(r=e,e=0):r=pu(r),function(t,e,r,n){for(var i=-1,o=yr(pe((e-t)/(r||1)),0),a=nt(o);o--;)a[n?o:++i]=t,t+=r;return a}(e,r,i=i===n?e<r?1:-1:pu(i),t)}}function zi(t){return function(e,r){return\"string\"==typeof e&&\"string\"==typeof r||(e=yu(e),r=yu(r)),t(e,r)}}function Bi(t,e,r,i,o,a,s,c,l,f){var p=8&e;e|=p?u:64,4&(e&=~(p?64:u))||(e&=-4);var d=[t,e,o,p?a:n,p?s:n,p?n:a,p?n:s,c,l,f],h=r.apply(n,d);return _o(t)&&Ao(h,d),h.placeholder=i,jo(h,t,e)}function Hi(t){var e=Ot[t];return function(t,r){if(t=yu(t),(r=null==r?0:mr(du(r),292))&&ze(t)){var n=(vu(t)+\"e\").split(\"e\");return+((n=(vu(e(n[0]+\"e\"+(+n[1]+r)))+\"e\").split(\"e\"))[0]+\"e\"+(+n[1]-r))}return e(t)}}var Yi=Sr&&1/ar(new Sr([,-0]))[1]==c?function(t){return new Sr(t)}:us;function Gi(t){return function(e){var r=fo(e);return r==w?nr(e):r==C?ur(e):function(t,e){return je(e,function(e){return[e,t[e]]})}(e,t(e))}}function Wi(t,e,r,o,c,l,f,p){var d=2&e;if(!d&&\"function\"!=typeof t)throw new At(i);var h=o?o.length:0;if(h||(e&=-97,o=c=n),f=f===n?f:yr(du(f),0),p=p===n?p:du(p),h-=c?c.length:0,64&e){var y=o,m=c;o=c=n}var v=d?n:ro(t),g=[t,e,r,o,c,y,m,l,f,p];if(v&&function(t,e){var r=t[1],n=e[1],i=r|n,o=i<131,u=n==s&&8==r||n==s&&256==r&&t[7].length<=e[8]||384==n&&e[7].length<=e[8]&&8==r;if(!o&&!u)return t;1&n&&(t[2]=e[2],i|=1&r?0:4);var c=e[3];if(c){var l=t[3];t[3]=l?Si(l,c,e[4]):c,t[4]=l?or(t[3],a):e[4]}(c=e[5])&&(l=t[5],t[5]=l?Ti(l,c,e[6]):c,t[6]=l?or(t[5],a):e[6]),(c=e[7])&&(t[7]=c),n&s&&(t[8]=null==t[8]?e[8]:mr(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i}(g,v),t=g[0],e=g[1],r=g[2],o=g[3],c=g[4],!(p=g[9]=g[9]===n?d?0:t.length:yr(g[9]-h,0))&&24&e&&(e&=-25),e&&1!=e)_=8==e||16==e?function(t,e,r){var i=Ri(t);return function o(){for(var a=arguments.length,u=nt(a),s=a,c=io(o);s--;)u[s]=arguments[s];var l=a<3&&u[0]!==c&&u[a-1]!==c?[]:or(u,c);return(a-=l.length)<r?Bi(t,e,Fi,o.placeholder,n,u,l,n,n,r-a):Ee(this&&this!==le&&this instanceof o?i:t,this,u)}}(t,e,p):e!=u&&33!=e||c.length?Fi.apply(n,g):function(t,e,r,n){var i=1&e,o=Ri(t);return function e(){for(var a=-1,u=arguments.length,s=-1,c=n.length,l=nt(c+u),f=this&&this!==le&&this instanceof e?o:t;++s<c;)l[s]=n[s];for(;u--;)l[s++]=arguments[++a];return Ee(f,i?r:this,l)}}(t,e,r,o);else var _=function(t,e,r){var n=1&e,i=Ri(t);return function e(){return(this&&this!==le&&this instanceof e?i:t).apply(n?r:this,arguments)}}(t,e,r);return jo((v?Jn:Ao)(_,g),t,e)}function Ki(t,e,r,i){return t===n||Ua(t,jt[r])&&!Mt.call(i,r)?e:t}function Zi(t,e,r,i,o,a){return Qa(t)&&Qa(e)&&(a.set(e,t),Un(t,e,n,Zi,a),a.delete(e)),t}function Ji(t){return nu(t)?n:t}function Xi(t,e,r,i,o,a){var u=1&r,s=t.length,c=e.length;if(s!=c&&!(u&&c>s))return!1;var l=a.get(t),f=a.get(e);if(l&&f)return l==e&&f==t;var p=-1,d=!0,h=2&r?new Hr:n;for(a.set(t,e),a.set(e,t);++p<s;){var y=t[p],m=e[p];if(i)var v=u?i(m,y,p,e,t,a):i(y,m,p,t,e,a);if(v!==n){if(v)continue;d=!1;break}if(h){if(!Re(e,function(t,e){if(!Ze(h,e)&&(y===t||o(y,t,r,i,a)))return h.push(e)})){d=!1;break}}else if(y!==m&&!o(y,m,r,i,a)){d=!1;break}}return a.delete(t),a.delete(e),d}function Qi(t){return xo(So(t,n,Bo),t+\"\")}function to(t){return En(t,ju,co)}function eo(t){return En(t,Iu,lo)}var ro=Ar?function(t){return Ar.get(t)}:us;function no(t){for(var e=t.name+\"\",r=Pr[e],n=Mt.call(Pr,e)?r.length:0;n--;){var i=r[n],o=i.func;if(null==o||o==t)return i.name}return e}function io(t){return(Mt.call(Fr,\"placeholder\")?Fr:t).placeholder}function oo(){var t=Fr.iteratee||ns;return t=t===ns?Mn:t,arguments.length?t(arguments[0],arguments[1]):t}function ao(t,e){var r,n,i=t.__data__;return(\"string\"==(n=typeof(r=e))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function uo(t){for(var e=ju(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,Eo(i)]}return e}function so(t,e){var r=function(t,e){return null==t?n:t[e]}(t,e);return kn(r)?r:n}var co=ye?function(t){return null==t?[]:(t=St(t),Ae(ye(t),function(e){return Yt.call(t,e)}))}:hs,lo=ye?function(t){for(var e=[];t;)Ie(e,co(t)),t=Bt(t);return e}:hs,fo=On;function po(t,e,r){for(var n=-1,i=(e=mi(e,t)).length,o=!1;++n<i;){var a=Do(e[n]);if(!(o=null!=t&&r(t,a)))break;t=t[a]}return o||++n!=i?o:!!(i=null==t?0:t.length)&&Xa(i)&&mo(a,i)&&(za(t)||qa(t))}function ho(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Lr(Bt(t))}function yo(t){return za(t)||qa(t)||!!(Wt&&t&&t[Wt])}function mo(t,e){var r=typeof t;return!!(e=e??l)&&(\"number\"==r||\"symbol\"!=r&&mt.test(t))&&t>-1&&t%1==0&&t<e}function vo(t,e,r){if(!Qa(r))return!1;var n=typeof e;return!!(\"number\"==n?Ha(r)&&mo(e,r.length):\"string\"==n&&e in r)&&Ua(r[e],t)}function go(t,e){if(za(t))return!1;var r=typeof t;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=t&&!uu(t))||X.test(t)||!J.test(t)||null!=e&&t in St(e)}function _o(t){var e=no(t),r=Fr[e];if(\"function\"!=typeof r||!(e in Vr.prototype))return!1;if(t===r)return!0;var n=ro(r);return!!n&&t===n[0]}(wr&&fo(new wr(new ArrayBuffer(1)))!=I||Er&&fo(new Er)!=w||Or&&fo(Or.resolve())!=S||Sr&&fo(new Sr)!=C||Tr&&fo(new Tr)!=x)&&(fo=function(t){var e=On(t),r=e==O?t.constructor:n,i=r?Fo(r):\"\";if(i)switch(i){case xr:return I;case jr:return w;case Ir:return S;case kr:return C;case Mr:return x}return e});var bo=It?Za:ys;function wo(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||jt)}function Eo(t){return t==t&&!Qa(t)}function Oo(t,e){return function(r){return null!=r&&r[t]===e&&(e!==n||t in St(r))}}function So(t,e,r){return e=yr(e===n?t.length-1:e,0),function(){for(var n=arguments,i=-1,o=yr(n.length-e,0),a=nt(o);++i<o;)a[i]=n[e+i];i=-1;for(var u=nt(e+1);++i<e;)u[i]=n[i];return u[e]=r(a),Ee(t,this,u)}}function To(t,e){return e.length<2?t:wn(t,ti(e,0,-1))}function Co(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var Ao=Io(Jn),Po=fe||function(t,e){return le.setTimeout(t,e)},xo=Io(Xn);function jo(t,e,r){var n=e+\"\";return xo(t,function(t,e){var r=e.length;if(!r)return t;var n=r-1;return e[n]=(r>1?\"& \":\"\")+e[n],e=e.join(r>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(n,function(t,e){return Se(d,function(r){var n=\"_.\"+r[0];e&r[1]&&!Pe(t,n)&&t.push(n)}),t.sort()}(function(t){var e=t.match(ot);return e?e[1].split(at):[]}(n),r)))}function Io(t){var e=0,r=0;return function(){var i=vr(),o=16-(i-r);if(r=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(n,arguments)}}function ko(t,e){var r=-1,i=t.length,o=i-1;for(e=e===n?i:e;++r<e;){var a=Hn(r,o),u=t[a];t[a]=t[r],t[r]=u}return t.length=e,t}var Mo,Ro,No=(Mo=Ma(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(Q,function(t,r,n,i){e.push(n?i.replace(ct,\"$1\"):r||t)}),e},function(t){return 500===Ro.size&&Ro.clear(),t}),Ro=Mo.cache,Mo);function Do(t){if(\"string\"==typeof t||uu(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Fo(t){if(null!=t){try{return kt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Lo(t){if(t instanceof Vr)return t.clone();var e=new $r(t.__wrapped__,t.__chain__);return e.__actions__=Ci(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Uo=Gn(function(t,e){return Ya(t)?cn(t,yn(e,1,Ya,!0)):[]}),$o=Gn(function(t,e){var r=Ko(e);return Ya(r)&&(r=n),Ya(t)?cn(t,yn(e,1,Ya,!0),oo(r,2)):[]}),Vo=Gn(function(t,e){var r=Ko(e);return Ya(r)&&(r=n),Ya(t)?cn(t,yn(e,1,Ya,!0),n,r):[]});function qo(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var i=null==r?0:du(r);return i<0&&(i=yr(n+i,0)),Fe(t,oo(e,3),i)}function zo(t,e,r){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return r!==n&&(o=du(r),o=r<0?yr(i+o,0):mr(o,i-1)),Fe(t,oo(e,3),o,!0)}function Bo(t){return null!=t&&t.length?yn(t,1):[]}function Ho(t){return t&&t.length?t[0]:n}var Yo=Gn(function(t){var e=je(t,hi);return e.length&&e[0]===t[0]?An(e):[]}),Go=Gn(function(t){var e=Ko(t),r=je(t,hi);return e===Ko(r)?e=n:r.pop(),r.length&&r[0]===t[0]?An(r,oo(e,2)):[]}),Wo=Gn(function(t){var e=Ko(t),r=je(t,hi);return(e=\"function\"==typeof e?e:n)&&r.pop(),r.length&&r[0]===t[0]?An(r,n,e):[]});function Ko(t){var e=null==t?0:t.length;return e?t[e-1]:n}var Zo=Gn(Jo);function Jo(t,e){return t&&t.length&&e&&e.length?zn(t,e):t}var Xo=Qi(function(t,e){var r=null==t?0:t.length,n=nn(t,e);return Bn(t,je(e,function(t){return mo(t,r)?+t:t}).sort(Oi)),n});function Qo(t){return null==t?t:br.call(t)}var ta=Gn(function(t){return ui(yn(t,1,Ya,!0))}),ea=Gn(function(t){var e=Ko(t);return Ya(e)&&(e=n),ui(yn(t,1,Ya,!0),oo(e,2))}),ra=Gn(function(t){var e=Ko(t);return e=\"function\"==typeof e?e:n,ui(yn(t,1,Ya,!0),n,e)});function na(t){if(!t||!t.length)return[];var e=0;return t=Ae(t,function(t){if(Ya(t))return e=yr(t.length,e),!0}),Ye(e,function(e){return je(t,qe(e))})}function ia(t,e){if(!t||!t.length)return[];var r=na(t);return null==e?r:je(r,function(t){return Ee(e,n,t)})}var oa=Gn(function(t,e){return Ya(t)?cn(t,e):[]}),aa=Gn(function(t){return pi(Ae(t,Ya))}),ua=Gn(function(t){var e=Ko(t);return Ya(e)&&(e=n),pi(Ae(t,Ya),oo(e,2))}),sa=Gn(function(t){var e=Ko(t);return e=\"function\"==typeof e?e:n,pi(Ae(t,Ya),n,e)}),ca=Gn(na),la=Gn(function(t){var e=t.length,r=e>1?t[e-1]:n;return r=\"function\"==typeof r?(t.pop(),r):n,ia(t,r)});function fa(t){var e=Fr(t);return e.__chain__=!0,e}function pa(t,e){return e(t)}var da=Qi(function(t){var e=t.length,r=e?t[0]:0,i=this.__wrapped__,o=function(e){return nn(e,t)};return!(e>1||this.__actions__.length)&&i instanceof Vr&&mo(r)?((i=i.slice(r,+r+(e?1:0))).__actions__.push({func:pa,args:[o],thisArg:n}),new $r(i,this.__chain__).thru(function(t){return e&&!t.length&&t.push(n),t})):this.thru(o)}),ha=Pi(function(t,e,r){Mt.call(t,r)?++t[r]:rn(t,r,1)}),ya=Ni(qo),ma=Ni(zo);function va(t,e){return(za(t)?Se:ln)(t,oo(e,3))}function ga(t,e){return(za(t)?Te:fn)(t,oo(e,3))}var _a=Pi(function(t,e,r){Mt.call(t,r)?t[r].push(e):rn(t,r,[e])}),ba=Gn(function(t,e,r){var n=-1,i=\"function\"==typeof e,o=Ha(t)?nt(t.length):[];return ln(t,function(t){o[++n]=i?Ee(e,t,r):Pn(t,e,r)}),o}),wa=Pi(function(t,e,r){rn(t,r,e)});function Ea(t,e){return(za(t)?je:Dn)(t,oo(e,3))}var Oa=Pi(function(t,e,r){t[r?0:1].push(e)},function(){return[[],[]]}),Sa=Gn(function(t,e){if(null==t)return[];var r=e.length;return r>1&&vo(t,e[0],e[1])?e=[]:r>2&&vo(e[0],e[1],e[2])&&(e=[e[0]]),Vn(t,yn(e,1),[])}),Ta=ce||function(){return le.Date.now()};function Ca(t,e,r){return e=r?n:e,e=t&&null==e?t.length:e,Wi(t,s,n,n,n,n,e)}function Aa(t,e){var r;if(\"function\"!=typeof e)throw new At(i);return t=du(t),function(){return--t>0&&(r=e.apply(this,arguments)),t<=1&&(e=n),r}}var Pa=Gn(function(t,e,r){var n=1;if(r.length){var i=or(r,io(Pa));n|=u}return Wi(t,n,e,r,i)}),xa=Gn(function(t,e,r){var n=3;if(r.length){var i=or(r,io(xa));n|=u}return Wi(e,n,t,r,i)});function ja(t,e,r){var o,a,u,s,c,l,f=0,p=!1,d=!1,h=!0;if(\"function\"!=typeof t)throw new At(i);function y(e){var r=o,i=a;return o=a=n,f=e,s=t.apply(i,r)}function m(t){var r=t-l;return l===n||r>=e||r<0||d&&t-f>=u}function v(){var t=Ta();if(m(t))return g(t);c=Po(v,function(t){var r=e-(t-l);return d?mr(r,u-(t-f)):r}(t))}function g(t){return c=n,h&&o?y(t):(o=a=n,s)}function _(){var t=Ta(),r=m(t);if(o=arguments,a=this,l=t,r){if(c===n)return function(t){return f=t,c=Po(v,e),p?y(t):s}(l);if(d)return _i(c),c=Po(v,e),y(l)}return c===n&&(c=Po(v,e)),s}return e=yu(e)||0,Qa(r)&&(p=!!r.leading,u=(d=\"maxWait\"in r)?yr(yu(r.maxWait)||0,e):u,h=\"trailing\"in r?!!r.trailing:h),_.cancel=function(){c!==n&&_i(c),f=0,o=l=a=c=n},_.flush=function(){return c===n?s:g(Ta())},_}var Ia=Gn(function(t,e){return sn(t,1,e)}),ka=Gn(function(t,e,r){return sn(t,yu(e)||0,r)});function Ma(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new At(i);var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var a=t.apply(this,n);return r.cache=o.set(i,a)||o,a};return r.cache=new(Ma.Cache||Br),r}function Ra(t){if(\"function\"!=typeof t)throw new At(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Ma.Cache=Br;var Na=vi(function(t,e){var r=(e=1==e.length&&za(e[0])?je(e[0],We(oo())):je(yn(e,1),We(oo()))).length;return Gn(function(n){for(var i=-1,o=mr(n.length,r);++i<o;)n[i]=e[i].call(this,n[i]);return Ee(t,this,n)})}),Da=Gn(function(t,e){var r=or(e,io(Da));return Wi(t,u,n,e,r)}),Fa=Gn(function(t,e){var r=or(e,io(Fa));return Wi(t,64,n,e,r)}),La=Qi(function(t,e){return Wi(t,256,n,n,n,e)});function Ua(t,e){return t===e||t!=t&&e!=e}var $a=zi(Sn),Va=zi(function(t,e){return t>=e}),qa=xn(function(){return arguments}())?xn:function(t){return tu(t)&&Mt.call(t,\"callee\")&&!Yt.call(t,\"callee\")},za=nt.isArray,Ba=me?We(me):function(t){return tu(t)&&On(t)==j};function Ha(t){return null!=t&&Xa(t.length)&&!Za(t)}function Ya(t){return tu(t)&&Ha(t)}var Ga=Ne||ys,Wa=ve?We(ve):function(t){return tu(t)&&On(t)==v};function Ka(t){if(!tu(t))return!1;var e=On(t);return e==g||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!nu(t)}function Za(t){if(!Qa(t))return!1;var e=On(t);return e==_||e==b||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Ja(t){return\"number\"==typeof t&&t==du(t)}function Xa(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=l}function Qa(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function tu(t){return null!=t&&\"object\"==typeof t}var eu=ge?We(ge):function(t){return tu(t)&&fo(t)==w};function ru(t){return\"number\"==typeof t||tu(t)&&On(t)==E}function nu(t){if(!tu(t)||On(t)!=O)return!1;var e=Bt(t);if(null===e)return!0;var r=Mt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof r&&r instanceof r&&kt.call(r)==Ft}var iu=_e?We(_e):function(t){return tu(t)&&On(t)==T},ou=be?We(be):function(t){return tu(t)&&fo(t)==C};function au(t){return\"string\"==typeof t||!za(t)&&tu(t)&&On(t)==A}function uu(t){return\"symbol\"==typeof t||tu(t)&&On(t)==P}var su=we?We(we):function(t){return tu(t)&&Xa(t.length)&&!!ne[On(t)]},cu=zi(Nn),lu=zi(function(t,e){return t<=e});function fu(t){if(!t)return[];if(Ha(t))return au(t)?cr(t):Ci(t);if(Jt&&t[Jt])return function(t){for(var e,r=[];!(e=t.next()).done;)r.push(e.value);return r}(t[Jt]());var e=fo(t);return(e==w?nr:e==C?ar:Uu)(t)}function pu(t){return t?(t=yu(t))===c||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function du(t){var e=pu(t),r=e%1;return e==e?r?e-r:e:0}function hu(t){return t?on(du(t),0,p):0}function yu(t){if(\"number\"==typeof t)return t;if(uu(t))return f;if(Qa(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=Qa(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Ge(t);var r=dt.test(t);return r||yt.test(t)?ue(t.slice(2),r?2:8):pt.test(t)?f:+t}function mu(t){return Ai(t,Iu(t))}function vu(t){return null==t?\"\":ai(t)}var gu=xi(function(t,e){if(wo(e)||Ha(e))Ai(e,ju(e),t);else for(var r in e)Mt.call(e,r)&&Xr(t,r,e[r])}),_u=xi(function(t,e){Ai(e,Iu(e),t)}),bu=xi(function(t,e,r,n){Ai(e,Iu(e),t,n)}),wu=xi(function(t,e,r,n){Ai(e,ju(e),t,n)}),Eu=Qi(nn),Ou=Gn(function(t,e){t=St(t);var r=-1,i=e.length,o=i>2?e[2]:n;for(o&&vo(e[0],e[1],o)&&(i=1);++r<i;)for(var a=e[r],u=Iu(a),s=-1,c=u.length;++s<c;){var l=u[s],f=t[l];(f===n||Ua(f,jt[l])&&!Mt.call(t,l))&&(t[l]=a[l])}return t}),Su=Gn(function(t){return t.push(n,Zi),Ee(Mu,n,t)});function Tu(t,e,r){var i=null==t?n:wn(t,e);return i===n?r:i}function Cu(t,e){return null!=t&&po(t,e,Cn)}var Au=Li(function(t,e,r){null!=e&&\"function\"!=typeof e.toString&&(e=Dt.call(e)),t[e]=r},Qu(rs)),Pu=Li(function(t,e,r){null!=e&&\"function\"!=typeof e.toString&&(e=Dt.call(e)),Mt.call(t,e)?t[e].push(r):t[e]=[r]},oo),xu=Gn(Pn);function ju(t){return Ha(t)?Gr(t):Rn(t)}function Iu(t){return Ha(t)?Gr(t,!0):function(t){if(!Qa(t))return function(t){var e=[];if(null!=t)for(var r in St(t))e.push(r);return e}(t);var e=wo(t),r=[];for(var n in t)(\"constructor\"!=n||!e&&Mt.call(t,n))&&r.push(n);return r}(t)}var ku=xi(function(t,e,r){Un(t,e,r)}),Mu=xi(function(t,e,r,n){Un(t,e,r,n)}),Ru=Qi(function(t,e){var r={};if(null==t)return r;var n=!1;e=je(e,function(e){return e=mi(e,t),n||(n=e.length>1),e}),Ai(t,eo(t),r),n&&(r=an(r,7,Ji));for(var i=e.length;i--;)si(r,e[i]);return r}),Nu=Qi(function(t,e){return null==t?{}:function(t,e){return qn(t,e,function(e,r){return Cu(t,r)})}(t,e)});function Du(t,e){if(null==t)return{};var r=je(eo(t),function(t){return[t]});return e=oo(e),qn(t,r,function(t,r){return e(t,r[0])})}var Fu=Gi(ju),Lu=Gi(Iu);function Uu(t){return null==t?[]:Ke(t,ju(t))}var $u=Mi(function(t,e,r){return e=e.toLowerCase(),t+(r?Vu(e):e)});function Vu(t){return Ku(vu(t).toLowerCase())}function qu(t){return(t=vu(t))&&t.replace(vt,Qe).replace(Zt,\"\")}var zu=Mi(function(t,e,r){return t+(r?\"-\":\"\")+e.toLowerCase()}),Bu=Mi(function(t,e,r){return t+(r?\" \":\"\")+e.toLowerCase()}),Hu=ki(\"toLowerCase\"),Yu=Mi(function(t,e,r){return t+(r?\"_\":\"\")+e.toLowerCase()}),Gu=Mi(function(t,e,r){return t+(r?\" \":\"\")+Ku(e)}),Wu=Mi(function(t,e,r){return t+(r?\" \":\"\")+e.toUpperCase()}),Ku=ki(\"toUpperCase\");function Zu(t,e,r){return t=vu(t),(e=r?n:e)===n?function(t){return te.test(t)}(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.match(ut)||[]}(t):t.match(e)||[]}var Ju=Gn(function(t,e){try{return Ee(t,n,e)}catch(t){return Ka(t)?t:new wt(t)}}),Xu=Qi(function(t,e){return Se(e,function(e){e=Do(e),rn(t,e,Pa(t[e],t))}),t});function Qu(t){return function(){return t}}var ts=Di(),es=Di(!0);function rs(t){return t}function ns(t){return Mn(\"function\"==typeof t?t:an(t,1))}var is=Gn(function(t,e){return function(r){return Pn(r,t,e)}}),os=Gn(function(t,e){return function(r){return Pn(t,r,e)}});function as(t,e,r){var n=ju(e),i=bn(e,n);null!=r||Qa(e)&&(i.length||!n.length)||(r=e,e=t,t=this,i=bn(e,ju(e)));var o=!(Qa(r)&&\"chain\"in r&&!r.chain),a=Za(t);return Se(i,function(r){var n=e[r];t[r]=n,a&&(t.prototype[r]=function(){var e=this.__chain__;if(o||e){var r=t(this.__wrapped__);return(r.__actions__=Ci(this.__actions__)).push({func:n,args:arguments,thisArg:t}),r.__chain__=e,r}return n.apply(t,Ie([this.value()],arguments))})}),t}function us(){}var ss=$i(je),cs=$i(Ce),ls=$i(Re);function fs(t){return go(t)?qe(Do(t)):function(t){return function(e){return wn(e,t)}}(t)}var ps=qi(),ds=qi(!0);function hs(){return[]}function ys(){return!1}var ms,vs=Ui(function(t,e){return t+e},0),gs=Hi(\"ceil\"),_s=Ui(function(t,e){return t/e},1),bs=Hi(\"floor\"),ws=Ui(function(t,e){return t*e},1),Es=Hi(\"round\"),Os=Ui(function(t,e){return t-e},0);return Fr.after=function(t,e){if(\"function\"!=typeof e)throw new At(i);return t=du(t),function(){if(--t<1)return e.apply(this,arguments)}},Fr.ary=Ca,Fr.assign=gu,Fr.assignIn=_u,Fr.assignInWith=bu,Fr.assignWith=wu,Fr.at=Eu,Fr.before=Aa,Fr.bind=Pa,Fr.bindAll=Xu,Fr.bindKey=xa,Fr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return za(t)?t:[t]},Fr.chain=fa,Fr.chunk=function(t,e,r){e=(r?vo(t,e,r):e===n)?1:yr(du(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,a=0,u=nt(pe(i/e));o<i;)u[a++]=ti(t,o,o+=e);return u},Fr.compact=function(t){for(var e=-1,r=null==t?0:t.length,n=0,i=[];++e<r;){var o=t[e];o&&(i[n++]=o)}return i},Fr.concat=function(){var t=arguments.length;if(!t)return[];for(var e=nt(t-1),r=arguments[0],n=t;n--;)e[n-1]=arguments[n];return Ie(za(r)?Ci(r):[r],yn(e,1))},Fr.cond=function(t){var e=null==t?0:t.length,r=oo();return t=e?je(t,function(t){if(\"function\"!=typeof t[1])throw new At(i);return[r(t[0]),t[1]]}):[],Gn(function(r){for(var n=-1;++n<e;){var i=t[n];if(Ee(i[0],this,r))return Ee(i[1],this,r)}})},Fr.conforms=function(t){return function(t){var e=ju(t);return function(r){return un(r,t,e)}}(an(t,1))},Fr.constant=Qu,Fr.countBy=ha,Fr.create=function(t,e){var r=Lr(t);return null==e?r:en(r,e)},Fr.curry=function t(e,r,i){var o=Wi(e,8,n,n,n,n,n,r=i?n:r);return o.placeholder=t.placeholder,o},Fr.curryRight=function t(e,r,i){var o=Wi(e,16,n,n,n,n,n,r=i?n:r);return o.placeholder=t.placeholder,o},Fr.debounce=ja,Fr.defaults=Ou,Fr.defaultsDeep=Su,Fr.defer=Ia,Fr.delay=ka,Fr.difference=Uo,Fr.differenceBy=$o,Fr.differenceWith=Vo,Fr.drop=function(t,e,r){var i=null==t?0:t.length;return i?ti(t,(e=r||e===n?1:du(e))<0?0:e,i):[]},Fr.dropRight=function(t,e,r){var i=null==t?0:t.length;return i?ti(t,0,(e=i-(e=r||e===n?1:du(e)))<0?0:e):[]},Fr.dropRightWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!0,!0):[]},Fr.dropWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!0):[]},Fr.fill=function(t,e,r,i){var o=null==t?0:t.length;return o?(r&&\"number\"!=typeof r&&vo(t,e,r)&&(r=0,i=o),function(t,e,r,i){var o=t.length;for((r=du(r))<0&&(r=-r>o?0:o+r),(i=i===n||i>o?o:du(i))<0&&(i+=o),i=r>i?0:hu(i);r<i;)t[r++]=e;return t}(t,e,r,i)):[]},Fr.filter=function(t,e){return(za(t)?Ae:hn)(t,oo(e,3))},Fr.flatMap=function(t,e){return yn(Ea(t,e),1)},Fr.flatMapDeep=function(t,e){return yn(Ea(t,e),c)},Fr.flatMapDepth=function(t,e,r){return r=r===n?1:du(r),yn(Ea(t,e),r)},Fr.flatten=Bo,Fr.flattenDeep=function(t){return null!=t&&t.length?yn(t,c):[]},Fr.flattenDepth=function(t,e){return null!=t&&t.length?yn(t,e=e===n?1:du(e)):[]},Fr.flip=function(t){return Wi(t,512)},Fr.flow=ts,Fr.flowRight=es,Fr.fromPairs=function(t){for(var e=-1,r=null==t?0:t.length,n={};++e<r;){var i=t[e];rn(n,i[0],i[1])}return n},Fr.functions=function(t){return null==t?[]:bn(t,ju(t))},Fr.functionsIn=function(t){return null==t?[]:bn(t,Iu(t))},Fr.groupBy=_a,Fr.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Fr.intersection=Yo,Fr.intersectionBy=Go,Fr.intersectionWith=Wo,Fr.invert=Au,Fr.invertBy=Pu,Fr.invokeMap=ba,Fr.iteratee=ns,Fr.keyBy=wa,Fr.keys=ju,Fr.keysIn=Iu,Fr.map=Ea,Fr.mapKeys=function(t,e){var r={};return e=oo(e,3),gn(t,function(t,n,i){rn(r,e(t,n,i),t)}),r},Fr.mapValues=function(t,e){var r={};return e=oo(e,3),gn(t,function(t,n,i){rn(r,n,e(t,n,i))}),r},Fr.matches=function(t){return Fn(an(t,1))},Fr.matchesProperty=function(t,e){return Ln(t,an(e,1))},Fr.memoize=Ma,Fr.merge=ku,Fr.mergeWith=Mu,Fr.method=is,Fr.methodOf=os,Fr.mixin=as,Fr.negate=Ra,Fr.nthArg=function(t){return t=du(t),Gn(function(e){return $n(e,t)})},Fr.omit=Ru,Fr.omitBy=function(t,e){return Du(t,Ra(oo(e)))},Fr.once=function(t){return Aa(2,t)},Fr.orderBy=function(t,e,r,i){return null==t?[]:(za(e)||(e=null==e?[]:[e]),za(r=i?n:r)||(r=null==r?[]:[r]),Vn(t,e,r))},Fr.over=ss,Fr.overArgs=Na,Fr.overEvery=cs,Fr.overSome=ls,Fr.partial=Da,Fr.partialRight=Fa,Fr.partition=Oa,Fr.pick=Nu,Fr.pickBy=Du,Fr.property=fs,Fr.propertyOf=function(t){return function(e){return null==t?n:wn(t,e)}},Fr.pull=Zo,Fr.pullAll=Jo,Fr.pullAllBy=function(t,e,r){return t&&t.length&&e&&e.length?zn(t,e,oo(r,2)):t},Fr.pullAllWith=function(t,e,r){return t&&t.length&&e&&e.length?zn(t,e,n,r):t},Fr.pullAt=Xo,Fr.range=ps,Fr.rangeRight=ds,Fr.rearg=La,Fr.reject=function(t,e){return(za(t)?Ae:hn)(t,Ra(oo(e,3)))},Fr.remove=function(t,e){var r=[];if(!t||!t.length)return r;var n=-1,i=[],o=t.length;for(e=oo(e,3);++n<o;){var a=t[n];e(a,n,t)&&(r.push(a),i.push(n))}return Bn(t,i),r},Fr.rest=function(t,e){if(\"function\"!=typeof t)throw new At(i);return Gn(t,e=e===n?e:du(e))},Fr.reverse=Qo,Fr.sampleSize=function(t,e,r){return e=(r?vo(t,e,r):e===n)?1:du(e),(za(t)?Kr:Kn)(t,e)},Fr.set=function(t,e,r){return null==t?t:Zn(t,e,r)},Fr.setWith=function(t,e,r,i){return i=\"function\"==typeof i?i:n,null==t?t:Zn(t,e,r,i)},Fr.shuffle=function(t){return(za(t)?Zr:Qn)(t)},Fr.slice=function(t,e,r){var i=null==t?0:t.length;return i?(r&&\"number\"!=typeof r&&vo(t,e,r)?(e=0,r=i):(e=null==e?0:du(e),r=r===n?i:du(r)),ti(t,e,r)):[]},Fr.sortBy=Sa,Fr.sortedUniq=function(t){return t&&t.length?ii(t):[]},Fr.sortedUniqBy=function(t,e){return t&&t.length?ii(t,oo(e,2)):[]},Fr.split=function(t,e,r){return r&&\"number\"!=typeof r&&vo(t,e,r)&&(e=r=n),(r=r===n?p:r>>>0)?(t=vu(t))&&(\"string\"==typeof e||null!=e&&!iu(e))&&!(e=ai(e))&&rr(t)?gi(cr(t),0,r):t.split(e,r):[]},Fr.spread=function(t,e){if(\"function\"!=typeof t)throw new At(i);return e=null==e?0:yr(du(e),0),Gn(function(r){var n=r[e],i=gi(r,0,e);return n&&Ie(i,n),Ee(t,this,i)})},Fr.tail=function(t){var e=null==t?0:t.length;return e?ti(t,1,e):[]},Fr.take=function(t,e,r){return t&&t.length?ti(t,0,(e=r||e===n?1:du(e))<0?0:e):[]},Fr.takeRight=function(t,e,r){var i=null==t?0:t.length;return i?ti(t,(e=i-(e=r||e===n?1:du(e)))<0?0:e,i):[]},Fr.takeRightWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!1,!0):[]},Fr.takeWhile=function(t,e){return t&&t.length?li(t,oo(e,3)):[]},Fr.tap=function(t,e){return e(t),t},Fr.throttle=function(t,e,r){var n=!0,o=!0;if(\"function\"!=typeof t)throw new At(i);return Qa(r)&&(n=\"leading\"in r?!!r.leading:n,o=\"trailing\"in r?!!r.trailing:o),ja(t,e,{leading:n,maxWait:e,trailing:o})},Fr.thru=pa,Fr.toArray=fu,Fr.toPairs=Fu,Fr.toPairsIn=Lu,Fr.toPath=function(t){return za(t)?je(t,Do):uu(t)?[t]:Ci(No(vu(t)))},Fr.toPlainObject=mu,Fr.transform=function(t,e,r){var n=za(t),i=n||Ga(t)||su(t);if(e=oo(e,4),null==r){var o=t&&t.constructor;r=i?n?new o:[]:Qa(t)&&Za(o)?Lr(Bt(t)):{}}return(i?Se:gn)(t,function(t,n,i){return e(r,t,n,i)}),r},Fr.unary=function(t){return Ca(t,1)},Fr.union=ta,Fr.unionBy=ea,Fr.unionWith=ra,Fr.uniq=function(t){return t&&t.length?ui(t):[]},Fr.uniqBy=function(t,e){return t&&t.length?ui(t,oo(e,2)):[]},Fr.uniqWith=function(t,e){return e=\"function\"==typeof e?e:n,t&&t.length?ui(t,n,e):[]},Fr.unset=function(t,e){return null==t||si(t,e)},Fr.unzip=na,Fr.unzipWith=ia,Fr.update=function(t,e,r){return null==t?t:ci(t,e,yi(r))},Fr.updateWith=function(t,e,r,i){return i=\"function\"==typeof i?i:n,null==t?t:ci(t,e,yi(r),i)},Fr.values=Uu,Fr.valuesIn=function(t){return null==t?[]:Ke(t,Iu(t))},Fr.without=oa,Fr.words=Zu,Fr.wrap=function(t,e){return Da(yi(e),t)},Fr.xor=aa,Fr.xorBy=ua,Fr.xorWith=sa,Fr.zip=ca,Fr.zipObject=function(t,e){return di(t||[],e||[],Xr)},Fr.zipObjectDeep=function(t,e){return di(t||[],e||[],Zn)},Fr.zipWith=la,Fr.entries=Fu,Fr.entriesIn=Lu,Fr.extend=_u,Fr.extendWith=bu,as(Fr,Fr),Fr.add=vs,Fr.attempt=Ju,Fr.camelCase=$u,Fr.capitalize=Vu,Fr.ceil=gs,Fr.clamp=function(t,e,r){return r===n&&(r=e,e=n),r!==n&&(r=(r=yu(r))==r?r:0),e!==n&&(e=(e=yu(e))==e?e:0),on(yu(t),e,r)},Fr.clone=function(t){return an(t,4)},Fr.cloneDeep=function(t){return an(t,5)},Fr.cloneDeepWith=function(t,e){return an(t,5,e=\"function\"==typeof e?e:n)},Fr.cloneWith=function(t,e){return an(t,4,e=\"function\"==typeof e?e:n)},Fr.conformsTo=function(t,e){return null==e||un(t,e,ju(e))},Fr.deburr=qu,Fr.defaultTo=function(t,e){return null==t||t!=t?e:t},Fr.divide=_s,Fr.endsWith=function(t,e,r){t=vu(t),e=ai(e);var i=t.length,o=r=r===n?i:on(du(r),0,i);return(r-=e.length)>=0&&t.slice(r,o)==e},Fr.eq=Ua,Fr.escape=function(t){return(t=vu(t))&&G.test(t)?t.replace(H,tr):t},Fr.escapeRegExp=function(t){return(t=vu(t))&&et.test(t)?t.replace(tt,\"\\\\$&\"):t},Fr.every=function(t,e,r){var i=za(t)?Ce:pn;return r&&vo(t,e,r)&&(e=n),i(t,oo(e,3))},Fr.find=ya,Fr.findIndex=qo,Fr.findKey=function(t,e){return De(t,oo(e,3),gn)},Fr.findLast=ma,Fr.findLastIndex=zo,Fr.findLastKey=function(t,e){return De(t,oo(e,3),_n)},Fr.floor=bs,Fr.forEach=va,Fr.forEachRight=ga,Fr.forIn=function(t,e){return null==t?t:mn(t,oo(e,3),Iu)},Fr.forInRight=function(t,e){return null==t?t:vn(t,oo(e,3),Iu)},Fr.forOwn=function(t,e){return t&&gn(t,oo(e,3))},Fr.forOwnRight=function(t,e){return t&&_n(t,oo(e,3))},Fr.get=Tu,Fr.gt=$a,Fr.gte=Va,Fr.has=function(t,e){return null!=t&&po(t,e,Tn)},Fr.hasIn=Cu,Fr.head=Ho,Fr.identity=rs,Fr.includes=function(t,e,r,n){t=Ha(t)?t:Uu(t),r=r&&!n?du(r):0;var i=t.length;return r<0&&(r=yr(i+r,0)),au(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&Le(t,e,r)>-1},Fr.indexOf=function(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var i=null==r?0:du(r);return i<0&&(i=yr(n+i,0)),Le(t,e,i)},Fr.inRange=function(t,e,r){return e=pu(e),r===n?(r=e,e=0):r=pu(r),function(t,e,r){return t>=mr(e,r)&&t<yr(e,r)}(t=yu(t),e,r)},Fr.invoke=xu,Fr.isArguments=qa,Fr.isArray=za,Fr.isArrayBuffer=Ba,Fr.isArrayLike=Ha,Fr.isArrayLikeObject=Ya,Fr.isBoolean=function(t){return!0===t||!1===t||tu(t)&&On(t)==m},Fr.isBuffer=Ga,Fr.isDate=Wa,Fr.isElement=function(t){return tu(t)&&1===t.nodeType&&!nu(t)},Fr.isEmpty=function(t){if(null==t)return!0;if(Ha(t)&&(za(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Ga(t)||su(t)||qa(t)))return!t.length;var e=fo(t);if(e==w||e==C)return!t.size;if(wo(t))return!Rn(t).length;for(var r in t)if(Mt.call(t,r))return!1;return!0},Fr.isEqual=function(t,e){return jn(t,e)},Fr.isEqualWith=function(t,e,r){var i=(r=\"function\"==typeof r?r:n)?r(t,e):n;return i===n?jn(t,e,n,r):!!i},Fr.isError=Ka,Fr.isFinite=function(t){return\"number\"==typeof t&&ze(t)},Fr.isFunction=Za,Fr.isInteger=Ja,Fr.isLength=Xa,Fr.isMap=eu,Fr.isMatch=function(t,e){return t===e||In(t,e,uo(e))},Fr.isMatchWith=function(t,e,r){return r=\"function\"==typeof r?r:n,In(t,e,uo(e),r)},Fr.isNaN=function(t){return ru(t)&&t!=+t},Fr.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return kn(t)},Fr.isNil=function(t){return null==t},Fr.isNull=function(t){return null===t},Fr.isNumber=ru,Fr.isObject=Qa,Fr.isObjectLike=tu,Fr.isPlainObject=nu,Fr.isRegExp=iu,Fr.isSafeInteger=function(t){return Ja(t)&&t>=-9007199254740991&&t<=l},Fr.isSet=ou,Fr.isString=au,Fr.isSymbol=uu,Fr.isTypedArray=su,Fr.isUndefined=function(t){return t===n},Fr.isWeakMap=function(t){return tu(t)&&fo(t)==x},Fr.isWeakSet=function(t){return tu(t)&&\"[object WeakSet]\"==On(t)},Fr.join=function(t,e){return null==t?\"\":dr.call(t,e)},Fr.kebabCase=zu,Fr.last=Ko,Fr.lastIndexOf=function(t,e,r){var i=null==t?0:t.length;if(!i)return-1;var o=i;return r!==n&&(o=(o=du(r))<0?yr(i+o,0):mr(o,i-1)),e==e?function(t,e,r){for(var n=r+1;n--;)if(t[n]===e)return n;return n}(t,e,o):Fe(t,$e,o,!0)},Fr.lowerCase=Bu,Fr.lowerFirst=Hu,Fr.lt=cu,Fr.lte=lu,Fr.max=function(t){return t&&t.length?dn(t,rs,Sn):n},Fr.maxBy=function(t,e){return t&&t.length?dn(t,oo(e,2),Sn):n},Fr.mean=function(t){return Ve(t,rs)},Fr.meanBy=function(t,e){return Ve(t,oo(e,2))},Fr.min=function(t){return t&&t.length?dn(t,rs,Nn):n},Fr.minBy=function(t,e){return t&&t.length?dn(t,oo(e,2),Nn):n},Fr.stubArray=hs,Fr.stubFalse=ys,Fr.stubObject=function(){return{}},Fr.stubString=function(){return\"\"},Fr.stubTrue=function(){return!0},Fr.multiply=ws,Fr.nth=function(t,e){return t&&t.length?$n(t,du(e)):n},Fr.noConflict=function(){return le._===this&&(le._=Lt),this},Fr.noop=us,Fr.now=Ta,Fr.pad=function(t,e,r){t=vu(t);var n=(e=du(e))?sr(t):0;if(!e||n>=e)return t;var i=(e-n)/2;return Vi(he(i),r)+t+Vi(pe(i),r)},Fr.padEnd=function(t,e,r){t=vu(t);var n=(e=du(e))?sr(t):0;return e&&n<e?t+Vi(e-n,r):t},Fr.padStart=function(t,e,r){t=vu(t);var n=(e=du(e))?sr(t):0;return e&&n<e?Vi(e-n,r)+t:t},Fr.parseInt=function(t,e,r){return r||null==e?e=0:e&&(e=+e),gr(vu(t).replace(rt,\"\"),e||0)},Fr.random=function(t,e,r){if(r&&\"boolean\"!=typeof r&&vo(t,e,r)&&(e=r=n),r===n&&(\"boolean\"==typeof e?(r=e,e=n):\"boolean\"==typeof t&&(r=t,t=n)),t===n&&e===n?(t=0,e=1):(t=pu(t),e===n?(e=t,t=0):e=pu(e)),t>e){var i=t;t=e,e=i}if(r||t%1||e%1){var o=_r();return mr(t+o*(e-t+ae(\"1e-\"+((o+\"\").length-1))),e)}return Hn(t,e)},Fr.reduce=function(t,e,r){var n=za(t)?ke:Be,i=arguments.length<3;return n(t,oo(e,4),r,i,ln)},Fr.reduceRight=function(t,e,r){var n=za(t)?Me:Be,i=arguments.length<3;return n(t,oo(e,4),r,i,fn)},Fr.repeat=function(t,e,r){return e=(r?vo(t,e,r):e===n)?1:du(e),Yn(vu(t),e)},Fr.replace=function(){var t=arguments,e=vu(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Fr.result=function(t,e,r){var i=-1,o=(e=mi(e,t)).length;for(o||(o=1,t=n);++i<o;){var a=null==t?n:t[Do(e[i])];a===n&&(i=o,a=r),t=Za(a)?a.call(t):a}return t},Fr.round=Es,Fr.runInContext=t,Fr.sample=function(t){return(za(t)?Wr:Wn)(t)},Fr.size=function(t){if(null==t)return 0;if(Ha(t))return au(t)?sr(t):t.length;var e=fo(t);return e==w||e==C?t.size:Rn(t).length},Fr.snakeCase=Yu,Fr.some=function(t,e,r){var i=za(t)?Re:ei;return r&&vo(t,e,r)&&(e=n),i(t,oo(e,3))},Fr.sortedIndex=function(t,e){return ri(t,e)},Fr.sortedIndexBy=function(t,e,r){return ni(t,e,oo(r,2))},Fr.sortedIndexOf=function(t,e){var r=null==t?0:t.length;if(r){var n=ri(t,e);if(n<r&&Ua(t[n],e))return n}return-1},Fr.sortedLastIndex=function(t,e){return ri(t,e,!0)},Fr.sortedLastIndexBy=function(t,e,r){return ni(t,e,oo(r,2),!0)},Fr.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var r=ri(t,e,!0)-1;if(Ua(t[r],e))return r}return-1},Fr.startCase=Gu,Fr.startsWith=function(t,e,r){return t=vu(t),r=null==r?0:on(du(r),0,t.length),e=ai(e),t.slice(r,r+e.length)==e},Fr.subtract=Os,Fr.sum=function(t){return t&&t.length?He(t,rs):0},Fr.sumBy=function(t,e){return t&&t.length?He(t,oo(e,2)):0},Fr.template=function(t,e,r){var i=Fr.templateSettings;r&&vo(t,e,r)&&(e=n),t=vu(t),e=wu({},e,i,Ki);var o=wu({},e.imports,i.imports,Ki),a=ju(o),u=Ke(o,a);Se(a,function(t){if(st.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var s,c,l=0,f=e.interpolate||gt,p=\"__p += '\",d=Tt((e.escape||gt).source+\"|\"+f.source+\"|\"+(f===Z?lt:gt).source+\"|\"+(e.evaluate||gt).source+\"|$\",\"g\"),h=\"//# sourceURL=\"+(Mt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++re+\"]\")+\"\\n\";t.replace(d,function(e,r,n,i,o,a){return n||(n=i),p+=t.slice(l,a).replace(_t,er),r&&(s=!0,p+=\"' +\\n__e(\"+r+\") +\\n'\"),o&&(c=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),n&&(p+=\"' +\\n((__t = (\"+n+\")) == null ? '' : __t) +\\n'\"),l=a+e.length,e}),p+=\"';\\n\";var y=Mt.call(e,\"variable\")&&e.variable;if(y){if(st.test(y))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(c?p.replace(V,\"\"):p).replace(q,\"$1\").replace(z,\"$1;\"),p=\"function(\"+(y||\"obj\")+\") {\\n\"+(y?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(s?\", __e = _.escape\":\"\")+(c?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var m=Ju(function(){return Et(a,h+\"return \"+p).apply(n,u)});if(m.source=p,Ka(m))throw m;return m},Fr.times=function(t,e){if((t=du(t))<1||t>l)return[];var r=p,n=mr(t,p);e=oo(e),t-=p;for(var i=Ye(n,e);++r<t;)e(r);return i},Fr.toFinite=pu,Fr.toInteger=du,Fr.toLength=hu,Fr.toLower=function(t){return vu(t).toLowerCase()},Fr.toNumber=yu,Fr.toSafeInteger=function(t){return t?on(du(t),-9007199254740991,l):0===t?t:0},Fr.toString=vu,Fr.toUpper=function(t){return vu(t).toUpperCase()},Fr.trim=function(t,e,r){if((t=vu(t))&&(r||e===n))return Ge(t);if(!t||!(e=ai(e)))return t;var i=cr(t),o=cr(e);return gi(i,Je(i,o),Xe(i,o)+1).join(\"\")},Fr.trimEnd=function(t,e,r){if((t=vu(t))&&(r||e===n))return t.slice(0,lr(t)+1);if(!t||!(e=ai(e)))return t;var i=cr(t);return gi(i,0,Xe(i,cr(e))+1).join(\"\")},Fr.trimStart=function(t,e,r){if((t=vu(t))&&(r||e===n))return t.replace(rt,\"\");if(!t||!(e=ai(e)))return t;var i=cr(t);return gi(i,Je(i,cr(e))).join(\"\")},Fr.truncate=function(t,e){var r=30,i=\"...\";if(Qa(e)){var o=\"separator\"in e?e.separator:o;r=\"length\"in e?du(e.length):r,i=\"omission\"in e?ai(e.omission):i}var a=(t=vu(t)).length;if(rr(t)){var u=cr(t);a=u.length}if(r>=a)return t;var s=r-sr(i);if(s<1)return i;var c=u?gi(u,0,s).join(\"\"):t.slice(0,s);if(o===n)return c+i;if(u&&(s+=c.length-s),iu(o)){if(t.slice(s).search(o)){var l,f=c;for(o.global||(o=Tt(o.source,vu(ft.exec(o))+\"g\")),o.lastIndex=0;l=o.exec(f);)var p=l.index;c=c.slice(0,p===n?s:p)}}else if(t.indexOf(ai(o),s)!=s){var d=c.lastIndexOf(o);d>-1&&(c=c.slice(0,d))}return c+i},Fr.unescape=function(t){return(t=vu(t))&&Y.test(t)?t.replace(B,fr):t},Fr.uniqueId=function(t){var e=++Rt;return vu(t)+e},Fr.upperCase=Wu,Fr.upperFirst=Ku,Fr.each=va,Fr.eachRight=ga,Fr.first=Ho,as(Fr,(ms={},gn(Fr,function(t,e){Mt.call(Fr.prototype,e)||(ms[e]=t)}),ms),{chain:!1}),Fr.VERSION=\"4.18.1\",Se([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Fr[t].placeholder=Fr}),Se([\"drop\",\"take\"],function(t,e){Vr.prototype[t]=function(r){r=r===n?1:yr(du(r),0);var i=this.__filtered__&&!e?new Vr(this):this.clone();return i.__filtered__?i.__takeCount__=mr(r,i.__takeCount__):i.__views__.push({size:mr(r,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Vr.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),Se([\"filter\",\"map\",\"takeWhile\"],function(t,e){var r=e+1,n=1==r||3==r;Vr.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:oo(t,3),type:r}),e.__filtered__=e.__filtered__||n,e}}),Se([\"head\",\"last\"],function(t,e){var r=\"take\"+(e?\"Right\":\"\");Vr.prototype[t]=function(){return this[r](1).value()[0]}}),Se([\"initial\",\"tail\"],function(t,e){var r=\"drop\"+(e?\"\":\"Right\");Vr.prototype[t]=function(){return this.__filtered__?new Vr(this):this[r](1)}}),Vr.prototype.compact=function(){return this.filter(rs)},Vr.prototype.find=function(t){return this.filter(t).head()},Vr.prototype.findLast=function(t){return this.reverse().find(t)},Vr.prototype.invokeMap=Gn(function(t,e){return\"function\"==typeof t?new Vr(this):this.map(function(r){return Pn(r,t,e)})}),Vr.prototype.reject=function(t){return this.filter(Ra(oo(t)))},Vr.prototype.slice=function(t,e){t=du(t);var r=this;return r.__filtered__&&(t>0||e<0)?new Vr(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),e!==n&&(r=(e=du(e))<0?r.dropRight(-e):r.take(e-t)),r)},Vr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Vr.prototype.toArray=function(){return this.take(p)},gn(Vr.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Fr[i?\"take\"+(\"last\"==e?\"Right\":\"\"):e],a=i||/^find/.test(e);o&&(Fr.prototype[e]=function(){var e=this.__wrapped__,u=i?[1]:arguments,s=e instanceof Vr,c=u[0],l=s||za(e),f=function(t){var e=o.apply(Fr,Ie([t],u));return i&&p?e[0]:e};l&&r&&\"function\"==typeof c&&1!=c.length&&(s=l=!1);var p=this.__chain__,d=!!this.__actions__.length,h=a&&!p,y=s&&!d;if(!a&&l){e=y?e:new Vr(this);var m=t.apply(e,u);return m.__actions__.push({func:pa,args:[f],thisArg:n}),new $r(m,p)}return h&&y?t.apply(this,u):(m=this.thru(f),h?i?m.value()[0]:m.value():m)})}),Se([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=Pt[t],r=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",n=/^(?:pop|shift)$/.test(t);Fr.prototype[t]=function(){var t=arguments;if(n&&!this.__chain__){var i=this.value();return e.apply(za(i)?i:[],t)}return this[r](function(r){return e.apply(za(r)?r:[],t)})}}),gn(Vr.prototype,function(t,e){var r=Fr[e];if(r){var n=r.name+\"\";Mt.call(Pr,n)||(Pr[n]=[]),Pr[n].push({name:e,func:r})}}),Pr[Fi(n,2).name]=[{name:\"wrapper\",func:n}],Vr.prototype.clone=function(){var t=new Vr(this.__wrapped__);return t.__actions__=Ci(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ci(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ci(this.__views__),t},Vr.prototype.reverse=function(){if(this.__filtered__){var t=new Vr(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Vr.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,r=za(t),n=e<0,i=r?t.length:0,o=function(t,e,r){for(var n=-1,i=r.length;++n<i;){var o=r[n],a=o.size;switch(o.type){case\"drop\":t+=a;break;case\"dropRight\":e-=a;break;case\"take\":e=mr(e,t+a);break;case\"takeRight\":t=yr(t,e-a)}}return{start:t,end:e}}(0,i,this.__views__),a=o.start,u=o.end,s=u-a,c=n?u:a-1,l=this.__iteratees__,f=l.length,p=0,d=mr(s,this.__takeCount__);if(!r||!n&&i==s&&d==s)return fi(t,this.__actions__);var h=[];t:for(;s--&&p<d;){for(var y=-1,m=t[c+=e];++y<f;){var v=l[y],g=v.iteratee,_=v.type,b=g(m);if(2==_)m=b;else if(!b){if(1==_)continue t;break t}}h[p++]=m}return h},Fr.prototype.at=da,Fr.prototype.chain=function(){return fa(this)},Fr.prototype.commit=function(){return new $r(this.value(),this.__chain__)},Fr.prototype.next=function(){this.__values__===n&&(this.__values__=fu(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?n:this.__values__[this.__index__++]}},Fr.prototype.plant=function(t){for(var e,r=this;r instanceof Ur;){var i=Lo(r);i.__index__=0,i.__values__=n,e?o.__wrapped__=i:e=i;var o=i;r=r.__wrapped__}return o.__wrapped__=t,e},Fr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Vr){var e=t;return this.__actions__.length&&(e=new Vr(this)),(e=e.reverse()).__actions__.push({func:pa,args:[Qo],thisArg:n}),new $r(e,this.__chain__)}return this.thru(Qo)},Fr.prototype.toJSON=Fr.prototype.valueOf=Fr.prototype.value=function(){return fi(this.__wrapped__,this.__actions__)},Fr.prototype.first=Fr.prototype.head,Jt&&(Fr.prototype[Jt]=function(){return this}),Fr}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(le._=pr,define(function(){return pr})):pe?((pe.exports=pr)._=pr,fe._=pr):le._=pr}.call(this)},4475(t){\"use strict\";var e=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String(\"abc\");if(t[5]=\"de\",\"5\"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e[\"_\"+String.fromCharCode(r)]=r;if(\"0123456789\"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(\"\"))return!1;var n={};return\"abcdefghijklmnopqrst\".split(\"\").forEach(function(t){n[t]=t}),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},n)).join(\"\")}catch(t){return!1}}()?Object.assign:function(t,i){for(var o,a,u=function(t){if(null==t)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(t)}(t),s=1;s<arguments.length;s++){for(var c in o=Object(arguments[s]))r.call(o,c)&&(u[c]=o[c]);if(e){a=e(o);for(var l=0;l<a.length;l++)n.call(o,a[l])&&(u[a[l]]=o[a[l]])}}return u}},575(t){\"use strict\";function e(t){this._maxSize=t,this.clear()}e.prototype.clear=function(){this._size=0,this._values=Object.create(null)},e.prototype.get=function(t){return this._values[t]},e.prototype.set=function(t,e){return this._size>=this._maxSize&&this.clear(),t in this._values||this._size++,this._values[t]=e};var r=/[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,n=/^\\d+$/,i=/^\\d/,o=/[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,a=/^\\s*(['\"]?)(.*?)(\\1)\\s*$/,u=new e(512),s=new e(512),c=new e(512);function l(t){return u.get(t)||u.set(t,f(t).map(function(t){return t.replace(a,\"$2\")}))}function f(t){return t.match(r)||[\"\"]}function p(t){return\"string\"==typeof t&&t&&-1!==[\"'\",'\"'].indexOf(t.charAt(0))}function d(t){return!p(t)&&(function(t){return t.match(i)&&!t.match(n)}(t)||function(t){return o.test(t)}(t))}t.exports={Cache:e,split:f,normalizePath:l,setter:function(t){var e=l(t);return s.get(t)||s.set(t,function(t,r){for(var n=0,i=e.length,o=t;n<i-1;){var a=e[n];if(\"__proto__\"===a||\"constructor\"===a||\"prototype\"===a)return t;o=o[e[n++]]}o[e[n]]=r})},getter:function(t,e){var r=l(t);return c.get(t)||c.set(t,function(t){for(var n=0,i=r.length;n<i;){if(null==t&&e)return;t=t[r[n++]]}return t})},join:function(t){return t.reduce(function(t,e){return t+(p(e)||n.test(e)?\"[\"+e+\"]\":(t?\".\":\"\")+e)},\"\")},forEach:function(t,e,r){!function(t,e,r){var n,i,o,a,u=t.length;for(i=0;i<u;i++)(n=t[i])&&(d(n)&&(n='\"'+n+'\"'),o=!(a=p(n))&&/^\\d+$/.test(n),e.call(r,n,a,o,i,t))}(Array.isArray(t)?t:f(t),e,r)}}},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const r=t.indexOf(e);return-1===r?[t]:[t.slice(0,r),t.slice(r+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1837(t){const e=/[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['’](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['’](?:D|LL|M|RE|S|T|VE))?|\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])|\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])|\\d+|(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*/g,r=t=>t.match(e)||[],n=t=>t[0].toUpperCase()+t.slice(1),i=(t,e)=>r(t).join(e).toLowerCase(),o=t=>r(t).reduce((t,e)=>`${t}${t?e[0].toUpperCase()+e.slice(1).toLowerCase():e.toLowerCase()}`,\"\");t.exports={words:r,upperFirst:n,camelCase:o,pascalCase:t=>n(o(t)),snakeCase:t=>i(t,\"_\"),kebabCase:t=>i(t,\"-\"),sentenceCase:t=>n(i(t,\" \")),titleCase:t=>r(t).map(n).join(\" \")}},7584(t){function e(t,e){var r=t.length,n=new Array(r),i={},o=r,a=function(t){for(var e=new Map,r=0,n=t.length;r<n;r++){var i=t[r];e.has(i[0])||e.set(i[0],new Set),e.has(i[1])||e.set(i[1],new Set),e.get(i[0]).add(i[1])}return e}(e),u=function(t){for(var e=new Map,r=0,n=t.length;r<n;r++)e.set(t[r],r);return e}(t);for(e.forEach(function(t){if(!u.has(t[0])||!u.has(t[1]))throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\")});o--;)i[o]||s(t[o],o,new Set);return n;function s(t,e,o){if(o.has(t)){var c;try{c=\", node was:\"+JSON.stringify(t)}catch(t){c=\"\"}throw new Error(\"Cyclic dependency\"+c)}if(!u.has(t))throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \"+JSON.stringify(t));if(!i[e]){i[e]=!0;var l=a.get(t)||new Set;if(e=(l=Array.from(l)).length){o.add(t);do{var f=l[--e];s(f,u.get(f),o)}while(e);o.delete(t)}n[--r]=t}}}t.exports=function(t){return e(function(t){for(var e=new Set,r=0,n=t.length;r<n;r++){var i=t[r];e.add(i[0]),e.add(i[1])}return Array.from(e)}(t),t)},t.exports.array=e}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var n={};(()=>{\"use strict\";r.r(n),r.d(n,{initializeHostedInput:()=>er,notifyInitializeError:()=>nr});function t(t,e,r){if(\"function\"!=typeof r.value)return r;let n=r.value;return{get(){const t=n.bind(this);return Object.defineProperty(this,e,Object.assign(Object.assign({},r),{value:t})),t},set(t){n=t}}}class e extends Error{constructor(t){super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",function(t,e){Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e}(this,new.target.prototype),\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class i extends e{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function o(t){if(!/^(https?:)?\\/\\//.test(t))throw new i(\"The provided URL must be absolute.\");const e=document.createElement(\"a\");e.href=t;const r=e.port&&-1!==t.indexOf(`${e.hostname}:${e.port}`)?e.port:\"\";return{hash:e.hash,hostname:e.hostname,href:e.href,origin:`${e.protocol}//${e.hostname}${r?`:${r}`:\"\"}`,pathname:e.pathname,port:r,protocol:e.protocol,search:e.search}}function a(t){return o(0===t.hostname.indexOf(\"www\")?t.href:t.href.replace(t.hostname,`www.${t.hostname}`))}function u(t,e){return t.type===e}class s{constructor(t){this._sourceOrigins=[o(t).origin,a(o(t)).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(t,e){let r=this._listeners[t];r||(this._listeners[t]=r=[]),-1===r.indexOf(e)&&r.push(e)}removeListener(t,e){const r=this._listeners[t];if(!r)return;const n=r.indexOf(e);n>=0&&r.splice(n,1)}trigger(t,e){const r=this._listeners[t.type];r&&r.forEach(r=>e?r(t,e):r(t))}_handleMessage(t){if(-1===this._sourceOrigins.indexOf(t.origin)||!u(t.data,t.data.type))return;const e=t.data,{context:r}=e,n=function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(t);i<n.length;i++)e.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(t,n[i])&&(r[n[i]]=t[n[i]])}return r}(e,[\"context\"]);this.trigger(n,r)}}!function(t,e,r,n){var i,o=arguments.length,a=o<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,r):n;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(t,e,r,n);else for(var u=t.length-1;u>=0;u--)(i=t[u])&&(a=(o<3?i(a):o>3?i(e,r,a):i(e,r))||a);o>3&&a&&Object.defineProperty(e,r,a)}([function(e,r,n){return r&&n?t(0,r,n):function(e){const r=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const i=Object.getOwnPropertyDescriptor(e.prototype,n);i&&\"constructor\"!==n&&Object.defineProperty(r.prototype,n,t(e.prototype,n,i))}),r}(e)}],s.prototype,\"_handleMessage\",null);class c{setNonce(t){this._nonce=t}getNonce(){return this._nonce}}let l;function f(){return l=l||new c,l}var p=r(2742),d=r(168),h=function(){return h=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var i in e=arguments[r])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},h.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError;var y=/application\\/(\\w+\\+)?json/,m=/application\\/x-www-form-urlencoded/;const v=function(){function t(){}return t.prototype.toRequestBody=function(t){var e,r=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(y.test(r))return JSON.stringify(t.body);if(m.test(r))return\"object\"!=typeof(e=t.body)||null===e?e:Object.keys(e).filter(function(t){return void 0!==e[t]}).map(function(t){var r=e[t];return\"string\"==typeof r?\"\".concat(t,\"=\").concat(encodeURIComponent(r)):\"\".concat(t,\"=\").concat(encodeURIComponent(JSON.stringify(r)||\"\"))}).join(\"&\")}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var r=this._getHeader(e,\"Content-Type\");return t&&y.test(r)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var r,n=e.split(\":\"),i=(n.shift()||\"\").trim();return i?h(h({},t),((r={})[i.toLowerCase()]=n.join(\":\").trim(),r)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}();var g=r(5889);const _=function(){function t(){}return t.prototype.createRequest=function(t,e){var r=new XMLHttpRequest;return this._configureRequest(r,t,e),r},t.prototype._configureRequest=function(t,e,r){void 0===r&&(r={}),t.open(r.method||\"GET\",this._formatUrl(e,r.params,r.encodeParams),!0),r.headers&&this._configureRequestHeaders(t,r.headers),\"boolean\"==typeof r.credentials&&(t.withCredentials=r.credentials),\"number\"==typeof r.timeout&&(t.timeout=r.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(r){t.setRequestHeader(r,e[r])})},t.prototype._formatUrl=function(t,e,r){return void 0===r&&(r=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(g.stringify(e,{encode:r})):t},t}();var b=r(35),w=r.n(b),E=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var r=this.getKey(t,e.params);return this._cache[r]||null},t.prototype.write=function(t,e,r){var n=this.getKey(t,e.params);this._cache[n]=r},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(g.stringify(e))},t}();const O=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}(),S=function(){function t(t,e,r,n){void 0===n&&(n={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=r,this._options=n,this._cache=this._options.cache||new E}return t.prototype.sendRequest=function(t,e){var r=this,n=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,n);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),n);return new Promise(function(e,i){var a,u=function(){var a=r._payloadTransformer.toResponse(o);a.status>=200&&a.status<300?(r._cacheRequest(t,n,a),e(a)):i(a)};o.onload=u,o.onerror=u,o.onabort=u,o.ontimeout=u,n.timeout instanceof O&&(n.timeout.onComplete(function(){return o.abort()}),n.timeout.start()),!(a=n.timeout)||\"object\"!=typeof a&&\"function\"!=typeof a||\"function\"!=typeof a.then||n.timeout.then(function(){return o.abort()}),o.send(r._payloadTransformer.toRequestBody(n))})},t.prototype.get=function(t,e){return this.sendRequest(t,h(h({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,h(h({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,h(h({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,h(h({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,h(h({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var r={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},n=this._cookie.get(\"XSRF-TOKEN\");return n&&r.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(r.headers[\"X-XSRF-TOKEN\"]=n),e&&e.body&&r.headers&&(r.headers[\"Content-Type\"]=\"application/json\"),w()({},r,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,r){this._shouldCacheRequest(e)&&this._cache.write(t,e,r)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}();var T=function(t,e){return T=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},T(t,e)};function C(t,e){function r(){this.constructor=t}T(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}function A(t){return\"function\"==typeof t}var P=!1,x={Promise:void 0,set useDeprecatedSynchronousErrorHandling(t){t&&(new Error).stack,P=t},get useDeprecatedSynchronousErrorHandling(){return P}};function j(t){setTimeout(function(){throw t},0)}var I={closed:!0,next:function(t){},error:function(t){if(x.useDeprecatedSynchronousErrorHandling)throw t;j(t)},complete:function(){}},k=function(){return Array.isArray||function(t){return t&&\"number\"==typeof t.length}}();function M(t){return null!==t&&\"object\"==typeof t}var R=function(){function t(t){return Error.call(this),this.message=t?t.length+\" errors occurred during unsubscription:\\n\"+t.map(function(t,e){return e+1+\") \"+t.toString()}).join(\"\\n  \"):\"\",this.name=\"UnsubscriptionError\",this.errors=t,this}return t.prototype=Object.create(Error.prototype),t}(),N=function(){function t(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._ctorUnsubscribe=!0,this._unsubscribe=t)}return t.prototype.unsubscribe=function(){var e;if(!this.closed){var r=this,n=r._parentOrParents,i=r._ctorUnsubscribe,o=r._unsubscribe,a=r._subscriptions;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,n instanceof t)n.remove(this);else if(null!==n)for(var u=0;u<n.length;++u)n[u].remove(this);if(A(o)){i&&(this._unsubscribe=void 0);try{o.call(this)}catch(t){e=t instanceof R?D(t.errors):[t]}}if(k(a)){u=-1;for(var s=a.length;++u<s;){var c=a[u];if(M(c))try{c.unsubscribe()}catch(t){e=e||[],t instanceof R?e=e.concat(D(t.errors)):e.push(t)}}}if(e)throw new R(e)}},t.prototype.add=function(e){var r=e;if(!e)return t.EMPTY;switch(typeof e){case\"function\":r=new t(e);case\"object\":if(r===this||r.closed||\"function\"!=typeof r.unsubscribe)return r;if(this.closed)return r.unsubscribe(),r;if(!(r instanceof t)){var n=r;(r=new t)._subscriptions=[n]}break;default:throw new Error(\"unrecognized teardown \"+e+\" added to Subscription.\")}var i=r._parentOrParents;if(null===i)r._parentOrParents=this;else if(i instanceof t){if(i===this)return r;r._parentOrParents=[i,this]}else{if(-1!==i.indexOf(this))return r;i.push(this)}var o=this._subscriptions;return null===o?this._subscriptions=[r]:o.push(r),r},t.prototype.remove=function(t){var e=this._subscriptions;if(e){var r=e.indexOf(t);-1!==r&&e.splice(r,1)}},t.EMPTY=function(t){return t.closed=!0,t}(new t),t}();function D(t){return t.reduce(function(t,e){return t.concat(e instanceof R?e.errors:e)},[])}var F=function(){return\"function\"==typeof Symbol?Symbol(\"rxSubscriber\"):\"@@rxSubscriber_\"+Math.random()}(),L=function(t){function e(r,n,i){var o=t.call(this)||this;switch(o.syncErrorValue=null,o.syncErrorThrown=!1,o.syncErrorThrowable=!1,o.isStopped=!1,arguments.length){case 0:o.destination=I;break;case 1:if(!r){o.destination=I;break}if(\"object\"==typeof r){r instanceof e?(o.syncErrorThrowable=r.syncErrorThrowable,o.destination=r,r.add(o)):(o.syncErrorThrowable=!0,o.destination=new U(o,r));break}default:o.syncErrorThrowable=!0,o.destination=new U(o,r,n,i)}return o}return C(e,t),e.prototype[F]=function(){return this},e.create=function(t,r,n){var i=new e(t,r,n);return i.syncErrorThrowable=!1,i},e.prototype.next=function(t){this.isStopped||this._next(t)},e.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this))},e.prototype._next=function(t){this.destination.next(t)},e.prototype._error=function(t){this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},e.prototype._unsubscribeAndRecycle=function(){var t=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this},e}(N),U=function(t){function e(e,r,n,i){var o,a=t.call(this)||this;a._parentSubscriber=e;var u=a;return A(r)?o=r:r&&(o=r.next,n=r.error,i=r.complete,r!==I&&(A((u=Object.create(r)).unsubscribe)&&a.add(u.unsubscribe.bind(u)),u.unsubscribe=a.unsubscribe.bind(a))),a._context=u,a._next=o,a._error=n,a._complete=i,a}return C(e,t),e.prototype.next=function(t){if(!this.isStopped&&this._next){var e=this._parentSubscriber;x.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}},e.prototype.error=function(t){if(!this.isStopped){var e=this._parentSubscriber,r=x.useDeprecatedSynchronousErrorHandling;if(this._error)r&&e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(e.syncErrorThrowable)r?(e.syncErrorValue=t,e.syncErrorThrown=!0):j(t),this.unsubscribe();else{if(this.unsubscribe(),r)throw t;j(t)}}},e.prototype.complete=function(){var t=this;if(!this.isStopped){var e=this._parentSubscriber;if(this._complete){var r=function(){return t._complete.call(t._context)};x.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?(this.__tryOrSetError(e,r),this.unsubscribe()):(this.__tryOrUnsub(r),this.unsubscribe())}else this.unsubscribe()}},e.prototype.__tryOrUnsub=function(t,e){try{t.call(this._context,e)}catch(t){if(this.unsubscribe(),x.useDeprecatedSynchronousErrorHandling)throw t;j(t)}},e.prototype.__tryOrSetError=function(t,e,r){if(!x.useDeprecatedSynchronousErrorHandling)throw new Error(\"bad call\");try{e.call(this._context,r)}catch(e){return x.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=e,t.syncErrorThrown=!0,!0):(j(e),!0)}return!1},e.prototype._unsubscribe=function(){var t=this._parentSubscriber;this._context=null,this._parentSubscriber=null,t.unsubscribe()},e}(L),$=function(){return\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\"}();function V(t){return t}var q=function(){function t(t){this._isScalar=!1,t&&(this._subscribe=t)}return t.prototype.lift=function(e){var r=new t;return r.source=this,r.operator=e,r},t.prototype.subscribe=function(t,e,r){var n=this.operator,i=function(t,e,r){if(t){if(t instanceof L)return t;if(t[F])return t[F]()}return t||e||r?new L(t,e,r):new L(I)}(t,e,r);if(n?i.add(n.call(i,this.source)):i.add(this.source||x.useDeprecatedSynchronousErrorHandling&&!i.syncErrorThrowable?this._subscribe(i):this._trySubscribe(i)),x.useDeprecatedSynchronousErrorHandling&&i.syncErrorThrowable&&(i.syncErrorThrowable=!1,i.syncErrorThrown))throw i.syncErrorValue;return i},t.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){x.useDeprecatedSynchronousErrorHandling&&(t.syncErrorThrown=!0,t.syncErrorValue=e),function(t){for(;t;){var e=t,r=e.closed,n=e.destination,i=e.isStopped;if(r||i)return!1;t=n&&n instanceof L?n:null}return!0}(t)?t.error(e):console.warn(e)}},t.prototype.forEach=function(t,e){var r=this;return new(e=z(e))(function(e,n){var i;i=r.subscribe(function(e){try{t(e)}catch(t){n(t),i&&i.unsubscribe()}},n,e)})},t.prototype._subscribe=function(t){var e=this.source;return e&&e.subscribe(t)},t.prototype[$]=function(){return this},t.prototype.pipe=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return 0===t.length?this:(0===(r=t).length?V:1===r.length?r[0]:function(t){return r.reduce(function(t,e){return e(t)},t)})(this);var r},t.prototype.toPromise=function(t){var e=this;return new(t=z(t))(function(t,r){var n;e.subscribe(function(t){return n=t},function(t){return r(t)},function(){return t(n)})})},t.create=function(e){return new t(e)},t}();function z(t){if(t||(t=x.Promise||Promise),!t)throw new Error(\"no Promise impl found\");return t}function B(t,e){return function(r){if(\"function\"!=typeof t)throw new TypeError(\"argument is not a function. Are you looking for `mapTo()`?\");return r.lift(new H(t,e))}}var H=function(){function t(t,e){this.project=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new Y(t,this.project,this.thisArg))},t}(),Y=function(t){function e(e,r,n){var i=t.call(this,e)||this;return i.project=r,i.count=0,i.thisArg=n||i,i}return C(e,t),e.prototype._next=function(t){var e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(L);function G(t,e,r,n){return A(r)&&(n=r,r=void 0),n?G(t,e,r).pipe(B(function(t){return k(t)?n.apply(void 0,t):n(t)})):new q(function(n){W(t,e,function(t){arguments.length>1?n.next(Array.prototype.slice.call(arguments)):n.next(t)},n,r)})}function W(t,e,r,n,i){var o;if(function(t){return t&&\"function\"==typeof t.addEventListener&&\"function\"==typeof t.removeEventListener}(t)){var a=t;t.addEventListener(e,r,i),o=function(){return a.removeEventListener(e,r,i)}}else if(function(t){return t&&\"function\"==typeof t.on&&\"function\"==typeof t.off}(t)){var u=t;t.on(e,r),o=function(){return u.off(e,r)}}else if(function(t){return t&&\"function\"==typeof t.addListener&&\"function\"==typeof t.removeListener}(t)){var s=t;t.addListener(e,r),o=function(){return s.removeListener(e,r)}}else{if(!t||!t.length)throw new TypeError(\"Invalid event target\");for(var c=0,l=t.length;c<l;c++)W(t[c],e,r,n,i)}n.add(o)}var K=function(){function t(t,e){this.predicate=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new Z(t,this.predicate,this.thisArg))},t}(),Z=function(t){function e(e,r,n){var i=t.call(this,e)||this;return i.predicate=r,i.thisArg=n,i.count=0,i}return C(e,t),e.prototype._next=function(t){var e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}e&&this.destination.next(t)},e}(L),J=function(){function t(){return Error.call(this),this.message=\"argument out of range\",this.name=\"ArgumentOutOfRangeError\",this}return t.prototype=Object.create(Error.prototype),t}(),X=new q(function(t){return t.complete()});function Q(t){return function(e){return 0===t?r?function(t){return new q(function(e){return t.schedule(function(){return e.complete()})})}(r):X:e.lift(new tt(t));var r}}var tt=function(){function t(t){if(this.total=t,this.total<0)throw new J}return t.prototype.call=function(t,e){return e.subscribe(new et(t,this.total))},t}(),et=function(t){function e(e,r){var n=t.call(this,e)||this;return n.total=r,n.count=0,n}return C(e,t),e.prototype._next=function(t){var e=this.total,r=++this.count;r<=e&&(this.destination.next(t),r===e&&(this.destination.complete(),this.unsubscribe()))},e}(L);class rt{constructor(t,e,r){this._targetWindow=e,this._context=r,this._targetOrigin=\"*\"===t?\"*\":o(t).origin}post(t,e){const r=this._targetWindow;if(window===r)return;if(!r)throw new Error(\"Unable to post message because target window is not set.\");const n=e&&G(window,\"message\").pipe((i=t=>t.origin===this._targetOrigin&&u(t.data,t.data.type)&&-1!==[e.successType,e.errorType].indexOf(t.data.type),function(t){return t.lift(new K(i,void 0))}),B(t=>{if(e.errorType===t.data.type)throw t.data;return t.data}),Q(1)).toPromise();var i;return r.postMessage(Object.assign(Object.assign({},t),{context:this._context}),this._targetOrigin),n}setTarget(t){this._targetWindow=t}setContext(t){this._context=t}}class nt{constructor(t){this._client=t}submitPayment(t){return new Promise((e,r)=>{this._client.submitPayment(t,(t,n)=>{t?r(this._transformResponse(t)):e(this._transformResponse(n))})})}initializeOffsitePayment(t,e){return new Promise(()=>{this._client.initializeOffsitePayment(t,null,e)})}_transformResponse(t){return{headers:t.headers,body:t.data,status:t.status,statusText:t.statusText}}}var it=r(9440);function ot(t,e){let r;return function(t){return void 0!==t.id}(t)?r=t.id:e&&e.length&&(r=e[0].id),{id:r,firstName:t.firstName,lastName:t.lastName,company:t.company,addressLine1:t.address1,addressLine2:t.address2,city:t.city,province:t.stateOrProvince,provinceCode:t.stateOrProvinceCode,postCode:t.postalCode,country:t.country,countryCode:t.countryCode,phone:t.phone,customFields:t.customFields}}class at{constructor(t){this._decimalPlaces=t}toInteger(t){return Math.round(t*Math.pow(10,this._decimalPlaces))}}const ut=[\"per_item_discount\",\"percentage_discount\",\"per_total_discount\",\"shipping_discount\",\"free_shipping\"];function st(t){return{code:t.code,discount:t.displayName,discountType:ut.indexOf(t.couponType)}}function ct(t){return{code:t.code,discountedAmount:t.used,remainingBalance:t.remaining,giftCertificate:{balance:t.balance,code:t.code,purchaseDate:t.purchaseDate}}}function lt(t){const e=[];return(t||[]).forEach(t=>{(t.banners||[]).forEach(t=>{e.push({placeholders:[],discountType:null,message:\"\",messageHtml:t.text})})}),e}function ft(t,e,r=\"id\"){return Object.keys(t).reduce((n,i)=>[...n,...t[i].map(t=>\"giftCertificates\"===i?function(t,e){const r=new at(e);return{id:t.id,imageUrl:\"\",name:t.name,amount:t.amount,amountAfterDiscount:t.amount,discount:0,integerAmount:r.toInteger(t.amount),integerAmountAfterDiscount:r.toInteger(t.amount),integerUnitPrice:r.toInteger(t.amount),integerUnitPriceAfterDiscount:r.toInteger(t.amount),integerDiscount:0,quantity:1,sender:t.sender,recipient:t.recipient,type:\"ItemGiftCertificateEntity\",attributes:[],variantId:null}}(t,e):function(t,e,r,n=\"id\"){const i=new at(r);return{id:t[n],imageUrl:t.imageUrl,amount:t.extendedListPrice,amountAfterDiscount:t.extendedSalePrice,discount:t.discountAmount,integerAmount:i.toInteger(t.extendedListPrice),integerAmountAfterDiscount:i.toInteger(t.extendedSalePrice),integerDiscount:i.toInteger(t.discountAmount),integerUnitPrice:i.toInteger(t.listPrice),integerUnitPriceAfterDiscount:i.toInteger(t.salePrice),downloadsPageUrl:t.downloadPageUrl,name:t.name,quantity:t.quantity,brand:t.brand,sku:t.sku,categoryNames:t.categoryNames,variantId:t.variantId,productId:t.productId,attributes:(t.options||[]).map(t=>({name:t.name,value:t.value})),addedByPromotion:t.addedByPromotion,type:e}}(t,function(t){switch(t){case\"physicalItems\":return\"ItemPhysicalEntity\";case\"digitalItems\":return\"ItemDigitalEntity\";case\"giftCertificates\":return\"ItemGiftCertificateEntity\";default:return\"\"}}(i),e,r))],[])}function pt(t){const e=t.cart.currency.decimalPlaces,r=new at(e);return{id:t.cart.id,items:ft(t.cart.lineItems,e),currency:t.cart.currency.code,coupon:{discountedAmount:(0,it.reduce)(t.cart.coupons,(t,e)=>t+e.discountedAmount,0),coupons:t.cart.coupons.map(st)},discount:{amount:t.cart.discountAmount,integerAmount:r.toInteger(t.cart.discountAmount)},discountNotifications:lt(t.promotions),giftCertificate:{totalDiscountedAmount:(0,it.reduce)(t.giftCertificates,(t,e)=>t+e.used,0),appliedGiftCertificates:(0,it.keyBy)(t.giftCertificates.map(ct),\"code\")},shipping:{amount:t.shippingCostTotal,integerAmount:r.toInteger(t.shippingCostTotal),amountBeforeDiscount:t.shippingCostBeforeDiscount,integerAmountBeforeDiscount:r.toInteger(t.shippingCostBeforeDiscount),required:(0,it.some)(t.cart.lineItems.physicalItems,t=>t.isShippingRequired)},subtotal:{amount:t.subtotal,integerAmount:r.toInteger(t.subtotal)},storeCredit:{amount:t.customer?t.customer.storeCredit:0},taxSubtotal:{amount:t.taxTotal,integerAmount:r.toInteger(t.taxTotal)},taxes:t.taxes,taxTotal:{amount:t.taxTotal,integerAmount:r.toInteger(t.taxTotal)},handling:{amount:t.handlingCostTotal,integerAmount:r.toInteger(t.handlingCostTotal)},grandTotal:{amount:t.grandTotal,integerAmount:r.toInteger(t.grandTotal)}}}var dt;!function(t){t.APPLEPAY=\"applepay\",t.AMAZON_PAY_V2=\"amazonpay\",t.BRAINTREE_PAYPAL=\"braintreepaypal\",t.BRAINTREE_VENMO=\"braintreevenmo\",t.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",t.GOOGLEPAY_ADYENV2=\"googlepayadyenv2\",t.GOOGLEPAY_ADYENV3=\"googlepayadyenv3\",t.GOOGLEPAY_AUTHORIZENET=\"googlepayauthorizenet\",t.GOOGLEPAY_BNZ=\"googlepaybnz\",t.GOOGLEPAY_BRAINTREE=\"googlepaybraintree\",t.GOOGLEPAY_CHECKOUTCOM=\"googlepaycheckoutcom\",t.GOOGLEPAY_CYBERSOURCEV2=\"googlepaycybersourcev2\",t.GOOGLEPAY_ORBITAL=\"googlepayorbital\",t.GOOGLEPAY_STRIPE=\"googlepaystripe\",t.GOOGLEPAY_STRIPEUPE=\"googlepaystripeupe\",t.GOOGLEPAY_WORLDPAYACCESS=\"googlepayworldpayaccess\",t.PAYPALEXPRESS=\"paypalexpress\"}(dt||(dt={}));const ht=dt;var yt;!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentProviderCustomer=13]=\"MissingPaymentProviderCustomer\",t[t.MissingPaymentRedirectUrl=14]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=15]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=16]=\"MissingPaymentToken\",t[t.MissingShippingAddress=17]=\"MissingShippingAddress\"}(yt||(yt={}));class mt extends e{constructor(t){super(function(t){switch(t){case yt.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case yt.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case yt.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case yt.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case yt.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case yt.MissingCheckoutConfig:case yt.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case yt.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case yt.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case yt.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case yt.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case yt.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case yt.MissingPaymentProviderCustomer:return\"Unable to proceed because payment provider customer is unavailable.\";case yt.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function vt(t,e){const r=t.firstName||e.firstName||\"\",n=t.lastName||e.lastName||\"\";return{addresses:(t.addresses||[]).map(t=>ot(t)),customerId:t.id,isGuest:t.isGuest,storeCredit:t.storeCredit,email:t.email||e.email||\"\",firstName:r,lastName:n,name:t.fullName||[r,n].join(\" \"),customerGroupName:t.customerGroup&&t.customerGroup.name}}class gt{format(t){const[e=\"\",r=\"\"]=t.split(new RegExp(\"\\\\s*/\\\\s*\")),n=e.slice(0,2),i=4===r.length?r.slice(-2):r?r.slice(0,2):e.slice(2);return t.length<2?e:t.length>3&&!i?n:`${n} / ${i}`}toObject(t){const[e=\"\",r=\"\"]=t.split(new RegExp(\"\\\\s*/\\\\s*\"));return/^\\d+$/.test(e)&&/^\\d+$/.test(r)?{month:1===e.length?`0${e}`:e.slice(0,2),year:2===r.length?`20${r}`:r.slice(0,4)}:{month:\"\",year:\"\"}}}var _t=r(2437);class bt{format(t){const{card:e}=(0,_t.number)(t);if(!e)return t;const r=(0,it.max)((0,_t.creditCardType)(t).map(t=>(0,it.max)(t.lengths))),n=this.unformat(t).slice(0,r);return e.gaps.filter(t=>n.length>t).reduce((t,e,r)=>[t.slice(0,e+r),t.slice(e+r)].join(\" \"),n)}unformat(t){const{card:e}=(0,_t.number)(t);return e?t.replace(new RegExp(\" \",\"g\"),\"\"):t}}function wt(t,e={}){const r=t.currency.decimalPlaces,n=new at(r);return{id:t.orderId,items:ft(t.lineItems,t.currency.decimalPlaces,\"productId\"),orderId:t.orderId,currency:t.currency.code,customerCanBeCreated:t.customerCanBeCreated,payment:St(t.payments,e.payment),subtotal:{amount:t.baseAmount,integerAmount:n.toInteger(t.baseAmount)},coupon:{discountedAmount:(0,it.reduce)(t.coupons,(t,e)=>t+e.discountedAmount,0),coupons:t.coupons.map(st)},discount:{amount:t.discountAmount,integerAmount:n.toInteger(t.discountAmount)},token:e.orderToken,callbackUrl:e.callbackUrl,discountNotifications:[],giftCertificate:Ot(t.payments),socialData:Ct(t),status:t.status,hasDigitalItems:t.hasDigitalItems,isDownloadable:t.isDownloadable,isComplete:t.isComplete,shipping:{amount:t.shippingCostTotal,integerAmount:n.toInteger(t.shippingCostTotal),amountBeforeDiscount:t.shippingCostBeforeDiscount,integerAmountBeforeDiscount:n.toInteger(t.shippingCostBeforeDiscount)},storeCredit:{amount:Et(t.payments)},taxes:t.taxes,taxTotal:{amount:t.taxTotal,integerAmount:n.toInteger(t.taxTotal)},handling:{amount:t.handlingCostTotal,integerAmount:n.toInteger(t.handlingCostTotal)},grandTotal:{amount:t.orderAmount,integerAmount:t.orderAmountAsInteger}}}function Et(t){const e=(0,it.find)(t,{providerId:\"storecredit\"});return e?e.amount:0}function Ot(t){const e=(0,it.filter)(t,{providerId:\"giftcertificate\"});return{totalDiscountedAmount:(0,it.reduce)(e,(t,e)=>e.amount+t,0),appliedGiftCertificates:(0,it.keyBy)(e.map(t=>({code:t.detail.code,discountedAmount:t.amount,remainingBalance:t.detail.remaining,giftCertificate:{balance:t.amount+t.detail.remaining,code:t.detail.code,purchaseDate:\"\"}})),\"code\")}}function St(t,e={}){const r=(0,it.find)(t,Tt);return r?{id:r.providerId,status:(n=r.detail.step,`PAYMENT_STATUS_${n}`),helpText:r.detail.instructions,returnUrl:e.returnUrl}:{};var n}function Tt(t){return\"giftcertificate\"!==t.providerId&&\"storecredit\"!==t.providerId}function Ct(t){const e={};return[...t.lineItems.physicalItems,...t.lineItems.digitalItems].forEach(t=>{var r;e[t.id]=(r=t,[\"fb\",\"tw\",\"gp\"].reduce((t,e)=>{const n=r.socialMedia&&(0,it.find)(r.socialMedia,t=>t.code===e);return n?(t[e]={name:r.name,description:r.name,image:r.imageUrl,url:n.link,shareText:n.text,sharingLink:n.link,channelName:n.channel,channelCode:n.code},t):t},{}))}),e}function At(t,e){return{description:t.description,module:t.type,price:t.cost,id:t.id,selected:e,isRecommended:t.isRecommended,imageUrl:t.imageUrl,transitTime:t.transitTime}}class Pt{constructor(){this._cardExpiryFormatter=new gt,this._cardNumberFormatter=new bt}transform(t,e){const r=e.billingAddress.getBillingAddress(),n=e.checkout.getCheckout(),i=e.customer.getCustomer(),o=e.order.getOrder(),a=e.paymentMethods.getPaymentMethod(t.methodId,t.gatewayId),u=this._mapShippingAddress(e,a),s=e.consignments.getConsignments(),c=e.consignments.getShippingOption(),l=e.config.getStoreConfig(),f=e.config.getContextConfig(),p=e.instruments.getInstrumentsMeta(),d=e.paymentMethods.getPaymentMethodsMeta(),h=e.order.getOrderMeta(),y=i&&r&&vt(i,r),m=p&&t.paymentData&&(v=t.paymentData,Boolean(v.instrumentId)||function(t){const e=t.formattedPayload;return!!e&&(\"string\"==typeof e.bigpay_token||Boolean(e.bigpay_token&&e.bigpay_token.token))}(t.paymentData))?`${e.payment.getPaymentToken()}, ${p.vaultAccessToken}`:e.payment.getPaymentToken();var v;if(!m)throw new mt(yt.MissingPaymentToken);return{additionalAction:t.additionalAction,authToken:m,customer:y,billingAddress:r&&ot(r),shippingAddress:u&&ot(u,s),shippingOption:c&&At(c,!0),cart:n&&pt(n),order:o&&wt(o,h),orderMeta:h,payment:t.paymentData,paymentMethod:a&&this._transformPaymentMethod(a),quoteMeta:{request:Object.assign(Object.assign({},d),{geoCountryCode:f&&f.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:(0,it.pick)(l&&l.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}transformWithHostedFormData(t,e,r){const{additionalAction:n,authToken:i,checkout:o,config:a,order:u,orderMeta:s,payment:c={},paymentMethod:l,paymentMethodMeta:f}=e,p=o&&o.consignments[0],d=p&&p.shippingAddress,h=p&&p.selectedShippingOption;return{additionalAction:n,authToken:i,paymentMethod:l&&this._transformPaymentMethod(l),customer:u&&u.billingAddress&&o&&vt(o.customer,u.billingAddress),billingAddress:u&&u.billingAddress&&ot(u.billingAddress),shippingAddress:d&&o&&ot(d,o.consignments),shippingOption:h&&At(h,!0),cart:o&&pt(o),order:u&&wt(u,s),orderMeta:s,payment:this._transformHostedInputValues(t,c,r),quoteMeta:{request:Object.assign(Object.assign({},f),{geoCountryCode:a&&a.context.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:a&&(0,it.pick)(a.storeConfig.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}_transformPaymentMethod(t){if(\"multi-option\"===t.method&&!t.gateway)return Object.assign(Object.assign({},t),{gateway:t.id});if(t.initializationData&&t.initializationData.gateway)return Object.assign(Object.assign({},t),{id:t.initializationData.gateway});if(\"worldpayaccess\"===t.gateway){if(\"credit_card\"===t.id)return Object.assign(Object.assign({},t),{id:\"worldpayaccess\",method:\"credit-card\"});if(\"open_banking\"===t.id)return Object.assign(Object.assign({},t),{id:\"worldpayaccess\",method:\"open_banking\"})}return t.id===ht.BRAINTREE_VENMO?Object.assign(Object.assign({},t),{id:ht.BRAINTREE_PAYPAL}):t}_transformHostedInputValues(t,e,r){return\"instrumentId\"in e?Object.assign(Object.assign({},e),{ccCvv:t.cardCodeVerification,ccNumber:t.cardNumberVerification&&this._cardNumberFormatter.unformat(t.cardNumberVerification),hostedFormNonce:r}):Object.assign(Object.assign({},e),{ccCvv:t.cardCode,ccExpiry:this._cardExpiryFormatter.toObject(t.cardExpiry||\"\"),ccName:t.cardName||\"\",ccNumber:this._cardNumberFormatter.unformat(t.cardNumber||\"\"),hostedFormNonce:r})}_mapShippingAddress(t,e){var r,n,i,o;if(e){const a=null===(n=null===(r=e.initializationData)||void 0===r?void 0:r.bopis)||void 0===n?void 0:n.enabled,u=null===(o=null===(i=e.initializationData)||void 0===i?void 0:i.bopis)||void 0===o?void 0:o.requiredAddress,s=t.consignments.getConsignments(),c=null==s?void 0:s.every(t=>t.selectedPickupOption);if(a&&c&&\"none\"===u)return}return t.shippingAddress.getShippingAddress()}}var xt;class jt{constructor(t){this._requestSender=t}submitPaymentInstrument(t,e){return r=this,n=void 0,o=function*(){const{providerId:r,currencyCode:n,paymentsUrl:i,shopperId:o,storeHash:a,vaultToken:u}=t,{billingAddress:s,instrument:c,defaultInstrument:l}=e,f=`${i}/stores/${a}/customers/${o}/stored_instruments`,p={headers:{Authorization:u,Accept:\"application/vnd.bc.v1+json\",\"Content-Type\":\"application/vnd.bc.v1+json\"},body:JSON.stringify({instrument:{type:c.type,cardholder_name:c.cardholderName,number:c.number,expiry_month:c.expiryMonth,expiry_year:c.expiryYear,verification_value:c.verificationValue},billing_address:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({email:s.email,address1:s.address1},s.address2&&{address2:s.address2}),{city:s.city,postal_code:s.postalCode,country_code:s.countryCode}),s.company&&{company:s.company}),{first_name:s.firstName,last_name:s.lastName}),s.phone&&{phone:s.phone}),s.stateOrProvinceCode&&{state_or_province_code:s.stateOrProvinceCode}),provider_id:r,default_instrument:l,currency_code:n})};yield this._requestSender.post(f,p)},new((i=void 0)||(i=Promise))(function(t,e){function a(t){try{s(o.next(t))}catch(t){e(t)}}function u(t){try{s(o.throw(t))}catch(t){e(t)}}function s(e){var r;e.done?t(e.value):(r=e.value,r instanceof i?r:new i(function(t){t(r)})).then(a,u)}s((o=o.apply(r,n||[])).next())});var r,n,i,o}}!function(t){t.CardCode=\"cardCode\",t.CardCodeVerification=\"cardCodeVerification\",t.CardExpiry=\"cardExpiry\",t.CardName=\"cardName\",t.CardNumber=\"cardNumber\",t.CardNumberVerification=\"cardNumberVerification\"}(xt||(xt={}));const It=xt;function kt(t){switch(t){case It.CardCode:return\"cc-csc\";case It.CardExpiry:return\"cc-exp\";case It.CardName:return\"cc-name\";case It.CardNumber:return\"cc-number\";default:return\"\"}}class Mt{constructor(t,e,r){this._form=t,this._fieldTypes=e,this._inputAggregator=r,this._handleChange=t=>{const e=t.target;if(!e)throw new Error(\"Unable to get a reference to the target of the change event.\");const r=this._inputAggregator.getInputs().find(t=>this._getAutocompleteElementId(t.getType())===e.id);r&&r.setValue(e.value)},this._inputs=this._fieldTypes.map(t=>this._createInput(t))}attach(){this._inputs.forEach(t=>this._form.appendChild(t))}detach(){this._inputs.forEach(t=>{t.parentElement&&t.parentElement.removeChild(t)})}_createInput(t){const e=document.createElement(\"input\");return e.autocomplete=kt(t),e.id=this._getAutocompleteElementId(t),e.tabIndex=-1,e.style.position=\"absolute\",e.style.opacity=\"0\",e.style.zIndex=\"-1\",e.addEventListener(\"change\",this._handleChange),e}_getAutocompleteElementId(t){return`autocomplete-${(0,it.kebabCase)(t)}`}}var Rt,Nt;!function(t){t.AttachRequested=\"HOSTED_FIELD:ATTACH_REQUESTED\",t.SubmitRequested=\"HOSTED_FIELD:SUBMITTED_REQUESTED\",t.ValidateRequested=\"HOSTED_FIELD:VALIDATE_REQUESTED\",t.StoredCardRequested=\"HOSTED_FIELD:STORED_CARD_REQUESTED\"}(Rt||(Rt={})),function(t){t.AttachSucceeded=\"HOSTED_INPUT:ATTACH_SUCCEEDED\",t.AttachFailed=\"HOSTED_INPUT:ATTACH_FAILED\",t.BinChanged=\"HOSTED_INPUT:BIN_CHANGED\",t.Blurred=\"HOSTED_INPUT:BLURRED\",t.Changed=\"HOSTED_INPUT:CHANGED\",t.CardTypeChanged=\"HOSTED_INPUT:CARD_TYPE_CHANGED\",t.Entered=\"HOSTED_INPUT:ENTERED\",t.Focused=\"HOSTED_INPUT:FOCUSED\",t.SubmitSucceeded=\"HOSTED_INPUT:SUBMIT_SUCCEEDED\",t.SubmitFailed=\"HOSTED_INPUT:SUBMIT_FAILED\",t.Validated=\"HOSTED_INPUT:VALIDATED\",t.StoredCardSucceeded=\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",t.StoredCardFailed=\"HOSTED_INPUT:STORED_CARD_FAILED\"}(Nt||(Nt={}));class Dt{constructor(t,e,r,n,i,o,a,u,s,c,l,f,p){this._type=t,this._form=e,this._placeholder=r,this._accessibilityLabel=n,this._autocomplete=i,this._styles=o,this._fontUrls=a,this._eventListener=u,this._eventPoster=s,this._inputAggregator=c,this._inputValidator=l,this._paymentHandler=f,this._storedCardHandler=p,this._isTouched=!1,this._handleInput=t=>{const e=t.target;this._processChange(e.value)},this._handleBlur=()=>{this._applyStyles(this._styles.default),this._validateForm(),this._eventPoster.post({type:Nt.Blurred,payload:{fieldType:this._type}})},this._handleFocus=()=>{this._applyStyles(this._styles.focus),this._eventPoster.post({type:Nt.Focused,payload:{fieldType:this._type}})},this._handleValidate=()=>{this._validateForm()},this._handleSubmit=t=>{t.preventDefault(),this._eventPoster.post({type:Nt.Entered,payload:{fieldType:this._type}})},this._forceFocusToInput=()=>{document.activeElement===document.body&&(navigator.userAgent.toLowerCase().indexOf(\"safari\")>-1?\"\"===this._input.value&&(this._input.setAttribute(\"value\",\" \"),this._input.setSelectionRange(0,1),this._input.setAttribute(\"value\",\"\")):this._input.focus())},this._input=document.createElement(\"input\"),this._input.addEventListener(\"input\",this._handleInput),this._input.addEventListener(\"blur\",this._handleBlur),this._input.addEventListener(\"focus\",this._handleFocus),this._eventListener.addListener(Rt.ValidateRequested,this._handleValidate),this._eventListener.addListener(Rt.SubmitRequested,this._paymentHandler.handle),this._eventListener.addListener(Rt.StoredCardRequested,this._storedCardHandler.handle),this._configureInput()}getType(){return this._type}getValue(){return this._input.value}setValue(t){this._processChange(t)}isTouched(){return this._isTouched}attach(){this._form.appendChild(this._input),this._form.addEventListener(\"submit\",this._handleSubmit),this._loadFonts(),this._eventPoster.setTarget(window.parent),this._eventListener.listen(),window.addEventListener(\"focus\",this._forceFocusToInput),window.hostedInput=this,this._eventPoster.post({type:Nt.AttachSucceeded})}detach(){this._input.parentElement&&this._input.parentElement.removeChild(this._input),this._form.removeEventListener(\"submit\",this._handleSubmit),this._unloadFonts(),window.removeEventListener(\"focus\",this._forceFocusToInput),this._eventListener.stopListen()}_formatValue(t){this._input.value=t}_notifyChange(t){this._eventPoster.post({type:Nt.Changed,payload:{fieldType:this._type}})}_configureInput(){switch(this._input.style.backgroundColor=\"transparent\",this._input.style.border=\"0\",this._input.style.display=\"block\",this._input.style.height=\"100%\",this._input.style.margin=\"0\",this._input.style.outline=\"none\",this._input.style.padding=\"0\",this._input.style.width=\"100%\",this._input.id=(0,it.kebabCase)(this._type),this._input.placeholder=this._placeholder,this._input.autocomplete=this._autocomplete,this._input.setAttribute(\"aria-label\",this._accessibilityLabel),this._applyStyles(this._styles.default),this._input.id){case\"card-code\":case\"card-expiry\":case\"card-number\":this._input.type=\"text\",this._input.inputMode=\"numeric\",this._input.pattern=\"[0-9]*\";break;case\"card-name\":this._input.type=\"text\",this._input.inputMode=\"text\"}}_applyStyles(t={}){const e={color:t.color,fontFamily:t.fontFamily,fontSize:t.fontSize,fontWeight:t.fontWeight};Object.keys(e).forEach(t=>{e[t]&&(this._input.style[t]=e[t]||\"\")})}_loadFonts(){this._fontLinks||(this._fontLinks=this._fontUrls.filter(t=>\"fonts.googleapis.com\"===o(t).hostname).filter(t=>!document.querySelector(`link[href='${t}'][rel='stylesheet']`)).map(t=>{const e=document.createElement(\"link\");return e.rel=\"stylesheet\",e.href=t,document.head.appendChild(e),e}))}_unloadFonts(){this._fontLinks&&(this._fontLinks.forEach(t=>{t.parentElement&&t.parentElement.removeChild(t)}),this._fontLinks=void 0)}_validateForm(){return t=this,e=void 0,n=function*(){const t=this._inputAggregator.getInputValues(),e=yield this._inputValidator.validate(t);e.isValid?this._applyStyles(this._styles.default):this._applyStyles(this._styles.error),this._eventPoster.post({type:Nt.Validated,payload:e})},new((r=void 0)||(r=Promise))(function(i,o){function a(t){try{s(n.next(t))}catch(t){o(t)}}function u(t){try{s(n.throw(t))}catch(t){o(t)}}function s(t){var e;t.done?i(t.value):(e=t.value,e instanceof r?e:new r(function(t){t(e)})).then(a,u)}s((n=n.apply(t,e||[])).next())});var t,e,r,n}_processChange(t){t!==this._previousValue&&(this._isTouched=!0,this._formatValue(t),this._validateForm(),this._notifyChange(t),this._previousValue=t)}}class Ft extends Dt{constructor(t,e,r,n,i,o,a,u,s,c,l,f,p){super(It.CardExpiry,t,e,r,n,i,o,a,u,s,c,l,f),this._formatter=p}_formatValue(t){this._input.value=this._formatter.format(t)}}class Lt extends Dt{constructor(t,e,r,n,i,o,a,u,s,c,l,f,p,d,h){super(t,e,r,n,i,o,a,u,s,c,l,f,p),this._autocompleteFieldset=d,this._formatter=h}attach(){super.attach(),this._autocompleteFieldset.attach()}_notifyChange(t){const e=(0,_t.number)(t).card,r=this._previousValue&&(0,_t.number)(this._previousValue).card;(0,it.get)(r,\"type\")!==(0,it.get)(e,\"type\")&&this._eventPoster.post({type:Nt.CardTypeChanged,payload:{cardType:e?e.type:void 0}});const n=this._formatter.unformat(t),i=this._previousValue?this._formatter.unformat(this._previousValue):\"\",o=n.length>=6&&(0,_t.number)(n).isPotentiallyValid?n.substr(0,6):\"\";o!==(i.length>=6?i.substr(0,6):\"\")&&this._eventPoster.post({type:Nt.BinChanged,payload:{bin:o}})}_formatValue(t){const e=this._input.selectionEnd,r=this._formatter.format(t);e===t.length&&t.length<r.length?this._input.setSelectionRange(r.length,r.length):this._input.setSelectionRange(e||0,e||0),this._input.value=r}}class Ut{constructor(t){this._parentWindow=t}getInputs(t){return Array.prototype.slice.call(this._parentWindow.frames).reduce((e,r)=>{try{const n=r.hostedInput;return!n||t&&!t(n)?e:[...e,n]}catch(t){if(t instanceof DOMException)return e;if(t instanceof Error&&\"Permission denied\"===t.message)return e;throw t}},[])}getInputValues(t){return this.getInputs(t).reduce((t,e)=>Object.assign(Object.assign({},t),{[e.getType()]:e.getValue()}),{})}}class $t extends e{constructor(t){super([\"Unable to proceed due to invalid user input values\",...(0,it.flatMap)((0,it.values)(t),t=>(0,it.map)(t,({message:t})=>t))].join(\". \")),this.errors=t,this.name=\"InvalidHostedFormValueError\",this.type=\"invalid_hosted_form_value\"}}class Vt{constructor(t,e,r,n,i,o){this._inputAggregator=t,this._inputValidator=e,this._inputStorage=r,this._eventPoster=n,this._paymentRequestSender=i,this._paymentRequestTransformer=o,this.handle=({payload:{data:t}})=>{return e=this,r=void 0,i=function*(){const e=this._inputAggregator.getInputValues(),r=yield this._inputValidator.validate(e);if(this._eventPoster.post({type:Nt.Validated,payload:r}),!r.isValid){const t=new $t(r.errors);return this._eventPoster.post({type:Nt.SubmitFailed,payload:{error:{code:(0,it.snakeCase)(t.name),message:t.message}}})}try{const r=yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transformWithHostedFormData(e,t,this._inputStorage.getNonce()||\"\"));this._eventPoster.post({type:Nt.SubmitSucceeded,payload:{response:r}})}catch(t){this._isPaymentErrorResponse(t)?this._eventPoster.post({type:Nt.SubmitFailed,payload:{error:t.body.errors[0],response:t}}):this._isErrorResponse(t)&&this._eventPoster.post({type:Nt.SubmitFailed,payload:{error:{code:(0,it.snakeCase)(t.name),message:t.message}}})}},new((n=void 0)||(n=Promise))(function(t,o){function a(t){try{s(i.next(t))}catch(t){o(t)}}function u(t){try{s(i.throw(t))}catch(t){o(t)}}function s(e){var r;e.done?t(e.value):(r=e.value,r instanceof n?r:new n(function(t){t(r)})).then(a,u)}s((i=i.apply(e,r||[])).next())});var e,r,n,i}}_isPaymentErrorResponse(t){const{body:{errors:e=[]}={}}=t||{};return\"string\"==typeof(e[0]&&e[0].code)&&\"string\"==typeof(e[0]&&e[0].message)}_isErrorResponse(t){return\"object\"==typeof t&&null!==t&&(\"name\"in t&&\"string\"==typeof t.name||!(\"name\"in t))&&(\"message\"in t&&\"string\"==typeof t.message||!(\"message\"in t))}}class qt{constructor(t,e,r,n){this._inputAggregator=t,this._inputValidator=e,this._eventPoster=r,this._storedCardRequestSender=n,this.handle=t=>{return e=this,r=void 0,i=function*(){var e;const{payload:{data:r,fields:n}}=t,i=this._inputAggregator.getInputValues(),o=yield this._inputValidator.validate(i);if(this._eventPoster.post({type:Nt.Validated,payload:o}),!o.isValid)return this._eventPoster.post({type:Nt.StoredCardFailed});const{defaultInstrument:a}=n,u=function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(t);i<n.length;i++)e.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(t,n[i])&&(r[n[i]]=t[n[i]])}return r}(n,[\"defaultInstrument\"]),[s,c]=i.cardExpiry?i.cardExpiry.split(\"/\"):[];try{yield this._storedCardRequestSender.submitPaymentInstrument(r,{billingAddress:u,instrument:{type:\"card\",cardholderName:i.cardName||\"\",number:i.cardNumber?i.cardNumber.replace(/ /g,\"\"):\"\",expiryMonth:Number(s.trim()),expiryYear:Number(`20${c.trim()}`),verificationValue:null!==(e=i.cardCode)&&void 0!==e?e:\"\"},defaultInstrument:a}),this._eventPoster.post({type:Nt.StoredCardSucceeded})}catch(t){this._eventPoster.post({type:Nt.StoredCardFailed})}},new((n=void 0)||(n=Promise))(function(t,o){function a(t){try{s(i.next(t))}catch(t){o(t)}}function u(t){try{s(i.throw(t))}catch(t){o(t)}}function s(e){var r;e.done?t(e.value):(r=e.value,r instanceof n?r:new n(function(t){t(r)})).then(a,u)}s((i=i.apply(e,r||[])).next())});var e,r,n,i}}}var zt=r(575),Bt=r(1837),Ht=r(7584),Yt=r.n(Ht);const Gt=Object.prototype.toString,Wt=Error.prototype.toString,Kt=RegExp.prototype.toString,Zt=\"undefined\"!=typeof Symbol?Symbol.prototype.toString:()=>\"\",Jt=/^Symbol\\((.*)\\)(.*)$/;function Xt(t,e=!1){if(null==t||!0===t||!1===t)return\"\"+t;const r=typeof t;if(\"number\"===r)return function(t){return t!=+t?\"NaN\":0===t&&1/t<0?\"-0\":\"\"+t}(t);if(\"string\"===r)return e?`\"${t}\"`:t;if(\"function\"===r)return\"[Function \"+(t.name||\"anonymous\")+\"]\";if(\"symbol\"===r)return Zt.call(t).replace(Jt,\"Symbol($1)\");const n=Gt.call(t).slice(8,-1);return\"Date\"===n?isNaN(t.getTime())?\"\"+t:t.toISOString(t):\"Error\"===n||t instanceof Error?\"[\"+Wt.call(t)+\"]\":\"RegExp\"===n?Kt.call(t):null}function Qt(t,e){let r=Xt(t,e);return null!==r?r:JSON.stringify(t,function(t,r){let n=Xt(this[t],e);return null!==n?n:r},2)}function te(t){return null==t?[]:[].concat(t)}let ee,re,ne,ie=/\\$\\{\\s*(\\w+)\\s*\\}/g;ee=Symbol.toStringTag;class oe{constructor(t,e,r,n){this.name=void 0,this.message=void 0,this.value=void 0,this.path=void 0,this.type=void 0,this.params=void 0,this.errors=void 0,this.inner=void 0,this[ee]=\"Error\",this.name=\"ValidationError\",this.value=e,this.path=r,this.type=n,this.errors=[],this.inner=[],te(t).forEach(t=>{if(ae.isError(t)){this.errors.push(...t.errors);const e=t.inner.length?t.inner:[t];this.inner.push(...e)}else this.errors.push(t)}),this.message=this.errors.length>1?`${this.errors.length} errors occurred`:this.errors[0]}}re=Symbol.hasInstance,ne=Symbol.toStringTag;class ae extends Error{static formatError(t,e){const r=e.label||e.path||\"this\";return e=Object.assign({},e,{path:r,originalPath:e.path}),\"string\"==typeof t?t.replace(ie,(t,r)=>Qt(e[r])):\"function\"==typeof t?t(e):t}static isError(t){return t&&\"ValidationError\"===t.name}constructor(t,e,r,n,i){const o=new oe(t,e,r,n);if(i)return o;super(),this.value=void 0,this.path=void 0,this.type=void 0,this.params=void 0,this.errors=[],this.inner=[],this[ne]=\"Error\",this.name=o.name,this.message=o.message,this.type=o.type,this.value=o.value,this.path=o.path,this.errors=o.errors,this.inner=o.inner,Error.captureStackTrace&&Error.captureStackTrace(this,ae)}static[re](t){return oe[Symbol.hasInstance](t)||super[Symbol.hasInstance](t)}}let ue={default:\"${path} is invalid\",required:\"${path} is a required field\",defined:\"${path} must be defined\",notNull:\"${path} cannot be null\",oneOf:\"${path} must be one of the following values: ${values}\",notOneOf:\"${path} must not be one of the following values: ${values}\",notType:({path:t,type:e,value:r,originalValue:n})=>{const i=null!=n&&n!==r?` (cast from the value \\`${Qt(n,!0)}\\`).`:\".\";return\"mixed\"!==e?`${t} must be a \\`${e}\\` type, but the final value was: \\`${Qt(r,!0)}\\``+i:`${t} must match the configured type. The validated value was: \\`${Qt(r,!0)}\\``+i}},se={length:\"${path} must be exactly ${length} characters\",min:\"${path} must be at least ${min} characters\",max:\"${path} must be at most ${max} characters\",matches:'${path} must match the following: \"${regex}\"',email:\"${path} must be a valid email\",url:\"${path} must be a valid URL\",uuid:\"${path} must be a valid UUID\",datetime:\"${path} must be a valid ISO date-time\",datetime_precision:\"${path} must be a valid ISO date-time with a sub-second precision of exactly ${precision} digits\",datetime_offset:'${path} must be a valid ISO date-time with UTC \"Z\" timezone',trim:\"${path} must be a trimmed string\",lowercase:\"${path} must be a lowercase string\",uppercase:\"${path} must be a upper case string\"},ce={min:\"${path} must be greater than or equal to ${min}\",max:\"${path} must be less than or equal to ${max}\",lessThan:\"${path} must be less than ${less}\",moreThan:\"${path} must be greater than ${more}\",positive:\"${path} must be a positive number\",negative:\"${path} must be a negative number\",integer:\"${path} must be an integer\"},le={min:\"${path} field must be later than ${min}\",max:\"${path} field must be at earlier than ${max}\"},fe={isValue:\"${path} field must be ${value}\"},pe={noUnknown:\"${path} field has unspecified keys: ${unknown}\",exact:\"${path} object contains unknown properties: ${properties}\"},de={min:\"${path} field must have at least ${min} items\",max:\"${path} field must have less than or equal to ${max} items\",length:\"${path} must have ${length} items\"},he={notType:t=>{const{path:e,value:r,spec:n}=t,i=n.types.length;if(Array.isArray(r)){if(r.length<i)return`${e} tuple value has too few items, expected a length of ${i} but got ${r.length} for value: \\`${Qt(r,!0)}\\``;if(r.length>i)return`${e} tuple value has too many items, expected a length of ${i} but got ${r.length} for value: \\`${Qt(r,!0)}\\``}return ae.formatError(ue.notType,t)}};Object.assign(Object.create(null),{mixed:ue,string:se,number:ce,date:le,object:pe,array:de,boolean:fe,tuple:he});const ye=t=>t&&t.__isYupSchema__;class me{static fromOptions(t,e){if(!e.then&&!e.otherwise)throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");let{is:r,then:n,otherwise:i}=e,o=\"function\"==typeof r?r:(...t)=>t.every(t=>t===r);return new me(t,(t,e)=>{var r;let a=o(...t)?n:i;return null!=(r=null==a?void 0:a(e))?r:e})}constructor(t,e){this.fn=void 0,this.refs=t,this.refs=t,this.fn=e}resolve(t,e){let r=this.refs.map(t=>t.getValue(null==e?void 0:e.value,null==e?void 0:e.parent,null==e?void 0:e.context)),n=this.fn(r,t,e);if(void 0===n||n===t)return t;if(!ye(n))throw new TypeError(\"conditions must return a schema object\");return n.resolve(e)}}class ve{constructor(t,e={}){if(this.key=void 0,this.isContext=void 0,this.isValue=void 0,this.isSibling=void 0,this.path=void 0,this.getter=void 0,this.map=void 0,\"string\"!=typeof t)throw new TypeError(\"ref must be a string, got: \"+t);if(this.key=t.trim(),\"\"===t)throw new TypeError(\"ref must be a non-empty string\");this.isContext=\"$\"===this.key[0],this.isValue=\".\"===this.key[0],this.isSibling=!this.isContext&&!this.isValue;let r=this.isContext?\"$\":this.isValue?\".\":\"\";this.path=this.key.slice(r.length),this.getter=this.path&&(0,zt.getter)(this.path,!0),this.map=e.map}getValue(t,e,r){let n=this.isContext?r:this.isValue?t:e;return this.getter&&(n=this.getter(n||{})),this.map&&(n=this.map(n)),n}cast(t,e){return this.getValue(t,null==e?void 0:e.parent,null==e?void 0:e.context)}resolve(){return this}describe(){return{type:\"ref\",key:this.key}}toString(){return`Ref(${this.key})`}static isRef(t){return t&&t.__isYupRef}}ve.prototype.__isYupRef=!0;const ge=t=>null==t;function _e(t){function e({value:e,path:r=\"\",options:n,originalValue:i,schema:o},a,u){const{name:s,test:c,params:l,message:f,skipAbsent:p}=t;let{parent:d,context:h,abortEarly:y=o.spec.abortEarly,disableStackTrace:m=o.spec.disableStackTrace}=n;const v={value:e,parent:d,context:h};function g(t={}){const n=be(Object.assign({value:e,originalValue:i,label:o.spec.label,path:t.path||r,spec:o.spec,disableStackTrace:t.disableStackTrace||m},l,t.params),v),a=new ae(ae.formatError(t.message||f,n),e,n.path,t.type||s,n.disableStackTrace);return a.params=n,a}const _=y?a:u;let b={path:r,parent:d,type:s,from:n.from,createError:g,resolve:t=>we(t,v),options:n,originalValue:i,schema:o};const w=t=>{ae.isError(t)?_(t):t?u(null):_(g())},E=t=>{ae.isError(t)?_(t):a(t)};if(p&&ge(e))return w(!0);let O;try{var S;if(O=c.call(b,e,b),\"function\"==typeof(null==(S=O)?void 0:S.then)){if(n.sync)throw new Error(`Validation test of type: \"${b.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`);return Promise.resolve(O).then(w,E)}}catch(t){return void E(t)}w(O)}return e.OPTIONS=t,e}function be(t,e){if(!t)return t;for(const r of Object.keys(t))t[r]=we(t[r],e);return t}function we(t,e){return ve.isRef(t)?t.getValue(e.value,e.parent,e.context):t}function Ee(t,e,r,n=r){let i,o,a;return e?((0,zt.forEach)(e,(u,s,c)=>{let l=s?u.slice(1,u.length-1):u,f=\"tuple\"===(t=t.resolve({context:n,parent:i,value:r})).type,p=c?parseInt(l,10):0;if(t.innerType||f){if(f&&!c)throw new Error(`Yup.reach cannot implicitly index into a tuple type. the path part \"${a}\" must contain an index to the tuple element, e.g. \"${a}[0]\"`);if(r&&p>=r.length)throw new Error(`Yup.reach cannot resolve an array item at index: ${u}, in the path: ${e}. because there is no value at that index. `);i=r,r=r&&r[p],t=f?t.spec.types[p]:t.innerType}if(!c){if(!t.fields||!t.fields[l])throw new Error(`The schema does not contain the path: ${e}. (failed at: ${a} which is a type: \"${t.type}\")`);i=r,r=r&&r[l],t=t.fields[l]}o=l,a=s?\"[\"+u+\"]\":\".\"+u}),{schema:t,parent:i,parentPath:o}):{parent:i,parentPath:e,schema:t}}class Oe extends Set{describe(){const t=[];for(const e of this.values())t.push(ve.isRef(e)?e.describe():e);return t}resolveAll(t){let e=[];for(const r of this.values())e.push(t(r));return e}clone(){return new Oe(this.values())}merge(t,e){const r=this.clone();return t.forEach(t=>r.add(t)),e.forEach(t=>r.delete(t)),r}}function Se(t,e=new Map){if(ye(t)||!t||\"object\"!=typeof t)return t;if(e.has(t))return e.get(t);let r;if(t instanceof Date)r=new Date(t.getTime()),e.set(t,r);else if(t instanceof RegExp)r=new RegExp(t),e.set(t,r);else if(Array.isArray(t)){r=new Array(t.length),e.set(t,r);for(let n=0;n<t.length;n++)r[n]=Se(t[n],e)}else if(t instanceof Map){r=new Map,e.set(t,r);for(const[n,i]of t.entries())r.set(n,Se(i,e))}else if(t instanceof Set){r=new Set,e.set(t,r);for(const n of t)r.add(Se(n,e))}else{if(!(t instanceof Object))throw Error(`Unable to clone ${t}`);r={},e.set(t,r);for(const[n,i]of Object.entries(t))r[n]=Se(i,e)}return r}function Te(t){if(null==t||!t.length)return;const e=[];let r=\"\",n=!1,i=!1;for(let o=0;o<t.length;o++){const a=t[o];\"[\"!==a||i?\"]\"!==a||i?'\"'!==a?\".\"!==a||n||i?r+=a:r&&(e.push(r),r=\"\"):i=!i:(r&&(/^\\d+$/.test(r)?e.push(r):e.push(r.replace(/^\"|\"$/g,\"\")),r=\"\"),n=!1):(r&&(e.push(...r.split(\".\").filter(Boolean)),r=\"\"),n=!0)}return r&&e.push(...r.split(\".\").filter(Boolean)),e}function Ce(t,e){var r;if((null==(r=t.inner)||!r.length)&&t.errors.length)return function(t,e){const r=e?`${e}.${t.path}`:t.path;return t.errors.map(t=>({message:t,path:Te(r)}))}(t,e);const n=e?`${e}.${t.path}`:t.path;return t.inner.flatMap(t=>Ce(t,n))}class Ae{constructor(t){this.type=void 0,this.deps=[],this.tests=void 0,this.transforms=void 0,this.conditions=[],this._mutate=void 0,this.internalTests={},this._whitelist=new Oe,this._blacklist=new Oe,this.exclusiveTests=Object.create(null),this._typeCheck=void 0,this.spec=void 0,this.tests=[],this.transforms=[],this.withMutation(()=>{this.typeError(ue.notType)}),this.type=t.type,this._typeCheck=t.check,this.spec=Object.assign({strip:!1,strict:!1,abortEarly:!0,recursive:!0,disableStackTrace:!1,nullable:!1,optional:!0,coerce:!0},null==t?void 0:t.spec),this.withMutation(t=>{t.nonNullable()})}get _type(){return this.type}clone(t){if(this._mutate)return t&&Object.assign(this.spec,t),this;const e=Object.create(Object.getPrototypeOf(this));return e.type=this.type,e._typeCheck=this._typeCheck,e._whitelist=this._whitelist.clone(),e._blacklist=this._blacklist.clone(),e.internalTests=Object.assign({},this.internalTests),e.exclusiveTests=Object.assign({},this.exclusiveTests),e.deps=[...this.deps],e.conditions=[...this.conditions],e.tests=[...this.tests],e.transforms=[...this.transforms],e.spec=Se(Object.assign({},this.spec,t)),e}label(t){let e=this.clone();return e.spec.label=t,e}meta(...t){if(0===t.length)return this.spec.meta;let e=this.clone();return e.spec.meta=Object.assign(e.spec.meta||{},t[0]),e}withMutation(t){let e=this._mutate;this._mutate=!0;let r=t(this);return this._mutate=e,r}concat(t){if(!t||t===this)return this;if(t.type!==this.type&&\"mixed\"!==this.type)throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${t.type}`);let e=this,r=t.clone();const n=Object.assign({},e.spec,r.spec);return r.spec=n,r.internalTests=Object.assign({},e.internalTests,r.internalTests),r._whitelist=e._whitelist.merge(t._whitelist,t._blacklist),r._blacklist=e._blacklist.merge(t._blacklist,t._whitelist),r.tests=e.tests,r.exclusiveTests=e.exclusiveTests,r.withMutation(e=>{t.tests.forEach(t=>{e.test(t.OPTIONS)})}),r.transforms=[...e.transforms,...r.transforms],r}isType(t){return null==t?!(!this.spec.nullable||null!==t)||!(!this.spec.optional||void 0!==t):this._typeCheck(t)}resolve(t){let e=this;if(e.conditions.length){let r=e.conditions;e=e.clone(),e.conditions=[],e=r.reduce((e,r)=>r.resolve(e,t),e),e=e.resolve(t)}return e}resolveOptions(t){var e,r,n,i;return Object.assign({},t,{from:t.from||[],strict:null!=(e=t.strict)?e:this.spec.strict,abortEarly:null!=(r=t.abortEarly)?r:this.spec.abortEarly,recursive:null!=(n=t.recursive)?n:this.spec.recursive,disableStackTrace:null!=(i=t.disableStackTrace)?i:this.spec.disableStackTrace})}cast(t,e={}){let r=this.resolve(Object.assign({},e,{value:t})),n=\"ignore-optionality\"===e.assert,i=r._cast(t,e);if(!1!==e.assert&&!r.isType(i)){if(n&&ge(i))return i;let o=Qt(t),a=Qt(i);throw new TypeError(`The value of ${e.path||\"field\"} could not be cast to a value that satisfies the schema type: \"${r.type}\". \\n\\nattempted value: ${o} \\n`+(a!==o?`result of cast: ${a}`:\"\"))}return i}_cast(t,e){let r=void 0===t?t:this.transforms.reduce((r,n)=>n.call(this,r,t,this,e),t);return void 0===r&&(r=this.getDefault(e)),r}_validate(t,e={},r,n){let{path:i,originalValue:o=t,strict:a=this.spec.strict}=e,u=t;a||(u=this._cast(u,Object.assign({assert:!1},e)));let s=[];for(let t of Object.values(this.internalTests))t&&s.push(t);this.runTests({path:i,value:u,originalValue:o,options:e,tests:s},r,t=>{if(t.length)return n(t,u);this.runTests({path:i,value:u,originalValue:o,options:e,tests:this.tests},r,n)})}runTests(t,e,r){let n=!1,{tests:i,value:o,originalValue:a,path:u,options:s}=t,c=t=>{n||(n=!0,e(t,o))},l=t=>{n||(n=!0,r(t,o))},f=i.length,p=[];if(!f)return l([]);let d={value:o,originalValue:a,path:u,options:s,schema:this};for(let t=0;t<i.length;t++)(0,i[t])(d,c,function(t){t&&(Array.isArray(t)?p.push(...t):p.push(t)),--f<=0&&l(p)})}asNestedTest({key:t,index:e,parent:r,parentPath:n,originalParent:i,options:o}){const a=null!=t?t:e;if(null==a)throw TypeError(\"Must include `key` or `index` for nested validations\");const u=\"number\"==typeof a;let s=r[a];const c=Object.assign({},o,{strict:!0,parent:r,value:s,originalValue:i[a],key:void 0,[u?\"index\":\"key\"]:a,path:u||a.includes(\".\")?`${n||\"\"}[${u?a:`\"${a}\"`}]`:(n?`${n}.`:\"\")+t});return(t,e,r)=>this.resolve(c)._validate(s,c,e,r)}validate(t,e){var r;let n=this.resolve(Object.assign({},e,{value:t})),i=null!=(r=null==e?void 0:e.disableStackTrace)?r:n.spec.disableStackTrace;return new Promise((r,o)=>n._validate(t,e,(t,e)=>{ae.isError(t)&&(t.value=e),o(t)},(t,e)=>{t.length?o(new ae(t,e,void 0,void 0,i)):r(e)}))}validateSync(t,e){var r;let n,i=this.resolve(Object.assign({},e,{value:t})),o=null!=(r=null==e?void 0:e.disableStackTrace)?r:i.spec.disableStackTrace;return i._validate(t,Object.assign({},e,{sync:!0}),(t,e)=>{throw ae.isError(t)&&(t.value=e),t},(e,r)=>{if(e.length)throw new ae(e,t,void 0,void 0,o);n=r}),n}isValid(t,e){return this.validate(t,e).then(()=>!0,t=>{if(ae.isError(t))return!1;throw t})}isValidSync(t,e){try{return this.validateSync(t,e),!0}catch(t){if(ae.isError(t))return!1;throw t}}_getDefault(t){let e=this.spec.default;return null==e?e:\"function\"==typeof e?e.call(this,t):Se(e)}getDefault(t){return this.resolve(t||{})._getDefault(t)}default(t){return 0===arguments.length?this._getDefault():this.clone({default:t})}strict(t=!0){return this.clone({strict:t})}nullability(t,e){const r=this.clone({nullable:t});return r.internalTests.nullable=_e({message:e,name:\"nullable\",test(t){return null!==t||this.schema.spec.nullable}}),r}optionality(t,e){const r=this.clone({optional:t});return r.internalTests.optionality=_e({message:e,name:\"optionality\",test(t){return void 0!==t||this.schema.spec.optional}}),r}optional(){return this.optionality(!0)}defined(t=ue.defined){return this.optionality(!1,t)}nullable(){return this.nullability(!0)}nonNullable(t=ue.notNull){return this.nullability(!1,t)}required(t=ue.required){return this.clone().withMutation(e=>e.nonNullable(t).defined(t))}notRequired(){return this.clone().withMutation(t=>t.nullable().optional())}transform(t){let e=this.clone();return e.transforms.push(t),e}test(...t){let e;if(e=1===t.length?\"function\"==typeof t[0]?{test:t[0]}:t[0]:2===t.length?{name:t[0],test:t[1]}:{name:t[0],message:t[1],test:t[2]},void 0===e.message&&(e.message=ue.default),\"function\"!=typeof e.test)throw new TypeError(\"`test` is a required parameters\");let r=this.clone(),n=_e(e),i=e.exclusive||e.name&&!0===r.exclusiveTests[e.name];if(e.exclusive&&!e.name)throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");return e.name&&(r.exclusiveTests[e.name]=!!e.exclusive),r.tests=r.tests.filter(t=>{if(t.OPTIONS.name===e.name){if(i)return!1;if(t.OPTIONS.test===n.OPTIONS.test)return!1}return!0}),r.tests.push(n),r}when(t,e){Array.isArray(t)||\"string\"==typeof t||(e=t,t=\".\");let r=this.clone(),n=te(t).map(t=>new ve(t));return n.forEach(t=>{t.isSibling&&r.deps.push(t.key)}),r.conditions.push(\"function\"==typeof e?new me(n,e):me.fromOptions(n,e)),r}typeError(t){let e=this.clone();return e.internalTests.typeError=_e({message:t,name:\"typeError\",skipAbsent:!0,test(t){return!!this.schema._typeCheck(t)||this.createError({params:{type:this.schema.type}})}}),e}oneOf(t,e=ue.oneOf){let r=this.clone();return t.forEach(t=>{r._whitelist.add(t),r._blacklist.delete(t)}),r.internalTests.whiteList=_e({message:e,name:\"oneOf\",skipAbsent:!0,test(t){let e=this.schema._whitelist,r=e.resolveAll(this.resolve);return!!r.includes(t)||this.createError({params:{values:Array.from(e).join(\", \"),resolved:r}})}}),r}notOneOf(t,e=ue.notOneOf){let r=this.clone();return t.forEach(t=>{r._blacklist.add(t),r._whitelist.delete(t)}),r.internalTests.blacklist=_e({message:e,name:\"notOneOf\",test(t){let e=this.schema._blacklist,r=e.resolveAll(this.resolve);return!r.includes(t)||this.createError({params:{values:Array.from(e).join(\", \"),resolved:r}})}}),r}strip(t=!0){let e=this.clone();return e.spec.strip=t,e}describe(t){const e=(t?this.resolve(t):this).clone(),{label:r,meta:n,optional:i,nullable:o}=e.spec;return{meta:n,label:r,optional:i,nullable:o,default:e.getDefault(t),type:e.type,oneOf:e._whitelist.describe(),notOneOf:e._blacklist.describe(),tests:e.tests.filter((t,e,r)=>r.findIndex(e=>e.OPTIONS.name===t.OPTIONS.name)===e).map(e=>{const r=e.OPTIONS.params&&t?be(Object.assign({},e.OPTIONS.params),t):e.OPTIONS.params;return{name:e.OPTIONS.name,params:r}})}}get\"~standard\"(){const t=this;return{version:1,vendor:\"yup\",async validate(e){try{return{value:await t.validate(e,{abortEarly:!1})}}catch(t){if(t instanceof ae)return{issues:Ce(t)};throw t}}}}}Ae.prototype.__isYupSchema__=!0;for(const t of[\"validate\",\"validateSync\"])Ae.prototype[`${t}At`]=function(e,r,n={}){const{parent:i,parentPath:o,schema:a}=Ee(this,e,r,n.context);return a[t](i&&i[o],Object.assign({},n,{parent:i,path:e}))};for(const t of[\"equals\",\"is\"])Ae.prototype[t]=Ae.prototype.oneOf;for(const t of[\"not\",\"nope\"])Ae.prototype[t]=Ae.prototype.notOneOf;const Pe=/^(\\d{4}|[+-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,.](\\d{1,}))?)?(?:(Z)|([+-])(\\d{2})(?::?(\\d{2}))?)?)?$/;function xe(t){var e,r;const n=Pe.exec(t);return n?{year:je(n[1]),month:je(n[2],1)-1,day:je(n[3],1),hour:je(n[4]),minute:je(n[5]),second:je(n[6]),millisecond:n[7]?je(n[7].substring(0,3)):0,precision:null!=(e=null==(r=n[7])?void 0:r.length)?e:void 0,z:n[8]||void 0,plusMinus:n[9]||void 0,hourOffset:je(n[10]),minuteOffset:je(n[11])}:null}function je(t,e=0){return Number(t)||e}let Ie=/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,ke=/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,Me=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,Re=new RegExp(\"^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)$\"),Ne=t=>ge(t)||t===t.trim(),De={}.toString();function Fe(){return new Le}class Le extends Ae{constructor(){super({type:\"string\",check:t=>(t instanceof String&&(t=t.valueOf()),\"string\"==typeof t)}),this.withMutation(()=>{this.transform((t,e)=>{if(!this.spec.coerce||this.isType(t))return t;if(Array.isArray(t))return t;const r=null!=t&&t.toString?t.toString():t;return r===De?t:r})})}required(t){return super.required(t).withMutation(e=>e.test({message:t||ue.required,name:\"required\",skipAbsent:!0,test:t=>!!t.length}))}notRequired(){return super.notRequired().withMutation(t=>(t.tests=t.tests.filter(t=>\"required\"!==t.OPTIONS.name),t))}length(t,e=se.length){return this.test({message:e,name:\"length\",exclusive:!0,params:{length:t},skipAbsent:!0,test(e){return e.length===this.resolve(t)}})}min(t,e=se.min){return this.test({message:e,name:\"min\",exclusive:!0,params:{min:t},skipAbsent:!0,test(e){return e.length>=this.resolve(t)}})}max(t,e=se.max){return this.test({name:\"max\",exclusive:!0,message:e,params:{max:t},skipAbsent:!0,test(e){return e.length<=this.resolve(t)}})}matches(t,e){let r,n,i=!1;return e&&(\"object\"==typeof e?({excludeEmptyString:i=!1,message:r,name:n}=e):r=e),this.test({name:n||\"matches\",message:r||se.matches,params:{regex:t},skipAbsent:!0,test:e=>\"\"===e&&i||-1!==e.search(t)})}email(t=se.email){return this.matches(Ie,{name:\"email\",message:t,excludeEmptyString:!0})}url(t=se.url){return this.matches(ke,{name:\"url\",message:t,excludeEmptyString:!0})}uuid(t=se.uuid){return this.matches(Me,{name:\"uuid\",message:t,excludeEmptyString:!1})}datetime(t){let e,r,n=\"\";return t&&(\"object\"==typeof t?({message:n=\"\",allowOffset:e=!1,precision:r}=t):n=t),this.matches(Re,{name:\"datetime\",message:n||se.datetime,excludeEmptyString:!0}).test({name:\"datetime_offset\",message:n||se.datetime_offset,params:{allowOffset:e},skipAbsent:!0,test:t=>{if(!t||e)return!0;const r=xe(t);return!!r&&!!r.z}}).test({name:\"datetime_precision\",message:n||se.datetime_precision,params:{precision:r},skipAbsent:!0,test:t=>{if(!t||null==r)return!0;const e=xe(t);return!!e&&e.precision===r}})}ensure(){return this.default(\"\").transform(t=>null===t?\"\":t)}trim(t=se.trim){return this.transform(t=>null!=t?t.trim():t).test({message:t,name:\"trim\",test:Ne})}lowercase(t=se.lowercase){return this.transform(t=>ge(t)?t:t.toLowerCase()).test({message:t,name:\"string_case\",exclusive:!0,skipAbsent:!0,test:t=>ge(t)||t===t.toLowerCase()})}uppercase(t=se.uppercase){return this.transform(t=>ge(t)?t:t.toUpperCase()).test({message:t,name:\"string_case\",exclusive:!0,skipAbsent:!0,test:t=>ge(t)||t===t.toUpperCase()})}}Fe.prototype=Le.prototype;let Ue=new Date(\"\");function $e(){return new Ve}class Ve extends Ae{constructor(){super({type:\"date\",check(t){return e=t,\"[object Date]\"===Object.prototype.toString.call(e)&&!isNaN(t.getTime());var e}}),this.withMutation(()=>{this.transform((t,e)=>!this.spec.coerce||this.isType(t)||null===t?t:(t=function(t){const e=xe(t);if(!e)return Date.parse?Date.parse(t):Number.NaN;if(void 0===e.z&&void 0===e.plusMinus)return new Date(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond).valueOf();let r=0;return\"Z\"!==e.z&&void 0!==e.plusMinus&&(r=60*e.hourOffset+e.minuteOffset,\"+\"===e.plusMinus&&(r=0-r)),Date.UTC(e.year,e.month,e.day,e.hour,e.minute+r,e.second,e.millisecond)}(t),isNaN(t)?Ve.INVALID_DATE:new Date(t)))})}prepareParam(t,e){let r;if(ve.isRef(t))r=t;else{let n=this.cast(t);if(!this._typeCheck(n))throw new TypeError(`\\`${e}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);r=n}return r}min(t,e=le.min){let r=this.prepareParam(t,\"min\");return this.test({message:e,name:\"min\",exclusive:!0,params:{min:t},skipAbsent:!0,test(t){return t>=this.resolve(r)}})}max(t,e=le.max){let r=this.prepareParam(t,\"max\");return this.test({message:e,name:\"max\",exclusive:!0,params:{max:t},skipAbsent:!0,test(t){return t<=this.resolve(r)}})}}function qe(t,e){let r=1/0;return t.some((t,n)=>{var i;if(null!=(i=e.path)&&i.includes(t))return r=n,!0}),r}function ze(t){return(e,r)=>qe(t,e)-qe(t,r)}Ve.INVALID_DATE=Ue,$e.prototype=Ve.prototype,$e.INVALID_DATE=Ue;const Be=(t,e,r)=>{if(\"string\"!=typeof t)return t;let n=t;try{n=JSON.parse(t)}catch(t){}return r.isType(n)?n:t};function He(t){if(\"fields\"in t){const e={};for(const[r,n]of Object.entries(t.fields))e[r]=He(n);return t.setFields(e)}if(\"array\"===t.type){const e=t.optional();return e.innerType&&(e.innerType=He(e.innerType)),e}return\"tuple\"===t.type?t.optional().clone({types:t.spec.types.map(He)}):\"optional\"in t?t.optional():t}let Ye=t=>\"[object Object]\"===Object.prototype.toString.call(t);function Ge(t,e){let r=Object.keys(t.fields);return Object.keys(e).filter(t=>-1===r.indexOf(t))}const We=ze([]);function Ke(t){return new Ze(t)}class Ze extends Ae{constructor(t){super({type:\"object\",check:t=>Ye(t)||\"function\"==typeof t}),this.fields=Object.create(null),this._sortErrors=We,this._nodes=[],this._excludedEdges=[],this.withMutation(()=>{t&&this.shape(t)})}_cast(t,e={}){var r;let n=super._cast(t,e);if(void 0===n)return this.getDefault(e);if(!this._typeCheck(n))return n;let i=this.fields,o=null!=(r=e.stripUnknown)?r:this.spec.noUnknown,a=[].concat(this._nodes,Object.keys(n).filter(t=>!this._nodes.includes(t))),u={},s=Object.assign({},e,{parent:u,__validating:e.__validating||!1}),c=!1;for(const t of a){let r=i[t],a=t in n,l=n[t];if(r){let i;s.path=(e.path?`${e.path}.`:\"\")+t,r=r.resolve({value:l,context:e.context,parent:u});let o=r instanceof Ae?r.spec:void 0,a=null==o?void 0:o.strict;if(null!=o&&o.strip){c=c||t in n;continue}i=e.__validating&&a?l:r.cast(l,s),void 0!==i&&(u[t]=i)}else a&&!o&&(u[t]=l);a===t in u&&u[t]===l||(c=!0)}return c?u:n}_validate(t,e={},r,n){let{from:i=[],originalValue:o=t,recursive:a=this.spec.recursive}=e;e.from=[{schema:this,value:o},...i],e.__validating=!0,e.originalValue=o,super._validate(t,e,r,(t,i)=>{if(!a||!Ye(i))return void n(t,i);o=o||i;let u=[];for(let t of this._nodes){let r=this.fields[t];r&&!ve.isRef(r)&&u.push(r.asNestedTest({options:e,key:t,parent:i,parentPath:e.path,originalParent:o}))}this.runTests({tests:u,value:i,originalValue:o,options:e},r,e=>{n(e.sort(this._sortErrors).concat(t),i)})})}clone(t){const e=super.clone(t);return e.fields=Object.assign({},this.fields),e._nodes=this._nodes,e._excludedEdges=this._excludedEdges,e._sortErrors=this._sortErrors,e}concat(t){let e=super.concat(t),r=e.fields;for(let[t,e]of Object.entries(this.fields)){const n=r[t];r[t]=void 0===n?e:n}return e.withMutation(e=>e.setFields(r,[...this._excludedEdges,...t._excludedEdges]))}_getDefault(t){if(\"default\"in this.spec)return super._getDefault(t);if(!this._nodes.length)return;let e={};return this._nodes.forEach(r=>{var n;const i=this.fields[r];let o=t;null!=(n=o)&&n.value&&(o=Object.assign({},o,{parent:o.value,value:o.value[r]})),e[r]=i&&\"getDefault\"in i?i.getDefault(o):void 0}),e}setFields(t,e){let r=this.clone();return r.fields=t,r._nodes=function(t,e=[]){let r=[],n=new Set,i=new Set(e.map(([t,e])=>`${t}-${e}`));function o(t,e){let o=(0,zt.split)(t)[0];n.add(o),i.has(`${e}-${o}`)||r.push([e,o])}for(const e of Object.keys(t)){let r=t[e];n.add(e),ve.isRef(r)&&r.isSibling?o(r.path,e):ye(r)&&\"deps\"in r&&r.deps.forEach(t=>o(t,e))}return Yt().array(Array.from(n),r).reverse()}(t,e),r._sortErrors=ze(Object.keys(t)),e&&(r._excludedEdges=e),r}shape(t,e=[]){return this.clone().withMutation(r=>{let n=r._excludedEdges;return e.length&&(Array.isArray(e[0])||(e=[e]),n=[...r._excludedEdges,...e]),r.setFields(Object.assign(r.fields,t),n)})}partial(){const t={};for(const[e,r]of Object.entries(this.fields))t[e]=\"optional\"in r&&r.optional instanceof Function?r.optional():r;return this.setFields(t)}deepPartial(){return He(this)}pick(t){const e={};for(const r of t)this.fields[r]&&(e[r]=this.fields[r]);return this.setFields(e,this._excludedEdges.filter(([e,r])=>t.includes(e)&&t.includes(r)))}omit(t){const e=[];for(const r of Object.keys(this.fields))t.includes(r)||e.push(r);return this.pick(e)}from(t,e,r){let n=(0,zt.getter)(t,!0);return this.transform(i=>{if(!i)return i;let o=i;return((t,e)=>{const r=[...(0,zt.normalizePath)(e)];if(1===r.length)return r[0]in t;let n=r.pop(),i=(0,zt.getter)((0,zt.join)(r),!0)(t);return!(!i||!(n in i))})(i,t)&&(o=Object.assign({},i),r||delete o[t],o[e]=n(i)),o})}json(){return this.transform(Be)}exact(t){return this.test({name:\"exact\",exclusive:!0,message:t||pe.exact,test(t){if(null==t)return!0;const e=Ge(this.schema,t);return 0===e.length||this.createError({params:{properties:e.join(\", \")}})}})}stripUnknown(){return this.clone({noUnknown:!0})}noUnknown(t=!0,e=pe.noUnknown){\"boolean\"!=typeof t&&(e=t,t=!0);let r=this.test({name:\"noUnknown\",exclusive:!0,message:e,test(e){if(null==e)return!0;const r=Ge(this.schema,e);return!t||0===r.length||this.createError({params:{unknown:r.join(\", \")}})}});return r.spec.noUnknown=t,r}unknown(t=!0,e=pe.noUnknown){return this.noUnknown(!t,e)}transformKeys(t){return this.transform(e=>{if(!e)return e;const r={};for(const n of Object.keys(e))r[t(n)]=e[n];return r})}camelCase(){return this.transformKeys(Bt.camelCase)}snakeCase(){return this.transformKeys(Bt.snakeCase)}constantCase(){return this.transformKeys(t=>(0,Bt.snakeCase)(t).toUpperCase())}describe(t){const e=(t?this.resolve(t):this).clone(),r=super.describe(t);r.fields={};for(const[i,o]of Object.entries(e.fields)){var n;let e=t;null!=(n=e)&&n.value&&(e=Object.assign({},e,{parent:e.value,value:e.value[i]})),r.fields[i]=o.describe(e)}return r}}Ke.prototype=Ze.prototype;class Je{constructor(t){this._cardInstrument=t,this._completeSchema={cardCode:this._getCardCodeSchema(),cardCodeVerification:this._getCardCodeVerificationSchema(),cardExpiry:this._getCardExpirySchema(),cardName:this._getCardNameSchema(),cardNumber:this._getCardNumberSchema(),cardNumberVerification:this._getCardNumberVerificationSchema()},this._configureCardValidator()}validate(t){return e=this,r=void 0,i=function*(){const e={},r={errors:{},isValid:!0};let n;for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=this._completeSchema[n],r.errors[n]=[]);try{return yield Ke(e).validate(t,{abortEarly:!1}),r}catch(t){if(this._isValidationErrorType(t))throw t;return{errors:Object.keys(r.errors).reduce((e,r)=>Object.assign(Object.assign({},e),{[r]:t.inner.filter(t=>t.path===r).map(t=>({fieldType:t.path,message:t.errors.join(\" \"),type:t.type}))}),{}),isValid:!1}}},new((n=void 0)||(n=Promise))(function(t,o){function a(t){try{s(i.next(t))}catch(t){o(t)}}function u(t){try{s(i.throw(t))}catch(t){o(t)}}function s(e){var r;e.done?t(e.value):(r=e.value,r instanceof n?r:new n(function(t){t(r)})).then(a,u)}s((i=i.apply(e,r||[])).next())});var e,r,n,i}_configureCardValidator(){const t=_t.creditCardType.getTypeInfo(\"discover\"),e=_t.creditCardType.getTypeInfo(\"jcb\"),r=_t.creditCardType.getTypeInfo(\"visa\");_t.creditCardType.updateCard(\"visa\",{lengths:[13,...r.lengths||[]]}),_t.creditCardType.updateCard(\"discover\",{patterns:[...t.patterns||[],[810,817]]}),_t.creditCardType.addCard({niceType:\"Mada\",type:\"mada\",patterns:[400861,401757,407197,407395,409201,410685,412565,417633,419593,422817,422818,422819,428331,428671,428672,428673,431361,432328,434107,439954,440533,440647,440795,445564,446393,446404,446672,455036,455708,457865,458456,462220,468540,468541,468542,468543,483010,483011,483012,484783,486094,486095,486096,489317,489318,489319,493428,504300,506968,508160,513213,520058,521076,524130,524514,529415,529741,530060,530906,531095,531196,532013,535825,535989,536023,537767,539931,543085,543357,549760,554180,557606,558848,585265,588845,588846,588847,588848,588849,588850,588851,588982,588983,589005,589206,604906,605141,636120,968201,968202,968203,968204,968205,968206,968207,968208,968209,968210,968211],gaps:[4,8,12],lengths:[16,18,19],code:{name:\"CVV\",size:3}}),_t.creditCardType.updateCard(\"jcb\",{patterns:[...e.patterns||[],3088,3337,3338]})}_getCardCodeSchema(){return Fe().required(\"CVV is required\").test({message:\"CVV must be valid\",name:\"invalid_card_code\",test(t){const{card:e}=(0,_t.number)(this.parent.cardNumber||\"\");return(0,_t.cvv)(t,e&&e.code?e.code.size:void 0).isValid}})}_getCardCodeVerificationSchema(){return Fe().required(\"CVV is required\").test({message:\"CVV must be valid\",name:\"invalid_card_code\",test:(t=\"\")=>{const e=this._cardInstrument&&this._mapFromInstrumentCardType(this._cardInstrument.brand),r=e&&_t.creditCardType.getTypeInfo(e);return(0,_t.cvv)(t,r&&r.code?r.code.size:void 0).isValid}})}_getCardExpirySchema(){return Fe().required(\"Expiration date is required\").test({message:\"Expiration date must be a valid future date in MM / YY format\",name:\"invalid_card_expiry\",test:t=>(0,_t.expirationDate)(t).isValid})}_getCardNameSchema(){return Fe().max(200).required(\"Full name is required\").test({message:\"Credit card name must be valid\",name:\"invalid_card_name\",test:t=>{const e=t.replace(/\\s/g,\"\").match(/[0-9]+/g);if(!(null==e?void 0:e.length))return!0;for(const t of e)if((0,_t.number)(t).isValid)return!1;return!0}})}_getCardNumberSchema(){return Fe().required(\"Credit card number is required\").test({message:\"Credit card number must be valid\",name:\"invalid_card_number\",test:t=>(0,_t.number)(t).isValid})}_getCardNumberVerificationSchema(){return Fe().required(\"Credit card number is required\").test({message:\"Credit card number must be valid\",name:\"invalid_card_number\",test:(t=\"\")=>(0,_t.number)(t).isValid}).test({message:\"The card number entered does not match the card stored in your account\",name:\"mismatched_card_number\",test:(t=\"\")=>!!this._cardInstrument&&t.slice(-this._cardInstrument.last4.length)===this._cardInstrument.last4})}_mapFromInstrumentCardType(t){switch(t){case\"amex\":case\"american_express\":return\"american-express\";case\"diners\":return\"diners-club\";default:return t}}_isValidationErrorType(t){return\"name\"in t&&\"ValidationError\"!==t.name}}class Xe{constructor(t){this._parentOrigin=t}create(t,e,r={},n=[],i=\"\",o=function(t){switch(t){case It.CardCode:case It.CardCodeVerification:return\"CVC\";case It.CardExpiry:return\"Expiration\";case It.CardName:return\"Name on card\";case It.CardNumber:case It.CardNumberVerification:return\"Credit card number\"}}(e),a){const u=kt(e);return e===It.CardNumber?this._createNumberInput(e,t,r,n,i,o,u):e===It.CardNumberVerification?this._createNumberInput(e,t,r,n,i,o,u,a):e===It.CardExpiry?this._createExpiryInput(t,r,n,i,o,u):e===It.CardCodeVerification?this._createInput(e,t,r,n,i,o,u,a):this._createInput(e,t,r,n,i,o,u)}normalizeParentOrigin(t){this._parentOrigin!==t&&(this._parentOrigin!==a(o(t)).origin&&t!==a(o(this._parentOrigin)).origin||(this._parentOrigin=t))}getParentOrigin(){return this._parentOrigin}_createExpiryInput(t,e,r,n,i=\"\",o=\"\"){return new Ft(t,n,i,o,e,r,new s(this._parentOrigin),new rt(this._parentOrigin,window.parent),new Ut(window.parent),new Je,this._createPaymentHandler(),this._createStoredCardHandler(),new gt)}_createNumberInput(t,e,r,n,i,o=\"\",a=\"\",u){return new Lt(t,e,i,o,a,r,n,new s(this._parentOrigin),new rt(this._parentOrigin,window.parent),new Ut(window.parent),new Je(u),this._createPaymentHandler(u),this._createStoredCardHandler(u),new Mt(e,[It.CardCode,It.CardExpiry,It.CardName],new Ut(window.parent)),new bt)}_createInput(t,e,r,n,i,o=\"\",a=\"\",u){return new Dt(t,e,i,o,a,r,n,new s(this._parentOrigin),new rt(this._parentOrigin,window.parent),new Ut(window.parent),new Je(u),this._createPaymentHandler(u),this._createStoredCardHandler(u))}_createPaymentHandler(t){return new Vt(new Ut(window.parent),new Je(t),f(),new rt(this._parentOrigin,window.parent),new nt((0,p.U)()),new Pt)}_createStoredCardHandler(t){return new qt(new Ut(window.parent),new Je(t),new rt(this._parentOrigin,window.parent),new jt(new S(new _,new v,d,void 0)))}}class Qe extends e{constructor(t){super(t||\"Unable to proceed due to invalid configuration provided for the hosted payment form.\"),this.name=\"InvalidHostedFormConfigError\",this.type=\"invalid_hosted_form_config\"}}class tr{constructor(t,e,r){this._factory=t,this._storage=e,this._eventListener=r}initialize(t,e){e&&this._storage.setNonce(e);const r=this._createFormContainer(t);return this._resetPageStyles(t),this._eventListener.listen(),G(this._eventListener,Rt.AttachRequested).pipe(B(({payload:t})=>{const{accessibilityLabel:e,cardInstrument:n,fontUrls:i,placeholder:o,styles:a,origin:u,type:s}=t;u&&this._factory.normalizeParentOrigin(u);const c=this._factory.create(r,s,a,i,o,e,n);return c.attach(),c}),Q(1)).toPromise()}_resetPageStyles(t){[document.querySelector(\"html\"),document.querySelector(\"body\"),document.getElementById(t)].forEach(t=>{t&&(t.style.height=\"100%\",t.style.width=\"100%\",t.style.overflow=\"hidden\",t.style.padding=\"0\",t.style.margin=\"0\")})}_createFormContainer(t){const e=document.getElementById(t);if(!e)throw new Qe(\"Unable to proceed because the provided container ID is not valid.\");const r=document.createElement(\"form\"),n=document.createElement(\"button\");return r.noValidate=!0,r.style.height=\"100%\",r.style.width=\"100%\",n.style.display=\"none\",e.appendChild(r),r.appendChild(n),r}}function er(t){const{containerId:e,nonce:r,parentOrigin:n}=t;return new tr(new Xe(n),f(),new s(n)).initialize(e,r)}const rr=new rt(\"*\",window.parent);function nr(t){rr.post({type:Nt.AttachFailed,payload:{error:t}})}})(),module.exports=n})();\n//# sourceMappingURL=hosted-form.js.map"
  },
  {
    "path": "dist/cjs/hosted-form.js.LICENSE.txt",
    "content": "/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n"
  },
  {
    "path": "dist/cjs/integrations/adyen.js",
    "content": "(()=>{var t={4325(t,e,n){\"use strict\";n.d(e,{g:()=>i});var r=n(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(r.stringify(e))},t}()},321(t,e,n){\"use strict\";n.d(e,{A:()=>u});var r=n(168),i=n(1675),o=n(5861),a=n(4670);function u(t){return new a.A(new o.A,new i.A,r,t)}},6889(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(2024);function i(t){return new r.A(t)}},4043(t,e,n){\"use strict\";n.r(e),n.d(e,{RequestSender:()=>o.A,Timeout:()=>a.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),a=n(2024)},4843(t,e,n){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}n.d(e,{A:()=>r})},1675(t,e,n){\"use strict\";n.d(e,{A:()=>u});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,a=/application\\/x-www-form-urlencoded/;const u=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(e))return JSON.stringify(t.body);if(a.test(e))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,\"Content-Type\");return t&&o.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var n,i=e.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}()},5861(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||\"GET\",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),\"boolean\"==typeof n.credentials&&(t.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(n){t.setRequestHeader(n,e[n])})},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(r.stringify(e,{encode:n})):t},t}()},4670(t,e,n){\"use strict\";n.d(e,{A:()=>s});var r=n(1635),i=n(35),o=n.n(i),a=n(4325),u=n(4843),c=n(2024);const s=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new a.g}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(e,i){var a=function(){var a=n._payloadTransformer.toResponse(o);a.status>=200&&a.status<300?(n._cacheRequest(t,r,a),e(a)):i(a)};o.onload=a,o.onerror=a,o.onabort=a,o.ontimeout=a,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,u.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(n.headers[\"X-XSRF-TOKEN\"]=r),e&&e.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,e,n){\"use strict\";n.d(e,{A:()=>r});const r=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,e,n){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var n=t[e];return\"string\"==typeof n?\"\".concat(e,\"=\").concat(encodeURIComponent(n)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(e,{A:()=>r})},5889(t,e,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),a=n(3814);function u(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}function s(t,e){return e.decode?i(t):t}function f(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?f(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function l(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function p(t){const e=(t=l(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function d(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function h(t,e){u((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,n,r)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case\"bracket\":return(t,n,r)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"comma\":case\"separator\":return(e,n,r)=>{const i=\"string\"==typeof n&&n.includes(t.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&s(n,t).includes(t.arrayFormatSeparator);n=o?s(n,t):n;const a=i||o?n.split(t.arrayFormatSeparator).map(e=>s(e,t)):null===n?n:s(n,t);r[e]=a};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[].concat(n[t],e):n[t]=e}}}(e),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,a]=o(e.decode?i.replace(/\\+/g,\" \"):i,\"=\");a=void 0===a?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?a:s(a,e),n(s(t,e),a,r)}for(const t of Object.keys(r)){const n=r[t];if(\"object\"==typeof n&&null!==n)for(const t of Object.keys(n))n[t]=d(n[t],e);else r[t]=d(n,e)}return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce((t,e)=>{const n=r[e];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?t[e]=f(n):t[e]=n,t},Object.create(null))}e.extract=p,e.parse=h,e.stringify=(t,e)=>{if(!t)return\"\";u((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const n=n=>e.skipNull&&null==t[n]||e.skipEmptyString&&\"\"===t[n],r=function(t){switch(t.arrayFormat){case\"index\":return e=>(n,r)=>{const i=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[\",i,\"]\"].join(\"\")]:[...n,[c(e,t),\"[\",c(i,t),\"]=\",c(r,t)].join(\"\")]};case\"bracket\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[]\"].join(\"\")]:[...n,[c(e,t),\"[]=\",c(r,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(n,r)=>null==r||0===r.length?n:0===n.length?[[c(e,t),\"=\",c(r,t)].join(\"\")]:[[n,c(r,t)].join(t.arrayFormatSeparator)];default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,c(e,t)]:[...n,[c(e,t),\"=\",c(r,t)].join(\"\")]}}(e),i={};for(const e of Object.keys(t))n(e)||(i[e]=t[e]);const o=Object.keys(i);return!1!==e.sort&&o.sort(e.sort),o.map(n=>{const i=t[n];return void 0===i?\"\":null===i?c(n,e):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):c(n,e)+\"=\"+c(i,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[n,r]=o(t,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:h(p(t),e)},e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:s(r,e)}:{})},e.stringifyUrl=(t,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=l(t.url).split(\"?\")[0]||\"\",i=e.extract(t.url),o=e.parse(i,{sort:!1}),a=Object.assign(o,t.query);let u=e.stringify(a,n);u&&(u=`?${u}`);let s=function(t){let e=\"\";const n=t.indexOf(\"#\");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(s=`#${c(t.fragmentIdentifier,n)}`),`${r}${u}${s}`},e.pick=(t,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:u}=e.parseUrl(t,r);return e.stringifyUrl({url:i,query:a(o,n),fragmentIdentifier:u},r)},e.exclude=(t,n,r)=>{const i=Array.isArray(n)?t=>!n.includes(t):(t,e)=>!n(t,e);return e.pick(t,i,r)}},5477(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement(\"link\");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=n},471(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(t,e,n){\"use strict\";e._U=e.vQ=void 0;n(4886),n(471);var r=n(5895);Object.defineProperty(e,\"vQ\",{enumerable:!0,get:function(){return r.default}});n(7995),n(9722);var i=n(282);Object.defineProperty(e,\"_U\",{enumerable:!0,get:function(){return i.default}})},4886(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var n=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),a=e||{},u=a.async,c=void 0!==u&&u,s=a.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(e){delete n._scripts[t],i(e)},o.async=c,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadScript(t,e)})).then(function(){})},t.prototype.preloadScript=function(t,e){var n=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(e||{}).prefetch,a=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var u=document.createElement(\"link\");u.as=\"script\",u.rel=a,u.href=t,u.onload=function(){r()},u.onerror=function(){delete n._preloadedScripts[t],i()},document.head.appendChild(u)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadScript(t,e)})).then(function(){})},t}();e.default=n},7995(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var n=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),a=e||{},u=a.prepend,c=void 0!==u&&u,s=a.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onerror=function(e){delete n._stylesheets[t],i(e)},o.rel=\"stylesheet\",o.href=t,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadStylesheet(t,e)})).then(function(){})},t.prototype.preloadStylesheet=function(t,e){var n=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(e||{}).prefetch,a=void 0!==o&&o,u=a?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(u)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=a?\"prefetch\":\"preload\",c.href=t,c.onload=function(){r()},c.onerror=function(e){delete n._preloadedStylesheets[t],i(e)},document.head.appendChild(c)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadStylesheet(t,e)})).then(function(){})},t}();e.default=n},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+e+\")+\",\"gi\");function i(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],i(n),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var e=t.match(n)||[],r=1;r<e.length;r++)e=(t=i(e,r).join(\"\")).match(n)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(t);n;){try{e[n[0]]=decodeURIComponent(n[0])}catch(t){var i=o(n[0]);i!==n[0]&&(e[n[0]]=i)}n=r.exec(t)}e[\"%C2\"]=\"�\";for(var a=Object.keys(e),u=0;u<a.length;u++){var c=a[u];t=t.replace(new RegExp(c,\"g\"),e[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,e){for(var n={},r=Object.keys(t),i=Array.isArray(e),o=0;o<r.length;o++){var a=r[o],u=t[a];(i?-1!==e.indexOf(a):e(a,u,t))&&(n[a]=u)}return n}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(e,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var a=JSON.stringify(n);/^[\\{\\[]/.test(a)&&(n=a)}catch(t){}n=r.write?r.write(n,e):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var u=\"\";for(var c in o)o[c]&&(u+=\"; \"+c,!0!==o[c]&&(u+=\"=\"+o[c].split(\";\")[0]));return document.cookie=e+\"=\"+n+u}}function a(t,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],a=0;a<o.length;a++){var u=o[a].split(\"=\"),c=u.slice(1).join(\"=\");n||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var s=e(u[0]);if(c=(r.read||r)(c,s)||e(c),n)try{c=JSON.parse(c)}catch(t){}if(i[s]=c,t===s)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return a(t,!1)},i.getJSON=function(t){return a(t,!0)},i.remove=function(e,n){o(e,\"\",t(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},35(t,e,n){t=n.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",a=\"[object Function]\",u=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,s=/^(?:0|[1-9]\\d*)$/,f={};f[\"[object Float32Array]\"]=f[\"[object Float64Array]\"]=f[\"[object Int8Array]\"]=f[\"[object Int16Array]\"]=f[\"[object Int32Array]\"]=f[\"[object Uint8Array]\"]=f[\"[object Uint8ClampedArray]\"]=f[\"[object Uint16Array]\"]=f[\"[object Uint32Array]\"]=!0,f[o]=f[\"[object Array]\"]=f[\"[object ArrayBuffer]\"]=f[\"[object Boolean]\"]=f[\"[object DataView]\"]=f[\"[object Date]\"]=f[\"[object Error]\"]=f[a]=f[\"[object Map]\"]=f[\"[object Number]\"]=f[u]=f[\"[object RegExp]\"]=f[\"[object Set]\"]=f[\"[object String]\"]=f[\"[object WeakMap]\"]=!1;var l,p,d,h=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,y=\"object\"==typeof self&&self&&self.Object===Object&&self,v=h||y||Function(\"return this\")(),_=e&&!e.nodeType&&e,g=_&&t&&!t.nodeType&&t,m=g&&g.exports===_,b=m&&h.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),j=w&&w.isTypedArray,O=Array.prototype,S=Function.prototype,C=Object.prototype,A=v[\"__core-js_shared__\"],x=S.toString,I=C.hasOwnProperty,k=(l=/[^.]+$/.exec(A&&A.keys&&A.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",P=C.toString,z=x.call(Object),E=RegExp(\"^\"+x.call(I).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),R=m?v.Buffer:void 0,N=v.Symbol,D=v.Uint8Array,F=(R&&R.allocUnsafe,p=Object.getPrototypeOf,d=Object,function(t){return p(d(t))}),T=Object.create,L=C.propertyIsEnumerable,U=O.splice,M=N?N.toStringTag:void 0,q=function(){try{var t=ut(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),B=R?R.isBuffer:void 0,$=Math.max,W=Date.now,V=ut(v,\"Map\"),K=ut(Object,\"create\"),H=function(){function t(){}return function(e){if(!mt(e))return{};if(T)return T(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function J(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function G(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Z(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Q(t){var e=this.__data__=new G(t);this.size=e.size}function X(t,e,n){(void 0!==n&&!pt(t[e],n)||void 0===n&&!(e in t))&&et(t,e,n)}function Y(t,e,n){var r=t[e];I.call(t,e)&&pt(r,n)&&(void 0!==n||e in t)||et(t,e,n)}function tt(t,e){for(var n=t.length;n--;)if(pt(t[n][0],e))return n;return-1}function et(t,e,n){\"__proto__\"==e&&q?q(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}J.prototype.clear=function(){this.__data__=K?K(null):{},this.size=0},J.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},J.prototype.get=function(t){var e=this.__data__;if(K){var n=e[t];return n===r?void 0:n}return I.call(e,t)?e[t]:void 0},J.prototype.has=function(t){var e=this.__data__;return K?void 0!==e[t]:I.call(e,t)},J.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=K&&void 0===e?r:e,this},G.prototype.clear=function(){this.__data__=[],this.size=0},G.prototype.delete=function(t){var e=this.__data__,n=tt(e,t);return!(n<0||(n==e.length-1?e.pop():U.call(e,n,1),--this.size,0))},G.prototype.get=function(t){var e=this.__data__,n=tt(e,t);return n<0?void 0:e[n][1]},G.prototype.has=function(t){return tt(this.__data__,t)>-1},G.prototype.set=function(t,e){var n=this.__data__,r=tt(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Z.prototype.clear=function(){this.size=0,this.__data__={hash:new J,map:new(V||G),string:new J}},Z.prototype.delete=function(t){var e=at(this,t).delete(t);return this.size-=e?1:0,e},Z.prototype.get=function(t){return at(this,t).get(t)},Z.prototype.has=function(t){return at(this,t).has(t)},Z.prototype.set=function(t,e){var n=at(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Q.prototype.clear=function(){this.__data__=new G,this.size=0},Q.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Q.prototype.get=function(t){return this.__data__.get(t)},Q.prototype.has=function(t){return this.__data__.has(t)},Q.prototype.set=function(t,e){var n=this.__data__;if(n instanceof G){var r=n.__data__;if(!V||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Z(r)}return n.set(t,e),this.size=n.size,this};function nt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":M&&M in Object(t)?function(t){var e=I.call(t,M),n=t[M];try{t[M]=void 0;var r=!0}catch(t){}var i=P.call(t);return r&&(e?t[M]=n:delete t[M]),i}(t):function(t){return P.call(t)}(t)}function rt(t){return bt(t)&&nt(t)==o}function it(t,e,n,r,i){t!==e&&function(t,e,n){for(var r=-1,i=Object(t),o=n(t),a=o.length;a--;){var u=o[++r];if(!1===e(i[u],u,i))break}}(e,function(o,a){if(i||(i=new Q),mt(o))!function(t,e,n,r,i,o,a){var c=ft(t,n),s=ft(e,n),f=a.get(s);if(f)X(t,n,f);else{var l,p,d,h,y,v=o?o(c,s,n+\"\",t,e,a):void 0,_=void 0===v;if(_){var g=ht(s),m=!g&&vt(s),b=!g&&!m&&wt(s);v=s,g||m||b?ht(c)?v=c:bt(y=c)&&yt(y)?v=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}(c):m?(_=!1,v=function(t){return t.slice()}(s)):b?(_=!1,h=new(d=(l=s).buffer).constructor(d.byteLength),new D(h).set(new D(d)),p=h,v=new l.constructor(p,l.byteOffset,l.length)):v=[]:function(t){if(!bt(t)||nt(t)!=u)return!1;var e=F(t);if(null===e)return!0;var n=I.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&x.call(n)==z}(s)||dt(s)?(v=c,dt(c)?v=function(t){return function(t,e,n){var r=!n;n||(n={});for(var i=-1,o=e.length;++i<o;){var a=e[i],u=void 0;void 0===u&&(u=t[a]),r?et(n,a,u):Y(n,a,u)}return n}(t,jt(t))}(c):mt(c)&&!_t(c)||(v=function(t){return\"function\"!=typeof t.constructor||st(t)?{}:H(F(t))}(s))):_=!1}_&&(a.set(s,v),i(v,s,r,o,a),a.delete(s)),X(t,n,v)}}(t,e,a,n,it,r,i);else{var c=r?r(ft(t,a),o,a+\"\",t,e,i):void 0;void 0===c&&(c=o),X(t,a,c)}},jt)}var ot=q?function(t,e){return q(t,\"toString\",{configurable:!0,enumerable:!1,value:(n=e,function(){return n}),writable:!0});var n}:Ct;function at(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function ut(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!mt(t)||function(t){return!!k&&k in t}(t))&&(_t(t)?E:c).test(function(t){if(null!=t){try{return x.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(n)?n:void 0}function ct(t,e){var n=typeof t;return!!(e=e??i)&&(\"number\"==n||\"symbol\"!=n&&s.test(t))&&t>-1&&t%1==0&&t<e}function st(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||C)}function ft(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var lt=function(t){var e=0,n=0;return function(){var r=W(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ot);function pt(t,e){return t===e||t!=t&&e!=e}var dt=rt(function(){return arguments}())?rt:function(t){return bt(t)&&I.call(t,\"callee\")&&!L.call(t,\"callee\")},ht=Array.isArray;function yt(t){return null!=t&&gt(t.length)&&!_t(t)}var vt=B||function(){return!1};function _t(t){if(!mt(t))return!1;var e=nt(t);return e==a||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function mt(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=j?function(t){return function(e){return t(e)}}(j):function(t){return bt(t)&&gt(t.length)&&!!f[nt(t)]};function jt(t){return yt(t)?function(t,e){var n=ht(t),r=!n&&dt(t),i=!n&&!r&&vt(t),o=!n&&!r&&!i&&wt(t),a=n||r||i||o,u=a?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],c=u.length;for(var s in t)!e&&!I.call(t,s)||a&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||ct(s,c))||u.push(s);return u}(t,!0):function(t){if(!mt(t))return function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}(t);var e=st(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&I.call(t,r))&&n.push(r);return n}(t)}var Ot,St=(Ot=function(t,e,n){it(t,e,n)},function(t,e){return lt(function(t,e,n){return e=$(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=$(r.length-e,0),a=Array(o);++i<o;)a[i]=r[e+i];i=-1;for(var u=Array(e+1);++i<e;)u[i]=r[i];return u[e]=n(a),function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}(t,this,u)}}(t,e,Ct),t+\"\")}(function(t,e){var n=-1,r=e.length,i=r>1?e[r-1]:void 0,o=r>2?e[2]:void 0;for(i=Ot.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,e,n){if(!mt(n))return!1;var r=typeof e;return!!(\"number\"==r?yt(n)&&ct(e,n.length):\"string\"==r&&e in n)&&pt(n[e],t)}(e[0],e[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++n<r;){var a=e[n];a&&Ot(t,a,n)}return t}));function Ct(t){return t}t.exports=St},9440(t,e,n){t=n.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",u=32,c=128,s=1/0,f=9007199254740991,l=NaN,p=4294967295,d=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",u],[\"partialRight\",64],[\"rearg\",256]],h=\"[object Arguments]\",y=\"[object Array]\",v=\"[object Boolean]\",_=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",j=\"[object Number]\",O=\"[object Object]\",S=\"[object Promise]\",C=\"[object RegExp]\",A=\"[object Set]\",x=\"[object String]\",I=\"[object Symbol]\",k=\"[object WeakMap]\",P=\"[object ArrayBuffer]\",z=\"[object DataView]\",E=\"[object Float32Array]\",R=\"[object Float64Array]\",N=\"[object Int8Array]\",D=\"[object Int16Array]\",F=\"[object Int32Array]\",T=\"[object Uint8Array]\",L=\"[object Uint8ClampedArray]\",U=\"[object Uint16Array]\",M=\"[object Uint32Array]\",q=/\\b__p \\+= '';/g,B=/\\b(__p \\+=) '' \\+/g,$=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,W=/&(?:amp|lt|gt|quot|#39);/g,V=/[&<>\"']/g,K=RegExp(W.source),H=RegExp(V.source),J=/<%-([\\s\\S]+?)%>/g,G=/<%([\\s\\S]+?)%>/g,Z=/<%=([\\s\\S]+?)%>/g,Q=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,X=/^\\w*$/,Y=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,et=RegExp(tt.source),nt=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,at=/,? & /,ut=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,dt=/^0b[01]+$/i,ht=/^\\[object .+?Constructor\\]$/,yt=/^0o[0-7]+$/i,vt=/^(?:0|[1-9]\\d*)$/,_t=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",jt=\"\\\\u2700-\\\\u27bf\",Ot=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",St=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ct=\"\\\\ufe0e\\\\ufe0f\",At=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",xt=\"[\"+bt+\"]\",It=\"[\"+At+\"]\",kt=\"[\"+wt+\"]\",Pt=\"\\\\d+\",zt=\"[\"+jt+\"]\",Et=\"[\"+Ot+\"]\",Rt=\"[^\"+bt+At+Pt+jt+Ot+St+\"]\",Nt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Dt=\"[^\"+bt+\"]\",Ft=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Tt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Lt=\"[\"+St+\"]\",Ut=\"\\\\u200d\",Mt=\"(?:\"+Et+\"|\"+Rt+\")\",qt=\"(?:\"+Lt+\"|\"+Rt+\")\",Bt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",$t=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Wt=\"(?:\"+kt+\"|\"+Nt+\")?\",Vt=\"[\"+Ct+\"]?\",Kt=Vt+Wt+\"(?:\"+Ut+\"(?:\"+[Dt,Ft,Tt].join(\"|\")+\")\"+Vt+Wt+\")*\",Ht=\"(?:\"+[zt,Ft,Tt].join(\"|\")+\")\"+Kt,Jt=\"(?:\"+[Dt+kt+\"?\",kt,Ft,Tt,xt].join(\"|\")+\")\",Gt=RegExp(\"['’]\",\"g\"),Zt=RegExp(kt,\"g\"),Qt=RegExp(Nt+\"(?=\"+Nt+\")|\"+Jt+Kt,\"g\"),Xt=RegExp([Lt+\"?\"+Et+\"+\"+Bt+\"(?=\"+[It,Lt,\"$\"].join(\"|\")+\")\",qt+\"+\"+$t+\"(?=\"+[It,Lt+Mt,\"$\"].join(\"|\")+\")\",Lt+\"?\"+Mt+\"+\"+Bt,Lt+\"+\"+$t,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Pt,Ht].join(\"|\"),\"g\"),Yt=RegExp(\"[\"+Ut+bt+wt+Ct+\"]\"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ne=-1,re={};re[E]=re[R]=re[N]=re[D]=re[F]=re[T]=re[L]=re[U]=re[M]=!0,re[h]=re[y]=re[P]=re[v]=re[z]=re[_]=re[g]=re[m]=re[w]=re[j]=re[O]=re[C]=re[A]=re[x]=re[k]=!1;var ie={};ie[h]=ie[y]=ie[P]=ie[z]=ie[v]=ie[_]=ie[E]=ie[R]=ie[N]=ie[D]=ie[F]=ie[w]=ie[j]=ie[O]=ie[C]=ie[A]=ie[x]=ie[I]=ie[T]=ie[L]=ie[U]=ie[M]=!0,ie[g]=ie[m]=ie[k]=!1;var oe={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ae=parseFloat,ue=parseInt,ce=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,se=\"object\"==typeof self&&self&&self.Object===Object&&self,fe=ce||se||Function(\"return this\")(),le=e&&!e.nodeType&&e,pe=le&&t&&!t.nodeType&&t,de=pe&&pe.exports===le,he=de&&ce.process,ye=function(){try{return pe&&pe.require&&pe.require(\"util\").types||he&&he.binding&&he.binding(\"util\")}catch(t){}}(),ve=ye&&ye.isArrayBuffer,_e=ye&&ye.isDate,ge=ye&&ye.isMap,me=ye&&ye.isRegExp,be=ye&&ye.isSet,we=ye&&ye.isTypedArray;function je(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Oe(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i];e(r,a,n(a),t)}return r}function Se(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function Ce(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function Ae(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function xe(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var a=t[n];e(a,n,t)&&(o[i++]=a)}return o}function Ie(t,e){return!(null==t||!t.length)&&Le(t,e,0)>-1}function ke(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function Pe(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function ze(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function Ee(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function Re(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function Ne(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var De=Be(\"length\");function Fe(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function Te(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function Le(t,e,n){return e==e?function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):Te(t,Me,n)}function Ue(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function Me(t){return t!=t}function qe(t,e){var n=null==t?0:t.length;return n?Ve(t,e)/n:l}function Be(t){return function(e){return null==e?r:e[t]}}function $e(t){return function(e){return null==t?r:t[e]}}function We(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function Ve(t,e){for(var n,i=-1,o=t.length;++i<o;){var a=e(t[i]);a!==r&&(n=n===r?a:n+a)}return n}function Ke(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function He(t){return t?t.slice(0,ln(t)+1).replace(nt,\"\"):t}function Je(t){return function(e){return t(e)}}function Ge(t,e){return Pe(e,function(e){return t[e]})}function Ze(t,e){return t.has(e)}function Qe(t,e){for(var n=-1,r=t.length;++n<r&&Le(e,t[n],0)>-1;);return n}function Xe(t,e){for(var n=t.length;n--&&Le(e,t[n],0)>-1;);return n}var Ye=$e({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tn=$e({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function en(t){return\"\\\\\"+oe[t]}function nn(t){return Yt.test(t)}function rn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function on(t,e){return function(n){return t(e(n))}}function an(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n];u!==e&&u!==a||(t[n]=a,o[i++]=n)}return o}function un(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function cn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function sn(t){return nn(t)?function(t){for(var e=Qt.lastIndex=0;Qt.test(t);)++e;return e}(t):De(t)}function fn(t){return nn(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.split(\"\")}(t)}function ln(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}var pn=$e({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),dn=function t(e){var n,rt=(e=null==e?fe:dn.defaults(fe.Object(),e,dn.pick(fe,ee))).Array,bt=e.Date,wt=e.Error,jt=e.Function,Ot=e.Math,St=e.Object,Ct=e.RegExp,At=e.String,xt=e.TypeError,It=rt.prototype,kt=jt.prototype,Pt=St.prototype,zt=e[\"__core-js_shared__\"],Et=kt.toString,Rt=Pt.hasOwnProperty,Nt=0,Dt=(n=/[^.]+$/.exec(zt&&zt.keys&&zt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Ft=Pt.toString,Tt=Et.call(St),Lt=fe._,Ut=Ct(\"^\"+Et.call(Rt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Mt=de?e.Buffer:r,qt=e.Symbol,Bt=e.Uint8Array,$t=Mt?Mt.allocUnsafe:r,Wt=on(St.getPrototypeOf,St),Vt=St.create,Kt=Pt.propertyIsEnumerable,Ht=It.splice,Jt=qt?qt.isConcatSpreadable:r,Qt=qt?qt.iterator:r,Yt=qt?qt.toStringTag:r,oe=function(){try{var t=co(St,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ce=e.clearTimeout!==fe.clearTimeout&&e.clearTimeout,se=bt&&bt.now!==fe.Date.now&&bt.now,le=e.setTimeout!==fe.setTimeout&&e.setTimeout,pe=Ot.ceil,he=Ot.floor,ye=St.getOwnPropertySymbols,De=Mt?Mt.isBuffer:r,$e=e.isFinite,hn=It.join,yn=on(St.keys,St),vn=Ot.max,_n=Ot.min,gn=bt.now,mn=e.parseInt,bn=Ot.random,wn=It.reverse,jn=co(e,\"DataView\"),On=co(e,\"Map\"),Sn=co(e,\"Promise\"),Cn=co(e,\"Set\"),An=co(e,\"WeakMap\"),xn=co(St,\"create\"),In=An&&new An,kn={},Pn=To(jn),zn=To(On),En=To(Sn),Rn=To(Cn),Nn=To(An),Dn=qt?qt.prototype:r,Fn=Dn?Dn.valueOf:r,Tn=Dn?Dn.toString:r;function Ln(t){if(tu(t)&&!$a(t)&&!(t instanceof Bn)){if(t instanceof qn)return t;if(Rt.call(t,\"__wrapped__\"))return Lo(t)}return new qn(t)}var Un=function(){function t(){}return function(e){if(!Ya(e))return{};if(Vt)return Vt(e);t.prototype=e;var n=new t;return t.prototype=r,n}}();function Mn(){}function qn(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=r}function Bn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function $n(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Wn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Vn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Kn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Vn;++e<n;)this.add(t[e])}function Hn(t){var e=this.__data__=new Wn(t);this.size=e.size}function Jn(t,e){var n=$a(t),r=!n&&Ba(t),i=!n&&!r&&Ha(t),o=!n&&!r&&!i&&cu(t),a=n||r||i||o,u=a?Ke(t.length,At):[],c=u.length;for(var s in t)!e&&!Rt.call(t,s)||a&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||vo(s,c))||u.push(s);return u}function Gn(t){var e=t.length;return e?t[Vr(0,e-1)]:r}function Zn(t,e){return Eo(Ai(t),or(e,0,t.length))}function Qn(t){return Eo(Ai(t))}function Xn(t,e,n){(n!==r&&!Ua(t[e],n)||n===r&&!(e in t))&&rr(t,e,n)}function Yn(t,e,n){var i=t[e];Rt.call(t,e)&&Ua(i,n)&&(n!==r||e in t)||rr(t,e,n)}function tr(t,e){for(var n=t.length;n--;)if(Ua(t[n][0],e))return n;return-1}function er(t,e,n,r){return fr(t,function(t,i,o){e(r,t,n(t),o)}),r}function nr(t,e){return t&&xi(e,Pu(e),t)}function rr(t,e,n){\"__proto__\"==e&&oe?oe(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function ir(t,e){for(var n=-1,i=e.length,o=rt(i),a=null==t;++n<i;)o[n]=a?r:Cu(t,e[n]);return o}function or(t,e,n){return t==t&&(n!==r&&(t=t<=n?t:n),e!==r&&(t=t>=e?t:e)),t}function ar(t,e,n,i,o,a){var u,c=1&e,s=2&e,f=4&e;if(n&&(u=o?n(t,i,o,a):n(t)),u!==r)return u;if(!Ya(t))return t;var l=$a(t);if(l){if(u=function(t){var e=t.length,n=new t.constructor(e);return e&&\"string\"==typeof t[0]&&Rt.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}(t),!c)return Ai(t,u)}else{var p=lo(t),d=p==m||p==b;if(Ha(t))return bi(t,c);if(p==O||p==h||d&&!o){if(u=s||d?{}:ho(t),!c)return s?function(t,e){return xi(t,fo(t),e)}(t,function(t,e){return t&&xi(e,zu(e),t)}(u,t)):function(t,e){return xi(t,so(t),e)}(t,nr(u,t))}else{if(!ie[p])return o?t:{};u=function(t,e,n){var r,i=t.constructor;switch(e){case P:return wi(t);case v:case _:return new i(+t);case z:return function(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case E:case R:case N:case D:case F:case T:case L:case U:case M:return ji(t,n);case w:return new i;case j:case x:return new i(t);case C:return function(t){var e=new t.constructor(t.source,lt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case A:return new i;case I:return r=t,Fn?St(Fn.call(r)):{}}}(t,p,c)}}a||(a=new Hn);var y=a.get(t);if(y)return y;a.set(t,u),ou(t)?t.forEach(function(r){u.add(ar(r,e,n,r,t,a))}):eu(t)&&t.forEach(function(r,i){u.set(i,ar(r,e,n,i,t,a))});var g=l?r:(f?s?eo:to:s?zu:Pu)(t);return Se(g||t,function(r,i){g&&(r=t[i=r]),Yn(u,i,ar(r,e,n,i,t,a))}),u}function ur(t,e,n){var i=n.length;if(null==t)return!i;for(t=St(t);i--;){var o=n[i],a=e[o],u=t[o];if(u===r&&!(o in t)||!a(u))return!1}return!0}function cr(t,e,n){if(\"function\"!=typeof t)throw new xt(i);return Io(function(){t.apply(r,n)},e)}function sr(t,e,n,r){var i=-1,o=Ie,a=!0,u=t.length,c=[],s=e.length;if(!u)return c;n&&(e=Pe(e,Je(n))),r?(o=ke,a=!1):e.length>=200&&(o=Ze,a=!1,e=new Kn(e));t:for(;++i<u;){var f=t[i],l=null==n?f:n(f);if(f=r||0!==f?f:0,a&&l==l){for(var p=s;p--;)if(e[p]===l)continue t;c.push(f)}else o(e,l,r)||c.push(f)}return c}Ln.templateSettings={escape:J,evaluate:G,interpolate:Z,variable:\"\",imports:{_:Ln}},Ln.prototype=Mn.prototype,Ln.prototype.constructor=Ln,qn.prototype=Un(Mn.prototype),qn.prototype.constructor=qn,Bn.prototype=Un(Mn.prototype),Bn.prototype.constructor=Bn,$n.prototype.clear=function(){this.__data__=xn?xn(null):{},this.size=0},$n.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},$n.prototype.get=function(t){var e=this.__data__;if(xn){var n=e[t];return n===o?r:n}return Rt.call(e,t)?e[t]:r},$n.prototype.has=function(t){var e=this.__data__;return xn?e[t]!==r:Rt.call(e,t)},$n.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=xn&&e===r?o:e,this},Wn.prototype.clear=function(){this.__data__=[],this.size=0},Wn.prototype.delete=function(t){var e=this.__data__,n=tr(e,t);return!(n<0||(n==e.length-1?e.pop():Ht.call(e,n,1),--this.size,0))},Wn.prototype.get=function(t){var e=this.__data__,n=tr(e,t);return n<0?r:e[n][1]},Wn.prototype.has=function(t){return tr(this.__data__,t)>-1},Wn.prototype.set=function(t,e){var n=this.__data__,r=tr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Vn.prototype.clear=function(){this.size=0,this.__data__={hash:new $n,map:new(On||Wn),string:new $n}},Vn.prototype.delete=function(t){var e=ao(this,t).delete(t);return this.size-=e?1:0,e},Vn.prototype.get=function(t){return ao(this,t).get(t)},Vn.prototype.has=function(t){return ao(this,t).has(t)},Vn.prototype.set=function(t,e){var n=ao(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Kn.prototype.add=Kn.prototype.push=function(t){return this.__data__.set(t,o),this},Kn.prototype.has=function(t){return this.__data__.has(t)},Hn.prototype.clear=function(){this.__data__=new Wn,this.size=0},Hn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Hn.prototype.get=function(t){return this.__data__.get(t)},Hn.prototype.has=function(t){return this.__data__.has(t)},Hn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Wn){var r=n.__data__;if(!On||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Vn(r)}return n.set(t,e),this.size=n.size,this};var fr=Pi(gr),lr=Pi(mr,!0);function pr(t,e){var n=!0;return fr(t,function(t,r,i){return n=!!e(t,r,i)}),n}function dr(t,e,n){for(var i=-1,o=t.length;++i<o;){var a=t[i],u=e(a);if(null!=u&&(c===r?u==u&&!uu(u):n(u,c)))var c=u,s=a}return s}function hr(t,e){var n=[];return fr(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function yr(t,e,n,r,i){var o=-1,a=t.length;for(n||(n=yo),i||(i=[]);++o<a;){var u=t[o];e>0&&n(u)?e>1?yr(u,e-1,n,r,i):ze(i,u):r||(i[i.length]=u)}return i}var vr=zi(),_r=zi(!0);function gr(t,e){return t&&vr(t,e,Pu)}function mr(t,e){return t&&_r(t,e,Pu)}function br(t,e){return xe(e,function(e){return Za(t[e])})}function wr(t,e){for(var n=0,i=(e=vi(e,t)).length;null!=t&&n<i;)t=t[Fo(e[n++])];return n&&n==i?t:r}function jr(t,e,n){var r=e(t);return $a(t)?r:ze(r,n(t))}function Or(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Yt&&Yt in St(t)?function(t){var e=Rt.call(t,Yt),n=t[Yt];try{t[Yt]=r;var i=!0}catch(t){}var o=Ft.call(t);return i&&(e?t[Yt]=n:delete t[Yt]),o}(t):function(t){return Ft.call(t)}(t)}function Sr(t,e){return t>e}function Cr(t,e){return null!=t&&Rt.call(t,e)}function Ar(t,e){return null!=t&&e in St(t)}function xr(t,e,n){for(var i=n?ke:Ie,o=t[0].length,a=t.length,u=a,c=rt(a),s=1/0,f=[];u--;){var l=t[u];u&&e&&(l=Pe(l,Je(e))),s=_n(l.length,s),c[u]=!n&&(e||o>=120&&l.length>=120)?new Kn(u&&l):r}l=t[0];var p=-1,d=c[0];t:for(;++p<o&&f.length<s;){var h=l[p],y=e?e(h):h;if(h=n||0!==h?h:0,!(d?Ze(d,y):i(f,y,n))){for(u=a;--u;){var v=c[u];if(!(v?Ze(v,y):i(t[u],y,n)))continue t}d&&d.push(y),f.push(h)}}return f}function Ir(t,e,n){var i=null==(t=Co(t,e=vi(e,t)))?t:t[Fo(Go(e))];return null==i?r:je(i,t,n)}function kr(t){return tu(t)&&Or(t)==h}function Pr(t,e,n,i,o){return t===e||(null==t||null==e||!tu(t)&&!tu(e)?t!=t&&e!=e:function(t,e,n,i,o,a){var u=$a(t),c=$a(e),s=u?y:lo(t),f=c?y:lo(e),l=(s=s==h?O:s)==O,p=(f=f==h?O:f)==O,d=s==f;if(d&&Ha(t)){if(!Ha(e))return!1;u=!0,l=!1}if(d&&!l)return a||(a=new Hn),u||cu(t)?Xi(t,e,n,i,o,a):function(t,e,n,r,i,o,a){switch(n){case z:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case P:return!(t.byteLength!=e.byteLength||!o(new Bt(t),new Bt(e)));case v:case _:case j:return Ua(+t,+e);case g:return t.name==e.name&&t.message==e.message;case C:case x:return t==e+\"\";case w:var u=rn;case A:var c=1&r;if(u||(u=un),t.size!=e.size&&!c)return!1;var s=a.get(t);if(s)return s==e;r|=2,a.set(t,e);var f=Xi(u(t),u(e),r,i,o,a);return a.delete(t),f;case I:if(Fn)return Fn.call(t)==Fn.call(e)}return!1}(t,e,s,n,i,o,a);if(!(1&n)){var m=l&&Rt.call(t,\"__wrapped__\"),b=p&&Rt.call(e,\"__wrapped__\");if(m||b){var S=m?t.value():t,k=b?e.value():e;return a||(a=new Hn),o(S,k,n,i,a)}}return!!d&&(a||(a=new Hn),function(t,e,n,i,o,a){var u=1&n,c=to(t),s=c.length;if(s!=to(e).length&&!u)return!1;for(var f=s;f--;){var l=c[f];if(!(u?l in e:Rt.call(e,l)))return!1}var p=a.get(t),d=a.get(e);if(p&&d)return p==e&&d==t;var h=!0;a.set(t,e),a.set(e,t);for(var y=u;++f<s;){var v=t[l=c[f]],_=e[l];if(i)var g=u?i(_,v,l,e,t,a):i(v,_,l,t,e,a);if(!(g===r?v===_||o(v,_,n,i,a):g)){h=!1;break}y||(y=\"constructor\"==l)}if(h&&!y){var m=t.constructor,b=e.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(h=!1)}return a.delete(t),a.delete(e),h}(t,e,n,i,o,a))}(t,e,n,i,Pr,o))}function zr(t,e,n,i){var o=n.length,a=o,u=!i;if(null==t)return!a;for(t=St(t);o--;){var c=n[o];if(u&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++o<a;){var s=(c=n[o])[0],f=t[s],l=c[1];if(u&&c[2]){if(f===r&&!(s in t))return!1}else{var p=new Hn;if(i)var d=i(f,l,s,t,e,p);if(!(d===r?Pr(l,f,3,i,p):d))return!1}}return!0}function Er(t){return!(!Ya(t)||(e=t,Dt&&Dt in e))&&(Za(t)?Ut:ht).test(To(t));var e}function Rr(t){return\"function\"==typeof t?t:null==t?nc:\"object\"==typeof t?$a(t)?Lr(t[0],t[1]):Tr(t):lc(t)}function Nr(t){if(!wo(t))return yn(t);var e=[];for(var n in St(t))Rt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function Dr(t,e){return t<e}function Fr(t,e){var n=-1,r=Va(t)?rt(t.length):[];return fr(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Tr(t){var e=uo(t);return 1==e.length&&e[0][2]?Oo(e[0][0],e[0][1]):function(n){return n===t||zr(n,t,e)}}function Lr(t,e){return go(t)&&jo(e)?Oo(Fo(t),e):function(n){var i=Cu(n,t);return i===r&&i===e?Au(n,t):Pr(e,i,3)}}function Ur(t,e,n,i,o){t!==e&&vr(e,function(a,u){if(o||(o=new Hn),Ya(a))!function(t,e,n,i,o,a,u){var c=Ao(t,n),s=Ao(e,n),f=u.get(s);if(f)Xn(t,n,f);else{var l=a?a(c,s,n+\"\",t,e,u):r,p=l===r;if(p){var d=$a(s),h=!d&&Ha(s),y=!d&&!h&&cu(s);l=s,d||h||y?$a(c)?l=c:Ka(c)?l=Ai(c):h?(p=!1,l=bi(s,!0)):y?(p=!1,l=ji(s,!0)):l=[]:ru(s)||Ba(s)?(l=c,Ba(c)?l=vu(c):Ya(c)&&!Za(c)||(l=ho(s))):p=!1}p&&(u.set(s,l),o(l,s,i,a,u),u.delete(s)),Xn(t,n,l)}}(t,e,u,n,Ur,i,o);else{var c=i?i(Ao(t,u),a,u+\"\",t,e,o):r;c===r&&(c=a),Xn(t,u,c)}},zu)}function Mr(t,e){var n=t.length;if(n)return vo(e+=e<0?n:0,n)?t[e]:r}function qr(t,e,n){e=e.length?Pe(e,function(t){return $a(t)?function(e){return wr(e,1===t.length?t[0]:t)}:t}):[nc];var r=-1;e=Pe(e,Je(oo()));var i=Fr(t,function(t,n,i){var o=Pe(e,function(e){return e(t)});return{criteria:o,index:++r,value:t}});return function(t){var e=t.length;for(t.sort(function(t,e){return function(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,a=i.length,u=n.length;++r<a;){var c=Oi(i[r],o[r]);if(c)return r>=u?c:c*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)});e--;)t[e]=t[e].value;return t}(i)}function Br(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var a=e[r],u=wr(t,a);n(u,a)&&Zr(o,vi(a,t),u)}return o}function $r(t,e,n,r){var i=r?Ue:Le,o=-1,a=e.length,u=t;for(t===e&&(e=Ai(e)),n&&(u=Pe(t,Je(n)));++o<a;)for(var c=0,s=e[o],f=n?n(s):s;(c=i(u,f,c,r))>-1;)u!==t&&Ht.call(u,c,1),Ht.call(t,c,1);return t}function Wr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;vo(i)?Ht.call(t,i,1):ci(t,i)}}return t}function Vr(t,e){return t+he(bn()*(e-t+1))}function Kr(t,e){var n=\"\";if(!t||e<1||e>f)return n;do{e%2&&(n+=t),(e=he(e/2))&&(t+=t)}while(e);return n}function Hr(t,e){return ko(So(t,e,nc),t+\"\")}function Jr(t){return Gn(Uu(t))}function Gr(t,e){var n=Uu(t);return Eo(n,or(e,0,n.length))}function Zr(t,e,n,i){if(!Ya(t))return t;for(var o=-1,a=(e=vi(e,t)).length,u=a-1,c=t;null!=c&&++o<a;){var s=Fo(e[o]),f=n;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(o!=u){var l=c[s];(f=i?i(l,s,c):r)===r&&(f=Ya(l)?l:vo(e[o+1])?[]:{})}Yn(c,s,f),c=c[s]}return t}var Qr=In?function(t,e){return In.set(t,e),t}:nc,Xr=oe?function(t,e){return oe(t,\"toString\",{configurable:!0,enumerable:!1,value:Yu(e),writable:!0})}:nc;function Yr(t){return Eo(Uu(t))}function ti(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+e];return o}function ei(t,e){var n;return fr(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ni(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;r<i;){var o=r+i>>>1,a=t[o];null!==a&&!uu(a)&&(n?a<=e:a<e)?r=o+1:i=o}return i}return ri(t,e,nc,n)}function ri(t,e,n,i){var o=0,a=null==t?0:t.length;if(0===a)return 0;for(var u=(e=n(e))!=e,c=null===e,s=uu(e),f=e===r;o<a;){var l=he((o+a)/2),p=n(t[l]),d=p!==r,h=null===p,y=p==p,v=uu(p);if(u)var _=i||y;else _=f?y&&(i||d):c?y&&d&&(i||!h):s?y&&d&&!h&&(i||!v):!h&&!v&&(i?p<=e:p<e);_?o=l+1:a=l}return _n(a,4294967294)}function ii(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n],u=e?e(a):a;if(!n||!Ua(u,c)){var c=u;o[i++]=0===a?0:a}}return o}function oi(t){return\"number\"==typeof t?t:uu(t)?l:+t}function ai(t){if(\"string\"==typeof t)return t;if($a(t))return Pe(t,ai)+\"\";if(uu(t))return Tn?Tn.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function ui(t,e,n){var r=-1,i=Ie,o=t.length,a=!0,u=[],c=u;if(n)a=!1,i=ke;else if(o>=200){var s=e?null:Ki(t);if(s)return un(s);a=!1,i=Ze,c=new Kn}else c=e?[]:u;t:for(;++r<o;){var f=t[r],l=e?e(f):f;if(f=n||0!==f?f:0,a&&l==l){for(var p=c.length;p--;)if(c[p]===l)continue t;e&&c.push(l),u.push(f)}else i(c,l,n)||(c!==u&&c.push(l),u.push(f))}return u}function ci(t,e){var n=-1,r=(e=vi(e,t)).length;if(!r)return!0;for(;++n<r;){var i=Fo(e[n]);if(\"__proto__\"===i&&!Rt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Co(t,e);return null==o||delete o[Fo(Go(e))]}function si(t,e,n,r){return Zr(t,e,n(wr(t,e)),r)}function fi(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function li(t,e){var n=t;return n instanceof Bn&&(n=n.value()),Ee(e,function(t,e){return e.func.apply(e.thisArg,ze([t],e.args))},n)}function pi(t,e,n){var r=t.length;if(r<2)return r?ui(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var a=t[i],u=-1;++u<r;)u!=i&&(o[i]=sr(o[i]||a,t[u],e,n));return ui(yr(o,1),e,n)}function di(t,e,n){for(var i=-1,o=t.length,a=e.length,u={};++i<o;){var c=i<a?e[i]:r;n(u,t[i],c)}return u}function hi(t){return Ka(t)?t:[]}function yi(t){return\"function\"==typeof t?t:nc}function vi(t,e){return $a(t)?t:go(t,e)?[t]:Do(_u(t))}var _i=Hr;function gi(t,e,n){var i=t.length;return n=n===r?i:n,!e&&n>=i?t:ti(t,e,n)}var mi=ce||function(t){return fe.clearTimeout(t)};function bi(t,e){if(e)return t.slice();var n=t.length,r=$t?$t(n):new t.constructor(n);return t.copy(r),r}function wi(t){var e=new t.constructor(t.byteLength);return new Bt(e).set(new Bt(t)),e}function ji(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Oi(t,e){if(t!==e){var n=t!==r,i=null===t,o=t==t,a=uu(t),u=e!==r,c=null===e,s=e==e,f=uu(e);if(!c&&!f&&!a&&t>e||a&&u&&s&&!c&&!f||i&&u&&s||!n&&s||!o)return 1;if(!i&&!a&&!f&&t<e||f&&n&&o&&!i&&!a||c&&n&&o||!u&&o||!s)return-1}return 0}function Si(t,e,n,r){for(var i=-1,o=t.length,a=n.length,u=-1,c=e.length,s=vn(o-a,0),f=rt(c+s),l=!r;++u<c;)f[u]=e[u];for(;++i<a;)(l||i<o)&&(f[n[i]]=t[i]);for(;s--;)f[u++]=t[i++];return f}function Ci(t,e,n,r){for(var i=-1,o=t.length,a=-1,u=n.length,c=-1,s=e.length,f=vn(o-u,0),l=rt(f+s),p=!r;++i<f;)l[i]=t[i];for(var d=i;++c<s;)l[d+c]=e[c];for(;++a<u;)(p||i<o)&&(l[d+n[a]]=t[i++]);return l}function Ai(t,e){var n=-1,r=t.length;for(e||(e=rt(r));++n<r;)e[n]=t[n];return e}function xi(t,e,n,i){var o=!n;n||(n={});for(var a=-1,u=e.length;++a<u;){var c=e[a],s=i?i(n[c],t[c],c,n,t):r;s===r&&(s=t[c]),o?rr(n,c,s):Yn(n,c,s)}return n}function Ii(t,e){return function(n,r){var i=$a(n)?Oe:er,o=e?e():{};return i(n,t,oo(r,2),o)}}function ki(t){return Hr(function(e,n){var i=-1,o=n.length,a=o>1?n[o-1]:r,u=o>2?n[2]:r;for(a=t.length>3&&\"function\"==typeof a?(o--,a):r,u&&_o(n[0],n[1],u)&&(a=o<3?r:a,o=1),e=St(e);++i<o;){var c=n[i];c&&t(e,c,i,a)}return e})}function Pi(t,e){return function(n,r){if(null==n)return n;if(!Va(n))return t(n,r);for(var i=n.length,o=e?i:-1,a=St(n);(e?o--:++o<i)&&!1!==r(a[o],o,a););return n}}function zi(t){return function(e,n,r){for(var i=-1,o=St(e),a=r(e),u=a.length;u--;){var c=a[t?u:++i];if(!1===n(o[c],c,o))break}return e}}function Ei(t){return function(e){var n=nn(e=_u(e))?fn(e):r,i=n?n[0]:e.charAt(0),o=n?gi(n,1).join(\"\"):e.slice(1);return i[t]()+o}}function Ri(t){return function(e){return Ee(Zu(Bu(e).replace(Gt,\"\")),t,\"\")}}function Ni(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Un(t.prototype),r=t.apply(n,e);return Ya(r)?r:n}}function Di(t){return function(e,n,i){var o=St(e);if(!Va(e)){var a=oo(n,3);e=Pu(e),n=function(t){return a(o[t],t,o)}}var u=t(e,n,i);return u>-1?o[a?e[u]:u]:r}}function Fi(t){return Yi(function(e){var n=e.length,o=n,a=qn.prototype.thru;for(t&&e.reverse();o--;){var u=e[o];if(\"function\"!=typeof u)throw new xt(i);if(a&&!c&&\"wrapper\"==ro(u))var c=new qn([],!0)}for(o=c?o:n;++o<n;){var s=ro(u=e[o]),f=\"wrapper\"==s?no(u):r;c=f&&mo(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?c[ro(f[0])].apply(c,f[3]):1==u.length&&mo(u)?c[s]():c.thru(u)}return function(){var t=arguments,r=t[0];if(c&&1==t.length&&$a(r))return c.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Ti(t,e,n,i,o,a,u,s,f,l){var p=e&c,d=1&e,h=2&e,y=24&e,v=512&e,_=h?r:Ni(t);return function c(){for(var g=arguments.length,m=rt(g),b=g;b--;)m[b]=arguments[b];if(y)var w=io(c),j=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(m,w);if(i&&(m=Si(m,i,o,y)),a&&(m=Ci(m,a,u,y)),g-=j,y&&g<l){var O=an(m,w);return Wi(t,e,Ti,c.placeholder,n,m,O,s,f,l-g)}var S=d?n:this,C=h?S[t]:t;return g=m.length,s?m=function(t,e){for(var n=t.length,i=_n(e.length,n),o=Ai(t);i--;){var a=e[i];t[i]=vo(a,n)?o[a]:r}return t}(m,s):v&&g>1&&m.reverse(),p&&f<g&&(m.length=f),this&&this!==fe&&this instanceof c&&(C=_||Ni(C)),C.apply(S,m)}}function Li(t,e){return function(n,r){return function(t,e,n,r){return gr(t,function(t,i,o){e(r,n(t),i,o)}),r}(n,t,e(r),{})}}function Ui(t,e){return function(n,i){var o;if(n===r&&i===r)return e;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ai(n),i=ai(i)):(n=oi(n),i=oi(i)),o=t(n,i)}return o}}function Mi(t){return Yi(function(e){return e=Pe(e,Je(oo())),Hr(function(n){var r=this;return t(e,function(t){return je(t,r,n)})})})}function qi(t,e){var n=(e=e===r?\" \":ai(e)).length;if(n<2)return n?Kr(e,t):e;var i=Kr(e,pe(t/sn(e)));return nn(e)?gi(fn(i),0,t).join(\"\"):i.slice(0,t)}function Bi(t){return function(e,n,i){return i&&\"number\"!=typeof i&&_o(e,n,i)&&(n=i=r),e=pu(e),n===r?(n=e,e=0):n=pu(n),function(t,e,n,r){for(var i=-1,o=vn(pe((e-t)/(n||1)),0),a=rt(o);o--;)a[r?o:++i]=t,t+=n;return a}(e,n,i=i===r?e<n?1:-1:pu(i),t)}}function $i(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=yu(e),n=yu(n)),t(e,n)}}function Wi(t,e,n,i,o,a,c,s,f,l){var p=8&e;e|=p?u:64,4&(e&=~(p?64:u))||(e&=-4);var d=[t,e,o,p?a:r,p?c:r,p?r:a,p?r:c,s,f,l],h=n.apply(r,d);return mo(t)&&xo(h,d),h.placeholder=i,Po(h,t,e)}function Vi(t){var e=Ot[t];return function(t,n){if(t=yu(t),(n=null==n?0:_n(du(n),292))&&$e(t)){var r=(_u(t)+\"e\").split(\"e\");return+((r=(_u(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var Ki=Cn&&1/un(new Cn([,-0]))[1]==s?function(t){return new Cn(t)}:uc;function Hi(t){return function(e){var n=lo(e);return n==w?rn(e):n==A?cn(e):function(t,e){return Pe(e,function(e){return[e,t[e]]})}(e,t(e))}}function Ji(t,e,n,o,s,f,l,p){var d=2&e;if(!d&&\"function\"!=typeof t)throw new xt(i);var h=o?o.length:0;if(h||(e&=-97,o=s=r),l=l===r?l:vn(du(l),0),p=p===r?p:du(p),h-=s?s.length:0,64&e){var y=o,v=s;o=s=r}var _=d?r:no(t),g=[t,e,n,o,s,y,v,f,l,p];if(_&&function(t,e){var n=t[1],r=e[1],i=n|r,o=i<131,u=r==c&&8==n||r==c&&256==n&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!o&&!u)return t;1&r&&(t[2]=e[2],i|=1&n?0:4);var s=e[3];if(s){var f=t[3];t[3]=f?Si(f,s,e[4]):s,t[4]=f?an(t[3],a):e[4]}(s=e[5])&&(f=t[5],t[5]=f?Ci(f,s,e[6]):s,t[6]=f?an(t[5],a):e[6]),(s=e[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?e[8]:_n(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i}(g,_),t=g[0],e=g[1],n=g[2],o=g[3],s=g[4],!(p=g[9]=g[9]===r?d?0:t.length:vn(g[9]-h,0))&&24&e&&(e&=-25),e&&1!=e)m=8==e||16==e?function(t,e,n){var i=Ni(t);return function o(){for(var a=arguments.length,u=rt(a),c=a,s=io(o);c--;)u[c]=arguments[c];var f=a<3&&u[0]!==s&&u[a-1]!==s?[]:an(u,s);return(a-=f.length)<n?Wi(t,e,Ti,o.placeholder,r,u,f,r,r,n-a):je(this&&this!==fe&&this instanceof o?i:t,this,u)}}(t,e,p):e!=u&&33!=e||s.length?Ti.apply(r,g):function(t,e,n,r){var i=1&e,o=Ni(t);return function e(){for(var a=-1,u=arguments.length,c=-1,s=r.length,f=rt(s+u),l=this&&this!==fe&&this instanceof e?o:t;++c<s;)f[c]=r[c];for(;u--;)f[c++]=arguments[++a];return je(l,i?n:this,f)}}(t,e,n,o);else var m=function(t,e,n){var r=1&e,i=Ni(t);return function e(){return(this&&this!==fe&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return Po((_?Qr:xo)(m,g),t,e)}function Gi(t,e,n,i){return t===r||Ua(t,Pt[n])&&!Rt.call(i,n)?e:t}function Zi(t,e,n,i,o,a){return Ya(t)&&Ya(e)&&(a.set(e,t),Ur(t,e,r,Zi,a),a.delete(e)),t}function Qi(t){return ru(t)?r:t}function Xi(t,e,n,i,o,a){var u=1&n,c=t.length,s=e.length;if(c!=s&&!(u&&s>c))return!1;var f=a.get(t),l=a.get(e);if(f&&l)return f==e&&l==t;var p=-1,d=!0,h=2&n?new Kn:r;for(a.set(t,e),a.set(e,t);++p<c;){var y=t[p],v=e[p];if(i)var _=u?i(v,y,p,e,t,a):i(y,v,p,t,e,a);if(_!==r){if(_)continue;d=!1;break}if(h){if(!Ne(e,function(t,e){if(!Ze(h,e)&&(y===t||o(y,t,n,i,a)))return h.push(e)})){d=!1;break}}else if(y!==v&&!o(y,v,n,i,a)){d=!1;break}}return a.delete(t),a.delete(e),d}function Yi(t){return ko(So(t,r,Wo),t+\"\")}function to(t){return jr(t,Pu,so)}function eo(t){return jr(t,zu,fo)}var no=In?function(t){return In.get(t)}:uc;function ro(t){for(var e=t.name+\"\",n=kn[e],r=Rt.call(kn,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function io(t){return(Rt.call(Ln,\"placeholder\")?Ln:t).placeholder}function oo(){var t=Ln.iteratee||rc;return t=t===rc?Rr:t,arguments.length?t(arguments[0],arguments[1]):t}function ao(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function uo(t){for(var e=Pu(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,jo(i)]}return e}function co(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return Er(n)?n:r}var so=ye?function(t){return null==t?[]:(t=St(t),xe(ye(t),function(e){return Kt.call(t,e)}))}:hc,fo=ye?function(t){for(var e=[];t;)ze(e,so(t)),t=Wt(t);return e}:hc,lo=Or;function po(t,e,n){for(var r=-1,i=(e=vi(e,t)).length,o=!1;++r<i;){var a=Fo(e[r]);if(!(o=null!=t&&n(t,a)))break;t=t[a]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Xa(i)&&vo(a,i)&&($a(t)||Ba(t))}function ho(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Un(Wt(t))}function yo(t){return $a(t)||Ba(t)||!!(Jt&&t&&t[Jt])}function vo(t,e){var n=typeof t;return!!(e=e??f)&&(\"number\"==n||\"symbol\"!=n&&vt.test(t))&&t>-1&&t%1==0&&t<e}function _o(t,e,n){if(!Ya(n))return!1;var r=typeof e;return!!(\"number\"==r?Va(n)&&vo(e,n.length):\"string\"==r&&e in n)&&Ua(n[e],t)}function go(t,e){if($a(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!uu(t))||X.test(t)||!Q.test(t)||null!=e&&t in St(e)}function mo(t){var e=ro(t),n=Ln[e];if(\"function\"!=typeof n||!(e in Bn.prototype))return!1;if(t===n)return!0;var r=no(n);return!!r&&t===r[0]}(jn&&lo(new jn(new ArrayBuffer(1)))!=z||On&&lo(new On)!=w||Sn&&lo(Sn.resolve())!=S||Cn&&lo(new Cn)!=A||An&&lo(new An)!=k)&&(lo=function(t){var e=Or(t),n=e==O?t.constructor:r,i=n?To(n):\"\";if(i)switch(i){case Pn:return z;case zn:return w;case En:return S;case Rn:return A;case Nn:return k}return e});var bo=zt?Za:yc;function wo(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||Pt)}function jo(t){return t==t&&!Ya(t)}function Oo(t,e){return function(n){return null!=n&&n[t]===e&&(e!==r||t in St(n))}}function So(t,e,n){return e=vn(e===r?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=vn(r.length-e,0),a=rt(o);++i<o;)a[i]=r[e+i];i=-1;for(var u=rt(e+1);++i<e;)u[i]=r[i];return u[e]=n(a),je(t,this,u)}}function Co(t,e){return e.length<2?t:wr(t,ti(e,0,-1))}function Ao(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var xo=zo(Qr),Io=le||function(t,e){return fe.setTimeout(t,e)},ko=zo(Xr);function Po(t,e,n){var r=e+\"\";return ko(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return Se(d,function(n){var r=\"_.\"+n[0];e&n[1]&&!Ie(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(ot);return e?e[1].split(at):[]}(r),n)))}function zo(t){var e=0,n=0;return function(){var i=gn(),o=16-(i-n);if(n=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(r,arguments)}}function Eo(t,e){var n=-1,i=t.length,o=i-1;for(e=e===r?i:e;++n<e;){var a=Vr(n,o),u=t[a];t[a]=t[n],t[n]=u}return t.length=e,t}var Ro,No,Do=(Ro=Ra(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(Y,function(t,n,r,i){e.push(r?i.replace(st,\"$1\"):n||t)}),e},function(t){return 500===No.size&&No.clear(),t}),No=Ro.cache,Ro);function Fo(t){if(\"string\"==typeof t||uu(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function To(t){if(null!=t){try{return Et.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Lo(t){if(t instanceof Bn)return t.clone();var e=new qn(t.__wrapped__,t.__chain__);return e.__actions__=Ai(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Uo=Hr(function(t,e){return Ka(t)?sr(t,yr(e,1,Ka,!0)):[]}),Mo=Hr(function(t,e){var n=Go(e);return Ka(n)&&(n=r),Ka(t)?sr(t,yr(e,1,Ka,!0),oo(n,2)):[]}),qo=Hr(function(t,e){var n=Go(e);return Ka(n)&&(n=r),Ka(t)?sr(t,yr(e,1,Ka,!0),r,n):[]});function Bo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:du(n);return i<0&&(i=vn(r+i,0)),Te(t,oo(e,3),i)}function $o(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return n!==r&&(o=du(n),o=n<0?vn(i+o,0):_n(o,i-1)),Te(t,oo(e,3),o,!0)}function Wo(t){return null!=t&&t.length?yr(t,1):[]}function Vo(t){return t&&t.length?t[0]:r}var Ko=Hr(function(t){var e=Pe(t,hi);return e.length&&e[0]===t[0]?xr(e):[]}),Ho=Hr(function(t){var e=Go(t),n=Pe(t,hi);return e===Go(n)?e=r:n.pop(),n.length&&n[0]===t[0]?xr(n,oo(e,2)):[]}),Jo=Hr(function(t){var e=Go(t),n=Pe(t,hi);return(e=\"function\"==typeof e?e:r)&&n.pop(),n.length&&n[0]===t[0]?xr(n,r,e):[]});function Go(t){var e=null==t?0:t.length;return e?t[e-1]:r}var Zo=Hr(Qo);function Qo(t,e){return t&&t.length&&e&&e.length?$r(t,e):t}var Xo=Yi(function(t,e){var n=null==t?0:t.length,r=ir(t,e);return Wr(t,Pe(e,function(t){return vo(t,n)?+t:t}).sort(Oi)),r});function Yo(t){return null==t?t:wn.call(t)}var ta=Hr(function(t){return ui(yr(t,1,Ka,!0))}),ea=Hr(function(t){var e=Go(t);return Ka(e)&&(e=r),ui(yr(t,1,Ka,!0),oo(e,2))}),na=Hr(function(t){var e=Go(t);return e=\"function\"==typeof e?e:r,ui(yr(t,1,Ka,!0),r,e)});function ra(t){if(!t||!t.length)return[];var e=0;return t=xe(t,function(t){if(Ka(t))return e=vn(t.length,e),!0}),Ke(e,function(e){return Pe(t,Be(e))})}function ia(t,e){if(!t||!t.length)return[];var n=ra(t);return null==e?n:Pe(n,function(t){return je(e,r,t)})}var oa=Hr(function(t,e){return Ka(t)?sr(t,e):[]}),aa=Hr(function(t){return pi(xe(t,Ka))}),ua=Hr(function(t){var e=Go(t);return Ka(e)&&(e=r),pi(xe(t,Ka),oo(e,2))}),ca=Hr(function(t){var e=Go(t);return e=\"function\"==typeof e?e:r,pi(xe(t,Ka),r,e)}),sa=Hr(ra),fa=Hr(function(t){var e=t.length,n=e>1?t[e-1]:r;return n=\"function\"==typeof n?(t.pop(),n):r,ia(t,n)});function la(t){var e=Ln(t);return e.__chain__=!0,e}function pa(t,e){return e(t)}var da=Yi(function(t){var e=t.length,n=e?t[0]:0,i=this.__wrapped__,o=function(e){return ir(e,t)};return!(e>1||this.__actions__.length)&&i instanceof Bn&&vo(n)?((i=i.slice(n,+n+(e?1:0))).__actions__.push({func:pa,args:[o],thisArg:r}),new qn(i,this.__chain__).thru(function(t){return e&&!t.length&&t.push(r),t})):this.thru(o)}),ha=Ii(function(t,e,n){Rt.call(t,n)?++t[n]:rr(t,n,1)}),ya=Di(Bo),va=Di($o);function _a(t,e){return($a(t)?Se:fr)(t,oo(e,3))}function ga(t,e){return($a(t)?Ce:lr)(t,oo(e,3))}var ma=Ii(function(t,e,n){Rt.call(t,n)?t[n].push(e):rr(t,n,[e])}),ba=Hr(function(t,e,n){var r=-1,i=\"function\"==typeof e,o=Va(t)?rt(t.length):[];return fr(t,function(t){o[++r]=i?je(e,t,n):Ir(t,e,n)}),o}),wa=Ii(function(t,e,n){rr(t,n,e)});function ja(t,e){return($a(t)?Pe:Fr)(t,oo(e,3))}var Oa=Ii(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),Sa=Hr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&_o(t,e[0],e[1])?e=[]:n>2&&_o(e[0],e[1],e[2])&&(e=[e[0]]),qr(t,yr(e,1),[])}),Ca=se||function(){return fe.Date.now()};function Aa(t,e,n){return e=n?r:e,e=t&&null==e?t.length:e,Ji(t,c,r,r,r,r,e)}function xa(t,e){var n;if(\"function\"!=typeof e)throw new xt(i);return t=du(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=r),n}}var Ia=Hr(function(t,e,n){var r=1;if(n.length){var i=an(n,io(Ia));r|=u}return Ji(t,r,e,n,i)}),ka=Hr(function(t,e,n){var r=3;if(n.length){var i=an(n,io(ka));r|=u}return Ji(e,r,t,n,i)});function Pa(t,e,n){var o,a,u,c,s,f,l=0,p=!1,d=!1,h=!0;if(\"function\"!=typeof t)throw new xt(i);function y(e){var n=o,i=a;return o=a=r,l=e,c=t.apply(i,n)}function v(t){var n=t-f;return f===r||n>=e||n<0||d&&t-l>=u}function _(){var t=Ca();if(v(t))return g(t);s=Io(_,function(t){var n=e-(t-f);return d?_n(n,u-(t-l)):n}(t))}function g(t){return s=r,h&&o?y(t):(o=a=r,c)}function m(){var t=Ca(),n=v(t);if(o=arguments,a=this,f=t,n){if(s===r)return function(t){return l=t,s=Io(_,e),p?y(t):c}(f);if(d)return mi(s),s=Io(_,e),y(f)}return s===r&&(s=Io(_,e)),c}return e=yu(e)||0,Ya(n)&&(p=!!n.leading,u=(d=\"maxWait\"in n)?vn(yu(n.maxWait)||0,e):u,h=\"trailing\"in n?!!n.trailing:h),m.cancel=function(){s!==r&&mi(s),l=0,o=f=a=s=r},m.flush=function(){return s===r?c:g(Ca())},m}var za=Hr(function(t,e){return cr(t,1,e)}),Ea=Hr(function(t,e,n){return cr(t,yu(e)||0,n)});function Ra(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new xt(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(Ra.Cache||Vn),n}function Na(t){if(\"function\"!=typeof t)throw new xt(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Ra.Cache=Vn;var Da=_i(function(t,e){var n=(e=1==e.length&&$a(e[0])?Pe(e[0],Je(oo())):Pe(yr(e,1),Je(oo()))).length;return Hr(function(r){for(var i=-1,o=_n(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return je(t,this,r)})}),Fa=Hr(function(t,e){var n=an(e,io(Fa));return Ji(t,u,r,e,n)}),Ta=Hr(function(t,e){var n=an(e,io(Ta));return Ji(t,64,r,e,n)}),La=Yi(function(t,e){return Ji(t,256,r,r,r,e)});function Ua(t,e){return t===e||t!=t&&e!=e}var Ma=$i(Sr),qa=$i(function(t,e){return t>=e}),Ba=kr(function(){return arguments}())?kr:function(t){return tu(t)&&Rt.call(t,\"callee\")&&!Kt.call(t,\"callee\")},$a=rt.isArray,Wa=ve?Je(ve):function(t){return tu(t)&&Or(t)==P};function Va(t){return null!=t&&Xa(t.length)&&!Za(t)}function Ka(t){return tu(t)&&Va(t)}var Ha=De||yc,Ja=_e?Je(_e):function(t){return tu(t)&&Or(t)==_};function Ga(t){if(!tu(t))return!1;var e=Or(t);return e==g||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ru(t)}function Za(t){if(!Ya(t))return!1;var e=Or(t);return e==m||e==b||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Qa(t){return\"number\"==typeof t&&t==du(t)}function Xa(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=f}function Ya(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function tu(t){return null!=t&&\"object\"==typeof t}var eu=ge?Je(ge):function(t){return tu(t)&&lo(t)==w};function nu(t){return\"number\"==typeof t||tu(t)&&Or(t)==j}function ru(t){if(!tu(t)||Or(t)!=O)return!1;var e=Wt(t);if(null===e)return!0;var n=Rt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&Et.call(n)==Tt}var iu=me?Je(me):function(t){return tu(t)&&Or(t)==C},ou=be?Je(be):function(t){return tu(t)&&lo(t)==A};function au(t){return\"string\"==typeof t||!$a(t)&&tu(t)&&Or(t)==x}function uu(t){return\"symbol\"==typeof t||tu(t)&&Or(t)==I}var cu=we?Je(we):function(t){return tu(t)&&Xa(t.length)&&!!re[Or(t)]},su=$i(Dr),fu=$i(function(t,e){return t<=e});function lu(t){if(!t)return[];if(Va(t))return au(t)?fn(t):Ai(t);if(Qt&&t[Qt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Qt]());var e=lo(t);return(e==w?rn:e==A?un:Uu)(t)}function pu(t){return t?(t=yu(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function du(t){var e=pu(t),n=e%1;return e==e?n?e-n:e:0}function hu(t){return t?or(du(t),0,p):0}function yu(t){if(\"number\"==typeof t)return t;if(uu(t))return l;if(Ya(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=Ya(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=He(t);var n=dt.test(t);return n||yt.test(t)?ue(t.slice(2),n?2:8):pt.test(t)?l:+t}function vu(t){return xi(t,zu(t))}function _u(t){return null==t?\"\":ai(t)}var gu=ki(function(t,e){if(wo(e)||Va(e))xi(e,Pu(e),t);else for(var n in e)Rt.call(e,n)&&Yn(t,n,e[n])}),mu=ki(function(t,e){xi(e,zu(e),t)}),bu=ki(function(t,e,n,r){xi(e,zu(e),t,r)}),wu=ki(function(t,e,n,r){xi(e,Pu(e),t,r)}),ju=Yi(ir),Ou=Hr(function(t,e){t=St(t);var n=-1,i=e.length,o=i>2?e[2]:r;for(o&&_o(e[0],e[1],o)&&(i=1);++n<i;)for(var a=e[n],u=zu(a),c=-1,s=u.length;++c<s;){var f=u[c],l=t[f];(l===r||Ua(l,Pt[f])&&!Rt.call(t,f))&&(t[f]=a[f])}return t}),Su=Hr(function(t){return t.push(r,Zi),je(Ru,r,t)});function Cu(t,e,n){var i=null==t?r:wr(t,e);return i===r?n:i}function Au(t,e){return null!=t&&po(t,e,Ar)}var xu=Li(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Ft.call(e)),t[e]=n},Yu(nc)),Iu=Li(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Ft.call(e)),Rt.call(t,e)?t[e].push(n):t[e]=[n]},oo),ku=Hr(Ir);function Pu(t){return Va(t)?Jn(t):Nr(t)}function zu(t){return Va(t)?Jn(t,!0):function(t){if(!Ya(t))return function(t){var e=[];if(null!=t)for(var n in St(t))e.push(n);return e}(t);var e=wo(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&Rt.call(t,r))&&n.push(r);return n}(t)}var Eu=ki(function(t,e,n){Ur(t,e,n)}),Ru=ki(function(t,e,n,r){Ur(t,e,n,r)}),Nu=Yi(function(t,e){var n={};if(null==t)return n;var r=!1;e=Pe(e,function(e){return e=vi(e,t),r||(r=e.length>1),e}),xi(t,eo(t),n),r&&(n=ar(n,7,Qi));for(var i=e.length;i--;)ci(n,e[i]);return n}),Du=Yi(function(t,e){return null==t?{}:function(t,e){return Br(t,e,function(e,n){return Au(t,n)})}(t,e)});function Fu(t,e){if(null==t)return{};var n=Pe(eo(t),function(t){return[t]});return e=oo(e),Br(t,n,function(t,n){return e(t,n[0])})}var Tu=Hi(Pu),Lu=Hi(zu);function Uu(t){return null==t?[]:Ge(t,Pu(t))}var Mu=Ri(function(t,e,n){return e=e.toLowerCase(),t+(n?qu(e):e)});function qu(t){return Gu(_u(t).toLowerCase())}function Bu(t){return(t=_u(t))&&t.replace(_t,Ye).replace(Zt,\"\")}var $u=Ri(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Wu=Ri(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),Vu=Ei(\"toLowerCase\"),Ku=Ri(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Hu=Ri(function(t,e,n){return t+(n?\" \":\"\")+Gu(e)}),Ju=Ri(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Gu=Ei(\"toUpperCase\");function Zu(t,e,n){return t=_u(t),(e=n?r:e)===r?function(t){return te.test(t)}(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.match(ut)||[]}(t):t.match(e)||[]}var Qu=Hr(function(t,e){try{return je(t,r,e)}catch(t){return Ga(t)?t:new wt(t)}}),Xu=Yi(function(t,e){return Se(e,function(e){e=Fo(e),rr(t,e,Ia(t[e],t))}),t});function Yu(t){return function(){return t}}var tc=Fi(),ec=Fi(!0);function nc(t){return t}function rc(t){return Rr(\"function\"==typeof t?t:ar(t,1))}var ic=Hr(function(t,e){return function(n){return Ir(n,t,e)}}),oc=Hr(function(t,e){return function(n){return Ir(t,n,e)}});function ac(t,e,n){var r=Pu(e),i=br(e,r);null!=n||Ya(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=br(e,Pu(e)));var o=!(Ya(n)&&\"chain\"in n&&!n.chain),a=Za(t);return Se(i,function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Ai(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,ze([this.value()],arguments))})}),t}function uc(){}var cc=Mi(Pe),sc=Mi(Ae),fc=Mi(Ne);function lc(t){return go(t)?Be(Fo(t)):function(t){return function(e){return wr(e,t)}}(t)}var pc=Bi(),dc=Bi(!0);function hc(){return[]}function yc(){return!1}var vc,_c=Ui(function(t,e){return t+e},0),gc=Vi(\"ceil\"),mc=Ui(function(t,e){return t/e},1),bc=Vi(\"floor\"),wc=Ui(function(t,e){return t*e},1),jc=Vi(\"round\"),Oc=Ui(function(t,e){return t-e},0);return Ln.after=function(t,e){if(\"function\"!=typeof e)throw new xt(i);return t=du(t),function(){if(--t<1)return e.apply(this,arguments)}},Ln.ary=Aa,Ln.assign=gu,Ln.assignIn=mu,Ln.assignInWith=bu,Ln.assignWith=wu,Ln.at=ju,Ln.before=xa,Ln.bind=Ia,Ln.bindAll=Xu,Ln.bindKey=ka,Ln.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return $a(t)?t:[t]},Ln.chain=la,Ln.chunk=function(t,e,n){e=(n?_o(t,e,n):e===r)?1:vn(du(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,a=0,u=rt(pe(i/e));o<i;)u[a++]=ti(t,o,o+=e);return u},Ln.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i},Ln.concat=function(){var t=arguments.length;if(!t)return[];for(var e=rt(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return ze($a(n)?Ai(n):[n],yr(e,1))},Ln.cond=function(t){var e=null==t?0:t.length,n=oo();return t=e?Pe(t,function(t){if(\"function\"!=typeof t[1])throw new xt(i);return[n(t[0]),t[1]]}):[],Hr(function(n){for(var r=-1;++r<e;){var i=t[r];if(je(i[0],this,n))return je(i[1],this,n)}})},Ln.conforms=function(t){return function(t){var e=Pu(t);return function(n){return ur(n,t,e)}}(ar(t,1))},Ln.constant=Yu,Ln.countBy=ha,Ln.create=function(t,e){var n=Un(t);return null==e?n:nr(n,e)},Ln.curry=function t(e,n,i){var o=Ji(e,8,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Ln.curryRight=function t(e,n,i){var o=Ji(e,16,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Ln.debounce=Pa,Ln.defaults=Ou,Ln.defaultsDeep=Su,Ln.defer=za,Ln.delay=Ea,Ln.difference=Uo,Ln.differenceBy=Mo,Ln.differenceWith=qo,Ln.drop=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=n||e===r?1:du(e))<0?0:e,i):[]},Ln.dropRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,0,(e=i-(e=n||e===r?1:du(e)))<0?0:e):[]},Ln.dropRightWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!0,!0):[]},Ln.dropWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!0):[]},Ln.fill=function(t,e,n,i){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&_o(t,e,n)&&(n=0,i=o),function(t,e,n,i){var o=t.length;for((n=du(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:du(i))<0&&(i+=o),i=n>i?0:hu(i);n<i;)t[n++]=e;return t}(t,e,n,i)):[]},Ln.filter=function(t,e){return($a(t)?xe:hr)(t,oo(e,3))},Ln.flatMap=function(t,e){return yr(ja(t,e),1)},Ln.flatMapDeep=function(t,e){return yr(ja(t,e),s)},Ln.flatMapDepth=function(t,e,n){return n=n===r?1:du(n),yr(ja(t,e),n)},Ln.flatten=Wo,Ln.flattenDeep=function(t){return null!=t&&t.length?yr(t,s):[]},Ln.flattenDepth=function(t,e){return null!=t&&t.length?yr(t,e=e===r?1:du(e)):[]},Ln.flip=function(t){return Ji(t,512)},Ln.flow=tc,Ln.flowRight=ec,Ln.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];rr(r,i[0],i[1])}return r},Ln.functions=function(t){return null==t?[]:br(t,Pu(t))},Ln.functionsIn=function(t){return null==t?[]:br(t,zu(t))},Ln.groupBy=ma,Ln.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Ln.intersection=Ko,Ln.intersectionBy=Ho,Ln.intersectionWith=Jo,Ln.invert=xu,Ln.invertBy=Iu,Ln.invokeMap=ba,Ln.iteratee=rc,Ln.keyBy=wa,Ln.keys=Pu,Ln.keysIn=zu,Ln.map=ja,Ln.mapKeys=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,e(t,r,i),t)}),n},Ln.mapValues=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,r,e(t,r,i))}),n},Ln.matches=function(t){return Tr(ar(t,1))},Ln.matchesProperty=function(t,e){return Lr(t,ar(e,1))},Ln.memoize=Ra,Ln.merge=Eu,Ln.mergeWith=Ru,Ln.method=ic,Ln.methodOf=oc,Ln.mixin=ac,Ln.negate=Na,Ln.nthArg=function(t){return t=du(t),Hr(function(e){return Mr(e,t)})},Ln.omit=Nu,Ln.omitBy=function(t,e){return Fu(t,Na(oo(e)))},Ln.once=function(t){return xa(2,t)},Ln.orderBy=function(t,e,n,i){return null==t?[]:($a(e)||(e=null==e?[]:[e]),$a(n=i?r:n)||(n=null==n?[]:[n]),qr(t,e,n))},Ln.over=cc,Ln.overArgs=Da,Ln.overEvery=sc,Ln.overSome=fc,Ln.partial=Fa,Ln.partialRight=Ta,Ln.partition=Oa,Ln.pick=Du,Ln.pickBy=Fu,Ln.property=lc,Ln.propertyOf=function(t){return function(e){return null==t?r:wr(t,e)}},Ln.pull=Zo,Ln.pullAll=Qo,Ln.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?$r(t,e,oo(n,2)):t},Ln.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?$r(t,e,r,n):t},Ln.pullAt=Xo,Ln.range=pc,Ln.rangeRight=dc,Ln.rearg=La,Ln.reject=function(t,e){return($a(t)?xe:hr)(t,Na(oo(e,3)))},Ln.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=oo(e,3);++r<o;){var a=t[r];e(a,r,t)&&(n.push(a),i.push(r))}return Wr(t,i),n},Ln.rest=function(t,e){if(\"function\"!=typeof t)throw new xt(i);return Hr(t,e=e===r?e:du(e))},Ln.reverse=Yo,Ln.sampleSize=function(t,e,n){return e=(n?_o(t,e,n):e===r)?1:du(e),($a(t)?Zn:Gr)(t,e)},Ln.set=function(t,e,n){return null==t?t:Zr(t,e,n)},Ln.setWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:Zr(t,e,n,i)},Ln.shuffle=function(t){return($a(t)?Qn:Yr)(t)},Ln.slice=function(t,e,n){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&_o(t,e,n)?(e=0,n=i):(e=null==e?0:du(e),n=n===r?i:du(n)),ti(t,e,n)):[]},Ln.sortBy=Sa,Ln.sortedUniq=function(t){return t&&t.length?ii(t):[]},Ln.sortedUniqBy=function(t,e){return t&&t.length?ii(t,oo(e,2)):[]},Ln.split=function(t,e,n){return n&&\"number\"!=typeof n&&_o(t,e,n)&&(e=n=r),(n=n===r?p:n>>>0)?(t=_u(t))&&(\"string\"==typeof e||null!=e&&!iu(e))&&!(e=ai(e))&&nn(t)?gi(fn(t),0,n):t.split(e,n):[]},Ln.spread=function(t,e){if(\"function\"!=typeof t)throw new xt(i);return e=null==e?0:vn(du(e),0),Hr(function(n){var r=n[e],i=gi(n,0,e);return r&&ze(i,r),je(t,this,i)})},Ln.tail=function(t){var e=null==t?0:t.length;return e?ti(t,1,e):[]},Ln.take=function(t,e,n){return t&&t.length?ti(t,0,(e=n||e===r?1:du(e))<0?0:e):[]},Ln.takeRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=i-(e=n||e===r?1:du(e)))<0?0:e,i):[]},Ln.takeRightWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!1,!0):[]},Ln.takeWhile=function(t,e){return t&&t.length?fi(t,oo(e,3)):[]},Ln.tap=function(t,e){return e(t),t},Ln.throttle=function(t,e,n){var r=!0,o=!0;if(\"function\"!=typeof t)throw new xt(i);return Ya(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),Pa(t,e,{leading:r,maxWait:e,trailing:o})},Ln.thru=pa,Ln.toArray=lu,Ln.toPairs=Tu,Ln.toPairsIn=Lu,Ln.toPath=function(t){return $a(t)?Pe(t,Fo):uu(t)?[t]:Ai(Do(_u(t)))},Ln.toPlainObject=vu,Ln.transform=function(t,e,n){var r=$a(t),i=r||Ha(t)||cu(t);if(e=oo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Ya(t)&&Za(o)?Un(Wt(t)):{}}return(i?Se:gr)(t,function(t,r,i){return e(n,t,r,i)}),n},Ln.unary=function(t){return Aa(t,1)},Ln.union=ta,Ln.unionBy=ea,Ln.unionWith=na,Ln.uniq=function(t){return t&&t.length?ui(t):[]},Ln.uniqBy=function(t,e){return t&&t.length?ui(t,oo(e,2)):[]},Ln.uniqWith=function(t,e){return e=\"function\"==typeof e?e:r,t&&t.length?ui(t,r,e):[]},Ln.unset=function(t,e){return null==t||ci(t,e)},Ln.unzip=ra,Ln.unzipWith=ia,Ln.update=function(t,e,n){return null==t?t:si(t,e,yi(n))},Ln.updateWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:si(t,e,yi(n),i)},Ln.values=Uu,Ln.valuesIn=function(t){return null==t?[]:Ge(t,zu(t))},Ln.without=oa,Ln.words=Zu,Ln.wrap=function(t,e){return Fa(yi(e),t)},Ln.xor=aa,Ln.xorBy=ua,Ln.xorWith=ca,Ln.zip=sa,Ln.zipObject=function(t,e){return di(t||[],e||[],Yn)},Ln.zipObjectDeep=function(t,e){return di(t||[],e||[],Zr)},Ln.zipWith=fa,Ln.entries=Tu,Ln.entriesIn=Lu,Ln.extend=mu,Ln.extendWith=bu,ac(Ln,Ln),Ln.add=_c,Ln.attempt=Qu,Ln.camelCase=Mu,Ln.capitalize=qu,Ln.ceil=gc,Ln.clamp=function(t,e,n){return n===r&&(n=e,e=r),n!==r&&(n=(n=yu(n))==n?n:0),e!==r&&(e=(e=yu(e))==e?e:0),or(yu(t),e,n)},Ln.clone=function(t){return ar(t,4)},Ln.cloneDeep=function(t){return ar(t,5)},Ln.cloneDeepWith=function(t,e){return ar(t,5,e=\"function\"==typeof e?e:r)},Ln.cloneWith=function(t,e){return ar(t,4,e=\"function\"==typeof e?e:r)},Ln.conformsTo=function(t,e){return null==e||ur(t,e,Pu(e))},Ln.deburr=Bu,Ln.defaultTo=function(t,e){return null==t||t!=t?e:t},Ln.divide=mc,Ln.endsWith=function(t,e,n){t=_u(t),e=ai(e);var i=t.length,o=n=n===r?i:or(du(n),0,i);return(n-=e.length)>=0&&t.slice(n,o)==e},Ln.eq=Ua,Ln.escape=function(t){return(t=_u(t))&&H.test(t)?t.replace(V,tn):t},Ln.escapeRegExp=function(t){return(t=_u(t))&&et.test(t)?t.replace(tt,\"\\\\$&\"):t},Ln.every=function(t,e,n){var i=$a(t)?Ae:pr;return n&&_o(t,e,n)&&(e=r),i(t,oo(e,3))},Ln.find=ya,Ln.findIndex=Bo,Ln.findKey=function(t,e){return Fe(t,oo(e,3),gr)},Ln.findLast=va,Ln.findLastIndex=$o,Ln.findLastKey=function(t,e){return Fe(t,oo(e,3),mr)},Ln.floor=bc,Ln.forEach=_a,Ln.forEachRight=ga,Ln.forIn=function(t,e){return null==t?t:vr(t,oo(e,3),zu)},Ln.forInRight=function(t,e){return null==t?t:_r(t,oo(e,3),zu)},Ln.forOwn=function(t,e){return t&&gr(t,oo(e,3))},Ln.forOwnRight=function(t,e){return t&&mr(t,oo(e,3))},Ln.get=Cu,Ln.gt=Ma,Ln.gte=qa,Ln.has=function(t,e){return null!=t&&po(t,e,Cr)},Ln.hasIn=Au,Ln.head=Vo,Ln.identity=nc,Ln.includes=function(t,e,n,r){t=Va(t)?t:Uu(t),n=n&&!r?du(n):0;var i=t.length;return n<0&&(n=vn(i+n,0)),au(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&Le(t,e,n)>-1},Ln.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:du(n);return i<0&&(i=vn(r+i,0)),Le(t,e,i)},Ln.inRange=function(t,e,n){return e=pu(e),n===r?(n=e,e=0):n=pu(n),function(t,e,n){return t>=_n(e,n)&&t<vn(e,n)}(t=yu(t),e,n)},Ln.invoke=ku,Ln.isArguments=Ba,Ln.isArray=$a,Ln.isArrayBuffer=Wa,Ln.isArrayLike=Va,Ln.isArrayLikeObject=Ka,Ln.isBoolean=function(t){return!0===t||!1===t||tu(t)&&Or(t)==v},Ln.isBuffer=Ha,Ln.isDate=Ja,Ln.isElement=function(t){return tu(t)&&1===t.nodeType&&!ru(t)},Ln.isEmpty=function(t){if(null==t)return!0;if(Va(t)&&($a(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Ha(t)||cu(t)||Ba(t)))return!t.length;var e=lo(t);if(e==w||e==A)return!t.size;if(wo(t))return!Nr(t).length;for(var n in t)if(Rt.call(t,n))return!1;return!0},Ln.isEqual=function(t,e){return Pr(t,e)},Ln.isEqualWith=function(t,e,n){var i=(n=\"function\"==typeof n?n:r)?n(t,e):r;return i===r?Pr(t,e,r,n):!!i},Ln.isError=Ga,Ln.isFinite=function(t){return\"number\"==typeof t&&$e(t)},Ln.isFunction=Za,Ln.isInteger=Qa,Ln.isLength=Xa,Ln.isMap=eu,Ln.isMatch=function(t,e){return t===e||zr(t,e,uo(e))},Ln.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:r,zr(t,e,uo(e),n)},Ln.isNaN=function(t){return nu(t)&&t!=+t},Ln.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Er(t)},Ln.isNil=function(t){return null==t},Ln.isNull=function(t){return null===t},Ln.isNumber=nu,Ln.isObject=Ya,Ln.isObjectLike=tu,Ln.isPlainObject=ru,Ln.isRegExp=iu,Ln.isSafeInteger=function(t){return Qa(t)&&t>=-9007199254740991&&t<=f},Ln.isSet=ou,Ln.isString=au,Ln.isSymbol=uu,Ln.isTypedArray=cu,Ln.isUndefined=function(t){return t===r},Ln.isWeakMap=function(t){return tu(t)&&lo(t)==k},Ln.isWeakSet=function(t){return tu(t)&&\"[object WeakSet]\"==Or(t)},Ln.join=function(t,e){return null==t?\"\":hn.call(t,e)},Ln.kebabCase=$u,Ln.last=Go,Ln.lastIndexOf=function(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=du(n))<0?vn(i+o,0):_n(o,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Te(t,Me,o,!0)},Ln.lowerCase=Wu,Ln.lowerFirst=Vu,Ln.lt=su,Ln.lte=fu,Ln.max=function(t){return t&&t.length?dr(t,nc,Sr):r},Ln.maxBy=function(t,e){return t&&t.length?dr(t,oo(e,2),Sr):r},Ln.mean=function(t){return qe(t,nc)},Ln.meanBy=function(t,e){return qe(t,oo(e,2))},Ln.min=function(t){return t&&t.length?dr(t,nc,Dr):r},Ln.minBy=function(t,e){return t&&t.length?dr(t,oo(e,2),Dr):r},Ln.stubArray=hc,Ln.stubFalse=yc,Ln.stubObject=function(){return{}},Ln.stubString=function(){return\"\"},Ln.stubTrue=function(){return!0},Ln.multiply=wc,Ln.nth=function(t,e){return t&&t.length?Mr(t,du(e)):r},Ln.noConflict=function(){return fe._===this&&(fe._=Lt),this},Ln.noop=uc,Ln.now=Ca,Ln.pad=function(t,e,n){t=_u(t);var r=(e=du(e))?sn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return qi(he(i),n)+t+qi(pe(i),n)},Ln.padEnd=function(t,e,n){t=_u(t);var r=(e=du(e))?sn(t):0;return e&&r<e?t+qi(e-r,n):t},Ln.padStart=function(t,e,n){t=_u(t);var r=(e=du(e))?sn(t):0;return e&&r<e?qi(e-r,n)+t:t},Ln.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),mn(_u(t).replace(nt,\"\"),e||0)},Ln.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&_o(t,e,n)&&(e=n=r),n===r&&(\"boolean\"==typeof e?(n=e,e=r):\"boolean\"==typeof t&&(n=t,t=r)),t===r&&e===r?(t=0,e=1):(t=pu(t),e===r?(e=t,t=0):e=pu(e)),t>e){var i=t;t=e,e=i}if(n||t%1||e%1){var o=bn();return _n(t+o*(e-t+ae(\"1e-\"+((o+\"\").length-1))),e)}return Vr(t,e)},Ln.reduce=function(t,e,n){var r=$a(t)?Ee:We,i=arguments.length<3;return r(t,oo(e,4),n,i,fr)},Ln.reduceRight=function(t,e,n){var r=$a(t)?Re:We,i=arguments.length<3;return r(t,oo(e,4),n,i,lr)},Ln.repeat=function(t,e,n){return e=(n?_o(t,e,n):e===r)?1:du(e),Kr(_u(t),e)},Ln.replace=function(){var t=arguments,e=_u(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Ln.result=function(t,e,n){var i=-1,o=(e=vi(e,t)).length;for(o||(o=1,t=r);++i<o;){var a=null==t?r:t[Fo(e[i])];a===r&&(i=o,a=n),t=Za(a)?a.call(t):a}return t},Ln.round=jc,Ln.runInContext=t,Ln.sample=function(t){return($a(t)?Gn:Jr)(t)},Ln.size=function(t){if(null==t)return 0;if(Va(t))return au(t)?sn(t):t.length;var e=lo(t);return e==w||e==A?t.size:Nr(t).length},Ln.snakeCase=Ku,Ln.some=function(t,e,n){var i=$a(t)?Ne:ei;return n&&_o(t,e,n)&&(e=r),i(t,oo(e,3))},Ln.sortedIndex=function(t,e){return ni(t,e)},Ln.sortedIndexBy=function(t,e,n){return ri(t,e,oo(n,2))},Ln.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=ni(t,e);if(r<n&&Ua(t[r],e))return r}return-1},Ln.sortedLastIndex=function(t,e){return ni(t,e,!0)},Ln.sortedLastIndexBy=function(t,e,n){return ri(t,e,oo(n,2),!0)},Ln.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=ni(t,e,!0)-1;if(Ua(t[n],e))return n}return-1},Ln.startCase=Hu,Ln.startsWith=function(t,e,n){return t=_u(t),n=null==n?0:or(du(n),0,t.length),e=ai(e),t.slice(n,n+e.length)==e},Ln.subtract=Oc,Ln.sum=function(t){return t&&t.length?Ve(t,nc):0},Ln.sumBy=function(t,e){return t&&t.length?Ve(t,oo(e,2)):0},Ln.template=function(t,e,n){var i=Ln.templateSettings;n&&_o(t,e,n)&&(e=r),t=_u(t),e=wu({},e,i,Gi);var o=wu({},e.imports,i.imports,Gi),a=Pu(o),u=Ge(o,a);Se(a,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,f=0,l=e.interpolate||gt,p=\"__p += '\",d=Ct((e.escape||gt).source+\"|\"+l.source+\"|\"+(l===Z?ft:gt).source+\"|\"+(e.evaluate||gt).source+\"|$\",\"g\"),h=\"//# sourceURL=\"+(Rt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ne+\"]\")+\"\\n\";t.replace(d,function(e,n,r,i,o,a){return r||(r=i),p+=t.slice(f,a).replace(mt,en),n&&(c=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(s=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),f=a+e.length,e}),p+=\"';\\n\";var y=Rt.call(e,\"variable\")&&e.variable;if(y){if(ct.test(y))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(q,\"\"):p).replace(B,\"$1\").replace($,\"$1;\"),p=\"function(\"+(y||\"obj\")+\") {\\n\"+(y?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var v=Qu(function(){return jt(a,h+\"return \"+p).apply(r,u)});if(v.source=p,Ga(v))throw v;return v},Ln.times=function(t,e){if((t=du(t))<1||t>f)return[];var n=p,r=_n(t,p);e=oo(e),t-=p;for(var i=Ke(r,e);++n<t;)e(n);return i},Ln.toFinite=pu,Ln.toInteger=du,Ln.toLength=hu,Ln.toLower=function(t){return _u(t).toLowerCase()},Ln.toNumber=yu,Ln.toSafeInteger=function(t){return t?or(du(t),-9007199254740991,f):0===t?t:0},Ln.toString=_u,Ln.toUpper=function(t){return _u(t).toUpperCase()},Ln.trim=function(t,e,n){if((t=_u(t))&&(n||e===r))return He(t);if(!t||!(e=ai(e)))return t;var i=fn(t),o=fn(e);return gi(i,Qe(i,o),Xe(i,o)+1).join(\"\")},Ln.trimEnd=function(t,e,n){if((t=_u(t))&&(n||e===r))return t.slice(0,ln(t)+1);if(!t||!(e=ai(e)))return t;var i=fn(t);return gi(i,0,Xe(i,fn(e))+1).join(\"\")},Ln.trimStart=function(t,e,n){if((t=_u(t))&&(n||e===r))return t.replace(nt,\"\");if(!t||!(e=ai(e)))return t;var i=fn(t);return gi(i,Qe(i,fn(e))).join(\"\")},Ln.truncate=function(t,e){var n=30,i=\"...\";if(Ya(e)){var o=\"separator\"in e?e.separator:o;n=\"length\"in e?du(e.length):n,i=\"omission\"in e?ai(e.omission):i}var a=(t=_u(t)).length;if(nn(t)){var u=fn(t);a=u.length}if(n>=a)return t;var c=n-sn(i);if(c<1)return i;var s=u?gi(u,0,c).join(\"\"):t.slice(0,c);if(o===r)return s+i;if(u&&(c+=s.length-c),iu(o)){if(t.slice(c).search(o)){var f,l=s;for(o.global||(o=Ct(o.source,_u(lt.exec(o))+\"g\")),o.lastIndex=0;f=o.exec(l);)var p=f.index;s=s.slice(0,p===r?c:p)}}else if(t.indexOf(ai(o),c)!=c){var d=s.lastIndexOf(o);d>-1&&(s=s.slice(0,d))}return s+i},Ln.unescape=function(t){return(t=_u(t))&&K.test(t)?t.replace(W,pn):t},Ln.uniqueId=function(t){var e=++Nt;return _u(t)+e},Ln.upperCase=Ju,Ln.upperFirst=Gu,Ln.each=_a,Ln.eachRight=ga,Ln.first=Vo,ac(Ln,(vc={},gr(Ln,function(t,e){Rt.call(Ln.prototype,e)||(vc[e]=t)}),vc),{chain:!1}),Ln.VERSION=\"4.18.1\",Se([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Ln[t].placeholder=Ln}),Se([\"drop\",\"take\"],function(t,e){Bn.prototype[t]=function(n){n=n===r?1:vn(du(n),0);var i=this.__filtered__&&!e?new Bn(this):this.clone();return i.__filtered__?i.__takeCount__=_n(n,i.__takeCount__):i.__views__.push({size:_n(n,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Bn.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),Se([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=1==n||3==n;Bn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:oo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),Se([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");Bn.prototype[t]=function(){return this[n](1).value()[0]}}),Se([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");Bn.prototype[t]=function(){return this.__filtered__?new Bn(this):this[n](1)}}),Bn.prototype.compact=function(){return this.filter(nc)},Bn.prototype.find=function(t){return this.filter(t).head()},Bn.prototype.findLast=function(t){return this.reverse().find(t)},Bn.prototype.invokeMap=Hr(function(t,e){return\"function\"==typeof t?new Bn(this):this.map(function(n){return Ir(n,t,e)})}),Bn.prototype.reject=function(t){return this.filter(Na(oo(t)))},Bn.prototype.slice=function(t,e){t=du(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Bn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==r&&(n=(e=du(e))<0?n.dropRight(-e):n.take(e-t)),n)},Bn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Bn.prototype.toArray=function(){return this.take(p)},gr(Bn.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Ln[i?\"take\"+(\"last\"==e?\"Right\":\"\"):e],a=i||/^find/.test(e);o&&(Ln.prototype[e]=function(){var e=this.__wrapped__,u=i?[1]:arguments,c=e instanceof Bn,s=u[0],f=c||$a(e),l=function(t){var e=o.apply(Ln,ze([t],u));return i&&p?e[0]:e};f&&n&&\"function\"==typeof s&&1!=s.length&&(c=f=!1);var p=this.__chain__,d=!!this.__actions__.length,h=a&&!p,y=c&&!d;if(!a&&f){e=y?e:new Bn(this);var v=t.apply(e,u);return v.__actions__.push({func:pa,args:[l],thisArg:r}),new qn(v,p)}return h&&y?t.apply(this,u):(v=this.thru(l),h?i?v.value()[0]:v.value():v)})}),Se([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=It[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Ln.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply($a(i)?i:[],t)}return this[n](function(n){return e.apply($a(n)?n:[],t)})}}),gr(Bn.prototype,function(t,e){var n=Ln[e];if(n){var r=n.name+\"\";Rt.call(kn,r)||(kn[r]=[]),kn[r].push({name:e,func:n})}}),kn[Ti(r,2).name]=[{name:\"wrapper\",func:r}],Bn.prototype.clone=function(){var t=new Bn(this.__wrapped__);return t.__actions__=Ai(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ai(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ai(this.__views__),t},Bn.prototype.reverse=function(){if(this.__filtered__){var t=new Bn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Bn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=$a(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case\"drop\":t+=a;break;case\"dropRight\":e-=a;break;case\"take\":e=_n(e,t+a);break;case\"takeRight\":t=vn(t,e-a)}}return{start:t,end:e}}(0,i,this.__views__),a=o.start,u=o.end,c=u-a,s=r?u:a-1,f=this.__iteratees__,l=f.length,p=0,d=_n(c,this.__takeCount__);if(!n||!r&&i==c&&d==c)return li(t,this.__actions__);var h=[];t:for(;c--&&p<d;){for(var y=-1,v=t[s+=e];++y<l;){var _=f[y],g=_.iteratee,m=_.type,b=g(v);if(2==m)v=b;else if(!b){if(1==m)continue t;break t}}h[p++]=v}return h},Ln.prototype.at=da,Ln.prototype.chain=function(){return la(this)},Ln.prototype.commit=function(){return new qn(this.value(),this.__chain__)},Ln.prototype.next=function(){this.__values__===r&&(this.__values__=lu(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Ln.prototype.plant=function(t){for(var e,n=this;n instanceof Mn;){var i=Lo(n);i.__index__=0,i.__values__=r,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e},Ln.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Bn){var e=t;return this.__actions__.length&&(e=new Bn(this)),(e=e.reverse()).__actions__.push({func:pa,args:[Yo],thisArg:r}),new qn(e,this.__chain__)}return this.thru(Yo)},Ln.prototype.toJSON=Ln.prototype.valueOf=Ln.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},Ln.prototype.first=Ln.prototype.head,Qt&&(Ln.prototype[Qt]=function(){return this}),Ln}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(fe._=dn,define(function(){return dn})):pe?((pe.exports=dn)._=dn,le._=dn):fe._=dn}.call(this)},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,e,n){\"use strict\";n.d(e,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createAdyenV2PaymentStrategy:()=>I,createAdyenV3PaymentStrategy:()=>E});var t=n(315);class e extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class i extends e{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class o{constructor(t,e,n=window){this._scriptLoader=t,this._stylesheetLoader=e,this._window=n}load(t){var e,n,r,o,a,u;return r=this,o=void 0,u=function*(){if(yield Promise.all([this._stylesheetLoader.loadStylesheet(`https://checkoutshopper-${null!==(e=t.environment)&&void 0!==e?e:\"\"}.adyen.com/checkoutshopper/sdk/3.10.1/adyen.css`,{prepend:!1,attributes:{integrity:\"sha384-8ofgICZZ/k5cC5N7xegqFZOA73H9RQ7H13439JfAZW8Gj3qjuKL2isaTD3GMIhDE\",crossorigin:\"anonymous\"}}),this._scriptLoader.loadScript(`https://checkoutshopper-${null!==(n=t.environment)&&void 0!==n?n:\"\"}.adyen.com/checkoutshopper/sdk/3.10.1/adyen.js`,{async:!0,attributes:{integrity:\"sha384-wG2z9zSQo61EIvyXmiFCo+zB3y0ZB4hsrXVcANmpP8HLthjoQJQPBh7tZKJSV8jA\",crossorigin:\"anonymous\"}})]),!this._window.AdyenCheckout)throw new i;return new this._window.AdyenCheckout(t)},new((a=void 0)||(a=Promise))(function(t,e){function n(t){try{c(u.next(t))}catch(t){e(t)}}function i(t){try{c(u.throw(t))}catch(t){e(t)}}function c(e){var r;e.done?t(e.value):(r=e.value,r instanceof a?r:new a(function(t){t(r)})).then(n,i)}c((u=u.apply(r,o||[])).next())})}}function a(t,e){return Object.assign(t,{resolveIds:e})}var u,c,s,f,l,p,d,h,y=n(9440);function v(t){return\"object\"==typeof t&&\"string\"==typeof t.data.paymentMethod.encryptedSecurityCode||\"string\"==typeof t.data.paymentMethod.encryptedExpiryMonth}!function(t){t.ThreeDS2Fingerprint=\"threeDS2Fingerprint\",t.ThreeDS2=\"threeDS2\",t.Redirect=\"redirect\",t.QRCode=\"qrCode\",t.Voucher=\"voucher\",t.Sdk=\"sdk\"}(u||(u={})),function(t){t.ThreeDS2Fingerprint=\"threeDS2Fingerprint\",t.ThreeDS2Challenge=\"threeDS2Challenge\",t.Redirect=\"redirect\",t.QRCode=\"qrCode\",t.Voucher=\"voucher\"}(c||(c={})),function(t){t.SecuredFields=\"securedfields\"}(s||(s={})),function(t){t.ACH=\"ach\",t.AliPay=\"alipay\",t.Bancontact=\"bcmc\",t.CreditCard=\"scheme\",t.Klarna=\"klarna\",t.KlarnaPayNow=\"klarna_paynow\",t.KlarnaAccount=\"klarna_account\",t.IDEAL=\"ideal\",t.GiroPay=\"giropay\",t.GooglePay=\"paywithgoogle\",t.SEPA=\"sepadirectdebit\",t.Sofort=\"directEbanking\",t.Vipps=\"vipps\",t.WeChatPayQR=\"wechatpayQR\"}(f||(f={})),function(t){t.POST=\"POST\"}(l||(l={})),function(t){t.ChallengeShopper=\"ChallengeShopper\",t.Error=\"Error\",t.IdentifyShopper=\"IdentifyShopper\"}(p||(p={})),function(t){t.CardNumber=\"encryptedCardNumber\",t.SecurityCode=\"encryptedSecurityCode\",t.ExpiryDate=\"encryptedExpiryDate\"}(d||(d={}));class _ extends e{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class g extends _{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(h||(h={}));class m extends e{constructor(t){super(function(t){switch(t){case h.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case h.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case h.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case h.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}function b(t){return Boolean(t.instrumentId)}function w(){const{navigator:t}=window;let e;return e=t.language?t.language:t.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof t.javaEnabled&&t.javaEnabled(),language:e,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}class j extends e{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class O extends e{constructor(t){super(t||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}const S=t=>\"object\"==typeof t&&null!==t&&\"body\"in t;class C extends e{constructor(t,e){super(e||\"Unable to proceed because the payment form contains invalid data.\"),this.details=t,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}var A=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{c(r.next(t))}catch(t){o(t)}}function u(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,u)}c((r=r.apply(t,e||[])).next())})};class x{constructor(t,e){this._paymentIntegrationService=t,this._scriptLoader=e}initialize(t){return A(this,void 0,void 0,function*(){const{adyenv2:e}=t;if(!e)throw new _('Unable to initialize payment because \"options.adyenv2\" argument is not provided.');this._paymentInitializeOptions=e;const n=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t.methodId),{originKey:r,clientKey:i,environment:o,paymentMethodsResponse:a}=n.initializationData||{},u={key:\"\",value:\"\"};return r?(u.key=\"originKey\",u.value=r):(u.key=\"clientKey\",u.value=i||\"\"),this._adyenClient=yield this._scriptLoader.load({environment:o,locale:this._paymentIntegrationService.getState().getLocale(),[u.key]:u.value,paymentMethodsResponse:a,translations:{es:{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-AR\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-ES\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-MX\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CL\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CO\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-PE\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"}}}),this._paymentComponent=yield this._mountPaymentComponent(n),n.method!==f.CreditCard&&n.method!==f.Bancontact||(this._cardVerificationComponent=yield this._mountCardVerificationComponent()),Promise.resolve()})}execute(t,e){return A(this,void 0,void 0,function*(){const{payment:n}=t,r=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]),i=n&&n.paymentData,o=i&&i.shouldSaveInstrument,a=i&&i.shouldSetAsDefaultInstrument;if(!n)return Promise.reject(new g([\"payment\"]));this._validateCardData(),yield this._paymentIntegrationService.submitOrder(r,e);const u=this._componentState;if(!u)throw new m(h.PaymentNotInitialized);if(i&&b(i)){let t={};if(v(u)){const{encryptedCardNumber:e,encryptedSecurityCode:n,encryptedExpiryMonth:r,encryptedExpiryYear:i}=u.data.paymentMethod;t={credit_card_number_confirmation:e,expiry_month:r,expiry_year:i,verification_value:n}}if(v(u)||-1!==[\"ideal\",\"sepadirectdebit\",\"directEbanking\",\"giropay\"].indexOf(u.data.paymentMethod.type))try{return void(yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:{formattedPayload:{bigpay_token:Object.assign(Object.assign({},t),{token:i.instrumentId}),origin:window.location.origin,browser_info:w(),set_as_default_stored_instrument:a||null}}})))}catch(t){return void(yield this._processAdditionalAction(t,o,a))}}try{yield this._paymentIntegrationService.submitPayment({methodId:n.methodId,paymentData:{formattedPayload:{credit_card_token:{token:JSON.stringify(Object.assign(Object.assign({},u.data.paymentMethod),{origin:window.location.origin}))},browser_info:w(),vault_payment_instrument:o||null,set_as_default_stored_instrument:a||null}}})}catch(t){yield this._processAdditionalAction(t,o,a)}})}finalize(){return Promise.reject(new j)}deinitialize(){return this._componentState=void 0,this._paymentComponent&&(this._paymentComponent.unmount(),this._paymentComponent=void 0),this._cardVerificationComponent&&(this._cardVerificationComponent.unmount(),this._cardVerificationComponent=void 0),Promise.resolve()}_getAdyenClient(){if(!this._adyenClient)throw new m(h.PaymentNotInitialized);return this._adyenClient}_getPaymentInitializeOptions(){if(!this._paymentInitializeOptions)throw new _('\"options.adyenv2\" argument was not provided during initialization.');return this._paymentInitializeOptions}_getThreeDS2ChallengeWidgetSize(){const{additionalActionOptions:t,threeDS2Options:e}=this._getPaymentInitializeOptions();return t.widgetSize||(null==e?void 0:e.widgetSize)||\"05\"}_handleAction(t){return new Promise((e,n)=>{const{threeDS2ContainerId:r,additionalActionOptions:i}=this._getPaymentInitializeOptions(),{onBeforeLoad:o,containerId:a,onLoad:u,onComplete:s}=i,f=JSON.parse(t.action),l=this._getAdyenClient().createFromAction(f,{onAdditionalDetails:t=>{const n={methodId:f.paymentMethodType,paymentData:{nonce:JSON.stringify(t.data)}};s&&s(),e(n)},size:this._getThreeDS2ChallengeWidgetSize(),onError:t=>n(t)});o&&o(f.type===c.ThreeDS2Challenge||f.type===c.QRCode),l.mount(`#${a||r}`),u&&u(()=>{n(new O),l.unmount()})})}_mapAdyenPlaceholderData(t,e){if(!t)return{};const{firstName:n,lastName:r,address1:i,address2:o,postalCode:a,city:u,stateOrProvinceCode:c,countryCode:s}=t;return{holderName:e?`${n} ${r}`:\"\",billingAddress:{street:i,houseNumberOrName:o,postalCode:a,city:u,stateOrProvince:c,country:s}}}_mountCardVerificationComponent(){const t=this._getPaymentInitializeOptions(),e=this._getAdyenClient();let n;return new Promise((r,i)=>{var o,a,u;if(t.cardVerificationContainerId){n=e.create(s.SecuredFields,Object.assign(Object.assign({},t.options),{styles:Object.assign(Object.assign({},null===(o=t.options)||void 0===o?void 0:o.styles),{placeholder:Object.assign({color:\"transparent\",caretColor:\"#000\"},null===(u=null===(a=t.options)||void 0===a?void 0:a.styles)||void 0===u?void 0:u.placeholder)}),onChange:t=>this._updateComponentState(t),onError:e=>t.validateCardFields(e),onFieldValid:e=>t.validateCardFields(e)}));try{n.mount(`#${t.cardVerificationContainerId}`)}catch(t){i(new m(h.PaymentNotInitialized))}}r(n)})}_mountPaymentComponent(t){let e;const n=this._getPaymentInitializeOptions(),r=this._getAdyenClient();return new Promise((i,o)=>{switch(t.method){case f.CreditCard:case f.ACH:case f.Bancontact:{const i=this._paymentIntegrationService.getState().getBillingAddress(),{prefillCardHolderName:a}=t.initializationData;e=r.create(t.method,Object.assign(Object.assign({},n.options),{onChange:t=>this._updateComponentState(t),data:this._mapAdyenPlaceholderData(i,a)}));try{e.mount(`#${n.containerId}`)}catch(t){o(new m(h.PaymentNotInitialized))}break}case f.IDEAL:case f.SEPA:if(n.hasVaultedInstruments)this._updateComponentState({data:{paymentMethod:{type:t.method}}});else{e=r.create(t.method,Object.assign(Object.assign({},n.options),{onChange:t=>this._updateComponentState(t)}));try{e.mount(`#${n.containerId}`)}catch(t){o(new m(h.PaymentNotInitialized))}}break;case f.AliPay:case f.GiroPay:case f.Sofort:case f.Klarna:case f.KlarnaPayNow:case f.KlarnaAccount:case f.Vipps:case f.WeChatPayQR:this._updateComponentState({data:{paymentMethod:{type:t.method}}})}i(e)})}_processAdditionalAction(t,e,n){return A(this,void 0,void 0,function*(){if(!S(t)||!(0,y.some)(t.body.errors,{code:\"additional_action_required\"}))throw t;const r=yield this._handleAction(t.body.provider_data);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:Object.assign(Object.assign({},r.paymentData),{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:n})}))}catch(t){return this._processAdditionalAction(t,e,n)}})}_updateComponentState(t){this._componentState=t}_validateCardData(){var t,e;const n=this._getPaymentInitializeOptions().hasVaultedInstruments?this._cardVerificationComponent:this._paymentComponent;if((null===(t=null==n?void 0:n.componentRef)||void 0===t?void 0:t.showValidation)&&n.state&&(n.componentRef.showValidation(),0===Object.keys(n.state).length||!n.state.isValid&&!n.state.issuer||\"sepadirectdebit\"===(null===(e=n.props)||void 0===e?void 0:e.type)&&n.state.data&&Object.values(n.state.data).some(t=>0===t.toString().trim().length)))throw new C(this._mapCardErrors(n.state.errors))}_mapCardErrors(t={}){const e={};return Object.keys(t).forEach(n=>{e[n]=[{message:t[n],type:n}]}),e}}const I=a(e=>new x(e,new o((0,t.vQ)(),(0,t._U)())),[{gateway:\"adyenv2\"}]);class k{constructor(t,e,n=window){this._scriptLoader=t,this._stylesheetLoader=e,this._window=n}load(t){var e,n,r,o,a,u;return r=this,o=void 0,u=function*(){if(yield Promise.all([this._stylesheetLoader.loadStylesheet(`https://checkoutshopper-${null!==(e=t.environment)&&void 0!==e?e:\"\"}.adyen.com/checkoutshopper/sdk/5.71.1/adyen.css`,{prepend:!1,attributes:{integrity:\"sha384-5MvB4RnzvviA3VBT4KYABZ4HXNZG5LRqREEgd41xt/pf/QvKmsj2O9GuNuywRXx9\",crossorigin:\"anonymous\"}}),this._scriptLoader.loadScript(`https://checkoutshopper-${null!==(n=t.environment)&&void 0!==n?n:\"\"}.adyen.com/checkoutshopper/sdk/5.71.1/adyen.js`,{async:!0,attributes:{integrity:\"sha384-yvY2yFNR4WqIjPqP9MzjI+gJimmaJnAvj4rLHKvgJbgFD5fMuf8zIJrFJOW8Lhhf\",crossorigin:\"anonymous\"}})]),!this._window.AdyenCheckout)throw new i;return yield this._window.AdyenCheckout(t)},new((a=void 0)||(a=Promise))(function(t,e){function n(t){try{c(u.next(t))}catch(t){e(t)}}function i(t){try{c(u.throw(t))}catch(t){e(t)}}function c(e){var r;e.done?t(e.value):(r=e.value,r instanceof a?r:new a(function(t){t(r)})).then(n,i)}c((u=u.apply(r,o||[])).next())})}}var P=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{c(r.next(t))}catch(t){o(t)}}function u(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,u)}c((r=r.apply(t,e||[])).next())})};class z{constructor(t,e){this.paymentIntegrationService=t,this.scriptLoader=e}initialize(t){return P(this,void 0,void 0,function*(){const{adyenv3:e}=t;if(!e)throw new _('Unable to initialize payment because \"options.adyenv3\" argument is not provided.');this.paymentInitializeOptions=e;const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t.methodId),{environment:r,clientKey:i,paymentMethodsResponse:o,installmentOptions:a}=n.initializationData||{};return this.adyenClient=yield this.scriptLoader.load({paymentMethodsConfiguration:Object.assign({klarna:{useKlarnaWidget:!0},klarna_account:{useKlarnaWidget:!0},klarna_paynow:{useKlarnaWidget:!0}},a?{card:{installmentOptions:Object.assign({showInstallmentAmounts:!0},a)}}:{}),environment:r,locale:this._getLocale(),clientKey:i,paymentMethodsResponse:o,showPayButton:!1,translations:{es:{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-AR\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-ES\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-MX\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CL\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CO\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-PE\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"}}}),this.paymentComponent=yield this._mountPaymentComponent(n),n.method!==f.CreditCard&&n.method!==f.Bancontact||(this.cardVerificationComponent=yield this._mountCardVerificationComponent()),Promise.resolve()})}execute(t,e){var n;return P(this,void 0,void 0,function*(){const{payment:r}=t,i=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]);if(!r)throw new g([\"payment\"]);const o=r.paymentData,{shouldSaveInstrument:a,shouldSetAsDefaultInstrument:u}=\"object\"!=typeof(c=o)||null===c||void 0!==c.shouldSaveInstrument&&\"boolean\"!=typeof c.shouldSaveInstrument||void 0!==c.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof c.shouldSetAsDefaultInstrument?{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1}:o;var c;this._validateCardData(),\"klarna\"!==r.methodId&&\"klarna_account\"!==r.methodId&&\"klarna_paynow\"!==r.methodId||null===(n=this.paymentComponent)||void 0===n||n.submit(),yield this.paymentIntegrationService.submitOrder(i,e);const s=this.componentState||{data:{paymentMethod:{type:r.methodId}}};if(o&&b(o)){let t={};if(v(s)){const{encryptedCardNumber:e,encryptedSecurityCode:n,encryptedExpiryMonth:r,encryptedExpiryYear:i}=s.data.paymentMethod;t={credit_card_number_confirmation:e,expiry_month:r,expiry_year:i,verification_value:n}}try{return void(yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:{formattedPayload:{bigpay_token:Object.assign(Object.assign({},t),{token:o.instrumentId}),origin:window.location.origin,browser_info:w(),set_as_default_stored_instrument:u||null}}})))}catch(e){return void(yield this._processAdditionalAction(e,a,u,o.instrumentId,t))}}let f=JSON.stringify(Object.assign(Object.assign({},s.data.paymentMethod),{type:r.methodId,origin:window.location.origin}));\"boletobancario\"===r.methodId&&function(t){var e,n;return\"string\"===(\"object\"==typeof t&&typeof t.data.socialSecurityNumber)&&\"string\"==typeof(null===(e=t.data.shopperName)||void 0===e?void 0:e.firstName)&&\"string\"==typeof(null===(n=t.data.shopperName)||void 0===n?void 0:n.lastName)}(s)&&(f=JSON.stringify(Object.assign(Object.assign({socialSecurityNumber:s.data.socialSecurityNumber},s.data.shopperName),{type:r.methodId,origin:window.location.origin})));try{yield this.paymentIntegrationService.submitPayment({methodId:r.methodId,paymentData:{formattedPayload:Object.assign(Object.assign({credit_card_token:{token:f}},v(s)&&s.data.installments?{installments:{value:s.data.installments.value,plan:s.data.installments.plan||\"regular\"}}:{}),{browser_info:w(),vault_payment_instrument:a||null,set_as_default_stored_instrument:u||null})}})}catch(t){yield this._processAdditionalAction(t,a,u)}})}finalize(){return Promise.reject(new j)}deinitialize(){return this.componentState=void 0,this.paymentComponent&&(this.paymentComponent.unmount(),this.paymentComponent=void 0),this.cardVerificationComponent&&(this.cardVerificationComponent.unmount(),this.cardVerificationComponent=void 0),Promise.resolve()}_updateComponentState(t){this.componentState=t}_getLocale(){const t=this.paymentIntegrationService.getState().getLocale();return t&&\"es\"===t.substring(0,2)?\"es\":t}_getAdyenClient(){if(!this.adyenClient)throw new m(h.PaymentNotInitialized);return this.adyenClient}_getPaymentInitializeOptions(){if(!this.paymentInitializeOptions)throw new _('\"options.adyenv3\" argument was not provided during initialization.');return this.paymentInitializeOptions}_handleAction(t){return new Promise((e,n)=>{const{additionalActionOptions:r}=this._getPaymentInitializeOptions(),{onBeforeLoad:i,containerId:o,onLoad:a,onComplete:c,widgetSize:s,onActionHandled:f}=r,l=JSON.parse(t.action),p=this._getAdyenClient().createFromAction(l,{onActionHandled:t=>{f&&\"function\"==typeof f&&\"3DS2Fingerprint\"!==t.componentType&&f()},onAdditionalDetails:t=>{const n={methodId:l.paymentMethodType,paymentData:{nonce:JSON.stringify(t.data)}};c&&\"function\"==typeof c&&c(),e(n)},challengeWindowSize:s||\"05\",onError:t=>n(t)});i&&\"function\"==typeof i&&i(l.type===u.ThreeDS2||l.type===u.QRCode||l.type===u.Sdk),this._mountElement(p,o).then(()=>{a&&\"function\"==typeof a&&a(()=>{n(new O),p.unmount()})}).catch(n)})}_mapAdyenPlaceholderData(t,e){if(!t)return{};const{firstName:n,lastName:r,address1:i,address2:o,postalCode:a,city:u,stateOrProvinceCode:c,countryCode:s}=t;return{holderName:e?`${n} ${r}`:\"\",firstName:e?n:\"\",lastName:e?r:\"\",billingAddress:{street:i,houseNumberOrName:o,postalCode:a,city:u,stateOrProvince:c,country:s}}}_mountCardVerificationComponent(){var t,e,n;return P(this,void 0,void 0,function*(){const r=this._getPaymentInitializeOptions(),i=this._getAdyenClient();if(!r.cardVerificationContainerId)return;const o=i.create(s.SecuredFields,Object.assign(Object.assign({},r.options),{styles:Object.assign(Object.assign({},null===(t=r.options)||void 0===t?void 0:t.styles),{placeholder:Object.assign({color:\"transparent\",caretColor:\"#000\"},null===(n=null===(e=r.options)||void 0===e?void 0:e.styles)||void 0===n?void 0:n.placeholder)}),onChange:t=>this._updateComponentState(t),onError:t=>r.validateCardFields(t),onFieldValid:t=>r.validateCardFields(t)}));try{yield this._mountElement(o,r.cardVerificationContainerId)}catch(t){throw new m(h.PaymentNotInitialized)}return o})}_mountPaymentComponent(t){return P(this,void 0,void 0,function*(){const e=this._getPaymentInitializeOptions(),n=this._getAdyenClient(),r=this.paymentIntegrationService.getState().getBillingAddress(),{prefillCardHolderName:i}=t.initializationData,o=n.create(t.method,Object.assign(Object.assign(Object.assign(Object.assign({},this._isOneyPaymentMethod(t.method)?{visibility:{personalDetails:\"hidden\",billingAddress:\"hidden\",deliveryAddress:\"hidden\"}}:{}),e.options),{showBrandsUnderCardNumber:!1,billingAddressRequired:!1,showEmailAddress:!1,onChange:t=>this._updateComponentState(t),onSubmit:t=>this._updateComponentState(t)}),r?{data:this._mapAdyenPlaceholderData(r,i)}:{}));try{yield this._mountElement(o,e.containerId)}catch(t){throw new m(h.PaymentNotInitialized)}return o})}_isOneyPaymentMethod(t){return t.startsWith(\"facilypay\")}_processAdditionalAction(t,e,n,r,i){return P(this,void 0,void 0,function*(){if(!S(t)||!(0,y.some)(t.body.errors,{code:\"additional_action_required\"}))throw t;const o=yield this._handleAction(t.body.provider_data);try{const t=Object.assign(Object.assign({},o.paymentData),{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:n}),a=n&&!e?{instrumentId:r,formattedPayload:{bigpay_token:Object.assign(Object.assign({},i),{token:r})}}:{};yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},o),{paymentData:Object.assign(Object.assign({},t),a)}))}catch(t){return this._processAdditionalAction(t,e,n,r,i)}})}_validateCardData(){var t;const e=this._getPaymentInitializeOptions().hasVaultedInstruments?this.cardVerificationComponent:this.paymentComponent;if((null===(t=null==e?void 0:e.componentRef)||void 0===t?void 0:t.showValidation)&&e.state&&(e.componentRef.showValidation(),0===Object.keys(e.state).length||!e.state.isValid))throw new C(this._mapCardErrors(e.state.errors))}_mapCardErrors(t={}){const e={};return Object.keys(t).forEach(n=>{e[n]=[{message:t[n],type:n}]}),e}_mountElement(t,e){return P(this,void 0,void 0,function*(){yield this._waitForMountContainer(e);try{t.mount(`#${e}`)}catch(t){throw new m(h.PaymentNotInitialized)}})}_waitForMountContainer(t){return P(this,void 0,void 0,function*(){const e=Math.ceil(z.mountContainerMaxWaitMs/z.mountContainerPollIntervalMs),n=z.mountContainerPollIntervalMs;let r=0;const i=()=>P(this,void 0,void 0,function*(){if(r===e)throw new m(h.PaymentNotInitialized);document.getElementById(t)||(yield new Promise(t=>{setTimeout(t,n)}),r+=1,yield i())});yield i()})}}z.mountContainerMaxWaitMs=5e3,z.mountContainerPollIntervalMs=50;const E=a(e=>new z(e,new k((0,t.vQ)(),(0,t._U)())),[{gateway:\"adyenv3\"}])})(),module.exports=r})();\n//# sourceMappingURL=adyen.js.map"
  },
  {
    "path": "dist/cjs/integrations/affirm.js",
    "content": "(()=>{\"use strict\";var e,t,i={d:(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})}},n={};i.r(n),i.d(n,{createAffirmPaymentStrategy:()=>_});class s extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(e||(e={}));class r extends s{constructor(t){super(function(t){switch(t){case e.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case e.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case e.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case e.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case e.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case e.MissingCheckoutConfig:case e.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case e.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case e.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case e.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case e.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case e.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case e.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(t||(t={}));class a extends s{constructor(e){super(function(e){switch(e){case t.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case t.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case t.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case t.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class o extends s{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class c extends o{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class d extends s{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class u extends s{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}const l={body:{},headers:{},status:0};class m extends s{constructor(e,{message:t,errors:i}={}){const{body:n,headers:s,status:r}=e||l;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=n,this.headers=s,this.status=r,this.errors=i||[]}}class p extends m{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class g{constructor(e){this._decimalPlaces=e}toInteger(e){return Math.round(e*Math.pow(10,this._decimalPlaces))}}var h,f=function(e,t,i,n){return new(i||(i=Promise))(function(s,r){function a(e){try{c(n.next(e))}catch(e){r(e)}}function o(e){try{c(n.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,o)}c((n=n.apply(e,t||[])).next())})};class y{constructor(e,t){this.paymentIntegrationService=e,this.affirmScriptLoader=t}initialize(t){return f(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadPaymentMethod(t.methodId);const i=this.paymentIntegrationService.getState(),{clientToken:n,config:{testMode:s}}=i.getPaymentMethodOrThrow(t.methodId);if(!n)throw new r(e.MissingPaymentMethod);this.affirm=yield this.affirmScriptLoader.load(n,s)})}execute(e,i){var n;return f(this,void 0,void 0,function*(){const s=null===(n=e.payment)||void 0===n?void 0:n.methodId,{useStoreCredit:r}=e;if(!this.affirm)throw new a(t.PaymentNotInitialized);if(!s)throw new c([\"payment.methodId\"]);yield this.paymentIntegrationService.submitOrder({useStoreCredit:r},i);const o={methodId:s,paymentData:{nonce:(yield this.initializeAffirmCheckout()).checkout_token}};yield this.paymentIntegrationService.submitPayment(o)})}deinitialize(){return this.affirm&&(this.affirm=void 0),Promise.resolve()}finalize(){return Promise.reject(new d)}initializeAffirmCheckout(){var e;return null===(e=this.affirm)||void 0===e||e.checkout(this.getCheckoutInformation()),new Promise((e,t)=>{var i,n;null===(i=this.affirm)||void 0===i||i.checkout.open({onFail:e=>{\"canceled\"===e.reason?t(new u):t(new p)},onSuccess:t=>{e(t)}}),null===(n=this.affirm)||void 0===n||n.ui.error.on(\"close\",()=>{t(new u)})})}getCheckoutInformation(){const t=this.paymentIntegrationService.getState(),i=t.getStoreConfig(),n=t.getConsignments(),s=t.getOrder(),a=t.getCart();if(!i)throw new r(e.MissingCheckoutConfig);if(!s)throw new r(e.MissingCheckout);const o=new g(s.currency.decimalPlaces),c=this.getBillingAddress(),d=this.getShippingAddress(),u=((e,t)=>!!e&&(!!e.lineItems.physicalItems.some(e=>e.isShippingRequired)||!(!t||!e.lineItems.customItems)&&e.lineItems.customItems.length>0))(a,i)&&d?d:c;return{merchant:{user_confirmation_url:i.links.checkoutLink,user_cancel_url:i.links.checkoutLink,user_confirmation_url_action:\"POST\"},shipping:u,billing:c,items:this.getItems(o,s),metadata:{shipping_type:this.getShippingType(n),mode:\"modal\",platform_type:\"BigCommerce\",platform_version:\"\",platform_affirm:\"\"},discounts:this.getDiscounts(o,s),order_id:s.orderId?s.orderId.toString():\"\",shipping_amount:o.toInteger(s.shippingCostTotal),tax_amount:o.toInteger(s.taxTotal),total:o.toInteger(s.orderAmount)}}getShippingType(e){if(!e)return\"\";const t=e[0];return(null==t?void 0:t.selectedShippingOption)?t.selectedShippingOption.type:\"\"}getBillingAddress(){const t=this.paymentIntegrationService.getState().getBillingAddress();if(!t)throw new r(e.MissingBillingAddress);return{name:{first:t.firstName,last:t.lastName,full:`${t.firstName} ${t.lastName}`},address:{line1:t.address1,line2:t.address2,city:t.city,state:t.stateOrProvinceCode,zipcode:t.postalCode,country:t.countryCode},phone_number:t.phone,email:t.email}}getShippingAddress(){const e=this.paymentIntegrationService.getState().getShippingAddress();if(e)return{name:{first:e.firstName,last:e.lastName,full:`${e.firstName} ${e.lastName}`},address:{line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,zipcode:e.postalCode,country:e.countryCode},phone_number:e.phone}}getItems(e,t){const i=[];return t.lineItems.physicalItems.forEach(t=>{i.push({display_name:t.name,sku:t.sku,unit_price:e.toInteger(t.salePrice),qty:t.quantity,item_image_url:t.imageUrl,item_url:t.url,categories:this.getCategories(t.categories)})}),t.lineItems.digitalItems.forEach(t=>{i.push({display_name:t.name,sku:t.sku,unit_price:e.toInteger(t.salePrice),qty:t.quantity,item_image_url:t.imageUrl,item_url:t.url,categories:this.getCategories(t.categories)})}),t.lineItems.giftCertificates.forEach(t=>{i.push({display_name:t.name,sku:\"\",unit_price:e.toInteger(t.amount),qty:1,item_image_url:\"\",item_url:\"\"})}),t.lineItems.customItems&&t.lineItems.customItems.forEach(t=>{i.push({display_name:t.name,sku:t.sku,unit_price:e.toInteger(t.listPrice),qty:t.quantity,item_image_url:\"\",item_url:\"\"})}),i}getDiscounts(e,t){const i={};return t.coupons.forEach(t=>{t.discountedAmount>0&&(i[t.code]={discount_amount:e.toInteger(t.discountedAmount),discount_display_name:t.displayName})}),t.discountAmount>0&&(i.DISCOUNTED_AMOUNT={discount_amount:e.toInteger(t.discountAmount),discount_display_name:\"discount\"}),i}getCategories(e){return e?e.map(e=>e.map(e=>e.name)):[[]]}}class b extends s{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}!function(e){e.PROD=\"//cdn1.affirm.com/js/v2/affirm.js\",e.SANDBOX=\"//cdn1-sandbox.affirm.com/js/v2/affirm.js\"}(h||(h={}));class I{constructor(e=window){this.affirmWindow=e}load(e=\"\",t){const i=t?h.SANDBOX:h.PROD;if(function(e,t,i,n,s,r,a){const o=e[i]||{},c=document.createElement(r),d=document.getElementsByTagName(r)[0],u=function(e,t,i){return function(){e[t]._.push([i,arguments])}};o[n]=u(o,n,\"set\");const l=o[n];o[s]={},o[s]._=[],l._=[],o._=[],o[s][a]=u(o,s,a),o.jsReady=function(){o._.push([a,arguments])};let m=0;for(const e=\"set add save post open empty reset on off trigger ready setProduct\".split(\" \");m<e.length;m++)l[e[m]]=u(o,n,e[m]);let p=0;for(const e=[\"get\",\"token\",\"url\",\"items\"];p<e.length;p++)l[e[p]]=function(){};c.async=!0,c.src=t[r],d.parentNode&&d.parentNode.insertBefore(c,d),delete t[r],l(t),e[i]=o}(window,{public_api_key:e,script:i},\"affirm\",\"checkout\",\"ui\",\"script\",\"ready\"),!this.affirmWindow.affirm)throw new b;return Promise.resolve(this.affirmWindow.affirm)}}const _=Object.assign(e=>new y(e,new I),{resolveIds:[{id:\"affirm\"}]});module.exports=n})();\n//# sourceMappingURL=affirm.js.map"
  },
  {
    "path": "dist/cjs/integrations/afterpay.js",
    "content": "(()=>{var e={4325(e,t,r){\"use strict\";r.d(t,{g:()=>o});var n=r(5889),o=function(){function e(){this._cache={}}return e.prototype.read=function(e,t){var r=this.getKey(e,t.params);return this._cache[r]||null},e.prototype.write=function(e,t,r){var n=this.getKey(e,t.params);this._cache[n]=r},e.prototype.getKey=function(e,t){return void 0===t&&(t={}),0===Object.keys(t).length?e:\"\".concat(e,\"?\").concat(n.stringify(t))},e}()},321(e,t,r){\"use strict\";r.d(t,{A:()=>a});var n=r(168),o=r(1675),i=r(5861),s=r(4670);function a(e){return new s.A(new i.A,new o.A,n,e)}},6889(e,t,r){\"use strict\";r.d(t,{A:()=>o});var n=r(2024);function o(e){return new n.A(e)}},4043(e,t,r){\"use strict\";r.r(t),r.d(t,{RequestSender:()=>i.A,Timeout:()=>s.A,createRequestSender:()=>n.A,createTimeout:()=>o.A});var n=r(321),o=r(6889),i=r(4670),s=r(2024)},4843(e,t,r){\"use strict\";function n(e){return!!e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof e.then}r.d(t,{A:()=>n})},1675(e,t,r){\"use strict\";r.d(t,{A:()=>a});var n=r(1635),o=r(710),i=/application\\/(\\w+\\+)?json/,s=/application\\/x-www-form-urlencoded/;const a=function(){function e(){}return e.prototype.toRequestBody=function(e){var t=e.headers?this._getHeader(e.headers,\"Content-Type\"):\"\";if(e.body){if(i.test(t))return JSON.stringify(e.body);if(s.test(t))return(0,o.A)(e.body)}return e.body},e.prototype.toResponse=function(e){var t=this._parseResponseHeaders(e.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in e?e.response:e.responseText,t),headers:t,status:e.status,statusText:e.statusText}},e.prototype._parseResponseBody=function(e,t){var r=this._getHeader(t,\"Content-Type\");return e&&i.test(r)?JSON.parse(e):e},e.prototype._parseResponseHeaders=function(e){return(e?e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(e,t){var r,o=t.split(\":\"),i=(o.shift()||\"\").trim();return i?(0,n.__assign)((0,n.__assign)({},e),((r={})[i.toLowerCase()]=o.join(\":\").trim(),r)):e},{})},e.prototype._getHeader=function(e,t){return e&&t&&(e[t]||e[t.toLowerCase()])||\"\"},e}()},5861(e,t,r){\"use strict\";r.d(t,{A:()=>o});var n=r(5889);const o=function(){function e(){}return e.prototype.createRequest=function(e,t){var r=new XMLHttpRequest;return this._configureRequest(r,e,t),r},e.prototype._configureRequest=function(e,t,r){void 0===r&&(r={}),e.open(r.method||\"GET\",this._formatUrl(t,r.params,r.encodeParams),!0),r.headers&&this._configureRequestHeaders(e,r.headers),\"boolean\"==typeof r.credentials&&(e.withCredentials=r.credentials),\"number\"==typeof r.timeout&&(e.timeout=r.timeout)},e.prototype._configureRequestHeaders=function(e,t){Object.keys(t).filter(function(e){return null!==t[e]}).forEach(function(r){e.setRequestHeader(r,t[r])})},e.prototype._formatUrl=function(e,t,r){return void 0===r&&(r=!0),t&&0!==Object.keys(t).length?\"\".concat(e,\"?\").concat(n.stringify(t,{encode:r})):e},e}()},4670(e,t,r){\"use strict\";r.d(t,{A:()=>u});var n=r(1635),o=r(35),i=r.n(o),s=r(4325),a=r(4843),c=r(2024);const u=function(){function e(e,t,r,n){void 0===n&&(n={}),this._requestFactory=e,this._payloadTransformer=t,this._cookie=r,this._options=n,this._cache=this._options.cache||new s.g}return e.prototype.sendRequest=function(e,t){var r=this,n=this._mergeDefaultOptions(e,t),o=this._getCachedRequest(e,n);if(o)return Promise.resolve(o);var i=this._requestFactory.createRequest(this._prependHost(e),n);return new Promise(function(t,o){var s=function(){var s=r._payloadTransformer.toResponse(i);s.status>=200&&s.status<300?(r._cacheRequest(e,n,s),t(s)):o(s)};i.onload=s,i.onerror=s,i.onabort=s,i.ontimeout=s,n.timeout instanceof c.A&&(n.timeout.onComplete(function(){return i.abort()}),n.timeout.start()),(0,a.A)(n.timeout)&&n.timeout.then(function(){return i.abort()}),i.send(r._payloadTransformer.toRequestBody(n))})},e.prototype.get=function(e,t){return this.sendRequest(e,(0,n.__assign)((0,n.__assign)({},t),{method:\"GET\"}))},e.prototype.post=function(e,t){return this.sendRequest(e,(0,n.__assign)((0,n.__assign)({},t),{method:\"POST\"}))},e.prototype.put=function(e,t){return this.sendRequest(e,(0,n.__assign)((0,n.__assign)({},t),{method:\"PUT\"}))},e.prototype.patch=function(e,t){return this.sendRequest(e,(0,n.__assign)((0,n.__assign)({},t),{method:\"PATCH\"}))},e.prototype.delete=function(e,t){return this.sendRequest(e,(0,n.__assign)((0,n.__assign)({},t),{method:\"DELETE\"}))},e.prototype._mergeDefaultOptions=function(e,t){var r={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},n=this._cookie.get(\"XSRF-TOKEN\");return n&&r.headers&&!this._isAssetRequest(e,t)&&this._isLocalRequest(e)&&(r.headers[\"X-XSRF-TOKEN\"]=n),t&&t.body&&r.headers&&(r.headers[\"Content-Type\"]=\"application/json\"),i()({},r,t)},e.prototype._prependHost=function(e){return!this._options.host||/^https?:\\/\\//.test(e)?e:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(e.replace(/^\\//,\"\"))},e.prototype._shouldCacheRequest=function(e){return\"GET\"===(e.method||\"GET\").toUpperCase()&&Boolean(e.cache)},e.prototype._getCachedRequest=function(e,t){return this._shouldCacheRequest(t)?this._cache.read(e,t):null},e.prototype._cacheRequest=function(e,t,r){this._shouldCacheRequest(t)&&this._cache.write(e,t,r)},e.prototype._isAssetRequest=function(e,t){return(!t||!t.method||\"GET\"===t.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(e.split(\"?\")[0])},e.prototype._isLocalRequest=function(e){return!!e.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!e.match(new RegExp(\"^(https?:)?//\"))},e}()},2024(e,t,r){\"use strict\";r.d(t,{A:()=>n});const n=function(){function e(e){var t=this;this._delay=e,this._promise=new Promise(function(e){t._resolve=e})}return e.prototype.onComplete=function(e){this._promise.then(e)},e.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},e.prototype.start=function(){var e=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return e.complete()},this._delay))},e}()},710(e,t,r){\"use strict\";function n(e){return\"object\"!=typeof e||null===e?e:Object.keys(e).filter(function(t){return void 0!==e[t]}).map(function(t){var r=e[t];return\"string\"==typeof r?\"\".concat(t,\"=\").concat(encodeURIComponent(r)):\"\".concat(t,\"=\").concat(encodeURIComponent(JSON.stringify(r)||\"\"))}).join(\"&\")}r.d(t,{A:()=>n})},5889(e,t,r){\"use strict\";const n=r(803),o=r(1915),i=r(1657),s=r(3814);function a(e){if(\"string\"!=typeof e||1!==e.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(e,t){return t.encode?t.strict?n(e):encodeURIComponent(e):e}function u(e,t){return t.decode?o(e):e}function p(e){return Array.isArray(e)?e.sort():\"object\"==typeof e?p(Object.keys(e)).sort((e,t)=>Number(e)-Number(t)).map(t=>e[t]):e}function d(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function l(e){const t=(e=d(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function f(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&\"string\"==typeof e&&\"\"!==e.trim()?e=Number(e):!t.parseBooleans||null===e||\"true\"!==e.toLowerCase()&&\"false\"!==e.toLowerCase()||(e=\"true\"===e.toLowerCase()),e}function h(e,t){a((t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const r=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,r,n)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===n[e]&&(n[e]={}),n[e][t[1]]=r):n[e]=r};case\"bracket\":return(e,r,n)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==n[e]?n[e]=[].concat(n[e],r):n[e]=[r]:n[e]=r};case\"comma\":case\"separator\":return(t,r,n)=>{const o=\"string\"==typeof r&&r.includes(e.arrayFormatSeparator),i=\"string\"==typeof r&&!o&&u(r,e).includes(e.arrayFormatSeparator);r=i?u(r,e):r;const s=o||i?r.split(e.arrayFormatSeparator).map(t=>u(t,e)):null===r?r:u(r,e);n[t]=s};default:return(e,t,r)=>{void 0!==r[e]?r[e]=[].concat(r[e],t):r[e]=t}}}(t),n=Object.create(null);if(\"string\"!=typeof e)return n;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return n;for(const o of e.split(\"&\")){if(\"\"===o)continue;let[e,s]=i(t.decode?o.replace(/\\+/g,\" \"):o,\"=\");s=void 0===s?null:[\"comma\",\"separator\"].includes(t.arrayFormat)?s:u(s,t),r(u(e,t),s,n)}for(const e of Object.keys(n)){const r=n[e];if(\"object\"==typeof r&&null!==r)for(const e of Object.keys(r))r[e]=f(r[e],t);else n[e]=f(r,t)}return!1===t.sort?n:(!0===t.sort?Object.keys(n).sort():Object.keys(n).sort(t.sort)).reduce((e,t)=>{const r=n[t];return Boolean(r)&&\"object\"==typeof r&&!Array.isArray(r)?e[t]=p(r):e[t]=r,e},Object.create(null))}t.extract=l,t.parse=h,t.stringify=(e,t)=>{if(!e)return\"\";a((t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},t)).arrayFormatSeparator);const r=r=>t.skipNull&&null==e[r]||t.skipEmptyString&&\"\"===e[r],n=function(e){switch(e.arrayFormat){case\"index\":return t=>(r,n)=>{const o=r.length;return void 0===n||e.skipNull&&null===n||e.skipEmptyString&&\"\"===n?r:null===n?[...r,[c(t,e),\"[\",o,\"]\"].join(\"\")]:[...r,[c(t,e),\"[\",c(o,e),\"]=\",c(n,e)].join(\"\")]};case\"bracket\":return t=>(r,n)=>void 0===n||e.skipNull&&null===n||e.skipEmptyString&&\"\"===n?r:null===n?[...r,[c(t,e),\"[]\"].join(\"\")]:[...r,[c(t,e),\"[]=\",c(n,e)].join(\"\")];case\"comma\":case\"separator\":return t=>(r,n)=>null==n||0===n.length?r:0===r.length?[[c(t,e),\"=\",c(n,e)].join(\"\")]:[[r,c(n,e)].join(e.arrayFormatSeparator)];default:return t=>(r,n)=>void 0===n||e.skipNull&&null===n||e.skipEmptyString&&\"\"===n?r:null===n?[...r,c(t,e)]:[...r,[c(t,e),\"=\",c(n,e)].join(\"\")]}}(t),o={};for(const t of Object.keys(e))r(t)||(o[t]=e[t]);const i=Object.keys(o);return!1!==t.sort&&i.sort(t.sort),i.map(r=>{const o=e[r];return void 0===o?\"\":null===o?c(r,t):Array.isArray(o)?o.reduce(n(r),[]).join(\"&\"):c(r,t)+\"=\"+c(o,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[r,n]=i(e,\"#\");return Object.assign({url:r.split(\"?\")[0]||\"\",query:h(l(e),t)},t&&t.parseFragmentIdentifier&&n?{fragmentIdentifier:u(n,t)}:{})},t.stringifyUrl=(e,r)=>{r=Object.assign({encode:!0,strict:!0},r);const n=d(e.url).split(\"?\")[0]||\"\",o=t.extract(e.url),i=t.parse(o,{sort:!1}),s=Object.assign(i,e.query);let a=t.stringify(s,r);a&&(a=`?${a}`);let u=function(e){let t=\"\";const r=e.indexOf(\"#\");return-1!==r&&(t=e.slice(r)),t}(e.url);return e.fragmentIdentifier&&(u=`#${c(e.fragmentIdentifier,r)}`),`${n}${a}${u}`},t.pick=(e,r,n)=>{n=Object.assign({parseFragmentIdentifier:!0},n);const{url:o,query:i,fragmentIdentifier:a}=t.parseUrl(e,n);return t.stringifyUrl({url:o,query:s(i,r),fragmentIdentifier:a},n)},t.exclude=(e,r,n)=>{const o=Array.isArray(r)?e=>!r.includes(e):(e,t)=>!r(e,t);return t.pick(e,o,n)}},5477(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(){function e(){}return e.prototype.canSupportRel=function(e){var t=document.createElement(\"link\");return!!(t.relList&&t.relList.supports&&t.relList.supports(e))},e}();t.default=r},471(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new i.default(new o.default,(0,n.createRequestSender)())};var n=r(4043),o=r(5477),i=r(4886)},9722(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new i.default(new o.default,(0,n.createRequestSender)())};var n=r(4043),o=r(5477),i=r(7995)},5895(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return n||(n=(0,o.default)()),n};var n,o=r(471)},282(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return n||(n=(0,o.default)()),n};var n,o=r(9722)},315(e,t,r){\"use strict\";t.Hb=void 0;r(4886);var n=r(471);Object.defineProperty(t,\"Hb\",{enumerable:!0,get:function(){return n.default}});r(5895),r(7995),r(9722),r(282)},4886(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._scripts={},this._preloadedScripts={}}return e.prototype.loadScript=function(e,t){var r=this;return this._scripts[e]||(this._scripts[e]=new Promise(function(n,o){var i=document.createElement(\"script\"),s=t||{},a=s.async,c=void 0!==a&&a,u=s.attributes,p=void 0===u?{}:u;Object.keys(p).forEach(function(e){i.setAttribute(e,p[e])}),i.onload=function(){return n()},i.onreadystatechange=function(){return n()},i.onerror=function(t){delete r._scripts[e],o(t)},i.async=c,i.src=e,document.body.appendChild(i)})),this._scripts[e]},e.prototype.loadScripts=function(e,t){var r=this;return Promise.all(e.map(function(e){return r.loadScript(e,t)})).then(function(){})},e.prototype.preloadScript=function(e,t){var r=this;return this._preloadedScripts[e]||(this._preloadedScripts[e]=new Promise(function(n,o){var i=(t||{}).prefetch,s=void 0!==i&&i?\"prefetch\":\"preload\";if(r._browserSupport.canSupportRel(s)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=s,a.href=e,a.onload=function(){n()},a.onerror=function(){delete r._preloadedScripts[e],o()},document.head.appendChild(a)}else r._requestSender.get(e,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return n()}).catch(o)})),this._preloadedScripts[e]},e.prototype.preloadScripts=function(e,t){var r=this;return Promise.all(e.map(function(e){return r.preloadScript(e,t)})).then(function(){})},e}();t.default=r},7995(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._stylesheets={},this._preloadedStylesheets={}}return e.prototype.loadStylesheet=function(e,t){var r=this;return this._stylesheets[e]||(this._stylesheets[e]=new Promise(function(n,o){var i=document.createElement(\"link\"),s=t||{},a=s.prepend,c=void 0!==a&&a,u=s.attributes,p=void 0===u?{}:u;Object.keys(p).forEach(function(e){i.setAttribute(e,p[e])}),i.onload=function(){return n()},i.onerror=function(t){delete r._stylesheets[e],o(t)},i.rel=\"stylesheet\",i.href=e,c&&document.head.children[0]?document.head.insertBefore(i,document.head.children[0]):document.head.appendChild(i)})),this._stylesheets[e]},e.prototype.loadStylesheets=function(e,t){var r=this;return Promise.all(e.map(function(e){return r.loadStylesheet(e,t)})).then(function(){})},e.prototype.preloadStylesheet=function(e,t){var r=this;return this._preloadedStylesheets[e]||(this._preloadedStylesheets[e]=new Promise(function(n,o){var i=(t||{}).prefetch,s=void 0!==i&&i,a=s?\"prefetch\":\"preload\";if(r._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=s?\"prefetch\":\"preload\",c.href=e,c.onload=function(){n()},c.onerror=function(t){delete r._preloadedStylesheets[e],o(t)},document.head.appendChild(c)}else r._requestSender.get(e,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return n()}).catch(o)})),this._preloadedStylesheets[e]},e.prototype.preloadStylesheets=function(e,t){var r=this;return Promise.all(e.map(function(e){return r.preloadStylesheet(e,t)})).then(function(){})},e}();t.default=r},1915(e){\"use strict\";var t=\"%[a-f0-9]{2}\",r=new RegExp(\"(\"+t+\")|([^%]+?)\",\"gi\"),n=new RegExp(\"(\"+t+\")+\",\"gi\");function o(e,t){try{return[decodeURIComponent(e.join(\"\"))]}catch(e){}if(1===e.length)return e;t=t||1;var r=e.slice(0,t),n=e.slice(t);return Array.prototype.concat.call([],o(r),o(n))}function i(e){try{return decodeURIComponent(e)}catch(i){for(var t=e.match(r)||[],n=1;n<t.length;n++)t=(e=o(t,n).join(\"\")).match(r)||[];return e}}e.exports=function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof e+\"`\");try{return e=e.replace(/\\+/g,\" \"),decodeURIComponent(e)}catch(t){return function(e){for(var t={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},r=n.exec(e);r;){try{t[r[0]]=decodeURIComponent(r[0])}catch(e){var o=i(r[0]);o!==r[0]&&(t[r[0]]=o)}r=n.exec(e)}t[\"%C2\"]=\"�\";for(var s=Object.keys(t),a=0;a<s.length;a++){var c=s[a];e=e.replace(new RegExp(c,\"g\"),t[c])}return e}(e)}}},3814(e){\"use strict\";e.exports=function(e,t){for(var r={},n=Object.keys(e),o=Array.isArray(t),i=0;i<n.length;i++){var s=n[i],a=e[s];(o?-1!==t.indexOf(s):t(s,a,e))&&(r[s]=a)}return r}},168(e){var t;t=function(){function e(){for(var e=0,t={};e<arguments.length;e++){var r=arguments[e];for(var n in r)t[n]=r[n]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function r(n){function o(){}function i(t,r,i){if(\"undefined\"!=typeof document){\"number\"==typeof(i=e({path:\"/\"},o.defaults,i)).expires&&(i.expires=new Date(1*new Date+864e5*i.expires)),i.expires=i.expires?i.expires.toUTCString():\"\";try{var s=JSON.stringify(r);/^[\\{\\[]/.test(s)&&(r=s)}catch(e){}r=n.write?n.write(r,t):encodeURIComponent(String(r)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in i)i[c]&&(a+=\"; \"+c,!0!==i[c]&&(a+=\"=\"+i[c].split(\";\")[0]));return document.cookie=t+\"=\"+r+a}}function s(e,r){if(\"undefined\"!=typeof document){for(var o={},i=document.cookie?document.cookie.split(\"; \"):[],s=0;s<i.length;s++){var a=i[s].split(\"=\"),c=a.slice(1).join(\"=\");r||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var u=t(a[0]);if(c=(n.read||n)(c,u)||t(c),r)try{c=JSON.parse(c)}catch(e){}if(o[u]=c,e===u)break}catch(e){}}return e?o[e]:o}}return o.set=i,o.get=function(e){return s(e,!1)},o.getJSON=function(e){return s(e,!0)},o.remove=function(t,r){i(t,\"\",e(r,{expires:-1}))},o.defaults={},o.withConverter=r,o}(function(){})},\"function\"==typeof define&&define.amd&&define(t),e.exports=t()},35(e,t,r){e=r.nmd(e);var n=\"__lodash_hash_undefined__\",o=9007199254740991,i=\"[object Arguments]\",s=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,u=/^(?:0|[1-9]\\d*)$/,p={};p[\"[object Float32Array]\"]=p[\"[object Float64Array]\"]=p[\"[object Int8Array]\"]=p[\"[object Int16Array]\"]=p[\"[object Int32Array]\"]=p[\"[object Uint8Array]\"]=p[\"[object Uint8ClampedArray]\"]=p[\"[object Uint16Array]\"]=p[\"[object Uint32Array]\"]=!0,p[i]=p[\"[object Array]\"]=p[\"[object ArrayBuffer]\"]=p[\"[object Boolean]\"]=p[\"[object DataView]\"]=p[\"[object Date]\"]=p[\"[object Error]\"]=p[s]=p[\"[object Map]\"]=p[\"[object Number]\"]=p[a]=p[\"[object RegExp]\"]=p[\"[object Set]\"]=p[\"[object String]\"]=p[\"[object WeakMap]\"]=!1;var d,l,f,h=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,y=\"object\"==typeof self&&self&&self.Object===Object&&self,g=h||y||Function(\"return this\")(),m=t&&!t.nodeType&&t,v=m&&e&&!e.nodeType&&e,_=v&&v.exports===m,b=_&&h.process,S=function(){try{return v&&v.require&&v.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(e){}}(),j=S&&S.isTypedArray,w=Array.prototype,O=Function.prototype,P=Object.prototype,A=g[\"__core-js_shared__\"],C=O.toString,k=P.hasOwnProperty,I=(d=/[^.]+$/.exec(A&&A.keys&&A.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+d:\"\",M=P.toString,R=C.call(Object),x=RegExp(\"^\"+C.call(k).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),T=_?g.Buffer:void 0,U=g.Symbol,E=g.Uint8Array,N=(T&&T.allocUnsafe,l=Object.getPrototypeOf,f=Object,function(e){return l(f(e))}),z=Object.create,q=P.propertyIsEnumerable,F=w.splice,D=U?U.toStringTag:void 0,B=function(){try{var e=ae(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),H=T?T.isBuffer:void 0,$=Math.max,L=Date.now,X=ae(g,\"Map\"),G=ae(Object,\"create\"),J=function(){function e(){}return function(t){if(!_e(t))return{};if(z)return z(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();function K(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function Z(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function V(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function W(e){var t=this.__data__=new Z(e);this.size=t.size}function Q(e,t,r){(void 0!==r&&!le(e[t],r)||void 0===r&&!(t in e))&&te(e,t,r)}function Y(e,t,r){var n=e[t];k.call(e,t)&&le(n,r)&&(void 0!==r||t in e)||te(e,t,r)}function ee(e,t){for(var r=e.length;r--;)if(le(e[r][0],t))return r;return-1}function te(e,t,r){\"__proto__\"==t&&B?B(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}K.prototype.clear=function(){this.__data__=G?G(null):{},this.size=0},K.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},K.prototype.get=function(e){var t=this.__data__;if(G){var r=t[e];return r===n?void 0:r}return k.call(t,e)?t[e]:void 0},K.prototype.has=function(e){var t=this.__data__;return G?void 0!==t[e]:k.call(t,e)},K.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=G&&void 0===t?n:t,this},Z.prototype.clear=function(){this.__data__=[],this.size=0},Z.prototype.delete=function(e){var t=this.__data__,r=ee(t,e);return!(r<0||(r==t.length-1?t.pop():F.call(t,r,1),--this.size,0))},Z.prototype.get=function(e){var t=this.__data__,r=ee(t,e);return r<0?void 0:t[r][1]},Z.prototype.has=function(e){return ee(this.__data__,e)>-1},Z.prototype.set=function(e,t){var r=this.__data__,n=ee(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this},V.prototype.clear=function(){this.size=0,this.__data__={hash:new K,map:new(X||Z),string:new K}},V.prototype.delete=function(e){var t=se(this,e).delete(e);return this.size-=t?1:0,t},V.prototype.get=function(e){return se(this,e).get(e)},V.prototype.has=function(e){return se(this,e).has(e)},V.prototype.set=function(e,t){var r=se(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this},W.prototype.clear=function(){this.__data__=new Z,this.size=0},W.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},W.prototype.get=function(e){return this.__data__.get(e)},W.prototype.has=function(e){return this.__data__.has(e)},W.prototype.set=function(e,t){var r=this.__data__;if(r instanceof Z){var n=r.__data__;if(!X||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new V(n)}return r.set(e,t),this.size=r.size,this};function re(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":D&&D in Object(e)?function(e){var t=k.call(e,D),r=e[D];try{e[D]=void 0;var n=!0}catch(e){}var o=M.call(e);return n&&(t?e[D]=r:delete e[D]),o}(e):function(e){return M.call(e)}(e)}function ne(e){return be(e)&&re(e)==i}function oe(e,t,r,n,o){e!==t&&function(e,t,r){for(var n=-1,o=Object(e),i=r(e),s=i.length;s--;){var a=i[++n];if(!1===t(o[a],a,o))break}}(t,function(i,s){if(o||(o=new W),_e(i))!function(e,t,r,n,o,i,s){var c=pe(e,r),u=pe(t,r),p=s.get(u);if(p)Q(e,r,p);else{var d,l,f,h,y,g=i?i(c,u,r+\"\",e,t,s):void 0,m=void 0===g;if(m){var v=he(u),_=!v&&ge(u),b=!v&&!_&&Se(u);g=u,v||_||b?he(c)?g=c:be(y=c)&&ye(y)?g=function(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}(c):_?(m=!1,g=function(e){return e.slice()}(u)):b?(m=!1,h=new(f=(d=u).buffer).constructor(f.byteLength),new E(h).set(new E(f)),l=h,g=new d.constructor(l,d.byteOffset,d.length)):g=[]:function(e){if(!be(e)||re(e)!=a)return!1;var t=N(e);if(null===t)return!0;var r=k.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof r&&r instanceof r&&C.call(r)==R}(u)||fe(u)?(g=c,fe(c)?g=function(e){return function(e,t,r){var n=!r;r||(r={});for(var o=-1,i=t.length;++o<i;){var s=t[o],a=void 0;void 0===a&&(a=e[s]),n?te(r,s,a):Y(r,s,a)}return r}(e,je(e))}(c):_e(c)&&!me(c)||(g=function(e){return\"function\"!=typeof e.constructor||ue(e)?{}:J(N(e))}(u))):m=!1}m&&(s.set(u,g),o(g,u,n,i,s),s.delete(u)),Q(e,r,g)}}(e,t,s,r,oe,n,o);else{var c=n?n(pe(e,s),i,s+\"\",e,t,o):void 0;void 0===c&&(c=i),Q(e,s,c)}},je)}var ie=B?function(e,t){return B(e,\"toString\",{configurable:!0,enumerable:!1,value:(r=t,function(){return r}),writable:!0});var r}:Pe;function se(e,t){var r,n,o=e.__data__;return(\"string\"==(n=typeof(r=t))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?o[\"string\"==typeof t?\"string\":\"hash\"]:o.map}function ae(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!_e(e)||function(e){return!!I&&I in e}(e))&&(me(e)?x:c).test(function(e){if(null!=e){try{return C.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e))}(r)?r:void 0}function ce(e,t){var r=typeof e;return!!(t=t??o)&&(\"number\"==r||\"symbol\"!=r&&u.test(e))&&e>-1&&e%1==0&&e<t}function ue(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||P)}function pe(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var de=function(e){var t=0,r=0;return function(){var n=L(),o=16-(n-r);if(r=n,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(ie);function le(e,t){return e===t||e!=e&&t!=t}var fe=ne(function(){return arguments}())?ne:function(e){return be(e)&&k.call(e,\"callee\")&&!q.call(e,\"callee\")},he=Array.isArray;function ye(e){return null!=e&&ve(e.length)&&!me(e)}var ge=H||function(){return!1};function me(e){if(!_e(e))return!1;var t=re(e);return t==s||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function ve(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=o}function _e(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function be(e){return null!=e&&\"object\"==typeof e}var Se=j?function(e){return function(t){return e(t)}}(j):function(e){return be(e)&&ve(e.length)&&!!p[re(e)]};function je(e){return ye(e)?function(e,t){var r=he(e),n=!r&&fe(e),o=!r&&!n&&ge(e),i=!r&&!n&&!o&&Se(e),s=r||n||o||i,a=s?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],c=a.length;for(var u in e)!t&&!k.call(e,u)||s&&(\"length\"==u||o&&(\"offset\"==u||\"parent\"==u)||i&&(\"buffer\"==u||\"byteLength\"==u||\"byteOffset\"==u)||ce(u,c))||a.push(u);return a}(e,!0):function(e){if(!_e(e))return function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t}(e);var t=ue(e),r=[];for(var n in e)(\"constructor\"!=n||!t&&k.call(e,n))&&r.push(n);return r}(e)}var we,Oe=(we=function(e,t,r){oe(e,t,r)},function(e,t){return de(function(e,t,r){return t=$(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=$(n.length-t,0),s=Array(i);++o<i;)s[o]=n[t+o];o=-1;for(var a=Array(t+1);++o<t;)a[o]=n[o];return a[t]=r(s),function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}(e,this,a)}}(e,t,Pe),e+\"\")}(function(e,t){var r=-1,n=t.length,o=n>1?t[n-1]:void 0,i=n>2?t[2]:void 0;for(o=we.length>3&&\"function\"==typeof o?(n--,o):void 0,i&&function(e,t,r){if(!_e(r))return!1;var n=typeof t;return!!(\"number\"==n?ye(r)&&ce(t,r.length):\"string\"==n&&t in r)&&le(r[t],e)}(t[0],t[1],i)&&(o=n<3?void 0:o,n=1),e=Object(e);++r<n;){var s=t[r];s&&we(e,s,r)}return e}));function Pe(e){return e}e.exports=Oe},1657(e){\"use strict\";e.exports=(e,t)=>{if(\"string\"!=typeof e||\"string\"!=typeof t)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===t)return[e];const r=e.indexOf(t);return-1===r?[e]:[e.slice(0,r),e.slice(r+t.length)]}},803(e){\"use strict\";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)},1635(e,t,r){\"use strict\";r.d(t,{__assign:()=>n});var n=function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={id:n,loaded:!1,exports:{}};return e[n](i,i.exports,r),i.loaded=!0,i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var n={};(()=>{\"use strict\";r.r(n),r.d(n,{createAfterpayPaymentStrategy:()=>_});var e,t=r(315);class o extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(e||(e={}));class i extends o{constructor(t){super(function(t){switch(t){case e.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case e.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case e.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case e.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case e.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case e.MissingCheckoutConfig:case e.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case e.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case e.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case e.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case e.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case e.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case e.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class s extends o{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class a extends s{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class c extends o{constructor(e){super(e||\"The current order could not be finalized successfully\"),this.name=\"OrderFinalizationNotCompletedError\",this.type=\"order_finalization_not_completed\"}}var u;!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(u||(u={}));class p extends o{constructor(e){super(function(e){switch(e){case u.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case u.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case u.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case u.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const d={body:{},headers:{},status:0};class l extends o{constructor(e,{message:t,errors:r}={}){const{body:n,headers:o,status:i}=e||d;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=n,this.headers=o,this.status=i,this.errors=r||[]}}var f=function(e,t,r,n){return new(r||(r=Promise))(function(o,i){function s(e){try{c(n.next(e))}catch(e){i(e)}}function a(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(s,a)}c((n=n.apply(e,t||[])).next())})};class h{constructor(e,t){this._paymentIntegrationService=e,this._afterpayScriptLoader=t}initialize(t){var r;return f(this,void 0,void 0,function*(){const n=this._paymentIntegrationService.getState(),o=n.getPaymentMethod(t.methodId,t.gatewayId),s=(null===(r=n.getCart())||void 0===r?void 0:r.currency.code)||\"\",a=this._mapCurrencyToISO2(s),c=function(e,t,r=!0){var n;return null!==(n=e[\"PI-4789.afterpay_script_use_https\"])&&void 0!==n?n:r}(n.getStoreConfigOrThrow().checkoutSettings.features,0,!1);if(!o)throw new i(e.MissingPaymentMethod);this._afterpaySdk=yield this._afterpayScriptLoader.load(o,a,c)})}deinitialize(){return this._afterpaySdk&&(this._afterpaySdk=void 0),Promise.resolve()}execute(e,t){var r;return f(this,void 0,void 0,function*(){if(!e.payment)throw new a([\"payment.gatewayId\",\"payment.methodId\"]);const{gatewayId:n,methodId:o}=e.payment;if(!n||!o)throw new a([\"payment.gatewayId\",\"payment.methodId\"]);const{useStoreCredit:i}=e;void 0!==i&&(yield this._paymentIntegrationService.applyStoreCredit(i)),yield this._loadPaymentMethod(n,o,t);const s=this._paymentIntegrationService.getState();yield this._paymentIntegrationService.validateCheckout(s.getCheckout(),t);const c=(null===(r=s.getCart())||void 0===r?void 0:r.currency.code)||\"\",u=this._mapCurrencyToISO2(c);return this._redirectToAfterpay(u,s.getPaymentMethod(o,n)),new Promise(()=>{})})}finalize(t){var r,n,o;return f(this,void 0,void 0,function*(){const s=this._paymentIntegrationService.getState(),a=s.getPaymentId(),u=s.getContextConfig();if(!a)throw new i(e.MissingCheckout);if(!(null==u?void 0:u.payment.token))throw new i(e.MissingCheckoutConfig);const p={methodId:a.providerId,paymentData:{nonce:u.payment.token}};yield this._paymentIntegrationService.submitOrder({},t);try{yield this._paymentIntegrationService.submitPayment(p)}catch(e){if(yield this._paymentIntegrationService.forgetCheckout(a.providerId),yield this._paymentIntegrationService.loadPaymentMethods(),(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e))throw new c(null===(o=null===(n=null===(r=e.body)||void 0===r?void 0:r.errors)||void 0===n?void 0:n[0])||void 0===o?void 0:o.message)}})}_redirectToAfterpay(e,t){if(!this._afterpaySdk||!(null==t?void 0:t.clientToken))throw new p(u.PaymentNotInitialized);this._afterpaySdk.initialize({countryCode:e}),this._afterpaySdk.redirect({token:t.clientToken})}_mapCurrencyToISO2(e){return{AUD:\"AU\",NZD:\"NZ\",CAD:\"CA\",USD:\"US\"}[e]||\"AU\"}_loadPaymentMethod(e,t,r){var n;return f(this,void 0,void 0,function*(){try{return yield this._paymentIntegrationService.loadPaymentMethod(e,Object.assign(Object.assign({},r),{params:Object.assign(Object.assign({},null==r?void 0:r.params),{method:t})}))}catch(e){if(e instanceof l&&422===(null===(n=e.body)||void 0===n?void 0:n.status))throw new s(\"Afterpay can't process your payment for this order, please try another payment method\");throw e}})}}class y extends o{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var g,m;!function(e){e.PROD=\"//portal.afterpay.com/afterpay-async.js\",e.SANDBOX=\"//portal.sandbox.afterpay.com/afterpay.js\",e.HTTPS_PROD=\"https://portal.afterpay.com/afterpay-async.js\",e.HTTPS_SANDBOX=\"https://portal.sandbox.afterpay.com/afterpay.js\"}(g||(g={})),function(e){e.PROD=\"//portal.afterpay.com/afterpay-async.js\",e.SANDBOX=\"//portal.sandbox.afterpay.com/afterpay.js\",e.HTTPS_PROD=\"https://portal.afterpay.com/afterpay-async.js\",e.HTTPS_SANDBOX=\"https://portal.sandbox.afterpay.com/afterpay.js\"}(m||(m={}));class v{constructor(e){this._scriptLoader=e}load(e,t,r=!1){return n=this,o=void 0,s=function*(){const n=e.config.testMode||!1,o=this._getScriptURI(t,n,r);return this._scriptLoader.loadScript(o).then(()=>{if(!function(e){return\"AfterPay\"in e}(window))throw new y;return window.AfterPay})},new((i=void 0)||(i=Promise))(function(e,t){function r(e){try{c(s.next(e))}catch(e){t(e)}}function a(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(r,a)}c((s=s.apply(n,o||[])).next())});var n,o,i,s}_getScriptURI(e,t,r=!1){return\"US\"===e?r?t?m.HTTPS_SANDBOX:m.HTTPS_PROD:t?m.SANDBOX:m.PROD:r?t?g.HTTPS_SANDBOX:g.HTTPS_PROD:t?g.SANDBOX:g.PROD}}const _=Object.assign(e=>new h(e,new v((0,t.Hb)())),{resolveIds:[{gateway:\"afterpay\"},{id:\"afterpay\"}]})})(),module.exports=n})();\n//# sourceMappingURL=afterpay.js.map"
  },
  {
    "path": "dist/cjs/integrations/amazon-pay.js",
    "content": "(()=>{var t={4325(t,n,e){\"use strict\";e.d(n,{g:()=>o});var r=e(5889),o=function(){function t(){this._cache={}}return t.prototype.read=function(t,n){var e=this.getKey(t,n.params);return this._cache[e]||null},t.prototype.write=function(t,n,e){var r=this.getKey(t,n.params);this._cache[r]=e},t.prototype.getKey=function(t,n){return void 0===n&&(n={}),0===Object.keys(n).length?t:\"\".concat(t,\"?\").concat(r.stringify(n))},t}()},321(t,n,e){\"use strict\";e.d(n,{A:()=>a});var r=e(168),o=e(1675),i=e(5861),u=e(4670);function a(t){return new u.A(new i.A,new o.A,r,t)}},6889(t,n,e){\"use strict\";e.d(n,{A:()=>o});var r=e(2024);function o(t){return new r.A(t)}},4043(t,n,e){\"use strict\";e.r(n),e.d(n,{RequestSender:()=>i.A,Timeout:()=>u.A,createRequestSender:()=>r.A,createTimeout:()=>o.A});var r=e(321),o=e(6889),i=e(4670),u=e(2024)},4843(t,n,e){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}e.d(n,{A:()=>r})},1675(t,n,e){\"use strict\";e.d(n,{A:()=>a});var r=e(1635),o=e(710),i=/application\\/(\\w+\\+)?json/,u=/application\\/x-www-form-urlencoded/;const a=function(){function t(){}return t.prototype.toRequestBody=function(t){var n=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(i.test(n))return JSON.stringify(t.body);if(u.test(n))return(0,o.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var n=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,n),headers:n,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,n){var e=this._getHeader(n,\"Content-Type\");return t&&i.test(e)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,n){var e,o=n.split(\":\"),i=(o.shift()||\"\").trim();return i?(0,r.__assign)((0,r.__assign)({},t),((e={})[i.toLowerCase()]=o.join(\":\").trim(),e)):t},{})},t.prototype._getHeader=function(t,n){return t&&n&&(t[n]||t[n.toLowerCase()])||\"\"},t}()},5861(t,n,e){\"use strict\";e.d(n,{A:()=>o});var r=e(5889);const o=function(){function t(){}return t.prototype.createRequest=function(t,n){var e=new XMLHttpRequest;return this._configureRequest(e,t,n),e},t.prototype._configureRequest=function(t,n,e){void 0===e&&(e={}),t.open(e.method||\"GET\",this._formatUrl(n,e.params,e.encodeParams),!0),e.headers&&this._configureRequestHeaders(t,e.headers),\"boolean\"==typeof e.credentials&&(t.withCredentials=e.credentials),\"number\"==typeof e.timeout&&(t.timeout=e.timeout)},t.prototype._configureRequestHeaders=function(t,n){Object.keys(n).filter(function(t){return null!==n[t]}).forEach(function(e){t.setRequestHeader(e,n[e])})},t.prototype._formatUrl=function(t,n,e){return void 0===e&&(e=!0),n&&0!==Object.keys(n).length?\"\".concat(t,\"?\").concat(r.stringify(n,{encode:e})):t},t}()},4670(t,n,e){\"use strict\";e.d(n,{A:()=>s});var r=e(1635),o=e(35),i=e.n(o),u=e(4325),a=e(4843),c=e(2024);const s=function(){function t(t,n,e,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=n,this._cookie=e,this._options=r,this._cache=this._options.cache||new u.g}return t.prototype.sendRequest=function(t,n){var e=this,r=this._mergeDefaultOptions(t,n),o=this._getCachedRequest(t,r);if(o)return Promise.resolve(o);var i=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(n,o){var u=function(){var u=e._payloadTransformer.toResponse(i);u.status>=200&&u.status<300?(e._cacheRequest(t,r,u),n(u)):o(u)};i.onload=u,i.onerror=u,i.onabort=u,i.ontimeout=u,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return i.abort()}),r.timeout.start()),(0,a.A)(r.timeout)&&r.timeout.then(function(){return i.abort()}),i.send(e._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"GET\"}))},t.prototype.post=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"POST\"}))},t.prototype.put=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"PUT\"}))},t.prototype.patch=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"PATCH\"}))},t.prototype.delete=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,n){var e={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&e.headers&&!this._isAssetRequest(t,n)&&this._isLocalRequest(t)&&(e.headers[\"X-XSRF-TOKEN\"]=r),n&&n.body&&e.headers&&(e.headers[\"Content-Type\"]=\"application/json\"),i()({},e,n)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,n){return this._shouldCacheRequest(n)?this._cache.read(t,n):null},t.prototype._cacheRequest=function(t,n,e){this._shouldCacheRequest(n)&&this._cache.write(t,n,e)},t.prototype._isAssetRequest=function(t,n){return(!n||!n.method||\"GET\"===n.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,n,e){\"use strict\";e.d(n,{A:()=>r});const r=function(){function t(t){var n=this;this._delay=t,this._promise=new Promise(function(t){n._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,n,e){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(n){return void 0!==t[n]}).map(function(n){var e=t[n];return\"string\"==typeof e?\"\".concat(n,\"=\").concat(encodeURIComponent(e)):\"\".concat(n,\"=\").concat(encodeURIComponent(JSON.stringify(e)||\"\"))}).join(\"&\")}e.d(n,{A:()=>r})},5889(t,n,e){\"use strict\";const r=e(803),o=e(1915),i=e(1657),u=e(3814);function a(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,n){return n.encode?n.strict?r(t):encodeURIComponent(t):t}function s(t,n){return n.decode?o(t):t}function f(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?f(Object.keys(t)).sort((t,n)=>Number(t)-Number(n)).map(n=>t[n]):t}function l(t){const n=t.indexOf(\"#\");return-1!==n&&(t=t.slice(0,n)),t}function p(t){const n=(t=l(t)).indexOf(\"?\");return-1===n?\"\":t.slice(n+1)}function h(t,n){return n.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!n.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function d(t,n){a((n=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},n)).arrayFormatSeparator);const e=function(t){let n;switch(t.arrayFormat){case\"index\":return(t,e,r)=>{n=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),n?(void 0===r[t]&&(r[t]={}),r[t][n[1]]=e):r[t]=e};case\"bracket\":return(t,e,r)=>{n=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),n?void 0!==r[t]?r[t]=[].concat(r[t],e):r[t]=[e]:r[t]=e};case\"comma\":case\"separator\":return(n,e,r)=>{const o=\"string\"==typeof e&&e.includes(t.arrayFormatSeparator),i=\"string\"==typeof e&&!o&&s(e,t).includes(t.arrayFormatSeparator);e=i?s(e,t):e;const u=o||i?e.split(t.arrayFormatSeparator).map(n=>s(n,t)):null===e?e:s(e,t);r[n]=u};default:return(t,n,e)=>{void 0!==e[t]?e[t]=[].concat(e[t],n):e[t]=n}}}(n),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const o of t.split(\"&\")){if(\"\"===o)continue;let[t,u]=i(n.decode?o.replace(/\\+/g,\" \"):o,\"=\");u=void 0===u?null:[\"comma\",\"separator\"].includes(n.arrayFormat)?u:s(u,n),e(s(t,n),u,r)}for(const t of Object.keys(r)){const e=r[t];if(\"object\"==typeof e&&null!==e)for(const t of Object.keys(e))e[t]=h(e[t],n);else r[t]=h(e,n)}return!1===n.sort?r:(!0===n.sort?Object.keys(r).sort():Object.keys(r).sort(n.sort)).reduce((t,n)=>{const e=r[n];return Boolean(e)&&\"object\"==typeof e&&!Array.isArray(e)?t[n]=f(e):t[n]=e,t},Object.create(null))}n.extract=p,n.parse=d,n.stringify=(t,n)=>{if(!t)return\"\";a((n=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},n)).arrayFormatSeparator);const e=e=>n.skipNull&&null==t[e]||n.skipEmptyString&&\"\"===t[e],r=function(t){switch(t.arrayFormat){case\"index\":return n=>(e,r)=>{const o=e.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,[c(n,t),\"[\",o,\"]\"].join(\"\")]:[...e,[c(n,t),\"[\",c(o,t),\"]=\",c(r,t)].join(\"\")]};case\"bracket\":return n=>(e,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,[c(n,t),\"[]\"].join(\"\")]:[...e,[c(n,t),\"[]=\",c(r,t)].join(\"\")];case\"comma\":case\"separator\":return n=>(e,r)=>null==r||0===r.length?e:0===e.length?[[c(n,t),\"=\",c(r,t)].join(\"\")]:[[e,c(r,t)].join(t.arrayFormatSeparator)];default:return n=>(e,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,c(n,t)]:[...e,[c(n,t),\"=\",c(r,t)].join(\"\")]}}(n),o={};for(const n of Object.keys(t))e(n)||(o[n]=t[n]);const i=Object.keys(o);return!1!==n.sort&&i.sort(n.sort),i.map(e=>{const o=t[e];return void 0===o?\"\":null===o?c(e,n):Array.isArray(o)?o.reduce(r(e),[]).join(\"&\"):c(e,n)+\"=\"+c(o,n)}).filter(t=>t.length>0).join(\"&\")},n.parseUrl=(t,n)=>{n=Object.assign({decode:!0},n);const[e,r]=i(t,\"#\");return Object.assign({url:e.split(\"?\")[0]||\"\",query:d(p(t),n)},n&&n.parseFragmentIdentifier&&r?{fragmentIdentifier:s(r,n)}:{})},n.stringifyUrl=(t,e)=>{e=Object.assign({encode:!0,strict:!0},e);const r=l(t.url).split(\"?\")[0]||\"\",o=n.extract(t.url),i=n.parse(o,{sort:!1}),u=Object.assign(i,t.query);let a=n.stringify(u,e);a&&(a=`?${a}`);let s=function(t){let n=\"\";const e=t.indexOf(\"#\");return-1!==e&&(n=t.slice(e)),n}(t.url);return t.fragmentIdentifier&&(s=`#${c(t.fragmentIdentifier,e)}`),`${r}${a}${s}`},n.pick=(t,e,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:o,query:i,fragmentIdentifier:a}=n.parseUrl(t,r);return n.stringifyUrl({url:o,query:u(i,e),fragmentIdentifier:a},r)},n.exclude=(t,e,r)=>{const o=Array.isArray(e)?t=>!e.includes(t):(t,n)=>!e(t,n);return n.pick(t,o,r)}},5477(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(){}return t.prototype.canSupportRel=function(t){var n=document.createElement(\"link\");return!!(n.relList&&n.relList.supports&&n.relList.supports(t))},t}();n.default=e},471(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return new i.default(new o.default,(0,r.createRequestSender)())};var r=e(4043),o=e(5477),i=e(4886)},9722(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return new i.default(new o.default,(0,r.createRequestSender)())};var r=e(4043),o=e(5477),i=e(7995)},5895(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return r||(r=(0,o.default)()),r};var r,o=e(471)},282(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return r||(r=(0,o.default)()),r};var r,o=e(9722)},315(t,n,e){\"use strict\";n.vQ=void 0;e(4886),e(471);var r=e(5895);Object.defineProperty(n,\"vQ\",{enumerable:!0,get:function(){return r.default}});e(7995),e(9722),e(282)},4886(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(t,n){this._browserSupport=t,this._requestSender=n,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,n){var e=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,o){var i=document.createElement(\"script\"),u=n||{},a=u.async,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){i.setAttribute(t,f[t])}),i.onload=function(){return r()},i.onreadystatechange=function(){return r()},i.onerror=function(n){delete e._scripts[t],o(n)},i.async=c,i.src=t,document.body.appendChild(i)})),this._scripts[t]},t.prototype.loadScripts=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.loadScript(t,n)})).then(function(){})},t.prototype.preloadScript=function(t,n){var e=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,o){var i=(n||{}).prefetch,u=void 0!==i&&i?\"prefetch\":\"preload\";if(e._browserSupport.canSupportRel(u)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=u,a.href=t,a.onload=function(){r()},a.onerror=function(){delete e._preloadedScripts[t],o()},document.head.appendChild(a)}else e._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(o)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.preloadScript(t,n)})).then(function(){})},t}();n.default=e},7995(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(t,n){this._browserSupport=t,this._requestSender=n,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,n){var e=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,o){var i=document.createElement(\"link\"),u=n||{},a=u.prepend,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){i.setAttribute(t,f[t])}),i.onload=function(){return r()},i.onerror=function(n){delete e._stylesheets[t],o(n)},i.rel=\"stylesheet\",i.href=t,c&&document.head.children[0]?document.head.insertBefore(i,document.head.children[0]):document.head.appendChild(i)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.loadStylesheet(t,n)})).then(function(){})},t.prototype.preloadStylesheet=function(t,n){var e=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,o){var i=(n||{}).prefetch,u=void 0!==i&&i,a=u?\"prefetch\":\"preload\";if(e._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=u?\"prefetch\":\"preload\",c.href=t,c.onload=function(){r()},c.onerror=function(n){delete e._preloadedStylesheets[t],o(n)},document.head.appendChild(c)}else e._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(o)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.preloadStylesheet(t,n)})).then(function(){})},t}();n.default=e},1915(t){\"use strict\";var n=\"%[a-f0-9]{2}\",e=new RegExp(\"(\"+n+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+n+\")+\",\"gi\");function o(t,n){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;n=n||1;var e=t.slice(0,n),r=t.slice(n);return Array.prototype.concat.call([],o(e),o(r))}function i(t){try{return decodeURIComponent(t)}catch(i){for(var n=t.match(e)||[],r=1;r<n.length;r++)n=(t=o(n,r).join(\"\")).match(e)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(n){return function(t){for(var n={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},e=r.exec(t);e;){try{n[e[0]]=decodeURIComponent(e[0])}catch(t){var o=i(e[0]);o!==e[0]&&(n[e[0]]=o)}e=r.exec(t)}n[\"%C2\"]=\"�\";for(var u=Object.keys(n),a=0;a<u.length;a++){var c=u[a];t=t.replace(new RegExp(c,\"g\"),n[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,n){for(var e={},r=Object.keys(t),o=Array.isArray(n),i=0;i<r.length;i++){var u=r[i],a=t[u];(o?-1!==n.indexOf(u):n(u,a,t))&&(e[u]=a)}return e}},168(t){var n;n=function(){function t(){for(var t=0,n={};t<arguments.length;t++){var e=arguments[t];for(var r in e)n[r]=e[r]}return n}function n(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function e(r){function o(){}function i(n,e,i){if(\"undefined\"!=typeof document){\"number\"==typeof(i=t({path:\"/\"},o.defaults,i)).expires&&(i.expires=new Date(1*new Date+864e5*i.expires)),i.expires=i.expires?i.expires.toUTCString():\"\";try{var u=JSON.stringify(e);/^[\\{\\[]/.test(u)&&(e=u)}catch(t){}e=r.write?r.write(e,n):encodeURIComponent(String(e)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),n=encodeURIComponent(String(n)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in i)i[c]&&(a+=\"; \"+c,!0!==i[c]&&(a+=\"=\"+i[c].split(\";\")[0]));return document.cookie=n+\"=\"+e+a}}function u(t,e){if(\"undefined\"!=typeof document){for(var o={},i=document.cookie?document.cookie.split(\"; \"):[],u=0;u<i.length;u++){var a=i[u].split(\"=\"),c=a.slice(1).join(\"=\");e||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var s=n(a[0]);if(c=(r.read||r)(c,s)||n(c),e)try{c=JSON.parse(c)}catch(t){}if(o[s]=c,t===s)break}catch(t){}}return t?o[t]:o}}return o.set=i,o.get=function(t){return u(t,!1)},o.getJSON=function(t){return u(t,!0)},o.remove=function(n,e){i(n,\"\",t(e,{expires:-1}))},o.defaults={},o.withConverter=e,o}(function(){})},\"function\"==typeof define&&define.amd&&define(n),t.exports=n()},35(t,n,e){t=e.nmd(t);var r=\"__lodash_hash_undefined__\",o=9007199254740991,i=\"[object Arguments]\",u=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,s=/^(?:0|[1-9]\\d*)$/,f={};f[\"[object Float32Array]\"]=f[\"[object Float64Array]\"]=f[\"[object Int8Array]\"]=f[\"[object Int16Array]\"]=f[\"[object Int32Array]\"]=f[\"[object Uint8Array]\"]=f[\"[object Uint8ClampedArray]\"]=f[\"[object Uint16Array]\"]=f[\"[object Uint32Array]\"]=!0,f[i]=f[\"[object Array]\"]=f[\"[object ArrayBuffer]\"]=f[\"[object Boolean]\"]=f[\"[object DataView]\"]=f[\"[object Date]\"]=f[\"[object Error]\"]=f[u]=f[\"[object Map]\"]=f[\"[object Number]\"]=f[a]=f[\"[object RegExp]\"]=f[\"[object Set]\"]=f[\"[object String]\"]=f[\"[object WeakMap]\"]=!1;var l,p,h,d=\"object\"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,y=\"object\"==typeof self&&self&&self.Object===Object&&self,v=d||y||Function(\"return this\")(),_=n&&!n.nodeType&&n,g=_&&t&&!t.nodeType&&t,m=g&&g.exports===_,b=m&&d.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),P=w&&w.isTypedArray,j=Array.prototype,S=Function.prototype,O=Object.prototype,C=v[\"__core-js_shared__\"],z=S.toString,A=O.hasOwnProperty,x=(l=/[^.]+$/.exec(C&&C.keys&&C.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",I=O.toString,k=z.call(Object),R=RegExp(\"^\"+z.call(A).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),E=m?v.Buffer:void 0,T=v.Symbol,M=v.Uint8Array,B=(E&&E.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(t){return p(h(t))}),U=Object.create,N=O.propertyIsEnumerable,q=j.splice,D=T?T.toStringTag:void 0,F=function(){try{var t=at(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),L=E?E.isBuffer:void 0,V=Math.max,$=Date.now,W=at(v,\"Map\"),K=at(Object,\"create\"),G=function(){function t(){}return function(n){if(!mt(n))return{};if(U)return U(n);t.prototype=n;var e=new t;return t.prototype=void 0,e}}();function H(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function J(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Z(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function X(t){var n=this.__data__=new J(t);this.size=n.size}function Y(t,n,e){(void 0!==e&&!pt(t[n],e)||void 0===e&&!(n in t))&&nt(t,n,e)}function Q(t,n,e){var r=t[n];A.call(t,n)&&pt(r,e)&&(void 0!==e||n in t)||nt(t,n,e)}function tt(t,n){for(var e=t.length;e--;)if(pt(t[e][0],n))return e;return-1}function nt(t,n,e){\"__proto__\"==n&&F?F(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}H.prototype.clear=function(){this.__data__=K?K(null):{},this.size=0},H.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},H.prototype.get=function(t){var n=this.__data__;if(K){var e=n[t];return e===r?void 0:e}return A.call(n,t)?n[t]:void 0},H.prototype.has=function(t){var n=this.__data__;return K?void 0!==n[t]:A.call(n,t)},H.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=K&&void 0===n?r:n,this},J.prototype.clear=function(){this.__data__=[],this.size=0},J.prototype.delete=function(t){var n=this.__data__,e=tt(n,t);return!(e<0||(e==n.length-1?n.pop():q.call(n,e,1),--this.size,0))},J.prototype.get=function(t){var n=this.__data__,e=tt(n,t);return e<0?void 0:n[e][1]},J.prototype.has=function(t){return tt(this.__data__,t)>-1},J.prototype.set=function(t,n){var e=this.__data__,r=tt(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},Z.prototype.clear=function(){this.size=0,this.__data__={hash:new H,map:new(W||J),string:new H}},Z.prototype.delete=function(t){var n=ut(this,t).delete(t);return this.size-=n?1:0,n},Z.prototype.get=function(t){return ut(this,t).get(t)},Z.prototype.has=function(t){return ut(this,t).has(t)},Z.prototype.set=function(t,n){var e=ut(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},X.prototype.clear=function(){this.__data__=new J,this.size=0},X.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},X.prototype.get=function(t){return this.__data__.get(t)},X.prototype.has=function(t){return this.__data__.has(t)},X.prototype.set=function(t,n){var e=this.__data__;if(e instanceof J){var r=e.__data__;if(!W||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new Z(r)}return e.set(t,n),this.size=e.size,this};function et(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":D&&D in Object(t)?function(t){var n=A.call(t,D),e=t[D];try{t[D]=void 0;var r=!0}catch(t){}var o=I.call(t);return r&&(n?t[D]=e:delete t[D]),o}(t):function(t){return I.call(t)}(t)}function rt(t){return bt(t)&&et(t)==i}function ot(t,n,e,r,o){t!==n&&function(t,n,e){for(var r=-1,o=Object(t),i=e(t),u=i.length;u--;){var a=i[++r];if(!1===n(o[a],a,o))break}}(n,function(i,u){if(o||(o=new X),mt(i))!function(t,n,e,r,o,i,u){var c=ft(t,e),s=ft(n,e),f=u.get(s);if(f)Y(t,e,f);else{var l,p,h,d,y,v=i?i(c,s,e+\"\",t,n,u):void 0,_=void 0===v;if(_){var g=dt(s),m=!g&&vt(s),b=!g&&!m&&wt(s);v=s,g||m||b?dt(c)?v=c:bt(y=c)&&yt(y)?v=function(t,n){var e=-1,r=t.length;for(n||(n=Array(r));++e<r;)n[e]=t[e];return n}(c):m?(_=!1,v=function(t){return t.slice()}(s)):b?(_=!1,d=new(h=(l=s).buffer).constructor(h.byteLength),new M(d).set(new M(h)),p=d,v=new l.constructor(p,l.byteOffset,l.length)):v=[]:function(t){if(!bt(t)||et(t)!=a)return!1;var n=B(t);if(null===n)return!0;var e=A.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof e&&e instanceof e&&z.call(e)==k}(s)||ht(s)?(v=c,ht(c)?v=function(t){return function(t,n,e){var r=!e;e||(e={});for(var o=-1,i=n.length;++o<i;){var u=n[o],a=void 0;void 0===a&&(a=t[u]),r?nt(e,u,a):Q(e,u,a)}return e}(t,Pt(t))}(c):mt(c)&&!_t(c)||(v=function(t){return\"function\"!=typeof t.constructor||st(t)?{}:G(B(t))}(s))):_=!1}_&&(u.set(s,v),o(v,s,r,i,u),u.delete(s)),Y(t,e,v)}}(t,n,u,e,ot,r,o);else{var c=r?r(ft(t,u),i,u+\"\",t,n,o):void 0;void 0===c&&(c=i),Y(t,u,c)}},Pt)}var it=F?function(t,n){return F(t,\"toString\",{configurable:!0,enumerable:!1,value:(e=n,function(){return e}),writable:!0});var e}:Ot;function ut(t,n){var e,r,o=t.__data__;return(\"string\"==(r=typeof(e=n))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==e:null===e)?o[\"string\"==typeof n?\"string\":\"hash\"]:o.map}function at(t,n){var e=function(t,n){return null==t?void 0:t[n]}(t,n);return function(t){return!(!mt(t)||function(t){return!!x&&x in t}(t))&&(_t(t)?R:c).test(function(t){if(null!=t){try{return z.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(e)?e:void 0}function ct(t,n){var e=typeof t;return!!(n=n??o)&&(\"number\"==e||\"symbol\"!=e&&s.test(t))&&t>-1&&t%1==0&&t<n}function st(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||O)}function ft(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var lt=function(t){var n=0,e=0;return function(){var r=$(),o=16-(r-e);if(e=r,o>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(void 0,arguments)}}(it);function pt(t,n){return t===n||t!=t&&n!=n}var ht=rt(function(){return arguments}())?rt:function(t){return bt(t)&&A.call(t,\"callee\")&&!N.call(t,\"callee\")},dt=Array.isArray;function yt(t){return null!=t&&gt(t.length)&&!_t(t)}var vt=L||function(){return!1};function _t(t){if(!mt(t))return!1;var n=et(t);return n==u||\"[object GeneratorFunction]\"==n||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=o}function mt(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=P?function(t){return function(n){return t(n)}}(P):function(t){return bt(t)&&gt(t.length)&&!!f[et(t)]};function Pt(t){return yt(t)?function(t,n){var e=dt(t),r=!e&&ht(t),o=!e&&!r&&vt(t),i=!e&&!r&&!o&&wt(t),u=e||r||o||i,a=u?function(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}(t.length,String):[],c=a.length;for(var s in t)!n&&!A.call(t,s)||u&&(\"length\"==s||o&&(\"offset\"==s||\"parent\"==s)||i&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||ct(s,c))||a.push(s);return a}(t,!0):function(t){if(!mt(t))return function(t){var n=[];if(null!=t)for(var e in Object(t))n.push(e);return n}(t);var n=st(t),e=[];for(var r in t)(\"constructor\"!=r||!n&&A.call(t,r))&&e.push(r);return e}(t)}var jt,St=(jt=function(t,n,e){ot(t,n,e)},function(t,n){return lt(function(t,n,e){return n=V(void 0===n?t.length-1:n,0),function(){for(var r=arguments,o=-1,i=V(r.length-n,0),u=Array(i);++o<i;)u[o]=r[n+o];o=-1;for(var a=Array(n+1);++o<n;)a[o]=r[o];return a[n]=e(u),function(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}(t,this,a)}}(t,n,Ot),t+\"\")}(function(t,n){var e=-1,r=n.length,o=r>1?n[r-1]:void 0,i=r>2?n[2]:void 0;for(o=jt.length>3&&\"function\"==typeof o?(r--,o):void 0,i&&function(t,n,e){if(!mt(e))return!1;var r=typeof n;return!!(\"number\"==r?yt(e)&&ct(n,e.length):\"string\"==r&&n in e)&&pt(e[n],t)}(n[0],n[1],i)&&(o=r<3?void 0:o,r=1),t=Object(t);++e<r;){var u=n[e];u&&jt(t,u,e)}return t}));function Ot(t){return t}t.exports=St},9440(t,n,e){t=e.nmd(t),function(){var r,o=\"Expected a function\",i=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,s=1/0,f=9007199254740991,l=NaN,p=4294967295,h=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",y=\"[object Array]\",v=\"[object Boolean]\",_=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",P=\"[object Number]\",j=\"[object Object]\",S=\"[object Promise]\",O=\"[object RegExp]\",C=\"[object Set]\",z=\"[object String]\",A=\"[object Symbol]\",x=\"[object WeakMap]\",I=\"[object ArrayBuffer]\",k=\"[object DataView]\",R=\"[object Float32Array]\",E=\"[object Float64Array]\",T=\"[object Int8Array]\",M=\"[object Int16Array]\",B=\"[object Int32Array]\",U=\"[object Uint8Array]\",N=\"[object Uint8ClampedArray]\",q=\"[object Uint16Array]\",D=\"[object Uint32Array]\",F=/\\b__p \\+= '';/g,L=/\\b(__p \\+=) '' \\+/g,V=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,$=/&(?:amp|lt|gt|quot|#39);/g,W=/[&<>\"']/g,K=RegExp($.source),G=RegExp(W.source),H=/<%-([\\s\\S]+?)%>/g,J=/<%([\\s\\S]+?)%>/g,Z=/<%=([\\s\\S]+?)%>/g,X=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Y=/^\\w*$/,Q=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,nt=RegExp(tt.source),et=/^\\s+/,rt=/\\s/,ot=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,it=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,yt=/^0o[0-7]+$/i,vt=/^(?:0|[1-9]\\d*)$/,_t=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",Pt=\"\\\\u2700-\\\\u27bf\",jt=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",St=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ot=\"\\\\ufe0e\\\\ufe0f\",Ct=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",zt=\"[\"+bt+\"]\",At=\"[\"+Ct+\"]\",xt=\"[\"+wt+\"]\",It=\"\\\\d+\",kt=\"[\"+Pt+\"]\",Rt=\"[\"+jt+\"]\",Et=\"[^\"+bt+Ct+It+Pt+jt+St+\"]\",Tt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Mt=\"[^\"+bt+\"]\",Bt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ut=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Nt=\"[\"+St+\"]\",qt=\"\\\\u200d\",Dt=\"(?:\"+Rt+\"|\"+Et+\")\",Ft=\"(?:\"+Nt+\"|\"+Et+\")\",Lt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Vt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",$t=\"(?:\"+xt+\"|\"+Tt+\")?\",Wt=\"[\"+Ot+\"]?\",Kt=Wt+$t+\"(?:\"+qt+\"(?:\"+[Mt,Bt,Ut].join(\"|\")+\")\"+Wt+$t+\")*\",Gt=\"(?:\"+[kt,Bt,Ut].join(\"|\")+\")\"+Kt,Ht=\"(?:\"+[Mt+xt+\"?\",xt,Bt,Ut,zt].join(\"|\")+\")\",Jt=RegExp(\"['’]\",\"g\"),Zt=RegExp(xt,\"g\"),Xt=RegExp(Tt+\"(?=\"+Tt+\")|\"+Ht+Kt,\"g\"),Yt=RegExp([Nt+\"?\"+Rt+\"+\"+Lt+\"(?=\"+[At,Nt,\"$\"].join(\"|\")+\")\",Ft+\"+\"+Vt+\"(?=\"+[At,Nt+Dt,\"$\"].join(\"|\")+\")\",Nt+\"?\"+Dt+\"+\"+Lt,Nt+\"+\"+Vt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",It,Gt].join(\"|\"),\"g\"),Qt=RegExp(\"[\"+qt+bt+wt+Ot+\"]\"),tn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,nn=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],en=-1,rn={};rn[R]=rn[E]=rn[T]=rn[M]=rn[B]=rn[U]=rn[N]=rn[q]=rn[D]=!0,rn[d]=rn[y]=rn[I]=rn[v]=rn[k]=rn[_]=rn[g]=rn[m]=rn[w]=rn[P]=rn[j]=rn[O]=rn[C]=rn[z]=rn[x]=!1;var on={};on[d]=on[y]=on[I]=on[k]=on[v]=on[_]=on[R]=on[E]=on[T]=on[M]=on[B]=on[w]=on[P]=on[j]=on[O]=on[C]=on[z]=on[A]=on[U]=on[N]=on[q]=on[D]=!0,on[g]=on[m]=on[x]=!1;var un={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},an=parseFloat,cn=parseInt,sn=\"object\"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,fn=\"object\"==typeof self&&self&&self.Object===Object&&self,ln=sn||fn||Function(\"return this\")(),pn=n&&!n.nodeType&&n,hn=pn&&t&&!t.nodeType&&t,dn=hn&&hn.exports===pn,yn=dn&&sn.process,vn=function(){try{return hn&&hn.require&&hn.require(\"util\").types||yn&&yn.binding&&yn.binding(\"util\")}catch(t){}}(),_n=vn&&vn.isArrayBuffer,gn=vn&&vn.isDate,mn=vn&&vn.isMap,bn=vn&&vn.isRegExp,wn=vn&&vn.isSet,Pn=vn&&vn.isTypedArray;function jn(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}function Sn(t,n,e,r){for(var o=-1,i=null==t?0:t.length;++o<i;){var u=t[o];n(r,u,e(u),t)}return r}function On(t,n){for(var e=-1,r=null==t?0:t.length;++e<r&&!1!==n(t[e],e,t););return t}function Cn(t,n){for(var e=null==t?0:t.length;e--&&!1!==n(t[e],e,t););return t}function zn(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(!n(t[e],e,t))return!1;return!0}function An(t,n){for(var e=-1,r=null==t?0:t.length,o=0,i=[];++e<r;){var u=t[e];n(u,e,t)&&(i[o++]=u)}return i}function xn(t,n){return!(null==t||!t.length)&&qn(t,n,0)>-1}function In(t,n,e){for(var r=-1,o=null==t?0:t.length;++r<o;)if(e(n,t[r]))return!0;return!1}function kn(t,n){for(var e=-1,r=null==t?0:t.length,o=Array(r);++e<r;)o[e]=n(t[e],e,t);return o}function Rn(t,n){for(var e=-1,r=n.length,o=t.length;++e<r;)t[o+e]=n[e];return t}function En(t,n,e,r){var o=-1,i=null==t?0:t.length;for(r&&i&&(e=t[++o]);++o<i;)e=n(e,t[o],o,t);return e}function Tn(t,n,e,r){var o=null==t?0:t.length;for(r&&o&&(e=t[--o]);o--;)e=n(e,t[o],o,t);return e}function Mn(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(n(t[e],e,t))return!0;return!1}var Bn=Vn(\"length\");function Un(t,n,e){var r;return e(t,function(t,e,o){if(n(t,e,o))return r=e,!1}),r}function Nn(t,n,e,r){for(var o=t.length,i=e+(r?1:-1);r?i--:++i<o;)if(n(t[i],i,t))return i;return-1}function qn(t,n,e){return n==n?function(t,n,e){for(var r=e-1,o=t.length;++r<o;)if(t[r]===n)return r;return-1}(t,n,e):Nn(t,Fn,e)}function Dn(t,n,e,r){for(var o=e-1,i=t.length;++o<i;)if(r(t[o],n))return o;return-1}function Fn(t){return t!=t}function Ln(t,n){var e=null==t?0:t.length;return e?Kn(t,n)/e:l}function Vn(t){return function(n){return null==n?r:n[t]}}function $n(t){return function(n){return null==t?r:t[n]}}function Wn(t,n,e,r,o){return o(t,function(t,o,i){e=r?(r=!1,t):n(e,t,o,i)}),e}function Kn(t,n){for(var e,o=-1,i=t.length;++o<i;){var u=n(t[o]);u!==r&&(e=e===r?u:e+u)}return e}function Gn(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}function Hn(t){return t?t.slice(0,le(t)+1).replace(et,\"\"):t}function Jn(t){return function(n){return t(n)}}function Zn(t,n){return kn(n,function(n){return t[n]})}function Xn(t,n){return t.has(n)}function Yn(t,n){for(var e=-1,r=t.length;++e<r&&qn(n,t[e],0)>-1;);return e}function Qn(t,n){for(var e=t.length;e--&&qn(n,t[e],0)>-1;);return e}var te=$n({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),ne=$n({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function ee(t){return\"\\\\\"+un[t]}function re(t){return Qt.test(t)}function oe(t){var n=-1,e=Array(t.size);return t.forEach(function(t,r){e[++n]=[r,t]}),e}function ie(t,n){return function(e){return t(n(e))}}function ue(t,n){for(var e=-1,r=t.length,o=0,i=[];++e<r;){var a=t[e];a!==n&&a!==u||(t[e]=u,i[o++]=e)}return i}function ae(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=t}),e}function ce(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=[t,t]}),e}function se(t){return re(t)?function(t){for(var n=Xt.lastIndex=0;Xt.test(t);)++n;return n}(t):Bn(t)}function fe(t){return re(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.split(\"\")}(t)}function le(t){for(var n=t.length;n--&&rt.test(t.charAt(n)););return n}var pe=$n({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),he=function t(n){var e,rt=(n=null==n?ln:he.defaults(ln.Object(),n,he.pick(ln,nn))).Array,bt=n.Date,wt=n.Error,Pt=n.Function,jt=n.Math,St=n.Object,Ot=n.RegExp,Ct=n.String,zt=n.TypeError,At=rt.prototype,xt=Pt.prototype,It=St.prototype,kt=n[\"__core-js_shared__\"],Rt=xt.toString,Et=It.hasOwnProperty,Tt=0,Mt=(e=/[^.]+$/.exec(kt&&kt.keys&&kt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+e:\"\",Bt=It.toString,Ut=Rt.call(St),Nt=ln._,qt=Ot(\"^\"+Rt.call(Et).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Dt=dn?n.Buffer:r,Ft=n.Symbol,Lt=n.Uint8Array,Vt=Dt?Dt.allocUnsafe:r,$t=ie(St.getPrototypeOf,St),Wt=St.create,Kt=It.propertyIsEnumerable,Gt=At.splice,Ht=Ft?Ft.isConcatSpreadable:r,Xt=Ft?Ft.iterator:r,Qt=Ft?Ft.toStringTag:r,un=function(){try{var t=si(St,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),sn=n.clearTimeout!==ln.clearTimeout&&n.clearTimeout,fn=bt&&bt.now!==ln.Date.now&&bt.now,pn=n.setTimeout!==ln.setTimeout&&n.setTimeout,hn=jt.ceil,yn=jt.floor,vn=St.getOwnPropertySymbols,Bn=Dt?Dt.isBuffer:r,$n=n.isFinite,de=At.join,ye=ie(St.keys,St),ve=jt.max,_e=jt.min,ge=bt.now,me=n.parseInt,be=jt.random,we=At.reverse,Pe=si(n,\"DataView\"),je=si(n,\"Map\"),Se=si(n,\"Promise\"),Oe=si(n,\"Set\"),Ce=si(n,\"WeakMap\"),ze=si(St,\"create\"),Ae=Ce&&new Ce,xe={},Ie=Ui(Pe),ke=Ui(je),Re=Ui(Se),Ee=Ui(Oe),Te=Ui(Ce),Me=Ft?Ft.prototype:r,Be=Me?Me.valueOf:r,Ue=Me?Me.toString:r;function Ne(t){if(ta(t)&&!Vu(t)&&!(t instanceof Le)){if(t instanceof Fe)return t;if(Et.call(t,\"__wrapped__\"))return Ni(t)}return new Fe(t)}var qe=function(){function t(){}return function(n){if(!Qu(n))return{};if(Wt)return Wt(n);t.prototype=n;var e=new t;return t.prototype=r,e}}();function De(){}function Fe(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=r}function Le(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function Ve(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function $e(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function We(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Ke(t){var n=-1,e=null==t?0:t.length;for(this.__data__=new We;++n<e;)this.add(t[n])}function Ge(t){var n=this.__data__=new $e(t);this.size=n.size}function He(t,n){var e=Vu(t),r=!e&&Lu(t),o=!e&&!r&&Gu(t),i=!e&&!r&&!o&&ca(t),u=e||r||o||i,a=u?Gn(t.length,Ct):[],c=a.length;for(var s in t)!n&&!Et.call(t,s)||u&&(\"length\"==s||o&&(\"offset\"==s||\"parent\"==s)||i&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||vi(s,c))||a.push(s);return a}function Je(t){var n=t.length;return n?t[Wr(0,n-1)]:r}function Ze(t,n){return Ri(zo(t),ir(n,0,t.length))}function Xe(t){return Ri(zo(t))}function Ye(t,n,e){(e!==r&&!qu(t[n],e)||e===r&&!(n in t))&&rr(t,n,e)}function Qe(t,n,e){var o=t[n];Et.call(t,n)&&qu(o,e)&&(e!==r||n in t)||rr(t,n,e)}function tr(t,n){for(var e=t.length;e--;)if(qu(t[e][0],n))return e;return-1}function nr(t,n,e,r){return fr(t,function(t,o,i){n(r,t,e(t),i)}),r}function er(t,n){return t&&Ao(n,Ia(n),t)}function rr(t,n,e){\"__proto__\"==n&&un?un(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}function or(t,n){for(var e=-1,o=n.length,i=rt(o),u=null==t;++e<o;)i[e]=u?r:Oa(t,n[e]);return i}function ir(t,n,e){return t==t&&(e!==r&&(t=t<=e?t:e),n!==r&&(t=t>=n?t:n)),t}function ur(t,n,e,o,i,u){var a,c=1&n,s=2&n,f=4&n;if(e&&(a=i?e(t,o,i,u):e(t)),a!==r)return a;if(!Qu(t))return t;var l=Vu(t);if(l){if(a=function(t){var n=t.length,e=new t.constructor(n);return n&&\"string\"==typeof t[0]&&Et.call(t,\"index\")&&(e.index=t.index,e.input=t.input),e}(t),!c)return zo(t,a)}else{var p=pi(t),h=p==m||p==b;if(Gu(t))return wo(t,c);if(p==j||p==d||h&&!i){if(a=s||h?{}:di(t),!c)return s?function(t,n){return Ao(t,li(t),n)}(t,function(t,n){return t&&Ao(n,ka(n),t)}(a,t)):function(t,n){return Ao(t,fi(t),n)}(t,er(a,t))}else{if(!on[p])return i?t:{};a=function(t,n,e){var r,o=t.constructor;switch(n){case I:return Po(t);case v:case _:return new o(+t);case k:return function(t,n){var e=n?Po(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.byteLength)}(t,e);case R:case E:case T:case M:case B:case U:case N:case q:case D:return jo(t,e);case w:return new o;case P:case z:return new o(t);case O:return function(t){var n=new t.constructor(t.source,lt.exec(t));return n.lastIndex=t.lastIndex,n}(t);case C:return new o;case A:return r=t,Be?St(Be.call(r)):{}}}(t,p,c)}}u||(u=new Ge);var y=u.get(t);if(y)return y;u.set(t,a),ia(t)?t.forEach(function(r){a.add(ur(r,n,e,r,t,u))}):na(t)&&t.forEach(function(r,o){a.set(o,ur(r,n,e,o,t,u))});var g=l?r:(f?s?ei:ni:s?ka:Ia)(t);return On(g||t,function(r,o){g&&(r=t[o=r]),Qe(a,o,ur(r,n,e,o,t,u))}),a}function ar(t,n,e){var o=e.length;if(null==t)return!o;for(t=St(t);o--;){var i=e[o],u=n[i],a=t[i];if(a===r&&!(i in t)||!u(a))return!1}return!0}function cr(t,n,e){if(\"function\"!=typeof t)throw new zt(o);return Ai(function(){t.apply(r,e)},n)}function sr(t,n,e,r){var o=-1,i=xn,u=!0,a=t.length,c=[],s=n.length;if(!a)return c;e&&(n=kn(n,Jn(e))),r?(i=In,u=!1):n.length>=200&&(i=Xn,u=!1,n=new Ke(n));t:for(;++o<a;){var f=t[o],l=null==e?f:e(f);if(f=r||0!==f?f:0,u&&l==l){for(var p=s;p--;)if(n[p]===l)continue t;c.push(f)}else i(n,l,r)||c.push(f)}return c}Ne.templateSettings={escape:H,evaluate:J,interpolate:Z,variable:\"\",imports:{_:Ne}},Ne.prototype=De.prototype,Ne.prototype.constructor=Ne,Fe.prototype=qe(De.prototype),Fe.prototype.constructor=Fe,Le.prototype=qe(De.prototype),Le.prototype.constructor=Le,Ve.prototype.clear=function(){this.__data__=ze?ze(null):{},this.size=0},Ve.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},Ve.prototype.get=function(t){var n=this.__data__;if(ze){var e=n[t];return e===i?r:e}return Et.call(n,t)?n[t]:r},Ve.prototype.has=function(t){var n=this.__data__;return ze?n[t]!==r:Et.call(n,t)},Ve.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=ze&&n===r?i:n,this},$e.prototype.clear=function(){this.__data__=[],this.size=0},$e.prototype.delete=function(t){var n=this.__data__,e=tr(n,t);return!(e<0||(e==n.length-1?n.pop():Gt.call(n,e,1),--this.size,0))},$e.prototype.get=function(t){var n=this.__data__,e=tr(n,t);return e<0?r:n[e][1]},$e.prototype.has=function(t){return tr(this.__data__,t)>-1},$e.prototype.set=function(t,n){var e=this.__data__,r=tr(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},We.prototype.clear=function(){this.size=0,this.__data__={hash:new Ve,map:new(je||$e),string:new Ve}},We.prototype.delete=function(t){var n=ai(this,t).delete(t);return this.size-=n?1:0,n},We.prototype.get=function(t){return ai(this,t).get(t)},We.prototype.has=function(t){return ai(this,t).has(t)},We.prototype.set=function(t,n){var e=ai(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},Ke.prototype.add=Ke.prototype.push=function(t){return this.__data__.set(t,i),this},Ke.prototype.has=function(t){return this.__data__.has(t)},Ge.prototype.clear=function(){this.__data__=new $e,this.size=0},Ge.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},Ge.prototype.get=function(t){return this.__data__.get(t)},Ge.prototype.has=function(t){return this.__data__.has(t)},Ge.prototype.set=function(t,n){var e=this.__data__;if(e instanceof $e){var r=e.__data__;if(!je||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new We(r)}return e.set(t,n),this.size=e.size,this};var fr=ko(gr),lr=ko(mr,!0);function pr(t,n){var e=!0;return fr(t,function(t,r,o){return e=!!n(t,r,o)}),e}function hr(t,n,e){for(var o=-1,i=t.length;++o<i;){var u=t[o],a=n(u);if(null!=a&&(c===r?a==a&&!aa(a):e(a,c)))var c=a,s=u}return s}function dr(t,n){var e=[];return fr(t,function(t,r,o){n(t,r,o)&&e.push(t)}),e}function yr(t,n,e,r,o){var i=-1,u=t.length;for(e||(e=yi),o||(o=[]);++i<u;){var a=t[i];n>0&&e(a)?n>1?yr(a,n-1,e,r,o):Rn(o,a):r||(o[o.length]=a)}return o}var vr=Ro(),_r=Ro(!0);function gr(t,n){return t&&vr(t,n,Ia)}function mr(t,n){return t&&_r(t,n,Ia)}function br(t,n){return An(n,function(n){return Zu(t[n])})}function wr(t,n){for(var e=0,o=(n=_o(n,t)).length;null!=t&&e<o;)t=t[Bi(n[e++])];return e&&e==o?t:r}function Pr(t,n,e){var r=n(t);return Vu(t)?r:Rn(r,e(t))}function jr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Qt&&Qt in St(t)?function(t){var n=Et.call(t,Qt),e=t[Qt];try{t[Qt]=r;var o=!0}catch(t){}var i=Bt.call(t);return o&&(n?t[Qt]=e:delete t[Qt]),i}(t):function(t){return Bt.call(t)}(t)}function Sr(t,n){return t>n}function Or(t,n){return null!=t&&Et.call(t,n)}function Cr(t,n){return null!=t&&n in St(t)}function zr(t,n,e){for(var o=e?In:xn,i=t[0].length,u=t.length,a=u,c=rt(u),s=1/0,f=[];a--;){var l=t[a];a&&n&&(l=kn(l,Jn(n))),s=_e(l.length,s),c[a]=!e&&(n||i>=120&&l.length>=120)?new Ke(a&&l):r}l=t[0];var p=-1,h=c[0];t:for(;++p<i&&f.length<s;){var d=l[p],y=n?n(d):d;if(d=e||0!==d?d:0,!(h?Xn(h,y):o(f,y,e))){for(a=u;--a;){var v=c[a];if(!(v?Xn(v,y):o(t[a],y,e)))continue t}h&&h.push(y),f.push(d)}}return f}function Ar(t,n,e){var o=null==(t=Oi(t,n=_o(n,t)))?t:t[Bi(Ji(n))];return null==o?r:jn(o,t,e)}function xr(t){return ta(t)&&jr(t)==d}function Ir(t,n,e,o,i){return t===n||(null==t||null==n||!ta(t)&&!ta(n)?t!=t&&n!=n:function(t,n,e,o,i,u){var a=Vu(t),c=Vu(n),s=a?y:pi(t),f=c?y:pi(n),l=(s=s==d?j:s)==j,p=(f=f==d?j:f)==j,h=s==f;if(h&&Gu(t)){if(!Gu(n))return!1;a=!0,l=!1}if(h&&!l)return u||(u=new Ge),a||ca(t)?Qo(t,n,e,o,i,u):function(t,n,e,r,o,i,u){switch(e){case k:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case I:return!(t.byteLength!=n.byteLength||!i(new Lt(t),new Lt(n)));case v:case _:case P:return qu(+t,+n);case g:return t.name==n.name&&t.message==n.message;case O:case z:return t==n+\"\";case w:var a=oe;case C:var c=1&r;if(a||(a=ae),t.size!=n.size&&!c)return!1;var s=u.get(t);if(s)return s==n;r|=2,u.set(t,n);var f=Qo(a(t),a(n),r,o,i,u);return u.delete(t),f;case A:if(Be)return Be.call(t)==Be.call(n)}return!1}(t,n,s,e,o,i,u);if(!(1&e)){var m=l&&Et.call(t,\"__wrapped__\"),b=p&&Et.call(n,\"__wrapped__\");if(m||b){var S=m?t.value():t,x=b?n.value():n;return u||(u=new Ge),i(S,x,e,o,u)}}return!!h&&(u||(u=new Ge),function(t,n,e,o,i,u){var a=1&e,c=ni(t),s=c.length;if(s!=ni(n).length&&!a)return!1;for(var f=s;f--;){var l=c[f];if(!(a?l in n:Et.call(n,l)))return!1}var p=u.get(t),h=u.get(n);if(p&&h)return p==n&&h==t;var d=!0;u.set(t,n),u.set(n,t);for(var y=a;++f<s;){var v=t[l=c[f]],_=n[l];if(o)var g=a?o(_,v,l,n,t,u):o(v,_,l,t,n,u);if(!(g===r?v===_||i(v,_,e,o,u):g)){d=!1;break}y||(y=\"constructor\"==l)}if(d&&!y){var m=t.constructor,b=n.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in n)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return u.delete(t),u.delete(n),d}(t,n,e,o,i,u))}(t,n,e,o,Ir,i))}function kr(t,n,e,o){var i=e.length,u=i,a=!o;if(null==t)return!u;for(t=St(t);i--;){var c=e[i];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++i<u;){var s=(c=e[i])[0],f=t[s],l=c[1];if(a&&c[2]){if(f===r&&!(s in t))return!1}else{var p=new Ge;if(o)var h=o(f,l,s,t,n,p);if(!(h===r?Ir(l,f,3,o,p):h))return!1}}return!0}function Rr(t){return!(!Qu(t)||(n=t,Mt&&Mt in n))&&(Zu(t)?qt:dt).test(Ui(t));var n}function Er(t){return\"function\"==typeof t?t:null==t?ec:\"object\"==typeof t?Vu(t)?Nr(t[0],t[1]):Ur(t):lc(t)}function Tr(t){if(!wi(t))return ye(t);var n=[];for(var e in St(t))Et.call(t,e)&&\"constructor\"!=e&&n.push(e);return n}function Mr(t,n){return t<n}function Br(t,n){var e=-1,r=Wu(t)?rt(t.length):[];return fr(t,function(t,o,i){r[++e]=n(t,o,i)}),r}function Ur(t){var n=ci(t);return 1==n.length&&n[0][2]?ji(n[0][0],n[0][1]):function(e){return e===t||kr(e,t,n)}}function Nr(t,n){return gi(t)&&Pi(n)?ji(Bi(t),n):function(e){var o=Oa(e,t);return o===r&&o===n?Ca(e,t):Ir(n,o,3)}}function qr(t,n,e,o,i){t!==n&&vr(n,function(u,a){if(i||(i=new Ge),Qu(u))!function(t,n,e,o,i,u,a){var c=Ci(t,e),s=Ci(n,e),f=a.get(s);if(f)Ye(t,e,f);else{var l=u?u(c,s,e+\"\",t,n,a):r,p=l===r;if(p){var h=Vu(s),d=!h&&Gu(s),y=!h&&!d&&ca(s);l=s,h||d||y?Vu(c)?l=c:Ku(c)?l=zo(c):d?(p=!1,l=wo(s,!0)):y?(p=!1,l=jo(s,!0)):l=[]:ra(s)||Lu(s)?(l=c,Lu(c)?l=va(c):Qu(c)&&!Zu(c)||(l=di(s))):p=!1}p&&(a.set(s,l),i(l,s,o,u,a),a.delete(s)),Ye(t,e,l)}}(t,n,a,e,qr,o,i);else{var c=o?o(Ci(t,a),u,a+\"\",t,n,i):r;c===r&&(c=u),Ye(t,a,c)}},ka)}function Dr(t,n){var e=t.length;if(e)return vi(n+=n<0?e:0,e)?t[n]:r}function Fr(t,n,e){n=n.length?kn(n,function(t){return Vu(t)?function(n){return wr(n,1===t.length?t[0]:t)}:t}):[ec];var r=-1;n=kn(n,Jn(ui()));var o=Br(t,function(t,e,o){var i=kn(n,function(n){return n(t)});return{criteria:i,index:++r,value:t}});return function(t){var n=t.length;for(t.sort(function(t,n){return function(t,n,e){for(var r=-1,o=t.criteria,i=n.criteria,u=o.length,a=e.length;++r<u;){var c=So(o[r],i[r]);if(c)return r>=a?c:c*(\"desc\"==e[r]?-1:1)}return t.index-n.index}(t,n,e)});n--;)t[n]=t[n].value;return t}(o)}function Lr(t,n,e){for(var r=-1,o=n.length,i={};++r<o;){var u=n[r],a=wr(t,u);e(a,u)&&Zr(i,_o(u,t),a)}return i}function Vr(t,n,e,r){var o=r?Dn:qn,i=-1,u=n.length,a=t;for(t===n&&(n=zo(n)),e&&(a=kn(t,Jn(e)));++i<u;)for(var c=0,s=n[i],f=e?e(s):s;(c=o(a,f,c,r))>-1;)a!==t&&Gt.call(a,c,1),Gt.call(t,c,1);return t}function $r(t,n){for(var e=t?n.length:0,r=e-1;e--;){var o=n[e];if(e==r||o!==i){var i=o;vi(o)?Gt.call(t,o,1):co(t,o)}}return t}function Wr(t,n){return t+yn(be()*(n-t+1))}function Kr(t,n){var e=\"\";if(!t||n<1||n>f)return e;do{n%2&&(e+=t),(n=yn(n/2))&&(t+=t)}while(n);return e}function Gr(t,n){return xi(Si(t,n,ec),t+\"\")}function Hr(t){return Je(qa(t))}function Jr(t,n){var e=qa(t);return Ri(e,ir(n,0,e.length))}function Zr(t,n,e,o){if(!Qu(t))return t;for(var i=-1,u=(n=_o(n,t)).length,a=u-1,c=t;null!=c&&++i<u;){var s=Bi(n[i]),f=e;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(i!=a){var l=c[s];(f=o?o(l,s,c):r)===r&&(f=Qu(l)?l:vi(n[i+1])?[]:{})}Qe(c,s,f),c=c[s]}return t}var Xr=Ae?function(t,n){return Ae.set(t,n),t}:ec,Yr=un?function(t,n){return un(t,\"toString\",{configurable:!0,enumerable:!1,value:Qa(n),writable:!0})}:ec;function Qr(t){return Ri(qa(t))}function to(t,n,e){var r=-1,o=t.length;n<0&&(n=-n>o?0:o+n),(e=e>o?o:e)<0&&(e+=o),o=n>e?0:e-n>>>0,n>>>=0;for(var i=rt(o);++r<o;)i[r]=t[r+n];return i}function no(t,n){var e;return fr(t,function(t,r,o){return!(e=n(t,r,o))}),!!e}function eo(t,n,e){var r=0,o=null==t?r:t.length;if(\"number\"==typeof n&&n==n&&o<=2147483647){for(;r<o;){var i=r+o>>>1,u=t[i];null!==u&&!aa(u)&&(e?u<=n:u<n)?r=i+1:o=i}return o}return ro(t,n,ec,e)}function ro(t,n,e,o){var i=0,u=null==t?0:t.length;if(0===u)return 0;for(var a=(n=e(n))!=n,c=null===n,s=aa(n),f=n===r;i<u;){var l=yn((i+u)/2),p=e(t[l]),h=p!==r,d=null===p,y=p==p,v=aa(p);if(a)var _=o||y;else _=f?y&&(o||h):c?y&&h&&(o||!d):s?y&&h&&!d&&(o||!v):!d&&!v&&(o?p<=n:p<n);_?i=l+1:u=l}return _e(u,4294967294)}function oo(t,n){for(var e=-1,r=t.length,o=0,i=[];++e<r;){var u=t[e],a=n?n(u):u;if(!e||!qu(a,c)){var c=a;i[o++]=0===u?0:u}}return i}function io(t){return\"number\"==typeof t?t:aa(t)?l:+t}function uo(t){if(\"string\"==typeof t)return t;if(Vu(t))return kn(t,uo)+\"\";if(aa(t))return Ue?Ue.call(t):\"\";var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function ao(t,n,e){var r=-1,o=xn,i=t.length,u=!0,a=[],c=a;if(e)u=!1,o=In;else if(i>=200){var s=n?null:Go(t);if(s)return ae(s);u=!1,o=Xn,c=new Ke}else c=n?[]:a;t:for(;++r<i;){var f=t[r],l=n?n(f):f;if(f=e||0!==f?f:0,u&&l==l){for(var p=c.length;p--;)if(c[p]===l)continue t;n&&c.push(l),a.push(f)}else o(c,l,e)||(c!==a&&c.push(l),a.push(f))}return a}function co(t,n){var e=-1,r=(n=_o(n,t)).length;if(!r)return!0;for(;++e<r;){var o=Bi(n[e]);if(\"__proto__\"===o&&!Et.call(t,\"__proto__\"))return!1;if((\"constructor\"===o||\"prototype\"===o)&&e<r-1)return!1}var i=Oi(t,n);return null==i||delete i[Bi(Ji(n))]}function so(t,n,e,r){return Zr(t,n,e(wr(t,n)),r)}function fo(t,n,e,r){for(var o=t.length,i=r?o:-1;(r?i--:++i<o)&&n(t[i],i,t););return e?to(t,r?0:i,r?i+1:o):to(t,r?i+1:0,r?o:i)}function lo(t,n){var e=t;return e instanceof Le&&(e=e.value()),En(n,function(t,n){return n.func.apply(n.thisArg,Rn([t],n.args))},e)}function po(t,n,e){var r=t.length;if(r<2)return r?ao(t[0]):[];for(var o=-1,i=rt(r);++o<r;)for(var u=t[o],a=-1;++a<r;)a!=o&&(i[o]=sr(i[o]||u,t[a],n,e));return ao(yr(i,1),n,e)}function ho(t,n,e){for(var o=-1,i=t.length,u=n.length,a={};++o<i;){var c=o<u?n[o]:r;e(a,t[o],c)}return a}function yo(t){return Ku(t)?t:[]}function vo(t){return\"function\"==typeof t?t:ec}function _o(t,n){return Vu(t)?t:gi(t,n)?[t]:Mi(_a(t))}var go=Gr;function mo(t,n,e){var o=t.length;return e=e===r?o:e,!n&&e>=o?t:to(t,n,e)}var bo=sn||function(t){return ln.clearTimeout(t)};function wo(t,n){if(n)return t.slice();var e=t.length,r=Vt?Vt(e):new t.constructor(e);return t.copy(r),r}function Po(t){var n=new t.constructor(t.byteLength);return new Lt(n).set(new Lt(t)),n}function jo(t,n){var e=n?Po(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.length)}function So(t,n){if(t!==n){var e=t!==r,o=null===t,i=t==t,u=aa(t),a=n!==r,c=null===n,s=n==n,f=aa(n);if(!c&&!f&&!u&&t>n||u&&a&&s&&!c&&!f||o&&a&&s||!e&&s||!i)return 1;if(!o&&!u&&!f&&t<n||f&&e&&i&&!o&&!u||c&&e&&i||!a&&i||!s)return-1}return 0}function Oo(t,n,e,r){for(var o=-1,i=t.length,u=e.length,a=-1,c=n.length,s=ve(i-u,0),f=rt(c+s),l=!r;++a<c;)f[a]=n[a];for(;++o<u;)(l||o<i)&&(f[e[o]]=t[o]);for(;s--;)f[a++]=t[o++];return f}function Co(t,n,e,r){for(var o=-1,i=t.length,u=-1,a=e.length,c=-1,s=n.length,f=ve(i-a,0),l=rt(f+s),p=!r;++o<f;)l[o]=t[o];for(var h=o;++c<s;)l[h+c]=n[c];for(;++u<a;)(p||o<i)&&(l[h+e[u]]=t[o++]);return l}function zo(t,n){var e=-1,r=t.length;for(n||(n=rt(r));++e<r;)n[e]=t[e];return n}function Ao(t,n,e,o){var i=!e;e||(e={});for(var u=-1,a=n.length;++u<a;){var c=n[u],s=o?o(e[c],t[c],c,e,t):r;s===r&&(s=t[c]),i?rr(e,c,s):Qe(e,c,s)}return e}function xo(t,n){return function(e,r){var o=Vu(e)?Sn:nr,i=n?n():{};return o(e,t,ui(r,2),i)}}function Io(t){return Gr(function(n,e){var o=-1,i=e.length,u=i>1?e[i-1]:r,a=i>2?e[2]:r;for(u=t.length>3&&\"function\"==typeof u?(i--,u):r,a&&_i(e[0],e[1],a)&&(u=i<3?r:u,i=1),n=St(n);++o<i;){var c=e[o];c&&t(n,c,o,u)}return n})}function ko(t,n){return function(e,r){if(null==e)return e;if(!Wu(e))return t(e,r);for(var o=e.length,i=n?o:-1,u=St(e);(n?i--:++i<o)&&!1!==r(u[i],i,u););return e}}function Ro(t){return function(n,e,r){for(var o=-1,i=St(n),u=r(n),a=u.length;a--;){var c=u[t?a:++o];if(!1===e(i[c],c,i))break}return n}}function Eo(t){return function(n){var e=re(n=_a(n))?fe(n):r,o=e?e[0]:n.charAt(0),i=e?mo(e,1).join(\"\"):n.slice(1);return o[t]()+i}}function To(t){return function(n){return En(Za(La(n).replace(Jt,\"\")),t,\"\")}}function Mo(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var e=qe(t.prototype),r=t.apply(e,n);return Qu(r)?r:e}}function Bo(t){return function(n,e,o){var i=St(n);if(!Wu(n)){var u=ui(e,3);n=Ia(n),e=function(t){return u(i[t],t,i)}}var a=t(n,e,o);return a>-1?i[u?n[a]:a]:r}}function Uo(t){return ti(function(n){var e=n.length,i=e,u=Fe.prototype.thru;for(t&&n.reverse();i--;){var a=n[i];if(\"function\"!=typeof a)throw new zt(o);if(u&&!c&&\"wrapper\"==oi(a))var c=new Fe([],!0)}for(i=c?i:e;++i<e;){var s=oi(a=n[i]),f=\"wrapper\"==s?ri(a):r;c=f&&mi(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?c[oi(f[0])].apply(c,f[3]):1==a.length&&mi(a)?c[s]():c.thru(a)}return function(){var t=arguments,r=t[0];if(c&&1==t.length&&Vu(r))return c.plant(r).value();for(var o=0,i=e?n[o].apply(this,t):r;++o<e;)i=n[o].call(this,i);return i}})}function No(t,n,e,o,i,u,a,s,f,l){var p=n&c,h=1&n,d=2&n,y=24&n,v=512&n,_=d?r:Mo(t);return function c(){for(var g=arguments.length,m=rt(g),b=g;b--;)m[b]=arguments[b];if(y)var w=ii(c),P=function(t,n){for(var e=t.length,r=0;e--;)t[e]===n&&++r;return r}(m,w);if(o&&(m=Oo(m,o,i,y)),u&&(m=Co(m,u,a,y)),g-=P,y&&g<l){var j=ue(m,w);return Wo(t,n,No,c.placeholder,e,m,j,s,f,l-g)}var S=h?e:this,O=d?S[t]:t;return g=m.length,s?m=function(t,n){for(var e=t.length,o=_e(n.length,e),i=zo(t);o--;){var u=n[o];t[o]=vi(u,e)?i[u]:r}return t}(m,s):v&&g>1&&m.reverse(),p&&f<g&&(m.length=f),this&&this!==ln&&this instanceof c&&(O=_||Mo(O)),O.apply(S,m)}}function qo(t,n){return function(e,r){return function(t,n,e,r){return gr(t,function(t,o,i){n(r,e(t),o,i)}),r}(e,t,n(r),{})}}function Do(t,n){return function(e,o){var i;if(e===r&&o===r)return n;if(e!==r&&(i=e),o!==r){if(i===r)return o;\"string\"==typeof e||\"string\"==typeof o?(e=uo(e),o=uo(o)):(e=io(e),o=io(o)),i=t(e,o)}return i}}function Fo(t){return ti(function(n){return n=kn(n,Jn(ui())),Gr(function(e){var r=this;return t(n,function(t){return jn(t,r,e)})})})}function Lo(t,n){var e=(n=n===r?\" \":uo(n)).length;if(e<2)return e?Kr(n,t):n;var o=Kr(n,hn(t/se(n)));return re(n)?mo(fe(o),0,t).join(\"\"):o.slice(0,t)}function Vo(t){return function(n,e,o){return o&&\"number\"!=typeof o&&_i(n,e,o)&&(e=o=r),n=pa(n),e===r?(e=n,n=0):e=pa(e),function(t,n,e,r){for(var o=-1,i=ve(hn((n-t)/(e||1)),0),u=rt(i);i--;)u[r?i:++o]=t,t+=e;return u}(n,e,o=o===r?n<e?1:-1:pa(o),t)}}function $o(t){return function(n,e){return\"string\"==typeof n&&\"string\"==typeof e||(n=ya(n),e=ya(e)),t(n,e)}}function Wo(t,n,e,o,i,u,c,s,f,l){var p=8&n;n|=p?a:64,4&(n&=~(p?64:a))||(n&=-4);var h=[t,n,i,p?u:r,p?c:r,p?r:u,p?r:c,s,f,l],d=e.apply(r,h);return mi(t)&&zi(d,h),d.placeholder=o,Ii(d,t,n)}function Ko(t){var n=jt[t];return function(t,e){if(t=ya(t),(e=null==e?0:_e(ha(e),292))&&$n(t)){var r=(_a(t)+\"e\").split(\"e\");return+((r=(_a(n(r[0]+\"e\"+(+r[1]+e)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-e))}return n(t)}}var Go=Oe&&1/ae(new Oe([,-0]))[1]==s?function(t){return new Oe(t)}:ac;function Ho(t){return function(n){var e=pi(n);return e==w?oe(n):e==C?ce(n):function(t,n){return kn(n,function(n){return[n,t[n]]})}(n,t(n))}}function Jo(t,n,e,i,s,f,l,p){var h=2&n;if(!h&&\"function\"!=typeof t)throw new zt(o);var d=i?i.length:0;if(d||(n&=-97,i=s=r),l=l===r?l:ve(ha(l),0),p=p===r?p:ha(p),d-=s?s.length:0,64&n){var y=i,v=s;i=s=r}var _=h?r:ri(t),g=[t,n,e,i,s,y,v,f,l,p];if(_&&function(t,n){var e=t[1],r=n[1],o=e|r,i=o<131,a=r==c&&8==e||r==c&&256==e&&t[7].length<=n[8]||384==r&&n[7].length<=n[8]&&8==e;if(!i&&!a)return t;1&r&&(t[2]=n[2],o|=1&e?0:4);var s=n[3];if(s){var f=t[3];t[3]=f?Oo(f,s,n[4]):s,t[4]=f?ue(t[3],u):n[4]}(s=n[5])&&(f=t[5],t[5]=f?Co(f,s,n[6]):s,t[6]=f?ue(t[5],u):n[6]),(s=n[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?n[8]:_e(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=o}(g,_),t=g[0],n=g[1],e=g[2],i=g[3],s=g[4],!(p=g[9]=g[9]===r?h?0:t.length:ve(g[9]-d,0))&&24&n&&(n&=-25),n&&1!=n)m=8==n||16==n?function(t,n,e){var o=Mo(t);return function i(){for(var u=arguments.length,a=rt(u),c=u,s=ii(i);c--;)a[c]=arguments[c];var f=u<3&&a[0]!==s&&a[u-1]!==s?[]:ue(a,s);return(u-=f.length)<e?Wo(t,n,No,i.placeholder,r,a,f,r,r,e-u):jn(this&&this!==ln&&this instanceof i?o:t,this,a)}}(t,n,p):n!=a&&33!=n||s.length?No.apply(r,g):function(t,n,e,r){var o=1&n,i=Mo(t);return function n(){for(var u=-1,a=arguments.length,c=-1,s=r.length,f=rt(s+a),l=this&&this!==ln&&this instanceof n?i:t;++c<s;)f[c]=r[c];for(;a--;)f[c++]=arguments[++u];return jn(l,o?e:this,f)}}(t,n,e,i);else var m=function(t,n,e){var r=1&n,o=Mo(t);return function n(){return(this&&this!==ln&&this instanceof n?o:t).apply(r?e:this,arguments)}}(t,n,e);return Ii((_?Xr:zi)(m,g),t,n)}function Zo(t,n,e,o){return t===r||qu(t,It[e])&&!Et.call(o,e)?n:t}function Xo(t,n,e,o,i,u){return Qu(t)&&Qu(n)&&(u.set(n,t),qr(t,n,r,Xo,u),u.delete(n)),t}function Yo(t){return ra(t)?r:t}function Qo(t,n,e,o,i,u){var a=1&e,c=t.length,s=n.length;if(c!=s&&!(a&&s>c))return!1;var f=u.get(t),l=u.get(n);if(f&&l)return f==n&&l==t;var p=-1,h=!0,d=2&e?new Ke:r;for(u.set(t,n),u.set(n,t);++p<c;){var y=t[p],v=n[p];if(o)var _=a?o(v,y,p,n,t,u):o(y,v,p,t,n,u);if(_!==r){if(_)continue;h=!1;break}if(d){if(!Mn(n,function(t,n){if(!Xn(d,n)&&(y===t||i(y,t,e,o,u)))return d.push(n)})){h=!1;break}}else if(y!==v&&!i(y,v,e,o,u)){h=!1;break}}return u.delete(t),u.delete(n),h}function ti(t){return xi(Si(t,r,$i),t+\"\")}function ni(t){return Pr(t,Ia,fi)}function ei(t){return Pr(t,ka,li)}var ri=Ae?function(t){return Ae.get(t)}:ac;function oi(t){for(var n=t.name+\"\",e=xe[n],r=Et.call(xe,n)?e.length:0;r--;){var o=e[r],i=o.func;if(null==i||i==t)return o.name}return n}function ii(t){return(Et.call(Ne,\"placeholder\")?Ne:t).placeholder}function ui(){var t=Ne.iteratee||rc;return t=t===rc?Er:t,arguments.length?t(arguments[0],arguments[1]):t}function ai(t,n){var e,r,o=t.__data__;return(\"string\"==(r=typeof(e=n))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==e:null===e)?o[\"string\"==typeof n?\"string\":\"hash\"]:o.map}function ci(t){for(var n=Ia(t),e=n.length;e--;){var r=n[e],o=t[r];n[e]=[r,o,Pi(o)]}return n}function si(t,n){var e=function(t,n){return null==t?r:t[n]}(t,n);return Rr(e)?e:r}var fi=vn?function(t){return null==t?[]:(t=St(t),An(vn(t),function(n){return Kt.call(t,n)}))}:dc,li=vn?function(t){for(var n=[];t;)Rn(n,fi(t)),t=$t(t);return n}:dc,pi=jr;function hi(t,n,e){for(var r=-1,o=(n=_o(n,t)).length,i=!1;++r<o;){var u=Bi(n[r]);if(!(i=null!=t&&e(t,u)))break;t=t[u]}return i||++r!=o?i:!!(o=null==t?0:t.length)&&Yu(o)&&vi(u,o)&&(Vu(t)||Lu(t))}function di(t){return\"function\"!=typeof t.constructor||wi(t)?{}:qe($t(t))}function yi(t){return Vu(t)||Lu(t)||!!(Ht&&t&&t[Ht])}function vi(t,n){var e=typeof t;return!!(n=n??f)&&(\"number\"==e||\"symbol\"!=e&&vt.test(t))&&t>-1&&t%1==0&&t<n}function _i(t,n,e){if(!Qu(e))return!1;var r=typeof n;return!!(\"number\"==r?Wu(e)&&vi(n,e.length):\"string\"==r&&n in e)&&qu(e[n],t)}function gi(t,n){if(Vu(t))return!1;var e=typeof t;return!(\"number\"!=e&&\"symbol\"!=e&&\"boolean\"!=e&&null!=t&&!aa(t))||Y.test(t)||!X.test(t)||null!=n&&t in St(n)}function mi(t){var n=oi(t),e=Ne[n];if(\"function\"!=typeof e||!(n in Le.prototype))return!1;if(t===e)return!0;var r=ri(e);return!!r&&t===r[0]}(Pe&&pi(new Pe(new ArrayBuffer(1)))!=k||je&&pi(new je)!=w||Se&&pi(Se.resolve())!=S||Oe&&pi(new Oe)!=C||Ce&&pi(new Ce)!=x)&&(pi=function(t){var n=jr(t),e=n==j?t.constructor:r,o=e?Ui(e):\"\";if(o)switch(o){case Ie:return k;case ke:return w;case Re:return S;case Ee:return C;case Te:return x}return n});var bi=kt?Zu:yc;function wi(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||It)}function Pi(t){return t==t&&!Qu(t)}function ji(t,n){return function(e){return null!=e&&e[t]===n&&(n!==r||t in St(e))}}function Si(t,n,e){return n=ve(n===r?t.length-1:n,0),function(){for(var r=arguments,o=-1,i=ve(r.length-n,0),u=rt(i);++o<i;)u[o]=r[n+o];o=-1;for(var a=rt(n+1);++o<n;)a[o]=r[o];return a[n]=e(u),jn(t,this,a)}}function Oi(t,n){return n.length<2?t:wr(t,to(n,0,-1))}function Ci(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var zi=ki(Xr),Ai=pn||function(t,n){return ln.setTimeout(t,n)},xi=ki(Yr);function Ii(t,n,e){var r=n+\"\";return xi(t,function(t,n){var e=n.length;if(!e)return t;var r=e-1;return n[r]=(e>1?\"& \":\"\")+n[r],n=n.join(e>2?\", \":\" \"),t.replace(ot,\"{\\n/* [wrapped with \"+n+\"] */\\n\")}(r,function(t,n){return On(h,function(e){var r=\"_.\"+e[0];n&e[1]&&!xn(t,r)&&t.push(r)}),t.sort()}(function(t){var n=t.match(it);return n?n[1].split(ut):[]}(r),e)))}function ki(t){var n=0,e=0;return function(){var o=ge(),i=16-(o-e);if(e=o,i>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(r,arguments)}}function Ri(t,n){var e=-1,o=t.length,i=o-1;for(n=n===r?o:n;++e<n;){var u=Wr(e,i),a=t[u];t[u]=t[e],t[e]=a}return t.length=n,t}var Ei,Ti,Mi=(Ei=Eu(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(\"\"),t.replace(Q,function(t,e,r,o){n.push(r?o.replace(st,\"$1\"):e||t)}),n},function(t){return 500===Ti.size&&Ti.clear(),t}),Ti=Ei.cache,Ei);function Bi(t){if(\"string\"==typeof t||aa(t))return t;var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function Ui(t){if(null!=t){try{return Rt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Ni(t){if(t instanceof Le)return t.clone();var n=new Fe(t.__wrapped__,t.__chain__);return n.__actions__=zo(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}var qi=Gr(function(t,n){return Ku(t)?sr(t,yr(n,1,Ku,!0)):[]}),Di=Gr(function(t,n){var e=Ji(n);return Ku(e)&&(e=r),Ku(t)?sr(t,yr(n,1,Ku,!0),ui(e,2)):[]}),Fi=Gr(function(t,n){var e=Ji(n);return Ku(e)&&(e=r),Ku(t)?sr(t,yr(n,1,Ku,!0),r,e):[]});function Li(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var o=null==e?0:ha(e);return o<0&&(o=ve(r+o,0)),Nn(t,ui(n,3),o)}function Vi(t,n,e){var o=null==t?0:t.length;if(!o)return-1;var i=o-1;return e!==r&&(i=ha(e),i=e<0?ve(o+i,0):_e(i,o-1)),Nn(t,ui(n,3),i,!0)}function $i(t){return null!=t&&t.length?yr(t,1):[]}function Wi(t){return t&&t.length?t[0]:r}var Ki=Gr(function(t){var n=kn(t,yo);return n.length&&n[0]===t[0]?zr(n):[]}),Gi=Gr(function(t){var n=Ji(t),e=kn(t,yo);return n===Ji(e)?n=r:e.pop(),e.length&&e[0]===t[0]?zr(e,ui(n,2)):[]}),Hi=Gr(function(t){var n=Ji(t),e=kn(t,yo);return(n=\"function\"==typeof n?n:r)&&e.pop(),e.length&&e[0]===t[0]?zr(e,r,n):[]});function Ji(t){var n=null==t?0:t.length;return n?t[n-1]:r}var Zi=Gr(Xi);function Xi(t,n){return t&&t.length&&n&&n.length?Vr(t,n):t}var Yi=ti(function(t,n){var e=null==t?0:t.length,r=or(t,n);return $r(t,kn(n,function(t){return vi(t,e)?+t:t}).sort(So)),r});function Qi(t){return null==t?t:we.call(t)}var tu=Gr(function(t){return ao(yr(t,1,Ku,!0))}),nu=Gr(function(t){var n=Ji(t);return Ku(n)&&(n=r),ao(yr(t,1,Ku,!0),ui(n,2))}),eu=Gr(function(t){var n=Ji(t);return n=\"function\"==typeof n?n:r,ao(yr(t,1,Ku,!0),r,n)});function ru(t){if(!t||!t.length)return[];var n=0;return t=An(t,function(t){if(Ku(t))return n=ve(t.length,n),!0}),Gn(n,function(n){return kn(t,Vn(n))})}function ou(t,n){if(!t||!t.length)return[];var e=ru(t);return null==n?e:kn(e,function(t){return jn(n,r,t)})}var iu=Gr(function(t,n){return Ku(t)?sr(t,n):[]}),uu=Gr(function(t){return po(An(t,Ku))}),au=Gr(function(t){var n=Ji(t);return Ku(n)&&(n=r),po(An(t,Ku),ui(n,2))}),cu=Gr(function(t){var n=Ji(t);return n=\"function\"==typeof n?n:r,po(An(t,Ku),r,n)}),su=Gr(ru),fu=Gr(function(t){var n=t.length,e=n>1?t[n-1]:r;return e=\"function\"==typeof e?(t.pop(),e):r,ou(t,e)});function lu(t){var n=Ne(t);return n.__chain__=!0,n}function pu(t,n){return n(t)}var hu=ti(function(t){var n=t.length,e=n?t[0]:0,o=this.__wrapped__,i=function(n){return or(n,t)};return!(n>1||this.__actions__.length)&&o instanceof Le&&vi(e)?((o=o.slice(e,+e+(n?1:0))).__actions__.push({func:pu,args:[i],thisArg:r}),new Fe(o,this.__chain__).thru(function(t){return n&&!t.length&&t.push(r),t})):this.thru(i)}),du=xo(function(t,n,e){Et.call(t,e)?++t[e]:rr(t,e,1)}),yu=Bo(Li),vu=Bo(Vi);function _u(t,n){return(Vu(t)?On:fr)(t,ui(n,3))}function gu(t,n){return(Vu(t)?Cn:lr)(t,ui(n,3))}var mu=xo(function(t,n,e){Et.call(t,e)?t[e].push(n):rr(t,e,[n])}),bu=Gr(function(t,n,e){var r=-1,o=\"function\"==typeof n,i=Wu(t)?rt(t.length):[];return fr(t,function(t){i[++r]=o?jn(n,t,e):Ar(t,n,e)}),i}),wu=xo(function(t,n,e){rr(t,e,n)});function Pu(t,n){return(Vu(t)?kn:Br)(t,ui(n,3))}var ju=xo(function(t,n,e){t[e?0:1].push(n)},function(){return[[],[]]}),Su=Gr(function(t,n){if(null==t)return[];var e=n.length;return e>1&&_i(t,n[0],n[1])?n=[]:e>2&&_i(n[0],n[1],n[2])&&(n=[n[0]]),Fr(t,yr(n,1),[])}),Ou=fn||function(){return ln.Date.now()};function Cu(t,n,e){return n=e?r:n,n=t&&null==n?t.length:n,Jo(t,c,r,r,r,r,n)}function zu(t,n){var e;if(\"function\"!=typeof n)throw new zt(o);return t=ha(t),function(){return--t>0&&(e=n.apply(this,arguments)),t<=1&&(n=r),e}}var Au=Gr(function(t,n,e){var r=1;if(e.length){var o=ue(e,ii(Au));r|=a}return Jo(t,r,n,e,o)}),xu=Gr(function(t,n,e){var r=3;if(e.length){var o=ue(e,ii(xu));r|=a}return Jo(n,r,t,e,o)});function Iu(t,n,e){var i,u,a,c,s,f,l=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new zt(o);function y(n){var e=i,o=u;return i=u=r,l=n,c=t.apply(o,e)}function v(t){var e=t-f;return f===r||e>=n||e<0||h&&t-l>=a}function _(){var t=Ou();if(v(t))return g(t);s=Ai(_,function(t){var e=n-(t-f);return h?_e(e,a-(t-l)):e}(t))}function g(t){return s=r,d&&i?y(t):(i=u=r,c)}function m(){var t=Ou(),e=v(t);if(i=arguments,u=this,f=t,e){if(s===r)return function(t){return l=t,s=Ai(_,n),p?y(t):c}(f);if(h)return bo(s),s=Ai(_,n),y(f)}return s===r&&(s=Ai(_,n)),c}return n=ya(n)||0,Qu(e)&&(p=!!e.leading,a=(h=\"maxWait\"in e)?ve(ya(e.maxWait)||0,n):a,d=\"trailing\"in e?!!e.trailing:d),m.cancel=function(){s!==r&&bo(s),l=0,i=f=u=s=r},m.flush=function(){return s===r?c:g(Ou())},m}var ku=Gr(function(t,n){return cr(t,1,n)}),Ru=Gr(function(t,n,e){return cr(t,ya(n)||0,e)});function Eu(t,n){if(\"function\"!=typeof t||null!=n&&\"function\"!=typeof n)throw new zt(o);var e=function(){var r=arguments,o=n?n.apply(this,r):r[0],i=e.cache;if(i.has(o))return i.get(o);var u=t.apply(this,r);return e.cache=i.set(o,u)||i,u};return e.cache=new(Eu.Cache||We),e}function Tu(t){if(\"function\"!=typeof t)throw new zt(o);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}Eu.Cache=We;var Mu=go(function(t,n){var e=(n=1==n.length&&Vu(n[0])?kn(n[0],Jn(ui())):kn(yr(n,1),Jn(ui()))).length;return Gr(function(r){for(var o=-1,i=_e(r.length,e);++o<i;)r[o]=n[o].call(this,r[o]);return jn(t,this,r)})}),Bu=Gr(function(t,n){var e=ue(n,ii(Bu));return Jo(t,a,r,n,e)}),Uu=Gr(function(t,n){var e=ue(n,ii(Uu));return Jo(t,64,r,n,e)}),Nu=ti(function(t,n){return Jo(t,256,r,r,r,n)});function qu(t,n){return t===n||t!=t&&n!=n}var Du=$o(Sr),Fu=$o(function(t,n){return t>=n}),Lu=xr(function(){return arguments}())?xr:function(t){return ta(t)&&Et.call(t,\"callee\")&&!Kt.call(t,\"callee\")},Vu=rt.isArray,$u=_n?Jn(_n):function(t){return ta(t)&&jr(t)==I};function Wu(t){return null!=t&&Yu(t.length)&&!Zu(t)}function Ku(t){return ta(t)&&Wu(t)}var Gu=Bn||yc,Hu=gn?Jn(gn):function(t){return ta(t)&&jr(t)==_};function Ju(t){if(!ta(t))return!1;var n=jr(t);return n==g||\"[object DOMException]\"==n||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ra(t)}function Zu(t){if(!Qu(t))return!1;var n=jr(t);return n==m||n==b||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function Xu(t){return\"number\"==typeof t&&t==ha(t)}function Yu(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=f}function Qu(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function ta(t){return null!=t&&\"object\"==typeof t}var na=mn?Jn(mn):function(t){return ta(t)&&pi(t)==w};function ea(t){return\"number\"==typeof t||ta(t)&&jr(t)==P}function ra(t){if(!ta(t)||jr(t)!=j)return!1;var n=$t(t);if(null===n)return!0;var e=Et.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof e&&e instanceof e&&Rt.call(e)==Ut}var oa=bn?Jn(bn):function(t){return ta(t)&&jr(t)==O},ia=wn?Jn(wn):function(t){return ta(t)&&pi(t)==C};function ua(t){return\"string\"==typeof t||!Vu(t)&&ta(t)&&jr(t)==z}function aa(t){return\"symbol\"==typeof t||ta(t)&&jr(t)==A}var ca=Pn?Jn(Pn):function(t){return ta(t)&&Yu(t.length)&&!!rn[jr(t)]},sa=$o(Mr),fa=$o(function(t,n){return t<=n});function la(t){if(!t)return[];if(Wu(t))return ua(t)?fe(t):zo(t);if(Xt&&t[Xt])return function(t){for(var n,e=[];!(n=t.next()).done;)e.push(n.value);return e}(t[Xt]());var n=pi(t);return(n==w?oe:n==C?ae:qa)(t)}function pa(t){return t?(t=ya(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ha(t){var n=pa(t),e=n%1;return n==n?e?n-e:n:0}function da(t){return t?ir(ha(t),0,p):0}function ya(t){if(\"number\"==typeof t)return t;if(aa(t))return l;if(Qu(t)){var n=\"function\"==typeof t.valueOf?t.valueOf():t;t=Qu(n)?n+\"\":n}if(\"string\"!=typeof t)return 0===t?t:+t;t=Hn(t);var e=ht.test(t);return e||yt.test(t)?cn(t.slice(2),e?2:8):pt.test(t)?l:+t}function va(t){return Ao(t,ka(t))}function _a(t){return null==t?\"\":uo(t)}var ga=Io(function(t,n){if(wi(n)||Wu(n))Ao(n,Ia(n),t);else for(var e in n)Et.call(n,e)&&Qe(t,e,n[e])}),ma=Io(function(t,n){Ao(n,ka(n),t)}),ba=Io(function(t,n,e,r){Ao(n,ka(n),t,r)}),wa=Io(function(t,n,e,r){Ao(n,Ia(n),t,r)}),Pa=ti(or),ja=Gr(function(t,n){t=St(t);var e=-1,o=n.length,i=o>2?n[2]:r;for(i&&_i(n[0],n[1],i)&&(o=1);++e<o;)for(var u=n[e],a=ka(u),c=-1,s=a.length;++c<s;){var f=a[c],l=t[f];(l===r||qu(l,It[f])&&!Et.call(t,f))&&(t[f]=u[f])}return t}),Sa=Gr(function(t){return t.push(r,Xo),jn(Ea,r,t)});function Oa(t,n,e){var o=null==t?r:wr(t,n);return o===r?e:o}function Ca(t,n){return null!=t&&hi(t,n,Cr)}var za=qo(function(t,n,e){null!=n&&\"function\"!=typeof n.toString&&(n=Bt.call(n)),t[n]=e},Qa(ec)),Aa=qo(function(t,n,e){null!=n&&\"function\"!=typeof n.toString&&(n=Bt.call(n)),Et.call(t,n)?t[n].push(e):t[n]=[e]},ui),xa=Gr(Ar);function Ia(t){return Wu(t)?He(t):Tr(t)}function ka(t){return Wu(t)?He(t,!0):function(t){if(!Qu(t))return function(t){var n=[];if(null!=t)for(var e in St(t))n.push(e);return n}(t);var n=wi(t),e=[];for(var r in t)(\"constructor\"!=r||!n&&Et.call(t,r))&&e.push(r);return e}(t)}var Ra=Io(function(t,n,e){qr(t,n,e)}),Ea=Io(function(t,n,e,r){qr(t,n,e,r)}),Ta=ti(function(t,n){var e={};if(null==t)return e;var r=!1;n=kn(n,function(n){return n=_o(n,t),r||(r=n.length>1),n}),Ao(t,ei(t),e),r&&(e=ur(e,7,Yo));for(var o=n.length;o--;)co(e,n[o]);return e}),Ma=ti(function(t,n){return null==t?{}:function(t,n){return Lr(t,n,function(n,e){return Ca(t,e)})}(t,n)});function Ba(t,n){if(null==t)return{};var e=kn(ei(t),function(t){return[t]});return n=ui(n),Lr(t,e,function(t,e){return n(t,e[0])})}var Ua=Ho(Ia),Na=Ho(ka);function qa(t){return null==t?[]:Zn(t,Ia(t))}var Da=To(function(t,n,e){return n=n.toLowerCase(),t+(e?Fa(n):n)});function Fa(t){return Ja(_a(t).toLowerCase())}function La(t){return(t=_a(t))&&t.replace(_t,te).replace(Zt,\"\")}var Va=To(function(t,n,e){return t+(e?\"-\":\"\")+n.toLowerCase()}),$a=To(function(t,n,e){return t+(e?\" \":\"\")+n.toLowerCase()}),Wa=Eo(\"toLowerCase\"),Ka=To(function(t,n,e){return t+(e?\"_\":\"\")+n.toLowerCase()}),Ga=To(function(t,n,e){return t+(e?\" \":\"\")+Ja(n)}),Ha=To(function(t,n,e){return t+(e?\" \":\"\")+n.toUpperCase()}),Ja=Eo(\"toUpperCase\");function Za(t,n,e){return t=_a(t),(n=e?r:n)===r?function(t){return tn.test(t)}(t)?function(t){return t.match(Yt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(n)||[]}var Xa=Gr(function(t,n){try{return jn(t,r,n)}catch(t){return Ju(t)?t:new wt(t)}}),Ya=ti(function(t,n){return On(n,function(n){n=Bi(n),rr(t,n,Au(t[n],t))}),t});function Qa(t){return function(){return t}}var tc=Uo(),nc=Uo(!0);function ec(t){return t}function rc(t){return Er(\"function\"==typeof t?t:ur(t,1))}var oc=Gr(function(t,n){return function(e){return Ar(e,t,n)}}),ic=Gr(function(t,n){return function(e){return Ar(t,e,n)}});function uc(t,n,e){var r=Ia(n),o=br(n,r);null!=e||Qu(n)&&(o.length||!r.length)||(e=n,n=t,t=this,o=br(n,Ia(n)));var i=!(Qu(e)&&\"chain\"in e&&!e.chain),u=Zu(t);return On(o,function(e){var r=n[e];t[e]=r,u&&(t.prototype[e]=function(){var n=this.__chain__;if(i||n){var e=t(this.__wrapped__);return(e.__actions__=zo(this.__actions__)).push({func:r,args:arguments,thisArg:t}),e.__chain__=n,e}return r.apply(t,Rn([this.value()],arguments))})}),t}function ac(){}var cc=Fo(kn),sc=Fo(zn),fc=Fo(Mn);function lc(t){return gi(t)?Vn(Bi(t)):function(t){return function(n){return wr(n,t)}}(t)}var pc=Vo(),hc=Vo(!0);function dc(){return[]}function yc(){return!1}var vc,_c=Do(function(t,n){return t+n},0),gc=Ko(\"ceil\"),mc=Do(function(t,n){return t/n},1),bc=Ko(\"floor\"),wc=Do(function(t,n){return t*n},1),Pc=Ko(\"round\"),jc=Do(function(t,n){return t-n},0);return Ne.after=function(t,n){if(\"function\"!=typeof n)throw new zt(o);return t=ha(t),function(){if(--t<1)return n.apply(this,arguments)}},Ne.ary=Cu,Ne.assign=ga,Ne.assignIn=ma,Ne.assignInWith=ba,Ne.assignWith=wa,Ne.at=Pa,Ne.before=zu,Ne.bind=Au,Ne.bindAll=Ya,Ne.bindKey=xu,Ne.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Vu(t)?t:[t]},Ne.chain=lu,Ne.chunk=function(t,n,e){n=(e?_i(t,n,e):n===r)?1:ve(ha(n),0);var o=null==t?0:t.length;if(!o||n<1)return[];for(var i=0,u=0,a=rt(hn(o/n));i<o;)a[u++]=to(t,i,i+=n);return a},Ne.compact=function(t){for(var n=-1,e=null==t?0:t.length,r=0,o=[];++n<e;){var i=t[n];i&&(o[r++]=i)}return o},Ne.concat=function(){var t=arguments.length;if(!t)return[];for(var n=rt(t-1),e=arguments[0],r=t;r--;)n[r-1]=arguments[r];return Rn(Vu(e)?zo(e):[e],yr(n,1))},Ne.cond=function(t){var n=null==t?0:t.length,e=ui();return t=n?kn(t,function(t){if(\"function\"!=typeof t[1])throw new zt(o);return[e(t[0]),t[1]]}):[],Gr(function(e){for(var r=-1;++r<n;){var o=t[r];if(jn(o[0],this,e))return jn(o[1],this,e)}})},Ne.conforms=function(t){return function(t){var n=Ia(t);return function(e){return ar(e,t,n)}}(ur(t,1))},Ne.constant=Qa,Ne.countBy=du,Ne.create=function(t,n){var e=qe(t);return null==n?e:er(e,n)},Ne.curry=function t(n,e,o){var i=Jo(n,8,r,r,r,r,r,e=o?r:e);return i.placeholder=t.placeholder,i},Ne.curryRight=function t(n,e,o){var i=Jo(n,16,r,r,r,r,r,e=o?r:e);return i.placeholder=t.placeholder,i},Ne.debounce=Iu,Ne.defaults=ja,Ne.defaultsDeep=Sa,Ne.defer=ku,Ne.delay=Ru,Ne.difference=qi,Ne.differenceBy=Di,Ne.differenceWith=Fi,Ne.drop=function(t,n,e){var o=null==t?0:t.length;return o?to(t,(n=e||n===r?1:ha(n))<0?0:n,o):[]},Ne.dropRight=function(t,n,e){var o=null==t?0:t.length;return o?to(t,0,(n=o-(n=e||n===r?1:ha(n)))<0?0:n):[]},Ne.dropRightWhile=function(t,n){return t&&t.length?fo(t,ui(n,3),!0,!0):[]},Ne.dropWhile=function(t,n){return t&&t.length?fo(t,ui(n,3),!0):[]},Ne.fill=function(t,n,e,o){var i=null==t?0:t.length;return i?(e&&\"number\"!=typeof e&&_i(t,n,e)&&(e=0,o=i),function(t,n,e,o){var i=t.length;for((e=ha(e))<0&&(e=-e>i?0:i+e),(o=o===r||o>i?i:ha(o))<0&&(o+=i),o=e>o?0:da(o);e<o;)t[e++]=n;return t}(t,n,e,o)):[]},Ne.filter=function(t,n){return(Vu(t)?An:dr)(t,ui(n,3))},Ne.flatMap=function(t,n){return yr(Pu(t,n),1)},Ne.flatMapDeep=function(t,n){return yr(Pu(t,n),s)},Ne.flatMapDepth=function(t,n,e){return e=e===r?1:ha(e),yr(Pu(t,n),e)},Ne.flatten=$i,Ne.flattenDeep=function(t){return null!=t&&t.length?yr(t,s):[]},Ne.flattenDepth=function(t,n){return null!=t&&t.length?yr(t,n=n===r?1:ha(n)):[]},Ne.flip=function(t){return Jo(t,512)},Ne.flow=tc,Ne.flowRight=nc,Ne.fromPairs=function(t){for(var n=-1,e=null==t?0:t.length,r={};++n<e;){var o=t[n];rr(r,o[0],o[1])}return r},Ne.functions=function(t){return null==t?[]:br(t,Ia(t))},Ne.functionsIn=function(t){return null==t?[]:br(t,ka(t))},Ne.groupBy=mu,Ne.initial=function(t){return null!=t&&t.length?to(t,0,-1):[]},Ne.intersection=Ki,Ne.intersectionBy=Gi,Ne.intersectionWith=Hi,Ne.invert=za,Ne.invertBy=Aa,Ne.invokeMap=bu,Ne.iteratee=rc,Ne.keyBy=wu,Ne.keys=Ia,Ne.keysIn=ka,Ne.map=Pu,Ne.mapKeys=function(t,n){var e={};return n=ui(n,3),gr(t,function(t,r,o){rr(e,n(t,r,o),t)}),e},Ne.mapValues=function(t,n){var e={};return n=ui(n,3),gr(t,function(t,r,o){rr(e,r,n(t,r,o))}),e},Ne.matches=function(t){return Ur(ur(t,1))},Ne.matchesProperty=function(t,n){return Nr(t,ur(n,1))},Ne.memoize=Eu,Ne.merge=Ra,Ne.mergeWith=Ea,Ne.method=oc,Ne.methodOf=ic,Ne.mixin=uc,Ne.negate=Tu,Ne.nthArg=function(t){return t=ha(t),Gr(function(n){return Dr(n,t)})},Ne.omit=Ta,Ne.omitBy=function(t,n){return Ba(t,Tu(ui(n)))},Ne.once=function(t){return zu(2,t)},Ne.orderBy=function(t,n,e,o){return null==t?[]:(Vu(n)||(n=null==n?[]:[n]),Vu(e=o?r:e)||(e=null==e?[]:[e]),Fr(t,n,e))},Ne.over=cc,Ne.overArgs=Mu,Ne.overEvery=sc,Ne.overSome=fc,Ne.partial=Bu,Ne.partialRight=Uu,Ne.partition=ju,Ne.pick=Ma,Ne.pickBy=Ba,Ne.property=lc,Ne.propertyOf=function(t){return function(n){return null==t?r:wr(t,n)}},Ne.pull=Zi,Ne.pullAll=Xi,Ne.pullAllBy=function(t,n,e){return t&&t.length&&n&&n.length?Vr(t,n,ui(e,2)):t},Ne.pullAllWith=function(t,n,e){return t&&t.length&&n&&n.length?Vr(t,n,r,e):t},Ne.pullAt=Yi,Ne.range=pc,Ne.rangeRight=hc,Ne.rearg=Nu,Ne.reject=function(t,n){return(Vu(t)?An:dr)(t,Tu(ui(n,3)))},Ne.remove=function(t,n){var e=[];if(!t||!t.length)return e;var r=-1,o=[],i=t.length;for(n=ui(n,3);++r<i;){var u=t[r];n(u,r,t)&&(e.push(u),o.push(r))}return $r(t,o),e},Ne.rest=function(t,n){if(\"function\"!=typeof t)throw new zt(o);return Gr(t,n=n===r?n:ha(n))},Ne.reverse=Qi,Ne.sampleSize=function(t,n,e){return n=(e?_i(t,n,e):n===r)?1:ha(n),(Vu(t)?Ze:Jr)(t,n)},Ne.set=function(t,n,e){return null==t?t:Zr(t,n,e)},Ne.setWith=function(t,n,e,o){return o=\"function\"==typeof o?o:r,null==t?t:Zr(t,n,e,o)},Ne.shuffle=function(t){return(Vu(t)?Xe:Qr)(t)},Ne.slice=function(t,n,e){var o=null==t?0:t.length;return o?(e&&\"number\"!=typeof e&&_i(t,n,e)?(n=0,e=o):(n=null==n?0:ha(n),e=e===r?o:ha(e)),to(t,n,e)):[]},Ne.sortBy=Su,Ne.sortedUniq=function(t){return t&&t.length?oo(t):[]},Ne.sortedUniqBy=function(t,n){return t&&t.length?oo(t,ui(n,2)):[]},Ne.split=function(t,n,e){return e&&\"number\"!=typeof e&&_i(t,n,e)&&(n=e=r),(e=e===r?p:e>>>0)?(t=_a(t))&&(\"string\"==typeof n||null!=n&&!oa(n))&&!(n=uo(n))&&re(t)?mo(fe(t),0,e):t.split(n,e):[]},Ne.spread=function(t,n){if(\"function\"!=typeof t)throw new zt(o);return n=null==n?0:ve(ha(n),0),Gr(function(e){var r=e[n],o=mo(e,0,n);return r&&Rn(o,r),jn(t,this,o)})},Ne.tail=function(t){var n=null==t?0:t.length;return n?to(t,1,n):[]},Ne.take=function(t,n,e){return t&&t.length?to(t,0,(n=e||n===r?1:ha(n))<0?0:n):[]},Ne.takeRight=function(t,n,e){var o=null==t?0:t.length;return o?to(t,(n=o-(n=e||n===r?1:ha(n)))<0?0:n,o):[]},Ne.takeRightWhile=function(t,n){return t&&t.length?fo(t,ui(n,3),!1,!0):[]},Ne.takeWhile=function(t,n){return t&&t.length?fo(t,ui(n,3)):[]},Ne.tap=function(t,n){return n(t),t},Ne.throttle=function(t,n,e){var r=!0,i=!0;if(\"function\"!=typeof t)throw new zt(o);return Qu(e)&&(r=\"leading\"in e?!!e.leading:r,i=\"trailing\"in e?!!e.trailing:i),Iu(t,n,{leading:r,maxWait:n,trailing:i})},Ne.thru=pu,Ne.toArray=la,Ne.toPairs=Ua,Ne.toPairsIn=Na,Ne.toPath=function(t){return Vu(t)?kn(t,Bi):aa(t)?[t]:zo(Mi(_a(t)))},Ne.toPlainObject=va,Ne.transform=function(t,n,e){var r=Vu(t),o=r||Gu(t)||ca(t);if(n=ui(n,4),null==e){var i=t&&t.constructor;e=o?r?new i:[]:Qu(t)&&Zu(i)?qe($t(t)):{}}return(o?On:gr)(t,function(t,r,o){return n(e,t,r,o)}),e},Ne.unary=function(t){return Cu(t,1)},Ne.union=tu,Ne.unionBy=nu,Ne.unionWith=eu,Ne.uniq=function(t){return t&&t.length?ao(t):[]},Ne.uniqBy=function(t,n){return t&&t.length?ao(t,ui(n,2)):[]},Ne.uniqWith=function(t,n){return n=\"function\"==typeof n?n:r,t&&t.length?ao(t,r,n):[]},Ne.unset=function(t,n){return null==t||co(t,n)},Ne.unzip=ru,Ne.unzipWith=ou,Ne.update=function(t,n,e){return null==t?t:so(t,n,vo(e))},Ne.updateWith=function(t,n,e,o){return o=\"function\"==typeof o?o:r,null==t?t:so(t,n,vo(e),o)},Ne.values=qa,Ne.valuesIn=function(t){return null==t?[]:Zn(t,ka(t))},Ne.without=iu,Ne.words=Za,Ne.wrap=function(t,n){return Bu(vo(n),t)},Ne.xor=uu,Ne.xorBy=au,Ne.xorWith=cu,Ne.zip=su,Ne.zipObject=function(t,n){return ho(t||[],n||[],Qe)},Ne.zipObjectDeep=function(t,n){return ho(t||[],n||[],Zr)},Ne.zipWith=fu,Ne.entries=Ua,Ne.entriesIn=Na,Ne.extend=ma,Ne.extendWith=ba,uc(Ne,Ne),Ne.add=_c,Ne.attempt=Xa,Ne.camelCase=Da,Ne.capitalize=Fa,Ne.ceil=gc,Ne.clamp=function(t,n,e){return e===r&&(e=n,n=r),e!==r&&(e=(e=ya(e))==e?e:0),n!==r&&(n=(n=ya(n))==n?n:0),ir(ya(t),n,e)},Ne.clone=function(t){return ur(t,4)},Ne.cloneDeep=function(t){return ur(t,5)},Ne.cloneDeepWith=function(t,n){return ur(t,5,n=\"function\"==typeof n?n:r)},Ne.cloneWith=function(t,n){return ur(t,4,n=\"function\"==typeof n?n:r)},Ne.conformsTo=function(t,n){return null==n||ar(t,n,Ia(n))},Ne.deburr=La,Ne.defaultTo=function(t,n){return null==t||t!=t?n:t},Ne.divide=mc,Ne.endsWith=function(t,n,e){t=_a(t),n=uo(n);var o=t.length,i=e=e===r?o:ir(ha(e),0,o);return(e-=n.length)>=0&&t.slice(e,i)==n},Ne.eq=qu,Ne.escape=function(t){return(t=_a(t))&&G.test(t)?t.replace(W,ne):t},Ne.escapeRegExp=function(t){return(t=_a(t))&&nt.test(t)?t.replace(tt,\"\\\\$&\"):t},Ne.every=function(t,n,e){var o=Vu(t)?zn:pr;return e&&_i(t,n,e)&&(n=r),o(t,ui(n,3))},Ne.find=yu,Ne.findIndex=Li,Ne.findKey=function(t,n){return Un(t,ui(n,3),gr)},Ne.findLast=vu,Ne.findLastIndex=Vi,Ne.findLastKey=function(t,n){return Un(t,ui(n,3),mr)},Ne.floor=bc,Ne.forEach=_u,Ne.forEachRight=gu,Ne.forIn=function(t,n){return null==t?t:vr(t,ui(n,3),ka)},Ne.forInRight=function(t,n){return null==t?t:_r(t,ui(n,3),ka)},Ne.forOwn=function(t,n){return t&&gr(t,ui(n,3))},Ne.forOwnRight=function(t,n){return t&&mr(t,ui(n,3))},Ne.get=Oa,Ne.gt=Du,Ne.gte=Fu,Ne.has=function(t,n){return null!=t&&hi(t,n,Or)},Ne.hasIn=Ca,Ne.head=Wi,Ne.identity=ec,Ne.includes=function(t,n,e,r){t=Wu(t)?t:qa(t),e=e&&!r?ha(e):0;var o=t.length;return e<0&&(e=ve(o+e,0)),ua(t)?e<=o&&t.indexOf(n,e)>-1:!!o&&qn(t,n,e)>-1},Ne.indexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var o=null==e?0:ha(e);return o<0&&(o=ve(r+o,0)),qn(t,n,o)},Ne.inRange=function(t,n,e){return n=pa(n),e===r?(e=n,n=0):e=pa(e),function(t,n,e){return t>=_e(n,e)&&t<ve(n,e)}(t=ya(t),n,e)},Ne.invoke=xa,Ne.isArguments=Lu,Ne.isArray=Vu,Ne.isArrayBuffer=$u,Ne.isArrayLike=Wu,Ne.isArrayLikeObject=Ku,Ne.isBoolean=function(t){return!0===t||!1===t||ta(t)&&jr(t)==v},Ne.isBuffer=Gu,Ne.isDate=Hu,Ne.isElement=function(t){return ta(t)&&1===t.nodeType&&!ra(t)},Ne.isEmpty=function(t){if(null==t)return!0;if(Wu(t)&&(Vu(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Gu(t)||ca(t)||Lu(t)))return!t.length;var n=pi(t);if(n==w||n==C)return!t.size;if(wi(t))return!Tr(t).length;for(var e in t)if(Et.call(t,e))return!1;return!0},Ne.isEqual=function(t,n){return Ir(t,n)},Ne.isEqualWith=function(t,n,e){var o=(e=\"function\"==typeof e?e:r)?e(t,n):r;return o===r?Ir(t,n,r,e):!!o},Ne.isError=Ju,Ne.isFinite=function(t){return\"number\"==typeof t&&$n(t)},Ne.isFunction=Zu,Ne.isInteger=Xu,Ne.isLength=Yu,Ne.isMap=na,Ne.isMatch=function(t,n){return t===n||kr(t,n,ci(n))},Ne.isMatchWith=function(t,n,e){return e=\"function\"==typeof e?e:r,kr(t,n,ci(n),e)},Ne.isNaN=function(t){return ea(t)&&t!=+t},Ne.isNative=function(t){if(bi(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Rr(t)},Ne.isNil=function(t){return null==t},Ne.isNull=function(t){return null===t},Ne.isNumber=ea,Ne.isObject=Qu,Ne.isObjectLike=ta,Ne.isPlainObject=ra,Ne.isRegExp=oa,Ne.isSafeInteger=function(t){return Xu(t)&&t>=-9007199254740991&&t<=f},Ne.isSet=ia,Ne.isString=ua,Ne.isSymbol=aa,Ne.isTypedArray=ca,Ne.isUndefined=function(t){return t===r},Ne.isWeakMap=function(t){return ta(t)&&pi(t)==x},Ne.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==jr(t)},Ne.join=function(t,n){return null==t?\"\":de.call(t,n)},Ne.kebabCase=Va,Ne.last=Ji,Ne.lastIndexOf=function(t,n,e){var o=null==t?0:t.length;if(!o)return-1;var i=o;return e!==r&&(i=(i=ha(e))<0?ve(o+i,0):_e(i,o-1)),n==n?function(t,n,e){for(var r=e+1;r--;)if(t[r]===n)return r;return r}(t,n,i):Nn(t,Fn,i,!0)},Ne.lowerCase=$a,Ne.lowerFirst=Wa,Ne.lt=sa,Ne.lte=fa,Ne.max=function(t){return t&&t.length?hr(t,ec,Sr):r},Ne.maxBy=function(t,n){return t&&t.length?hr(t,ui(n,2),Sr):r},Ne.mean=function(t){return Ln(t,ec)},Ne.meanBy=function(t,n){return Ln(t,ui(n,2))},Ne.min=function(t){return t&&t.length?hr(t,ec,Mr):r},Ne.minBy=function(t,n){return t&&t.length?hr(t,ui(n,2),Mr):r},Ne.stubArray=dc,Ne.stubFalse=yc,Ne.stubObject=function(){return{}},Ne.stubString=function(){return\"\"},Ne.stubTrue=function(){return!0},Ne.multiply=wc,Ne.nth=function(t,n){return t&&t.length?Dr(t,ha(n)):r},Ne.noConflict=function(){return ln._===this&&(ln._=Nt),this},Ne.noop=ac,Ne.now=Ou,Ne.pad=function(t,n,e){t=_a(t);var r=(n=ha(n))?se(t):0;if(!n||r>=n)return t;var o=(n-r)/2;return Lo(yn(o),e)+t+Lo(hn(o),e)},Ne.padEnd=function(t,n,e){t=_a(t);var r=(n=ha(n))?se(t):0;return n&&r<n?t+Lo(n-r,e):t},Ne.padStart=function(t,n,e){t=_a(t);var r=(n=ha(n))?se(t):0;return n&&r<n?Lo(n-r,e)+t:t},Ne.parseInt=function(t,n,e){return e||null==n?n=0:n&&(n=+n),me(_a(t).replace(et,\"\"),n||0)},Ne.random=function(t,n,e){if(e&&\"boolean\"!=typeof e&&_i(t,n,e)&&(n=e=r),e===r&&(\"boolean\"==typeof n?(e=n,n=r):\"boolean\"==typeof t&&(e=t,t=r)),t===r&&n===r?(t=0,n=1):(t=pa(t),n===r?(n=t,t=0):n=pa(n)),t>n){var o=t;t=n,n=o}if(e||t%1||n%1){var i=be();return _e(t+i*(n-t+an(\"1e-\"+((i+\"\").length-1))),n)}return Wr(t,n)},Ne.reduce=function(t,n,e){var r=Vu(t)?En:Wn,o=arguments.length<3;return r(t,ui(n,4),e,o,fr)},Ne.reduceRight=function(t,n,e){var r=Vu(t)?Tn:Wn,o=arguments.length<3;return r(t,ui(n,4),e,o,lr)},Ne.repeat=function(t,n,e){return n=(e?_i(t,n,e):n===r)?1:ha(n),Kr(_a(t),n)},Ne.replace=function(){var t=arguments,n=_a(t[0]);return t.length<3?n:n.replace(t[1],t[2])},Ne.result=function(t,n,e){var o=-1,i=(n=_o(n,t)).length;for(i||(i=1,t=r);++o<i;){var u=null==t?r:t[Bi(n[o])];u===r&&(o=i,u=e),t=Zu(u)?u.call(t):u}return t},Ne.round=Pc,Ne.runInContext=t,Ne.sample=function(t){return(Vu(t)?Je:Hr)(t)},Ne.size=function(t){if(null==t)return 0;if(Wu(t))return ua(t)?se(t):t.length;var n=pi(t);return n==w||n==C?t.size:Tr(t).length},Ne.snakeCase=Ka,Ne.some=function(t,n,e){var o=Vu(t)?Mn:no;return e&&_i(t,n,e)&&(n=r),o(t,ui(n,3))},Ne.sortedIndex=function(t,n){return eo(t,n)},Ne.sortedIndexBy=function(t,n,e){return ro(t,n,ui(e,2))},Ne.sortedIndexOf=function(t,n){var e=null==t?0:t.length;if(e){var r=eo(t,n);if(r<e&&qu(t[r],n))return r}return-1},Ne.sortedLastIndex=function(t,n){return eo(t,n,!0)},Ne.sortedLastIndexBy=function(t,n,e){return ro(t,n,ui(e,2),!0)},Ne.sortedLastIndexOf=function(t,n){if(null!=t&&t.length){var e=eo(t,n,!0)-1;if(qu(t[e],n))return e}return-1},Ne.startCase=Ga,Ne.startsWith=function(t,n,e){return t=_a(t),e=null==e?0:ir(ha(e),0,t.length),n=uo(n),t.slice(e,e+n.length)==n},Ne.subtract=jc,Ne.sum=function(t){return t&&t.length?Kn(t,ec):0},Ne.sumBy=function(t,n){return t&&t.length?Kn(t,ui(n,2)):0},Ne.template=function(t,n,e){var o=Ne.templateSettings;e&&_i(t,n,e)&&(n=r),t=_a(t),n=wa({},n,o,Zo);var i=wa({},n.imports,o.imports,Zo),u=Ia(i),a=Zn(i,u);On(u,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,f=0,l=n.interpolate||gt,p=\"__p += '\",h=Ot((n.escape||gt).source+\"|\"+l.source+\"|\"+(l===Z?ft:gt).source+\"|\"+(n.evaluate||gt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Et.call(n,\"sourceURL\")?(n.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++en+\"]\")+\"\\n\";t.replace(h,function(n,e,r,o,i,u){return r||(r=o),p+=t.slice(f,u).replace(mt,ee),e&&(c=!0,p+=\"' +\\n__e(\"+e+\") +\\n'\"),i&&(s=!0,p+=\"';\\n\"+i+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),f=u+n.length,n}),p+=\"';\\n\";var y=Et.call(n,\"variable\")&&n.variable;if(y){if(ct.test(y))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(F,\"\"):p).replace(L,\"$1\").replace(V,\"$1;\"),p=\"function(\"+(y||\"obj\")+\") {\\n\"+(y?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var v=Xa(function(){return Pt(u,d+\"return \"+p).apply(r,a)});if(v.source=p,Ju(v))throw v;return v},Ne.times=function(t,n){if((t=ha(t))<1||t>f)return[];var e=p,r=_e(t,p);n=ui(n),t-=p;for(var o=Gn(r,n);++e<t;)n(e);return o},Ne.toFinite=pa,Ne.toInteger=ha,Ne.toLength=da,Ne.toLower=function(t){return _a(t).toLowerCase()},Ne.toNumber=ya,Ne.toSafeInteger=function(t){return t?ir(ha(t),-9007199254740991,f):0===t?t:0},Ne.toString=_a,Ne.toUpper=function(t){return _a(t).toUpperCase()},Ne.trim=function(t,n,e){if((t=_a(t))&&(e||n===r))return Hn(t);if(!t||!(n=uo(n)))return t;var o=fe(t),i=fe(n);return mo(o,Yn(o,i),Qn(o,i)+1).join(\"\")},Ne.trimEnd=function(t,n,e){if((t=_a(t))&&(e||n===r))return t.slice(0,le(t)+1);if(!t||!(n=uo(n)))return t;var o=fe(t);return mo(o,0,Qn(o,fe(n))+1).join(\"\")},Ne.trimStart=function(t,n,e){if((t=_a(t))&&(e||n===r))return t.replace(et,\"\");if(!t||!(n=uo(n)))return t;var o=fe(t);return mo(o,Yn(o,fe(n))).join(\"\")},Ne.truncate=function(t,n){var e=30,o=\"...\";if(Qu(n)){var i=\"separator\"in n?n.separator:i;e=\"length\"in n?ha(n.length):e,o=\"omission\"in n?uo(n.omission):o}var u=(t=_a(t)).length;if(re(t)){var a=fe(t);u=a.length}if(e>=u)return t;var c=e-se(o);if(c<1)return o;var s=a?mo(a,0,c).join(\"\"):t.slice(0,c);if(i===r)return s+o;if(a&&(c+=s.length-c),oa(i)){if(t.slice(c).search(i)){var f,l=s;for(i.global||(i=Ot(i.source,_a(lt.exec(i))+\"g\")),i.lastIndex=0;f=i.exec(l);)var p=f.index;s=s.slice(0,p===r?c:p)}}else if(t.indexOf(uo(i),c)!=c){var h=s.lastIndexOf(i);h>-1&&(s=s.slice(0,h))}return s+o},Ne.unescape=function(t){return(t=_a(t))&&K.test(t)?t.replace($,pe):t},Ne.uniqueId=function(t){var n=++Tt;return _a(t)+n},Ne.upperCase=Ha,Ne.upperFirst=Ja,Ne.each=_u,Ne.eachRight=gu,Ne.first=Wi,uc(Ne,(vc={},gr(Ne,function(t,n){Et.call(Ne.prototype,n)||(vc[n]=t)}),vc),{chain:!1}),Ne.VERSION=\"4.18.1\",On([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Ne[t].placeholder=Ne}),On([\"drop\",\"take\"],function(t,n){Le.prototype[t]=function(e){e=e===r?1:ve(ha(e),0);var o=this.__filtered__&&!n?new Le(this):this.clone();return o.__filtered__?o.__takeCount__=_e(e,o.__takeCount__):o.__views__.push({size:_e(e,p),type:t+(o.__dir__<0?\"Right\":\"\")}),o},Le.prototype[t+\"Right\"]=function(n){return this.reverse()[t](n).reverse()}}),On([\"filter\",\"map\",\"takeWhile\"],function(t,n){var e=n+1,r=1==e||3==e;Le.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:ui(t,3),type:e}),n.__filtered__=n.__filtered__||r,n}}),On([\"head\",\"last\"],function(t,n){var e=\"take\"+(n?\"Right\":\"\");Le.prototype[t]=function(){return this[e](1).value()[0]}}),On([\"initial\",\"tail\"],function(t,n){var e=\"drop\"+(n?\"\":\"Right\");Le.prototype[t]=function(){return this.__filtered__?new Le(this):this[e](1)}}),Le.prototype.compact=function(){return this.filter(ec)},Le.prototype.find=function(t){return this.filter(t).head()},Le.prototype.findLast=function(t){return this.reverse().find(t)},Le.prototype.invokeMap=Gr(function(t,n){return\"function\"==typeof t?new Le(this):this.map(function(e){return Ar(e,t,n)})}),Le.prototype.reject=function(t){return this.filter(Tu(ui(t)))},Le.prototype.slice=function(t,n){t=ha(t);var e=this;return e.__filtered__&&(t>0||n<0)?new Le(e):(t<0?e=e.takeRight(-t):t&&(e=e.drop(t)),n!==r&&(e=(n=ha(n))<0?e.dropRight(-n):e.take(n-t)),e)},Le.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Le.prototype.toArray=function(){return this.take(p)},gr(Le.prototype,function(t,n){var e=/^(?:filter|find|map|reject)|While$/.test(n),o=/^(?:head|last)$/.test(n),i=Ne[o?\"take\"+(\"last\"==n?\"Right\":\"\"):n],u=o||/^find/.test(n);i&&(Ne.prototype[n]=function(){var n=this.__wrapped__,a=o?[1]:arguments,c=n instanceof Le,s=a[0],f=c||Vu(n),l=function(t){var n=i.apply(Ne,Rn([t],a));return o&&p?n[0]:n};f&&e&&\"function\"==typeof s&&1!=s.length&&(c=f=!1);var p=this.__chain__,h=!!this.__actions__.length,d=u&&!p,y=c&&!h;if(!u&&f){n=y?n:new Le(this);var v=t.apply(n,a);return v.__actions__.push({func:pu,args:[l],thisArg:r}),new Fe(v,p)}return d&&y?t.apply(this,a):(v=this.thru(l),d?o?v.value()[0]:v.value():v)})}),On([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var n=At[t],e=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Ne.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var o=this.value();return n.apply(Vu(o)?o:[],t)}return this[e](function(e){return n.apply(Vu(e)?e:[],t)})}}),gr(Le.prototype,function(t,n){var e=Ne[n];if(e){var r=e.name+\"\";Et.call(xe,r)||(xe[r]=[]),xe[r].push({name:n,func:e})}}),xe[No(r,2).name]=[{name:\"wrapper\",func:r}],Le.prototype.clone=function(){var t=new Le(this.__wrapped__);return t.__actions__=zo(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=zo(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=zo(this.__views__),t},Le.prototype.reverse=function(){if(this.__filtered__){var t=new Le(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Le.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,e=Vu(t),r=n<0,o=e?t.length:0,i=function(t,n,e){for(var r=-1,o=e.length;++r<o;){var i=e[r],u=i.size;switch(i.type){case\"drop\":t+=u;break;case\"dropRight\":n-=u;break;case\"take\":n=_e(n,t+u);break;case\"takeRight\":t=ve(t,n-u)}}return{start:t,end:n}}(0,o,this.__views__),u=i.start,a=i.end,c=a-u,s=r?a:u-1,f=this.__iteratees__,l=f.length,p=0,h=_e(c,this.__takeCount__);if(!e||!r&&o==c&&h==c)return lo(t,this.__actions__);var d=[];t:for(;c--&&p<h;){for(var y=-1,v=t[s+=n];++y<l;){var _=f[y],g=_.iteratee,m=_.type,b=g(v);if(2==m)v=b;else if(!b){if(1==m)continue t;break t}}d[p++]=v}return d},Ne.prototype.at=hu,Ne.prototype.chain=function(){return lu(this)},Ne.prototype.commit=function(){return new Fe(this.value(),this.__chain__)},Ne.prototype.next=function(){this.__values__===r&&(this.__values__=la(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Ne.prototype.plant=function(t){for(var n,e=this;e instanceof De;){var o=Ni(e);o.__index__=0,o.__values__=r,n?i.__wrapped__=o:n=o;var i=o;e=e.__wrapped__}return i.__wrapped__=t,n},Ne.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Le){var n=t;return this.__actions__.length&&(n=new Le(this)),(n=n.reverse()).__actions__.push({func:pu,args:[Qi],thisArg:r}),new Fe(n,this.__chain__)}return this.thru(Qi)},Ne.prototype.toJSON=Ne.prototype.valueOf=Ne.prototype.value=function(){return lo(this.__wrapped__,this.__actions__)},Ne.prototype.first=Ne.prototype.head,Xt&&(Ne.prototype[Xt]=function(){return this}),Ne}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(ln._=he,define(function(){return he})):hn?((hn.exports=he)._=he,pn._=he):ln._=he}.call(this)},1657(t){\"use strict\";t.exports=(t,n)=>{if(\"string\"!=typeof t||\"string\"!=typeof n)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===n)return[t];const e=t.indexOf(n);return-1===e?[t]:[t.slice(0,e),t.slice(e+n.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,n,e){\"use strict\";e.d(n,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var o in n=arguments[e])Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},n={};function e(r){var o=n[r];if(void 0!==o)return o.exports;var i=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";e.r(r),e.d(r,{createAmazonPayV2ButtonStrategy:()=>W,createAmazonPayV2CustomerStrategy:()=>T,createAmazonPayV2PaymentStrategy:()=>I});var t,n=e(315);class o extends Error{constructor(t){var n;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",n=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(t||(t={}));class i extends o{constructor(n){super(function(n){switch(n){case t.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case t.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case t.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case t.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case t.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case t.MissingCheckoutConfig:case t.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case t.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case t.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case t.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case t.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case t.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case t.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(n)),this.subtype=n,this.name=\"MissingDataError\",this.type=\"missing_data\"}}var u,a=e(9440);function c(t){return n=t.lineItems.physicalItems.filter(t=>!t.addedByPromotion),(0,a.reduce)(n,(t,n)=>t+n.quantity,0);var n}function s(t,n){if(null==t)throw n?n():new Error(\"An unexpected error has occurred.\");return t}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(u||(u={}));class f extends o{constructor(t){super(function(t){switch(t){case u.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case u.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case u.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case u.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const l={de:\"eu\",jp:\"fe\",uk:\"eu\",us:\"na\"};var p,h,d,y,v,_;!function(t){t.en_US=\"en_US\",t.en_GB=\"en_GB\",t.de_DE=\"de_DE\",t.fr_FR=\"fr_FR\",t.it_IT=\"it_IT\",t.es_ES=\"es_ES\",t.ja_JP=\"ja_JP\"}(p||(p={})),function(t){t.Home=\"Home\",t.Product=\"Product\",t.Cart=\"Cart\",t.Checkout=\"Checkout\",t.Other=\"Other\"}(h||(h={})),function(t){t.USD=\"USD\",t.EUR=\"EUR\",t.GBP=\"GBP\",t.JPY=\"JPY\"}(d||(d={})),function(t){t.PayAndShip=\"PayAndShip\",t.PayOnly=\"PayOnly\"}(y||(y={})),function(t){t.Gold=\"Gold\",t.LightGray=\"LightGray\",t.DarkGray=\"DarkGray\"}(v||(v={})),function(t){t.C0001=\"C0001\"}(_||(_={}));var g=function(t,n,e,r){return new(e||(e=Promise))(function(o,i){function u(t){try{c(r.next(t))}catch(t){i(t)}}function a(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e(function(t){t(n)})).then(u,a)}c((r=r.apply(t,n||[])).next())})};class m{constructor(t){this.amazonPayV2ScriptLoader=t}initialize(t){return g(this,void 0,void 0,function*(){this.amazonPayV2SDK=yield this.amazonPayV2ScriptLoader.load(t),this.buttonParentContainer=this.buttonParentContainer||this.createAmazonPayButtonParentContainer()})}deinitialize(){var t;return this.amazonPayV2Button=void 0,null===(t=this.buttonParentContainer)||void 0===t||t.remove(),this.buttonParentContainer=void 0,this.amazonPayV2SDK=void 0,Promise.resolve()}bindButton(t,n,e){this.getAmazonPayV2SDK().Pay.bindChangeAction(`#${t}`,{amazonCheckoutSessionId:n,changeAction:e})}createButton(t,n){this.amazonPayV2Button=this.getAmazonPayV2SDK().Pay.renderButton(`#${t}`,n)}prepareCheckout(t){const n=this.prepareRequestConfig(t);this.getAmazonPayV2Button().onClick(()=>{this.getAmazonPayV2Button().initCheckout(n)})}prepareCheckoutWithCreationRequestConfig(t){this.getAmazonPayV2Button().onClick(()=>g(this,void 0,void 0,function*(){const n=yield t();if(n){const t=this.prepareRequestConfig(n.createCheckoutSessionConfig,n.estimatedOrderAmount,n.productType);this.getAmazonPayV2Button().initCheckout(t)}}))}signout(){return g(this,void 0,void 0,function*(){return this.amazonPayV2SDK&&this.amazonPayV2SDK.Pay.signout(),Promise.resolve()})}renderAmazonPayButton({buttonColor:t,checkoutState:n,containerId:e,decoupleCheckoutInitiation:r=!1,methodId:o,options:i,placement:u,isButtonMicroTextDisabled:a=!1}){const c=document.querySelector(`#${e}`);if(!c)return;const{id:s}=c.appendChild(this.getButtonParentContainer());i&&a&&(i.design=_.C0001);const f=null!=i?i:this.getAmazonPayV2ButtonOptions(n,o,u,r,t);return this.createButton(s,f),this.getButtonParentContainer()}updateBuyNowFlowFlag(t){this.isBuyNowFlow=Boolean(t)}isPh4Enabled(t,n){const e=!!t[\"PROJECT-3483.amazon_pay_ph4\"],r=!!t[\"INT-6885.amazon_pay_ph4_us_only\"];return e&&r?\"US\"===n:e}prepareRequestConfig(t,n,e){const{publicKeyId:r}=t,o=function(t,n){var e={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&n.indexOf(r)<0&&(e[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)n.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(e[r[o]]=t[r[o]])}return e}(t,[\"publicKeyId\"]);return Object.assign(Object.assign({createCheckoutSessionConfig:this.isEnvironmentSpecific(r)?o:t},n&&{estimatedOrderAmount:n}),e&&{productType:e})}createAmazonPayButtonParentContainer(){const t=Math.random().toString(16).substr(-4),n=document.createElement(\"div\");return n.id=`amazonpay_button_parent_container_${t}`,n}getAmazonPayV2ButtonOptions(n,e,r,o=!1,u=v.Gold){var a;const{getCart:s,getCheckout:f,getStoreConfigOrThrow:l,getPaymentMethodOrThrow:p}=this.getCheckoutState(n),{config:{merchantId:h,testMode:d},initializationData:g}=p(e);if(!g)throw new i(t.MissingPaymentMethod);const{checkoutLanguage:m,checkoutSessionMethod:b,createCheckoutSessionConfig:w,extractAmazonCheckoutSessionId:P,ledgerCurrency:j,publicKeyId:S=\"\",isButtonMicroTextDisabled:O}=g;if(!h||!j)throw new i(t.MissingPaymentMethod);const C=Object.assign({merchantId:h,ledgerCurrency:j,checkoutLanguage:m,placement:r,buttonColor:u},O?{design:_.C0001}:{});if(this.isBuyNowFlow)return Object.assign(Object.assign({},C),{sandbox:!!d});const z=s();C.productType=z&&0===c(z)?y.PayOnly:y.PayAndShip;const{checkoutSettings:{features:A},storeProfile:{shopPath:x,storeCountryCode:I}}=l();if(this.isPh4Enabled(A,I)){if(!w)throw new i(t.MissingPaymentMethod);const n=null===(a=f())||void 0===a?void 0:a.outstandingBalance.toString(),e=null==z?void 0:z.currency.code,r=Object.assign({},C);let u;return this.isEnvironmentSpecific(S)?(r.publicKeyId=S,u=w):(r.sandbox=!!d,u=Object.assign(Object.assign({},w),{publicKeyId:S})),o||(r.createCheckoutSessionConfig=u),n&&e&&(r.estimatedOrderAmount={amount:n,currencyCode:e}),r}const k={method:b,url:`${x}/remote-checkout/${e}/payment-session`,extractAmazonCheckoutSessionId:P};return Object.assign(Object.assign({},C),{createCheckoutSession:k,sandbox:!!d})}isEnvironmentSpecific(t){return/^(SANDBOX|LIVE)/.test(t)}getAmazonPayV2SDK(){return this.getOrThrow(this.amazonPayV2SDK)}getButtonParentContainer(){return this.getOrThrow(this.buttonParentContainer)}getAmazonPayV2Button(){return this.getOrThrow(this.amazonPayV2Button)}getOrThrow(t){return s(t,()=>new f(u.PaymentNotInitialized))}getCheckoutState(t){return\"object\"==typeof(n=t)&&null!==n&&\"cart\"in n&&\"checkout\"in n&&\"config\"in n&&\"paymentMethods\"in n?{getCart:t.cart.getCart,getCheckout:t.checkout.getCheckout,getStoreConfigOrThrow:t.config.getStoreConfigOrThrow,getPaymentMethodOrThrow:n=>t.paymentMethods.getPaymentMethodOrThrow(n)}:t;var n}}class b extends o{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class w{constructor(t,n=window){this.scriptLoader=t,this.windowWithAmazonPay=n}load(t){return n=this,e=void 0,o=function*(){const{initializationData:n}=t,e=(null==n?void 0:n.region)||\"us\",r=l[e];if(yield this.scriptLoader.loadScript(`https://static-${r}.payments-amazon.com/checkout.js`),!this.windowWithAmazonPay.amazon)throw new b;return this.windowWithAmazonPay.amazon},new((r=void 0)||(r=Promise))(function(t,i){function u(t){try{c(o.next(t))}catch(t){i(t)}}function a(t){try{c(o.throw(t))}catch(t){i(t)}}function c(n){var e;n.done?t(n.value):(e=n.value,e instanceof r?e:new r(function(t){t(e)})).then(u,a)}c((o=o.apply(n,e||[])).next())});var n,e,r,o}}function P(){return new m(new w((0,n.vQ)()))}function j(t,n){return Object.assign(t,{resolveIds:n})}class S extends o{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class O extends S{constructor(t){let n=\"Unable to submit payment for the order because the payload is invalid.\";t&&(n=`${n} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(n),this.name=\"PaymentArgumentInvalidError\"}}class C extends o{constructor(t){super(t||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}class z extends o{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}var A=function(t,n,e,r){return new(e||(e=Promise))(function(o,i){function u(t){try{c(r.next(t))}catch(t){i(t)}}function a(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e(function(t){t(n)})).then(u,a)}c((r=r.apply(t,n||[])).next())})};class x{constructor(t,n){this.paymentIntegrationService=t,this.amazonPayV2PaymentProcessor=n}initialize(t){return A(this,void 0,void 0,function*(){const{methodId:n,amazonpay:e}=t;if(!n)throw new S('Unable to proceed because \"methodId\" argument is not provided.');const r=this.paymentIntegrationService.getState(),{features:o}=r.getStoreConfigOrThrow().checkoutSettings,i=r.getPaymentMethodOrThrow(n),u=i.initializationData||{},{paymentToken:a=\"\",region:c=\"\",isButtonMicroTextDisabled:s}=u;if(yield this.amazonPayV2PaymentProcessor.initialize(i),this._isReadyToPay(a))(null==e?void 0:e.editButtonId)&&this._bindEditButton(e.editButtonId,a,\"changePayment\",this._isModalFlow(c));else{const{id:t}=this._createContainer();if(this._amazonPayButton=this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:r,containerId:t,decoupleCheckoutInitiation:this._isOneTimeTransaction(o,c.toUpperCase()),methodId:n,placement:h.Checkout,isButtonMicroTextDisabled:s}),!this._amazonPayButton)throw new S(\"Unable to render the Amazon Pay button to an invalid HTML container element.\")}})}execute(t,n){return A(this,void 0,void 0,function*(){const{payment:e}=t;if(!e)throw new O([\"payment\"]);const{methodId:r}=e,o=this.paymentIntegrationService.getState(),{features:i}=o.getStoreConfigOrThrow().checkoutSettings,u=o.getPaymentMethodOrThrow(r).initializationData||{},{paymentToken:c=\"\",region:s=\"\"}=u;if(this._isReadyToPay(c)||this._isOneTimeTransaction(i,s.toUpperCase())){const e={methodId:r,paymentData:{nonce:c||\"apb\"}};yield this.paymentIntegrationService.submitOrder(t,n);try{return void(yield this.paymentIntegrationService.submitPayment(e))}catch(t){if(!((t=>\"object\"==typeof t&&null!==t&&\"body\"in t)(t)&&(f=t.body,\"object\"==typeof f&&null!==f&&\"status\"in f&&\"additional_action_required\"in f&&\"additional_action_required\"===f.status&&\"data\"in f.additional_action_required&&\"redirect_url\"in f.additional_action_required.data&&\"string\"==typeof f.additional_action_required.data.redirect_url)))throw t;const{additional_action_required:n}=t.body,{redirect_url:e}=n.data;if(c)return new Promise(()=>window.location.assign(e));this.amazonPayV2PaymentProcessor.prepareCheckout(JSON.parse(e))}}var f;return this._getAmazonPayButton().click(),this._isModalFlow(s)?new Promise((t,n)=>{const e=()=>{window.removeEventListener(\"focus\",e),n(new C(\"Shopper needs to login to Amazonpay to continue\"))};window.addEventListener(\"focus\",e)}):new Promise(a.noop)})}finalize(){return Promise.reject(new z)}deinitialize(){return A(this,void 0,void 0,function*(){yield this.amazonPayV2PaymentProcessor.deinitialize(),this._amazonPayButton=void 0})}_bindEditButton(t,n,e,r){const o=document.getElementById(t);if(o&&o.parentNode){if(!r){const t=o.cloneNode(!0);o.parentNode.replaceChild(t,o),t.addEventListener(\"click\",()=>{this._showLoadingSpinner()})}this.amazonPayV2PaymentProcessor.bindButton(t,n,e)}}_isModalFlow(t){return\"us\"===t}_showLoadingSpinner(){return A(this,void 0,void 0,function*(){yield this.paymentIntegrationService.widgetInteraction(()=>new Promise(a.noop))})}_createContainer(){let t=document.getElementById(\"AmazonPayButton\");return t||(t=document.createElement(\"div\"),t.id=\"AmazonPayButton\",t.style.display=\"none\",document.body.appendChild(t))}_getAmazonPayButton(){return s(this._amazonPayButton,()=>new f(u.PaymentNotInitialized))}_isOneTimeTransaction(t,n){return this.amazonPayV2PaymentProcessor.isPh4Enabled(t,n)&&t[\"INT-6399.amazon_pay_apb\"]}_isReadyToPay(t){return!!t}}const I=j(t=>new x(t,P()),[{id:\"amazonpay\"}]);class k extends o{constructor(t){super(t||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var R=function(t,n,e,r){return new(e||(e=Promise))(function(o,i){function u(t){try{c(r.next(t))}catch(t){i(t)}}function a(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e(function(t){t(n)})).then(u,a)}c((r=r.apply(t,n||[])).next())})};class E{constructor(t,n){this.paymentIntegrationService=t,this.amazonPayV2PaymentProcessor=n}initialize(t){return R(this,void 0,void 0,function*(){const{methodId:n,amazonpay:e}=t;if(!n||!(null==e?void 0:e.container))throw new S('Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.');let r;try{r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n)}catch(t){yield this.paymentIntegrationService.loadPaymentMethod(n),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n)}yield this.amazonPayV2PaymentProcessor.initialize(r),this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:this.paymentIntegrationService.getState(),containerId:e.container,methodId:n,placement:h.Checkout})})}deinitialize(){return R(this,void 0,void 0,function*(){yield this.amazonPayV2PaymentProcessor.deinitialize()})}signIn(){throw new k('In order to sign in via Amazon, the shopper must click on \"Amazon Pay\" button.')}signOut(t){return R(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getPaymentId();n&&(yield this.amazonPayV2PaymentProcessor.signout(),yield this.paymentIntegrationService.remoteCheckoutSignOut(n.providerId,t))})}executePaymentMethodCheckout(t){var n;return null===(n=null==t?void 0:t.continueWithCheckoutCallback)||void 0===n||n.call(t),Promise.resolve()}}const T=j(t=>new E(t,P()),[{id:\"amazonpay\"}]);var M=e(4043);class B extends o{constructor(t){super(t||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}class U extends o{constructor(t){super(t||\"An unexpected error has occurred during config creation process. Please try again later.\"),this.name=\"AmazonPayV2ConfigCreationError\",this.type=\"amazon_pay_v2_config_creation_error\"}}function N(t){return t instanceof Object&&\"buyNowInitializeOptions\"in t}var q,D=function(t,n,e,r){return new(e||(e=Promise))(function(o,i){function u(t){try{c(r.next(t))}catch(t){i(t)}}function a(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e(function(t){t(n)})).then(u,a)}c((r=r.apply(t,n||[])).next())})};class F{constructor(t,n,e){this.paymentIntegrationService=t,this.amazonPayV2PaymentProcessor=n,this.amazonPayV2ConfigRequestSender=e}initialize(t){var n;return D(this,void 0,void 0,function*(){const{methodId:e,containerId:r,amazonpay:o}=t,{buttonColor:i}=o||{};if(!e||!r)throw new S('Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.');const{getPaymentMethodOrThrow:u}=this.paymentIntegrationService.getState(),a=u(e),{initializationData:c}=a;yield this.amazonPayV2PaymentProcessor.initialize(a),o||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=N(o)?void 0:o;N(o)&&\"function\"==typeof(null===(n=o.buyNowInitializeOptions)||void 0===n?void 0:n.getBuyNowCartRequestBody)&&(this._buyNowInitializeOptions=o.buyNowInitializeOptions,this.amazonPayV2PaymentProcessor.updateBuyNowFlowFlag(!0)),this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:this.paymentIntegrationService.getState(),containerId:r,methodId:e,options:s,placement:h.Cart,buttonColor:i,isButtonMicroTextDisabled:null==c?void 0:c.isButtonMicroTextDisabled}),this._buyNowInitializeOptions&&this.amazonPayV2PaymentProcessor.prepareCheckoutWithCreationRequestConfig(this._getCheckoutCreationRequestConfig.bind(this))})}deinitialize(){return this.amazonPayV2PaymentProcessor.deinitialize()}_createBuyNowCartOrThrow(){var n,e;return D(this,void 0,void 0,function*(){const r=null===(e=null===(n=this._buyNowInitializeOptions)||void 0===n?void 0:n.getBuyNowCartRequestBody)||void 0===e?void 0:e.call(n);if(!r)throw new i(t.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(r)}catch(t){throw new B}})}_createCheckoutConfig(t){return D(this,void 0,void 0,function*(){try{const n=(yield this.amazonPayV2ConfigRequestSender.createCheckoutConfig(t)).body,{payload:e,public_key:r}=n,o=function(t,n){var e={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&n.indexOf(r)<0&&(e[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)n.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(e[r[o]]=t[r[o]])}return e}(n,[\"payload\",\"public_key\"]);return Object.assign({payloadJSON:e,publicKeyId:r},o)}catch(t){throw new U}})}_getCheckoutCreationRequestConfig(){return D(this,void 0,void 0,function*(){const t=yield this._createBuyNowCartOrThrow(),n={amount:String(t.baseAmount),currencyCode:t.currency.code};return{createCheckoutSessionConfig:yield this._createCheckoutConfig(t.id),estimatedOrderAmount:n,productType:0===c(t)?y.PayOnly:y.PayAndShip}})}}!function(t){t.Json=\"application/json\",t.JsonV1=\"application/vnd.bc.v1+json\"}(q||(q={}));const L=q,V={\"X-Checkout-SDK-Version\":\"1.916.1\"};class ${constructor(t){this._requestSender=t}createCheckoutConfig(t){const n={cartId:t},e=Object.assign({\"X-API-INTERNAL\":\"This API endpoint is for internal use only and may change in the future\",\"Content-Type\":L.Json},V);return this._requestSender.post(\"/api/storefront/payment/amazonpay\",{headers:e,body:n})}}const W=j(t=>{const n=(0,M.createRequestSender)(),e=new $(n),r=P();return new F(t,r,e)},[{id:\"amazonpay\"}])})(),module.exports=r})();\n//# sourceMappingURL=amazon-pay.js.map"
  },
  {
    "path": "dist/cjs/integrations/apple-pay.js",
    "content": "(()=>{var t={4325(t,e,n){\"use strict\";n.d(e,{g:()=>i});var r=n(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(r.stringify(e))},t}()},321(t,e,n){\"use strict\";n.d(e,{A:()=>u});var r=n(168),i=n(1675),o=n(5861),a=n(4670);function u(t){return new a.A(new o.A,new i.A,r,t)}},6889(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(2024);function i(t){return new r.A(t)}},4043(t,e,n){\"use strict\";n.r(e),n.d(e,{RequestSender:()=>o.A,Timeout:()=>a.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),a=n(2024)},4843(t,e,n){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}n.d(e,{A:()=>r})},1675(t,e,n){\"use strict\";n.d(e,{A:()=>u});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,a=/application\\/x-www-form-urlencoded/;const u=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(e))return JSON.stringify(t.body);if(a.test(e))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,\"Content-Type\");return t&&o.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var n,i=e.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}()},5861(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||\"GET\",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),\"boolean\"==typeof n.credentials&&(t.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(n){t.setRequestHeader(n,e[n])})},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(r.stringify(e,{encode:n})):t},t}()},4670(t,e,n){\"use strict\";n.d(e,{A:()=>c});var r=n(1635),i=n(35),o=n.n(i),a=n(4325),u=n(4843),s=n(2024);const c=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new a.g}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(e,i){var a=function(){var a=n._payloadTransformer.toResponse(o);a.status>=200&&a.status<300?(n._cacheRequest(t,r,a),e(a)):i(a)};o.onload=a,o.onerror=a,o.onabort=a,o.ontimeout=a,r.timeout instanceof s.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,u.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(n.headers[\"X-XSRF-TOKEN\"]=r),e&&e.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,e,n){\"use strict\";n.d(e,{A:()=>r});const r=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,e,n){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var n=t[e];return\"string\"==typeof n?\"\".concat(e,\"=\").concat(encodeURIComponent(n)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(e,{A:()=>r})},5889(t,e,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),a=n(3814);function u(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function s(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}function c(t,e){return e.decode?i(t):t}function l(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?l(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function f(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function h(t){const e=(t=f(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function p(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function d(t,e){u((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,n,r)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case\"bracket\":return(t,n,r)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"comma\":case\"separator\":return(e,n,r)=>{const i=\"string\"==typeof n&&n.includes(t.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&c(n,t).includes(t.arrayFormatSeparator);n=o?c(n,t):n;const a=i||o?n.split(t.arrayFormatSeparator).map(e=>c(e,t)):null===n?n:c(n,t);r[e]=a};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[].concat(n[t],e):n[t]=e}}}(e),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,a]=o(e.decode?i.replace(/\\+/g,\" \"):i,\"=\");a=void 0===a?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?a:c(a,e),n(c(t,e),a,r)}for(const t of Object.keys(r)){const n=r[t];if(\"object\"==typeof n&&null!==n)for(const t of Object.keys(n))n[t]=p(n[t],e);else r[t]=p(n,e)}return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce((t,e)=>{const n=r[e];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?t[e]=l(n):t[e]=n,t},Object.create(null))}e.extract=h,e.parse=d,e.stringify=(t,e)=>{if(!t)return\"\";u((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const n=n=>e.skipNull&&null==t[n]||e.skipEmptyString&&\"\"===t[n],r=function(t){switch(t.arrayFormat){case\"index\":return e=>(n,r)=>{const i=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[s(e,t),\"[\",i,\"]\"].join(\"\")]:[...n,[s(e,t),\"[\",s(i,t),\"]=\",s(r,t)].join(\"\")]};case\"bracket\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[s(e,t),\"[]\"].join(\"\")]:[...n,[s(e,t),\"[]=\",s(r,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(n,r)=>null==r||0===r.length?n:0===n.length?[[s(e,t),\"=\",s(r,t)].join(\"\")]:[[n,s(r,t)].join(t.arrayFormatSeparator)];default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,s(e,t)]:[...n,[s(e,t),\"=\",s(r,t)].join(\"\")]}}(e),i={};for(const e of Object.keys(t))n(e)||(i[e]=t[e]);const o=Object.keys(i);return!1!==e.sort&&o.sort(e.sort),o.map(n=>{const i=t[n];return void 0===i?\"\":null===i?s(n,e):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):s(n,e)+\"=\"+s(i,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[n,r]=o(t,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:d(h(t),e)},e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:c(r,e)}:{})},e.stringifyUrl=(t,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=f(t.url).split(\"?\")[0]||\"\",i=e.extract(t.url),o=e.parse(i,{sort:!1}),a=Object.assign(o,t.query);let u=e.stringify(a,n);u&&(u=`?${u}`);let c=function(t){let e=\"\";const n=t.indexOf(\"#\");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(c=`#${s(t.fragmentIdentifier,n)}`),`${r}${u}${c}`},e.pick=(t,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:u}=e.parseUrl(t,r);return e.stringifyUrl({url:i,query:a(o,n),fragmentIdentifier:u},r)},e.exclude=(t,n,r)=>{const i=Array.isArray(n)?t=>!n.includes(t):(t,e)=>!n(t,e);return e.pick(t,i,r)}},5477(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement(\"link\");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=n},471(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(t,e,n){\"use strict\";e.vQ=e.B2=void 0;var r=n(4886);Object.defineProperty(e,\"B2\",{enumerable:!0,get:function(){return r.default}});n(471);var i=n(5895);Object.defineProperty(e,\"vQ\",{enumerable:!0,get:function(){return i.default}});n(7995),n(9722),n(282)},4886(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var n=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),a=e||{},u=a.async,s=void 0!==u&&u,c=a.attributes,l=void 0===c?{}:c;Object.keys(l).forEach(function(t){o.setAttribute(t,l[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(e){delete n._scripts[t],i(e)},o.async=s,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadScript(t,e)})).then(function(){})},t.prototype.preloadScript=function(t,e){var n=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(e||{}).prefetch,a=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var u=document.createElement(\"link\");u.as=\"script\",u.rel=a,u.href=t,u.onload=function(){r()},u.onerror=function(){delete n._preloadedScripts[t],i()},document.head.appendChild(u)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadScript(t,e)})).then(function(){})},t}();e.default=n},7995(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var n=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),a=e||{},u=a.prepend,s=void 0!==u&&u,c=a.attributes,l=void 0===c?{}:c;Object.keys(l).forEach(function(t){o.setAttribute(t,l[t])}),o.onload=function(){return r()},o.onerror=function(e){delete n._stylesheets[t],i(e)},o.rel=\"stylesheet\",o.href=t,s&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadStylesheet(t,e)})).then(function(){})},t.prototype.preloadStylesheet=function(t,e){var n=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(e||{}).prefetch,a=void 0!==o&&o,u=a?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(u)){var s=document.createElement(\"link\");s.as=\"style\",s.rel=a?\"prefetch\":\"preload\",s.href=t,s.onload=function(){r()},s.onerror=function(e){delete n._preloadedStylesheets[t],i(e)},document.head.appendChild(s)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadStylesheet(t,e)})).then(function(){})},t}();e.default=n},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+e+\")+\",\"gi\");function i(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],i(n),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var e=t.match(n)||[],r=1;r<e.length;r++)e=(t=i(e,r).join(\"\")).match(n)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(t);n;){try{e[n[0]]=decodeURIComponent(n[0])}catch(t){var i=o(n[0]);i!==n[0]&&(e[n[0]]=i)}n=r.exec(t)}e[\"%C2\"]=\"�\";for(var a=Object.keys(e),u=0;u<a.length;u++){var s=a[u];t=t.replace(new RegExp(s,\"g\"),e[s])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,e){for(var n={},r=Object.keys(t),i=Array.isArray(e),o=0;o<r.length;o++){var a=r[o],u=t[a];(i?-1!==e.indexOf(a):e(a,u,t))&&(n[a]=u)}return n}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(e,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var a=JSON.stringify(n);/^[\\{\\[]/.test(a)&&(n=a)}catch(t){}n=r.write?r.write(n,e):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var u=\"\";for(var s in o)o[s]&&(u+=\"; \"+s,!0!==o[s]&&(u+=\"=\"+o[s].split(\";\")[0]));return document.cookie=e+\"=\"+n+u}}function a(t,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],a=0;a<o.length;a++){var u=o[a].split(\"=\"),s=u.slice(1).join(\"=\");n||'\"'!==s.charAt(0)||(s=s.slice(1,-1));try{var c=e(u[0]);if(s=(r.read||r)(s,c)||e(s),n)try{s=JSON.parse(s)}catch(t){}if(i[c]=s,t===c)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return a(t,!1)},i.getJSON=function(t){return a(t,!0)},i.remove=function(e,n){o(e,\"\",t(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},35(t,e,n){t=n.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",a=\"[object Function]\",u=\"[object Object]\",s=/^\\[object .+?Constructor\\]$/,c=/^(?:0|[1-9]\\d*)$/,l={};l[\"[object Float32Array]\"]=l[\"[object Float64Array]\"]=l[\"[object Int8Array]\"]=l[\"[object Int16Array]\"]=l[\"[object Int32Array]\"]=l[\"[object Uint8Array]\"]=l[\"[object Uint8ClampedArray]\"]=l[\"[object Uint16Array]\"]=l[\"[object Uint32Array]\"]=!0,l[o]=l[\"[object Array]\"]=l[\"[object ArrayBuffer]\"]=l[\"[object Boolean]\"]=l[\"[object DataView]\"]=l[\"[object Date]\"]=l[\"[object Error]\"]=l[a]=l[\"[object Map]\"]=l[\"[object Number]\"]=l[u]=l[\"[object RegExp]\"]=l[\"[object Set]\"]=l[\"[object String]\"]=l[\"[object WeakMap]\"]=!1;var f,h,p,d=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,v=\"object\"==typeof self&&self&&self.Object===Object&&self,y=d||v||Function(\"return this\")(),g=e&&!e.nodeType&&e,_=g&&t&&!t.nodeType&&t,m=_&&_.exports===g,b=m&&d.process,w=function(){try{return _&&_.require&&_.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),S=w&&w.isTypedArray,C=Array.prototype,A=Function.prototype,O=Object.prototype,k=y[\"__core-js_shared__\"],P=A.toString,I=O.hasOwnProperty,x=(f=/[^.]+$/.exec(k&&k.keys&&k.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+f:\"\",j=O.toString,T=P.call(Object),E=RegExp(\"^\"+P.call(I).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),M=m?y.Buffer:void 0,N=y.Symbol,R=y.Uint8Array,z=(M&&M.allocUnsafe,h=Object.getPrototypeOf,p=Object,function(t){return h(p(t))}),L=Object.create,D=O.propertyIsEnumerable,B=C.splice,U=N?N.toStringTag:void 0,F=function(){try{var t=ut(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),q=M?M.isBuffer:void 0,W=Math.max,V=Date.now,$=ut(y,\"Map\"),H=ut(Object,\"create\"),G=function(){function t(){}return function(e){if(!mt(e))return{};if(L)return L(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function K(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function X(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Z(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Y(t){var e=this.__data__=new X(t);this.size=e.size}function Q(t,e,n){(void 0!==n&&!ht(t[e],n)||void 0===n&&!(e in t))&&et(t,e,n)}function J(t,e,n){var r=t[e];I.call(t,e)&&ht(r,n)&&(void 0!==n||e in t)||et(t,e,n)}function tt(t,e){for(var n=t.length;n--;)if(ht(t[n][0],e))return n;return-1}function et(t,e,n){\"__proto__\"==e&&F?F(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}K.prototype.clear=function(){this.__data__=H?H(null):{},this.size=0},K.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},K.prototype.get=function(t){var e=this.__data__;if(H){var n=e[t];return n===r?void 0:n}return I.call(e,t)?e[t]:void 0},K.prototype.has=function(t){var e=this.__data__;return H?void 0!==e[t]:I.call(e,t)},K.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=H&&void 0===e?r:e,this},X.prototype.clear=function(){this.__data__=[],this.size=0},X.prototype.delete=function(t){var e=this.__data__,n=tt(e,t);return!(n<0||(n==e.length-1?e.pop():B.call(e,n,1),--this.size,0))},X.prototype.get=function(t){var e=this.__data__,n=tt(e,t);return n<0?void 0:e[n][1]},X.prototype.has=function(t){return tt(this.__data__,t)>-1},X.prototype.set=function(t,e){var n=this.__data__,r=tt(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Z.prototype.clear=function(){this.size=0,this.__data__={hash:new K,map:new($||X),string:new K}},Z.prototype.delete=function(t){var e=at(this,t).delete(t);return this.size-=e?1:0,e},Z.prototype.get=function(t){return at(this,t).get(t)},Z.prototype.has=function(t){return at(this,t).has(t)},Z.prototype.set=function(t,e){var n=at(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Y.prototype.clear=function(){this.__data__=new X,this.size=0},Y.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Y.prototype.get=function(t){return this.__data__.get(t)},Y.prototype.has=function(t){return this.__data__.has(t)},Y.prototype.set=function(t,e){var n=this.__data__;if(n instanceof X){var r=n.__data__;if(!$||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Z(r)}return n.set(t,e),this.size=n.size,this};function nt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":U&&U in Object(t)?function(t){var e=I.call(t,U),n=t[U];try{t[U]=void 0;var r=!0}catch(t){}var i=j.call(t);return r&&(e?t[U]=n:delete t[U]),i}(t):function(t){return j.call(t)}(t)}function rt(t){return bt(t)&&nt(t)==o}function it(t,e,n,r,i){t!==e&&function(t,e,n){for(var r=-1,i=Object(t),o=n(t),a=o.length;a--;){var u=o[++r];if(!1===e(i[u],u,i))break}}(e,function(o,a){if(i||(i=new Y),mt(o))!function(t,e,n,r,i,o,a){var s=lt(t,n),c=lt(e,n),l=a.get(c);if(l)Q(t,n,l);else{var f,h,p,d,v,y=o?o(s,c,n+\"\",t,e,a):void 0,g=void 0===y;if(g){var _=dt(c),m=!_&&yt(c),b=!_&&!m&&wt(c);y=c,_||m||b?dt(s)?y=s:bt(v=s)&&vt(v)?y=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}(s):m?(g=!1,y=function(t){return t.slice()}(c)):b?(g=!1,d=new(p=(f=c).buffer).constructor(p.byteLength),new R(d).set(new R(p)),h=d,y=new f.constructor(h,f.byteOffset,f.length)):y=[]:function(t){if(!bt(t)||nt(t)!=u)return!1;var e=z(t);if(null===e)return!0;var n=I.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&P.call(n)==T}(c)||pt(c)?(y=s,pt(s)?y=function(t){return function(t,e,n){var r=!n;n||(n={});for(var i=-1,o=e.length;++i<o;){var a=e[i],u=void 0;void 0===u&&(u=t[a]),r?et(n,a,u):J(n,a,u)}return n}(t,St(t))}(s):mt(s)&&!gt(s)||(y=function(t){return\"function\"!=typeof t.constructor||ct(t)?{}:G(z(t))}(c))):g=!1}g&&(a.set(c,y),i(y,c,r,o,a),a.delete(c)),Q(t,n,y)}}(t,e,a,n,it,r,i);else{var s=r?r(lt(t,a),o,a+\"\",t,e,i):void 0;void 0===s&&(s=o),Q(t,a,s)}},St)}var ot=F?function(t,e){return F(t,\"toString\",{configurable:!0,enumerable:!1,value:(n=e,function(){return n}),writable:!0});var n}:Ot;function at(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function ut(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!mt(t)||function(t){return!!x&&x in t}(t))&&(gt(t)?E:s).test(function(t){if(null!=t){try{return P.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(n)?n:void 0}function st(t,e){var n=typeof t;return!!(e=e??i)&&(\"number\"==n||\"symbol\"!=n&&c.test(t))&&t>-1&&t%1==0&&t<e}function ct(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||O)}function lt(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var ft=function(t){var e=0,n=0;return function(){var r=V(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ot);function ht(t,e){return t===e||t!=t&&e!=e}var pt=rt(function(){return arguments}())?rt:function(t){return bt(t)&&I.call(t,\"callee\")&&!D.call(t,\"callee\")},dt=Array.isArray;function vt(t){return null!=t&&_t(t.length)&&!gt(t)}var yt=q||function(){return!1};function gt(t){if(!mt(t))return!1;var e=nt(t);return e==a||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function _t(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function mt(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=S?function(t){return function(e){return t(e)}}(S):function(t){return bt(t)&&_t(t.length)&&!!l[nt(t)]};function St(t){return vt(t)?function(t,e){var n=dt(t),r=!n&&pt(t),i=!n&&!r&&yt(t),o=!n&&!r&&!i&&wt(t),a=n||r||i||o,u=a?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],s=u.length;for(var c in t)!e&&!I.call(t,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||st(c,s))||u.push(c);return u}(t,!0):function(t){if(!mt(t))return function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}(t);var e=ct(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&I.call(t,r))&&n.push(r);return n}(t)}var Ct,At=(Ct=function(t,e,n){it(t,e,n)},function(t,e){return ft(function(t,e,n){return e=W(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=W(r.length-e,0),a=Array(o);++i<o;)a[i]=r[e+i];i=-1;for(var u=Array(e+1);++i<e;)u[i]=r[i];return u[e]=n(a),function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}(t,this,u)}}(t,e,Ot),t+\"\")}(function(t,e){var n=-1,r=e.length,i=r>1?e[r-1]:void 0,o=r>2?e[2]:void 0;for(i=Ct.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,e,n){if(!mt(n))return!1;var r=typeof e;return!!(\"number\"==r?vt(n)&&st(e,n.length):\"string\"==r&&e in n)&&ht(n[e],t)}(e[0],e[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++n<r;){var a=e[n];a&&Ct(t,a,n)}return t}));function Ot(t){return t}t.exports=At},9440(t,e,n){t=n.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",u=32,s=128,c=1/0,l=9007199254740991,f=NaN,h=4294967295,p=[[\"ary\",s],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",u],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",v=\"[object Array]\",y=\"[object Boolean]\",g=\"[object Date]\",_=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",S=\"[object Number]\",C=\"[object Object]\",A=\"[object Promise]\",O=\"[object RegExp]\",k=\"[object Set]\",P=\"[object String]\",I=\"[object Symbol]\",x=\"[object WeakMap]\",j=\"[object ArrayBuffer]\",T=\"[object DataView]\",E=\"[object Float32Array]\",M=\"[object Float64Array]\",N=\"[object Int8Array]\",R=\"[object Int16Array]\",z=\"[object Int32Array]\",L=\"[object Uint8Array]\",D=\"[object Uint8ClampedArray]\",B=\"[object Uint16Array]\",U=\"[object Uint32Array]\",F=/\\b__p \\+= '';/g,q=/\\b(__p \\+=) '' \\+/g,W=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,V=/&(?:amp|lt|gt|quot|#39);/g,$=/[&<>\"']/g,H=RegExp(V.source),G=RegExp($.source),K=/<%-([\\s\\S]+?)%>/g,X=/<%([\\s\\S]+?)%>/g,Z=/<%=([\\s\\S]+?)%>/g,Y=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,J=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,et=RegExp(tt.source),nt=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,at=/,? & /,ut=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,st=/[()=,{}\\[\\]\\/\\s]/,ct=/\\\\(\\\\)?/g,lt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,ft=/\\w*$/,ht=/^[-+]0x[0-9a-f]+$/i,pt=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,vt=/^0o[0-7]+$/i,yt=/^(?:0|[1-9]\\d*)$/,gt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,_t=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",St=\"\\\\u2700-\\\\u27bf\",Ct=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",At=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ot=\"\\\\ufe0e\\\\ufe0f\",kt=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Pt=\"[\"+bt+\"]\",It=\"[\"+kt+\"]\",xt=\"[\"+wt+\"]\",jt=\"\\\\d+\",Tt=\"[\"+St+\"]\",Et=\"[\"+Ct+\"]\",Mt=\"[^\"+bt+kt+jt+St+Ct+At+\"]\",Nt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Rt=\"[^\"+bt+\"]\",zt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Lt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Dt=\"[\"+At+\"]\",Bt=\"\\\\u200d\",Ut=\"(?:\"+Et+\"|\"+Mt+\")\",Ft=\"(?:\"+Dt+\"|\"+Mt+\")\",qt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Wt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Vt=\"(?:\"+xt+\"|\"+Nt+\")?\",$t=\"[\"+Ot+\"]?\",Ht=$t+Vt+\"(?:\"+Bt+\"(?:\"+[Rt,zt,Lt].join(\"|\")+\")\"+$t+Vt+\")*\",Gt=\"(?:\"+[Tt,zt,Lt].join(\"|\")+\")\"+Ht,Kt=\"(?:\"+[Rt+xt+\"?\",xt,zt,Lt,Pt].join(\"|\")+\")\",Xt=RegExp(\"['’]\",\"g\"),Zt=RegExp(xt,\"g\"),Yt=RegExp(Nt+\"(?=\"+Nt+\")|\"+Kt+Ht,\"g\"),Qt=RegExp([Dt+\"?\"+Et+\"+\"+qt+\"(?=\"+[It,Dt,\"$\"].join(\"|\")+\")\",Ft+\"+\"+Wt+\"(?=\"+[It,Dt+Ut,\"$\"].join(\"|\")+\")\",Dt+\"?\"+Ut+\"+\"+qt,Dt+\"+\"+Wt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jt,Gt].join(\"|\"),\"g\"),Jt=RegExp(\"[\"+Bt+bt+wt+Ot+\"]\"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ne=-1,re={};re[E]=re[M]=re[N]=re[R]=re[z]=re[L]=re[D]=re[B]=re[U]=!0,re[d]=re[v]=re[j]=re[y]=re[T]=re[g]=re[_]=re[m]=re[w]=re[S]=re[C]=re[O]=re[k]=re[P]=re[x]=!1;var ie={};ie[d]=ie[v]=ie[j]=ie[T]=ie[y]=ie[g]=ie[E]=ie[M]=ie[N]=ie[R]=ie[z]=ie[w]=ie[S]=ie[C]=ie[O]=ie[k]=ie[P]=ie[I]=ie[L]=ie[D]=ie[B]=ie[U]=!0,ie[_]=ie[m]=ie[x]=!1;var oe={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ae=parseFloat,ue=parseInt,se=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,ce=\"object\"==typeof self&&self&&self.Object===Object&&self,le=se||ce||Function(\"return this\")(),fe=e&&!e.nodeType&&e,he=fe&&t&&!t.nodeType&&t,pe=he&&he.exports===fe,de=pe&&se.process,ve=function(){try{return he&&he.require&&he.require(\"util\").types||de&&de.binding&&de.binding(\"util\")}catch(t){}}(),ye=ve&&ve.isArrayBuffer,ge=ve&&ve.isDate,_e=ve&&ve.isMap,me=ve&&ve.isRegExp,be=ve&&ve.isSet,we=ve&&ve.isTypedArray;function Se(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Ce(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i];e(r,a,n(a),t)}return r}function Ae(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function Oe(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function ke(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function Pe(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var a=t[n];e(a,n,t)&&(o[i++]=a)}return o}function Ie(t,e){return!(null==t||!t.length)&&De(t,e,0)>-1}function xe(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function je(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function Te(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function Ee(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function Me(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function Ne(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var Re=qe(\"length\");function ze(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function Le(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function De(t,e,n){return e==e?function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):Le(t,Ue,n)}function Be(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function Ue(t){return t!=t}function Fe(t,e){var n=null==t?0:t.length;return n?$e(t,e)/n:f}function qe(t){return function(e){return null==e?r:e[t]}}function We(t){return function(e){return null==t?r:t[e]}}function Ve(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function $e(t,e){for(var n,i=-1,o=t.length;++i<o;){var a=e(t[i]);a!==r&&(n=n===r?a:n+a)}return n}function He(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function Ge(t){return t?t.slice(0,fn(t)+1).replace(nt,\"\"):t}function Ke(t){return function(e){return t(e)}}function Xe(t,e){return je(e,function(e){return t[e]})}function Ze(t,e){return t.has(e)}function Ye(t,e){for(var n=-1,r=t.length;++n<r&&De(e,t[n],0)>-1;);return n}function Qe(t,e){for(var n=t.length;n--&&De(e,t[n],0)>-1;);return n}var Je=We({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tn=We({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function en(t){return\"\\\\\"+oe[t]}function nn(t){return Jt.test(t)}function rn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function on(t,e){return function(n){return t(e(n))}}function an(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n];u!==e&&u!==a||(t[n]=a,o[i++]=n)}return o}function un(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function sn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function cn(t){return nn(t)?function(t){for(var e=Yt.lastIndex=0;Yt.test(t);)++e;return e}(t):Re(t)}function ln(t){return nn(t)?function(t){return t.match(Yt)||[]}(t):function(t){return t.split(\"\")}(t)}function fn(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}var hn=We({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pn=function t(e){var n,rt=(e=null==e?le:pn.defaults(le.Object(),e,pn.pick(le,ee))).Array,bt=e.Date,wt=e.Error,St=e.Function,Ct=e.Math,At=e.Object,Ot=e.RegExp,kt=e.String,Pt=e.TypeError,It=rt.prototype,xt=St.prototype,jt=At.prototype,Tt=e[\"__core-js_shared__\"],Et=xt.toString,Mt=jt.hasOwnProperty,Nt=0,Rt=(n=/[^.]+$/.exec(Tt&&Tt.keys&&Tt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",zt=jt.toString,Lt=Et.call(At),Dt=le._,Bt=Ot(\"^\"+Et.call(Mt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Ut=pe?e.Buffer:r,Ft=e.Symbol,qt=e.Uint8Array,Wt=Ut?Ut.allocUnsafe:r,Vt=on(At.getPrototypeOf,At),$t=At.create,Ht=jt.propertyIsEnumerable,Gt=It.splice,Kt=Ft?Ft.isConcatSpreadable:r,Yt=Ft?Ft.iterator:r,Jt=Ft?Ft.toStringTag:r,oe=function(){try{var t=so(At,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),se=e.clearTimeout!==le.clearTimeout&&e.clearTimeout,ce=bt&&bt.now!==le.Date.now&&bt.now,fe=e.setTimeout!==le.setTimeout&&e.setTimeout,he=Ct.ceil,de=Ct.floor,ve=At.getOwnPropertySymbols,Re=Ut?Ut.isBuffer:r,We=e.isFinite,dn=It.join,vn=on(At.keys,At),yn=Ct.max,gn=Ct.min,_n=bt.now,mn=e.parseInt,bn=Ct.random,wn=It.reverse,Sn=so(e,\"DataView\"),Cn=so(e,\"Map\"),An=so(e,\"Promise\"),On=so(e,\"Set\"),kn=so(e,\"WeakMap\"),Pn=so(At,\"create\"),In=kn&&new kn,xn={},jn=Lo(Sn),Tn=Lo(Cn),En=Lo(An),Mn=Lo(On),Nn=Lo(kn),Rn=Ft?Ft.prototype:r,zn=Rn?Rn.valueOf:r,Ln=Rn?Rn.toString:r;function Dn(t){if(tu(t)&&!Wa(t)&&!(t instanceof qn)){if(t instanceof Fn)return t;if(Mt.call(t,\"__wrapped__\"))return Do(t)}return new Fn(t)}var Bn=function(){function t(){}return function(e){if(!Ja(e))return{};if($t)return $t(e);t.prototype=e;var n=new t;return t.prototype=r,n}}();function Un(){}function Fn(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=r}function qn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function Wn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Vn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function $n(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Hn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new $n;++e<n;)this.add(t[e])}function Gn(t){var e=this.__data__=new Vn(t);this.size=e.size}function Kn(t,e){var n=Wa(t),r=!n&&qa(t),i=!n&&!r&&Ga(t),o=!n&&!r&&!i&&su(t),a=n||r||i||o,u=a?He(t.length,kt):[],s=u.length;for(var c in t)!e&&!Mt.call(t,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||yo(c,s))||u.push(c);return u}function Xn(t){var e=t.length;return e?t[$r(0,e-1)]:r}function Zn(t,e){return Eo(ki(t),or(e,0,t.length))}function Yn(t){return Eo(ki(t))}function Qn(t,e,n){(n!==r&&!Ba(t[e],n)||n===r&&!(e in t))&&rr(t,e,n)}function Jn(t,e,n){var i=t[e];Mt.call(t,e)&&Ba(i,n)&&(n!==r||e in t)||rr(t,e,n)}function tr(t,e){for(var n=t.length;n--;)if(Ba(t[n][0],e))return n;return-1}function er(t,e,n,r){return lr(t,function(t,i,o){e(r,t,n(t),o)}),r}function nr(t,e){return t&&Pi(e,ju(e),t)}function rr(t,e,n){\"__proto__\"==e&&oe?oe(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function ir(t,e){for(var n=-1,i=e.length,o=rt(i),a=null==t;++n<i;)o[n]=a?r:Ou(t,e[n]);return o}function or(t,e,n){return t==t&&(n!==r&&(t=t<=n?t:n),e!==r&&(t=t>=e?t:e)),t}function ar(t,e,n,i,o,a){var u,s=1&e,c=2&e,l=4&e;if(n&&(u=o?n(t,i,o,a):n(t)),u!==r)return u;if(!Ja(t))return t;var f=Wa(t);if(f){if(u=function(t){var e=t.length,n=new t.constructor(e);return e&&\"string\"==typeof t[0]&&Mt.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}(t),!s)return ki(t,u)}else{var h=fo(t),p=h==m||h==b;if(Ga(t))return bi(t,s);if(h==C||h==d||p&&!o){if(u=c||p?{}:po(t),!s)return c?function(t,e){return Pi(t,lo(t),e)}(t,function(t,e){return t&&Pi(e,Tu(e),t)}(u,t)):function(t,e){return Pi(t,co(t),e)}(t,nr(u,t))}else{if(!ie[h])return o?t:{};u=function(t,e,n){var r,i=t.constructor;switch(e){case j:return wi(t);case y:case g:return new i(+t);case T:return function(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case E:case M:case N:case R:case z:case L:case D:case B:case U:return Si(t,n);case w:return new i;case S:case P:return new i(t);case O:return function(t){var e=new t.constructor(t.source,ft.exec(t));return e.lastIndex=t.lastIndex,e}(t);case k:return new i;case I:return r=t,zn?At(zn.call(r)):{}}}(t,h,s)}}a||(a=new Gn);var v=a.get(t);if(v)return v;a.set(t,u),ou(t)?t.forEach(function(r){u.add(ar(r,e,n,r,t,a))}):eu(t)&&t.forEach(function(r,i){u.set(i,ar(r,e,n,i,t,a))});var _=f?r:(l?c?eo:to:c?Tu:ju)(t);return Ae(_||t,function(r,i){_&&(r=t[i=r]),Jn(u,i,ar(r,e,n,i,t,a))}),u}function ur(t,e,n){var i=n.length;if(null==t)return!i;for(t=At(t);i--;){var o=n[i],a=e[o],u=t[o];if(u===r&&!(o in t)||!a(u))return!1}return!0}function sr(t,e,n){if(\"function\"!=typeof t)throw new Pt(i);return Io(function(){t.apply(r,n)},e)}function cr(t,e,n,r){var i=-1,o=Ie,a=!0,u=t.length,s=[],c=e.length;if(!u)return s;n&&(e=je(e,Ke(n))),r?(o=xe,a=!1):e.length>=200&&(o=Ze,a=!1,e=new Hn(e));t:for(;++i<u;){var l=t[i],f=null==n?l:n(l);if(l=r||0!==l?l:0,a&&f==f){for(var h=c;h--;)if(e[h]===f)continue t;s.push(l)}else o(e,f,r)||s.push(l)}return s}Dn.templateSettings={escape:K,evaluate:X,interpolate:Z,variable:\"\",imports:{_:Dn}},Dn.prototype=Un.prototype,Dn.prototype.constructor=Dn,Fn.prototype=Bn(Un.prototype),Fn.prototype.constructor=Fn,qn.prototype=Bn(Un.prototype),qn.prototype.constructor=qn,Wn.prototype.clear=function(){this.__data__=Pn?Pn(null):{},this.size=0},Wn.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Wn.prototype.get=function(t){var e=this.__data__;if(Pn){var n=e[t];return n===o?r:n}return Mt.call(e,t)?e[t]:r},Wn.prototype.has=function(t){var e=this.__data__;return Pn?e[t]!==r:Mt.call(e,t)},Wn.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=Pn&&e===r?o:e,this},Vn.prototype.clear=function(){this.__data__=[],this.size=0},Vn.prototype.delete=function(t){var e=this.__data__,n=tr(e,t);return!(n<0||(n==e.length-1?e.pop():Gt.call(e,n,1),--this.size,0))},Vn.prototype.get=function(t){var e=this.__data__,n=tr(e,t);return n<0?r:e[n][1]},Vn.prototype.has=function(t){return tr(this.__data__,t)>-1},Vn.prototype.set=function(t,e){var n=this.__data__,r=tr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},$n.prototype.clear=function(){this.size=0,this.__data__={hash:new Wn,map:new(Cn||Vn),string:new Wn}},$n.prototype.delete=function(t){var e=ao(this,t).delete(t);return this.size-=e?1:0,e},$n.prototype.get=function(t){return ao(this,t).get(t)},$n.prototype.has=function(t){return ao(this,t).has(t)},$n.prototype.set=function(t,e){var n=ao(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Hn.prototype.add=Hn.prototype.push=function(t){return this.__data__.set(t,o),this},Hn.prototype.has=function(t){return this.__data__.has(t)},Gn.prototype.clear=function(){this.__data__=new Vn,this.size=0},Gn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Gn.prototype.get=function(t){return this.__data__.get(t)},Gn.prototype.has=function(t){return this.__data__.has(t)},Gn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Vn){var r=n.__data__;if(!Cn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new $n(r)}return n.set(t,e),this.size=n.size,this};var lr=ji(_r),fr=ji(mr,!0);function hr(t,e){var n=!0;return lr(t,function(t,r,i){return n=!!e(t,r,i)}),n}function pr(t,e,n){for(var i=-1,o=t.length;++i<o;){var a=t[i],u=e(a);if(null!=u&&(s===r?u==u&&!uu(u):n(u,s)))var s=u,c=a}return c}function dr(t,e){var n=[];return lr(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function vr(t,e,n,r,i){var o=-1,a=t.length;for(n||(n=vo),i||(i=[]);++o<a;){var u=t[o];e>0&&n(u)?e>1?vr(u,e-1,n,r,i):Te(i,u):r||(i[i.length]=u)}return i}var yr=Ti(),gr=Ti(!0);function _r(t,e){return t&&yr(t,e,ju)}function mr(t,e){return t&&gr(t,e,ju)}function br(t,e){return Pe(e,function(e){return Za(t[e])})}function wr(t,e){for(var n=0,i=(e=yi(e,t)).length;null!=t&&n<i;)t=t[zo(e[n++])];return n&&n==i?t:r}function Sr(t,e,n){var r=e(t);return Wa(t)?r:Te(r,n(t))}function Cr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Jt&&Jt in At(t)?function(t){var e=Mt.call(t,Jt),n=t[Jt];try{t[Jt]=r;var i=!0}catch(t){}var o=zt.call(t);return i&&(e?t[Jt]=n:delete t[Jt]),o}(t):function(t){return zt.call(t)}(t)}function Ar(t,e){return t>e}function Or(t,e){return null!=t&&Mt.call(t,e)}function kr(t,e){return null!=t&&e in At(t)}function Pr(t,e,n){for(var i=n?xe:Ie,o=t[0].length,a=t.length,u=a,s=rt(a),c=1/0,l=[];u--;){var f=t[u];u&&e&&(f=je(f,Ke(e))),c=gn(f.length,c),s[u]=!n&&(e||o>=120&&f.length>=120)?new Hn(u&&f):r}f=t[0];var h=-1,p=s[0];t:for(;++h<o&&l.length<c;){var d=f[h],v=e?e(d):d;if(d=n||0!==d?d:0,!(p?Ze(p,v):i(l,v,n))){for(u=a;--u;){var y=s[u];if(!(y?Ze(y,v):i(t[u],v,n)))continue t}p&&p.push(v),l.push(d)}}return l}function Ir(t,e,n){var i=null==(t=Oo(t,e=yi(e,t)))?t:t[zo(Xo(e))];return null==i?r:Se(i,t,n)}function xr(t){return tu(t)&&Cr(t)==d}function jr(t,e,n,i,o){return t===e||(null==t||null==e||!tu(t)&&!tu(e)?t!=t&&e!=e:function(t,e,n,i,o,a){var u=Wa(t),s=Wa(e),c=u?v:fo(t),l=s?v:fo(e),f=(c=c==d?C:c)==C,h=(l=l==d?C:l)==C,p=c==l;if(p&&Ga(t)){if(!Ga(e))return!1;u=!0,f=!1}if(p&&!f)return a||(a=new Gn),u||su(t)?Qi(t,e,n,i,o,a):function(t,e,n,r,i,o,a){switch(n){case T:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case j:return!(t.byteLength!=e.byteLength||!o(new qt(t),new qt(e)));case y:case g:case S:return Ba(+t,+e);case _:return t.name==e.name&&t.message==e.message;case O:case P:return t==e+\"\";case w:var u=rn;case k:var s=1&r;if(u||(u=un),t.size!=e.size&&!s)return!1;var c=a.get(t);if(c)return c==e;r|=2,a.set(t,e);var l=Qi(u(t),u(e),r,i,o,a);return a.delete(t),l;case I:if(zn)return zn.call(t)==zn.call(e)}return!1}(t,e,c,n,i,o,a);if(!(1&n)){var m=f&&Mt.call(t,\"__wrapped__\"),b=h&&Mt.call(e,\"__wrapped__\");if(m||b){var A=m?t.value():t,x=b?e.value():e;return a||(a=new Gn),o(A,x,n,i,a)}}return!!p&&(a||(a=new Gn),function(t,e,n,i,o,a){var u=1&n,s=to(t),c=s.length;if(c!=to(e).length&&!u)return!1;for(var l=c;l--;){var f=s[l];if(!(u?f in e:Mt.call(e,f)))return!1}var h=a.get(t),p=a.get(e);if(h&&p)return h==e&&p==t;var d=!0;a.set(t,e),a.set(e,t);for(var v=u;++l<c;){var y=t[f=s[l]],g=e[f];if(i)var _=u?i(g,y,f,e,t,a):i(y,g,f,t,e,a);if(!(_===r?y===g||o(y,g,n,i,a):_)){d=!1;break}v||(v=\"constructor\"==f)}if(d&&!v){var m=t.constructor,b=e.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return a.delete(t),a.delete(e),d}(t,e,n,i,o,a))}(t,e,n,i,jr,o))}function Tr(t,e,n,i){var o=n.length,a=o,u=!i;if(null==t)return!a;for(t=At(t);o--;){var s=n[o];if(u&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++o<a;){var c=(s=n[o])[0],l=t[c],f=s[1];if(u&&s[2]){if(l===r&&!(c in t))return!1}else{var h=new Gn;if(i)var p=i(l,f,c,t,e,h);if(!(p===r?jr(f,l,3,i,h):p))return!1}}return!0}function Er(t){return!(!Ja(t)||(e=t,Rt&&Rt in e))&&(Za(t)?Bt:dt).test(Lo(t));var e}function Mr(t){return\"function\"==typeof t?t:null==t?ns:\"object\"==typeof t?Wa(t)?Dr(t[0],t[1]):Lr(t):fs(t)}function Nr(t){if(!wo(t))return vn(t);var e=[];for(var n in At(t))Mt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function Rr(t,e){return t<e}function zr(t,e){var n=-1,r=$a(t)?rt(t.length):[];return lr(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Lr(t){var e=uo(t);return 1==e.length&&e[0][2]?Co(e[0][0],e[0][1]):function(n){return n===t||Tr(n,t,e)}}function Dr(t,e){return _o(t)&&So(e)?Co(zo(t),e):function(n){var i=Ou(n,t);return i===r&&i===e?ku(n,t):jr(e,i,3)}}function Br(t,e,n,i,o){t!==e&&yr(e,function(a,u){if(o||(o=new Gn),Ja(a))!function(t,e,n,i,o,a,u){var s=ko(t,n),c=ko(e,n),l=u.get(c);if(l)Qn(t,n,l);else{var f=a?a(s,c,n+\"\",t,e,u):r,h=f===r;if(h){var p=Wa(c),d=!p&&Ga(c),v=!p&&!d&&su(c);f=c,p||d||v?Wa(s)?f=s:Ha(s)?f=ki(s):d?(h=!1,f=bi(c,!0)):v?(h=!1,f=Si(c,!0)):f=[]:ru(c)||qa(c)?(f=s,qa(s)?f=yu(s):Ja(s)&&!Za(s)||(f=po(c))):h=!1}h&&(u.set(c,f),o(f,c,i,a,u),u.delete(c)),Qn(t,n,f)}}(t,e,u,n,Br,i,o);else{var s=i?i(ko(t,u),a,u+\"\",t,e,o):r;s===r&&(s=a),Qn(t,u,s)}},Tu)}function Ur(t,e){var n=t.length;if(n)return yo(e+=e<0?n:0,n)?t[e]:r}function Fr(t,e,n){e=e.length?je(e,function(t){return Wa(t)?function(e){return wr(e,1===t.length?t[0]:t)}:t}):[ns];var r=-1;e=je(e,Ke(oo()));var i=zr(t,function(t,n,i){var o=je(e,function(e){return e(t)});return{criteria:o,index:++r,value:t}});return function(t){var e=t.length;for(t.sort(function(t,e){return function(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,a=i.length,u=n.length;++r<a;){var s=Ci(i[r],o[r]);if(s)return r>=u?s:s*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)});e--;)t[e]=t[e].value;return t}(i)}function qr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var a=e[r],u=wr(t,a);n(u,a)&&Zr(o,yi(a,t),u)}return o}function Wr(t,e,n,r){var i=r?Be:De,o=-1,a=e.length,u=t;for(t===e&&(e=ki(e)),n&&(u=je(t,Ke(n)));++o<a;)for(var s=0,c=e[o],l=n?n(c):c;(s=i(u,l,s,r))>-1;)u!==t&&Gt.call(u,s,1),Gt.call(t,s,1);return t}function Vr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;yo(i)?Gt.call(t,i,1):si(t,i)}}return t}function $r(t,e){return t+de(bn()*(e-t+1))}function Hr(t,e){var n=\"\";if(!t||e<1||e>l)return n;do{e%2&&(n+=t),(e=de(e/2))&&(t+=t)}while(e);return n}function Gr(t,e){return xo(Ao(t,e,ns),t+\"\")}function Kr(t){return Xn(Bu(t))}function Xr(t,e){var n=Bu(t);return Eo(n,or(e,0,n.length))}function Zr(t,e,n,i){if(!Ja(t))return t;for(var o=-1,a=(e=yi(e,t)).length,u=a-1,s=t;null!=s&&++o<a;){var c=zo(e[o]),l=n;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return t;if(o!=u){var f=s[c];(l=i?i(f,c,s):r)===r&&(l=Ja(f)?f:yo(e[o+1])?[]:{})}Jn(s,c,l),s=s[c]}return t}var Yr=In?function(t,e){return In.set(t,e),t}:ns,Qr=oe?function(t,e){return oe(t,\"toString\",{configurable:!0,enumerable:!1,value:Ju(e),writable:!0})}:ns;function Jr(t){return Eo(Bu(t))}function ti(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+e];return o}function ei(t,e){var n;return lr(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ni(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;r<i;){var o=r+i>>>1,a=t[o];null!==a&&!uu(a)&&(n?a<=e:a<e)?r=o+1:i=o}return i}return ri(t,e,ns,n)}function ri(t,e,n,i){var o=0,a=null==t?0:t.length;if(0===a)return 0;for(var u=(e=n(e))!=e,s=null===e,c=uu(e),l=e===r;o<a;){var f=de((o+a)/2),h=n(t[f]),p=h!==r,d=null===h,v=h==h,y=uu(h);if(u)var g=i||v;else g=l?v&&(i||p):s?v&&p&&(i||!d):c?v&&p&&!d&&(i||!y):!d&&!y&&(i?h<=e:h<e);g?o=f+1:a=f}return gn(a,4294967294)}function ii(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n],u=e?e(a):a;if(!n||!Ba(u,s)){var s=u;o[i++]=0===a?0:a}}return o}function oi(t){return\"number\"==typeof t?t:uu(t)?f:+t}function ai(t){if(\"string\"==typeof t)return t;if(Wa(t))return je(t,ai)+\"\";if(uu(t))return Ln?Ln.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function ui(t,e,n){var r=-1,i=Ie,o=t.length,a=!0,u=[],s=u;if(n)a=!1,i=xe;else if(o>=200){var c=e?null:Hi(t);if(c)return un(c);a=!1,i=Ze,s=new Hn}else s=e?[]:u;t:for(;++r<o;){var l=t[r],f=e?e(l):l;if(l=n||0!==l?l:0,a&&f==f){for(var h=s.length;h--;)if(s[h]===f)continue t;e&&s.push(f),u.push(l)}else i(s,f,n)||(s!==u&&s.push(f),u.push(l))}return u}function si(t,e){var n=-1,r=(e=yi(e,t)).length;if(!r)return!0;for(;++n<r;){var i=zo(e[n]);if(\"__proto__\"===i&&!Mt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Oo(t,e);return null==o||delete o[zo(Xo(e))]}function ci(t,e,n,r){return Zr(t,e,n(wr(t,e)),r)}function li(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function fi(t,e){var n=t;return n instanceof qn&&(n=n.value()),Ee(e,function(t,e){return e.func.apply(e.thisArg,Te([t],e.args))},n)}function hi(t,e,n){var r=t.length;if(r<2)return r?ui(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var a=t[i],u=-1;++u<r;)u!=i&&(o[i]=cr(o[i]||a,t[u],e,n));return ui(vr(o,1),e,n)}function pi(t,e,n){for(var i=-1,o=t.length,a=e.length,u={};++i<o;){var s=i<a?e[i]:r;n(u,t[i],s)}return u}function di(t){return Ha(t)?t:[]}function vi(t){return\"function\"==typeof t?t:ns}function yi(t,e){return Wa(t)?t:_o(t,e)?[t]:Ro(gu(t))}var gi=Gr;function _i(t,e,n){var i=t.length;return n=n===r?i:n,!e&&n>=i?t:ti(t,e,n)}var mi=se||function(t){return le.clearTimeout(t)};function bi(t,e){if(e)return t.slice();var n=t.length,r=Wt?Wt(n):new t.constructor(n);return t.copy(r),r}function wi(t){var e=new t.constructor(t.byteLength);return new qt(e).set(new qt(t)),e}function Si(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Ci(t,e){if(t!==e){var n=t!==r,i=null===t,o=t==t,a=uu(t),u=e!==r,s=null===e,c=e==e,l=uu(e);if(!s&&!l&&!a&&t>e||a&&u&&c&&!s&&!l||i&&u&&c||!n&&c||!o)return 1;if(!i&&!a&&!l&&t<e||l&&n&&o&&!i&&!a||s&&n&&o||!u&&o||!c)return-1}return 0}function Ai(t,e,n,r){for(var i=-1,o=t.length,a=n.length,u=-1,s=e.length,c=yn(o-a,0),l=rt(s+c),f=!r;++u<s;)l[u]=e[u];for(;++i<a;)(f||i<o)&&(l[n[i]]=t[i]);for(;c--;)l[u++]=t[i++];return l}function Oi(t,e,n,r){for(var i=-1,o=t.length,a=-1,u=n.length,s=-1,c=e.length,l=yn(o-u,0),f=rt(l+c),h=!r;++i<l;)f[i]=t[i];for(var p=i;++s<c;)f[p+s]=e[s];for(;++a<u;)(h||i<o)&&(f[p+n[a]]=t[i++]);return f}function ki(t,e){var n=-1,r=t.length;for(e||(e=rt(r));++n<r;)e[n]=t[n];return e}function Pi(t,e,n,i){var o=!n;n||(n={});for(var a=-1,u=e.length;++a<u;){var s=e[a],c=i?i(n[s],t[s],s,n,t):r;c===r&&(c=t[s]),o?rr(n,s,c):Jn(n,s,c)}return n}function Ii(t,e){return function(n,r){var i=Wa(n)?Ce:er,o=e?e():{};return i(n,t,oo(r,2),o)}}function xi(t){return Gr(function(e,n){var i=-1,o=n.length,a=o>1?n[o-1]:r,u=o>2?n[2]:r;for(a=t.length>3&&\"function\"==typeof a?(o--,a):r,u&&go(n[0],n[1],u)&&(a=o<3?r:a,o=1),e=At(e);++i<o;){var s=n[i];s&&t(e,s,i,a)}return e})}function ji(t,e){return function(n,r){if(null==n)return n;if(!$a(n))return t(n,r);for(var i=n.length,o=e?i:-1,a=At(n);(e?o--:++o<i)&&!1!==r(a[o],o,a););return n}}function Ti(t){return function(e,n,r){for(var i=-1,o=At(e),a=r(e),u=a.length;u--;){var s=a[t?u:++i];if(!1===n(o[s],s,o))break}return e}}function Ei(t){return function(e){var n=nn(e=gu(e))?ln(e):r,i=n?n[0]:e.charAt(0),o=n?_i(n,1).join(\"\"):e.slice(1);return i[t]()+o}}function Mi(t){return function(e){return Ee(Zu(qu(e).replace(Xt,\"\")),t,\"\")}}function Ni(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Bn(t.prototype),r=t.apply(n,e);return Ja(r)?r:n}}function Ri(t){return function(e,n,i){var o=At(e);if(!$a(e)){var a=oo(n,3);e=ju(e),n=function(t){return a(o[t],t,o)}}var u=t(e,n,i);return u>-1?o[a?e[u]:u]:r}}function zi(t){return Ji(function(e){var n=e.length,o=n,a=Fn.prototype.thru;for(t&&e.reverse();o--;){var u=e[o];if(\"function\"!=typeof u)throw new Pt(i);if(a&&!s&&\"wrapper\"==ro(u))var s=new Fn([],!0)}for(o=s?o:n;++o<n;){var c=ro(u=e[o]),l=\"wrapper\"==c?no(u):r;s=l&&mo(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?s[ro(l[0])].apply(s,l[3]):1==u.length&&mo(u)?s[c]():s.thru(u)}return function(){var t=arguments,r=t[0];if(s&&1==t.length&&Wa(r))return s.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Li(t,e,n,i,o,a,u,c,l,f){var h=e&s,p=1&e,d=2&e,v=24&e,y=512&e,g=d?r:Ni(t);return function s(){for(var _=arguments.length,m=rt(_),b=_;b--;)m[b]=arguments[b];if(v)var w=io(s),S=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(m,w);if(i&&(m=Ai(m,i,o,v)),a&&(m=Oi(m,a,u,v)),_-=S,v&&_<f){var C=an(m,w);return Vi(t,e,Li,s.placeholder,n,m,C,c,l,f-_)}var A=p?n:this,O=d?A[t]:t;return _=m.length,c?m=function(t,e){for(var n=t.length,i=gn(e.length,n),o=ki(t);i--;){var a=e[i];t[i]=yo(a,n)?o[a]:r}return t}(m,c):y&&_>1&&m.reverse(),h&&l<_&&(m.length=l),this&&this!==le&&this instanceof s&&(O=g||Ni(O)),O.apply(A,m)}}function Di(t,e){return function(n,r){return function(t,e,n,r){return _r(t,function(t,i,o){e(r,n(t),i,o)}),r}(n,t,e(r),{})}}function Bi(t,e){return function(n,i){var o;if(n===r&&i===r)return e;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ai(n),i=ai(i)):(n=oi(n),i=oi(i)),o=t(n,i)}return o}}function Ui(t){return Ji(function(e){return e=je(e,Ke(oo())),Gr(function(n){var r=this;return t(e,function(t){return Se(t,r,n)})})})}function Fi(t,e){var n=(e=e===r?\" \":ai(e)).length;if(n<2)return n?Hr(e,t):e;var i=Hr(e,he(t/cn(e)));return nn(e)?_i(ln(i),0,t).join(\"\"):i.slice(0,t)}function qi(t){return function(e,n,i){return i&&\"number\"!=typeof i&&go(e,n,i)&&(n=i=r),e=hu(e),n===r?(n=e,e=0):n=hu(n),function(t,e,n,r){for(var i=-1,o=yn(he((e-t)/(n||1)),0),a=rt(o);o--;)a[r?o:++i]=t,t+=n;return a}(e,n,i=i===r?e<n?1:-1:hu(i),t)}}function Wi(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=vu(e),n=vu(n)),t(e,n)}}function Vi(t,e,n,i,o,a,s,c,l,f){var h=8&e;e|=h?u:64,4&(e&=~(h?64:u))||(e&=-4);var p=[t,e,o,h?a:r,h?s:r,h?r:a,h?r:s,c,l,f],d=n.apply(r,p);return mo(t)&&Po(d,p),d.placeholder=i,jo(d,t,e)}function $i(t){var e=Ct[t];return function(t,n){if(t=vu(t),(n=null==n?0:gn(pu(n),292))&&We(t)){var r=(gu(t)+\"e\").split(\"e\");return+((r=(gu(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var Hi=On&&1/un(new On([,-0]))[1]==c?function(t){return new On(t)}:us;function Gi(t){return function(e){var n=fo(e);return n==w?rn(e):n==k?sn(e):function(t,e){return je(e,function(e){return[e,t[e]]})}(e,t(e))}}function Ki(t,e,n,o,c,l,f,h){var p=2&e;if(!p&&\"function\"!=typeof t)throw new Pt(i);var d=o?o.length:0;if(d||(e&=-97,o=c=r),f=f===r?f:yn(pu(f),0),h=h===r?h:pu(h),d-=c?c.length:0,64&e){var v=o,y=c;o=c=r}var g=p?r:no(t),_=[t,e,n,o,c,v,y,l,f,h];if(g&&function(t,e){var n=t[1],r=e[1],i=n|r,o=i<131,u=r==s&&8==n||r==s&&256==n&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!o&&!u)return t;1&r&&(t[2]=e[2],i|=1&n?0:4);var c=e[3];if(c){var l=t[3];t[3]=l?Ai(l,c,e[4]):c,t[4]=l?an(t[3],a):e[4]}(c=e[5])&&(l=t[5],t[5]=l?Oi(l,c,e[6]):c,t[6]=l?an(t[5],a):e[6]),(c=e[7])&&(t[7]=c),r&s&&(t[8]=null==t[8]?e[8]:gn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i}(_,g),t=_[0],e=_[1],n=_[2],o=_[3],c=_[4],!(h=_[9]=_[9]===r?p?0:t.length:yn(_[9]-d,0))&&24&e&&(e&=-25),e&&1!=e)m=8==e||16==e?function(t,e,n){var i=Ni(t);return function o(){for(var a=arguments.length,u=rt(a),s=a,c=io(o);s--;)u[s]=arguments[s];var l=a<3&&u[0]!==c&&u[a-1]!==c?[]:an(u,c);return(a-=l.length)<n?Vi(t,e,Li,o.placeholder,r,u,l,r,r,n-a):Se(this&&this!==le&&this instanceof o?i:t,this,u)}}(t,e,h):e!=u&&33!=e||c.length?Li.apply(r,_):function(t,e,n,r){var i=1&e,o=Ni(t);return function e(){for(var a=-1,u=arguments.length,s=-1,c=r.length,l=rt(c+u),f=this&&this!==le&&this instanceof e?o:t;++s<c;)l[s]=r[s];for(;u--;)l[s++]=arguments[++a];return Se(f,i?n:this,l)}}(t,e,n,o);else var m=function(t,e,n){var r=1&e,i=Ni(t);return function e(){return(this&&this!==le&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return jo((g?Yr:Po)(m,_),t,e)}function Xi(t,e,n,i){return t===r||Ba(t,jt[n])&&!Mt.call(i,n)?e:t}function Zi(t,e,n,i,o,a){return Ja(t)&&Ja(e)&&(a.set(e,t),Br(t,e,r,Zi,a),a.delete(e)),t}function Yi(t){return ru(t)?r:t}function Qi(t,e,n,i,o,a){var u=1&n,s=t.length,c=e.length;if(s!=c&&!(u&&c>s))return!1;var l=a.get(t),f=a.get(e);if(l&&f)return l==e&&f==t;var h=-1,p=!0,d=2&n?new Hn:r;for(a.set(t,e),a.set(e,t);++h<s;){var v=t[h],y=e[h];if(i)var g=u?i(y,v,h,e,t,a):i(v,y,h,t,e,a);if(g!==r){if(g)continue;p=!1;break}if(d){if(!Ne(e,function(t,e){if(!Ze(d,e)&&(v===t||o(v,t,n,i,a)))return d.push(e)})){p=!1;break}}else if(v!==y&&!o(v,y,n,i,a)){p=!1;break}}return a.delete(t),a.delete(e),p}function Ji(t){return xo(Ao(t,r,Vo),t+\"\")}function to(t){return Sr(t,ju,co)}function eo(t){return Sr(t,Tu,lo)}var no=In?function(t){return In.get(t)}:us;function ro(t){for(var e=t.name+\"\",n=xn[e],r=Mt.call(xn,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function io(t){return(Mt.call(Dn,\"placeholder\")?Dn:t).placeholder}function oo(){var t=Dn.iteratee||rs;return t=t===rs?Mr:t,arguments.length?t(arguments[0],arguments[1]):t}function ao(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function uo(t){for(var e=ju(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,So(i)]}return e}function so(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return Er(n)?n:r}var co=ve?function(t){return null==t?[]:(t=At(t),Pe(ve(t),function(e){return Ht.call(t,e)}))}:ds,lo=ve?function(t){for(var e=[];t;)Te(e,co(t)),t=Vt(t);return e}:ds,fo=Cr;function ho(t,e,n){for(var r=-1,i=(e=yi(e,t)).length,o=!1;++r<i;){var a=zo(e[r]);if(!(o=null!=t&&n(t,a)))break;t=t[a]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Qa(i)&&yo(a,i)&&(Wa(t)||qa(t))}function po(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Bn(Vt(t))}function vo(t){return Wa(t)||qa(t)||!!(Kt&&t&&t[Kt])}function yo(t,e){var n=typeof t;return!!(e=e??l)&&(\"number\"==n||\"symbol\"!=n&&yt.test(t))&&t>-1&&t%1==0&&t<e}function go(t,e,n){if(!Ja(n))return!1;var r=typeof e;return!!(\"number\"==r?$a(n)&&yo(e,n.length):\"string\"==r&&e in n)&&Ba(n[e],t)}function _o(t,e){if(Wa(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!uu(t))||Q.test(t)||!Y.test(t)||null!=e&&t in At(e)}function mo(t){var e=ro(t),n=Dn[e];if(\"function\"!=typeof n||!(e in qn.prototype))return!1;if(t===n)return!0;var r=no(n);return!!r&&t===r[0]}(Sn&&fo(new Sn(new ArrayBuffer(1)))!=T||Cn&&fo(new Cn)!=w||An&&fo(An.resolve())!=A||On&&fo(new On)!=k||kn&&fo(new kn)!=x)&&(fo=function(t){var e=Cr(t),n=e==C?t.constructor:r,i=n?Lo(n):\"\";if(i)switch(i){case jn:return T;case Tn:return w;case En:return A;case Mn:return k;case Nn:return x}return e});var bo=Tt?Za:vs;function wo(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||jt)}function So(t){return t==t&&!Ja(t)}function Co(t,e){return function(n){return null!=n&&n[t]===e&&(e!==r||t in At(n))}}function Ao(t,e,n){return e=yn(e===r?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=yn(r.length-e,0),a=rt(o);++i<o;)a[i]=r[e+i];i=-1;for(var u=rt(e+1);++i<e;)u[i]=r[i];return u[e]=n(a),Se(t,this,u)}}function Oo(t,e){return e.length<2?t:wr(t,ti(e,0,-1))}function ko(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var Po=To(Yr),Io=fe||function(t,e){return le.setTimeout(t,e)},xo=To(Qr);function jo(t,e,n){var r=e+\"\";return xo(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return Ae(p,function(n){var r=\"_.\"+n[0];e&n[1]&&!Ie(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(ot);return e?e[1].split(at):[]}(r),n)))}function To(t){var e=0,n=0;return function(){var i=_n(),o=16-(i-n);if(n=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(r,arguments)}}function Eo(t,e){var n=-1,i=t.length,o=i-1;for(e=e===r?i:e;++n<e;){var a=$r(n,o),u=t[a];t[a]=t[n],t[n]=u}return t.length=e,t}var Mo,No,Ro=(Mo=Ma(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(J,function(t,n,r,i){e.push(r?i.replace(ct,\"$1\"):n||t)}),e},function(t){return 500===No.size&&No.clear(),t}),No=Mo.cache,Mo);function zo(t){if(\"string\"==typeof t||uu(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Lo(t){if(null!=t){try{return Et.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Do(t){if(t instanceof qn)return t.clone();var e=new Fn(t.__wrapped__,t.__chain__);return e.__actions__=ki(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Bo=Gr(function(t,e){return Ha(t)?cr(t,vr(e,1,Ha,!0)):[]}),Uo=Gr(function(t,e){var n=Xo(e);return Ha(n)&&(n=r),Ha(t)?cr(t,vr(e,1,Ha,!0),oo(n,2)):[]}),Fo=Gr(function(t,e){var n=Xo(e);return Ha(n)&&(n=r),Ha(t)?cr(t,vr(e,1,Ha,!0),r,n):[]});function qo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:pu(n);return i<0&&(i=yn(r+i,0)),Le(t,oo(e,3),i)}function Wo(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return n!==r&&(o=pu(n),o=n<0?yn(i+o,0):gn(o,i-1)),Le(t,oo(e,3),o,!0)}function Vo(t){return null!=t&&t.length?vr(t,1):[]}function $o(t){return t&&t.length?t[0]:r}var Ho=Gr(function(t){var e=je(t,di);return e.length&&e[0]===t[0]?Pr(e):[]}),Go=Gr(function(t){var e=Xo(t),n=je(t,di);return e===Xo(n)?e=r:n.pop(),n.length&&n[0]===t[0]?Pr(n,oo(e,2)):[]}),Ko=Gr(function(t){var e=Xo(t),n=je(t,di);return(e=\"function\"==typeof e?e:r)&&n.pop(),n.length&&n[0]===t[0]?Pr(n,r,e):[]});function Xo(t){var e=null==t?0:t.length;return e?t[e-1]:r}var Zo=Gr(Yo);function Yo(t,e){return t&&t.length&&e&&e.length?Wr(t,e):t}var Qo=Ji(function(t,e){var n=null==t?0:t.length,r=ir(t,e);return Vr(t,je(e,function(t){return yo(t,n)?+t:t}).sort(Ci)),r});function Jo(t){return null==t?t:wn.call(t)}var ta=Gr(function(t){return ui(vr(t,1,Ha,!0))}),ea=Gr(function(t){var e=Xo(t);return Ha(e)&&(e=r),ui(vr(t,1,Ha,!0),oo(e,2))}),na=Gr(function(t){var e=Xo(t);return e=\"function\"==typeof e?e:r,ui(vr(t,1,Ha,!0),r,e)});function ra(t){if(!t||!t.length)return[];var e=0;return t=Pe(t,function(t){if(Ha(t))return e=yn(t.length,e),!0}),He(e,function(e){return je(t,qe(e))})}function ia(t,e){if(!t||!t.length)return[];var n=ra(t);return null==e?n:je(n,function(t){return Se(e,r,t)})}var oa=Gr(function(t,e){return Ha(t)?cr(t,e):[]}),aa=Gr(function(t){return hi(Pe(t,Ha))}),ua=Gr(function(t){var e=Xo(t);return Ha(e)&&(e=r),hi(Pe(t,Ha),oo(e,2))}),sa=Gr(function(t){var e=Xo(t);return e=\"function\"==typeof e?e:r,hi(Pe(t,Ha),r,e)}),ca=Gr(ra),la=Gr(function(t){var e=t.length,n=e>1?t[e-1]:r;return n=\"function\"==typeof n?(t.pop(),n):r,ia(t,n)});function fa(t){var e=Dn(t);return e.__chain__=!0,e}function ha(t,e){return e(t)}var pa=Ji(function(t){var e=t.length,n=e?t[0]:0,i=this.__wrapped__,o=function(e){return ir(e,t)};return!(e>1||this.__actions__.length)&&i instanceof qn&&yo(n)?((i=i.slice(n,+n+(e?1:0))).__actions__.push({func:ha,args:[o],thisArg:r}),new Fn(i,this.__chain__).thru(function(t){return e&&!t.length&&t.push(r),t})):this.thru(o)}),da=Ii(function(t,e,n){Mt.call(t,n)?++t[n]:rr(t,n,1)}),va=Ri(qo),ya=Ri(Wo);function ga(t,e){return(Wa(t)?Ae:lr)(t,oo(e,3))}function _a(t,e){return(Wa(t)?Oe:fr)(t,oo(e,3))}var ma=Ii(function(t,e,n){Mt.call(t,n)?t[n].push(e):rr(t,n,[e])}),ba=Gr(function(t,e,n){var r=-1,i=\"function\"==typeof e,o=$a(t)?rt(t.length):[];return lr(t,function(t){o[++r]=i?Se(e,t,n):Ir(t,e,n)}),o}),wa=Ii(function(t,e,n){rr(t,n,e)});function Sa(t,e){return(Wa(t)?je:zr)(t,oo(e,3))}var Ca=Ii(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),Aa=Gr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&go(t,e[0],e[1])?e=[]:n>2&&go(e[0],e[1],e[2])&&(e=[e[0]]),Fr(t,vr(e,1),[])}),Oa=ce||function(){return le.Date.now()};function ka(t,e,n){return e=n?r:e,e=t&&null==e?t.length:e,Ki(t,s,r,r,r,r,e)}function Pa(t,e){var n;if(\"function\"!=typeof e)throw new Pt(i);return t=pu(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=r),n}}var Ia=Gr(function(t,e,n){var r=1;if(n.length){var i=an(n,io(Ia));r|=u}return Ki(t,r,e,n,i)}),xa=Gr(function(t,e,n){var r=3;if(n.length){var i=an(n,io(xa));r|=u}return Ki(e,r,t,n,i)});function ja(t,e,n){var o,a,u,s,c,l,f=0,h=!1,p=!1,d=!0;if(\"function\"!=typeof t)throw new Pt(i);function v(e){var n=o,i=a;return o=a=r,f=e,s=t.apply(i,n)}function y(t){var n=t-l;return l===r||n>=e||n<0||p&&t-f>=u}function g(){var t=Oa();if(y(t))return _(t);c=Io(g,function(t){var n=e-(t-l);return p?gn(n,u-(t-f)):n}(t))}function _(t){return c=r,d&&o?v(t):(o=a=r,s)}function m(){var t=Oa(),n=y(t);if(o=arguments,a=this,l=t,n){if(c===r)return function(t){return f=t,c=Io(g,e),h?v(t):s}(l);if(p)return mi(c),c=Io(g,e),v(l)}return c===r&&(c=Io(g,e)),s}return e=vu(e)||0,Ja(n)&&(h=!!n.leading,u=(p=\"maxWait\"in n)?yn(vu(n.maxWait)||0,e):u,d=\"trailing\"in n?!!n.trailing:d),m.cancel=function(){c!==r&&mi(c),f=0,o=l=a=c=r},m.flush=function(){return c===r?s:_(Oa())},m}var Ta=Gr(function(t,e){return sr(t,1,e)}),Ea=Gr(function(t,e,n){return sr(t,vu(e)||0,n)});function Ma(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new Pt(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(Ma.Cache||$n),n}function Na(t){if(\"function\"!=typeof t)throw new Pt(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Ma.Cache=$n;var Ra=gi(function(t,e){var n=(e=1==e.length&&Wa(e[0])?je(e[0],Ke(oo())):je(vr(e,1),Ke(oo()))).length;return Gr(function(r){for(var i=-1,o=gn(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return Se(t,this,r)})}),za=Gr(function(t,e){var n=an(e,io(za));return Ki(t,u,r,e,n)}),La=Gr(function(t,e){var n=an(e,io(La));return Ki(t,64,r,e,n)}),Da=Ji(function(t,e){return Ki(t,256,r,r,r,e)});function Ba(t,e){return t===e||t!=t&&e!=e}var Ua=Wi(Ar),Fa=Wi(function(t,e){return t>=e}),qa=xr(function(){return arguments}())?xr:function(t){return tu(t)&&Mt.call(t,\"callee\")&&!Ht.call(t,\"callee\")},Wa=rt.isArray,Va=ye?Ke(ye):function(t){return tu(t)&&Cr(t)==j};function $a(t){return null!=t&&Qa(t.length)&&!Za(t)}function Ha(t){return tu(t)&&$a(t)}var Ga=Re||vs,Ka=ge?Ke(ge):function(t){return tu(t)&&Cr(t)==g};function Xa(t){if(!tu(t))return!1;var e=Cr(t);return e==_||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ru(t)}function Za(t){if(!Ja(t))return!1;var e=Cr(t);return e==m||e==b||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Ya(t){return\"number\"==typeof t&&t==pu(t)}function Qa(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=l}function Ja(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function tu(t){return null!=t&&\"object\"==typeof t}var eu=_e?Ke(_e):function(t){return tu(t)&&fo(t)==w};function nu(t){return\"number\"==typeof t||tu(t)&&Cr(t)==S}function ru(t){if(!tu(t)||Cr(t)!=C)return!1;var e=Vt(t);if(null===e)return!0;var n=Mt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&Et.call(n)==Lt}var iu=me?Ke(me):function(t){return tu(t)&&Cr(t)==O},ou=be?Ke(be):function(t){return tu(t)&&fo(t)==k};function au(t){return\"string\"==typeof t||!Wa(t)&&tu(t)&&Cr(t)==P}function uu(t){return\"symbol\"==typeof t||tu(t)&&Cr(t)==I}var su=we?Ke(we):function(t){return tu(t)&&Qa(t.length)&&!!re[Cr(t)]},cu=Wi(Rr),lu=Wi(function(t,e){return t<=e});function fu(t){if(!t)return[];if($a(t))return au(t)?ln(t):ki(t);if(Yt&&t[Yt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Yt]());var e=fo(t);return(e==w?rn:e==k?un:Bu)(t)}function hu(t){return t?(t=vu(t))===c||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function pu(t){var e=hu(t),n=e%1;return e==e?n?e-n:e:0}function du(t){return t?or(pu(t),0,h):0}function vu(t){if(\"number\"==typeof t)return t;if(uu(t))return f;if(Ja(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=Ja(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Ge(t);var n=pt.test(t);return n||vt.test(t)?ue(t.slice(2),n?2:8):ht.test(t)?f:+t}function yu(t){return Pi(t,Tu(t))}function gu(t){return null==t?\"\":ai(t)}var _u=xi(function(t,e){if(wo(e)||$a(e))Pi(e,ju(e),t);else for(var n in e)Mt.call(e,n)&&Jn(t,n,e[n])}),mu=xi(function(t,e){Pi(e,Tu(e),t)}),bu=xi(function(t,e,n,r){Pi(e,Tu(e),t,r)}),wu=xi(function(t,e,n,r){Pi(e,ju(e),t,r)}),Su=Ji(ir),Cu=Gr(function(t,e){t=At(t);var n=-1,i=e.length,o=i>2?e[2]:r;for(o&&go(e[0],e[1],o)&&(i=1);++n<i;)for(var a=e[n],u=Tu(a),s=-1,c=u.length;++s<c;){var l=u[s],f=t[l];(f===r||Ba(f,jt[l])&&!Mt.call(t,l))&&(t[l]=a[l])}return t}),Au=Gr(function(t){return t.push(r,Zi),Se(Mu,r,t)});function Ou(t,e,n){var i=null==t?r:wr(t,e);return i===r?n:i}function ku(t,e){return null!=t&&ho(t,e,kr)}var Pu=Di(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=zt.call(e)),t[e]=n},Ju(ns)),Iu=Di(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=zt.call(e)),Mt.call(t,e)?t[e].push(n):t[e]=[n]},oo),xu=Gr(Ir);function ju(t){return $a(t)?Kn(t):Nr(t)}function Tu(t){return $a(t)?Kn(t,!0):function(t){if(!Ja(t))return function(t){var e=[];if(null!=t)for(var n in At(t))e.push(n);return e}(t);var e=wo(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&Mt.call(t,r))&&n.push(r);return n}(t)}var Eu=xi(function(t,e,n){Br(t,e,n)}),Mu=xi(function(t,e,n,r){Br(t,e,n,r)}),Nu=Ji(function(t,e){var n={};if(null==t)return n;var r=!1;e=je(e,function(e){return e=yi(e,t),r||(r=e.length>1),e}),Pi(t,eo(t),n),r&&(n=ar(n,7,Yi));for(var i=e.length;i--;)si(n,e[i]);return n}),Ru=Ji(function(t,e){return null==t?{}:function(t,e){return qr(t,e,function(e,n){return ku(t,n)})}(t,e)});function zu(t,e){if(null==t)return{};var n=je(eo(t),function(t){return[t]});return e=oo(e),qr(t,n,function(t,n){return e(t,n[0])})}var Lu=Gi(ju),Du=Gi(Tu);function Bu(t){return null==t?[]:Xe(t,ju(t))}var Uu=Mi(function(t,e,n){return e=e.toLowerCase(),t+(n?Fu(e):e)});function Fu(t){return Xu(gu(t).toLowerCase())}function qu(t){return(t=gu(t))&&t.replace(gt,Je).replace(Zt,\"\")}var Wu=Mi(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Vu=Mi(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),$u=Ei(\"toLowerCase\"),Hu=Mi(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Gu=Mi(function(t,e,n){return t+(n?\" \":\"\")+Xu(e)}),Ku=Mi(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Xu=Ei(\"toUpperCase\");function Zu(t,e,n){return t=gu(t),(e=n?r:e)===r?function(t){return te.test(t)}(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.match(ut)||[]}(t):t.match(e)||[]}var Yu=Gr(function(t,e){try{return Se(t,r,e)}catch(t){return Xa(t)?t:new wt(t)}}),Qu=Ji(function(t,e){return Ae(e,function(e){e=zo(e),rr(t,e,Ia(t[e],t))}),t});function Ju(t){return function(){return t}}var ts=zi(),es=zi(!0);function ns(t){return t}function rs(t){return Mr(\"function\"==typeof t?t:ar(t,1))}var is=Gr(function(t,e){return function(n){return Ir(n,t,e)}}),os=Gr(function(t,e){return function(n){return Ir(t,n,e)}});function as(t,e,n){var r=ju(e),i=br(e,r);null!=n||Ja(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=br(e,ju(e)));var o=!(Ja(n)&&\"chain\"in n&&!n.chain),a=Za(t);return Ae(i,function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=ki(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Te([this.value()],arguments))})}),t}function us(){}var ss=Ui(je),cs=Ui(ke),ls=Ui(Ne);function fs(t){return _o(t)?qe(zo(t)):function(t){return function(e){return wr(e,t)}}(t)}var hs=qi(),ps=qi(!0);function ds(){return[]}function vs(){return!1}var ys,gs=Bi(function(t,e){return t+e},0),_s=$i(\"ceil\"),ms=Bi(function(t,e){return t/e},1),bs=$i(\"floor\"),ws=Bi(function(t,e){return t*e},1),Ss=$i(\"round\"),Cs=Bi(function(t,e){return t-e},0);return Dn.after=function(t,e){if(\"function\"!=typeof e)throw new Pt(i);return t=pu(t),function(){if(--t<1)return e.apply(this,arguments)}},Dn.ary=ka,Dn.assign=_u,Dn.assignIn=mu,Dn.assignInWith=bu,Dn.assignWith=wu,Dn.at=Su,Dn.before=Pa,Dn.bind=Ia,Dn.bindAll=Qu,Dn.bindKey=xa,Dn.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Wa(t)?t:[t]},Dn.chain=fa,Dn.chunk=function(t,e,n){e=(n?go(t,e,n):e===r)?1:yn(pu(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,a=0,u=rt(he(i/e));o<i;)u[a++]=ti(t,o,o+=e);return u},Dn.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i},Dn.concat=function(){var t=arguments.length;if(!t)return[];for(var e=rt(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return Te(Wa(n)?ki(n):[n],vr(e,1))},Dn.cond=function(t){var e=null==t?0:t.length,n=oo();return t=e?je(t,function(t){if(\"function\"!=typeof t[1])throw new Pt(i);return[n(t[0]),t[1]]}):[],Gr(function(n){for(var r=-1;++r<e;){var i=t[r];if(Se(i[0],this,n))return Se(i[1],this,n)}})},Dn.conforms=function(t){return function(t){var e=ju(t);return function(n){return ur(n,t,e)}}(ar(t,1))},Dn.constant=Ju,Dn.countBy=da,Dn.create=function(t,e){var n=Bn(t);return null==e?n:nr(n,e)},Dn.curry=function t(e,n,i){var o=Ki(e,8,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Dn.curryRight=function t(e,n,i){var o=Ki(e,16,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Dn.debounce=ja,Dn.defaults=Cu,Dn.defaultsDeep=Au,Dn.defer=Ta,Dn.delay=Ea,Dn.difference=Bo,Dn.differenceBy=Uo,Dn.differenceWith=Fo,Dn.drop=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=n||e===r?1:pu(e))<0?0:e,i):[]},Dn.dropRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,0,(e=i-(e=n||e===r?1:pu(e)))<0?0:e):[]},Dn.dropRightWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!0,!0):[]},Dn.dropWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!0):[]},Dn.fill=function(t,e,n,i){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&go(t,e,n)&&(n=0,i=o),function(t,e,n,i){var o=t.length;for((n=pu(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:pu(i))<0&&(i+=o),i=n>i?0:du(i);n<i;)t[n++]=e;return t}(t,e,n,i)):[]},Dn.filter=function(t,e){return(Wa(t)?Pe:dr)(t,oo(e,3))},Dn.flatMap=function(t,e){return vr(Sa(t,e),1)},Dn.flatMapDeep=function(t,e){return vr(Sa(t,e),c)},Dn.flatMapDepth=function(t,e,n){return n=n===r?1:pu(n),vr(Sa(t,e),n)},Dn.flatten=Vo,Dn.flattenDeep=function(t){return null!=t&&t.length?vr(t,c):[]},Dn.flattenDepth=function(t,e){return null!=t&&t.length?vr(t,e=e===r?1:pu(e)):[]},Dn.flip=function(t){return Ki(t,512)},Dn.flow=ts,Dn.flowRight=es,Dn.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];rr(r,i[0],i[1])}return r},Dn.functions=function(t){return null==t?[]:br(t,ju(t))},Dn.functionsIn=function(t){return null==t?[]:br(t,Tu(t))},Dn.groupBy=ma,Dn.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Dn.intersection=Ho,Dn.intersectionBy=Go,Dn.intersectionWith=Ko,Dn.invert=Pu,Dn.invertBy=Iu,Dn.invokeMap=ba,Dn.iteratee=rs,Dn.keyBy=wa,Dn.keys=ju,Dn.keysIn=Tu,Dn.map=Sa,Dn.mapKeys=function(t,e){var n={};return e=oo(e,3),_r(t,function(t,r,i){rr(n,e(t,r,i),t)}),n},Dn.mapValues=function(t,e){var n={};return e=oo(e,3),_r(t,function(t,r,i){rr(n,r,e(t,r,i))}),n},Dn.matches=function(t){return Lr(ar(t,1))},Dn.matchesProperty=function(t,e){return Dr(t,ar(e,1))},Dn.memoize=Ma,Dn.merge=Eu,Dn.mergeWith=Mu,Dn.method=is,Dn.methodOf=os,Dn.mixin=as,Dn.negate=Na,Dn.nthArg=function(t){return t=pu(t),Gr(function(e){return Ur(e,t)})},Dn.omit=Nu,Dn.omitBy=function(t,e){return zu(t,Na(oo(e)))},Dn.once=function(t){return Pa(2,t)},Dn.orderBy=function(t,e,n,i){return null==t?[]:(Wa(e)||(e=null==e?[]:[e]),Wa(n=i?r:n)||(n=null==n?[]:[n]),Fr(t,e,n))},Dn.over=ss,Dn.overArgs=Ra,Dn.overEvery=cs,Dn.overSome=ls,Dn.partial=za,Dn.partialRight=La,Dn.partition=Ca,Dn.pick=Ru,Dn.pickBy=zu,Dn.property=fs,Dn.propertyOf=function(t){return function(e){return null==t?r:wr(t,e)}},Dn.pull=Zo,Dn.pullAll=Yo,Dn.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?Wr(t,e,oo(n,2)):t},Dn.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?Wr(t,e,r,n):t},Dn.pullAt=Qo,Dn.range=hs,Dn.rangeRight=ps,Dn.rearg=Da,Dn.reject=function(t,e){return(Wa(t)?Pe:dr)(t,Na(oo(e,3)))},Dn.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=oo(e,3);++r<o;){var a=t[r];e(a,r,t)&&(n.push(a),i.push(r))}return Vr(t,i),n},Dn.rest=function(t,e){if(\"function\"!=typeof t)throw new Pt(i);return Gr(t,e=e===r?e:pu(e))},Dn.reverse=Jo,Dn.sampleSize=function(t,e,n){return e=(n?go(t,e,n):e===r)?1:pu(e),(Wa(t)?Zn:Xr)(t,e)},Dn.set=function(t,e,n){return null==t?t:Zr(t,e,n)},Dn.setWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:Zr(t,e,n,i)},Dn.shuffle=function(t){return(Wa(t)?Yn:Jr)(t)},Dn.slice=function(t,e,n){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&go(t,e,n)?(e=0,n=i):(e=null==e?0:pu(e),n=n===r?i:pu(n)),ti(t,e,n)):[]},Dn.sortBy=Aa,Dn.sortedUniq=function(t){return t&&t.length?ii(t):[]},Dn.sortedUniqBy=function(t,e){return t&&t.length?ii(t,oo(e,2)):[]},Dn.split=function(t,e,n){return n&&\"number\"!=typeof n&&go(t,e,n)&&(e=n=r),(n=n===r?h:n>>>0)?(t=gu(t))&&(\"string\"==typeof e||null!=e&&!iu(e))&&!(e=ai(e))&&nn(t)?_i(ln(t),0,n):t.split(e,n):[]},Dn.spread=function(t,e){if(\"function\"!=typeof t)throw new Pt(i);return e=null==e?0:yn(pu(e),0),Gr(function(n){var r=n[e],i=_i(n,0,e);return r&&Te(i,r),Se(t,this,i)})},Dn.tail=function(t){var e=null==t?0:t.length;return e?ti(t,1,e):[]},Dn.take=function(t,e,n){return t&&t.length?ti(t,0,(e=n||e===r?1:pu(e))<0?0:e):[]},Dn.takeRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=i-(e=n||e===r?1:pu(e)))<0?0:e,i):[]},Dn.takeRightWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!1,!0):[]},Dn.takeWhile=function(t,e){return t&&t.length?li(t,oo(e,3)):[]},Dn.tap=function(t,e){return e(t),t},Dn.throttle=function(t,e,n){var r=!0,o=!0;if(\"function\"!=typeof t)throw new Pt(i);return Ja(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),ja(t,e,{leading:r,maxWait:e,trailing:o})},Dn.thru=ha,Dn.toArray=fu,Dn.toPairs=Lu,Dn.toPairsIn=Du,Dn.toPath=function(t){return Wa(t)?je(t,zo):uu(t)?[t]:ki(Ro(gu(t)))},Dn.toPlainObject=yu,Dn.transform=function(t,e,n){var r=Wa(t),i=r||Ga(t)||su(t);if(e=oo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Ja(t)&&Za(o)?Bn(Vt(t)):{}}return(i?Ae:_r)(t,function(t,r,i){return e(n,t,r,i)}),n},Dn.unary=function(t){return ka(t,1)},Dn.union=ta,Dn.unionBy=ea,Dn.unionWith=na,Dn.uniq=function(t){return t&&t.length?ui(t):[]},Dn.uniqBy=function(t,e){return t&&t.length?ui(t,oo(e,2)):[]},Dn.uniqWith=function(t,e){return e=\"function\"==typeof e?e:r,t&&t.length?ui(t,r,e):[]},Dn.unset=function(t,e){return null==t||si(t,e)},Dn.unzip=ra,Dn.unzipWith=ia,Dn.update=function(t,e,n){return null==t?t:ci(t,e,vi(n))},Dn.updateWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:ci(t,e,vi(n),i)},Dn.values=Bu,Dn.valuesIn=function(t){return null==t?[]:Xe(t,Tu(t))},Dn.without=oa,Dn.words=Zu,Dn.wrap=function(t,e){return za(vi(e),t)},Dn.xor=aa,Dn.xorBy=ua,Dn.xorWith=sa,Dn.zip=ca,Dn.zipObject=function(t,e){return pi(t||[],e||[],Jn)},Dn.zipObjectDeep=function(t,e){return pi(t||[],e||[],Zr)},Dn.zipWith=la,Dn.entries=Lu,Dn.entriesIn=Du,Dn.extend=mu,Dn.extendWith=bu,as(Dn,Dn),Dn.add=gs,Dn.attempt=Yu,Dn.camelCase=Uu,Dn.capitalize=Fu,Dn.ceil=_s,Dn.clamp=function(t,e,n){return n===r&&(n=e,e=r),n!==r&&(n=(n=vu(n))==n?n:0),e!==r&&(e=(e=vu(e))==e?e:0),or(vu(t),e,n)},Dn.clone=function(t){return ar(t,4)},Dn.cloneDeep=function(t){return ar(t,5)},Dn.cloneDeepWith=function(t,e){return ar(t,5,e=\"function\"==typeof e?e:r)},Dn.cloneWith=function(t,e){return ar(t,4,e=\"function\"==typeof e?e:r)},Dn.conformsTo=function(t,e){return null==e||ur(t,e,ju(e))},Dn.deburr=qu,Dn.defaultTo=function(t,e){return null==t||t!=t?e:t},Dn.divide=ms,Dn.endsWith=function(t,e,n){t=gu(t),e=ai(e);var i=t.length,o=n=n===r?i:or(pu(n),0,i);return(n-=e.length)>=0&&t.slice(n,o)==e},Dn.eq=Ba,Dn.escape=function(t){return(t=gu(t))&&G.test(t)?t.replace($,tn):t},Dn.escapeRegExp=function(t){return(t=gu(t))&&et.test(t)?t.replace(tt,\"\\\\$&\"):t},Dn.every=function(t,e,n){var i=Wa(t)?ke:hr;return n&&go(t,e,n)&&(e=r),i(t,oo(e,3))},Dn.find=va,Dn.findIndex=qo,Dn.findKey=function(t,e){return ze(t,oo(e,3),_r)},Dn.findLast=ya,Dn.findLastIndex=Wo,Dn.findLastKey=function(t,e){return ze(t,oo(e,3),mr)},Dn.floor=bs,Dn.forEach=ga,Dn.forEachRight=_a,Dn.forIn=function(t,e){return null==t?t:yr(t,oo(e,3),Tu)},Dn.forInRight=function(t,e){return null==t?t:gr(t,oo(e,3),Tu)},Dn.forOwn=function(t,e){return t&&_r(t,oo(e,3))},Dn.forOwnRight=function(t,e){return t&&mr(t,oo(e,3))},Dn.get=Ou,Dn.gt=Ua,Dn.gte=Fa,Dn.has=function(t,e){return null!=t&&ho(t,e,Or)},Dn.hasIn=ku,Dn.head=$o,Dn.identity=ns,Dn.includes=function(t,e,n,r){t=$a(t)?t:Bu(t),n=n&&!r?pu(n):0;var i=t.length;return n<0&&(n=yn(i+n,0)),au(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&De(t,e,n)>-1},Dn.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:pu(n);return i<0&&(i=yn(r+i,0)),De(t,e,i)},Dn.inRange=function(t,e,n){return e=hu(e),n===r?(n=e,e=0):n=hu(n),function(t,e,n){return t>=gn(e,n)&&t<yn(e,n)}(t=vu(t),e,n)},Dn.invoke=xu,Dn.isArguments=qa,Dn.isArray=Wa,Dn.isArrayBuffer=Va,Dn.isArrayLike=$a,Dn.isArrayLikeObject=Ha,Dn.isBoolean=function(t){return!0===t||!1===t||tu(t)&&Cr(t)==y},Dn.isBuffer=Ga,Dn.isDate=Ka,Dn.isElement=function(t){return tu(t)&&1===t.nodeType&&!ru(t)},Dn.isEmpty=function(t){if(null==t)return!0;if($a(t)&&(Wa(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Ga(t)||su(t)||qa(t)))return!t.length;var e=fo(t);if(e==w||e==k)return!t.size;if(wo(t))return!Nr(t).length;for(var n in t)if(Mt.call(t,n))return!1;return!0},Dn.isEqual=function(t,e){return jr(t,e)},Dn.isEqualWith=function(t,e,n){var i=(n=\"function\"==typeof n?n:r)?n(t,e):r;return i===r?jr(t,e,r,n):!!i},Dn.isError=Xa,Dn.isFinite=function(t){return\"number\"==typeof t&&We(t)},Dn.isFunction=Za,Dn.isInteger=Ya,Dn.isLength=Qa,Dn.isMap=eu,Dn.isMatch=function(t,e){return t===e||Tr(t,e,uo(e))},Dn.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:r,Tr(t,e,uo(e),n)},Dn.isNaN=function(t){return nu(t)&&t!=+t},Dn.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Er(t)},Dn.isNil=function(t){return null==t},Dn.isNull=function(t){return null===t},Dn.isNumber=nu,Dn.isObject=Ja,Dn.isObjectLike=tu,Dn.isPlainObject=ru,Dn.isRegExp=iu,Dn.isSafeInteger=function(t){return Ya(t)&&t>=-9007199254740991&&t<=l},Dn.isSet=ou,Dn.isString=au,Dn.isSymbol=uu,Dn.isTypedArray=su,Dn.isUndefined=function(t){return t===r},Dn.isWeakMap=function(t){return tu(t)&&fo(t)==x},Dn.isWeakSet=function(t){return tu(t)&&\"[object WeakSet]\"==Cr(t)},Dn.join=function(t,e){return null==t?\"\":dn.call(t,e)},Dn.kebabCase=Wu,Dn.last=Xo,Dn.lastIndexOf=function(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=pu(n))<0?yn(i+o,0):gn(o,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Le(t,Ue,o,!0)},Dn.lowerCase=Vu,Dn.lowerFirst=$u,Dn.lt=cu,Dn.lte=lu,Dn.max=function(t){return t&&t.length?pr(t,ns,Ar):r},Dn.maxBy=function(t,e){return t&&t.length?pr(t,oo(e,2),Ar):r},Dn.mean=function(t){return Fe(t,ns)},Dn.meanBy=function(t,e){return Fe(t,oo(e,2))},Dn.min=function(t){return t&&t.length?pr(t,ns,Rr):r},Dn.minBy=function(t,e){return t&&t.length?pr(t,oo(e,2),Rr):r},Dn.stubArray=ds,Dn.stubFalse=vs,Dn.stubObject=function(){return{}},Dn.stubString=function(){return\"\"},Dn.stubTrue=function(){return!0},Dn.multiply=ws,Dn.nth=function(t,e){return t&&t.length?Ur(t,pu(e)):r},Dn.noConflict=function(){return le._===this&&(le._=Dt),this},Dn.noop=us,Dn.now=Oa,Dn.pad=function(t,e,n){t=gu(t);var r=(e=pu(e))?cn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Fi(de(i),n)+t+Fi(he(i),n)},Dn.padEnd=function(t,e,n){t=gu(t);var r=(e=pu(e))?cn(t):0;return e&&r<e?t+Fi(e-r,n):t},Dn.padStart=function(t,e,n){t=gu(t);var r=(e=pu(e))?cn(t):0;return e&&r<e?Fi(e-r,n)+t:t},Dn.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),mn(gu(t).replace(nt,\"\"),e||0)},Dn.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&go(t,e,n)&&(e=n=r),n===r&&(\"boolean\"==typeof e?(n=e,e=r):\"boolean\"==typeof t&&(n=t,t=r)),t===r&&e===r?(t=0,e=1):(t=hu(t),e===r?(e=t,t=0):e=hu(e)),t>e){var i=t;t=e,e=i}if(n||t%1||e%1){var o=bn();return gn(t+o*(e-t+ae(\"1e-\"+((o+\"\").length-1))),e)}return $r(t,e)},Dn.reduce=function(t,e,n){var r=Wa(t)?Ee:Ve,i=arguments.length<3;return r(t,oo(e,4),n,i,lr)},Dn.reduceRight=function(t,e,n){var r=Wa(t)?Me:Ve,i=arguments.length<3;return r(t,oo(e,4),n,i,fr)},Dn.repeat=function(t,e,n){return e=(n?go(t,e,n):e===r)?1:pu(e),Hr(gu(t),e)},Dn.replace=function(){var t=arguments,e=gu(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Dn.result=function(t,e,n){var i=-1,o=(e=yi(e,t)).length;for(o||(o=1,t=r);++i<o;){var a=null==t?r:t[zo(e[i])];a===r&&(i=o,a=n),t=Za(a)?a.call(t):a}return t},Dn.round=Ss,Dn.runInContext=t,Dn.sample=function(t){return(Wa(t)?Xn:Kr)(t)},Dn.size=function(t){if(null==t)return 0;if($a(t))return au(t)?cn(t):t.length;var e=fo(t);return e==w||e==k?t.size:Nr(t).length},Dn.snakeCase=Hu,Dn.some=function(t,e,n){var i=Wa(t)?Ne:ei;return n&&go(t,e,n)&&(e=r),i(t,oo(e,3))},Dn.sortedIndex=function(t,e){return ni(t,e)},Dn.sortedIndexBy=function(t,e,n){return ri(t,e,oo(n,2))},Dn.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=ni(t,e);if(r<n&&Ba(t[r],e))return r}return-1},Dn.sortedLastIndex=function(t,e){return ni(t,e,!0)},Dn.sortedLastIndexBy=function(t,e,n){return ri(t,e,oo(n,2),!0)},Dn.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=ni(t,e,!0)-1;if(Ba(t[n],e))return n}return-1},Dn.startCase=Gu,Dn.startsWith=function(t,e,n){return t=gu(t),n=null==n?0:or(pu(n),0,t.length),e=ai(e),t.slice(n,n+e.length)==e},Dn.subtract=Cs,Dn.sum=function(t){return t&&t.length?$e(t,ns):0},Dn.sumBy=function(t,e){return t&&t.length?$e(t,oo(e,2)):0},Dn.template=function(t,e,n){var i=Dn.templateSettings;n&&go(t,e,n)&&(e=r),t=gu(t),e=wu({},e,i,Xi);var o=wu({},e.imports,i.imports,Xi),a=ju(o),u=Xe(o,a);Ae(a,function(t){if(st.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var s,c,l=0,f=e.interpolate||_t,h=\"__p += '\",p=Ot((e.escape||_t).source+\"|\"+f.source+\"|\"+(f===Z?lt:_t).source+\"|\"+(e.evaluate||_t).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Mt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ne+\"]\")+\"\\n\";t.replace(p,function(e,n,r,i,o,a){return r||(r=i),h+=t.slice(l,a).replace(mt,en),n&&(s=!0,h+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(c=!0,h+=\"';\\n\"+o+\";\\n__p += '\"),r&&(h+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=a+e.length,e}),h+=\"';\\n\";var v=Mt.call(e,\"variable\")&&e.variable;if(v){if(st.test(v))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(c?h.replace(F,\"\"):h).replace(q,\"$1\").replace(W,\"$1;\"),h=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(s?\", __e = _.escape\":\"\")+(c?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var y=Yu(function(){return St(a,d+\"return \"+h).apply(r,u)});if(y.source=h,Xa(y))throw y;return y},Dn.times=function(t,e){if((t=pu(t))<1||t>l)return[];var n=h,r=gn(t,h);e=oo(e),t-=h;for(var i=He(r,e);++n<t;)e(n);return i},Dn.toFinite=hu,Dn.toInteger=pu,Dn.toLength=du,Dn.toLower=function(t){return gu(t).toLowerCase()},Dn.toNumber=vu,Dn.toSafeInteger=function(t){return t?or(pu(t),-9007199254740991,l):0===t?t:0},Dn.toString=gu,Dn.toUpper=function(t){return gu(t).toUpperCase()},Dn.trim=function(t,e,n){if((t=gu(t))&&(n||e===r))return Ge(t);if(!t||!(e=ai(e)))return t;var i=ln(t),o=ln(e);return _i(i,Ye(i,o),Qe(i,o)+1).join(\"\")},Dn.trimEnd=function(t,e,n){if((t=gu(t))&&(n||e===r))return t.slice(0,fn(t)+1);if(!t||!(e=ai(e)))return t;var i=ln(t);return _i(i,0,Qe(i,ln(e))+1).join(\"\")},Dn.trimStart=function(t,e,n){if((t=gu(t))&&(n||e===r))return t.replace(nt,\"\");if(!t||!(e=ai(e)))return t;var i=ln(t);return _i(i,Ye(i,ln(e))).join(\"\")},Dn.truncate=function(t,e){var n=30,i=\"...\";if(Ja(e)){var o=\"separator\"in e?e.separator:o;n=\"length\"in e?pu(e.length):n,i=\"omission\"in e?ai(e.omission):i}var a=(t=gu(t)).length;if(nn(t)){var u=ln(t);a=u.length}if(n>=a)return t;var s=n-cn(i);if(s<1)return i;var c=u?_i(u,0,s).join(\"\"):t.slice(0,s);if(o===r)return c+i;if(u&&(s+=c.length-s),iu(o)){if(t.slice(s).search(o)){var l,f=c;for(o.global||(o=Ot(o.source,gu(ft.exec(o))+\"g\")),o.lastIndex=0;l=o.exec(f);)var h=l.index;c=c.slice(0,h===r?s:h)}}else if(t.indexOf(ai(o),s)!=s){var p=c.lastIndexOf(o);p>-1&&(c=c.slice(0,p))}return c+i},Dn.unescape=function(t){return(t=gu(t))&&H.test(t)?t.replace(V,hn):t},Dn.uniqueId=function(t){var e=++Nt;return gu(t)+e},Dn.upperCase=Ku,Dn.upperFirst=Xu,Dn.each=ga,Dn.eachRight=_a,Dn.first=$o,as(Dn,(ys={},_r(Dn,function(t,e){Mt.call(Dn.prototype,e)||(ys[e]=t)}),ys),{chain:!1}),Dn.VERSION=\"4.18.1\",Ae([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Dn[t].placeholder=Dn}),Ae([\"drop\",\"take\"],function(t,e){qn.prototype[t]=function(n){n=n===r?1:yn(pu(n),0);var i=this.__filtered__&&!e?new qn(this):this.clone();return i.__filtered__?i.__takeCount__=gn(n,i.__takeCount__):i.__views__.push({size:gn(n,h),type:t+(i.__dir__<0?\"Right\":\"\")}),i},qn.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),Ae([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=1==n||3==n;qn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:oo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),Ae([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");qn.prototype[t]=function(){return this[n](1).value()[0]}}),Ae([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");qn.prototype[t]=function(){return this.__filtered__?new qn(this):this[n](1)}}),qn.prototype.compact=function(){return this.filter(ns)},qn.prototype.find=function(t){return this.filter(t).head()},qn.prototype.findLast=function(t){return this.reverse().find(t)},qn.prototype.invokeMap=Gr(function(t,e){return\"function\"==typeof t?new qn(this):this.map(function(n){return Ir(n,t,e)})}),qn.prototype.reject=function(t){return this.filter(Na(oo(t)))},qn.prototype.slice=function(t,e){t=pu(t);var n=this;return n.__filtered__&&(t>0||e<0)?new qn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==r&&(n=(e=pu(e))<0?n.dropRight(-e):n.take(e-t)),n)},qn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},qn.prototype.toArray=function(){return this.take(h)},_r(qn.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Dn[i?\"take\"+(\"last\"==e?\"Right\":\"\"):e],a=i||/^find/.test(e);o&&(Dn.prototype[e]=function(){var e=this.__wrapped__,u=i?[1]:arguments,s=e instanceof qn,c=u[0],l=s||Wa(e),f=function(t){var e=o.apply(Dn,Te([t],u));return i&&h?e[0]:e};l&&n&&\"function\"==typeof c&&1!=c.length&&(s=l=!1);var h=this.__chain__,p=!!this.__actions__.length,d=a&&!h,v=s&&!p;if(!a&&l){e=v?e:new qn(this);var y=t.apply(e,u);return y.__actions__.push({func:ha,args:[f],thisArg:r}),new Fn(y,h)}return d&&v?t.apply(this,u):(y=this.thru(f),d?i?y.value()[0]:y.value():y)})}),Ae([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=It[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Dn.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(Wa(i)?i:[],t)}return this[n](function(n){return e.apply(Wa(n)?n:[],t)})}}),_r(qn.prototype,function(t,e){var n=Dn[e];if(n){var r=n.name+\"\";Mt.call(xn,r)||(xn[r]=[]),xn[r].push({name:e,func:n})}}),xn[Li(r,2).name]=[{name:\"wrapper\",func:r}],qn.prototype.clone=function(){var t=new qn(this.__wrapped__);return t.__actions__=ki(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=ki(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=ki(this.__views__),t},qn.prototype.reverse=function(){if(this.__filtered__){var t=new qn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},qn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=Wa(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case\"drop\":t+=a;break;case\"dropRight\":e-=a;break;case\"take\":e=gn(e,t+a);break;case\"takeRight\":t=yn(t,e-a)}}return{start:t,end:e}}(0,i,this.__views__),a=o.start,u=o.end,s=u-a,c=r?u:a-1,l=this.__iteratees__,f=l.length,h=0,p=gn(s,this.__takeCount__);if(!n||!r&&i==s&&p==s)return fi(t,this.__actions__);var d=[];t:for(;s--&&h<p;){for(var v=-1,y=t[c+=e];++v<f;){var g=l[v],_=g.iteratee,m=g.type,b=_(y);if(2==m)y=b;else if(!b){if(1==m)continue t;break t}}d[h++]=y}return d},Dn.prototype.at=pa,Dn.prototype.chain=function(){return fa(this)},Dn.prototype.commit=function(){return new Fn(this.value(),this.__chain__)},Dn.prototype.next=function(){this.__values__===r&&(this.__values__=fu(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Dn.prototype.plant=function(t){for(var e,n=this;n instanceof Un;){var i=Do(n);i.__index__=0,i.__values__=r,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e},Dn.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof qn){var e=t;return this.__actions__.length&&(e=new qn(this)),(e=e.reverse()).__actions__.push({func:ha,args:[Jo],thisArg:r}),new Fn(e,this.__chain__)}return this.thru(Jo)},Dn.prototype.toJSON=Dn.prototype.valueOf=Dn.prototype.value=function(){return fi(this.__wrapped__,this.__actions__)},Dn.prototype.first=Dn.prototype.head,Yt&&(Dn.prototype[Yt]=function(){return this}),Dn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(le._=pn,define(function(){return pn})):he?((he.exports=pn)._=pn,fe._=pn):le._=pn}.call(this)},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,e,n){\"use strict\";n.d(e,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createApplePayButtonStrategy:()=>et,createApplePayCustomerStrategy:()=>X,createApplePayPaymentStrategy:()=>q});var t=n(4043),e=n(315),i=n(9440);function o(t,e,n=!0){var r;return null!==(r=t[e])&&void 0!==r?r:n}const a=\"3.128.0\",u=\"3.123.2\",s=\"3.106.0\";class c{constructor(t){this.paymentIntegrationService=t,this.braintreeWindow=window}getSDKVersion(){const t=this.paymentIntegrationService.getState().getStoreConfig(),e=(null==t?void 0:t.checkoutSettings.features)||{};return this.getPreloadedSDKVersion()||(o(e,\"PAYPAL-5809.braintree_hosted_fields_fix_version\")?a:o(e,\"PAYPAL-5636.update_braintree_sdk_version\")?u:s)}getPreloadedSDKVersion(){const t=this.braintreeWindow.braintree;if(t){const e=(0,i.find)(Object.values(t),t=>!!t.VERSION);return null==e?void 0:e.VERSION}}}class l extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class f extends l{constructor(t){super(t||\"Unsupported browser error\"),this.name=\"UnsupportedBrowserError\",this.type=\"unsupported_browser\"}}var h,p,d,v,y,g,_,m;!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(h||(h={}));class b extends l{constructor(t){super(function(t){switch(t){case h.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case h.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case h.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case h.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}!function(t){t.ESTIMATED=\"ESTIMATED\",t.FINAL=\"FINAL\",t.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(p||(p={})),function(t){t.Completed=\"COMPLETED\",t.Pending=\"PENDING\",t.Failed=\"FAILED\"}(d||(d={})),function(t){t.TRUSTLY=\"trustly\"}(v||(v={})),function(t){t.SUCCEEDED=\"succeeded\",t.FAILED=\"failed\",t.CANCELED=\"cancelled\",t.UNRECOGNIZED=\"unrecognized\"}(y||(y={})),function(t){t.Customer=\"CUSTOMER\",t.Merchant=\"MERCHANT\",t.Network=\"NETWORK\",t.Internal=\"INTERNAL\",t.Unknown=\"UNKNOWN\"}(g||(g={})),function(t){t.KountNotEnabled=\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"}(_||(_={})),function(t){t.Visa=\"visa\",t.Mastercard=\"mastercard\",t.AmericanExpress=\"american-express\",t.DinersClub=\"diners-club\",t.Discover=\"discover\",t.Jcb=\"jcb\",t.UnionPay=\"union-pay\",t.Maestro=\"maestro\",t.Elo=\"elo\",t.Mir=\"mir\",t.Hiper=\"hiper\",t.Hipercard=\"hipercard\"}(m||(m={}));var w,S,C,A=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{s(r.next(t))}catch(t){o(t)}}function u(t){try{s(r.throw(t))}catch(t){o(t)}}function s(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,u)}s((r=r.apply(t,e||[])).next())})};class O{constructor(t){this.braintreeScriptLoader=t}initialize(t){this.setClientToken(t)}deinitialize(){return A(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollector),this.dataCollector=void 0})}getClient(){return A(this,void 0,void 0,function*(){if(!this.client){const t=this.getClientTokenOrThrow(),e=yield this.braintreeScriptLoader.loadClient();this.client=yield e.create({authorization:t})}return this.client})}getDataCollectorOrThrow(t){return A(this,void 0,void 0,function*(){const e={deviceData:void 0,teardown:()=>Promise.resolve()};if(!this.dataCollector)try{const e=yield this.getClient(),n=yield this.braintreeScriptLoader.loadDataCollector(),r=Object.assign({client:e,kount:!0},t);this.dataCollector=yield n.create(r)}catch(t){if(function(t){return Boolean(\"object\"==typeof t&&null!==t&&(\"type\"in t||\"message\"in t||\"code\"in t))}(t)&&t.code===_.KountNotEnabled)return e;throw t}return this.dataCollector})}getBraintreeGooglePayment(){return A(this,void 0,void 0,function*(){if(!this.googlePayment){const[t,e]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadGooglePayment()]);this.googlePayment=yield e.create({client:t})}return this.googlePayment})}getBraintreeThreeDS(){return A(this,void 0,void 0,function*(){if(!this.threeDS){const[t,e]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]);this.threeDS=yield e.create({client:t,version:2})}return this.threeDS})}getBraintreeLocalPayment(t){return A(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment){const[e,n]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadLocalPayment()]);this.braintreeLocalPayment=yield new Promise((r,i)=>{n.create({client:e,merchantAccountId:t},(t,e)=>{t&&i(t),r(e)})})}return this.braintreeLocalPayment})}getUsBankAccount(){return A(this,void 0,void 0,function*(){if(!this.usBankAccount){const t=yield this.getClient(),e=yield this.braintreeScriptLoader.loadUsBankAccount();this.usBankAccount=yield e.create({client:t})}return this.usBankAccount})}getBraintreeVisaCheckout(){return this.visaCheckout||(this.visaCheckout=Promise.all([this.getClient(),this.braintreeScriptLoader.loadVisaCheckout()]).then(([t,e])=>e.create({client:t}))),this.visaCheckout}getVisaCheckoutSdk(t){return A(this,void 0,void 0,function*(){return this.visaCheckoutSDK||(this.visaCheckoutSDK=yield this.braintreeScriptLoader.loadVisaCheckoutSdk(t)),this.visaCheckoutSDK})}getVenmoCheckoutOrThrow(){return A(this,void 0,void 0,function*(){if(!this.braintreeVenmo){const t=yield this.getClient(),e=yield this.braintreeScriptLoader.loadVenmoCheckout(),n={client:t,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},r=yield e.create(n);if(!r.isBrowserSupported())throw new f;this.braintreeVenmo=r}return this.braintreeVenmo})}setClientToken(t){this.clientToken=t}getClientTokenOrThrow(){if(!this.clientToken)throw new b(h.PaymentNotInitialized);return this.clientToken}teardownModule(t){return t?t.teardown():Promise.resolve()}}class k extends l{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}!function(t){t.Sandbox=\"sandbox\",t.Production=\"production\"}(w||(w={})),function(t){t.Client=\"client\",t.DataCollector=\"dataCollector\",t.Fastlane=\"fastlane\",t.GooglePayment=\"googlePayment\",t.HostedFields=\"hostedFields\",t.LocalPayment=\"localPayment\",t.Paypal=\"paypal\",t.PaypalCheckout=\"paypalCheckout\",t.ThreeDSecure=\"threeDSecure\",t.UsBankAccount=\"usBankAccount\",t.Venmo=\"venmo\",t.VisaCheckout=\"visaCheckout\"}(S||(S={})),function(t){t.CardCode=\"cardCode\",t.CardCodeVerification=\"cardCodeVerification\",t.CardExpiry=\"cardExpiry\",t.CardName=\"cardName\",t.CardNumber=\"cardNumber\",t.CardNumberVerification=\"cardNumberVerification\"}(C||(C={}));const P={[s]:{[S.Client]:\"sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt\",[S.PaypalCheckout]:\"sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O\",[S.Paypal]:\"sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+\",[S.LocalPayment]:\"sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT\",[S.DataCollector]:\"sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV\",[S.UsBankAccount]:\"sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ\",[S.GooglePayment]:\"sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe\",[S.ThreeDSecure]:\"sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB\",[S.VisaCheckout]:\"sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT\",[S.Venmo]:\"sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov\",[S.HostedFields]:\"sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy\",[S.Fastlane]:\"sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa\"},[u]:{[S.Client]:\"sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO\",[S.PaypalCheckout]:\"sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/\",[S.Paypal]:\"sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt\",[S.LocalPayment]:\"sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH\",[S.DataCollector]:\"sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO\",[S.UsBankAccount]:\"sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW\",[S.GooglePayment]:\"sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO\",[S.ThreeDSecure]:\"sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym\",[S.VisaCheckout]:\"sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS\",[S.Venmo]:\"sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU\",[S.HostedFields]:\"sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P\",[S.Fastlane]:\"sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y\"},[a]:{[S.Client]:\"sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq\",[S.PaypalCheckout]:\"sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh\",[S.Paypal]:\"sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH\",[S.LocalPayment]:\"sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC\",[S.DataCollector]:\"sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc\",[S.UsBankAccount]:\"sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F\",[S.GooglePayment]:\"sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i\",[S.ThreeDSecure]:\"sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D\",[S.VisaCheckout]:\"sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv\",[S.Venmo]:\"sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz\",[S.HostedFields]:\"sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z\",[S.Fastlane]:\"sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr\"}};var I,x=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{s(r.next(t))}catch(t){o(t)}}function u(t){try{s(r.throw(t))}catch(t){o(t)}}function s(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,u)}s((r=r.apply(t,e||[])).next())})};class j{constructor(t,e,n){this.scriptLoader=t,this.braintreeHostWindow=e,this.braintreeSDKVersionManager=n}loadClient(){return x(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(S.Client,\"client.min.js\")})}loadFastlane(){return x(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(S.Fastlane,\"fastlane.min.js\")})}loadPaypalCheckout(){return x(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(S.PaypalCheckout,\"paypal-checkout.min.js\")})}loadPaypal(){return x(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(S.Paypal,\"paypal.min.js\")})}loadLocalPayment(){return x(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(S.LocalPayment,\"local-payment.min.js\")})}loadDataCollector(){return x(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(S.DataCollector,\"data-collector.min.js\")})}loadUsBankAccount(){return x(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(S.UsBankAccount,\"us-bank-account.min.js\")})}loadGooglePayment(){return x(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(S.GooglePayment,\"google-payment.min.js\")})}load3DS(){return x(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(S.ThreeDSecure,\"three-d-secure.min.js\")})}loadVisaCheckout(){return this.loadBraintreeModuleOrThrow(S.VisaCheckout,\"visa-checkout.min.js\")}loadVenmoCheckout(){return this.loadBraintreeModuleOrThrow(S.Venmo,\"venmo.min.js\")}loadHostedFields(){return x(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(S.HostedFields,\"hosted-fields.min.js\")})}loadVisaCheckoutSdk(t){return x(this,void 0,void 0,function*(){if(this.braintreeHostWindow.V)return this.braintreeHostWindow.V;const e=t?\"sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm\":\"sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6\";return this.scriptLoader.loadScript(`//${t?\"sandbox-\":\"\"}assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,{async:!0,attributes:{integrity:e,crossorigin:\"anonymous\"}}).then(()=>{if(!this.braintreeHostWindow.V)throw new k;return this.braintreeHostWindow.V})})}loadBraintreeModuleOrThrow(t,e){return x(this,void 0,void 0,function*(){let n=this.getBraintreeModule(t);if(n)return n;const r=this.braintreeSDKVersionManager.getSDKVersion(),i=`//js.braintreegateway.com/web/${r}/js/${e}`,o=r in P?this.getIntegrityValuesByModuleName(t,r):void 0;if(yield this.scriptLoader.loadScript(i,o?{async:!0,attributes:{integrity:o,crossorigin:\"anonymous\"}}:void 0),n=this.getBraintreeModule(t),!n)throw new k;return n})}getBraintreeModule(t){var e;return null===(e=this.braintreeHostWindow.braintree)||void 0===e?void 0:e[t]}getIntegrityValuesByModuleName(t,e){const n=P[e][t];if(!n)throw new Error(\"Unexpected fileName value\");return n}}function T(t,e){return Object.assign(t,{resolveIds:e})}class E extends l{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class M extends E{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}class N extends l{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class R extends l{constructor(t){super(t||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}!function(t){t.BRAINTREE=\"braintree\",t.BRAINTREE_FASTLANE=\"braintreeacceleratedcheckout\"}(I||(I={}));var z,L=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{s(r.next(t))}catch(t){o(t)}}function u(t){try{s(r.throw(t))}catch(t){o(t)}}function s(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,u)}s((r=r.apply(t,e||[])).next())})};!function(t){t.Shipping=\"Shipping\",t.Subtotal=\"Subtotal\",t.StoreCredit=\"Store Credit\"}(z||(z={}));class D{constructor(t,e,n,r,i){this._requestSender=t,this._paymentIntegrationService=e,this._sessionFactory=n,this._braintreeSdk=r,this._applePayScriptLoader=i,this._shippingLabel=z.Shipping,this._subTotalLabel=z.Subtotal,this._storeCreditLabel=z.StoreCredit}initialize(t){var e,n,r,i;return L(this,void 0,void 0,function*(){if(!(null==t?void 0:t.methodId))throw new E('Unable to submit payment because \"options.methodId\" argument is not provided.');const{methodId:o}=t;yield this._applePayScriptLoader.loadSdk(),this._shippingLabel=(null===(e=t.applepay)||void 0===e?void 0:e.shippingLabel)||z.Shipping,this._subTotalLabel=(null===(n=t.applepay)||void 0===n?void 0:n.subtotalLabel)||z.Subtotal,this._storeCreditLabel=(null===(r=t.applepay)||void 0===r?void 0:r.storeCreditLabel)||z.StoreCredit;const a=(yield this._paymentIntegrationService.loadPaymentMethod(o)).getPaymentMethodOrThrow(o);(null===(i=a.initializationData)||void 0===i?void 0:i.gateway)===I.BRAINTREE&&a.clientToken&&this._braintreeSdk.initialize(a.clientToken)})}execute(t,e){return L(this,void 0,void 0,function*(){const{payment:n}=t,r=this._paymentIntegrationService.getState();if(!n)throw new M([\"payment\"]);const{methodId:i}=n,o=r.getPaymentMethodOrThrow(i),a=this._getBaseRequest(r,o),u=this._sessionFactory.create(a);return yield this._paymentIntegrationService.submitOrder({useStoreCredit:t.useStoreCredit},e),u.begin(),new Promise((t,e)=>{this._handleApplePayEvents(u,o,{resolve:t,reject:e})})})}finalize(){return Promise.reject(new N)}deinitialize(){return Promise.resolve()}_getBaseRequest(t,e){const n=t.getCheckoutOrThrow(),r=t.getCartOrThrow(),i=t.getStoreConfigOrThrow(),{storeProfile:{storeCountryCode:o,storeName:a}}=i,{currency:{code:u,decimalPlaces:s}}=r,{initializationData:{merchantCapabilities:c,supportedNetworks:l}}=e,{grandTotal:f,isStoreCreditApplied:h,outstandingBalance:p}=n,d=[{label:this._subTotalLabel,amount:`${n.subtotal.toFixed(s)}`}];if(n.taxes.forEach(t=>d.push({label:t.name,amount:`${t.amount.toFixed(s)}`})),d.push({label:this._shippingLabel,amount:`${n.shippingCostTotal.toFixed(s)}`}),h){const{storeCredit:e}=t.getCustomerOrThrow();d.push({label:this._storeCreditLabel,amount:`-${Math.min(f,e).toFixed(s)}`})}return{countryCode:o,currencyCode:u,merchantCapabilities:c,supportedNetworks:l,lineItems:d,total:{label:a,amount:`${p.toFixed(s)}`,type:\"final\"}}}_handleApplePayEvents(t,e,n){t.onvalidatemerchant=n=>L(this,void 0,void 0,function*(){try{const{body:r}=yield this._onValidateMerchant(e,n);t.completeMerchantValidation(r)}catch(t){throw new Error(\"Merchant validation failed\")}}),t.oncancel=()=>L(this,void 0,void 0,function*(){return n.reject(new R(\"Continue with applepay\"))}),t.onpaymentauthorized=r=>this._onPaymentAuthorized(r,t,e,n)}_onValidateMerchant(t,e){return L(this,void 0,void 0,function*(){const n=[`validationUrl=${e.validationURL}`,`merchantIdentifier=${t.initializationData.merchantId}`,`displayName=${t.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${t.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:n})})}_onPaymentAuthorized(t,e,n,r){var i;return L(this,void 0,void 0,function*(){const{token:o}=t.payment;let a;(null===(i=n.initializationData)||void 0===i?void 0:i.gateway)===I.BRAINTREE&&(a=yield this._getBraintreeDeviceData());const u={methodId:n.id,paymentData:{deviceSessionId:a,formattedPayload:{apple_pay_token:{payment_data:o.paymentData,payment_method:o.paymentMethod,transaction_id:o.transactionIdentifier}}}};try{return yield this._paymentIntegrationService.submitPayment(u),e.completePayment(ApplePaySession.STATUS_SUCCESS),r.resolve()}catch(t){return e.completePayment(ApplePaySession.STATUS_FAILURE),r.reject(new b(h.PaymentNotInitialized))}})}_getBraintreeDeviceData(){return L(this,void 0,void 0,function*(){try{const{deviceData:t}=yield this._braintreeSdk.getDataCollectorOrThrow();return t}catch(t){}})}}function B(t){if(!function(t){return\"ApplePaySession\"in t}(t))throw new Error(\"Apple pay is not supported\")}class U{create(t){return B(window),new ApplePaySession(1,t)}}class F{constructor(t){this.scriptLoader=t,this.sdkVersion=\"1.latest\"}loadSdk(){return t=this,e=void 0,r=function*(){(function(t){return\"ApplePaySDK\"in t})(window)||(yield this.scriptLoader.loadScript(`https://applepay.cdn-apple.com/jsapi/${this.sdkVersion}/apple-pay-sdk.js`),B(window))},new((n=void 0)||(n=Promise))(function(i,o){function a(t){try{s(r.next(t))}catch(t){o(t)}}function u(t){try{s(r.throw(t))}catch(t){o(t)}}function s(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,u)}s((r=r.apply(t,e||[])).next())});var t,e,n,r}}const q=T(n=>{const{getHost:r}=n.getState(),i=new c(n);return new D((0,t.createRequestSender)({host:r()}),n,new U,new O(new j((0,e.vQ)(),window,i)),new F(new e.B2))},[{id:\"applepay\"}]);var W;!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(W||(W={}));class V extends l{constructor(t){super(function(t){switch(t){case W.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case W.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case W.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case W.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case W.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case W.MissingCheckoutConfig:case W.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case W.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case W.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case W.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case W.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case W.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case W.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class $ extends l{constructor(t){super(t||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var H,G=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{s(r.next(t))}catch(t){o(t)}}function u(t){try{s(r.throw(t))}catch(t){o(t)}}function s(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,u)}s((r=r.apply(t,e||[])).next())})};!function(t){t.Subtotal=\"Subtotal\",t.Shipping=\"Shipping\"}(H||(H={}));class K{constructor(t,e,n,r,o){this._requestSender=t,this._paymentIntegrationService=e,this._sessionFactory=n,this._braintreeSdk=r,this._applePayScriptLoader=o,this._onAuthorizeCallback=i.noop,this._onError=i.noop,this._onClick=i.noop,this._subTotalLabel=H.Subtotal,this._shippingLabel=H.Shipping,this._hasApplePaySession=!1}initialize(t){var e;return G(this,void 0,void 0,function*(){const{methodId:n,applepay:r}=t;if(!n||!r)throw new V(W.MissingPaymentMethod);const{container:o,shippingLabel:a,subtotalLabel:u,onError:s=i.noop,onClick:c=i.noop,onPaymentAuthorize:l}=r;this._shippingLabel=a||H.Shipping,this._subTotalLabel=u||H.Subtotal,this._onAuthorizeCallback=l,this._onError=s,this._onClick=c;let f=this._paymentIntegrationService.getState();yield this._applePayScriptLoader.loadSdk();try{this._paymentMethod=f.getPaymentMethodOrThrow(n)}catch(t){f=yield this._paymentIntegrationService.loadPaymentMethod(n),this._paymentMethod=f.getPaymentMethodOrThrow(n)}yield this._paymentIntegrationService.verifyCheckoutSpamProtection(),this._applePayButton=this._createButton(o),this._applePayButton.addEventListener(\"click\",this._handleWalletButtonClick.bind(this)),(null===(e=this._paymentMethod.initializationData)||void 0===e?void 0:e.gateway)===I.BRAINTREE&&this._paymentMethod.clientToken&&this._braintreeSdk.initialize(this._paymentMethod.clientToken)})}deinitialize(){return Promise.resolve()}signIn(){throw new $('In order to sign in via Apple, the shopper must click on \"Apple Pay\" button.')}signOut(){throw new $(\"Need to do signout via apple.\")}executePaymentMethodCheckout(t){var e;return null===(e=null==t?void 0:t.continueWithCheckoutCallback)||void 0===e||e.call(t),Promise.resolve()}_createButton(t){const e=document.getElementById(t);if(!e)throw new E(\"Unable to create sign-in button without valid container ID.\");const n=this._createApplePayButtonElement();return e.appendChild(n),n}_createApplePayButtonElement(){const t=document.createElement(\"apple-pay-button\");return t.setAttribute(\"buttonstyle\",\"black\"),t.setAttribute(\"type\",\"plain\"),t.setAttribute(\"style\",\"--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;\"),t}_handleWalletButtonClick(t){if(t.preventDefault(),this._hasApplePaySession)return;this._onClick();const e=this._paymentIntegrationService.getState(),n=e.getCartOrThrow(),r=e.getStoreConfigOrThrow(),i=e.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new V(W.MissingPaymentMethod);const o=this._getBaseRequest(n,i,r,this._paymentMethod),a=this._sessionFactory.create(o);this._handleApplePayEvents(a,this._paymentMethod,r),a.begin(),this._hasApplePaySession=!0}_getBaseRequest(t,e,n,r){var i;const{storeProfile:{storeCountryCode:o,storeName:a}}=n,{currency:{code:u,decimalPlaces:s}}=t,{initializationData:{merchantCapabilities:c,supportedNetworks:l}}=r,f=t.lineItems.physicalItems.length>0,h={requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"],countryCode:o,currencyCode:u,merchantCapabilities:c,supportedNetworks:l,lineItems:[],total:f?{label:a,amount:`${e.grandTotal.toFixed(s)}`,type:\"pending\"}:{label:a,amount:`${e.grandTotal.toFixed(s)}`,type:\"final\"}};if(f)null===(i=h.requiredShippingContactFields)||void 0===i||i.push(\"postalAddress\");else{const t=[{label:this._subTotalLabel,amount:`${e.subtotal.toFixed(s)}`}];e.taxes.forEach(e=>t.push({label:e.name,amount:`${e.amount.toFixed(s)}`})),h.lineItems=t}return h}_handleApplePayEvents(t,e,n){t.onvalidatemerchant=n=>G(this,void 0,void 0,function*(){try{const{body:r}=yield this._onValidateMerchant(e,n);t.completeMerchantValidation(r)}catch(t){this._onError(t)}}),t.onshippingcontactselected=e=>G(this,void 0,void 0,function*(){return this._handleShippingContactSelected(t,n,e)}),t.onshippingmethodselected=e=>G(this,void 0,void 0,function*(){return this._handleShippingMethodSelected(t,n,e)}),t.oncancel=()=>G(this,void 0,void 0,function*(){this._hasApplePaySession=!1;try{const t=`/remote-checkout/${e.id}/signout`;return yield this._requestSender.get(t),yield this._paymentIntegrationService.loadCheckout()}catch(t){return this._onError(new R)}}),t.onpaymentauthorized=n=>G(this,void 0,void 0,function*(){return this._onPaymentAuthorized(n,t,e)})}_handleShippingContactSelected(t,e,n){var r;return G(this,void 0,void 0,function*(){const i=this._transformContactToAddress(n.shippingContact);try{yield this._paymentIntegrationService.updateShippingAddress(i)}catch(e){return t.abort(),this._hasApplePaySession=!1,this._onError(e)}const{storeProfile:{storeName:o}}=e;let a=this._paymentIntegrationService.getState();const{currency:{decimalPlaces:u}}=a.getCartOrThrow();let s=a.getCheckoutOrThrow();const c=null===(r=s.consignments[0].selectedShippingOption)||void 0===r?void 0:r.id,l=s.consignments[0].availableShippingOptions,f=null==l?void 0:l.find(({id:t})=>t===c),h=null==l?void 0:l.filter(t=>t.id!==c),p=f?[{label:f.description,amount:`${f.cost.toFixed(u)}`,detail:f.additionalDescription,identifier:f.id}]:[];if(h&&[...h.filter(t=>t.isRecommended),...h.filter(t=>!t.isRecommended)].forEach(t=>p.push({label:t.description,amount:`${t.cost.toFixed(u)}`,detail:t.additionalDescription,identifier:t.id})),!(l instanceof Array))throw new Error(\"Shipping options not available.\");if(0===l.length)return void t.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:\"pending\",label:o,amount:`${s.grandTotal.toFixed(u)}`},[]);const d=l.find(t=>t.isRecommended),v=d?d.id:l[0].id,y=f?f.id:v;try{yield this._updateShippingOption(y)}catch(t){return this._onError(t)}a=this._paymentIntegrationService.getState(),s=a.getCheckoutOrThrow(),t.completeShippingContactSelection({newShippingMethods:p,newTotal:{type:\"final\",label:o,amount:`${s.grandTotal.toFixed(u)}`},newLineItems:this._getUpdatedLineItems(s,u)})})}_handleShippingMethodSelected(t,e,n){return G(this,void 0,void 0,function*(){const{storeProfile:{storeName:r}}=e,{shippingMethod:{identifier:i}}=n;try{yield this._updateShippingOption(i)}catch(e){return t.abort(),this._hasApplePaySession=!1,this._onError(e)}const o=this._paymentIntegrationService.getState(),{currency:{decimalPlaces:a}}=o.getCartOrThrow(),u=o.getCheckoutOrThrow();t.completeShippingMethodSelection({newTotal:{type:\"final\",label:r,amount:`${u.grandTotal.toFixed(a)}`},newLineItems:this._getUpdatedLineItems(u,a)})})}_getUpdatedLineItems(t,e){const n=[{label:this._subTotalLabel,amount:`${t.subtotal.toFixed(e)}`}];return t.taxes.forEach(t=>n.push({label:t.name,amount:`${t.amount.toFixed(e)}`})),n.push({label:this._shippingLabel,amount:`${t.shippingCostTotal.toFixed(e)}`}),n}_updateShippingOption(t){return G(this,void 0,void 0,function*(){return this._paymentIntegrationService.selectShippingOption(t)})}_onValidateMerchant(t,e){return G(this,void 0,void 0,function*(){const n=[`validationUrl=${e.validationURL}`,`merchantIdentifier=${t.initializationData.merchantId}`,`displayName=${t.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${t.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:n})})}_onPaymentAuthorized(t,e,n){var r;return G(this,void 0,void 0,function*(){const{token:i,billingContact:o,shippingContact:a}=t.payment,u=this._paymentIntegrationService.getState().getCartOrThrow().lineItems.physicalItems.length>0;let s;(null===(r=n.initializationData)||void 0===r?void 0:r.gateway)===I.BRAINTREE&&(s=yield this._getBraintreeDeviceData());const c={methodId:n.id,paymentData:{deviceSessionId:s,formattedPayload:{apple_pay_token:{payment_data:i.paymentData,payment_method:i.paymentMethod,transaction_id:i.transactionIdentifier}}}},l=this._transformContactToAddress(o),f=this._transformContactToAddress(a),h=null==a?void 0:a.emailAddress,p=(null==a?void 0:a.phoneNumber)||\"\";try{return yield this._paymentIntegrationService.updateBillingAddress(Object.assign(Object.assign({},l),{email:h,phone:p})),u&&(yield this._paymentIntegrationService.updateShippingAddress(f)),yield this._paymentIntegrationService.submitOrder({useStoreCredit:!1}),yield this._paymentIntegrationService.submitPayment(c),e.completePayment(ApplePaySession.STATUS_SUCCESS),this._onAuthorizeCallback()}catch(t){return e.completePayment(ApplePaySession.STATUS_FAILURE),this._onError(t)}})}_transformContactToAddress(t){return{firstName:(null==t?void 0:t.givenName)||\"\",lastName:(null==t?void 0:t.familyName)||\"\",city:(null==t?void 0:t.locality)||\"\",company:\"\",address1:(null==t?void 0:t.addressLines)&&t.addressLines[0]||\"\",address2:(null==t?void 0:t.addressLines)&&t.addressLines[1]||\"\",postalCode:(null==t?void 0:t.postalCode)||\"\",countryCode:(null==t?void 0:t.countryCode)||\"\",phone:(null==t?void 0:t.phoneNumber)||\"\",stateOrProvince:(null==t?void 0:t.administrativeArea)||\"\",stateOrProvinceCode:(null==t?void 0:t.administrativeArea)||\"\",customFields:[]}}_getBraintreeDeviceData(){return G(this,void 0,void 0,function*(){try{const{deviceData:t}=yield this._braintreeSdk.getDataCollectorOrThrow();return t}catch(t){}})}}const X=T(n=>{const{getHost:r}=n.getState(),i=new c(n);return new K((0,t.createRequestSender)({host:r()}),n,new U,new O(new j((0,e.vQ)(),window,i)),new F(new e.B2))},[{id:\"applepay\"}]);class Z extends l{constructor(t){super(t||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}var Y,Q,J=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{s(r.next(t))}catch(t){o(t)}}function u(t){try{s(r.throw(t))}catch(t){o(t)}}function s(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,u)}s((r=r.apply(t,e||[])).next())})};!function(t){t.Subtotal=\"Subtotal\",t.Shipping=\"Shipping\"}(Y||(Y={})),function(t){t.Black=\"black\",t.White=\"white\",t.WhiteBorder=\"white-border\"}(Q||(Q={}));class tt{constructor(t,e,n,r,o){this._requestSender=t,this._paymentIntegrationService=e,this._sessionFactory=n,this._braintreeSdk=r,this._applePayScriptLoader=o,this._onAuthorizeCallback=i.noop,this._subTotalLabel=Y.Subtotal,this._shippingLabel=Y.Shipping}initialize(t){var e,n;return J(this,void 0,void 0,function*(){const{methodId:r,containerId:i,applepay:o}=t;if(!r||!o)throw new V(W.MissingPaymentMethod);yield this._applePayScriptLoader.loadSdk();const{onPaymentAuthorize:a,buyNowInitializeOptions:u,requiresShipping:s}=o;this._requiresShipping=s,this._buyNowInitializeOptions=u,this._onAuthorizeCallback=a,u||(yield this._paymentIntegrationService.loadDefaultCheckout()),yield this._paymentIntegrationService.loadPaymentMethod(r);const c=this._paymentIntegrationService.getState();return this._paymentMethod=c.getPaymentMethodOrThrow(r),c.getCart()&&(yield this._paymentIntegrationService.verifyCheckoutSpamProtection()),(null===(e=this._paymentMethod.initializationData)||void 0===e?void 0:e.gateway)===I.BRAINTREE&&this._paymentMethod.clientToken&&this._braintreeSdk.initialize(this._paymentMethod.clientToken),this._applePayButton=this._createButton(i,null===(n=this._paymentMethod.initializationData)||void 0===n?void 0:n.styleOption),this._applePayButton.addEventListener(\"click\",this._handleWalletButtonClick.bind(this)),Promise.resolve()})}deinitialize(){return Promise.resolve()}_createButton(t,e){const n=document.getElementById(t);if(!n)throw new E(\"Unable to create wallet button without valid container ID.\");const r=this._createApplePayButtonElement(e);return n.appendChild(r),r}_createApplePayButtonElement(t){const e=document.createElement(\"apple-pay-button\");return e.setAttribute(\"buttonstyle\",(t=>{switch(t){case Q.White:return\"white\";case Q.WhiteBorder:return\"white-outline\";case Q.Black:default:return\"black\"}})(t)),e.setAttribute(\"type\",\"plain\"),e.setAttribute(\"style\",\"--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;\"),e}_handleWalletButtonClick(t){var e;return J(this,void 0,void 0,function*(){if(t.preventDefault(),!this._paymentMethod||!this._paymentMethod.initializationData)throw new V(W.MissingPaymentMethod);if(this._buyNowInitializeOptions&&\"function\"==typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody){const{countryCode:t,currencyCode:n,merchantCapabilities:r,supportedNetworks:i,storeName:o}=this._paymentMethod.initializationData,a=this._getRequestWithEmptyTotal(t,n,i,r);this._requiresShipping&&(null===(e=a.requiredShippingContactFields)||void 0===e||e.push(\"postalAddress\"));const u=this._sessionFactory.create(a);this._handleApplePayEvents(u,this._paymentMethod,o),u.begin()}else{const t=this._paymentIntegrationService.getState(),e=t.getCartOrThrow(),n=t.getStoreConfigOrThrow(),r=t.getCheckoutOrThrow(),i=this._getBaseRequest(e,r,n,this._paymentMethod),o=this._sessionFactory.create(i);this._handleApplePayEvents(o,this._paymentMethod,n.storeProfile.storeName),o.begin()}})}_getRequestWithEmptyTotal(t,e,n,r){return{countryCode:t,currencyCode:e,supportedNetworks:n,merchantCapabilities:r,total:{label:\"\",amount:\"0\",type:\"pending\"},requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"]}}_getBaseRequest(t,e,n,r){var i;const{storeProfile:{storeCountryCode:o,storeName:a}}=n,{currency:{code:u,decimalPlaces:s}}=t,{initializationData:{merchantCapabilities:c,supportedNetworks:l}}=r,f=t.lineItems.physicalItems.length>0,h={requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"],countryCode:o,currencyCode:u,merchantCapabilities:c,supportedNetworks:l,lineItems:[],total:f?{label:a,amount:`${e.grandTotal.toFixed(s)}`,type:\"pending\"}:{label:a,amount:`${e.grandTotal.toFixed(s)}`,type:\"final\"}};if(f)null===(i=h.requiredShippingContactFields)||void 0===i||i.push(\"postalAddress\");else{const t=[{label:this._subTotalLabel,amount:`${e.subtotal.toFixed(s)}`}];e.taxes.forEach(e=>t.push({label:e.name,amount:`${e.amount.toFixed(s)}`})),h.lineItems=t}return h}_handleApplePayEvents(t,e,n){t.onvalidatemerchant=n=>J(this,void 0,void 0,function*(){try{const{body:r}=yield this._onValidateMerchant(e,n);t.completeMerchantValidation(r)}catch(t){throw new Error(\"Merchant validation failed\")}}),this._buyNowInitializeOptions&&!this._requiresShipping&&(t.onpaymentmethodselected=()=>J(this,void 0,void 0,function*(){yield this._createBuyNowCart(),this._handlePaymentMethodSelected(t)})),t.onshippingcontactselected=e=>J(this,void 0,void 0,function*(){this._buyNowInitializeOptions&&this._requiresShipping&&(yield this._createBuyNowCart()),yield this._handleShippingContactSelected(t,n,e)}),t.onshippingmethodselected=e=>J(this,void 0,void 0,function*(){yield this._handleShippingMethodSelected(t,n,e)}),t.oncancel=()=>J(this,void 0,void 0,function*(){try{const t=`/remote-checkout/${e.id}/signout`;return yield this._requestSender.get(t),yield this._paymentIntegrationService.loadCheckout()}catch(t){throw new R}}),t.onpaymentauthorized=n=>J(this,void 0,void 0,function*(){return this._onPaymentAuthorized(n,t,e)})}_createBuyNowCart(){var t,e;return J(this,void 0,void 0,function*(){try{const n=null===(e=null===(t=this._buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody)||void 0===e?void 0:e.call(t);if(!n)throw new V(W.MissingCart);const r=yield this._paymentIntegrationService.createBuyNowCart(n);yield this._paymentIntegrationService.loadCheckout(r.id);const i=this._paymentIntegrationService.getState(),{shouldExecuteSpamCheck:o}=i.getCheckoutOrThrow();o&&(yield this._paymentIntegrationService.verifyCheckoutSpamProtection())}catch(t){throw new Z}})}_handlePaymentMethodSelected(t){const e=this._paymentIntegrationService.getState(),n=e.getCartOrThrow(),r=e.getStoreConfigOrThrow(),i=e.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new V(W.MissingPaymentMethod);const o=this._getBaseRequest(n,i,r,this._paymentMethod);delete o.total.type,t.completePaymentMethodSelection({newTotal:o.total,newLineItems:o.lineItems})}_handleShippingContactSelected(t,e,n){var r;return J(this,void 0,void 0,function*(){const i=this._transformContactToAddress(n.shippingContact);try{yield this._paymentIntegrationService.updateShippingAddress(i)}catch(e){throw t.abort(),new Error(\"Shipping address update failed\")}let o=this._paymentIntegrationService.getState();const{currency:{decimalPlaces:a}}=o.getCartOrThrow();let u=o.getCheckoutOrThrow();const s=null===(r=u.consignments[0].selectedShippingOption)||void 0===r?void 0:r.id,c=u.consignments[0].availableShippingOptions,l=null==c?void 0:c.find(({id:t})=>t===s),f=null==c?void 0:c.filter(t=>t.id!==s),h=l?[{label:l.description,amount:`${l.cost.toFixed(a)}`,detail:l.additionalDescription,identifier:l.id}]:[];if(f&&[...f.filter(t=>t.isRecommended),...f.filter(t=>!t.isRecommended)].forEach(t=>h.push({label:t.description,amount:`${t.cost.toFixed(a)}`,detail:t.additionalDescription,identifier:t.id})),!(c instanceof Array))throw new Error(\"Shipping options not available.\");if(0===c.length)return void t.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:\"pending\",label:e,amount:`${u.grandTotal.toFixed(a)}`},[]);const p=c.find(t=>t.isRecommended),d=p?p.id:c[0].id,v=l?l.id:d;try{yield this._updateShippingOption(v)}catch(t){throw new Error(\"Shipping options update failed\")}o=this._paymentIntegrationService.getState(),u=o.getCheckoutOrThrow(),t.completeShippingContactSelection({newShippingMethods:h,newTotal:{type:\"final\",label:e,amount:`${u.grandTotal.toFixed(a)}`},newLineItems:this._getUpdatedLineItems(u,a)})})}_handleShippingMethodSelected(t,e,n){return J(this,void 0,void 0,function*(){const{shippingMethod:{identifier:r}}=n;try{yield this._updateShippingOption(r)}catch(e){throw t.abort(),new Error(\"Shipping option selection update failed.\")}const i=this._paymentIntegrationService.getState(),{currency:{decimalPlaces:o}}=i.getCartOrThrow(),a=i.getCheckoutOrThrow();t.completeShippingMethodSelection({newTotal:{type:\"final\",label:e,amount:`${a.grandTotal.toFixed(o)}`},newLineItems:this._getUpdatedLineItems(a,o)})})}_getUpdatedLineItems(t,e){const n=[{label:this._subTotalLabel,amount:`${t.subtotal.toFixed(e)}`}];return t.taxes.forEach(t=>n.push({label:t.name,amount:`${t.amount.toFixed(e)}`})),n.push({label:this._shippingLabel,amount:`${t.shippingCostTotal.toFixed(e)}`}),n}_updateShippingOption(t){return J(this,void 0,void 0,function*(){return this._paymentIntegrationService.selectShippingOption(t)})}_onValidateMerchant(t,e){return J(this,void 0,void 0,function*(){const n=[`validationUrl=${e.validationURL}`,`merchantIdentifier=${t.initializationData.merchantId}`,`displayName=${t.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${t.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:n})})}_onPaymentAuthorized(t,e,n){var r;return J(this,void 0,void 0,function*(){const{token:i,billingContact:o,shippingContact:a}=t.payment,u=this._paymentIntegrationService.getState().getCartOrThrow().lineItems.physicalItems.length>0;let s;(null===(r=n.initializationData)||void 0===r?void 0:r.gateway)===I.BRAINTREE&&(s=yield this._getBraintreeDeviceData());const c={methodId:n.id,paymentData:{deviceSessionId:s,formattedPayload:{apple_pay_token:{payment_data:i.paymentData,payment_method:i.paymentMethod,transaction_id:i.transactionIdentifier}}}},l=this._transformContactToAddress(o),f=this._transformContactToAddress(a),h=null==a?void 0:a.emailAddress,p=(null==a?void 0:a.phoneNumber)||\"\";try{return yield this._paymentIntegrationService.updateBillingAddress(Object.assign(Object.assign({},l),{email:h,phone:p})),u&&(yield this._paymentIntegrationService.updateShippingAddress(f)),yield this._paymentIntegrationService.submitOrder({useStoreCredit:!1}),yield this._paymentIntegrationService.submitPayment(c),e.completePayment(ApplePaySession.STATUS_SUCCESS),this._onAuthorizeCallback()}catch(t){throw e.completePayment(ApplePaySession.STATUS_FAILURE),new Error(\"Payment cannot complete\")}})}_transformContactToAddress(t){return{firstName:(null==t?void 0:t.givenName)||\"\",lastName:(null==t?void 0:t.familyName)||\"\",city:(null==t?void 0:t.locality)||\"\",company:\"\",address1:(null==t?void 0:t.addressLines)&&t.addressLines[0]||\"\",address2:(null==t?void 0:t.addressLines)&&t.addressLines[1]||\"\",postalCode:(null==t?void 0:t.postalCode)||\"\",countryCode:(null==t?void 0:t.countryCode)||\"\",phone:(null==t?void 0:t.phoneNumber)||\"\",stateOrProvince:(null==t?void 0:t.administrativeArea)||\"\",stateOrProvinceCode:(null==t?void 0:t.administrativeArea)||\"\",customFields:[]}}_getBraintreeDeviceData(){return J(this,void 0,void 0,function*(){try{const{deviceData:t}=yield this._braintreeSdk.getDataCollectorOrThrow();return t}catch(t){}})}}const et=T(n=>{const{getHost:r}=n.getState(),i=new c(n);return new tt((0,t.createRequestSender)({host:r()}),n,new U,new O(new j((0,e.vQ)(),window,i)),new F(new e.B2))},[{id:\"applepay\"}])})(),module.exports=r})();\n//# sourceMappingURL=apple-pay.js.map"
  },
  {
    "path": "dist/cjs/integrations/bigcommerce-payments.js",
    "content": "(()=>{var e={9165(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){var t=new r.default;return new i.default(t,e)};var r=n(9828),i=n(5470)},9828(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.build=function(e,t,n){var r=this,i=document.createElement(\"form\");return i.style.display=\"none\",i.setAttribute(\"action\",e),i.setAttribute(\"method\",\"POST\"),i.setAttribute(\"target\",n||\"_top\"),Object.keys(t).forEach(function(e){var n=t[e];i.appendChild(r._createInput(n,e))}),i},e.prototype._createInput=function(e,t){var n=document.createElement(\"input\");return n.setAttribute(\"name\",t),n.setAttribute(\"type\",\"hidden\"),n.setAttribute(\"value\",e),n},e}();t.default=n},5470(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(9783),i=function(){function e(e,t){this._formBuilder=e,this._options=t}return e.prototype.postForm=function(e,t,n,r){var i=this._formBuilder.build(this._prependHost(e),t,r);window.addEventListener(\"unload\",function e(){window.removeEventListener(\"unload\",e),n&&n()}),document.body.appendChild(i),i.submit()},e.prototype._prependHost=function(e){return this._options&&this._options.host&&!(0,r.isAbsoluteUrl)(e)?(0,r.joinPaths)(this._options.host,e):e},e}();t.default=i},8686(e,t,n){\"use strict\";t.createFormPoster=void 0;var r=n(9165);Object.defineProperty(t,\"createFormPoster\",{enumerable:!0,get:function(){return r.default}});n(5470)},9783(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isAbsoluteUrl=function(e){return/^https?:\\/\\//.test(e)},t.joinPaths=function(e,t){return\"\".concat((n=e,n.replace(/\\/$/,\"\")),\"/\").concat(function(e){return e.replace(/^\\//,\"\")}(t));var n}},4325(e,t,n){\"use strict\";n.d(t,{g:()=>i});var r=n(5889),i=function(){function e(){this._cache={}}return e.prototype.read=function(e,t){var n=this.getKey(e,t.params);return this._cache[n]||null},e.prototype.write=function(e,t,n){var r=this.getKey(e,t.params);this._cache[r]=n},e.prototype.getKey=function(e,t){return void 0===t&&(t={}),0===Object.keys(t).length?e:\"\".concat(e,\"?\").concat(r.stringify(t))},e}()},321(e,t,n){\"use strict\";n.d(t,{A:()=>s});var r=n(168),i=n(1675),o=n(5861),a=n(4670);function s(e){return new a.A(new o.A,new i.A,r,e)}},6889(e,t,n){\"use strict\";n.d(t,{A:()=>i});var r=n(2024);function i(e){return new r.A(e)}},4043(e,t,n){\"use strict\";n.r(t),n.d(t,{RequestSender:()=>o.A,Timeout:()=>a.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),a=n(2024)},4843(e,t,n){\"use strict\";function r(e){return!!e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof e.then}n.d(t,{A:()=>r})},1675(e,t,n){\"use strict\";n.d(t,{A:()=>s});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,a=/application\\/x-www-form-urlencoded/;const s=function(){function e(){}return e.prototype.toRequestBody=function(e){var t=e.headers?this._getHeader(e.headers,\"Content-Type\"):\"\";if(e.body){if(o.test(t))return JSON.stringify(e.body);if(a.test(t))return(0,i.A)(e.body)}return e.body},e.prototype.toResponse=function(e){var t=this._parseResponseHeaders(e.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in e?e.response:e.responseText,t),headers:t,status:e.status,statusText:e.statusText}},e.prototype._parseResponseBody=function(e,t){var n=this._getHeader(t,\"Content-Type\");return e&&o.test(n)?JSON.parse(e):e},e.prototype._parseResponseHeaders=function(e){return(e?e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(e,t){var n,i=t.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},e),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):e},{})},e.prototype._getHeader=function(e,t){return e&&t&&(e[t]||e[t.toLowerCase()])||\"\"},e}()},5861(e,t,n){\"use strict\";n.d(t,{A:()=>i});var r=n(5889);const i=function(){function e(){}return e.prototype.createRequest=function(e,t){var n=new XMLHttpRequest;return this._configureRequest(n,e,t),n},e.prototype._configureRequest=function(e,t,n){void 0===n&&(n={}),e.open(n.method||\"GET\",this._formatUrl(t,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(e,n.headers),\"boolean\"==typeof n.credentials&&(e.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(e.timeout=n.timeout)},e.prototype._configureRequestHeaders=function(e,t){Object.keys(t).filter(function(e){return null!==t[e]}).forEach(function(n){e.setRequestHeader(n,t[n])})},e.prototype._formatUrl=function(e,t,n){return void 0===n&&(n=!0),t&&0!==Object.keys(t).length?\"\".concat(e,\"?\").concat(r.stringify(t,{encode:n})):e},e}()},4670(e,t,n){\"use strict\";n.d(t,{A:()=>u});var r=n(1635),i=n(35),o=n.n(i),a=n(4325),s=n(4843),c=n(2024);const u=function(){function e(e,t,n,r){void 0===r&&(r={}),this._requestFactory=e,this._payloadTransformer=t,this._cookie=n,this._options=r,this._cache=this._options.cache||new a.g}return e.prototype.sendRequest=function(e,t){var n=this,r=this._mergeDefaultOptions(e,t),i=this._getCachedRequest(e,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(e),r);return new Promise(function(t,i){var a=function(){var a=n._payloadTransformer.toResponse(o);a.status>=200&&a.status<300?(n._cacheRequest(e,r,a),t(a)):i(a)};o.onload=a,o.onerror=a,o.onabort=a,o.ontimeout=a,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,s.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},e.prototype.get=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"GET\"}))},e.prototype.post=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"POST\"}))},e.prototype.put=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"PUT\"}))},e.prototype.patch=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"PATCH\"}))},e.prototype.delete=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"DELETE\"}))},e.prototype._mergeDefaultOptions=function(e,t){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(e,t)&&this._isLocalRequest(e)&&(n.headers[\"X-XSRF-TOKEN\"]=r),t&&t.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,t)},e.prototype._prependHost=function(e){return!this._options.host||/^https?:\\/\\//.test(e)?e:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(e.replace(/^\\//,\"\"))},e.prototype._shouldCacheRequest=function(e){return\"GET\"===(e.method||\"GET\").toUpperCase()&&Boolean(e.cache)},e.prototype._getCachedRequest=function(e,t){return this._shouldCacheRequest(t)?this._cache.read(e,t):null},e.prototype._cacheRequest=function(e,t,n){this._shouldCacheRequest(t)&&this._cache.write(e,t,n)},e.prototype._isAssetRequest=function(e,t){return(!t||!t.method||\"GET\"===t.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(e.split(\"?\")[0])},e.prototype._isLocalRequest=function(e){return!!e.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!e.match(new RegExp(\"^(https?:)?//\"))},e}()},2024(e,t,n){\"use strict\";n.d(t,{A:()=>r});const r=function(){function e(e){var t=this;this._delay=e,this._promise=new Promise(function(e){t._resolve=e})}return e.prototype.onComplete=function(e){this._promise.then(e)},e.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},e.prototype.start=function(){var e=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return e.complete()},this._delay))},e}()},710(e,t,n){\"use strict\";function r(e){return\"object\"!=typeof e||null===e?e:Object.keys(e).filter(function(t){return void 0!==e[t]}).map(function(t){var n=e[t];return\"string\"==typeof n?\"\".concat(t,\"=\").concat(encodeURIComponent(n)):\"\".concat(t,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(t,{A:()=>r})},5889(e,t,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),a=n(3814);function s(e){if(\"string\"!=typeof e||1!==e.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}function u(e,t){return t.decode?i(e):e}function l(e){return Array.isArray(e)?e.sort():\"object\"==typeof e?l(Object.keys(e)).sort((e,t)=>Number(e)-Number(t)).map(t=>e[t]):e}function d(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function h(e){const t=(e=d(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function p(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&\"string\"==typeof e&&\"\"!==e.trim()?e=Number(e):!t.parseBooleans||null===e||\"true\"!==e.toLowerCase()&&\"false\"!==e.toLowerCase()||(e=\"true\"===e.toLowerCase()),e}function f(e,t){s((t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,n,r)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case\"bracket\":return(e,n,r)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case\"comma\":case\"separator\":return(t,n,r)=>{const i=\"string\"==typeof n&&n.includes(e.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&u(n,e).includes(e.arrayFormatSeparator);n=o?u(n,e):n;const a=i||o?n.split(e.arrayFormatSeparator).map(t=>u(t,e)):null===n?n:u(n,e);r[t]=a};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),r=Object.create(null);if(\"string\"!=typeof e)return r;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return r;for(const i of e.split(\"&\")){if(\"\"===i)continue;let[e,a]=o(t.decode?i.replace(/\\+/g,\" \"):i,\"=\");a=void 0===a?null:[\"comma\",\"separator\"].includes(t.arrayFormat)?a:u(a,t),n(u(e,t),a,r)}for(const e of Object.keys(r)){const n=r[e];if(\"object\"==typeof n&&null!==n)for(const e of Object.keys(n))n[e]=p(n[e],t);else r[e]=p(n,t)}return!1===t.sort?r:(!0===t.sort?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((e,t)=>{const n=r[t];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?e[t]=l(n):e[t]=n,e},Object.create(null))}t.extract=h,t.parse=f,t.stringify=(e,t)=>{if(!e)return\"\";s((t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},t)).arrayFormatSeparator);const n=n=>t.skipNull&&null==e[n]||t.skipEmptyString&&\"\"===e[n],r=function(e){switch(e.arrayFormat){case\"index\":return t=>(n,r)=>{const i=n.length;return void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(t,e),\"[\",i,\"]\"].join(\"\")]:[...n,[c(t,e),\"[\",c(i,e),\"]=\",c(r,e)].join(\"\")]};case\"bracket\":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(t,e),\"[]\"].join(\"\")]:[...n,[c(t,e),\"[]=\",c(r,e)].join(\"\")];case\"comma\":case\"separator\":return t=>(n,r)=>null==r||0===r.length?n:0===n.length?[[c(t,e),\"=\",c(r,e)].join(\"\")]:[[n,c(r,e)].join(e.arrayFormatSeparator)];default:return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,c(t,e)]:[...n,[c(t,e),\"=\",c(r,e)].join(\"\")]}}(t),i={};for(const t of Object.keys(e))n(t)||(i[t]=e[t]);const o=Object.keys(i);return!1!==t.sort&&o.sort(t.sort),o.map(n=>{const i=e[n];return void 0===i?\"\":null===i?c(n,t):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):c(n,t)+\"=\"+c(i,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,r]=o(e,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:f(h(e),t)},t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:u(r,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=d(e.url).split(\"?\")[0]||\"\",i=t.extract(e.url),o=t.parse(i,{sort:!1}),a=Object.assign(o,e.query);let s=t.stringify(a,n);s&&(s=`?${s}`);let u=function(e){let t=\"\";const n=e.indexOf(\"#\");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(u=`#${c(e.fragmentIdentifier,n)}`),`${r}${s}${u}`},t.pick=(e,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:s}=t.parseUrl(e,r);return t.stringifyUrl({url:i,query:a(o,n),fragmentIdentifier:s},r)},t.exclude=(e,n,r)=>{const i=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,i,r)}},5477(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.canSupportRel=function(e){var t=document.createElement(\"link\");return!!(t.relList&&t.relList.supports&&t.relList.supports(e))},e}();t.default=n},471(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(e,t,n){\"use strict\";t.vQ=t.Hb=void 0;n(4886);var r=n(471);Object.defineProperty(t,\"Hb\",{enumerable:!0,get:function(){return r.default}});var i=n(5895);Object.defineProperty(t,\"vQ\",{enumerable:!0,get:function(){return i.default}});n(7995),n(9722),n(282)},4886(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._scripts={},this._preloadedScripts={}}return e.prototype.loadScript=function(e,t){var n=this;return this._scripts[e]||(this._scripts[e]=new Promise(function(r,i){var o=document.createElement(\"script\"),a=t||{},s=a.async,c=void 0!==s&&s,u=a.attributes,l=void 0===u?{}:u;Object.keys(l).forEach(function(e){o.setAttribute(e,l[e])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(t){delete n._scripts[e],i(t)},o.async=c,o.src=e,document.body.appendChild(o)})),this._scripts[e]},e.prototype.loadScripts=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.loadScript(e,t)})).then(function(){})},e.prototype.preloadScript=function(e,t){var n=this;return this._preloadedScripts[e]||(this._preloadedScripts[e]=new Promise(function(r,i){var o=(t||{}).prefetch,a=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var s=document.createElement(\"link\");s.as=\"script\",s.rel=a,s.href=e,s.onload=function(){r()},s.onerror=function(){delete n._preloadedScripts[e],i()},document.head.appendChild(s)}else n._requestSender.get(e,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[e]},e.prototype.preloadScripts=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.preloadScript(e,t)})).then(function(){})},e}();t.default=n},7995(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._stylesheets={},this._preloadedStylesheets={}}return e.prototype.loadStylesheet=function(e,t){var n=this;return this._stylesheets[e]||(this._stylesheets[e]=new Promise(function(r,i){var o=document.createElement(\"link\"),a=t||{},s=a.prepend,c=void 0!==s&&s,u=a.attributes,l=void 0===u?{}:u;Object.keys(l).forEach(function(e){o.setAttribute(e,l[e])}),o.onload=function(){return r()},o.onerror=function(t){delete n._stylesheets[e],i(t)},o.rel=\"stylesheet\",o.href=e,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[e]},e.prototype.loadStylesheets=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.loadStylesheet(e,t)})).then(function(){})},e.prototype.preloadStylesheet=function(e,t){var n=this;return this._preloadedStylesheets[e]||(this._preloadedStylesheets[e]=new Promise(function(r,i){var o=(t||{}).prefetch,a=void 0!==o&&o,s=a?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(s)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=a?\"prefetch\":\"preload\",c.href=e,c.onload=function(){r()},c.onerror=function(t){delete n._preloadedStylesheets[e],i(t)},document.head.appendChild(c)}else n._requestSender.get(e,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[e]},e.prototype.preloadStylesheets=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.preloadStylesheet(e,t)})).then(function(){})},e}();t.default=n},1915(e){\"use strict\";var t=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+t+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+t+\")+\",\"gi\");function i(e,t){try{return[decodeURIComponent(e.join(\"\"))]}catch(e){}if(1===e.length)return e;t=t||1;var n=e.slice(0,t),r=e.slice(t);return Array.prototype.concat.call([],i(n),i(r))}function o(e){try{return decodeURIComponent(e)}catch(o){for(var t=e.match(n)||[],r=1;r<t.length;r++)t=(e=i(t,r).join(\"\")).match(n)||[];return e}}e.exports=function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof e+\"`\");try{return e=e.replace(/\\+/g,\" \"),decodeURIComponent(e)}catch(t){return function(e){for(var t={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(e);n;){try{t[n[0]]=decodeURIComponent(n[0])}catch(e){var i=o(n[0]);i!==n[0]&&(t[n[0]]=i)}n=r.exec(e)}t[\"%C2\"]=\"�\";for(var a=Object.keys(t),s=0;s<a.length;s++){var c=a[s];e=e.replace(new RegExp(c,\"g\"),t[c])}return e}(e)}}},3814(e){\"use strict\";e.exports=function(e,t){for(var n={},r=Object.keys(e),i=Array.isArray(t),o=0;o<r.length;o++){var a=r[o],s=e[a];(i?-1!==t.indexOf(a):t(a,s,e))&&(n[a]=s)}return n}},168(e){var t;t=function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(t,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=e({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var a=JSON.stringify(n);/^[\\{\\[]/.test(a)&&(n=a)}catch(e){}n=r.write?r.write(n,t):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var s=\"\";for(var c in o)o[c]&&(s+=\"; \"+c,!0!==o[c]&&(s+=\"=\"+o[c].split(\";\")[0]));return document.cookie=t+\"=\"+n+s}}function a(e,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],a=0;a<o.length;a++){var s=o[a].split(\"=\"),c=s.slice(1).join(\"=\");n||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var u=t(s[0]);if(c=(r.read||r)(c,u)||t(c),n)try{c=JSON.parse(c)}catch(e){}if(i[u]=c,e===u)break}catch(e){}}return e?i[e]:i}}return i.set=o,i.get=function(e){return a(e,!1)},i.getJSON=function(e){return a(e,!0)},i.remove=function(t,n){o(t,\"\",e(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(t),e.exports=t()},35(e,t,n){e=n.nmd(e);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",a=\"[object Function]\",s=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,u=/^(?:0|[1-9]\\d*)$/,l={};l[\"[object Float32Array]\"]=l[\"[object Float64Array]\"]=l[\"[object Int8Array]\"]=l[\"[object Int16Array]\"]=l[\"[object Int32Array]\"]=l[\"[object Uint8Array]\"]=l[\"[object Uint8ClampedArray]\"]=l[\"[object Uint16Array]\"]=l[\"[object Uint32Array]\"]=!0,l[o]=l[\"[object Array]\"]=l[\"[object ArrayBuffer]\"]=l[\"[object Boolean]\"]=l[\"[object DataView]\"]=l[\"[object Date]\"]=l[\"[object Error]\"]=l[a]=l[\"[object Map]\"]=l[\"[object Number]\"]=l[s]=l[\"[object RegExp]\"]=l[\"[object Set]\"]=l[\"[object String]\"]=l[\"[object WeakMap]\"]=!1;var d,h,p,f=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,m=\"object\"==typeof self&&self&&self.Object===Object&&self,y=f||m||Function(\"return this\")(),g=t&&!t.nodeType&&t,v=g&&e&&!e.nodeType&&e,b=v&&v.exports===g,_=b&&f.process,S=function(){try{return v&&v.require&&v.require(\"util\").types||_&&_.binding&&_.binding(\"util\")}catch(e){}}(),w=S&&S.isTypedArray,P=Array.prototype,I=Function.prototype,C=Object.prototype,O=y[\"__core-js_shared__\"],A=I.toString,k=C.hasOwnProperty,E=(d=/[^.]+$/.exec(O&&O.keys&&O.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+d:\"\",j=C.toString,x=A.call(Object),T=RegExp(\"^\"+A.call(k).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),z=b?y.Buffer:void 0,F=y.Symbol,B=y.Uint8Array,D=(z&&z.allocUnsafe,h=Object.getPrototypeOf,p=Object,function(e){return h(p(e))}),M=Object.create,N=C.propertyIsEnumerable,U=P.splice,R=F?F.toStringTag:void 0,L=function(){try{var e=se(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),V=z?z.isBuffer:void 0,q=Math.max,$=Date.now,H=se(y,\"Map\"),W=se(Object,\"create\"),G=function(){function e(){}return function(t){if(!be(t))return{};if(M)return M(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function K(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Y(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function J(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Z(e){var t=this.__data__=new Y(e);this.size=t.size}function X(e,t,n){(void 0!==n&&!he(e[t],n)||void 0===n&&!(t in e))&&te(e,t,n)}function Q(e,t,n){var r=e[t];k.call(e,t)&&he(r,n)&&(void 0!==n||t in e)||te(e,t,n)}function ee(e,t){for(var n=e.length;n--;)if(he(e[n][0],t))return n;return-1}function te(e,t,n){\"__proto__\"==t&&L?L(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}K.prototype.clear=function(){this.__data__=W?W(null):{},this.size=0},K.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},K.prototype.get=function(e){var t=this.__data__;if(W){var n=t[e];return n===r?void 0:n}return k.call(t,e)?t[e]:void 0},K.prototype.has=function(e){var t=this.__data__;return W?void 0!==t[e]:k.call(t,e)},K.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=W&&void 0===t?r:t,this},Y.prototype.clear=function(){this.__data__=[],this.size=0},Y.prototype.delete=function(e){var t=this.__data__,n=ee(t,e);return!(n<0||(n==t.length-1?t.pop():U.call(t,n,1),--this.size,0))},Y.prototype.get=function(e){var t=this.__data__,n=ee(t,e);return n<0?void 0:t[n][1]},Y.prototype.has=function(e){return ee(this.__data__,e)>-1},Y.prototype.set=function(e,t){var n=this.__data__,r=ee(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},J.prototype.clear=function(){this.size=0,this.__data__={hash:new K,map:new(H||Y),string:new K}},J.prototype.delete=function(e){var t=ae(this,e).delete(e);return this.size-=t?1:0,t},J.prototype.get=function(e){return ae(this,e).get(e)},J.prototype.has=function(e){return ae(this,e).has(e)},J.prototype.set=function(e,t){var n=ae(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Z.prototype.clear=function(){this.__data__=new Y,this.size=0},Z.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Z.prototype.get=function(e){return this.__data__.get(e)},Z.prototype.has=function(e){return this.__data__.has(e)},Z.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Y){var r=n.__data__;if(!H||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new J(r)}return n.set(e,t),this.size=n.size,this};function ne(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":R&&R in Object(e)?function(e){var t=k.call(e,R),n=e[R];try{e[R]=void 0;var r=!0}catch(e){}var i=j.call(e);return r&&(t?e[R]=n:delete e[R]),i}(e):function(e){return j.call(e)}(e)}function re(e){return _e(e)&&ne(e)==o}function ie(e,t,n,r,i){e!==t&&function(e,t,n){for(var r=-1,i=Object(e),o=n(e),a=o.length;a--;){var s=o[++r];if(!1===t(i[s],s,i))break}}(t,function(o,a){if(i||(i=new Z),be(o))!function(e,t,n,r,i,o,a){var c=le(e,n),u=le(t,n),l=a.get(u);if(l)X(e,n,l);else{var d,h,p,f,m,y=o?o(c,u,n+\"\",e,t,a):void 0,g=void 0===y;if(g){var v=fe(u),b=!v&&ye(u),_=!v&&!b&&Se(u);y=u,v||b||_?fe(c)?y=c:_e(m=c)&&me(m)?y=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}(c):b?(g=!1,y=function(e){return e.slice()}(u)):_?(g=!1,f=new(p=(d=u).buffer).constructor(p.byteLength),new B(f).set(new B(p)),h=f,y=new d.constructor(h,d.byteOffset,d.length)):y=[]:function(e){if(!_e(e)||ne(e)!=s)return!1;var t=D(e);if(null===t)return!0;var n=k.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&A.call(n)==x}(u)||pe(u)?(y=c,pe(c)?y=function(e){return function(e,t,n){var r=!n;n||(n={});for(var i=-1,o=t.length;++i<o;){var a=t[i],s=void 0;void 0===s&&(s=e[a]),r?te(n,a,s):Q(n,a,s)}return n}(e,we(e))}(c):be(c)&&!ge(c)||(y=function(e){return\"function\"!=typeof e.constructor||ue(e)?{}:G(D(e))}(u))):g=!1}g&&(a.set(u,y),i(y,u,r,o,a),a.delete(u)),X(e,n,y)}}(e,t,a,n,ie,r,i);else{var c=r?r(le(e,a),o,a+\"\",e,t,i):void 0;void 0===c&&(c=o),X(e,a,c)}},we)}var oe=L?function(e,t){return L(e,\"toString\",{configurable:!0,enumerable:!1,value:(n=t,function(){return n}),writable:!0});var n}:Ce;function ae(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function se(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!be(e)||function(e){return!!E&&E in e}(e))&&(ge(e)?T:c).test(function(e){if(null!=e){try{return A.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e))}(n)?n:void 0}function ce(e,t){var n=typeof e;return!!(t=t??i)&&(\"number\"==n||\"symbol\"!=n&&u.test(e))&&e>-1&&e%1==0&&e<t}function ue(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||C)}function le(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var de=function(e){var t=0,n=0;return function(){var r=$(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(oe);function he(e,t){return e===t||e!=e&&t!=t}var pe=re(function(){return arguments}())?re:function(e){return _e(e)&&k.call(e,\"callee\")&&!N.call(e,\"callee\")},fe=Array.isArray;function me(e){return null!=e&&ve(e.length)&&!ge(e)}var ye=V||function(){return!1};function ge(e){if(!be(e))return!1;var t=ne(e);return t==a||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function ve(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=i}function be(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function _e(e){return null!=e&&\"object\"==typeof e}var Se=w?function(e){return function(t){return e(t)}}(w):function(e){return _e(e)&&ve(e.length)&&!!l[ne(e)]};function we(e){return me(e)?function(e,t){var n=fe(e),r=!n&&pe(e),i=!n&&!r&&ye(e),o=!n&&!r&&!i&&Se(e),a=n||r||i||o,s=a?function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}(e.length,String):[],c=s.length;for(var u in e)!t&&!k.call(e,u)||a&&(\"length\"==u||i&&(\"offset\"==u||\"parent\"==u)||o&&(\"buffer\"==u||\"byteLength\"==u||\"byteOffset\"==u)||ce(u,c))||s.push(u);return s}(e,!0):function(e){if(!be(e))return function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}(e);var t=ue(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&k.call(e,r))&&n.push(r);return n}(e)}var Pe,Ie=(Pe=function(e,t,n){ie(e,t,n)},function(e,t){return de(function(e,t,n){return t=q(void 0===t?e.length-1:t,0),function(){for(var r=arguments,i=-1,o=q(r.length-t,0),a=Array(o);++i<o;)a[i]=r[t+i];i=-1;for(var s=Array(t+1);++i<t;)s[i]=r[i];return s[t]=n(a),function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}(e,this,s)}}(e,t,Ce),e+\"\")}(function(e,t){var n=-1,r=t.length,i=r>1?t[r-1]:void 0,o=r>2?t[2]:void 0;for(i=Pe.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(e,t,n){if(!be(n))return!1;var r=typeof t;return!!(\"number\"==r?me(n)&&ce(t,n.length):\"string\"==r&&t in n)&&he(n[t],e)}(t[0],t[1],o)&&(i=r<3?void 0:i,r=1),e=Object(e);++n<r;){var a=t[n];a&&Pe(e,a,n)}return e}));function Ce(e){return e}e.exports=Ie},9440(e,t,n){e=n.nmd(e),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",s=32,c=128,u=1/0,l=9007199254740991,d=NaN,h=4294967295,p=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",s],[\"partialRight\",64],[\"rearg\",256]],f=\"[object Arguments]\",m=\"[object Array]\",y=\"[object Boolean]\",g=\"[object Date]\",v=\"[object Error]\",b=\"[object Function]\",_=\"[object GeneratorFunction]\",S=\"[object Map]\",w=\"[object Number]\",P=\"[object Object]\",I=\"[object Promise]\",C=\"[object RegExp]\",O=\"[object Set]\",A=\"[object String]\",k=\"[object Symbol]\",E=\"[object WeakMap]\",j=\"[object ArrayBuffer]\",x=\"[object DataView]\",T=\"[object Float32Array]\",z=\"[object Float64Array]\",F=\"[object Int8Array]\",B=\"[object Int16Array]\",D=\"[object Int32Array]\",M=\"[object Uint8Array]\",N=\"[object Uint8ClampedArray]\",U=\"[object Uint16Array]\",R=\"[object Uint32Array]\",L=/\\b__p \\+= '';/g,V=/\\b(__p \\+=) '' \\+/g,q=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,$=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,W=RegExp($.source),G=RegExp(H.source),K=/<%-([\\s\\S]+?)%>/g,Y=/<%([\\s\\S]+?)%>/g,J=/<%=([\\s\\S]+?)%>/g,Z=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,X=/^\\w*$/,Q=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,ee=/[\\\\^$.*+?()[\\]{}|]/g,te=RegExp(ee.source),ne=/^\\s+/,re=/\\s/,ie=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,oe=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ae=/,? & /,se=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ce=/[()=,{}\\[\\]\\/\\s]/,ue=/\\\\(\\\\)?/g,le=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,de=/\\w*$/,he=/^[-+]0x[0-9a-f]+$/i,pe=/^0b[01]+$/i,fe=/^\\[object .+?Constructor\\]$/,me=/^0o[0-7]+$/i,ye=/^(?:0|[1-9]\\d*)$/,ge=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,ve=/($^)/,be=/['\\n\\r\\u2028\\u2029\\\\]/g,_e=\"\\\\ud800-\\\\udfff\",Se=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",we=\"\\\\u2700-\\\\u27bf\",Pe=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Ie=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ce=\"\\\\ufe0e\\\\ufe0f\",Oe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Ae=\"[\"+_e+\"]\",ke=\"[\"+Oe+\"]\",Ee=\"[\"+Se+\"]\",je=\"\\\\d+\",xe=\"[\"+we+\"]\",Te=\"[\"+Pe+\"]\",ze=\"[^\"+_e+Oe+je+we+Pe+Ie+\"]\",Fe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Be=\"[^\"+_e+\"]\",De=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Me=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ne=\"[\"+Ie+\"]\",Ue=\"\\\\u200d\",Re=\"(?:\"+Te+\"|\"+ze+\")\",Le=\"(?:\"+Ne+\"|\"+ze+\")\",Ve=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",qe=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",$e=\"(?:\"+Ee+\"|\"+Fe+\")?\",He=\"[\"+Ce+\"]?\",We=He+$e+\"(?:\"+Ue+\"(?:\"+[Be,De,Me].join(\"|\")+\")\"+He+$e+\")*\",Ge=\"(?:\"+[xe,De,Me].join(\"|\")+\")\"+We,Ke=\"(?:\"+[Be+Ee+\"?\",Ee,De,Me,Ae].join(\"|\")+\")\",Ye=RegExp(\"['’]\",\"g\"),Je=RegExp(Ee,\"g\"),Ze=RegExp(Fe+\"(?=\"+Fe+\")|\"+Ke+We,\"g\"),Xe=RegExp([Ne+\"?\"+Te+\"+\"+Ve+\"(?=\"+[ke,Ne,\"$\"].join(\"|\")+\")\",Le+\"+\"+qe+\"(?=\"+[ke,Ne+Re,\"$\"].join(\"|\")+\")\",Ne+\"?\"+Re+\"+\"+Ve,Ne+\"+\"+qe,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",je,Ge].join(\"|\"),\"g\"),Qe=RegExp(\"[\"+Ue+_e+Se+Ce+\"]\"),et=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,tt=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],nt=-1,rt={};rt[T]=rt[z]=rt[F]=rt[B]=rt[D]=rt[M]=rt[N]=rt[U]=rt[R]=!0,rt[f]=rt[m]=rt[j]=rt[y]=rt[x]=rt[g]=rt[v]=rt[b]=rt[S]=rt[w]=rt[P]=rt[C]=rt[O]=rt[A]=rt[E]=!1;var it={};it[f]=it[m]=it[j]=it[x]=it[y]=it[g]=it[T]=it[z]=it[F]=it[B]=it[D]=it[S]=it[w]=it[P]=it[C]=it[O]=it[A]=it[k]=it[M]=it[N]=it[U]=it[R]=!0,it[v]=it[b]=it[E]=!1;var ot={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},at=parseFloat,st=parseInt,ct=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,ut=\"object\"==typeof self&&self&&self.Object===Object&&self,lt=ct||ut||Function(\"return this\")(),dt=t&&!t.nodeType&&t,ht=dt&&e&&!e.nodeType&&e,pt=ht&&ht.exports===dt,ft=pt&&ct.process,mt=function(){try{return ht&&ht.require&&ht.require(\"util\").types||ft&&ft.binding&&ft.binding(\"util\")}catch(e){}}(),yt=mt&&mt.isArrayBuffer,gt=mt&&mt.isDate,vt=mt&&mt.isMap,bt=mt&&mt.isRegExp,_t=mt&&mt.isSet,St=mt&&mt.isTypedArray;function wt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function Pt(e,t,n,r){for(var i=-1,o=null==e?0:e.length;++i<o;){var a=e[i];t(r,a,n(a),e)}return r}function It(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}function Ct(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function Ot(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}function At(e,t){for(var n=-1,r=null==e?0:e.length,i=0,o=[];++n<r;){var a=e[n];t(a,n,e)&&(o[i++]=a)}return o}function kt(e,t){return!(null==e||!e.length)&&Nt(e,t,0)>-1}function Et(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function jt(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}function xt(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}function Tt(e,t,n,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(n=e[++i]);++i<o;)n=t(n,e[i],i,e);return n}function zt(e,t,n,r){var i=null==e?0:e.length;for(r&&i&&(n=e[--i]);i--;)n=t(n,e[i],i,e);return n}function Ft(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var Bt=Vt(\"length\");function Dt(e,t,n){var r;return n(e,function(e,n,i){if(t(e,n,i))return r=n,!1}),r}function Mt(e,t,n,r){for(var i=e.length,o=n+(r?1:-1);r?o--:++o<i;)if(t(e[o],o,e))return o;return-1}function Nt(e,t,n){return t==t?function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}(e,t,n):Mt(e,Rt,n)}function Ut(e,t,n,r){for(var i=n-1,o=e.length;++i<o;)if(r(e[i],t))return i;return-1}function Rt(e){return e!=e}function Lt(e,t){var n=null==e?0:e.length;return n?Ht(e,t)/n:d}function Vt(e){return function(t){return null==t?r:t[e]}}function qt(e){return function(t){return null==e?r:e[t]}}function $t(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}function Ht(e,t){for(var n,i=-1,o=e.length;++i<o;){var a=t(e[i]);a!==r&&(n=n===r?a:n+a)}return n}function Wt(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}function Gt(e){return e?e.slice(0,dn(e)+1).replace(ne,\"\"):e}function Kt(e){return function(t){return e(t)}}function Yt(e,t){return jt(t,function(t){return e[t]})}function Jt(e,t){return e.has(t)}function Zt(e,t){for(var n=-1,r=e.length;++n<r&&Nt(t,e[n],0)>-1;);return n}function Xt(e,t){for(var n=e.length;n--&&Nt(t,e[n],0)>-1;);return n}var Qt=qt({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),en=qt({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function tn(e){return\"\\\\\"+ot[e]}function nn(e){return Qe.test(e)}function rn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function on(e,t){return function(n){return e(t(n))}}function an(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var s=e[n];s!==t&&s!==a||(e[n]=a,o[i++]=n)}return o}function sn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}function cn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=[e,e]}),n}function un(e){return nn(e)?function(e){for(var t=Ze.lastIndex=0;Ze.test(e);)++t;return t}(e):Bt(e)}function ln(e){return nn(e)?function(e){return e.match(Ze)||[]}(e):function(e){return e.split(\"\")}(e)}function dn(e){for(var t=e.length;t--&&re.test(e.charAt(t)););return t}var hn=qt({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pn=function e(t){var n,re=(t=null==t?lt:pn.defaults(lt.Object(),t,pn.pick(lt,tt))).Array,_e=t.Date,Se=t.Error,we=t.Function,Pe=t.Math,Ie=t.Object,Ce=t.RegExp,Oe=t.String,Ae=t.TypeError,ke=re.prototype,Ee=we.prototype,je=Ie.prototype,xe=t[\"__core-js_shared__\"],Te=Ee.toString,ze=je.hasOwnProperty,Fe=0,Be=(n=/[^.]+$/.exec(xe&&xe.keys&&xe.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",De=je.toString,Me=Te.call(Ie),Ne=lt._,Ue=Ce(\"^\"+Te.call(ze).replace(ee,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Re=pt?t.Buffer:r,Le=t.Symbol,Ve=t.Uint8Array,qe=Re?Re.allocUnsafe:r,$e=on(Ie.getPrototypeOf,Ie),He=Ie.create,We=je.propertyIsEnumerable,Ge=ke.splice,Ke=Le?Le.isConcatSpreadable:r,Ze=Le?Le.iterator:r,Qe=Le?Le.toStringTag:r,ot=function(){try{var e=co(Ie,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),ct=t.clearTimeout!==lt.clearTimeout&&t.clearTimeout,ut=_e&&_e.now!==lt.Date.now&&_e.now,dt=t.setTimeout!==lt.setTimeout&&t.setTimeout,ht=Pe.ceil,ft=Pe.floor,mt=Ie.getOwnPropertySymbols,Bt=Re?Re.isBuffer:r,qt=t.isFinite,fn=ke.join,mn=on(Ie.keys,Ie),yn=Pe.max,gn=Pe.min,vn=_e.now,bn=t.parseInt,_n=Pe.random,Sn=ke.reverse,wn=co(t,\"DataView\"),Pn=co(t,\"Map\"),In=co(t,\"Promise\"),Cn=co(t,\"Set\"),On=co(t,\"WeakMap\"),An=co(Ie,\"create\"),kn=On&&new On,En={},jn=Mo(wn),xn=Mo(Pn),Tn=Mo(In),zn=Mo(Cn),Fn=Mo(On),Bn=Le?Le.prototype:r,Dn=Bn?Bn.valueOf:r,Mn=Bn?Bn.toString:r;function Nn(e){if(es(e)&&!qa(e)&&!(e instanceof Vn)){if(e instanceof Ln)return e;if(ze.call(e,\"__wrapped__\"))return No(e)}return new Ln(e)}var Un=function(){function e(){}return function(t){if(!Qa(t))return{};if(He)return He(t);e.prototype=t;var n=new e;return e.prototype=r,n}}();function Rn(){}function Ln(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=r}function Vn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function qn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function $n(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Hn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Wn(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new Hn;++t<n;)this.add(e[t])}function Gn(e){var t=this.__data__=new $n(e);this.size=t.size}function Kn(e,t){var n=qa(e),r=!n&&Va(e),i=!n&&!r&&Ga(e),o=!n&&!r&&!i&&cs(e),a=n||r||i||o,s=a?Wt(e.length,Oe):[],c=s.length;for(var u in e)!t&&!ze.call(e,u)||a&&(\"length\"==u||i&&(\"offset\"==u||\"parent\"==u)||o&&(\"buffer\"==u||\"byteLength\"==u||\"byteOffset\"==u)||yo(u,c))||s.push(u);return s}function Yn(e){var t=e.length;return t?e[Hr(0,t-1)]:r}function Jn(e,t){return To(Oi(e),or(t,0,e.length))}function Zn(e){return To(Oi(e))}function Xn(e,t,n){(n!==r&&!Ua(e[t],n)||n===r&&!(t in e))&&rr(e,t,n)}function Qn(e,t,n){var i=e[t];ze.call(e,t)&&Ua(i,n)&&(n!==r||t in e)||rr(e,t,n)}function er(e,t){for(var n=e.length;n--;)if(Ua(e[n][0],t))return n;return-1}function tr(e,t,n,r){return lr(e,function(e,i,o){t(r,e,n(e),o)}),r}function nr(e,t){return e&&Ai(t,js(t),e)}function rr(e,t,n){\"__proto__\"==t&&ot?ot(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function ir(e,t){for(var n=-1,i=t.length,o=re(i),a=null==e;++n<i;)o[n]=a?r:Cs(e,t[n]);return o}function or(e,t,n){return e==e&&(n!==r&&(e=e<=n?e:n),t!==r&&(e=e>=t?e:t)),e}function ar(e,t,n,i,o,a){var s,c=1&t,u=2&t,l=4&t;if(n&&(s=o?n(e,i,o,a):n(e)),s!==r)return s;if(!Qa(e))return e;var d=qa(e);if(d){if(s=function(e){var t=e.length,n=new e.constructor(t);return t&&\"string\"==typeof e[0]&&ze.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}(e),!c)return Oi(e,s)}else{var h=ho(e),p=h==b||h==_;if(Ga(e))return _i(e,c);if(h==P||h==f||p&&!o){if(s=u||p?{}:fo(e),!c)return u?function(e,t){return Ai(e,lo(e),t)}(e,function(e,t){return e&&Ai(t,xs(t),e)}(s,e)):function(e,t){return Ai(e,uo(e),t)}(e,nr(s,e))}else{if(!it[h])return o?e:{};s=function(e,t,n){var r,i=e.constructor;switch(t){case j:return Si(e);case y:case g:return new i(+e);case x:return function(e,t){var n=t?Si(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case T:case z:case F:case B:case D:case M:case N:case U:case R:return wi(e,n);case S:return new i;case w:case A:return new i(e);case C:return function(e){var t=new e.constructor(e.source,de.exec(e));return t.lastIndex=e.lastIndex,t}(e);case O:return new i;case k:return r=e,Dn?Ie(Dn.call(r)):{}}}(e,h,c)}}a||(a=new Gn);var m=a.get(e);if(m)return m;a.set(e,s),os(e)?e.forEach(function(r){s.add(ar(r,t,n,r,e,a))}):ts(e)&&e.forEach(function(r,i){s.set(i,ar(r,t,n,i,e,a))});var v=d?r:(l?u?to:eo:u?xs:js)(e);return It(v||e,function(r,i){v&&(r=e[i=r]),Qn(s,i,ar(r,t,n,i,e,a))}),s}function sr(e,t,n){var i=n.length;if(null==e)return!i;for(e=Ie(e);i--;){var o=n[i],a=t[o],s=e[o];if(s===r&&!(o in e)||!a(s))return!1}return!0}function cr(e,t,n){if(\"function\"!=typeof e)throw new Ae(i);return ko(function(){e.apply(r,n)},t)}function ur(e,t,n,r){var i=-1,o=kt,a=!0,s=e.length,c=[],u=t.length;if(!s)return c;n&&(t=jt(t,Kt(n))),r?(o=Et,a=!1):t.length>=200&&(o=Jt,a=!1,t=new Wn(t));e:for(;++i<s;){var l=e[i],d=null==n?l:n(l);if(l=r||0!==l?l:0,a&&d==d){for(var h=u;h--;)if(t[h]===d)continue e;c.push(l)}else o(t,d,r)||c.push(l)}return c}Nn.templateSettings={escape:K,evaluate:Y,interpolate:J,variable:\"\",imports:{_:Nn}},Nn.prototype=Rn.prototype,Nn.prototype.constructor=Nn,Ln.prototype=Un(Rn.prototype),Ln.prototype.constructor=Ln,Vn.prototype=Un(Rn.prototype),Vn.prototype.constructor=Vn,qn.prototype.clear=function(){this.__data__=An?An(null):{},this.size=0},qn.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},qn.prototype.get=function(e){var t=this.__data__;if(An){var n=t[e];return n===o?r:n}return ze.call(t,e)?t[e]:r},qn.prototype.has=function(e){var t=this.__data__;return An?t[e]!==r:ze.call(t,e)},qn.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=An&&t===r?o:t,this},$n.prototype.clear=function(){this.__data__=[],this.size=0},$n.prototype.delete=function(e){var t=this.__data__,n=er(t,e);return!(n<0||(n==t.length-1?t.pop():Ge.call(t,n,1),--this.size,0))},$n.prototype.get=function(e){var t=this.__data__,n=er(t,e);return n<0?r:t[n][1]},$n.prototype.has=function(e){return er(this.__data__,e)>-1},$n.prototype.set=function(e,t){var n=this.__data__,r=er(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Hn.prototype.clear=function(){this.size=0,this.__data__={hash:new qn,map:new(Pn||$n),string:new qn}},Hn.prototype.delete=function(e){var t=ao(this,e).delete(e);return this.size-=t?1:0,t},Hn.prototype.get=function(e){return ao(this,e).get(e)},Hn.prototype.has=function(e){return ao(this,e).has(e)},Hn.prototype.set=function(e,t){var n=ao(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Wn.prototype.add=Wn.prototype.push=function(e){return this.__data__.set(e,o),this},Wn.prototype.has=function(e){return this.__data__.has(e)},Gn.prototype.clear=function(){this.__data__=new $n,this.size=0},Gn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Gn.prototype.get=function(e){return this.__data__.get(e)},Gn.prototype.has=function(e){return this.__data__.has(e)},Gn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof $n){var r=n.__data__;if(!Pn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Hn(r)}return n.set(e,t),this.size=n.size,this};var lr=ji(vr),dr=ji(br,!0);function hr(e,t){var n=!0;return lr(e,function(e,r,i){return n=!!t(e,r,i)}),n}function pr(e,t,n){for(var i=-1,o=e.length;++i<o;){var a=e[i],s=t(a);if(null!=s&&(c===r?s==s&&!ss(s):n(s,c)))var c=s,u=a}return u}function fr(e,t){var n=[];return lr(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function mr(e,t,n,r,i){var o=-1,a=e.length;for(n||(n=mo),i||(i=[]);++o<a;){var s=e[o];t>0&&n(s)?t>1?mr(s,t-1,n,r,i):xt(i,s):r||(i[i.length]=s)}return i}var yr=xi(),gr=xi(!0);function vr(e,t){return e&&yr(e,t,js)}function br(e,t){return e&&gr(e,t,js)}function _r(e,t){return At(t,function(t){return Ja(e[t])})}function Sr(e,t){for(var n=0,i=(t=yi(t,e)).length;null!=e&&n<i;)e=e[Do(t[n++])];return n&&n==i?e:r}function wr(e,t,n){var r=t(e);return qa(e)?r:xt(r,n(e))}function Pr(e){return null==e?e===r?\"[object Undefined]\":\"[object Null]\":Qe&&Qe in Ie(e)?function(e){var t=ze.call(e,Qe),n=e[Qe];try{e[Qe]=r;var i=!0}catch(e){}var o=De.call(e);return i&&(t?e[Qe]=n:delete e[Qe]),o}(e):function(e){return De.call(e)}(e)}function Ir(e,t){return e>t}function Cr(e,t){return null!=e&&ze.call(e,t)}function Or(e,t){return null!=e&&t in Ie(e)}function Ar(e,t,n){for(var i=n?Et:kt,o=e[0].length,a=e.length,s=a,c=re(a),u=1/0,l=[];s--;){var d=e[s];s&&t&&(d=jt(d,Kt(t))),u=gn(d.length,u),c[s]=!n&&(t||o>=120&&d.length>=120)?new Wn(s&&d):r}d=e[0];var h=-1,p=c[0];e:for(;++h<o&&l.length<u;){var f=d[h],m=t?t(f):f;if(f=n||0!==f?f:0,!(p?Jt(p,m):i(l,m,n))){for(s=a;--s;){var y=c[s];if(!(y?Jt(y,m):i(e[s],m,n)))continue e}p&&p.push(m),l.push(f)}}return l}function kr(e,t,n){var i=null==(e=Co(e,t=yi(t,e)))?e:e[Do(Yo(t))];return null==i?r:wt(i,e,n)}function Er(e){return es(e)&&Pr(e)==f}function jr(e,t,n,i,o){return e===t||(null==e||null==t||!es(e)&&!es(t)?e!=e&&t!=t:function(e,t,n,i,o,a){var s=qa(e),c=qa(t),u=s?m:ho(e),l=c?m:ho(t),d=(u=u==f?P:u)==P,h=(l=l==f?P:l)==P,p=u==l;if(p&&Ga(e)){if(!Ga(t))return!1;s=!0,d=!1}if(p&&!d)return a||(a=new Gn),s||cs(e)?Xi(e,t,n,i,o,a):function(e,t,n,r,i,o,a){switch(n){case x:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case j:return!(e.byteLength!=t.byteLength||!o(new Ve(e),new Ve(t)));case y:case g:case w:return Ua(+e,+t);case v:return e.name==t.name&&e.message==t.message;case C:case A:return e==t+\"\";case S:var s=rn;case O:var c=1&r;if(s||(s=sn),e.size!=t.size&&!c)return!1;var u=a.get(e);if(u)return u==t;r|=2,a.set(e,t);var l=Xi(s(e),s(t),r,i,o,a);return a.delete(e),l;case k:if(Dn)return Dn.call(e)==Dn.call(t)}return!1}(e,t,u,n,i,o,a);if(!(1&n)){var b=d&&ze.call(e,\"__wrapped__\"),_=h&&ze.call(t,\"__wrapped__\");if(b||_){var I=b?e.value():e,E=_?t.value():t;return a||(a=new Gn),o(I,E,n,i,a)}}return!!p&&(a||(a=new Gn),function(e,t,n,i,o,a){var s=1&n,c=eo(e),u=c.length;if(u!=eo(t).length&&!s)return!1;for(var l=u;l--;){var d=c[l];if(!(s?d in t:ze.call(t,d)))return!1}var h=a.get(e),p=a.get(t);if(h&&p)return h==t&&p==e;var f=!0;a.set(e,t),a.set(t,e);for(var m=s;++l<u;){var y=e[d=c[l]],g=t[d];if(i)var v=s?i(g,y,d,t,e,a):i(y,g,d,e,t,a);if(!(v===r?y===g||o(y,g,n,i,a):v)){f=!1;break}m||(m=\"constructor\"==d)}if(f&&!m){var b=e.constructor,_=t.constructor;b==_||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof b&&b instanceof b&&\"function\"==typeof _&&_ instanceof _||(f=!1)}return a.delete(e),a.delete(t),f}(e,t,n,i,o,a))}(e,t,n,i,jr,o))}function xr(e,t,n,i){var o=n.length,a=o,s=!i;if(null==e)return!a;for(e=Ie(e);o--;){var c=n[o];if(s&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++o<a;){var u=(c=n[o])[0],l=e[u],d=c[1];if(s&&c[2]){if(l===r&&!(u in e))return!1}else{var h=new Gn;if(i)var p=i(l,d,u,e,t,h);if(!(p===r?jr(d,l,3,i,h):p))return!1}}return!0}function Tr(e){return!(!Qa(e)||(t=e,Be&&Be in t))&&(Ja(e)?Ue:fe).test(Mo(e));var t}function zr(e){return\"function\"==typeof e?e:null==e?nc:\"object\"==typeof e?qa(e)?Nr(e[0],e[1]):Mr(e):dc(e)}function Fr(e){if(!So(e))return mn(e);var t=[];for(var n in Ie(e))ze.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}function Br(e,t){return e<t}function Dr(e,t){var n=-1,r=Ha(e)?re(e.length):[];return lr(e,function(e,i,o){r[++n]=t(e,i,o)}),r}function Mr(e){var t=so(e);return 1==t.length&&t[0][2]?Po(t[0][0],t[0][1]):function(n){return n===e||xr(n,e,t)}}function Nr(e,t){return vo(e)&&wo(t)?Po(Do(e),t):function(n){var i=Cs(n,e);return i===r&&i===t?Os(n,e):jr(t,i,3)}}function Ur(e,t,n,i,o){e!==t&&yr(t,function(a,s){if(o||(o=new Gn),Qa(a))!function(e,t,n,i,o,a,s){var c=Oo(e,n),u=Oo(t,n),l=s.get(u);if(l)Xn(e,n,l);else{var d=a?a(c,u,n+\"\",e,t,s):r,h=d===r;if(h){var p=qa(u),f=!p&&Ga(u),m=!p&&!f&&cs(u);d=u,p||f||m?qa(c)?d=c:Wa(c)?d=Oi(c):f?(h=!1,d=_i(u,!0)):m?(h=!1,d=wi(u,!0)):d=[]:rs(u)||Va(u)?(d=c,Va(c)?d=ys(c):Qa(c)&&!Ja(c)||(d=fo(u))):h=!1}h&&(s.set(u,d),o(d,u,i,a,s),s.delete(u)),Xn(e,n,d)}}(e,t,s,n,Ur,i,o);else{var c=i?i(Oo(e,s),a,s+\"\",e,t,o):r;c===r&&(c=a),Xn(e,s,c)}},xs)}function Rr(e,t){var n=e.length;if(n)return yo(t+=t<0?n:0,n)?e[t]:r}function Lr(e,t,n){t=t.length?jt(t,function(e){return qa(e)?function(t){return Sr(t,1===e.length?e[0]:e)}:e}):[nc];var r=-1;t=jt(t,Kt(oo()));var i=Dr(e,function(e,n,i){var o=jt(t,function(t){return t(e)});return{criteria:o,index:++r,value:e}});return function(e){var t=e.length;for(e.sort(function(e,t){return function(e,t,n){for(var r=-1,i=e.criteria,o=t.criteria,a=i.length,s=n.length;++r<a;){var c=Pi(i[r],o[r]);if(c)return r>=s?c:c*(\"desc\"==n[r]?-1:1)}return e.index-t.index}(e,t,n)});t--;)e[t]=e[t].value;return e}(i)}function Vr(e,t,n){for(var r=-1,i=t.length,o={};++r<i;){var a=t[r],s=Sr(e,a);n(s,a)&&Jr(o,yi(a,e),s)}return o}function qr(e,t,n,r){var i=r?Ut:Nt,o=-1,a=t.length,s=e;for(e===t&&(t=Oi(t)),n&&(s=jt(e,Kt(n)));++o<a;)for(var c=0,u=t[o],l=n?n(u):u;(c=i(s,l,c,r))>-1;)s!==e&&Ge.call(s,c,1),Ge.call(e,c,1);return e}function $r(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==o){var o=i;yo(i)?Ge.call(e,i,1):ci(e,i)}}return e}function Hr(e,t){return e+ft(_n()*(t-e+1))}function Wr(e,t){var n=\"\";if(!e||t<1||t>l)return n;do{t%2&&(n+=e),(t=ft(t/2))&&(e+=e)}while(t);return n}function Gr(e,t){return Eo(Io(e,t,nc),e+\"\")}function Kr(e){return Yn(Us(e))}function Yr(e,t){var n=Us(e);return To(n,or(t,0,n.length))}function Jr(e,t,n,i){if(!Qa(e))return e;for(var o=-1,a=(t=yi(t,e)).length,s=a-1,c=e;null!=c&&++o<a;){var u=Do(t[o]),l=n;if(\"__proto__\"===u||\"constructor\"===u||\"prototype\"===u)return e;if(o!=s){var d=c[u];(l=i?i(d,u,c):r)===r&&(l=Qa(d)?d:yo(t[o+1])?[]:{})}Qn(c,u,l),c=c[u]}return e}var Zr=kn?function(e,t){return kn.set(e,t),e}:nc,Xr=ot?function(e,t){return ot(e,\"toString\",{configurable:!0,enumerable:!1,value:Qs(t),writable:!0})}:nc;function Qr(e){return To(Us(e))}function ei(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=re(i);++r<i;)o[r]=e[r+t];return o}function ti(e,t){var n;return lr(e,function(e,r,i){return!(n=t(e,r,i))}),!!n}function ni(e,t,n){var r=0,i=null==e?r:e.length;if(\"number\"==typeof t&&t==t&&i<=2147483647){for(;r<i;){var o=r+i>>>1,a=e[o];null!==a&&!ss(a)&&(n?a<=t:a<t)?r=o+1:i=o}return i}return ri(e,t,nc,n)}function ri(e,t,n,i){var o=0,a=null==e?0:e.length;if(0===a)return 0;for(var s=(t=n(t))!=t,c=null===t,u=ss(t),l=t===r;o<a;){var d=ft((o+a)/2),h=n(e[d]),p=h!==r,f=null===h,m=h==h,y=ss(h);if(s)var g=i||m;else g=l?m&&(i||p):c?m&&p&&(i||!f):u?m&&p&&!f&&(i||!y):!f&&!y&&(i?h<=t:h<t);g?o=d+1:a=d}return gn(a,4294967294)}function ii(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var a=e[n],s=t?t(a):a;if(!n||!Ua(s,c)){var c=s;o[i++]=0===a?0:a}}return o}function oi(e){return\"number\"==typeof e?e:ss(e)?d:+e}function ai(e){if(\"string\"==typeof e)return e;if(qa(e))return jt(e,ai)+\"\";if(ss(e))return Mn?Mn.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function si(e,t,n){var r=-1,i=kt,o=e.length,a=!0,s=[],c=s;if(n)a=!1,i=Et;else if(o>=200){var u=t?null:Wi(e);if(u)return sn(u);a=!1,i=Jt,c=new Wn}else c=t?[]:s;e:for(;++r<o;){var l=e[r],d=t?t(l):l;if(l=n||0!==l?l:0,a&&d==d){for(var h=c.length;h--;)if(c[h]===d)continue e;t&&c.push(d),s.push(l)}else i(c,d,n)||(c!==s&&c.push(d),s.push(l))}return s}function ci(e,t){var n=-1,r=(t=yi(t,e)).length;if(!r)return!0;for(;++n<r;){var i=Do(t[n]);if(\"__proto__\"===i&&!ze.call(e,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Co(e,t);return null==o||delete o[Do(Yo(t))]}function ui(e,t,n,r){return Jr(e,t,n(Sr(e,t)),r)}function li(e,t,n,r){for(var i=e.length,o=r?i:-1;(r?o--:++o<i)&&t(e[o],o,e););return n?ei(e,r?0:o,r?o+1:i):ei(e,r?o+1:0,r?i:o)}function di(e,t){var n=e;return n instanceof Vn&&(n=n.value()),Tt(t,function(e,t){return t.func.apply(t.thisArg,xt([e],t.args))},n)}function hi(e,t,n){var r=e.length;if(r<2)return r?si(e[0]):[];for(var i=-1,o=re(r);++i<r;)for(var a=e[i],s=-1;++s<r;)s!=i&&(o[i]=ur(o[i]||a,e[s],t,n));return si(mr(o,1),t,n)}function pi(e,t,n){for(var i=-1,o=e.length,a=t.length,s={};++i<o;){var c=i<a?t[i]:r;n(s,e[i],c)}return s}function fi(e){return Wa(e)?e:[]}function mi(e){return\"function\"==typeof e?e:nc}function yi(e,t){return qa(e)?e:vo(e,t)?[e]:Bo(gs(e))}var gi=Gr;function vi(e,t,n){var i=e.length;return n=n===r?i:n,!t&&n>=i?e:ei(e,t,n)}var bi=ct||function(e){return lt.clearTimeout(e)};function _i(e,t){if(t)return e.slice();var n=e.length,r=qe?qe(n):new e.constructor(n);return e.copy(r),r}function Si(e){var t=new e.constructor(e.byteLength);return new Ve(t).set(new Ve(e)),t}function wi(e,t){var n=t?Si(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function Pi(e,t){if(e!==t){var n=e!==r,i=null===e,o=e==e,a=ss(e),s=t!==r,c=null===t,u=t==t,l=ss(t);if(!c&&!l&&!a&&e>t||a&&s&&u&&!c&&!l||i&&s&&u||!n&&u||!o)return 1;if(!i&&!a&&!l&&e<t||l&&n&&o&&!i&&!a||c&&n&&o||!s&&o||!u)return-1}return 0}function Ii(e,t,n,r){for(var i=-1,o=e.length,a=n.length,s=-1,c=t.length,u=yn(o-a,0),l=re(c+u),d=!r;++s<c;)l[s]=t[s];for(;++i<a;)(d||i<o)&&(l[n[i]]=e[i]);for(;u--;)l[s++]=e[i++];return l}function Ci(e,t,n,r){for(var i=-1,o=e.length,a=-1,s=n.length,c=-1,u=t.length,l=yn(o-s,0),d=re(l+u),h=!r;++i<l;)d[i]=e[i];for(var p=i;++c<u;)d[p+c]=t[c];for(;++a<s;)(h||i<o)&&(d[p+n[a]]=e[i++]);return d}function Oi(e,t){var n=-1,r=e.length;for(t||(t=re(r));++n<r;)t[n]=e[n];return t}function Ai(e,t,n,i){var o=!n;n||(n={});for(var a=-1,s=t.length;++a<s;){var c=t[a],u=i?i(n[c],e[c],c,n,e):r;u===r&&(u=e[c]),o?rr(n,c,u):Qn(n,c,u)}return n}function ki(e,t){return function(n,r){var i=qa(n)?Pt:tr,o=t?t():{};return i(n,e,oo(r,2),o)}}function Ei(e){return Gr(function(t,n){var i=-1,o=n.length,a=o>1?n[o-1]:r,s=o>2?n[2]:r;for(a=e.length>3&&\"function\"==typeof a?(o--,a):r,s&&go(n[0],n[1],s)&&(a=o<3?r:a,o=1),t=Ie(t);++i<o;){var c=n[i];c&&e(t,c,i,a)}return t})}function ji(e,t){return function(n,r){if(null==n)return n;if(!Ha(n))return e(n,r);for(var i=n.length,o=t?i:-1,a=Ie(n);(t?o--:++o<i)&&!1!==r(a[o],o,a););return n}}function xi(e){return function(t,n,r){for(var i=-1,o=Ie(t),a=r(t),s=a.length;s--;){var c=a[e?s:++i];if(!1===n(o[c],c,o))break}return t}}function Ti(e){return function(t){var n=nn(t=gs(t))?ln(t):r,i=n?n[0]:t.charAt(0),o=n?vi(n,1).join(\"\"):t.slice(1);return i[e]()+o}}function zi(e){return function(t){return Tt(Js(Vs(t).replace(Ye,\"\")),e,\"\")}}function Fi(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=Un(e.prototype),r=e.apply(n,t);return Qa(r)?r:n}}function Bi(e){return function(t,n,i){var o=Ie(t);if(!Ha(t)){var a=oo(n,3);t=js(t),n=function(e){return a(o[e],e,o)}}var s=e(t,n,i);return s>-1?o[a?t[s]:s]:r}}function Di(e){return Qi(function(t){var n=t.length,o=n,a=Ln.prototype.thru;for(e&&t.reverse();o--;){var s=t[o];if(\"function\"!=typeof s)throw new Ae(i);if(a&&!c&&\"wrapper\"==ro(s))var c=new Ln([],!0)}for(o=c?o:n;++o<n;){var u=ro(s=t[o]),l=\"wrapper\"==u?no(s):r;c=l&&bo(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?c[ro(l[0])].apply(c,l[3]):1==s.length&&bo(s)?c[u]():c.thru(s)}return function(){var e=arguments,r=e[0];if(c&&1==e.length&&qa(r))return c.plant(r).value();for(var i=0,o=n?t[i].apply(this,e):r;++i<n;)o=t[i].call(this,o);return o}})}function Mi(e,t,n,i,o,a,s,u,l,d){var h=t&c,p=1&t,f=2&t,m=24&t,y=512&t,g=f?r:Fi(e);return function c(){for(var v=arguments.length,b=re(v),_=v;_--;)b[_]=arguments[_];if(m)var S=io(c),w=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}(b,S);if(i&&(b=Ii(b,i,o,m)),a&&(b=Ci(b,a,s,m)),v-=w,m&&v<d){var P=an(b,S);return $i(e,t,Mi,c.placeholder,n,b,P,u,l,d-v)}var I=p?n:this,C=f?I[e]:e;return v=b.length,u?b=function(e,t){for(var n=e.length,i=gn(t.length,n),o=Oi(e);i--;){var a=t[i];e[i]=yo(a,n)?o[a]:r}return e}(b,u):y&&v>1&&b.reverse(),h&&l<v&&(b.length=l),this&&this!==lt&&this instanceof c&&(C=g||Fi(C)),C.apply(I,b)}}function Ni(e,t){return function(n,r){return function(e,t,n,r){return vr(e,function(e,i,o){t(r,n(e),i,o)}),r}(n,e,t(r),{})}}function Ui(e,t){return function(n,i){var o;if(n===r&&i===r)return t;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ai(n),i=ai(i)):(n=oi(n),i=oi(i)),o=e(n,i)}return o}}function Ri(e){return Qi(function(t){return t=jt(t,Kt(oo())),Gr(function(n){var r=this;return e(t,function(e){return wt(e,r,n)})})})}function Li(e,t){var n=(t=t===r?\" \":ai(t)).length;if(n<2)return n?Wr(t,e):t;var i=Wr(t,ht(e/un(t)));return nn(t)?vi(ln(i),0,e).join(\"\"):i.slice(0,e)}function Vi(e){return function(t,n,i){return i&&\"number\"!=typeof i&&go(t,n,i)&&(n=i=r),t=hs(t),n===r?(n=t,t=0):n=hs(n),function(e,t,n,r){for(var i=-1,o=yn(ht((t-e)/(n||1)),0),a=re(o);o--;)a[r?o:++i]=e,e+=n;return a}(t,n,i=i===r?t<n?1:-1:hs(i),e)}}function qi(e){return function(t,n){return\"string\"==typeof t&&\"string\"==typeof n||(t=ms(t),n=ms(n)),e(t,n)}}function $i(e,t,n,i,o,a,c,u,l,d){var h=8&t;t|=h?s:64,4&(t&=~(h?64:s))||(t&=-4);var p=[e,t,o,h?a:r,h?c:r,h?r:a,h?r:c,u,l,d],f=n.apply(r,p);return bo(e)&&Ao(f,p),f.placeholder=i,jo(f,e,t)}function Hi(e){var t=Pe[e];return function(e,n){if(e=ms(e),(n=null==n?0:gn(ps(n),292))&&qt(e)){var r=(gs(e)+\"e\").split(\"e\");return+((r=(gs(t(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return t(e)}}var Wi=Cn&&1/sn(new Cn([,-0]))[1]==u?function(e){return new Cn(e)}:sc;function Gi(e){return function(t){var n=ho(t);return n==S?rn(t):n==O?cn(t):function(e,t){return jt(t,function(t){return[t,e[t]]})}(t,e(t))}}function Ki(e,t,n,o,u,l,d,h){var p=2&t;if(!p&&\"function\"!=typeof e)throw new Ae(i);var f=o?o.length:0;if(f||(t&=-97,o=u=r),d=d===r?d:yn(ps(d),0),h=h===r?h:ps(h),f-=u?u.length:0,64&t){var m=o,y=u;o=u=r}var g=p?r:no(e),v=[e,t,n,o,u,m,y,l,d,h];if(g&&function(e,t){var n=e[1],r=t[1],i=n|r,o=i<131,s=r==c&&8==n||r==c&&256==n&&e[7].length<=t[8]||384==r&&t[7].length<=t[8]&&8==n;if(!o&&!s)return e;1&r&&(e[2]=t[2],i|=1&n?0:4);var u=t[3];if(u){var l=e[3];e[3]=l?Ii(l,u,t[4]):u,e[4]=l?an(e[3],a):t[4]}(u=t[5])&&(l=e[5],e[5]=l?Ci(l,u,t[6]):u,e[6]=l?an(e[5],a):t[6]),(u=t[7])&&(e[7]=u),r&c&&(e[8]=null==e[8]?t[8]:gn(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=i}(v,g),e=v[0],t=v[1],n=v[2],o=v[3],u=v[4],!(h=v[9]=v[9]===r?p?0:e.length:yn(v[9]-f,0))&&24&t&&(t&=-25),t&&1!=t)b=8==t||16==t?function(e,t,n){var i=Fi(e);return function o(){for(var a=arguments.length,s=re(a),c=a,u=io(o);c--;)s[c]=arguments[c];var l=a<3&&s[0]!==u&&s[a-1]!==u?[]:an(s,u);return(a-=l.length)<n?$i(e,t,Mi,o.placeholder,r,s,l,r,r,n-a):wt(this&&this!==lt&&this instanceof o?i:e,this,s)}}(e,t,h):t!=s&&33!=t||u.length?Mi.apply(r,v):function(e,t,n,r){var i=1&t,o=Fi(e);return function t(){for(var a=-1,s=arguments.length,c=-1,u=r.length,l=re(u+s),d=this&&this!==lt&&this instanceof t?o:e;++c<u;)l[c]=r[c];for(;s--;)l[c++]=arguments[++a];return wt(d,i?n:this,l)}}(e,t,n,o);else var b=function(e,t,n){var r=1&t,i=Fi(e);return function t(){return(this&&this!==lt&&this instanceof t?i:e).apply(r?n:this,arguments)}}(e,t,n);return jo((g?Zr:Ao)(b,v),e,t)}function Yi(e,t,n,i){return e===r||Ua(e,je[n])&&!ze.call(i,n)?t:e}function Ji(e,t,n,i,o,a){return Qa(e)&&Qa(t)&&(a.set(t,e),Ur(e,t,r,Ji,a),a.delete(t)),e}function Zi(e){return rs(e)?r:e}function Xi(e,t,n,i,o,a){var s=1&n,c=e.length,u=t.length;if(c!=u&&!(s&&u>c))return!1;var l=a.get(e),d=a.get(t);if(l&&d)return l==t&&d==e;var h=-1,p=!0,f=2&n?new Wn:r;for(a.set(e,t),a.set(t,e);++h<c;){var m=e[h],y=t[h];if(i)var g=s?i(y,m,h,t,e,a):i(m,y,h,e,t,a);if(g!==r){if(g)continue;p=!1;break}if(f){if(!Ft(t,function(e,t){if(!Jt(f,t)&&(m===e||o(m,e,n,i,a)))return f.push(t)})){p=!1;break}}else if(m!==y&&!o(m,y,n,i,a)){p=!1;break}}return a.delete(e),a.delete(t),p}function Qi(e){return Eo(Io(e,r,$o),e+\"\")}function eo(e){return wr(e,js,uo)}function to(e){return wr(e,xs,lo)}var no=kn?function(e){return kn.get(e)}:sc;function ro(e){for(var t=e.name+\"\",n=En[t],r=ze.call(En,t)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==e)return i.name}return t}function io(e){return(ze.call(Nn,\"placeholder\")?Nn:e).placeholder}function oo(){var e=Nn.iteratee||rc;return e=e===rc?zr:e,arguments.length?e(arguments[0],arguments[1]):e}function ao(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function so(e){for(var t=js(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,wo(i)]}return t}function co(e,t){var n=function(e,t){return null==e?r:e[t]}(e,t);return Tr(n)?n:r}var uo=mt?function(e){return null==e?[]:(e=Ie(e),At(mt(e),function(t){return We.call(e,t)}))}:fc,lo=mt?function(e){for(var t=[];e;)xt(t,uo(e)),e=$e(e);return t}:fc,ho=Pr;function po(e,t,n){for(var r=-1,i=(t=yi(t,e)).length,o=!1;++r<i;){var a=Do(t[r]);if(!(o=null!=e&&n(e,a)))break;e=e[a]}return o||++r!=i?o:!!(i=null==e?0:e.length)&&Xa(i)&&yo(a,i)&&(qa(e)||Va(e))}function fo(e){return\"function\"!=typeof e.constructor||So(e)?{}:Un($e(e))}function mo(e){return qa(e)||Va(e)||!!(Ke&&e&&e[Ke])}function yo(e,t){var n=typeof e;return!!(t=t??l)&&(\"number\"==n||\"symbol\"!=n&&ye.test(e))&&e>-1&&e%1==0&&e<t}function go(e,t,n){if(!Qa(n))return!1;var r=typeof t;return!!(\"number\"==r?Ha(n)&&yo(t,n.length):\"string\"==r&&t in n)&&Ua(n[t],e)}function vo(e,t){if(qa(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!ss(e))||X.test(e)||!Z.test(e)||null!=t&&e in Ie(t)}function bo(e){var t=ro(e),n=Nn[t];if(\"function\"!=typeof n||!(t in Vn.prototype))return!1;if(e===n)return!0;var r=no(n);return!!r&&e===r[0]}(wn&&ho(new wn(new ArrayBuffer(1)))!=x||Pn&&ho(new Pn)!=S||In&&ho(In.resolve())!=I||Cn&&ho(new Cn)!=O||On&&ho(new On)!=E)&&(ho=function(e){var t=Pr(e),n=t==P?e.constructor:r,i=n?Mo(n):\"\";if(i)switch(i){case jn:return x;case xn:return S;case Tn:return I;case zn:return O;case Fn:return E}return t});var _o=xe?Ja:mc;function So(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||je)}function wo(e){return e==e&&!Qa(e)}function Po(e,t){return function(n){return null!=n&&n[e]===t&&(t!==r||e in Ie(n))}}function Io(e,t,n){return t=yn(t===r?e.length-1:t,0),function(){for(var r=arguments,i=-1,o=yn(r.length-t,0),a=re(o);++i<o;)a[i]=r[t+i];i=-1;for(var s=re(t+1);++i<t;)s[i]=r[i];return s[t]=n(a),wt(e,this,s)}}function Co(e,t){return t.length<2?e:Sr(e,ei(t,0,-1))}function Oo(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var Ao=xo(Zr),ko=dt||function(e,t){return lt.setTimeout(e,t)},Eo=xo(Xr);function jo(e,t,n){var r=t+\"\";return Eo(e,function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(n>1?\"& \":\"\")+t[r],t=t.join(n>2?\", \":\" \"),e.replace(ie,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(r,function(e,t){return It(p,function(n){var r=\"_.\"+n[0];t&n[1]&&!kt(e,r)&&e.push(r)}),e.sort()}(function(e){var t=e.match(oe);return t?t[1].split(ae):[]}(r),n)))}function xo(e){var t=0,n=0;return function(){var i=vn(),o=16-(i-n);if(n=i,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(r,arguments)}}function To(e,t){var n=-1,i=e.length,o=i-1;for(t=t===r?i:t;++n<t;){var a=Hr(n,o),s=e[a];e[a]=e[n],e[n]=s}return e.length=t,e}var zo,Fo,Bo=(zo=za(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(Q,function(e,n,r,i){t.push(r?i.replace(ue,\"$1\"):n||e)}),t},function(e){return 500===Fo.size&&Fo.clear(),e}),Fo=zo.cache,zo);function Do(e){if(\"string\"==typeof e||ss(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function Mo(e){if(null!=e){try{return Te.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}function No(e){if(e instanceof Vn)return e.clone();var t=new Ln(e.__wrapped__,e.__chain__);return t.__actions__=Oi(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var Uo=Gr(function(e,t){return Wa(e)?ur(e,mr(t,1,Wa,!0)):[]}),Ro=Gr(function(e,t){var n=Yo(t);return Wa(n)&&(n=r),Wa(e)?ur(e,mr(t,1,Wa,!0),oo(n,2)):[]}),Lo=Gr(function(e,t){var n=Yo(t);return Wa(n)&&(n=r),Wa(e)?ur(e,mr(t,1,Wa,!0),r,n):[]});function Vo(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ps(n);return i<0&&(i=yn(r+i,0)),Mt(e,oo(t,3),i)}function qo(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var o=i-1;return n!==r&&(o=ps(n),o=n<0?yn(i+o,0):gn(o,i-1)),Mt(e,oo(t,3),o,!0)}function $o(e){return null!=e&&e.length?mr(e,1):[]}function Ho(e){return e&&e.length?e[0]:r}var Wo=Gr(function(e){var t=jt(e,fi);return t.length&&t[0]===e[0]?Ar(t):[]}),Go=Gr(function(e){var t=Yo(e),n=jt(e,fi);return t===Yo(n)?t=r:n.pop(),n.length&&n[0]===e[0]?Ar(n,oo(t,2)):[]}),Ko=Gr(function(e){var t=Yo(e),n=jt(e,fi);return(t=\"function\"==typeof t?t:r)&&n.pop(),n.length&&n[0]===e[0]?Ar(n,r,t):[]});function Yo(e){var t=null==e?0:e.length;return t?e[t-1]:r}var Jo=Gr(Zo);function Zo(e,t){return e&&e.length&&t&&t.length?qr(e,t):e}var Xo=Qi(function(e,t){var n=null==e?0:e.length,r=ir(e,t);return $r(e,jt(t,function(e){return yo(e,n)?+e:e}).sort(Pi)),r});function Qo(e){return null==e?e:Sn.call(e)}var ea=Gr(function(e){return si(mr(e,1,Wa,!0))}),ta=Gr(function(e){var t=Yo(e);return Wa(t)&&(t=r),si(mr(e,1,Wa,!0),oo(t,2))}),na=Gr(function(e){var t=Yo(e);return t=\"function\"==typeof t?t:r,si(mr(e,1,Wa,!0),r,t)});function ra(e){if(!e||!e.length)return[];var t=0;return e=At(e,function(e){if(Wa(e))return t=yn(e.length,t),!0}),Wt(t,function(t){return jt(e,Vt(t))})}function ia(e,t){if(!e||!e.length)return[];var n=ra(e);return null==t?n:jt(n,function(e){return wt(t,r,e)})}var oa=Gr(function(e,t){return Wa(e)?ur(e,t):[]}),aa=Gr(function(e){return hi(At(e,Wa))}),sa=Gr(function(e){var t=Yo(e);return Wa(t)&&(t=r),hi(At(e,Wa),oo(t,2))}),ca=Gr(function(e){var t=Yo(e);return t=\"function\"==typeof t?t:r,hi(At(e,Wa),r,t)}),ua=Gr(ra),la=Gr(function(e){var t=e.length,n=t>1?e[t-1]:r;return n=\"function\"==typeof n?(e.pop(),n):r,ia(e,n)});function da(e){var t=Nn(e);return t.__chain__=!0,t}function ha(e,t){return t(e)}var pa=Qi(function(e){var t=e.length,n=t?e[0]:0,i=this.__wrapped__,o=function(t){return ir(t,e)};return!(t>1||this.__actions__.length)&&i instanceof Vn&&yo(n)?((i=i.slice(n,+n+(t?1:0))).__actions__.push({func:ha,args:[o],thisArg:r}),new Ln(i,this.__chain__).thru(function(e){return t&&!e.length&&e.push(r),e})):this.thru(o)}),fa=ki(function(e,t,n){ze.call(e,n)?++e[n]:rr(e,n,1)}),ma=Bi(Vo),ya=Bi(qo);function ga(e,t){return(qa(e)?It:lr)(e,oo(t,3))}function va(e,t){return(qa(e)?Ct:dr)(e,oo(t,3))}var ba=ki(function(e,t,n){ze.call(e,n)?e[n].push(t):rr(e,n,[t])}),_a=Gr(function(e,t,n){var r=-1,i=\"function\"==typeof t,o=Ha(e)?re(e.length):[];return lr(e,function(e){o[++r]=i?wt(t,e,n):kr(e,t,n)}),o}),Sa=ki(function(e,t,n){rr(e,n,t)});function wa(e,t){return(qa(e)?jt:Dr)(e,oo(t,3))}var Pa=ki(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]}),Ia=Gr(function(e,t){if(null==e)return[];var n=t.length;return n>1&&go(e,t[0],t[1])?t=[]:n>2&&go(t[0],t[1],t[2])&&(t=[t[0]]),Lr(e,mr(t,1),[])}),Ca=ut||function(){return lt.Date.now()};function Oa(e,t,n){return t=n?r:t,t=e&&null==t?e.length:t,Ki(e,c,r,r,r,r,t)}function Aa(e,t){var n;if(\"function\"!=typeof t)throw new Ae(i);return e=ps(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=r),n}}var ka=Gr(function(e,t,n){var r=1;if(n.length){var i=an(n,io(ka));r|=s}return Ki(e,r,t,n,i)}),Ea=Gr(function(e,t,n){var r=3;if(n.length){var i=an(n,io(Ea));r|=s}return Ki(t,r,e,n,i)});function ja(e,t,n){var o,a,s,c,u,l,d=0,h=!1,p=!1,f=!0;if(\"function\"!=typeof e)throw new Ae(i);function m(t){var n=o,i=a;return o=a=r,d=t,c=e.apply(i,n)}function y(e){var n=e-l;return l===r||n>=t||n<0||p&&e-d>=s}function g(){var e=Ca();if(y(e))return v(e);u=ko(g,function(e){var n=t-(e-l);return p?gn(n,s-(e-d)):n}(e))}function v(e){return u=r,f&&o?m(e):(o=a=r,c)}function b(){var e=Ca(),n=y(e);if(o=arguments,a=this,l=e,n){if(u===r)return function(e){return d=e,u=ko(g,t),h?m(e):c}(l);if(p)return bi(u),u=ko(g,t),m(l)}return u===r&&(u=ko(g,t)),c}return t=ms(t)||0,Qa(n)&&(h=!!n.leading,s=(p=\"maxWait\"in n)?yn(ms(n.maxWait)||0,t):s,f=\"trailing\"in n?!!n.trailing:f),b.cancel=function(){u!==r&&bi(u),d=0,o=l=a=u=r},b.flush=function(){return u===r?c:v(Ca())},b}var xa=Gr(function(e,t){return cr(e,1,t)}),Ta=Gr(function(e,t,n){return cr(e,ms(t)||0,n)});function za(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new Ae(i);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(za.Cache||Hn),n}function Fa(e){if(\"function\"!=typeof e)throw new Ae(i);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}za.Cache=Hn;var Ba=gi(function(e,t){var n=(t=1==t.length&&qa(t[0])?jt(t[0],Kt(oo())):jt(mr(t,1),Kt(oo()))).length;return Gr(function(r){for(var i=-1,o=gn(r.length,n);++i<o;)r[i]=t[i].call(this,r[i]);return wt(e,this,r)})}),Da=Gr(function(e,t){var n=an(t,io(Da));return Ki(e,s,r,t,n)}),Ma=Gr(function(e,t){var n=an(t,io(Ma));return Ki(e,64,r,t,n)}),Na=Qi(function(e,t){return Ki(e,256,r,r,r,t)});function Ua(e,t){return e===t||e!=e&&t!=t}var Ra=qi(Ir),La=qi(function(e,t){return e>=t}),Va=Er(function(){return arguments}())?Er:function(e){return es(e)&&ze.call(e,\"callee\")&&!We.call(e,\"callee\")},qa=re.isArray,$a=yt?Kt(yt):function(e){return es(e)&&Pr(e)==j};function Ha(e){return null!=e&&Xa(e.length)&&!Ja(e)}function Wa(e){return es(e)&&Ha(e)}var Ga=Bt||mc,Ka=gt?Kt(gt):function(e){return es(e)&&Pr(e)==g};function Ya(e){if(!es(e))return!1;var t=Pr(e);return t==v||\"[object DOMException]\"==t||\"string\"==typeof e.message&&\"string\"==typeof e.name&&!rs(e)}function Ja(e){if(!Qa(e))return!1;var t=Pr(e);return t==b||t==_||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function Za(e){return\"number\"==typeof e&&e==ps(e)}function Xa(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=l}function Qa(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function es(e){return null!=e&&\"object\"==typeof e}var ts=vt?Kt(vt):function(e){return es(e)&&ho(e)==S};function ns(e){return\"number\"==typeof e||es(e)&&Pr(e)==w}function rs(e){if(!es(e)||Pr(e)!=P)return!1;var t=$e(e);if(null===t)return!0;var n=ze.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&Te.call(n)==Me}var is=bt?Kt(bt):function(e){return es(e)&&Pr(e)==C},os=_t?Kt(_t):function(e){return es(e)&&ho(e)==O};function as(e){return\"string\"==typeof e||!qa(e)&&es(e)&&Pr(e)==A}function ss(e){return\"symbol\"==typeof e||es(e)&&Pr(e)==k}var cs=St?Kt(St):function(e){return es(e)&&Xa(e.length)&&!!rt[Pr(e)]},us=qi(Br),ls=qi(function(e,t){return e<=t});function ds(e){if(!e)return[];if(Ha(e))return as(e)?ln(e):Oi(e);if(Ze&&e[Ze])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Ze]());var t=ho(e);return(t==S?rn:t==O?sn:Us)(e)}function hs(e){return e?(e=ms(e))===u||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function ps(e){var t=hs(e),n=t%1;return t==t?n?t-n:t:0}function fs(e){return e?or(ps(e),0,h):0}function ms(e){if(\"number\"==typeof e)return e;if(ss(e))return d;if(Qa(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=Qa(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=Gt(e);var n=pe.test(e);return n||me.test(e)?st(e.slice(2),n?2:8):he.test(e)?d:+e}function ys(e){return Ai(e,xs(e))}function gs(e){return null==e?\"\":ai(e)}var vs=Ei(function(e,t){if(So(t)||Ha(t))Ai(t,js(t),e);else for(var n in t)ze.call(t,n)&&Qn(e,n,t[n])}),bs=Ei(function(e,t){Ai(t,xs(t),e)}),_s=Ei(function(e,t,n,r){Ai(t,xs(t),e,r)}),Ss=Ei(function(e,t,n,r){Ai(t,js(t),e,r)}),ws=Qi(ir),Ps=Gr(function(e,t){e=Ie(e);var n=-1,i=t.length,o=i>2?t[2]:r;for(o&&go(t[0],t[1],o)&&(i=1);++n<i;)for(var a=t[n],s=xs(a),c=-1,u=s.length;++c<u;){var l=s[c],d=e[l];(d===r||Ua(d,je[l])&&!ze.call(e,l))&&(e[l]=a[l])}return e}),Is=Gr(function(e){return e.push(r,Ji),wt(zs,r,e)});function Cs(e,t,n){var i=null==e?r:Sr(e,t);return i===r?n:i}function Os(e,t){return null!=e&&po(e,t,Or)}var As=Ni(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=De.call(t)),e[t]=n},Qs(nc)),ks=Ni(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=De.call(t)),ze.call(e,t)?e[t].push(n):e[t]=[n]},oo),Es=Gr(kr);function js(e){return Ha(e)?Kn(e):Fr(e)}function xs(e){return Ha(e)?Kn(e,!0):function(e){if(!Qa(e))return function(e){var t=[];if(null!=e)for(var n in Ie(e))t.push(n);return t}(e);var t=So(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&ze.call(e,r))&&n.push(r);return n}(e)}var Ts=Ei(function(e,t,n){Ur(e,t,n)}),zs=Ei(function(e,t,n,r){Ur(e,t,n,r)}),Fs=Qi(function(e,t){var n={};if(null==e)return n;var r=!1;t=jt(t,function(t){return t=yi(t,e),r||(r=t.length>1),t}),Ai(e,to(e),n),r&&(n=ar(n,7,Zi));for(var i=t.length;i--;)ci(n,t[i]);return n}),Bs=Qi(function(e,t){return null==e?{}:function(e,t){return Vr(e,t,function(t,n){return Os(e,n)})}(e,t)});function Ds(e,t){if(null==e)return{};var n=jt(to(e),function(e){return[e]});return t=oo(t),Vr(e,n,function(e,n){return t(e,n[0])})}var Ms=Gi(js),Ns=Gi(xs);function Us(e){return null==e?[]:Yt(e,js(e))}var Rs=zi(function(e,t,n){return t=t.toLowerCase(),e+(n?Ls(t):t)});function Ls(e){return Ys(gs(e).toLowerCase())}function Vs(e){return(e=gs(e))&&e.replace(ge,Qt).replace(Je,\"\")}var qs=zi(function(e,t,n){return e+(n?\"-\":\"\")+t.toLowerCase()}),$s=zi(function(e,t,n){return e+(n?\" \":\"\")+t.toLowerCase()}),Hs=Ti(\"toLowerCase\"),Ws=zi(function(e,t,n){return e+(n?\"_\":\"\")+t.toLowerCase()}),Gs=zi(function(e,t,n){return e+(n?\" \":\"\")+Ys(t)}),Ks=zi(function(e,t,n){return e+(n?\" \":\"\")+t.toUpperCase()}),Ys=Ti(\"toUpperCase\");function Js(e,t,n){return e=gs(e),(t=n?r:t)===r?function(e){return et.test(e)}(e)?function(e){return e.match(Xe)||[]}(e):function(e){return e.match(se)||[]}(e):e.match(t)||[]}var Zs=Gr(function(e,t){try{return wt(e,r,t)}catch(e){return Ya(e)?e:new Se(e)}}),Xs=Qi(function(e,t){return It(t,function(t){t=Do(t),rr(e,t,ka(e[t],e))}),e});function Qs(e){return function(){return e}}var ec=Di(),tc=Di(!0);function nc(e){return e}function rc(e){return zr(\"function\"==typeof e?e:ar(e,1))}var ic=Gr(function(e,t){return function(n){return kr(n,e,t)}}),oc=Gr(function(e,t){return function(n){return kr(e,n,t)}});function ac(e,t,n){var r=js(t),i=_r(t,r);null!=n||Qa(t)&&(i.length||!r.length)||(n=t,t=e,e=this,i=_r(t,js(t)));var o=!(Qa(n)&&\"chain\"in n&&!n.chain),a=Ja(e);return It(i,function(n){var r=t[n];e[n]=r,a&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__);return(n.__actions__=Oi(this.__actions__)).push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,xt([this.value()],arguments))})}),e}function sc(){}var cc=Ri(jt),uc=Ri(Ot),lc=Ri(Ft);function dc(e){return vo(e)?Vt(Do(e)):function(e){return function(t){return Sr(t,e)}}(e)}var hc=Vi(),pc=Vi(!0);function fc(){return[]}function mc(){return!1}var yc,gc=Ui(function(e,t){return e+t},0),vc=Hi(\"ceil\"),bc=Ui(function(e,t){return e/t},1),_c=Hi(\"floor\"),Sc=Ui(function(e,t){return e*t},1),wc=Hi(\"round\"),Pc=Ui(function(e,t){return e-t},0);return Nn.after=function(e,t){if(\"function\"!=typeof t)throw new Ae(i);return e=ps(e),function(){if(--e<1)return t.apply(this,arguments)}},Nn.ary=Oa,Nn.assign=vs,Nn.assignIn=bs,Nn.assignInWith=_s,Nn.assignWith=Ss,Nn.at=ws,Nn.before=Aa,Nn.bind=ka,Nn.bindAll=Xs,Nn.bindKey=Ea,Nn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return qa(e)?e:[e]},Nn.chain=da,Nn.chunk=function(e,t,n){t=(n?go(e,t,n):t===r)?1:yn(ps(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var o=0,a=0,s=re(ht(i/t));o<i;)s[a++]=ei(e,o,o+=t);return s},Nn.compact=function(e){for(var t=-1,n=null==e?0:e.length,r=0,i=[];++t<n;){var o=e[t];o&&(i[r++]=o)}return i},Nn.concat=function(){var e=arguments.length;if(!e)return[];for(var t=re(e-1),n=arguments[0],r=e;r--;)t[r-1]=arguments[r];return xt(qa(n)?Oi(n):[n],mr(t,1))},Nn.cond=function(e){var t=null==e?0:e.length,n=oo();return e=t?jt(e,function(e){if(\"function\"!=typeof e[1])throw new Ae(i);return[n(e[0]),e[1]]}):[],Gr(function(n){for(var r=-1;++r<t;){var i=e[r];if(wt(i[0],this,n))return wt(i[1],this,n)}})},Nn.conforms=function(e){return function(e){var t=js(e);return function(n){return sr(n,e,t)}}(ar(e,1))},Nn.constant=Qs,Nn.countBy=fa,Nn.create=function(e,t){var n=Un(e);return null==t?n:nr(n,t)},Nn.curry=function e(t,n,i){var o=Ki(t,8,r,r,r,r,r,n=i?r:n);return o.placeholder=e.placeholder,o},Nn.curryRight=function e(t,n,i){var o=Ki(t,16,r,r,r,r,r,n=i?r:n);return o.placeholder=e.placeholder,o},Nn.debounce=ja,Nn.defaults=Ps,Nn.defaultsDeep=Is,Nn.defer=xa,Nn.delay=Ta,Nn.difference=Uo,Nn.differenceBy=Ro,Nn.differenceWith=Lo,Nn.drop=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,(t=n||t===r?1:ps(t))<0?0:t,i):[]},Nn.dropRight=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,0,(t=i-(t=n||t===r?1:ps(t)))<0?0:t):[]},Nn.dropRightWhile=function(e,t){return e&&e.length?li(e,oo(t,3),!0,!0):[]},Nn.dropWhile=function(e,t){return e&&e.length?li(e,oo(t,3),!0):[]},Nn.fill=function(e,t,n,i){var o=null==e?0:e.length;return o?(n&&\"number\"!=typeof n&&go(e,t,n)&&(n=0,i=o),function(e,t,n,i){var o=e.length;for((n=ps(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:ps(i))<0&&(i+=o),i=n>i?0:fs(i);n<i;)e[n++]=t;return e}(e,t,n,i)):[]},Nn.filter=function(e,t){return(qa(e)?At:fr)(e,oo(t,3))},Nn.flatMap=function(e,t){return mr(wa(e,t),1)},Nn.flatMapDeep=function(e,t){return mr(wa(e,t),u)},Nn.flatMapDepth=function(e,t,n){return n=n===r?1:ps(n),mr(wa(e,t),n)},Nn.flatten=$o,Nn.flattenDeep=function(e){return null!=e&&e.length?mr(e,u):[]},Nn.flattenDepth=function(e,t){return null!=e&&e.length?mr(e,t=t===r?1:ps(t)):[]},Nn.flip=function(e){return Ki(e,512)},Nn.flow=ec,Nn.flowRight=tc,Nn.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,r={};++t<n;){var i=e[t];rr(r,i[0],i[1])}return r},Nn.functions=function(e){return null==e?[]:_r(e,js(e))},Nn.functionsIn=function(e){return null==e?[]:_r(e,xs(e))},Nn.groupBy=ba,Nn.initial=function(e){return null!=e&&e.length?ei(e,0,-1):[]},Nn.intersection=Wo,Nn.intersectionBy=Go,Nn.intersectionWith=Ko,Nn.invert=As,Nn.invertBy=ks,Nn.invokeMap=_a,Nn.iteratee=rc,Nn.keyBy=Sa,Nn.keys=js,Nn.keysIn=xs,Nn.map=wa,Nn.mapKeys=function(e,t){var n={};return t=oo(t,3),vr(e,function(e,r,i){rr(n,t(e,r,i),e)}),n},Nn.mapValues=function(e,t){var n={};return t=oo(t,3),vr(e,function(e,r,i){rr(n,r,t(e,r,i))}),n},Nn.matches=function(e){return Mr(ar(e,1))},Nn.matchesProperty=function(e,t){return Nr(e,ar(t,1))},Nn.memoize=za,Nn.merge=Ts,Nn.mergeWith=zs,Nn.method=ic,Nn.methodOf=oc,Nn.mixin=ac,Nn.negate=Fa,Nn.nthArg=function(e){return e=ps(e),Gr(function(t){return Rr(t,e)})},Nn.omit=Fs,Nn.omitBy=function(e,t){return Ds(e,Fa(oo(t)))},Nn.once=function(e){return Aa(2,e)},Nn.orderBy=function(e,t,n,i){return null==e?[]:(qa(t)||(t=null==t?[]:[t]),qa(n=i?r:n)||(n=null==n?[]:[n]),Lr(e,t,n))},Nn.over=cc,Nn.overArgs=Ba,Nn.overEvery=uc,Nn.overSome=lc,Nn.partial=Da,Nn.partialRight=Ma,Nn.partition=Pa,Nn.pick=Bs,Nn.pickBy=Ds,Nn.property=dc,Nn.propertyOf=function(e){return function(t){return null==e?r:Sr(e,t)}},Nn.pull=Jo,Nn.pullAll=Zo,Nn.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?qr(e,t,oo(n,2)):e},Nn.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?qr(e,t,r,n):e},Nn.pullAt=Xo,Nn.range=hc,Nn.rangeRight=pc,Nn.rearg=Na,Nn.reject=function(e,t){return(qa(e)?At:fr)(e,Fa(oo(t,3)))},Nn.remove=function(e,t){var n=[];if(!e||!e.length)return n;var r=-1,i=[],o=e.length;for(t=oo(t,3);++r<o;){var a=e[r];t(a,r,e)&&(n.push(a),i.push(r))}return $r(e,i),n},Nn.rest=function(e,t){if(\"function\"!=typeof e)throw new Ae(i);return Gr(e,t=t===r?t:ps(t))},Nn.reverse=Qo,Nn.sampleSize=function(e,t,n){return t=(n?go(e,t,n):t===r)?1:ps(t),(qa(e)?Jn:Yr)(e,t)},Nn.set=function(e,t,n){return null==e?e:Jr(e,t,n)},Nn.setWith=function(e,t,n,i){return i=\"function\"==typeof i?i:r,null==e?e:Jr(e,t,n,i)},Nn.shuffle=function(e){return(qa(e)?Zn:Qr)(e)},Nn.slice=function(e,t,n){var i=null==e?0:e.length;return i?(n&&\"number\"!=typeof n&&go(e,t,n)?(t=0,n=i):(t=null==t?0:ps(t),n=n===r?i:ps(n)),ei(e,t,n)):[]},Nn.sortBy=Ia,Nn.sortedUniq=function(e){return e&&e.length?ii(e):[]},Nn.sortedUniqBy=function(e,t){return e&&e.length?ii(e,oo(t,2)):[]},Nn.split=function(e,t,n){return n&&\"number\"!=typeof n&&go(e,t,n)&&(t=n=r),(n=n===r?h:n>>>0)?(e=gs(e))&&(\"string\"==typeof t||null!=t&&!is(t))&&!(t=ai(t))&&nn(e)?vi(ln(e),0,n):e.split(t,n):[]},Nn.spread=function(e,t){if(\"function\"!=typeof e)throw new Ae(i);return t=null==t?0:yn(ps(t),0),Gr(function(n){var r=n[t],i=vi(n,0,t);return r&&xt(i,r),wt(e,this,i)})},Nn.tail=function(e){var t=null==e?0:e.length;return t?ei(e,1,t):[]},Nn.take=function(e,t,n){return e&&e.length?ei(e,0,(t=n||t===r?1:ps(t))<0?0:t):[]},Nn.takeRight=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,(t=i-(t=n||t===r?1:ps(t)))<0?0:t,i):[]},Nn.takeRightWhile=function(e,t){return e&&e.length?li(e,oo(t,3),!1,!0):[]},Nn.takeWhile=function(e,t){return e&&e.length?li(e,oo(t,3)):[]},Nn.tap=function(e,t){return t(e),e},Nn.throttle=function(e,t,n){var r=!0,o=!0;if(\"function\"!=typeof e)throw new Ae(i);return Qa(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),ja(e,t,{leading:r,maxWait:t,trailing:o})},Nn.thru=ha,Nn.toArray=ds,Nn.toPairs=Ms,Nn.toPairsIn=Ns,Nn.toPath=function(e){return qa(e)?jt(e,Do):ss(e)?[e]:Oi(Bo(gs(e)))},Nn.toPlainObject=ys,Nn.transform=function(e,t,n){var r=qa(e),i=r||Ga(e)||cs(e);if(t=oo(t,4),null==n){var o=e&&e.constructor;n=i?r?new o:[]:Qa(e)&&Ja(o)?Un($e(e)):{}}return(i?It:vr)(e,function(e,r,i){return t(n,e,r,i)}),n},Nn.unary=function(e){return Oa(e,1)},Nn.union=ea,Nn.unionBy=ta,Nn.unionWith=na,Nn.uniq=function(e){return e&&e.length?si(e):[]},Nn.uniqBy=function(e,t){return e&&e.length?si(e,oo(t,2)):[]},Nn.uniqWith=function(e,t){return t=\"function\"==typeof t?t:r,e&&e.length?si(e,r,t):[]},Nn.unset=function(e,t){return null==e||ci(e,t)},Nn.unzip=ra,Nn.unzipWith=ia,Nn.update=function(e,t,n){return null==e?e:ui(e,t,mi(n))},Nn.updateWith=function(e,t,n,i){return i=\"function\"==typeof i?i:r,null==e?e:ui(e,t,mi(n),i)},Nn.values=Us,Nn.valuesIn=function(e){return null==e?[]:Yt(e,xs(e))},Nn.without=oa,Nn.words=Js,Nn.wrap=function(e,t){return Da(mi(t),e)},Nn.xor=aa,Nn.xorBy=sa,Nn.xorWith=ca,Nn.zip=ua,Nn.zipObject=function(e,t){return pi(e||[],t||[],Qn)},Nn.zipObjectDeep=function(e,t){return pi(e||[],t||[],Jr)},Nn.zipWith=la,Nn.entries=Ms,Nn.entriesIn=Ns,Nn.extend=bs,Nn.extendWith=_s,ac(Nn,Nn),Nn.add=gc,Nn.attempt=Zs,Nn.camelCase=Rs,Nn.capitalize=Ls,Nn.ceil=vc,Nn.clamp=function(e,t,n){return n===r&&(n=t,t=r),n!==r&&(n=(n=ms(n))==n?n:0),t!==r&&(t=(t=ms(t))==t?t:0),or(ms(e),t,n)},Nn.clone=function(e){return ar(e,4)},Nn.cloneDeep=function(e){return ar(e,5)},Nn.cloneDeepWith=function(e,t){return ar(e,5,t=\"function\"==typeof t?t:r)},Nn.cloneWith=function(e,t){return ar(e,4,t=\"function\"==typeof t?t:r)},Nn.conformsTo=function(e,t){return null==t||sr(e,t,js(t))},Nn.deburr=Vs,Nn.defaultTo=function(e,t){return null==e||e!=e?t:e},Nn.divide=bc,Nn.endsWith=function(e,t,n){e=gs(e),t=ai(t);var i=e.length,o=n=n===r?i:or(ps(n),0,i);return(n-=t.length)>=0&&e.slice(n,o)==t},Nn.eq=Ua,Nn.escape=function(e){return(e=gs(e))&&G.test(e)?e.replace(H,en):e},Nn.escapeRegExp=function(e){return(e=gs(e))&&te.test(e)?e.replace(ee,\"\\\\$&\"):e},Nn.every=function(e,t,n){var i=qa(e)?Ot:hr;return n&&go(e,t,n)&&(t=r),i(e,oo(t,3))},Nn.find=ma,Nn.findIndex=Vo,Nn.findKey=function(e,t){return Dt(e,oo(t,3),vr)},Nn.findLast=ya,Nn.findLastIndex=qo,Nn.findLastKey=function(e,t){return Dt(e,oo(t,3),br)},Nn.floor=_c,Nn.forEach=ga,Nn.forEachRight=va,Nn.forIn=function(e,t){return null==e?e:yr(e,oo(t,3),xs)},Nn.forInRight=function(e,t){return null==e?e:gr(e,oo(t,3),xs)},Nn.forOwn=function(e,t){return e&&vr(e,oo(t,3))},Nn.forOwnRight=function(e,t){return e&&br(e,oo(t,3))},Nn.get=Cs,Nn.gt=Ra,Nn.gte=La,Nn.has=function(e,t){return null!=e&&po(e,t,Cr)},Nn.hasIn=Os,Nn.head=Ho,Nn.identity=nc,Nn.includes=function(e,t,n,r){e=Ha(e)?e:Us(e),n=n&&!r?ps(n):0;var i=e.length;return n<0&&(n=yn(i+n,0)),as(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&Nt(e,t,n)>-1},Nn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ps(n);return i<0&&(i=yn(r+i,0)),Nt(e,t,i)},Nn.inRange=function(e,t,n){return t=hs(t),n===r?(n=t,t=0):n=hs(n),function(e,t,n){return e>=gn(t,n)&&e<yn(t,n)}(e=ms(e),t,n)},Nn.invoke=Es,Nn.isArguments=Va,Nn.isArray=qa,Nn.isArrayBuffer=$a,Nn.isArrayLike=Ha,Nn.isArrayLikeObject=Wa,Nn.isBoolean=function(e){return!0===e||!1===e||es(e)&&Pr(e)==y},Nn.isBuffer=Ga,Nn.isDate=Ka,Nn.isElement=function(e){return es(e)&&1===e.nodeType&&!rs(e)},Nn.isEmpty=function(e){if(null==e)return!0;if(Ha(e)&&(qa(e)||\"string\"==typeof e||\"function\"==typeof e.splice||Ga(e)||cs(e)||Va(e)))return!e.length;var t=ho(e);if(t==S||t==O)return!e.size;if(So(e))return!Fr(e).length;for(var n in e)if(ze.call(e,n))return!1;return!0},Nn.isEqual=function(e,t){return jr(e,t)},Nn.isEqualWith=function(e,t,n){var i=(n=\"function\"==typeof n?n:r)?n(e,t):r;return i===r?jr(e,t,r,n):!!i},Nn.isError=Ya,Nn.isFinite=function(e){return\"number\"==typeof e&&qt(e)},Nn.isFunction=Ja,Nn.isInteger=Za,Nn.isLength=Xa,Nn.isMap=ts,Nn.isMatch=function(e,t){return e===t||xr(e,t,so(t))},Nn.isMatchWith=function(e,t,n){return n=\"function\"==typeof n?n:r,xr(e,t,so(t),n)},Nn.isNaN=function(e){return ns(e)&&e!=+e},Nn.isNative=function(e){if(_o(e))throw new Se(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Tr(e)},Nn.isNil=function(e){return null==e},Nn.isNull=function(e){return null===e},Nn.isNumber=ns,Nn.isObject=Qa,Nn.isObjectLike=es,Nn.isPlainObject=rs,Nn.isRegExp=is,Nn.isSafeInteger=function(e){return Za(e)&&e>=-9007199254740991&&e<=l},Nn.isSet=os,Nn.isString=as,Nn.isSymbol=ss,Nn.isTypedArray=cs,Nn.isUndefined=function(e){return e===r},Nn.isWeakMap=function(e){return es(e)&&ho(e)==E},Nn.isWeakSet=function(e){return es(e)&&\"[object WeakSet]\"==Pr(e)},Nn.join=function(e,t){return null==e?\"\":fn.call(e,t)},Nn.kebabCase=qs,Nn.last=Yo,Nn.lastIndexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=ps(n))<0?yn(i+o,0):gn(o,i-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,o):Mt(e,Rt,o,!0)},Nn.lowerCase=$s,Nn.lowerFirst=Hs,Nn.lt=us,Nn.lte=ls,Nn.max=function(e){return e&&e.length?pr(e,nc,Ir):r},Nn.maxBy=function(e,t){return e&&e.length?pr(e,oo(t,2),Ir):r},Nn.mean=function(e){return Lt(e,nc)},Nn.meanBy=function(e,t){return Lt(e,oo(t,2))},Nn.min=function(e){return e&&e.length?pr(e,nc,Br):r},Nn.minBy=function(e,t){return e&&e.length?pr(e,oo(t,2),Br):r},Nn.stubArray=fc,Nn.stubFalse=mc,Nn.stubObject=function(){return{}},Nn.stubString=function(){return\"\"},Nn.stubTrue=function(){return!0},Nn.multiply=Sc,Nn.nth=function(e,t){return e&&e.length?Rr(e,ps(t)):r},Nn.noConflict=function(){return lt._===this&&(lt._=Ne),this},Nn.noop=sc,Nn.now=Ca,Nn.pad=function(e,t,n){e=gs(e);var r=(t=ps(t))?un(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return Li(ft(i),n)+e+Li(ht(i),n)},Nn.padEnd=function(e,t,n){e=gs(e);var r=(t=ps(t))?un(e):0;return t&&r<t?e+Li(t-r,n):e},Nn.padStart=function(e,t,n){e=gs(e);var r=(t=ps(t))?un(e):0;return t&&r<t?Li(t-r,n)+e:e},Nn.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),bn(gs(e).replace(ne,\"\"),t||0)},Nn.random=function(e,t,n){if(n&&\"boolean\"!=typeof n&&go(e,t,n)&&(t=n=r),n===r&&(\"boolean\"==typeof t?(n=t,t=r):\"boolean\"==typeof e&&(n=e,e=r)),e===r&&t===r?(e=0,t=1):(e=hs(e),t===r?(t=e,e=0):t=hs(t)),e>t){var i=e;e=t,t=i}if(n||e%1||t%1){var o=_n();return gn(e+o*(t-e+at(\"1e-\"+((o+\"\").length-1))),t)}return Hr(e,t)},Nn.reduce=function(e,t,n){var r=qa(e)?Tt:$t,i=arguments.length<3;return r(e,oo(t,4),n,i,lr)},Nn.reduceRight=function(e,t,n){var r=qa(e)?zt:$t,i=arguments.length<3;return r(e,oo(t,4),n,i,dr)},Nn.repeat=function(e,t,n){return t=(n?go(e,t,n):t===r)?1:ps(t),Wr(gs(e),t)},Nn.replace=function(){var e=arguments,t=gs(e[0]);return e.length<3?t:t.replace(e[1],e[2])},Nn.result=function(e,t,n){var i=-1,o=(t=yi(t,e)).length;for(o||(o=1,e=r);++i<o;){var a=null==e?r:e[Do(t[i])];a===r&&(i=o,a=n),e=Ja(a)?a.call(e):a}return e},Nn.round=wc,Nn.runInContext=e,Nn.sample=function(e){return(qa(e)?Yn:Kr)(e)},Nn.size=function(e){if(null==e)return 0;if(Ha(e))return as(e)?un(e):e.length;var t=ho(e);return t==S||t==O?e.size:Fr(e).length},Nn.snakeCase=Ws,Nn.some=function(e,t,n){var i=qa(e)?Ft:ti;return n&&go(e,t,n)&&(t=r),i(e,oo(t,3))},Nn.sortedIndex=function(e,t){return ni(e,t)},Nn.sortedIndexBy=function(e,t,n){return ri(e,t,oo(n,2))},Nn.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var r=ni(e,t);if(r<n&&Ua(e[r],t))return r}return-1},Nn.sortedLastIndex=function(e,t){return ni(e,t,!0)},Nn.sortedLastIndexBy=function(e,t,n){return ri(e,t,oo(n,2),!0)},Nn.sortedLastIndexOf=function(e,t){if(null!=e&&e.length){var n=ni(e,t,!0)-1;if(Ua(e[n],t))return n}return-1},Nn.startCase=Gs,Nn.startsWith=function(e,t,n){return e=gs(e),n=null==n?0:or(ps(n),0,e.length),t=ai(t),e.slice(n,n+t.length)==t},Nn.subtract=Pc,Nn.sum=function(e){return e&&e.length?Ht(e,nc):0},Nn.sumBy=function(e,t){return e&&e.length?Ht(e,oo(t,2)):0},Nn.template=function(e,t,n){var i=Nn.templateSettings;n&&go(e,t,n)&&(t=r),e=gs(e),t=Ss({},t,i,Yi);var o=Ss({},t.imports,i.imports,Yi),a=js(o),s=Yt(o,a);It(a,function(e){if(ce.test(e))throw new Se(\"Invalid `imports` option passed into `_.template`\")});var c,u,l=0,d=t.interpolate||ve,h=\"__p += '\",p=Ce((t.escape||ve).source+\"|\"+d.source+\"|\"+(d===J?le:ve).source+\"|\"+(t.evaluate||ve).source+\"|$\",\"g\"),f=\"//# sourceURL=\"+(ze.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++nt+\"]\")+\"\\n\";e.replace(p,function(t,n,r,i,o,a){return r||(r=i),h+=e.slice(l,a).replace(be,tn),n&&(c=!0,h+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(u=!0,h+=\"';\\n\"+o+\";\\n__p += '\"),r&&(h+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=a+t.length,t}),h+=\"';\\n\";var m=ze.call(t,\"variable\")&&t.variable;if(m){if(ce.test(m))throw new Se(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(u?h.replace(L,\"\"):h).replace(V,\"$1\").replace(q,\"$1;\"),h=\"function(\"+(m||\"obj\")+\") {\\n\"+(m?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(u?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var y=Zs(function(){return we(a,f+\"return \"+h).apply(r,s)});if(y.source=h,Ya(y))throw y;return y},Nn.times=function(e,t){if((e=ps(e))<1||e>l)return[];var n=h,r=gn(e,h);t=oo(t),e-=h;for(var i=Wt(r,t);++n<e;)t(n);return i},Nn.toFinite=hs,Nn.toInteger=ps,Nn.toLength=fs,Nn.toLower=function(e){return gs(e).toLowerCase()},Nn.toNumber=ms,Nn.toSafeInteger=function(e){return e?or(ps(e),-9007199254740991,l):0===e?e:0},Nn.toString=gs,Nn.toUpper=function(e){return gs(e).toUpperCase()},Nn.trim=function(e,t,n){if((e=gs(e))&&(n||t===r))return Gt(e);if(!e||!(t=ai(t)))return e;var i=ln(e),o=ln(t);return vi(i,Zt(i,o),Xt(i,o)+1).join(\"\")},Nn.trimEnd=function(e,t,n){if((e=gs(e))&&(n||t===r))return e.slice(0,dn(e)+1);if(!e||!(t=ai(t)))return e;var i=ln(e);return vi(i,0,Xt(i,ln(t))+1).join(\"\")},Nn.trimStart=function(e,t,n){if((e=gs(e))&&(n||t===r))return e.replace(ne,\"\");if(!e||!(t=ai(t)))return e;var i=ln(e);return vi(i,Zt(i,ln(t))).join(\"\")},Nn.truncate=function(e,t){var n=30,i=\"...\";if(Qa(t)){var o=\"separator\"in t?t.separator:o;n=\"length\"in t?ps(t.length):n,i=\"omission\"in t?ai(t.omission):i}var a=(e=gs(e)).length;if(nn(e)){var s=ln(e);a=s.length}if(n>=a)return e;var c=n-un(i);if(c<1)return i;var u=s?vi(s,0,c).join(\"\"):e.slice(0,c);if(o===r)return u+i;if(s&&(c+=u.length-c),is(o)){if(e.slice(c).search(o)){var l,d=u;for(o.global||(o=Ce(o.source,gs(de.exec(o))+\"g\")),o.lastIndex=0;l=o.exec(d);)var h=l.index;u=u.slice(0,h===r?c:h)}}else if(e.indexOf(ai(o),c)!=c){var p=u.lastIndexOf(o);p>-1&&(u=u.slice(0,p))}return u+i},Nn.unescape=function(e){return(e=gs(e))&&W.test(e)?e.replace($,hn):e},Nn.uniqueId=function(e){var t=++Fe;return gs(e)+t},Nn.upperCase=Ks,Nn.upperFirst=Ys,Nn.each=ga,Nn.eachRight=va,Nn.first=Ho,ac(Nn,(yc={},vr(Nn,function(e,t){ze.call(Nn.prototype,t)||(yc[t]=e)}),yc),{chain:!1}),Nn.VERSION=\"4.18.1\",It([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(e){Nn[e].placeholder=Nn}),It([\"drop\",\"take\"],function(e,t){Vn.prototype[e]=function(n){n=n===r?1:yn(ps(n),0);var i=this.__filtered__&&!t?new Vn(this):this.clone();return i.__filtered__?i.__takeCount__=gn(n,i.__takeCount__):i.__views__.push({size:gn(n,h),type:e+(i.__dir__<0?\"Right\":\"\")}),i},Vn.prototype[e+\"Right\"]=function(t){return this.reverse()[e](t).reverse()}}),It([\"filter\",\"map\",\"takeWhile\"],function(e,t){var n=t+1,r=1==n||3==n;Vn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:oo(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}}),It([\"head\",\"last\"],function(e,t){var n=\"take\"+(t?\"Right\":\"\");Vn.prototype[e]=function(){return this[n](1).value()[0]}}),It([\"initial\",\"tail\"],function(e,t){var n=\"drop\"+(t?\"\":\"Right\");Vn.prototype[e]=function(){return this.__filtered__?new Vn(this):this[n](1)}}),Vn.prototype.compact=function(){return this.filter(nc)},Vn.prototype.find=function(e){return this.filter(e).head()},Vn.prototype.findLast=function(e){return this.reverse().find(e)},Vn.prototype.invokeMap=Gr(function(e,t){return\"function\"==typeof e?new Vn(this):this.map(function(n){return kr(n,e,t)})}),Vn.prototype.reject=function(e){return this.filter(Fa(oo(e)))},Vn.prototype.slice=function(e,t){e=ps(e);var n=this;return n.__filtered__&&(e>0||t<0)?new Vn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==r&&(n=(t=ps(t))<0?n.dropRight(-t):n.take(t-e)),n)},Vn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Vn.prototype.toArray=function(){return this.take(h)},vr(Vn.prototype,function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),o=Nn[i?\"take\"+(\"last\"==t?\"Right\":\"\"):t],a=i||/^find/.test(t);o&&(Nn.prototype[t]=function(){var t=this.__wrapped__,s=i?[1]:arguments,c=t instanceof Vn,u=s[0],l=c||qa(t),d=function(e){var t=o.apply(Nn,xt([e],s));return i&&h?t[0]:t};l&&n&&\"function\"==typeof u&&1!=u.length&&(c=l=!1);var h=this.__chain__,p=!!this.__actions__.length,f=a&&!h,m=c&&!p;if(!a&&l){t=m?t:new Vn(this);var y=e.apply(t,s);return y.__actions__.push({func:ha,args:[d],thisArg:r}),new Ln(y,h)}return f&&m?e.apply(this,s):(y=this.thru(d),f?i?y.value()[0]:y.value():y)})}),It([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(e){var t=ke[e],n=/^(?:push|sort|unshift)$/.test(e)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(e);Nn.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(qa(i)?i:[],e)}return this[n](function(n){return t.apply(qa(n)?n:[],e)})}}),vr(Vn.prototype,function(e,t){var n=Nn[t];if(n){var r=n.name+\"\";ze.call(En,r)||(En[r]=[]),En[r].push({name:t,func:n})}}),En[Mi(r,2).name]=[{name:\"wrapper\",func:r}],Vn.prototype.clone=function(){var e=new Vn(this.__wrapped__);return e.__actions__=Oi(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Oi(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Oi(this.__views__),e},Vn.prototype.reverse=function(){if(this.__filtered__){var e=new Vn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Vn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=qa(e),r=t<0,i=n?e.length:0,o=function(e,t,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case\"drop\":e+=a;break;case\"dropRight\":t-=a;break;case\"take\":t=gn(t,e+a);break;case\"takeRight\":e=yn(e,t-a)}}return{start:e,end:t}}(0,i,this.__views__),a=o.start,s=o.end,c=s-a,u=r?s:a-1,l=this.__iteratees__,d=l.length,h=0,p=gn(c,this.__takeCount__);if(!n||!r&&i==c&&p==c)return di(e,this.__actions__);var f=[];e:for(;c--&&h<p;){for(var m=-1,y=e[u+=t];++m<d;){var g=l[m],v=g.iteratee,b=g.type,_=v(y);if(2==b)y=_;else if(!_){if(1==b)continue e;break e}}f[h++]=y}return f},Nn.prototype.at=pa,Nn.prototype.chain=function(){return da(this)},Nn.prototype.commit=function(){return new Ln(this.value(),this.__chain__)},Nn.prototype.next=function(){this.__values__===r&&(this.__values__=ds(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?r:this.__values__[this.__index__++]}},Nn.prototype.plant=function(e){for(var t,n=this;n instanceof Rn;){var i=No(n);i.__index__=0,i.__values__=r,t?o.__wrapped__=i:t=i;var o=i;n=n.__wrapped__}return o.__wrapped__=e,t},Nn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Vn){var t=e;return this.__actions__.length&&(t=new Vn(this)),(t=t.reverse()).__actions__.push({func:ha,args:[Qo],thisArg:r}),new Ln(t,this.__chain__)}return this.thru(Qo)},Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return di(this.__wrapped__,this.__actions__)},Nn.prototype.first=Nn.prototype.head,Ze&&(Nn.prototype[Ze]=function(){return this}),Nn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(lt._=pn,define(function(){return pn})):ht?((ht.exports=pn)._=pn,dt._=pn):lt._=pn}.call(this)},1657(e){\"use strict\";e.exports=(e,t)=>{if(\"string\"!=typeof e||\"string\"!=typeof t)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===t)return[e];const n=e.indexOf(t);return-1===n?[e]:[e.slice(0,n),e.slice(n+t.length)]}},803(e){\"use strict\";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)},1635(e,t,n){\"use strict\";n.d(t,{__assign:()=>r});var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createBigCommercePaymentsAlternativeMethodsPaymentStrategy:()=>Ne,createBigCommercePaymentsButtonStrategy:()=>it,createBigCommercePaymentsCreditCardsPaymentStrategy:()=>Be,createBigCommercePaymentsCustomerStrategy:()=>We,createBigCommercePaymentsFastlaneCustomerStrategy:()=>Ye,createBigCommercePaymentsFastlanePaymentStrategy:()=>ye,createBigCommercePaymentsPayLaterButtonStrategy:()=>st,createBigCommercePaymentsPayLaterCustomerStrategy:()=>Xe,createBigCommercePaymentsPayLaterPaymentStrategy:()=>_e,createBigCommercePaymentsPaymentStrategy:()=>J,createBigCommercePaymentsRatePayPayPaymentStrategy:()=>Ie,createBigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy:()=>Re,createBigCommercePaymentsVenmoButtonStrategy:()=>lt,createBigCommercePaymentsVenmoCustomerStrategy:()=>tt,createBigCommercePaymentsVenmoPaymentStrategy:()=>qe});var e,t=n(315);class i extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class o extends i{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(e||(e={}));class a extends i{constructor(t){super(function(t){switch(t){case e.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case e.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case e.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case e.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case e.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case e.MissingCheckoutConfig:case e.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case e.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case e.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case e.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case e.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case e.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case e.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}var s=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class c{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n){return s(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsFastlaneSdk){const r=this.getPayPalFastlaneSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(r),!this.window.bigCommercePaymentsFastlaneSdk)throw new o}return this.window.bigCommercePaymentsFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,r){return s(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsGooglePay||r){const r=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n);yield this.loadPayPalSdk(r)}if(!this.window.bigCommercePaymentsGooglePay)throw new o;return this.window.bigCommercePaymentsGooglePay})}getPayPalApmsSdk(e,t){return s(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsApms){const n=this.getPayPalApmSdkConfiguration(e,t);if(yield this.loadPayPalSdk(n),!this.window.bigCommercePaymentsApms)throw new o}return this.window.bigCommercePaymentsApms})}getPayPalMessages(e,t){return s(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsMessages){const n=this.getPayPalSdkMessagesConfiguration(e,t);yield this.loadPayPalSdk(n)}if(!this.window.bigCommercePaymentsMessages)throw new o;return this.window.bigCommercePaymentsMessages})}loadPayPalSdk({options:e,attributes:t}){return s(this,void 0,void 0,function*(){const n=this.transformConfig(e),r=this.transformConfig(t),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:r})})}getPayPalFastlaneSdkConfiguration(t,n,r){const{clientToken:i,initializationData:o}=t;if(!o||!o.clientId)throw new a(e.MissingPaymentMethod);const{intent:s,clientId:c,merchantId:u,attributionId:l}=o;return{options:{\"client-id\":c,\"merchant-id\":u,commit:!0,components:[\"fastlane\",\"three-domain-secure\"],currency:n,intent:s},attributes:{\"data-client-metadata-id\":r.replace(/-/g,\"\"),\"data-namespace\":\"bigCommercePaymentsFastlaneSdk\",\"data-partner-attribution-id\":l,\"data-sdk-client-token\":i}}}getPayPalGooglePaySdkScriptConfigOrThrow(t,n,r=!0){const{clientToken:i,initializationData:o}=t;if(!o||!o.clientId)throw new a(e.MissingPaymentMethod);const{intent:s,clientId:c,merchantId:u,buyerCountry:l,attributionId:d,isHostedCheckoutEnabled:h,isDeveloperModeApplicable:p}=o,f=h||r;return{options:Object.assign({\"client-id\":c,\"merchant-id\":u,commit:f,components:[\"googlepay\"],currency:n,intent:s},p&&{\"buyer-country\":l}),attributes:{\"data-partner-attribution-id\":d,\"data-client-token\":i,\"data-namespace\":\"bigCommercePaymentsGooglePay\"}}}getPayPalApmSdkConfiguration(t,n){const{initializationData:r}=t;if(!r||!r.clientId)throw new a(e.MissingPaymentMethod);const{intent:i,clientId:o,merchantId:s,buyerCountry:c,attributionId:u,isDeveloperModeApplicable:l,availableAlternativePaymentMethods:d=[],enabledAlternativePaymentMethods:h=[]}=r,p=this.filterFundingOptions(h),f=this.filterFundingOptions(d.filter(e=>!h.includes(e)));return{options:Object.assign({\"client-id\":o,\"merchant-id\":s,\"enable-funding\":p.length>0?p:void 0,\"disable-funding\":f.length>0?f:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:n,intent:i},l&&{\"buyer-country\":c}),attributes:{\"data-partner-attribution-id\":u,\"data-namespace\":\"bigCommercePaymentsApms\"}}}getPayPalSdkMessagesConfiguration(t,n){const{initializationData:r}=t;if(!r||!r.clientId)throw new a(e.MissingPaymentMethod);const{clientId:i,merchantId:o,attributionId:s,isDeveloperModeApplicable:c,buyerCountry:u}=r;return{options:Object.assign({\"client-id\":i,\"merchant-id\":o,components:[\"messages\"],currency:n},c&&{\"buyer-country\":u}),attributes:{\"data-namespace\":\"bigCommercePaymentsMessages\",\"data-partner-attribution-id\":s}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const r=e[n];null==r||\"\"===r||Array.isArray(r)&&0===r.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(r)?r.join(\",\"):r}))}),t}}function u(){return new c((0,t.Hb)())}function l(e,t){return Object.assign(e,{resolveIds:t})}const d={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},h=\"embedded-checkout-loading-indicator-rotation\";class p{constructor(e){this.styles=Object.assign(Object.assign({},d),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${h} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(n=>{e.style.setProperty(n,t[n])})}defineAnimation(){var e;if(document.getElementById(h))return;const t=document.createElement(\"style\");t.id=h,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${h} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}const f={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"};var m=n(8686),y=n(4043),g=n(9440);class v extends i{constructor(e){super(e||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}const b={body:{},headers:{},status:0};class _ extends i{constructor(e,{message:t,errors:n}={}){const{body:r,headers:i,status:o}=e||b;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=i,this.status=o,this.errors=n||[]}}var S,w,P,I,C,O,A,k;!function(e){e.BuyNow=\"BUY_NOW\"}(S||(S={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(w||(w={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(P||(P={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(I||(I={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(C||(C={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(O||(O={})),function(e){e.OXXO=\"oxxo\"}(A||(A={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(k||(k={}));var E=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class j{constructor(e,t,n,r){this.formPoster=e,this.paymentIntegrationService=t,this.bigCommercePaymentsRequestSender=n,this.bigCommercePaymentsScriptLoader=r}loadPayPalSdk(e,t,n,r){return E(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),o=t||i.getCartOrThrow().currency.code,a=i.getPaymentMethodOrThrow(e);return this.paypalSdk=yield this.bigCommercePaymentsScriptLoader.getPayPalSDK(a,o,n,r),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new o;return this.paypalSdk}createBuyNowCartOrThrow(t){return E(this,void 0,void 0,function*(){const n=t.getBuyNowCartRequestBody();if(!n)throw new a(e.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(n)}catch(e){throw new v}})}createOrder(e,t){return E(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:r}=yield this.bigCommercePaymentsRequestSender.createOrder(e,Object.assign({cartId:n},t));return r})}createOrderCardFields(e,t){return E(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:r,setupToken:i}=yield this.bigCommercePaymentsRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:r},i?{setupToken:i}:{})})}updateOrder(e){return E(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow();let r;e||(r=t.getConsignmentsOrThrow()[0]);try{yield this.bigCommercePaymentsRequestSender.updateOrder({availableShippingOptions:e?[]:null==r?void 0:r.availableShippingOptions,cartId:n.id,selectedShippingOption:e?null:null==r?void 0:r.selectedShippingOption})}catch(e){throw new _}})}getOrderStatus(e,t){return E(this,void 0,void 0,function*(){try{const{status:n}=yield this.bigCommercePaymentsRequestSender.getOrderStatus(e,t);return n}catch(e){throw new _}})}tokenizePayment(t,n){const r=this.paymentIntegrationService.getState().getCartOrThrow();if(!n)throw new a(e.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:t,order_id:n},r.source===S.BuyNow&&{cart_id:r.id}))}submitPayment(e,t,n){return E(this,void 0,void 0,function*(){const r={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:r},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],r=n.find(e=>e.isRecommended),i=(e?n.find(t=>t.id===e):n.find(e=>{var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)}))||r||n[0];if(!i)throw new Error(\"Your order can't be shipped to this address\");return i}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:r,name:{full_name:i}}=n[0].shipping,[o,...a]=i.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:r.address_line_1,address2:r.address_line_2,city:r.admin_area_2,countryCode:r.country_code,postalCode:r.postal_code,stateOrProvinceCode:r.admin_area_1})}getValidButtonStyle(e){const{color:t,height:n,label:r,shape:i}=e||{},o={color:t&&C[t]?t:void 0,height:this.getValidHeight(n),label:r&&I[r]?r:void 0,shape:i&&O[i]?i:void 0};return(0,g.omitBy)(o,g.isNil)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}const x=\"This API endpoint is for internal use only and may change in the future\";var T;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(T||(T={}));const z=T,F={\"X-Checkout-SDK-Version\":\"1.916.1\"};var B=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class D{constructor(e){this.requestSender=e}createOrder(e,t){return B(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,r=t,i=Object.assign({\"X-API-INTERNAL\":x,\"Content-Type\":z.Json},F);return(yield this.requestSender.post(n,{headers:i,body:r})).body})}updateOrder(e){return B(this,void 0,void 0,function*(){const t=e,n=Object.assign({\"X-API-INTERNAL\":x,\"Content-Type\":z.Json},F);return(yield this.requestSender.put(\"/api/storefront/initialization/bigcommerce_payments\",{headers:n,body:t})).body})}getOrderStatus(e=\"bigcommerce_payments\",t){return B(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,r=Object.assign({\"X-API-INTERNAL\":x,\"Content-Type\":z.Json},F);return(yield this.requestSender.get(n,Object.assign({headers:r},t))).body})}}var M=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class N{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,r){return M(this,void 0,void 0,function*(){const i=this.getPayPalSdkScriptConfigOrThrow(e,t,n);return this.loadPayPalSDK(i,r)})}loadPayPalSDK(e,t=!1){return M(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsPayPalSDK||t){const t=this.transformConfig(e.options),n=this.transformConfig(e.attributes),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(t).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:n})}if(!this.window.bigCommercePaymentsPayPalSDK)throw new o;return this.window.bigCommercePaymentsPayPalSDK})}getPayPalSdkScriptConfigOrThrow(t,n,r=!0){const{id:i,clientToken:o,initializationData:s}=t;if(!(null==s?void 0:s.clientId))throw new a(e.MissingPaymentMethod);const{intent:c,clientId:u,merchantId:l,buyerCountry:d,attributionId:h,isVenmoEnabled:p,isHostedCheckoutEnabled:f,isPayPalCreditAvailable:m,isDeveloperModeApplicable:y,availableAlternativePaymentMethods:g=[],enabledAlternativePaymentMethods:v=[],isGooglePayEnabled:b}=s,_=f||r,S=\"bigcommerce_payments_creditcards\"===i,w=S?[\"card\"]:[],P=S?[]:[\"card\"],I=m?[\"credit\",\"paylater\"]:[],C=m?[]:[\"credit\",\"paylater\"],O=p?[\"venmo\"]:[],A=p?[]:[\"venmo\"],k=g.filter(e=>!v.includes(e)),E=b?[\"googlepay\"]:[],j=r?[\"card-fields\"]:[],x=this.filterFundingOptions([...P,...C,...A,...k]),T=this.filterFundingOptions([...w,...I,...O,...v]);return{options:Object.assign({\"client-id\":u,\"merchant-id\":l,\"enable-funding\":T.length>0?T:void 0,\"disable-funding\":x.length>0?x:void 0,commit:_,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...E,...j],currency:n,intent:c},y&&{\"buyer-country\":d}),attributes:{\"data-partner-attribution-id\":h,\"data-client-token\":o,\"data-namespace\":\"bigCommercePaymentsPayPalSDK\"}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const r=e[n];null==r||\"\"===r||Array.isArray(r)&&0===r.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(r)?r.join(\",\"):r}))}),t}}const U=e=>{const{getHost:n}=e.getState();return new j((0,m.createFormPoster)(),e,new D((0,y.createRequestSender)({host:n()})),new N((0,t.vQ)()))},R=function({styles:e}){const t={};return e.color&&(t.color=e.color),e.layout&&(t.layout=e.layout),(e[\"logo-type\"]||e[\"logo-position\"])&&(t.logo={},e[\"logo-type\"]&&(t.logo.type=e[\"logo-type\"]),e[\"logo-position\"]&&(t.logo.position=e[\"logo-position\"])),e.ratio&&(t.ratio=e.ratio),(e[\"text-color\"]||e[\"text-size\"])&&(t.text={},e[\"text-color\"]&&(t.text.color=e[\"text-color\"]),e[\"text-size\"]&&(t.text.size=+e[\"text-size\"])),t};class L extends i{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class V extends L{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class q extends _{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class $ extends i{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}function H(e){return!(\"object\"!=typeof e||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument)}function W(e){return Boolean(e.instrumentId)}function G(e){return\"object\"==typeof e&&null!==e&&\"bigpayToken\"in e&&\"defaultInstrument\"in e&&\"provider\"in e&&\"trustedShippingAddress\"in e&&\"method\"in e&&\"type\"in e}var K=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Y{constructor(e,t,n,r){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.paypalSdkHelper=n,this.loadingIndicator=r}initialize(e){return K(this,void 0,void 0,function*(){const{methodId:t,bigcommerce_payments:n}=e||{};if(this.bigcommerce_payments=n,!t)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new L('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(t);const r=this.paymentIntegrationService.getState(),i=r.getPaymentMethodOrThrow(t),{container:o,bannerContainerId:a}=n,{orderId:s,paypalBNPLConfiguration:c=[],isPayPalCreditAvailable:u}=i.initializationData||{};if(void 0!==a){if(!document.getElementById(a))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=null==c?void 0:c.find(({id:e})=>\"checkout\"===e);if(u||!(null==e?void 0:e.status))return;const t=yield this.paypalSdkHelper.getPayPalMessages(i,r.getCartOrThrow().currency.code);return t&&\"function\"==typeof(null==t?void 0:t.Messages)?this.renderMessages(t,a,e):void console.error(\"[BC PayPalCommerce PayLater]: banner could not be rendered, due to issues with loading PayPal SDK\")}s?this.orderId=s:(this.loadingIndicatorContainer=null==o?void 0:o.split(\"#\")[1],yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(t),n.onInit&&\"function\"==typeof n.onInit&&n.onInit(()=>this.renderButton(t,n)),(void 0===n.shouldRenderPayPalButtonOnInitialization||n.shouldRenderPayPalButtonOnInitialization)&&this.renderButton(t,n))})}execute(e,t){return K(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]),{onError:i}=this.bigcommerce_payments||{};if(!n)throw new V([\"payment\"]);const{methodId:o,paymentData:a}=n;if(this.isPayPalVaultedInstrumentPaymentData(a)&&!this.orderId&&(this.orderId=yield this.createOrder()),!this.orderId)throw new q;const s=this.isPayPalVaultedInstrumentPaymentData(a)?this.prepareVaultedInstrumentPaymentPayload(o,this.orderId,a):this.preparePaymentPayload(o,this.orderId,a);try{yield this.paymentIntegrationService.submitOrder(r,t),yield this.paymentIntegrationService.submitPayment(s)}catch(e){return this.isProviderError(e)&&(yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n.methodId),yield new Promise((e,t)=>{var r;this.bigcommerce_payments&&(null===(r=this.paypalButton)||void 0===r||r.close(),this.renderButton(n.methodId,this.bigcommerce_payments),this.handleError(new Error(\"INSTRUMENT_DECLINED\"),i)),t()})),this.handleError(e,i),Promise.reject()}})}finalize(){return Promise.reject(new $)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}prepareVaultedInstrumentPaymentPayload(e,t,n){const{instrumentId:r,shouldSetAsDefaultInstrument:i}=n,o=!this.isTrustedVaultingFlow(n);return o?{methodId:e,paymentData:{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:i,formattedPayload:{paypal_account:{order_id:t}}}}:{methodId:e,paymentData:{instrumentId:r,shouldSetAsDefaultInstrument:i,formattedPayload:{paypal_account:{order_id:t},bigpay_token:{token:r}}}}}preparePaymentPayload(e,t,n){const{shouldSaveInstrument:r=!1,shouldSetAsDefaultInstrument:i=!1}=H(n)?n:{};return{methodId:e,paymentData:{shouldSaveInstrument:r,shouldSetAsDefaultInstrument:i,formattedPayload:{paypal_account:{order_id:t}}}}}renderButton(e,t){const n=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:i}=r.initializationData||{},{checkoutPaymentButtonStyles:o}=i||{},{container:a,onError:s,onRenderButton:c,onValidate:u,submitForm:l}=t;if(!a)throw new L('Unable to initialize payment because \"container\" argument is not provided.');const d={fundingSource:n.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o),createOrder:()=>this.createOrder(),onClick:(e,t)=>this.handleClick(t,u),onApprove:e=>this.handleApprove(e,l),onError:e=>this.handleError(e,s),onCancel:()=>this.toggleLoadingIndicator(!1)};this.paypalButton=n.Buttons(d),this.paypalButton.isEligible()&&(c&&\"function\"==typeof c&&c(),this.paypalButton.render(a))}handleClick(e,t){return K(this,void 0,void 0,function*(){const{resolve:n,reject:r}=e;yield null==t?void 0:t(()=>(this.toggleLoadingIndicator(!0),n()),r)})}handleApprove({orderID:e},t){this.orderId=e,null==t||t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createOrder(){return K(this,void 0,void 0,function*(){const e=this.getFieldsValues();return this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_paymentscheckout\",{shouldSaveInstrument:(null==e?void 0:e.shouldSaveInstrument)||!1})})}getFieldsValues(){const{getFieldsValues:e}=this.bigcommerce_payments||{};return\"function\"==typeof e?e():void 0}isTrustedVaultingFlow(e){if(e&&W(e)){const t=this.paymentIntegrationService.getState().getInstruments(),n=null==t?void 0:t.find(t=>G(t)&&t.bigpayToken===e.instrumentId);return!(G(n)&&!n.trustedShippingAddress)}return!1}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isPayPalVaultedInstrumentPaymentData(e){return!!e&&W(e)&&H(e)}renderMessages(e,t,n){const r={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:R(n)};e.Messages(r).render(`#${t}`)}isProviderError(e){var t,n,r;return!!function(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e}(e)&&\"INSTRUMENT_DECLINED\"===(null===(r=null===(n=((null===(t=null==e?void 0:e.errors)||void 0===t?void 0:t.filter(e=>e.provider_error))||[])[0])||void 0===n?void 0:n.provider_error)||void 0===r?void 0:r.code)}}const J=l(e=>new Y(e,U(e),u(),new p({containerStyles:f})),[{id:\"bigcommerce_payments\"}]);var Z,X,Q,ee,te,ne,re,ie,oe;!function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(Z||(Z={}));class ae{static get(e){const t=`${encodeURIComponent(`${e}`)}=`,n=document.cookie;let r=null;const i=n.indexOf(t);if(i>-1){let e=n.indexOf(\";\",i);-1===e&&(e=n.length),r=decodeURIComponent(n.substring(i+t.length,e))}return r}static set(e,t,n={secure:!0}){let r=`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;const{expires:i,path:o,domain:a,secure:s}=n;if(i)r+=`; expires=${i.toUTCString()}`;else{const e=new Date,t=60;e.setTime(e.getTime()+60*t*1e3),r+=`; expires=${e.toUTCString()}`}o&&(r+=`; path=${o}`),a&&(r+=`; domain=${a}`),s&&(r+=\"; secure\"),document.cookie=r}static remove(e,t){ae.set(e,\"\",Object.assign({expires:new Date(0)},t))}}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(X||(X={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(Q||(Q={})),function(e){e.Always=\"SCA_ALWAYS\"}(ee||(ee={})),function(e){e.Succeeded=\"succeeded\",e.Cancelled=\"cancelled\",e.Errored=\"errored\"}(te||(te={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(ne||(ne={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(re||(re={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(ie||(ie={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"canceled\",e.UNRECOGNIZED=\"unrecognized\"}(oe||(oe={}));var se=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class ce{constructor(){this.window=window}initializePayPalFastlane(e,t,n){return se(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\"),window.localStorage.setItem(\"axoEnv\",\"sandbox\")),!this.window.bigCommercePaymentsFastlane){const t={root:{backgroundColorPrimary:\"transparent\"}};this.window.bigCommercePaymentsFastlane=yield e.Fastlane({styles:n||t})}return this.window.bigCommercePaymentsFastlane})}getPayPalFastlaneOrThrow(){if(!this.window.bigCommercePaymentsFastlane)throw new o;return this.window.bigCommercePaymentsFastlane}lookupCustomerOrThrow(e){return se(this,void 0,void 0,function*(){return this.getPayPalFastlaneOrThrow().identity.lookupCustomerByEmail(e)})}triggerAuthenticationFlowOrThrow(e){return se(this,void 0,void 0,function*(){return e?this.getPayPalFastlaneOrThrow().identity.triggerAuthenticationFlow(e):{}})}updateStorageSessionId(e){const t=new Date;t.setDate(t.getDate()+14);const n={expires:t,secure:!0};ae.set(\"bc-fastlane-sessionId\",e,n)}removeStorageSessionId(){ae.remove(\"bc-fastlane-sessionId\")}getStorageSessionId(){return ae.get(\"bc-fastlane-sessionId\")||\"\"}mapPayPalFastlaneProfileToBcCustomerData(e,t){var n,r,i;const{authenticationState:o,profileData:a}=t,s=null===(i=null===(r=null===(n=null==a?void 0:a.card)||void 0===n?void 0:n.paymentSource)||void 0===r?void 0:r.card)||void 0===i?void 0:i.billingAddress,c=null==a?void 0:a.shippingAddress,u=null==a?void 0:a.name,l=null==a?void 0:a.card,d=c?this.mapPayPalToBcAddress(c.address,c.name,c.phoneNumber):void 0,h=s&&u?this.mapPayPalToBcAddress(s,u,null==c?void 0:c.phoneNumber):void 0,p=l?this.mapPayPalToBcInstrument(e,l):[],f=this.filterAddresses([d,h]);return{authenticationState:o||oe.UNRECOGNIZED,addresses:f,billingAddress:h,shippingAddress:d,instruments:p}}mapPayPalToBcInstrument(e,t){const{id:n,paymentSource:r}=t,{brand:i,expiry:o,lastDigits:a}=r.card,[s,c]=o.split(\"-\");return[{bigpayToken:n,brand:i,defaultInstrument:!1,expiryMonth:c,expiryYear:s,iin:\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:Z.PAN,type:\"card\"}]}mapBcToPayPalAddress(e){return{company:(null==e?void 0:e.company)||\"\",addressLine1:(null==e?void 0:e.address1)||\"\",addressLine2:(null==e?void 0:e.address2)||\"\",adminArea1:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",adminArea2:(null==e?void 0:e.city)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\"}}mapPayPalToBcAddress(e,t,n,r){const[i,o]=t.fullName.split(\" \"),a=(null==n?void 0:n.nationalNumber)||\"\",s=(null==n?void 0:n.countryCode)||\"\";return{id:Date.now(),type:\"paypal-address\",firstName:t.firstName||i||\"\",lastName:t.lastName||o||\"\",company:e.company||\"\",address1:e.addressLine1,address2:e.addressLine2||\"\",city:e.adminArea2,stateOrProvince:e.adminArea1,stateOrProvinceCode:e.adminArea1,country:e.countryCode||\"\",countryCode:e.countryCode||\"\",postalCode:e.postalCode,phone:s+a,customFields:r||[]}}filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this.isEqualAddresses(e,t))?e:[...e,t]:e,[])}isEqualAddresses(e,t){return(0,g.isEqual)(this.normalizeAddress(e),this.normalizeAddress(t))}normalizeAddress(e){return(0,g.omit)(e,[\"id\",\"phone\"])}}function ue(){return new ce}function le(e){return\"string\"!=typeof e}function de(e,t){if(t||e)return function(e){var t,n;const r={},i=(0,g.omitBy)(e.root,le),o=(0,g.omitBy)(e.input,le),a=(0,g.omitBy)(e.toggle,le),s=(0,g.omitBy)(null===(t=e.text)||void 0===t?void 0:t.body,le),c=(0,g.omitBy)(null===(n=e.text)||void 0===n?void 0:n.caption,le),u=e.branding;return Object.keys(i).length&&(r.root=i),Object.keys(o).length&&(r.input=o),Object.keys(a).length&&(r.toggle=a),Object.keys(s).length&&(r.text={},r.text.body=s),Object.keys(c).length&&(r.text=Object.assign({},r.text),r.text.caption=c),u&&(r.branding=u),r}(function(e,t){var n,r,i,o,a,s,c,u,l,d,h,p,f,m,y,g,v,b,_,S,w,P;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(f=null==t?void 0:t.toggle)||void 0===f?void 0:f.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(g=null===(y=null==t?void 0:t.text)||void 0===y?void 0:y.body)||void 0===g?void 0:g.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(b=null===(v=null==t?void 0:t.text)||void 0===v?void 0:v.body)||void 0===b?void 0:b.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(S=null===(_=null==t?void 0:t.text)||void 0===_?void 0:_.caption)||void 0===S?void 0:S.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(P=null===(w=null==t?void 0:t.text)||void 0===w?void 0:w.caption)||void 0===P?void 0:P.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}function he(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}function pe(e,t,n=!0){var r;return null!==(r=e[t])&&void 0!==r?r:n}var fe=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class me{constructor(e,t,n,r){this.paymentIntegrationService=e,this.bigCommercePaymentsRequestSender=t,this.bigCommercePaymentsSdk=n,this.bigCommercePaymentsFastlaneUtils=r}initialize(e){var t,n;return fe(this,void 0,void 0,function*(){const{methodId:r,bigcommerce_payments_fastlane:i}=e;if(!r)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(this.methodId=r,!i)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_fastlane\" argument is not provided.');if(this.bigcommerce_payments_fastlane=i,!i.onInit||\"function\"!=typeof i.onInit)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_fastlane.onInit\" argument is not provided or it is not a function.');if(!i.onChange||\"function\"!=typeof i.onChange)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_fastlane.onChange\" argument is not provided or it is not a function.');yield this.paymentIntegrationService.loadPaymentMethod(r);const o=this.paymentIntegrationService.getState(),a=o.getCartOrThrow(),s=o.getPaymentMethodOrThrow(r),{isDeveloperModeApplicable:c,isFastlaneStylingEnabled:u}=s.initializationData||{};this.threeDSVerificationMethod=null===(t=s.initializationData)||void 0===t?void 0:t.threeDSVerificationMethod,this.paypalFastlaneSdk=yield this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(s,a.currency.code,a.id);const l=de(u?null===(n=null==s?void 0:s.initializationData)||void 0===n?void 0:n.fastlaneStyles:{},null==i?void 0:i.styles);yield this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(this.paypalFastlaneSdk,!!c,l),this.shouldRunAuthenticationFlow()&&(yield this.runPayPalAuthenticationFlowOrThrow(r)),yield this.initializePayPalPaymentComponent(),i.onInit(e=>this.renderPayPalPaymentComponent(e)),i.onChange(()=>this.handlePayPalStoredInstrumentChange(r))})}execute(e,t){return fe(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]);if(!n)throw new V([\"payment\"]);const{paymentData:i,methodId:o}=n,a=i&&W(i);try{yield this.paymentIntegrationService.submitOrder(r,t);const e=a?yield this.prepareVaultedInstrumentPaymentPayload(o,i):yield this.preparePaymentPayload(o,i);yield this.paymentIntegrationService.submitPayment(e),this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId()}catch(e){if(function(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"response\"in e&&\"name\"in e.response}(e)&&\"INVALID_REQUEST\"===e.response.name){const e={translationKey:\"payment.errors.invalid_request_error\"};return this.handleError(e),Promise.reject()}if(e instanceof Error&&\"FastlaneError\"!==e.name)throw e;return Promise.reject()}})}finalize(){return Promise.reject(new $)}deinitialize(){return fe(this,void 0,void 0,function*(){return Promise.resolve()})}shouldRunAuthenticationFlow(){const e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getCustomerOrThrow(),r=e.getPaymentProviderCustomer(),i=he(r)?r:{},o=this.bigCommercePaymentsFastlaneUtils.getStorageSessionId();return!(!n.isGuest||(null==i?void 0:i.authenticationState)===oe.CANCELED||(null==i?void 0:i.authenticationState)||o!==t.id)}runPayPalAuthenticationFlowOrThrow(e){return fe(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),r=t.getCustomer(),i=t.getBillingAddress(),o=(null==r?void 0:r.email)||(null==i?void 0:i.email)||\"\",{customerContextId:a}=yield this.bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow(a),{authenticationState:c,addresses:u,instruments:l}=this.bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,s);yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:c,addresses:u,instruments:l}),s.authenticationState===oe.CANCELED?this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId():this.bigCommercePaymentsFastlaneUtils.updateStorageSessionId(n.id)}catch(e){}})}initializePayPalPaymentComponent(){return fe(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),t=e.phone,n=`${e.firstName} ${e.lastName}`.trim(),r=this.bigCommercePaymentsFastlaneUtils.getPayPalFastlaneOrThrow(),i={fields:Object.assign({cardholderName:{prefill:n,enabled:!0}},t&&{phoneNumber:{prefill:t}})};this.paypalComponentMethods=yield r.FastlaneCardComponent(i)})}renderPayPalPaymentComponent(e){const t=this.getPayPalComponentMethodsOrThrow();if(!e)throw new L('Unable to render card component because \"container\" argument is not provided.');t.render(e)}getPayPalComponentMethodsOrThrow(){if(!this.paypalComponentMethods)throw new o;return this.paypalComponentMethods}prepareVaultedInstrumentPaymentPayload(e,t){return fe(this,void 0,void 0,function*(){const{instrumentId:n}=t,r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),i=this.isBigcommercePaymentsFastlaneThreeDSAvailable()&&r.config.is3dsEnabled?yield this.get3DSNonce(n):n;return yield this.createOrder(i),{methodId:e,paymentData:{formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:i}}}}})}preparePaymentPayload(e,t){return fe(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),r=n.getBillingAddressOrThrow(),i=n.getPaymentMethodOrThrow(e),o=`${r.firstName} ${r.lastName}`.trim(),{getPaymentToken:a}=this.getPayPalComponentMethodsOrThrow(),{id:s}=yield a({name:{fullName:o},billingAddress:this.bigCommercePaymentsFastlaneUtils.mapBcToPayPalAddress(r)}),c=this.isBigcommercePaymentsFastlaneThreeDSAvailable()&&i.config.is3dsEnabled,{shouldSaveInstrument:u=!1,shouldSetAsDefaultInstrument:l=!1}=H(t)?t:{},d=c?yield this.get3DSNonce(s):s;return yield this.createOrder(d),{methodId:e,paymentData:Object.assign(Object.assign({},t),{shouldSaveInstrument:u,shouldSetAsDefaultInstrument:l,formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:d}}})}})}createOrder(e){return fe(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getCartOrThrow().id;if(this.methodId){const{orderId:n}=yield this.bigCommercePaymentsRequestSender.createOrder(this.methodId,{cartId:t,fastlaneToken:e});this.orderId=n}})}get3DSNonce(e){var t;return fe(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),r=n.getCartOrThrow(),i=n.getOrderOrThrow(),a=n.getStoreConfigOrThrow().links.checkoutLink,s=null===(t=this.paypalFastlaneSdk)||void 0===t?void 0:t.ThreeDomainSecureClient;if(!s)throw new o;const c={amount:i.orderAmount.toFixed(2),currency:r.currency.code,nonce:e,threeDSRequested:this.threeDSVerificationMethod===ee.Always,transactionContext:{experience_context:{locale:\"en-US\",return_url:a,cancel_url:a}}},u=yield s.isEligible(c);if(this.threeDSVerificationMethod===ee.Always&&!u)throw new q;if(u){const{liabilityShift:e,authenticationState:t,nonce:n}=yield s.show();if(e===w.No||e===w.Unknown||t===te.Errored||t===te.Cancelled)throw new q;if(t===te.Succeeded&&[w.Yes,w.Possible].includes(e))return n}return e})}handlePayPalStoredInstrumentChange(e){return fe(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsFastlaneUtils.getPayPalFastlaneOrThrow(),{selectionChanged:n,selectedCard:r}=yield t.profile.showCardSelector();if(n){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomer(),n=he(t)?t:{},i=this.bigCommercePaymentsFastlaneUtils.mapPayPalToBcInstrument(e,r)[0];return yield this.paymentIntegrationService.updatePaymentProviderCustomer(Object.assign(Object.assign({},n),{instruments:[i]})),i}})}isBigcommercePaymentsFastlaneThreeDSAvailable(){return pe(this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features,\"PROJECT-7080.bcp_fastlane_three_ds\")}handleError(e){var t;(null===(t=this.bigcommerce_payments_fastlane)||void 0===t?void 0:t.onError)&&\"function\"==typeof this.bigcommerce_payments_fastlane.onError&&this.bigcommerce_payments_fastlane.onError(e)}}const ye=l(e=>{const{getHost:t}=e.getState();return new me(e,new D((0,y.createRequestSender)({host:t()})),u(),ue())},[{id:\"bigcommerce_payments_fastlane\"}]);class ge extends i{constructor(e){super(e||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var ve=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class be{constructor(e,t,n,r){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.loadingIndicator=n,this.paypalSdkHelper=r}initialize(e){return ve(this,void 0,void 0,function*(){const{methodId:t,bigcommerce_payments_paylater:n}=e||{};if(!t)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(t);const r=this.paymentIntegrationService.getState(),i=r.getPaymentMethodOrThrow(t),{paypalBNPLConfiguration:o=[],orderId:a}=i.initializationData||{},{bannerContainerId:s,container:c}=n;if(void 0!==s){if(!document.getElementById(s))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=o&&o.find(({id:e})=>\"checkout\"===e);if(!(null==e?void 0:e.status))return;const t=yield this.paypalSdkHelper.getPayPalMessages(i,r.getCartOrThrow().currency.code);return this.renderMessages(t,s,e)}a?this.orderId=a:(yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(t),this.loadingIndicatorContainer=null==c?void 0:c.split(\"#\")[1],this.renderButton(t,n))})}execute(e,t){return ve(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]);if(!n)throw new V([\"payment\"]);if(!this.orderId)throw new q;yield this.paymentIntegrationService.submitOrder(r,t),yield this.bigCommercePaymentsIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new $)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.bigCommercePaymentsButtons)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){if(!(null==t?void 0:t.container))throw new L('Unable to initialize payment because \"container\" argument is not provided.');const n=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:i}=r.initializationData||{},{checkoutPaymentButtonStyles:o}=i||{},{container:a,onError:s,onRenderButton:c,onValidate:u,submitForm:l}=t,d=[n.FUNDING.PAYLATER,n.FUNDING.CREDIT];let h=!1;d.forEach(e=>{if(h)return;const t={fundingSource:e,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o),createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onClick:(e,t)=>this.handleClick(t,u),onApprove:e=>this.handleApprove(e,l),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.bigCommercePaymentsButtons=n.Buttons(t),this.bigCommercePaymentsButtons.isEligible()||e!==n.FUNDING.PAYLATER){if(!this.bigCommercePaymentsButtons.isEligible()&&e===n.FUNDING.CREDIT)throw new ge(`BigCommercePayments ${e} is not available for your region. Please use BigCommercePayments Checkout instead.`);c&&\"function\"==typeof c&&c(),this.bigCommercePaymentsButtons.render(a),h=!0}})}handleClick(e,t){return ve(this,void 0,void 0,function*(){const{resolve:n,reject:r}=e;t&&\"function\"==typeof t&&(yield t(()=>(this.toggleLoadingIndicator(!0),n()),r))})}handleApprove({orderID:e},t){this.orderId=e,t&&\"function\"==typeof t&&t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}renderMessages(e,t,n){const r={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:R(n)};e.Messages(r).render(`#${t}`)}}const _e=l(e=>new be(e,U(e),new p({containerStyles:f}),u()),[{id:\"bigcommerce_payments_paylater\"}]);class Se extends _{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}var we=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Pe{constructor(e,t,n,r=3e3,i=3e5){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.loadingIndicator=n,this.pollingInterval=r,this.maxPollingIntervalTime=i,this.pollingTimer=0,this.stopPolling=g.noop}initialize(e){return we(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,bigcommerce_payments_ratepay:r}=e;if(!n)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new L('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!r)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_ratepay\" argument is not provided.');const{legalTextContainer:i,container:o,loadingContainerId:a}=r;if(!o)throw new L('Unable to initialize payment because \"options.container\" argument is not provided.');if(!i)throw new L('Unable to initialize payment because \"options.legalTextContainer\" argument is not provided.');if(!a)throw new L('Unable to initialize payment because \"options.loadingContainerId\" argument is not provided.');this.loadingIndicatorContainer=a;const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,t),{merchantId:c}=s.initializationData||{};if(!c)throw new L(\"Unable to initialize payment because merchantId argument is not provided.\");this.bigcommerce_payments_ratepay=r,yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n),this.createFraudNetScript(c,n,t),this.loadFraudnetConfig(),this.renderLegalText(i,o)})}execute(e,t){return we(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]),{getFieldsValues:i}=this.bigcommerce_payments_ratepay||{};if(!n)throw new V([\"payment\"]);if(!i||\"function\"!=typeof i)throw new L('Unable to initialize payment because \"options.getFieldsValues\" argument is not provided.');this.toggleLoadingIndicator(!0);try{const e=yield this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_apmscheckout\",{metadataId:this.guid}),{ratepayBirthDate:o,ratepayPhoneNumber:a,ratepayPhoneCountryCode:s}=i(),c={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:n.methodId,rate_pay:{birth_date:this.normalizeDate(o),phone:{national_number:a,country_code:s.split(\"+\")[1]}},paypal_account:{order_id:e}}};return yield this.paymentIntegrationService.submitOrder(r,t),yield this.paymentIntegrationService.submitPayment({methodId:n.methodId,paymentData:c}),yield new Promise((e,t)=>{this.initializePollingMechanism(n.methodId,e,t,n.gatewayId)})}catch(e){return this.handleError(e),new Promise((e,t)=>t())}})}finalize(){return Promise.reject(new $)}deinitialize(){const{legalTextContainer:e}=this.bigcommerce_payments_ratepay||{},t=document.querySelectorAll('[data-id=\"fraudnetScript\"]')[0],n=document.querySelectorAll('[data-id=\"fraudnetConfig\"]')[0];if(this.deinitializePollingMechanism(),t.remove(),n.remove(),e){const t=document.getElementById(e);null==t||t.remove()}return Promise.resolve()}normalizeDate(e){const t=this.formatDate(e.getDate()),n=this.formatDate(e.getMonth()+1);return`${e.getFullYear()}-${n}-${t}`}formatDate(e){return`${e<10?0:\"\"}${e}`}renderLegalText(e,t){const n=e,r=t.split(\"#\")[1],i=document.getElementById(r),o=null==i?void 0:i.parentNode,a=document.createElement(\"div\");a.style.marginBottom=\"20px\",a.setAttribute(\"id\",n),null==o||o.prepend(a);const s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),c=s.Legal({fundingSource:s.Legal.FUNDING.PAY_UPON_INVOICE});if(!document.getElementById(n))throw new L('Unable to initialize payment because \"legalTextContainerElement\" argument is not found.');c.render(`#${n}`)}handleError(e){const{onError:t}=this.bigcommerce_payments_ratepay||{};this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createFraudNetScript(e,t,n){const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n),{testMode:i}=r.config,o=document.createElement(\"script\");o.setAttribute(\"type\",\"application/json\"),o.setAttribute(\"fncls\",\"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\"),o.setAttribute(\"data-id\",\"fraudnetScript\"),this.guid=this.generateGUID();const a={f:this.guid,s:`${e}_checkout-page`,sandbox:i};o.innerHTML=JSON.stringify(a),document.body.appendChild(o)}generateGUID(){let e=\"\";for(let t=0;t<32;t+=1)e+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"[Math.floor(62*Math.random())];return e}loadFraudnetConfig(){const e=document.createElement(\"script\");e.setAttribute(\"data-id\",\"fraudnetConfig\"),e.src=\"https://c.paypal.com/da/r/fb.js\",document.body.appendChild(e)}reinitializeStrategy(e){return we(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}initializePollingMechanism(e,t,n,r){return we(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const i=yield this.bigCommercePaymentsIntegrationService.getOrderStatus(\"bigcommerce_payments_apms\",{params:{useMetadata:!0}}),o=i===k.PollingStop,a=i===k.PollingError;if(o)return this.deinitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,r);yield this.reinitializeStrategy({methodId:e,gatewayId:r,bigcommerce_payments_ratepay:this.bigcommerce_payments_ratepay}),this.handleError(new Se)}catch(e){this.handleError(e),n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const Ie=l(e=>new Pe(e,U(e),new p({containerStyles:Object.assign(Object.assign({},f),{position:\"fixed\"})})),[{gateway:\"bigcommerce_payments_apms\",id:\"ratepay\"}]);var Ce;!function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\",e.CardExpiryVerification=\"cardExpiryVerification\"}(Ce||(Ce={}));const Oe=Ce;function Ae(e){return Oe.CardNumber in e&&Oe.CardName in e&&Oe.CardExpiry in e}function ke(e){return Oe.CardNumberVerification in e&&Oe.CardCodeVerification in e&&Oe.CardExpiryVerification in e}class Ee extends i{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}var je;!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(je||(je={}));class xe extends i{constructor(e){super(function(e){switch(e){case je.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case je.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case je.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case je.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class Te extends i{constructor(e,t){super(t||\"Unable to proceed because the payment form contains invalid data.\"),this.details=e,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}var ze=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Fe{constructor(e,t,n,r){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.bigCommercePaymentsSdk=n,this.bigCommercePaymentsFastlaneUtils=r}initialize(e){return ze(this,void 0,void 0,function*(){const{methodId:t,bigcommerce_payments_creditcards:n}=e,r=n,{form:i,onCreditCardFieldsRenderingError:o,onLoadComplete:a}=r||{};if(!t)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new L('Unable to proceed because \"options.bigcommerce_payments_creditcards.form\" argument is not provided.');this.hostedFormOptions=i,this.isCreditCardForm=Ae(i.fields),this.isCreditCardVaultedForm=ke(i.fields)&&!this.hasUndefinedValues(),yield this.paymentIntegrationService.loadPaymentMethod(t),yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(t,void 0,!0,!0),(this.isCreditCardForm||this.isCreditCardVaultedForm)&&(yield this.initializeFields(i,o)),null==a||a(),this.shouldInitializePayPalFastlane(t)&&(yield this.initializePayPalFastlaneOrThrow(t))})}execute(e,t){return ze(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]),{methodId:i,paymentData:o}=n||{};if(!n||!i)throw new V([\"payment\"]);if(this.executionPaymentData=o,this.isCreditCardForm||this.isCreditCardVaultedForm)yield this.validateHostedFormOrThrow(),yield this.submitHostedForm();else{const{orderId:e}=yield this.bigCommercePaymentsIntegrationService.createOrderCardFields(\"bigcommerce_payments_creditcardscheckout\",this.getInstrumentParams());this.returnedOrderId=e}const a=this.preparePaymentPayload(i,o,this.returnedOrderId,this.returnedVaultedToken);yield this.paymentIntegrationService.submitOrder(r,t),yield this.paymentIntegrationService.submitPayment(a)})}finalize(){return Promise.reject(new $)}deinitialize(){var e,t,n,r;return ze(this,void 0,void 0,function*(){return yield null===(e=this.cvvField)||void 0===e?void 0:e.close(),yield null===(t=this.expiryField)||void 0===t?void 0:t.close(),yield null===(n=this.numberField)||void 0===n?void 0:n.close(),yield null===(r=this.nameField)||void 0===r?void 0:r.close(),Promise.resolve()})}preparePaymentPayload(e,t,n,r){const{shouldSaveInstrument:i=!1,shouldSetAsDefaultInstrument:o=!1}=H(t)?t:{},a=t&&W(t)?t.instrumentId:void 0,s=(0,g.omitBy)({verification_nonce:r,token:a},g.isNil);return{methodId:e,paymentData:{shouldSaveInstrument:i,shouldSetAsDefaultInstrument:o,instrumentId:a,formattedPayload:Object.assign(Object.assign({},r||a?{bigpay_token:s}:{}),n?{card_with_order:{order_id:n}}:{})}}}initializeFields(e,t){return ze(this,void 0,void 0,function*(){const{fields:n,styles:r}=e,i=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),o=this.getExecuteCallback(n),a=Object.assign({style:this.getInputStyles(r),onApprove:({orderID:e,vaultSetupToken:t,liabilityShift:n})=>{if(n===w.No||n===w.Unknown)throw new Error;return this.handleApprove({orderID:e,vaultSetupToken:t})},onError:()=>{throw new Ee},inputEvents:{onChange:t=>this.onChangeHandler(e,t),onFocus:t=>this.onFocusHandler(e,t),onBlur:t=>this.onBlurHandler(e,t),onInputSubmitRequest:t=>this.onInputSubmitRequest(e,t)}},o);if(this.cardFields=yield i.CardFields(a),!this.cardFields.isEligible())throw new xe(je.PaymentNotInitialized);try{this.stylizeInputContainers(n),Ae(n)&&(yield this.renderFields(n)),ke(n)&&(yield this.renderVaultedFields(n))}catch(e){\"function\"==typeof t&&t(e)}})}getExecuteCallback(e){return ke(e)?this.createVaultSetupTokenCallback():this.createOrderCallback()}createVaultSetupTokenCallback(){return{createVaultSetupToken:()=>ze(this,void 0,void 0,function*(){const{setupToken:e}=(yield this.bigCommercePaymentsIntegrationService.createOrderCardFields(\"bigcommerce_payments_creditcardscheckout\",Object.assign(Object.assign({},this.getInstrumentParams()),{setupToken:!0})))||{};return e})}}createOrderCallback(){return{createOrder:()=>ze(this,void 0,void 0,function*(){const{orderId:e}=(yield this.bigCommercePaymentsIntegrationService.createOrderCardFields(\"bigcommerce_payments_creditcardscheckout\",this.getInstrumentParams()))||{};return e})}}handleApprove({orderID:e,vaultSetupToken:t}){e&&(this.returnedOrderId=e),t&&(this.returnedVaultedToken=t)}renderFields(e){var t,n,r,i;return ze(this,void 0,void 0,function*(){const o=this.getCardFieldsOrThrow();(null===(t=e.cardCode)||void 0===t?void 0:t.containerId)&&(this.cvvField=o.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCode.containerId}`)),(null===(n=e.cardExpiry)||void 0===n?void 0:n.containerId)&&(this.expiryField=o.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiry.containerId}`)),(null===(r=e.cardName)||void 0===r?void 0:r.containerId)&&(this.nameField=o.NameField({placeholder:\"\"}),yield this.nameField.render(`#${e.cardName.containerId}`)),(null===(i=e.cardNumber)||void 0===i?void 0:i.containerId)&&(this.numberField=o.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumber.containerId}`))})}renderVaultedFields(e){var t,n,r;return ze(this,void 0,void 0,function*(){const i=this.getCardFieldsOrThrow();(null===(t=e.cardCodeVerification)||void 0===t?void 0:t.containerId)&&(this.cvvField=i.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCodeVerification.containerId}`)),(null===(n=e.cardExpiryVerification)||void 0===n?void 0:n.containerId)&&(this.expiryField=i.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiryVerification.containerId}`)),(null===(r=e.cardNumberVerification)||void 0===r?void 0:r.containerId)&&(this.numberField=i.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumberVerification.containerId}`))})}getInstrumentParams(){if(!this.executionPaymentData)return{};if(H(this.executionPaymentData)){const{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}=this.executionPaymentData;return{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}}if(W(this.executionPaymentData)){const{instrumentId:e}=this.executionPaymentData;return{instrumentId:e}}return{}}getFieldTypeByEmittedField({emittedBy:e}){return{fieldType:this.mapFieldType(e)}}submitHostedForm(){return ze(this,void 0,void 0,function*(){const e=this.getCardFieldsOrThrow(),t=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),n={billingAddress:{company:t.company,addressLine1:t.address1,addressLine2:t.address2,adminArea1:t.stateOrProvinceCode,adminArea2:t.city,postalCode:t.postalCode,countryCode:t.countryCode}};try{this.isCreditCardVaultedForm?yield e.submit():yield e.submit(n)}catch(e){throw new Ee(\"Failed authentication. Please try to authorize again.\")}})}validateHostedFormOrThrow(){var e,t;return ze(this,void 0,void 0,function*(){const n=this.getCardFieldsOrThrow(),r=yield n.getState().then(e=>e),i=this.getValidityData(r);if(!i.isValid)throw null===(t=null===(e=this.hostedFormOptions)||void 0===e?void 0:e.onValidate)||void 0===t||t.call(e,i),new Te(this.mapValidationErrors(i.errors))})}getValidityData({fields:e}){const t=Object.assign({},e);delete t.cardNameField;const n=Object.keys(t);return{isValid:n.every(e=>{var n;return null===(n=t[e])||void 0===n?void 0:n.isValid}),errors:n.reduce((e,n)=>{var r;const i=this.mapFieldType(n);return Object.assign(Object.assign({},e),{[i]:(null===(r=t[n])||void 0===r?void 0:r.isValid)?void 0:[this.getInvalidErrorByFieldType(i)]})},{})}}getInvalidErrorByFieldType(e){switch(e){case Oe.CardCode:case Oe.CardCodeVerification:return{fieldType:e,message:\"Invalid card code\",type:\"invalid_card_code\"};case Oe.CardNumber:case Oe.CardNumberVerification:return{fieldType:e,message:\"Invalid card number\",type:\"invalid_card_number\"};case Oe.CardExpiry:case Oe.CardExpiryVerification:return{fieldType:e,message:\"Invalid card expiry\",type:\"invalid_card_expiry\"};default:return{fieldType:e,message:\"Invalid field\",type:\"invalid\"}}}mapValidationErrors(e={}){const t={};return Object.keys(e).forEach(n=>{var r,i;t[n]=[{message:(null===(i=null===(r=e[n])||void 0===r?void 0:r[0])||void 0===i?void 0:i.message)||\"\",type:n}]}),t}mapFieldType(e){switch(e){case\"name\":return Oe.CardName;case\"cardNumberField\":case\"number\":return this.isCreditCardForm?Oe.CardNumber:Oe.CardNumberVerification;case\"cardExpiryField\":case\"expiry\":return this.isCreditCardForm?Oe.CardExpiry:Oe.CardExpiryVerification;case\"cardCvvField\":case\"cvv\":return this.isCreditCardForm?Oe.CardCode:Oe.CardCodeVerification;default:throw new Error(\"Unexpected field type\")}}getCardFieldsOrThrow(){if(!this.cardFields)throw new xe(je.PaymentNotInitialized);return this.cardFields}getInputStyles(e){var t,n,r;const i={\"font-size\":(null===(t=null==e?void 0:e.default)||void 0===t?void 0:t.fontSize)||\"1rem\",\"font-family\":(null===(n=null==e?void 0:e.default)||void 0===n?void 0:n.fontFamily)||\"Montserrat, Arial, Helvetica, sans-serif\",\"font-weight\":(null===(r=null==e?void 0:e.default)||void 0===r?void 0:r.fontWeight)||\"400\",outline:\"none\",padding:\"9px 13px\"},o=Object.assign(Object.assign({},i),{color:\"#333333\"});return{input:o,\".invalid\":Object.assign(Object.assign({},i),{color:\"red\"}),\".valid\":o,\":focus\":o}}stylizeInputContainers(e){Object.values(e||{}).forEach(e=>{const t=document.getElementById(`${(null==e?void 0:e.containerId)||\"\"}`);t&&(t.style.padding=\"0px\",t.style.boxShadow=\"none\",t.style.border=\"none\",t.style.background=\"transparent\",t.style.marginBottom=\"10px\",t.style.marginLeft=\"-5px\")})}hasUndefinedValues(){return!this.hostedFormOptions||Object.values(this.hostedFormOptions.fields).some(e=>void 0===e)}onChangeHandler(e,t){var n;null===(n=null==e?void 0:e.onValidate)||void 0===n||n.call(e,this.getValidityData(t))}onFocusHandler(e,t){var n;null===(n=null==e?void 0:e.onFocus)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onBlurHandler(e,t){var n;null===(n=null==e?void 0:e.onBlur)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onInputSubmitRequest(e,t){var n;null===(n=null==e?void 0:e.onEnter)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}shouldInitializePayPalFastlane(e){var t,n;const r=this.paymentIntegrationService.getState(),i=r.getPaymentMethodOrThrow(e),o=r.getPaymentProviderCustomer(),a=(s=o)&&(\"authenticationState\"in s||\"addresses\"in s||\"instruments\"in s)?o:{};var s;return(null===(t=null==i?void 0:i.initializationData)||void 0===t?void 0:t.isAcceleratedCheckoutEnabled)&&(null===(n=null==i?void 0:i.initializationData)||void 0===n?void 0:n.isBigCommercePaymentsAnalyticsV2Enabled)&&!(null==a?void 0:a.authenticationState)}initializePayPalFastlaneOrThrow(e){return ze(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),r=t.getPaymentMethodOrThrow(e),{initializationData:i}=r;if(!(null==i?void 0:i.connectClientToken))return;const o=yield this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(r,n.currency.code,n.id);yield this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(o,!!(null==i?void 0:i.isDeveloperModeApplicable))}catch(e){}})}}const Be=l(e=>new Fe(e,U(e),u(),ue()),[{id:\"bigcommerce_payments_creditcards\"}]);var De=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Me{constructor(e,t,n,r,i=3e3,o=3e5){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.bigCommercePaymentsSdkHelper=n,this.loadingIndicator=r,this.pollingInterval=i,this.maxPollingIntervalTime=o,this.pollingTimer=0,this.stopPolling=g.noop,this.isPollingEnabled=!1}initialize(e){return De(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,bigcommerce_payments_apms:r}=e;if(this.bigCommercePaymentsAlternativeMethods=r,!n)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new L('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!r)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_apms\" argument is not provided.');const i=this.paymentIntegrationService.getState(),o=i.getPaymentMethodOrThrow(n,t),{orderId:a,shouldRenderFields:s}=o.initializationData||{},c=i.getStoreConfigOrThrow().checkoutSettings.features;this.isPollingEnabled=pe(c,\"PAYPAL-5624.bcp_ideal_polling\"),a?this.orderId=a:(this.paypalApms=yield this.bigCommercePaymentsSdkHelper.getPayPalApmsSdk(o,i.getCartOrThrow().currency.code),this.loadingIndicatorContainer=r.container.split(\"#\")[1],this.renderButton(n,t,r),s&&this.renderFields(n,r))})}execute(e,t){return De(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]);if(!n)throw new V([\"payment\"]);const{methodId:i,gatewayId:o}=n;if(!this.orderId)throw new q;this.isPollingEnabled&&\"ideal\"===i&&(yield new Promise((e,t)=>{this.initializePollingMechanism(i,e,t,o)})),this.isNonInstantPaymentMethod(i)||(yield this.paymentIntegrationService.submitOrder(r,t)),yield this.bigCommercePaymentsIntegrationService.submitPayment(i,this.orderId,o)})}finalize(){return Promise.reject(new $)}deinitialize(){var e;return this.orderId=void 0,this.isPollingEnabled&&this.resetPollingMechanism(),null===(e=this.bigCommercePaymentsButton)||void 0===e||e.close(),Promise.resolve()}initializePollingMechanism(e,t,n,r){return De(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const i=yield this.bigCommercePaymentsIntegrationService.getOrderStatus(r),o=i===k.Approved,a=i===k.PollingError;if(o)return this.deInitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,r);yield this.reinitializeStrategy({methodId:e,gatewayId:r,bigCommercePaymentsAlternativeMethods:this.bigCommercePaymentsAlternativeMethods}),this.handleError(new Se)}catch(e){n()}})}deInitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deInitializePollingMechanism()}reinitializeStrategy(e){return De(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}handleError(e){const{onError:t}=this.bigCommercePaymentsAlternativeMethods||{};this.isPollingEnabled&&this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderButton(e,t,n){const r=this.getPaypalAmpsSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t),{buttonStyle:o}=i.initializationData||{},{container:a,onError:s,onRenderButton:c,submitForm:u}=n,l={fundingSource:e,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o),onInit:(e,t)=>n.onInitButton(t),createOrder:()=>this.onCreateOrder(e,t,n),onApprove:e=>this.handleApprove(e,u),onCancel:()=>{this.toggleLoadingIndicator(!1),this.deInitializePollingMechanism()},onError:e=>{this.deInitializePollingMechanism(),this.handleFailure(e,s)},onClick:(e,t)=>De(this,void 0,void 0,function*(){return n.onValidate(t.resolve,t.reject)})};this.bigCommercePaymentsButton=r.Buttons(l),this.bigCommercePaymentsButton.isEligible()&&(c&&\"function\"==typeof c&&c(),this.bigCommercePaymentsButton.render(a))}onCreateOrder(e,t,n){return De(this,void 0,void 0,function*(){const{onValidate:r}=n;yield r(()=>(this.toggleLoadingIndicator(!0),()=>Promise.resolve()),g.noop);const i=yield this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_apms\");if(this.isNonInstantPaymentMethod(e)){const n={useStoreCredit:!1},r={params:{methodId:e,gatewayId:t}};yield this.paymentIntegrationService.submitOrder(n,r),yield this.bigCommercePaymentsIntegrationService.submitPayment(e,i,t)}return i})}handleApprove({orderID:e},t){this.orderId=e,t()}handleFailure(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderFields(e,t){const n=this.getPaypalAmpsSdkOrThrow(),r=this.paymentIntegrationService.getState(),{firstName:i,lastName:o,email:a}=r.getBillingAddressOrThrow(),{apmFieldsContainer:s,apmFieldsStyles:c}=t;if(!s)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_apms\" argument should contain \"apmFieldsContainer\".');const u=document.querySelector(s);u&&(u.innerHTML=\"\");const l={fundingSource:e,style:c||{},fields:{name:{value:`${i} ${o}`},email:{value:a}}};n.PaymentFields(l).render(s)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isNonInstantPaymentMethod(e){return e.toUpperCase()in A}getPaypalAmpsSdkOrThrow(){if(!this.paypalApms)throw new o;return this.paypalApms}}const Ne=l(e=>new Me(e,U(e),u(),new p({containerStyles:f})),[{gateway:\"bigcommerce_payments_apms\"}]);class Ue{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){const{gatewayId:t,methodId:n,bigcommerce_payments_apms:r}=e;if(this.bigCommercePaymentsAlternativeMethods=r,!n)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new L('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');return Promise.resolve()}execute(e,t){return n=this,r=void 0,o=function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]);if(!n)throw new V([\"payment\"]);const{methodId:i,gatewayId:o}=n;try{const e={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:i,paypal_account:{order_id:yield this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_apms\",{gatewayId:\"bigcommerce_payments_apms\",methodId:i})}}};yield this.paymentIntegrationService.submitOrder(r,t),yield this.paymentIntegrationService.submitPayment({methodId:i,gatewayId:o,paymentData:e})}catch(e){if(function(e){var t,n;return(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)&&(null===(n=null===(t=e.body)||void 0===t?void 0:t.additional_action_required)||void 0===n?void 0:n.data.redirect_url)}(e)){const t=e.body.additional_action_required.data.redirect_url;return new Promise((e,n)=>{window.location.replace(t),n()})}return this.handleError(e),Promise.reject(e)}},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{c(o.next(e))}catch(e){t(e)}}function s(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}finalize(){return Promise.reject(new $)}deinitialize(){return Promise.resolve()}handleError(e){const{onError:t}=this.bigCommercePaymentsAlternativeMethods||{};t&&\"function\"==typeof t&&t(e)}}const Re=l(e=>new Ue(e,U(e)),[{gateway:\"bigcommerce_payments_apms\",id:\"klarna\"},{gateway:\"bigcommerce_payments_apms\",id:\"afterpay\"}]);var Le=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Ve{constructor(e,t,n){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.loadingIndicator=n}initialize(e){var t,n;return Le(this,void 0,void 0,function*(){const{methodId:r,bigcommerce_payments_venmo:i}=e||{};if(!r)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(r);const o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r);(null===(t=o.initializationData)||void 0===t?void 0:t.orderId)?this.orderId=null===(n=o.initializationData)||void 0===n?void 0:n.orderId:(yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(r),this.loadingIndicatorContainer=i.container.split(\"#\")[1],this.renderButton(r,i))})}execute(e,t){return Le(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]);if(!n)throw new V([\"payment\"]);if(!this.orderId)throw new q;yield this.paymentIntegrationService.submitOrder(r,t),yield this.bigCommercePaymentsIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new $)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){const n=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:i}=r.initializationData||{},{checkoutPaymentButtonStyles:o}=i||{},{container:a,onError:s,onRenderButton:c,onValidate:u,submitForm:l}=t,d={fundingSource:n.FUNDING.VENMO,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o),createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmocheckout\"),onClick:(e,t)=>this.handleClick(t,u),onApprove:e=>this.handleApprove(e,l),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.paypalButton=n.Buttons(d),!this.paypalButton.isEligible())throw new ge(\"Venmo is not available for your region. Please another payment method instead.\");c&&\"function\"==typeof c&&c(),this.paypalButton.render(a)}handleClick(e,t){return Le(this,void 0,void 0,function*(){const{resolve:n,reject:r}=e;yield t(()=>(this.toggleLoadingIndicator(!0),n()),r)})}handleApprove({orderID:e},t){this.orderId=e,t(),this.toggleLoadingIndicator(!1)}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const qe=l(e=>new Ve(e,U(e),new p({styles:{backgroundColor:\"black\"}})),[{id:\"bigcommerce_payments_venmo\"}]);var $e=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class He{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.onError=g.noop}initialize(e){return $e(this,void 0,void 0,function*(){const{bigcommerce_payments:t,methodId:n}=e;if(!n)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new L('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');if(!t.container)throw new L('Unable to initialize payment because \"options.bigcommerce_payments.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new L('Unable to initialize payment because \"options.bigcommerce_payments.onClick\" argument is not a function.');this.onError=t.onError||g.noop,this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const r=yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n);r&&r.Buttons&&\"function\"==typeof r.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return $e(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()})}signOut(e){return $e(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:r,onComplete:i}=t,o=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:s,paymentButtonStyles:c,isServerSideShippingCallbacksEnabled:u}=a.initializationData||{},{checkoutTopButtonStyles:l}=c||{},d=Object.assign({createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments\"),onApprove:({orderID:t})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(e,t)},r&&{onClick:()=>r()}),h=Object.assign(Object.assign({},!u&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(t,n)=>this.onHostedCheckoutApprove(t,n,e,i,u)}),p=Object.assign(Object.assign({fundingSource:o.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},l),{height:40}))},d),s&&h),f=o.Buttons(p);f.isEligible()?f.render(`#${n}`):this.bigCommercePaymentsIntegrationService.removeElement(n)}onHostedCheckoutApprove(t,n,r,i,o){return $e(this,void 0,void 0,function*(){if(!t.orderID)throw new a(e.MissingOrderId);const s=this.paymentIntegrationService.getState().getCartOrThrow();try{const e=s.lineItems.physicalItems.length>0;if(!o){const t=yield n.order.get(),r=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(t);if(yield this.paymentIntegrationService.updateBillingAddress(r),e){const e=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(t);yield this.paymentIntegrationService.updateShippingAddress(e)}}e&&(yield this.bigCommercePaymentsIntegrationService.updateOrder(o)),o&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:r}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(r,t.orderID),i&&\"function\"==typeof i&&i()}catch(e){this.handleError(e)}})}onShippingAddressChange(e){return $e(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}onShippingOptionsChange(e){return $e(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const We=l(e=>new He(e,U(e)),[{id:\"bigcommerce_payments\"}]);var Ge=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Ke{constructor(e,t,n){this.paymentIntegrationService=e,this.bigCommercePaymentsSdk=t,this.bigCommercePaymentsFastlaneUtils=n}initialize(e){var t;return Ge(this,void 0,void 0,function*(){const{methodId:n,bigcommerce_payments_fastlane:r}=e;if(!n)throw new L('Unable to proceed because \"methodId\" argument is not provided.');try{yield this.paymentIntegrationService.loadPaymentMethod(n);const e=this.paymentIntegrationService.getState(),i=e.getCartOrThrow(),o=e.getPaymentMethodOrThrow(n),a=!!(null===(t=o.initializationData)||void 0===t?void 0:t.isDeveloperModeApplicable),s=yield this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(o,i.currency.code,i.id);yield this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(s,a,this.getFastlaneStyles(n,r))}catch(e){}return Promise.resolve()})}deinitialize(){return Ge(this,void 0,void 0,function*(){return Promise.resolve()})}signIn(e,t){return Ge(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t),yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:void 0,addresses:void 0,instruments:void 0}),this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId()})}signOut(e){return Ge(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){return Ge(this,void 0,void 0,function*(){const{checkoutPaymentMethodExecuted:t,continueWithCheckoutCallback:n,methodId:r}=e||{};if(!r)throw new L('Unable to proceed because \"methodId\" argument is not provided.');if(\"function\"!=typeof n)throw new L('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');if(this.paymentIntegrationService.getState().getCustomerOrThrow().isGuest){t&&\"function\"==typeof t&&t();try{yield this.runPayPalAuthenticationFlowOrThrow(r)}catch(e){}}n()})}runPayPalAuthenticationFlowOrThrow(e){return Ge(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow().id,r=t.getCustomer(),i=t.getBillingAddress(),o=(null==r?void 0:r.email)||(null==i?void 0:i.email)||\"\",{customerContextId:a}=yield this.bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow(a),c=s.authenticationState===oe.CANCELED;yield this.updateCustomerDataState(e,s),c?this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId():this.bigCommercePaymentsFastlaneUtils.updateStorageSessionId(n)})}updateCustomerDataState(e,t){var n;return Ge(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState().getCartOrThrow(),{authenticationState:i,addresses:o,billingAddress:a,shippingAddress:s,instruments:c}=this.bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,t);if(yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:i,addresses:o,instruments:c}),a&&(yield this.paymentIntegrationService.updateBillingAddress(a)),s&&r.lineItems.physicalItems.length>0){const t=yield this.paymentIntegrationService.updateShippingAddress(s),r=t.getPaymentMethodOrThrow(e),{isFastlaneShippingOptionAutoSelectEnabled:i}=r.initializationData||{},o=t.getConsignments()||[],a=(null===(n=o[0])||void 0===n?void 0:n.availableShippingOptions)||[],c=a[0],u=a.find(e=>e.isRecommended);if((u||c)&&i){const e=(null==u?void 0:u.id)||c.id;yield this.paymentIntegrationService.selectShippingOption(e)}}})}getFastlaneStyles(e,t){const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{fastlaneStyles:r,isFastlaneStylingEnabled:i}=n.initializationData||{};return de(i?r:{},null==t?void 0:t.styles)}}const Ye=l(e=>new Ke(e,u(),ue()),[{id:\"bigcommerce_payments_fastlane\"},{id:\"bigcommerce_payments_creditcards\"}]);var Je=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class Ze{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.onError=g.noop}initialize(e){return Je(this,void 0,void 0,function*(){const{bigcommerce_payments_paylater:t,methodId:n}=e;if(!n)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');if(!t.container)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_paylater.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_paylater.onClick\" argument is not a function.');this.onError=t.onError||g.noop,this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const r=yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n);r&&r.Buttons&&\"function\"==typeof r.Buttons?this.renderButton(n,t):console.error(\"[BC BigCommercePayments PayLater]: button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Je(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Je(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onComplete:r,onClick:i}=t,o=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:s,paymentButtonStyles:c}=a.initializationData||{},{checkoutTopButtonStyles:u}=c||{},l=Object.assign({createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onApprove:({orderID:t})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(e,t)},i&&{onClick:()=>i()}),d={onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e),onApprove:(t,n)=>this.onHostedCheckoutApprove(t,n,e,r)},h=[o.FUNDING.PAYLATER,o.FUNDING.CREDIT];let p=!1;h.forEach(e=>{if(!p){const t=Object.assign(Object.assign({fundingSource:e,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},u),{height:40}))},l),s&&d),r=o.Buttons(t);r.isEligible()&&(r.render(`#${n}`),p=!0)}}),p||this.bigCommercePaymentsIntegrationService.removeElement(n)}onHostedCheckoutApprove(t,n,r,i){return Je(this,void 0,void 0,function*(){if(!t.orderID)throw new a(e.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow(),s=yield n.order.get();try{const e=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(s);if(yield this.paymentIntegrationService.updateBillingAddress(e),o.lineItems.physicalItems.length>0){const e=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(s);yield this.paymentIntegrationService.updateShippingAddress(e),yield this.bigCommercePaymentsIntegrationService.updateOrder()}yield this.paymentIntegrationService.submitOrder({},{params:{methodId:r}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(r,t.orderID),i&&\"function\"==typeof i&&i()}catch(e){this.handleError(e)}})}onShippingAddressChange(e){return Je(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}onShippingOptionsChange(e){return Je(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const Xe=l(e=>new Ze(e,U(e)),[{id:\"bigcommerce_payments_paylater\"}]);var Qe=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class et{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return Qe(this,void 0,void 0,function*(){const{bigcommerce_payments_venmo:t,methodId:n}=e;if(!n)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');if(!t.container)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_venmo.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_venmo.onClick\" argument is not a function.');this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const r=yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n);r&&r.Buttons&&\"function\"==typeof r.Buttons?this.renderButton(n,t):console.error(\"[BC Payments Venmo]: Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Qe(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Qe(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:r}=t,i=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:a}=o.initializationData||{},{checkoutTopButtonStyles:s}=a||{},c=Object.assign({fundingSource:i.FUNDING.VENMO,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},s),{height:40})),createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmo\"),onApprove:({orderID:t})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(e,t)},r&&{onClick:()=>r()}),u=i.Buttons(c);u.isEligible()?u.render(`#${n}`):this.bigCommercePaymentsIntegrationService.removeElement(n)}}const tt=l(e=>new et(e,U(e)),[{id:\"bigcommerce_payments_venmo\"}]);var nt=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class rt{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){var t;return nt(this,void 0,void 0,function*(){const{bigcommerce_payments:n,containerId:r,methodId:i}=e,o=Boolean(null==n?void 0:n.buyNowInitializeOptions);if(!i)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new L('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!n)throw new L('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');if(o&&!n.currencyCode)throw new L('Unable to initialize payment because \"options.bigcommerce_payments.currencyCode\" argument is not provided.');if(o&&\"function\"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new L('Unable to initialize payment because \"options.bigcommerce_payments.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');o||(yield this.paymentIntegrationService.loadDefaultCheckout());const a=o?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i,a,!1),this.renderButton(r,i,n)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:r,style:i,onComplete:o,onEligibilityFailure:a}=n,s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),c=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:u,isServerSideShippingCallbacksEnabled:l}=c.initializationData||{},d={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},h={onClick:()=>this.handleClick(r),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},p=Object.assign(Object.assign({},!l&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o,l)}),f=Object.assign(Object.assign(Object.assign({fundingSource:s.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(i)},d),r&&h),u&&p),m=s.Buttons(f);m.isEligible()?m.render(`#${e}`):a&&\"function\"==typeof a?a():this.bigCommercePaymentsIntegrationService.removeElement(e)}handleClick(e){return nt(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(t,n,r,i,o){return nt(this,void 0,void 0,function*(){if(!t.orderID)throw new a(e.MissingOrderId);const s=this.paymentIntegrationService.getState().getCartOrThrow();try{const e=s.lineItems.physicalItems.length>0;if(!o){const t=yield n.order.get(),r=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(t);if(yield this.paymentIntegrationService.updateBillingAddress(r),e){const e=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(t);yield this.paymentIntegrationService.updateShippingAddress(e)}}return e&&(yield this.bigCommercePaymentsIntegrationService.updateOrder(o)),o&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:r}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(r,t.orderID),i&&\"function\"==typeof i&&i(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return nt(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return nt(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const it=l(e=>new rt(e,U(e)),[{id:\"bigcommerce_payments\"}]);var ot=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class at{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return ot(this,void 0,void 0,function*(){const{bigcommerce_payments_paylater:t,containerId:n,methodId:r}=e,{buyNowInitializeOptions:i,currencyCode:o}=t||{},a=!!i;if(!r)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new L('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');if(a&&!o)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_paylater.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==i?void 0:i.getBuyNowCartRequestBody))throw new L('Unable to initialize payment because \"options.bigcommerce_payments_paylater.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=this.paymentIntegrationService.getState(),c=a?o:s.getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(r,c,!1),this.renderButton(n,r,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:r,style:i,onComplete:o,onEligibilityFailure:a}=n,s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),c=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:u}=c.initializationData||{},l={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},d={onClick:()=>this.handleClick(r),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},h={onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e),onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o)},p=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT];let f=!1;p.forEach(t=>{if(!f){const n=Object.assign(Object.assign(Object.assign({fundingSource:t,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(i)},l),r&&d),u&&h),o=s.Buttons(n);o.isEligible()?(o.render(`#${e}`),f=!0):a&&\"function\"==typeof a&&a()}}),f||this.bigCommercePaymentsIntegrationService.removeElement(e)}handleClick(e){return ot(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(t,n,r,i){return ot(this,void 0,void 0,function*(){if(!t.orderID)throw new a(e.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow(),s=yield n.order.get();try{const e=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(s);if(yield this.paymentIntegrationService.updateBillingAddress(e),o.lineItems.physicalItems.length>0){const e=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(s);yield this.paymentIntegrationService.updateShippingAddress(e),yield this.bigCommercePaymentsIntegrationService.updateOrder()}return yield this.paymentIntegrationService.submitOrder({},{params:{methodId:r}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(r,t.orderID),i&&\"function\"==typeof i&&i(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return ot(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return ot(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const st=l(e=>new at(e,U(e)),[{id:\"bigcommerce_payments_paylater\"}]);var ct=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function s(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((r=r.apply(e,t||[])).next())})};class ut{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return ct(this,void 0,void 0,function*(){const{bigcommerce_payments_venmo:t,containerId:n,methodId:r}=e,{buyNowInitializeOptions:i,currencyCode:o}=t||{},a=!!i;if(!r)throw new L('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new L('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');if(a&&!o)throw new L('Unable to initialize payment because \"options.bigcommerce_payments_venmo.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==i?void 0:i.getBuyNowCartRequestBody))throw new L('Unable to initialize payment because \"options.bigcommerce_payments_venmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=a?o:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(r,s,!1),this.renderButton(n,r,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:r,style:i,onEligibilityFailure:o}=n,a=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),s=a.FUNDING.VENMO,c={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmo\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},u={onClick:()=>this.handleClick(r),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},l=Object.assign(Object.assign({fundingSource:s,style:this.getValidVenmoButtonStyles(i)},c),r&&u),d=a.Buttons(l);d.isEligible()?d.render(`#${e}`):o&&\"function\"==typeof o?o():this.bigCommercePaymentsIntegrationService.removeElement(e)}getValidVenmoButtonStyles(e){const t=this.bigCommercePaymentsIntegrationService.getValidButtonStyle(e);return t.color===C.gold?Object.assign(Object.assign({},t),{color:void 0}):t}handleClick(e){return ct(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}}const lt=l(e=>new ut(e,U(e)),[{id:\"bigcommerce_payments_venmo\"}])})(),module.exports=r})();\n//# sourceMappingURL=bigcommerce-payments.js.map"
  },
  {
    "path": "dist/cjs/integrations/bluesnap-direct.js",
    "content": "(()=>{var t={4325(t,e,n){\"use strict\";n.d(e,{g:()=>i});var r=n(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(r.stringify(e))},t}()},321(t,e,n){\"use strict\";n.d(e,{A:()=>a});var r=n(168),i=n(1675),o=n(5861),u=n(4670);function a(t){return new u.A(new o.A,new i.A,r,t)}},6889(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(2024);function i(t){return new r.A(t)}},4043(t,e,n){\"use strict\";n.r(e),n.d(e,{RequestSender:()=>o.A,Timeout:()=>u.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),u=n(2024)},4843(t,e,n){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}n.d(e,{A:()=>r})},1675(t,e,n){\"use strict\";n.d(e,{A:()=>a});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,u=/application\\/x-www-form-urlencoded/;const a=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(e))return JSON.stringify(t.body);if(u.test(e))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,\"Content-Type\");return t&&o.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var n,i=e.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}()},5861(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||\"GET\",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),\"boolean\"==typeof n.credentials&&(t.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(n){t.setRequestHeader(n,e[n])})},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(r.stringify(e,{encode:n})):t},t}()},4670(t,e,n){\"use strict\";n.d(e,{A:()=>s});var r=n(1635),i=n(35),o=n.n(i),u=n(4325),a=n(4843),c=n(2024);const s=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new u.g}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(e,i){var u=function(){var u=n._payloadTransformer.toResponse(o);u.status>=200&&u.status<300?(n._cacheRequest(t,r,u),e(u)):i(u)};o.onload=u,o.onerror=u,o.onabort=u,o.ontimeout=u,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,a.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(n.headers[\"X-XSRF-TOKEN\"]=r),e&&e.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,e,n){\"use strict\";n.d(e,{A:()=>r});const r=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,e,n){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var n=t[e];return\"string\"==typeof n?\"\".concat(e,\"=\").concat(encodeURIComponent(n)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(e,{A:()=>r})},5889(t,e,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),u=n(3814);function a(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}function s(t,e){return e.decode?i(t):t}function l(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?l(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function f(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function p(t){const e=(t=f(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function d(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function h(t,e){a((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,n,r)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case\"bracket\":return(t,n,r)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"comma\":case\"separator\":return(e,n,r)=>{const i=\"string\"==typeof n&&n.includes(t.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&s(n,t).includes(t.arrayFormatSeparator);n=o?s(n,t):n;const u=i||o?n.split(t.arrayFormatSeparator).map(e=>s(e,t)):null===n?n:s(n,t);r[e]=u};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[].concat(n[t],e):n[t]=e}}}(e),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,u]=o(e.decode?i.replace(/\\+/g,\" \"):i,\"=\");u=void 0===u?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?u:s(u,e),n(s(t,e),u,r)}for(const t of Object.keys(r)){const n=r[t];if(\"object\"==typeof n&&null!==n)for(const t of Object.keys(n))n[t]=d(n[t],e);else r[t]=d(n,e)}return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce((t,e)=>{const n=r[e];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?t[e]=l(n):t[e]=n,t},Object.create(null))}e.extract=p,e.parse=h,e.stringify=(t,e)=>{if(!t)return\"\";a((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const n=n=>e.skipNull&&null==t[n]||e.skipEmptyString&&\"\"===t[n],r=function(t){switch(t.arrayFormat){case\"index\":return e=>(n,r)=>{const i=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[\",i,\"]\"].join(\"\")]:[...n,[c(e,t),\"[\",c(i,t),\"]=\",c(r,t)].join(\"\")]};case\"bracket\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[]\"].join(\"\")]:[...n,[c(e,t),\"[]=\",c(r,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(n,r)=>null==r||0===r.length?n:0===n.length?[[c(e,t),\"=\",c(r,t)].join(\"\")]:[[n,c(r,t)].join(t.arrayFormatSeparator)];default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,c(e,t)]:[...n,[c(e,t),\"=\",c(r,t)].join(\"\")]}}(e),i={};for(const e of Object.keys(t))n(e)||(i[e]=t[e]);const o=Object.keys(i);return!1!==e.sort&&o.sort(e.sort),o.map(n=>{const i=t[n];return void 0===i?\"\":null===i?c(n,e):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):c(n,e)+\"=\"+c(i,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[n,r]=o(t,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:h(p(t),e)},e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:s(r,e)}:{})},e.stringifyUrl=(t,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=f(t.url).split(\"?\")[0]||\"\",i=e.extract(t.url),o=e.parse(i,{sort:!1}),u=Object.assign(o,t.query);let a=e.stringify(u,n);a&&(a=`?${a}`);let s=function(t){let e=\"\";const n=t.indexOf(\"#\");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(s=`#${c(t.fragmentIdentifier,n)}`),`${r}${a}${s}`},e.pick=(t,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:a}=e.parseUrl(t,r);return e.stringifyUrl({url:i,query:u(o,n),fragmentIdentifier:a},r)},e.exclude=(t,n,r)=>{const i=Array.isArray(n)?t=>!n.includes(t):(t,e)=>!n(t,e);return e.pick(t,i,r)}},5477(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement(\"link\");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=n},471(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(t,e,n){\"use strict\";e.vQ=void 0;n(4886),n(471);var r=n(5895);Object.defineProperty(e,\"vQ\",{enumerable:!0,get:function(){return r.default}});n(7995),n(9722),n(282)},4886(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var n=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),u=e||{},a=u.async,c=void 0!==a&&a,s=u.attributes,l=void 0===s?{}:s;Object.keys(l).forEach(function(t){o.setAttribute(t,l[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(e){delete n._scripts[t],i(e)},o.async=c,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadScript(t,e)})).then(function(){})},t.prototype.preloadScript=function(t,e){var n=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(e||{}).prefetch,u=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(u)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=u,a.href=t,a.onload=function(){r()},a.onerror=function(){delete n._preloadedScripts[t],i()},document.head.appendChild(a)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadScript(t,e)})).then(function(){})},t}();e.default=n},7995(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var n=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),u=e||{},a=u.prepend,c=void 0!==a&&a,s=u.attributes,l=void 0===s?{}:s;Object.keys(l).forEach(function(t){o.setAttribute(t,l[t])}),o.onload=function(){return r()},o.onerror=function(e){delete n._stylesheets[t],i(e)},o.rel=\"stylesheet\",o.href=t,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadStylesheet(t,e)})).then(function(){})},t.prototype.preloadStylesheet=function(t,e){var n=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(e||{}).prefetch,u=void 0!==o&&o,a=u?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=u?\"prefetch\":\"preload\",c.href=t,c.onload=function(){r()},c.onerror=function(e){delete n._preloadedStylesheets[t],i(e)},document.head.appendChild(c)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadStylesheet(t,e)})).then(function(){})},t}();e.default=n},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+e+\")+\",\"gi\");function i(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],i(n),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var e=t.match(n)||[],r=1;r<e.length;r++)e=(t=i(e,r).join(\"\")).match(n)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(t);n;){try{e[n[0]]=decodeURIComponent(n[0])}catch(t){var i=o(n[0]);i!==n[0]&&(e[n[0]]=i)}n=r.exec(t)}e[\"%C2\"]=\"�\";for(var u=Object.keys(e),a=0;a<u.length;a++){var c=u[a];t=t.replace(new RegExp(c,\"g\"),e[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,e){for(var n={},r=Object.keys(t),i=Array.isArray(e),o=0;o<r.length;o++){var u=r[o],a=t[u];(i?-1!==e.indexOf(u):e(u,a,t))&&(n[u]=a)}return n}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(e,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var u=JSON.stringify(n);/^[\\{\\[]/.test(u)&&(n=u)}catch(t){}n=r.write?r.write(n,e):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in o)o[c]&&(a+=\"; \"+c,!0!==o[c]&&(a+=\"=\"+o[c].split(\";\")[0]));return document.cookie=e+\"=\"+n+a}}function u(t,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],u=0;u<o.length;u++){var a=o[u].split(\"=\"),c=a.slice(1).join(\"=\");n||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var s=e(a[0]);if(c=(r.read||r)(c,s)||e(c),n)try{c=JSON.parse(c)}catch(t){}if(i[s]=c,t===s)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return u(t,!1)},i.getJSON=function(t){return u(t,!0)},i.remove=function(e,n){o(e,\"\",t(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},35(t,e,n){t=n.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",u=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,s=/^(?:0|[1-9]\\d*)$/,l={};l[\"[object Float32Array]\"]=l[\"[object Float64Array]\"]=l[\"[object Int8Array]\"]=l[\"[object Int16Array]\"]=l[\"[object Int32Array]\"]=l[\"[object Uint8Array]\"]=l[\"[object Uint8ClampedArray]\"]=l[\"[object Uint16Array]\"]=l[\"[object Uint32Array]\"]=!0,l[o]=l[\"[object Array]\"]=l[\"[object ArrayBuffer]\"]=l[\"[object Boolean]\"]=l[\"[object DataView]\"]=l[\"[object Date]\"]=l[\"[object Error]\"]=l[u]=l[\"[object Map]\"]=l[\"[object Number]\"]=l[a]=l[\"[object RegExp]\"]=l[\"[object Set]\"]=l[\"[object String]\"]=l[\"[object WeakMap]\"]=!1;var f,p,d,h=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,_=\"object\"==typeof self&&self&&self.Object===Object&&self,y=h||_||Function(\"return this\")(),v=e&&!e.nodeType&&e,g=v&&t&&!t.nodeType&&t,m=g&&g.exports===v,b=m&&h.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),S=w&&w.isTypedArray,j=Array.prototype,O=Function.prototype,I=Object.prototype,C=y[\"__core-js_shared__\"],E=O.toString,x=I.hasOwnProperty,A=(f=/[^.]+$/.exec(C&&C.keys&&C.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+f:\"\",N=I.toString,k=E.call(Object),P=RegExp(\"^\"+E.call(x).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),R=m?y.Buffer:void 0,D=y.Symbol,T=y.Uint8Array,z=(R&&R.allocUnsafe,p=Object.getPrototypeOf,d=Object,function(t){return p(d(t))}),M=Object.create,U=I.propertyIsEnumerable,F=j.splice,B=D?D.toStringTag:void 0,L=function(){try{var t=at(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),q=R?R.isBuffer:void 0,$=Math.max,V=Date.now,H=at(y,\"Map\"),W=at(Object,\"create\"),K=function(){function t(){}return function(e){if(!mt(e))return{};if(M)return M(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function Z(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function G(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function J(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Y(t){var e=this.__data__=new G(t);this.size=e.size}function X(t,e,n){(void 0!==n&&!pt(t[e],n)||void 0===n&&!(e in t))&&et(t,e,n)}function Q(t,e,n){var r=t[e];x.call(t,e)&&pt(r,n)&&(void 0!==n||e in t)||et(t,e,n)}function tt(t,e){for(var n=t.length;n--;)if(pt(t[n][0],e))return n;return-1}function et(t,e,n){\"__proto__\"==e&&L?L(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}Z.prototype.clear=function(){this.__data__=W?W(null):{},this.size=0},Z.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Z.prototype.get=function(t){var e=this.__data__;if(W){var n=e[t];return n===r?void 0:n}return x.call(e,t)?e[t]:void 0},Z.prototype.has=function(t){var e=this.__data__;return W?void 0!==e[t]:x.call(e,t)},Z.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=W&&void 0===e?r:e,this},G.prototype.clear=function(){this.__data__=[],this.size=0},G.prototype.delete=function(t){var e=this.__data__,n=tt(e,t);return!(n<0||(n==e.length-1?e.pop():F.call(e,n,1),--this.size,0))},G.prototype.get=function(t){var e=this.__data__,n=tt(e,t);return n<0?void 0:e[n][1]},G.prototype.has=function(t){return tt(this.__data__,t)>-1},G.prototype.set=function(t,e){var n=this.__data__,r=tt(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},J.prototype.clear=function(){this.size=0,this.__data__={hash:new Z,map:new(H||G),string:new Z}},J.prototype.delete=function(t){var e=ut(this,t).delete(t);return this.size-=e?1:0,e},J.prototype.get=function(t){return ut(this,t).get(t)},J.prototype.has=function(t){return ut(this,t).has(t)},J.prototype.set=function(t,e){var n=ut(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Y.prototype.clear=function(){this.__data__=new G,this.size=0},Y.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Y.prototype.get=function(t){return this.__data__.get(t)},Y.prototype.has=function(t){return this.__data__.has(t)},Y.prototype.set=function(t,e){var n=this.__data__;if(n instanceof G){var r=n.__data__;if(!H||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new J(r)}return n.set(t,e),this.size=n.size,this};function nt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":B&&B in Object(t)?function(t){var e=x.call(t,B),n=t[B];try{t[B]=void 0;var r=!0}catch(t){}var i=N.call(t);return r&&(e?t[B]=n:delete t[B]),i}(t):function(t){return N.call(t)}(t)}function rt(t){return bt(t)&&nt(t)==o}function it(t,e,n,r,i){t!==e&&function(t,e,n){for(var r=-1,i=Object(t),o=n(t),u=o.length;u--;){var a=o[++r];if(!1===e(i[a],a,i))break}}(e,function(o,u){if(i||(i=new Y),mt(o))!function(t,e,n,r,i,o,u){var c=lt(t,n),s=lt(e,n),l=u.get(s);if(l)X(t,n,l);else{var f,p,d,h,_,y=o?o(c,s,n+\"\",t,e,u):void 0,v=void 0===y;if(v){var g=ht(s),m=!g&&yt(s),b=!g&&!m&&wt(s);y=s,g||m||b?ht(c)?y=c:bt(_=c)&&_t(_)?y=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}(c):m?(v=!1,y=function(t){return t.slice()}(s)):b?(v=!1,h=new(d=(f=s).buffer).constructor(d.byteLength),new T(h).set(new T(d)),p=h,y=new f.constructor(p,f.byteOffset,f.length)):y=[]:function(t){if(!bt(t)||nt(t)!=a)return!1;var e=z(t);if(null===e)return!0;var n=x.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&E.call(n)==k}(s)||dt(s)?(y=c,dt(c)?y=function(t){return function(t,e,n){var r=!n;n||(n={});for(var i=-1,o=e.length;++i<o;){var u=e[i],a=void 0;void 0===a&&(a=t[u]),r?et(n,u,a):Q(n,u,a)}return n}(t,St(t))}(c):mt(c)&&!vt(c)||(y=function(t){return\"function\"!=typeof t.constructor||st(t)?{}:K(z(t))}(s))):v=!1}v&&(u.set(s,y),i(y,s,r,o,u),u.delete(s)),X(t,n,y)}}(t,e,u,n,it,r,i);else{var c=r?r(lt(t,u),o,u+\"\",t,e,i):void 0;void 0===c&&(c=o),X(t,u,c)}},St)}var ot=L?function(t,e){return L(t,\"toString\",{configurable:!0,enumerable:!1,value:(n=e,function(){return n}),writable:!0});var n}:It;function ut(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function at(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!mt(t)||function(t){return!!A&&A in t}(t))&&(vt(t)?P:c).test(function(t){if(null!=t){try{return E.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(n)?n:void 0}function ct(t,e){var n=typeof t;return!!(e=e??i)&&(\"number\"==n||\"symbol\"!=n&&s.test(t))&&t>-1&&t%1==0&&t<e}function st(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||I)}function lt(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var ft=function(t){var e=0,n=0;return function(){var r=V(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ot);function pt(t,e){return t===e||t!=t&&e!=e}var dt=rt(function(){return arguments}())?rt:function(t){return bt(t)&&x.call(t,\"callee\")&&!U.call(t,\"callee\")},ht=Array.isArray;function _t(t){return null!=t&&gt(t.length)&&!vt(t)}var yt=q||function(){return!1};function vt(t){if(!mt(t))return!1;var e=nt(t);return e==u||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function mt(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=S?function(t){return function(e){return t(e)}}(S):function(t){return bt(t)&&gt(t.length)&&!!l[nt(t)]};function St(t){return _t(t)?function(t,e){var n=ht(t),r=!n&&dt(t),i=!n&&!r&&yt(t),o=!n&&!r&&!i&&wt(t),u=n||r||i||o,a=u?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],c=a.length;for(var s in t)!e&&!x.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||ct(s,c))||a.push(s);return a}(t,!0):function(t){if(!mt(t))return function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}(t);var e=st(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&x.call(t,r))&&n.push(r);return n}(t)}var jt,Ot=(jt=function(t,e,n){it(t,e,n)},function(t,e){return ft(function(t,e,n){return e=$(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=$(r.length-e,0),u=Array(o);++i<o;)u[i]=r[e+i];i=-1;for(var a=Array(e+1);++i<e;)a[i]=r[i];return a[e]=n(u),function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}(t,this,a)}}(t,e,It),t+\"\")}(function(t,e){var n=-1,r=e.length,i=r>1?e[r-1]:void 0,o=r>2?e[2]:void 0;for(i=jt.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,e,n){if(!mt(n))return!1;var r=typeof e;return!!(\"number\"==r?_t(n)&&ct(e,n.length):\"string\"==r&&e in n)&&pt(n[e],t)}(e[0],e[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++n<r;){var u=e[n];u&&jt(t,u,n)}return t}));function It(t){return t}t.exports=Ot},9440(t,e,n){t=n.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,s=1/0,l=9007199254740991,f=NaN,p=4294967295,d=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],h=\"[object Arguments]\",_=\"[object Array]\",y=\"[object Boolean]\",v=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",S=\"[object Number]\",j=\"[object Object]\",O=\"[object Promise]\",I=\"[object RegExp]\",C=\"[object Set]\",E=\"[object String]\",x=\"[object Symbol]\",A=\"[object WeakMap]\",N=\"[object ArrayBuffer]\",k=\"[object DataView]\",P=\"[object Float32Array]\",R=\"[object Float64Array]\",D=\"[object Int8Array]\",T=\"[object Int16Array]\",z=\"[object Int32Array]\",M=\"[object Uint8Array]\",U=\"[object Uint8ClampedArray]\",F=\"[object Uint16Array]\",B=\"[object Uint32Array]\",L=/\\b__p \\+= '';/g,q=/\\b(__p \\+=) '' \\+/g,$=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,V=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,W=RegExp(V.source),K=RegExp(H.source),Z=/<%-([\\s\\S]+?)%>/g,G=/<%([\\s\\S]+?)%>/g,J=/<%=([\\s\\S]+?)%>/g,Y=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,X=/^\\w*$/,Q=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,et=RegExp(tt.source),nt=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,lt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,ft=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,dt=/^0b[01]+$/i,ht=/^\\[object .+?Constructor\\]$/,_t=/^0o[0-7]+$/i,yt=/^(?:0|[1-9]\\d*)$/,vt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",St=\"\\\\u2700-\\\\u27bf\",jt=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Ot=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",It=\"\\\\ufe0e\\\\ufe0f\",Ct=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Et=\"[\"+bt+\"]\",xt=\"[\"+Ct+\"]\",At=\"[\"+wt+\"]\",Nt=\"\\\\d+\",kt=\"[\"+St+\"]\",Pt=\"[\"+jt+\"]\",Rt=\"[^\"+bt+Ct+Nt+St+jt+Ot+\"]\",Dt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Tt=\"[^\"+bt+\"]\",zt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Mt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ut=\"[\"+Ot+\"]\",Ft=\"\\\\u200d\",Bt=\"(?:\"+Pt+\"|\"+Rt+\")\",Lt=\"(?:\"+Ut+\"|\"+Rt+\")\",qt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",$t=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Vt=\"(?:\"+At+\"|\"+Dt+\")?\",Ht=\"[\"+It+\"]?\",Wt=Ht+Vt+\"(?:\"+Ft+\"(?:\"+[Tt,zt,Mt].join(\"|\")+\")\"+Ht+Vt+\")*\",Kt=\"(?:\"+[kt,zt,Mt].join(\"|\")+\")\"+Wt,Zt=\"(?:\"+[Tt+At+\"?\",At,zt,Mt,Et].join(\"|\")+\")\",Gt=RegExp(\"['’]\",\"g\"),Jt=RegExp(At,\"g\"),Yt=RegExp(Dt+\"(?=\"+Dt+\")|\"+Zt+Wt,\"g\"),Xt=RegExp([Ut+\"?\"+Pt+\"+\"+qt+\"(?=\"+[xt,Ut,\"$\"].join(\"|\")+\")\",Lt+\"+\"+$t+\"(?=\"+[xt,Ut+Bt,\"$\"].join(\"|\")+\")\",Ut+\"?\"+Bt+\"+\"+qt,Ut+\"+\"+$t,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Nt,Kt].join(\"|\"),\"g\"),Qt=RegExp(\"[\"+Ft+bt+wt+It+\"]\"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ne=-1,re={};re[P]=re[R]=re[D]=re[T]=re[z]=re[M]=re[U]=re[F]=re[B]=!0,re[h]=re[_]=re[N]=re[y]=re[k]=re[v]=re[g]=re[m]=re[w]=re[S]=re[j]=re[I]=re[C]=re[E]=re[A]=!1;var ie={};ie[h]=ie[_]=ie[N]=ie[k]=ie[y]=ie[v]=ie[P]=ie[R]=ie[D]=ie[T]=ie[z]=ie[w]=ie[S]=ie[j]=ie[I]=ie[C]=ie[E]=ie[x]=ie[M]=ie[U]=ie[F]=ie[B]=!0,ie[g]=ie[m]=ie[A]=!1;var oe={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ue=parseFloat,ae=parseInt,ce=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,se=\"object\"==typeof self&&self&&self.Object===Object&&self,le=ce||se||Function(\"return this\")(),fe=e&&!e.nodeType&&e,pe=fe&&t&&!t.nodeType&&t,de=pe&&pe.exports===fe,he=de&&ce.process,_e=function(){try{return pe&&pe.require&&pe.require(\"util\").types||he&&he.binding&&he.binding(\"util\")}catch(t){}}(),ye=_e&&_e.isArrayBuffer,ve=_e&&_e.isDate,ge=_e&&_e.isMap,me=_e&&_e.isRegExp,be=_e&&_e.isSet,we=_e&&_e.isTypedArray;function Se(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function je(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];e(r,u,n(u),t)}return r}function Oe(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function Ie(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function Ce(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function Ee(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var u=t[n];e(u,n,t)&&(o[i++]=u)}return o}function xe(t,e){return!(null==t||!t.length)&&Ue(t,e,0)>-1}function Ae(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function Ne(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function ke(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function Pe(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function Re(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function De(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var Te=qe(\"length\");function ze(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function Me(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function Ue(t,e,n){return e==e?function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):Me(t,Be,n)}function Fe(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function Be(t){return t!=t}function Le(t,e){var n=null==t?0:t.length;return n?He(t,e)/n:f}function qe(t){return function(e){return null==e?r:e[t]}}function $e(t){return function(e){return null==t?r:t[e]}}function Ve(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function He(t,e){for(var n,i=-1,o=t.length;++i<o;){var u=e(t[i]);u!==r&&(n=n===r?u:n+u)}return n}function We(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function Ke(t){return t?t.slice(0,fn(t)+1).replace(nt,\"\"):t}function Ze(t){return function(e){return t(e)}}function Ge(t,e){return Ne(e,function(e){return t[e]})}function Je(t,e){return t.has(e)}function Ye(t,e){for(var n=-1,r=t.length;++n<r&&Ue(e,t[n],0)>-1;);return n}function Xe(t,e){for(var n=t.length;n--&&Ue(e,t[n],0)>-1;);return n}var Qe=$e({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tn=$e({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function en(t){return\"\\\\\"+oe[t]}function nn(t){return Qt.test(t)}function rn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function on(t,e){return function(n){return t(e(n))}}function un(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n];a!==e&&a!==u||(t[n]=u,o[i++]=n)}return o}function an(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function cn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function sn(t){return nn(t)?function(t){for(var e=Yt.lastIndex=0;Yt.test(t);)++e;return e}(t):Te(t)}function ln(t){return nn(t)?function(t){return t.match(Yt)||[]}(t):function(t){return t.split(\"\")}(t)}function fn(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}var pn=$e({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),dn=function t(e){var n,rt=(e=null==e?le:dn.defaults(le.Object(),e,dn.pick(le,ee))).Array,bt=e.Date,wt=e.Error,St=e.Function,jt=e.Math,Ot=e.Object,It=e.RegExp,Ct=e.String,Et=e.TypeError,xt=rt.prototype,At=St.prototype,Nt=Ot.prototype,kt=e[\"__core-js_shared__\"],Pt=At.toString,Rt=Nt.hasOwnProperty,Dt=0,Tt=(n=/[^.]+$/.exec(kt&&kt.keys&&kt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",zt=Nt.toString,Mt=Pt.call(Ot),Ut=le._,Ft=It(\"^\"+Pt.call(Rt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Bt=de?e.Buffer:r,Lt=e.Symbol,qt=e.Uint8Array,$t=Bt?Bt.allocUnsafe:r,Vt=on(Ot.getPrototypeOf,Ot),Ht=Ot.create,Wt=Nt.propertyIsEnumerable,Kt=xt.splice,Zt=Lt?Lt.isConcatSpreadable:r,Yt=Lt?Lt.iterator:r,Qt=Lt?Lt.toStringTag:r,oe=function(){try{var t=co(Ot,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ce=e.clearTimeout!==le.clearTimeout&&e.clearTimeout,se=bt&&bt.now!==le.Date.now&&bt.now,fe=e.setTimeout!==le.setTimeout&&e.setTimeout,pe=jt.ceil,he=jt.floor,_e=Ot.getOwnPropertySymbols,Te=Bt?Bt.isBuffer:r,$e=e.isFinite,hn=xt.join,_n=on(Ot.keys,Ot),yn=jt.max,vn=jt.min,gn=bt.now,mn=e.parseInt,bn=jt.random,wn=xt.reverse,Sn=co(e,\"DataView\"),jn=co(e,\"Map\"),On=co(e,\"Promise\"),In=co(e,\"Set\"),Cn=co(e,\"WeakMap\"),En=co(Ot,\"create\"),xn=Cn&&new Cn,An={},Nn=Mo(Sn),kn=Mo(jn),Pn=Mo(On),Rn=Mo(In),Dn=Mo(Cn),Tn=Lt?Lt.prototype:r,zn=Tn?Tn.valueOf:r,Mn=Tn?Tn.toString:r;function Un(t){if(ta(t)&&!$u(t)&&!(t instanceof qn)){if(t instanceof Ln)return t;if(Rt.call(t,\"__wrapped__\"))return Uo(t)}return new Ln(t)}var Fn=function(){function t(){}return function(e){if(!Qu(e))return{};if(Ht)return Ht(e);t.prototype=e;var n=new t;return t.prototype=r,n}}();function Bn(){}function Ln(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=r}function qn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function $n(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Vn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Hn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Wn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Hn;++e<n;)this.add(t[e])}function Kn(t){var e=this.__data__=new Vn(t);this.size=e.size}function Zn(t,e){var n=$u(t),r=!n&&qu(t),i=!n&&!r&&Ku(t),o=!n&&!r&&!i&&ca(t),u=n||r||i||o,a=u?We(t.length,Ct):[],c=a.length;for(var s in t)!e&&!Rt.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||yo(s,c))||a.push(s);return a}function Gn(t){var e=t.length;return e?t[Hr(0,e-1)]:r}function Jn(t,e){return Po(Ci(t),or(e,0,t.length))}function Yn(t){return Po(Ci(t))}function Xn(t,e,n){(n!==r&&!Fu(t[e],n)||n===r&&!(e in t))&&rr(t,e,n)}function Qn(t,e,n){var i=t[e];Rt.call(t,e)&&Fu(i,n)&&(n!==r||e in t)||rr(t,e,n)}function tr(t,e){for(var n=t.length;n--;)if(Fu(t[n][0],e))return n;return-1}function er(t,e,n,r){return lr(t,function(t,i,o){e(r,t,n(t),o)}),r}function nr(t,e){return t&&Ei(e,Na(e),t)}function rr(t,e,n){\"__proto__\"==e&&oe?oe(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function ir(t,e){for(var n=-1,i=e.length,o=rt(i),u=null==t;++n<i;)o[n]=u?r:Ia(t,e[n]);return o}function or(t,e,n){return t==t&&(n!==r&&(t=t<=n?t:n),e!==r&&(t=t>=e?t:e)),t}function ur(t,e,n,i,o,u){var a,c=1&e,s=2&e,l=4&e;if(n&&(a=o?n(t,i,o,u):n(t)),a!==r)return a;if(!Qu(t))return t;var f=$u(t);if(f){if(a=function(t){var e=t.length,n=new t.constructor(e);return e&&\"string\"==typeof t[0]&&Rt.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}(t),!c)return Ci(t,a)}else{var p=fo(t),d=p==m||p==b;if(Ku(t))return bi(t,c);if(p==j||p==h||d&&!o){if(a=s||d?{}:ho(t),!c)return s?function(t,e){return Ei(t,lo(t),e)}(t,function(t,e){return t&&Ei(e,ka(e),t)}(a,t)):function(t,e){return Ei(t,so(t),e)}(t,nr(a,t))}else{if(!ie[p])return o?t:{};a=function(t,e,n){var r,i=t.constructor;switch(e){case N:return wi(t);case y:case v:return new i(+t);case k:return function(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case P:case R:case D:case T:case z:case M:case U:case F:case B:return Si(t,n);case w:return new i;case S:case E:return new i(t);case I:return function(t){var e=new t.constructor(t.source,ft.exec(t));return e.lastIndex=t.lastIndex,e}(t);case C:return new i;case x:return r=t,zn?Ot(zn.call(r)):{}}}(t,p,c)}}u||(u=new Kn);var _=u.get(t);if(_)return _;u.set(t,a),oa(t)?t.forEach(function(r){a.add(ur(r,e,n,r,t,u))}):ea(t)&&t.forEach(function(r,i){a.set(i,ur(r,e,n,i,t,u))});var g=f?r:(l?s?eo:to:s?ka:Na)(t);return Oe(g||t,function(r,i){g&&(r=t[i=r]),Qn(a,i,ur(r,e,n,i,t,u))}),a}function ar(t,e,n){var i=n.length;if(null==t)return!i;for(t=Ot(t);i--;){var o=n[i],u=e[o],a=t[o];if(a===r&&!(o in t)||!u(a))return!1}return!0}function cr(t,e,n){if(\"function\"!=typeof t)throw new Et(i);return xo(function(){t.apply(r,n)},e)}function sr(t,e,n,r){var i=-1,o=xe,u=!0,a=t.length,c=[],s=e.length;if(!a)return c;n&&(e=Ne(e,Ze(n))),r?(o=Ae,u=!1):e.length>=200&&(o=Je,u=!1,e=new Wn(e));t:for(;++i<a;){var l=t[i],f=null==n?l:n(l);if(l=r||0!==l?l:0,u&&f==f){for(var p=s;p--;)if(e[p]===f)continue t;c.push(l)}else o(e,f,r)||c.push(l)}return c}Un.templateSettings={escape:Z,evaluate:G,interpolate:J,variable:\"\",imports:{_:Un}},Un.prototype=Bn.prototype,Un.prototype.constructor=Un,Ln.prototype=Fn(Bn.prototype),Ln.prototype.constructor=Ln,qn.prototype=Fn(Bn.prototype),qn.prototype.constructor=qn,$n.prototype.clear=function(){this.__data__=En?En(null):{},this.size=0},$n.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},$n.prototype.get=function(t){var e=this.__data__;if(En){var n=e[t];return n===o?r:n}return Rt.call(e,t)?e[t]:r},$n.prototype.has=function(t){var e=this.__data__;return En?e[t]!==r:Rt.call(e,t)},$n.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=En&&e===r?o:e,this},Vn.prototype.clear=function(){this.__data__=[],this.size=0},Vn.prototype.delete=function(t){var e=this.__data__,n=tr(e,t);return!(n<0||(n==e.length-1?e.pop():Kt.call(e,n,1),--this.size,0))},Vn.prototype.get=function(t){var e=this.__data__,n=tr(e,t);return n<0?r:e[n][1]},Vn.prototype.has=function(t){return tr(this.__data__,t)>-1},Vn.prototype.set=function(t,e){var n=this.__data__,r=tr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Hn.prototype.clear=function(){this.size=0,this.__data__={hash:new $n,map:new(jn||Vn),string:new $n}},Hn.prototype.delete=function(t){var e=uo(this,t).delete(t);return this.size-=e?1:0,e},Hn.prototype.get=function(t){return uo(this,t).get(t)},Hn.prototype.has=function(t){return uo(this,t).has(t)},Hn.prototype.set=function(t,e){var n=uo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Wn.prototype.add=Wn.prototype.push=function(t){return this.__data__.set(t,o),this},Wn.prototype.has=function(t){return this.__data__.has(t)},Kn.prototype.clear=function(){this.__data__=new Vn,this.size=0},Kn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Kn.prototype.get=function(t){return this.__data__.get(t)},Kn.prototype.has=function(t){return this.__data__.has(t)},Kn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Vn){var r=n.__data__;if(!jn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Hn(r)}return n.set(t,e),this.size=n.size,this};var lr=Ni(gr),fr=Ni(mr,!0);function pr(t,e){var n=!0;return lr(t,function(t,r,i){return n=!!e(t,r,i)}),n}function dr(t,e,n){for(var i=-1,o=t.length;++i<o;){var u=t[i],a=e(u);if(null!=a&&(c===r?a==a&&!aa(a):n(a,c)))var c=a,s=u}return s}function hr(t,e){var n=[];return lr(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function _r(t,e,n,r,i){var o=-1,u=t.length;for(n||(n=_o),i||(i=[]);++o<u;){var a=t[o];e>0&&n(a)?e>1?_r(a,e-1,n,r,i):ke(i,a):r||(i[i.length]=a)}return i}var yr=ki(),vr=ki(!0);function gr(t,e){return t&&yr(t,e,Na)}function mr(t,e){return t&&vr(t,e,Na)}function br(t,e){return Ee(e,function(e){return Ju(t[e])})}function wr(t,e){for(var n=0,i=(e=yi(e,t)).length;null!=t&&n<i;)t=t[zo(e[n++])];return n&&n==i?t:r}function Sr(t,e,n){var r=e(t);return $u(t)?r:ke(r,n(t))}function jr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Qt&&Qt in Ot(t)?function(t){var e=Rt.call(t,Qt),n=t[Qt];try{t[Qt]=r;var i=!0}catch(t){}var o=zt.call(t);return i&&(e?t[Qt]=n:delete t[Qt]),o}(t):function(t){return zt.call(t)}(t)}function Or(t,e){return t>e}function Ir(t,e){return null!=t&&Rt.call(t,e)}function Cr(t,e){return null!=t&&e in Ot(t)}function Er(t,e,n){for(var i=n?Ae:xe,o=t[0].length,u=t.length,a=u,c=rt(u),s=1/0,l=[];a--;){var f=t[a];a&&e&&(f=Ne(f,Ze(e))),s=vn(f.length,s),c[a]=!n&&(e||o>=120&&f.length>=120)?new Wn(a&&f):r}f=t[0];var p=-1,d=c[0];t:for(;++p<o&&l.length<s;){var h=f[p],_=e?e(h):h;if(h=n||0!==h?h:0,!(d?Je(d,_):i(l,_,n))){for(a=u;--a;){var y=c[a];if(!(y?Je(y,_):i(t[a],_,n)))continue t}d&&d.push(_),l.push(h)}}return l}function xr(t,e,n){var i=null==(t=Io(t,e=yi(e,t)))?t:t[zo(Go(e))];return null==i?r:Se(i,t,n)}function Ar(t){return ta(t)&&jr(t)==h}function Nr(t,e,n,i,o){return t===e||(null==t||null==e||!ta(t)&&!ta(e)?t!=t&&e!=e:function(t,e,n,i,o,u){var a=$u(t),c=$u(e),s=a?_:fo(t),l=c?_:fo(e),f=(s=s==h?j:s)==j,p=(l=l==h?j:l)==j,d=s==l;if(d&&Ku(t)){if(!Ku(e))return!1;a=!0,f=!1}if(d&&!f)return u||(u=new Kn),a||ca(t)?Xi(t,e,n,i,o,u):function(t,e,n,r,i,o,u){switch(n){case k:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case N:return!(t.byteLength!=e.byteLength||!o(new qt(t),new qt(e)));case y:case v:case S:return Fu(+t,+e);case g:return t.name==e.name&&t.message==e.message;case I:case E:return t==e+\"\";case w:var a=rn;case C:var c=1&r;if(a||(a=an),t.size!=e.size&&!c)return!1;var s=u.get(t);if(s)return s==e;r|=2,u.set(t,e);var l=Xi(a(t),a(e),r,i,o,u);return u.delete(t),l;case x:if(zn)return zn.call(t)==zn.call(e)}return!1}(t,e,s,n,i,o,u);if(!(1&n)){var m=f&&Rt.call(t,\"__wrapped__\"),b=p&&Rt.call(e,\"__wrapped__\");if(m||b){var O=m?t.value():t,A=b?e.value():e;return u||(u=new Kn),o(O,A,n,i,u)}}return!!d&&(u||(u=new Kn),function(t,e,n,i,o,u){var a=1&n,c=to(t),s=c.length;if(s!=to(e).length&&!a)return!1;for(var l=s;l--;){var f=c[l];if(!(a?f in e:Rt.call(e,f)))return!1}var p=u.get(t),d=u.get(e);if(p&&d)return p==e&&d==t;var h=!0;u.set(t,e),u.set(e,t);for(var _=a;++l<s;){var y=t[f=c[l]],v=e[f];if(i)var g=a?i(v,y,f,e,t,u):i(y,v,f,t,e,u);if(!(g===r?y===v||o(y,v,n,i,u):g)){h=!1;break}_||(_=\"constructor\"==f)}if(h&&!_){var m=t.constructor,b=e.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(h=!1)}return u.delete(t),u.delete(e),h}(t,e,n,i,o,u))}(t,e,n,i,Nr,o))}function kr(t,e,n,i){var o=n.length,u=o,a=!i;if(null==t)return!u;for(t=Ot(t);o--;){var c=n[o];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++o<u;){var s=(c=n[o])[0],l=t[s],f=c[1];if(a&&c[2]){if(l===r&&!(s in t))return!1}else{var p=new Kn;if(i)var d=i(l,f,s,t,e,p);if(!(d===r?Nr(f,l,3,i,p):d))return!1}}return!0}function Pr(t){return!(!Qu(t)||(e=t,Tt&&Tt in e))&&(Ju(t)?Ft:ht).test(Mo(t));var e}function Rr(t){return\"function\"==typeof t?t:null==t?nc:\"object\"==typeof t?$u(t)?Ur(t[0],t[1]):Mr(t):fc(t)}function Dr(t){if(!wo(t))return _n(t);var e=[];for(var n in Ot(t))Rt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function Tr(t,e){return t<e}function zr(t,e){var n=-1,r=Hu(t)?rt(t.length):[];return lr(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Mr(t){var e=ao(t);return 1==e.length&&e[0][2]?jo(e[0][0],e[0][1]):function(n){return n===t||kr(n,t,e)}}function Ur(t,e){return go(t)&&So(e)?jo(zo(t),e):function(n){var i=Ia(n,t);return i===r&&i===e?Ca(n,t):Nr(e,i,3)}}function Fr(t,e,n,i,o){t!==e&&yr(e,function(u,a){if(o||(o=new Kn),Qu(u))!function(t,e,n,i,o,u,a){var c=Co(t,n),s=Co(e,n),l=a.get(s);if(l)Xn(t,n,l);else{var f=u?u(c,s,n+\"\",t,e,a):r,p=f===r;if(p){var d=$u(s),h=!d&&Ku(s),_=!d&&!h&&ca(s);f=s,d||h||_?$u(c)?f=c:Wu(c)?f=Ci(c):h?(p=!1,f=bi(s,!0)):_?(p=!1,f=Si(s,!0)):f=[]:ra(s)||qu(s)?(f=c,qu(c)?f=ya(c):Qu(c)&&!Ju(c)||(f=ho(s))):p=!1}p&&(a.set(s,f),o(f,s,i,u,a),a.delete(s)),Xn(t,n,f)}}(t,e,a,n,Fr,i,o);else{var c=i?i(Co(t,a),u,a+\"\",t,e,o):r;c===r&&(c=u),Xn(t,a,c)}},ka)}function Br(t,e){var n=t.length;if(n)return yo(e+=e<0?n:0,n)?t[e]:r}function Lr(t,e,n){e=e.length?Ne(e,function(t){return $u(t)?function(e){return wr(e,1===t.length?t[0]:t)}:t}):[nc];var r=-1;e=Ne(e,Ze(oo()));var i=zr(t,function(t,n,i){var o=Ne(e,function(e){return e(t)});return{criteria:o,index:++r,value:t}});return function(t){var e=t.length;for(t.sort(function(t,e){return function(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,u=i.length,a=n.length;++r<u;){var c=ji(i[r],o[r]);if(c)return r>=a?c:c*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)});e--;)t[e]=t[e].value;return t}(i)}function qr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var u=e[r],a=wr(t,u);n(a,u)&&Jr(o,yi(u,t),a)}return o}function $r(t,e,n,r){var i=r?Fe:Ue,o=-1,u=e.length,a=t;for(t===e&&(e=Ci(e)),n&&(a=Ne(t,Ze(n)));++o<u;)for(var c=0,s=e[o],l=n?n(s):s;(c=i(a,l,c,r))>-1;)a!==t&&Kt.call(a,c,1),Kt.call(t,c,1);return t}function Vr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;yo(i)?Kt.call(t,i,1):ci(t,i)}}return t}function Hr(t,e){return t+he(bn()*(e-t+1))}function Wr(t,e){var n=\"\";if(!t||e<1||e>l)return n;do{e%2&&(n+=t),(e=he(e/2))&&(t+=t)}while(e);return n}function Kr(t,e){return Ao(Oo(t,e,nc),t+\"\")}function Zr(t){return Gn(Fa(t))}function Gr(t,e){var n=Fa(t);return Po(n,or(e,0,n.length))}function Jr(t,e,n,i){if(!Qu(t))return t;for(var o=-1,u=(e=yi(e,t)).length,a=u-1,c=t;null!=c&&++o<u;){var s=zo(e[o]),l=n;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(o!=a){var f=c[s];(l=i?i(f,s,c):r)===r&&(l=Qu(f)?f:yo(e[o+1])?[]:{})}Qn(c,s,l),c=c[s]}return t}var Yr=xn?function(t,e){return xn.set(t,e),t}:nc,Xr=oe?function(t,e){return oe(t,\"toString\",{configurable:!0,enumerable:!1,value:Qa(e),writable:!0})}:nc;function Qr(t){return Po(Fa(t))}function ti(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+e];return o}function ei(t,e){var n;return lr(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ni(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;r<i;){var o=r+i>>>1,u=t[o];null!==u&&!aa(u)&&(n?u<=e:u<e)?r=o+1:i=o}return i}return ri(t,e,nc,n)}function ri(t,e,n,i){var o=0,u=null==t?0:t.length;if(0===u)return 0;for(var a=(e=n(e))!=e,c=null===e,s=aa(e),l=e===r;o<u;){var f=he((o+u)/2),p=n(t[f]),d=p!==r,h=null===p,_=p==p,y=aa(p);if(a)var v=i||_;else v=l?_&&(i||d):c?_&&d&&(i||!h):s?_&&d&&!h&&(i||!y):!h&&!y&&(i?p<=e:p<e);v?o=f+1:u=f}return vn(u,4294967294)}function ii(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n],a=e?e(u):u;if(!n||!Fu(a,c)){var c=a;o[i++]=0===u?0:u}}return o}function oi(t){return\"number\"==typeof t?t:aa(t)?f:+t}function ui(t){if(\"string\"==typeof t)return t;if($u(t))return Ne(t,ui)+\"\";if(aa(t))return Mn?Mn.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function ai(t,e,n){var r=-1,i=xe,o=t.length,u=!0,a=[],c=a;if(n)u=!1,i=Ae;else if(o>=200){var s=e?null:Wi(t);if(s)return an(s);u=!1,i=Je,c=new Wn}else c=e?[]:a;t:for(;++r<o;){var l=t[r],f=e?e(l):l;if(l=n||0!==l?l:0,u&&f==f){for(var p=c.length;p--;)if(c[p]===f)continue t;e&&c.push(f),a.push(l)}else i(c,f,n)||(c!==a&&c.push(f),a.push(l))}return a}function ci(t,e){var n=-1,r=(e=yi(e,t)).length;if(!r)return!0;for(;++n<r;){var i=zo(e[n]);if(\"__proto__\"===i&&!Rt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Io(t,e);return null==o||delete o[zo(Go(e))]}function si(t,e,n,r){return Jr(t,e,n(wr(t,e)),r)}function li(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function fi(t,e){var n=t;return n instanceof qn&&(n=n.value()),Pe(e,function(t,e){return e.func.apply(e.thisArg,ke([t],e.args))},n)}function pi(t,e,n){var r=t.length;if(r<2)return r?ai(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var u=t[i],a=-1;++a<r;)a!=i&&(o[i]=sr(o[i]||u,t[a],e,n));return ai(_r(o,1),e,n)}function di(t,e,n){for(var i=-1,o=t.length,u=e.length,a={};++i<o;){var c=i<u?e[i]:r;n(a,t[i],c)}return a}function hi(t){return Wu(t)?t:[]}function _i(t){return\"function\"==typeof t?t:nc}function yi(t,e){return $u(t)?t:go(t,e)?[t]:To(va(t))}var vi=Kr;function gi(t,e,n){var i=t.length;return n=n===r?i:n,!e&&n>=i?t:ti(t,e,n)}var mi=ce||function(t){return le.clearTimeout(t)};function bi(t,e){if(e)return t.slice();var n=t.length,r=$t?$t(n):new t.constructor(n);return t.copy(r),r}function wi(t){var e=new t.constructor(t.byteLength);return new qt(e).set(new qt(t)),e}function Si(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function ji(t,e){if(t!==e){var n=t!==r,i=null===t,o=t==t,u=aa(t),a=e!==r,c=null===e,s=e==e,l=aa(e);if(!c&&!l&&!u&&t>e||u&&a&&s&&!c&&!l||i&&a&&s||!n&&s||!o)return 1;if(!i&&!u&&!l&&t<e||l&&n&&o&&!i&&!u||c&&n&&o||!a&&o||!s)return-1}return 0}function Oi(t,e,n,r){for(var i=-1,o=t.length,u=n.length,a=-1,c=e.length,s=yn(o-u,0),l=rt(c+s),f=!r;++a<c;)l[a]=e[a];for(;++i<u;)(f||i<o)&&(l[n[i]]=t[i]);for(;s--;)l[a++]=t[i++];return l}function Ii(t,e,n,r){for(var i=-1,o=t.length,u=-1,a=n.length,c=-1,s=e.length,l=yn(o-a,0),f=rt(l+s),p=!r;++i<l;)f[i]=t[i];for(var d=i;++c<s;)f[d+c]=e[c];for(;++u<a;)(p||i<o)&&(f[d+n[u]]=t[i++]);return f}function Ci(t,e){var n=-1,r=t.length;for(e||(e=rt(r));++n<r;)e[n]=t[n];return e}function Ei(t,e,n,i){var o=!n;n||(n={});for(var u=-1,a=e.length;++u<a;){var c=e[u],s=i?i(n[c],t[c],c,n,t):r;s===r&&(s=t[c]),o?rr(n,c,s):Qn(n,c,s)}return n}function xi(t,e){return function(n,r){var i=$u(n)?je:er,o=e?e():{};return i(n,t,oo(r,2),o)}}function Ai(t){return Kr(function(e,n){var i=-1,o=n.length,u=o>1?n[o-1]:r,a=o>2?n[2]:r;for(u=t.length>3&&\"function\"==typeof u?(o--,u):r,a&&vo(n[0],n[1],a)&&(u=o<3?r:u,o=1),e=Ot(e);++i<o;){var c=n[i];c&&t(e,c,i,u)}return e})}function Ni(t,e){return function(n,r){if(null==n)return n;if(!Hu(n))return t(n,r);for(var i=n.length,o=e?i:-1,u=Ot(n);(e?o--:++o<i)&&!1!==r(u[o],o,u););return n}}function ki(t){return function(e,n,r){for(var i=-1,o=Ot(e),u=r(e),a=u.length;a--;){var c=u[t?a:++i];if(!1===n(o[c],c,o))break}return e}}function Pi(t){return function(e){var n=nn(e=va(e))?ln(e):r,i=n?n[0]:e.charAt(0),o=n?gi(n,1).join(\"\"):e.slice(1);return i[t]()+o}}function Ri(t){return function(e){return Pe(Ja(qa(e).replace(Gt,\"\")),t,\"\")}}function Di(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Fn(t.prototype),r=t.apply(n,e);return Qu(r)?r:n}}function Ti(t){return function(e,n,i){var o=Ot(e);if(!Hu(e)){var u=oo(n,3);e=Na(e),n=function(t){return u(o[t],t,o)}}var a=t(e,n,i);return a>-1?o[u?e[a]:a]:r}}function zi(t){return Qi(function(e){var n=e.length,o=n,u=Ln.prototype.thru;for(t&&e.reverse();o--;){var a=e[o];if(\"function\"!=typeof a)throw new Et(i);if(u&&!c&&\"wrapper\"==ro(a))var c=new Ln([],!0)}for(o=c?o:n;++o<n;){var s=ro(a=e[o]),l=\"wrapper\"==s?no(a):r;c=l&&mo(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?c[ro(l[0])].apply(c,l[3]):1==a.length&&mo(a)?c[s]():c.thru(a)}return function(){var t=arguments,r=t[0];if(c&&1==t.length&&$u(r))return c.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Mi(t,e,n,i,o,u,a,s,l,f){var p=e&c,d=1&e,h=2&e,_=24&e,y=512&e,v=h?r:Di(t);return function c(){for(var g=arguments.length,m=rt(g),b=g;b--;)m[b]=arguments[b];if(_)var w=io(c),S=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(m,w);if(i&&(m=Oi(m,i,o,_)),u&&(m=Ii(m,u,a,_)),g-=S,_&&g<f){var j=un(m,w);return Vi(t,e,Mi,c.placeholder,n,m,j,s,l,f-g)}var O=d?n:this,I=h?O[t]:t;return g=m.length,s?m=function(t,e){for(var n=t.length,i=vn(e.length,n),o=Ci(t);i--;){var u=e[i];t[i]=yo(u,n)?o[u]:r}return t}(m,s):y&&g>1&&m.reverse(),p&&l<g&&(m.length=l),this&&this!==le&&this instanceof c&&(I=v||Di(I)),I.apply(O,m)}}function Ui(t,e){return function(n,r){return function(t,e,n,r){return gr(t,function(t,i,o){e(r,n(t),i,o)}),r}(n,t,e(r),{})}}function Fi(t,e){return function(n,i){var o;if(n===r&&i===r)return e;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ui(n),i=ui(i)):(n=oi(n),i=oi(i)),o=t(n,i)}return o}}function Bi(t){return Qi(function(e){return e=Ne(e,Ze(oo())),Kr(function(n){var r=this;return t(e,function(t){return Se(t,r,n)})})})}function Li(t,e){var n=(e=e===r?\" \":ui(e)).length;if(n<2)return n?Wr(e,t):e;var i=Wr(e,pe(t/sn(e)));return nn(e)?gi(ln(i),0,t).join(\"\"):i.slice(0,t)}function qi(t){return function(e,n,i){return i&&\"number\"!=typeof i&&vo(e,n,i)&&(n=i=r),e=pa(e),n===r?(n=e,e=0):n=pa(n),function(t,e,n,r){for(var i=-1,o=yn(pe((e-t)/(n||1)),0),u=rt(o);o--;)u[r?o:++i]=t,t+=n;return u}(e,n,i=i===r?e<n?1:-1:pa(i),t)}}function $i(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=_a(e),n=_a(n)),t(e,n)}}function Vi(t,e,n,i,o,u,c,s,l,f){var p=8&e;e|=p?a:64,4&(e&=~(p?64:a))||(e&=-4);var d=[t,e,o,p?u:r,p?c:r,p?r:u,p?r:c,s,l,f],h=n.apply(r,d);return mo(t)&&Eo(h,d),h.placeholder=i,No(h,t,e)}function Hi(t){var e=jt[t];return function(t,n){if(t=_a(t),(n=null==n?0:vn(da(n),292))&&$e(t)){var r=(va(t)+\"e\").split(\"e\");return+((r=(va(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var Wi=In&&1/an(new In([,-0]))[1]==s?function(t){return new In(t)}:ac;function Ki(t){return function(e){var n=fo(e);return n==w?rn(e):n==C?cn(e):function(t,e){return Ne(e,function(e){return[e,t[e]]})}(e,t(e))}}function Zi(t,e,n,o,s,l,f,p){var d=2&e;if(!d&&\"function\"!=typeof t)throw new Et(i);var h=o?o.length:0;if(h||(e&=-97,o=s=r),f=f===r?f:yn(da(f),0),p=p===r?p:da(p),h-=s?s.length:0,64&e){var _=o,y=s;o=s=r}var v=d?r:no(t),g=[t,e,n,o,s,_,y,l,f,p];if(v&&function(t,e){var n=t[1],r=e[1],i=n|r,o=i<131,a=r==c&&8==n||r==c&&256==n&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!o&&!a)return t;1&r&&(t[2]=e[2],i|=1&n?0:4);var s=e[3];if(s){var l=t[3];t[3]=l?Oi(l,s,e[4]):s,t[4]=l?un(t[3],u):e[4]}(s=e[5])&&(l=t[5],t[5]=l?Ii(l,s,e[6]):s,t[6]=l?un(t[5],u):e[6]),(s=e[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?e[8]:vn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i}(g,v),t=g[0],e=g[1],n=g[2],o=g[3],s=g[4],!(p=g[9]=g[9]===r?d?0:t.length:yn(g[9]-h,0))&&24&e&&(e&=-25),e&&1!=e)m=8==e||16==e?function(t,e,n){var i=Di(t);return function o(){for(var u=arguments.length,a=rt(u),c=u,s=io(o);c--;)a[c]=arguments[c];var l=u<3&&a[0]!==s&&a[u-1]!==s?[]:un(a,s);return(u-=l.length)<n?Vi(t,e,Mi,o.placeholder,r,a,l,r,r,n-u):Se(this&&this!==le&&this instanceof o?i:t,this,a)}}(t,e,p):e!=a&&33!=e||s.length?Mi.apply(r,g):function(t,e,n,r){var i=1&e,o=Di(t);return function e(){for(var u=-1,a=arguments.length,c=-1,s=r.length,l=rt(s+a),f=this&&this!==le&&this instanceof e?o:t;++c<s;)l[c]=r[c];for(;a--;)l[c++]=arguments[++u];return Se(f,i?n:this,l)}}(t,e,n,o);else var m=function(t,e,n){var r=1&e,i=Di(t);return function e(){return(this&&this!==le&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return No((v?Yr:Eo)(m,g),t,e)}function Gi(t,e,n,i){return t===r||Fu(t,Nt[n])&&!Rt.call(i,n)?e:t}function Ji(t,e,n,i,o,u){return Qu(t)&&Qu(e)&&(u.set(e,t),Fr(t,e,r,Ji,u),u.delete(e)),t}function Yi(t){return ra(t)?r:t}function Xi(t,e,n,i,o,u){var a=1&n,c=t.length,s=e.length;if(c!=s&&!(a&&s>c))return!1;var l=u.get(t),f=u.get(e);if(l&&f)return l==e&&f==t;var p=-1,d=!0,h=2&n?new Wn:r;for(u.set(t,e),u.set(e,t);++p<c;){var _=t[p],y=e[p];if(i)var v=a?i(y,_,p,e,t,u):i(_,y,p,t,e,u);if(v!==r){if(v)continue;d=!1;break}if(h){if(!De(e,function(t,e){if(!Je(h,e)&&(_===t||o(_,t,n,i,u)))return h.push(e)})){d=!1;break}}else if(_!==y&&!o(_,y,n,i,u)){d=!1;break}}return u.delete(t),u.delete(e),d}function Qi(t){return Ao(Oo(t,r,Vo),t+\"\")}function to(t){return Sr(t,Na,so)}function eo(t){return Sr(t,ka,lo)}var no=xn?function(t){return xn.get(t)}:ac;function ro(t){for(var e=t.name+\"\",n=An[e],r=Rt.call(An,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function io(t){return(Rt.call(Un,\"placeholder\")?Un:t).placeholder}function oo(){var t=Un.iteratee||rc;return t=t===rc?Rr:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function ao(t){for(var e=Na(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,So(i)]}return e}function co(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return Pr(n)?n:r}var so=_e?function(t){return null==t?[]:(t=Ot(t),Ee(_e(t),function(e){return Wt.call(t,e)}))}:hc,lo=_e?function(t){for(var e=[];t;)ke(e,so(t)),t=Vt(t);return e}:hc,fo=jr;function po(t,e,n){for(var r=-1,i=(e=yi(e,t)).length,o=!1;++r<i;){var u=zo(e[r]);if(!(o=null!=t&&n(t,u)))break;t=t[u]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Xu(i)&&yo(u,i)&&($u(t)||qu(t))}function ho(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Fn(Vt(t))}function _o(t){return $u(t)||qu(t)||!!(Zt&&t&&t[Zt])}function yo(t,e){var n=typeof t;return!!(e=e??l)&&(\"number\"==n||\"symbol\"!=n&&yt.test(t))&&t>-1&&t%1==0&&t<e}function vo(t,e,n){if(!Qu(n))return!1;var r=typeof e;return!!(\"number\"==r?Hu(n)&&yo(e,n.length):\"string\"==r&&e in n)&&Fu(n[e],t)}function go(t,e){if($u(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!aa(t))||X.test(t)||!Y.test(t)||null!=e&&t in Ot(e)}function mo(t){var e=ro(t),n=Un[e];if(\"function\"!=typeof n||!(e in qn.prototype))return!1;if(t===n)return!0;var r=no(n);return!!r&&t===r[0]}(Sn&&fo(new Sn(new ArrayBuffer(1)))!=k||jn&&fo(new jn)!=w||On&&fo(On.resolve())!=O||In&&fo(new In)!=C||Cn&&fo(new Cn)!=A)&&(fo=function(t){var e=jr(t),n=e==j?t.constructor:r,i=n?Mo(n):\"\";if(i)switch(i){case Nn:return k;case kn:return w;case Pn:return O;case Rn:return C;case Dn:return A}return e});var bo=kt?Ju:_c;function wo(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||Nt)}function So(t){return t==t&&!Qu(t)}function jo(t,e){return function(n){return null!=n&&n[t]===e&&(e!==r||t in Ot(n))}}function Oo(t,e,n){return e=yn(e===r?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=yn(r.length-e,0),u=rt(o);++i<o;)u[i]=r[e+i];i=-1;for(var a=rt(e+1);++i<e;)a[i]=r[i];return a[e]=n(u),Se(t,this,a)}}function Io(t,e){return e.length<2?t:wr(t,ti(e,0,-1))}function Co(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var Eo=ko(Yr),xo=fe||function(t,e){return le.setTimeout(t,e)},Ao=ko(Xr);function No(t,e,n){var r=e+\"\";return Ao(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return Oe(d,function(n){var r=\"_.\"+n[0];e&n[1]&&!xe(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(ot);return e?e[1].split(ut):[]}(r),n)))}function ko(t){var e=0,n=0;return function(){var i=gn(),o=16-(i-n);if(n=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(r,arguments)}}function Po(t,e){var n=-1,i=t.length,o=i-1;for(e=e===r?i:e;++n<e;){var u=Hr(n,o),a=t[u];t[u]=t[n],t[n]=a}return t.length=e,t}var Ro,Do,To=(Ro=Ru(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(Q,function(t,n,r,i){e.push(r?i.replace(st,\"$1\"):n||t)}),e},function(t){return 500===Do.size&&Do.clear(),t}),Do=Ro.cache,Ro);function zo(t){if(\"string\"==typeof t||aa(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Mo(t){if(null!=t){try{return Pt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Uo(t){if(t instanceof qn)return t.clone();var e=new Ln(t.__wrapped__,t.__chain__);return e.__actions__=Ci(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Fo=Kr(function(t,e){return Wu(t)?sr(t,_r(e,1,Wu,!0)):[]}),Bo=Kr(function(t,e){var n=Go(e);return Wu(n)&&(n=r),Wu(t)?sr(t,_r(e,1,Wu,!0),oo(n,2)):[]}),Lo=Kr(function(t,e){var n=Go(e);return Wu(n)&&(n=r),Wu(t)?sr(t,_r(e,1,Wu,!0),r,n):[]});function qo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:da(n);return i<0&&(i=yn(r+i,0)),Me(t,oo(e,3),i)}function $o(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return n!==r&&(o=da(n),o=n<0?yn(i+o,0):vn(o,i-1)),Me(t,oo(e,3),o,!0)}function Vo(t){return null!=t&&t.length?_r(t,1):[]}function Ho(t){return t&&t.length?t[0]:r}var Wo=Kr(function(t){var e=Ne(t,hi);return e.length&&e[0]===t[0]?Er(e):[]}),Ko=Kr(function(t){var e=Go(t),n=Ne(t,hi);return e===Go(n)?e=r:n.pop(),n.length&&n[0]===t[0]?Er(n,oo(e,2)):[]}),Zo=Kr(function(t){var e=Go(t),n=Ne(t,hi);return(e=\"function\"==typeof e?e:r)&&n.pop(),n.length&&n[0]===t[0]?Er(n,r,e):[]});function Go(t){var e=null==t?0:t.length;return e?t[e-1]:r}var Jo=Kr(Yo);function Yo(t,e){return t&&t.length&&e&&e.length?$r(t,e):t}var Xo=Qi(function(t,e){var n=null==t?0:t.length,r=ir(t,e);return Vr(t,Ne(e,function(t){return yo(t,n)?+t:t}).sort(ji)),r});function Qo(t){return null==t?t:wn.call(t)}var tu=Kr(function(t){return ai(_r(t,1,Wu,!0))}),eu=Kr(function(t){var e=Go(t);return Wu(e)&&(e=r),ai(_r(t,1,Wu,!0),oo(e,2))}),nu=Kr(function(t){var e=Go(t);return e=\"function\"==typeof e?e:r,ai(_r(t,1,Wu,!0),r,e)});function ru(t){if(!t||!t.length)return[];var e=0;return t=Ee(t,function(t){if(Wu(t))return e=yn(t.length,e),!0}),We(e,function(e){return Ne(t,qe(e))})}function iu(t,e){if(!t||!t.length)return[];var n=ru(t);return null==e?n:Ne(n,function(t){return Se(e,r,t)})}var ou=Kr(function(t,e){return Wu(t)?sr(t,e):[]}),uu=Kr(function(t){return pi(Ee(t,Wu))}),au=Kr(function(t){var e=Go(t);return Wu(e)&&(e=r),pi(Ee(t,Wu),oo(e,2))}),cu=Kr(function(t){var e=Go(t);return e=\"function\"==typeof e?e:r,pi(Ee(t,Wu),r,e)}),su=Kr(ru),lu=Kr(function(t){var e=t.length,n=e>1?t[e-1]:r;return n=\"function\"==typeof n?(t.pop(),n):r,iu(t,n)});function fu(t){var e=Un(t);return e.__chain__=!0,e}function pu(t,e){return e(t)}var du=Qi(function(t){var e=t.length,n=e?t[0]:0,i=this.__wrapped__,o=function(e){return ir(e,t)};return!(e>1||this.__actions__.length)&&i instanceof qn&&yo(n)?((i=i.slice(n,+n+(e?1:0))).__actions__.push({func:pu,args:[o],thisArg:r}),new Ln(i,this.__chain__).thru(function(t){return e&&!t.length&&t.push(r),t})):this.thru(o)}),hu=xi(function(t,e,n){Rt.call(t,n)?++t[n]:rr(t,n,1)}),_u=Ti(qo),yu=Ti($o);function vu(t,e){return($u(t)?Oe:lr)(t,oo(e,3))}function gu(t,e){return($u(t)?Ie:fr)(t,oo(e,3))}var mu=xi(function(t,e,n){Rt.call(t,n)?t[n].push(e):rr(t,n,[e])}),bu=Kr(function(t,e,n){var r=-1,i=\"function\"==typeof e,o=Hu(t)?rt(t.length):[];return lr(t,function(t){o[++r]=i?Se(e,t,n):xr(t,e,n)}),o}),wu=xi(function(t,e,n){rr(t,n,e)});function Su(t,e){return($u(t)?Ne:zr)(t,oo(e,3))}var ju=xi(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),Ou=Kr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&vo(t,e[0],e[1])?e=[]:n>2&&vo(e[0],e[1],e[2])&&(e=[e[0]]),Lr(t,_r(e,1),[])}),Iu=se||function(){return le.Date.now()};function Cu(t,e,n){return e=n?r:e,e=t&&null==e?t.length:e,Zi(t,c,r,r,r,r,e)}function Eu(t,e){var n;if(\"function\"!=typeof e)throw new Et(i);return t=da(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=r),n}}var xu=Kr(function(t,e,n){var r=1;if(n.length){var i=un(n,io(xu));r|=a}return Zi(t,r,e,n,i)}),Au=Kr(function(t,e,n){var r=3;if(n.length){var i=un(n,io(Au));r|=a}return Zi(e,r,t,n,i)});function Nu(t,e,n){var o,u,a,c,s,l,f=0,p=!1,d=!1,h=!0;if(\"function\"!=typeof t)throw new Et(i);function _(e){var n=o,i=u;return o=u=r,f=e,c=t.apply(i,n)}function y(t){var n=t-l;return l===r||n>=e||n<0||d&&t-f>=a}function v(){var t=Iu();if(y(t))return g(t);s=xo(v,function(t){var n=e-(t-l);return d?vn(n,a-(t-f)):n}(t))}function g(t){return s=r,h&&o?_(t):(o=u=r,c)}function m(){var t=Iu(),n=y(t);if(o=arguments,u=this,l=t,n){if(s===r)return function(t){return f=t,s=xo(v,e),p?_(t):c}(l);if(d)return mi(s),s=xo(v,e),_(l)}return s===r&&(s=xo(v,e)),c}return e=_a(e)||0,Qu(n)&&(p=!!n.leading,a=(d=\"maxWait\"in n)?yn(_a(n.maxWait)||0,e):a,h=\"trailing\"in n?!!n.trailing:h),m.cancel=function(){s!==r&&mi(s),f=0,o=l=u=s=r},m.flush=function(){return s===r?c:g(Iu())},m}var ku=Kr(function(t,e){return cr(t,1,e)}),Pu=Kr(function(t,e,n){return cr(t,_a(e)||0,n)});function Ru(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new Et(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return n.cache=o.set(i,u)||o,u};return n.cache=new(Ru.Cache||Hn),n}function Du(t){if(\"function\"!=typeof t)throw new Et(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Ru.Cache=Hn;var Tu=vi(function(t,e){var n=(e=1==e.length&&$u(e[0])?Ne(e[0],Ze(oo())):Ne(_r(e,1),Ze(oo()))).length;return Kr(function(r){for(var i=-1,o=vn(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return Se(t,this,r)})}),zu=Kr(function(t,e){var n=un(e,io(zu));return Zi(t,a,r,e,n)}),Mu=Kr(function(t,e){var n=un(e,io(Mu));return Zi(t,64,r,e,n)}),Uu=Qi(function(t,e){return Zi(t,256,r,r,r,e)});function Fu(t,e){return t===e||t!=t&&e!=e}var Bu=$i(Or),Lu=$i(function(t,e){return t>=e}),qu=Ar(function(){return arguments}())?Ar:function(t){return ta(t)&&Rt.call(t,\"callee\")&&!Wt.call(t,\"callee\")},$u=rt.isArray,Vu=ye?Ze(ye):function(t){return ta(t)&&jr(t)==N};function Hu(t){return null!=t&&Xu(t.length)&&!Ju(t)}function Wu(t){return ta(t)&&Hu(t)}var Ku=Te||_c,Zu=ve?Ze(ve):function(t){return ta(t)&&jr(t)==v};function Gu(t){if(!ta(t))return!1;var e=jr(t);return e==g||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ra(t)}function Ju(t){if(!Qu(t))return!1;var e=jr(t);return e==m||e==b||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Yu(t){return\"number\"==typeof t&&t==da(t)}function Xu(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=l}function Qu(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function ta(t){return null!=t&&\"object\"==typeof t}var ea=ge?Ze(ge):function(t){return ta(t)&&fo(t)==w};function na(t){return\"number\"==typeof t||ta(t)&&jr(t)==S}function ra(t){if(!ta(t)||jr(t)!=j)return!1;var e=Vt(t);if(null===e)return!0;var n=Rt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&Pt.call(n)==Mt}var ia=me?Ze(me):function(t){return ta(t)&&jr(t)==I},oa=be?Ze(be):function(t){return ta(t)&&fo(t)==C};function ua(t){return\"string\"==typeof t||!$u(t)&&ta(t)&&jr(t)==E}function aa(t){return\"symbol\"==typeof t||ta(t)&&jr(t)==x}var ca=we?Ze(we):function(t){return ta(t)&&Xu(t.length)&&!!re[jr(t)]},sa=$i(Tr),la=$i(function(t,e){return t<=e});function fa(t){if(!t)return[];if(Hu(t))return ua(t)?ln(t):Ci(t);if(Yt&&t[Yt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Yt]());var e=fo(t);return(e==w?rn:e==C?an:Fa)(t)}function pa(t){return t?(t=_a(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function da(t){var e=pa(t),n=e%1;return e==e?n?e-n:e:0}function ha(t){return t?or(da(t),0,p):0}function _a(t){if(\"number\"==typeof t)return t;if(aa(t))return f;if(Qu(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=Qu(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Ke(t);var n=dt.test(t);return n||_t.test(t)?ae(t.slice(2),n?2:8):pt.test(t)?f:+t}function ya(t){return Ei(t,ka(t))}function va(t){return null==t?\"\":ui(t)}var ga=Ai(function(t,e){if(wo(e)||Hu(e))Ei(e,Na(e),t);else for(var n in e)Rt.call(e,n)&&Qn(t,n,e[n])}),ma=Ai(function(t,e){Ei(e,ka(e),t)}),ba=Ai(function(t,e,n,r){Ei(e,ka(e),t,r)}),wa=Ai(function(t,e,n,r){Ei(e,Na(e),t,r)}),Sa=Qi(ir),ja=Kr(function(t,e){t=Ot(t);var n=-1,i=e.length,o=i>2?e[2]:r;for(o&&vo(e[0],e[1],o)&&(i=1);++n<i;)for(var u=e[n],a=ka(u),c=-1,s=a.length;++c<s;){var l=a[c],f=t[l];(f===r||Fu(f,Nt[l])&&!Rt.call(t,l))&&(t[l]=u[l])}return t}),Oa=Kr(function(t){return t.push(r,Ji),Se(Ra,r,t)});function Ia(t,e,n){var i=null==t?r:wr(t,e);return i===r?n:i}function Ca(t,e){return null!=t&&po(t,e,Cr)}var Ea=Ui(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=zt.call(e)),t[e]=n},Qa(nc)),xa=Ui(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=zt.call(e)),Rt.call(t,e)?t[e].push(n):t[e]=[n]},oo),Aa=Kr(xr);function Na(t){return Hu(t)?Zn(t):Dr(t)}function ka(t){return Hu(t)?Zn(t,!0):function(t){if(!Qu(t))return function(t){var e=[];if(null!=t)for(var n in Ot(t))e.push(n);return e}(t);var e=wo(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&Rt.call(t,r))&&n.push(r);return n}(t)}var Pa=Ai(function(t,e,n){Fr(t,e,n)}),Ra=Ai(function(t,e,n,r){Fr(t,e,n,r)}),Da=Qi(function(t,e){var n={};if(null==t)return n;var r=!1;e=Ne(e,function(e){return e=yi(e,t),r||(r=e.length>1),e}),Ei(t,eo(t),n),r&&(n=ur(n,7,Yi));for(var i=e.length;i--;)ci(n,e[i]);return n}),Ta=Qi(function(t,e){return null==t?{}:function(t,e){return qr(t,e,function(e,n){return Ca(t,n)})}(t,e)});function za(t,e){if(null==t)return{};var n=Ne(eo(t),function(t){return[t]});return e=oo(e),qr(t,n,function(t,n){return e(t,n[0])})}var Ma=Ki(Na),Ua=Ki(ka);function Fa(t){return null==t?[]:Ge(t,Na(t))}var Ba=Ri(function(t,e,n){return e=e.toLowerCase(),t+(n?La(e):e)});function La(t){return Ga(va(t).toLowerCase())}function qa(t){return(t=va(t))&&t.replace(vt,Qe).replace(Jt,\"\")}var $a=Ri(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Va=Ri(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),Ha=Pi(\"toLowerCase\"),Wa=Ri(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Ka=Ri(function(t,e,n){return t+(n?\" \":\"\")+Ga(e)}),Za=Ri(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Ga=Pi(\"toUpperCase\");function Ja(t,e,n){return t=va(t),(e=n?r:e)===r?function(t){return te.test(t)}(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(e)||[]}var Ya=Kr(function(t,e){try{return Se(t,r,e)}catch(t){return Gu(t)?t:new wt(t)}}),Xa=Qi(function(t,e){return Oe(e,function(e){e=zo(e),rr(t,e,xu(t[e],t))}),t});function Qa(t){return function(){return t}}var tc=zi(),ec=zi(!0);function nc(t){return t}function rc(t){return Rr(\"function\"==typeof t?t:ur(t,1))}var ic=Kr(function(t,e){return function(n){return xr(n,t,e)}}),oc=Kr(function(t,e){return function(n){return xr(t,n,e)}});function uc(t,e,n){var r=Na(e),i=br(e,r);null!=n||Qu(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=br(e,Na(e)));var o=!(Qu(n)&&\"chain\"in n&&!n.chain),u=Ju(t);return Oe(i,function(n){var r=e[n];t[n]=r,u&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Ci(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,ke([this.value()],arguments))})}),t}function ac(){}var cc=Bi(Ne),sc=Bi(Ce),lc=Bi(De);function fc(t){return go(t)?qe(zo(t)):function(t){return function(e){return wr(e,t)}}(t)}var pc=qi(),dc=qi(!0);function hc(){return[]}function _c(){return!1}var yc,vc=Fi(function(t,e){return t+e},0),gc=Hi(\"ceil\"),mc=Fi(function(t,e){return t/e},1),bc=Hi(\"floor\"),wc=Fi(function(t,e){return t*e},1),Sc=Hi(\"round\"),jc=Fi(function(t,e){return t-e},0);return Un.after=function(t,e){if(\"function\"!=typeof e)throw new Et(i);return t=da(t),function(){if(--t<1)return e.apply(this,arguments)}},Un.ary=Cu,Un.assign=ga,Un.assignIn=ma,Un.assignInWith=ba,Un.assignWith=wa,Un.at=Sa,Un.before=Eu,Un.bind=xu,Un.bindAll=Xa,Un.bindKey=Au,Un.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return $u(t)?t:[t]},Un.chain=fu,Un.chunk=function(t,e,n){e=(n?vo(t,e,n):e===r)?1:yn(da(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,u=0,a=rt(pe(i/e));o<i;)a[u++]=ti(t,o,o+=e);return a},Un.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i},Un.concat=function(){var t=arguments.length;if(!t)return[];for(var e=rt(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return ke($u(n)?Ci(n):[n],_r(e,1))},Un.cond=function(t){var e=null==t?0:t.length,n=oo();return t=e?Ne(t,function(t){if(\"function\"!=typeof t[1])throw new Et(i);return[n(t[0]),t[1]]}):[],Kr(function(n){for(var r=-1;++r<e;){var i=t[r];if(Se(i[0],this,n))return Se(i[1],this,n)}})},Un.conforms=function(t){return function(t){var e=Na(t);return function(n){return ar(n,t,e)}}(ur(t,1))},Un.constant=Qa,Un.countBy=hu,Un.create=function(t,e){var n=Fn(t);return null==e?n:nr(n,e)},Un.curry=function t(e,n,i){var o=Zi(e,8,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Un.curryRight=function t(e,n,i){var o=Zi(e,16,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Un.debounce=Nu,Un.defaults=ja,Un.defaultsDeep=Oa,Un.defer=ku,Un.delay=Pu,Un.difference=Fo,Un.differenceBy=Bo,Un.differenceWith=Lo,Un.drop=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=n||e===r?1:da(e))<0?0:e,i):[]},Un.dropRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,0,(e=i-(e=n||e===r?1:da(e)))<0?0:e):[]},Un.dropRightWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!0,!0):[]},Un.dropWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!0):[]},Un.fill=function(t,e,n,i){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&vo(t,e,n)&&(n=0,i=o),function(t,e,n,i){var o=t.length;for((n=da(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:da(i))<0&&(i+=o),i=n>i?0:ha(i);n<i;)t[n++]=e;return t}(t,e,n,i)):[]},Un.filter=function(t,e){return($u(t)?Ee:hr)(t,oo(e,3))},Un.flatMap=function(t,e){return _r(Su(t,e),1)},Un.flatMapDeep=function(t,e){return _r(Su(t,e),s)},Un.flatMapDepth=function(t,e,n){return n=n===r?1:da(n),_r(Su(t,e),n)},Un.flatten=Vo,Un.flattenDeep=function(t){return null!=t&&t.length?_r(t,s):[]},Un.flattenDepth=function(t,e){return null!=t&&t.length?_r(t,e=e===r?1:da(e)):[]},Un.flip=function(t){return Zi(t,512)},Un.flow=tc,Un.flowRight=ec,Un.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];rr(r,i[0],i[1])}return r},Un.functions=function(t){return null==t?[]:br(t,Na(t))},Un.functionsIn=function(t){return null==t?[]:br(t,ka(t))},Un.groupBy=mu,Un.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Un.intersection=Wo,Un.intersectionBy=Ko,Un.intersectionWith=Zo,Un.invert=Ea,Un.invertBy=xa,Un.invokeMap=bu,Un.iteratee=rc,Un.keyBy=wu,Un.keys=Na,Un.keysIn=ka,Un.map=Su,Un.mapKeys=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,e(t,r,i),t)}),n},Un.mapValues=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,r,e(t,r,i))}),n},Un.matches=function(t){return Mr(ur(t,1))},Un.matchesProperty=function(t,e){return Ur(t,ur(e,1))},Un.memoize=Ru,Un.merge=Pa,Un.mergeWith=Ra,Un.method=ic,Un.methodOf=oc,Un.mixin=uc,Un.negate=Du,Un.nthArg=function(t){return t=da(t),Kr(function(e){return Br(e,t)})},Un.omit=Da,Un.omitBy=function(t,e){return za(t,Du(oo(e)))},Un.once=function(t){return Eu(2,t)},Un.orderBy=function(t,e,n,i){return null==t?[]:($u(e)||(e=null==e?[]:[e]),$u(n=i?r:n)||(n=null==n?[]:[n]),Lr(t,e,n))},Un.over=cc,Un.overArgs=Tu,Un.overEvery=sc,Un.overSome=lc,Un.partial=zu,Un.partialRight=Mu,Un.partition=ju,Un.pick=Ta,Un.pickBy=za,Un.property=fc,Un.propertyOf=function(t){return function(e){return null==t?r:wr(t,e)}},Un.pull=Jo,Un.pullAll=Yo,Un.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?$r(t,e,oo(n,2)):t},Un.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?$r(t,e,r,n):t},Un.pullAt=Xo,Un.range=pc,Un.rangeRight=dc,Un.rearg=Uu,Un.reject=function(t,e){return($u(t)?Ee:hr)(t,Du(oo(e,3)))},Un.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=oo(e,3);++r<o;){var u=t[r];e(u,r,t)&&(n.push(u),i.push(r))}return Vr(t,i),n},Un.rest=function(t,e){if(\"function\"!=typeof t)throw new Et(i);return Kr(t,e=e===r?e:da(e))},Un.reverse=Qo,Un.sampleSize=function(t,e,n){return e=(n?vo(t,e,n):e===r)?1:da(e),($u(t)?Jn:Gr)(t,e)},Un.set=function(t,e,n){return null==t?t:Jr(t,e,n)},Un.setWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:Jr(t,e,n,i)},Un.shuffle=function(t){return($u(t)?Yn:Qr)(t)},Un.slice=function(t,e,n){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&vo(t,e,n)?(e=0,n=i):(e=null==e?0:da(e),n=n===r?i:da(n)),ti(t,e,n)):[]},Un.sortBy=Ou,Un.sortedUniq=function(t){return t&&t.length?ii(t):[]},Un.sortedUniqBy=function(t,e){return t&&t.length?ii(t,oo(e,2)):[]},Un.split=function(t,e,n){return n&&\"number\"!=typeof n&&vo(t,e,n)&&(e=n=r),(n=n===r?p:n>>>0)?(t=va(t))&&(\"string\"==typeof e||null!=e&&!ia(e))&&!(e=ui(e))&&nn(t)?gi(ln(t),0,n):t.split(e,n):[]},Un.spread=function(t,e){if(\"function\"!=typeof t)throw new Et(i);return e=null==e?0:yn(da(e),0),Kr(function(n){var r=n[e],i=gi(n,0,e);return r&&ke(i,r),Se(t,this,i)})},Un.tail=function(t){var e=null==t?0:t.length;return e?ti(t,1,e):[]},Un.take=function(t,e,n){return t&&t.length?ti(t,0,(e=n||e===r?1:da(e))<0?0:e):[]},Un.takeRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=i-(e=n||e===r?1:da(e)))<0?0:e,i):[]},Un.takeRightWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!1,!0):[]},Un.takeWhile=function(t,e){return t&&t.length?li(t,oo(e,3)):[]},Un.tap=function(t,e){return e(t),t},Un.throttle=function(t,e,n){var r=!0,o=!0;if(\"function\"!=typeof t)throw new Et(i);return Qu(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),Nu(t,e,{leading:r,maxWait:e,trailing:o})},Un.thru=pu,Un.toArray=fa,Un.toPairs=Ma,Un.toPairsIn=Ua,Un.toPath=function(t){return $u(t)?Ne(t,zo):aa(t)?[t]:Ci(To(va(t)))},Un.toPlainObject=ya,Un.transform=function(t,e,n){var r=$u(t),i=r||Ku(t)||ca(t);if(e=oo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Qu(t)&&Ju(o)?Fn(Vt(t)):{}}return(i?Oe:gr)(t,function(t,r,i){return e(n,t,r,i)}),n},Un.unary=function(t){return Cu(t,1)},Un.union=tu,Un.unionBy=eu,Un.unionWith=nu,Un.uniq=function(t){return t&&t.length?ai(t):[]},Un.uniqBy=function(t,e){return t&&t.length?ai(t,oo(e,2)):[]},Un.uniqWith=function(t,e){return e=\"function\"==typeof e?e:r,t&&t.length?ai(t,r,e):[]},Un.unset=function(t,e){return null==t||ci(t,e)},Un.unzip=ru,Un.unzipWith=iu,Un.update=function(t,e,n){return null==t?t:si(t,e,_i(n))},Un.updateWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:si(t,e,_i(n),i)},Un.values=Fa,Un.valuesIn=function(t){return null==t?[]:Ge(t,ka(t))},Un.without=ou,Un.words=Ja,Un.wrap=function(t,e){return zu(_i(e),t)},Un.xor=uu,Un.xorBy=au,Un.xorWith=cu,Un.zip=su,Un.zipObject=function(t,e){return di(t||[],e||[],Qn)},Un.zipObjectDeep=function(t,e){return di(t||[],e||[],Jr)},Un.zipWith=lu,Un.entries=Ma,Un.entriesIn=Ua,Un.extend=ma,Un.extendWith=ba,uc(Un,Un),Un.add=vc,Un.attempt=Ya,Un.camelCase=Ba,Un.capitalize=La,Un.ceil=gc,Un.clamp=function(t,e,n){return n===r&&(n=e,e=r),n!==r&&(n=(n=_a(n))==n?n:0),e!==r&&(e=(e=_a(e))==e?e:0),or(_a(t),e,n)},Un.clone=function(t){return ur(t,4)},Un.cloneDeep=function(t){return ur(t,5)},Un.cloneDeepWith=function(t,e){return ur(t,5,e=\"function\"==typeof e?e:r)},Un.cloneWith=function(t,e){return ur(t,4,e=\"function\"==typeof e?e:r)},Un.conformsTo=function(t,e){return null==e||ar(t,e,Na(e))},Un.deburr=qa,Un.defaultTo=function(t,e){return null==t||t!=t?e:t},Un.divide=mc,Un.endsWith=function(t,e,n){t=va(t),e=ui(e);var i=t.length,o=n=n===r?i:or(da(n),0,i);return(n-=e.length)>=0&&t.slice(n,o)==e},Un.eq=Fu,Un.escape=function(t){return(t=va(t))&&K.test(t)?t.replace(H,tn):t},Un.escapeRegExp=function(t){return(t=va(t))&&et.test(t)?t.replace(tt,\"\\\\$&\"):t},Un.every=function(t,e,n){var i=$u(t)?Ce:pr;return n&&vo(t,e,n)&&(e=r),i(t,oo(e,3))},Un.find=_u,Un.findIndex=qo,Un.findKey=function(t,e){return ze(t,oo(e,3),gr)},Un.findLast=yu,Un.findLastIndex=$o,Un.findLastKey=function(t,e){return ze(t,oo(e,3),mr)},Un.floor=bc,Un.forEach=vu,Un.forEachRight=gu,Un.forIn=function(t,e){return null==t?t:yr(t,oo(e,3),ka)},Un.forInRight=function(t,e){return null==t?t:vr(t,oo(e,3),ka)},Un.forOwn=function(t,e){return t&&gr(t,oo(e,3))},Un.forOwnRight=function(t,e){return t&&mr(t,oo(e,3))},Un.get=Ia,Un.gt=Bu,Un.gte=Lu,Un.has=function(t,e){return null!=t&&po(t,e,Ir)},Un.hasIn=Ca,Un.head=Ho,Un.identity=nc,Un.includes=function(t,e,n,r){t=Hu(t)?t:Fa(t),n=n&&!r?da(n):0;var i=t.length;return n<0&&(n=yn(i+n,0)),ua(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&Ue(t,e,n)>-1},Un.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:da(n);return i<0&&(i=yn(r+i,0)),Ue(t,e,i)},Un.inRange=function(t,e,n){return e=pa(e),n===r?(n=e,e=0):n=pa(n),function(t,e,n){return t>=vn(e,n)&&t<yn(e,n)}(t=_a(t),e,n)},Un.invoke=Aa,Un.isArguments=qu,Un.isArray=$u,Un.isArrayBuffer=Vu,Un.isArrayLike=Hu,Un.isArrayLikeObject=Wu,Un.isBoolean=function(t){return!0===t||!1===t||ta(t)&&jr(t)==y},Un.isBuffer=Ku,Un.isDate=Zu,Un.isElement=function(t){return ta(t)&&1===t.nodeType&&!ra(t)},Un.isEmpty=function(t){if(null==t)return!0;if(Hu(t)&&($u(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Ku(t)||ca(t)||qu(t)))return!t.length;var e=fo(t);if(e==w||e==C)return!t.size;if(wo(t))return!Dr(t).length;for(var n in t)if(Rt.call(t,n))return!1;return!0},Un.isEqual=function(t,e){return Nr(t,e)},Un.isEqualWith=function(t,e,n){var i=(n=\"function\"==typeof n?n:r)?n(t,e):r;return i===r?Nr(t,e,r,n):!!i},Un.isError=Gu,Un.isFinite=function(t){return\"number\"==typeof t&&$e(t)},Un.isFunction=Ju,Un.isInteger=Yu,Un.isLength=Xu,Un.isMap=ea,Un.isMatch=function(t,e){return t===e||kr(t,e,ao(e))},Un.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:r,kr(t,e,ao(e),n)},Un.isNaN=function(t){return na(t)&&t!=+t},Un.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Pr(t)},Un.isNil=function(t){return null==t},Un.isNull=function(t){return null===t},Un.isNumber=na,Un.isObject=Qu,Un.isObjectLike=ta,Un.isPlainObject=ra,Un.isRegExp=ia,Un.isSafeInteger=function(t){return Yu(t)&&t>=-9007199254740991&&t<=l},Un.isSet=oa,Un.isString=ua,Un.isSymbol=aa,Un.isTypedArray=ca,Un.isUndefined=function(t){return t===r},Un.isWeakMap=function(t){return ta(t)&&fo(t)==A},Un.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==jr(t)},Un.join=function(t,e){return null==t?\"\":hn.call(t,e)},Un.kebabCase=$a,Un.last=Go,Un.lastIndexOf=function(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=da(n))<0?yn(i+o,0):vn(o,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Me(t,Be,o,!0)},Un.lowerCase=Va,Un.lowerFirst=Ha,Un.lt=sa,Un.lte=la,Un.max=function(t){return t&&t.length?dr(t,nc,Or):r},Un.maxBy=function(t,e){return t&&t.length?dr(t,oo(e,2),Or):r},Un.mean=function(t){return Le(t,nc)},Un.meanBy=function(t,e){return Le(t,oo(e,2))},Un.min=function(t){return t&&t.length?dr(t,nc,Tr):r},Un.minBy=function(t,e){return t&&t.length?dr(t,oo(e,2),Tr):r},Un.stubArray=hc,Un.stubFalse=_c,Un.stubObject=function(){return{}},Un.stubString=function(){return\"\"},Un.stubTrue=function(){return!0},Un.multiply=wc,Un.nth=function(t,e){return t&&t.length?Br(t,da(e)):r},Un.noConflict=function(){return le._===this&&(le._=Ut),this},Un.noop=ac,Un.now=Iu,Un.pad=function(t,e,n){t=va(t);var r=(e=da(e))?sn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Li(he(i),n)+t+Li(pe(i),n)},Un.padEnd=function(t,e,n){t=va(t);var r=(e=da(e))?sn(t):0;return e&&r<e?t+Li(e-r,n):t},Un.padStart=function(t,e,n){t=va(t);var r=(e=da(e))?sn(t):0;return e&&r<e?Li(e-r,n)+t:t},Un.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),mn(va(t).replace(nt,\"\"),e||0)},Un.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&vo(t,e,n)&&(e=n=r),n===r&&(\"boolean\"==typeof e?(n=e,e=r):\"boolean\"==typeof t&&(n=t,t=r)),t===r&&e===r?(t=0,e=1):(t=pa(t),e===r?(e=t,t=0):e=pa(e)),t>e){var i=t;t=e,e=i}if(n||t%1||e%1){var o=bn();return vn(t+o*(e-t+ue(\"1e-\"+((o+\"\").length-1))),e)}return Hr(t,e)},Un.reduce=function(t,e,n){var r=$u(t)?Pe:Ve,i=arguments.length<3;return r(t,oo(e,4),n,i,lr)},Un.reduceRight=function(t,e,n){var r=$u(t)?Re:Ve,i=arguments.length<3;return r(t,oo(e,4),n,i,fr)},Un.repeat=function(t,e,n){return e=(n?vo(t,e,n):e===r)?1:da(e),Wr(va(t),e)},Un.replace=function(){var t=arguments,e=va(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Un.result=function(t,e,n){var i=-1,o=(e=yi(e,t)).length;for(o||(o=1,t=r);++i<o;){var u=null==t?r:t[zo(e[i])];u===r&&(i=o,u=n),t=Ju(u)?u.call(t):u}return t},Un.round=Sc,Un.runInContext=t,Un.sample=function(t){return($u(t)?Gn:Zr)(t)},Un.size=function(t){if(null==t)return 0;if(Hu(t))return ua(t)?sn(t):t.length;var e=fo(t);return e==w||e==C?t.size:Dr(t).length},Un.snakeCase=Wa,Un.some=function(t,e,n){var i=$u(t)?De:ei;return n&&vo(t,e,n)&&(e=r),i(t,oo(e,3))},Un.sortedIndex=function(t,e){return ni(t,e)},Un.sortedIndexBy=function(t,e,n){return ri(t,e,oo(n,2))},Un.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=ni(t,e);if(r<n&&Fu(t[r],e))return r}return-1},Un.sortedLastIndex=function(t,e){return ni(t,e,!0)},Un.sortedLastIndexBy=function(t,e,n){return ri(t,e,oo(n,2),!0)},Un.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=ni(t,e,!0)-1;if(Fu(t[n],e))return n}return-1},Un.startCase=Ka,Un.startsWith=function(t,e,n){return t=va(t),n=null==n?0:or(da(n),0,t.length),e=ui(e),t.slice(n,n+e.length)==e},Un.subtract=jc,Un.sum=function(t){return t&&t.length?He(t,nc):0},Un.sumBy=function(t,e){return t&&t.length?He(t,oo(e,2)):0},Un.template=function(t,e,n){var i=Un.templateSettings;n&&vo(t,e,n)&&(e=r),t=va(t),e=wa({},e,i,Gi);var o=wa({},e.imports,i.imports,Gi),u=Na(o),a=Ge(o,u);Oe(u,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,l=0,f=e.interpolate||gt,p=\"__p += '\",d=It((e.escape||gt).source+\"|\"+f.source+\"|\"+(f===J?lt:gt).source+\"|\"+(e.evaluate||gt).source+\"|$\",\"g\"),h=\"//# sourceURL=\"+(Rt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ne+\"]\")+\"\\n\";t.replace(d,function(e,n,r,i,o,u){return r||(r=i),p+=t.slice(l,u).replace(mt,en),n&&(c=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(s=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=u+e.length,e}),p+=\"';\\n\";var _=Rt.call(e,\"variable\")&&e.variable;if(_){if(ct.test(_))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(L,\"\"):p).replace(q,\"$1\").replace($,\"$1;\"),p=\"function(\"+(_||\"obj\")+\") {\\n\"+(_?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var y=Ya(function(){return St(u,h+\"return \"+p).apply(r,a)});if(y.source=p,Gu(y))throw y;return y},Un.times=function(t,e){if((t=da(t))<1||t>l)return[];var n=p,r=vn(t,p);e=oo(e),t-=p;for(var i=We(r,e);++n<t;)e(n);return i},Un.toFinite=pa,Un.toInteger=da,Un.toLength=ha,Un.toLower=function(t){return va(t).toLowerCase()},Un.toNumber=_a,Un.toSafeInteger=function(t){return t?or(da(t),-9007199254740991,l):0===t?t:0},Un.toString=va,Un.toUpper=function(t){return va(t).toUpperCase()},Un.trim=function(t,e,n){if((t=va(t))&&(n||e===r))return Ke(t);if(!t||!(e=ui(e)))return t;var i=ln(t),o=ln(e);return gi(i,Ye(i,o),Xe(i,o)+1).join(\"\")},Un.trimEnd=function(t,e,n){if((t=va(t))&&(n||e===r))return t.slice(0,fn(t)+1);if(!t||!(e=ui(e)))return t;var i=ln(t);return gi(i,0,Xe(i,ln(e))+1).join(\"\")},Un.trimStart=function(t,e,n){if((t=va(t))&&(n||e===r))return t.replace(nt,\"\");if(!t||!(e=ui(e)))return t;var i=ln(t);return gi(i,Ye(i,ln(e))).join(\"\")},Un.truncate=function(t,e){var n=30,i=\"...\";if(Qu(e)){var o=\"separator\"in e?e.separator:o;n=\"length\"in e?da(e.length):n,i=\"omission\"in e?ui(e.omission):i}var u=(t=va(t)).length;if(nn(t)){var a=ln(t);u=a.length}if(n>=u)return t;var c=n-sn(i);if(c<1)return i;var s=a?gi(a,0,c).join(\"\"):t.slice(0,c);if(o===r)return s+i;if(a&&(c+=s.length-c),ia(o)){if(t.slice(c).search(o)){var l,f=s;for(o.global||(o=It(o.source,va(ft.exec(o))+\"g\")),o.lastIndex=0;l=o.exec(f);)var p=l.index;s=s.slice(0,p===r?c:p)}}else if(t.indexOf(ui(o),c)!=c){var d=s.lastIndexOf(o);d>-1&&(s=s.slice(0,d))}return s+i},Un.unescape=function(t){return(t=va(t))&&W.test(t)?t.replace(V,pn):t},Un.uniqueId=function(t){var e=++Dt;return va(t)+e},Un.upperCase=Za,Un.upperFirst=Ga,Un.each=vu,Un.eachRight=gu,Un.first=Ho,uc(Un,(yc={},gr(Un,function(t,e){Rt.call(Un.prototype,e)||(yc[e]=t)}),yc),{chain:!1}),Un.VERSION=\"4.18.1\",Oe([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Un[t].placeholder=Un}),Oe([\"drop\",\"take\"],function(t,e){qn.prototype[t]=function(n){n=n===r?1:yn(da(n),0);var i=this.__filtered__&&!e?new qn(this):this.clone();return i.__filtered__?i.__takeCount__=vn(n,i.__takeCount__):i.__views__.push({size:vn(n,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},qn.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),Oe([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=1==n||3==n;qn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:oo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),Oe([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");qn.prototype[t]=function(){return this[n](1).value()[0]}}),Oe([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");qn.prototype[t]=function(){return this.__filtered__?new qn(this):this[n](1)}}),qn.prototype.compact=function(){return this.filter(nc)},qn.prototype.find=function(t){return this.filter(t).head()},qn.prototype.findLast=function(t){return this.reverse().find(t)},qn.prototype.invokeMap=Kr(function(t,e){return\"function\"==typeof t?new qn(this):this.map(function(n){return xr(n,t,e)})}),qn.prototype.reject=function(t){return this.filter(Du(oo(t)))},qn.prototype.slice=function(t,e){t=da(t);var n=this;return n.__filtered__&&(t>0||e<0)?new qn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==r&&(n=(e=da(e))<0?n.dropRight(-e):n.take(e-t)),n)},qn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},qn.prototype.toArray=function(){return this.take(p)},gr(qn.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Un[i?\"take\"+(\"last\"==e?\"Right\":\"\"):e],u=i||/^find/.test(e);o&&(Un.prototype[e]=function(){var e=this.__wrapped__,a=i?[1]:arguments,c=e instanceof qn,s=a[0],l=c||$u(e),f=function(t){var e=o.apply(Un,ke([t],a));return i&&p?e[0]:e};l&&n&&\"function\"==typeof s&&1!=s.length&&(c=l=!1);var p=this.__chain__,d=!!this.__actions__.length,h=u&&!p,_=c&&!d;if(!u&&l){e=_?e:new qn(this);var y=t.apply(e,a);return y.__actions__.push({func:pu,args:[f],thisArg:r}),new Ln(y,p)}return h&&_?t.apply(this,a):(y=this.thru(f),h?i?y.value()[0]:y.value():y)})}),Oe([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=xt[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Un.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply($u(i)?i:[],t)}return this[n](function(n){return e.apply($u(n)?n:[],t)})}}),gr(qn.prototype,function(t,e){var n=Un[e];if(n){var r=n.name+\"\";Rt.call(An,r)||(An[r]=[]),An[r].push({name:e,func:n})}}),An[Mi(r,2).name]=[{name:\"wrapper\",func:r}],qn.prototype.clone=function(){var t=new qn(this.__wrapped__);return t.__actions__=Ci(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ci(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ci(this.__views__),t},qn.prototype.reverse=function(){if(this.__filtered__){var t=new qn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},qn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=$u(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],u=o.size;switch(o.type){case\"drop\":t+=u;break;case\"dropRight\":e-=u;break;case\"take\":e=vn(e,t+u);break;case\"takeRight\":t=yn(t,e-u)}}return{start:t,end:e}}(0,i,this.__views__),u=o.start,a=o.end,c=a-u,s=r?a:u-1,l=this.__iteratees__,f=l.length,p=0,d=vn(c,this.__takeCount__);if(!n||!r&&i==c&&d==c)return fi(t,this.__actions__);var h=[];t:for(;c--&&p<d;){for(var _=-1,y=t[s+=e];++_<f;){var v=l[_],g=v.iteratee,m=v.type,b=g(y);if(2==m)y=b;else if(!b){if(1==m)continue t;break t}}h[p++]=y}return h},Un.prototype.at=du,Un.prototype.chain=function(){return fu(this)},Un.prototype.commit=function(){return new Ln(this.value(),this.__chain__)},Un.prototype.next=function(){this.__values__===r&&(this.__values__=fa(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Un.prototype.plant=function(t){for(var e,n=this;n instanceof Bn;){var i=Uo(n);i.__index__=0,i.__values__=r,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e},Un.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof qn){var e=t;return this.__actions__.length&&(e=new qn(this)),(e=e.reverse()).__actions__.push({func:pu,args:[Qo],thisArg:r}),new Ln(e,this.__chain__)}return this.thru(Qo)},Un.prototype.toJSON=Un.prototype.valueOf=Un.prototype.value=function(){return fi(this.__wrapped__,this.__actions__)},Un.prototype.first=Un.prototype.head,Yt&&(Un.prototype[Yt]=function(){return this}),Un}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(le._=dn,define(function(){return dn})):pe?((pe.exports=dn)._=dn,fe._=dn):le._=dn}.call(this)},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,e,n){\"use strict\";n.d(e,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createBlueSnapDirectAPMPaymentStrategy:()=>B,createBlueSnapDirectCreditCardPaymentStrategy:()=>U,createBlueSnapV2PaymentStrategy:()=>K});var t,e=n(315);function i(t,e){return Object.assign(t,{resolveIds:e})}class o extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class u extends o{constructor(t){super(t||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}function a(t,e){if(null==t)throw e?e():new Error(\"An unexpected error has occurred.\");return t}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(t||(t={}));class c extends o{constructor(e){super(function(e){switch(e){case t.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case t.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case t.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case t.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var s,l;class f{initialize(t){this._blueSnapSdk=t}initialize3ds(t,e){return n=this,r=void 0,o=function*(){const n=this._getBlueSnapSdk();return new Promise((r,i)=>{n.threeDsPaymentsSetup(t,t=>\"1\"===t.code?r(t.threeDSecure.threeDSecureReferenceId):i(new u)),n.threeDsPaymentsSubmitData(e)})},new((i=void 0)||(i=Promise))(function(t,e){function u(t){try{c(o.next(t))}catch(t){e(t)}}function a(t){try{c(o.throw(t))}catch(t){e(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i(function(t){t(n)})).then(u,a)}c((o=o.apply(n,r||[])).next())});var n,r,i,o}_getBlueSnapSdk(){return a(this._blueSnapSdk,()=>new c(t.PaymentNotInitialized))}}class p extends o{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class d extends p{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}function h(t){return!(\"object\"!=typeof t||null===t||void 0!==t.shouldSaveInstrument&&\"boolean\"!=typeof t.shouldSaveInstrument||void 0!==t.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof t.shouldSetAsDefaultInstrument)}function _(t){return Boolean(t.instrumentId)}class y extends o{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(s||(s={}));class v extends o{constructor(t){super(function(t){switch(t){case s.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case s.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case s.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case s.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case s.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case s.MissingCheckoutConfig:case s.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case s.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case s.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case s.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case s.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case s.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case s.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(t){t.CardCode=\"cardCode\",t.CardCodeVerification=\"cardCodeVerification\",t.CardExpiry=\"cardExpiry\",t.CardName=\"cardName\",t.CardNumber=\"cardNumber\",t.CardNumberVerification=\"cardNumberVerification\",t.CardExpiryVerification=\"cardExpiryVerification\"}(l||(l={}));const g=l;function m(t){return g.CardNumber in t}function b(t){return g.CardCodeVerification in t||g.CardNumberVerification in t}var w=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};class S{constructor(t,e,n,r){this._scriptLoader=t,this._paymentIntegrationService=e,this._blueSnapDirectHostedForm=n,this._blueSnapDirect3ds=r}initialize(t){return w(this,void 0,void 0,function*(){const{methodId:e,gatewayId:n,creditCard:r}=t;if(!n||!r)throw new p;const i=yield this._paymentIntegrationService.loadPaymentMethod(n,{params:{method:e,bigpayToken:r.bigpayToken}}),{config:{testMode:o,is3dsEnabled:u},clientToken:a}=i.getPaymentMethodOrThrow(e,n);if(this._blueSnapSdk=yield this._scriptLoader.load(o),this._paymentFieldsToken=a,this._shouldUseHostedFields=m(r.form.fields)||b(r.form.fields)&&!!r.form.fields.cardNumberVerification,this._shouldUseHostedFields){this._blueSnapDirectHostedForm.initialize(this._blueSnapSdk,r.form.fields);try{yield this._blueSnapDirectHostedForm.attach(this._getPaymentFieldsToken(),r,u)}catch(t){if(t instanceof p)return;throw t}}})}execute(t){return w(this,void 0,void 0,function*(){if(!t.payment)throw new d([\"payment\"]);if(!this._blueSnapSdk)throw new d([\"payment\"]);const{paymentData:e}=t.payment,{shouldSaveInstrument:n,shouldSetAsDefaultInstrument:r}=h(e)?e:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1},i=this._getPaymentFieldsToken();let o;const{is3dsEnabled:u}=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t.payment.methodId,t.payment.gatewayId).config,a=this._shouldUseHostedFields?yield this._blueSnapDirectHostedForm.validate().submit(u?this._getBlueSnapDirectThreeDSecureData():void 0,!(h(e)&&_(e))):void 0;if(yield this._paymentIntegrationService.submitOrder(),h(e)&&_(e)&&this._paymentFieldsToken&&e.instrumentId){if(u){this._blueSnapDirect3ds.initialize(this._blueSnapSdk);const{last4:t,brand:n}=this._paymentIntegrationService.getState().getCardInstrumentOrThrow(e.instrumentId),r=Object.assign({last4Digits:t,ccType:n.toUpperCase()},this._getBlueSnapDirectThreeDSecureData());o=yield this._blueSnapDirect3ds.initialize3ds(this._paymentFieldsToken,r)}yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},t.payment),{paymentData:Object.assign(Object.assign(Object.assign({instrumentId:e.instrumentId},this._shouldUseHostedFields?{nonce:i}:{}),o?{deviceSessionId:o}:{}),{shouldSetAsDefaultInstrument:!!r})}))}else yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},t.payment),{paymentData:{formattedPayload:{credit_card_token:{token:JSON.stringify({pfToken:i,cardHolderName:a&&a.cardHolderName})},vault_payment_instrument:n,set_as_default_stored_instrument:r}}}))})}finalize(){return Promise.reject(new y)}deinitialize(){return this._shouldUseHostedFields&&this._blueSnapDirectHostedForm.detach(),Promise.resolve()}_getBlueSnapDirectThreeDSecureData(){var t;const{getBillingAddress:e,getShippingAddress:n,getCustomer:r,getCheckoutOrThrow:i,getCartOrThrow:o}=this._paymentIntegrationService.getState(),u=e(),a=n(),c=(null===(t=r())||void 0===t?void 0:t.email)||(null==u?void 0:u.email),s=(null==u?void 0:u.phone)||(null==a?void 0:a.phone);return Object.assign(Object.assign(Object.assign(Object.assign({amount:i().outstandingBalance,currency:o().currency.code},c&&{email:c}),s&&{phone:s}),u&&{billingFirstName:u.firstName,billingLastName:u.lastName,billingCountry:u.countryCode,billingCity:u.city,billingAddress:`${u.address1} ${u.address2}`.trim(),billingZip:u.postalCode}),a&&{shippingFirstName:a.firstName,shippingLastName:a.lastName,shippingCountry:a.countryCode,shippingCity:a.city,shippingAddress:`${a.address1} ${a.address2}`.trim(),shippingZip:a.postalCode})}_getPaymentFieldsToken(){return a(this._paymentFieldsToken,()=>new v(s.MissingPaymentToken))}}var j,O,I,C,E,x=n(9440);class A extends o{constructor(t,e){super(e||\"Unable to proceed because the payment form contains invalid data.\"),this.details=t,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}!function(t){t.AMEX=\"american-express\",t.CHINA_UNION_PAY=\"unionpay\",t.DINERS=\"diners-club\",t.DISCOVER=\"discover\",t.JCB=\"jcb\",t.MASTERCARD=\"mastercard\",t.UNKNOWN=\"unknown\",t.VISA=\"visa\"}(j||(j={})),function(t){t.ON_BLUR=\"onBlur\",t.ON_SUBMIT=\"onSubmit\"}(O||(O={})),function(t){t.EMPTY=\"empty\",t.INVALID=\"invalid\",t.THREE_DS_NOT_ENABLED=\"3D Secure is not enabled\"}(I||(I={})),function(t){t.CC_NOT_SUPORTED=\"22013\",t.ERROR_403=\"403\",t.ERROR_404=\"404\",t.ERROR_500=\"500\",t.INVALID_OR_EMPTY=\"10\",t.SESSION_EXPIRED=\"400\",t.THREE_DS_AUTH_FAILED=\"14101\",t.THREE_DS_CLIENT_ERROR=\"14103\",t.THREE_DS_MISSING_FIELDS=\"14102\",t.THREE_DS_NOT_ENABLED=\"14100\",t.TOKEN_EXPIRED=\"14040\",t.TOKEN_NOT_ASSOCIATED=\"14042\",t.TOKEN_NOT_FOUND=\"14041\"}(C||(C={})),function(t){t.CardCode=\"cvv\",t.CardExpiry=\"exp\",t.CardName=\"noc\",t.CardNumber=\"ccn\"}(E||(E={}));const N={[E.CardNumber]:g.CardNumber,[E.CardExpiry]:g.CardExpiry,[E.CardName]:g.CardName,[E.CardCode]:g.CardCode},k={empty:{[g.CardNumber]:{fieldType:\"cardNumber\",message:\"Credit card number is required\",type:\"required\"},[g.CardNumberVerification]:{fieldType:\"cardNumber\",message:\"Credit card number is required\",type:\"required\"},[g.CardExpiry]:{fieldType:\"cardExpiry\",message:\"Expiration date is required\",type:\"required\"},[g.CardCode]:{fieldType:\"cardCode\",message:\"CVV is required\",type:\"required\"},[g.CardName]:{fieldType:\"cardName\",message:\"Full name is required\",type:\"required\"}},invalid:{[g.CardNumber]:{fieldType:\"cardNumber\",message:\"Credit card number must be valid\",type:\"invalid_card_number\"},[g.CardNumberVerification]:{fieldType:\"cardNumber\",message:\"Credit card number must be valid\",type:\"invalid_card_number\"},[g.CardExpiry]:{fieldType:\"cardExpiry\",message:\"Expiration date must be a valid future date in MM / YY format\",type:\"invalid_card_expiry\"},[g.CardCode]:{fieldType:\"cardCode\",message:\"CVV must be valid\",type:\"invalid_card_code\"},[g.CardName]:{fieldType:\"cardName\",message:\"Full name is required\",type:\"required\"}}};class P{constructor(t,e){this._nameOnCardInput=t,this._hostedInputValidator=e}initialize(t,e){this._blueSnapSdk=t,e&&(m(e)?this._hostedInputValidator.initialize():b(e)&&e.cardNumberVerification&&this._hostedInputValidator.initializeValidationFields())}attach(t,e,n){var r,i,o,u,a=e.form,{fields:c}=a,s=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(a,[\"fields\"]);return void 0===n&&(n=!1),r=this,i=void 0,u=function*(){const e=this._getBlueSnapSdk();if(!m(c)&&!b(c))throw new p(\"Field options must be of type HostedCardFieldOptionsMap\");return this._onValidate=s.onValidate,m(c)&&this._setCustomBlueSnapAttributes(c),b(c)&&this._setCustomStoredCardsBlueSnapAttributes(c),new Promise(r=>{const i=this._getHostedPaymentFieldsOptions(t,c,s,r,n);e.hostedPaymentFieldsCreate(i),m(c)&&this._nameOnCardInput.attach(i,c.cardName.accessibilityLabel,c.cardName.placeholder)})},new((o=void 0)||(o=Promise))(function(t,e){function n(t){try{c(u.next(t))}catch(t){e(t)}}function a(t){try{c(u.throw(t))}catch(t){e(t)}}function c(e){var r;e.done?t(e.value):(r=e.value,r instanceof o?r:new o(function(t){t(r)})).then(n,a)}c((u=u.apply(r,i||[])).next())})}validate(){var t;const e=this._hostedInputValidator.validate();if(null===(t=this._onValidate)||void 0===t||t.call(this,e),!e.isValid){const t=Object.entries(e.errors).reduce((t,[e,n])=>Object.assign(Object.assign({},t),{[e]:n.map(({message:t,type:e})=>({message:t,type:e}))}),{});throw new A(t)}return this}submit(t,e=!1){return new Promise((n,r)=>this._getBlueSnapSdk().hostedPaymentFieldsSubmitData(t=>this._isBlueSnapDirectCallbackError(t)?r(new u(t.statusCode===C.THREE_DS_AUTH_FAILED?t.error[0].errorDescription:`Submission failed with status: ${t.statusCode} and errors: ${JSON.stringify(t.error)}`)):n(Object.assign(Object.assign({},t.cardData),e?{cardHolderName:this._nameOnCardInput.getValue()}:{})),t))}detach(){this._nameOnCardInput.detach()}_isBlueSnapDirectCallbackError(t){return\"error\"in t}_getHostedPaymentFieldsOptions(t,e,{onFocus:n,onBlur:r,onValidate:i,onCardTypeChange:o,onEnter:u,styles:a},c,s){var l;return Object.assign(Object.assign(Object.assign({token:t,onFieldEventHandler:{setupComplete:()=>c(),onFocus:this._usetUiEventCallback(n),onBlur:this._usetUiEventCallback(r),onError:this._handleError(i),onType:(t,e)=>null==o?void 0:o({cardType:j[e]}),onEnter:this._usetUiEventCallback(u),onValid:t=>null==i?void 0:i(this._hostedInputValidator.validate({tagId:t}))}},m(e)&&{ccnPlaceHolder:e.cardNumber.placeholder||\"\",cvvPlaceHolder:(null===(l=e.cardCode)||void 0===l?void 0:l.placeholder)||\"\",expPlaceHolder:e.cardExpiry.placeholder||\"MM / YY\"}),a&&{style:this._mapStyles(a)}),{\"3DS\":s})}_mapStyles({default:t,error:e,focus:n}){return Object.entries(Object.assign(Object.assign(Object.assign({},t&&{input:t}),e&&{\".invalid\":e}),n&&{\":focus\":n})).reduce((t,[e,n])=>Object.assign(Object.assign({},t),{[e]:Object.entries(n).reduce((t,[e,n])=>Object.assign(Object.assign({},t),{[(0,x.kebabCase)(e)]:n}),{})}),{})}_handleError(t){return(e,n,r,i)=>{if(n===C.INVALID_OR_EMPTY&&e&&function(t){return void 0!==t&&[I.EMPTY,I.INVALID].includes(t)}(r))return null==t?void 0:t(this._hostedInputValidator.validate({tagId:e,errorDescription:r}));throw new u(`An unexpected error has occurred: ${JSON.stringify({tagId:e,errorCode:n,errorDescription:r,eventOrigin:i})}`)}}_usetUiEventCallback(t){return e=>{t&&t({fieldType:N[e]})}}_getBlueSnapSdk(){return a(this._blueSnapSdk,()=>new c(t.PaymentNotInitialized))}_setCustomBlueSnapAttributes(t){const{cardNumber:e,cardExpiry:n,cardCode:r,cardName:i}=t,o=document.getElementById(e.containerId),u=document.getElementById(n.containerId),a=r&&document.getElementById(r.containerId),c=document.getElementById(i.containerId);if(!(o&&u&&a&&c))throw new p(\"Unable to create hosted payment fields to invalid HTML container elements.\");o.dataset.bluesnap=E.CardNumber,u.dataset.bluesnap=E.CardExpiry,a.dataset.bluesnap=E.CardCode,c.dataset.bluesnap=E.CardName}_setCustomStoredCardsBlueSnapAttributes(t){const{cardNumberVerification:e,cardCodeVerification:n}=t,r=e&&document.getElementById(e.containerId),i=n&&document.getElementById(n.containerId);(r||i)&&(r&&(r.dataset.bluesnap=E.CardNumber),i&&(i.dataset.bluesnap=E.CardCode))}}class R{constructor(){this._errors={}}initialize(){this._errors={cardNumber:[k.empty.cardNumber],cardExpiry:[k.empty.cardExpiry],cardCode:[k.empty.cardCode],cardName:[k.empty.cardName]}}initializeValidationFields(){this._errors={cardNumberVerification:[k.empty.cardNumber]}}validate(t){return t&&this._updateErrors(t.tagId,t.errorDescription),{isValid:Object.values(this._errors).every(t=>0===t.length),errors:this._errors}}_updateErrors(t,e){const n=this._errors.cardNumberVerification?g.CardNumberVerification:N[t];this._errors[n]=e?[k[e][n]]:[]}}class D{attach({style:t,onFieldEventHandler:{onFocus:e,onBlur:n,onValid:r,onError:i,onEnter:o}={}},u,a){var c;this._style=t,this._create(),this._getInput().addEventListener(\"focus\",this._handleFocus(e)),this._getInput().addEventListener(\"blur\",this._handleBlur(n,r,i)),this._getInput().addEventListener(\"enter\",this._handleEnter(o)),u&&this._getInput().setAttribute(\"aria-label\",u),a&&(this._getInput().placeholder=a),null===(c=document.querySelector('[data-bluesnap=\"noc\"]'))||void 0===c||c.appendChild(this._getInput())}getValue(){return this._getInput().value}detach(){this._input&&(this._input.remove(),this._input=void 0)}_handleFocus(t){return()=>{var e;this._applyStyles(null===(e=this._style)||void 0===e?void 0:e[\":focus\"]),null==t||t(E.CardName)}}_handleBlur(t,e,n){return({target:r})=>{var i,o;null==t||t(E.CardName),r instanceof HTMLInputElement&&(/\\w{1,200}/.test(r.value)?(this._applyStyles(null===(i=this._style)||void 0===i?void 0:i.input),null==e||e(E.CardName)):(this._applyStyles(null===(o=this._style)||void 0===o?void 0:o[\".invalid\"]),null==n||n(E.CardName,C.INVALID_OR_EMPTY,I.EMPTY,O.ON_BLUR)))}}_handleEnter(t){return()=>null==t?void 0:t(E.CardName)}_applyStyles(t={}){const e={color:t.color,fontFamily:t[\"font-family\"],fontSize:t[\"font-size\"],fontWeight:t[\"font-weight\"]},n=Object.keys(e);n.every(t=>[\"color\",\"fontFamily\",\"fontSize\",\"fontWeight\"].includes(t))&&n.forEach(t=>{e[t]&&(this._getInput().style[t]=e[t]||\"\")})}_configureInput(){this._getInput().autocomplete=\"cc-name\",this._getInput().id=E.CardName,this._getInput().inputMode=\"text\",this._getInput().maxLength=200,this._getInput().style.backgroundColor=\"transparent\",this._getInput().style.border=\"0\",this._getInput().style.height=\"100%\",this._getInput().style.margin=\"0\",this._getInput().style.outline=\"none\",this._getInput().style.padding=\"0\",this._getInput().style.width=\"100%\",this._getInput().type=\"text\"}_getInput(){return a(this._input,()=>new c(t.PaymentNotInitialized))}_create(){var t;this._input=document.createElement(\"input\"),this._configureInput(),this._applyStyles(null===(t=this._style)||void 0===t?void 0:t.input)}}class T extends o{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var z;!function(t){t.PRODUCTION=\"https://pay.bluesnap.com/web-sdk/5/bluesnap.js\",t.SANDBOX=\"https://sandpay.bluesnap.com/web-sdk/5/bluesnap.js\"}(z||(z={}));class M{constructor(t,e=window){this._scriptLoader=t,this._window=e}load(t=!1){return e=this,n=void 0,i=function*(){if(this._window.bluesnap)return this._window.bluesnap;if(yield this._scriptLoader.loadScript(t?z.SANDBOX:z.PRODUCTION),!this._window.bluesnap)throw new T;return this._window.bluesnap},new((r=void 0)||(r=Promise))(function(t,o){function u(t){try{c(i.next(t))}catch(t){o(t)}}function a(t){try{c(i.throw(t))}catch(t){o(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(t){t(n)})).then(u,a)}c((i=i.apply(e,n||[])).next())});var e,n,r,i}}const U=i(t=>new S(new M((0,e.vQ)()),t,new P(new D,new R),new f),[{id:\"credit_card\",gateway:\"bluesnapdirect\"}]);class F{constructor(t){this._paymentIntegrationService=t}execute(t){return e=this,n=void 0,i=function*(){const e=this._formatePaymentPayload(t);yield this._paymentIntegrationService.submitOrder();try{yield this._paymentIntegrationService.submitPayment(e)}catch(t){if(this._isBlueSnapDirectRedirectResponse(t)){const e=t.body.provider_data&&JSON.parse(t.body.provider_data);let n=t.body.additional_action_required.data.redirect_url;if(function(t){if(\"object\"!=typeof t||null===t)return!1;const e=t;return!!e.merchantid&&\"string\"==typeof e.merchantid}(e)){const t=new URLSearchParams(e).toString();n=`${n}&${t}`}return new Promise(()=>window.location.replace(n))}return Promise.reject(t)}},new((r=void 0)||(r=Promise))(function(t,o){function u(t){try{c(i.next(t))}catch(t){o(t)}}function a(t){try{c(i.throw(t))}catch(t){o(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(t){t(n)})).then(u,a)}c((i=i.apply(e,n||[])).next())});var e,n,r,i}initialize(){return Promise.resolve()}finalize(){return Promise.reject(new y)}deinitialize(){return Promise.resolve()}_formatePaymentPayload({payment:t}){if(!t)throw new d([\"payment\"]);return t.paymentData&&_(t.paymentData)&&h(t.paymentData)?Object.assign(Object.assign({},t),{paymentData:{instrumentId:t.paymentData.instrumentId,shouldSetAsDefaultInstrument:!!t.paymentData.shouldSetAsDefaultInstrument}}):(e=t.paymentData,Boolean(\"object\"==typeof e&&null!==e&&\"accountNumber\"in e&&\"accountType\"in e&&\"shopperPermission\"in e&&\"routingNumber\"in e)?Object.assign(Object.assign({},t),{paymentData:{formattedPayload:{ecp:Object.assign({account_number:t.paymentData.accountNumber,account_type:t.paymentData.accountType,shopper_permission:t.paymentData.shopperPermission,routing_number:t.paymentData.routingNumber},t.paymentData.companyName?{company_name:t.paymentData.companyName}:{}),vault_payment_instrument:t.paymentData.shouldSaveInstrument,set_as_default_stored_instrument:t.paymentData.shouldSetAsDefaultInstrument}}}):(n=t.paymentData,Boolean(\"object\"==typeof n&&null!==n&&\"iban\"in n&&\"firstName\"in n&&\"lastName\"in n&&\"shopperPermission\"in n)?Object.assign(Object.assign({},t),{paymentData:{formattedPayload:{sepa_direct_debit:{iban:t.paymentData.iban,first_name:t.paymentData.firstName,last_name:t.paymentData.lastName,shopper_permission:t.paymentData.shopperPermission},vault_payment_instrument:t.paymentData.shouldSaveInstrument,set_as_default_stored_instrument:t.paymentData.shouldSetAsDefaultInstrument}}}):function(t){return Boolean(\"object\"==typeof t&&null!==t&&\"bic\"in t)}(t.paymentData)?Object.assign(Object.assign({},t),{paymentData:{formattedPayload:{ideal:{bic:t.paymentData.bic}}}}):function(t){return Boolean(\"object\"==typeof t&&null!==t&&\"iban\"in t&&!(\"firstName\"in t)&&!(\"lastName\"in t)&&!(\"shopperPermission\"in t))}(t.paymentData)?Object.assign(Object.assign({},t),{paymentData:{formattedPayload:{pay_by_bank:{iban:t.paymentData.iban}}}}):{methodId:t.methodId}));var e,n}_isBlueSnapDirectRedirectResponse(t){var e;if(\"object\"!=typeof t||null===t)return!1;const n=t;if(!n.body)return!1;const r=n.body;return\"additional_action_required\"===r.status&&!!(null===(e=r.additional_action_required)||void 0===e?void 0:e.data.redirect_url)}}const B=i(t=>new F(t),[{gateway:\"bluesnapdirect\"}]);class L{constructor(t){const e=new Promise((t,e)=>{this.cancel=e});this.promise=Promise.race([t,e])}}class q extends o{constructor(t){super(t||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}var $;!function(t){t.ACKNOWLEDGE=\"ACKNOWLEDGE\",t.FINALIZE=\"FINALIZE\",t.INITIALIZE=\"INITIALIZE\"}($||($={}));const V=$;var H=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};class W{constructor(t){this._paymentIntegrationService=t}execute(e,n){return H(this,void 0,void 0,function*(){const{payment:r}=e;if(!r)throw new d([\"payment\"]);if(!this._initializeOptions)throw new c(t.PaymentNotInitialized);const{onLoad:i,style:o}=this._initializeOptions,u=this._createIframe(\"bluesnapv2_hosted_payment_page\",o),a=new L(new Promise(x.noop));i(u,()=>a.cancel(new q)),yield this._paymentIntegrationService.submitOrder(e,n),yield this._paymentIntegrationService.initializeOffsitePayment({methodId:r.methodId,gatewayId:r.gatewayId,shouldSaveInstrument:!1,target:u.name,promise:a.promise})})}finalize(t){return H(this,void 0,void 0,function*(){const e=this._paymentIntegrationService.getState(),n=e.getOrder(),r=e.getPaymentStatus();if(!n||r!==V.ACKNOWLEDGE&&r!==V.FINALIZE)return Promise.reject(new y);yield this._paymentIntegrationService.finalizeOrder(t)})}initialize(t){return H(this,void 0,void 0,function*(){this._initializeOptions=t&&t.bluesnapv2,yield Promise.resolve()})}deinitialize(){return Promise.resolve()}_createIframe(t,e){const n=document.createElement(\"iframe\");if(n.setAttribute(\"sandbox\",\"allow-top-navigation allow-scripts allow-forms allow-same-origin\"),n.name=t,e){const{border:t,height:r,width:i}=e;n.style.border=null!=t?t:\"\",n.style.height=null!=r?r:\"\",n.style.width=null!=i?i:\"\"}return n}}const K=i(t=>new W(t),[{gateway:\"bluesnapv2\"}])})(),module.exports=r})();\n//# sourceMappingURL=bluesnap-direct.js.map"
  },
  {
    "path": "dist/cjs/integrations/bolt.js",
    "content": "/*! For license information please see bolt.js.LICENSE.txt */\n(()=>{var t={4325(t,e,n){\"use strict\";n.d(e,{g:()=>o});var r=n(5889),o=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(r.stringify(e))},t}()},321(t,e,n){\"use strict\";n.d(e,{A:()=>a});var r=n(168),o=n(1675),i=n(5861),u=n(4670);function a(t){return new u.A(new i.A,new o.A,r,t)}},6889(t,e,n){\"use strict\";n.d(e,{A:()=>o});var r=n(2024);function o(t){return new r.A(t)}},4043(t,e,n){\"use strict\";n.r(e),n.d(e,{RequestSender:()=>i.A,Timeout:()=>u.A,createRequestSender:()=>r.A,createTimeout:()=>o.A});var r=n(321),o=n(6889),i=n(4670),u=n(2024)},4843(t,e,n){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}n.d(e,{A:()=>r})},1675(t,e,n){\"use strict\";n.d(e,{A:()=>a});var r=n(1635),o=n(710),i=/application\\/(\\w+\\+)?json/,u=/application\\/x-www-form-urlencoded/;const a=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(i.test(e))return JSON.stringify(t.body);if(u.test(e))return(0,o.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,\"Content-Type\");return t&&i.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var n,o=e.split(\":\"),i=(o.shift()||\"\").trim();return i?(0,r.__assign)((0,r.__assign)({},t),((n={})[i.toLowerCase()]=o.join(\":\").trim(),n)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}()},5861(t,e,n){\"use strict\";n.d(e,{A:()=>o});var r=n(5889);const o=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||\"GET\",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),\"boolean\"==typeof n.credentials&&(t.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(n){t.setRequestHeader(n,e[n])})},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(r.stringify(e,{encode:n})):t},t}()},4670(t,e,n){\"use strict\";n.d(e,{A:()=>s});var r=n(1635),o=n(35),i=n.n(o),u=n(4325),a=n(4843),c=n(2024);const s=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new u.g}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),o=this._getCachedRequest(t,r);if(o)return Promise.resolve(o);var i=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(e,o){var u=function(){var u=n._payloadTransformer.toResponse(i);u.status>=200&&u.status<300?(n._cacheRequest(t,r,u),e(u)):o(u)};i.onload=u,i.onerror=u,i.onabort=u,i.ontimeout=u,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return i.abort()}),r.timeout.start()),(0,a.A)(r.timeout)&&r.timeout.then(function(){return i.abort()}),i.send(n._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(n.headers[\"X-XSRF-TOKEN\"]=r),e&&e.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),i()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,e,n){\"use strict\";n.d(e,{A:()=>r});const r=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,e,n){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var n=t[e];return\"string\"==typeof n?\"\".concat(e,\"=\").concat(encodeURIComponent(n)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(e,{A:()=>r})},5889(t,e,n){\"use strict\";const r=n(803),o=n(1915),i=n(1657),u=n(3814);function a(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}function s(t,e){return e.decode?o(t):t}function l(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?l(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function f(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function p(t){const e=(t=f(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function h(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function d(t,e){a((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,n,r)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case\"bracket\":return(t,n,r)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"comma\":case\"separator\":return(e,n,r)=>{const o=\"string\"==typeof n&&n.includes(t.arrayFormatSeparator),i=\"string\"==typeof n&&!o&&s(n,t).includes(t.arrayFormatSeparator);n=i?s(n,t):n;const u=o||i?n.split(t.arrayFormatSeparator).map(e=>s(e,t)):null===n?n:s(n,t);r[e]=u};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[].concat(n[t],e):n[t]=e}}}(e),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const o of t.split(\"&\")){if(\"\"===o)continue;let[t,u]=i(e.decode?o.replace(/\\+/g,\" \"):o,\"=\");u=void 0===u?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?u:s(u,e),n(s(t,e),u,r)}for(const t of Object.keys(r)){const n=r[t];if(\"object\"==typeof n&&null!==n)for(const t of Object.keys(n))n[t]=h(n[t],e);else r[t]=h(n,e)}return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce((t,e)=>{const n=r[e];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?t[e]=l(n):t[e]=n,t},Object.create(null))}e.extract=p,e.parse=d,e.stringify=(t,e)=>{if(!t)return\"\";a((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const n=n=>e.skipNull&&null==t[n]||e.skipEmptyString&&\"\"===t[n],r=function(t){switch(t.arrayFormat){case\"index\":return e=>(n,r)=>{const o=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[\",o,\"]\"].join(\"\")]:[...n,[c(e,t),\"[\",c(o,t),\"]=\",c(r,t)].join(\"\")]};case\"bracket\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[]\"].join(\"\")]:[...n,[c(e,t),\"[]=\",c(r,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(n,r)=>null==r||0===r.length?n:0===n.length?[[c(e,t),\"=\",c(r,t)].join(\"\")]:[[n,c(r,t)].join(t.arrayFormatSeparator)];default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,c(e,t)]:[...n,[c(e,t),\"=\",c(r,t)].join(\"\")]}}(e),o={};for(const e of Object.keys(t))n(e)||(o[e]=t[e]);const i=Object.keys(o);return!1!==e.sort&&i.sort(e.sort),i.map(n=>{const o=t[n];return void 0===o?\"\":null===o?c(n,e):Array.isArray(o)?o.reduce(r(n),[]).join(\"&\"):c(n,e)+\"=\"+c(o,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[n,r]=i(t,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:d(p(t),e)},e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:s(r,e)}:{})},e.stringifyUrl=(t,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=f(t.url).split(\"?\")[0]||\"\",o=e.extract(t.url),i=e.parse(o,{sort:!1}),u=Object.assign(i,t.query);let a=e.stringify(u,n);a&&(a=`?${a}`);let s=function(t){let e=\"\";const n=t.indexOf(\"#\");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(s=`#${c(t.fragmentIdentifier,n)}`),`${r}${a}${s}`},e.pick=(t,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:o,query:i,fragmentIdentifier:a}=e.parseUrl(t,r);return e.stringifyUrl({url:o,query:u(i,n),fragmentIdentifier:a},r)},e.exclude=(t,n,r)=>{const o=Array.isArray(n)?t=>!n.includes(t):(t,e)=>!n(t,e);return e.pick(t,o,r)}},5477(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement(\"link\");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=n},471(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new i.default(new o.default,(0,r.createRequestSender)())};var r=n(4043),o=n(5477),i=n(4886)},9722(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new i.default(new o.default,(0,r.createRequestSender)())};var r=n(4043),o=n(5477),i=n(7995)},5895(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,o.default)()),r};var r,o=n(471)},282(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,o.default)()),r};var r,o=n(9722)},315(t,e,n){\"use strict\";e.vQ=void 0;n(4886),n(471);var r=n(5895);Object.defineProperty(e,\"vQ\",{enumerable:!0,get:function(){return r.default}});n(7995),n(9722),n(282)},4886(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var n=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,o){var i=document.createElement(\"script\"),u=e||{},a=u.async,c=void 0!==a&&a,s=u.attributes,l=void 0===s?{}:s;Object.keys(l).forEach(function(t){i.setAttribute(t,l[t])}),i.onload=function(){return r()},i.onreadystatechange=function(){return r()},i.onerror=function(e){delete n._scripts[t],o(e)},i.async=c,i.src=t,document.body.appendChild(i)})),this._scripts[t]},t.prototype.loadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadScript(t,e)})).then(function(){})},t.prototype.preloadScript=function(t,e){var n=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,o){var i=(e||{}).prefetch,u=void 0!==i&&i?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(u)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=u,a.href=t,a.onload=function(){r()},a.onerror=function(){delete n._preloadedScripts[t],o()},document.head.appendChild(a)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(o)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadScript(t,e)})).then(function(){})},t}();e.default=n},7995(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var n=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,o){var i=document.createElement(\"link\"),u=e||{},a=u.prepend,c=void 0!==a&&a,s=u.attributes,l=void 0===s?{}:s;Object.keys(l).forEach(function(t){i.setAttribute(t,l[t])}),i.onload=function(){return r()},i.onerror=function(e){delete n._stylesheets[t],o(e)},i.rel=\"stylesheet\",i.href=t,c&&document.head.children[0]?document.head.insertBefore(i,document.head.children[0]):document.head.appendChild(i)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadStylesheet(t,e)})).then(function(){})},t.prototype.preloadStylesheet=function(t,e){var n=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,o){var i=(e||{}).prefetch,u=void 0!==i&&i,a=u?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=u?\"prefetch\":\"preload\",c.href=t,c.onload=function(){r()},c.onerror=function(e){delete n._preloadedStylesheets[t],o(e)},document.head.appendChild(c)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(o)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadStylesheet(t,e)})).then(function(){})},t}();e.default=n},3658(t,e){\"use strict\";e.parse=function(t,e){if(\"string\"!=typeof t)throw new TypeError(\"argument str must be a string\");var n={},o=t.length;if(o<2)return n;var i=e&&e.decode||l,u=0,a=0,p=0;do{if(-1===(a=t.indexOf(\"=\",u)))break;if(-1===(p=t.indexOf(\";\",u)))p=o;else if(a>p){u=t.lastIndexOf(\";\",a-1)+1;continue}var h=c(t,u,a),d=s(t,a,h),v=t.slice(h,d);if(!r.call(n,v)){var y=c(t,a+1,p),g=s(t,p,y);34===t.charCodeAt(y)&&34===t.charCodeAt(g-1)&&(y++,g--);var _=t.slice(y,g);n[v]=f(_,i)}u=p+1}while(u<o);return n},e.serialize=function(t,e,r){var c=r&&r.encode||encodeURIComponent;if(\"function\"!=typeof c)throw new TypeError(\"option encode is invalid\");if(!o.test(t))throw new TypeError(\"argument name is invalid\");var s=c(e);if(!i.test(s))throw new TypeError(\"argument val is invalid\");var l=t+\"=\"+s;if(!r)return l;if(null!=r.maxAge){var f=Math.floor(r.maxAge);if(!isFinite(f))throw new TypeError(\"option maxAge is invalid\");l+=\"; Max-Age=\"+f}if(r.domain){if(!u.test(r.domain))throw new TypeError(\"option domain is invalid\");l+=\"; Domain=\"+r.domain}if(r.path){if(!a.test(r.path))throw new TypeError(\"option path is invalid\");l+=\"; Path=\"+r.path}if(r.expires){var p=r.expires;if(!function(t){return\"[object Date]\"===n.call(t)}(p)||isNaN(p.valueOf()))throw new TypeError(\"option expires is invalid\");l+=\"; Expires=\"+p.toUTCString()}if(r.httpOnly&&(l+=\"; HttpOnly\"),r.secure&&(l+=\"; Secure\"),r.partitioned&&(l+=\"; Partitioned\"),r.priority)switch(\"string\"==typeof r.priority?r.priority.toLowerCase():r.priority){case\"low\":l+=\"; Priority=Low\";break;case\"medium\":l+=\"; Priority=Medium\";break;case\"high\":l+=\"; Priority=High\";break;default:throw new TypeError(\"option priority is invalid\")}if(r.sameSite)switch(\"string\"==typeof r.sameSite?r.sameSite.toLowerCase():r.sameSite){case!0:l+=\"; SameSite=Strict\";break;case\"lax\":l+=\"; SameSite=Lax\";break;case\"strict\":l+=\"; SameSite=Strict\";break;case\"none\":l+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}return l};var n=Object.prototype.toString,r=Object.prototype.hasOwnProperty,o=/^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/,i=/^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/,u=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,a=/^[\\u0020-\\u003A\\u003D-\\u007E]*$/;function c(t,e,n){do{var r=t.charCodeAt(e);if(32!==r&&9!==r)return e}while(++e<n);return n}function s(t,e,n){for(;e>n;){var r=t.charCodeAt(--e);if(32!==r&&9!==r)return e+1}return n}function l(t){return-1!==t.indexOf(\"%\")?decodeURIComponent(t):t}function f(t,e){try{return e(t)}catch(e){return t}}},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+e+\")+\",\"gi\");function o(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],o(n),o(r))}function i(t){try{return decodeURIComponent(t)}catch(i){for(var e=t.match(n)||[],r=1;r<e.length;r++)e=(t=o(e,r).join(\"\")).match(n)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(t);n;){try{e[n[0]]=decodeURIComponent(n[0])}catch(t){var o=i(n[0]);o!==n[0]&&(e[n[0]]=o)}n=r.exec(t)}e[\"%C2\"]=\"�\";for(var u=Object.keys(e),a=0;a<u.length;a++){var c=u[a];t=t.replace(new RegExp(c,\"g\"),e[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,e){for(var n={},r=Object.keys(t),o=Array.isArray(e),i=0;i<r.length;i++){var u=r[i],a=t[u];(o?-1!==e.indexOf(u):e(u,a,t))&&(n[u]=a)}return n}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function o(){}function i(e,n,i){if(\"undefined\"!=typeof document){\"number\"==typeof(i=t({path:\"/\"},o.defaults,i)).expires&&(i.expires=new Date(1*new Date+864e5*i.expires)),i.expires=i.expires?i.expires.toUTCString():\"\";try{var u=JSON.stringify(n);/^[\\{\\[]/.test(u)&&(n=u)}catch(t){}n=r.write?r.write(n,e):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in i)i[c]&&(a+=\"; \"+c,!0!==i[c]&&(a+=\"=\"+i[c].split(\";\")[0]));return document.cookie=e+\"=\"+n+a}}function u(t,n){if(\"undefined\"!=typeof document){for(var o={},i=document.cookie?document.cookie.split(\"; \"):[],u=0;u<i.length;u++){var a=i[u].split(\"=\"),c=a.slice(1).join(\"=\");n||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var s=e(a[0]);if(c=(r.read||r)(c,s)||e(c),n)try{c=JSON.parse(c)}catch(t){}if(o[s]=c,t===s)break}catch(t){}}return t?o[t]:o}}return o.set=i,o.get=function(t){return u(t,!1)},o.getJSON=function(t){return u(t,!0)},o.remove=function(e,n){i(e,\"\",t(n,{expires:-1}))},o.defaults={},o.withConverter=n,o}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},4963(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}();e.hasCookies=function(){var t=new a;try{var e=\"__test\";t.setItem(e,\"1\");var n=t.getItem(e);return t.removeItem(e),\"1\"===n}catch(t){return!1}};var o,i=(o=n(3658))&&o.__esModule?o:{default:o},u=\"lS_\",a=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.cookieOptions=Object.assign({path:\"/\"},e),u=void 0===e.prefix?u:e.prefix}return r(t,[{key:\"getItem\",value:function(t){var e=i.default.parse(document.cookie);return e&&e.hasOwnProperty(u+t)?e[u+t]:null}},{key:\"setItem\",value:function(t,e){return document.cookie=i.default.serialize(u+t,e,this.cookieOptions),e}},{key:\"removeItem\",value:function(t){var e=Object.assign({},this.cookieOptions,{maxAge:-1});return document.cookie=i.default.serialize(u+t,\"\",e),null}},{key:\"clear\",value:function(){var t=i.default.parse(document.cookie);for(var e in t)0===e.indexOf(u)&&this.removeItem(e.substr(u.length));return null}}]),t}();e.default=a},3952(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),r=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this._data={}}return n(t,[{key:\"getItem\",value:function(t){return this._data.hasOwnProperty(t)?this._data[t]:null}},{key:\"setItem\",value:function(t,e){return this._data[t]=String(e)}},{key:\"removeItem\",value:function(t){return delete this._data[t]}},{key:\"clear\",value:function(){return this._data={}}}]),t}();e.default=r},7576(t,e,n){\"use strict\";var r=u(n(1322)),o=u(n(4963)),i=u(n(3952));function u(t){return t&&t.__esModule?t:{default:t}}var a;a=(0,r.default)(\"localStorage\")?window.localStorage:(0,r.default)(\"sessionStorage\")?window.sessionStorage:(0,r.default)(\"cookieStorage\")?new o.default:new i.default,e.Ay=a,r.default,o.default,i.default},1322(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"localStorage\",e=String(t).replace(/storage$/i,\"\").toLowerCase();if(\"local\"===e)return i(\"localStorage\");if(\"session\"===e)return i(\"sessionStorage\");if(\"cookie\"===e)return(0,r.hasCookies)();if(\"memory\"===e)return!0;throw new Error(\"Storage method `\"+t+\"` is not available.\\n    Please use one of the following: localStorage, sessionStorage, cookieStorage, memoryStorage.\")};var r=n(4963),o=\"__test\";function i(t){try{var e=window[t];return e.setItem(o,\"1\"),e.removeItem(o),!0}catch(t){return!1}}},35(t,e,n){t=n.nmd(t);var r=\"__lodash_hash_undefined__\",o=9007199254740991,i=\"[object Arguments]\",u=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,s=/^(?:0|[1-9]\\d*)$/,l={};l[\"[object Float32Array]\"]=l[\"[object Float64Array]\"]=l[\"[object Int8Array]\"]=l[\"[object Int16Array]\"]=l[\"[object Int32Array]\"]=l[\"[object Uint8Array]\"]=l[\"[object Uint8ClampedArray]\"]=l[\"[object Uint16Array]\"]=l[\"[object Uint32Array]\"]=!0,l[i]=l[\"[object Array]\"]=l[\"[object ArrayBuffer]\"]=l[\"[object Boolean]\"]=l[\"[object DataView]\"]=l[\"[object Date]\"]=l[\"[object Error]\"]=l[u]=l[\"[object Map]\"]=l[\"[object Number]\"]=l[a]=l[\"[object RegExp]\"]=l[\"[object Set]\"]=l[\"[object String]\"]=l[\"[object WeakMap]\"]=!1;var f,p,h,d=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,v=\"object\"==typeof self&&self&&self.Object===Object&&self,y=d||v||Function(\"return this\")(),g=e&&!e.nodeType&&e,_=g&&t&&!t.nodeType&&t,m=_&&_.exports===g,b=m&&d.process,w=function(){try{return _&&_.require&&_.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),j=w&&w.isTypedArray,S=Array.prototype,O=Function.prototype,x=Object.prototype,k=y[\"__core-js_shared__\"],I=O.toString,A=x.hasOwnProperty,C=(f=/[^.]+$/.exec(k&&k.keys&&k.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+f:\"\",E=x.toString,P=I.call(Object),B=RegExp(\"^\"+I.call(A).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),M=m?y.Buffer:void 0,R=y.Symbol,z=y.Uint8Array,T=(M&&M.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(t){return p(h(t))}),U=Object.create,N=x.propertyIsEnumerable,F=S.splice,L=R?R.toStringTag:void 0,$=function(){try{var t=at(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),q=M?M.isBuffer:void 0,D=Math.max,W=Date.now,H=at(y,\"Map\"),K=at(Object,\"create\"),G=function(){function t(){}return function(e){if(!mt(e))return{};if(U)return U(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function Z(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function J(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function V(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Q(t){var e=this.__data__=new J(t);this.size=e.size}function X(t,e,n){(void 0!==n&&!pt(t[e],n)||void 0===n&&!(e in t))&&et(t,e,n)}function Y(t,e,n){var r=t[e];A.call(t,e)&&pt(r,n)&&(void 0!==n||e in t)||et(t,e,n)}function tt(t,e){for(var n=t.length;n--;)if(pt(t[n][0],e))return n;return-1}function et(t,e,n){\"__proto__\"==e&&$?$(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}Z.prototype.clear=function(){this.__data__=K?K(null):{},this.size=0},Z.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Z.prototype.get=function(t){var e=this.__data__;if(K){var n=e[t];return n===r?void 0:n}return A.call(e,t)?e[t]:void 0},Z.prototype.has=function(t){var e=this.__data__;return K?void 0!==e[t]:A.call(e,t)},Z.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=K&&void 0===e?r:e,this},J.prototype.clear=function(){this.__data__=[],this.size=0},J.prototype.delete=function(t){var e=this.__data__,n=tt(e,t);return!(n<0||(n==e.length-1?e.pop():F.call(e,n,1),--this.size,0))},J.prototype.get=function(t){var e=this.__data__,n=tt(e,t);return n<0?void 0:e[n][1]},J.prototype.has=function(t){return tt(this.__data__,t)>-1},J.prototype.set=function(t,e){var n=this.__data__,r=tt(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},V.prototype.clear=function(){this.size=0,this.__data__={hash:new Z,map:new(H||J),string:new Z}},V.prototype.delete=function(t){var e=ut(this,t).delete(t);return this.size-=e?1:0,e},V.prototype.get=function(t){return ut(this,t).get(t)},V.prototype.has=function(t){return ut(this,t).has(t)},V.prototype.set=function(t,e){var n=ut(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Q.prototype.clear=function(){this.__data__=new J,this.size=0},Q.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Q.prototype.get=function(t){return this.__data__.get(t)},Q.prototype.has=function(t){return this.__data__.has(t)},Q.prototype.set=function(t,e){var n=this.__data__;if(n instanceof J){var r=n.__data__;if(!H||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new V(r)}return n.set(t,e),this.size=n.size,this};function nt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":L&&L in Object(t)?function(t){var e=A.call(t,L),n=t[L];try{t[L]=void 0;var r=!0}catch(t){}var o=E.call(t);return r&&(e?t[L]=n:delete t[L]),o}(t):function(t){return E.call(t)}(t)}function rt(t){return bt(t)&&nt(t)==i}function ot(t,e,n,r,o){t!==e&&function(t,e,n){for(var r=-1,o=Object(t),i=n(t),u=i.length;u--;){var a=i[++r];if(!1===e(o[a],a,o))break}}(e,function(i,u){if(o||(o=new Q),mt(i))!function(t,e,n,r,o,i,u){var c=lt(t,n),s=lt(e,n),l=u.get(s);if(l)X(t,n,l);else{var f,p,h,d,v,y=i?i(c,s,n+\"\",t,e,u):void 0,g=void 0===y;if(g){var _=dt(s),m=!_&&yt(s),b=!_&&!m&&wt(s);y=s,_||m||b?dt(c)?y=c:bt(v=c)&&vt(v)?y=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}(c):m?(g=!1,y=function(t){return t.slice()}(s)):b?(g=!1,d=new(h=(f=s).buffer).constructor(h.byteLength),new z(d).set(new z(h)),p=d,y=new f.constructor(p,f.byteOffset,f.length)):y=[]:function(t){if(!bt(t)||nt(t)!=a)return!1;var e=T(t);if(null===e)return!0;var n=A.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&I.call(n)==P}(s)||ht(s)?(y=c,ht(c)?y=function(t){return function(t,e,n){var r=!n;n||(n={});for(var o=-1,i=e.length;++o<i;){var u=e[o],a=void 0;void 0===a&&(a=t[u]),r?et(n,u,a):Y(n,u,a)}return n}(t,jt(t))}(c):mt(c)&&!gt(c)||(y=function(t){return\"function\"!=typeof t.constructor||st(t)?{}:G(T(t))}(s))):g=!1}g&&(u.set(s,y),o(y,s,r,i,u),u.delete(s)),X(t,n,y)}}(t,e,u,n,ot,r,o);else{var c=r?r(lt(t,u),i,u+\"\",t,e,o):void 0;void 0===c&&(c=i),X(t,u,c)}},jt)}var it=$?function(t,e){return $(t,\"toString\",{configurable:!0,enumerable:!1,value:(n=e,function(){return n}),writable:!0});var n}:xt;function ut(t,e){var n,r,o=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?o[\"string\"==typeof e?\"string\":\"hash\"]:o.map}function at(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!mt(t)||function(t){return!!C&&C in t}(t))&&(gt(t)?B:c).test(function(t){if(null!=t){try{return I.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(n)?n:void 0}function ct(t,e){var n=typeof t;return!!(e=e??o)&&(\"number\"==n||\"symbol\"!=n&&s.test(t))&&t>-1&&t%1==0&&t<e}function st(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||x)}function lt(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var ft=function(t){var e=0,n=0;return function(){var r=W(),o=16-(r-n);if(n=r,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(it);function pt(t,e){return t===e||t!=t&&e!=e}var ht=rt(function(){return arguments}())?rt:function(t){return bt(t)&&A.call(t,\"callee\")&&!N.call(t,\"callee\")},dt=Array.isArray;function vt(t){return null!=t&&_t(t.length)&&!gt(t)}var yt=q||function(){return!1};function gt(t){if(!mt(t))return!1;var e=nt(t);return e==u||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function _t(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=o}function mt(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=j?function(t){return function(e){return t(e)}}(j):function(t){return bt(t)&&_t(t.length)&&!!l[nt(t)]};function jt(t){return vt(t)?function(t,e){var n=dt(t),r=!n&&ht(t),o=!n&&!r&&yt(t),i=!n&&!r&&!o&&wt(t),u=n||r||o||i,a=u?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],c=a.length;for(var s in t)!e&&!A.call(t,s)||u&&(\"length\"==s||o&&(\"offset\"==s||\"parent\"==s)||i&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||ct(s,c))||a.push(s);return a}(t,!0):function(t){if(!mt(t))return function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}(t);var e=st(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&A.call(t,r))&&n.push(r);return n}(t)}var St,Ot=(St=function(t,e,n){ot(t,e,n)},function(t,e){return ft(function(t,e,n){return e=D(void 0===e?t.length-1:e,0),function(){for(var r=arguments,o=-1,i=D(r.length-e,0),u=Array(i);++o<i;)u[o]=r[e+o];o=-1;for(var a=Array(e+1);++o<e;)a[o]=r[o];return a[e]=n(u),function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}(t,this,a)}}(t,e,xt),t+\"\")}(function(t,e){var n=-1,r=e.length,o=r>1?e[r-1]:void 0,i=r>2?e[2]:void 0;for(o=St.length>3&&\"function\"==typeof o?(r--,o):void 0,i&&function(t,e,n){if(!mt(n))return!1;var r=typeof e;return!!(\"number\"==r?vt(n)&&ct(e,n.length):\"string\"==r&&e in n)&&pt(n[e],t)}(e[0],e[1],i)&&(o=r<3?void 0:o,r=1),t=Object(t);++n<r;){var u=e[n];u&&St(t,u,n)}return t}));function xt(t){return t}t.exports=Ot},9440(t,e,n){t=n.nmd(t),function(){var r,o=\"Expected a function\",i=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,s=1/0,l=9007199254740991,f=NaN,p=4294967295,h=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",v=\"[object Array]\",y=\"[object Boolean]\",g=\"[object Date]\",_=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",j=\"[object Number]\",S=\"[object Object]\",O=\"[object Promise]\",x=\"[object RegExp]\",k=\"[object Set]\",I=\"[object String]\",A=\"[object Symbol]\",C=\"[object WeakMap]\",E=\"[object ArrayBuffer]\",P=\"[object DataView]\",B=\"[object Float32Array]\",M=\"[object Float64Array]\",R=\"[object Int8Array]\",z=\"[object Int16Array]\",T=\"[object Int32Array]\",U=\"[object Uint8Array]\",N=\"[object Uint8ClampedArray]\",F=\"[object Uint16Array]\",L=\"[object Uint32Array]\",$=/\\b__p \\+= '';/g,q=/\\b(__p \\+=) '' \\+/g,D=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,W=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,K=RegExp(W.source),G=RegExp(H.source),Z=/<%-([\\s\\S]+?)%>/g,J=/<%([\\s\\S]+?)%>/g,V=/<%=([\\s\\S]+?)%>/g,Q=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,X=/^\\w*$/,Y=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,et=RegExp(tt.source),nt=/^\\s+/,rt=/\\s/,ot=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,it=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,lt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,ft=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,vt=/^0o[0-7]+$/i,yt=/^(?:0|[1-9]\\d*)$/,gt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,_t=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",jt=\"\\\\u2700-\\\\u27bf\",St=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Ot=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",xt=\"\\\\ufe0e\\\\ufe0f\",kt=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",It=\"[\"+bt+\"]\",At=\"[\"+kt+\"]\",Ct=\"[\"+wt+\"]\",Et=\"\\\\d+\",Pt=\"[\"+jt+\"]\",Bt=\"[\"+St+\"]\",Mt=\"[^\"+bt+kt+Et+jt+St+Ot+\"]\",Rt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",zt=\"[^\"+bt+\"]\",Tt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ut=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Nt=\"[\"+Ot+\"]\",Ft=\"\\\\u200d\",Lt=\"(?:\"+Bt+\"|\"+Mt+\")\",$t=\"(?:\"+Nt+\"|\"+Mt+\")\",qt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Dt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Wt=\"(?:\"+Ct+\"|\"+Rt+\")?\",Ht=\"[\"+xt+\"]?\",Kt=Ht+Wt+\"(?:\"+Ft+\"(?:\"+[zt,Tt,Ut].join(\"|\")+\")\"+Ht+Wt+\")*\",Gt=\"(?:\"+[Pt,Tt,Ut].join(\"|\")+\")\"+Kt,Zt=\"(?:\"+[zt+Ct+\"?\",Ct,Tt,Ut,It].join(\"|\")+\")\",Jt=RegExp(\"['’]\",\"g\"),Vt=RegExp(Ct,\"g\"),Qt=RegExp(Rt+\"(?=\"+Rt+\")|\"+Zt+Kt,\"g\"),Xt=RegExp([Nt+\"?\"+Bt+\"+\"+qt+\"(?=\"+[At,Nt,\"$\"].join(\"|\")+\")\",$t+\"+\"+Dt+\"(?=\"+[At,Nt+Lt,\"$\"].join(\"|\")+\")\",Nt+\"?\"+Lt+\"+\"+qt,Nt+\"+\"+Dt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Et,Gt].join(\"|\"),\"g\"),Yt=RegExp(\"[\"+Ft+bt+wt+xt+\"]\"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ne=-1,re={};re[B]=re[M]=re[R]=re[z]=re[T]=re[U]=re[N]=re[F]=re[L]=!0,re[d]=re[v]=re[E]=re[y]=re[P]=re[g]=re[_]=re[m]=re[w]=re[j]=re[S]=re[x]=re[k]=re[I]=re[C]=!1;var oe={};oe[d]=oe[v]=oe[E]=oe[P]=oe[y]=oe[g]=oe[B]=oe[M]=oe[R]=oe[z]=oe[T]=oe[w]=oe[j]=oe[S]=oe[x]=oe[k]=oe[I]=oe[A]=oe[U]=oe[N]=oe[F]=oe[L]=!0,oe[_]=oe[m]=oe[C]=!1;var ie={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ue=parseFloat,ae=parseInt,ce=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,se=\"object\"==typeof self&&self&&self.Object===Object&&self,le=ce||se||Function(\"return this\")(),fe=e&&!e.nodeType&&e,pe=fe&&t&&!t.nodeType&&t,he=pe&&pe.exports===fe,de=he&&ce.process,ve=function(){try{return pe&&pe.require&&pe.require(\"util\").types||de&&de.binding&&de.binding(\"util\")}catch(t){}}(),ye=ve&&ve.isArrayBuffer,ge=ve&&ve.isDate,_e=ve&&ve.isMap,me=ve&&ve.isRegExp,be=ve&&ve.isSet,we=ve&&ve.isTypedArray;function je(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Se(t,e,n,r){for(var o=-1,i=null==t?0:t.length;++o<i;){var u=t[o];e(r,u,n(u),t)}return r}function Oe(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function xe(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function ke(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function Ie(t,e){for(var n=-1,r=null==t?0:t.length,o=0,i=[];++n<r;){var u=t[n];e(u,n,t)&&(i[o++]=u)}return i}function Ae(t,e){return!(null==t||!t.length)&&Ne(t,e,0)>-1}function Ce(t,e,n){for(var r=-1,o=null==t?0:t.length;++r<o;)if(n(e,t[r]))return!0;return!1}function Ee(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n<r;)o[n]=e(t[n],n,t);return o}function Pe(t,e){for(var n=-1,r=e.length,o=t.length;++n<r;)t[o+n]=e[n];return t}function Be(t,e,n,r){var o=-1,i=null==t?0:t.length;for(r&&i&&(n=t[++o]);++o<i;)n=e(n,t[o],o,t);return n}function Me(t,e,n,r){var o=null==t?0:t.length;for(r&&o&&(n=t[--o]);o--;)n=e(n,t[o],o,t);return n}function Re(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var ze=qe(\"length\");function Te(t,e,n){var r;return n(t,function(t,n,o){if(e(t,n,o))return r=n,!1}),r}function Ue(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i<o;)if(e(t[i],i,t))return i;return-1}function Ne(t,e,n){return e==e?function(t,e,n){for(var r=n-1,o=t.length;++r<o;)if(t[r]===e)return r;return-1}(t,e,n):Ue(t,Le,n)}function Fe(t,e,n,r){for(var o=n-1,i=t.length;++o<i;)if(r(t[o],e))return o;return-1}function Le(t){return t!=t}function $e(t,e){var n=null==t?0:t.length;return n?He(t,e)/n:f}function qe(t){return function(e){return null==e?r:e[t]}}function De(t){return function(e){return null==t?r:t[e]}}function We(t,e,n,r,o){return o(t,function(t,o,i){n=r?(r=!1,t):e(n,t,o,i)}),n}function He(t,e){for(var n,o=-1,i=t.length;++o<i;){var u=e(t[o]);u!==r&&(n=n===r?u:n+u)}return n}function Ke(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function Ge(t){return t?t.slice(0,fn(t)+1).replace(nt,\"\"):t}function Ze(t){return function(e){return t(e)}}function Je(t,e){return Ee(e,function(e){return t[e]})}function Ve(t,e){return t.has(e)}function Qe(t,e){for(var n=-1,r=t.length;++n<r&&Ne(e,t[n],0)>-1;);return n}function Xe(t,e){for(var n=t.length;n--&&Ne(e,t[n],0)>-1;);return n}var Ye=De({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tn=De({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function en(t){return\"\\\\\"+ie[t]}function nn(t){return Yt.test(t)}function rn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function on(t,e){return function(n){return t(e(n))}}function un(t,e){for(var n=-1,r=t.length,o=0,i=[];++n<r;){var a=t[n];a!==e&&a!==u||(t[n]=u,i[o++]=n)}return i}function an(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function cn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function sn(t){return nn(t)?function(t){for(var e=Qt.lastIndex=0;Qt.test(t);)++e;return e}(t):ze(t)}function ln(t){return nn(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.split(\"\")}(t)}function fn(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}var pn=De({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),hn=function t(e){var n,rt=(e=null==e?le:hn.defaults(le.Object(),e,hn.pick(le,ee))).Array,bt=e.Date,wt=e.Error,jt=e.Function,St=e.Math,Ot=e.Object,xt=e.RegExp,kt=e.String,It=e.TypeError,At=rt.prototype,Ct=jt.prototype,Et=Ot.prototype,Pt=e[\"__core-js_shared__\"],Bt=Ct.toString,Mt=Et.hasOwnProperty,Rt=0,zt=(n=/[^.]+$/.exec(Pt&&Pt.keys&&Pt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Tt=Et.toString,Ut=Bt.call(Ot),Nt=le._,Ft=xt(\"^\"+Bt.call(Mt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Lt=he?e.Buffer:r,$t=e.Symbol,qt=e.Uint8Array,Dt=Lt?Lt.allocUnsafe:r,Wt=on(Ot.getPrototypeOf,Ot),Ht=Ot.create,Kt=Et.propertyIsEnumerable,Gt=At.splice,Zt=$t?$t.isConcatSpreadable:r,Qt=$t?$t.iterator:r,Yt=$t?$t.toStringTag:r,ie=function(){try{var t=si(Ot,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ce=e.clearTimeout!==le.clearTimeout&&e.clearTimeout,se=bt&&bt.now!==le.Date.now&&bt.now,fe=e.setTimeout!==le.setTimeout&&e.setTimeout,pe=St.ceil,de=St.floor,ve=Ot.getOwnPropertySymbols,ze=Lt?Lt.isBuffer:r,De=e.isFinite,dn=At.join,vn=on(Ot.keys,Ot),yn=St.max,gn=St.min,_n=bt.now,mn=e.parseInt,bn=St.random,wn=At.reverse,jn=si(e,\"DataView\"),Sn=si(e,\"Map\"),On=si(e,\"Promise\"),xn=si(e,\"Set\"),kn=si(e,\"WeakMap\"),In=si(Ot,\"create\"),An=kn&&new kn,Cn={},En=Ui(jn),Pn=Ui(Sn),Bn=Ui(On),Mn=Ui(xn),Rn=Ui(kn),zn=$t?$t.prototype:r,Tn=zn?zn.valueOf:r,Un=zn?zn.toString:r;function Nn(t){if(ta(t)&&!Du(t)&&!(t instanceof qn)){if(t instanceof $n)return t;if(Mt.call(t,\"__wrapped__\"))return Ni(t)}return new $n(t)}var Fn=function(){function t(){}return function(e){if(!Yu(e))return{};if(Ht)return Ht(e);t.prototype=e;var n=new t;return t.prototype=r,n}}();function Ln(){}function $n(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=r}function qn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function Dn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Wn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Hn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Kn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Hn;++e<n;)this.add(t[e])}function Gn(t){var e=this.__data__=new Wn(t);this.size=e.size}function Zn(t,e){var n=Du(t),r=!n&&qu(t),o=!n&&!r&&Gu(t),i=!n&&!r&&!o&&ca(t),u=n||r||o||i,a=u?Ke(t.length,kt):[],c=a.length;for(var s in t)!e&&!Mt.call(t,s)||u&&(\"length\"==s||o&&(\"offset\"==s||\"parent\"==s)||i&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||yi(s,c))||a.push(s);return a}function Jn(t){var e=t.length;return e?t[Hr(0,e-1)]:r}function Vn(t,e){return Bi(Io(t),ir(e,0,t.length))}function Qn(t){return Bi(Io(t))}function Xn(t,e,n){(n!==r&&!Fu(t[e],n)||n===r&&!(e in t))&&rr(t,e,n)}function Yn(t,e,n){var o=t[e];Mt.call(t,e)&&Fu(o,n)&&(n!==r||e in t)||rr(t,e,n)}function tr(t,e){for(var n=t.length;n--;)if(Fu(t[n][0],e))return n;return-1}function er(t,e,n,r){return lr(t,function(t,o,i){e(r,t,n(t),i)}),r}function nr(t,e){return t&&Ao(e,Ea(e),t)}function rr(t,e,n){\"__proto__\"==e&&ie?ie(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function or(t,e){for(var n=-1,o=e.length,i=rt(o),u=null==t;++n<o;)i[n]=u?r:xa(t,e[n]);return i}function ir(t,e,n){return t==t&&(n!==r&&(t=t<=n?t:n),e!==r&&(t=t>=e?t:e)),t}function ur(t,e,n,o,i,u){var a,c=1&e,s=2&e,l=4&e;if(n&&(a=i?n(t,o,i,u):n(t)),a!==r)return a;if(!Yu(t))return t;var f=Du(t);if(f){if(a=function(t){var e=t.length,n=new t.constructor(e);return e&&\"string\"==typeof t[0]&&Mt.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}(t),!c)return Io(t,a)}else{var p=pi(t),h=p==m||p==b;if(Gu(t))return wo(t,c);if(p==S||p==d||h&&!i){if(a=s||h?{}:di(t),!c)return s?function(t,e){return Ao(t,fi(t),e)}(t,function(t,e){return t&&Ao(e,Pa(e),t)}(a,t)):function(t,e){return Ao(t,li(t),e)}(t,nr(a,t))}else{if(!oe[p])return i?t:{};a=function(t,e,n){var r,o=t.constructor;switch(e){case E:return jo(t);case y:case g:return new o(+t);case P:return function(t,e){var n=e?jo(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case B:case M:case R:case z:case T:case U:case N:case F:case L:return So(t,n);case w:return new o;case j:case I:return new o(t);case x:return function(t){var e=new t.constructor(t.source,ft.exec(t));return e.lastIndex=t.lastIndex,e}(t);case k:return new o;case A:return r=t,Tn?Ot(Tn.call(r)):{}}}(t,p,c)}}u||(u=new Gn);var v=u.get(t);if(v)return v;u.set(t,a),ia(t)?t.forEach(function(r){a.add(ur(r,e,n,r,t,u))}):ea(t)&&t.forEach(function(r,o){a.set(o,ur(r,e,n,o,t,u))});var _=f?r:(l?s?ni:ei:s?Pa:Ea)(t);return Oe(_||t,function(r,o){_&&(r=t[o=r]),Yn(a,o,ur(r,e,n,o,t,u))}),a}function ar(t,e,n){var o=n.length;if(null==t)return!o;for(t=Ot(t);o--;){var i=n[o],u=e[i],a=t[i];if(a===r&&!(i in t)||!u(a))return!1}return!0}function cr(t,e,n){if(\"function\"!=typeof t)throw new It(o);return Ai(function(){t.apply(r,n)},e)}function sr(t,e,n,r){var o=-1,i=Ae,u=!0,a=t.length,c=[],s=e.length;if(!a)return c;n&&(e=Ee(e,Ze(n))),r?(i=Ce,u=!1):e.length>=200&&(i=Ve,u=!1,e=new Kn(e));t:for(;++o<a;){var l=t[o],f=null==n?l:n(l);if(l=r||0!==l?l:0,u&&f==f){for(var p=s;p--;)if(e[p]===f)continue t;c.push(l)}else i(e,f,r)||c.push(l)}return c}Nn.templateSettings={escape:Z,evaluate:J,interpolate:V,variable:\"\",imports:{_:Nn}},Nn.prototype=Ln.prototype,Nn.prototype.constructor=Nn,$n.prototype=Fn(Ln.prototype),$n.prototype.constructor=$n,qn.prototype=Fn(Ln.prototype),qn.prototype.constructor=qn,Dn.prototype.clear=function(){this.__data__=In?In(null):{},this.size=0},Dn.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Dn.prototype.get=function(t){var e=this.__data__;if(In){var n=e[t];return n===i?r:n}return Mt.call(e,t)?e[t]:r},Dn.prototype.has=function(t){var e=this.__data__;return In?e[t]!==r:Mt.call(e,t)},Dn.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=In&&e===r?i:e,this},Wn.prototype.clear=function(){this.__data__=[],this.size=0},Wn.prototype.delete=function(t){var e=this.__data__,n=tr(e,t);return!(n<0||(n==e.length-1?e.pop():Gt.call(e,n,1),--this.size,0))},Wn.prototype.get=function(t){var e=this.__data__,n=tr(e,t);return n<0?r:e[n][1]},Wn.prototype.has=function(t){return tr(this.__data__,t)>-1},Wn.prototype.set=function(t,e){var n=this.__data__,r=tr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Hn.prototype.clear=function(){this.size=0,this.__data__={hash:new Dn,map:new(Sn||Wn),string:new Dn}},Hn.prototype.delete=function(t){var e=ai(this,t).delete(t);return this.size-=e?1:0,e},Hn.prototype.get=function(t){return ai(this,t).get(t)},Hn.prototype.has=function(t){return ai(this,t).has(t)},Hn.prototype.set=function(t,e){var n=ai(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Kn.prototype.add=Kn.prototype.push=function(t){return this.__data__.set(t,i),this},Kn.prototype.has=function(t){return this.__data__.has(t)},Gn.prototype.clear=function(){this.__data__=new Wn,this.size=0},Gn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Gn.prototype.get=function(t){return this.__data__.get(t)},Gn.prototype.has=function(t){return this.__data__.has(t)},Gn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Wn){var r=n.__data__;if(!Sn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Hn(r)}return n.set(t,e),this.size=n.size,this};var lr=Po(_r),fr=Po(mr,!0);function pr(t,e){var n=!0;return lr(t,function(t,r,o){return n=!!e(t,r,o)}),n}function hr(t,e,n){for(var o=-1,i=t.length;++o<i;){var u=t[o],a=e(u);if(null!=a&&(c===r?a==a&&!aa(a):n(a,c)))var c=a,s=u}return s}function dr(t,e){var n=[];return lr(t,function(t,r,o){e(t,r,o)&&n.push(t)}),n}function vr(t,e,n,r,o){var i=-1,u=t.length;for(n||(n=vi),o||(o=[]);++i<u;){var a=t[i];e>0&&n(a)?e>1?vr(a,e-1,n,r,o):Pe(o,a):r||(o[o.length]=a)}return o}var yr=Bo(),gr=Bo(!0);function _r(t,e){return t&&yr(t,e,Ea)}function mr(t,e){return t&&gr(t,e,Ea)}function br(t,e){return Ie(e,function(e){return Vu(t[e])})}function wr(t,e){for(var n=0,o=(e=go(e,t)).length;null!=t&&n<o;)t=t[Ti(e[n++])];return n&&n==o?t:r}function jr(t,e,n){var r=e(t);return Du(t)?r:Pe(r,n(t))}function Sr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Yt&&Yt in Ot(t)?function(t){var e=Mt.call(t,Yt),n=t[Yt];try{t[Yt]=r;var o=!0}catch(t){}var i=Tt.call(t);return o&&(e?t[Yt]=n:delete t[Yt]),i}(t):function(t){return Tt.call(t)}(t)}function Or(t,e){return t>e}function xr(t,e){return null!=t&&Mt.call(t,e)}function kr(t,e){return null!=t&&e in Ot(t)}function Ir(t,e,n){for(var o=n?Ce:Ae,i=t[0].length,u=t.length,a=u,c=rt(u),s=1/0,l=[];a--;){var f=t[a];a&&e&&(f=Ee(f,Ze(e))),s=gn(f.length,s),c[a]=!n&&(e||i>=120&&f.length>=120)?new Kn(a&&f):r}f=t[0];var p=-1,h=c[0];t:for(;++p<i&&l.length<s;){var d=f[p],v=e?e(d):d;if(d=n||0!==d?d:0,!(h?Ve(h,v):o(l,v,n))){for(a=u;--a;){var y=c[a];if(!(y?Ve(y,v):o(t[a],v,n)))continue t}h&&h.push(v),l.push(d)}}return l}function Ar(t,e,n){var o=null==(t=xi(t,e=go(e,t)))?t:t[Ti(Ji(e))];return null==o?r:je(o,t,n)}function Cr(t){return ta(t)&&Sr(t)==d}function Er(t,e,n,o,i){return t===e||(null==t||null==e||!ta(t)&&!ta(e)?t!=t&&e!=e:function(t,e,n,o,i,u){var a=Du(t),c=Du(e),s=a?v:pi(t),l=c?v:pi(e),f=(s=s==d?S:s)==S,p=(l=l==d?S:l)==S,h=s==l;if(h&&Gu(t)){if(!Gu(e))return!1;a=!0,f=!1}if(h&&!f)return u||(u=new Gn),a||ca(t)?Yo(t,e,n,o,i,u):function(t,e,n,r,o,i,u){switch(n){case P:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case E:return!(t.byteLength!=e.byteLength||!i(new qt(t),new qt(e)));case y:case g:case j:return Fu(+t,+e);case _:return t.name==e.name&&t.message==e.message;case x:case I:return t==e+\"\";case w:var a=rn;case k:var c=1&r;if(a||(a=an),t.size!=e.size&&!c)return!1;var s=u.get(t);if(s)return s==e;r|=2,u.set(t,e);var l=Yo(a(t),a(e),r,o,i,u);return u.delete(t),l;case A:if(Tn)return Tn.call(t)==Tn.call(e)}return!1}(t,e,s,n,o,i,u);if(!(1&n)){var m=f&&Mt.call(t,\"__wrapped__\"),b=p&&Mt.call(e,\"__wrapped__\");if(m||b){var O=m?t.value():t,C=b?e.value():e;return u||(u=new Gn),i(O,C,n,o,u)}}return!!h&&(u||(u=new Gn),function(t,e,n,o,i,u){var a=1&n,c=ei(t),s=c.length;if(s!=ei(e).length&&!a)return!1;for(var l=s;l--;){var f=c[l];if(!(a?f in e:Mt.call(e,f)))return!1}var p=u.get(t),h=u.get(e);if(p&&h)return p==e&&h==t;var d=!0;u.set(t,e),u.set(e,t);for(var v=a;++l<s;){var y=t[f=c[l]],g=e[f];if(o)var _=a?o(g,y,f,e,t,u):o(y,g,f,t,e,u);if(!(_===r?y===g||i(y,g,n,o,u):_)){d=!1;break}v||(v=\"constructor\"==f)}if(d&&!v){var m=t.constructor,b=e.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return u.delete(t),u.delete(e),d}(t,e,n,o,i,u))}(t,e,n,o,Er,i))}function Pr(t,e,n,o){var i=n.length,u=i,a=!o;if(null==t)return!u;for(t=Ot(t);i--;){var c=n[i];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++i<u;){var s=(c=n[i])[0],l=t[s],f=c[1];if(a&&c[2]){if(l===r&&!(s in t))return!1}else{var p=new Gn;if(o)var h=o(l,f,s,t,e,p);if(!(h===r?Er(f,l,3,o,p):h))return!1}}return!0}function Br(t){return!(!Yu(t)||(e=t,zt&&zt in e))&&(Vu(t)?Ft:dt).test(Ui(t));var e}function Mr(t){return\"function\"==typeof t?t:null==t?nc:\"object\"==typeof t?Du(t)?Nr(t[0],t[1]):Ur(t):fc(t)}function Rr(t){if(!wi(t))return vn(t);var e=[];for(var n in Ot(t))Mt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function zr(t,e){return t<e}function Tr(t,e){var n=-1,r=Hu(t)?rt(t.length):[];return lr(t,function(t,o,i){r[++n]=e(t,o,i)}),r}function Ur(t){var e=ci(t);return 1==e.length&&e[0][2]?Si(e[0][0],e[0][1]):function(n){return n===t||Pr(n,t,e)}}function Nr(t,e){return _i(t)&&ji(e)?Si(Ti(t),e):function(n){var o=xa(n,t);return o===r&&o===e?ka(n,t):Er(e,o,3)}}function Fr(t,e,n,o,i){t!==e&&yr(e,function(u,a){if(i||(i=new Gn),Yu(u))!function(t,e,n,o,i,u,a){var c=ki(t,n),s=ki(e,n),l=a.get(s);if(l)Xn(t,n,l);else{var f=u?u(c,s,n+\"\",t,e,a):r,p=f===r;if(p){var h=Du(s),d=!h&&Gu(s),v=!h&&!d&&ca(s);f=s,h||d||v?Du(c)?f=c:Ku(c)?f=Io(c):d?(p=!1,f=wo(s,!0)):v?(p=!1,f=So(s,!0)):f=[]:ra(s)||qu(s)?(f=c,qu(c)?f=ya(c):Yu(c)&&!Vu(c)||(f=di(s))):p=!1}p&&(a.set(s,f),i(f,s,o,u,a),a.delete(s)),Xn(t,n,f)}}(t,e,a,n,Fr,o,i);else{var c=o?o(ki(t,a),u,a+\"\",t,e,i):r;c===r&&(c=u),Xn(t,a,c)}},Pa)}function Lr(t,e){var n=t.length;if(n)return yi(e+=e<0?n:0,n)?t[e]:r}function $r(t,e,n){e=e.length?Ee(e,function(t){return Du(t)?function(e){return wr(e,1===t.length?t[0]:t)}:t}):[nc];var r=-1;e=Ee(e,Ze(ui()));var o=Tr(t,function(t,n,o){var i=Ee(e,function(e){return e(t)});return{criteria:i,index:++r,value:t}});return function(t){var e=t.length;for(t.sort(function(t,e){return function(t,e,n){for(var r=-1,o=t.criteria,i=e.criteria,u=o.length,a=n.length;++r<u;){var c=Oo(o[r],i[r]);if(c)return r>=a?c:c*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)});e--;)t[e]=t[e].value;return t}(o)}function qr(t,e,n){for(var r=-1,o=e.length,i={};++r<o;){var u=e[r],a=wr(t,u);n(a,u)&&Vr(i,go(u,t),a)}return i}function Dr(t,e,n,r){var o=r?Fe:Ne,i=-1,u=e.length,a=t;for(t===e&&(e=Io(e)),n&&(a=Ee(t,Ze(n)));++i<u;)for(var c=0,s=e[i],l=n?n(s):s;(c=o(a,l,c,r))>-1;)a!==t&&Gt.call(a,c,1),Gt.call(t,c,1);return t}function Wr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var o=e[n];if(n==r||o!==i){var i=o;yi(o)?Gt.call(t,o,1):co(t,o)}}return t}function Hr(t,e){return t+de(bn()*(e-t+1))}function Kr(t,e){var n=\"\";if(!t||e<1||e>l)return n;do{e%2&&(n+=t),(e=de(e/2))&&(t+=t)}while(e);return n}function Gr(t,e){return Ci(Oi(t,e,nc),t+\"\")}function Zr(t){return Jn(Fa(t))}function Jr(t,e){var n=Fa(t);return Bi(n,ir(e,0,n.length))}function Vr(t,e,n,o){if(!Yu(t))return t;for(var i=-1,u=(e=go(e,t)).length,a=u-1,c=t;null!=c&&++i<u;){var s=Ti(e[i]),l=n;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(i!=a){var f=c[s];(l=o?o(f,s,c):r)===r&&(l=Yu(f)?f:yi(e[i+1])?[]:{})}Yn(c,s,l),c=c[s]}return t}var Qr=An?function(t,e){return An.set(t,e),t}:nc,Xr=ie?function(t,e){return ie(t,\"toString\",{configurable:!0,enumerable:!1,value:Ya(e),writable:!0})}:nc;function Yr(t){return Bi(Fa(t))}function to(t,e,n){var r=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(n=n>o?o:n)<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var i=rt(o);++r<o;)i[r]=t[r+e];return i}function eo(t,e){var n;return lr(t,function(t,r,o){return!(n=e(t,r,o))}),!!n}function no(t,e,n){var r=0,o=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&o<=2147483647){for(;r<o;){var i=r+o>>>1,u=t[i];null!==u&&!aa(u)&&(n?u<=e:u<e)?r=i+1:o=i}return o}return ro(t,e,nc,n)}function ro(t,e,n,o){var i=0,u=null==t?0:t.length;if(0===u)return 0;for(var a=(e=n(e))!=e,c=null===e,s=aa(e),l=e===r;i<u;){var f=de((i+u)/2),p=n(t[f]),h=p!==r,d=null===p,v=p==p,y=aa(p);if(a)var g=o||v;else g=l?v&&(o||h):c?v&&h&&(o||!d):s?v&&h&&!d&&(o||!y):!d&&!y&&(o?p<=e:p<e);g?i=f+1:u=f}return gn(u,4294967294)}function oo(t,e){for(var n=-1,r=t.length,o=0,i=[];++n<r;){var u=t[n],a=e?e(u):u;if(!n||!Fu(a,c)){var c=a;i[o++]=0===u?0:u}}return i}function io(t){return\"number\"==typeof t?t:aa(t)?f:+t}function uo(t){if(\"string\"==typeof t)return t;if(Du(t))return Ee(t,uo)+\"\";if(aa(t))return Un?Un.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function ao(t,e,n){var r=-1,o=Ae,i=t.length,u=!0,a=[],c=a;if(n)u=!1,o=Ce;else if(i>=200){var s=e?null:Go(t);if(s)return an(s);u=!1,o=Ve,c=new Kn}else c=e?[]:a;t:for(;++r<i;){var l=t[r],f=e?e(l):l;if(l=n||0!==l?l:0,u&&f==f){for(var p=c.length;p--;)if(c[p]===f)continue t;e&&c.push(f),a.push(l)}else o(c,f,n)||(c!==a&&c.push(f),a.push(l))}return a}function co(t,e){var n=-1,r=(e=go(e,t)).length;if(!r)return!0;for(;++n<r;){var o=Ti(e[n]);if(\"__proto__\"===o&&!Mt.call(t,\"__proto__\"))return!1;if((\"constructor\"===o||\"prototype\"===o)&&n<r-1)return!1}var i=xi(t,e);return null==i||delete i[Ti(Ji(e))]}function so(t,e,n,r){return Vr(t,e,n(wr(t,e)),r)}function lo(t,e,n,r){for(var o=t.length,i=r?o:-1;(r?i--:++i<o)&&e(t[i],i,t););return n?to(t,r?0:i,r?i+1:o):to(t,r?i+1:0,r?o:i)}function fo(t,e){var n=t;return n instanceof qn&&(n=n.value()),Be(e,function(t,e){return e.func.apply(e.thisArg,Pe([t],e.args))},n)}function po(t,e,n){var r=t.length;if(r<2)return r?ao(t[0]):[];for(var o=-1,i=rt(r);++o<r;)for(var u=t[o],a=-1;++a<r;)a!=o&&(i[o]=sr(i[o]||u,t[a],e,n));return ao(vr(i,1),e,n)}function ho(t,e,n){for(var o=-1,i=t.length,u=e.length,a={};++o<i;){var c=o<u?e[o]:r;n(a,t[o],c)}return a}function vo(t){return Ku(t)?t:[]}function yo(t){return\"function\"==typeof t?t:nc}function go(t,e){return Du(t)?t:_i(t,e)?[t]:zi(ga(t))}var _o=Gr;function mo(t,e,n){var o=t.length;return n=n===r?o:n,!e&&n>=o?t:to(t,e,n)}var bo=ce||function(t){return le.clearTimeout(t)};function wo(t,e){if(e)return t.slice();var n=t.length,r=Dt?Dt(n):new t.constructor(n);return t.copy(r),r}function jo(t){var e=new t.constructor(t.byteLength);return new qt(e).set(new qt(t)),e}function So(t,e){var n=e?jo(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Oo(t,e){if(t!==e){var n=t!==r,o=null===t,i=t==t,u=aa(t),a=e!==r,c=null===e,s=e==e,l=aa(e);if(!c&&!l&&!u&&t>e||u&&a&&s&&!c&&!l||o&&a&&s||!n&&s||!i)return 1;if(!o&&!u&&!l&&t<e||l&&n&&i&&!o&&!u||c&&n&&i||!a&&i||!s)return-1}return 0}function xo(t,e,n,r){for(var o=-1,i=t.length,u=n.length,a=-1,c=e.length,s=yn(i-u,0),l=rt(c+s),f=!r;++a<c;)l[a]=e[a];for(;++o<u;)(f||o<i)&&(l[n[o]]=t[o]);for(;s--;)l[a++]=t[o++];return l}function ko(t,e,n,r){for(var o=-1,i=t.length,u=-1,a=n.length,c=-1,s=e.length,l=yn(i-a,0),f=rt(l+s),p=!r;++o<l;)f[o]=t[o];for(var h=o;++c<s;)f[h+c]=e[c];for(;++u<a;)(p||o<i)&&(f[h+n[u]]=t[o++]);return f}function Io(t,e){var n=-1,r=t.length;for(e||(e=rt(r));++n<r;)e[n]=t[n];return e}function Ao(t,e,n,o){var i=!n;n||(n={});for(var u=-1,a=e.length;++u<a;){var c=e[u],s=o?o(n[c],t[c],c,n,t):r;s===r&&(s=t[c]),i?rr(n,c,s):Yn(n,c,s)}return n}function Co(t,e){return function(n,r){var o=Du(n)?Se:er,i=e?e():{};return o(n,t,ui(r,2),i)}}function Eo(t){return Gr(function(e,n){var o=-1,i=n.length,u=i>1?n[i-1]:r,a=i>2?n[2]:r;for(u=t.length>3&&\"function\"==typeof u?(i--,u):r,a&&gi(n[0],n[1],a)&&(u=i<3?r:u,i=1),e=Ot(e);++o<i;){var c=n[o];c&&t(e,c,o,u)}return e})}function Po(t,e){return function(n,r){if(null==n)return n;if(!Hu(n))return t(n,r);for(var o=n.length,i=e?o:-1,u=Ot(n);(e?i--:++i<o)&&!1!==r(u[i],i,u););return n}}function Bo(t){return function(e,n,r){for(var o=-1,i=Ot(e),u=r(e),a=u.length;a--;){var c=u[t?a:++o];if(!1===n(i[c],c,i))break}return e}}function Mo(t){return function(e){var n=nn(e=ga(e))?ln(e):r,o=n?n[0]:e.charAt(0),i=n?mo(n,1).join(\"\"):e.slice(1);return o[t]()+i}}function Ro(t){return function(e){return Be(Va(qa(e).replace(Jt,\"\")),t,\"\")}}function zo(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Fn(t.prototype),r=t.apply(n,e);return Yu(r)?r:n}}function To(t){return function(e,n,o){var i=Ot(e);if(!Hu(e)){var u=ui(n,3);e=Ea(e),n=function(t){return u(i[t],t,i)}}var a=t(e,n,o);return a>-1?i[u?e[a]:a]:r}}function Uo(t){return ti(function(e){var n=e.length,i=n,u=$n.prototype.thru;for(t&&e.reverse();i--;){var a=e[i];if(\"function\"!=typeof a)throw new It(o);if(u&&!c&&\"wrapper\"==oi(a))var c=new $n([],!0)}for(i=c?i:n;++i<n;){var s=oi(a=e[i]),l=\"wrapper\"==s?ri(a):r;c=l&&mi(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?c[oi(l[0])].apply(c,l[3]):1==a.length&&mi(a)?c[s]():c.thru(a)}return function(){var t=arguments,r=t[0];if(c&&1==t.length&&Du(r))return c.plant(r).value();for(var o=0,i=n?e[o].apply(this,t):r;++o<n;)i=e[o].call(this,i);return i}})}function No(t,e,n,o,i,u,a,s,l,f){var p=e&c,h=1&e,d=2&e,v=24&e,y=512&e,g=d?r:zo(t);return function c(){for(var _=arguments.length,m=rt(_),b=_;b--;)m[b]=arguments[b];if(v)var w=ii(c),j=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(m,w);if(o&&(m=xo(m,o,i,v)),u&&(m=ko(m,u,a,v)),_-=j,v&&_<f){var S=un(m,w);return Ho(t,e,No,c.placeholder,n,m,S,s,l,f-_)}var O=h?n:this,x=d?O[t]:t;return _=m.length,s?m=function(t,e){for(var n=t.length,o=gn(e.length,n),i=Io(t);o--;){var u=e[o];t[o]=yi(u,n)?i[u]:r}return t}(m,s):y&&_>1&&m.reverse(),p&&l<_&&(m.length=l),this&&this!==le&&this instanceof c&&(x=g||zo(x)),x.apply(O,m)}}function Fo(t,e){return function(n,r){return function(t,e,n,r){return _r(t,function(t,o,i){e(r,n(t),o,i)}),r}(n,t,e(r),{})}}function Lo(t,e){return function(n,o){var i;if(n===r&&o===r)return e;if(n!==r&&(i=n),o!==r){if(i===r)return o;\"string\"==typeof n||\"string\"==typeof o?(n=uo(n),o=uo(o)):(n=io(n),o=io(o)),i=t(n,o)}return i}}function $o(t){return ti(function(e){return e=Ee(e,Ze(ui())),Gr(function(n){var r=this;return t(e,function(t){return je(t,r,n)})})})}function qo(t,e){var n=(e=e===r?\" \":uo(e)).length;if(n<2)return n?Kr(e,t):e;var o=Kr(e,pe(t/sn(e)));return nn(e)?mo(ln(o),0,t).join(\"\"):o.slice(0,t)}function Do(t){return function(e,n,o){return o&&\"number\"!=typeof o&&gi(e,n,o)&&(n=o=r),e=pa(e),n===r?(n=e,e=0):n=pa(n),function(t,e,n,r){for(var o=-1,i=yn(pe((e-t)/(n||1)),0),u=rt(i);i--;)u[r?i:++o]=t,t+=n;return u}(e,n,o=o===r?e<n?1:-1:pa(o),t)}}function Wo(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=va(e),n=va(n)),t(e,n)}}function Ho(t,e,n,o,i,u,c,s,l,f){var p=8&e;e|=p?a:64,4&(e&=~(p?64:a))||(e&=-4);var h=[t,e,i,p?u:r,p?c:r,p?r:u,p?r:c,s,l,f],d=n.apply(r,h);return mi(t)&&Ii(d,h),d.placeholder=o,Ei(d,t,e)}function Ko(t){var e=St[t];return function(t,n){if(t=va(t),(n=null==n?0:gn(ha(n),292))&&De(t)){var r=(ga(t)+\"e\").split(\"e\");return+((r=(ga(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var Go=xn&&1/an(new xn([,-0]))[1]==s?function(t){return new xn(t)}:ac;function Zo(t){return function(e){var n=pi(e);return n==w?rn(e):n==k?cn(e):function(t,e){return Ee(e,function(e){return[e,t[e]]})}(e,t(e))}}function Jo(t,e,n,i,s,l,f,p){var h=2&e;if(!h&&\"function\"!=typeof t)throw new It(o);var d=i?i.length:0;if(d||(e&=-97,i=s=r),f=f===r?f:yn(ha(f),0),p=p===r?p:ha(p),d-=s?s.length:0,64&e){var v=i,y=s;i=s=r}var g=h?r:ri(t),_=[t,e,n,i,s,v,y,l,f,p];if(g&&function(t,e){var n=t[1],r=e[1],o=n|r,i=o<131,a=r==c&&8==n||r==c&&256==n&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!i&&!a)return t;1&r&&(t[2]=e[2],o|=1&n?0:4);var s=e[3];if(s){var l=t[3];t[3]=l?xo(l,s,e[4]):s,t[4]=l?un(t[3],u):e[4]}(s=e[5])&&(l=t[5],t[5]=l?ko(l,s,e[6]):s,t[6]=l?un(t[5],u):e[6]),(s=e[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?e[8]:gn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=o}(_,g),t=_[0],e=_[1],n=_[2],i=_[3],s=_[4],!(p=_[9]=_[9]===r?h?0:t.length:yn(_[9]-d,0))&&24&e&&(e&=-25),e&&1!=e)m=8==e||16==e?function(t,e,n){var o=zo(t);return function i(){for(var u=arguments.length,a=rt(u),c=u,s=ii(i);c--;)a[c]=arguments[c];var l=u<3&&a[0]!==s&&a[u-1]!==s?[]:un(a,s);return(u-=l.length)<n?Ho(t,e,No,i.placeholder,r,a,l,r,r,n-u):je(this&&this!==le&&this instanceof i?o:t,this,a)}}(t,e,p):e!=a&&33!=e||s.length?No.apply(r,_):function(t,e,n,r){var o=1&e,i=zo(t);return function e(){for(var u=-1,a=arguments.length,c=-1,s=r.length,l=rt(s+a),f=this&&this!==le&&this instanceof e?i:t;++c<s;)l[c]=r[c];for(;a--;)l[c++]=arguments[++u];return je(f,o?n:this,l)}}(t,e,n,i);else var m=function(t,e,n){var r=1&e,o=zo(t);return function e(){return(this&&this!==le&&this instanceof e?o:t).apply(r?n:this,arguments)}}(t,e,n);return Ei((g?Qr:Ii)(m,_),t,e)}function Vo(t,e,n,o){return t===r||Fu(t,Et[n])&&!Mt.call(o,n)?e:t}function Qo(t,e,n,o,i,u){return Yu(t)&&Yu(e)&&(u.set(e,t),Fr(t,e,r,Qo,u),u.delete(e)),t}function Xo(t){return ra(t)?r:t}function Yo(t,e,n,o,i,u){var a=1&n,c=t.length,s=e.length;if(c!=s&&!(a&&s>c))return!1;var l=u.get(t),f=u.get(e);if(l&&f)return l==e&&f==t;var p=-1,h=!0,d=2&n?new Kn:r;for(u.set(t,e),u.set(e,t);++p<c;){var v=t[p],y=e[p];if(o)var g=a?o(y,v,p,e,t,u):o(v,y,p,t,e,u);if(g!==r){if(g)continue;h=!1;break}if(d){if(!Re(e,function(t,e){if(!Ve(d,e)&&(v===t||i(v,t,n,o,u)))return d.push(e)})){h=!1;break}}else if(v!==y&&!i(v,y,n,o,u)){h=!1;break}}return u.delete(t),u.delete(e),h}function ti(t){return Ci(Oi(t,r,Wi),t+\"\")}function ei(t){return jr(t,Ea,li)}function ni(t){return jr(t,Pa,fi)}var ri=An?function(t){return An.get(t)}:ac;function oi(t){for(var e=t.name+\"\",n=Cn[e],r=Mt.call(Cn,e)?n.length:0;r--;){var o=n[r],i=o.func;if(null==i||i==t)return o.name}return e}function ii(t){return(Mt.call(Nn,\"placeholder\")?Nn:t).placeholder}function ui(){var t=Nn.iteratee||rc;return t=t===rc?Mr:t,arguments.length?t(arguments[0],arguments[1]):t}function ai(t,e){var n,r,o=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?o[\"string\"==typeof e?\"string\":\"hash\"]:o.map}function ci(t){for(var e=Ea(t),n=e.length;n--;){var r=e[n],o=t[r];e[n]=[r,o,ji(o)]}return e}function si(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return Br(n)?n:r}var li=ve?function(t){return null==t?[]:(t=Ot(t),Ie(ve(t),function(e){return Kt.call(t,e)}))}:dc,fi=ve?function(t){for(var e=[];t;)Pe(e,li(t)),t=Wt(t);return e}:dc,pi=Sr;function hi(t,e,n){for(var r=-1,o=(e=go(e,t)).length,i=!1;++r<o;){var u=Ti(e[r]);if(!(i=null!=t&&n(t,u)))break;t=t[u]}return i||++r!=o?i:!!(o=null==t?0:t.length)&&Xu(o)&&yi(u,o)&&(Du(t)||qu(t))}function di(t){return\"function\"!=typeof t.constructor||wi(t)?{}:Fn(Wt(t))}function vi(t){return Du(t)||qu(t)||!!(Zt&&t&&t[Zt])}function yi(t,e){var n=typeof t;return!!(e=e??l)&&(\"number\"==n||\"symbol\"!=n&&yt.test(t))&&t>-1&&t%1==0&&t<e}function gi(t,e,n){if(!Yu(n))return!1;var r=typeof e;return!!(\"number\"==r?Hu(n)&&yi(e,n.length):\"string\"==r&&e in n)&&Fu(n[e],t)}function _i(t,e){if(Du(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!aa(t))||X.test(t)||!Q.test(t)||null!=e&&t in Ot(e)}function mi(t){var e=oi(t),n=Nn[e];if(\"function\"!=typeof n||!(e in qn.prototype))return!1;if(t===n)return!0;var r=ri(n);return!!r&&t===r[0]}(jn&&pi(new jn(new ArrayBuffer(1)))!=P||Sn&&pi(new Sn)!=w||On&&pi(On.resolve())!=O||xn&&pi(new xn)!=k||kn&&pi(new kn)!=C)&&(pi=function(t){var e=Sr(t),n=e==S?t.constructor:r,o=n?Ui(n):\"\";if(o)switch(o){case En:return P;case Pn:return w;case Bn:return O;case Mn:return k;case Rn:return C}return e});var bi=Pt?Vu:vc;function wi(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||Et)}function ji(t){return t==t&&!Yu(t)}function Si(t,e){return function(n){return null!=n&&n[t]===e&&(e!==r||t in Ot(n))}}function Oi(t,e,n){return e=yn(e===r?t.length-1:e,0),function(){for(var r=arguments,o=-1,i=yn(r.length-e,0),u=rt(i);++o<i;)u[o]=r[e+o];o=-1;for(var a=rt(e+1);++o<e;)a[o]=r[o];return a[e]=n(u),je(t,this,a)}}function xi(t,e){return e.length<2?t:wr(t,to(e,0,-1))}function ki(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var Ii=Pi(Qr),Ai=fe||function(t,e){return le.setTimeout(t,e)},Ci=Pi(Xr);function Ei(t,e,n){var r=e+\"\";return Ci(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(ot,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return Oe(h,function(n){var r=\"_.\"+n[0];e&n[1]&&!Ae(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(it);return e?e[1].split(ut):[]}(r),n)))}function Pi(t){var e=0,n=0;return function(){var o=_n(),i=16-(o-n);if(n=o,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(r,arguments)}}function Bi(t,e){var n=-1,o=t.length,i=o-1;for(e=e===r?o:e;++n<e;){var u=Hr(n,i),a=t[u];t[u]=t[n],t[n]=a}return t.length=e,t}var Mi,Ri,zi=(Mi=Mu(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(Y,function(t,n,r,o){e.push(r?o.replace(st,\"$1\"):n||t)}),e},function(t){return 500===Ri.size&&Ri.clear(),t}),Ri=Mi.cache,Mi);function Ti(t){if(\"string\"==typeof t||aa(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Ui(t){if(null!=t){try{return Bt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Ni(t){if(t instanceof qn)return t.clone();var e=new $n(t.__wrapped__,t.__chain__);return e.__actions__=Io(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Fi=Gr(function(t,e){return Ku(t)?sr(t,vr(e,1,Ku,!0)):[]}),Li=Gr(function(t,e){var n=Ji(e);return Ku(n)&&(n=r),Ku(t)?sr(t,vr(e,1,Ku,!0),ui(n,2)):[]}),$i=Gr(function(t,e){var n=Ji(e);return Ku(n)&&(n=r),Ku(t)?sr(t,vr(e,1,Ku,!0),r,n):[]});function qi(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var o=null==n?0:ha(n);return o<0&&(o=yn(r+o,0)),Ue(t,ui(e,3),o)}function Di(t,e,n){var o=null==t?0:t.length;if(!o)return-1;var i=o-1;return n!==r&&(i=ha(n),i=n<0?yn(o+i,0):gn(i,o-1)),Ue(t,ui(e,3),i,!0)}function Wi(t){return null!=t&&t.length?vr(t,1):[]}function Hi(t){return t&&t.length?t[0]:r}var Ki=Gr(function(t){var e=Ee(t,vo);return e.length&&e[0]===t[0]?Ir(e):[]}),Gi=Gr(function(t){var e=Ji(t),n=Ee(t,vo);return e===Ji(n)?e=r:n.pop(),n.length&&n[0]===t[0]?Ir(n,ui(e,2)):[]}),Zi=Gr(function(t){var e=Ji(t),n=Ee(t,vo);return(e=\"function\"==typeof e?e:r)&&n.pop(),n.length&&n[0]===t[0]?Ir(n,r,e):[]});function Ji(t){var e=null==t?0:t.length;return e?t[e-1]:r}var Vi=Gr(Qi);function Qi(t,e){return t&&t.length&&e&&e.length?Dr(t,e):t}var Xi=ti(function(t,e){var n=null==t?0:t.length,r=or(t,e);return Wr(t,Ee(e,function(t){return yi(t,n)?+t:t}).sort(Oo)),r});function Yi(t){return null==t?t:wn.call(t)}var tu=Gr(function(t){return ao(vr(t,1,Ku,!0))}),eu=Gr(function(t){var e=Ji(t);return Ku(e)&&(e=r),ao(vr(t,1,Ku,!0),ui(e,2))}),nu=Gr(function(t){var e=Ji(t);return e=\"function\"==typeof e?e:r,ao(vr(t,1,Ku,!0),r,e)});function ru(t){if(!t||!t.length)return[];var e=0;return t=Ie(t,function(t){if(Ku(t))return e=yn(t.length,e),!0}),Ke(e,function(e){return Ee(t,qe(e))})}function ou(t,e){if(!t||!t.length)return[];var n=ru(t);return null==e?n:Ee(n,function(t){return je(e,r,t)})}var iu=Gr(function(t,e){return Ku(t)?sr(t,e):[]}),uu=Gr(function(t){return po(Ie(t,Ku))}),au=Gr(function(t){var e=Ji(t);return Ku(e)&&(e=r),po(Ie(t,Ku),ui(e,2))}),cu=Gr(function(t){var e=Ji(t);return e=\"function\"==typeof e?e:r,po(Ie(t,Ku),r,e)}),su=Gr(ru),lu=Gr(function(t){var e=t.length,n=e>1?t[e-1]:r;return n=\"function\"==typeof n?(t.pop(),n):r,ou(t,n)});function fu(t){var e=Nn(t);return e.__chain__=!0,e}function pu(t,e){return e(t)}var hu=ti(function(t){var e=t.length,n=e?t[0]:0,o=this.__wrapped__,i=function(e){return or(e,t)};return!(e>1||this.__actions__.length)&&o instanceof qn&&yi(n)?((o=o.slice(n,+n+(e?1:0))).__actions__.push({func:pu,args:[i],thisArg:r}),new $n(o,this.__chain__).thru(function(t){return e&&!t.length&&t.push(r),t})):this.thru(i)}),du=Co(function(t,e,n){Mt.call(t,n)?++t[n]:rr(t,n,1)}),vu=To(qi),yu=To(Di);function gu(t,e){return(Du(t)?Oe:lr)(t,ui(e,3))}function _u(t,e){return(Du(t)?xe:fr)(t,ui(e,3))}var mu=Co(function(t,e,n){Mt.call(t,n)?t[n].push(e):rr(t,n,[e])}),bu=Gr(function(t,e,n){var r=-1,o=\"function\"==typeof e,i=Hu(t)?rt(t.length):[];return lr(t,function(t){i[++r]=o?je(e,t,n):Ar(t,e,n)}),i}),wu=Co(function(t,e,n){rr(t,n,e)});function ju(t,e){return(Du(t)?Ee:Tr)(t,ui(e,3))}var Su=Co(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),Ou=Gr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&gi(t,e[0],e[1])?e=[]:n>2&&gi(e[0],e[1],e[2])&&(e=[e[0]]),$r(t,vr(e,1),[])}),xu=se||function(){return le.Date.now()};function ku(t,e,n){return e=n?r:e,e=t&&null==e?t.length:e,Jo(t,c,r,r,r,r,e)}function Iu(t,e){var n;if(\"function\"!=typeof e)throw new It(o);return t=ha(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=r),n}}var Au=Gr(function(t,e,n){var r=1;if(n.length){var o=un(n,ii(Au));r|=a}return Jo(t,r,e,n,o)}),Cu=Gr(function(t,e,n){var r=3;if(n.length){var o=un(n,ii(Cu));r|=a}return Jo(e,r,t,n,o)});function Eu(t,e,n){var i,u,a,c,s,l,f=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new It(o);function v(e){var n=i,o=u;return i=u=r,f=e,c=t.apply(o,n)}function y(t){var n=t-l;return l===r||n>=e||n<0||h&&t-f>=a}function g(){var t=xu();if(y(t))return _(t);s=Ai(g,function(t){var n=e-(t-l);return h?gn(n,a-(t-f)):n}(t))}function _(t){return s=r,d&&i?v(t):(i=u=r,c)}function m(){var t=xu(),n=y(t);if(i=arguments,u=this,l=t,n){if(s===r)return function(t){return f=t,s=Ai(g,e),p?v(t):c}(l);if(h)return bo(s),s=Ai(g,e),v(l)}return s===r&&(s=Ai(g,e)),c}return e=va(e)||0,Yu(n)&&(p=!!n.leading,a=(h=\"maxWait\"in n)?yn(va(n.maxWait)||0,e):a,d=\"trailing\"in n?!!n.trailing:d),m.cancel=function(){s!==r&&bo(s),f=0,i=l=u=s=r},m.flush=function(){return s===r?c:_(xu())},m}var Pu=Gr(function(t,e){return cr(t,1,e)}),Bu=Gr(function(t,e,n){return cr(t,va(e)||0,n)});function Mu(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new It(o);var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var u=t.apply(this,r);return n.cache=i.set(o,u)||i,u};return n.cache=new(Mu.Cache||Hn),n}function Ru(t){if(\"function\"!=typeof t)throw new It(o);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Mu.Cache=Hn;var zu=_o(function(t,e){var n=(e=1==e.length&&Du(e[0])?Ee(e[0],Ze(ui())):Ee(vr(e,1),Ze(ui()))).length;return Gr(function(r){for(var o=-1,i=gn(r.length,n);++o<i;)r[o]=e[o].call(this,r[o]);return je(t,this,r)})}),Tu=Gr(function(t,e){var n=un(e,ii(Tu));return Jo(t,a,r,e,n)}),Uu=Gr(function(t,e){var n=un(e,ii(Uu));return Jo(t,64,r,e,n)}),Nu=ti(function(t,e){return Jo(t,256,r,r,r,e)});function Fu(t,e){return t===e||t!=t&&e!=e}var Lu=Wo(Or),$u=Wo(function(t,e){return t>=e}),qu=Cr(function(){return arguments}())?Cr:function(t){return ta(t)&&Mt.call(t,\"callee\")&&!Kt.call(t,\"callee\")},Du=rt.isArray,Wu=ye?Ze(ye):function(t){return ta(t)&&Sr(t)==E};function Hu(t){return null!=t&&Xu(t.length)&&!Vu(t)}function Ku(t){return ta(t)&&Hu(t)}var Gu=ze||vc,Zu=ge?Ze(ge):function(t){return ta(t)&&Sr(t)==g};function Ju(t){if(!ta(t))return!1;var e=Sr(t);return e==_||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ra(t)}function Vu(t){if(!Yu(t))return!1;var e=Sr(t);return e==m||e==b||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Qu(t){return\"number\"==typeof t&&t==ha(t)}function Xu(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=l}function Yu(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function ta(t){return null!=t&&\"object\"==typeof t}var ea=_e?Ze(_e):function(t){return ta(t)&&pi(t)==w};function na(t){return\"number\"==typeof t||ta(t)&&Sr(t)==j}function ra(t){if(!ta(t)||Sr(t)!=S)return!1;var e=Wt(t);if(null===e)return!0;var n=Mt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&Bt.call(n)==Ut}var oa=me?Ze(me):function(t){return ta(t)&&Sr(t)==x},ia=be?Ze(be):function(t){return ta(t)&&pi(t)==k};function ua(t){return\"string\"==typeof t||!Du(t)&&ta(t)&&Sr(t)==I}function aa(t){return\"symbol\"==typeof t||ta(t)&&Sr(t)==A}var ca=we?Ze(we):function(t){return ta(t)&&Xu(t.length)&&!!re[Sr(t)]},sa=Wo(zr),la=Wo(function(t,e){return t<=e});function fa(t){if(!t)return[];if(Hu(t))return ua(t)?ln(t):Io(t);if(Qt&&t[Qt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Qt]());var e=pi(t);return(e==w?rn:e==k?an:Fa)(t)}function pa(t){return t?(t=va(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ha(t){var e=pa(t),n=e%1;return e==e?n?e-n:e:0}function da(t){return t?ir(ha(t),0,p):0}function va(t){if(\"number\"==typeof t)return t;if(aa(t))return f;if(Yu(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=Yu(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Ge(t);var n=ht.test(t);return n||vt.test(t)?ae(t.slice(2),n?2:8):pt.test(t)?f:+t}function ya(t){return Ao(t,Pa(t))}function ga(t){return null==t?\"\":uo(t)}var _a=Eo(function(t,e){if(wi(e)||Hu(e))Ao(e,Ea(e),t);else for(var n in e)Mt.call(e,n)&&Yn(t,n,e[n])}),ma=Eo(function(t,e){Ao(e,Pa(e),t)}),ba=Eo(function(t,e,n,r){Ao(e,Pa(e),t,r)}),wa=Eo(function(t,e,n,r){Ao(e,Ea(e),t,r)}),ja=ti(or),Sa=Gr(function(t,e){t=Ot(t);var n=-1,o=e.length,i=o>2?e[2]:r;for(i&&gi(e[0],e[1],i)&&(o=1);++n<o;)for(var u=e[n],a=Pa(u),c=-1,s=a.length;++c<s;){var l=a[c],f=t[l];(f===r||Fu(f,Et[l])&&!Mt.call(t,l))&&(t[l]=u[l])}return t}),Oa=Gr(function(t){return t.push(r,Qo),je(Ma,r,t)});function xa(t,e,n){var o=null==t?r:wr(t,e);return o===r?n:o}function ka(t,e){return null!=t&&hi(t,e,kr)}var Ia=Fo(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Tt.call(e)),t[e]=n},Ya(nc)),Aa=Fo(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Tt.call(e)),Mt.call(t,e)?t[e].push(n):t[e]=[n]},ui),Ca=Gr(Ar);function Ea(t){return Hu(t)?Zn(t):Rr(t)}function Pa(t){return Hu(t)?Zn(t,!0):function(t){if(!Yu(t))return function(t){var e=[];if(null!=t)for(var n in Ot(t))e.push(n);return e}(t);var e=wi(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&Mt.call(t,r))&&n.push(r);return n}(t)}var Ba=Eo(function(t,e,n){Fr(t,e,n)}),Ma=Eo(function(t,e,n,r){Fr(t,e,n,r)}),Ra=ti(function(t,e){var n={};if(null==t)return n;var r=!1;e=Ee(e,function(e){return e=go(e,t),r||(r=e.length>1),e}),Ao(t,ni(t),n),r&&(n=ur(n,7,Xo));for(var o=e.length;o--;)co(n,e[o]);return n}),za=ti(function(t,e){return null==t?{}:function(t,e){return qr(t,e,function(e,n){return ka(t,n)})}(t,e)});function Ta(t,e){if(null==t)return{};var n=Ee(ni(t),function(t){return[t]});return e=ui(e),qr(t,n,function(t,n){return e(t,n[0])})}var Ua=Zo(Ea),Na=Zo(Pa);function Fa(t){return null==t?[]:Je(t,Ea(t))}var La=Ro(function(t,e,n){return e=e.toLowerCase(),t+(n?$a(e):e)});function $a(t){return Ja(ga(t).toLowerCase())}function qa(t){return(t=ga(t))&&t.replace(gt,Ye).replace(Vt,\"\")}var Da=Ro(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Wa=Ro(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),Ha=Mo(\"toLowerCase\"),Ka=Ro(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Ga=Ro(function(t,e,n){return t+(n?\" \":\"\")+Ja(e)}),Za=Ro(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Ja=Mo(\"toUpperCase\");function Va(t,e,n){return t=ga(t),(e=n?r:e)===r?function(t){return te.test(t)}(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(e)||[]}var Qa=Gr(function(t,e){try{return je(t,r,e)}catch(t){return Ju(t)?t:new wt(t)}}),Xa=ti(function(t,e){return Oe(e,function(e){e=Ti(e),rr(t,e,Au(t[e],t))}),t});function Ya(t){return function(){return t}}var tc=Uo(),ec=Uo(!0);function nc(t){return t}function rc(t){return Mr(\"function\"==typeof t?t:ur(t,1))}var oc=Gr(function(t,e){return function(n){return Ar(n,t,e)}}),ic=Gr(function(t,e){return function(n){return Ar(t,n,e)}});function uc(t,e,n){var r=Ea(e),o=br(e,r);null!=n||Yu(e)&&(o.length||!r.length)||(n=e,e=t,t=this,o=br(e,Ea(e)));var i=!(Yu(n)&&\"chain\"in n&&!n.chain),u=Vu(t);return Oe(o,function(n){var r=e[n];t[n]=r,u&&(t.prototype[n]=function(){var e=this.__chain__;if(i||e){var n=t(this.__wrapped__);return(n.__actions__=Io(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Pe([this.value()],arguments))})}),t}function ac(){}var cc=$o(Ee),sc=$o(ke),lc=$o(Re);function fc(t){return _i(t)?qe(Ti(t)):function(t){return function(e){return wr(e,t)}}(t)}var pc=Do(),hc=Do(!0);function dc(){return[]}function vc(){return!1}var yc,gc=Lo(function(t,e){return t+e},0),_c=Ko(\"ceil\"),mc=Lo(function(t,e){return t/e},1),bc=Ko(\"floor\"),wc=Lo(function(t,e){return t*e},1),jc=Ko(\"round\"),Sc=Lo(function(t,e){return t-e},0);return Nn.after=function(t,e){if(\"function\"!=typeof e)throw new It(o);return t=ha(t),function(){if(--t<1)return e.apply(this,arguments)}},Nn.ary=ku,Nn.assign=_a,Nn.assignIn=ma,Nn.assignInWith=ba,Nn.assignWith=wa,Nn.at=ja,Nn.before=Iu,Nn.bind=Au,Nn.bindAll=Xa,Nn.bindKey=Cu,Nn.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Du(t)?t:[t]},Nn.chain=fu,Nn.chunk=function(t,e,n){e=(n?gi(t,e,n):e===r)?1:yn(ha(e),0);var o=null==t?0:t.length;if(!o||e<1)return[];for(var i=0,u=0,a=rt(pe(o/e));i<o;)a[u++]=to(t,i,i+=e);return a},Nn.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,o=[];++e<n;){var i=t[e];i&&(o[r++]=i)}return o},Nn.concat=function(){var t=arguments.length;if(!t)return[];for(var e=rt(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return Pe(Du(n)?Io(n):[n],vr(e,1))},Nn.cond=function(t){var e=null==t?0:t.length,n=ui();return t=e?Ee(t,function(t){if(\"function\"!=typeof t[1])throw new It(o);return[n(t[0]),t[1]]}):[],Gr(function(n){for(var r=-1;++r<e;){var o=t[r];if(je(o[0],this,n))return je(o[1],this,n)}})},Nn.conforms=function(t){return function(t){var e=Ea(t);return function(n){return ar(n,t,e)}}(ur(t,1))},Nn.constant=Ya,Nn.countBy=du,Nn.create=function(t,e){var n=Fn(t);return null==e?n:nr(n,e)},Nn.curry=function t(e,n,o){var i=Jo(e,8,r,r,r,r,r,n=o?r:n);return i.placeholder=t.placeholder,i},Nn.curryRight=function t(e,n,o){var i=Jo(e,16,r,r,r,r,r,n=o?r:n);return i.placeholder=t.placeholder,i},Nn.debounce=Eu,Nn.defaults=Sa,Nn.defaultsDeep=Oa,Nn.defer=Pu,Nn.delay=Bu,Nn.difference=Fi,Nn.differenceBy=Li,Nn.differenceWith=$i,Nn.drop=function(t,e,n){var o=null==t?0:t.length;return o?to(t,(e=n||e===r?1:ha(e))<0?0:e,o):[]},Nn.dropRight=function(t,e,n){var o=null==t?0:t.length;return o?to(t,0,(e=o-(e=n||e===r?1:ha(e)))<0?0:e):[]},Nn.dropRightWhile=function(t,e){return t&&t.length?lo(t,ui(e,3),!0,!0):[]},Nn.dropWhile=function(t,e){return t&&t.length?lo(t,ui(e,3),!0):[]},Nn.fill=function(t,e,n,o){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&gi(t,e,n)&&(n=0,o=i),function(t,e,n,o){var i=t.length;for((n=ha(n))<0&&(n=-n>i?0:i+n),(o=o===r||o>i?i:ha(o))<0&&(o+=i),o=n>o?0:da(o);n<o;)t[n++]=e;return t}(t,e,n,o)):[]},Nn.filter=function(t,e){return(Du(t)?Ie:dr)(t,ui(e,3))},Nn.flatMap=function(t,e){return vr(ju(t,e),1)},Nn.flatMapDeep=function(t,e){return vr(ju(t,e),s)},Nn.flatMapDepth=function(t,e,n){return n=n===r?1:ha(n),vr(ju(t,e),n)},Nn.flatten=Wi,Nn.flattenDeep=function(t){return null!=t&&t.length?vr(t,s):[]},Nn.flattenDepth=function(t,e){return null!=t&&t.length?vr(t,e=e===r?1:ha(e)):[]},Nn.flip=function(t){return Jo(t,512)},Nn.flow=tc,Nn.flowRight=ec,Nn.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var o=t[e];rr(r,o[0],o[1])}return r},Nn.functions=function(t){return null==t?[]:br(t,Ea(t))},Nn.functionsIn=function(t){return null==t?[]:br(t,Pa(t))},Nn.groupBy=mu,Nn.initial=function(t){return null!=t&&t.length?to(t,0,-1):[]},Nn.intersection=Ki,Nn.intersectionBy=Gi,Nn.intersectionWith=Zi,Nn.invert=Ia,Nn.invertBy=Aa,Nn.invokeMap=bu,Nn.iteratee=rc,Nn.keyBy=wu,Nn.keys=Ea,Nn.keysIn=Pa,Nn.map=ju,Nn.mapKeys=function(t,e){var n={};return e=ui(e,3),_r(t,function(t,r,o){rr(n,e(t,r,o),t)}),n},Nn.mapValues=function(t,e){var n={};return e=ui(e,3),_r(t,function(t,r,o){rr(n,r,e(t,r,o))}),n},Nn.matches=function(t){return Ur(ur(t,1))},Nn.matchesProperty=function(t,e){return Nr(t,ur(e,1))},Nn.memoize=Mu,Nn.merge=Ba,Nn.mergeWith=Ma,Nn.method=oc,Nn.methodOf=ic,Nn.mixin=uc,Nn.negate=Ru,Nn.nthArg=function(t){return t=ha(t),Gr(function(e){return Lr(e,t)})},Nn.omit=Ra,Nn.omitBy=function(t,e){return Ta(t,Ru(ui(e)))},Nn.once=function(t){return Iu(2,t)},Nn.orderBy=function(t,e,n,o){return null==t?[]:(Du(e)||(e=null==e?[]:[e]),Du(n=o?r:n)||(n=null==n?[]:[n]),$r(t,e,n))},Nn.over=cc,Nn.overArgs=zu,Nn.overEvery=sc,Nn.overSome=lc,Nn.partial=Tu,Nn.partialRight=Uu,Nn.partition=Su,Nn.pick=za,Nn.pickBy=Ta,Nn.property=fc,Nn.propertyOf=function(t){return function(e){return null==t?r:wr(t,e)}},Nn.pull=Vi,Nn.pullAll=Qi,Nn.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?Dr(t,e,ui(n,2)):t},Nn.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?Dr(t,e,r,n):t},Nn.pullAt=Xi,Nn.range=pc,Nn.rangeRight=hc,Nn.rearg=Nu,Nn.reject=function(t,e){return(Du(t)?Ie:dr)(t,Ru(ui(e,3)))},Nn.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,o=[],i=t.length;for(e=ui(e,3);++r<i;){var u=t[r];e(u,r,t)&&(n.push(u),o.push(r))}return Wr(t,o),n},Nn.rest=function(t,e){if(\"function\"!=typeof t)throw new It(o);return Gr(t,e=e===r?e:ha(e))},Nn.reverse=Yi,Nn.sampleSize=function(t,e,n){return e=(n?gi(t,e,n):e===r)?1:ha(e),(Du(t)?Vn:Jr)(t,e)},Nn.set=function(t,e,n){return null==t?t:Vr(t,e,n)},Nn.setWith=function(t,e,n,o){return o=\"function\"==typeof o?o:r,null==t?t:Vr(t,e,n,o)},Nn.shuffle=function(t){return(Du(t)?Qn:Yr)(t)},Nn.slice=function(t,e,n){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&gi(t,e,n)?(e=0,n=o):(e=null==e?0:ha(e),n=n===r?o:ha(n)),to(t,e,n)):[]},Nn.sortBy=Ou,Nn.sortedUniq=function(t){return t&&t.length?oo(t):[]},Nn.sortedUniqBy=function(t,e){return t&&t.length?oo(t,ui(e,2)):[]},Nn.split=function(t,e,n){return n&&\"number\"!=typeof n&&gi(t,e,n)&&(e=n=r),(n=n===r?p:n>>>0)?(t=ga(t))&&(\"string\"==typeof e||null!=e&&!oa(e))&&!(e=uo(e))&&nn(t)?mo(ln(t),0,n):t.split(e,n):[]},Nn.spread=function(t,e){if(\"function\"!=typeof t)throw new It(o);return e=null==e?0:yn(ha(e),0),Gr(function(n){var r=n[e],o=mo(n,0,e);return r&&Pe(o,r),je(t,this,o)})},Nn.tail=function(t){var e=null==t?0:t.length;return e?to(t,1,e):[]},Nn.take=function(t,e,n){return t&&t.length?to(t,0,(e=n||e===r?1:ha(e))<0?0:e):[]},Nn.takeRight=function(t,e,n){var o=null==t?0:t.length;return o?to(t,(e=o-(e=n||e===r?1:ha(e)))<0?0:e,o):[]},Nn.takeRightWhile=function(t,e){return t&&t.length?lo(t,ui(e,3),!1,!0):[]},Nn.takeWhile=function(t,e){return t&&t.length?lo(t,ui(e,3)):[]},Nn.tap=function(t,e){return e(t),t},Nn.throttle=function(t,e,n){var r=!0,i=!0;if(\"function\"!=typeof t)throw new It(o);return Yu(n)&&(r=\"leading\"in n?!!n.leading:r,i=\"trailing\"in n?!!n.trailing:i),Eu(t,e,{leading:r,maxWait:e,trailing:i})},Nn.thru=pu,Nn.toArray=fa,Nn.toPairs=Ua,Nn.toPairsIn=Na,Nn.toPath=function(t){return Du(t)?Ee(t,Ti):aa(t)?[t]:Io(zi(ga(t)))},Nn.toPlainObject=ya,Nn.transform=function(t,e,n){var r=Du(t),o=r||Gu(t)||ca(t);if(e=ui(e,4),null==n){var i=t&&t.constructor;n=o?r?new i:[]:Yu(t)&&Vu(i)?Fn(Wt(t)):{}}return(o?Oe:_r)(t,function(t,r,o){return e(n,t,r,o)}),n},Nn.unary=function(t){return ku(t,1)},Nn.union=tu,Nn.unionBy=eu,Nn.unionWith=nu,Nn.uniq=function(t){return t&&t.length?ao(t):[]},Nn.uniqBy=function(t,e){return t&&t.length?ao(t,ui(e,2)):[]},Nn.uniqWith=function(t,e){return e=\"function\"==typeof e?e:r,t&&t.length?ao(t,r,e):[]},Nn.unset=function(t,e){return null==t||co(t,e)},Nn.unzip=ru,Nn.unzipWith=ou,Nn.update=function(t,e,n){return null==t?t:so(t,e,yo(n))},Nn.updateWith=function(t,e,n,o){return o=\"function\"==typeof o?o:r,null==t?t:so(t,e,yo(n),o)},Nn.values=Fa,Nn.valuesIn=function(t){return null==t?[]:Je(t,Pa(t))},Nn.without=iu,Nn.words=Va,Nn.wrap=function(t,e){return Tu(yo(e),t)},Nn.xor=uu,Nn.xorBy=au,Nn.xorWith=cu,Nn.zip=su,Nn.zipObject=function(t,e){return ho(t||[],e||[],Yn)},Nn.zipObjectDeep=function(t,e){return ho(t||[],e||[],Vr)},Nn.zipWith=lu,Nn.entries=Ua,Nn.entriesIn=Na,Nn.extend=ma,Nn.extendWith=ba,uc(Nn,Nn),Nn.add=gc,Nn.attempt=Qa,Nn.camelCase=La,Nn.capitalize=$a,Nn.ceil=_c,Nn.clamp=function(t,e,n){return n===r&&(n=e,e=r),n!==r&&(n=(n=va(n))==n?n:0),e!==r&&(e=(e=va(e))==e?e:0),ir(va(t),e,n)},Nn.clone=function(t){return ur(t,4)},Nn.cloneDeep=function(t){return ur(t,5)},Nn.cloneDeepWith=function(t,e){return ur(t,5,e=\"function\"==typeof e?e:r)},Nn.cloneWith=function(t,e){return ur(t,4,e=\"function\"==typeof e?e:r)},Nn.conformsTo=function(t,e){return null==e||ar(t,e,Ea(e))},Nn.deburr=qa,Nn.defaultTo=function(t,e){return null==t||t!=t?e:t},Nn.divide=mc,Nn.endsWith=function(t,e,n){t=ga(t),e=uo(e);var o=t.length,i=n=n===r?o:ir(ha(n),0,o);return(n-=e.length)>=0&&t.slice(n,i)==e},Nn.eq=Fu,Nn.escape=function(t){return(t=ga(t))&&G.test(t)?t.replace(H,tn):t},Nn.escapeRegExp=function(t){return(t=ga(t))&&et.test(t)?t.replace(tt,\"\\\\$&\"):t},Nn.every=function(t,e,n){var o=Du(t)?ke:pr;return n&&gi(t,e,n)&&(e=r),o(t,ui(e,3))},Nn.find=vu,Nn.findIndex=qi,Nn.findKey=function(t,e){return Te(t,ui(e,3),_r)},Nn.findLast=yu,Nn.findLastIndex=Di,Nn.findLastKey=function(t,e){return Te(t,ui(e,3),mr)},Nn.floor=bc,Nn.forEach=gu,Nn.forEachRight=_u,Nn.forIn=function(t,e){return null==t?t:yr(t,ui(e,3),Pa)},Nn.forInRight=function(t,e){return null==t?t:gr(t,ui(e,3),Pa)},Nn.forOwn=function(t,e){return t&&_r(t,ui(e,3))},Nn.forOwnRight=function(t,e){return t&&mr(t,ui(e,3))},Nn.get=xa,Nn.gt=Lu,Nn.gte=$u,Nn.has=function(t,e){return null!=t&&hi(t,e,xr)},Nn.hasIn=ka,Nn.head=Hi,Nn.identity=nc,Nn.includes=function(t,e,n,r){t=Hu(t)?t:Fa(t),n=n&&!r?ha(n):0;var o=t.length;return n<0&&(n=yn(o+n,0)),ua(t)?n<=o&&t.indexOf(e,n)>-1:!!o&&Ne(t,e,n)>-1},Nn.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var o=null==n?0:ha(n);return o<0&&(o=yn(r+o,0)),Ne(t,e,o)},Nn.inRange=function(t,e,n){return e=pa(e),n===r?(n=e,e=0):n=pa(n),function(t,e,n){return t>=gn(e,n)&&t<yn(e,n)}(t=va(t),e,n)},Nn.invoke=Ca,Nn.isArguments=qu,Nn.isArray=Du,Nn.isArrayBuffer=Wu,Nn.isArrayLike=Hu,Nn.isArrayLikeObject=Ku,Nn.isBoolean=function(t){return!0===t||!1===t||ta(t)&&Sr(t)==y},Nn.isBuffer=Gu,Nn.isDate=Zu,Nn.isElement=function(t){return ta(t)&&1===t.nodeType&&!ra(t)},Nn.isEmpty=function(t){if(null==t)return!0;if(Hu(t)&&(Du(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Gu(t)||ca(t)||qu(t)))return!t.length;var e=pi(t);if(e==w||e==k)return!t.size;if(wi(t))return!Rr(t).length;for(var n in t)if(Mt.call(t,n))return!1;return!0},Nn.isEqual=function(t,e){return Er(t,e)},Nn.isEqualWith=function(t,e,n){var o=(n=\"function\"==typeof n?n:r)?n(t,e):r;return o===r?Er(t,e,r,n):!!o},Nn.isError=Ju,Nn.isFinite=function(t){return\"number\"==typeof t&&De(t)},Nn.isFunction=Vu,Nn.isInteger=Qu,Nn.isLength=Xu,Nn.isMap=ea,Nn.isMatch=function(t,e){return t===e||Pr(t,e,ci(e))},Nn.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:r,Pr(t,e,ci(e),n)},Nn.isNaN=function(t){return na(t)&&t!=+t},Nn.isNative=function(t){if(bi(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Br(t)},Nn.isNil=function(t){return null==t},Nn.isNull=function(t){return null===t},Nn.isNumber=na,Nn.isObject=Yu,Nn.isObjectLike=ta,Nn.isPlainObject=ra,Nn.isRegExp=oa,Nn.isSafeInteger=function(t){return Qu(t)&&t>=-9007199254740991&&t<=l},Nn.isSet=ia,Nn.isString=ua,Nn.isSymbol=aa,Nn.isTypedArray=ca,Nn.isUndefined=function(t){return t===r},Nn.isWeakMap=function(t){return ta(t)&&pi(t)==C},Nn.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==Sr(t)},Nn.join=function(t,e){return null==t?\"\":dn.call(t,e)},Nn.kebabCase=Da,Nn.last=Ji,Nn.lastIndexOf=function(t,e,n){var o=null==t?0:t.length;if(!o)return-1;var i=o;return n!==r&&(i=(i=ha(n))<0?yn(o+i,0):gn(i,o-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,i):Ue(t,Le,i,!0)},Nn.lowerCase=Wa,Nn.lowerFirst=Ha,Nn.lt=sa,Nn.lte=la,Nn.max=function(t){return t&&t.length?hr(t,nc,Or):r},Nn.maxBy=function(t,e){return t&&t.length?hr(t,ui(e,2),Or):r},Nn.mean=function(t){return $e(t,nc)},Nn.meanBy=function(t,e){return $e(t,ui(e,2))},Nn.min=function(t){return t&&t.length?hr(t,nc,zr):r},Nn.minBy=function(t,e){return t&&t.length?hr(t,ui(e,2),zr):r},Nn.stubArray=dc,Nn.stubFalse=vc,Nn.stubObject=function(){return{}},Nn.stubString=function(){return\"\"},Nn.stubTrue=function(){return!0},Nn.multiply=wc,Nn.nth=function(t,e){return t&&t.length?Lr(t,ha(e)):r},Nn.noConflict=function(){return le._===this&&(le._=Nt),this},Nn.noop=ac,Nn.now=xu,Nn.pad=function(t,e,n){t=ga(t);var r=(e=ha(e))?sn(t):0;if(!e||r>=e)return t;var o=(e-r)/2;return qo(de(o),n)+t+qo(pe(o),n)},Nn.padEnd=function(t,e,n){t=ga(t);var r=(e=ha(e))?sn(t):0;return e&&r<e?t+qo(e-r,n):t},Nn.padStart=function(t,e,n){t=ga(t);var r=(e=ha(e))?sn(t):0;return e&&r<e?qo(e-r,n)+t:t},Nn.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),mn(ga(t).replace(nt,\"\"),e||0)},Nn.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&gi(t,e,n)&&(e=n=r),n===r&&(\"boolean\"==typeof e?(n=e,e=r):\"boolean\"==typeof t&&(n=t,t=r)),t===r&&e===r?(t=0,e=1):(t=pa(t),e===r?(e=t,t=0):e=pa(e)),t>e){var o=t;t=e,e=o}if(n||t%1||e%1){var i=bn();return gn(t+i*(e-t+ue(\"1e-\"+((i+\"\").length-1))),e)}return Hr(t,e)},Nn.reduce=function(t,e,n){var r=Du(t)?Be:We,o=arguments.length<3;return r(t,ui(e,4),n,o,lr)},Nn.reduceRight=function(t,e,n){var r=Du(t)?Me:We,o=arguments.length<3;return r(t,ui(e,4),n,o,fr)},Nn.repeat=function(t,e,n){return e=(n?gi(t,e,n):e===r)?1:ha(e),Kr(ga(t),e)},Nn.replace=function(){var t=arguments,e=ga(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Nn.result=function(t,e,n){var o=-1,i=(e=go(e,t)).length;for(i||(i=1,t=r);++o<i;){var u=null==t?r:t[Ti(e[o])];u===r&&(o=i,u=n),t=Vu(u)?u.call(t):u}return t},Nn.round=jc,Nn.runInContext=t,Nn.sample=function(t){return(Du(t)?Jn:Zr)(t)},Nn.size=function(t){if(null==t)return 0;if(Hu(t))return ua(t)?sn(t):t.length;var e=pi(t);return e==w||e==k?t.size:Rr(t).length},Nn.snakeCase=Ka,Nn.some=function(t,e,n){var o=Du(t)?Re:eo;return n&&gi(t,e,n)&&(e=r),o(t,ui(e,3))},Nn.sortedIndex=function(t,e){return no(t,e)},Nn.sortedIndexBy=function(t,e,n){return ro(t,e,ui(n,2))},Nn.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=no(t,e);if(r<n&&Fu(t[r],e))return r}return-1},Nn.sortedLastIndex=function(t,e){return no(t,e,!0)},Nn.sortedLastIndexBy=function(t,e,n){return ro(t,e,ui(n,2),!0)},Nn.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=no(t,e,!0)-1;if(Fu(t[n],e))return n}return-1},Nn.startCase=Ga,Nn.startsWith=function(t,e,n){return t=ga(t),n=null==n?0:ir(ha(n),0,t.length),e=uo(e),t.slice(n,n+e.length)==e},Nn.subtract=Sc,Nn.sum=function(t){return t&&t.length?He(t,nc):0},Nn.sumBy=function(t,e){return t&&t.length?He(t,ui(e,2)):0},Nn.template=function(t,e,n){var o=Nn.templateSettings;n&&gi(t,e,n)&&(e=r),t=ga(t),e=wa({},e,o,Vo);var i=wa({},e.imports,o.imports,Vo),u=Ea(i),a=Je(i,u);Oe(u,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,l=0,f=e.interpolate||_t,p=\"__p += '\",h=xt((e.escape||_t).source+\"|\"+f.source+\"|\"+(f===V?lt:_t).source+\"|\"+(e.evaluate||_t).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Mt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ne+\"]\")+\"\\n\";t.replace(h,function(e,n,r,o,i,u){return r||(r=o),p+=t.slice(l,u).replace(mt,en),n&&(c=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),i&&(s=!0,p+=\"';\\n\"+i+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=u+e.length,e}),p+=\"';\\n\";var v=Mt.call(e,\"variable\")&&e.variable;if(v){if(ct.test(v))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace($,\"\"):p).replace(q,\"$1\").replace(D,\"$1;\"),p=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var y=Qa(function(){return jt(u,d+\"return \"+p).apply(r,a)});if(y.source=p,Ju(y))throw y;return y},Nn.times=function(t,e){if((t=ha(t))<1||t>l)return[];var n=p,r=gn(t,p);e=ui(e),t-=p;for(var o=Ke(r,e);++n<t;)e(n);return o},Nn.toFinite=pa,Nn.toInteger=ha,Nn.toLength=da,Nn.toLower=function(t){return ga(t).toLowerCase()},Nn.toNumber=va,Nn.toSafeInteger=function(t){return t?ir(ha(t),-9007199254740991,l):0===t?t:0},Nn.toString=ga,Nn.toUpper=function(t){return ga(t).toUpperCase()},Nn.trim=function(t,e,n){if((t=ga(t))&&(n||e===r))return Ge(t);if(!t||!(e=uo(e)))return t;var o=ln(t),i=ln(e);return mo(o,Qe(o,i),Xe(o,i)+1).join(\"\")},Nn.trimEnd=function(t,e,n){if((t=ga(t))&&(n||e===r))return t.slice(0,fn(t)+1);if(!t||!(e=uo(e)))return t;var o=ln(t);return mo(o,0,Xe(o,ln(e))+1).join(\"\")},Nn.trimStart=function(t,e,n){if((t=ga(t))&&(n||e===r))return t.replace(nt,\"\");if(!t||!(e=uo(e)))return t;var o=ln(t);return mo(o,Qe(o,ln(e))).join(\"\")},Nn.truncate=function(t,e){var n=30,o=\"...\";if(Yu(e)){var i=\"separator\"in e?e.separator:i;n=\"length\"in e?ha(e.length):n,o=\"omission\"in e?uo(e.omission):o}var u=(t=ga(t)).length;if(nn(t)){var a=ln(t);u=a.length}if(n>=u)return t;var c=n-sn(o);if(c<1)return o;var s=a?mo(a,0,c).join(\"\"):t.slice(0,c);if(i===r)return s+o;if(a&&(c+=s.length-c),oa(i)){if(t.slice(c).search(i)){var l,f=s;for(i.global||(i=xt(i.source,ga(ft.exec(i))+\"g\")),i.lastIndex=0;l=i.exec(f);)var p=l.index;s=s.slice(0,p===r?c:p)}}else if(t.indexOf(uo(i),c)!=c){var h=s.lastIndexOf(i);h>-1&&(s=s.slice(0,h))}return s+o},Nn.unescape=function(t){return(t=ga(t))&&K.test(t)?t.replace(W,pn):t},Nn.uniqueId=function(t){var e=++Rt;return ga(t)+e},Nn.upperCase=Za,Nn.upperFirst=Ja,Nn.each=gu,Nn.eachRight=_u,Nn.first=Hi,uc(Nn,(yc={},_r(Nn,function(t,e){Mt.call(Nn.prototype,e)||(yc[e]=t)}),yc),{chain:!1}),Nn.VERSION=\"4.18.1\",Oe([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Nn[t].placeholder=Nn}),Oe([\"drop\",\"take\"],function(t,e){qn.prototype[t]=function(n){n=n===r?1:yn(ha(n),0);var o=this.__filtered__&&!e?new qn(this):this.clone();return o.__filtered__?o.__takeCount__=gn(n,o.__takeCount__):o.__views__.push({size:gn(n,p),type:t+(o.__dir__<0?\"Right\":\"\")}),o},qn.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),Oe([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=1==n||3==n;qn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:ui(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),Oe([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");qn.prototype[t]=function(){return this[n](1).value()[0]}}),Oe([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");qn.prototype[t]=function(){return this.__filtered__?new qn(this):this[n](1)}}),qn.prototype.compact=function(){return this.filter(nc)},qn.prototype.find=function(t){return this.filter(t).head()},qn.prototype.findLast=function(t){return this.reverse().find(t)},qn.prototype.invokeMap=Gr(function(t,e){return\"function\"==typeof t?new qn(this):this.map(function(n){return Ar(n,t,e)})}),qn.prototype.reject=function(t){return this.filter(Ru(ui(t)))},qn.prototype.slice=function(t,e){t=ha(t);var n=this;return n.__filtered__&&(t>0||e<0)?new qn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==r&&(n=(e=ha(e))<0?n.dropRight(-e):n.take(e-t)),n)},qn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},qn.prototype.toArray=function(){return this.take(p)},_r(qn.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),o=/^(?:head|last)$/.test(e),i=Nn[o?\"take\"+(\"last\"==e?\"Right\":\"\"):e],u=o||/^find/.test(e);i&&(Nn.prototype[e]=function(){var e=this.__wrapped__,a=o?[1]:arguments,c=e instanceof qn,s=a[0],l=c||Du(e),f=function(t){var e=i.apply(Nn,Pe([t],a));return o&&p?e[0]:e};l&&n&&\"function\"==typeof s&&1!=s.length&&(c=l=!1);var p=this.__chain__,h=!!this.__actions__.length,d=u&&!p,v=c&&!h;if(!u&&l){e=v?e:new qn(this);var y=t.apply(e,a);return y.__actions__.push({func:pu,args:[f],thisArg:r}),new $n(y,p)}return d&&v?t.apply(this,a):(y=this.thru(f),d?o?y.value()[0]:y.value():y)})}),Oe([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=At[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Nn.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var o=this.value();return e.apply(Du(o)?o:[],t)}return this[n](function(n){return e.apply(Du(n)?n:[],t)})}}),_r(qn.prototype,function(t,e){var n=Nn[e];if(n){var r=n.name+\"\";Mt.call(Cn,r)||(Cn[r]=[]),Cn[r].push({name:e,func:n})}}),Cn[No(r,2).name]=[{name:\"wrapper\",func:r}],qn.prototype.clone=function(){var t=new qn(this.__wrapped__);return t.__actions__=Io(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Io(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Io(this.__views__),t},qn.prototype.reverse=function(){if(this.__filtered__){var t=new qn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},qn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=Du(t),r=e<0,o=n?t.length:0,i=function(t,e,n){for(var r=-1,o=n.length;++r<o;){var i=n[r],u=i.size;switch(i.type){case\"drop\":t+=u;break;case\"dropRight\":e-=u;break;case\"take\":e=gn(e,t+u);break;case\"takeRight\":t=yn(t,e-u)}}return{start:t,end:e}}(0,o,this.__views__),u=i.start,a=i.end,c=a-u,s=r?a:u-1,l=this.__iteratees__,f=l.length,p=0,h=gn(c,this.__takeCount__);if(!n||!r&&o==c&&h==c)return fo(t,this.__actions__);var d=[];t:for(;c--&&p<h;){for(var v=-1,y=t[s+=e];++v<f;){var g=l[v],_=g.iteratee,m=g.type,b=_(y);if(2==m)y=b;else if(!b){if(1==m)continue t;break t}}d[p++]=y}return d},Nn.prototype.at=hu,Nn.prototype.chain=function(){return fu(this)},Nn.prototype.commit=function(){return new $n(this.value(),this.__chain__)},Nn.prototype.next=function(){this.__values__===r&&(this.__values__=fa(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Nn.prototype.plant=function(t){for(var e,n=this;n instanceof Ln;){var o=Ni(n);o.__index__=0,o.__values__=r,e?i.__wrapped__=o:e=o;var i=o;n=n.__wrapped__}return i.__wrapped__=t,e},Nn.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof qn){var e=t;return this.__actions__.length&&(e=new qn(this)),(e=e.reverse()).__actions__.push({func:pu,args:[Yi],thisArg:r}),new $n(e,this.__chain__)}return this.thru(Yi)},Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return fo(this.__wrapped__,this.__actions__)},Nn.prototype.first=Nn.prototype.head,Qt&&(Nn.prototype[Qt]=function(){return this}),Nn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(le._=hn,define(function(){return hn})):pe?((pe.exports=hn)._=hn,fe._=hn):le._=hn}.call(this)},2586(t,e,n){\"use strict\";const r=n(803),o=n(1915),i=n(1657),u=n(3814),a=Symbol(\"encodeFragmentIdentifier\");function c(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function s(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}function l(t,e){return e.decode?o(t):t}function f(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?f(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function p(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function h(t){const e=(t=p(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function d(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function v(t,e){c((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,n,r)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case\"bracket\":return(t,n,r)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"colon-list-separator\":return(t,n,r)=>{e=/(:list)$/.exec(t),t=t.replace(/:list$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"comma\":case\"separator\":return(e,n,r)=>{const o=\"string\"==typeof n&&n.includes(t.arrayFormatSeparator),i=\"string\"==typeof n&&!o&&l(n,t).includes(t.arrayFormatSeparator);n=i?l(n,t):n;const u=o||i?n.split(t.arrayFormatSeparator).map(e=>l(e,t)):null===n?n:l(n,t);r[e]=u};case\"bracket-separator\":return(e,n,r)=>{const o=/(\\[\\])$/.test(e);if(e=e.replace(/\\[\\]$/,\"\"),!o)return void(r[e]=n?l(n,t):n);const i=null===n?[]:n.split(t.arrayFormatSeparator).map(e=>l(e,t));void 0!==r[e]?r[e]=[].concat(r[e],i):r[e]=i};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[].concat(n[t],e):n[t]=e}}}(e),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const o of t.split(\"&\")){if(\"\"===o)continue;let[t,u]=i(e.decode?o.replace(/\\+/g,\" \"):o,\"=\");u=void 0===u?null:[\"comma\",\"separator\",\"bracket-separator\"].includes(e.arrayFormat)?u:l(u,e),n(l(t,e),u,r)}for(const t of Object.keys(r)){const n=r[t];if(\"object\"==typeof n&&null!==n)for(const t of Object.keys(n))n[t]=d(n[t],e);else r[t]=d(n,e)}return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce((t,e)=>{const n=r[e];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?t[e]=f(n):t[e]=n,t},Object.create(null))}e.extract=h,e.parse=v,e.stringify=(t,e)=>{if(!t)return\"\";c((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const n=n=>e.skipNull&&null==t[n]||e.skipEmptyString&&\"\"===t[n],r=function(t){switch(t.arrayFormat){case\"index\":return e=>(n,r)=>{const o=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[s(e,t),\"[\",o,\"]\"].join(\"\")]:[...n,[s(e,t),\"[\",s(o,t),\"]=\",s(r,t)].join(\"\")]};case\"bracket\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[s(e,t),\"[]\"].join(\"\")]:[...n,[s(e,t),\"[]=\",s(r,t)].join(\"\")];case\"colon-list-separator\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[s(e,t),\":list=\"].join(\"\")]:[...n,[s(e,t),\":list=\",s(r,t)].join(\"\")];case\"comma\":case\"separator\":case\"bracket-separator\":{const e=\"bracket-separator\"===t.arrayFormat?\"[]=\":\"=\";return n=>(r,o)=>void 0===o||t.skipNull&&null===o||t.skipEmptyString&&\"\"===o?r:(o=null===o?\"\":o,0===r.length?[[s(n,t),e,s(o,t)].join(\"\")]:[[r,s(o,t)].join(t.arrayFormatSeparator)])}default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,s(e,t)]:[...n,[s(e,t),\"=\",s(r,t)].join(\"\")]}}(e),o={};for(const e of Object.keys(t))n(e)||(o[e]=t[e]);const i=Object.keys(o);return!1!==e.sort&&i.sort(e.sort),i.map(n=>{const o=t[n];return void 0===o?\"\":null===o?s(n,e):Array.isArray(o)?0===o.length&&\"bracket-separator\"===e.arrayFormat?s(n,e)+\"[]\":o.reduce(r(n),[]).join(\"&\"):s(n,e)+\"=\"+s(o,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[n,r]=i(t,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:v(h(t),e)},e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:l(r,e)}:{})},e.stringifyUrl=(t,n)=>{n=Object.assign({encode:!0,strict:!0,[a]:!0},n);const r=p(t.url).split(\"?\")[0]||\"\",o=e.extract(t.url),i=e.parse(o,{sort:!1}),u=Object.assign(i,t.query);let c=e.stringify(u,n);c&&(c=`?${c}`);let l=function(t){let e=\"\";const n=t.indexOf(\"#\");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(l=`#${n[a]?s(t.fragmentIdentifier,n):t.fragmentIdentifier}`),`${r}${c}${l}`},e.pick=(t,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0,[a]:!1},r);const{url:o,query:i,fragmentIdentifier:c}=e.parseUrl(t,r);return e.stringifyUrl({url:o,query:u(i,n),fragmentIdentifier:c},r)},e.exclude=(t,n,r)=>{const o=Array.isArray(n)?t=>!n.includes(t):(t,e)=>!n(t,e);return e.pick(t,o,r)}},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,e,n){\"use strict\";n.d(e,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createBoltButtonStrategy:()=>N,createBoltCustomerStrategy:()=>R,createBoltPaymentStrategy:()=>E});var t,e=n(315),o=n(7576),i=n(9440);class u{constructor(t){this.storage=t}saveExtraItemsData(t,e){const n=[...e.physicalItems,...e.digitalItems].reduce((t,e)=>(t[e.productId]={brand:e.brand?e.brand:\"\",category:e.categoryNames?e.categoryNames.join(\", \"):\"\"},t),{});try{return this.storage.setItem(this.getStorageKey(t),JSON.stringify(n)),n}catch(t){return{}}}readExtraItemsData(t){try{const e=this.storage.getItem(this.getStorageKey(t));if(!e)return null;const n=JSON.parse(e);return function(t){if(!(0,i.isObject)(t))return!1;const e=Object.values(t).some(t=>!(0,i.isObject)(t)||!(\"brand\"in t)||!(\"category\"in t));return Boolean(!e)}(n)?n:null}catch(t){return null}}clearExtraItemData(t){try{this.storage.removeItem(this.getStorageKey(t))}catch(t){}}getStorageKey(t){return t?`ORDER_ITEMS_${t}`:\"\"}}function a(t,e){return Object.assign(t,{resolveIds:e})}class c extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class s extends c{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(t||(t={}));class l extends c{constructor(e){super(function(e){switch(e){case t.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case t.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case t.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case t.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case t.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case t.MissingCheckoutConfig:case t.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case t.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case t.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case t.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case t.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case t.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case t.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class f extends c{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class p extends s{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}class h extends c{constructor(t){super(t||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}class d extends c{constructor(t){super(t||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}function v(t){return\"object\"==typeof t&&null!==t&&\"shouldCreateAccount\"in t}const y={body:{},headers:{},status:0};class g extends c{constructor(t,{message:e,errors:n}={}){const{body:r,headers:o,status:i}=t||y;super(e||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=o,this.status=i,this.errors=n||[]}}class _ extends g{constructor(t){super(t,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}var m;!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(m||(m={}));class b extends c{constructor(t){super(function(t){switch(t){case m.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case m.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case m.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case m.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class w extends c{constructor(t){super(),this.errorCode=t,this.name=\"BoltPaymentsFieldError\",this.type=\"bolt_payments_field_error\",this.body={errors:[w.getError(t)]}}static getError(t){switch(t){case\"1000\":case\"2000\":case\"3000\":return{code:\"invalid_number\"};case\"1001\":case\"2001\":case\"3001\":return{code:\"invalid_expiry_date\"};case\"1002\":case\"2002\":return{code:\"invalid_cvc\"};case\"1003\":return{code:\"invalid_zip\"};case\"2003\":return{code:\"incorrect_zip\"};default:return{code:\"general_error\"}}}}var j,S,O,x=function(t,e,n,r){return new(n||(n=Promise))(function(o,i){function u(t){try{c(r.next(t))}catch(t){i(t)}}function a(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};class k{constructor(t,e,n){this.paymentIntegrationService=t,this.boltScriptLoader=e,this.analyticsExtraItemsManager=n,this.useBoltClient=!1,this.useBoltEmbedded=!1}initialize(e){return x(this,void 0,void 0,function*(){const{bolt:n,methodId:r}=e,{containerId:o,onPaymentSelect:i,useBigCommerceCheckout:u}=n||{};if(!r)throw new s('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!u)return void(this.boltClient=yield this.boltScriptLoader.loadBoltClient());const a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId),{initializationData:c,config:f}=a,{publishableKey:p,developerConfig:h,embeddedOneClickEnabled:d}=c||{},{testMode:v}=f;if(!p)throw new l(t.MissingPaymentMethod);if(this.boltClient=yield this.boltScriptLoader.loadBoltClient(p,v,h),this.useBoltClient=!d,this.useBoltEmbedded=!!d,this.useBoltEmbedded){if(!o)throw new s('Unable to initialize payment because \"options.bolt.containerId\" argument is not provided.');if(!i)throw new s('Unable to initialize payment because \"options.bolt.onPaymentSelect\" argument is not provided.');this.boltEmbedded=yield this.boltScriptLoader.loadBoltEmbedded(p,v,h),this.mountBoltEmbeddedField(o),i(yield this.hasBoltAccount())}})}deinitialize(){var t;return null===(t=this.embeddedField)||void 0===t||t.unmount(),this.boltClient=void 0,this.boltEmbedded=void 0,Promise.resolve()}finalize(){return Promise.reject(new f)}execute(e,n){return x(this,void 0,void 0,function*(){this.setExtraItemsForAnalytics();const{payment:r}=e,o=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(n[r[o]]=t[r[o]])}return n}(e,[\"payment\"]),{methodId:u,paymentData:a}=r||{};let c;if(!e.payment)throw new p([\"payment\"]);if(!u)throw new l(t.MissingPaymentMethod);if(!a||!function(t){return Boolean((0,i.isObject)(t)&&(\"shouldSaveInstrument\"in t||\"nonce\"in t||v(t)))}(a))throw new l(t.MissingPayment);yield this.paymentIntegrationService.submitOrder(o,n),c=this.useBoltClient?yield this.getBoltClientPaymentPayload(u,a,n):this.useBoltEmbedded?yield this.getBoltEmbeddedPaymentPayload(u,a):yield this.getBoltFullCheckoutPaymentPayload(u,a),yield this.paymentIntegrationService.submitPayment(c)})}getBoltClientPaymentPayload(e,n,r){return x(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadPaymentMethod(e,r);const o=this.paymentIntegrationService.getState(),i=o.getPaymentMethodOrThrow(e).clientToken,{isStoreCreditApplied:u}=o.getCheckoutOrThrow(),{shouldSaveInstrument:a}=n,c=this.getBoltClientOrThrow();if(yield this.paymentIntegrationService.applyStoreCredit(u),!i)throw new l(t.MissingPaymentMethod);const s=yield new Promise((t,e)=>{const n={success:(n,r)=>{n.reference?t(n):e(new h(\"Unable to proceed because transaction reference is unavailable. Please try again later.\")),r()},close:()=>{e(new d)}};c.configure({orderToken:i},{},n).open()});return{methodId:e,paymentData:{nonce:s.reference,shouldSaveInstrument:a}}})}getBoltEmbeddedPaymentPayload(e,n){var r;return x(this,void 0,void 0,function*(){if(!v(n))throw new l(t.MissingPayment);const o=this.validateTokenizeResultOrThrow(yield null===(r=this.embeddedField)||void 0===r?void 0:r.tokenize());return{methodId:e,paymentData:{formattedPayload:{credit_card_token:{token:o.token,last_four_digits:o.last4,iin:o.bin,expiration_month:+o.expiration.split(\"-\")[1],expiration_year:+o.expiration.split(\"-\")[0]},provider_data:{create_account:!!n.shouldCreateAccount,embedded_checkout:!0}}}}})}getBoltFullCheckoutPaymentPayload(t,e){return x(this,void 0,void 0,function*(){yield this.setBoltOrderId();const n=this.getBoltClientOrThrow(),r=yield n.getTransactionReference();if(!r)throw new _;return{methodId:t,paymentData:Object.assign(Object.assign({},e),{nonce:r})}})}getBoltClientOrThrow(){if(!this.boltClient)throw new b(m.PaymentNotInitialized);return this.boltClient}getBoltEmbeddedOrThrow(){if(!this.boltEmbedded)throw new b(m.PaymentNotInitialized);return this.boltEmbedded}hasBoltAccount(){return x(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),e=t.getCustomer(),n=t.getBillingAddress(),r=(null==e?void 0:e.email)||(null==n?void 0:n.email)||\"\",o=this.getBoltClientOrThrow();try{return yield o.hasBoltAccount(r)}catch(t){throw new _}})}setBoltOrderId(){return x(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getOrderOrThrow(),e=this.getBoltClientOrThrow();try{yield e.setOrderId(t.orderId)}catch(t){throw new _}})}mountBoltEmbeddedField(t){const e=this.getBoltEmbeddedOrThrow().create(\"payment_field\",{styles:{backgroundColor:\"#fff\"},renderSeparateFields:!0});e.mount(`#${t}`),this.embeddedField=e}validateTokenizeResultOrThrow(t){if(!t)throw new _;if(t instanceof Error)throw new w(t.message);const{token:e,last4:n,bin:r,expiration:o}=t,i=+n,u=+r,a=+`${o}`.split(\"-\")[1],c=+`${o}`.split(\"-\")[0];if(!e||Number.isNaN(i)||Number.isNaN(u)||Number.isNaN(a)||Number.isNaN(c))throw new p;return t}setExtraItemsForAnalytics(){const t=this.paymentIntegrationService.getState(),e=t.getStoreConfigOrThrow(),n=t.getCartOrThrow();if(e.checkoutSettings.isAnalyticsEnabled&&function(t){return Boolean(t.hasOwnProperty(\"analytics\"))}(window)){const{id:t,lineItems:e}=n;this.analyticsExtraItemsManager.saveExtraItemsData(t,e)}}}class I extends c{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}!function(t){t.SandboxMode=\"bolt_sandbox\",t.StagingMode=\"bolt_staging\",t.DevelopmentMode=\"bolt_development\"}(j||(j={})),function(t){t.Small=\"small\",t.Medium=\"medium\",t.Large=\"large\"}(S||(S={})),function(t){t.Pill=\"pill\",t.Rect=\"rect\"}(O||(O={}));var A=function(t,e,n,r){return new(n||(n=Promise))(function(o,i){function u(t){try{c(r.next(t))}catch(t){i(t)}}function a(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};class C{constructor(t,e=window){this.scriptLoader=t,this.boltHostWindow=e}loadBoltClient(t,e,n,r,o){return A(this,void 0,void 0,function*(){if(this.boltHostWindow.BoltCheckout)return this.boltHostWindow.BoltCheckout;if(!t)throw new s('Unable to initialize payment because \"publishableKey\" argument is not provided.');if(yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!e,n)}/connect-bigcommerce.js`,this.getScriptOptions(\"bolt-connect\",t,r,o)),yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!e,n)}/track.js`,this.getScriptOptions(\"bolt-track\",t)),!this.boltHostWindow.BoltCheckout)throw new I;return this.boltHostWindow.BoltCheckout})}loadBoltEmbedded(t,e,n){return A(this,void 0,void 0,function*(){if(yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!e,n)}/embed.js`,{async:!0,attributes:{id:\"bolt-embedded\"}}),!this.boltHostWindow.Bolt)throw new I;return this.boltHostWindow.Bolt(t)})}getDomainURL(t,e){if(!t)return\"connect.bolt.com\";if(e)switch(e.developerMode){case j.StagingMode:return\"connect-staging.bolt.com\";case j.DevelopmentMode:return`connect.${e.developerDomain}`}return\"connect-sandbox.bolt.com\"}getScriptOptions(t,e,n,r){return{async:!0,attributes:Object.assign(Object.assign({id:t,\"data-publishable-key\":e},n&&{\"data-shopping-cart-id\":n}),r&&{\"data-storefront-api-token\":r})}}}const E=a(t=>new k(t,new C((0,e.vQ)()),new u(o.Ay)),[{id:\"bolt\"}]);function P(){}var B=function(t,e,n,r){return new(n||(n=Promise))(function(o,i){function u(t){try{c(r.next(t))}catch(t){i(t)}}function a(t){try{c(r.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};class M{constructor(t,e){this.paymentIntegrationService=t,this.boltScriptLoader=e,this.boltHostWindow=window}initialize(e){var n;return B(this,void 0,void 0,function*(){const{methodId:r,bolt:o}=e,{onInit:i}=o||{};if(!r)throw new s('Unable to proceed because \"methodId\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(r);const u=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r);if(!(null===(n=u.initializationData)||void 0===n?void 0:n.publishableKey))throw new l(t.MissingPaymentMethod);const{developerConfig:a,publishableKey:c}=u.initializationData;if(yield this.boltScriptLoader.loadBoltClient(c,u.config.testMode,a),i&&\"function\"==typeof i){const t=this.getCustomerEmail();i(yield this.hasBoltAccount(t),t)}})}deinitialize(){return Promise.resolve()}signIn(t,e){return B(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signInCustomer(t,e),Promise.resolve()})}signOut(t){return B(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(t),Promise.resolve()})}executePaymentMethodCheckout(t){return B(this,void 0,void 0,function*(){const{continueWithCheckoutCallback:e=P,checkoutPaymentMethodExecuted:n,methodId:r}=t||{},o=this.getCustomerEmail();if(!r)throw new s('Unable to proceed because \"methodId\" argument is not provided.');if(\"function\"!=typeof e)throw new s('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');if(o)return this.openBoltCheckoutModalOrThrow(o,r,e,n);e()})}openBoltCheckoutModalOrThrow(t,e,n,r){var o;return B(this,void 0,void 0,function*(){const i=this.getBoltClientOrThrow(),u=this.paymentIntegrationService.getState().getPaymentMethod(e);try{if(null===(o=null==u?void 0:u.initializationData)||void 0===o?void 0:o.embeddedOneClickEnabled){const e=yield this.hasBoltAccount(t);if(e){const e={close:()=>{n()}};yield i.openCheckout(t,e)}else n();\"function\"==typeof r&&r({hasBoltAccount:e})}else n()}catch(t){if(function(t){return\"string\"==typeof t.message&&\"string\"==typeof t.type&&(\"string\"==typeof t.subtype||!t.subtype)&&t instanceof Error}(t)&&\"MissingDataError\"!==t.name&&\"NotInitializedError\"!==t.name)throw new h(t.message);throw t}})}getBoltClientOrThrow(){const t=this.boltHostWindow.BoltCheckout;if(!t)throw new b(m.PaymentNotInitialized);return t}hasBoltAccount(t){return B(this,void 0,void 0,function*(){const e=this.getBoltClientOrThrow();try{return yield e.hasBoltAccount(t)}catch(t){throw new _}})}getCustomerEmail(){const t=this.paymentIntegrationService.getState(),e=t.getCustomer(),n=t.getBillingAddress();return(null==e?void 0:e.email)||(null==n?void 0:n.email)||\"\"}}const R=a(t=>new M(t,new C((0,e.vQ)())),[{id:\"bolt\"}]);var z=n(2586);class T extends c{constructor(t){super(t||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}class U{constructor(t,e,n=window){this.paymentIntegrationService=t,this.boltScriptLoader=e,this.boltHostWindow=n}initialize(t){return e=this,n=void 0,o=function*(){const{bolt:e,containerId:n,methodId:r}=t,{buyNowInitializeOptions:o,style:i}=e||{};if(!r)throw new s('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new s('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!e)throw new s('Unable to initialize payment because \"options.bolt\" argument is not provided.');if(!Boolean(o))throw new T(\"Only buy now flow is implemented for Bolt button\");if(!(null==o?void 0:o.storefrontApiToken)||\"string\"!=typeof o.storefrontApiToken)throw new s('Unable to initialize payment because \"options.storefrontApiToken\" argument is not provided.');const u=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r),{initializationData:a,config:c}=u,{publishableKey:l,developerConfig:f}=a||{};yield this.boltScriptLoader.loadBoltClient(l,c.testMode,f,\"BigCommerce\",o.storefrontApiToken),this.renderButton(n,u,i)},new((r=void 0)||(r=Promise))(function(t,i){function u(t){try{c(o.next(t))}catch(t){i(t)}}function a(t){try{c(o.throw(t))}catch(t){i(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(t){t(n)})).then(u,a)}c((o=o.apply(e,n||[])).next())});var e,n,r,o}deinitialize(){return Promise.resolve()}renderButton(t,e,n){var r;\"function\"==typeof(null===(r=this.boltHostWindow.BoltConnect)||void 0===r?void 0:r.setupProductPageCheckout)&&(this.addButtonContainer(t,e,n),this.boltHostWindow.BoltConnect.setupProductPageCheckout())}addButtonContainer(t,e,n){const r=document.getElementById(t);if(!r)return;const o=document.createElement(\"div\"),i=document.createElement(\"object\");o.setAttribute(\"id\",\"product-page-checkout-wrapper\"),o.setAttribute(\"class\",\"bolt-button-wrapper\"),o.setAttribute(\"style\",\"display:none\"),o.setAttribute(\"data-tid\",\"product-page-checkout-wrapper\"),i.setAttribute(\"data\",this.getBoltObjectData(e,n)),i.setAttribute(\"class\",\"bolt-product-checkout-button\"),o.append(i),r.innerHTML=\"\",r.append(o)}getBoltObjectData(t,e){const{initializationData:n,config:r}=t,{publishableKey:o,developerConfig:i}=n||{},u=this.boltScriptLoader.getDomainURL(!!r.testMode,i),a=this.getButtonHeight(null==e?void 0:e.size),c=this.getButtonBorderRadius(null==e?void 0:e.shape,a);return(0,z.stringifyUrl)({url:`https://${u}/v1/checkout_button`,query:{publishable_key:o,variant:\"ppc\",height:a,border_radius:c}})}getButtonHeight(t){if(t)switch(t){case S.Small:return 25;case S.Large:return 45;case S.Medium:default:return 40}}getButtonBorderRadius(t,e){if(t)switch(t){case O.Pill:return e?Math.round(e/2):void 0;case O.Rect:default:return 4}}}const N=a(t=>new U(t,new C((0,e.vQ)())),[{id:\"bolt\"}])})(),module.exports=r})();\n//# sourceMappingURL=bolt.js.map"
  },
  {
    "path": "dist/cjs/integrations/bolt.js.LICENSE.txt",
    "content": "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n"
  },
  {
    "path": "dist/cjs/integrations/braintree.js",
    "content": "(()=>{var t={9165(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t){var e=new r.default;return new i.default(e,t)};var r=n(9828),i=n(5470)},9828(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(){}return t.prototype.build=function(t,e,n){var r=this,i=document.createElement(\"form\");return i.style.display=\"none\",i.setAttribute(\"action\",t),i.setAttribute(\"method\",\"POST\"),i.setAttribute(\"target\",n||\"_top\"),Object.keys(e).forEach(function(t){var n=e[t];i.appendChild(r._createInput(n,t))}),i},t.prototype._createInput=function(t,e){var n=document.createElement(\"input\");return n.setAttribute(\"name\",e),n.setAttribute(\"type\",\"hidden\"),n.setAttribute(\"value\",t),n},t}();e.default=n},5470(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=n(9783),i=function(){function t(t,e){this._formBuilder=t,this._options=e}return t.prototype.postForm=function(t,e,n,r){var i=this._formBuilder.build(this._prependHost(t),e,r);window.addEventListener(\"unload\",function t(){window.removeEventListener(\"unload\",t),n&&n()}),document.body.appendChild(i),i.submit()},t.prototype._prependHost=function(t){return this._options&&this._options.host&&!(0,r.isAbsoluteUrl)(t)?(0,r.joinPaths)(this._options.host,t):t},t}();e.default=i},8686(t,e,n){\"use strict\";e.createFormPoster=void 0;var r=n(9165);Object.defineProperty(e,\"createFormPoster\",{enumerable:!0,get:function(){return r.default}});n(5470)},9783(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isAbsoluteUrl=function(t){return/^https?:\\/\\//.test(t)},e.joinPaths=function(t,e){return\"\".concat((n=t,n.replace(/\\/$/,\"\")),\"/\").concat(function(t){return t.replace(/^\\//,\"\")}(e));var n}},4325(t,e,n){\"use strict\";n.d(e,{g:()=>i});var r=n(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(r.stringify(e))},t}()},321(t,e,n){\"use strict\";n.d(e,{A:()=>s});var r=n(168),i=n(1675),o=n(5861),a=n(4670);function s(t){return new a.A(new o.A,new i.A,r,t)}},6889(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(2024);function i(t){return new r.A(t)}},4043(t,e,n){\"use strict\";n.r(e),n.d(e,{RequestSender:()=>o.A,Timeout:()=>a.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),a=n(2024)},4843(t,e,n){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}n.d(e,{A:()=>r})},1675(t,e,n){\"use strict\";n.d(e,{A:()=>s});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,a=/application\\/x-www-form-urlencoded/;const s=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(e))return JSON.stringify(t.body);if(a.test(e))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,\"Content-Type\");return t&&o.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var n,i=e.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}()},5861(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||\"GET\",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),\"boolean\"==typeof n.credentials&&(t.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(n){t.setRequestHeader(n,e[n])})},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(r.stringify(e,{encode:n})):t},t}()},4670(t,e,n){\"use strict\";n.d(e,{A:()=>c});var r=n(1635),i=n(35),o=n.n(i),a=n(4325),s=n(4843),u=n(2024);const c=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new a.g}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(e,i){var a=function(){var a=n._payloadTransformer.toResponse(o);a.status>=200&&a.status<300?(n._cacheRequest(t,r,a),e(a)):i(a)};o.onload=a,o.onerror=a,o.onabort=a,o.ontimeout=a,r.timeout instanceof u.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,s.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(n.headers[\"X-XSRF-TOKEN\"]=r),e&&e.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,e,n){\"use strict\";n.d(e,{A:()=>r});const r=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,e,n){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var n=t[e];return\"string\"==typeof n?\"\".concat(e,\"=\").concat(encodeURIComponent(n)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(e,{A:()=>r})},5889(t,e,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),a=n(3814);function s(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function u(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}function c(t,e){return e.decode?i(t):t}function l(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?l(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function d(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function h(t){const e=(t=d(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function f(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function p(t,e){s((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,n,r)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case\"bracket\":return(t,n,r)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"comma\":case\"separator\":return(e,n,r)=>{const i=\"string\"==typeof n&&n.includes(t.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&c(n,t).includes(t.arrayFormatSeparator);n=o?c(n,t):n;const a=i||o?n.split(t.arrayFormatSeparator).map(e=>c(e,t)):null===n?n:c(n,t);r[e]=a};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[].concat(n[t],e):n[t]=e}}}(e),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,a]=o(e.decode?i.replace(/\\+/g,\" \"):i,\"=\");a=void 0===a?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?a:c(a,e),n(c(t,e),a,r)}for(const t of Object.keys(r)){const n=r[t];if(\"object\"==typeof n&&null!==n)for(const t of Object.keys(n))n[t]=f(n[t],e);else r[t]=f(n,e)}return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce((t,e)=>{const n=r[e];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?t[e]=l(n):t[e]=n,t},Object.create(null))}e.extract=h,e.parse=p,e.stringify=(t,e)=>{if(!t)return\"\";s((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const n=n=>e.skipNull&&null==t[n]||e.skipEmptyString&&\"\"===t[n],r=function(t){switch(t.arrayFormat){case\"index\":return e=>(n,r)=>{const i=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(e,t),\"[\",i,\"]\"].join(\"\")]:[...n,[u(e,t),\"[\",u(i,t),\"]=\",u(r,t)].join(\"\")]};case\"bracket\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(e,t),\"[]\"].join(\"\")]:[...n,[u(e,t),\"[]=\",u(r,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(n,r)=>null==r||0===r.length?n:0===n.length?[[u(e,t),\"=\",u(r,t)].join(\"\")]:[[n,u(r,t)].join(t.arrayFormatSeparator)];default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,u(e,t)]:[...n,[u(e,t),\"=\",u(r,t)].join(\"\")]}}(e),i={};for(const e of Object.keys(t))n(e)||(i[e]=t[e]);const o=Object.keys(i);return!1!==e.sort&&o.sort(e.sort),o.map(n=>{const i=t[n];return void 0===i?\"\":null===i?u(n,e):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):u(n,e)+\"=\"+u(i,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[n,r]=o(t,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:p(h(t),e)},e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:c(r,e)}:{})},e.stringifyUrl=(t,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=d(t.url).split(\"?\")[0]||\"\",i=e.extract(t.url),o=e.parse(i,{sort:!1}),a=Object.assign(o,t.query);let s=e.stringify(a,n);s&&(s=`?${s}`);let c=function(t){let e=\"\";const n=t.indexOf(\"#\");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(c=`#${u(t.fragmentIdentifier,n)}`),`${r}${s}${c}`},e.pick=(t,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:s}=e.parseUrl(t,r);return e.stringifyUrl({url:i,query:a(o,n),fragmentIdentifier:s},r)},e.exclude=(t,n,r)=>{const i=Array.isArray(n)?t=>!n.includes(t):(t,e)=>!n(t,e);return e.pick(t,i,r)}},5477(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement(\"link\");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=n},471(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(t,e,n){\"use strict\";e.vQ=void 0;n(4886),n(471);var r=n(5895);Object.defineProperty(e,\"vQ\",{enumerable:!0,get:function(){return r.default}});n(7995),n(9722),n(282)},4886(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var n=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),a=e||{},s=a.async,u=void 0!==s&&s,c=a.attributes,l=void 0===c?{}:c;Object.keys(l).forEach(function(t){o.setAttribute(t,l[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(e){delete n._scripts[t],i(e)},o.async=u,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadScript(t,e)})).then(function(){})},t.prototype.preloadScript=function(t,e){var n=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(e||{}).prefetch,a=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var s=document.createElement(\"link\");s.as=\"script\",s.rel=a,s.href=t,s.onload=function(){r()},s.onerror=function(){delete n._preloadedScripts[t],i()},document.head.appendChild(s)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadScript(t,e)})).then(function(){})},t}();e.default=n},7995(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var n=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),a=e||{},s=a.prepend,u=void 0!==s&&s,c=a.attributes,l=void 0===c?{}:c;Object.keys(l).forEach(function(t){o.setAttribute(t,l[t])}),o.onload=function(){return r()},o.onerror=function(e){delete n._stylesheets[t],i(e)},o.rel=\"stylesheet\",o.href=t,u&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadStylesheet(t,e)})).then(function(){})},t.prototype.preloadStylesheet=function(t,e){var n=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(e||{}).prefetch,a=void 0!==o&&o,s=a?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(s)){var u=document.createElement(\"link\");u.as=\"style\",u.rel=a?\"prefetch\":\"preload\",u.href=t,u.onload=function(){r()},u.onerror=function(e){delete n._preloadedStylesheets[t],i(e)},document.head.appendChild(u)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadStylesheet(t,e)})).then(function(){})},t}();e.default=n},6472(t,e,n){\"use strict\";e.Jt=void 0,n(8914),n(9690),n(3255),n(523),n(7571),n(2100),n(3302),n(1045),n(5160),n(9356),n(9225),n(72),n(236),n(3069),n(441),n(7520),n(3686),n(648),n(1439),n(4651),n(9014),n(3761),n(9060),n(5886);var r=n(9262);e.Jt=r,n(8990)},5886(t,e,n){\"use strict\";var r=n(8914),i=n(9690),o=n(72);t.exports=function(){return r()||i()||o()}},8914(t){\"use strict\";t.exports=function(t){return t=t||window.navigator.userAgent,/Android/i.test(t)}},9690(t){\"use strict\";t.exports=function(t){return t=t||window.navigator.userAgent,/CrOS/i.test(t)}},3255(t,e,n){\"use strict\";var r=n(5160),i=n(3761),o=n(523),a=n(9014),s=n(9060);t.exports=function(t){return!(-1===(t=t||window.navigator.userAgent).indexOf(\"Chrome\")&&-1===t.indexOf(\"CriOS\")||r(t)||i(t)||o(t)||a(t)||s(t))}},523(t){\"use strict\";t.exports=function(t){return-1!==(t=t||window.navigator.userAgent).indexOf(\"DuckDuckGo/\")}},5160(t){\"use strict\";t.exports=function(t){return-1!==(t=t||window.navigator.userAgent).indexOf(\"Edge/\")||-1!==t.indexOf(\"Edg/\")}},9356(t){\"use strict\";t.exports=function(t){return t=t||window.navigator.userAgent,/Firefox/i.test(t)}},7571(t,e,n){\"use strict\";var r=n(1045);t.exports=function(t){return-1!==(t=t||window.navigator.userAgent).indexOf(\"MSIE\")||r(t)}},3302(t){\"use strict\";t.exports=function(t){return-1!==(t=t||window.navigator.userAgent).indexOf(\"MSIE 10\")}},1045(t){\"use strict\";t.exports=function(t){return-1!==(t=t||window.navigator.userAgent).indexOf(\"Trident/7\")}},2100(t){\"use strict\";t.exports=function(t){return-1!==(t=t||window.navigator.userAgent).indexOf(\"MSIE 9\")}},236(t){\"use strict\";t.exports=function(t){return t=t||window.navigator.userAgent,/FxiOS/i.test(t)}},3069(t,e,n){\"use strict\";var r=n(72);t.exports=function(t){return t=t||window.navigator.userAgent,r(t)&&function(t){return/\\bGSA\\b/.test(t)}(t)}},441(t,e,n){\"use strict\";var r=n(72),i=n(236),o=/webkit/i;t.exports=function(t){return t=t||window.navigator.userAgent,r(t)&&function(t){return o.test(t)}(t)&&!function(t){return t.indexOf(\"CriOS\")>-1}(t)&&!i(t)&&!function(t){return t.indexOf(\"FBAN\")>-1}(t)}},7520(t,e,n){\"use strict\";var r=n(3686);t.exports=function(t,e){return e=void 0!==e?e:window.statusbar.visible,r(t)&&!e}},3686(t,e,n){\"use strict\";var r=n(72),i=n(3069);t.exports=function(t){return t=t||window.navigator.userAgent,!!r(t)&&(!!i(t)||/.+AppleWebKit(?!.*Safari)/i.test(t))}},648(t,e,n){\"use strict\";var r=n(3686);t.exports=function(t,e){return e=void 0!==e?e:window.statusbar.visible,r(t)&&e}},72(t,e,n){\"use strict\";var r=n(1439);t.exports=function(t,e,n){void 0===e&&(e=!0),t=t||window.navigator.userAgent;var i=/iPhone|iPod|iPad/i.test(t);return e?i||r(t,n):i}},1439(t){\"use strict\";t.exports=function(t,e){return t=t||window.navigator.userAgent,e=e||window.document,/Mac|iPad/i.test(t)&&\"ontouchend\"in e}},4651(t,e,n){\"use strict\";var r=n(236),i=n(9356);t.exports=function(t){return t=t||window.navigator.userAgent,r(t)||/iPhone|iPod|iPad|Mobile|Tablet/i.test(t)&&i(t)}},9014(t){\"use strict\";t.exports=function(t){return-1!==(t=t||window.navigator.userAgent).indexOf(\"OPR/\")||-1!==t.indexOf(\"Opera/\")||-1!==t.indexOf(\"OPT/\")}},9225(t){\"use strict\";t.exports=function(t){return t=t||window.navigator.userAgent,/^Mozilla\\/5\\.0.*Safari\\//.test(t)&&!/(iPhone|iPad|iPod|Android|SM-)/i.test(t)&&!/Chrome|CriOS|FxiOS|OPiOS|mercury/i.test(t)}},3761(t){\"use strict\";t.exports=function(t){return t=t||window.navigator.userAgent,/SamsungBrowser/i.test(t)}},9060(t){\"use strict\";t.exports=function(t){return-1!==(t=t||window.navigator.userAgent).indexOf(\"Silk/\")}},8990(t,e,n){\"use strict\";var r=n(3255);t.exports=function(t){return t=t||window.navigator.userAgent,!!window.PaymentRequest&&(!r(t)||function(t){var e=t.match(/Chrome\\/(\\d+)\\./);return!!e&&parseInt(e[1],10)>=61}(t))}},9262(t,e,n){\"use strict\";var r=n(8914),i=n(236),o=n(3686),a=n(3255),s=n(3761),u=n(523);function c(t){return(t=t||window.navigator.userAgent).indexOf(\"Opera Mini\")>-1}t.exports=function(t){return t=t||window.navigator.userAgent,!(o(t)||i(t)||function(t){return t=t||window.navigator.userAgent,!!r(t)&&/Version\\/[\\d.]+/i.test(t)&&!c(t)&&!u(t)}(t)||c(t)||function(t){var e=(t=t||window.navigator.userAgent).match(/CriOS\\/(\\d+)\\./);return!!e&&parseInt(e[1],10)<48}(t)||function(t){return!a(t)&&!s(t)&&/samsung/i.test(t)}(t))}},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+e+\")+\",\"gi\");function i(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],i(n),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var e=t.match(n)||[],r=1;r<e.length;r++)e=(t=i(e,r).join(\"\")).match(n)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(t);n;){try{e[n[0]]=decodeURIComponent(n[0])}catch(t){var i=o(n[0]);i!==n[0]&&(e[n[0]]=i)}n=r.exec(t)}e[\"%C2\"]=\"�\";for(var a=Object.keys(e),s=0;s<a.length;s++){var u=a[s];t=t.replace(new RegExp(u,\"g\"),e[u])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,e){for(var n={},r=Object.keys(t),i=Array.isArray(e),o=0;o<r.length;o++){var a=r[o],s=t[a];(i?-1!==e.indexOf(a):e(a,s,t))&&(n[a]=s)}return n}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(e,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var a=JSON.stringify(n);/^[\\{\\[]/.test(a)&&(n=a)}catch(t){}n=r.write?r.write(n,e):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var s=\"\";for(var u in o)o[u]&&(s+=\"; \"+u,!0!==o[u]&&(s+=\"=\"+o[u].split(\";\")[0]));return document.cookie=e+\"=\"+n+s}}function a(t,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],a=0;a<o.length;a++){var s=o[a].split(\"=\"),u=s.slice(1).join(\"=\");n||'\"'!==u.charAt(0)||(u=u.slice(1,-1));try{var c=e(s[0]);if(u=(r.read||r)(u,c)||e(u),n)try{u=JSON.parse(u)}catch(t){}if(i[c]=u,t===c)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return a(t,!1)},i.getJSON=function(t){return a(t,!0)},i.remove=function(e,n){o(e,\"\",t(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},35(t,e,n){t=n.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",a=\"[object Function]\",s=\"[object Object]\",u=/^\\[object .+?Constructor\\]$/,c=/^(?:0|[1-9]\\d*)$/,l={};l[\"[object Float32Array]\"]=l[\"[object Float64Array]\"]=l[\"[object Int8Array]\"]=l[\"[object Int16Array]\"]=l[\"[object Int32Array]\"]=l[\"[object Uint8Array]\"]=l[\"[object Uint8ClampedArray]\"]=l[\"[object Uint16Array]\"]=l[\"[object Uint32Array]\"]=!0,l[o]=l[\"[object Array]\"]=l[\"[object ArrayBuffer]\"]=l[\"[object Boolean]\"]=l[\"[object DataView]\"]=l[\"[object Date]\"]=l[\"[object Error]\"]=l[a]=l[\"[object Map]\"]=l[\"[object Number]\"]=l[s]=l[\"[object RegExp]\"]=l[\"[object Set]\"]=l[\"[object String]\"]=l[\"[object WeakMap]\"]=!1;var d,h,f,p=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,y=\"object\"==typeof self&&self&&self.Object===Object&&self,v=p||y||Function(\"return this\")(),g=e&&!e.nodeType&&e,m=g&&t&&!t.nodeType&&t,b=m&&m.exports===g,w=b&&p.process,_=function(){try{return m&&m.require&&m.require(\"util\").types||w&&w.binding&&w.binding(\"util\")}catch(t){}}(),S=_&&_.isTypedArray,C=Array.prototype,P=Function.prototype,I=Object.prototype,O=v[\"__core-js_shared__\"],k=P.toString,E=I.hasOwnProperty,A=(d=/[^.]+$/.exec(O&&O.keys&&O.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+d:\"\",x=I.toString,T=k.call(Object),j=RegExp(\"^\"+k.call(E).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),z=b?v.Buffer:void 0,N=v.Symbol,M=v.Uint8Array,D=(z&&z.allocUnsafe,h=Object.getPrototypeOf,f=Object,function(t){return h(f(t))}),B=Object.create,F=I.propertyIsEnumerable,L=C.splice,R=N?N.toStringTag:void 0,U=function(){try{var t=st(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),V=z?z.isBuffer:void 0,q=Math.max,H=Date.now,W=st(v,\"Map\"),$=st(Object,\"create\"),G=function(){function t(){}return function(e){if(!bt(e))return{};if(B)return B(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function Y(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function J(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function K(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Q(t){var e=this.__data__=new J(t);this.size=e.size}function Z(t,e,n){(void 0!==n&&!ht(t[e],n)||void 0===n&&!(e in t))&&et(t,e,n)}function X(t,e,n){var r=t[e];E.call(t,e)&&ht(r,n)&&(void 0!==n||e in t)||et(t,e,n)}function tt(t,e){for(var n=t.length;n--;)if(ht(t[n][0],e))return n;return-1}function et(t,e,n){\"__proto__\"==e&&U?U(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}Y.prototype.clear=function(){this.__data__=$?$(null):{},this.size=0},Y.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Y.prototype.get=function(t){var e=this.__data__;if($){var n=e[t];return n===r?void 0:n}return E.call(e,t)?e[t]:void 0},Y.prototype.has=function(t){var e=this.__data__;return $?void 0!==e[t]:E.call(e,t)},Y.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=$&&void 0===e?r:e,this},J.prototype.clear=function(){this.__data__=[],this.size=0},J.prototype.delete=function(t){var e=this.__data__,n=tt(e,t);return!(n<0||(n==e.length-1?e.pop():L.call(e,n,1),--this.size,0))},J.prototype.get=function(t){var e=this.__data__,n=tt(e,t);return n<0?void 0:e[n][1]},J.prototype.has=function(t){return tt(this.__data__,t)>-1},J.prototype.set=function(t,e){var n=this.__data__,r=tt(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},K.prototype.clear=function(){this.size=0,this.__data__={hash:new Y,map:new(W||J),string:new Y}},K.prototype.delete=function(t){var e=at(this,t).delete(t);return this.size-=e?1:0,e},K.prototype.get=function(t){return at(this,t).get(t)},K.prototype.has=function(t){return at(this,t).has(t)},K.prototype.set=function(t,e){var n=at(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Q.prototype.clear=function(){this.__data__=new J,this.size=0},Q.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Q.prototype.get=function(t){return this.__data__.get(t)},Q.prototype.has=function(t){return this.__data__.has(t)},Q.prototype.set=function(t,e){var n=this.__data__;if(n instanceof J){var r=n.__data__;if(!W||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new K(r)}return n.set(t,e),this.size=n.size,this};function nt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":R&&R in Object(t)?function(t){var e=E.call(t,R),n=t[R];try{t[R]=void 0;var r=!0}catch(t){}var i=x.call(t);return r&&(e?t[R]=n:delete t[R]),i}(t):function(t){return x.call(t)}(t)}function rt(t){return wt(t)&&nt(t)==o}function it(t,e,n,r,i){t!==e&&function(t,e,n){for(var r=-1,i=Object(t),o=n(t),a=o.length;a--;){var s=o[++r];if(!1===e(i[s],s,i))break}}(e,function(o,a){if(i||(i=new Q),bt(o))!function(t,e,n,r,i,o,a){var u=lt(t,n),c=lt(e,n),l=a.get(c);if(l)Z(t,n,l);else{var d,h,f,p,y,v=o?o(u,c,n+\"\",t,e,a):void 0,g=void 0===v;if(g){var m=pt(c),b=!m&&vt(c),w=!m&&!b&&_t(c);v=c,m||b||w?pt(u)?v=u:wt(y=u)&&yt(y)?v=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}(u):b?(g=!1,v=function(t){return t.slice()}(c)):w?(g=!1,p=new(f=(d=c).buffer).constructor(f.byteLength),new M(p).set(new M(f)),h=p,v=new d.constructor(h,d.byteOffset,d.length)):v=[]:function(t){if(!wt(t)||nt(t)!=s)return!1;var e=D(t);if(null===e)return!0;var n=E.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&k.call(n)==T}(c)||ft(c)?(v=u,ft(u)?v=function(t){return function(t,e,n){var r=!n;n||(n={});for(var i=-1,o=e.length;++i<o;){var a=e[i],s=void 0;void 0===s&&(s=t[a]),r?et(n,a,s):X(n,a,s)}return n}(t,St(t))}(u):bt(u)&&!gt(u)||(v=function(t){return\"function\"!=typeof t.constructor||ct(t)?{}:G(D(t))}(c))):g=!1}g&&(a.set(c,v),i(v,c,r,o,a),a.delete(c)),Z(t,n,v)}}(t,e,a,n,it,r,i);else{var u=r?r(lt(t,a),o,a+\"\",t,e,i):void 0;void 0===u&&(u=o),Z(t,a,u)}},St)}var ot=U?function(t,e){return U(t,\"toString\",{configurable:!0,enumerable:!1,value:(n=e,function(){return n}),writable:!0});var n}:It;function at(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function st(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!bt(t)||function(t){return!!A&&A in t}(t))&&(gt(t)?j:u).test(function(t){if(null!=t){try{return k.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(n)?n:void 0}function ut(t,e){var n=typeof t;return!!(e=e??i)&&(\"number\"==n||\"symbol\"!=n&&c.test(t))&&t>-1&&t%1==0&&t<e}function ct(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||I)}function lt(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var dt=function(t){var e=0,n=0;return function(){var r=H(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ot);function ht(t,e){return t===e||t!=t&&e!=e}var ft=rt(function(){return arguments}())?rt:function(t){return wt(t)&&E.call(t,\"callee\")&&!F.call(t,\"callee\")},pt=Array.isArray;function yt(t){return null!=t&&mt(t.length)&&!gt(t)}var vt=V||function(){return!1};function gt(t){if(!bt(t))return!1;var e=nt(t);return e==a||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function mt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function bt(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function wt(t){return null!=t&&\"object\"==typeof t}var _t=S?function(t){return function(e){return t(e)}}(S):function(t){return wt(t)&&mt(t.length)&&!!l[nt(t)]};function St(t){return yt(t)?function(t,e){var n=pt(t),r=!n&&ft(t),i=!n&&!r&&vt(t),o=!n&&!r&&!i&&_t(t),a=n||r||i||o,s=a?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],u=s.length;for(var c in t)!e&&!E.call(t,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||ut(c,u))||s.push(c);return s}(t,!0):function(t){if(!bt(t))return function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}(t);var e=ct(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&E.call(t,r))&&n.push(r);return n}(t)}var Ct,Pt=(Ct=function(t,e,n){it(t,e,n)},function(t,e){return dt(function(t,e,n){return e=q(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=q(r.length-e,0),a=Array(o);++i<o;)a[i]=r[e+i];i=-1;for(var s=Array(e+1);++i<e;)s[i]=r[i];return s[e]=n(a),function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}(t,this,s)}}(t,e,It),t+\"\")}(function(t,e){var n=-1,r=e.length,i=r>1?e[r-1]:void 0,o=r>2?e[2]:void 0;for(i=Ct.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,e,n){if(!bt(n))return!1;var r=typeof e;return!!(\"number\"==r?yt(n)&&ut(e,n.length):\"string\"==r&&e in n)&&ht(n[e],t)}(e[0],e[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++n<r;){var a=e[n];a&&Ct(t,a,n)}return t}));function It(t){return t}t.exports=Pt},9440(t,e,n){t=n.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",s=32,u=128,c=1/0,l=9007199254740991,d=NaN,h=4294967295,f=[[\"ary\",u],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",s],[\"partialRight\",64],[\"rearg\",256]],p=\"[object Arguments]\",y=\"[object Array]\",v=\"[object Boolean]\",g=\"[object Date]\",m=\"[object Error]\",b=\"[object Function]\",w=\"[object GeneratorFunction]\",_=\"[object Map]\",S=\"[object Number]\",C=\"[object Object]\",P=\"[object Promise]\",I=\"[object RegExp]\",O=\"[object Set]\",k=\"[object String]\",E=\"[object Symbol]\",A=\"[object WeakMap]\",x=\"[object ArrayBuffer]\",T=\"[object DataView]\",j=\"[object Float32Array]\",z=\"[object Float64Array]\",N=\"[object Int8Array]\",M=\"[object Int16Array]\",D=\"[object Int32Array]\",B=\"[object Uint8Array]\",F=\"[object Uint8ClampedArray]\",L=\"[object Uint16Array]\",R=\"[object Uint32Array]\",U=/\\b__p \\+= '';/g,V=/\\b(__p \\+=) '' \\+/g,q=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,H=/&(?:amp|lt|gt|quot|#39);/g,W=/[&<>\"']/g,$=RegExp(H.source),G=RegExp(W.source),Y=/<%-([\\s\\S]+?)%>/g,J=/<%([\\s\\S]+?)%>/g,K=/<%=([\\s\\S]+?)%>/g,Q=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Z=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,et=RegExp(tt.source),nt=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,at=/,? & /,st=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ut=/[()=,{}\\[\\]\\/\\s]/,ct=/\\\\(\\\\)?/g,lt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,dt=/\\w*$/,ht=/^[-+]0x[0-9a-f]+$/i,ft=/^0b[01]+$/i,pt=/^\\[object .+?Constructor\\]$/,yt=/^0o[0-7]+$/i,vt=/^(?:0|[1-9]\\d*)$/,gt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,mt=/($^)/,bt=/['\\n\\r\\u2028\\u2029\\\\]/g,wt=\"\\\\ud800-\\\\udfff\",_t=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",St=\"\\\\u2700-\\\\u27bf\",Ct=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Pt=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",It=\"\\\\ufe0e\\\\ufe0f\",Ot=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",kt=\"[\"+wt+\"]\",Et=\"[\"+Ot+\"]\",At=\"[\"+_t+\"]\",xt=\"\\\\d+\",Tt=\"[\"+St+\"]\",jt=\"[\"+Ct+\"]\",zt=\"[^\"+wt+Ot+xt+St+Ct+Pt+\"]\",Nt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Mt=\"[^\"+wt+\"]\",Dt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Bt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ft=\"[\"+Pt+\"]\",Lt=\"\\\\u200d\",Rt=\"(?:\"+jt+\"|\"+zt+\")\",Ut=\"(?:\"+Ft+\"|\"+zt+\")\",Vt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",qt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Ht=\"(?:\"+At+\"|\"+Nt+\")?\",Wt=\"[\"+It+\"]?\",$t=Wt+Ht+\"(?:\"+Lt+\"(?:\"+[Mt,Dt,Bt].join(\"|\")+\")\"+Wt+Ht+\")*\",Gt=\"(?:\"+[Tt,Dt,Bt].join(\"|\")+\")\"+$t,Yt=\"(?:\"+[Mt+At+\"?\",At,Dt,Bt,kt].join(\"|\")+\")\",Jt=RegExp(\"['’]\",\"g\"),Kt=RegExp(At,\"g\"),Qt=RegExp(Nt+\"(?=\"+Nt+\")|\"+Yt+$t,\"g\"),Zt=RegExp([Ft+\"?\"+jt+\"+\"+Vt+\"(?=\"+[Et,Ft,\"$\"].join(\"|\")+\")\",Ut+\"+\"+qt+\"(?=\"+[Et,Ft+Rt,\"$\"].join(\"|\")+\")\",Ft+\"?\"+Rt+\"+\"+Vt,Ft+\"+\"+qt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",xt,Gt].join(\"|\"),\"g\"),Xt=RegExp(\"[\"+Lt+wt+_t+It+\"]\"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ne=-1,re={};re[j]=re[z]=re[N]=re[M]=re[D]=re[B]=re[F]=re[L]=re[R]=!0,re[p]=re[y]=re[x]=re[v]=re[T]=re[g]=re[m]=re[b]=re[_]=re[S]=re[C]=re[I]=re[O]=re[k]=re[A]=!1;var ie={};ie[p]=ie[y]=ie[x]=ie[T]=ie[v]=ie[g]=ie[j]=ie[z]=ie[N]=ie[M]=ie[D]=ie[_]=ie[S]=ie[C]=ie[I]=ie[O]=ie[k]=ie[E]=ie[B]=ie[F]=ie[L]=ie[R]=!0,ie[m]=ie[b]=ie[A]=!1;var oe={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ae=parseFloat,se=parseInt,ue=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,ce=\"object\"==typeof self&&self&&self.Object===Object&&self,le=ue||ce||Function(\"return this\")(),de=e&&!e.nodeType&&e,he=de&&t&&!t.nodeType&&t,fe=he&&he.exports===de,pe=fe&&ue.process,ye=function(){try{return he&&he.require&&he.require(\"util\").types||pe&&pe.binding&&pe.binding(\"util\")}catch(t){}}(),ve=ye&&ye.isArrayBuffer,ge=ye&&ye.isDate,me=ye&&ye.isMap,be=ye&&ye.isRegExp,we=ye&&ye.isSet,_e=ye&&ye.isTypedArray;function Se(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Ce(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i];e(r,a,n(a),t)}return r}function Pe(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function Ie(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function Oe(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function ke(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var a=t[n];e(a,n,t)&&(o[i++]=a)}return o}function Ee(t,e){return!(null==t||!t.length)&&Fe(t,e,0)>-1}function Ae(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function xe(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function Te(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function je(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function ze(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function Ne(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var Me=Ve(\"length\");function De(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function Be(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function Fe(t,e,n){return e==e?function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):Be(t,Re,n)}function Le(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function Re(t){return t!=t}function Ue(t,e){var n=null==t?0:t.length;return n?We(t,e)/n:d}function Ve(t){return function(e){return null==e?r:e[t]}}function qe(t){return function(e){return null==t?r:t[e]}}function He(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function We(t,e){for(var n,i=-1,o=t.length;++i<o;){var a=e(t[i]);a!==r&&(n=n===r?a:n+a)}return n}function $e(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function Ge(t){return t?t.slice(0,dn(t)+1).replace(nt,\"\"):t}function Ye(t){return function(e){return t(e)}}function Je(t,e){return xe(e,function(e){return t[e]})}function Ke(t,e){return t.has(e)}function Qe(t,e){for(var n=-1,r=t.length;++n<r&&Fe(e,t[n],0)>-1;);return n}function Ze(t,e){for(var n=t.length;n--&&Fe(e,t[n],0)>-1;);return n}var Xe=qe({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tn=qe({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function en(t){return\"\\\\\"+oe[t]}function nn(t){return Xt.test(t)}function rn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function on(t,e){return function(n){return t(e(n))}}function an(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var s=t[n];s!==e&&s!==a||(t[n]=a,o[i++]=n)}return o}function sn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function un(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function cn(t){return nn(t)?function(t){for(var e=Qt.lastIndex=0;Qt.test(t);)++e;return e}(t):Me(t)}function ln(t){return nn(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.split(\"\")}(t)}function dn(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}var hn=qe({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),fn=function t(e){var n,rt=(e=null==e?le:fn.defaults(le.Object(),e,fn.pick(le,ee))).Array,wt=e.Date,_t=e.Error,St=e.Function,Ct=e.Math,Pt=e.Object,It=e.RegExp,Ot=e.String,kt=e.TypeError,Et=rt.prototype,At=St.prototype,xt=Pt.prototype,Tt=e[\"__core-js_shared__\"],jt=At.toString,zt=xt.hasOwnProperty,Nt=0,Mt=(n=/[^.]+$/.exec(Tt&&Tt.keys&&Tt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Dt=xt.toString,Bt=jt.call(Pt),Ft=le._,Lt=It(\"^\"+jt.call(zt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Rt=fe?e.Buffer:r,Ut=e.Symbol,Vt=e.Uint8Array,qt=Rt?Rt.allocUnsafe:r,Ht=on(Pt.getPrototypeOf,Pt),Wt=Pt.create,$t=xt.propertyIsEnumerable,Gt=Et.splice,Yt=Ut?Ut.isConcatSpreadable:r,Qt=Ut?Ut.iterator:r,Xt=Ut?Ut.toStringTag:r,oe=function(){try{var t=uo(Pt,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ue=e.clearTimeout!==le.clearTimeout&&e.clearTimeout,ce=wt&&wt.now!==le.Date.now&&wt.now,de=e.setTimeout!==le.setTimeout&&e.setTimeout,he=Ct.ceil,pe=Ct.floor,ye=Pt.getOwnPropertySymbols,Me=Rt?Rt.isBuffer:r,qe=e.isFinite,pn=Et.join,yn=on(Pt.keys,Pt),vn=Ct.max,gn=Ct.min,mn=wt.now,bn=e.parseInt,wn=Ct.random,_n=Et.reverse,Sn=uo(e,\"DataView\"),Cn=uo(e,\"Map\"),Pn=uo(e,\"Promise\"),In=uo(e,\"Set\"),On=uo(e,\"WeakMap\"),kn=uo(Pt,\"create\"),En=On&&new On,An={},xn=Bo(Sn),Tn=Bo(Cn),jn=Bo(Pn),zn=Bo(In),Nn=Bo(On),Mn=Ut?Ut.prototype:r,Dn=Mn?Mn.valueOf:r,Bn=Mn?Mn.toString:r;function Fn(t){if(ts(t)&&!qa(t)&&!(t instanceof Vn)){if(t instanceof Un)return t;if(zt.call(t,\"__wrapped__\"))return Fo(t)}return new Un(t)}var Ln=function(){function t(){}return function(e){if(!Xa(e))return{};if(Wt)return Wt(e);t.prototype=e;var n=new t;return t.prototype=r,n}}();function Rn(){}function Un(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=r}function Vn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function qn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Hn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Wn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function $n(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Wn;++e<n;)this.add(t[e])}function Gn(t){var e=this.__data__=new Hn(t);this.size=e.size}function Yn(t,e){var n=qa(t),r=!n&&Va(t),i=!n&&!r&&Ga(t),o=!n&&!r&&!i&&us(t),a=n||r||i||o,s=a?$e(t.length,Ot):[],u=s.length;for(var c in t)!e&&!zt.call(t,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||vo(c,u))||s.push(c);return s}function Jn(t){var e=t.length;return e?t[Wr(0,e-1)]:r}function Kn(t,e){return jo(Oi(t),or(e,0,t.length))}function Qn(t){return jo(Oi(t))}function Zn(t,e,n){(n!==r&&!La(t[e],n)||n===r&&!(e in t))&&rr(t,e,n)}function Xn(t,e,n){var i=t[e];zt.call(t,e)&&La(i,n)&&(n!==r||e in t)||rr(t,e,n)}function tr(t,e){for(var n=t.length;n--;)if(La(t[n][0],e))return n;return-1}function er(t,e,n,r){return lr(t,function(t,i,o){e(r,t,n(t),o)}),r}function nr(t,e){return t&&ki(e,xs(e),t)}function rr(t,e,n){\"__proto__\"==e&&oe?oe(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function ir(t,e){for(var n=-1,i=e.length,o=rt(i),a=null==t;++n<i;)o[n]=a?r:Is(t,e[n]);return o}function or(t,e,n){return t==t&&(n!==r&&(t=t<=n?t:n),e!==r&&(t=t>=e?t:e)),t}function ar(t,e,n,i,o,a){var s,u=1&e,c=2&e,l=4&e;if(n&&(s=o?n(t,i,o,a):n(t)),s!==r)return s;if(!Xa(t))return t;var d=qa(t);if(d){if(s=function(t){var e=t.length,n=new t.constructor(e);return e&&\"string\"==typeof t[0]&&zt.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}(t),!u)return Oi(t,s)}else{var h=ho(t),f=h==b||h==w;if(Ga(t))return wi(t,u);if(h==C||h==p||f&&!o){if(s=c||f?{}:po(t),!u)return c?function(t,e){return ki(t,lo(t),e)}(t,function(t,e){return t&&ki(e,Ts(e),t)}(s,t)):function(t,e){return ki(t,co(t),e)}(t,nr(s,t))}else{if(!ie[h])return o?t:{};s=function(t,e,n){var r,i=t.constructor;switch(e){case x:return _i(t);case v:case g:return new i(+t);case T:return function(t,e){var n=e?_i(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case j:case z:case N:case M:case D:case B:case F:case L:case R:return Si(t,n);case _:return new i;case S:case k:return new i(t);case I:return function(t){var e=new t.constructor(t.source,dt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case O:return new i;case E:return r=t,Dn?Pt(Dn.call(r)):{}}}(t,h,u)}}a||(a=new Gn);var y=a.get(t);if(y)return y;a.set(t,s),os(t)?t.forEach(function(r){s.add(ar(r,e,n,r,t,a))}):es(t)&&t.forEach(function(r,i){s.set(i,ar(r,e,n,i,t,a))});var m=d?r:(l?c?eo:to:c?Ts:xs)(t);return Pe(m||t,function(r,i){m&&(r=t[i=r]),Xn(s,i,ar(r,e,n,i,t,a))}),s}function sr(t,e,n){var i=n.length;if(null==t)return!i;for(t=Pt(t);i--;){var o=n[i],a=e[o],s=t[o];if(s===r&&!(o in t)||!a(s))return!1}return!0}function ur(t,e,n){if(\"function\"!=typeof t)throw new kt(i);return Eo(function(){t.apply(r,n)},e)}function cr(t,e,n,r){var i=-1,o=Ee,a=!0,s=t.length,u=[],c=e.length;if(!s)return u;n&&(e=xe(e,Ye(n))),r?(o=Ae,a=!1):e.length>=200&&(o=Ke,a=!1,e=new $n(e));t:for(;++i<s;){var l=t[i],d=null==n?l:n(l);if(l=r||0!==l?l:0,a&&d==d){for(var h=c;h--;)if(e[h]===d)continue t;u.push(l)}else o(e,d,r)||u.push(l)}return u}Fn.templateSettings={escape:Y,evaluate:J,interpolate:K,variable:\"\",imports:{_:Fn}},Fn.prototype=Rn.prototype,Fn.prototype.constructor=Fn,Un.prototype=Ln(Rn.prototype),Un.prototype.constructor=Un,Vn.prototype=Ln(Rn.prototype),Vn.prototype.constructor=Vn,qn.prototype.clear=function(){this.__data__=kn?kn(null):{},this.size=0},qn.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},qn.prototype.get=function(t){var e=this.__data__;if(kn){var n=e[t];return n===o?r:n}return zt.call(e,t)?e[t]:r},qn.prototype.has=function(t){var e=this.__data__;return kn?e[t]!==r:zt.call(e,t)},qn.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=kn&&e===r?o:e,this},Hn.prototype.clear=function(){this.__data__=[],this.size=0},Hn.prototype.delete=function(t){var e=this.__data__,n=tr(e,t);return!(n<0||(n==e.length-1?e.pop():Gt.call(e,n,1),--this.size,0))},Hn.prototype.get=function(t){var e=this.__data__,n=tr(e,t);return n<0?r:e[n][1]},Hn.prototype.has=function(t){return tr(this.__data__,t)>-1},Hn.prototype.set=function(t,e){var n=this.__data__,r=tr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Wn.prototype.clear=function(){this.size=0,this.__data__={hash:new qn,map:new(Cn||Hn),string:new qn}},Wn.prototype.delete=function(t){var e=ao(this,t).delete(t);return this.size-=e?1:0,e},Wn.prototype.get=function(t){return ao(this,t).get(t)},Wn.prototype.has=function(t){return ao(this,t).has(t)},Wn.prototype.set=function(t,e){var n=ao(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},$n.prototype.add=$n.prototype.push=function(t){return this.__data__.set(t,o),this},$n.prototype.has=function(t){return this.__data__.has(t)},Gn.prototype.clear=function(){this.__data__=new Hn,this.size=0},Gn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Gn.prototype.get=function(t){return this.__data__.get(t)},Gn.prototype.has=function(t){return this.__data__.has(t)},Gn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Hn){var r=n.__data__;if(!Cn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Wn(r)}return n.set(t,e),this.size=n.size,this};var lr=xi(mr),dr=xi(br,!0);function hr(t,e){var n=!0;return lr(t,function(t,r,i){return n=!!e(t,r,i)}),n}function fr(t,e,n){for(var i=-1,o=t.length;++i<o;){var a=t[i],s=e(a);if(null!=s&&(u===r?s==s&&!ss(s):n(s,u)))var u=s,c=a}return c}function pr(t,e){var n=[];return lr(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function yr(t,e,n,r,i){var o=-1,a=t.length;for(n||(n=yo),i||(i=[]);++o<a;){var s=t[o];e>0&&n(s)?e>1?yr(s,e-1,n,r,i):Te(i,s):r||(i[i.length]=s)}return i}var vr=Ti(),gr=Ti(!0);function mr(t,e){return t&&vr(t,e,xs)}function br(t,e){return t&&gr(t,e,xs)}function wr(t,e){return ke(e,function(e){return Ka(t[e])})}function _r(t,e){for(var n=0,i=(e=vi(e,t)).length;null!=t&&n<i;)t=t[Do(e[n++])];return n&&n==i?t:r}function Sr(t,e,n){var r=e(t);return qa(t)?r:Te(r,n(t))}function Cr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Xt&&Xt in Pt(t)?function(t){var e=zt.call(t,Xt),n=t[Xt];try{t[Xt]=r;var i=!0}catch(t){}var o=Dt.call(t);return i&&(e?t[Xt]=n:delete t[Xt]),o}(t):function(t){return Dt.call(t)}(t)}function Pr(t,e){return t>e}function Ir(t,e){return null!=t&&zt.call(t,e)}function Or(t,e){return null!=t&&e in Pt(t)}function kr(t,e,n){for(var i=n?Ae:Ee,o=t[0].length,a=t.length,s=a,u=rt(a),c=1/0,l=[];s--;){var d=t[s];s&&e&&(d=xe(d,Ye(e))),c=gn(d.length,c),u[s]=!n&&(e||o>=120&&d.length>=120)?new $n(s&&d):r}d=t[0];var h=-1,f=u[0];t:for(;++h<o&&l.length<c;){var p=d[h],y=e?e(p):p;if(p=n||0!==p?p:0,!(f?Ke(f,y):i(l,y,n))){for(s=a;--s;){var v=u[s];if(!(v?Ke(v,y):i(t[s],y,n)))continue t}f&&f.push(y),l.push(p)}}return l}function Er(t,e,n){var i=null==(t=Io(t,e=vi(e,t)))?t:t[Do(Jo(e))];return null==i?r:Se(i,t,n)}function Ar(t){return ts(t)&&Cr(t)==p}function xr(t,e,n,i,o){return t===e||(null==t||null==e||!ts(t)&&!ts(e)?t!=t&&e!=e:function(t,e,n,i,o,a){var s=qa(t),u=qa(e),c=s?y:ho(t),l=u?y:ho(e),d=(c=c==p?C:c)==C,h=(l=l==p?C:l)==C,f=c==l;if(f&&Ga(t)){if(!Ga(e))return!1;s=!0,d=!1}if(f&&!d)return a||(a=new Gn),s||us(t)?Zi(t,e,n,i,o,a):function(t,e,n,r,i,o,a){switch(n){case T:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case x:return!(t.byteLength!=e.byteLength||!o(new Vt(t),new Vt(e)));case v:case g:case S:return La(+t,+e);case m:return t.name==e.name&&t.message==e.message;case I:case k:return t==e+\"\";case _:var s=rn;case O:var u=1&r;if(s||(s=sn),t.size!=e.size&&!u)return!1;var c=a.get(t);if(c)return c==e;r|=2,a.set(t,e);var l=Zi(s(t),s(e),r,i,o,a);return a.delete(t),l;case E:if(Dn)return Dn.call(t)==Dn.call(e)}return!1}(t,e,c,n,i,o,a);if(!(1&n)){var b=d&&zt.call(t,\"__wrapped__\"),w=h&&zt.call(e,\"__wrapped__\");if(b||w){var P=b?t.value():t,A=w?e.value():e;return a||(a=new Gn),o(P,A,n,i,a)}}return!!f&&(a||(a=new Gn),function(t,e,n,i,o,a){var s=1&n,u=to(t),c=u.length;if(c!=to(e).length&&!s)return!1;for(var l=c;l--;){var d=u[l];if(!(s?d in e:zt.call(e,d)))return!1}var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var p=!0;a.set(t,e),a.set(e,t);for(var y=s;++l<c;){var v=t[d=u[l]],g=e[d];if(i)var m=s?i(g,v,d,e,t,a):i(v,g,d,t,e,a);if(!(m===r?v===g||o(v,g,n,i,a):m)){p=!1;break}y||(y=\"constructor\"==d)}if(p&&!y){var b=t.constructor,w=e.constructor;b==w||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof b&&b instanceof b&&\"function\"==typeof w&&w instanceof w||(p=!1)}return a.delete(t),a.delete(e),p}(t,e,n,i,o,a))}(t,e,n,i,xr,o))}function Tr(t,e,n,i){var o=n.length,a=o,s=!i;if(null==t)return!a;for(t=Pt(t);o--;){var u=n[o];if(s&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++o<a;){var c=(u=n[o])[0],l=t[c],d=u[1];if(s&&u[2]){if(l===r&&!(c in t))return!1}else{var h=new Gn;if(i)var f=i(l,d,c,t,e,h);if(!(f===r?xr(d,l,3,i,h):f))return!1}}return!0}function jr(t){return!(!Xa(t)||(e=t,Mt&&Mt in e))&&(Ka(t)?Lt:pt).test(Bo(t));var e}function zr(t){return\"function\"==typeof t?t:null==t?nu:\"object\"==typeof t?qa(t)?Fr(t[0],t[1]):Br(t):du(t)}function Nr(t){if(!_o(t))return yn(t);var e=[];for(var n in Pt(t))zt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function Mr(t,e){return t<e}function Dr(t,e){var n=-1,r=Wa(t)?rt(t.length):[];return lr(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Br(t){var e=so(t);return 1==e.length&&e[0][2]?Co(e[0][0],e[0][1]):function(n){return n===t||Tr(n,t,e)}}function Fr(t,e){return mo(t)&&So(e)?Co(Do(t),e):function(n){var i=Is(n,t);return i===r&&i===e?Os(n,t):xr(e,i,3)}}function Lr(t,e,n,i,o){t!==e&&vr(e,function(a,s){if(o||(o=new Gn),Xa(a))!function(t,e,n,i,o,a,s){var u=Oo(t,n),c=Oo(e,n),l=s.get(c);if(l)Zn(t,n,l);else{var d=a?a(u,c,n+\"\",t,e,s):r,h=d===r;if(h){var f=qa(c),p=!f&&Ga(c),y=!f&&!p&&us(c);d=c,f||p||y?qa(u)?d=u:$a(u)?d=Oi(u):p?(h=!1,d=wi(c,!0)):y?(h=!1,d=Si(c,!0)):d=[]:rs(c)||Va(c)?(d=u,Va(u)?d=vs(u):Xa(u)&&!Ka(u)||(d=po(c))):h=!1}h&&(s.set(c,d),o(d,c,i,a,s),s.delete(c)),Zn(t,n,d)}}(t,e,s,n,Lr,i,o);else{var u=i?i(Oo(t,s),a,s+\"\",t,e,o):r;u===r&&(u=a),Zn(t,s,u)}},Ts)}function Rr(t,e){var n=t.length;if(n)return vo(e+=e<0?n:0,n)?t[e]:r}function Ur(t,e,n){e=e.length?xe(e,function(t){return qa(t)?function(e){return _r(e,1===t.length?t[0]:t)}:t}):[nu];var r=-1;e=xe(e,Ye(oo()));var i=Dr(t,function(t,n,i){var o=xe(e,function(e){return e(t)});return{criteria:o,index:++r,value:t}});return function(t){var e=t.length;for(t.sort(function(t,e){return function(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,a=i.length,s=n.length;++r<a;){var u=Ci(i[r],o[r]);if(u)return r>=s?u:u*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)});e--;)t[e]=t[e].value;return t}(i)}function Vr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var a=e[r],s=_r(t,a);n(s,a)&&Kr(o,vi(a,t),s)}return o}function qr(t,e,n,r){var i=r?Le:Fe,o=-1,a=e.length,s=t;for(t===e&&(e=Oi(e)),n&&(s=xe(t,Ye(n)));++o<a;)for(var u=0,c=e[o],l=n?n(c):c;(u=i(s,l,u,r))>-1;)s!==t&&Gt.call(s,u,1),Gt.call(t,u,1);return t}function Hr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;vo(i)?Gt.call(t,i,1):ui(t,i)}}return t}function Wr(t,e){return t+pe(wn()*(e-t+1))}function $r(t,e){var n=\"\";if(!t||e<1||e>l)return n;do{e%2&&(n+=t),(e=pe(e/2))&&(t+=t)}while(e);return n}function Gr(t,e){return Ao(Po(t,e,nu),t+\"\")}function Yr(t){return Jn(Ls(t))}function Jr(t,e){var n=Ls(t);return jo(n,or(e,0,n.length))}function Kr(t,e,n,i){if(!Xa(t))return t;for(var o=-1,a=(e=vi(e,t)).length,s=a-1,u=t;null!=u&&++o<a;){var c=Do(e[o]),l=n;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return t;if(o!=s){var d=u[c];(l=i?i(d,c,u):r)===r&&(l=Xa(d)?d:vo(e[o+1])?[]:{})}Xn(u,c,l),u=u[c]}return t}var Qr=En?function(t,e){return En.set(t,e),t}:nu,Zr=oe?function(t,e){return oe(t,\"toString\",{configurable:!0,enumerable:!1,value:Xs(e),writable:!0})}:nu;function Xr(t){return jo(Ls(t))}function ti(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+e];return o}function ei(t,e){var n;return lr(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ni(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;r<i;){var o=r+i>>>1,a=t[o];null!==a&&!ss(a)&&(n?a<=e:a<e)?r=o+1:i=o}return i}return ri(t,e,nu,n)}function ri(t,e,n,i){var o=0,a=null==t?0:t.length;if(0===a)return 0;for(var s=(e=n(e))!=e,u=null===e,c=ss(e),l=e===r;o<a;){var d=pe((o+a)/2),h=n(t[d]),f=h!==r,p=null===h,y=h==h,v=ss(h);if(s)var g=i||y;else g=l?y&&(i||f):u?y&&f&&(i||!p):c?y&&f&&!p&&(i||!v):!p&&!v&&(i?h<=e:h<e);g?o=d+1:a=d}return gn(a,4294967294)}function ii(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n],s=e?e(a):a;if(!n||!La(s,u)){var u=s;o[i++]=0===a?0:a}}return o}function oi(t){return\"number\"==typeof t?t:ss(t)?d:+t}function ai(t){if(\"string\"==typeof t)return t;if(qa(t))return xe(t,ai)+\"\";if(ss(t))return Bn?Bn.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function si(t,e,n){var r=-1,i=Ee,o=t.length,a=!0,s=[],u=s;if(n)a=!1,i=Ae;else if(o>=200){var c=e?null:$i(t);if(c)return sn(c);a=!1,i=Ke,u=new $n}else u=e?[]:s;t:for(;++r<o;){var l=t[r],d=e?e(l):l;if(l=n||0!==l?l:0,a&&d==d){for(var h=u.length;h--;)if(u[h]===d)continue t;e&&u.push(d),s.push(l)}else i(u,d,n)||(u!==s&&u.push(d),s.push(l))}return s}function ui(t,e){var n=-1,r=(e=vi(e,t)).length;if(!r)return!0;for(;++n<r;){var i=Do(e[n]);if(\"__proto__\"===i&&!zt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Io(t,e);return null==o||delete o[Do(Jo(e))]}function ci(t,e,n,r){return Kr(t,e,n(_r(t,e)),r)}function li(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function di(t,e){var n=t;return n instanceof Vn&&(n=n.value()),je(e,function(t,e){return e.func.apply(e.thisArg,Te([t],e.args))},n)}function hi(t,e,n){var r=t.length;if(r<2)return r?si(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var a=t[i],s=-1;++s<r;)s!=i&&(o[i]=cr(o[i]||a,t[s],e,n));return si(yr(o,1),e,n)}function fi(t,e,n){for(var i=-1,o=t.length,a=e.length,s={};++i<o;){var u=i<a?e[i]:r;n(s,t[i],u)}return s}function pi(t){return $a(t)?t:[]}function yi(t){return\"function\"==typeof t?t:nu}function vi(t,e){return qa(t)?t:mo(t,e)?[t]:Mo(gs(t))}var gi=Gr;function mi(t,e,n){var i=t.length;return n=n===r?i:n,!e&&n>=i?t:ti(t,e,n)}var bi=ue||function(t){return le.clearTimeout(t)};function wi(t,e){if(e)return t.slice();var n=t.length,r=qt?qt(n):new t.constructor(n);return t.copy(r),r}function _i(t){var e=new t.constructor(t.byteLength);return new Vt(e).set(new Vt(t)),e}function Si(t,e){var n=e?_i(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Ci(t,e){if(t!==e){var n=t!==r,i=null===t,o=t==t,a=ss(t),s=e!==r,u=null===e,c=e==e,l=ss(e);if(!u&&!l&&!a&&t>e||a&&s&&c&&!u&&!l||i&&s&&c||!n&&c||!o)return 1;if(!i&&!a&&!l&&t<e||l&&n&&o&&!i&&!a||u&&n&&o||!s&&o||!c)return-1}return 0}function Pi(t,e,n,r){for(var i=-1,o=t.length,a=n.length,s=-1,u=e.length,c=vn(o-a,0),l=rt(u+c),d=!r;++s<u;)l[s]=e[s];for(;++i<a;)(d||i<o)&&(l[n[i]]=t[i]);for(;c--;)l[s++]=t[i++];return l}function Ii(t,e,n,r){for(var i=-1,o=t.length,a=-1,s=n.length,u=-1,c=e.length,l=vn(o-s,0),d=rt(l+c),h=!r;++i<l;)d[i]=t[i];for(var f=i;++u<c;)d[f+u]=e[u];for(;++a<s;)(h||i<o)&&(d[f+n[a]]=t[i++]);return d}function Oi(t,e){var n=-1,r=t.length;for(e||(e=rt(r));++n<r;)e[n]=t[n];return e}function ki(t,e,n,i){var o=!n;n||(n={});for(var a=-1,s=e.length;++a<s;){var u=e[a],c=i?i(n[u],t[u],u,n,t):r;c===r&&(c=t[u]),o?rr(n,u,c):Xn(n,u,c)}return n}function Ei(t,e){return function(n,r){var i=qa(n)?Ce:er,o=e?e():{};return i(n,t,oo(r,2),o)}}function Ai(t){return Gr(function(e,n){var i=-1,o=n.length,a=o>1?n[o-1]:r,s=o>2?n[2]:r;for(a=t.length>3&&\"function\"==typeof a?(o--,a):r,s&&go(n[0],n[1],s)&&(a=o<3?r:a,o=1),e=Pt(e);++i<o;){var u=n[i];u&&t(e,u,i,a)}return e})}function xi(t,e){return function(n,r){if(null==n)return n;if(!Wa(n))return t(n,r);for(var i=n.length,o=e?i:-1,a=Pt(n);(e?o--:++o<i)&&!1!==r(a[o],o,a););return n}}function Ti(t){return function(e,n,r){for(var i=-1,o=Pt(e),a=r(e),s=a.length;s--;){var u=a[t?s:++i];if(!1===n(o[u],u,o))break}return e}}function ji(t){return function(e){var n=nn(e=gs(e))?ln(e):r,i=n?n[0]:e.charAt(0),o=n?mi(n,1).join(\"\"):e.slice(1);return i[t]()+o}}function zi(t){return function(e){return je(Ks(Vs(e).replace(Jt,\"\")),t,\"\")}}function Ni(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Ln(t.prototype),r=t.apply(n,e);return Xa(r)?r:n}}function Mi(t){return function(e,n,i){var o=Pt(e);if(!Wa(e)){var a=oo(n,3);e=xs(e),n=function(t){return a(o[t],t,o)}}var s=t(e,n,i);return s>-1?o[a?e[s]:s]:r}}function Di(t){return Xi(function(e){var n=e.length,o=n,a=Un.prototype.thru;for(t&&e.reverse();o--;){var s=e[o];if(\"function\"!=typeof s)throw new kt(i);if(a&&!u&&\"wrapper\"==ro(s))var u=new Un([],!0)}for(o=u?o:n;++o<n;){var c=ro(s=e[o]),l=\"wrapper\"==c?no(s):r;u=l&&bo(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?u[ro(l[0])].apply(u,l[3]):1==s.length&&bo(s)?u[c]():u.thru(s)}return function(){var t=arguments,r=t[0];if(u&&1==t.length&&qa(r))return u.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Bi(t,e,n,i,o,a,s,c,l,d){var h=e&u,f=1&e,p=2&e,y=24&e,v=512&e,g=p?r:Ni(t);return function u(){for(var m=arguments.length,b=rt(m),w=m;w--;)b[w]=arguments[w];if(y)var _=io(u),S=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(b,_);if(i&&(b=Pi(b,i,o,y)),a&&(b=Ii(b,a,s,y)),m-=S,y&&m<d){var C=an(b,_);return Hi(t,e,Bi,u.placeholder,n,b,C,c,l,d-m)}var P=f?n:this,I=p?P[t]:t;return m=b.length,c?b=function(t,e){for(var n=t.length,i=gn(e.length,n),o=Oi(t);i--;){var a=e[i];t[i]=vo(a,n)?o[a]:r}return t}(b,c):v&&m>1&&b.reverse(),h&&l<m&&(b.length=l),this&&this!==le&&this instanceof u&&(I=g||Ni(I)),I.apply(P,b)}}function Fi(t,e){return function(n,r){return function(t,e,n,r){return mr(t,function(t,i,o){e(r,n(t),i,o)}),r}(n,t,e(r),{})}}function Li(t,e){return function(n,i){var o;if(n===r&&i===r)return e;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ai(n),i=ai(i)):(n=oi(n),i=oi(i)),o=t(n,i)}return o}}function Ri(t){return Xi(function(e){return e=xe(e,Ye(oo())),Gr(function(n){var r=this;return t(e,function(t){return Se(t,r,n)})})})}function Ui(t,e){var n=(e=e===r?\" \":ai(e)).length;if(n<2)return n?$r(e,t):e;var i=$r(e,he(t/cn(e)));return nn(e)?mi(ln(i),0,t).join(\"\"):i.slice(0,t)}function Vi(t){return function(e,n,i){return i&&\"number\"!=typeof i&&go(e,n,i)&&(n=i=r),e=hs(e),n===r?(n=e,e=0):n=hs(n),function(t,e,n,r){for(var i=-1,o=vn(he((e-t)/(n||1)),0),a=rt(o);o--;)a[r?o:++i]=t,t+=n;return a}(e,n,i=i===r?e<n?1:-1:hs(i),t)}}function qi(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=ys(e),n=ys(n)),t(e,n)}}function Hi(t,e,n,i,o,a,u,c,l,d){var h=8&e;e|=h?s:64,4&(e&=~(h?64:s))||(e&=-4);var f=[t,e,o,h?a:r,h?u:r,h?r:a,h?r:u,c,l,d],p=n.apply(r,f);return bo(t)&&ko(p,f),p.placeholder=i,xo(p,t,e)}function Wi(t){var e=Ct[t];return function(t,n){if(t=ys(t),(n=null==n?0:gn(fs(n),292))&&qe(t)){var r=(gs(t)+\"e\").split(\"e\");return+((r=(gs(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var $i=In&&1/sn(new In([,-0]))[1]==c?function(t){return new In(t)}:su;function Gi(t){return function(e){var n=ho(e);return n==_?rn(e):n==O?un(e):function(t,e){return xe(e,function(e){return[e,t[e]]})}(e,t(e))}}function Yi(t,e,n,o,c,l,d,h){var f=2&e;if(!f&&\"function\"!=typeof t)throw new kt(i);var p=o?o.length:0;if(p||(e&=-97,o=c=r),d=d===r?d:vn(fs(d),0),h=h===r?h:fs(h),p-=c?c.length:0,64&e){var y=o,v=c;o=c=r}var g=f?r:no(t),m=[t,e,n,o,c,y,v,l,d,h];if(g&&function(t,e){var n=t[1],r=e[1],i=n|r,o=i<131,s=r==u&&8==n||r==u&&256==n&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!o&&!s)return t;1&r&&(t[2]=e[2],i|=1&n?0:4);var c=e[3];if(c){var l=t[3];t[3]=l?Pi(l,c,e[4]):c,t[4]=l?an(t[3],a):e[4]}(c=e[5])&&(l=t[5],t[5]=l?Ii(l,c,e[6]):c,t[6]=l?an(t[5],a):e[6]),(c=e[7])&&(t[7]=c),r&u&&(t[8]=null==t[8]?e[8]:gn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i}(m,g),t=m[0],e=m[1],n=m[2],o=m[3],c=m[4],!(h=m[9]=m[9]===r?f?0:t.length:vn(m[9]-p,0))&&24&e&&(e&=-25),e&&1!=e)b=8==e||16==e?function(t,e,n){var i=Ni(t);return function o(){for(var a=arguments.length,s=rt(a),u=a,c=io(o);u--;)s[u]=arguments[u];var l=a<3&&s[0]!==c&&s[a-1]!==c?[]:an(s,c);return(a-=l.length)<n?Hi(t,e,Bi,o.placeholder,r,s,l,r,r,n-a):Se(this&&this!==le&&this instanceof o?i:t,this,s)}}(t,e,h):e!=s&&33!=e||c.length?Bi.apply(r,m):function(t,e,n,r){var i=1&e,o=Ni(t);return function e(){for(var a=-1,s=arguments.length,u=-1,c=r.length,l=rt(c+s),d=this&&this!==le&&this instanceof e?o:t;++u<c;)l[u]=r[u];for(;s--;)l[u++]=arguments[++a];return Se(d,i?n:this,l)}}(t,e,n,o);else var b=function(t,e,n){var r=1&e,i=Ni(t);return function e(){return(this&&this!==le&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return xo((g?Qr:ko)(b,m),t,e)}function Ji(t,e,n,i){return t===r||La(t,xt[n])&&!zt.call(i,n)?e:t}function Ki(t,e,n,i,o,a){return Xa(t)&&Xa(e)&&(a.set(e,t),Lr(t,e,r,Ki,a),a.delete(e)),t}function Qi(t){return rs(t)?r:t}function Zi(t,e,n,i,o,a){var s=1&n,u=t.length,c=e.length;if(u!=c&&!(s&&c>u))return!1;var l=a.get(t),d=a.get(e);if(l&&d)return l==e&&d==t;var h=-1,f=!0,p=2&n?new $n:r;for(a.set(t,e),a.set(e,t);++h<u;){var y=t[h],v=e[h];if(i)var g=s?i(v,y,h,e,t,a):i(y,v,h,t,e,a);if(g!==r){if(g)continue;f=!1;break}if(p){if(!Ne(e,function(t,e){if(!Ke(p,e)&&(y===t||o(y,t,n,i,a)))return p.push(e)})){f=!1;break}}else if(y!==v&&!o(y,v,n,i,a)){f=!1;break}}return a.delete(t),a.delete(e),f}function Xi(t){return Ao(Po(t,r,Ho),t+\"\")}function to(t){return Sr(t,xs,co)}function eo(t){return Sr(t,Ts,lo)}var no=En?function(t){return En.get(t)}:su;function ro(t){for(var e=t.name+\"\",n=An[e],r=zt.call(An,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function io(t){return(zt.call(Fn,\"placeholder\")?Fn:t).placeholder}function oo(){var t=Fn.iteratee||ru;return t=t===ru?zr:t,arguments.length?t(arguments[0],arguments[1]):t}function ao(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function so(t){for(var e=xs(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,So(i)]}return e}function uo(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return jr(n)?n:r}var co=ye?function(t){return null==t?[]:(t=Pt(t),ke(ye(t),function(e){return $t.call(t,e)}))}:pu,lo=ye?function(t){for(var e=[];t;)Te(e,co(t)),t=Ht(t);return e}:pu,ho=Cr;function fo(t,e,n){for(var r=-1,i=(e=vi(e,t)).length,o=!1;++r<i;){var a=Do(e[r]);if(!(o=null!=t&&n(t,a)))break;t=t[a]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Za(i)&&vo(a,i)&&(qa(t)||Va(t))}function po(t){return\"function\"!=typeof t.constructor||_o(t)?{}:Ln(Ht(t))}function yo(t){return qa(t)||Va(t)||!!(Yt&&t&&t[Yt])}function vo(t,e){var n=typeof t;return!!(e=e??l)&&(\"number\"==n||\"symbol\"!=n&&vt.test(t))&&t>-1&&t%1==0&&t<e}function go(t,e,n){if(!Xa(n))return!1;var r=typeof e;return!!(\"number\"==r?Wa(n)&&vo(e,n.length):\"string\"==r&&e in n)&&La(n[e],t)}function mo(t,e){if(qa(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!ss(t))||Z.test(t)||!Q.test(t)||null!=e&&t in Pt(e)}function bo(t){var e=ro(t),n=Fn[e];if(\"function\"!=typeof n||!(e in Vn.prototype))return!1;if(t===n)return!0;var r=no(n);return!!r&&t===r[0]}(Sn&&ho(new Sn(new ArrayBuffer(1)))!=T||Cn&&ho(new Cn)!=_||Pn&&ho(Pn.resolve())!=P||In&&ho(new In)!=O||On&&ho(new On)!=A)&&(ho=function(t){var e=Cr(t),n=e==C?t.constructor:r,i=n?Bo(n):\"\";if(i)switch(i){case xn:return T;case Tn:return _;case jn:return P;case zn:return O;case Nn:return A}return e});var wo=Tt?Ka:yu;function _o(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||xt)}function So(t){return t==t&&!Xa(t)}function Co(t,e){return function(n){return null!=n&&n[t]===e&&(e!==r||t in Pt(n))}}function Po(t,e,n){return e=vn(e===r?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=vn(r.length-e,0),a=rt(o);++i<o;)a[i]=r[e+i];i=-1;for(var s=rt(e+1);++i<e;)s[i]=r[i];return s[e]=n(a),Se(t,this,s)}}function Io(t,e){return e.length<2?t:_r(t,ti(e,0,-1))}function Oo(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var ko=To(Qr),Eo=de||function(t,e){return le.setTimeout(t,e)},Ao=To(Zr);function xo(t,e,n){var r=e+\"\";return Ao(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return Pe(f,function(n){var r=\"_.\"+n[0];e&n[1]&&!Ee(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(ot);return e?e[1].split(at):[]}(r),n)))}function To(t){var e=0,n=0;return function(){var i=mn(),o=16-(i-n);if(n=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(r,arguments)}}function jo(t,e){var n=-1,i=t.length,o=i-1;for(e=e===r?i:e;++n<e;){var a=Wr(n,o),s=t[a];t[a]=t[n],t[n]=s}return t.length=e,t}var zo,No,Mo=(zo=za(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(X,function(t,n,r,i){e.push(r?i.replace(ct,\"$1\"):n||t)}),e},function(t){return 500===No.size&&No.clear(),t}),No=zo.cache,zo);function Do(t){if(\"string\"==typeof t||ss(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Bo(t){if(null!=t){try{return jt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Fo(t){if(t instanceof Vn)return t.clone();var e=new Un(t.__wrapped__,t.__chain__);return e.__actions__=Oi(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Lo=Gr(function(t,e){return $a(t)?cr(t,yr(e,1,$a,!0)):[]}),Ro=Gr(function(t,e){var n=Jo(e);return $a(n)&&(n=r),$a(t)?cr(t,yr(e,1,$a,!0),oo(n,2)):[]}),Uo=Gr(function(t,e){var n=Jo(e);return $a(n)&&(n=r),$a(t)?cr(t,yr(e,1,$a,!0),r,n):[]});function Vo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:fs(n);return i<0&&(i=vn(r+i,0)),Be(t,oo(e,3),i)}function qo(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return n!==r&&(o=fs(n),o=n<0?vn(i+o,0):gn(o,i-1)),Be(t,oo(e,3),o,!0)}function Ho(t){return null!=t&&t.length?yr(t,1):[]}function Wo(t){return t&&t.length?t[0]:r}var $o=Gr(function(t){var e=xe(t,pi);return e.length&&e[0]===t[0]?kr(e):[]}),Go=Gr(function(t){var e=Jo(t),n=xe(t,pi);return e===Jo(n)?e=r:n.pop(),n.length&&n[0]===t[0]?kr(n,oo(e,2)):[]}),Yo=Gr(function(t){var e=Jo(t),n=xe(t,pi);return(e=\"function\"==typeof e?e:r)&&n.pop(),n.length&&n[0]===t[0]?kr(n,r,e):[]});function Jo(t){var e=null==t?0:t.length;return e?t[e-1]:r}var Ko=Gr(Qo);function Qo(t,e){return t&&t.length&&e&&e.length?qr(t,e):t}var Zo=Xi(function(t,e){var n=null==t?0:t.length,r=ir(t,e);return Hr(t,xe(e,function(t){return vo(t,n)?+t:t}).sort(Ci)),r});function Xo(t){return null==t?t:_n.call(t)}var ta=Gr(function(t){return si(yr(t,1,$a,!0))}),ea=Gr(function(t){var e=Jo(t);return $a(e)&&(e=r),si(yr(t,1,$a,!0),oo(e,2))}),na=Gr(function(t){var e=Jo(t);return e=\"function\"==typeof e?e:r,si(yr(t,1,$a,!0),r,e)});function ra(t){if(!t||!t.length)return[];var e=0;return t=ke(t,function(t){if($a(t))return e=vn(t.length,e),!0}),$e(e,function(e){return xe(t,Ve(e))})}function ia(t,e){if(!t||!t.length)return[];var n=ra(t);return null==e?n:xe(n,function(t){return Se(e,r,t)})}var oa=Gr(function(t,e){return $a(t)?cr(t,e):[]}),aa=Gr(function(t){return hi(ke(t,$a))}),sa=Gr(function(t){var e=Jo(t);return $a(e)&&(e=r),hi(ke(t,$a),oo(e,2))}),ua=Gr(function(t){var e=Jo(t);return e=\"function\"==typeof e?e:r,hi(ke(t,$a),r,e)}),ca=Gr(ra),la=Gr(function(t){var e=t.length,n=e>1?t[e-1]:r;return n=\"function\"==typeof n?(t.pop(),n):r,ia(t,n)});function da(t){var e=Fn(t);return e.__chain__=!0,e}function ha(t,e){return e(t)}var fa=Xi(function(t){var e=t.length,n=e?t[0]:0,i=this.__wrapped__,o=function(e){return ir(e,t)};return!(e>1||this.__actions__.length)&&i instanceof Vn&&vo(n)?((i=i.slice(n,+n+(e?1:0))).__actions__.push({func:ha,args:[o],thisArg:r}),new Un(i,this.__chain__).thru(function(t){return e&&!t.length&&t.push(r),t})):this.thru(o)}),pa=Ei(function(t,e,n){zt.call(t,n)?++t[n]:rr(t,n,1)}),ya=Mi(Vo),va=Mi(qo);function ga(t,e){return(qa(t)?Pe:lr)(t,oo(e,3))}function ma(t,e){return(qa(t)?Ie:dr)(t,oo(e,3))}var ba=Ei(function(t,e,n){zt.call(t,n)?t[n].push(e):rr(t,n,[e])}),wa=Gr(function(t,e,n){var r=-1,i=\"function\"==typeof e,o=Wa(t)?rt(t.length):[];return lr(t,function(t){o[++r]=i?Se(e,t,n):Er(t,e,n)}),o}),_a=Ei(function(t,e,n){rr(t,n,e)});function Sa(t,e){return(qa(t)?xe:Dr)(t,oo(e,3))}var Ca=Ei(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),Pa=Gr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&go(t,e[0],e[1])?e=[]:n>2&&go(e[0],e[1],e[2])&&(e=[e[0]]),Ur(t,yr(e,1),[])}),Ia=ce||function(){return le.Date.now()};function Oa(t,e,n){return e=n?r:e,e=t&&null==e?t.length:e,Yi(t,u,r,r,r,r,e)}function ka(t,e){var n;if(\"function\"!=typeof e)throw new kt(i);return t=fs(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=r),n}}var Ea=Gr(function(t,e,n){var r=1;if(n.length){var i=an(n,io(Ea));r|=s}return Yi(t,r,e,n,i)}),Aa=Gr(function(t,e,n){var r=3;if(n.length){var i=an(n,io(Aa));r|=s}return Yi(e,r,t,n,i)});function xa(t,e,n){var o,a,s,u,c,l,d=0,h=!1,f=!1,p=!0;if(\"function\"!=typeof t)throw new kt(i);function y(e){var n=o,i=a;return o=a=r,d=e,u=t.apply(i,n)}function v(t){var n=t-l;return l===r||n>=e||n<0||f&&t-d>=s}function g(){var t=Ia();if(v(t))return m(t);c=Eo(g,function(t){var n=e-(t-l);return f?gn(n,s-(t-d)):n}(t))}function m(t){return c=r,p&&o?y(t):(o=a=r,u)}function b(){var t=Ia(),n=v(t);if(o=arguments,a=this,l=t,n){if(c===r)return function(t){return d=t,c=Eo(g,e),h?y(t):u}(l);if(f)return bi(c),c=Eo(g,e),y(l)}return c===r&&(c=Eo(g,e)),u}return e=ys(e)||0,Xa(n)&&(h=!!n.leading,s=(f=\"maxWait\"in n)?vn(ys(n.maxWait)||0,e):s,p=\"trailing\"in n?!!n.trailing:p),b.cancel=function(){c!==r&&bi(c),d=0,o=l=a=c=r},b.flush=function(){return c===r?u:m(Ia())},b}var Ta=Gr(function(t,e){return ur(t,1,e)}),ja=Gr(function(t,e,n){return ur(t,ys(e)||0,n)});function za(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new kt(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(za.Cache||Wn),n}function Na(t){if(\"function\"!=typeof t)throw new kt(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}za.Cache=Wn;var Ma=gi(function(t,e){var n=(e=1==e.length&&qa(e[0])?xe(e[0],Ye(oo())):xe(yr(e,1),Ye(oo()))).length;return Gr(function(r){for(var i=-1,o=gn(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return Se(t,this,r)})}),Da=Gr(function(t,e){var n=an(e,io(Da));return Yi(t,s,r,e,n)}),Ba=Gr(function(t,e){var n=an(e,io(Ba));return Yi(t,64,r,e,n)}),Fa=Xi(function(t,e){return Yi(t,256,r,r,r,e)});function La(t,e){return t===e||t!=t&&e!=e}var Ra=qi(Pr),Ua=qi(function(t,e){return t>=e}),Va=Ar(function(){return arguments}())?Ar:function(t){return ts(t)&&zt.call(t,\"callee\")&&!$t.call(t,\"callee\")},qa=rt.isArray,Ha=ve?Ye(ve):function(t){return ts(t)&&Cr(t)==x};function Wa(t){return null!=t&&Za(t.length)&&!Ka(t)}function $a(t){return ts(t)&&Wa(t)}var Ga=Me||yu,Ya=ge?Ye(ge):function(t){return ts(t)&&Cr(t)==g};function Ja(t){if(!ts(t))return!1;var e=Cr(t);return e==m||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!rs(t)}function Ka(t){if(!Xa(t))return!1;var e=Cr(t);return e==b||e==w||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Qa(t){return\"number\"==typeof t&&t==fs(t)}function Za(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=l}function Xa(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function ts(t){return null!=t&&\"object\"==typeof t}var es=me?Ye(me):function(t){return ts(t)&&ho(t)==_};function ns(t){return\"number\"==typeof t||ts(t)&&Cr(t)==S}function rs(t){if(!ts(t)||Cr(t)!=C)return!1;var e=Ht(t);if(null===e)return!0;var n=zt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&jt.call(n)==Bt}var is=be?Ye(be):function(t){return ts(t)&&Cr(t)==I},os=we?Ye(we):function(t){return ts(t)&&ho(t)==O};function as(t){return\"string\"==typeof t||!qa(t)&&ts(t)&&Cr(t)==k}function ss(t){return\"symbol\"==typeof t||ts(t)&&Cr(t)==E}var us=_e?Ye(_e):function(t){return ts(t)&&Za(t.length)&&!!re[Cr(t)]},cs=qi(Mr),ls=qi(function(t,e){return t<=e});function ds(t){if(!t)return[];if(Wa(t))return as(t)?ln(t):Oi(t);if(Qt&&t[Qt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Qt]());var e=ho(t);return(e==_?rn:e==O?sn:Ls)(t)}function hs(t){return t?(t=ys(t))===c||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function fs(t){var e=hs(t),n=e%1;return e==e?n?e-n:e:0}function ps(t){return t?or(fs(t),0,h):0}function ys(t){if(\"number\"==typeof t)return t;if(ss(t))return d;if(Xa(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=Xa(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Ge(t);var n=ft.test(t);return n||yt.test(t)?se(t.slice(2),n?2:8):ht.test(t)?d:+t}function vs(t){return ki(t,Ts(t))}function gs(t){return null==t?\"\":ai(t)}var ms=Ai(function(t,e){if(_o(e)||Wa(e))ki(e,xs(e),t);else for(var n in e)zt.call(e,n)&&Xn(t,n,e[n])}),bs=Ai(function(t,e){ki(e,Ts(e),t)}),ws=Ai(function(t,e,n,r){ki(e,Ts(e),t,r)}),_s=Ai(function(t,e,n,r){ki(e,xs(e),t,r)}),Ss=Xi(ir),Cs=Gr(function(t,e){t=Pt(t);var n=-1,i=e.length,o=i>2?e[2]:r;for(o&&go(e[0],e[1],o)&&(i=1);++n<i;)for(var a=e[n],s=Ts(a),u=-1,c=s.length;++u<c;){var l=s[u],d=t[l];(d===r||La(d,xt[l])&&!zt.call(t,l))&&(t[l]=a[l])}return t}),Ps=Gr(function(t){return t.push(r,Ki),Se(zs,r,t)});function Is(t,e,n){var i=null==t?r:_r(t,e);return i===r?n:i}function Os(t,e){return null!=t&&fo(t,e,Or)}var ks=Fi(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Dt.call(e)),t[e]=n},Xs(nu)),Es=Fi(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Dt.call(e)),zt.call(t,e)?t[e].push(n):t[e]=[n]},oo),As=Gr(Er);function xs(t){return Wa(t)?Yn(t):Nr(t)}function Ts(t){return Wa(t)?Yn(t,!0):function(t){if(!Xa(t))return function(t){var e=[];if(null!=t)for(var n in Pt(t))e.push(n);return e}(t);var e=_o(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&zt.call(t,r))&&n.push(r);return n}(t)}var js=Ai(function(t,e,n){Lr(t,e,n)}),zs=Ai(function(t,e,n,r){Lr(t,e,n,r)}),Ns=Xi(function(t,e){var n={};if(null==t)return n;var r=!1;e=xe(e,function(e){return e=vi(e,t),r||(r=e.length>1),e}),ki(t,eo(t),n),r&&(n=ar(n,7,Qi));for(var i=e.length;i--;)ui(n,e[i]);return n}),Ms=Xi(function(t,e){return null==t?{}:function(t,e){return Vr(t,e,function(e,n){return Os(t,n)})}(t,e)});function Ds(t,e){if(null==t)return{};var n=xe(eo(t),function(t){return[t]});return e=oo(e),Vr(t,n,function(t,n){return e(t,n[0])})}var Bs=Gi(xs),Fs=Gi(Ts);function Ls(t){return null==t?[]:Je(t,xs(t))}var Rs=zi(function(t,e,n){return e=e.toLowerCase(),t+(n?Us(e):e)});function Us(t){return Js(gs(t).toLowerCase())}function Vs(t){return(t=gs(t))&&t.replace(gt,Xe).replace(Kt,\"\")}var qs=zi(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Hs=zi(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),Ws=ji(\"toLowerCase\"),$s=zi(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Gs=zi(function(t,e,n){return t+(n?\" \":\"\")+Js(e)}),Ys=zi(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Js=ji(\"toUpperCase\");function Ks(t,e,n){return t=gs(t),(e=n?r:e)===r?function(t){return te.test(t)}(t)?function(t){return t.match(Zt)||[]}(t):function(t){return t.match(st)||[]}(t):t.match(e)||[]}var Qs=Gr(function(t,e){try{return Se(t,r,e)}catch(t){return Ja(t)?t:new _t(t)}}),Zs=Xi(function(t,e){return Pe(e,function(e){e=Do(e),rr(t,e,Ea(t[e],t))}),t});function Xs(t){return function(){return t}}var tu=Di(),eu=Di(!0);function nu(t){return t}function ru(t){return zr(\"function\"==typeof t?t:ar(t,1))}var iu=Gr(function(t,e){return function(n){return Er(n,t,e)}}),ou=Gr(function(t,e){return function(n){return Er(t,n,e)}});function au(t,e,n){var r=xs(e),i=wr(e,r);null!=n||Xa(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=wr(e,xs(e)));var o=!(Xa(n)&&\"chain\"in n&&!n.chain),a=Ka(t);return Pe(i,function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Oi(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Te([this.value()],arguments))})}),t}function su(){}var uu=Ri(xe),cu=Ri(Oe),lu=Ri(Ne);function du(t){return mo(t)?Ve(Do(t)):function(t){return function(e){return _r(e,t)}}(t)}var hu=Vi(),fu=Vi(!0);function pu(){return[]}function yu(){return!1}var vu,gu=Li(function(t,e){return t+e},0),mu=Wi(\"ceil\"),bu=Li(function(t,e){return t/e},1),wu=Wi(\"floor\"),_u=Li(function(t,e){return t*e},1),Su=Wi(\"round\"),Cu=Li(function(t,e){return t-e},0);return Fn.after=function(t,e){if(\"function\"!=typeof e)throw new kt(i);return t=fs(t),function(){if(--t<1)return e.apply(this,arguments)}},Fn.ary=Oa,Fn.assign=ms,Fn.assignIn=bs,Fn.assignInWith=ws,Fn.assignWith=_s,Fn.at=Ss,Fn.before=ka,Fn.bind=Ea,Fn.bindAll=Zs,Fn.bindKey=Aa,Fn.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return qa(t)?t:[t]},Fn.chain=da,Fn.chunk=function(t,e,n){e=(n?go(t,e,n):e===r)?1:vn(fs(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,a=0,s=rt(he(i/e));o<i;)s[a++]=ti(t,o,o+=e);return s},Fn.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i},Fn.concat=function(){var t=arguments.length;if(!t)return[];for(var e=rt(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return Te(qa(n)?Oi(n):[n],yr(e,1))},Fn.cond=function(t){var e=null==t?0:t.length,n=oo();return t=e?xe(t,function(t){if(\"function\"!=typeof t[1])throw new kt(i);return[n(t[0]),t[1]]}):[],Gr(function(n){for(var r=-1;++r<e;){var i=t[r];if(Se(i[0],this,n))return Se(i[1],this,n)}})},Fn.conforms=function(t){return function(t){var e=xs(t);return function(n){return sr(n,t,e)}}(ar(t,1))},Fn.constant=Xs,Fn.countBy=pa,Fn.create=function(t,e){var n=Ln(t);return null==e?n:nr(n,e)},Fn.curry=function t(e,n,i){var o=Yi(e,8,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Fn.curryRight=function t(e,n,i){var o=Yi(e,16,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Fn.debounce=xa,Fn.defaults=Cs,Fn.defaultsDeep=Ps,Fn.defer=Ta,Fn.delay=ja,Fn.difference=Lo,Fn.differenceBy=Ro,Fn.differenceWith=Uo,Fn.drop=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=n||e===r?1:fs(e))<0?0:e,i):[]},Fn.dropRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,0,(e=i-(e=n||e===r?1:fs(e)))<0?0:e):[]},Fn.dropRightWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!0,!0):[]},Fn.dropWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!0):[]},Fn.fill=function(t,e,n,i){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&go(t,e,n)&&(n=0,i=o),function(t,e,n,i){var o=t.length;for((n=fs(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:fs(i))<0&&(i+=o),i=n>i?0:ps(i);n<i;)t[n++]=e;return t}(t,e,n,i)):[]},Fn.filter=function(t,e){return(qa(t)?ke:pr)(t,oo(e,3))},Fn.flatMap=function(t,e){return yr(Sa(t,e),1)},Fn.flatMapDeep=function(t,e){return yr(Sa(t,e),c)},Fn.flatMapDepth=function(t,e,n){return n=n===r?1:fs(n),yr(Sa(t,e),n)},Fn.flatten=Ho,Fn.flattenDeep=function(t){return null!=t&&t.length?yr(t,c):[]},Fn.flattenDepth=function(t,e){return null!=t&&t.length?yr(t,e=e===r?1:fs(e)):[]},Fn.flip=function(t){return Yi(t,512)},Fn.flow=tu,Fn.flowRight=eu,Fn.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];rr(r,i[0],i[1])}return r},Fn.functions=function(t){return null==t?[]:wr(t,xs(t))},Fn.functionsIn=function(t){return null==t?[]:wr(t,Ts(t))},Fn.groupBy=ba,Fn.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Fn.intersection=$o,Fn.intersectionBy=Go,Fn.intersectionWith=Yo,Fn.invert=ks,Fn.invertBy=Es,Fn.invokeMap=wa,Fn.iteratee=ru,Fn.keyBy=_a,Fn.keys=xs,Fn.keysIn=Ts,Fn.map=Sa,Fn.mapKeys=function(t,e){var n={};return e=oo(e,3),mr(t,function(t,r,i){rr(n,e(t,r,i),t)}),n},Fn.mapValues=function(t,e){var n={};return e=oo(e,3),mr(t,function(t,r,i){rr(n,r,e(t,r,i))}),n},Fn.matches=function(t){return Br(ar(t,1))},Fn.matchesProperty=function(t,e){return Fr(t,ar(e,1))},Fn.memoize=za,Fn.merge=js,Fn.mergeWith=zs,Fn.method=iu,Fn.methodOf=ou,Fn.mixin=au,Fn.negate=Na,Fn.nthArg=function(t){return t=fs(t),Gr(function(e){return Rr(e,t)})},Fn.omit=Ns,Fn.omitBy=function(t,e){return Ds(t,Na(oo(e)))},Fn.once=function(t){return ka(2,t)},Fn.orderBy=function(t,e,n,i){return null==t?[]:(qa(e)||(e=null==e?[]:[e]),qa(n=i?r:n)||(n=null==n?[]:[n]),Ur(t,e,n))},Fn.over=uu,Fn.overArgs=Ma,Fn.overEvery=cu,Fn.overSome=lu,Fn.partial=Da,Fn.partialRight=Ba,Fn.partition=Ca,Fn.pick=Ms,Fn.pickBy=Ds,Fn.property=du,Fn.propertyOf=function(t){return function(e){return null==t?r:_r(t,e)}},Fn.pull=Ko,Fn.pullAll=Qo,Fn.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?qr(t,e,oo(n,2)):t},Fn.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?qr(t,e,r,n):t},Fn.pullAt=Zo,Fn.range=hu,Fn.rangeRight=fu,Fn.rearg=Fa,Fn.reject=function(t,e){return(qa(t)?ke:pr)(t,Na(oo(e,3)))},Fn.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=oo(e,3);++r<o;){var a=t[r];e(a,r,t)&&(n.push(a),i.push(r))}return Hr(t,i),n},Fn.rest=function(t,e){if(\"function\"!=typeof t)throw new kt(i);return Gr(t,e=e===r?e:fs(e))},Fn.reverse=Xo,Fn.sampleSize=function(t,e,n){return e=(n?go(t,e,n):e===r)?1:fs(e),(qa(t)?Kn:Jr)(t,e)},Fn.set=function(t,e,n){return null==t?t:Kr(t,e,n)},Fn.setWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:Kr(t,e,n,i)},Fn.shuffle=function(t){return(qa(t)?Qn:Xr)(t)},Fn.slice=function(t,e,n){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&go(t,e,n)?(e=0,n=i):(e=null==e?0:fs(e),n=n===r?i:fs(n)),ti(t,e,n)):[]},Fn.sortBy=Pa,Fn.sortedUniq=function(t){return t&&t.length?ii(t):[]},Fn.sortedUniqBy=function(t,e){return t&&t.length?ii(t,oo(e,2)):[]},Fn.split=function(t,e,n){return n&&\"number\"!=typeof n&&go(t,e,n)&&(e=n=r),(n=n===r?h:n>>>0)?(t=gs(t))&&(\"string\"==typeof e||null!=e&&!is(e))&&!(e=ai(e))&&nn(t)?mi(ln(t),0,n):t.split(e,n):[]},Fn.spread=function(t,e){if(\"function\"!=typeof t)throw new kt(i);return e=null==e?0:vn(fs(e),0),Gr(function(n){var r=n[e],i=mi(n,0,e);return r&&Te(i,r),Se(t,this,i)})},Fn.tail=function(t){var e=null==t?0:t.length;return e?ti(t,1,e):[]},Fn.take=function(t,e,n){return t&&t.length?ti(t,0,(e=n||e===r?1:fs(e))<0?0:e):[]},Fn.takeRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=i-(e=n||e===r?1:fs(e)))<0?0:e,i):[]},Fn.takeRightWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!1,!0):[]},Fn.takeWhile=function(t,e){return t&&t.length?li(t,oo(e,3)):[]},Fn.tap=function(t,e){return e(t),t},Fn.throttle=function(t,e,n){var r=!0,o=!0;if(\"function\"!=typeof t)throw new kt(i);return Xa(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),xa(t,e,{leading:r,maxWait:e,trailing:o})},Fn.thru=ha,Fn.toArray=ds,Fn.toPairs=Bs,Fn.toPairsIn=Fs,Fn.toPath=function(t){return qa(t)?xe(t,Do):ss(t)?[t]:Oi(Mo(gs(t)))},Fn.toPlainObject=vs,Fn.transform=function(t,e,n){var r=qa(t),i=r||Ga(t)||us(t);if(e=oo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Xa(t)&&Ka(o)?Ln(Ht(t)):{}}return(i?Pe:mr)(t,function(t,r,i){return e(n,t,r,i)}),n},Fn.unary=function(t){return Oa(t,1)},Fn.union=ta,Fn.unionBy=ea,Fn.unionWith=na,Fn.uniq=function(t){return t&&t.length?si(t):[]},Fn.uniqBy=function(t,e){return t&&t.length?si(t,oo(e,2)):[]},Fn.uniqWith=function(t,e){return e=\"function\"==typeof e?e:r,t&&t.length?si(t,r,e):[]},Fn.unset=function(t,e){return null==t||ui(t,e)},Fn.unzip=ra,Fn.unzipWith=ia,Fn.update=function(t,e,n){return null==t?t:ci(t,e,yi(n))},Fn.updateWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:ci(t,e,yi(n),i)},Fn.values=Ls,Fn.valuesIn=function(t){return null==t?[]:Je(t,Ts(t))},Fn.without=oa,Fn.words=Ks,Fn.wrap=function(t,e){return Da(yi(e),t)},Fn.xor=aa,Fn.xorBy=sa,Fn.xorWith=ua,Fn.zip=ca,Fn.zipObject=function(t,e){return fi(t||[],e||[],Xn)},Fn.zipObjectDeep=function(t,e){return fi(t||[],e||[],Kr)},Fn.zipWith=la,Fn.entries=Bs,Fn.entriesIn=Fs,Fn.extend=bs,Fn.extendWith=ws,au(Fn,Fn),Fn.add=gu,Fn.attempt=Qs,Fn.camelCase=Rs,Fn.capitalize=Us,Fn.ceil=mu,Fn.clamp=function(t,e,n){return n===r&&(n=e,e=r),n!==r&&(n=(n=ys(n))==n?n:0),e!==r&&(e=(e=ys(e))==e?e:0),or(ys(t),e,n)},Fn.clone=function(t){return ar(t,4)},Fn.cloneDeep=function(t){return ar(t,5)},Fn.cloneDeepWith=function(t,e){return ar(t,5,e=\"function\"==typeof e?e:r)},Fn.cloneWith=function(t,e){return ar(t,4,e=\"function\"==typeof e?e:r)},Fn.conformsTo=function(t,e){return null==e||sr(t,e,xs(e))},Fn.deburr=Vs,Fn.defaultTo=function(t,e){return null==t||t!=t?e:t},Fn.divide=bu,Fn.endsWith=function(t,e,n){t=gs(t),e=ai(e);var i=t.length,o=n=n===r?i:or(fs(n),0,i);return(n-=e.length)>=0&&t.slice(n,o)==e},Fn.eq=La,Fn.escape=function(t){return(t=gs(t))&&G.test(t)?t.replace(W,tn):t},Fn.escapeRegExp=function(t){return(t=gs(t))&&et.test(t)?t.replace(tt,\"\\\\$&\"):t},Fn.every=function(t,e,n){var i=qa(t)?Oe:hr;return n&&go(t,e,n)&&(e=r),i(t,oo(e,3))},Fn.find=ya,Fn.findIndex=Vo,Fn.findKey=function(t,e){return De(t,oo(e,3),mr)},Fn.findLast=va,Fn.findLastIndex=qo,Fn.findLastKey=function(t,e){return De(t,oo(e,3),br)},Fn.floor=wu,Fn.forEach=ga,Fn.forEachRight=ma,Fn.forIn=function(t,e){return null==t?t:vr(t,oo(e,3),Ts)},Fn.forInRight=function(t,e){return null==t?t:gr(t,oo(e,3),Ts)},Fn.forOwn=function(t,e){return t&&mr(t,oo(e,3))},Fn.forOwnRight=function(t,e){return t&&br(t,oo(e,3))},Fn.get=Is,Fn.gt=Ra,Fn.gte=Ua,Fn.has=function(t,e){return null!=t&&fo(t,e,Ir)},Fn.hasIn=Os,Fn.head=Wo,Fn.identity=nu,Fn.includes=function(t,e,n,r){t=Wa(t)?t:Ls(t),n=n&&!r?fs(n):0;var i=t.length;return n<0&&(n=vn(i+n,0)),as(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&Fe(t,e,n)>-1},Fn.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:fs(n);return i<0&&(i=vn(r+i,0)),Fe(t,e,i)},Fn.inRange=function(t,e,n){return e=hs(e),n===r?(n=e,e=0):n=hs(n),function(t,e,n){return t>=gn(e,n)&&t<vn(e,n)}(t=ys(t),e,n)},Fn.invoke=As,Fn.isArguments=Va,Fn.isArray=qa,Fn.isArrayBuffer=Ha,Fn.isArrayLike=Wa,Fn.isArrayLikeObject=$a,Fn.isBoolean=function(t){return!0===t||!1===t||ts(t)&&Cr(t)==v},Fn.isBuffer=Ga,Fn.isDate=Ya,Fn.isElement=function(t){return ts(t)&&1===t.nodeType&&!rs(t)},Fn.isEmpty=function(t){if(null==t)return!0;if(Wa(t)&&(qa(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Ga(t)||us(t)||Va(t)))return!t.length;var e=ho(t);if(e==_||e==O)return!t.size;if(_o(t))return!Nr(t).length;for(var n in t)if(zt.call(t,n))return!1;return!0},Fn.isEqual=function(t,e){return xr(t,e)},Fn.isEqualWith=function(t,e,n){var i=(n=\"function\"==typeof n?n:r)?n(t,e):r;return i===r?xr(t,e,r,n):!!i},Fn.isError=Ja,Fn.isFinite=function(t){return\"number\"==typeof t&&qe(t)},Fn.isFunction=Ka,Fn.isInteger=Qa,Fn.isLength=Za,Fn.isMap=es,Fn.isMatch=function(t,e){return t===e||Tr(t,e,so(e))},Fn.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:r,Tr(t,e,so(e),n)},Fn.isNaN=function(t){return ns(t)&&t!=+t},Fn.isNative=function(t){if(wo(t))throw new _t(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return jr(t)},Fn.isNil=function(t){return null==t},Fn.isNull=function(t){return null===t},Fn.isNumber=ns,Fn.isObject=Xa,Fn.isObjectLike=ts,Fn.isPlainObject=rs,Fn.isRegExp=is,Fn.isSafeInteger=function(t){return Qa(t)&&t>=-9007199254740991&&t<=l},Fn.isSet=os,Fn.isString=as,Fn.isSymbol=ss,Fn.isTypedArray=us,Fn.isUndefined=function(t){return t===r},Fn.isWeakMap=function(t){return ts(t)&&ho(t)==A},Fn.isWeakSet=function(t){return ts(t)&&\"[object WeakSet]\"==Cr(t)},Fn.join=function(t,e){return null==t?\"\":pn.call(t,e)},Fn.kebabCase=qs,Fn.last=Jo,Fn.lastIndexOf=function(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=fs(n))<0?vn(i+o,0):gn(o,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Be(t,Re,o,!0)},Fn.lowerCase=Hs,Fn.lowerFirst=Ws,Fn.lt=cs,Fn.lte=ls,Fn.max=function(t){return t&&t.length?fr(t,nu,Pr):r},Fn.maxBy=function(t,e){return t&&t.length?fr(t,oo(e,2),Pr):r},Fn.mean=function(t){return Ue(t,nu)},Fn.meanBy=function(t,e){return Ue(t,oo(e,2))},Fn.min=function(t){return t&&t.length?fr(t,nu,Mr):r},Fn.minBy=function(t,e){return t&&t.length?fr(t,oo(e,2),Mr):r},Fn.stubArray=pu,Fn.stubFalse=yu,Fn.stubObject=function(){return{}},Fn.stubString=function(){return\"\"},Fn.stubTrue=function(){return!0},Fn.multiply=_u,Fn.nth=function(t,e){return t&&t.length?Rr(t,fs(e)):r},Fn.noConflict=function(){return le._===this&&(le._=Ft),this},Fn.noop=su,Fn.now=Ia,Fn.pad=function(t,e,n){t=gs(t);var r=(e=fs(e))?cn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Ui(pe(i),n)+t+Ui(he(i),n)},Fn.padEnd=function(t,e,n){t=gs(t);var r=(e=fs(e))?cn(t):0;return e&&r<e?t+Ui(e-r,n):t},Fn.padStart=function(t,e,n){t=gs(t);var r=(e=fs(e))?cn(t):0;return e&&r<e?Ui(e-r,n)+t:t},Fn.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),bn(gs(t).replace(nt,\"\"),e||0)},Fn.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&go(t,e,n)&&(e=n=r),n===r&&(\"boolean\"==typeof e?(n=e,e=r):\"boolean\"==typeof t&&(n=t,t=r)),t===r&&e===r?(t=0,e=1):(t=hs(t),e===r?(e=t,t=0):e=hs(e)),t>e){var i=t;t=e,e=i}if(n||t%1||e%1){var o=wn();return gn(t+o*(e-t+ae(\"1e-\"+((o+\"\").length-1))),e)}return Wr(t,e)},Fn.reduce=function(t,e,n){var r=qa(t)?je:He,i=arguments.length<3;return r(t,oo(e,4),n,i,lr)},Fn.reduceRight=function(t,e,n){var r=qa(t)?ze:He,i=arguments.length<3;return r(t,oo(e,4),n,i,dr)},Fn.repeat=function(t,e,n){return e=(n?go(t,e,n):e===r)?1:fs(e),$r(gs(t),e)},Fn.replace=function(){var t=arguments,e=gs(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Fn.result=function(t,e,n){var i=-1,o=(e=vi(e,t)).length;for(o||(o=1,t=r);++i<o;){var a=null==t?r:t[Do(e[i])];a===r&&(i=o,a=n),t=Ka(a)?a.call(t):a}return t},Fn.round=Su,Fn.runInContext=t,Fn.sample=function(t){return(qa(t)?Jn:Yr)(t)},Fn.size=function(t){if(null==t)return 0;if(Wa(t))return as(t)?cn(t):t.length;var e=ho(t);return e==_||e==O?t.size:Nr(t).length},Fn.snakeCase=$s,Fn.some=function(t,e,n){var i=qa(t)?Ne:ei;return n&&go(t,e,n)&&(e=r),i(t,oo(e,3))},Fn.sortedIndex=function(t,e){return ni(t,e)},Fn.sortedIndexBy=function(t,e,n){return ri(t,e,oo(n,2))},Fn.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=ni(t,e);if(r<n&&La(t[r],e))return r}return-1},Fn.sortedLastIndex=function(t,e){return ni(t,e,!0)},Fn.sortedLastIndexBy=function(t,e,n){return ri(t,e,oo(n,2),!0)},Fn.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=ni(t,e,!0)-1;if(La(t[n],e))return n}return-1},Fn.startCase=Gs,Fn.startsWith=function(t,e,n){return t=gs(t),n=null==n?0:or(fs(n),0,t.length),e=ai(e),t.slice(n,n+e.length)==e},Fn.subtract=Cu,Fn.sum=function(t){return t&&t.length?We(t,nu):0},Fn.sumBy=function(t,e){return t&&t.length?We(t,oo(e,2)):0},Fn.template=function(t,e,n){var i=Fn.templateSettings;n&&go(t,e,n)&&(e=r),t=gs(t),e=_s({},e,i,Ji);var o=_s({},e.imports,i.imports,Ji),a=xs(o),s=Je(o,a);Pe(a,function(t){if(ut.test(t))throw new _t(\"Invalid `imports` option passed into `_.template`\")});var u,c,l=0,d=e.interpolate||mt,h=\"__p += '\",f=It((e.escape||mt).source+\"|\"+d.source+\"|\"+(d===K?lt:mt).source+\"|\"+(e.evaluate||mt).source+\"|$\",\"g\"),p=\"//# sourceURL=\"+(zt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ne+\"]\")+\"\\n\";t.replace(f,function(e,n,r,i,o,a){return r||(r=i),h+=t.slice(l,a).replace(bt,en),n&&(u=!0,h+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(c=!0,h+=\"';\\n\"+o+\";\\n__p += '\"),r&&(h+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=a+e.length,e}),h+=\"';\\n\";var y=zt.call(e,\"variable\")&&e.variable;if(y){if(ut.test(y))throw new _t(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(c?h.replace(U,\"\"):h).replace(V,\"$1\").replace(q,\"$1;\"),h=\"function(\"+(y||\"obj\")+\") {\\n\"+(y?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(u?\", __e = _.escape\":\"\")+(c?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var v=Qs(function(){return St(a,p+\"return \"+h).apply(r,s)});if(v.source=h,Ja(v))throw v;return v},Fn.times=function(t,e){if((t=fs(t))<1||t>l)return[];var n=h,r=gn(t,h);e=oo(e),t-=h;for(var i=$e(r,e);++n<t;)e(n);return i},Fn.toFinite=hs,Fn.toInteger=fs,Fn.toLength=ps,Fn.toLower=function(t){return gs(t).toLowerCase()},Fn.toNumber=ys,Fn.toSafeInteger=function(t){return t?or(fs(t),-9007199254740991,l):0===t?t:0},Fn.toString=gs,Fn.toUpper=function(t){return gs(t).toUpperCase()},Fn.trim=function(t,e,n){if((t=gs(t))&&(n||e===r))return Ge(t);if(!t||!(e=ai(e)))return t;var i=ln(t),o=ln(e);return mi(i,Qe(i,o),Ze(i,o)+1).join(\"\")},Fn.trimEnd=function(t,e,n){if((t=gs(t))&&(n||e===r))return t.slice(0,dn(t)+1);if(!t||!(e=ai(e)))return t;var i=ln(t);return mi(i,0,Ze(i,ln(e))+1).join(\"\")},Fn.trimStart=function(t,e,n){if((t=gs(t))&&(n||e===r))return t.replace(nt,\"\");if(!t||!(e=ai(e)))return t;var i=ln(t);return mi(i,Qe(i,ln(e))).join(\"\")},Fn.truncate=function(t,e){var n=30,i=\"...\";if(Xa(e)){var o=\"separator\"in e?e.separator:o;n=\"length\"in e?fs(e.length):n,i=\"omission\"in e?ai(e.omission):i}var a=(t=gs(t)).length;if(nn(t)){var s=ln(t);a=s.length}if(n>=a)return t;var u=n-cn(i);if(u<1)return i;var c=s?mi(s,0,u).join(\"\"):t.slice(0,u);if(o===r)return c+i;if(s&&(u+=c.length-u),is(o)){if(t.slice(u).search(o)){var l,d=c;for(o.global||(o=It(o.source,gs(dt.exec(o))+\"g\")),o.lastIndex=0;l=o.exec(d);)var h=l.index;c=c.slice(0,h===r?u:h)}}else if(t.indexOf(ai(o),u)!=u){var f=c.lastIndexOf(o);f>-1&&(c=c.slice(0,f))}return c+i},Fn.unescape=function(t){return(t=gs(t))&&$.test(t)?t.replace(H,hn):t},Fn.uniqueId=function(t){var e=++Nt;return gs(t)+e},Fn.upperCase=Ys,Fn.upperFirst=Js,Fn.each=ga,Fn.eachRight=ma,Fn.first=Wo,au(Fn,(vu={},mr(Fn,function(t,e){zt.call(Fn.prototype,e)||(vu[e]=t)}),vu),{chain:!1}),Fn.VERSION=\"4.18.1\",Pe([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Fn[t].placeholder=Fn}),Pe([\"drop\",\"take\"],function(t,e){Vn.prototype[t]=function(n){n=n===r?1:vn(fs(n),0);var i=this.__filtered__&&!e?new Vn(this):this.clone();return i.__filtered__?i.__takeCount__=gn(n,i.__takeCount__):i.__views__.push({size:gn(n,h),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Vn.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),Pe([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=1==n||3==n;Vn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:oo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),Pe([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");Vn.prototype[t]=function(){return this[n](1).value()[0]}}),Pe([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");Vn.prototype[t]=function(){return this.__filtered__?new Vn(this):this[n](1)}}),Vn.prototype.compact=function(){return this.filter(nu)},Vn.prototype.find=function(t){return this.filter(t).head()},Vn.prototype.findLast=function(t){return this.reverse().find(t)},Vn.prototype.invokeMap=Gr(function(t,e){return\"function\"==typeof t?new Vn(this):this.map(function(n){return Er(n,t,e)})}),Vn.prototype.reject=function(t){return this.filter(Na(oo(t)))},Vn.prototype.slice=function(t,e){t=fs(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Vn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==r&&(n=(e=fs(e))<0?n.dropRight(-e):n.take(e-t)),n)},Vn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Vn.prototype.toArray=function(){return this.take(h)},mr(Vn.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Fn[i?\"take\"+(\"last\"==e?\"Right\":\"\"):e],a=i||/^find/.test(e);o&&(Fn.prototype[e]=function(){var e=this.__wrapped__,s=i?[1]:arguments,u=e instanceof Vn,c=s[0],l=u||qa(e),d=function(t){var e=o.apply(Fn,Te([t],s));return i&&h?e[0]:e};l&&n&&\"function\"==typeof c&&1!=c.length&&(u=l=!1);var h=this.__chain__,f=!!this.__actions__.length,p=a&&!h,y=u&&!f;if(!a&&l){e=y?e:new Vn(this);var v=t.apply(e,s);return v.__actions__.push({func:ha,args:[d],thisArg:r}),new Un(v,h)}return p&&y?t.apply(this,s):(v=this.thru(d),p?i?v.value()[0]:v.value():v)})}),Pe([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=Et[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Fn.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(qa(i)?i:[],t)}return this[n](function(n){return e.apply(qa(n)?n:[],t)})}}),mr(Vn.prototype,function(t,e){var n=Fn[e];if(n){var r=n.name+\"\";zt.call(An,r)||(An[r]=[]),An[r].push({name:e,func:n})}}),An[Bi(r,2).name]=[{name:\"wrapper\",func:r}],Vn.prototype.clone=function(){var t=new Vn(this.__wrapped__);return t.__actions__=Oi(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Oi(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Oi(this.__views__),t},Vn.prototype.reverse=function(){if(this.__filtered__){var t=new Vn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Vn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=qa(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case\"drop\":t+=a;break;case\"dropRight\":e-=a;break;case\"take\":e=gn(e,t+a);break;case\"takeRight\":t=vn(t,e-a)}}return{start:t,end:e}}(0,i,this.__views__),a=o.start,s=o.end,u=s-a,c=r?s:a-1,l=this.__iteratees__,d=l.length,h=0,f=gn(u,this.__takeCount__);if(!n||!r&&i==u&&f==u)return di(t,this.__actions__);var p=[];t:for(;u--&&h<f;){for(var y=-1,v=t[c+=e];++y<d;){var g=l[y],m=g.iteratee,b=g.type,w=m(v);if(2==b)v=w;else if(!w){if(1==b)continue t;break t}}p[h++]=v}return p},Fn.prototype.at=fa,Fn.prototype.chain=function(){return da(this)},Fn.prototype.commit=function(){return new Un(this.value(),this.__chain__)},Fn.prototype.next=function(){this.__values__===r&&(this.__values__=ds(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Fn.prototype.plant=function(t){for(var e,n=this;n instanceof Rn;){var i=Fo(n);i.__index__=0,i.__values__=r,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e},Fn.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Vn){var e=t;return this.__actions__.length&&(e=new Vn(this)),(e=e.reverse()).__actions__.push({func:ha,args:[Xo],thisArg:r}),new Un(e,this.__chain__)}return this.thru(Xo)},Fn.prototype.toJSON=Fn.prototype.valueOf=Fn.prototype.value=function(){return di(this.__wrapped__,this.__actions__)},Fn.prototype.first=Fn.prototype.head,Qt&&(Fn.prototype[Qt]=function(){return this}),Fn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(le._=fn,define(function(){return fn})):he?((he.exports=fn)._=fn,de._=fn):le._=fn}.call(this)},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,e,n){\"use strict\";n.d(e,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createBraintreeAchPaymentStrategy:()=>V,createBraintreeCreditCardPaymentStrategy:()=>Kt,createBraintreeFastlaneCustomerStrategy:()=>oe,createBraintreeFastlanePaymentStrategy:()=>Mt,createBraintreeLocalMethodsPaymentStrategy:()=>It,createBraintreePaypalButtonStrategy:()=>ye,createBraintreePaypalCreditButtonStrategy:()=>me,createBraintreePaypalCreditCustomerStrategy:()=>ne,createBraintreePaypalCustomerStrategy:()=>Xt,createBraintreePaypalPaymentStrategy:()=>ft,createBraintreeVenmoButtonStrategy:()=>ke,createBraintreeVenmoPaymentStrategy:()=>Vt,createBraintreeVisaCheckoutButtonStrategy:()=>_e,createBraintreeVisaCheckoutCustomerStrategy:()=>ce,createBraintreeVisaCheckoutPaymentStrategy:()=>Lt});var t,e,i,o=n(315);class a extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class s extends a{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}!function(t){t.Sandbox=\"sandbox\",t.Production=\"production\"}(t||(t={})),function(t){t.Client=\"client\",t.DataCollector=\"dataCollector\",t.Fastlane=\"fastlane\",t.GooglePayment=\"googlePayment\",t.HostedFields=\"hostedFields\",t.LocalPayment=\"localPayment\",t.Paypal=\"paypal\",t.PaypalCheckout=\"paypalCheckout\",t.ThreeDSecure=\"threeDSecure\",t.UsBankAccount=\"usBankAccount\",t.Venmo=\"venmo\",t.VisaCheckout=\"visaCheckout\"}(e||(e={})),function(t){t.CardCode=\"cardCode\",t.CardCodeVerification=\"cardCodeVerification\",t.CardExpiry=\"cardExpiry\",t.CardName=\"cardName\",t.CardNumber=\"cardNumber\",t.CardNumberVerification=\"cardNumberVerification\"}(i||(i={}));const u=\"3.128.0\",c=\"3.123.2\",l=\"3.106.0\",d={[l]:{[e.Client]:\"sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt\",[e.PaypalCheckout]:\"sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O\",[e.Paypal]:\"sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+\",[e.LocalPayment]:\"sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT\",[e.DataCollector]:\"sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV\",[e.UsBankAccount]:\"sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ\",[e.GooglePayment]:\"sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe\",[e.ThreeDSecure]:\"sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB\",[e.VisaCheckout]:\"sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT\",[e.Venmo]:\"sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov\",[e.HostedFields]:\"sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy\",[e.Fastlane]:\"sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa\"},[c]:{[e.Client]:\"sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO\",[e.PaypalCheckout]:\"sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/\",[e.Paypal]:\"sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt\",[e.LocalPayment]:\"sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH\",[e.DataCollector]:\"sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO\",[e.UsBankAccount]:\"sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW\",[e.GooglePayment]:\"sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO\",[e.ThreeDSecure]:\"sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym\",[e.VisaCheckout]:\"sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS\",[e.Venmo]:\"sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU\",[e.HostedFields]:\"sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P\",[e.Fastlane]:\"sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y\"},[u]:{[e.Client]:\"sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq\",[e.PaypalCheckout]:\"sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh\",[e.Paypal]:\"sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH\",[e.LocalPayment]:\"sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC\",[e.DataCollector]:\"sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc\",[e.UsBankAccount]:\"sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F\",[e.GooglePayment]:\"sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i\",[e.ThreeDSecure]:\"sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D\",[e.VisaCheckout]:\"sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv\",[e.Venmo]:\"sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz\",[e.HostedFields]:\"sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z\",[e.Fastlane]:\"sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr\"}};var h,f,p,y,v,g,m,b,w=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class _{constructor(t,e,n){this.scriptLoader=t,this.braintreeHostWindow=e,this.braintreeSDKVersionManager=n}loadClient(){return w(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(e.Client,\"client.min.js\")})}loadFastlane(){return w(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(e.Fastlane,\"fastlane.min.js\")})}loadPaypalCheckout(){return w(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(e.PaypalCheckout,\"paypal-checkout.min.js\")})}loadPaypal(){return w(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(e.Paypal,\"paypal.min.js\")})}loadLocalPayment(){return w(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(e.LocalPayment,\"local-payment.min.js\")})}loadDataCollector(){return w(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(e.DataCollector,\"data-collector.min.js\")})}loadUsBankAccount(){return w(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(e.UsBankAccount,\"us-bank-account.min.js\")})}loadGooglePayment(){return w(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(e.GooglePayment,\"google-payment.min.js\")})}load3DS(){return w(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(e.ThreeDSecure,\"three-d-secure.min.js\")})}loadVisaCheckout(){return this.loadBraintreeModuleOrThrow(e.VisaCheckout,\"visa-checkout.min.js\")}loadVenmoCheckout(){return this.loadBraintreeModuleOrThrow(e.Venmo,\"venmo.min.js\")}loadHostedFields(){return w(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(e.HostedFields,\"hosted-fields.min.js\")})}loadVisaCheckoutSdk(t){return w(this,void 0,void 0,function*(){if(this.braintreeHostWindow.V)return this.braintreeHostWindow.V;const e=t?\"sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm\":\"sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6\";return this.scriptLoader.loadScript(`//${t?\"sandbox-\":\"\"}assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,{async:!0,attributes:{integrity:e,crossorigin:\"anonymous\"}}).then(()=>{if(!this.braintreeHostWindow.V)throw new s;return this.braintreeHostWindow.V})})}loadBraintreeModuleOrThrow(t,e){return w(this,void 0,void 0,function*(){let n=this.getBraintreeModule(t);if(n)return n;const r=this.braintreeSDKVersionManager.getSDKVersion(),i=`//js.braintreegateway.com/web/${r}/js/${e}`,o=r in d?this.getIntegrityValuesByModuleName(t,r):void 0;if(yield this.scriptLoader.loadScript(i,o?{async:!0,attributes:{integrity:o,crossorigin:\"anonymous\"}}:void 0),n=this.getBraintreeModule(t),!n)throw new s;return n})}getBraintreeModule(t){var e;return null===(e=this.braintreeHostWindow.braintree)||void 0===e?void 0:e[t]}getIntegrityValuesByModuleName(t,e){const n=d[e][t];if(!n)throw new Error(\"Unexpected fileName value\");return n}}class S extends a{constructor(t){super(t||\"Unsupported browser error\"),this.name=\"UnsupportedBrowserError\",this.type=\"unsupported_browser\"}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(h||(h={}));class C extends a{constructor(t){super(function(t){switch(t){case h.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case h.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case h.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case h.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}function P(t){return Boolean(\"object\"==typeof t&&null!==t&&(\"type\"in t||\"message\"in t||\"code\"in t))}!function(t){t.ESTIMATED=\"ESTIMATED\",t.FINAL=\"FINAL\",t.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(f||(f={})),function(t){t.Completed=\"COMPLETED\",t.Pending=\"PENDING\",t.Failed=\"FAILED\"}(p||(p={})),function(t){t.TRUSTLY=\"trustly\"}(y||(y={})),function(t){t.SUCCEEDED=\"succeeded\",t.FAILED=\"failed\",t.CANCELED=\"cancelled\",t.UNRECOGNIZED=\"unrecognized\"}(v||(v={})),function(t){t.Customer=\"CUSTOMER\",t.Merchant=\"MERCHANT\",t.Network=\"NETWORK\",t.Internal=\"INTERNAL\",t.Unknown=\"UNKNOWN\"}(g||(g={})),function(t){t.KountNotEnabled=\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"}(m||(m={})),function(t){t.Visa=\"visa\",t.Mastercard=\"mastercard\",t.AmericanExpress=\"american-express\",t.DinersClub=\"diners-club\",t.Discover=\"discover\",t.Jcb=\"jcb\",t.UnionPay=\"union-pay\",t.Maestro=\"maestro\",t.Elo=\"elo\",t.Mir=\"mir\",t.Hiper=\"hiper\",t.Hipercard=\"hipercard\"}(b||(b={}));var I=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class O{constructor(t){this.braintreeScriptLoader=t}initialize(t){this.setClientToken(t)}deinitialize(){return I(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollector),this.dataCollector=void 0})}getClient(){return I(this,void 0,void 0,function*(){if(!this.client){const t=this.getClientTokenOrThrow(),e=yield this.braintreeScriptLoader.loadClient();this.client=yield e.create({authorization:t})}return this.client})}getDataCollectorOrThrow(t){return I(this,void 0,void 0,function*(){const e={deviceData:void 0,teardown:()=>Promise.resolve()};if(!this.dataCollector)try{const e=yield this.getClient(),n=yield this.braintreeScriptLoader.loadDataCollector(),r=Object.assign({client:e,kount:!0},t);this.dataCollector=yield n.create(r)}catch(t){if(P(t)&&t.code===m.KountNotEnabled)return e;throw t}return this.dataCollector})}getBraintreeGooglePayment(){return I(this,void 0,void 0,function*(){if(!this.googlePayment){const[t,e]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadGooglePayment()]);this.googlePayment=yield e.create({client:t})}return this.googlePayment})}getBraintreeThreeDS(){return I(this,void 0,void 0,function*(){if(!this.threeDS){const[t,e]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]);this.threeDS=yield e.create({client:t,version:2})}return this.threeDS})}getBraintreeLocalPayment(t){return I(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment){const[e,n]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadLocalPayment()]);this.braintreeLocalPayment=yield new Promise((r,i)=>{n.create({client:e,merchantAccountId:t},(t,e)=>{t&&i(t),r(e)})})}return this.braintreeLocalPayment})}getUsBankAccount(){return I(this,void 0,void 0,function*(){if(!this.usBankAccount){const t=yield this.getClient(),e=yield this.braintreeScriptLoader.loadUsBankAccount();this.usBankAccount=yield e.create({client:t})}return this.usBankAccount})}getBraintreeVisaCheckout(){return this.visaCheckout||(this.visaCheckout=Promise.all([this.getClient(),this.braintreeScriptLoader.loadVisaCheckout()]).then(([t,e])=>e.create({client:t}))),this.visaCheckout}getVisaCheckoutSdk(t){return I(this,void 0,void 0,function*(){return this.visaCheckoutSDK||(this.visaCheckoutSDK=yield this.braintreeScriptLoader.loadVisaCheckoutSdk(t)),this.visaCheckoutSDK})}getVenmoCheckoutOrThrow(){return I(this,void 0,void 0,function*(){if(!this.braintreeVenmo){const t=yield this.getClient(),e=yield this.braintreeScriptLoader.loadVenmoCheckout(),n={client:t,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},r=yield e.create(n);if(!r.isBrowserSupported())throw new S;this.braintreeVenmo=r}return this.braintreeVenmo})}setClientToken(t){this.clientToken=t}getClientTokenOrThrow(){if(!this.clientToken)throw new C(h.PaymentNotInitialized);return this.clientToken}teardownModule(t){return t?t.teardown():Promise.resolve()}}var k=n(9440);function E(t,e,n=!0){var r;return null!==(r=t[e])&&void 0!==r?r:n}class A{constructor(t){this.paymentIntegrationService=t,this.braintreeWindow=window}getSDKVersion(){const t=this.paymentIntegrationService.getState().getStoreConfig(),e=(null==t?void 0:t.checkoutSettings.features)||{};return this.getPreloadedSDKVersion()||(E(e,\"PAYPAL-5809.braintree_hosted_fields_fix_version\")?u:E(e,\"PAYPAL-5636.update_braintree_sdk_version\")?c:l)}getPreloadedSDKVersion(){const t=this.braintreeWindow.braintree;if(t){const e=(0,k.find)(Object.values(t),t=>!!t.VERSION);return null==e?void 0:e.VERSION}}}function x(t,e){return Object.assign(t,{resolveIds:e})}class T extends a{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}var j;!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(j||(j={}));class z extends a{constructor(t){super(function(t){switch(t){case j.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case j.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case j.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case j.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case j.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case j.MissingCheckoutConfig:case j.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case j.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case j.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case j.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case j.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case j.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case j.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class N extends T{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}function M(t){return Boolean(t.instrumentId)}class D extends a{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}function B(t){return!(\"object\"!=typeof t||null===t||void 0!==t.shouldSaveInstrument&&\"boolean\"!=typeof t.shouldSaveInstrument||void 0!==t.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof t.shouldSetAsDefaultInstrument)}class F extends a{constructor(t){super(t||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}function L(t){return!!t&&\"accountNumber\"in t&&\"routingNumber\"in t&&\"ownershipType\"in t&&\"accountType\"in t}var R=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class U{constructor(t,e){this.paymentIntegrationService=t,this.braintreeSdk=e}initialize(t){return R(this,void 0,void 0,function*(){const{methodId:e,braintreeach:n}=t||{};if(!e)throw new T('Unable to initialize payment because \"options.methodId\" argument is not provided.');this.getMandateText=null==n?void 0:n.getMandateText,yield this.paymentIntegrationService.loadPaymentMethod(e);const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{clientToken:i,initializationData:o}=r;if(!i||!o)throw new z(j.MissingPaymentMethod);this.braintreeSdk.initialize(i);try{this.usBankAccount=yield this.braintreeSdk.getUsBankAccount()}catch(t){this.handleBraintreeError(t)}})}execute(t,e){return R(this,void 0,void 0,function*(){const{payment:n}=t,r=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]);if(!n)throw new N([\"payment\"]);const i=M(n.paymentData||{}),o=i?yield this.tokenizePaymentForVaultedInstrument(n):yield this.tokenizePayment(n),a=i?yield this.preparePaymentDataForVaultedInstrument(o,n):yield this.preparePaymentData(o,n);yield this.paymentIntegrationService.submitOrder(r,e),yield this.paymentIntegrationService.submitPayment(a)})}finalize(){return Promise.reject(new D)}deinitialize(){return R(this,void 0,void 0,function*(){return yield this.braintreeSdk.deinitialize(),Promise.resolve()})}tokenizePayment({paymentData:t}){return R(this,void 0,void 0,function*(){const e=this.getUsBankAccountOrThrow();if(!L(t))throw new N([\"payment.paymentData\"]);const n=M(t)?\"The data are used for stored instrument verification\":\"function\"==typeof this.getMandateText&&this.getMandateText();if(!n)throw new T(\"Unable to proceed because getMandateText is not provided or returned undefined value.\");try{const{nonce:r}=yield e.tokenize({bankDetails:this.getBankDetails(t),mandateText:n});return r}catch(t){this.handleBraintreeError(t)}})}tokenizePaymentForVaultedInstrument(t){return R(this,void 0,void 0,function*(){const{methodId:e,paymentData:n={}}=t,r=this.paymentIntegrationService.getState(),{config:i}=r.getPaymentMethodOrThrow(e);if(!i.isVaultingEnabled)throw new T(\"Vaulting is disabled but a vaulted instrument was being used for this transaction\");return L(n)?this.tokenizePayment(t):null})}preparePaymentData(t,e){return R(this,void 0,void 0,function*(){const{methodId:n,paymentData:r={}}=e;if(!L(r))throw new N([\"payment.paymentData\"]);const{deviceData:i}=yield this.braintreeSdk.getDataCollectorOrThrow(),{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a,routingNumber:s,accountNumber:u}=r;return{methodId:n,paymentData:{deviceSessionId:i,shouldSetAsDefaultInstrument:a,shouldSaveInstrument:o,formattedPayload:{tokenized_bank_account:{issuer:s,masked_account_number:u.substr(-4),token:t}}}}})}preparePaymentDataForVaultedInstrument(t,e){return R(this,void 0,void 0,function*(){const{methodId:n,paymentData:r={}}=e;if(!M(r)||!B(r))throw new N([\"payment.paymentData\"]);const{deviceData:i}=yield this.braintreeSdk.getDataCollectorOrThrow(),{instrumentId:o,shouldSetAsDefaultInstrument:a}=r;return{methodId:n,paymentData:Object.assign({deviceSessionId:i,instrumentId:o,shouldSetAsDefaultInstrument:a},t&&{nonce:t})}})}getBankDetails(t){const e=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),n=t.ownershipType.toLowerCase(),r=t.accountType.toLowerCase();return Object.assign(Object.assign({accountNumber:t.accountNumber,routingNumber:t.routingNumber,ownershipType:n},\"personal\"===n?{firstName:t.firstName,lastName:t.lastName}:{businessName:t.businessName}),{accountType:r,billingAddress:{streetAddress:e.address1,extendedAddress:e.address2,locality:e.city,region:e.stateOrProvinceCode,postalCode:e.postalCode}})}getUsBankAccountOrThrow(){if(!this.usBankAccount)throw new C(h.PaymentNotInitialized);return this.usBankAccount}handleBraintreeError(t){if(!P(t))throw t;throw new F(t.message)}}const V=x(t=>new U(t,(t=>{const e=new A(t),n=new _((0,o.vQ)(),window,e);return new O(n)})(t)),[{id:\"braintreeach\"}]);var q=n(6472);class H extends a{constructor(t,e){super(e||\"Unable to proceed because the payment form contains invalid data.\"),this.details=t,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}class W extends a{constructor(t){super(t||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}class ${constructor(t){const e=new Promise((t,e)=>{this.cancel=e});this.promise=Promise.race([t,e])}}let G=null;const Y=[\"buttons\",\"messages\"];var J,K,Q,Z,X,tt;!function(t){t.HORIZONTAL=\"horizontal\",t.VERTICAL=\"vertical\"}(J||(J={})),function(t){t.SMALL=\"small\",t.MEDIUM=\"medium\",t.LARGE=\"large\",t.RESPONSIVE=\"responsive\"}(K||(K={})),function(t){t.GOLD=\"gold\",t.BLUE=\"blue\",t.SIlVER=\"silver\",t.BLACK=\"black\",t.WHITE=\"white\"}(Q||(Q={})),function(t){t.CHECKOUT=\"checkout\",t.PAY=\"pay\",t.BUYNOW=\"buynow\",t.PAYPAL=\"paypal\",t.CREDIT=\"credit\"}(Z||(Z={})),function(t){t.PILL=\"pill\",t.RECT=\"rect\"}(X||(X={})),function(t){t.CART=\"cart\",t.HOME=\"homepage\",t.PAYMENT=\"payment\",t.PRODUCT=\"product\"}(tt||(tt={}));var et=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class nt{constructor(t,e,n){this.braintreeScriptLoader=t,this.braintreeHostWindow=e,this.overlay=n,this.dataCollectors={}}initialize(t,e){this.clientToken=t,this.threeDSecureOptions=e}getBraintreeFastlane(t,e,n){return et(this,void 0,void 0,function*(){if(e&&(window.localStorage.setItem(\"axoEnv\",\"sandbox\"),window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\")),!this.braintreeHostWindow.braintreeFastlane){const e=this.getClientTokenOrThrow(),r=yield this.getClient(),i=yield this.getSessionId(t),o=yield this.braintreeScriptLoader.loadFastlane(),a={root:{backgroundColorPrimary:\"transparent\"}};this.braintreeHostWindow.braintreeFastlane=yield o.create({authorization:e,client:r,deviceData:i,styles:n||a})}return this.braintreeHostWindow.braintreeFastlane})}getClient(){return et(this,void 0,void 0,function*(){if(!this.client){const t=this.getClientTokenOrThrow(),e=yield this.braintreeScriptLoader.loadClient();this.client=e.create({authorization:t})}return this.client})}getPaypal(){return this.braintreePaypal||(this.braintreePaypal=Promise.all([this.getClient(),this.braintreeScriptLoader.loadPaypal()]).then(([t,e])=>e.create({client:t}))),this.braintreePaypal}paypal(t){var{shouldSaveInstrument:e}=t,n=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"shouldSaveInstrument\"]);const r=(0,q.Jt)();return this.getPaypal().then(t=>{var i;return r&&(null===(i=this.overlay)||void 0===i||i.show({onClick:()=>t.focusWindow()})),t.tokenize(Object.assign({enableShippingAddress:!0,flow:e?\"vault\":\"checkout\",useraction:\"commit\"},n))}).then(t=>{var e;return null===(e=this.overlay)||void 0===e||e.remove(),t}).catch(t=>{var e;throw null===(e=this.overlay)||void 0===e||e.remove(),t})}getPaypalCheckout(t,e,n){return et(this,void 0,void 0,function*(){const r=yield this.getClient(),i=yield this.braintreeScriptLoader.loadPaypalCheckout(),o={client:r};return this.paypalCheckout=yield i.create(o,(r,i)=>{var o;if(r)return n(r);const a=Object.assign(Object.assign({currency:t.currency},t.isCreditEnabled&&{\"enable-funding\":\"paylater\"}),{components:Y.toString(),intent:t.intent,commit:null===(o=t.commit)||void 0===o||o});this.braintreeHostWindow.paypal?e(i):function(t,e){return G||(G=new Promise((n,r)=>{t.loadPayPalSDK(e,e=>{e?(G=null,r(e)):n(t)})})),G}(i,a).then(()=>e(i))}),this.paypalCheckout})}getDataCollector(t){return et(this,void 0,void 0,function*(){const e=(null==t?void 0:t.paypal)?\"paypal\":\"default\";let n=this.dataCollectors[e];if(!n){try{const e=yield this.getClient(),r=yield this.braintreeScriptLoader.loadDataCollector(),i=Object.assign({client:e,kount:!0},t);n=yield r.create(i)}catch(t){if(!P(t)||\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"!==t.code)throw t;n={deviceData:void 0,teardown:()=>Promise.resolve()}}this.dataCollectors[e]=n}return n})}getBraintreeEnv(e=!1){return e?t.Sandbox:t.Production}mapToBraintreeShippingAddressOverride(t){return{recipientName:`${t.firstName} ${t.lastName}`,line1:t.address1,line2:t.address2,city:t.city,state:t.stateOrProvinceCode,postalCode:t.postalCode,countryCode:t.countryCode,phone:t.phone}}mapToLegacyShippingAddress(t){const{email:e,phone:n,shippingAddress:r}=t,i=(null==r?void 0:r.recipientName)||\"\",[o,a]=i.split(\" \");return{email:e,first_name:o||\"\",last_name:a||\"\",phone_number:n,address_line_1:null==r?void 0:r.line1,address_line_2:null==r?void 0:r.line2,city:null==r?void 0:r.city,state:null==r?void 0:r.state,country_code:null==r?void 0:r.countryCode,postal_code:null==r?void 0:r.postalCode}}mapToLegacyBillingAddress(t){const{billingAddress:e,email:n,firstName:r,lastName:i,phone:o,shippingAddress:a}=t,s=e||a;return{email:n,first_name:r,last_name:i,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}removeElement(t){const e=t&&document.getElementById(t);e&&e.remove()}getSessionId(t){return et(this,void 0,void 0,function*(){const{deviceData:e}=yield this.getDataCollector({riskCorrelationId:t});return e})}teardown(){return et(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollectors.default),yield this.teardownModule(this.dataCollectors.paypal),this.dataCollectors={},yield this.teardownModule(this.paypalCheckout),this.paypalCheckout=void 0})}get3DS(){return et(this,void 0,void 0,function*(){return this.threeDS||(this.threeDS=Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]).then(([t,e])=>e.create({client:t,version:2}))),this.threeDS})}getVenmoCheckout(t){return et(this,void 0,void 0,function*(){if(!this.venmoCheckout){const e=yield this.getClient(),n=yield this.braintreeScriptLoader.loadVenmoCheckout(),r=Object.assign({client:e,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},t||{});this.venmoCheckout=yield new Promise((t,e)=>{n.create(r,(n,r)=>n?e(n):r.isBrowserSupported()?void t(r):e(new S))})}return this.venmoCheckout})}verifyCard(t,e,n){return et(this,void 0,void 0,function*(){const r=yield this.tokenizeCard(t,e);return this.challenge3DSVerification(r,n)})}tokenizeCard(t,e){return et(this,void 0,void 0,function*(){const{paymentData:n}=t;if(!function(t){if(\"object\"!=typeof t||null===t)return!1;const e=t;return\"object\"==typeof e.ccExpiry&&null!==e.ccExpiry&&\"string\"==typeof e.ccNumber&&\"string\"==typeof e.ccName}(n))throw new N([\"payment.paymentData\"]);const r=this.getErrorsRequiredFields(n);if(!(0,k.isEmpty)(r))throw new H(r);const i=this.mapToCreditCard(n,e),o=yield this.getClient(),{creditCards:a}=yield o.request(i);return{nonce:a[0].nonce,bin:a[0].details.bin}})}challenge3DSVerification(t,e){return et(this,void 0,void 0,function*(){const n=yield this.get3DS();return this.present3DSChallenge(n,e,t)})}teardownModule(t){return t?t.teardown():Promise.resolve()}getClientTokenOrThrow(){if(!this.clientToken)throw new C(h.PaymentNotInitialized);return this.clientToken}getErrorsRequiredFields(t){const{ccNumber:e,ccExpiry:n}=t,r={};return e||(r.ccNumber=[{message:\"Credit card number is required\",type:\"required\"}]),n||(r.ccExpiry=[{message:\"Expiration date is required\",type:\"required\"}]),r}mapToCreditCard(t,e){return{data:{creditCard:{cardholderName:t.ccName,number:t.ccNumber,cvv:t.ccCvv,expirationDate:`${t.ccExpiry.month}/${t.ccExpiry.year}`,options:{validate:!1},billingAddress:e&&{countryCodeAlpha2:e.countryCode,locality:e.city,countryName:e.country,postalCode:e.postalCode,streetAddress:e.address2?`${e.address1} ${e.address2}`:e.address1}}},endpoint:\"payment_methods/credit_cards\",method:\"post\"}}present3DSChallenge(t,e,n){const{nonce:r,bin:i}=n;if(!this.threeDSecureOptions||!r)throw new C(h.PaymentNotInitialized);const{addFrame:o,removeFrame:a,challengeRequested:s=!0,additionalInformation:u}=this.threeDSecureOptions,c=()=>et(this,void 0,void 0,function*(){const e=yield t.cancelVerifyCard();return d.cancel(new W),e}),l=e.toFixed(2),d=new $(t.verifyCard({addFrame:(t,e)=>{o&&o(t,e,c)},amount:Number(l),bin:i,challengeRequested:s,nonce:r,removeFrame:a,onLookupComplete:(t,e)=>{e()},collectDeviceData:!0,additionalInformation:u}));return d.promise}}class rt{constructor(t){this.paymentIntegrationService=t,this.braintreeHostWindow=window}render(t,e,n){const r=e&&document.getElementById(e);if(this.braintreeHostWindow.paypal&&r){const i=this.paymentIntegrationService.getState(),o=i.getCartOrThrow(),a=i.getBillingAddressOrThrow(),s=i.getPaymentMethodOrThrow(t);if(!s.initializationData)return;const{paypalBNPLConfiguration:u=[]}=s.initializationData,c=n===tt.PAYMENT?\"checkout\":n,l=u&&u.find(({id:t})=>t===c);if(!l||!l.status)return;n===tt.CART&&(r.removeAttribute(\"data-pp-style-logo-type\"),r.removeAttribute(\"data-pp-style-logo-position\"),r.removeAttribute(\"data-pp-style-text-color\"),r.removeAttribute(\"data-pp-style-text-size\")),this.braintreeHostWindow.paypal.Messages({amount:o.cartAmount,buyerCountry:a.countryCode,placement:n,style:this.getPaypalMessagesStylesFromBNPLConfig(l)}).render(`#${e}`)}}getPaypalMessagesStylesFromBNPLConfig({styles:t}){const e={};return t.color&&(e.color=t.color),t.layout&&(e.layout=t.layout),(t[\"logo-type\"]||t[\"logo-position\"])&&(e.logo={},t[\"logo-type\"]&&(e.logo.type=t[\"logo-type\"]),t[\"logo-position\"]&&(e.logo.position=t[\"logo-position\"])),t.ratio&&(e.ratio=t.ratio),(t[\"text-color\"]||t[\"text-size\"])&&(e.text={},t[\"text-color\"]&&(e.text.color=t[\"text-color\"]),t[\"text-size\"]&&(e.text.size=+t[\"text-size\"])),e}}class it{constructor(t){const{element:e,closeElement:n,mainElement:r}=this._createElements(t);this._element=e,this._closeElement=n,this._mainElement=r}show(t){this._mainElement.parentElement||(this._registerClick(t),document.body.appendChild(this._mainElement),setTimeout(()=>this._element.style.opacity=\"1\"))}remove(){this._mainElement.parentElement&&(this._unregisterClick&&this._unregisterClick(),this._removeAfterTransition(),setTimeout(()=>this._element.style.opacity=\"0\"))}_createElements(t){const e=document.createElement(\"div\"),{background:n=\"rgba(0, 0, 0, 0.8)\",id:r=\"checkoutOverlay\",transitionDuration:i=400,hasCloseButton:o=!1,innerHtml:a=null}=t||{};let s,u,c,l,d=e;if(r&&(e.id=r),a){const t=document.createElement(\"div\");l=`${r}--overlayText`,t.className=l,t.appendChild(a),e.appendChild(t)}return o&&(c=`${r}--close`,s=document.createElement(\"div\"),s.className=c,u=`${r}--layout`,d=document.createElement(\"div\"),d.className=u,d.appendChild(e),d.appendChild(s)),d.appendChild(function(t){const{id:e,background:n,transitionDuration:r,classLayout:i,classOverlayText:o,classClose:a}=t,s=document.createElement(\"style\"),u=i?`, .${i}`:\"\";return s.id=`${e}--styles`,s.type=\"text/css\",s.innerText=`\\n        #${e}${u} {\\n            display: block;\\n            height: 100%;\\n            width: 100%;\\n            left: 0;\\n            top: 0;\\n            position: fixed;\\n            z-index: 2147483647;\\n        }\\n        #${e} {\\n            transition: opacity ${r}ms ease-out;\\n            background: ${n};\\n            opacity: 0;\\n        }\\n    `,o&&(s.innerText+=`\\n             #${e} {\\n                display: flex;\\n                align-items: center;\\n                justify-content: center;\\n             }\\n             #${e} .${o} {\\n                color: white;\\n                max-width: 330px;\\n                font-size: 1.2em;\\n                text-align: center;\\n             }\\n        `),a&&(s.innerText+=`\\n            #${e} {\\n                opacity: 1;\\n            }\\n            .${i} .${a} {\\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            .${i} .${a}::after, .${i} .${a}::before {\\n                position: absolute;\\n                left: 8px;\\n                content: '';\\n                height: 16px;\\n                width: 2px;\\n                background-color: #fff;\\n            }\\n            .${i} .${a}::after {\\n                transform: rotate(-45deg);\\n            }\\n            .${i} .${a}::before {\\n                transform: rotate(45deg);\\n            }\\n        `),s}({id:r,background:n,transitionDuration:i,classLayout:u,classOverlayText:l,classClose:c})),{element:e,closeElement:s,mainElement:d}}_addEventListener(t,e){t&&e&&t.addEventListener(\"click\",e)}_removeEventListener(t,e){t&&e&&t.removeEventListener(\"click\",e)}_registerClick(t){if(this._unregisterClick&&this._unregisterClick(),t){const{onClick:e,onClickClose:n}=t;this._addEventListener(this._element,e),this._addEventListener(this._closeElement,n),this._unregisterClick=()=>{this._removeEventListener(this._element,e),this._removeEventListener(this._closeElement,n),this._unregisterClick=void 0}}}_removeAfterTransition(){const t=e=>{\"opacity\"===e.propertyName&&(this._mainElement.parentElement&&this._mainElement.remove(),this._element.removeEventListener(\"transitionend\",t))};this._element.addEventListener(\"transitionend\",t)}}const ot={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},at=\"embedded-checkout-loading-indicator-rotation\";class st{constructor(t){this.styles=Object.assign(Object.assign({},ot),t&&t.styles),this.containerStyles=Object.assign({},t&&t.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(t){if(t){const e=document.getElementById(t);if(!e)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");e.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const t=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",t)};this.container.addEventListener(\"transitionend\",t),this.container.style.opacity=\"0\"}buildContainer(){const t=document.createElement(\"div\");return t.style.display=\"block\",t.style.bottom=\"0\",t.style.left=\"0\",t.style.height=\"100%\",t.style.width=\"100%\",t.style.position=\"absolute\",t.style.right=\"0\",t.style.top=\"0\",t.style.transition=\"all 250ms ease-out\",t.style.opacity=\"0\",this.setStyleAttribute(t,this.containerStyles),t}buildIndicator(){const t=document.createElement(\"div\");return t.style.display=\"block\",t.style.width=`${this.styles.size}px`,t.style.height=`${this.styles.size}px`,t.style.borderRadius=`${this.styles.size}px`,t.style.border=\"solid 1px\",t.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,t.style.margin=\"0 auto\",t.style.position=\"absolute\",t.style.left=\"0\",t.style.right=\"0\",t.style.top=\"50%\",t.style.transform=\"translateY(-50%) rotate(0deg)\",t.style.transformStyle=\"preserve-3d\",t.style.animation=`${at} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,t}setStyleAttribute(t,e){Object.keys(e).forEach(n=>{t.style.setProperty(n,e[n])})}defineAnimation(){var t;if(document.getElementById(at))return;const e=document.createElement(\"style\");e.id=at,null===(t=document.head)||void 0===t||t.appendChild(e),e.sheet instanceof CSSStyleSheet&&e.sheet.insertRule(`\\n                @keyframes ${at} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}const ut={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"};function ct(t){return\"object\"==typeof t&&null!==t&&\"name\"in t&&\"BraintreeError\"===t.name}function lt(t){return{recipientName:`${t.firstName} ${t.lastName}`,line1:t.address1,line2:t.address2,city:t.city,state:t.stateOrProvinceCode,postalCode:t.postalCode,countryCode:t.countryCode,phone:t.phone}}var dt=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class ht{constructor(t,e,n,r){this.paymentIntegrationService=t,this.braintreeIntegrationService=e,this.braintreeMessages=n,this.loadingIndicator=r,this.braintreeHostWindow=window}initialize(t){return dt(this,void 0,void 0,function*(){const{braintree:e,methodId:n}=t;if((null==e?void 0:e.containerId)&&(this.braintreeButtonOptions=e),this.paymentMethod&&this.paymentMethod.nonce||(this.paymentMethod=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n)),this.paymentMethod.clientToken&&(null==e?void 0:e.bannerContainerId))return yield this.loadPaypal(),this.loadPaypalCheckoutInstance(e);if(this.paymentMethod.clientToken)return this.loadPaypal();const r=yield this.paymentIntegrationService.loadPaymentMethod(n);if(this.paymentMethod=r.getPaymentMethodOrThrow(n),null==e?void 0:e.bannerContainerId)return this.loadPaypalCheckoutInstance(e);if(!this.paymentMethod.clientToken)throw new z(j.MissingPaymentMethod);return this.loadPaypal()})}execute(t,e){var n;return dt(this,void 0,void 0,function*(){const{payment:r}=t,i=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]);if(!r)throw new N([\"payment\"]);const{onError:o}=this.braintreeButtonOptions||{};try{const t=yield this.preparePaymentData(r,i.useStoreCredit);yield this.paymentIntegrationService.submitOrder(i,e),yield this.paymentIntegrationService.submitPayment(t)}catch(t){this.isProviderError(t)&&(yield this.loadPaypal(),null===(n=this.paypalButtonRender)||void 0===n||n.close(),yield this.loadPaypalCheckoutInstance(this.braintreeButtonOptions),yield new Promise((t,e)=>{o&&\"function\"==typeof o&&o(new Error(\"INSTRUMENT_DECLINED\")),e()})),this.handleError(t)}})}finalize(){return Promise.reject(new D)}deinitialize(){var t;return this.braintreeTokenizePayload=void 0,null===(t=this.paypalButtonRender)||void 0===t||t.close(),this.braintreeIntegrationService.teardown()}preparePaymentData(t,e){var n;return dt(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),i=r.getOutstandingBalance(e),o=r.getStoreConfig();if(!i)throw new z(j.MissingCheckout);if(!o)throw new z(j.MissingCheckoutConfig);if(!this.paymentMethod)throw new C(h.PaymentNotInitialized);const{currency:a,storeProfile:{storeLanguage:s}}=o,{nonce:u,config:{isVaultingEnabled:c}}=this.paymentMethod,{methodId:l,paymentData:d={}}=t,f=(null===(n=this.braintreeTokenizePayload)||void 0===n?void 0:n.nonce)||u;if(f){const e=yield this.paymentIntegrationService.loadPaymentMethod(l);return this.paymentMethod=e.getPaymentMethod(l),Object.assign(Object.assign({},t),{paymentData:this.formattedPayload(f)})}if(M(d)||(p=d,Boolean(p.instrumentId)&&!Object.prototype.hasOwnProperty.call(p,\"ccNumber\")&&!Object.prototype.hasOwnProperty.call(p,\"ccCvv\"))){if(!c)throw new T(\"Vaulting is disabled but a vaulted instrument was being used for this transaction\");return Promise.resolve(t)}var p;if(!B(d))throw new z(j.MissingPayment);const{shouldSaveInstrument:y,shouldSetAsDefaultInstrument:v}=d;if(y&&!c)throw new T(\"Vaulting is disabled but shouldSaveInstrument is set to true\");const g=r.getShippingAddress(),m=g?lt(g):void 0;return Promise.all([this.braintreeIntegrationService.paypal({amount:i,locale:s,currency:a.code,offerCredit:\"braintreepaypalcredit\"===this.paymentMethod.id,shippingAddressOverride:m,shouldSaveInstrument:y||!1,shippingAddressEditable:!1}),this.braintreeIntegrationService.getSessionId()]).then(([{nonce:e,details:n}={},r])=>Object.assign(Object.assign({},t),{paymentData:this.formattedPayload(e,n&&n.email,r,y,v)}))})}formattedPayload(t,e,n,r,i){return{formattedPayload:{vault_payment_instrument:r||null,set_as_default_stored_instrument:i||null,device_info:n||null,paypal_account:{token:t,email:e||null}}}}loadPaypalCheckoutInstance(t){return dt(this,void 0,void 0,function*(){const{clientToken:e,initializationData:n,id:r}=this.paymentMethod||{};if(!e)throw new z(j.MissingPaymentMethod);try{this.braintreeIntegrationService.initialize(e);const i={currency:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,intent:null==n?void 0:n.intent,isCreditEnabled:null==n?void 0:n.isCreditEnabled},o=\"braintreepaypalcredit\"===r||!(null==n?void 0:n.isCreditEnabled);yield this.braintreeIntegrationService.getPaypalCheckout(i,e=>{o&&r&&(null==t?void 0:t.bannerContainerId)&&this.renderPayPalMessages(r,t.bannerContainerId),this.renderPayPalButton(e,t)},this.handleError)}catch(t){this.handleError(t)}})}renderPayPalMessages(t,e){this.braintreeMessages.render(t,e,tt.PAYMENT)}renderPayPalButton(t,e){const{onPaymentError:n,submitForm:r,onRenderButton:i,containerId:o,onError:a}=e||{};if(!o)return;const s=this.getSmartButtonContainerId(o);if(!document.getElementById(s))throw new T(`Unable to initialize payment because element with id ${o} does not exist.`);if(!this.paymentMethod)throw new C(h.PaymentNotInitialized);this.loadingIndicatorContainer=o.split(\"#\")[1];const{id:u,config:{testMode:c}}=this.paymentMethod,{paypal:l}=this.braintreeHostWindow,d=null==l?void 0:l.FUNDING.PAYPAL;l&&d?(this.paypalButtonRender=l.Buttons({env:c?\"sandbox\":\"production\",commit:!1,fundingSource:d,onClick:()=>{this.toggleLoadingIndicator(!0)},createOrder:()=>this.setupPayment(t,u,n),onApprove:e=>dt(this,void 0,void 0,function*(){this.braintreeTokenizePayload=yield this.tokenizePaymentOrThrow(e,t),r&&\"function\"==typeof r&&r()}),onCancel:()=>{this.toggleLoadingIndicator(!1)},onError:t=>{this.toggleLoadingIndicator(!1),null==a||a(t)}}),i&&\"function\"==typeof i&&i(),this.paypalButtonRender.isEligible()&&this.paypalButtonRender.render(`${o}`)):this.removeElement(o.split(\"#\")[1])}setupPayment(t,e,n){return dt(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState();try{const n=r.getCustomer(),i=r.getPaymentMethodOrThrow(e),o=r.getCheckoutOrThrow().outstandingBalance,a=r.getStoreConfigOrThrow().currency.code,s=r.getShippingAddress()||(null==n?void 0:n.addresses[0]),u=s?lt(s):void 0;return yield t.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:u,amount:o,currency:a,offerCredit:!1,intent:i.initializationData.intent})}catch(t){throw n&&(ct(t)||t instanceof a)&&n(t),t}})}tokenizePaymentOrThrow(t,e,n){return dt(this,void 0,void 0,function*(){try{return yield e.tokenizePayment(t)}catch(t){throw n&&(ct(t)||t instanceof a)&&n(t),t}})}loadPaypal(){return dt(this,void 0,void 0,function*(){const{clientToken:t,initializationData:e}=this.paymentMethod||{};if(!t||!e)throw new z(j.MissingPaymentMethod);try{this.braintreeIntegrationService.initialize(t),yield this.braintreeIntegrationService.getPaypal()}catch(t){this.handleError(t)}return Promise.resolve()})}handleError(t){if(!ct(t))throw t;if(\"PAYPAL_POPUP_CLOSED\"===t.code)throw new W(t.message);throw new F(t.message)}isProviderError(t){var e,n,r;return!!function(t){return\"object\"==typeof t&&null!==t&&\"errors\"in t}(t)&&\"2046\"===(null===(r=null===(n=((null===(e=null==t?void 0:t.errors)||void 0===e?void 0:e.filter(t=>t.provider_error))||[])[0])||void 0===n?void 0:n.provider_error)||void 0===r?void 0:r.code)}removeElement(t){const e=t&&document.getElementById(t);e&&e.remove()}toggleLoadingIndicator(t){t&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}getSmartButtonContainerId(t){var e;return null!==(e=t.split(\"#\")[1])&&void 0!==e?e:t}}const ft=x(t=>{const e=window,n=new it,r=new A(t),i=new nt(new _((0,o.vQ)(),e,r),e,n),a=new rt(t);return new ht(t,i,a,new st({containerStyles:ut}))},[{id:\"braintreepaypal\"},{id:\"braintreepaypalcredit\"}]);var pt,yt=n(4043);!function(t){t.Json=\"application/json\",t.JsonV1=\"application/vnd.bc.v1+json\"}(pt||(pt={}));const vt=pt,gt={\"X-Checkout-SDK-Version\":\"1.916.1\"};class mt{constructor(t){this.requestSender=t}getOrderStatus(t=\"braintreelocalmethods\",e){return n=this,r=void 0,o=function*(){const n=`/api/storefront/initialization/${t}`,r=Object.assign({\"X-API-INTERNAL\":\"This API endpoint is for internal use only and may change in the future\",\"Content-Type\":vt.Json},gt);return(yield this.requestSender.get(n,Object.assign({headers:r},e))).body},new((i=void 0)||(i=Promise))(function(t,e){function a(t){try{u(o.next(t))}catch(t){e(t)}}function s(t){try{u(o.throw(t))}catch(t){e(t)}}function u(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i(function(t){t(n)})).then(a,s)}u((o=o.apply(n,r||[])).next())});var n,r,i,o}}const bt={body:{},headers:{},status:0};class wt extends a{constructor(t,{message:e,errors:n}={}){const{body:r,headers:i,status:o}=t||bt;super(e||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=i,this.status=o,this.errors=n||[]}}class _t extends wt{constructor(t){super(t,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class St extends wt{constructor(t){super(t,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}var Ct=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class Pt{constructor(t,e,n,r,i=3e3,o=3e5){this.paymentIntegrationService=t,this.braintreeSdk=e,this.braintreeRequestSender=n,this.loadingIndicator=r,this.pollingInterval=i,this.maxPollingIntervalTime=o,this.isLPMsUpdateExperimentEnabled=!1,this.pollingTimer=0,this.stopPolling=k.noop,this.isPollingEnabled=!1}initialize(t){return Ct(this,void 0,void 0,function*(){const{gatewayId:e,methodId:n,braintreelocalmethods:r}=t;if(this.gatewayId=e,!n)throw new T('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!e)throw new T('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!r)throw new T('Unable to initialize payment because \"options.braintreelocalmethods\" argument is not provided.');this.braintreelocalmethods=r,this.loadingIndicatorContainer=r.container.split(\"#\")[1],yield this.paymentIntegrationService.loadPaymentMethod(e);const i=this.paymentIntegrationService.getState(),o=i.getPaymentMethodOrThrow(e),{clientToken:a,config:s,initializationData:u}=o,c=i.getStoreConfigOrThrow().checkoutSettings.features;if(this.isPollingEnabled=E(c,\"PAYPAL-5258.braintree_local_methods_polling\"),this.isLPMsUpdateExperimentEnabled=E(c,\"PAYPAL-4853.add_new_payment_flow_for_braintree_lpms\"),!a||!u||!s.merchantId)throw new z(j.MissingPaymentMethod);try{this.braintreeSdk.initialize(a),this.isNonInstantPaymentMethod(n)||(this.braintreeLocalPayment=yield this.braintreeSdk.getBraintreeLocalPayment(s.merchantId))}catch(t){this.handleError(t)}})}finalize(){return Promise.reject(new D)}deinitialize(){return Ct(this,void 0,void 0,function*(){return this.toggleLoadingIndicator(!1),Promise.resolve()})}execute(t,e){return Ct(this,void 0,void 0,function*(){const{payment:n}=t,r=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]);if(!n)throw new N([\"payment\"]);const{methodId:i}=n;this.toggleLoadingIndicator(!0),this.isNonInstantPaymentMethod(i)?yield this.executeWithNotInstantLPM(i):yield this.executeWithInstantLPM(i,r,e)})}executeWithNotInstantLPM(t){return Ct(this,void 0,void 0,function*(){try{const e=yield this.getLPMsBasicPaymentData();yield this.paymentIntegrationService.submitOrder(),yield this.paymentIntegrationService.submitPayment({methodId:t,paymentData:Object.assign(Object.assign({},e),{formattedPayload:{method:t}})})}catch(t){if(this.isBraintreeRedirectError(t)){const e=t.body.additional_action_required.data.redirect_url;return new Promise((t,n)=>{window.location.replace(e),this.toggleLoadingIndicator(!1),n()})}return this.handleError(t),Promise.reject(t)}})}executeWithInstantLPM(t,e,n){return Ct(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment)throw new _t;yield new Promise((r,i)=>{var o;null===(o=this.braintreeLocalPayment)||void 0===o||o.startPayment(this.getInstantLPMConfig(t,e,n),this.getInstantLPMCallback(r,i,t,e,n))})})}getLPMsBasicPaymentData(){return Ct(this,void 0,void 0,function*(){const{deviceData:t}=yield this.braintreeSdk.getDataCollectorOrThrow();return{deviceSessionId:t}})}getInstantLPMConfig(t,e,n){const r=this.paymentIntegrationService.getState(),i=r.getCartOrThrow(),o=r.getBillingAddressOrThrow(),{firstName:a,lastName:s,countryCode:u}=o,{currency:c,email:l,lineItems:d}=i,h=d.physicalItems.length>0,f=r.getCheckoutOrThrow().outstandingBalance,p=r.getStoreConfigOrThrow().links.checkoutLink;return{paymentType:t,amount:f,fallback:{url:p,buttonText:\"Complete Payment\"},currencyCode:c.code,shippingAddressRequired:h,email:l,givenName:a,surname:s,address:{countryCode:u},onPaymentStart:(r,i)=>Ct(this,void 0,void 0,function*(){if(!this.isLPMsUpdateExperimentEnabled)return this.orderId=r.paymentId,void i();const o=yield this.getLPMsBasicPaymentData(),a=Object.assign(Object.assign({},o),{formattedPayload:{method:t,[`${t}_account`]:{order_id:r.paymentId}}});try{yield this.paymentIntegrationService.submitOrder(e,n),yield this.paymentIntegrationService.submitPayment({methodId:t,paymentData:a})}catch(e){if(this.isBraintreeOrderSavedResponse(e)&&e.body.additional_action_required.data.order_id_saved_successfully)return i(),this.isPollingEnabled?new Promise((e,n)=>{this.initializePollingMechanism(t,e,n,this.gatewayId)}):void 0;throw e}})}}getInstantLPMCallback(t,e,n,r,i){const o=this.paymentIntegrationService.getState().getCartOrThrow();return(a,s)=>Ct(this,void 0,void 0,function*(){if(a)return\"LOCAL_PAYMENT_WINDOW_CLOSED\"===a.code?(this.toggleLoadingIndicator(!1),this.resetPollingMechanism(),e()):(this.isPollingEnabled&&this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),e(new _t));const u=yield this.getLPMsBasicPaymentData(),c=Object.assign(Object.assign({},u),{formattedPayload:{method:n,[`${n}_account`]:Object.assign({email:o.email,token:s.nonce},this.isLPMsUpdateExperimentEnabled?{}:{order_id:this.orderId})}});try{return this.isLPMsUpdateExperimentEnabled||(yield this.paymentIntegrationService.submitOrder(r,i)),yield this.paymentIntegrationService.submitPayment({methodId:n,paymentData:c}),t(void 0)}catch(t){return this.handleError(t),e(t)}})}toggleLoadingIndicator(t){t&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}handleError(t){const{onError:e}=this.braintreelocalmethods||{};this.isPollingEnabled&&this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),e&&\"function\"==typeof e&&e(t)}isNonInstantPaymentMethod(t){return t.toUpperCase()in y}isBraintreeRedirectError(t){var e;if(\"object\"!=typeof t||null===t)return!1;const{body:n}=t;return!!n&&!!(null===(e=n.additional_action_required)||void 0===e?void 0:e.data.redirect_url)}isBraintreeOrderSavedResponse(t){var e;if(\"object\"!=typeof t||null===t)return!1;const{body:n}=t;return!!n&&(null===(e=n.additional_action_required)||void 0===e?void 0:e.data.hasOwnProperty(\"order_id_saved_successfully\"))}initializePollingMechanism(t,e,n,r){return Ct(this,void 0,void 0,function*(){yield new Promise((t,e)=>{const n=setTimeout(t,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),e())});try{this.pollingTimer+=this.pollingInterval;const i=yield this.braintreeRequestSender.getOrderStatus(r,{params:{useMetadata:!1}}),o=i.status===p.Pending,a=i.status===p.Completed,s=i.status===p.Failed;if(a)return this.deinitializePollingMechanism(),e();if(s)return n();if(!a&&o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(t,e,n,r);yield this.reinitializeStrategy({methodId:t,gatewayId:r,braintreelocalmethods:this.braintreelocalmethods}),this.handleError(new St)}catch(t){n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}reinitializeStrategy(t){return Ct(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(t)})}}const It=x(t=>{const e=window,n=new A(t),r=new O(new _((0,o.vQ)(),e,n)),i=(0,yt.createRequestSender)(),a=new mt(i);return new Pt(t,r,a,new st({styles:{backgroundColor:\"black\"}}))},[{gateway:\"braintreelocalmethods\"}]);function Ot(t){return\"string\"!=typeof t}function kt(t,e){if(e||t)return function(t){var e,n;const r={},i=(0,k.omitBy)(t.root,Ot),o=(0,k.omitBy)(t.input,Ot),a=(0,k.omitBy)(t.toggle,Ot),s=(0,k.omitBy)(null===(e=t.text)||void 0===e?void 0:e.body,Ot),u=(0,k.omitBy)(null===(n=t.text)||void 0===n?void 0:n.caption,Ot),c=t.branding;return Object.keys(i).length&&(r.root=i),Object.keys(o).length&&(r.input=o),Object.keys(a).length&&(r.toggle=a),Object.keys(s).length&&(r.text={},r.text.body=s),Object.keys(u).length&&(r.text=Object.assign({},r.text),r.text.caption=u),c&&(r.branding=c),r}(function(t,e){var n,r,i,o,a,s,u,c,l,d,h,f,p,y,v,g,m,b,w,_,S,C;return{root:{backgroundColorPrimary:(null==t?void 0:t.fastlaneRootSettingsBackgroundColor)||(null===(n=null==e?void 0:e.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==t?void 0:t.fastlaneRootSettingsErrorColor)||(null===(r=null==e?void 0:e.root)||void 0===r?void 0:r.errorColor),fontFamily:(null==t?void 0:t.fastlaneRootSettingsFontFamily)||(null===(i=null==e?void 0:e.root)||void 0===i?void 0:i.fontFamily),fontSizeBase:(null==t?void 0:t.fastlaneRootSettingsFontSize)||(null===(o=null==e?void 0:e.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==t?void 0:t.fastlaneRootSettingsPadding)||(null===(a=null==e?void 0:e.root)||void 0===a?void 0:a.padding),primaryColor:(null==t?void 0:t.fastlaneRootSettingsPrimaryColor)||(null===(s=null==e?void 0:e.root)||void 0===s?void 0:s.primaryColor)},input:{borderRadius:(null==t?void 0:t.fastlaneInputSettingsBorderRadius)||(null===(u=null==e?void 0:e.input)||void 0===u?void 0:u.borderRadius),borderColor:(null==t?void 0:t.fastlaneInputSettingsBorderColor)||(null===(c=null==e?void 0:e.input)||void 0===c?void 0:c.borderColor),focusBorderColor:(null==t?void 0:t.fastlaneInputSettingsFocusBorderBase)||(null===(l=null==e?void 0:e.input)||void 0===l?void 0:l.focusBorderColor),backgroundColor:(null==t?void 0:t.fastlaneInputSettingsBackgroundColor)||(null===(d=null==e?void 0:e.input)||void 0===d?void 0:d.backgroundColor),borderWidth:(null==t?void 0:t.fastlaneInputSettingsBorderWidth)||(null===(h=null==e?void 0:e.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==t?void 0:t.fastlaneInputSettingsTextColorBase)||(null===(f=null==e?void 0:e.input)||void 0===f?void 0:f.textColorBase)},toggle:{colorPrimary:(null==t?void 0:t.fastlaneToggleSettingsColorPrimary)||(null===(p=null==e?void 0:e.toggle)||void 0===p?void 0:p.colorPrimary),colorSecondary:(null==t?void 0:t.fastlaneToggleSettingsColorSecondary)||(null===(y=null==e?void 0:e.toggle)||void 0===y?void 0:y.colorSecondary)},text:{body:{color:(null==t?void 0:t.fastlaneTextBodySettingsColor)||(null===(g=null===(v=null==e?void 0:e.text)||void 0===v?void 0:v.body)||void 0===g?void 0:g.color),fontSize:(null==t?void 0:t.fastlaneTextBodySettingsFontSize)||(null===(b=null===(m=null==e?void 0:e.text)||void 0===m?void 0:m.body)||void 0===b?void 0:b.fontSize)},caption:{color:(null==t?void 0:t.fastlaneTextCaptionSettingsColor)||(null===(_=null===(w=null==e?void 0:e.text)||void 0===w?void 0:w.caption)||void 0===_?void 0:_.color),fontSize:(null==t?void 0:t.fastlaneTextCaptionSettingsFontSize)||(null===(C=null===(S=null==e?void 0:e.text)||void 0===S?void 0:S.caption)||void 0===C?void 0:C.fontSize)}},branding:(null==t?void 0:t.fastlaneBrandingSettings)||(null==e?void 0:e.branding)}}(t,e))}function Et(t){return!!t&&(\"authenticationState\"in t||\"addresses\"in t||\"instruments\"in t)}var At,xt=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class Tt{constructor(t,e,n){this.paymentIntegrationService=t,this.braintreeFastlaneUtils=e,this.braintreeSdk=n}initialize(t){var e;return xt(this,void 0,void 0,function*(){const{methodId:n,braintreefastlane:r}=t;if(!n)throw new T('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new T('Unable to initialize payment because \"options.braintreefastlane\" argument is not provided.');if(!r.onInit||\"function\"!=typeof r.onInit)throw new T('Unable to initialize payment because \"options.braintreefastlane.onInit\" argument is not provided or it is not a function.');if(!r.onChange||\"function\"!=typeof r.onChange)throw new T('Unable to initialize payment because \"options.braintreefastlane.onChange\" argument is not provided or it is not a function.');yield this.paymentIntegrationService.loadPaymentMethod(n);const i=this.paymentIntegrationService.getState(),o=i.getPaymentMethodOrThrow(n),{initializationData:a,clientToken:s}=o||{},{isFastlaneStylingEnabled:u}=a||{},c=E(i.getStoreConfigOrThrow().checkoutSettings.features,\"PROJECT-7080.braintree_fastlane_three_ds\");this.is3DSEnabled=o.config.is3dsEnabled,s&&c&&this.braintreeSdk.initialize(s);const l=kt(u?null===(e=o.initializationData)||void 0===e?void 0:e.fastlaneStyles:void 0,r.styles);yield this.braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow(n,l),this.shouldRunAuthenticationFlow()&&(yield this.braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow()),yield this.initializeCardComponent(),this.onError=r.onError,r.onInit(t=>this.renderBraintreeCardComponent(t)),r.onChange(()=>this.handleBraintreeStoredInstrumentChange(n))})}execute(t,e){return xt(this,void 0,void 0,function*(){const{payment:n}=t,r=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]);if(!n)throw new N([\"payment\"]);yield this.paymentIntegrationService.submitOrder(r,e);const i=yield this.preparePaymentPayload(n.methodId);yield this.paymentIntegrationService.submitPayment(i),this.braintreeFastlaneUtils.removeSessionIdFromCookies()})}finalize(){return Promise.reject(new D)}deinitialize(){return xt(this,void 0,void 0,function*(){return this.braintreeCardComponent=void 0,Promise.resolve()})}initializeCardComponent(){return xt(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),{phone:e,firstName:n,lastName:r}=t.getBillingAddressOrThrow(),i=`${n} ${r}`,o={styles:{},fields:Object.assign({cardholderName:{prefill:i,enabled:!0}},e&&{phoneNumber:{prefill:e}})},a=this.braintreeFastlaneUtils.getBraintreeFastlaneComponentOrThrow();this.braintreeCardComponent=yield a(o)})}renderBraintreeCardComponent(t){const e=this.getBraintreeCardComponentOrThrow();if(!t)throw new T('Unable to initialize payment because \"container\" argument is not provided.');e.render(t)}preparePaymentPayload(t){var e,n;return xt(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),i=r.getBillingAddressOrThrow(),o=`${i.firstName} ${i.lastName}`,a=this.getPayPalInstruments()[0],s=yield this.braintreeFastlaneUtils.getDeviceSessionId(),u=E(r.getStoreConfigOrThrow().checkoutSettings.features,\"PROJECT-7080.braintree_fastlane_three_ds\");if(a){const e=this.is3DSEnabled&&u?yield this.get3DS(a.bigpayToken,(null==a?void 0:a.iin)||\"\"):void 0;return{methodId:t,paymentData:{deviceSessionId:s,formattedPayload:{paypal_fastlane_token:{token:e||a.bigpayToken}}}}}const{getPaymentToken:c}=this.getBraintreeCardComponentOrThrow(),l=yield c({name:{fullName:o},billingAddress:this.mapToPayPalAddress(i)}),d=(null===(n=null===(e=l.paymentSource.card)||void 0===e?void 0:e.binDetails)||void 0===n?void 0:n.bin)||\"\",h=this.is3DSEnabled&&u?yield this.get3DS(l.id,d):void 0;return{methodId:t,paymentData:{deviceSessionId:s,nonce:h||l.id}}})}get3DS(t,e){return xt(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),r=yield this.braintreeSdk.getBraintreeThreeDS(),i=n.getOrderOrThrow();return new Promise((n,o)=>{r.verifyCard({amount:null==i?void 0:i.orderAmount,nonce:t,bin:e,onLookupComplete:(t,e)=>{r.on(\"customer-canceled\",()=>{\"function\"==typeof this.onError&&this.onError(new W),o(new W)}),e()}},(t,e)=>(t&&\"THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT\"===t.code&&(\"function\"==typeof this.onError&&this.onError(new W),o(new W)),n(e.nonce)))})})}mapToPayPalAddress(t){return{streetAddress:(null==t?void 0:t.address1)||\"\",locality:(null==t?void 0:t.city)||\"\",region:(null==t?void 0:t.stateOrProvinceCode)||(null==t?void 0:t.stateOrProvince)||\"\",postalCode:(null==t?void 0:t.postalCode)||\"\",countryCodeAlpha2:(null==t?void 0:t.countryCode)||\"\"}}shouldRunAuthenticationFlow(){const t=this.paymentIntegrationService.getState(),e=t.getCartOrThrow(),n=t.getCustomerOrThrow(),r=t.getPaymentProviderCustomer(),i=Et(r)?r:{},o=this.braintreeFastlaneUtils.getSessionIdFromCookies();return!(!n.isGuest||(null==i?void 0:i.authenticationState)===v.CANCELED||(null==i?void 0:i.authenticationState)||o!==e.id)}getBraintreeCardComponentOrThrow(){if(!this.braintreeCardComponent)throw new s;return this.braintreeCardComponent}getPayPalInstruments(){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomerOrThrow();return(Et(t)?t:{}).instruments||[]}handleBraintreeStoredInstrumentChange(t){return xt(this,void 0,void 0,function*(){const e=this.braintreeFastlaneUtils.getBraintreeFastlaneOrThrow(),{selectionChanged:n,selectedCard:r}=yield e.profile.showCardSelector();if(n){const e=this.paymentIntegrationService.getState().getPaymentProviderCustomer(),n=Et(e)?e:{},i=this.braintreeFastlaneUtils.mapPayPalToBcInstrument(t,[r]);if(i&&i.length>0)return yield this.paymentIntegrationService.updatePaymentProviderCustomer(Object.assign(Object.assign({},n),{instruments:[...i]})),i[0]}})}}!function(t){t.CVV=\"cvv\",t.PAN=\"pan\"}(At||(At={}));class jt{static get(t){const e=`${encodeURIComponent(`${t}`)}=`,n=document.cookie;let r=null;const i=n.indexOf(e);if(i>-1){let t=n.indexOf(\";\",i);-1===t&&(t=n.length),r=decodeURIComponent(n.substring(i+e.length,t))}return r}static set(t,e,n={secure:!0}){let r=`${encodeURIComponent(t)}=${encodeURIComponent(e)}`;const{expires:i,path:o,domain:a,secure:s}=n;if(i)r+=`; expires=${i.toUTCString()}`;else{const t=new Date,e=60;t.setTime(t.getTime()+60*e*1e3),r+=`; expires=${t.toUTCString()}`}o&&(r+=`; path=${o}`),a&&(r+=`; domain=${a}`),s&&(r+=\"; secure\"),document.cookie=r}static remove(t,e){jt.set(t,\"\",Object.assign({expires:new Date(0)},e))}}var zt=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class Nt{constructor(t,e){this.paymentIntegrationService=t,this.braintreeIntegrationService=e}getDeviceSessionId(){return zt(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getCart();return this.braintreeIntegrationService.getSessionId(null==t?void 0:t.id)})}initializeBraintreeFastlaneOrThrow(t,e){return zt(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),r=n.getCart(),{clientToken:i,config:o}=n.getPaymentMethodOrThrow(t);if(!i)throw new z(j.MissingPaymentMethod);this.methodId=t,this.braintreeIntegrationService.initialize(i),this.braintreeFastlane=yield this.braintreeIntegrationService.getBraintreeFastlane(null==r?void 0:r.id,o.testMode,e)})}getBraintreeFastlaneOrThrow(){if(!this.braintreeFastlane)throw new s;return this.braintreeFastlane}getBraintreeFastlaneComponentOrThrow(){return this.getBraintreeFastlaneOrThrow().FastlaneCardComponent}runPayPalAuthenticationFlowOrThrow(t,e){var n;return zt(this,void 0,void 0,function*(){try{const r=this.getMethodIdOrThrow(),i=this.getBraintreeFastlaneOrThrow(),{lookupCustomerByEmail:o,triggerAuthenticationFlow:a}=i.identity,s=this.paymentIntegrationService.getState(),u=s.getCartOrThrow(),c=s.getCustomer(),l=s.getBillingAddress(),{isFastlaneShippingOptionAutoSelectEnabled:d}=s.getPaymentMethodOrThrow(r).initializationData||{},h=t||(null==c?void 0:c.email)||(null==l?void 0:l.email)||\"\",{customerContextId:f}=yield o(h);if(!f)return yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:v.UNRECOGNIZED,addresses:[],instruments:[]}),void this.saveSessionIdToCookies(u.id);const{authenticationState:p,profileData:y}=yield a(f),g=(null===(n=null==y?void 0:y.shippingAddress)||void 0===n?void 0:n.phoneNumber)||\"\";if(p===v.CANCELED)return yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:p,addresses:[],instruments:[]}),void this.removeSessionIdFromCookies();const m=this.mapPayPalToBcAddress([y.shippingAddress],[g])||[],b=this.getPayPalBillingAddresses(y),w=b?this.mapPayPalToBcAddress([b],[g]):[],_=y.card?this.mapPayPalToBcInstrument(r,[y.card]):[],S=this.mergeShippingAndBillingAddresses(m,w);if(this.saveSessionIdToCookies(u.id),yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:p,addresses:S,instruments:_}),w.length>0&&u.lineItems.physicalItems.length>0&&(yield this.paymentIntegrationService.updateBillingAddress(w[0])),w.length>0&&u.lineItems.digitalItems.length>0&&0===u.lineItems.physicalItems.length){const{firstName:t,lastName:e}=S[0],n=Object.assign(Object.assign({},w[0]),{firstName:t,lastName:e});yield this.paymentIntegrationService.updateBillingAddress(n)}m.length>0&&u.lineItems.physicalItems.length>0&&(yield this.paymentIntegrationService.updateShippingAddress(m[0]),e&&d&&(yield this.setShippingOption()))}catch(t){}})}getSessionIdFromCookies(){return jt.get(\"bc-fastlane-sessionId\")||\"\"}saveSessionIdToCookies(t){const e=new Date;e.setDate(e.getDate()+14),jt.set(\"bc-fastlane-sessionId\",t,{expires:e,secure:!0})}removeSessionIdFromCookies(){jt.remove(\"bc-fastlane-sessionId\")}mapPayPalToBcInstrument(t,e){if(e)return e.map(e=>{const{id:n,paymentSource:r}=e,{brand:i,expiry:o,lastDigits:a,binDetails:s}=r.card,[u,c]=o.split(\"-\");return{bigpayToken:n,brand:i,defaultInstrument:!1,expiryMonth:c,expiryYear:u,iin:(null==s?void 0:s.bin)||\"\",last4:a,method:t,provider:t,trustedShippingAddress:!1,type:\"card\",untrustedShippingCardVerificationMode:At.PAN}})}mapPayPalToBcAddress(t,e){if(!t)return[];const n=this.paymentIntegrationService.getState().getCountries()||[],r=t=>{const e=n.find(e=>e.code===t);return(null==e?void 0:e.name)||\"\"};return t.map(t=>({id:Date.now(),type:\"paypal-address\",firstName:t.firstName||\"\",lastName:t.lastName||\"\",company:t.company||\"\",address1:t.streetAddress,address2:t.extendedAddress||\"\",city:t.locality,stateOrProvince:t.region,stateOrProvinceCode:t.region,country:r(t.countryCodeAlpha2),countryCode:t.countryCodeAlpha2,postalCode:t.postalCode,phone:e&&e[0]||\"\",customFields:[]}))}getPayPalBillingAddresses(t){const{card:e,name:n}=t||{};if(!e)return;const{firstName:r,lastName:i}=e.paymentSource.card.billingAddress,{firstName:o,lastName:a}=n||{},{shippingAddress:s}=t||{},u=Object.assign(Object.assign({},e.paymentSource.card.billingAddress),{firstName:r||o,lastName:i||a});return s&&(0,k.isEqual)(this.normalizeAddress(u),this.normalizeAddress(s))?s:u}normalizeAddress(t){return(0,k.omit)(t,[\"id\"])}mergeShippingAndBillingAddresses(t,e){const n=e.filter(e=>!t.some(t=>(0,k.isEqual)(this.normalizeAddress(t),this.normalizeAddress(e))));return[...t,...n]}getMethodIdOrThrow(){if(!this.methodId)throw new T('Unable to proceed because \"methodId\" argument is not provided.');return this.methodId}setShippingOption(){var t;return zt(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getConsignments()||[],n=(null===(t=e[0])||void 0===t?void 0:t.availableShippingOptions)||[],r=n.find(t=>t.isRecommended);if(r||n.length){const t=r||n[0];yield this.paymentIntegrationService.selectShippingOption(t.id)}})}}const Mt=x(t=>{const e=window,n=new A(t),r=new nt(new _((0,o.vQ)(),e,n),e),i=new Nt(t,r),a=new _((0,o.vQ)(),e,n),s=new O(a);return new Tt(t,i,s)},[{id:\"braintreeacceleratedcheckout\"}]);var Dt=n(8686),Bt=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class Ft{constructor(t,e,n){this.paymentIntegrationService=t,this.formPoster=e,this.braintreeSdk=n}initialize(t){return Bt(this,void 0,void 0,function*(){const{braintreevisacheckout:e,methodId:n}=t;if(!e)throw new T('Unable to initialize payment because \"options.braintreevisacheckout\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const r=this.paymentIntegrationService.getState();this.paymentMethod=r.getPaymentMethodOrThrow(n);const i=r.getCheckoutOrThrow(),o=r.getStoreConfigOrThrow(),{clientToken:a,config:s}=this.paymentMethod||{};if(!a)throw new z(j.MissingPaymentMethod);const{onError:u=k.noop,onPaymentSelect:c=k.noop}=e;this.braintreeSdk.initialize(a);const l=yield this.braintreeSdk.getBraintreeVisaCheckout(),d=yield this.braintreeSdk.getVisaCheckoutSdk(null==s?void 0:s.testMode),h=l.createInitOptions({settings:{locale:o.storeProfile.storeLanguage,shipping:{collectShipping:!1}},paymentRequest:{currencyCode:o.currency.code,subtotal:String(i.subtotal)}});yield d.init(h),d.on(\"payment.success\",t=>this.tokenizePayment(l,t).then(()=>Promise.all([this.paymentIntegrationService.loadCheckout(),this.paymentIntegrationService.loadPaymentMethod(n)])).then(()=>c()).catch(t=>u(t))),d.on(\"payment.error\",(t,e)=>u(e))})}execute(t,e){var n,r;return Bt(this,void 0,void 0,function*(){const{payment:i}=t,o=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]);if(!i)throw new T('Unable to submit payment because \"payload.payment\" argument is not provided.');if(!(null===(r=null===(n=this.paymentMethod)||void 0===n?void 0:n.initializationData)||void 0===r?void 0:r.nonce))throw new z(j.MissingPaymentMethod);const{nonce:a}=this.paymentMethod.initializationData;try{yield this.paymentIntegrationService.submitOrder(o,e),yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},i),{paymentData:{nonce:a}}))}catch(t){this.handleError(t)}})}finalize(){return Promise.reject(new D)}deinitialize(){return Bt(this,void 0,void 0,function*(){yield this.braintreeSdk.deinitialize()})}tokenizePayment(t,e){return Bt(this,void 0,void 0,function*(){return Promise.all([t.tokenize(e),this.braintreeSdk.getDataCollectorOrThrow()]).then(([t,e])=>{const n=this.paymentIntegrationService.getState(),r=n.getShippingAddress(),i=n.getBillingAddress(),{shippingAddress:o=this.mapToVisaCheckoutAddress(r),billingAddress:a=this.mapToVisaCheckoutAddress(i)}=t;return this.postForm(Object.assign(Object.assign({},t),{shippingAddress:o,billingAddress:a}),e)})})}mapToVisaCheckoutAddress(t){return t?{firstName:t.firstName,lastName:t.lastName,phoneNumber:t.phone,streetAddress:t.address1,extendedAddress:t.address2,locality:t.city,region:t.stateOrProvinceCode,countryCode:t.countryCode,postalCode:t.postalCode}:{}}postForm(t,e){const{userData:n,billingAddress:r,shippingAddress:i,details:o}=t,{userEmail:a}=n,{deviceData:s}=e;return this.formPoster.postForm(\"/checkout.php\",{payment_type:t.type,nonce:t.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,r)),shipping_address:JSON.stringify(this.getAddress(a,i))})}getAddress(t,e={}){return{email:t,first_name:e.firstName,last_name:e.lastName,phone_number:e.phoneNumber,address_line_1:e.streetAddress,address_line_2:e.extendedAddress,city:e.locality,state:e.region,country_code:e.countryCode,postal_code:e.postalCode}}handleError(t){if(t instanceof Error&&\"BraintreeError\"===t.name)throw new F(t.message);throw t}}const Lt=x(t=>{const e=window,n=new A(t),r=new O(new _((0,o.vQ)(),e,n));return new Ft(t,(0,Dt.createFormPoster)(),r)},[{id:\"braintreevisacheckout\"}]);var Rt=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class Ut{constructor(t,e){this.paymentIntegrationService=t,this.braintreeIntegrationService=e}initialize(t){return Rt(this,void 0,void 0,function*(){const{methodId:e}=t;yield this.paymentIntegrationService.loadPaymentMethod(e);const n=this.paymentIntegrationService.getState();this.venmoOptions=t.braintreevenmo;const r=n.getPaymentMethodOrThrow(e);yield this.initializeBraintreeVenmo(r)})}execute(t){return Rt(this,void 0,void 0,function*(){const{payment:e}=t,n=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]);if(!e)throw new N([\"payment\"]);try{const t=yield this.preparePaymentData(e);yield this.paymentIntegrationService.submitOrder(n),yield this.paymentIntegrationService.submitPayment(t)}catch(t){this.handleError(t)}})}finalize(){return Promise.reject(new D)}deinitialize(){return Rt(this,void 0,void 0,function*(){return yield this.braintreeIntegrationService.teardown(),Promise.resolve()})}handleError(t){if(!P(t))throw t;if(\"PAYPAL_POPUP_CLOSED\"===t.code)throw new W(t.message);throw new F(t.message)}initializeBraintreeVenmo(t){var e;return Rt(this,void 0,void 0,function*(){const{clientToken:n}=t;if(!n)throw new z(j.MissingPaymentMethod);const r=E(this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features,\"PAYPAL-5406.braintree_venmo_web_fallback_support\");try{this.braintreeIntegrationService.initialize(n),this.braintreeVenmoCheckout=yield this.braintreeIntegrationService.getVenmoCheckout(Object.assign(Object.assign({},void 0!==(null===(e=this.venmoOptions)||void 0===e?void 0:e.allowDesktop)?{allowDesktop:this.venmoOptions.allowDesktop}:{}),r?{mobileWebFallBack:r}:{}))}catch(t){this.handleError(t)}})}preparePaymentData(t){return Rt(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState(),{nonce:n}=e.getPaymentMethodOrThrow(t.methodId);if(n)return Object.assign(Object.assign({},t),{paymentData:this.formattedPayload(n)});const r=yield this.braintreeVenmoTokenize(),i=yield this.braintreeIntegrationService.getSessionId();return Object.assign(Object.assign({},t),{paymentData:this.formattedPayload(r.nonce,r.details.email,i)})})}formattedPayload(t,e,n){return{formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:n||null,paypal_account:{token:t,email:e||null}}}}braintreeVenmoTokenize(){return new Promise((t,e)=>{var n;null===(n=this.braintreeVenmoCheckout)||void 0===n||n.tokenize((n,r)=>{if(n)return e(n);t(r)})})}}const Vt=x(t=>{const e=window,n=(0,o.vQ)(),r=new A(t),i=new _(n,e,r),a=new nt(i,e);return new Ut(t,a)},[{id:\"braintreevenmo\"}]);var qt=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class Ht{constructor(t,e,n){this.paymentIntegrationService=t,this.braintreeIntegrationService=e,this.braintreeHostedForm=n}initialize(t){return qt(this,void 0,void 0,function*(){const{methodId:e,gatewayId:n,braintree:r}=t;yield this.paymentIntegrationService.loadPaymentMethod(e);const i=this.paymentIntegrationService.getState();this.paymentMethod=i.getPaymentMethodOrThrow(e);const{clientToken:o}=this.paymentMethod;if(!o)throw new z(j.MissingPaymentMethod);this.threeDSecure=null==r?void 0:r.threeDSecure,this.onPaymentError=null==r?void 0:r.onPaymentError;try{this.braintreeIntegrationService.initialize(o,this.threeDSecure),this.isHostedPaymentFormEnabled(e,n)&&(null==r?void 0:r.form)&&(yield this.braintreeHostedForm.initialize(r.form,r.unsupportedCardBrands,o),this.isHostedFormInitialized=this.braintreeHostedForm.isInitialized()),this.is3dsEnabled=this.paymentMethod.config.is3dsEnabled,this.deviceSessionId=yield this.braintreeIntegrationService.getSessionId(),this.shouldInitializeBraintreeFastlane()&&(yield this.initializeBraintreeFastlaneOrThrow(e))}catch(t){return this.handleError(t,e)}})}execute(t){return qt(this,void 0,void 0,function*(){const{payment:e}=t,n=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]);if(!e)throw new N([\"payment\"]);this.isHostedFormInitialized&&this.braintreeHostedForm.validate(),yield this.paymentIntegrationService.submitOrder(n);const r=this.paymentIntegrationService.getState(),i=r.getBillingAddressOrThrow(),o=r.getOrderOrThrow().orderAmount;try{const t=this.isHostedFormInitialized?yield this.prepareHostedPaymentData(e,i,o):yield this.preparePaymentData(e,i,o);yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:t}))}catch(t){return this.processAdditionalAction(t,e,o)}})}finalize(){return Promise.reject(new D)}deinitialize(){return qt(this,void 0,void 0,function*(){return this.isHostedFormInitialized=!1,yield Promise.all([this.braintreeIntegrationService.teardown(),this.braintreeHostedForm.deinitialize()]),Promise.resolve()})}handleError(t,e){var n;if(ct(t)){if(!(e&&this.paymentIntegrationService.getState().isPaymentMethodInitialized({methodId:e})||\"HOSTED_FIELDS_INVALID_FIELD_SELECTOR\"!==t.code))return;if(t.code.startsWith(\"THREEDS_\"))return null===(n=this.onPaymentError)||void 0===n||n.call(this,new F(\"THREEDS_VERIFICATION_FAILED\")),Promise.reject();throw new F(t.message)}throw t}preparePaymentData(t,e,n){return qt(this,void 0,void 0,function*(){const{paymentData:r}=t,i={deviceSessionId:this.deviceSessionId};if(this.isSubmittingWithStoredCard(t))return Object.assign(Object.assign({},i),r);const{shouldSaveInstrument:o=!1,shouldSetAsDefaultInstrument:a=!1}=B(r)?r:{},{nonce:s}=this.shouldPerform3DSVerification(t)?yield this.braintreeIntegrationService.verifyCard(t,e,n):yield this.braintreeIntegrationService.tokenizeCard(t,e);return Object.assign(Object.assign({},i),{nonce:s,shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a})})}prepareHostedPaymentData(t,e,n){return qt(this,void 0,void 0,function*(){const{paymentData:r}=t,i={deviceSessionId:this.deviceSessionId};if(this.isSubmittingWithStoredCard(t)){const{nonce:t}=yield this.braintreeHostedForm.tokenizeForStoredCardVerification();return Object.assign(Object.assign(Object.assign({},i),r),{nonce:t})}const{shouldSaveInstrument:o=!1,shouldSetAsDefaultInstrument:a=!1}=B(r)?r:{},{nonce:s}=this.shouldPerform3DSVerification(t)?yield this.verifyCardWithHostedForm(e,n):yield this.braintreeHostedForm.tokenize(e);return Object.assign(Object.assign({},i),{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a,nonce:s})})}prepareAdditionalActionPaymentData(t,e){const{paymentData:n}=t,r={deviceSessionId:this.deviceSessionId,nonce:e},{shouldSaveInstrument:i=!1,shouldSetAsDefaultInstrument:o=!1}=B(n)?n:{};return this.isSubmittingWithStoredCard(t)&&(i||o)?Object.assign(Object.assign({},n),r):Object.assign({},r)}verifyCardWithHostedForm(t,e){return qt(this,void 0,void 0,function*(){const n=yield this.braintreeHostedForm.tokenize(t);return this.braintreeIntegrationService.challenge3DSVerification(n,e)})}processAdditionalAction(t,e,n){return qt(this,void 0,void 0,function*(){if(!(t=>\"object\"==typeof t&&null!==t&&\"body\"in t)(t)||!(0,k.some)(t.body.errors,{code:\"three_d_secure_required\"}))return this.handleError(t);try{const{payer_auth_request:r}=function(t){return\"object\"==typeof t&&null!==t&&\"name\"in t&&\"body\"in t&&\"status\"in t.body&&\"three_ds_result\"in t.body&&\"payer_auth_request\"in t.body.three_ds_result&&\"errors\"in t.body}(t)&&t.body.three_ds_result||{},{paymentData:i}=e,o=this.paymentIntegrationService.getState();if(!i||!M(i))throw new N([\"instrumentId\"]);const a=o.getCardInstrumentOrThrow(i.instrumentId),{nonce:s}=yield this.braintreeIntegrationService.challenge3DSVerification({nonce:r||\"\",bin:a.iin},n),u=this.prepareAdditionalActionPaymentData(e,s);yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:u}))}catch(t){return this.handleError(t)}})}isHostedPaymentFormEnabled(t,e){return!!t&&!0===this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,e).config.isHostedFormEnabled}isSubmittingWithStoredCard(t){return!(!t.paymentData||!M(t.paymentData))}shouldPerform3DSVerification(t){return!(!this.is3dsEnabled||this.isSubmittingWithStoredCard(t))}shouldInitializeBraintreeFastlane(){var t;const e=this.paymentIntegrationService.getState().getPaymentProviderCustomerOrThrow(),n=Et(e)?e:{};return(null===(t=this.paymentMethod)||void 0===t?void 0:t.initializationData.isAcceleratedCheckoutEnabled)&&!(null==n?void 0:n.authenticationState)}initializeBraintreeFastlaneOrThrow(t){return qt(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState(),n=e.getCartOrThrow(),r=e.getPaymentMethodOrThrow(t),{clientToken:i,config:o}=r;if(!i)throw new z(j.MissingPaymentMethod);this.braintreeIntegrationService.initialize(i,this.threeDSecure),yield this.braintreeIntegrationService.getBraintreeFastlane(n.id,o.testMode)})}}function Wt(t){return\"cardNumber\"in t}function $t(t){if(!P(t))return!1;const{details:e}=t;return void 0===e||\"object\"==typeof e&&null!==e&&void 0===e.invalidFieldKeys||(n=e,Array.isArray(n)&&n.every(t=>\"string\"==typeof t));var n}var Gt,Yt=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};!function(t){t[t.CreditCard=0]=\"CreditCard\",t[t.StoredCardVerification=1]=\"StoredCardVerification\"}(Gt||(Gt={}));class Jt{constructor(t,e){this.braintreeScriptLoader=t,this.braintreeSDKVersionManager=e,this.isInitializedHostedForm=!1,this.handleBlur=t=>{var e,n;null===(n=null===(e=this.formOptions)||void 0===e?void 0:e.onBlur)||void 0===n||n.call(e,{fieldType:this.mapFieldType(t.emittedBy),errors:this.mapErrors(t.fields)})},this.handleFocus=t=>{var e,n;null===(n=null===(e=this.formOptions)||void 0===e?void 0:e.onFocus)||void 0===n||n.call(e,{fieldType:this.mapFieldType(t.emittedBy)})},this.handleCardTypeChange=t=>{var e,n;const r=1===t.cards.length?t.cards[0].type.replace(/^master-card$/,\"mastercard\"):void 0;null===(n=null===(e=this.formOptions)||void 0===e?void 0:e.onCardTypeChange)||void 0===n||n.call(e,{cardType:r})},this.handleInputSubmitRequest=t=>{var e,n;null===(n=null===(e=this.formOptions)||void 0===e?void 0:e.onEnter)||void 0===n||n.call(e,{fieldType:this.mapFieldType(t.emittedBy)})},this.handleValidityChange=t=>{var e,n;null===(n=null===(e=this.formOptions)||void 0===e?void 0:e.onValidate)||void 0===n||n.call(e,{isValid:this.isValidForm(t),errors:this.mapValidationErrors(t.fields)})}}initialize(t,e,n){var r,i,o,a,s;return Yt(this,void 0,void 0,function*(){this.clientToken=n,this.formOptions=t,this.type=Wt(t.fields)?Gt.CreditCard:Gt.StoredCardVerification;const u=this.mapFieldOptions(t.fields,e);(0,k.isEmpty)(u)?this.isInitializedHostedForm=!1:(this.cardFields=yield this.createHostedFields({fields:u,styles:t.styles&&this.mapStyleOptions(t.styles)}),null===(r=this.cardFields)||void 0===r||r.on(\"blur\",this.handleBlur),null===(i=this.cardFields)||void 0===i||i.on(\"focus\",this.handleFocus),null===(o=this.cardFields)||void 0===o||o.on(\"cardTypeChange\",this.handleCardTypeChange),null===(a=this.cardFields)||void 0===a||a.on(\"validityChange\",this.handleValidityChange),null===(s=this.cardFields)||void 0===s||s.on(\"inputSubmitRequest\",this.handleInputSubmitRequest),this.isInitializedHostedForm=!0)})}isInitialized(){return!!this.isInitializedHostedForm}deinitialize(){var t;return Yt(this,void 0,void 0,function*(){this.isInitializedHostedForm&&(this.isInitializedHostedForm=!1,yield null===(t=this.cardFields)||void 0===t?void 0:t.teardown())})}validate(){if(!this.cardFields)throw new C(h.PaymentNotInitialized);const t=this.cardFields.getState();if(!this.isValidForm(t)){this.handleValidityChange(t);const e=this.mapValidationErrors(t.fields);throw new H(e)}}tokenize(t){var e,n,r,i,o;return Yt(this,void 0,void 0,function*(){if(!this.cardFields)throw new C(h.PaymentNotInitialized);try{const i=yield this.cardFields.tokenize((0,k.omitBy)({billingAddress:t&&this.mapBillingAddress(t)},k.isNil));return null===(n=null===(e=this.formOptions)||void 0===e?void 0:e.onValidate)||void 0===n||n.call(e,{isValid:!0,errors:{}}),{nonce:i.nonce,bin:null===(r=i.details)||void 0===r?void 0:r.bin}}catch(t){if($t(t)){const e=this.mapTokenizeError(t);if(e)throw null===(o=null===(i=this.formOptions)||void 0===i?void 0:i.onValidate)||void 0===o||o.call(i,{isValid:!1,errors:e}),new H(e)}throw t}})}tokenizeForStoredCardVerification(){var t,e,n,r,i;return Yt(this,void 0,void 0,function*(){if(!this.cardFields)throw new C(h.PaymentNotInitialized);try{const r=yield this.cardFields.tokenize();return null===(e=null===(t=this.formOptions)||void 0===t?void 0:t.onValidate)||void 0===e||e.call(t,{isValid:!0,errors:{}}),{nonce:r.nonce,bin:null===(n=r.details)||void 0===n?void 0:n.bin}}catch(t){if($t(t)){const e=this.mapTokenizeError(t,!0);if(e)throw null===(i=null===(r=this.formOptions)||void 0===r?void 0:r.onValidate)||void 0===i||i.call(r,{isValid:!1,errors:e}),new H(e)}throw t}})}createHostedFields(t){return Yt(this,void 0,void 0,function*(){const e=yield this.getClient(),n=yield this.braintreeScriptLoader.loadHostedFields(),r=this.braintreeSDKVersionManager.getSDKVersion()===u?Object.assign(Object.assign({},t),{preventCursorJumps:!0}):t;return n.create(Object.assign(Object.assign({},r),{client:e}))})}getClient(){return Yt(this,void 0,void 0,function*(){if(!this.clientToken)throw new C(h.PaymentNotInitialized);if(!this.client){const t=yield this.braintreeScriptLoader.loadClient();this.client=t.create({authorization:this.clientToken})}return this.client})}mapBillingAddress(t){return{countryName:t.country,postalCode:t.postalCode,streetAddress:t.address2?`${t.address1} ${t.address2}`:t.address1}}mapFieldOptions(t,e){if(Wt(t)){const n={};return null==e||e.forEach(t=>{(t=>Object.values(b).includes(t))(t)&&(n[t]=!1)}),(0,k.omitBy)({number:Object.assign({container:`#${t.cardNumber.containerId}`,placeholder:t.cardNumber.placeholder,internalLabel:t.cardNumber.accessibilityLabel},Object.keys(n).length>0?{supportedCardBrands:n}:{}),expirationDate:{container:`#${t.cardExpiry.containerId}`,placeholder:t.cardExpiry.placeholder,internalLabel:t.cardExpiry.accessibilityLabel},cvv:t.cardCode&&{container:`#${t.cardCode.containerId}`,placeholder:t.cardCode.placeholder,internalLabel:t.cardCode.accessibilityLabel},cardholderName:{container:`#${t.cardName.containerId}`,placeholder:t.cardName.placeholder,internalLabel:t.cardName.accessibilityLabel}},k.isNil)}return(0,k.omitBy)({number:t.cardNumberVerification&&{container:`#${t.cardNumberVerification.containerId}`,placeholder:t.cardNumberVerification.placeholder},cvv:t.cardCodeVerification&&{container:`#${t.cardCodeVerification.containerId}`,placeholder:t.cardCodeVerification.placeholder}},k.isNil)}mapStyleOptions(t){const e=(t={})=>(0,k.omitBy)({color:t.color,\"font-family\":t.fontFamily,\"font-size\":t.fontSize,\"font-weight\":t.fontWeight},k.isNil);return{input:e(t.default),\".invalid\":e(t.error),\":focus\":e(t.focus)}}mapFieldType(t){switch(t){case\"number\":return this.type===Gt.StoredCardVerification?i.CardNumberVerification:i.CardNumber;case\"expirationDate\":return i.CardExpiry;case\"cvv\":return this.type===Gt.StoredCardVerification?i.CardCodeVerification:i.CardCode;case\"cardholderName\":return i.CardName;default:throw new Error(\"Unexpected field type\")}}mapErrors(t){const e={};if(t)for(const[n,r]of Object.entries(t))if(r&&this.isValidParam(n)){const{isValid:t,isEmpty:i,isPotentiallyValid:o}=r;e[n]={isValid:t,isEmpty:i,isPotentiallyValid:o}}return e}mapValidationErrors(t){return Object.keys(t).reduce((e,n)=>{var r;return Object.assign(Object.assign({},e),{[this.mapFieldType(n)]:(null===(r=t[n])||void 0===r?void 0:r.isValid)?void 0:[this.createInvalidError(this.mapFieldType(n))]})},{})}mapTokenizeError(t,e=!1){var n,r;if(\"HOSTED_FIELDS_FIELDS_EMPTY\"===t.code){const t=[this.createRequiredError(this.mapFieldType(\"cvv\"))];return e?{[this.mapFieldType(\"cvv\")]:t}:{[this.mapFieldType(\"cvv\")]:t,[this.mapFieldType(\"expirationDate\")]:[this.createRequiredError(this.mapFieldType(\"expirationDate\"))],[this.mapFieldType(\"number\")]:[this.createRequiredError(this.mapFieldType(\"number\"))],[this.mapFieldType(\"cardholderName\")]:[this.createRequiredError(this.mapFieldType(\"cardholderName\"))]}}return null===(r=null===(n=t.details)||void 0===n?void 0:n.invalidFieldKeys)||void 0===r?void 0:r.reduce((t,e)=>{const n=this.mapFieldType(e);return Object.assign(Object.assign({},t),{[n]:[this.createInvalidError(n)]})},{})}createRequiredError(t){var e;return{fieldType:t,message:null!==(e={[i.CardCode]:\"CVV is required\",[i.CardCodeVerification]:\"CVV is required\",[i.CardNumber]:\"Credit card number is required\",[i.CardNumberVerification]:\"Credit card number is required\",[i.CardExpiry]:\"Expiration date is required\",[i.CardName]:\"Full name is required\"}[t])&&void 0!==e?e:\"Field is required\",type:\"required\"}}createInvalidError(t){var e,n,r,o;const a={[i.CardCode]:{message:\"Invalid card code\",type:\"invalid_card_code\"},[i.CardCodeVerification]:{message:\"Invalid card code\",type:\"invalid_card_code\"},[i.CardNumber]:{message:\"Invalid card number\",type:\"invalid_card_number\"},[i.CardNumberVerification]:{message:\"Invalid card number\",type:\"invalid_card_number\"},[i.CardExpiry]:{message:\"Invalid card expiry\",type:\"invalid_card_expiry\"},[i.CardName]:{message:\"Invalid card name\",type:\"invalid_card_name\"}};return{fieldType:t,message:null!==(n=null===(e=a[t])||void 0===e?void 0:e.message)&&void 0!==n?n:\"Invalid field\",type:null!==(o=null===(r=a[t])||void 0===r?void 0:r.type)&&void 0!==o?o:\"invalid\"}}isValidForm(t){return Object.keys(t.fields).every(e=>{var n;return null===(n=t.fields[e])||void 0===n?void 0:n.isValid})}isValidParam(t){return[\"number\",\"cvv\",\"expirationDate\",\"postalCode\",\"cardholderName\",\"cardType\"].includes(t)}}const Kt=x(t=>{const e=window,n=new A(t),r=new _((0,o.vQ)(),e,n),i=new nt(r,e),a=new Jt(r,n);return new Ht(t,i,a)},[{id:\"braintree\"}]);var Qt=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class Zt{constructor(t,e,n,r){this.paymentIntegrationService=t,this.formPoster=e,this.braintreeIntegrationService=n,this.braintreeHostWindow=r}initialize(t){return Qt(this,void 0,void 0,function*(){const{braintreepaypal:e,methodId:n}=t,{container:r,onError:i}=e||{};if(!n)throw new T('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!e)throw new T('Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.');if(!r)throw new T('Unable to initialize payment because \"options.braintreepaypal.container\" argument is not provided.');let o,a=this.paymentIntegrationService.getState();try{if(o=a.getPaymentMethodOrThrow(n),!o.clientToken)throw new z(j.MissingPaymentToken)}catch(t){a=yield this.paymentIntegrationService.loadPaymentMethod(n),o=a.getPaymentMethodOrThrow(n)}const{clientToken:s,config:u,initializationData:c}=o,{paymentButtonStyles:l}=c||{},{checkoutTopButtonStyles:d}=l||{};if(!s||!c)throw new z(j.MissingPaymentMethod);const h={currency:a.getCartOrThrow().currency.code,intent:c.intent,isCreditEnabled:c.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(h,t=>{this.renderPayPalButton(t,e,n,Boolean(u.testMode),d)},t=>this.handleError(t,r,i))})}deinitialize(){return Qt(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}signIn(t,e){return Qt(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(t,e)})}signOut(t){return Qt(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(t)})}executePaymentMethodCheckout(t){var e;return null===(e=null==t?void 0:t.continueWithCheckoutCallback)||void 0===e||e.call(t),Promise.resolve()}renderPayPalButton(t,e,n,r,i){const{container:o,onClick:a=k.noop}=e,{paypal:s}=this.braintreeHostWindow,u=null==s?void 0:s.FUNDING.PAYPAL;if(s&&u){const c=s.Buttons({env:this.braintreeIntegrationService.getBraintreeEnv(r),fundingSource:u,style:Object.assign(Object.assign({},i),{height:40}),createOrder:()=>this.setupPayment(t,e,n),onApprove:r=>this.tokenizePayment(r,t,n,e),onClick:a});c.isEligible()&&c.render(`#${o}`)}else this.braintreeIntegrationService.removeElement(o)}setupPayment(t,e,n){var r;return Qt(this,void 0,void 0,function*(){try{yield this.paymentIntegrationService.loadDefaultCheckout();const e=this.paymentIntegrationService.getState(),i=e.getCheckoutOrThrow().outstandingBalance,o=e.getCartOrThrow().currency.code,a=e.getCustomer(),s=e.getPaymentMethodOrThrow(n),u=null==a?void 0:a.addresses[0],c=u?this.braintreeIntegrationService.mapToBraintreeShippingAddressOverride(u):void 0;return yield t.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:c,amount:i,currency:o,offerCredit:!1,intent:null===(r=s.initializationData)||void 0===r?void 0:r.intent})}catch(t){const{container:n,onError:r}=e;this.handleError(t,n,r)}})}tokenizePayment(t,e,n,r){return Qt(this,void 0,void 0,function*(){try{const{deviceData:r}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),i=yield e.tokenizePayment(t),{details:o,nonce:a}=i,s=this.braintreeIntegrationService.mapToLegacyBillingAddress(o),u=this.braintreeIntegrationService.mapToLegacyShippingAddress(o);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:n,action:\"set_external_checkout\",nonce:a,device_data:r,billing_address:JSON.stringify(s),shipping_address:JSON.stringify(u)}),i}catch(t){const{container:e,onError:n}=r;this.handleError(t,e,n)}})}handleError(t,e,n){if(this.braintreeIntegrationService.removeElement(e),!n||!P(t))throw t;n(t)}}const Xt=x(t=>{const e=window,n=new A(t),r=new nt(new _((0,o.vQ)(),e,n),e);return new Zt(t,(0,Dt.createFormPoster)(),r,e)},[{id:\"braintreepaypal\"}]);var te=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class ee{constructor(t,e,n,r){this.paymentIntegrationService=t,this.formPoster=e,this.braintreeIntegrationService=n,this.braintreeHostWindow=r}initialize(t){return te(this,void 0,void 0,function*(){const{braintreepaypalcredit:e,methodId:n}=t,{container:r,onError:i}=e||{};if(!n)throw new T('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!e)throw new T('Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.');if(!r)throw new T('Unable to initialize payment because \"options.braintreepaypalcredit.container\" argument is not provided.');let o,a=this.paymentIntegrationService.getState();try{if(o=a.getPaymentMethodOrThrow(n),!o.clientToken)throw new z(j.MissingPaymentToken)}catch(t){a=yield this.paymentIntegrationService.loadPaymentMethod(n),o=a.getPaymentMethodOrThrow(n)}const{clientToken:s,config:u,initializationData:c}=o,{paymentButtonStyles:l}=c||{},{checkoutTopButtonStyles:d}=l||{};if(!s||!c)throw new z(j.MissingPaymentMethod);const h={currency:a.getCartOrThrow().currency.code,intent:c.intent,isCreditEnabled:c.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(h,t=>{this.renderPayPalButton(t,e,n,Boolean(u.testMode),Object.assign(Object.assign({},d),{height:40}))},t=>this.handleError(t,r,i))})}deinitialize(){return te(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}signIn(t,e){return te(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(t,e)})}signOut(t){return te(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(t)})}executePaymentMethodCheckout(t){var e;return null===(e=null==t?void 0:t.continueWithCheckoutCallback)||void 0===e||e.call(t),Promise.resolve()}renderPayPalButton(t,e,n,r,i){const{container:o,onClick:a=k.noop}=e,{paypal:s}=this.braintreeHostWindow;let u=!1;s&&[s.FUNDING.PAYLATER,s.FUNDING.CREDIT].forEach(c=>{if(!u){const l=s.Buttons({env:r?\"sandbox\":\"production\",fundingSource:c,style:i,createOrder:()=>this.setupPayment(t,e,n),onApprove:r=>this.tokenizePayment(r,t,n,e),onClick:a});l.isEligible()&&(l.render(`#${o}`),u=!0)}}),s&&u||this.braintreeIntegrationService.removeElement(o)}setupPayment(t,e,n){var r;return te(this,void 0,void 0,function*(){try{yield this.paymentIntegrationService.loadDefaultCheckout();const e=this.paymentIntegrationService.getState(),i=e.getCheckoutOrThrow().outstandingBalance,o=e.getCartOrThrow().currency.code,a=e.getCustomer(),s=e.getPaymentMethodOrThrow(n),u=null==a?void 0:a.addresses[0],c=u?this.braintreeIntegrationService.mapToBraintreeShippingAddressOverride(u):void 0;return yield t.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:c,amount:i,currency:o,offerCredit:!0,intent:null===(r=s.initializationData)||void 0===r?void 0:r.intent})}catch(t){const{container:n,onError:r}=e;this.handleError(t,n,r)}})}tokenizePayment(t,e,n,r){return te(this,void 0,void 0,function*(){try{const{deviceData:r}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),i=yield e.tokenizePayment(t),{details:o,nonce:a}=i,s=this.braintreeIntegrationService.mapToLegacyBillingAddress(o),u=this.braintreeIntegrationService.mapToLegacyShippingAddress(o);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:n,action:\"set_external_checkout\",nonce:a,device_data:r,billing_address:JSON.stringify(s),shipping_address:JSON.stringify(u)}),i}catch(t){const{container:e,onError:n}=r;this.handleError(t,e,n)}})}handleError(t,e,n){if(this.braintreeIntegrationService.removeElement(e),!n||!P(t))throw t;n(t)}}const ne=x(t=>{const e=window,n=new A(t),r=new nt(new _((0,o.vQ)(),e,n),e);return new ee(t,(0,Dt.createFormPoster)(),r,e)},[{id:\"braintreepaypalcredit\"}]);var re=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class ie{constructor(t,e){this.paymentIntegrationService=t,this.braintreeFastlaneUtils=e,this.isAcceleratedCheckoutEnabled=!1}initialize({methodId:t,braintreefastlane:e}){var n;return re(this,void 0,void 0,function*(){if(!t)throw new T('Unable to proceed because \"methodId\" argument is not provided.');const r=yield this.getValidPaymentMethodOrThrow(t),{isAcceleratedCheckoutEnabled:i,isFastlaneStylingEnabled:o}=r.initializationData||{},a=o?null===(n=r.initializationData)||void 0===n?void 0:n.fastlaneStyles:void 0;this.isAcceleratedCheckoutEnabled=!!i;try{if(this.isAcceleratedCheckoutEnabled){const t=kt(a,null==e?void 0:e.styles);yield this.braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow(r.id,t)}}catch(t){}return Promise.resolve()})}deinitialize(){return re(this,void 0,void 0,function*(){return Promise.resolve()})}signIn(t,e){return re(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(t,e)})}signOut(t){return re(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(t)})}executePaymentMethodCheckout(t){return re(this,void 0,void 0,function*(){const{checkoutPaymentMethodExecuted:e,continueWithCheckoutCallback:n}=t||{};if(\"function\"!=typeof n)throw new T('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');const r=this.paymentIntegrationService.getState().getCustomerOrThrow();if(this.isAcceleratedCheckoutEnabled&&r.isGuest){const t=yield this.shouldRunAuthenticationFlow();e&&\"function\"==typeof e&&e(),t&&(yield this.braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow(void 0,!0))}n()})}shouldRunAuthenticationFlow(){var t;return re(this,void 0,void 0,function*(){const e=\"braintreeacceleratedcheckout\";try{yield this.paymentIntegrationService.loadPaymentMethod(e);const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e);return(null===(t=n.initializationData)||void 0===t?void 0:t.shouldRunAcceleratedCheckout)||!1}catch(t){return!1}})}getValidPaymentMethodOrThrow(t){return re(this,void 0,void 0,function*(){let e=t;try{yield this.paymentIntegrationService.loadPaymentMethod(e)}catch(n){e=\"braintree\"===t?\"braintreeacceleratedcheckout\":\"braintree\",yield this.paymentIntegrationService.loadPaymentMethod(e)}return this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e)})}}const oe=x(t=>{const e=window,n=new A(t),r=new nt(new _((0,o.vQ)(),e,n),e),i=new Nt(t,r);return new ie(t,i)},[{id:\"braintreeacceleratedcheckout\"},{id:\"braintree\"}]);class ae extends a{constructor(t){super(t||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var se=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class ue{constructor(t,e,n){this.paymentIntegrationService=t,this.formPoster=e,this.braintreeSdk=n,this.buttonClassName=\"visa-checkout-wrapper\",this.onError=k.noop}initialize(t){return se(this,void 0,void 0,function*(){const{braintreevisacheckout:e,methodId:n}=t;if(!n)throw new T('Unable to proceed because \"methodId\" argument is not provided.');if(!e)throw new T('Unable to proceed because \"options.braintreevisacheckout\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const r=this.paymentIntegrationService.getState(),i=r.getCheckoutOrThrow(),{clientToken:o,config:a}=r.getPaymentMethodOrThrow(n),s=r.getStoreConfigOrThrow();if(!o)throw new z(j.MissingPaymentMethod);this.braintreeSdk.initialize(o);const u=yield this.braintreeSdk.getBraintreeVisaCheckout(),c=yield this.braintreeSdk.getVisaCheckoutSdk(a.testMode),{container:l,onError:d}=e;this.onError=d||k.noop;const h=u.createInitOptions({paymentRequest:{currencyCode:s.currency.code,subtotal:String(i.subtotal)},settings:{locale:s.storeProfile.storeLanguage,shipping:{collectShipping:!0}}}),f=this.createSignInButton(l,this.buttonClassName);yield c.init(h),c.on(\"payment.success\",t=>this.tokenizePayment(u,t).then(()=>this.paymentIntegrationService.loadCheckout()).catch(t=>this.handleError(t))),c.on(\"payment.error\",(t,e)=>this.handleError(e)),f.style.visibility=\"visible\"})}deinitialize(){return se(this,void 0,void 0,function*(){yield this.braintreeSdk.deinitialize()})}signIn(){throw new ae('In order to sign in via VisaCheckout, the shopper must click on \"Visa Checkout\" button.')}signOut(t){return se(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(t),Promise.resolve()})}executePaymentMethodCheckout(t){var e;return null===(e=null==t?void 0:t.continueWithCheckoutCallback)||void 0===e||e.call(t),Promise.resolve()}tokenizePayment(t,e){return se(this,void 0,void 0,function*(){return Promise.all([t.tokenize(e),this.braintreeSdk.getDataCollectorOrThrow()]).then(([t,e])=>{const n=this.paymentIntegrationService.getState(),r=n.getShippingAddress(),i=n.getBillingAddress(),{shippingAddress:o=this.mapToVisaCheckoutAddress(r),billingAddress:a=this.mapToVisaCheckoutAddress(i)}=t;return this.postForm(Object.assign(Object.assign({},t),{shippingAddress:o,billingAddress:a}),e)})})}postForm(t,e){const{userData:n,billingAddress:r,shippingAddress:i,details:o}=t,{userEmail:a}=n,{deviceData:s}=e;return this.formPoster.postForm(\"/checkout.php\",{payment_type:t.type,nonce:t.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,r)),shipping_address:JSON.stringify(this.getAddress(a,i))})}mapToVisaCheckoutAddress(t){return t?{firstName:t.firstName,lastName:t.lastName,phoneNumber:t.phone,streetAddress:t.address1,extendedAddress:t.address2,locality:t.city,region:t.stateOrProvinceCode,countryCode:t.countryCode,postalCode:t.postalCode}:{}}getAddress(t,e={}){return{email:t,first_name:e.firstName,last_name:e.lastName,phone_number:e.phoneNumber,address_line_1:e.streetAddress,address_line_2:e.extendedAddress,city:e.locality,state:e.region,country_code:e.countryCode,postal_code:e.postalCode}}createSignInButton(t,e){const n=document.querySelector(`#${t}`);if(!n)throw new Error(\"Unable to proceed because the provided container ID is not valid.\");return this.insertVisaCheckoutButton(n,e)}insertVisaCheckoutButton(t,e){const n=document.createElement(\"div\");return n.style.display=\"flex\",n.style.flexDirection=\"column\",n.style.visibility=\"hidden\",n.style.width=\"max-content\",n.className=e,n.innerHTML='\\n            <img\\n                alt=\"Visa Checkout\"\\n                class=\"v-button\"\\n                role=\"button\"\\n                src=\"https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178\"\\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>',t.appendChild(n),n}handleError(t){if(\"function\"!=typeof this.onError)throw t;this.onError(t)}}const ce=x(t=>{const e=window,n=new A(t),r=new O(new _((0,o.vQ)(),e,n));return new ue(t,(0,Dt.createFormPoster)(),r)},[{id:\"braintreevisacheckout\"}]);class le extends a{constructor(t){super(t||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}function de(t){const{color:e,fundingicons:n,height:r=40,layout:i,shape:o,size:a,tagline:s}=t||{},u={color:e,fundingicons:n,height:he(r),layout:i,shape:o||\"rect\",size:a,tagline:s};return(0,k.omitBy)(u,k.isNil)}function he(t){const e=Number(t);return!e||Number.isNaN(e)?40:e>55?55:e<25?25:e}var fe=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class pe{constructor(t,e,n,r){this.paymentIntegrationService=t,this.formPoster=e,this.braintreeIntegrationService=n,this.braintreeHostWindow=r}initialize(t){return fe(this,void 0,void 0,function*(){const{braintreepaypal:e,containerId:n,methodId:r}=t;if(!r)throw new T('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new T('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!e)throw new T('Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.');let i,o=this.paymentIntegrationService.getState();if(e.buyNowInitializeOptions){if(!e.currencyCode)throw new T('Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.');i=e.currencyCode}else yield this.paymentIntegrationService.loadDefaultCheckout(),o=this.paymentIntegrationService.getState(),i=o.getCartOrThrow().currency.code;const a=o.getPaymentMethodOrThrow(r),{clientToken:s,config:u,initializationData:c}=a;if(!s||!c)throw new z(j.MissingPaymentMethod);const l={currency:i,intent:c.intent,isCreditEnabled:c.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(l,t=>{this.renderPayPalButton(t,e,n,r,!!u.testMode)},t=>this.handleError(t,n,e.onError))})}deinitialize(){return fe(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}renderPayPalButton(t,e,n,r,i){const{style:o,shouldProcessPayment:a,onAuthorizeError:s,onEligibilityFailure:u}=e,{paypal:c}=this.braintreeHostWindow;if(c){const l=c.Buttons({env:i?\"sandbox\":\"production\",fundingSource:c.FUNDING.PAYPAL,style:de(o),createOrder:()=>this.setupPayment(t,e,r),onApprove:e=>this.tokenizePayment(e,t,r,a,s)});l.isEligible()?l.render(`#${n}`):u&&\"function\"==typeof u&&u()}else this.braintreeIntegrationService.removeElement(n)}setupPayment(t,e,n){var r;return fe(this,void 0,void 0,function*(){const{onPaymentError:i,shippingAddress:o,buyNowInitializeOptions:s}=e;try{const i=\"function\"==typeof(null==s?void 0:s.getBuyNowCartRequestBody)?yield this.createBuyNowCart(s.getBuyNowCartRequestBody()):void 0;this.buyNowCartId=null==i?void 0:i.id;const a=this.paymentIntegrationService.getState(),u=a.getCustomer(),c=a.getPaymentMethodOrThrow(n),l=i?i.cartAmount:a.getCartOrThrow().cartAmount,d=i?e.currencyCode:a.getCartOrThrow().currency.code,h=o||(null==u?void 0:u.addresses[0]),f=h?lt(h):void 0;return yield t.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:f,amount:l,currency:d,offerCredit:!1,intent:null===(r=c.initializationData)||void 0===r?void 0:r.intent})}catch(t){throw i&&(P(t)||t instanceof a)&&i(t),t}})}tokenizePayment(t,e,n,r,i){return fe(this,void 0,void 0,function*(){try{const{deviceData:i}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),o=yield e.tokenizePayment(t),{details:a,nonce:s}=o,u=this.braintreeIntegrationService.mapToLegacyBillingAddress(a),c=this.braintreeIntegrationService.mapToLegacyShippingAddress(a);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",provider:n,action:r?\"process_payment\":\"set_external_checkout\",nonce:s,device_data:i,billing_address:JSON.stringify(u),shipping_address:JSON.stringify(c)},this.buyNowCartId&&{cart_id:this.buyNowCartId})),o}catch(t){throw i&&(P(t)||t instanceof a)&&i(t),t}})}createBuyNowCart(t){return fe(this,void 0,void 0,function*(){if(!t)throw new z(j.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(t){throw new le}})}handleError(t,e,n){if(this.braintreeIntegrationService.removeElement(e),!n||!P(t))throw t;n(t)}}const ye=x(t=>{const e=window,n=new A(t),r=new nt(new _((0,o.vQ)(),e,n),e);return new pe(t,(0,Dt.createFormPoster)(),r,e)},[{id:\"braintreepaypal\"}]);var ve=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class ge{constructor(t,e,n,r){this.paymentIntegrationService=t,this.formPoster=e,this.braintreeIntegrationService=n,this.braintreeHostWindow=r}initialize(t){return ve(this,void 0,void 0,function*(){const{braintreepaypalcredit:e,containerId:n,methodId:r}=t;if(!r)throw new T('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new T('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!e)throw new T('Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.');let i,o=this.paymentIntegrationService.getState();if(e.buyNowInitializeOptions){if(!e.currencyCode)throw new T('Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.');i=e.currencyCode}else yield this.paymentIntegrationService.loadDefaultCheckout(),o=this.paymentIntegrationService.getState(),i=o.getCartOrThrow().currency.code;const a=o.getPaymentMethodOrThrow(r),{clientToken:s,config:u,initializationData:c}=a;if(!s||!c)throw new z(j.MissingPaymentMethod);const l={currency:i,intent:c.intent,isCreditEnabled:c.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(l,t=>{this.renderPayPalButton(t,e,n,r,!!u.testMode)},t=>this.handleError(t,n,e.onError))})}deinitialize(){return ve(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}renderPayPalButton(t,e,n,r,i){const{style:o,shouldProcessPayment:a,onAuthorizeError:s,onEligibilityFailure:u}=e,{paypal:c}=this.braintreeHostWindow;let l=!1;c&&[c.FUNDING.PAYLATER,c.FUNDING.CREDIT].forEach(d=>{const h=d===c.FUNDING.CREDIT?Object.assign({label:Z.CREDIT},de(o)):de(o);if(!l){const o=c.Buttons({env:i?\"sandbox\":\"production\",fundingSource:d,style:h,createOrder:()=>this.setupPayment(t,e,r),onApprove:e=>this.tokenizePayment(e,t,r,a,s)});o.isEligible()?(o.render(`#${n}`),l=!0):c.FUNDING.CREDIT&&u&&\"function\"==typeof u&&u()}}),c&&l||this.braintreeIntegrationService.removeElement(n)}setupPayment(t,e,n){var r;return ve(this,void 0,void 0,function*(){const{onPaymentError:i,shippingAddress:o,buyNowInitializeOptions:s}=e;try{const i=\"function\"==typeof(null==s?void 0:s.getBuyNowCartRequestBody)?yield this.createBuyNowCart(s.getBuyNowCartRequestBody()):void 0;this.buyNowCartId=null==i?void 0:i.id;const a=this.paymentIntegrationService.getState(),u=a.getCustomer(),c=a.getPaymentMethodOrThrow(n),l=i?i.cartAmount:a.getCartOrThrow().cartAmount,d=i?e.currencyCode:a.getCartOrThrow().currency.code,h=o||(null==u?void 0:u.addresses[0]),f=h?lt(h):void 0;return yield t.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:f,amount:l,currency:d,offerCredit:!0,intent:null===(r=c.initializationData)||void 0===r?void 0:r.intent})}catch(t){throw i&&(P(t)||t instanceof a)&&i(t),t}})}tokenizePayment(t,e,n,r,i){return ve(this,void 0,void 0,function*(){try{const{deviceData:i}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),o=yield e.tokenizePayment(t),{details:a,nonce:s}=o,u=this.braintreeIntegrationService.mapToLegacyBillingAddress(a),c=this.braintreeIntegrationService.mapToLegacyShippingAddress(a);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",provider:n,action:r?\"process_payment\":\"set_external_checkout\",nonce:s,device_data:i,billing_address:JSON.stringify(u),shipping_address:JSON.stringify(c)},this.buyNowCartId&&{cart_id:this.buyNowCartId})),o}catch(t){throw i&&(P(t)||t instanceof a)&&i(t),t}})}createBuyNowCart(t){return ve(this,void 0,void 0,function*(){if(!t)throw new z(j.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(t){throw new le}})}handleError(t,e,n){if(this.braintreeIntegrationService.removeElement(e),!n||!P(t))throw t;n(t)}}const me=x(t=>{const e=window,n=new A(t),r=new nt(new _((0,o.vQ)(),e,n),e);return new ge(t,(0,Dt.createFormPoster)(),r,e)},[{id:\"braintreepaypalcredit\"}]);var be=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class we{constructor(t,e,n){this.paymentIntegrationService=t,this.formPoster=e,this.braintreeSdk=n}initialize(t){return be(this,void 0,void 0,function*(){const{containerId:e,methodId:n}=t;if(!n)throw new T('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!e)throw new T('Unable to initialize payment because \"options.containerId\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const r=this.paymentIntegrationService.getState(),{clientToken:i,initializationData:o,config:a}=r.getPaymentMethodOrThrow(n);if(!i||!o)throw new z(j.MissingPaymentMethod);this.braintreeSdk.initialize(i);const s=yield this.braintreeSdk.getBraintreeVisaCheckout(),{currency:{code:u},cartAmount:c}=r.getCartOrThrow(),l=yield this.braintreeSdk.getVisaCheckoutSdk(a.testMode),d=s.createInitOptions({paymentRequest:{currencyCode:u,subtotal:String(c)},settings:{shipping:{collectShipping:!0}}});this.createSignInButton(e),yield l.init(d),l.on(\"payment.success\",t=>be(this,void 0,void 0,function*(){yield this.paymentSuccess(s,t)}))})}deinitialize(){return Promise.resolve()}paymentSuccess(t,e){return be(this,void 0,void 0,function*(){return Promise.all([t.tokenize(e),this.braintreeSdk.getDataCollectorOrThrow()]).then(([t,e])=>{const n=this.paymentIntegrationService.getState(),r=n.getShippingAddress(),i=n.getBillingAddress(),{shippingAddress:o=this.toVisaCheckoutAddress(r),billingAddress:a=this.toVisaCheckoutAddress(i)}=t;return this.postForm(Object.assign(Object.assign({},t),{shippingAddress:o,billingAddress:a}),e)})})}postForm(t,e){const{userData:n,billingAddress:r,shippingAddress:i,details:o}=t,{userEmail:a}=n,{deviceData:s}=e;return this.formPoster.postForm(\"/checkout.php\",{payment_type:t.type,nonce:t.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,r)),shipping_address:JSON.stringify(this.getAddress(a,i))})}toVisaCheckoutAddress(t){return t?{firstName:t.firstName,lastName:t.lastName,phoneNumber:t.phone,streetAddress:t.address1,extendedAddress:t.address2,locality:t.city,region:t.stateOrProvinceCode,countryCode:t.countryCode,postalCode:t.postalCode}:{}}getAddress(t,e={}){return{email:t,first_name:e.firstName,last_name:e.lastName,phone_number:e.phoneNumber,address_line_1:e.streetAddress,address_line_2:e.extendedAddress,city:e.locality,state:e.region,country_code:e.countryCode,postal_code:e.postalCode}}createSignInButton(t){const e=document.querySelector(`#${t}`);if(!e)throw new Error(\"Need a container to place the button\");return this.insertVisaCheckoutButton(e)}insertVisaCheckoutButton(t){const e=document.createElement(\"div\");return e.style.display=\"flex\",e.style.flexDirection=\"column\",e.style.alignItems=\"flex-end\",e.innerHTML='\\n            <img\\n                alt=\"Visa Checkout\"\\n                class=\"v-button\"\\n                role=\"button\"\\n                src=\"https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178\"\\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>',t.appendChild(e),e}}const _e=x(t=>{const e=window,n=new A(t),r=new O(new _((0,o.vQ)(),e,n));return new we(t,(0,Dt.createFormPoster)(),r)},[{id:\"braintreevisacheckout\"}]);function Se(t){const{billingAddress:e,email:n,firstName:r,lastName:i,phone:o,shippingAddress:a}=t,s=e||a;return{email:n,first_name:r,last_name:i,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}function Ce(t){const{email:e,phone:n,shippingAddress:r}=t,i=(null==r?void 0:r.recipientName)||\"\",[o,a]=i.split(\" \");return{email:e,first_name:o||\"\",last_name:a||\"\",phone_number:n,address_line_1:null==r?void 0:r.line1,address_line_2:null==r?void 0:r.line2,city:null==r?void 0:r.city,state:null==r?void 0:r.state,country_code:null==r?void 0:r.countryCode,postal_code:null==r?void 0:r.postalCode}}var Pe=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};const Ie=t=>{const{color:e,height:n}=t;return{backgroundColor:(r=e||\"\",r===Q.WHITE?\"#FFFFFF\":\"#3D95CE\"),backgroundPosition:\"50% 50%\",backgroundSize:\"80px auto\",backgroundImage:`url(\"/app/assets/img/payment-providers/venmo-logo-${e===Q.WHITE?Q.BLUE:Q.WHITE}.svg\")`,backgroundRepeat:\"no-repeat\",borderRadius:\"4px\",cursor:\"pointer\",transition:\"0.2s ease\",minHeight:`${n||40}px`,minWidth:\"150px\",height:\"100%\",width:\"100%\",border:e===Q.WHITE?\"1px solid black\":\"none\"};var r};class Oe{constructor(t,e,n){this.paymentIntegrationService=t,this.formPoster=e,this.braintreeSdk=n,this.onError=k.noop}initialize(t){return Pe(this,void 0,void 0,function*(){const{braintreevenmo:e,containerId:n,methodId:r}=t;if(!r)throw new T('Unable to initialize payment because \"options.methodId\" argument is not provided.');const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r),{clientToken:o,initializationData:a}=i,{paymentButtonStyles:s}=a,{cartButtonStyles:u}=s||{},c=(null==e?void 0:e.style)||u;if(!o||!a)throw new z(j.MissingPaymentMethod);if(!n)throw new T('Unable to initialize payment because \"options.containerId\" argument is not provided.');yield this.paymentIntegrationService.loadDefaultCheckout(),this.onError=(null==e?void 0:e.onError)||this.handleError,this.braintreeSdk.initialize(o);try{const t=yield this.braintreeSdk.getVenmoCheckoutOrThrow();this.renderVenmoButton(t,n,null==e?void 0:e.buyNowInitializeOptions,c)}catch(t){(ct(t)||function(t){return t instanceof S}(t))&&this.handleInitializationVenmoError(t,n)}})}deinitialize(){return Pe(this,void 0,void 0,function*(){return yield this.braintreeSdk.deinitialize(),Promise.resolve()})}handleError(t){throw new Error(t.message)}createBuyNowCart(t){return Pe(this,void 0,void 0,function*(){if(\"function\"==typeof(null==t?void 0:t.getBuyNowCartRequestBody)){const e=null==t?void 0:t.getBuyNowCartRequestBody();if(!e)throw new z(j.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(e)}catch(t){throw new le}}})}handleInitializationVenmoError(t,e){return this.removeVenmoContainer(e),this.onError(t)}removeVenmoContainer(t){const e=document.getElementById(t);e&&e.remove()}renderVenmoButton(t,e,n,r){const i=document.getElementById(e),{color:o}=r||{};if(!i)throw new T(\"Unable to create wallet button without valid container ID.\");i.setAttribute(\"aria-label\",\"Venmo\"),Object.assign(i.style,Ie(r||{})),i.addEventListener(\"click\",()=>Pe(this,void 0,void 0,function*(){i.setAttribute(\"disabled\",\"true\");const e=yield this.createBuyNowCart(n);t.tokenize&&t.tokenize((t,n)=>Pe(this,void 0,void 0,function*(){i.removeAttribute(\"disabled\"),t&&this.onError(t),yield this.handlePostForm(n,null==e?void 0:e.id)}))})),o===Q.BLUE&&(i.addEventListener(\"mouseenter\",()=>{i.style.backgroundColor=\"#0a7fc2\"}),i.addEventListener(\"mouseleave\",()=>{i.style.backgroundColor=Ie(r||{}).backgroundColor}))}handlePostForm(t,e){return Pe(this,void 0,void 0,function*(){const{deviceData:n}=yield this.braintreeSdk.getDataCollectorOrThrow(),{nonce:r,details:i}=t;this.formPoster.postForm(\"/checkout.php\",Object.assign({nonce:r,provider:\"braintreevenmo\",payment_type:\"paypal\",device_data:n,action:\"set_external_checkout\",billing_address:JSON.stringify(Se(i)),shipping_address:JSON.stringify(Ce(i))},e&&{cart_id:e}))})}}const ke=x(t=>{const e=window,n=(0,o.vQ)(),r=new A(t),i=new _(n,e,r),a=new O(i);return new Oe(t,(0,Dt.createFormPoster)(),a)},[{id:\"braintreevenmo\"}])})(),module.exports=r})();\n//# sourceMappingURL=braintree.js.map"
  },
  {
    "path": "dist/cjs/integrations/cba-mpgs.js",
    "content": "(()=>{var t={4325(t,e,n){\"use strict\";n.d(e,{g:()=>i});var r=n(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(r.stringify(e))},t}()},321(t,e,n){\"use strict\";n.d(e,{A:()=>a});var r=n(168),i=n(1675),o=n(5861),u=n(4670);function a(t){return new u.A(new o.A,new i.A,r,t)}},6889(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(2024);function i(t){return new r.A(t)}},4043(t,e,n){\"use strict\";n.r(e),n.d(e,{RequestSender:()=>o.A,Timeout:()=>u.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),u=n(2024)},4843(t,e,n){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}n.d(e,{A:()=>r})},1675(t,e,n){\"use strict\";n.d(e,{A:()=>a});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,u=/application\\/x-www-form-urlencoded/;const a=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(e))return JSON.stringify(t.body);if(u.test(e))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,\"Content-Type\");return t&&o.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var n,i=e.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}()},5861(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||\"GET\",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),\"boolean\"==typeof n.credentials&&(t.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(n){t.setRequestHeader(n,e[n])})},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(r.stringify(e,{encode:n})):t},t}()},4670(t,e,n){\"use strict\";n.d(e,{A:()=>s});var r=n(1635),i=n(35),o=n.n(i),u=n(4325),a=n(4843),c=n(2024);const s=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new u.g}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(e,i){var u=function(){var u=n._payloadTransformer.toResponse(o);u.status>=200&&u.status<300?(n._cacheRequest(t,r,u),e(u)):i(u)};o.onload=u,o.onerror=u,o.onabort=u,o.ontimeout=u,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,a.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(n.headers[\"X-XSRF-TOKEN\"]=r),e&&e.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,e,n){\"use strict\";n.d(e,{A:()=>r});const r=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,e,n){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var n=t[e];return\"string\"==typeof n?\"\".concat(e,\"=\").concat(encodeURIComponent(n)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(e,{A:()=>r})},5889(t,e,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),u=n(3814);function a(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}function s(t,e){return e.decode?i(t):t}function f(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?f(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function l(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function p(t){const e=(t=l(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function h(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function d(t,e){a((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,n,r)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case\"bracket\":return(t,n,r)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"comma\":case\"separator\":return(e,n,r)=>{const i=\"string\"==typeof n&&n.includes(t.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&s(n,t).includes(t.arrayFormatSeparator);n=o?s(n,t):n;const u=i||o?n.split(t.arrayFormatSeparator).map(e=>s(e,t)):null===n?n:s(n,t);r[e]=u};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[].concat(n[t],e):n[t]=e}}}(e),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,u]=o(e.decode?i.replace(/\\+/g,\" \"):i,\"=\");u=void 0===u?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?u:s(u,e),n(s(t,e),u,r)}for(const t of Object.keys(r)){const n=r[t];if(\"object\"==typeof n&&null!==n)for(const t of Object.keys(n))n[t]=h(n[t],e);else r[t]=h(n,e)}return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce((t,e)=>{const n=r[e];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?t[e]=f(n):t[e]=n,t},Object.create(null))}e.extract=p,e.parse=d,e.stringify=(t,e)=>{if(!t)return\"\";a((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const n=n=>e.skipNull&&null==t[n]||e.skipEmptyString&&\"\"===t[n],r=function(t){switch(t.arrayFormat){case\"index\":return e=>(n,r)=>{const i=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[\",i,\"]\"].join(\"\")]:[...n,[c(e,t),\"[\",c(i,t),\"]=\",c(r,t)].join(\"\")]};case\"bracket\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[]\"].join(\"\")]:[...n,[c(e,t),\"[]=\",c(r,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(n,r)=>null==r||0===r.length?n:0===n.length?[[c(e,t),\"=\",c(r,t)].join(\"\")]:[[n,c(r,t)].join(t.arrayFormatSeparator)];default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,c(e,t)]:[...n,[c(e,t),\"=\",c(r,t)].join(\"\")]}}(e),i={};for(const e of Object.keys(t))n(e)||(i[e]=t[e]);const o=Object.keys(i);return!1!==e.sort&&o.sort(e.sort),o.map(n=>{const i=t[n];return void 0===i?\"\":null===i?c(n,e):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):c(n,e)+\"=\"+c(i,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[n,r]=o(t,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:d(p(t),e)},e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:s(r,e)}:{})},e.stringifyUrl=(t,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=l(t.url).split(\"?\")[0]||\"\",i=e.extract(t.url),o=e.parse(i,{sort:!1}),u=Object.assign(o,t.query);let a=e.stringify(u,n);a&&(a=`?${a}`);let s=function(t){let e=\"\";const n=t.indexOf(\"#\");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(s=`#${c(t.fragmentIdentifier,n)}`),`${r}${a}${s}`},e.pick=(t,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:a}=e.parseUrl(t,r);return e.stringifyUrl({url:i,query:u(o,n),fragmentIdentifier:a},r)},e.exclude=(t,n,r)=>{const i=Array.isArray(n)?t=>!n.includes(t):(t,e)=>!n(t,e);return e.pick(t,i,r)}},5477(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement(\"link\");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=n},471(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(t,e,n){\"use strict\";e.vQ=void 0;n(4886),n(471);var r=n(5895);Object.defineProperty(e,\"vQ\",{enumerable:!0,get:function(){return r.default}});n(7995),n(9722),n(282)},4886(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var n=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),u=e||{},a=u.async,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(e){delete n._scripts[t],i(e)},o.async=c,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadScript(t,e)})).then(function(){})},t.prototype.preloadScript=function(t,e){var n=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(e||{}).prefetch,u=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(u)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=u,a.href=t,a.onload=function(){r()},a.onerror=function(){delete n._preloadedScripts[t],i()},document.head.appendChild(a)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadScript(t,e)})).then(function(){})},t}();e.default=n},7995(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var n=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),u=e||{},a=u.prepend,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onerror=function(e){delete n._stylesheets[t],i(e)},o.rel=\"stylesheet\",o.href=t,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadStylesheet(t,e)})).then(function(){})},t.prototype.preloadStylesheet=function(t,e){var n=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(e||{}).prefetch,u=void 0!==o&&o,a=u?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=u?\"prefetch\":\"preload\",c.href=t,c.onload=function(){r()},c.onerror=function(e){delete n._preloadedStylesheets[t],i(e)},document.head.appendChild(c)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadStylesheet(t,e)})).then(function(){})},t}();e.default=n},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+e+\")+\",\"gi\");function i(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],i(n),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var e=t.match(n)||[],r=1;r<e.length;r++)e=(t=i(e,r).join(\"\")).match(n)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(t);n;){try{e[n[0]]=decodeURIComponent(n[0])}catch(t){var i=o(n[0]);i!==n[0]&&(e[n[0]]=i)}n=r.exec(t)}e[\"%C2\"]=\"�\";for(var u=Object.keys(e),a=0;a<u.length;a++){var c=u[a];t=t.replace(new RegExp(c,\"g\"),e[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,e){for(var n={},r=Object.keys(t),i=Array.isArray(e),o=0;o<r.length;o++){var u=r[o],a=t[u];(i?-1!==e.indexOf(u):e(u,a,t))&&(n[u]=a)}return n}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(e,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var u=JSON.stringify(n);/^[\\{\\[]/.test(u)&&(n=u)}catch(t){}n=r.write?r.write(n,e):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in o)o[c]&&(a+=\"; \"+c,!0!==o[c]&&(a+=\"=\"+o[c].split(\";\")[0]));return document.cookie=e+\"=\"+n+a}}function u(t,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],u=0;u<o.length;u++){var a=o[u].split(\"=\"),c=a.slice(1).join(\"=\");n||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var s=e(a[0]);if(c=(r.read||r)(c,s)||e(c),n)try{c=JSON.parse(c)}catch(t){}if(i[s]=c,t===s)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return u(t,!1)},i.getJSON=function(t){return u(t,!0)},i.remove=function(e,n){o(e,\"\",t(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},35(t,e,n){t=n.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",u=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,s=/^(?:0|[1-9]\\d*)$/,f={};f[\"[object Float32Array]\"]=f[\"[object Float64Array]\"]=f[\"[object Int8Array]\"]=f[\"[object Int16Array]\"]=f[\"[object Int32Array]\"]=f[\"[object Uint8Array]\"]=f[\"[object Uint8ClampedArray]\"]=f[\"[object Uint16Array]\"]=f[\"[object Uint32Array]\"]=!0,f[o]=f[\"[object Array]\"]=f[\"[object ArrayBuffer]\"]=f[\"[object Boolean]\"]=f[\"[object DataView]\"]=f[\"[object Date]\"]=f[\"[object Error]\"]=f[u]=f[\"[object Map]\"]=f[\"[object Number]\"]=f[a]=f[\"[object RegExp]\"]=f[\"[object Set]\"]=f[\"[object String]\"]=f[\"[object WeakMap]\"]=!1;var l,p,h,d=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,v=\"object\"==typeof self&&self&&self.Object===Object&&self,_=d||v||Function(\"return this\")(),y=e&&!e.nodeType&&e,g=y&&t&&!t.nodeType&&t,m=g&&g.exports===y,b=m&&d.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),j=w&&w.isTypedArray,S=Array.prototype,x=Function.prototype,O=Object.prototype,A=_[\"__core-js_shared__\"],I=x.toString,E=O.hasOwnProperty,k=(l=/[^.]+$/.exec(A&&A.keys&&A.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",R=O.toString,P=I.call(Object),C=RegExp(\"^\"+I.call(E).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),z=m?_.Buffer:void 0,M=_.Symbol,T=_.Uint8Array,U=(z&&z.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(t){return p(h(t))}),F=Object.create,N=O.propertyIsEnumerable,D=S.splice,q=M?M.toStringTag:void 0,L=function(){try{var t=at(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),B=z?z.isBuffer:void 0,$=Math.max,W=Date.now,H=at(_,\"Map\"),G=at(Object,\"create\"),Z=function(){function t(){}return function(e){if(!mt(e))return{};if(F)return F(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function K(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function V(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function J(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function X(t){var e=this.__data__=new V(t);this.size=e.size}function Y(t,e,n){(void 0!==n&&!pt(t[e],n)||void 0===n&&!(e in t))&&et(t,e,n)}function Q(t,e,n){var r=t[e];E.call(t,e)&&pt(r,n)&&(void 0!==n||e in t)||et(t,e,n)}function tt(t,e){for(var n=t.length;n--;)if(pt(t[n][0],e))return n;return-1}function et(t,e,n){\"__proto__\"==e&&L?L(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}K.prototype.clear=function(){this.__data__=G?G(null):{},this.size=0},K.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},K.prototype.get=function(t){var e=this.__data__;if(G){var n=e[t];return n===r?void 0:n}return E.call(e,t)?e[t]:void 0},K.prototype.has=function(t){var e=this.__data__;return G?void 0!==e[t]:E.call(e,t)},K.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=G&&void 0===e?r:e,this},V.prototype.clear=function(){this.__data__=[],this.size=0},V.prototype.delete=function(t){var e=this.__data__,n=tt(e,t);return!(n<0||(n==e.length-1?e.pop():D.call(e,n,1),--this.size,0))},V.prototype.get=function(t){var e=this.__data__,n=tt(e,t);return n<0?void 0:e[n][1]},V.prototype.has=function(t){return tt(this.__data__,t)>-1},V.prototype.set=function(t,e){var n=this.__data__,r=tt(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},J.prototype.clear=function(){this.size=0,this.__data__={hash:new K,map:new(H||V),string:new K}},J.prototype.delete=function(t){var e=ut(this,t).delete(t);return this.size-=e?1:0,e},J.prototype.get=function(t){return ut(this,t).get(t)},J.prototype.has=function(t){return ut(this,t).has(t)},J.prototype.set=function(t,e){var n=ut(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},X.prototype.clear=function(){this.__data__=new V,this.size=0},X.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},X.prototype.get=function(t){return this.__data__.get(t)},X.prototype.has=function(t){return this.__data__.has(t)},X.prototype.set=function(t,e){var n=this.__data__;if(n instanceof V){var r=n.__data__;if(!H||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new J(r)}return n.set(t,e),this.size=n.size,this};function nt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":q&&q in Object(t)?function(t){var e=E.call(t,q),n=t[q];try{t[q]=void 0;var r=!0}catch(t){}var i=R.call(t);return r&&(e?t[q]=n:delete t[q]),i}(t):function(t){return R.call(t)}(t)}function rt(t){return bt(t)&&nt(t)==o}function it(t,e,n,r,i){t!==e&&function(t,e,n){for(var r=-1,i=Object(t),o=n(t),u=o.length;u--;){var a=o[++r];if(!1===e(i[a],a,i))break}}(e,function(o,u){if(i||(i=new X),mt(o))!function(t,e,n,r,i,o,u){var c=ft(t,n),s=ft(e,n),f=u.get(s);if(f)Y(t,n,f);else{var l,p,h,d,v,_=o?o(c,s,n+\"\",t,e,u):void 0,y=void 0===_;if(y){var g=dt(s),m=!g&&_t(s),b=!g&&!m&&wt(s);_=s,g||m||b?dt(c)?_=c:bt(v=c)&&vt(v)?_=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}(c):m?(y=!1,_=function(t){return t.slice()}(s)):b?(y=!1,d=new(h=(l=s).buffer).constructor(h.byteLength),new T(d).set(new T(h)),p=d,_=new l.constructor(p,l.byteOffset,l.length)):_=[]:function(t){if(!bt(t)||nt(t)!=a)return!1;var e=U(t);if(null===e)return!0;var n=E.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&I.call(n)==P}(s)||ht(s)?(_=c,ht(c)?_=function(t){return function(t,e,n){var r=!n;n||(n={});for(var i=-1,o=e.length;++i<o;){var u=e[i],a=void 0;void 0===a&&(a=t[u]),r?et(n,u,a):Q(n,u,a)}return n}(t,jt(t))}(c):mt(c)&&!yt(c)||(_=function(t){return\"function\"!=typeof t.constructor||st(t)?{}:Z(U(t))}(s))):y=!1}y&&(u.set(s,_),i(_,s,r,o,u),u.delete(s)),Y(t,n,_)}}(t,e,u,n,it,r,i);else{var c=r?r(ft(t,u),o,u+\"\",t,e,i):void 0;void 0===c&&(c=o),Y(t,u,c)}},jt)}var ot=L?function(t,e){return L(t,\"toString\",{configurable:!0,enumerable:!1,value:(n=e,function(){return n}),writable:!0});var n}:Ot;function ut(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function at(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!mt(t)||function(t){return!!k&&k in t}(t))&&(yt(t)?C:c).test(function(t){if(null!=t){try{return I.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(n)?n:void 0}function ct(t,e){var n=typeof t;return!!(e=e??i)&&(\"number\"==n||\"symbol\"!=n&&s.test(t))&&t>-1&&t%1==0&&t<e}function st(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||O)}function ft(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var lt=function(t){var e=0,n=0;return function(){var r=W(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ot);function pt(t,e){return t===e||t!=t&&e!=e}var ht=rt(function(){return arguments}())?rt:function(t){return bt(t)&&E.call(t,\"callee\")&&!N.call(t,\"callee\")},dt=Array.isArray;function vt(t){return null!=t&&gt(t.length)&&!yt(t)}var _t=B||function(){return!1};function yt(t){if(!mt(t))return!1;var e=nt(t);return e==u||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function mt(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=j?function(t){return function(e){return t(e)}}(j):function(t){return bt(t)&&gt(t.length)&&!!f[nt(t)]};function jt(t){return vt(t)?function(t,e){var n=dt(t),r=!n&&ht(t),i=!n&&!r&&_t(t),o=!n&&!r&&!i&&wt(t),u=n||r||i||o,a=u?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],c=a.length;for(var s in t)!e&&!E.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||ct(s,c))||a.push(s);return a}(t,!0):function(t){if(!mt(t))return function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}(t);var e=st(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&E.call(t,r))&&n.push(r);return n}(t)}var St,xt=(St=function(t,e,n){it(t,e,n)},function(t,e){return lt(function(t,e,n){return e=$(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=$(r.length-e,0),u=Array(o);++i<o;)u[i]=r[e+i];i=-1;for(var a=Array(e+1);++i<e;)a[i]=r[i];return a[e]=n(u),function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}(t,this,a)}}(t,e,Ot),t+\"\")}(function(t,e){var n=-1,r=e.length,i=r>1?e[r-1]:void 0,o=r>2?e[2]:void 0;for(i=St.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,e,n){if(!mt(n))return!1;var r=typeof e;return!!(\"number\"==r?vt(n)&&ct(e,n.length):\"string\"==r&&e in n)&&pt(n[e],t)}(e[0],e[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++n<r;){var u=e[n];u&&St(t,u,n)}return t}));function Ot(t){return t}t.exports=xt},9440(t,e,n){t=n.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,s=1/0,f=9007199254740991,l=NaN,p=4294967295,h=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",v=\"[object Array]\",_=\"[object Boolean]\",y=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",j=\"[object Number]\",S=\"[object Object]\",x=\"[object Promise]\",O=\"[object RegExp]\",A=\"[object Set]\",I=\"[object String]\",E=\"[object Symbol]\",k=\"[object WeakMap]\",R=\"[object ArrayBuffer]\",P=\"[object DataView]\",C=\"[object Float32Array]\",z=\"[object Float64Array]\",M=\"[object Int8Array]\",T=\"[object Int16Array]\",U=\"[object Int32Array]\",F=\"[object Uint8Array]\",N=\"[object Uint8ClampedArray]\",D=\"[object Uint16Array]\",q=\"[object Uint32Array]\",L=/\\b__p \\+= '';/g,B=/\\b(__p \\+=) '' \\+/g,$=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,W=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,G=RegExp(W.source),Z=RegExp(H.source),K=/<%-([\\s\\S]+?)%>/g,V=/<%([\\s\\S]+?)%>/g,J=/<%=([\\s\\S]+?)%>/g,X=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Y=/^\\w*$/,Q=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,et=RegExp(tt.source),nt=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,vt=/^0o[0-7]+$/i,_t=/^(?:0|[1-9]\\d*)$/,yt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",jt=\"\\\\u2700-\\\\u27bf\",St=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",xt=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ot=\"\\\\ufe0e\\\\ufe0f\",At=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",It=\"[\"+bt+\"]\",Et=\"[\"+At+\"]\",kt=\"[\"+wt+\"]\",Rt=\"\\\\d+\",Pt=\"[\"+jt+\"]\",Ct=\"[\"+St+\"]\",zt=\"[^\"+bt+At+Rt+jt+St+xt+\"]\",Mt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Tt=\"[^\"+bt+\"]\",Ut=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ft=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Nt=\"[\"+xt+\"]\",Dt=\"\\\\u200d\",qt=\"(?:\"+Ct+\"|\"+zt+\")\",Lt=\"(?:\"+Nt+\"|\"+zt+\")\",Bt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",$t=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Wt=\"(?:\"+kt+\"|\"+Mt+\")?\",Ht=\"[\"+Ot+\"]?\",Gt=Ht+Wt+\"(?:\"+Dt+\"(?:\"+[Tt,Ut,Ft].join(\"|\")+\")\"+Ht+Wt+\")*\",Zt=\"(?:\"+[Pt,Ut,Ft].join(\"|\")+\")\"+Gt,Kt=\"(?:\"+[Tt+kt+\"?\",kt,Ut,Ft,It].join(\"|\")+\")\",Vt=RegExp(\"['’]\",\"g\"),Jt=RegExp(kt,\"g\"),Xt=RegExp(Mt+\"(?=\"+Mt+\")|\"+Kt+Gt,\"g\"),Yt=RegExp([Nt+\"?\"+Ct+\"+\"+Bt+\"(?=\"+[Et,Nt,\"$\"].join(\"|\")+\")\",Lt+\"+\"+$t+\"(?=\"+[Et,Nt+qt,\"$\"].join(\"|\")+\")\",Nt+\"?\"+qt+\"+\"+Bt,Nt+\"+\"+$t,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Rt,Zt].join(\"|\"),\"g\"),Qt=RegExp(\"[\"+Dt+bt+wt+Ot+\"]\"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ne=-1,re={};re[C]=re[z]=re[M]=re[T]=re[U]=re[F]=re[N]=re[D]=re[q]=!0,re[d]=re[v]=re[R]=re[_]=re[P]=re[y]=re[g]=re[m]=re[w]=re[j]=re[S]=re[O]=re[A]=re[I]=re[k]=!1;var ie={};ie[d]=ie[v]=ie[R]=ie[P]=ie[_]=ie[y]=ie[C]=ie[z]=ie[M]=ie[T]=ie[U]=ie[w]=ie[j]=ie[S]=ie[O]=ie[A]=ie[I]=ie[E]=ie[F]=ie[N]=ie[D]=ie[q]=!0,ie[g]=ie[m]=ie[k]=!1;var oe={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ue=parseFloat,ae=parseInt,ce=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,se=\"object\"==typeof self&&self&&self.Object===Object&&self,fe=ce||se||Function(\"return this\")(),le=e&&!e.nodeType&&e,pe=le&&t&&!t.nodeType&&t,he=pe&&pe.exports===le,de=he&&ce.process,ve=function(){try{return pe&&pe.require&&pe.require(\"util\").types||de&&de.binding&&de.binding(\"util\")}catch(t){}}(),_e=ve&&ve.isArrayBuffer,ye=ve&&ve.isDate,ge=ve&&ve.isMap,me=ve&&ve.isRegExp,be=ve&&ve.isSet,we=ve&&ve.isTypedArray;function je(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Se(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];e(r,u,n(u),t)}return r}function xe(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function Oe(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function Ae(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function Ie(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var u=t[n];e(u,n,t)&&(o[i++]=u)}return o}function Ee(t,e){return!(null==t||!t.length)&&Ne(t,e,0)>-1}function ke(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function Re(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function Pe(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function Ce(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function ze(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function Me(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var Te=Be(\"length\");function Ue(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function Fe(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function Ne(t,e,n){return e==e?function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):Fe(t,qe,n)}function De(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function qe(t){return t!=t}function Le(t,e){var n=null==t?0:t.length;return n?He(t,e)/n:l}function Be(t){return function(e){return null==e?r:e[t]}}function $e(t){return function(e){return null==t?r:t[e]}}function We(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function He(t,e){for(var n,i=-1,o=t.length;++i<o;){var u=e(t[i]);u!==r&&(n=n===r?u:n+u)}return n}function Ge(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function Ze(t){return t?t.slice(0,ln(t)+1).replace(nt,\"\"):t}function Ke(t){return function(e){return t(e)}}function Ve(t,e){return Re(e,function(e){return t[e]})}function Je(t,e){return t.has(e)}function Xe(t,e){for(var n=-1,r=t.length;++n<r&&Ne(e,t[n],0)>-1;);return n}function Ye(t,e){for(var n=t.length;n--&&Ne(e,t[n],0)>-1;);return n}var Qe=$e({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tn=$e({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function en(t){return\"\\\\\"+oe[t]}function nn(t){return Qt.test(t)}function rn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function on(t,e){return function(n){return t(e(n))}}function un(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n];a!==e&&a!==u||(t[n]=u,o[i++]=n)}return o}function an(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function cn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function sn(t){return nn(t)?function(t){for(var e=Xt.lastIndex=0;Xt.test(t);)++e;return e}(t):Te(t)}function fn(t){return nn(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.split(\"\")}(t)}function ln(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}var pn=$e({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),hn=function t(e){var n,rt=(e=null==e?fe:hn.defaults(fe.Object(),e,hn.pick(fe,ee))).Array,bt=e.Date,wt=e.Error,jt=e.Function,St=e.Math,xt=e.Object,Ot=e.RegExp,At=e.String,It=e.TypeError,Et=rt.prototype,kt=jt.prototype,Rt=xt.prototype,Pt=e[\"__core-js_shared__\"],Ct=kt.toString,zt=Rt.hasOwnProperty,Mt=0,Tt=(n=/[^.]+$/.exec(Pt&&Pt.keys&&Pt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Ut=Rt.toString,Ft=Ct.call(xt),Nt=fe._,Dt=Ot(\"^\"+Ct.call(zt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),qt=he?e.Buffer:r,Lt=e.Symbol,Bt=e.Uint8Array,$t=qt?qt.allocUnsafe:r,Wt=on(xt.getPrototypeOf,xt),Ht=xt.create,Gt=Rt.propertyIsEnumerable,Zt=Et.splice,Kt=Lt?Lt.isConcatSpreadable:r,Xt=Lt?Lt.iterator:r,Qt=Lt?Lt.toStringTag:r,oe=function(){try{var t=co(xt,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ce=e.clearTimeout!==fe.clearTimeout&&e.clearTimeout,se=bt&&bt.now!==fe.Date.now&&bt.now,le=e.setTimeout!==fe.setTimeout&&e.setTimeout,pe=St.ceil,de=St.floor,ve=xt.getOwnPropertySymbols,Te=qt?qt.isBuffer:r,$e=e.isFinite,dn=Et.join,vn=on(xt.keys,xt),_n=St.max,yn=St.min,gn=bt.now,mn=e.parseInt,bn=St.random,wn=Et.reverse,jn=co(e,\"DataView\"),Sn=co(e,\"Map\"),xn=co(e,\"Promise\"),On=co(e,\"Set\"),An=co(e,\"WeakMap\"),In=co(xt,\"create\"),En=An&&new An,kn={},Rn=Fo(jn),Pn=Fo(Sn),Cn=Fo(xn),zn=Fo(On),Mn=Fo(An),Tn=Lt?Lt.prototype:r,Un=Tn?Tn.valueOf:r,Fn=Tn?Tn.toString:r;function Nn(t){if(ta(t)&&!$u(t)&&!(t instanceof Bn)){if(t instanceof Ln)return t;if(zt.call(t,\"__wrapped__\"))return No(t)}return new Ln(t)}var Dn=function(){function t(){}return function(e){if(!Qu(e))return{};if(Ht)return Ht(e);t.prototype=e;var n=new t;return t.prototype=r,n}}();function qn(){}function Ln(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=r}function Bn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function $n(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Wn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Hn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Gn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Hn;++e<n;)this.add(t[e])}function Zn(t){var e=this.__data__=new Wn(t);this.size=e.size}function Kn(t,e){var n=$u(t),r=!n&&Bu(t),i=!n&&!r&&Zu(t),o=!n&&!r&&!i&&ca(t),u=n||r||i||o,a=u?Ge(t.length,At):[],c=a.length;for(var s in t)!e&&!zt.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||_o(s,c))||a.push(s);return a}function Vn(t){var e=t.length;return e?t[Hr(0,e-1)]:r}function Jn(t,e){return Co(Ai(t),or(e,0,t.length))}function Xn(t){return Co(Ai(t))}function Yn(t,e,n){(n!==r&&!Du(t[e],n)||n===r&&!(e in t))&&rr(t,e,n)}function Qn(t,e,n){var i=t[e];zt.call(t,e)&&Du(i,n)&&(n!==r||e in t)||rr(t,e,n)}function tr(t,e){for(var n=t.length;n--;)if(Du(t[n][0],e))return n;return-1}function er(t,e,n,r){return fr(t,function(t,i,o){e(r,t,n(t),o)}),r}function nr(t,e){return t&&Ii(e,Ra(e),t)}function rr(t,e,n){\"__proto__\"==e&&oe?oe(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function ir(t,e){for(var n=-1,i=e.length,o=rt(i),u=null==t;++n<i;)o[n]=u?r:Oa(t,e[n]);return o}function or(t,e,n){return t==t&&(n!==r&&(t=t<=n?t:n),e!==r&&(t=t>=e?t:e)),t}function ur(t,e,n,i,o,u){var a,c=1&e,s=2&e,f=4&e;if(n&&(a=o?n(t,i,o,u):n(t)),a!==r)return a;if(!Qu(t))return t;var l=$u(t);if(l){if(a=function(t){var e=t.length,n=new t.constructor(e);return e&&\"string\"==typeof t[0]&&zt.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}(t),!c)return Ai(t,a)}else{var p=lo(t),h=p==m||p==b;if(Zu(t))return bi(t,c);if(p==S||p==d||h&&!o){if(a=s||h?{}:ho(t),!c)return s?function(t,e){return Ii(t,fo(t),e)}(t,function(t,e){return t&&Ii(e,Pa(e),t)}(a,t)):function(t,e){return Ii(t,so(t),e)}(t,nr(a,t))}else{if(!ie[p])return o?t:{};a=function(t,e,n){var r,i=t.constructor;switch(e){case R:return wi(t);case _:case y:return new i(+t);case P:return function(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case C:case z:case M:case T:case U:case F:case N:case D:case q:return ji(t,n);case w:return new i;case j:case I:return new i(t);case O:return function(t){var e=new t.constructor(t.source,lt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case A:return new i;case E:return r=t,Un?xt(Un.call(r)):{}}}(t,p,c)}}u||(u=new Zn);var v=u.get(t);if(v)return v;u.set(t,a),oa(t)?t.forEach(function(r){a.add(ur(r,e,n,r,t,u))}):ea(t)&&t.forEach(function(r,i){a.set(i,ur(r,e,n,i,t,u))});var g=l?r:(f?s?eo:to:s?Pa:Ra)(t);return xe(g||t,function(r,i){g&&(r=t[i=r]),Qn(a,i,ur(r,e,n,i,t,u))}),a}function ar(t,e,n){var i=n.length;if(null==t)return!i;for(t=xt(t);i--;){var o=n[i],u=e[o],a=t[o];if(a===r&&!(o in t)||!u(a))return!1}return!0}function cr(t,e,n){if(\"function\"!=typeof t)throw new It(i);return Eo(function(){t.apply(r,n)},e)}function sr(t,e,n,r){var i=-1,o=Ee,u=!0,a=t.length,c=[],s=e.length;if(!a)return c;n&&(e=Re(e,Ke(n))),r?(o=ke,u=!1):e.length>=200&&(o=Je,u=!1,e=new Gn(e));t:for(;++i<a;){var f=t[i],l=null==n?f:n(f);if(f=r||0!==f?f:0,u&&l==l){for(var p=s;p--;)if(e[p]===l)continue t;c.push(f)}else o(e,l,r)||c.push(f)}return c}Nn.templateSettings={escape:K,evaluate:V,interpolate:J,variable:\"\",imports:{_:Nn}},Nn.prototype=qn.prototype,Nn.prototype.constructor=Nn,Ln.prototype=Dn(qn.prototype),Ln.prototype.constructor=Ln,Bn.prototype=Dn(qn.prototype),Bn.prototype.constructor=Bn,$n.prototype.clear=function(){this.__data__=In?In(null):{},this.size=0},$n.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},$n.prototype.get=function(t){var e=this.__data__;if(In){var n=e[t];return n===o?r:n}return zt.call(e,t)?e[t]:r},$n.prototype.has=function(t){var e=this.__data__;return In?e[t]!==r:zt.call(e,t)},$n.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=In&&e===r?o:e,this},Wn.prototype.clear=function(){this.__data__=[],this.size=0},Wn.prototype.delete=function(t){var e=this.__data__,n=tr(e,t);return!(n<0||(n==e.length-1?e.pop():Zt.call(e,n,1),--this.size,0))},Wn.prototype.get=function(t){var e=this.__data__,n=tr(e,t);return n<0?r:e[n][1]},Wn.prototype.has=function(t){return tr(this.__data__,t)>-1},Wn.prototype.set=function(t,e){var n=this.__data__,r=tr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Hn.prototype.clear=function(){this.size=0,this.__data__={hash:new $n,map:new(Sn||Wn),string:new $n}},Hn.prototype.delete=function(t){var e=uo(this,t).delete(t);return this.size-=e?1:0,e},Hn.prototype.get=function(t){return uo(this,t).get(t)},Hn.prototype.has=function(t){return uo(this,t).has(t)},Hn.prototype.set=function(t,e){var n=uo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Gn.prototype.add=Gn.prototype.push=function(t){return this.__data__.set(t,o),this},Gn.prototype.has=function(t){return this.__data__.has(t)},Zn.prototype.clear=function(){this.__data__=new Wn,this.size=0},Zn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Zn.prototype.get=function(t){return this.__data__.get(t)},Zn.prototype.has=function(t){return this.__data__.has(t)},Zn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Wn){var r=n.__data__;if(!Sn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Hn(r)}return n.set(t,e),this.size=n.size,this};var fr=Ri(gr),lr=Ri(mr,!0);function pr(t,e){var n=!0;return fr(t,function(t,r,i){return n=!!e(t,r,i)}),n}function hr(t,e,n){for(var i=-1,o=t.length;++i<o;){var u=t[i],a=e(u);if(null!=a&&(c===r?a==a&&!aa(a):n(a,c)))var c=a,s=u}return s}function dr(t,e){var n=[];return fr(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function vr(t,e,n,r,i){var o=-1,u=t.length;for(n||(n=vo),i||(i=[]);++o<u;){var a=t[o];e>0&&n(a)?e>1?vr(a,e-1,n,r,i):Pe(i,a):r||(i[i.length]=a)}return i}var _r=Pi(),yr=Pi(!0);function gr(t,e){return t&&_r(t,e,Ra)}function mr(t,e){return t&&yr(t,e,Ra)}function br(t,e){return Ie(e,function(e){return Ju(t[e])})}function wr(t,e){for(var n=0,i=(e=_i(e,t)).length;null!=t&&n<i;)t=t[Uo(e[n++])];return n&&n==i?t:r}function jr(t,e,n){var r=e(t);return $u(t)?r:Pe(r,n(t))}function Sr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Qt&&Qt in xt(t)?function(t){var e=zt.call(t,Qt),n=t[Qt];try{t[Qt]=r;var i=!0}catch(t){}var o=Ut.call(t);return i&&(e?t[Qt]=n:delete t[Qt]),o}(t):function(t){return Ut.call(t)}(t)}function xr(t,e){return t>e}function Or(t,e){return null!=t&&zt.call(t,e)}function Ar(t,e){return null!=t&&e in xt(t)}function Ir(t,e,n){for(var i=n?ke:Ee,o=t[0].length,u=t.length,a=u,c=rt(u),s=1/0,f=[];a--;){var l=t[a];a&&e&&(l=Re(l,Ke(e))),s=yn(l.length,s),c[a]=!n&&(e||o>=120&&l.length>=120)?new Gn(a&&l):r}l=t[0];var p=-1,h=c[0];t:for(;++p<o&&f.length<s;){var d=l[p],v=e?e(d):d;if(d=n||0!==d?d:0,!(h?Je(h,v):i(f,v,n))){for(a=u;--a;){var _=c[a];if(!(_?Je(_,v):i(t[a],v,n)))continue t}h&&h.push(v),f.push(d)}}return f}function Er(t,e,n){var i=null==(t=Oo(t,e=_i(e,t)))?t:t[Uo(Vo(e))];return null==i?r:je(i,t,n)}function kr(t){return ta(t)&&Sr(t)==d}function Rr(t,e,n,i,o){return t===e||(null==t||null==e||!ta(t)&&!ta(e)?t!=t&&e!=e:function(t,e,n,i,o,u){var a=$u(t),c=$u(e),s=a?v:lo(t),f=c?v:lo(e),l=(s=s==d?S:s)==S,p=(f=f==d?S:f)==S,h=s==f;if(h&&Zu(t)){if(!Zu(e))return!1;a=!0,l=!1}if(h&&!l)return u||(u=new Zn),a||ca(t)?Yi(t,e,n,i,o,u):function(t,e,n,r,i,o,u){switch(n){case P:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case R:return!(t.byteLength!=e.byteLength||!o(new Bt(t),new Bt(e)));case _:case y:case j:return Du(+t,+e);case g:return t.name==e.name&&t.message==e.message;case O:case I:return t==e+\"\";case w:var a=rn;case A:var c=1&r;if(a||(a=an),t.size!=e.size&&!c)return!1;var s=u.get(t);if(s)return s==e;r|=2,u.set(t,e);var f=Yi(a(t),a(e),r,i,o,u);return u.delete(t),f;case E:if(Un)return Un.call(t)==Un.call(e)}return!1}(t,e,s,n,i,o,u);if(!(1&n)){var m=l&&zt.call(t,\"__wrapped__\"),b=p&&zt.call(e,\"__wrapped__\");if(m||b){var x=m?t.value():t,k=b?e.value():e;return u||(u=new Zn),o(x,k,n,i,u)}}return!!h&&(u||(u=new Zn),function(t,e,n,i,o,u){var a=1&n,c=to(t),s=c.length;if(s!=to(e).length&&!a)return!1;for(var f=s;f--;){var l=c[f];if(!(a?l in e:zt.call(e,l)))return!1}var p=u.get(t),h=u.get(e);if(p&&h)return p==e&&h==t;var d=!0;u.set(t,e),u.set(e,t);for(var v=a;++f<s;){var _=t[l=c[f]],y=e[l];if(i)var g=a?i(y,_,l,e,t,u):i(_,y,l,t,e,u);if(!(g===r?_===y||o(_,y,n,i,u):g)){d=!1;break}v||(v=\"constructor\"==l)}if(d&&!v){var m=t.constructor,b=e.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return u.delete(t),u.delete(e),d}(t,e,n,i,o,u))}(t,e,n,i,Rr,o))}function Pr(t,e,n,i){var o=n.length,u=o,a=!i;if(null==t)return!u;for(t=xt(t);o--;){var c=n[o];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++o<u;){var s=(c=n[o])[0],f=t[s],l=c[1];if(a&&c[2]){if(f===r&&!(s in t))return!1}else{var p=new Zn;if(i)var h=i(f,l,s,t,e,p);if(!(h===r?Rr(l,f,3,i,p):h))return!1}}return!0}function Cr(t){return!(!Qu(t)||(e=t,Tt&&Tt in e))&&(Ju(t)?Dt:dt).test(Fo(t));var e}function zr(t){return\"function\"==typeof t?t:null==t?nc:\"object\"==typeof t?$u(t)?Nr(t[0],t[1]):Fr(t):lc(t)}function Mr(t){if(!wo(t))return vn(t);var e=[];for(var n in xt(t))zt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function Tr(t,e){return t<e}function Ur(t,e){var n=-1,r=Hu(t)?rt(t.length):[];return fr(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Fr(t){var e=ao(t);return 1==e.length&&e[0][2]?So(e[0][0],e[0][1]):function(n){return n===t||Pr(n,t,e)}}function Nr(t,e){return go(t)&&jo(e)?So(Uo(t),e):function(n){var i=Oa(n,t);return i===r&&i===e?Aa(n,t):Rr(e,i,3)}}function Dr(t,e,n,i,o){t!==e&&_r(e,function(u,a){if(o||(o=new Zn),Qu(u))!function(t,e,n,i,o,u,a){var c=Ao(t,n),s=Ao(e,n),f=a.get(s);if(f)Yn(t,n,f);else{var l=u?u(c,s,n+\"\",t,e,a):r,p=l===r;if(p){var h=$u(s),d=!h&&Zu(s),v=!h&&!d&&ca(s);l=s,h||d||v?$u(c)?l=c:Gu(c)?l=Ai(c):d?(p=!1,l=bi(s,!0)):v?(p=!1,l=ji(s,!0)):l=[]:ra(s)||Bu(s)?(l=c,Bu(c)?l=_a(c):Qu(c)&&!Ju(c)||(l=ho(s))):p=!1}p&&(a.set(s,l),o(l,s,i,u,a),a.delete(s)),Yn(t,n,l)}}(t,e,a,n,Dr,i,o);else{var c=i?i(Ao(t,a),u,a+\"\",t,e,o):r;c===r&&(c=u),Yn(t,a,c)}},Pa)}function qr(t,e){var n=t.length;if(n)return _o(e+=e<0?n:0,n)?t[e]:r}function Lr(t,e,n){e=e.length?Re(e,function(t){return $u(t)?function(e){return wr(e,1===t.length?t[0]:t)}:t}):[nc];var r=-1;e=Re(e,Ke(oo()));var i=Ur(t,function(t,n,i){var o=Re(e,function(e){return e(t)});return{criteria:o,index:++r,value:t}});return function(t){var e=t.length;for(t.sort(function(t,e){return function(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,u=i.length,a=n.length;++r<u;){var c=Si(i[r],o[r]);if(c)return r>=a?c:c*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)});e--;)t[e]=t[e].value;return t}(i)}function Br(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var u=e[r],a=wr(t,u);n(a,u)&&Jr(o,_i(u,t),a)}return o}function $r(t,e,n,r){var i=r?De:Ne,o=-1,u=e.length,a=t;for(t===e&&(e=Ai(e)),n&&(a=Re(t,Ke(n)));++o<u;)for(var c=0,s=e[o],f=n?n(s):s;(c=i(a,f,c,r))>-1;)a!==t&&Zt.call(a,c,1),Zt.call(t,c,1);return t}function Wr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;_o(i)?Zt.call(t,i,1):ci(t,i)}}return t}function Hr(t,e){return t+de(bn()*(e-t+1))}function Gr(t,e){var n=\"\";if(!t||e<1||e>f)return n;do{e%2&&(n+=t),(e=de(e/2))&&(t+=t)}while(e);return n}function Zr(t,e){return ko(xo(t,e,nc),t+\"\")}function Kr(t){return Vn(Da(t))}function Vr(t,e){var n=Da(t);return Co(n,or(e,0,n.length))}function Jr(t,e,n,i){if(!Qu(t))return t;for(var o=-1,u=(e=_i(e,t)).length,a=u-1,c=t;null!=c&&++o<u;){var s=Uo(e[o]),f=n;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(o!=a){var l=c[s];(f=i?i(l,s,c):r)===r&&(f=Qu(l)?l:_o(e[o+1])?[]:{})}Qn(c,s,f),c=c[s]}return t}var Xr=En?function(t,e){return En.set(t,e),t}:nc,Yr=oe?function(t,e){return oe(t,\"toString\",{configurable:!0,enumerable:!1,value:Qa(e),writable:!0})}:nc;function Qr(t){return Co(Da(t))}function ti(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+e];return o}function ei(t,e){var n;return fr(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ni(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;r<i;){var o=r+i>>>1,u=t[o];null!==u&&!aa(u)&&(n?u<=e:u<e)?r=o+1:i=o}return i}return ri(t,e,nc,n)}function ri(t,e,n,i){var o=0,u=null==t?0:t.length;if(0===u)return 0;for(var a=(e=n(e))!=e,c=null===e,s=aa(e),f=e===r;o<u;){var l=de((o+u)/2),p=n(t[l]),h=p!==r,d=null===p,v=p==p,_=aa(p);if(a)var y=i||v;else y=f?v&&(i||h):c?v&&h&&(i||!d):s?v&&h&&!d&&(i||!_):!d&&!_&&(i?p<=e:p<e);y?o=l+1:u=l}return yn(u,4294967294)}function ii(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n],a=e?e(u):u;if(!n||!Du(a,c)){var c=a;o[i++]=0===u?0:u}}return o}function oi(t){return\"number\"==typeof t?t:aa(t)?l:+t}function ui(t){if(\"string\"==typeof t)return t;if($u(t))return Re(t,ui)+\"\";if(aa(t))return Fn?Fn.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function ai(t,e,n){var r=-1,i=Ee,o=t.length,u=!0,a=[],c=a;if(n)u=!1,i=ke;else if(o>=200){var s=e?null:Gi(t);if(s)return an(s);u=!1,i=Je,c=new Gn}else c=e?[]:a;t:for(;++r<o;){var f=t[r],l=e?e(f):f;if(f=n||0!==f?f:0,u&&l==l){for(var p=c.length;p--;)if(c[p]===l)continue t;e&&c.push(l),a.push(f)}else i(c,l,n)||(c!==a&&c.push(l),a.push(f))}return a}function ci(t,e){var n=-1,r=(e=_i(e,t)).length;if(!r)return!0;for(;++n<r;){var i=Uo(e[n]);if(\"__proto__\"===i&&!zt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Oo(t,e);return null==o||delete o[Uo(Vo(e))]}function si(t,e,n,r){return Jr(t,e,n(wr(t,e)),r)}function fi(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function li(t,e){var n=t;return n instanceof Bn&&(n=n.value()),Ce(e,function(t,e){return e.func.apply(e.thisArg,Pe([t],e.args))},n)}function pi(t,e,n){var r=t.length;if(r<2)return r?ai(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var u=t[i],a=-1;++a<r;)a!=i&&(o[i]=sr(o[i]||u,t[a],e,n));return ai(vr(o,1),e,n)}function hi(t,e,n){for(var i=-1,o=t.length,u=e.length,a={};++i<o;){var c=i<u?e[i]:r;n(a,t[i],c)}return a}function di(t){return Gu(t)?t:[]}function vi(t){return\"function\"==typeof t?t:nc}function _i(t,e){return $u(t)?t:go(t,e)?[t]:To(ya(t))}var yi=Zr;function gi(t,e,n){var i=t.length;return n=n===r?i:n,!e&&n>=i?t:ti(t,e,n)}var mi=ce||function(t){return fe.clearTimeout(t)};function bi(t,e){if(e)return t.slice();var n=t.length,r=$t?$t(n):new t.constructor(n);return t.copy(r),r}function wi(t){var e=new t.constructor(t.byteLength);return new Bt(e).set(new Bt(t)),e}function ji(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Si(t,e){if(t!==e){var n=t!==r,i=null===t,o=t==t,u=aa(t),a=e!==r,c=null===e,s=e==e,f=aa(e);if(!c&&!f&&!u&&t>e||u&&a&&s&&!c&&!f||i&&a&&s||!n&&s||!o)return 1;if(!i&&!u&&!f&&t<e||f&&n&&o&&!i&&!u||c&&n&&o||!a&&o||!s)return-1}return 0}function xi(t,e,n,r){for(var i=-1,o=t.length,u=n.length,a=-1,c=e.length,s=_n(o-u,0),f=rt(c+s),l=!r;++a<c;)f[a]=e[a];for(;++i<u;)(l||i<o)&&(f[n[i]]=t[i]);for(;s--;)f[a++]=t[i++];return f}function Oi(t,e,n,r){for(var i=-1,o=t.length,u=-1,a=n.length,c=-1,s=e.length,f=_n(o-a,0),l=rt(f+s),p=!r;++i<f;)l[i]=t[i];for(var h=i;++c<s;)l[h+c]=e[c];for(;++u<a;)(p||i<o)&&(l[h+n[u]]=t[i++]);return l}function Ai(t,e){var n=-1,r=t.length;for(e||(e=rt(r));++n<r;)e[n]=t[n];return e}function Ii(t,e,n,i){var o=!n;n||(n={});for(var u=-1,a=e.length;++u<a;){var c=e[u],s=i?i(n[c],t[c],c,n,t):r;s===r&&(s=t[c]),o?rr(n,c,s):Qn(n,c,s)}return n}function Ei(t,e){return function(n,r){var i=$u(n)?Se:er,o=e?e():{};return i(n,t,oo(r,2),o)}}function ki(t){return Zr(function(e,n){var i=-1,o=n.length,u=o>1?n[o-1]:r,a=o>2?n[2]:r;for(u=t.length>3&&\"function\"==typeof u?(o--,u):r,a&&yo(n[0],n[1],a)&&(u=o<3?r:u,o=1),e=xt(e);++i<o;){var c=n[i];c&&t(e,c,i,u)}return e})}function Ri(t,e){return function(n,r){if(null==n)return n;if(!Hu(n))return t(n,r);for(var i=n.length,o=e?i:-1,u=xt(n);(e?o--:++o<i)&&!1!==r(u[o],o,u););return n}}function Pi(t){return function(e,n,r){for(var i=-1,o=xt(e),u=r(e),a=u.length;a--;){var c=u[t?a:++i];if(!1===n(o[c],c,o))break}return e}}function Ci(t){return function(e){var n=nn(e=ya(e))?fn(e):r,i=n?n[0]:e.charAt(0),o=n?gi(n,1).join(\"\"):e.slice(1);return i[t]()+o}}function zi(t){return function(e){return Ce(Ja(Ba(e).replace(Vt,\"\")),t,\"\")}}function Mi(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Dn(t.prototype),r=t.apply(n,e);return Qu(r)?r:n}}function Ti(t){return function(e,n,i){var o=xt(e);if(!Hu(e)){var u=oo(n,3);e=Ra(e),n=function(t){return u(o[t],t,o)}}var a=t(e,n,i);return a>-1?o[u?e[a]:a]:r}}function Ui(t){return Qi(function(e){var n=e.length,o=n,u=Ln.prototype.thru;for(t&&e.reverse();o--;){var a=e[o];if(\"function\"!=typeof a)throw new It(i);if(u&&!c&&\"wrapper\"==ro(a))var c=new Ln([],!0)}for(o=c?o:n;++o<n;){var s=ro(a=e[o]),f=\"wrapper\"==s?no(a):r;c=f&&mo(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?c[ro(f[0])].apply(c,f[3]):1==a.length&&mo(a)?c[s]():c.thru(a)}return function(){var t=arguments,r=t[0];if(c&&1==t.length&&$u(r))return c.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Fi(t,e,n,i,o,u,a,s,f,l){var p=e&c,h=1&e,d=2&e,v=24&e,_=512&e,y=d?r:Mi(t);return function c(){for(var g=arguments.length,m=rt(g),b=g;b--;)m[b]=arguments[b];if(v)var w=io(c),j=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(m,w);if(i&&(m=xi(m,i,o,v)),u&&(m=Oi(m,u,a,v)),g-=j,v&&g<l){var S=un(m,w);return Wi(t,e,Fi,c.placeholder,n,m,S,s,f,l-g)}var x=h?n:this,O=d?x[t]:t;return g=m.length,s?m=function(t,e){for(var n=t.length,i=yn(e.length,n),o=Ai(t);i--;){var u=e[i];t[i]=_o(u,n)?o[u]:r}return t}(m,s):_&&g>1&&m.reverse(),p&&f<g&&(m.length=f),this&&this!==fe&&this instanceof c&&(O=y||Mi(O)),O.apply(x,m)}}function Ni(t,e){return function(n,r){return function(t,e,n,r){return gr(t,function(t,i,o){e(r,n(t),i,o)}),r}(n,t,e(r),{})}}function Di(t,e){return function(n,i){var o;if(n===r&&i===r)return e;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ui(n),i=ui(i)):(n=oi(n),i=oi(i)),o=t(n,i)}return o}}function qi(t){return Qi(function(e){return e=Re(e,Ke(oo())),Zr(function(n){var r=this;return t(e,function(t){return je(t,r,n)})})})}function Li(t,e){var n=(e=e===r?\" \":ui(e)).length;if(n<2)return n?Gr(e,t):e;var i=Gr(e,pe(t/sn(e)));return nn(e)?gi(fn(i),0,t).join(\"\"):i.slice(0,t)}function Bi(t){return function(e,n,i){return i&&\"number\"!=typeof i&&yo(e,n,i)&&(n=i=r),e=pa(e),n===r?(n=e,e=0):n=pa(n),function(t,e,n,r){for(var i=-1,o=_n(pe((e-t)/(n||1)),0),u=rt(o);o--;)u[r?o:++i]=t,t+=n;return u}(e,n,i=i===r?e<n?1:-1:pa(i),t)}}function $i(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=va(e),n=va(n)),t(e,n)}}function Wi(t,e,n,i,o,u,c,s,f,l){var p=8&e;e|=p?a:64,4&(e&=~(p?64:a))||(e&=-4);var h=[t,e,o,p?u:r,p?c:r,p?r:u,p?r:c,s,f,l],d=n.apply(r,h);return mo(t)&&Io(d,h),d.placeholder=i,Ro(d,t,e)}function Hi(t){var e=St[t];return function(t,n){if(t=va(t),(n=null==n?0:yn(ha(n),292))&&$e(t)){var r=(ya(t)+\"e\").split(\"e\");return+((r=(ya(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var Gi=On&&1/an(new On([,-0]))[1]==s?function(t){return new On(t)}:ac;function Zi(t){return function(e){var n=lo(e);return n==w?rn(e):n==A?cn(e):function(t,e){return Re(e,function(e){return[e,t[e]]})}(e,t(e))}}function Ki(t,e,n,o,s,f,l,p){var h=2&e;if(!h&&\"function\"!=typeof t)throw new It(i);var d=o?o.length:0;if(d||(e&=-97,o=s=r),l=l===r?l:_n(ha(l),0),p=p===r?p:ha(p),d-=s?s.length:0,64&e){var v=o,_=s;o=s=r}var y=h?r:no(t),g=[t,e,n,o,s,v,_,f,l,p];if(y&&function(t,e){var n=t[1],r=e[1],i=n|r,o=i<131,a=r==c&&8==n||r==c&&256==n&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!o&&!a)return t;1&r&&(t[2]=e[2],i|=1&n?0:4);var s=e[3];if(s){var f=t[3];t[3]=f?xi(f,s,e[4]):s,t[4]=f?un(t[3],u):e[4]}(s=e[5])&&(f=t[5],t[5]=f?Oi(f,s,e[6]):s,t[6]=f?un(t[5],u):e[6]),(s=e[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?e[8]:yn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i}(g,y),t=g[0],e=g[1],n=g[2],o=g[3],s=g[4],!(p=g[9]=g[9]===r?h?0:t.length:_n(g[9]-d,0))&&24&e&&(e&=-25),e&&1!=e)m=8==e||16==e?function(t,e,n){var i=Mi(t);return function o(){for(var u=arguments.length,a=rt(u),c=u,s=io(o);c--;)a[c]=arguments[c];var f=u<3&&a[0]!==s&&a[u-1]!==s?[]:un(a,s);return(u-=f.length)<n?Wi(t,e,Fi,o.placeholder,r,a,f,r,r,n-u):je(this&&this!==fe&&this instanceof o?i:t,this,a)}}(t,e,p):e!=a&&33!=e||s.length?Fi.apply(r,g):function(t,e,n,r){var i=1&e,o=Mi(t);return function e(){for(var u=-1,a=arguments.length,c=-1,s=r.length,f=rt(s+a),l=this&&this!==fe&&this instanceof e?o:t;++c<s;)f[c]=r[c];for(;a--;)f[c++]=arguments[++u];return je(l,i?n:this,f)}}(t,e,n,o);else var m=function(t,e,n){var r=1&e,i=Mi(t);return function e(){return(this&&this!==fe&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return Ro((y?Xr:Io)(m,g),t,e)}function Vi(t,e,n,i){return t===r||Du(t,Rt[n])&&!zt.call(i,n)?e:t}function Ji(t,e,n,i,o,u){return Qu(t)&&Qu(e)&&(u.set(e,t),Dr(t,e,r,Ji,u),u.delete(e)),t}function Xi(t){return ra(t)?r:t}function Yi(t,e,n,i,o,u){var a=1&n,c=t.length,s=e.length;if(c!=s&&!(a&&s>c))return!1;var f=u.get(t),l=u.get(e);if(f&&l)return f==e&&l==t;var p=-1,h=!0,d=2&n?new Gn:r;for(u.set(t,e),u.set(e,t);++p<c;){var v=t[p],_=e[p];if(i)var y=a?i(_,v,p,e,t,u):i(v,_,p,t,e,u);if(y!==r){if(y)continue;h=!1;break}if(d){if(!Me(e,function(t,e){if(!Je(d,e)&&(v===t||o(v,t,n,i,u)))return d.push(e)})){h=!1;break}}else if(v!==_&&!o(v,_,n,i,u)){h=!1;break}}return u.delete(t),u.delete(e),h}function Qi(t){return ko(xo(t,r,Wo),t+\"\")}function to(t){return jr(t,Ra,so)}function eo(t){return jr(t,Pa,fo)}var no=En?function(t){return En.get(t)}:ac;function ro(t){for(var e=t.name+\"\",n=kn[e],r=zt.call(kn,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function io(t){return(zt.call(Nn,\"placeholder\")?Nn:t).placeholder}function oo(){var t=Nn.iteratee||rc;return t=t===rc?zr:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function ao(t){for(var e=Ra(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,jo(i)]}return e}function co(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return Cr(n)?n:r}var so=ve?function(t){return null==t?[]:(t=xt(t),Ie(ve(t),function(e){return Gt.call(t,e)}))}:dc,fo=ve?function(t){for(var e=[];t;)Pe(e,so(t)),t=Wt(t);return e}:dc,lo=Sr;function po(t,e,n){for(var r=-1,i=(e=_i(e,t)).length,o=!1;++r<i;){var u=Uo(e[r]);if(!(o=null!=t&&n(t,u)))break;t=t[u]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Yu(i)&&_o(u,i)&&($u(t)||Bu(t))}function ho(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Dn(Wt(t))}function vo(t){return $u(t)||Bu(t)||!!(Kt&&t&&t[Kt])}function _o(t,e){var n=typeof t;return!!(e=e??f)&&(\"number\"==n||\"symbol\"!=n&&_t.test(t))&&t>-1&&t%1==0&&t<e}function yo(t,e,n){if(!Qu(n))return!1;var r=typeof e;return!!(\"number\"==r?Hu(n)&&_o(e,n.length):\"string\"==r&&e in n)&&Du(n[e],t)}function go(t,e){if($u(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!aa(t))||Y.test(t)||!X.test(t)||null!=e&&t in xt(e)}function mo(t){var e=ro(t),n=Nn[e];if(\"function\"!=typeof n||!(e in Bn.prototype))return!1;if(t===n)return!0;var r=no(n);return!!r&&t===r[0]}(jn&&lo(new jn(new ArrayBuffer(1)))!=P||Sn&&lo(new Sn)!=w||xn&&lo(xn.resolve())!=x||On&&lo(new On)!=A||An&&lo(new An)!=k)&&(lo=function(t){var e=Sr(t),n=e==S?t.constructor:r,i=n?Fo(n):\"\";if(i)switch(i){case Rn:return P;case Pn:return w;case Cn:return x;case zn:return A;case Mn:return k}return e});var bo=Pt?Ju:vc;function wo(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||Rt)}function jo(t){return t==t&&!Qu(t)}function So(t,e){return function(n){return null!=n&&n[t]===e&&(e!==r||t in xt(n))}}function xo(t,e,n){return e=_n(e===r?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=_n(r.length-e,0),u=rt(o);++i<o;)u[i]=r[e+i];i=-1;for(var a=rt(e+1);++i<e;)a[i]=r[i];return a[e]=n(u),je(t,this,a)}}function Oo(t,e){return e.length<2?t:wr(t,ti(e,0,-1))}function Ao(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var Io=Po(Xr),Eo=le||function(t,e){return fe.setTimeout(t,e)},ko=Po(Yr);function Ro(t,e,n){var r=e+\"\";return ko(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return xe(h,function(n){var r=\"_.\"+n[0];e&n[1]&&!Ee(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(ot);return e?e[1].split(ut):[]}(r),n)))}function Po(t){var e=0,n=0;return function(){var i=gn(),o=16-(i-n);if(n=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(r,arguments)}}function Co(t,e){var n=-1,i=t.length,o=i-1;for(e=e===r?i:e;++n<e;){var u=Hr(n,o),a=t[u];t[u]=t[n],t[n]=a}return t.length=e,t}var zo,Mo,To=(zo=zu(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(Q,function(t,n,r,i){e.push(r?i.replace(st,\"$1\"):n||t)}),e},function(t){return 500===Mo.size&&Mo.clear(),t}),Mo=zo.cache,zo);function Uo(t){if(\"string\"==typeof t||aa(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Fo(t){if(null!=t){try{return Ct.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function No(t){if(t instanceof Bn)return t.clone();var e=new Ln(t.__wrapped__,t.__chain__);return e.__actions__=Ai(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Do=Zr(function(t,e){return Gu(t)?sr(t,vr(e,1,Gu,!0)):[]}),qo=Zr(function(t,e){var n=Vo(e);return Gu(n)&&(n=r),Gu(t)?sr(t,vr(e,1,Gu,!0),oo(n,2)):[]}),Lo=Zr(function(t,e){var n=Vo(e);return Gu(n)&&(n=r),Gu(t)?sr(t,vr(e,1,Gu,!0),r,n):[]});function Bo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ha(n);return i<0&&(i=_n(r+i,0)),Fe(t,oo(e,3),i)}function $o(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return n!==r&&(o=ha(n),o=n<0?_n(i+o,0):yn(o,i-1)),Fe(t,oo(e,3),o,!0)}function Wo(t){return null!=t&&t.length?vr(t,1):[]}function Ho(t){return t&&t.length?t[0]:r}var Go=Zr(function(t){var e=Re(t,di);return e.length&&e[0]===t[0]?Ir(e):[]}),Zo=Zr(function(t){var e=Vo(t),n=Re(t,di);return e===Vo(n)?e=r:n.pop(),n.length&&n[0]===t[0]?Ir(n,oo(e,2)):[]}),Ko=Zr(function(t){var e=Vo(t),n=Re(t,di);return(e=\"function\"==typeof e?e:r)&&n.pop(),n.length&&n[0]===t[0]?Ir(n,r,e):[]});function Vo(t){var e=null==t?0:t.length;return e?t[e-1]:r}var Jo=Zr(Xo);function Xo(t,e){return t&&t.length&&e&&e.length?$r(t,e):t}var Yo=Qi(function(t,e){var n=null==t?0:t.length,r=ir(t,e);return Wr(t,Re(e,function(t){return _o(t,n)?+t:t}).sort(Si)),r});function Qo(t){return null==t?t:wn.call(t)}var tu=Zr(function(t){return ai(vr(t,1,Gu,!0))}),eu=Zr(function(t){var e=Vo(t);return Gu(e)&&(e=r),ai(vr(t,1,Gu,!0),oo(e,2))}),nu=Zr(function(t){var e=Vo(t);return e=\"function\"==typeof e?e:r,ai(vr(t,1,Gu,!0),r,e)});function ru(t){if(!t||!t.length)return[];var e=0;return t=Ie(t,function(t){if(Gu(t))return e=_n(t.length,e),!0}),Ge(e,function(e){return Re(t,Be(e))})}function iu(t,e){if(!t||!t.length)return[];var n=ru(t);return null==e?n:Re(n,function(t){return je(e,r,t)})}var ou=Zr(function(t,e){return Gu(t)?sr(t,e):[]}),uu=Zr(function(t){return pi(Ie(t,Gu))}),au=Zr(function(t){var e=Vo(t);return Gu(e)&&(e=r),pi(Ie(t,Gu),oo(e,2))}),cu=Zr(function(t){var e=Vo(t);return e=\"function\"==typeof e?e:r,pi(Ie(t,Gu),r,e)}),su=Zr(ru),fu=Zr(function(t){var e=t.length,n=e>1?t[e-1]:r;return n=\"function\"==typeof n?(t.pop(),n):r,iu(t,n)});function lu(t){var e=Nn(t);return e.__chain__=!0,e}function pu(t,e){return e(t)}var hu=Qi(function(t){var e=t.length,n=e?t[0]:0,i=this.__wrapped__,o=function(e){return ir(e,t)};return!(e>1||this.__actions__.length)&&i instanceof Bn&&_o(n)?((i=i.slice(n,+n+(e?1:0))).__actions__.push({func:pu,args:[o],thisArg:r}),new Ln(i,this.__chain__).thru(function(t){return e&&!t.length&&t.push(r),t})):this.thru(o)}),du=Ei(function(t,e,n){zt.call(t,n)?++t[n]:rr(t,n,1)}),vu=Ti(Bo),_u=Ti($o);function yu(t,e){return($u(t)?xe:fr)(t,oo(e,3))}function gu(t,e){return($u(t)?Oe:lr)(t,oo(e,3))}var mu=Ei(function(t,e,n){zt.call(t,n)?t[n].push(e):rr(t,n,[e])}),bu=Zr(function(t,e,n){var r=-1,i=\"function\"==typeof e,o=Hu(t)?rt(t.length):[];return fr(t,function(t){o[++r]=i?je(e,t,n):Er(t,e,n)}),o}),wu=Ei(function(t,e,n){rr(t,n,e)});function ju(t,e){return($u(t)?Re:Ur)(t,oo(e,3))}var Su=Ei(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),xu=Zr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&yo(t,e[0],e[1])?e=[]:n>2&&yo(e[0],e[1],e[2])&&(e=[e[0]]),Lr(t,vr(e,1),[])}),Ou=se||function(){return fe.Date.now()};function Au(t,e,n){return e=n?r:e,e=t&&null==e?t.length:e,Ki(t,c,r,r,r,r,e)}function Iu(t,e){var n;if(\"function\"!=typeof e)throw new It(i);return t=ha(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=r),n}}var Eu=Zr(function(t,e,n){var r=1;if(n.length){var i=un(n,io(Eu));r|=a}return Ki(t,r,e,n,i)}),ku=Zr(function(t,e,n){var r=3;if(n.length){var i=un(n,io(ku));r|=a}return Ki(e,r,t,n,i)});function Ru(t,e,n){var o,u,a,c,s,f,l=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new It(i);function v(e){var n=o,i=u;return o=u=r,l=e,c=t.apply(i,n)}function _(t){var n=t-f;return f===r||n>=e||n<0||h&&t-l>=a}function y(){var t=Ou();if(_(t))return g(t);s=Eo(y,function(t){var n=e-(t-f);return h?yn(n,a-(t-l)):n}(t))}function g(t){return s=r,d&&o?v(t):(o=u=r,c)}function m(){var t=Ou(),n=_(t);if(o=arguments,u=this,f=t,n){if(s===r)return function(t){return l=t,s=Eo(y,e),p?v(t):c}(f);if(h)return mi(s),s=Eo(y,e),v(f)}return s===r&&(s=Eo(y,e)),c}return e=va(e)||0,Qu(n)&&(p=!!n.leading,a=(h=\"maxWait\"in n)?_n(va(n.maxWait)||0,e):a,d=\"trailing\"in n?!!n.trailing:d),m.cancel=function(){s!==r&&mi(s),l=0,o=f=u=s=r},m.flush=function(){return s===r?c:g(Ou())},m}var Pu=Zr(function(t,e){return cr(t,1,e)}),Cu=Zr(function(t,e,n){return cr(t,va(e)||0,n)});function zu(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new It(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return n.cache=o.set(i,u)||o,u};return n.cache=new(zu.Cache||Hn),n}function Mu(t){if(\"function\"!=typeof t)throw new It(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}zu.Cache=Hn;var Tu=yi(function(t,e){var n=(e=1==e.length&&$u(e[0])?Re(e[0],Ke(oo())):Re(vr(e,1),Ke(oo()))).length;return Zr(function(r){for(var i=-1,o=yn(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return je(t,this,r)})}),Uu=Zr(function(t,e){var n=un(e,io(Uu));return Ki(t,a,r,e,n)}),Fu=Zr(function(t,e){var n=un(e,io(Fu));return Ki(t,64,r,e,n)}),Nu=Qi(function(t,e){return Ki(t,256,r,r,r,e)});function Du(t,e){return t===e||t!=t&&e!=e}var qu=$i(xr),Lu=$i(function(t,e){return t>=e}),Bu=kr(function(){return arguments}())?kr:function(t){return ta(t)&&zt.call(t,\"callee\")&&!Gt.call(t,\"callee\")},$u=rt.isArray,Wu=_e?Ke(_e):function(t){return ta(t)&&Sr(t)==R};function Hu(t){return null!=t&&Yu(t.length)&&!Ju(t)}function Gu(t){return ta(t)&&Hu(t)}var Zu=Te||vc,Ku=ye?Ke(ye):function(t){return ta(t)&&Sr(t)==y};function Vu(t){if(!ta(t))return!1;var e=Sr(t);return e==g||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ra(t)}function Ju(t){if(!Qu(t))return!1;var e=Sr(t);return e==m||e==b||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Xu(t){return\"number\"==typeof t&&t==ha(t)}function Yu(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=f}function Qu(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function ta(t){return null!=t&&\"object\"==typeof t}var ea=ge?Ke(ge):function(t){return ta(t)&&lo(t)==w};function na(t){return\"number\"==typeof t||ta(t)&&Sr(t)==j}function ra(t){if(!ta(t)||Sr(t)!=S)return!1;var e=Wt(t);if(null===e)return!0;var n=zt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&Ct.call(n)==Ft}var ia=me?Ke(me):function(t){return ta(t)&&Sr(t)==O},oa=be?Ke(be):function(t){return ta(t)&&lo(t)==A};function ua(t){return\"string\"==typeof t||!$u(t)&&ta(t)&&Sr(t)==I}function aa(t){return\"symbol\"==typeof t||ta(t)&&Sr(t)==E}var ca=we?Ke(we):function(t){return ta(t)&&Yu(t.length)&&!!re[Sr(t)]},sa=$i(Tr),fa=$i(function(t,e){return t<=e});function la(t){if(!t)return[];if(Hu(t))return ua(t)?fn(t):Ai(t);if(Xt&&t[Xt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Xt]());var e=lo(t);return(e==w?rn:e==A?an:Da)(t)}function pa(t){return t?(t=va(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ha(t){var e=pa(t),n=e%1;return e==e?n?e-n:e:0}function da(t){return t?or(ha(t),0,p):0}function va(t){if(\"number\"==typeof t)return t;if(aa(t))return l;if(Qu(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=Qu(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Ze(t);var n=ht.test(t);return n||vt.test(t)?ae(t.slice(2),n?2:8):pt.test(t)?l:+t}function _a(t){return Ii(t,Pa(t))}function ya(t){return null==t?\"\":ui(t)}var ga=ki(function(t,e){if(wo(e)||Hu(e))Ii(e,Ra(e),t);else for(var n in e)zt.call(e,n)&&Qn(t,n,e[n])}),ma=ki(function(t,e){Ii(e,Pa(e),t)}),ba=ki(function(t,e,n,r){Ii(e,Pa(e),t,r)}),wa=ki(function(t,e,n,r){Ii(e,Ra(e),t,r)}),ja=Qi(ir),Sa=Zr(function(t,e){t=xt(t);var n=-1,i=e.length,o=i>2?e[2]:r;for(o&&yo(e[0],e[1],o)&&(i=1);++n<i;)for(var u=e[n],a=Pa(u),c=-1,s=a.length;++c<s;){var f=a[c],l=t[f];(l===r||Du(l,Rt[f])&&!zt.call(t,f))&&(t[f]=u[f])}return t}),xa=Zr(function(t){return t.push(r,Ji),je(za,r,t)});function Oa(t,e,n){var i=null==t?r:wr(t,e);return i===r?n:i}function Aa(t,e){return null!=t&&po(t,e,Ar)}var Ia=Ni(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Ut.call(e)),t[e]=n},Qa(nc)),Ea=Ni(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Ut.call(e)),zt.call(t,e)?t[e].push(n):t[e]=[n]},oo),ka=Zr(Er);function Ra(t){return Hu(t)?Kn(t):Mr(t)}function Pa(t){return Hu(t)?Kn(t,!0):function(t){if(!Qu(t))return function(t){var e=[];if(null!=t)for(var n in xt(t))e.push(n);return e}(t);var e=wo(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&zt.call(t,r))&&n.push(r);return n}(t)}var Ca=ki(function(t,e,n){Dr(t,e,n)}),za=ki(function(t,e,n,r){Dr(t,e,n,r)}),Ma=Qi(function(t,e){var n={};if(null==t)return n;var r=!1;e=Re(e,function(e){return e=_i(e,t),r||(r=e.length>1),e}),Ii(t,eo(t),n),r&&(n=ur(n,7,Xi));for(var i=e.length;i--;)ci(n,e[i]);return n}),Ta=Qi(function(t,e){return null==t?{}:function(t,e){return Br(t,e,function(e,n){return Aa(t,n)})}(t,e)});function Ua(t,e){if(null==t)return{};var n=Re(eo(t),function(t){return[t]});return e=oo(e),Br(t,n,function(t,n){return e(t,n[0])})}var Fa=Zi(Ra),Na=Zi(Pa);function Da(t){return null==t?[]:Ve(t,Ra(t))}var qa=zi(function(t,e,n){return e=e.toLowerCase(),t+(n?La(e):e)});function La(t){return Va(ya(t).toLowerCase())}function Ba(t){return(t=ya(t))&&t.replace(yt,Qe).replace(Jt,\"\")}var $a=zi(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Wa=zi(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),Ha=Ci(\"toLowerCase\"),Ga=zi(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Za=zi(function(t,e,n){return t+(n?\" \":\"\")+Va(e)}),Ka=zi(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Va=Ci(\"toUpperCase\");function Ja(t,e,n){return t=ya(t),(e=n?r:e)===r?function(t){return te.test(t)}(t)?function(t){return t.match(Yt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(e)||[]}var Xa=Zr(function(t,e){try{return je(t,r,e)}catch(t){return Vu(t)?t:new wt(t)}}),Ya=Qi(function(t,e){return xe(e,function(e){e=Uo(e),rr(t,e,Eu(t[e],t))}),t});function Qa(t){return function(){return t}}var tc=Ui(),ec=Ui(!0);function nc(t){return t}function rc(t){return zr(\"function\"==typeof t?t:ur(t,1))}var ic=Zr(function(t,e){return function(n){return Er(n,t,e)}}),oc=Zr(function(t,e){return function(n){return Er(t,n,e)}});function uc(t,e,n){var r=Ra(e),i=br(e,r);null!=n||Qu(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=br(e,Ra(e)));var o=!(Qu(n)&&\"chain\"in n&&!n.chain),u=Ju(t);return xe(i,function(n){var r=e[n];t[n]=r,u&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Ai(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Pe([this.value()],arguments))})}),t}function ac(){}var cc=qi(Re),sc=qi(Ae),fc=qi(Me);function lc(t){return go(t)?Be(Uo(t)):function(t){return function(e){return wr(e,t)}}(t)}var pc=Bi(),hc=Bi(!0);function dc(){return[]}function vc(){return!1}var _c,yc=Di(function(t,e){return t+e},0),gc=Hi(\"ceil\"),mc=Di(function(t,e){return t/e},1),bc=Hi(\"floor\"),wc=Di(function(t,e){return t*e},1),jc=Hi(\"round\"),Sc=Di(function(t,e){return t-e},0);return Nn.after=function(t,e){if(\"function\"!=typeof e)throw new It(i);return t=ha(t),function(){if(--t<1)return e.apply(this,arguments)}},Nn.ary=Au,Nn.assign=ga,Nn.assignIn=ma,Nn.assignInWith=ba,Nn.assignWith=wa,Nn.at=ja,Nn.before=Iu,Nn.bind=Eu,Nn.bindAll=Ya,Nn.bindKey=ku,Nn.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return $u(t)?t:[t]},Nn.chain=lu,Nn.chunk=function(t,e,n){e=(n?yo(t,e,n):e===r)?1:_n(ha(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,u=0,a=rt(pe(i/e));o<i;)a[u++]=ti(t,o,o+=e);return a},Nn.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i},Nn.concat=function(){var t=arguments.length;if(!t)return[];for(var e=rt(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return Pe($u(n)?Ai(n):[n],vr(e,1))},Nn.cond=function(t){var e=null==t?0:t.length,n=oo();return t=e?Re(t,function(t){if(\"function\"!=typeof t[1])throw new It(i);return[n(t[0]),t[1]]}):[],Zr(function(n){for(var r=-1;++r<e;){var i=t[r];if(je(i[0],this,n))return je(i[1],this,n)}})},Nn.conforms=function(t){return function(t){var e=Ra(t);return function(n){return ar(n,t,e)}}(ur(t,1))},Nn.constant=Qa,Nn.countBy=du,Nn.create=function(t,e){var n=Dn(t);return null==e?n:nr(n,e)},Nn.curry=function t(e,n,i){var o=Ki(e,8,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Nn.curryRight=function t(e,n,i){var o=Ki(e,16,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Nn.debounce=Ru,Nn.defaults=Sa,Nn.defaultsDeep=xa,Nn.defer=Pu,Nn.delay=Cu,Nn.difference=Do,Nn.differenceBy=qo,Nn.differenceWith=Lo,Nn.drop=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=n||e===r?1:ha(e))<0?0:e,i):[]},Nn.dropRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,0,(e=i-(e=n||e===r?1:ha(e)))<0?0:e):[]},Nn.dropRightWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!0,!0):[]},Nn.dropWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!0):[]},Nn.fill=function(t,e,n,i){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&yo(t,e,n)&&(n=0,i=o),function(t,e,n,i){var o=t.length;for((n=ha(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:ha(i))<0&&(i+=o),i=n>i?0:da(i);n<i;)t[n++]=e;return t}(t,e,n,i)):[]},Nn.filter=function(t,e){return($u(t)?Ie:dr)(t,oo(e,3))},Nn.flatMap=function(t,e){return vr(ju(t,e),1)},Nn.flatMapDeep=function(t,e){return vr(ju(t,e),s)},Nn.flatMapDepth=function(t,e,n){return n=n===r?1:ha(n),vr(ju(t,e),n)},Nn.flatten=Wo,Nn.flattenDeep=function(t){return null!=t&&t.length?vr(t,s):[]},Nn.flattenDepth=function(t,e){return null!=t&&t.length?vr(t,e=e===r?1:ha(e)):[]},Nn.flip=function(t){return Ki(t,512)},Nn.flow=tc,Nn.flowRight=ec,Nn.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];rr(r,i[0],i[1])}return r},Nn.functions=function(t){return null==t?[]:br(t,Ra(t))},Nn.functionsIn=function(t){return null==t?[]:br(t,Pa(t))},Nn.groupBy=mu,Nn.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Nn.intersection=Go,Nn.intersectionBy=Zo,Nn.intersectionWith=Ko,Nn.invert=Ia,Nn.invertBy=Ea,Nn.invokeMap=bu,Nn.iteratee=rc,Nn.keyBy=wu,Nn.keys=Ra,Nn.keysIn=Pa,Nn.map=ju,Nn.mapKeys=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,e(t,r,i),t)}),n},Nn.mapValues=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,r,e(t,r,i))}),n},Nn.matches=function(t){return Fr(ur(t,1))},Nn.matchesProperty=function(t,e){return Nr(t,ur(e,1))},Nn.memoize=zu,Nn.merge=Ca,Nn.mergeWith=za,Nn.method=ic,Nn.methodOf=oc,Nn.mixin=uc,Nn.negate=Mu,Nn.nthArg=function(t){return t=ha(t),Zr(function(e){return qr(e,t)})},Nn.omit=Ma,Nn.omitBy=function(t,e){return Ua(t,Mu(oo(e)))},Nn.once=function(t){return Iu(2,t)},Nn.orderBy=function(t,e,n,i){return null==t?[]:($u(e)||(e=null==e?[]:[e]),$u(n=i?r:n)||(n=null==n?[]:[n]),Lr(t,e,n))},Nn.over=cc,Nn.overArgs=Tu,Nn.overEvery=sc,Nn.overSome=fc,Nn.partial=Uu,Nn.partialRight=Fu,Nn.partition=Su,Nn.pick=Ta,Nn.pickBy=Ua,Nn.property=lc,Nn.propertyOf=function(t){return function(e){return null==t?r:wr(t,e)}},Nn.pull=Jo,Nn.pullAll=Xo,Nn.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?$r(t,e,oo(n,2)):t},Nn.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?$r(t,e,r,n):t},Nn.pullAt=Yo,Nn.range=pc,Nn.rangeRight=hc,Nn.rearg=Nu,Nn.reject=function(t,e){return($u(t)?Ie:dr)(t,Mu(oo(e,3)))},Nn.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=oo(e,3);++r<o;){var u=t[r];e(u,r,t)&&(n.push(u),i.push(r))}return Wr(t,i),n},Nn.rest=function(t,e){if(\"function\"!=typeof t)throw new It(i);return Zr(t,e=e===r?e:ha(e))},Nn.reverse=Qo,Nn.sampleSize=function(t,e,n){return e=(n?yo(t,e,n):e===r)?1:ha(e),($u(t)?Jn:Vr)(t,e)},Nn.set=function(t,e,n){return null==t?t:Jr(t,e,n)},Nn.setWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:Jr(t,e,n,i)},Nn.shuffle=function(t){return($u(t)?Xn:Qr)(t)},Nn.slice=function(t,e,n){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&yo(t,e,n)?(e=0,n=i):(e=null==e?0:ha(e),n=n===r?i:ha(n)),ti(t,e,n)):[]},Nn.sortBy=xu,Nn.sortedUniq=function(t){return t&&t.length?ii(t):[]},Nn.sortedUniqBy=function(t,e){return t&&t.length?ii(t,oo(e,2)):[]},Nn.split=function(t,e,n){return n&&\"number\"!=typeof n&&yo(t,e,n)&&(e=n=r),(n=n===r?p:n>>>0)?(t=ya(t))&&(\"string\"==typeof e||null!=e&&!ia(e))&&!(e=ui(e))&&nn(t)?gi(fn(t),0,n):t.split(e,n):[]},Nn.spread=function(t,e){if(\"function\"!=typeof t)throw new It(i);return e=null==e?0:_n(ha(e),0),Zr(function(n){var r=n[e],i=gi(n,0,e);return r&&Pe(i,r),je(t,this,i)})},Nn.tail=function(t){var e=null==t?0:t.length;return e?ti(t,1,e):[]},Nn.take=function(t,e,n){return t&&t.length?ti(t,0,(e=n||e===r?1:ha(e))<0?0:e):[]},Nn.takeRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=i-(e=n||e===r?1:ha(e)))<0?0:e,i):[]},Nn.takeRightWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!1,!0):[]},Nn.takeWhile=function(t,e){return t&&t.length?fi(t,oo(e,3)):[]},Nn.tap=function(t,e){return e(t),t},Nn.throttle=function(t,e,n){var r=!0,o=!0;if(\"function\"!=typeof t)throw new It(i);return Qu(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),Ru(t,e,{leading:r,maxWait:e,trailing:o})},Nn.thru=pu,Nn.toArray=la,Nn.toPairs=Fa,Nn.toPairsIn=Na,Nn.toPath=function(t){return $u(t)?Re(t,Uo):aa(t)?[t]:Ai(To(ya(t)))},Nn.toPlainObject=_a,Nn.transform=function(t,e,n){var r=$u(t),i=r||Zu(t)||ca(t);if(e=oo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Qu(t)&&Ju(o)?Dn(Wt(t)):{}}return(i?xe:gr)(t,function(t,r,i){return e(n,t,r,i)}),n},Nn.unary=function(t){return Au(t,1)},Nn.union=tu,Nn.unionBy=eu,Nn.unionWith=nu,Nn.uniq=function(t){return t&&t.length?ai(t):[]},Nn.uniqBy=function(t,e){return t&&t.length?ai(t,oo(e,2)):[]},Nn.uniqWith=function(t,e){return e=\"function\"==typeof e?e:r,t&&t.length?ai(t,r,e):[]},Nn.unset=function(t,e){return null==t||ci(t,e)},Nn.unzip=ru,Nn.unzipWith=iu,Nn.update=function(t,e,n){return null==t?t:si(t,e,vi(n))},Nn.updateWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:si(t,e,vi(n),i)},Nn.values=Da,Nn.valuesIn=function(t){return null==t?[]:Ve(t,Pa(t))},Nn.without=ou,Nn.words=Ja,Nn.wrap=function(t,e){return Uu(vi(e),t)},Nn.xor=uu,Nn.xorBy=au,Nn.xorWith=cu,Nn.zip=su,Nn.zipObject=function(t,e){return hi(t||[],e||[],Qn)},Nn.zipObjectDeep=function(t,e){return hi(t||[],e||[],Jr)},Nn.zipWith=fu,Nn.entries=Fa,Nn.entriesIn=Na,Nn.extend=ma,Nn.extendWith=ba,uc(Nn,Nn),Nn.add=yc,Nn.attempt=Xa,Nn.camelCase=qa,Nn.capitalize=La,Nn.ceil=gc,Nn.clamp=function(t,e,n){return n===r&&(n=e,e=r),n!==r&&(n=(n=va(n))==n?n:0),e!==r&&(e=(e=va(e))==e?e:0),or(va(t),e,n)},Nn.clone=function(t){return ur(t,4)},Nn.cloneDeep=function(t){return ur(t,5)},Nn.cloneDeepWith=function(t,e){return ur(t,5,e=\"function\"==typeof e?e:r)},Nn.cloneWith=function(t,e){return ur(t,4,e=\"function\"==typeof e?e:r)},Nn.conformsTo=function(t,e){return null==e||ar(t,e,Ra(e))},Nn.deburr=Ba,Nn.defaultTo=function(t,e){return null==t||t!=t?e:t},Nn.divide=mc,Nn.endsWith=function(t,e,n){t=ya(t),e=ui(e);var i=t.length,o=n=n===r?i:or(ha(n),0,i);return(n-=e.length)>=0&&t.slice(n,o)==e},Nn.eq=Du,Nn.escape=function(t){return(t=ya(t))&&Z.test(t)?t.replace(H,tn):t},Nn.escapeRegExp=function(t){return(t=ya(t))&&et.test(t)?t.replace(tt,\"\\\\$&\"):t},Nn.every=function(t,e,n){var i=$u(t)?Ae:pr;return n&&yo(t,e,n)&&(e=r),i(t,oo(e,3))},Nn.find=vu,Nn.findIndex=Bo,Nn.findKey=function(t,e){return Ue(t,oo(e,3),gr)},Nn.findLast=_u,Nn.findLastIndex=$o,Nn.findLastKey=function(t,e){return Ue(t,oo(e,3),mr)},Nn.floor=bc,Nn.forEach=yu,Nn.forEachRight=gu,Nn.forIn=function(t,e){return null==t?t:_r(t,oo(e,3),Pa)},Nn.forInRight=function(t,e){return null==t?t:yr(t,oo(e,3),Pa)},Nn.forOwn=function(t,e){return t&&gr(t,oo(e,3))},Nn.forOwnRight=function(t,e){return t&&mr(t,oo(e,3))},Nn.get=Oa,Nn.gt=qu,Nn.gte=Lu,Nn.has=function(t,e){return null!=t&&po(t,e,Or)},Nn.hasIn=Aa,Nn.head=Ho,Nn.identity=nc,Nn.includes=function(t,e,n,r){t=Hu(t)?t:Da(t),n=n&&!r?ha(n):0;var i=t.length;return n<0&&(n=_n(i+n,0)),ua(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&Ne(t,e,n)>-1},Nn.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ha(n);return i<0&&(i=_n(r+i,0)),Ne(t,e,i)},Nn.inRange=function(t,e,n){return e=pa(e),n===r?(n=e,e=0):n=pa(n),function(t,e,n){return t>=yn(e,n)&&t<_n(e,n)}(t=va(t),e,n)},Nn.invoke=ka,Nn.isArguments=Bu,Nn.isArray=$u,Nn.isArrayBuffer=Wu,Nn.isArrayLike=Hu,Nn.isArrayLikeObject=Gu,Nn.isBoolean=function(t){return!0===t||!1===t||ta(t)&&Sr(t)==_},Nn.isBuffer=Zu,Nn.isDate=Ku,Nn.isElement=function(t){return ta(t)&&1===t.nodeType&&!ra(t)},Nn.isEmpty=function(t){if(null==t)return!0;if(Hu(t)&&($u(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Zu(t)||ca(t)||Bu(t)))return!t.length;var e=lo(t);if(e==w||e==A)return!t.size;if(wo(t))return!Mr(t).length;for(var n in t)if(zt.call(t,n))return!1;return!0},Nn.isEqual=function(t,e){return Rr(t,e)},Nn.isEqualWith=function(t,e,n){var i=(n=\"function\"==typeof n?n:r)?n(t,e):r;return i===r?Rr(t,e,r,n):!!i},Nn.isError=Vu,Nn.isFinite=function(t){return\"number\"==typeof t&&$e(t)},Nn.isFunction=Ju,Nn.isInteger=Xu,Nn.isLength=Yu,Nn.isMap=ea,Nn.isMatch=function(t,e){return t===e||Pr(t,e,ao(e))},Nn.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:r,Pr(t,e,ao(e),n)},Nn.isNaN=function(t){return na(t)&&t!=+t},Nn.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Cr(t)},Nn.isNil=function(t){return null==t},Nn.isNull=function(t){return null===t},Nn.isNumber=na,Nn.isObject=Qu,Nn.isObjectLike=ta,Nn.isPlainObject=ra,Nn.isRegExp=ia,Nn.isSafeInteger=function(t){return Xu(t)&&t>=-9007199254740991&&t<=f},Nn.isSet=oa,Nn.isString=ua,Nn.isSymbol=aa,Nn.isTypedArray=ca,Nn.isUndefined=function(t){return t===r},Nn.isWeakMap=function(t){return ta(t)&&lo(t)==k},Nn.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==Sr(t)},Nn.join=function(t,e){return null==t?\"\":dn.call(t,e)},Nn.kebabCase=$a,Nn.last=Vo,Nn.lastIndexOf=function(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=ha(n))<0?_n(i+o,0):yn(o,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Fe(t,qe,o,!0)},Nn.lowerCase=Wa,Nn.lowerFirst=Ha,Nn.lt=sa,Nn.lte=fa,Nn.max=function(t){return t&&t.length?hr(t,nc,xr):r},Nn.maxBy=function(t,e){return t&&t.length?hr(t,oo(e,2),xr):r},Nn.mean=function(t){return Le(t,nc)},Nn.meanBy=function(t,e){return Le(t,oo(e,2))},Nn.min=function(t){return t&&t.length?hr(t,nc,Tr):r},Nn.minBy=function(t,e){return t&&t.length?hr(t,oo(e,2),Tr):r},Nn.stubArray=dc,Nn.stubFalse=vc,Nn.stubObject=function(){return{}},Nn.stubString=function(){return\"\"},Nn.stubTrue=function(){return!0},Nn.multiply=wc,Nn.nth=function(t,e){return t&&t.length?qr(t,ha(e)):r},Nn.noConflict=function(){return fe._===this&&(fe._=Nt),this},Nn.noop=ac,Nn.now=Ou,Nn.pad=function(t,e,n){t=ya(t);var r=(e=ha(e))?sn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Li(de(i),n)+t+Li(pe(i),n)},Nn.padEnd=function(t,e,n){t=ya(t);var r=(e=ha(e))?sn(t):0;return e&&r<e?t+Li(e-r,n):t},Nn.padStart=function(t,e,n){t=ya(t);var r=(e=ha(e))?sn(t):0;return e&&r<e?Li(e-r,n)+t:t},Nn.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),mn(ya(t).replace(nt,\"\"),e||0)},Nn.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&yo(t,e,n)&&(e=n=r),n===r&&(\"boolean\"==typeof e?(n=e,e=r):\"boolean\"==typeof t&&(n=t,t=r)),t===r&&e===r?(t=0,e=1):(t=pa(t),e===r?(e=t,t=0):e=pa(e)),t>e){var i=t;t=e,e=i}if(n||t%1||e%1){var o=bn();return yn(t+o*(e-t+ue(\"1e-\"+((o+\"\").length-1))),e)}return Hr(t,e)},Nn.reduce=function(t,e,n){var r=$u(t)?Ce:We,i=arguments.length<3;return r(t,oo(e,4),n,i,fr)},Nn.reduceRight=function(t,e,n){var r=$u(t)?ze:We,i=arguments.length<3;return r(t,oo(e,4),n,i,lr)},Nn.repeat=function(t,e,n){return e=(n?yo(t,e,n):e===r)?1:ha(e),Gr(ya(t),e)},Nn.replace=function(){var t=arguments,e=ya(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Nn.result=function(t,e,n){var i=-1,o=(e=_i(e,t)).length;for(o||(o=1,t=r);++i<o;){var u=null==t?r:t[Uo(e[i])];u===r&&(i=o,u=n),t=Ju(u)?u.call(t):u}return t},Nn.round=jc,Nn.runInContext=t,Nn.sample=function(t){return($u(t)?Vn:Kr)(t)},Nn.size=function(t){if(null==t)return 0;if(Hu(t))return ua(t)?sn(t):t.length;var e=lo(t);return e==w||e==A?t.size:Mr(t).length},Nn.snakeCase=Ga,Nn.some=function(t,e,n){var i=$u(t)?Me:ei;return n&&yo(t,e,n)&&(e=r),i(t,oo(e,3))},Nn.sortedIndex=function(t,e){return ni(t,e)},Nn.sortedIndexBy=function(t,e,n){return ri(t,e,oo(n,2))},Nn.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=ni(t,e);if(r<n&&Du(t[r],e))return r}return-1},Nn.sortedLastIndex=function(t,e){return ni(t,e,!0)},Nn.sortedLastIndexBy=function(t,e,n){return ri(t,e,oo(n,2),!0)},Nn.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=ni(t,e,!0)-1;if(Du(t[n],e))return n}return-1},Nn.startCase=Za,Nn.startsWith=function(t,e,n){return t=ya(t),n=null==n?0:or(ha(n),0,t.length),e=ui(e),t.slice(n,n+e.length)==e},Nn.subtract=Sc,Nn.sum=function(t){return t&&t.length?He(t,nc):0},Nn.sumBy=function(t,e){return t&&t.length?He(t,oo(e,2)):0},Nn.template=function(t,e,n){var i=Nn.templateSettings;n&&yo(t,e,n)&&(e=r),t=ya(t),e=wa({},e,i,Vi);var o=wa({},e.imports,i.imports,Vi),u=Ra(o),a=Ve(o,u);xe(u,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,f=0,l=e.interpolate||gt,p=\"__p += '\",h=Ot((e.escape||gt).source+\"|\"+l.source+\"|\"+(l===J?ft:gt).source+\"|\"+(e.evaluate||gt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(zt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ne+\"]\")+\"\\n\";t.replace(h,function(e,n,r,i,o,u){return r||(r=i),p+=t.slice(f,u).replace(mt,en),n&&(c=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(s=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),f=u+e.length,e}),p+=\"';\\n\";var v=zt.call(e,\"variable\")&&e.variable;if(v){if(ct.test(v))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(L,\"\"):p).replace(B,\"$1\").replace($,\"$1;\"),p=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var _=Xa(function(){return jt(u,d+\"return \"+p).apply(r,a)});if(_.source=p,Vu(_))throw _;return _},Nn.times=function(t,e){if((t=ha(t))<1||t>f)return[];var n=p,r=yn(t,p);e=oo(e),t-=p;for(var i=Ge(r,e);++n<t;)e(n);return i},Nn.toFinite=pa,Nn.toInteger=ha,Nn.toLength=da,Nn.toLower=function(t){return ya(t).toLowerCase()},Nn.toNumber=va,Nn.toSafeInteger=function(t){return t?or(ha(t),-9007199254740991,f):0===t?t:0},Nn.toString=ya,Nn.toUpper=function(t){return ya(t).toUpperCase()},Nn.trim=function(t,e,n){if((t=ya(t))&&(n||e===r))return Ze(t);if(!t||!(e=ui(e)))return t;var i=fn(t),o=fn(e);return gi(i,Xe(i,o),Ye(i,o)+1).join(\"\")},Nn.trimEnd=function(t,e,n){if((t=ya(t))&&(n||e===r))return t.slice(0,ln(t)+1);if(!t||!(e=ui(e)))return t;var i=fn(t);return gi(i,0,Ye(i,fn(e))+1).join(\"\")},Nn.trimStart=function(t,e,n){if((t=ya(t))&&(n||e===r))return t.replace(nt,\"\");if(!t||!(e=ui(e)))return t;var i=fn(t);return gi(i,Xe(i,fn(e))).join(\"\")},Nn.truncate=function(t,e){var n=30,i=\"...\";if(Qu(e)){var o=\"separator\"in e?e.separator:o;n=\"length\"in e?ha(e.length):n,i=\"omission\"in e?ui(e.omission):i}var u=(t=ya(t)).length;if(nn(t)){var a=fn(t);u=a.length}if(n>=u)return t;var c=n-sn(i);if(c<1)return i;var s=a?gi(a,0,c).join(\"\"):t.slice(0,c);if(o===r)return s+i;if(a&&(c+=s.length-c),ia(o)){if(t.slice(c).search(o)){var f,l=s;for(o.global||(o=Ot(o.source,ya(lt.exec(o))+\"g\")),o.lastIndex=0;f=o.exec(l);)var p=f.index;s=s.slice(0,p===r?c:p)}}else if(t.indexOf(ui(o),c)!=c){var h=s.lastIndexOf(o);h>-1&&(s=s.slice(0,h))}return s+i},Nn.unescape=function(t){return(t=ya(t))&&G.test(t)?t.replace(W,pn):t},Nn.uniqueId=function(t){var e=++Mt;return ya(t)+e},Nn.upperCase=Ka,Nn.upperFirst=Va,Nn.each=yu,Nn.eachRight=gu,Nn.first=Ho,uc(Nn,(_c={},gr(Nn,function(t,e){zt.call(Nn.prototype,e)||(_c[e]=t)}),_c),{chain:!1}),Nn.VERSION=\"4.18.1\",xe([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Nn[t].placeholder=Nn}),xe([\"drop\",\"take\"],function(t,e){Bn.prototype[t]=function(n){n=n===r?1:_n(ha(n),0);var i=this.__filtered__&&!e?new Bn(this):this.clone();return i.__filtered__?i.__takeCount__=yn(n,i.__takeCount__):i.__views__.push({size:yn(n,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Bn.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),xe([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=1==n||3==n;Bn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:oo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),xe([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");Bn.prototype[t]=function(){return this[n](1).value()[0]}}),xe([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");Bn.prototype[t]=function(){return this.__filtered__?new Bn(this):this[n](1)}}),Bn.prototype.compact=function(){return this.filter(nc)},Bn.prototype.find=function(t){return this.filter(t).head()},Bn.prototype.findLast=function(t){return this.reverse().find(t)},Bn.prototype.invokeMap=Zr(function(t,e){return\"function\"==typeof t?new Bn(this):this.map(function(n){return Er(n,t,e)})}),Bn.prototype.reject=function(t){return this.filter(Mu(oo(t)))},Bn.prototype.slice=function(t,e){t=ha(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Bn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==r&&(n=(e=ha(e))<0?n.dropRight(-e):n.take(e-t)),n)},Bn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Bn.prototype.toArray=function(){return this.take(p)},gr(Bn.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Nn[i?\"take\"+(\"last\"==e?\"Right\":\"\"):e],u=i||/^find/.test(e);o&&(Nn.prototype[e]=function(){var e=this.__wrapped__,a=i?[1]:arguments,c=e instanceof Bn,s=a[0],f=c||$u(e),l=function(t){var e=o.apply(Nn,Pe([t],a));return i&&p?e[0]:e};f&&n&&\"function\"==typeof s&&1!=s.length&&(c=f=!1);var p=this.__chain__,h=!!this.__actions__.length,d=u&&!p,v=c&&!h;if(!u&&f){e=v?e:new Bn(this);var _=t.apply(e,a);return _.__actions__.push({func:pu,args:[l],thisArg:r}),new Ln(_,p)}return d&&v?t.apply(this,a):(_=this.thru(l),d?i?_.value()[0]:_.value():_)})}),xe([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=Et[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Nn.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply($u(i)?i:[],t)}return this[n](function(n){return e.apply($u(n)?n:[],t)})}}),gr(Bn.prototype,function(t,e){var n=Nn[e];if(n){var r=n.name+\"\";zt.call(kn,r)||(kn[r]=[]),kn[r].push({name:e,func:n})}}),kn[Fi(r,2).name]=[{name:\"wrapper\",func:r}],Bn.prototype.clone=function(){var t=new Bn(this.__wrapped__);return t.__actions__=Ai(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ai(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ai(this.__views__),t},Bn.prototype.reverse=function(){if(this.__filtered__){var t=new Bn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Bn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=$u(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],u=o.size;switch(o.type){case\"drop\":t+=u;break;case\"dropRight\":e-=u;break;case\"take\":e=yn(e,t+u);break;case\"takeRight\":t=_n(t,e-u)}}return{start:t,end:e}}(0,i,this.__views__),u=o.start,a=o.end,c=a-u,s=r?a:u-1,f=this.__iteratees__,l=f.length,p=0,h=yn(c,this.__takeCount__);if(!n||!r&&i==c&&h==c)return li(t,this.__actions__);var d=[];t:for(;c--&&p<h;){for(var v=-1,_=t[s+=e];++v<l;){var y=f[v],g=y.iteratee,m=y.type,b=g(_);if(2==m)_=b;else if(!b){if(1==m)continue t;break t}}d[p++]=_}return d},Nn.prototype.at=hu,Nn.prototype.chain=function(){return lu(this)},Nn.prototype.commit=function(){return new Ln(this.value(),this.__chain__)},Nn.prototype.next=function(){this.__values__===r&&(this.__values__=la(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Nn.prototype.plant=function(t){for(var e,n=this;n instanceof qn;){var i=No(n);i.__index__=0,i.__values__=r,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e},Nn.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Bn){var e=t;return this.__actions__.length&&(e=new Bn(this)),(e=e.reverse()).__actions__.push({func:pu,args:[Qo],thisArg:r}),new Ln(e,this.__chain__)}return this.thru(Qo)},Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},Nn.prototype.first=Nn.prototype.head,Xt&&(Nn.prototype[Xt]=function(){return this}),Nn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(fe._=hn,define(function(){return hn})):pe?((pe.exports=hn)._=hn,le._=hn):fe._=hn}.call(this)},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,e,n){\"use strict\";n.d(e,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createCBAMPGSPaymentStrategy:()=>x});var t,e=n(315),i=n(9440);class o extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class u extends o{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class a extends o{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class c extends u{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(t||(t={}));class s extends o{constructor(e){super(function(e){switch(e){case t.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case t.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case t.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case t.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var f,l=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})},p=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n};class h{constructor(t){this._paymentIntegrationService=t}execute(t,e){var n,r;return this._isHostedPaymentFormEnabled(null===(n=t.payment)||void 0===n?void 0:n.methodId,null===(r=t.payment)||void 0===r?void 0:r.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(t,e):this._executeWithoutHostedForm(t,e)}initialize(t){if(!this._isHostedPaymentFormEnabled(null==t?void 0:t.methodId,null==t?void 0:t.gatewayId)||!this._isHostedFieldAvailable(t))return this._shouldRenderHostedForm=!1,Promise.resolve();const e=t&&t.creditCard&&t.creditCard.form,n=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:r=\"\"}={}}=n.getStoreConfigOrThrow();if(!e)throw new u;const i=this._paymentIntegrationService.createHostedForm(r,e);return i.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=i,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new a)}_executeWithoutHostedForm(t,e){return l(this,void 0,void 0,function*(){const{payment:n}=t,r=p(t,[\"payment\"]),i=n&&n.paymentData;if(!n||!i)throw new c([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(r,e),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:i}))})}_executeWithHostedForm(e,n){return l(this,void 0,void 0,function*(){const{payment:r}=e,i=p(e,[\"payment\"]),o=this._hostedForm;if(!o)throw new s(t.PaymentNotInitialized);if(!r||!r.methodId)throw new c([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(i,n),yield o.validate().then(()=>o.submit(r))})}_isHostedPaymentFormEnabled(t,e){return!!t&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t,e).config.isHostedFormEnabled}_isHostedFieldAvailable(t){return!(0,i.values)(t&&t.creditCard&&t.creditCard.form.fields).every(i.isNil)}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(f||(f={}));class d extends o{constructor(t){super(function(t){switch(t){case f.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case f.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case f.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case f.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case f.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case f.MissingCheckoutConfig:case f.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case f.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case f.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case f.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case f.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case f.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case f.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class v extends o{constructor(t){super(t||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}const _={body:{},headers:{},status:0};class y extends o{constructor(t,{message:e,errors:n}={}){const{body:r,headers:i,status:o}=t||_;super(e||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=i,this.status=o,this.errors=n||[]}}var g;!function(t){t.ACKNOWLEDGE=\"ACKNOWLEDGE\",t.FINALIZE=\"FINALIZE\",t.INITIALIZE=\"INITIALIZE\"}(g||(g={}));const m=g;var b=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};class w extends h{constructor(t,e){super(t),this.paymentIntegrationService=t,this.cbaMGPSScriptLoader=e,this.sessionId=\"\"}initialize(e){const n=Object.create(null,{initialize:{get:()=>super.initialize}});return b(this,void 0,void 0,function*(){yield n.initialize.call(this,e);const{methodId:r}=e;yield this.paymentIntegrationService.loadPaymentMethod(r);const i=this.paymentIntegrationService.getState(),o=i.getPaymentMethodOrThrow(r);if(!function(t){return\"object\"==typeof t&&null!==t&&\"initializationData\"in t&&\"object\"==typeof t.initializationData&&null!==t.initializationData&&\"merchantId\"in t.initializationData&&\"string\"==typeof t.initializationData.merchantId&&(\"boolean\"==typeof t.initializationData.isTestModeFlagEnabled||void 0===t.initializationData.isTestModeFlagEnabled)}(o))throw new d(f.MissingPaymentMethod);const{clientToken:u,initializationData:{isTestModeFlagEnabled:a=!1,merchantId:c},config:{is3dsEnabled:l}}=o;if(l){if(this.threeDSjs=yield this.cbaMGPSScriptLoader.load(a),!this.threeDSjs)throw new s(t.PaymentNotInitialized);if(!u||!c)throw new d(f.MissingPaymentMethod);if(this.sessionId=u,this.locale=i.getLocale(),!this.locale)throw new d(f.MissingCart);yield this.threeDSjs.configure({merchantId:c,sessionId:this.sessionId,callback:()=>{var t;if(null===(t=this.threeDSjs)||void 0===t?void 0:t.isConfigured())return this.paymentIntegrationService.getState();throw new v(\"Failed to configure 3DS API.\")},configuration:{userLanguage:this.locale,wsVersion:62}})}return Promise.resolve()})}execute(t,e){const n=Object.create(null,{execute:{get:()=>super.execute}});return b(this,void 0,void 0,function*(){const{payment:r}=t,o=r&&r.paymentData;if(!r||!o)throw new c([\"payment.paymentData\"]);const u=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r.methodId),{is3dsEnabled:a}=u.config;if(a){const e=Object.assign(Object.assign({},o),{threeDSecure:{token:this.sessionId}});t.payment&&(t.payment.paymentData=e)}return n.execute.call(this,t,e).catch(t=>{if(!a||!(t=>\"object\"==typeof t&&null!==t&&\"body\"in t)(t)||!(0,i.some)(t.body.errors,{code:\"three_d_secure_required\"}))return Promise.reject(t);const e=this.paymentIntegrationService.getState(),n=e.getOrder(),{storeProfile:{storeId:r}}=e.getStoreConfigOrThrow();if(!n||!this.sessionId)throw new d(f.MissingCheckout);const o=`${r}_${n.orderId}`;if(\"object\"!=typeof(u=t.body)||null===u||!(\"three_ds_result\"in u)||\"object\"!=typeof u.three_ds_result||null===u.three_ds_result||!(\"token\"in u.three_ds_result)||\"string\"!=typeof u.three_ds_result.token)throw new y;var u;const{three_ds_result:{token:c}}=t.body;return c?this.initiateAuthentication(o,c):Promise.reject(t)})})}finalize(t){return b(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState();return e.getOrder()&&e.getPaymentStatus()===m.FINALIZE?(yield this.paymentIntegrationService.finalizeOrder(t),Promise.resolve()):Promise.reject(new a)})}deinitialize(){return this.threeDSjs=void 0,this.sessionId=\"\",super.deinitialize()}initiateAuthentication(e,n){return b(this,void 0,void 0,function*(){const r=yield new Promise((r,i)=>{if(!this.threeDSjs)throw new s(t.PaymentNotInitialized);this.threeDSjs.initiateAuthentication(e,n,t=>{const e=t.error;return e?i(new v(e.msg)):this.threeDSjs&&\"PROCEED\"===t.gatewayRecommendation?r(t.restApiResponse):i(new v)})});if(r.transaction&&\"AUTHENTICATION_AVAILABLE\"===r.transaction.authenticationStatus)return this.authenticatePayer(e,n);throw new v})}authenticatePayer(e,n,r=1){return b(this,void 0,void 0,function*(){return new Promise((o,u)=>{if(!this.threeDSjs)return u(new s(t.PaymentNotInitialized));this.threeDSjs.authenticatePayer(e,n,t=>b(this,void 0,void 0,function*(){const o=t.error;return o?o.cause&&\"SERVER_BUSY\"===o.cause&&r<5?(yield new Promise(t=>setTimeout(t,3e3)),this.authenticatePayer(e,n,++r)):u(new v):new Promise(i.noop)}),{fullScreenRedirect:!0})})})}}class j extends o{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class S{constructor(t,e=window){this._scriptLoader=t,this._window=e}load(t){return e=this,n=void 0,i=function*(){if(yield this._scriptLoader.loadScript(`//${t?\"test\":\"ap\"}-gateway.mastercard.com/static/threeDS/1.3.0/three-ds.min.js`),!this._window.ThreeDS)throw new j;return this._window.ThreeDS},new((r=void 0)||(r=Promise))(function(t,o){function u(t){try{c(i.next(t))}catch(t){o(t)}}function a(t){try{c(i.throw(t))}catch(t){o(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(t){t(n)})).then(u,a)}c((i=i.apply(e,n||[])).next())});var e,n,r,i}}const x=Object.assign(t=>new w(t,new S((0,e.vQ)())),{resolveIds:[{id:\"cba_mpgs\"}]})})(),module.exports=r})();\n//# sourceMappingURL=cba-mpgs.js.map"
  },
  {
    "path": "dist/cjs/integrations/checkoutcom-custom.js",
    "content": "(()=>{var t={9165(t,n,r){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(t){var n=new e.default;return new i.default(n,t)};var e=r(9828),i=r(5470)},9828(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var r=function(){function t(){}return t.prototype.build=function(t,n,r){var e=this,i=document.createElement(\"form\");return i.style.display=\"none\",i.setAttribute(\"action\",t),i.setAttribute(\"method\",\"POST\"),i.setAttribute(\"target\",r||\"_top\"),Object.keys(n).forEach(function(t){var r=n[t];i.appendChild(e._createInput(r,t))}),i},t.prototype._createInput=function(t,n){var r=document.createElement(\"input\");return r.setAttribute(\"name\",n),r.setAttribute(\"type\",\"hidden\"),r.setAttribute(\"value\",t),r},t}();n.default=r},5470(t,n,r){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=r(9783),i=function(){function t(t,n){this._formBuilder=t,this._options=n}return t.prototype.postForm=function(t,n,r,e){var i=this._formBuilder.build(this._prependHost(t),n,e);window.addEventListener(\"unload\",function t(){window.removeEventListener(\"unload\",t),r&&r()}),document.body.appendChild(i),i.submit()},t.prototype._prependHost=function(t){return this._options&&this._options.host&&!(0,e.isAbsoluteUrl)(t)?(0,e.joinPaths)(this._options.host,t):t},t}();n.default=i},8686(t,n,r){\"use strict\";n.createFormPoster=void 0;var e=r(9165);Object.defineProperty(n,\"createFormPoster\",{enumerable:!0,get:function(){return e.default}});r(5470)},9783(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.isAbsoluteUrl=function(t){return/^https?:\\/\\//.test(t)},n.joinPaths=function(t,n){return\"\".concat((r=t,r.replace(/\\/$/,\"\")),\"/\").concat(function(t){return t.replace(/^\\//,\"\")}(n));var r}},9440(t,n,r){t=r.nmd(t),function(){var e,i=\"Expected a function\",u=\"__lodash_hash_undefined__\",o=\"__lodash_placeholder__\",a=32,c=128,f=1/0,l=9007199254740991,s=NaN,h=4294967295,p=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],v=\"[object Arguments]\",_=\"[object Array]\",d=\"[object Boolean]\",y=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",O=\"[object Number]\",x=\"[object Object]\",j=\"[object Promise]\",I=\"[object RegExp]\",S=\"[object Set]\",P=\"[object String]\",A=\"[object Symbol]\",E=\"[object WeakMap]\",z=\"[object ArrayBuffer]\",k=\"[object DataView]\",R=\"[object Float32Array]\",F=\"[object Float64Array]\",C=\"[object Int8Array]\",D=\"[object Int16Array]\",W=\"[object Int32Array]\",L=\"[object Uint8Array]\",N=\"[object Uint8ClampedArray]\",T=\"[object Uint16Array]\",U=\"[object Uint32Array]\",B=/\\b__p \\+= '';/g,M=/\\b(__p \\+=) '' \\+/g,$=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,H=/&(?:amp|lt|gt|quot|#39);/g,q=/[&<>\"']/g,Z=RegExp(H.source),K=RegExp(q.source),G=/<%-([\\s\\S]+?)%>/g,V=/<%([\\s\\S]+?)%>/g,J=/<%=([\\s\\S]+?)%>/g,Y=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,nt=RegExp(tt.source),rt=/^\\s+/,et=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ut=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ot=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,ft=/\\\\(\\\\)?/g,lt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,st=/\\w*$/,ht=/^[-+]0x[0-9a-f]+$/i,pt=/^0b[01]+$/i,vt=/^\\[object .+?Constructor\\]$/,_t=/^0o[0-7]+$/i,dt=/^(?:0|[1-9]\\d*)$/,yt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",Ot=\"\\\\u2700-\\\\u27bf\",xt=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",jt=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",It=\"\\\\ufe0e\\\\ufe0f\",St=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Pt=\"[\"+bt+\"]\",At=\"[\"+St+\"]\",Et=\"[\"+wt+\"]\",zt=\"\\\\d+\",kt=\"[\"+Ot+\"]\",Rt=\"[\"+xt+\"]\",Ft=\"[^\"+bt+St+zt+Ot+xt+jt+\"]\",Ct=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Dt=\"[^\"+bt+\"]\",Wt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Lt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Nt=\"[\"+jt+\"]\",Tt=\"\\\\u200d\",Ut=\"(?:\"+Rt+\"|\"+Ft+\")\",Bt=\"(?:\"+Nt+\"|\"+Ft+\")\",Mt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",$t=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Ht=\"(?:\"+Et+\"|\"+Ct+\")?\",qt=\"[\"+It+\"]?\",Zt=qt+Ht+\"(?:\"+Tt+\"(?:\"+[Dt,Wt,Lt].join(\"|\")+\")\"+qt+Ht+\")*\",Kt=\"(?:\"+[kt,Wt,Lt].join(\"|\")+\")\"+Zt,Gt=\"(?:\"+[Dt+Et+\"?\",Et,Wt,Lt,Pt].join(\"|\")+\")\",Vt=RegExp(\"['’]\",\"g\"),Jt=RegExp(Et,\"g\"),Yt=RegExp(Ct+\"(?=\"+Ct+\")|\"+Gt+Zt,\"g\"),Qt=RegExp([Nt+\"?\"+Rt+\"+\"+Mt+\"(?=\"+[At,Nt,\"$\"].join(\"|\")+\")\",Bt+\"+\"+$t+\"(?=\"+[At,Nt+Ut,\"$\"].join(\"|\")+\")\",Nt+\"?\"+Ut+\"+\"+Mt,Nt+\"+\"+$t,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",zt,Kt].join(\"|\"),\"g\"),Xt=RegExp(\"[\"+Tt+bt+wt+It+\"]\"),tn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,nn=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],rn=-1,en={};en[R]=en[F]=en[C]=en[D]=en[W]=en[L]=en[N]=en[T]=en[U]=!0,en[v]=en[_]=en[z]=en[d]=en[k]=en[y]=en[g]=en[m]=en[w]=en[O]=en[x]=en[I]=en[S]=en[P]=en[E]=!1;var un={};un[v]=un[_]=un[z]=un[k]=un[d]=un[y]=un[R]=un[F]=un[C]=un[D]=un[W]=un[w]=un[O]=un[x]=un[I]=un[S]=un[P]=un[A]=un[L]=un[N]=un[T]=un[U]=!0,un[g]=un[m]=un[E]=!1;var on={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},an=parseFloat,cn=parseInt,fn=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,ln=\"object\"==typeof self&&self&&self.Object===Object&&self,sn=fn||ln||Function(\"return this\")(),hn=n&&!n.nodeType&&n,pn=hn&&t&&!t.nodeType&&t,vn=pn&&pn.exports===hn,_n=vn&&fn.process,dn=function(){try{return pn&&pn.require&&pn.require(\"util\").types||_n&&_n.binding&&_n.binding(\"util\")}catch(t){}}(),yn=dn&&dn.isArrayBuffer,gn=dn&&dn.isDate,mn=dn&&dn.isMap,bn=dn&&dn.isRegExp,wn=dn&&dn.isSet,On=dn&&dn.isTypedArray;function xn(t,n,r){switch(r.length){case 0:return t.call(n);case 1:return t.call(n,r[0]);case 2:return t.call(n,r[0],r[1]);case 3:return t.call(n,r[0],r[1],r[2])}return t.apply(n,r)}function jn(t,n,r,e){for(var i=-1,u=null==t?0:t.length;++i<u;){var o=t[i];n(e,o,r(o),t)}return e}function In(t,n){for(var r=-1,e=null==t?0:t.length;++r<e&&!1!==n(t[r],r,t););return t}function Sn(t,n){for(var r=null==t?0:t.length;r--&&!1!==n(t[r],r,t););return t}function Pn(t,n){for(var r=-1,e=null==t?0:t.length;++r<e;)if(!n(t[r],r,t))return!1;return!0}function An(t,n){for(var r=-1,e=null==t?0:t.length,i=0,u=[];++r<e;){var o=t[r];n(o,r,t)&&(u[i++]=o)}return u}function En(t,n){return!(null==t||!t.length)&&Tn(t,n,0)>-1}function zn(t,n,r){for(var e=-1,i=null==t?0:t.length;++e<i;)if(r(n,t[e]))return!0;return!1}function kn(t,n){for(var r=-1,e=null==t?0:t.length,i=Array(e);++r<e;)i[r]=n(t[r],r,t);return i}function Rn(t,n){for(var r=-1,e=n.length,i=t.length;++r<e;)t[i+r]=n[r];return t}function Fn(t,n,r,e){var i=-1,u=null==t?0:t.length;for(e&&u&&(r=t[++i]);++i<u;)r=n(r,t[i],i,t);return r}function Cn(t,n,r,e){var i=null==t?0:t.length;for(e&&i&&(r=t[--i]);i--;)r=n(r,t[i],i,t);return r}function Dn(t,n){for(var r=-1,e=null==t?0:t.length;++r<e;)if(n(t[r],r,t))return!0;return!1}var Wn=$n(\"length\");function Ln(t,n,r){var e;return r(t,function(t,r,i){if(n(t,r,i))return e=r,!1}),e}function Nn(t,n,r,e){for(var i=t.length,u=r+(e?1:-1);e?u--:++u<i;)if(n(t[u],u,t))return u;return-1}function Tn(t,n,r){return n==n?function(t,n,r){for(var e=r-1,i=t.length;++e<i;)if(t[e]===n)return e;return-1}(t,n,r):Nn(t,Bn,r)}function Un(t,n,r,e){for(var i=r-1,u=t.length;++i<u;)if(e(t[i],n))return i;return-1}function Bn(t){return t!=t}function Mn(t,n){var r=null==t?0:t.length;return r?Zn(t,n)/r:s}function $n(t){return function(n){return null==n?e:n[t]}}function Hn(t){return function(n){return null==t?e:t[n]}}function qn(t,n,r,e,i){return i(t,function(t,i,u){r=e?(e=!1,t):n(r,t,i,u)}),r}function Zn(t,n){for(var r,i=-1,u=t.length;++i<u;){var o=n(t[i]);o!==e&&(r=r===e?o:r+o)}return r}function Kn(t,n){for(var r=-1,e=Array(t);++r<t;)e[r]=n(r);return e}function Gn(t){return t?t.slice(0,sr(t)+1).replace(rt,\"\"):t}function Vn(t){return function(n){return t(n)}}function Jn(t,n){return kn(n,function(n){return t[n]})}function Yn(t,n){return t.has(n)}function Qn(t,n){for(var r=-1,e=t.length;++r<e&&Tn(n,t[r],0)>-1;);return r}function Xn(t,n){for(var r=t.length;r--&&Tn(n,t[r],0)>-1;);return r}var tr=Hn({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),nr=Hn({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function rr(t){return\"\\\\\"+on[t]}function er(t){return Xt.test(t)}function ir(t){var n=-1,r=Array(t.size);return t.forEach(function(t,e){r[++n]=[e,t]}),r}function ur(t,n){return function(r){return t(n(r))}}function or(t,n){for(var r=-1,e=t.length,i=0,u=[];++r<e;){var a=t[r];a!==n&&a!==o||(t[r]=o,u[i++]=r)}return u}function ar(t){var n=-1,r=Array(t.size);return t.forEach(function(t){r[++n]=t}),r}function cr(t){var n=-1,r=Array(t.size);return t.forEach(function(t){r[++n]=[t,t]}),r}function fr(t){return er(t)?function(t){for(var n=Yt.lastIndex=0;Yt.test(t);)++n;return n}(t):Wn(t)}function lr(t){return er(t)?function(t){return t.match(Yt)||[]}(t):function(t){return t.split(\"\")}(t)}function sr(t){for(var n=t.length;n--&&et.test(t.charAt(n)););return n}var hr=Hn({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pr=function t(n){var r,et=(n=null==n?sn:pr.defaults(sn.Object(),n,pr.pick(sn,nn))).Array,bt=n.Date,wt=n.Error,Ot=n.Function,xt=n.Math,jt=n.Object,It=n.RegExp,St=n.String,Pt=n.TypeError,At=et.prototype,Et=Ot.prototype,zt=jt.prototype,kt=n[\"__core-js_shared__\"],Rt=Et.toString,Ft=zt.hasOwnProperty,Ct=0,Dt=(r=/[^.]+$/.exec(kt&&kt.keys&&kt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",Wt=zt.toString,Lt=Rt.call(jt),Nt=sn._,Tt=It(\"^\"+Rt.call(Ft).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Ut=vn?n.Buffer:e,Bt=n.Symbol,Mt=n.Uint8Array,$t=Ut?Ut.allocUnsafe:e,Ht=ur(jt.getPrototypeOf,jt),qt=jt.create,Zt=zt.propertyIsEnumerable,Kt=At.splice,Gt=Bt?Bt.isConcatSpreadable:e,Yt=Bt?Bt.iterator:e,Xt=Bt?Bt.toStringTag:e,on=function(){try{var t=cu(jt,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),fn=n.clearTimeout!==sn.clearTimeout&&n.clearTimeout,ln=bt&&bt.now!==sn.Date.now&&bt.now,hn=n.setTimeout!==sn.setTimeout&&n.setTimeout,pn=xt.ceil,_n=xt.floor,dn=jt.getOwnPropertySymbols,Wn=Ut?Ut.isBuffer:e,Hn=n.isFinite,vr=At.join,_r=ur(jt.keys,jt),dr=xt.max,yr=xt.min,gr=bt.now,mr=n.parseInt,br=xt.random,wr=At.reverse,Or=cu(n,\"DataView\"),xr=cu(n,\"Map\"),jr=cu(n,\"Promise\"),Ir=cu(n,\"Set\"),Sr=cu(n,\"WeakMap\"),Pr=cu(jt,\"create\"),Ar=Sr&&new Sr,Er={},zr=Wu(Or),kr=Wu(xr),Rr=Wu(jr),Fr=Wu(Ir),Cr=Wu(Sr),Dr=Bt?Bt.prototype:e,Wr=Dr?Dr.valueOf:e,Lr=Dr?Dr.toString:e;function Nr(t){if(ta(t)&&!$o(t)&&!(t instanceof Mr)){if(t instanceof Br)return t;if(Ft.call(t,\"__wrapped__\"))return Lu(t)}return new Br(t)}var Tr=function(){function t(){}return function(n){if(!Xo(n))return{};if(qt)return qt(n);t.prototype=n;var r=new t;return t.prototype=e,r}}();function Ur(){}function Br(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=e}function Mr(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function $r(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function Hr(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function qr(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function Zr(t){var n=-1,r=null==t?0:t.length;for(this.__data__=new qr;++n<r;)this.add(t[n])}function Kr(t){var n=this.__data__=new Hr(t);this.size=n.size}function Gr(t,n){var r=$o(t),e=!r&&Mo(t),i=!r&&!e&&Ko(t),u=!r&&!e&&!i&&ca(t),o=r||e||i||u,a=o?Kn(t.length,St):[],c=a.length;for(var f in t)!n&&!Ft.call(t,f)||o&&(\"length\"==f||i&&(\"offset\"==f||\"parent\"==f)||u&&(\"buffer\"==f||\"byteLength\"==f||\"byteOffset\"==f)||_u(f,c))||a.push(f);return a}function Vr(t){var n=t.length;return n?t[qe(0,n-1)]:e}function Jr(t,n){return ku(Si(t),ue(n,0,t.length))}function Yr(t){return ku(Si(t))}function Qr(t,n,r){(r!==e&&!To(t[n],r)||r===e&&!(n in t))&&ee(t,n,r)}function Xr(t,n,r){var i=t[n];Ft.call(t,n)&&To(i,r)&&(r!==e||n in t)||ee(t,n,r)}function te(t,n){for(var r=t.length;r--;)if(To(t[r][0],n))return r;return-1}function ne(t,n,r,e){return le(t,function(t,i,u){n(e,t,r(t),u)}),e}function re(t,n){return t&&Pi(n,za(n),t)}function ee(t,n,r){\"__proto__\"==n&&on?on(t,n,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[n]=r}function ie(t,n){for(var r=-1,i=n.length,u=et(i),o=null==t;++r<i;)u[r]=o?e:Ia(t,n[r]);return u}function ue(t,n,r){return t==t&&(r!==e&&(t=t<=r?t:r),n!==e&&(t=t>=n?t:n)),t}function oe(t,n,r,i,u,o){var a,c=1&n,f=2&n,l=4&n;if(r&&(a=u?r(t,i,u,o):r(t)),a!==e)return a;if(!Xo(t))return t;var s=$o(t);if(s){if(a=function(t){var n=t.length,r=new t.constructor(n);return n&&\"string\"==typeof t[0]&&Ft.call(t,\"index\")&&(r.index=t.index,r.input=t.input),r}(t),!c)return Si(t,a)}else{var h=su(t),p=h==m||h==b;if(Ko(t))return bi(t,c);if(h==x||h==v||p&&!u){if(a=f||p?{}:pu(t),!c)return f?function(t,n){return Pi(t,lu(t),n)}(t,function(t,n){return t&&Pi(n,ka(n),t)}(a,t)):function(t,n){return Pi(t,fu(t),n)}(t,re(a,t))}else{if(!un[h])return u?t:{};a=function(t,n,r){var e,i=t.constructor;switch(n){case z:return wi(t);case d:case y:return new i(+t);case k:return function(t,n){var r=n?wi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case R:case F:case C:case D:case W:case L:case N:case T:case U:return Oi(t,r);case w:return new i;case O:case P:return new i(t);case I:return function(t){var n=new t.constructor(t.source,st.exec(t));return n.lastIndex=t.lastIndex,n}(t);case S:return new i;case A:return e=t,Wr?jt(Wr.call(e)):{}}}(t,h,c)}}o||(o=new Kr);var _=o.get(t);if(_)return _;o.set(t,a),ua(t)?t.forEach(function(e){a.add(oe(e,n,r,e,t,o))}):na(t)&&t.forEach(function(e,i){a.set(i,oe(e,n,r,i,t,o))});var g=s?e:(l?f?nu:tu:f?ka:za)(t);return In(g||t,function(e,i){g&&(e=t[i=e]),Xr(a,i,oe(e,n,r,i,t,o))}),a}function ae(t,n,r){var i=r.length;if(null==t)return!i;for(t=jt(t);i--;){var u=r[i],o=n[u],a=t[u];if(a===e&&!(u in t)||!o(a))return!1}return!0}function ce(t,n,r){if(\"function\"!=typeof t)throw new Pt(i);return Pu(function(){t.apply(e,r)},n)}function fe(t,n,r,e){var i=-1,u=En,o=!0,a=t.length,c=[],f=n.length;if(!a)return c;r&&(n=kn(n,Vn(r))),e?(u=zn,o=!1):n.length>=200&&(u=Yn,o=!1,n=new Zr(n));t:for(;++i<a;){var l=t[i],s=null==r?l:r(l);if(l=e||0!==l?l:0,o&&s==s){for(var h=f;h--;)if(n[h]===s)continue t;c.push(l)}else u(n,s,e)||c.push(l)}return c}Nr.templateSettings={escape:G,evaluate:V,interpolate:J,variable:\"\",imports:{_:Nr}},Nr.prototype=Ur.prototype,Nr.prototype.constructor=Nr,Br.prototype=Tr(Ur.prototype),Br.prototype.constructor=Br,Mr.prototype=Tr(Ur.prototype),Mr.prototype.constructor=Mr,$r.prototype.clear=function(){this.__data__=Pr?Pr(null):{},this.size=0},$r.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},$r.prototype.get=function(t){var n=this.__data__;if(Pr){var r=n[t];return r===u?e:r}return Ft.call(n,t)?n[t]:e},$r.prototype.has=function(t){var n=this.__data__;return Pr?n[t]!==e:Ft.call(n,t)},$r.prototype.set=function(t,n){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Pr&&n===e?u:n,this},Hr.prototype.clear=function(){this.__data__=[],this.size=0},Hr.prototype.delete=function(t){var n=this.__data__,r=te(n,t);return!(r<0||(r==n.length-1?n.pop():Kt.call(n,r,1),--this.size,0))},Hr.prototype.get=function(t){var n=this.__data__,r=te(n,t);return r<0?e:n[r][1]},Hr.prototype.has=function(t){return te(this.__data__,t)>-1},Hr.prototype.set=function(t,n){var r=this.__data__,e=te(r,t);return e<0?(++this.size,r.push([t,n])):r[e][1]=n,this},qr.prototype.clear=function(){this.size=0,this.__data__={hash:new $r,map:new(xr||Hr),string:new $r}},qr.prototype.delete=function(t){var n=ou(this,t).delete(t);return this.size-=n?1:0,n},qr.prototype.get=function(t){return ou(this,t).get(t)},qr.prototype.has=function(t){return ou(this,t).has(t)},qr.prototype.set=function(t,n){var r=ou(this,t),e=r.size;return r.set(t,n),this.size+=r.size==e?0:1,this},Zr.prototype.add=Zr.prototype.push=function(t){return this.__data__.set(t,u),this},Zr.prototype.has=function(t){return this.__data__.has(t)},Kr.prototype.clear=function(){this.__data__=new Hr,this.size=0},Kr.prototype.delete=function(t){var n=this.__data__,r=n.delete(t);return this.size=n.size,r},Kr.prototype.get=function(t){return this.__data__.get(t)},Kr.prototype.has=function(t){return this.__data__.has(t)},Kr.prototype.set=function(t,n){var r=this.__data__;if(r instanceof Hr){var e=r.__data__;if(!xr||e.length<199)return e.push([t,n]),this.size=++r.size,this;r=this.__data__=new qr(e)}return r.set(t,n),this.size=r.size,this};var le=zi(ge),se=zi(me,!0);function he(t,n){var r=!0;return le(t,function(t,e,i){return r=!!n(t,e,i)}),r}function pe(t,n,r){for(var i=-1,u=t.length;++i<u;){var o=t[i],a=n(o);if(null!=a&&(c===e?a==a&&!aa(a):r(a,c)))var c=a,f=o}return f}function ve(t,n){var r=[];return le(t,function(t,e,i){n(t,e,i)&&r.push(t)}),r}function _e(t,n,r,e,i){var u=-1,o=t.length;for(r||(r=vu),i||(i=[]);++u<o;){var a=t[u];n>0&&r(a)?n>1?_e(a,n-1,r,e,i):Rn(i,a):e||(i[i.length]=a)}return i}var de=ki(),ye=ki(!0);function ge(t,n){return t&&de(t,n,za)}function me(t,n){return t&&ye(t,n,za)}function be(t,n){return An(n,function(n){return Jo(t[n])})}function we(t,n){for(var r=0,i=(n=di(n,t)).length;null!=t&&r<i;)t=t[Du(n[r++])];return r&&r==i?t:e}function Oe(t,n,r){var e=n(t);return $o(t)?e:Rn(e,r(t))}function xe(t){return null==t?t===e?\"[object Undefined]\":\"[object Null]\":Xt&&Xt in jt(t)?function(t){var n=Ft.call(t,Xt),r=t[Xt];try{t[Xt]=e;var i=!0}catch(t){}var u=Wt.call(t);return i&&(n?t[Xt]=r:delete t[Xt]),u}(t):function(t){return Wt.call(t)}(t)}function je(t,n){return t>n}function Ie(t,n){return null!=t&&Ft.call(t,n)}function Se(t,n){return null!=t&&n in jt(t)}function Pe(t,n,r){for(var i=r?zn:En,u=t[0].length,o=t.length,a=o,c=et(o),f=1/0,l=[];a--;){var s=t[a];a&&n&&(s=kn(s,Vn(n))),f=yr(s.length,f),c[a]=!r&&(n||u>=120&&s.length>=120)?new Zr(a&&s):e}s=t[0];var h=-1,p=c[0];t:for(;++h<u&&l.length<f;){var v=s[h],_=n?n(v):v;if(v=r||0!==v?v:0,!(p?Yn(p,_):i(l,_,r))){for(a=o;--a;){var d=c[a];if(!(d?Yn(d,_):i(t[a],_,r)))continue t}p&&p.push(_),l.push(v)}}return l}function Ae(t,n,r){var i=null==(t=ju(t,n=di(n,t)))?t:t[Du(Gu(n))];return null==i?e:xn(i,t,r)}function Ee(t){return ta(t)&&xe(t)==v}function ze(t,n,r,i,u){return t===n||(null==t||null==n||!ta(t)&&!ta(n)?t!=t&&n!=n:function(t,n,r,i,u,o){var a=$o(t),c=$o(n),f=a?_:su(t),l=c?_:su(n),s=(f=f==v?x:f)==x,h=(l=l==v?x:l)==x,p=f==l;if(p&&Ko(t)){if(!Ko(n))return!1;a=!0,s=!1}if(p&&!s)return o||(o=new Kr),a||ca(t)?Qi(t,n,r,i,u,o):function(t,n,r,e,i,u,o){switch(r){case k:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case z:return!(t.byteLength!=n.byteLength||!u(new Mt(t),new Mt(n)));case d:case y:case O:return To(+t,+n);case g:return t.name==n.name&&t.message==n.message;case I:case P:return t==n+\"\";case w:var a=ir;case S:var c=1&e;if(a||(a=ar),t.size!=n.size&&!c)return!1;var f=o.get(t);if(f)return f==n;e|=2,o.set(t,n);var l=Qi(a(t),a(n),e,i,u,o);return o.delete(t),l;case A:if(Wr)return Wr.call(t)==Wr.call(n)}return!1}(t,n,f,r,i,u,o);if(!(1&r)){var m=s&&Ft.call(t,\"__wrapped__\"),b=h&&Ft.call(n,\"__wrapped__\");if(m||b){var j=m?t.value():t,E=b?n.value():n;return o||(o=new Kr),u(j,E,r,i,o)}}return!!p&&(o||(o=new Kr),function(t,n,r,i,u,o){var a=1&r,c=tu(t),f=c.length;if(f!=tu(n).length&&!a)return!1;for(var l=f;l--;){var s=c[l];if(!(a?s in n:Ft.call(n,s)))return!1}var h=o.get(t),p=o.get(n);if(h&&p)return h==n&&p==t;var v=!0;o.set(t,n),o.set(n,t);for(var _=a;++l<f;){var d=t[s=c[l]],y=n[s];if(i)var g=a?i(y,d,s,n,t,o):i(d,y,s,t,n,o);if(!(g===e?d===y||u(d,y,r,i,o):g)){v=!1;break}_||(_=\"constructor\"==s)}if(v&&!_){var m=t.constructor,b=n.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in n)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(v=!1)}return o.delete(t),o.delete(n),v}(t,n,r,i,u,o))}(t,n,r,i,ze,u))}function ke(t,n,r,i){var u=r.length,o=u,a=!i;if(null==t)return!o;for(t=jt(t);u--;){var c=r[u];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++u<o;){var f=(c=r[u])[0],l=t[f],s=c[1];if(a&&c[2]){if(l===e&&!(f in t))return!1}else{var h=new Kr;if(i)var p=i(l,s,f,t,n,h);if(!(p===e?ze(s,l,3,i,h):p))return!1}}return!0}function Re(t){return!(!Xo(t)||(n=t,Dt&&Dt in n))&&(Jo(t)?Tt:vt).test(Wu(t));var n}function Fe(t){return\"function\"==typeof t?t:null==t?rc:\"object\"==typeof t?$o(t)?Ne(t[0],t[1]):Le(t):sc(t)}function Ce(t){if(!bu(t))return _r(t);var n=[];for(var r in jt(t))Ft.call(t,r)&&\"constructor\"!=r&&n.push(r);return n}function De(t,n){return t<n}function We(t,n){var r=-1,e=qo(t)?et(t.length):[];return le(t,function(t,i,u){e[++r]=n(t,i,u)}),e}function Le(t){var n=au(t);return 1==n.length&&n[0][2]?Ou(n[0][0],n[0][1]):function(r){return r===t||ke(r,t,n)}}function Ne(t,n){return yu(t)&&wu(n)?Ou(Du(t),n):function(r){var i=Ia(r,t);return i===e&&i===n?Sa(r,t):ze(n,i,3)}}function Te(t,n,r,i,u){t!==n&&de(n,function(o,a){if(u||(u=new Kr),Xo(o))!function(t,n,r,i,u,o,a){var c=Iu(t,r),f=Iu(n,r),l=a.get(f);if(l)Qr(t,r,l);else{var s=o?o(c,f,r+\"\",t,n,a):e,h=s===e;if(h){var p=$o(f),v=!p&&Ko(f),_=!p&&!v&&ca(f);s=f,p||v||_?$o(c)?s=c:Zo(c)?s=Si(c):v?(h=!1,s=bi(f,!0)):_?(h=!1,s=Oi(f,!0)):s=[]:ea(f)||Mo(f)?(s=c,Mo(c)?s=da(c):Xo(c)&&!Jo(c)||(s=pu(f))):h=!1}h&&(a.set(f,s),u(s,f,i,o,a),a.delete(f)),Qr(t,r,s)}}(t,n,a,r,Te,i,u);else{var c=i?i(Iu(t,a),o,a+\"\",t,n,u):e;c===e&&(c=o),Qr(t,a,c)}},ka)}function Ue(t,n){var r=t.length;if(r)return _u(n+=n<0?r:0,r)?t[n]:e}function Be(t,n,r){n=n.length?kn(n,function(t){return $o(t)?function(n){return we(n,1===t.length?t[0]:t)}:t}):[rc];var e=-1;n=kn(n,Vn(uu()));var i=We(t,function(t,r,i){var u=kn(n,function(n){return n(t)});return{criteria:u,index:++e,value:t}});return function(t){var n=t.length;for(t.sort(function(t,n){return function(t,n,r){for(var e=-1,i=t.criteria,u=n.criteria,o=i.length,a=r.length;++e<o;){var c=xi(i[e],u[e]);if(c)return e>=a?c:c*(\"desc\"==r[e]?-1:1)}return t.index-n.index}(t,n,r)});n--;)t[n]=t[n].value;return t}(i)}function Me(t,n,r){for(var e=-1,i=n.length,u={};++e<i;){var o=n[e],a=we(t,o);r(a,o)&&Je(u,di(o,t),a)}return u}function $e(t,n,r,e){var i=e?Un:Tn,u=-1,o=n.length,a=t;for(t===n&&(n=Si(n)),r&&(a=kn(t,Vn(r)));++u<o;)for(var c=0,f=n[u],l=r?r(f):f;(c=i(a,l,c,e))>-1;)a!==t&&Kt.call(a,c,1),Kt.call(t,c,1);return t}function He(t,n){for(var r=t?n.length:0,e=r-1;r--;){var i=n[r];if(r==e||i!==u){var u=i;_u(i)?Kt.call(t,i,1):ci(t,i)}}return t}function qe(t,n){return t+_n(br()*(n-t+1))}function Ze(t,n){var r=\"\";if(!t||n<1||n>l)return r;do{n%2&&(r+=t),(n=_n(n/2))&&(t+=t)}while(n);return r}function Ke(t,n){return Au(xu(t,n,rc),t+\"\")}function Ge(t){return Vr(Ta(t))}function Ve(t,n){var r=Ta(t);return ku(r,ue(n,0,r.length))}function Je(t,n,r,i){if(!Xo(t))return t;for(var u=-1,o=(n=di(n,t)).length,a=o-1,c=t;null!=c&&++u<o;){var f=Du(n[u]),l=r;if(\"__proto__\"===f||\"constructor\"===f||\"prototype\"===f)return t;if(u!=a){var s=c[f];(l=i?i(s,f,c):e)===e&&(l=Xo(s)?s:_u(n[u+1])?[]:{})}Xr(c,f,l),c=c[f]}return t}var Ye=Ar?function(t,n){return Ar.set(t,n),t}:rc,Qe=on?function(t,n){return on(t,\"toString\",{configurable:!0,enumerable:!1,value:Xa(n),writable:!0})}:rc;function Xe(t){return ku(Ta(t))}function ti(t,n,r){var e=-1,i=t.length;n<0&&(n=-n>i?0:i+n),(r=r>i?i:r)<0&&(r+=i),i=n>r?0:r-n>>>0,n>>>=0;for(var u=et(i);++e<i;)u[e]=t[e+n];return u}function ni(t,n){var r;return le(t,function(t,e,i){return!(r=n(t,e,i))}),!!r}function ri(t,n,r){var e=0,i=null==t?e:t.length;if(\"number\"==typeof n&&n==n&&i<=2147483647){for(;e<i;){var u=e+i>>>1,o=t[u];null!==o&&!aa(o)&&(r?o<=n:o<n)?e=u+1:i=u}return i}return ei(t,n,rc,r)}function ei(t,n,r,i){var u=0,o=null==t?0:t.length;if(0===o)return 0;for(var a=(n=r(n))!=n,c=null===n,f=aa(n),l=n===e;u<o;){var s=_n((u+o)/2),h=r(t[s]),p=h!==e,v=null===h,_=h==h,d=aa(h);if(a)var y=i||_;else y=l?_&&(i||p):c?_&&p&&(i||!v):f?_&&p&&!v&&(i||!d):!v&&!d&&(i?h<=n:h<n);y?u=s+1:o=s}return yr(o,4294967294)}function ii(t,n){for(var r=-1,e=t.length,i=0,u=[];++r<e;){var o=t[r],a=n?n(o):o;if(!r||!To(a,c)){var c=a;u[i++]=0===o?0:o}}return u}function ui(t){return\"number\"==typeof t?t:aa(t)?s:+t}function oi(t){if(\"string\"==typeof t)return t;if($o(t))return kn(t,oi)+\"\";if(aa(t))return Lr?Lr.call(t):\"\";var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function ai(t,n,r){var e=-1,i=En,u=t.length,o=!0,a=[],c=a;if(r)o=!1,i=zn;else if(u>=200){var f=n?null:Zi(t);if(f)return ar(f);o=!1,i=Yn,c=new Zr}else c=n?[]:a;t:for(;++e<u;){var l=t[e],s=n?n(l):l;if(l=r||0!==l?l:0,o&&s==s){for(var h=c.length;h--;)if(c[h]===s)continue t;n&&c.push(s),a.push(l)}else i(c,s,r)||(c!==a&&c.push(s),a.push(l))}return a}function ci(t,n){var r=-1,e=(n=di(n,t)).length;if(!e)return!0;for(;++r<e;){var i=Du(n[r]);if(\"__proto__\"===i&&!Ft.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&r<e-1)return!1}var u=ju(t,n);return null==u||delete u[Du(Gu(n))]}function fi(t,n,r,e){return Je(t,n,r(we(t,n)),e)}function li(t,n,r,e){for(var i=t.length,u=e?i:-1;(e?u--:++u<i)&&n(t[u],u,t););return r?ti(t,e?0:u,e?u+1:i):ti(t,e?u+1:0,e?i:u)}function si(t,n){var r=t;return r instanceof Mr&&(r=r.value()),Fn(n,function(t,n){return n.func.apply(n.thisArg,Rn([t],n.args))},r)}function hi(t,n,r){var e=t.length;if(e<2)return e?ai(t[0]):[];for(var i=-1,u=et(e);++i<e;)for(var o=t[i],a=-1;++a<e;)a!=i&&(u[i]=fe(u[i]||o,t[a],n,r));return ai(_e(u,1),n,r)}function pi(t,n,r){for(var i=-1,u=t.length,o=n.length,a={};++i<u;){var c=i<o?n[i]:e;r(a,t[i],c)}return a}function vi(t){return Zo(t)?t:[]}function _i(t){return\"function\"==typeof t?t:rc}function di(t,n){return $o(t)?t:yu(t,n)?[t]:Cu(ya(t))}var yi=Ke;function gi(t,n,r){var i=t.length;return r=r===e?i:r,!n&&r>=i?t:ti(t,n,r)}var mi=fn||function(t){return sn.clearTimeout(t)};function bi(t,n){if(n)return t.slice();var r=t.length,e=$t?$t(r):new t.constructor(r);return t.copy(e),e}function wi(t){var n=new t.constructor(t.byteLength);return new Mt(n).set(new Mt(t)),n}function Oi(t,n){var r=n?wi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function xi(t,n){if(t!==n){var r=t!==e,i=null===t,u=t==t,o=aa(t),a=n!==e,c=null===n,f=n==n,l=aa(n);if(!c&&!l&&!o&&t>n||o&&a&&f&&!c&&!l||i&&a&&f||!r&&f||!u)return 1;if(!i&&!o&&!l&&t<n||l&&r&&u&&!i&&!o||c&&r&&u||!a&&u||!f)return-1}return 0}function ji(t,n,r,e){for(var i=-1,u=t.length,o=r.length,a=-1,c=n.length,f=dr(u-o,0),l=et(c+f),s=!e;++a<c;)l[a]=n[a];for(;++i<o;)(s||i<u)&&(l[r[i]]=t[i]);for(;f--;)l[a++]=t[i++];return l}function Ii(t,n,r,e){for(var i=-1,u=t.length,o=-1,a=r.length,c=-1,f=n.length,l=dr(u-a,0),s=et(l+f),h=!e;++i<l;)s[i]=t[i];for(var p=i;++c<f;)s[p+c]=n[c];for(;++o<a;)(h||i<u)&&(s[p+r[o]]=t[i++]);return s}function Si(t,n){var r=-1,e=t.length;for(n||(n=et(e));++r<e;)n[r]=t[r];return n}function Pi(t,n,r,i){var u=!r;r||(r={});for(var o=-1,a=n.length;++o<a;){var c=n[o],f=i?i(r[c],t[c],c,r,t):e;f===e&&(f=t[c]),u?ee(r,c,f):Xr(r,c,f)}return r}function Ai(t,n){return function(r,e){var i=$o(r)?jn:ne,u=n?n():{};return i(r,t,uu(e,2),u)}}function Ei(t){return Ke(function(n,r){var i=-1,u=r.length,o=u>1?r[u-1]:e,a=u>2?r[2]:e;for(o=t.length>3&&\"function\"==typeof o?(u--,o):e,a&&du(r[0],r[1],a)&&(o=u<3?e:o,u=1),n=jt(n);++i<u;){var c=r[i];c&&t(n,c,i,o)}return n})}function zi(t,n){return function(r,e){if(null==r)return r;if(!qo(r))return t(r,e);for(var i=r.length,u=n?i:-1,o=jt(r);(n?u--:++u<i)&&!1!==e(o[u],u,o););return r}}function ki(t){return function(n,r,e){for(var i=-1,u=jt(n),o=e(n),a=o.length;a--;){var c=o[t?a:++i];if(!1===r(u[c],c,u))break}return n}}function Ri(t){return function(n){var r=er(n=ya(n))?lr(n):e,i=r?r[0]:n.charAt(0),u=r?gi(r,1).join(\"\"):n.slice(1);return i[t]()+u}}function Fi(t){return function(n){return Fn(Ja(Ma(n).replace(Vt,\"\")),t,\"\")}}function Ci(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var r=Tr(t.prototype),e=t.apply(r,n);return Xo(e)?e:r}}function Di(t){return function(n,r,i){var u=jt(n);if(!qo(n)){var o=uu(r,3);n=za(n),r=function(t){return o(u[t],t,u)}}var a=t(n,r,i);return a>-1?u[o?n[a]:a]:e}}function Wi(t){return Xi(function(n){var r=n.length,u=r,o=Br.prototype.thru;for(t&&n.reverse();u--;){var a=n[u];if(\"function\"!=typeof a)throw new Pt(i);if(o&&!c&&\"wrapper\"==eu(a))var c=new Br([],!0)}for(u=c?u:r;++u<r;){var f=eu(a=n[u]),l=\"wrapper\"==f?ru(a):e;c=l&&gu(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?c[eu(l[0])].apply(c,l[3]):1==a.length&&gu(a)?c[f]():c.thru(a)}return function(){var t=arguments,e=t[0];if(c&&1==t.length&&$o(e))return c.plant(e).value();for(var i=0,u=r?n[i].apply(this,t):e;++i<r;)u=n[i].call(this,u);return u}})}function Li(t,n,r,i,u,o,a,f,l,s){var h=n&c,p=1&n,v=2&n,_=24&n,d=512&n,y=v?e:Ci(t);return function c(){for(var g=arguments.length,m=et(g),b=g;b--;)m[b]=arguments[b];if(_)var w=iu(c),O=function(t,n){for(var r=t.length,e=0;r--;)t[r]===n&&++e;return e}(m,w);if(i&&(m=ji(m,i,u,_)),o&&(m=Ii(m,o,a,_)),g-=O,_&&g<s){var x=or(m,w);return Hi(t,n,Li,c.placeholder,r,m,x,f,l,s-g)}var j=p?r:this,I=v?j[t]:t;return g=m.length,f?m=function(t,n){for(var r=t.length,i=yr(n.length,r),u=Si(t);i--;){var o=n[i];t[i]=_u(o,r)?u[o]:e}return t}(m,f):d&&g>1&&m.reverse(),h&&l<g&&(m.length=l),this&&this!==sn&&this instanceof c&&(I=y||Ci(I)),I.apply(j,m)}}function Ni(t,n){return function(r,e){return function(t,n,r,e){return ge(t,function(t,i,u){n(e,r(t),i,u)}),e}(r,t,n(e),{})}}function Ti(t,n){return function(r,i){var u;if(r===e&&i===e)return n;if(r!==e&&(u=r),i!==e){if(u===e)return i;\"string\"==typeof r||\"string\"==typeof i?(r=oi(r),i=oi(i)):(r=ui(r),i=ui(i)),u=t(r,i)}return u}}function Ui(t){return Xi(function(n){return n=kn(n,Vn(uu())),Ke(function(r){var e=this;return t(n,function(t){return xn(t,e,r)})})})}function Bi(t,n){var r=(n=n===e?\" \":oi(n)).length;if(r<2)return r?Ze(n,t):n;var i=Ze(n,pn(t/fr(n)));return er(n)?gi(lr(i),0,t).join(\"\"):i.slice(0,t)}function Mi(t){return function(n,r,i){return i&&\"number\"!=typeof i&&du(n,r,i)&&(r=i=e),n=ha(n),r===e?(r=n,n=0):r=ha(r),function(t,n,r,e){for(var i=-1,u=dr(pn((n-t)/(r||1)),0),o=et(u);u--;)o[e?u:++i]=t,t+=r;return o}(n,r,i=i===e?n<r?1:-1:ha(i),t)}}function $i(t){return function(n,r){return\"string\"==typeof n&&\"string\"==typeof r||(n=_a(n),r=_a(r)),t(n,r)}}function Hi(t,n,r,i,u,o,c,f,l,s){var h=8&n;n|=h?a:64,4&(n&=~(h?64:a))||(n&=-4);var p=[t,n,u,h?o:e,h?c:e,h?e:o,h?e:c,f,l,s],v=r.apply(e,p);return gu(t)&&Su(v,p),v.placeholder=i,Eu(v,t,n)}function qi(t){var n=xt[t];return function(t,r){if(t=_a(t),(r=null==r?0:yr(pa(r),292))&&Hn(t)){var e=(ya(t)+\"e\").split(\"e\");return+((e=(ya(n(e[0]+\"e\"+(+e[1]+r)))+\"e\").split(\"e\"))[0]+\"e\"+(+e[1]-r))}return n(t)}}var Zi=Ir&&1/ar(new Ir([,-0]))[1]==f?function(t){return new Ir(t)}:ac;function Ki(t){return function(n){var r=su(n);return r==w?ir(n):r==S?cr(n):function(t,n){return kn(n,function(n){return[n,t[n]]})}(n,t(n))}}function Gi(t,n,r,u,f,l,s,h){var p=2&n;if(!p&&\"function\"!=typeof t)throw new Pt(i);var v=u?u.length:0;if(v||(n&=-97,u=f=e),s=s===e?s:dr(pa(s),0),h=h===e?h:pa(h),v-=f?f.length:0,64&n){var _=u,d=f;u=f=e}var y=p?e:ru(t),g=[t,n,r,u,f,_,d,l,s,h];if(y&&function(t,n){var r=t[1],e=n[1],i=r|e,u=i<131,a=e==c&&8==r||e==c&&256==r&&t[7].length<=n[8]||384==e&&n[7].length<=n[8]&&8==r;if(!u&&!a)return t;1&e&&(t[2]=n[2],i|=1&r?0:4);var f=n[3];if(f){var l=t[3];t[3]=l?ji(l,f,n[4]):f,t[4]=l?or(t[3],o):n[4]}(f=n[5])&&(l=t[5],t[5]=l?Ii(l,f,n[6]):f,t[6]=l?or(t[5],o):n[6]),(f=n[7])&&(t[7]=f),e&c&&(t[8]=null==t[8]?n[8]:yr(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i}(g,y),t=g[0],n=g[1],r=g[2],u=g[3],f=g[4],!(h=g[9]=g[9]===e?p?0:t.length:dr(g[9]-v,0))&&24&n&&(n&=-25),n&&1!=n)m=8==n||16==n?function(t,n,r){var i=Ci(t);return function u(){for(var o=arguments.length,a=et(o),c=o,f=iu(u);c--;)a[c]=arguments[c];var l=o<3&&a[0]!==f&&a[o-1]!==f?[]:or(a,f);return(o-=l.length)<r?Hi(t,n,Li,u.placeholder,e,a,l,e,e,r-o):xn(this&&this!==sn&&this instanceof u?i:t,this,a)}}(t,n,h):n!=a&&33!=n||f.length?Li.apply(e,g):function(t,n,r,e){var i=1&n,u=Ci(t);return function n(){for(var o=-1,a=arguments.length,c=-1,f=e.length,l=et(f+a),s=this&&this!==sn&&this instanceof n?u:t;++c<f;)l[c]=e[c];for(;a--;)l[c++]=arguments[++o];return xn(s,i?r:this,l)}}(t,n,r,u);else var m=function(t,n,r){var e=1&n,i=Ci(t);return function n(){return(this&&this!==sn&&this instanceof n?i:t).apply(e?r:this,arguments)}}(t,n,r);return Eu((y?Ye:Su)(m,g),t,n)}function Vi(t,n,r,i){return t===e||To(t,zt[r])&&!Ft.call(i,r)?n:t}function Ji(t,n,r,i,u,o){return Xo(t)&&Xo(n)&&(o.set(n,t),Te(t,n,e,Ji,o),o.delete(n)),t}function Yi(t){return ea(t)?e:t}function Qi(t,n,r,i,u,o){var a=1&r,c=t.length,f=n.length;if(c!=f&&!(a&&f>c))return!1;var l=o.get(t),s=o.get(n);if(l&&s)return l==n&&s==t;var h=-1,p=!0,v=2&r?new Zr:e;for(o.set(t,n),o.set(n,t);++h<c;){var _=t[h],d=n[h];if(i)var y=a?i(d,_,h,n,t,o):i(_,d,h,t,n,o);if(y!==e){if(y)continue;p=!1;break}if(v){if(!Dn(n,function(t,n){if(!Yn(v,n)&&(_===t||u(_,t,r,i,o)))return v.push(n)})){p=!1;break}}else if(_!==d&&!u(_,d,r,i,o)){p=!1;break}}return o.delete(t),o.delete(n),p}function Xi(t){return Au(xu(t,e,$u),t+\"\")}function tu(t){return Oe(t,za,fu)}function nu(t){return Oe(t,ka,lu)}var ru=Ar?function(t){return Ar.get(t)}:ac;function eu(t){for(var n=t.name+\"\",r=Er[n],e=Ft.call(Er,n)?r.length:0;e--;){var i=r[e],u=i.func;if(null==u||u==t)return i.name}return n}function iu(t){return(Ft.call(Nr,\"placeholder\")?Nr:t).placeholder}function uu(){var t=Nr.iteratee||ec;return t=t===ec?Fe:t,arguments.length?t(arguments[0],arguments[1]):t}function ou(t,n){var r,e,i=t.__data__;return(\"string\"==(e=typeof(r=n))||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==r:null===r)?i[\"string\"==typeof n?\"string\":\"hash\"]:i.map}function au(t){for(var n=za(t),r=n.length;r--;){var e=n[r],i=t[e];n[r]=[e,i,wu(i)]}return n}function cu(t,n){var r=function(t,n){return null==t?e:t[n]}(t,n);return Re(r)?r:e}var fu=dn?function(t){return null==t?[]:(t=jt(t),An(dn(t),function(n){return Zt.call(t,n)}))}:vc,lu=dn?function(t){for(var n=[];t;)Rn(n,fu(t)),t=Ht(t);return n}:vc,su=xe;function hu(t,n,r){for(var e=-1,i=(n=di(n,t)).length,u=!1;++e<i;){var o=Du(n[e]);if(!(u=null!=t&&r(t,o)))break;t=t[o]}return u||++e!=i?u:!!(i=null==t?0:t.length)&&Qo(i)&&_u(o,i)&&($o(t)||Mo(t))}function pu(t){return\"function\"!=typeof t.constructor||bu(t)?{}:Tr(Ht(t))}function vu(t){return $o(t)||Mo(t)||!!(Gt&&t&&t[Gt])}function _u(t,n){var r=typeof t;return!!(n=n??l)&&(\"number\"==r||\"symbol\"!=r&&dt.test(t))&&t>-1&&t%1==0&&t<n}function du(t,n,r){if(!Xo(r))return!1;var e=typeof n;return!!(\"number\"==e?qo(r)&&_u(n,r.length):\"string\"==e&&n in r)&&To(r[n],t)}function yu(t,n){if($o(t))return!1;var r=typeof t;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=t&&!aa(t))||Q.test(t)||!Y.test(t)||null!=n&&t in jt(n)}function gu(t){var n=eu(t),r=Nr[n];if(\"function\"!=typeof r||!(n in Mr.prototype))return!1;if(t===r)return!0;var e=ru(r);return!!e&&t===e[0]}(Or&&su(new Or(new ArrayBuffer(1)))!=k||xr&&su(new xr)!=w||jr&&su(jr.resolve())!=j||Ir&&su(new Ir)!=S||Sr&&su(new Sr)!=E)&&(su=function(t){var n=xe(t),r=n==x?t.constructor:e,i=r?Wu(r):\"\";if(i)switch(i){case zr:return k;case kr:return w;case Rr:return j;case Fr:return S;case Cr:return E}return n});var mu=kt?Jo:_c;function bu(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||zt)}function wu(t){return t==t&&!Xo(t)}function Ou(t,n){return function(r){return null!=r&&r[t]===n&&(n!==e||t in jt(r))}}function xu(t,n,r){return n=dr(n===e?t.length-1:n,0),function(){for(var e=arguments,i=-1,u=dr(e.length-n,0),o=et(u);++i<u;)o[i]=e[n+i];i=-1;for(var a=et(n+1);++i<n;)a[i]=e[i];return a[n]=r(o),xn(t,this,a)}}function ju(t,n){return n.length<2?t:we(t,ti(n,0,-1))}function Iu(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var Su=zu(Ye),Pu=hn||function(t,n){return sn.setTimeout(t,n)},Au=zu(Qe);function Eu(t,n,r){var e=n+\"\";return Au(t,function(t,n){var r=n.length;if(!r)return t;var e=r-1;return n[e]=(r>1?\"& \":\"\")+n[e],n=n.join(r>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+n+\"] */\\n\")}(e,function(t,n){return In(p,function(r){var e=\"_.\"+r[0];n&r[1]&&!En(t,e)&&t.push(e)}),t.sort()}(function(t){var n=t.match(ut);return n?n[1].split(ot):[]}(e),r)))}function zu(t){var n=0,r=0;return function(){var i=gr(),u=16-(i-r);if(r=i,u>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(e,arguments)}}function ku(t,n){var r=-1,i=t.length,u=i-1;for(n=n===e?i:n;++r<n;){var o=qe(r,u),a=t[o];t[o]=t[r],t[r]=a}return t.length=n,t}var Ru,Fu,Cu=(Ru=Fo(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(\"\"),t.replace(X,function(t,r,e,i){n.push(e?i.replace(ft,\"$1\"):r||t)}),n},function(t){return 500===Fu.size&&Fu.clear(),t}),Fu=Ru.cache,Ru);function Du(t){if(\"string\"==typeof t||aa(t))return t;var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function Wu(t){if(null!=t){try{return Rt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Lu(t){if(t instanceof Mr)return t.clone();var n=new Br(t.__wrapped__,t.__chain__);return n.__actions__=Si(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}var Nu=Ke(function(t,n){return Zo(t)?fe(t,_e(n,1,Zo,!0)):[]}),Tu=Ke(function(t,n){var r=Gu(n);return Zo(r)&&(r=e),Zo(t)?fe(t,_e(n,1,Zo,!0),uu(r,2)):[]}),Uu=Ke(function(t,n){var r=Gu(n);return Zo(r)&&(r=e),Zo(t)?fe(t,_e(n,1,Zo,!0),e,r):[]});function Bu(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=null==r?0:pa(r);return i<0&&(i=dr(e+i,0)),Nn(t,uu(n,3),i)}function Mu(t,n,r){var i=null==t?0:t.length;if(!i)return-1;var u=i-1;return r!==e&&(u=pa(r),u=r<0?dr(i+u,0):yr(u,i-1)),Nn(t,uu(n,3),u,!0)}function $u(t){return null!=t&&t.length?_e(t,1):[]}function Hu(t){return t&&t.length?t[0]:e}var qu=Ke(function(t){var n=kn(t,vi);return n.length&&n[0]===t[0]?Pe(n):[]}),Zu=Ke(function(t){var n=Gu(t),r=kn(t,vi);return n===Gu(r)?n=e:r.pop(),r.length&&r[0]===t[0]?Pe(r,uu(n,2)):[]}),Ku=Ke(function(t){var n=Gu(t),r=kn(t,vi);return(n=\"function\"==typeof n?n:e)&&r.pop(),r.length&&r[0]===t[0]?Pe(r,e,n):[]});function Gu(t){var n=null==t?0:t.length;return n?t[n-1]:e}var Vu=Ke(Ju);function Ju(t,n){return t&&t.length&&n&&n.length?$e(t,n):t}var Yu=Xi(function(t,n){var r=null==t?0:t.length,e=ie(t,n);return He(t,kn(n,function(t){return _u(t,r)?+t:t}).sort(xi)),e});function Qu(t){return null==t?t:wr.call(t)}var Xu=Ke(function(t){return ai(_e(t,1,Zo,!0))}),to=Ke(function(t){var n=Gu(t);return Zo(n)&&(n=e),ai(_e(t,1,Zo,!0),uu(n,2))}),no=Ke(function(t){var n=Gu(t);return n=\"function\"==typeof n?n:e,ai(_e(t,1,Zo,!0),e,n)});function ro(t){if(!t||!t.length)return[];var n=0;return t=An(t,function(t){if(Zo(t))return n=dr(t.length,n),!0}),Kn(n,function(n){return kn(t,$n(n))})}function eo(t,n){if(!t||!t.length)return[];var r=ro(t);return null==n?r:kn(r,function(t){return xn(n,e,t)})}var io=Ke(function(t,n){return Zo(t)?fe(t,n):[]}),uo=Ke(function(t){return hi(An(t,Zo))}),oo=Ke(function(t){var n=Gu(t);return Zo(n)&&(n=e),hi(An(t,Zo),uu(n,2))}),ao=Ke(function(t){var n=Gu(t);return n=\"function\"==typeof n?n:e,hi(An(t,Zo),e,n)}),co=Ke(ro),fo=Ke(function(t){var n=t.length,r=n>1?t[n-1]:e;return r=\"function\"==typeof r?(t.pop(),r):e,eo(t,r)});function lo(t){var n=Nr(t);return n.__chain__=!0,n}function so(t,n){return n(t)}var ho=Xi(function(t){var n=t.length,r=n?t[0]:0,i=this.__wrapped__,u=function(n){return ie(n,t)};return!(n>1||this.__actions__.length)&&i instanceof Mr&&_u(r)?((i=i.slice(r,+r+(n?1:0))).__actions__.push({func:so,args:[u],thisArg:e}),new Br(i,this.__chain__).thru(function(t){return n&&!t.length&&t.push(e),t})):this.thru(u)}),po=Ai(function(t,n,r){Ft.call(t,r)?++t[r]:ee(t,r,1)}),vo=Di(Bu),_o=Di(Mu);function yo(t,n){return($o(t)?In:le)(t,uu(n,3))}function go(t,n){return($o(t)?Sn:se)(t,uu(n,3))}var mo=Ai(function(t,n,r){Ft.call(t,r)?t[r].push(n):ee(t,r,[n])}),bo=Ke(function(t,n,r){var e=-1,i=\"function\"==typeof n,u=qo(t)?et(t.length):[];return le(t,function(t){u[++e]=i?xn(n,t,r):Ae(t,n,r)}),u}),wo=Ai(function(t,n,r){ee(t,r,n)});function Oo(t,n){return($o(t)?kn:We)(t,uu(n,3))}var xo=Ai(function(t,n,r){t[r?0:1].push(n)},function(){return[[],[]]}),jo=Ke(function(t,n){if(null==t)return[];var r=n.length;return r>1&&du(t,n[0],n[1])?n=[]:r>2&&du(n[0],n[1],n[2])&&(n=[n[0]]),Be(t,_e(n,1),[])}),Io=ln||function(){return sn.Date.now()};function So(t,n,r){return n=r?e:n,n=t&&null==n?t.length:n,Gi(t,c,e,e,e,e,n)}function Po(t,n){var r;if(\"function\"!=typeof n)throw new Pt(i);return t=pa(t),function(){return--t>0&&(r=n.apply(this,arguments)),t<=1&&(n=e),r}}var Ao=Ke(function(t,n,r){var e=1;if(r.length){var i=or(r,iu(Ao));e|=a}return Gi(t,e,n,r,i)}),Eo=Ke(function(t,n,r){var e=3;if(r.length){var i=or(r,iu(Eo));e|=a}return Gi(n,e,t,r,i)});function zo(t,n,r){var u,o,a,c,f,l,s=0,h=!1,p=!1,v=!0;if(\"function\"!=typeof t)throw new Pt(i);function _(n){var r=u,i=o;return u=o=e,s=n,c=t.apply(i,r)}function d(t){var r=t-l;return l===e||r>=n||r<0||p&&t-s>=a}function y(){var t=Io();if(d(t))return g(t);f=Pu(y,function(t){var r=n-(t-l);return p?yr(r,a-(t-s)):r}(t))}function g(t){return f=e,v&&u?_(t):(u=o=e,c)}function m(){var t=Io(),r=d(t);if(u=arguments,o=this,l=t,r){if(f===e)return function(t){return s=t,f=Pu(y,n),h?_(t):c}(l);if(p)return mi(f),f=Pu(y,n),_(l)}return f===e&&(f=Pu(y,n)),c}return n=_a(n)||0,Xo(r)&&(h=!!r.leading,a=(p=\"maxWait\"in r)?dr(_a(r.maxWait)||0,n):a,v=\"trailing\"in r?!!r.trailing:v),m.cancel=function(){f!==e&&mi(f),s=0,u=l=o=f=e},m.flush=function(){return f===e?c:g(Io())},m}var ko=Ke(function(t,n){return ce(t,1,n)}),Ro=Ke(function(t,n,r){return ce(t,_a(n)||0,r)});function Fo(t,n){if(\"function\"!=typeof t||null!=n&&\"function\"!=typeof n)throw new Pt(i);var r=function(){var e=arguments,i=n?n.apply(this,e):e[0],u=r.cache;if(u.has(i))return u.get(i);var o=t.apply(this,e);return r.cache=u.set(i,o)||u,o};return r.cache=new(Fo.Cache||qr),r}function Co(t){if(\"function\"!=typeof t)throw new Pt(i);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}Fo.Cache=qr;var Do=yi(function(t,n){var r=(n=1==n.length&&$o(n[0])?kn(n[0],Vn(uu())):kn(_e(n,1),Vn(uu()))).length;return Ke(function(e){for(var i=-1,u=yr(e.length,r);++i<u;)e[i]=n[i].call(this,e[i]);return xn(t,this,e)})}),Wo=Ke(function(t,n){var r=or(n,iu(Wo));return Gi(t,a,e,n,r)}),Lo=Ke(function(t,n){var r=or(n,iu(Lo));return Gi(t,64,e,n,r)}),No=Xi(function(t,n){return Gi(t,256,e,e,e,n)});function To(t,n){return t===n||t!=t&&n!=n}var Uo=$i(je),Bo=$i(function(t,n){return t>=n}),Mo=Ee(function(){return arguments}())?Ee:function(t){return ta(t)&&Ft.call(t,\"callee\")&&!Zt.call(t,\"callee\")},$o=et.isArray,Ho=yn?Vn(yn):function(t){return ta(t)&&xe(t)==z};function qo(t){return null!=t&&Qo(t.length)&&!Jo(t)}function Zo(t){return ta(t)&&qo(t)}var Ko=Wn||_c,Go=gn?Vn(gn):function(t){return ta(t)&&xe(t)==y};function Vo(t){if(!ta(t))return!1;var n=xe(t);return n==g||\"[object DOMException]\"==n||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ea(t)}function Jo(t){if(!Xo(t))return!1;var n=xe(t);return n==m||n==b||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function Yo(t){return\"number\"==typeof t&&t==pa(t)}function Qo(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=l}function Xo(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function ta(t){return null!=t&&\"object\"==typeof t}var na=mn?Vn(mn):function(t){return ta(t)&&su(t)==w};function ra(t){return\"number\"==typeof t||ta(t)&&xe(t)==O}function ea(t){if(!ta(t)||xe(t)!=x)return!1;var n=Ht(t);if(null===n)return!0;var r=Ft.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof r&&r instanceof r&&Rt.call(r)==Lt}var ia=bn?Vn(bn):function(t){return ta(t)&&xe(t)==I},ua=wn?Vn(wn):function(t){return ta(t)&&su(t)==S};function oa(t){return\"string\"==typeof t||!$o(t)&&ta(t)&&xe(t)==P}function aa(t){return\"symbol\"==typeof t||ta(t)&&xe(t)==A}var ca=On?Vn(On):function(t){return ta(t)&&Qo(t.length)&&!!en[xe(t)]},fa=$i(De),la=$i(function(t,n){return t<=n});function sa(t){if(!t)return[];if(qo(t))return oa(t)?lr(t):Si(t);if(Yt&&t[Yt])return function(t){for(var n,r=[];!(n=t.next()).done;)r.push(n.value);return r}(t[Yt]());var n=su(t);return(n==w?ir:n==S?ar:Ta)(t)}function ha(t){return t?(t=_a(t))===f||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function pa(t){var n=ha(t),r=n%1;return n==n?r?n-r:n:0}function va(t){return t?ue(pa(t),0,h):0}function _a(t){if(\"number\"==typeof t)return t;if(aa(t))return s;if(Xo(t)){var n=\"function\"==typeof t.valueOf?t.valueOf():t;t=Xo(n)?n+\"\":n}if(\"string\"!=typeof t)return 0===t?t:+t;t=Gn(t);var r=pt.test(t);return r||_t.test(t)?cn(t.slice(2),r?2:8):ht.test(t)?s:+t}function da(t){return Pi(t,ka(t))}function ya(t){return null==t?\"\":oi(t)}var ga=Ei(function(t,n){if(bu(n)||qo(n))Pi(n,za(n),t);else for(var r in n)Ft.call(n,r)&&Xr(t,r,n[r])}),ma=Ei(function(t,n){Pi(n,ka(n),t)}),ba=Ei(function(t,n,r,e){Pi(n,ka(n),t,e)}),wa=Ei(function(t,n,r,e){Pi(n,za(n),t,e)}),Oa=Xi(ie),xa=Ke(function(t,n){t=jt(t);var r=-1,i=n.length,u=i>2?n[2]:e;for(u&&du(n[0],n[1],u)&&(i=1);++r<i;)for(var o=n[r],a=ka(o),c=-1,f=a.length;++c<f;){var l=a[c],s=t[l];(s===e||To(s,zt[l])&&!Ft.call(t,l))&&(t[l]=o[l])}return t}),ja=Ke(function(t){return t.push(e,Ji),xn(Fa,e,t)});function Ia(t,n,r){var i=null==t?e:we(t,n);return i===e?r:i}function Sa(t,n){return null!=t&&hu(t,n,Se)}var Pa=Ni(function(t,n,r){null!=n&&\"function\"!=typeof n.toString&&(n=Wt.call(n)),t[n]=r},Xa(rc)),Aa=Ni(function(t,n,r){null!=n&&\"function\"!=typeof n.toString&&(n=Wt.call(n)),Ft.call(t,n)?t[n].push(r):t[n]=[r]},uu),Ea=Ke(Ae);function za(t){return qo(t)?Gr(t):Ce(t)}function ka(t){return qo(t)?Gr(t,!0):function(t){if(!Xo(t))return function(t){var n=[];if(null!=t)for(var r in jt(t))n.push(r);return n}(t);var n=bu(t),r=[];for(var e in t)(\"constructor\"!=e||!n&&Ft.call(t,e))&&r.push(e);return r}(t)}var Ra=Ei(function(t,n,r){Te(t,n,r)}),Fa=Ei(function(t,n,r,e){Te(t,n,r,e)}),Ca=Xi(function(t,n){var r={};if(null==t)return r;var e=!1;n=kn(n,function(n){return n=di(n,t),e||(e=n.length>1),n}),Pi(t,nu(t),r),e&&(r=oe(r,7,Yi));for(var i=n.length;i--;)ci(r,n[i]);return r}),Da=Xi(function(t,n){return null==t?{}:function(t,n){return Me(t,n,function(n,r){return Sa(t,r)})}(t,n)});function Wa(t,n){if(null==t)return{};var r=kn(nu(t),function(t){return[t]});return n=uu(n),Me(t,r,function(t,r){return n(t,r[0])})}var La=Ki(za),Na=Ki(ka);function Ta(t){return null==t?[]:Jn(t,za(t))}var Ua=Fi(function(t,n,r){return n=n.toLowerCase(),t+(r?Ba(n):n)});function Ba(t){return Va(ya(t).toLowerCase())}function Ma(t){return(t=ya(t))&&t.replace(yt,tr).replace(Jt,\"\")}var $a=Fi(function(t,n,r){return t+(r?\"-\":\"\")+n.toLowerCase()}),Ha=Fi(function(t,n,r){return t+(r?\" \":\"\")+n.toLowerCase()}),qa=Ri(\"toLowerCase\"),Za=Fi(function(t,n,r){return t+(r?\"_\":\"\")+n.toLowerCase()}),Ka=Fi(function(t,n,r){return t+(r?\" \":\"\")+Va(n)}),Ga=Fi(function(t,n,r){return t+(r?\" \":\"\")+n.toUpperCase()}),Va=Ri(\"toUpperCase\");function Ja(t,n,r){return t=ya(t),(n=r?e:n)===e?function(t){return tn.test(t)}(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(n)||[]}var Ya=Ke(function(t,n){try{return xn(t,e,n)}catch(t){return Vo(t)?t:new wt(t)}}),Qa=Xi(function(t,n){return In(n,function(n){n=Du(n),ee(t,n,Ao(t[n],t))}),t});function Xa(t){return function(){return t}}var tc=Wi(),nc=Wi(!0);function rc(t){return t}function ec(t){return Fe(\"function\"==typeof t?t:oe(t,1))}var ic=Ke(function(t,n){return function(r){return Ae(r,t,n)}}),uc=Ke(function(t,n){return function(r){return Ae(t,r,n)}});function oc(t,n,r){var e=za(n),i=be(n,e);null!=r||Xo(n)&&(i.length||!e.length)||(r=n,n=t,t=this,i=be(n,za(n)));var u=!(Xo(r)&&\"chain\"in r&&!r.chain),o=Jo(t);return In(i,function(r){var e=n[r];t[r]=e,o&&(t.prototype[r]=function(){var n=this.__chain__;if(u||n){var r=t(this.__wrapped__);return(r.__actions__=Si(this.__actions__)).push({func:e,args:arguments,thisArg:t}),r.__chain__=n,r}return e.apply(t,Rn([this.value()],arguments))})}),t}function ac(){}var cc=Ui(kn),fc=Ui(Pn),lc=Ui(Dn);function sc(t){return yu(t)?$n(Du(t)):function(t){return function(n){return we(n,t)}}(t)}var hc=Mi(),pc=Mi(!0);function vc(){return[]}function _c(){return!1}var dc,yc=Ti(function(t,n){return t+n},0),gc=qi(\"ceil\"),mc=Ti(function(t,n){return t/n},1),bc=qi(\"floor\"),wc=Ti(function(t,n){return t*n},1),Oc=qi(\"round\"),xc=Ti(function(t,n){return t-n},0);return Nr.after=function(t,n){if(\"function\"!=typeof n)throw new Pt(i);return t=pa(t),function(){if(--t<1)return n.apply(this,arguments)}},Nr.ary=So,Nr.assign=ga,Nr.assignIn=ma,Nr.assignInWith=ba,Nr.assignWith=wa,Nr.at=Oa,Nr.before=Po,Nr.bind=Ao,Nr.bindAll=Qa,Nr.bindKey=Eo,Nr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return $o(t)?t:[t]},Nr.chain=lo,Nr.chunk=function(t,n,r){n=(r?du(t,n,r):n===e)?1:dr(pa(n),0);var i=null==t?0:t.length;if(!i||n<1)return[];for(var u=0,o=0,a=et(pn(i/n));u<i;)a[o++]=ti(t,u,u+=n);return a},Nr.compact=function(t){for(var n=-1,r=null==t?0:t.length,e=0,i=[];++n<r;){var u=t[n];u&&(i[e++]=u)}return i},Nr.concat=function(){var t=arguments.length;if(!t)return[];for(var n=et(t-1),r=arguments[0],e=t;e--;)n[e-1]=arguments[e];return Rn($o(r)?Si(r):[r],_e(n,1))},Nr.cond=function(t){var n=null==t?0:t.length,r=uu();return t=n?kn(t,function(t){if(\"function\"!=typeof t[1])throw new Pt(i);return[r(t[0]),t[1]]}):[],Ke(function(r){for(var e=-1;++e<n;){var i=t[e];if(xn(i[0],this,r))return xn(i[1],this,r)}})},Nr.conforms=function(t){return function(t){var n=za(t);return function(r){return ae(r,t,n)}}(oe(t,1))},Nr.constant=Xa,Nr.countBy=po,Nr.create=function(t,n){var r=Tr(t);return null==n?r:re(r,n)},Nr.curry=function t(n,r,i){var u=Gi(n,8,e,e,e,e,e,r=i?e:r);return u.placeholder=t.placeholder,u},Nr.curryRight=function t(n,r,i){var u=Gi(n,16,e,e,e,e,e,r=i?e:r);return u.placeholder=t.placeholder,u},Nr.debounce=zo,Nr.defaults=xa,Nr.defaultsDeep=ja,Nr.defer=ko,Nr.delay=Ro,Nr.difference=Nu,Nr.differenceBy=Tu,Nr.differenceWith=Uu,Nr.drop=function(t,n,r){var i=null==t?0:t.length;return i?ti(t,(n=r||n===e?1:pa(n))<0?0:n,i):[]},Nr.dropRight=function(t,n,r){var i=null==t?0:t.length;return i?ti(t,0,(n=i-(n=r||n===e?1:pa(n)))<0?0:n):[]},Nr.dropRightWhile=function(t,n){return t&&t.length?li(t,uu(n,3),!0,!0):[]},Nr.dropWhile=function(t,n){return t&&t.length?li(t,uu(n,3),!0):[]},Nr.fill=function(t,n,r,i){var u=null==t?0:t.length;return u?(r&&\"number\"!=typeof r&&du(t,n,r)&&(r=0,i=u),function(t,n,r,i){var u=t.length;for((r=pa(r))<0&&(r=-r>u?0:u+r),(i=i===e||i>u?u:pa(i))<0&&(i+=u),i=r>i?0:va(i);r<i;)t[r++]=n;return t}(t,n,r,i)):[]},Nr.filter=function(t,n){return($o(t)?An:ve)(t,uu(n,3))},Nr.flatMap=function(t,n){return _e(Oo(t,n),1)},Nr.flatMapDeep=function(t,n){return _e(Oo(t,n),f)},Nr.flatMapDepth=function(t,n,r){return r=r===e?1:pa(r),_e(Oo(t,n),r)},Nr.flatten=$u,Nr.flattenDeep=function(t){return null!=t&&t.length?_e(t,f):[]},Nr.flattenDepth=function(t,n){return null!=t&&t.length?_e(t,n=n===e?1:pa(n)):[]},Nr.flip=function(t){return Gi(t,512)},Nr.flow=tc,Nr.flowRight=nc,Nr.fromPairs=function(t){for(var n=-1,r=null==t?0:t.length,e={};++n<r;){var i=t[n];ee(e,i[0],i[1])}return e},Nr.functions=function(t){return null==t?[]:be(t,za(t))},Nr.functionsIn=function(t){return null==t?[]:be(t,ka(t))},Nr.groupBy=mo,Nr.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Nr.intersection=qu,Nr.intersectionBy=Zu,Nr.intersectionWith=Ku,Nr.invert=Pa,Nr.invertBy=Aa,Nr.invokeMap=bo,Nr.iteratee=ec,Nr.keyBy=wo,Nr.keys=za,Nr.keysIn=ka,Nr.map=Oo,Nr.mapKeys=function(t,n){var r={};return n=uu(n,3),ge(t,function(t,e,i){ee(r,n(t,e,i),t)}),r},Nr.mapValues=function(t,n){var r={};return n=uu(n,3),ge(t,function(t,e,i){ee(r,e,n(t,e,i))}),r},Nr.matches=function(t){return Le(oe(t,1))},Nr.matchesProperty=function(t,n){return Ne(t,oe(n,1))},Nr.memoize=Fo,Nr.merge=Ra,Nr.mergeWith=Fa,Nr.method=ic,Nr.methodOf=uc,Nr.mixin=oc,Nr.negate=Co,Nr.nthArg=function(t){return t=pa(t),Ke(function(n){return Ue(n,t)})},Nr.omit=Ca,Nr.omitBy=function(t,n){return Wa(t,Co(uu(n)))},Nr.once=function(t){return Po(2,t)},Nr.orderBy=function(t,n,r,i){return null==t?[]:($o(n)||(n=null==n?[]:[n]),$o(r=i?e:r)||(r=null==r?[]:[r]),Be(t,n,r))},Nr.over=cc,Nr.overArgs=Do,Nr.overEvery=fc,Nr.overSome=lc,Nr.partial=Wo,Nr.partialRight=Lo,Nr.partition=xo,Nr.pick=Da,Nr.pickBy=Wa,Nr.property=sc,Nr.propertyOf=function(t){return function(n){return null==t?e:we(t,n)}},Nr.pull=Vu,Nr.pullAll=Ju,Nr.pullAllBy=function(t,n,r){return t&&t.length&&n&&n.length?$e(t,n,uu(r,2)):t},Nr.pullAllWith=function(t,n,r){return t&&t.length&&n&&n.length?$e(t,n,e,r):t},Nr.pullAt=Yu,Nr.range=hc,Nr.rangeRight=pc,Nr.rearg=No,Nr.reject=function(t,n){return($o(t)?An:ve)(t,Co(uu(n,3)))},Nr.remove=function(t,n){var r=[];if(!t||!t.length)return r;var e=-1,i=[],u=t.length;for(n=uu(n,3);++e<u;){var o=t[e];n(o,e,t)&&(r.push(o),i.push(e))}return He(t,i),r},Nr.rest=function(t,n){if(\"function\"!=typeof t)throw new Pt(i);return Ke(t,n=n===e?n:pa(n))},Nr.reverse=Qu,Nr.sampleSize=function(t,n,r){return n=(r?du(t,n,r):n===e)?1:pa(n),($o(t)?Jr:Ve)(t,n)},Nr.set=function(t,n,r){return null==t?t:Je(t,n,r)},Nr.setWith=function(t,n,r,i){return i=\"function\"==typeof i?i:e,null==t?t:Je(t,n,r,i)},Nr.shuffle=function(t){return($o(t)?Yr:Xe)(t)},Nr.slice=function(t,n,r){var i=null==t?0:t.length;return i?(r&&\"number\"!=typeof r&&du(t,n,r)?(n=0,r=i):(n=null==n?0:pa(n),r=r===e?i:pa(r)),ti(t,n,r)):[]},Nr.sortBy=jo,Nr.sortedUniq=function(t){return t&&t.length?ii(t):[]},Nr.sortedUniqBy=function(t,n){return t&&t.length?ii(t,uu(n,2)):[]},Nr.split=function(t,n,r){return r&&\"number\"!=typeof r&&du(t,n,r)&&(n=r=e),(r=r===e?h:r>>>0)?(t=ya(t))&&(\"string\"==typeof n||null!=n&&!ia(n))&&!(n=oi(n))&&er(t)?gi(lr(t),0,r):t.split(n,r):[]},Nr.spread=function(t,n){if(\"function\"!=typeof t)throw new Pt(i);return n=null==n?0:dr(pa(n),0),Ke(function(r){var e=r[n],i=gi(r,0,n);return e&&Rn(i,e),xn(t,this,i)})},Nr.tail=function(t){var n=null==t?0:t.length;return n?ti(t,1,n):[]},Nr.take=function(t,n,r){return t&&t.length?ti(t,0,(n=r||n===e?1:pa(n))<0?0:n):[]},Nr.takeRight=function(t,n,r){var i=null==t?0:t.length;return i?ti(t,(n=i-(n=r||n===e?1:pa(n)))<0?0:n,i):[]},Nr.takeRightWhile=function(t,n){return t&&t.length?li(t,uu(n,3),!1,!0):[]},Nr.takeWhile=function(t,n){return t&&t.length?li(t,uu(n,3)):[]},Nr.tap=function(t,n){return n(t),t},Nr.throttle=function(t,n,r){var e=!0,u=!0;if(\"function\"!=typeof t)throw new Pt(i);return Xo(r)&&(e=\"leading\"in r?!!r.leading:e,u=\"trailing\"in r?!!r.trailing:u),zo(t,n,{leading:e,maxWait:n,trailing:u})},Nr.thru=so,Nr.toArray=sa,Nr.toPairs=La,Nr.toPairsIn=Na,Nr.toPath=function(t){return $o(t)?kn(t,Du):aa(t)?[t]:Si(Cu(ya(t)))},Nr.toPlainObject=da,Nr.transform=function(t,n,r){var e=$o(t),i=e||Ko(t)||ca(t);if(n=uu(n,4),null==r){var u=t&&t.constructor;r=i?e?new u:[]:Xo(t)&&Jo(u)?Tr(Ht(t)):{}}return(i?In:ge)(t,function(t,e,i){return n(r,t,e,i)}),r},Nr.unary=function(t){return So(t,1)},Nr.union=Xu,Nr.unionBy=to,Nr.unionWith=no,Nr.uniq=function(t){return t&&t.length?ai(t):[]},Nr.uniqBy=function(t,n){return t&&t.length?ai(t,uu(n,2)):[]},Nr.uniqWith=function(t,n){return n=\"function\"==typeof n?n:e,t&&t.length?ai(t,e,n):[]},Nr.unset=function(t,n){return null==t||ci(t,n)},Nr.unzip=ro,Nr.unzipWith=eo,Nr.update=function(t,n,r){return null==t?t:fi(t,n,_i(r))},Nr.updateWith=function(t,n,r,i){return i=\"function\"==typeof i?i:e,null==t?t:fi(t,n,_i(r),i)},Nr.values=Ta,Nr.valuesIn=function(t){return null==t?[]:Jn(t,ka(t))},Nr.without=io,Nr.words=Ja,Nr.wrap=function(t,n){return Wo(_i(n),t)},Nr.xor=uo,Nr.xorBy=oo,Nr.xorWith=ao,Nr.zip=co,Nr.zipObject=function(t,n){return pi(t||[],n||[],Xr)},Nr.zipObjectDeep=function(t,n){return pi(t||[],n||[],Je)},Nr.zipWith=fo,Nr.entries=La,Nr.entriesIn=Na,Nr.extend=ma,Nr.extendWith=ba,oc(Nr,Nr),Nr.add=yc,Nr.attempt=Ya,Nr.camelCase=Ua,Nr.capitalize=Ba,Nr.ceil=gc,Nr.clamp=function(t,n,r){return r===e&&(r=n,n=e),r!==e&&(r=(r=_a(r))==r?r:0),n!==e&&(n=(n=_a(n))==n?n:0),ue(_a(t),n,r)},Nr.clone=function(t){return oe(t,4)},Nr.cloneDeep=function(t){return oe(t,5)},Nr.cloneDeepWith=function(t,n){return oe(t,5,n=\"function\"==typeof n?n:e)},Nr.cloneWith=function(t,n){return oe(t,4,n=\"function\"==typeof n?n:e)},Nr.conformsTo=function(t,n){return null==n||ae(t,n,za(n))},Nr.deburr=Ma,Nr.defaultTo=function(t,n){return null==t||t!=t?n:t},Nr.divide=mc,Nr.endsWith=function(t,n,r){t=ya(t),n=oi(n);var i=t.length,u=r=r===e?i:ue(pa(r),0,i);return(r-=n.length)>=0&&t.slice(r,u)==n},Nr.eq=To,Nr.escape=function(t){return(t=ya(t))&&K.test(t)?t.replace(q,nr):t},Nr.escapeRegExp=function(t){return(t=ya(t))&&nt.test(t)?t.replace(tt,\"\\\\$&\"):t},Nr.every=function(t,n,r){var i=$o(t)?Pn:he;return r&&du(t,n,r)&&(n=e),i(t,uu(n,3))},Nr.find=vo,Nr.findIndex=Bu,Nr.findKey=function(t,n){return Ln(t,uu(n,3),ge)},Nr.findLast=_o,Nr.findLastIndex=Mu,Nr.findLastKey=function(t,n){return Ln(t,uu(n,3),me)},Nr.floor=bc,Nr.forEach=yo,Nr.forEachRight=go,Nr.forIn=function(t,n){return null==t?t:de(t,uu(n,3),ka)},Nr.forInRight=function(t,n){return null==t?t:ye(t,uu(n,3),ka)},Nr.forOwn=function(t,n){return t&&ge(t,uu(n,3))},Nr.forOwnRight=function(t,n){return t&&me(t,uu(n,3))},Nr.get=Ia,Nr.gt=Uo,Nr.gte=Bo,Nr.has=function(t,n){return null!=t&&hu(t,n,Ie)},Nr.hasIn=Sa,Nr.head=Hu,Nr.identity=rc,Nr.includes=function(t,n,r,e){t=qo(t)?t:Ta(t),r=r&&!e?pa(r):0;var i=t.length;return r<0&&(r=dr(i+r,0)),oa(t)?r<=i&&t.indexOf(n,r)>-1:!!i&&Tn(t,n,r)>-1},Nr.indexOf=function(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=null==r?0:pa(r);return i<0&&(i=dr(e+i,0)),Tn(t,n,i)},Nr.inRange=function(t,n,r){return n=ha(n),r===e?(r=n,n=0):r=ha(r),function(t,n,r){return t>=yr(n,r)&&t<dr(n,r)}(t=_a(t),n,r)},Nr.invoke=Ea,Nr.isArguments=Mo,Nr.isArray=$o,Nr.isArrayBuffer=Ho,Nr.isArrayLike=qo,Nr.isArrayLikeObject=Zo,Nr.isBoolean=function(t){return!0===t||!1===t||ta(t)&&xe(t)==d},Nr.isBuffer=Ko,Nr.isDate=Go,Nr.isElement=function(t){return ta(t)&&1===t.nodeType&&!ea(t)},Nr.isEmpty=function(t){if(null==t)return!0;if(qo(t)&&($o(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Ko(t)||ca(t)||Mo(t)))return!t.length;var n=su(t);if(n==w||n==S)return!t.size;if(bu(t))return!Ce(t).length;for(var r in t)if(Ft.call(t,r))return!1;return!0},Nr.isEqual=function(t,n){return ze(t,n)},Nr.isEqualWith=function(t,n,r){var i=(r=\"function\"==typeof r?r:e)?r(t,n):e;return i===e?ze(t,n,e,r):!!i},Nr.isError=Vo,Nr.isFinite=function(t){return\"number\"==typeof t&&Hn(t)},Nr.isFunction=Jo,Nr.isInteger=Yo,Nr.isLength=Qo,Nr.isMap=na,Nr.isMatch=function(t,n){return t===n||ke(t,n,au(n))},Nr.isMatchWith=function(t,n,r){return r=\"function\"==typeof r?r:e,ke(t,n,au(n),r)},Nr.isNaN=function(t){return ra(t)&&t!=+t},Nr.isNative=function(t){if(mu(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Re(t)},Nr.isNil=function(t){return null==t},Nr.isNull=function(t){return null===t},Nr.isNumber=ra,Nr.isObject=Xo,Nr.isObjectLike=ta,Nr.isPlainObject=ea,Nr.isRegExp=ia,Nr.isSafeInteger=function(t){return Yo(t)&&t>=-9007199254740991&&t<=l},Nr.isSet=ua,Nr.isString=oa,Nr.isSymbol=aa,Nr.isTypedArray=ca,Nr.isUndefined=function(t){return t===e},Nr.isWeakMap=function(t){return ta(t)&&su(t)==E},Nr.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==xe(t)},Nr.join=function(t,n){return null==t?\"\":vr.call(t,n)},Nr.kebabCase=$a,Nr.last=Gu,Nr.lastIndexOf=function(t,n,r){var i=null==t?0:t.length;if(!i)return-1;var u=i;return r!==e&&(u=(u=pa(r))<0?dr(i+u,0):yr(u,i-1)),n==n?function(t,n,r){for(var e=r+1;e--;)if(t[e]===n)return e;return e}(t,n,u):Nn(t,Bn,u,!0)},Nr.lowerCase=Ha,Nr.lowerFirst=qa,Nr.lt=fa,Nr.lte=la,Nr.max=function(t){return t&&t.length?pe(t,rc,je):e},Nr.maxBy=function(t,n){return t&&t.length?pe(t,uu(n,2),je):e},Nr.mean=function(t){return Mn(t,rc)},Nr.meanBy=function(t,n){return Mn(t,uu(n,2))},Nr.min=function(t){return t&&t.length?pe(t,rc,De):e},Nr.minBy=function(t,n){return t&&t.length?pe(t,uu(n,2),De):e},Nr.stubArray=vc,Nr.stubFalse=_c,Nr.stubObject=function(){return{}},Nr.stubString=function(){return\"\"},Nr.stubTrue=function(){return!0},Nr.multiply=wc,Nr.nth=function(t,n){return t&&t.length?Ue(t,pa(n)):e},Nr.noConflict=function(){return sn._===this&&(sn._=Nt),this},Nr.noop=ac,Nr.now=Io,Nr.pad=function(t,n,r){t=ya(t);var e=(n=pa(n))?fr(t):0;if(!n||e>=n)return t;var i=(n-e)/2;return Bi(_n(i),r)+t+Bi(pn(i),r)},Nr.padEnd=function(t,n,r){t=ya(t);var e=(n=pa(n))?fr(t):0;return n&&e<n?t+Bi(n-e,r):t},Nr.padStart=function(t,n,r){t=ya(t);var e=(n=pa(n))?fr(t):0;return n&&e<n?Bi(n-e,r)+t:t},Nr.parseInt=function(t,n,r){return r||null==n?n=0:n&&(n=+n),mr(ya(t).replace(rt,\"\"),n||0)},Nr.random=function(t,n,r){if(r&&\"boolean\"!=typeof r&&du(t,n,r)&&(n=r=e),r===e&&(\"boolean\"==typeof n?(r=n,n=e):\"boolean\"==typeof t&&(r=t,t=e)),t===e&&n===e?(t=0,n=1):(t=ha(t),n===e?(n=t,t=0):n=ha(n)),t>n){var i=t;t=n,n=i}if(r||t%1||n%1){var u=br();return yr(t+u*(n-t+an(\"1e-\"+((u+\"\").length-1))),n)}return qe(t,n)},Nr.reduce=function(t,n,r){var e=$o(t)?Fn:qn,i=arguments.length<3;return e(t,uu(n,4),r,i,le)},Nr.reduceRight=function(t,n,r){var e=$o(t)?Cn:qn,i=arguments.length<3;return e(t,uu(n,4),r,i,se)},Nr.repeat=function(t,n,r){return n=(r?du(t,n,r):n===e)?1:pa(n),Ze(ya(t),n)},Nr.replace=function(){var t=arguments,n=ya(t[0]);return t.length<3?n:n.replace(t[1],t[2])},Nr.result=function(t,n,r){var i=-1,u=(n=di(n,t)).length;for(u||(u=1,t=e);++i<u;){var o=null==t?e:t[Du(n[i])];o===e&&(i=u,o=r),t=Jo(o)?o.call(t):o}return t},Nr.round=Oc,Nr.runInContext=t,Nr.sample=function(t){return($o(t)?Vr:Ge)(t)},Nr.size=function(t){if(null==t)return 0;if(qo(t))return oa(t)?fr(t):t.length;var n=su(t);return n==w||n==S?t.size:Ce(t).length},Nr.snakeCase=Za,Nr.some=function(t,n,r){var i=$o(t)?Dn:ni;return r&&du(t,n,r)&&(n=e),i(t,uu(n,3))},Nr.sortedIndex=function(t,n){return ri(t,n)},Nr.sortedIndexBy=function(t,n,r){return ei(t,n,uu(r,2))},Nr.sortedIndexOf=function(t,n){var r=null==t?0:t.length;if(r){var e=ri(t,n);if(e<r&&To(t[e],n))return e}return-1},Nr.sortedLastIndex=function(t,n){return ri(t,n,!0)},Nr.sortedLastIndexBy=function(t,n,r){return ei(t,n,uu(r,2),!0)},Nr.sortedLastIndexOf=function(t,n){if(null!=t&&t.length){var r=ri(t,n,!0)-1;if(To(t[r],n))return r}return-1},Nr.startCase=Ka,Nr.startsWith=function(t,n,r){return t=ya(t),r=null==r?0:ue(pa(r),0,t.length),n=oi(n),t.slice(r,r+n.length)==n},Nr.subtract=xc,Nr.sum=function(t){return t&&t.length?Zn(t,rc):0},Nr.sumBy=function(t,n){return t&&t.length?Zn(t,uu(n,2)):0},Nr.template=function(t,n,r){var i=Nr.templateSettings;r&&du(t,n,r)&&(n=e),t=ya(t),n=wa({},n,i,Vi);var u=wa({},n.imports,i.imports,Vi),o=za(u),a=Jn(u,o);In(o,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,f,l=0,s=n.interpolate||gt,h=\"__p += '\",p=It((n.escape||gt).source+\"|\"+s.source+\"|\"+(s===J?lt:gt).source+\"|\"+(n.evaluate||gt).source+\"|$\",\"g\"),v=\"//# sourceURL=\"+(Ft.call(n,\"sourceURL\")?(n.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++rn+\"]\")+\"\\n\";t.replace(p,function(n,r,e,i,u,o){return e||(e=i),h+=t.slice(l,o).replace(mt,rr),r&&(c=!0,h+=\"' +\\n__e(\"+r+\") +\\n'\"),u&&(f=!0,h+=\"';\\n\"+u+\";\\n__p += '\"),e&&(h+=\"' +\\n((__t = (\"+e+\")) == null ? '' : __t) +\\n'\"),l=o+n.length,n}),h+=\"';\\n\";var _=Ft.call(n,\"variable\")&&n.variable;if(_){if(ct.test(_))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(f?h.replace(B,\"\"):h).replace(M,\"$1\").replace($,\"$1;\"),h=\"function(\"+(_||\"obj\")+\") {\\n\"+(_?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(f?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var d=Ya(function(){return Ot(o,v+\"return \"+h).apply(e,a)});if(d.source=h,Vo(d))throw d;return d},Nr.times=function(t,n){if((t=pa(t))<1||t>l)return[];var r=h,e=yr(t,h);n=uu(n),t-=h;for(var i=Kn(e,n);++r<t;)n(r);return i},Nr.toFinite=ha,Nr.toInteger=pa,Nr.toLength=va,Nr.toLower=function(t){return ya(t).toLowerCase()},Nr.toNumber=_a,Nr.toSafeInteger=function(t){return t?ue(pa(t),-9007199254740991,l):0===t?t:0},Nr.toString=ya,Nr.toUpper=function(t){return ya(t).toUpperCase()},Nr.trim=function(t,n,r){if((t=ya(t))&&(r||n===e))return Gn(t);if(!t||!(n=oi(n)))return t;var i=lr(t),u=lr(n);return gi(i,Qn(i,u),Xn(i,u)+1).join(\"\")},Nr.trimEnd=function(t,n,r){if((t=ya(t))&&(r||n===e))return t.slice(0,sr(t)+1);if(!t||!(n=oi(n)))return t;var i=lr(t);return gi(i,0,Xn(i,lr(n))+1).join(\"\")},Nr.trimStart=function(t,n,r){if((t=ya(t))&&(r||n===e))return t.replace(rt,\"\");if(!t||!(n=oi(n)))return t;var i=lr(t);return gi(i,Qn(i,lr(n))).join(\"\")},Nr.truncate=function(t,n){var r=30,i=\"...\";if(Xo(n)){var u=\"separator\"in n?n.separator:u;r=\"length\"in n?pa(n.length):r,i=\"omission\"in n?oi(n.omission):i}var o=(t=ya(t)).length;if(er(t)){var a=lr(t);o=a.length}if(r>=o)return t;var c=r-fr(i);if(c<1)return i;var f=a?gi(a,0,c).join(\"\"):t.slice(0,c);if(u===e)return f+i;if(a&&(c+=f.length-c),ia(u)){if(t.slice(c).search(u)){var l,s=f;for(u.global||(u=It(u.source,ya(st.exec(u))+\"g\")),u.lastIndex=0;l=u.exec(s);)var h=l.index;f=f.slice(0,h===e?c:h)}}else if(t.indexOf(oi(u),c)!=c){var p=f.lastIndexOf(u);p>-1&&(f=f.slice(0,p))}return f+i},Nr.unescape=function(t){return(t=ya(t))&&Z.test(t)?t.replace(H,hr):t},Nr.uniqueId=function(t){var n=++Ct;return ya(t)+n},Nr.upperCase=Ga,Nr.upperFirst=Va,Nr.each=yo,Nr.eachRight=go,Nr.first=Hu,oc(Nr,(dc={},ge(Nr,function(t,n){Ft.call(Nr.prototype,n)||(dc[n]=t)}),dc),{chain:!1}),Nr.VERSION=\"4.18.1\",In([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Nr[t].placeholder=Nr}),In([\"drop\",\"take\"],function(t,n){Mr.prototype[t]=function(r){r=r===e?1:dr(pa(r),0);var i=this.__filtered__&&!n?new Mr(this):this.clone();return i.__filtered__?i.__takeCount__=yr(r,i.__takeCount__):i.__views__.push({size:yr(r,h),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Mr.prototype[t+\"Right\"]=function(n){return this.reverse()[t](n).reverse()}}),In([\"filter\",\"map\",\"takeWhile\"],function(t,n){var r=n+1,e=1==r||3==r;Mr.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:uu(t,3),type:r}),n.__filtered__=n.__filtered__||e,n}}),In([\"head\",\"last\"],function(t,n){var r=\"take\"+(n?\"Right\":\"\");Mr.prototype[t]=function(){return this[r](1).value()[0]}}),In([\"initial\",\"tail\"],function(t,n){var r=\"drop\"+(n?\"\":\"Right\");Mr.prototype[t]=function(){return this.__filtered__?new Mr(this):this[r](1)}}),Mr.prototype.compact=function(){return this.filter(rc)},Mr.prototype.find=function(t){return this.filter(t).head()},Mr.prototype.findLast=function(t){return this.reverse().find(t)},Mr.prototype.invokeMap=Ke(function(t,n){return\"function\"==typeof t?new Mr(this):this.map(function(r){return Ae(r,t,n)})}),Mr.prototype.reject=function(t){return this.filter(Co(uu(t)))},Mr.prototype.slice=function(t,n){t=pa(t);var r=this;return r.__filtered__&&(t>0||n<0)?new Mr(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),n!==e&&(r=(n=pa(n))<0?r.dropRight(-n):r.take(n-t)),r)},Mr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Mr.prototype.toArray=function(){return this.take(h)},ge(Mr.prototype,function(t,n){var r=/^(?:filter|find|map|reject)|While$/.test(n),i=/^(?:head|last)$/.test(n),u=Nr[i?\"take\"+(\"last\"==n?\"Right\":\"\"):n],o=i||/^find/.test(n);u&&(Nr.prototype[n]=function(){var n=this.__wrapped__,a=i?[1]:arguments,c=n instanceof Mr,f=a[0],l=c||$o(n),s=function(t){var n=u.apply(Nr,Rn([t],a));return i&&h?n[0]:n};l&&r&&\"function\"==typeof f&&1!=f.length&&(c=l=!1);var h=this.__chain__,p=!!this.__actions__.length,v=o&&!h,_=c&&!p;if(!o&&l){n=_?n:new Mr(this);var d=t.apply(n,a);return d.__actions__.push({func:so,args:[s],thisArg:e}),new Br(d,h)}return v&&_?t.apply(this,a):(d=this.thru(s),v?i?d.value()[0]:d.value():d)})}),In([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var n=At[t],r=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",e=/^(?:pop|shift)$/.test(t);Nr.prototype[t]=function(){var t=arguments;if(e&&!this.__chain__){var i=this.value();return n.apply($o(i)?i:[],t)}return this[r](function(r){return n.apply($o(r)?r:[],t)})}}),ge(Mr.prototype,function(t,n){var r=Nr[n];if(r){var e=r.name+\"\";Ft.call(Er,e)||(Er[e]=[]),Er[e].push({name:n,func:r})}}),Er[Li(e,2).name]=[{name:\"wrapper\",func:e}],Mr.prototype.clone=function(){var t=new Mr(this.__wrapped__);return t.__actions__=Si(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Si(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Si(this.__views__),t},Mr.prototype.reverse=function(){if(this.__filtered__){var t=new Mr(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Mr.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,r=$o(t),e=n<0,i=r?t.length:0,u=function(t,n,r){for(var e=-1,i=r.length;++e<i;){var u=r[e],o=u.size;switch(u.type){case\"drop\":t+=o;break;case\"dropRight\":n-=o;break;case\"take\":n=yr(n,t+o);break;case\"takeRight\":t=dr(t,n-o)}}return{start:t,end:n}}(0,i,this.__views__),o=u.start,a=u.end,c=a-o,f=e?a:o-1,l=this.__iteratees__,s=l.length,h=0,p=yr(c,this.__takeCount__);if(!r||!e&&i==c&&p==c)return si(t,this.__actions__);var v=[];t:for(;c--&&h<p;){for(var _=-1,d=t[f+=n];++_<s;){var y=l[_],g=y.iteratee,m=y.type,b=g(d);if(2==m)d=b;else if(!b){if(1==m)continue t;break t}}v[h++]=d}return v},Nr.prototype.at=ho,Nr.prototype.chain=function(){return lo(this)},Nr.prototype.commit=function(){return new Br(this.value(),this.__chain__)},Nr.prototype.next=function(){this.__values__===e&&(this.__values__=sa(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?e:this.__values__[this.__index__++]}},Nr.prototype.plant=function(t){for(var n,r=this;r instanceof Ur;){var i=Lu(r);i.__index__=0,i.__values__=e,n?u.__wrapped__=i:n=i;var u=i;r=r.__wrapped__}return u.__wrapped__=t,n},Nr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Mr){var n=t;return this.__actions__.length&&(n=new Mr(this)),(n=n.reverse()).__actions__.push({func:so,args:[Qu],thisArg:e}),new Br(n,this.__chain__)}return this.thru(Qu)},Nr.prototype.toJSON=Nr.prototype.valueOf=Nr.prototype.value=function(){return si(this.__wrapped__,this.__actions__)},Nr.prototype.first=Nr.prototype.head,Yt&&(Nr.prototype[Yt]=function(){return this}),Nr}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(sn._=pr,define(function(){return pr})):pn?((pn.exports=pr)._=pr,hn._=pr):sn._=pr}.call(this)}},n={};function r(e){var i=n[e];if(void 0!==i)return i.exports;var u=n[e]={id:e,loaded:!1,exports:{}};return t[e].call(u.exports,u,u.exports,r),u.loaded=!0,u.exports}r.d=(t,n)=>{for(var e in n)r.o(n,e)&&!r.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var e={};(()=>{\"use strict\";function t(t,n){return Object.assign(t,{resolveIds:n})}r.r(e),r.d(e,{createCheckoutComAPMPaymentStrategy:()=>R,createCheckoutComCreditCardPaymentStrategy:()=>I,createCheckoutComFawryPaymentStrategy:()=>m,createCheckoutComIdealPaymentStrategy:()=>E,createCheckoutComSepaPaymentStrategy:()=>P});class n extends Error{constructor(t){var n;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",n=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class i extends n{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class u extends i{constructor(t){let n=\"Unable to submit payment for the order because the payload is invalid.\";t&&(n=`${n} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(n),this.name=\"PaymentArgumentInvalidError\"}}var o,a=r(9440);class c extends n{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(o||(o={}));class f extends n{constructor(t){super(function(t){switch(t){case o.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case o.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case o.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case o.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var l,s=function(t,n,r,e){return new(r||(r=Promise))(function(i,u){function o(t){try{c(e.next(t))}catch(t){u(t)}}function a(t){try{c(e.throw(t))}catch(t){u(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof r?n:new r(function(t){t(n)})).then(o,a)}c((e=e.apply(t,n||[])).next())})},h=function(t,n){var r={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.indexOf(e)<0&&(r[e]=t[e]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(e=Object.getOwnPropertySymbols(t);i<e.length;i++)n.indexOf(e[i])<0&&Object.prototype.propertyIsEnumerable.call(t,e[i])&&(r[e[i]]=t[e[i]])}return r};class p{constructor(t){this._paymentIntegrationService=t}execute(t,n){var r,e;return this._isHostedPaymentFormEnabled(null===(r=t.payment)||void 0===r?void 0:r.methodId,null===(e=t.payment)||void 0===e?void 0:e.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(t,n):this._executeWithoutHostedForm(t,n)}initialize(t){if(!this._isHostedPaymentFormEnabled(null==t?void 0:t.methodId,null==t?void 0:t.gatewayId)||!this._isHostedFieldAvailable(t))return this._shouldRenderHostedForm=!1,Promise.resolve();const n=t&&t.creditCard&&t.creditCard.form,r=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:e=\"\"}={}}=r.getStoreConfigOrThrow();if(!n)throw new i;const u=this._paymentIntegrationService.createHostedForm(e,n);return u.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=u,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new c)}_executeWithoutHostedForm(t,n){return s(this,void 0,void 0,function*(){const{payment:r}=t,e=h(t,[\"payment\"]),i=r&&r.paymentData;if(!r||!i)throw new u([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(e,n),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:i}))})}_executeWithHostedForm(t,n){return s(this,void 0,void 0,function*(){const{payment:r}=t,e=h(t,[\"payment\"]),i=this._hostedForm;if(!i)throw new f(o.PaymentNotInitialized);if(!r||!r.methodId)throw new u([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(e,n),yield i.validate().then(()=>i.submit(r))})}_isHostedPaymentFormEnabled(t,n){return!!t&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n).config.isHostedFormEnabled}_isHostedFieldAvailable(t){return!(0,a.values)(t&&t.creditCard&&t.creditCard.form.fields).every(a.isNil)}}!function(t){t.ACKNOWLEDGE=\"ACKNOWLEDGE\",t.FINALIZE=\"FINALIZE\",t.INITIALIZE=\"INITIALIZE\"}(l||(l={}));const v=l,_=t=>\"object\"==typeof t&&null!==t&&\"body\"in t;var d;!function(t){t.OffsiteRedirect=\"offsite_redirect\"}(d||(d={}));class y extends p{constructor(t){super(t),this.paymentIntegrationService=t}finalize(t){const n=this.paymentIntegrationService.getState();return n.getOrder()&&n.getPaymentStatus()===v.FINALIZE&&this.paymentIntegrationService.finalizeOrder(t),Promise.reject(new c)}_executeWithHostedForm(t,n){return r=this,e=void 0,a=function*(){const{payment:r}=t,e=function(t,n){var r={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.indexOf(e)<0&&(r[e]=t[e]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(e=Object.getOwnPropertySymbols(t);i<e.length;i++)n.indexOf(e[i])<0&&Object.prototype.propertyIsEnumerable.call(t,e[i])&&(r[e[i]]=t[e[i]])}return r}(t,[\"payment\"]),i=this._hostedForm;if(!i)throw new f(o.PaymentNotInitialized);if(!r||!r.methodId)throw new u([\"payment.methodId\"]);try{yield i.validate(),yield this.paymentIntegrationService.submitOrder(e,n),yield i.submit(r)}catch(t){return this._processResponse(t)}this.paymentIntegrationService.loadCurrentOrder()},new((i=void 0)||(i=Promise))(function(t,n){function u(t){try{c(a.next(t))}catch(t){n(t)}}function o(t){try{c(a.throw(t))}catch(t){n(t)}}function c(n){var r;n.done?t(n.value):(r=n.value,r instanceof i?r:new i(function(t){t(r)})).then(u,o)}c((a=a.apply(r,e||[])).next())});var r,e,i,a}_processResponse(t){if(!_(t))return Promise.reject(t);const n=t.body.additional_action_required;return n&&n.type===d.OffsiteRedirect?this._performRedirect(n):Promise.reject(t)}_performRedirect(t){return new Promise(()=>{window.location.replace(t.data.redirect_url)})}}class g extends y{_executeWithoutHostedForm(t,n){return r=this,e=void 0,o=function*(){const{payment:r}=t,e=function(t,n){var r={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.indexOf(e)<0&&(r[e]=t[e]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(e=Object.getOwnPropertySymbols(t);i<e.length;i++)n.indexOf(e[i])<0&&Object.prototype.propertyIsEnumerable.call(t,e[i])&&(r[e[i]]=t[e[i]])}return r}(t,[\"payment\"]),i=r&&r.paymentData;if(!r||!i)throw new u([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(e,n);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:Object.assign(Object.assign({},i),{formattedPayload:this._createFormattedPayload(r.methodId,i)})}))}catch(t){return this._processResponse(t)}},new((i=void 0)||(i=Promise))(function(t,n){function u(t){try{c(o.next(t))}catch(t){n(t)}}function a(t){try{c(o.throw(t))}catch(t){n(t)}}function c(n){var r;n.done?t(n.value):(r=n.value,r instanceof i?r:new i(function(t){t(r)})).then(u,a)}c((o=o.apply(r,e||[])).next())});var r,e,i,o}_createFormattedPayload(t,n){if(\"fawry\"===t&&\"customerMobile\"in n&&\"customerEmail\"in n){const t=n;return{customerMobile:t.customerMobile,customerEmail:t.customerEmail}}}}const m=t(t=>new g(t),[{gateway:\"checkoutcom\",id:\"fawry\"}]);var b=r(8686);function w(t){return _(t)&&(0,a.some)(t.body.errors,{code:\"three_d_secure_required\"})}var O=function(t,n,r,e){return new(r||(r=Promise))(function(i,u){function o(t){try{c(e.next(t))}catch(t){u(t)}}function a(t){try{c(e.throw(t))}catch(t){u(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof r?n:new r(function(t){t(n)})).then(o,a)}c((e=e.apply(t,n||[])).next())})},x=function(t,n){var r={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.indexOf(e)<0&&(r[e]=t[e]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(e=Object.getOwnPropertySymbols(t);i<e.length;i++)n.indexOf(e[i])<0&&Object.prototype.propertyIsEnumerable.call(t,e[i])&&(r[e[i]]=t[e[i]])}return r};class j extends p{constructor(t,n){super(t),this.paymentIntegrationService=t,this.formPoster=n}finalize(t){const n=this.paymentIntegrationService.getState();return n.getOrder()&&n.getPaymentStatus()===v.FINALIZE&&this.paymentIntegrationService.finalizeOrder(t),Promise.reject(new c)}_executeWithoutHostedForm(t,n){return O(this,void 0,void 0,function*(){const{payment:r}=t,e=x(t,[\"payment\"]),i=r&&r.paymentData;if(!r||!i)throw new u([\"payment.paymentData\"]);yield this.paymentIntegrationService.submitOrder(e,n);try{yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:i}))}catch(t){return w(t)?this._handleThreeDSecure(t):Promise.reject(t)}})}_executeWithHostedForm(t,n){return O(this,void 0,void 0,function*(){const{payment:r}=t,e=x(t,[\"payment\"]),i=this._hostedForm;if(!i)throw new f(o.PaymentNotInitialized);if(!r||!r.methodId)throw new u([\"payment.methodId\"]);try{yield i.validate(),yield this.paymentIntegrationService.submitOrder(e,n),yield i.submit(r)}catch(t){return w(t)?this._handleThreeDSecure(t):Promise.reject(t)}this.paymentIntegrationService.loadCurrentOrder()})}_handleThreeDSecure(t){const{acs_url:n,payer_auth_request:r,callback_url:e,merchant_data:i}=t.body.three_ds_result;return new Promise(()=>this.formPoster.postForm(n,{PaReq:r||null,TermUrl:e||null,MD:i||null}))}}const I=t(t=>new j(t,(0,b.createFormPoster)()),[{gateway:\"checkoutcom\",id:\"credit_card\"},{gateway:\"checkoutcom\",id:\"card\"}]);class S extends y{_executeWithoutHostedForm(t,n){return r=this,e=void 0,o=function*(){const{payment:r}=t,e=function(t,n){var r={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.indexOf(e)<0&&(r[e]=t[e]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(e=Object.getOwnPropertySymbols(t);i<e.length;i++)n.indexOf(e[i])<0&&Object.prototype.propertyIsEnumerable.call(t,e[i])&&(r[e[i]]=t[e[i]])}return r}(t,[\"payment\"]),i=null==r?void 0:r.paymentData;if(!r||!i)throw new u([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(e,n);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:Object.assign(Object.assign({},i),{formattedPayload:this._createFormattedPayload(r.methodId,i)})}))}catch(t){return this._processResponse(t)}},new((i=void 0)||(i=Promise))(function(t,n){function u(t){try{c(o.next(t))}catch(t){n(t)}}function a(t){try{c(o.throw(t))}catch(t){n(t)}}function c(n){var r;n.done?t(n.value):(r=n.value,r instanceof i?r:new i(function(t){t(r)})).then(u,a)}c((o=o.apply(r,e||[])).next())});var r,e,i,o}_createFormattedPayload(t,n){const r={iban:\"\",bic:\"\"};if(\"sepa\"===t&&document&&\"iban\"in n&&\"bic\"in n){const{iban:t,bic:e}=n;r.iban=t,r.bic=e}return r}}const P=t(t=>new S(t),[{gateway:\"checkoutcom\",id:\"sepa\"}]);class A extends y{_executeWithoutHostedForm(t,n){return r=this,e=void 0,o=function*(){const{payment:r}=t,e=function(t,n){var r={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.indexOf(e)<0&&(r[e]=t[e]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(e=Object.getOwnPropertySymbols(t);i<e.length;i++)n.indexOf(e[i])<0&&Object.prototype.propertyIsEnumerable.call(t,e[i])&&(r[e[i]]=t[e[i]])}return r}(t,[\"payment\"]),i=null==r?void 0:r.paymentData;if(!r||!i)throw new u([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(e,n);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:Object.assign(Object.assign({},i),{formattedPayload:this._createFormattedPayload(r.methodId,i)})}))}catch(t){return this._processResponse(t)}},new((i=void 0)||(i=Promise))(function(t,n){function u(t){try{c(o.next(t))}catch(t){n(t)}}function a(t){try{c(o.throw(t))}catch(t){n(t)}}function c(n){var r;n.done?t(n.value):(r=n.value,r instanceof i?r:new i(function(t){t(r)})).then(u,a)}c((o=o.apply(r,e||[])).next())});var r,e,i,o}_createFormattedPayload(t,n){if(\"ideal\"===t&&\"bic\"in n)return{bic:n.bic}}}const E=t(t=>new A(t),[{gateway:\"checkoutcom\",id:\"ideal\"}]);const z=[\"boleto\",\"oxxo\",\"qpay\",\"ideal\"];class k extends y{_executeWithoutHostedForm(t,n){return r=this,e=void 0,o=function*(){const{payment:r}=t,e=function(t,n){var r={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.indexOf(e)<0&&(r[e]=t[e]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(e=Object.getOwnPropertySymbols(t);i<e.length;i++)n.indexOf(e[i])<0&&Object.prototype.propertyIsEnumerable.call(t,e[i])&&(r[e[i]]=t[e[i]])}return r}(t,[\"payment\"]),i=null==r?void 0:r.paymentData;if(!r||!i)throw new u([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(e,n);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:Object.assign(Object.assign({},i),{formattedPayload:this._createFormattedPayload(r.methodId,i)})}))}catch(t){return this._processResponse(t)}},new((i=void 0)||(i=Promise))(function(t,n){function u(t){try{c(o.next(t))}catch(t){n(t)}}function a(t){try{c(o.throw(t))}catch(t){n(t)}}function c(n){var r;n.done?t(n.value):(r=n.value,r instanceof i?r:new i(function(t){t(r)})).then(u,a)}c((o=o.apply(r,e||[])).next())});var r,e,i,o}_createFormattedPayload(t,n){const r={ccDocument:\"\"},e=\"ccDocument\"in n?n.ccDocument:\"\";return-1!==z.indexOf(t)&&e&&(r.ccDocument=e),r}}const R=t(t=>new k(t),[{gateway:\"checkoutcom\"}])})(),module.exports=e})();\n//# sourceMappingURL=checkoutcom-custom.js.map"
  },
  {
    "path": "dist/cjs/integrations/clearpay.js",
    "content": "(()=>{var t={4325(t,n,e){\"use strict\";e.d(n,{g:()=>i});var r=e(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,n){var e=this.getKey(t,n.params);return this._cache[e]||null},t.prototype.write=function(t,n,e){var r=this.getKey(t,n.params);this._cache[r]=e},t.prototype.getKey=function(t,n){return void 0===n&&(n={}),0===Object.keys(n).length?t:\"\".concat(t,\"?\").concat(r.stringify(n))},t}()},321(t,n,e){\"use strict\";e.d(n,{A:()=>a});var r=e(168),i=e(1675),o=e(5861),u=e(4670);function a(t){return new u.A(new o.A,new i.A,r,t)}},6889(t,n,e){\"use strict\";e.d(n,{A:()=>i});var r=e(2024);function i(t){return new r.A(t)}},4043(t,n,e){\"use strict\";e.r(n),e.d(n,{RequestSender:()=>o.A,Timeout:()=>u.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=e(321),i=e(6889),o=e(4670),u=e(2024)},4843(t,n,e){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}e.d(n,{A:()=>r})},1675(t,n,e){\"use strict\";e.d(n,{A:()=>a});var r=e(1635),i=e(710),o=/application\\/(\\w+\\+)?json/,u=/application\\/x-www-form-urlencoded/;const a=function(){function t(){}return t.prototype.toRequestBody=function(t){var n=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(n))return JSON.stringify(t.body);if(u.test(n))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var n=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,n),headers:n,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,n){var e=this._getHeader(n,\"Content-Type\");return t&&o.test(e)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,n){var e,i=n.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((e={})[o.toLowerCase()]=i.join(\":\").trim(),e)):t},{})},t.prototype._getHeader=function(t,n){return t&&n&&(t[n]||t[n.toLowerCase()])||\"\"},t}()},5861(t,n,e){\"use strict\";e.d(n,{A:()=>i});var r=e(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,n){var e=new XMLHttpRequest;return this._configureRequest(e,t,n),e},t.prototype._configureRequest=function(t,n,e){void 0===e&&(e={}),t.open(e.method||\"GET\",this._formatUrl(n,e.params,e.encodeParams),!0),e.headers&&this._configureRequestHeaders(t,e.headers),\"boolean\"==typeof e.credentials&&(t.withCredentials=e.credentials),\"number\"==typeof e.timeout&&(t.timeout=e.timeout)},t.prototype._configureRequestHeaders=function(t,n){Object.keys(n).filter(function(t){return null!==n[t]}).forEach(function(e){t.setRequestHeader(e,n[e])})},t.prototype._formatUrl=function(t,n,e){return void 0===e&&(e=!0),n&&0!==Object.keys(n).length?\"\".concat(t,\"?\").concat(r.stringify(n,{encode:e})):t},t}()},4670(t,n,e){\"use strict\";e.d(n,{A:()=>s});var r=e(1635),i=e(35),o=e.n(i),u=e(4325),a=e(4843),c=e(2024);const s=function(){function t(t,n,e,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=n,this._cookie=e,this._options=r,this._cache=this._options.cache||new u.g}return t.prototype.sendRequest=function(t,n){var e=this,r=this._mergeDefaultOptions(t,n),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(n,i){var u=function(){var u=e._payloadTransformer.toResponse(o);u.status>=200&&u.status<300?(e._cacheRequest(t,r,u),n(u)):i(u)};o.onload=u,o.onerror=u,o.onabort=u,o.ontimeout=u,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,a.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(e._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"GET\"}))},t.prototype.post=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"POST\"}))},t.prototype.put=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"PUT\"}))},t.prototype.patch=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"PATCH\"}))},t.prototype.delete=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,n){var e={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&e.headers&&!this._isAssetRequest(t,n)&&this._isLocalRequest(t)&&(e.headers[\"X-XSRF-TOKEN\"]=r),n&&n.body&&e.headers&&(e.headers[\"Content-Type\"]=\"application/json\"),o()({},e,n)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,n){return this._shouldCacheRequest(n)?this._cache.read(t,n):null},t.prototype._cacheRequest=function(t,n,e){this._shouldCacheRequest(n)&&this._cache.write(t,n,e)},t.prototype._isAssetRequest=function(t,n){return(!n||!n.method||\"GET\"===n.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,n,e){\"use strict\";e.d(n,{A:()=>r});const r=function(){function t(t){var n=this;this._delay=t,this._promise=new Promise(function(t){n._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,n,e){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(n){return void 0!==t[n]}).map(function(n){var e=t[n];return\"string\"==typeof e?\"\".concat(n,\"=\").concat(encodeURIComponent(e)):\"\".concat(n,\"=\").concat(encodeURIComponent(JSON.stringify(e)||\"\"))}).join(\"&\")}e.d(n,{A:()=>r})},5889(t,n,e){\"use strict\";const r=e(803),i=e(1915),o=e(1657),u=e(3814);function a(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,n){return n.encode?n.strict?r(t):encodeURIComponent(t):t}function s(t,n){return n.decode?i(t):t}function f(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?f(Object.keys(t)).sort((t,n)=>Number(t)-Number(n)).map(n=>t[n]):t}function l(t){const n=t.indexOf(\"#\");return-1!==n&&(t=t.slice(0,n)),t}function p(t){const n=(t=l(t)).indexOf(\"?\");return-1===n?\"\":t.slice(n+1)}function h(t,n){return n.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!n.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function d(t,n){a((n=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},n)).arrayFormatSeparator);const e=function(t){let n;switch(t.arrayFormat){case\"index\":return(t,e,r)=>{n=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),n?(void 0===r[t]&&(r[t]={}),r[t][n[1]]=e):r[t]=e};case\"bracket\":return(t,e,r)=>{n=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),n?void 0!==r[t]?r[t]=[].concat(r[t],e):r[t]=[e]:r[t]=e};case\"comma\":case\"separator\":return(n,e,r)=>{const i=\"string\"==typeof e&&e.includes(t.arrayFormatSeparator),o=\"string\"==typeof e&&!i&&s(e,t).includes(t.arrayFormatSeparator);e=o?s(e,t):e;const u=i||o?e.split(t.arrayFormatSeparator).map(n=>s(n,t)):null===e?e:s(e,t);r[n]=u};default:return(t,n,e)=>{void 0!==e[t]?e[t]=[].concat(e[t],n):e[t]=n}}}(n),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,u]=o(n.decode?i.replace(/\\+/g,\" \"):i,\"=\");u=void 0===u?null:[\"comma\",\"separator\"].includes(n.arrayFormat)?u:s(u,n),e(s(t,n),u,r)}for(const t of Object.keys(r)){const e=r[t];if(\"object\"==typeof e&&null!==e)for(const t of Object.keys(e))e[t]=h(e[t],n);else r[t]=h(e,n)}return!1===n.sort?r:(!0===n.sort?Object.keys(r).sort():Object.keys(r).sort(n.sort)).reduce((t,n)=>{const e=r[n];return Boolean(e)&&\"object\"==typeof e&&!Array.isArray(e)?t[n]=f(e):t[n]=e,t},Object.create(null))}n.extract=p,n.parse=d,n.stringify=(t,n)=>{if(!t)return\"\";a((n=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},n)).arrayFormatSeparator);const e=e=>n.skipNull&&null==t[e]||n.skipEmptyString&&\"\"===t[e],r=function(t){switch(t.arrayFormat){case\"index\":return n=>(e,r)=>{const i=e.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,[c(n,t),\"[\",i,\"]\"].join(\"\")]:[...e,[c(n,t),\"[\",c(i,t),\"]=\",c(r,t)].join(\"\")]};case\"bracket\":return n=>(e,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,[c(n,t),\"[]\"].join(\"\")]:[...e,[c(n,t),\"[]=\",c(r,t)].join(\"\")];case\"comma\":case\"separator\":return n=>(e,r)=>null==r||0===r.length?e:0===e.length?[[c(n,t),\"=\",c(r,t)].join(\"\")]:[[e,c(r,t)].join(t.arrayFormatSeparator)];default:return n=>(e,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,c(n,t)]:[...e,[c(n,t),\"=\",c(r,t)].join(\"\")]}}(n),i={};for(const n of Object.keys(t))e(n)||(i[n]=t[n]);const o=Object.keys(i);return!1!==n.sort&&o.sort(n.sort),o.map(e=>{const i=t[e];return void 0===i?\"\":null===i?c(e,n):Array.isArray(i)?i.reduce(r(e),[]).join(\"&\"):c(e,n)+\"=\"+c(i,n)}).filter(t=>t.length>0).join(\"&\")},n.parseUrl=(t,n)=>{n=Object.assign({decode:!0},n);const[e,r]=o(t,\"#\");return Object.assign({url:e.split(\"?\")[0]||\"\",query:d(p(t),n)},n&&n.parseFragmentIdentifier&&r?{fragmentIdentifier:s(r,n)}:{})},n.stringifyUrl=(t,e)=>{e=Object.assign({encode:!0,strict:!0},e);const r=l(t.url).split(\"?\")[0]||\"\",i=n.extract(t.url),o=n.parse(i,{sort:!1}),u=Object.assign(o,t.query);let a=n.stringify(u,e);a&&(a=`?${a}`);let s=function(t){let n=\"\";const e=t.indexOf(\"#\");return-1!==e&&(n=t.slice(e)),n}(t.url);return t.fragmentIdentifier&&(s=`#${c(t.fragmentIdentifier,e)}`),`${r}${a}${s}`},n.pick=(t,e,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:a}=n.parseUrl(t,r);return n.stringifyUrl({url:i,query:u(o,e),fragmentIdentifier:a},r)},n.exclude=(t,e,r)=>{const i=Array.isArray(e)?t=>!e.includes(t):(t,n)=>!e(t,n);return n.pick(t,i,r)}},5477(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(){}return t.prototype.canSupportRel=function(t){var n=document.createElement(\"link\");return!!(n.relList&&n.relList.supports&&n.relList.supports(t))},t}();n.default=e},471(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=e(4043),i=e(5477),o=e(4886)},9722(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=e(4043),i=e(5477),o=e(7995)},5895(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return r||(r=(0,i.default)()),r};var r,i=e(471)},282(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return r||(r=(0,i.default)()),r};var r,i=e(9722)},315(t,n,e){\"use strict\";n.vQ=void 0;e(4886),e(471);var r=e(5895);Object.defineProperty(n,\"vQ\",{enumerable:!0,get:function(){return r.default}});e(7995),e(9722),e(282)},4886(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(t,n){this._browserSupport=t,this._requestSender=n,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,n){var e=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),u=n||{},a=u.async,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(n){delete e._scripts[t],i(n)},o.async=c,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.loadScript(t,n)})).then(function(){})},t.prototype.preloadScript=function(t,n){var e=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(n||{}).prefetch,u=void 0!==o&&o?\"prefetch\":\"preload\";if(e._browserSupport.canSupportRel(u)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=u,a.href=t,a.onload=function(){r()},a.onerror=function(){delete e._preloadedScripts[t],i()},document.head.appendChild(a)}else e._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.preloadScript(t,n)})).then(function(){})},t}();n.default=e},7995(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(t,n){this._browserSupport=t,this._requestSender=n,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,n){var e=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),u=n||{},a=u.prepend,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onerror=function(n){delete e._stylesheets[t],i(n)},o.rel=\"stylesheet\",o.href=t,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.loadStylesheet(t,n)})).then(function(){})},t.prototype.preloadStylesheet=function(t,n){var e=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(n||{}).prefetch,u=void 0!==o&&o,a=u?\"prefetch\":\"preload\";if(e._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=u?\"prefetch\":\"preload\",c.href=t,c.onload=function(){r()},c.onerror=function(n){delete e._preloadedStylesheets[t],i(n)},document.head.appendChild(c)}else e._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.preloadStylesheet(t,n)})).then(function(){})},t}();n.default=e},1915(t){\"use strict\";var n=\"%[a-f0-9]{2}\",e=new RegExp(\"(\"+n+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+n+\")+\",\"gi\");function i(t,n){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;n=n||1;var e=t.slice(0,n),r=t.slice(n);return Array.prototype.concat.call([],i(e),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var n=t.match(e)||[],r=1;r<n.length;r++)n=(t=i(n,r).join(\"\")).match(e)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(n){return function(t){for(var n={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},e=r.exec(t);e;){try{n[e[0]]=decodeURIComponent(e[0])}catch(t){var i=o(e[0]);i!==e[0]&&(n[e[0]]=i)}e=r.exec(t)}n[\"%C2\"]=\"�\";for(var u=Object.keys(n),a=0;a<u.length;a++){var c=u[a];t=t.replace(new RegExp(c,\"g\"),n[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,n){for(var e={},r=Object.keys(t),i=Array.isArray(n),o=0;o<r.length;o++){var u=r[o],a=t[u];(i?-1!==n.indexOf(u):n(u,a,t))&&(e[u]=a)}return e}},168(t){var n;n=function(){function t(){for(var t=0,n={};t<arguments.length;t++){var e=arguments[t];for(var r in e)n[r]=e[r]}return n}function n(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function e(r){function i(){}function o(n,e,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var u=JSON.stringify(e);/^[\\{\\[]/.test(u)&&(e=u)}catch(t){}e=r.write?r.write(e,n):encodeURIComponent(String(e)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),n=encodeURIComponent(String(n)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in o)o[c]&&(a+=\"; \"+c,!0!==o[c]&&(a+=\"=\"+o[c].split(\";\")[0]));return document.cookie=n+\"=\"+e+a}}function u(t,e){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],u=0;u<o.length;u++){var a=o[u].split(\"=\"),c=a.slice(1).join(\"=\");e||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var s=n(a[0]);if(c=(r.read||r)(c,s)||n(c),e)try{c=JSON.parse(c)}catch(t){}if(i[s]=c,t===s)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return u(t,!1)},i.getJSON=function(t){return u(t,!0)},i.remove=function(n,e){o(n,\"\",t(e,{expires:-1}))},i.defaults={},i.withConverter=e,i}(function(){})},\"function\"==typeof define&&define.amd&&define(n),t.exports=n()},35(t,n,e){t=e.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",u=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,s=/^(?:0|[1-9]\\d*)$/,f={};f[\"[object Float32Array]\"]=f[\"[object Float64Array]\"]=f[\"[object Int8Array]\"]=f[\"[object Int16Array]\"]=f[\"[object Int32Array]\"]=f[\"[object Uint8Array]\"]=f[\"[object Uint8ClampedArray]\"]=f[\"[object Uint16Array]\"]=f[\"[object Uint32Array]\"]=!0,f[o]=f[\"[object Array]\"]=f[\"[object ArrayBuffer]\"]=f[\"[object Boolean]\"]=f[\"[object DataView]\"]=f[\"[object Date]\"]=f[\"[object Error]\"]=f[u]=f[\"[object Map]\"]=f[\"[object Number]\"]=f[a]=f[\"[object RegExp]\"]=f[\"[object Set]\"]=f[\"[object String]\"]=f[\"[object WeakMap]\"]=!1;var l,p,h,d=\"object\"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,v=\"object\"==typeof self&&self&&self.Object===Object&&self,_=d||v||Function(\"return this\")(),y=n&&!n.nodeType&&n,g=y&&t&&!t.nodeType&&t,m=g&&g.exports===y,b=m&&d.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),j=w&&w.isTypedArray,x=Array.prototype,S=Function.prototype,O=Object.prototype,A=_[\"__core-js_shared__\"],k=S.toString,I=O.hasOwnProperty,C=(l=/[^.]+$/.exec(A&&A.keys&&A.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",R=O.toString,E=k.call(Object),z=RegExp(\"^\"+k.call(I).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),M=m?_.Buffer:void 0,P=_.Symbol,U=_.Uint8Array,T=(M&&M.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(t){return p(h(t))}),q=Object.create,N=O.propertyIsEnumerable,F=x.splice,B=P?P.toStringTag:void 0,L=function(){try{var t=at(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),$=M?M.isBuffer:void 0,D=Math.max,W=Date.now,H=at(_,\"Map\"),G=at(Object,\"create\"),K=function(){function t(){}return function(n){if(!mt(n))return{};if(q)return q(n);t.prototype=n;var e=new t;return t.prototype=void 0,e}}();function Z(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function J(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function V(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function X(t){var n=this.__data__=new J(t);this.size=n.size}function Q(t,n,e){(void 0!==e&&!pt(t[n],e)||void 0===e&&!(n in t))&&nt(t,n,e)}function Y(t,n,e){var r=t[n];I.call(t,n)&&pt(r,e)&&(void 0!==e||n in t)||nt(t,n,e)}function tt(t,n){for(var e=t.length;e--;)if(pt(t[e][0],n))return e;return-1}function nt(t,n,e){\"__proto__\"==n&&L?L(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}Z.prototype.clear=function(){this.__data__=G?G(null):{},this.size=0},Z.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},Z.prototype.get=function(t){var n=this.__data__;if(G){var e=n[t];return e===r?void 0:e}return I.call(n,t)?n[t]:void 0},Z.prototype.has=function(t){var n=this.__data__;return G?void 0!==n[t]:I.call(n,t)},Z.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=G&&void 0===n?r:n,this},J.prototype.clear=function(){this.__data__=[],this.size=0},J.prototype.delete=function(t){var n=this.__data__,e=tt(n,t);return!(e<0||(e==n.length-1?n.pop():F.call(n,e,1),--this.size,0))},J.prototype.get=function(t){var n=this.__data__,e=tt(n,t);return e<0?void 0:n[e][1]},J.prototype.has=function(t){return tt(this.__data__,t)>-1},J.prototype.set=function(t,n){var e=this.__data__,r=tt(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},V.prototype.clear=function(){this.size=0,this.__data__={hash:new Z,map:new(H||J),string:new Z}},V.prototype.delete=function(t){var n=ut(this,t).delete(t);return this.size-=n?1:0,n},V.prototype.get=function(t){return ut(this,t).get(t)},V.prototype.has=function(t){return ut(this,t).has(t)},V.prototype.set=function(t,n){var e=ut(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},X.prototype.clear=function(){this.__data__=new J,this.size=0},X.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},X.prototype.get=function(t){return this.__data__.get(t)},X.prototype.has=function(t){return this.__data__.has(t)},X.prototype.set=function(t,n){var e=this.__data__;if(e instanceof J){var r=e.__data__;if(!H||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new V(r)}return e.set(t,n),this.size=e.size,this};function et(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":B&&B in Object(t)?function(t){var n=I.call(t,B),e=t[B];try{t[B]=void 0;var r=!0}catch(t){}var i=R.call(t);return r&&(n?t[B]=e:delete t[B]),i}(t):function(t){return R.call(t)}(t)}function rt(t){return bt(t)&&et(t)==o}function it(t,n,e,r,i){t!==n&&function(t,n,e){for(var r=-1,i=Object(t),o=e(t),u=o.length;u--;){var a=o[++r];if(!1===n(i[a],a,i))break}}(n,function(o,u){if(i||(i=new X),mt(o))!function(t,n,e,r,i,o,u){var c=ft(t,e),s=ft(n,e),f=u.get(s);if(f)Q(t,e,f);else{var l,p,h,d,v,_=o?o(c,s,e+\"\",t,n,u):void 0,y=void 0===_;if(y){var g=dt(s),m=!g&&_t(s),b=!g&&!m&&wt(s);_=s,g||m||b?dt(c)?_=c:bt(v=c)&&vt(v)?_=function(t,n){var e=-1,r=t.length;for(n||(n=Array(r));++e<r;)n[e]=t[e];return n}(c):m?(y=!1,_=function(t){return t.slice()}(s)):b?(y=!1,d=new(h=(l=s).buffer).constructor(h.byteLength),new U(d).set(new U(h)),p=d,_=new l.constructor(p,l.byteOffset,l.length)):_=[]:function(t){if(!bt(t)||et(t)!=a)return!1;var n=T(t);if(null===n)return!0;var e=I.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof e&&e instanceof e&&k.call(e)==E}(s)||ht(s)?(_=c,ht(c)?_=function(t){return function(t,n,e){var r=!e;e||(e={});for(var i=-1,o=n.length;++i<o;){var u=n[i],a=void 0;void 0===a&&(a=t[u]),r?nt(e,u,a):Y(e,u,a)}return e}(t,jt(t))}(c):mt(c)&&!yt(c)||(_=function(t){return\"function\"!=typeof t.constructor||st(t)?{}:K(T(t))}(s))):y=!1}y&&(u.set(s,_),i(_,s,r,o,u),u.delete(s)),Q(t,e,_)}}(t,n,u,e,it,r,i);else{var c=r?r(ft(t,u),o,u+\"\",t,n,i):void 0;void 0===c&&(c=o),Q(t,u,c)}},jt)}var ot=L?function(t,n){return L(t,\"toString\",{configurable:!0,enumerable:!1,value:(e=n,function(){return e}),writable:!0});var e}:Ot;function ut(t,n){var e,r,i=t.__data__;return(\"string\"==(r=typeof(e=n))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==e:null===e)?i[\"string\"==typeof n?\"string\":\"hash\"]:i.map}function at(t,n){var e=function(t,n){return null==t?void 0:t[n]}(t,n);return function(t){return!(!mt(t)||function(t){return!!C&&C in t}(t))&&(yt(t)?z:c).test(function(t){if(null!=t){try{return k.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(e)?e:void 0}function ct(t,n){var e=typeof t;return!!(n=n??i)&&(\"number\"==e||\"symbol\"!=e&&s.test(t))&&t>-1&&t%1==0&&t<n}function st(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||O)}function ft(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var lt=function(t){var n=0,e=0;return function(){var r=W(),i=16-(r-e);if(e=r,i>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(void 0,arguments)}}(ot);function pt(t,n){return t===n||t!=t&&n!=n}var ht=rt(function(){return arguments}())?rt:function(t){return bt(t)&&I.call(t,\"callee\")&&!N.call(t,\"callee\")},dt=Array.isArray;function vt(t){return null!=t&&gt(t.length)&&!yt(t)}var _t=$||function(){return!1};function yt(t){if(!mt(t))return!1;var n=et(t);return n==u||\"[object GeneratorFunction]\"==n||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function mt(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=j?function(t){return function(n){return t(n)}}(j):function(t){return bt(t)&&gt(t.length)&&!!f[et(t)]};function jt(t){return vt(t)?function(t,n){var e=dt(t),r=!e&&ht(t),i=!e&&!r&&_t(t),o=!e&&!r&&!i&&wt(t),u=e||r||i||o,a=u?function(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}(t.length,String):[],c=a.length;for(var s in t)!n&&!I.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||ct(s,c))||a.push(s);return a}(t,!0):function(t){if(!mt(t))return function(t){var n=[];if(null!=t)for(var e in Object(t))n.push(e);return n}(t);var n=st(t),e=[];for(var r in t)(\"constructor\"!=r||!n&&I.call(t,r))&&e.push(r);return e}(t)}var xt,St=(xt=function(t,n,e){it(t,n,e)},function(t,n){return lt(function(t,n,e){return n=D(void 0===n?t.length-1:n,0),function(){for(var r=arguments,i=-1,o=D(r.length-n,0),u=Array(o);++i<o;)u[i]=r[n+i];i=-1;for(var a=Array(n+1);++i<n;)a[i]=r[i];return a[n]=e(u),function(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}(t,this,a)}}(t,n,Ot),t+\"\")}(function(t,n){var e=-1,r=n.length,i=r>1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(i=xt.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,n,e){if(!mt(e))return!1;var r=typeof n;return!!(\"number\"==r?vt(e)&&ct(n,e.length):\"string\"==r&&n in e)&&pt(e[n],t)}(n[0],n[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++e<r;){var u=n[e];u&&xt(t,u,e)}return t}));function Ot(t){return t}t.exports=St},9440(t,n,e){t=e.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,s=1/0,f=9007199254740991,l=NaN,p=4294967295,h=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",v=\"[object Array]\",_=\"[object Boolean]\",y=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",j=\"[object Number]\",x=\"[object Object]\",S=\"[object Promise]\",O=\"[object RegExp]\",A=\"[object Set]\",k=\"[object String]\",I=\"[object Symbol]\",C=\"[object WeakMap]\",R=\"[object ArrayBuffer]\",E=\"[object DataView]\",z=\"[object Float32Array]\",M=\"[object Float64Array]\",P=\"[object Int8Array]\",U=\"[object Int16Array]\",T=\"[object Int32Array]\",q=\"[object Uint8Array]\",N=\"[object Uint8ClampedArray]\",F=\"[object Uint16Array]\",B=\"[object Uint32Array]\",L=/\\b__p \\+= '';/g,$=/\\b(__p \\+=) '' \\+/g,D=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,W=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,G=RegExp(W.source),K=RegExp(H.source),Z=/<%-([\\s\\S]+?)%>/g,J=/<%([\\s\\S]+?)%>/g,V=/<%=([\\s\\S]+?)%>/g,X=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,Y=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,nt=RegExp(tt.source),et=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,vt=/^0o[0-7]+$/i,_t=/^(?:0|[1-9]\\d*)$/,yt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",jt=\"\\\\u2700-\\\\u27bf\",xt=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",St=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ot=\"\\\\ufe0e\\\\ufe0f\",At=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",kt=\"[\"+bt+\"]\",It=\"[\"+At+\"]\",Ct=\"[\"+wt+\"]\",Rt=\"\\\\d+\",Et=\"[\"+jt+\"]\",zt=\"[\"+xt+\"]\",Mt=\"[^\"+bt+At+Rt+jt+xt+St+\"]\",Pt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Ut=\"[^\"+bt+\"]\",Tt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",qt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Nt=\"[\"+St+\"]\",Ft=\"\\\\u200d\",Bt=\"(?:\"+zt+\"|\"+Mt+\")\",Lt=\"(?:\"+Nt+\"|\"+Mt+\")\",$t=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Dt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Wt=\"(?:\"+Ct+\"|\"+Pt+\")?\",Ht=\"[\"+Ot+\"]?\",Gt=Ht+Wt+\"(?:\"+Ft+\"(?:\"+[Ut,Tt,qt].join(\"|\")+\")\"+Ht+Wt+\")*\",Kt=\"(?:\"+[Et,Tt,qt].join(\"|\")+\")\"+Gt,Zt=\"(?:\"+[Ut+Ct+\"?\",Ct,Tt,qt,kt].join(\"|\")+\")\",Jt=RegExp(\"['’]\",\"g\"),Vt=RegExp(Ct,\"g\"),Xt=RegExp(Pt+\"(?=\"+Pt+\")|\"+Zt+Gt,\"g\"),Qt=RegExp([Nt+\"?\"+zt+\"+\"+$t+\"(?=\"+[It,Nt,\"$\"].join(\"|\")+\")\",Lt+\"+\"+Dt+\"(?=\"+[It,Nt+Bt,\"$\"].join(\"|\")+\")\",Nt+\"?\"+Bt+\"+\"+$t,Nt+\"+\"+Dt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Rt,Kt].join(\"|\"),\"g\"),Yt=RegExp(\"[\"+Ft+bt+wt+Ot+\"]\"),tn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,nn=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],en=-1,rn={};rn[z]=rn[M]=rn[P]=rn[U]=rn[T]=rn[q]=rn[N]=rn[F]=rn[B]=!0,rn[d]=rn[v]=rn[R]=rn[_]=rn[E]=rn[y]=rn[g]=rn[m]=rn[w]=rn[j]=rn[x]=rn[O]=rn[A]=rn[k]=rn[C]=!1;var on={};on[d]=on[v]=on[R]=on[E]=on[_]=on[y]=on[z]=on[M]=on[P]=on[U]=on[T]=on[w]=on[j]=on[x]=on[O]=on[A]=on[k]=on[I]=on[q]=on[N]=on[F]=on[B]=!0,on[g]=on[m]=on[C]=!1;var un={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},an=parseFloat,cn=parseInt,sn=\"object\"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,fn=\"object\"==typeof self&&self&&self.Object===Object&&self,ln=sn||fn||Function(\"return this\")(),pn=n&&!n.nodeType&&n,hn=pn&&t&&!t.nodeType&&t,dn=hn&&hn.exports===pn,vn=dn&&sn.process,_n=function(){try{return hn&&hn.require&&hn.require(\"util\").types||vn&&vn.binding&&vn.binding(\"util\")}catch(t){}}(),yn=_n&&_n.isArrayBuffer,gn=_n&&_n.isDate,mn=_n&&_n.isMap,bn=_n&&_n.isRegExp,wn=_n&&_n.isSet,jn=_n&&_n.isTypedArray;function xn(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}function Sn(t,n,e,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];n(r,u,e(u),t)}return r}function On(t,n){for(var e=-1,r=null==t?0:t.length;++e<r&&!1!==n(t[e],e,t););return t}function An(t,n){for(var e=null==t?0:t.length;e--&&!1!==n(t[e],e,t););return t}function kn(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(!n(t[e],e,t))return!1;return!0}function In(t,n){for(var e=-1,r=null==t?0:t.length,i=0,o=[];++e<r;){var u=t[e];n(u,e,t)&&(o[i++]=u)}return o}function Cn(t,n){return!(null==t||!t.length)&&Fn(t,n,0)>-1}function Rn(t,n,e){for(var r=-1,i=null==t?0:t.length;++r<i;)if(e(n,t[r]))return!0;return!1}function En(t,n){for(var e=-1,r=null==t?0:t.length,i=Array(r);++e<r;)i[e]=n(t[e],e,t);return i}function zn(t,n){for(var e=-1,r=n.length,i=t.length;++e<r;)t[i+e]=n[e];return t}function Mn(t,n,e,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(e=t[++i]);++i<o;)e=n(e,t[i],i,t);return e}function Pn(t,n,e,r){var i=null==t?0:t.length;for(r&&i&&(e=t[--i]);i--;)e=n(e,t[i],i,t);return e}function Un(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(n(t[e],e,t))return!0;return!1}var Tn=Dn(\"length\");function qn(t,n,e){var r;return e(t,function(t,e,i){if(n(t,e,i))return r=e,!1}),r}function Nn(t,n,e,r){for(var i=t.length,o=e+(r?1:-1);r?o--:++o<i;)if(n(t[o],o,t))return o;return-1}function Fn(t,n,e){return n==n?function(t,n,e){for(var r=e-1,i=t.length;++r<i;)if(t[r]===n)return r;return-1}(t,n,e):Nn(t,Ln,e)}function Bn(t,n,e,r){for(var i=e-1,o=t.length;++i<o;)if(r(t[i],n))return i;return-1}function Ln(t){return t!=t}function $n(t,n){var e=null==t?0:t.length;return e?Gn(t,n)/e:l}function Dn(t){return function(n){return null==n?r:n[t]}}function Wn(t){return function(n){return null==t?r:t[n]}}function Hn(t,n,e,r,i){return i(t,function(t,i,o){e=r?(r=!1,t):n(e,t,i,o)}),e}function Gn(t,n){for(var e,i=-1,o=t.length;++i<o;){var u=n(t[i]);u!==r&&(e=e===r?u:e+u)}return e}function Kn(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}function Zn(t){return t?t.slice(0,le(t)+1).replace(et,\"\"):t}function Jn(t){return function(n){return t(n)}}function Vn(t,n){return En(n,function(n){return t[n]})}function Xn(t,n){return t.has(n)}function Qn(t,n){for(var e=-1,r=t.length;++e<r&&Fn(n,t[e],0)>-1;);return e}function Yn(t,n){for(var e=t.length;e--&&Fn(n,t[e],0)>-1;);return e}var te=Wn({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),ne=Wn({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function ee(t){return\"\\\\\"+un[t]}function re(t){return Yt.test(t)}function ie(t){var n=-1,e=Array(t.size);return t.forEach(function(t,r){e[++n]=[r,t]}),e}function oe(t,n){return function(e){return t(n(e))}}function ue(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var a=t[e];a!==n&&a!==u||(t[e]=u,o[i++]=e)}return o}function ae(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=t}),e}function ce(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=[t,t]}),e}function se(t){return re(t)?function(t){for(var n=Xt.lastIndex=0;Xt.test(t);)++n;return n}(t):Tn(t)}function fe(t){return re(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.split(\"\")}(t)}function le(t){for(var n=t.length;n--&&rt.test(t.charAt(n)););return n}var pe=Wn({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),he=function t(n){var e,rt=(n=null==n?ln:he.defaults(ln.Object(),n,he.pick(ln,nn))).Array,bt=n.Date,wt=n.Error,jt=n.Function,xt=n.Math,St=n.Object,Ot=n.RegExp,At=n.String,kt=n.TypeError,It=rt.prototype,Ct=jt.prototype,Rt=St.prototype,Et=n[\"__core-js_shared__\"],zt=Ct.toString,Mt=Rt.hasOwnProperty,Pt=0,Ut=(e=/[^.]+$/.exec(Et&&Et.keys&&Et.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+e:\"\",Tt=Rt.toString,qt=zt.call(St),Nt=ln._,Ft=Ot(\"^\"+zt.call(Mt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Bt=dn?n.Buffer:r,Lt=n.Symbol,$t=n.Uint8Array,Dt=Bt?Bt.allocUnsafe:r,Wt=oe(St.getPrototypeOf,St),Ht=St.create,Gt=Rt.propertyIsEnumerable,Kt=It.splice,Zt=Lt?Lt.isConcatSpreadable:r,Xt=Lt?Lt.iterator:r,Yt=Lt?Lt.toStringTag:r,un=function(){try{var t=co(St,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),sn=n.clearTimeout!==ln.clearTimeout&&n.clearTimeout,fn=bt&&bt.now!==ln.Date.now&&bt.now,pn=n.setTimeout!==ln.setTimeout&&n.setTimeout,hn=xt.ceil,vn=xt.floor,_n=St.getOwnPropertySymbols,Tn=Bt?Bt.isBuffer:r,Wn=n.isFinite,de=It.join,ve=oe(St.keys,St),_e=xt.max,ye=xt.min,ge=bt.now,me=n.parseInt,be=xt.random,we=It.reverse,je=co(n,\"DataView\"),xe=co(n,\"Map\"),Se=co(n,\"Promise\"),Oe=co(n,\"Set\"),Ae=co(n,\"WeakMap\"),ke=co(St,\"create\"),Ie=Ae&&new Ae,Ce={},Re=qo(je),Ee=qo(xe),ze=qo(Se),Me=qo(Oe),Pe=qo(Ae),Ue=Lt?Lt.prototype:r,Te=Ue?Ue.valueOf:r,qe=Ue?Ue.toString:r;function Ne(t){if(ta(t)&&!Du(t)&&!(t instanceof $e)){if(t instanceof Le)return t;if(Mt.call(t,\"__wrapped__\"))return No(t)}return new Le(t)}var Fe=function(){function t(){}return function(n){if(!Yu(n))return{};if(Ht)return Ht(n);t.prototype=n;var e=new t;return t.prototype=r,e}}();function Be(){}function Le(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=r}function $e(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function De(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function We(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function He(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Ge(t){var n=-1,e=null==t?0:t.length;for(this.__data__=new He;++n<e;)this.add(t[n])}function Ke(t){var n=this.__data__=new We(t);this.size=n.size}function Ze(t,n){var e=Du(t),r=!e&&$u(t),i=!e&&!r&&Ku(t),o=!e&&!r&&!i&&ca(t),u=e||r||i||o,a=u?Kn(t.length,At):[],c=a.length;for(var s in t)!n&&!Mt.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||_o(s,c))||a.push(s);return a}function Je(t){var n=t.length;return n?t[Hr(0,n-1)]:r}function Ve(t,n){return zo(Ai(t),or(n,0,t.length))}function Xe(t){return zo(Ai(t))}function Qe(t,n,e){(e!==r&&!Fu(t[n],e)||e===r&&!(n in t))&&rr(t,n,e)}function Ye(t,n,e){var i=t[n];Mt.call(t,n)&&Fu(i,e)&&(e!==r||n in t)||rr(t,n,e)}function tr(t,n){for(var e=t.length;e--;)if(Fu(t[e][0],n))return e;return-1}function nr(t,n,e,r){return fr(t,function(t,i,o){n(r,t,e(t),o)}),r}function er(t,n){return t&&ki(n,Ra(n),t)}function rr(t,n,e){\"__proto__\"==n&&un?un(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}function ir(t,n){for(var e=-1,i=n.length,o=rt(i),u=null==t;++e<i;)o[e]=u?r:Oa(t,n[e]);return o}function or(t,n,e){return t==t&&(e!==r&&(t=t<=e?t:e),n!==r&&(t=t>=n?t:n)),t}function ur(t,n,e,i,o,u){var a,c=1&n,s=2&n,f=4&n;if(e&&(a=o?e(t,i,o,u):e(t)),a!==r)return a;if(!Yu(t))return t;var l=Du(t);if(l){if(a=function(t){var n=t.length,e=new t.constructor(n);return n&&\"string\"==typeof t[0]&&Mt.call(t,\"index\")&&(e.index=t.index,e.input=t.input),e}(t),!c)return Ai(t,a)}else{var p=lo(t),h=p==m||p==b;if(Ku(t))return bi(t,c);if(p==x||p==d||h&&!o){if(a=s||h?{}:ho(t),!c)return s?function(t,n){return ki(t,fo(t),n)}(t,function(t,n){return t&&ki(n,Ea(n),t)}(a,t)):function(t,n){return ki(t,so(t),n)}(t,er(a,t))}else{if(!on[p])return o?t:{};a=function(t,n,e){var r,i=t.constructor;switch(n){case R:return wi(t);case _:case y:return new i(+t);case E:return function(t,n){var e=n?wi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.byteLength)}(t,e);case z:case M:case P:case U:case T:case q:case N:case F:case B:return ji(t,e);case w:return new i;case j:case k:return new i(t);case O:return function(t){var n=new t.constructor(t.source,lt.exec(t));return n.lastIndex=t.lastIndex,n}(t);case A:return new i;case I:return r=t,Te?St(Te.call(r)):{}}}(t,p,c)}}u||(u=new Ke);var v=u.get(t);if(v)return v;u.set(t,a),oa(t)?t.forEach(function(r){a.add(ur(r,n,e,r,t,u))}):na(t)&&t.forEach(function(r,i){a.set(i,ur(r,n,e,i,t,u))});var g=l?r:(f?s?no:to:s?Ea:Ra)(t);return On(g||t,function(r,i){g&&(r=t[i=r]),Ye(a,i,ur(r,n,e,i,t,u))}),a}function ar(t,n,e){var i=e.length;if(null==t)return!i;for(t=St(t);i--;){var o=e[i],u=n[o],a=t[o];if(a===r&&!(o in t)||!u(a))return!1}return!0}function cr(t,n,e){if(\"function\"!=typeof t)throw new kt(i);return Io(function(){t.apply(r,e)},n)}function sr(t,n,e,r){var i=-1,o=Cn,u=!0,a=t.length,c=[],s=n.length;if(!a)return c;e&&(n=En(n,Jn(e))),r?(o=Rn,u=!1):n.length>=200&&(o=Xn,u=!1,n=new Ge(n));t:for(;++i<a;){var f=t[i],l=null==e?f:e(f);if(f=r||0!==f?f:0,u&&l==l){for(var p=s;p--;)if(n[p]===l)continue t;c.push(f)}else o(n,l,r)||c.push(f)}return c}Ne.templateSettings={escape:Z,evaluate:J,interpolate:V,variable:\"\",imports:{_:Ne}},Ne.prototype=Be.prototype,Ne.prototype.constructor=Ne,Le.prototype=Fe(Be.prototype),Le.prototype.constructor=Le,$e.prototype=Fe(Be.prototype),$e.prototype.constructor=$e,De.prototype.clear=function(){this.__data__=ke?ke(null):{},this.size=0},De.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},De.prototype.get=function(t){var n=this.__data__;if(ke){var e=n[t];return e===o?r:e}return Mt.call(n,t)?n[t]:r},De.prototype.has=function(t){var n=this.__data__;return ke?n[t]!==r:Mt.call(n,t)},De.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=ke&&n===r?o:n,this},We.prototype.clear=function(){this.__data__=[],this.size=0},We.prototype.delete=function(t){var n=this.__data__,e=tr(n,t);return!(e<0||(e==n.length-1?n.pop():Kt.call(n,e,1),--this.size,0))},We.prototype.get=function(t){var n=this.__data__,e=tr(n,t);return e<0?r:n[e][1]},We.prototype.has=function(t){return tr(this.__data__,t)>-1},We.prototype.set=function(t,n){var e=this.__data__,r=tr(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},He.prototype.clear=function(){this.size=0,this.__data__={hash:new De,map:new(xe||We),string:new De}},He.prototype.delete=function(t){var n=uo(this,t).delete(t);return this.size-=n?1:0,n},He.prototype.get=function(t){return uo(this,t).get(t)},He.prototype.has=function(t){return uo(this,t).has(t)},He.prototype.set=function(t,n){var e=uo(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},Ge.prototype.add=Ge.prototype.push=function(t){return this.__data__.set(t,o),this},Ge.prototype.has=function(t){return this.__data__.has(t)},Ke.prototype.clear=function(){this.__data__=new We,this.size=0},Ke.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},Ke.prototype.get=function(t){return this.__data__.get(t)},Ke.prototype.has=function(t){return this.__data__.has(t)},Ke.prototype.set=function(t,n){var e=this.__data__;if(e instanceof We){var r=e.__data__;if(!xe||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new He(r)}return e.set(t,n),this.size=e.size,this};var fr=Ri(gr),lr=Ri(mr,!0);function pr(t,n){var e=!0;return fr(t,function(t,r,i){return e=!!n(t,r,i)}),e}function hr(t,n,e){for(var i=-1,o=t.length;++i<o;){var u=t[i],a=n(u);if(null!=a&&(c===r?a==a&&!aa(a):e(a,c)))var c=a,s=u}return s}function dr(t,n){var e=[];return fr(t,function(t,r,i){n(t,r,i)&&e.push(t)}),e}function vr(t,n,e,r,i){var o=-1,u=t.length;for(e||(e=vo),i||(i=[]);++o<u;){var a=t[o];n>0&&e(a)?n>1?vr(a,n-1,e,r,i):zn(i,a):r||(i[i.length]=a)}return i}var _r=Ei(),yr=Ei(!0);function gr(t,n){return t&&_r(t,n,Ra)}function mr(t,n){return t&&yr(t,n,Ra)}function br(t,n){return In(n,function(n){return Vu(t[n])})}function wr(t,n){for(var e=0,i=(n=_i(n,t)).length;null!=t&&e<i;)t=t[To(n[e++])];return e&&e==i?t:r}function jr(t,n,e){var r=n(t);return Du(t)?r:zn(r,e(t))}function xr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Yt&&Yt in St(t)?function(t){var n=Mt.call(t,Yt),e=t[Yt];try{t[Yt]=r;var i=!0}catch(t){}var o=Tt.call(t);return i&&(n?t[Yt]=e:delete t[Yt]),o}(t):function(t){return Tt.call(t)}(t)}function Sr(t,n){return t>n}function Or(t,n){return null!=t&&Mt.call(t,n)}function Ar(t,n){return null!=t&&n in St(t)}function kr(t,n,e){for(var i=e?Rn:Cn,o=t[0].length,u=t.length,a=u,c=rt(u),s=1/0,f=[];a--;){var l=t[a];a&&n&&(l=En(l,Jn(n))),s=ye(l.length,s),c[a]=!e&&(n||o>=120&&l.length>=120)?new Ge(a&&l):r}l=t[0];var p=-1,h=c[0];t:for(;++p<o&&f.length<s;){var d=l[p],v=n?n(d):d;if(d=e||0!==d?d:0,!(h?Xn(h,v):i(f,v,e))){for(a=u;--a;){var _=c[a];if(!(_?Xn(_,v):i(t[a],v,e)))continue t}h&&h.push(v),f.push(d)}}return f}function Ir(t,n,e){var i=null==(t=Oo(t,n=_i(n,t)))?t:t[To(Jo(n))];return null==i?r:xn(i,t,e)}function Cr(t){return ta(t)&&xr(t)==d}function Rr(t,n,e,i,o){return t===n||(null==t||null==n||!ta(t)&&!ta(n)?t!=t&&n!=n:function(t,n,e,i,o,u){var a=Du(t),c=Du(n),s=a?v:lo(t),f=c?v:lo(n),l=(s=s==d?x:s)==x,p=(f=f==d?x:f)==x,h=s==f;if(h&&Ku(t)){if(!Ku(n))return!1;a=!0,l=!1}if(h&&!l)return u||(u=new Ke),a||ca(t)?Qi(t,n,e,i,o,u):function(t,n,e,r,i,o,u){switch(e){case E:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case R:return!(t.byteLength!=n.byteLength||!o(new $t(t),new $t(n)));case _:case y:case j:return Fu(+t,+n);case g:return t.name==n.name&&t.message==n.message;case O:case k:return t==n+\"\";case w:var a=ie;case A:var c=1&r;if(a||(a=ae),t.size!=n.size&&!c)return!1;var s=u.get(t);if(s)return s==n;r|=2,u.set(t,n);var f=Qi(a(t),a(n),r,i,o,u);return u.delete(t),f;case I:if(Te)return Te.call(t)==Te.call(n)}return!1}(t,n,s,e,i,o,u);if(!(1&e)){var m=l&&Mt.call(t,\"__wrapped__\"),b=p&&Mt.call(n,\"__wrapped__\");if(m||b){var S=m?t.value():t,C=b?n.value():n;return u||(u=new Ke),o(S,C,e,i,u)}}return!!h&&(u||(u=new Ke),function(t,n,e,i,o,u){var a=1&e,c=to(t),s=c.length;if(s!=to(n).length&&!a)return!1;for(var f=s;f--;){var l=c[f];if(!(a?l in n:Mt.call(n,l)))return!1}var p=u.get(t),h=u.get(n);if(p&&h)return p==n&&h==t;var d=!0;u.set(t,n),u.set(n,t);for(var v=a;++f<s;){var _=t[l=c[f]],y=n[l];if(i)var g=a?i(y,_,l,n,t,u):i(_,y,l,t,n,u);if(!(g===r?_===y||o(_,y,e,i,u):g)){d=!1;break}v||(v=\"constructor\"==l)}if(d&&!v){var m=t.constructor,b=n.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in n)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return u.delete(t),u.delete(n),d}(t,n,e,i,o,u))}(t,n,e,i,Rr,o))}function Er(t,n,e,i){var o=e.length,u=o,a=!i;if(null==t)return!u;for(t=St(t);o--;){var c=e[o];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++o<u;){var s=(c=e[o])[0],f=t[s],l=c[1];if(a&&c[2]){if(f===r&&!(s in t))return!1}else{var p=new Ke;if(i)var h=i(f,l,s,t,n,p);if(!(h===r?Rr(l,f,3,i,p):h))return!1}}return!0}function zr(t){return!(!Yu(t)||(n=t,Ut&&Ut in n))&&(Vu(t)?Ft:dt).test(qo(t));var n}function Mr(t){return\"function\"==typeof t?t:null==t?ec:\"object\"==typeof t?Du(t)?Nr(t[0],t[1]):qr(t):lc(t)}function Pr(t){if(!wo(t))return ve(t);var n=[];for(var e in St(t))Mt.call(t,e)&&\"constructor\"!=e&&n.push(e);return n}function Ur(t,n){return t<n}function Tr(t,n){var e=-1,r=Hu(t)?rt(t.length):[];return fr(t,function(t,i,o){r[++e]=n(t,i,o)}),r}function qr(t){var n=ao(t);return 1==n.length&&n[0][2]?xo(n[0][0],n[0][1]):function(e){return e===t||Er(e,t,n)}}function Nr(t,n){return go(t)&&jo(n)?xo(To(t),n):function(e){var i=Oa(e,t);return i===r&&i===n?Aa(e,t):Rr(n,i,3)}}function Fr(t,n,e,i,o){t!==n&&_r(n,function(u,a){if(o||(o=new Ke),Yu(u))!function(t,n,e,i,o,u,a){var c=Ao(t,e),s=Ao(n,e),f=a.get(s);if(f)Qe(t,e,f);else{var l=u?u(c,s,e+\"\",t,n,a):r,p=l===r;if(p){var h=Du(s),d=!h&&Ku(s),v=!h&&!d&&ca(s);l=s,h||d||v?Du(c)?l=c:Gu(c)?l=Ai(c):d?(p=!1,l=bi(s,!0)):v?(p=!1,l=ji(s,!0)):l=[]:ra(s)||$u(s)?(l=c,$u(c)?l=_a(c):Yu(c)&&!Vu(c)||(l=ho(s))):p=!1}p&&(a.set(s,l),o(l,s,i,u,a),a.delete(s)),Qe(t,e,l)}}(t,n,a,e,Fr,i,o);else{var c=i?i(Ao(t,a),u,a+\"\",t,n,o):r;c===r&&(c=u),Qe(t,a,c)}},Ea)}function Br(t,n){var e=t.length;if(e)return _o(n+=n<0?e:0,e)?t[n]:r}function Lr(t,n,e){n=n.length?En(n,function(t){return Du(t)?function(n){return wr(n,1===t.length?t[0]:t)}:t}):[ec];var r=-1;n=En(n,Jn(oo()));var i=Tr(t,function(t,e,i){var o=En(n,function(n){return n(t)});return{criteria:o,index:++r,value:t}});return function(t){var n=t.length;for(t.sort(function(t,n){return function(t,n,e){for(var r=-1,i=t.criteria,o=n.criteria,u=i.length,a=e.length;++r<u;){var c=xi(i[r],o[r]);if(c)return r>=a?c:c*(\"desc\"==e[r]?-1:1)}return t.index-n.index}(t,n,e)});n--;)t[n]=t[n].value;return t}(i)}function $r(t,n,e){for(var r=-1,i=n.length,o={};++r<i;){var u=n[r],a=wr(t,u);e(a,u)&&Vr(o,_i(u,t),a)}return o}function Dr(t,n,e,r){var i=r?Bn:Fn,o=-1,u=n.length,a=t;for(t===n&&(n=Ai(n)),e&&(a=En(t,Jn(e)));++o<u;)for(var c=0,s=n[o],f=e?e(s):s;(c=i(a,f,c,r))>-1;)a!==t&&Kt.call(a,c,1),Kt.call(t,c,1);return t}function Wr(t,n){for(var e=t?n.length:0,r=e-1;e--;){var i=n[e];if(e==r||i!==o){var o=i;_o(i)?Kt.call(t,i,1):ci(t,i)}}return t}function Hr(t,n){return t+vn(be()*(n-t+1))}function Gr(t,n){var e=\"\";if(!t||n<1||n>f)return e;do{n%2&&(e+=t),(n=vn(n/2))&&(t+=t)}while(n);return e}function Kr(t,n){return Co(So(t,n,ec),t+\"\")}function Zr(t){return Je(Fa(t))}function Jr(t,n){var e=Fa(t);return zo(e,or(n,0,e.length))}function Vr(t,n,e,i){if(!Yu(t))return t;for(var o=-1,u=(n=_i(n,t)).length,a=u-1,c=t;null!=c&&++o<u;){var s=To(n[o]),f=e;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(o!=a){var l=c[s];(f=i?i(l,s,c):r)===r&&(f=Yu(l)?l:_o(n[o+1])?[]:{})}Ye(c,s,f),c=c[s]}return t}var Xr=Ie?function(t,n){return Ie.set(t,n),t}:ec,Qr=un?function(t,n){return un(t,\"toString\",{configurable:!0,enumerable:!1,value:Ya(n),writable:!0})}:ec;function Yr(t){return zo(Fa(t))}function ti(t,n,e){var r=-1,i=t.length;n<0&&(n=-n>i?0:i+n),(e=e>i?i:e)<0&&(e+=i),i=n>e?0:e-n>>>0,n>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+n];return o}function ni(t,n){var e;return fr(t,function(t,r,i){return!(e=n(t,r,i))}),!!e}function ei(t,n,e){var r=0,i=null==t?r:t.length;if(\"number\"==typeof n&&n==n&&i<=2147483647){for(;r<i;){var o=r+i>>>1,u=t[o];null!==u&&!aa(u)&&(e?u<=n:u<n)?r=o+1:i=o}return i}return ri(t,n,ec,e)}function ri(t,n,e,i){var o=0,u=null==t?0:t.length;if(0===u)return 0;for(var a=(n=e(n))!=n,c=null===n,s=aa(n),f=n===r;o<u;){var l=vn((o+u)/2),p=e(t[l]),h=p!==r,d=null===p,v=p==p,_=aa(p);if(a)var y=i||v;else y=f?v&&(i||h):c?v&&h&&(i||!d):s?v&&h&&!d&&(i||!_):!d&&!_&&(i?p<=n:p<n);y?o=l+1:u=l}return ye(u,4294967294)}function ii(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var u=t[e],a=n?n(u):u;if(!e||!Fu(a,c)){var c=a;o[i++]=0===u?0:u}}return o}function oi(t){return\"number\"==typeof t?t:aa(t)?l:+t}function ui(t){if(\"string\"==typeof t)return t;if(Du(t))return En(t,ui)+\"\";if(aa(t))return qe?qe.call(t):\"\";var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function ai(t,n,e){var r=-1,i=Cn,o=t.length,u=!0,a=[],c=a;if(e)u=!1,i=Rn;else if(o>=200){var s=n?null:Gi(t);if(s)return ae(s);u=!1,i=Xn,c=new Ge}else c=n?[]:a;t:for(;++r<o;){var f=t[r],l=n?n(f):f;if(f=e||0!==f?f:0,u&&l==l){for(var p=c.length;p--;)if(c[p]===l)continue t;n&&c.push(l),a.push(f)}else i(c,l,e)||(c!==a&&c.push(l),a.push(f))}return a}function ci(t,n){var e=-1,r=(n=_i(n,t)).length;if(!r)return!0;for(;++e<r;){var i=To(n[e]);if(\"__proto__\"===i&&!Mt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&e<r-1)return!1}var o=Oo(t,n);return null==o||delete o[To(Jo(n))]}function si(t,n,e,r){return Vr(t,n,e(wr(t,n)),r)}function fi(t,n,e,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&n(t[o],o,t););return e?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function li(t,n){var e=t;return e instanceof $e&&(e=e.value()),Mn(n,function(t,n){return n.func.apply(n.thisArg,zn([t],n.args))},e)}function pi(t,n,e){var r=t.length;if(r<2)return r?ai(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var u=t[i],a=-1;++a<r;)a!=i&&(o[i]=sr(o[i]||u,t[a],n,e));return ai(vr(o,1),n,e)}function hi(t,n,e){for(var i=-1,o=t.length,u=n.length,a={};++i<o;){var c=i<u?n[i]:r;e(a,t[i],c)}return a}function di(t){return Gu(t)?t:[]}function vi(t){return\"function\"==typeof t?t:ec}function _i(t,n){return Du(t)?t:go(t,n)?[t]:Uo(ya(t))}var yi=Kr;function gi(t,n,e){var i=t.length;return e=e===r?i:e,!n&&e>=i?t:ti(t,n,e)}var mi=sn||function(t){return ln.clearTimeout(t)};function bi(t,n){if(n)return t.slice();var e=t.length,r=Dt?Dt(e):new t.constructor(e);return t.copy(r),r}function wi(t){var n=new t.constructor(t.byteLength);return new $t(n).set(new $t(t)),n}function ji(t,n){var e=n?wi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.length)}function xi(t,n){if(t!==n){var e=t!==r,i=null===t,o=t==t,u=aa(t),a=n!==r,c=null===n,s=n==n,f=aa(n);if(!c&&!f&&!u&&t>n||u&&a&&s&&!c&&!f||i&&a&&s||!e&&s||!o)return 1;if(!i&&!u&&!f&&t<n||f&&e&&o&&!i&&!u||c&&e&&o||!a&&o||!s)return-1}return 0}function Si(t,n,e,r){for(var i=-1,o=t.length,u=e.length,a=-1,c=n.length,s=_e(o-u,0),f=rt(c+s),l=!r;++a<c;)f[a]=n[a];for(;++i<u;)(l||i<o)&&(f[e[i]]=t[i]);for(;s--;)f[a++]=t[i++];return f}function Oi(t,n,e,r){for(var i=-1,o=t.length,u=-1,a=e.length,c=-1,s=n.length,f=_e(o-a,0),l=rt(f+s),p=!r;++i<f;)l[i]=t[i];for(var h=i;++c<s;)l[h+c]=n[c];for(;++u<a;)(p||i<o)&&(l[h+e[u]]=t[i++]);return l}function Ai(t,n){var e=-1,r=t.length;for(n||(n=rt(r));++e<r;)n[e]=t[e];return n}function ki(t,n,e,i){var o=!e;e||(e={});for(var u=-1,a=n.length;++u<a;){var c=n[u],s=i?i(e[c],t[c],c,e,t):r;s===r&&(s=t[c]),o?rr(e,c,s):Ye(e,c,s)}return e}function Ii(t,n){return function(e,r){var i=Du(e)?Sn:nr,o=n?n():{};return i(e,t,oo(r,2),o)}}function Ci(t){return Kr(function(n,e){var i=-1,o=e.length,u=o>1?e[o-1]:r,a=o>2?e[2]:r;for(u=t.length>3&&\"function\"==typeof u?(o--,u):r,a&&yo(e[0],e[1],a)&&(u=o<3?r:u,o=1),n=St(n);++i<o;){var c=e[i];c&&t(n,c,i,u)}return n})}function Ri(t,n){return function(e,r){if(null==e)return e;if(!Hu(e))return t(e,r);for(var i=e.length,o=n?i:-1,u=St(e);(n?o--:++o<i)&&!1!==r(u[o],o,u););return e}}function Ei(t){return function(n,e,r){for(var i=-1,o=St(n),u=r(n),a=u.length;a--;){var c=u[t?a:++i];if(!1===e(o[c],c,o))break}return n}}function zi(t){return function(n){var e=re(n=ya(n))?fe(n):r,i=e?e[0]:n.charAt(0),o=e?gi(e,1).join(\"\"):n.slice(1);return i[t]()+o}}function Mi(t){return function(n){return Mn(Va($a(n).replace(Jt,\"\")),t,\"\")}}function Pi(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var e=Fe(t.prototype),r=t.apply(e,n);return Yu(r)?r:e}}function Ui(t){return function(n,e,i){var o=St(n);if(!Hu(n)){var u=oo(e,3);n=Ra(n),e=function(t){return u(o[t],t,o)}}var a=t(n,e,i);return a>-1?o[u?n[a]:a]:r}}function Ti(t){return Yi(function(n){var e=n.length,o=e,u=Le.prototype.thru;for(t&&n.reverse();o--;){var a=n[o];if(\"function\"!=typeof a)throw new kt(i);if(u&&!c&&\"wrapper\"==ro(a))var c=new Le([],!0)}for(o=c?o:e;++o<e;){var s=ro(a=n[o]),f=\"wrapper\"==s?eo(a):r;c=f&&mo(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?c[ro(f[0])].apply(c,f[3]):1==a.length&&mo(a)?c[s]():c.thru(a)}return function(){var t=arguments,r=t[0];if(c&&1==t.length&&Du(r))return c.plant(r).value();for(var i=0,o=e?n[i].apply(this,t):r;++i<e;)o=n[i].call(this,o);return o}})}function qi(t,n,e,i,o,u,a,s,f,l){var p=n&c,h=1&n,d=2&n,v=24&n,_=512&n,y=d?r:Pi(t);return function c(){for(var g=arguments.length,m=rt(g),b=g;b--;)m[b]=arguments[b];if(v)var w=io(c),j=function(t,n){for(var e=t.length,r=0;e--;)t[e]===n&&++r;return r}(m,w);if(i&&(m=Si(m,i,o,v)),u&&(m=Oi(m,u,a,v)),g-=j,v&&g<l){var x=ue(m,w);return Wi(t,n,qi,c.placeholder,e,m,x,s,f,l-g)}var S=h?e:this,O=d?S[t]:t;return g=m.length,s?m=function(t,n){for(var e=t.length,i=ye(n.length,e),o=Ai(t);i--;){var u=n[i];t[i]=_o(u,e)?o[u]:r}return t}(m,s):_&&g>1&&m.reverse(),p&&f<g&&(m.length=f),this&&this!==ln&&this instanceof c&&(O=y||Pi(O)),O.apply(S,m)}}function Ni(t,n){return function(e,r){return function(t,n,e,r){return gr(t,function(t,i,o){n(r,e(t),i,o)}),r}(e,t,n(r),{})}}function Fi(t,n){return function(e,i){var o;if(e===r&&i===r)return n;if(e!==r&&(o=e),i!==r){if(o===r)return i;\"string\"==typeof e||\"string\"==typeof i?(e=ui(e),i=ui(i)):(e=oi(e),i=oi(i)),o=t(e,i)}return o}}function Bi(t){return Yi(function(n){return n=En(n,Jn(oo())),Kr(function(e){var r=this;return t(n,function(t){return xn(t,r,e)})})})}function Li(t,n){var e=(n=n===r?\" \":ui(n)).length;if(e<2)return e?Gr(n,t):n;var i=Gr(n,hn(t/se(n)));return re(n)?gi(fe(i),0,t).join(\"\"):i.slice(0,t)}function $i(t){return function(n,e,i){return i&&\"number\"!=typeof i&&yo(n,e,i)&&(e=i=r),n=pa(n),e===r?(e=n,n=0):e=pa(e),function(t,n,e,r){for(var i=-1,o=_e(hn((n-t)/(e||1)),0),u=rt(o);o--;)u[r?o:++i]=t,t+=e;return u}(n,e,i=i===r?n<e?1:-1:pa(i),t)}}function Di(t){return function(n,e){return\"string\"==typeof n&&\"string\"==typeof e||(n=va(n),e=va(e)),t(n,e)}}function Wi(t,n,e,i,o,u,c,s,f,l){var p=8&n;n|=p?a:64,4&(n&=~(p?64:a))||(n&=-4);var h=[t,n,o,p?u:r,p?c:r,p?r:u,p?r:c,s,f,l],d=e.apply(r,h);return mo(t)&&ko(d,h),d.placeholder=i,Ro(d,t,n)}function Hi(t){var n=xt[t];return function(t,e){if(t=va(t),(e=null==e?0:ye(ha(e),292))&&Wn(t)){var r=(ya(t)+\"e\").split(\"e\");return+((r=(ya(n(r[0]+\"e\"+(+r[1]+e)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-e))}return n(t)}}var Gi=Oe&&1/ae(new Oe([,-0]))[1]==s?function(t){return new Oe(t)}:ac;function Ki(t){return function(n){var e=lo(n);return e==w?ie(n):e==A?ce(n):function(t,n){return En(n,function(n){return[n,t[n]]})}(n,t(n))}}function Zi(t,n,e,o,s,f,l,p){var h=2&n;if(!h&&\"function\"!=typeof t)throw new kt(i);var d=o?o.length:0;if(d||(n&=-97,o=s=r),l=l===r?l:_e(ha(l),0),p=p===r?p:ha(p),d-=s?s.length:0,64&n){var v=o,_=s;o=s=r}var y=h?r:eo(t),g=[t,n,e,o,s,v,_,f,l,p];if(y&&function(t,n){var e=t[1],r=n[1],i=e|r,o=i<131,a=r==c&&8==e||r==c&&256==e&&t[7].length<=n[8]||384==r&&n[7].length<=n[8]&&8==e;if(!o&&!a)return t;1&r&&(t[2]=n[2],i|=1&e?0:4);var s=n[3];if(s){var f=t[3];t[3]=f?Si(f,s,n[4]):s,t[4]=f?ue(t[3],u):n[4]}(s=n[5])&&(f=t[5],t[5]=f?Oi(f,s,n[6]):s,t[6]=f?ue(t[5],u):n[6]),(s=n[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?n[8]:ye(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i}(g,y),t=g[0],n=g[1],e=g[2],o=g[3],s=g[4],!(p=g[9]=g[9]===r?h?0:t.length:_e(g[9]-d,0))&&24&n&&(n&=-25),n&&1!=n)m=8==n||16==n?function(t,n,e){var i=Pi(t);return function o(){for(var u=arguments.length,a=rt(u),c=u,s=io(o);c--;)a[c]=arguments[c];var f=u<3&&a[0]!==s&&a[u-1]!==s?[]:ue(a,s);return(u-=f.length)<e?Wi(t,n,qi,o.placeholder,r,a,f,r,r,e-u):xn(this&&this!==ln&&this instanceof o?i:t,this,a)}}(t,n,p):n!=a&&33!=n||s.length?qi.apply(r,g):function(t,n,e,r){var i=1&n,o=Pi(t);return function n(){for(var u=-1,a=arguments.length,c=-1,s=r.length,f=rt(s+a),l=this&&this!==ln&&this instanceof n?o:t;++c<s;)f[c]=r[c];for(;a--;)f[c++]=arguments[++u];return xn(l,i?e:this,f)}}(t,n,e,o);else var m=function(t,n,e){var r=1&n,i=Pi(t);return function n(){return(this&&this!==ln&&this instanceof n?i:t).apply(r?e:this,arguments)}}(t,n,e);return Ro((y?Xr:ko)(m,g),t,n)}function Ji(t,n,e,i){return t===r||Fu(t,Rt[e])&&!Mt.call(i,e)?n:t}function Vi(t,n,e,i,o,u){return Yu(t)&&Yu(n)&&(u.set(n,t),Fr(t,n,r,Vi,u),u.delete(n)),t}function Xi(t){return ra(t)?r:t}function Qi(t,n,e,i,o,u){var a=1&e,c=t.length,s=n.length;if(c!=s&&!(a&&s>c))return!1;var f=u.get(t),l=u.get(n);if(f&&l)return f==n&&l==t;var p=-1,h=!0,d=2&e?new Ge:r;for(u.set(t,n),u.set(n,t);++p<c;){var v=t[p],_=n[p];if(i)var y=a?i(_,v,p,n,t,u):i(v,_,p,t,n,u);if(y!==r){if(y)continue;h=!1;break}if(d){if(!Un(n,function(t,n){if(!Xn(d,n)&&(v===t||o(v,t,e,i,u)))return d.push(n)})){h=!1;break}}else if(v!==_&&!o(v,_,e,i,u)){h=!1;break}}return u.delete(t),u.delete(n),h}function Yi(t){return Co(So(t,r,Wo),t+\"\")}function to(t){return jr(t,Ra,so)}function no(t){return jr(t,Ea,fo)}var eo=Ie?function(t){return Ie.get(t)}:ac;function ro(t){for(var n=t.name+\"\",e=Ce[n],r=Mt.call(Ce,n)?e.length:0;r--;){var i=e[r],o=i.func;if(null==o||o==t)return i.name}return n}function io(t){return(Mt.call(Ne,\"placeholder\")?Ne:t).placeholder}function oo(){var t=Ne.iteratee||rc;return t=t===rc?Mr:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,n){var e,r,i=t.__data__;return(\"string\"==(r=typeof(e=n))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==e:null===e)?i[\"string\"==typeof n?\"string\":\"hash\"]:i.map}function ao(t){for(var n=Ra(t),e=n.length;e--;){var r=n[e],i=t[r];n[e]=[r,i,jo(i)]}return n}function co(t,n){var e=function(t,n){return null==t?r:t[n]}(t,n);return zr(e)?e:r}var so=_n?function(t){return null==t?[]:(t=St(t),In(_n(t),function(n){return Gt.call(t,n)}))}:dc,fo=_n?function(t){for(var n=[];t;)zn(n,so(t)),t=Wt(t);return n}:dc,lo=xr;function po(t,n,e){for(var r=-1,i=(n=_i(n,t)).length,o=!1;++r<i;){var u=To(n[r]);if(!(o=null!=t&&e(t,u)))break;t=t[u]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Qu(i)&&_o(u,i)&&(Du(t)||$u(t))}function ho(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Fe(Wt(t))}function vo(t){return Du(t)||$u(t)||!!(Zt&&t&&t[Zt])}function _o(t,n){var e=typeof t;return!!(n=n??f)&&(\"number\"==e||\"symbol\"!=e&&_t.test(t))&&t>-1&&t%1==0&&t<n}function yo(t,n,e){if(!Yu(e))return!1;var r=typeof n;return!!(\"number\"==r?Hu(e)&&_o(n,e.length):\"string\"==r&&n in e)&&Fu(e[n],t)}function go(t,n){if(Du(t))return!1;var e=typeof t;return!(\"number\"!=e&&\"symbol\"!=e&&\"boolean\"!=e&&null!=t&&!aa(t))||Q.test(t)||!X.test(t)||null!=n&&t in St(n)}function mo(t){var n=ro(t),e=Ne[n];if(\"function\"!=typeof e||!(n in $e.prototype))return!1;if(t===e)return!0;var r=eo(e);return!!r&&t===r[0]}(je&&lo(new je(new ArrayBuffer(1)))!=E||xe&&lo(new xe)!=w||Se&&lo(Se.resolve())!=S||Oe&&lo(new Oe)!=A||Ae&&lo(new Ae)!=C)&&(lo=function(t){var n=xr(t),e=n==x?t.constructor:r,i=e?qo(e):\"\";if(i)switch(i){case Re:return E;case Ee:return w;case ze:return S;case Me:return A;case Pe:return C}return n});var bo=Et?Vu:vc;function wo(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||Rt)}function jo(t){return t==t&&!Yu(t)}function xo(t,n){return function(e){return null!=e&&e[t]===n&&(n!==r||t in St(e))}}function So(t,n,e){return n=_e(n===r?t.length-1:n,0),function(){for(var r=arguments,i=-1,o=_e(r.length-n,0),u=rt(o);++i<o;)u[i]=r[n+i];i=-1;for(var a=rt(n+1);++i<n;)a[i]=r[i];return a[n]=e(u),xn(t,this,a)}}function Oo(t,n){return n.length<2?t:wr(t,ti(n,0,-1))}function Ao(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var ko=Eo(Xr),Io=pn||function(t,n){return ln.setTimeout(t,n)},Co=Eo(Qr);function Ro(t,n,e){var r=n+\"\";return Co(t,function(t,n){var e=n.length;if(!e)return t;var r=e-1;return n[r]=(e>1?\"& \":\"\")+n[r],n=n.join(e>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+n+\"] */\\n\")}(r,function(t,n){return On(h,function(e){var r=\"_.\"+e[0];n&e[1]&&!Cn(t,r)&&t.push(r)}),t.sort()}(function(t){var n=t.match(ot);return n?n[1].split(ut):[]}(r),e)))}function Eo(t){var n=0,e=0;return function(){var i=ge(),o=16-(i-e);if(e=i,o>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(r,arguments)}}function zo(t,n){var e=-1,i=t.length,o=i-1;for(n=n===r?i:n;++e<n;){var u=Hr(e,o),a=t[u];t[u]=t[e],t[e]=a}return t.length=n,t}var Mo,Po,Uo=(Mo=Mu(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(\"\"),t.replace(Y,function(t,e,r,i){n.push(r?i.replace(st,\"$1\"):e||t)}),n},function(t){return 500===Po.size&&Po.clear(),t}),Po=Mo.cache,Mo);function To(t){if(\"string\"==typeof t||aa(t))return t;var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function qo(t){if(null!=t){try{return zt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function No(t){if(t instanceof $e)return t.clone();var n=new Le(t.__wrapped__,t.__chain__);return n.__actions__=Ai(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}var Fo=Kr(function(t,n){return Gu(t)?sr(t,vr(n,1,Gu,!0)):[]}),Bo=Kr(function(t,n){var e=Jo(n);return Gu(e)&&(e=r),Gu(t)?sr(t,vr(n,1,Gu,!0),oo(e,2)):[]}),Lo=Kr(function(t,n){var e=Jo(n);return Gu(e)&&(e=r),Gu(t)?sr(t,vr(n,1,Gu,!0),r,e):[]});function $o(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:ha(e);return i<0&&(i=_e(r+i,0)),Nn(t,oo(n,3),i)}function Do(t,n,e){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return e!==r&&(o=ha(e),o=e<0?_e(i+o,0):ye(o,i-1)),Nn(t,oo(n,3),o,!0)}function Wo(t){return null!=t&&t.length?vr(t,1):[]}function Ho(t){return t&&t.length?t[0]:r}var Go=Kr(function(t){var n=En(t,di);return n.length&&n[0]===t[0]?kr(n):[]}),Ko=Kr(function(t){var n=Jo(t),e=En(t,di);return n===Jo(e)?n=r:e.pop(),e.length&&e[0]===t[0]?kr(e,oo(n,2)):[]}),Zo=Kr(function(t){var n=Jo(t),e=En(t,di);return(n=\"function\"==typeof n?n:r)&&e.pop(),e.length&&e[0]===t[0]?kr(e,r,n):[]});function Jo(t){var n=null==t?0:t.length;return n?t[n-1]:r}var Vo=Kr(Xo);function Xo(t,n){return t&&t.length&&n&&n.length?Dr(t,n):t}var Qo=Yi(function(t,n){var e=null==t?0:t.length,r=ir(t,n);return Wr(t,En(n,function(t){return _o(t,e)?+t:t}).sort(xi)),r});function Yo(t){return null==t?t:we.call(t)}var tu=Kr(function(t){return ai(vr(t,1,Gu,!0))}),nu=Kr(function(t){var n=Jo(t);return Gu(n)&&(n=r),ai(vr(t,1,Gu,!0),oo(n,2))}),eu=Kr(function(t){var n=Jo(t);return n=\"function\"==typeof n?n:r,ai(vr(t,1,Gu,!0),r,n)});function ru(t){if(!t||!t.length)return[];var n=0;return t=In(t,function(t){if(Gu(t))return n=_e(t.length,n),!0}),Kn(n,function(n){return En(t,Dn(n))})}function iu(t,n){if(!t||!t.length)return[];var e=ru(t);return null==n?e:En(e,function(t){return xn(n,r,t)})}var ou=Kr(function(t,n){return Gu(t)?sr(t,n):[]}),uu=Kr(function(t){return pi(In(t,Gu))}),au=Kr(function(t){var n=Jo(t);return Gu(n)&&(n=r),pi(In(t,Gu),oo(n,2))}),cu=Kr(function(t){var n=Jo(t);return n=\"function\"==typeof n?n:r,pi(In(t,Gu),r,n)}),su=Kr(ru),fu=Kr(function(t){var n=t.length,e=n>1?t[n-1]:r;return e=\"function\"==typeof e?(t.pop(),e):r,iu(t,e)});function lu(t){var n=Ne(t);return n.__chain__=!0,n}function pu(t,n){return n(t)}var hu=Yi(function(t){var n=t.length,e=n?t[0]:0,i=this.__wrapped__,o=function(n){return ir(n,t)};return!(n>1||this.__actions__.length)&&i instanceof $e&&_o(e)?((i=i.slice(e,+e+(n?1:0))).__actions__.push({func:pu,args:[o],thisArg:r}),new Le(i,this.__chain__).thru(function(t){return n&&!t.length&&t.push(r),t})):this.thru(o)}),du=Ii(function(t,n,e){Mt.call(t,e)?++t[e]:rr(t,e,1)}),vu=Ui($o),_u=Ui(Do);function yu(t,n){return(Du(t)?On:fr)(t,oo(n,3))}function gu(t,n){return(Du(t)?An:lr)(t,oo(n,3))}var mu=Ii(function(t,n,e){Mt.call(t,e)?t[e].push(n):rr(t,e,[n])}),bu=Kr(function(t,n,e){var r=-1,i=\"function\"==typeof n,o=Hu(t)?rt(t.length):[];return fr(t,function(t){o[++r]=i?xn(n,t,e):Ir(t,n,e)}),o}),wu=Ii(function(t,n,e){rr(t,e,n)});function ju(t,n){return(Du(t)?En:Tr)(t,oo(n,3))}var xu=Ii(function(t,n,e){t[e?0:1].push(n)},function(){return[[],[]]}),Su=Kr(function(t,n){if(null==t)return[];var e=n.length;return e>1&&yo(t,n[0],n[1])?n=[]:e>2&&yo(n[0],n[1],n[2])&&(n=[n[0]]),Lr(t,vr(n,1),[])}),Ou=fn||function(){return ln.Date.now()};function Au(t,n,e){return n=e?r:n,n=t&&null==n?t.length:n,Zi(t,c,r,r,r,r,n)}function ku(t,n){var e;if(\"function\"!=typeof n)throw new kt(i);return t=ha(t),function(){return--t>0&&(e=n.apply(this,arguments)),t<=1&&(n=r),e}}var Iu=Kr(function(t,n,e){var r=1;if(e.length){var i=ue(e,io(Iu));r|=a}return Zi(t,r,n,e,i)}),Cu=Kr(function(t,n,e){var r=3;if(e.length){var i=ue(e,io(Cu));r|=a}return Zi(n,r,t,e,i)});function Ru(t,n,e){var o,u,a,c,s,f,l=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new kt(i);function v(n){var e=o,i=u;return o=u=r,l=n,c=t.apply(i,e)}function _(t){var e=t-f;return f===r||e>=n||e<0||h&&t-l>=a}function y(){var t=Ou();if(_(t))return g(t);s=Io(y,function(t){var e=n-(t-f);return h?ye(e,a-(t-l)):e}(t))}function g(t){return s=r,d&&o?v(t):(o=u=r,c)}function m(){var t=Ou(),e=_(t);if(o=arguments,u=this,f=t,e){if(s===r)return function(t){return l=t,s=Io(y,n),p?v(t):c}(f);if(h)return mi(s),s=Io(y,n),v(f)}return s===r&&(s=Io(y,n)),c}return n=va(n)||0,Yu(e)&&(p=!!e.leading,a=(h=\"maxWait\"in e)?_e(va(e.maxWait)||0,n):a,d=\"trailing\"in e?!!e.trailing:d),m.cancel=function(){s!==r&&mi(s),l=0,o=f=u=s=r},m.flush=function(){return s===r?c:g(Ou())},m}var Eu=Kr(function(t,n){return cr(t,1,n)}),zu=Kr(function(t,n,e){return cr(t,va(n)||0,e)});function Mu(t,n){if(\"function\"!=typeof t||null!=n&&\"function\"!=typeof n)throw new kt(i);var e=function(){var r=arguments,i=n?n.apply(this,r):r[0],o=e.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return e.cache=o.set(i,u)||o,u};return e.cache=new(Mu.Cache||He),e}function Pu(t){if(\"function\"!=typeof t)throw new kt(i);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}Mu.Cache=He;var Uu=yi(function(t,n){var e=(n=1==n.length&&Du(n[0])?En(n[0],Jn(oo())):En(vr(n,1),Jn(oo()))).length;return Kr(function(r){for(var i=-1,o=ye(r.length,e);++i<o;)r[i]=n[i].call(this,r[i]);return xn(t,this,r)})}),Tu=Kr(function(t,n){var e=ue(n,io(Tu));return Zi(t,a,r,n,e)}),qu=Kr(function(t,n){var e=ue(n,io(qu));return Zi(t,64,r,n,e)}),Nu=Yi(function(t,n){return Zi(t,256,r,r,r,n)});function Fu(t,n){return t===n||t!=t&&n!=n}var Bu=Di(Sr),Lu=Di(function(t,n){return t>=n}),$u=Cr(function(){return arguments}())?Cr:function(t){return ta(t)&&Mt.call(t,\"callee\")&&!Gt.call(t,\"callee\")},Du=rt.isArray,Wu=yn?Jn(yn):function(t){return ta(t)&&xr(t)==R};function Hu(t){return null!=t&&Qu(t.length)&&!Vu(t)}function Gu(t){return ta(t)&&Hu(t)}var Ku=Tn||vc,Zu=gn?Jn(gn):function(t){return ta(t)&&xr(t)==y};function Ju(t){if(!ta(t))return!1;var n=xr(t);return n==g||\"[object DOMException]\"==n||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ra(t)}function Vu(t){if(!Yu(t))return!1;var n=xr(t);return n==m||n==b||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function Xu(t){return\"number\"==typeof t&&t==ha(t)}function Qu(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=f}function Yu(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function ta(t){return null!=t&&\"object\"==typeof t}var na=mn?Jn(mn):function(t){return ta(t)&&lo(t)==w};function ea(t){return\"number\"==typeof t||ta(t)&&xr(t)==j}function ra(t){if(!ta(t)||xr(t)!=x)return!1;var n=Wt(t);if(null===n)return!0;var e=Mt.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof e&&e instanceof e&&zt.call(e)==qt}var ia=bn?Jn(bn):function(t){return ta(t)&&xr(t)==O},oa=wn?Jn(wn):function(t){return ta(t)&&lo(t)==A};function ua(t){return\"string\"==typeof t||!Du(t)&&ta(t)&&xr(t)==k}function aa(t){return\"symbol\"==typeof t||ta(t)&&xr(t)==I}var ca=jn?Jn(jn):function(t){return ta(t)&&Qu(t.length)&&!!rn[xr(t)]},sa=Di(Ur),fa=Di(function(t,n){return t<=n});function la(t){if(!t)return[];if(Hu(t))return ua(t)?fe(t):Ai(t);if(Xt&&t[Xt])return function(t){for(var n,e=[];!(n=t.next()).done;)e.push(n.value);return e}(t[Xt]());var n=lo(t);return(n==w?ie:n==A?ae:Fa)(t)}function pa(t){return t?(t=va(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ha(t){var n=pa(t),e=n%1;return n==n?e?n-e:n:0}function da(t){return t?or(ha(t),0,p):0}function va(t){if(\"number\"==typeof t)return t;if(aa(t))return l;if(Yu(t)){var n=\"function\"==typeof t.valueOf?t.valueOf():t;t=Yu(n)?n+\"\":n}if(\"string\"!=typeof t)return 0===t?t:+t;t=Zn(t);var e=ht.test(t);return e||vt.test(t)?cn(t.slice(2),e?2:8):pt.test(t)?l:+t}function _a(t){return ki(t,Ea(t))}function ya(t){return null==t?\"\":ui(t)}var ga=Ci(function(t,n){if(wo(n)||Hu(n))ki(n,Ra(n),t);else for(var e in n)Mt.call(n,e)&&Ye(t,e,n[e])}),ma=Ci(function(t,n){ki(n,Ea(n),t)}),ba=Ci(function(t,n,e,r){ki(n,Ea(n),t,r)}),wa=Ci(function(t,n,e,r){ki(n,Ra(n),t,r)}),ja=Yi(ir),xa=Kr(function(t,n){t=St(t);var e=-1,i=n.length,o=i>2?n[2]:r;for(o&&yo(n[0],n[1],o)&&(i=1);++e<i;)for(var u=n[e],a=Ea(u),c=-1,s=a.length;++c<s;){var f=a[c],l=t[f];(l===r||Fu(l,Rt[f])&&!Mt.call(t,f))&&(t[f]=u[f])}return t}),Sa=Kr(function(t){return t.push(r,Vi),xn(Ma,r,t)});function Oa(t,n,e){var i=null==t?r:wr(t,n);return i===r?e:i}function Aa(t,n){return null!=t&&po(t,n,Ar)}var ka=Ni(function(t,n,e){null!=n&&\"function\"!=typeof n.toString&&(n=Tt.call(n)),t[n]=e},Ya(ec)),Ia=Ni(function(t,n,e){null!=n&&\"function\"!=typeof n.toString&&(n=Tt.call(n)),Mt.call(t,n)?t[n].push(e):t[n]=[e]},oo),Ca=Kr(Ir);function Ra(t){return Hu(t)?Ze(t):Pr(t)}function Ea(t){return Hu(t)?Ze(t,!0):function(t){if(!Yu(t))return function(t){var n=[];if(null!=t)for(var e in St(t))n.push(e);return n}(t);var n=wo(t),e=[];for(var r in t)(\"constructor\"!=r||!n&&Mt.call(t,r))&&e.push(r);return e}(t)}var za=Ci(function(t,n,e){Fr(t,n,e)}),Ma=Ci(function(t,n,e,r){Fr(t,n,e,r)}),Pa=Yi(function(t,n){var e={};if(null==t)return e;var r=!1;n=En(n,function(n){return n=_i(n,t),r||(r=n.length>1),n}),ki(t,no(t),e),r&&(e=ur(e,7,Xi));for(var i=n.length;i--;)ci(e,n[i]);return e}),Ua=Yi(function(t,n){return null==t?{}:function(t,n){return $r(t,n,function(n,e){return Aa(t,e)})}(t,n)});function Ta(t,n){if(null==t)return{};var e=En(no(t),function(t){return[t]});return n=oo(n),$r(t,e,function(t,e){return n(t,e[0])})}var qa=Ki(Ra),Na=Ki(Ea);function Fa(t){return null==t?[]:Vn(t,Ra(t))}var Ba=Mi(function(t,n,e){return n=n.toLowerCase(),t+(e?La(n):n)});function La(t){return Ja(ya(t).toLowerCase())}function $a(t){return(t=ya(t))&&t.replace(yt,te).replace(Vt,\"\")}var Da=Mi(function(t,n,e){return t+(e?\"-\":\"\")+n.toLowerCase()}),Wa=Mi(function(t,n,e){return t+(e?\" \":\"\")+n.toLowerCase()}),Ha=zi(\"toLowerCase\"),Ga=Mi(function(t,n,e){return t+(e?\"_\":\"\")+n.toLowerCase()}),Ka=Mi(function(t,n,e){return t+(e?\" \":\"\")+Ja(n)}),Za=Mi(function(t,n,e){return t+(e?\" \":\"\")+n.toUpperCase()}),Ja=zi(\"toUpperCase\");function Va(t,n,e){return t=ya(t),(n=e?r:n)===r?function(t){return tn.test(t)}(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(n)||[]}var Xa=Kr(function(t,n){try{return xn(t,r,n)}catch(t){return Ju(t)?t:new wt(t)}}),Qa=Yi(function(t,n){return On(n,function(n){n=To(n),rr(t,n,Iu(t[n],t))}),t});function Ya(t){return function(){return t}}var tc=Ti(),nc=Ti(!0);function ec(t){return t}function rc(t){return Mr(\"function\"==typeof t?t:ur(t,1))}var ic=Kr(function(t,n){return function(e){return Ir(e,t,n)}}),oc=Kr(function(t,n){return function(e){return Ir(t,e,n)}});function uc(t,n,e){var r=Ra(n),i=br(n,r);null!=e||Yu(n)&&(i.length||!r.length)||(e=n,n=t,t=this,i=br(n,Ra(n)));var o=!(Yu(e)&&\"chain\"in e&&!e.chain),u=Vu(t);return On(i,function(e){var r=n[e];t[e]=r,u&&(t.prototype[e]=function(){var n=this.__chain__;if(o||n){var e=t(this.__wrapped__);return(e.__actions__=Ai(this.__actions__)).push({func:r,args:arguments,thisArg:t}),e.__chain__=n,e}return r.apply(t,zn([this.value()],arguments))})}),t}function ac(){}var cc=Bi(En),sc=Bi(kn),fc=Bi(Un);function lc(t){return go(t)?Dn(To(t)):function(t){return function(n){return wr(n,t)}}(t)}var pc=$i(),hc=$i(!0);function dc(){return[]}function vc(){return!1}var _c,yc=Fi(function(t,n){return t+n},0),gc=Hi(\"ceil\"),mc=Fi(function(t,n){return t/n},1),bc=Hi(\"floor\"),wc=Fi(function(t,n){return t*n},1),jc=Hi(\"round\"),xc=Fi(function(t,n){return t-n},0);return Ne.after=function(t,n){if(\"function\"!=typeof n)throw new kt(i);return t=ha(t),function(){if(--t<1)return n.apply(this,arguments)}},Ne.ary=Au,Ne.assign=ga,Ne.assignIn=ma,Ne.assignInWith=ba,Ne.assignWith=wa,Ne.at=ja,Ne.before=ku,Ne.bind=Iu,Ne.bindAll=Qa,Ne.bindKey=Cu,Ne.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Du(t)?t:[t]},Ne.chain=lu,Ne.chunk=function(t,n,e){n=(e?yo(t,n,e):n===r)?1:_e(ha(n),0);var i=null==t?0:t.length;if(!i||n<1)return[];for(var o=0,u=0,a=rt(hn(i/n));o<i;)a[u++]=ti(t,o,o+=n);return a},Ne.compact=function(t){for(var n=-1,e=null==t?0:t.length,r=0,i=[];++n<e;){var o=t[n];o&&(i[r++]=o)}return i},Ne.concat=function(){var t=arguments.length;if(!t)return[];for(var n=rt(t-1),e=arguments[0],r=t;r--;)n[r-1]=arguments[r];return zn(Du(e)?Ai(e):[e],vr(n,1))},Ne.cond=function(t){var n=null==t?0:t.length,e=oo();return t=n?En(t,function(t){if(\"function\"!=typeof t[1])throw new kt(i);return[e(t[0]),t[1]]}):[],Kr(function(e){for(var r=-1;++r<n;){var i=t[r];if(xn(i[0],this,e))return xn(i[1],this,e)}})},Ne.conforms=function(t){return function(t){var n=Ra(t);return function(e){return ar(e,t,n)}}(ur(t,1))},Ne.constant=Ya,Ne.countBy=du,Ne.create=function(t,n){var e=Fe(t);return null==n?e:er(e,n)},Ne.curry=function t(n,e,i){var o=Zi(n,8,r,r,r,r,r,e=i?r:e);return o.placeholder=t.placeholder,o},Ne.curryRight=function t(n,e,i){var o=Zi(n,16,r,r,r,r,r,e=i?r:e);return o.placeholder=t.placeholder,o},Ne.debounce=Ru,Ne.defaults=xa,Ne.defaultsDeep=Sa,Ne.defer=Eu,Ne.delay=zu,Ne.difference=Fo,Ne.differenceBy=Bo,Ne.differenceWith=Lo,Ne.drop=function(t,n,e){var i=null==t?0:t.length;return i?ti(t,(n=e||n===r?1:ha(n))<0?0:n,i):[]},Ne.dropRight=function(t,n,e){var i=null==t?0:t.length;return i?ti(t,0,(n=i-(n=e||n===r?1:ha(n)))<0?0:n):[]},Ne.dropRightWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!0,!0):[]},Ne.dropWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!0):[]},Ne.fill=function(t,n,e,i){var o=null==t?0:t.length;return o?(e&&\"number\"!=typeof e&&yo(t,n,e)&&(e=0,i=o),function(t,n,e,i){var o=t.length;for((e=ha(e))<0&&(e=-e>o?0:o+e),(i=i===r||i>o?o:ha(i))<0&&(i+=o),i=e>i?0:da(i);e<i;)t[e++]=n;return t}(t,n,e,i)):[]},Ne.filter=function(t,n){return(Du(t)?In:dr)(t,oo(n,3))},Ne.flatMap=function(t,n){return vr(ju(t,n),1)},Ne.flatMapDeep=function(t,n){return vr(ju(t,n),s)},Ne.flatMapDepth=function(t,n,e){return e=e===r?1:ha(e),vr(ju(t,n),e)},Ne.flatten=Wo,Ne.flattenDeep=function(t){return null!=t&&t.length?vr(t,s):[]},Ne.flattenDepth=function(t,n){return null!=t&&t.length?vr(t,n=n===r?1:ha(n)):[]},Ne.flip=function(t){return Zi(t,512)},Ne.flow=tc,Ne.flowRight=nc,Ne.fromPairs=function(t){for(var n=-1,e=null==t?0:t.length,r={};++n<e;){var i=t[n];rr(r,i[0],i[1])}return r},Ne.functions=function(t){return null==t?[]:br(t,Ra(t))},Ne.functionsIn=function(t){return null==t?[]:br(t,Ea(t))},Ne.groupBy=mu,Ne.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Ne.intersection=Go,Ne.intersectionBy=Ko,Ne.intersectionWith=Zo,Ne.invert=ka,Ne.invertBy=Ia,Ne.invokeMap=bu,Ne.iteratee=rc,Ne.keyBy=wu,Ne.keys=Ra,Ne.keysIn=Ea,Ne.map=ju,Ne.mapKeys=function(t,n){var e={};return n=oo(n,3),gr(t,function(t,r,i){rr(e,n(t,r,i),t)}),e},Ne.mapValues=function(t,n){var e={};return n=oo(n,3),gr(t,function(t,r,i){rr(e,r,n(t,r,i))}),e},Ne.matches=function(t){return qr(ur(t,1))},Ne.matchesProperty=function(t,n){return Nr(t,ur(n,1))},Ne.memoize=Mu,Ne.merge=za,Ne.mergeWith=Ma,Ne.method=ic,Ne.methodOf=oc,Ne.mixin=uc,Ne.negate=Pu,Ne.nthArg=function(t){return t=ha(t),Kr(function(n){return Br(n,t)})},Ne.omit=Pa,Ne.omitBy=function(t,n){return Ta(t,Pu(oo(n)))},Ne.once=function(t){return ku(2,t)},Ne.orderBy=function(t,n,e,i){return null==t?[]:(Du(n)||(n=null==n?[]:[n]),Du(e=i?r:e)||(e=null==e?[]:[e]),Lr(t,n,e))},Ne.over=cc,Ne.overArgs=Uu,Ne.overEvery=sc,Ne.overSome=fc,Ne.partial=Tu,Ne.partialRight=qu,Ne.partition=xu,Ne.pick=Ua,Ne.pickBy=Ta,Ne.property=lc,Ne.propertyOf=function(t){return function(n){return null==t?r:wr(t,n)}},Ne.pull=Vo,Ne.pullAll=Xo,Ne.pullAllBy=function(t,n,e){return t&&t.length&&n&&n.length?Dr(t,n,oo(e,2)):t},Ne.pullAllWith=function(t,n,e){return t&&t.length&&n&&n.length?Dr(t,n,r,e):t},Ne.pullAt=Qo,Ne.range=pc,Ne.rangeRight=hc,Ne.rearg=Nu,Ne.reject=function(t,n){return(Du(t)?In:dr)(t,Pu(oo(n,3)))},Ne.remove=function(t,n){var e=[];if(!t||!t.length)return e;var r=-1,i=[],o=t.length;for(n=oo(n,3);++r<o;){var u=t[r];n(u,r,t)&&(e.push(u),i.push(r))}return Wr(t,i),e},Ne.rest=function(t,n){if(\"function\"!=typeof t)throw new kt(i);return Kr(t,n=n===r?n:ha(n))},Ne.reverse=Yo,Ne.sampleSize=function(t,n,e){return n=(e?yo(t,n,e):n===r)?1:ha(n),(Du(t)?Ve:Jr)(t,n)},Ne.set=function(t,n,e){return null==t?t:Vr(t,n,e)},Ne.setWith=function(t,n,e,i){return i=\"function\"==typeof i?i:r,null==t?t:Vr(t,n,e,i)},Ne.shuffle=function(t){return(Du(t)?Xe:Yr)(t)},Ne.slice=function(t,n,e){var i=null==t?0:t.length;return i?(e&&\"number\"!=typeof e&&yo(t,n,e)?(n=0,e=i):(n=null==n?0:ha(n),e=e===r?i:ha(e)),ti(t,n,e)):[]},Ne.sortBy=Su,Ne.sortedUniq=function(t){return t&&t.length?ii(t):[]},Ne.sortedUniqBy=function(t,n){return t&&t.length?ii(t,oo(n,2)):[]},Ne.split=function(t,n,e){return e&&\"number\"!=typeof e&&yo(t,n,e)&&(n=e=r),(e=e===r?p:e>>>0)?(t=ya(t))&&(\"string\"==typeof n||null!=n&&!ia(n))&&!(n=ui(n))&&re(t)?gi(fe(t),0,e):t.split(n,e):[]},Ne.spread=function(t,n){if(\"function\"!=typeof t)throw new kt(i);return n=null==n?0:_e(ha(n),0),Kr(function(e){var r=e[n],i=gi(e,0,n);return r&&zn(i,r),xn(t,this,i)})},Ne.tail=function(t){var n=null==t?0:t.length;return n?ti(t,1,n):[]},Ne.take=function(t,n,e){return t&&t.length?ti(t,0,(n=e||n===r?1:ha(n))<0?0:n):[]},Ne.takeRight=function(t,n,e){var i=null==t?0:t.length;return i?ti(t,(n=i-(n=e||n===r?1:ha(n)))<0?0:n,i):[]},Ne.takeRightWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!1,!0):[]},Ne.takeWhile=function(t,n){return t&&t.length?fi(t,oo(n,3)):[]},Ne.tap=function(t,n){return n(t),t},Ne.throttle=function(t,n,e){var r=!0,o=!0;if(\"function\"!=typeof t)throw new kt(i);return Yu(e)&&(r=\"leading\"in e?!!e.leading:r,o=\"trailing\"in e?!!e.trailing:o),Ru(t,n,{leading:r,maxWait:n,trailing:o})},Ne.thru=pu,Ne.toArray=la,Ne.toPairs=qa,Ne.toPairsIn=Na,Ne.toPath=function(t){return Du(t)?En(t,To):aa(t)?[t]:Ai(Uo(ya(t)))},Ne.toPlainObject=_a,Ne.transform=function(t,n,e){var r=Du(t),i=r||Ku(t)||ca(t);if(n=oo(n,4),null==e){var o=t&&t.constructor;e=i?r?new o:[]:Yu(t)&&Vu(o)?Fe(Wt(t)):{}}return(i?On:gr)(t,function(t,r,i){return n(e,t,r,i)}),e},Ne.unary=function(t){return Au(t,1)},Ne.union=tu,Ne.unionBy=nu,Ne.unionWith=eu,Ne.uniq=function(t){return t&&t.length?ai(t):[]},Ne.uniqBy=function(t,n){return t&&t.length?ai(t,oo(n,2)):[]},Ne.uniqWith=function(t,n){return n=\"function\"==typeof n?n:r,t&&t.length?ai(t,r,n):[]},Ne.unset=function(t,n){return null==t||ci(t,n)},Ne.unzip=ru,Ne.unzipWith=iu,Ne.update=function(t,n,e){return null==t?t:si(t,n,vi(e))},Ne.updateWith=function(t,n,e,i){return i=\"function\"==typeof i?i:r,null==t?t:si(t,n,vi(e),i)},Ne.values=Fa,Ne.valuesIn=function(t){return null==t?[]:Vn(t,Ea(t))},Ne.without=ou,Ne.words=Va,Ne.wrap=function(t,n){return Tu(vi(n),t)},Ne.xor=uu,Ne.xorBy=au,Ne.xorWith=cu,Ne.zip=su,Ne.zipObject=function(t,n){return hi(t||[],n||[],Ye)},Ne.zipObjectDeep=function(t,n){return hi(t||[],n||[],Vr)},Ne.zipWith=fu,Ne.entries=qa,Ne.entriesIn=Na,Ne.extend=ma,Ne.extendWith=ba,uc(Ne,Ne),Ne.add=yc,Ne.attempt=Xa,Ne.camelCase=Ba,Ne.capitalize=La,Ne.ceil=gc,Ne.clamp=function(t,n,e){return e===r&&(e=n,n=r),e!==r&&(e=(e=va(e))==e?e:0),n!==r&&(n=(n=va(n))==n?n:0),or(va(t),n,e)},Ne.clone=function(t){return ur(t,4)},Ne.cloneDeep=function(t){return ur(t,5)},Ne.cloneDeepWith=function(t,n){return ur(t,5,n=\"function\"==typeof n?n:r)},Ne.cloneWith=function(t,n){return ur(t,4,n=\"function\"==typeof n?n:r)},Ne.conformsTo=function(t,n){return null==n||ar(t,n,Ra(n))},Ne.deburr=$a,Ne.defaultTo=function(t,n){return null==t||t!=t?n:t},Ne.divide=mc,Ne.endsWith=function(t,n,e){t=ya(t),n=ui(n);var i=t.length,o=e=e===r?i:or(ha(e),0,i);return(e-=n.length)>=0&&t.slice(e,o)==n},Ne.eq=Fu,Ne.escape=function(t){return(t=ya(t))&&K.test(t)?t.replace(H,ne):t},Ne.escapeRegExp=function(t){return(t=ya(t))&&nt.test(t)?t.replace(tt,\"\\\\$&\"):t},Ne.every=function(t,n,e){var i=Du(t)?kn:pr;return e&&yo(t,n,e)&&(n=r),i(t,oo(n,3))},Ne.find=vu,Ne.findIndex=$o,Ne.findKey=function(t,n){return qn(t,oo(n,3),gr)},Ne.findLast=_u,Ne.findLastIndex=Do,Ne.findLastKey=function(t,n){return qn(t,oo(n,3),mr)},Ne.floor=bc,Ne.forEach=yu,Ne.forEachRight=gu,Ne.forIn=function(t,n){return null==t?t:_r(t,oo(n,3),Ea)},Ne.forInRight=function(t,n){return null==t?t:yr(t,oo(n,3),Ea)},Ne.forOwn=function(t,n){return t&&gr(t,oo(n,3))},Ne.forOwnRight=function(t,n){return t&&mr(t,oo(n,3))},Ne.get=Oa,Ne.gt=Bu,Ne.gte=Lu,Ne.has=function(t,n){return null!=t&&po(t,n,Or)},Ne.hasIn=Aa,Ne.head=Ho,Ne.identity=ec,Ne.includes=function(t,n,e,r){t=Hu(t)?t:Fa(t),e=e&&!r?ha(e):0;var i=t.length;return e<0&&(e=_e(i+e,0)),ua(t)?e<=i&&t.indexOf(n,e)>-1:!!i&&Fn(t,n,e)>-1},Ne.indexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:ha(e);return i<0&&(i=_e(r+i,0)),Fn(t,n,i)},Ne.inRange=function(t,n,e){return n=pa(n),e===r?(e=n,n=0):e=pa(e),function(t,n,e){return t>=ye(n,e)&&t<_e(n,e)}(t=va(t),n,e)},Ne.invoke=Ca,Ne.isArguments=$u,Ne.isArray=Du,Ne.isArrayBuffer=Wu,Ne.isArrayLike=Hu,Ne.isArrayLikeObject=Gu,Ne.isBoolean=function(t){return!0===t||!1===t||ta(t)&&xr(t)==_},Ne.isBuffer=Ku,Ne.isDate=Zu,Ne.isElement=function(t){return ta(t)&&1===t.nodeType&&!ra(t)},Ne.isEmpty=function(t){if(null==t)return!0;if(Hu(t)&&(Du(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Ku(t)||ca(t)||$u(t)))return!t.length;var n=lo(t);if(n==w||n==A)return!t.size;if(wo(t))return!Pr(t).length;for(var e in t)if(Mt.call(t,e))return!1;return!0},Ne.isEqual=function(t,n){return Rr(t,n)},Ne.isEqualWith=function(t,n,e){var i=(e=\"function\"==typeof e?e:r)?e(t,n):r;return i===r?Rr(t,n,r,e):!!i},Ne.isError=Ju,Ne.isFinite=function(t){return\"number\"==typeof t&&Wn(t)},Ne.isFunction=Vu,Ne.isInteger=Xu,Ne.isLength=Qu,Ne.isMap=na,Ne.isMatch=function(t,n){return t===n||Er(t,n,ao(n))},Ne.isMatchWith=function(t,n,e){return e=\"function\"==typeof e?e:r,Er(t,n,ao(n),e)},Ne.isNaN=function(t){return ea(t)&&t!=+t},Ne.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return zr(t)},Ne.isNil=function(t){return null==t},Ne.isNull=function(t){return null===t},Ne.isNumber=ea,Ne.isObject=Yu,Ne.isObjectLike=ta,Ne.isPlainObject=ra,Ne.isRegExp=ia,Ne.isSafeInteger=function(t){return Xu(t)&&t>=-9007199254740991&&t<=f},Ne.isSet=oa,Ne.isString=ua,Ne.isSymbol=aa,Ne.isTypedArray=ca,Ne.isUndefined=function(t){return t===r},Ne.isWeakMap=function(t){return ta(t)&&lo(t)==C},Ne.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==xr(t)},Ne.join=function(t,n){return null==t?\"\":de.call(t,n)},Ne.kebabCase=Da,Ne.last=Jo,Ne.lastIndexOf=function(t,n,e){var i=null==t?0:t.length;if(!i)return-1;var o=i;return e!==r&&(o=(o=ha(e))<0?_e(i+o,0):ye(o,i-1)),n==n?function(t,n,e){for(var r=e+1;r--;)if(t[r]===n)return r;return r}(t,n,o):Nn(t,Ln,o,!0)},Ne.lowerCase=Wa,Ne.lowerFirst=Ha,Ne.lt=sa,Ne.lte=fa,Ne.max=function(t){return t&&t.length?hr(t,ec,Sr):r},Ne.maxBy=function(t,n){return t&&t.length?hr(t,oo(n,2),Sr):r},Ne.mean=function(t){return $n(t,ec)},Ne.meanBy=function(t,n){return $n(t,oo(n,2))},Ne.min=function(t){return t&&t.length?hr(t,ec,Ur):r},Ne.minBy=function(t,n){return t&&t.length?hr(t,oo(n,2),Ur):r},Ne.stubArray=dc,Ne.stubFalse=vc,Ne.stubObject=function(){return{}},Ne.stubString=function(){return\"\"},Ne.stubTrue=function(){return!0},Ne.multiply=wc,Ne.nth=function(t,n){return t&&t.length?Br(t,ha(n)):r},Ne.noConflict=function(){return ln._===this&&(ln._=Nt),this},Ne.noop=ac,Ne.now=Ou,Ne.pad=function(t,n,e){t=ya(t);var r=(n=ha(n))?se(t):0;if(!n||r>=n)return t;var i=(n-r)/2;return Li(vn(i),e)+t+Li(hn(i),e)},Ne.padEnd=function(t,n,e){t=ya(t);var r=(n=ha(n))?se(t):0;return n&&r<n?t+Li(n-r,e):t},Ne.padStart=function(t,n,e){t=ya(t);var r=(n=ha(n))?se(t):0;return n&&r<n?Li(n-r,e)+t:t},Ne.parseInt=function(t,n,e){return e||null==n?n=0:n&&(n=+n),me(ya(t).replace(et,\"\"),n||0)},Ne.random=function(t,n,e){if(e&&\"boolean\"!=typeof e&&yo(t,n,e)&&(n=e=r),e===r&&(\"boolean\"==typeof n?(e=n,n=r):\"boolean\"==typeof t&&(e=t,t=r)),t===r&&n===r?(t=0,n=1):(t=pa(t),n===r?(n=t,t=0):n=pa(n)),t>n){var i=t;t=n,n=i}if(e||t%1||n%1){var o=be();return ye(t+o*(n-t+an(\"1e-\"+((o+\"\").length-1))),n)}return Hr(t,n)},Ne.reduce=function(t,n,e){var r=Du(t)?Mn:Hn,i=arguments.length<3;return r(t,oo(n,4),e,i,fr)},Ne.reduceRight=function(t,n,e){var r=Du(t)?Pn:Hn,i=arguments.length<3;return r(t,oo(n,4),e,i,lr)},Ne.repeat=function(t,n,e){return n=(e?yo(t,n,e):n===r)?1:ha(n),Gr(ya(t),n)},Ne.replace=function(){var t=arguments,n=ya(t[0]);return t.length<3?n:n.replace(t[1],t[2])},Ne.result=function(t,n,e){var i=-1,o=(n=_i(n,t)).length;for(o||(o=1,t=r);++i<o;){var u=null==t?r:t[To(n[i])];u===r&&(i=o,u=e),t=Vu(u)?u.call(t):u}return t},Ne.round=jc,Ne.runInContext=t,Ne.sample=function(t){return(Du(t)?Je:Zr)(t)},Ne.size=function(t){if(null==t)return 0;if(Hu(t))return ua(t)?se(t):t.length;var n=lo(t);return n==w||n==A?t.size:Pr(t).length},Ne.snakeCase=Ga,Ne.some=function(t,n,e){var i=Du(t)?Un:ni;return e&&yo(t,n,e)&&(n=r),i(t,oo(n,3))},Ne.sortedIndex=function(t,n){return ei(t,n)},Ne.sortedIndexBy=function(t,n,e){return ri(t,n,oo(e,2))},Ne.sortedIndexOf=function(t,n){var e=null==t?0:t.length;if(e){var r=ei(t,n);if(r<e&&Fu(t[r],n))return r}return-1},Ne.sortedLastIndex=function(t,n){return ei(t,n,!0)},Ne.sortedLastIndexBy=function(t,n,e){return ri(t,n,oo(e,2),!0)},Ne.sortedLastIndexOf=function(t,n){if(null!=t&&t.length){var e=ei(t,n,!0)-1;if(Fu(t[e],n))return e}return-1},Ne.startCase=Ka,Ne.startsWith=function(t,n,e){return t=ya(t),e=null==e?0:or(ha(e),0,t.length),n=ui(n),t.slice(e,e+n.length)==n},Ne.subtract=xc,Ne.sum=function(t){return t&&t.length?Gn(t,ec):0},Ne.sumBy=function(t,n){return t&&t.length?Gn(t,oo(n,2)):0},Ne.template=function(t,n,e){var i=Ne.templateSettings;e&&yo(t,n,e)&&(n=r),t=ya(t),n=wa({},n,i,Ji);var o=wa({},n.imports,i.imports,Ji),u=Ra(o),a=Vn(o,u);On(u,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,f=0,l=n.interpolate||gt,p=\"__p += '\",h=Ot((n.escape||gt).source+\"|\"+l.source+\"|\"+(l===V?ft:gt).source+\"|\"+(n.evaluate||gt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Mt.call(n,\"sourceURL\")?(n.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++en+\"]\")+\"\\n\";t.replace(h,function(n,e,r,i,o,u){return r||(r=i),p+=t.slice(f,u).replace(mt,ee),e&&(c=!0,p+=\"' +\\n__e(\"+e+\") +\\n'\"),o&&(s=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),f=u+n.length,n}),p+=\"';\\n\";var v=Mt.call(n,\"variable\")&&n.variable;if(v){if(ct.test(v))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(L,\"\"):p).replace($,\"$1\").replace(D,\"$1;\"),p=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var _=Xa(function(){return jt(u,d+\"return \"+p).apply(r,a)});if(_.source=p,Ju(_))throw _;return _},Ne.times=function(t,n){if((t=ha(t))<1||t>f)return[];var e=p,r=ye(t,p);n=oo(n),t-=p;for(var i=Kn(r,n);++e<t;)n(e);return i},Ne.toFinite=pa,Ne.toInteger=ha,Ne.toLength=da,Ne.toLower=function(t){return ya(t).toLowerCase()},Ne.toNumber=va,Ne.toSafeInteger=function(t){return t?or(ha(t),-9007199254740991,f):0===t?t:0},Ne.toString=ya,Ne.toUpper=function(t){return ya(t).toUpperCase()},Ne.trim=function(t,n,e){if((t=ya(t))&&(e||n===r))return Zn(t);if(!t||!(n=ui(n)))return t;var i=fe(t),o=fe(n);return gi(i,Qn(i,o),Yn(i,o)+1).join(\"\")},Ne.trimEnd=function(t,n,e){if((t=ya(t))&&(e||n===r))return t.slice(0,le(t)+1);if(!t||!(n=ui(n)))return t;var i=fe(t);return gi(i,0,Yn(i,fe(n))+1).join(\"\")},Ne.trimStart=function(t,n,e){if((t=ya(t))&&(e||n===r))return t.replace(et,\"\");if(!t||!(n=ui(n)))return t;var i=fe(t);return gi(i,Qn(i,fe(n))).join(\"\")},Ne.truncate=function(t,n){var e=30,i=\"...\";if(Yu(n)){var o=\"separator\"in n?n.separator:o;e=\"length\"in n?ha(n.length):e,i=\"omission\"in n?ui(n.omission):i}var u=(t=ya(t)).length;if(re(t)){var a=fe(t);u=a.length}if(e>=u)return t;var c=e-se(i);if(c<1)return i;var s=a?gi(a,0,c).join(\"\"):t.slice(0,c);if(o===r)return s+i;if(a&&(c+=s.length-c),ia(o)){if(t.slice(c).search(o)){var f,l=s;for(o.global||(o=Ot(o.source,ya(lt.exec(o))+\"g\")),o.lastIndex=0;f=o.exec(l);)var p=f.index;s=s.slice(0,p===r?c:p)}}else if(t.indexOf(ui(o),c)!=c){var h=s.lastIndexOf(o);h>-1&&(s=s.slice(0,h))}return s+i},Ne.unescape=function(t){return(t=ya(t))&&G.test(t)?t.replace(W,pe):t},Ne.uniqueId=function(t){var n=++Pt;return ya(t)+n},Ne.upperCase=Za,Ne.upperFirst=Ja,Ne.each=yu,Ne.eachRight=gu,Ne.first=Ho,uc(Ne,(_c={},gr(Ne,function(t,n){Mt.call(Ne.prototype,n)||(_c[n]=t)}),_c),{chain:!1}),Ne.VERSION=\"4.18.1\",On([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Ne[t].placeholder=Ne}),On([\"drop\",\"take\"],function(t,n){$e.prototype[t]=function(e){e=e===r?1:_e(ha(e),0);var i=this.__filtered__&&!n?new $e(this):this.clone();return i.__filtered__?i.__takeCount__=ye(e,i.__takeCount__):i.__views__.push({size:ye(e,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},$e.prototype[t+\"Right\"]=function(n){return this.reverse()[t](n).reverse()}}),On([\"filter\",\"map\",\"takeWhile\"],function(t,n){var e=n+1,r=1==e||3==e;$e.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:oo(t,3),type:e}),n.__filtered__=n.__filtered__||r,n}}),On([\"head\",\"last\"],function(t,n){var e=\"take\"+(n?\"Right\":\"\");$e.prototype[t]=function(){return this[e](1).value()[0]}}),On([\"initial\",\"tail\"],function(t,n){var e=\"drop\"+(n?\"\":\"Right\");$e.prototype[t]=function(){return this.__filtered__?new $e(this):this[e](1)}}),$e.prototype.compact=function(){return this.filter(ec)},$e.prototype.find=function(t){return this.filter(t).head()},$e.prototype.findLast=function(t){return this.reverse().find(t)},$e.prototype.invokeMap=Kr(function(t,n){return\"function\"==typeof t?new $e(this):this.map(function(e){return Ir(e,t,n)})}),$e.prototype.reject=function(t){return this.filter(Pu(oo(t)))},$e.prototype.slice=function(t,n){t=ha(t);var e=this;return e.__filtered__&&(t>0||n<0)?new $e(e):(t<0?e=e.takeRight(-t):t&&(e=e.drop(t)),n!==r&&(e=(n=ha(n))<0?e.dropRight(-n):e.take(n-t)),e)},$e.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},$e.prototype.toArray=function(){return this.take(p)},gr($e.prototype,function(t,n){var e=/^(?:filter|find|map|reject)|While$/.test(n),i=/^(?:head|last)$/.test(n),o=Ne[i?\"take\"+(\"last\"==n?\"Right\":\"\"):n],u=i||/^find/.test(n);o&&(Ne.prototype[n]=function(){var n=this.__wrapped__,a=i?[1]:arguments,c=n instanceof $e,s=a[0],f=c||Du(n),l=function(t){var n=o.apply(Ne,zn([t],a));return i&&p?n[0]:n};f&&e&&\"function\"==typeof s&&1!=s.length&&(c=f=!1);var p=this.__chain__,h=!!this.__actions__.length,d=u&&!p,v=c&&!h;if(!u&&f){n=v?n:new $e(this);var _=t.apply(n,a);return _.__actions__.push({func:pu,args:[l],thisArg:r}),new Le(_,p)}return d&&v?t.apply(this,a):(_=this.thru(l),d?i?_.value()[0]:_.value():_)})}),On([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var n=It[t],e=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Ne.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return n.apply(Du(i)?i:[],t)}return this[e](function(e){return n.apply(Du(e)?e:[],t)})}}),gr($e.prototype,function(t,n){var e=Ne[n];if(e){var r=e.name+\"\";Mt.call(Ce,r)||(Ce[r]=[]),Ce[r].push({name:n,func:e})}}),Ce[qi(r,2).name]=[{name:\"wrapper\",func:r}],$e.prototype.clone=function(){var t=new $e(this.__wrapped__);return t.__actions__=Ai(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ai(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ai(this.__views__),t},$e.prototype.reverse=function(){if(this.__filtered__){var t=new $e(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},$e.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,e=Du(t),r=n<0,i=e?t.length:0,o=function(t,n,e){for(var r=-1,i=e.length;++r<i;){var o=e[r],u=o.size;switch(o.type){case\"drop\":t+=u;break;case\"dropRight\":n-=u;break;case\"take\":n=ye(n,t+u);break;case\"takeRight\":t=_e(t,n-u)}}return{start:t,end:n}}(0,i,this.__views__),u=o.start,a=o.end,c=a-u,s=r?a:u-1,f=this.__iteratees__,l=f.length,p=0,h=ye(c,this.__takeCount__);if(!e||!r&&i==c&&h==c)return li(t,this.__actions__);var d=[];t:for(;c--&&p<h;){for(var v=-1,_=t[s+=n];++v<l;){var y=f[v],g=y.iteratee,m=y.type,b=g(_);if(2==m)_=b;else if(!b){if(1==m)continue t;break t}}d[p++]=_}return d},Ne.prototype.at=hu,Ne.prototype.chain=function(){return lu(this)},Ne.prototype.commit=function(){return new Le(this.value(),this.__chain__)},Ne.prototype.next=function(){this.__values__===r&&(this.__values__=la(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Ne.prototype.plant=function(t){for(var n,e=this;e instanceof Be;){var i=No(e);i.__index__=0,i.__values__=r,n?o.__wrapped__=i:n=i;var o=i;e=e.__wrapped__}return o.__wrapped__=t,n},Ne.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof $e){var n=t;return this.__actions__.length&&(n=new $e(this)),(n=n.reverse()).__actions__.push({func:pu,args:[Yo],thisArg:r}),new Le(n,this.__chain__)}return this.thru(Yo)},Ne.prototype.toJSON=Ne.prototype.valueOf=Ne.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},Ne.prototype.first=Ne.prototype.head,Xt&&(Ne.prototype[Xt]=function(){return this}),Ne}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(ln._=he,define(function(){return he})):hn?((hn.exports=he)._=he,pn._=he):ln._=he}.call(this)},1657(t){\"use strict\";t.exports=(t,n)=>{if(\"string\"!=typeof t||\"string\"!=typeof n)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===n)return[t];const e=t.indexOf(n);return-1===e?[t]:[t.slice(0,e),t.slice(e+n.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,n,e){\"use strict\";e.d(n,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var i in n=arguments[e])Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},n={};function e(r){var i=n[r];if(void 0!==i)return i.exports;var o=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";e.r(r),e.d(r,{createClearpayPaymentStrategy:()=>g});var t,n=e(315),i=e(9440);class o extends Error{constructor(t){var n;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",n=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class u extends o{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class a extends u{constructor(t){let n=\"Unable to submit payment for the order because the payload is invalid.\";t&&(n=`${n} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(n),this.name=\"PaymentArgumentInvalidError\"}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(t||(t={}));class c extends o{constructor(n){super(function(n){switch(n){case t.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case t.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case t.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case t.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case t.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case t.MissingCheckoutConfig:case t.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case t.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case t.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case t.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case t.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case t.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case t.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(n)),this.subtype=n,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class s extends o{constructor(t){super(t||\"The current order could not be finalized successfully\"),this.name=\"OrderFinalizationNotCompletedError\",this.type=\"order_finalization_not_completed\"}}var f;!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(f||(f={}));class l extends o{constructor(t){super(function(t){switch(t){case f.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case f.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case f.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case f.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const p={body:{},headers:{},status:0};class h extends o{constructor(t,{message:n,errors:e}={}){const{body:r,headers:i,status:o}=t||p;super(n||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=i,this.status=o,this.errors=e||[]}}var d=function(t,n,e,r){return new(e||(e=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e(function(t){t(n)})).then(u,a)}c((r=r.apply(t,n||[])).next())})};class v{constructor(t,n){this._paymentIntegrationService=t,this._clearpayScriptLoader=n}initialize(t){return d(this,void 0,void 0,function*(){const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),e=n(t.methodId,t.gatewayId),r=this._paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features;this._clearpaySdk=yield this._clearpayScriptLoader.load(e,r)})}deinitialize(){return this._clearpaySdk=void 0,Promise.resolve()}execute(t,n){return d(this,void 0,void 0,function*(){const{gatewayId:e,methodId:r}=t.payment||{};if(!e||!r)throw new a([\"payment.gatewayId\",\"payment.methodId\"]);const o=this._paymentIntegrationService.getState(),{isStoreCreditApplied:c}=o.getCheckoutOrThrow();yield this._paymentIntegrationService.applyStoreCredit(c),yield this._paymentIntegrationService.validateCheckout(o.getCheckout(),n);const{countryCode:s}=o.getBillingAddressOrThrow();if(!this._isCountrySupported(s))throw new u(\"Unable to proceed because billing country is not supported.\");return yield this._loadPaymentMethod(e,r,n),yield this._redirectToClearpay(s,this._paymentIntegrationService.getState().getPaymentMethod(r,e)),new Promise(i.noop)})}finalize(n){var e,r,i;return d(this,void 0,void 0,function*(){const o=this._paymentIntegrationService.getState(),u=o.getPaymentId(),a=o.getContextConfig();if(!u)throw new c(t.MissingCheckout);if(!a||!a.payment.token)throw new c(t.MissingCheckoutConfig);const f={methodId:u.providerId,paymentData:{nonce:a.payment.token}};yield this._paymentIntegrationService.submitOrder({},n);try{yield this._paymentIntegrationService.submitPayment(f)}catch(t){if(yield this._paymentIntegrationService.forgetCheckout(u.providerId),yield this._paymentIntegrationService.loadPaymentMethods(),(t=>\"object\"==typeof t&&null!==t&&\"body\"in t)(t))throw new s(null===(i=null===(r=null===(e=t.body)||void 0===e?void 0:e.errors)||void 0===r?void 0:r[0])||void 0===i?void 0:i.message)}})}_redirectToClearpay(t,n){return d(this,void 0,void 0,function*(){if(!this._clearpaySdk||!n||!n.clientToken)throw new l(f.PaymentNotInitialized);return this._clearpaySdk.initialize({countryCode:t}),this._clearpaySdk.redirect({token:n.clientToken}),Promise.resolve()})}_isCountrySupported(t){return\"GB\"===t}_loadPaymentMethod(t,n,e){var r;return d(this,void 0,void 0,function*(){try{return yield this._paymentIntegrationService.loadPaymentMethod(t,Object.assign(Object.assign({},e),{params:Object.assign(Object.assign({},null==e?void 0:e.params),{method:n})}))}catch(t){if(t instanceof h&&422===(null===(r=t.body)||void 0===r?void 0:r.status))throw new u(\"Clearpay can't process your payment for this order, please try another payment method\");throw t}})}}class _ extends o{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class y{constructor(t,n=window){this._scriptLoader=t,this._window=n}load(t,n={}){return e=this,r=void 0,o=function*(){if(yield this._scriptLoader.loadScript(this._getScriptUrl(t.config.testMode,n)),!this._window.AfterPay)throw new _;return this._window.AfterPay},new((i=void 0)||(i=Promise))(function(t,n){function u(t){try{c(o.next(t))}catch(t){n(t)}}function a(t){try{c(o.throw(t))}catch(t){n(t)}}function c(n){var e;n.done?t(n.value):(e=n.value,e instanceof i?e:new i(function(t){t(e)})).then(u,a)}c((o=o.apply(e,r||[])).next())});var e,r,i,o}_getScriptUrl(t,n={}){const e=function(t,n,e=!0){var r;return null!==(r=t[\"PI-4555.clearpay_add_https_to_prod_script\"])&&void 0!==r?r:e}(n,0,!1);return t?e?\"https://portal.sandbox.clearpay.co.uk/afterpay-async.js\":\"//portal.sandbox.clearpay.co.uk/afterpay-async.js\":e?\"https://portal.clearpay.co.uk/afterpay-async.js\":\"//portal.clearpay.co.uk/afterpay-async.js\"}}const g=Object.assign(t=>new v(t,new y((0,n.vQ)())),{resolveIds:[{gateway:\"clearpay\"},{id:\"clearpay\"}]})})(),module.exports=r})();\n//# sourceMappingURL=clearpay.js.map"
  },
  {
    "path": "dist/cjs/integrations/credit-card.js",
    "content": "(()=>{var n={9440(n,t,r){n=r.nmd(n),function(){var e,u=\"Expected a function\",i=\"__lodash_hash_undefined__\",o=\"__lodash_placeholder__\",a=32,f=128,c=1/0,l=9007199254740991,s=NaN,h=4294967295,p=[[\"ary\",f],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],v=\"[object Arguments]\",_=\"[object Array]\",g=\"[object Boolean]\",d=\"[object Date]\",y=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",x=\"[object Number]\",j=\"[object Object]\",I=\"[object Promise]\",A=\"[object RegExp]\",O=\"[object Set]\",z=\"[object String]\",S=\"[object Symbol]\",k=\"[object WeakMap]\",E=\"[object ArrayBuffer]\",R=\"[object DataView]\",C=\"[object Float32Array]\",P=\"[object Float64Array]\",W=\"[object Int8Array]\",F=\"[object Int16Array]\",T=\"[object Int32Array]\",U=\"[object Uint8Array]\",L=\"[object Uint8ClampedArray]\",N=\"[object Uint16Array]\",B=\"[object Uint32Array]\",D=/\\b__p \\+= '';/g,$=/\\b(__p \\+=) '' \\+/g,M=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,q=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,Z=RegExp(q.source),K=RegExp(H.source),V=/<%-([\\s\\S]+?)%>/g,G=/<%([\\s\\S]+?)%>/g,J=/<%=([\\s\\S]+?)%>/g,Y=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,nn=/[\\\\^$.*+?()[\\]{}|]/g,tn=RegExp(nn.source),rn=/^\\s+/,en=/\\s/,un=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,on=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,an=/,? & /,fn=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,cn=/[()=,{}\\[\\]\\/\\s]/,ln=/\\\\(\\\\)?/g,sn=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,hn=/\\w*$/,pn=/^[-+]0x[0-9a-f]+$/i,vn=/^0b[01]+$/i,_n=/^\\[object .+?Constructor\\]$/,gn=/^0o[0-7]+$/i,dn=/^(?:0|[1-9]\\d*)$/,yn=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,mn=/($^)/,bn=/['\\n\\r\\u2028\\u2029\\\\]/g,wn=\"\\\\ud800-\\\\udfff\",xn=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",jn=\"\\\\u2700-\\\\u27bf\",In=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",An=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",On=\"\\\\ufe0e\\\\ufe0f\",zn=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Sn=\"[\"+wn+\"]\",kn=\"[\"+zn+\"]\",En=\"[\"+xn+\"]\",Rn=\"\\\\d+\",Cn=\"[\"+jn+\"]\",Pn=\"[\"+In+\"]\",Wn=\"[^\"+wn+zn+Rn+jn+In+An+\"]\",Fn=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Tn=\"[^\"+wn+\"]\",Un=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ln=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Nn=\"[\"+An+\"]\",Bn=\"\\\\u200d\",Dn=\"(?:\"+Pn+\"|\"+Wn+\")\",$n=\"(?:\"+Nn+\"|\"+Wn+\")\",Mn=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",qn=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Hn=\"(?:\"+En+\"|\"+Fn+\")?\",Zn=\"[\"+On+\"]?\",Kn=Zn+Hn+\"(?:\"+Bn+\"(?:\"+[Tn,Un,Ln].join(\"|\")+\")\"+Zn+Hn+\")*\",Vn=\"(?:\"+[Cn,Un,Ln].join(\"|\")+\")\"+Kn,Gn=\"(?:\"+[Tn+En+\"?\",En,Un,Ln,Sn].join(\"|\")+\")\",Jn=RegExp(\"['’]\",\"g\"),Yn=RegExp(En,\"g\"),Qn=RegExp(Fn+\"(?=\"+Fn+\")|\"+Gn+Kn,\"g\"),Xn=RegExp([Nn+\"?\"+Pn+\"+\"+Mn+\"(?=\"+[kn,Nn,\"$\"].join(\"|\")+\")\",$n+\"+\"+qn+\"(?=\"+[kn,Nn+Dn,\"$\"].join(\"|\")+\")\",Nn+\"?\"+Dn+\"+\"+Mn,Nn+\"+\"+qn,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Rn,Vn].join(\"|\"),\"g\"),nt=RegExp(\"[\"+Bn+wn+xn+On+\"]\"),tt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,rt=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],et=-1,ut={};ut[C]=ut[P]=ut[W]=ut[F]=ut[T]=ut[U]=ut[L]=ut[N]=ut[B]=!0,ut[v]=ut[_]=ut[E]=ut[g]=ut[R]=ut[d]=ut[y]=ut[m]=ut[w]=ut[x]=ut[j]=ut[A]=ut[O]=ut[z]=ut[k]=!1;var it={};it[v]=it[_]=it[E]=it[R]=it[g]=it[d]=it[C]=it[P]=it[W]=it[F]=it[T]=it[w]=it[x]=it[j]=it[A]=it[O]=it[z]=it[S]=it[U]=it[L]=it[N]=it[B]=!0,it[y]=it[m]=it[k]=!1;var ot={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},at=parseFloat,ft=parseInt,ct=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,lt=\"object\"==typeof self&&self&&self.Object===Object&&self,st=ct||lt||Function(\"return this\")(),ht=t&&!t.nodeType&&t,pt=ht&&n&&!n.nodeType&&n,vt=pt&&pt.exports===ht,_t=vt&&ct.process,gt=function(){try{return pt&&pt.require&&pt.require(\"util\").types||_t&&_t.binding&&_t.binding(\"util\")}catch(n){}}(),dt=gt&&gt.isArrayBuffer,yt=gt&&gt.isDate,mt=gt&&gt.isMap,bt=gt&&gt.isRegExp,wt=gt&&gt.isSet,xt=gt&&gt.isTypedArray;function jt(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function It(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function At(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&!1!==t(n[r],r,n););return n}function Ot(n,t){for(var r=null==n?0:n.length;r--&&!1!==t(n[r],r,n););return n}function zt(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return!1;return!0}function St(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function kt(n,t){return!(null==n||!n.length)&&Nt(n,t,0)>-1}function Et(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return!0;return!1}function Rt(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function Ct(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function Pt(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);return r}function Wt(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function Ft(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return!0;return!1}var Tt=Mt(\"length\");function Ut(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,!1}),e}function Lt(n,t,r,e){for(var u=n.length,i=r+(e?1:-1);e?i--:++i<u;)if(t(n[i],i,n))return i;return-1}function Nt(n,t,r){return t==t?function(n,t,r){for(var e=r-1,u=n.length;++e<u;)if(n[e]===t)return e;return-1}(n,t,r):Lt(n,Dt,r)}function Bt(n,t,r,e){for(var u=r-1,i=n.length;++u<i;)if(e(n[u],t))return u;return-1}function Dt(n){return n!=n}function $t(n,t){var r=null==n?0:n.length;return r?Zt(n,t)/r:s}function Mt(n){return function(t){return null==t?e:t[n]}}function qt(n){return function(t){return null==n?e:n[t]}}function Ht(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=!1,n):t(r,n,u,i)}),r}function Zt(n,t){for(var r,u=-1,i=n.length;++u<i;){var o=t(n[u]);o!==e&&(r=r===e?o:r+o)}return r}function Kt(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function Vt(n){return n?n.slice(0,sr(n)+1).replace(rn,\"\"):n}function Gt(n){return function(t){return n(t)}}function Jt(n,t){return Rt(t,function(t){return n[t]})}function Yt(n,t){return n.has(t)}function Qt(n,t){for(var r=-1,e=n.length;++r<e&&Nt(t,n[r],0)>-1;);return r}function Xt(n,t){for(var r=n.length;r--&&Nt(t,n[r],0)>-1;);return r}var nr=qt({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tr=qt({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function rr(n){return\"\\\\\"+ot[n]}function er(n){return nt.test(n)}function ur(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function ir(n,t){return function(r){return n(t(r))}}function or(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var a=n[r];a!==t&&a!==o||(n[r]=o,i[u++]=r)}return i}function ar(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=n}),r}function fr(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function cr(n){return er(n)?function(n){for(var t=Qn.lastIndex=0;Qn.test(n);)++t;return t}(n):Tt(n)}function lr(n){return er(n)?function(n){return n.match(Qn)||[]}(n):function(n){return n.split(\"\")}(n)}function sr(n){for(var t=n.length;t--&&en.test(n.charAt(t)););return t}var hr=qt({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pr=function n(t){var r,en=(t=null==t?st:pr.defaults(st.Object(),t,pr.pick(st,rt))).Array,wn=t.Date,xn=t.Error,jn=t.Function,In=t.Math,An=t.Object,On=t.RegExp,zn=t.String,Sn=t.TypeError,kn=en.prototype,En=jn.prototype,Rn=An.prototype,Cn=t[\"__core-js_shared__\"],Pn=En.toString,Wn=Rn.hasOwnProperty,Fn=0,Tn=(r=/[^.]+$/.exec(Cn&&Cn.keys&&Cn.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",Un=Rn.toString,Ln=Pn.call(An),Nn=st._,Bn=On(\"^\"+Pn.call(Wn).replace(nn,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Dn=vt?t.Buffer:e,$n=t.Symbol,Mn=t.Uint8Array,qn=Dn?Dn.allocUnsafe:e,Hn=ir(An.getPrototypeOf,An),Zn=An.create,Kn=Rn.propertyIsEnumerable,Vn=kn.splice,Gn=$n?$n.isConcatSpreadable:e,Qn=$n?$n.iterator:e,nt=$n?$n.toStringTag:e,ot=function(){try{var n=fi(An,\"defineProperty\");return n({},\"\",{}),n}catch(n){}}(),ct=t.clearTimeout!==st.clearTimeout&&t.clearTimeout,lt=wn&&wn.now!==st.Date.now&&wn.now,ht=t.setTimeout!==st.setTimeout&&t.setTimeout,pt=In.ceil,_t=In.floor,gt=An.getOwnPropertySymbols,Tt=Dn?Dn.isBuffer:e,qt=t.isFinite,vr=kn.join,_r=ir(An.keys,An),gr=In.max,dr=In.min,yr=wn.now,mr=t.parseInt,br=In.random,wr=kn.reverse,xr=fi(t,\"DataView\"),jr=fi(t,\"Map\"),Ir=fi(t,\"Promise\"),Ar=fi(t,\"Set\"),Or=fi(t,\"WeakMap\"),zr=fi(An,\"create\"),Sr=Or&&new Or,kr={},Er=Ti(xr),Rr=Ti(jr),Cr=Ti(Ir),Pr=Ti(Ar),Wr=Ti(Or),Fr=$n?$n.prototype:e,Tr=Fr?Fr.valueOf:e,Ur=Fr?Fr.toString:e;function Lr(n){if(na(n)&&!Mo(n)&&!(n instanceof $r)){if(n instanceof Dr)return n;if(Wn.call(n,\"__wrapped__\"))return Ui(n)}return new Dr(n)}var Nr=function(){function n(){}return function(t){if(!Xo(t))return{};if(Zn)return Zn(t);n.prototype=t;var r=new n;return n.prototype=e,r}}();function Br(){}function Dr(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=e}function $r(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function Mr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function qr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Hr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Zr(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new Hr;++t<r;)this.add(n[t])}function Kr(n){var t=this.__data__=new qr(n);this.size=t.size}function Vr(n,t){var r=Mo(n),e=!r&&$o(n),u=!r&&!e&&Ko(n),i=!r&&!e&&!u&&fa(n),o=r||e||u||i,a=o?Kt(n.length,zn):[],f=a.length;for(var c in n)!t&&!Wn.call(n,c)||o&&(\"length\"==c||u&&(\"offset\"==c||\"parent\"==c)||i&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||_i(c,f))||a.push(c);return a}function Gr(n){var t=n.length;return t?n[He(0,t-1)]:e}function Jr(n,t){return Ri(Ou(n),ie(t,0,n.length))}function Yr(n){return Ri(Ou(n))}function Qr(n,t,r){(r!==e&&!No(n[t],r)||r===e&&!(t in n))&&ee(n,t,r)}function Xr(n,t,r){var u=n[t];Wn.call(n,t)&&No(u,r)&&(r!==e||t in n)||ee(n,t,r)}function ne(n,t){for(var r=n.length;r--;)if(No(n[r][0],t))return r;return-1}function te(n,t,r,e){return le(n,function(n,u,i){t(e,n,r(n),i)}),e}function re(n,t){return n&&zu(t,Ea(t),n)}function ee(n,t,r){\"__proto__\"==t&&ot?ot(n,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):n[t]=r}function ue(n,t){for(var r=-1,u=t.length,i=en(u),o=null==n;++r<u;)i[r]=o?e:Aa(n,t[r]);return i}function ie(n,t,r){return n==n&&(r!==e&&(n=n<=r?n:r),t!==e&&(n=n>=t?n:t)),n}function oe(n,t,r,u,i,o){var a,f=1&t,c=2&t,l=4&t;if(r&&(a=i?r(n,u,i,o):r(n)),a!==e)return a;if(!Xo(n))return n;var s=Mo(n);if(s){if(a=function(n){var t=n.length,r=new n.constructor(t);return t&&\"string\"==typeof n[0]&&Wn.call(n,\"index\")&&(r.index=n.index,r.input=n.input),r}(n),!f)return Ou(n,a)}else{var h=si(n),p=h==m||h==b;if(Ko(n))return bu(n,f);if(h==j||h==v||p&&!i){if(a=c||p?{}:pi(n),!f)return c?function(n,t){return zu(n,li(n),t)}(n,function(n,t){return n&&zu(t,Ra(t),n)}(a,n)):function(n,t){return zu(n,ci(n),t)}(n,re(a,n))}else{if(!it[h])return i?n:{};a=function(n,t,r){var e,u=n.constructor;switch(t){case E:return wu(n);case g:case d:return new u(+n);case R:return function(n,t){var r=t?wu(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.byteLength)}(n,r);case C:case P:case W:case F:case T:case U:case L:case N:case B:return xu(n,r);case w:return new u;case x:case z:return new u(n);case A:return function(n){var t=new n.constructor(n.source,hn.exec(n));return t.lastIndex=n.lastIndex,t}(n);case O:return new u;case S:return e=n,Tr?An(Tr.call(e)):{}}}(n,h,f)}}o||(o=new Kr);var _=o.get(n);if(_)return _;o.set(n,a),ia(n)?n.forEach(function(e){a.add(oe(e,t,r,e,n,o))}):ta(n)&&n.forEach(function(e,u){a.set(u,oe(e,t,r,u,n,o))});var y=s?e:(l?c?ti:ni:c?Ra:Ea)(n);return At(y||n,function(e,u){y&&(e=n[u=e]),Xr(a,u,oe(e,t,r,u,n,o))}),a}function ae(n,t,r){var u=r.length;if(null==n)return!u;for(n=An(n);u--;){var i=r[u],o=t[i],a=n[i];if(a===e&&!(i in n)||!o(a))return!1}return!0}function fe(n,t,r){if(\"function\"!=typeof n)throw new Sn(u);return zi(function(){n.apply(e,r)},t)}function ce(n,t,r,e){var u=-1,i=kt,o=!0,a=n.length,f=[],c=t.length;if(!a)return f;r&&(t=Rt(t,Gt(r))),e?(i=Et,o=!1):t.length>=200&&(i=Yt,o=!1,t=new Zr(t));n:for(;++u<a;){var l=n[u],s=null==r?l:r(l);if(l=e||0!==l?l:0,o&&s==s){for(var h=c;h--;)if(t[h]===s)continue n;f.push(l)}else i(t,s,e)||f.push(l)}return f}Lr.templateSettings={escape:V,evaluate:G,interpolate:J,variable:\"\",imports:{_:Lr}},Lr.prototype=Br.prototype,Lr.prototype.constructor=Lr,Dr.prototype=Nr(Br.prototype),Dr.prototype.constructor=Dr,$r.prototype=Nr(Br.prototype),$r.prototype.constructor=$r,Mr.prototype.clear=function(){this.__data__=zr?zr(null):{},this.size=0},Mr.prototype.delete=function(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t},Mr.prototype.get=function(n){var t=this.__data__;if(zr){var r=t[n];return r===i?e:r}return Wn.call(t,n)?t[n]:e},Mr.prototype.has=function(n){var t=this.__data__;return zr?t[n]!==e:Wn.call(t,n)},Mr.prototype.set=function(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=zr&&t===e?i:t,this},qr.prototype.clear=function(){this.__data__=[],this.size=0},qr.prototype.delete=function(n){var t=this.__data__,r=ne(t,n);return!(r<0||(r==t.length-1?t.pop():Vn.call(t,r,1),--this.size,0))},qr.prototype.get=function(n){var t=this.__data__,r=ne(t,n);return r<0?e:t[r][1]},qr.prototype.has=function(n){return ne(this.__data__,n)>-1},qr.prototype.set=function(n,t){var r=this.__data__,e=ne(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this},Hr.prototype.clear=function(){this.size=0,this.__data__={hash:new Mr,map:new(jr||qr),string:new Mr}},Hr.prototype.delete=function(n){var t=oi(this,n).delete(n);return this.size-=t?1:0,t},Hr.prototype.get=function(n){return oi(this,n).get(n)},Hr.prototype.has=function(n){return oi(this,n).has(n)},Hr.prototype.set=function(n,t){var r=oi(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},Zr.prototype.add=Zr.prototype.push=function(n){return this.__data__.set(n,i),this},Zr.prototype.has=function(n){return this.__data__.has(n)},Kr.prototype.clear=function(){this.__data__=new qr,this.size=0},Kr.prototype.delete=function(n){var t=this.__data__,r=t.delete(n);return this.size=t.size,r},Kr.prototype.get=function(n){return this.__data__.get(n)},Kr.prototype.has=function(n){return this.__data__.has(n)},Kr.prototype.set=function(n,t){var r=this.__data__;if(r instanceof qr){var e=r.__data__;if(!jr||e.length<199)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new Hr(e)}return r.set(n,t),this.size=r.size,this};var le=Eu(ye),se=Eu(me,!0);function he(n,t){var r=!0;return le(n,function(n,e,u){return r=!!t(n,e,u)}),r}function pe(n,t,r){for(var u=-1,i=n.length;++u<i;){var o=n[u],a=t(o);if(null!=a&&(f===e?a==a&&!aa(a):r(a,f)))var f=a,c=o}return c}function ve(n,t){var r=[];return le(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function _e(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=vi),u||(u=[]);++i<o;){var a=n[i];t>0&&r(a)?t>1?_e(a,t-1,r,e,u):Ct(u,a):e||(u[u.length]=a)}return u}var ge=Ru(),de=Ru(!0);function ye(n,t){return n&&ge(n,t,Ea)}function me(n,t){return n&&de(n,t,Ea)}function be(n,t){return St(t,function(t){return Jo(n[t])})}function we(n,t){for(var r=0,u=(t=gu(t,n)).length;null!=n&&r<u;)n=n[Fi(t[r++])];return r&&r==u?n:e}function xe(n,t,r){var e=t(n);return Mo(n)?e:Ct(e,r(n))}function je(n){return null==n?n===e?\"[object Undefined]\":\"[object Null]\":nt&&nt in An(n)?function(n){var t=Wn.call(n,nt),r=n[nt];try{n[nt]=e;var u=!0}catch(n){}var i=Un.call(n);return u&&(t?n[nt]=r:delete n[nt]),i}(n):function(n){return Un.call(n)}(n)}function Ie(n,t){return n>t}function Ae(n,t){return null!=n&&Wn.call(n,t)}function Oe(n,t){return null!=n&&t in An(n)}function ze(n,t,r){for(var u=r?Et:kt,i=n[0].length,o=n.length,a=o,f=en(o),c=1/0,l=[];a--;){var s=n[a];a&&t&&(s=Rt(s,Gt(t))),c=dr(s.length,c),f[a]=!r&&(t||i>=120&&s.length>=120)?new Zr(a&&s):e}s=n[0];var h=-1,p=f[0];n:for(;++h<i&&l.length<c;){var v=s[h],_=t?t(v):v;if(v=r||0!==v?v:0,!(p?Yt(p,_):u(l,_,r))){for(a=o;--a;){var g=f[a];if(!(g?Yt(g,_):u(n[a],_,r)))continue n}p&&p.push(_),l.push(v)}}return l}function Se(n,t,r){var u=null==(n=Ii(n,t=gu(t,n)))?n:n[Fi(Vi(t))];return null==u?e:jt(u,n,r)}function ke(n){return na(n)&&je(n)==v}function Ee(n,t,r,u,i){return n===t||(null==n||null==t||!na(n)&&!na(t)?n!=n&&t!=t:function(n,t,r,u,i,o){var a=Mo(n),f=Mo(t),c=a?_:si(n),l=f?_:si(t),s=(c=c==v?j:c)==j,h=(l=l==v?j:l)==j,p=c==l;if(p&&Ko(n)){if(!Ko(t))return!1;a=!0,s=!1}if(p&&!s)return o||(o=new Kr),a||fa(n)?Qu(n,t,r,u,i,o):function(n,t,r,e,u,i,o){switch(r){case R:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1;n=n.buffer,t=t.buffer;case E:return!(n.byteLength!=t.byteLength||!i(new Mn(n),new Mn(t)));case g:case d:case x:return No(+n,+t);case y:return n.name==t.name&&n.message==t.message;case A:case z:return n==t+\"\";case w:var a=ur;case O:var f=1&e;if(a||(a=ar),n.size!=t.size&&!f)return!1;var c=o.get(n);if(c)return c==t;e|=2,o.set(n,t);var l=Qu(a(n),a(t),e,u,i,o);return o.delete(n),l;case S:if(Tr)return Tr.call(n)==Tr.call(t)}return!1}(n,t,c,r,u,i,o);if(!(1&r)){var m=s&&Wn.call(n,\"__wrapped__\"),b=h&&Wn.call(t,\"__wrapped__\");if(m||b){var I=m?n.value():n,k=b?t.value():t;return o||(o=new Kr),i(I,k,r,u,o)}}return!!p&&(o||(o=new Kr),function(n,t,r,u,i,o){var a=1&r,f=ni(n),c=f.length;if(c!=ni(t).length&&!a)return!1;for(var l=c;l--;){var s=f[l];if(!(a?s in t:Wn.call(t,s)))return!1}var h=o.get(n),p=o.get(t);if(h&&p)return h==t&&p==n;var v=!0;o.set(n,t),o.set(t,n);for(var _=a;++l<c;){var g=n[s=f[l]],d=t[s];if(u)var y=a?u(d,g,s,t,n,o):u(g,d,s,n,t,o);if(!(y===e?g===d||i(g,d,r,u,o):y)){v=!1;break}_||(_=\"constructor\"==s)}if(v&&!_){var m=n.constructor,b=t.constructor;m==b||!(\"constructor\"in n)||!(\"constructor\"in t)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(v=!1)}return o.delete(n),o.delete(t),v}(n,t,r,u,i,o))}(n,t,r,u,Ee,i))}function Re(n,t,r,u){var i=r.length,o=i,a=!u;if(null==n)return!o;for(n=An(n);i--;){var f=r[i];if(a&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++i<o;){var c=(f=r[i])[0],l=n[c],s=f[1];if(a&&f[2]){if(l===e&&!(c in n))return!1}else{var h=new Kr;if(u)var p=u(l,s,c,n,t,h);if(!(p===e?Ee(s,l,3,u,h):p))return!1}}return!0}function Ce(n){return!(!Xo(n)||(t=n,Tn&&Tn in t))&&(Jo(n)?Bn:_n).test(Ti(n));var t}function Pe(n){return\"function\"==typeof n?n:null==n?rf:\"object\"==typeof n?Mo(n)?Le(n[0],n[1]):Ue(n):hf(n)}function We(n){if(!bi(n))return _r(n);var t=[];for(var r in An(n))Wn.call(n,r)&&\"constructor\"!=r&&t.push(r);return t}function Fe(n,t){return n<t}function Te(n,t){var r=-1,e=Ho(n)?en(n.length):[];return le(n,function(n,u,i){e[++r]=t(n,u,i)}),e}function Ue(n){var t=ai(n);return 1==t.length&&t[0][2]?xi(t[0][0],t[0][1]):function(r){return r===n||Re(r,n,t)}}function Le(n,t){return di(n)&&wi(t)?xi(Fi(n),t):function(r){var u=Aa(r,n);return u===e&&u===t?Oa(r,n):Ee(t,u,3)}}function Ne(n,t,r,u,i){n!==t&&ge(t,function(o,a){if(i||(i=new Kr),Xo(o))!function(n,t,r,u,i,o,a){var f=Ai(n,r),c=Ai(t,r),l=a.get(c);if(l)Qr(n,r,l);else{var s=o?o(f,c,r+\"\",n,t,a):e,h=s===e;if(h){var p=Mo(c),v=!p&&Ko(c),_=!p&&!v&&fa(c);s=c,p||v||_?Mo(f)?s=f:Zo(f)?s=Ou(f):v?(h=!1,s=bu(c,!0)):_?(h=!1,s=xu(c,!0)):s=[]:ea(c)||$o(c)?(s=f,$o(f)?s=ga(f):Xo(f)&&!Jo(f)||(s=pi(c))):h=!1}h&&(a.set(c,s),i(s,c,u,o,a),a.delete(c)),Qr(n,r,s)}}(n,t,a,r,Ne,u,i);else{var f=u?u(Ai(n,a),o,a+\"\",n,t,i):e;f===e&&(f=o),Qr(n,a,f)}},Ra)}function Be(n,t){var r=n.length;if(r)return _i(t+=t<0?r:0,r)?n[t]:e}function De(n,t,r){t=t.length?Rt(t,function(n){return Mo(n)?function(t){return we(t,1===n.length?n[0]:n)}:n}):[rf];var e=-1;t=Rt(t,Gt(ii()));var u=Te(n,function(n,r,u){var i=Rt(t,function(t){return t(n)});return{criteria:i,index:++e,value:n}});return function(n){var t=n.length;for(n.sort(function(n,t){return function(n,t,r){for(var e=-1,u=n.criteria,i=t.criteria,o=u.length,a=r.length;++e<o;){var f=ju(u[e],i[e]);if(f)return e>=a?f:f*(\"desc\"==r[e]?-1:1)}return n.index-t.index}(n,t,r)});t--;)n[t]=n[t].value;return n}(u)}function $e(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],a=we(n,o);r(a,o)&&Je(i,gu(o,n),a)}return i}function Me(n,t,r,e){var u=e?Bt:Nt,i=-1,o=t.length,a=n;for(n===t&&(t=Ou(t)),r&&(a=Rt(n,Gt(r)));++i<o;)for(var f=0,c=t[i],l=r?r(c):c;(f=u(a,l,f,e))>-1;)a!==n&&Vn.call(a,f,1),Vn.call(n,f,1);return n}function qe(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(r==e||u!==i){var i=u;_i(u)?Vn.call(n,u,1):fu(n,u)}}return n}function He(n,t){return n+_t(br()*(t-n+1))}function Ze(n,t){var r=\"\";if(!n||t<1||t>l)return r;do{t%2&&(r+=n),(t=_t(t/2))&&(n+=n)}while(t);return r}function Ke(n,t){return Si(ji(n,t,rf),n+\"\")}function Ve(n){return Gr(Na(n))}function Ge(n,t){var r=Na(n);return Ri(r,ie(t,0,r.length))}function Je(n,t,r,u){if(!Xo(n))return n;for(var i=-1,o=(t=gu(t,n)).length,a=o-1,f=n;null!=f&&++i<o;){var c=Fi(t[i]),l=r;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return n;if(i!=a){var s=f[c];(l=u?u(s,c,f):e)===e&&(l=Xo(s)?s:_i(t[i+1])?[]:{})}Xr(f,c,l),f=f[c]}return n}var Ye=Sr?function(n,t){return Sr.set(n,t),n}:rf,Qe=ot?function(n,t){return ot(n,\"toString\",{configurable:!0,enumerable:!1,value:Xa(t),writable:!0})}:rf;function Xe(n){return Ri(Na(n))}function nu(n,t,r){var e=-1,u=n.length;t<0&&(t=-t>u?0:u+t),(r=r>u?u:r)<0&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0;for(var i=en(u);++e<u;)i[e]=n[e+t];return i}function tu(n,t){var r;return le(n,function(n,e,u){return!(r=t(n,e,u))}),!!r}function ru(n,t,r){var e=0,u=null==n?e:n.length;if(\"number\"==typeof t&&t==t&&u<=2147483647){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!aa(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return eu(n,t,rf,r)}function eu(n,t,r,u){var i=0,o=null==n?0:n.length;if(0===o)return 0;for(var a=(t=r(t))!=t,f=null===t,c=aa(t),l=t===e;i<o;){var s=_t((i+o)/2),h=r(n[s]),p=h!==e,v=null===h,_=h==h,g=aa(h);if(a)var d=u||_;else d=l?_&&(u||p):f?_&&p&&(u||!v):c?_&&p&&!v&&(u||!g):!v&&!g&&(u?h<=t:h<t);d?i=s+1:o=s}return dr(o,4294967294)}function uu(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r],a=t?t(o):o;if(!r||!No(a,f)){var f=a;i[u++]=0===o?0:o}}return i}function iu(n){return\"number\"==typeof n?n:aa(n)?s:+n}function ou(n){if(\"string\"==typeof n)return n;if(Mo(n))return Rt(n,ou)+\"\";if(aa(n))return Ur?Ur.call(n):\"\";var t=n+\"\";return\"0\"==t&&1/n==-1/0?\"-0\":t}function au(n,t,r){var e=-1,u=kt,i=n.length,o=!0,a=[],f=a;if(r)o=!1,u=Et;else if(i>=200){var c=t?null:Zu(n);if(c)return ar(c);o=!1,u=Yt,f=new Zr}else f=t?[]:a;n:for(;++e<i;){var l=n[e],s=t?t(l):l;if(l=r||0!==l?l:0,o&&s==s){for(var h=f.length;h--;)if(f[h]===s)continue n;t&&f.push(s),a.push(l)}else u(f,s,r)||(f!==a&&f.push(s),a.push(l))}return a}function fu(n,t){var r=-1,e=(t=gu(t,n)).length;if(!e)return!0;for(;++r<e;){var u=Fi(t[r]);if(\"__proto__\"===u&&!Wn.call(n,\"__proto__\"))return!1;if((\"constructor\"===u||\"prototype\"===u)&&r<e-1)return!1}var i=Ii(n,t);return null==i||delete i[Fi(Vi(t))]}function cu(n,t,r,e){return Je(n,t,r(we(n,t)),e)}function lu(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?nu(n,e?0:i,e?i+1:u):nu(n,e?i+1:0,e?u:i)}function su(n,t){var r=n;return r instanceof $r&&(r=r.value()),Pt(t,function(n,t){return t.func.apply(t.thisArg,Ct([n],t.args))},r)}function hu(n,t,r){var e=n.length;if(e<2)return e?au(n[0]):[];for(var u=-1,i=en(e);++u<e;)for(var o=n[u],a=-1;++a<e;)a!=u&&(i[u]=ce(i[u]||o,n[a],t,r));return au(_e(i,1),t,r)}function pu(n,t,r){for(var u=-1,i=n.length,o=t.length,a={};++u<i;){var f=u<o?t[u]:e;r(a,n[u],f)}return a}function vu(n){return Zo(n)?n:[]}function _u(n){return\"function\"==typeof n?n:rf}function gu(n,t){return Mo(n)?n:di(n,t)?[n]:Wi(da(n))}var du=Ke;function yu(n,t,r){var u=n.length;return r=r===e?u:r,!t&&r>=u?n:nu(n,t,r)}var mu=ct||function(n){return st.clearTimeout(n)};function bu(n,t){if(t)return n.slice();var r=n.length,e=qn?qn(r):new n.constructor(r);return n.copy(e),e}function wu(n){var t=new n.constructor(n.byteLength);return new Mn(t).set(new Mn(n)),t}function xu(n,t){var r=t?wu(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.length)}function ju(n,t){if(n!==t){var r=n!==e,u=null===n,i=n==n,o=aa(n),a=t!==e,f=null===t,c=t==t,l=aa(t);if(!f&&!l&&!o&&n>t||o&&a&&c&&!f&&!l||u&&a&&c||!r&&c||!i)return 1;if(!u&&!o&&!l&&n<t||l&&r&&i&&!u&&!o||f&&r&&i||!a&&i||!c)return-1}return 0}function Iu(n,t,r,e){for(var u=-1,i=n.length,o=r.length,a=-1,f=t.length,c=gr(i-o,0),l=en(f+c),s=!e;++a<f;)l[a]=t[a];for(;++u<o;)(s||u<i)&&(l[r[u]]=n[u]);for(;c--;)l[a++]=n[u++];return l}function Au(n,t,r,e){for(var u=-1,i=n.length,o=-1,a=r.length,f=-1,c=t.length,l=gr(i-a,0),s=en(l+c),h=!e;++u<l;)s[u]=n[u];for(var p=u;++f<c;)s[p+f]=t[f];for(;++o<a;)(h||u<i)&&(s[p+r[o]]=n[u++]);return s}function Ou(n,t){var r=-1,e=n.length;for(t||(t=en(e));++r<e;)t[r]=n[r];return t}function zu(n,t,r,u){var i=!r;r||(r={});for(var o=-1,a=t.length;++o<a;){var f=t[o],c=u?u(r[f],n[f],f,r,n):e;c===e&&(c=n[f]),i?ee(r,f,c):Xr(r,f,c)}return r}function Su(n,t){return function(r,e){var u=Mo(r)?It:te,i=t?t():{};return u(r,n,ii(e,2),i)}}function ku(n){return Ke(function(t,r){var u=-1,i=r.length,o=i>1?r[i-1]:e,a=i>2?r[2]:e;for(o=n.length>3&&\"function\"==typeof o?(i--,o):e,a&&gi(r[0],r[1],a)&&(o=i<3?e:o,i=1),t=An(t);++u<i;){var f=r[u];f&&n(t,f,u,o)}return t})}function Eu(n,t){return function(r,e){if(null==r)return r;if(!Ho(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=An(r);(t?i--:++i<u)&&!1!==e(o[i],i,o););return r}}function Ru(n){return function(t,r,e){for(var u=-1,i=An(t),o=e(t),a=o.length;a--;){var f=o[n?a:++u];if(!1===r(i[f],f,i))break}return t}}function Cu(n){return function(t){var r=er(t=da(t))?lr(t):e,u=r?r[0]:t.charAt(0),i=r?yu(r,1).join(\"\"):t.slice(1);return u[n]()+i}}function Pu(n){return function(t){return Pt(Ja($a(t).replace(Jn,\"\")),n,\"\")}}function Wu(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=Nr(n.prototype),e=n.apply(r,t);return Xo(e)?e:r}}function Fu(n){return function(t,r,u){var i=An(t);if(!Ho(t)){var o=ii(r,3);t=Ea(t),r=function(n){return o(i[n],n,i)}}var a=n(t,r,u);return a>-1?i[o?t[a]:a]:e}}function Tu(n){return Xu(function(t){var r=t.length,i=r,o=Dr.prototype.thru;for(n&&t.reverse();i--;){var a=t[i];if(\"function\"!=typeof a)throw new Sn(u);if(o&&!f&&\"wrapper\"==ei(a))var f=new Dr([],!0)}for(i=f?i:r;++i<r;){var c=ei(a=t[i]),l=\"wrapper\"==c?ri(a):e;f=l&&yi(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?f[ei(l[0])].apply(f,l[3]):1==a.length&&yi(a)?f[c]():f.thru(a)}return function(){var n=arguments,e=n[0];if(f&&1==n.length&&Mo(e))return f.plant(e).value();for(var u=0,i=r?t[u].apply(this,n):e;++u<r;)i=t[u].call(this,i);return i}})}function Uu(n,t,r,u,i,o,a,c,l,s){var h=t&f,p=1&t,v=2&t,_=24&t,g=512&t,d=v?e:Wu(n);return function f(){for(var y=arguments.length,m=en(y),b=y;b--;)m[b]=arguments[b];if(_)var w=ui(f),x=function(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&++e;return e}(m,w);if(u&&(m=Iu(m,u,i,_)),o&&(m=Au(m,o,a,_)),y-=x,_&&y<s){var j=or(m,w);return qu(n,t,Uu,f.placeholder,r,m,j,c,l,s-y)}var I=p?r:this,A=v?I[n]:n;return y=m.length,c?m=function(n,t){for(var r=n.length,u=dr(t.length,r),i=Ou(n);u--;){var o=t[u];n[u]=_i(o,r)?i[o]:e}return n}(m,c):g&&y>1&&m.reverse(),h&&l<y&&(m.length=l),this&&this!==st&&this instanceof f&&(A=d||Wu(A)),A.apply(I,m)}}function Lu(n,t){return function(r,e){return function(n,t,r,e){return ye(n,function(n,u,i){t(e,r(n),u,i)}),e}(r,n,t(e),{})}}function Nu(n,t){return function(r,u){var i;if(r===e&&u===e)return t;if(r!==e&&(i=r),u!==e){if(i===e)return u;\"string\"==typeof r||\"string\"==typeof u?(r=ou(r),u=ou(u)):(r=iu(r),u=iu(u)),i=n(r,u)}return i}}function Bu(n){return Xu(function(t){return t=Rt(t,Gt(ii())),Ke(function(r){var e=this;return n(t,function(n){return jt(n,e,r)})})})}function Du(n,t){var r=(t=t===e?\" \":ou(t)).length;if(r<2)return r?Ze(t,n):t;var u=Ze(t,pt(n/cr(t)));return er(t)?yu(lr(u),0,n).join(\"\"):u.slice(0,n)}function $u(n){return function(t,r,u){return u&&\"number\"!=typeof u&&gi(t,r,u)&&(r=u=e),t=ha(t),r===e?(r=t,t=0):r=ha(r),function(n,t,r,e){for(var u=-1,i=gr(pt((t-n)/(r||1)),0),o=en(i);i--;)o[e?i:++u]=n,n+=r;return o}(t,r,u=u===e?t<r?1:-1:ha(u),n)}}function Mu(n){return function(t,r){return\"string\"==typeof t&&\"string\"==typeof r||(t=_a(t),r=_a(r)),n(t,r)}}function qu(n,t,r,u,i,o,f,c,l,s){var h=8&t;t|=h?a:64,4&(t&=~(h?64:a))||(t&=-4);var p=[n,t,i,h?o:e,h?f:e,h?e:o,h?e:f,c,l,s],v=r.apply(e,p);return yi(n)&&Oi(v,p),v.placeholder=u,ki(v,n,t)}function Hu(n){var t=In[n];return function(n,r){if(n=_a(n),(r=null==r?0:dr(pa(r),292))&&qt(n)){var e=(da(n)+\"e\").split(\"e\");return+((e=(da(t(e[0]+\"e\"+(+e[1]+r)))+\"e\").split(\"e\"))[0]+\"e\"+(+e[1]-r))}return t(n)}}var Zu=Ar&&1/ar(new Ar([,-0]))[1]==c?function(n){return new Ar(n)}:ff;function Ku(n){return function(t){var r=si(t);return r==w?ur(t):r==O?fr(t):function(n,t){return Rt(t,function(t){return[t,n[t]]})}(t,n(t))}}function Vu(n,t,r,i,c,l,s,h){var p=2&t;if(!p&&\"function\"!=typeof n)throw new Sn(u);var v=i?i.length:0;if(v||(t&=-97,i=c=e),s=s===e?s:gr(pa(s),0),h=h===e?h:pa(h),v-=c?c.length:0,64&t){var _=i,g=c;i=c=e}var d=p?e:ri(n),y=[n,t,r,i,c,_,g,l,s,h];if(d&&function(n,t){var r=n[1],e=t[1],u=r|e,i=u<131,a=e==f&&8==r||e==f&&256==r&&n[7].length<=t[8]||384==e&&t[7].length<=t[8]&&8==r;if(!i&&!a)return n;1&e&&(n[2]=t[2],u|=1&r?0:4);var c=t[3];if(c){var l=n[3];n[3]=l?Iu(l,c,t[4]):c,n[4]=l?or(n[3],o):t[4]}(c=t[5])&&(l=n[5],n[5]=l?Au(l,c,t[6]):c,n[6]=l?or(n[5],o):t[6]),(c=t[7])&&(n[7]=c),e&f&&(n[8]=null==n[8]?t[8]:dr(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=u}(y,d),n=y[0],t=y[1],r=y[2],i=y[3],c=y[4],!(h=y[9]=y[9]===e?p?0:n.length:gr(y[9]-v,0))&&24&t&&(t&=-25),t&&1!=t)m=8==t||16==t?function(n,t,r){var u=Wu(n);return function i(){for(var o=arguments.length,a=en(o),f=o,c=ui(i);f--;)a[f]=arguments[f];var l=o<3&&a[0]!==c&&a[o-1]!==c?[]:or(a,c);return(o-=l.length)<r?qu(n,t,Uu,i.placeholder,e,a,l,e,e,r-o):jt(this&&this!==st&&this instanceof i?u:n,this,a)}}(n,t,h):t!=a&&33!=t||c.length?Uu.apply(e,y):function(n,t,r,e){var u=1&t,i=Wu(n);return function t(){for(var o=-1,a=arguments.length,f=-1,c=e.length,l=en(c+a),s=this&&this!==st&&this instanceof t?i:n;++f<c;)l[f]=e[f];for(;a--;)l[f++]=arguments[++o];return jt(s,u?r:this,l)}}(n,t,r,i);else var m=function(n,t,r){var e=1&t,u=Wu(n);return function t(){return(this&&this!==st&&this instanceof t?u:n).apply(e?r:this,arguments)}}(n,t,r);return ki((d?Ye:Oi)(m,y),n,t)}function Gu(n,t,r,u){return n===e||No(n,Rn[r])&&!Wn.call(u,r)?t:n}function Ju(n,t,r,u,i,o){return Xo(n)&&Xo(t)&&(o.set(t,n),Ne(n,t,e,Ju,o),o.delete(t)),n}function Yu(n){return ea(n)?e:n}function Qu(n,t,r,u,i,o){var a=1&r,f=n.length,c=t.length;if(f!=c&&!(a&&c>f))return!1;var l=o.get(n),s=o.get(t);if(l&&s)return l==t&&s==n;var h=-1,p=!0,v=2&r?new Zr:e;for(o.set(n,t),o.set(t,n);++h<f;){var _=n[h],g=t[h];if(u)var d=a?u(g,_,h,t,n,o):u(_,g,h,n,t,o);if(d!==e){if(d)continue;p=!1;break}if(v){if(!Ft(t,function(n,t){if(!Yt(v,t)&&(_===n||i(_,n,r,u,o)))return v.push(t)})){p=!1;break}}else if(_!==g&&!i(_,g,r,u,o)){p=!1;break}}return o.delete(n),o.delete(t),p}function Xu(n){return Si(ji(n,e,Mi),n+\"\")}function ni(n){return xe(n,Ea,ci)}function ti(n){return xe(n,Ra,li)}var ri=Sr?function(n){return Sr.get(n)}:ff;function ei(n){for(var t=n.name+\"\",r=kr[t],e=Wn.call(kr,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function ui(n){return(Wn.call(Lr,\"placeholder\")?Lr:n).placeholder}function ii(){var n=Lr.iteratee||ef;return n=n===ef?Pe:n,arguments.length?n(arguments[0],arguments[1]):n}function oi(n,t){var r,e,u=n.__data__;return(\"string\"==(e=typeof(r=t))||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==r:null===r)?u[\"string\"==typeof t?\"string\":\"hash\"]:u.map}function ai(n){for(var t=Ea(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,wi(u)]}return t}function fi(n,t){var r=function(n,t){return null==n?e:n[t]}(n,t);return Ce(r)?r:e}var ci=gt?function(n){return null==n?[]:(n=An(n),St(gt(n),function(t){return Kn.call(n,t)}))}:_f,li=gt?function(n){for(var t=[];n;)Ct(t,ci(n)),n=Hn(n);return t}:_f,si=je;function hi(n,t,r){for(var e=-1,u=(t=gu(t,n)).length,i=!1;++e<u;){var o=Fi(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:!!(u=null==n?0:n.length)&&Qo(u)&&_i(o,u)&&(Mo(n)||$o(n))}function pi(n){return\"function\"!=typeof n.constructor||bi(n)?{}:Nr(Hn(n))}function vi(n){return Mo(n)||$o(n)||!!(Gn&&n&&n[Gn])}function _i(n,t){var r=typeof n;return!!(t=t??l)&&(\"number\"==r||\"symbol\"!=r&&dn.test(n))&&n>-1&&n%1==0&&n<t}function gi(n,t,r){if(!Xo(r))return!1;var e=typeof t;return!!(\"number\"==e?Ho(r)&&_i(t,r.length):\"string\"==e&&t in r)&&No(r[t],n)}function di(n,t){if(Mo(n))return!1;var r=typeof n;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=n&&!aa(n))||Q.test(n)||!Y.test(n)||null!=t&&n in An(t)}function yi(n){var t=ei(n),r=Lr[t];if(\"function\"!=typeof r||!(t in $r.prototype))return!1;if(n===r)return!0;var e=ri(r);return!!e&&n===e[0]}(xr&&si(new xr(new ArrayBuffer(1)))!=R||jr&&si(new jr)!=w||Ir&&si(Ir.resolve())!=I||Ar&&si(new Ar)!=O||Or&&si(new Or)!=k)&&(si=function(n){var t=je(n),r=t==j?n.constructor:e,u=r?Ti(r):\"\";if(u)switch(u){case Er:return R;case Rr:return w;case Cr:return I;case Pr:return O;case Wr:return k}return t});var mi=Cn?Jo:gf;function bi(n){var t=n&&n.constructor;return n===(\"function\"==typeof t&&t.prototype||Rn)}function wi(n){return n==n&&!Xo(n)}function xi(n,t){return function(r){return null!=r&&r[n]===t&&(t!==e||n in An(r))}}function ji(n,t,r){return t=gr(t===e?n.length-1:t,0),function(){for(var e=arguments,u=-1,i=gr(e.length-t,0),o=en(i);++u<i;)o[u]=e[t+u];u=-1;for(var a=en(t+1);++u<t;)a[u]=e[u];return a[t]=r(o),jt(n,this,a)}}function Ii(n,t){return t.length<2?n:we(n,nu(t,0,-1))}function Ai(n,t){if((\"constructor\"!==t||\"function\"!=typeof n[t])&&\"__proto__\"!=t)return n[t]}var Oi=Ei(Ye),zi=ht||function(n,t){return st.setTimeout(n,t)},Si=Ei(Qe);function ki(n,t,r){var e=t+\"\";return Si(n,function(n,t){var r=t.length;if(!r)return n;var e=r-1;return t[e]=(r>1?\"& \":\"\")+t[e],t=t.join(r>2?\", \":\" \"),n.replace(un,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(e,function(n,t){return At(p,function(r){var e=\"_.\"+r[0];t&r[1]&&!kt(n,e)&&n.push(e)}),n.sort()}(function(n){var t=n.match(on);return t?t[1].split(an):[]}(e),r)))}function Ei(n){var t=0,r=0;return function(){var u=yr(),i=16-(u-r);if(r=u,i>0){if(++t>=800)return arguments[0]}else t=0;return n.apply(e,arguments)}}function Ri(n,t){var r=-1,u=n.length,i=u-1;for(t=t===e?u:t;++r<t;){var o=He(r,i),a=n[o];n[o]=n[r],n[r]=a}return n.length=t,n}var Ci,Pi,Wi=(Ci=Po(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(\"\"),n.replace(X,function(n,r,e,u){t.push(e?u.replace(ln,\"$1\"):r||n)}),t},function(n){return 500===Pi.size&&Pi.clear(),n}),Pi=Ci.cache,Ci);function Fi(n){if(\"string\"==typeof n||aa(n))return n;var t=n+\"\";return\"0\"==t&&1/n==-1/0?\"-0\":t}function Ti(n){if(null!=n){try{return Pn.call(n)}catch(n){}try{return n+\"\"}catch(n){}}return\"\"}function Ui(n){if(n instanceof $r)return n.clone();var t=new Dr(n.__wrapped__,n.__chain__);return t.__actions__=Ou(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}var Li=Ke(function(n,t){return Zo(n)?ce(n,_e(t,1,Zo,!0)):[]}),Ni=Ke(function(n,t){var r=Vi(t);return Zo(r)&&(r=e),Zo(n)?ce(n,_e(t,1,Zo,!0),ii(r,2)):[]}),Bi=Ke(function(n,t){var r=Vi(t);return Zo(r)&&(r=e),Zo(n)?ce(n,_e(t,1,Zo,!0),e,r):[]});function Di(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:pa(r);return u<0&&(u=gr(e+u,0)),Lt(n,ii(t,3),u)}function $i(n,t,r){var u=null==n?0:n.length;if(!u)return-1;var i=u-1;return r!==e&&(i=pa(r),i=r<0?gr(u+i,0):dr(i,u-1)),Lt(n,ii(t,3),i,!0)}function Mi(n){return null!=n&&n.length?_e(n,1):[]}function qi(n){return n&&n.length?n[0]:e}var Hi=Ke(function(n){var t=Rt(n,vu);return t.length&&t[0]===n[0]?ze(t):[]}),Zi=Ke(function(n){var t=Vi(n),r=Rt(n,vu);return t===Vi(r)?t=e:r.pop(),r.length&&r[0]===n[0]?ze(r,ii(t,2)):[]}),Ki=Ke(function(n){var t=Vi(n),r=Rt(n,vu);return(t=\"function\"==typeof t?t:e)&&r.pop(),r.length&&r[0]===n[0]?ze(r,e,t):[]});function Vi(n){var t=null==n?0:n.length;return t?n[t-1]:e}var Gi=Ke(Ji);function Ji(n,t){return n&&n.length&&t&&t.length?Me(n,t):n}var Yi=Xu(function(n,t){var r=null==n?0:n.length,e=ue(n,t);return qe(n,Rt(t,function(n){return _i(n,r)?+n:n}).sort(ju)),e});function Qi(n){return null==n?n:wr.call(n)}var Xi=Ke(function(n){return au(_e(n,1,Zo,!0))}),no=Ke(function(n){var t=Vi(n);return Zo(t)&&(t=e),au(_e(n,1,Zo,!0),ii(t,2))}),to=Ke(function(n){var t=Vi(n);return t=\"function\"==typeof t?t:e,au(_e(n,1,Zo,!0),e,t)});function ro(n){if(!n||!n.length)return[];var t=0;return n=St(n,function(n){if(Zo(n))return t=gr(n.length,t),!0}),Kt(t,function(t){return Rt(n,Mt(t))})}function eo(n,t){if(!n||!n.length)return[];var r=ro(n);return null==t?r:Rt(r,function(n){return jt(t,e,n)})}var uo=Ke(function(n,t){return Zo(n)?ce(n,t):[]}),io=Ke(function(n){return hu(St(n,Zo))}),oo=Ke(function(n){var t=Vi(n);return Zo(t)&&(t=e),hu(St(n,Zo),ii(t,2))}),ao=Ke(function(n){var t=Vi(n);return t=\"function\"==typeof t?t:e,hu(St(n,Zo),e,t)}),fo=Ke(ro),co=Ke(function(n){var t=n.length,r=t>1?n[t-1]:e;return r=\"function\"==typeof r?(n.pop(),r):e,eo(n,r)});function lo(n){var t=Lr(n);return t.__chain__=!0,t}function so(n,t){return t(n)}var ho=Xu(function(n){var t=n.length,r=t?n[0]:0,u=this.__wrapped__,i=function(t){return ue(t,n)};return!(t>1||this.__actions__.length)&&u instanceof $r&&_i(r)?((u=u.slice(r,+r+(t?1:0))).__actions__.push({func:so,args:[i],thisArg:e}),new Dr(u,this.__chain__).thru(function(n){return t&&!n.length&&n.push(e),n})):this.thru(i)}),po=Su(function(n,t,r){Wn.call(n,r)?++n[r]:ee(n,r,1)}),vo=Fu(Di),_o=Fu($i);function go(n,t){return(Mo(n)?At:le)(n,ii(t,3))}function yo(n,t){return(Mo(n)?Ot:se)(n,ii(t,3))}var mo=Su(function(n,t,r){Wn.call(n,r)?n[r].push(t):ee(n,r,[t])}),bo=Ke(function(n,t,r){var e=-1,u=\"function\"==typeof t,i=Ho(n)?en(n.length):[];return le(n,function(n){i[++e]=u?jt(t,n,r):Se(n,t,r)}),i}),wo=Su(function(n,t,r){ee(n,r,t)});function xo(n,t){return(Mo(n)?Rt:Te)(n,ii(t,3))}var jo=Su(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),Io=Ke(function(n,t){if(null==n)return[];var r=t.length;return r>1&&gi(n,t[0],t[1])?t=[]:r>2&&gi(t[0],t[1],t[2])&&(t=[t[0]]),De(n,_e(t,1),[])}),Ao=lt||function(){return st.Date.now()};function Oo(n,t,r){return t=r?e:t,t=n&&null==t?n.length:t,Vu(n,f,e,e,e,e,t)}function zo(n,t){var r;if(\"function\"!=typeof t)throw new Sn(u);return n=pa(n),function(){return--n>0&&(r=t.apply(this,arguments)),n<=1&&(t=e),r}}var So=Ke(function(n,t,r){var e=1;if(r.length){var u=or(r,ui(So));e|=a}return Vu(n,e,t,r,u)}),ko=Ke(function(n,t,r){var e=3;if(r.length){var u=or(r,ui(ko));e|=a}return Vu(t,e,n,r,u)});function Eo(n,t,r){var i,o,a,f,c,l,s=0,h=!1,p=!1,v=!0;if(\"function\"!=typeof n)throw new Sn(u);function _(t){var r=i,u=o;return i=o=e,s=t,f=n.apply(u,r)}function g(n){var r=n-l;return l===e||r>=t||r<0||p&&n-s>=a}function d(){var n=Ao();if(g(n))return y(n);c=zi(d,function(n){var r=t-(n-l);return p?dr(r,a-(n-s)):r}(n))}function y(n){return c=e,v&&i?_(n):(i=o=e,f)}function m(){var n=Ao(),r=g(n);if(i=arguments,o=this,l=n,r){if(c===e)return function(n){return s=n,c=zi(d,t),h?_(n):f}(l);if(p)return mu(c),c=zi(d,t),_(l)}return c===e&&(c=zi(d,t)),f}return t=_a(t)||0,Xo(r)&&(h=!!r.leading,a=(p=\"maxWait\"in r)?gr(_a(r.maxWait)||0,t):a,v=\"trailing\"in r?!!r.trailing:v),m.cancel=function(){c!==e&&mu(c),s=0,i=l=o=c=e},m.flush=function(){return c===e?f:y(Ao())},m}var Ro=Ke(function(n,t){return fe(n,1,t)}),Co=Ke(function(n,t,r){return fe(n,_a(t)||0,r)});function Po(n,t){if(\"function\"!=typeof n||null!=t&&\"function\"!=typeof t)throw new Sn(u);var r=function(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;if(i.has(u))return i.get(u);var o=n.apply(this,e);return r.cache=i.set(u,o)||i,o};return r.cache=new(Po.Cache||Hr),r}function Wo(n){if(\"function\"!=typeof n)throw new Sn(u);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}Po.Cache=Hr;var Fo=du(function(n,t){var r=(t=1==t.length&&Mo(t[0])?Rt(t[0],Gt(ii())):Rt(_e(t,1),Gt(ii()))).length;return Ke(function(e){for(var u=-1,i=dr(e.length,r);++u<i;)e[u]=t[u].call(this,e[u]);return jt(n,this,e)})}),To=Ke(function(n,t){var r=or(t,ui(To));return Vu(n,a,e,t,r)}),Uo=Ke(function(n,t){var r=or(t,ui(Uo));return Vu(n,64,e,t,r)}),Lo=Xu(function(n,t){return Vu(n,256,e,e,e,t)});function No(n,t){return n===t||n!=n&&t!=t}var Bo=Mu(Ie),Do=Mu(function(n,t){return n>=t}),$o=ke(function(){return arguments}())?ke:function(n){return na(n)&&Wn.call(n,\"callee\")&&!Kn.call(n,\"callee\")},Mo=en.isArray,qo=dt?Gt(dt):function(n){return na(n)&&je(n)==E};function Ho(n){return null!=n&&Qo(n.length)&&!Jo(n)}function Zo(n){return na(n)&&Ho(n)}var Ko=Tt||gf,Vo=yt?Gt(yt):function(n){return na(n)&&je(n)==d};function Go(n){if(!na(n))return!1;var t=je(n);return t==y||\"[object DOMException]\"==t||\"string\"==typeof n.message&&\"string\"==typeof n.name&&!ea(n)}function Jo(n){if(!Xo(n))return!1;var t=je(n);return t==m||t==b||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function Yo(n){return\"number\"==typeof n&&n==pa(n)}function Qo(n){return\"number\"==typeof n&&n>-1&&n%1==0&&n<=l}function Xo(n){var t=typeof n;return null!=n&&(\"object\"==t||\"function\"==t)}function na(n){return null!=n&&\"object\"==typeof n}var ta=mt?Gt(mt):function(n){return na(n)&&si(n)==w};function ra(n){return\"number\"==typeof n||na(n)&&je(n)==x}function ea(n){if(!na(n)||je(n)!=j)return!1;var t=Hn(n);if(null===t)return!0;var r=Wn.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof r&&r instanceof r&&Pn.call(r)==Ln}var ua=bt?Gt(bt):function(n){return na(n)&&je(n)==A},ia=wt?Gt(wt):function(n){return na(n)&&si(n)==O};function oa(n){return\"string\"==typeof n||!Mo(n)&&na(n)&&je(n)==z}function aa(n){return\"symbol\"==typeof n||na(n)&&je(n)==S}var fa=xt?Gt(xt):function(n){return na(n)&&Qo(n.length)&&!!ut[je(n)]},ca=Mu(Fe),la=Mu(function(n,t){return n<=t});function sa(n){if(!n)return[];if(Ho(n))return oa(n)?lr(n):Ou(n);if(Qn&&n[Qn])return function(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}(n[Qn]());var t=si(n);return(t==w?ur:t==O?ar:Na)(n)}function ha(n){return n?(n=_a(n))===c||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function pa(n){var t=ha(n),r=t%1;return t==t?r?t-r:t:0}function va(n){return n?ie(pa(n),0,h):0}function _a(n){if(\"number\"==typeof n)return n;if(aa(n))return s;if(Xo(n)){var t=\"function\"==typeof n.valueOf?n.valueOf():n;n=Xo(t)?t+\"\":t}if(\"string\"!=typeof n)return 0===n?n:+n;n=Vt(n);var r=vn.test(n);return r||gn.test(n)?ft(n.slice(2),r?2:8):pn.test(n)?s:+n}function ga(n){return zu(n,Ra(n))}function da(n){return null==n?\"\":ou(n)}var ya=ku(function(n,t){if(bi(t)||Ho(t))zu(t,Ea(t),n);else for(var r in t)Wn.call(t,r)&&Xr(n,r,t[r])}),ma=ku(function(n,t){zu(t,Ra(t),n)}),ba=ku(function(n,t,r,e){zu(t,Ra(t),n,e)}),wa=ku(function(n,t,r,e){zu(t,Ea(t),n,e)}),xa=Xu(ue),ja=Ke(function(n,t){n=An(n);var r=-1,u=t.length,i=u>2?t[2]:e;for(i&&gi(t[0],t[1],i)&&(u=1);++r<u;)for(var o=t[r],a=Ra(o),f=-1,c=a.length;++f<c;){var l=a[f],s=n[l];(s===e||No(s,Rn[l])&&!Wn.call(n,l))&&(n[l]=o[l])}return n}),Ia=Ke(function(n){return n.push(e,Ju),jt(Pa,e,n)});function Aa(n,t,r){var u=null==n?e:we(n,t);return u===e?r:u}function Oa(n,t){return null!=n&&hi(n,t,Oe)}var za=Lu(function(n,t,r){null!=t&&\"function\"!=typeof t.toString&&(t=Un.call(t)),n[t]=r},Xa(rf)),Sa=Lu(function(n,t,r){null!=t&&\"function\"!=typeof t.toString&&(t=Un.call(t)),Wn.call(n,t)?n[t].push(r):n[t]=[r]},ii),ka=Ke(Se);function Ea(n){return Ho(n)?Vr(n):We(n)}function Ra(n){return Ho(n)?Vr(n,!0):function(n){if(!Xo(n))return function(n){var t=[];if(null!=n)for(var r in An(n))t.push(r);return t}(n);var t=bi(n),r=[];for(var e in n)(\"constructor\"!=e||!t&&Wn.call(n,e))&&r.push(e);return r}(n)}var Ca=ku(function(n,t,r){Ne(n,t,r)}),Pa=ku(function(n,t,r,e){Ne(n,t,r,e)}),Wa=Xu(function(n,t){var r={};if(null==n)return r;var e=!1;t=Rt(t,function(t){return t=gu(t,n),e||(e=t.length>1),t}),zu(n,ti(n),r),e&&(r=oe(r,7,Yu));for(var u=t.length;u--;)fu(r,t[u]);return r}),Fa=Xu(function(n,t){return null==n?{}:function(n,t){return $e(n,t,function(t,r){return Oa(n,r)})}(n,t)});function Ta(n,t){if(null==n)return{};var r=Rt(ti(n),function(n){return[n]});return t=ii(t),$e(n,r,function(n,r){return t(n,r[0])})}var Ua=Ku(Ea),La=Ku(Ra);function Na(n){return null==n?[]:Jt(n,Ea(n))}var Ba=Pu(function(n,t,r){return t=t.toLowerCase(),n+(r?Da(t):t)});function Da(n){return Ga(da(n).toLowerCase())}function $a(n){return(n=da(n))&&n.replace(yn,nr).replace(Yn,\"\")}var Ma=Pu(function(n,t,r){return n+(r?\"-\":\"\")+t.toLowerCase()}),qa=Pu(function(n,t,r){return n+(r?\" \":\"\")+t.toLowerCase()}),Ha=Cu(\"toLowerCase\"),Za=Pu(function(n,t,r){return n+(r?\"_\":\"\")+t.toLowerCase()}),Ka=Pu(function(n,t,r){return n+(r?\" \":\"\")+Ga(t)}),Va=Pu(function(n,t,r){return n+(r?\" \":\"\")+t.toUpperCase()}),Ga=Cu(\"toUpperCase\");function Ja(n,t,r){return n=da(n),(t=r?e:t)===e?function(n){return tt.test(n)}(n)?function(n){return n.match(Xn)||[]}(n):function(n){return n.match(fn)||[]}(n):n.match(t)||[]}var Ya=Ke(function(n,t){try{return jt(n,e,t)}catch(n){return Go(n)?n:new xn(n)}}),Qa=Xu(function(n,t){return At(t,function(t){t=Fi(t),ee(n,t,So(n[t],n))}),n});function Xa(n){return function(){return n}}var nf=Tu(),tf=Tu(!0);function rf(n){return n}function ef(n){return Pe(\"function\"==typeof n?n:oe(n,1))}var uf=Ke(function(n,t){return function(r){return Se(r,n,t)}}),of=Ke(function(n,t){return function(r){return Se(n,r,t)}});function af(n,t,r){var e=Ea(t),u=be(t,e);null!=r||Xo(t)&&(u.length||!e.length)||(r=t,t=n,n=this,u=be(t,Ea(t)));var i=!(Xo(r)&&\"chain\"in r&&!r.chain),o=Jo(n);return At(u,function(r){var e=t[r];n[r]=e,o&&(n.prototype[r]=function(){var t=this.__chain__;if(i||t){var r=n(this.__wrapped__);return(r.__actions__=Ou(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,Ct([this.value()],arguments))})}),n}function ff(){}var cf=Bu(Rt),lf=Bu(zt),sf=Bu(Ft);function hf(n){return di(n)?Mt(Fi(n)):function(n){return function(t){return we(t,n)}}(n)}var pf=$u(),vf=$u(!0);function _f(){return[]}function gf(){return!1}var df,yf=Nu(function(n,t){return n+t},0),mf=Hu(\"ceil\"),bf=Nu(function(n,t){return n/t},1),wf=Hu(\"floor\"),xf=Nu(function(n,t){return n*t},1),jf=Hu(\"round\"),If=Nu(function(n,t){return n-t},0);return Lr.after=function(n,t){if(\"function\"!=typeof t)throw new Sn(u);return n=pa(n),function(){if(--n<1)return t.apply(this,arguments)}},Lr.ary=Oo,Lr.assign=ya,Lr.assignIn=ma,Lr.assignInWith=ba,Lr.assignWith=wa,Lr.at=xa,Lr.before=zo,Lr.bind=So,Lr.bindAll=Qa,Lr.bindKey=ko,Lr.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return Mo(n)?n:[n]},Lr.chain=lo,Lr.chunk=function(n,t,r){t=(r?gi(n,t,r):t===e)?1:gr(pa(t),0);var u=null==n?0:n.length;if(!u||t<1)return[];for(var i=0,o=0,a=en(pt(u/t));i<u;)a[o++]=nu(n,i,i+=t);return a},Lr.compact=function(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){var i=n[t];i&&(u[e++]=i)}return u},Lr.concat=function(){var n=arguments.length;if(!n)return[];for(var t=en(n-1),r=arguments[0],e=n;e--;)t[e-1]=arguments[e];return Ct(Mo(r)?Ou(r):[r],_e(t,1))},Lr.cond=function(n){var t=null==n?0:n.length,r=ii();return n=t?Rt(n,function(n){if(\"function\"!=typeof n[1])throw new Sn(u);return[r(n[0]),n[1]]}):[],Ke(function(r){for(var e=-1;++e<t;){var u=n[e];if(jt(u[0],this,r))return jt(u[1],this,r)}})},Lr.conforms=function(n){return function(n){var t=Ea(n);return function(r){return ae(r,n,t)}}(oe(n,1))},Lr.constant=Xa,Lr.countBy=po,Lr.create=function(n,t){var r=Nr(n);return null==t?r:re(r,t)},Lr.curry=function n(t,r,u){var i=Vu(t,8,e,e,e,e,e,r=u?e:r);return i.placeholder=n.placeholder,i},Lr.curryRight=function n(t,r,u){var i=Vu(t,16,e,e,e,e,e,r=u?e:r);return i.placeholder=n.placeholder,i},Lr.debounce=Eo,Lr.defaults=ja,Lr.defaultsDeep=Ia,Lr.defer=Ro,Lr.delay=Co,Lr.difference=Li,Lr.differenceBy=Ni,Lr.differenceWith=Bi,Lr.drop=function(n,t,r){var u=null==n?0:n.length;return u?nu(n,(t=r||t===e?1:pa(t))<0?0:t,u):[]},Lr.dropRight=function(n,t,r){var u=null==n?0:n.length;return u?nu(n,0,(t=u-(t=r||t===e?1:pa(t)))<0?0:t):[]},Lr.dropRightWhile=function(n,t){return n&&n.length?lu(n,ii(t,3),!0,!0):[]},Lr.dropWhile=function(n,t){return n&&n.length?lu(n,ii(t,3),!0):[]},Lr.fill=function(n,t,r,u){var i=null==n?0:n.length;return i?(r&&\"number\"!=typeof r&&gi(n,t,r)&&(r=0,u=i),function(n,t,r,u){var i=n.length;for((r=pa(r))<0&&(r=-r>i?0:i+r),(u=u===e||u>i?i:pa(u))<0&&(u+=i),u=r>u?0:va(u);r<u;)n[r++]=t;return n}(n,t,r,u)):[]},Lr.filter=function(n,t){return(Mo(n)?St:ve)(n,ii(t,3))},Lr.flatMap=function(n,t){return _e(xo(n,t),1)},Lr.flatMapDeep=function(n,t){return _e(xo(n,t),c)},Lr.flatMapDepth=function(n,t,r){return r=r===e?1:pa(r),_e(xo(n,t),r)},Lr.flatten=Mi,Lr.flattenDeep=function(n){return null!=n&&n.length?_e(n,c):[]},Lr.flattenDepth=function(n,t){return null!=n&&n.length?_e(n,t=t===e?1:pa(t)):[]},Lr.flip=function(n){return Vu(n,512)},Lr.flow=nf,Lr.flowRight=tf,Lr.fromPairs=function(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];ee(e,u[0],u[1])}return e},Lr.functions=function(n){return null==n?[]:be(n,Ea(n))},Lr.functionsIn=function(n){return null==n?[]:be(n,Ra(n))},Lr.groupBy=mo,Lr.initial=function(n){return null!=n&&n.length?nu(n,0,-1):[]},Lr.intersection=Hi,Lr.intersectionBy=Zi,Lr.intersectionWith=Ki,Lr.invert=za,Lr.invertBy=Sa,Lr.invokeMap=bo,Lr.iteratee=ef,Lr.keyBy=wo,Lr.keys=Ea,Lr.keysIn=Ra,Lr.map=xo,Lr.mapKeys=function(n,t){var r={};return t=ii(t,3),ye(n,function(n,e,u){ee(r,t(n,e,u),n)}),r},Lr.mapValues=function(n,t){var r={};return t=ii(t,3),ye(n,function(n,e,u){ee(r,e,t(n,e,u))}),r},Lr.matches=function(n){return Ue(oe(n,1))},Lr.matchesProperty=function(n,t){return Le(n,oe(t,1))},Lr.memoize=Po,Lr.merge=Ca,Lr.mergeWith=Pa,Lr.method=uf,Lr.methodOf=of,Lr.mixin=af,Lr.negate=Wo,Lr.nthArg=function(n){return n=pa(n),Ke(function(t){return Be(t,n)})},Lr.omit=Wa,Lr.omitBy=function(n,t){return Ta(n,Wo(ii(t)))},Lr.once=function(n){return zo(2,n)},Lr.orderBy=function(n,t,r,u){return null==n?[]:(Mo(t)||(t=null==t?[]:[t]),Mo(r=u?e:r)||(r=null==r?[]:[r]),De(n,t,r))},Lr.over=cf,Lr.overArgs=Fo,Lr.overEvery=lf,Lr.overSome=sf,Lr.partial=To,Lr.partialRight=Uo,Lr.partition=jo,Lr.pick=Fa,Lr.pickBy=Ta,Lr.property=hf,Lr.propertyOf=function(n){return function(t){return null==n?e:we(n,t)}},Lr.pull=Gi,Lr.pullAll=Ji,Lr.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?Me(n,t,ii(r,2)):n},Lr.pullAllWith=function(n,t,r){return n&&n.length&&t&&t.length?Me(n,t,e,r):n},Lr.pullAt=Yi,Lr.range=pf,Lr.rangeRight=vf,Lr.rearg=Lo,Lr.reject=function(n,t){return(Mo(n)?St:ve)(n,Wo(ii(t,3)))},Lr.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=ii(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),u.push(e))}return qe(n,u),r},Lr.rest=function(n,t){if(\"function\"!=typeof n)throw new Sn(u);return Ke(n,t=t===e?t:pa(t))},Lr.reverse=Qi,Lr.sampleSize=function(n,t,r){return t=(r?gi(n,t,r):t===e)?1:pa(t),(Mo(n)?Jr:Ge)(n,t)},Lr.set=function(n,t,r){return null==n?n:Je(n,t,r)},Lr.setWith=function(n,t,r,u){return u=\"function\"==typeof u?u:e,null==n?n:Je(n,t,r,u)},Lr.shuffle=function(n){return(Mo(n)?Yr:Xe)(n)},Lr.slice=function(n,t,r){var u=null==n?0:n.length;return u?(r&&\"number\"!=typeof r&&gi(n,t,r)?(t=0,r=u):(t=null==t?0:pa(t),r=r===e?u:pa(r)),nu(n,t,r)):[]},Lr.sortBy=Io,Lr.sortedUniq=function(n){return n&&n.length?uu(n):[]},Lr.sortedUniqBy=function(n,t){return n&&n.length?uu(n,ii(t,2)):[]},Lr.split=function(n,t,r){return r&&\"number\"!=typeof r&&gi(n,t,r)&&(t=r=e),(r=r===e?h:r>>>0)?(n=da(n))&&(\"string\"==typeof t||null!=t&&!ua(t))&&!(t=ou(t))&&er(n)?yu(lr(n),0,r):n.split(t,r):[]},Lr.spread=function(n,t){if(\"function\"!=typeof n)throw new Sn(u);return t=null==t?0:gr(pa(t),0),Ke(function(r){var e=r[t],u=yu(r,0,t);return e&&Ct(u,e),jt(n,this,u)})},Lr.tail=function(n){var t=null==n?0:n.length;return t?nu(n,1,t):[]},Lr.take=function(n,t,r){return n&&n.length?nu(n,0,(t=r||t===e?1:pa(t))<0?0:t):[]},Lr.takeRight=function(n,t,r){var u=null==n?0:n.length;return u?nu(n,(t=u-(t=r||t===e?1:pa(t)))<0?0:t,u):[]},Lr.takeRightWhile=function(n,t){return n&&n.length?lu(n,ii(t,3),!1,!0):[]},Lr.takeWhile=function(n,t){return n&&n.length?lu(n,ii(t,3)):[]},Lr.tap=function(n,t){return t(n),n},Lr.throttle=function(n,t,r){var e=!0,i=!0;if(\"function\"!=typeof n)throw new Sn(u);return Xo(r)&&(e=\"leading\"in r?!!r.leading:e,i=\"trailing\"in r?!!r.trailing:i),Eo(n,t,{leading:e,maxWait:t,trailing:i})},Lr.thru=so,Lr.toArray=sa,Lr.toPairs=Ua,Lr.toPairsIn=La,Lr.toPath=function(n){return Mo(n)?Rt(n,Fi):aa(n)?[n]:Ou(Wi(da(n)))},Lr.toPlainObject=ga,Lr.transform=function(n,t,r){var e=Mo(n),u=e||Ko(n)||fa(n);if(t=ii(t,4),null==r){var i=n&&n.constructor;r=u?e?new i:[]:Xo(n)&&Jo(i)?Nr(Hn(n)):{}}return(u?At:ye)(n,function(n,e,u){return t(r,n,e,u)}),r},Lr.unary=function(n){return Oo(n,1)},Lr.union=Xi,Lr.unionBy=no,Lr.unionWith=to,Lr.uniq=function(n){return n&&n.length?au(n):[]},Lr.uniqBy=function(n,t){return n&&n.length?au(n,ii(t,2)):[]},Lr.uniqWith=function(n,t){return t=\"function\"==typeof t?t:e,n&&n.length?au(n,e,t):[]},Lr.unset=function(n,t){return null==n||fu(n,t)},Lr.unzip=ro,Lr.unzipWith=eo,Lr.update=function(n,t,r){return null==n?n:cu(n,t,_u(r))},Lr.updateWith=function(n,t,r,u){return u=\"function\"==typeof u?u:e,null==n?n:cu(n,t,_u(r),u)},Lr.values=Na,Lr.valuesIn=function(n){return null==n?[]:Jt(n,Ra(n))},Lr.without=uo,Lr.words=Ja,Lr.wrap=function(n,t){return To(_u(t),n)},Lr.xor=io,Lr.xorBy=oo,Lr.xorWith=ao,Lr.zip=fo,Lr.zipObject=function(n,t){return pu(n||[],t||[],Xr)},Lr.zipObjectDeep=function(n,t){return pu(n||[],t||[],Je)},Lr.zipWith=co,Lr.entries=Ua,Lr.entriesIn=La,Lr.extend=ma,Lr.extendWith=ba,af(Lr,Lr),Lr.add=yf,Lr.attempt=Ya,Lr.camelCase=Ba,Lr.capitalize=Da,Lr.ceil=mf,Lr.clamp=function(n,t,r){return r===e&&(r=t,t=e),r!==e&&(r=(r=_a(r))==r?r:0),t!==e&&(t=(t=_a(t))==t?t:0),ie(_a(n),t,r)},Lr.clone=function(n){return oe(n,4)},Lr.cloneDeep=function(n){return oe(n,5)},Lr.cloneDeepWith=function(n,t){return oe(n,5,t=\"function\"==typeof t?t:e)},Lr.cloneWith=function(n,t){return oe(n,4,t=\"function\"==typeof t?t:e)},Lr.conformsTo=function(n,t){return null==t||ae(n,t,Ea(t))},Lr.deburr=$a,Lr.defaultTo=function(n,t){return null==n||n!=n?t:n},Lr.divide=bf,Lr.endsWith=function(n,t,r){n=da(n),t=ou(t);var u=n.length,i=r=r===e?u:ie(pa(r),0,u);return(r-=t.length)>=0&&n.slice(r,i)==t},Lr.eq=No,Lr.escape=function(n){return(n=da(n))&&K.test(n)?n.replace(H,tr):n},Lr.escapeRegExp=function(n){return(n=da(n))&&tn.test(n)?n.replace(nn,\"\\\\$&\"):n},Lr.every=function(n,t,r){var u=Mo(n)?zt:he;return r&&gi(n,t,r)&&(t=e),u(n,ii(t,3))},Lr.find=vo,Lr.findIndex=Di,Lr.findKey=function(n,t){return Ut(n,ii(t,3),ye)},Lr.findLast=_o,Lr.findLastIndex=$i,Lr.findLastKey=function(n,t){return Ut(n,ii(t,3),me)},Lr.floor=wf,Lr.forEach=go,Lr.forEachRight=yo,Lr.forIn=function(n,t){return null==n?n:ge(n,ii(t,3),Ra)},Lr.forInRight=function(n,t){return null==n?n:de(n,ii(t,3),Ra)},Lr.forOwn=function(n,t){return n&&ye(n,ii(t,3))},Lr.forOwnRight=function(n,t){return n&&me(n,ii(t,3))},Lr.get=Aa,Lr.gt=Bo,Lr.gte=Do,Lr.has=function(n,t){return null!=n&&hi(n,t,Ae)},Lr.hasIn=Oa,Lr.head=qi,Lr.identity=rf,Lr.includes=function(n,t,r,e){n=Ho(n)?n:Na(n),r=r&&!e?pa(r):0;var u=n.length;return r<0&&(r=gr(u+r,0)),oa(n)?r<=u&&n.indexOf(t,r)>-1:!!u&&Nt(n,t,r)>-1},Lr.indexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:pa(r);return u<0&&(u=gr(e+u,0)),Nt(n,t,u)},Lr.inRange=function(n,t,r){return t=ha(t),r===e?(r=t,t=0):r=ha(r),function(n,t,r){return n>=dr(t,r)&&n<gr(t,r)}(n=_a(n),t,r)},Lr.invoke=ka,Lr.isArguments=$o,Lr.isArray=Mo,Lr.isArrayBuffer=qo,Lr.isArrayLike=Ho,Lr.isArrayLikeObject=Zo,Lr.isBoolean=function(n){return!0===n||!1===n||na(n)&&je(n)==g},Lr.isBuffer=Ko,Lr.isDate=Vo,Lr.isElement=function(n){return na(n)&&1===n.nodeType&&!ea(n)},Lr.isEmpty=function(n){if(null==n)return!0;if(Ho(n)&&(Mo(n)||\"string\"==typeof n||\"function\"==typeof n.splice||Ko(n)||fa(n)||$o(n)))return!n.length;var t=si(n);if(t==w||t==O)return!n.size;if(bi(n))return!We(n).length;for(var r in n)if(Wn.call(n,r))return!1;return!0},Lr.isEqual=function(n,t){return Ee(n,t)},Lr.isEqualWith=function(n,t,r){var u=(r=\"function\"==typeof r?r:e)?r(n,t):e;return u===e?Ee(n,t,e,r):!!u},Lr.isError=Go,Lr.isFinite=function(n){return\"number\"==typeof n&&qt(n)},Lr.isFunction=Jo,Lr.isInteger=Yo,Lr.isLength=Qo,Lr.isMap=ta,Lr.isMatch=function(n,t){return n===t||Re(n,t,ai(t))},Lr.isMatchWith=function(n,t,r){return r=\"function\"==typeof r?r:e,Re(n,t,ai(t),r)},Lr.isNaN=function(n){return ra(n)&&n!=+n},Lr.isNative=function(n){if(mi(n))throw new xn(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Ce(n)},Lr.isNil=function(n){return null==n},Lr.isNull=function(n){return null===n},Lr.isNumber=ra,Lr.isObject=Xo,Lr.isObjectLike=na,Lr.isPlainObject=ea,Lr.isRegExp=ua,Lr.isSafeInteger=function(n){return Yo(n)&&n>=-9007199254740991&&n<=l},Lr.isSet=ia,Lr.isString=oa,Lr.isSymbol=aa,Lr.isTypedArray=fa,Lr.isUndefined=function(n){return n===e},Lr.isWeakMap=function(n){return na(n)&&si(n)==k},Lr.isWeakSet=function(n){return na(n)&&\"[object WeakSet]\"==je(n)},Lr.join=function(n,t){return null==n?\"\":vr.call(n,t)},Lr.kebabCase=Ma,Lr.last=Vi,Lr.lastIndexOf=function(n,t,r){var u=null==n?0:n.length;if(!u)return-1;var i=u;return r!==e&&(i=(i=pa(r))<0?gr(u+i,0):dr(i,u-1)),t==t?function(n,t,r){for(var e=r+1;e--;)if(n[e]===t)return e;return e}(n,t,i):Lt(n,Dt,i,!0)},Lr.lowerCase=qa,Lr.lowerFirst=Ha,Lr.lt=ca,Lr.lte=la,Lr.max=function(n){return n&&n.length?pe(n,rf,Ie):e},Lr.maxBy=function(n,t){return n&&n.length?pe(n,ii(t,2),Ie):e},Lr.mean=function(n){return $t(n,rf)},Lr.meanBy=function(n,t){return $t(n,ii(t,2))},Lr.min=function(n){return n&&n.length?pe(n,rf,Fe):e},Lr.minBy=function(n,t){return n&&n.length?pe(n,ii(t,2),Fe):e},Lr.stubArray=_f,Lr.stubFalse=gf,Lr.stubObject=function(){return{}},Lr.stubString=function(){return\"\"},Lr.stubTrue=function(){return!0},Lr.multiply=xf,Lr.nth=function(n,t){return n&&n.length?Be(n,pa(t)):e},Lr.noConflict=function(){return st._===this&&(st._=Nn),this},Lr.noop=ff,Lr.now=Ao,Lr.pad=function(n,t,r){n=da(n);var e=(t=pa(t))?cr(n):0;if(!t||e>=t)return n;var u=(t-e)/2;return Du(_t(u),r)+n+Du(pt(u),r)},Lr.padEnd=function(n,t,r){n=da(n);var e=(t=pa(t))?cr(n):0;return t&&e<t?n+Du(t-e,r):n},Lr.padStart=function(n,t,r){n=da(n);var e=(t=pa(t))?cr(n):0;return t&&e<t?Du(t-e,r)+n:n},Lr.parseInt=function(n,t,r){return r||null==t?t=0:t&&(t=+t),mr(da(n).replace(rn,\"\"),t||0)},Lr.random=function(n,t,r){if(r&&\"boolean\"!=typeof r&&gi(n,t,r)&&(t=r=e),r===e&&(\"boolean\"==typeof t?(r=t,t=e):\"boolean\"==typeof n&&(r=n,n=e)),n===e&&t===e?(n=0,t=1):(n=ha(n),t===e?(t=n,n=0):t=ha(t)),n>t){var u=n;n=t,t=u}if(r||n%1||t%1){var i=br();return dr(n+i*(t-n+at(\"1e-\"+((i+\"\").length-1))),t)}return He(n,t)},Lr.reduce=function(n,t,r){var e=Mo(n)?Pt:Ht,u=arguments.length<3;return e(n,ii(t,4),r,u,le)},Lr.reduceRight=function(n,t,r){var e=Mo(n)?Wt:Ht,u=arguments.length<3;return e(n,ii(t,4),r,u,se)},Lr.repeat=function(n,t,r){return t=(r?gi(n,t,r):t===e)?1:pa(t),Ze(da(n),t)},Lr.replace=function(){var n=arguments,t=da(n[0]);return n.length<3?t:t.replace(n[1],n[2])},Lr.result=function(n,t,r){var u=-1,i=(t=gu(t,n)).length;for(i||(i=1,n=e);++u<i;){var o=null==n?e:n[Fi(t[u])];o===e&&(u=i,o=r),n=Jo(o)?o.call(n):o}return n},Lr.round=jf,Lr.runInContext=n,Lr.sample=function(n){return(Mo(n)?Gr:Ve)(n)},Lr.size=function(n){if(null==n)return 0;if(Ho(n))return oa(n)?cr(n):n.length;var t=si(n);return t==w||t==O?n.size:We(n).length},Lr.snakeCase=Za,Lr.some=function(n,t,r){var u=Mo(n)?Ft:tu;return r&&gi(n,t,r)&&(t=e),u(n,ii(t,3))},Lr.sortedIndex=function(n,t){return ru(n,t)},Lr.sortedIndexBy=function(n,t,r){return eu(n,t,ii(r,2))},Lr.sortedIndexOf=function(n,t){var r=null==n?0:n.length;if(r){var e=ru(n,t);if(e<r&&No(n[e],t))return e}return-1},Lr.sortedLastIndex=function(n,t){return ru(n,t,!0)},Lr.sortedLastIndexBy=function(n,t,r){return eu(n,t,ii(r,2),!0)},Lr.sortedLastIndexOf=function(n,t){if(null!=n&&n.length){var r=ru(n,t,!0)-1;if(No(n[r],t))return r}return-1},Lr.startCase=Ka,Lr.startsWith=function(n,t,r){return n=da(n),r=null==r?0:ie(pa(r),0,n.length),t=ou(t),n.slice(r,r+t.length)==t},Lr.subtract=If,Lr.sum=function(n){return n&&n.length?Zt(n,rf):0},Lr.sumBy=function(n,t){return n&&n.length?Zt(n,ii(t,2)):0},Lr.template=function(n,t,r){var u=Lr.templateSettings;r&&gi(n,t,r)&&(t=e),n=da(n),t=wa({},t,u,Gu);var i=wa({},t.imports,u.imports,Gu),o=Ea(i),a=Jt(i,o);At(o,function(n){if(cn.test(n))throw new xn(\"Invalid `imports` option passed into `_.template`\")});var f,c,l=0,s=t.interpolate||mn,h=\"__p += '\",p=On((t.escape||mn).source+\"|\"+s.source+\"|\"+(s===J?sn:mn).source+\"|\"+(t.evaluate||mn).source+\"|$\",\"g\"),v=\"//# sourceURL=\"+(Wn.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++et+\"]\")+\"\\n\";n.replace(p,function(t,r,e,u,i,o){return e||(e=u),h+=n.slice(l,o).replace(bn,rr),r&&(f=!0,h+=\"' +\\n__e(\"+r+\") +\\n'\"),i&&(c=!0,h+=\"';\\n\"+i+\";\\n__p += '\"),e&&(h+=\"' +\\n((__t = (\"+e+\")) == null ? '' : __t) +\\n'\"),l=o+t.length,t}),h+=\"';\\n\";var _=Wn.call(t,\"variable\")&&t.variable;if(_){if(cn.test(_))throw new xn(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(c?h.replace(D,\"\"):h).replace($,\"$1\").replace(M,\"$1;\"),h=\"function(\"+(_||\"obj\")+\") {\\n\"+(_?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(f?\", __e = _.escape\":\"\")+(c?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var g=Ya(function(){return jn(o,v+\"return \"+h).apply(e,a)});if(g.source=h,Go(g))throw g;return g},Lr.times=function(n,t){if((n=pa(n))<1||n>l)return[];var r=h,e=dr(n,h);t=ii(t),n-=h;for(var u=Kt(e,t);++r<n;)t(r);return u},Lr.toFinite=ha,Lr.toInteger=pa,Lr.toLength=va,Lr.toLower=function(n){return da(n).toLowerCase()},Lr.toNumber=_a,Lr.toSafeInteger=function(n){return n?ie(pa(n),-9007199254740991,l):0===n?n:0},Lr.toString=da,Lr.toUpper=function(n){return da(n).toUpperCase()},Lr.trim=function(n,t,r){if((n=da(n))&&(r||t===e))return Vt(n);if(!n||!(t=ou(t)))return n;var u=lr(n),i=lr(t);return yu(u,Qt(u,i),Xt(u,i)+1).join(\"\")},Lr.trimEnd=function(n,t,r){if((n=da(n))&&(r||t===e))return n.slice(0,sr(n)+1);if(!n||!(t=ou(t)))return n;var u=lr(n);return yu(u,0,Xt(u,lr(t))+1).join(\"\")},Lr.trimStart=function(n,t,r){if((n=da(n))&&(r||t===e))return n.replace(rn,\"\");if(!n||!(t=ou(t)))return n;var u=lr(n);return yu(u,Qt(u,lr(t))).join(\"\")},Lr.truncate=function(n,t){var r=30,u=\"...\";if(Xo(t)){var i=\"separator\"in t?t.separator:i;r=\"length\"in t?pa(t.length):r,u=\"omission\"in t?ou(t.omission):u}var o=(n=da(n)).length;if(er(n)){var a=lr(n);o=a.length}if(r>=o)return n;var f=r-cr(u);if(f<1)return u;var c=a?yu(a,0,f).join(\"\"):n.slice(0,f);if(i===e)return c+u;if(a&&(f+=c.length-f),ua(i)){if(n.slice(f).search(i)){var l,s=c;for(i.global||(i=On(i.source,da(hn.exec(i))+\"g\")),i.lastIndex=0;l=i.exec(s);)var h=l.index;c=c.slice(0,h===e?f:h)}}else if(n.indexOf(ou(i),f)!=f){var p=c.lastIndexOf(i);p>-1&&(c=c.slice(0,p))}return c+u},Lr.unescape=function(n){return(n=da(n))&&Z.test(n)?n.replace(q,hr):n},Lr.uniqueId=function(n){var t=++Fn;return da(n)+t},Lr.upperCase=Va,Lr.upperFirst=Ga,Lr.each=go,Lr.eachRight=yo,Lr.first=qi,af(Lr,(df={},ye(Lr,function(n,t){Wn.call(Lr.prototype,t)||(df[t]=n)}),df),{chain:!1}),Lr.VERSION=\"4.18.1\",At([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(n){Lr[n].placeholder=Lr}),At([\"drop\",\"take\"],function(n,t){$r.prototype[n]=function(r){r=r===e?1:gr(pa(r),0);var u=this.__filtered__&&!t?new $r(this):this.clone();return u.__filtered__?u.__takeCount__=dr(r,u.__takeCount__):u.__views__.push({size:dr(r,h),type:n+(u.__dir__<0?\"Right\":\"\")}),u},$r.prototype[n+\"Right\"]=function(t){return this.reverse()[n](t).reverse()}}),At([\"filter\",\"map\",\"takeWhile\"],function(n,t){var r=t+1,e=1==r||3==r;$r.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:ii(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),At([\"head\",\"last\"],function(n,t){var r=\"take\"+(t?\"Right\":\"\");$r.prototype[n]=function(){return this[r](1).value()[0]}}),At([\"initial\",\"tail\"],function(n,t){var r=\"drop\"+(t?\"\":\"Right\");$r.prototype[n]=function(){return this.__filtered__?new $r(this):this[r](1)}}),$r.prototype.compact=function(){return this.filter(rf)},$r.prototype.find=function(n){return this.filter(n).head()},$r.prototype.findLast=function(n){return this.reverse().find(n)},$r.prototype.invokeMap=Ke(function(n,t){return\"function\"==typeof n?new $r(this):this.map(function(r){return Se(r,n,t)})}),$r.prototype.reject=function(n){return this.filter(Wo(ii(n)))},$r.prototype.slice=function(n,t){n=pa(n);var r=this;return r.__filtered__&&(n>0||t<0)?new $r(r):(n<0?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==e&&(r=(t=pa(t))<0?r.dropRight(-t):r.take(t-n)),r)},$r.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},$r.prototype.toArray=function(){return this.take(h)},ye($r.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),u=/^(?:head|last)$/.test(t),i=Lr[u?\"take\"+(\"last\"==t?\"Right\":\"\"):t],o=u||/^find/.test(t);i&&(Lr.prototype[t]=function(){var t=this.__wrapped__,a=u?[1]:arguments,f=t instanceof $r,c=a[0],l=f||Mo(t),s=function(n){var t=i.apply(Lr,Ct([n],a));return u&&h?t[0]:t};l&&r&&\"function\"==typeof c&&1!=c.length&&(f=l=!1);var h=this.__chain__,p=!!this.__actions__.length,v=o&&!h,_=f&&!p;if(!o&&l){t=_?t:new $r(this);var g=n.apply(t,a);return g.__actions__.push({func:so,args:[s],thisArg:e}),new Dr(g,h)}return v&&_?n.apply(this,a):(g=this.thru(s),v?u?g.value()[0]:g.value():g)})}),At([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(n){var t=kn[n],r=/^(?:push|sort|unshift)$/.test(n)?\"tap\":\"thru\",e=/^(?:pop|shift)$/.test(n);Lr.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Mo(u)?u:[],n)}return this[r](function(r){return t.apply(Mo(r)?r:[],n)})}}),ye($r.prototype,function(n,t){var r=Lr[t];if(r){var e=r.name+\"\";Wn.call(kr,e)||(kr[e]=[]),kr[e].push({name:t,func:r})}}),kr[Uu(e,2).name]=[{name:\"wrapper\",func:e}],$r.prototype.clone=function(){var n=new $r(this.__wrapped__);return n.__actions__=Ou(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Ou(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Ou(this.__views__),n},$r.prototype.reverse=function(){if(this.__filtered__){var n=new $r(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},$r.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,r=Mo(n),e=t<0,u=r?n.length:0,i=function(n,t,r){for(var e=-1,u=r.length;++e<u;){var i=r[e],o=i.size;switch(i.type){case\"drop\":n+=o;break;case\"dropRight\":t-=o;break;case\"take\":t=dr(t,n+o);break;case\"takeRight\":n=gr(n,t-o)}}return{start:n,end:t}}(0,u,this.__views__),o=i.start,a=i.end,f=a-o,c=e?a:o-1,l=this.__iteratees__,s=l.length,h=0,p=dr(f,this.__takeCount__);if(!r||!e&&u==f&&p==f)return su(n,this.__actions__);var v=[];n:for(;f--&&h<p;){for(var _=-1,g=n[c+=t];++_<s;){var d=l[_],y=d.iteratee,m=d.type,b=y(g);if(2==m)g=b;else if(!b){if(1==m)continue n;break n}}v[h++]=g}return v},Lr.prototype.at=ho,Lr.prototype.chain=function(){return lo(this)},Lr.prototype.commit=function(){return new Dr(this.value(),this.__chain__)},Lr.prototype.next=function(){this.__values__===e&&(this.__values__=sa(this.value()));var n=this.__index__>=this.__values__.length;return{done:n,value:n?e:this.__values__[this.__index__++]}},Lr.prototype.plant=function(n){for(var t,r=this;r instanceof Br;){var u=Ui(r);u.__index__=0,u.__values__=e,t?i.__wrapped__=u:t=u;var i=u;r=r.__wrapped__}return i.__wrapped__=n,t},Lr.prototype.reverse=function(){var n=this.__wrapped__;if(n instanceof $r){var t=n;return this.__actions__.length&&(t=new $r(this)),(t=t.reverse()).__actions__.push({func:so,args:[Qi],thisArg:e}),new Dr(t,this.__chain__)}return this.thru(Qi)},Lr.prototype.toJSON=Lr.prototype.valueOf=Lr.prototype.value=function(){return su(this.__wrapped__,this.__actions__)},Lr.prototype.first=Lr.prototype.head,Qn&&(Lr.prototype[Qn]=function(){return this}),Lr}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(st._=pr,define(function(){return pr})):pt?((pt.exports=pr)._=pr,ht._=pr):st._=pr}.call(this)}},t={};function r(e){var u=t[e];if(void 0!==u)return u.exports;var i=t[e]={id:e,loaded:!1,exports:{}};return n[e].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.d=(n,t)=>{for(var e in t)r.o(t,e)&&!r.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(n){if(\"object\"==typeof window)return window}}(),r.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t),r.r=n=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(n,\"__esModule\",{value:!0})},r.nmd=n=>(n.paths=[],n.children||(n.children=[]),n);var e={};(()=>{\"use strict\";r.r(e),r.d(e,{createCreditCardPaymentStrategy:()=>h});var n,t=r(9440);class u extends Error{constructor(n){var t;super(n||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class i extends u{constructor(n){super(n||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class o extends u{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class a extends i{constructor(n){let t=\"Unable to submit payment for the order because the payload is invalid.\";n&&(t=`${t} Make sure the following fields are provided correctly: ${n.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}!function(n){n[n.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",n[n.CustomerNotInitialized=1]=\"CustomerNotInitialized\",n[n.PaymentNotInitialized=2]=\"PaymentNotInitialized\",n[n.ShippingNotInitialized=3]=\"ShippingNotInitialized\",n[n.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(n||(n={}));class f extends u{constructor(t){super(function(t){switch(t){case n.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case n.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case n.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case n.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var c=function(n,t,r,e){return new(r||(r=Promise))(function(u,i){function o(n){try{f(e.next(n))}catch(n){i(n)}}function a(n){try{f(e.throw(n))}catch(n){i(n)}}function f(n){var t;n.done?u(n.value):(t=n.value,t instanceof r?t:new r(function(n){n(t)})).then(o,a)}f((e=e.apply(n,t||[])).next())})},l=function(n,t){var r={};for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&t.indexOf(e)<0&&(r[e]=n[e]);if(null!=n&&\"function\"==typeof Object.getOwnPropertySymbols){var u=0;for(e=Object.getOwnPropertySymbols(n);u<e.length;u++)t.indexOf(e[u])<0&&Object.prototype.propertyIsEnumerable.call(n,e[u])&&(r[e[u]]=n[e[u]])}return r};class s{constructor(n){this._paymentIntegrationService=n}execute(n,t){var r,e;return this._isHostedPaymentFormEnabled(null===(r=n.payment)||void 0===r?void 0:r.methodId,null===(e=n.payment)||void 0===e?void 0:e.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(n,t):this._executeWithoutHostedForm(n,t)}initialize(n){if(!this._isHostedPaymentFormEnabled(null==n?void 0:n.methodId,null==n?void 0:n.gatewayId)||!this._isHostedFieldAvailable(n))return this._shouldRenderHostedForm=!1,Promise.resolve();const t=n&&n.creditCard&&n.creditCard.form,r=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:e=\"\"}={}}=r.getStoreConfigOrThrow();if(!t)throw new i;const u=this._paymentIntegrationService.createHostedForm(e,t);return u.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=u,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new o)}_executeWithoutHostedForm(n,t){return c(this,void 0,void 0,function*(){const{payment:r}=n,e=l(n,[\"payment\"]),u=r&&r.paymentData;if(!r||!u)throw new a([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(e,t),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:u}))})}_executeWithHostedForm(t,r){return c(this,void 0,void 0,function*(){const{payment:e}=t,u=l(t,[\"payment\"]),i=this._hostedForm;if(!i)throw new f(n.PaymentNotInitialized);if(!e||!e.methodId)throw new a([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(u,r),yield i.validate().then(()=>i.submit(e))})}_isHostedPaymentFormEnabled(n,t){return!!n&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(n,t).config.isHostedFormEnabled}_isHostedFieldAvailable(n){return!(0,t.values)(n&&n.creditCard&&n.creditCard.form.fields).every(t.isNil)}}const h=Object.assign(n=>new s(n),{resolveIds:[{default:!0}]})})(),module.exports=e})();\n//# sourceMappingURL=credit-card.js.map"
  },
  {
    "path": "dist/cjs/integrations/cybersource.js",
    "content": "(()=>{var t={4325(t,e,n){\"use strict\";n.d(e,{g:()=>i});var r=n(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(r.stringify(e))},t}()},321(t,e,n){\"use strict\";n.d(e,{A:()=>a});var r=n(168),i=n(1675),o=n(5861),u=n(4670);function a(t){return new u.A(new o.A,new i.A,r,t)}},6889(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(2024);function i(t){return new r.A(t)}},4043(t,e,n){\"use strict\";n.r(e),n.d(e,{RequestSender:()=>o.A,Timeout:()=>u.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),u=n(2024)},4843(t,e,n){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}n.d(e,{A:()=>r})},1675(t,e,n){\"use strict\";n.d(e,{A:()=>a});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,u=/application\\/x-www-form-urlencoded/;const a=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(e))return JSON.stringify(t.body);if(u.test(e))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,\"Content-Type\");return t&&o.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var n,i=e.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}()},5861(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||\"GET\",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),\"boolean\"==typeof n.credentials&&(t.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(n){t.setRequestHeader(n,e[n])})},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(r.stringify(e,{encode:n})):t},t}()},4670(t,e,n){\"use strict\";n.d(e,{A:()=>s});var r=n(1635),i=n(35),o=n.n(i),u=n(4325),a=n(4843),c=n(2024);const s=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new u.g}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(e,i){var u=function(){var u=n._payloadTransformer.toResponse(o);u.status>=200&&u.status<300?(n._cacheRequest(t,r,u),e(u)):i(u)};o.onload=u,o.onerror=u,o.onabort=u,o.ontimeout=u,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,a.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(n.headers[\"X-XSRF-TOKEN\"]=r),e&&e.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,e,n){\"use strict\";n.d(e,{A:()=>r});const r=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,e,n){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var n=t[e];return\"string\"==typeof n?\"\".concat(e,\"=\").concat(encodeURIComponent(n)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(e,{A:()=>r})},5889(t,e,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),u=n(3814);function a(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}function s(t,e){return e.decode?i(t):t}function f(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?f(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function l(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function p(t){const e=(t=l(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function h(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function d(t,e){a((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,n,r)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case\"bracket\":return(t,n,r)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"comma\":case\"separator\":return(e,n,r)=>{const i=\"string\"==typeof n&&n.includes(t.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&s(n,t).includes(t.arrayFormatSeparator);n=o?s(n,t):n;const u=i||o?n.split(t.arrayFormatSeparator).map(e=>s(e,t)):null===n?n:s(n,t);r[e]=u};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[].concat(n[t],e):n[t]=e}}}(e),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,u]=o(e.decode?i.replace(/\\+/g,\" \"):i,\"=\");u=void 0===u?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?u:s(u,e),n(s(t,e),u,r)}for(const t of Object.keys(r)){const n=r[t];if(\"object\"==typeof n&&null!==n)for(const t of Object.keys(n))n[t]=h(n[t],e);else r[t]=h(n,e)}return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce((t,e)=>{const n=r[e];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?t[e]=f(n):t[e]=n,t},Object.create(null))}e.extract=p,e.parse=d,e.stringify=(t,e)=>{if(!t)return\"\";a((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const n=n=>e.skipNull&&null==t[n]||e.skipEmptyString&&\"\"===t[n],r=function(t){switch(t.arrayFormat){case\"index\":return e=>(n,r)=>{const i=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[\",i,\"]\"].join(\"\")]:[...n,[c(e,t),\"[\",c(i,t),\"]=\",c(r,t)].join(\"\")]};case\"bracket\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[]\"].join(\"\")]:[...n,[c(e,t),\"[]=\",c(r,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(n,r)=>null==r||0===r.length?n:0===n.length?[[c(e,t),\"=\",c(r,t)].join(\"\")]:[[n,c(r,t)].join(t.arrayFormatSeparator)];default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,c(e,t)]:[...n,[c(e,t),\"=\",c(r,t)].join(\"\")]}}(e),i={};for(const e of Object.keys(t))n(e)||(i[e]=t[e]);const o=Object.keys(i);return!1!==e.sort&&o.sort(e.sort),o.map(n=>{const i=t[n];return void 0===i?\"\":null===i?c(n,e):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):c(n,e)+\"=\"+c(i,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[n,r]=o(t,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:d(p(t),e)},e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:s(r,e)}:{})},e.stringifyUrl=(t,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=l(t.url).split(\"?\")[0]||\"\",i=e.extract(t.url),o=e.parse(i,{sort:!1}),u=Object.assign(o,t.query);let a=e.stringify(u,n);a&&(a=`?${a}`);let s=function(t){let e=\"\";const n=t.indexOf(\"#\");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(s=`#${c(t.fragmentIdentifier,n)}`),`${r}${a}${s}`},e.pick=(t,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:a}=e.parseUrl(t,r);return e.stringifyUrl({url:i,query:u(o,n),fragmentIdentifier:a},r)},e.exclude=(t,n,r)=>{const i=Array.isArray(n)?t=>!n.includes(t):(t,e)=>!n(t,e);return e.pick(t,i,r)}},5477(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement(\"link\");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=n},471(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(t,e,n){\"use strict\";e.vQ=void 0;n(4886),n(471);var r=n(5895);Object.defineProperty(e,\"vQ\",{enumerable:!0,get:function(){return r.default}});n(7995),n(9722),n(282)},4886(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var n=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),u=e||{},a=u.async,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(e){delete n._scripts[t],i(e)},o.async=c,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadScript(t,e)})).then(function(){})},t.prototype.preloadScript=function(t,e){var n=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(e||{}).prefetch,u=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(u)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=u,a.href=t,a.onload=function(){r()},a.onerror=function(){delete n._preloadedScripts[t],i()},document.head.appendChild(a)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadScript(t,e)})).then(function(){})},t}();e.default=n},7995(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var n=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),u=e||{},a=u.prepend,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onerror=function(e){delete n._stylesheets[t],i(e)},o.rel=\"stylesheet\",o.href=t,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadStylesheet(t,e)})).then(function(){})},t.prototype.preloadStylesheet=function(t,e){var n=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(e||{}).prefetch,u=void 0!==o&&o,a=u?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=u?\"prefetch\":\"preload\",c.href=t,c.onload=function(){r()},c.onerror=function(e){delete n._preloadedStylesheets[t],i(e)},document.head.appendChild(c)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadStylesheet(t,e)})).then(function(){})},t}();e.default=n},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+e+\")+\",\"gi\");function i(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],i(n),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var e=t.match(n)||[],r=1;r<e.length;r++)e=(t=i(e,r).join(\"\")).match(n)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(t);n;){try{e[n[0]]=decodeURIComponent(n[0])}catch(t){var i=o(n[0]);i!==n[0]&&(e[n[0]]=i)}n=r.exec(t)}e[\"%C2\"]=\"�\";for(var u=Object.keys(e),a=0;a<u.length;a++){var c=u[a];t=t.replace(new RegExp(c,\"g\"),e[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,e){for(var n={},r=Object.keys(t),i=Array.isArray(e),o=0;o<r.length;o++){var u=r[o],a=t[u];(i?-1!==e.indexOf(u):e(u,a,t))&&(n[u]=a)}return n}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(e,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var u=JSON.stringify(n);/^[\\{\\[]/.test(u)&&(n=u)}catch(t){}n=r.write?r.write(n,e):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in o)o[c]&&(a+=\"; \"+c,!0!==o[c]&&(a+=\"=\"+o[c].split(\";\")[0]));return document.cookie=e+\"=\"+n+a}}function u(t,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],u=0;u<o.length;u++){var a=o[u].split(\"=\"),c=a.slice(1).join(\"=\");n||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var s=e(a[0]);if(c=(r.read||r)(c,s)||e(c),n)try{c=JSON.parse(c)}catch(t){}if(i[s]=c,t===s)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return u(t,!1)},i.getJSON=function(t){return u(t,!0)},i.remove=function(e,n){o(e,\"\",t(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},35(t,e,n){t=n.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",u=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,s=/^(?:0|[1-9]\\d*)$/,f={};f[\"[object Float32Array]\"]=f[\"[object Float64Array]\"]=f[\"[object Int8Array]\"]=f[\"[object Int16Array]\"]=f[\"[object Int32Array]\"]=f[\"[object Uint8Array]\"]=f[\"[object Uint8ClampedArray]\"]=f[\"[object Uint16Array]\"]=f[\"[object Uint32Array]\"]=!0,f[o]=f[\"[object Array]\"]=f[\"[object ArrayBuffer]\"]=f[\"[object Boolean]\"]=f[\"[object DataView]\"]=f[\"[object Date]\"]=f[\"[object Error]\"]=f[u]=f[\"[object Map]\"]=f[\"[object Number]\"]=f[a]=f[\"[object RegExp]\"]=f[\"[object Set]\"]=f[\"[object String]\"]=f[\"[object WeakMap]\"]=!1;var l,p,h,d=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,v=\"object\"==typeof self&&self&&self.Object===Object&&self,_=d||v||Function(\"return this\")(),y=e&&!e.nodeType&&e,g=y&&t&&!t.nodeType&&t,m=g&&g.exports===y,b=m&&d.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),j=w&&w.isTypedArray,S=Array.prototype,x=Function.prototype,O=Object.prototype,A=_[\"__core-js_shared__\"],C=x.toString,I=O.hasOwnProperty,k=(l=/[^.]+$/.exec(A&&A.keys&&A.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",E=O.toString,P=C.call(Object),R=RegExp(\"^\"+C.call(I).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),T=m?_.Buffer:void 0,z=_.Symbol,M=_.Uint8Array,U=(T&&T.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(t){return p(h(t))}),F=Object.create,N=O.propertyIsEnumerable,D=S.splice,q=z?z.toStringTag:void 0,B=function(){try{var t=at(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),L=T?T.isBuffer:void 0,$=Math.max,W=Date.now,H=at(_,\"Map\"),V=at(Object,\"create\"),K=function(){function t(){}return function(e){if(!mt(e))return{};if(F)return F(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function G(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Z(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function J(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Y(t){var e=this.__data__=new Z(t);this.size=e.size}function Q(t,e,n){(void 0!==n&&!pt(t[e],n)||void 0===n&&!(e in t))&&et(t,e,n)}function X(t,e,n){var r=t[e];I.call(t,e)&&pt(r,n)&&(void 0!==n||e in t)||et(t,e,n)}function tt(t,e){for(var n=t.length;n--;)if(pt(t[n][0],e))return n;return-1}function et(t,e,n){\"__proto__\"==e&&B?B(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}G.prototype.clear=function(){this.__data__=V?V(null):{},this.size=0},G.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},G.prototype.get=function(t){var e=this.__data__;if(V){var n=e[t];return n===r?void 0:n}return I.call(e,t)?e[t]:void 0},G.prototype.has=function(t){var e=this.__data__;return V?void 0!==e[t]:I.call(e,t)},G.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=V&&void 0===e?r:e,this},Z.prototype.clear=function(){this.__data__=[],this.size=0},Z.prototype.delete=function(t){var e=this.__data__,n=tt(e,t);return!(n<0||(n==e.length-1?e.pop():D.call(e,n,1),--this.size,0))},Z.prototype.get=function(t){var e=this.__data__,n=tt(e,t);return n<0?void 0:e[n][1]},Z.prototype.has=function(t){return tt(this.__data__,t)>-1},Z.prototype.set=function(t,e){var n=this.__data__,r=tt(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},J.prototype.clear=function(){this.size=0,this.__data__={hash:new G,map:new(H||Z),string:new G}},J.prototype.delete=function(t){var e=ut(this,t).delete(t);return this.size-=e?1:0,e},J.prototype.get=function(t){return ut(this,t).get(t)},J.prototype.has=function(t){return ut(this,t).has(t)},J.prototype.set=function(t,e){var n=ut(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Y.prototype.clear=function(){this.__data__=new Z,this.size=0},Y.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Y.prototype.get=function(t){return this.__data__.get(t)},Y.prototype.has=function(t){return this.__data__.has(t)},Y.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Z){var r=n.__data__;if(!H||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new J(r)}return n.set(t,e),this.size=n.size,this};function nt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":q&&q in Object(t)?function(t){var e=I.call(t,q),n=t[q];try{t[q]=void 0;var r=!0}catch(t){}var i=E.call(t);return r&&(e?t[q]=n:delete t[q]),i}(t):function(t){return E.call(t)}(t)}function rt(t){return bt(t)&&nt(t)==o}function it(t,e,n,r,i){t!==e&&function(t,e,n){for(var r=-1,i=Object(t),o=n(t),u=o.length;u--;){var a=o[++r];if(!1===e(i[a],a,i))break}}(e,function(o,u){if(i||(i=new Y),mt(o))!function(t,e,n,r,i,o,u){var c=ft(t,n),s=ft(e,n),f=u.get(s);if(f)Q(t,n,f);else{var l,p,h,d,v,_=o?o(c,s,n+\"\",t,e,u):void 0,y=void 0===_;if(y){var g=dt(s),m=!g&&_t(s),b=!g&&!m&&wt(s);_=s,g||m||b?dt(c)?_=c:bt(v=c)&&vt(v)?_=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}(c):m?(y=!1,_=function(t){return t.slice()}(s)):b?(y=!1,d=new(h=(l=s).buffer).constructor(h.byteLength),new M(d).set(new M(h)),p=d,_=new l.constructor(p,l.byteOffset,l.length)):_=[]:function(t){if(!bt(t)||nt(t)!=a)return!1;var e=U(t);if(null===e)return!0;var n=I.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&C.call(n)==P}(s)||ht(s)?(_=c,ht(c)?_=function(t){return function(t,e,n){var r=!n;n||(n={});for(var i=-1,o=e.length;++i<o;){var u=e[i],a=void 0;void 0===a&&(a=t[u]),r?et(n,u,a):X(n,u,a)}return n}(t,jt(t))}(c):mt(c)&&!yt(c)||(_=function(t){return\"function\"!=typeof t.constructor||st(t)?{}:K(U(t))}(s))):y=!1}y&&(u.set(s,_),i(_,s,r,o,u),u.delete(s)),Q(t,n,_)}}(t,e,u,n,it,r,i);else{var c=r?r(ft(t,u),o,u+\"\",t,e,i):void 0;void 0===c&&(c=o),Q(t,u,c)}},jt)}var ot=B?function(t,e){return B(t,\"toString\",{configurable:!0,enumerable:!1,value:(n=e,function(){return n}),writable:!0});var n}:Ot;function ut(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function at(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!mt(t)||function(t){return!!k&&k in t}(t))&&(yt(t)?R:c).test(function(t){if(null!=t){try{return C.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(n)?n:void 0}function ct(t,e){var n=typeof t;return!!(e=e??i)&&(\"number\"==n||\"symbol\"!=n&&s.test(t))&&t>-1&&t%1==0&&t<e}function st(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||O)}function ft(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var lt=function(t){var e=0,n=0;return function(){var r=W(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ot);function pt(t,e){return t===e||t!=t&&e!=e}var ht=rt(function(){return arguments}())?rt:function(t){return bt(t)&&I.call(t,\"callee\")&&!N.call(t,\"callee\")},dt=Array.isArray;function vt(t){return null!=t&&gt(t.length)&&!yt(t)}var _t=L||function(){return!1};function yt(t){if(!mt(t))return!1;var e=nt(t);return e==u||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function mt(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=j?function(t){return function(e){return t(e)}}(j):function(t){return bt(t)&&gt(t.length)&&!!f[nt(t)]};function jt(t){return vt(t)?function(t,e){var n=dt(t),r=!n&&ht(t),i=!n&&!r&&_t(t),o=!n&&!r&&!i&&wt(t),u=n||r||i||o,a=u?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],c=a.length;for(var s in t)!e&&!I.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||ct(s,c))||a.push(s);return a}(t,!0):function(t){if(!mt(t))return function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}(t);var e=st(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&I.call(t,r))&&n.push(r);return n}(t)}var St,xt=(St=function(t,e,n){it(t,e,n)},function(t,e){return lt(function(t,e,n){return e=$(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=$(r.length-e,0),u=Array(o);++i<o;)u[i]=r[e+i];i=-1;for(var a=Array(e+1);++i<e;)a[i]=r[i];return a[e]=n(u),function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}(t,this,a)}}(t,e,Ot),t+\"\")}(function(t,e){var n=-1,r=e.length,i=r>1?e[r-1]:void 0,o=r>2?e[2]:void 0;for(i=St.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,e,n){if(!mt(n))return!1;var r=typeof e;return!!(\"number\"==r?vt(n)&&ct(e,n.length):\"string\"==r&&e in n)&&pt(n[e],t)}(e[0],e[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++n<r;){var u=e[n];u&&St(t,u,n)}return t}));function Ot(t){return t}t.exports=xt},9440(t,e,n){t=n.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,s=1/0,f=9007199254740991,l=NaN,p=4294967295,h=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",v=\"[object Array]\",_=\"[object Boolean]\",y=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",j=\"[object Number]\",S=\"[object Object]\",x=\"[object Promise]\",O=\"[object RegExp]\",A=\"[object Set]\",C=\"[object String]\",I=\"[object Symbol]\",k=\"[object WeakMap]\",E=\"[object ArrayBuffer]\",P=\"[object DataView]\",R=\"[object Float32Array]\",T=\"[object Float64Array]\",z=\"[object Int8Array]\",M=\"[object Int16Array]\",U=\"[object Int32Array]\",F=\"[object Uint8Array]\",N=\"[object Uint8ClampedArray]\",D=\"[object Uint16Array]\",q=\"[object Uint32Array]\",B=/\\b__p \\+= '';/g,L=/\\b(__p \\+=) '' \\+/g,$=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,W=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,V=RegExp(W.source),K=RegExp(H.source),G=/<%-([\\s\\S]+?)%>/g,Z=/<%([\\s\\S]+?)%>/g,J=/<%=([\\s\\S]+?)%>/g,Y=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,et=RegExp(tt.source),nt=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,vt=/^0o[0-7]+$/i,_t=/^(?:0|[1-9]\\d*)$/,yt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",jt=\"\\\\u2700-\\\\u27bf\",St=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",xt=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ot=\"\\\\ufe0e\\\\ufe0f\",At=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Ct=\"[\"+bt+\"]\",It=\"[\"+At+\"]\",kt=\"[\"+wt+\"]\",Et=\"\\\\d+\",Pt=\"[\"+jt+\"]\",Rt=\"[\"+St+\"]\",Tt=\"[^\"+bt+At+Et+jt+St+xt+\"]\",zt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Mt=\"[^\"+bt+\"]\",Ut=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ft=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Nt=\"[\"+xt+\"]\",Dt=\"\\\\u200d\",qt=\"(?:\"+Rt+\"|\"+Tt+\")\",Bt=\"(?:\"+Nt+\"|\"+Tt+\")\",Lt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",$t=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Wt=\"(?:\"+kt+\"|\"+zt+\")?\",Ht=\"[\"+Ot+\"]?\",Vt=Ht+Wt+\"(?:\"+Dt+\"(?:\"+[Mt,Ut,Ft].join(\"|\")+\")\"+Ht+Wt+\")*\",Kt=\"(?:\"+[Pt,Ut,Ft].join(\"|\")+\")\"+Vt,Gt=\"(?:\"+[Mt+kt+\"?\",kt,Ut,Ft,Ct].join(\"|\")+\")\",Zt=RegExp(\"['’]\",\"g\"),Jt=RegExp(kt,\"g\"),Yt=RegExp(zt+\"(?=\"+zt+\")|\"+Gt+Vt,\"g\"),Qt=RegExp([Nt+\"?\"+Rt+\"+\"+Lt+\"(?=\"+[It,Nt,\"$\"].join(\"|\")+\")\",Bt+\"+\"+$t+\"(?=\"+[It,Nt+qt,\"$\"].join(\"|\")+\")\",Nt+\"?\"+qt+\"+\"+Lt,Nt+\"+\"+$t,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Et,Kt].join(\"|\"),\"g\"),Xt=RegExp(\"[\"+Dt+bt+wt+Ot+\"]\"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ne=-1,re={};re[R]=re[T]=re[z]=re[M]=re[U]=re[F]=re[N]=re[D]=re[q]=!0,re[d]=re[v]=re[E]=re[_]=re[P]=re[y]=re[g]=re[m]=re[w]=re[j]=re[S]=re[O]=re[A]=re[C]=re[k]=!1;var ie={};ie[d]=ie[v]=ie[E]=ie[P]=ie[_]=ie[y]=ie[R]=ie[T]=ie[z]=ie[M]=ie[U]=ie[w]=ie[j]=ie[S]=ie[O]=ie[A]=ie[C]=ie[I]=ie[F]=ie[N]=ie[D]=ie[q]=!0,ie[g]=ie[m]=ie[k]=!1;var oe={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ue=parseFloat,ae=parseInt,ce=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,se=\"object\"==typeof self&&self&&self.Object===Object&&self,fe=ce||se||Function(\"return this\")(),le=e&&!e.nodeType&&e,pe=le&&t&&!t.nodeType&&t,he=pe&&pe.exports===le,de=he&&ce.process,ve=function(){try{return pe&&pe.require&&pe.require(\"util\").types||de&&de.binding&&de.binding(\"util\")}catch(t){}}(),_e=ve&&ve.isArrayBuffer,ye=ve&&ve.isDate,ge=ve&&ve.isMap,me=ve&&ve.isRegExp,be=ve&&ve.isSet,we=ve&&ve.isTypedArray;function je(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Se(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];e(r,u,n(u),t)}return r}function xe(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function Oe(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function Ae(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function Ce(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var u=t[n];e(u,n,t)&&(o[i++]=u)}return o}function Ie(t,e){return!(null==t||!t.length)&&Ne(t,e,0)>-1}function ke(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function Ee(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function Pe(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function Re(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function Te(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function ze(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var Me=Le(\"length\");function Ue(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function Fe(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function Ne(t,e,n){return e==e?function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):Fe(t,qe,n)}function De(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function qe(t){return t!=t}function Be(t,e){var n=null==t?0:t.length;return n?He(t,e)/n:l}function Le(t){return function(e){return null==e?r:e[t]}}function $e(t){return function(e){return null==t?r:t[e]}}function We(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function He(t,e){for(var n,i=-1,o=t.length;++i<o;){var u=e(t[i]);u!==r&&(n=n===r?u:n+u)}return n}function Ve(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function Ke(t){return t?t.slice(0,ln(t)+1).replace(nt,\"\"):t}function Ge(t){return function(e){return t(e)}}function Ze(t,e){return Ee(e,function(e){return t[e]})}function Je(t,e){return t.has(e)}function Ye(t,e){for(var n=-1,r=t.length;++n<r&&Ne(e,t[n],0)>-1;);return n}function Qe(t,e){for(var n=t.length;n--&&Ne(e,t[n],0)>-1;);return n}var Xe=$e({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tn=$e({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function en(t){return\"\\\\\"+oe[t]}function nn(t){return Xt.test(t)}function rn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function on(t,e){return function(n){return t(e(n))}}function un(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n];a!==e&&a!==u||(t[n]=u,o[i++]=n)}return o}function an(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function cn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function sn(t){return nn(t)?function(t){for(var e=Yt.lastIndex=0;Yt.test(t);)++e;return e}(t):Me(t)}function fn(t){return nn(t)?function(t){return t.match(Yt)||[]}(t):function(t){return t.split(\"\")}(t)}function ln(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}var pn=$e({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),hn=function t(e){var n,rt=(e=null==e?fe:hn.defaults(fe.Object(),e,hn.pick(fe,ee))).Array,bt=e.Date,wt=e.Error,jt=e.Function,St=e.Math,xt=e.Object,Ot=e.RegExp,At=e.String,Ct=e.TypeError,It=rt.prototype,kt=jt.prototype,Et=xt.prototype,Pt=e[\"__core-js_shared__\"],Rt=kt.toString,Tt=Et.hasOwnProperty,zt=0,Mt=(n=/[^.]+$/.exec(Pt&&Pt.keys&&Pt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Ut=Et.toString,Ft=Rt.call(xt),Nt=fe._,Dt=Ot(\"^\"+Rt.call(Tt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),qt=he?e.Buffer:r,Bt=e.Symbol,Lt=e.Uint8Array,$t=qt?qt.allocUnsafe:r,Wt=on(xt.getPrototypeOf,xt),Ht=xt.create,Vt=Et.propertyIsEnumerable,Kt=It.splice,Gt=Bt?Bt.isConcatSpreadable:r,Yt=Bt?Bt.iterator:r,Xt=Bt?Bt.toStringTag:r,oe=function(){try{var t=co(xt,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ce=e.clearTimeout!==fe.clearTimeout&&e.clearTimeout,se=bt&&bt.now!==fe.Date.now&&bt.now,le=e.setTimeout!==fe.setTimeout&&e.setTimeout,pe=St.ceil,de=St.floor,ve=xt.getOwnPropertySymbols,Me=qt?qt.isBuffer:r,$e=e.isFinite,dn=It.join,vn=on(xt.keys,xt),_n=St.max,yn=St.min,gn=bt.now,mn=e.parseInt,bn=St.random,wn=It.reverse,jn=co(e,\"DataView\"),Sn=co(e,\"Map\"),xn=co(e,\"Promise\"),On=co(e,\"Set\"),An=co(e,\"WeakMap\"),Cn=co(xt,\"create\"),In=An&&new An,kn={},En=Fo(jn),Pn=Fo(Sn),Rn=Fo(xn),Tn=Fo(On),zn=Fo(An),Mn=Bt?Bt.prototype:r,Un=Mn?Mn.valueOf:r,Fn=Mn?Mn.toString:r;function Nn(t){if(ta(t)&&!$u(t)&&!(t instanceof Ln)){if(t instanceof Bn)return t;if(Tt.call(t,\"__wrapped__\"))return No(t)}return new Bn(t)}var Dn=function(){function t(){}return function(e){if(!Xu(e))return{};if(Ht)return Ht(e);t.prototype=e;var n=new t;return t.prototype=r,n}}();function qn(){}function Bn(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=r}function Ln(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function $n(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Wn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Hn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Vn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Hn;++e<n;)this.add(t[e])}function Kn(t){var e=this.__data__=new Wn(t);this.size=e.size}function Gn(t,e){var n=$u(t),r=!n&&Lu(t),i=!n&&!r&&Ku(t),o=!n&&!r&&!i&&ca(t),u=n||r||i||o,a=u?Ve(t.length,At):[],c=a.length;for(var s in t)!e&&!Tt.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||_o(s,c))||a.push(s);return a}function Zn(t){var e=t.length;return e?t[Hr(0,e-1)]:r}function Jn(t,e){return Ro(Ai(t),or(e,0,t.length))}function Yn(t){return Ro(Ai(t))}function Qn(t,e,n){(n!==r&&!Du(t[e],n)||n===r&&!(e in t))&&rr(t,e,n)}function Xn(t,e,n){var i=t[e];Tt.call(t,e)&&Du(i,n)&&(n!==r||e in t)||rr(t,e,n)}function tr(t,e){for(var n=t.length;n--;)if(Du(t[n][0],e))return n;return-1}function er(t,e,n,r){return fr(t,function(t,i,o){e(r,t,n(t),o)}),r}function nr(t,e){return t&&Ci(e,Ea(e),t)}function rr(t,e,n){\"__proto__\"==e&&oe?oe(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function ir(t,e){for(var n=-1,i=e.length,o=rt(i),u=null==t;++n<i;)o[n]=u?r:Oa(t,e[n]);return o}function or(t,e,n){return t==t&&(n!==r&&(t=t<=n?t:n),e!==r&&(t=t>=e?t:e)),t}function ur(t,e,n,i,o,u){var a,c=1&e,s=2&e,f=4&e;if(n&&(a=o?n(t,i,o,u):n(t)),a!==r)return a;if(!Xu(t))return t;var l=$u(t);if(l){if(a=function(t){var e=t.length,n=new t.constructor(e);return e&&\"string\"==typeof t[0]&&Tt.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}(t),!c)return Ai(t,a)}else{var p=lo(t),h=p==m||p==b;if(Ku(t))return bi(t,c);if(p==S||p==d||h&&!o){if(a=s||h?{}:ho(t),!c)return s?function(t,e){return Ci(t,fo(t),e)}(t,function(t,e){return t&&Ci(e,Pa(e),t)}(a,t)):function(t,e){return Ci(t,so(t),e)}(t,nr(a,t))}else{if(!ie[p])return o?t:{};a=function(t,e,n){var r,i=t.constructor;switch(e){case E:return wi(t);case _:case y:return new i(+t);case P:return function(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case R:case T:case z:case M:case U:case F:case N:case D:case q:return ji(t,n);case w:return new i;case j:case C:return new i(t);case O:return function(t){var e=new t.constructor(t.source,lt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case A:return new i;case I:return r=t,Un?xt(Un.call(r)):{}}}(t,p,c)}}u||(u=new Kn);var v=u.get(t);if(v)return v;u.set(t,a),oa(t)?t.forEach(function(r){a.add(ur(r,e,n,r,t,u))}):ea(t)&&t.forEach(function(r,i){a.set(i,ur(r,e,n,i,t,u))});var g=l?r:(f?s?eo:to:s?Pa:Ea)(t);return xe(g||t,function(r,i){g&&(r=t[i=r]),Xn(a,i,ur(r,e,n,i,t,u))}),a}function ar(t,e,n){var i=n.length;if(null==t)return!i;for(t=xt(t);i--;){var o=n[i],u=e[o],a=t[o];if(a===r&&!(o in t)||!u(a))return!1}return!0}function cr(t,e,n){if(\"function\"!=typeof t)throw new Ct(i);return Io(function(){t.apply(r,n)},e)}function sr(t,e,n,r){var i=-1,o=Ie,u=!0,a=t.length,c=[],s=e.length;if(!a)return c;n&&(e=Ee(e,Ge(n))),r?(o=ke,u=!1):e.length>=200&&(o=Je,u=!1,e=new Vn(e));t:for(;++i<a;){var f=t[i],l=null==n?f:n(f);if(f=r||0!==f?f:0,u&&l==l){for(var p=s;p--;)if(e[p]===l)continue t;c.push(f)}else o(e,l,r)||c.push(f)}return c}Nn.templateSettings={escape:G,evaluate:Z,interpolate:J,variable:\"\",imports:{_:Nn}},Nn.prototype=qn.prototype,Nn.prototype.constructor=Nn,Bn.prototype=Dn(qn.prototype),Bn.prototype.constructor=Bn,Ln.prototype=Dn(qn.prototype),Ln.prototype.constructor=Ln,$n.prototype.clear=function(){this.__data__=Cn?Cn(null):{},this.size=0},$n.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},$n.prototype.get=function(t){var e=this.__data__;if(Cn){var n=e[t];return n===o?r:n}return Tt.call(e,t)?e[t]:r},$n.prototype.has=function(t){var e=this.__data__;return Cn?e[t]!==r:Tt.call(e,t)},$n.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=Cn&&e===r?o:e,this},Wn.prototype.clear=function(){this.__data__=[],this.size=0},Wn.prototype.delete=function(t){var e=this.__data__,n=tr(e,t);return!(n<0||(n==e.length-1?e.pop():Kt.call(e,n,1),--this.size,0))},Wn.prototype.get=function(t){var e=this.__data__,n=tr(e,t);return n<0?r:e[n][1]},Wn.prototype.has=function(t){return tr(this.__data__,t)>-1},Wn.prototype.set=function(t,e){var n=this.__data__,r=tr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Hn.prototype.clear=function(){this.size=0,this.__data__={hash:new $n,map:new(Sn||Wn),string:new $n}},Hn.prototype.delete=function(t){var e=uo(this,t).delete(t);return this.size-=e?1:0,e},Hn.prototype.get=function(t){return uo(this,t).get(t)},Hn.prototype.has=function(t){return uo(this,t).has(t)},Hn.prototype.set=function(t,e){var n=uo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Vn.prototype.add=Vn.prototype.push=function(t){return this.__data__.set(t,o),this},Vn.prototype.has=function(t){return this.__data__.has(t)},Kn.prototype.clear=function(){this.__data__=new Wn,this.size=0},Kn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Kn.prototype.get=function(t){return this.__data__.get(t)},Kn.prototype.has=function(t){return this.__data__.has(t)},Kn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Wn){var r=n.__data__;if(!Sn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Hn(r)}return n.set(t,e),this.size=n.size,this};var fr=Ei(gr),lr=Ei(mr,!0);function pr(t,e){var n=!0;return fr(t,function(t,r,i){return n=!!e(t,r,i)}),n}function hr(t,e,n){for(var i=-1,o=t.length;++i<o;){var u=t[i],a=e(u);if(null!=a&&(c===r?a==a&&!aa(a):n(a,c)))var c=a,s=u}return s}function dr(t,e){var n=[];return fr(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function vr(t,e,n,r,i){var o=-1,u=t.length;for(n||(n=vo),i||(i=[]);++o<u;){var a=t[o];e>0&&n(a)?e>1?vr(a,e-1,n,r,i):Pe(i,a):r||(i[i.length]=a)}return i}var _r=Pi(),yr=Pi(!0);function gr(t,e){return t&&_r(t,e,Ea)}function mr(t,e){return t&&yr(t,e,Ea)}function br(t,e){return Ce(e,function(e){return Ju(t[e])})}function wr(t,e){for(var n=0,i=(e=_i(e,t)).length;null!=t&&n<i;)t=t[Uo(e[n++])];return n&&n==i?t:r}function jr(t,e,n){var r=e(t);return $u(t)?r:Pe(r,n(t))}function Sr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Xt&&Xt in xt(t)?function(t){var e=Tt.call(t,Xt),n=t[Xt];try{t[Xt]=r;var i=!0}catch(t){}var o=Ut.call(t);return i&&(e?t[Xt]=n:delete t[Xt]),o}(t):function(t){return Ut.call(t)}(t)}function xr(t,e){return t>e}function Or(t,e){return null!=t&&Tt.call(t,e)}function Ar(t,e){return null!=t&&e in xt(t)}function Cr(t,e,n){for(var i=n?ke:Ie,o=t[0].length,u=t.length,a=u,c=rt(u),s=1/0,f=[];a--;){var l=t[a];a&&e&&(l=Ee(l,Ge(e))),s=yn(l.length,s),c[a]=!n&&(e||o>=120&&l.length>=120)?new Vn(a&&l):r}l=t[0];var p=-1,h=c[0];t:for(;++p<o&&f.length<s;){var d=l[p],v=e?e(d):d;if(d=n||0!==d?d:0,!(h?Je(h,v):i(f,v,n))){for(a=u;--a;){var _=c[a];if(!(_?Je(_,v):i(t[a],v,n)))continue t}h&&h.push(v),f.push(d)}}return f}function Ir(t,e,n){var i=null==(t=Oo(t,e=_i(e,t)))?t:t[Uo(Zo(e))];return null==i?r:je(i,t,n)}function kr(t){return ta(t)&&Sr(t)==d}function Er(t,e,n,i,o){return t===e||(null==t||null==e||!ta(t)&&!ta(e)?t!=t&&e!=e:function(t,e,n,i,o,u){var a=$u(t),c=$u(e),s=a?v:lo(t),f=c?v:lo(e),l=(s=s==d?S:s)==S,p=(f=f==d?S:f)==S,h=s==f;if(h&&Ku(t)){if(!Ku(e))return!1;a=!0,l=!1}if(h&&!l)return u||(u=new Kn),a||ca(t)?Qi(t,e,n,i,o,u):function(t,e,n,r,i,o,u){switch(n){case P:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case E:return!(t.byteLength!=e.byteLength||!o(new Lt(t),new Lt(e)));case _:case y:case j:return Du(+t,+e);case g:return t.name==e.name&&t.message==e.message;case O:case C:return t==e+\"\";case w:var a=rn;case A:var c=1&r;if(a||(a=an),t.size!=e.size&&!c)return!1;var s=u.get(t);if(s)return s==e;r|=2,u.set(t,e);var f=Qi(a(t),a(e),r,i,o,u);return u.delete(t),f;case I:if(Un)return Un.call(t)==Un.call(e)}return!1}(t,e,s,n,i,o,u);if(!(1&n)){var m=l&&Tt.call(t,\"__wrapped__\"),b=p&&Tt.call(e,\"__wrapped__\");if(m||b){var x=m?t.value():t,k=b?e.value():e;return u||(u=new Kn),o(x,k,n,i,u)}}return!!h&&(u||(u=new Kn),function(t,e,n,i,o,u){var a=1&n,c=to(t),s=c.length;if(s!=to(e).length&&!a)return!1;for(var f=s;f--;){var l=c[f];if(!(a?l in e:Tt.call(e,l)))return!1}var p=u.get(t),h=u.get(e);if(p&&h)return p==e&&h==t;var d=!0;u.set(t,e),u.set(e,t);for(var v=a;++f<s;){var _=t[l=c[f]],y=e[l];if(i)var g=a?i(y,_,l,e,t,u):i(_,y,l,t,e,u);if(!(g===r?_===y||o(_,y,n,i,u):g)){d=!1;break}v||(v=\"constructor\"==l)}if(d&&!v){var m=t.constructor,b=e.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return u.delete(t),u.delete(e),d}(t,e,n,i,o,u))}(t,e,n,i,Er,o))}function Pr(t,e,n,i){var o=n.length,u=o,a=!i;if(null==t)return!u;for(t=xt(t);o--;){var c=n[o];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++o<u;){var s=(c=n[o])[0],f=t[s],l=c[1];if(a&&c[2]){if(f===r&&!(s in t))return!1}else{var p=new Kn;if(i)var h=i(f,l,s,t,e,p);if(!(h===r?Er(l,f,3,i,p):h))return!1}}return!0}function Rr(t){return!(!Xu(t)||(e=t,Mt&&Mt in e))&&(Ju(t)?Dt:dt).test(Fo(t));var e}function Tr(t){return\"function\"==typeof t?t:null==t?nc:\"object\"==typeof t?$u(t)?Nr(t[0],t[1]):Fr(t):lc(t)}function zr(t){if(!wo(t))return vn(t);var e=[];for(var n in xt(t))Tt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function Mr(t,e){return t<e}function Ur(t,e){var n=-1,r=Hu(t)?rt(t.length):[];return fr(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Fr(t){var e=ao(t);return 1==e.length&&e[0][2]?So(e[0][0],e[0][1]):function(n){return n===t||Pr(n,t,e)}}function Nr(t,e){return go(t)&&jo(e)?So(Uo(t),e):function(n){var i=Oa(n,t);return i===r&&i===e?Aa(n,t):Er(e,i,3)}}function Dr(t,e,n,i,o){t!==e&&_r(e,function(u,a){if(o||(o=new Kn),Xu(u))!function(t,e,n,i,o,u,a){var c=Ao(t,n),s=Ao(e,n),f=a.get(s);if(f)Qn(t,n,f);else{var l=u?u(c,s,n+\"\",t,e,a):r,p=l===r;if(p){var h=$u(s),d=!h&&Ku(s),v=!h&&!d&&ca(s);l=s,h||d||v?$u(c)?l=c:Vu(c)?l=Ai(c):d?(p=!1,l=bi(s,!0)):v?(p=!1,l=ji(s,!0)):l=[]:ra(s)||Lu(s)?(l=c,Lu(c)?l=_a(c):Xu(c)&&!Ju(c)||(l=ho(s))):p=!1}p&&(a.set(s,l),o(l,s,i,u,a),a.delete(s)),Qn(t,n,l)}}(t,e,a,n,Dr,i,o);else{var c=i?i(Ao(t,a),u,a+\"\",t,e,o):r;c===r&&(c=u),Qn(t,a,c)}},Pa)}function qr(t,e){var n=t.length;if(n)return _o(e+=e<0?n:0,n)?t[e]:r}function Br(t,e,n){e=e.length?Ee(e,function(t){return $u(t)?function(e){return wr(e,1===t.length?t[0]:t)}:t}):[nc];var r=-1;e=Ee(e,Ge(oo()));var i=Ur(t,function(t,n,i){var o=Ee(e,function(e){return e(t)});return{criteria:o,index:++r,value:t}});return function(t){var e=t.length;for(t.sort(function(t,e){return function(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,u=i.length,a=n.length;++r<u;){var c=Si(i[r],o[r]);if(c)return r>=a?c:c*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)});e--;)t[e]=t[e].value;return t}(i)}function Lr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var u=e[r],a=wr(t,u);n(a,u)&&Jr(o,_i(u,t),a)}return o}function $r(t,e,n,r){var i=r?De:Ne,o=-1,u=e.length,a=t;for(t===e&&(e=Ai(e)),n&&(a=Ee(t,Ge(n)));++o<u;)for(var c=0,s=e[o],f=n?n(s):s;(c=i(a,f,c,r))>-1;)a!==t&&Kt.call(a,c,1),Kt.call(t,c,1);return t}function Wr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;_o(i)?Kt.call(t,i,1):ci(t,i)}}return t}function Hr(t,e){return t+de(bn()*(e-t+1))}function Vr(t,e){var n=\"\";if(!t||e<1||e>f)return n;do{e%2&&(n+=t),(e=de(e/2))&&(t+=t)}while(e);return n}function Kr(t,e){return ko(xo(t,e,nc),t+\"\")}function Gr(t){return Zn(Da(t))}function Zr(t,e){var n=Da(t);return Ro(n,or(e,0,n.length))}function Jr(t,e,n,i){if(!Xu(t))return t;for(var o=-1,u=(e=_i(e,t)).length,a=u-1,c=t;null!=c&&++o<u;){var s=Uo(e[o]),f=n;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(o!=a){var l=c[s];(f=i?i(l,s,c):r)===r&&(f=Xu(l)?l:_o(e[o+1])?[]:{})}Xn(c,s,f),c=c[s]}return t}var Yr=In?function(t,e){return In.set(t,e),t}:nc,Qr=oe?function(t,e){return oe(t,\"toString\",{configurable:!0,enumerable:!1,value:Xa(e),writable:!0})}:nc;function Xr(t){return Ro(Da(t))}function ti(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+e];return o}function ei(t,e){var n;return fr(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ni(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;r<i;){var o=r+i>>>1,u=t[o];null!==u&&!aa(u)&&(n?u<=e:u<e)?r=o+1:i=o}return i}return ri(t,e,nc,n)}function ri(t,e,n,i){var o=0,u=null==t?0:t.length;if(0===u)return 0;for(var a=(e=n(e))!=e,c=null===e,s=aa(e),f=e===r;o<u;){var l=de((o+u)/2),p=n(t[l]),h=p!==r,d=null===p,v=p==p,_=aa(p);if(a)var y=i||v;else y=f?v&&(i||h):c?v&&h&&(i||!d):s?v&&h&&!d&&(i||!_):!d&&!_&&(i?p<=e:p<e);y?o=l+1:u=l}return yn(u,4294967294)}function ii(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n],a=e?e(u):u;if(!n||!Du(a,c)){var c=a;o[i++]=0===u?0:u}}return o}function oi(t){return\"number\"==typeof t?t:aa(t)?l:+t}function ui(t){if(\"string\"==typeof t)return t;if($u(t))return Ee(t,ui)+\"\";if(aa(t))return Fn?Fn.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function ai(t,e,n){var r=-1,i=Ie,o=t.length,u=!0,a=[],c=a;if(n)u=!1,i=ke;else if(o>=200){var s=e?null:Vi(t);if(s)return an(s);u=!1,i=Je,c=new Vn}else c=e?[]:a;t:for(;++r<o;){var f=t[r],l=e?e(f):f;if(f=n||0!==f?f:0,u&&l==l){for(var p=c.length;p--;)if(c[p]===l)continue t;e&&c.push(l),a.push(f)}else i(c,l,n)||(c!==a&&c.push(l),a.push(f))}return a}function ci(t,e){var n=-1,r=(e=_i(e,t)).length;if(!r)return!0;for(;++n<r;){var i=Uo(e[n]);if(\"__proto__\"===i&&!Tt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Oo(t,e);return null==o||delete o[Uo(Zo(e))]}function si(t,e,n,r){return Jr(t,e,n(wr(t,e)),r)}function fi(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function li(t,e){var n=t;return n instanceof Ln&&(n=n.value()),Re(e,function(t,e){return e.func.apply(e.thisArg,Pe([t],e.args))},n)}function pi(t,e,n){var r=t.length;if(r<2)return r?ai(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var u=t[i],a=-1;++a<r;)a!=i&&(o[i]=sr(o[i]||u,t[a],e,n));return ai(vr(o,1),e,n)}function hi(t,e,n){for(var i=-1,o=t.length,u=e.length,a={};++i<o;){var c=i<u?e[i]:r;n(a,t[i],c)}return a}function di(t){return Vu(t)?t:[]}function vi(t){return\"function\"==typeof t?t:nc}function _i(t,e){return $u(t)?t:go(t,e)?[t]:Mo(ya(t))}var yi=Kr;function gi(t,e,n){var i=t.length;return n=n===r?i:n,!e&&n>=i?t:ti(t,e,n)}var mi=ce||function(t){return fe.clearTimeout(t)};function bi(t,e){if(e)return t.slice();var n=t.length,r=$t?$t(n):new t.constructor(n);return t.copy(r),r}function wi(t){var e=new t.constructor(t.byteLength);return new Lt(e).set(new Lt(t)),e}function ji(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Si(t,e){if(t!==e){var n=t!==r,i=null===t,o=t==t,u=aa(t),a=e!==r,c=null===e,s=e==e,f=aa(e);if(!c&&!f&&!u&&t>e||u&&a&&s&&!c&&!f||i&&a&&s||!n&&s||!o)return 1;if(!i&&!u&&!f&&t<e||f&&n&&o&&!i&&!u||c&&n&&o||!a&&o||!s)return-1}return 0}function xi(t,e,n,r){for(var i=-1,o=t.length,u=n.length,a=-1,c=e.length,s=_n(o-u,0),f=rt(c+s),l=!r;++a<c;)f[a]=e[a];for(;++i<u;)(l||i<o)&&(f[n[i]]=t[i]);for(;s--;)f[a++]=t[i++];return f}function Oi(t,e,n,r){for(var i=-1,o=t.length,u=-1,a=n.length,c=-1,s=e.length,f=_n(o-a,0),l=rt(f+s),p=!r;++i<f;)l[i]=t[i];for(var h=i;++c<s;)l[h+c]=e[c];for(;++u<a;)(p||i<o)&&(l[h+n[u]]=t[i++]);return l}function Ai(t,e){var n=-1,r=t.length;for(e||(e=rt(r));++n<r;)e[n]=t[n];return e}function Ci(t,e,n,i){var o=!n;n||(n={});for(var u=-1,a=e.length;++u<a;){var c=e[u],s=i?i(n[c],t[c],c,n,t):r;s===r&&(s=t[c]),o?rr(n,c,s):Xn(n,c,s)}return n}function Ii(t,e){return function(n,r){var i=$u(n)?Se:er,o=e?e():{};return i(n,t,oo(r,2),o)}}function ki(t){return Kr(function(e,n){var i=-1,o=n.length,u=o>1?n[o-1]:r,a=o>2?n[2]:r;for(u=t.length>3&&\"function\"==typeof u?(o--,u):r,a&&yo(n[0],n[1],a)&&(u=o<3?r:u,o=1),e=xt(e);++i<o;){var c=n[i];c&&t(e,c,i,u)}return e})}function Ei(t,e){return function(n,r){if(null==n)return n;if(!Hu(n))return t(n,r);for(var i=n.length,o=e?i:-1,u=xt(n);(e?o--:++o<i)&&!1!==r(u[o],o,u););return n}}function Pi(t){return function(e,n,r){for(var i=-1,o=xt(e),u=r(e),a=u.length;a--;){var c=u[t?a:++i];if(!1===n(o[c],c,o))break}return e}}function Ri(t){return function(e){var n=nn(e=ya(e))?fn(e):r,i=n?n[0]:e.charAt(0),o=n?gi(n,1).join(\"\"):e.slice(1);return i[t]()+o}}function Ti(t){return function(e){return Re(Ja(La(e).replace(Zt,\"\")),t,\"\")}}function zi(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Dn(t.prototype),r=t.apply(n,e);return Xu(r)?r:n}}function Mi(t){return function(e,n,i){var o=xt(e);if(!Hu(e)){var u=oo(n,3);e=Ea(e),n=function(t){return u(o[t],t,o)}}var a=t(e,n,i);return a>-1?o[u?e[a]:a]:r}}function Ui(t){return Xi(function(e){var n=e.length,o=n,u=Bn.prototype.thru;for(t&&e.reverse();o--;){var a=e[o];if(\"function\"!=typeof a)throw new Ct(i);if(u&&!c&&\"wrapper\"==ro(a))var c=new Bn([],!0)}for(o=c?o:n;++o<n;){var s=ro(a=e[o]),f=\"wrapper\"==s?no(a):r;c=f&&mo(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?c[ro(f[0])].apply(c,f[3]):1==a.length&&mo(a)?c[s]():c.thru(a)}return function(){var t=arguments,r=t[0];if(c&&1==t.length&&$u(r))return c.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Fi(t,e,n,i,o,u,a,s,f,l){var p=e&c,h=1&e,d=2&e,v=24&e,_=512&e,y=d?r:zi(t);return function c(){for(var g=arguments.length,m=rt(g),b=g;b--;)m[b]=arguments[b];if(v)var w=io(c),j=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(m,w);if(i&&(m=xi(m,i,o,v)),u&&(m=Oi(m,u,a,v)),g-=j,v&&g<l){var S=un(m,w);return Wi(t,e,Fi,c.placeholder,n,m,S,s,f,l-g)}var x=h?n:this,O=d?x[t]:t;return g=m.length,s?m=function(t,e){for(var n=t.length,i=yn(e.length,n),o=Ai(t);i--;){var u=e[i];t[i]=_o(u,n)?o[u]:r}return t}(m,s):_&&g>1&&m.reverse(),p&&f<g&&(m.length=f),this&&this!==fe&&this instanceof c&&(O=y||zi(O)),O.apply(x,m)}}function Ni(t,e){return function(n,r){return function(t,e,n,r){return gr(t,function(t,i,o){e(r,n(t),i,o)}),r}(n,t,e(r),{})}}function Di(t,e){return function(n,i){var o;if(n===r&&i===r)return e;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ui(n),i=ui(i)):(n=oi(n),i=oi(i)),o=t(n,i)}return o}}function qi(t){return Xi(function(e){return e=Ee(e,Ge(oo())),Kr(function(n){var r=this;return t(e,function(t){return je(t,r,n)})})})}function Bi(t,e){var n=(e=e===r?\" \":ui(e)).length;if(n<2)return n?Vr(e,t):e;var i=Vr(e,pe(t/sn(e)));return nn(e)?gi(fn(i),0,t).join(\"\"):i.slice(0,t)}function Li(t){return function(e,n,i){return i&&\"number\"!=typeof i&&yo(e,n,i)&&(n=i=r),e=pa(e),n===r?(n=e,e=0):n=pa(n),function(t,e,n,r){for(var i=-1,o=_n(pe((e-t)/(n||1)),0),u=rt(o);o--;)u[r?o:++i]=t,t+=n;return u}(e,n,i=i===r?e<n?1:-1:pa(i),t)}}function $i(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=va(e),n=va(n)),t(e,n)}}function Wi(t,e,n,i,o,u,c,s,f,l){var p=8&e;e|=p?a:64,4&(e&=~(p?64:a))||(e&=-4);var h=[t,e,o,p?u:r,p?c:r,p?r:u,p?r:c,s,f,l],d=n.apply(r,h);return mo(t)&&Co(d,h),d.placeholder=i,Eo(d,t,e)}function Hi(t){var e=St[t];return function(t,n){if(t=va(t),(n=null==n?0:yn(ha(n),292))&&$e(t)){var r=(ya(t)+\"e\").split(\"e\");return+((r=(ya(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var Vi=On&&1/an(new On([,-0]))[1]==s?function(t){return new On(t)}:ac;function Ki(t){return function(e){var n=lo(e);return n==w?rn(e):n==A?cn(e):function(t,e){return Ee(e,function(e){return[e,t[e]]})}(e,t(e))}}function Gi(t,e,n,o,s,f,l,p){var h=2&e;if(!h&&\"function\"!=typeof t)throw new Ct(i);var d=o?o.length:0;if(d||(e&=-97,o=s=r),l=l===r?l:_n(ha(l),0),p=p===r?p:ha(p),d-=s?s.length:0,64&e){var v=o,_=s;o=s=r}var y=h?r:no(t),g=[t,e,n,o,s,v,_,f,l,p];if(y&&function(t,e){var n=t[1],r=e[1],i=n|r,o=i<131,a=r==c&&8==n||r==c&&256==n&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!o&&!a)return t;1&r&&(t[2]=e[2],i|=1&n?0:4);var s=e[3];if(s){var f=t[3];t[3]=f?xi(f,s,e[4]):s,t[4]=f?un(t[3],u):e[4]}(s=e[5])&&(f=t[5],t[5]=f?Oi(f,s,e[6]):s,t[6]=f?un(t[5],u):e[6]),(s=e[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?e[8]:yn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i}(g,y),t=g[0],e=g[1],n=g[2],o=g[3],s=g[4],!(p=g[9]=g[9]===r?h?0:t.length:_n(g[9]-d,0))&&24&e&&(e&=-25),e&&1!=e)m=8==e||16==e?function(t,e,n){var i=zi(t);return function o(){for(var u=arguments.length,a=rt(u),c=u,s=io(o);c--;)a[c]=arguments[c];var f=u<3&&a[0]!==s&&a[u-1]!==s?[]:un(a,s);return(u-=f.length)<n?Wi(t,e,Fi,o.placeholder,r,a,f,r,r,n-u):je(this&&this!==fe&&this instanceof o?i:t,this,a)}}(t,e,p):e!=a&&33!=e||s.length?Fi.apply(r,g):function(t,e,n,r){var i=1&e,o=zi(t);return function e(){for(var u=-1,a=arguments.length,c=-1,s=r.length,f=rt(s+a),l=this&&this!==fe&&this instanceof e?o:t;++c<s;)f[c]=r[c];for(;a--;)f[c++]=arguments[++u];return je(l,i?n:this,f)}}(t,e,n,o);else var m=function(t,e,n){var r=1&e,i=zi(t);return function e(){return(this&&this!==fe&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return Eo((y?Yr:Co)(m,g),t,e)}function Zi(t,e,n,i){return t===r||Du(t,Et[n])&&!Tt.call(i,n)?e:t}function Ji(t,e,n,i,o,u){return Xu(t)&&Xu(e)&&(u.set(e,t),Dr(t,e,r,Ji,u),u.delete(e)),t}function Yi(t){return ra(t)?r:t}function Qi(t,e,n,i,o,u){var a=1&n,c=t.length,s=e.length;if(c!=s&&!(a&&s>c))return!1;var f=u.get(t),l=u.get(e);if(f&&l)return f==e&&l==t;var p=-1,h=!0,d=2&n?new Vn:r;for(u.set(t,e),u.set(e,t);++p<c;){var v=t[p],_=e[p];if(i)var y=a?i(_,v,p,e,t,u):i(v,_,p,t,e,u);if(y!==r){if(y)continue;h=!1;break}if(d){if(!ze(e,function(t,e){if(!Je(d,e)&&(v===t||o(v,t,n,i,u)))return d.push(e)})){h=!1;break}}else if(v!==_&&!o(v,_,n,i,u)){h=!1;break}}return u.delete(t),u.delete(e),h}function Xi(t){return ko(xo(t,r,Wo),t+\"\")}function to(t){return jr(t,Ea,so)}function eo(t){return jr(t,Pa,fo)}var no=In?function(t){return In.get(t)}:ac;function ro(t){for(var e=t.name+\"\",n=kn[e],r=Tt.call(kn,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function io(t){return(Tt.call(Nn,\"placeholder\")?Nn:t).placeholder}function oo(){var t=Nn.iteratee||rc;return t=t===rc?Tr:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function ao(t){for(var e=Ea(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,jo(i)]}return e}function co(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return Rr(n)?n:r}var so=ve?function(t){return null==t?[]:(t=xt(t),Ce(ve(t),function(e){return Vt.call(t,e)}))}:dc,fo=ve?function(t){for(var e=[];t;)Pe(e,so(t)),t=Wt(t);return e}:dc,lo=Sr;function po(t,e,n){for(var r=-1,i=(e=_i(e,t)).length,o=!1;++r<i;){var u=Uo(e[r]);if(!(o=null!=t&&n(t,u)))break;t=t[u]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Qu(i)&&_o(u,i)&&($u(t)||Lu(t))}function ho(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Dn(Wt(t))}function vo(t){return $u(t)||Lu(t)||!!(Gt&&t&&t[Gt])}function _o(t,e){var n=typeof t;return!!(e=e??f)&&(\"number\"==n||\"symbol\"!=n&&_t.test(t))&&t>-1&&t%1==0&&t<e}function yo(t,e,n){if(!Xu(n))return!1;var r=typeof e;return!!(\"number\"==r?Hu(n)&&_o(e,n.length):\"string\"==r&&e in n)&&Du(n[e],t)}function go(t,e){if($u(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!aa(t))||Q.test(t)||!Y.test(t)||null!=e&&t in xt(e)}function mo(t){var e=ro(t),n=Nn[e];if(\"function\"!=typeof n||!(e in Ln.prototype))return!1;if(t===n)return!0;var r=no(n);return!!r&&t===r[0]}(jn&&lo(new jn(new ArrayBuffer(1)))!=P||Sn&&lo(new Sn)!=w||xn&&lo(xn.resolve())!=x||On&&lo(new On)!=A||An&&lo(new An)!=k)&&(lo=function(t){var e=Sr(t),n=e==S?t.constructor:r,i=n?Fo(n):\"\";if(i)switch(i){case En:return P;case Pn:return w;case Rn:return x;case Tn:return A;case zn:return k}return e});var bo=Pt?Ju:vc;function wo(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||Et)}function jo(t){return t==t&&!Xu(t)}function So(t,e){return function(n){return null!=n&&n[t]===e&&(e!==r||t in xt(n))}}function xo(t,e,n){return e=_n(e===r?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=_n(r.length-e,0),u=rt(o);++i<o;)u[i]=r[e+i];i=-1;for(var a=rt(e+1);++i<e;)a[i]=r[i];return a[e]=n(u),je(t,this,a)}}function Oo(t,e){return e.length<2?t:wr(t,ti(e,0,-1))}function Ao(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var Co=Po(Yr),Io=le||function(t,e){return fe.setTimeout(t,e)},ko=Po(Qr);function Eo(t,e,n){var r=e+\"\";return ko(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return xe(h,function(n){var r=\"_.\"+n[0];e&n[1]&&!Ie(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(ot);return e?e[1].split(ut):[]}(r),n)))}function Po(t){var e=0,n=0;return function(){var i=gn(),o=16-(i-n);if(n=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(r,arguments)}}function Ro(t,e){var n=-1,i=t.length,o=i-1;for(e=e===r?i:e;++n<e;){var u=Hr(n,o),a=t[u];t[u]=t[n],t[n]=a}return t.length=e,t}var To,zo,Mo=(To=Tu(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(X,function(t,n,r,i){e.push(r?i.replace(st,\"$1\"):n||t)}),e},function(t){return 500===zo.size&&zo.clear(),t}),zo=To.cache,To);function Uo(t){if(\"string\"==typeof t||aa(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Fo(t){if(null!=t){try{return Rt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function No(t){if(t instanceof Ln)return t.clone();var e=new Bn(t.__wrapped__,t.__chain__);return e.__actions__=Ai(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Do=Kr(function(t,e){return Vu(t)?sr(t,vr(e,1,Vu,!0)):[]}),qo=Kr(function(t,e){var n=Zo(e);return Vu(n)&&(n=r),Vu(t)?sr(t,vr(e,1,Vu,!0),oo(n,2)):[]}),Bo=Kr(function(t,e){var n=Zo(e);return Vu(n)&&(n=r),Vu(t)?sr(t,vr(e,1,Vu,!0),r,n):[]});function Lo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ha(n);return i<0&&(i=_n(r+i,0)),Fe(t,oo(e,3),i)}function $o(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return n!==r&&(o=ha(n),o=n<0?_n(i+o,0):yn(o,i-1)),Fe(t,oo(e,3),o,!0)}function Wo(t){return null!=t&&t.length?vr(t,1):[]}function Ho(t){return t&&t.length?t[0]:r}var Vo=Kr(function(t){var e=Ee(t,di);return e.length&&e[0]===t[0]?Cr(e):[]}),Ko=Kr(function(t){var e=Zo(t),n=Ee(t,di);return e===Zo(n)?e=r:n.pop(),n.length&&n[0]===t[0]?Cr(n,oo(e,2)):[]}),Go=Kr(function(t){var e=Zo(t),n=Ee(t,di);return(e=\"function\"==typeof e?e:r)&&n.pop(),n.length&&n[0]===t[0]?Cr(n,r,e):[]});function Zo(t){var e=null==t?0:t.length;return e?t[e-1]:r}var Jo=Kr(Yo);function Yo(t,e){return t&&t.length&&e&&e.length?$r(t,e):t}var Qo=Xi(function(t,e){var n=null==t?0:t.length,r=ir(t,e);return Wr(t,Ee(e,function(t){return _o(t,n)?+t:t}).sort(Si)),r});function Xo(t){return null==t?t:wn.call(t)}var tu=Kr(function(t){return ai(vr(t,1,Vu,!0))}),eu=Kr(function(t){var e=Zo(t);return Vu(e)&&(e=r),ai(vr(t,1,Vu,!0),oo(e,2))}),nu=Kr(function(t){var e=Zo(t);return e=\"function\"==typeof e?e:r,ai(vr(t,1,Vu,!0),r,e)});function ru(t){if(!t||!t.length)return[];var e=0;return t=Ce(t,function(t){if(Vu(t))return e=_n(t.length,e),!0}),Ve(e,function(e){return Ee(t,Le(e))})}function iu(t,e){if(!t||!t.length)return[];var n=ru(t);return null==e?n:Ee(n,function(t){return je(e,r,t)})}var ou=Kr(function(t,e){return Vu(t)?sr(t,e):[]}),uu=Kr(function(t){return pi(Ce(t,Vu))}),au=Kr(function(t){var e=Zo(t);return Vu(e)&&(e=r),pi(Ce(t,Vu),oo(e,2))}),cu=Kr(function(t){var e=Zo(t);return e=\"function\"==typeof e?e:r,pi(Ce(t,Vu),r,e)}),su=Kr(ru),fu=Kr(function(t){var e=t.length,n=e>1?t[e-1]:r;return n=\"function\"==typeof n?(t.pop(),n):r,iu(t,n)});function lu(t){var e=Nn(t);return e.__chain__=!0,e}function pu(t,e){return e(t)}var hu=Xi(function(t){var e=t.length,n=e?t[0]:0,i=this.__wrapped__,o=function(e){return ir(e,t)};return!(e>1||this.__actions__.length)&&i instanceof Ln&&_o(n)?((i=i.slice(n,+n+(e?1:0))).__actions__.push({func:pu,args:[o],thisArg:r}),new Bn(i,this.__chain__).thru(function(t){return e&&!t.length&&t.push(r),t})):this.thru(o)}),du=Ii(function(t,e,n){Tt.call(t,n)?++t[n]:rr(t,n,1)}),vu=Mi(Lo),_u=Mi($o);function yu(t,e){return($u(t)?xe:fr)(t,oo(e,3))}function gu(t,e){return($u(t)?Oe:lr)(t,oo(e,3))}var mu=Ii(function(t,e,n){Tt.call(t,n)?t[n].push(e):rr(t,n,[e])}),bu=Kr(function(t,e,n){var r=-1,i=\"function\"==typeof e,o=Hu(t)?rt(t.length):[];return fr(t,function(t){o[++r]=i?je(e,t,n):Ir(t,e,n)}),o}),wu=Ii(function(t,e,n){rr(t,n,e)});function ju(t,e){return($u(t)?Ee:Ur)(t,oo(e,3))}var Su=Ii(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),xu=Kr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&yo(t,e[0],e[1])?e=[]:n>2&&yo(e[0],e[1],e[2])&&(e=[e[0]]),Br(t,vr(e,1),[])}),Ou=se||function(){return fe.Date.now()};function Au(t,e,n){return e=n?r:e,e=t&&null==e?t.length:e,Gi(t,c,r,r,r,r,e)}function Cu(t,e){var n;if(\"function\"!=typeof e)throw new Ct(i);return t=ha(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=r),n}}var Iu=Kr(function(t,e,n){var r=1;if(n.length){var i=un(n,io(Iu));r|=a}return Gi(t,r,e,n,i)}),ku=Kr(function(t,e,n){var r=3;if(n.length){var i=un(n,io(ku));r|=a}return Gi(e,r,t,n,i)});function Eu(t,e,n){var o,u,a,c,s,f,l=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new Ct(i);function v(e){var n=o,i=u;return o=u=r,l=e,c=t.apply(i,n)}function _(t){var n=t-f;return f===r||n>=e||n<0||h&&t-l>=a}function y(){var t=Ou();if(_(t))return g(t);s=Io(y,function(t){var n=e-(t-f);return h?yn(n,a-(t-l)):n}(t))}function g(t){return s=r,d&&o?v(t):(o=u=r,c)}function m(){var t=Ou(),n=_(t);if(o=arguments,u=this,f=t,n){if(s===r)return function(t){return l=t,s=Io(y,e),p?v(t):c}(f);if(h)return mi(s),s=Io(y,e),v(f)}return s===r&&(s=Io(y,e)),c}return e=va(e)||0,Xu(n)&&(p=!!n.leading,a=(h=\"maxWait\"in n)?_n(va(n.maxWait)||0,e):a,d=\"trailing\"in n?!!n.trailing:d),m.cancel=function(){s!==r&&mi(s),l=0,o=f=u=s=r},m.flush=function(){return s===r?c:g(Ou())},m}var Pu=Kr(function(t,e){return cr(t,1,e)}),Ru=Kr(function(t,e,n){return cr(t,va(e)||0,n)});function Tu(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new Ct(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return n.cache=o.set(i,u)||o,u};return n.cache=new(Tu.Cache||Hn),n}function zu(t){if(\"function\"!=typeof t)throw new Ct(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Tu.Cache=Hn;var Mu=yi(function(t,e){var n=(e=1==e.length&&$u(e[0])?Ee(e[0],Ge(oo())):Ee(vr(e,1),Ge(oo()))).length;return Kr(function(r){for(var i=-1,o=yn(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return je(t,this,r)})}),Uu=Kr(function(t,e){var n=un(e,io(Uu));return Gi(t,a,r,e,n)}),Fu=Kr(function(t,e){var n=un(e,io(Fu));return Gi(t,64,r,e,n)}),Nu=Xi(function(t,e){return Gi(t,256,r,r,r,e)});function Du(t,e){return t===e||t!=t&&e!=e}var qu=$i(xr),Bu=$i(function(t,e){return t>=e}),Lu=kr(function(){return arguments}())?kr:function(t){return ta(t)&&Tt.call(t,\"callee\")&&!Vt.call(t,\"callee\")},$u=rt.isArray,Wu=_e?Ge(_e):function(t){return ta(t)&&Sr(t)==E};function Hu(t){return null!=t&&Qu(t.length)&&!Ju(t)}function Vu(t){return ta(t)&&Hu(t)}var Ku=Me||vc,Gu=ye?Ge(ye):function(t){return ta(t)&&Sr(t)==y};function Zu(t){if(!ta(t))return!1;var e=Sr(t);return e==g||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ra(t)}function Ju(t){if(!Xu(t))return!1;var e=Sr(t);return e==m||e==b||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Yu(t){return\"number\"==typeof t&&t==ha(t)}function Qu(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=f}function Xu(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function ta(t){return null!=t&&\"object\"==typeof t}var ea=ge?Ge(ge):function(t){return ta(t)&&lo(t)==w};function na(t){return\"number\"==typeof t||ta(t)&&Sr(t)==j}function ra(t){if(!ta(t)||Sr(t)!=S)return!1;var e=Wt(t);if(null===e)return!0;var n=Tt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&Rt.call(n)==Ft}var ia=me?Ge(me):function(t){return ta(t)&&Sr(t)==O},oa=be?Ge(be):function(t){return ta(t)&&lo(t)==A};function ua(t){return\"string\"==typeof t||!$u(t)&&ta(t)&&Sr(t)==C}function aa(t){return\"symbol\"==typeof t||ta(t)&&Sr(t)==I}var ca=we?Ge(we):function(t){return ta(t)&&Qu(t.length)&&!!re[Sr(t)]},sa=$i(Mr),fa=$i(function(t,e){return t<=e});function la(t){if(!t)return[];if(Hu(t))return ua(t)?fn(t):Ai(t);if(Yt&&t[Yt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Yt]());var e=lo(t);return(e==w?rn:e==A?an:Da)(t)}function pa(t){return t?(t=va(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ha(t){var e=pa(t),n=e%1;return e==e?n?e-n:e:0}function da(t){return t?or(ha(t),0,p):0}function va(t){if(\"number\"==typeof t)return t;if(aa(t))return l;if(Xu(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=Xu(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Ke(t);var n=ht.test(t);return n||vt.test(t)?ae(t.slice(2),n?2:8):pt.test(t)?l:+t}function _a(t){return Ci(t,Pa(t))}function ya(t){return null==t?\"\":ui(t)}var ga=ki(function(t,e){if(wo(e)||Hu(e))Ci(e,Ea(e),t);else for(var n in e)Tt.call(e,n)&&Xn(t,n,e[n])}),ma=ki(function(t,e){Ci(e,Pa(e),t)}),ba=ki(function(t,e,n,r){Ci(e,Pa(e),t,r)}),wa=ki(function(t,e,n,r){Ci(e,Ea(e),t,r)}),ja=Xi(ir),Sa=Kr(function(t,e){t=xt(t);var n=-1,i=e.length,o=i>2?e[2]:r;for(o&&yo(e[0],e[1],o)&&(i=1);++n<i;)for(var u=e[n],a=Pa(u),c=-1,s=a.length;++c<s;){var f=a[c],l=t[f];(l===r||Du(l,Et[f])&&!Tt.call(t,f))&&(t[f]=u[f])}return t}),xa=Kr(function(t){return t.push(r,Ji),je(Ta,r,t)});function Oa(t,e,n){var i=null==t?r:wr(t,e);return i===r?n:i}function Aa(t,e){return null!=t&&po(t,e,Ar)}var Ca=Ni(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Ut.call(e)),t[e]=n},Xa(nc)),Ia=Ni(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Ut.call(e)),Tt.call(t,e)?t[e].push(n):t[e]=[n]},oo),ka=Kr(Ir);function Ea(t){return Hu(t)?Gn(t):zr(t)}function Pa(t){return Hu(t)?Gn(t,!0):function(t){if(!Xu(t))return function(t){var e=[];if(null!=t)for(var n in xt(t))e.push(n);return e}(t);var e=wo(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&Tt.call(t,r))&&n.push(r);return n}(t)}var Ra=ki(function(t,e,n){Dr(t,e,n)}),Ta=ki(function(t,e,n,r){Dr(t,e,n,r)}),za=Xi(function(t,e){var n={};if(null==t)return n;var r=!1;e=Ee(e,function(e){return e=_i(e,t),r||(r=e.length>1),e}),Ci(t,eo(t),n),r&&(n=ur(n,7,Yi));for(var i=e.length;i--;)ci(n,e[i]);return n}),Ma=Xi(function(t,e){return null==t?{}:function(t,e){return Lr(t,e,function(e,n){return Aa(t,n)})}(t,e)});function Ua(t,e){if(null==t)return{};var n=Ee(eo(t),function(t){return[t]});return e=oo(e),Lr(t,n,function(t,n){return e(t,n[0])})}var Fa=Ki(Ea),Na=Ki(Pa);function Da(t){return null==t?[]:Ze(t,Ea(t))}var qa=Ti(function(t,e,n){return e=e.toLowerCase(),t+(n?Ba(e):e)});function Ba(t){return Za(ya(t).toLowerCase())}function La(t){return(t=ya(t))&&t.replace(yt,Xe).replace(Jt,\"\")}var $a=Ti(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Wa=Ti(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),Ha=Ri(\"toLowerCase\"),Va=Ti(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Ka=Ti(function(t,e,n){return t+(n?\" \":\"\")+Za(e)}),Ga=Ti(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Za=Ri(\"toUpperCase\");function Ja(t,e,n){return t=ya(t),(e=n?r:e)===r?function(t){return te.test(t)}(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(e)||[]}var Ya=Kr(function(t,e){try{return je(t,r,e)}catch(t){return Zu(t)?t:new wt(t)}}),Qa=Xi(function(t,e){return xe(e,function(e){e=Uo(e),rr(t,e,Iu(t[e],t))}),t});function Xa(t){return function(){return t}}var tc=Ui(),ec=Ui(!0);function nc(t){return t}function rc(t){return Tr(\"function\"==typeof t?t:ur(t,1))}var ic=Kr(function(t,e){return function(n){return Ir(n,t,e)}}),oc=Kr(function(t,e){return function(n){return Ir(t,n,e)}});function uc(t,e,n){var r=Ea(e),i=br(e,r);null!=n||Xu(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=br(e,Ea(e)));var o=!(Xu(n)&&\"chain\"in n&&!n.chain),u=Ju(t);return xe(i,function(n){var r=e[n];t[n]=r,u&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Ai(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Pe([this.value()],arguments))})}),t}function ac(){}var cc=qi(Ee),sc=qi(Ae),fc=qi(ze);function lc(t){return go(t)?Le(Uo(t)):function(t){return function(e){return wr(e,t)}}(t)}var pc=Li(),hc=Li(!0);function dc(){return[]}function vc(){return!1}var _c,yc=Di(function(t,e){return t+e},0),gc=Hi(\"ceil\"),mc=Di(function(t,e){return t/e},1),bc=Hi(\"floor\"),wc=Di(function(t,e){return t*e},1),jc=Hi(\"round\"),Sc=Di(function(t,e){return t-e},0);return Nn.after=function(t,e){if(\"function\"!=typeof e)throw new Ct(i);return t=ha(t),function(){if(--t<1)return e.apply(this,arguments)}},Nn.ary=Au,Nn.assign=ga,Nn.assignIn=ma,Nn.assignInWith=ba,Nn.assignWith=wa,Nn.at=ja,Nn.before=Cu,Nn.bind=Iu,Nn.bindAll=Qa,Nn.bindKey=ku,Nn.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return $u(t)?t:[t]},Nn.chain=lu,Nn.chunk=function(t,e,n){e=(n?yo(t,e,n):e===r)?1:_n(ha(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,u=0,a=rt(pe(i/e));o<i;)a[u++]=ti(t,o,o+=e);return a},Nn.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i},Nn.concat=function(){var t=arguments.length;if(!t)return[];for(var e=rt(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return Pe($u(n)?Ai(n):[n],vr(e,1))},Nn.cond=function(t){var e=null==t?0:t.length,n=oo();return t=e?Ee(t,function(t){if(\"function\"!=typeof t[1])throw new Ct(i);return[n(t[0]),t[1]]}):[],Kr(function(n){for(var r=-1;++r<e;){var i=t[r];if(je(i[0],this,n))return je(i[1],this,n)}})},Nn.conforms=function(t){return function(t){var e=Ea(t);return function(n){return ar(n,t,e)}}(ur(t,1))},Nn.constant=Xa,Nn.countBy=du,Nn.create=function(t,e){var n=Dn(t);return null==e?n:nr(n,e)},Nn.curry=function t(e,n,i){var o=Gi(e,8,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Nn.curryRight=function t(e,n,i){var o=Gi(e,16,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Nn.debounce=Eu,Nn.defaults=Sa,Nn.defaultsDeep=xa,Nn.defer=Pu,Nn.delay=Ru,Nn.difference=Do,Nn.differenceBy=qo,Nn.differenceWith=Bo,Nn.drop=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=n||e===r?1:ha(e))<0?0:e,i):[]},Nn.dropRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,0,(e=i-(e=n||e===r?1:ha(e)))<0?0:e):[]},Nn.dropRightWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!0,!0):[]},Nn.dropWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!0):[]},Nn.fill=function(t,e,n,i){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&yo(t,e,n)&&(n=0,i=o),function(t,e,n,i){var o=t.length;for((n=ha(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:ha(i))<0&&(i+=o),i=n>i?0:da(i);n<i;)t[n++]=e;return t}(t,e,n,i)):[]},Nn.filter=function(t,e){return($u(t)?Ce:dr)(t,oo(e,3))},Nn.flatMap=function(t,e){return vr(ju(t,e),1)},Nn.flatMapDeep=function(t,e){return vr(ju(t,e),s)},Nn.flatMapDepth=function(t,e,n){return n=n===r?1:ha(n),vr(ju(t,e),n)},Nn.flatten=Wo,Nn.flattenDeep=function(t){return null!=t&&t.length?vr(t,s):[]},Nn.flattenDepth=function(t,e){return null!=t&&t.length?vr(t,e=e===r?1:ha(e)):[]},Nn.flip=function(t){return Gi(t,512)},Nn.flow=tc,Nn.flowRight=ec,Nn.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];rr(r,i[0],i[1])}return r},Nn.functions=function(t){return null==t?[]:br(t,Ea(t))},Nn.functionsIn=function(t){return null==t?[]:br(t,Pa(t))},Nn.groupBy=mu,Nn.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Nn.intersection=Vo,Nn.intersectionBy=Ko,Nn.intersectionWith=Go,Nn.invert=Ca,Nn.invertBy=Ia,Nn.invokeMap=bu,Nn.iteratee=rc,Nn.keyBy=wu,Nn.keys=Ea,Nn.keysIn=Pa,Nn.map=ju,Nn.mapKeys=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,e(t,r,i),t)}),n},Nn.mapValues=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,r,e(t,r,i))}),n},Nn.matches=function(t){return Fr(ur(t,1))},Nn.matchesProperty=function(t,e){return Nr(t,ur(e,1))},Nn.memoize=Tu,Nn.merge=Ra,Nn.mergeWith=Ta,Nn.method=ic,Nn.methodOf=oc,Nn.mixin=uc,Nn.negate=zu,Nn.nthArg=function(t){return t=ha(t),Kr(function(e){return qr(e,t)})},Nn.omit=za,Nn.omitBy=function(t,e){return Ua(t,zu(oo(e)))},Nn.once=function(t){return Cu(2,t)},Nn.orderBy=function(t,e,n,i){return null==t?[]:($u(e)||(e=null==e?[]:[e]),$u(n=i?r:n)||(n=null==n?[]:[n]),Br(t,e,n))},Nn.over=cc,Nn.overArgs=Mu,Nn.overEvery=sc,Nn.overSome=fc,Nn.partial=Uu,Nn.partialRight=Fu,Nn.partition=Su,Nn.pick=Ma,Nn.pickBy=Ua,Nn.property=lc,Nn.propertyOf=function(t){return function(e){return null==t?r:wr(t,e)}},Nn.pull=Jo,Nn.pullAll=Yo,Nn.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?$r(t,e,oo(n,2)):t},Nn.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?$r(t,e,r,n):t},Nn.pullAt=Qo,Nn.range=pc,Nn.rangeRight=hc,Nn.rearg=Nu,Nn.reject=function(t,e){return($u(t)?Ce:dr)(t,zu(oo(e,3)))},Nn.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=oo(e,3);++r<o;){var u=t[r];e(u,r,t)&&(n.push(u),i.push(r))}return Wr(t,i),n},Nn.rest=function(t,e){if(\"function\"!=typeof t)throw new Ct(i);return Kr(t,e=e===r?e:ha(e))},Nn.reverse=Xo,Nn.sampleSize=function(t,e,n){return e=(n?yo(t,e,n):e===r)?1:ha(e),($u(t)?Jn:Zr)(t,e)},Nn.set=function(t,e,n){return null==t?t:Jr(t,e,n)},Nn.setWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:Jr(t,e,n,i)},Nn.shuffle=function(t){return($u(t)?Yn:Xr)(t)},Nn.slice=function(t,e,n){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&yo(t,e,n)?(e=0,n=i):(e=null==e?0:ha(e),n=n===r?i:ha(n)),ti(t,e,n)):[]},Nn.sortBy=xu,Nn.sortedUniq=function(t){return t&&t.length?ii(t):[]},Nn.sortedUniqBy=function(t,e){return t&&t.length?ii(t,oo(e,2)):[]},Nn.split=function(t,e,n){return n&&\"number\"!=typeof n&&yo(t,e,n)&&(e=n=r),(n=n===r?p:n>>>0)?(t=ya(t))&&(\"string\"==typeof e||null!=e&&!ia(e))&&!(e=ui(e))&&nn(t)?gi(fn(t),0,n):t.split(e,n):[]},Nn.spread=function(t,e){if(\"function\"!=typeof t)throw new Ct(i);return e=null==e?0:_n(ha(e),0),Kr(function(n){var r=n[e],i=gi(n,0,e);return r&&Pe(i,r),je(t,this,i)})},Nn.tail=function(t){var e=null==t?0:t.length;return e?ti(t,1,e):[]},Nn.take=function(t,e,n){return t&&t.length?ti(t,0,(e=n||e===r?1:ha(e))<0?0:e):[]},Nn.takeRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=i-(e=n||e===r?1:ha(e)))<0?0:e,i):[]},Nn.takeRightWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!1,!0):[]},Nn.takeWhile=function(t,e){return t&&t.length?fi(t,oo(e,3)):[]},Nn.tap=function(t,e){return e(t),t},Nn.throttle=function(t,e,n){var r=!0,o=!0;if(\"function\"!=typeof t)throw new Ct(i);return Xu(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),Eu(t,e,{leading:r,maxWait:e,trailing:o})},Nn.thru=pu,Nn.toArray=la,Nn.toPairs=Fa,Nn.toPairsIn=Na,Nn.toPath=function(t){return $u(t)?Ee(t,Uo):aa(t)?[t]:Ai(Mo(ya(t)))},Nn.toPlainObject=_a,Nn.transform=function(t,e,n){var r=$u(t),i=r||Ku(t)||ca(t);if(e=oo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Xu(t)&&Ju(o)?Dn(Wt(t)):{}}return(i?xe:gr)(t,function(t,r,i){return e(n,t,r,i)}),n},Nn.unary=function(t){return Au(t,1)},Nn.union=tu,Nn.unionBy=eu,Nn.unionWith=nu,Nn.uniq=function(t){return t&&t.length?ai(t):[]},Nn.uniqBy=function(t,e){return t&&t.length?ai(t,oo(e,2)):[]},Nn.uniqWith=function(t,e){return e=\"function\"==typeof e?e:r,t&&t.length?ai(t,r,e):[]},Nn.unset=function(t,e){return null==t||ci(t,e)},Nn.unzip=ru,Nn.unzipWith=iu,Nn.update=function(t,e,n){return null==t?t:si(t,e,vi(n))},Nn.updateWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:si(t,e,vi(n),i)},Nn.values=Da,Nn.valuesIn=function(t){return null==t?[]:Ze(t,Pa(t))},Nn.without=ou,Nn.words=Ja,Nn.wrap=function(t,e){return Uu(vi(e),t)},Nn.xor=uu,Nn.xorBy=au,Nn.xorWith=cu,Nn.zip=su,Nn.zipObject=function(t,e){return hi(t||[],e||[],Xn)},Nn.zipObjectDeep=function(t,e){return hi(t||[],e||[],Jr)},Nn.zipWith=fu,Nn.entries=Fa,Nn.entriesIn=Na,Nn.extend=ma,Nn.extendWith=ba,uc(Nn,Nn),Nn.add=yc,Nn.attempt=Ya,Nn.camelCase=qa,Nn.capitalize=Ba,Nn.ceil=gc,Nn.clamp=function(t,e,n){return n===r&&(n=e,e=r),n!==r&&(n=(n=va(n))==n?n:0),e!==r&&(e=(e=va(e))==e?e:0),or(va(t),e,n)},Nn.clone=function(t){return ur(t,4)},Nn.cloneDeep=function(t){return ur(t,5)},Nn.cloneDeepWith=function(t,e){return ur(t,5,e=\"function\"==typeof e?e:r)},Nn.cloneWith=function(t,e){return ur(t,4,e=\"function\"==typeof e?e:r)},Nn.conformsTo=function(t,e){return null==e||ar(t,e,Ea(e))},Nn.deburr=La,Nn.defaultTo=function(t,e){return null==t||t!=t?e:t},Nn.divide=mc,Nn.endsWith=function(t,e,n){t=ya(t),e=ui(e);var i=t.length,o=n=n===r?i:or(ha(n),0,i);return(n-=e.length)>=0&&t.slice(n,o)==e},Nn.eq=Du,Nn.escape=function(t){return(t=ya(t))&&K.test(t)?t.replace(H,tn):t},Nn.escapeRegExp=function(t){return(t=ya(t))&&et.test(t)?t.replace(tt,\"\\\\$&\"):t},Nn.every=function(t,e,n){var i=$u(t)?Ae:pr;return n&&yo(t,e,n)&&(e=r),i(t,oo(e,3))},Nn.find=vu,Nn.findIndex=Lo,Nn.findKey=function(t,e){return Ue(t,oo(e,3),gr)},Nn.findLast=_u,Nn.findLastIndex=$o,Nn.findLastKey=function(t,e){return Ue(t,oo(e,3),mr)},Nn.floor=bc,Nn.forEach=yu,Nn.forEachRight=gu,Nn.forIn=function(t,e){return null==t?t:_r(t,oo(e,3),Pa)},Nn.forInRight=function(t,e){return null==t?t:yr(t,oo(e,3),Pa)},Nn.forOwn=function(t,e){return t&&gr(t,oo(e,3))},Nn.forOwnRight=function(t,e){return t&&mr(t,oo(e,3))},Nn.get=Oa,Nn.gt=qu,Nn.gte=Bu,Nn.has=function(t,e){return null!=t&&po(t,e,Or)},Nn.hasIn=Aa,Nn.head=Ho,Nn.identity=nc,Nn.includes=function(t,e,n,r){t=Hu(t)?t:Da(t),n=n&&!r?ha(n):0;var i=t.length;return n<0&&(n=_n(i+n,0)),ua(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&Ne(t,e,n)>-1},Nn.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ha(n);return i<0&&(i=_n(r+i,0)),Ne(t,e,i)},Nn.inRange=function(t,e,n){return e=pa(e),n===r?(n=e,e=0):n=pa(n),function(t,e,n){return t>=yn(e,n)&&t<_n(e,n)}(t=va(t),e,n)},Nn.invoke=ka,Nn.isArguments=Lu,Nn.isArray=$u,Nn.isArrayBuffer=Wu,Nn.isArrayLike=Hu,Nn.isArrayLikeObject=Vu,Nn.isBoolean=function(t){return!0===t||!1===t||ta(t)&&Sr(t)==_},Nn.isBuffer=Ku,Nn.isDate=Gu,Nn.isElement=function(t){return ta(t)&&1===t.nodeType&&!ra(t)},Nn.isEmpty=function(t){if(null==t)return!0;if(Hu(t)&&($u(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Ku(t)||ca(t)||Lu(t)))return!t.length;var e=lo(t);if(e==w||e==A)return!t.size;if(wo(t))return!zr(t).length;for(var n in t)if(Tt.call(t,n))return!1;return!0},Nn.isEqual=function(t,e){return Er(t,e)},Nn.isEqualWith=function(t,e,n){var i=(n=\"function\"==typeof n?n:r)?n(t,e):r;return i===r?Er(t,e,r,n):!!i},Nn.isError=Zu,Nn.isFinite=function(t){return\"number\"==typeof t&&$e(t)},Nn.isFunction=Ju,Nn.isInteger=Yu,Nn.isLength=Qu,Nn.isMap=ea,Nn.isMatch=function(t,e){return t===e||Pr(t,e,ao(e))},Nn.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:r,Pr(t,e,ao(e),n)},Nn.isNaN=function(t){return na(t)&&t!=+t},Nn.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Rr(t)},Nn.isNil=function(t){return null==t},Nn.isNull=function(t){return null===t},Nn.isNumber=na,Nn.isObject=Xu,Nn.isObjectLike=ta,Nn.isPlainObject=ra,Nn.isRegExp=ia,Nn.isSafeInteger=function(t){return Yu(t)&&t>=-9007199254740991&&t<=f},Nn.isSet=oa,Nn.isString=ua,Nn.isSymbol=aa,Nn.isTypedArray=ca,Nn.isUndefined=function(t){return t===r},Nn.isWeakMap=function(t){return ta(t)&&lo(t)==k},Nn.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==Sr(t)},Nn.join=function(t,e){return null==t?\"\":dn.call(t,e)},Nn.kebabCase=$a,Nn.last=Zo,Nn.lastIndexOf=function(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=ha(n))<0?_n(i+o,0):yn(o,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Fe(t,qe,o,!0)},Nn.lowerCase=Wa,Nn.lowerFirst=Ha,Nn.lt=sa,Nn.lte=fa,Nn.max=function(t){return t&&t.length?hr(t,nc,xr):r},Nn.maxBy=function(t,e){return t&&t.length?hr(t,oo(e,2),xr):r},Nn.mean=function(t){return Be(t,nc)},Nn.meanBy=function(t,e){return Be(t,oo(e,2))},Nn.min=function(t){return t&&t.length?hr(t,nc,Mr):r},Nn.minBy=function(t,e){return t&&t.length?hr(t,oo(e,2),Mr):r},Nn.stubArray=dc,Nn.stubFalse=vc,Nn.stubObject=function(){return{}},Nn.stubString=function(){return\"\"},Nn.stubTrue=function(){return!0},Nn.multiply=wc,Nn.nth=function(t,e){return t&&t.length?qr(t,ha(e)):r},Nn.noConflict=function(){return fe._===this&&(fe._=Nt),this},Nn.noop=ac,Nn.now=Ou,Nn.pad=function(t,e,n){t=ya(t);var r=(e=ha(e))?sn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Bi(de(i),n)+t+Bi(pe(i),n)},Nn.padEnd=function(t,e,n){t=ya(t);var r=(e=ha(e))?sn(t):0;return e&&r<e?t+Bi(e-r,n):t},Nn.padStart=function(t,e,n){t=ya(t);var r=(e=ha(e))?sn(t):0;return e&&r<e?Bi(e-r,n)+t:t},Nn.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),mn(ya(t).replace(nt,\"\"),e||0)},Nn.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&yo(t,e,n)&&(e=n=r),n===r&&(\"boolean\"==typeof e?(n=e,e=r):\"boolean\"==typeof t&&(n=t,t=r)),t===r&&e===r?(t=0,e=1):(t=pa(t),e===r?(e=t,t=0):e=pa(e)),t>e){var i=t;t=e,e=i}if(n||t%1||e%1){var o=bn();return yn(t+o*(e-t+ue(\"1e-\"+((o+\"\").length-1))),e)}return Hr(t,e)},Nn.reduce=function(t,e,n){var r=$u(t)?Re:We,i=arguments.length<3;return r(t,oo(e,4),n,i,fr)},Nn.reduceRight=function(t,e,n){var r=$u(t)?Te:We,i=arguments.length<3;return r(t,oo(e,4),n,i,lr)},Nn.repeat=function(t,e,n){return e=(n?yo(t,e,n):e===r)?1:ha(e),Vr(ya(t),e)},Nn.replace=function(){var t=arguments,e=ya(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Nn.result=function(t,e,n){var i=-1,o=(e=_i(e,t)).length;for(o||(o=1,t=r);++i<o;){var u=null==t?r:t[Uo(e[i])];u===r&&(i=o,u=n),t=Ju(u)?u.call(t):u}return t},Nn.round=jc,Nn.runInContext=t,Nn.sample=function(t){return($u(t)?Zn:Gr)(t)},Nn.size=function(t){if(null==t)return 0;if(Hu(t))return ua(t)?sn(t):t.length;var e=lo(t);return e==w||e==A?t.size:zr(t).length},Nn.snakeCase=Va,Nn.some=function(t,e,n){var i=$u(t)?ze:ei;return n&&yo(t,e,n)&&(e=r),i(t,oo(e,3))},Nn.sortedIndex=function(t,e){return ni(t,e)},Nn.sortedIndexBy=function(t,e,n){return ri(t,e,oo(n,2))},Nn.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=ni(t,e);if(r<n&&Du(t[r],e))return r}return-1},Nn.sortedLastIndex=function(t,e){return ni(t,e,!0)},Nn.sortedLastIndexBy=function(t,e,n){return ri(t,e,oo(n,2),!0)},Nn.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=ni(t,e,!0)-1;if(Du(t[n],e))return n}return-1},Nn.startCase=Ka,Nn.startsWith=function(t,e,n){return t=ya(t),n=null==n?0:or(ha(n),0,t.length),e=ui(e),t.slice(n,n+e.length)==e},Nn.subtract=Sc,Nn.sum=function(t){return t&&t.length?He(t,nc):0},Nn.sumBy=function(t,e){return t&&t.length?He(t,oo(e,2)):0},Nn.template=function(t,e,n){var i=Nn.templateSettings;n&&yo(t,e,n)&&(e=r),t=ya(t),e=wa({},e,i,Zi);var o=wa({},e.imports,i.imports,Zi),u=Ea(o),a=Ze(o,u);xe(u,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,f=0,l=e.interpolate||gt,p=\"__p += '\",h=Ot((e.escape||gt).source+\"|\"+l.source+\"|\"+(l===J?ft:gt).source+\"|\"+(e.evaluate||gt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Tt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ne+\"]\")+\"\\n\";t.replace(h,function(e,n,r,i,o,u){return r||(r=i),p+=t.slice(f,u).replace(mt,en),n&&(c=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(s=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),f=u+e.length,e}),p+=\"';\\n\";var v=Tt.call(e,\"variable\")&&e.variable;if(v){if(ct.test(v))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(B,\"\"):p).replace(L,\"$1\").replace($,\"$1;\"),p=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var _=Ya(function(){return jt(u,d+\"return \"+p).apply(r,a)});if(_.source=p,Zu(_))throw _;return _},Nn.times=function(t,e){if((t=ha(t))<1||t>f)return[];var n=p,r=yn(t,p);e=oo(e),t-=p;for(var i=Ve(r,e);++n<t;)e(n);return i},Nn.toFinite=pa,Nn.toInteger=ha,Nn.toLength=da,Nn.toLower=function(t){return ya(t).toLowerCase()},Nn.toNumber=va,Nn.toSafeInteger=function(t){return t?or(ha(t),-9007199254740991,f):0===t?t:0},Nn.toString=ya,Nn.toUpper=function(t){return ya(t).toUpperCase()},Nn.trim=function(t,e,n){if((t=ya(t))&&(n||e===r))return Ke(t);if(!t||!(e=ui(e)))return t;var i=fn(t),o=fn(e);return gi(i,Ye(i,o),Qe(i,o)+1).join(\"\")},Nn.trimEnd=function(t,e,n){if((t=ya(t))&&(n||e===r))return t.slice(0,ln(t)+1);if(!t||!(e=ui(e)))return t;var i=fn(t);return gi(i,0,Qe(i,fn(e))+1).join(\"\")},Nn.trimStart=function(t,e,n){if((t=ya(t))&&(n||e===r))return t.replace(nt,\"\");if(!t||!(e=ui(e)))return t;var i=fn(t);return gi(i,Ye(i,fn(e))).join(\"\")},Nn.truncate=function(t,e){var n=30,i=\"...\";if(Xu(e)){var o=\"separator\"in e?e.separator:o;n=\"length\"in e?ha(e.length):n,i=\"omission\"in e?ui(e.omission):i}var u=(t=ya(t)).length;if(nn(t)){var a=fn(t);u=a.length}if(n>=u)return t;var c=n-sn(i);if(c<1)return i;var s=a?gi(a,0,c).join(\"\"):t.slice(0,c);if(o===r)return s+i;if(a&&(c+=s.length-c),ia(o)){if(t.slice(c).search(o)){var f,l=s;for(o.global||(o=Ot(o.source,ya(lt.exec(o))+\"g\")),o.lastIndex=0;f=o.exec(l);)var p=f.index;s=s.slice(0,p===r?c:p)}}else if(t.indexOf(ui(o),c)!=c){var h=s.lastIndexOf(o);h>-1&&(s=s.slice(0,h))}return s+i},Nn.unescape=function(t){return(t=ya(t))&&V.test(t)?t.replace(W,pn):t},Nn.uniqueId=function(t){var e=++zt;return ya(t)+e},Nn.upperCase=Ga,Nn.upperFirst=Za,Nn.each=yu,Nn.eachRight=gu,Nn.first=Ho,uc(Nn,(_c={},gr(Nn,function(t,e){Tt.call(Nn.prototype,e)||(_c[e]=t)}),_c),{chain:!1}),Nn.VERSION=\"4.18.1\",xe([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Nn[t].placeholder=Nn}),xe([\"drop\",\"take\"],function(t,e){Ln.prototype[t]=function(n){n=n===r?1:_n(ha(n),0);var i=this.__filtered__&&!e?new Ln(this):this.clone();return i.__filtered__?i.__takeCount__=yn(n,i.__takeCount__):i.__views__.push({size:yn(n,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Ln.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),xe([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=1==n||3==n;Ln.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:oo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),xe([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");Ln.prototype[t]=function(){return this[n](1).value()[0]}}),xe([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");Ln.prototype[t]=function(){return this.__filtered__?new Ln(this):this[n](1)}}),Ln.prototype.compact=function(){return this.filter(nc)},Ln.prototype.find=function(t){return this.filter(t).head()},Ln.prototype.findLast=function(t){return this.reverse().find(t)},Ln.prototype.invokeMap=Kr(function(t,e){return\"function\"==typeof t?new Ln(this):this.map(function(n){return Ir(n,t,e)})}),Ln.prototype.reject=function(t){return this.filter(zu(oo(t)))},Ln.prototype.slice=function(t,e){t=ha(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Ln(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==r&&(n=(e=ha(e))<0?n.dropRight(-e):n.take(e-t)),n)},Ln.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Ln.prototype.toArray=function(){return this.take(p)},gr(Ln.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Nn[i?\"take\"+(\"last\"==e?\"Right\":\"\"):e],u=i||/^find/.test(e);o&&(Nn.prototype[e]=function(){var e=this.__wrapped__,a=i?[1]:arguments,c=e instanceof Ln,s=a[0],f=c||$u(e),l=function(t){var e=o.apply(Nn,Pe([t],a));return i&&p?e[0]:e};f&&n&&\"function\"==typeof s&&1!=s.length&&(c=f=!1);var p=this.__chain__,h=!!this.__actions__.length,d=u&&!p,v=c&&!h;if(!u&&f){e=v?e:new Ln(this);var _=t.apply(e,a);return _.__actions__.push({func:pu,args:[l],thisArg:r}),new Bn(_,p)}return d&&v?t.apply(this,a):(_=this.thru(l),d?i?_.value()[0]:_.value():_)})}),xe([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=It[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Nn.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply($u(i)?i:[],t)}return this[n](function(n){return e.apply($u(n)?n:[],t)})}}),gr(Ln.prototype,function(t,e){var n=Nn[e];if(n){var r=n.name+\"\";Tt.call(kn,r)||(kn[r]=[]),kn[r].push({name:e,func:n})}}),kn[Fi(r,2).name]=[{name:\"wrapper\",func:r}],Ln.prototype.clone=function(){var t=new Ln(this.__wrapped__);return t.__actions__=Ai(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ai(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ai(this.__views__),t},Ln.prototype.reverse=function(){if(this.__filtered__){var t=new Ln(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Ln.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=$u(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],u=o.size;switch(o.type){case\"drop\":t+=u;break;case\"dropRight\":e-=u;break;case\"take\":e=yn(e,t+u);break;case\"takeRight\":t=_n(t,e-u)}}return{start:t,end:e}}(0,i,this.__views__),u=o.start,a=o.end,c=a-u,s=r?a:u-1,f=this.__iteratees__,l=f.length,p=0,h=yn(c,this.__takeCount__);if(!n||!r&&i==c&&h==c)return li(t,this.__actions__);var d=[];t:for(;c--&&p<h;){for(var v=-1,_=t[s+=e];++v<l;){var y=f[v],g=y.iteratee,m=y.type,b=g(_);if(2==m)_=b;else if(!b){if(1==m)continue t;break t}}d[p++]=_}return d},Nn.prototype.at=hu,Nn.prototype.chain=function(){return lu(this)},Nn.prototype.commit=function(){return new Bn(this.value(),this.__chain__)},Nn.prototype.next=function(){this.__values__===r&&(this.__values__=la(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Nn.prototype.plant=function(t){for(var e,n=this;n instanceof qn;){var i=No(n);i.__index__=0,i.__values__=r,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e},Nn.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Ln){var e=t;return this.__actions__.length&&(e=new Ln(this)),(e=e.reverse()).__actions__.push({func:pu,args:[Xo],thisArg:r}),new Bn(e,this.__chain__)}return this.thru(Xo)},Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},Nn.prototype.first=Nn.prototype.head,Yt&&(Nn.prototype[Yt]=function(){return this}),Nn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(fe._=hn,define(function(){return hn})):pe?((pe.exports=hn)._=hn,le._=hn):fe._=hn}.call(this)},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,e,n){\"use strict\";n.d(e,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createCyberSourcePaymentStrategy:()=>z,createCyberSourceV2PaymentStrategy:()=>D});var t=n(315),e=n(9440);function i(t){return Boolean(t.instrumentId)}const o=t=>\"object\"==typeof t&&null!==t&&\"body\"in t;var u,a,c=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};class s{constructor(t,e){this._paymentIntegrationService=t,this._cardinalClient=e}prepare(t){return c(this,void 0,void 0,function*(){yield this._cardinalClient.load(t.id,t.config.testMode),yield this._cardinalClient.configure(yield this._getClientToken(t))})}start(t,n,r,u){return c(this,void 0,void 0,function*(){const{getCardInstrument:a,getPaymentMethodOrThrow:c}=this._paymentIntegrationService.getState(),{payment:{methodId:s=\"\",paymentData:f={}}={}}=n,l=i(f)&&a(f.instrumentId),p=l?l.iin:u&&u.getBin();p&&(yield this._cardinalClient.runBinProcess(p));try{return yield t((0,e.merge)(n,{payment:{paymentData:{threeDSecure:{token:c(s).clientToken}}}}),r)}catch(t){if(!o(t)||!(0,e.some)(t.body.errors,{code:\"three_d_secure_required\"}))throw t;const r=yield this._cardinalClient.getThreeDSecureData(t.body.three_ds_result,this._getOrderData());if(!u)return void(yield this._paymentIntegrationService.submitPayment((0,e.merge)(n.payment,{paymentData:{threeDSecure:r}})));yield u.submit((0,e.merge)(n.payment,{paymentData:{threeDSecure:r}}))}})}_getClientToken(t){return c(this,void 0,void 0,function*(){return t.clientToken?t.clientToken:(yield this._paymentIntegrationService.loadPaymentMethod(t.id),this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t.id).clientToken||\"\")})}_getOrderData(){const t=this._paymentIntegrationService.getState(),e=t.getBillingAddressOrThrow(),n=t.getShippingAddress(),r=t.getCheckoutOrThrow(),i=t.getOrderOrThrow();return{billingAddress:e,shippingAddress:n,currencyCode:r.cart.currency.code,id:i.orderId.toString(),amount:r.cart.cartAmount}}}class f extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(u||(u={}));class l extends f{constructor(t){super(function(t){switch(t){case u.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case u.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case u.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case u.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case u.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case u.MissingCheckoutConfig:case u.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case u.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case u.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case u.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case u.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case u.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case u.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class p extends f{constructor(t){super(t||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(a||(a={}));class h extends f{constructor(t){super(function(t){switch(t){case a.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case a.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case a.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case a.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const d=[100004,1010,1011,1020];var v,_,y,g,m,b,w;!function(t){t.SetupCompleted=\"payments.setupComplete\",t.Validated=\"payments.validated\"}(v||(v={})),function(t){t.Init=\"init\",t.Complete=\"complete\",t.Confirm=\"confirm\"}(_||(_={})),function(t){t.Success=\"SUCCESS\",t.NoAction=\"NOACTION\",t.Failure=\"FAILURE\",t.Error=\"ERROR\"}(y||(y={})),function(t){t.CCA=\"CCA\",t.Paypal=\"Paypal\",t.Wallet=\"Wallet\",t.VisaCheckout=\"VisaCheckout\",t.ApplePay=\"ApplePay\",t.DiscoverWallet=\"DiscoverWallet\"}(g||(g={})),function(t){t.BinProcess=\"bin.process\"}(m||(m={})),function(t){t.CCA=\"cca\"}(b||(b={})),function(t){t.Yes=\"Y\",t.No=\"N\"}(w||(w={}));class j{constructor(t){this._scriptLoader=t,this._provider=\"\",this._testMode=!1,this._configurationToken=\"\"}load(t,n=!1){return this._provider=t,this._testMode=n,this._sdk||(this._sdk=this._scriptLoader.load(t,n)),this._sdk.then(e.noop)}configure(t){if(this._configurationToken){if(this._configurationToken===t)return Promise.resolve();this._sdk=this._scriptLoader.load(`${this._provider}.${Date.now()}`,this._testMode)}return this._getClientSDK().then(n=>new Promise((r,i)=>{n.on(v.SetupCompleted,()=>{n.off(v.SetupCompleted),n.off(v.Validated),this._configurationToken=t,r()}),n.on(v.Validated,t=>{n.off(v.SetupCompleted),n.off(v.Validated),t.ActionCode===y.Error&&((0,e.includes)(d,t.ErrorNumber)&&i(new l(u.MissingPaymentMethod)),i(new p(t.ErrorDescription)))}),n.setup(_.Init,{jwt:t})}))}runBinProcess(t){return this._getClientSDK().then(n=>n.trigger(m.BinProcess,t).catch(e.noop)).then(t=>{if(!t||!t.Status)throw new h(a.PaymentNotInitialized)})}getThreeDSecureData(t,e){return this._getClientSDK().then(n=>new Promise((r,i)=>{n.on(v.Validated,(t,e)=>{if(n.off(v.Validated),!e)return i(new p(t.ErrorDescription?t.ErrorDescription:\"An error was encountered while processing the transaction.\"));if(!t.ActionCode)return r({token:e});switch(t.ActionCode){case y.Success:return r({token:e});case y.NoAction:return t.ErrorNumber>0?i(new p(t.ErrorDescription)):t.Payment&&t.Payment.ExtendedData&&t.Payment.ExtendedData.SignatureVerification===w.Yes?r({token:e}):i(new p(\"Transaction signature could not be validated.\"));case y.Failure:return i(new p(\"User failed authentication or an error was encountered while processing the transaction.\"));case y.Error:return i(new p(t.ErrorDescription))}});const o={AcsUrl:t.acs_url,Payload:t.merchant_data},u=this._mapToPartialOrder(e,t.payer_auth_request);n.continue(b.CCA,o,u)}))}_mapToPartialOrder(t,e){const n={BillingAddress:this._mapToCardinalAddress(t.billingAddress)};return t.paymentData&&(n.Account=this._mapToCardinalAccount(t.paymentData)),t.billingAddress.email&&(n.Email1=t.billingAddress.email),t.shippingAddress&&(n.ShippingAddress=this._mapToCardinalAddress(t.shippingAddress)),{Consumer:n,OrderDetails:{OrderNumber:t.id,Amount:t.amount,CurrencyCode:t.currencyCode,OrderChannel:\"S\",TransactionId:e}}}_mapToCardinalAccount(t){return{AccountNumber:Number(t.ccNumber),ExpirationMonth:Number(t.ccExpiry.month),ExpirationYear:Number(t.ccExpiry.year),NameOnAccount:t.ccName,CardCode:Number(t.ccCvv)}}_mapToCardinalAddress(t){const e={FirstName:t.firstName,LastName:t.lastName,Address1:t.address1,City:t.city,State:t.stateOrProvince,PostalCode:t.postalCode,CountryCode:t.countryCode};return t.address2&&(e.Address2=t.address2),t.phone&&(e.Phone1=t.phone),e}_getClientSDK(){if(!this._sdk)throw new h(a.PaymentNotInitialized);return this._sdk}}class S extends f{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class x{constructor(t,e=window){this._scriptLoader=t,this._window=e}load(t,e){const n=e?\"https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js\":\"https://static.client.cardinaltrusted.com/songbird/v2.0.0/songbird.js\";return this._scriptLoader.loadScript(`${n}?v=${t}`).then(()=>{if(!this._window.Cardinal)throw new S;return this._window.Cardinal})}}function O(t,e){return Object.assign(t,{resolveIds:e})}class A extends f{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class C extends f{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class I extends A{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}var k=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})},E=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n};class P{constructor(t){this._paymentIntegrationService=t}execute(t,e){var n,r;return this._isHostedPaymentFormEnabled(null===(n=t.payment)||void 0===n?void 0:n.methodId,null===(r=t.payment)||void 0===r?void 0:r.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(t,e):this._executeWithoutHostedForm(t,e)}initialize(t){if(!this._isHostedPaymentFormEnabled(null==t?void 0:t.methodId,null==t?void 0:t.gatewayId)||!this._isHostedFieldAvailable(t))return this._shouldRenderHostedForm=!1,Promise.resolve();const e=t&&t.creditCard&&t.creditCard.form,n=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:r=\"\"}={}}=n.getStoreConfigOrThrow();if(!e)throw new A;const i=this._paymentIntegrationService.createHostedForm(r,e);return i.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=i,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new C)}_executeWithoutHostedForm(t,e){return k(this,void 0,void 0,function*(){const{payment:n}=t,r=E(t,[\"payment\"]),i=n&&n.paymentData;if(!n||!i)throw new I([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(r,e),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:i}))})}_executeWithHostedForm(t,e){return k(this,void 0,void 0,function*(){const{payment:n}=t,r=E(t,[\"payment\"]),i=this._hostedForm;if(!i)throw new h(a.PaymentNotInitialized);if(!n||!n.methodId)throw new I([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(r,e),yield i.validate().then(()=>i.submit(n))})}_isHostedPaymentFormEnabled(t,e){return!!t&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t,e).config.isHostedFormEnabled}_isHostedFieldAvailable(t){return!(0,e.values)(t&&t.creditCard&&t.creditCard.form.fields).every(e.isNil)}}var R=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};class T extends P{constructor(t,e){super(t),this._threeDSecureFlow=e}initialize(t){const e=Object.create(null,{initialize:{get:()=>super.initialize}});return R(this,void 0,void 0,function*(){yield e.initialize.call(this,t);const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),r=n(t.methodId);r.config.is3dsEnabled&&(yield this._threeDSecureFlow.prepare(r))})}execute(t,e){const n=Object.create(null,{execute:{get:()=>super.execute}});return R(this,void 0,void 0,function*(){const{payment:{methodId:r=\"\"}={}}=t,{getPaymentMethodOrThrow:i}=this._paymentIntegrationService.getState();return i(r).config.is3dsEnabled?this._threeDSecureFlow.start(n.execute.bind(this),t,e,this._hostedForm):n.execute.call(this,t,e)})}}const z=O(e=>new T(e,new s(e,new j(new x((0,t.vQ)())))),[{id:\"cybersource\"}]);var M=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};class U{constructor(t,e){this._paymentIntegrationService=t,this._cardinalClient=e}prepare(t){return M(this,void 0,void 0,function*(){yield this._cardinalClient.load(t.id,t.config.testMode)})}start(t,n,r,i){var u,a,c,s;return M(this,void 0,void 0,function*(){const{getCardInstrument:f}=this._paymentIntegrationService.getState(),{payment:l={methodId:\"\"}}=n,{paymentData:p={}}=l;try{return yield t(n,r)}catch(t){if(o(t)&&\"additional_action_required\"===(null===(u=t.body)||void 0===u?void 0:u.status)){const n=null===(c=null===(a=t.body.additional_action_required)||void 0===a?void 0:a.data)||void 0===c?void 0:c.token,r=null===(s=t.body.three_ds_result)||void 0===s?void 0:s.payer_auth_request;yield this._cardinalClient.configure(n);const u=this._getBin(p,f,i);u&&(yield this._cardinalClient.runBinProcess(u));try{return yield this._submitPayment(l,{xid:r},i)}catch(t){if(o(t)&&(0,e.some)(t.body.errors,{code:\"three_d_secure_required\"})){const e=t.body.three_ds_result,n=null==e?void 0:e.payer_auth_request;return yield this._cardinalClient.getThreeDSecureData(e,this._getOrderData()),this._submitPayment(l,{token:n},i)}throw t}}throw t}})}_getOrderData(){const t=this._paymentIntegrationService.getState(),e=t.getBillingAddressOrThrow(),n=t.getShippingAddress(),{cart:{currency:{code:r},cartAmount:i}}=t.getCheckoutOrThrow();return{billingAddress:e,shippingAddress:n,currencyCode:r,id:t.getOrderOrThrow().orderId.toString(),amount:i}}_submitPayment(t,n,r){return M(this,void 0,void 0,function*(){const i=(0,e.merge)({},t,{paymentData:{threeDSecure:n}});r||(yield this._paymentIntegrationService.submitPayment(i)),yield null==r?void 0:r.submit(i)})}_getBin(t,e,n){const r=i(t)&&e(t.instrumentId),o=function(t){const e=t;return!i(e)&&\"string\"==typeof e.ccName&&\"string\"==typeof e.ccNumber&&\"object\"==typeof e.ccExpiry&&\"string\"==typeof e.ccExpiry.month&&\"string\"==typeof e.ccExpiry.year}(t)&&t.ccNumber,u=n?n.getBin():o;return(r?r.iin:u)||\"\"}}var F=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};class N extends P{constructor(t,e){super(t),this._threeDSecureFlow=e}initialize(t){const e=Object.create(null,{initialize:{get:()=>super.initialize}});return F(this,void 0,void 0,function*(){yield e.initialize.call(this,t);const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),r=n(t.methodId);r.config.is3dsEnabled&&(yield this._threeDSecureFlow.prepare(r))})}execute(t,e){const n=Object.create(null,{execute:{get:()=>super.execute}});return F(this,void 0,void 0,function*(){const{payment:{methodId:r=\"\"}={}}=t,{getPaymentMethodOrThrow:i}=this._paymentIntegrationService.getState();return i(r).config.is3dsEnabled?this._threeDSecureFlow.start(n.execute.bind(this),t,e,this._hostedForm):n.execute.call(this,t,e)})}}const D=O(e=>new N(e,new U(e,new j(new x((0,t.vQ)())))),[{id:\"cybersourcev2\"},{id:\"bnz\"}])})(),module.exports=r})();\n//# sourceMappingURL=cybersource.js.map"
  },
  {
    "path": "dist/cjs/integrations/google-pay.js",
    "content": "(()=>{var e={9165(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){var t=new r.default;return new i.default(t,e)};var r=n(9828),i=n(5470)},9828(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.build=function(e,t,n){var r=this,i=document.createElement(\"form\");return i.style.display=\"none\",i.setAttribute(\"action\",e),i.setAttribute(\"method\",\"POST\"),i.setAttribute(\"target\",n||\"_top\"),Object.keys(t).forEach(function(e){var n=t[e];i.appendChild(r._createInput(n,e))}),i},e.prototype._createInput=function(e,t){var n=document.createElement(\"input\");return n.setAttribute(\"name\",t),n.setAttribute(\"type\",\"hidden\"),n.setAttribute(\"value\",e),n},e}();t.default=n},5470(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(9783),i=function(){function e(e,t){this._formBuilder=e,this._options=t}return e.prototype.postForm=function(e,t,n,r){var i=this._formBuilder.build(this._prependHost(e),t,r);window.addEventListener(\"unload\",function e(){window.removeEventListener(\"unload\",e),n&&n()}),document.body.appendChild(i),i.submit()},e.prototype._prependHost=function(e){return this._options&&this._options.host&&!(0,r.isAbsoluteUrl)(e)?(0,r.joinPaths)(this._options.host,e):e},e}();t.default=i},8686(e,t,n){\"use strict\";t.createFormPoster=void 0;var r=n(9165);Object.defineProperty(t,\"createFormPoster\",{enumerable:!0,get:function(){return r.default}});n(5470)},9783(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isAbsoluteUrl=function(e){return/^https?:\\/\\//.test(e)},t.joinPaths=function(e,t){return\"\".concat((n=e,n.replace(/\\/$/,\"\")),\"/\").concat(function(e){return e.replace(/^\\//,\"\")}(t));var n}},4325(e,t,n){\"use strict\";n.d(t,{g:()=>i});var r=n(5889),i=function(){function e(){this._cache={}}return e.prototype.read=function(e,t){var n=this.getKey(e,t.params);return this._cache[n]||null},e.prototype.write=function(e,t,n){var r=this.getKey(e,t.params);this._cache[r]=n},e.prototype.getKey=function(e,t){return void 0===t&&(t={}),0===Object.keys(t).length?e:\"\".concat(e,\"?\").concat(r.stringify(t))},e}()},321(e,t,n){\"use strict\";n.d(t,{A:()=>s});var r=n(168),i=n(1675),o=n(5861),a=n(4670);function s(e){return new a.A(new o.A,new i.A,r,e)}},6889(e,t,n){\"use strict\";n.d(t,{A:()=>i});var r=n(2024);function i(e){return new r.A(e)}},4043(e,t,n){\"use strict\";n.r(t),n.d(t,{RequestSender:()=>o.A,Timeout:()=>a.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),a=n(2024)},4843(e,t,n){\"use strict\";function r(e){return!!e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof e.then}n.d(t,{A:()=>r})},1675(e,t,n){\"use strict\";n.d(t,{A:()=>s});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,a=/application\\/x-www-form-urlencoded/;const s=function(){function e(){}return e.prototype.toRequestBody=function(e){var t=e.headers?this._getHeader(e.headers,\"Content-Type\"):\"\";if(e.body){if(o.test(t))return JSON.stringify(e.body);if(a.test(t))return(0,i.A)(e.body)}return e.body},e.prototype.toResponse=function(e){var t=this._parseResponseHeaders(e.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in e?e.response:e.responseText,t),headers:t,status:e.status,statusText:e.statusText}},e.prototype._parseResponseBody=function(e,t){var n=this._getHeader(t,\"Content-Type\");return e&&o.test(n)?JSON.parse(e):e},e.prototype._parseResponseHeaders=function(e){return(e?e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(e,t){var n,i=t.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},e),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):e},{})},e.prototype._getHeader=function(e,t){return e&&t&&(e[t]||e[t.toLowerCase()])||\"\"},e}()},5861(e,t,n){\"use strict\";n.d(t,{A:()=>i});var r=n(5889);const i=function(){function e(){}return e.prototype.createRequest=function(e,t){var n=new XMLHttpRequest;return this._configureRequest(n,e,t),n},e.prototype._configureRequest=function(e,t,n){void 0===n&&(n={}),e.open(n.method||\"GET\",this._formatUrl(t,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(e,n.headers),\"boolean\"==typeof n.credentials&&(e.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(e.timeout=n.timeout)},e.prototype._configureRequestHeaders=function(e,t){Object.keys(t).filter(function(e){return null!==t[e]}).forEach(function(n){e.setRequestHeader(n,t[n])})},e.prototype._formatUrl=function(e,t,n){return void 0===n&&(n=!0),t&&0!==Object.keys(t).length?\"\".concat(e,\"?\").concat(r.stringify(t,{encode:n})):e},e}()},4670(e,t,n){\"use strict\";n.d(t,{A:()=>c});var r=n(1635),i=n(35),o=n.n(i),a=n(4325),s=n(4843),u=n(2024);const c=function(){function e(e,t,n,r){void 0===r&&(r={}),this._requestFactory=e,this._payloadTransformer=t,this._cookie=n,this._options=r,this._cache=this._options.cache||new a.g}return e.prototype.sendRequest=function(e,t){var n=this,r=this._mergeDefaultOptions(e,t),i=this._getCachedRequest(e,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(e),r);return new Promise(function(t,i){var a=function(){var a=n._payloadTransformer.toResponse(o);a.status>=200&&a.status<300?(n._cacheRequest(e,r,a),t(a)):i(a)};o.onload=a,o.onerror=a,o.onabort=a,o.ontimeout=a,r.timeout instanceof u.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,s.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},e.prototype.get=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"GET\"}))},e.prototype.post=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"POST\"}))},e.prototype.put=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"PUT\"}))},e.prototype.patch=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"PATCH\"}))},e.prototype.delete=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"DELETE\"}))},e.prototype._mergeDefaultOptions=function(e,t){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(e,t)&&this._isLocalRequest(e)&&(n.headers[\"X-XSRF-TOKEN\"]=r),t&&t.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,t)},e.prototype._prependHost=function(e){return!this._options.host||/^https?:\\/\\//.test(e)?e:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(e.replace(/^\\//,\"\"))},e.prototype._shouldCacheRequest=function(e){return\"GET\"===(e.method||\"GET\").toUpperCase()&&Boolean(e.cache)},e.prototype._getCachedRequest=function(e,t){return this._shouldCacheRequest(t)?this._cache.read(e,t):null},e.prototype._cacheRequest=function(e,t,n){this._shouldCacheRequest(t)&&this._cache.write(e,t,n)},e.prototype._isAssetRequest=function(e,t){return(!t||!t.method||\"GET\"===t.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(e.split(\"?\")[0])},e.prototype._isLocalRequest=function(e){return!!e.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!e.match(new RegExp(\"^(https?:)?//\"))},e}()},2024(e,t,n){\"use strict\";n.d(t,{A:()=>r});const r=function(){function e(e){var t=this;this._delay=e,this._promise=new Promise(function(e){t._resolve=e})}return e.prototype.onComplete=function(e){this._promise.then(e)},e.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},e.prototype.start=function(){var e=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return e.complete()},this._delay))},e}()},710(e,t,n){\"use strict\";function r(e){return\"object\"!=typeof e||null===e?e:Object.keys(e).filter(function(t){return void 0!==e[t]}).map(function(t){var n=e[t];return\"string\"==typeof n?\"\".concat(t,\"=\").concat(encodeURIComponent(n)):\"\".concat(t,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(t,{A:()=>r})},5889(e,t,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),a=n(3814);function s(e){if(\"string\"!=typeof e||1!==e.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function u(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}function c(e,t){return t.decode?i(e):e}function l(e){return Array.isArray(e)?e.sort():\"object\"==typeof e?l(Object.keys(e)).sort((e,t)=>Number(e)-Number(t)).map(t=>e[t]):e}function d(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function h(e){const t=(e=d(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function f(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&\"string\"==typeof e&&\"\"!==e.trim()?e=Number(e):!t.parseBooleans||null===e||\"true\"!==e.toLowerCase()&&\"false\"!==e.toLowerCase()||(e=\"true\"===e.toLowerCase()),e}function p(e,t){s((t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,n,r)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case\"bracket\":return(e,n,r)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case\"comma\":case\"separator\":return(t,n,r)=>{const i=\"string\"==typeof n&&n.includes(e.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&c(n,e).includes(e.arrayFormatSeparator);n=o?c(n,e):n;const a=i||o?n.split(e.arrayFormatSeparator).map(t=>c(t,e)):null===n?n:c(n,e);r[t]=a};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),r=Object.create(null);if(\"string\"!=typeof e)return r;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return r;for(const i of e.split(\"&\")){if(\"\"===i)continue;let[e,a]=o(t.decode?i.replace(/\\+/g,\" \"):i,\"=\");a=void 0===a?null:[\"comma\",\"separator\"].includes(t.arrayFormat)?a:c(a,t),n(c(e,t),a,r)}for(const e of Object.keys(r)){const n=r[e];if(\"object\"==typeof n&&null!==n)for(const e of Object.keys(n))n[e]=f(n[e],t);else r[e]=f(n,t)}return!1===t.sort?r:(!0===t.sort?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((e,t)=>{const n=r[t];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?e[t]=l(n):e[t]=n,e},Object.create(null))}t.extract=h,t.parse=p,t.stringify=(e,t)=>{if(!e)return\"\";s((t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},t)).arrayFormatSeparator);const n=n=>t.skipNull&&null==e[n]||t.skipEmptyString&&\"\"===e[n],r=function(e){switch(e.arrayFormat){case\"index\":return t=>(n,r)=>{const i=n.length;return void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(t,e),\"[\",i,\"]\"].join(\"\")]:[...n,[u(t,e),\"[\",u(i,e),\"]=\",u(r,e)].join(\"\")]};case\"bracket\":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(t,e),\"[]\"].join(\"\")]:[...n,[u(t,e),\"[]=\",u(r,e)].join(\"\")];case\"comma\":case\"separator\":return t=>(n,r)=>null==r||0===r.length?n:0===n.length?[[u(t,e),\"=\",u(r,e)].join(\"\")]:[[n,u(r,e)].join(e.arrayFormatSeparator)];default:return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,u(t,e)]:[...n,[u(t,e),\"=\",u(r,e)].join(\"\")]}}(t),i={};for(const t of Object.keys(e))n(t)||(i[t]=e[t]);const o=Object.keys(i);return!1!==t.sort&&o.sort(t.sort),o.map(n=>{const i=e[n];return void 0===i?\"\":null===i?u(n,t):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):u(n,t)+\"=\"+u(i,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,r]=o(e,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:p(h(e),t)},t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:c(r,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=d(e.url).split(\"?\")[0]||\"\",i=t.extract(e.url),o=t.parse(i,{sort:!1}),a=Object.assign(o,e.query);let s=t.stringify(a,n);s&&(s=`?${s}`);let c=function(e){let t=\"\";const n=e.indexOf(\"#\");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(c=`#${u(e.fragmentIdentifier,n)}`),`${r}${s}${c}`},t.pick=(e,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:s}=t.parseUrl(e,r);return t.stringifyUrl({url:i,query:a(o,n),fragmentIdentifier:s},r)},t.exclude=(e,n,r)=>{const i=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,i,r)}},5477(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.canSupportRel=function(e){var t=document.createElement(\"link\");return!!(t.relList&&t.relList.supports&&t.relList.supports(e))},e}();t.default=n},471(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(e,t,n){\"use strict\";t._U=t.vQ=void 0;n(4886),n(471);var r=n(5895);Object.defineProperty(t,\"vQ\",{enumerable:!0,get:function(){return r.default}});n(7995),n(9722);var i=n(282);Object.defineProperty(t,\"_U\",{enumerable:!0,get:function(){return i.default}})},4886(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._scripts={},this._preloadedScripts={}}return e.prototype.loadScript=function(e,t){var n=this;return this._scripts[e]||(this._scripts[e]=new Promise(function(r,i){var o=document.createElement(\"script\"),a=t||{},s=a.async,u=void 0!==s&&s,c=a.attributes,l=void 0===c?{}:c;Object.keys(l).forEach(function(e){o.setAttribute(e,l[e])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(t){delete n._scripts[e],i(t)},o.async=u,o.src=e,document.body.appendChild(o)})),this._scripts[e]},e.prototype.loadScripts=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.loadScript(e,t)})).then(function(){})},e.prototype.preloadScript=function(e,t){var n=this;return this._preloadedScripts[e]||(this._preloadedScripts[e]=new Promise(function(r,i){var o=(t||{}).prefetch,a=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var s=document.createElement(\"link\");s.as=\"script\",s.rel=a,s.href=e,s.onload=function(){r()},s.onerror=function(){delete n._preloadedScripts[e],i()},document.head.appendChild(s)}else n._requestSender.get(e,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[e]},e.prototype.preloadScripts=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.preloadScript(e,t)})).then(function(){})},e}();t.default=n},7995(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._stylesheets={},this._preloadedStylesheets={}}return e.prototype.loadStylesheet=function(e,t){var n=this;return this._stylesheets[e]||(this._stylesheets[e]=new Promise(function(r,i){var o=document.createElement(\"link\"),a=t||{},s=a.prepend,u=void 0!==s&&s,c=a.attributes,l=void 0===c?{}:c;Object.keys(l).forEach(function(e){o.setAttribute(e,l[e])}),o.onload=function(){return r()},o.onerror=function(t){delete n._stylesheets[e],i(t)},o.rel=\"stylesheet\",o.href=e,u&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[e]},e.prototype.loadStylesheets=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.loadStylesheet(e,t)})).then(function(){})},e.prototype.preloadStylesheet=function(e,t){var n=this;return this._preloadedStylesheets[e]||(this._preloadedStylesheets[e]=new Promise(function(r,i){var o=(t||{}).prefetch,a=void 0!==o&&o,s=a?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(s)){var u=document.createElement(\"link\");u.as=\"style\",u.rel=a?\"prefetch\":\"preload\",u.href=e,u.onload=function(){r()},u.onerror=function(t){delete n._preloadedStylesheets[e],i(t)},document.head.appendChild(u)}else n._requestSender.get(e,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[e]},e.prototype.preloadStylesheets=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.preloadStylesheet(e,t)})).then(function(){})},e}();t.default=n},1915(e){\"use strict\";var t=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+t+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+t+\")+\",\"gi\");function i(e,t){try{return[decodeURIComponent(e.join(\"\"))]}catch(e){}if(1===e.length)return e;t=t||1;var n=e.slice(0,t),r=e.slice(t);return Array.prototype.concat.call([],i(n),i(r))}function o(e){try{return decodeURIComponent(e)}catch(o){for(var t=e.match(n)||[],r=1;r<t.length;r++)t=(e=i(t,r).join(\"\")).match(n)||[];return e}}e.exports=function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof e+\"`\");try{return e=e.replace(/\\+/g,\" \"),decodeURIComponent(e)}catch(t){return function(e){for(var t={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(e);n;){try{t[n[0]]=decodeURIComponent(n[0])}catch(e){var i=o(n[0]);i!==n[0]&&(t[n[0]]=i)}n=r.exec(e)}t[\"%C2\"]=\"�\";for(var a=Object.keys(t),s=0;s<a.length;s++){var u=a[s];e=e.replace(new RegExp(u,\"g\"),t[u])}return e}(e)}}},3814(e){\"use strict\";e.exports=function(e,t){for(var n={},r=Object.keys(e),i=Array.isArray(t),o=0;o<r.length;o++){var a=r[o],s=e[a];(i?-1!==t.indexOf(a):t(a,s,e))&&(n[a]=s)}return n}},168(e){var t;t=function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(t,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=e({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var a=JSON.stringify(n);/^[\\{\\[]/.test(a)&&(n=a)}catch(e){}n=r.write?r.write(n,t):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var s=\"\";for(var u in o)o[u]&&(s+=\"; \"+u,!0!==o[u]&&(s+=\"=\"+o[u].split(\";\")[0]));return document.cookie=t+\"=\"+n+s}}function a(e,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],a=0;a<o.length;a++){var s=o[a].split(\"=\"),u=s.slice(1).join(\"=\");n||'\"'!==u.charAt(0)||(u=u.slice(1,-1));try{var c=t(s[0]);if(u=(r.read||r)(u,c)||t(u),n)try{u=JSON.parse(u)}catch(e){}if(i[c]=u,e===c)break}catch(e){}}return e?i[e]:i}}return i.set=o,i.get=function(e){return a(e,!1)},i.getJSON=function(e){return a(e,!0)},i.remove=function(t,n){o(t,\"\",e(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(t),e.exports=t()},35(e,t,n){e=n.nmd(e);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",a=\"[object Function]\",s=\"[object Object]\",u=/^\\[object .+?Constructor\\]$/,c=/^(?:0|[1-9]\\d*)$/,l={};l[\"[object Float32Array]\"]=l[\"[object Float64Array]\"]=l[\"[object Int8Array]\"]=l[\"[object Int16Array]\"]=l[\"[object Int32Array]\"]=l[\"[object Uint8Array]\"]=l[\"[object Uint8ClampedArray]\"]=l[\"[object Uint16Array]\"]=l[\"[object Uint32Array]\"]=!0,l[o]=l[\"[object Array]\"]=l[\"[object ArrayBuffer]\"]=l[\"[object Boolean]\"]=l[\"[object DataView]\"]=l[\"[object Date]\"]=l[\"[object Error]\"]=l[a]=l[\"[object Map]\"]=l[\"[object Number]\"]=l[s]=l[\"[object RegExp]\"]=l[\"[object Set]\"]=l[\"[object String]\"]=l[\"[object WeakMap]\"]=!1;var d,h,f,p=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,y=\"object\"==typeof self&&self&&self.Object===Object&&self,g=p||y||Function(\"return this\")(),_=t&&!t.nodeType&&t,v=_&&e&&!e.nodeType&&e,m=v&&v.exports===_,w=m&&p.process,P=function(){try{return v&&v.require&&v.require(\"util\").types||w&&w.binding&&w.binding(\"util\")}catch(e){}}(),b=P&&P.isTypedArray,S=Array.prototype,C=Function.prototype,I=Object.prototype,O=g[\"__core-js_shared__\"],A=C.toString,T=I.hasOwnProperty,k=(d=/[^.]+$/.exec(O&&O.keys&&O.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+d:\"\",E=I.toString,M=A.call(Object),R=RegExp(\"^\"+A.call(T).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),N=m?g.Buffer:void 0,z=g.Symbol,j=g.Uint8Array,D=(N&&N.allocUnsafe,h=Object.getPrototypeOf,f=Object,function(e){return h(f(e))}),x=Object.create,G=I.propertyIsEnumerable,B=S.splice,L=z?z.toStringTag:void 0,F=function(){try{var e=se(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),U=N?N.isBuffer:void 0,q=Math.max,W=Date.now,V=se(g,\"Map\"),H=se(Object,\"create\"),K=function(){function e(){}return function(t){if(!me(t))return{};if(x)return x(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function Z(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Y(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function J(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function $(e){var t=this.__data__=new Y(e);this.size=t.size}function Q(e,t,n){(void 0!==n&&!he(e[t],n)||void 0===n&&!(t in e))&&te(e,t,n)}function X(e,t,n){var r=e[t];T.call(e,t)&&he(r,n)&&(void 0!==n||t in e)||te(e,t,n)}function ee(e,t){for(var n=e.length;n--;)if(he(e[n][0],t))return n;return-1}function te(e,t,n){\"__proto__\"==t&&F?F(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}Z.prototype.clear=function(){this.__data__=H?H(null):{},this.size=0},Z.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Z.prototype.get=function(e){var t=this.__data__;if(H){var n=t[e];return n===r?void 0:n}return T.call(t,e)?t[e]:void 0},Z.prototype.has=function(e){var t=this.__data__;return H?void 0!==t[e]:T.call(t,e)},Z.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=H&&void 0===t?r:t,this},Y.prototype.clear=function(){this.__data__=[],this.size=0},Y.prototype.delete=function(e){var t=this.__data__,n=ee(t,e);return!(n<0||(n==t.length-1?t.pop():B.call(t,n,1),--this.size,0))},Y.prototype.get=function(e){var t=this.__data__,n=ee(t,e);return n<0?void 0:t[n][1]},Y.prototype.has=function(e){return ee(this.__data__,e)>-1},Y.prototype.set=function(e,t){var n=this.__data__,r=ee(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},J.prototype.clear=function(){this.size=0,this.__data__={hash:new Z,map:new(V||Y),string:new Z}},J.prototype.delete=function(e){var t=ae(this,e).delete(e);return this.size-=t?1:0,t},J.prototype.get=function(e){return ae(this,e).get(e)},J.prototype.has=function(e){return ae(this,e).has(e)},J.prototype.set=function(e,t){var n=ae(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},$.prototype.clear=function(){this.__data__=new Y,this.size=0},$.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},$.prototype.get=function(e){return this.__data__.get(e)},$.prototype.has=function(e){return this.__data__.has(e)},$.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Y){var r=n.__data__;if(!V||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new J(r)}return n.set(e,t),this.size=n.size,this};function ne(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":L&&L in Object(e)?function(e){var t=T.call(e,L),n=e[L];try{e[L]=void 0;var r=!0}catch(e){}var i=E.call(e);return r&&(t?e[L]=n:delete e[L]),i}(e):function(e){return E.call(e)}(e)}function re(e){return we(e)&&ne(e)==o}function ie(e,t,n,r,i){e!==t&&function(e,t,n){for(var r=-1,i=Object(e),o=n(e),a=o.length;a--;){var s=o[++r];if(!1===t(i[s],s,i))break}}(t,function(o,a){if(i||(i=new $),me(o))!function(e,t,n,r,i,o,a){var u=le(e,n),c=le(t,n),l=a.get(c);if(l)Q(e,n,l);else{var d,h,f,p,y,g=o?o(u,c,n+\"\",e,t,a):void 0,_=void 0===g;if(_){var v=pe(c),m=!v&&ge(c),w=!v&&!m&&Pe(c);g=c,v||m||w?pe(u)?g=u:we(y=u)&&ye(y)?g=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}(u):m?(_=!1,g=function(e){return e.slice()}(c)):w?(_=!1,p=new(f=(d=c).buffer).constructor(f.byteLength),new j(p).set(new j(f)),h=p,g=new d.constructor(h,d.byteOffset,d.length)):g=[]:function(e){if(!we(e)||ne(e)!=s)return!1;var t=D(e);if(null===t)return!0;var n=T.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&A.call(n)==M}(c)||fe(c)?(g=u,fe(u)?g=function(e){return function(e,t,n){var r=!n;n||(n={});for(var i=-1,o=t.length;++i<o;){var a=t[i],s=void 0;void 0===s&&(s=e[a]),r?te(n,a,s):X(n,a,s)}return n}(e,be(e))}(u):me(u)&&!_e(u)||(g=function(e){return\"function\"!=typeof e.constructor||ce(e)?{}:K(D(e))}(c))):_=!1}_&&(a.set(c,g),i(g,c,r,o,a),a.delete(c)),Q(e,n,g)}}(e,t,a,n,ie,r,i);else{var u=r?r(le(e,a),o,a+\"\",e,t,i):void 0;void 0===u&&(u=o),Q(e,a,u)}},be)}var oe=F?function(e,t){return F(e,\"toString\",{configurable:!0,enumerable:!1,value:(n=t,function(){return n}),writable:!0});var n}:Ie;function ae(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function se(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!me(e)||function(e){return!!k&&k in e}(e))&&(_e(e)?R:u).test(function(e){if(null!=e){try{return A.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e))}(n)?n:void 0}function ue(e,t){var n=typeof e;return!!(t=t??i)&&(\"number\"==n||\"symbol\"!=n&&c.test(e))&&e>-1&&e%1==0&&e<t}function ce(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||I)}function le(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var de=function(e){var t=0,n=0;return function(){var r=W(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(oe);function he(e,t){return e===t||e!=e&&t!=t}var fe=re(function(){return arguments}())?re:function(e){return we(e)&&T.call(e,\"callee\")&&!G.call(e,\"callee\")},pe=Array.isArray;function ye(e){return null!=e&&ve(e.length)&&!_e(e)}var ge=U||function(){return!1};function _e(e){if(!me(e))return!1;var t=ne(e);return t==a||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function ve(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=i}function me(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function we(e){return null!=e&&\"object\"==typeof e}var Pe=b?function(e){return function(t){return e(t)}}(b):function(e){return we(e)&&ve(e.length)&&!!l[ne(e)]};function be(e){return ye(e)?function(e,t){var n=pe(e),r=!n&&fe(e),i=!n&&!r&&ge(e),o=!n&&!r&&!i&&Pe(e),a=n||r||i||o,s=a?function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}(e.length,String):[],u=s.length;for(var c in e)!t&&!T.call(e,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||ue(c,u))||s.push(c);return s}(e,!0):function(e){if(!me(e))return function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}(e);var t=ce(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&T.call(e,r))&&n.push(r);return n}(e)}var Se,Ce=(Se=function(e,t,n){ie(e,t,n)},function(e,t){return de(function(e,t,n){return t=q(void 0===t?e.length-1:t,0),function(){for(var r=arguments,i=-1,o=q(r.length-t,0),a=Array(o);++i<o;)a[i]=r[t+i];i=-1;for(var s=Array(t+1);++i<t;)s[i]=r[i];return s[t]=n(a),function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}(e,this,s)}}(e,t,Ie),e+\"\")}(function(e,t){var n=-1,r=t.length,i=r>1?t[r-1]:void 0,o=r>2?t[2]:void 0;for(i=Se.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(e,t,n){if(!me(n))return!1;var r=typeof t;return!!(\"number\"==r?ye(n)&&ue(t,n.length):\"string\"==r&&t in n)&&he(n[t],e)}(t[0],t[1],o)&&(i=r<3?void 0:i,r=1),e=Object(e);++n<r;){var a=t[n];a&&Se(e,a,n)}return e}));function Ie(e){return e}e.exports=Ce},9440(e,t,n){e=n.nmd(e),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",s=32,u=128,c=1/0,l=9007199254740991,d=NaN,h=4294967295,f=[[\"ary\",u],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",s],[\"partialRight\",64],[\"rearg\",256]],p=\"[object Arguments]\",y=\"[object Array]\",g=\"[object Boolean]\",_=\"[object Date]\",v=\"[object Error]\",m=\"[object Function]\",w=\"[object GeneratorFunction]\",P=\"[object Map]\",b=\"[object Number]\",S=\"[object Object]\",C=\"[object Promise]\",I=\"[object RegExp]\",O=\"[object Set]\",A=\"[object String]\",T=\"[object Symbol]\",k=\"[object WeakMap]\",E=\"[object ArrayBuffer]\",M=\"[object DataView]\",R=\"[object Float32Array]\",N=\"[object Float64Array]\",z=\"[object Int8Array]\",j=\"[object Int16Array]\",D=\"[object Int32Array]\",x=\"[object Uint8Array]\",G=\"[object Uint8ClampedArray]\",B=\"[object Uint16Array]\",L=\"[object Uint32Array]\",F=/\\b__p \\+= '';/g,U=/\\b(__p \\+=) '' \\+/g,q=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,W=/&(?:amp|lt|gt|quot|#39);/g,V=/[&<>\"']/g,H=RegExp(W.source),K=RegExp(V.source),Z=/<%-([\\s\\S]+?)%>/g,Y=/<%([\\s\\S]+?)%>/g,J=/<%=([\\s\\S]+?)%>/g,$=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,ee=/[\\\\^$.*+?()[\\]{}|]/g,te=RegExp(ee.source),ne=/^\\s+/,re=/\\s/,ie=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,oe=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ae=/,? & /,se=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ue=/[()=,{}\\[\\]\\/\\s]/,ce=/\\\\(\\\\)?/g,le=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,de=/\\w*$/,he=/^[-+]0x[0-9a-f]+$/i,fe=/^0b[01]+$/i,pe=/^\\[object .+?Constructor\\]$/,ye=/^0o[0-7]+$/i,ge=/^(?:0|[1-9]\\d*)$/,_e=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,ve=/($^)/,me=/['\\n\\r\\u2028\\u2029\\\\]/g,we=\"\\\\ud800-\\\\udfff\",Pe=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",be=\"\\\\u2700-\\\\u27bf\",Se=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Ce=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ie=\"\\\\ufe0e\\\\ufe0f\",Oe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Ae=\"[\"+we+\"]\",Te=\"[\"+Oe+\"]\",ke=\"[\"+Pe+\"]\",Ee=\"\\\\d+\",Me=\"[\"+be+\"]\",Re=\"[\"+Se+\"]\",Ne=\"[^\"+we+Oe+Ee+be+Se+Ce+\"]\",ze=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",je=\"[^\"+we+\"]\",De=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",xe=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ge=\"[\"+Ce+\"]\",Be=\"\\\\u200d\",Le=\"(?:\"+Re+\"|\"+Ne+\")\",Fe=\"(?:\"+Ge+\"|\"+Ne+\")\",Ue=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",qe=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",We=\"(?:\"+ke+\"|\"+ze+\")?\",Ve=\"[\"+Ie+\"]?\",He=Ve+We+\"(?:\"+Be+\"(?:\"+[je,De,xe].join(\"|\")+\")\"+Ve+We+\")*\",Ke=\"(?:\"+[Me,De,xe].join(\"|\")+\")\"+He,Ze=\"(?:\"+[je+ke+\"?\",ke,De,xe,Ae].join(\"|\")+\")\",Ye=RegExp(\"['’]\",\"g\"),Je=RegExp(ke,\"g\"),$e=RegExp(ze+\"(?=\"+ze+\")|\"+Ze+He,\"g\"),Qe=RegExp([Ge+\"?\"+Re+\"+\"+Ue+\"(?=\"+[Te,Ge,\"$\"].join(\"|\")+\")\",Fe+\"+\"+qe+\"(?=\"+[Te,Ge+Le,\"$\"].join(\"|\")+\")\",Ge+\"?\"+Le+\"+\"+Ue,Ge+\"+\"+qe,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Ee,Ke].join(\"|\"),\"g\"),Xe=RegExp(\"[\"+Be+we+Pe+Ie+\"]\"),et=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,tt=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],nt=-1,rt={};rt[R]=rt[N]=rt[z]=rt[j]=rt[D]=rt[x]=rt[G]=rt[B]=rt[L]=!0,rt[p]=rt[y]=rt[E]=rt[g]=rt[M]=rt[_]=rt[v]=rt[m]=rt[P]=rt[b]=rt[S]=rt[I]=rt[O]=rt[A]=rt[k]=!1;var it={};it[p]=it[y]=it[E]=it[M]=it[g]=it[_]=it[R]=it[N]=it[z]=it[j]=it[D]=it[P]=it[b]=it[S]=it[I]=it[O]=it[A]=it[T]=it[x]=it[G]=it[B]=it[L]=!0,it[v]=it[m]=it[k]=!1;var ot={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},at=parseFloat,st=parseInt,ut=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,ct=\"object\"==typeof self&&self&&self.Object===Object&&self,lt=ut||ct||Function(\"return this\")(),dt=t&&!t.nodeType&&t,ht=dt&&e&&!e.nodeType&&e,ft=ht&&ht.exports===dt,pt=ft&&ut.process,yt=function(){try{return ht&&ht.require&&ht.require(\"util\").types||pt&&pt.binding&&pt.binding(\"util\")}catch(e){}}(),gt=yt&&yt.isArrayBuffer,_t=yt&&yt.isDate,vt=yt&&yt.isMap,mt=yt&&yt.isRegExp,wt=yt&&yt.isSet,Pt=yt&&yt.isTypedArray;function bt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function St(e,t,n,r){for(var i=-1,o=null==e?0:e.length;++i<o;){var a=e[i];t(r,a,n(a),e)}return r}function Ct(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}function It(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function Ot(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}function At(e,t){for(var n=-1,r=null==e?0:e.length,i=0,o=[];++n<r;){var a=e[n];t(a,n,e)&&(o[i++]=a)}return o}function Tt(e,t){return!(null==e||!e.length)&&Gt(e,t,0)>-1}function kt(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function Et(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}function Mt(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}function Rt(e,t,n,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(n=e[++i]);++i<o;)n=t(n,e[i],i,e);return n}function Nt(e,t,n,r){var i=null==e?0:e.length;for(r&&i&&(n=e[--i]);i--;)n=t(n,e[i],i,e);return n}function zt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var jt=Ut(\"length\");function Dt(e,t,n){var r;return n(e,function(e,n,i){if(t(e,n,i))return r=n,!1}),r}function xt(e,t,n,r){for(var i=e.length,o=n+(r?1:-1);r?o--:++o<i;)if(t(e[o],o,e))return o;return-1}function Gt(e,t,n){return t==t?function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}(e,t,n):xt(e,Lt,n)}function Bt(e,t,n,r){for(var i=n-1,o=e.length;++i<o;)if(r(e[i],t))return i;return-1}function Lt(e){return e!=e}function Ft(e,t){var n=null==e?0:e.length;return n?Vt(e,t)/n:d}function Ut(e){return function(t){return null==t?r:t[e]}}function qt(e){return function(t){return null==e?r:e[t]}}function Wt(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}function Vt(e,t){for(var n,i=-1,o=e.length;++i<o;){var a=t(e[i]);a!==r&&(n=n===r?a:n+a)}return n}function Ht(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}function Kt(e){return e?e.slice(0,dn(e)+1).replace(ne,\"\"):e}function Zt(e){return function(t){return e(t)}}function Yt(e,t){return Et(t,function(t){return e[t]})}function Jt(e,t){return e.has(t)}function $t(e,t){for(var n=-1,r=e.length;++n<r&&Gt(t,e[n],0)>-1;);return n}function Qt(e,t){for(var n=e.length;n--&&Gt(t,e[n],0)>-1;);return n}var Xt=qt({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),en=qt({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function tn(e){return\"\\\\\"+ot[e]}function nn(e){return Xe.test(e)}function rn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function on(e,t){return function(n){return e(t(n))}}function an(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var s=e[n];s!==t&&s!==a||(e[n]=a,o[i++]=n)}return o}function sn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}function un(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=[e,e]}),n}function cn(e){return nn(e)?function(e){for(var t=$e.lastIndex=0;$e.test(e);)++t;return t}(e):jt(e)}function ln(e){return nn(e)?function(e){return e.match($e)||[]}(e):function(e){return e.split(\"\")}(e)}function dn(e){for(var t=e.length;t--&&re.test(e.charAt(t)););return t}var hn=qt({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),fn=function e(t){var n,re=(t=null==t?lt:fn.defaults(lt.Object(),t,fn.pick(lt,tt))).Array,we=t.Date,Pe=t.Error,be=t.Function,Se=t.Math,Ce=t.Object,Ie=t.RegExp,Oe=t.String,Ae=t.TypeError,Te=re.prototype,ke=be.prototype,Ee=Ce.prototype,Me=t[\"__core-js_shared__\"],Re=ke.toString,Ne=Ee.hasOwnProperty,ze=0,je=(n=/[^.]+$/.exec(Me&&Me.keys&&Me.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",De=Ee.toString,xe=Re.call(Ce),Ge=lt._,Be=Ie(\"^\"+Re.call(Ne).replace(ee,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Le=ft?t.Buffer:r,Fe=t.Symbol,Ue=t.Uint8Array,qe=Le?Le.allocUnsafe:r,We=on(Ce.getPrototypeOf,Ce),Ve=Ce.create,He=Ee.propertyIsEnumerable,Ke=Te.splice,Ze=Fe?Fe.isConcatSpreadable:r,$e=Fe?Fe.iterator:r,Xe=Fe?Fe.toStringTag:r,ot=function(){try{var e=uo(Ce,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),ut=t.clearTimeout!==lt.clearTimeout&&t.clearTimeout,ct=we&&we.now!==lt.Date.now&&we.now,dt=t.setTimeout!==lt.setTimeout&&t.setTimeout,ht=Se.ceil,pt=Se.floor,yt=Ce.getOwnPropertySymbols,jt=Le?Le.isBuffer:r,qt=t.isFinite,pn=Te.join,yn=on(Ce.keys,Ce),gn=Se.max,_n=Se.min,vn=we.now,mn=t.parseInt,wn=Se.random,Pn=Te.reverse,bn=uo(t,\"DataView\"),Sn=uo(t,\"Map\"),Cn=uo(t,\"Promise\"),In=uo(t,\"Set\"),On=uo(t,\"WeakMap\"),An=uo(Ce,\"create\"),Tn=On&&new On,kn={},En=xo(bn),Mn=xo(Sn),Rn=xo(Cn),Nn=xo(In),zn=xo(On),jn=Fe?Fe.prototype:r,Dn=jn?jn.valueOf:r,xn=jn?jn.toString:r;function Gn(e){if(es(e)&&!qa(e)&&!(e instanceof Un)){if(e instanceof Fn)return e;if(Ne.call(e,\"__wrapped__\"))return Go(e)}return new Fn(e)}var Bn=function(){function e(){}return function(t){if(!Xa(t))return{};if(Ve)return Ve(t);e.prototype=t;var n=new e;return e.prototype=r,n}}();function Ln(){}function Fn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=r}function Un(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function qn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Wn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Vn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Hn(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new Vn;++t<n;)this.add(e[t])}function Kn(e){var t=this.__data__=new Wn(e);this.size=t.size}function Zn(e,t){var n=qa(e),r=!n&&Ua(e),i=!n&&!r&&Ka(e),o=!n&&!r&&!i&&us(e),a=n||r||i||o,s=a?Ht(e.length,Oe):[],u=s.length;for(var c in e)!t&&!Ne.call(e,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||go(c,u))||s.push(c);return s}function Yn(e){var t=e.length;return t?e[Vr(0,t-1)]:r}function Jn(e,t){return Ro(Oi(e),or(t,0,e.length))}function $n(e){return Ro(Oi(e))}function Qn(e,t,n){(n!==r&&!Ba(e[t],n)||n===r&&!(t in e))&&rr(e,t,n)}function Xn(e,t,n){var i=e[t];Ne.call(e,t)&&Ba(i,n)&&(n!==r||t in e)||rr(e,t,n)}function er(e,t){for(var n=e.length;n--;)if(Ba(e[n][0],t))return n;return-1}function tr(e,t,n,r){return lr(e,function(e,i,o){t(r,e,n(e),o)}),r}function nr(e,t){return e&&Ai(t,Es(t),e)}function rr(e,t,n){\"__proto__\"==t&&ot?ot(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function ir(e,t){for(var n=-1,i=t.length,o=re(i),a=null==e;++n<i;)o[n]=a?r:Is(e,t[n]);return o}function or(e,t,n){return e==e&&(n!==r&&(e=e<=n?e:n),t!==r&&(e=e>=t?e:t)),e}function ar(e,t,n,i,o,a){var s,u=1&t,c=2&t,l=4&t;if(n&&(s=o?n(e,i,o,a):n(e)),s!==r)return s;if(!Xa(e))return e;var d=qa(e);if(d){if(s=function(e){var t=e.length,n=new e.constructor(t);return t&&\"string\"==typeof e[0]&&Ne.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}(e),!u)return Oi(e,s)}else{var h=ho(e),f=h==m||h==w;if(Ka(e))return wi(e,u);if(h==S||h==p||f&&!o){if(s=c||f?{}:po(e),!u)return c?function(e,t){return Ai(e,lo(e),t)}(e,function(e,t){return e&&Ai(t,Ms(t),e)}(s,e)):function(e,t){return Ai(e,co(e),t)}(e,nr(s,e))}else{if(!it[h])return o?e:{};s=function(e,t,n){var r,i=e.constructor;switch(t){case E:return Pi(e);case g:case _:return new i(+e);case M:return function(e,t){var n=t?Pi(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case R:case N:case z:case j:case D:case x:case G:case B:case L:return bi(e,n);case P:return new i;case b:case A:return new i(e);case I:return function(e){var t=new e.constructor(e.source,de.exec(e));return t.lastIndex=e.lastIndex,t}(e);case O:return new i;case T:return r=e,Dn?Ce(Dn.call(r)):{}}}(e,h,u)}}a||(a=new Kn);var y=a.get(e);if(y)return y;a.set(e,s),os(e)?e.forEach(function(r){s.add(ar(r,t,n,r,e,a))}):ts(e)&&e.forEach(function(r,i){s.set(i,ar(r,t,n,i,e,a))});var v=d?r:(l?c?to:eo:c?Ms:Es)(e);return Ct(v||e,function(r,i){v&&(r=e[i=r]),Xn(s,i,ar(r,t,n,i,e,a))}),s}function sr(e,t,n){var i=n.length;if(null==e)return!i;for(e=Ce(e);i--;){var o=n[i],a=t[o],s=e[o];if(s===r&&!(o in e)||!a(s))return!1}return!0}function ur(e,t,n){if(\"function\"!=typeof e)throw new Ae(i);return To(function(){e.apply(r,n)},t)}function cr(e,t,n,r){var i=-1,o=Tt,a=!0,s=e.length,u=[],c=t.length;if(!s)return u;n&&(t=Et(t,Zt(n))),r?(o=kt,a=!1):t.length>=200&&(o=Jt,a=!1,t=new Hn(t));e:for(;++i<s;){var l=e[i],d=null==n?l:n(l);if(l=r||0!==l?l:0,a&&d==d){for(var h=c;h--;)if(t[h]===d)continue e;u.push(l)}else o(t,d,r)||u.push(l)}return u}Gn.templateSettings={escape:Z,evaluate:Y,interpolate:J,variable:\"\",imports:{_:Gn}},Gn.prototype=Ln.prototype,Gn.prototype.constructor=Gn,Fn.prototype=Bn(Ln.prototype),Fn.prototype.constructor=Fn,Un.prototype=Bn(Ln.prototype),Un.prototype.constructor=Un,qn.prototype.clear=function(){this.__data__=An?An(null):{},this.size=0},qn.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},qn.prototype.get=function(e){var t=this.__data__;if(An){var n=t[e];return n===o?r:n}return Ne.call(t,e)?t[e]:r},qn.prototype.has=function(e){var t=this.__data__;return An?t[e]!==r:Ne.call(t,e)},qn.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=An&&t===r?o:t,this},Wn.prototype.clear=function(){this.__data__=[],this.size=0},Wn.prototype.delete=function(e){var t=this.__data__,n=er(t,e);return!(n<0||(n==t.length-1?t.pop():Ke.call(t,n,1),--this.size,0))},Wn.prototype.get=function(e){var t=this.__data__,n=er(t,e);return n<0?r:t[n][1]},Wn.prototype.has=function(e){return er(this.__data__,e)>-1},Wn.prototype.set=function(e,t){var n=this.__data__,r=er(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Vn.prototype.clear=function(){this.size=0,this.__data__={hash:new qn,map:new(Sn||Wn),string:new qn}},Vn.prototype.delete=function(e){var t=ao(this,e).delete(e);return this.size-=t?1:0,t},Vn.prototype.get=function(e){return ao(this,e).get(e)},Vn.prototype.has=function(e){return ao(this,e).has(e)},Vn.prototype.set=function(e,t){var n=ao(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Hn.prototype.add=Hn.prototype.push=function(e){return this.__data__.set(e,o),this},Hn.prototype.has=function(e){return this.__data__.has(e)},Kn.prototype.clear=function(){this.__data__=new Wn,this.size=0},Kn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Kn.prototype.get=function(e){return this.__data__.get(e)},Kn.prototype.has=function(e){return this.__data__.has(e)},Kn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Wn){var r=n.__data__;if(!Sn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Vn(r)}return n.set(e,t),this.size=n.size,this};var lr=Ei(vr),dr=Ei(mr,!0);function hr(e,t){var n=!0;return lr(e,function(e,r,i){return n=!!t(e,r,i)}),n}function fr(e,t,n){for(var i=-1,o=e.length;++i<o;){var a=e[i],s=t(a);if(null!=s&&(u===r?s==s&&!ss(s):n(s,u)))var u=s,c=a}return c}function pr(e,t){var n=[];return lr(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function yr(e,t,n,r,i){var o=-1,a=e.length;for(n||(n=yo),i||(i=[]);++o<a;){var s=e[o];t>0&&n(s)?t>1?yr(s,t-1,n,r,i):Mt(i,s):r||(i[i.length]=s)}return i}var gr=Mi(),_r=Mi(!0);function vr(e,t){return e&&gr(e,t,Es)}function mr(e,t){return e&&_r(e,t,Es)}function wr(e,t){return At(t,function(t){return Ja(e[t])})}function Pr(e,t){for(var n=0,i=(t=gi(t,e)).length;null!=e&&n<i;)e=e[Do(t[n++])];return n&&n==i?e:r}function br(e,t,n){var r=t(e);return qa(e)?r:Mt(r,n(e))}function Sr(e){return null==e?e===r?\"[object Undefined]\":\"[object Null]\":Xe&&Xe in Ce(e)?function(e){var t=Ne.call(e,Xe),n=e[Xe];try{e[Xe]=r;var i=!0}catch(e){}var o=De.call(e);return i&&(t?e[Xe]=n:delete e[Xe]),o}(e):function(e){return De.call(e)}(e)}function Cr(e,t){return e>t}function Ir(e,t){return null!=e&&Ne.call(e,t)}function Or(e,t){return null!=e&&t in Ce(e)}function Ar(e,t,n){for(var i=n?kt:Tt,o=e[0].length,a=e.length,s=a,u=re(a),c=1/0,l=[];s--;){var d=e[s];s&&t&&(d=Et(d,Zt(t))),c=_n(d.length,c),u[s]=!n&&(t||o>=120&&d.length>=120)?new Hn(s&&d):r}d=e[0];var h=-1,f=u[0];e:for(;++h<o&&l.length<c;){var p=d[h],y=t?t(p):p;if(p=n||0!==p?p:0,!(f?Jt(f,y):i(l,y,n))){for(s=a;--s;){var g=u[s];if(!(g?Jt(g,y):i(e[s],y,n)))continue e}f&&f.push(y),l.push(p)}}return l}function Tr(e,t,n){var i=null==(e=Io(e,t=gi(t,e)))?e:e[Do(Yo(t))];return null==i?r:bt(i,e,n)}function kr(e){return es(e)&&Sr(e)==p}function Er(e,t,n,i,o){return e===t||(null==e||null==t||!es(e)&&!es(t)?e!=e&&t!=t:function(e,t,n,i,o,a){var s=qa(e),u=qa(t),c=s?y:ho(e),l=u?y:ho(t),d=(c=c==p?S:c)==S,h=(l=l==p?S:l)==S,f=c==l;if(f&&Ka(e)){if(!Ka(t))return!1;s=!0,d=!1}if(f&&!d)return a||(a=new Kn),s||us(e)?Qi(e,t,n,i,o,a):function(e,t,n,r,i,o,a){switch(n){case M:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case E:return!(e.byteLength!=t.byteLength||!o(new Ue(e),new Ue(t)));case g:case _:case b:return Ba(+e,+t);case v:return e.name==t.name&&e.message==t.message;case I:case A:return e==t+\"\";case P:var s=rn;case O:var u=1&r;if(s||(s=sn),e.size!=t.size&&!u)return!1;var c=a.get(e);if(c)return c==t;r|=2,a.set(e,t);var l=Qi(s(e),s(t),r,i,o,a);return a.delete(e),l;case T:if(Dn)return Dn.call(e)==Dn.call(t)}return!1}(e,t,c,n,i,o,a);if(!(1&n)){var m=d&&Ne.call(e,\"__wrapped__\"),w=h&&Ne.call(t,\"__wrapped__\");if(m||w){var C=m?e.value():e,k=w?t.value():t;return a||(a=new Kn),o(C,k,n,i,a)}}return!!f&&(a||(a=new Kn),function(e,t,n,i,o,a){var s=1&n,u=eo(e),c=u.length;if(c!=eo(t).length&&!s)return!1;for(var l=c;l--;){var d=u[l];if(!(s?d in t:Ne.call(t,d)))return!1}var h=a.get(e),f=a.get(t);if(h&&f)return h==t&&f==e;var p=!0;a.set(e,t),a.set(t,e);for(var y=s;++l<c;){var g=e[d=u[l]],_=t[d];if(i)var v=s?i(_,g,d,t,e,a):i(g,_,d,e,t,a);if(!(v===r?g===_||o(g,_,n,i,a):v)){p=!1;break}y||(y=\"constructor\"==d)}if(p&&!y){var m=e.constructor,w=t.constructor;m==w||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof w&&w instanceof w||(p=!1)}return a.delete(e),a.delete(t),p}(e,t,n,i,o,a))}(e,t,n,i,Er,o))}function Mr(e,t,n,i){var o=n.length,a=o,s=!i;if(null==e)return!a;for(e=Ce(e);o--;){var u=n[o];if(s&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++o<a;){var c=(u=n[o])[0],l=e[c],d=u[1];if(s&&u[2]){if(l===r&&!(c in e))return!1}else{var h=new Kn;if(i)var f=i(l,d,c,e,t,h);if(!(f===r?Er(d,l,3,i,h):f))return!1}}return!0}function Rr(e){return!(!Xa(e)||(t=e,je&&je in t))&&(Ja(e)?Be:pe).test(xo(e));var t}function Nr(e){return\"function\"==typeof e?e:null==e?nu:\"object\"==typeof e?qa(e)?Gr(e[0],e[1]):xr(e):du(e)}function zr(e){if(!Po(e))return yn(e);var t=[];for(var n in Ce(e))Ne.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}function jr(e,t){return e<t}function Dr(e,t){var n=-1,r=Va(e)?re(e.length):[];return lr(e,function(e,i,o){r[++n]=t(e,i,o)}),r}function xr(e){var t=so(e);return 1==t.length&&t[0][2]?So(t[0][0],t[0][1]):function(n){return n===e||Mr(n,e,t)}}function Gr(e,t){return vo(e)&&bo(t)?So(Do(e),t):function(n){var i=Is(n,e);return i===r&&i===t?Os(n,e):Er(t,i,3)}}function Br(e,t,n,i,o){e!==t&&gr(t,function(a,s){if(o||(o=new Kn),Xa(a))!function(e,t,n,i,o,a,s){var u=Oo(e,n),c=Oo(t,n),l=s.get(c);if(l)Qn(e,n,l);else{var d=a?a(u,c,n+\"\",e,t,s):r,h=d===r;if(h){var f=qa(c),p=!f&&Ka(c),y=!f&&!p&&us(c);d=c,f||p||y?qa(u)?d=u:Ha(u)?d=Oi(u):p?(h=!1,d=wi(c,!0)):y?(h=!1,d=bi(c,!0)):d=[]:rs(c)||Ua(c)?(d=u,Ua(u)?d=gs(u):Xa(u)&&!Ja(u)||(d=po(c))):h=!1}h&&(s.set(c,d),o(d,c,i,a,s),s.delete(c)),Qn(e,n,d)}}(e,t,s,n,Br,i,o);else{var u=i?i(Oo(e,s),a,s+\"\",e,t,o):r;u===r&&(u=a),Qn(e,s,u)}},Ms)}function Lr(e,t){var n=e.length;if(n)return go(t+=t<0?n:0,n)?e[t]:r}function Fr(e,t,n){t=t.length?Et(t,function(e){return qa(e)?function(t){return Pr(t,1===e.length?e[0]:e)}:e}):[nu];var r=-1;t=Et(t,Zt(oo()));var i=Dr(e,function(e,n,i){var o=Et(t,function(t){return t(e)});return{criteria:o,index:++r,value:e}});return function(e){var t=e.length;for(e.sort(function(e,t){return function(e,t,n){for(var r=-1,i=e.criteria,o=t.criteria,a=i.length,s=n.length;++r<a;){var u=Si(i[r],o[r]);if(u)return r>=s?u:u*(\"desc\"==n[r]?-1:1)}return e.index-t.index}(e,t,n)});t--;)e[t]=e[t].value;return e}(i)}function Ur(e,t,n){for(var r=-1,i=t.length,o={};++r<i;){var a=t[r],s=Pr(e,a);n(s,a)&&Jr(o,gi(a,e),s)}return o}function qr(e,t,n,r){var i=r?Bt:Gt,o=-1,a=t.length,s=e;for(e===t&&(t=Oi(t)),n&&(s=Et(e,Zt(n)));++o<a;)for(var u=0,c=t[o],l=n?n(c):c;(u=i(s,l,u,r))>-1;)s!==e&&Ke.call(s,u,1),Ke.call(e,u,1);return e}function Wr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==o){var o=i;go(i)?Ke.call(e,i,1):ui(e,i)}}return e}function Vr(e,t){return e+pt(wn()*(t-e+1))}function Hr(e,t){var n=\"\";if(!e||t<1||t>l)return n;do{t%2&&(n+=e),(t=pt(t/2))&&(e+=e)}while(t);return n}function Kr(e,t){return ko(Co(e,t,nu),e+\"\")}function Zr(e){return Yn(Bs(e))}function Yr(e,t){var n=Bs(e);return Ro(n,or(t,0,n.length))}function Jr(e,t,n,i){if(!Xa(e))return e;for(var o=-1,a=(t=gi(t,e)).length,s=a-1,u=e;null!=u&&++o<a;){var c=Do(t[o]),l=n;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return e;if(o!=s){var d=u[c];(l=i?i(d,c,u):r)===r&&(l=Xa(d)?d:go(t[o+1])?[]:{})}Xn(u,c,l),u=u[c]}return e}var $r=Tn?function(e,t){return Tn.set(e,t),e}:nu,Qr=ot?function(e,t){return ot(e,\"toString\",{configurable:!0,enumerable:!1,value:Xs(t),writable:!0})}:nu;function Xr(e){return Ro(Bs(e))}function ei(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=re(i);++r<i;)o[r]=e[r+t];return o}function ti(e,t){var n;return lr(e,function(e,r,i){return!(n=t(e,r,i))}),!!n}function ni(e,t,n){var r=0,i=null==e?r:e.length;if(\"number\"==typeof t&&t==t&&i<=2147483647){for(;r<i;){var o=r+i>>>1,a=e[o];null!==a&&!ss(a)&&(n?a<=t:a<t)?r=o+1:i=o}return i}return ri(e,t,nu,n)}function ri(e,t,n,i){var o=0,a=null==e?0:e.length;if(0===a)return 0;for(var s=(t=n(t))!=t,u=null===t,c=ss(t),l=t===r;o<a;){var d=pt((o+a)/2),h=n(e[d]),f=h!==r,p=null===h,y=h==h,g=ss(h);if(s)var _=i||y;else _=l?y&&(i||f):u?y&&f&&(i||!p):c?y&&f&&!p&&(i||!g):!p&&!g&&(i?h<=t:h<t);_?o=d+1:a=d}return _n(a,4294967294)}function ii(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var a=e[n],s=t?t(a):a;if(!n||!Ba(s,u)){var u=s;o[i++]=0===a?0:a}}return o}function oi(e){return\"number\"==typeof e?e:ss(e)?d:+e}function ai(e){if(\"string\"==typeof e)return e;if(qa(e))return Et(e,ai)+\"\";if(ss(e))return xn?xn.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function si(e,t,n){var r=-1,i=Tt,o=e.length,a=!0,s=[],u=s;if(n)a=!1,i=kt;else if(o>=200){var c=t?null:Hi(e);if(c)return sn(c);a=!1,i=Jt,u=new Hn}else u=t?[]:s;e:for(;++r<o;){var l=e[r],d=t?t(l):l;if(l=n||0!==l?l:0,a&&d==d){for(var h=u.length;h--;)if(u[h]===d)continue e;t&&u.push(d),s.push(l)}else i(u,d,n)||(u!==s&&u.push(d),s.push(l))}return s}function ui(e,t){var n=-1,r=(t=gi(t,e)).length;if(!r)return!0;for(;++n<r;){var i=Do(t[n]);if(\"__proto__\"===i&&!Ne.call(e,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Io(e,t);return null==o||delete o[Do(Yo(t))]}function ci(e,t,n,r){return Jr(e,t,n(Pr(e,t)),r)}function li(e,t,n,r){for(var i=e.length,o=r?i:-1;(r?o--:++o<i)&&t(e[o],o,e););return n?ei(e,r?0:o,r?o+1:i):ei(e,r?o+1:0,r?i:o)}function di(e,t){var n=e;return n instanceof Un&&(n=n.value()),Rt(t,function(e,t){return t.func.apply(t.thisArg,Mt([e],t.args))},n)}function hi(e,t,n){var r=e.length;if(r<2)return r?si(e[0]):[];for(var i=-1,o=re(r);++i<r;)for(var a=e[i],s=-1;++s<r;)s!=i&&(o[i]=cr(o[i]||a,e[s],t,n));return si(yr(o,1),t,n)}function fi(e,t,n){for(var i=-1,o=e.length,a=t.length,s={};++i<o;){var u=i<a?t[i]:r;n(s,e[i],u)}return s}function pi(e){return Ha(e)?e:[]}function yi(e){return\"function\"==typeof e?e:nu}function gi(e,t){return qa(e)?e:vo(e,t)?[e]:jo(_s(e))}var _i=Kr;function vi(e,t,n){var i=e.length;return n=n===r?i:n,!t&&n>=i?e:ei(e,t,n)}var mi=ut||function(e){return lt.clearTimeout(e)};function wi(e,t){if(t)return e.slice();var n=e.length,r=qe?qe(n):new e.constructor(n);return e.copy(r),r}function Pi(e){var t=new e.constructor(e.byteLength);return new Ue(t).set(new Ue(e)),t}function bi(e,t){var n=t?Pi(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function Si(e,t){if(e!==t){var n=e!==r,i=null===e,o=e==e,a=ss(e),s=t!==r,u=null===t,c=t==t,l=ss(t);if(!u&&!l&&!a&&e>t||a&&s&&c&&!u&&!l||i&&s&&c||!n&&c||!o)return 1;if(!i&&!a&&!l&&e<t||l&&n&&o&&!i&&!a||u&&n&&o||!s&&o||!c)return-1}return 0}function Ci(e,t,n,r){for(var i=-1,o=e.length,a=n.length,s=-1,u=t.length,c=gn(o-a,0),l=re(u+c),d=!r;++s<u;)l[s]=t[s];for(;++i<a;)(d||i<o)&&(l[n[i]]=e[i]);for(;c--;)l[s++]=e[i++];return l}function Ii(e,t,n,r){for(var i=-1,o=e.length,a=-1,s=n.length,u=-1,c=t.length,l=gn(o-s,0),d=re(l+c),h=!r;++i<l;)d[i]=e[i];for(var f=i;++u<c;)d[f+u]=t[u];for(;++a<s;)(h||i<o)&&(d[f+n[a]]=e[i++]);return d}function Oi(e,t){var n=-1,r=e.length;for(t||(t=re(r));++n<r;)t[n]=e[n];return t}function Ai(e,t,n,i){var o=!n;n||(n={});for(var a=-1,s=t.length;++a<s;){var u=t[a],c=i?i(n[u],e[u],u,n,e):r;c===r&&(c=e[u]),o?rr(n,u,c):Xn(n,u,c)}return n}function Ti(e,t){return function(n,r){var i=qa(n)?St:tr,o=t?t():{};return i(n,e,oo(r,2),o)}}function ki(e){return Kr(function(t,n){var i=-1,o=n.length,a=o>1?n[o-1]:r,s=o>2?n[2]:r;for(a=e.length>3&&\"function\"==typeof a?(o--,a):r,s&&_o(n[0],n[1],s)&&(a=o<3?r:a,o=1),t=Ce(t);++i<o;){var u=n[i];u&&e(t,u,i,a)}return t})}function Ei(e,t){return function(n,r){if(null==n)return n;if(!Va(n))return e(n,r);for(var i=n.length,o=t?i:-1,a=Ce(n);(t?o--:++o<i)&&!1!==r(a[o],o,a););return n}}function Mi(e){return function(t,n,r){for(var i=-1,o=Ce(t),a=r(t),s=a.length;s--;){var u=a[e?s:++i];if(!1===n(o[u],u,o))break}return t}}function Ri(e){return function(t){var n=nn(t=_s(t))?ln(t):r,i=n?n[0]:t.charAt(0),o=n?vi(n,1).join(\"\"):t.slice(1);return i[e]()+o}}function Ni(e){return function(t){return Rt(Js(Us(t).replace(Ye,\"\")),e,\"\")}}function zi(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=Bn(e.prototype),r=e.apply(n,t);return Xa(r)?r:n}}function ji(e){return function(t,n,i){var o=Ce(t);if(!Va(t)){var a=oo(n,3);t=Es(t),n=function(e){return a(o[e],e,o)}}var s=e(t,n,i);return s>-1?o[a?t[s]:s]:r}}function Di(e){return Xi(function(t){var n=t.length,o=n,a=Fn.prototype.thru;for(e&&t.reverse();o--;){var s=t[o];if(\"function\"!=typeof s)throw new Ae(i);if(a&&!u&&\"wrapper\"==ro(s))var u=new Fn([],!0)}for(o=u?o:n;++o<n;){var c=ro(s=t[o]),l=\"wrapper\"==c?no(s):r;u=l&&mo(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?u[ro(l[0])].apply(u,l[3]):1==s.length&&mo(s)?u[c]():u.thru(s)}return function(){var e=arguments,r=e[0];if(u&&1==e.length&&qa(r))return u.plant(r).value();for(var i=0,o=n?t[i].apply(this,e):r;++i<n;)o=t[i].call(this,o);return o}})}function xi(e,t,n,i,o,a,s,c,l,d){var h=t&u,f=1&t,p=2&t,y=24&t,g=512&t,_=p?r:zi(e);return function u(){for(var v=arguments.length,m=re(v),w=v;w--;)m[w]=arguments[w];if(y)var P=io(u),b=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}(m,P);if(i&&(m=Ci(m,i,o,y)),a&&(m=Ii(m,a,s,y)),v-=b,y&&v<d){var S=an(m,P);return Wi(e,t,xi,u.placeholder,n,m,S,c,l,d-v)}var C=f?n:this,I=p?C[e]:e;return v=m.length,c?m=function(e,t){for(var n=e.length,i=_n(t.length,n),o=Oi(e);i--;){var a=t[i];e[i]=go(a,n)?o[a]:r}return e}(m,c):g&&v>1&&m.reverse(),h&&l<v&&(m.length=l),this&&this!==lt&&this instanceof u&&(I=_||zi(I)),I.apply(C,m)}}function Gi(e,t){return function(n,r){return function(e,t,n,r){return vr(e,function(e,i,o){t(r,n(e),i,o)}),r}(n,e,t(r),{})}}function Bi(e,t){return function(n,i){var o;if(n===r&&i===r)return t;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ai(n),i=ai(i)):(n=oi(n),i=oi(i)),o=e(n,i)}return o}}function Li(e){return Xi(function(t){return t=Et(t,Zt(oo())),Kr(function(n){var r=this;return e(t,function(e){return bt(e,r,n)})})})}function Fi(e,t){var n=(t=t===r?\" \":ai(t)).length;if(n<2)return n?Hr(t,e):t;var i=Hr(t,ht(e/cn(t)));return nn(t)?vi(ln(i),0,e).join(\"\"):i.slice(0,e)}function Ui(e){return function(t,n,i){return i&&\"number\"!=typeof i&&_o(t,n,i)&&(n=i=r),t=hs(t),n===r?(n=t,t=0):n=hs(n),function(e,t,n,r){for(var i=-1,o=gn(ht((t-e)/(n||1)),0),a=re(o);o--;)a[r?o:++i]=e,e+=n;return a}(t,n,i=i===r?t<n?1:-1:hs(i),e)}}function qi(e){return function(t,n){return\"string\"==typeof t&&\"string\"==typeof n||(t=ys(t),n=ys(n)),e(t,n)}}function Wi(e,t,n,i,o,a,u,c,l,d){var h=8&t;t|=h?s:64,4&(t&=~(h?64:s))||(t&=-4);var f=[e,t,o,h?a:r,h?u:r,h?r:a,h?r:u,c,l,d],p=n.apply(r,f);return mo(e)&&Ao(p,f),p.placeholder=i,Eo(p,e,t)}function Vi(e){var t=Se[e];return function(e,n){if(e=ys(e),(n=null==n?0:_n(fs(n),292))&&qt(e)){var r=(_s(e)+\"e\").split(\"e\");return+((r=(_s(t(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return t(e)}}var Hi=In&&1/sn(new In([,-0]))[1]==c?function(e){return new In(e)}:su;function Ki(e){return function(t){var n=ho(t);return n==P?rn(t):n==O?un(t):function(e,t){return Et(t,function(t){return[t,e[t]]})}(t,e(t))}}function Zi(e,t,n,o,c,l,d,h){var f=2&t;if(!f&&\"function\"!=typeof e)throw new Ae(i);var p=o?o.length:0;if(p||(t&=-97,o=c=r),d=d===r?d:gn(fs(d),0),h=h===r?h:fs(h),p-=c?c.length:0,64&t){var y=o,g=c;o=c=r}var _=f?r:no(e),v=[e,t,n,o,c,y,g,l,d,h];if(_&&function(e,t){var n=e[1],r=t[1],i=n|r,o=i<131,s=r==u&&8==n||r==u&&256==n&&e[7].length<=t[8]||384==r&&t[7].length<=t[8]&&8==n;if(!o&&!s)return e;1&r&&(e[2]=t[2],i|=1&n?0:4);var c=t[3];if(c){var l=e[3];e[3]=l?Ci(l,c,t[4]):c,e[4]=l?an(e[3],a):t[4]}(c=t[5])&&(l=e[5],e[5]=l?Ii(l,c,t[6]):c,e[6]=l?an(e[5],a):t[6]),(c=t[7])&&(e[7]=c),r&u&&(e[8]=null==e[8]?t[8]:_n(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=i}(v,_),e=v[0],t=v[1],n=v[2],o=v[3],c=v[4],!(h=v[9]=v[9]===r?f?0:e.length:gn(v[9]-p,0))&&24&t&&(t&=-25),t&&1!=t)m=8==t||16==t?function(e,t,n){var i=zi(e);return function o(){for(var a=arguments.length,s=re(a),u=a,c=io(o);u--;)s[u]=arguments[u];var l=a<3&&s[0]!==c&&s[a-1]!==c?[]:an(s,c);return(a-=l.length)<n?Wi(e,t,xi,o.placeholder,r,s,l,r,r,n-a):bt(this&&this!==lt&&this instanceof o?i:e,this,s)}}(e,t,h):t!=s&&33!=t||c.length?xi.apply(r,v):function(e,t,n,r){var i=1&t,o=zi(e);return function t(){for(var a=-1,s=arguments.length,u=-1,c=r.length,l=re(c+s),d=this&&this!==lt&&this instanceof t?o:e;++u<c;)l[u]=r[u];for(;s--;)l[u++]=arguments[++a];return bt(d,i?n:this,l)}}(e,t,n,o);else var m=function(e,t,n){var r=1&t,i=zi(e);return function t(){return(this&&this!==lt&&this instanceof t?i:e).apply(r?n:this,arguments)}}(e,t,n);return Eo((_?$r:Ao)(m,v),e,t)}function Yi(e,t,n,i){return e===r||Ba(e,Ee[n])&&!Ne.call(i,n)?t:e}function Ji(e,t,n,i,o,a){return Xa(e)&&Xa(t)&&(a.set(t,e),Br(e,t,r,Ji,a),a.delete(t)),e}function $i(e){return rs(e)?r:e}function Qi(e,t,n,i,o,a){var s=1&n,u=e.length,c=t.length;if(u!=c&&!(s&&c>u))return!1;var l=a.get(e),d=a.get(t);if(l&&d)return l==t&&d==e;var h=-1,f=!0,p=2&n?new Hn:r;for(a.set(e,t),a.set(t,e);++h<u;){var y=e[h],g=t[h];if(i)var _=s?i(g,y,h,t,e,a):i(y,g,h,e,t,a);if(_!==r){if(_)continue;f=!1;break}if(p){if(!zt(t,function(e,t){if(!Jt(p,t)&&(y===e||o(y,e,n,i,a)))return p.push(t)})){f=!1;break}}else if(y!==g&&!o(y,g,n,i,a)){f=!1;break}}return a.delete(e),a.delete(t),f}function Xi(e){return ko(Co(e,r,Wo),e+\"\")}function eo(e){return br(e,Es,co)}function to(e){return br(e,Ms,lo)}var no=Tn?function(e){return Tn.get(e)}:su;function ro(e){for(var t=e.name+\"\",n=kn[t],r=Ne.call(kn,t)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==e)return i.name}return t}function io(e){return(Ne.call(Gn,\"placeholder\")?Gn:e).placeholder}function oo(){var e=Gn.iteratee||ru;return e=e===ru?Nr:e,arguments.length?e(arguments[0],arguments[1]):e}function ao(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function so(e){for(var t=Es(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,bo(i)]}return t}function uo(e,t){var n=function(e,t){return null==e?r:e[t]}(e,t);return Rr(n)?n:r}var co=yt?function(e){return null==e?[]:(e=Ce(e),At(yt(e),function(t){return He.call(e,t)}))}:pu,lo=yt?function(e){for(var t=[];e;)Mt(t,co(e)),e=We(e);return t}:pu,ho=Sr;function fo(e,t,n){for(var r=-1,i=(t=gi(t,e)).length,o=!1;++r<i;){var a=Do(t[r]);if(!(o=null!=e&&n(e,a)))break;e=e[a]}return o||++r!=i?o:!!(i=null==e?0:e.length)&&Qa(i)&&go(a,i)&&(qa(e)||Ua(e))}function po(e){return\"function\"!=typeof e.constructor||Po(e)?{}:Bn(We(e))}function yo(e){return qa(e)||Ua(e)||!!(Ze&&e&&e[Ze])}function go(e,t){var n=typeof e;return!!(t=t??l)&&(\"number\"==n||\"symbol\"!=n&&ge.test(e))&&e>-1&&e%1==0&&e<t}function _o(e,t,n){if(!Xa(n))return!1;var r=typeof t;return!!(\"number\"==r?Va(n)&&go(t,n.length):\"string\"==r&&t in n)&&Ba(n[t],e)}function vo(e,t){if(qa(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!ss(e))||Q.test(e)||!$.test(e)||null!=t&&e in Ce(t)}function mo(e){var t=ro(e),n=Gn[t];if(\"function\"!=typeof n||!(t in Un.prototype))return!1;if(e===n)return!0;var r=no(n);return!!r&&e===r[0]}(bn&&ho(new bn(new ArrayBuffer(1)))!=M||Sn&&ho(new Sn)!=P||Cn&&ho(Cn.resolve())!=C||In&&ho(new In)!=O||On&&ho(new On)!=k)&&(ho=function(e){var t=Sr(e),n=t==S?e.constructor:r,i=n?xo(n):\"\";if(i)switch(i){case En:return M;case Mn:return P;case Rn:return C;case Nn:return O;case zn:return k}return t});var wo=Me?Ja:yu;function Po(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||Ee)}function bo(e){return e==e&&!Xa(e)}function So(e,t){return function(n){return null!=n&&n[e]===t&&(t!==r||e in Ce(n))}}function Co(e,t,n){return t=gn(t===r?e.length-1:t,0),function(){for(var r=arguments,i=-1,o=gn(r.length-t,0),a=re(o);++i<o;)a[i]=r[t+i];i=-1;for(var s=re(t+1);++i<t;)s[i]=r[i];return s[t]=n(a),bt(e,this,s)}}function Io(e,t){return t.length<2?e:Pr(e,ei(t,0,-1))}function Oo(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var Ao=Mo($r),To=dt||function(e,t){return lt.setTimeout(e,t)},ko=Mo(Qr);function Eo(e,t,n){var r=t+\"\";return ko(e,function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(n>1?\"& \":\"\")+t[r],t=t.join(n>2?\", \":\" \"),e.replace(ie,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(r,function(e,t){return Ct(f,function(n){var r=\"_.\"+n[0];t&n[1]&&!Tt(e,r)&&e.push(r)}),e.sort()}(function(e){var t=e.match(oe);return t?t[1].split(ae):[]}(r),n)))}function Mo(e){var t=0,n=0;return function(){var i=vn(),o=16-(i-n);if(n=i,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(r,arguments)}}function Ro(e,t){var n=-1,i=e.length,o=i-1;for(t=t===r?i:t;++n<t;){var a=Vr(n,o),s=e[a];e[a]=e[n],e[n]=s}return e.length=t,e}var No,zo,jo=(No=Na(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(X,function(e,n,r,i){t.push(r?i.replace(ce,\"$1\"):n||e)}),t},function(e){return 500===zo.size&&zo.clear(),e}),zo=No.cache,No);function Do(e){if(\"string\"==typeof e||ss(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function xo(e){if(null!=e){try{return Re.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}function Go(e){if(e instanceof Un)return e.clone();var t=new Fn(e.__wrapped__,e.__chain__);return t.__actions__=Oi(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var Bo=Kr(function(e,t){return Ha(e)?cr(e,yr(t,1,Ha,!0)):[]}),Lo=Kr(function(e,t){var n=Yo(t);return Ha(n)&&(n=r),Ha(e)?cr(e,yr(t,1,Ha,!0),oo(n,2)):[]}),Fo=Kr(function(e,t){var n=Yo(t);return Ha(n)&&(n=r),Ha(e)?cr(e,yr(t,1,Ha,!0),r,n):[]});function Uo(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:fs(n);return i<0&&(i=gn(r+i,0)),xt(e,oo(t,3),i)}function qo(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var o=i-1;return n!==r&&(o=fs(n),o=n<0?gn(i+o,0):_n(o,i-1)),xt(e,oo(t,3),o,!0)}function Wo(e){return null!=e&&e.length?yr(e,1):[]}function Vo(e){return e&&e.length?e[0]:r}var Ho=Kr(function(e){var t=Et(e,pi);return t.length&&t[0]===e[0]?Ar(t):[]}),Ko=Kr(function(e){var t=Yo(e),n=Et(e,pi);return t===Yo(n)?t=r:n.pop(),n.length&&n[0]===e[0]?Ar(n,oo(t,2)):[]}),Zo=Kr(function(e){var t=Yo(e),n=Et(e,pi);return(t=\"function\"==typeof t?t:r)&&n.pop(),n.length&&n[0]===e[0]?Ar(n,r,t):[]});function Yo(e){var t=null==e?0:e.length;return t?e[t-1]:r}var Jo=Kr($o);function $o(e,t){return e&&e.length&&t&&t.length?qr(e,t):e}var Qo=Xi(function(e,t){var n=null==e?0:e.length,r=ir(e,t);return Wr(e,Et(t,function(e){return go(e,n)?+e:e}).sort(Si)),r});function Xo(e){return null==e?e:Pn.call(e)}var ea=Kr(function(e){return si(yr(e,1,Ha,!0))}),ta=Kr(function(e){var t=Yo(e);return Ha(t)&&(t=r),si(yr(e,1,Ha,!0),oo(t,2))}),na=Kr(function(e){var t=Yo(e);return t=\"function\"==typeof t?t:r,si(yr(e,1,Ha,!0),r,t)});function ra(e){if(!e||!e.length)return[];var t=0;return e=At(e,function(e){if(Ha(e))return t=gn(e.length,t),!0}),Ht(t,function(t){return Et(e,Ut(t))})}function ia(e,t){if(!e||!e.length)return[];var n=ra(e);return null==t?n:Et(n,function(e){return bt(t,r,e)})}var oa=Kr(function(e,t){return Ha(e)?cr(e,t):[]}),aa=Kr(function(e){return hi(At(e,Ha))}),sa=Kr(function(e){var t=Yo(e);return Ha(t)&&(t=r),hi(At(e,Ha),oo(t,2))}),ua=Kr(function(e){var t=Yo(e);return t=\"function\"==typeof t?t:r,hi(At(e,Ha),r,t)}),ca=Kr(ra),la=Kr(function(e){var t=e.length,n=t>1?e[t-1]:r;return n=\"function\"==typeof n?(e.pop(),n):r,ia(e,n)});function da(e){var t=Gn(e);return t.__chain__=!0,t}function ha(e,t){return t(e)}var fa=Xi(function(e){var t=e.length,n=t?e[0]:0,i=this.__wrapped__,o=function(t){return ir(t,e)};return!(t>1||this.__actions__.length)&&i instanceof Un&&go(n)?((i=i.slice(n,+n+(t?1:0))).__actions__.push({func:ha,args:[o],thisArg:r}),new Fn(i,this.__chain__).thru(function(e){return t&&!e.length&&e.push(r),e})):this.thru(o)}),pa=Ti(function(e,t,n){Ne.call(e,n)?++e[n]:rr(e,n,1)}),ya=ji(Uo),ga=ji(qo);function _a(e,t){return(qa(e)?Ct:lr)(e,oo(t,3))}function va(e,t){return(qa(e)?It:dr)(e,oo(t,3))}var ma=Ti(function(e,t,n){Ne.call(e,n)?e[n].push(t):rr(e,n,[t])}),wa=Kr(function(e,t,n){var r=-1,i=\"function\"==typeof t,o=Va(e)?re(e.length):[];return lr(e,function(e){o[++r]=i?bt(t,e,n):Tr(e,t,n)}),o}),Pa=Ti(function(e,t,n){rr(e,n,t)});function ba(e,t){return(qa(e)?Et:Dr)(e,oo(t,3))}var Sa=Ti(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]}),Ca=Kr(function(e,t){if(null==e)return[];var n=t.length;return n>1&&_o(e,t[0],t[1])?t=[]:n>2&&_o(t[0],t[1],t[2])&&(t=[t[0]]),Fr(e,yr(t,1),[])}),Ia=ct||function(){return lt.Date.now()};function Oa(e,t,n){return t=n?r:t,t=e&&null==t?e.length:t,Zi(e,u,r,r,r,r,t)}function Aa(e,t){var n;if(\"function\"!=typeof t)throw new Ae(i);return e=fs(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=r),n}}var Ta=Kr(function(e,t,n){var r=1;if(n.length){var i=an(n,io(Ta));r|=s}return Zi(e,r,t,n,i)}),ka=Kr(function(e,t,n){var r=3;if(n.length){var i=an(n,io(ka));r|=s}return Zi(t,r,e,n,i)});function Ea(e,t,n){var o,a,s,u,c,l,d=0,h=!1,f=!1,p=!0;if(\"function\"!=typeof e)throw new Ae(i);function y(t){var n=o,i=a;return o=a=r,d=t,u=e.apply(i,n)}function g(e){var n=e-l;return l===r||n>=t||n<0||f&&e-d>=s}function _(){var e=Ia();if(g(e))return v(e);c=To(_,function(e){var n=t-(e-l);return f?_n(n,s-(e-d)):n}(e))}function v(e){return c=r,p&&o?y(e):(o=a=r,u)}function m(){var e=Ia(),n=g(e);if(o=arguments,a=this,l=e,n){if(c===r)return function(e){return d=e,c=To(_,t),h?y(e):u}(l);if(f)return mi(c),c=To(_,t),y(l)}return c===r&&(c=To(_,t)),u}return t=ys(t)||0,Xa(n)&&(h=!!n.leading,s=(f=\"maxWait\"in n)?gn(ys(n.maxWait)||0,t):s,p=\"trailing\"in n?!!n.trailing:p),m.cancel=function(){c!==r&&mi(c),d=0,o=l=a=c=r},m.flush=function(){return c===r?u:v(Ia())},m}var Ma=Kr(function(e,t){return ur(e,1,t)}),Ra=Kr(function(e,t,n){return ur(e,ys(t)||0,n)});function Na(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new Ae(i);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(Na.Cache||Vn),n}function za(e){if(\"function\"!=typeof e)throw new Ae(i);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}Na.Cache=Vn;var ja=_i(function(e,t){var n=(t=1==t.length&&qa(t[0])?Et(t[0],Zt(oo())):Et(yr(t,1),Zt(oo()))).length;return Kr(function(r){for(var i=-1,o=_n(r.length,n);++i<o;)r[i]=t[i].call(this,r[i]);return bt(e,this,r)})}),Da=Kr(function(e,t){var n=an(t,io(Da));return Zi(e,s,r,t,n)}),xa=Kr(function(e,t){var n=an(t,io(xa));return Zi(e,64,r,t,n)}),Ga=Xi(function(e,t){return Zi(e,256,r,r,r,t)});function Ba(e,t){return e===t||e!=e&&t!=t}var La=qi(Cr),Fa=qi(function(e,t){return e>=t}),Ua=kr(function(){return arguments}())?kr:function(e){return es(e)&&Ne.call(e,\"callee\")&&!He.call(e,\"callee\")},qa=re.isArray,Wa=gt?Zt(gt):function(e){return es(e)&&Sr(e)==E};function Va(e){return null!=e&&Qa(e.length)&&!Ja(e)}function Ha(e){return es(e)&&Va(e)}var Ka=jt||yu,Za=_t?Zt(_t):function(e){return es(e)&&Sr(e)==_};function Ya(e){if(!es(e))return!1;var t=Sr(e);return t==v||\"[object DOMException]\"==t||\"string\"==typeof e.message&&\"string\"==typeof e.name&&!rs(e)}function Ja(e){if(!Xa(e))return!1;var t=Sr(e);return t==m||t==w||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function $a(e){return\"number\"==typeof e&&e==fs(e)}function Qa(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=l}function Xa(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function es(e){return null!=e&&\"object\"==typeof e}var ts=vt?Zt(vt):function(e){return es(e)&&ho(e)==P};function ns(e){return\"number\"==typeof e||es(e)&&Sr(e)==b}function rs(e){if(!es(e)||Sr(e)!=S)return!1;var t=We(e);if(null===t)return!0;var n=Ne.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&Re.call(n)==xe}var is=mt?Zt(mt):function(e){return es(e)&&Sr(e)==I},os=wt?Zt(wt):function(e){return es(e)&&ho(e)==O};function as(e){return\"string\"==typeof e||!qa(e)&&es(e)&&Sr(e)==A}function ss(e){return\"symbol\"==typeof e||es(e)&&Sr(e)==T}var us=Pt?Zt(Pt):function(e){return es(e)&&Qa(e.length)&&!!rt[Sr(e)]},cs=qi(jr),ls=qi(function(e,t){return e<=t});function ds(e){if(!e)return[];if(Va(e))return as(e)?ln(e):Oi(e);if($e&&e[$e])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[$e]());var t=ho(e);return(t==P?rn:t==O?sn:Bs)(e)}function hs(e){return e?(e=ys(e))===c||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function fs(e){var t=hs(e),n=t%1;return t==t?n?t-n:t:0}function ps(e){return e?or(fs(e),0,h):0}function ys(e){if(\"number\"==typeof e)return e;if(ss(e))return d;if(Xa(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=Xa(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=Kt(e);var n=fe.test(e);return n||ye.test(e)?st(e.slice(2),n?2:8):he.test(e)?d:+e}function gs(e){return Ai(e,Ms(e))}function _s(e){return null==e?\"\":ai(e)}var vs=ki(function(e,t){if(Po(t)||Va(t))Ai(t,Es(t),e);else for(var n in t)Ne.call(t,n)&&Xn(e,n,t[n])}),ms=ki(function(e,t){Ai(t,Ms(t),e)}),ws=ki(function(e,t,n,r){Ai(t,Ms(t),e,r)}),Ps=ki(function(e,t,n,r){Ai(t,Es(t),e,r)}),bs=Xi(ir),Ss=Kr(function(e,t){e=Ce(e);var n=-1,i=t.length,o=i>2?t[2]:r;for(o&&_o(t[0],t[1],o)&&(i=1);++n<i;)for(var a=t[n],s=Ms(a),u=-1,c=s.length;++u<c;){var l=s[u],d=e[l];(d===r||Ba(d,Ee[l])&&!Ne.call(e,l))&&(e[l]=a[l])}return e}),Cs=Kr(function(e){return e.push(r,Ji),bt(Ns,r,e)});function Is(e,t,n){var i=null==e?r:Pr(e,t);return i===r?n:i}function Os(e,t){return null!=e&&fo(e,t,Or)}var As=Gi(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=De.call(t)),e[t]=n},Xs(nu)),Ts=Gi(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=De.call(t)),Ne.call(e,t)?e[t].push(n):e[t]=[n]},oo),ks=Kr(Tr);function Es(e){return Va(e)?Zn(e):zr(e)}function Ms(e){return Va(e)?Zn(e,!0):function(e){if(!Xa(e))return function(e){var t=[];if(null!=e)for(var n in Ce(e))t.push(n);return t}(e);var t=Po(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&Ne.call(e,r))&&n.push(r);return n}(e)}var Rs=ki(function(e,t,n){Br(e,t,n)}),Ns=ki(function(e,t,n,r){Br(e,t,n,r)}),zs=Xi(function(e,t){var n={};if(null==e)return n;var r=!1;t=Et(t,function(t){return t=gi(t,e),r||(r=t.length>1),t}),Ai(e,to(e),n),r&&(n=ar(n,7,$i));for(var i=t.length;i--;)ui(n,t[i]);return n}),js=Xi(function(e,t){return null==e?{}:function(e,t){return Ur(e,t,function(t,n){return Os(e,n)})}(e,t)});function Ds(e,t){if(null==e)return{};var n=Et(to(e),function(e){return[e]});return t=oo(t),Ur(e,n,function(e,n){return t(e,n[0])})}var xs=Ki(Es),Gs=Ki(Ms);function Bs(e){return null==e?[]:Yt(e,Es(e))}var Ls=Ni(function(e,t,n){return t=t.toLowerCase(),e+(n?Fs(t):t)});function Fs(e){return Ys(_s(e).toLowerCase())}function Us(e){return(e=_s(e))&&e.replace(_e,Xt).replace(Je,\"\")}var qs=Ni(function(e,t,n){return e+(n?\"-\":\"\")+t.toLowerCase()}),Ws=Ni(function(e,t,n){return e+(n?\" \":\"\")+t.toLowerCase()}),Vs=Ri(\"toLowerCase\"),Hs=Ni(function(e,t,n){return e+(n?\"_\":\"\")+t.toLowerCase()}),Ks=Ni(function(e,t,n){return e+(n?\" \":\"\")+Ys(t)}),Zs=Ni(function(e,t,n){return e+(n?\" \":\"\")+t.toUpperCase()}),Ys=Ri(\"toUpperCase\");function Js(e,t,n){return e=_s(e),(t=n?r:t)===r?function(e){return et.test(e)}(e)?function(e){return e.match(Qe)||[]}(e):function(e){return e.match(se)||[]}(e):e.match(t)||[]}var $s=Kr(function(e,t){try{return bt(e,r,t)}catch(e){return Ya(e)?e:new Pe(e)}}),Qs=Xi(function(e,t){return Ct(t,function(t){t=Do(t),rr(e,t,Ta(e[t],e))}),e});function Xs(e){return function(){return e}}var eu=Di(),tu=Di(!0);function nu(e){return e}function ru(e){return Nr(\"function\"==typeof e?e:ar(e,1))}var iu=Kr(function(e,t){return function(n){return Tr(n,e,t)}}),ou=Kr(function(e,t){return function(n){return Tr(e,n,t)}});function au(e,t,n){var r=Es(t),i=wr(t,r);null!=n||Xa(t)&&(i.length||!r.length)||(n=t,t=e,e=this,i=wr(t,Es(t)));var o=!(Xa(n)&&\"chain\"in n&&!n.chain),a=Ja(e);return Ct(i,function(n){var r=t[n];e[n]=r,a&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__);return(n.__actions__=Oi(this.__actions__)).push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,Mt([this.value()],arguments))})}),e}function su(){}var uu=Li(Et),cu=Li(Ot),lu=Li(zt);function du(e){return vo(e)?Ut(Do(e)):function(e){return function(t){return Pr(t,e)}}(e)}var hu=Ui(),fu=Ui(!0);function pu(){return[]}function yu(){return!1}var gu,_u=Bi(function(e,t){return e+t},0),vu=Vi(\"ceil\"),mu=Bi(function(e,t){return e/t},1),wu=Vi(\"floor\"),Pu=Bi(function(e,t){return e*t},1),bu=Vi(\"round\"),Su=Bi(function(e,t){return e-t},0);return Gn.after=function(e,t){if(\"function\"!=typeof t)throw new Ae(i);return e=fs(e),function(){if(--e<1)return t.apply(this,arguments)}},Gn.ary=Oa,Gn.assign=vs,Gn.assignIn=ms,Gn.assignInWith=ws,Gn.assignWith=Ps,Gn.at=bs,Gn.before=Aa,Gn.bind=Ta,Gn.bindAll=Qs,Gn.bindKey=ka,Gn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return qa(e)?e:[e]},Gn.chain=da,Gn.chunk=function(e,t,n){t=(n?_o(e,t,n):t===r)?1:gn(fs(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var o=0,a=0,s=re(ht(i/t));o<i;)s[a++]=ei(e,o,o+=t);return s},Gn.compact=function(e){for(var t=-1,n=null==e?0:e.length,r=0,i=[];++t<n;){var o=e[t];o&&(i[r++]=o)}return i},Gn.concat=function(){var e=arguments.length;if(!e)return[];for(var t=re(e-1),n=arguments[0],r=e;r--;)t[r-1]=arguments[r];return Mt(qa(n)?Oi(n):[n],yr(t,1))},Gn.cond=function(e){var t=null==e?0:e.length,n=oo();return e=t?Et(e,function(e){if(\"function\"!=typeof e[1])throw new Ae(i);return[n(e[0]),e[1]]}):[],Kr(function(n){for(var r=-1;++r<t;){var i=e[r];if(bt(i[0],this,n))return bt(i[1],this,n)}})},Gn.conforms=function(e){return function(e){var t=Es(e);return function(n){return sr(n,e,t)}}(ar(e,1))},Gn.constant=Xs,Gn.countBy=pa,Gn.create=function(e,t){var n=Bn(e);return null==t?n:nr(n,t)},Gn.curry=function e(t,n,i){var o=Zi(t,8,r,r,r,r,r,n=i?r:n);return o.placeholder=e.placeholder,o},Gn.curryRight=function e(t,n,i){var o=Zi(t,16,r,r,r,r,r,n=i?r:n);return o.placeholder=e.placeholder,o},Gn.debounce=Ea,Gn.defaults=Ss,Gn.defaultsDeep=Cs,Gn.defer=Ma,Gn.delay=Ra,Gn.difference=Bo,Gn.differenceBy=Lo,Gn.differenceWith=Fo,Gn.drop=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,(t=n||t===r?1:fs(t))<0?0:t,i):[]},Gn.dropRight=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,0,(t=i-(t=n||t===r?1:fs(t)))<0?0:t):[]},Gn.dropRightWhile=function(e,t){return e&&e.length?li(e,oo(t,3),!0,!0):[]},Gn.dropWhile=function(e,t){return e&&e.length?li(e,oo(t,3),!0):[]},Gn.fill=function(e,t,n,i){var o=null==e?0:e.length;return o?(n&&\"number\"!=typeof n&&_o(e,t,n)&&(n=0,i=o),function(e,t,n,i){var o=e.length;for((n=fs(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:fs(i))<0&&(i+=o),i=n>i?0:ps(i);n<i;)e[n++]=t;return e}(e,t,n,i)):[]},Gn.filter=function(e,t){return(qa(e)?At:pr)(e,oo(t,3))},Gn.flatMap=function(e,t){return yr(ba(e,t),1)},Gn.flatMapDeep=function(e,t){return yr(ba(e,t),c)},Gn.flatMapDepth=function(e,t,n){return n=n===r?1:fs(n),yr(ba(e,t),n)},Gn.flatten=Wo,Gn.flattenDeep=function(e){return null!=e&&e.length?yr(e,c):[]},Gn.flattenDepth=function(e,t){return null!=e&&e.length?yr(e,t=t===r?1:fs(t)):[]},Gn.flip=function(e){return Zi(e,512)},Gn.flow=eu,Gn.flowRight=tu,Gn.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,r={};++t<n;){var i=e[t];rr(r,i[0],i[1])}return r},Gn.functions=function(e){return null==e?[]:wr(e,Es(e))},Gn.functionsIn=function(e){return null==e?[]:wr(e,Ms(e))},Gn.groupBy=ma,Gn.initial=function(e){return null!=e&&e.length?ei(e,0,-1):[]},Gn.intersection=Ho,Gn.intersectionBy=Ko,Gn.intersectionWith=Zo,Gn.invert=As,Gn.invertBy=Ts,Gn.invokeMap=wa,Gn.iteratee=ru,Gn.keyBy=Pa,Gn.keys=Es,Gn.keysIn=Ms,Gn.map=ba,Gn.mapKeys=function(e,t){var n={};return t=oo(t,3),vr(e,function(e,r,i){rr(n,t(e,r,i),e)}),n},Gn.mapValues=function(e,t){var n={};return t=oo(t,3),vr(e,function(e,r,i){rr(n,r,t(e,r,i))}),n},Gn.matches=function(e){return xr(ar(e,1))},Gn.matchesProperty=function(e,t){return Gr(e,ar(t,1))},Gn.memoize=Na,Gn.merge=Rs,Gn.mergeWith=Ns,Gn.method=iu,Gn.methodOf=ou,Gn.mixin=au,Gn.negate=za,Gn.nthArg=function(e){return e=fs(e),Kr(function(t){return Lr(t,e)})},Gn.omit=zs,Gn.omitBy=function(e,t){return Ds(e,za(oo(t)))},Gn.once=function(e){return Aa(2,e)},Gn.orderBy=function(e,t,n,i){return null==e?[]:(qa(t)||(t=null==t?[]:[t]),qa(n=i?r:n)||(n=null==n?[]:[n]),Fr(e,t,n))},Gn.over=uu,Gn.overArgs=ja,Gn.overEvery=cu,Gn.overSome=lu,Gn.partial=Da,Gn.partialRight=xa,Gn.partition=Sa,Gn.pick=js,Gn.pickBy=Ds,Gn.property=du,Gn.propertyOf=function(e){return function(t){return null==e?r:Pr(e,t)}},Gn.pull=Jo,Gn.pullAll=$o,Gn.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?qr(e,t,oo(n,2)):e},Gn.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?qr(e,t,r,n):e},Gn.pullAt=Qo,Gn.range=hu,Gn.rangeRight=fu,Gn.rearg=Ga,Gn.reject=function(e,t){return(qa(e)?At:pr)(e,za(oo(t,3)))},Gn.remove=function(e,t){var n=[];if(!e||!e.length)return n;var r=-1,i=[],o=e.length;for(t=oo(t,3);++r<o;){var a=e[r];t(a,r,e)&&(n.push(a),i.push(r))}return Wr(e,i),n},Gn.rest=function(e,t){if(\"function\"!=typeof e)throw new Ae(i);return Kr(e,t=t===r?t:fs(t))},Gn.reverse=Xo,Gn.sampleSize=function(e,t,n){return t=(n?_o(e,t,n):t===r)?1:fs(t),(qa(e)?Jn:Yr)(e,t)},Gn.set=function(e,t,n){return null==e?e:Jr(e,t,n)},Gn.setWith=function(e,t,n,i){return i=\"function\"==typeof i?i:r,null==e?e:Jr(e,t,n,i)},Gn.shuffle=function(e){return(qa(e)?$n:Xr)(e)},Gn.slice=function(e,t,n){var i=null==e?0:e.length;return i?(n&&\"number\"!=typeof n&&_o(e,t,n)?(t=0,n=i):(t=null==t?0:fs(t),n=n===r?i:fs(n)),ei(e,t,n)):[]},Gn.sortBy=Ca,Gn.sortedUniq=function(e){return e&&e.length?ii(e):[]},Gn.sortedUniqBy=function(e,t){return e&&e.length?ii(e,oo(t,2)):[]},Gn.split=function(e,t,n){return n&&\"number\"!=typeof n&&_o(e,t,n)&&(t=n=r),(n=n===r?h:n>>>0)?(e=_s(e))&&(\"string\"==typeof t||null!=t&&!is(t))&&!(t=ai(t))&&nn(e)?vi(ln(e),0,n):e.split(t,n):[]},Gn.spread=function(e,t){if(\"function\"!=typeof e)throw new Ae(i);return t=null==t?0:gn(fs(t),0),Kr(function(n){var r=n[t],i=vi(n,0,t);return r&&Mt(i,r),bt(e,this,i)})},Gn.tail=function(e){var t=null==e?0:e.length;return t?ei(e,1,t):[]},Gn.take=function(e,t,n){return e&&e.length?ei(e,0,(t=n||t===r?1:fs(t))<0?0:t):[]},Gn.takeRight=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,(t=i-(t=n||t===r?1:fs(t)))<0?0:t,i):[]},Gn.takeRightWhile=function(e,t){return e&&e.length?li(e,oo(t,3),!1,!0):[]},Gn.takeWhile=function(e,t){return e&&e.length?li(e,oo(t,3)):[]},Gn.tap=function(e,t){return t(e),e},Gn.throttle=function(e,t,n){var r=!0,o=!0;if(\"function\"!=typeof e)throw new Ae(i);return Xa(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),Ea(e,t,{leading:r,maxWait:t,trailing:o})},Gn.thru=ha,Gn.toArray=ds,Gn.toPairs=xs,Gn.toPairsIn=Gs,Gn.toPath=function(e){return qa(e)?Et(e,Do):ss(e)?[e]:Oi(jo(_s(e)))},Gn.toPlainObject=gs,Gn.transform=function(e,t,n){var r=qa(e),i=r||Ka(e)||us(e);if(t=oo(t,4),null==n){var o=e&&e.constructor;n=i?r?new o:[]:Xa(e)&&Ja(o)?Bn(We(e)):{}}return(i?Ct:vr)(e,function(e,r,i){return t(n,e,r,i)}),n},Gn.unary=function(e){return Oa(e,1)},Gn.union=ea,Gn.unionBy=ta,Gn.unionWith=na,Gn.uniq=function(e){return e&&e.length?si(e):[]},Gn.uniqBy=function(e,t){return e&&e.length?si(e,oo(t,2)):[]},Gn.uniqWith=function(e,t){return t=\"function\"==typeof t?t:r,e&&e.length?si(e,r,t):[]},Gn.unset=function(e,t){return null==e||ui(e,t)},Gn.unzip=ra,Gn.unzipWith=ia,Gn.update=function(e,t,n){return null==e?e:ci(e,t,yi(n))},Gn.updateWith=function(e,t,n,i){return i=\"function\"==typeof i?i:r,null==e?e:ci(e,t,yi(n),i)},Gn.values=Bs,Gn.valuesIn=function(e){return null==e?[]:Yt(e,Ms(e))},Gn.without=oa,Gn.words=Js,Gn.wrap=function(e,t){return Da(yi(t),e)},Gn.xor=aa,Gn.xorBy=sa,Gn.xorWith=ua,Gn.zip=ca,Gn.zipObject=function(e,t){return fi(e||[],t||[],Xn)},Gn.zipObjectDeep=function(e,t){return fi(e||[],t||[],Jr)},Gn.zipWith=la,Gn.entries=xs,Gn.entriesIn=Gs,Gn.extend=ms,Gn.extendWith=ws,au(Gn,Gn),Gn.add=_u,Gn.attempt=$s,Gn.camelCase=Ls,Gn.capitalize=Fs,Gn.ceil=vu,Gn.clamp=function(e,t,n){return n===r&&(n=t,t=r),n!==r&&(n=(n=ys(n))==n?n:0),t!==r&&(t=(t=ys(t))==t?t:0),or(ys(e),t,n)},Gn.clone=function(e){return ar(e,4)},Gn.cloneDeep=function(e){return ar(e,5)},Gn.cloneDeepWith=function(e,t){return ar(e,5,t=\"function\"==typeof t?t:r)},Gn.cloneWith=function(e,t){return ar(e,4,t=\"function\"==typeof t?t:r)},Gn.conformsTo=function(e,t){return null==t||sr(e,t,Es(t))},Gn.deburr=Us,Gn.defaultTo=function(e,t){return null==e||e!=e?t:e},Gn.divide=mu,Gn.endsWith=function(e,t,n){e=_s(e),t=ai(t);var i=e.length,o=n=n===r?i:or(fs(n),0,i);return(n-=t.length)>=0&&e.slice(n,o)==t},Gn.eq=Ba,Gn.escape=function(e){return(e=_s(e))&&K.test(e)?e.replace(V,en):e},Gn.escapeRegExp=function(e){return(e=_s(e))&&te.test(e)?e.replace(ee,\"\\\\$&\"):e},Gn.every=function(e,t,n){var i=qa(e)?Ot:hr;return n&&_o(e,t,n)&&(t=r),i(e,oo(t,3))},Gn.find=ya,Gn.findIndex=Uo,Gn.findKey=function(e,t){return Dt(e,oo(t,3),vr)},Gn.findLast=ga,Gn.findLastIndex=qo,Gn.findLastKey=function(e,t){return Dt(e,oo(t,3),mr)},Gn.floor=wu,Gn.forEach=_a,Gn.forEachRight=va,Gn.forIn=function(e,t){return null==e?e:gr(e,oo(t,3),Ms)},Gn.forInRight=function(e,t){return null==e?e:_r(e,oo(t,3),Ms)},Gn.forOwn=function(e,t){return e&&vr(e,oo(t,3))},Gn.forOwnRight=function(e,t){return e&&mr(e,oo(t,3))},Gn.get=Is,Gn.gt=La,Gn.gte=Fa,Gn.has=function(e,t){return null!=e&&fo(e,t,Ir)},Gn.hasIn=Os,Gn.head=Vo,Gn.identity=nu,Gn.includes=function(e,t,n,r){e=Va(e)?e:Bs(e),n=n&&!r?fs(n):0;var i=e.length;return n<0&&(n=gn(i+n,0)),as(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&Gt(e,t,n)>-1},Gn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:fs(n);return i<0&&(i=gn(r+i,0)),Gt(e,t,i)},Gn.inRange=function(e,t,n){return t=hs(t),n===r?(n=t,t=0):n=hs(n),function(e,t,n){return e>=_n(t,n)&&e<gn(t,n)}(e=ys(e),t,n)},Gn.invoke=ks,Gn.isArguments=Ua,Gn.isArray=qa,Gn.isArrayBuffer=Wa,Gn.isArrayLike=Va,Gn.isArrayLikeObject=Ha,Gn.isBoolean=function(e){return!0===e||!1===e||es(e)&&Sr(e)==g},Gn.isBuffer=Ka,Gn.isDate=Za,Gn.isElement=function(e){return es(e)&&1===e.nodeType&&!rs(e)},Gn.isEmpty=function(e){if(null==e)return!0;if(Va(e)&&(qa(e)||\"string\"==typeof e||\"function\"==typeof e.splice||Ka(e)||us(e)||Ua(e)))return!e.length;var t=ho(e);if(t==P||t==O)return!e.size;if(Po(e))return!zr(e).length;for(var n in e)if(Ne.call(e,n))return!1;return!0},Gn.isEqual=function(e,t){return Er(e,t)},Gn.isEqualWith=function(e,t,n){var i=(n=\"function\"==typeof n?n:r)?n(e,t):r;return i===r?Er(e,t,r,n):!!i},Gn.isError=Ya,Gn.isFinite=function(e){return\"number\"==typeof e&&qt(e)},Gn.isFunction=Ja,Gn.isInteger=$a,Gn.isLength=Qa,Gn.isMap=ts,Gn.isMatch=function(e,t){return e===t||Mr(e,t,so(t))},Gn.isMatchWith=function(e,t,n){return n=\"function\"==typeof n?n:r,Mr(e,t,so(t),n)},Gn.isNaN=function(e){return ns(e)&&e!=+e},Gn.isNative=function(e){if(wo(e))throw new Pe(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Rr(e)},Gn.isNil=function(e){return null==e},Gn.isNull=function(e){return null===e},Gn.isNumber=ns,Gn.isObject=Xa,Gn.isObjectLike=es,Gn.isPlainObject=rs,Gn.isRegExp=is,Gn.isSafeInteger=function(e){return $a(e)&&e>=-9007199254740991&&e<=l},Gn.isSet=os,Gn.isString=as,Gn.isSymbol=ss,Gn.isTypedArray=us,Gn.isUndefined=function(e){return e===r},Gn.isWeakMap=function(e){return es(e)&&ho(e)==k},Gn.isWeakSet=function(e){return es(e)&&\"[object WeakSet]\"==Sr(e)},Gn.join=function(e,t){return null==e?\"\":pn.call(e,t)},Gn.kebabCase=qs,Gn.last=Yo,Gn.lastIndexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=fs(n))<0?gn(i+o,0):_n(o,i-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,o):xt(e,Lt,o,!0)},Gn.lowerCase=Ws,Gn.lowerFirst=Vs,Gn.lt=cs,Gn.lte=ls,Gn.max=function(e){return e&&e.length?fr(e,nu,Cr):r},Gn.maxBy=function(e,t){return e&&e.length?fr(e,oo(t,2),Cr):r},Gn.mean=function(e){return Ft(e,nu)},Gn.meanBy=function(e,t){return Ft(e,oo(t,2))},Gn.min=function(e){return e&&e.length?fr(e,nu,jr):r},Gn.minBy=function(e,t){return e&&e.length?fr(e,oo(t,2),jr):r},Gn.stubArray=pu,Gn.stubFalse=yu,Gn.stubObject=function(){return{}},Gn.stubString=function(){return\"\"},Gn.stubTrue=function(){return!0},Gn.multiply=Pu,Gn.nth=function(e,t){return e&&e.length?Lr(e,fs(t)):r},Gn.noConflict=function(){return lt._===this&&(lt._=Ge),this},Gn.noop=su,Gn.now=Ia,Gn.pad=function(e,t,n){e=_s(e);var r=(t=fs(t))?cn(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return Fi(pt(i),n)+e+Fi(ht(i),n)},Gn.padEnd=function(e,t,n){e=_s(e);var r=(t=fs(t))?cn(e):0;return t&&r<t?e+Fi(t-r,n):e},Gn.padStart=function(e,t,n){e=_s(e);var r=(t=fs(t))?cn(e):0;return t&&r<t?Fi(t-r,n)+e:e},Gn.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),mn(_s(e).replace(ne,\"\"),t||0)},Gn.random=function(e,t,n){if(n&&\"boolean\"!=typeof n&&_o(e,t,n)&&(t=n=r),n===r&&(\"boolean\"==typeof t?(n=t,t=r):\"boolean\"==typeof e&&(n=e,e=r)),e===r&&t===r?(e=0,t=1):(e=hs(e),t===r?(t=e,e=0):t=hs(t)),e>t){var i=e;e=t,t=i}if(n||e%1||t%1){var o=wn();return _n(e+o*(t-e+at(\"1e-\"+((o+\"\").length-1))),t)}return Vr(e,t)},Gn.reduce=function(e,t,n){var r=qa(e)?Rt:Wt,i=arguments.length<3;return r(e,oo(t,4),n,i,lr)},Gn.reduceRight=function(e,t,n){var r=qa(e)?Nt:Wt,i=arguments.length<3;return r(e,oo(t,4),n,i,dr)},Gn.repeat=function(e,t,n){return t=(n?_o(e,t,n):t===r)?1:fs(t),Hr(_s(e),t)},Gn.replace=function(){var e=arguments,t=_s(e[0]);return e.length<3?t:t.replace(e[1],e[2])},Gn.result=function(e,t,n){var i=-1,o=(t=gi(t,e)).length;for(o||(o=1,e=r);++i<o;){var a=null==e?r:e[Do(t[i])];a===r&&(i=o,a=n),e=Ja(a)?a.call(e):a}return e},Gn.round=bu,Gn.runInContext=e,Gn.sample=function(e){return(qa(e)?Yn:Zr)(e)},Gn.size=function(e){if(null==e)return 0;if(Va(e))return as(e)?cn(e):e.length;var t=ho(e);return t==P||t==O?e.size:zr(e).length},Gn.snakeCase=Hs,Gn.some=function(e,t,n){var i=qa(e)?zt:ti;return n&&_o(e,t,n)&&(t=r),i(e,oo(t,3))},Gn.sortedIndex=function(e,t){return ni(e,t)},Gn.sortedIndexBy=function(e,t,n){return ri(e,t,oo(n,2))},Gn.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var r=ni(e,t);if(r<n&&Ba(e[r],t))return r}return-1},Gn.sortedLastIndex=function(e,t){return ni(e,t,!0)},Gn.sortedLastIndexBy=function(e,t,n){return ri(e,t,oo(n,2),!0)},Gn.sortedLastIndexOf=function(e,t){if(null!=e&&e.length){var n=ni(e,t,!0)-1;if(Ba(e[n],t))return n}return-1},Gn.startCase=Ks,Gn.startsWith=function(e,t,n){return e=_s(e),n=null==n?0:or(fs(n),0,e.length),t=ai(t),e.slice(n,n+t.length)==t},Gn.subtract=Su,Gn.sum=function(e){return e&&e.length?Vt(e,nu):0},Gn.sumBy=function(e,t){return e&&e.length?Vt(e,oo(t,2)):0},Gn.template=function(e,t,n){var i=Gn.templateSettings;n&&_o(e,t,n)&&(t=r),e=_s(e),t=Ps({},t,i,Yi);var o=Ps({},t.imports,i.imports,Yi),a=Es(o),s=Yt(o,a);Ct(a,function(e){if(ue.test(e))throw new Pe(\"Invalid `imports` option passed into `_.template`\")});var u,c,l=0,d=t.interpolate||ve,h=\"__p += '\",f=Ie((t.escape||ve).source+\"|\"+d.source+\"|\"+(d===J?le:ve).source+\"|\"+(t.evaluate||ve).source+\"|$\",\"g\"),p=\"//# sourceURL=\"+(Ne.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++nt+\"]\")+\"\\n\";e.replace(f,function(t,n,r,i,o,a){return r||(r=i),h+=e.slice(l,a).replace(me,tn),n&&(u=!0,h+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(c=!0,h+=\"';\\n\"+o+\";\\n__p += '\"),r&&(h+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=a+t.length,t}),h+=\"';\\n\";var y=Ne.call(t,\"variable\")&&t.variable;if(y){if(ue.test(y))throw new Pe(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(c?h.replace(F,\"\"):h).replace(U,\"$1\").replace(q,\"$1;\"),h=\"function(\"+(y||\"obj\")+\") {\\n\"+(y?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(u?\", __e = _.escape\":\"\")+(c?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var g=$s(function(){return be(a,p+\"return \"+h).apply(r,s)});if(g.source=h,Ya(g))throw g;return g},Gn.times=function(e,t){if((e=fs(e))<1||e>l)return[];var n=h,r=_n(e,h);t=oo(t),e-=h;for(var i=Ht(r,t);++n<e;)t(n);return i},Gn.toFinite=hs,Gn.toInteger=fs,Gn.toLength=ps,Gn.toLower=function(e){return _s(e).toLowerCase()},Gn.toNumber=ys,Gn.toSafeInteger=function(e){return e?or(fs(e),-9007199254740991,l):0===e?e:0},Gn.toString=_s,Gn.toUpper=function(e){return _s(e).toUpperCase()},Gn.trim=function(e,t,n){if((e=_s(e))&&(n||t===r))return Kt(e);if(!e||!(t=ai(t)))return e;var i=ln(e),o=ln(t);return vi(i,$t(i,o),Qt(i,o)+1).join(\"\")},Gn.trimEnd=function(e,t,n){if((e=_s(e))&&(n||t===r))return e.slice(0,dn(e)+1);if(!e||!(t=ai(t)))return e;var i=ln(e);return vi(i,0,Qt(i,ln(t))+1).join(\"\")},Gn.trimStart=function(e,t,n){if((e=_s(e))&&(n||t===r))return e.replace(ne,\"\");if(!e||!(t=ai(t)))return e;var i=ln(e);return vi(i,$t(i,ln(t))).join(\"\")},Gn.truncate=function(e,t){var n=30,i=\"...\";if(Xa(t)){var o=\"separator\"in t?t.separator:o;n=\"length\"in t?fs(t.length):n,i=\"omission\"in t?ai(t.omission):i}var a=(e=_s(e)).length;if(nn(e)){var s=ln(e);a=s.length}if(n>=a)return e;var u=n-cn(i);if(u<1)return i;var c=s?vi(s,0,u).join(\"\"):e.slice(0,u);if(o===r)return c+i;if(s&&(u+=c.length-u),is(o)){if(e.slice(u).search(o)){var l,d=c;for(o.global||(o=Ie(o.source,_s(de.exec(o))+\"g\")),o.lastIndex=0;l=o.exec(d);)var h=l.index;c=c.slice(0,h===r?u:h)}}else if(e.indexOf(ai(o),u)!=u){var f=c.lastIndexOf(o);f>-1&&(c=c.slice(0,f))}return c+i},Gn.unescape=function(e){return(e=_s(e))&&H.test(e)?e.replace(W,hn):e},Gn.uniqueId=function(e){var t=++ze;return _s(e)+t},Gn.upperCase=Zs,Gn.upperFirst=Ys,Gn.each=_a,Gn.eachRight=va,Gn.first=Vo,au(Gn,(gu={},vr(Gn,function(e,t){Ne.call(Gn.prototype,t)||(gu[t]=e)}),gu),{chain:!1}),Gn.VERSION=\"4.18.1\",Ct([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(e){Gn[e].placeholder=Gn}),Ct([\"drop\",\"take\"],function(e,t){Un.prototype[e]=function(n){n=n===r?1:gn(fs(n),0);var i=this.__filtered__&&!t?new Un(this):this.clone();return i.__filtered__?i.__takeCount__=_n(n,i.__takeCount__):i.__views__.push({size:_n(n,h),type:e+(i.__dir__<0?\"Right\":\"\")}),i},Un.prototype[e+\"Right\"]=function(t){return this.reverse()[e](t).reverse()}}),Ct([\"filter\",\"map\",\"takeWhile\"],function(e,t){var n=t+1,r=1==n||3==n;Un.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:oo(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}}),Ct([\"head\",\"last\"],function(e,t){var n=\"take\"+(t?\"Right\":\"\");Un.prototype[e]=function(){return this[n](1).value()[0]}}),Ct([\"initial\",\"tail\"],function(e,t){var n=\"drop\"+(t?\"\":\"Right\");Un.prototype[e]=function(){return this.__filtered__?new Un(this):this[n](1)}}),Un.prototype.compact=function(){return this.filter(nu)},Un.prototype.find=function(e){return this.filter(e).head()},Un.prototype.findLast=function(e){return this.reverse().find(e)},Un.prototype.invokeMap=Kr(function(e,t){return\"function\"==typeof e?new Un(this):this.map(function(n){return Tr(n,e,t)})}),Un.prototype.reject=function(e){return this.filter(za(oo(e)))},Un.prototype.slice=function(e,t){e=fs(e);var n=this;return n.__filtered__&&(e>0||t<0)?new Un(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==r&&(n=(t=fs(t))<0?n.dropRight(-t):n.take(t-e)),n)},Un.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Un.prototype.toArray=function(){return this.take(h)},vr(Un.prototype,function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),o=Gn[i?\"take\"+(\"last\"==t?\"Right\":\"\"):t],a=i||/^find/.test(t);o&&(Gn.prototype[t]=function(){var t=this.__wrapped__,s=i?[1]:arguments,u=t instanceof Un,c=s[0],l=u||qa(t),d=function(e){var t=o.apply(Gn,Mt([e],s));return i&&h?t[0]:t};l&&n&&\"function\"==typeof c&&1!=c.length&&(u=l=!1);var h=this.__chain__,f=!!this.__actions__.length,p=a&&!h,y=u&&!f;if(!a&&l){t=y?t:new Un(this);var g=e.apply(t,s);return g.__actions__.push({func:ha,args:[d],thisArg:r}),new Fn(g,h)}return p&&y?e.apply(this,s):(g=this.thru(d),p?i?g.value()[0]:g.value():g)})}),Ct([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(e){var t=Te[e],n=/^(?:push|sort|unshift)$/.test(e)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(e);Gn.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(qa(i)?i:[],e)}return this[n](function(n){return t.apply(qa(n)?n:[],e)})}}),vr(Un.prototype,function(e,t){var n=Gn[t];if(n){var r=n.name+\"\";Ne.call(kn,r)||(kn[r]=[]),kn[r].push({name:t,func:n})}}),kn[xi(r,2).name]=[{name:\"wrapper\",func:r}],Un.prototype.clone=function(){var e=new Un(this.__wrapped__);return e.__actions__=Oi(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Oi(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Oi(this.__views__),e},Un.prototype.reverse=function(){if(this.__filtered__){var e=new Un(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Un.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=qa(e),r=t<0,i=n?e.length:0,o=function(e,t,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case\"drop\":e+=a;break;case\"dropRight\":t-=a;break;case\"take\":t=_n(t,e+a);break;case\"takeRight\":e=gn(e,t-a)}}return{start:e,end:t}}(0,i,this.__views__),a=o.start,s=o.end,u=s-a,c=r?s:a-1,l=this.__iteratees__,d=l.length,h=0,f=_n(u,this.__takeCount__);if(!n||!r&&i==u&&f==u)return di(e,this.__actions__);var p=[];e:for(;u--&&h<f;){for(var y=-1,g=e[c+=t];++y<d;){var _=l[y],v=_.iteratee,m=_.type,w=v(g);if(2==m)g=w;else if(!w){if(1==m)continue e;break e}}p[h++]=g}return p},Gn.prototype.at=fa,Gn.prototype.chain=function(){return da(this)},Gn.prototype.commit=function(){return new Fn(this.value(),this.__chain__)},Gn.prototype.next=function(){this.__values__===r&&(this.__values__=ds(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?r:this.__values__[this.__index__++]}},Gn.prototype.plant=function(e){for(var t,n=this;n instanceof Ln;){var i=Go(n);i.__index__=0,i.__values__=r,t?o.__wrapped__=i:t=i;var o=i;n=n.__wrapped__}return o.__wrapped__=e,t},Gn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Un){var t=e;return this.__actions__.length&&(t=new Un(this)),(t=t.reverse()).__actions__.push({func:ha,args:[Xo],thisArg:r}),new Fn(t,this.__chain__)}return this.thru(Xo)},Gn.prototype.toJSON=Gn.prototype.valueOf=Gn.prototype.value=function(){return di(this.__wrapped__,this.__actions__)},Gn.prototype.first=Gn.prototype.head,$e&&(Gn.prototype[$e]=function(){return this}),Gn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(lt._=fn,define(function(){return fn})):ht?((ht.exports=fn)._=fn,dt._=fn):lt._=fn}.call(this)},1657(e){\"use strict\";e.exports=(e,t)=>{if(\"string\"!=typeof e||\"string\"!=typeof t)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===t)return[e];const n=e.indexOf(t);return-1===n?[e]:[e.slice(0,n),e.slice(n+t.length)]}},803(e){\"use strict\";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)},1635(e,t,n){\"use strict\";n.d(t,{__assign:()=>r});var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createGooglePayAdyenV2ButtonStrategy:()=>un,createGooglePayAdyenV2CustomerStrategy:()=>Ft,createGooglePayAdyenV2PaymentStrategy:()=>re,createGooglePayAdyenV3ButtonStrategy:()=>cn,createGooglePayAdyenV3CustomerStrategy:()=>Ut,createGooglePayAdyenV3PaymentStrategy:()=>se,createGooglePayAuthorizeDotNetButtonStrategy:()=>ln,createGooglePayAuthorizeDotNetCustomerStrategy:()=>qt,createGooglePayAuthorizeNetPaymentStrategy:()=>ce,createGooglePayBigCommercePaymentsButtonStrategy:()=>sn,createGooglePayBigCommercePaymentsCustomerStrategy:()=>Xt,createGooglePayBigCommercePaymentsPaymentStrategy:()=>zt,createGooglePayBnzCustomerStrategy:()=>Ht,createGooglePayBraintreeButtonStrategy:()=>on,createGooglePayBraintreeCustomerStrategy:()=>$t,createGooglePayBraintreePaymentStrategy:()=>ht,createGooglePayCheckoutComButtonStrategy:()=>dn,createGooglePayCheckoutComCustomerStrategy:()=>Wt,createGooglePayCheckoutComPaymentStrategy:()=>ye,createGooglePayCybersourceButtonStrategy:()=>hn,createGooglePayCybersourceCustomerStrategy:()=>Vt,createGooglePayCybersourcePaymentStrategy:()=>_e,createGooglePayOrbitalButtonStrategy:()=>fn,createGooglePayOrbitalCustomerStrategy:()=>Kt,createGooglePayOrbitalPaymentStrategy:()=>me,createGooglePayPPCPPaymentStrategy:()=>It,createGooglePayPayPalCommerceButtonStrategy:()=>an,createGooglePayPayPalCommerceCustomerStrategy:()=>Qt,createGooglePayStripeButtonStrategy:()=>pn,createGooglePayStripeCustomerStrategy:()=>Zt,createGooglePayStripePaymentStrategy:()=>Le,createGooglePayStripeUpeCustomerStrategy:()=>Yt,createGooglePayTdOnlineMartButtonStrategy:()=>gn,createGooglePayTdOnlineMartCustomerStrategy:()=>en,createGooglePayTdOnlineMartPaymentStrategy:()=>xt,createGooglePayWorldpayAccessButtonStrategy:()=>yn,createGooglePayWorldpayAccessCustomerStrategy:()=>Jt,createGooglePayWorldpayAccessPaymentStrategy:()=>Ue});var e=n(8686),t=n(4043),i=n(315);class o extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class a extends o{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var s;class u{constructor(e,t,n=window){this._scriptLoader=e,this._stylesheetLoader=t,this._window=n}load(e){var t,n,r,i,o,s;return r=this,i=void 0,s=function*(){if(yield Promise.all([this._stylesheetLoader.loadStylesheet(`https://checkoutshopper-${null!==(t=e.environment)&&void 0!==t?t:\"\"}.adyen.com/checkoutshopper/sdk/3.10.1/adyen.css`,{prepend:!1,attributes:{integrity:\"sha384-8ofgICZZ/k5cC5N7xegqFZOA73H9RQ7H13439JfAZW8Gj3qjuKL2isaTD3GMIhDE\",crossorigin:\"anonymous\"}}),this._scriptLoader.loadScript(`https://checkoutshopper-${null!==(n=e.environment)&&void 0!==n?n:\"\"}.adyen.com/checkoutshopper/sdk/3.10.1/adyen.js`,{async:!0,attributes:{integrity:\"sha384-wG2z9zSQo61EIvyXmiFCo+zB3y0ZB4hsrXVcANmpP8HLthjoQJQPBh7tZKJSV8jA\",crossorigin:\"anonymous\"}})]),!this._window.AdyenCheckout)throw new a;return new this._window.AdyenCheckout(e)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{u(s.next(e))}catch(e){t(e)}}function a(e){try{u(s.throw(e))}catch(e){t(e)}}function u(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o(function(e){e(r)})).then(n,a)}u((s=s.apply(r,i||[])).next())})}}function c(e,t){return Object.assign(e,{resolveIds:t})}function l(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e&&Array.isArray(e.errors)&&\"code\"in e.errors[0]&&\"string\"==typeof e.errors[0].code&&\"provider_data\"in e&&\"object\"==typeof e.provider_data}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(s||(s={}));class d extends o{constructor(e){super(function(e){switch(e){case s.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case s.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case s.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case s.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case s.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case s.MissingCheckoutConfig:case s.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case s.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case s.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case s.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case s.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case s.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case s.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function h(){const{navigator:e}=window;let t;return t=e.language?e.language:e.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof e.javaEnabled&&e.javaEnabled(),language:t,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}const f=e=>\"object\"==typeof e&&null!==e&&\"body\"in e;class p extends o{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}var y;!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(y||(y={}));class g extends o{constructor(e){super(function(e){switch(e){case y.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case y.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case y.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case y.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var _=n(9440);class v extends o{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function m(e,t,n){if(\"function\"!=typeof n.value)return n;let r=n.value;return{get(){const e=r.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){r=e}}}class w{constructor(e){if(!e)throw new Error(\"Currency settings missing\");const{decimalPlaces:t,symbolLocation:n,symbol:r,thousandsSeparator:i,decimalSeparator:o}=e;if(\"string\"!=typeof n||\"string\"!=typeof r||\"string\"!=typeof i||\"string\"!=typeof o||\"string\"!=typeof t)throw new v(\"Invalid currency settings provided\");this._decimalPlaces=parseInt(t,10),this._symbolLocation=n,this._symbol=r,this._thousandsSeparator=i,this._decimalSeparator=o}format(e){if(\"number\"!=typeof e)throw new v(\"Invalid amount provided\");const t=this._formatNumber(e),n=this._formatCurrency(t);return e<0?`-${n}`:n}_formatNumber(e){const t=Math.abs(e),[n,r=\"\"]=this._toFixed(t,this._decimalPlaces).split(\".\"),i=n.replace(/\\B(?=(\\d{3})+(?!\\d))/g,this._thousandsSeparator);return this._decimalPlaces<1?i:[i,r].join(this._decimalSeparator)}_formatCurrency(e){return\"left\"===this._symbolLocation.toLowerCase()?`${this._symbol}${e}`:`${e}${this._symbol}`}_toFixed(e,t){return(+`${Math.round(+`${e}e${t}`)}e${-t}`).toFixed(t)}}let P=class{constructor(e){this._storeConfig=e,this._customerFormatter=new w(this._storeConfig.shopperCurrency),this._storeFormatter=new w(this._storeConfig.currency)}toCustomerCurrency(e){const t=this._storeConfig.shopperCurrency.exchangeRate;return this._customerFormatter.format(e*t)}toStoreCurrency(e){return this._storeFormatter.format(e)}};P=function(e,t,n,r){var i,o=arguments.length,a=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(a=(o<3?i(a):o>3?i(t,n,a):i(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([function(e,t,n){return t&&n?m(0,t,n):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const r=Object.getOwnPropertyDescriptor(e.prototype,n);r&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,m(e.prototype,n,r))}),t}(e)}],P);const b=P;function S(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}function C(){if(\"undefined\"==typeof window)return!1;if(function(e){return\"ReactNativeWebView\"in e}(window))return!0;const e=navigator.userAgent||navigator.vendor||(function(e){return\"opera\"in e}(window)?window.opera:\"\"),t=/android.+; wv/i.test(e),n=/iPhone|iPod|iPad/i.test(e)&&/AppleWebKit/i.test(e)&&!/Safari/i.test(e);return t||n}function I(e,t,n=!0){var r;return null!==(r=e[t])&&void 0!==r?r:n}var O,A,T,k,E,M,R,N,z;function j(e){return e in M}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(O||(O={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(A||(A={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(T||(T={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(k||(k={})),function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(E||(E={})),function(e){e.AMEX=\"AMEX\",e.DISCOVER=\"DISCOVER\",e.INTERAC=\"INTERAC\",e.JCB=\"JCB\",e.MC=\"MASTERCARD\",e.VISA=\"VISA\"}(M||(M={})),function(e){e.OFFER=\"OFFER\",e.PAYMENT_AUTHORIZATION=\"PAYMENT_AUTHORIZATION\",e.SHIPPING_ADDRESS=\"SHIPPING_ADDRESS\",e.SHIPPING_OPTION=\"SHIPPING_OPTION\"}(R||(R={})),function(e){e.OFFER_INVALID=\"OFFER_INVALID\",e.PAYMENT_DATA_INVALID=\"PAYMENT_DATA_INVALID\",e.SHIPPING_ADDRESS_INVALID=\"SHIPPING_ADDRESS_INVALID\",e.SHIPPING_ADDRESS_UNSERVICEABLE=\"SHIPPING_ADDRESS_UNSERVICEABLE\",e.SHIPPING_OPTION_INVALID=\"SHIPPING_OPTION_INVALID\",e.OTHER_ERROR=\"OTHER_ERROR\"}(N||(N={})),function(e){e.INITIALIZE=\"INITIALIZE\",e.SHIPPING_OPTION=\"SHIPPING_OPTION\",e.SHIPPING_ADDRESS=\"SHIPPING_ADDRESS\",e.OFFER=\"OFFER\"}(z||(z={}));var D=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class x{constructor(e,t){this._gatewayIdentifier=e,this._paymentIntegrationService=t,this._isBuyNowFlow=!1,this._shouldRequestShipping=!0,this._isWebViewExperimentOn=null}mapToShippingAddressRequestBody({shippingAddress:e}){if(!e)return;const{company:t=\"\",phone:n=\"\"}=this._paymentIntegrationService.getState().getShippingAddress()||{};return this._mapToAddressRequestBody(e,t,n)}mapToBillingAddressRequestBody(e){const{billingAddress:t}=e.paymentMethodData.info;if(!t)return;const{company:n=\"\",phone:r=\"\",email:i,customFields:o=[]}=this._paymentIntegrationService.getState().getBillingAddress()||{};return Object.assign(Object.assign({},this._mapToAddressRequestBody(t,n,r,o)),{email:i||e.email})}mapToExternalCheckoutData(e){var t;const{paymentMethodData:{tokenizationData:{token:n},info:{cardNetwork:r,cardDetails:i}}}=e;if(!n)throw new d(s.MissingPaymentToken);return Promise.resolve(Object.assign({nonce:n,card_information:{type:r,number:i}},this._isBuyNowFlow&&{cart_id:null===(t=this._paymentIntegrationService.getState().getCart())||void 0===t?void 0:t.id}))}getRequiredData(){var e;return D(this,void 0,void 0,function*(){const t={emailRequired:!0};if(!this._isShippingAddressRequired())return t;const n=yield this._paymentIntegrationService.loadShippingCountries(),r=null===(e=n.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code);return Object.assign(Object.assign({},t),{shippingAddressRequired:!0,shippingAddressParameters:Object.assign({phoneNumberRequired:!0},r&&{allowedCountryCodes:r}),shippingOptionRequired:!0})})}getCallbackIntents(){return this._isShippingAddressRequired()?[R.OFFER,R.SHIPPING_ADDRESS,R.SHIPPING_OPTION]:[R.OFFER]}getCallbackTriggers(){return{availableTriggers:[z.INITIALIZE,z.SHIPPING_ADDRESS,z.SHIPPING_OPTION,z.OFFER],initializationTrigger:[z.INITIALIZE],addressChangeTriggers:[z.INITIALIZE,z.SHIPPING_ADDRESS],shippingOptionsChangeTriggers:[z.SHIPPING_OPTION],offerChangeTriggers:[z.OFFER]}}getNonce(e){var t;const n=null===(t=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e).initializationData)||void 0===t?void 0:t.nonce;if(!n)throw new d(s.MissingPaymentToken);return Promise.resolve(n)}extraPaymentData(){return Promise.resolve(void 0)}getMerchantInfo(){const{googleMerchantName:e,googleMerchantId:t,platformToken:n}=this.getGooglePayInitializationData();return{merchantName:e,merchantId:t,authJwt:n}}getTransactionInfo(){let e;const{getCartOrThrow:t}=this._paymentIntegrationService.getState();e=this._isBuyNowFlow?this._getCurrencyCodeOrThrow():t().currency.code;const n=this.getGooglePayInitializationData().storeCountry;if(this.isWebViewWithRestrictions()){const t=this.getTotalPrice();return Object.assign(Object.assign({},n&&{countryCode:n}),{currencyCode:e,totalPrice:t,totalPriceStatus:E.ESTIMATED})}return Object.assign(Object.assign({},n&&{countryCode:n}),{currencyCode:e,totalPriceStatus:E.ESTIMATED,totalPrice:\"0\"})}isWebViewWithRestrictions(){return null!==this._isWebViewExperimentOn?this._isWebViewExperimentOn&&C():C()}setIsWebViewExperimentOn(e){this._isWebViewExperimentOn=e}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData().gatewayMerchantId;if(!e)throw new v(\"Unable to proceed, gatewayMerchantId is missing.\");return{gateway:this._gatewayIdentifier,gatewayMerchantId:e}}getCardParameters(){return{allowedAuthMethods:[\"PAN_ONLY\",\"CRYPTOGRAM_3DS\"],allowedCardNetworks:this.getPaymentMethod().supportedCards.filter(j).map(e=>M[e]),billingAddressRequired:!0,billingAddressParameters:{format:\"FULL\",phoneNumberRequired:!0}}}initialize(e,t,n){return this._getPaymentMethodFn=e,this._isBuyNowFlow=Boolean(t),this._currencyCode=n,this._isBuyNowFlow&&this._getCurrencyCodeOrThrow(),Promise.resolve()}handleShippingAddressChange(e){var t,n,r,i;return D(this,void 0,void 0,function*(){e&&(e.name=e.name||\"\",e.address1=e.address1||\"\");const o=this.mapToShippingAddressRequestBody({shippingAddress:e});o&&(yield this._paymentIntegrationService.updateShippingAddress(o));const a=this._paymentIntegrationService.getState(),s=a.getConsignments();if(!(null==s?void 0:s[0]))return;const u=s[0],c=a.getStoreConfigOrThrow();this._currencyService||(this._currencyService=new b(c));const l=(u.availableShippingOptions||[]).map(this._getGooglePayShippingOption.bind(this)),d=null===(t=u.availableShippingOptions)||void 0===t?void 0:t.find(e=>e.isRecommended);if(l.length){const e=(null===(n=u.selectedShippingOption)||void 0===n?void 0:n.id)||(null==d?void 0:d.id)||(null===(r=l[0])||void 0===r?void 0:r.id);return!(null===(i=u.selectedShippingOption)||void 0===i?void 0:i.id)&&l[0]&&(yield this.handleShippingOptionChange((null==d?void 0:d.id)||l[0].id)),{defaultSelectedOptionId:e,shippingOptions:l}}})}handleShippingOptionChange(e){return D(this,void 0,void 0,function*(){if(\"shipping_option_unselected\"!==e)return this._paymentIntegrationService.selectShippingOption(e)})}getTotalPrice(){const{getCheckoutOrThrow:e,getCartOrThrow:t,getStoreConfigOrThrow:n}=this._paymentIntegrationService.getState(),{decimalPlaces:r}=t().currency,i=I(n().checkoutSettings.features,\"PI-5075.google_pay_round_total_price_to_max_2_decimal_places\")?Math.min(r,2):r;return(0,_.round)(e().outstandingBalance,i).toFixed(i)}handleCoupons(e){return D(this,void 0,void 0,function*(){const{redemptionCodes:t=[]}=e,{offers:n}=this.getAppliedCoupons()||{};let r;return yield t.reduce((e,t)=>D(this,void 0,void 0,function*(){if(yield e,(n||[]).some(({redemptionCode:e})=>e===t))return;const i=yield this.applyCoupon(t);i&&(r=i)}),Promise.resolve()),yield(n||[]).reduce((e,n)=>D(this,void 0,void 0,function*(){yield e,t.includes(n.redemptionCode)||(yield this._paymentIntegrationService.removeCoupon(n.redemptionCode))}),Promise.resolve()),{newOfferInfo:this.getAppliedCoupons(),error:r}})}getAppliedCoupons(){const e=this._paymentIntegrationService.getState(),{coupons:t}=e.getCheckout()||{};return{offers:(t||[]).map(e=>{const{displayName:t,code:n}=e;return{redemptionCode:n,description:t}})}}applyCoupon(e){return D(this,void 0,void 0,function*(){let t;try{yield this._paymentIntegrationService.applyCoupon(e)}catch(e){return e instanceof Error&&(t={reason:N.OFFER_INVALID,message:e.message,intent:z.OFFER}),t}})}setShouldRequestShipping(e){this._shouldRequestShipping=e}getGooglePayInitializationData(){return S(this.getPaymentMethod().initializationData,()=>new v(\"Missing initialization data.\"))}getPaymentMethod(){return S(this._getPaymentMethodFn,()=>new g(y.PaymentNotInitialized))()}getGatewayIdentifier(){return this._gatewayIdentifier}setGatewayIdentifier(e){this._gatewayIdentifier=e||this.getGatewayIdentifier()}_isShippingAddressRequired(){const{getCartOrThrow:e,getStoreConfigOrThrow:t,getShippingAddress:n}=this._paymentIntegrationService.getState(),r=t();let i;return i=I(r.checkoutSettings.features,\"PI-4290.google_pay_require_shipping_address\")?this._shouldRequestShipping:void 0===n(),i&&(o=e(),a=r,!!o&&(!!o.lineItems.physicalItems.some(e=>e.isShippingRequired)||!(!a||!o.lineItems.customItems)&&o.lineItems.customItems.length>0));var o,a}_mapToAddressRequestBody(e,t,n,r){const{name:i,address1:o,address2:a,address3:s,locality:u,administrativeArea:c,countryCode:l,postalCode:d,phoneNumber:h}=e,[f,p]=this._getFirstAndLastName(i);return{firstName:f,lastName:p,company:t,address1:o,address2:`${a} ${s}`.trim(),city:u||c,stateOrProvince:c,stateOrProvinceCode:c,countryCode:l,postalCode:d,phone:h||n,customFields:r||[]}}_getFirstAndLastName(e){const t=e.split(\" \");return 1===t.length?[e,\"\"]:[t.slice(0,-1).join(\" \"),t[t.length-1]]}_getCurrencyCodeOrThrow(){return S(this._currencyCode,()=>new v('Unable to initialize payment because \"options.currencyCode\" argument is not provided.'))}_getGooglePayShippingOption({id:e,cost:t,description:n,additionalDescription:r}){var i;return{id:e,label:`${(null===(i=this._currencyService)||void 0===i?void 0:i.toCustomerCurrency(t))||t} ${n}`,description:r}}}var G=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class B extends x{constructor(e,t){super(\"adyen\",e),this._scriptLoader=t,this._service=e}initialize(e,t,n){const r=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return G(this,void 0,void 0,function*(){yield r.initialize.call(this,e,t,n);const i=r.getPaymentMethod.call(this),o=this._service.getState().getStoreConfig();if(!o)throw new d(s.MissingCheckoutConfig);return this._adyenClient=yield this._scriptLoader.load({environment:i.config.testMode?\"test\":\"live\",locale:o.storeProfile.storeLanguage}),Promise.resolve()})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});return G(this,void 0,void 0,function*(){const n=yield t.getNonce.call(this,e),r=t.getPaymentMethod.call(this);return JSON.stringify({type:r.method,googlePayToken:n,browser_info:h()})})}processAdditionalAction(e){return G(this,void 0,void 0,function*(){if(!f(e)||!l(e.body))throw e;const t=yield this._handleAction(e.body.provider_data);try{return yield this._service.submitPayment(t)}catch(e){return this.processAdditionalAction(e)}})}_handleAction(e){return new Promise((t,n)=>{const r=JSON.parse(e.action);this._getAdyenClient().createFromAction(r,{onAdditionalDetails:e=>{const n={methodId:r.paymentMethodType,paymentData:{nonce:JSON.stringify(e.data)}};t(n)},size:\"05\",onError:e=>n(e)}).mount(\"body\"),n(new p)})}_getAdyenClient(){if(!this._adyenClient)throw new g(y.PaymentNotInitialized);return this._adyenClient}}const L={\"X-Checkout-SDK-Version\":\"1.916.1\"};class F extends o{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}var U=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class q{constructor(e,t,n,r){this._scriptLoader=e,this._gateway=t,this._requestSender=n,this._formPoster=r,this._baseRequest={apiVersion:2,apiVersionMinor:0}}initialize(e,t,n,r){return U(this,void 0,void 0,function*(){this._paymentsClient=yield this._scriptLoader.getGooglePaymentsClient(e().config.testMode,t),yield this._gateway.initialize(e,n,r),this._buildButtonPayloads()})}initializeWidget(){return U(this,void 0,void 0,function*(){yield this._buildWidgetPayloads(),yield this._determineReadinessToPay(),this._prefetchGooglePaymentData()})}getNonce(e){return this._gateway.getNonce(e)}extraPaymentData(){return U(this,void 0,void 0,function*(){return this._gateway.extraPaymentData()})}addPaymentButton(e,t){const n=document.querySelector(`#${e}`);if(!n)return;const r=this._getPaymentsClient().createButton(Object.assign(Object.assign({},t),{allowedPaymentMethods:[this._getBaseCardPaymentMethod()]}));return n.appendChild(r)}showPaymentSheet(){return U(this,void 0,void 0,function*(){const e=this._getPaymentDataRequest();return this._getPaymentsClient().loadPaymentData(e)})}setExternalCheckoutXhr(e,t){return U(this,void 0,void 0,function*(){return this._setExternalCheckout(e,t)})}setExternalCheckoutForm(e,t,n){return U(this,void 0,void 0,function*(){return this._setExternalCheckout(e,t,!0,n)})}mapToBillingAddressRequestBody(e){return this._gateway.mapToBillingAddressRequestBody(e)}mapToShippingAddressRequestBody(e){return this._gateway.mapToShippingAddressRequestBody(e)}processAdditionalAction(e,t){return\"processAdditionalAction\"in this._gateway?this._gateway.processAdditionalAction(e,t):Promise.reject(e)}signOut(e){return U(this,void 0,void 0,function*(){yield this._requestSender.get(`/remote-checkout/${e}/signout`)})}getCallbackTriggers(){return this._gateway.getCallbackTriggers()}setShouldRequestShipping(e){return this._gateway.setShouldRequestShipping(e)}handleShippingAddressChange(e){return U(this,void 0,void 0,function*(){return this._gateway.handleShippingAddressChange(e)})}handleShippingOptionChange(e){return U(this,void 0,void 0,function*(){yield this._gateway.handleShippingOptionChange(e)})}handleCoupons(e){return U(this,void 0,void 0,function*(){return this._gateway.handleCoupons(e)})}getTotalPrice(){return this._gateway.getTotalPrice()}_setExternalCheckout(e,t,n=!1,r){return U(this,void 0,void 0,function*(){const i=\"/checkout.php\",o=Object.assign({action:\"set_external_checkout\",provider:e},yield this._gateway.mapToExternalCheckoutData(t));if(n)return new Promise(e=>{this._formPoster.postForm(r?`${r}/checkout`:i,Object.assign(Object.assign({},o),{card_information:JSON.stringify(o.card_information)}),e)});yield this._requestSender.post(i,{headers:Object.assign({Accept:\"text/html\",\"Content-Type\":\"application/x-www-form-urlencoded\"},L),body:o})})}isWebViewWithRestrictions(){return this._gateway.isWebViewWithRestrictions()}setIsWebViewExperimentOn(e){return this._gateway.setIsWebViewExperimentOn(e)}_prefetchGooglePaymentData(){const e=this._getPaymentDataRequest();e.transactionInfo=this._gateway.getTransactionInfo(),this._getPaymentsClient().prefetchPaymentData(e)}_determineReadinessToPay(){return U(this,void 0,void 0,function*(){try{const{result:e}=yield this._getPaymentsClient().isReadyToPay(this._getIsReadyToPayRequest());if(!1===e)throw new F(\"Google Pay is not supported by the current device and browser, please try another payment method.\")}catch(e){if(e instanceof F)throw e;throw new F}})}_buildButtonPayloads(){this._baseCardPaymentMethod={type:\"CARD\",parameters:this._gateway.getCardParameters()}}_buildWidgetPayloads(){return U(this,void 0,void 0,function*(){const e=this._getBaseCardPaymentMethod();this._cardPaymentMethod=Object.assign(Object.assign({},e),{tokenizationSpecification:{type:\"PAYMENT_GATEWAY\",parameters:yield this._gateway.getPaymentGatewayParameters()}});const t=this._gateway.isWebViewWithRestrictions()?{shippingOptionRequired:!1}:{callbackIntents:this._gateway.getCallbackIntents(),offerInfo:this._gateway.getAppliedCoupons()};this._paymentDataRequest=Object.assign(Object.assign(Object.assign(Object.assign({},this._baseRequest),{allowedPaymentMethods:[this._cardPaymentMethod],transactionInfo:this._gateway.getTransactionInfo(),merchantInfo:this._gateway.getMerchantInfo()}),yield this._gateway.getRequiredData()),t),this._isReadyToPayRequest=Object.assign(Object.assign({},this._baseRequest),{allowedPaymentMethods:[e]})})}_getBaseCardPaymentMethod(){return this._getOrThrow(this._baseCardPaymentMethod)}_getPaymentDataRequest(){return this._getOrThrow(this._paymentDataRequest)}_getIsReadyToPayRequest(){return this._getOrThrow(this._isReadyToPayRequest)}_getPaymentsClient(){return this._getOrThrow(this._paymentsClient)}_getOrThrow(e){return S(e,()=>new g(y.PaymentNotInitialized))}}class W extends v{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class V extends o{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}const H={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},K={position:\"fixed\",\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},Z=\"embedded-checkout-loading-indicator-rotation\";class Y{constructor(e){this.styles=Object.assign(Object.assign({},H),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${Z} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(n=>{e.style.setProperty(n,t[n])})}defineAnimation(){var e;if(document.getElementById(Z))return;const t=document.createElement(\"style\");t.id=Z,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${Z} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}function J(e){return\"object\"==typeof e&&null!==e&&\"statusCode\"in e}var $;function Q(e){return Object.values($).includes(e)}!function(e){e.ADYEN_V2=\"googlepayadyenv2\",e.ADYEN_V3=\"googlepayadyenv3\",e.AUTHORIZE_NET=\"googlepayauthorizenet\",e.BNZ=\"googlepaybnz\",e.BRAINTREE=\"googlepaybraintree\",e.PAYPAL_COMMERCE=\"googlepaypaypalcommerce\",e.BIGCOMMERCE_PAYMENTS=\"googlepay_bigcommerce_payments\",e.CHECKOUT_COM=\"googlepaycheckoutcom\",e.CYBERSOURCE_V2=\"googlepaycybersourcev2\",e.ORBITAL=\"googlepayorbital\",e.STRIPE=\"googlepaystripe\",e.STRIPE_UPE=\"googlepaystripeupe\",e.STRIPE_OCS=\"googlepaystripeocs\",e.WORLDPAY_ACCESS=\"googlepayworldpayaccess\",e.TD_ONLINE_MART=\"googlepaytdonlinemart\"}($||($={}));var X=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class ee{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t,this._isDeinitializationBlocked=!1,this._isContainerMode=!1,this._loadingIndicator=new Y({containerStyles:K})}initialize(e){var t,n;return X(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId)||!Q(e.methodId))throw new v('Unable to proceed because \"methodId\" is not a valid key.');this._methodId=e.methodId;const r=e[this._getMethodId()];if(!(null==r?void 0:r.walletButton)&&!(null==r?void 0:r.container))throw new v(\"Unable to proceed without valid options.\");const{walletButton:i,loadingContainerId:o,container:a,buttonColor:s,buttonSizeMode:u,buttonType:c,onInit:l}=r,d=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(r,[\"walletButton\",\"loadingContainerId\",\"container\",\"buttonColor\",\"buttonSizeMode\",\"buttonType\",\"onInit\"]);this._loadingIndicatorContainer=o,yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodId());const h=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(this._getMethodId());if(this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(t=h.initializationData)||void 0===t?void 0:t.isWebViewExperimentOn)),yield this._googlePayPaymentProcessor.initialize(()=>h,this._getGooglePayClientOptions(null===(n=h.initializationData)||void 0===n?void 0:n.storeCountry)),a){this._isContainerMode=!0;const e=()=>this._addPaymentButtonToContainer(r);l?l(e):e()}else this._addPaymentButton(i,d)})}execute({payment:e}){return X(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new W([\"payment\"]);yield this._paymentIntegrationService.submitOrder();const t=yield this._googlePayPaymentProcessor.getNonce(e.methodId),n=yield this._googlePayPaymentProcessor.extraPaymentData();try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:Object.assign({nonce:t},n)}))}catch(t){yield this._googlePayPaymentProcessor.processAdditionalAction(t,e.methodId)}})}finalize(){return Promise.reject(new V)}deinitialize(){var e,t;return this._isDeinitializationBlocked||(this._isContainerMode?null===(e=this._paymentButton)||void 0===e||e.remove():this._clickListener&&(null===(t=this._paymentButton)||void 0===t||t.removeEventListener(\"click\",this._clickListener)),this._paymentButton=void 0,this._clickListener=void 0,this._methodId=void 0,this._isContainerMode=!1),Promise.resolve()}_addPaymentButton(e,t){if(this._paymentButton)return;const n=document.getElementById(e);if(!n)throw new v(\"Unable to proceed without a walletButton.\");this._paymentButton=n,this._clickListener=this._handleClick(t),this._paymentButton.addEventListener(\"click\",this._clickListener)}_addPaymentButtonToContainer(e){if(this._paymentButton)return;const{container:t,buttonColor:n,buttonSizeMode:r,buttonType:i,onError:o}=e;if(!t)throw new v(\"Unable to proceed: container ID is not valid.\");const a=this._googlePayPaymentProcessor.addPaymentButton(t,{buttonColor:null!=n?n:\"default\",buttonSizeMode:null!=r?r:\"fill\",buttonType:null!=i?i:\"pay\",onClick:this._handleContainerButtonClick(o)});if(!a)throw new v(`Unable to proceed: container element \"#${t}\" not found in the DOM.`);this._paymentButton=a}_handleContainerButtonClick(e){return t=>X(this,void 0,void 0,function*(){t.preventDefault(),yield this._runGooglePayWidgetInteractionWithErrorHandling(e,()=>X(this,void 0,void 0,function*(){this._googlePayPaymentProcessor.setShouldRequestShipping(!1),yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheetAndPay()}))})}_handleClick({onPaymentSelect:e,onError:t}){return n=>X(this,void 0,void 0,function*(){n.preventDefault(),yield this._runGooglePayWidgetInteractionWithErrorHandling(t,()=>X(this,void 0,void 0,function*(){this._googlePayPaymentProcessor.setShouldRequestShipping(!1),yield this._googlePayPaymentProcessor.initializeWidget(),this._isDirectPayOnClickEnabled()?yield this._interactWithPaymentSheetAndPay():yield this._interactWithPaymentSheet()})),null==e||e()})}_interactWithPaymentSheetAndPay(){return X(this,void 0,void 0,function*(){const e=yield this._googlePayPaymentProcessor.showPaymentSheet();this._toggleBlockDeinitialization(!0),this._toggleLoadingIndicator(!0);const t=this._getMethodId(),n=this._paymentIntegrationService.getState(),{features:r}=n.getStoreConfigOrThrow().checkoutSettings,i=I(r,\"PI-5031.google_pay_dont_override_address\"),o=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(e);o&&!i&&(yield this._paymentIntegrationService.updateBillingAddress(o)),yield this._googlePayPaymentProcessor.setExternalCheckoutXhr(t,e),yield this._paymentIntegrationService.loadCheckout(),yield this._paymentIntegrationService.loadPaymentMethod(t);const a=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t);yield this._googlePayPaymentProcessor.initialize(()=>a),yield this.execute({useStoreCredit:!1,payment:{methodId:t}}),this._completeCheckoutFlow()})}_completeCheckoutFlow(){window.location.replace(\"/checkout/order-confirmation\"),this._toggleLoadingIndicator(!1),this._toggleBlockDeinitialization(!1)}_interactWithPaymentSheet(){return X(this,void 0,void 0,function*(){const e=yield this._googlePayPaymentProcessor.showPaymentSheet(),t=this._paymentIntegrationService.getState(),{features:n}=t.getStoreConfigOrThrow().checkoutSettings,r=I(n,\"PI-5031.google_pay_dont_override_address\");this._toggleBlockDeinitialization(!0),this._toggleLoadingIndicator(!0);const i=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(e);i&&!r&&(yield this._paymentIntegrationService.updateBillingAddress(i)),yield this._googlePayPaymentProcessor.setExternalCheckoutXhr(this._getMethodId(),e),yield this._paymentIntegrationService.loadCheckout(),yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodId()),this._toggleLoadingIndicator(!1),this._toggleBlockDeinitialization(!1)})}_getMethodId(){return S(this._methodId,()=>new g(y.PaymentNotInitialized))}_getIsSignedInOrThrow(){return X(this,void 0,void 0,function*(){try{return!!(yield this._googlePayPaymentProcessor.getNonce(this._getMethodId()))}catch(e){if(e instanceof d&&e.subtype===s.MissingPaymentToken)return!1;throw e}})}_handleOfferTrigger(e){return X(this,void 0,void 0,function*(){let t=!1,n=\"Sign in to Google Pay first to apply or remove promo codes.\";try{t=yield this._getIsSignedInOrThrow()}catch(e){e instanceof d&&(n=e.message)}if(t){const{newOfferInfo:t,error:n}=yield this._googlePayPaymentProcessor.handleCoupons(e);return{newOfferInfo:t,error:n}}return{error:{reason:N.OFFER_INVALID,message:n,intent:z.OFFER}}})}_getGooglePayClientOptions(e){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:t,offerData:n})=>X(this,void 0,void 0,function*(){if(t!==z.INITIALIZE&&t!==z.OFFER)return;const{offerChangeTriggers:r}=this._googlePayPaymentProcessor.getCallbackTriggers(),{newOfferInfo:i,error:o}=r.includes(t)?yield this._handleOfferTrigger(n):{},a=o;yield this._paymentIntegrationService.loadCheckout();const{code:s}=this._paymentIntegrationService.getState().getCartOrThrow().currency,u=this._googlePayPaymentProcessor.getTotalPrice();return Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},e&&{countryCode:e}),{currencyCode:s,totalPriceStatus:E.FINAL,totalPrice:u})},i&&{newOfferInfo:i}),a&&{error:a})})}}}_runGooglePayWidgetInteractionWithErrorHandling(e,t){return X(this,void 0,void 0,function*(){try{yield t()}catch(t){let n=t;if(this._toggleLoadingIndicator(!1),J(t)){if(\"CANCELED\"===t.statusCode)throw new p;n=new F(JSON.stringify(t))}throw null==e||e(new F(\"An error occurred while requesting your Google Pay payment details.\")),n}finally{this._toggleBlockDeinitialization(!1)}})}_isDirectPayOnClickEnabled(){const{features:e}=this._paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings;return I(e,\"PI-5111.google_pay_direct_pay_on_click\")}_toggleBlockDeinitialization(e){this._isDeinitializationBlocked=e}_toggleLoadingIndicator(e){e&&this._loadingIndicatorContainer?this._loadingIndicator.show(this._loadingIndicatorContainer):this._loadingIndicator.hide()}}class te{constructor(e){this._scriptLoader=e,this._window=window}getGooglePaymentsClient(e=!1,t){return n=this,r=void 0,o=function*(){if(yield this._scriptLoader.loadScript(\"https://pay.google.com/gp/p/js/pay.js\"),!this._window.google)throw new a;return void 0===this._paymentsClient&&(this._paymentsClient=new this._window.google.payments.api.PaymentsClient(Object.assign({environment:e?\"TEST\":\"PRODUCTION\"},null!=t?t:{}))),this._paymentsClient},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{u(o.next(e))}catch(e){t(e)}}function s(e){try{u(o.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}u((o=o.apply(n,r||[])).next())});var n,r,i,o}}function ne(){return new te((0,i.vQ)())}const re=c(n=>new ee(n,new q(ne(),new B(n,new u((0,i.vQ)(),(0,i._U)())),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepayadyenv2\"}]);class ie{constructor(e,t,n=window){this._scriptLoader=e,this._stylesheetLoader=t,this._window=n}load(e){var t,n,r,i,o,s;return r=this,i=void 0,s=function*(){if(yield Promise.all([this._stylesheetLoader.loadStylesheet(`https://checkoutshopper-${null!==(t=e.environment)&&void 0!==t?t:\"\"}.adyen.com/checkoutshopper/sdk/5.71.1/adyen.css`,{prepend:!1,attributes:{integrity:\"sha384-5MvB4RnzvviA3VBT4KYABZ4HXNZG5LRqREEgd41xt/pf/QvKmsj2O9GuNuywRXx9\",crossorigin:\"anonymous\"}}),this._scriptLoader.loadScript(`https://checkoutshopper-${null!==(n=e.environment)&&void 0!==n?n:\"\"}.adyen.com/checkoutshopper/sdk/5.71.1/adyen.js`,{async:!0,attributes:{integrity:\"sha384-yvY2yFNR4WqIjPqP9MzjI+gJimmaJnAvj4rLHKvgJbgFD5fMuf8zIJrFJOW8Lhhf\",crossorigin:\"anonymous\"}})]),!this._window.AdyenCheckout)throw new a;return yield this._window.AdyenCheckout(e)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{u(s.next(e))}catch(e){t(e)}}function a(e){try{u(s.throw(e))}catch(e){t(e)}}function u(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o(function(e){e(r)})).then(n,a)}u((s=s.apply(r,i||[])).next())})}}var oe=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class ae extends x{constructor(e,t){super(\"adyen\",e),this._scriptLoader=t,this._service=e}initialize(e,t,n){const r=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return oe(this,void 0,void 0,function*(){yield r.initialize.call(this,e,t,n);const i=r.getPaymentMethod.call(this),o=this._service.getState().getStoreConfig();if(!o)throw new d(s.MissingCheckoutConfig);return this._adyenClient=yield this._scriptLoader.load({environment:i.config.testMode?\"test\":\"live\",locale:o.storeProfile.storeLanguage}),Promise.resolve()})}processAdditionalAction(e){return oe(this,void 0,void 0,function*(){if(!f(e)||!l(e.body))throw e;const t=yield this._handleAction(e.body.provider_data);try{return yield this._service.submitPayment(t)}catch(e){return this.processAdditionalAction(e)}})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});return oe(this,void 0,void 0,function*(){const n=yield t.getNonce.call(this,e),r=t.getPaymentMethod.call(this);return JSON.stringify({type:r.method,googlePayToken:n,browser_info:h()})})}_handleAction(e){return new Promise((t,n)=>{const r=JSON.parse(e.action);this._getAdyenClient().createFromAction(r,{onAdditionalDetails:e=>{const n={methodId:r.paymentMethodType,paymentData:{nonce:JSON.stringify(e.data)}};t(n)},size:\"05\",onError:e=>n(e)}).mount(\"body\"),n(new p)})}_getAdyenClient(){if(!this._adyenClient)throw new g(y.PaymentNotInitialized);return this._adyenClient}}const se=c(n=>new ee(n,new q(ne(),new ae(n,new ie((0,i.vQ)(),(0,i._U)())),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepayadyenv3\"}]);class ue extends x{constructor(e){super(\"authorizenet\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,r=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{u(o.next(e))}catch(e){t(e)}}function s(e){try{u(o.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}u((o=o.apply(n,r||[])).next())});var n,r,i,o}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();return function(e){if(!function(e){return\"paymentGatewayId\"in e}(e))throw new d(s.MissingPaymentMethod)}(e),{gateway:this.getGatewayIdentifier(),gatewayMerchantId:e.paymentGatewayId}}}const ce=c(n=>new ee(n,new q(ne(),new ue(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepayauthorizenet\"}]);var le;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(le||(le={}));const de=le;function he(e){if(!function(e){return\"checkoutcomkey\"in e}(e))throw new d(s.MissingPaymentMethod)}var fe=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class pe extends x{constructor(e,t){super(\"checkoutltd\",e),this._requestSender=t}processAdditionalAction(e){return new Promise((t,n)=>{if(f(e)&&function(e){var t;if(\"object\"!=typeof e||null===e)return!1;const n=e;return\"string\"==typeof(null===(t=n.three_ds_result)||void 0===t?void 0:t.acs_url)&&\"string\"==typeof n.three_ds_result.code}(e.body)&&\"three_d_secure_required\"===e.body.three_ds_result.code)return window.location.assign(e.body.three_ds_result.acs_url);n(e)})}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return fe(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let r;try{r=JSON.parse(n.nonce)}catch(e){throw new v(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"protocolVersion\"in e&&\"signature\"in e&&\"signedMessage\"in e}(e))throw new d(s.MissingPaymentToken)}(r),n.nonce=yield this._tokenize(r),n})}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();return he(e),{gateway:this.getGatewayIdentifier(),gatewayMerchantId:e.checkoutcomkey}}_tokenize(e){return fe(this,void 0,void 0,function*(){const t=this.getPaymentMethod().config.testMode?\"https://api.sandbox.checkout.com/tokens\":\"https://api.checkout.com/tokens\",n=this.getGooglePayInitializationData();he(n);const{body:r}=yield this._requestSender.post(t,{credentials:!1,body:{type:\"googlepay\",token_data:e},headers:{Authorization:n.checkoutcomkey,\"Content-Type\":de.Json,\"X-XSRF-TOKEN\":null}});return r.token})}}const ye=c(n=>{const r=(0,t.createRequestSender)();return new ee(n,new q(ne(),new pe(n,r),r,(0,e.createFormPoster)()))},[{id:\"googlepaycheckoutcom\"}]);class ge extends x{constructor(e){super(\"cybersource\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,r=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{u(o.next(e))}catch(e){t(e)}}function s(e){try{u(o.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}u((o=o.apply(n,r||[])).next())});var n,r,i,o}}const _e=c(n=>new ee(n,new q(ne(),new ge(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaycybersourcev2\"},{id:\"googlepaybnz\"}]);class ve extends x{constructor(e){super(\"chase\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,r=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{u(o.next(e))}catch(e){t(e)}}function s(e){try{u(o.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}u((o=o.apply(n,r||[])).next())});var n,r,i,o}}const me=c(n=>new ee(n,new q(ne(),new ve(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepayorbital\"}]);var we,Pe,be,Se,Ce,Ie,Oe,Ae,Te,ke,Ee,Me;!function(e){e.SHIPPING=\"shipping\",e.BILLING=\"billing\"}(we||(we={})),function(e){e.SPLIT=\"split\",e.FULL=\"full\",e.ORGANIZATION=\"organization\"}(Pe||(Pe={})),function(e){e.Open=\"open\",e.Expired=\"expired\",e.Complete=\"complete\"}(be||(be={})),function(e){e.Paid=\"paid\",e.UnPaid=\"unpaid\",e.NoPaymentRequired=\"no_payment_required\"}(Se||(Se={})),function(e){e.SUCCESS=\"success\",e.ERROR=\"error\"}(Ce||(Ce={})),function(e){e.CreditCard=\"card\",e.ACH=\"us_bank_account\",e.Link=\"link\",e.EPS=\"eps\",e.GRABPAY=\"grabpay\",e.BANCONTACT=\"bancontact\",e.IDEAL=\"ideal\",e.ALIPAY=\"alipay\",e.KLARNA=\"klarna\",e.OCS=\"optimized_checkout\",e.CHECKOUT_SESSION=\"checkout_session\"}(Ie||(Ie={})),function(e){e.NEVER=\"never\",e.AUTO=\"auto\",e.ALWAYS=\"always\",e.PAYMENT=\"payment\",e.IF_REQUIRED=\"if_required\"}(Oe||(Oe={})),function(e){e.V3=\"v3\",e.ACACIA=\"acacia\",e.BASIL=\"basil\",e.CLOVER=\"clover\"}(Ae||(Ae={})),function(e){e.PAYMENT=\"payment\",e.AUTHENTICATION=\"linkAuthentication\",e.SHIPPING=\"address\",e.EXPRESS_CHECKOUT=\"expressCheckout\"}(Te||(Te={})),function(e){e.REQUIRES_PAYMENT_METHOD=\"requires_payment_method\",e.REQUIRES_CONFIRMATION=\"requires_confirmation\",e.REQUIRES_ACTION=\"requires_action\",e.PROCESSING=\"processing\",e.SUCCEEDED=\"succeeded\",e.CANCELED=\"canceled\"}(ke||(ke={})),function(e){e.CLICK=\"click\",e.CHANGE=\"change\",e.READY=\"ready\",e.SHIPPING_ADDRESS_CHANGE=\"shippingaddresschange\",e.SHIPPING_RATE_CHANGE=\"shippingratechange\",e.CONFIRM=\"confirm\",e.CANCEL=\"cancel\",e.LOADER_START=\"loaderstart\"}(Ee||(Ee={})),function(e){e.ON_SESSION=\"on_session\",e.OFF_SESSION=\"off_session\"}(Me||(Me={}));var Re=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class Ne{constructor(e,t=window){this.scriptLoader=e,this.stripeWindow=t}getStripeClient(e,t,n,r,i){return Re(this,void 0,void 0,function*(){if(this.stripeWindow.bcStripeClient)return this.stripeWindow.bcStripeClient;const o=yield this.load(n),{stripePublishableKey:a,stripeConnectedAccount:s}=e,u=o(a,Object.assign(Object.assign(Object.assign(Object.assign({},s?{stripeAccount:s}:{}),t?{locale:t}:{}),r?{betas:r}:{}),i?{apiVersion:i}:{}));return Object.assign(this.stripeWindow,{bcStripeClient:u}),u})}getElements(e,t){return Re(this,void 0,void 0,function*(){let n=this.stripeWindow.bcStripeElements;return n?yield this.updateStripeElements(t):(n=e.elements(t),Object.assign(this.stripeWindow,{bcStripeElements:n})),n})}updateStripeElements(e){return Re(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeElements;t&&(t.update(e),yield t.fetchUpdates())})}getStripeCheckout(e,t){return Re(this,void 0,void 0,function*(){let n=yield this.getStoredStripeCheckout(t);return n||(n=yield e.initCheckout(t),Object.assign(this.stripeWindow,{bcStripeCheckout:n})),n})}load(e){return Re(this,void 0,void 0,function*(){if(!this.stripeWindow.Stripe&&(yield this.scriptLoader.loadScript(this.getScriptUrl(e)),!this.stripeWindow.Stripe))throw new a;return this.stripeWindow.Stripe})}getScriptUrl(e){return e&&e!==Ae.V3?`https://js.stripe.com/${e}/stripe.js`:\"https://js.stripe.com/v3/\"}getStoredStripeCheckout(e){return Re(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeCheckout;if(t)try{const{actions:n,error:r}=yield t.loadActions();if(r||!n)return void this.logErrorToConsole(r);const i=yield n.getSession(),o=e.clientSecret.split(\"_secret_\")[0];if(i.id===o)return t}catch(e){return void this.logErrorToConsole(e)}})}logErrorToConsole(e){e?console.error(e):console.error(\"No stripe checkout actions available on loadActions().\")}}const ze={body:{},headers:{},status:0};class je extends o{constructor(e,{message:t,errors:n}={}){const{body:r,headers:i,status:o}=e||ze;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=i,this.status=o,this.errors=n||[]}}const De=[\"payment_element_beta_2\",\"alipay_pm_beta_1\",\"link_default_integration_beta_1\",\"shipping_address_element_beta_1\",\"address_element_beta_1\"];function xe(e){if(!function(e){return\"stripeConnectedAccount\"in e&&\"stripePublishableKey\"in e&&\"stripeVersion\"in e}(e))throw new d(s.MissingPaymentMethod)}var Ge=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class Be extends x{constructor(e,t){super(\"stripe\",e),this.paymentIntegrationService=e,this.scriptLoader=t}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return Ge(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let r;try{r=JSON.parse(n.nonce)}catch(e){throw new v(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"id\"in e}(e))throw new d(s.MissingPaymentToken)}(r),n.nonce=r.id,n})}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();xe(e);const{stripeVersion:t,stripePublishableKey:n,stripeConnectedAccount:r}=e;return{gateway:this.getGatewayIdentifier(),\"stripe:version\":t,\"stripe:publishableKey\":`${n}/${r}`}}processAdditionalAction(e,t){var n;return Ge(this,void 0,void 0,function*(){if(!t)throw new W([\"payment\"]);if(!f(e)||(\"object\"!=typeof(r=e.body)||null===r||!(\"three_ds_result\"in r)||!(\"errors\"in r)))throw e;var r;if((0,_.some)(e.body.errors,{code:\"three_d_secure_required\"})){const r=this.getGooglePayInitializationData();xe(r),this.stripeUPEClient=yield this.loadStripeJs(r,t);const i=e.body.three_ds_result.token;let o,a=!1;try{o=yield this.stripeUPEClient.confirmCardPayment(i)}catch(e){try{o=yield this.stripeUPEClient.retrievePaymentIntent(i)}catch(e){a=!0}}if(null==o?void 0:o.error){if(this._throwDisplayableStripeError(o.error),this._isCancellationError(o.error))throw new p;throw new F}if(!(null==o?void 0:o.paymentIntent)&&!a)throw new je;return this.paymentIntegrationService.submitPayment({methodId:t,paymentData:{nonce:(null===(n=null==o?void 0:o.paymentIntent)||void 0===n?void 0:n.id)||i}})}throw e})}loadStripeJs(e,t){return Ge(this,void 0,void 0,function*(){if(this.stripeUPEClient)return this.stripeUPEClient;const n=this.paymentIntegrationService.getState().getCartLocale();return\"googlepaystripeocs\"===t&&e.useNewStripeJsVersion?this.scriptLoader.getStripeClient(e,n,Ae.CLOVER):this.scriptLoader.getStripeClient(e,n,Ae.V3,De,\"2020-03-02;alipay_beta=v1;link_beta=v1\")})}_isCancellationError(e){var t,n;return e&&-1!==(null===(n=null===(t=e.payment_intent.last_payment_error)||void 0===t?void 0:t.message)||void 0===n?void 0:n.indexOf(\"canceled\"))}_throwDisplayableStripeError(e){if((0,_.includes)([\"card_error\",\"invalid_request_error\",\"validation_error\"],e.type))throw new Error(e.message)}}const Le=c(n=>new ee(n,new q(ne(),new Be(n,new Ne((0,i.vQ)())),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeupe\"},{id:\"googlepaystripeocs\"}]);class Fe extends x{constructor(e){super(\"worldpay\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,r=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{u(o.next(e))}catch(e){t(e)}}function s(e){try{u(o.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}u((o=o.apply(n,r||[])).next())});var n,r,i,o}}const Ue=c(n=>new ee(n,new q(ne(),new Fe(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepayworldpayaccess\"}]),qe=\"3.128.0\",We=\"3.123.2\",Ve=\"3.106.0\";class He{constructor(e){this.paymentIntegrationService=e,this.braintreeWindow=window}getSDKVersion(){const e=this.paymentIntegrationService.getState().getStoreConfig(),t=(null==e?void 0:e.checkoutSettings.features)||{};return this.getPreloadedSDKVersion()||(I(t,\"PAYPAL-5809.braintree_hosted_fields_fix_version\")?qe:I(t,\"PAYPAL-5636.update_braintree_sdk_version\")?We:Ve)}getPreloadedSDKVersion(){const e=this.braintreeWindow.braintree;if(e){const t=(0,_.find)(Object.values(e),e=>!!e.VERSION);return null==t?void 0:t.VERSION}}}class Ke extends o{constructor(e){super(e||\"Unsupported browser error\"),this.name=\"UnsupportedBrowserError\",this.type=\"unsupported_browser\"}}var Ze,Ye,Je,$e,Qe,Xe,et;!function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(Ze||(Ze={})),function(e){e.Completed=\"COMPLETED\",e.Pending=\"PENDING\",e.Failed=\"FAILED\"}(Ye||(Ye={})),function(e){e.TRUSTLY=\"trustly\"}(Je||(Je={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"cancelled\",e.UNRECOGNIZED=\"unrecognized\"}($e||($e={})),function(e){e.Customer=\"CUSTOMER\",e.Merchant=\"MERCHANT\",e.Network=\"NETWORK\",e.Internal=\"INTERNAL\",e.Unknown=\"UNKNOWN\"}(Qe||(Qe={})),function(e){e.KountNotEnabled=\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"}(Xe||(Xe={})),function(e){e.Visa=\"visa\",e.Mastercard=\"mastercard\",e.AmericanExpress=\"american-express\",e.DinersClub=\"diners-club\",e.Discover=\"discover\",e.Jcb=\"jcb\",e.UnionPay=\"union-pay\",e.Maestro=\"maestro\",e.Elo=\"elo\",e.Mir=\"mir\",e.Hiper=\"hiper\",e.Hipercard=\"hipercard\"}(et||(et={}));var tt,nt,rt,it=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class ot{constructor(e){this.braintreeScriptLoader=e}initialize(e){this.setClientToken(e)}deinitialize(){return it(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollector),this.dataCollector=void 0})}getClient(){return it(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=yield t.create({authorization:e})}return this.client})}getDataCollectorOrThrow(e){return it(this,void 0,void 0,function*(){const t={deviceData:void 0,teardown:()=>Promise.resolve()};if(!this.dataCollector)try{const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadDataCollector(),r=Object.assign({client:t,kount:!0},e);this.dataCollector=yield n.create(r)}catch(e){if(function(e){return Boolean(\"object\"==typeof e&&null!==e&&(\"type\"in e||\"message\"in e||\"code\"in e))}(e)&&e.code===Xe.KountNotEnabled)return t;throw e}return this.dataCollector})}getBraintreeGooglePayment(){return it(this,void 0,void 0,function*(){if(!this.googlePayment){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadGooglePayment()]);this.googlePayment=yield t.create({client:e})}return this.googlePayment})}getBraintreeThreeDS(){return it(this,void 0,void 0,function*(){if(!this.threeDS){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]);this.threeDS=yield t.create({client:e,version:2})}return this.threeDS})}getBraintreeLocalPayment(e){return it(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment){const[t,n]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadLocalPayment()]);this.braintreeLocalPayment=yield new Promise((r,i)=>{n.create({client:t,merchantAccountId:e},(e,t)=>{e&&i(e),r(t)})})}return this.braintreeLocalPayment})}getUsBankAccount(){return it(this,void 0,void 0,function*(){if(!this.usBankAccount){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadUsBankAccount();this.usBankAccount=yield t.create({client:e})}return this.usBankAccount})}getBraintreeVisaCheckout(){return this.visaCheckout||(this.visaCheckout=Promise.all([this.getClient(),this.braintreeScriptLoader.loadVisaCheckout()]).then(([e,t])=>t.create({client:e}))),this.visaCheckout}getVisaCheckoutSdk(e){return it(this,void 0,void 0,function*(){return this.visaCheckoutSDK||(this.visaCheckoutSDK=yield this.braintreeScriptLoader.loadVisaCheckoutSdk(e)),this.visaCheckoutSDK})}getVenmoCheckoutOrThrow(){return it(this,void 0,void 0,function*(){if(!this.braintreeVenmo){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadVenmoCheckout(),n={client:e,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},r=yield t.create(n);if(!r.isBrowserSupported())throw new Ke;this.braintreeVenmo=r}return this.braintreeVenmo})}setClientToken(e){this.clientToken=e}getClientTokenOrThrow(){if(!this.clientToken)throw new g(y.PaymentNotInitialized);return this.clientToken}teardownModule(e){return e?e.teardown():Promise.resolve()}}!function(e){e.Sandbox=\"sandbox\",e.Production=\"production\"}(tt||(tt={})),function(e){e.Client=\"client\",e.DataCollector=\"dataCollector\",e.Fastlane=\"fastlane\",e.GooglePayment=\"googlePayment\",e.HostedFields=\"hostedFields\",e.LocalPayment=\"localPayment\",e.Paypal=\"paypal\",e.PaypalCheckout=\"paypalCheckout\",e.ThreeDSecure=\"threeDSecure\",e.UsBankAccount=\"usBankAccount\",e.Venmo=\"venmo\",e.VisaCheckout=\"visaCheckout\"}(nt||(nt={})),function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\"}(rt||(rt={}));const at={[Ve]:{[nt.Client]:\"sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt\",[nt.PaypalCheckout]:\"sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O\",[nt.Paypal]:\"sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+\",[nt.LocalPayment]:\"sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT\",[nt.DataCollector]:\"sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV\",[nt.UsBankAccount]:\"sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ\",[nt.GooglePayment]:\"sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe\",[nt.ThreeDSecure]:\"sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB\",[nt.VisaCheckout]:\"sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT\",[nt.Venmo]:\"sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov\",[nt.HostedFields]:\"sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy\",[nt.Fastlane]:\"sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa\"},[We]:{[nt.Client]:\"sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO\",[nt.PaypalCheckout]:\"sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/\",[nt.Paypal]:\"sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt\",[nt.LocalPayment]:\"sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH\",[nt.DataCollector]:\"sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO\",[nt.UsBankAccount]:\"sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW\",[nt.GooglePayment]:\"sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO\",[nt.ThreeDSecure]:\"sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym\",[nt.VisaCheckout]:\"sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS\",[nt.Venmo]:\"sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU\",[nt.HostedFields]:\"sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P\",[nt.Fastlane]:\"sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y\"},[qe]:{[nt.Client]:\"sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq\",[nt.PaypalCheckout]:\"sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh\",[nt.Paypal]:\"sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH\",[nt.LocalPayment]:\"sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC\",[nt.DataCollector]:\"sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc\",[nt.UsBankAccount]:\"sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F\",[nt.GooglePayment]:\"sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i\",[nt.ThreeDSecure]:\"sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D\",[nt.VisaCheckout]:\"sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv\",[nt.Venmo]:\"sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz\",[nt.HostedFields]:\"sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z\",[nt.Fastlane]:\"sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr\"}};var st=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class ut{constructor(e,t,n){this.scriptLoader=e,this.braintreeHostWindow=t,this.braintreeSDKVersionManager=n}loadClient(){return st(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(nt.Client,\"client.min.js\")})}loadFastlane(){return st(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(nt.Fastlane,\"fastlane.min.js\")})}loadPaypalCheckout(){return st(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(nt.PaypalCheckout,\"paypal-checkout.min.js\")})}loadPaypal(){return st(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(nt.Paypal,\"paypal.min.js\")})}loadLocalPayment(){return st(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(nt.LocalPayment,\"local-payment.min.js\")})}loadDataCollector(){return st(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(nt.DataCollector,\"data-collector.min.js\")})}loadUsBankAccount(){return st(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(nt.UsBankAccount,\"us-bank-account.min.js\")})}loadGooglePayment(){return st(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(nt.GooglePayment,\"google-payment.min.js\")})}load3DS(){return st(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(nt.ThreeDSecure,\"three-d-secure.min.js\")})}loadVisaCheckout(){return this.loadBraintreeModuleOrThrow(nt.VisaCheckout,\"visa-checkout.min.js\")}loadVenmoCheckout(){return this.loadBraintreeModuleOrThrow(nt.Venmo,\"venmo.min.js\")}loadHostedFields(){return st(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(nt.HostedFields,\"hosted-fields.min.js\")})}loadVisaCheckoutSdk(e){return st(this,void 0,void 0,function*(){if(this.braintreeHostWindow.V)return this.braintreeHostWindow.V;const t=e?\"sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm\":\"sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6\";return this.scriptLoader.loadScript(`//${e?\"sandbox-\":\"\"}assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,{async:!0,attributes:{integrity:t,crossorigin:\"anonymous\"}}).then(()=>{if(!this.braintreeHostWindow.V)throw new a;return this.braintreeHostWindow.V})})}loadBraintreeModuleOrThrow(e,t){return st(this,void 0,void 0,function*(){let n=this.getBraintreeModule(e);if(n)return n;const r=this.braintreeSDKVersionManager.getSDKVersion(),i=`//js.braintreegateway.com/web/${r}/js/${t}`,o=r in at?this.getIntegrityValuesByModuleName(e,r):void 0;if(yield this.scriptLoader.loadScript(i,o?{async:!0,attributes:{integrity:o,crossorigin:\"anonymous\"}}:void 0),n=this.getBraintreeModule(e),!n)throw new a;return n})}getBraintreeModule(e){var t;return null===(t=this.braintreeHostWindow.braintree)||void 0===t?void 0:t[e]}getIntegrityValuesByModuleName(e,t){const n=at[t][e];if(!n)throw new Error(\"Unexpected fileName value\");return n}}class ct{constructor(e){const t=new Promise((e,t)=>{this.cancel=t});this.promise=Promise.race([e,t])}}var lt=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class dt extends x{constructor(e,t){super(\"braintree\",e),this._braintreeSdk=t,this._methodId=$.BRAINTREE,this._service=e}initialize(e,t,n){const r=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return lt(this,void 0,void 0,function*(){yield r.initialize.call(this,e,t,n);let i=r.getPaymentMethod.call(this);if(i.clientToken||(i=(yield this._service.loadPaymentMethod(this._methodId)).getPaymentMethodOrThrow(this._methodId)),!i.clientToken||!i.initializationData)throw new d(s.MissingPaymentMethod);return this._braintreeSdk.initialize(i.clientToken),this._braintreeGooglePayment=yield this._braintreeSdk.getBraintreeGooglePayment(),Promise.resolve()})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});var n;return lt(this,void 0,void 0,function*(){const r=yield t.getNonce.call(this,e),{clientToken:i,initializationData:o}=t.getPaymentMethod.call(this);if(!i||!o||!(null===(n=o.card_information)||void 0===n?void 0:n.bin))throw new d(s.MissingPaymentMethod);const{isThreeDSecureEnabled:a,card_information:{bin:u,isNetworkTokenized:c}}=o;if(a&&!c){const e=yield this._braintreeSdk.getBraintreeThreeDS(),{orderAmount:t}=this._service.getState().getOrderOrThrow();return(yield this._braintreePresent3DSChallenge(e,t,r,u)).nonce}return r})}extraPaymentData(){return lt(this,void 0,void 0,function*(){return{deviceSessionId:yield this._getBraintreeDeviceData()}})}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return lt(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let r;try{r=JSON.parse(n.nonce)}catch(e){throw new v(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"androidPayCards\"in e}(e))throw new d(s.MissingPaymentToken)}(r),n.nonce=r.androidPayCards[0].nonce,n.card_information.bin=r.androidPayCards[0].details.bin,n.card_information.isNetworkTokenized=r.androidPayCards[0].details.isNetworkTokenized,n})}getCardParameters(){return super.getCardParameters()}getPaymentGatewayParameters(){const e=Object.create(null,{getMerchantInfo:{get:()=>super.getMerchantInfo},getTransactionInfo:{get:()=>super.getTransactionInfo},getRequiredData:{get:()=>super.getRequiredData}});return lt(this,void 0,void 0,function*(){return this.getBraintreeGooglePayment().createPaymentDataRequest(Object.assign({merchantInfo:e.getMerchantInfo.call(this),transactionInfo:e.getTransactionInfo.call(this),cardRequirements:{billingAddressRequired:!0,billingAddressFormat:\"FULL\"}},yield e.getRequiredData.call(this))).paymentMethodTokenizationParameters.parameters})}getBraintreeGooglePayment(){if(!this._braintreeGooglePayment)throw new d(s.MissingPaymentMethod);return this._braintreeGooglePayment}_getBraintreeDeviceData(){return lt(this,void 0,void 0,function*(){const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e})}_braintreePresent3DSChallenge(e,t,n,r){return new ct(e.verifyCard({amount:t,bin:r,nonce:n,onLookupComplete:(e,t)=>{t()}})).promise}}const ht=c(n=>{const r=(0,t.createRequestSender)(),o=window,a=new He(n),s=new ot(new ut((0,i.vQ)(),o,a));return new ee(n,new q(ne(),new dt(n,s),r,(0,e.createFormPoster)()))},[{id:\"googlepaybraintree\"}]),ft=[\"ar_BH\",\"ar_DZ\",\"ar_EG\",\"ar_JO\",\"ar_KW\",\"ar_MA\",\"ar_OM\",\"ar_QA\",\"ar_SA\",\"ar_TN\",\"ar_YE\",\"ar_AE\",\"bg_BG\",\"cs_CZ\",\"da_DK\",\"da_FO\",\"da_GL\",\"de_AT\",\"de_CH\",\"de_DE\",\"de_LU\",\"el_GR\",\"en_AD\",\"en_AE\",\"en_AG\",\"en_AI\",\"en_AL\",\"en_AM\",\"en_AN\",\"en_AO\",\"en_AT\",\"en_AU\",\"en_AW\",\"en_AZ\",\"en_BB\",\"en_BE\",\"en_BH\",\"en_BJ\",\"en_BM\",\"en_BN\",\"en_BS\",\"en_BT\",\"en_BW\",\"en_BY\",\"en_BZ\",\"en_C2\",\"en_CA\",\"en_CD\",\"en_CG\",\"en_CH\",\"en_CI\",\"en_CK\",\"en_CL\",\"en_CM\",\"en_CN\",\"en_CO\",\"en_CR\",\"en_CV\",\"en_CY\",\"en_CZ\",\"en_DE\",\"en_DJ\",\"en_DK\",\"en_DM\",\"en_DO\",\"en_DZ\",\"en_EC\",\"en_EE\",\"en_EG\",\"en_ER\",\"en_ES\",\"en_ET\",\"en_FI\",\"en_FJ\",\"en_FK\",\"en_FM\",\"en_FO\",\"en_FR\",\"en_GA\",\"en_GB\",\"en_GD\",\"en_GE\",\"en_GF\",\"en_GI\",\"en_GL\",\"en_GM\",\"en_GN\",\"en_GP\",\"en_GR\",\"en_GT\",\"en_GW\",\"en_GY\",\"en_HK\",\"en_HN\",\"en_HR\",\"en_HU\",\"en_ID\",\"en_IE\",\"en_IL\",\"en_IN\",\"en_IS\",\"en_IT\",\"en_JM\",\"en_JO\",\"en_JP\",\"en_KE\",\"en_KG\",\"en_KH\",\"en_KI\",\"en_KM\",\"en_KN\",\"en_KR\",\"en_KW\",\"en_KY\",\"en_KZ\",\"en_LA\",\"en_LC\",\"en_LI\",\"en_LK\",\"en_LS\",\"en_LT\",\"en_LU\",\"en_LV\",\"en_MA\",\"en_MC\",\"en_MD\",\"en_ME\",\"en_MG\",\"en_MH\",\"en_MK\",\"en_ML\",\"en_MN\",\"en_MQ\",\"en_MR\",\"en_MS\",\"en_MT\",\"en_MU\",\"en_MV\",\"en_MW\",\"en_MY\",\"en_MZ\",\"en_NA\",\"en_NC\",\"en_NE\",\"en_NF\",\"en_NG\",\"en_NI\",\"en_NL\",\"en_NO\",\"en_NP\",\"en_NR\",\"en_NU\",\"en_NZ\",\"en_OM\",\"en_PA\",\"en_PE\",\"en_PF\",\"en_PG\",\"en_PH\",\"en_PL\",\"en_PM\",\"en_PN\",\"en_PT\",\"en_PW\",\"en_PY\",\"en_QA\",\"en_RE\",\"en_RO\",\"en_RS\",\"en_RU\",\"en_RW\",\"en_SA\",\"en_SB\",\"en_SC\",\"en_SE\",\"en_SG\",\"en_SH\",\"en_SI\",\"en_SJ\",\"en_SK\",\"en_SL\",\"en_SM\",\"en_SN\",\"en_SO\",\"en_SR\",\"en_ST\",\"en_SV\",\"en_SZ\",\"en_TC\",\"en_TD\",\"en_TG\",\"en_TH\",\"en_TJ\",\"en_TM\",\"en_TN\",\"en_TO\",\"en_TR\",\"en_TT\",\"en_TV\",\"en_TW\",\"en_TZ\",\"en_UA\",\"en_UG\",\"en_US\",\"en_UY\",\"en_VA\",\"en_VC\",\"en_VE\",\"en_VG\",\"en_VN\",\"en_VU\",\"en_WF\",\"en_WS\",\"en_YE\",\"en_YT\",\"en_ZA\",\"en_ZM\",\"en_ZW\",\"es_AD\",\"es_AI\",\"es_AO\",\"es_AR\",\"es_AW\",\"es_BB\",\"es_BJ\",\"es_BM\",\"es_BO\",\"es_BS\",\"es_BZ\",\"es_CD\",\"es_CG\",\"es_CK\",\"es_CL\",\"es_CO\",\"es_CR\",\"es_CV\",\"es_DJ\",\"es_DM\",\"es_DO\",\"es_DZ\",\"es_EC\",\"es_EG\",\"es_ER\",\"es_ES\",\"es_ET\",\"es_FJ\",\"es_FK\",\"es_FO\",\"es_GA\",\"es_GD\",\"es_GE\",\"es_GI\",\"es_GL\",\"es_GM\",\"es_GN\",\"es_GT\",\"es_GW\",\"es_GY\",\"es_HN\",\"es_IE\",\"es_JM\",\"es_JO\",\"es_KE\",\"es_KG\",\"es_KI\",\"es_KM\",\"es_KN\",\"es_KW\",\"es_KY\",\"es_KZ\",\"es_LC\",\"es_LI\",\"es_LS\",\"es_LU\",\"es_MA\",\"es_MG\",\"es_MH\",\"es_ML\",\"es_MR\",\"es_MS\",\"es_MU\",\"es_MW\",\"es_MX\",\"es_MZ\",\"es_NA\",\"es_NC\",\"es_NE\",\"es_NF\",\"es_NI\",\"es_NR\",\"es_NU\",\"es_NZ\",\"es_OM\",\"es_PA\",\"es_PE\",\"es_PF\",\"es_PG\",\"es_PM\",\"es_PN\",\"es_PW\",\"es_PY\",\"es_QA\",\"es_RS\",\"es_RW\",\"es_SA\",\"es_SB\",\"es_SC\",\"es_SH\",\"es_SJ\",\"es_SL\",\"es_SM\",\"es_SN\",\"es_SO\",\"es_SR\",\"es_ST\",\"es_SV\",\"es_SZ\",\"es_TC\",\"es_TD\",\"es_TG\",\"es_TJ\",\"es_TM\",\"es_TN\",\"es_TT\",\"es_TV\",\"es_UA\",\"es_UG\",\"es_US\",\"es_UY\",\"es_VA\",\"es_VC\",\"es_VE\",\"es_VG\",\"es_VU\",\"es_WF\",\"es_YE\",\"es_ZM\",\"et_EE\",\"fi_FI\",\"fr_AD\",\"fr_AE\",\"fr_AI\",\"fr_AM\",\"fr_AO\",\"fr_AW\",\"fr_AZ\",\"fr_BB\",\"fr_BE\",\"fr_BF\",\"fr_BI\",\"fr_BJ\",\"fr_BM\",\"fr_BS\",\"fr_BZ\",\"fr_CA\",\"fr_CD\",\"fr_CG\",\"fr_CH\",\"fr_CI\",\"fr_CK\",\"fr_CM\",\"fr_CV\",\"fr_DJ\",\"fr_DM\",\"fr_DO\",\"fr_DZ\",\"fr_EC\",\"fr_ER\",\"fr_ET\",\"fr_FJ\",\"fr_FK\",\"fr_FO\",\"fr_FR\",\"fr_GA\",\"fr_GD\",\"fr_GE\",\"fr_GF\",\"fr_GI\",\"fr_GL\",\"fr_GM\",\"fr_GN\",\"fr_GP\",\"fr_GT\",\"fr_GW\",\"fr_GY\",\"fr_HN\",\"fr_IE\",\"fr_JM\",\"fr_JO\",\"fr_KE\",\"fr_KG\",\"fr_KI\",\"fr_KM\",\"fr_KN\",\"fr_KW\",\"fr_KY\",\"fr_KZ\",\"fr_LC\",\"fr_LI\",\"fr_LS\",\"fr_LU\",\"fr_MA\",\"fr_MC\",\"fr_MG\",\"fr_MH\",\"fr_ML\",\"fr_MQ\",\"fr_MR\",\"fr_MS\",\"fr_MU\",\"fr_MW\",\"fr_MZ\",\"fr_NA\",\"fr_NC\",\"fr_NE\",\"fr_NF\",\"fr_NI\",\"fr_NR\",\"fr_NU\",\"fr_NZ\",\"fr_OM\",\"fr_PA\",\"fr_PE\",\"fr_PF\",\"fr_PG\",\"fr_PM\",\"fr_PN\",\"fr_PW\",\"fr_QA\",\"fr_RE\",\"fr_RS\",\"fr_RW\",\"fr_SA\",\"fr_SB\",\"fr_SC\",\"fr_SH\",\"fr_SJ\",\"fr_SL\",\"fr_SM\",\"fr_SN\",\"fr_SO\",\"fr_SR\",\"fr_ST\",\"fr_SV\",\"fr_SZ\",\"fr_TC\",\"fr_TD\",\"fr_TG\",\"fr_TJ\",\"fr_TM\",\"fr_TN\",\"fr_TT\",\"fr_TV\",\"fr_UA\",\"fr_UG\",\"fr_US\",\"fr_UY\",\"fr_VA\",\"fr_VC\",\"fr_VE\",\"fr_VG\",\"fr_VU\",\"fr_WF\",\"fr_YE\",\"fr_YT\",\"fr_ZA\",\"fr_ZM\",\"he_IL\",\"hu_HU\",\"id_ID\",\"it_IT\",\"ja_JP\",\"ko_KR\",\"lv_LV\",\"lt_LT\",\"ms_BN\",\"ms_MY\",\"nl_BE\",\"nl_NL\",\"pl_PL\",\"pt_BR\",\"pt_PT\",\"ro_RO\",\"ru_EE\",\"ru_LT\",\"ru_LV\",\"ru_RU\",\"ru_UA\",\"si_LK\",\"sk_SK\",\"sl_SI\",\"sq_AL\",\"sv_SE\",\"tl_PH\",\"th_TH\",\"tr_TR\",\"vi_VN\",\"zh_C2\",\"zh_CN\",\"zh_HK\",\"zh_TW\",\"zh_AD\",\"zh_AE\",\"zh_AI\",\"zh_AO\",\"zh_AW\",\"zh_BB\",\"zh_BH\",\"zh_BJ\",\"zh_BM\",\"zh_BS\",\"zh_BZ\",\"zh_CD\",\"zh_CG\",\"zh_CK\",\"zh_CL\",\"zh_CO\",\"zh_CV\",\"zh_DJ\",\"zh_DM\",\"zh_DO\",\"zh_DZ\",\"zh_EC\",\"zh_EG\",\"zh_ER\",\"zh_ET\",\"zh_FJ\",\"zh_FK\",\"zh_FO\",\"zh_GA\",\"zh_GD\",\"zh_GE\",\"zh_GI\",\"zh_GL\",\"zh_GM\",\"zh_GN\",\"zh_GT\",\"zh_GW\",\"zh_GY\",\"zh_HN\",\"zh_IE\",\"zh_JM\",\"zh_JO\",\"zh_KE\",\"zh_KG\",\"zh_KI\",\"zh_KM\",\"zh_KN\",\"zh_KW\",\"zh_KY\",\"zh_KZ\",\"zh_LC\",\"zh_LI\",\"zh_LS\",\"zh_LT\",\"zh_LU\",\"zh_MA\",\"zh_MG\",\"zh_MH\",\"zh_ML\",\"zh_MR\",\"zh_MS\",\"zh_MU\",\"zh_MW\",\"zh_MZ\",\"zh_NA\",\"zh_NC\",\"zh_NE\",\"zh_NF\",\"zh_NI\",\"zh_NR\",\"zh_NU\",\"zh_NZ\",\"zh_OM\",\"zh_PA\",\"zh_PE\",\"zh_PF\",\"zh_PG\",\"zh_PM\",\"zh_PN\",\"zh_PW\",\"zh_QA\",\"zh_RS\",\"zh_RW\",\"zh_SA\",\"zh_SB\",\"zh_SC\",\"zh_SH\",\"zh_SJ\",\"zh_SL\",\"zh_SM\",\"zh_SN\",\"zh_SO\",\"zh_SR\",\"zh_ST\",\"zh_SV\",\"zh_SZ\",\"zh_TC\",\"zh_TD\",\"zh_TG\",\"zh_TJ\",\"zh_TM\",\"zh_TN\",\"zh_TT\",\"zh_TV\",\"zh_UA\",\"zh_UG\",\"zh_US\",\"zh_UY\",\"zh_VA\",\"zh_VC\",\"zh_VE\",\"zh_VG\",\"zh_VU\",\"zh_WF\",\"zh_YE\",\"zh_ZA\",\"zh_ZM\"];function pt(e){if(!e)return;let t;if(e.includes(\"-\")){const[n,r]=e.split(\"-\");t=`${n}_${r.toUpperCase()}`}else t=`${e}_${e.toUpperCase()}`;return ft.includes(t)?t:void 0}var yt=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class gt{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n,r){return yt(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const i=this.getPayPalFastlaneSdkConfiguration(e,t,n,r);if(yield this.loadPayPalSdk(i),!this.window.paypalFastlaneSdk)throw new a}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,r,i){return yt(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||i){const i=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,r);yield this.loadPayPalSdk(i)}if(!this.window.paypalGooglePay)throw new a;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return yt(this,void 0,void 0,function*(){if(!this.window.paypalApms){const r=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(r),!this.window.paypalApms)throw new a}return this.window.paypalApms})}getPayPalMessages(e,t,n){return yt(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const r=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(r)}if(!this.window.paypalMessages)throw new a;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return yt(this,void 0,void 0,function*(){const n=this.transformConfig(e),r=this.transformConfig(t),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:r})})}getPayPalFastlaneSdkConfiguration(e,t,n,r){const{clientToken:i,initializationData:o}=e;if(!o||!o.clientId)throw new d(s.MissingPaymentMethod);const{intent:a,clientId:u,merchantId:c,attributionId:l}=o,h=pt(r);return{options:Object.assign({\"client-id\":u,\"merchant-id\":c,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t,intent:a},h&&{locale:h}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":l,\"data-sdk-client-token\":i}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,r=!0){const{clientToken:i,initializationData:o}=e;if(!o||!o.clientId)throw new d(s.MissingPaymentMethod);const{intent:a,clientId:u,merchantId:c,buyerCountry:l,attributionId:h,isHostedCheckoutEnabled:f,isDeveloperModeApplicable:p}=o,y=f||r,g=pt(n);return{options:Object.assign(Object.assign({\"client-id\":u,\"merchant-id\":c,commit:y,components:[\"googlepay\"],currency:t,intent:a},p&&{\"buyer-country\":l}),g&&{locale:g}),attributes:{\"data-partner-attribution-id\":h,\"data-client-token\":i,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:r}=e;if(!r||!r.clientId)throw new d(s.MissingPaymentMethod);const{intent:i,clientId:o,merchantId:a,buyerCountry:u,attributionId:c,isDeveloperModeApplicable:l,availableAlternativePaymentMethods:h=[],enabledAlternativePaymentMethods:f=[]}=r,p=f,y=h.filter(e=>!f.includes(e)),g=pt(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":a,\"enable-funding\":p.length>0?p:void 0,\"disable-funding\":y.length>0?y:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:i},l&&{\"buyer-country\":u}),g&&{locale:g}),attributes:{\"data-partner-attribution-id\":c,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:r}=e;if(!r||!r.clientId)throw new d(s.MissingPaymentMethod);const{clientId:i,merchantId:o,attributionId:a,isDeveloperModeApplicable:u,buyerCountry:c}=r,l=pt(n);return{options:Object.assign(Object.assign({\"client-id\":i,\"merchant-id\":o,components:[\"messages\"],currency:t},u&&{\"buyer-country\":c}),l&&{locale:l}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":a}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const r=e[n];null==r||\"\"===r||Array.isArray(r)&&0===r.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(r)?r.join(\",\"):r}))}),t}}function _t(e){if(!function(e){return!!e.initializationData&&\"attributionId\"in e.initializationData&&\"isVenmoEnabled\"in e.initializationData&&\"isGooglePayEnabled\"in e.initializationData&&\"isPayPalCreditAvailable\"in e.initializationData}(e))throw new d(s.MissingPaymentMethod)}var vt=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class mt extends x{constructor(e,t){super(\"paypalsb\",e),this.payPalCommerceSdk=t,this.service=e}initialize(e,t,n){const r=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});var i,o,a,u,c;return vt(this,void 0,void 0,function*(){const l=this.service.getState(),h=null!==(o=null===(i=l.getStoreConfig())||void 0===i?void 0:i.currency.code)&&void 0!==o?o:n;if(!h)throw new d(s.MissingPaymentMethod);yield r.initialize.call(this,e,t,h);const f=r.getPaymentMethod.call(this);if(!f.initializationData)throw new d(s.MissingPaymentMethod);_t(f);const p=yield this.payPalCommerceSdk.getPayPalGooglePaySdk(f,h,l.getLocale());this.googlepayConfig=yield p.Googlepay().config();const{allowedPaymentMethods:y}=this.googlepayConfig;this.setGatewayIdentifier(null===(c=null===(u=null===(a=y[0])||void 0===a?void 0:a.tokenizationSpecification)||void 0===u?void 0:u.parameters)||void 0===c?void 0:c.gateway)})}getPaymentGatewayParameters(){if(this.googlepayConfig){const{allowedPaymentMethods:e}=this.googlepayConfig,{gatewayMerchantId:t}=e[0].tokenizationSpecification.parameters;return{gateway:this.getGatewayIdentifier(),gatewayMerchantId:t}}return{gateway:this.getGatewayIdentifier()}}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return vt(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n})}}const wt=\"This API endpoint is for internal use only and may change in the future\";var Pt,bt;!function(e){e.Approved=\"APPROVED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\"}(Pt||(Pt={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(bt||(bt={}));var St=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class Ct extends ee{constructor(e,t,n,r){super(e,t),this._payPalCommerceSdk=n,this._requestSender=r}execute({payment:e}){return St(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new W([\"payment\"]);const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow().id,{initializationData:r}=t.getPaymentMethodOrThrow(this._getMethodId()),{orderId:i}=yield this.getOrderId(n),{card_information:o}=r||{},a=yield this._googlePayPaymentProcessor.getNonce(e.methodId),s={tokenizationData:{type:\"PAYMENT_GATEWAY\",token:atob(a)},info:{cardNetwork:(null==o?void 0:o.type)||\"\",cardDetails:(null==o?void 0:o.number)||\"\"},type:\"CARD\"};yield this.confirmOrder(i,s),yield this._paymentIntegrationService.submitOrder();try{const t={formattedPayload:{method_id:e.methodId,paypal_account:{order_id:i}}};yield this._paymentIntegrationService.submitPayment({methodId:e.methodId,paymentData:t})}catch(e){yield this._googlePayPaymentProcessor.processAdditionalAction(e)}})}confirmOrder(e,t){return St(this,void 0,void 0,function*(){const n=this._paymentIntegrationService.getState(),r=n.getPaymentMethodOrThrow(this._getMethodId());if(!r.initializationData)throw new d(s.MissingPaymentMethod);const i=n.getCartOrThrow().currency.code,o=yield this._payPalCommerceSdk.getPayPalGooglePaySdk(r,i,n.getLocale(),!0),{status:a}=yield o.Googlepay().confirmOrder({orderId:e,paymentMethodData:t});if(a===Pt.PayerActionRequired)return yield o.Googlepay().initiatePayerAction({orderId:e}),Promise.resolve();if(a!==Pt.Approved)throw new v(\"Payment is not approved.\");return Promise.resolve()})}getOrderId(e){return St(this,void 0,void 0,function*(){const t={cartId:e,shouldSaveInstrument:!1},{body:n}=yield this._requestSender.post(\"/api/storefront/payments/googlepaypaypalcommercecheckout\",{headers:Object.assign({\"X-API-INTERNAL\":wt,\"Content-Type\":de.Json},L),body:t});return n})}}const It=c(n=>{const r=new gt((0,i.vQ)());return new Ct(n,new q(ne(),new mt(n,r),(0,t.createRequestSender)(),(0,e.createFormPoster)()),r,(0,t.createRequestSender)())},[{id:\"googlepaypaypalcommerce\"}]);var Ot=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class At{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n){return Ot(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsFastlaneSdk){const r=this.getPayPalFastlaneSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(r),!this.window.bigCommercePaymentsFastlaneSdk)throw new a}return this.window.bigCommercePaymentsFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,r){return Ot(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsGooglePay||r){const r=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n);yield this.loadPayPalSdk(r)}if(!this.window.bigCommercePaymentsGooglePay)throw new a;return this.window.bigCommercePaymentsGooglePay})}getPayPalApmsSdk(e,t){return Ot(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsApms){const n=this.getPayPalApmSdkConfiguration(e,t);if(yield this.loadPayPalSdk(n),!this.window.bigCommercePaymentsApms)throw new a}return this.window.bigCommercePaymentsApms})}getPayPalMessages(e,t){return Ot(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsMessages){const n=this.getPayPalSdkMessagesConfiguration(e,t);yield this.loadPayPalSdk(n)}if(!this.window.bigCommercePaymentsMessages)throw new a;return this.window.bigCommercePaymentsMessages})}loadPayPalSdk({options:e,attributes:t}){return Ot(this,void 0,void 0,function*(){const n=this.transformConfig(e),r=this.transformConfig(t),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:r})})}getPayPalFastlaneSdkConfiguration(e,t,n){const{clientToken:r,initializationData:i}=e;if(!i||!i.clientId)throw new d(s.MissingPaymentMethod);const{intent:o,clientId:a,merchantId:u,attributionId:c}=i;return{options:{\"client-id\":a,\"merchant-id\":u,commit:!0,components:[\"fastlane\",\"three-domain-secure\"],currency:t,intent:o},attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"bigCommercePaymentsFastlaneSdk\",\"data-partner-attribution-id\":c,\"data-sdk-client-token\":r}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n=!0){const{clientToken:r,initializationData:i}=e;if(!i||!i.clientId)throw new d(s.MissingPaymentMethod);const{intent:o,clientId:a,merchantId:u,buyerCountry:c,attributionId:l,isHostedCheckoutEnabled:h,isDeveloperModeApplicable:f}=i,p=h||n;return{options:Object.assign({\"client-id\":a,\"merchant-id\":u,commit:p,components:[\"googlepay\"],currency:t,intent:o},f&&{\"buyer-country\":c}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":r,\"data-namespace\":\"bigCommercePaymentsGooglePay\"}}}getPayPalApmSdkConfiguration(e,t){const{initializationData:n}=e;if(!n||!n.clientId)throw new d(s.MissingPaymentMethod);const{intent:r,clientId:i,merchantId:o,buyerCountry:a,attributionId:u,isDeveloperModeApplicable:c,availableAlternativePaymentMethods:l=[],enabledAlternativePaymentMethods:h=[]}=n,f=this.filterFundingOptions(h),p=this.filterFundingOptions(l.filter(e=>!h.includes(e)));return{options:Object.assign({\"client-id\":i,\"merchant-id\":o,\"enable-funding\":f.length>0?f:void 0,\"disable-funding\":p.length>0?p:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:r},c&&{\"buyer-country\":a}),attributes:{\"data-partner-attribution-id\":u,\"data-namespace\":\"bigCommercePaymentsApms\"}}}getPayPalSdkMessagesConfiguration(e,t){const{initializationData:n}=e;if(!n||!n.clientId)throw new d(s.MissingPaymentMethod);const{clientId:r,merchantId:i,attributionId:o,isDeveloperModeApplicable:a,buyerCountry:u}=n;return{options:Object.assign({\"client-id\":r,\"merchant-id\":i,components:[\"messages\"],currency:t},a&&{\"buyer-country\":u}),attributes:{\"data-namespace\":\"bigCommercePaymentsMessages\",\"data-partner-attribution-id\":o}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const r=e[n];null==r||\"\"===r||Array.isArray(r)&&0===r.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(r)?r.join(\",\"):r}))}),t}}var Tt,kt,Et=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class Mt extends x{constructor(e,t){super(\"googlepay_bigcommerce_payments\",e),this.payPalSdkHelper=t,this.service=e}initialize(e,t,n){const r=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});var i,o,a,u,c;return Et(this,void 0,void 0,function*(){const l=null!==(o=null===(i=this.service.getState().getStoreConfig())||void 0===i?void 0:i.currency.code)&&void 0!==o?o:n;if(!l)throw new d(s.MissingPaymentMethod);yield r.initialize.call(this,e,t,l);const h=r.getPaymentMethod.call(this);if(!h.initializationData)throw new d(s.MissingPaymentMethod);_t(h);const f=yield this.payPalSdkHelper.getPayPalGooglePaySdk(h,l);this.googlepayConfig=yield f.Googlepay().config();const{allowedPaymentMethods:p}=this.googlepayConfig;this.setGatewayIdentifier(null===(c=null===(u=null===(a=p[0])||void 0===a?void 0:a.tokenizationSpecification)||void 0===u?void 0:u.parameters)||void 0===c?void 0:c.gateway)})}getPaymentGatewayParameters(){if(this.googlepayConfig){const{allowedPaymentMethods:e}=this.googlepayConfig,{gatewayMerchantId:t}=e[0].tokenizationSpecification.parameters;return{gateway:this.getGatewayIdentifier(),gatewayMerchantId:t}}return{gateway:this.getGatewayIdentifier()}}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return Et(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n})}}!function(e){e.Approved=\"APPROVED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\"}(Tt||(Tt={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(kt||(kt={}));var Rt=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class Nt extends ee{constructor(e,t,n,r){super(e,t),this._payPalSdkHelper=n,this._requestSender=r}execute({payment:e}){return Rt(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new W([\"payment\"]);const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow().id,{initializationData:r}=t.getPaymentMethodOrThrow(this._getMethodId()),{orderId:i}=yield this.getOrderId(n),{card_information:o}=r||{},a=yield this._googlePayPaymentProcessor.getNonce(e.methodId),s={tokenizationData:{type:\"PAYMENT_GATEWAY\",token:atob(a)},info:{cardNetwork:(null==o?void 0:o.type)||\"\",cardDetails:(null==o?void 0:o.number)||\"\"},type:\"CARD\"};yield this.confirmOrder(i,s),yield this._paymentIntegrationService.submitOrder();try{const t={formattedPayload:{method_id:e.methodId,paypal_account:{order_id:i}}};yield this._paymentIntegrationService.submitPayment({methodId:e.methodId,paymentData:t})}catch(e){yield this._googlePayPaymentProcessor.processAdditionalAction(e)}})}confirmOrder(e,t){return Rt(this,void 0,void 0,function*(){const n=this._paymentIntegrationService.getState(),r=n.getPaymentMethodOrThrow(this._getMethodId());if(!r.initializationData)throw new d(s.MissingPaymentMethod);const i=n.getCartOrThrow().currency.code,o=yield this._payPalSdkHelper.getPayPalGooglePaySdk(r,i,!0),{status:a}=yield o.Googlepay().confirmOrder({orderId:e,paymentMethodData:t});if(a===Tt.PayerActionRequired)return yield o.Googlepay().initiatePayerAction({orderId:e}),Promise.resolve();if(a!==Tt.Approved)throw new v(\"Payment is not approved.\");return Promise.resolve()})}getOrderId(e){return Rt(this,void 0,void 0,function*(){const t={cartId:e,shouldSaveInstrument:!1},{body:n}=yield this._requestSender.post(\"/api/storefront/payments/googlepay_bigcommerce_paymentscheckout\",{headers:Object.assign({\"X-API-INTERNAL\":wt,\"Content-Type\":de.Json},L),body:t});return n})}}const zt=c(n=>{const r=new At((0,i.vQ)());return new Nt(n,new q(ne(),new Mt(n,r),(0,t.createRequestSender)(),(0,e.createFormPoster)()),r,(0,t.createRequestSender)())},[{id:\"googlepay_bigcommerce_payments\"}]);var jt=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class Dt extends x{constructor(e,t){super(\"worldlinena\",e),this.formPoster=t}extraPaymentData(){return jt(this,void 0,void 0,function*(){return Promise.resolve({browser_info:h()})})}processAdditionalAction(e){return jt(this,void 0,void 0,function*(){if(!function(e){return f(e)&&(t=e.body,(0,_.isObject)(t)&&\"object\"==typeof t&&\"errors\"in t&&\"three_ds_result\"in t&&(0,_.isArray)(t.errors)&&(0,_.some)(t.errors,{code:\"three_d_secure_required\"}));var t}(e))throw e;const{three_ds_result:t}=e.body,{acs_url:n,payer_auth_request:r,merchant_data:i}=t||{};if(!n||!r||!i)throw new W([\"formUrl\",\"threeDSSessionData\",\"creq\"]);return new Promise(e=>{this.formPoster.postForm(n,{threeDSSessionData:r,creq:i},e,\"_top\")})})}}const xt=c(n=>new ee(n,new q(ne(),new Dt(n,(0,e.createFormPoster)()),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaytdonlinemart\"}]);class Gt extends o{constructor(e){super(e||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var Bt=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class Lt{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t}initialize(e){var t,n;return Bt(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId)||!Q(e.methodId))throw new v('Unable to proceed because \"methodId\" is not a valid key.');this._methodId=e.methodId;const r=e[this._getMethodId()];if(!r)throw new v(\"Unable to proceed without valid options.\");let i,o=this._paymentIntegrationService.getState();try{i=o.getPaymentMethodOrThrow(this._getMethodId())}catch(e){o=yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodId()),i=o.getPaymentMethodOrThrow(this._getMethodId())}try{this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(t=i.initializationData)||void 0===t?void 0:t.isWebViewExperimentOn)),yield this._googlePayPaymentProcessor.initialize(()=>i,this._getGooglePayClientOptions(null===(n=i.initializationData)||void 0===n?void 0:n.storeCountry))}catch(e){return}this._addPaymentButton(r)})}signIn(){return Promise.reject(new Gt('In order to sign in via Google Pay, the shopper must click on \"Google Pay\" button.'))}signOut(){var e;return Bt(this,void 0,void 0,function*(){const t=null===(e=this._paymentIntegrationService.getState().getPaymentId())||void 0===e?void 0:e.providerId;t&&(yield this._googlePayPaymentProcessor.signOut(t))})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}deinitialize(){var e;return null===(e=this._paymentButton)||void 0===e||e.remove(),this._paymentButton=void 0,this._methodId=void 0,Promise.resolve()}_getGooglePayClientOptions(e){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:t,shippingAddress:n,shippingOptionData:r,offerData:i})=>Bt(this,void 0,void 0,function*(){const{availableTriggers:o,addressChangeTriggers:a,shippingOptionsChangeTriggers:s,offerChangeTriggers:u}=this._googlePayPaymentProcessor.getCallbackTriggers();if(!o.includes(t))return;const c=a.includes(t)?yield this._googlePayPaymentProcessor.handleShippingAddressChange(n):void 0;s.includes(t)&&(yield this._googlePayPaymentProcessor.handleShippingOptionChange(r.id));const{newOfferInfo:l,error:d}=u.includes(t)?yield this._googlePayPaymentProcessor.handleCoupons(i):{},h=d;yield this._paymentIntegrationService.loadCheckout();const f=this._googlePayPaymentProcessor.getTotalPrice(),{code:p}=this._paymentIntegrationService.getState().getCartOrThrow().currency;return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},e&&{countryCode:e}),{currencyCode:p,totalPriceStatus:E.FINAL,totalPrice:f})},c&&{newShippingOptionParameters:c}),l&&{newOfferInfo:l}),h&&{error:h})})}}}_addPaymentButton({container:e,buttonColor:t,buttonType:n,onClick:r,onError:i}){var o;this._paymentButton=null!==(o=this._paymentButton)&&void 0!==o?o:this._googlePayPaymentProcessor.addPaymentButton(e,{buttonColor:null!=t?t:\"default\",buttonType:null!=n?n:\"plain\",onClick:this._handleClick(i,r)})}_handleClick(e,t){return n=>Bt(this,void 0,void 0,function*(){n.preventDefault(),t&&\"function\"==typeof t&&t();try{yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheet()}catch(t){let n=t;if(J(t)){if(\"CANCELED\"===t.statusCode)throw new p;n=new F(JSON.stringify(t))}throw null==e||e(new F(\"An error occurred while requesting your Google Pay payment details.\")),n}})}_interactWithPaymentSheet(){return Bt(this,void 0,void 0,function*(){const e=yield this._googlePayPaymentProcessor.showPaymentSheet(),t=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(e),n=this._googlePayPaymentProcessor.mapToShippingAddressRequestBody(e),r=\"/embedded-checkout\"===window.location.pathname?this._paymentIntegrationService.getState().getStoreConfigOrThrow().links.siteLink:void 0;t&&(yield this._paymentIntegrationService.updateBillingAddress(t)),n&&(yield this._paymentIntegrationService.updateShippingAddress(n)),yield this._googlePayPaymentProcessor.setExternalCheckoutForm(this._getMethodId(),e,r)})}_getMethodId(){return S(this._methodId,()=>new g(y.PaymentNotInitialized))}}const Ft=c(n=>{const r=(0,t.createRequestSender)();return new Lt(n,new q(ne(),new x(\"adyen\",n),r,(0,e.createFormPoster)()))},[{id:\"googlepayadyenv2\"}]),Ut=c(n=>{const r=(0,t.createRequestSender)();return new Lt(n,new q(ne(),new x(\"adyen\",n),r,(0,e.createFormPoster)()))},[{id:\"googlepayadyenv3\"}]),qt=c(n=>new Lt(n,new q(ne(),new ue(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepayauthorizenet\"}]),Wt=c(n=>{const r=(0,t.createRequestSender)();return new Lt(n,new q(ne(),new pe(n,r),r,(0,e.createFormPoster)()))},[{id:\"googlepaycheckoutcom\"}]),Vt=c(n=>new Lt(n,new q(ne(),new ge(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaycybersourcev2\"}]),Ht=c(n=>new Lt(n,new q(ne(),new ge(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaybnz\"}]),Kt=c(n=>new Lt(n,new q(ne(),new ve(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepayorbital\"}]),Zt=c(n=>new Lt(n,new q(ne(),new Be(n,new Ne((0,i.vQ)())),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeocs\"}]),Yt=c(n=>new Lt(n,new q(ne(),new Be(n,new Ne((0,i.vQ)())),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaystripeupe\"}]),Jt=c(n=>new Lt(n,new q(ne(),new Fe(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepayworldpayaccess\"}]),$t=c(n=>{const r=(0,t.createRequestSender)(),o=window,a=new He(n),s=new ot(new ut((0,i.vQ)(),o,a));return new Lt(n,new q(ne(),new dt(n,s),r,(0,e.createFormPoster)()))},[{id:\"googlepaybraintree\"}]),Qt=c(n=>new Lt(n,new q(ne(),new mt(n,new gt((0,i.vQ)())),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaypaypalcommerce\"}]),Xt=c(n=>new Lt(n,new q(ne(),new Mt(n,new At((0,i.vQ)())),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepay_bigcommerce_payments\"}]),en=c(n=>new Lt(n,new q(ne(),new Dt(n,(0,e.createFormPoster)()),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaytdonlinemart\"}]);class tn extends o{constructor(e){super(e||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}var nn=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class rn{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t}initialize(e){var t,n,r;return nn(this,void 0,void 0,function*(){if(!e.methodId||!Q(e.methodId))throw new v('Unable to proceed because \"methodId\" is not a valid key.');if(this._methodId=e.methodId,!e.containerId)throw new v('Unable to proceed because \"containerId\" is not a valid key.');const i=e[this._getMethodOrThrow()];if(!i)throw new v(\"Unable to proceed without valid options.\");const{buyNowInitializeOptions:o,currencyCode:a,buttonColor:s,buttonType:u,onError:c}=i;let l,d=this._paymentIntegrationService.getState();try{l=d.getPaymentMethodOrThrow(this._getMethodOrThrow())}catch(e){d=yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodOrThrow()),l=d.getPaymentMethodOrThrow(this._getMethodOrThrow())}if(this._countryCode=null===(t=l.initializationData)||void 0===t?void 0:t.storeCountry,this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(n=l.initializationData)||void 0===n?void 0:n.isWebViewExperimentOn)),o){if(!a)throw new v('Unable to initialize payment because \"options.currencyCode\" argument is not provided.');this._currencyCode=a,this._buyNowInitializeOptions=o,yield this._googlePayPaymentProcessor.initialize(()=>l,this._getGooglePayClientOptions(),!!o,a)}else yield this._paymentIntegrationService.loadDefaultCheckout(),yield this._googlePayPaymentProcessor.initialize(()=>l,this._getGooglePayClientOptions());this._paymentButton=null!==(r=this._paymentButton)&&void 0!==r?r:this._googlePayPaymentProcessor.addPaymentButton(e.containerId,{buttonColor:null!=s?s:\"default\",buttonType:null!=u?u:\"plain\",onClick:this._handleClick(c)})})}deinitialize(){var e;return null===(e=this._paymentButton)||void 0===e||e.remove(),this._paymentButton=void 0,this._methodId=void 0,Promise.resolve()}_handleClick(e){return t=>nn(this,void 0,void 0,function*(){t.preventDefault();try{this._buyNowInitializeOptions?yield this._createBuyNowCartOrThrow(this._buyNowInitializeOptions):yield this._paymentIntegrationService.loadDefaultCheckout(),yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheet()}catch(t){let n=t;if(J(t)){if(\"CANCELED\"===t.statusCode)throw new p;n=new F(JSON.stringify(t))}throw null==e||e(new F(\"An error occurred while requesting your Google Pay payment details.\")),n}})}_interactWithPaymentSheet(){var e;return nn(this,void 0,void 0,function*(){const t=yield this._googlePayPaymentProcessor.showPaymentSheet(),n=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(t),r=this._googlePayPaymentProcessor.mapToShippingAddressRequestBody(t),i=\"/embedded-checkout\"===window.location.pathname?this._paymentIntegrationService.getState().getStoreConfigOrThrow().links.siteLink:void 0;n&&(yield this._paymentIntegrationService.updateBillingAddress(n)),r&&!(null===(e=this._buyNowCart)||void 0===e?void 0:e.lineItems.digitalItems.length)&&(yield this._paymentIntegrationService.updateShippingAddress(r)),yield this._googlePayPaymentProcessor.setExternalCheckoutForm(this._getMethodOrThrow(),t,i)})}_getGooglePayClientOptions(){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:e,shippingAddress:t,shippingOptionData:n,offerData:r})=>nn(this,void 0,void 0,function*(){const{availableTriggers:i,addressChangeTriggers:o,shippingOptionsChangeTriggers:a,offerChangeTriggers:s}=this._googlePayPaymentProcessor.getCallbackTriggers();if(!i.includes(e))return;const u=o.includes(e)?yield this._googlePayPaymentProcessor.handleShippingAddressChange(t):void 0;a.includes(e)&&(yield this._googlePayPaymentProcessor.handleShippingOptionChange(n.id));const{newOfferInfo:c,error:l}=s.includes(e)?yield this._googlePayPaymentProcessor.handleCoupons(r):{},d=l;return this._buyNowInitializeOptions?this._getBuyNowTransactionInfo(u,c,d):this._getTransactionInfo(u,c,d)})}}}_createBuyNowCartOrThrow(e){return nn(this,void 0,void 0,function*(){if(\"function\"==typeof(null==e?void 0:e.getBuyNowCartRequestBody)){const t=e.getBuyNowCartRequestBody();try{this._buyNowCart=yield this._paymentIntegrationService.createBuyNowCart(t),yield this._paymentIntegrationService.loadCheckout(this._buyNowCart.id)}catch(e){if(\"string\"==typeof e)throw new tn(e);throw e}}})}_getBuyNowTransactionInfo(e,t,n){if(!this._buyNowCart)return;const{cartAmount:r}=this._buyNowCart,i=this._googlePayPaymentProcessor.getTotalPrice();return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},this._countryCode&&{countryCode:this._countryCode}),{currencyCode:this._getCurrencyCodeOrThrow(),totalPrice:i||String(r),totalPriceStatus:E.FINAL})},e&&{newShippingOptionParameters:e}),t&&{newOfferInfo:t}),n&&{error:n})}_getTransactionInfo(e,t,n){return nn(this,void 0,void 0,function*(){yield this._paymentIntegrationService.loadCheckout();const r=this._googlePayPaymentProcessor.getTotalPrice(),{code:i}=this._paymentIntegrationService.getState().getCartOrThrow().currency;return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},this._countryCode&&{countryCode:this._countryCode}),{currencyCode:i,totalPriceStatus:E.FINAL,totalPrice:r})},e&&{newShippingOptionParameters:e}),t&&{newOfferInfo:t}),n&&{error:n})})}_getMethodOrThrow(){return S(this._methodId,()=>new g(y.PaymentNotInitialized))}_getCurrencyCodeOrThrow(){return S(this._currencyCode,()=>new v('Unable to initialize payment because \"options.currencyCode\" argument is not provided.'))}}const on=c(n=>{const r=(0,t.createRequestSender)(),o=window,a=new He(n),s=new ot(new ut((0,i.vQ)(),o,a));return new rn(n,new q(ne(),new dt(n,s),r,(0,e.createFormPoster)()))},[{id:\"googlepaybraintree\"}]),an=c(n=>new rn(n,new q(ne(),new mt(n,new gt((0,i.vQ)())),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaypaypalcommerce\"}]),sn=c(n=>new rn(n,new q(ne(),new Mt(n,new At((0,i.vQ)())),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepay_bigcommerce_payments\"}]),un=c(n=>{const r=(0,t.createRequestSender)();return new rn(n,new q(ne(),new x(\"adyen\",n),r,(0,e.createFormPoster)()))},[{id:\"googlepayadyenv2\"}]),cn=c(n=>{const r=(0,t.createRequestSender)();return new rn(n,new q(ne(),new x(\"adyen\",n),r,(0,e.createFormPoster)()))},[{id:\"googlepayadyenv3\"}]),ln=c(n=>new rn(n,new q(ne(),new ue(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepayauthorizenet\"}]),dn=c(n=>{const r=(0,t.createRequestSender)();return new rn(n,new q(ne(),new pe(n,r),r,(0,e.createFormPoster)()))},[{id:\"googlepaycheckoutcom\"}]),hn=c(n=>new rn(n,new q(ne(),new ge(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaycybersourcev2\"},{id:\"googlepaybnz\"}]),fn=c(n=>new rn(n,new q(ne(),new ve(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepayorbital\"}]),pn=c(n=>new rn(n,new q(ne(),new Be(n,new Ne((0,i.vQ)())),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeupe\"},{id:\"googlepaystripeocs\"}]),yn=c(n=>new rn(n,new q(ne(),new Fe(n),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepayworldpayaccess\"}]),gn=c(n=>new rn(n,new q(ne(),new Dt(n,(0,e.createFormPoster)()),(0,t.createRequestSender)(),(0,e.createFormPoster)())),[{id:\"googlepaytdonlinemart\"}])})(),module.exports=r})();\n//# sourceMappingURL=google-pay.js.map"
  },
  {
    "path": "dist/cjs/integrations/humm.js",
    "content": "(()=>{\"use strict\";var e={9165(e,t,r){Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){var t=new o.default;return new n.default(t,e)};var o=r(9828),n=r(5470)},9828(e,t){Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(){function e(){}return e.prototype.build=function(e,t,r){var o=this,n=document.createElement(\"form\");return n.style.display=\"none\",n.setAttribute(\"action\",e),n.setAttribute(\"method\",\"POST\"),n.setAttribute(\"target\",r||\"_top\"),Object.keys(t).forEach(function(e){var r=t[e];n.appendChild(o._createInput(r,e))}),n},e.prototype._createInput=function(e,t){var r=document.createElement(\"input\");return r.setAttribute(\"name\",t),r.setAttribute(\"type\",\"hidden\"),r.setAttribute(\"value\",e),r},e}();t.default=r},5470(e,t,r){Object.defineProperty(t,\"__esModule\",{value:!0});var o=r(9783),n=function(){function e(e,t){this._formBuilder=e,this._options=t}return e.prototype.postForm=function(e,t,r,o){var n=this._formBuilder.build(this._prependHost(e),t,o);window.addEventListener(\"unload\",function e(){window.removeEventListener(\"unload\",e),r&&r()}),document.body.appendChild(n),n.submit()},e.prototype._prependHost=function(e){return this._options&&this._options.host&&!(0,o.isAbsoluteUrl)(e)?(0,o.joinPaths)(this._options.host,e):e},e}();t.default=n},8686(e,t,r){t.createFormPoster=void 0;var o=r(9165);Object.defineProperty(t,\"createFormPoster\",{enumerable:!0,get:function(){return o.default}});r(5470)},9783(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.isAbsoluteUrl=function(e){return/^https?:\\/\\//.test(e)},t.joinPaths=function(e,t){return\"\".concat((r=e,r.replace(/\\/$/,\"\")),\"/\").concat(function(e){return e.replace(/^\\//,\"\")}(t));var r}}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var i=t[o]={exports:{}};return e[o](i,i.exports,r),i.exports}r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var o={};r.r(o),r.d(o,{createHummPaymentStrategy:()=>l});var n=r(8686);class i extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class a extends i{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class s extends a{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class d extends i{constructor(e,t,r){super(r||\"Payment cannot be processed for this order, please select another payment method\"),this.type=\"custom_provider_execute_error\",this.name=t,this.subtype=e}}class u extends i{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class c{constructor(e,t){this.paymentIntegrationService=e,this.formPoster=t}execute(e,t){var r,o,n,i,a;return o=this,n=void 0,a=function*(){const{payment:o}=e,n=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(r[o[n]]=e[o[n]])}return r}(e,[\"payment\"]);if(!(null==o?void 0:o.methodId))throw new s([\"payment.methodId\"]);yield this.paymentIntegrationService.loadPaymentMethod(o.methodId,t);const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(o.methodId);if(!(null===(r=i.initializationData)||void 0===r?void 0:r.processable))throw new d(\"payment.humm_not_processable_error\",\"hummNotProcessableError\");yield this.paymentIntegrationService.submitOrder(n,t);try{yield this.paymentIntegrationService.submitPayment({methodId:o.methodId})}catch(e){return this.isOffsiteRedirectResponse(e)?this.handleOffsiteRedirectResponse(e):Promise.reject(e)}},new((i=void 0)||(i=Promise))(function(e,t){function r(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i(function(e){e(o)})).then(r,s)}d((a=a.apply(o,n||[])).next())})}finalize(){return Promise.reject(new u)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}handleOffsiteRedirectResponse(e){const t=e.body.additional_action_required.data.redirect_url,r=e.body.provider_data;return new Promise(e=>{this.formPoster.postForm(t,JSON.parse(r),e)})}isOffsiteRedirectResponse(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;if(!t.body)return!1;const r=t.body;return\"additional_action_required\"===r.status&&!!r.additional_action_required&&\"offsite_redirect\"===r.additional_action_required.type&&\"string\"==typeof r.provider_data}}const l=Object.assign(e=>new c(e,(0,n.createFormPoster)()),{resolveIds:[{id:\"humm\"}]});module.exports=o})();\n//# sourceMappingURL=humm.js.map"
  },
  {
    "path": "dist/cjs/integrations/klarna.js",
    "content": "(()=>{var t={4325(t,n,e){\"use strict\";e.d(n,{g:()=>i});var r=e(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,n){var e=this.getKey(t,n.params);return this._cache[e]||null},t.prototype.write=function(t,n,e){var r=this.getKey(t,n.params);this._cache[r]=e},t.prototype.getKey=function(t,n){return void 0===n&&(n={}),0===Object.keys(n).length?t:\"\".concat(t,\"?\").concat(r.stringify(n))},t}()},321(t,n,e){\"use strict\";e.d(n,{A:()=>a});var r=e(168),i=e(1675),o=e(5861),u=e(4670);function a(t){return new u.A(new o.A,new i.A,r,t)}},6889(t,n,e){\"use strict\";e.d(n,{A:()=>i});var r=e(2024);function i(t){return new r.A(t)}},4043(t,n,e){\"use strict\";e.r(n),e.d(n,{RequestSender:()=>o.A,Timeout:()=>u.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=e(321),i=e(6889),o=e(4670),u=e(2024)},4843(t,n,e){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}e.d(n,{A:()=>r})},1675(t,n,e){\"use strict\";e.d(n,{A:()=>a});var r=e(1635),i=e(710),o=/application\\/(\\w+\\+)?json/,u=/application\\/x-www-form-urlencoded/;const a=function(){function t(){}return t.prototype.toRequestBody=function(t){var n=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(n))return JSON.stringify(t.body);if(u.test(n))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var n=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,n),headers:n,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,n){var e=this._getHeader(n,\"Content-Type\");return t&&o.test(e)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,n){var e,i=n.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((e={})[o.toLowerCase()]=i.join(\":\").trim(),e)):t},{})},t.prototype._getHeader=function(t,n){return t&&n&&(t[n]||t[n.toLowerCase()])||\"\"},t}()},5861(t,n,e){\"use strict\";e.d(n,{A:()=>i});var r=e(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,n){var e=new XMLHttpRequest;return this._configureRequest(e,t,n),e},t.prototype._configureRequest=function(t,n,e){void 0===e&&(e={}),t.open(e.method||\"GET\",this._formatUrl(n,e.params,e.encodeParams),!0),e.headers&&this._configureRequestHeaders(t,e.headers),\"boolean\"==typeof e.credentials&&(t.withCredentials=e.credentials),\"number\"==typeof e.timeout&&(t.timeout=e.timeout)},t.prototype._configureRequestHeaders=function(t,n){Object.keys(n).filter(function(t){return null!==n[t]}).forEach(function(e){t.setRequestHeader(e,n[e])})},t.prototype._formatUrl=function(t,n,e){return void 0===e&&(e=!0),n&&0!==Object.keys(n).length?\"\".concat(t,\"?\").concat(r.stringify(n,{encode:e})):t},t}()},4670(t,n,e){\"use strict\";e.d(n,{A:()=>s});var r=e(1635),i=e(35),o=e.n(i),u=e(4325),a=e(4843),c=e(2024);const s=function(){function t(t,n,e,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=n,this._cookie=e,this._options=r,this._cache=this._options.cache||new u.g}return t.prototype.sendRequest=function(t,n){var e=this,r=this._mergeDefaultOptions(t,n),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(n,i){var u=function(){var u=e._payloadTransformer.toResponse(o);u.status>=200&&u.status<300?(e._cacheRequest(t,r,u),n(u)):i(u)};o.onload=u,o.onerror=u,o.onabort=u,o.ontimeout=u,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,a.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(e._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"GET\"}))},t.prototype.post=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"POST\"}))},t.prototype.put=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"PUT\"}))},t.prototype.patch=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"PATCH\"}))},t.prototype.delete=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,n){var e={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&e.headers&&!this._isAssetRequest(t,n)&&this._isLocalRequest(t)&&(e.headers[\"X-XSRF-TOKEN\"]=r),n&&n.body&&e.headers&&(e.headers[\"Content-Type\"]=\"application/json\"),o()({},e,n)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,n){return this._shouldCacheRequest(n)?this._cache.read(t,n):null},t.prototype._cacheRequest=function(t,n,e){this._shouldCacheRequest(n)&&this._cache.write(t,n,e)},t.prototype._isAssetRequest=function(t,n){return(!n||!n.method||\"GET\"===n.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,n,e){\"use strict\";e.d(n,{A:()=>r});const r=function(){function t(t){var n=this;this._delay=t,this._promise=new Promise(function(t){n._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,n,e){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(n){return void 0!==t[n]}).map(function(n){var e=t[n];return\"string\"==typeof e?\"\".concat(n,\"=\").concat(encodeURIComponent(e)):\"\".concat(n,\"=\").concat(encodeURIComponent(JSON.stringify(e)||\"\"))}).join(\"&\")}e.d(n,{A:()=>r})},5889(t,n,e){\"use strict\";const r=e(803),i=e(1915),o=e(1657),u=e(3814);function a(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,n){return n.encode?n.strict?r(t):encodeURIComponent(t):t}function s(t,n){return n.decode?i(t):t}function f(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?f(Object.keys(t)).sort((t,n)=>Number(t)-Number(n)).map(n=>t[n]):t}function l(t){const n=t.indexOf(\"#\");return-1!==n&&(t=t.slice(0,n)),t}function p(t){const n=(t=l(t)).indexOf(\"?\");return-1===n?\"\":t.slice(n+1)}function h(t,n){return n.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!n.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function d(t,n){a((n=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},n)).arrayFormatSeparator);const e=function(t){let n;switch(t.arrayFormat){case\"index\":return(t,e,r)=>{n=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),n?(void 0===r[t]&&(r[t]={}),r[t][n[1]]=e):r[t]=e};case\"bracket\":return(t,e,r)=>{n=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),n?void 0!==r[t]?r[t]=[].concat(r[t],e):r[t]=[e]:r[t]=e};case\"comma\":case\"separator\":return(n,e,r)=>{const i=\"string\"==typeof e&&e.includes(t.arrayFormatSeparator),o=\"string\"==typeof e&&!i&&s(e,t).includes(t.arrayFormatSeparator);e=o?s(e,t):e;const u=i||o?e.split(t.arrayFormatSeparator).map(n=>s(n,t)):null===e?e:s(e,t);r[n]=u};default:return(t,n,e)=>{void 0!==e[t]?e[t]=[].concat(e[t],n):e[t]=n}}}(n),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,u]=o(n.decode?i.replace(/\\+/g,\" \"):i,\"=\");u=void 0===u?null:[\"comma\",\"separator\"].includes(n.arrayFormat)?u:s(u,n),e(s(t,n),u,r)}for(const t of Object.keys(r)){const e=r[t];if(\"object\"==typeof e&&null!==e)for(const t of Object.keys(e))e[t]=h(e[t],n);else r[t]=h(e,n)}return!1===n.sort?r:(!0===n.sort?Object.keys(r).sort():Object.keys(r).sort(n.sort)).reduce((t,n)=>{const e=r[n];return Boolean(e)&&\"object\"==typeof e&&!Array.isArray(e)?t[n]=f(e):t[n]=e,t},Object.create(null))}n.extract=p,n.parse=d,n.stringify=(t,n)=>{if(!t)return\"\";a((n=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},n)).arrayFormatSeparator);const e=e=>n.skipNull&&null==t[e]||n.skipEmptyString&&\"\"===t[e],r=function(t){switch(t.arrayFormat){case\"index\":return n=>(e,r)=>{const i=e.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,[c(n,t),\"[\",i,\"]\"].join(\"\")]:[...e,[c(n,t),\"[\",c(i,t),\"]=\",c(r,t)].join(\"\")]};case\"bracket\":return n=>(e,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,[c(n,t),\"[]\"].join(\"\")]:[...e,[c(n,t),\"[]=\",c(r,t)].join(\"\")];case\"comma\":case\"separator\":return n=>(e,r)=>null==r||0===r.length?e:0===e.length?[[c(n,t),\"=\",c(r,t)].join(\"\")]:[[e,c(r,t)].join(t.arrayFormatSeparator)];default:return n=>(e,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,c(n,t)]:[...e,[c(n,t),\"=\",c(r,t)].join(\"\")]}}(n),i={};for(const n of Object.keys(t))e(n)||(i[n]=t[n]);const o=Object.keys(i);return!1!==n.sort&&o.sort(n.sort),o.map(e=>{const i=t[e];return void 0===i?\"\":null===i?c(e,n):Array.isArray(i)?i.reduce(r(e),[]).join(\"&\"):c(e,n)+\"=\"+c(i,n)}).filter(t=>t.length>0).join(\"&\")},n.parseUrl=(t,n)=>{n=Object.assign({decode:!0},n);const[e,r]=o(t,\"#\");return Object.assign({url:e.split(\"?\")[0]||\"\",query:d(p(t),n)},n&&n.parseFragmentIdentifier&&r?{fragmentIdentifier:s(r,n)}:{})},n.stringifyUrl=(t,e)=>{e=Object.assign({encode:!0,strict:!0},e);const r=l(t.url).split(\"?\")[0]||\"\",i=n.extract(t.url),o=n.parse(i,{sort:!1}),u=Object.assign(o,t.query);let a=n.stringify(u,e);a&&(a=`?${a}`);let s=function(t){let n=\"\";const e=t.indexOf(\"#\");return-1!==e&&(n=t.slice(e)),n}(t.url);return t.fragmentIdentifier&&(s=`#${c(t.fragmentIdentifier,e)}`),`${r}${a}${s}`},n.pick=(t,e,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:a}=n.parseUrl(t,r);return n.stringifyUrl({url:i,query:u(o,e),fragmentIdentifier:a},r)},n.exclude=(t,e,r)=>{const i=Array.isArray(e)?t=>!e.includes(t):(t,n)=>!e(t,n);return n.pick(t,i,r)}},5477(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(){}return t.prototype.canSupportRel=function(t){var n=document.createElement(\"link\");return!!(n.relList&&n.relList.supports&&n.relList.supports(t))},t}();n.default=e},471(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=e(4043),i=e(5477),o=e(4886)},9722(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=e(4043),i=e(5477),o=e(7995)},5895(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return r||(r=(0,i.default)()),r};var r,i=e(471)},282(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return r||(r=(0,i.default)()),r};var r,i=e(9722)},315(t,n,e){\"use strict\";n.vQ=void 0;e(4886),e(471);var r=e(5895);Object.defineProperty(n,\"vQ\",{enumerable:!0,get:function(){return r.default}});e(7995),e(9722),e(282)},4886(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(t,n){this._browserSupport=t,this._requestSender=n,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,n){var e=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),u=n||{},a=u.async,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(n){delete e._scripts[t],i(n)},o.async=c,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.loadScript(t,n)})).then(function(){})},t.prototype.preloadScript=function(t,n){var e=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(n||{}).prefetch,u=void 0!==o&&o?\"prefetch\":\"preload\";if(e._browserSupport.canSupportRel(u)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=u,a.href=t,a.onload=function(){r()},a.onerror=function(){delete e._preloadedScripts[t],i()},document.head.appendChild(a)}else e._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.preloadScript(t,n)})).then(function(){})},t}();n.default=e},7995(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(t,n){this._browserSupport=t,this._requestSender=n,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,n){var e=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),u=n||{},a=u.prepend,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onerror=function(n){delete e._stylesheets[t],i(n)},o.rel=\"stylesheet\",o.href=t,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.loadStylesheet(t,n)})).then(function(){})},t.prototype.preloadStylesheet=function(t,n){var e=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(n||{}).prefetch,u=void 0!==o&&o,a=u?\"prefetch\":\"preload\";if(e._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=u?\"prefetch\":\"preload\",c.href=t,c.onload=function(){r()},c.onerror=function(n){delete e._preloadedStylesheets[t],i(n)},document.head.appendChild(c)}else e._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.preloadStylesheet(t,n)})).then(function(){})},t}();n.default=e},1915(t){\"use strict\";var n=\"%[a-f0-9]{2}\",e=new RegExp(\"(\"+n+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+n+\")+\",\"gi\");function i(t,n){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;n=n||1;var e=t.slice(0,n),r=t.slice(n);return Array.prototype.concat.call([],i(e),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var n=t.match(e)||[],r=1;r<n.length;r++)n=(t=i(n,r).join(\"\")).match(e)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(n){return function(t){for(var n={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},e=r.exec(t);e;){try{n[e[0]]=decodeURIComponent(e[0])}catch(t){var i=o(e[0]);i!==e[0]&&(n[e[0]]=i)}e=r.exec(t)}n[\"%C2\"]=\"�\";for(var u=Object.keys(n),a=0;a<u.length;a++){var c=u[a];t=t.replace(new RegExp(c,\"g\"),n[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,n){for(var e={},r=Object.keys(t),i=Array.isArray(n),o=0;o<r.length;o++){var u=r[o],a=t[u];(i?-1!==n.indexOf(u):n(u,a,t))&&(e[u]=a)}return e}},168(t){var n;n=function(){function t(){for(var t=0,n={};t<arguments.length;t++){var e=arguments[t];for(var r in e)n[r]=e[r]}return n}function n(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function e(r){function i(){}function o(n,e,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var u=JSON.stringify(e);/^[\\{\\[]/.test(u)&&(e=u)}catch(t){}e=r.write?r.write(e,n):encodeURIComponent(String(e)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),n=encodeURIComponent(String(n)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in o)o[c]&&(a+=\"; \"+c,!0!==o[c]&&(a+=\"=\"+o[c].split(\";\")[0]));return document.cookie=n+\"=\"+e+a}}function u(t,e){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],u=0;u<o.length;u++){var a=o[u].split(\"=\"),c=a.slice(1).join(\"=\");e||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var s=n(a[0]);if(c=(r.read||r)(c,s)||n(c),e)try{c=JSON.parse(c)}catch(t){}if(i[s]=c,t===s)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return u(t,!1)},i.getJSON=function(t){return u(t,!0)},i.remove=function(n,e){o(n,\"\",t(e,{expires:-1}))},i.defaults={},i.withConverter=e,i}(function(){})},\"function\"==typeof define&&define.amd&&define(n),t.exports=n()},35(t,n,e){t=e.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",u=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,s=/^(?:0|[1-9]\\d*)$/,f={};f[\"[object Float32Array]\"]=f[\"[object Float64Array]\"]=f[\"[object Int8Array]\"]=f[\"[object Int16Array]\"]=f[\"[object Int32Array]\"]=f[\"[object Uint8Array]\"]=f[\"[object Uint8ClampedArray]\"]=f[\"[object Uint16Array]\"]=f[\"[object Uint32Array]\"]=!0,f[o]=f[\"[object Array]\"]=f[\"[object ArrayBuffer]\"]=f[\"[object Boolean]\"]=f[\"[object DataView]\"]=f[\"[object Date]\"]=f[\"[object Error]\"]=f[u]=f[\"[object Map]\"]=f[\"[object Number]\"]=f[a]=f[\"[object RegExp]\"]=f[\"[object Set]\"]=f[\"[object String]\"]=f[\"[object WeakMap]\"]=!1;var l,p,h,d=\"object\"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,v=\"object\"==typeof self&&self&&self.Object===Object&&self,y=d||v||Function(\"return this\")(),_=n&&!n.nodeType&&n,g=_&&t&&!t.nodeType&&t,m=g&&g.exports===_,b=m&&d.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),j=w&&w.isTypedArray,S=Array.prototype,O=Function.prototype,k=Object.prototype,x=y[\"__core-js_shared__\"],A=O.toString,I=k.hasOwnProperty,C=(l=/[^.]+$/.exec(x&&x.keys&&x.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",P=k.toString,R=A.call(Object),z=RegExp(\"^\"+A.call(I).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),E=m?y.Buffer:void 0,T=y.Symbol,M=y.Uint8Array,U=(E&&E.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(t){return p(h(t))}),N=Object.create,q=k.propertyIsEnumerable,B=S.splice,L=T?T.toStringTag:void 0,F=function(){try{var t=at(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),W=E?E.isBuffer:void 0,D=Math.max,$=Date.now,K=at(y,\"Map\"),H=at(Object,\"create\"),G=function(){function t(){}return function(n){if(!mt(n))return{};if(N)return N(n);t.prototype=n;var e=new t;return t.prototype=void 0,e}}();function J(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Z(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function V(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function X(t){var n=this.__data__=new Z(t);this.size=n.size}function Q(t,n,e){(void 0!==e&&!pt(t[n],e)||void 0===e&&!(n in t))&&nt(t,n,e)}function Y(t,n,e){var r=t[n];I.call(t,n)&&pt(r,e)&&(void 0!==e||n in t)||nt(t,n,e)}function tt(t,n){for(var e=t.length;e--;)if(pt(t[e][0],n))return e;return-1}function nt(t,n,e){\"__proto__\"==n&&F?F(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}J.prototype.clear=function(){this.__data__=H?H(null):{},this.size=0},J.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},J.prototype.get=function(t){var n=this.__data__;if(H){var e=n[t];return e===r?void 0:e}return I.call(n,t)?n[t]:void 0},J.prototype.has=function(t){var n=this.__data__;return H?void 0!==n[t]:I.call(n,t)},J.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=H&&void 0===n?r:n,this},Z.prototype.clear=function(){this.__data__=[],this.size=0},Z.prototype.delete=function(t){var n=this.__data__,e=tt(n,t);return!(e<0||(e==n.length-1?n.pop():B.call(n,e,1),--this.size,0))},Z.prototype.get=function(t){var n=this.__data__,e=tt(n,t);return e<0?void 0:n[e][1]},Z.prototype.has=function(t){return tt(this.__data__,t)>-1},Z.prototype.set=function(t,n){var e=this.__data__,r=tt(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},V.prototype.clear=function(){this.size=0,this.__data__={hash:new J,map:new(K||Z),string:new J}},V.prototype.delete=function(t){var n=ut(this,t).delete(t);return this.size-=n?1:0,n},V.prototype.get=function(t){return ut(this,t).get(t)},V.prototype.has=function(t){return ut(this,t).has(t)},V.prototype.set=function(t,n){var e=ut(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},X.prototype.clear=function(){this.__data__=new Z,this.size=0},X.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},X.prototype.get=function(t){return this.__data__.get(t)},X.prototype.has=function(t){return this.__data__.has(t)},X.prototype.set=function(t,n){var e=this.__data__;if(e instanceof Z){var r=e.__data__;if(!K||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new V(r)}return e.set(t,n),this.size=e.size,this};function et(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":L&&L in Object(t)?function(t){var n=I.call(t,L),e=t[L];try{t[L]=void 0;var r=!0}catch(t){}var i=P.call(t);return r&&(n?t[L]=e:delete t[L]),i}(t):function(t){return P.call(t)}(t)}function rt(t){return bt(t)&&et(t)==o}function it(t,n,e,r,i){t!==n&&function(t,n,e){for(var r=-1,i=Object(t),o=e(t),u=o.length;u--;){var a=o[++r];if(!1===n(i[a],a,i))break}}(n,function(o,u){if(i||(i=new X),mt(o))!function(t,n,e,r,i,o,u){var c=ft(t,e),s=ft(n,e),f=u.get(s);if(f)Q(t,e,f);else{var l,p,h,d,v,y=o?o(c,s,e+\"\",t,n,u):void 0,_=void 0===y;if(_){var g=dt(s),m=!g&&yt(s),b=!g&&!m&&wt(s);y=s,g||m||b?dt(c)?y=c:bt(v=c)&&vt(v)?y=function(t,n){var e=-1,r=t.length;for(n||(n=Array(r));++e<r;)n[e]=t[e];return n}(c):m?(_=!1,y=function(t){return t.slice()}(s)):b?(_=!1,d=new(h=(l=s).buffer).constructor(h.byteLength),new M(d).set(new M(h)),p=d,y=new l.constructor(p,l.byteOffset,l.length)):y=[]:function(t){if(!bt(t)||et(t)!=a)return!1;var n=U(t);if(null===n)return!0;var e=I.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof e&&e instanceof e&&A.call(e)==R}(s)||ht(s)?(y=c,ht(c)?y=function(t){return function(t,n,e){var r=!e;e||(e={});for(var i=-1,o=n.length;++i<o;){var u=n[i],a=void 0;void 0===a&&(a=t[u]),r?nt(e,u,a):Y(e,u,a)}return e}(t,jt(t))}(c):mt(c)&&!_t(c)||(y=function(t){return\"function\"!=typeof t.constructor||st(t)?{}:G(U(t))}(s))):_=!1}_&&(u.set(s,y),i(y,s,r,o,u),u.delete(s)),Q(t,e,y)}}(t,n,u,e,it,r,i);else{var c=r?r(ft(t,u),o,u+\"\",t,n,i):void 0;void 0===c&&(c=o),Q(t,u,c)}},jt)}var ot=F?function(t,n){return F(t,\"toString\",{configurable:!0,enumerable:!1,value:(e=n,function(){return e}),writable:!0});var e}:kt;function ut(t,n){var e,r,i=t.__data__;return(\"string\"==(r=typeof(e=n))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==e:null===e)?i[\"string\"==typeof n?\"string\":\"hash\"]:i.map}function at(t,n){var e=function(t,n){return null==t?void 0:t[n]}(t,n);return function(t){return!(!mt(t)||function(t){return!!C&&C in t}(t))&&(_t(t)?z:c).test(function(t){if(null!=t){try{return A.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(e)?e:void 0}function ct(t,n){var e=typeof t;return!!(n=n??i)&&(\"number\"==e||\"symbol\"!=e&&s.test(t))&&t>-1&&t%1==0&&t<n}function st(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||k)}function ft(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var lt=function(t){var n=0,e=0;return function(){var r=$(),i=16-(r-e);if(e=r,i>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(void 0,arguments)}}(ot);function pt(t,n){return t===n||t!=t&&n!=n}var ht=rt(function(){return arguments}())?rt:function(t){return bt(t)&&I.call(t,\"callee\")&&!q.call(t,\"callee\")},dt=Array.isArray;function vt(t){return null!=t&&gt(t.length)&&!_t(t)}var yt=W||function(){return!1};function _t(t){if(!mt(t))return!1;var n=et(t);return n==u||\"[object GeneratorFunction]\"==n||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function mt(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=j?function(t){return function(n){return t(n)}}(j):function(t){return bt(t)&&gt(t.length)&&!!f[et(t)]};function jt(t){return vt(t)?function(t,n){var e=dt(t),r=!e&&ht(t),i=!e&&!r&&yt(t),o=!e&&!r&&!i&&wt(t),u=e||r||i||o,a=u?function(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}(t.length,String):[],c=a.length;for(var s in t)!n&&!I.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||ct(s,c))||a.push(s);return a}(t,!0):function(t){if(!mt(t))return function(t){var n=[];if(null!=t)for(var e in Object(t))n.push(e);return n}(t);var n=st(t),e=[];for(var r in t)(\"constructor\"!=r||!n&&I.call(t,r))&&e.push(r);return e}(t)}var St,Ot=(St=function(t,n,e){it(t,n,e)},function(t,n){return lt(function(t,n,e){return n=D(void 0===n?t.length-1:n,0),function(){for(var r=arguments,i=-1,o=D(r.length-n,0),u=Array(o);++i<o;)u[i]=r[n+i];i=-1;for(var a=Array(n+1);++i<n;)a[i]=r[i];return a[n]=e(u),function(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}(t,this,a)}}(t,n,kt),t+\"\")}(function(t,n){var e=-1,r=n.length,i=r>1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(i=St.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,n,e){if(!mt(e))return!1;var r=typeof n;return!!(\"number\"==r?vt(e)&&ct(n,e.length):\"string\"==r&&n in e)&&pt(e[n],t)}(n[0],n[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++e<r;){var u=n[e];u&&St(t,u,e)}return t}));function kt(t){return t}t.exports=Ot},9440(t,n,e){t=e.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,s=1/0,f=9007199254740991,l=NaN,p=4294967295,h=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",v=\"[object Array]\",y=\"[object Boolean]\",_=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",j=\"[object Number]\",S=\"[object Object]\",O=\"[object Promise]\",k=\"[object RegExp]\",x=\"[object Set]\",A=\"[object String]\",I=\"[object Symbol]\",C=\"[object WeakMap]\",P=\"[object ArrayBuffer]\",R=\"[object DataView]\",z=\"[object Float32Array]\",E=\"[object Float64Array]\",T=\"[object Int8Array]\",M=\"[object Int16Array]\",U=\"[object Int32Array]\",N=\"[object Uint8Array]\",q=\"[object Uint8ClampedArray]\",B=\"[object Uint16Array]\",L=\"[object Uint32Array]\",F=/\\b__p \\+= '';/g,W=/\\b(__p \\+=) '' \\+/g,D=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,$=/&(?:amp|lt|gt|quot|#39);/g,K=/[&<>\"']/g,H=RegExp($.source),G=RegExp(K.source),J=/<%-([\\s\\S]+?)%>/g,Z=/<%([\\s\\S]+?)%>/g,V=/<%=([\\s\\S]+?)%>/g,X=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,Y=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,nt=RegExp(tt.source),et=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,vt=/^0o[0-7]+$/i,yt=/^(?:0|[1-9]\\d*)$/,_t=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",jt=\"\\\\u2700-\\\\u27bf\",St=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Ot=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",kt=\"\\\\ufe0e\\\\ufe0f\",xt=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",At=\"[\"+bt+\"]\",It=\"[\"+xt+\"]\",Ct=\"[\"+wt+\"]\",Pt=\"\\\\d+\",Rt=\"[\"+jt+\"]\",zt=\"[\"+St+\"]\",Et=\"[^\"+bt+xt+Pt+jt+St+Ot+\"]\",Tt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Mt=\"[^\"+bt+\"]\",Ut=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Nt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",qt=\"[\"+Ot+\"]\",Bt=\"\\\\u200d\",Lt=\"(?:\"+zt+\"|\"+Et+\")\",Ft=\"(?:\"+qt+\"|\"+Et+\")\",Wt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Dt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",$t=\"(?:\"+Ct+\"|\"+Tt+\")?\",Kt=\"[\"+kt+\"]?\",Ht=Kt+$t+\"(?:\"+Bt+\"(?:\"+[Mt,Ut,Nt].join(\"|\")+\")\"+Kt+$t+\")*\",Gt=\"(?:\"+[Rt,Ut,Nt].join(\"|\")+\")\"+Ht,Jt=\"(?:\"+[Mt+Ct+\"?\",Ct,Ut,Nt,At].join(\"|\")+\")\",Zt=RegExp(\"['’]\",\"g\"),Vt=RegExp(Ct,\"g\"),Xt=RegExp(Tt+\"(?=\"+Tt+\")|\"+Jt+Ht,\"g\"),Qt=RegExp([qt+\"?\"+zt+\"+\"+Wt+\"(?=\"+[It,qt,\"$\"].join(\"|\")+\")\",Ft+\"+\"+Dt+\"(?=\"+[It,qt+Lt,\"$\"].join(\"|\")+\")\",qt+\"?\"+Lt+\"+\"+Wt,qt+\"+\"+Dt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Pt,Gt].join(\"|\"),\"g\"),Yt=RegExp(\"[\"+Bt+bt+wt+kt+\"]\"),tn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,nn=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],en=-1,rn={};rn[z]=rn[E]=rn[T]=rn[M]=rn[U]=rn[N]=rn[q]=rn[B]=rn[L]=!0,rn[d]=rn[v]=rn[P]=rn[y]=rn[R]=rn[_]=rn[g]=rn[m]=rn[w]=rn[j]=rn[S]=rn[k]=rn[x]=rn[A]=rn[C]=!1;var on={};on[d]=on[v]=on[P]=on[R]=on[y]=on[_]=on[z]=on[E]=on[T]=on[M]=on[U]=on[w]=on[j]=on[S]=on[k]=on[x]=on[A]=on[I]=on[N]=on[q]=on[B]=on[L]=!0,on[g]=on[m]=on[C]=!1;var un={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},an=parseFloat,cn=parseInt,sn=\"object\"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,fn=\"object\"==typeof self&&self&&self.Object===Object&&self,ln=sn||fn||Function(\"return this\")(),pn=n&&!n.nodeType&&n,hn=pn&&t&&!t.nodeType&&t,dn=hn&&hn.exports===pn,vn=dn&&sn.process,yn=function(){try{return hn&&hn.require&&hn.require(\"util\").types||vn&&vn.binding&&vn.binding(\"util\")}catch(t){}}(),_n=yn&&yn.isArrayBuffer,gn=yn&&yn.isDate,mn=yn&&yn.isMap,bn=yn&&yn.isRegExp,wn=yn&&yn.isSet,jn=yn&&yn.isTypedArray;function Sn(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}function On(t,n,e,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];n(r,u,e(u),t)}return r}function kn(t,n){for(var e=-1,r=null==t?0:t.length;++e<r&&!1!==n(t[e],e,t););return t}function xn(t,n){for(var e=null==t?0:t.length;e--&&!1!==n(t[e],e,t););return t}function An(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(!n(t[e],e,t))return!1;return!0}function In(t,n){for(var e=-1,r=null==t?0:t.length,i=0,o=[];++e<r;){var u=t[e];n(u,e,t)&&(o[i++]=u)}return o}function Cn(t,n){return!(null==t||!t.length)&&Bn(t,n,0)>-1}function Pn(t,n,e){for(var r=-1,i=null==t?0:t.length;++r<i;)if(e(n,t[r]))return!0;return!1}function Rn(t,n){for(var e=-1,r=null==t?0:t.length,i=Array(r);++e<r;)i[e]=n(t[e],e,t);return i}function zn(t,n){for(var e=-1,r=n.length,i=t.length;++e<r;)t[i+e]=n[e];return t}function En(t,n,e,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(e=t[++i]);++i<o;)e=n(e,t[i],i,t);return e}function Tn(t,n,e,r){var i=null==t?0:t.length;for(r&&i&&(e=t[--i]);i--;)e=n(e,t[i],i,t);return e}function Mn(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(n(t[e],e,t))return!0;return!1}var Un=Dn(\"length\");function Nn(t,n,e){var r;return e(t,function(t,e,i){if(n(t,e,i))return r=e,!1}),r}function qn(t,n,e,r){for(var i=t.length,o=e+(r?1:-1);r?o--:++o<i;)if(n(t[o],o,t))return o;return-1}function Bn(t,n,e){return n==n?function(t,n,e){for(var r=e-1,i=t.length;++r<i;)if(t[r]===n)return r;return-1}(t,n,e):qn(t,Fn,e)}function Ln(t,n,e,r){for(var i=e-1,o=t.length;++i<o;)if(r(t[i],n))return i;return-1}function Fn(t){return t!=t}function Wn(t,n){var e=null==t?0:t.length;return e?Hn(t,n)/e:l}function Dn(t){return function(n){return null==n?r:n[t]}}function $n(t){return function(n){return null==t?r:t[n]}}function Kn(t,n,e,r,i){return i(t,function(t,i,o){e=r?(r=!1,t):n(e,t,i,o)}),e}function Hn(t,n){for(var e,i=-1,o=t.length;++i<o;){var u=n(t[i]);u!==r&&(e=e===r?u:e+u)}return e}function Gn(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}function Jn(t){return t?t.slice(0,le(t)+1).replace(et,\"\"):t}function Zn(t){return function(n){return t(n)}}function Vn(t,n){return Rn(n,function(n){return t[n]})}function Xn(t,n){return t.has(n)}function Qn(t,n){for(var e=-1,r=t.length;++e<r&&Bn(n,t[e],0)>-1;);return e}function Yn(t,n){for(var e=t.length;e--&&Bn(n,t[e],0)>-1;);return e}var te=$n({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),ne=$n({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function ee(t){return\"\\\\\"+un[t]}function re(t){return Yt.test(t)}function ie(t){var n=-1,e=Array(t.size);return t.forEach(function(t,r){e[++n]=[r,t]}),e}function oe(t,n){return function(e){return t(n(e))}}function ue(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var a=t[e];a!==n&&a!==u||(t[e]=u,o[i++]=e)}return o}function ae(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=t}),e}function ce(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=[t,t]}),e}function se(t){return re(t)?function(t){for(var n=Xt.lastIndex=0;Xt.test(t);)++n;return n}(t):Un(t)}function fe(t){return re(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.split(\"\")}(t)}function le(t){for(var n=t.length;n--&&rt.test(t.charAt(n)););return n}var pe=$n({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),he=function t(n){var e,rt=(n=null==n?ln:he.defaults(ln.Object(),n,he.pick(ln,nn))).Array,bt=n.Date,wt=n.Error,jt=n.Function,St=n.Math,Ot=n.Object,kt=n.RegExp,xt=n.String,At=n.TypeError,It=rt.prototype,Ct=jt.prototype,Pt=Ot.prototype,Rt=n[\"__core-js_shared__\"],zt=Ct.toString,Et=Pt.hasOwnProperty,Tt=0,Mt=(e=/[^.]+$/.exec(Rt&&Rt.keys&&Rt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+e:\"\",Ut=Pt.toString,Nt=zt.call(Ot),qt=ln._,Bt=kt(\"^\"+zt.call(Et).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Lt=dn?n.Buffer:r,Ft=n.Symbol,Wt=n.Uint8Array,Dt=Lt?Lt.allocUnsafe:r,$t=oe(Ot.getPrototypeOf,Ot),Kt=Ot.create,Ht=Pt.propertyIsEnumerable,Gt=It.splice,Jt=Ft?Ft.isConcatSpreadable:r,Xt=Ft?Ft.iterator:r,Yt=Ft?Ft.toStringTag:r,un=function(){try{var t=co(Ot,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),sn=n.clearTimeout!==ln.clearTimeout&&n.clearTimeout,fn=bt&&bt.now!==ln.Date.now&&bt.now,pn=n.setTimeout!==ln.setTimeout&&n.setTimeout,hn=St.ceil,vn=St.floor,yn=Ot.getOwnPropertySymbols,Un=Lt?Lt.isBuffer:r,$n=n.isFinite,de=It.join,ve=oe(Ot.keys,Ot),ye=St.max,_e=St.min,ge=bt.now,me=n.parseInt,be=St.random,we=It.reverse,je=co(n,\"DataView\"),Se=co(n,\"Map\"),Oe=co(n,\"Promise\"),ke=co(n,\"Set\"),xe=co(n,\"WeakMap\"),Ae=co(Ot,\"create\"),Ie=xe&&new xe,Ce={},Pe=No(je),Re=No(Se),ze=No(Oe),Ee=No(ke),Te=No(xe),Me=Ft?Ft.prototype:r,Ue=Me?Me.valueOf:r,Ne=Me?Me.toString:r;function qe(t){if(ta(t)&&!Du(t)&&!(t instanceof We)){if(t instanceof Fe)return t;if(Et.call(t,\"__wrapped__\"))return qo(t)}return new Fe(t)}var Be=function(){function t(){}return function(n){if(!Yu(n))return{};if(Kt)return Kt(n);t.prototype=n;var e=new t;return t.prototype=r,e}}();function Le(){}function Fe(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=r}function We(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function De(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function $e(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Ke(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function He(t){var n=-1,e=null==t?0:t.length;for(this.__data__=new Ke;++n<e;)this.add(t[n])}function Ge(t){var n=this.__data__=new $e(t);this.size=n.size}function Je(t,n){var e=Du(t),r=!e&&Wu(t),i=!e&&!r&&Gu(t),o=!e&&!r&&!i&&ca(t),u=e||r||i||o,a=u?Gn(t.length,xt):[],c=a.length;for(var s in t)!n&&!Et.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||yo(s,c))||a.push(s);return a}function Ze(t){var n=t.length;return n?t[Kr(0,n-1)]:r}function Ve(t,n){return zo(xi(t),or(n,0,t.length))}function Xe(t){return zo(xi(t))}function Qe(t,n,e){(e!==r&&!Bu(t[n],e)||e===r&&!(n in t))&&rr(t,n,e)}function Ye(t,n,e){var i=t[n];Et.call(t,n)&&Bu(i,e)&&(e!==r||n in t)||rr(t,n,e)}function tr(t,n){for(var e=t.length;e--;)if(Bu(t[e][0],n))return e;return-1}function nr(t,n,e,r){return fr(t,function(t,i,o){n(r,t,e(t),o)}),r}function er(t,n){return t&&Ai(n,Pa(n),t)}function rr(t,n,e){\"__proto__\"==n&&un?un(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}function ir(t,n){for(var e=-1,i=n.length,o=rt(i),u=null==t;++e<i;)o[e]=u?r:ka(t,n[e]);return o}function or(t,n,e){return t==t&&(e!==r&&(t=t<=e?t:e),n!==r&&(t=t>=n?t:n)),t}function ur(t,n,e,i,o,u){var a,c=1&n,s=2&n,f=4&n;if(e&&(a=o?e(t,i,o,u):e(t)),a!==r)return a;if(!Yu(t))return t;var l=Du(t);if(l){if(a=function(t){var n=t.length,e=new t.constructor(n);return n&&\"string\"==typeof t[0]&&Et.call(t,\"index\")&&(e.index=t.index,e.input=t.input),e}(t),!c)return xi(t,a)}else{var p=lo(t),h=p==m||p==b;if(Gu(t))return bi(t,c);if(p==S||p==d||h&&!o){if(a=s||h?{}:ho(t),!c)return s?function(t,n){return Ai(t,fo(t),n)}(t,function(t,n){return t&&Ai(n,Ra(n),t)}(a,t)):function(t,n){return Ai(t,so(t),n)}(t,er(a,t))}else{if(!on[p])return o?t:{};a=function(t,n,e){var r,i=t.constructor;switch(n){case P:return wi(t);case y:case _:return new i(+t);case R:return function(t,n){var e=n?wi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.byteLength)}(t,e);case z:case E:case T:case M:case U:case N:case q:case B:case L:return ji(t,e);case w:return new i;case j:case A:return new i(t);case k:return function(t){var n=new t.constructor(t.source,lt.exec(t));return n.lastIndex=t.lastIndex,n}(t);case x:return new i;case I:return r=t,Ue?Ot(Ue.call(r)):{}}}(t,p,c)}}u||(u=new Ge);var v=u.get(t);if(v)return v;u.set(t,a),oa(t)?t.forEach(function(r){a.add(ur(r,n,e,r,t,u))}):na(t)&&t.forEach(function(r,i){a.set(i,ur(r,n,e,i,t,u))});var g=l?r:(f?s?no:to:s?Ra:Pa)(t);return kn(g||t,function(r,i){g&&(r=t[i=r]),Ye(a,i,ur(r,n,e,i,t,u))}),a}function ar(t,n,e){var i=e.length;if(null==t)return!i;for(t=Ot(t);i--;){var o=e[i],u=n[o],a=t[o];if(a===r&&!(o in t)||!u(a))return!1}return!0}function cr(t,n,e){if(\"function\"!=typeof t)throw new At(i);return Io(function(){t.apply(r,e)},n)}function sr(t,n,e,r){var i=-1,o=Cn,u=!0,a=t.length,c=[],s=n.length;if(!a)return c;e&&(n=Rn(n,Zn(e))),r?(o=Pn,u=!1):n.length>=200&&(o=Xn,u=!1,n=new He(n));t:for(;++i<a;){var f=t[i],l=null==e?f:e(f);if(f=r||0!==f?f:0,u&&l==l){for(var p=s;p--;)if(n[p]===l)continue t;c.push(f)}else o(n,l,r)||c.push(f)}return c}qe.templateSettings={escape:J,evaluate:Z,interpolate:V,variable:\"\",imports:{_:qe}},qe.prototype=Le.prototype,qe.prototype.constructor=qe,Fe.prototype=Be(Le.prototype),Fe.prototype.constructor=Fe,We.prototype=Be(Le.prototype),We.prototype.constructor=We,De.prototype.clear=function(){this.__data__=Ae?Ae(null):{},this.size=0},De.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},De.prototype.get=function(t){var n=this.__data__;if(Ae){var e=n[t];return e===o?r:e}return Et.call(n,t)?n[t]:r},De.prototype.has=function(t){var n=this.__data__;return Ae?n[t]!==r:Et.call(n,t)},De.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=Ae&&n===r?o:n,this},$e.prototype.clear=function(){this.__data__=[],this.size=0},$e.prototype.delete=function(t){var n=this.__data__,e=tr(n,t);return!(e<0||(e==n.length-1?n.pop():Gt.call(n,e,1),--this.size,0))},$e.prototype.get=function(t){var n=this.__data__,e=tr(n,t);return e<0?r:n[e][1]},$e.prototype.has=function(t){return tr(this.__data__,t)>-1},$e.prototype.set=function(t,n){var e=this.__data__,r=tr(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},Ke.prototype.clear=function(){this.size=0,this.__data__={hash:new De,map:new(Se||$e),string:new De}},Ke.prototype.delete=function(t){var n=uo(this,t).delete(t);return this.size-=n?1:0,n},Ke.prototype.get=function(t){return uo(this,t).get(t)},Ke.prototype.has=function(t){return uo(this,t).has(t)},Ke.prototype.set=function(t,n){var e=uo(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},He.prototype.add=He.prototype.push=function(t){return this.__data__.set(t,o),this},He.prototype.has=function(t){return this.__data__.has(t)},Ge.prototype.clear=function(){this.__data__=new $e,this.size=0},Ge.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},Ge.prototype.get=function(t){return this.__data__.get(t)},Ge.prototype.has=function(t){return this.__data__.has(t)},Ge.prototype.set=function(t,n){var e=this.__data__;if(e instanceof $e){var r=e.__data__;if(!Se||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new Ke(r)}return e.set(t,n),this.size=e.size,this};var fr=Pi(gr),lr=Pi(mr,!0);function pr(t,n){var e=!0;return fr(t,function(t,r,i){return e=!!n(t,r,i)}),e}function hr(t,n,e){for(var i=-1,o=t.length;++i<o;){var u=t[i],a=n(u);if(null!=a&&(c===r?a==a&&!aa(a):e(a,c)))var c=a,s=u}return s}function dr(t,n){var e=[];return fr(t,function(t,r,i){n(t,r,i)&&e.push(t)}),e}function vr(t,n,e,r,i){var o=-1,u=t.length;for(e||(e=vo),i||(i=[]);++o<u;){var a=t[o];n>0&&e(a)?n>1?vr(a,n-1,e,r,i):zn(i,a):r||(i[i.length]=a)}return i}var yr=Ri(),_r=Ri(!0);function gr(t,n){return t&&yr(t,n,Pa)}function mr(t,n){return t&&_r(t,n,Pa)}function br(t,n){return In(n,function(n){return Vu(t[n])})}function wr(t,n){for(var e=0,i=(n=yi(n,t)).length;null!=t&&e<i;)t=t[Uo(n[e++])];return e&&e==i?t:r}function jr(t,n,e){var r=n(t);return Du(t)?r:zn(r,e(t))}function Sr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Yt&&Yt in Ot(t)?function(t){var n=Et.call(t,Yt),e=t[Yt];try{t[Yt]=r;var i=!0}catch(t){}var o=Ut.call(t);return i&&(n?t[Yt]=e:delete t[Yt]),o}(t):function(t){return Ut.call(t)}(t)}function Or(t,n){return t>n}function kr(t,n){return null!=t&&Et.call(t,n)}function xr(t,n){return null!=t&&n in Ot(t)}function Ar(t,n,e){for(var i=e?Pn:Cn,o=t[0].length,u=t.length,a=u,c=rt(u),s=1/0,f=[];a--;){var l=t[a];a&&n&&(l=Rn(l,Zn(n))),s=_e(l.length,s),c[a]=!e&&(n||o>=120&&l.length>=120)?new He(a&&l):r}l=t[0];var p=-1,h=c[0];t:for(;++p<o&&f.length<s;){var d=l[p],v=n?n(d):d;if(d=e||0!==d?d:0,!(h?Xn(h,v):i(f,v,e))){for(a=u;--a;){var y=c[a];if(!(y?Xn(y,v):i(t[a],v,e)))continue t}h&&h.push(v),f.push(d)}}return f}function Ir(t,n,e){var i=null==(t=ko(t,n=yi(n,t)))?t:t[Uo(Zo(n))];return null==i?r:Sn(i,t,e)}function Cr(t){return ta(t)&&Sr(t)==d}function Pr(t,n,e,i,o){return t===n||(null==t||null==n||!ta(t)&&!ta(n)?t!=t&&n!=n:function(t,n,e,i,o,u){var a=Du(t),c=Du(n),s=a?v:lo(t),f=c?v:lo(n),l=(s=s==d?S:s)==S,p=(f=f==d?S:f)==S,h=s==f;if(h&&Gu(t)){if(!Gu(n))return!1;a=!0,l=!1}if(h&&!l)return u||(u=new Ge),a||ca(t)?Qi(t,n,e,i,o,u):function(t,n,e,r,i,o,u){switch(e){case R:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case P:return!(t.byteLength!=n.byteLength||!o(new Wt(t),new Wt(n)));case y:case _:case j:return Bu(+t,+n);case g:return t.name==n.name&&t.message==n.message;case k:case A:return t==n+\"\";case w:var a=ie;case x:var c=1&r;if(a||(a=ae),t.size!=n.size&&!c)return!1;var s=u.get(t);if(s)return s==n;r|=2,u.set(t,n);var f=Qi(a(t),a(n),r,i,o,u);return u.delete(t),f;case I:if(Ue)return Ue.call(t)==Ue.call(n)}return!1}(t,n,s,e,i,o,u);if(!(1&e)){var m=l&&Et.call(t,\"__wrapped__\"),b=p&&Et.call(n,\"__wrapped__\");if(m||b){var O=m?t.value():t,C=b?n.value():n;return u||(u=new Ge),o(O,C,e,i,u)}}return!!h&&(u||(u=new Ge),function(t,n,e,i,o,u){var a=1&e,c=to(t),s=c.length;if(s!=to(n).length&&!a)return!1;for(var f=s;f--;){var l=c[f];if(!(a?l in n:Et.call(n,l)))return!1}var p=u.get(t),h=u.get(n);if(p&&h)return p==n&&h==t;var d=!0;u.set(t,n),u.set(n,t);for(var v=a;++f<s;){var y=t[l=c[f]],_=n[l];if(i)var g=a?i(_,y,l,n,t,u):i(y,_,l,t,n,u);if(!(g===r?y===_||o(y,_,e,i,u):g)){d=!1;break}v||(v=\"constructor\"==l)}if(d&&!v){var m=t.constructor,b=n.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in n)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return u.delete(t),u.delete(n),d}(t,n,e,i,o,u))}(t,n,e,i,Pr,o))}function Rr(t,n,e,i){var o=e.length,u=o,a=!i;if(null==t)return!u;for(t=Ot(t);o--;){var c=e[o];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++o<u;){var s=(c=e[o])[0],f=t[s],l=c[1];if(a&&c[2]){if(f===r&&!(s in t))return!1}else{var p=new Ge;if(i)var h=i(f,l,s,t,n,p);if(!(h===r?Pr(l,f,3,i,p):h))return!1}}return!0}function zr(t){return!(!Yu(t)||(n=t,Mt&&Mt in n))&&(Vu(t)?Bt:dt).test(No(t));var n}function Er(t){return\"function\"==typeof t?t:null==t?ec:\"object\"==typeof t?Du(t)?qr(t[0],t[1]):Nr(t):lc(t)}function Tr(t){if(!wo(t))return ve(t);var n=[];for(var e in Ot(t))Et.call(t,e)&&\"constructor\"!=e&&n.push(e);return n}function Mr(t,n){return t<n}function Ur(t,n){var e=-1,r=Ku(t)?rt(t.length):[];return fr(t,function(t,i,o){r[++e]=n(t,i,o)}),r}function Nr(t){var n=ao(t);return 1==n.length&&n[0][2]?So(n[0][0],n[0][1]):function(e){return e===t||Rr(e,t,n)}}function qr(t,n){return go(t)&&jo(n)?So(Uo(t),n):function(e){var i=ka(e,t);return i===r&&i===n?xa(e,t):Pr(n,i,3)}}function Br(t,n,e,i,o){t!==n&&yr(n,function(u,a){if(o||(o=new Ge),Yu(u))!function(t,n,e,i,o,u,a){var c=xo(t,e),s=xo(n,e),f=a.get(s);if(f)Qe(t,e,f);else{var l=u?u(c,s,e+\"\",t,n,a):r,p=l===r;if(p){var h=Du(s),d=!h&&Gu(s),v=!h&&!d&&ca(s);l=s,h||d||v?Du(c)?l=c:Hu(c)?l=xi(c):d?(p=!1,l=bi(s,!0)):v?(p=!1,l=ji(s,!0)):l=[]:ra(s)||Wu(s)?(l=c,Wu(c)?l=ya(c):Yu(c)&&!Vu(c)||(l=ho(s))):p=!1}p&&(a.set(s,l),o(l,s,i,u,a),a.delete(s)),Qe(t,e,l)}}(t,n,a,e,Br,i,o);else{var c=i?i(xo(t,a),u,a+\"\",t,n,o):r;c===r&&(c=u),Qe(t,a,c)}},Ra)}function Lr(t,n){var e=t.length;if(e)return yo(n+=n<0?e:0,e)?t[n]:r}function Fr(t,n,e){n=n.length?Rn(n,function(t){return Du(t)?function(n){return wr(n,1===t.length?t[0]:t)}:t}):[ec];var r=-1;n=Rn(n,Zn(oo()));var i=Ur(t,function(t,e,i){var o=Rn(n,function(n){return n(t)});return{criteria:o,index:++r,value:t}});return function(t){var n=t.length;for(t.sort(function(t,n){return function(t,n,e){for(var r=-1,i=t.criteria,o=n.criteria,u=i.length,a=e.length;++r<u;){var c=Si(i[r],o[r]);if(c)return r>=a?c:c*(\"desc\"==e[r]?-1:1)}return t.index-n.index}(t,n,e)});n--;)t[n]=t[n].value;return t}(i)}function Wr(t,n,e){for(var r=-1,i=n.length,o={};++r<i;){var u=n[r],a=wr(t,u);e(a,u)&&Vr(o,yi(u,t),a)}return o}function Dr(t,n,e,r){var i=r?Ln:Bn,o=-1,u=n.length,a=t;for(t===n&&(n=xi(n)),e&&(a=Rn(t,Zn(e)));++o<u;)for(var c=0,s=n[o],f=e?e(s):s;(c=i(a,f,c,r))>-1;)a!==t&&Gt.call(a,c,1),Gt.call(t,c,1);return t}function $r(t,n){for(var e=t?n.length:0,r=e-1;e--;){var i=n[e];if(e==r||i!==o){var o=i;yo(i)?Gt.call(t,i,1):ci(t,i)}}return t}function Kr(t,n){return t+vn(be()*(n-t+1))}function Hr(t,n){var e=\"\";if(!t||n<1||n>f)return e;do{n%2&&(e+=t),(n=vn(n/2))&&(t+=t)}while(n);return e}function Gr(t,n){return Co(Oo(t,n,ec),t+\"\")}function Jr(t){return Ze(Ba(t))}function Zr(t,n){var e=Ba(t);return zo(e,or(n,0,e.length))}function Vr(t,n,e,i){if(!Yu(t))return t;for(var o=-1,u=(n=yi(n,t)).length,a=u-1,c=t;null!=c&&++o<u;){var s=Uo(n[o]),f=e;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(o!=a){var l=c[s];(f=i?i(l,s,c):r)===r&&(f=Yu(l)?l:yo(n[o+1])?[]:{})}Ye(c,s,f),c=c[s]}return t}var Xr=Ie?function(t,n){return Ie.set(t,n),t}:ec,Qr=un?function(t,n){return un(t,\"toString\",{configurable:!0,enumerable:!1,value:Ya(n),writable:!0})}:ec;function Yr(t){return zo(Ba(t))}function ti(t,n,e){var r=-1,i=t.length;n<0&&(n=-n>i?0:i+n),(e=e>i?i:e)<0&&(e+=i),i=n>e?0:e-n>>>0,n>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+n];return o}function ni(t,n){var e;return fr(t,function(t,r,i){return!(e=n(t,r,i))}),!!e}function ei(t,n,e){var r=0,i=null==t?r:t.length;if(\"number\"==typeof n&&n==n&&i<=2147483647){for(;r<i;){var o=r+i>>>1,u=t[o];null!==u&&!aa(u)&&(e?u<=n:u<n)?r=o+1:i=o}return i}return ri(t,n,ec,e)}function ri(t,n,e,i){var o=0,u=null==t?0:t.length;if(0===u)return 0;for(var a=(n=e(n))!=n,c=null===n,s=aa(n),f=n===r;o<u;){var l=vn((o+u)/2),p=e(t[l]),h=p!==r,d=null===p,v=p==p,y=aa(p);if(a)var _=i||v;else _=f?v&&(i||h):c?v&&h&&(i||!d):s?v&&h&&!d&&(i||!y):!d&&!y&&(i?p<=n:p<n);_?o=l+1:u=l}return _e(u,4294967294)}function ii(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var u=t[e],a=n?n(u):u;if(!e||!Bu(a,c)){var c=a;o[i++]=0===u?0:u}}return o}function oi(t){return\"number\"==typeof t?t:aa(t)?l:+t}function ui(t){if(\"string\"==typeof t)return t;if(Du(t))return Rn(t,ui)+\"\";if(aa(t))return Ne?Ne.call(t):\"\";var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function ai(t,n,e){var r=-1,i=Cn,o=t.length,u=!0,a=[],c=a;if(e)u=!1,i=Pn;else if(o>=200){var s=n?null:Hi(t);if(s)return ae(s);u=!1,i=Xn,c=new He}else c=n?[]:a;t:for(;++r<o;){var f=t[r],l=n?n(f):f;if(f=e||0!==f?f:0,u&&l==l){for(var p=c.length;p--;)if(c[p]===l)continue t;n&&c.push(l),a.push(f)}else i(c,l,e)||(c!==a&&c.push(l),a.push(f))}return a}function ci(t,n){var e=-1,r=(n=yi(n,t)).length;if(!r)return!0;for(;++e<r;){var i=Uo(n[e]);if(\"__proto__\"===i&&!Et.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&e<r-1)return!1}var o=ko(t,n);return null==o||delete o[Uo(Zo(n))]}function si(t,n,e,r){return Vr(t,n,e(wr(t,n)),r)}function fi(t,n,e,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&n(t[o],o,t););return e?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function li(t,n){var e=t;return e instanceof We&&(e=e.value()),En(n,function(t,n){return n.func.apply(n.thisArg,zn([t],n.args))},e)}function pi(t,n,e){var r=t.length;if(r<2)return r?ai(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var u=t[i],a=-1;++a<r;)a!=i&&(o[i]=sr(o[i]||u,t[a],n,e));return ai(vr(o,1),n,e)}function hi(t,n,e){for(var i=-1,o=t.length,u=n.length,a={};++i<o;){var c=i<u?n[i]:r;e(a,t[i],c)}return a}function di(t){return Hu(t)?t:[]}function vi(t){return\"function\"==typeof t?t:ec}function yi(t,n){return Du(t)?t:go(t,n)?[t]:Mo(_a(t))}var _i=Gr;function gi(t,n,e){var i=t.length;return e=e===r?i:e,!n&&e>=i?t:ti(t,n,e)}var mi=sn||function(t){return ln.clearTimeout(t)};function bi(t,n){if(n)return t.slice();var e=t.length,r=Dt?Dt(e):new t.constructor(e);return t.copy(r),r}function wi(t){var n=new t.constructor(t.byteLength);return new Wt(n).set(new Wt(t)),n}function ji(t,n){var e=n?wi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.length)}function Si(t,n){if(t!==n){var e=t!==r,i=null===t,o=t==t,u=aa(t),a=n!==r,c=null===n,s=n==n,f=aa(n);if(!c&&!f&&!u&&t>n||u&&a&&s&&!c&&!f||i&&a&&s||!e&&s||!o)return 1;if(!i&&!u&&!f&&t<n||f&&e&&o&&!i&&!u||c&&e&&o||!a&&o||!s)return-1}return 0}function Oi(t,n,e,r){for(var i=-1,o=t.length,u=e.length,a=-1,c=n.length,s=ye(o-u,0),f=rt(c+s),l=!r;++a<c;)f[a]=n[a];for(;++i<u;)(l||i<o)&&(f[e[i]]=t[i]);for(;s--;)f[a++]=t[i++];return f}function ki(t,n,e,r){for(var i=-1,o=t.length,u=-1,a=e.length,c=-1,s=n.length,f=ye(o-a,0),l=rt(f+s),p=!r;++i<f;)l[i]=t[i];for(var h=i;++c<s;)l[h+c]=n[c];for(;++u<a;)(p||i<o)&&(l[h+e[u]]=t[i++]);return l}function xi(t,n){var e=-1,r=t.length;for(n||(n=rt(r));++e<r;)n[e]=t[e];return n}function Ai(t,n,e,i){var o=!e;e||(e={});for(var u=-1,a=n.length;++u<a;){var c=n[u],s=i?i(e[c],t[c],c,e,t):r;s===r&&(s=t[c]),o?rr(e,c,s):Ye(e,c,s)}return e}function Ii(t,n){return function(e,r){var i=Du(e)?On:nr,o=n?n():{};return i(e,t,oo(r,2),o)}}function Ci(t){return Gr(function(n,e){var i=-1,o=e.length,u=o>1?e[o-1]:r,a=o>2?e[2]:r;for(u=t.length>3&&\"function\"==typeof u?(o--,u):r,a&&_o(e[0],e[1],a)&&(u=o<3?r:u,o=1),n=Ot(n);++i<o;){var c=e[i];c&&t(n,c,i,u)}return n})}function Pi(t,n){return function(e,r){if(null==e)return e;if(!Ku(e))return t(e,r);for(var i=e.length,o=n?i:-1,u=Ot(e);(n?o--:++o<i)&&!1!==r(u[o],o,u););return e}}function Ri(t){return function(n,e,r){for(var i=-1,o=Ot(n),u=r(n),a=u.length;a--;){var c=u[t?a:++i];if(!1===e(o[c],c,o))break}return n}}function zi(t){return function(n){var e=re(n=_a(n))?fe(n):r,i=e?e[0]:n.charAt(0),o=e?gi(e,1).join(\"\"):n.slice(1);return i[t]()+o}}function Ei(t){return function(n){return En(Va(Wa(n).replace(Zt,\"\")),t,\"\")}}function Ti(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var e=Be(t.prototype),r=t.apply(e,n);return Yu(r)?r:e}}function Mi(t){return function(n,e,i){var o=Ot(n);if(!Ku(n)){var u=oo(e,3);n=Pa(n),e=function(t){return u(o[t],t,o)}}var a=t(n,e,i);return a>-1?o[u?n[a]:a]:r}}function Ui(t){return Yi(function(n){var e=n.length,o=e,u=Fe.prototype.thru;for(t&&n.reverse();o--;){var a=n[o];if(\"function\"!=typeof a)throw new At(i);if(u&&!c&&\"wrapper\"==ro(a))var c=new Fe([],!0)}for(o=c?o:e;++o<e;){var s=ro(a=n[o]),f=\"wrapper\"==s?eo(a):r;c=f&&mo(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?c[ro(f[0])].apply(c,f[3]):1==a.length&&mo(a)?c[s]():c.thru(a)}return function(){var t=arguments,r=t[0];if(c&&1==t.length&&Du(r))return c.plant(r).value();for(var i=0,o=e?n[i].apply(this,t):r;++i<e;)o=n[i].call(this,o);return o}})}function Ni(t,n,e,i,o,u,a,s,f,l){var p=n&c,h=1&n,d=2&n,v=24&n,y=512&n,_=d?r:Ti(t);return function c(){for(var g=arguments.length,m=rt(g),b=g;b--;)m[b]=arguments[b];if(v)var w=io(c),j=function(t,n){for(var e=t.length,r=0;e--;)t[e]===n&&++r;return r}(m,w);if(i&&(m=Oi(m,i,o,v)),u&&(m=ki(m,u,a,v)),g-=j,v&&g<l){var S=ue(m,w);return $i(t,n,Ni,c.placeholder,e,m,S,s,f,l-g)}var O=h?e:this,k=d?O[t]:t;return g=m.length,s?m=function(t,n){for(var e=t.length,i=_e(n.length,e),o=xi(t);i--;){var u=n[i];t[i]=yo(u,e)?o[u]:r}return t}(m,s):y&&g>1&&m.reverse(),p&&f<g&&(m.length=f),this&&this!==ln&&this instanceof c&&(k=_||Ti(k)),k.apply(O,m)}}function qi(t,n){return function(e,r){return function(t,n,e,r){return gr(t,function(t,i,o){n(r,e(t),i,o)}),r}(e,t,n(r),{})}}function Bi(t,n){return function(e,i){var o;if(e===r&&i===r)return n;if(e!==r&&(o=e),i!==r){if(o===r)return i;\"string\"==typeof e||\"string\"==typeof i?(e=ui(e),i=ui(i)):(e=oi(e),i=oi(i)),o=t(e,i)}return o}}function Li(t){return Yi(function(n){return n=Rn(n,Zn(oo())),Gr(function(e){var r=this;return t(n,function(t){return Sn(t,r,e)})})})}function Fi(t,n){var e=(n=n===r?\" \":ui(n)).length;if(e<2)return e?Hr(n,t):n;var i=Hr(n,hn(t/se(n)));return re(n)?gi(fe(i),0,t).join(\"\"):i.slice(0,t)}function Wi(t){return function(n,e,i){return i&&\"number\"!=typeof i&&_o(n,e,i)&&(e=i=r),n=pa(n),e===r?(e=n,n=0):e=pa(e),function(t,n,e,r){for(var i=-1,o=ye(hn((n-t)/(e||1)),0),u=rt(o);o--;)u[r?o:++i]=t,t+=e;return u}(n,e,i=i===r?n<e?1:-1:pa(i),t)}}function Di(t){return function(n,e){return\"string\"==typeof n&&\"string\"==typeof e||(n=va(n),e=va(e)),t(n,e)}}function $i(t,n,e,i,o,u,c,s,f,l){var p=8&n;n|=p?a:64,4&(n&=~(p?64:a))||(n&=-4);var h=[t,n,o,p?u:r,p?c:r,p?r:u,p?r:c,s,f,l],d=e.apply(r,h);return mo(t)&&Ao(d,h),d.placeholder=i,Po(d,t,n)}function Ki(t){var n=St[t];return function(t,e){if(t=va(t),(e=null==e?0:_e(ha(e),292))&&$n(t)){var r=(_a(t)+\"e\").split(\"e\");return+((r=(_a(n(r[0]+\"e\"+(+r[1]+e)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-e))}return n(t)}}var Hi=ke&&1/ae(new ke([,-0]))[1]==s?function(t){return new ke(t)}:ac;function Gi(t){return function(n){var e=lo(n);return e==w?ie(n):e==x?ce(n):function(t,n){return Rn(n,function(n){return[n,t[n]]})}(n,t(n))}}function Ji(t,n,e,o,s,f,l,p){var h=2&n;if(!h&&\"function\"!=typeof t)throw new At(i);var d=o?o.length:0;if(d||(n&=-97,o=s=r),l=l===r?l:ye(ha(l),0),p=p===r?p:ha(p),d-=s?s.length:0,64&n){var v=o,y=s;o=s=r}var _=h?r:eo(t),g=[t,n,e,o,s,v,y,f,l,p];if(_&&function(t,n){var e=t[1],r=n[1],i=e|r,o=i<131,a=r==c&&8==e||r==c&&256==e&&t[7].length<=n[8]||384==r&&n[7].length<=n[8]&&8==e;if(!o&&!a)return t;1&r&&(t[2]=n[2],i|=1&e?0:4);var s=n[3];if(s){var f=t[3];t[3]=f?Oi(f,s,n[4]):s,t[4]=f?ue(t[3],u):n[4]}(s=n[5])&&(f=t[5],t[5]=f?ki(f,s,n[6]):s,t[6]=f?ue(t[5],u):n[6]),(s=n[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?n[8]:_e(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i}(g,_),t=g[0],n=g[1],e=g[2],o=g[3],s=g[4],!(p=g[9]=g[9]===r?h?0:t.length:ye(g[9]-d,0))&&24&n&&(n&=-25),n&&1!=n)m=8==n||16==n?function(t,n,e){var i=Ti(t);return function o(){for(var u=arguments.length,a=rt(u),c=u,s=io(o);c--;)a[c]=arguments[c];var f=u<3&&a[0]!==s&&a[u-1]!==s?[]:ue(a,s);return(u-=f.length)<e?$i(t,n,Ni,o.placeholder,r,a,f,r,r,e-u):Sn(this&&this!==ln&&this instanceof o?i:t,this,a)}}(t,n,p):n!=a&&33!=n||s.length?Ni.apply(r,g):function(t,n,e,r){var i=1&n,o=Ti(t);return function n(){for(var u=-1,a=arguments.length,c=-1,s=r.length,f=rt(s+a),l=this&&this!==ln&&this instanceof n?o:t;++c<s;)f[c]=r[c];for(;a--;)f[c++]=arguments[++u];return Sn(l,i?e:this,f)}}(t,n,e,o);else var m=function(t,n,e){var r=1&n,i=Ti(t);return function n(){return(this&&this!==ln&&this instanceof n?i:t).apply(r?e:this,arguments)}}(t,n,e);return Po((_?Xr:Ao)(m,g),t,n)}function Zi(t,n,e,i){return t===r||Bu(t,Pt[e])&&!Et.call(i,e)?n:t}function Vi(t,n,e,i,o,u){return Yu(t)&&Yu(n)&&(u.set(n,t),Br(t,n,r,Vi,u),u.delete(n)),t}function Xi(t){return ra(t)?r:t}function Qi(t,n,e,i,o,u){var a=1&e,c=t.length,s=n.length;if(c!=s&&!(a&&s>c))return!1;var f=u.get(t),l=u.get(n);if(f&&l)return f==n&&l==t;var p=-1,h=!0,d=2&e?new He:r;for(u.set(t,n),u.set(n,t);++p<c;){var v=t[p],y=n[p];if(i)var _=a?i(y,v,p,n,t,u):i(v,y,p,t,n,u);if(_!==r){if(_)continue;h=!1;break}if(d){if(!Mn(n,function(t,n){if(!Xn(d,n)&&(v===t||o(v,t,e,i,u)))return d.push(n)})){h=!1;break}}else if(v!==y&&!o(v,y,e,i,u)){h=!1;break}}return u.delete(t),u.delete(n),h}function Yi(t){return Co(Oo(t,r,$o),t+\"\")}function to(t){return jr(t,Pa,so)}function no(t){return jr(t,Ra,fo)}var eo=Ie?function(t){return Ie.get(t)}:ac;function ro(t){for(var n=t.name+\"\",e=Ce[n],r=Et.call(Ce,n)?e.length:0;r--;){var i=e[r],o=i.func;if(null==o||o==t)return i.name}return n}function io(t){return(Et.call(qe,\"placeholder\")?qe:t).placeholder}function oo(){var t=qe.iteratee||rc;return t=t===rc?Er:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,n){var e,r,i=t.__data__;return(\"string\"==(r=typeof(e=n))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==e:null===e)?i[\"string\"==typeof n?\"string\":\"hash\"]:i.map}function ao(t){for(var n=Pa(t),e=n.length;e--;){var r=n[e],i=t[r];n[e]=[r,i,jo(i)]}return n}function co(t,n){var e=function(t,n){return null==t?r:t[n]}(t,n);return zr(e)?e:r}var so=yn?function(t){return null==t?[]:(t=Ot(t),In(yn(t),function(n){return Ht.call(t,n)}))}:dc,fo=yn?function(t){for(var n=[];t;)zn(n,so(t)),t=$t(t);return n}:dc,lo=Sr;function po(t,n,e){for(var r=-1,i=(n=yi(n,t)).length,o=!1;++r<i;){var u=Uo(n[r]);if(!(o=null!=t&&e(t,u)))break;t=t[u]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Qu(i)&&yo(u,i)&&(Du(t)||Wu(t))}function ho(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Be($t(t))}function vo(t){return Du(t)||Wu(t)||!!(Jt&&t&&t[Jt])}function yo(t,n){var e=typeof t;return!!(n=n??f)&&(\"number\"==e||\"symbol\"!=e&&yt.test(t))&&t>-1&&t%1==0&&t<n}function _o(t,n,e){if(!Yu(e))return!1;var r=typeof n;return!!(\"number\"==r?Ku(e)&&yo(n,e.length):\"string\"==r&&n in e)&&Bu(e[n],t)}function go(t,n){if(Du(t))return!1;var e=typeof t;return!(\"number\"!=e&&\"symbol\"!=e&&\"boolean\"!=e&&null!=t&&!aa(t))||Q.test(t)||!X.test(t)||null!=n&&t in Ot(n)}function mo(t){var n=ro(t),e=qe[n];if(\"function\"!=typeof e||!(n in We.prototype))return!1;if(t===e)return!0;var r=eo(e);return!!r&&t===r[0]}(je&&lo(new je(new ArrayBuffer(1)))!=R||Se&&lo(new Se)!=w||Oe&&lo(Oe.resolve())!=O||ke&&lo(new ke)!=x||xe&&lo(new xe)!=C)&&(lo=function(t){var n=Sr(t),e=n==S?t.constructor:r,i=e?No(e):\"\";if(i)switch(i){case Pe:return R;case Re:return w;case ze:return O;case Ee:return x;case Te:return C}return n});var bo=Rt?Vu:vc;function wo(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||Pt)}function jo(t){return t==t&&!Yu(t)}function So(t,n){return function(e){return null!=e&&e[t]===n&&(n!==r||t in Ot(e))}}function Oo(t,n,e){return n=ye(n===r?t.length-1:n,0),function(){for(var r=arguments,i=-1,o=ye(r.length-n,0),u=rt(o);++i<o;)u[i]=r[n+i];i=-1;for(var a=rt(n+1);++i<n;)a[i]=r[i];return a[n]=e(u),Sn(t,this,a)}}function ko(t,n){return n.length<2?t:wr(t,ti(n,0,-1))}function xo(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var Ao=Ro(Xr),Io=pn||function(t,n){return ln.setTimeout(t,n)},Co=Ro(Qr);function Po(t,n,e){var r=n+\"\";return Co(t,function(t,n){var e=n.length;if(!e)return t;var r=e-1;return n[r]=(e>1?\"& \":\"\")+n[r],n=n.join(e>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+n+\"] */\\n\")}(r,function(t,n){return kn(h,function(e){var r=\"_.\"+e[0];n&e[1]&&!Cn(t,r)&&t.push(r)}),t.sort()}(function(t){var n=t.match(ot);return n?n[1].split(ut):[]}(r),e)))}function Ro(t){var n=0,e=0;return function(){var i=ge(),o=16-(i-e);if(e=i,o>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(r,arguments)}}function zo(t,n){var e=-1,i=t.length,o=i-1;for(n=n===r?i:n;++e<n;){var u=Kr(e,o),a=t[u];t[u]=t[e],t[e]=a}return t.length=n,t}var Eo,To,Mo=(Eo=Eu(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(\"\"),t.replace(Y,function(t,e,r,i){n.push(r?i.replace(st,\"$1\"):e||t)}),n},function(t){return 500===To.size&&To.clear(),t}),To=Eo.cache,Eo);function Uo(t){if(\"string\"==typeof t||aa(t))return t;var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function No(t){if(null!=t){try{return zt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function qo(t){if(t instanceof We)return t.clone();var n=new Fe(t.__wrapped__,t.__chain__);return n.__actions__=xi(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}var Bo=Gr(function(t,n){return Hu(t)?sr(t,vr(n,1,Hu,!0)):[]}),Lo=Gr(function(t,n){var e=Zo(n);return Hu(e)&&(e=r),Hu(t)?sr(t,vr(n,1,Hu,!0),oo(e,2)):[]}),Fo=Gr(function(t,n){var e=Zo(n);return Hu(e)&&(e=r),Hu(t)?sr(t,vr(n,1,Hu,!0),r,e):[]});function Wo(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:ha(e);return i<0&&(i=ye(r+i,0)),qn(t,oo(n,3),i)}function Do(t,n,e){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return e!==r&&(o=ha(e),o=e<0?ye(i+o,0):_e(o,i-1)),qn(t,oo(n,3),o,!0)}function $o(t){return null!=t&&t.length?vr(t,1):[]}function Ko(t){return t&&t.length?t[0]:r}var Ho=Gr(function(t){var n=Rn(t,di);return n.length&&n[0]===t[0]?Ar(n):[]}),Go=Gr(function(t){var n=Zo(t),e=Rn(t,di);return n===Zo(e)?n=r:e.pop(),e.length&&e[0]===t[0]?Ar(e,oo(n,2)):[]}),Jo=Gr(function(t){var n=Zo(t),e=Rn(t,di);return(n=\"function\"==typeof n?n:r)&&e.pop(),e.length&&e[0]===t[0]?Ar(e,r,n):[]});function Zo(t){var n=null==t?0:t.length;return n?t[n-1]:r}var Vo=Gr(Xo);function Xo(t,n){return t&&t.length&&n&&n.length?Dr(t,n):t}var Qo=Yi(function(t,n){var e=null==t?0:t.length,r=ir(t,n);return $r(t,Rn(n,function(t){return yo(t,e)?+t:t}).sort(Si)),r});function Yo(t){return null==t?t:we.call(t)}var tu=Gr(function(t){return ai(vr(t,1,Hu,!0))}),nu=Gr(function(t){var n=Zo(t);return Hu(n)&&(n=r),ai(vr(t,1,Hu,!0),oo(n,2))}),eu=Gr(function(t){var n=Zo(t);return n=\"function\"==typeof n?n:r,ai(vr(t,1,Hu,!0),r,n)});function ru(t){if(!t||!t.length)return[];var n=0;return t=In(t,function(t){if(Hu(t))return n=ye(t.length,n),!0}),Gn(n,function(n){return Rn(t,Dn(n))})}function iu(t,n){if(!t||!t.length)return[];var e=ru(t);return null==n?e:Rn(e,function(t){return Sn(n,r,t)})}var ou=Gr(function(t,n){return Hu(t)?sr(t,n):[]}),uu=Gr(function(t){return pi(In(t,Hu))}),au=Gr(function(t){var n=Zo(t);return Hu(n)&&(n=r),pi(In(t,Hu),oo(n,2))}),cu=Gr(function(t){var n=Zo(t);return n=\"function\"==typeof n?n:r,pi(In(t,Hu),r,n)}),su=Gr(ru),fu=Gr(function(t){var n=t.length,e=n>1?t[n-1]:r;return e=\"function\"==typeof e?(t.pop(),e):r,iu(t,e)});function lu(t){var n=qe(t);return n.__chain__=!0,n}function pu(t,n){return n(t)}var hu=Yi(function(t){var n=t.length,e=n?t[0]:0,i=this.__wrapped__,o=function(n){return ir(n,t)};return!(n>1||this.__actions__.length)&&i instanceof We&&yo(e)?((i=i.slice(e,+e+(n?1:0))).__actions__.push({func:pu,args:[o],thisArg:r}),new Fe(i,this.__chain__).thru(function(t){return n&&!t.length&&t.push(r),t})):this.thru(o)}),du=Ii(function(t,n,e){Et.call(t,e)?++t[e]:rr(t,e,1)}),vu=Mi(Wo),yu=Mi(Do);function _u(t,n){return(Du(t)?kn:fr)(t,oo(n,3))}function gu(t,n){return(Du(t)?xn:lr)(t,oo(n,3))}var mu=Ii(function(t,n,e){Et.call(t,e)?t[e].push(n):rr(t,e,[n])}),bu=Gr(function(t,n,e){var r=-1,i=\"function\"==typeof n,o=Ku(t)?rt(t.length):[];return fr(t,function(t){o[++r]=i?Sn(n,t,e):Ir(t,n,e)}),o}),wu=Ii(function(t,n,e){rr(t,e,n)});function ju(t,n){return(Du(t)?Rn:Ur)(t,oo(n,3))}var Su=Ii(function(t,n,e){t[e?0:1].push(n)},function(){return[[],[]]}),Ou=Gr(function(t,n){if(null==t)return[];var e=n.length;return e>1&&_o(t,n[0],n[1])?n=[]:e>2&&_o(n[0],n[1],n[2])&&(n=[n[0]]),Fr(t,vr(n,1),[])}),ku=fn||function(){return ln.Date.now()};function xu(t,n,e){return n=e?r:n,n=t&&null==n?t.length:n,Ji(t,c,r,r,r,r,n)}function Au(t,n){var e;if(\"function\"!=typeof n)throw new At(i);return t=ha(t),function(){return--t>0&&(e=n.apply(this,arguments)),t<=1&&(n=r),e}}var Iu=Gr(function(t,n,e){var r=1;if(e.length){var i=ue(e,io(Iu));r|=a}return Ji(t,r,n,e,i)}),Cu=Gr(function(t,n,e){var r=3;if(e.length){var i=ue(e,io(Cu));r|=a}return Ji(n,r,t,e,i)});function Pu(t,n,e){var o,u,a,c,s,f,l=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new At(i);function v(n){var e=o,i=u;return o=u=r,l=n,c=t.apply(i,e)}function y(t){var e=t-f;return f===r||e>=n||e<0||h&&t-l>=a}function _(){var t=ku();if(y(t))return g(t);s=Io(_,function(t){var e=n-(t-f);return h?_e(e,a-(t-l)):e}(t))}function g(t){return s=r,d&&o?v(t):(o=u=r,c)}function m(){var t=ku(),e=y(t);if(o=arguments,u=this,f=t,e){if(s===r)return function(t){return l=t,s=Io(_,n),p?v(t):c}(f);if(h)return mi(s),s=Io(_,n),v(f)}return s===r&&(s=Io(_,n)),c}return n=va(n)||0,Yu(e)&&(p=!!e.leading,a=(h=\"maxWait\"in e)?ye(va(e.maxWait)||0,n):a,d=\"trailing\"in e?!!e.trailing:d),m.cancel=function(){s!==r&&mi(s),l=0,o=f=u=s=r},m.flush=function(){return s===r?c:g(ku())},m}var Ru=Gr(function(t,n){return cr(t,1,n)}),zu=Gr(function(t,n,e){return cr(t,va(n)||0,e)});function Eu(t,n){if(\"function\"!=typeof t||null!=n&&\"function\"!=typeof n)throw new At(i);var e=function(){var r=arguments,i=n?n.apply(this,r):r[0],o=e.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return e.cache=o.set(i,u)||o,u};return e.cache=new(Eu.Cache||Ke),e}function Tu(t){if(\"function\"!=typeof t)throw new At(i);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}Eu.Cache=Ke;var Mu=_i(function(t,n){var e=(n=1==n.length&&Du(n[0])?Rn(n[0],Zn(oo())):Rn(vr(n,1),Zn(oo()))).length;return Gr(function(r){for(var i=-1,o=_e(r.length,e);++i<o;)r[i]=n[i].call(this,r[i]);return Sn(t,this,r)})}),Uu=Gr(function(t,n){var e=ue(n,io(Uu));return Ji(t,a,r,n,e)}),Nu=Gr(function(t,n){var e=ue(n,io(Nu));return Ji(t,64,r,n,e)}),qu=Yi(function(t,n){return Ji(t,256,r,r,r,n)});function Bu(t,n){return t===n||t!=t&&n!=n}var Lu=Di(Or),Fu=Di(function(t,n){return t>=n}),Wu=Cr(function(){return arguments}())?Cr:function(t){return ta(t)&&Et.call(t,\"callee\")&&!Ht.call(t,\"callee\")},Du=rt.isArray,$u=_n?Zn(_n):function(t){return ta(t)&&Sr(t)==P};function Ku(t){return null!=t&&Qu(t.length)&&!Vu(t)}function Hu(t){return ta(t)&&Ku(t)}var Gu=Un||vc,Ju=gn?Zn(gn):function(t){return ta(t)&&Sr(t)==_};function Zu(t){if(!ta(t))return!1;var n=Sr(t);return n==g||\"[object DOMException]\"==n||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ra(t)}function Vu(t){if(!Yu(t))return!1;var n=Sr(t);return n==m||n==b||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function Xu(t){return\"number\"==typeof t&&t==ha(t)}function Qu(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=f}function Yu(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function ta(t){return null!=t&&\"object\"==typeof t}var na=mn?Zn(mn):function(t){return ta(t)&&lo(t)==w};function ea(t){return\"number\"==typeof t||ta(t)&&Sr(t)==j}function ra(t){if(!ta(t)||Sr(t)!=S)return!1;var n=$t(t);if(null===n)return!0;var e=Et.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof e&&e instanceof e&&zt.call(e)==Nt}var ia=bn?Zn(bn):function(t){return ta(t)&&Sr(t)==k},oa=wn?Zn(wn):function(t){return ta(t)&&lo(t)==x};function ua(t){return\"string\"==typeof t||!Du(t)&&ta(t)&&Sr(t)==A}function aa(t){return\"symbol\"==typeof t||ta(t)&&Sr(t)==I}var ca=jn?Zn(jn):function(t){return ta(t)&&Qu(t.length)&&!!rn[Sr(t)]},sa=Di(Mr),fa=Di(function(t,n){return t<=n});function la(t){if(!t)return[];if(Ku(t))return ua(t)?fe(t):xi(t);if(Xt&&t[Xt])return function(t){for(var n,e=[];!(n=t.next()).done;)e.push(n.value);return e}(t[Xt]());var n=lo(t);return(n==w?ie:n==x?ae:Ba)(t)}function pa(t){return t?(t=va(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ha(t){var n=pa(t),e=n%1;return n==n?e?n-e:n:0}function da(t){return t?or(ha(t),0,p):0}function va(t){if(\"number\"==typeof t)return t;if(aa(t))return l;if(Yu(t)){var n=\"function\"==typeof t.valueOf?t.valueOf():t;t=Yu(n)?n+\"\":n}if(\"string\"!=typeof t)return 0===t?t:+t;t=Jn(t);var e=ht.test(t);return e||vt.test(t)?cn(t.slice(2),e?2:8):pt.test(t)?l:+t}function ya(t){return Ai(t,Ra(t))}function _a(t){return null==t?\"\":ui(t)}var ga=Ci(function(t,n){if(wo(n)||Ku(n))Ai(n,Pa(n),t);else for(var e in n)Et.call(n,e)&&Ye(t,e,n[e])}),ma=Ci(function(t,n){Ai(n,Ra(n),t)}),ba=Ci(function(t,n,e,r){Ai(n,Ra(n),t,r)}),wa=Ci(function(t,n,e,r){Ai(n,Pa(n),t,r)}),ja=Yi(ir),Sa=Gr(function(t,n){t=Ot(t);var e=-1,i=n.length,o=i>2?n[2]:r;for(o&&_o(n[0],n[1],o)&&(i=1);++e<i;)for(var u=n[e],a=Ra(u),c=-1,s=a.length;++c<s;){var f=a[c],l=t[f];(l===r||Bu(l,Pt[f])&&!Et.call(t,f))&&(t[f]=u[f])}return t}),Oa=Gr(function(t){return t.push(r,Vi),Sn(Ea,r,t)});function ka(t,n,e){var i=null==t?r:wr(t,n);return i===r?e:i}function xa(t,n){return null!=t&&po(t,n,xr)}var Aa=qi(function(t,n,e){null!=n&&\"function\"!=typeof n.toString&&(n=Ut.call(n)),t[n]=e},Ya(ec)),Ia=qi(function(t,n,e){null!=n&&\"function\"!=typeof n.toString&&(n=Ut.call(n)),Et.call(t,n)?t[n].push(e):t[n]=[e]},oo),Ca=Gr(Ir);function Pa(t){return Ku(t)?Je(t):Tr(t)}function Ra(t){return Ku(t)?Je(t,!0):function(t){if(!Yu(t))return function(t){var n=[];if(null!=t)for(var e in Ot(t))n.push(e);return n}(t);var n=wo(t),e=[];for(var r in t)(\"constructor\"!=r||!n&&Et.call(t,r))&&e.push(r);return e}(t)}var za=Ci(function(t,n,e){Br(t,n,e)}),Ea=Ci(function(t,n,e,r){Br(t,n,e,r)}),Ta=Yi(function(t,n){var e={};if(null==t)return e;var r=!1;n=Rn(n,function(n){return n=yi(n,t),r||(r=n.length>1),n}),Ai(t,no(t),e),r&&(e=ur(e,7,Xi));for(var i=n.length;i--;)ci(e,n[i]);return e}),Ma=Yi(function(t,n){return null==t?{}:function(t,n){return Wr(t,n,function(n,e){return xa(t,e)})}(t,n)});function Ua(t,n){if(null==t)return{};var e=Rn(no(t),function(t){return[t]});return n=oo(n),Wr(t,e,function(t,e){return n(t,e[0])})}var Na=Gi(Pa),qa=Gi(Ra);function Ba(t){return null==t?[]:Vn(t,Pa(t))}var La=Ei(function(t,n,e){return n=n.toLowerCase(),t+(e?Fa(n):n)});function Fa(t){return Za(_a(t).toLowerCase())}function Wa(t){return(t=_a(t))&&t.replace(_t,te).replace(Vt,\"\")}var Da=Ei(function(t,n,e){return t+(e?\"-\":\"\")+n.toLowerCase()}),$a=Ei(function(t,n,e){return t+(e?\" \":\"\")+n.toLowerCase()}),Ka=zi(\"toLowerCase\"),Ha=Ei(function(t,n,e){return t+(e?\"_\":\"\")+n.toLowerCase()}),Ga=Ei(function(t,n,e){return t+(e?\" \":\"\")+Za(n)}),Ja=Ei(function(t,n,e){return t+(e?\" \":\"\")+n.toUpperCase()}),Za=zi(\"toUpperCase\");function Va(t,n,e){return t=_a(t),(n=e?r:n)===r?function(t){return tn.test(t)}(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(n)||[]}var Xa=Gr(function(t,n){try{return Sn(t,r,n)}catch(t){return Zu(t)?t:new wt(t)}}),Qa=Yi(function(t,n){return kn(n,function(n){n=Uo(n),rr(t,n,Iu(t[n],t))}),t});function Ya(t){return function(){return t}}var tc=Ui(),nc=Ui(!0);function ec(t){return t}function rc(t){return Er(\"function\"==typeof t?t:ur(t,1))}var ic=Gr(function(t,n){return function(e){return Ir(e,t,n)}}),oc=Gr(function(t,n){return function(e){return Ir(t,e,n)}});function uc(t,n,e){var r=Pa(n),i=br(n,r);null!=e||Yu(n)&&(i.length||!r.length)||(e=n,n=t,t=this,i=br(n,Pa(n)));var o=!(Yu(e)&&\"chain\"in e&&!e.chain),u=Vu(t);return kn(i,function(e){var r=n[e];t[e]=r,u&&(t.prototype[e]=function(){var n=this.__chain__;if(o||n){var e=t(this.__wrapped__);return(e.__actions__=xi(this.__actions__)).push({func:r,args:arguments,thisArg:t}),e.__chain__=n,e}return r.apply(t,zn([this.value()],arguments))})}),t}function ac(){}var cc=Li(Rn),sc=Li(An),fc=Li(Mn);function lc(t){return go(t)?Dn(Uo(t)):function(t){return function(n){return wr(n,t)}}(t)}var pc=Wi(),hc=Wi(!0);function dc(){return[]}function vc(){return!1}var yc,_c=Bi(function(t,n){return t+n},0),gc=Ki(\"ceil\"),mc=Bi(function(t,n){return t/n},1),bc=Ki(\"floor\"),wc=Bi(function(t,n){return t*n},1),jc=Ki(\"round\"),Sc=Bi(function(t,n){return t-n},0);return qe.after=function(t,n){if(\"function\"!=typeof n)throw new At(i);return t=ha(t),function(){if(--t<1)return n.apply(this,arguments)}},qe.ary=xu,qe.assign=ga,qe.assignIn=ma,qe.assignInWith=ba,qe.assignWith=wa,qe.at=ja,qe.before=Au,qe.bind=Iu,qe.bindAll=Qa,qe.bindKey=Cu,qe.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Du(t)?t:[t]},qe.chain=lu,qe.chunk=function(t,n,e){n=(e?_o(t,n,e):n===r)?1:ye(ha(n),0);var i=null==t?0:t.length;if(!i||n<1)return[];for(var o=0,u=0,a=rt(hn(i/n));o<i;)a[u++]=ti(t,o,o+=n);return a},qe.compact=function(t){for(var n=-1,e=null==t?0:t.length,r=0,i=[];++n<e;){var o=t[n];o&&(i[r++]=o)}return i},qe.concat=function(){var t=arguments.length;if(!t)return[];for(var n=rt(t-1),e=arguments[0],r=t;r--;)n[r-1]=arguments[r];return zn(Du(e)?xi(e):[e],vr(n,1))},qe.cond=function(t){var n=null==t?0:t.length,e=oo();return t=n?Rn(t,function(t){if(\"function\"!=typeof t[1])throw new At(i);return[e(t[0]),t[1]]}):[],Gr(function(e){for(var r=-1;++r<n;){var i=t[r];if(Sn(i[0],this,e))return Sn(i[1],this,e)}})},qe.conforms=function(t){return function(t){var n=Pa(t);return function(e){return ar(e,t,n)}}(ur(t,1))},qe.constant=Ya,qe.countBy=du,qe.create=function(t,n){var e=Be(t);return null==n?e:er(e,n)},qe.curry=function t(n,e,i){var o=Ji(n,8,r,r,r,r,r,e=i?r:e);return o.placeholder=t.placeholder,o},qe.curryRight=function t(n,e,i){var o=Ji(n,16,r,r,r,r,r,e=i?r:e);return o.placeholder=t.placeholder,o},qe.debounce=Pu,qe.defaults=Sa,qe.defaultsDeep=Oa,qe.defer=Ru,qe.delay=zu,qe.difference=Bo,qe.differenceBy=Lo,qe.differenceWith=Fo,qe.drop=function(t,n,e){var i=null==t?0:t.length;return i?ti(t,(n=e||n===r?1:ha(n))<0?0:n,i):[]},qe.dropRight=function(t,n,e){var i=null==t?0:t.length;return i?ti(t,0,(n=i-(n=e||n===r?1:ha(n)))<0?0:n):[]},qe.dropRightWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!0,!0):[]},qe.dropWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!0):[]},qe.fill=function(t,n,e,i){var o=null==t?0:t.length;return o?(e&&\"number\"!=typeof e&&_o(t,n,e)&&(e=0,i=o),function(t,n,e,i){var o=t.length;for((e=ha(e))<0&&(e=-e>o?0:o+e),(i=i===r||i>o?o:ha(i))<0&&(i+=o),i=e>i?0:da(i);e<i;)t[e++]=n;return t}(t,n,e,i)):[]},qe.filter=function(t,n){return(Du(t)?In:dr)(t,oo(n,3))},qe.flatMap=function(t,n){return vr(ju(t,n),1)},qe.flatMapDeep=function(t,n){return vr(ju(t,n),s)},qe.flatMapDepth=function(t,n,e){return e=e===r?1:ha(e),vr(ju(t,n),e)},qe.flatten=$o,qe.flattenDeep=function(t){return null!=t&&t.length?vr(t,s):[]},qe.flattenDepth=function(t,n){return null!=t&&t.length?vr(t,n=n===r?1:ha(n)):[]},qe.flip=function(t){return Ji(t,512)},qe.flow=tc,qe.flowRight=nc,qe.fromPairs=function(t){for(var n=-1,e=null==t?0:t.length,r={};++n<e;){var i=t[n];rr(r,i[0],i[1])}return r},qe.functions=function(t){return null==t?[]:br(t,Pa(t))},qe.functionsIn=function(t){return null==t?[]:br(t,Ra(t))},qe.groupBy=mu,qe.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},qe.intersection=Ho,qe.intersectionBy=Go,qe.intersectionWith=Jo,qe.invert=Aa,qe.invertBy=Ia,qe.invokeMap=bu,qe.iteratee=rc,qe.keyBy=wu,qe.keys=Pa,qe.keysIn=Ra,qe.map=ju,qe.mapKeys=function(t,n){var e={};return n=oo(n,3),gr(t,function(t,r,i){rr(e,n(t,r,i),t)}),e},qe.mapValues=function(t,n){var e={};return n=oo(n,3),gr(t,function(t,r,i){rr(e,r,n(t,r,i))}),e},qe.matches=function(t){return Nr(ur(t,1))},qe.matchesProperty=function(t,n){return qr(t,ur(n,1))},qe.memoize=Eu,qe.merge=za,qe.mergeWith=Ea,qe.method=ic,qe.methodOf=oc,qe.mixin=uc,qe.negate=Tu,qe.nthArg=function(t){return t=ha(t),Gr(function(n){return Lr(n,t)})},qe.omit=Ta,qe.omitBy=function(t,n){return Ua(t,Tu(oo(n)))},qe.once=function(t){return Au(2,t)},qe.orderBy=function(t,n,e,i){return null==t?[]:(Du(n)||(n=null==n?[]:[n]),Du(e=i?r:e)||(e=null==e?[]:[e]),Fr(t,n,e))},qe.over=cc,qe.overArgs=Mu,qe.overEvery=sc,qe.overSome=fc,qe.partial=Uu,qe.partialRight=Nu,qe.partition=Su,qe.pick=Ma,qe.pickBy=Ua,qe.property=lc,qe.propertyOf=function(t){return function(n){return null==t?r:wr(t,n)}},qe.pull=Vo,qe.pullAll=Xo,qe.pullAllBy=function(t,n,e){return t&&t.length&&n&&n.length?Dr(t,n,oo(e,2)):t},qe.pullAllWith=function(t,n,e){return t&&t.length&&n&&n.length?Dr(t,n,r,e):t},qe.pullAt=Qo,qe.range=pc,qe.rangeRight=hc,qe.rearg=qu,qe.reject=function(t,n){return(Du(t)?In:dr)(t,Tu(oo(n,3)))},qe.remove=function(t,n){var e=[];if(!t||!t.length)return e;var r=-1,i=[],o=t.length;for(n=oo(n,3);++r<o;){var u=t[r];n(u,r,t)&&(e.push(u),i.push(r))}return $r(t,i),e},qe.rest=function(t,n){if(\"function\"!=typeof t)throw new At(i);return Gr(t,n=n===r?n:ha(n))},qe.reverse=Yo,qe.sampleSize=function(t,n,e){return n=(e?_o(t,n,e):n===r)?1:ha(n),(Du(t)?Ve:Zr)(t,n)},qe.set=function(t,n,e){return null==t?t:Vr(t,n,e)},qe.setWith=function(t,n,e,i){return i=\"function\"==typeof i?i:r,null==t?t:Vr(t,n,e,i)},qe.shuffle=function(t){return(Du(t)?Xe:Yr)(t)},qe.slice=function(t,n,e){var i=null==t?0:t.length;return i?(e&&\"number\"!=typeof e&&_o(t,n,e)?(n=0,e=i):(n=null==n?0:ha(n),e=e===r?i:ha(e)),ti(t,n,e)):[]},qe.sortBy=Ou,qe.sortedUniq=function(t){return t&&t.length?ii(t):[]},qe.sortedUniqBy=function(t,n){return t&&t.length?ii(t,oo(n,2)):[]},qe.split=function(t,n,e){return e&&\"number\"!=typeof e&&_o(t,n,e)&&(n=e=r),(e=e===r?p:e>>>0)?(t=_a(t))&&(\"string\"==typeof n||null!=n&&!ia(n))&&!(n=ui(n))&&re(t)?gi(fe(t),0,e):t.split(n,e):[]},qe.spread=function(t,n){if(\"function\"!=typeof t)throw new At(i);return n=null==n?0:ye(ha(n),0),Gr(function(e){var r=e[n],i=gi(e,0,n);return r&&zn(i,r),Sn(t,this,i)})},qe.tail=function(t){var n=null==t?0:t.length;return n?ti(t,1,n):[]},qe.take=function(t,n,e){return t&&t.length?ti(t,0,(n=e||n===r?1:ha(n))<0?0:n):[]},qe.takeRight=function(t,n,e){var i=null==t?0:t.length;return i?ti(t,(n=i-(n=e||n===r?1:ha(n)))<0?0:n,i):[]},qe.takeRightWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!1,!0):[]},qe.takeWhile=function(t,n){return t&&t.length?fi(t,oo(n,3)):[]},qe.tap=function(t,n){return n(t),t},qe.throttle=function(t,n,e){var r=!0,o=!0;if(\"function\"!=typeof t)throw new At(i);return Yu(e)&&(r=\"leading\"in e?!!e.leading:r,o=\"trailing\"in e?!!e.trailing:o),Pu(t,n,{leading:r,maxWait:n,trailing:o})},qe.thru=pu,qe.toArray=la,qe.toPairs=Na,qe.toPairsIn=qa,qe.toPath=function(t){return Du(t)?Rn(t,Uo):aa(t)?[t]:xi(Mo(_a(t)))},qe.toPlainObject=ya,qe.transform=function(t,n,e){var r=Du(t),i=r||Gu(t)||ca(t);if(n=oo(n,4),null==e){var o=t&&t.constructor;e=i?r?new o:[]:Yu(t)&&Vu(o)?Be($t(t)):{}}return(i?kn:gr)(t,function(t,r,i){return n(e,t,r,i)}),e},qe.unary=function(t){return xu(t,1)},qe.union=tu,qe.unionBy=nu,qe.unionWith=eu,qe.uniq=function(t){return t&&t.length?ai(t):[]},qe.uniqBy=function(t,n){return t&&t.length?ai(t,oo(n,2)):[]},qe.uniqWith=function(t,n){return n=\"function\"==typeof n?n:r,t&&t.length?ai(t,r,n):[]},qe.unset=function(t,n){return null==t||ci(t,n)},qe.unzip=ru,qe.unzipWith=iu,qe.update=function(t,n,e){return null==t?t:si(t,n,vi(e))},qe.updateWith=function(t,n,e,i){return i=\"function\"==typeof i?i:r,null==t?t:si(t,n,vi(e),i)},qe.values=Ba,qe.valuesIn=function(t){return null==t?[]:Vn(t,Ra(t))},qe.without=ou,qe.words=Va,qe.wrap=function(t,n){return Uu(vi(n),t)},qe.xor=uu,qe.xorBy=au,qe.xorWith=cu,qe.zip=su,qe.zipObject=function(t,n){return hi(t||[],n||[],Ye)},qe.zipObjectDeep=function(t,n){return hi(t||[],n||[],Vr)},qe.zipWith=fu,qe.entries=Na,qe.entriesIn=qa,qe.extend=ma,qe.extendWith=ba,uc(qe,qe),qe.add=_c,qe.attempt=Xa,qe.camelCase=La,qe.capitalize=Fa,qe.ceil=gc,qe.clamp=function(t,n,e){return e===r&&(e=n,n=r),e!==r&&(e=(e=va(e))==e?e:0),n!==r&&(n=(n=va(n))==n?n:0),or(va(t),n,e)},qe.clone=function(t){return ur(t,4)},qe.cloneDeep=function(t){return ur(t,5)},qe.cloneDeepWith=function(t,n){return ur(t,5,n=\"function\"==typeof n?n:r)},qe.cloneWith=function(t,n){return ur(t,4,n=\"function\"==typeof n?n:r)},qe.conformsTo=function(t,n){return null==n||ar(t,n,Pa(n))},qe.deburr=Wa,qe.defaultTo=function(t,n){return null==t||t!=t?n:t},qe.divide=mc,qe.endsWith=function(t,n,e){t=_a(t),n=ui(n);var i=t.length,o=e=e===r?i:or(ha(e),0,i);return(e-=n.length)>=0&&t.slice(e,o)==n},qe.eq=Bu,qe.escape=function(t){return(t=_a(t))&&G.test(t)?t.replace(K,ne):t},qe.escapeRegExp=function(t){return(t=_a(t))&&nt.test(t)?t.replace(tt,\"\\\\$&\"):t},qe.every=function(t,n,e){var i=Du(t)?An:pr;return e&&_o(t,n,e)&&(n=r),i(t,oo(n,3))},qe.find=vu,qe.findIndex=Wo,qe.findKey=function(t,n){return Nn(t,oo(n,3),gr)},qe.findLast=yu,qe.findLastIndex=Do,qe.findLastKey=function(t,n){return Nn(t,oo(n,3),mr)},qe.floor=bc,qe.forEach=_u,qe.forEachRight=gu,qe.forIn=function(t,n){return null==t?t:yr(t,oo(n,3),Ra)},qe.forInRight=function(t,n){return null==t?t:_r(t,oo(n,3),Ra)},qe.forOwn=function(t,n){return t&&gr(t,oo(n,3))},qe.forOwnRight=function(t,n){return t&&mr(t,oo(n,3))},qe.get=ka,qe.gt=Lu,qe.gte=Fu,qe.has=function(t,n){return null!=t&&po(t,n,kr)},qe.hasIn=xa,qe.head=Ko,qe.identity=ec,qe.includes=function(t,n,e,r){t=Ku(t)?t:Ba(t),e=e&&!r?ha(e):0;var i=t.length;return e<0&&(e=ye(i+e,0)),ua(t)?e<=i&&t.indexOf(n,e)>-1:!!i&&Bn(t,n,e)>-1},qe.indexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:ha(e);return i<0&&(i=ye(r+i,0)),Bn(t,n,i)},qe.inRange=function(t,n,e){return n=pa(n),e===r?(e=n,n=0):e=pa(e),function(t,n,e){return t>=_e(n,e)&&t<ye(n,e)}(t=va(t),n,e)},qe.invoke=Ca,qe.isArguments=Wu,qe.isArray=Du,qe.isArrayBuffer=$u,qe.isArrayLike=Ku,qe.isArrayLikeObject=Hu,qe.isBoolean=function(t){return!0===t||!1===t||ta(t)&&Sr(t)==y},qe.isBuffer=Gu,qe.isDate=Ju,qe.isElement=function(t){return ta(t)&&1===t.nodeType&&!ra(t)},qe.isEmpty=function(t){if(null==t)return!0;if(Ku(t)&&(Du(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Gu(t)||ca(t)||Wu(t)))return!t.length;var n=lo(t);if(n==w||n==x)return!t.size;if(wo(t))return!Tr(t).length;for(var e in t)if(Et.call(t,e))return!1;return!0},qe.isEqual=function(t,n){return Pr(t,n)},qe.isEqualWith=function(t,n,e){var i=(e=\"function\"==typeof e?e:r)?e(t,n):r;return i===r?Pr(t,n,r,e):!!i},qe.isError=Zu,qe.isFinite=function(t){return\"number\"==typeof t&&$n(t)},qe.isFunction=Vu,qe.isInteger=Xu,qe.isLength=Qu,qe.isMap=na,qe.isMatch=function(t,n){return t===n||Rr(t,n,ao(n))},qe.isMatchWith=function(t,n,e){return e=\"function\"==typeof e?e:r,Rr(t,n,ao(n),e)},qe.isNaN=function(t){return ea(t)&&t!=+t},qe.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return zr(t)},qe.isNil=function(t){return null==t},qe.isNull=function(t){return null===t},qe.isNumber=ea,qe.isObject=Yu,qe.isObjectLike=ta,qe.isPlainObject=ra,qe.isRegExp=ia,qe.isSafeInteger=function(t){return Xu(t)&&t>=-9007199254740991&&t<=f},qe.isSet=oa,qe.isString=ua,qe.isSymbol=aa,qe.isTypedArray=ca,qe.isUndefined=function(t){return t===r},qe.isWeakMap=function(t){return ta(t)&&lo(t)==C},qe.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==Sr(t)},qe.join=function(t,n){return null==t?\"\":de.call(t,n)},qe.kebabCase=Da,qe.last=Zo,qe.lastIndexOf=function(t,n,e){var i=null==t?0:t.length;if(!i)return-1;var o=i;return e!==r&&(o=(o=ha(e))<0?ye(i+o,0):_e(o,i-1)),n==n?function(t,n,e){for(var r=e+1;r--;)if(t[r]===n)return r;return r}(t,n,o):qn(t,Fn,o,!0)},qe.lowerCase=$a,qe.lowerFirst=Ka,qe.lt=sa,qe.lte=fa,qe.max=function(t){return t&&t.length?hr(t,ec,Or):r},qe.maxBy=function(t,n){return t&&t.length?hr(t,oo(n,2),Or):r},qe.mean=function(t){return Wn(t,ec)},qe.meanBy=function(t,n){return Wn(t,oo(n,2))},qe.min=function(t){return t&&t.length?hr(t,ec,Mr):r},qe.minBy=function(t,n){return t&&t.length?hr(t,oo(n,2),Mr):r},qe.stubArray=dc,qe.stubFalse=vc,qe.stubObject=function(){return{}},qe.stubString=function(){return\"\"},qe.stubTrue=function(){return!0},qe.multiply=wc,qe.nth=function(t,n){return t&&t.length?Lr(t,ha(n)):r},qe.noConflict=function(){return ln._===this&&(ln._=qt),this},qe.noop=ac,qe.now=ku,qe.pad=function(t,n,e){t=_a(t);var r=(n=ha(n))?se(t):0;if(!n||r>=n)return t;var i=(n-r)/2;return Fi(vn(i),e)+t+Fi(hn(i),e)},qe.padEnd=function(t,n,e){t=_a(t);var r=(n=ha(n))?se(t):0;return n&&r<n?t+Fi(n-r,e):t},qe.padStart=function(t,n,e){t=_a(t);var r=(n=ha(n))?se(t):0;return n&&r<n?Fi(n-r,e)+t:t},qe.parseInt=function(t,n,e){return e||null==n?n=0:n&&(n=+n),me(_a(t).replace(et,\"\"),n||0)},qe.random=function(t,n,e){if(e&&\"boolean\"!=typeof e&&_o(t,n,e)&&(n=e=r),e===r&&(\"boolean\"==typeof n?(e=n,n=r):\"boolean\"==typeof t&&(e=t,t=r)),t===r&&n===r?(t=0,n=1):(t=pa(t),n===r?(n=t,t=0):n=pa(n)),t>n){var i=t;t=n,n=i}if(e||t%1||n%1){var o=be();return _e(t+o*(n-t+an(\"1e-\"+((o+\"\").length-1))),n)}return Kr(t,n)},qe.reduce=function(t,n,e){var r=Du(t)?En:Kn,i=arguments.length<3;return r(t,oo(n,4),e,i,fr)},qe.reduceRight=function(t,n,e){var r=Du(t)?Tn:Kn,i=arguments.length<3;return r(t,oo(n,4),e,i,lr)},qe.repeat=function(t,n,e){return n=(e?_o(t,n,e):n===r)?1:ha(n),Hr(_a(t),n)},qe.replace=function(){var t=arguments,n=_a(t[0]);return t.length<3?n:n.replace(t[1],t[2])},qe.result=function(t,n,e){var i=-1,o=(n=yi(n,t)).length;for(o||(o=1,t=r);++i<o;){var u=null==t?r:t[Uo(n[i])];u===r&&(i=o,u=e),t=Vu(u)?u.call(t):u}return t},qe.round=jc,qe.runInContext=t,qe.sample=function(t){return(Du(t)?Ze:Jr)(t)},qe.size=function(t){if(null==t)return 0;if(Ku(t))return ua(t)?se(t):t.length;var n=lo(t);return n==w||n==x?t.size:Tr(t).length},qe.snakeCase=Ha,qe.some=function(t,n,e){var i=Du(t)?Mn:ni;return e&&_o(t,n,e)&&(n=r),i(t,oo(n,3))},qe.sortedIndex=function(t,n){return ei(t,n)},qe.sortedIndexBy=function(t,n,e){return ri(t,n,oo(e,2))},qe.sortedIndexOf=function(t,n){var e=null==t?0:t.length;if(e){var r=ei(t,n);if(r<e&&Bu(t[r],n))return r}return-1},qe.sortedLastIndex=function(t,n){return ei(t,n,!0)},qe.sortedLastIndexBy=function(t,n,e){return ri(t,n,oo(e,2),!0)},qe.sortedLastIndexOf=function(t,n){if(null!=t&&t.length){var e=ei(t,n,!0)-1;if(Bu(t[e],n))return e}return-1},qe.startCase=Ga,qe.startsWith=function(t,n,e){return t=_a(t),e=null==e?0:or(ha(e),0,t.length),n=ui(n),t.slice(e,e+n.length)==n},qe.subtract=Sc,qe.sum=function(t){return t&&t.length?Hn(t,ec):0},qe.sumBy=function(t,n){return t&&t.length?Hn(t,oo(n,2)):0},qe.template=function(t,n,e){var i=qe.templateSettings;e&&_o(t,n,e)&&(n=r),t=_a(t),n=wa({},n,i,Zi);var o=wa({},n.imports,i.imports,Zi),u=Pa(o),a=Vn(o,u);kn(u,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,f=0,l=n.interpolate||gt,p=\"__p += '\",h=kt((n.escape||gt).source+\"|\"+l.source+\"|\"+(l===V?ft:gt).source+\"|\"+(n.evaluate||gt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Et.call(n,\"sourceURL\")?(n.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++en+\"]\")+\"\\n\";t.replace(h,function(n,e,r,i,o,u){return r||(r=i),p+=t.slice(f,u).replace(mt,ee),e&&(c=!0,p+=\"' +\\n__e(\"+e+\") +\\n'\"),o&&(s=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),f=u+n.length,n}),p+=\"';\\n\";var v=Et.call(n,\"variable\")&&n.variable;if(v){if(ct.test(v))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(F,\"\"):p).replace(W,\"$1\").replace(D,\"$1;\"),p=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var y=Xa(function(){return jt(u,d+\"return \"+p).apply(r,a)});if(y.source=p,Zu(y))throw y;return y},qe.times=function(t,n){if((t=ha(t))<1||t>f)return[];var e=p,r=_e(t,p);n=oo(n),t-=p;for(var i=Gn(r,n);++e<t;)n(e);return i},qe.toFinite=pa,qe.toInteger=ha,qe.toLength=da,qe.toLower=function(t){return _a(t).toLowerCase()},qe.toNumber=va,qe.toSafeInteger=function(t){return t?or(ha(t),-9007199254740991,f):0===t?t:0},qe.toString=_a,qe.toUpper=function(t){return _a(t).toUpperCase()},qe.trim=function(t,n,e){if((t=_a(t))&&(e||n===r))return Jn(t);if(!t||!(n=ui(n)))return t;var i=fe(t),o=fe(n);return gi(i,Qn(i,o),Yn(i,o)+1).join(\"\")},qe.trimEnd=function(t,n,e){if((t=_a(t))&&(e||n===r))return t.slice(0,le(t)+1);if(!t||!(n=ui(n)))return t;var i=fe(t);return gi(i,0,Yn(i,fe(n))+1).join(\"\")},qe.trimStart=function(t,n,e){if((t=_a(t))&&(e||n===r))return t.replace(et,\"\");if(!t||!(n=ui(n)))return t;var i=fe(t);return gi(i,Qn(i,fe(n))).join(\"\")},qe.truncate=function(t,n){var e=30,i=\"...\";if(Yu(n)){var o=\"separator\"in n?n.separator:o;e=\"length\"in n?ha(n.length):e,i=\"omission\"in n?ui(n.omission):i}var u=(t=_a(t)).length;if(re(t)){var a=fe(t);u=a.length}if(e>=u)return t;var c=e-se(i);if(c<1)return i;var s=a?gi(a,0,c).join(\"\"):t.slice(0,c);if(o===r)return s+i;if(a&&(c+=s.length-c),ia(o)){if(t.slice(c).search(o)){var f,l=s;for(o.global||(o=kt(o.source,_a(lt.exec(o))+\"g\")),o.lastIndex=0;f=o.exec(l);)var p=f.index;s=s.slice(0,p===r?c:p)}}else if(t.indexOf(ui(o),c)!=c){var h=s.lastIndexOf(o);h>-1&&(s=s.slice(0,h))}return s+i},qe.unescape=function(t){return(t=_a(t))&&H.test(t)?t.replace($,pe):t},qe.uniqueId=function(t){var n=++Tt;return _a(t)+n},qe.upperCase=Ja,qe.upperFirst=Za,qe.each=_u,qe.eachRight=gu,qe.first=Ko,uc(qe,(yc={},gr(qe,function(t,n){Et.call(qe.prototype,n)||(yc[n]=t)}),yc),{chain:!1}),qe.VERSION=\"4.18.1\",kn([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){qe[t].placeholder=qe}),kn([\"drop\",\"take\"],function(t,n){We.prototype[t]=function(e){e=e===r?1:ye(ha(e),0);var i=this.__filtered__&&!n?new We(this):this.clone();return i.__filtered__?i.__takeCount__=_e(e,i.__takeCount__):i.__views__.push({size:_e(e,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},We.prototype[t+\"Right\"]=function(n){return this.reverse()[t](n).reverse()}}),kn([\"filter\",\"map\",\"takeWhile\"],function(t,n){var e=n+1,r=1==e||3==e;We.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:oo(t,3),type:e}),n.__filtered__=n.__filtered__||r,n}}),kn([\"head\",\"last\"],function(t,n){var e=\"take\"+(n?\"Right\":\"\");We.prototype[t]=function(){return this[e](1).value()[0]}}),kn([\"initial\",\"tail\"],function(t,n){var e=\"drop\"+(n?\"\":\"Right\");We.prototype[t]=function(){return this.__filtered__?new We(this):this[e](1)}}),We.prototype.compact=function(){return this.filter(ec)},We.prototype.find=function(t){return this.filter(t).head()},We.prototype.findLast=function(t){return this.reverse().find(t)},We.prototype.invokeMap=Gr(function(t,n){return\"function\"==typeof t?new We(this):this.map(function(e){return Ir(e,t,n)})}),We.prototype.reject=function(t){return this.filter(Tu(oo(t)))},We.prototype.slice=function(t,n){t=ha(t);var e=this;return e.__filtered__&&(t>0||n<0)?new We(e):(t<0?e=e.takeRight(-t):t&&(e=e.drop(t)),n!==r&&(e=(n=ha(n))<0?e.dropRight(-n):e.take(n-t)),e)},We.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},We.prototype.toArray=function(){return this.take(p)},gr(We.prototype,function(t,n){var e=/^(?:filter|find|map|reject)|While$/.test(n),i=/^(?:head|last)$/.test(n),o=qe[i?\"take\"+(\"last\"==n?\"Right\":\"\"):n],u=i||/^find/.test(n);o&&(qe.prototype[n]=function(){var n=this.__wrapped__,a=i?[1]:arguments,c=n instanceof We,s=a[0],f=c||Du(n),l=function(t){var n=o.apply(qe,zn([t],a));return i&&p?n[0]:n};f&&e&&\"function\"==typeof s&&1!=s.length&&(c=f=!1);var p=this.__chain__,h=!!this.__actions__.length,d=u&&!p,v=c&&!h;if(!u&&f){n=v?n:new We(this);var y=t.apply(n,a);return y.__actions__.push({func:pu,args:[l],thisArg:r}),new Fe(y,p)}return d&&v?t.apply(this,a):(y=this.thru(l),d?i?y.value()[0]:y.value():y)})}),kn([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var n=It[t],e=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);qe.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return n.apply(Du(i)?i:[],t)}return this[e](function(e){return n.apply(Du(e)?e:[],t)})}}),gr(We.prototype,function(t,n){var e=qe[n];if(e){var r=e.name+\"\";Et.call(Ce,r)||(Ce[r]=[]),Ce[r].push({name:n,func:e})}}),Ce[Ni(r,2).name]=[{name:\"wrapper\",func:r}],We.prototype.clone=function(){var t=new We(this.__wrapped__);return t.__actions__=xi(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=xi(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=xi(this.__views__),t},We.prototype.reverse=function(){if(this.__filtered__){var t=new We(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},We.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,e=Du(t),r=n<0,i=e?t.length:0,o=function(t,n,e){for(var r=-1,i=e.length;++r<i;){var o=e[r],u=o.size;switch(o.type){case\"drop\":t+=u;break;case\"dropRight\":n-=u;break;case\"take\":n=_e(n,t+u);break;case\"takeRight\":t=ye(t,n-u)}}return{start:t,end:n}}(0,i,this.__views__),u=o.start,a=o.end,c=a-u,s=r?a:u-1,f=this.__iteratees__,l=f.length,p=0,h=_e(c,this.__takeCount__);if(!e||!r&&i==c&&h==c)return li(t,this.__actions__);var d=[];t:for(;c--&&p<h;){for(var v=-1,y=t[s+=n];++v<l;){var _=f[v],g=_.iteratee,m=_.type,b=g(y);if(2==m)y=b;else if(!b){if(1==m)continue t;break t}}d[p++]=y}return d},qe.prototype.at=hu,qe.prototype.chain=function(){return lu(this)},qe.prototype.commit=function(){return new Fe(this.value(),this.__chain__)},qe.prototype.next=function(){this.__values__===r&&(this.__values__=la(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},qe.prototype.plant=function(t){for(var n,e=this;e instanceof Le;){var i=qo(e);i.__index__=0,i.__values__=r,n?o.__wrapped__=i:n=i;var o=i;e=e.__wrapped__}return o.__wrapped__=t,n},qe.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof We){var n=t;return this.__actions__.length&&(n=new We(this)),(n=n.reverse()).__actions__.push({func:pu,args:[Yo],thisArg:r}),new Fe(n,this.__chain__)}return this.thru(Yo)},qe.prototype.toJSON=qe.prototype.valueOf=qe.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},qe.prototype.first=qe.prototype.head,Xt&&(qe.prototype[Xt]=function(){return this}),qe}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(ln._=he,define(function(){return he})):hn?((hn.exports=he)._=he,pn._=he):ln._=he}.call(this)},1657(t){\"use strict\";t.exports=(t,n)=>{if(\"string\"!=typeof t||\"string\"!=typeof n)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===n)return[t];const e=t.indexOf(n);return-1===e?[t]:[t.slice(0,e),t.slice(e+n.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,n,e){\"use strict\";e.d(n,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var i in n=arguments[e])Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},n={};function e(r){var i=n[r];if(void 0!==i)return i.exports;var o=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";e.r(r),e.d(r,{createKlarnaPaymentStrategy:()=>j,createKlarnaV2PaymentStrategy:()=>z});var t=e(315);function n(t,n){return Object.assign(t,{resolveIds:n})}var i,o,u=e(9440);class a extends Error{constructor(t){var n;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",n=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class c extends a{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class s extends a{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(i||(i={}));class f extends a{constructor(t){super(function(t){switch(t){case i.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case i.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case i.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case i.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case i.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case i.MissingCheckoutConfig:case i.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case i.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case i.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case i.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case i.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case i.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case i.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(o||(o={}));class l extends a{constructor(t){super(function(t){switch(t){case o.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case o.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case o.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case o.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class p extends a{constructor(t){super(t||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}const h={body:{},headers:{},status:0};class d extends a{constructor(t,{message:n,errors:e}={}){const{body:r,headers:i,status:o}=t||h;super(n||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=i,this.status=o,this.errors=e||[]}}class v extends d{constructor(t){super(t,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}const y=[\"AT\",\"BE\",\"CA\",\"CH\",\"CZ\",\"DE\",\"DK\",\"ES\",\"FI\",\"FR\",\"GB\",\"GR\",\"IE\",\"IT\",\"NL\",\"NO\",\"NZ\",\"PL\",\"PT\",\"SE\"],_=[\"AU\"];var g=function(t,n,e,r){return new(e||(e=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e(function(t){t(n)})).then(u,a)}c((r=r.apply(t,n||[])).next())})};class m{constructor(t,n){this.paymentIntegrationService=t,this.klarnaScriptLoader=n}initialize(t){return g(this,void 0,void 0,function*(){this.klarnaCredit=yield this.klarnaScriptLoader.load(),this.unsubscribe=this.paymentIntegrationService.subscribe(n=>{n.isPaymentMethodInitialized({methodId:t.methodId,gatewayId:t.gatewayId})&&this.loadWidget(t)},t=>{const n=t.getCheckout();return n&&n.outstandingBalance},t=>{const n=t.getCheckout();return n&&n.coupons}),yield this.loadWidget(t)})}deinitialize(){return this.unsubscribe&&this.unsubscribe(),Promise.resolve()}execute(t,n){return g(this,void 0,void 0,function*(){if(!t.payment)throw new c('Unable to proceed because \"payload.payment\" argument is not provided.');const e=t.payment,{paymentData:r}=e,i=function(t,n){var e={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&n.indexOf(r)<0&&(e[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)n.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(e[r[i]]=t[r[i]])}return e}(e,[\"paymentData\"]),{authorization_token:o}=yield this.authorize();yield this.paymentIntegrationService.initializePayment(i.methodId,{authorizationToken:o}),yield this.paymentIntegrationService.submitOrder(Object.assign(Object.assign({},t),{payment:i,useStoreCredit:t.useStoreCredit}),n)})}finalize(){return Promise.reject(new s)}loadWidget(t){return g(this,void 0,void 0,function*(){if(!t.klarna)throw new c('Unable to load widget because \"options.klarna\" argument is not provided.');const{methodId:n,klarna:{container:e,onLoad:r}}=t;return yield this.paymentIntegrationService.loadPaymentMethod(n),new Promise(t=>{const u=this.paymentIntegrationService.getState().getPaymentMethod(n);if(!u)throw new f(i.MissingPaymentMethod);if(!this.klarnaCredit||!u.clientToken)throw new l(o.PaymentNotInitialized);this.klarnaCredit.init({client_token:u.clientToken}),this.klarnaCredit.load({container:e},n=>{r&&r(n),t(n)})})})}getUpdateSessionData(t,n){if(!(0,u.includes)([...y,..._],t.countryCode))return{};const e={billing_address:this.mapToKlarnaAddress(t,t.email)};return n&&(e.shipping_address=this.mapToKlarnaAddress(n,t.email)),e}needsStateCode(t){return(0,u.includes)(_,t)}mapToKlarnaAddress(t,n){const e={street_address:t.address1,city:t.city,country:t.countryCode,given_name:t.firstName,family_name:t.lastName,postal_code:t.postalCode,region:this.needsStateCode(t.countryCode)?t.stateOrProvinceCode:t.stateOrProvince,email:n};return t.address2&&(e.street_address2=t.address2),t.phone&&(e.phone=t.phone),e}authorize(){return new Promise((t,n)=>{const e=this.paymentIntegrationService.getState(),r=e.getBillingAddress(),u=e.getShippingAddress();if(!r)throw new f(i.MissingBillingAddress);if(!this.klarnaCredit)throw new l(o.PaymentNotInitialized);const a=this.getUpdateSessionData(r,u);this.klarnaCredit.authorize(a,e=>e.approved?t(e):e.show_form?n(new p):void n(new v))})}}class b extends a{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class w{constructor(t,n=window){this.scriptLoader=t,this.klarnaWindow=n}load(){var t,n,e,r,i,o;return e=this,r=void 0,o=function*(){if((null===(t=this.klarnaWindow.Klarna)||void 0===t?void 0:t.Credit)||(yield this.scriptLoader.loadScript(\"//credit.klarnacdn.net/lib/v1/api.js\")),!(null===(n=this.klarnaWindow.Klarna)||void 0===n?void 0:n.Credit))throw new b;return this.klarnaWindow.Klarna.Credit},new((i=void 0)||(i=Promise))(function(t,n){function u(t){try{c(o.next(t))}catch(t){n(t)}}function a(t){try{c(o.throw(t))}catch(t){n(t)}}function c(n){var e;n.done?t(n.value):(e=n.value,e instanceof i?e:new i(function(t){t(e)})).then(u,a)}c((o=o.apply(e,r||[])).next())})}}const j=n(n=>new m(n,new w((0,t.vQ)())),[{id:\"klarna\"}]);var S=e(4043),O=function(t,n,e,r){return new(e||(e=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e(function(t){t(n)})).then(u,a)}c((r=r.apply(t,n||[])).next())})};class k{constructor(t,n,e){this.paymentIntegrationService=t,this.klarnav2ScriptLoader=n,this.klarnav2TokenUpdater=e}initialize(t){return O(this,void 0,void 0,function*(){this.klarnaPayments=yield this.klarnav2ScriptLoader.load(),this.unsubscribe=this.paymentIntegrationService.subscribe(n=>{n.isPaymentMethodInitialized({methodId:t.methodId,gatewayId:t.gatewayId})&&this.loadPaymentsWidget(t)},t=>{const n=t.getCheckout();return n&&n.outstandingBalance},t=>{const n=t.getCheckout();return n&&n.coupons}),yield this.loadPaymentsWidget(t)})}deinitialize(){return this.unsubscribe&&this.unsubscribe(),Promise.resolve()}execute(t,n){return O(this,void 0,void 0,function*(){if(!t.payment)throw new c('Unable to proceed because \"payload.payment\" argument is not provided.');const e=function(t,n){var e={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&n.indexOf(r)<0&&(e[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)n.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(e[r[i]]=t[r[i]])}return e}(t.payment,[]),{gatewayId:r,methodId:i}=e;if(!r)throw new c('Unable to proceed because \"payload.payment.gatewayId\" argument is not provided.');const o=this.paymentIntegrationService.getState(),{id:u}=o.getCartOrThrow(),{clientToken:a,initializationData:s}=o.getPaymentMethodOrThrow(i),{klarnaMultipleRadioButton:f}=s||{};yield this.klarnav2TokenUpdater.klarnaOrderInitialization(u,a);const l=this.isKlarnaMultipleRadioButtonEnabled(f,r,i),{authorization_token:p}=yield this.authorizeOrThrow(l,i);yield this.paymentIntegrationService.initializePayment(r,{authorizationToken:p}),yield this.paymentIntegrationService.submitOrder(Object.assign(Object.assign({},t),{payment:e,useStoreCredit:t.useStoreCredit}),n)})}finalize(){return Promise.reject(new s)}loadPaymentsWidget(t){return O(this,void 0,void 0,function*(){if(!t.klarnav2)throw new c('Unable to load widget because \"options.klarnav2\" argument is not provided.');const{methodId:n,gatewayId:e,klarnav2:{container:r,onLoad:u}}=t;if(!e)throw new c('Unable to proceed because \"payload.payment.gatewayId\" argument is not provided.');const a=this.paymentIntegrationService.getState(),s={params:a.getCartOrThrow().id};return yield this.klarnav2TokenUpdater.updateClientToken(e,{params:s}).catch(()=>{throw new f(i.MissingPaymentMethod)}),new Promise(t=>{const i=a.getPaymentMethodOrThrow(n),{klarnaMultipleRadioButton:c}=i.initializationData||{};if(!this.klarnaPayments||!i.clientToken)throw new l(o.PaymentNotInitialized);this.klarnaPayments.init({client_token:i.clientToken}),this.klarnaPayments.load({container:r,payment_method_category:this.isKlarnaMultipleRadioButtonEnabled(c,e,n)},n=>{u&&u(n),t(n)})})})}getUpdateSessionData(t,n,e){if(!(0,u.includes)([...y,..._],n.countryCode))return{};const r={billing_address:this.mapToKlarnaAddress(t,n,n.email)};return e&&(r.shipping_address=this.mapToKlarnaAddress(t,e,n.email)),r}needsStateCode(t){return(0,u.includes)(_,t)}isKlarnaMultipleRadioButtonEnabled(t,n,e){return t?e:n}mapToKlarnaAddress(t,n,e){const r=this.paymentIntegrationService.getState(),{checkoutSettings:i}=r.getStoreConfigOrThrow(),o=r.getPaymentMethodOrThrow(t),{enableBillie:u}=o.initializationData||{},a={street_address:n.address1,city:n.city,country:n.countryCode,given_name:n.firstName,family_name:n.lastName,postal_code:n.postalCode,region:this.needsStateCode(n.countryCode)?n.stateOrProvinceCode:n.stateOrProvince,email:e};return n.address2&&(a.street_address2=n.address2),n.phone&&(a.phone=n.phone),n.company&&u&&function(t,n,e=!0){var r;return null!==(r=t[\"PI-3915.b2b_payment_session_for_klarna\"])&&void 0!==r?r:e}(i.features)&&(a.organization_name=n.company),a}authorizeOrThrow(t,n){return O(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const e=this.paymentIntegrationService.getState(),r=e.getBillingAddressOrThrow(),i=e.getShippingAddress(),u=this.getUpdateSessionData(n,r,i);return new Promise((n,e)=>{if(!this.klarnaPayments)return e(new l(o.PaymentNotInitialized));this.klarnaPayments.authorize({payment_method_category:t},u,t=>t.approved?n(t):t.show_form?e(new p):void e(new v))})})}}var x;class A{constructor(t,n=window){this.scriptLoader=t,this.klarnaWindow=n}load(){var t,n,e,r,i,o;return e=this,r=void 0,o=function*(){if((null===(t=this.klarnaWindow.Klarna)||void 0===t?void 0:t.Payments)||(yield this.scriptLoader.loadScript(\"https://x.klarnacdn.net/kp/lib/v1/api.js\")),!(null===(n=this.klarnaWindow.Klarna)||void 0===n?void 0:n.Payments))throw new b;return this.klarnaWindow.Klarna.Payments},new((i=void 0)||(i=Promise))(function(t,n){function u(t){try{c(o.next(t))}catch(t){n(t)}}function a(t){try{c(o.throw(t))}catch(t){n(t)}}function c(n){var e;n.done?t(n.value):(e=n.value,e instanceof i?e:new i(function(t){t(e)})).then(u,a)}c((o=o.apply(e,r||[])).next())})}}!function(t){t.Json=\"application/json\",t.JsonV1=\"application/vnd.bc.v1+json\"}(x||(x={}));const I=x,C=\"This API endpoint is for internal use only and may change in the future\",P={\"X-Checkout-SDK-Version\":\"1.916.1\"};class R{constructor(t){this.requestSender=t}updateClientToken(t,{timeout:n,params:e}={}){const r=`/api/storefront/payments/${t}`;return this.requestSender.get(r,{timeout:n,headers:Object.assign({Accept:I.JsonV1,\"X-API-INTERNAL\":C},P),params:e})}klarnaOrderInitialization(t,n){return e=this,r=void 0,o=function*(){const e={headers:Object.assign({Accept:I.JsonV1,\"X-API-INTERNAL\":C},P),body:{cartId:t,clientToken:n}};yield this.requestSender.put(\"/api/storefront/initialization/klarna\",e)},new((i=void 0)||(i=Promise))(function(t,n){function u(t){try{c(o.next(t))}catch(t){n(t)}}function a(t){try{c(o.throw(t))}catch(t){n(t)}}function c(n){var e;n.done?t(n.value):(e=n.value,e instanceof i?e:new i(function(t){t(e)})).then(u,a)}c((o=o.apply(e,r||[])).next())});var e,r,i,o}}const z=n(n=>{const{getHost:e}=n.getState(),r=(0,S.createRequestSender)({host:e()});return new k(n,new A((0,t.vQ)()),new R(r))},[{gateway:\"klarna\"}])})(),module.exports=r})();\n//# sourceMappingURL=klarna.js.map"
  },
  {
    "path": "dist/cjs/integrations/legacy.js",
    "content": "(()=>{\"use strict\";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})}},t={};e.r(t),e.d(t,{createLegacyPaymentStrategy:()=>i});class r extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class o extends r{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class n{constructor(e){this._paymentIntegrationService=e}execute(e,t){return r=this,o=void 0,i=function*(){return yield this._paymentIntegrationService.submitOrder(e,t),Promise.resolve()},new((n=void 0)||(n=Promise))(function(e,t){function a(e){try{c(i.next(e))}catch(e){t(e)}}function s(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof n?r:new n(function(e){e(r)})).then(a,s)}c((i=i.apply(r,o||[])).next())});var r,o,n,i}finalize(){return Promise.reject(new o)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const i=Object.assign(e=>new n(e),{resolveIds:[{id:\"testgateway\"}]});module.exports=t})();\n//# sourceMappingURL=legacy.js.map"
  },
  {
    "path": "dist/cjs/integrations/mollie.js",
    "content": "(()=>{var t={4325(t,e,n){\"use strict\";n.d(e,{g:()=>i});var r=n(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(r.stringify(e))},t}()},321(t,e,n){\"use strict\";n.d(e,{A:()=>a});var r=n(168),i=n(1675),o=n(5861),u=n(4670);function a(t){return new u.A(new o.A,new i.A,r,t)}},6889(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(2024);function i(t){return new r.A(t)}},4043(t,e,n){\"use strict\";n.r(e),n.d(e,{RequestSender:()=>o.A,Timeout:()=>u.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),u=n(2024)},4843(t,e,n){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}n.d(e,{A:()=>r})},1675(t,e,n){\"use strict\";n.d(e,{A:()=>a});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,u=/application\\/x-www-form-urlencoded/;const a=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(e))return JSON.stringify(t.body);if(u.test(e))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,\"Content-Type\");return t&&o.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var n,i=e.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}()},5861(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||\"GET\",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),\"boolean\"==typeof n.credentials&&(t.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(n){t.setRequestHeader(n,e[n])})},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(r.stringify(e,{encode:n})):t},t}()},4670(t,e,n){\"use strict\";n.d(e,{A:()=>s});var r=n(1635),i=n(35),o=n.n(i),u=n(4325),a=n(4843),c=n(2024);const s=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new u.g}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(e,i){var u=function(){var u=n._payloadTransformer.toResponse(o);u.status>=200&&u.status<300?(n._cacheRequest(t,r,u),e(u)):i(u)};o.onload=u,o.onerror=u,o.onabort=u,o.ontimeout=u,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,a.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(n.headers[\"X-XSRF-TOKEN\"]=r),e&&e.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,e,n){\"use strict\";n.d(e,{A:()=>r});const r=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,e,n){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var n=t[e];return\"string\"==typeof n?\"\".concat(e,\"=\").concat(encodeURIComponent(n)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(e,{A:()=>r})},5889(t,e,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),u=n(3814);function a(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}function s(t,e){return e.decode?i(t):t}function f(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?f(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function l(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function p(t){const e=(t=l(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function h(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function d(t,e){a((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,n,r)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case\"bracket\":return(t,n,r)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"comma\":case\"separator\":return(e,n,r)=>{const i=\"string\"==typeof n&&n.includes(t.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&s(n,t).includes(t.arrayFormatSeparator);n=o?s(n,t):n;const u=i||o?n.split(t.arrayFormatSeparator).map(e=>s(e,t)):null===n?n:s(n,t);r[e]=u};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[].concat(n[t],e):n[t]=e}}}(e),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,u]=o(e.decode?i.replace(/\\+/g,\" \"):i,\"=\");u=void 0===u?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?u:s(u,e),n(s(t,e),u,r)}for(const t of Object.keys(r)){const n=r[t];if(\"object\"==typeof n&&null!==n)for(const t of Object.keys(n))n[t]=h(n[t],e);else r[t]=h(n,e)}return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce((t,e)=>{const n=r[e];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?t[e]=f(n):t[e]=n,t},Object.create(null))}e.extract=p,e.parse=d,e.stringify=(t,e)=>{if(!t)return\"\";a((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const n=n=>e.skipNull&&null==t[n]||e.skipEmptyString&&\"\"===t[n],r=function(t){switch(t.arrayFormat){case\"index\":return e=>(n,r)=>{const i=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[\",i,\"]\"].join(\"\")]:[...n,[c(e,t),\"[\",c(i,t),\"]=\",c(r,t)].join(\"\")]};case\"bracket\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[]\"].join(\"\")]:[...n,[c(e,t),\"[]=\",c(r,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(n,r)=>null==r||0===r.length?n:0===n.length?[[c(e,t),\"=\",c(r,t)].join(\"\")]:[[n,c(r,t)].join(t.arrayFormatSeparator)];default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,c(e,t)]:[...n,[c(e,t),\"=\",c(r,t)].join(\"\")]}}(e),i={};for(const e of Object.keys(t))n(e)||(i[e]=t[e]);const o=Object.keys(i);return!1!==e.sort&&o.sort(e.sort),o.map(n=>{const i=t[n];return void 0===i?\"\":null===i?c(n,e):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):c(n,e)+\"=\"+c(i,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[n,r]=o(t,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:d(p(t),e)},e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:s(r,e)}:{})},e.stringifyUrl=(t,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=l(t.url).split(\"?\")[0]||\"\",i=e.extract(t.url),o=e.parse(i,{sort:!1}),u=Object.assign(o,t.query);let a=e.stringify(u,n);a&&(a=`?${a}`);let s=function(t){let e=\"\";const n=t.indexOf(\"#\");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(s=`#${c(t.fragmentIdentifier,n)}`),`${r}${a}${s}`},e.pick=(t,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:a}=e.parseUrl(t,r);return e.stringifyUrl({url:i,query:u(o,n),fragmentIdentifier:a},r)},e.exclude=(t,n,r)=>{const i=Array.isArray(n)?t=>!n.includes(t):(t,e)=>!n(t,e);return e.pick(t,i,r)}},5477(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement(\"link\");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=n},471(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(t,e,n){\"use strict\";e.vQ=void 0;n(4886),n(471);var r=n(5895);Object.defineProperty(e,\"vQ\",{enumerable:!0,get:function(){return r.default}});n(7995),n(9722),n(282)},4886(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var n=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),u=e||{},a=u.async,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(e){delete n._scripts[t],i(e)},o.async=c,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadScript(t,e)})).then(function(){})},t.prototype.preloadScript=function(t,e){var n=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(e||{}).prefetch,u=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(u)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=u,a.href=t,a.onload=function(){r()},a.onerror=function(){delete n._preloadedScripts[t],i()},document.head.appendChild(a)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadScript(t,e)})).then(function(){})},t}();e.default=n},7995(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var n=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),u=e||{},a=u.prepend,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onerror=function(e){delete n._stylesheets[t],i(e)},o.rel=\"stylesheet\",o.href=t,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadStylesheet(t,e)})).then(function(){})},t.prototype.preloadStylesheet=function(t,e){var n=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(e||{}).prefetch,u=void 0!==o&&o,a=u?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=u?\"prefetch\":\"preload\",c.href=t,c.onload=function(){r()},c.onerror=function(e){delete n._preloadedStylesheets[t],i(e)},document.head.appendChild(c)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadStylesheet(t,e)})).then(function(){})},t}();e.default=n},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+e+\")+\",\"gi\");function i(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],i(n),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var e=t.match(n)||[],r=1;r<e.length;r++)e=(t=i(e,r).join(\"\")).match(n)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(t);n;){try{e[n[0]]=decodeURIComponent(n[0])}catch(t){var i=o(n[0]);i!==n[0]&&(e[n[0]]=i)}n=r.exec(t)}e[\"%C2\"]=\"�\";for(var u=Object.keys(e),a=0;a<u.length;a++){var c=u[a];t=t.replace(new RegExp(c,\"g\"),e[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,e){for(var n={},r=Object.keys(t),i=Array.isArray(e),o=0;o<r.length;o++){var u=r[o],a=t[u];(i?-1!==e.indexOf(u):e(u,a,t))&&(n[u]=a)}return n}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(e,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var u=JSON.stringify(n);/^[\\{\\[]/.test(u)&&(n=u)}catch(t){}n=r.write?r.write(n,e):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in o)o[c]&&(a+=\"; \"+c,!0!==o[c]&&(a+=\"=\"+o[c].split(\";\")[0]));return document.cookie=e+\"=\"+n+a}}function u(t,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],u=0;u<o.length;u++){var a=o[u].split(\"=\"),c=a.slice(1).join(\"=\");n||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var s=e(a[0]);if(c=(r.read||r)(c,s)||e(c),n)try{c=JSON.parse(c)}catch(t){}if(i[s]=c,t===s)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return u(t,!1)},i.getJSON=function(t){return u(t,!0)},i.remove=function(e,n){o(e,\"\",t(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},35(t,e,n){t=n.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",u=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,s=/^(?:0|[1-9]\\d*)$/,f={};f[\"[object Float32Array]\"]=f[\"[object Float64Array]\"]=f[\"[object Int8Array]\"]=f[\"[object Int16Array]\"]=f[\"[object Int32Array]\"]=f[\"[object Uint8Array]\"]=f[\"[object Uint8ClampedArray]\"]=f[\"[object Uint16Array]\"]=f[\"[object Uint32Array]\"]=!0,f[o]=f[\"[object Array]\"]=f[\"[object ArrayBuffer]\"]=f[\"[object Boolean]\"]=f[\"[object DataView]\"]=f[\"[object Date]\"]=f[\"[object Error]\"]=f[u]=f[\"[object Map]\"]=f[\"[object Number]\"]=f[a]=f[\"[object RegExp]\"]=f[\"[object Set]\"]=f[\"[object String]\"]=f[\"[object WeakMap]\"]=!1;var l,p,h,d=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,v=\"object\"==typeof self&&self&&self.Object===Object&&self,_=d||v||Function(\"return this\")(),y=e&&!e.nodeType&&e,g=y&&t&&!t.nodeType&&t,m=g&&g.exports===y,b=m&&d.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),j=w&&w.isTypedArray,x=Array.prototype,S=Function.prototype,O=Object.prototype,I=_[\"__core-js_shared__\"],A=S.toString,C=O.hasOwnProperty,E=(l=/[^.]+$/.exec(I&&I.keys&&I.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",k=O.toString,R=A.call(Object),P=RegExp(\"^\"+A.call(C).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),M=m?_.Buffer:void 0,z=_.Symbol,U=_.Uint8Array,T=(M&&M.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(t){return p(h(t))}),F=Object.create,N=O.propertyIsEnumerable,q=x.splice,B=z?z.toStringTag:void 0,L=function(){try{var t=at(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),D=M?M.isBuffer:void 0,$=Math.max,W=Date.now,H=at(_,\"Map\"),V=at(Object,\"create\"),G=function(){function t(){}return function(e){if(!mt(e))return{};if(F)return F(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function K(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function J(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Z(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function X(t){var e=this.__data__=new J(t);this.size=e.size}function Q(t,e,n){(void 0!==n&&!pt(t[e],n)||void 0===n&&!(e in t))&&et(t,e,n)}function Y(t,e,n){var r=t[e];C.call(t,e)&&pt(r,n)&&(void 0!==n||e in t)||et(t,e,n)}function tt(t,e){for(var n=t.length;n--;)if(pt(t[n][0],e))return n;return-1}function et(t,e,n){\"__proto__\"==e&&L?L(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}K.prototype.clear=function(){this.__data__=V?V(null):{},this.size=0},K.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},K.prototype.get=function(t){var e=this.__data__;if(V){var n=e[t];return n===r?void 0:n}return C.call(e,t)?e[t]:void 0},K.prototype.has=function(t){var e=this.__data__;return V?void 0!==e[t]:C.call(e,t)},K.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=V&&void 0===e?r:e,this},J.prototype.clear=function(){this.__data__=[],this.size=0},J.prototype.delete=function(t){var e=this.__data__,n=tt(e,t);return!(n<0||(n==e.length-1?e.pop():q.call(e,n,1),--this.size,0))},J.prototype.get=function(t){var e=this.__data__,n=tt(e,t);return n<0?void 0:e[n][1]},J.prototype.has=function(t){return tt(this.__data__,t)>-1},J.prototype.set=function(t,e){var n=this.__data__,r=tt(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Z.prototype.clear=function(){this.size=0,this.__data__={hash:new K,map:new(H||J),string:new K}},Z.prototype.delete=function(t){var e=ut(this,t).delete(t);return this.size-=e?1:0,e},Z.prototype.get=function(t){return ut(this,t).get(t)},Z.prototype.has=function(t){return ut(this,t).has(t)},Z.prototype.set=function(t,e){var n=ut(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},X.prototype.clear=function(){this.__data__=new J,this.size=0},X.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},X.prototype.get=function(t){return this.__data__.get(t)},X.prototype.has=function(t){return this.__data__.has(t)},X.prototype.set=function(t,e){var n=this.__data__;if(n instanceof J){var r=n.__data__;if(!H||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Z(r)}return n.set(t,e),this.size=n.size,this};function nt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":B&&B in Object(t)?function(t){var e=C.call(t,B),n=t[B];try{t[B]=void 0;var r=!0}catch(t){}var i=k.call(t);return r&&(e?t[B]=n:delete t[B]),i}(t):function(t){return k.call(t)}(t)}function rt(t){return bt(t)&&nt(t)==o}function it(t,e,n,r,i){t!==e&&function(t,e,n){for(var r=-1,i=Object(t),o=n(t),u=o.length;u--;){var a=o[++r];if(!1===e(i[a],a,i))break}}(e,function(o,u){if(i||(i=new X),mt(o))!function(t,e,n,r,i,o,u){var c=ft(t,n),s=ft(e,n),f=u.get(s);if(f)Q(t,n,f);else{var l,p,h,d,v,_=o?o(c,s,n+\"\",t,e,u):void 0,y=void 0===_;if(y){var g=dt(s),m=!g&&_t(s),b=!g&&!m&&wt(s);_=s,g||m||b?dt(c)?_=c:bt(v=c)&&vt(v)?_=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}(c):m?(y=!1,_=function(t){return t.slice()}(s)):b?(y=!1,d=new(h=(l=s).buffer).constructor(h.byteLength),new U(d).set(new U(h)),p=d,_=new l.constructor(p,l.byteOffset,l.length)):_=[]:function(t){if(!bt(t)||nt(t)!=a)return!1;var e=T(t);if(null===e)return!0;var n=C.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&A.call(n)==R}(s)||ht(s)?(_=c,ht(c)?_=function(t){return function(t,e,n){var r=!n;n||(n={});for(var i=-1,o=e.length;++i<o;){var u=e[i],a=void 0;void 0===a&&(a=t[u]),r?et(n,u,a):Y(n,u,a)}return n}(t,jt(t))}(c):mt(c)&&!yt(c)||(_=function(t){return\"function\"!=typeof t.constructor||st(t)?{}:G(T(t))}(s))):y=!1}y&&(u.set(s,_),i(_,s,r,o,u),u.delete(s)),Q(t,n,_)}}(t,e,u,n,it,r,i);else{var c=r?r(ft(t,u),o,u+\"\",t,e,i):void 0;void 0===c&&(c=o),Q(t,u,c)}},jt)}var ot=L?function(t,e){return L(t,\"toString\",{configurable:!0,enumerable:!1,value:(n=e,function(){return n}),writable:!0});var n}:Ot;function ut(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function at(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!mt(t)||function(t){return!!E&&E in t}(t))&&(yt(t)?P:c).test(function(t){if(null!=t){try{return A.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(n)?n:void 0}function ct(t,e){var n=typeof t;return!!(e=e??i)&&(\"number\"==n||\"symbol\"!=n&&s.test(t))&&t>-1&&t%1==0&&t<e}function st(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||O)}function ft(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var lt=function(t){var e=0,n=0;return function(){var r=W(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ot);function pt(t,e){return t===e||t!=t&&e!=e}var ht=rt(function(){return arguments}())?rt:function(t){return bt(t)&&C.call(t,\"callee\")&&!N.call(t,\"callee\")},dt=Array.isArray;function vt(t){return null!=t&&gt(t.length)&&!yt(t)}var _t=D||function(){return!1};function yt(t){if(!mt(t))return!1;var e=nt(t);return e==u||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function mt(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=j?function(t){return function(e){return t(e)}}(j):function(t){return bt(t)&&gt(t.length)&&!!f[nt(t)]};function jt(t){return vt(t)?function(t,e){var n=dt(t),r=!n&&ht(t),i=!n&&!r&&_t(t),o=!n&&!r&&!i&&wt(t),u=n||r||i||o,a=u?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],c=a.length;for(var s in t)!e&&!C.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||ct(s,c))||a.push(s);return a}(t,!0):function(t){if(!mt(t))return function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}(t);var e=st(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&C.call(t,r))&&n.push(r);return n}(t)}var xt,St=(xt=function(t,e,n){it(t,e,n)},function(t,e){return lt(function(t,e,n){return e=$(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=$(r.length-e,0),u=Array(o);++i<o;)u[i]=r[e+i];i=-1;for(var a=Array(e+1);++i<e;)a[i]=r[i];return a[e]=n(u),function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}(t,this,a)}}(t,e,Ot),t+\"\")}(function(t,e){var n=-1,r=e.length,i=r>1?e[r-1]:void 0,o=r>2?e[2]:void 0;for(i=xt.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,e,n){if(!mt(n))return!1;var r=typeof e;return!!(\"number\"==r?vt(n)&&ct(e,n.length):\"string\"==r&&e in n)&&pt(n[e],t)}(e[0],e[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++n<r;){var u=e[n];u&&xt(t,u,n)}return t}));function Ot(t){return t}t.exports=St},9440(t,e,n){t=n.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,s=1/0,f=9007199254740991,l=NaN,p=4294967295,h=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",v=\"[object Array]\",_=\"[object Boolean]\",y=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",j=\"[object Number]\",x=\"[object Object]\",S=\"[object Promise]\",O=\"[object RegExp]\",I=\"[object Set]\",A=\"[object String]\",C=\"[object Symbol]\",E=\"[object WeakMap]\",k=\"[object ArrayBuffer]\",R=\"[object DataView]\",P=\"[object Float32Array]\",M=\"[object Float64Array]\",z=\"[object Int8Array]\",U=\"[object Int16Array]\",T=\"[object Int32Array]\",F=\"[object Uint8Array]\",N=\"[object Uint8ClampedArray]\",q=\"[object Uint16Array]\",B=\"[object Uint32Array]\",L=/\\b__p \\+= '';/g,D=/\\b(__p \\+=) '' \\+/g,$=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,W=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,V=RegExp(W.source),G=RegExp(H.source),K=/<%-([\\s\\S]+?)%>/g,J=/<%([\\s\\S]+?)%>/g,Z=/<%=([\\s\\S]+?)%>/g,X=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,Y=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,et=RegExp(tt.source),nt=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,vt=/^0o[0-7]+$/i,_t=/^(?:0|[1-9]\\d*)$/,yt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",jt=\"\\\\u2700-\\\\u27bf\",xt=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",St=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ot=\"\\\\ufe0e\\\\ufe0f\",It=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",At=\"[\"+bt+\"]\",Ct=\"[\"+It+\"]\",Et=\"[\"+wt+\"]\",kt=\"\\\\d+\",Rt=\"[\"+jt+\"]\",Pt=\"[\"+xt+\"]\",Mt=\"[^\"+bt+It+kt+jt+xt+St+\"]\",zt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Ut=\"[^\"+bt+\"]\",Tt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ft=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Nt=\"[\"+St+\"]\",qt=\"\\\\u200d\",Bt=\"(?:\"+Pt+\"|\"+Mt+\")\",Lt=\"(?:\"+Nt+\"|\"+Mt+\")\",Dt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",$t=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Wt=\"(?:\"+Et+\"|\"+zt+\")?\",Ht=\"[\"+Ot+\"]?\",Vt=Ht+Wt+\"(?:\"+qt+\"(?:\"+[Ut,Tt,Ft].join(\"|\")+\")\"+Ht+Wt+\")*\",Gt=\"(?:\"+[Rt,Tt,Ft].join(\"|\")+\")\"+Vt,Kt=\"(?:\"+[Ut+Et+\"?\",Et,Tt,Ft,At].join(\"|\")+\")\",Jt=RegExp(\"['’]\",\"g\"),Zt=RegExp(Et,\"g\"),Xt=RegExp(zt+\"(?=\"+zt+\")|\"+Kt+Vt,\"g\"),Qt=RegExp([Nt+\"?\"+Pt+\"+\"+Dt+\"(?=\"+[Ct,Nt,\"$\"].join(\"|\")+\")\",Lt+\"+\"+$t+\"(?=\"+[Ct,Nt+Bt,\"$\"].join(\"|\")+\")\",Nt+\"?\"+Bt+\"+\"+Dt,Nt+\"+\"+$t,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",kt,Gt].join(\"|\"),\"g\"),Yt=RegExp(\"[\"+qt+bt+wt+Ot+\"]\"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ne=-1,re={};re[P]=re[M]=re[z]=re[U]=re[T]=re[F]=re[N]=re[q]=re[B]=!0,re[d]=re[v]=re[k]=re[_]=re[R]=re[y]=re[g]=re[m]=re[w]=re[j]=re[x]=re[O]=re[I]=re[A]=re[E]=!1;var ie={};ie[d]=ie[v]=ie[k]=ie[R]=ie[_]=ie[y]=ie[P]=ie[M]=ie[z]=ie[U]=ie[T]=ie[w]=ie[j]=ie[x]=ie[O]=ie[I]=ie[A]=ie[C]=ie[F]=ie[N]=ie[q]=ie[B]=!0,ie[g]=ie[m]=ie[E]=!1;var oe={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ue=parseFloat,ae=parseInt,ce=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,se=\"object\"==typeof self&&self&&self.Object===Object&&self,fe=ce||se||Function(\"return this\")(),le=e&&!e.nodeType&&e,pe=le&&t&&!t.nodeType&&t,he=pe&&pe.exports===le,de=he&&ce.process,ve=function(){try{return pe&&pe.require&&pe.require(\"util\").types||de&&de.binding&&de.binding(\"util\")}catch(t){}}(),_e=ve&&ve.isArrayBuffer,ye=ve&&ve.isDate,ge=ve&&ve.isMap,me=ve&&ve.isRegExp,be=ve&&ve.isSet,we=ve&&ve.isTypedArray;function je(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function xe(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];e(r,u,n(u),t)}return r}function Se(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function Oe(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function Ie(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function Ae(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var u=t[n];e(u,n,t)&&(o[i++]=u)}return o}function Ce(t,e){return!(null==t||!t.length)&&Ne(t,e,0)>-1}function Ee(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function ke(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function Re(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function Pe(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function Me(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function ze(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var Ue=De(\"length\");function Te(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function Fe(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function Ne(t,e,n){return e==e?function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):Fe(t,Be,n)}function qe(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function Be(t){return t!=t}function Le(t,e){var n=null==t?0:t.length;return n?He(t,e)/n:l}function De(t){return function(e){return null==e?r:e[t]}}function $e(t){return function(e){return null==t?r:t[e]}}function We(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function He(t,e){for(var n,i=-1,o=t.length;++i<o;){var u=e(t[i]);u!==r&&(n=n===r?u:n+u)}return n}function Ve(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function Ge(t){return t?t.slice(0,ln(t)+1).replace(nt,\"\"):t}function Ke(t){return function(e){return t(e)}}function Je(t,e){return ke(e,function(e){return t[e]})}function Ze(t,e){return t.has(e)}function Xe(t,e){for(var n=-1,r=t.length;++n<r&&Ne(e,t[n],0)>-1;);return n}function Qe(t,e){for(var n=t.length;n--&&Ne(e,t[n],0)>-1;);return n}var Ye=$e({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tn=$e({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function en(t){return\"\\\\\"+oe[t]}function nn(t){return Yt.test(t)}function rn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function on(t,e){return function(n){return t(e(n))}}function un(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n];a!==e&&a!==u||(t[n]=u,o[i++]=n)}return o}function an(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function cn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function sn(t){return nn(t)?function(t){for(var e=Xt.lastIndex=0;Xt.test(t);)++e;return e}(t):Ue(t)}function fn(t){return nn(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.split(\"\")}(t)}function ln(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}var pn=$e({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),hn=function t(e){var n,rt=(e=null==e?fe:hn.defaults(fe.Object(),e,hn.pick(fe,ee))).Array,bt=e.Date,wt=e.Error,jt=e.Function,xt=e.Math,St=e.Object,Ot=e.RegExp,It=e.String,At=e.TypeError,Ct=rt.prototype,Et=jt.prototype,kt=St.prototype,Rt=e[\"__core-js_shared__\"],Pt=Et.toString,Mt=kt.hasOwnProperty,zt=0,Ut=(n=/[^.]+$/.exec(Rt&&Rt.keys&&Rt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Tt=kt.toString,Ft=Pt.call(St),Nt=fe._,qt=Ot(\"^\"+Pt.call(Mt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Bt=he?e.Buffer:r,Lt=e.Symbol,Dt=e.Uint8Array,$t=Bt?Bt.allocUnsafe:r,Wt=on(St.getPrototypeOf,St),Ht=St.create,Vt=kt.propertyIsEnumerable,Gt=Ct.splice,Kt=Lt?Lt.isConcatSpreadable:r,Xt=Lt?Lt.iterator:r,Yt=Lt?Lt.toStringTag:r,oe=function(){try{var t=co(St,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ce=e.clearTimeout!==fe.clearTimeout&&e.clearTimeout,se=bt&&bt.now!==fe.Date.now&&bt.now,le=e.setTimeout!==fe.setTimeout&&e.setTimeout,pe=xt.ceil,de=xt.floor,ve=St.getOwnPropertySymbols,Ue=Bt?Bt.isBuffer:r,$e=e.isFinite,dn=Ct.join,vn=on(St.keys,St),_n=xt.max,yn=xt.min,gn=bt.now,mn=e.parseInt,bn=xt.random,wn=Ct.reverse,jn=co(e,\"DataView\"),xn=co(e,\"Map\"),Sn=co(e,\"Promise\"),On=co(e,\"Set\"),In=co(e,\"WeakMap\"),An=co(St,\"create\"),Cn=In&&new In,En={},kn=Fo(jn),Rn=Fo(xn),Pn=Fo(Sn),Mn=Fo(On),zn=Fo(In),Un=Lt?Lt.prototype:r,Tn=Un?Un.valueOf:r,Fn=Un?Un.toString:r;function Nn(t){if(ta(t)&&!$u(t)&&!(t instanceof Dn)){if(t instanceof Ln)return t;if(Mt.call(t,\"__wrapped__\"))return No(t)}return new Ln(t)}var qn=function(){function t(){}return function(e){if(!Yu(e))return{};if(Ht)return Ht(e);t.prototype=e;var n=new t;return t.prototype=r,n}}();function Bn(){}function Ln(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=r}function Dn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function $n(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Wn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Hn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Vn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Hn;++e<n;)this.add(t[e])}function Gn(t){var e=this.__data__=new Wn(t);this.size=e.size}function Kn(t,e){var n=$u(t),r=!n&&Du(t),i=!n&&!r&&Gu(t),o=!n&&!r&&!i&&ca(t),u=n||r||i||o,a=u?Ve(t.length,It):[],c=a.length;for(var s in t)!e&&!Mt.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||_o(s,c))||a.push(s);return a}function Jn(t){var e=t.length;return e?t[Hr(0,e-1)]:r}function Zn(t,e){return Po(Ii(t),or(e,0,t.length))}function Xn(t){return Po(Ii(t))}function Qn(t,e,n){(n!==r&&!qu(t[e],n)||n===r&&!(e in t))&&rr(t,e,n)}function Yn(t,e,n){var i=t[e];Mt.call(t,e)&&qu(i,n)&&(n!==r||e in t)||rr(t,e,n)}function tr(t,e){for(var n=t.length;n--;)if(qu(t[n][0],e))return n;return-1}function er(t,e,n,r){return fr(t,function(t,i,o){e(r,t,n(t),o)}),r}function nr(t,e){return t&&Ai(e,ka(e),t)}function rr(t,e,n){\"__proto__\"==e&&oe?oe(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function ir(t,e){for(var n=-1,i=e.length,o=rt(i),u=null==t;++n<i;)o[n]=u?r:Oa(t,e[n]);return o}function or(t,e,n){return t==t&&(n!==r&&(t=t<=n?t:n),e!==r&&(t=t>=e?t:e)),t}function ur(t,e,n,i,o,u){var a,c=1&e,s=2&e,f=4&e;if(n&&(a=o?n(t,i,o,u):n(t)),a!==r)return a;if(!Yu(t))return t;var l=$u(t);if(l){if(a=function(t){var e=t.length,n=new t.constructor(e);return e&&\"string\"==typeof t[0]&&Mt.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}(t),!c)return Ii(t,a)}else{var p=lo(t),h=p==m||p==b;if(Gu(t))return bi(t,c);if(p==x||p==d||h&&!o){if(a=s||h?{}:ho(t),!c)return s?function(t,e){return Ai(t,fo(t),e)}(t,function(t,e){return t&&Ai(e,Ra(e),t)}(a,t)):function(t,e){return Ai(t,so(t),e)}(t,nr(a,t))}else{if(!ie[p])return o?t:{};a=function(t,e,n){var r,i=t.constructor;switch(e){case k:return wi(t);case _:case y:return new i(+t);case R:return function(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case P:case M:case z:case U:case T:case F:case N:case q:case B:return ji(t,n);case w:return new i;case j:case A:return new i(t);case O:return function(t){var e=new t.constructor(t.source,lt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case I:return new i;case C:return r=t,Tn?St(Tn.call(r)):{}}}(t,p,c)}}u||(u=new Gn);var v=u.get(t);if(v)return v;u.set(t,a),oa(t)?t.forEach(function(r){a.add(ur(r,e,n,r,t,u))}):ea(t)&&t.forEach(function(r,i){a.set(i,ur(r,e,n,i,t,u))});var g=l?r:(f?s?eo:to:s?Ra:ka)(t);return Se(g||t,function(r,i){g&&(r=t[i=r]),Yn(a,i,ur(r,e,n,i,t,u))}),a}function ar(t,e,n){var i=n.length;if(null==t)return!i;for(t=St(t);i--;){var o=n[i],u=e[o],a=t[o];if(a===r&&!(o in t)||!u(a))return!1}return!0}function cr(t,e,n){if(\"function\"!=typeof t)throw new At(i);return Co(function(){t.apply(r,n)},e)}function sr(t,e,n,r){var i=-1,o=Ce,u=!0,a=t.length,c=[],s=e.length;if(!a)return c;n&&(e=ke(e,Ke(n))),r?(o=Ee,u=!1):e.length>=200&&(o=Ze,u=!1,e=new Vn(e));t:for(;++i<a;){var f=t[i],l=null==n?f:n(f);if(f=r||0!==f?f:0,u&&l==l){for(var p=s;p--;)if(e[p]===l)continue t;c.push(f)}else o(e,l,r)||c.push(f)}return c}Nn.templateSettings={escape:K,evaluate:J,interpolate:Z,variable:\"\",imports:{_:Nn}},Nn.prototype=Bn.prototype,Nn.prototype.constructor=Nn,Ln.prototype=qn(Bn.prototype),Ln.prototype.constructor=Ln,Dn.prototype=qn(Bn.prototype),Dn.prototype.constructor=Dn,$n.prototype.clear=function(){this.__data__=An?An(null):{},this.size=0},$n.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},$n.prototype.get=function(t){var e=this.__data__;if(An){var n=e[t];return n===o?r:n}return Mt.call(e,t)?e[t]:r},$n.prototype.has=function(t){var e=this.__data__;return An?e[t]!==r:Mt.call(e,t)},$n.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=An&&e===r?o:e,this},Wn.prototype.clear=function(){this.__data__=[],this.size=0},Wn.prototype.delete=function(t){var e=this.__data__,n=tr(e,t);return!(n<0||(n==e.length-1?e.pop():Gt.call(e,n,1),--this.size,0))},Wn.prototype.get=function(t){var e=this.__data__,n=tr(e,t);return n<0?r:e[n][1]},Wn.prototype.has=function(t){return tr(this.__data__,t)>-1},Wn.prototype.set=function(t,e){var n=this.__data__,r=tr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Hn.prototype.clear=function(){this.size=0,this.__data__={hash:new $n,map:new(xn||Wn),string:new $n}},Hn.prototype.delete=function(t){var e=uo(this,t).delete(t);return this.size-=e?1:0,e},Hn.prototype.get=function(t){return uo(this,t).get(t)},Hn.prototype.has=function(t){return uo(this,t).has(t)},Hn.prototype.set=function(t,e){var n=uo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Vn.prototype.add=Vn.prototype.push=function(t){return this.__data__.set(t,o),this},Vn.prototype.has=function(t){return this.__data__.has(t)},Gn.prototype.clear=function(){this.__data__=new Wn,this.size=0},Gn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Gn.prototype.get=function(t){return this.__data__.get(t)},Gn.prototype.has=function(t){return this.__data__.has(t)},Gn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Wn){var r=n.__data__;if(!xn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Hn(r)}return n.set(t,e),this.size=n.size,this};var fr=ki(gr),lr=ki(mr,!0);function pr(t,e){var n=!0;return fr(t,function(t,r,i){return n=!!e(t,r,i)}),n}function hr(t,e,n){for(var i=-1,o=t.length;++i<o;){var u=t[i],a=e(u);if(null!=a&&(c===r?a==a&&!aa(a):n(a,c)))var c=a,s=u}return s}function dr(t,e){var n=[];return fr(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function vr(t,e,n,r,i){var o=-1,u=t.length;for(n||(n=vo),i||(i=[]);++o<u;){var a=t[o];e>0&&n(a)?e>1?vr(a,e-1,n,r,i):Re(i,a):r||(i[i.length]=a)}return i}var _r=Ri(),yr=Ri(!0);function gr(t,e){return t&&_r(t,e,ka)}function mr(t,e){return t&&yr(t,e,ka)}function br(t,e){return Ae(e,function(e){return Zu(t[e])})}function wr(t,e){for(var n=0,i=(e=_i(e,t)).length;null!=t&&n<i;)t=t[To(e[n++])];return n&&n==i?t:r}function jr(t,e,n){var r=e(t);return $u(t)?r:Re(r,n(t))}function xr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Yt&&Yt in St(t)?function(t){var e=Mt.call(t,Yt),n=t[Yt];try{t[Yt]=r;var i=!0}catch(t){}var o=Tt.call(t);return i&&(e?t[Yt]=n:delete t[Yt]),o}(t):function(t){return Tt.call(t)}(t)}function Sr(t,e){return t>e}function Or(t,e){return null!=t&&Mt.call(t,e)}function Ir(t,e){return null!=t&&e in St(t)}function Ar(t,e,n){for(var i=n?Ee:Ce,o=t[0].length,u=t.length,a=u,c=rt(u),s=1/0,f=[];a--;){var l=t[a];a&&e&&(l=ke(l,Ke(e))),s=yn(l.length,s),c[a]=!n&&(e||o>=120&&l.length>=120)?new Vn(a&&l):r}l=t[0];var p=-1,h=c[0];t:for(;++p<o&&f.length<s;){var d=l[p],v=e?e(d):d;if(d=n||0!==d?d:0,!(h?Ze(h,v):i(f,v,n))){for(a=u;--a;){var _=c[a];if(!(_?Ze(_,v):i(t[a],v,n)))continue t}h&&h.push(v),f.push(d)}}return f}function Cr(t,e,n){var i=null==(t=Oo(t,e=_i(e,t)))?t:t[To(Jo(e))];return null==i?r:je(i,t,n)}function Er(t){return ta(t)&&xr(t)==d}function kr(t,e,n,i,o){return t===e||(null==t||null==e||!ta(t)&&!ta(e)?t!=t&&e!=e:function(t,e,n,i,o,u){var a=$u(t),c=$u(e),s=a?v:lo(t),f=c?v:lo(e),l=(s=s==d?x:s)==x,p=(f=f==d?x:f)==x,h=s==f;if(h&&Gu(t)){if(!Gu(e))return!1;a=!0,l=!1}if(h&&!l)return u||(u=new Gn),a||ca(t)?Qi(t,e,n,i,o,u):function(t,e,n,r,i,o,u){switch(n){case R:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case k:return!(t.byteLength!=e.byteLength||!o(new Dt(t),new Dt(e)));case _:case y:case j:return qu(+t,+e);case g:return t.name==e.name&&t.message==e.message;case O:case A:return t==e+\"\";case w:var a=rn;case I:var c=1&r;if(a||(a=an),t.size!=e.size&&!c)return!1;var s=u.get(t);if(s)return s==e;r|=2,u.set(t,e);var f=Qi(a(t),a(e),r,i,o,u);return u.delete(t),f;case C:if(Tn)return Tn.call(t)==Tn.call(e)}return!1}(t,e,s,n,i,o,u);if(!(1&n)){var m=l&&Mt.call(t,\"__wrapped__\"),b=p&&Mt.call(e,\"__wrapped__\");if(m||b){var S=m?t.value():t,E=b?e.value():e;return u||(u=new Gn),o(S,E,n,i,u)}}return!!h&&(u||(u=new Gn),function(t,e,n,i,o,u){var a=1&n,c=to(t),s=c.length;if(s!=to(e).length&&!a)return!1;for(var f=s;f--;){var l=c[f];if(!(a?l in e:Mt.call(e,l)))return!1}var p=u.get(t),h=u.get(e);if(p&&h)return p==e&&h==t;var d=!0;u.set(t,e),u.set(e,t);for(var v=a;++f<s;){var _=t[l=c[f]],y=e[l];if(i)var g=a?i(y,_,l,e,t,u):i(_,y,l,t,e,u);if(!(g===r?_===y||o(_,y,n,i,u):g)){d=!1;break}v||(v=\"constructor\"==l)}if(d&&!v){var m=t.constructor,b=e.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return u.delete(t),u.delete(e),d}(t,e,n,i,o,u))}(t,e,n,i,kr,o))}function Rr(t,e,n,i){var o=n.length,u=o,a=!i;if(null==t)return!u;for(t=St(t);o--;){var c=n[o];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++o<u;){var s=(c=n[o])[0],f=t[s],l=c[1];if(a&&c[2]){if(f===r&&!(s in t))return!1}else{var p=new Gn;if(i)var h=i(f,l,s,t,e,p);if(!(h===r?kr(l,f,3,i,p):h))return!1}}return!0}function Pr(t){return!(!Yu(t)||(e=t,Ut&&Ut in e))&&(Zu(t)?qt:dt).test(Fo(t));var e}function Mr(t){return\"function\"==typeof t?t:null==t?nc:\"object\"==typeof t?$u(t)?Nr(t[0],t[1]):Fr(t):lc(t)}function zr(t){if(!wo(t))return vn(t);var e=[];for(var n in St(t))Mt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function Ur(t,e){return t<e}function Tr(t,e){var n=-1,r=Hu(t)?rt(t.length):[];return fr(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Fr(t){var e=ao(t);return 1==e.length&&e[0][2]?xo(e[0][0],e[0][1]):function(n){return n===t||Rr(n,t,e)}}function Nr(t,e){return go(t)&&jo(e)?xo(To(t),e):function(n){var i=Oa(n,t);return i===r&&i===e?Ia(n,t):kr(e,i,3)}}function qr(t,e,n,i,o){t!==e&&_r(e,function(u,a){if(o||(o=new Gn),Yu(u))!function(t,e,n,i,o,u,a){var c=Io(t,n),s=Io(e,n),f=a.get(s);if(f)Qn(t,n,f);else{var l=u?u(c,s,n+\"\",t,e,a):r,p=l===r;if(p){var h=$u(s),d=!h&&Gu(s),v=!h&&!d&&ca(s);l=s,h||d||v?$u(c)?l=c:Vu(c)?l=Ii(c):d?(p=!1,l=bi(s,!0)):v?(p=!1,l=ji(s,!0)):l=[]:ra(s)||Du(s)?(l=c,Du(c)?l=_a(c):Yu(c)&&!Zu(c)||(l=ho(s))):p=!1}p&&(a.set(s,l),o(l,s,i,u,a),a.delete(s)),Qn(t,n,l)}}(t,e,a,n,qr,i,o);else{var c=i?i(Io(t,a),u,a+\"\",t,e,o):r;c===r&&(c=u),Qn(t,a,c)}},Ra)}function Br(t,e){var n=t.length;if(n)return _o(e+=e<0?n:0,n)?t[e]:r}function Lr(t,e,n){e=e.length?ke(e,function(t){return $u(t)?function(e){return wr(e,1===t.length?t[0]:t)}:t}):[nc];var r=-1;e=ke(e,Ke(oo()));var i=Tr(t,function(t,n,i){var o=ke(e,function(e){return e(t)});return{criteria:o,index:++r,value:t}});return function(t){var e=t.length;for(t.sort(function(t,e){return function(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,u=i.length,a=n.length;++r<u;){var c=xi(i[r],o[r]);if(c)return r>=a?c:c*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)});e--;)t[e]=t[e].value;return t}(i)}function Dr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var u=e[r],a=wr(t,u);n(a,u)&&Zr(o,_i(u,t),a)}return o}function $r(t,e,n,r){var i=r?qe:Ne,o=-1,u=e.length,a=t;for(t===e&&(e=Ii(e)),n&&(a=ke(t,Ke(n)));++o<u;)for(var c=0,s=e[o],f=n?n(s):s;(c=i(a,f,c,r))>-1;)a!==t&&Gt.call(a,c,1),Gt.call(t,c,1);return t}function Wr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;_o(i)?Gt.call(t,i,1):ci(t,i)}}return t}function Hr(t,e){return t+de(bn()*(e-t+1))}function Vr(t,e){var n=\"\";if(!t||e<1||e>f)return n;do{e%2&&(n+=t),(e=de(e/2))&&(t+=t)}while(e);return n}function Gr(t,e){return Eo(So(t,e,nc),t+\"\")}function Kr(t){return Jn(qa(t))}function Jr(t,e){var n=qa(t);return Po(n,or(e,0,n.length))}function Zr(t,e,n,i){if(!Yu(t))return t;for(var o=-1,u=(e=_i(e,t)).length,a=u-1,c=t;null!=c&&++o<u;){var s=To(e[o]),f=n;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(o!=a){var l=c[s];(f=i?i(l,s,c):r)===r&&(f=Yu(l)?l:_o(e[o+1])?[]:{})}Yn(c,s,f),c=c[s]}return t}var Xr=Cn?function(t,e){return Cn.set(t,e),t}:nc,Qr=oe?function(t,e){return oe(t,\"toString\",{configurable:!0,enumerable:!1,value:Ya(e),writable:!0})}:nc;function Yr(t){return Po(qa(t))}function ti(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+e];return o}function ei(t,e){var n;return fr(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ni(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;r<i;){var o=r+i>>>1,u=t[o];null!==u&&!aa(u)&&(n?u<=e:u<e)?r=o+1:i=o}return i}return ri(t,e,nc,n)}function ri(t,e,n,i){var o=0,u=null==t?0:t.length;if(0===u)return 0;for(var a=(e=n(e))!=e,c=null===e,s=aa(e),f=e===r;o<u;){var l=de((o+u)/2),p=n(t[l]),h=p!==r,d=null===p,v=p==p,_=aa(p);if(a)var y=i||v;else y=f?v&&(i||h):c?v&&h&&(i||!d):s?v&&h&&!d&&(i||!_):!d&&!_&&(i?p<=e:p<e);y?o=l+1:u=l}return yn(u,4294967294)}function ii(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n],a=e?e(u):u;if(!n||!qu(a,c)){var c=a;o[i++]=0===u?0:u}}return o}function oi(t){return\"number\"==typeof t?t:aa(t)?l:+t}function ui(t){if(\"string\"==typeof t)return t;if($u(t))return ke(t,ui)+\"\";if(aa(t))return Fn?Fn.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function ai(t,e,n){var r=-1,i=Ce,o=t.length,u=!0,a=[],c=a;if(n)u=!1,i=Ee;else if(o>=200){var s=e?null:Vi(t);if(s)return an(s);u=!1,i=Ze,c=new Vn}else c=e?[]:a;t:for(;++r<o;){var f=t[r],l=e?e(f):f;if(f=n||0!==f?f:0,u&&l==l){for(var p=c.length;p--;)if(c[p]===l)continue t;e&&c.push(l),a.push(f)}else i(c,l,n)||(c!==a&&c.push(l),a.push(f))}return a}function ci(t,e){var n=-1,r=(e=_i(e,t)).length;if(!r)return!0;for(;++n<r;){var i=To(e[n]);if(\"__proto__\"===i&&!Mt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Oo(t,e);return null==o||delete o[To(Jo(e))]}function si(t,e,n,r){return Zr(t,e,n(wr(t,e)),r)}function fi(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function li(t,e){var n=t;return n instanceof Dn&&(n=n.value()),Pe(e,function(t,e){return e.func.apply(e.thisArg,Re([t],e.args))},n)}function pi(t,e,n){var r=t.length;if(r<2)return r?ai(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var u=t[i],a=-1;++a<r;)a!=i&&(o[i]=sr(o[i]||u,t[a],e,n));return ai(vr(o,1),e,n)}function hi(t,e,n){for(var i=-1,o=t.length,u=e.length,a={};++i<o;){var c=i<u?e[i]:r;n(a,t[i],c)}return a}function di(t){return Vu(t)?t:[]}function vi(t){return\"function\"==typeof t?t:nc}function _i(t,e){return $u(t)?t:go(t,e)?[t]:Uo(ya(t))}var yi=Gr;function gi(t,e,n){var i=t.length;return n=n===r?i:n,!e&&n>=i?t:ti(t,e,n)}var mi=ce||function(t){return fe.clearTimeout(t)};function bi(t,e){if(e)return t.slice();var n=t.length,r=$t?$t(n):new t.constructor(n);return t.copy(r),r}function wi(t){var e=new t.constructor(t.byteLength);return new Dt(e).set(new Dt(t)),e}function ji(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function xi(t,e){if(t!==e){var n=t!==r,i=null===t,o=t==t,u=aa(t),a=e!==r,c=null===e,s=e==e,f=aa(e);if(!c&&!f&&!u&&t>e||u&&a&&s&&!c&&!f||i&&a&&s||!n&&s||!o)return 1;if(!i&&!u&&!f&&t<e||f&&n&&o&&!i&&!u||c&&n&&o||!a&&o||!s)return-1}return 0}function Si(t,e,n,r){for(var i=-1,o=t.length,u=n.length,a=-1,c=e.length,s=_n(o-u,0),f=rt(c+s),l=!r;++a<c;)f[a]=e[a];for(;++i<u;)(l||i<o)&&(f[n[i]]=t[i]);for(;s--;)f[a++]=t[i++];return f}function Oi(t,e,n,r){for(var i=-1,o=t.length,u=-1,a=n.length,c=-1,s=e.length,f=_n(o-a,0),l=rt(f+s),p=!r;++i<f;)l[i]=t[i];for(var h=i;++c<s;)l[h+c]=e[c];for(;++u<a;)(p||i<o)&&(l[h+n[u]]=t[i++]);return l}function Ii(t,e){var n=-1,r=t.length;for(e||(e=rt(r));++n<r;)e[n]=t[n];return e}function Ai(t,e,n,i){var o=!n;n||(n={});for(var u=-1,a=e.length;++u<a;){var c=e[u],s=i?i(n[c],t[c],c,n,t):r;s===r&&(s=t[c]),o?rr(n,c,s):Yn(n,c,s)}return n}function Ci(t,e){return function(n,r){var i=$u(n)?xe:er,o=e?e():{};return i(n,t,oo(r,2),o)}}function Ei(t){return Gr(function(e,n){var i=-1,o=n.length,u=o>1?n[o-1]:r,a=o>2?n[2]:r;for(u=t.length>3&&\"function\"==typeof u?(o--,u):r,a&&yo(n[0],n[1],a)&&(u=o<3?r:u,o=1),e=St(e);++i<o;){var c=n[i];c&&t(e,c,i,u)}return e})}function ki(t,e){return function(n,r){if(null==n)return n;if(!Hu(n))return t(n,r);for(var i=n.length,o=e?i:-1,u=St(n);(e?o--:++o<i)&&!1!==r(u[o],o,u););return n}}function Ri(t){return function(e,n,r){for(var i=-1,o=St(e),u=r(e),a=u.length;a--;){var c=u[t?a:++i];if(!1===n(o[c],c,o))break}return e}}function Pi(t){return function(e){var n=nn(e=ya(e))?fn(e):r,i=n?n[0]:e.charAt(0),o=n?gi(n,1).join(\"\"):e.slice(1);return i[t]()+o}}function Mi(t){return function(e){return Pe(Za(Da(e).replace(Jt,\"\")),t,\"\")}}function zi(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=qn(t.prototype),r=t.apply(n,e);return Yu(r)?r:n}}function Ui(t){return function(e,n,i){var o=St(e);if(!Hu(e)){var u=oo(n,3);e=ka(e),n=function(t){return u(o[t],t,o)}}var a=t(e,n,i);return a>-1?o[u?e[a]:a]:r}}function Ti(t){return Yi(function(e){var n=e.length,o=n,u=Ln.prototype.thru;for(t&&e.reverse();o--;){var a=e[o];if(\"function\"!=typeof a)throw new At(i);if(u&&!c&&\"wrapper\"==ro(a))var c=new Ln([],!0)}for(o=c?o:n;++o<n;){var s=ro(a=e[o]),f=\"wrapper\"==s?no(a):r;c=f&&mo(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?c[ro(f[0])].apply(c,f[3]):1==a.length&&mo(a)?c[s]():c.thru(a)}return function(){var t=arguments,r=t[0];if(c&&1==t.length&&$u(r))return c.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Fi(t,e,n,i,o,u,a,s,f,l){var p=e&c,h=1&e,d=2&e,v=24&e,_=512&e,y=d?r:zi(t);return function c(){for(var g=arguments.length,m=rt(g),b=g;b--;)m[b]=arguments[b];if(v)var w=io(c),j=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(m,w);if(i&&(m=Si(m,i,o,v)),u&&(m=Oi(m,u,a,v)),g-=j,v&&g<l){var x=un(m,w);return Wi(t,e,Fi,c.placeholder,n,m,x,s,f,l-g)}var S=h?n:this,O=d?S[t]:t;return g=m.length,s?m=function(t,e){for(var n=t.length,i=yn(e.length,n),o=Ii(t);i--;){var u=e[i];t[i]=_o(u,n)?o[u]:r}return t}(m,s):_&&g>1&&m.reverse(),p&&f<g&&(m.length=f),this&&this!==fe&&this instanceof c&&(O=y||zi(O)),O.apply(S,m)}}function Ni(t,e){return function(n,r){return function(t,e,n,r){return gr(t,function(t,i,o){e(r,n(t),i,o)}),r}(n,t,e(r),{})}}function qi(t,e){return function(n,i){var o;if(n===r&&i===r)return e;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ui(n),i=ui(i)):(n=oi(n),i=oi(i)),o=t(n,i)}return o}}function Bi(t){return Yi(function(e){return e=ke(e,Ke(oo())),Gr(function(n){var r=this;return t(e,function(t){return je(t,r,n)})})})}function Li(t,e){var n=(e=e===r?\" \":ui(e)).length;if(n<2)return n?Vr(e,t):e;var i=Vr(e,pe(t/sn(e)));return nn(e)?gi(fn(i),0,t).join(\"\"):i.slice(0,t)}function Di(t){return function(e,n,i){return i&&\"number\"!=typeof i&&yo(e,n,i)&&(n=i=r),e=pa(e),n===r?(n=e,e=0):n=pa(n),function(t,e,n,r){for(var i=-1,o=_n(pe((e-t)/(n||1)),0),u=rt(o);o--;)u[r?o:++i]=t,t+=n;return u}(e,n,i=i===r?e<n?1:-1:pa(i),t)}}function $i(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=va(e),n=va(n)),t(e,n)}}function Wi(t,e,n,i,o,u,c,s,f,l){var p=8&e;e|=p?a:64,4&(e&=~(p?64:a))||(e&=-4);var h=[t,e,o,p?u:r,p?c:r,p?r:u,p?r:c,s,f,l],d=n.apply(r,h);return mo(t)&&Ao(d,h),d.placeholder=i,ko(d,t,e)}function Hi(t){var e=xt[t];return function(t,n){if(t=va(t),(n=null==n?0:yn(ha(n),292))&&$e(t)){var r=(ya(t)+\"e\").split(\"e\");return+((r=(ya(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var Vi=On&&1/an(new On([,-0]))[1]==s?function(t){return new On(t)}:ac;function Gi(t){return function(e){var n=lo(e);return n==w?rn(e):n==I?cn(e):function(t,e){return ke(e,function(e){return[e,t[e]]})}(e,t(e))}}function Ki(t,e,n,o,s,f,l,p){var h=2&e;if(!h&&\"function\"!=typeof t)throw new At(i);var d=o?o.length:0;if(d||(e&=-97,o=s=r),l=l===r?l:_n(ha(l),0),p=p===r?p:ha(p),d-=s?s.length:0,64&e){var v=o,_=s;o=s=r}var y=h?r:no(t),g=[t,e,n,o,s,v,_,f,l,p];if(y&&function(t,e){var n=t[1],r=e[1],i=n|r,o=i<131,a=r==c&&8==n||r==c&&256==n&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!o&&!a)return t;1&r&&(t[2]=e[2],i|=1&n?0:4);var s=e[3];if(s){var f=t[3];t[3]=f?Si(f,s,e[4]):s,t[4]=f?un(t[3],u):e[4]}(s=e[5])&&(f=t[5],t[5]=f?Oi(f,s,e[6]):s,t[6]=f?un(t[5],u):e[6]),(s=e[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?e[8]:yn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i}(g,y),t=g[0],e=g[1],n=g[2],o=g[3],s=g[4],!(p=g[9]=g[9]===r?h?0:t.length:_n(g[9]-d,0))&&24&e&&(e&=-25),e&&1!=e)m=8==e||16==e?function(t,e,n){var i=zi(t);return function o(){for(var u=arguments.length,a=rt(u),c=u,s=io(o);c--;)a[c]=arguments[c];var f=u<3&&a[0]!==s&&a[u-1]!==s?[]:un(a,s);return(u-=f.length)<n?Wi(t,e,Fi,o.placeholder,r,a,f,r,r,n-u):je(this&&this!==fe&&this instanceof o?i:t,this,a)}}(t,e,p):e!=a&&33!=e||s.length?Fi.apply(r,g):function(t,e,n,r){var i=1&e,o=zi(t);return function e(){for(var u=-1,a=arguments.length,c=-1,s=r.length,f=rt(s+a),l=this&&this!==fe&&this instanceof e?o:t;++c<s;)f[c]=r[c];for(;a--;)f[c++]=arguments[++u];return je(l,i?n:this,f)}}(t,e,n,o);else var m=function(t,e,n){var r=1&e,i=zi(t);return function e(){return(this&&this!==fe&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return ko((y?Xr:Ao)(m,g),t,e)}function Ji(t,e,n,i){return t===r||qu(t,kt[n])&&!Mt.call(i,n)?e:t}function Zi(t,e,n,i,o,u){return Yu(t)&&Yu(e)&&(u.set(e,t),qr(t,e,r,Zi,u),u.delete(e)),t}function Xi(t){return ra(t)?r:t}function Qi(t,e,n,i,o,u){var a=1&n,c=t.length,s=e.length;if(c!=s&&!(a&&s>c))return!1;var f=u.get(t),l=u.get(e);if(f&&l)return f==e&&l==t;var p=-1,h=!0,d=2&n?new Vn:r;for(u.set(t,e),u.set(e,t);++p<c;){var v=t[p],_=e[p];if(i)var y=a?i(_,v,p,e,t,u):i(v,_,p,t,e,u);if(y!==r){if(y)continue;h=!1;break}if(d){if(!ze(e,function(t,e){if(!Ze(d,e)&&(v===t||o(v,t,n,i,u)))return d.push(e)})){h=!1;break}}else if(v!==_&&!o(v,_,n,i,u)){h=!1;break}}return u.delete(t),u.delete(e),h}function Yi(t){return Eo(So(t,r,Wo),t+\"\")}function to(t){return jr(t,ka,so)}function eo(t){return jr(t,Ra,fo)}var no=Cn?function(t){return Cn.get(t)}:ac;function ro(t){for(var e=t.name+\"\",n=En[e],r=Mt.call(En,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function io(t){return(Mt.call(Nn,\"placeholder\")?Nn:t).placeholder}function oo(){var t=Nn.iteratee||rc;return t=t===rc?Mr:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function ao(t){for(var e=ka(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,jo(i)]}return e}function co(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return Pr(n)?n:r}var so=ve?function(t){return null==t?[]:(t=St(t),Ae(ve(t),function(e){return Vt.call(t,e)}))}:dc,fo=ve?function(t){for(var e=[];t;)Re(e,so(t)),t=Wt(t);return e}:dc,lo=xr;function po(t,e,n){for(var r=-1,i=(e=_i(e,t)).length,o=!1;++r<i;){var u=To(e[r]);if(!(o=null!=t&&n(t,u)))break;t=t[u]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Qu(i)&&_o(u,i)&&($u(t)||Du(t))}function ho(t){return\"function\"!=typeof t.constructor||wo(t)?{}:qn(Wt(t))}function vo(t){return $u(t)||Du(t)||!!(Kt&&t&&t[Kt])}function _o(t,e){var n=typeof t;return!!(e=e??f)&&(\"number\"==n||\"symbol\"!=n&&_t.test(t))&&t>-1&&t%1==0&&t<e}function yo(t,e,n){if(!Yu(n))return!1;var r=typeof e;return!!(\"number\"==r?Hu(n)&&_o(e,n.length):\"string\"==r&&e in n)&&qu(n[e],t)}function go(t,e){if($u(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!aa(t))||Q.test(t)||!X.test(t)||null!=e&&t in St(e)}function mo(t){var e=ro(t),n=Nn[e];if(\"function\"!=typeof n||!(e in Dn.prototype))return!1;if(t===n)return!0;var r=no(n);return!!r&&t===r[0]}(jn&&lo(new jn(new ArrayBuffer(1)))!=R||xn&&lo(new xn)!=w||Sn&&lo(Sn.resolve())!=S||On&&lo(new On)!=I||In&&lo(new In)!=E)&&(lo=function(t){var e=xr(t),n=e==x?t.constructor:r,i=n?Fo(n):\"\";if(i)switch(i){case kn:return R;case Rn:return w;case Pn:return S;case Mn:return I;case zn:return E}return e});var bo=Rt?Zu:vc;function wo(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||kt)}function jo(t){return t==t&&!Yu(t)}function xo(t,e){return function(n){return null!=n&&n[t]===e&&(e!==r||t in St(n))}}function So(t,e,n){return e=_n(e===r?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=_n(r.length-e,0),u=rt(o);++i<o;)u[i]=r[e+i];i=-1;for(var a=rt(e+1);++i<e;)a[i]=r[i];return a[e]=n(u),je(t,this,a)}}function Oo(t,e){return e.length<2?t:wr(t,ti(e,0,-1))}function Io(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var Ao=Ro(Xr),Co=le||function(t,e){return fe.setTimeout(t,e)},Eo=Ro(Qr);function ko(t,e,n){var r=e+\"\";return Eo(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return Se(h,function(n){var r=\"_.\"+n[0];e&n[1]&&!Ce(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(ot);return e?e[1].split(ut):[]}(r),n)))}function Ro(t){var e=0,n=0;return function(){var i=gn(),o=16-(i-n);if(n=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(r,arguments)}}function Po(t,e){var n=-1,i=t.length,o=i-1;for(e=e===r?i:e;++n<e;){var u=Hr(n,o),a=t[u];t[u]=t[n],t[n]=a}return t.length=e,t}var Mo,zo,Uo=(Mo=Mu(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(Y,function(t,n,r,i){e.push(r?i.replace(st,\"$1\"):n||t)}),e},function(t){return 500===zo.size&&zo.clear(),t}),zo=Mo.cache,Mo);function To(t){if(\"string\"==typeof t||aa(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Fo(t){if(null!=t){try{return Pt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function No(t){if(t instanceof Dn)return t.clone();var e=new Ln(t.__wrapped__,t.__chain__);return e.__actions__=Ii(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var qo=Gr(function(t,e){return Vu(t)?sr(t,vr(e,1,Vu,!0)):[]}),Bo=Gr(function(t,e){var n=Jo(e);return Vu(n)&&(n=r),Vu(t)?sr(t,vr(e,1,Vu,!0),oo(n,2)):[]}),Lo=Gr(function(t,e){var n=Jo(e);return Vu(n)&&(n=r),Vu(t)?sr(t,vr(e,1,Vu,!0),r,n):[]});function Do(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ha(n);return i<0&&(i=_n(r+i,0)),Fe(t,oo(e,3),i)}function $o(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return n!==r&&(o=ha(n),o=n<0?_n(i+o,0):yn(o,i-1)),Fe(t,oo(e,3),o,!0)}function Wo(t){return null!=t&&t.length?vr(t,1):[]}function Ho(t){return t&&t.length?t[0]:r}var Vo=Gr(function(t){var e=ke(t,di);return e.length&&e[0]===t[0]?Ar(e):[]}),Go=Gr(function(t){var e=Jo(t),n=ke(t,di);return e===Jo(n)?e=r:n.pop(),n.length&&n[0]===t[0]?Ar(n,oo(e,2)):[]}),Ko=Gr(function(t){var e=Jo(t),n=ke(t,di);return(e=\"function\"==typeof e?e:r)&&n.pop(),n.length&&n[0]===t[0]?Ar(n,r,e):[]});function Jo(t){var e=null==t?0:t.length;return e?t[e-1]:r}var Zo=Gr(Xo);function Xo(t,e){return t&&t.length&&e&&e.length?$r(t,e):t}var Qo=Yi(function(t,e){var n=null==t?0:t.length,r=ir(t,e);return Wr(t,ke(e,function(t){return _o(t,n)?+t:t}).sort(xi)),r});function Yo(t){return null==t?t:wn.call(t)}var tu=Gr(function(t){return ai(vr(t,1,Vu,!0))}),eu=Gr(function(t){var e=Jo(t);return Vu(e)&&(e=r),ai(vr(t,1,Vu,!0),oo(e,2))}),nu=Gr(function(t){var e=Jo(t);return e=\"function\"==typeof e?e:r,ai(vr(t,1,Vu,!0),r,e)});function ru(t){if(!t||!t.length)return[];var e=0;return t=Ae(t,function(t){if(Vu(t))return e=_n(t.length,e),!0}),Ve(e,function(e){return ke(t,De(e))})}function iu(t,e){if(!t||!t.length)return[];var n=ru(t);return null==e?n:ke(n,function(t){return je(e,r,t)})}var ou=Gr(function(t,e){return Vu(t)?sr(t,e):[]}),uu=Gr(function(t){return pi(Ae(t,Vu))}),au=Gr(function(t){var e=Jo(t);return Vu(e)&&(e=r),pi(Ae(t,Vu),oo(e,2))}),cu=Gr(function(t){var e=Jo(t);return e=\"function\"==typeof e?e:r,pi(Ae(t,Vu),r,e)}),su=Gr(ru),fu=Gr(function(t){var e=t.length,n=e>1?t[e-1]:r;return n=\"function\"==typeof n?(t.pop(),n):r,iu(t,n)});function lu(t){var e=Nn(t);return e.__chain__=!0,e}function pu(t,e){return e(t)}var hu=Yi(function(t){var e=t.length,n=e?t[0]:0,i=this.__wrapped__,o=function(e){return ir(e,t)};return!(e>1||this.__actions__.length)&&i instanceof Dn&&_o(n)?((i=i.slice(n,+n+(e?1:0))).__actions__.push({func:pu,args:[o],thisArg:r}),new Ln(i,this.__chain__).thru(function(t){return e&&!t.length&&t.push(r),t})):this.thru(o)}),du=Ci(function(t,e,n){Mt.call(t,n)?++t[n]:rr(t,n,1)}),vu=Ui(Do),_u=Ui($o);function yu(t,e){return($u(t)?Se:fr)(t,oo(e,3))}function gu(t,e){return($u(t)?Oe:lr)(t,oo(e,3))}var mu=Ci(function(t,e,n){Mt.call(t,n)?t[n].push(e):rr(t,n,[e])}),bu=Gr(function(t,e,n){var r=-1,i=\"function\"==typeof e,o=Hu(t)?rt(t.length):[];return fr(t,function(t){o[++r]=i?je(e,t,n):Cr(t,e,n)}),o}),wu=Ci(function(t,e,n){rr(t,n,e)});function ju(t,e){return($u(t)?ke:Tr)(t,oo(e,3))}var xu=Ci(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),Su=Gr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&yo(t,e[0],e[1])?e=[]:n>2&&yo(e[0],e[1],e[2])&&(e=[e[0]]),Lr(t,vr(e,1),[])}),Ou=se||function(){return fe.Date.now()};function Iu(t,e,n){return e=n?r:e,e=t&&null==e?t.length:e,Ki(t,c,r,r,r,r,e)}function Au(t,e){var n;if(\"function\"!=typeof e)throw new At(i);return t=ha(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=r),n}}var Cu=Gr(function(t,e,n){var r=1;if(n.length){var i=un(n,io(Cu));r|=a}return Ki(t,r,e,n,i)}),Eu=Gr(function(t,e,n){var r=3;if(n.length){var i=un(n,io(Eu));r|=a}return Ki(e,r,t,n,i)});function ku(t,e,n){var o,u,a,c,s,f,l=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new At(i);function v(e){var n=o,i=u;return o=u=r,l=e,c=t.apply(i,n)}function _(t){var n=t-f;return f===r||n>=e||n<0||h&&t-l>=a}function y(){var t=Ou();if(_(t))return g(t);s=Co(y,function(t){var n=e-(t-f);return h?yn(n,a-(t-l)):n}(t))}function g(t){return s=r,d&&o?v(t):(o=u=r,c)}function m(){var t=Ou(),n=_(t);if(o=arguments,u=this,f=t,n){if(s===r)return function(t){return l=t,s=Co(y,e),p?v(t):c}(f);if(h)return mi(s),s=Co(y,e),v(f)}return s===r&&(s=Co(y,e)),c}return e=va(e)||0,Yu(n)&&(p=!!n.leading,a=(h=\"maxWait\"in n)?_n(va(n.maxWait)||0,e):a,d=\"trailing\"in n?!!n.trailing:d),m.cancel=function(){s!==r&&mi(s),l=0,o=f=u=s=r},m.flush=function(){return s===r?c:g(Ou())},m}var Ru=Gr(function(t,e){return cr(t,1,e)}),Pu=Gr(function(t,e,n){return cr(t,va(e)||0,n)});function Mu(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new At(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return n.cache=o.set(i,u)||o,u};return n.cache=new(Mu.Cache||Hn),n}function zu(t){if(\"function\"!=typeof t)throw new At(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Mu.Cache=Hn;var Uu=yi(function(t,e){var n=(e=1==e.length&&$u(e[0])?ke(e[0],Ke(oo())):ke(vr(e,1),Ke(oo()))).length;return Gr(function(r){for(var i=-1,o=yn(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return je(t,this,r)})}),Tu=Gr(function(t,e){var n=un(e,io(Tu));return Ki(t,a,r,e,n)}),Fu=Gr(function(t,e){var n=un(e,io(Fu));return Ki(t,64,r,e,n)}),Nu=Yi(function(t,e){return Ki(t,256,r,r,r,e)});function qu(t,e){return t===e||t!=t&&e!=e}var Bu=$i(Sr),Lu=$i(function(t,e){return t>=e}),Du=Er(function(){return arguments}())?Er:function(t){return ta(t)&&Mt.call(t,\"callee\")&&!Vt.call(t,\"callee\")},$u=rt.isArray,Wu=_e?Ke(_e):function(t){return ta(t)&&xr(t)==k};function Hu(t){return null!=t&&Qu(t.length)&&!Zu(t)}function Vu(t){return ta(t)&&Hu(t)}var Gu=Ue||vc,Ku=ye?Ke(ye):function(t){return ta(t)&&xr(t)==y};function Ju(t){if(!ta(t))return!1;var e=xr(t);return e==g||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ra(t)}function Zu(t){if(!Yu(t))return!1;var e=xr(t);return e==m||e==b||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Xu(t){return\"number\"==typeof t&&t==ha(t)}function Qu(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=f}function Yu(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function ta(t){return null!=t&&\"object\"==typeof t}var ea=ge?Ke(ge):function(t){return ta(t)&&lo(t)==w};function na(t){return\"number\"==typeof t||ta(t)&&xr(t)==j}function ra(t){if(!ta(t)||xr(t)!=x)return!1;var e=Wt(t);if(null===e)return!0;var n=Mt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&Pt.call(n)==Ft}var ia=me?Ke(me):function(t){return ta(t)&&xr(t)==O},oa=be?Ke(be):function(t){return ta(t)&&lo(t)==I};function ua(t){return\"string\"==typeof t||!$u(t)&&ta(t)&&xr(t)==A}function aa(t){return\"symbol\"==typeof t||ta(t)&&xr(t)==C}var ca=we?Ke(we):function(t){return ta(t)&&Qu(t.length)&&!!re[xr(t)]},sa=$i(Ur),fa=$i(function(t,e){return t<=e});function la(t){if(!t)return[];if(Hu(t))return ua(t)?fn(t):Ii(t);if(Xt&&t[Xt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Xt]());var e=lo(t);return(e==w?rn:e==I?an:qa)(t)}function pa(t){return t?(t=va(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ha(t){var e=pa(t),n=e%1;return e==e?n?e-n:e:0}function da(t){return t?or(ha(t),0,p):0}function va(t){if(\"number\"==typeof t)return t;if(aa(t))return l;if(Yu(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=Yu(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Ge(t);var n=ht.test(t);return n||vt.test(t)?ae(t.slice(2),n?2:8):pt.test(t)?l:+t}function _a(t){return Ai(t,Ra(t))}function ya(t){return null==t?\"\":ui(t)}var ga=Ei(function(t,e){if(wo(e)||Hu(e))Ai(e,ka(e),t);else for(var n in e)Mt.call(e,n)&&Yn(t,n,e[n])}),ma=Ei(function(t,e){Ai(e,Ra(e),t)}),ba=Ei(function(t,e,n,r){Ai(e,Ra(e),t,r)}),wa=Ei(function(t,e,n,r){Ai(e,ka(e),t,r)}),ja=Yi(ir),xa=Gr(function(t,e){t=St(t);var n=-1,i=e.length,o=i>2?e[2]:r;for(o&&yo(e[0],e[1],o)&&(i=1);++n<i;)for(var u=e[n],a=Ra(u),c=-1,s=a.length;++c<s;){var f=a[c],l=t[f];(l===r||qu(l,kt[f])&&!Mt.call(t,f))&&(t[f]=u[f])}return t}),Sa=Gr(function(t){return t.push(r,Zi),je(Ma,r,t)});function Oa(t,e,n){var i=null==t?r:wr(t,e);return i===r?n:i}function Ia(t,e){return null!=t&&po(t,e,Ir)}var Aa=Ni(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Tt.call(e)),t[e]=n},Ya(nc)),Ca=Ni(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Tt.call(e)),Mt.call(t,e)?t[e].push(n):t[e]=[n]},oo),Ea=Gr(Cr);function ka(t){return Hu(t)?Kn(t):zr(t)}function Ra(t){return Hu(t)?Kn(t,!0):function(t){if(!Yu(t))return function(t){var e=[];if(null!=t)for(var n in St(t))e.push(n);return e}(t);var e=wo(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&Mt.call(t,r))&&n.push(r);return n}(t)}var Pa=Ei(function(t,e,n){qr(t,e,n)}),Ma=Ei(function(t,e,n,r){qr(t,e,n,r)}),za=Yi(function(t,e){var n={};if(null==t)return n;var r=!1;e=ke(e,function(e){return e=_i(e,t),r||(r=e.length>1),e}),Ai(t,eo(t),n),r&&(n=ur(n,7,Xi));for(var i=e.length;i--;)ci(n,e[i]);return n}),Ua=Yi(function(t,e){return null==t?{}:function(t,e){return Dr(t,e,function(e,n){return Ia(t,n)})}(t,e)});function Ta(t,e){if(null==t)return{};var n=ke(eo(t),function(t){return[t]});return e=oo(e),Dr(t,n,function(t,n){return e(t,n[0])})}var Fa=Gi(ka),Na=Gi(Ra);function qa(t){return null==t?[]:Je(t,ka(t))}var Ba=Mi(function(t,e,n){return e=e.toLowerCase(),t+(n?La(e):e)});function La(t){return Ja(ya(t).toLowerCase())}function Da(t){return(t=ya(t))&&t.replace(yt,Ye).replace(Zt,\"\")}var $a=Mi(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Wa=Mi(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),Ha=Pi(\"toLowerCase\"),Va=Mi(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Ga=Mi(function(t,e,n){return t+(n?\" \":\"\")+Ja(e)}),Ka=Mi(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Ja=Pi(\"toUpperCase\");function Za(t,e,n){return t=ya(t),(e=n?r:e)===r?function(t){return te.test(t)}(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(e)||[]}var Xa=Gr(function(t,e){try{return je(t,r,e)}catch(t){return Ju(t)?t:new wt(t)}}),Qa=Yi(function(t,e){return Se(e,function(e){e=To(e),rr(t,e,Cu(t[e],t))}),t});function Ya(t){return function(){return t}}var tc=Ti(),ec=Ti(!0);function nc(t){return t}function rc(t){return Mr(\"function\"==typeof t?t:ur(t,1))}var ic=Gr(function(t,e){return function(n){return Cr(n,t,e)}}),oc=Gr(function(t,e){return function(n){return Cr(t,n,e)}});function uc(t,e,n){var r=ka(e),i=br(e,r);null!=n||Yu(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=br(e,ka(e)));var o=!(Yu(n)&&\"chain\"in n&&!n.chain),u=Zu(t);return Se(i,function(n){var r=e[n];t[n]=r,u&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Ii(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Re([this.value()],arguments))})}),t}function ac(){}var cc=Bi(ke),sc=Bi(Ie),fc=Bi(ze);function lc(t){return go(t)?De(To(t)):function(t){return function(e){return wr(e,t)}}(t)}var pc=Di(),hc=Di(!0);function dc(){return[]}function vc(){return!1}var _c,yc=qi(function(t,e){return t+e},0),gc=Hi(\"ceil\"),mc=qi(function(t,e){return t/e},1),bc=Hi(\"floor\"),wc=qi(function(t,e){return t*e},1),jc=Hi(\"round\"),xc=qi(function(t,e){return t-e},0);return Nn.after=function(t,e){if(\"function\"!=typeof e)throw new At(i);return t=ha(t),function(){if(--t<1)return e.apply(this,arguments)}},Nn.ary=Iu,Nn.assign=ga,Nn.assignIn=ma,Nn.assignInWith=ba,Nn.assignWith=wa,Nn.at=ja,Nn.before=Au,Nn.bind=Cu,Nn.bindAll=Qa,Nn.bindKey=Eu,Nn.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return $u(t)?t:[t]},Nn.chain=lu,Nn.chunk=function(t,e,n){e=(n?yo(t,e,n):e===r)?1:_n(ha(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,u=0,a=rt(pe(i/e));o<i;)a[u++]=ti(t,o,o+=e);return a},Nn.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i},Nn.concat=function(){var t=arguments.length;if(!t)return[];for(var e=rt(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return Re($u(n)?Ii(n):[n],vr(e,1))},Nn.cond=function(t){var e=null==t?0:t.length,n=oo();return t=e?ke(t,function(t){if(\"function\"!=typeof t[1])throw new At(i);return[n(t[0]),t[1]]}):[],Gr(function(n){for(var r=-1;++r<e;){var i=t[r];if(je(i[0],this,n))return je(i[1],this,n)}})},Nn.conforms=function(t){return function(t){var e=ka(t);return function(n){return ar(n,t,e)}}(ur(t,1))},Nn.constant=Ya,Nn.countBy=du,Nn.create=function(t,e){var n=qn(t);return null==e?n:nr(n,e)},Nn.curry=function t(e,n,i){var o=Ki(e,8,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Nn.curryRight=function t(e,n,i){var o=Ki(e,16,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Nn.debounce=ku,Nn.defaults=xa,Nn.defaultsDeep=Sa,Nn.defer=Ru,Nn.delay=Pu,Nn.difference=qo,Nn.differenceBy=Bo,Nn.differenceWith=Lo,Nn.drop=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=n||e===r?1:ha(e))<0?0:e,i):[]},Nn.dropRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,0,(e=i-(e=n||e===r?1:ha(e)))<0?0:e):[]},Nn.dropRightWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!0,!0):[]},Nn.dropWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!0):[]},Nn.fill=function(t,e,n,i){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&yo(t,e,n)&&(n=0,i=o),function(t,e,n,i){var o=t.length;for((n=ha(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:ha(i))<0&&(i+=o),i=n>i?0:da(i);n<i;)t[n++]=e;return t}(t,e,n,i)):[]},Nn.filter=function(t,e){return($u(t)?Ae:dr)(t,oo(e,3))},Nn.flatMap=function(t,e){return vr(ju(t,e),1)},Nn.flatMapDeep=function(t,e){return vr(ju(t,e),s)},Nn.flatMapDepth=function(t,e,n){return n=n===r?1:ha(n),vr(ju(t,e),n)},Nn.flatten=Wo,Nn.flattenDeep=function(t){return null!=t&&t.length?vr(t,s):[]},Nn.flattenDepth=function(t,e){return null!=t&&t.length?vr(t,e=e===r?1:ha(e)):[]},Nn.flip=function(t){return Ki(t,512)},Nn.flow=tc,Nn.flowRight=ec,Nn.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];rr(r,i[0],i[1])}return r},Nn.functions=function(t){return null==t?[]:br(t,ka(t))},Nn.functionsIn=function(t){return null==t?[]:br(t,Ra(t))},Nn.groupBy=mu,Nn.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Nn.intersection=Vo,Nn.intersectionBy=Go,Nn.intersectionWith=Ko,Nn.invert=Aa,Nn.invertBy=Ca,Nn.invokeMap=bu,Nn.iteratee=rc,Nn.keyBy=wu,Nn.keys=ka,Nn.keysIn=Ra,Nn.map=ju,Nn.mapKeys=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,e(t,r,i),t)}),n},Nn.mapValues=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,r,e(t,r,i))}),n},Nn.matches=function(t){return Fr(ur(t,1))},Nn.matchesProperty=function(t,e){return Nr(t,ur(e,1))},Nn.memoize=Mu,Nn.merge=Pa,Nn.mergeWith=Ma,Nn.method=ic,Nn.methodOf=oc,Nn.mixin=uc,Nn.negate=zu,Nn.nthArg=function(t){return t=ha(t),Gr(function(e){return Br(e,t)})},Nn.omit=za,Nn.omitBy=function(t,e){return Ta(t,zu(oo(e)))},Nn.once=function(t){return Au(2,t)},Nn.orderBy=function(t,e,n,i){return null==t?[]:($u(e)||(e=null==e?[]:[e]),$u(n=i?r:n)||(n=null==n?[]:[n]),Lr(t,e,n))},Nn.over=cc,Nn.overArgs=Uu,Nn.overEvery=sc,Nn.overSome=fc,Nn.partial=Tu,Nn.partialRight=Fu,Nn.partition=xu,Nn.pick=Ua,Nn.pickBy=Ta,Nn.property=lc,Nn.propertyOf=function(t){return function(e){return null==t?r:wr(t,e)}},Nn.pull=Zo,Nn.pullAll=Xo,Nn.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?$r(t,e,oo(n,2)):t},Nn.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?$r(t,e,r,n):t},Nn.pullAt=Qo,Nn.range=pc,Nn.rangeRight=hc,Nn.rearg=Nu,Nn.reject=function(t,e){return($u(t)?Ae:dr)(t,zu(oo(e,3)))},Nn.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=oo(e,3);++r<o;){var u=t[r];e(u,r,t)&&(n.push(u),i.push(r))}return Wr(t,i),n},Nn.rest=function(t,e){if(\"function\"!=typeof t)throw new At(i);return Gr(t,e=e===r?e:ha(e))},Nn.reverse=Yo,Nn.sampleSize=function(t,e,n){return e=(n?yo(t,e,n):e===r)?1:ha(e),($u(t)?Zn:Jr)(t,e)},Nn.set=function(t,e,n){return null==t?t:Zr(t,e,n)},Nn.setWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:Zr(t,e,n,i)},Nn.shuffle=function(t){return($u(t)?Xn:Yr)(t)},Nn.slice=function(t,e,n){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&yo(t,e,n)?(e=0,n=i):(e=null==e?0:ha(e),n=n===r?i:ha(n)),ti(t,e,n)):[]},Nn.sortBy=Su,Nn.sortedUniq=function(t){return t&&t.length?ii(t):[]},Nn.sortedUniqBy=function(t,e){return t&&t.length?ii(t,oo(e,2)):[]},Nn.split=function(t,e,n){return n&&\"number\"!=typeof n&&yo(t,e,n)&&(e=n=r),(n=n===r?p:n>>>0)?(t=ya(t))&&(\"string\"==typeof e||null!=e&&!ia(e))&&!(e=ui(e))&&nn(t)?gi(fn(t),0,n):t.split(e,n):[]},Nn.spread=function(t,e){if(\"function\"!=typeof t)throw new At(i);return e=null==e?0:_n(ha(e),0),Gr(function(n){var r=n[e],i=gi(n,0,e);return r&&Re(i,r),je(t,this,i)})},Nn.tail=function(t){var e=null==t?0:t.length;return e?ti(t,1,e):[]},Nn.take=function(t,e,n){return t&&t.length?ti(t,0,(e=n||e===r?1:ha(e))<0?0:e):[]},Nn.takeRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=i-(e=n||e===r?1:ha(e)))<0?0:e,i):[]},Nn.takeRightWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!1,!0):[]},Nn.takeWhile=function(t,e){return t&&t.length?fi(t,oo(e,3)):[]},Nn.tap=function(t,e){return e(t),t},Nn.throttle=function(t,e,n){var r=!0,o=!0;if(\"function\"!=typeof t)throw new At(i);return Yu(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),ku(t,e,{leading:r,maxWait:e,trailing:o})},Nn.thru=pu,Nn.toArray=la,Nn.toPairs=Fa,Nn.toPairsIn=Na,Nn.toPath=function(t){return $u(t)?ke(t,To):aa(t)?[t]:Ii(Uo(ya(t)))},Nn.toPlainObject=_a,Nn.transform=function(t,e,n){var r=$u(t),i=r||Gu(t)||ca(t);if(e=oo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Yu(t)&&Zu(o)?qn(Wt(t)):{}}return(i?Se:gr)(t,function(t,r,i){return e(n,t,r,i)}),n},Nn.unary=function(t){return Iu(t,1)},Nn.union=tu,Nn.unionBy=eu,Nn.unionWith=nu,Nn.uniq=function(t){return t&&t.length?ai(t):[]},Nn.uniqBy=function(t,e){return t&&t.length?ai(t,oo(e,2)):[]},Nn.uniqWith=function(t,e){return e=\"function\"==typeof e?e:r,t&&t.length?ai(t,r,e):[]},Nn.unset=function(t,e){return null==t||ci(t,e)},Nn.unzip=ru,Nn.unzipWith=iu,Nn.update=function(t,e,n){return null==t?t:si(t,e,vi(n))},Nn.updateWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:si(t,e,vi(n),i)},Nn.values=qa,Nn.valuesIn=function(t){return null==t?[]:Je(t,Ra(t))},Nn.without=ou,Nn.words=Za,Nn.wrap=function(t,e){return Tu(vi(e),t)},Nn.xor=uu,Nn.xorBy=au,Nn.xorWith=cu,Nn.zip=su,Nn.zipObject=function(t,e){return hi(t||[],e||[],Yn)},Nn.zipObjectDeep=function(t,e){return hi(t||[],e||[],Zr)},Nn.zipWith=fu,Nn.entries=Fa,Nn.entriesIn=Na,Nn.extend=ma,Nn.extendWith=ba,uc(Nn,Nn),Nn.add=yc,Nn.attempt=Xa,Nn.camelCase=Ba,Nn.capitalize=La,Nn.ceil=gc,Nn.clamp=function(t,e,n){return n===r&&(n=e,e=r),n!==r&&(n=(n=va(n))==n?n:0),e!==r&&(e=(e=va(e))==e?e:0),or(va(t),e,n)},Nn.clone=function(t){return ur(t,4)},Nn.cloneDeep=function(t){return ur(t,5)},Nn.cloneDeepWith=function(t,e){return ur(t,5,e=\"function\"==typeof e?e:r)},Nn.cloneWith=function(t,e){return ur(t,4,e=\"function\"==typeof e?e:r)},Nn.conformsTo=function(t,e){return null==e||ar(t,e,ka(e))},Nn.deburr=Da,Nn.defaultTo=function(t,e){return null==t||t!=t?e:t},Nn.divide=mc,Nn.endsWith=function(t,e,n){t=ya(t),e=ui(e);var i=t.length,o=n=n===r?i:or(ha(n),0,i);return(n-=e.length)>=0&&t.slice(n,o)==e},Nn.eq=qu,Nn.escape=function(t){return(t=ya(t))&&G.test(t)?t.replace(H,tn):t},Nn.escapeRegExp=function(t){return(t=ya(t))&&et.test(t)?t.replace(tt,\"\\\\$&\"):t},Nn.every=function(t,e,n){var i=$u(t)?Ie:pr;return n&&yo(t,e,n)&&(e=r),i(t,oo(e,3))},Nn.find=vu,Nn.findIndex=Do,Nn.findKey=function(t,e){return Te(t,oo(e,3),gr)},Nn.findLast=_u,Nn.findLastIndex=$o,Nn.findLastKey=function(t,e){return Te(t,oo(e,3),mr)},Nn.floor=bc,Nn.forEach=yu,Nn.forEachRight=gu,Nn.forIn=function(t,e){return null==t?t:_r(t,oo(e,3),Ra)},Nn.forInRight=function(t,e){return null==t?t:yr(t,oo(e,3),Ra)},Nn.forOwn=function(t,e){return t&&gr(t,oo(e,3))},Nn.forOwnRight=function(t,e){return t&&mr(t,oo(e,3))},Nn.get=Oa,Nn.gt=Bu,Nn.gte=Lu,Nn.has=function(t,e){return null!=t&&po(t,e,Or)},Nn.hasIn=Ia,Nn.head=Ho,Nn.identity=nc,Nn.includes=function(t,e,n,r){t=Hu(t)?t:qa(t),n=n&&!r?ha(n):0;var i=t.length;return n<0&&(n=_n(i+n,0)),ua(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&Ne(t,e,n)>-1},Nn.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ha(n);return i<0&&(i=_n(r+i,0)),Ne(t,e,i)},Nn.inRange=function(t,e,n){return e=pa(e),n===r?(n=e,e=0):n=pa(n),function(t,e,n){return t>=yn(e,n)&&t<_n(e,n)}(t=va(t),e,n)},Nn.invoke=Ea,Nn.isArguments=Du,Nn.isArray=$u,Nn.isArrayBuffer=Wu,Nn.isArrayLike=Hu,Nn.isArrayLikeObject=Vu,Nn.isBoolean=function(t){return!0===t||!1===t||ta(t)&&xr(t)==_},Nn.isBuffer=Gu,Nn.isDate=Ku,Nn.isElement=function(t){return ta(t)&&1===t.nodeType&&!ra(t)},Nn.isEmpty=function(t){if(null==t)return!0;if(Hu(t)&&($u(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Gu(t)||ca(t)||Du(t)))return!t.length;var e=lo(t);if(e==w||e==I)return!t.size;if(wo(t))return!zr(t).length;for(var n in t)if(Mt.call(t,n))return!1;return!0},Nn.isEqual=function(t,e){return kr(t,e)},Nn.isEqualWith=function(t,e,n){var i=(n=\"function\"==typeof n?n:r)?n(t,e):r;return i===r?kr(t,e,r,n):!!i},Nn.isError=Ju,Nn.isFinite=function(t){return\"number\"==typeof t&&$e(t)},Nn.isFunction=Zu,Nn.isInteger=Xu,Nn.isLength=Qu,Nn.isMap=ea,Nn.isMatch=function(t,e){return t===e||Rr(t,e,ao(e))},Nn.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:r,Rr(t,e,ao(e),n)},Nn.isNaN=function(t){return na(t)&&t!=+t},Nn.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Pr(t)},Nn.isNil=function(t){return null==t},Nn.isNull=function(t){return null===t},Nn.isNumber=na,Nn.isObject=Yu,Nn.isObjectLike=ta,Nn.isPlainObject=ra,Nn.isRegExp=ia,Nn.isSafeInteger=function(t){return Xu(t)&&t>=-9007199254740991&&t<=f},Nn.isSet=oa,Nn.isString=ua,Nn.isSymbol=aa,Nn.isTypedArray=ca,Nn.isUndefined=function(t){return t===r},Nn.isWeakMap=function(t){return ta(t)&&lo(t)==E},Nn.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==xr(t)},Nn.join=function(t,e){return null==t?\"\":dn.call(t,e)},Nn.kebabCase=$a,Nn.last=Jo,Nn.lastIndexOf=function(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=ha(n))<0?_n(i+o,0):yn(o,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Fe(t,Be,o,!0)},Nn.lowerCase=Wa,Nn.lowerFirst=Ha,Nn.lt=sa,Nn.lte=fa,Nn.max=function(t){return t&&t.length?hr(t,nc,Sr):r},Nn.maxBy=function(t,e){return t&&t.length?hr(t,oo(e,2),Sr):r},Nn.mean=function(t){return Le(t,nc)},Nn.meanBy=function(t,e){return Le(t,oo(e,2))},Nn.min=function(t){return t&&t.length?hr(t,nc,Ur):r},Nn.minBy=function(t,e){return t&&t.length?hr(t,oo(e,2),Ur):r},Nn.stubArray=dc,Nn.stubFalse=vc,Nn.stubObject=function(){return{}},Nn.stubString=function(){return\"\"},Nn.stubTrue=function(){return!0},Nn.multiply=wc,Nn.nth=function(t,e){return t&&t.length?Br(t,ha(e)):r},Nn.noConflict=function(){return fe._===this&&(fe._=Nt),this},Nn.noop=ac,Nn.now=Ou,Nn.pad=function(t,e,n){t=ya(t);var r=(e=ha(e))?sn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Li(de(i),n)+t+Li(pe(i),n)},Nn.padEnd=function(t,e,n){t=ya(t);var r=(e=ha(e))?sn(t):0;return e&&r<e?t+Li(e-r,n):t},Nn.padStart=function(t,e,n){t=ya(t);var r=(e=ha(e))?sn(t):0;return e&&r<e?Li(e-r,n)+t:t},Nn.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),mn(ya(t).replace(nt,\"\"),e||0)},Nn.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&yo(t,e,n)&&(e=n=r),n===r&&(\"boolean\"==typeof e?(n=e,e=r):\"boolean\"==typeof t&&(n=t,t=r)),t===r&&e===r?(t=0,e=1):(t=pa(t),e===r?(e=t,t=0):e=pa(e)),t>e){var i=t;t=e,e=i}if(n||t%1||e%1){var o=bn();return yn(t+o*(e-t+ue(\"1e-\"+((o+\"\").length-1))),e)}return Hr(t,e)},Nn.reduce=function(t,e,n){var r=$u(t)?Pe:We,i=arguments.length<3;return r(t,oo(e,4),n,i,fr)},Nn.reduceRight=function(t,e,n){var r=$u(t)?Me:We,i=arguments.length<3;return r(t,oo(e,4),n,i,lr)},Nn.repeat=function(t,e,n){return e=(n?yo(t,e,n):e===r)?1:ha(e),Vr(ya(t),e)},Nn.replace=function(){var t=arguments,e=ya(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Nn.result=function(t,e,n){var i=-1,o=(e=_i(e,t)).length;for(o||(o=1,t=r);++i<o;){var u=null==t?r:t[To(e[i])];u===r&&(i=o,u=n),t=Zu(u)?u.call(t):u}return t},Nn.round=jc,Nn.runInContext=t,Nn.sample=function(t){return($u(t)?Jn:Kr)(t)},Nn.size=function(t){if(null==t)return 0;if(Hu(t))return ua(t)?sn(t):t.length;var e=lo(t);return e==w||e==I?t.size:zr(t).length},Nn.snakeCase=Va,Nn.some=function(t,e,n){var i=$u(t)?ze:ei;return n&&yo(t,e,n)&&(e=r),i(t,oo(e,3))},Nn.sortedIndex=function(t,e){return ni(t,e)},Nn.sortedIndexBy=function(t,e,n){return ri(t,e,oo(n,2))},Nn.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=ni(t,e);if(r<n&&qu(t[r],e))return r}return-1},Nn.sortedLastIndex=function(t,e){return ni(t,e,!0)},Nn.sortedLastIndexBy=function(t,e,n){return ri(t,e,oo(n,2),!0)},Nn.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=ni(t,e,!0)-1;if(qu(t[n],e))return n}return-1},Nn.startCase=Ga,Nn.startsWith=function(t,e,n){return t=ya(t),n=null==n?0:or(ha(n),0,t.length),e=ui(e),t.slice(n,n+e.length)==e},Nn.subtract=xc,Nn.sum=function(t){return t&&t.length?He(t,nc):0},Nn.sumBy=function(t,e){return t&&t.length?He(t,oo(e,2)):0},Nn.template=function(t,e,n){var i=Nn.templateSettings;n&&yo(t,e,n)&&(e=r),t=ya(t),e=wa({},e,i,Ji);var o=wa({},e.imports,i.imports,Ji),u=ka(o),a=Je(o,u);Se(u,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,f=0,l=e.interpolate||gt,p=\"__p += '\",h=Ot((e.escape||gt).source+\"|\"+l.source+\"|\"+(l===Z?ft:gt).source+\"|\"+(e.evaluate||gt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Mt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ne+\"]\")+\"\\n\";t.replace(h,function(e,n,r,i,o,u){return r||(r=i),p+=t.slice(f,u).replace(mt,en),n&&(c=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(s=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),f=u+e.length,e}),p+=\"';\\n\";var v=Mt.call(e,\"variable\")&&e.variable;if(v){if(ct.test(v))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(L,\"\"):p).replace(D,\"$1\").replace($,\"$1;\"),p=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var _=Xa(function(){return jt(u,d+\"return \"+p).apply(r,a)});if(_.source=p,Ju(_))throw _;return _},Nn.times=function(t,e){if((t=ha(t))<1||t>f)return[];var n=p,r=yn(t,p);e=oo(e),t-=p;for(var i=Ve(r,e);++n<t;)e(n);return i},Nn.toFinite=pa,Nn.toInteger=ha,Nn.toLength=da,Nn.toLower=function(t){return ya(t).toLowerCase()},Nn.toNumber=va,Nn.toSafeInteger=function(t){return t?or(ha(t),-9007199254740991,f):0===t?t:0},Nn.toString=ya,Nn.toUpper=function(t){return ya(t).toUpperCase()},Nn.trim=function(t,e,n){if((t=ya(t))&&(n||e===r))return Ge(t);if(!t||!(e=ui(e)))return t;var i=fn(t),o=fn(e);return gi(i,Xe(i,o),Qe(i,o)+1).join(\"\")},Nn.trimEnd=function(t,e,n){if((t=ya(t))&&(n||e===r))return t.slice(0,ln(t)+1);if(!t||!(e=ui(e)))return t;var i=fn(t);return gi(i,0,Qe(i,fn(e))+1).join(\"\")},Nn.trimStart=function(t,e,n){if((t=ya(t))&&(n||e===r))return t.replace(nt,\"\");if(!t||!(e=ui(e)))return t;var i=fn(t);return gi(i,Xe(i,fn(e))).join(\"\")},Nn.truncate=function(t,e){var n=30,i=\"...\";if(Yu(e)){var o=\"separator\"in e?e.separator:o;n=\"length\"in e?ha(e.length):n,i=\"omission\"in e?ui(e.omission):i}var u=(t=ya(t)).length;if(nn(t)){var a=fn(t);u=a.length}if(n>=u)return t;var c=n-sn(i);if(c<1)return i;var s=a?gi(a,0,c).join(\"\"):t.slice(0,c);if(o===r)return s+i;if(a&&(c+=s.length-c),ia(o)){if(t.slice(c).search(o)){var f,l=s;for(o.global||(o=Ot(o.source,ya(lt.exec(o))+\"g\")),o.lastIndex=0;f=o.exec(l);)var p=f.index;s=s.slice(0,p===r?c:p)}}else if(t.indexOf(ui(o),c)!=c){var h=s.lastIndexOf(o);h>-1&&(s=s.slice(0,h))}return s+i},Nn.unescape=function(t){return(t=ya(t))&&V.test(t)?t.replace(W,pn):t},Nn.uniqueId=function(t){var e=++zt;return ya(t)+e},Nn.upperCase=Ka,Nn.upperFirst=Ja,Nn.each=yu,Nn.eachRight=gu,Nn.first=Ho,uc(Nn,(_c={},gr(Nn,function(t,e){Mt.call(Nn.prototype,e)||(_c[e]=t)}),_c),{chain:!1}),Nn.VERSION=\"4.18.1\",Se([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Nn[t].placeholder=Nn}),Se([\"drop\",\"take\"],function(t,e){Dn.prototype[t]=function(n){n=n===r?1:_n(ha(n),0);var i=this.__filtered__&&!e?new Dn(this):this.clone();return i.__filtered__?i.__takeCount__=yn(n,i.__takeCount__):i.__views__.push({size:yn(n,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Dn.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),Se([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=1==n||3==n;Dn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:oo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),Se([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");Dn.prototype[t]=function(){return this[n](1).value()[0]}}),Se([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");Dn.prototype[t]=function(){return this.__filtered__?new Dn(this):this[n](1)}}),Dn.prototype.compact=function(){return this.filter(nc)},Dn.prototype.find=function(t){return this.filter(t).head()},Dn.prototype.findLast=function(t){return this.reverse().find(t)},Dn.prototype.invokeMap=Gr(function(t,e){return\"function\"==typeof t?new Dn(this):this.map(function(n){return Cr(n,t,e)})}),Dn.prototype.reject=function(t){return this.filter(zu(oo(t)))},Dn.prototype.slice=function(t,e){t=ha(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Dn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==r&&(n=(e=ha(e))<0?n.dropRight(-e):n.take(e-t)),n)},Dn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Dn.prototype.toArray=function(){return this.take(p)},gr(Dn.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Nn[i?\"take\"+(\"last\"==e?\"Right\":\"\"):e],u=i||/^find/.test(e);o&&(Nn.prototype[e]=function(){var e=this.__wrapped__,a=i?[1]:arguments,c=e instanceof Dn,s=a[0],f=c||$u(e),l=function(t){var e=o.apply(Nn,Re([t],a));return i&&p?e[0]:e};f&&n&&\"function\"==typeof s&&1!=s.length&&(c=f=!1);var p=this.__chain__,h=!!this.__actions__.length,d=u&&!p,v=c&&!h;if(!u&&f){e=v?e:new Dn(this);var _=t.apply(e,a);return _.__actions__.push({func:pu,args:[l],thisArg:r}),new Ln(_,p)}return d&&v?t.apply(this,a):(_=this.thru(l),d?i?_.value()[0]:_.value():_)})}),Se([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=Ct[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Nn.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply($u(i)?i:[],t)}return this[n](function(n){return e.apply($u(n)?n:[],t)})}}),gr(Dn.prototype,function(t,e){var n=Nn[e];if(n){var r=n.name+\"\";Mt.call(En,r)||(En[r]=[]),En[r].push({name:e,func:n})}}),En[Fi(r,2).name]=[{name:\"wrapper\",func:r}],Dn.prototype.clone=function(){var t=new Dn(this.__wrapped__);return t.__actions__=Ii(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ii(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ii(this.__views__),t},Dn.prototype.reverse=function(){if(this.__filtered__){var t=new Dn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Dn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=$u(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],u=o.size;switch(o.type){case\"drop\":t+=u;break;case\"dropRight\":e-=u;break;case\"take\":e=yn(e,t+u);break;case\"takeRight\":t=_n(t,e-u)}}return{start:t,end:e}}(0,i,this.__views__),u=o.start,a=o.end,c=a-u,s=r?a:u-1,f=this.__iteratees__,l=f.length,p=0,h=yn(c,this.__takeCount__);if(!n||!r&&i==c&&h==c)return li(t,this.__actions__);var d=[];t:for(;c--&&p<h;){for(var v=-1,_=t[s+=e];++v<l;){var y=f[v],g=y.iteratee,m=y.type,b=g(_);if(2==m)_=b;else if(!b){if(1==m)continue t;break t}}d[p++]=_}return d},Nn.prototype.at=hu,Nn.prototype.chain=function(){return lu(this)},Nn.prototype.commit=function(){return new Ln(this.value(),this.__chain__)},Nn.prototype.next=function(){this.__values__===r&&(this.__values__=la(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Nn.prototype.plant=function(t){for(var e,n=this;n instanceof Bn;){var i=No(n);i.__index__=0,i.__values__=r,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e},Nn.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Dn){var e=t;return this.__actions__.length&&(e=new Dn(this)),(e=e.reverse()).__actions__.push({func:pu,args:[Yo],thisArg:r}),new Ln(e,this.__chain__)}return this.thru(Yo)},Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},Nn.prototype.first=Nn.prototype.head,Xt&&(Nn.prototype[Xt]=function(){return this}),Nn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(fe._=hn,define(function(){return hn})):pe?((pe.exports=hn)._=hn,le._=hn):fe._=hn}.call(this)},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,e,n){\"use strict\";n.d(e,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createMolliePaymentStrategy:()=>g});var t,e,i=n(315),o=n(9440);class u extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class a extends u{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(t||(t={}));class c extends u{constructor(e){super(function(e){switch(e){case t.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case t.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case t.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case t.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case t.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case t.MissingCheckoutConfig:case t.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case t.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case t.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case t.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case t.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case t.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case t.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class s extends a{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}function f(){const{navigator:t}=window;let e;return e=t.language?t.language:t.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof t.javaEnabled&&t.javaEnabled(),language:e,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(e||(e={}));class l extends u{constructor(t){super(function(t){switch(t){case e.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case e.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case e.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case e.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var p,h=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};!function(t){t.CREDIT_CARD=\"credit_card\"}(p||(p={}));const d=[\"klarnapaylater\",\"klarnasliceit\"];class v{constructor(t,e){this.mollieScriptLoader=t,this.paymentIntegrationService=e}initialize(e){return h(this,void 0,void 0,function*(){const{mollie:n,methodId:r,gatewayId:i}=e;if(!n)throw new a('Unable to initialize payment because \"options.mollie\" argument is not provided.');if(!r||!i)throw new a('Unable to initialize payment because \"methodId\" and/or \"gatewayId\" argument is not provided.');const u=document.querySelectorAll(\".mollie-components-controller\");(0,o.each)(u,t=>t.remove());const s=this.paymentIntegrationService.getState(),f=s.getStoreConfigOrThrow();this.initializeOptions=n;const l=s.getPaymentMethodOrThrow(r,i),{config:{merchantId:p,testMode:h}}=l;if(this.locale=s.getLocale(),!p)throw new c(t.MissingPaymentMethod);return this.isCreditCard(r)&&n.form&&this.shouldShowTSVHostedForm(r,i)?this.hostedForm=yield this.mountCardVerificationfields(n.form):this.isCreditCard(r)&&(this.mollieClient=yield this.loadMollieJs(p,f.storeProfile.storeLanguage,h),this.mountElements()),this.unsubscribe=()=>{if(this.paymentIntegrationService.getState().isPaymentMethodInitialized({methodId:e.methodId,gatewayId:e.gatewayId})){const t=document.getElementById(`${i}-${r}-paragraph`);t&&t.remove(),n.disableButton(!1),this.loadPaymentMethodsAllowed(n,r,i)}},this.unsubscribe(),this.loadPaymentMethodsAllowed(n,r,i),Promise.resolve()})}execute(t,e){return h(this,void 0,void 0,function*(){const{payment:n}=t,r=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]),i=null==n?void 0:n.paymentData;if(!n||!n.gatewayId||!i)throw new s([\"payment\",\"gatewayId\",\"paymentData\"]);try{return yield this.paymentIntegrationService.submitOrder(r,e),Boolean(i.instrumentId)?yield this.executeWithVaulted(n):this.isCreditCard(n.methodId)?yield this.executeWithCC(n):yield this.executeWithAPM(n)}catch(t){yield this.processAdditionalAction(t)}})}finalize(){return Promise.resolve()}deinitialize(t){if(this.unsubscribe&&this.unsubscribe(),this.hostedForm&&this.hostedForm.detach(),t&&t.methodId&&t.gatewayId&&!this.hostedForm){const e=document.getElementById(`${t.gatewayId}-${t.methodId}`);e&&e.remove()}else t&&t.methodId&&this.isCreditCard(t.methodId)&&this.cardHolderElement&&this.cardNumberElement&&this.verificationCodeElement&&this.expiryDateElement&&(this.cardHolderElement.unmount(),this.cardHolderElement=void 0,this.cardNumberElement.unmount(),this.cardNumberElement=void 0,this.verificationCodeElement.unmount(),this.verificationCodeElement=void 0,this.expiryDateElement.unmount(),this.expiryDateElement=void 0);return this.mollieClient=void 0,Promise.resolve()}executeWithCC(t){return h(this,void 0,void 0,function*(){const e=t.paymentData,{shouldSaveInstrument:n=!1,shouldSetAsDefaultInstrument:r=!1}=\"object\"!=typeof(i=e)||null===i||void 0!==i.shouldSaveInstrument&&\"boolean\"!=typeof i.shouldSaveInstrument||void 0!==i.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof i.shouldSetAsDefaultInstrument?{}:e;var i;const{token:o,error:u}=yield this.getMollieClient().createToken();if(u)return Promise.reject(u);const a={credit_card_token:{token:o},vault_payment_instrument:n,set_as_default_stored_instrument:r,browser_info:f(),shopper_locale:this.getShopperLocale()};yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},t),{paymentData:{formattedPayload:a}}))})}executeWithVaulted(t){return h(this,void 0,void 0,function*(){if(this.isHostedPaymentFormEnabled(t.methodId,t.gatewayId)){const n=this.hostedForm;if(!n)throw new l(e.PaymentNotInitialized);yield n.validate(),yield n.submit(t),yield this.paymentIntegrationService.loadCurrentOrder()}else yield this.paymentIntegrationService.submitPayment(t)})}executeWithAPM(t){return h(this,void 0,void 0,function*(){const e=t.paymentData,n=e&&\"issuer\"in e?e.issuer:\"\";yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},t),{paymentData:Object.assign(Object.assign({},e),{formattedPayload:{issuer:n,shopper_locale:this.getShopperLocale()}})}))})}isCreditCard(t){return t===p.CREDIT_CARD}shouldShowTSVHostedForm(t,e){return this.isHostedPaymentFormEnabled(t,e)&&this.isHostedFieldAvailable()}mountCardVerificationfields(e){return new Promise((n,r)=>h(this,void 0,void 0,function*(){try{const r=this.paymentIntegrationService.getState().getStoreConfig(),i=null==r?void 0:r.paymentSettings.bigpayBaseUrl;if(!i)throw new c(t.MissingCheckoutConfig);const o=this.paymentIntegrationService.createHostedForm(i,e);yield o.attach(),n(o)}catch(t){r(t)}}))}isHostedPaymentFormEnabled(t,e){const{getPaymentMethodOrThrow:n}=this.paymentIntegrationService.getState();return!0===n(t,e).config.isHostedFormEnabled}isHostedFieldAvailable(){var t;return!!(null===(t=this.getInitializeOptions().form)||void 0===t?void 0:t.fields)}processAdditionalAction(t){if(!(t=>\"object\"==typeof t&&null!==t&&\"body\"in t)(t))return Promise.reject(t);if((0,o.some)(t.body.errors,{code:\"additional_action_required\"})){const{additional_action_required:{data:{redirect_url:e}}}=t.body;return new Promise(()=>window.location.replace(e))}return Promise.reject(t)}getInitializeOptions(){if(!this.initializeOptions)throw new l(e.PaymentNotInitialized);return this.initializeOptions}loadMollieJs(t,e,n=!1){return this.mollieClient?Promise.resolve(this.mollieClient):this.mollieScriptLoader.load(t,e,n)}getMollieClient(){if(!this.mollieClient)throw new l(e.PaymentNotInitialized);return this.mollieClient}getShopperLocale(){if(!this.locale)throw new l(e.PaymentNotInitialized);return this.locale}mountElements(){const{containerId:t,cardNumberId:e,cardCvcId:n,cardExpiryId:r,cardHolderId:i,styles:o}=this.getInitializeOptions();let u;t&&(u=document.getElementById(t)),setTimeout(()=>{if(!t||\"none\"!==(null==u?void 0:u.style.display)){const t=this.getMollieClient();this.cardHolderElement=t.createComponent(\"cardHolder\",{styles:o}),this.cardHolderElement.mount(`#${i}`),this.cardNumberElement=t.createComponent(\"cardNumber\",{styles:o}),this.cardNumberElement.mount(`#${e}`),this.verificationCodeElement=t.createComponent(\"verificationCode\",{styles:o}),this.verificationCodeElement.mount(`#${n}`),this.expiryDateElement=t.createComponent(\"expiryDate\",{styles:o}),this.expiryDateElement.mount(`#${r}`)}},0)}loadPaymentMethodsAllowed(t,e,n){var r;if(d.includes(e)){const i=null===(r=this.paymentIntegrationService.getState().getCartOrThrow().lineItems)||void 0===r?void 0:r.digitalItems;if(i&&i.length>0){const{containerId:r}=this.getInitializeOptions();if(r){const i=document.getElementById(r);if(i){const r=document.createElement(\"p\");r.setAttribute(\"id\",`${n}-${e}-paragraph`),t.unsupportedMethodMessage&&(r.innerText=t.unsupportedMethodMessage,i.appendChild(r),t.disableButton(!0))}}}}}}class _ extends u{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class y{constructor(t,e=window){this.scriptLoader=t,this.mollieHostWindow=e}load(t,e,n){return r=this,i=void 0,u=function*(){if(yield this.scriptLoader.loadScript(\"https://js.mollie.com/v1/mollie.js\"),!function(t){return\"Mollie\"in t}(this.mollieHostWindow))throw new _;return this.mollieHostWindow.Mollie(t,{locale:e,testmode:n})},new((o=void 0)||(o=Promise))(function(t,e){function n(t){try{c(u.next(t))}catch(t){e(t)}}function a(t){try{c(u.throw(t))}catch(t){e(t)}}function c(e){var r;e.done?t(e.value):(r=e.value,r instanceof o?r:new o(function(t){t(r)})).then(n,a)}c((u=u.apply(r,i||[])).next())});var r,i,o,u}}const g=Object.assign(t=>new v(new y((0,i.vQ)()),t),{resolveIds:[{gateway:\"mollie\"},{gateway:\"mollie\",id:\"applepay\"}]})})(),module.exports=r})();\n//# sourceMappingURL=mollie.js.map"
  },
  {
    "path": "dist/cjs/integrations/moneris.js",
    "content": "(()=>{var n={9440(n,t,r){n=r.nmd(n),function(){var e,i=\"Expected a function\",u=\"__lodash_hash_undefined__\",o=\"__lodash_placeholder__\",a=32,c=128,f=1/0,s=9007199254740991,l=NaN,h=4294967295,p=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],v=\"[object Arguments]\",d=\"[object Array]\",g=\"[object Boolean]\",_=\"[object Date]\",y=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",x=\"[object Number]\",I=\"[object Object]\",S=\"[object Promise]\",j=\"[object RegExp]\",O=\"[object Set]\",A=\"[object String]\",z=\"[object Symbol]\",M=\"[object WeakMap]\",k=\"[object ArrayBuffer]\",C=\"[object DataView]\",E=\"[object Float32Array]\",P=\"[object Float64Array]\",R=\"[object Int8Array]\",U=\"[object Int16Array]\",L=\"[object Int32Array]\",T=\"[object Uint8Array]\",N=\"[object Uint8ClampedArray]\",W=\"[object Uint16Array]\",B=\"[object Uint32Array]\",D=/\\b__p \\+= '';/g,F=/\\b(__p \\+=) '' \\+/g,$=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,q=/&(?:amp|lt|gt|quot|#39);/g,V=/[&<>\"']/g,H=RegExp(q.source),Z=RegExp(V.source),K=/<%-([\\s\\S]+?)%>/g,G=/<%([\\s\\S]+?)%>/g,J=/<%=([\\s\\S]+?)%>/g,Y=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,nn=/[\\\\^$.*+?()[\\]{}|]/g,tn=RegExp(nn.source),rn=/^\\s+/,en=/\\s/,un=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,on=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,an=/,? & /,cn=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,fn=/[()=,{}\\[\\]\\/\\s]/,sn=/\\\\(\\\\)?/g,ln=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,hn=/\\w*$/,pn=/^[-+]0x[0-9a-f]+$/i,vn=/^0b[01]+$/i,dn=/^\\[object .+?Constructor\\]$/,gn=/^0o[0-7]+$/i,_n=/^(?:0|[1-9]\\d*)$/,yn=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,mn=/($^)/,bn=/['\\n\\r\\u2028\\u2029\\\\]/g,wn=\"\\\\ud800-\\\\udfff\",xn=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",In=\"\\\\u2700-\\\\u27bf\",Sn=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",jn=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",On=\"\\\\ufe0e\\\\ufe0f\",An=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",zn=\"[\"+wn+\"]\",Mn=\"[\"+An+\"]\",kn=\"[\"+xn+\"]\",Cn=\"\\\\d+\",En=\"[\"+In+\"]\",Pn=\"[\"+Sn+\"]\",Rn=\"[^\"+wn+An+Cn+In+Sn+jn+\"]\",Un=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Ln=\"[^\"+wn+\"]\",Tn=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Nn=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Wn=\"[\"+jn+\"]\",Bn=\"\\\\u200d\",Dn=\"(?:\"+Pn+\"|\"+Rn+\")\",Fn=\"(?:\"+Wn+\"|\"+Rn+\")\",$n=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",qn=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Vn=\"(?:\"+kn+\"|\"+Un+\")?\",Hn=\"[\"+On+\"]?\",Zn=Hn+Vn+\"(?:\"+Bn+\"(?:\"+[Ln,Tn,Nn].join(\"|\")+\")\"+Hn+Vn+\")*\",Kn=\"(?:\"+[En,Tn,Nn].join(\"|\")+\")\"+Zn,Gn=\"(?:\"+[Ln+kn+\"?\",kn,Tn,Nn,zn].join(\"|\")+\")\",Jn=RegExp(\"['’]\",\"g\"),Yn=RegExp(kn,\"g\"),Qn=RegExp(Un+\"(?=\"+Un+\")|\"+Gn+Zn,\"g\"),Xn=RegExp([Wn+\"?\"+Pn+\"+\"+$n+\"(?=\"+[Mn,Wn,\"$\"].join(\"|\")+\")\",Fn+\"+\"+qn+\"(?=\"+[Mn,Wn+Dn,\"$\"].join(\"|\")+\")\",Wn+\"?\"+Dn+\"+\"+$n,Wn+\"+\"+qn,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Cn,Kn].join(\"|\"),\"g\"),nt=RegExp(\"[\"+Bn+wn+xn+On+\"]\"),tt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,rt=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],et=-1,it={};it[E]=it[P]=it[R]=it[U]=it[L]=it[T]=it[N]=it[W]=it[B]=!0,it[v]=it[d]=it[k]=it[g]=it[C]=it[_]=it[y]=it[m]=it[w]=it[x]=it[I]=it[j]=it[O]=it[A]=it[M]=!1;var ut={};ut[v]=ut[d]=ut[k]=ut[C]=ut[g]=ut[_]=ut[E]=ut[P]=ut[R]=ut[U]=ut[L]=ut[w]=ut[x]=ut[I]=ut[j]=ut[O]=ut[A]=ut[z]=ut[T]=ut[N]=ut[W]=ut[B]=!0,ut[y]=ut[m]=ut[M]=!1;var ot={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},at=parseFloat,ct=parseInt,ft=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,st=\"object\"==typeof self&&self&&self.Object===Object&&self,lt=ft||st||Function(\"return this\")(),ht=t&&!t.nodeType&&t,pt=ht&&n&&!n.nodeType&&n,vt=pt&&pt.exports===ht,dt=vt&&ft.process,gt=function(){try{return pt&&pt.require&&pt.require(\"util\").types||dt&&dt.binding&&dt.binding(\"util\")}catch(n){}}(),_t=gt&&gt.isArrayBuffer,yt=gt&&gt.isDate,mt=gt&&gt.isMap,bt=gt&&gt.isRegExp,wt=gt&&gt.isSet,xt=gt&&gt.isTypedArray;function It(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function St(n,t,r,e){for(var i=-1,u=null==n?0:n.length;++i<u;){var o=n[i];t(e,o,r(o),n)}return e}function jt(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&!1!==t(n[r],r,n););return n}function Ot(n,t){for(var r=null==n?0:n.length;r--&&!1!==t(n[r],r,n););return n}function At(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return!1;return!0}function zt(n,t){for(var r=-1,e=null==n?0:n.length,i=0,u=[];++r<e;){var o=n[r];t(o,r,n)&&(u[i++]=o)}return u}function Mt(n,t){return!(null==n||!n.length)&&Wt(n,t,0)>-1}function kt(n,t,r){for(var e=-1,i=null==n?0:n.length;++e<i;)if(r(t,n[e]))return!0;return!1}function Ct(n,t){for(var r=-1,e=null==n?0:n.length,i=Array(e);++r<e;)i[r]=t(n[r],r,n);return i}function Et(n,t){for(var r=-1,e=t.length,i=n.length;++r<e;)n[i+r]=t[r];return n}function Pt(n,t,r,e){var i=-1,u=null==n?0:n.length;for(e&&u&&(r=n[++i]);++i<u;)r=t(r,n[i],i,n);return r}function Rt(n,t,r,e){var i=null==n?0:n.length;for(e&&i&&(r=n[--i]);i--;)r=t(r,n[i],i,n);return r}function Ut(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return!0;return!1}var Lt=$t(\"length\");function Tt(n,t,r){var e;return r(n,function(n,r,i){if(t(n,r,i))return e=r,!1}),e}function Nt(n,t,r,e){for(var i=n.length,u=r+(e?1:-1);e?u--:++u<i;)if(t(n[u],u,n))return u;return-1}function Wt(n,t,r){return t==t?function(n,t,r){for(var e=r-1,i=n.length;++e<i;)if(n[e]===t)return e;return-1}(n,t,r):Nt(n,Dt,r)}function Bt(n,t,r,e){for(var i=r-1,u=n.length;++i<u;)if(e(n[i],t))return i;return-1}function Dt(n){return n!=n}function Ft(n,t){var r=null==n?0:n.length;return r?Ht(n,t)/r:l}function $t(n){return function(t){return null==t?e:t[n]}}function qt(n){return function(t){return null==n?e:n[t]}}function Vt(n,t,r,e,i){return i(n,function(n,i,u){r=e?(e=!1,n):t(r,n,i,u)}),r}function Ht(n,t){for(var r,i=-1,u=n.length;++i<u;){var o=t(n[i]);o!==e&&(r=r===e?o:r+o)}return r}function Zt(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function Kt(n){return n?n.slice(0,lr(n)+1).replace(rn,\"\"):n}function Gt(n){return function(t){return n(t)}}function Jt(n,t){return Ct(t,function(t){return n[t]})}function Yt(n,t){return n.has(t)}function Qt(n,t){for(var r=-1,e=n.length;++r<e&&Wt(t,n[r],0)>-1;);return r}function Xt(n,t){for(var r=n.length;r--&&Wt(t,n[r],0)>-1;);return r}var nr=qt({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tr=qt({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function rr(n){return\"\\\\\"+ot[n]}function er(n){return nt.test(n)}function ir(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function ur(n,t){return function(r){return n(t(r))}}function or(n,t){for(var r=-1,e=n.length,i=0,u=[];++r<e;){var a=n[r];a!==t&&a!==o||(n[r]=o,u[i++]=r)}return u}function ar(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=n}),r}function cr(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function fr(n){return er(n)?function(n){for(var t=Qn.lastIndex=0;Qn.test(n);)++t;return t}(n):Lt(n)}function sr(n){return er(n)?function(n){return n.match(Qn)||[]}(n):function(n){return n.split(\"\")}(n)}function lr(n){for(var t=n.length;t--&&en.test(n.charAt(t)););return t}var hr=qt({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pr=function n(t){var r,en=(t=null==t?lt:pr.defaults(lt.Object(),t,pr.pick(lt,rt))).Array,wn=t.Date,xn=t.Error,In=t.Function,Sn=t.Math,jn=t.Object,On=t.RegExp,An=t.String,zn=t.TypeError,Mn=en.prototype,kn=In.prototype,Cn=jn.prototype,En=t[\"__core-js_shared__\"],Pn=kn.toString,Rn=Cn.hasOwnProperty,Un=0,Ln=(r=/[^.]+$/.exec(En&&En.keys&&En.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",Tn=Cn.toString,Nn=Pn.call(jn),Wn=lt._,Bn=On(\"^\"+Pn.call(Rn).replace(nn,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Dn=vt?t.Buffer:e,Fn=t.Symbol,$n=t.Uint8Array,qn=Dn?Dn.allocUnsafe:e,Vn=ur(jn.getPrototypeOf,jn),Hn=jn.create,Zn=Cn.propertyIsEnumerable,Kn=Mn.splice,Gn=Fn?Fn.isConcatSpreadable:e,Qn=Fn?Fn.iterator:e,nt=Fn?Fn.toStringTag:e,ot=function(){try{var n=cu(jn,\"defineProperty\");return n({},\"\",{}),n}catch(n){}}(),ft=t.clearTimeout!==lt.clearTimeout&&t.clearTimeout,st=wn&&wn.now!==lt.Date.now&&wn.now,ht=t.setTimeout!==lt.setTimeout&&t.setTimeout,pt=Sn.ceil,dt=Sn.floor,gt=jn.getOwnPropertySymbols,Lt=Dn?Dn.isBuffer:e,qt=t.isFinite,vr=Mn.join,dr=ur(jn.keys,jn),gr=Sn.max,_r=Sn.min,yr=wn.now,mr=t.parseInt,br=Sn.random,wr=Mn.reverse,xr=cu(t,\"DataView\"),Ir=cu(t,\"Map\"),Sr=cu(t,\"Promise\"),jr=cu(t,\"Set\"),Or=cu(t,\"WeakMap\"),Ar=cu(jn,\"create\"),zr=Or&&new Or,Mr={},kr=Lu(xr),Cr=Lu(Ir),Er=Lu(Sr),Pr=Lu(jr),Rr=Lu(Or),Ur=Fn?Fn.prototype:e,Lr=Ur?Ur.valueOf:e,Tr=Ur?Ur.toString:e;function Nr(n){if(na(n)&&!$o(n)&&!(n instanceof Fr)){if(n instanceof Dr)return n;if(Rn.call(n,\"__wrapped__\"))return Tu(n)}return new Dr(n)}var Wr=function(){function n(){}return function(t){if(!Xo(t))return{};if(Hn)return Hn(t);n.prototype=t;var r=new n;return n.prototype=e,r}}();function Br(){}function Dr(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=e}function Fr(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function $r(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function qr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Vr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Hr(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new Vr;++t<r;)this.add(n[t])}function Zr(n){var t=this.__data__=new qr(n);this.size=t.size}function Kr(n,t){var r=$o(n),e=!r&&Fo(n),i=!r&&!e&&Zo(n),u=!r&&!e&&!i&&ca(n),o=r||e||i||u,a=o?Zt(n.length,An):[],c=a.length;for(var f in n)!t&&!Rn.call(n,f)||o&&(\"length\"==f||i&&(\"offset\"==f||\"parent\"==f)||u&&(\"buffer\"==f||\"byteLength\"==f||\"byteOffset\"==f)||du(f,c))||a.push(f);return a}function Gr(n){var t=n.length;return t?n[Ve(0,t-1)]:e}function Jr(n,t){return Cu(Oi(n),ue(t,0,n.length))}function Yr(n){return Cu(Oi(n))}function Qr(n,t,r){(r!==e&&!Wo(n[t],r)||r===e&&!(t in n))&&ee(n,t,r)}function Xr(n,t,r){var i=n[t];Rn.call(n,t)&&Wo(i,r)&&(r!==e||t in n)||ee(n,t,r)}function ne(n,t){for(var r=n.length;r--;)if(Wo(n[r][0],t))return r;return-1}function te(n,t,r,e){return se(n,function(n,i,u){t(e,n,r(n),u)}),e}function re(n,t){return n&&Ai(t,ka(t),n)}function ee(n,t,r){\"__proto__\"==t&&ot?ot(n,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):n[t]=r}function ie(n,t){for(var r=-1,i=t.length,u=en(i),o=null==n;++r<i;)u[r]=o?e:ja(n,t[r]);return u}function ue(n,t,r){return n==n&&(r!==e&&(n=n<=r?n:r),t!==e&&(n=n>=t?n:t)),n}function oe(n,t,r,i,u,o){var a,c=1&t,f=2&t,s=4&t;if(r&&(a=u?r(n,i,u,o):r(n)),a!==e)return a;if(!Xo(n))return n;var l=$o(n);if(l){if(a=function(n){var t=n.length,r=new n.constructor(t);return t&&\"string\"==typeof n[0]&&Rn.call(n,\"index\")&&(r.index=n.index,r.input=n.input),r}(n),!c)return Oi(n,a)}else{var h=lu(n),p=h==m||h==b;if(Zo(n))return bi(n,c);if(h==I||h==v||p&&!u){if(a=f||p?{}:pu(n),!c)return f?function(n,t){return Ai(n,su(n),t)}(n,function(n,t){return n&&Ai(t,Ca(t),n)}(a,n)):function(n,t){return Ai(n,fu(n),t)}(n,re(a,n))}else{if(!ut[h])return u?n:{};a=function(n,t,r){var e,i=n.constructor;switch(t){case k:return wi(n);case g:case _:return new i(+n);case C:return function(n,t){var r=t?wi(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.byteLength)}(n,r);case E:case P:case R:case U:case L:case T:case N:case W:case B:return xi(n,r);case w:return new i;case x:case A:return new i(n);case j:return function(n){var t=new n.constructor(n.source,hn.exec(n));return t.lastIndex=n.lastIndex,t}(n);case O:return new i;case z:return e=n,Lr?jn(Lr.call(e)):{}}}(n,h,c)}}o||(o=new Zr);var d=o.get(n);if(d)return d;o.set(n,a),ua(n)?n.forEach(function(e){a.add(oe(e,t,r,e,n,o))}):ta(n)&&n.forEach(function(e,i){a.set(i,oe(e,t,r,i,n,o))});var y=l?e:(s?f?tu:nu:f?Ca:ka)(n);return jt(y||n,function(e,i){y&&(e=n[i=e]),Xr(a,i,oe(e,t,r,i,n,o))}),a}function ae(n,t,r){var i=r.length;if(null==n)return!i;for(n=jn(n);i--;){var u=r[i],o=t[u],a=n[u];if(a===e&&!(u in n)||!o(a))return!1}return!0}function ce(n,t,r){if(\"function\"!=typeof n)throw new zn(i);return Au(function(){n.apply(e,r)},t)}function fe(n,t,r,e){var i=-1,u=Mt,o=!0,a=n.length,c=[],f=t.length;if(!a)return c;r&&(t=Ct(t,Gt(r))),e?(u=kt,o=!1):t.length>=200&&(u=Yt,o=!1,t=new Hr(t));n:for(;++i<a;){var s=n[i],l=null==r?s:r(s);if(s=e||0!==s?s:0,o&&l==l){for(var h=f;h--;)if(t[h]===l)continue n;c.push(s)}else u(t,l,e)||c.push(s)}return c}Nr.templateSettings={escape:K,evaluate:G,interpolate:J,variable:\"\",imports:{_:Nr}},Nr.prototype=Br.prototype,Nr.prototype.constructor=Nr,Dr.prototype=Wr(Br.prototype),Dr.prototype.constructor=Dr,Fr.prototype=Wr(Br.prototype),Fr.prototype.constructor=Fr,$r.prototype.clear=function(){this.__data__=Ar?Ar(null):{},this.size=0},$r.prototype.delete=function(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t},$r.prototype.get=function(n){var t=this.__data__;if(Ar){var r=t[n];return r===u?e:r}return Rn.call(t,n)?t[n]:e},$r.prototype.has=function(n){var t=this.__data__;return Ar?t[n]!==e:Rn.call(t,n)},$r.prototype.set=function(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=Ar&&t===e?u:t,this},qr.prototype.clear=function(){this.__data__=[],this.size=0},qr.prototype.delete=function(n){var t=this.__data__,r=ne(t,n);return!(r<0||(r==t.length-1?t.pop():Kn.call(t,r,1),--this.size,0))},qr.prototype.get=function(n){var t=this.__data__,r=ne(t,n);return r<0?e:t[r][1]},qr.prototype.has=function(n){return ne(this.__data__,n)>-1},qr.prototype.set=function(n,t){var r=this.__data__,e=ne(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this},Vr.prototype.clear=function(){this.size=0,this.__data__={hash:new $r,map:new(Ir||qr),string:new $r}},Vr.prototype.delete=function(n){var t=ou(this,n).delete(n);return this.size-=t?1:0,t},Vr.prototype.get=function(n){return ou(this,n).get(n)},Vr.prototype.has=function(n){return ou(this,n).has(n)},Vr.prototype.set=function(n,t){var r=ou(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},Hr.prototype.add=Hr.prototype.push=function(n){return this.__data__.set(n,u),this},Hr.prototype.has=function(n){return this.__data__.has(n)},Zr.prototype.clear=function(){this.__data__=new qr,this.size=0},Zr.prototype.delete=function(n){var t=this.__data__,r=t.delete(n);return this.size=t.size,r},Zr.prototype.get=function(n){return this.__data__.get(n)},Zr.prototype.has=function(n){return this.__data__.has(n)},Zr.prototype.set=function(n,t){var r=this.__data__;if(r instanceof qr){var e=r.__data__;if(!Ir||e.length<199)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new Vr(e)}return r.set(n,t),this.size=r.size,this};var se=ki(ye),le=ki(me,!0);function he(n,t){var r=!0;return se(n,function(n,e,i){return r=!!t(n,e,i)}),r}function pe(n,t,r){for(var i=-1,u=n.length;++i<u;){var o=n[i],a=t(o);if(null!=a&&(c===e?a==a&&!aa(a):r(a,c)))var c=a,f=o}return f}function ve(n,t){var r=[];return se(n,function(n,e,i){t(n,e,i)&&r.push(n)}),r}function de(n,t,r,e,i){var u=-1,o=n.length;for(r||(r=vu),i||(i=[]);++u<o;){var a=n[u];t>0&&r(a)?t>1?de(a,t-1,r,e,i):Et(i,a):e||(i[i.length]=a)}return i}var ge=Ci(),_e=Ci(!0);function ye(n,t){return n&&ge(n,t,ka)}function me(n,t){return n&&_e(n,t,ka)}function be(n,t){return zt(t,function(t){return Jo(n[t])})}function we(n,t){for(var r=0,i=(t=gi(t,n)).length;null!=n&&r<i;)n=n[Uu(t[r++])];return r&&r==i?n:e}function xe(n,t,r){var e=t(n);return $o(n)?e:Et(e,r(n))}function Ie(n){return null==n?n===e?\"[object Undefined]\":\"[object Null]\":nt&&nt in jn(n)?function(n){var t=Rn.call(n,nt),r=n[nt];try{n[nt]=e;var i=!0}catch(n){}var u=Tn.call(n);return i&&(t?n[nt]=r:delete n[nt]),u}(n):function(n){return Tn.call(n)}(n)}function Se(n,t){return n>t}function je(n,t){return null!=n&&Rn.call(n,t)}function Oe(n,t){return null!=n&&t in jn(n)}function Ae(n,t,r){for(var i=r?kt:Mt,u=n[0].length,o=n.length,a=o,c=en(o),f=1/0,s=[];a--;){var l=n[a];a&&t&&(l=Ct(l,Gt(t))),f=_r(l.length,f),c[a]=!r&&(t||u>=120&&l.length>=120)?new Hr(a&&l):e}l=n[0];var h=-1,p=c[0];n:for(;++h<u&&s.length<f;){var v=l[h],d=t?t(v):v;if(v=r||0!==v?v:0,!(p?Yt(p,d):i(s,d,r))){for(a=o;--a;){var g=c[a];if(!(g?Yt(g,d):i(n[a],d,r)))continue n}p&&p.push(d),s.push(v)}}return s}function ze(n,t,r){var i=null==(n=Su(n,t=gi(t,n)))?n:n[Uu(Ku(t))];return null==i?e:It(i,n,r)}function Me(n){return na(n)&&Ie(n)==v}function ke(n,t,r,i,u){return n===t||(null==n||null==t||!na(n)&&!na(t)?n!=n&&t!=t:function(n,t,r,i,u,o){var a=$o(n),c=$o(t),f=a?d:lu(n),s=c?d:lu(t),l=(f=f==v?I:f)==I,h=(s=s==v?I:s)==I,p=f==s;if(p&&Zo(n)){if(!Zo(t))return!1;a=!0,l=!1}if(p&&!l)return o||(o=new Zr),a||ca(n)?Qi(n,t,r,i,u,o):function(n,t,r,e,i,u,o){switch(r){case C:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1;n=n.buffer,t=t.buffer;case k:return!(n.byteLength!=t.byteLength||!u(new $n(n),new $n(t)));case g:case _:case x:return Wo(+n,+t);case y:return n.name==t.name&&n.message==t.message;case j:case A:return n==t+\"\";case w:var a=ir;case O:var c=1&e;if(a||(a=ar),n.size!=t.size&&!c)return!1;var f=o.get(n);if(f)return f==t;e|=2,o.set(n,t);var s=Qi(a(n),a(t),e,i,u,o);return o.delete(n),s;case z:if(Lr)return Lr.call(n)==Lr.call(t)}return!1}(n,t,f,r,i,u,o);if(!(1&r)){var m=l&&Rn.call(n,\"__wrapped__\"),b=h&&Rn.call(t,\"__wrapped__\");if(m||b){var S=m?n.value():n,M=b?t.value():t;return o||(o=new Zr),u(S,M,r,i,o)}}return!!p&&(o||(o=new Zr),function(n,t,r,i,u,o){var a=1&r,c=nu(n),f=c.length;if(f!=nu(t).length&&!a)return!1;for(var s=f;s--;){var l=c[s];if(!(a?l in t:Rn.call(t,l)))return!1}var h=o.get(n),p=o.get(t);if(h&&p)return h==t&&p==n;var v=!0;o.set(n,t),o.set(t,n);for(var d=a;++s<f;){var g=n[l=c[s]],_=t[l];if(i)var y=a?i(_,g,l,t,n,o):i(g,_,l,n,t,o);if(!(y===e?g===_||u(g,_,r,i,o):y)){v=!1;break}d||(d=\"constructor\"==l)}if(v&&!d){var m=n.constructor,b=t.constructor;m==b||!(\"constructor\"in n)||!(\"constructor\"in t)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(v=!1)}return o.delete(n),o.delete(t),v}(n,t,r,i,u,o))}(n,t,r,i,ke,u))}function Ce(n,t,r,i){var u=r.length,o=u,a=!i;if(null==n)return!o;for(n=jn(n);u--;){var c=r[u];if(a&&c[2]?c[1]!==n[c[0]]:!(c[0]in n))return!1}for(;++u<o;){var f=(c=r[u])[0],s=n[f],l=c[1];if(a&&c[2]){if(s===e&&!(f in n))return!1}else{var h=new Zr;if(i)var p=i(s,l,f,n,t,h);if(!(p===e?ke(l,s,3,i,h):p))return!1}}return!0}function Ee(n){return!(!Xo(n)||(t=n,Ln&&Ln in t))&&(Jo(n)?Bn:dn).test(Lu(n));var t}function Pe(n){return\"function\"==typeof n?n:null==n?rc:\"object\"==typeof n?$o(n)?Ne(n[0],n[1]):Te(n):lc(n)}function Re(n){if(!bu(n))return dr(n);var t=[];for(var r in jn(n))Rn.call(n,r)&&\"constructor\"!=r&&t.push(r);return t}function Ue(n,t){return n<t}function Le(n,t){var r=-1,e=Vo(n)?en(n.length):[];return se(n,function(n,i,u){e[++r]=t(n,i,u)}),e}function Te(n){var t=au(n);return 1==t.length&&t[0][2]?xu(t[0][0],t[0][1]):function(r){return r===n||Ce(r,n,t)}}function Ne(n,t){return _u(n)&&wu(t)?xu(Uu(n),t):function(r){var i=ja(r,n);return i===e&&i===t?Oa(r,n):ke(t,i,3)}}function We(n,t,r,i,u){n!==t&&ge(t,function(o,a){if(u||(u=new Zr),Xo(o))!function(n,t,r,i,u,o,a){var c=ju(n,r),f=ju(t,r),s=a.get(f);if(s)Qr(n,r,s);else{var l=o?o(c,f,r+\"\",n,t,a):e,h=l===e;if(h){var p=$o(f),v=!p&&Zo(f),d=!p&&!v&&ca(f);l=f,p||v||d?$o(c)?l=c:Ho(c)?l=Oi(c):v?(h=!1,l=bi(f,!0)):d?(h=!1,l=xi(f,!0)):l=[]:ea(f)||Fo(f)?(l=c,Fo(c)?l=ga(c):Xo(c)&&!Jo(c)||(l=pu(f))):h=!1}h&&(a.set(f,l),u(l,f,i,o,a),a.delete(f)),Qr(n,r,l)}}(n,t,a,r,We,i,u);else{var c=i?i(ju(n,a),o,a+\"\",n,t,u):e;c===e&&(c=o),Qr(n,a,c)}},Ca)}function Be(n,t){var r=n.length;if(r)return du(t+=t<0?r:0,r)?n[t]:e}function De(n,t,r){t=t.length?Ct(t,function(n){return $o(n)?function(t){return we(t,1===n.length?n[0]:n)}:n}):[rc];var e=-1;t=Ct(t,Gt(uu()));var i=Le(n,function(n,r,i){var u=Ct(t,function(t){return t(n)});return{criteria:u,index:++e,value:n}});return function(n){var t=n.length;for(n.sort(function(n,t){return function(n,t,r){for(var e=-1,i=n.criteria,u=t.criteria,o=i.length,a=r.length;++e<o;){var c=Ii(i[e],u[e]);if(c)return e>=a?c:c*(\"desc\"==r[e]?-1:1)}return n.index-t.index}(n,t,r)});t--;)n[t]=n[t].value;return n}(i)}function Fe(n,t,r){for(var e=-1,i=t.length,u={};++e<i;){var o=t[e],a=we(n,o);r(a,o)&&Je(u,gi(o,n),a)}return u}function $e(n,t,r,e){var i=e?Bt:Wt,u=-1,o=t.length,a=n;for(n===t&&(t=Oi(t)),r&&(a=Ct(n,Gt(r)));++u<o;)for(var c=0,f=t[u],s=r?r(f):f;(c=i(a,s,c,e))>-1;)a!==n&&Kn.call(a,c,1),Kn.call(n,c,1);return n}function qe(n,t){for(var r=n?t.length:0,e=r-1;r--;){var i=t[r];if(r==e||i!==u){var u=i;du(i)?Kn.call(n,i,1):ci(n,i)}}return n}function Ve(n,t){return n+dt(br()*(t-n+1))}function He(n,t){var r=\"\";if(!n||t<1||t>s)return r;do{t%2&&(r+=n),(t=dt(t/2))&&(n+=n)}while(t);return r}function Ze(n,t){return zu(Iu(n,t,rc),n+\"\")}function Ke(n){return Gr(Wa(n))}function Ge(n,t){var r=Wa(n);return Cu(r,ue(t,0,r.length))}function Je(n,t,r,i){if(!Xo(n))return n;for(var u=-1,o=(t=gi(t,n)).length,a=o-1,c=n;null!=c&&++u<o;){var f=Uu(t[u]),s=r;if(\"__proto__\"===f||\"constructor\"===f||\"prototype\"===f)return n;if(u!=a){var l=c[f];(s=i?i(l,f,c):e)===e&&(s=Xo(l)?l:du(t[u+1])?[]:{})}Xr(c,f,s),c=c[f]}return n}var Ye=zr?function(n,t){return zr.set(n,t),n}:rc,Qe=ot?function(n,t){return ot(n,\"toString\",{configurable:!0,enumerable:!1,value:Xa(t),writable:!0})}:rc;function Xe(n){return Cu(Wa(n))}function ni(n,t,r){var e=-1,i=n.length;t<0&&(t=-t>i?0:i+t),(r=r>i?i:r)<0&&(r+=i),i=t>r?0:r-t>>>0,t>>>=0;for(var u=en(i);++e<i;)u[e]=n[e+t];return u}function ti(n,t){var r;return se(n,function(n,e,i){return!(r=t(n,e,i))}),!!r}function ri(n,t,r){var e=0,i=null==n?e:n.length;if(\"number\"==typeof t&&t==t&&i<=2147483647){for(;e<i;){var u=e+i>>>1,o=n[u];null!==o&&!aa(o)&&(r?o<=t:o<t)?e=u+1:i=u}return i}return ei(n,t,rc,r)}function ei(n,t,r,i){var u=0,o=null==n?0:n.length;if(0===o)return 0;for(var a=(t=r(t))!=t,c=null===t,f=aa(t),s=t===e;u<o;){var l=dt((u+o)/2),h=r(n[l]),p=h!==e,v=null===h,d=h==h,g=aa(h);if(a)var _=i||d;else _=s?d&&(i||p):c?d&&p&&(i||!v):f?d&&p&&!v&&(i||!g):!v&&!g&&(i?h<=t:h<t);_?u=l+1:o=l}return _r(o,4294967294)}function ii(n,t){for(var r=-1,e=n.length,i=0,u=[];++r<e;){var o=n[r],a=t?t(o):o;if(!r||!Wo(a,c)){var c=a;u[i++]=0===o?0:o}}return u}function ui(n){return\"number\"==typeof n?n:aa(n)?l:+n}function oi(n){if(\"string\"==typeof n)return n;if($o(n))return Ct(n,oi)+\"\";if(aa(n))return Tr?Tr.call(n):\"\";var t=n+\"\";return\"0\"==t&&1/n==-1/0?\"-0\":t}function ai(n,t,r){var e=-1,i=Mt,u=n.length,o=!0,a=[],c=a;if(r)o=!1,i=kt;else if(u>=200){var f=t?null:Hi(n);if(f)return ar(f);o=!1,i=Yt,c=new Hr}else c=t?[]:a;n:for(;++e<u;){var s=n[e],l=t?t(s):s;if(s=r||0!==s?s:0,o&&l==l){for(var h=c.length;h--;)if(c[h]===l)continue n;t&&c.push(l),a.push(s)}else i(c,l,r)||(c!==a&&c.push(l),a.push(s))}return a}function ci(n,t){var r=-1,e=(t=gi(t,n)).length;if(!e)return!0;for(;++r<e;){var i=Uu(t[r]);if(\"__proto__\"===i&&!Rn.call(n,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&r<e-1)return!1}var u=Su(n,t);return null==u||delete u[Uu(Ku(t))]}function fi(n,t,r,e){return Je(n,t,r(we(n,t)),e)}function si(n,t,r,e){for(var i=n.length,u=e?i:-1;(e?u--:++u<i)&&t(n[u],u,n););return r?ni(n,e?0:u,e?u+1:i):ni(n,e?u+1:0,e?i:u)}function li(n,t){var r=n;return r instanceof Fr&&(r=r.value()),Pt(t,function(n,t){return t.func.apply(t.thisArg,Et([n],t.args))},r)}function hi(n,t,r){var e=n.length;if(e<2)return e?ai(n[0]):[];for(var i=-1,u=en(e);++i<e;)for(var o=n[i],a=-1;++a<e;)a!=i&&(u[i]=fe(u[i]||o,n[a],t,r));return ai(de(u,1),t,r)}function pi(n,t,r){for(var i=-1,u=n.length,o=t.length,a={};++i<u;){var c=i<o?t[i]:e;r(a,n[i],c)}return a}function vi(n){return Ho(n)?n:[]}function di(n){return\"function\"==typeof n?n:rc}function gi(n,t){return $o(n)?n:_u(n,t)?[n]:Ru(_a(n))}var _i=Ze;function yi(n,t,r){var i=n.length;return r=r===e?i:r,!t&&r>=i?n:ni(n,t,r)}var mi=ft||function(n){return lt.clearTimeout(n)};function bi(n,t){if(t)return n.slice();var r=n.length,e=qn?qn(r):new n.constructor(r);return n.copy(e),e}function wi(n){var t=new n.constructor(n.byteLength);return new $n(t).set(new $n(n)),t}function xi(n,t){var r=t?wi(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.length)}function Ii(n,t){if(n!==t){var r=n!==e,i=null===n,u=n==n,o=aa(n),a=t!==e,c=null===t,f=t==t,s=aa(t);if(!c&&!s&&!o&&n>t||o&&a&&f&&!c&&!s||i&&a&&f||!r&&f||!u)return 1;if(!i&&!o&&!s&&n<t||s&&r&&u&&!i&&!o||c&&r&&u||!a&&u||!f)return-1}return 0}function Si(n,t,r,e){for(var i=-1,u=n.length,o=r.length,a=-1,c=t.length,f=gr(u-o,0),s=en(c+f),l=!e;++a<c;)s[a]=t[a];for(;++i<o;)(l||i<u)&&(s[r[i]]=n[i]);for(;f--;)s[a++]=n[i++];return s}function ji(n,t,r,e){for(var i=-1,u=n.length,o=-1,a=r.length,c=-1,f=t.length,s=gr(u-a,0),l=en(s+f),h=!e;++i<s;)l[i]=n[i];for(var p=i;++c<f;)l[p+c]=t[c];for(;++o<a;)(h||i<u)&&(l[p+r[o]]=n[i++]);return l}function Oi(n,t){var r=-1,e=n.length;for(t||(t=en(e));++r<e;)t[r]=n[r];return t}function Ai(n,t,r,i){var u=!r;r||(r={});for(var o=-1,a=t.length;++o<a;){var c=t[o],f=i?i(r[c],n[c],c,r,n):e;f===e&&(f=n[c]),u?ee(r,c,f):Xr(r,c,f)}return r}function zi(n,t){return function(r,e){var i=$o(r)?St:te,u=t?t():{};return i(r,n,uu(e,2),u)}}function Mi(n){return Ze(function(t,r){var i=-1,u=r.length,o=u>1?r[u-1]:e,a=u>2?r[2]:e;for(o=n.length>3&&\"function\"==typeof o?(u--,o):e,a&&gu(r[0],r[1],a)&&(o=u<3?e:o,u=1),t=jn(t);++i<u;){var c=r[i];c&&n(t,c,i,o)}return t})}function ki(n,t){return function(r,e){if(null==r)return r;if(!Vo(r))return n(r,e);for(var i=r.length,u=t?i:-1,o=jn(r);(t?u--:++u<i)&&!1!==e(o[u],u,o););return r}}function Ci(n){return function(t,r,e){for(var i=-1,u=jn(t),o=e(t),a=o.length;a--;){var c=o[n?a:++i];if(!1===r(u[c],c,u))break}return t}}function Ei(n){return function(t){var r=er(t=_a(t))?sr(t):e,i=r?r[0]:t.charAt(0),u=r?yi(r,1).join(\"\"):t.slice(1);return i[n]()+u}}function Pi(n){return function(t){return Pt(Ja(Fa(t).replace(Jn,\"\")),n,\"\")}}function Ri(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=Wr(n.prototype),e=n.apply(r,t);return Xo(e)?e:r}}function Ui(n){return function(t,r,i){var u=jn(t);if(!Vo(t)){var o=uu(r,3);t=ka(t),r=function(n){return o(u[n],n,u)}}var a=n(t,r,i);return a>-1?u[o?t[a]:a]:e}}function Li(n){return Xi(function(t){var r=t.length,u=r,o=Dr.prototype.thru;for(n&&t.reverse();u--;){var a=t[u];if(\"function\"!=typeof a)throw new zn(i);if(o&&!c&&\"wrapper\"==eu(a))var c=new Dr([],!0)}for(u=c?u:r;++u<r;){var f=eu(a=t[u]),s=\"wrapper\"==f?ru(a):e;c=s&&yu(s[0])&&424==s[1]&&!s[4].length&&1==s[9]?c[eu(s[0])].apply(c,s[3]):1==a.length&&yu(a)?c[f]():c.thru(a)}return function(){var n=arguments,e=n[0];if(c&&1==n.length&&$o(e))return c.plant(e).value();for(var i=0,u=r?t[i].apply(this,n):e;++i<r;)u=t[i].call(this,u);return u}})}function Ti(n,t,r,i,u,o,a,f,s,l){var h=t&c,p=1&t,v=2&t,d=24&t,g=512&t,_=v?e:Ri(n);return function c(){for(var y=arguments.length,m=en(y),b=y;b--;)m[b]=arguments[b];if(d)var w=iu(c),x=function(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&++e;return e}(m,w);if(i&&(m=Si(m,i,u,d)),o&&(m=ji(m,o,a,d)),y-=x,d&&y<l){var I=or(m,w);return qi(n,t,Ti,c.placeholder,r,m,I,f,s,l-y)}var S=p?r:this,j=v?S[n]:n;return y=m.length,f?m=function(n,t){for(var r=n.length,i=_r(t.length,r),u=Oi(n);i--;){var o=t[i];n[i]=du(o,r)?u[o]:e}return n}(m,f):g&&y>1&&m.reverse(),h&&s<y&&(m.length=s),this&&this!==lt&&this instanceof c&&(j=_||Ri(j)),j.apply(S,m)}}function Ni(n,t){return function(r,e){return function(n,t,r,e){return ye(n,function(n,i,u){t(e,r(n),i,u)}),e}(r,n,t(e),{})}}function Wi(n,t){return function(r,i){var u;if(r===e&&i===e)return t;if(r!==e&&(u=r),i!==e){if(u===e)return i;\"string\"==typeof r||\"string\"==typeof i?(r=oi(r),i=oi(i)):(r=ui(r),i=ui(i)),u=n(r,i)}return u}}function Bi(n){return Xi(function(t){return t=Ct(t,Gt(uu())),Ze(function(r){var e=this;return n(t,function(n){return It(n,e,r)})})})}function Di(n,t){var r=(t=t===e?\" \":oi(t)).length;if(r<2)return r?He(t,n):t;var i=He(t,pt(n/fr(t)));return er(t)?yi(sr(i),0,n).join(\"\"):i.slice(0,n)}function Fi(n){return function(t,r,i){return i&&\"number\"!=typeof i&&gu(t,r,i)&&(r=i=e),t=ha(t),r===e?(r=t,t=0):r=ha(r),function(n,t,r,e){for(var i=-1,u=gr(pt((t-n)/(r||1)),0),o=en(u);u--;)o[e?u:++i]=n,n+=r;return o}(t,r,i=i===e?t<r?1:-1:ha(i),n)}}function $i(n){return function(t,r){return\"string\"==typeof t&&\"string\"==typeof r||(t=da(t),r=da(r)),n(t,r)}}function qi(n,t,r,i,u,o,c,f,s,l){var h=8&t;t|=h?a:64,4&(t&=~(h?64:a))||(t&=-4);var p=[n,t,u,h?o:e,h?c:e,h?e:o,h?e:c,f,s,l],v=r.apply(e,p);return yu(n)&&Ou(v,p),v.placeholder=i,Mu(v,n,t)}function Vi(n){var t=Sn[n];return function(n,r){if(n=da(n),(r=null==r?0:_r(pa(r),292))&&qt(n)){var e=(_a(n)+\"e\").split(\"e\");return+((e=(_a(t(e[0]+\"e\"+(+e[1]+r)))+\"e\").split(\"e\"))[0]+\"e\"+(+e[1]-r))}return t(n)}}var Hi=jr&&1/ar(new jr([,-0]))[1]==f?function(n){return new jr(n)}:ac;function Zi(n){return function(t){var r=lu(t);return r==w?ir(t):r==O?cr(t):function(n,t){return Ct(t,function(t){return[t,n[t]]})}(t,n(t))}}function Ki(n,t,r,u,f,s,l,h){var p=2&t;if(!p&&\"function\"!=typeof n)throw new zn(i);var v=u?u.length:0;if(v||(t&=-97,u=f=e),l=l===e?l:gr(pa(l),0),h=h===e?h:pa(h),v-=f?f.length:0,64&t){var d=u,g=f;u=f=e}var _=p?e:ru(n),y=[n,t,r,u,f,d,g,s,l,h];if(_&&function(n,t){var r=n[1],e=t[1],i=r|e,u=i<131,a=e==c&&8==r||e==c&&256==r&&n[7].length<=t[8]||384==e&&t[7].length<=t[8]&&8==r;if(!u&&!a)return n;1&e&&(n[2]=t[2],i|=1&r?0:4);var f=t[3];if(f){var s=n[3];n[3]=s?Si(s,f,t[4]):f,n[4]=s?or(n[3],o):t[4]}(f=t[5])&&(s=n[5],n[5]=s?ji(s,f,t[6]):f,n[6]=s?or(n[5],o):t[6]),(f=t[7])&&(n[7]=f),e&c&&(n[8]=null==n[8]?t[8]:_r(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=i}(y,_),n=y[0],t=y[1],r=y[2],u=y[3],f=y[4],!(h=y[9]=y[9]===e?p?0:n.length:gr(y[9]-v,0))&&24&t&&(t&=-25),t&&1!=t)m=8==t||16==t?function(n,t,r){var i=Ri(n);return function u(){for(var o=arguments.length,a=en(o),c=o,f=iu(u);c--;)a[c]=arguments[c];var s=o<3&&a[0]!==f&&a[o-1]!==f?[]:or(a,f);return(o-=s.length)<r?qi(n,t,Ti,u.placeholder,e,a,s,e,e,r-o):It(this&&this!==lt&&this instanceof u?i:n,this,a)}}(n,t,h):t!=a&&33!=t||f.length?Ti.apply(e,y):function(n,t,r,e){var i=1&t,u=Ri(n);return function t(){for(var o=-1,a=arguments.length,c=-1,f=e.length,s=en(f+a),l=this&&this!==lt&&this instanceof t?u:n;++c<f;)s[c]=e[c];for(;a--;)s[c++]=arguments[++o];return It(l,i?r:this,s)}}(n,t,r,u);else var m=function(n,t,r){var e=1&t,i=Ri(n);return function t(){return(this&&this!==lt&&this instanceof t?i:n).apply(e?r:this,arguments)}}(n,t,r);return Mu((_?Ye:Ou)(m,y),n,t)}function Gi(n,t,r,i){return n===e||Wo(n,Cn[r])&&!Rn.call(i,r)?t:n}function Ji(n,t,r,i,u,o){return Xo(n)&&Xo(t)&&(o.set(t,n),We(n,t,e,Ji,o),o.delete(t)),n}function Yi(n){return ea(n)?e:n}function Qi(n,t,r,i,u,o){var a=1&r,c=n.length,f=t.length;if(c!=f&&!(a&&f>c))return!1;var s=o.get(n),l=o.get(t);if(s&&l)return s==t&&l==n;var h=-1,p=!0,v=2&r?new Hr:e;for(o.set(n,t),o.set(t,n);++h<c;){var d=n[h],g=t[h];if(i)var _=a?i(g,d,h,t,n,o):i(d,g,h,n,t,o);if(_!==e){if(_)continue;p=!1;break}if(v){if(!Ut(t,function(n,t){if(!Yt(v,t)&&(d===n||u(d,n,r,i,o)))return v.push(t)})){p=!1;break}}else if(d!==g&&!u(d,g,r,i,o)){p=!1;break}}return o.delete(n),o.delete(t),p}function Xi(n){return zu(Iu(n,e,$u),n+\"\")}function nu(n){return xe(n,ka,fu)}function tu(n){return xe(n,Ca,su)}var ru=zr?function(n){return zr.get(n)}:ac;function eu(n){for(var t=n.name+\"\",r=Mr[t],e=Rn.call(Mr,t)?r.length:0;e--;){var i=r[e],u=i.func;if(null==u||u==n)return i.name}return t}function iu(n){return(Rn.call(Nr,\"placeholder\")?Nr:n).placeholder}function uu(){var n=Nr.iteratee||ec;return n=n===ec?Pe:n,arguments.length?n(arguments[0],arguments[1]):n}function ou(n,t){var r,e,i=n.__data__;return(\"string\"==(e=typeof(r=t))||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==r:null===r)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function au(n){for(var t=ka(n),r=t.length;r--;){var e=t[r],i=n[e];t[r]=[e,i,wu(i)]}return t}function cu(n,t){var r=function(n,t){return null==n?e:n[t]}(n,t);return Ee(r)?r:e}var fu=gt?function(n){return null==n?[]:(n=jn(n),zt(gt(n),function(t){return Zn.call(n,t)}))}:vc,su=gt?function(n){for(var t=[];n;)Et(t,fu(n)),n=Vn(n);return t}:vc,lu=Ie;function hu(n,t,r){for(var e=-1,i=(t=gi(t,n)).length,u=!1;++e<i;){var o=Uu(t[e]);if(!(u=null!=n&&r(n,o)))break;n=n[o]}return u||++e!=i?u:!!(i=null==n?0:n.length)&&Qo(i)&&du(o,i)&&($o(n)||Fo(n))}function pu(n){return\"function\"!=typeof n.constructor||bu(n)?{}:Wr(Vn(n))}function vu(n){return $o(n)||Fo(n)||!!(Gn&&n&&n[Gn])}function du(n,t){var r=typeof n;return!!(t=t??s)&&(\"number\"==r||\"symbol\"!=r&&_n.test(n))&&n>-1&&n%1==0&&n<t}function gu(n,t,r){if(!Xo(r))return!1;var e=typeof t;return!!(\"number\"==e?Vo(r)&&du(t,r.length):\"string\"==e&&t in r)&&Wo(r[t],n)}function _u(n,t){if($o(n))return!1;var r=typeof n;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=n&&!aa(n))||Q.test(n)||!Y.test(n)||null!=t&&n in jn(t)}function yu(n){var t=eu(n),r=Nr[t];if(\"function\"!=typeof r||!(t in Fr.prototype))return!1;if(n===r)return!0;var e=ru(r);return!!e&&n===e[0]}(xr&&lu(new xr(new ArrayBuffer(1)))!=C||Ir&&lu(new Ir)!=w||Sr&&lu(Sr.resolve())!=S||jr&&lu(new jr)!=O||Or&&lu(new Or)!=M)&&(lu=function(n){var t=Ie(n),r=t==I?n.constructor:e,i=r?Lu(r):\"\";if(i)switch(i){case kr:return C;case Cr:return w;case Er:return S;case Pr:return O;case Rr:return M}return t});var mu=En?Jo:dc;function bu(n){var t=n&&n.constructor;return n===(\"function\"==typeof t&&t.prototype||Cn)}function wu(n){return n==n&&!Xo(n)}function xu(n,t){return function(r){return null!=r&&r[n]===t&&(t!==e||n in jn(r))}}function Iu(n,t,r){return t=gr(t===e?n.length-1:t,0),function(){for(var e=arguments,i=-1,u=gr(e.length-t,0),o=en(u);++i<u;)o[i]=e[t+i];i=-1;for(var a=en(t+1);++i<t;)a[i]=e[i];return a[t]=r(o),It(n,this,a)}}function Su(n,t){return t.length<2?n:we(n,ni(t,0,-1))}function ju(n,t){if((\"constructor\"!==t||\"function\"!=typeof n[t])&&\"__proto__\"!=t)return n[t]}var Ou=ku(Ye),Au=ht||function(n,t){return lt.setTimeout(n,t)},zu=ku(Qe);function Mu(n,t,r){var e=t+\"\";return zu(n,function(n,t){var r=t.length;if(!r)return n;var e=r-1;return t[e]=(r>1?\"& \":\"\")+t[e],t=t.join(r>2?\", \":\" \"),n.replace(un,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(e,function(n,t){return jt(p,function(r){var e=\"_.\"+r[0];t&r[1]&&!Mt(n,e)&&n.push(e)}),n.sort()}(function(n){var t=n.match(on);return t?t[1].split(an):[]}(e),r)))}function ku(n){var t=0,r=0;return function(){var i=yr(),u=16-(i-r);if(r=i,u>0){if(++t>=800)return arguments[0]}else t=0;return n.apply(e,arguments)}}function Cu(n,t){var r=-1,i=n.length,u=i-1;for(t=t===e?i:t;++r<t;){var o=Ve(r,u),a=n[o];n[o]=n[r],n[r]=a}return n.length=t,n}var Eu,Pu,Ru=(Eu=Po(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(\"\"),n.replace(X,function(n,r,e,i){t.push(e?i.replace(sn,\"$1\"):r||n)}),t},function(n){return 500===Pu.size&&Pu.clear(),n}),Pu=Eu.cache,Eu);function Uu(n){if(\"string\"==typeof n||aa(n))return n;var t=n+\"\";return\"0\"==t&&1/n==-1/0?\"-0\":t}function Lu(n){if(null!=n){try{return Pn.call(n)}catch(n){}try{return n+\"\"}catch(n){}}return\"\"}function Tu(n){if(n instanceof Fr)return n.clone();var t=new Dr(n.__wrapped__,n.__chain__);return t.__actions__=Oi(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}var Nu=Ze(function(n,t){return Ho(n)?fe(n,de(t,1,Ho,!0)):[]}),Wu=Ze(function(n,t){var r=Ku(t);return Ho(r)&&(r=e),Ho(n)?fe(n,de(t,1,Ho,!0),uu(r,2)):[]}),Bu=Ze(function(n,t){var r=Ku(t);return Ho(r)&&(r=e),Ho(n)?fe(n,de(t,1,Ho,!0),e,r):[]});function Du(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var i=null==r?0:pa(r);return i<0&&(i=gr(e+i,0)),Nt(n,uu(t,3),i)}function Fu(n,t,r){var i=null==n?0:n.length;if(!i)return-1;var u=i-1;return r!==e&&(u=pa(r),u=r<0?gr(i+u,0):_r(u,i-1)),Nt(n,uu(t,3),u,!0)}function $u(n){return null!=n&&n.length?de(n,1):[]}function qu(n){return n&&n.length?n[0]:e}var Vu=Ze(function(n){var t=Ct(n,vi);return t.length&&t[0]===n[0]?Ae(t):[]}),Hu=Ze(function(n){var t=Ku(n),r=Ct(n,vi);return t===Ku(r)?t=e:r.pop(),r.length&&r[0]===n[0]?Ae(r,uu(t,2)):[]}),Zu=Ze(function(n){var t=Ku(n),r=Ct(n,vi);return(t=\"function\"==typeof t?t:e)&&r.pop(),r.length&&r[0]===n[0]?Ae(r,e,t):[]});function Ku(n){var t=null==n?0:n.length;return t?n[t-1]:e}var Gu=Ze(Ju);function Ju(n,t){return n&&n.length&&t&&t.length?$e(n,t):n}var Yu=Xi(function(n,t){var r=null==n?0:n.length,e=ie(n,t);return qe(n,Ct(t,function(n){return du(n,r)?+n:n}).sort(Ii)),e});function Qu(n){return null==n?n:wr.call(n)}var Xu=Ze(function(n){return ai(de(n,1,Ho,!0))}),no=Ze(function(n){var t=Ku(n);return Ho(t)&&(t=e),ai(de(n,1,Ho,!0),uu(t,2))}),to=Ze(function(n){var t=Ku(n);return t=\"function\"==typeof t?t:e,ai(de(n,1,Ho,!0),e,t)});function ro(n){if(!n||!n.length)return[];var t=0;return n=zt(n,function(n){if(Ho(n))return t=gr(n.length,t),!0}),Zt(t,function(t){return Ct(n,$t(t))})}function eo(n,t){if(!n||!n.length)return[];var r=ro(n);return null==t?r:Ct(r,function(n){return It(t,e,n)})}var io=Ze(function(n,t){return Ho(n)?fe(n,t):[]}),uo=Ze(function(n){return hi(zt(n,Ho))}),oo=Ze(function(n){var t=Ku(n);return Ho(t)&&(t=e),hi(zt(n,Ho),uu(t,2))}),ao=Ze(function(n){var t=Ku(n);return t=\"function\"==typeof t?t:e,hi(zt(n,Ho),e,t)}),co=Ze(ro),fo=Ze(function(n){var t=n.length,r=t>1?n[t-1]:e;return r=\"function\"==typeof r?(n.pop(),r):e,eo(n,r)});function so(n){var t=Nr(n);return t.__chain__=!0,t}function lo(n,t){return t(n)}var ho=Xi(function(n){var t=n.length,r=t?n[0]:0,i=this.__wrapped__,u=function(t){return ie(t,n)};return!(t>1||this.__actions__.length)&&i instanceof Fr&&du(r)?((i=i.slice(r,+r+(t?1:0))).__actions__.push({func:lo,args:[u],thisArg:e}),new Dr(i,this.__chain__).thru(function(n){return t&&!n.length&&n.push(e),n})):this.thru(u)}),po=zi(function(n,t,r){Rn.call(n,r)?++n[r]:ee(n,r,1)}),vo=Ui(Du),go=Ui(Fu);function _o(n,t){return($o(n)?jt:se)(n,uu(t,3))}function yo(n,t){return($o(n)?Ot:le)(n,uu(t,3))}var mo=zi(function(n,t,r){Rn.call(n,r)?n[r].push(t):ee(n,r,[t])}),bo=Ze(function(n,t,r){var e=-1,i=\"function\"==typeof t,u=Vo(n)?en(n.length):[];return se(n,function(n){u[++e]=i?It(t,n,r):ze(n,t,r)}),u}),wo=zi(function(n,t,r){ee(n,r,t)});function xo(n,t){return($o(n)?Ct:Le)(n,uu(t,3))}var Io=zi(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),So=Ze(function(n,t){if(null==n)return[];var r=t.length;return r>1&&gu(n,t[0],t[1])?t=[]:r>2&&gu(t[0],t[1],t[2])&&(t=[t[0]]),De(n,de(t,1),[])}),jo=st||function(){return lt.Date.now()};function Oo(n,t,r){return t=r?e:t,t=n&&null==t?n.length:t,Ki(n,c,e,e,e,e,t)}function Ao(n,t){var r;if(\"function\"!=typeof t)throw new zn(i);return n=pa(n),function(){return--n>0&&(r=t.apply(this,arguments)),n<=1&&(t=e),r}}var zo=Ze(function(n,t,r){var e=1;if(r.length){var i=or(r,iu(zo));e|=a}return Ki(n,e,t,r,i)}),Mo=Ze(function(n,t,r){var e=3;if(r.length){var i=or(r,iu(Mo));e|=a}return Ki(t,e,n,r,i)});function ko(n,t,r){var u,o,a,c,f,s,l=0,h=!1,p=!1,v=!0;if(\"function\"!=typeof n)throw new zn(i);function d(t){var r=u,i=o;return u=o=e,l=t,c=n.apply(i,r)}function g(n){var r=n-s;return s===e||r>=t||r<0||p&&n-l>=a}function _(){var n=jo();if(g(n))return y(n);f=Au(_,function(n){var r=t-(n-s);return p?_r(r,a-(n-l)):r}(n))}function y(n){return f=e,v&&u?d(n):(u=o=e,c)}function m(){var n=jo(),r=g(n);if(u=arguments,o=this,s=n,r){if(f===e)return function(n){return l=n,f=Au(_,t),h?d(n):c}(s);if(p)return mi(f),f=Au(_,t),d(s)}return f===e&&(f=Au(_,t)),c}return t=da(t)||0,Xo(r)&&(h=!!r.leading,a=(p=\"maxWait\"in r)?gr(da(r.maxWait)||0,t):a,v=\"trailing\"in r?!!r.trailing:v),m.cancel=function(){f!==e&&mi(f),l=0,u=s=o=f=e},m.flush=function(){return f===e?c:y(jo())},m}var Co=Ze(function(n,t){return ce(n,1,t)}),Eo=Ze(function(n,t,r){return ce(n,da(t)||0,r)});function Po(n,t){if(\"function\"!=typeof n||null!=t&&\"function\"!=typeof t)throw new zn(i);var r=function(){var e=arguments,i=t?t.apply(this,e):e[0],u=r.cache;if(u.has(i))return u.get(i);var o=n.apply(this,e);return r.cache=u.set(i,o)||u,o};return r.cache=new(Po.Cache||Vr),r}function Ro(n){if(\"function\"!=typeof n)throw new zn(i);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}Po.Cache=Vr;var Uo=_i(function(n,t){var r=(t=1==t.length&&$o(t[0])?Ct(t[0],Gt(uu())):Ct(de(t,1),Gt(uu()))).length;return Ze(function(e){for(var i=-1,u=_r(e.length,r);++i<u;)e[i]=t[i].call(this,e[i]);return It(n,this,e)})}),Lo=Ze(function(n,t){var r=or(t,iu(Lo));return Ki(n,a,e,t,r)}),To=Ze(function(n,t){var r=or(t,iu(To));return Ki(n,64,e,t,r)}),No=Xi(function(n,t){return Ki(n,256,e,e,e,t)});function Wo(n,t){return n===t||n!=n&&t!=t}var Bo=$i(Se),Do=$i(function(n,t){return n>=t}),Fo=Me(function(){return arguments}())?Me:function(n){return na(n)&&Rn.call(n,\"callee\")&&!Zn.call(n,\"callee\")},$o=en.isArray,qo=_t?Gt(_t):function(n){return na(n)&&Ie(n)==k};function Vo(n){return null!=n&&Qo(n.length)&&!Jo(n)}function Ho(n){return na(n)&&Vo(n)}var Zo=Lt||dc,Ko=yt?Gt(yt):function(n){return na(n)&&Ie(n)==_};function Go(n){if(!na(n))return!1;var t=Ie(n);return t==y||\"[object DOMException]\"==t||\"string\"==typeof n.message&&\"string\"==typeof n.name&&!ea(n)}function Jo(n){if(!Xo(n))return!1;var t=Ie(n);return t==m||t==b||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function Yo(n){return\"number\"==typeof n&&n==pa(n)}function Qo(n){return\"number\"==typeof n&&n>-1&&n%1==0&&n<=s}function Xo(n){var t=typeof n;return null!=n&&(\"object\"==t||\"function\"==t)}function na(n){return null!=n&&\"object\"==typeof n}var ta=mt?Gt(mt):function(n){return na(n)&&lu(n)==w};function ra(n){return\"number\"==typeof n||na(n)&&Ie(n)==x}function ea(n){if(!na(n)||Ie(n)!=I)return!1;var t=Vn(n);if(null===t)return!0;var r=Rn.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof r&&r instanceof r&&Pn.call(r)==Nn}var ia=bt?Gt(bt):function(n){return na(n)&&Ie(n)==j},ua=wt?Gt(wt):function(n){return na(n)&&lu(n)==O};function oa(n){return\"string\"==typeof n||!$o(n)&&na(n)&&Ie(n)==A}function aa(n){return\"symbol\"==typeof n||na(n)&&Ie(n)==z}var ca=xt?Gt(xt):function(n){return na(n)&&Qo(n.length)&&!!it[Ie(n)]},fa=$i(Ue),sa=$i(function(n,t){return n<=t});function la(n){if(!n)return[];if(Vo(n))return oa(n)?sr(n):Oi(n);if(Qn&&n[Qn])return function(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}(n[Qn]());var t=lu(n);return(t==w?ir:t==O?ar:Wa)(n)}function ha(n){return n?(n=da(n))===f||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function pa(n){var t=ha(n),r=t%1;return t==t?r?t-r:t:0}function va(n){return n?ue(pa(n),0,h):0}function da(n){if(\"number\"==typeof n)return n;if(aa(n))return l;if(Xo(n)){var t=\"function\"==typeof n.valueOf?n.valueOf():n;n=Xo(t)?t+\"\":t}if(\"string\"!=typeof n)return 0===n?n:+n;n=Kt(n);var r=vn.test(n);return r||gn.test(n)?ct(n.slice(2),r?2:8):pn.test(n)?l:+n}function ga(n){return Ai(n,Ca(n))}function _a(n){return null==n?\"\":oi(n)}var ya=Mi(function(n,t){if(bu(t)||Vo(t))Ai(t,ka(t),n);else for(var r in t)Rn.call(t,r)&&Xr(n,r,t[r])}),ma=Mi(function(n,t){Ai(t,Ca(t),n)}),ba=Mi(function(n,t,r,e){Ai(t,Ca(t),n,e)}),wa=Mi(function(n,t,r,e){Ai(t,ka(t),n,e)}),xa=Xi(ie),Ia=Ze(function(n,t){n=jn(n);var r=-1,i=t.length,u=i>2?t[2]:e;for(u&&gu(t[0],t[1],u)&&(i=1);++r<i;)for(var o=t[r],a=Ca(o),c=-1,f=a.length;++c<f;){var s=a[c],l=n[s];(l===e||Wo(l,Cn[s])&&!Rn.call(n,s))&&(n[s]=o[s])}return n}),Sa=Ze(function(n){return n.push(e,Ji),It(Pa,e,n)});function ja(n,t,r){var i=null==n?e:we(n,t);return i===e?r:i}function Oa(n,t){return null!=n&&hu(n,t,Oe)}var Aa=Ni(function(n,t,r){null!=t&&\"function\"!=typeof t.toString&&(t=Tn.call(t)),n[t]=r},Xa(rc)),za=Ni(function(n,t,r){null!=t&&\"function\"!=typeof t.toString&&(t=Tn.call(t)),Rn.call(n,t)?n[t].push(r):n[t]=[r]},uu),Ma=Ze(ze);function ka(n){return Vo(n)?Kr(n):Re(n)}function Ca(n){return Vo(n)?Kr(n,!0):function(n){if(!Xo(n))return function(n){var t=[];if(null!=n)for(var r in jn(n))t.push(r);return t}(n);var t=bu(n),r=[];for(var e in n)(\"constructor\"!=e||!t&&Rn.call(n,e))&&r.push(e);return r}(n)}var Ea=Mi(function(n,t,r){We(n,t,r)}),Pa=Mi(function(n,t,r,e){We(n,t,r,e)}),Ra=Xi(function(n,t){var r={};if(null==n)return r;var e=!1;t=Ct(t,function(t){return t=gi(t,n),e||(e=t.length>1),t}),Ai(n,tu(n),r),e&&(r=oe(r,7,Yi));for(var i=t.length;i--;)ci(r,t[i]);return r}),Ua=Xi(function(n,t){return null==n?{}:function(n,t){return Fe(n,t,function(t,r){return Oa(n,r)})}(n,t)});function La(n,t){if(null==n)return{};var r=Ct(tu(n),function(n){return[n]});return t=uu(t),Fe(n,r,function(n,r){return t(n,r[0])})}var Ta=Zi(ka),Na=Zi(Ca);function Wa(n){return null==n?[]:Jt(n,ka(n))}var Ba=Pi(function(n,t,r){return t=t.toLowerCase(),n+(r?Da(t):t)});function Da(n){return Ga(_a(n).toLowerCase())}function Fa(n){return(n=_a(n))&&n.replace(yn,nr).replace(Yn,\"\")}var $a=Pi(function(n,t,r){return n+(r?\"-\":\"\")+t.toLowerCase()}),qa=Pi(function(n,t,r){return n+(r?\" \":\"\")+t.toLowerCase()}),Va=Ei(\"toLowerCase\"),Ha=Pi(function(n,t,r){return n+(r?\"_\":\"\")+t.toLowerCase()}),Za=Pi(function(n,t,r){return n+(r?\" \":\"\")+Ga(t)}),Ka=Pi(function(n,t,r){return n+(r?\" \":\"\")+t.toUpperCase()}),Ga=Ei(\"toUpperCase\");function Ja(n,t,r){return n=_a(n),(t=r?e:t)===e?function(n){return tt.test(n)}(n)?function(n){return n.match(Xn)||[]}(n):function(n){return n.match(cn)||[]}(n):n.match(t)||[]}var Ya=Ze(function(n,t){try{return It(n,e,t)}catch(n){return Go(n)?n:new xn(n)}}),Qa=Xi(function(n,t){return jt(t,function(t){t=Uu(t),ee(n,t,zo(n[t],n))}),n});function Xa(n){return function(){return n}}var nc=Li(),tc=Li(!0);function rc(n){return n}function ec(n){return Pe(\"function\"==typeof n?n:oe(n,1))}var ic=Ze(function(n,t){return function(r){return ze(r,n,t)}}),uc=Ze(function(n,t){return function(r){return ze(n,r,t)}});function oc(n,t,r){var e=ka(t),i=be(t,e);null!=r||Xo(t)&&(i.length||!e.length)||(r=t,t=n,n=this,i=be(t,ka(t)));var u=!(Xo(r)&&\"chain\"in r&&!r.chain),o=Jo(n);return jt(i,function(r){var e=t[r];n[r]=e,o&&(n.prototype[r]=function(){var t=this.__chain__;if(u||t){var r=n(this.__wrapped__);return(r.__actions__=Oi(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,Et([this.value()],arguments))})}),n}function ac(){}var cc=Bi(Ct),fc=Bi(At),sc=Bi(Ut);function lc(n){return _u(n)?$t(Uu(n)):function(n){return function(t){return we(t,n)}}(n)}var hc=Fi(),pc=Fi(!0);function vc(){return[]}function dc(){return!1}var gc,_c=Wi(function(n,t){return n+t},0),yc=Vi(\"ceil\"),mc=Wi(function(n,t){return n/t},1),bc=Vi(\"floor\"),wc=Wi(function(n,t){return n*t},1),xc=Vi(\"round\"),Ic=Wi(function(n,t){return n-t},0);return Nr.after=function(n,t){if(\"function\"!=typeof t)throw new zn(i);return n=pa(n),function(){if(--n<1)return t.apply(this,arguments)}},Nr.ary=Oo,Nr.assign=ya,Nr.assignIn=ma,Nr.assignInWith=ba,Nr.assignWith=wa,Nr.at=xa,Nr.before=Ao,Nr.bind=zo,Nr.bindAll=Qa,Nr.bindKey=Mo,Nr.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return $o(n)?n:[n]},Nr.chain=so,Nr.chunk=function(n,t,r){t=(r?gu(n,t,r):t===e)?1:gr(pa(t),0);var i=null==n?0:n.length;if(!i||t<1)return[];for(var u=0,o=0,a=en(pt(i/t));u<i;)a[o++]=ni(n,u,u+=t);return a},Nr.compact=function(n){for(var t=-1,r=null==n?0:n.length,e=0,i=[];++t<r;){var u=n[t];u&&(i[e++]=u)}return i},Nr.concat=function(){var n=arguments.length;if(!n)return[];for(var t=en(n-1),r=arguments[0],e=n;e--;)t[e-1]=arguments[e];return Et($o(r)?Oi(r):[r],de(t,1))},Nr.cond=function(n){var t=null==n?0:n.length,r=uu();return n=t?Ct(n,function(n){if(\"function\"!=typeof n[1])throw new zn(i);return[r(n[0]),n[1]]}):[],Ze(function(r){for(var e=-1;++e<t;){var i=n[e];if(It(i[0],this,r))return It(i[1],this,r)}})},Nr.conforms=function(n){return function(n){var t=ka(n);return function(r){return ae(r,n,t)}}(oe(n,1))},Nr.constant=Xa,Nr.countBy=po,Nr.create=function(n,t){var r=Wr(n);return null==t?r:re(r,t)},Nr.curry=function n(t,r,i){var u=Ki(t,8,e,e,e,e,e,r=i?e:r);return u.placeholder=n.placeholder,u},Nr.curryRight=function n(t,r,i){var u=Ki(t,16,e,e,e,e,e,r=i?e:r);return u.placeholder=n.placeholder,u},Nr.debounce=ko,Nr.defaults=Ia,Nr.defaultsDeep=Sa,Nr.defer=Co,Nr.delay=Eo,Nr.difference=Nu,Nr.differenceBy=Wu,Nr.differenceWith=Bu,Nr.drop=function(n,t,r){var i=null==n?0:n.length;return i?ni(n,(t=r||t===e?1:pa(t))<0?0:t,i):[]},Nr.dropRight=function(n,t,r){var i=null==n?0:n.length;return i?ni(n,0,(t=i-(t=r||t===e?1:pa(t)))<0?0:t):[]},Nr.dropRightWhile=function(n,t){return n&&n.length?si(n,uu(t,3),!0,!0):[]},Nr.dropWhile=function(n,t){return n&&n.length?si(n,uu(t,3),!0):[]},Nr.fill=function(n,t,r,i){var u=null==n?0:n.length;return u?(r&&\"number\"!=typeof r&&gu(n,t,r)&&(r=0,i=u),function(n,t,r,i){var u=n.length;for((r=pa(r))<0&&(r=-r>u?0:u+r),(i=i===e||i>u?u:pa(i))<0&&(i+=u),i=r>i?0:va(i);r<i;)n[r++]=t;return n}(n,t,r,i)):[]},Nr.filter=function(n,t){return($o(n)?zt:ve)(n,uu(t,3))},Nr.flatMap=function(n,t){return de(xo(n,t),1)},Nr.flatMapDeep=function(n,t){return de(xo(n,t),f)},Nr.flatMapDepth=function(n,t,r){return r=r===e?1:pa(r),de(xo(n,t),r)},Nr.flatten=$u,Nr.flattenDeep=function(n){return null!=n&&n.length?de(n,f):[]},Nr.flattenDepth=function(n,t){return null!=n&&n.length?de(n,t=t===e?1:pa(t)):[]},Nr.flip=function(n){return Ki(n,512)},Nr.flow=nc,Nr.flowRight=tc,Nr.fromPairs=function(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var i=n[t];ee(e,i[0],i[1])}return e},Nr.functions=function(n){return null==n?[]:be(n,ka(n))},Nr.functionsIn=function(n){return null==n?[]:be(n,Ca(n))},Nr.groupBy=mo,Nr.initial=function(n){return null!=n&&n.length?ni(n,0,-1):[]},Nr.intersection=Vu,Nr.intersectionBy=Hu,Nr.intersectionWith=Zu,Nr.invert=Aa,Nr.invertBy=za,Nr.invokeMap=bo,Nr.iteratee=ec,Nr.keyBy=wo,Nr.keys=ka,Nr.keysIn=Ca,Nr.map=xo,Nr.mapKeys=function(n,t){var r={};return t=uu(t,3),ye(n,function(n,e,i){ee(r,t(n,e,i),n)}),r},Nr.mapValues=function(n,t){var r={};return t=uu(t,3),ye(n,function(n,e,i){ee(r,e,t(n,e,i))}),r},Nr.matches=function(n){return Te(oe(n,1))},Nr.matchesProperty=function(n,t){return Ne(n,oe(t,1))},Nr.memoize=Po,Nr.merge=Ea,Nr.mergeWith=Pa,Nr.method=ic,Nr.methodOf=uc,Nr.mixin=oc,Nr.negate=Ro,Nr.nthArg=function(n){return n=pa(n),Ze(function(t){return Be(t,n)})},Nr.omit=Ra,Nr.omitBy=function(n,t){return La(n,Ro(uu(t)))},Nr.once=function(n){return Ao(2,n)},Nr.orderBy=function(n,t,r,i){return null==n?[]:($o(t)||(t=null==t?[]:[t]),$o(r=i?e:r)||(r=null==r?[]:[r]),De(n,t,r))},Nr.over=cc,Nr.overArgs=Uo,Nr.overEvery=fc,Nr.overSome=sc,Nr.partial=Lo,Nr.partialRight=To,Nr.partition=Io,Nr.pick=Ua,Nr.pickBy=La,Nr.property=lc,Nr.propertyOf=function(n){return function(t){return null==n?e:we(n,t)}},Nr.pull=Gu,Nr.pullAll=Ju,Nr.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?$e(n,t,uu(r,2)):n},Nr.pullAllWith=function(n,t,r){return n&&n.length&&t&&t.length?$e(n,t,e,r):n},Nr.pullAt=Yu,Nr.range=hc,Nr.rangeRight=pc,Nr.rearg=No,Nr.reject=function(n,t){return($o(n)?zt:ve)(n,Ro(uu(t,3)))},Nr.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,i=[],u=n.length;for(t=uu(t,3);++e<u;){var o=n[e];t(o,e,n)&&(r.push(o),i.push(e))}return qe(n,i),r},Nr.rest=function(n,t){if(\"function\"!=typeof n)throw new zn(i);return Ze(n,t=t===e?t:pa(t))},Nr.reverse=Qu,Nr.sampleSize=function(n,t,r){return t=(r?gu(n,t,r):t===e)?1:pa(t),($o(n)?Jr:Ge)(n,t)},Nr.set=function(n,t,r){return null==n?n:Je(n,t,r)},Nr.setWith=function(n,t,r,i){return i=\"function\"==typeof i?i:e,null==n?n:Je(n,t,r,i)},Nr.shuffle=function(n){return($o(n)?Yr:Xe)(n)},Nr.slice=function(n,t,r){var i=null==n?0:n.length;return i?(r&&\"number\"!=typeof r&&gu(n,t,r)?(t=0,r=i):(t=null==t?0:pa(t),r=r===e?i:pa(r)),ni(n,t,r)):[]},Nr.sortBy=So,Nr.sortedUniq=function(n){return n&&n.length?ii(n):[]},Nr.sortedUniqBy=function(n,t){return n&&n.length?ii(n,uu(t,2)):[]},Nr.split=function(n,t,r){return r&&\"number\"!=typeof r&&gu(n,t,r)&&(t=r=e),(r=r===e?h:r>>>0)?(n=_a(n))&&(\"string\"==typeof t||null!=t&&!ia(t))&&!(t=oi(t))&&er(n)?yi(sr(n),0,r):n.split(t,r):[]},Nr.spread=function(n,t){if(\"function\"!=typeof n)throw new zn(i);return t=null==t?0:gr(pa(t),0),Ze(function(r){var e=r[t],i=yi(r,0,t);return e&&Et(i,e),It(n,this,i)})},Nr.tail=function(n){var t=null==n?0:n.length;return t?ni(n,1,t):[]},Nr.take=function(n,t,r){return n&&n.length?ni(n,0,(t=r||t===e?1:pa(t))<0?0:t):[]},Nr.takeRight=function(n,t,r){var i=null==n?0:n.length;return i?ni(n,(t=i-(t=r||t===e?1:pa(t)))<0?0:t,i):[]},Nr.takeRightWhile=function(n,t){return n&&n.length?si(n,uu(t,3),!1,!0):[]},Nr.takeWhile=function(n,t){return n&&n.length?si(n,uu(t,3)):[]},Nr.tap=function(n,t){return t(n),n},Nr.throttle=function(n,t,r){var e=!0,u=!0;if(\"function\"!=typeof n)throw new zn(i);return Xo(r)&&(e=\"leading\"in r?!!r.leading:e,u=\"trailing\"in r?!!r.trailing:u),ko(n,t,{leading:e,maxWait:t,trailing:u})},Nr.thru=lo,Nr.toArray=la,Nr.toPairs=Ta,Nr.toPairsIn=Na,Nr.toPath=function(n){return $o(n)?Ct(n,Uu):aa(n)?[n]:Oi(Ru(_a(n)))},Nr.toPlainObject=ga,Nr.transform=function(n,t,r){var e=$o(n),i=e||Zo(n)||ca(n);if(t=uu(t,4),null==r){var u=n&&n.constructor;r=i?e?new u:[]:Xo(n)&&Jo(u)?Wr(Vn(n)):{}}return(i?jt:ye)(n,function(n,e,i){return t(r,n,e,i)}),r},Nr.unary=function(n){return Oo(n,1)},Nr.union=Xu,Nr.unionBy=no,Nr.unionWith=to,Nr.uniq=function(n){return n&&n.length?ai(n):[]},Nr.uniqBy=function(n,t){return n&&n.length?ai(n,uu(t,2)):[]},Nr.uniqWith=function(n,t){return t=\"function\"==typeof t?t:e,n&&n.length?ai(n,e,t):[]},Nr.unset=function(n,t){return null==n||ci(n,t)},Nr.unzip=ro,Nr.unzipWith=eo,Nr.update=function(n,t,r){return null==n?n:fi(n,t,di(r))},Nr.updateWith=function(n,t,r,i){return i=\"function\"==typeof i?i:e,null==n?n:fi(n,t,di(r),i)},Nr.values=Wa,Nr.valuesIn=function(n){return null==n?[]:Jt(n,Ca(n))},Nr.without=io,Nr.words=Ja,Nr.wrap=function(n,t){return Lo(di(t),n)},Nr.xor=uo,Nr.xorBy=oo,Nr.xorWith=ao,Nr.zip=co,Nr.zipObject=function(n,t){return pi(n||[],t||[],Xr)},Nr.zipObjectDeep=function(n,t){return pi(n||[],t||[],Je)},Nr.zipWith=fo,Nr.entries=Ta,Nr.entriesIn=Na,Nr.extend=ma,Nr.extendWith=ba,oc(Nr,Nr),Nr.add=_c,Nr.attempt=Ya,Nr.camelCase=Ba,Nr.capitalize=Da,Nr.ceil=yc,Nr.clamp=function(n,t,r){return r===e&&(r=t,t=e),r!==e&&(r=(r=da(r))==r?r:0),t!==e&&(t=(t=da(t))==t?t:0),ue(da(n),t,r)},Nr.clone=function(n){return oe(n,4)},Nr.cloneDeep=function(n){return oe(n,5)},Nr.cloneDeepWith=function(n,t){return oe(n,5,t=\"function\"==typeof t?t:e)},Nr.cloneWith=function(n,t){return oe(n,4,t=\"function\"==typeof t?t:e)},Nr.conformsTo=function(n,t){return null==t||ae(n,t,ka(t))},Nr.deburr=Fa,Nr.defaultTo=function(n,t){return null==n||n!=n?t:n},Nr.divide=mc,Nr.endsWith=function(n,t,r){n=_a(n),t=oi(t);var i=n.length,u=r=r===e?i:ue(pa(r),0,i);return(r-=t.length)>=0&&n.slice(r,u)==t},Nr.eq=Wo,Nr.escape=function(n){return(n=_a(n))&&Z.test(n)?n.replace(V,tr):n},Nr.escapeRegExp=function(n){return(n=_a(n))&&tn.test(n)?n.replace(nn,\"\\\\$&\"):n},Nr.every=function(n,t,r){var i=$o(n)?At:he;return r&&gu(n,t,r)&&(t=e),i(n,uu(t,3))},Nr.find=vo,Nr.findIndex=Du,Nr.findKey=function(n,t){return Tt(n,uu(t,3),ye)},Nr.findLast=go,Nr.findLastIndex=Fu,Nr.findLastKey=function(n,t){return Tt(n,uu(t,3),me)},Nr.floor=bc,Nr.forEach=_o,Nr.forEachRight=yo,Nr.forIn=function(n,t){return null==n?n:ge(n,uu(t,3),Ca)},Nr.forInRight=function(n,t){return null==n?n:_e(n,uu(t,3),Ca)},Nr.forOwn=function(n,t){return n&&ye(n,uu(t,3))},Nr.forOwnRight=function(n,t){return n&&me(n,uu(t,3))},Nr.get=ja,Nr.gt=Bo,Nr.gte=Do,Nr.has=function(n,t){return null!=n&&hu(n,t,je)},Nr.hasIn=Oa,Nr.head=qu,Nr.identity=rc,Nr.includes=function(n,t,r,e){n=Vo(n)?n:Wa(n),r=r&&!e?pa(r):0;var i=n.length;return r<0&&(r=gr(i+r,0)),oa(n)?r<=i&&n.indexOf(t,r)>-1:!!i&&Wt(n,t,r)>-1},Nr.indexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var i=null==r?0:pa(r);return i<0&&(i=gr(e+i,0)),Wt(n,t,i)},Nr.inRange=function(n,t,r){return t=ha(t),r===e?(r=t,t=0):r=ha(r),function(n,t,r){return n>=_r(t,r)&&n<gr(t,r)}(n=da(n),t,r)},Nr.invoke=Ma,Nr.isArguments=Fo,Nr.isArray=$o,Nr.isArrayBuffer=qo,Nr.isArrayLike=Vo,Nr.isArrayLikeObject=Ho,Nr.isBoolean=function(n){return!0===n||!1===n||na(n)&&Ie(n)==g},Nr.isBuffer=Zo,Nr.isDate=Ko,Nr.isElement=function(n){return na(n)&&1===n.nodeType&&!ea(n)},Nr.isEmpty=function(n){if(null==n)return!0;if(Vo(n)&&($o(n)||\"string\"==typeof n||\"function\"==typeof n.splice||Zo(n)||ca(n)||Fo(n)))return!n.length;var t=lu(n);if(t==w||t==O)return!n.size;if(bu(n))return!Re(n).length;for(var r in n)if(Rn.call(n,r))return!1;return!0},Nr.isEqual=function(n,t){return ke(n,t)},Nr.isEqualWith=function(n,t,r){var i=(r=\"function\"==typeof r?r:e)?r(n,t):e;return i===e?ke(n,t,e,r):!!i},Nr.isError=Go,Nr.isFinite=function(n){return\"number\"==typeof n&&qt(n)},Nr.isFunction=Jo,Nr.isInteger=Yo,Nr.isLength=Qo,Nr.isMap=ta,Nr.isMatch=function(n,t){return n===t||Ce(n,t,au(t))},Nr.isMatchWith=function(n,t,r){return r=\"function\"==typeof r?r:e,Ce(n,t,au(t),r)},Nr.isNaN=function(n){return ra(n)&&n!=+n},Nr.isNative=function(n){if(mu(n))throw new xn(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Ee(n)},Nr.isNil=function(n){return null==n},Nr.isNull=function(n){return null===n},Nr.isNumber=ra,Nr.isObject=Xo,Nr.isObjectLike=na,Nr.isPlainObject=ea,Nr.isRegExp=ia,Nr.isSafeInteger=function(n){return Yo(n)&&n>=-9007199254740991&&n<=s},Nr.isSet=ua,Nr.isString=oa,Nr.isSymbol=aa,Nr.isTypedArray=ca,Nr.isUndefined=function(n){return n===e},Nr.isWeakMap=function(n){return na(n)&&lu(n)==M},Nr.isWeakSet=function(n){return na(n)&&\"[object WeakSet]\"==Ie(n)},Nr.join=function(n,t){return null==n?\"\":vr.call(n,t)},Nr.kebabCase=$a,Nr.last=Ku,Nr.lastIndexOf=function(n,t,r){var i=null==n?0:n.length;if(!i)return-1;var u=i;return r!==e&&(u=(u=pa(r))<0?gr(i+u,0):_r(u,i-1)),t==t?function(n,t,r){for(var e=r+1;e--;)if(n[e]===t)return e;return e}(n,t,u):Nt(n,Dt,u,!0)},Nr.lowerCase=qa,Nr.lowerFirst=Va,Nr.lt=fa,Nr.lte=sa,Nr.max=function(n){return n&&n.length?pe(n,rc,Se):e},Nr.maxBy=function(n,t){return n&&n.length?pe(n,uu(t,2),Se):e},Nr.mean=function(n){return Ft(n,rc)},Nr.meanBy=function(n,t){return Ft(n,uu(t,2))},Nr.min=function(n){return n&&n.length?pe(n,rc,Ue):e},Nr.minBy=function(n,t){return n&&n.length?pe(n,uu(t,2),Ue):e},Nr.stubArray=vc,Nr.stubFalse=dc,Nr.stubObject=function(){return{}},Nr.stubString=function(){return\"\"},Nr.stubTrue=function(){return!0},Nr.multiply=wc,Nr.nth=function(n,t){return n&&n.length?Be(n,pa(t)):e},Nr.noConflict=function(){return lt._===this&&(lt._=Wn),this},Nr.noop=ac,Nr.now=jo,Nr.pad=function(n,t,r){n=_a(n);var e=(t=pa(t))?fr(n):0;if(!t||e>=t)return n;var i=(t-e)/2;return Di(dt(i),r)+n+Di(pt(i),r)},Nr.padEnd=function(n,t,r){n=_a(n);var e=(t=pa(t))?fr(n):0;return t&&e<t?n+Di(t-e,r):n},Nr.padStart=function(n,t,r){n=_a(n);var e=(t=pa(t))?fr(n):0;return t&&e<t?Di(t-e,r)+n:n},Nr.parseInt=function(n,t,r){return r||null==t?t=0:t&&(t=+t),mr(_a(n).replace(rn,\"\"),t||0)},Nr.random=function(n,t,r){if(r&&\"boolean\"!=typeof r&&gu(n,t,r)&&(t=r=e),r===e&&(\"boolean\"==typeof t?(r=t,t=e):\"boolean\"==typeof n&&(r=n,n=e)),n===e&&t===e?(n=0,t=1):(n=ha(n),t===e?(t=n,n=0):t=ha(t)),n>t){var i=n;n=t,t=i}if(r||n%1||t%1){var u=br();return _r(n+u*(t-n+at(\"1e-\"+((u+\"\").length-1))),t)}return Ve(n,t)},Nr.reduce=function(n,t,r){var e=$o(n)?Pt:Vt,i=arguments.length<3;return e(n,uu(t,4),r,i,se)},Nr.reduceRight=function(n,t,r){var e=$o(n)?Rt:Vt,i=arguments.length<3;return e(n,uu(t,4),r,i,le)},Nr.repeat=function(n,t,r){return t=(r?gu(n,t,r):t===e)?1:pa(t),He(_a(n),t)},Nr.replace=function(){var n=arguments,t=_a(n[0]);return n.length<3?t:t.replace(n[1],n[2])},Nr.result=function(n,t,r){var i=-1,u=(t=gi(t,n)).length;for(u||(u=1,n=e);++i<u;){var o=null==n?e:n[Uu(t[i])];o===e&&(i=u,o=r),n=Jo(o)?o.call(n):o}return n},Nr.round=xc,Nr.runInContext=n,Nr.sample=function(n){return($o(n)?Gr:Ke)(n)},Nr.size=function(n){if(null==n)return 0;if(Vo(n))return oa(n)?fr(n):n.length;var t=lu(n);return t==w||t==O?n.size:Re(n).length},Nr.snakeCase=Ha,Nr.some=function(n,t,r){var i=$o(n)?Ut:ti;return r&&gu(n,t,r)&&(t=e),i(n,uu(t,3))},Nr.sortedIndex=function(n,t){return ri(n,t)},Nr.sortedIndexBy=function(n,t,r){return ei(n,t,uu(r,2))},Nr.sortedIndexOf=function(n,t){var r=null==n?0:n.length;if(r){var e=ri(n,t);if(e<r&&Wo(n[e],t))return e}return-1},Nr.sortedLastIndex=function(n,t){return ri(n,t,!0)},Nr.sortedLastIndexBy=function(n,t,r){return ei(n,t,uu(r,2),!0)},Nr.sortedLastIndexOf=function(n,t){if(null!=n&&n.length){var r=ri(n,t,!0)-1;if(Wo(n[r],t))return r}return-1},Nr.startCase=Za,Nr.startsWith=function(n,t,r){return n=_a(n),r=null==r?0:ue(pa(r),0,n.length),t=oi(t),n.slice(r,r+t.length)==t},Nr.subtract=Ic,Nr.sum=function(n){return n&&n.length?Ht(n,rc):0},Nr.sumBy=function(n,t){return n&&n.length?Ht(n,uu(t,2)):0},Nr.template=function(n,t,r){var i=Nr.templateSettings;r&&gu(n,t,r)&&(t=e),n=_a(n),t=wa({},t,i,Gi);var u=wa({},t.imports,i.imports,Gi),o=ka(u),a=Jt(u,o);jt(o,function(n){if(fn.test(n))throw new xn(\"Invalid `imports` option passed into `_.template`\")});var c,f,s=0,l=t.interpolate||mn,h=\"__p += '\",p=On((t.escape||mn).source+\"|\"+l.source+\"|\"+(l===J?ln:mn).source+\"|\"+(t.evaluate||mn).source+\"|$\",\"g\"),v=\"//# sourceURL=\"+(Rn.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++et+\"]\")+\"\\n\";n.replace(p,function(t,r,e,i,u,o){return e||(e=i),h+=n.slice(s,o).replace(bn,rr),r&&(c=!0,h+=\"' +\\n__e(\"+r+\") +\\n'\"),u&&(f=!0,h+=\"';\\n\"+u+\";\\n__p += '\"),e&&(h+=\"' +\\n((__t = (\"+e+\")) == null ? '' : __t) +\\n'\"),s=o+t.length,t}),h+=\"';\\n\";var d=Rn.call(t,\"variable\")&&t.variable;if(d){if(fn.test(d))throw new xn(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(f?h.replace(D,\"\"):h).replace(F,\"$1\").replace($,\"$1;\"),h=\"function(\"+(d||\"obj\")+\") {\\n\"+(d?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(f?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var g=Ya(function(){return In(o,v+\"return \"+h).apply(e,a)});if(g.source=h,Go(g))throw g;return g},Nr.times=function(n,t){if((n=pa(n))<1||n>s)return[];var r=h,e=_r(n,h);t=uu(t),n-=h;for(var i=Zt(e,t);++r<n;)t(r);return i},Nr.toFinite=ha,Nr.toInteger=pa,Nr.toLength=va,Nr.toLower=function(n){return _a(n).toLowerCase()},Nr.toNumber=da,Nr.toSafeInteger=function(n){return n?ue(pa(n),-9007199254740991,s):0===n?n:0},Nr.toString=_a,Nr.toUpper=function(n){return _a(n).toUpperCase()},Nr.trim=function(n,t,r){if((n=_a(n))&&(r||t===e))return Kt(n);if(!n||!(t=oi(t)))return n;var i=sr(n),u=sr(t);return yi(i,Qt(i,u),Xt(i,u)+1).join(\"\")},Nr.trimEnd=function(n,t,r){if((n=_a(n))&&(r||t===e))return n.slice(0,lr(n)+1);if(!n||!(t=oi(t)))return n;var i=sr(n);return yi(i,0,Xt(i,sr(t))+1).join(\"\")},Nr.trimStart=function(n,t,r){if((n=_a(n))&&(r||t===e))return n.replace(rn,\"\");if(!n||!(t=oi(t)))return n;var i=sr(n);return yi(i,Qt(i,sr(t))).join(\"\")},Nr.truncate=function(n,t){var r=30,i=\"...\";if(Xo(t)){var u=\"separator\"in t?t.separator:u;r=\"length\"in t?pa(t.length):r,i=\"omission\"in t?oi(t.omission):i}var o=(n=_a(n)).length;if(er(n)){var a=sr(n);o=a.length}if(r>=o)return n;var c=r-fr(i);if(c<1)return i;var f=a?yi(a,0,c).join(\"\"):n.slice(0,c);if(u===e)return f+i;if(a&&(c+=f.length-c),ia(u)){if(n.slice(c).search(u)){var s,l=f;for(u.global||(u=On(u.source,_a(hn.exec(u))+\"g\")),u.lastIndex=0;s=u.exec(l);)var h=s.index;f=f.slice(0,h===e?c:h)}}else if(n.indexOf(oi(u),c)!=c){var p=f.lastIndexOf(u);p>-1&&(f=f.slice(0,p))}return f+i},Nr.unescape=function(n){return(n=_a(n))&&H.test(n)?n.replace(q,hr):n},Nr.uniqueId=function(n){var t=++Un;return _a(n)+t},Nr.upperCase=Ka,Nr.upperFirst=Ga,Nr.each=_o,Nr.eachRight=yo,Nr.first=qu,oc(Nr,(gc={},ye(Nr,function(n,t){Rn.call(Nr.prototype,t)||(gc[t]=n)}),gc),{chain:!1}),Nr.VERSION=\"4.18.1\",jt([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(n){Nr[n].placeholder=Nr}),jt([\"drop\",\"take\"],function(n,t){Fr.prototype[n]=function(r){r=r===e?1:gr(pa(r),0);var i=this.__filtered__&&!t?new Fr(this):this.clone();return i.__filtered__?i.__takeCount__=_r(r,i.__takeCount__):i.__views__.push({size:_r(r,h),type:n+(i.__dir__<0?\"Right\":\"\")}),i},Fr.prototype[n+\"Right\"]=function(t){return this.reverse()[n](t).reverse()}}),jt([\"filter\",\"map\",\"takeWhile\"],function(n,t){var r=t+1,e=1==r||3==r;Fr.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:uu(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),jt([\"head\",\"last\"],function(n,t){var r=\"take\"+(t?\"Right\":\"\");Fr.prototype[n]=function(){return this[r](1).value()[0]}}),jt([\"initial\",\"tail\"],function(n,t){var r=\"drop\"+(t?\"\":\"Right\");Fr.prototype[n]=function(){return this.__filtered__?new Fr(this):this[r](1)}}),Fr.prototype.compact=function(){return this.filter(rc)},Fr.prototype.find=function(n){return this.filter(n).head()},Fr.prototype.findLast=function(n){return this.reverse().find(n)},Fr.prototype.invokeMap=Ze(function(n,t){return\"function\"==typeof n?new Fr(this):this.map(function(r){return ze(r,n,t)})}),Fr.prototype.reject=function(n){return this.filter(Ro(uu(n)))},Fr.prototype.slice=function(n,t){n=pa(n);var r=this;return r.__filtered__&&(n>0||t<0)?new Fr(r):(n<0?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==e&&(r=(t=pa(t))<0?r.dropRight(-t):r.take(t-n)),r)},Fr.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Fr.prototype.toArray=function(){return this.take(h)},ye(Fr.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),u=Nr[i?\"take\"+(\"last\"==t?\"Right\":\"\"):t],o=i||/^find/.test(t);u&&(Nr.prototype[t]=function(){var t=this.__wrapped__,a=i?[1]:arguments,c=t instanceof Fr,f=a[0],s=c||$o(t),l=function(n){var t=u.apply(Nr,Et([n],a));return i&&h?t[0]:t};s&&r&&\"function\"==typeof f&&1!=f.length&&(c=s=!1);var h=this.__chain__,p=!!this.__actions__.length,v=o&&!h,d=c&&!p;if(!o&&s){t=d?t:new Fr(this);var g=n.apply(t,a);return g.__actions__.push({func:lo,args:[l],thisArg:e}),new Dr(g,h)}return v&&d?n.apply(this,a):(g=this.thru(l),v?i?g.value()[0]:g.value():g)})}),jt([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(n){var t=Mn[n],r=/^(?:push|sort|unshift)$/.test(n)?\"tap\":\"thru\",e=/^(?:pop|shift)$/.test(n);Nr.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var i=this.value();return t.apply($o(i)?i:[],n)}return this[r](function(r){return t.apply($o(r)?r:[],n)})}}),ye(Fr.prototype,function(n,t){var r=Nr[t];if(r){var e=r.name+\"\";Rn.call(Mr,e)||(Mr[e]=[]),Mr[e].push({name:t,func:r})}}),Mr[Ti(e,2).name]=[{name:\"wrapper\",func:e}],Fr.prototype.clone=function(){var n=new Fr(this.__wrapped__);return n.__actions__=Oi(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Oi(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Oi(this.__views__),n},Fr.prototype.reverse=function(){if(this.__filtered__){var n=new Fr(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},Fr.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,r=$o(n),e=t<0,i=r?n.length:0,u=function(n,t,r){for(var e=-1,i=r.length;++e<i;){var u=r[e],o=u.size;switch(u.type){case\"drop\":n+=o;break;case\"dropRight\":t-=o;break;case\"take\":t=_r(t,n+o);break;case\"takeRight\":n=gr(n,t-o)}}return{start:n,end:t}}(0,i,this.__views__),o=u.start,a=u.end,c=a-o,f=e?a:o-1,s=this.__iteratees__,l=s.length,h=0,p=_r(c,this.__takeCount__);if(!r||!e&&i==c&&p==c)return li(n,this.__actions__);var v=[];n:for(;c--&&h<p;){for(var d=-1,g=n[f+=t];++d<l;){var _=s[d],y=_.iteratee,m=_.type,b=y(g);if(2==m)g=b;else if(!b){if(1==m)continue n;break n}}v[h++]=g}return v},Nr.prototype.at=ho,Nr.prototype.chain=function(){return so(this)},Nr.prototype.commit=function(){return new Dr(this.value(),this.__chain__)},Nr.prototype.next=function(){this.__values__===e&&(this.__values__=la(this.value()));var n=this.__index__>=this.__values__.length;return{done:n,value:n?e:this.__values__[this.__index__++]}},Nr.prototype.plant=function(n){for(var t,r=this;r instanceof Br;){var i=Tu(r);i.__index__=0,i.__values__=e,t?u.__wrapped__=i:t=i;var u=i;r=r.__wrapped__}return u.__wrapped__=n,t},Nr.prototype.reverse=function(){var n=this.__wrapped__;if(n instanceof Fr){var t=n;return this.__actions__.length&&(t=new Fr(this)),(t=t.reverse()).__actions__.push({func:lo,args:[Qu],thisArg:e}),new Dr(t,this.__chain__)}return this.thru(Qu)},Nr.prototype.toJSON=Nr.prototype.valueOf=Nr.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},Nr.prototype.first=Nr.prototype.head,Qn&&(Nr.prototype[Qn]=function(){return this}),Nr}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(lt._=pr,define(function(){return pr})):pt?((pt.exports=pr)._=pr,ht._=pr):lt._=pr}.call(this)}},t={};function r(e){var i=t[e];if(void 0!==i)return i.exports;var u=t[e]={id:e,loaded:!1,exports:{}};return n[e].call(u.exports,u,u.exports,r),u.loaded=!0,u.exports}r.d=(n,t)=>{for(var e in t)r.o(t,e)&&!r.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(n){if(\"object\"==typeof window)return window}}(),r.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t),r.r=n=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(n,\"__esModule\",{value:!0})},r.nmd=n=>(n.paths=[],n.children||(n.children=[]),n);var e={};(()=>{\"use strict\";r.r(e),r.d(e,{createMonerisPaymentStrategy:()=>v});var n,t,i=r(9440);class u extends Error{constructor(n){var t;super(n||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class o extends u{constructor(n){super(n||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}!function(n){n[n.MissingBillingAddress=0]=\"MissingBillingAddress\",n[n.MissingCart=1]=\"MissingCart\",n[n.MissingCheckout=2]=\"MissingCheckout\",n[n.MissingConsignments=3]=\"MissingConsignments\",n[n.MissingCustomer=4]=\"MissingCustomer\",n[n.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",n[n.MissingOrder=6]=\"MissingOrder\",n[n.MissingOrderConfig=7]=\"MissingOrderConfig\",n[n.MissingOrderId=8]=\"MissingOrderId\",n[n.MissingPayment=9]=\"MissingPayment\",n[n.MissingPaymentId=10]=\"MissingPaymentId\",n[n.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",n[n.MissingPaymentMethod=12]=\"MissingPaymentMethod\",n[n.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",n[n.MissingPaymentStatus=14]=\"MissingPaymentStatus\",n[n.MissingPaymentToken=15]=\"MissingPaymentToken\",n[n.MissingShippingAddress=16]=\"MissingShippingAddress\"}(n||(n={}));class a extends u{constructor(t){super(function(t){switch(t){case n.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case n.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case n.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case n.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case n.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case n.MissingCheckoutConfig:case n.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case n.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case n.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case n.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case n.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case n.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case n.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class c extends o{constructor(n){let t=\"Unable to submit payment for the order because the payload is invalid.\";n&&(t=`${t} Make sure the following fields are provided correctly: ${n.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class f extends u{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(n){n[n.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",n[n.CustomerNotInitialized=1]=\"CustomerNotInitialized\",n[n.PaymentNotInitialized=2]=\"PaymentNotInitialized\",n[n.ShippingNotInitialized=3]=\"ShippingNotInitialized\",n[n.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(t||(t={}));class s extends u{constructor(n){super(function(n){switch(n){case t.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case t.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case t.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case t.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(n)),this.subtype=n,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var l=function(n,t,r,e){return new(r||(r=Promise))(function(i,u){function o(n){try{c(e.next(n))}catch(n){u(n)}}function a(n){try{c(e.throw(n))}catch(n){u(n)}}function c(n){var t;n.done?i(n.value):(t=n.value,t instanceof r?t:new r(function(n){n(t)})).then(o,a)}c((e=e.apply(n,t||[])).next())})};const h=\"moneris-payment-iframe\";class p{constructor(n){this.paymentIntegrationService=n}initialize(t){return l(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),{moneris:e,methodId:i}=t;if(!i)throw new o('Unable to initialize payment because \"methodId\" argument is not provided.');if(!e)throw new o('Unable to initialize payment because \"options.moneris\" argument is not provided.');this.initializeOptions=e;const{config:u,initializationData:c}=r.getPaymentMethodOrThrow(i);if(!(null==c?void 0:c.profileId))throw new a(n.MissingPaymentMethod);return e.form&&this.shouldShowTSVHostedForm(i)&&(this.hostedForm=yield this.mountCardVerificationfields(e.form)),this.iframe||(this.iframe=this.createIframe(e.containerId,c,!!u.testMode)),Promise.resolve()})}execute(n,t){return l(this,void 0,void 0,function*(){const{payment:r}=n,e=function(n,t){var r={};for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&t.indexOf(e)<0&&(r[e]=n[e]);if(null!=n&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(e=Object.getOwnPropertySymbols(n);i<e.length;i++)t.indexOf(e[i])<0&&Object.prototype.propertyIsEnumerable.call(n,e[i])&&(r[e[i]]=n[e[i]])}return r}(n,[\"payment\"]);if(!r)throw new c([\"payment\"]);const{isStoreCreditApplied:i}=this.paymentIntegrationService.getState().getCheckoutOrThrow();var u;if(i&&(yield this.paymentIntegrationService.applyStoreCredit(i)),yield this.paymentIntegrationService.submitOrder(e,t),!r.paymentData||(u=r.paymentData,!Boolean(u.instrumentId)))return this.executeWithCC(r);yield this.executeWithVaulted(r)})}finalize(){return Promise.reject(new f)}deinitialize(){return this.hostedForm&&this.hostedForm.detach(),this.windowEventListener&&(window.removeEventListener(\"message\",this.windowEventListener),this.windowEventListener=void 0),this.iframe&&this.iframe.parentNode&&(this.iframe.parentNode.removeChild(this.iframe),this.iframe=void 0),Promise.resolve()}executeWithCC(n){return l(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n.methodId).config.testMode,e=n.paymentData||{},i=\"object\"!=typeof(u=e)||null===u||void 0!==u.shouldSaveInstrument&&\"boolean\"!=typeof u.shouldSaveInstrument||void 0!==u.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof u.shouldSetAsDefaultInstrument?{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1}:e;var u;const{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a}=i,c=yield new Promise((n,e)=>{if(!this.iframe)throw new s(t.PaymentNotInitialized);const i=this.iframe.contentWindow;if(null===i)throw new s(t.PaymentNotInitialized);i.postMessage(\"tokenize\",this.monerisURL(!!r)),this.windowEventListener=t=>{if(\"string\"==typeof t.data&&t.origin===`https://${r?\"esqa\":\"www3\"}.moneris.com`)try{n(this.handleMonerisResponse(t))}catch(n){e(n)}},window.addEventListener(\"message\",this.windowEventListener)});void 0!==c&&(yield this.paymentIntegrationService.submitPayment({methodId:n.methodId,paymentData:{nonce:c,shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a}}))})}executeWithVaulted(n){return l(this,void 0,void 0,function*(){if(this.hostedForm){const t=this.hostedForm;return yield t.validate(),yield t.submit(n),this.paymentIntegrationService.loadCurrentOrder()}return this.paymentIntegrationService.submitPayment(n)})}shouldShowTSVHostedForm(n){return this.isHostedPaymentFormEnabled(n)&&this.isHostedFieldAvailable()}isHostedPaymentFormEnabled(n){const t=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n);return Boolean(t.config.isHostedFormEnabled)}isHostedFieldAvailable(){var n;const t=this.getInitializeOptions(),r=(0,i.omitBy)(null===(n=t.form)||void 0===n?void 0:n.fields,i.isEmpty);return!(0,i.isEmpty)(r)}getInitializeOptions(){if(!this.initializeOptions)throw new s(t.PaymentNotInitialized);return this.initializeOptions}mountCardVerificationfields(t){var r;return l(this,void 0,void 0,function*(){const e=null===(r=this.paymentIntegrationService.getState().getStoreConfig())||void 0===r?void 0:r.paymentSettings.bigpayBaseUrl;if(!e)throw new a(n.MissingCheckoutConfig);const i=this.paymentIntegrationService.createHostedForm(e,t);return yield i.attach(),i})}createIframe(n,t,r,e){const u=document.getElementById(n);if(!u)throw new o(\"Unable to create iframe without valid container ID.\");const a=document.createElement(\"iframe\"),c={id:t.profileId,pmmsg:!0,display_labels:1,enable_exp:1,enable_cvd:1,css_body:(null==e?void 0:e.cssBody)||\"font-family: Arial, Helvetica,sans-serif;background: transparent;\",css_textbox:(null==e?void 0:e.cssTextbox)||\"border-radius:4px;border: 2px solid rgb(00,00,00);width: 100%;font-weight: 600;padding: 8px 8px;outline: 0;\",css_textbox_pan:(null==e?void 0:e.cssTextboxCardNumber)||\"width: 240px;\",css_textbox_exp:(null==e?void 0:e.cssTextboxExpiryDate)||\"margin-bottom: 0;width: calc(30% - 12px);\",css_textbox_cvd:(null==e?void 0:e.cssTextboxCVV)||\"margin-bottom: 0;width: calc(30% - 12px);\",css_input_label:(null==e?void 0:e.cssInputLabel)||\"font-size: 10px;position: relative;top: 8px;left: 6px;background: rgb(255,255,255);padding: 3px 2px;color: rgb(66,66,66);font-weight: 600;z-index: 2;\",pan_label:t.creditCardLabel||\"Credit Card Number\",exp_label:t.expiryDateLabel||\"Expiration\",cvd_label:t.cvdLabel||\"CVD\"},f=(0,i.map)(c,(n,t)=>`${t}=${n}`).join(\"&\");return a.width=\"100%\",a.height=\"100%\",a.name=h,a.id=h,a.style.border=\"none\",a.src=`${this.monerisURL(r)}?${f}`,a.allow=\"payment\",u.appendChild(a),a}handleMonerisResponse(n){const t=JSON.parse(n.data);if(\"001\"!==t.responseCode[0])throw new Error(t.errorMessage);return t.dataKey}monerisURL(n){return`https://${n?\"esqa\":\"www3\"}.moneris.com/HPPtoken/index.php`}}const v=Object.assign(n=>new p(n),{resolveIds:[{id:\"moneris\"}]})})(),module.exports=e})();\n//# sourceMappingURL=moneris.js.map"
  },
  {
    "path": "dist/cjs/integrations/no-payment.js",
    "content": "(()=>{var n={9440(n,t,r){n=r.nmd(n),function(){var e,u=\"Expected a function\",i=\"__lodash_hash_undefined__\",o=\"__lodash_placeholder__\",f=32,a=128,c=1/0,l=9007199254740991,s=NaN,h=4294967295,p=[[\"ary\",a],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",f],[\"partialRight\",64],[\"rearg\",256]],v=\"[object Arguments]\",_=\"[object Array]\",g=\"[object Boolean]\",y=\"[object Date]\",d=\"[object Error]\",b=\"[object Function]\",w=\"[object GeneratorFunction]\",m=\"[object Map]\",x=\"[object Number]\",j=\"[object Object]\",A=\"[object Promise]\",O=\"[object RegExp]\",k=\"[object Set]\",I=\"[object String]\",S=\"[object Symbol]\",z=\"[object WeakMap]\",E=\"[object ArrayBuffer]\",R=\"[object DataView]\",W=\"[object Float32Array]\",L=\"[object Float64Array]\",T=\"[object Int8Array]\",C=\"[object Int16Array]\",U=\"[object Int32Array]\",B=\"[object Uint8Array]\",P=\"[object Uint8ClampedArray]\",$=\"[object Uint16Array]\",D=\"[object Uint32Array]\",M=/\\b__p \\+= '';/g,F=/\\b(__p \\+=) '' \\+/g,N=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,q=/&(?:amp|lt|gt|quot|#39);/g,Z=/[&<>\"']/g,K=RegExp(q.source),V=RegExp(Z.source),G=/<%-([\\s\\S]+?)%>/g,H=/<%([\\s\\S]+?)%>/g,J=/<%=([\\s\\S]+?)%>/g,Y=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,nn=/[\\\\^$.*+?()[\\]{}|]/g,tn=RegExp(nn.source),rn=/^\\s+/,en=/\\s/,un=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,on=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,fn=/,? & /,an=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,cn=/[()=,{}\\[\\]\\/\\s]/,ln=/\\\\(\\\\)?/g,sn=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,hn=/\\w*$/,pn=/^[-+]0x[0-9a-f]+$/i,vn=/^0b[01]+$/i,_n=/^\\[object .+?Constructor\\]$/,gn=/^0o[0-7]+$/i,yn=/^(?:0|[1-9]\\d*)$/,dn=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,bn=/($^)/,wn=/['\\n\\r\\u2028\\u2029\\\\]/g,mn=\"\\\\ud800-\\\\udfff\",xn=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",jn=\"\\\\u2700-\\\\u27bf\",An=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",On=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",kn=\"\\\\ufe0e\\\\ufe0f\",In=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Sn=\"[\"+mn+\"]\",zn=\"[\"+In+\"]\",En=\"[\"+xn+\"]\",Rn=\"\\\\d+\",Wn=\"[\"+jn+\"]\",Ln=\"[\"+An+\"]\",Tn=\"[^\"+mn+In+Rn+jn+An+On+\"]\",Cn=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Un=\"[^\"+mn+\"]\",Bn=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Pn=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",$n=\"[\"+On+\"]\",Dn=\"\\\\u200d\",Mn=\"(?:\"+Ln+\"|\"+Tn+\")\",Fn=\"(?:\"+$n+\"|\"+Tn+\")\",Nn=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",qn=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Zn=\"(?:\"+En+\"|\"+Cn+\")?\",Kn=\"[\"+kn+\"]?\",Vn=Kn+Zn+\"(?:\"+Dn+\"(?:\"+[Un,Bn,Pn].join(\"|\")+\")\"+Kn+Zn+\")*\",Gn=\"(?:\"+[Wn,Bn,Pn].join(\"|\")+\")\"+Vn,Hn=\"(?:\"+[Un+En+\"?\",En,Bn,Pn,Sn].join(\"|\")+\")\",Jn=RegExp(\"['’]\",\"g\"),Yn=RegExp(En,\"g\"),Qn=RegExp(Cn+\"(?=\"+Cn+\")|\"+Hn+Vn,\"g\"),Xn=RegExp([$n+\"?\"+Ln+\"+\"+Nn+\"(?=\"+[zn,$n,\"$\"].join(\"|\")+\")\",Fn+\"+\"+qn+\"(?=\"+[zn,$n+Mn,\"$\"].join(\"|\")+\")\",$n+\"?\"+Mn+\"+\"+Nn,$n+\"+\"+qn,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Rn,Gn].join(\"|\"),\"g\"),nt=RegExp(\"[\"+Dn+mn+xn+kn+\"]\"),tt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,rt=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],et=-1,ut={};ut[W]=ut[L]=ut[T]=ut[C]=ut[U]=ut[B]=ut[P]=ut[$]=ut[D]=!0,ut[v]=ut[_]=ut[E]=ut[g]=ut[R]=ut[y]=ut[d]=ut[b]=ut[m]=ut[x]=ut[j]=ut[O]=ut[k]=ut[I]=ut[z]=!1;var it={};it[v]=it[_]=it[E]=it[R]=it[g]=it[y]=it[W]=it[L]=it[T]=it[C]=it[U]=it[m]=it[x]=it[j]=it[O]=it[k]=it[I]=it[S]=it[B]=it[P]=it[$]=it[D]=!0,it[d]=it[b]=it[z]=!1;var ot={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ft=parseFloat,at=parseInt,ct=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,lt=\"object\"==typeof self&&self&&self.Object===Object&&self,st=ct||lt||Function(\"return this\")(),ht=t&&!t.nodeType&&t,pt=ht&&n&&!n.nodeType&&n,vt=pt&&pt.exports===ht,_t=vt&&ct.process,gt=function(){try{return pt&&pt.require&&pt.require(\"util\").types||_t&&_t.binding&&_t.binding(\"util\")}catch(n){}}(),yt=gt&&gt.isArrayBuffer,dt=gt&&gt.isDate,bt=gt&&gt.isMap,wt=gt&&gt.isRegExp,mt=gt&&gt.isSet,xt=gt&&gt.isTypedArray;function jt(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function At(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function Ot(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&!1!==t(n[r],r,n););return n}function kt(n,t){for(var r=null==n?0:n.length;r--&&!1!==t(n[r],r,n););return n}function It(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return!1;return!0}function St(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function zt(n,t){return!(null==n||!n.length)&&$t(n,t,0)>-1}function Et(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return!0;return!1}function Rt(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function Wt(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function Lt(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);return r}function Tt(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function Ct(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return!0;return!1}var Ut=Nt(\"length\");function Bt(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,!1}),e}function Pt(n,t,r,e){for(var u=n.length,i=r+(e?1:-1);e?i--:++i<u;)if(t(n[i],i,n))return i;return-1}function $t(n,t,r){return t==t?function(n,t,r){for(var e=r-1,u=n.length;++e<u;)if(n[e]===t)return e;return-1}(n,t,r):Pt(n,Mt,r)}function Dt(n,t,r,e){for(var u=r-1,i=n.length;++u<i;)if(e(n[u],t))return u;return-1}function Mt(n){return n!=n}function Ft(n,t){var r=null==n?0:n.length;return r?Kt(n,t)/r:s}function Nt(n){return function(t){return null==t?e:t[n]}}function qt(n){return function(t){return null==n?e:n[t]}}function Zt(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=!1,n):t(r,n,u,i)}),r}function Kt(n,t){for(var r,u=-1,i=n.length;++u<i;){var o=t(n[u]);o!==e&&(r=r===e?o:r+o)}return r}function Vt(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function Gt(n){return n?n.slice(0,sr(n)+1).replace(rn,\"\"):n}function Ht(n){return function(t){return n(t)}}function Jt(n,t){return Rt(t,function(t){return n[t]})}function Yt(n,t){return n.has(t)}function Qt(n,t){for(var r=-1,e=n.length;++r<e&&$t(t,n[r],0)>-1;);return r}function Xt(n,t){for(var r=n.length;r--&&$t(t,n[r],0)>-1;);return r}var nr=qt({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tr=qt({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function rr(n){return\"\\\\\"+ot[n]}function er(n){return nt.test(n)}function ur(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function ir(n,t){return function(r){return n(t(r))}}function or(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var f=n[r];f!==t&&f!==o||(n[r]=o,i[u++]=r)}return i}function fr(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=n}),r}function ar(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function cr(n){return er(n)?function(n){for(var t=Qn.lastIndex=0;Qn.test(n);)++t;return t}(n):Ut(n)}function lr(n){return er(n)?function(n){return n.match(Qn)||[]}(n):function(n){return n.split(\"\")}(n)}function sr(n){for(var t=n.length;t--&&en.test(n.charAt(t)););return t}var hr=qt({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pr=function n(t){var r,en=(t=null==t?st:pr.defaults(st.Object(),t,pr.pick(st,rt))).Array,mn=t.Date,xn=t.Error,jn=t.Function,An=t.Math,On=t.Object,kn=t.RegExp,In=t.String,Sn=t.TypeError,zn=en.prototype,En=jn.prototype,Rn=On.prototype,Wn=t[\"__core-js_shared__\"],Ln=En.toString,Tn=Rn.hasOwnProperty,Cn=0,Un=(r=/[^.]+$/.exec(Wn&&Wn.keys&&Wn.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",Bn=Rn.toString,Pn=Ln.call(On),$n=st._,Dn=kn(\"^\"+Ln.call(Tn).replace(nn,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Mn=vt?t.Buffer:e,Fn=t.Symbol,Nn=t.Uint8Array,qn=Mn?Mn.allocUnsafe:e,Zn=ir(On.getPrototypeOf,On),Kn=On.create,Vn=Rn.propertyIsEnumerable,Gn=zn.splice,Hn=Fn?Fn.isConcatSpreadable:e,Qn=Fn?Fn.iterator:e,nt=Fn?Fn.toStringTag:e,ot=function(){try{var n=ai(On,\"defineProperty\");return n({},\"\",{}),n}catch(n){}}(),ct=t.clearTimeout!==st.clearTimeout&&t.clearTimeout,lt=mn&&mn.now!==st.Date.now&&mn.now,ht=t.setTimeout!==st.setTimeout&&t.setTimeout,pt=An.ceil,_t=An.floor,gt=On.getOwnPropertySymbols,Ut=Mn?Mn.isBuffer:e,qt=t.isFinite,vr=zn.join,_r=ir(On.keys,On),gr=An.max,yr=An.min,dr=mn.now,br=t.parseInt,wr=An.random,mr=zn.reverse,xr=ai(t,\"DataView\"),jr=ai(t,\"Map\"),Ar=ai(t,\"Promise\"),Or=ai(t,\"Set\"),kr=ai(t,\"WeakMap\"),Ir=ai(On,\"create\"),Sr=kr&&new kr,zr={},Er=Ui(xr),Rr=Ui(jr),Wr=Ui(Ar),Lr=Ui(Or),Tr=Ui(kr),Cr=Fn?Fn.prototype:e,Ur=Cr?Cr.valueOf:e,Br=Cr?Cr.toString:e;function Pr(n){if(nf(n)&&!No(n)&&!(n instanceof Fr)){if(n instanceof Mr)return n;if(Tn.call(n,\"__wrapped__\"))return Bi(n)}return new Mr(n)}var $r=function(){function n(){}return function(t){if(!Xo(t))return{};if(Kn)return Kn(t);n.prototype=t;var r=new n;return n.prototype=e,r}}();function Dr(){}function Mr(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=e}function Fr(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function Nr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function qr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Zr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Kr(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new Zr;++t<r;)this.add(n[t])}function Vr(n){var t=this.__data__=new qr(n);this.size=t.size}function Gr(n,t){var r=No(n),e=!r&&Fo(n),u=!r&&!e&&Vo(n),i=!r&&!e&&!u&&cf(n),o=r||e||u||i,f=o?Vt(n.length,In):[],a=f.length;for(var c in n)!t&&!Tn.call(n,c)||o&&(\"length\"==c||u&&(\"offset\"==c||\"parent\"==c)||i&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||_i(c,a))||f.push(c);return f}function Hr(n){var t=n.length;return t?n[Ze(0,t-1)]:e}function Jr(n,t){return Ri(ku(n),ie(t,0,n.length))}function Yr(n){return Ri(ku(n))}function Qr(n,t,r){(r!==e&&!$o(n[t],r)||r===e&&!(t in n))&&ee(n,t,r)}function Xr(n,t,r){var u=n[t];Tn.call(n,t)&&$o(u,r)&&(r!==e||t in n)||ee(n,t,r)}function ne(n,t){for(var r=n.length;r--;)if($o(n[r][0],t))return r;return-1}function te(n,t,r,e){return le(n,function(n,u,i){t(e,n,r(n),i)}),e}function re(n,t){return n&&Iu(t,Rf(t),n)}function ee(n,t,r){\"__proto__\"==t&&ot?ot(n,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):n[t]=r}function ue(n,t){for(var r=-1,u=t.length,i=en(u),o=null==n;++r<u;)i[r]=o?e:kf(n,t[r]);return i}function ie(n,t,r){return n==n&&(r!==e&&(n=n<=r?n:r),t!==e&&(n=n>=t?n:t)),n}function oe(n,t,r,u,i,o){var f,a=1&t,c=2&t,l=4&t;if(r&&(f=i?r(n,u,i,o):r(n)),f!==e)return f;if(!Xo(n))return n;var s=No(n);if(s){if(f=function(n){var t=n.length,r=new n.constructor(t);return t&&\"string\"==typeof n[0]&&Tn.call(n,\"index\")&&(r.index=n.index,r.input=n.input),r}(n),!a)return ku(n,f)}else{var h=si(n),p=h==b||h==w;if(Vo(n))return wu(n,a);if(h==j||h==v||p&&!i){if(f=c||p?{}:pi(n),!a)return c?function(n,t){return Iu(n,li(n),t)}(n,function(n,t){return n&&Iu(t,Wf(t),n)}(f,n)):function(n,t){return Iu(n,ci(n),t)}(n,re(f,n))}else{if(!it[h])return i?n:{};f=function(n,t,r){var e,u=n.constructor;switch(t){case E:return mu(n);case g:case y:return new u(+n);case R:return function(n,t){var r=t?mu(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.byteLength)}(n,r);case W:case L:case T:case C:case U:case B:case P:case $:case D:return xu(n,r);case m:return new u;case x:case I:return new u(n);case O:return function(n){var t=new n.constructor(n.source,hn.exec(n));return t.lastIndex=n.lastIndex,t}(n);case k:return new u;case S:return e=n,Ur?On(Ur.call(e)):{}}}(n,h,a)}}o||(o=new Vr);var _=o.get(n);if(_)return _;o.set(n,f),of(n)?n.forEach(function(e){f.add(oe(e,t,r,e,n,o))}):tf(n)&&n.forEach(function(e,u){f.set(u,oe(e,t,r,u,n,o))});var d=s?e:(l?c?ti:ni:c?Wf:Rf)(n);return Ot(d||n,function(e,u){d&&(e=n[u=e]),Xr(f,u,oe(e,t,r,u,n,o))}),f}function fe(n,t,r){var u=r.length;if(null==n)return!u;for(n=On(n);u--;){var i=r[u],o=t[i],f=n[i];if(f===e&&!(i in n)||!o(f))return!1}return!0}function ae(n,t,r){if(\"function\"!=typeof n)throw new Sn(u);return Ii(function(){n.apply(e,r)},t)}function ce(n,t,r,e){var u=-1,i=zt,o=!0,f=n.length,a=[],c=t.length;if(!f)return a;r&&(t=Rt(t,Ht(r))),e?(i=Et,o=!1):t.length>=200&&(i=Yt,o=!1,t=new Kr(t));n:for(;++u<f;){var l=n[u],s=null==r?l:r(l);if(l=e||0!==l?l:0,o&&s==s){for(var h=c;h--;)if(t[h]===s)continue n;a.push(l)}else i(t,s,e)||a.push(l)}return a}Pr.templateSettings={escape:G,evaluate:H,interpolate:J,variable:\"\",imports:{_:Pr}},Pr.prototype=Dr.prototype,Pr.prototype.constructor=Pr,Mr.prototype=$r(Dr.prototype),Mr.prototype.constructor=Mr,Fr.prototype=$r(Dr.prototype),Fr.prototype.constructor=Fr,Nr.prototype.clear=function(){this.__data__=Ir?Ir(null):{},this.size=0},Nr.prototype.delete=function(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t},Nr.prototype.get=function(n){var t=this.__data__;if(Ir){var r=t[n];return r===i?e:r}return Tn.call(t,n)?t[n]:e},Nr.prototype.has=function(n){var t=this.__data__;return Ir?t[n]!==e:Tn.call(t,n)},Nr.prototype.set=function(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=Ir&&t===e?i:t,this},qr.prototype.clear=function(){this.__data__=[],this.size=0},qr.prototype.delete=function(n){var t=this.__data__,r=ne(t,n);return!(r<0||(r==t.length-1?t.pop():Gn.call(t,r,1),--this.size,0))},qr.prototype.get=function(n){var t=this.__data__,r=ne(t,n);return r<0?e:t[r][1]},qr.prototype.has=function(n){return ne(this.__data__,n)>-1},qr.prototype.set=function(n,t){var r=this.__data__,e=ne(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this},Zr.prototype.clear=function(){this.size=0,this.__data__={hash:new Nr,map:new(jr||qr),string:new Nr}},Zr.prototype.delete=function(n){var t=oi(this,n).delete(n);return this.size-=t?1:0,t},Zr.prototype.get=function(n){return oi(this,n).get(n)},Zr.prototype.has=function(n){return oi(this,n).has(n)},Zr.prototype.set=function(n,t){var r=oi(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},Kr.prototype.add=Kr.prototype.push=function(n){return this.__data__.set(n,i),this},Kr.prototype.has=function(n){return this.__data__.has(n)},Vr.prototype.clear=function(){this.__data__=new qr,this.size=0},Vr.prototype.delete=function(n){var t=this.__data__,r=t.delete(n);return this.size=t.size,r},Vr.prototype.get=function(n){return this.__data__.get(n)},Vr.prototype.has=function(n){return this.__data__.has(n)},Vr.prototype.set=function(n,t){var r=this.__data__;if(r instanceof qr){var e=r.__data__;if(!jr||e.length<199)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new Zr(e)}return r.set(n,t),this.size=r.size,this};var le=Eu(de),se=Eu(be,!0);function he(n,t){var r=!0;return le(n,function(n,e,u){return r=!!t(n,e,u)}),r}function pe(n,t,r){for(var u=-1,i=n.length;++u<i;){var o=n[u],f=t(o);if(null!=f&&(a===e?f==f&&!af(f):r(f,a)))var a=f,c=o}return c}function ve(n,t){var r=[];return le(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function _e(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=vi),u||(u=[]);++i<o;){var f=n[i];t>0&&r(f)?t>1?_e(f,t-1,r,e,u):Wt(u,f):e||(u[u.length]=f)}return u}var ge=Ru(),ye=Ru(!0);function de(n,t){return n&&ge(n,t,Rf)}function be(n,t){return n&&ye(n,t,Rf)}function we(n,t){return St(t,function(t){return Jo(n[t])})}function me(n,t){for(var r=0,u=(t=gu(t,n)).length;null!=n&&r<u;)n=n[Ci(t[r++])];return r&&r==u?n:e}function xe(n,t,r){var e=t(n);return No(n)?e:Wt(e,r(n))}function je(n){return null==n?n===e?\"[object Undefined]\":\"[object Null]\":nt&&nt in On(n)?function(n){var t=Tn.call(n,nt),r=n[nt];try{n[nt]=e;var u=!0}catch(n){}var i=Bn.call(n);return u&&(t?n[nt]=r:delete n[nt]),i}(n):function(n){return Bn.call(n)}(n)}function Ae(n,t){return n>t}function Oe(n,t){return null!=n&&Tn.call(n,t)}function ke(n,t){return null!=n&&t in On(n)}function Ie(n,t,r){for(var u=r?Et:zt,i=n[0].length,o=n.length,f=o,a=en(o),c=1/0,l=[];f--;){var s=n[f];f&&t&&(s=Rt(s,Ht(t))),c=yr(s.length,c),a[f]=!r&&(t||i>=120&&s.length>=120)?new Kr(f&&s):e}s=n[0];var h=-1,p=a[0];n:for(;++h<i&&l.length<c;){var v=s[h],_=t?t(v):v;if(v=r||0!==v?v:0,!(p?Yt(p,_):u(l,_,r))){for(f=o;--f;){var g=a[f];if(!(g?Yt(g,_):u(n[f],_,r)))continue n}p&&p.push(_),l.push(v)}}return l}function Se(n,t,r){var u=null==(n=Ai(n,t=gu(t,n)))?n:n[Ci(Gi(t))];return null==u?e:jt(u,n,r)}function ze(n){return nf(n)&&je(n)==v}function Ee(n,t,r,u,i){return n===t||(null==n||null==t||!nf(n)&&!nf(t)?n!=n&&t!=t:function(n,t,r,u,i,o){var f=No(n),a=No(t),c=f?_:si(n),l=a?_:si(t),s=(c=c==v?j:c)==j,h=(l=l==v?j:l)==j,p=c==l;if(p&&Vo(n)){if(!Vo(t))return!1;f=!0,s=!1}if(p&&!s)return o||(o=new Vr),f||cf(n)?Qu(n,t,r,u,i,o):function(n,t,r,e,u,i,o){switch(r){case R:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1;n=n.buffer,t=t.buffer;case E:return!(n.byteLength!=t.byteLength||!i(new Nn(n),new Nn(t)));case g:case y:case x:return $o(+n,+t);case d:return n.name==t.name&&n.message==t.message;case O:case I:return n==t+\"\";case m:var f=ur;case k:var a=1&e;if(f||(f=fr),n.size!=t.size&&!a)return!1;var c=o.get(n);if(c)return c==t;e|=2,o.set(n,t);var l=Qu(f(n),f(t),e,u,i,o);return o.delete(n),l;case S:if(Ur)return Ur.call(n)==Ur.call(t)}return!1}(n,t,c,r,u,i,o);if(!(1&r)){var b=s&&Tn.call(n,\"__wrapped__\"),w=h&&Tn.call(t,\"__wrapped__\");if(b||w){var A=b?n.value():n,z=w?t.value():t;return o||(o=new Vr),i(A,z,r,u,o)}}return!!p&&(o||(o=new Vr),function(n,t,r,u,i,o){var f=1&r,a=ni(n),c=a.length;if(c!=ni(t).length&&!f)return!1;for(var l=c;l--;){var s=a[l];if(!(f?s in t:Tn.call(t,s)))return!1}var h=o.get(n),p=o.get(t);if(h&&p)return h==t&&p==n;var v=!0;o.set(n,t),o.set(t,n);for(var _=f;++l<c;){var g=n[s=a[l]],y=t[s];if(u)var d=f?u(y,g,s,t,n,o):u(g,y,s,n,t,o);if(!(d===e?g===y||i(g,y,r,u,o):d)){v=!1;break}_||(_=\"constructor\"==s)}if(v&&!_){var b=n.constructor,w=t.constructor;b==w||!(\"constructor\"in n)||!(\"constructor\"in t)||\"function\"==typeof b&&b instanceof b&&\"function\"==typeof w&&w instanceof w||(v=!1)}return o.delete(n),o.delete(t),v}(n,t,r,u,i,o))}(n,t,r,u,Ee,i))}function Re(n,t,r,u){var i=r.length,o=i,f=!u;if(null==n)return!o;for(n=On(n);i--;){var a=r[i];if(f&&a[2]?a[1]!==n[a[0]]:!(a[0]in n))return!1}for(;++i<o;){var c=(a=r[i])[0],l=n[c],s=a[1];if(f&&a[2]){if(l===e&&!(c in n))return!1}else{var h=new Vr;if(u)var p=u(l,s,c,n,t,h);if(!(p===e?Ee(s,l,3,u,h):p))return!1}}return!0}function We(n){return!(!Xo(n)||(t=n,Un&&Un in t))&&(Jo(n)?Dn:_n).test(Ui(n));var t}function Le(n){return\"function\"==typeof n?n:null==n?ea:\"object\"==typeof n?No(n)?Pe(n[0],n[1]):Be(n):ha(n)}function Te(n){if(!wi(n))return _r(n);var t=[];for(var r in On(n))Tn.call(n,r)&&\"constructor\"!=r&&t.push(r);return t}function Ce(n,t){return n<t}function Ue(n,t){var r=-1,e=Zo(n)?en(n.length):[];return le(n,function(n,u,i){e[++r]=t(n,u,i)}),e}function Be(n){var t=fi(n);return 1==t.length&&t[0][2]?xi(t[0][0],t[0][1]):function(r){return r===n||Re(r,n,t)}}function Pe(n,t){return yi(n)&&mi(t)?xi(Ci(n),t):function(r){var u=kf(r,n);return u===e&&u===t?If(r,n):Ee(t,u,3)}}function $e(n,t,r,u,i){n!==t&&ge(t,function(o,f){if(i||(i=new Vr),Xo(o))!function(n,t,r,u,i,o,f){var a=Oi(n,r),c=Oi(t,r),l=f.get(c);if(l)Qr(n,r,l);else{var s=o?o(a,c,r+\"\",n,t,f):e,h=s===e;if(h){var p=No(c),v=!p&&Vo(c),_=!p&&!v&&cf(c);s=c,p||v||_?No(a)?s=a:Ko(a)?s=ku(a):v?(h=!1,s=wu(c,!0)):_?(h=!1,s=xu(c,!0)):s=[]:ef(c)||Fo(c)?(s=a,Fo(a)?s=yf(a):Xo(a)&&!Jo(a)||(s=pi(c))):h=!1}h&&(f.set(c,s),i(s,c,u,o,f),f.delete(c)),Qr(n,r,s)}}(n,t,f,r,$e,u,i);else{var a=u?u(Oi(n,f),o,f+\"\",n,t,i):e;a===e&&(a=o),Qr(n,f,a)}},Wf)}function De(n,t){var r=n.length;if(r)return _i(t+=t<0?r:0,r)?n[t]:e}function Me(n,t,r){t=t.length?Rt(t,function(n){return No(n)?function(t){return me(t,1===n.length?n[0]:n)}:n}):[ea];var e=-1;t=Rt(t,Ht(ii()));var u=Ue(n,function(n,r,u){var i=Rt(t,function(t){return t(n)});return{criteria:i,index:++e,value:n}});return function(n){var t=n.length;for(n.sort(function(n,t){return function(n,t,r){for(var e=-1,u=n.criteria,i=t.criteria,o=u.length,f=r.length;++e<o;){var a=ju(u[e],i[e]);if(a)return e>=f?a:a*(\"desc\"==r[e]?-1:1)}return n.index-t.index}(n,t,r)});t--;)n[t]=n[t].value;return n}(u)}function Fe(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],f=me(n,o);r(f,o)&&Je(i,gu(o,n),f)}return i}function Ne(n,t,r,e){var u=e?Dt:$t,i=-1,o=t.length,f=n;for(n===t&&(t=ku(t)),r&&(f=Rt(n,Ht(r)));++i<o;)for(var a=0,c=t[i],l=r?r(c):c;(a=u(f,l,a,e))>-1;)f!==n&&Gn.call(f,a,1),Gn.call(n,a,1);return n}function qe(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(r==e||u!==i){var i=u;_i(u)?Gn.call(n,u,1):au(n,u)}}return n}function Ze(n,t){return n+_t(wr()*(t-n+1))}function Ke(n,t){var r=\"\";if(!n||t<1||t>l)return r;do{t%2&&(r+=n),(t=_t(t/2))&&(n+=n)}while(t);return r}function Ve(n,t){return Si(ji(n,t,ea),n+\"\")}function Ge(n){return Hr(Df(n))}function He(n,t){var r=Df(n);return Ri(r,ie(t,0,r.length))}function Je(n,t,r,u){if(!Xo(n))return n;for(var i=-1,o=(t=gu(t,n)).length,f=o-1,a=n;null!=a&&++i<o;){var c=Ci(t[i]),l=r;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return n;if(i!=f){var s=a[c];(l=u?u(s,c,a):e)===e&&(l=Xo(s)?s:_i(t[i+1])?[]:{})}Xr(a,c,l),a=a[c]}return n}var Ye=Sr?function(n,t){return Sr.set(n,t),n}:ea,Qe=ot?function(n,t){return ot(n,\"toString\",{configurable:!0,enumerable:!1,value:na(t),writable:!0})}:ea;function Xe(n){return Ri(Df(n))}function nu(n,t,r){var e=-1,u=n.length;t<0&&(t=-t>u?0:u+t),(r=r>u?u:r)<0&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0;for(var i=en(u);++e<u;)i[e]=n[e+t];return i}function tu(n,t){var r;return le(n,function(n,e,u){return!(r=t(n,e,u))}),!!r}function ru(n,t,r){var e=0,u=null==n?e:n.length;if(\"number\"==typeof t&&t==t&&u<=2147483647){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!af(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return eu(n,t,ea,r)}function eu(n,t,r,u){var i=0,o=null==n?0:n.length;if(0===o)return 0;for(var f=(t=r(t))!=t,a=null===t,c=af(t),l=t===e;i<o;){var s=_t((i+o)/2),h=r(n[s]),p=h!==e,v=null===h,_=h==h,g=af(h);if(f)var y=u||_;else y=l?_&&(u||p):a?_&&p&&(u||!v):c?_&&p&&!v&&(u||!g):!v&&!g&&(u?h<=t:h<t);y?i=s+1:o=s}return yr(o,4294967294)}function uu(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r],f=t?t(o):o;if(!r||!$o(f,a)){var a=f;i[u++]=0===o?0:o}}return i}function iu(n){return\"number\"==typeof n?n:af(n)?s:+n}function ou(n){if(\"string\"==typeof n)return n;if(No(n))return Rt(n,ou)+\"\";if(af(n))return Br?Br.call(n):\"\";var t=n+\"\";return\"0\"==t&&1/n==-1/0?\"-0\":t}function fu(n,t,r){var e=-1,u=zt,i=n.length,o=!0,f=[],a=f;if(r)o=!1,u=Et;else if(i>=200){var c=t?null:Ku(n);if(c)return fr(c);o=!1,u=Yt,a=new Kr}else a=t?[]:f;n:for(;++e<i;){var l=n[e],s=t?t(l):l;if(l=r||0!==l?l:0,o&&s==s){for(var h=a.length;h--;)if(a[h]===s)continue n;t&&a.push(s),f.push(l)}else u(a,s,r)||(a!==f&&a.push(s),f.push(l))}return f}function au(n,t){var r=-1,e=(t=gu(t,n)).length;if(!e)return!0;for(;++r<e;){var u=Ci(t[r]);if(\"__proto__\"===u&&!Tn.call(n,\"__proto__\"))return!1;if((\"constructor\"===u||\"prototype\"===u)&&r<e-1)return!1}var i=Ai(n,t);return null==i||delete i[Ci(Gi(t))]}function cu(n,t,r,e){return Je(n,t,r(me(n,t)),e)}function lu(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?nu(n,e?0:i,e?i+1:u):nu(n,e?i+1:0,e?u:i)}function su(n,t){var r=n;return r instanceof Fr&&(r=r.value()),Lt(t,function(n,t){return t.func.apply(t.thisArg,Wt([n],t.args))},r)}function hu(n,t,r){var e=n.length;if(e<2)return e?fu(n[0]):[];for(var u=-1,i=en(e);++u<e;)for(var o=n[u],f=-1;++f<e;)f!=u&&(i[u]=ce(i[u]||o,n[f],t,r));return fu(_e(i,1),t,r)}function pu(n,t,r){for(var u=-1,i=n.length,o=t.length,f={};++u<i;){var a=u<o?t[u]:e;r(f,n[u],a)}return f}function vu(n){return Ko(n)?n:[]}function _u(n){return\"function\"==typeof n?n:ea}function gu(n,t){return No(n)?n:yi(n,t)?[n]:Ti(df(n))}var yu=Ve;function du(n,t,r){var u=n.length;return r=r===e?u:r,!t&&r>=u?n:nu(n,t,r)}var bu=ct||function(n){return st.clearTimeout(n)};function wu(n,t){if(t)return n.slice();var r=n.length,e=qn?qn(r):new n.constructor(r);return n.copy(e),e}function mu(n){var t=new n.constructor(n.byteLength);return new Nn(t).set(new Nn(n)),t}function xu(n,t){var r=t?mu(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.length)}function ju(n,t){if(n!==t){var r=n!==e,u=null===n,i=n==n,o=af(n),f=t!==e,a=null===t,c=t==t,l=af(t);if(!a&&!l&&!o&&n>t||o&&f&&c&&!a&&!l||u&&f&&c||!r&&c||!i)return 1;if(!u&&!o&&!l&&n<t||l&&r&&i&&!u&&!o||a&&r&&i||!f&&i||!c)return-1}return 0}function Au(n,t,r,e){for(var u=-1,i=n.length,o=r.length,f=-1,a=t.length,c=gr(i-o,0),l=en(a+c),s=!e;++f<a;)l[f]=t[f];for(;++u<o;)(s||u<i)&&(l[r[u]]=n[u]);for(;c--;)l[f++]=n[u++];return l}function Ou(n,t,r,e){for(var u=-1,i=n.length,o=-1,f=r.length,a=-1,c=t.length,l=gr(i-f,0),s=en(l+c),h=!e;++u<l;)s[u]=n[u];for(var p=u;++a<c;)s[p+a]=t[a];for(;++o<f;)(h||u<i)&&(s[p+r[o]]=n[u++]);return s}function ku(n,t){var r=-1,e=n.length;for(t||(t=en(e));++r<e;)t[r]=n[r];return t}function Iu(n,t,r,u){var i=!r;r||(r={});for(var o=-1,f=t.length;++o<f;){var a=t[o],c=u?u(r[a],n[a],a,r,n):e;c===e&&(c=n[a]),i?ee(r,a,c):Xr(r,a,c)}return r}function Su(n,t){return function(r,e){var u=No(r)?At:te,i=t?t():{};return u(r,n,ii(e,2),i)}}function zu(n){return Ve(function(t,r){var u=-1,i=r.length,o=i>1?r[i-1]:e,f=i>2?r[2]:e;for(o=n.length>3&&\"function\"==typeof o?(i--,o):e,f&&gi(r[0],r[1],f)&&(o=i<3?e:o,i=1),t=On(t);++u<i;){var a=r[u];a&&n(t,a,u,o)}return t})}function Eu(n,t){return function(r,e){if(null==r)return r;if(!Zo(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=On(r);(t?i--:++i<u)&&!1!==e(o[i],i,o););return r}}function Ru(n){return function(t,r,e){for(var u=-1,i=On(t),o=e(t),f=o.length;f--;){var a=o[n?f:++u];if(!1===r(i[a],a,i))break}return t}}function Wu(n){return function(t){var r=er(t=df(t))?lr(t):e,u=r?r[0]:t.charAt(0),i=r?du(r,1).join(\"\"):t.slice(1);return u[n]()+i}}function Lu(n){return function(t){return Lt(Yf(Nf(t).replace(Jn,\"\")),n,\"\")}}function Tu(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=$r(n.prototype),e=n.apply(r,t);return Xo(e)?e:r}}function Cu(n){return function(t,r,u){var i=On(t);if(!Zo(t)){var o=ii(r,3);t=Rf(t),r=function(n){return o(i[n],n,i)}}var f=n(t,r,u);return f>-1?i[o?t[f]:f]:e}}function Uu(n){return Xu(function(t){var r=t.length,i=r,o=Mr.prototype.thru;for(n&&t.reverse();i--;){var f=t[i];if(\"function\"!=typeof f)throw new Sn(u);if(o&&!a&&\"wrapper\"==ei(f))var a=new Mr([],!0)}for(i=a?i:r;++i<r;){var c=ei(f=t[i]),l=\"wrapper\"==c?ri(f):e;a=l&&di(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?a[ei(l[0])].apply(a,l[3]):1==f.length&&di(f)?a[c]():a.thru(f)}return function(){var n=arguments,e=n[0];if(a&&1==n.length&&No(e))return a.plant(e).value();for(var u=0,i=r?t[u].apply(this,n):e;++u<r;)i=t[u].call(this,i);return i}})}function Bu(n,t,r,u,i,o,f,c,l,s){var h=t&a,p=1&t,v=2&t,_=24&t,g=512&t,y=v?e:Tu(n);return function a(){for(var d=arguments.length,b=en(d),w=d;w--;)b[w]=arguments[w];if(_)var m=ui(a),x=function(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&++e;return e}(b,m);if(u&&(b=Au(b,u,i,_)),o&&(b=Ou(b,o,f,_)),d-=x,_&&d<s){var j=or(b,m);return qu(n,t,Bu,a.placeholder,r,b,j,c,l,s-d)}var A=p?r:this,O=v?A[n]:n;return d=b.length,c?b=function(n,t){for(var r=n.length,u=yr(t.length,r),i=ku(n);u--;){var o=t[u];n[u]=_i(o,r)?i[o]:e}return n}(b,c):g&&d>1&&b.reverse(),h&&l<d&&(b.length=l),this&&this!==st&&this instanceof a&&(O=y||Tu(O)),O.apply(A,b)}}function Pu(n,t){return function(r,e){return function(n,t,r,e){return de(n,function(n,u,i){t(e,r(n),u,i)}),e}(r,n,t(e),{})}}function $u(n,t){return function(r,u){var i;if(r===e&&u===e)return t;if(r!==e&&(i=r),u!==e){if(i===e)return u;\"string\"==typeof r||\"string\"==typeof u?(r=ou(r),u=ou(u)):(r=iu(r),u=iu(u)),i=n(r,u)}return i}}function Du(n){return Xu(function(t){return t=Rt(t,Ht(ii())),Ve(function(r){var e=this;return n(t,function(n){return jt(n,e,r)})})})}function Mu(n,t){var r=(t=t===e?\" \":ou(t)).length;if(r<2)return r?Ke(t,n):t;var u=Ke(t,pt(n/cr(t)));return er(t)?du(lr(u),0,n).join(\"\"):u.slice(0,n)}function Fu(n){return function(t,r,u){return u&&\"number\"!=typeof u&&gi(t,r,u)&&(r=u=e),t=pf(t),r===e?(r=t,t=0):r=pf(r),function(n,t,r,e){for(var u=-1,i=gr(pt((t-n)/(r||1)),0),o=en(i);i--;)o[e?i:++u]=n,n+=r;return o}(t,r,u=u===e?t<r?1:-1:pf(u),n)}}function Nu(n){return function(t,r){return\"string\"==typeof t&&\"string\"==typeof r||(t=gf(t),r=gf(r)),n(t,r)}}function qu(n,t,r,u,i,o,a,c,l,s){var h=8&t;t|=h?f:64,4&(t&=~(h?64:f))||(t&=-4);var p=[n,t,i,h?o:e,h?a:e,h?e:o,h?e:a,c,l,s],v=r.apply(e,p);return di(n)&&ki(v,p),v.placeholder=u,zi(v,n,t)}function Zu(n){var t=An[n];return function(n,r){if(n=gf(n),(r=null==r?0:yr(vf(r),292))&&qt(n)){var e=(df(n)+\"e\").split(\"e\");return+((e=(df(t(e[0]+\"e\"+(+e[1]+r)))+\"e\").split(\"e\"))[0]+\"e\"+(+e[1]-r))}return t(n)}}var Ku=Or&&1/fr(new Or([,-0]))[1]==c?function(n){return new Or(n)}:aa;function Vu(n){return function(t){var r=si(t);return r==m?ur(t):r==k?ar(t):function(n,t){return Rt(t,function(t){return[t,n[t]]})}(t,n(t))}}function Gu(n,t,r,i,c,l,s,h){var p=2&t;if(!p&&\"function\"!=typeof n)throw new Sn(u);var v=i?i.length:0;if(v||(t&=-97,i=c=e),s=s===e?s:gr(vf(s),0),h=h===e?h:vf(h),v-=c?c.length:0,64&t){var _=i,g=c;i=c=e}var y=p?e:ri(n),d=[n,t,r,i,c,_,g,l,s,h];if(y&&function(n,t){var r=n[1],e=t[1],u=r|e,i=u<131,f=e==a&&8==r||e==a&&256==r&&n[7].length<=t[8]||384==e&&t[7].length<=t[8]&&8==r;if(!i&&!f)return n;1&e&&(n[2]=t[2],u|=1&r?0:4);var c=t[3];if(c){var l=n[3];n[3]=l?Au(l,c,t[4]):c,n[4]=l?or(n[3],o):t[4]}(c=t[5])&&(l=n[5],n[5]=l?Ou(l,c,t[6]):c,n[6]=l?or(n[5],o):t[6]),(c=t[7])&&(n[7]=c),e&a&&(n[8]=null==n[8]?t[8]:yr(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=u}(d,y),n=d[0],t=d[1],r=d[2],i=d[3],c=d[4],!(h=d[9]=d[9]===e?p?0:n.length:gr(d[9]-v,0))&&24&t&&(t&=-25),t&&1!=t)b=8==t||16==t?function(n,t,r){var u=Tu(n);return function i(){for(var o=arguments.length,f=en(o),a=o,c=ui(i);a--;)f[a]=arguments[a];var l=o<3&&f[0]!==c&&f[o-1]!==c?[]:or(f,c);return(o-=l.length)<r?qu(n,t,Bu,i.placeholder,e,f,l,e,e,r-o):jt(this&&this!==st&&this instanceof i?u:n,this,f)}}(n,t,h):t!=f&&33!=t||c.length?Bu.apply(e,d):function(n,t,r,e){var u=1&t,i=Tu(n);return function t(){for(var o=-1,f=arguments.length,a=-1,c=e.length,l=en(c+f),s=this&&this!==st&&this instanceof t?i:n;++a<c;)l[a]=e[a];for(;f--;)l[a++]=arguments[++o];return jt(s,u?r:this,l)}}(n,t,r,i);else var b=function(n,t,r){var e=1&t,u=Tu(n);return function t(){return(this&&this!==st&&this instanceof t?u:n).apply(e?r:this,arguments)}}(n,t,r);return zi((y?Ye:ki)(b,d),n,t)}function Hu(n,t,r,u){return n===e||$o(n,Rn[r])&&!Tn.call(u,r)?t:n}function Ju(n,t,r,u,i,o){return Xo(n)&&Xo(t)&&(o.set(t,n),$e(n,t,e,Ju,o),o.delete(t)),n}function Yu(n){return ef(n)?e:n}function Qu(n,t,r,u,i,o){var f=1&r,a=n.length,c=t.length;if(a!=c&&!(f&&c>a))return!1;var l=o.get(n),s=o.get(t);if(l&&s)return l==t&&s==n;var h=-1,p=!0,v=2&r?new Kr:e;for(o.set(n,t),o.set(t,n);++h<a;){var _=n[h],g=t[h];if(u)var y=f?u(g,_,h,t,n,o):u(_,g,h,n,t,o);if(y!==e){if(y)continue;p=!1;break}if(v){if(!Ct(t,function(n,t){if(!Yt(v,t)&&(_===n||i(_,n,r,u,o)))return v.push(t)})){p=!1;break}}else if(_!==g&&!i(_,g,r,u,o)){p=!1;break}}return o.delete(n),o.delete(t),p}function Xu(n){return Si(ji(n,e,Ni),n+\"\")}function ni(n){return xe(n,Rf,ci)}function ti(n){return xe(n,Wf,li)}var ri=Sr?function(n){return Sr.get(n)}:aa;function ei(n){for(var t=n.name+\"\",r=zr[t],e=Tn.call(zr,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function ui(n){return(Tn.call(Pr,\"placeholder\")?Pr:n).placeholder}function ii(){var n=Pr.iteratee||ua;return n=n===ua?Le:n,arguments.length?n(arguments[0],arguments[1]):n}function oi(n,t){var r,e,u=n.__data__;return(\"string\"==(e=typeof(r=t))||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==r:null===r)?u[\"string\"==typeof t?\"string\":\"hash\"]:u.map}function fi(n){for(var t=Rf(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,mi(u)]}return t}function ai(n,t){var r=function(n,t){return null==n?e:n[t]}(n,t);return We(r)?r:e}var ci=gt?function(n){return null==n?[]:(n=On(n),St(gt(n),function(t){return Vn.call(n,t)}))}:_a,li=gt?function(n){for(var t=[];n;)Wt(t,ci(n)),n=Zn(n);return t}:_a,si=je;function hi(n,t,r){for(var e=-1,u=(t=gu(t,n)).length,i=!1;++e<u;){var o=Ci(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:!!(u=null==n?0:n.length)&&Qo(u)&&_i(o,u)&&(No(n)||Fo(n))}function pi(n){return\"function\"!=typeof n.constructor||wi(n)?{}:$r(Zn(n))}function vi(n){return No(n)||Fo(n)||!!(Hn&&n&&n[Hn])}function _i(n,t){var r=typeof n;return!!(t=t??l)&&(\"number\"==r||\"symbol\"!=r&&yn.test(n))&&n>-1&&n%1==0&&n<t}function gi(n,t,r){if(!Xo(r))return!1;var e=typeof t;return!!(\"number\"==e?Zo(r)&&_i(t,r.length):\"string\"==e&&t in r)&&$o(r[t],n)}function yi(n,t){if(No(n))return!1;var r=typeof n;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=n&&!af(n))||Q.test(n)||!Y.test(n)||null!=t&&n in On(t)}function di(n){var t=ei(n),r=Pr[t];if(\"function\"!=typeof r||!(t in Fr.prototype))return!1;if(n===r)return!0;var e=ri(r);return!!e&&n===e[0]}(xr&&si(new xr(new ArrayBuffer(1)))!=R||jr&&si(new jr)!=m||Ar&&si(Ar.resolve())!=A||Or&&si(new Or)!=k||kr&&si(new kr)!=z)&&(si=function(n){var t=je(n),r=t==j?n.constructor:e,u=r?Ui(r):\"\";if(u)switch(u){case Er:return R;case Rr:return m;case Wr:return A;case Lr:return k;case Tr:return z}return t});var bi=Wn?Jo:ga;function wi(n){var t=n&&n.constructor;return n===(\"function\"==typeof t&&t.prototype||Rn)}function mi(n){return n==n&&!Xo(n)}function xi(n,t){return function(r){return null!=r&&r[n]===t&&(t!==e||n in On(r))}}function ji(n,t,r){return t=gr(t===e?n.length-1:t,0),function(){for(var e=arguments,u=-1,i=gr(e.length-t,0),o=en(i);++u<i;)o[u]=e[t+u];u=-1;for(var f=en(t+1);++u<t;)f[u]=e[u];return f[t]=r(o),jt(n,this,f)}}function Ai(n,t){return t.length<2?n:me(n,nu(t,0,-1))}function Oi(n,t){if((\"constructor\"!==t||\"function\"!=typeof n[t])&&\"__proto__\"!=t)return n[t]}var ki=Ei(Ye),Ii=ht||function(n,t){return st.setTimeout(n,t)},Si=Ei(Qe);function zi(n,t,r){var e=t+\"\";return Si(n,function(n,t){var r=t.length;if(!r)return n;var e=r-1;return t[e]=(r>1?\"& \":\"\")+t[e],t=t.join(r>2?\", \":\" \"),n.replace(un,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(e,function(n,t){return Ot(p,function(r){var e=\"_.\"+r[0];t&r[1]&&!zt(n,e)&&n.push(e)}),n.sort()}(function(n){var t=n.match(on);return t?t[1].split(fn):[]}(e),r)))}function Ei(n){var t=0,r=0;return function(){var u=dr(),i=16-(u-r);if(r=u,i>0){if(++t>=800)return arguments[0]}else t=0;return n.apply(e,arguments)}}function Ri(n,t){var r=-1,u=n.length,i=u-1;for(t=t===e?u:t;++r<t;){var o=Ze(r,i),f=n[o];n[o]=n[r],n[r]=f}return n.length=t,n}var Wi,Li,Ti=(Wi=Lo(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(\"\"),n.replace(X,function(n,r,e,u){t.push(e?u.replace(ln,\"$1\"):r||n)}),t},function(n){return 500===Li.size&&Li.clear(),n}),Li=Wi.cache,Wi);function Ci(n){if(\"string\"==typeof n||af(n))return n;var t=n+\"\";return\"0\"==t&&1/n==-1/0?\"-0\":t}function Ui(n){if(null!=n){try{return Ln.call(n)}catch(n){}try{return n+\"\"}catch(n){}}return\"\"}function Bi(n){if(n instanceof Fr)return n.clone();var t=new Mr(n.__wrapped__,n.__chain__);return t.__actions__=ku(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}var Pi=Ve(function(n,t){return Ko(n)?ce(n,_e(t,1,Ko,!0)):[]}),$i=Ve(function(n,t){var r=Gi(t);return Ko(r)&&(r=e),Ko(n)?ce(n,_e(t,1,Ko,!0),ii(r,2)):[]}),Di=Ve(function(n,t){var r=Gi(t);return Ko(r)&&(r=e),Ko(n)?ce(n,_e(t,1,Ko,!0),e,r):[]});function Mi(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:vf(r);return u<0&&(u=gr(e+u,0)),Pt(n,ii(t,3),u)}function Fi(n,t,r){var u=null==n?0:n.length;if(!u)return-1;var i=u-1;return r!==e&&(i=vf(r),i=r<0?gr(u+i,0):yr(i,u-1)),Pt(n,ii(t,3),i,!0)}function Ni(n){return null!=n&&n.length?_e(n,1):[]}function qi(n){return n&&n.length?n[0]:e}var Zi=Ve(function(n){var t=Rt(n,vu);return t.length&&t[0]===n[0]?Ie(t):[]}),Ki=Ve(function(n){var t=Gi(n),r=Rt(n,vu);return t===Gi(r)?t=e:r.pop(),r.length&&r[0]===n[0]?Ie(r,ii(t,2)):[]}),Vi=Ve(function(n){var t=Gi(n),r=Rt(n,vu);return(t=\"function\"==typeof t?t:e)&&r.pop(),r.length&&r[0]===n[0]?Ie(r,e,t):[]});function Gi(n){var t=null==n?0:n.length;return t?n[t-1]:e}var Hi=Ve(Ji);function Ji(n,t){return n&&n.length&&t&&t.length?Ne(n,t):n}var Yi=Xu(function(n,t){var r=null==n?0:n.length,e=ue(n,t);return qe(n,Rt(t,function(n){return _i(n,r)?+n:n}).sort(ju)),e});function Qi(n){return null==n?n:mr.call(n)}var Xi=Ve(function(n){return fu(_e(n,1,Ko,!0))}),no=Ve(function(n){var t=Gi(n);return Ko(t)&&(t=e),fu(_e(n,1,Ko,!0),ii(t,2))}),to=Ve(function(n){var t=Gi(n);return t=\"function\"==typeof t?t:e,fu(_e(n,1,Ko,!0),e,t)});function ro(n){if(!n||!n.length)return[];var t=0;return n=St(n,function(n){if(Ko(n))return t=gr(n.length,t),!0}),Vt(t,function(t){return Rt(n,Nt(t))})}function eo(n,t){if(!n||!n.length)return[];var r=ro(n);return null==t?r:Rt(r,function(n){return jt(t,e,n)})}var uo=Ve(function(n,t){return Ko(n)?ce(n,t):[]}),io=Ve(function(n){return hu(St(n,Ko))}),oo=Ve(function(n){var t=Gi(n);return Ko(t)&&(t=e),hu(St(n,Ko),ii(t,2))}),fo=Ve(function(n){var t=Gi(n);return t=\"function\"==typeof t?t:e,hu(St(n,Ko),e,t)}),ao=Ve(ro),co=Ve(function(n){var t=n.length,r=t>1?n[t-1]:e;return r=\"function\"==typeof r?(n.pop(),r):e,eo(n,r)});function lo(n){var t=Pr(n);return t.__chain__=!0,t}function so(n,t){return t(n)}var ho=Xu(function(n){var t=n.length,r=t?n[0]:0,u=this.__wrapped__,i=function(t){return ue(t,n)};return!(t>1||this.__actions__.length)&&u instanceof Fr&&_i(r)?((u=u.slice(r,+r+(t?1:0))).__actions__.push({func:so,args:[i],thisArg:e}),new Mr(u,this.__chain__).thru(function(n){return t&&!n.length&&n.push(e),n})):this.thru(i)}),po=Su(function(n,t,r){Tn.call(n,r)?++n[r]:ee(n,r,1)}),vo=Cu(Mi),_o=Cu(Fi);function go(n,t){return(No(n)?Ot:le)(n,ii(t,3))}function yo(n,t){return(No(n)?kt:se)(n,ii(t,3))}var bo=Su(function(n,t,r){Tn.call(n,r)?n[r].push(t):ee(n,r,[t])}),wo=Ve(function(n,t,r){var e=-1,u=\"function\"==typeof t,i=Zo(n)?en(n.length):[];return le(n,function(n){i[++e]=u?jt(t,n,r):Se(n,t,r)}),i}),mo=Su(function(n,t,r){ee(n,r,t)});function xo(n,t){return(No(n)?Rt:Ue)(n,ii(t,3))}var jo=Su(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),Ao=Ve(function(n,t){if(null==n)return[];var r=t.length;return r>1&&gi(n,t[0],t[1])?t=[]:r>2&&gi(t[0],t[1],t[2])&&(t=[t[0]]),Me(n,_e(t,1),[])}),Oo=lt||function(){return st.Date.now()};function ko(n,t,r){return t=r?e:t,t=n&&null==t?n.length:t,Gu(n,a,e,e,e,e,t)}function Io(n,t){var r;if(\"function\"!=typeof t)throw new Sn(u);return n=vf(n),function(){return--n>0&&(r=t.apply(this,arguments)),n<=1&&(t=e),r}}var So=Ve(function(n,t,r){var e=1;if(r.length){var u=or(r,ui(So));e|=f}return Gu(n,e,t,r,u)}),zo=Ve(function(n,t,r){var e=3;if(r.length){var u=or(r,ui(zo));e|=f}return Gu(t,e,n,r,u)});function Eo(n,t,r){var i,o,f,a,c,l,s=0,h=!1,p=!1,v=!0;if(\"function\"!=typeof n)throw new Sn(u);function _(t){var r=i,u=o;return i=o=e,s=t,a=n.apply(u,r)}function g(n){var r=n-l;return l===e||r>=t||r<0||p&&n-s>=f}function y(){var n=Oo();if(g(n))return d(n);c=Ii(y,function(n){var r=t-(n-l);return p?yr(r,f-(n-s)):r}(n))}function d(n){return c=e,v&&i?_(n):(i=o=e,a)}function b(){var n=Oo(),r=g(n);if(i=arguments,o=this,l=n,r){if(c===e)return function(n){return s=n,c=Ii(y,t),h?_(n):a}(l);if(p)return bu(c),c=Ii(y,t),_(l)}return c===e&&(c=Ii(y,t)),a}return t=gf(t)||0,Xo(r)&&(h=!!r.leading,f=(p=\"maxWait\"in r)?gr(gf(r.maxWait)||0,t):f,v=\"trailing\"in r?!!r.trailing:v),b.cancel=function(){c!==e&&bu(c),s=0,i=l=o=c=e},b.flush=function(){return c===e?a:d(Oo())},b}var Ro=Ve(function(n,t){return ae(n,1,t)}),Wo=Ve(function(n,t,r){return ae(n,gf(t)||0,r)});function Lo(n,t){if(\"function\"!=typeof n||null!=t&&\"function\"!=typeof t)throw new Sn(u);var r=function(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;if(i.has(u))return i.get(u);var o=n.apply(this,e);return r.cache=i.set(u,o)||i,o};return r.cache=new(Lo.Cache||Zr),r}function To(n){if(\"function\"!=typeof n)throw new Sn(u);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}Lo.Cache=Zr;var Co=yu(function(n,t){var r=(t=1==t.length&&No(t[0])?Rt(t[0],Ht(ii())):Rt(_e(t,1),Ht(ii()))).length;return Ve(function(e){for(var u=-1,i=yr(e.length,r);++u<i;)e[u]=t[u].call(this,e[u]);return jt(n,this,e)})}),Uo=Ve(function(n,t){var r=or(t,ui(Uo));return Gu(n,f,e,t,r)}),Bo=Ve(function(n,t){var r=or(t,ui(Bo));return Gu(n,64,e,t,r)}),Po=Xu(function(n,t){return Gu(n,256,e,e,e,t)});function $o(n,t){return n===t||n!=n&&t!=t}var Do=Nu(Ae),Mo=Nu(function(n,t){return n>=t}),Fo=ze(function(){return arguments}())?ze:function(n){return nf(n)&&Tn.call(n,\"callee\")&&!Vn.call(n,\"callee\")},No=en.isArray,qo=yt?Ht(yt):function(n){return nf(n)&&je(n)==E};function Zo(n){return null!=n&&Qo(n.length)&&!Jo(n)}function Ko(n){return nf(n)&&Zo(n)}var Vo=Ut||ga,Go=dt?Ht(dt):function(n){return nf(n)&&je(n)==y};function Ho(n){if(!nf(n))return!1;var t=je(n);return t==d||\"[object DOMException]\"==t||\"string\"==typeof n.message&&\"string\"==typeof n.name&&!ef(n)}function Jo(n){if(!Xo(n))return!1;var t=je(n);return t==b||t==w||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function Yo(n){return\"number\"==typeof n&&n==vf(n)}function Qo(n){return\"number\"==typeof n&&n>-1&&n%1==0&&n<=l}function Xo(n){var t=typeof n;return null!=n&&(\"object\"==t||\"function\"==t)}function nf(n){return null!=n&&\"object\"==typeof n}var tf=bt?Ht(bt):function(n){return nf(n)&&si(n)==m};function rf(n){return\"number\"==typeof n||nf(n)&&je(n)==x}function ef(n){if(!nf(n)||je(n)!=j)return!1;var t=Zn(n);if(null===t)return!0;var r=Tn.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof r&&r instanceof r&&Ln.call(r)==Pn}var uf=wt?Ht(wt):function(n){return nf(n)&&je(n)==O},of=mt?Ht(mt):function(n){return nf(n)&&si(n)==k};function ff(n){return\"string\"==typeof n||!No(n)&&nf(n)&&je(n)==I}function af(n){return\"symbol\"==typeof n||nf(n)&&je(n)==S}var cf=xt?Ht(xt):function(n){return nf(n)&&Qo(n.length)&&!!ut[je(n)]},lf=Nu(Ce),sf=Nu(function(n,t){return n<=t});function hf(n){if(!n)return[];if(Zo(n))return ff(n)?lr(n):ku(n);if(Qn&&n[Qn])return function(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}(n[Qn]());var t=si(n);return(t==m?ur:t==k?fr:Df)(n)}function pf(n){return n?(n=gf(n))===c||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function vf(n){var t=pf(n),r=t%1;return t==t?r?t-r:t:0}function _f(n){return n?ie(vf(n),0,h):0}function gf(n){if(\"number\"==typeof n)return n;if(af(n))return s;if(Xo(n)){var t=\"function\"==typeof n.valueOf?n.valueOf():n;n=Xo(t)?t+\"\":t}if(\"string\"!=typeof n)return 0===n?n:+n;n=Gt(n);var r=vn.test(n);return r||gn.test(n)?at(n.slice(2),r?2:8):pn.test(n)?s:+n}function yf(n){return Iu(n,Wf(n))}function df(n){return null==n?\"\":ou(n)}var bf=zu(function(n,t){if(wi(t)||Zo(t))Iu(t,Rf(t),n);else for(var r in t)Tn.call(t,r)&&Xr(n,r,t[r])}),wf=zu(function(n,t){Iu(t,Wf(t),n)}),mf=zu(function(n,t,r,e){Iu(t,Wf(t),n,e)}),xf=zu(function(n,t,r,e){Iu(t,Rf(t),n,e)}),jf=Xu(ue),Af=Ve(function(n,t){n=On(n);var r=-1,u=t.length,i=u>2?t[2]:e;for(i&&gi(t[0],t[1],i)&&(u=1);++r<u;)for(var o=t[r],f=Wf(o),a=-1,c=f.length;++a<c;){var l=f[a],s=n[l];(s===e||$o(s,Rn[l])&&!Tn.call(n,l))&&(n[l]=o[l])}return n}),Of=Ve(function(n){return n.push(e,Ju),jt(Tf,e,n)});function kf(n,t,r){var u=null==n?e:me(n,t);return u===e?r:u}function If(n,t){return null!=n&&hi(n,t,ke)}var Sf=Pu(function(n,t,r){null!=t&&\"function\"!=typeof t.toString&&(t=Bn.call(t)),n[t]=r},na(ea)),zf=Pu(function(n,t,r){null!=t&&\"function\"!=typeof t.toString&&(t=Bn.call(t)),Tn.call(n,t)?n[t].push(r):n[t]=[r]},ii),Ef=Ve(Se);function Rf(n){return Zo(n)?Gr(n):Te(n)}function Wf(n){return Zo(n)?Gr(n,!0):function(n){if(!Xo(n))return function(n){var t=[];if(null!=n)for(var r in On(n))t.push(r);return t}(n);var t=wi(n),r=[];for(var e in n)(\"constructor\"!=e||!t&&Tn.call(n,e))&&r.push(e);return r}(n)}var Lf=zu(function(n,t,r){$e(n,t,r)}),Tf=zu(function(n,t,r,e){$e(n,t,r,e)}),Cf=Xu(function(n,t){var r={};if(null==n)return r;var e=!1;t=Rt(t,function(t){return t=gu(t,n),e||(e=t.length>1),t}),Iu(n,ti(n),r),e&&(r=oe(r,7,Yu));for(var u=t.length;u--;)au(r,t[u]);return r}),Uf=Xu(function(n,t){return null==n?{}:function(n,t){return Fe(n,t,function(t,r){return If(n,r)})}(n,t)});function Bf(n,t){if(null==n)return{};var r=Rt(ti(n),function(n){return[n]});return t=ii(t),Fe(n,r,function(n,r){return t(n,r[0])})}var Pf=Vu(Rf),$f=Vu(Wf);function Df(n){return null==n?[]:Jt(n,Rf(n))}var Mf=Lu(function(n,t,r){return t=t.toLowerCase(),n+(r?Ff(t):t)});function Ff(n){return Jf(df(n).toLowerCase())}function Nf(n){return(n=df(n))&&n.replace(dn,nr).replace(Yn,\"\")}var qf=Lu(function(n,t,r){return n+(r?\"-\":\"\")+t.toLowerCase()}),Zf=Lu(function(n,t,r){return n+(r?\" \":\"\")+t.toLowerCase()}),Kf=Wu(\"toLowerCase\"),Vf=Lu(function(n,t,r){return n+(r?\"_\":\"\")+t.toLowerCase()}),Gf=Lu(function(n,t,r){return n+(r?\" \":\"\")+Jf(t)}),Hf=Lu(function(n,t,r){return n+(r?\" \":\"\")+t.toUpperCase()}),Jf=Wu(\"toUpperCase\");function Yf(n,t,r){return n=df(n),(t=r?e:t)===e?function(n){return tt.test(n)}(n)?function(n){return n.match(Xn)||[]}(n):function(n){return n.match(an)||[]}(n):n.match(t)||[]}var Qf=Ve(function(n,t){try{return jt(n,e,t)}catch(n){return Ho(n)?n:new xn(n)}}),Xf=Xu(function(n,t){return Ot(t,function(t){t=Ci(t),ee(n,t,So(n[t],n))}),n});function na(n){return function(){return n}}var ta=Uu(),ra=Uu(!0);function ea(n){return n}function ua(n){return Le(\"function\"==typeof n?n:oe(n,1))}var ia=Ve(function(n,t){return function(r){return Se(r,n,t)}}),oa=Ve(function(n,t){return function(r){return Se(n,r,t)}});function fa(n,t,r){var e=Rf(t),u=we(t,e);null!=r||Xo(t)&&(u.length||!e.length)||(r=t,t=n,n=this,u=we(t,Rf(t)));var i=!(Xo(r)&&\"chain\"in r&&!r.chain),o=Jo(n);return Ot(u,function(r){var e=t[r];n[r]=e,o&&(n.prototype[r]=function(){var t=this.__chain__;if(i||t){var r=n(this.__wrapped__);return(r.__actions__=ku(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,Wt([this.value()],arguments))})}),n}function aa(){}var ca=Du(Rt),la=Du(It),sa=Du(Ct);function ha(n){return yi(n)?Nt(Ci(n)):function(n){return function(t){return me(t,n)}}(n)}var pa=Fu(),va=Fu(!0);function _a(){return[]}function ga(){return!1}var ya,da=$u(function(n,t){return n+t},0),ba=Zu(\"ceil\"),wa=$u(function(n,t){return n/t},1),ma=Zu(\"floor\"),xa=$u(function(n,t){return n*t},1),ja=Zu(\"round\"),Aa=$u(function(n,t){return n-t},0);return Pr.after=function(n,t){if(\"function\"!=typeof t)throw new Sn(u);return n=vf(n),function(){if(--n<1)return t.apply(this,arguments)}},Pr.ary=ko,Pr.assign=bf,Pr.assignIn=wf,Pr.assignInWith=mf,Pr.assignWith=xf,Pr.at=jf,Pr.before=Io,Pr.bind=So,Pr.bindAll=Xf,Pr.bindKey=zo,Pr.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return No(n)?n:[n]},Pr.chain=lo,Pr.chunk=function(n,t,r){t=(r?gi(n,t,r):t===e)?1:gr(vf(t),0);var u=null==n?0:n.length;if(!u||t<1)return[];for(var i=0,o=0,f=en(pt(u/t));i<u;)f[o++]=nu(n,i,i+=t);return f},Pr.compact=function(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){var i=n[t];i&&(u[e++]=i)}return u},Pr.concat=function(){var n=arguments.length;if(!n)return[];for(var t=en(n-1),r=arguments[0],e=n;e--;)t[e-1]=arguments[e];return Wt(No(r)?ku(r):[r],_e(t,1))},Pr.cond=function(n){var t=null==n?0:n.length,r=ii();return n=t?Rt(n,function(n){if(\"function\"!=typeof n[1])throw new Sn(u);return[r(n[0]),n[1]]}):[],Ve(function(r){for(var e=-1;++e<t;){var u=n[e];if(jt(u[0],this,r))return jt(u[1],this,r)}})},Pr.conforms=function(n){return function(n){var t=Rf(n);return function(r){return fe(r,n,t)}}(oe(n,1))},Pr.constant=na,Pr.countBy=po,Pr.create=function(n,t){var r=$r(n);return null==t?r:re(r,t)},Pr.curry=function n(t,r,u){var i=Gu(t,8,e,e,e,e,e,r=u?e:r);return i.placeholder=n.placeholder,i},Pr.curryRight=function n(t,r,u){var i=Gu(t,16,e,e,e,e,e,r=u?e:r);return i.placeholder=n.placeholder,i},Pr.debounce=Eo,Pr.defaults=Af,Pr.defaultsDeep=Of,Pr.defer=Ro,Pr.delay=Wo,Pr.difference=Pi,Pr.differenceBy=$i,Pr.differenceWith=Di,Pr.drop=function(n,t,r){var u=null==n?0:n.length;return u?nu(n,(t=r||t===e?1:vf(t))<0?0:t,u):[]},Pr.dropRight=function(n,t,r){var u=null==n?0:n.length;return u?nu(n,0,(t=u-(t=r||t===e?1:vf(t)))<0?0:t):[]},Pr.dropRightWhile=function(n,t){return n&&n.length?lu(n,ii(t,3),!0,!0):[]},Pr.dropWhile=function(n,t){return n&&n.length?lu(n,ii(t,3),!0):[]},Pr.fill=function(n,t,r,u){var i=null==n?0:n.length;return i?(r&&\"number\"!=typeof r&&gi(n,t,r)&&(r=0,u=i),function(n,t,r,u){var i=n.length;for((r=vf(r))<0&&(r=-r>i?0:i+r),(u=u===e||u>i?i:vf(u))<0&&(u+=i),u=r>u?0:_f(u);r<u;)n[r++]=t;return n}(n,t,r,u)):[]},Pr.filter=function(n,t){return(No(n)?St:ve)(n,ii(t,3))},Pr.flatMap=function(n,t){return _e(xo(n,t),1)},Pr.flatMapDeep=function(n,t){return _e(xo(n,t),c)},Pr.flatMapDepth=function(n,t,r){return r=r===e?1:vf(r),_e(xo(n,t),r)},Pr.flatten=Ni,Pr.flattenDeep=function(n){return null!=n&&n.length?_e(n,c):[]},Pr.flattenDepth=function(n,t){return null!=n&&n.length?_e(n,t=t===e?1:vf(t)):[]},Pr.flip=function(n){return Gu(n,512)},Pr.flow=ta,Pr.flowRight=ra,Pr.fromPairs=function(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];ee(e,u[0],u[1])}return e},Pr.functions=function(n){return null==n?[]:we(n,Rf(n))},Pr.functionsIn=function(n){return null==n?[]:we(n,Wf(n))},Pr.groupBy=bo,Pr.initial=function(n){return null!=n&&n.length?nu(n,0,-1):[]},Pr.intersection=Zi,Pr.intersectionBy=Ki,Pr.intersectionWith=Vi,Pr.invert=Sf,Pr.invertBy=zf,Pr.invokeMap=wo,Pr.iteratee=ua,Pr.keyBy=mo,Pr.keys=Rf,Pr.keysIn=Wf,Pr.map=xo,Pr.mapKeys=function(n,t){var r={};return t=ii(t,3),de(n,function(n,e,u){ee(r,t(n,e,u),n)}),r},Pr.mapValues=function(n,t){var r={};return t=ii(t,3),de(n,function(n,e,u){ee(r,e,t(n,e,u))}),r},Pr.matches=function(n){return Be(oe(n,1))},Pr.matchesProperty=function(n,t){return Pe(n,oe(t,1))},Pr.memoize=Lo,Pr.merge=Lf,Pr.mergeWith=Tf,Pr.method=ia,Pr.methodOf=oa,Pr.mixin=fa,Pr.negate=To,Pr.nthArg=function(n){return n=vf(n),Ve(function(t){return De(t,n)})},Pr.omit=Cf,Pr.omitBy=function(n,t){return Bf(n,To(ii(t)))},Pr.once=function(n){return Io(2,n)},Pr.orderBy=function(n,t,r,u){return null==n?[]:(No(t)||(t=null==t?[]:[t]),No(r=u?e:r)||(r=null==r?[]:[r]),Me(n,t,r))},Pr.over=ca,Pr.overArgs=Co,Pr.overEvery=la,Pr.overSome=sa,Pr.partial=Uo,Pr.partialRight=Bo,Pr.partition=jo,Pr.pick=Uf,Pr.pickBy=Bf,Pr.property=ha,Pr.propertyOf=function(n){return function(t){return null==n?e:me(n,t)}},Pr.pull=Hi,Pr.pullAll=Ji,Pr.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?Ne(n,t,ii(r,2)):n},Pr.pullAllWith=function(n,t,r){return n&&n.length&&t&&t.length?Ne(n,t,e,r):n},Pr.pullAt=Yi,Pr.range=pa,Pr.rangeRight=va,Pr.rearg=Po,Pr.reject=function(n,t){return(No(n)?St:ve)(n,To(ii(t,3)))},Pr.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=ii(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),u.push(e))}return qe(n,u),r},Pr.rest=function(n,t){if(\"function\"!=typeof n)throw new Sn(u);return Ve(n,t=t===e?t:vf(t))},Pr.reverse=Qi,Pr.sampleSize=function(n,t,r){return t=(r?gi(n,t,r):t===e)?1:vf(t),(No(n)?Jr:He)(n,t)},Pr.set=function(n,t,r){return null==n?n:Je(n,t,r)},Pr.setWith=function(n,t,r,u){return u=\"function\"==typeof u?u:e,null==n?n:Je(n,t,r,u)},Pr.shuffle=function(n){return(No(n)?Yr:Xe)(n)},Pr.slice=function(n,t,r){var u=null==n?0:n.length;return u?(r&&\"number\"!=typeof r&&gi(n,t,r)?(t=0,r=u):(t=null==t?0:vf(t),r=r===e?u:vf(r)),nu(n,t,r)):[]},Pr.sortBy=Ao,Pr.sortedUniq=function(n){return n&&n.length?uu(n):[]},Pr.sortedUniqBy=function(n,t){return n&&n.length?uu(n,ii(t,2)):[]},Pr.split=function(n,t,r){return r&&\"number\"!=typeof r&&gi(n,t,r)&&(t=r=e),(r=r===e?h:r>>>0)?(n=df(n))&&(\"string\"==typeof t||null!=t&&!uf(t))&&!(t=ou(t))&&er(n)?du(lr(n),0,r):n.split(t,r):[]},Pr.spread=function(n,t){if(\"function\"!=typeof n)throw new Sn(u);return t=null==t?0:gr(vf(t),0),Ve(function(r){var e=r[t],u=du(r,0,t);return e&&Wt(u,e),jt(n,this,u)})},Pr.tail=function(n){var t=null==n?0:n.length;return t?nu(n,1,t):[]},Pr.take=function(n,t,r){return n&&n.length?nu(n,0,(t=r||t===e?1:vf(t))<0?0:t):[]},Pr.takeRight=function(n,t,r){var u=null==n?0:n.length;return u?nu(n,(t=u-(t=r||t===e?1:vf(t)))<0?0:t,u):[]},Pr.takeRightWhile=function(n,t){return n&&n.length?lu(n,ii(t,3),!1,!0):[]},Pr.takeWhile=function(n,t){return n&&n.length?lu(n,ii(t,3)):[]},Pr.tap=function(n,t){return t(n),n},Pr.throttle=function(n,t,r){var e=!0,i=!0;if(\"function\"!=typeof n)throw new Sn(u);return Xo(r)&&(e=\"leading\"in r?!!r.leading:e,i=\"trailing\"in r?!!r.trailing:i),Eo(n,t,{leading:e,maxWait:t,trailing:i})},Pr.thru=so,Pr.toArray=hf,Pr.toPairs=Pf,Pr.toPairsIn=$f,Pr.toPath=function(n){return No(n)?Rt(n,Ci):af(n)?[n]:ku(Ti(df(n)))},Pr.toPlainObject=yf,Pr.transform=function(n,t,r){var e=No(n),u=e||Vo(n)||cf(n);if(t=ii(t,4),null==r){var i=n&&n.constructor;r=u?e?new i:[]:Xo(n)&&Jo(i)?$r(Zn(n)):{}}return(u?Ot:de)(n,function(n,e,u){return t(r,n,e,u)}),r},Pr.unary=function(n){return ko(n,1)},Pr.union=Xi,Pr.unionBy=no,Pr.unionWith=to,Pr.uniq=function(n){return n&&n.length?fu(n):[]},Pr.uniqBy=function(n,t){return n&&n.length?fu(n,ii(t,2)):[]},Pr.uniqWith=function(n,t){return t=\"function\"==typeof t?t:e,n&&n.length?fu(n,e,t):[]},Pr.unset=function(n,t){return null==n||au(n,t)},Pr.unzip=ro,Pr.unzipWith=eo,Pr.update=function(n,t,r){return null==n?n:cu(n,t,_u(r))},Pr.updateWith=function(n,t,r,u){return u=\"function\"==typeof u?u:e,null==n?n:cu(n,t,_u(r),u)},Pr.values=Df,Pr.valuesIn=function(n){return null==n?[]:Jt(n,Wf(n))},Pr.without=uo,Pr.words=Yf,Pr.wrap=function(n,t){return Uo(_u(t),n)},Pr.xor=io,Pr.xorBy=oo,Pr.xorWith=fo,Pr.zip=ao,Pr.zipObject=function(n,t){return pu(n||[],t||[],Xr)},Pr.zipObjectDeep=function(n,t){return pu(n||[],t||[],Je)},Pr.zipWith=co,Pr.entries=Pf,Pr.entriesIn=$f,Pr.extend=wf,Pr.extendWith=mf,fa(Pr,Pr),Pr.add=da,Pr.attempt=Qf,Pr.camelCase=Mf,Pr.capitalize=Ff,Pr.ceil=ba,Pr.clamp=function(n,t,r){return r===e&&(r=t,t=e),r!==e&&(r=(r=gf(r))==r?r:0),t!==e&&(t=(t=gf(t))==t?t:0),ie(gf(n),t,r)},Pr.clone=function(n){return oe(n,4)},Pr.cloneDeep=function(n){return oe(n,5)},Pr.cloneDeepWith=function(n,t){return oe(n,5,t=\"function\"==typeof t?t:e)},Pr.cloneWith=function(n,t){return oe(n,4,t=\"function\"==typeof t?t:e)},Pr.conformsTo=function(n,t){return null==t||fe(n,t,Rf(t))},Pr.deburr=Nf,Pr.defaultTo=function(n,t){return null==n||n!=n?t:n},Pr.divide=wa,Pr.endsWith=function(n,t,r){n=df(n),t=ou(t);var u=n.length,i=r=r===e?u:ie(vf(r),0,u);return(r-=t.length)>=0&&n.slice(r,i)==t},Pr.eq=$o,Pr.escape=function(n){return(n=df(n))&&V.test(n)?n.replace(Z,tr):n},Pr.escapeRegExp=function(n){return(n=df(n))&&tn.test(n)?n.replace(nn,\"\\\\$&\"):n},Pr.every=function(n,t,r){var u=No(n)?It:he;return r&&gi(n,t,r)&&(t=e),u(n,ii(t,3))},Pr.find=vo,Pr.findIndex=Mi,Pr.findKey=function(n,t){return Bt(n,ii(t,3),de)},Pr.findLast=_o,Pr.findLastIndex=Fi,Pr.findLastKey=function(n,t){return Bt(n,ii(t,3),be)},Pr.floor=ma,Pr.forEach=go,Pr.forEachRight=yo,Pr.forIn=function(n,t){return null==n?n:ge(n,ii(t,3),Wf)},Pr.forInRight=function(n,t){return null==n?n:ye(n,ii(t,3),Wf)},Pr.forOwn=function(n,t){return n&&de(n,ii(t,3))},Pr.forOwnRight=function(n,t){return n&&be(n,ii(t,3))},Pr.get=kf,Pr.gt=Do,Pr.gte=Mo,Pr.has=function(n,t){return null!=n&&hi(n,t,Oe)},Pr.hasIn=If,Pr.head=qi,Pr.identity=ea,Pr.includes=function(n,t,r,e){n=Zo(n)?n:Df(n),r=r&&!e?vf(r):0;var u=n.length;return r<0&&(r=gr(u+r,0)),ff(n)?r<=u&&n.indexOf(t,r)>-1:!!u&&$t(n,t,r)>-1},Pr.indexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:vf(r);return u<0&&(u=gr(e+u,0)),$t(n,t,u)},Pr.inRange=function(n,t,r){return t=pf(t),r===e?(r=t,t=0):r=pf(r),function(n,t,r){return n>=yr(t,r)&&n<gr(t,r)}(n=gf(n),t,r)},Pr.invoke=Ef,Pr.isArguments=Fo,Pr.isArray=No,Pr.isArrayBuffer=qo,Pr.isArrayLike=Zo,Pr.isArrayLikeObject=Ko,Pr.isBoolean=function(n){return!0===n||!1===n||nf(n)&&je(n)==g},Pr.isBuffer=Vo,Pr.isDate=Go,Pr.isElement=function(n){return nf(n)&&1===n.nodeType&&!ef(n)},Pr.isEmpty=function(n){if(null==n)return!0;if(Zo(n)&&(No(n)||\"string\"==typeof n||\"function\"==typeof n.splice||Vo(n)||cf(n)||Fo(n)))return!n.length;var t=si(n);if(t==m||t==k)return!n.size;if(wi(n))return!Te(n).length;for(var r in n)if(Tn.call(n,r))return!1;return!0},Pr.isEqual=function(n,t){return Ee(n,t)},Pr.isEqualWith=function(n,t,r){var u=(r=\"function\"==typeof r?r:e)?r(n,t):e;return u===e?Ee(n,t,e,r):!!u},Pr.isError=Ho,Pr.isFinite=function(n){return\"number\"==typeof n&&qt(n)},Pr.isFunction=Jo,Pr.isInteger=Yo,Pr.isLength=Qo,Pr.isMap=tf,Pr.isMatch=function(n,t){return n===t||Re(n,t,fi(t))},Pr.isMatchWith=function(n,t,r){return r=\"function\"==typeof r?r:e,Re(n,t,fi(t),r)},Pr.isNaN=function(n){return rf(n)&&n!=+n},Pr.isNative=function(n){if(bi(n))throw new xn(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return We(n)},Pr.isNil=function(n){return null==n},Pr.isNull=function(n){return null===n},Pr.isNumber=rf,Pr.isObject=Xo,Pr.isObjectLike=nf,Pr.isPlainObject=ef,Pr.isRegExp=uf,Pr.isSafeInteger=function(n){return Yo(n)&&n>=-9007199254740991&&n<=l},Pr.isSet=of,Pr.isString=ff,Pr.isSymbol=af,Pr.isTypedArray=cf,Pr.isUndefined=function(n){return n===e},Pr.isWeakMap=function(n){return nf(n)&&si(n)==z},Pr.isWeakSet=function(n){return nf(n)&&\"[object WeakSet]\"==je(n)},Pr.join=function(n,t){return null==n?\"\":vr.call(n,t)},Pr.kebabCase=qf,Pr.last=Gi,Pr.lastIndexOf=function(n,t,r){var u=null==n?0:n.length;if(!u)return-1;var i=u;return r!==e&&(i=(i=vf(r))<0?gr(u+i,0):yr(i,u-1)),t==t?function(n,t,r){for(var e=r+1;e--;)if(n[e]===t)return e;return e}(n,t,i):Pt(n,Mt,i,!0)},Pr.lowerCase=Zf,Pr.lowerFirst=Kf,Pr.lt=lf,Pr.lte=sf,Pr.max=function(n){return n&&n.length?pe(n,ea,Ae):e},Pr.maxBy=function(n,t){return n&&n.length?pe(n,ii(t,2),Ae):e},Pr.mean=function(n){return Ft(n,ea)},Pr.meanBy=function(n,t){return Ft(n,ii(t,2))},Pr.min=function(n){return n&&n.length?pe(n,ea,Ce):e},Pr.minBy=function(n,t){return n&&n.length?pe(n,ii(t,2),Ce):e},Pr.stubArray=_a,Pr.stubFalse=ga,Pr.stubObject=function(){return{}},Pr.stubString=function(){return\"\"},Pr.stubTrue=function(){return!0},Pr.multiply=xa,Pr.nth=function(n,t){return n&&n.length?De(n,vf(t)):e},Pr.noConflict=function(){return st._===this&&(st._=$n),this},Pr.noop=aa,Pr.now=Oo,Pr.pad=function(n,t,r){n=df(n);var e=(t=vf(t))?cr(n):0;if(!t||e>=t)return n;var u=(t-e)/2;return Mu(_t(u),r)+n+Mu(pt(u),r)},Pr.padEnd=function(n,t,r){n=df(n);var e=(t=vf(t))?cr(n):0;return t&&e<t?n+Mu(t-e,r):n},Pr.padStart=function(n,t,r){n=df(n);var e=(t=vf(t))?cr(n):0;return t&&e<t?Mu(t-e,r)+n:n},Pr.parseInt=function(n,t,r){return r||null==t?t=0:t&&(t=+t),br(df(n).replace(rn,\"\"),t||0)},Pr.random=function(n,t,r){if(r&&\"boolean\"!=typeof r&&gi(n,t,r)&&(t=r=e),r===e&&(\"boolean\"==typeof t?(r=t,t=e):\"boolean\"==typeof n&&(r=n,n=e)),n===e&&t===e?(n=0,t=1):(n=pf(n),t===e?(t=n,n=0):t=pf(t)),n>t){var u=n;n=t,t=u}if(r||n%1||t%1){var i=wr();return yr(n+i*(t-n+ft(\"1e-\"+((i+\"\").length-1))),t)}return Ze(n,t)},Pr.reduce=function(n,t,r){var e=No(n)?Lt:Zt,u=arguments.length<3;return e(n,ii(t,4),r,u,le)},Pr.reduceRight=function(n,t,r){var e=No(n)?Tt:Zt,u=arguments.length<3;return e(n,ii(t,4),r,u,se)},Pr.repeat=function(n,t,r){return t=(r?gi(n,t,r):t===e)?1:vf(t),Ke(df(n),t)},Pr.replace=function(){var n=arguments,t=df(n[0]);return n.length<3?t:t.replace(n[1],n[2])},Pr.result=function(n,t,r){var u=-1,i=(t=gu(t,n)).length;for(i||(i=1,n=e);++u<i;){var o=null==n?e:n[Ci(t[u])];o===e&&(u=i,o=r),n=Jo(o)?o.call(n):o}return n},Pr.round=ja,Pr.runInContext=n,Pr.sample=function(n){return(No(n)?Hr:Ge)(n)},Pr.size=function(n){if(null==n)return 0;if(Zo(n))return ff(n)?cr(n):n.length;var t=si(n);return t==m||t==k?n.size:Te(n).length},Pr.snakeCase=Vf,Pr.some=function(n,t,r){var u=No(n)?Ct:tu;return r&&gi(n,t,r)&&(t=e),u(n,ii(t,3))},Pr.sortedIndex=function(n,t){return ru(n,t)},Pr.sortedIndexBy=function(n,t,r){return eu(n,t,ii(r,2))},Pr.sortedIndexOf=function(n,t){var r=null==n?0:n.length;if(r){var e=ru(n,t);if(e<r&&$o(n[e],t))return e}return-1},Pr.sortedLastIndex=function(n,t){return ru(n,t,!0)},Pr.sortedLastIndexBy=function(n,t,r){return eu(n,t,ii(r,2),!0)},Pr.sortedLastIndexOf=function(n,t){if(null!=n&&n.length){var r=ru(n,t,!0)-1;if($o(n[r],t))return r}return-1},Pr.startCase=Gf,Pr.startsWith=function(n,t,r){return n=df(n),r=null==r?0:ie(vf(r),0,n.length),t=ou(t),n.slice(r,r+t.length)==t},Pr.subtract=Aa,Pr.sum=function(n){return n&&n.length?Kt(n,ea):0},Pr.sumBy=function(n,t){return n&&n.length?Kt(n,ii(t,2)):0},Pr.template=function(n,t,r){var u=Pr.templateSettings;r&&gi(n,t,r)&&(t=e),n=df(n),t=xf({},t,u,Hu);var i=xf({},t.imports,u.imports,Hu),o=Rf(i),f=Jt(i,o);Ot(o,function(n){if(cn.test(n))throw new xn(\"Invalid `imports` option passed into `_.template`\")});var a,c,l=0,s=t.interpolate||bn,h=\"__p += '\",p=kn((t.escape||bn).source+\"|\"+s.source+\"|\"+(s===J?sn:bn).source+\"|\"+(t.evaluate||bn).source+\"|$\",\"g\"),v=\"//# sourceURL=\"+(Tn.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++et+\"]\")+\"\\n\";n.replace(p,function(t,r,e,u,i,o){return e||(e=u),h+=n.slice(l,o).replace(wn,rr),r&&(a=!0,h+=\"' +\\n__e(\"+r+\") +\\n'\"),i&&(c=!0,h+=\"';\\n\"+i+\";\\n__p += '\"),e&&(h+=\"' +\\n((__t = (\"+e+\")) == null ? '' : __t) +\\n'\"),l=o+t.length,t}),h+=\"';\\n\";var _=Tn.call(t,\"variable\")&&t.variable;if(_){if(cn.test(_))throw new xn(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(c?h.replace(M,\"\"):h).replace(F,\"$1\").replace(N,\"$1;\"),h=\"function(\"+(_||\"obj\")+\") {\\n\"+(_?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(a?\", __e = _.escape\":\"\")+(c?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var g=Qf(function(){return jn(o,v+\"return \"+h).apply(e,f)});if(g.source=h,Ho(g))throw g;return g},Pr.times=function(n,t){if((n=vf(n))<1||n>l)return[];var r=h,e=yr(n,h);t=ii(t),n-=h;for(var u=Vt(e,t);++r<n;)t(r);return u},Pr.toFinite=pf,Pr.toInteger=vf,Pr.toLength=_f,Pr.toLower=function(n){return df(n).toLowerCase()},Pr.toNumber=gf,Pr.toSafeInteger=function(n){return n?ie(vf(n),-9007199254740991,l):0===n?n:0},Pr.toString=df,Pr.toUpper=function(n){return df(n).toUpperCase()},Pr.trim=function(n,t,r){if((n=df(n))&&(r||t===e))return Gt(n);if(!n||!(t=ou(t)))return n;var u=lr(n),i=lr(t);return du(u,Qt(u,i),Xt(u,i)+1).join(\"\")},Pr.trimEnd=function(n,t,r){if((n=df(n))&&(r||t===e))return n.slice(0,sr(n)+1);if(!n||!(t=ou(t)))return n;var u=lr(n);return du(u,0,Xt(u,lr(t))+1).join(\"\")},Pr.trimStart=function(n,t,r){if((n=df(n))&&(r||t===e))return n.replace(rn,\"\");if(!n||!(t=ou(t)))return n;var u=lr(n);return du(u,Qt(u,lr(t))).join(\"\")},Pr.truncate=function(n,t){var r=30,u=\"...\";if(Xo(t)){var i=\"separator\"in t?t.separator:i;r=\"length\"in t?vf(t.length):r,u=\"omission\"in t?ou(t.omission):u}var o=(n=df(n)).length;if(er(n)){var f=lr(n);o=f.length}if(r>=o)return n;var a=r-cr(u);if(a<1)return u;var c=f?du(f,0,a).join(\"\"):n.slice(0,a);if(i===e)return c+u;if(f&&(a+=c.length-a),uf(i)){if(n.slice(a).search(i)){var l,s=c;for(i.global||(i=kn(i.source,df(hn.exec(i))+\"g\")),i.lastIndex=0;l=i.exec(s);)var h=l.index;c=c.slice(0,h===e?a:h)}}else if(n.indexOf(ou(i),a)!=a){var p=c.lastIndexOf(i);p>-1&&(c=c.slice(0,p))}return c+u},Pr.unescape=function(n){return(n=df(n))&&K.test(n)?n.replace(q,hr):n},Pr.uniqueId=function(n){var t=++Cn;return df(n)+t},Pr.upperCase=Hf,Pr.upperFirst=Jf,Pr.each=go,Pr.eachRight=yo,Pr.first=qi,fa(Pr,(ya={},de(Pr,function(n,t){Tn.call(Pr.prototype,t)||(ya[t]=n)}),ya),{chain:!1}),Pr.VERSION=\"4.18.1\",Ot([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(n){Pr[n].placeholder=Pr}),Ot([\"drop\",\"take\"],function(n,t){Fr.prototype[n]=function(r){r=r===e?1:gr(vf(r),0);var u=this.__filtered__&&!t?new Fr(this):this.clone();return u.__filtered__?u.__takeCount__=yr(r,u.__takeCount__):u.__views__.push({size:yr(r,h),type:n+(u.__dir__<0?\"Right\":\"\")}),u},Fr.prototype[n+\"Right\"]=function(t){return this.reverse()[n](t).reverse()}}),Ot([\"filter\",\"map\",\"takeWhile\"],function(n,t){var r=t+1,e=1==r||3==r;Fr.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:ii(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),Ot([\"head\",\"last\"],function(n,t){var r=\"take\"+(t?\"Right\":\"\");Fr.prototype[n]=function(){return this[r](1).value()[0]}}),Ot([\"initial\",\"tail\"],function(n,t){var r=\"drop\"+(t?\"\":\"Right\");Fr.prototype[n]=function(){return this.__filtered__?new Fr(this):this[r](1)}}),Fr.prototype.compact=function(){return this.filter(ea)},Fr.prototype.find=function(n){return this.filter(n).head()},Fr.prototype.findLast=function(n){return this.reverse().find(n)},Fr.prototype.invokeMap=Ve(function(n,t){return\"function\"==typeof n?new Fr(this):this.map(function(r){return Se(r,n,t)})}),Fr.prototype.reject=function(n){return this.filter(To(ii(n)))},Fr.prototype.slice=function(n,t){n=vf(n);var r=this;return r.__filtered__&&(n>0||t<0)?new Fr(r):(n<0?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==e&&(r=(t=vf(t))<0?r.dropRight(-t):r.take(t-n)),r)},Fr.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Fr.prototype.toArray=function(){return this.take(h)},de(Fr.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),u=/^(?:head|last)$/.test(t),i=Pr[u?\"take\"+(\"last\"==t?\"Right\":\"\"):t],o=u||/^find/.test(t);i&&(Pr.prototype[t]=function(){var t=this.__wrapped__,f=u?[1]:arguments,a=t instanceof Fr,c=f[0],l=a||No(t),s=function(n){var t=i.apply(Pr,Wt([n],f));return u&&h?t[0]:t};l&&r&&\"function\"==typeof c&&1!=c.length&&(a=l=!1);var h=this.__chain__,p=!!this.__actions__.length,v=o&&!h,_=a&&!p;if(!o&&l){t=_?t:new Fr(this);var g=n.apply(t,f);return g.__actions__.push({func:so,args:[s],thisArg:e}),new Mr(g,h)}return v&&_?n.apply(this,f):(g=this.thru(s),v?u?g.value()[0]:g.value():g)})}),Ot([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(n){var t=zn[n],r=/^(?:push|sort|unshift)$/.test(n)?\"tap\":\"thru\",e=/^(?:pop|shift)$/.test(n);Pr.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(No(u)?u:[],n)}return this[r](function(r){return t.apply(No(r)?r:[],n)})}}),de(Fr.prototype,function(n,t){var r=Pr[t];if(r){var e=r.name+\"\";Tn.call(zr,e)||(zr[e]=[]),zr[e].push({name:t,func:r})}}),zr[Bu(e,2).name]=[{name:\"wrapper\",func:e}],Fr.prototype.clone=function(){var n=new Fr(this.__wrapped__);return n.__actions__=ku(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=ku(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=ku(this.__views__),n},Fr.prototype.reverse=function(){if(this.__filtered__){var n=new Fr(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},Fr.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,r=No(n),e=t<0,u=r?n.length:0,i=function(n,t,r){for(var e=-1,u=r.length;++e<u;){var i=r[e],o=i.size;switch(i.type){case\"drop\":n+=o;break;case\"dropRight\":t-=o;break;case\"take\":t=yr(t,n+o);break;case\"takeRight\":n=gr(n,t-o)}}return{start:n,end:t}}(0,u,this.__views__),o=i.start,f=i.end,a=f-o,c=e?f:o-1,l=this.__iteratees__,s=l.length,h=0,p=yr(a,this.__takeCount__);if(!r||!e&&u==a&&p==a)return su(n,this.__actions__);var v=[];n:for(;a--&&h<p;){for(var _=-1,g=n[c+=t];++_<s;){var y=l[_],d=y.iteratee,b=y.type,w=d(g);if(2==b)g=w;else if(!w){if(1==b)continue n;break n}}v[h++]=g}return v},Pr.prototype.at=ho,Pr.prototype.chain=function(){return lo(this)},Pr.prototype.commit=function(){return new Mr(this.value(),this.__chain__)},Pr.prototype.next=function(){this.__values__===e&&(this.__values__=hf(this.value()));var n=this.__index__>=this.__values__.length;return{done:n,value:n?e:this.__values__[this.__index__++]}},Pr.prototype.plant=function(n){for(var t,r=this;r instanceof Dr;){var u=Bi(r);u.__index__=0,u.__values__=e,t?i.__wrapped__=u:t=u;var i=u;r=r.__wrapped__}return i.__wrapped__=n,t},Pr.prototype.reverse=function(){var n=this.__wrapped__;if(n instanceof Fr){var t=n;return this.__actions__.length&&(t=new Fr(this)),(t=t.reverse()).__actions__.push({func:so,args:[Qi],thisArg:e}),new Mr(t,this.__chain__)}return this.thru(Qi)},Pr.prototype.toJSON=Pr.prototype.valueOf=Pr.prototype.value=function(){return su(this.__wrapped__,this.__actions__)},Pr.prototype.first=Pr.prototype.head,Qn&&(Pr.prototype[Qn]=function(){return this}),Pr}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(st._=pr,define(function(){return pr})):pt?((pt.exports=pr)._=pr,ht._=pr):st._=pr}.call(this)}},t={};function r(e){var u=t[e];if(void 0!==u)return u.exports;var i=t[e]={id:e,loaded:!1,exports:{}};return n[e].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.d=(n,t)=>{for(var e in t)r.o(t,e)&&!r.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(n){if(\"object\"==typeof window)return window}}(),r.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t),r.r=n=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(n,\"__esModule\",{value:!0})},r.nmd=n=>(n.paths=[],n.children||(n.children=[]),n);var e={};(()=>{\"use strict\";r.r(e),r.d(e,{createNoPaymentStrategy:()=>o});var n=r(9440);class t extends Error{constructor(n){var t;super(n||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class u extends t{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class i{constructor(n){this._paymentIntegrationService=n}execute(t,r){return e=this,u=void 0,o=function*(){yield this._paymentIntegrationService.submitOrder((0,n.omit)(t,\"payment\"),r)},new((i=void 0)||(i=Promise))(function(n,t){function r(n){try{a(o.next(n))}catch(n){t(n)}}function f(n){try{a(o.throw(n))}catch(n){t(n)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i(function(n){n(e)})).then(r,f)}a((o=o.apply(e,u||[])).next())});var e,u,i,o}finalize(){return Promise.reject(new u)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const o=Object.assign(n=>new i(n),{resolveIds:[{id:\"nopaymentdatarequired\"}]})})(),module.exports=e})();\n//# sourceMappingURL=no-payment.js.map"
  },
  {
    "path": "dist/cjs/integrations/offline.js",
    "content": "(()=>{\"use strict\";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})}},t={};e.r(t),e.d(t,{createOfflinePaymentStrategy:()=>i});class r extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class n extends r{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class o{constructor(e){this._paymentIntegrationService=e}execute(e,t){return r=this,n=void 0,i=function*(){return yield this._paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:e.payment?{methodId:e.payment.methodId}:void 0}),t),Promise.resolve()},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{c(i.next(e))}catch(e){t(e)}}function s(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o(function(e){e(r)})).then(a,s)}c((i=i.apply(r,n||[])).next())});var r,n,o,i}finalize(){return Promise.reject(new n)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const i=Object.assign(e=>new o(e),{resolveIds:[{type:\"PAYMENT_TYPE_OFFLINE\"}]});module.exports=t})();\n//# sourceMappingURL=offline.js.map"
  },
  {
    "path": "dist/cjs/integrations/offsite.js",
    "content": "(()=>{\"use strict\";var e,t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})}},r={};function n(e){return!(\"object\"!=typeof e||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument)}t.r(r),t.d(r,{createOffsitePaymentStrategy:()=>c});class o extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class a extends o{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class i extends a{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}!function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(e||(e={}));const s=e;class u extends o{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}var d=function(e,t,r,n){return new(r||(r=Promise))(function(o,a){function i(e){try{u(n.next(e))}catch(e){a(e)}}function s(e){try{u(n.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(i,s)}u((n=n.apply(e,t||[])).next())})};class l{constructor(e){this._paymentIntegrationService=e}execute(e,t){return d(this,void 0,void 0,function*(){const{payment:r}=e,o=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"payment\"]),a=this._shouldSubmitFullPayload(r)?e:o,s=r&&r.paymentData,u=s&&Boolean(s.instrumentId)&&s.instrumentId||void 0,d=s&&n(s)&&s.shouldSaveInstrument||void 0,l=s&&n(s)&&s.shouldSetAsDefaultInstrument||void 0;if(!r)throw new i([\"payment\"]);const{methodId:c,gatewayId:y}=r;yield this._paymentIntegrationService.submitOrder(a,t),yield this._paymentIntegrationService.initializeOffsitePayment({methodId:c,gatewayId:y,instrumentId:u,shouldSaveInstrument:d,shouldSetAsDefaultInstrument:l})})}finalize(e){return d(this,void 0,void 0,function*(){const t=this._paymentIntegrationService.getState(),r=t.getOrder(),n=t.getPaymentStatus();if(!r||n!==s.ACKNOWLEDGE&&n!==s.FINALIZE)return Promise.reject(new u);yield this._paymentIntegrationService.finalizeOrder(e)})}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_shouldSubmitFullPayload(e){return!!e&&(\"adyen\"===e.gatewayId||\"barclaycard\"===e.gatewayId)}}const c=Object.assign(e=>new l(e),{resolveIds:[{type:\"PAYMENT_TYPE_HOSTED\"}]});module.exports=r})();\n//# sourceMappingURL=offsite.js.map"
  },
  {
    "path": "dist/cjs/integrations/paypal-commerce.js",
    "content": "(()=>{var e={9165(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){var t=new r.default;return new i.default(t,e)};var r=n(9828),i=n(5470)},9828(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.build=function(e,t,n){var r=this,i=document.createElement(\"form\");return i.style.display=\"none\",i.setAttribute(\"action\",e),i.setAttribute(\"method\",\"POST\"),i.setAttribute(\"target\",n||\"_top\"),Object.keys(t).forEach(function(e){var n=t[e];i.appendChild(r._createInput(n,e))}),i},e.prototype._createInput=function(e,t){var n=document.createElement(\"input\");return n.setAttribute(\"name\",t),n.setAttribute(\"type\",\"hidden\"),n.setAttribute(\"value\",e),n},e}();t.default=n},5470(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(9783),i=function(){function e(e,t){this._formBuilder=e,this._options=t}return e.prototype.postForm=function(e,t,n,r){var i=this._formBuilder.build(this._prependHost(e),t,r);window.addEventListener(\"unload\",function e(){window.removeEventListener(\"unload\",e),n&&n()}),document.body.appendChild(i),i.submit()},e.prototype._prependHost=function(e){return this._options&&this._options.host&&!(0,r.isAbsoluteUrl)(e)?(0,r.joinPaths)(this._options.host,e):e},e}();t.default=i},8686(e,t,n){\"use strict\";t.createFormPoster=void 0;var r=n(9165);Object.defineProperty(t,\"createFormPoster\",{enumerable:!0,get:function(){return r.default}});n(5470)},9783(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isAbsoluteUrl=function(e){return/^https?:\\/\\//.test(e)},t.joinPaths=function(e,t){return\"\".concat((n=e,n.replace(/\\/$/,\"\")),\"/\").concat(function(e){return e.replace(/^\\//,\"\")}(t));var n}},4325(e,t,n){\"use strict\";n.d(t,{g:()=>i});var r=n(5889),i=function(){function e(){this._cache={}}return e.prototype.read=function(e,t){var n=this.getKey(e,t.params);return this._cache[n]||null},e.prototype.write=function(e,t,n){var r=this.getKey(e,t.params);this._cache[r]=n},e.prototype.getKey=function(e,t){return void 0===t&&(t={}),0===Object.keys(t).length?e:\"\".concat(e,\"?\").concat(r.stringify(t))},e}()},321(e,t,n){\"use strict\";n.d(t,{A:()=>s});var r=n(168),i=n(1675),o=n(5861),a=n(4670);function s(e){return new a.A(new o.A,new i.A,r,e)}},6889(e,t,n){\"use strict\";n.d(t,{A:()=>i});var r=n(2024);function i(e){return new r.A(e)}},4043(e,t,n){\"use strict\";n.r(t),n.d(t,{RequestSender:()=>o.A,Timeout:()=>a.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),a=n(2024)},4843(e,t,n){\"use strict\";function r(e){return!!e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof e.then}n.d(t,{A:()=>r})},1675(e,t,n){\"use strict\";n.d(t,{A:()=>s});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,a=/application\\/x-www-form-urlencoded/;const s=function(){function e(){}return e.prototype.toRequestBody=function(e){var t=e.headers?this._getHeader(e.headers,\"Content-Type\"):\"\";if(e.body){if(o.test(t))return JSON.stringify(e.body);if(a.test(t))return(0,i.A)(e.body)}return e.body},e.prototype.toResponse=function(e){var t=this._parseResponseHeaders(e.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in e?e.response:e.responseText,t),headers:t,status:e.status,statusText:e.statusText}},e.prototype._parseResponseBody=function(e,t){var n=this._getHeader(t,\"Content-Type\");return e&&o.test(n)?JSON.parse(e):e},e.prototype._parseResponseHeaders=function(e){return(e?e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(e,t){var n,i=t.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},e),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):e},{})},e.prototype._getHeader=function(e,t){return e&&t&&(e[t]||e[t.toLowerCase()])||\"\"},e}()},5861(e,t,n){\"use strict\";n.d(t,{A:()=>i});var r=n(5889);const i=function(){function e(){}return e.prototype.createRequest=function(e,t){var n=new XMLHttpRequest;return this._configureRequest(n,e,t),n},e.prototype._configureRequest=function(e,t,n){void 0===n&&(n={}),e.open(n.method||\"GET\",this._formatUrl(t,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(e,n.headers),\"boolean\"==typeof n.credentials&&(e.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(e.timeout=n.timeout)},e.prototype._configureRequestHeaders=function(e,t){Object.keys(t).filter(function(e){return null!==t[e]}).forEach(function(n){e.setRequestHeader(n,t[n])})},e.prototype._formatUrl=function(e,t,n){return void 0===n&&(n=!0),t&&0!==Object.keys(t).length?\"\".concat(e,\"?\").concat(r.stringify(t,{encode:n})):e},e}()},4670(e,t,n){\"use strict\";n.d(t,{A:()=>c});var r=n(1635),i=n(35),o=n.n(i),a=n(4325),s=n(4843),u=n(2024);const c=function(){function e(e,t,n,r){void 0===r&&(r={}),this._requestFactory=e,this._payloadTransformer=t,this._cookie=n,this._options=r,this._cache=this._options.cache||new a.g}return e.prototype.sendRequest=function(e,t){var n=this,r=this._mergeDefaultOptions(e,t),i=this._getCachedRequest(e,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(e),r);return new Promise(function(t,i){var a=function(){var a=n._payloadTransformer.toResponse(o);a.status>=200&&a.status<300?(n._cacheRequest(e,r,a),t(a)):i(a)};o.onload=a,o.onerror=a,o.onabort=a,o.ontimeout=a,r.timeout instanceof u.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,s.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},e.prototype.get=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"GET\"}))},e.prototype.post=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"POST\"}))},e.prototype.put=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"PUT\"}))},e.prototype.patch=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"PATCH\"}))},e.prototype.delete=function(e,t){return this.sendRequest(e,(0,r.__assign)((0,r.__assign)({},t),{method:\"DELETE\"}))},e.prototype._mergeDefaultOptions=function(e,t){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(e,t)&&this._isLocalRequest(e)&&(n.headers[\"X-XSRF-TOKEN\"]=r),t&&t.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,t)},e.prototype._prependHost=function(e){return!this._options.host||/^https?:\\/\\//.test(e)?e:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(e.replace(/^\\//,\"\"))},e.prototype._shouldCacheRequest=function(e){return\"GET\"===(e.method||\"GET\").toUpperCase()&&Boolean(e.cache)},e.prototype._getCachedRequest=function(e,t){return this._shouldCacheRequest(t)?this._cache.read(e,t):null},e.prototype._cacheRequest=function(e,t,n){this._shouldCacheRequest(t)&&this._cache.write(e,t,n)},e.prototype._isAssetRequest=function(e,t){return(!t||!t.method||\"GET\"===t.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(e.split(\"?\")[0])},e.prototype._isLocalRequest=function(e){return!!e.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!e.match(new RegExp(\"^(https?:)?//\"))},e}()},2024(e,t,n){\"use strict\";n.d(t,{A:()=>r});const r=function(){function e(e){var t=this;this._delay=e,this._promise=new Promise(function(e){t._resolve=e})}return e.prototype.onComplete=function(e){this._promise.then(e)},e.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},e.prototype.start=function(){var e=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return e.complete()},this._delay))},e}()},710(e,t,n){\"use strict\";function r(e){return\"object\"!=typeof e||null===e?e:Object.keys(e).filter(function(t){return void 0!==e[t]}).map(function(t){var n=e[t];return\"string\"==typeof n?\"\".concat(t,\"=\").concat(encodeURIComponent(n)):\"\".concat(t,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(t,{A:()=>r})},5889(e,t,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),a=n(3814);function s(e){if(\"string\"!=typeof e||1!==e.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function u(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}function c(e,t){return t.decode?i(e):e}function l(e){return Array.isArray(e)?e.sort():\"object\"==typeof e?l(Object.keys(e)).sort((e,t)=>Number(e)-Number(t)).map(t=>e[t]):e}function d(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function p(e){const t=(e=d(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function h(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&\"string\"==typeof e&&\"\"!==e.trim()?e=Number(e):!t.parseBooleans||null===e||\"true\"!==e.toLowerCase()&&\"false\"!==e.toLowerCase()||(e=\"true\"===e.toLowerCase()),e}function f(e,t){s((t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const n=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,n,r)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case\"bracket\":return(e,n,r)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};case\"comma\":case\"separator\":return(t,n,r)=>{const i=\"string\"==typeof n&&n.includes(e.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&c(n,e).includes(e.arrayFormatSeparator);n=o?c(n,e):n;const a=i||o?n.split(e.arrayFormatSeparator).map(t=>c(t,e)):null===n?n:c(n,e);r[t]=a};default:return(e,t,n)=>{void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t),r=Object.create(null);if(\"string\"!=typeof e)return r;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return r;for(const i of e.split(\"&\")){if(\"\"===i)continue;let[e,a]=o(t.decode?i.replace(/\\+/g,\" \"):i,\"=\");a=void 0===a?null:[\"comma\",\"separator\"].includes(t.arrayFormat)?a:c(a,t),n(c(e,t),a,r)}for(const e of Object.keys(r)){const n=r[e];if(\"object\"==typeof n&&null!==n)for(const e of Object.keys(n))n[e]=h(n[e],t);else r[e]=h(n,t)}return!1===t.sort?r:(!0===t.sort?Object.keys(r).sort():Object.keys(r).sort(t.sort)).reduce((e,t)=>{const n=r[t];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?e[t]=l(n):e[t]=n,e},Object.create(null))}t.extract=p,t.parse=f,t.stringify=(e,t)=>{if(!e)return\"\";s((t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},t)).arrayFormatSeparator);const n=n=>t.skipNull&&null==e[n]||t.skipEmptyString&&\"\"===e[n],r=function(e){switch(e.arrayFormat){case\"index\":return t=>(n,r)=>{const i=n.length;return void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(t,e),\"[\",i,\"]\"].join(\"\")]:[...n,[u(t,e),\"[\",u(i,e),\"]=\",u(r,e)].join(\"\")]};case\"bracket\":return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(t,e),\"[]\"].join(\"\")]:[...n,[u(t,e),\"[]=\",u(r,e)].join(\"\")];case\"comma\":case\"separator\":return t=>(n,r)=>null==r||0===r.length?n:0===n.length?[[u(t,e),\"=\",u(r,e)].join(\"\")]:[[n,u(r,e)].join(e.arrayFormatSeparator)];default:return t=>(n,r)=>void 0===r||e.skipNull&&null===r||e.skipEmptyString&&\"\"===r?n:null===r?[...n,u(t,e)]:[...n,[u(t,e),\"=\",u(r,e)].join(\"\")]}}(t),i={};for(const t of Object.keys(e))n(t)||(i[t]=e[t]);const o=Object.keys(i);return!1!==t.sort&&o.sort(t.sort),o.map(n=>{const i=e[n];return void 0===i?\"\":null===i?u(n,t):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):u(n,t)+\"=\"+u(i,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[n,r]=o(e,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:f(p(e),t)},t&&t.parseFragmentIdentifier&&r?{fragmentIdentifier:c(r,t)}:{})},t.stringifyUrl=(e,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=d(e.url).split(\"?\")[0]||\"\",i=t.extract(e.url),o=t.parse(i,{sort:!1}),a=Object.assign(o,e.query);let s=t.stringify(a,n);s&&(s=`?${s}`);let c=function(e){let t=\"\";const n=e.indexOf(\"#\");return-1!==n&&(t=e.slice(n)),t}(e.url);return e.fragmentIdentifier&&(c=`#${u(e.fragmentIdentifier,n)}`),`${r}${s}${c}`},t.pick=(e,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:s}=t.parseUrl(e,r);return t.stringifyUrl({url:i,query:a(o,n),fragmentIdentifier:s},r)},t.exclude=(e,n,r)=>{const i=Array.isArray(n)?e=>!n.includes(e):(e,t)=>!n(e,t);return t.pick(e,i,r)}},5477(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(){}return e.prototype.canSupportRel=function(e){var t=document.createElement(\"link\");return!!(t.relList&&t.relList.supports&&t.relList.supports(e))},e}();t.default=n},471(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(e,t,n){\"use strict\";t.vQ=void 0;n(4886),n(471);var r=n(5895);Object.defineProperty(t,\"vQ\",{enumerable:!0,get:function(){return r.default}});n(7995),n(9722),n(282)},4886(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._scripts={},this._preloadedScripts={}}return e.prototype.loadScript=function(e,t){var n=this;return this._scripts[e]||(this._scripts[e]=new Promise(function(r,i){var o=document.createElement(\"script\"),a=t||{},s=a.async,u=void 0!==s&&s,c=a.attributes,l=void 0===c?{}:c;Object.keys(l).forEach(function(e){o.setAttribute(e,l[e])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(t){delete n._scripts[e],i(t)},o.async=u,o.src=e,document.body.appendChild(o)})),this._scripts[e]},e.prototype.loadScripts=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.loadScript(e,t)})).then(function(){})},e.prototype.preloadScript=function(e,t){var n=this;return this._preloadedScripts[e]||(this._preloadedScripts[e]=new Promise(function(r,i){var o=(t||{}).prefetch,a=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var s=document.createElement(\"link\");s.as=\"script\",s.rel=a,s.href=e,s.onload=function(){r()},s.onerror=function(){delete n._preloadedScripts[e],i()},document.head.appendChild(s)}else n._requestSender.get(e,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[e]},e.prototype.preloadScripts=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.preloadScript(e,t)})).then(function(){})},e}();t.default=n},7995(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(){function e(e,t){this._browserSupport=e,this._requestSender=t,this._stylesheets={},this._preloadedStylesheets={}}return e.prototype.loadStylesheet=function(e,t){var n=this;return this._stylesheets[e]||(this._stylesheets[e]=new Promise(function(r,i){var o=document.createElement(\"link\"),a=t||{},s=a.prepend,u=void 0!==s&&s,c=a.attributes,l=void 0===c?{}:c;Object.keys(l).forEach(function(e){o.setAttribute(e,l[e])}),o.onload=function(){return r()},o.onerror=function(t){delete n._stylesheets[e],i(t)},o.rel=\"stylesheet\",o.href=e,u&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[e]},e.prototype.loadStylesheets=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.loadStylesheet(e,t)})).then(function(){})},e.prototype.preloadStylesheet=function(e,t){var n=this;return this._preloadedStylesheets[e]||(this._preloadedStylesheets[e]=new Promise(function(r,i){var o=(t||{}).prefetch,a=void 0!==o&&o,s=a?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(s)){var u=document.createElement(\"link\");u.as=\"style\",u.rel=a?\"prefetch\":\"preload\",u.href=e,u.onload=function(){r()},u.onerror=function(t){delete n._preloadedStylesheets[e],i(t)},document.head.appendChild(u)}else n._requestSender.get(e,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[e]},e.prototype.preloadStylesheets=function(e,t){var n=this;return Promise.all(e.map(function(e){return n.preloadStylesheet(e,t)})).then(function(){})},e}();t.default=n},1915(e){\"use strict\";var t=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+t+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+t+\")+\",\"gi\");function i(e,t){try{return[decodeURIComponent(e.join(\"\"))]}catch(e){}if(1===e.length)return e;t=t||1;var n=e.slice(0,t),r=e.slice(t);return Array.prototype.concat.call([],i(n),i(r))}function o(e){try{return decodeURIComponent(e)}catch(o){for(var t=e.match(n)||[],r=1;r<t.length;r++)t=(e=i(t,r).join(\"\")).match(n)||[];return e}}e.exports=function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof e+\"`\");try{return e=e.replace(/\\+/g,\" \"),decodeURIComponent(e)}catch(t){return function(e){for(var t={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(e);n;){try{t[n[0]]=decodeURIComponent(n[0])}catch(e){var i=o(n[0]);i!==n[0]&&(t[n[0]]=i)}n=r.exec(e)}t[\"%C2\"]=\"�\";for(var a=Object.keys(t),s=0;s<a.length;s++){var u=a[s];e=e.replace(new RegExp(u,\"g\"),t[u])}return e}(e)}}},3814(e){\"use strict\";e.exports=function(e,t){for(var n={},r=Object.keys(e),i=Array.isArray(t),o=0;o<r.length;o++){var a=r[o],s=e[a];(i?-1!==t.indexOf(a):t(a,s,e))&&(n[a]=s)}return n}},168(e){var t;t=function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(t,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=e({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var a=JSON.stringify(n);/^[\\{\\[]/.test(a)&&(n=a)}catch(e){}n=r.write?r.write(n,t):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var s=\"\";for(var u in o)o[u]&&(s+=\"; \"+u,!0!==o[u]&&(s+=\"=\"+o[u].split(\";\")[0]));return document.cookie=t+\"=\"+n+s}}function a(e,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],a=0;a<o.length;a++){var s=o[a].split(\"=\"),u=s.slice(1).join(\"=\");n||'\"'!==u.charAt(0)||(u=u.slice(1,-1));try{var c=t(s[0]);if(u=(r.read||r)(u,c)||t(u),n)try{u=JSON.parse(u)}catch(e){}if(i[c]=u,e===c)break}catch(e){}}return e?i[e]:i}}return i.set=o,i.get=function(e){return a(e,!1)},i.getJSON=function(e){return a(e,!0)},i.remove=function(t,n){o(t,\"\",e(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(t),e.exports=t()},35(e,t,n){e=n.nmd(e);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",a=\"[object Function]\",s=\"[object Object]\",u=/^\\[object .+?Constructor\\]$/,c=/^(?:0|[1-9]\\d*)$/,l={};l[\"[object Float32Array]\"]=l[\"[object Float64Array]\"]=l[\"[object Int8Array]\"]=l[\"[object Int16Array]\"]=l[\"[object Int32Array]\"]=l[\"[object Uint8Array]\"]=l[\"[object Uint8ClampedArray]\"]=l[\"[object Uint16Array]\"]=l[\"[object Uint32Array]\"]=!0,l[o]=l[\"[object Array]\"]=l[\"[object ArrayBuffer]\"]=l[\"[object Boolean]\"]=l[\"[object DataView]\"]=l[\"[object Date]\"]=l[\"[object Error]\"]=l[a]=l[\"[object Map]\"]=l[\"[object Number]\"]=l[s]=l[\"[object RegExp]\"]=l[\"[object Set]\"]=l[\"[object String]\"]=l[\"[object WeakMap]\"]=!1;var d,p,h,f=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,y=\"object\"==typeof self&&self&&self.Object===Object&&self,g=f||y||Function(\"return this\")(),v=t&&!t.nodeType&&t,m=v&&e&&!e.nodeType&&e,_=m&&m.exports===v,b=_&&f.process,S=function(){try{return m&&m.require&&m.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(e){}}(),w=S&&S.isTypedArray,I=Array.prototype,P=Function.prototype,C=Object.prototype,O=g[\"__core-js_shared__\"],A=P.toString,E=C.hasOwnProperty,z=(d=/[^.]+$/.exec(O&&O.keys&&O.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+d:\"\",k=C.toString,T=A.call(Object),j=RegExp(\"^\"+A.call(E).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),x=_?g.Buffer:void 0,F=g.Symbol,M=g.Uint8Array,B=(x&&x.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(e){return p(h(e))}),N=Object.create,D=C.propertyIsEnumerable,U=I.splice,R=F?F.toStringTag:void 0,L=function(){try{var e=se(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),V=x?x.isBuffer:void 0,G=Math.max,q=Date.now,$=se(g,\"Map\"),W=se(Object,\"create\"),H=function(){function e(){}return function(t){if(!_e(t))return{};if(N)return N(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function K(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Y(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Z(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function J(e){var t=this.__data__=new Y(e);this.size=t.size}function X(e,t,n){(void 0!==n&&!pe(e[t],n)||void 0===n&&!(t in e))&&te(e,t,n)}function Q(e,t,n){var r=e[t];E.call(e,t)&&pe(r,n)&&(void 0!==n||t in e)||te(e,t,n)}function ee(e,t){for(var n=e.length;n--;)if(pe(e[n][0],t))return n;return-1}function te(e,t,n){\"__proto__\"==t&&L?L(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}K.prototype.clear=function(){this.__data__=W?W(null):{},this.size=0},K.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},K.prototype.get=function(e){var t=this.__data__;if(W){var n=t[e];return n===r?void 0:n}return E.call(t,e)?t[e]:void 0},K.prototype.has=function(e){var t=this.__data__;return W?void 0!==t[e]:E.call(t,e)},K.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=W&&void 0===t?r:t,this},Y.prototype.clear=function(){this.__data__=[],this.size=0},Y.prototype.delete=function(e){var t=this.__data__,n=ee(t,e);return!(n<0||(n==t.length-1?t.pop():U.call(t,n,1),--this.size,0))},Y.prototype.get=function(e){var t=this.__data__,n=ee(t,e);return n<0?void 0:t[n][1]},Y.prototype.has=function(e){return ee(this.__data__,e)>-1},Y.prototype.set=function(e,t){var n=this.__data__,r=ee(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Z.prototype.clear=function(){this.size=0,this.__data__={hash:new K,map:new($||Y),string:new K}},Z.prototype.delete=function(e){var t=ae(this,e).delete(e);return this.size-=t?1:0,t},Z.prototype.get=function(e){return ae(this,e).get(e)},Z.prototype.has=function(e){return ae(this,e).has(e)},Z.prototype.set=function(e,t){var n=ae(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},J.prototype.clear=function(){this.__data__=new Y,this.size=0},J.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},J.prototype.get=function(e){return this.__data__.get(e)},J.prototype.has=function(e){return this.__data__.has(e)},J.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Y){var r=n.__data__;if(!$||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Z(r)}return n.set(e,t),this.size=n.size,this};function ne(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":R&&R in Object(e)?function(e){var t=E.call(e,R),n=e[R];try{e[R]=void 0;var r=!0}catch(e){}var i=k.call(e);return r&&(t?e[R]=n:delete e[R]),i}(e):function(e){return k.call(e)}(e)}function re(e){return be(e)&&ne(e)==o}function ie(e,t,n,r,i){e!==t&&function(e,t,n){for(var r=-1,i=Object(e),o=n(e),a=o.length;a--;){var s=o[++r];if(!1===t(i[s],s,i))break}}(t,function(o,a){if(i||(i=new J),_e(o))!function(e,t,n,r,i,o,a){var u=le(e,n),c=le(t,n),l=a.get(c);if(l)X(e,n,l);else{var d,p,h,f,y,g=o?o(u,c,n+\"\",e,t,a):void 0,v=void 0===g;if(v){var m=fe(c),_=!m&&ge(c),b=!m&&!_&&Se(c);g=c,m||_||b?fe(u)?g=u:be(y=u)&&ye(y)?g=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}(u):_?(v=!1,g=function(e){return e.slice()}(c)):b?(v=!1,f=new(h=(d=c).buffer).constructor(h.byteLength),new M(f).set(new M(h)),p=f,g=new d.constructor(p,d.byteOffset,d.length)):g=[]:function(e){if(!be(e)||ne(e)!=s)return!1;var t=B(e);if(null===t)return!0;var n=E.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&A.call(n)==T}(c)||he(c)?(g=u,he(u)?g=function(e){return function(e,t,n){var r=!n;n||(n={});for(var i=-1,o=t.length;++i<o;){var a=t[i],s=void 0;void 0===s&&(s=e[a]),r?te(n,a,s):Q(n,a,s)}return n}(e,we(e))}(u):_e(u)&&!ve(u)||(g=function(e){return\"function\"!=typeof e.constructor||ce(e)?{}:H(B(e))}(c))):v=!1}v&&(a.set(c,g),i(g,c,r,o,a),a.delete(c)),X(e,n,g)}}(e,t,a,n,ie,r,i);else{var u=r?r(le(e,a),o,a+\"\",e,t,i):void 0;void 0===u&&(u=o),X(e,a,u)}},we)}var oe=L?function(e,t){return L(e,\"toString\",{configurable:!0,enumerable:!1,value:(n=t,function(){return n}),writable:!0});var n}:Ce;function ae(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function se(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!_e(e)||function(e){return!!z&&z in e}(e))&&(ve(e)?j:u).test(function(e){if(null!=e){try{return A.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e))}(n)?n:void 0}function ue(e,t){var n=typeof e;return!!(t=t??i)&&(\"number\"==n||\"symbol\"!=n&&c.test(e))&&e>-1&&e%1==0&&e<t}function ce(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||C)}function le(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var de=function(e){var t=0,n=0;return function(){var r=q(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(oe);function pe(e,t){return e===t||e!=e&&t!=t}var he=re(function(){return arguments}())?re:function(e){return be(e)&&E.call(e,\"callee\")&&!D.call(e,\"callee\")},fe=Array.isArray;function ye(e){return null!=e&&me(e.length)&&!ve(e)}var ge=V||function(){return!1};function ve(e){if(!_e(e))return!1;var t=ne(e);return t==a||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function me(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=i}function _e(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function be(e){return null!=e&&\"object\"==typeof e}var Se=w?function(e){return function(t){return e(t)}}(w):function(e){return be(e)&&me(e.length)&&!!l[ne(e)]};function we(e){return ye(e)?function(e,t){var n=fe(e),r=!n&&he(e),i=!n&&!r&&ge(e),o=!n&&!r&&!i&&Se(e),a=n||r||i||o,s=a?function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}(e.length,String):[],u=s.length;for(var c in e)!t&&!E.call(e,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||ue(c,u))||s.push(c);return s}(e,!0):function(e){if(!_e(e))return function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}(e);var t=ce(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&E.call(e,r))&&n.push(r);return n}(e)}var Ie,Pe=(Ie=function(e,t,n){ie(e,t,n)},function(e,t){return de(function(e,t,n){return t=G(void 0===t?e.length-1:t,0),function(){for(var r=arguments,i=-1,o=G(r.length-t,0),a=Array(o);++i<o;)a[i]=r[t+i];i=-1;for(var s=Array(t+1);++i<t;)s[i]=r[i];return s[t]=n(a),function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}(e,this,s)}}(e,t,Ce),e+\"\")}(function(e,t){var n=-1,r=t.length,i=r>1?t[r-1]:void 0,o=r>2?t[2]:void 0;for(i=Ie.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(e,t,n){if(!_e(n))return!1;var r=typeof t;return!!(\"number\"==r?ye(n)&&ue(t,n.length):\"string\"==r&&t in n)&&pe(n[t],e)}(t[0],t[1],o)&&(i=r<3?void 0:i,r=1),e=Object(e);++n<r;){var a=t[n];a&&Ie(e,a,n)}return e}));function Ce(e){return e}e.exports=Pe},9440(e,t,n){e=n.nmd(e),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",s=32,u=128,c=1/0,l=9007199254740991,d=NaN,p=4294967295,h=[[\"ary\",u],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",s],[\"partialRight\",64],[\"rearg\",256]],f=\"[object Arguments]\",y=\"[object Array]\",g=\"[object Boolean]\",v=\"[object Date]\",m=\"[object Error]\",_=\"[object Function]\",b=\"[object GeneratorFunction]\",S=\"[object Map]\",w=\"[object Number]\",I=\"[object Object]\",P=\"[object Promise]\",C=\"[object RegExp]\",O=\"[object Set]\",A=\"[object String]\",E=\"[object Symbol]\",z=\"[object WeakMap]\",k=\"[object ArrayBuffer]\",T=\"[object DataView]\",j=\"[object Float32Array]\",x=\"[object Float64Array]\",F=\"[object Int8Array]\",M=\"[object Int16Array]\",B=\"[object Int32Array]\",N=\"[object Uint8Array]\",D=\"[object Uint8ClampedArray]\",U=\"[object Uint16Array]\",R=\"[object Uint32Array]\",L=/\\b__p \\+= '';/g,V=/\\b(__p \\+=) '' \\+/g,G=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,q=/&(?:amp|lt|gt|quot|#39);/g,$=/[&<>\"']/g,W=RegExp(q.source),H=RegExp($.source),K=/<%-([\\s\\S]+?)%>/g,Y=/<%([\\s\\S]+?)%>/g,Z=/<%=([\\s\\S]+?)%>/g,J=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,X=/^\\w*$/,Q=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,ee=/[\\\\^$.*+?()[\\]{}|]/g,te=RegExp(ee.source),ne=/^\\s+/,re=/\\s/,ie=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,oe=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ae=/,? & /,se=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ue=/[()=,{}\\[\\]\\/\\s]/,ce=/\\\\(\\\\)?/g,le=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,de=/\\w*$/,pe=/^[-+]0x[0-9a-f]+$/i,he=/^0b[01]+$/i,fe=/^\\[object .+?Constructor\\]$/,ye=/^0o[0-7]+$/i,ge=/^(?:0|[1-9]\\d*)$/,ve=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,me=/($^)/,_e=/['\\n\\r\\u2028\\u2029\\\\]/g,be=\"\\\\ud800-\\\\udfff\",Se=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",we=\"\\\\u2700-\\\\u27bf\",Ie=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Pe=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ce=\"\\\\ufe0e\\\\ufe0f\",Oe=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Ae=\"[\"+be+\"]\",Ee=\"[\"+Oe+\"]\",ze=\"[\"+Se+\"]\",ke=\"\\\\d+\",Te=\"[\"+we+\"]\",je=\"[\"+Ie+\"]\",xe=\"[^\"+be+Oe+ke+we+Ie+Pe+\"]\",Fe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Me=\"[^\"+be+\"]\",Be=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ne=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",De=\"[\"+Pe+\"]\",Ue=\"\\\\u200d\",Re=\"(?:\"+je+\"|\"+xe+\")\",Le=\"(?:\"+De+\"|\"+xe+\")\",Ve=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Ge=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",qe=\"(?:\"+ze+\"|\"+Fe+\")?\",$e=\"[\"+Ce+\"]?\",We=$e+qe+\"(?:\"+Ue+\"(?:\"+[Me,Be,Ne].join(\"|\")+\")\"+$e+qe+\")*\",He=\"(?:\"+[Te,Be,Ne].join(\"|\")+\")\"+We,Ke=\"(?:\"+[Me+ze+\"?\",ze,Be,Ne,Ae].join(\"|\")+\")\",Ye=RegExp(\"['’]\",\"g\"),Ze=RegExp(ze,\"g\"),Je=RegExp(Fe+\"(?=\"+Fe+\")|\"+Ke+We,\"g\"),Xe=RegExp([De+\"?\"+je+\"+\"+Ve+\"(?=\"+[Ee,De,\"$\"].join(\"|\")+\")\",Le+\"+\"+Ge+\"(?=\"+[Ee,De+Re,\"$\"].join(\"|\")+\")\",De+\"?\"+Re+\"+\"+Ve,De+\"+\"+Ge,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",ke,He].join(\"|\"),\"g\"),Qe=RegExp(\"[\"+Ue+be+Se+Ce+\"]\"),et=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,tt=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],nt=-1,rt={};rt[j]=rt[x]=rt[F]=rt[M]=rt[B]=rt[N]=rt[D]=rt[U]=rt[R]=!0,rt[f]=rt[y]=rt[k]=rt[g]=rt[T]=rt[v]=rt[m]=rt[_]=rt[S]=rt[w]=rt[I]=rt[C]=rt[O]=rt[A]=rt[z]=!1;var it={};it[f]=it[y]=it[k]=it[T]=it[g]=it[v]=it[j]=it[x]=it[F]=it[M]=it[B]=it[S]=it[w]=it[I]=it[C]=it[O]=it[A]=it[E]=it[N]=it[D]=it[U]=it[R]=!0,it[m]=it[_]=it[z]=!1;var ot={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},at=parseFloat,st=parseInt,ut=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,ct=\"object\"==typeof self&&self&&self.Object===Object&&self,lt=ut||ct||Function(\"return this\")(),dt=t&&!t.nodeType&&t,pt=dt&&e&&!e.nodeType&&e,ht=pt&&pt.exports===dt,ft=ht&&ut.process,yt=function(){try{return pt&&pt.require&&pt.require(\"util\").types||ft&&ft.binding&&ft.binding(\"util\")}catch(e){}}(),gt=yt&&yt.isArrayBuffer,vt=yt&&yt.isDate,mt=yt&&yt.isMap,_t=yt&&yt.isRegExp,bt=yt&&yt.isSet,St=yt&&yt.isTypedArray;function wt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function It(e,t,n,r){for(var i=-1,o=null==e?0:e.length;++i<o;){var a=e[i];t(r,a,n(a),e)}return r}function Pt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}function Ct(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}function Ot(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}function At(e,t){for(var n=-1,r=null==e?0:e.length,i=0,o=[];++n<r;){var a=e[n];t(a,n,e)&&(o[i++]=a)}return o}function Et(e,t){return!(null==e||!e.length)&&Dt(e,t,0)>-1}function zt(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function kt(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}function Tt(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}function jt(e,t,n,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(n=e[++i]);++i<o;)n=t(n,e[i],i,e);return n}function xt(e,t,n,r){var i=null==e?0:e.length;for(r&&i&&(n=e[--i]);i--;)n=t(n,e[i],i,e);return n}function Ft(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var Mt=Vt(\"length\");function Bt(e,t,n){var r;return n(e,function(e,n,i){if(t(e,n,i))return r=n,!1}),r}function Nt(e,t,n,r){for(var i=e.length,o=n+(r?1:-1);r?o--:++o<i;)if(t(e[o],o,e))return o;return-1}function Dt(e,t,n){return t==t?function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}(e,t,n):Nt(e,Rt,n)}function Ut(e,t,n,r){for(var i=n-1,o=e.length;++i<o;)if(r(e[i],t))return i;return-1}function Rt(e){return e!=e}function Lt(e,t){var n=null==e?0:e.length;return n?$t(e,t)/n:d}function Vt(e){return function(t){return null==t?r:t[e]}}function Gt(e){return function(t){return null==e?r:e[t]}}function qt(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}function $t(e,t){for(var n,i=-1,o=e.length;++i<o;){var a=t(e[i]);a!==r&&(n=n===r?a:n+a)}return n}function Wt(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}function Ht(e){return e?e.slice(0,dn(e)+1).replace(ne,\"\"):e}function Kt(e){return function(t){return e(t)}}function Yt(e,t){return kt(t,function(t){return e[t]})}function Zt(e,t){return e.has(t)}function Jt(e,t){for(var n=-1,r=e.length;++n<r&&Dt(t,e[n],0)>-1;);return n}function Xt(e,t){for(var n=e.length;n--&&Dt(t,e[n],0)>-1;);return n}var Qt=Gt({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),en=Gt({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function tn(e){return\"\\\\\"+ot[e]}function nn(e){return Qe.test(e)}function rn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function on(e,t){return function(n){return e(t(n))}}function an(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var s=e[n];s!==t&&s!==a||(e[n]=a,o[i++]=n)}return o}function sn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}function un(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=[e,e]}),n}function cn(e){return nn(e)?function(e){for(var t=Je.lastIndex=0;Je.test(e);)++t;return t}(e):Mt(e)}function ln(e){return nn(e)?function(e){return e.match(Je)||[]}(e):function(e){return e.split(\"\")}(e)}function dn(e){for(var t=e.length;t--&&re.test(e.charAt(t)););return t}var pn=Gt({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),hn=function e(t){var n,re=(t=null==t?lt:hn.defaults(lt.Object(),t,hn.pick(lt,tt))).Array,be=t.Date,Se=t.Error,we=t.Function,Ie=t.Math,Pe=t.Object,Ce=t.RegExp,Oe=t.String,Ae=t.TypeError,Ee=re.prototype,ze=we.prototype,ke=Pe.prototype,Te=t[\"__core-js_shared__\"],je=ze.toString,xe=ke.hasOwnProperty,Fe=0,Me=(n=/[^.]+$/.exec(Te&&Te.keys&&Te.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Be=ke.toString,Ne=je.call(Pe),De=lt._,Ue=Ce(\"^\"+je.call(xe).replace(ee,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Re=ht?t.Buffer:r,Le=t.Symbol,Ve=t.Uint8Array,Ge=Re?Re.allocUnsafe:r,qe=on(Pe.getPrototypeOf,Pe),$e=Pe.create,We=ke.propertyIsEnumerable,He=Ee.splice,Ke=Le?Le.isConcatSpreadable:r,Je=Le?Le.iterator:r,Qe=Le?Le.toStringTag:r,ot=function(){try{var e=uo(Pe,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),ut=t.clearTimeout!==lt.clearTimeout&&t.clearTimeout,ct=be&&be.now!==lt.Date.now&&be.now,dt=t.setTimeout!==lt.setTimeout&&t.setTimeout,pt=Ie.ceil,ft=Ie.floor,yt=Pe.getOwnPropertySymbols,Mt=Re?Re.isBuffer:r,Gt=t.isFinite,fn=Ee.join,yn=on(Pe.keys,Pe),gn=Ie.max,vn=Ie.min,mn=be.now,_n=t.parseInt,bn=Ie.random,Sn=Ee.reverse,wn=uo(t,\"DataView\"),In=uo(t,\"Map\"),Pn=uo(t,\"Promise\"),Cn=uo(t,\"Set\"),On=uo(t,\"WeakMap\"),An=uo(Pe,\"create\"),En=On&&new On,zn={},kn=No(wn),Tn=No(In),jn=No(Pn),xn=No(Cn),Fn=No(On),Mn=Le?Le.prototype:r,Bn=Mn?Mn.valueOf:r,Nn=Mn?Mn.toString:r;function Dn(e){if(es(e)&&!Ga(e)&&!(e instanceof Vn)){if(e instanceof Ln)return e;if(xe.call(e,\"__wrapped__\"))return Do(e)}return new Ln(e)}var Un=function(){function e(){}return function(t){if(!Qa(t))return{};if($e)return $e(t);e.prototype=t;var n=new e;return e.prototype=r,n}}();function Rn(){}function Ln(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=r}function Vn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function Gn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function qn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function $n(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function Wn(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new $n;++t<n;)this.add(e[t])}function Hn(e){var t=this.__data__=new qn(e);this.size=t.size}function Kn(e,t){var n=Ga(e),r=!n&&Va(e),i=!n&&!r&&Ha(e),o=!n&&!r&&!i&&us(e),a=n||r||i||o,s=a?Wt(e.length,Oe):[],u=s.length;for(var c in e)!t&&!xe.call(e,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||go(c,u))||s.push(c);return s}function Yn(e){var t=e.length;return t?e[$r(0,t-1)]:r}function Zn(e,t){return jo(Oi(e),or(t,0,e.length))}function Jn(e){return jo(Oi(e))}function Xn(e,t,n){(n!==r&&!Ua(e[t],n)||n===r&&!(t in e))&&rr(e,t,n)}function Qn(e,t,n){var i=e[t];xe.call(e,t)&&Ua(i,n)&&(n!==r||t in e)||rr(e,t,n)}function er(e,t){for(var n=e.length;n--;)if(Ua(e[n][0],t))return n;return-1}function tr(e,t,n,r){return lr(e,function(e,i,o){t(r,e,n(e),o)}),r}function nr(e,t){return e&&Ai(t,ks(t),e)}function rr(e,t,n){\"__proto__\"==t&&ot?ot(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function ir(e,t){for(var n=-1,i=t.length,o=re(i),a=null==e;++n<i;)o[n]=a?r:Cs(e,t[n]);return o}function or(e,t,n){return e==e&&(n!==r&&(e=e<=n?e:n),t!==r&&(e=e>=t?e:t)),e}function ar(e,t,n,i,o,a){var s,u=1&t,c=2&t,l=4&t;if(n&&(s=o?n(e,i,o,a):n(e)),s!==r)return s;if(!Qa(e))return e;var d=Ga(e);if(d){if(s=function(e){var t=e.length,n=new e.constructor(t);return t&&\"string\"==typeof e[0]&&xe.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n}(e),!u)return Oi(e,s)}else{var p=po(e),h=p==_||p==b;if(Ha(e))return bi(e,u);if(p==I||p==f||h&&!o){if(s=c||h?{}:fo(e),!u)return c?function(e,t){return Ai(e,lo(e),t)}(e,function(e,t){return e&&Ai(t,Ts(t),e)}(s,e)):function(e,t){return Ai(e,co(e),t)}(e,nr(s,e))}else{if(!it[p])return o?e:{};s=function(e,t,n){var r,i=e.constructor;switch(t){case k:return Si(e);case g:case v:return new i(+e);case T:return function(e,t){var n=t?Si(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case j:case x:case F:case M:case B:case N:case D:case U:case R:return wi(e,n);case S:return new i;case w:case A:return new i(e);case C:return function(e){var t=new e.constructor(e.source,de.exec(e));return t.lastIndex=e.lastIndex,t}(e);case O:return new i;case E:return r=e,Bn?Pe(Bn.call(r)):{}}}(e,p,u)}}a||(a=new Hn);var y=a.get(e);if(y)return y;a.set(e,s),os(e)?e.forEach(function(r){s.add(ar(r,t,n,r,e,a))}):ts(e)&&e.forEach(function(r,i){s.set(i,ar(r,t,n,i,e,a))});var m=d?r:(l?c?to:eo:c?Ts:ks)(e);return Pt(m||e,function(r,i){m&&(r=e[i=r]),Qn(s,i,ar(r,t,n,i,e,a))}),s}function sr(e,t,n){var i=n.length;if(null==e)return!i;for(e=Pe(e);i--;){var o=n[i],a=t[o],s=e[o];if(s===r&&!(o in e)||!a(s))return!1}return!0}function ur(e,t,n){if(\"function\"!=typeof e)throw new Ae(i);return Eo(function(){e.apply(r,n)},t)}function cr(e,t,n,r){var i=-1,o=Et,a=!0,s=e.length,u=[],c=t.length;if(!s)return u;n&&(t=kt(t,Kt(n))),r?(o=zt,a=!1):t.length>=200&&(o=Zt,a=!1,t=new Wn(t));e:for(;++i<s;){var l=e[i],d=null==n?l:n(l);if(l=r||0!==l?l:0,a&&d==d){for(var p=c;p--;)if(t[p]===d)continue e;u.push(l)}else o(t,d,r)||u.push(l)}return u}Dn.templateSettings={escape:K,evaluate:Y,interpolate:Z,variable:\"\",imports:{_:Dn}},Dn.prototype=Rn.prototype,Dn.prototype.constructor=Dn,Ln.prototype=Un(Rn.prototype),Ln.prototype.constructor=Ln,Vn.prototype=Un(Rn.prototype),Vn.prototype.constructor=Vn,Gn.prototype.clear=function(){this.__data__=An?An(null):{},this.size=0},Gn.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Gn.prototype.get=function(e){var t=this.__data__;if(An){var n=t[e];return n===o?r:n}return xe.call(t,e)?t[e]:r},Gn.prototype.has=function(e){var t=this.__data__;return An?t[e]!==r:xe.call(t,e)},Gn.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=An&&t===r?o:t,this},qn.prototype.clear=function(){this.__data__=[],this.size=0},qn.prototype.delete=function(e){var t=this.__data__,n=er(t,e);return!(n<0||(n==t.length-1?t.pop():He.call(t,n,1),--this.size,0))},qn.prototype.get=function(e){var t=this.__data__,n=er(t,e);return n<0?r:t[n][1]},qn.prototype.has=function(e){return er(this.__data__,e)>-1},qn.prototype.set=function(e,t){var n=this.__data__,r=er(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},$n.prototype.clear=function(){this.size=0,this.__data__={hash:new Gn,map:new(In||qn),string:new Gn}},$n.prototype.delete=function(e){var t=ao(this,e).delete(e);return this.size-=t?1:0,t},$n.prototype.get=function(e){return ao(this,e).get(e)},$n.prototype.has=function(e){return ao(this,e).has(e)},$n.prototype.set=function(e,t){var n=ao(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Wn.prototype.add=Wn.prototype.push=function(e){return this.__data__.set(e,o),this},Wn.prototype.has=function(e){return this.__data__.has(e)},Hn.prototype.clear=function(){this.__data__=new qn,this.size=0},Hn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Hn.prototype.get=function(e){return this.__data__.get(e)},Hn.prototype.has=function(e){return this.__data__.has(e)},Hn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof qn){var r=n.__data__;if(!In||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new $n(r)}return n.set(e,t),this.size=n.size,this};var lr=ki(mr),dr=ki(_r,!0);function pr(e,t){var n=!0;return lr(e,function(e,r,i){return n=!!t(e,r,i)}),n}function hr(e,t,n){for(var i=-1,o=e.length;++i<o;){var a=e[i],s=t(a);if(null!=s&&(u===r?s==s&&!ss(s):n(s,u)))var u=s,c=a}return c}function fr(e,t){var n=[];return lr(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function yr(e,t,n,r,i){var o=-1,a=e.length;for(n||(n=yo),i||(i=[]);++o<a;){var s=e[o];t>0&&n(s)?t>1?yr(s,t-1,n,r,i):Tt(i,s):r||(i[i.length]=s)}return i}var gr=Ti(),vr=Ti(!0);function mr(e,t){return e&&gr(e,t,ks)}function _r(e,t){return e&&vr(e,t,ks)}function br(e,t){return At(t,function(t){return Za(e[t])})}function Sr(e,t){for(var n=0,i=(t=gi(t,e)).length;null!=e&&n<i;)e=e[Bo(t[n++])];return n&&n==i?e:r}function wr(e,t,n){var r=t(e);return Ga(e)?r:Tt(r,n(e))}function Ir(e){return null==e?e===r?\"[object Undefined]\":\"[object Null]\":Qe&&Qe in Pe(e)?function(e){var t=xe.call(e,Qe),n=e[Qe];try{e[Qe]=r;var i=!0}catch(e){}var o=Be.call(e);return i&&(t?e[Qe]=n:delete e[Qe]),o}(e):function(e){return Be.call(e)}(e)}function Pr(e,t){return e>t}function Cr(e,t){return null!=e&&xe.call(e,t)}function Or(e,t){return null!=e&&t in Pe(e)}function Ar(e,t,n){for(var i=n?zt:Et,o=e[0].length,a=e.length,s=a,u=re(a),c=1/0,l=[];s--;){var d=e[s];s&&t&&(d=kt(d,Kt(t))),c=vn(d.length,c),u[s]=!n&&(t||o>=120&&d.length>=120)?new Wn(s&&d):r}d=e[0];var p=-1,h=u[0];e:for(;++p<o&&l.length<c;){var f=d[p],y=t?t(f):f;if(f=n||0!==f?f:0,!(h?Zt(h,y):i(l,y,n))){for(s=a;--s;){var g=u[s];if(!(g?Zt(g,y):i(e[s],y,n)))continue e}h&&h.push(y),l.push(f)}}return l}function Er(e,t,n){var i=null==(e=Co(e,t=gi(t,e)))?e:e[Bo(Yo(t))];return null==i?r:wt(i,e,n)}function zr(e){return es(e)&&Ir(e)==f}function kr(e,t,n,i,o){return e===t||(null==e||null==t||!es(e)&&!es(t)?e!=e&&t!=t:function(e,t,n,i,o,a){var s=Ga(e),u=Ga(t),c=s?y:po(e),l=u?y:po(t),d=(c=c==f?I:c)==I,p=(l=l==f?I:l)==I,h=c==l;if(h&&Ha(e)){if(!Ha(t))return!1;s=!0,d=!1}if(h&&!d)return a||(a=new Hn),s||us(e)?Xi(e,t,n,i,o,a):function(e,t,n,r,i,o,a){switch(n){case T:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case k:return!(e.byteLength!=t.byteLength||!o(new Ve(e),new Ve(t)));case g:case v:case w:return Ua(+e,+t);case m:return e.name==t.name&&e.message==t.message;case C:case A:return e==t+\"\";case S:var s=rn;case O:var u=1&r;if(s||(s=sn),e.size!=t.size&&!u)return!1;var c=a.get(e);if(c)return c==t;r|=2,a.set(e,t);var l=Xi(s(e),s(t),r,i,o,a);return a.delete(e),l;case E:if(Bn)return Bn.call(e)==Bn.call(t)}return!1}(e,t,c,n,i,o,a);if(!(1&n)){var _=d&&xe.call(e,\"__wrapped__\"),b=p&&xe.call(t,\"__wrapped__\");if(_||b){var P=_?e.value():e,z=b?t.value():t;return a||(a=new Hn),o(P,z,n,i,a)}}return!!h&&(a||(a=new Hn),function(e,t,n,i,o,a){var s=1&n,u=eo(e),c=u.length;if(c!=eo(t).length&&!s)return!1;for(var l=c;l--;){var d=u[l];if(!(s?d in t:xe.call(t,d)))return!1}var p=a.get(e),h=a.get(t);if(p&&h)return p==t&&h==e;var f=!0;a.set(e,t),a.set(t,e);for(var y=s;++l<c;){var g=e[d=u[l]],v=t[d];if(i)var m=s?i(v,g,d,t,e,a):i(g,v,d,e,t,a);if(!(m===r?g===v||o(g,v,n,i,a):m)){f=!1;break}y||(y=\"constructor\"==d)}if(f&&!y){var _=e.constructor,b=t.constructor;_==b||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof _&&_ instanceof _&&\"function\"==typeof b&&b instanceof b||(f=!1)}return a.delete(e),a.delete(t),f}(e,t,n,i,o,a))}(e,t,n,i,kr,o))}function Tr(e,t,n,i){var o=n.length,a=o,s=!i;if(null==e)return!a;for(e=Pe(e);o--;){var u=n[o];if(s&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++o<a;){var c=(u=n[o])[0],l=e[c],d=u[1];if(s&&u[2]){if(l===r&&!(c in e))return!1}else{var p=new Hn;if(i)var h=i(l,d,c,e,t,p);if(!(h===r?kr(d,l,3,i,p):h))return!1}}return!0}function jr(e){return!(!Qa(e)||(t=e,Me&&Me in t))&&(Za(e)?Ue:fe).test(No(e));var t}function xr(e){return\"function\"==typeof e?e:null==e?nu:\"object\"==typeof e?Ga(e)?Dr(e[0],e[1]):Nr(e):du(e)}function Fr(e){if(!So(e))return yn(e);var t=[];for(var n in Pe(e))xe.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}function Mr(e,t){return e<t}function Br(e,t){var n=-1,r=$a(e)?re(e.length):[];return lr(e,function(e,i,o){r[++n]=t(e,i,o)}),r}function Nr(e){var t=so(e);return 1==t.length&&t[0][2]?Io(t[0][0],t[0][1]):function(n){return n===e||Tr(n,e,t)}}function Dr(e,t){return mo(e)&&wo(t)?Io(Bo(e),t):function(n){var i=Cs(n,e);return i===r&&i===t?Os(n,e):kr(t,i,3)}}function Ur(e,t,n,i,o){e!==t&&gr(t,function(a,s){if(o||(o=new Hn),Qa(a))!function(e,t,n,i,o,a,s){var u=Oo(e,n),c=Oo(t,n),l=s.get(c);if(l)Xn(e,n,l);else{var d=a?a(u,c,n+\"\",e,t,s):r,p=d===r;if(p){var h=Ga(c),f=!h&&Ha(c),y=!h&&!f&&us(c);d=c,h||f||y?Ga(u)?d=u:Wa(u)?d=Oi(u):f?(p=!1,d=bi(c,!0)):y?(p=!1,d=wi(c,!0)):d=[]:rs(c)||Va(c)?(d=u,Va(u)?d=gs(u):Qa(u)&&!Za(u)||(d=fo(c))):p=!1}p&&(s.set(c,d),o(d,c,i,a,s),s.delete(c)),Xn(e,n,d)}}(e,t,s,n,Ur,i,o);else{var u=i?i(Oo(e,s),a,s+\"\",e,t,o):r;u===r&&(u=a),Xn(e,s,u)}},Ts)}function Rr(e,t){var n=e.length;if(n)return go(t+=t<0?n:0,n)?e[t]:r}function Lr(e,t,n){t=t.length?kt(t,function(e){return Ga(e)?function(t){return Sr(t,1===e.length?e[0]:e)}:e}):[nu];var r=-1;t=kt(t,Kt(oo()));var i=Br(e,function(e,n,i){var o=kt(t,function(t){return t(e)});return{criteria:o,index:++r,value:e}});return function(e){var t=e.length;for(e.sort(function(e,t){return function(e,t,n){for(var r=-1,i=e.criteria,o=t.criteria,a=i.length,s=n.length;++r<a;){var u=Ii(i[r],o[r]);if(u)return r>=s?u:u*(\"desc\"==n[r]?-1:1)}return e.index-t.index}(e,t,n)});t--;)e[t]=e[t].value;return e}(i)}function Vr(e,t,n){for(var r=-1,i=t.length,o={};++r<i;){var a=t[r],s=Sr(e,a);n(s,a)&&Zr(o,gi(a,e),s)}return o}function Gr(e,t,n,r){var i=r?Ut:Dt,o=-1,a=t.length,s=e;for(e===t&&(t=Oi(t)),n&&(s=kt(e,Kt(n)));++o<a;)for(var u=0,c=t[o],l=n?n(c):c;(u=i(s,l,u,r))>-1;)s!==e&&He.call(s,u,1),He.call(e,u,1);return e}function qr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==o){var o=i;go(i)?He.call(e,i,1):ui(e,i)}}return e}function $r(e,t){return e+ft(bn()*(t-e+1))}function Wr(e,t){var n=\"\";if(!e||t<1||t>l)return n;do{t%2&&(n+=e),(t=ft(t/2))&&(e+=e)}while(t);return n}function Hr(e,t){return zo(Po(e,t,nu),e+\"\")}function Kr(e){return Yn(Us(e))}function Yr(e,t){var n=Us(e);return jo(n,or(t,0,n.length))}function Zr(e,t,n,i){if(!Qa(e))return e;for(var o=-1,a=(t=gi(t,e)).length,s=a-1,u=e;null!=u&&++o<a;){var c=Bo(t[o]),l=n;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return e;if(o!=s){var d=u[c];(l=i?i(d,c,u):r)===r&&(l=Qa(d)?d:go(t[o+1])?[]:{})}Qn(u,c,l),u=u[c]}return e}var Jr=En?function(e,t){return En.set(e,t),e}:nu,Xr=ot?function(e,t){return ot(e,\"toString\",{configurable:!0,enumerable:!1,value:Qs(t),writable:!0})}:nu;function Qr(e){return jo(Us(e))}function ei(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=re(i);++r<i;)o[r]=e[r+t];return o}function ti(e,t){var n;return lr(e,function(e,r,i){return!(n=t(e,r,i))}),!!n}function ni(e,t,n){var r=0,i=null==e?r:e.length;if(\"number\"==typeof t&&t==t&&i<=2147483647){for(;r<i;){var o=r+i>>>1,a=e[o];null!==a&&!ss(a)&&(n?a<=t:a<t)?r=o+1:i=o}return i}return ri(e,t,nu,n)}function ri(e,t,n,i){var o=0,a=null==e?0:e.length;if(0===a)return 0;for(var s=(t=n(t))!=t,u=null===t,c=ss(t),l=t===r;o<a;){var d=ft((o+a)/2),p=n(e[d]),h=p!==r,f=null===p,y=p==p,g=ss(p);if(s)var v=i||y;else v=l?y&&(i||h):u?y&&h&&(i||!f):c?y&&h&&!f&&(i||!g):!f&&!g&&(i?p<=t:p<t);v?o=d+1:a=d}return vn(a,4294967294)}function ii(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var a=e[n],s=t?t(a):a;if(!n||!Ua(s,u)){var u=s;o[i++]=0===a?0:a}}return o}function oi(e){return\"number\"==typeof e?e:ss(e)?d:+e}function ai(e){if(\"string\"==typeof e)return e;if(Ga(e))return kt(e,ai)+\"\";if(ss(e))return Nn?Nn.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function si(e,t,n){var r=-1,i=Et,o=e.length,a=!0,s=[],u=s;if(n)a=!1,i=zt;else if(o>=200){var c=t?null:Wi(e);if(c)return sn(c);a=!1,i=Zt,u=new Wn}else u=t?[]:s;e:for(;++r<o;){var l=e[r],d=t?t(l):l;if(l=n||0!==l?l:0,a&&d==d){for(var p=u.length;p--;)if(u[p]===d)continue e;t&&u.push(d),s.push(l)}else i(u,d,n)||(u!==s&&u.push(d),s.push(l))}return s}function ui(e,t){var n=-1,r=(t=gi(t,e)).length;if(!r)return!0;for(;++n<r;){var i=Bo(t[n]);if(\"__proto__\"===i&&!xe.call(e,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Co(e,t);return null==o||delete o[Bo(Yo(t))]}function ci(e,t,n,r){return Zr(e,t,n(Sr(e,t)),r)}function li(e,t,n,r){for(var i=e.length,o=r?i:-1;(r?o--:++o<i)&&t(e[o],o,e););return n?ei(e,r?0:o,r?o+1:i):ei(e,r?o+1:0,r?i:o)}function di(e,t){var n=e;return n instanceof Vn&&(n=n.value()),jt(t,function(e,t){return t.func.apply(t.thisArg,Tt([e],t.args))},n)}function pi(e,t,n){var r=e.length;if(r<2)return r?si(e[0]):[];for(var i=-1,o=re(r);++i<r;)for(var a=e[i],s=-1;++s<r;)s!=i&&(o[i]=cr(o[i]||a,e[s],t,n));return si(yr(o,1),t,n)}function hi(e,t,n){for(var i=-1,o=e.length,a=t.length,s={};++i<o;){var u=i<a?t[i]:r;n(s,e[i],u)}return s}function fi(e){return Wa(e)?e:[]}function yi(e){return\"function\"==typeof e?e:nu}function gi(e,t){return Ga(e)?e:mo(e,t)?[e]:Mo(vs(e))}var vi=Hr;function mi(e,t,n){var i=e.length;return n=n===r?i:n,!t&&n>=i?e:ei(e,t,n)}var _i=ut||function(e){return lt.clearTimeout(e)};function bi(e,t){if(t)return e.slice();var n=e.length,r=Ge?Ge(n):new e.constructor(n);return e.copy(r),r}function Si(e){var t=new e.constructor(e.byteLength);return new Ve(t).set(new Ve(e)),t}function wi(e,t){var n=t?Si(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function Ii(e,t){if(e!==t){var n=e!==r,i=null===e,o=e==e,a=ss(e),s=t!==r,u=null===t,c=t==t,l=ss(t);if(!u&&!l&&!a&&e>t||a&&s&&c&&!u&&!l||i&&s&&c||!n&&c||!o)return 1;if(!i&&!a&&!l&&e<t||l&&n&&o&&!i&&!a||u&&n&&o||!s&&o||!c)return-1}return 0}function Pi(e,t,n,r){for(var i=-1,o=e.length,a=n.length,s=-1,u=t.length,c=gn(o-a,0),l=re(u+c),d=!r;++s<u;)l[s]=t[s];for(;++i<a;)(d||i<o)&&(l[n[i]]=e[i]);for(;c--;)l[s++]=e[i++];return l}function Ci(e,t,n,r){for(var i=-1,o=e.length,a=-1,s=n.length,u=-1,c=t.length,l=gn(o-s,0),d=re(l+c),p=!r;++i<l;)d[i]=e[i];for(var h=i;++u<c;)d[h+u]=t[u];for(;++a<s;)(p||i<o)&&(d[h+n[a]]=e[i++]);return d}function Oi(e,t){var n=-1,r=e.length;for(t||(t=re(r));++n<r;)t[n]=e[n];return t}function Ai(e,t,n,i){var o=!n;n||(n={});for(var a=-1,s=t.length;++a<s;){var u=t[a],c=i?i(n[u],e[u],u,n,e):r;c===r&&(c=e[u]),o?rr(n,u,c):Qn(n,u,c)}return n}function Ei(e,t){return function(n,r){var i=Ga(n)?It:tr,o=t?t():{};return i(n,e,oo(r,2),o)}}function zi(e){return Hr(function(t,n){var i=-1,o=n.length,a=o>1?n[o-1]:r,s=o>2?n[2]:r;for(a=e.length>3&&\"function\"==typeof a?(o--,a):r,s&&vo(n[0],n[1],s)&&(a=o<3?r:a,o=1),t=Pe(t);++i<o;){var u=n[i];u&&e(t,u,i,a)}return t})}function ki(e,t){return function(n,r){if(null==n)return n;if(!$a(n))return e(n,r);for(var i=n.length,o=t?i:-1,a=Pe(n);(t?o--:++o<i)&&!1!==r(a[o],o,a););return n}}function Ti(e){return function(t,n,r){for(var i=-1,o=Pe(t),a=r(t),s=a.length;s--;){var u=a[e?s:++i];if(!1===n(o[u],u,o))break}return t}}function ji(e){return function(t){var n=nn(t=vs(t))?ln(t):r,i=n?n[0]:t.charAt(0),o=n?mi(n,1).join(\"\"):t.slice(1);return i[e]()+o}}function xi(e){return function(t){return jt(Zs(Vs(t).replace(Ye,\"\")),e,\"\")}}function Fi(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=Un(e.prototype),r=e.apply(n,t);return Qa(r)?r:n}}function Mi(e){return function(t,n,i){var o=Pe(t);if(!$a(t)){var a=oo(n,3);t=ks(t),n=function(e){return a(o[e],e,o)}}var s=e(t,n,i);return s>-1?o[a?t[s]:s]:r}}function Bi(e){return Qi(function(t){var n=t.length,o=n,a=Ln.prototype.thru;for(e&&t.reverse();o--;){var s=t[o];if(\"function\"!=typeof s)throw new Ae(i);if(a&&!u&&\"wrapper\"==ro(s))var u=new Ln([],!0)}for(o=u?o:n;++o<n;){var c=ro(s=t[o]),l=\"wrapper\"==c?no(s):r;u=l&&_o(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?u[ro(l[0])].apply(u,l[3]):1==s.length&&_o(s)?u[c]():u.thru(s)}return function(){var e=arguments,r=e[0];if(u&&1==e.length&&Ga(r))return u.plant(r).value();for(var i=0,o=n?t[i].apply(this,e):r;++i<n;)o=t[i].call(this,o);return o}})}function Ni(e,t,n,i,o,a,s,c,l,d){var p=t&u,h=1&t,f=2&t,y=24&t,g=512&t,v=f?r:Fi(e);return function u(){for(var m=arguments.length,_=re(m),b=m;b--;)_[b]=arguments[b];if(y)var S=io(u),w=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}(_,S);if(i&&(_=Pi(_,i,o,y)),a&&(_=Ci(_,a,s,y)),m-=w,y&&m<d){var I=an(_,S);return qi(e,t,Ni,u.placeholder,n,_,I,c,l,d-m)}var P=h?n:this,C=f?P[e]:e;return m=_.length,c?_=function(e,t){for(var n=e.length,i=vn(t.length,n),o=Oi(e);i--;){var a=t[i];e[i]=go(a,n)?o[a]:r}return e}(_,c):g&&m>1&&_.reverse(),p&&l<m&&(_.length=l),this&&this!==lt&&this instanceof u&&(C=v||Fi(C)),C.apply(P,_)}}function Di(e,t){return function(n,r){return function(e,t,n,r){return mr(e,function(e,i,o){t(r,n(e),i,o)}),r}(n,e,t(r),{})}}function Ui(e,t){return function(n,i){var o;if(n===r&&i===r)return t;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ai(n),i=ai(i)):(n=oi(n),i=oi(i)),o=e(n,i)}return o}}function Ri(e){return Qi(function(t){return t=kt(t,Kt(oo())),Hr(function(n){var r=this;return e(t,function(e){return wt(e,r,n)})})})}function Li(e,t){var n=(t=t===r?\" \":ai(t)).length;if(n<2)return n?Wr(t,e):t;var i=Wr(t,pt(e/cn(t)));return nn(t)?mi(ln(i),0,e).join(\"\"):i.slice(0,e)}function Vi(e){return function(t,n,i){return i&&\"number\"!=typeof i&&vo(t,n,i)&&(n=i=r),t=ps(t),n===r?(n=t,t=0):n=ps(n),function(e,t,n,r){for(var i=-1,o=gn(pt((t-e)/(n||1)),0),a=re(o);o--;)a[r?o:++i]=e,e+=n;return a}(t,n,i=i===r?t<n?1:-1:ps(i),e)}}function Gi(e){return function(t,n){return\"string\"==typeof t&&\"string\"==typeof n||(t=ys(t),n=ys(n)),e(t,n)}}function qi(e,t,n,i,o,a,u,c,l,d){var p=8&t;t|=p?s:64,4&(t&=~(p?64:s))||(t&=-4);var h=[e,t,o,p?a:r,p?u:r,p?r:a,p?r:u,c,l,d],f=n.apply(r,h);return _o(e)&&Ao(f,h),f.placeholder=i,ko(f,e,t)}function $i(e){var t=Ie[e];return function(e,n){if(e=ys(e),(n=null==n?0:vn(hs(n),292))&&Gt(e)){var r=(vs(e)+\"e\").split(\"e\");return+((r=(vs(t(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return t(e)}}var Wi=Cn&&1/sn(new Cn([,-0]))[1]==c?function(e){return new Cn(e)}:su;function Hi(e){return function(t){var n=po(t);return n==S?rn(t):n==O?un(t):function(e,t){return kt(t,function(t){return[t,e[t]]})}(t,e(t))}}function Ki(e,t,n,o,c,l,d,p){var h=2&t;if(!h&&\"function\"!=typeof e)throw new Ae(i);var f=o?o.length:0;if(f||(t&=-97,o=c=r),d=d===r?d:gn(hs(d),0),p=p===r?p:hs(p),f-=c?c.length:0,64&t){var y=o,g=c;o=c=r}var v=h?r:no(e),m=[e,t,n,o,c,y,g,l,d,p];if(v&&function(e,t){var n=e[1],r=t[1],i=n|r,o=i<131,s=r==u&&8==n||r==u&&256==n&&e[7].length<=t[8]||384==r&&t[7].length<=t[8]&&8==n;if(!o&&!s)return e;1&r&&(e[2]=t[2],i|=1&n?0:4);var c=t[3];if(c){var l=e[3];e[3]=l?Pi(l,c,t[4]):c,e[4]=l?an(e[3],a):t[4]}(c=t[5])&&(l=e[5],e[5]=l?Ci(l,c,t[6]):c,e[6]=l?an(e[5],a):t[6]),(c=t[7])&&(e[7]=c),r&u&&(e[8]=null==e[8]?t[8]:vn(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=i}(m,v),e=m[0],t=m[1],n=m[2],o=m[3],c=m[4],!(p=m[9]=m[9]===r?h?0:e.length:gn(m[9]-f,0))&&24&t&&(t&=-25),t&&1!=t)_=8==t||16==t?function(e,t,n){var i=Fi(e);return function o(){for(var a=arguments.length,s=re(a),u=a,c=io(o);u--;)s[u]=arguments[u];var l=a<3&&s[0]!==c&&s[a-1]!==c?[]:an(s,c);return(a-=l.length)<n?qi(e,t,Ni,o.placeholder,r,s,l,r,r,n-a):wt(this&&this!==lt&&this instanceof o?i:e,this,s)}}(e,t,p):t!=s&&33!=t||c.length?Ni.apply(r,m):function(e,t,n,r){var i=1&t,o=Fi(e);return function t(){for(var a=-1,s=arguments.length,u=-1,c=r.length,l=re(c+s),d=this&&this!==lt&&this instanceof t?o:e;++u<c;)l[u]=r[u];for(;s--;)l[u++]=arguments[++a];return wt(d,i?n:this,l)}}(e,t,n,o);else var _=function(e,t,n){var r=1&t,i=Fi(e);return function t(){return(this&&this!==lt&&this instanceof t?i:e).apply(r?n:this,arguments)}}(e,t,n);return ko((v?Jr:Ao)(_,m),e,t)}function Yi(e,t,n,i){return e===r||Ua(e,ke[n])&&!xe.call(i,n)?t:e}function Zi(e,t,n,i,o,a){return Qa(e)&&Qa(t)&&(a.set(t,e),Ur(e,t,r,Zi,a),a.delete(t)),e}function Ji(e){return rs(e)?r:e}function Xi(e,t,n,i,o,a){var s=1&n,u=e.length,c=t.length;if(u!=c&&!(s&&c>u))return!1;var l=a.get(e),d=a.get(t);if(l&&d)return l==t&&d==e;var p=-1,h=!0,f=2&n?new Wn:r;for(a.set(e,t),a.set(t,e);++p<u;){var y=e[p],g=t[p];if(i)var v=s?i(g,y,p,t,e,a):i(y,g,p,e,t,a);if(v!==r){if(v)continue;h=!1;break}if(f){if(!Ft(t,function(e,t){if(!Zt(f,t)&&(y===e||o(y,e,n,i,a)))return f.push(t)})){h=!1;break}}else if(y!==g&&!o(y,g,n,i,a)){h=!1;break}}return a.delete(e),a.delete(t),h}function Qi(e){return zo(Po(e,r,qo),e+\"\")}function eo(e){return wr(e,ks,co)}function to(e){return wr(e,Ts,lo)}var no=En?function(e){return En.get(e)}:su;function ro(e){for(var t=e.name+\"\",n=zn[t],r=xe.call(zn,t)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==e)return i.name}return t}function io(e){return(xe.call(Dn,\"placeholder\")?Dn:e).placeholder}function oo(){var e=Dn.iteratee||ru;return e=e===ru?xr:e,arguments.length?e(arguments[0],arguments[1]):e}function ao(e,t){var n,r,i=e.__data__;return(\"string\"==(r=typeof(n=t))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function so(e){for(var t=ks(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,wo(i)]}return t}function uo(e,t){var n=function(e,t){return null==e?r:e[t]}(e,t);return jr(n)?n:r}var co=yt?function(e){return null==e?[]:(e=Pe(e),At(yt(e),function(t){return We.call(e,t)}))}:fu,lo=yt?function(e){for(var t=[];e;)Tt(t,co(e)),e=qe(e);return t}:fu,po=Ir;function ho(e,t,n){for(var r=-1,i=(t=gi(t,e)).length,o=!1;++r<i;){var a=Bo(t[r]);if(!(o=null!=e&&n(e,a)))break;e=e[a]}return o||++r!=i?o:!!(i=null==e?0:e.length)&&Xa(i)&&go(a,i)&&(Ga(e)||Va(e))}function fo(e){return\"function\"!=typeof e.constructor||So(e)?{}:Un(qe(e))}function yo(e){return Ga(e)||Va(e)||!!(Ke&&e&&e[Ke])}function go(e,t){var n=typeof e;return!!(t=t??l)&&(\"number\"==n||\"symbol\"!=n&&ge.test(e))&&e>-1&&e%1==0&&e<t}function vo(e,t,n){if(!Qa(n))return!1;var r=typeof t;return!!(\"number\"==r?$a(n)&&go(t,n.length):\"string\"==r&&t in n)&&Ua(n[t],e)}function mo(e,t){if(Ga(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!ss(e))||X.test(e)||!J.test(e)||null!=t&&e in Pe(t)}function _o(e){var t=ro(e),n=Dn[t];if(\"function\"!=typeof n||!(t in Vn.prototype))return!1;if(e===n)return!0;var r=no(n);return!!r&&e===r[0]}(wn&&po(new wn(new ArrayBuffer(1)))!=T||In&&po(new In)!=S||Pn&&po(Pn.resolve())!=P||Cn&&po(new Cn)!=O||On&&po(new On)!=z)&&(po=function(e){var t=Ir(e),n=t==I?e.constructor:r,i=n?No(n):\"\";if(i)switch(i){case kn:return T;case Tn:return S;case jn:return P;case xn:return O;case Fn:return z}return t});var bo=Te?Za:yu;function So(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||ke)}function wo(e){return e==e&&!Qa(e)}function Io(e,t){return function(n){return null!=n&&n[e]===t&&(t!==r||e in Pe(n))}}function Po(e,t,n){return t=gn(t===r?e.length-1:t,0),function(){for(var r=arguments,i=-1,o=gn(r.length-t,0),a=re(o);++i<o;)a[i]=r[t+i];i=-1;for(var s=re(t+1);++i<t;)s[i]=r[i];return s[t]=n(a),wt(e,this,s)}}function Co(e,t){return t.length<2?e:Sr(e,ei(t,0,-1))}function Oo(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var Ao=To(Jr),Eo=dt||function(e,t){return lt.setTimeout(e,t)},zo=To(Xr);function ko(e,t,n){var r=t+\"\";return zo(e,function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(n>1?\"& \":\"\")+t[r],t=t.join(n>2?\", \":\" \"),e.replace(ie,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(r,function(e,t){return Pt(h,function(n){var r=\"_.\"+n[0];t&n[1]&&!Et(e,r)&&e.push(r)}),e.sort()}(function(e){var t=e.match(oe);return t?t[1].split(ae):[]}(r),n)))}function To(e){var t=0,n=0;return function(){var i=mn(),o=16-(i-n);if(n=i,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(r,arguments)}}function jo(e,t){var n=-1,i=e.length,o=i-1;for(t=t===r?i:t;++n<t;){var a=$r(n,o),s=e[a];e[a]=e[n],e[n]=s}return e.length=t,e}var xo,Fo,Mo=(xo=xa(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(Q,function(e,n,r,i){t.push(r?i.replace(ce,\"$1\"):n||e)}),t},function(e){return 500===Fo.size&&Fo.clear(),e}),Fo=xo.cache,xo);function Bo(e){if(\"string\"==typeof e||ss(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function No(e){if(null!=e){try{return je.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}function Do(e){if(e instanceof Vn)return e.clone();var t=new Ln(e.__wrapped__,e.__chain__);return t.__actions__=Oi(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var Uo=Hr(function(e,t){return Wa(e)?cr(e,yr(t,1,Wa,!0)):[]}),Ro=Hr(function(e,t){var n=Yo(t);return Wa(n)&&(n=r),Wa(e)?cr(e,yr(t,1,Wa,!0),oo(n,2)):[]}),Lo=Hr(function(e,t){var n=Yo(t);return Wa(n)&&(n=r),Wa(e)?cr(e,yr(t,1,Wa,!0),r,n):[]});function Vo(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:hs(n);return i<0&&(i=gn(r+i,0)),Nt(e,oo(t,3),i)}function Go(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var o=i-1;return n!==r&&(o=hs(n),o=n<0?gn(i+o,0):vn(o,i-1)),Nt(e,oo(t,3),o,!0)}function qo(e){return null!=e&&e.length?yr(e,1):[]}function $o(e){return e&&e.length?e[0]:r}var Wo=Hr(function(e){var t=kt(e,fi);return t.length&&t[0]===e[0]?Ar(t):[]}),Ho=Hr(function(e){var t=Yo(e),n=kt(e,fi);return t===Yo(n)?t=r:n.pop(),n.length&&n[0]===e[0]?Ar(n,oo(t,2)):[]}),Ko=Hr(function(e){var t=Yo(e),n=kt(e,fi);return(t=\"function\"==typeof t?t:r)&&n.pop(),n.length&&n[0]===e[0]?Ar(n,r,t):[]});function Yo(e){var t=null==e?0:e.length;return t?e[t-1]:r}var Zo=Hr(Jo);function Jo(e,t){return e&&e.length&&t&&t.length?Gr(e,t):e}var Xo=Qi(function(e,t){var n=null==e?0:e.length,r=ir(e,t);return qr(e,kt(t,function(e){return go(e,n)?+e:e}).sort(Ii)),r});function Qo(e){return null==e?e:Sn.call(e)}var ea=Hr(function(e){return si(yr(e,1,Wa,!0))}),ta=Hr(function(e){var t=Yo(e);return Wa(t)&&(t=r),si(yr(e,1,Wa,!0),oo(t,2))}),na=Hr(function(e){var t=Yo(e);return t=\"function\"==typeof t?t:r,si(yr(e,1,Wa,!0),r,t)});function ra(e){if(!e||!e.length)return[];var t=0;return e=At(e,function(e){if(Wa(e))return t=gn(e.length,t),!0}),Wt(t,function(t){return kt(e,Vt(t))})}function ia(e,t){if(!e||!e.length)return[];var n=ra(e);return null==t?n:kt(n,function(e){return wt(t,r,e)})}var oa=Hr(function(e,t){return Wa(e)?cr(e,t):[]}),aa=Hr(function(e){return pi(At(e,Wa))}),sa=Hr(function(e){var t=Yo(e);return Wa(t)&&(t=r),pi(At(e,Wa),oo(t,2))}),ua=Hr(function(e){var t=Yo(e);return t=\"function\"==typeof t?t:r,pi(At(e,Wa),r,t)}),ca=Hr(ra),la=Hr(function(e){var t=e.length,n=t>1?e[t-1]:r;return n=\"function\"==typeof n?(e.pop(),n):r,ia(e,n)});function da(e){var t=Dn(e);return t.__chain__=!0,t}function pa(e,t){return t(e)}var ha=Qi(function(e){var t=e.length,n=t?e[0]:0,i=this.__wrapped__,o=function(t){return ir(t,e)};return!(t>1||this.__actions__.length)&&i instanceof Vn&&go(n)?((i=i.slice(n,+n+(t?1:0))).__actions__.push({func:pa,args:[o],thisArg:r}),new Ln(i,this.__chain__).thru(function(e){return t&&!e.length&&e.push(r),e})):this.thru(o)}),fa=Ei(function(e,t,n){xe.call(e,n)?++e[n]:rr(e,n,1)}),ya=Mi(Vo),ga=Mi(Go);function va(e,t){return(Ga(e)?Pt:lr)(e,oo(t,3))}function ma(e,t){return(Ga(e)?Ct:dr)(e,oo(t,3))}var _a=Ei(function(e,t,n){xe.call(e,n)?e[n].push(t):rr(e,n,[t])}),ba=Hr(function(e,t,n){var r=-1,i=\"function\"==typeof t,o=$a(e)?re(e.length):[];return lr(e,function(e){o[++r]=i?wt(t,e,n):Er(e,t,n)}),o}),Sa=Ei(function(e,t,n){rr(e,n,t)});function wa(e,t){return(Ga(e)?kt:Br)(e,oo(t,3))}var Ia=Ei(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]}),Pa=Hr(function(e,t){if(null==e)return[];var n=t.length;return n>1&&vo(e,t[0],t[1])?t=[]:n>2&&vo(t[0],t[1],t[2])&&(t=[t[0]]),Lr(e,yr(t,1),[])}),Ca=ct||function(){return lt.Date.now()};function Oa(e,t,n){return t=n?r:t,t=e&&null==t?e.length:t,Ki(e,u,r,r,r,r,t)}function Aa(e,t){var n;if(\"function\"!=typeof t)throw new Ae(i);return e=hs(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=r),n}}var Ea=Hr(function(e,t,n){var r=1;if(n.length){var i=an(n,io(Ea));r|=s}return Ki(e,r,t,n,i)}),za=Hr(function(e,t,n){var r=3;if(n.length){var i=an(n,io(za));r|=s}return Ki(t,r,e,n,i)});function ka(e,t,n){var o,a,s,u,c,l,d=0,p=!1,h=!1,f=!0;if(\"function\"!=typeof e)throw new Ae(i);function y(t){var n=o,i=a;return o=a=r,d=t,u=e.apply(i,n)}function g(e){var n=e-l;return l===r||n>=t||n<0||h&&e-d>=s}function v(){var e=Ca();if(g(e))return m(e);c=Eo(v,function(e){var n=t-(e-l);return h?vn(n,s-(e-d)):n}(e))}function m(e){return c=r,f&&o?y(e):(o=a=r,u)}function _(){var e=Ca(),n=g(e);if(o=arguments,a=this,l=e,n){if(c===r)return function(e){return d=e,c=Eo(v,t),p?y(e):u}(l);if(h)return _i(c),c=Eo(v,t),y(l)}return c===r&&(c=Eo(v,t)),u}return t=ys(t)||0,Qa(n)&&(p=!!n.leading,s=(h=\"maxWait\"in n)?gn(ys(n.maxWait)||0,t):s,f=\"trailing\"in n?!!n.trailing:f),_.cancel=function(){c!==r&&_i(c),d=0,o=l=a=c=r},_.flush=function(){return c===r?u:m(Ca())},_}var Ta=Hr(function(e,t){return ur(e,1,t)}),ja=Hr(function(e,t,n){return ur(e,ys(t)||0,n)});function xa(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new Ae(i);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(xa.Cache||$n),n}function Fa(e){if(\"function\"!=typeof e)throw new Ae(i);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}xa.Cache=$n;var Ma=vi(function(e,t){var n=(t=1==t.length&&Ga(t[0])?kt(t[0],Kt(oo())):kt(yr(t,1),Kt(oo()))).length;return Hr(function(r){for(var i=-1,o=vn(r.length,n);++i<o;)r[i]=t[i].call(this,r[i]);return wt(e,this,r)})}),Ba=Hr(function(e,t){var n=an(t,io(Ba));return Ki(e,s,r,t,n)}),Na=Hr(function(e,t){var n=an(t,io(Na));return Ki(e,64,r,t,n)}),Da=Qi(function(e,t){return Ki(e,256,r,r,r,t)});function Ua(e,t){return e===t||e!=e&&t!=t}var Ra=Gi(Pr),La=Gi(function(e,t){return e>=t}),Va=zr(function(){return arguments}())?zr:function(e){return es(e)&&xe.call(e,\"callee\")&&!We.call(e,\"callee\")},Ga=re.isArray,qa=gt?Kt(gt):function(e){return es(e)&&Ir(e)==k};function $a(e){return null!=e&&Xa(e.length)&&!Za(e)}function Wa(e){return es(e)&&$a(e)}var Ha=Mt||yu,Ka=vt?Kt(vt):function(e){return es(e)&&Ir(e)==v};function Ya(e){if(!es(e))return!1;var t=Ir(e);return t==m||\"[object DOMException]\"==t||\"string\"==typeof e.message&&\"string\"==typeof e.name&&!rs(e)}function Za(e){if(!Qa(e))return!1;var t=Ir(e);return t==_||t==b||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function Ja(e){return\"number\"==typeof e&&e==hs(e)}function Xa(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=l}function Qa(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function es(e){return null!=e&&\"object\"==typeof e}var ts=mt?Kt(mt):function(e){return es(e)&&po(e)==S};function ns(e){return\"number\"==typeof e||es(e)&&Ir(e)==w}function rs(e){if(!es(e)||Ir(e)!=I)return!1;var t=qe(e);if(null===t)return!0;var n=xe.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&je.call(n)==Ne}var is=_t?Kt(_t):function(e){return es(e)&&Ir(e)==C},os=bt?Kt(bt):function(e){return es(e)&&po(e)==O};function as(e){return\"string\"==typeof e||!Ga(e)&&es(e)&&Ir(e)==A}function ss(e){return\"symbol\"==typeof e||es(e)&&Ir(e)==E}var us=St?Kt(St):function(e){return es(e)&&Xa(e.length)&&!!rt[Ir(e)]},cs=Gi(Mr),ls=Gi(function(e,t){return e<=t});function ds(e){if(!e)return[];if($a(e))return as(e)?ln(e):Oi(e);if(Je&&e[Je])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Je]());var t=po(e);return(t==S?rn:t==O?sn:Us)(e)}function ps(e){return e?(e=ys(e))===c||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function hs(e){var t=ps(e),n=t%1;return t==t?n?t-n:t:0}function fs(e){return e?or(hs(e),0,p):0}function ys(e){if(\"number\"==typeof e)return e;if(ss(e))return d;if(Qa(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=Qa(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=Ht(e);var n=he.test(e);return n||ye.test(e)?st(e.slice(2),n?2:8):pe.test(e)?d:+e}function gs(e){return Ai(e,Ts(e))}function vs(e){return null==e?\"\":ai(e)}var ms=zi(function(e,t){if(So(t)||$a(t))Ai(t,ks(t),e);else for(var n in t)xe.call(t,n)&&Qn(e,n,t[n])}),_s=zi(function(e,t){Ai(t,Ts(t),e)}),bs=zi(function(e,t,n,r){Ai(t,Ts(t),e,r)}),Ss=zi(function(e,t,n,r){Ai(t,ks(t),e,r)}),ws=Qi(ir),Is=Hr(function(e,t){e=Pe(e);var n=-1,i=t.length,o=i>2?t[2]:r;for(o&&vo(t[0],t[1],o)&&(i=1);++n<i;)for(var a=t[n],s=Ts(a),u=-1,c=s.length;++u<c;){var l=s[u],d=e[l];(d===r||Ua(d,ke[l])&&!xe.call(e,l))&&(e[l]=a[l])}return e}),Ps=Hr(function(e){return e.push(r,Zi),wt(xs,r,e)});function Cs(e,t,n){var i=null==e?r:Sr(e,t);return i===r?n:i}function Os(e,t){return null!=e&&ho(e,t,Or)}var As=Di(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=Be.call(t)),e[t]=n},Qs(nu)),Es=Di(function(e,t,n){null!=t&&\"function\"!=typeof t.toString&&(t=Be.call(t)),xe.call(e,t)?e[t].push(n):e[t]=[n]},oo),zs=Hr(Er);function ks(e){return $a(e)?Kn(e):Fr(e)}function Ts(e){return $a(e)?Kn(e,!0):function(e){if(!Qa(e))return function(e){var t=[];if(null!=e)for(var n in Pe(e))t.push(n);return t}(e);var t=So(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&xe.call(e,r))&&n.push(r);return n}(e)}var js=zi(function(e,t,n){Ur(e,t,n)}),xs=zi(function(e,t,n,r){Ur(e,t,n,r)}),Fs=Qi(function(e,t){var n={};if(null==e)return n;var r=!1;t=kt(t,function(t){return t=gi(t,e),r||(r=t.length>1),t}),Ai(e,to(e),n),r&&(n=ar(n,7,Ji));for(var i=t.length;i--;)ui(n,t[i]);return n}),Ms=Qi(function(e,t){return null==e?{}:function(e,t){return Vr(e,t,function(t,n){return Os(e,n)})}(e,t)});function Bs(e,t){if(null==e)return{};var n=kt(to(e),function(e){return[e]});return t=oo(t),Vr(e,n,function(e,n){return t(e,n[0])})}var Ns=Hi(ks),Ds=Hi(Ts);function Us(e){return null==e?[]:Yt(e,ks(e))}var Rs=xi(function(e,t,n){return t=t.toLowerCase(),e+(n?Ls(t):t)});function Ls(e){return Ys(vs(e).toLowerCase())}function Vs(e){return(e=vs(e))&&e.replace(ve,Qt).replace(Ze,\"\")}var Gs=xi(function(e,t,n){return e+(n?\"-\":\"\")+t.toLowerCase()}),qs=xi(function(e,t,n){return e+(n?\" \":\"\")+t.toLowerCase()}),$s=ji(\"toLowerCase\"),Ws=xi(function(e,t,n){return e+(n?\"_\":\"\")+t.toLowerCase()}),Hs=xi(function(e,t,n){return e+(n?\" \":\"\")+Ys(t)}),Ks=xi(function(e,t,n){return e+(n?\" \":\"\")+t.toUpperCase()}),Ys=ji(\"toUpperCase\");function Zs(e,t,n){return e=vs(e),(t=n?r:t)===r?function(e){return et.test(e)}(e)?function(e){return e.match(Xe)||[]}(e):function(e){return e.match(se)||[]}(e):e.match(t)||[]}var Js=Hr(function(e,t){try{return wt(e,r,t)}catch(e){return Ya(e)?e:new Se(e)}}),Xs=Qi(function(e,t){return Pt(t,function(t){t=Bo(t),rr(e,t,Ea(e[t],e))}),e});function Qs(e){return function(){return e}}var eu=Bi(),tu=Bi(!0);function nu(e){return e}function ru(e){return xr(\"function\"==typeof e?e:ar(e,1))}var iu=Hr(function(e,t){return function(n){return Er(n,e,t)}}),ou=Hr(function(e,t){return function(n){return Er(e,n,t)}});function au(e,t,n){var r=ks(t),i=br(t,r);null!=n||Qa(t)&&(i.length||!r.length)||(n=t,t=e,e=this,i=br(t,ks(t)));var o=!(Qa(n)&&\"chain\"in n&&!n.chain),a=Za(e);return Pt(i,function(n){var r=t[n];e[n]=r,a&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__);return(n.__actions__=Oi(this.__actions__)).push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,Tt([this.value()],arguments))})}),e}function su(){}var uu=Ri(kt),cu=Ri(Ot),lu=Ri(Ft);function du(e){return mo(e)?Vt(Bo(e)):function(e){return function(t){return Sr(t,e)}}(e)}var pu=Vi(),hu=Vi(!0);function fu(){return[]}function yu(){return!1}var gu,vu=Ui(function(e,t){return e+t},0),mu=$i(\"ceil\"),_u=Ui(function(e,t){return e/t},1),bu=$i(\"floor\"),Su=Ui(function(e,t){return e*t},1),wu=$i(\"round\"),Iu=Ui(function(e,t){return e-t},0);return Dn.after=function(e,t){if(\"function\"!=typeof t)throw new Ae(i);return e=hs(e),function(){if(--e<1)return t.apply(this,arguments)}},Dn.ary=Oa,Dn.assign=ms,Dn.assignIn=_s,Dn.assignInWith=bs,Dn.assignWith=Ss,Dn.at=ws,Dn.before=Aa,Dn.bind=Ea,Dn.bindAll=Xs,Dn.bindKey=za,Dn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Ga(e)?e:[e]},Dn.chain=da,Dn.chunk=function(e,t,n){t=(n?vo(e,t,n):t===r)?1:gn(hs(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var o=0,a=0,s=re(pt(i/t));o<i;)s[a++]=ei(e,o,o+=t);return s},Dn.compact=function(e){for(var t=-1,n=null==e?0:e.length,r=0,i=[];++t<n;){var o=e[t];o&&(i[r++]=o)}return i},Dn.concat=function(){var e=arguments.length;if(!e)return[];for(var t=re(e-1),n=arguments[0],r=e;r--;)t[r-1]=arguments[r];return Tt(Ga(n)?Oi(n):[n],yr(t,1))},Dn.cond=function(e){var t=null==e?0:e.length,n=oo();return e=t?kt(e,function(e){if(\"function\"!=typeof e[1])throw new Ae(i);return[n(e[0]),e[1]]}):[],Hr(function(n){for(var r=-1;++r<t;){var i=e[r];if(wt(i[0],this,n))return wt(i[1],this,n)}})},Dn.conforms=function(e){return function(e){var t=ks(e);return function(n){return sr(n,e,t)}}(ar(e,1))},Dn.constant=Qs,Dn.countBy=fa,Dn.create=function(e,t){var n=Un(e);return null==t?n:nr(n,t)},Dn.curry=function e(t,n,i){var o=Ki(t,8,r,r,r,r,r,n=i?r:n);return o.placeholder=e.placeholder,o},Dn.curryRight=function e(t,n,i){var o=Ki(t,16,r,r,r,r,r,n=i?r:n);return o.placeholder=e.placeholder,o},Dn.debounce=ka,Dn.defaults=Is,Dn.defaultsDeep=Ps,Dn.defer=Ta,Dn.delay=ja,Dn.difference=Uo,Dn.differenceBy=Ro,Dn.differenceWith=Lo,Dn.drop=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,(t=n||t===r?1:hs(t))<0?0:t,i):[]},Dn.dropRight=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,0,(t=i-(t=n||t===r?1:hs(t)))<0?0:t):[]},Dn.dropRightWhile=function(e,t){return e&&e.length?li(e,oo(t,3),!0,!0):[]},Dn.dropWhile=function(e,t){return e&&e.length?li(e,oo(t,3),!0):[]},Dn.fill=function(e,t,n,i){var o=null==e?0:e.length;return o?(n&&\"number\"!=typeof n&&vo(e,t,n)&&(n=0,i=o),function(e,t,n,i){var o=e.length;for((n=hs(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:hs(i))<0&&(i+=o),i=n>i?0:fs(i);n<i;)e[n++]=t;return e}(e,t,n,i)):[]},Dn.filter=function(e,t){return(Ga(e)?At:fr)(e,oo(t,3))},Dn.flatMap=function(e,t){return yr(wa(e,t),1)},Dn.flatMapDeep=function(e,t){return yr(wa(e,t),c)},Dn.flatMapDepth=function(e,t,n){return n=n===r?1:hs(n),yr(wa(e,t),n)},Dn.flatten=qo,Dn.flattenDeep=function(e){return null!=e&&e.length?yr(e,c):[]},Dn.flattenDepth=function(e,t){return null!=e&&e.length?yr(e,t=t===r?1:hs(t)):[]},Dn.flip=function(e){return Ki(e,512)},Dn.flow=eu,Dn.flowRight=tu,Dn.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,r={};++t<n;){var i=e[t];rr(r,i[0],i[1])}return r},Dn.functions=function(e){return null==e?[]:br(e,ks(e))},Dn.functionsIn=function(e){return null==e?[]:br(e,Ts(e))},Dn.groupBy=_a,Dn.initial=function(e){return null!=e&&e.length?ei(e,0,-1):[]},Dn.intersection=Wo,Dn.intersectionBy=Ho,Dn.intersectionWith=Ko,Dn.invert=As,Dn.invertBy=Es,Dn.invokeMap=ba,Dn.iteratee=ru,Dn.keyBy=Sa,Dn.keys=ks,Dn.keysIn=Ts,Dn.map=wa,Dn.mapKeys=function(e,t){var n={};return t=oo(t,3),mr(e,function(e,r,i){rr(n,t(e,r,i),e)}),n},Dn.mapValues=function(e,t){var n={};return t=oo(t,3),mr(e,function(e,r,i){rr(n,r,t(e,r,i))}),n},Dn.matches=function(e){return Nr(ar(e,1))},Dn.matchesProperty=function(e,t){return Dr(e,ar(t,1))},Dn.memoize=xa,Dn.merge=js,Dn.mergeWith=xs,Dn.method=iu,Dn.methodOf=ou,Dn.mixin=au,Dn.negate=Fa,Dn.nthArg=function(e){return e=hs(e),Hr(function(t){return Rr(t,e)})},Dn.omit=Fs,Dn.omitBy=function(e,t){return Bs(e,Fa(oo(t)))},Dn.once=function(e){return Aa(2,e)},Dn.orderBy=function(e,t,n,i){return null==e?[]:(Ga(t)||(t=null==t?[]:[t]),Ga(n=i?r:n)||(n=null==n?[]:[n]),Lr(e,t,n))},Dn.over=uu,Dn.overArgs=Ma,Dn.overEvery=cu,Dn.overSome=lu,Dn.partial=Ba,Dn.partialRight=Na,Dn.partition=Ia,Dn.pick=Ms,Dn.pickBy=Bs,Dn.property=du,Dn.propertyOf=function(e){return function(t){return null==e?r:Sr(e,t)}},Dn.pull=Zo,Dn.pullAll=Jo,Dn.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?Gr(e,t,oo(n,2)):e},Dn.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?Gr(e,t,r,n):e},Dn.pullAt=Xo,Dn.range=pu,Dn.rangeRight=hu,Dn.rearg=Da,Dn.reject=function(e,t){return(Ga(e)?At:fr)(e,Fa(oo(t,3)))},Dn.remove=function(e,t){var n=[];if(!e||!e.length)return n;var r=-1,i=[],o=e.length;for(t=oo(t,3);++r<o;){var a=e[r];t(a,r,e)&&(n.push(a),i.push(r))}return qr(e,i),n},Dn.rest=function(e,t){if(\"function\"!=typeof e)throw new Ae(i);return Hr(e,t=t===r?t:hs(t))},Dn.reverse=Qo,Dn.sampleSize=function(e,t,n){return t=(n?vo(e,t,n):t===r)?1:hs(t),(Ga(e)?Zn:Yr)(e,t)},Dn.set=function(e,t,n){return null==e?e:Zr(e,t,n)},Dn.setWith=function(e,t,n,i){return i=\"function\"==typeof i?i:r,null==e?e:Zr(e,t,n,i)},Dn.shuffle=function(e){return(Ga(e)?Jn:Qr)(e)},Dn.slice=function(e,t,n){var i=null==e?0:e.length;return i?(n&&\"number\"!=typeof n&&vo(e,t,n)?(t=0,n=i):(t=null==t?0:hs(t),n=n===r?i:hs(n)),ei(e,t,n)):[]},Dn.sortBy=Pa,Dn.sortedUniq=function(e){return e&&e.length?ii(e):[]},Dn.sortedUniqBy=function(e,t){return e&&e.length?ii(e,oo(t,2)):[]},Dn.split=function(e,t,n){return n&&\"number\"!=typeof n&&vo(e,t,n)&&(t=n=r),(n=n===r?p:n>>>0)?(e=vs(e))&&(\"string\"==typeof t||null!=t&&!is(t))&&!(t=ai(t))&&nn(e)?mi(ln(e),0,n):e.split(t,n):[]},Dn.spread=function(e,t){if(\"function\"!=typeof e)throw new Ae(i);return t=null==t?0:gn(hs(t),0),Hr(function(n){var r=n[t],i=mi(n,0,t);return r&&Tt(i,r),wt(e,this,i)})},Dn.tail=function(e){var t=null==e?0:e.length;return t?ei(e,1,t):[]},Dn.take=function(e,t,n){return e&&e.length?ei(e,0,(t=n||t===r?1:hs(t))<0?0:t):[]},Dn.takeRight=function(e,t,n){var i=null==e?0:e.length;return i?ei(e,(t=i-(t=n||t===r?1:hs(t)))<0?0:t,i):[]},Dn.takeRightWhile=function(e,t){return e&&e.length?li(e,oo(t,3),!1,!0):[]},Dn.takeWhile=function(e,t){return e&&e.length?li(e,oo(t,3)):[]},Dn.tap=function(e,t){return t(e),e},Dn.throttle=function(e,t,n){var r=!0,o=!0;if(\"function\"!=typeof e)throw new Ae(i);return Qa(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),ka(e,t,{leading:r,maxWait:t,trailing:o})},Dn.thru=pa,Dn.toArray=ds,Dn.toPairs=Ns,Dn.toPairsIn=Ds,Dn.toPath=function(e){return Ga(e)?kt(e,Bo):ss(e)?[e]:Oi(Mo(vs(e)))},Dn.toPlainObject=gs,Dn.transform=function(e,t,n){var r=Ga(e),i=r||Ha(e)||us(e);if(t=oo(t,4),null==n){var o=e&&e.constructor;n=i?r?new o:[]:Qa(e)&&Za(o)?Un(qe(e)):{}}return(i?Pt:mr)(e,function(e,r,i){return t(n,e,r,i)}),n},Dn.unary=function(e){return Oa(e,1)},Dn.union=ea,Dn.unionBy=ta,Dn.unionWith=na,Dn.uniq=function(e){return e&&e.length?si(e):[]},Dn.uniqBy=function(e,t){return e&&e.length?si(e,oo(t,2)):[]},Dn.uniqWith=function(e,t){return t=\"function\"==typeof t?t:r,e&&e.length?si(e,r,t):[]},Dn.unset=function(e,t){return null==e||ui(e,t)},Dn.unzip=ra,Dn.unzipWith=ia,Dn.update=function(e,t,n){return null==e?e:ci(e,t,yi(n))},Dn.updateWith=function(e,t,n,i){return i=\"function\"==typeof i?i:r,null==e?e:ci(e,t,yi(n),i)},Dn.values=Us,Dn.valuesIn=function(e){return null==e?[]:Yt(e,Ts(e))},Dn.without=oa,Dn.words=Zs,Dn.wrap=function(e,t){return Ba(yi(t),e)},Dn.xor=aa,Dn.xorBy=sa,Dn.xorWith=ua,Dn.zip=ca,Dn.zipObject=function(e,t){return hi(e||[],t||[],Qn)},Dn.zipObjectDeep=function(e,t){return hi(e||[],t||[],Zr)},Dn.zipWith=la,Dn.entries=Ns,Dn.entriesIn=Ds,Dn.extend=_s,Dn.extendWith=bs,au(Dn,Dn),Dn.add=vu,Dn.attempt=Js,Dn.camelCase=Rs,Dn.capitalize=Ls,Dn.ceil=mu,Dn.clamp=function(e,t,n){return n===r&&(n=t,t=r),n!==r&&(n=(n=ys(n))==n?n:0),t!==r&&(t=(t=ys(t))==t?t:0),or(ys(e),t,n)},Dn.clone=function(e){return ar(e,4)},Dn.cloneDeep=function(e){return ar(e,5)},Dn.cloneDeepWith=function(e,t){return ar(e,5,t=\"function\"==typeof t?t:r)},Dn.cloneWith=function(e,t){return ar(e,4,t=\"function\"==typeof t?t:r)},Dn.conformsTo=function(e,t){return null==t||sr(e,t,ks(t))},Dn.deburr=Vs,Dn.defaultTo=function(e,t){return null==e||e!=e?t:e},Dn.divide=_u,Dn.endsWith=function(e,t,n){e=vs(e),t=ai(t);var i=e.length,o=n=n===r?i:or(hs(n),0,i);return(n-=t.length)>=0&&e.slice(n,o)==t},Dn.eq=Ua,Dn.escape=function(e){return(e=vs(e))&&H.test(e)?e.replace($,en):e},Dn.escapeRegExp=function(e){return(e=vs(e))&&te.test(e)?e.replace(ee,\"\\\\$&\"):e},Dn.every=function(e,t,n){var i=Ga(e)?Ot:pr;return n&&vo(e,t,n)&&(t=r),i(e,oo(t,3))},Dn.find=ya,Dn.findIndex=Vo,Dn.findKey=function(e,t){return Bt(e,oo(t,3),mr)},Dn.findLast=ga,Dn.findLastIndex=Go,Dn.findLastKey=function(e,t){return Bt(e,oo(t,3),_r)},Dn.floor=bu,Dn.forEach=va,Dn.forEachRight=ma,Dn.forIn=function(e,t){return null==e?e:gr(e,oo(t,3),Ts)},Dn.forInRight=function(e,t){return null==e?e:vr(e,oo(t,3),Ts)},Dn.forOwn=function(e,t){return e&&mr(e,oo(t,3))},Dn.forOwnRight=function(e,t){return e&&_r(e,oo(t,3))},Dn.get=Cs,Dn.gt=Ra,Dn.gte=La,Dn.has=function(e,t){return null!=e&&ho(e,t,Cr)},Dn.hasIn=Os,Dn.head=$o,Dn.identity=nu,Dn.includes=function(e,t,n,r){e=$a(e)?e:Us(e),n=n&&!r?hs(n):0;var i=e.length;return n<0&&(n=gn(i+n,0)),as(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&Dt(e,t,n)>-1},Dn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:hs(n);return i<0&&(i=gn(r+i,0)),Dt(e,t,i)},Dn.inRange=function(e,t,n){return t=ps(t),n===r?(n=t,t=0):n=ps(n),function(e,t,n){return e>=vn(t,n)&&e<gn(t,n)}(e=ys(e),t,n)},Dn.invoke=zs,Dn.isArguments=Va,Dn.isArray=Ga,Dn.isArrayBuffer=qa,Dn.isArrayLike=$a,Dn.isArrayLikeObject=Wa,Dn.isBoolean=function(e){return!0===e||!1===e||es(e)&&Ir(e)==g},Dn.isBuffer=Ha,Dn.isDate=Ka,Dn.isElement=function(e){return es(e)&&1===e.nodeType&&!rs(e)},Dn.isEmpty=function(e){if(null==e)return!0;if($a(e)&&(Ga(e)||\"string\"==typeof e||\"function\"==typeof e.splice||Ha(e)||us(e)||Va(e)))return!e.length;var t=po(e);if(t==S||t==O)return!e.size;if(So(e))return!Fr(e).length;for(var n in e)if(xe.call(e,n))return!1;return!0},Dn.isEqual=function(e,t){return kr(e,t)},Dn.isEqualWith=function(e,t,n){var i=(n=\"function\"==typeof n?n:r)?n(e,t):r;return i===r?kr(e,t,r,n):!!i},Dn.isError=Ya,Dn.isFinite=function(e){return\"number\"==typeof e&&Gt(e)},Dn.isFunction=Za,Dn.isInteger=Ja,Dn.isLength=Xa,Dn.isMap=ts,Dn.isMatch=function(e,t){return e===t||Tr(e,t,so(t))},Dn.isMatchWith=function(e,t,n){return n=\"function\"==typeof n?n:r,Tr(e,t,so(t),n)},Dn.isNaN=function(e){return ns(e)&&e!=+e},Dn.isNative=function(e){if(bo(e))throw new Se(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return jr(e)},Dn.isNil=function(e){return null==e},Dn.isNull=function(e){return null===e},Dn.isNumber=ns,Dn.isObject=Qa,Dn.isObjectLike=es,Dn.isPlainObject=rs,Dn.isRegExp=is,Dn.isSafeInteger=function(e){return Ja(e)&&e>=-9007199254740991&&e<=l},Dn.isSet=os,Dn.isString=as,Dn.isSymbol=ss,Dn.isTypedArray=us,Dn.isUndefined=function(e){return e===r},Dn.isWeakMap=function(e){return es(e)&&po(e)==z},Dn.isWeakSet=function(e){return es(e)&&\"[object WeakSet]\"==Ir(e)},Dn.join=function(e,t){return null==e?\"\":fn.call(e,t)},Dn.kebabCase=Gs,Dn.last=Yo,Dn.lastIndexOf=function(e,t,n){var i=null==e?0:e.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=hs(n))<0?gn(i+o,0):vn(o,i-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,o):Nt(e,Rt,o,!0)},Dn.lowerCase=qs,Dn.lowerFirst=$s,Dn.lt=cs,Dn.lte=ls,Dn.max=function(e){return e&&e.length?hr(e,nu,Pr):r},Dn.maxBy=function(e,t){return e&&e.length?hr(e,oo(t,2),Pr):r},Dn.mean=function(e){return Lt(e,nu)},Dn.meanBy=function(e,t){return Lt(e,oo(t,2))},Dn.min=function(e){return e&&e.length?hr(e,nu,Mr):r},Dn.minBy=function(e,t){return e&&e.length?hr(e,oo(t,2),Mr):r},Dn.stubArray=fu,Dn.stubFalse=yu,Dn.stubObject=function(){return{}},Dn.stubString=function(){return\"\"},Dn.stubTrue=function(){return!0},Dn.multiply=Su,Dn.nth=function(e,t){return e&&e.length?Rr(e,hs(t)):r},Dn.noConflict=function(){return lt._===this&&(lt._=De),this},Dn.noop=su,Dn.now=Ca,Dn.pad=function(e,t,n){e=vs(e);var r=(t=hs(t))?cn(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return Li(ft(i),n)+e+Li(pt(i),n)},Dn.padEnd=function(e,t,n){e=vs(e);var r=(t=hs(t))?cn(e):0;return t&&r<t?e+Li(t-r,n):e},Dn.padStart=function(e,t,n){e=vs(e);var r=(t=hs(t))?cn(e):0;return t&&r<t?Li(t-r,n)+e:e},Dn.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),_n(vs(e).replace(ne,\"\"),t||0)},Dn.random=function(e,t,n){if(n&&\"boolean\"!=typeof n&&vo(e,t,n)&&(t=n=r),n===r&&(\"boolean\"==typeof t?(n=t,t=r):\"boolean\"==typeof e&&(n=e,e=r)),e===r&&t===r?(e=0,t=1):(e=ps(e),t===r?(t=e,e=0):t=ps(t)),e>t){var i=e;e=t,t=i}if(n||e%1||t%1){var o=bn();return vn(e+o*(t-e+at(\"1e-\"+((o+\"\").length-1))),t)}return $r(e,t)},Dn.reduce=function(e,t,n){var r=Ga(e)?jt:qt,i=arguments.length<3;return r(e,oo(t,4),n,i,lr)},Dn.reduceRight=function(e,t,n){var r=Ga(e)?xt:qt,i=arguments.length<3;return r(e,oo(t,4),n,i,dr)},Dn.repeat=function(e,t,n){return t=(n?vo(e,t,n):t===r)?1:hs(t),Wr(vs(e),t)},Dn.replace=function(){var e=arguments,t=vs(e[0]);return e.length<3?t:t.replace(e[1],e[2])},Dn.result=function(e,t,n){var i=-1,o=(t=gi(t,e)).length;for(o||(o=1,e=r);++i<o;){var a=null==e?r:e[Bo(t[i])];a===r&&(i=o,a=n),e=Za(a)?a.call(e):a}return e},Dn.round=wu,Dn.runInContext=e,Dn.sample=function(e){return(Ga(e)?Yn:Kr)(e)},Dn.size=function(e){if(null==e)return 0;if($a(e))return as(e)?cn(e):e.length;var t=po(e);return t==S||t==O?e.size:Fr(e).length},Dn.snakeCase=Ws,Dn.some=function(e,t,n){var i=Ga(e)?Ft:ti;return n&&vo(e,t,n)&&(t=r),i(e,oo(t,3))},Dn.sortedIndex=function(e,t){return ni(e,t)},Dn.sortedIndexBy=function(e,t,n){return ri(e,t,oo(n,2))},Dn.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var r=ni(e,t);if(r<n&&Ua(e[r],t))return r}return-1},Dn.sortedLastIndex=function(e,t){return ni(e,t,!0)},Dn.sortedLastIndexBy=function(e,t,n){return ri(e,t,oo(n,2),!0)},Dn.sortedLastIndexOf=function(e,t){if(null!=e&&e.length){var n=ni(e,t,!0)-1;if(Ua(e[n],t))return n}return-1},Dn.startCase=Hs,Dn.startsWith=function(e,t,n){return e=vs(e),n=null==n?0:or(hs(n),0,e.length),t=ai(t),e.slice(n,n+t.length)==t},Dn.subtract=Iu,Dn.sum=function(e){return e&&e.length?$t(e,nu):0},Dn.sumBy=function(e,t){return e&&e.length?$t(e,oo(t,2)):0},Dn.template=function(e,t,n){var i=Dn.templateSettings;n&&vo(e,t,n)&&(t=r),e=vs(e),t=Ss({},t,i,Yi);var o=Ss({},t.imports,i.imports,Yi),a=ks(o),s=Yt(o,a);Pt(a,function(e){if(ue.test(e))throw new Se(\"Invalid `imports` option passed into `_.template`\")});var u,c,l=0,d=t.interpolate||me,p=\"__p += '\",h=Ce((t.escape||me).source+\"|\"+d.source+\"|\"+(d===Z?le:me).source+\"|\"+(t.evaluate||me).source+\"|$\",\"g\"),f=\"//# sourceURL=\"+(xe.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++nt+\"]\")+\"\\n\";e.replace(h,function(t,n,r,i,o,a){return r||(r=i),p+=e.slice(l,a).replace(_e,tn),n&&(u=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(c=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=a+t.length,t}),p+=\"';\\n\";var y=xe.call(t,\"variable\")&&t.variable;if(y){if(ue.test(y))throw new Se(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(c?p.replace(L,\"\"):p).replace(V,\"$1\").replace(G,\"$1;\"),p=\"function(\"+(y||\"obj\")+\") {\\n\"+(y?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(u?\", __e = _.escape\":\"\")+(c?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var g=Js(function(){return we(a,f+\"return \"+p).apply(r,s)});if(g.source=p,Ya(g))throw g;return g},Dn.times=function(e,t){if((e=hs(e))<1||e>l)return[];var n=p,r=vn(e,p);t=oo(t),e-=p;for(var i=Wt(r,t);++n<e;)t(n);return i},Dn.toFinite=ps,Dn.toInteger=hs,Dn.toLength=fs,Dn.toLower=function(e){return vs(e).toLowerCase()},Dn.toNumber=ys,Dn.toSafeInteger=function(e){return e?or(hs(e),-9007199254740991,l):0===e?e:0},Dn.toString=vs,Dn.toUpper=function(e){return vs(e).toUpperCase()},Dn.trim=function(e,t,n){if((e=vs(e))&&(n||t===r))return Ht(e);if(!e||!(t=ai(t)))return e;var i=ln(e),o=ln(t);return mi(i,Jt(i,o),Xt(i,o)+1).join(\"\")},Dn.trimEnd=function(e,t,n){if((e=vs(e))&&(n||t===r))return e.slice(0,dn(e)+1);if(!e||!(t=ai(t)))return e;var i=ln(e);return mi(i,0,Xt(i,ln(t))+1).join(\"\")},Dn.trimStart=function(e,t,n){if((e=vs(e))&&(n||t===r))return e.replace(ne,\"\");if(!e||!(t=ai(t)))return e;var i=ln(e);return mi(i,Jt(i,ln(t))).join(\"\")},Dn.truncate=function(e,t){var n=30,i=\"...\";if(Qa(t)){var o=\"separator\"in t?t.separator:o;n=\"length\"in t?hs(t.length):n,i=\"omission\"in t?ai(t.omission):i}var a=(e=vs(e)).length;if(nn(e)){var s=ln(e);a=s.length}if(n>=a)return e;var u=n-cn(i);if(u<1)return i;var c=s?mi(s,0,u).join(\"\"):e.slice(0,u);if(o===r)return c+i;if(s&&(u+=c.length-u),is(o)){if(e.slice(u).search(o)){var l,d=c;for(o.global||(o=Ce(o.source,vs(de.exec(o))+\"g\")),o.lastIndex=0;l=o.exec(d);)var p=l.index;c=c.slice(0,p===r?u:p)}}else if(e.indexOf(ai(o),u)!=u){var h=c.lastIndexOf(o);h>-1&&(c=c.slice(0,h))}return c+i},Dn.unescape=function(e){return(e=vs(e))&&W.test(e)?e.replace(q,pn):e},Dn.uniqueId=function(e){var t=++Fe;return vs(e)+t},Dn.upperCase=Ks,Dn.upperFirst=Ys,Dn.each=va,Dn.eachRight=ma,Dn.first=$o,au(Dn,(gu={},mr(Dn,function(e,t){xe.call(Dn.prototype,t)||(gu[t]=e)}),gu),{chain:!1}),Dn.VERSION=\"4.18.1\",Pt([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(e){Dn[e].placeholder=Dn}),Pt([\"drop\",\"take\"],function(e,t){Vn.prototype[e]=function(n){n=n===r?1:gn(hs(n),0);var i=this.__filtered__&&!t?new Vn(this):this.clone();return i.__filtered__?i.__takeCount__=vn(n,i.__takeCount__):i.__views__.push({size:vn(n,p),type:e+(i.__dir__<0?\"Right\":\"\")}),i},Vn.prototype[e+\"Right\"]=function(t){return this.reverse()[e](t).reverse()}}),Pt([\"filter\",\"map\",\"takeWhile\"],function(e,t){var n=t+1,r=1==n||3==n;Vn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:oo(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}}),Pt([\"head\",\"last\"],function(e,t){var n=\"take\"+(t?\"Right\":\"\");Vn.prototype[e]=function(){return this[n](1).value()[0]}}),Pt([\"initial\",\"tail\"],function(e,t){var n=\"drop\"+(t?\"\":\"Right\");Vn.prototype[e]=function(){return this.__filtered__?new Vn(this):this[n](1)}}),Vn.prototype.compact=function(){return this.filter(nu)},Vn.prototype.find=function(e){return this.filter(e).head()},Vn.prototype.findLast=function(e){return this.reverse().find(e)},Vn.prototype.invokeMap=Hr(function(e,t){return\"function\"==typeof e?new Vn(this):this.map(function(n){return Er(n,e,t)})}),Vn.prototype.reject=function(e){return this.filter(Fa(oo(e)))},Vn.prototype.slice=function(e,t){e=hs(e);var n=this;return n.__filtered__&&(e>0||t<0)?new Vn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==r&&(n=(t=hs(t))<0?n.dropRight(-t):n.take(t-e)),n)},Vn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Vn.prototype.toArray=function(){return this.take(p)},mr(Vn.prototype,function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),o=Dn[i?\"take\"+(\"last\"==t?\"Right\":\"\"):t],a=i||/^find/.test(t);o&&(Dn.prototype[t]=function(){var t=this.__wrapped__,s=i?[1]:arguments,u=t instanceof Vn,c=s[0],l=u||Ga(t),d=function(e){var t=o.apply(Dn,Tt([e],s));return i&&p?t[0]:t};l&&n&&\"function\"==typeof c&&1!=c.length&&(u=l=!1);var p=this.__chain__,h=!!this.__actions__.length,f=a&&!p,y=u&&!h;if(!a&&l){t=y?t:new Vn(this);var g=e.apply(t,s);return g.__actions__.push({func:pa,args:[d],thisArg:r}),new Ln(g,p)}return f&&y?e.apply(this,s):(g=this.thru(d),f?i?g.value()[0]:g.value():g)})}),Pt([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(e){var t=Ee[e],n=/^(?:push|sort|unshift)$/.test(e)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(e);Dn.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(Ga(i)?i:[],e)}return this[n](function(n){return t.apply(Ga(n)?n:[],e)})}}),mr(Vn.prototype,function(e,t){var n=Dn[t];if(n){var r=n.name+\"\";xe.call(zn,r)||(zn[r]=[]),zn[r].push({name:t,func:n})}}),zn[Ni(r,2).name]=[{name:\"wrapper\",func:r}],Vn.prototype.clone=function(){var e=new Vn(this.__wrapped__);return e.__actions__=Oi(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Oi(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Oi(this.__views__),e},Vn.prototype.reverse=function(){if(this.__filtered__){var e=new Vn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Vn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Ga(e),r=t<0,i=n?e.length:0,o=function(e,t,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case\"drop\":e+=a;break;case\"dropRight\":t-=a;break;case\"take\":t=vn(t,e+a);break;case\"takeRight\":e=gn(e,t-a)}}return{start:e,end:t}}(0,i,this.__views__),a=o.start,s=o.end,u=s-a,c=r?s:a-1,l=this.__iteratees__,d=l.length,p=0,h=vn(u,this.__takeCount__);if(!n||!r&&i==u&&h==u)return di(e,this.__actions__);var f=[];e:for(;u--&&p<h;){for(var y=-1,g=e[c+=t];++y<d;){var v=l[y],m=v.iteratee,_=v.type,b=m(g);if(2==_)g=b;else if(!b){if(1==_)continue e;break e}}f[p++]=g}return f},Dn.prototype.at=ha,Dn.prototype.chain=function(){return da(this)},Dn.prototype.commit=function(){return new Ln(this.value(),this.__chain__)},Dn.prototype.next=function(){this.__values__===r&&(this.__values__=ds(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?r:this.__values__[this.__index__++]}},Dn.prototype.plant=function(e){for(var t,n=this;n instanceof Rn;){var i=Do(n);i.__index__=0,i.__values__=r,t?o.__wrapped__=i:t=i;var o=i;n=n.__wrapped__}return o.__wrapped__=e,t},Dn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Vn){var t=e;return this.__actions__.length&&(t=new Vn(this)),(t=t.reverse()).__actions__.push({func:pa,args:[Qo],thisArg:r}),new Ln(t,this.__chain__)}return this.thru(Qo)},Dn.prototype.toJSON=Dn.prototype.valueOf=Dn.prototype.value=function(){return di(this.__wrapped__,this.__actions__)},Dn.prototype.first=Dn.prototype.head,Je&&(Dn.prototype[Je]=function(){return this}),Dn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(lt._=hn,define(function(){return hn})):pt?((pt.exports=hn)._=hn,dt._=hn):lt._=hn}.call(this)},1657(e){\"use strict\";e.exports=(e,t)=>{if(\"string\"!=typeof e||\"string\"!=typeof t)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===t)return[e];const n=e.indexOf(t);return-1===n?[e]:[e.slice(0,n),e.slice(n+t.length)]}},803(e){\"use strict\";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)},1635(e,t,n){\"use strict\";n.d(t,{__assign:()=>r});var r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createPayPalCommerceAlternativeMethodsPaymentStrategy:()=>me,createPayPalCommerceButtonStrategy:()=>pt,createPayPalCommerceCreditButtonStrategy:()=>yt,createPayPalCommerceCreditCardsPaymentStrategy:()=>Fe,createPayPalCommerceCreditCustomerStrategy:()=>it,createPayPalCommerceCreditPaymentStrategy:()=>re,createPayPalCommerceCustomerStrategy:()=>Ze,createPayPalCommerceFastlaneCustomerStrategy:()=>lt,createPayPalCommerceFastlanePaymentStrategy:()=>$e,createPayPalCommercePaymentStrategy:()=>Q,createPayPalCommerceRatePayPaymentStrategy:()=>Ne,createPayPalCommerceVenmoButtonStrategy:()=>mt,createPayPalCommerceVenmoCustomerStrategy:()=>st,createPayPalCommerceVenmoPaymentStrategy:()=>ae});var e=n(315);function t(e,t){return Object.assign(e,{resolveIds:t})}var i,o=n(8686),a=n(4043);class s extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class u extends s{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(i||(i={}));class c extends s{constructor(e){super(function(e){switch(e){case i.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case i.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case i.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case i.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case i.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case i.MissingCheckoutConfig:case i.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case i.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case i.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case i.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case i.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case i.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case i.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}const l={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},d=[\"ar_BH\",\"ar_DZ\",\"ar_EG\",\"ar_JO\",\"ar_KW\",\"ar_MA\",\"ar_OM\",\"ar_QA\",\"ar_SA\",\"ar_TN\",\"ar_YE\",\"ar_AE\",\"bg_BG\",\"cs_CZ\",\"da_DK\",\"da_FO\",\"da_GL\",\"de_AT\",\"de_CH\",\"de_DE\",\"de_LU\",\"el_GR\",\"en_AD\",\"en_AE\",\"en_AG\",\"en_AI\",\"en_AL\",\"en_AM\",\"en_AN\",\"en_AO\",\"en_AT\",\"en_AU\",\"en_AW\",\"en_AZ\",\"en_BB\",\"en_BE\",\"en_BH\",\"en_BJ\",\"en_BM\",\"en_BN\",\"en_BS\",\"en_BT\",\"en_BW\",\"en_BY\",\"en_BZ\",\"en_C2\",\"en_CA\",\"en_CD\",\"en_CG\",\"en_CH\",\"en_CI\",\"en_CK\",\"en_CL\",\"en_CM\",\"en_CN\",\"en_CO\",\"en_CR\",\"en_CV\",\"en_CY\",\"en_CZ\",\"en_DE\",\"en_DJ\",\"en_DK\",\"en_DM\",\"en_DO\",\"en_DZ\",\"en_EC\",\"en_EE\",\"en_EG\",\"en_ER\",\"en_ES\",\"en_ET\",\"en_FI\",\"en_FJ\",\"en_FK\",\"en_FM\",\"en_FO\",\"en_FR\",\"en_GA\",\"en_GB\",\"en_GD\",\"en_GE\",\"en_GF\",\"en_GI\",\"en_GL\",\"en_GM\",\"en_GN\",\"en_GP\",\"en_GR\",\"en_GT\",\"en_GW\",\"en_GY\",\"en_HK\",\"en_HN\",\"en_HR\",\"en_HU\",\"en_ID\",\"en_IE\",\"en_IL\",\"en_IN\",\"en_IS\",\"en_IT\",\"en_JM\",\"en_JO\",\"en_JP\",\"en_KE\",\"en_KG\",\"en_KH\",\"en_KI\",\"en_KM\",\"en_KN\",\"en_KR\",\"en_KW\",\"en_KY\",\"en_KZ\",\"en_LA\",\"en_LC\",\"en_LI\",\"en_LK\",\"en_LS\",\"en_LT\",\"en_LU\",\"en_LV\",\"en_MA\",\"en_MC\",\"en_MD\",\"en_ME\",\"en_MG\",\"en_MH\",\"en_MK\",\"en_ML\",\"en_MN\",\"en_MQ\",\"en_MR\",\"en_MS\",\"en_MT\",\"en_MU\",\"en_MV\",\"en_MW\",\"en_MY\",\"en_MZ\",\"en_NA\",\"en_NC\",\"en_NE\",\"en_NF\",\"en_NG\",\"en_NI\",\"en_NL\",\"en_NO\",\"en_NP\",\"en_NR\",\"en_NU\",\"en_NZ\",\"en_OM\",\"en_PA\",\"en_PE\",\"en_PF\",\"en_PG\",\"en_PH\",\"en_PL\",\"en_PM\",\"en_PN\",\"en_PT\",\"en_PW\",\"en_PY\",\"en_QA\",\"en_RE\",\"en_RO\",\"en_RS\",\"en_RU\",\"en_RW\",\"en_SA\",\"en_SB\",\"en_SC\",\"en_SE\",\"en_SG\",\"en_SH\",\"en_SI\",\"en_SJ\",\"en_SK\",\"en_SL\",\"en_SM\",\"en_SN\",\"en_SO\",\"en_SR\",\"en_ST\",\"en_SV\",\"en_SZ\",\"en_TC\",\"en_TD\",\"en_TG\",\"en_TH\",\"en_TJ\",\"en_TM\",\"en_TN\",\"en_TO\",\"en_TR\",\"en_TT\",\"en_TV\",\"en_TW\",\"en_TZ\",\"en_UA\",\"en_UG\",\"en_US\",\"en_UY\",\"en_VA\",\"en_VC\",\"en_VE\",\"en_VG\",\"en_VN\",\"en_VU\",\"en_WF\",\"en_WS\",\"en_YE\",\"en_YT\",\"en_ZA\",\"en_ZM\",\"en_ZW\",\"es_AD\",\"es_AI\",\"es_AO\",\"es_AR\",\"es_AW\",\"es_BB\",\"es_BJ\",\"es_BM\",\"es_BO\",\"es_BS\",\"es_BZ\",\"es_CD\",\"es_CG\",\"es_CK\",\"es_CL\",\"es_CO\",\"es_CR\",\"es_CV\",\"es_DJ\",\"es_DM\",\"es_DO\",\"es_DZ\",\"es_EC\",\"es_EG\",\"es_ER\",\"es_ES\",\"es_ET\",\"es_FJ\",\"es_FK\",\"es_FO\",\"es_GA\",\"es_GD\",\"es_GE\",\"es_GI\",\"es_GL\",\"es_GM\",\"es_GN\",\"es_GT\",\"es_GW\",\"es_GY\",\"es_HN\",\"es_IE\",\"es_JM\",\"es_JO\",\"es_KE\",\"es_KG\",\"es_KI\",\"es_KM\",\"es_KN\",\"es_KW\",\"es_KY\",\"es_KZ\",\"es_LC\",\"es_LI\",\"es_LS\",\"es_LU\",\"es_MA\",\"es_MG\",\"es_MH\",\"es_ML\",\"es_MR\",\"es_MS\",\"es_MU\",\"es_MW\",\"es_MX\",\"es_MZ\",\"es_NA\",\"es_NC\",\"es_NE\",\"es_NF\",\"es_NI\",\"es_NR\",\"es_NU\",\"es_NZ\",\"es_OM\",\"es_PA\",\"es_PE\",\"es_PF\",\"es_PG\",\"es_PM\",\"es_PN\",\"es_PW\",\"es_PY\",\"es_QA\",\"es_RS\",\"es_RW\",\"es_SA\",\"es_SB\",\"es_SC\",\"es_SH\",\"es_SJ\",\"es_SL\",\"es_SM\",\"es_SN\",\"es_SO\",\"es_SR\",\"es_ST\",\"es_SV\",\"es_SZ\",\"es_TC\",\"es_TD\",\"es_TG\",\"es_TJ\",\"es_TM\",\"es_TN\",\"es_TT\",\"es_TV\",\"es_UA\",\"es_UG\",\"es_US\",\"es_UY\",\"es_VA\",\"es_VC\",\"es_VE\",\"es_VG\",\"es_VU\",\"es_WF\",\"es_YE\",\"es_ZM\",\"et_EE\",\"fi_FI\",\"fr_AD\",\"fr_AE\",\"fr_AI\",\"fr_AM\",\"fr_AO\",\"fr_AW\",\"fr_AZ\",\"fr_BB\",\"fr_BE\",\"fr_BF\",\"fr_BI\",\"fr_BJ\",\"fr_BM\",\"fr_BS\",\"fr_BZ\",\"fr_CA\",\"fr_CD\",\"fr_CG\",\"fr_CH\",\"fr_CI\",\"fr_CK\",\"fr_CM\",\"fr_CV\",\"fr_DJ\",\"fr_DM\",\"fr_DO\",\"fr_DZ\",\"fr_EC\",\"fr_ER\",\"fr_ET\",\"fr_FJ\",\"fr_FK\",\"fr_FO\",\"fr_FR\",\"fr_GA\",\"fr_GD\",\"fr_GE\",\"fr_GF\",\"fr_GI\",\"fr_GL\",\"fr_GM\",\"fr_GN\",\"fr_GP\",\"fr_GT\",\"fr_GW\",\"fr_GY\",\"fr_HN\",\"fr_IE\",\"fr_JM\",\"fr_JO\",\"fr_KE\",\"fr_KG\",\"fr_KI\",\"fr_KM\",\"fr_KN\",\"fr_KW\",\"fr_KY\",\"fr_KZ\",\"fr_LC\",\"fr_LI\",\"fr_LS\",\"fr_LU\",\"fr_MA\",\"fr_MC\",\"fr_MG\",\"fr_MH\",\"fr_ML\",\"fr_MQ\",\"fr_MR\",\"fr_MS\",\"fr_MU\",\"fr_MW\",\"fr_MZ\",\"fr_NA\",\"fr_NC\",\"fr_NE\",\"fr_NF\",\"fr_NI\",\"fr_NR\",\"fr_NU\",\"fr_NZ\",\"fr_OM\",\"fr_PA\",\"fr_PE\",\"fr_PF\",\"fr_PG\",\"fr_PM\",\"fr_PN\",\"fr_PW\",\"fr_QA\",\"fr_RE\",\"fr_RS\",\"fr_RW\",\"fr_SA\",\"fr_SB\",\"fr_SC\",\"fr_SH\",\"fr_SJ\",\"fr_SL\",\"fr_SM\",\"fr_SN\",\"fr_SO\",\"fr_SR\",\"fr_ST\",\"fr_SV\",\"fr_SZ\",\"fr_TC\",\"fr_TD\",\"fr_TG\",\"fr_TJ\",\"fr_TM\",\"fr_TN\",\"fr_TT\",\"fr_TV\",\"fr_UA\",\"fr_UG\",\"fr_US\",\"fr_UY\",\"fr_VA\",\"fr_VC\",\"fr_VE\",\"fr_VG\",\"fr_VU\",\"fr_WF\",\"fr_YE\",\"fr_YT\",\"fr_ZA\",\"fr_ZM\",\"he_IL\",\"hu_HU\",\"id_ID\",\"it_IT\",\"ja_JP\",\"ko_KR\",\"lv_LV\",\"lt_LT\",\"ms_BN\",\"ms_MY\",\"nl_BE\",\"nl_NL\",\"pl_PL\",\"pt_BR\",\"pt_PT\",\"ro_RO\",\"ru_EE\",\"ru_LT\",\"ru_LV\",\"ru_RU\",\"ru_UA\",\"si_LK\",\"sk_SK\",\"sl_SI\",\"sq_AL\",\"sv_SE\",\"tl_PH\",\"th_TH\",\"tr_TR\",\"vi_VN\",\"zh_C2\",\"zh_CN\",\"zh_HK\",\"zh_TW\",\"zh_AD\",\"zh_AE\",\"zh_AI\",\"zh_AO\",\"zh_AW\",\"zh_BB\",\"zh_BH\",\"zh_BJ\",\"zh_BM\",\"zh_BS\",\"zh_BZ\",\"zh_CD\",\"zh_CG\",\"zh_CK\",\"zh_CL\",\"zh_CO\",\"zh_CV\",\"zh_DJ\",\"zh_DM\",\"zh_DO\",\"zh_DZ\",\"zh_EC\",\"zh_EG\",\"zh_ER\",\"zh_ET\",\"zh_FJ\",\"zh_FK\",\"zh_FO\",\"zh_GA\",\"zh_GD\",\"zh_GE\",\"zh_GI\",\"zh_GL\",\"zh_GM\",\"zh_GN\",\"zh_GT\",\"zh_GW\",\"zh_GY\",\"zh_HN\",\"zh_IE\",\"zh_JM\",\"zh_JO\",\"zh_KE\",\"zh_KG\",\"zh_KI\",\"zh_KM\",\"zh_KN\",\"zh_KW\",\"zh_KY\",\"zh_KZ\",\"zh_LC\",\"zh_LI\",\"zh_LS\",\"zh_LT\",\"zh_LU\",\"zh_MA\",\"zh_MG\",\"zh_MH\",\"zh_ML\",\"zh_MR\",\"zh_MS\",\"zh_MU\",\"zh_MW\",\"zh_MZ\",\"zh_NA\",\"zh_NC\",\"zh_NE\",\"zh_NF\",\"zh_NI\",\"zh_NR\",\"zh_NU\",\"zh_NZ\",\"zh_OM\",\"zh_PA\",\"zh_PE\",\"zh_PF\",\"zh_PG\",\"zh_PM\",\"zh_PN\",\"zh_PW\",\"zh_QA\",\"zh_RS\",\"zh_RW\",\"zh_SA\",\"zh_SB\",\"zh_SC\",\"zh_SH\",\"zh_SJ\",\"zh_SL\",\"zh_SM\",\"zh_SN\",\"zh_SO\",\"zh_SR\",\"zh_ST\",\"zh_SV\",\"zh_SZ\",\"zh_TC\",\"zh_TD\",\"zh_TG\",\"zh_TJ\",\"zh_TM\",\"zh_TN\",\"zh_TT\",\"zh_TV\",\"zh_UA\",\"zh_UG\",\"zh_US\",\"zh_UY\",\"zh_VA\",\"zh_VC\",\"zh_VE\",\"zh_VG\",\"zh_VU\",\"zh_WF\",\"zh_YE\",\"zh_ZA\",\"zh_ZM\"];function p(e){if(!e)return;let t;if(e.includes(\"-\")){const[n,r]=e.split(\"-\");t=`${n}_${r.toUpperCase()}`}else t=`${e}_${e.toUpperCase()}`;return d.includes(t)?t:void 0}var h=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class f{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,r,i){return h(this,void 0,void 0,function*(){if(!this.window.paypal||i){const i=this.getPayPalSdkScriptConfigOrThrow(e,t,n,r);if(yield this.loadPayPalSdk(i),!this.window.paypal)throw new u}return this.window.paypal})}getPayPalFastlaneSdk(e,t,n,r){return h(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const i=this.getPayPalFastlaneSdkConfiguration(e,t,n,r);if(yield this.loadPayPalSdk(i),!this.window.paypalFastlaneSdk)throw new u}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,r,i){return h(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||i){const i=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,r);yield this.loadPayPalSdk(i)}if(!this.window.paypalGooglePay)throw new u;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return h(this,void 0,void 0,function*(){if(!this.window.paypalApms){const r=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(r),!this.window.paypalApms)throw new u}return this.window.paypalApms})}getPayPalMessages(e,t,n){return h(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const r=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(r)}if(!this.window.paypalMessages)throw new u;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return h(this,void 0,void 0,function*(){const n=this.transformConfig(e),r=this.transformConfig(t),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:r})})}getPayPalSdkScriptConfigOrThrow(e,t,n,r=!0){const{id:o,clientToken:a,initializationData:s}=e;if(!s||!s.clientId)throw new c(i.MissingPaymentMethod);const{intent:u,clientId:l,merchantId:d,buyerCountry:h,attributionId:f,isVenmoEnabled:y,isHostedCheckoutEnabled:g,isPayPalCreditAvailable:v,isDeveloperModeApplicable:m,availableAlternativePaymentMethods:_=[],enabledAlternativePaymentMethods:b=[],isGooglePayEnabled:S}=s,w=g||r,I=\"paypalcommercecreditcards\"===o||\"bigcommerce_payments_creditcards\"===o,P=I?[\"card\"]:[],C=v?[\"credit\",\"paylater\"]:[],O=y?[\"venmo\"]:[],A=S?[\"googlepay\"]:[],E=r?[\"card-fields\"]:[],z=[...I?[]:[\"card\"],...v?[]:[\"credit\",\"paylater\"],...y?[]:[\"venmo\"],..._.filter(e=>!b.includes(e))],k=[...P,...C,...O,...b],T=p(n);return{options:Object.assign(Object.assign({\"client-id\":l,\"merchant-id\":d,\"enable-funding\":k.length>0?k:void 0,\"disable-funding\":z.length>0?z:void 0,commit:w,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...A,...E],currency:t,intent:u},m&&{\"buyer-country\":h}),T&&{locale:T}),attributes:{\"data-partner-attribution-id\":f,\"data-client-token\":a}}}getPayPalFastlaneSdkConfiguration(e,t,n,r){const{clientToken:o,initializationData:a}=e;if(!a||!a.clientId)throw new c(i.MissingPaymentMethod);const{intent:s,clientId:u,merchantId:l,attributionId:d}=a,h=p(r);return{options:Object.assign(Object.assign({\"client-id\":u,\"merchant-id\":l,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t},h&&{locale:h}),{intent:s}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":d,\"data-sdk-client-token\":o}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,r=!0){const{clientToken:o,initializationData:a}=e;if(!a||!a.clientId)throw new c(i.MissingPaymentMethod);const{intent:s,clientId:u,merchantId:l,buyerCountry:d,attributionId:h,isHostedCheckoutEnabled:f,isDeveloperModeApplicable:y}=a,g=f||r,v=p(n);return{options:Object.assign(Object.assign({\"client-id\":u,\"merchant-id\":l,commit:g,components:[\"googlepay\"],currency:t,intent:s},y&&{\"buyer-country\":d}),v&&{locale:v}),attributes:{\"data-partner-attribution-id\":h,\"data-client-token\":o,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:r}=e;if(!r||!r.clientId)throw new c(i.MissingPaymentMethod);const{intent:o,clientId:a,merchantId:s,buyerCountry:u,attributionId:l,isDeveloperModeApplicable:d,availableAlternativePaymentMethods:h=[],enabledAlternativePaymentMethods:f=[]}=r,y=f,g=h.filter(e=>!f.includes(e)),v=p(n);return{options:Object.assign(Object.assign({\"client-id\":a,\"merchant-id\":s,\"enable-funding\":y.length>0?y:void 0,\"disable-funding\":g.length>0?g:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:o},d&&{\"buyer-country\":u}),v&&{locale:v}),attributes:{\"data-partner-attribution-id\":l,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:r}=e;if(!r||!r.clientId)throw new c(i.MissingPaymentMethod);const{clientId:o,merchantId:a,attributionId:s,isDeveloperModeApplicable:u,buyerCountry:l}=r,d=p(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":a,components:[\"messages\"],currency:t},u&&{\"buyer-country\":l}),d&&{locale:d}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":s}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const r=e[n];null==r||\"\"===r||Array.isArray(r)&&0===r.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(r)?r.join(\",\"):r}))}),t}}function y(){return new f((0,e.vQ)())}var g=n(9440);class v extends s{constructor(e){super(e||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}const m={body:{},headers:{},status:0};class _ extends s{constructor(e,{message:t,errors:n}={}){const{body:r,headers:i,status:o}=e||m;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=i,this.status=o,this.errors=n||[]}}var b,S,w,I,P,C,O,A,E,z,k;!function(e){e.BuyNow=\"BUY_NOW\"}(b||(b={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(S||(S={})),function(e){e.Always=\"SCA_ALWAYS\"}(w||(w={})),function(e){e.Succeeded=\"succeeded\",e.Cancelled=\"cancelled\",e.Errored=\"errored\"}(I||(I={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(P||(P={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(C||(C={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(O||(O={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(A||(A={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"canceled\",e.UNRECOGNIZED=\"unrecognized\"}(E||(E={})),function(e){e.OXXO=\"oxxo\"}(z||(z={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(k||(k={}));var T=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class j{constructor(e,t,n,r){this.formPoster=e,this.paymentIntegrationService=t,this.paypalRequestSender=n,this.paypalSdkLoader=r}loadPayPalSdk(e,t,n,r){return T(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),o=t||i.getCartOrThrow().currency.code,a=i.getPaymentMethodOrThrow(e),s=i.getLocale();return this.paypalSdk=yield this.paypalSdkLoader.getPayPalSDK(a,o,s,n,r),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new u;return this.paypalSdk}createBuyNowCartOrThrow(e){return T(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new c(i.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new v}})}createOrder(e,t){return T(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:r}=yield this.paypalRequestSender.createOrder(e,Object.assign({cartId:n},t));return r})}createOrderCardFields(e,t){return T(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:r,setupToken:i}=yield this.paypalRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:r},i?{setupToken:i}:{})})}updateOrder(e,t,n,r){return T(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),o=i.getCartOrThrow();let a;r||(a=i.getConsignmentsOrThrow()[0]);try{yield this.paypalRequestSender.updateOrder(e,Object.assign(Object.assign({availableShippingOptions:r?[]:null==a?void 0:a.availableShippingOptions,cartId:o.id,selectedShippingOption:r?null:null==a?void 0:a.selectedShippingOption},t?{methodId:t}:{}),n?{orderId:n}:{}))}catch(e){throw new _}})}getOrderStatus(e,t){return T(this,void 0,void 0,function*(){try{const{status:n}=yield this.paypalRequestSender.getOrderStatus(e,t);return n}catch(e){throw new _}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new c(i.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===b.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return T(this,void 0,void 0,function*(){const r={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:r},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],r=n.find(e=>e.isRecommended),i=(e?n.find(t=>t.id===e):n.find(e=>{if(t.selectedShippingOption){const n=t.selectedShippingOption.id;return e.id===n}return!1}))||r||n[0];if(!i)throw new Error(\"Your order can't be shipped to this address\");return i}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:r,name:{full_name:i}}=n[0].shipping,[o,...a]=i.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:r.address_line_1,address2:r.address_line_2,city:r.admin_area_2,countryCode:r.country_code,postalCode:r.postal_code,stateOrProvinceCode:r.admin_area_1})}getValidButtonStyle(e={}){const{color:t,height:n,label:r,shape:i}=e,o={color:t&&O[t]?t:void 0,height:this.getValidHeight(n),label:r&&C[r]?r:void 0,shape:i&&A[i]?i:void 0};return(0,g.omitBy)(o,g.isNil)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}const x=\"This API endpoint is for internal use only and may change in the future\";var F;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(F||(F={}));const M=F,B={\"X-Checkout-SDK-Version\":\"1.916.1\"};var N=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class D{constructor(e){this.requestSender=e}createOrder(e,t){return N(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,r=t,i=Object.assign({\"X-API-INTERNAL\":x,\"Content-Type\":M.Json},B);return(yield this.requestSender.post(n,{headers:i,body:r})).body})}updateOrder(e,t){return N(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,r=t,i=Object.assign({\"X-API-INTERNAL\":x,\"Content-Type\":M.Json},B);return(yield this.requestSender.put(n,{headers:i,body:r})).body})}getOrderStatus(e,t){return N(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,r=Object.assign({\"X-API-INTERNAL\":x,\"Content-Type\":M.Json},B);return(yield this.requestSender.get(n,Object.assign({headers:r},t))).body})}}const U=e=>{const{getHost:t}=e.getState();return new j((0,o.createFormPoster)(),e,new D((0,a.createRequestSender)({host:t()})),y())},R={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},L=\"embedded-checkout-loading-indicator-rotation\";class V{constructor(e){this.styles=Object.assign(Object.assign({},R),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${L} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(n=>{e.style.setProperty(n,t[n])})}defineAnimation(){var e;if(document.getElementById(L))return;const t=document.createElement(\"style\");t.id=L,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${L} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}class G extends s{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class q extends G{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class $ extends _{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class W extends s{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}function H(e){return!(\"object\"!=typeof e||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument)}function K(e){return Boolean(e.instrumentId)}const Y=function({styles:e}){const t={};return e.color&&(t.color=e.color),e.layout&&(t.layout=e.layout),(e[\"logo-type\"]||e[\"logo-position\"])&&(t.logo={},e[\"logo-type\"]&&(t.logo.type=e[\"logo-type\"]),e[\"logo-position\"]&&(t.logo.position=e[\"logo-position\"])),e.ratio&&(t.ratio=e.ratio),(e[\"text-color\"]||e[\"text-size\"])&&(t.text={},e[\"text-color\"]&&(t.text.color=e[\"text-color\"]),e[\"text-size\"]&&(t.text.size=+e[\"text-size\"])),t};function Z(e){return\"object\"==typeof e&&null!==e&&\"bigpayToken\"in e&&\"defaultInstrument\"in e&&\"provider\"in e&&\"trustedShippingAddress\"in e&&\"method\"in e&&\"type\"in e}var J=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class X{constructor(e,t,n,r){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.payPalSdkScriptLoader=n,this.loadingIndicator=r}initialize(e){var t;return J(this,void 0,void 0,function*(){const{methodId:n,paypalcommerce:r}=e||{};if(this.paypalcommerce=r,!n)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new G('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const i=this.paymentIntegrationService.getState(),o=i.getPaymentMethodOrThrow(n),{container:a,bannerContainerId:s}=r,{orderId:u,paypalBNPLConfiguration:c=[],isPayPalCreditAvailable:l}=o.initializationData||{};if(void 0!==s){if(!document.getElementById(s))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=null==c?void 0:c.find(({id:e})=>\"checkout\"===e);if(l||!(null==e?void 0:e.status))return;const t=yield this.payPalSdkScriptLoader.getPayPalMessages(o,i.getCartOrThrow().currency.code,i.getLocale());return t&&\"function\"==typeof(null==t?void 0:t.Messages)?this.renderMessages(t,s,e):void console.error(\"[BC PayPalCommerce PayLater]: banner could not be rendered, due to issues with loading PayPal SDK\")}u?this.orderId=null===(t=o.initializationData)||void 0===t?void 0:t.orderId:(this.loadingIndicatorContainer=null==a?void 0:a.split(\"#\")[1],yield this.paypalIntegrationService.loadPayPalSdk(n),r.onInit&&\"function\"==typeof r.onInit&&r.onInit(()=>this.renderButton(n,r)),(void 0===r.shouldRenderPayPalButtonOnInitialization||r.shouldRenderPayPalButtonOnInitialization)&&this.renderButton(n,r))})}execute(e,t){var n,r;return J(this,void 0,void 0,function*(){const{payment:i}=e,o=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]),{onError:a}=this.paypalcommerce||{};if(!i)throw new q([\"payment\"]);const{methodId:s,paymentData:u}=i;if(this.isPayPalVaultedInstrumentPaymentData(u)&&!this.orderId&&(this.orderId=yield this.createOrder()),!this.orderId)throw new $;const c=this.isPayPalVaultedInstrumentPaymentData(u)?this.prepareVaultedInstrumentPaymentPayload(s,this.orderId,u):this.preparePaymentPayload(s,this.orderId,u);try{yield this.paymentIntegrationService.submitOrder(o,t),yield this.paymentIntegrationService.submitPayment(c)}catch(e){if(function(e){var t;return(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)&&\"offsite_redirect\"===(null===(t=e.body.additional_action_required)||void 0===t?void 0:t.type)}(e)){const t=null===(r=null===(n=e.body.additional_action_required)||void 0===n?void 0:n.data)||void 0===r?void 0:r.redirect_url;return new Promise(()=>window.location.replace(t))}return this.isProviderError(e)&&(yield this.paypalIntegrationService.loadPayPalSdk(i.methodId),yield new Promise((e,t)=>{var n;this.paypalcommerce&&(null===(n=this.paypalButton)||void 0===n||n.close(),this.renderButton(i.methodId,this.paypalcommerce),this.handleError(new Error(\"INSTRUMENT_DECLINED\"),a)),t()})),this.handleError(e,a),Promise.reject()}})}finalize(){return Promise.reject(new W)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}prepareVaultedInstrumentPaymentPayload(e,t,n){const{instrumentId:r,shouldSetAsDefaultInstrument:i}=n,o=!this.isTrustedVaultingFlow(n);return o?{methodId:e,paymentData:{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:i,formattedPayload:{paypal_account:{order_id:t}}}}:{methodId:e,paymentData:{instrumentId:r,shouldSetAsDefaultInstrument:i,formattedPayload:{paypal_account:{order_id:t},bigpay_token:{token:r}}}}}preparePaymentPayload(e,t,n){const{shouldSaveInstrument:r=!1,shouldSetAsDefaultInstrument:i=!1}=H(n)?n:{};return{methodId:e,paymentData:{shouldSaveInstrument:r,shouldSetAsDefaultInstrument:i,formattedPayload:{paypal_account:{order_id:t}}}}}renderButton(e,t){const n=this.paypalIntegrationService.getPayPalSdkOrThrow(),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:i}=r.initializationData||{},{checkoutPaymentButtonStyles:o}=i||{},{container:a,onError:s,onRenderButton:u,onValidate:c,submitForm:l}=t;if(!a)throw new G('Unable to initialize payment because \"container\" argument is not provided.');const d=this.getSmartButtonContainerId(a);if(!document.getElementById(d))throw new G(`Unable to initialize payment because element with id ${d} does not exist.`);const p={fundingSource:n.FUNDING.PAYPAL,style:this.paypalIntegrationService.getValidButtonStyle(o),createOrder:()=>this.createOrder(),onClick:(e,t)=>this.handleClick(t,c),onApprove:e=>this.handleApprove(e,l),onError:e=>this.handleError(e,s),onCancel:()=>this.toggleLoadingIndicator(!1)};this.paypalButton=n.Buttons(p),this.paypalButton.isEligible()&&(u&&\"function\"==typeof u&&u(),this.paypalButton.render(a))}handleClick(e,t){return J(this,void 0,void 0,function*(){const{resolve:n,reject:r}=e;return null==t?void 0:t(()=>(this.toggleLoadingIndicator(!0),n()),r)})}handleApprove({orderID:e},t){this.orderId=e,null==t||t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createOrder(){return J(this,void 0,void 0,function*(){const e=this.getFieldsValues();return this.paypalIntegrationService.createOrder(\"paypalcommercecheckout\",{shouldSaveInstrument:(null==e?void 0:e.shouldSaveInstrument)||!1})})}getFieldsValues(){const{getFieldsValues:e}=this.paypalcommerce||{};return\"function\"==typeof e?e():void 0}isTrustedVaultingFlow(e){if(e&&K(e)){const t=this.paymentIntegrationService.getState().getInstruments(),n=null==t?void 0:t.find(t=>Z(t)&&t.bigpayToken===e.instrumentId);return!(Z(n)&&!n.trustedShippingAddress)}return!1}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isPayPalVaultedInstrumentPaymentData(e){return!!e&&K(e)&&H(e)}renderMessages(e,t,n){const r={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:Y(n)};e.Messages(r).render(`#${t}`)}isProviderError(e){var t,n,r;return!!function(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e}(e)&&\"INSTRUMENT_DECLINED\"===(null===(r=null===(n=((null===(t=null==e?void 0:e.errors)||void 0===t?void 0:t.filter(e=>e.provider_error))||[])[0])||void 0===n?void 0:n.provider_error)||void 0===r?void 0:r.code)}getSmartButtonContainerId(e){var t;return null!==(t=e.split(\"#\")[1])&&void 0!==t?t:e}}const Q=t(t=>new X(t,U(t),new f((0,e.vQ)()),new V({containerStyles:l})),[{id:\"paypalcommerce\"}]);class ee extends s{constructor(e){super(e||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var te=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class ne{constructor(e,t,n,r){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.loadingIndicator=n,this.payPalSdkScriptLoader=r}initialize(e){return te(this,void 0,void 0,function*(){const{methodId:t,paypalcommerce:n,paypalcommercecredit:r}=e||{},i=r||n;if(!t)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new G('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(t);const o=this.paymentIntegrationService.getState(),a=o.getPaymentMethodOrThrow(t),{paypalBNPLConfiguration:s=[],orderId:u}=a.initializationData||{},{bannerContainerId:c,container:l}=i;if(void 0!==c){if(!document.getElementById(c))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=s&&s.find(({id:e})=>\"checkout\"===e);if(!(null==e?void 0:e.status))return;const t=yield this.payPalSdkScriptLoader.getPayPalMessages(a,o.getCartOrThrow().currency.code,o.getLocale());return this.renderMessages(t,c,e)}u?this.orderId=u:(yield this.paypalIntegrationService.loadPayPalSdk(t),this.loadingIndicatorContainer=null==l?void 0:l.split(\"#\")[1],this.renderButton(t,i))})}execute(e,t){return te(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]);if(!n)throw new q([\"payment\"]);if(!this.orderId)throw new $;yield this.paymentIntegrationService.submitOrder(r,t),yield this.paypalIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new W)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){if(!(null==t?void 0:t.container))throw new G('Unable to initialize payment because \"container\" argument is not provided.');const n=this.paypalIntegrationService.getPayPalSdkOrThrow(),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:i}=r.initializationData||{},{checkoutPaymentButtonStyles:o}=i||{},{container:a,onError:s,onRenderButton:u,onValidate:c,submitForm:l}=t,d=[n.FUNDING.PAYLATER,n.FUNDING.CREDIT];let p=!1;d.forEach(e=>{if(p)return;const t={fundingSource:e,style:this.paypalIntegrationService.getValidButtonStyle(o),createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercecreditcheckout\"),onClick:(e,t)=>this.handleClick(t,c),onApprove:e=>this.handleApprove(e,l),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.paypalButton=n.Buttons(t),this.paypalButton.isEligible()||e!==n.FUNDING.PAYLATER){if(!this.paypalButton.isEligible()&&e===n.FUNDING.CREDIT)throw new ee(`PayPal ${e} is not available for your region. Please use PayPal Checkout instead.`);u&&\"function\"==typeof u&&u(),this.paypalButton.render(a),p=!0}})}handleClick(e,t){return te(this,void 0,void 0,function*(){const{resolve:n,reject:r}=e;if(t&&\"function\"==typeof t)return t(()=>(this.toggleLoadingIndicator(!0),n()),r)})}handleApprove({orderID:e},t){this.orderId=e,t&&\"function\"==typeof t&&t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}renderMessages(e,t,n){const r={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:Y(n)};e.Messages(r).render(`#${t}`)}}const re=t(e=>new ne(e,U(e),new V({containerStyles:l}),y()),[{id:\"paypalcommercecredit\"}]);var ie=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class oe{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.loadingIndicator=n}initialize(e){var t,n;return ie(this,void 0,void 0,function*(){const{methodId:r,paypalcommerce:i,paypalcommercevenmo:o}=e||{},a=o||i;if(!r)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!a)throw new G('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(r);const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r);(null===(t=s.initializationData)||void 0===t?void 0:t.orderId)?this.orderId=null===(n=s.initializationData)||void 0===n?void 0:n.orderId:(yield this.paypalIntegrationService.loadPayPalSdk(r),this.loadingIndicatorContainer=a.container.split(\"#\")[1],this.renderButton(r,a))})}execute(e,t){return ie(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]);if(!n)throw new q([\"payment\"]);if(!this.orderId)throw new $;yield this.paymentIntegrationService.submitOrder(r,t),yield this.paypalIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new W)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){const n=this.paypalIntegrationService.getPayPalSdkOrThrow(),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:i}=r.initializationData||{},{checkoutPaymentButtonStyles:o}=i||{},{container:a,onError:s,onRenderButton:u,onValidate:c,submitForm:l}=t,d={fundingSource:n.FUNDING.VENMO,style:this.paypalIntegrationService.getValidButtonStyle(o),createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercevenmocheckout\"),onClick:(e,t)=>this.handleClick(t,c),onApprove:e=>this.handleApprove(e,l),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.paypalButton=n.Buttons(d),!this.paypalButton.isEligible())throw new ee(\"PayPal Venmo is not available for your region. Please use PayPal Checkout instead.\");u&&\"function\"==typeof u&&u(),this.paypalButton.render(a)}handleClick(e,t){return ie(this,void 0,void 0,function*(){const{resolve:n,reject:r}=e;return t(()=>(this.toggleLoadingIndicator(!0),n()),r)})}handleApprove({orderID:e},t){this.orderId=e,t(),this.toggleLoadingIndicator(!1)}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const ae=t(e=>new oe(e,U(e),new V({styles:{backgroundColor:\"black\"}})),[{id:\"paypalcommercevenmo\"}]),se={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"};class ue extends _{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}var ce,le,de,pe,he,fe,ye;!function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(ce||(ce={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(le||(le={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(de||(de={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(pe||(pe={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(he||(he={})),function(e){e.OXXO=\"oxxo\",e.IDEAL=\"ideal\"}(fe||(fe={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(ye||(ye={}));var ge=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class ve{constructor(e,t,n,r,i=3e3,o=3e5){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t,this.paypalSdkScriptLoader=n,this.loadingIndicator=r,this.pollingInterval=i,this.maxPollingIntervalTime=o,this.pollingTimer=0,this.stopPolling=g.noop,this.isOrderApprovedProcessing=!1}initialize(e){return ge(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,paypalcommerce:r,paypalcommercealternativemethods:i}=e,o=i||r;if(this.paypalcommercealternativemethods=i,!n)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new G('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!o)throw new G('Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument is not provided.');const a=this.paymentIntegrationService.getState(),s=a.getPaymentMethodOrThrow(n,t),{orderId:u,shouldRenderFields:c}=s.initializationData||{},l=a.getStoreConfigOrThrow().checkoutSettings.features;this.isOrderApprovedProcessing=function(e,t,n=!0){var r;return null!==(r=e[\"PAYPAL-5431.order_approved_processing\"])&&void 0!==r?r:n}(l,0,!1),u?this.orderId=u:(this.paypalApms=yield this.paypalSdkScriptLoader.getPayPalApmsSdk(s,a.getCartOrThrow().currency.code,a.getLocale()),this.loadingIndicatorContainer=o.container.split(\"#\")[1],this.renderButton(n,t,o),c&&this.renderFields(n,o))})}execute(e,t){return ge(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]);if(!n)throw new q([\"payment\"]);const{methodId:i,gatewayId:o}=n;if(!this.orderId)throw new $;this.isOrderApprovedProcessing||\"ideal\"!==i||(yield new Promise((e,t)=>{this.initializePollingMechanism(i,e,t,o)})),this.isNonInstantPaymentMethod(i)&&(i!==fe.IDEAL||this.isOrderApprovedProcessing)||(yield this.paymentIntegrationService.submitOrder(r,t)),yield this.paypalCommerceIntegrationService.submitPayment(i,this.orderId,o)})}finalize(){return Promise.reject(new W)}deinitialize(){var e;return this.orderId=void 0,this.isOrderApprovedProcessing||this.resetPollingMechanism(),null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}initializePollingMechanism(e,t,n,r){return ge(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const i=yield this.paypalCommerceIntegrationService.getOrderStatus(null!=r?r:\"paypalcommerce\"),o=i===ye.Approved,a=i===ye.PollingError;if(o)return this.deinitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,r);yield this.reinitializeStrategy({methodId:e,gatewayId:r,paypalcommercealternativemethods:this.paypalcommercealternativemethods}),this.handleError(new ue)}catch(e){n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}reinitializeStrategy(e){return ge(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}handleError(e){const{onError:t}=this.paypalcommercealternativemethods||{};this.isOrderApprovedProcessing||this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderButton(e,t,n){const r=this.getPaypalAmpsSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t),{buttonStyle:o}=i.initializationData||{},{container:a,onError:s,onRenderButton:u,submitForm:c}=n,l={fundingSource:e,style:this.paypalCommerceIntegrationService.getValidButtonStyle(o),onInit:(e,t)=>n.onInitButton(t),createOrder:()=>this.onCreateOrder(e,t,n),onApprove:e=>this.handleApprove(e,c),onCancel:()=>{this.toggleLoadingIndicator(!1),this.deinitializePollingMechanism()},onError:e=>{this.deinitializePollingMechanism(),this.handleFailure(e,s)},onClick:(e,t)=>ge(this,void 0,void 0,function*(){return n.onValidate(t.resolve,t.reject)})};this.paypalButton=r.Buttons(l),this.paypalButton.isEligible()&&(u&&\"function\"==typeof u&&u(),this.paypalButton.render(a))}onCreateOrder(e,t,n){var r;return ge(this,void 0,void 0,function*(){const{onValidate:i}=n;yield i(()=>(this.toggleLoadingIndicator(!0),()=>Promise.resolve()),g.noop);const o=yield this.paypalCommerceIntegrationService.createOrder(\"paypalcommercealternativemethodscheckout\");if(this.isNonInstantPaymentMethod(e)&&(e===fe.IDEAL&&this.isOrderApprovedProcessing||e===fe.OXXO)){const n={useStoreCredit:!1},i={params:{methodId:e,gatewayId:t}};if(yield this.paymentIntegrationService.submitOrder(n,i),e===fe.IDEAL){const t=this.paymentIntegrationService.getState(),n=null===(r=t.getOrder())||void 0===r?void 0:r.orderId;yield this.paypalCommerceIntegrationService.updateOrder(\"paypalcommercealternativemethods\",e,n)}yield this.paypalCommerceIntegrationService.submitPayment(e,o,t)}return o})}handleApprove({orderID:e},t){this.orderId=e,t()}handleFailure(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderFields(e,t){const n=this.getPaypalAmpsSdkOrThrow(),r=this.paymentIntegrationService.getState(),{firstName:i,lastName:o,email:a}=r.getBillingAddressOrThrow(),{apmFieldsContainer:s,apmFieldsStyles:u}=t;if(!s)throw new G('Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument should contain \"apmFieldsContainer\".');const c=document.querySelector(s);c&&(c.innerHTML=\"\");const l={fundingSource:e,style:u||{},fields:{name:{value:`${i} ${o}`},email:{value:a}}};n.PaymentFields(l).render(s)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isNonInstantPaymentMethod(e){return e.toUpperCase()in fe}getPaypalAmpsSdkOrThrow(){if(!this.paypalApms)throw new u;return this.paypalApms}}const me=t(e=>new ve(e,U(e),y(),new V({containerStyles:se})),[{gateway:\"paypalcommercealternativemethods\"}]);var _e;!function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(_e||(_e={}));class be{static get(e){const t=`${encodeURIComponent(`${e}`)}=`,n=document.cookie;let r=null;const i=n.indexOf(t);if(i>-1){let e=n.indexOf(\";\",i);-1===e&&(e=n.length),r=decodeURIComponent(n.substring(i+t.length,e))}return r}static set(e,t,n={secure:!0}){let r=`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;const{expires:i,path:o,domain:a,secure:s}=n;if(i)r+=`; expires=${i.toUTCString()}`;else{const e=new Date,t=60;e.setTime(e.getTime()+60*t*1e3),r+=`; expires=${e.toUTCString()}`}o&&(r+=`; path=${o}`),a&&(r+=`; domain=${a}`),s&&(r+=\"; secure\"),document.cookie=r}static remove(e,t){be.set(e,\"\",Object.assign({expires:new Date(0)},t))}}var Se,we=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class Ie{constructor(){this.window=window}initializePayPalFastlane(e,t,n){return we(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\"),window.localStorage.setItem(\"axoEnv\",\"sandbox\")),!this.window.paypalFastlane){const t={root:{backgroundColorPrimary:\"transparent\"}};this.window.paypalFastlane=yield e.Fastlane({styles:n||t})}return this.window.paypalFastlane})}getPayPalFastlaneOrThrow(){if(!this.window.paypalFastlane)throw new u;return this.window.paypalFastlane}lookupCustomerOrThrow(e){return we(this,void 0,void 0,function*(){return this.getPayPalFastlaneOrThrow().identity.lookupCustomerByEmail(e)})}triggerAuthenticationFlowOrThrow(e){return we(this,void 0,void 0,function*(){return e?this.getPayPalFastlaneOrThrow().identity.triggerAuthenticationFlow(e):{}})}updateStorageSessionId(e){const t=new Date;t.setDate(t.getDate()+14);const n={expires:t,secure:!0};be.set(\"bc-fastlane-sessionId\",e,n)}removeStorageSessionId(){be.remove(\"bc-fastlane-sessionId\")}getStorageSessionId(){return be.get(\"bc-fastlane-sessionId\")||\"\"}mapPayPalFastlaneProfileToBcCustomerData(e,t){var n,r,i;const{authenticationState:o,profileData:a}=t,s=null===(i=null===(r=null===(n=null==a?void 0:a.card)||void 0===n?void 0:n.paymentSource)||void 0===r?void 0:r.card)||void 0===i?void 0:i.billingAddress,u=null==a?void 0:a.shippingAddress,c=null==a?void 0:a.name,l=null==a?void 0:a.card,d=u?this.mapPayPalToBcAddress(u.address,u.name,u.phoneNumber):void 0,p=s&&c?this.mapPayPalToBcAddress(s,c,null==u?void 0:u.phoneNumber):void 0,h=l?this.mapPayPalToBcInstrument(e,l):[],f=this.filterAddresses([d,p]);return{authenticationState:o||E.UNRECOGNIZED,addresses:f,billingAddress:p,shippingAddress:d,instruments:h}}mapPayPalToBcInstrument(e,t){const{id:n,paymentSource:r}=t,{brand:i,expiry:o,lastDigits:a}=r.card,[s,u]=o.split(\"-\");return[{bigpayToken:n,brand:i,defaultInstrument:!1,expiryMonth:u,expiryYear:s,iin:\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:_e.PAN,type:\"card\"}]}mapBcToPayPalAddress(e){return{company:(null==e?void 0:e.company)||\"\",addressLine1:(null==e?void 0:e.address1)||\"\",addressLine2:(null==e?void 0:e.address2)||\"\",adminArea1:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",adminArea2:(null==e?void 0:e.city)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\"}}mapPayPalToBcAddress(e,t,n,r){const[i,o]=t.fullName.split(\" \"),a=(null==n?void 0:n.nationalNumber)||\"\",s=(null==n?void 0:n.countryCode)||\"\";return{id:Date.now(),type:\"paypal-address\",firstName:t.firstName||i||\"\",lastName:t.lastName||o||\"\",company:e.company||\"\",address1:e.addressLine1,address2:e.addressLine2||\"\",city:e.adminArea2,stateOrProvince:e.adminArea1,stateOrProvinceCode:e.adminArea1,country:e.countryCode||\"\",countryCode:e.countryCode||\"\",postalCode:e.postalCode,phone:s+a,customFields:r||[]}}filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this.isEqualAddresses(e,t))?e:[...e,t]:e,[])}isEqualAddresses(e,t){return(0,g.isEqual)(this.normalizeAddress(e),this.normalizeAddress(t))}normalizeAddress(e){return(0,g.omit)(e,[\"id\",\"phone\"])}}function Pe(){return new Ie}!function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\",e.CardExpiryVerification=\"cardExpiryVerification\"}(Se||(Se={}));const Ce=Se;function Oe(e){return Ce.CardNumber in e&&Ce.CardName in e&&Ce.CardExpiry in e}function Ae(e){return Ce.CardNumberVerification in e&&Ce.CardCodeVerification in e&&Ce.CardExpiryVerification in e}class Ee extends s{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}var ze;!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(ze||(ze={}));class ke extends s{constructor(e){super(function(e){switch(e){case ze.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case ze.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case ze.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case ze.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class Te extends s{constructor(e,t){super(t||\"Unable to proceed because the payment form contains invalid data.\"),this.details=e,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}var je=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class xe{constructor(e,t,n,r){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalSdkScriptLoader=n,this.paypalFastlaneUtils=r}initialize(e){return je(this,void 0,void 0,function*(){const{methodId:t,paypalcommercecreditcards:n,paypalcommerce:r}=e,i=n||r,{form:o,onCreditCardFieldsRenderingError:a,onLoadComplete:s}=i||{};if(!t)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!o)throw new G('Unable to proceed because \"options.paypalcommercecreditcards.form\" argument is not provided.');this.hostedFormOptions=o,this.isCreditCardForm=Oe(o.fields),this.isCreditCardVaultedForm=Ae(o.fields)&&!this.hasUndefinedValues(),yield this.paymentIntegrationService.loadPaymentMethod(t),yield this.paypalIntegrationService.loadPayPalSdk(t,void 0,!0,!0),(this.isCreditCardForm||this.isCreditCardVaultedForm)&&(yield this.initializeFields(o,a)),null==s||s(),this.shouldInitializePayPalFastlane(t)&&(yield this.initializePayPalFastlaneOrThrow(t))})}execute(e,t){return je(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]),{methodId:i,paymentData:o}=n||{};if(!n||!i)throw new q([\"payment\"]);if(this.executionPaymentData=o,this.isCreditCardForm||this.isCreditCardVaultedForm)yield this.validateHostedFormOrThrow(),yield this.submitHostedForm();else{const{orderId:e}=yield this.paypalIntegrationService.createOrderCardFields(\"paypalcommercecreditcardscheckout\",this.getInstrumentParams());this.returnedOrderId=e}const a=this.preparePaymentPayload(i,o,this.returnedOrderId,this.returnedVaultedToken);yield this.paymentIntegrationService.submitOrder(r,t),yield this.paymentIntegrationService.submitPayment(a)})}finalize(){return Promise.reject(new W)}deinitialize(){var e,t,n,r;return je(this,void 0,void 0,function*(){return yield null===(e=this.cvvField)||void 0===e?void 0:e.close(),yield null===(t=this.expiryField)||void 0===t?void 0:t.close(),yield null===(n=this.numberField)||void 0===n?void 0:n.close(),yield null===(r=this.nameField)||void 0===r?void 0:r.close(),Promise.resolve()})}preparePaymentPayload(e,t,n,r){const{shouldSaveInstrument:i=!1,shouldSetAsDefaultInstrument:o=!1}=H(t)?t:{},a=t&&K(t)?t.instrumentId:void 0,s=(0,g.omitBy)({verification_nonce:r,token:a},g.isNil);return{methodId:e,paymentData:{shouldSaveInstrument:i,shouldSetAsDefaultInstrument:o,instrumentId:a,formattedPayload:Object.assign(Object.assign({},r||a?{bigpay_token:s}:{}),n?{card_with_order:{order_id:n}}:{})}}}initializeFields(e,t){return je(this,void 0,void 0,function*(){const{fields:n,styles:r}=e,i=this.paypalIntegrationService.getPayPalSdkOrThrow(),o=this.getExecuteCallback(n),a=Object.assign({style:this.getInputStyles(r),onApprove:({orderID:e,vaultSetupToken:t,liabilityShift:n})=>{if(n===ce.No||n===ce.Unknown)throw new Error;return this.handleApprove({orderID:e,vaultSetupToken:t})},onError:()=>{throw new Ee},inputEvents:{onChange:t=>this.onChangeHandler(e,t),onFocus:t=>this.onFocusHandler(e,t),onBlur:t=>this.onBlurHandler(e,t),onInputSubmitRequest:t=>this.onInputSubmitRequest(e,t)}},o);if(this.cardFields=yield i.CardFields(a),!this.cardFields.isEligible())throw new ke(ze.PaymentNotInitialized);try{this.stylizeInputContainers(n),Oe(n)&&(yield this.renderFields(n)),Ae(n)&&(yield this.renderVaultedFields(n))}catch(e){\"function\"==typeof t&&t(e)}})}getExecuteCallback(e){return Ae(e)?this.createVaultSetupTokenCallback():this.createOrderCallback()}createVaultSetupTokenCallback(){return{createVaultSetupToken:()=>je(this,void 0,void 0,function*(){const{setupToken:e}=(yield this.paypalIntegrationService.createOrderCardFields(\"paypalcommercecreditcardscheckout\",Object.assign(Object.assign({},this.getInstrumentParams()),{setupToken:!0})))||{};return e})}}createOrderCallback(){return{createOrder:()=>je(this,void 0,void 0,function*(){const{orderId:e}=(yield this.paypalIntegrationService.createOrderCardFields(\"paypalcommercecreditcardscheckout\",this.getInstrumentParams()))||{};return e})}}handleApprove({orderID:e,vaultSetupToken:t}){e&&(this.returnedOrderId=e),t&&(this.returnedVaultedToken=t)}renderFields(e){var t,n,r,i;return je(this,void 0,void 0,function*(){const o=this.getCardFieldsOrThrow();(null===(t=e.cardCode)||void 0===t?void 0:t.containerId)&&(this.cvvField=o.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCode.containerId}`)),(null===(n=e.cardExpiry)||void 0===n?void 0:n.containerId)&&(this.expiryField=o.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiry.containerId}`)),(null===(r=e.cardName)||void 0===r?void 0:r.containerId)&&(this.nameField=o.NameField({placeholder:\"\"}),yield this.nameField.render(`#${e.cardName.containerId}`)),(null===(i=e.cardNumber)||void 0===i?void 0:i.containerId)&&(this.numberField=o.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumber.containerId}`))})}renderVaultedFields(e){var t,n,r;return je(this,void 0,void 0,function*(){const i=this.getCardFieldsOrThrow();(null===(t=e.cardCodeVerification)||void 0===t?void 0:t.containerId)&&(this.cvvField=i.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCodeVerification.containerId}`)),(null===(n=e.cardExpiryVerification)||void 0===n?void 0:n.containerId)&&(this.expiryField=i.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiryVerification.containerId}`)),(null===(r=e.cardNumberVerification)||void 0===r?void 0:r.containerId)&&(this.numberField=i.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumberVerification.containerId}`))})}getInstrumentParams(){if(!this.executionPaymentData)return{};if(H(this.executionPaymentData)){const{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}=this.executionPaymentData;return{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}}if(K(this.executionPaymentData)){const{instrumentId:e}=this.executionPaymentData;return{instrumentId:e}}return{}}getFieldTypeByEmittedField({emittedBy:e}){return{fieldType:this.mapFieldType(e)}}submitHostedForm(){return je(this,void 0,void 0,function*(){const e=this.getCardFieldsOrThrow(),t=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),n={billingAddress:{company:t.company,addressLine1:t.address1,addressLine2:t.address2,adminArea1:t.stateOrProvinceCode,adminArea2:t.city,postalCode:t.postalCode,countryCode:t.countryCode}};try{this.isCreditCardVaultedForm?yield e.submit():yield e.submit(n)}catch(e){throw new Ee(\"Failed authentication. Please try to authorize again.\")}})}validateHostedFormOrThrow(){var e,t;return je(this,void 0,void 0,function*(){const n=this.getCardFieldsOrThrow(),r=yield n.getState().then(e=>e),i=this.getValidityData(r);if(!i.isValid)throw null===(t=null===(e=this.hostedFormOptions)||void 0===e?void 0:e.onValidate)||void 0===t||t.call(e,i),new Te(this.mapValidationErrors(i.errors))})}getValidityData({fields:e}){const t=Object.assign({},e);delete t.cardNameField;const n=Object.keys(t);return{isValid:n.every(e=>{var n;return null===(n=t[e])||void 0===n?void 0:n.isValid}),errors:n.reduce((e,n)=>{var r;const i=this.mapFieldType(n);return Object.assign(Object.assign({},e),{[i]:(null===(r=t[n])||void 0===r?void 0:r.isValid)?void 0:[this.getInvalidErrorByFieldType(i)]})},{})}}getInvalidErrorByFieldType(e){switch(e){case Ce.CardCode:case Ce.CardCodeVerification:return{fieldType:e,message:\"Invalid card code\",type:\"invalid_card_code\"};case Ce.CardNumber:case Ce.CardNumberVerification:return{fieldType:e,message:\"Invalid card number\",type:\"invalid_card_number\"};case Ce.CardExpiry:case Ce.CardExpiryVerification:return{fieldType:e,message:\"Invalid card expiry\",type:\"invalid_card_expiry\"};default:return{fieldType:e,message:\"Invalid field\",type:\"invalid\"}}}mapValidationErrors(e={}){const t={};return Object.keys(e).forEach(n=>{var r,i;t[n]=[{message:(null===(i=null===(r=e[n])||void 0===r?void 0:r[0])||void 0===i?void 0:i.message)||\"\",type:n}]}),t}mapFieldType(e){switch(e){case\"name\":return Ce.CardName;case\"cardNumberField\":case\"number\":return this.isCreditCardForm?Ce.CardNumber:Ce.CardNumberVerification;case\"cardExpiryField\":case\"expiry\":return this.isCreditCardForm?Ce.CardExpiry:Ce.CardExpiryVerification;case\"cardCvvField\":case\"cvv\":return this.isCreditCardForm?Ce.CardCode:Ce.CardCodeVerification;default:throw new Error(\"Unexpected field type\")}}getCardFieldsOrThrow(){if(!this.cardFields)throw new ke(ze.PaymentNotInitialized);return this.cardFields}getInputStyles(e){var t,n,r;const i={\"font-size\":(null===(t=null==e?void 0:e.default)||void 0===t?void 0:t.fontSize)||\"1rem\",\"font-family\":(null===(n=null==e?void 0:e.default)||void 0===n?void 0:n.fontFamily)||\"Montserrat, Arial, Helvetica, sans-serif\",\"font-weight\":(null===(r=null==e?void 0:e.default)||void 0===r?void 0:r.fontWeight)||\"400\",outline:\"none\",padding:\"9px 13px\"},o=Object.assign(Object.assign({},i),{color:\"#333333\"});return{input:o,\".invalid\":Object.assign(Object.assign({},i),{color:\"red\"}),\".valid\":o,\":focus\":o}}stylizeInputContainers(e){Object.values(e||{}).forEach(e=>{const t=document.getElementById(`${(null==e?void 0:e.containerId)||\"\"}`);t&&(t.style.padding=\"0px\",t.style.boxShadow=\"none\",t.style.border=\"none\",t.style.background=\"transparent\",t.style.marginBottom=\"10px\",t.style.marginLeft=\"-5px\")})}hasUndefinedValues(){return!this.hostedFormOptions||Object.values(this.hostedFormOptions.fields).some(e=>void 0===e)}onChangeHandler(e,t){var n;null===(n=null==e?void 0:e.onValidate)||void 0===n||n.call(e,this.getValidityData(t))}onFocusHandler(e,t){var n;null===(n=null==e?void 0:e.onFocus)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onBlurHandler(e,t){var n;null===(n=null==e?void 0:e.onBlur)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onInputSubmitRequest(e,t){var n;null===(n=null==e?void 0:e.onEnter)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}shouldInitializePayPalFastlane(e){var t,n;const r=this.paymentIntegrationService.getState(),i=r.getPaymentMethodOrThrow(e),o=r.getPaymentProviderCustomer(),a=(s=o)&&(\"authenticationState\"in s||\"addresses\"in s||\"instruments\"in s)?o:{};var s;return(null===(t=null==i?void 0:i.initializationData)||void 0===t?void 0:t.isAcceleratedCheckoutEnabled)&&(null===(n=null==i?void 0:i.initializationData)||void 0===n?void 0:n.isPayPalCommerceAnalyticsV2Enabled)&&!(null==a?void 0:a.authenticationState)}initializePayPalFastlaneOrThrow(e){return je(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),r=t.getPaymentMethodOrThrow(e),{initializationData:i}=r;if(!(null==i?void 0:i.connectClientToken))return;const o=yield this.paypalSdkScriptLoader.getPayPalFastlaneSdk(r,n.currency.code,n.id,t.getLocale());yield this.paypalFastlaneUtils.initializePayPalFastlane(o,!!(null==i?void 0:i.isDeveloperModeApplicable))}catch(e){}})}}const Fe=t(e=>new xe(e,U(e),y(),Pe()),[{id:\"paypalcommercecreditcards\"}]);var Me=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class Be{constructor(e,t,n,r=3e3,i=3e5){this.paymentIntegrationService=e,this.paypalCommerceService=t,this.loadingIndicator=n,this.pollingInterval=r,this.maxPollingIntervalTime=i,this.pollingTimer=0,this.stopPolling=g.noop}initialize(e){return Me(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,paypalcommerceratepay:r}=e;if(!n)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new G('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!r)throw new G('Unable to initialize payment because \"options.paypalcommerceratepay\" argument is not provided.');const{legalTextContainer:i,container:o,loadingContainerId:a}=r;if(!o)throw new G('Unable to initialize payment because \"options.container\" argument is not provided.');if(!i)throw new G('Unable to initialize payment because \"options.legalTextContainer\" argument is not provided.');if(!a)throw new G('Unable to initialize payment because \"options.loadingContainerId\" argument is not provided.');this.loadingIndicatorContainer=a;const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,t),{merchantId:u}=s.initializationData||{};if(!u)throw new G(\"Unable to initialize payment because merchantId argument is not provided.\");this.paypalcommerceratepay=r,yield this.paypalCommerceService.loadPayPalSdk(n),this.createFraudNetScript(u,n,t),this.loadFraudnetConfig(),this.renderLegalText(i,o)})}execute(e,t){return Me(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]),{getFieldsValues:i}=this.paypalcommerceratepay||{};if(!n)throw new q([\"payment\"]);if(!i||\"function\"!=typeof i)throw new G('Unable to initialize payment because \"options.getFieldsValues\" argument is not provided.');this.toggleLoadingIndicator(!0);try{const e=yield this.paypalCommerceService.createOrder(\"paypalcommercealternativemethodscheckout\",{metadataId:this.guid}),{ratepayBirthDate:o,ratepayPhoneNumber:a,ratepayPhoneCountryCode:s}=i(),u={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:n.methodId,rate_pay:{birth_date:this.normalizeDate(o),phone:{national_number:a,country_code:s.split(\"+\")[1]}},paypal_account:{order_id:e}}};return yield this.paymentIntegrationService.submitOrder(r,t),yield this.paymentIntegrationService.submitPayment({methodId:n.methodId,paymentData:u}),yield new Promise((e,t)=>{this.initializePollingMechanism(n.methodId,e,t,n.gatewayId)})}catch(e){return this.handleError(e),new Promise((e,t)=>t())}})}finalize(){return Promise.reject(new W)}deinitialize(){const{legalTextContainer:e}=this.paypalcommerceratepay||{},t=document.querySelectorAll('[data-id=\"fraudnetScript\"]')[0],n=document.querySelectorAll('[data-id=\"fraudnetConfig\"]')[0];if(this.deinitializePollingMechanism(),t.remove(),n.remove(),e){const t=document.getElementById(e);null==t||t.remove()}return Promise.resolve()}normalizeDate(e){const t=this.formatDate(e.getDate()),n=this.formatDate(e.getMonth()+1);return`${e.getFullYear()}-${n}-${t}`}formatDate(e){return`${e<10?0:\"\"}${e}`}renderLegalText(e,t){const n=e,r=t.split(\"#\")[1],i=document.getElementById(r),o=null==i?void 0:i.parentNode,a=document.createElement(\"div\");a.style.marginBottom=\"20px\",a.setAttribute(\"id\",n),null==o||o.prepend(a);const s=this.paypalCommerceService.getPayPalSdkOrThrow(),u=s.Legal({fundingSource:s.Legal.FUNDING.PAY_UPON_INVOICE});if(!document.getElementById(n))throw new G('Unable to initialize payment because \"legalTextContainerElement\" argument is not found.');u.render(`#${n}`)}handleError(e){const{onError:t}=this.paypalcommerceratepay||{};this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createFraudNetScript(e,t,n){const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n),{testMode:i}=r.config,o=document.createElement(\"script\");o.setAttribute(\"type\",\"application/json\"),o.setAttribute(\"fncls\",\"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\"),o.setAttribute(\"data-id\",\"fraudnetScript\"),this.guid=this.generateGUID();const a={f:this.guid,s:`${e}_checkout-page`,sandbox:i};o.innerHTML=JSON.stringify(a),document.body.appendChild(o)}generateGUID(){let e=\"\";for(let t=0;t<32;t+=1)e+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"[Math.floor(62*Math.random())];return e}loadFraudnetConfig(){const e=document.createElement(\"script\");e.setAttribute(\"data-id\",\"fraudnetConfig\"),e.src=\"https://c.paypal.com/da/r/fb.js\",document.body.appendChild(e)}reinitializeStrategy(e){return Me(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}initializePollingMechanism(e,t,n,r){return Me(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const i=yield this.paypalCommerceService.getOrderStatus(\"paypalcommercealternativemethods\",{params:{useMetadata:!0}}),o=i===k.PollingStop,a=i===k.PollingError;if(o)return this.deinitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,r);yield this.reinitializeStrategy({methodId:e,gatewayId:r,paypalcommerceratepay:this.paypalcommerceratepay}),this.handleError(new ue)}catch(e){this.handleError(e),n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const Ne=t(e=>new Be(e,U(e),new V({containerStyles:Object.assign(Object.assign({},l),{position:\"fixed\"})})),[{gateway:\"paypalcommercealternativemethods\",id:\"ratepay\"}]);var De=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class Ue{constructor(e){this.requestSender=e}createOrder(e,t){return De(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,r=t,i=Object.assign({\"X-API-INTERNAL\":x,\"Content-Type\":M.Json},B);return(yield this.requestSender.post(n,{headers:i,body:r})).body})}updateOrder(e){return De(this,void 0,void 0,function*(){const t=e,n=Object.assign({\"X-API-INTERNAL\":x,\"Content-Type\":M.Json},B);return(yield this.requestSender.put(\"/api/storefront/initialization/paypalcommerce\",{headers:n,body:t})).body})}getOrderStatus(e=\"paypalcommerce\",t){return De(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,r=Object.assign({\"X-API-INTERNAL\":x,\"Content-Type\":M.Json},B);return(yield this.requestSender.get(n,Object.assign({headers:r},t))).body})}}function Re(e){return\"string\"!=typeof e}function Le(e,t){if(t||e)return function(e){var t,n;const r={},i=(0,g.omitBy)(e.root,Re),o=(0,g.omitBy)(e.input,Re),a=(0,g.omitBy)(e.toggle,Re),s=(0,g.omitBy)(null===(t=e.text)||void 0===t?void 0:t.body,Re),u=(0,g.omitBy)(null===(n=e.text)||void 0===n?void 0:n.caption,Re),c=e.branding;return Object.keys(i).length&&(r.root=i),Object.keys(o).length&&(r.input=o),Object.keys(a).length&&(r.toggle=a),Object.keys(s).length&&(r.text={},r.text.body=s),Object.keys(u).length&&(r.text=Object.assign({},r.text),r.text.caption=u),c&&(r.branding=c),r}(function(e,t){var n,r,i,o,a,s,u,c,l,d,p,h,f,y,g,v,m,_,b,S,w,I;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(f=null==t?void 0:t.toggle)||void 0===f?void 0:f.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(y=null==t?void 0:t.toggle)||void 0===y?void 0:y.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(v=null===(g=null==t?void 0:t.text)||void 0===g?void 0:g.body)||void 0===v?void 0:v.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(_=null===(m=null==t?void 0:t.text)||void 0===m?void 0:m.body)||void 0===_?void 0:_.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(S=null===(b=null==t?void 0:t.text)||void 0===b?void 0:b.caption)||void 0===S?void 0:S.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(I=null===(w=null==t?void 0:t.text)||void 0===w?void 0:w.caption)||void 0===I?void 0:I.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}function Ve(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}var Ge=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class qe{constructor(e,t,n,r){this.paymentIntegrationService=e,this.paypalCommerceRequestSender=t,this.paypalSdkScriptLoader=n,this.paypalFastlaneUtils=r}initialize(e){var t,n;return Ge(this,void 0,void 0,function*(){const{methodId:r,paypalcommercefastlane:i}=e;if(this.methodId=r,this.paypalcommercefastlane=i,!r)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new G('Unable to initialize payment because \"options.paypalcommercefastlane\" argument is not provided.');if(!i.onInit||\"function\"!=typeof i.onInit)throw new G('Unable to initialize payment because \"options.paypalcommercefastlane.onInit\" argument is not provided or it is not a function.');if(!i.onChange||\"function\"!=typeof i.onChange)throw new G('Unable to initialize payment because \"options.paypalcommercefastlane.onChange\" argument is not provided or it is not a function.');yield this.paymentIntegrationService.loadPaymentMethod(r);const o=this.paymentIntegrationService.getState(),a=o.getCartOrThrow(),s=o.getPaymentMethodOrThrow(r),{isDeveloperModeApplicable:u,isFastlaneStylingEnabled:c}=s.initializationData||{};this.threeDSVerificationMethod=null===(t=s.initializationData)||void 0===t?void 0:t.threeDSVerificationMethod,this.paypalFastlaneSdk=yield this.paypalSdkScriptLoader.getPayPalFastlaneSdk(s,a.currency.code,a.id,o.getLocale());const l=Le(c?null===(n=null==s?void 0:s.initializationData)||void 0===n?void 0:n.fastlaneStyles:{},null==i?void 0:i.styles);yield this.paypalFastlaneUtils.initializePayPalFastlane(this.paypalFastlaneSdk,!!u,l),this.shouldRunAuthenticationFlow()&&(yield this.runPayPalAuthenticationFlowOrThrow(r)),yield this.initializePayPalPaymentComponent(),i.onInit(e=>this.renderPayPalPaymentComponent(e)),i.onChange(()=>this.handlePayPalStoredInstrumentChange(r))})}execute(e,t){return Ge(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(e,[\"payment\"]);if(!n)throw new q([\"payment\"]);const{paymentData:i,methodId:o}=n,a=i&&K(i);try{yield this.paymentIntegrationService.submitOrder(r,t);const e=a?yield this.prepareVaultedInstrumentPaymentPayload(o,i):yield this.preparePaymentPayload(o,i);yield this.paymentIntegrationService.submitPayment(e),this.paypalFastlaneUtils.removeStorageSessionId()}catch(e){if(function(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"response\"in e&&\"body\"in e.response&&\"name\"in e.response.body}(e)&&\"INVALID_REQUEST\"===e.response.body.name){const e={translationKey:\"payment.errors.invalid_request_error\"};return this.handleError(e),Promise.reject()}if(e instanceof Error&&\"FastlaneError\"!==e.name)throw e;return Promise.reject()}})}finalize(){return Promise.reject(new W)}deinitialize(){return Ge(this,void 0,void 0,function*(){return Promise.resolve()})}shouldRunAuthenticationFlow(){const e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getCustomerOrThrow(),r=e.getPaymentProviderCustomer(),i=Ve(r)?r:{},o=this.paypalFastlaneUtils.getStorageSessionId();return!(!n.isGuest||(null==i?void 0:i.authenticationState)===E.CANCELED||(null==i?void 0:i.authenticationState)||o!==t.id)}runPayPalAuthenticationFlowOrThrow(e){return Ge(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),r=t.getCustomer(),i=t.getBillingAddress(),o=(null==r?void 0:r.email)||(null==i?void 0:i.email)||\"\",{customerContextId:a}=yield this.paypalFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(a),{authenticationState:u,addresses:c,instruments:l}=this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,s);yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:u,addresses:c,instruments:l}),s.authenticationState===E.CANCELED?this.paypalFastlaneUtils.removeStorageSessionId():this.paypalFastlaneUtils.updateStorageSessionId(n.id)}catch(e){}})}initializePayPalPaymentComponent(){return Ge(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),t=e.phone,n=`${e.firstName} ${e.lastName}`.trim(),r=this.paypalFastlaneUtils.getPayPalFastlaneOrThrow(),i={fields:Object.assign({cardholderName:{prefill:n,enabled:!0}},t&&{phoneNumber:{prefill:t}})};this.paypalComponentMethods=yield r.FastlaneCardComponent(i)})}renderPayPalPaymentComponent(e){const t=this.getPayPalComponentMethodsOrThrow();if(!e)throw new G('Unable to render card component because \"container\" argument is not provided.');t.render(e)}getPayPalComponentMethodsOrThrow(){if(!this.paypalComponentMethods)throw new u;return this.paypalComponentMethods}prepareVaultedInstrumentPaymentPayload(e,t){return Ge(this,void 0,void 0,function*(){const{instrumentId:n}=t,r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e).config.is3dsEnabled?yield this.get3DSNonce(n):n;return yield this.createOrder(r),{methodId:e,paymentData:{formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:r}}}}})}preparePaymentPayload(e,t){return Ge(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),r=n.getBillingAddressOrThrow(),i=n.getPaymentMethodOrThrow(e),o=`${r.firstName} ${r.lastName}`.trim(),{getPaymentToken:a}=this.getPayPalComponentMethodsOrThrow(),{id:s}=yield a({name:{fullName:o},billingAddress:this.paypalFastlaneUtils.mapBcToPayPalAddress(r)}),u=i.config.is3dsEnabled?yield this.get3DSNonce(s):s;yield this.createOrder(u);const{shouldSaveInstrument:c=!1,shouldSetAsDefaultInstrument:l=!1}=H(t)?t:{};return{methodId:e,paymentData:Object.assign(Object.assign({},t),{shouldSaveInstrument:c,shouldSetAsDefaultInstrument:l,formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:u}}})}})}createOrder(e){return Ge(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getCartOrThrow().id;if(this.methodId){const{orderId:n}=yield this.paypalCommerceRequestSender.createOrder(this.methodId,{cartId:t,fastlaneToken:e});this.orderId=n}})}get3DSNonce(e){var t;return Ge(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),r=n.getCartOrThrow(),i=n.getOrderOrThrow(),o=n.getStoreConfigOrThrow().links.checkoutLink,a=null===(t=this.paypalFastlaneSdk)||void 0===t?void 0:t.ThreeDomainSecureClient;if(!a)throw new u;const s={amount:i.orderAmount.toFixed(2),currency:r.currency.code,nonce:e,threeDSRequested:this.threeDSVerificationMethod===w.Always,transactionContext:{experience_context:{locale:\"en-US\",return_url:o,cancel_url:o}}},c=yield a.isEligible(s);if(this.threeDSVerificationMethod===w.Always&&!c)throw new $;if(c){const{liabilityShift:e,authenticationState:t,nonce:n}=yield a.show();if(e===ce.No||e===ce.Unknown||t===I.Errored||t===I.Cancelled)throw new $;if(t===I.Succeeded&&[ce.Yes,ce.Possible].includes(e))return n;throw new $}return e})}handlePayPalStoredInstrumentChange(e){return Ge(this,void 0,void 0,function*(){const t=this.paypalFastlaneUtils.getPayPalFastlaneOrThrow(),{selectionChanged:n,selectedCard:r}=yield t.profile.showCardSelector();if(n){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomer(),n=Ve(t)?t:{},i=this.paypalFastlaneUtils.mapPayPalToBcInstrument(e,r)[0];return yield this.paymentIntegrationService.updatePaymentProviderCustomer(Object.assign(Object.assign({},n),{instruments:[i]})),i}})}handleError(e){var t;(null===(t=this.paypalcommercefastlane)||void 0===t?void 0:t.onError)&&\"function\"==typeof this.paypalcommercefastlane.onError&&this.paypalcommercefastlane.onError(e)}}const $e=t(e=>{const{getHost:t}=e.getState();return new qe(e,new Ue((0,a.createRequestSender)({host:t()})),y(),Pe())},[{id:\"paypalcommerceacceleratedcheckout\"}]);var We=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};const He=class{constructor(e,t){this.paymentIntegrationService=e,this.paypalIntegrationService=t}createPayPalButton(e,t,n,r){const{style:i,fundingSource:o,isHostedCheckoutEnabled:a,isServerSideShippingCallbacksEnabled:s,onClick:u,onCancel:c,onPaymentComplete:l,onError:d}=n;this.onError=d;const p=this.paypalIntegrationService.getPayPalSdkOrThrow();if(!Object.values(p.FUNDING).includes(o))throw new G('Unable to initialize PayPal button because \"fundingSource\" argument is not valid funding source.');const h=Object.assign(Object.assign({},!s&&{onShippingAddressChange:t=>this.onShippingAddressChange(t,e),onShippingOptionsChange:t=>this.onShippingOptionsChange(t,e)}),{onApprove:(n,r)=>this.onHostedCheckoutApprove(n,r,t,e,l,s)});return p.Buttons(Object.assign(Object.assign(Object.assign({fundingSource:o,style:this.paypalIntegrationService.getValidButtonStyle(i),createOrder:()=>We(this,void 0,void 0,function*(){if(r){const e=yield this.paypalIntegrationService.createBuyNowCartOrThrow(r);yield this.paymentIntegrationService.loadCheckout(e.id)}return this.paypalIntegrationService.createOrder(e)}),onApprove:({orderID:e})=>this.paypalIntegrationService.tokenizePayment(t,e)},u?{onClick:u}:{}),c?{onCancel:c}:{}),a&&h))}onHostedCheckoutApprove(e,t,n,r,o,a){return We(this,void 0,void 0,function*(){if(!e.orderID)throw new c(i.MissingOrderId);const s=this.paymentIntegrationService.getState().getCartOrThrow();try{const i=s.lineItems.physicalItems.length>0;if(!a){const e=yield t.order.get(),n=this.paypalIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),i){const t=this.paypalIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}i&&(yield this.paypalIntegrationService.updateOrder(r,void 0,void 0,a)),a&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalIntegrationService.submitPayment(n,e.orderID),o&&\"function\"==typeof o&&o()}catch(e){this.handleError(e)}})}onShippingAddressChange(e,t){return We(this,void 0,void 0,function*(){const n=this.paypalIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(n),yield this.paymentIntegrationService.updateShippingAddress(n);const e=this.paypalIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalIntegrationService.updateOrder(t)}catch(e){this.handleError(e)}})}onShippingOptionsChange(e,t){return We(this,void 0,void 0,function*(){const n=this.paypalIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(n.id),yield this.paypalIntegrationService.updateOrder(t)}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}};var Ke=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class Ye{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalButtonCreationService=n}initialize(e){return Ke(this,void 0,void 0,function*(){const{paypalcommerce:t,methodId:n}=e;if(!n)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new G('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');if(!t.container)throw new G('Unable to initialize payment because \"options.paypalcommerce.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new G('Unable to initialize payment because \"options.paypalcommerce.onClick\" argument is not a function.');this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const r=yield this.paypalIntegrationService.loadPayPalSdk(n);r&&r.Buttons&&\"function\"==typeof r.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Ke(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()})}signOut(e){return Ke(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:r,onComplete:i,onError:o}=t,a=this.paypalIntegrationService.getPayPalSdkOrThrow(),s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:u,paymentButtonStyles:c,isServerSideShippingCallbacksEnabled:l}=s.initializationData||{},{checkoutTopButtonStyles:d}=c||{},p=Object.assign(Object.assign(Object.assign({fundingSource:a.FUNDING.PAYPAL,isServerSideShippingCallbacksEnabled:l,isHostedCheckoutEnabled:u,style:Object.assign(Object.assign({},d),{height:40})},r&&{onClick:()=>r()}),u&&i&&{onPaymentComplete:()=>i()}),{onError:o}),h=this.paypalButtonCreationService.createPayPalButton(\"paypalcommerce\",e,p);h.isEligible()?h.render(`#${n}`):this.paypalIntegrationService.removeElement(n)}}const Ze=t(e=>{const t=U(e),n=new He(e,t);return new Ye(e,t,n)},[{id:\"paypalcommerce\"}]);var Je=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class Xe{constructor(e,t,n,r){this.formPoster=e,this.paymentIntegrationService=t,this.paypalCommerceRequestSender=n,this.paypalCommerceScriptLoader=r}loadPayPalSdk(e,t,n,r){return Je(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),o=t||i.getCartOrThrow().currency.code,a=i.getPaymentMethodOrThrow(e);return this.paypalSdk=yield this.paypalCommerceScriptLoader.getPayPalSDK(a,o,i.getLocale(),n,r),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new u;return this.paypalSdk}createBuyNowCartOrThrow(e){return Je(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new c(i.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new v}})}createOrder(e,t){return Je(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:r}=yield this.paypalCommerceRequestSender.createOrder(e,Object.assign({cartId:n},t));return r})}createOrderCardFields(e,t){return Je(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:r,setupToken:i}=yield this.paypalCommerceRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:r},i?{setupToken:i}:{})})}updateOrder(e){return Je(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),r=t.getConsignmentsOrThrow()[0];try{yield this.paypalCommerceRequestSender.updateOrder({availableShippingOptions:e?[]:r.availableShippingOptions,cartId:n.id,selectedShippingOption:e?null:r.selectedShippingOption})}catch(e){throw new _}})}getOrderStatus(e,t){return Je(this,void 0,void 0,function*(){try{const{status:n}=yield this.paypalCommerceRequestSender.getOrderStatus(e,t);return n}catch(e){throw new _}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new c(i.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===b.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return Je(this,void 0,void 0,function*(){const r={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:r},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],r=n.find(e=>e.isRecommended),i=(e?n.find(t=>t.id===e):n.find(e=>{var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)}))||r||n[0];if(!i)throw new Error(\"Your order can't be shipped to this address\");return i}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:r,name:{full_name:i}}=n[0].shipping,[o,...a]=i.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:r.address_line_1,address2:r.address_line_2,city:r.admin_area_2,countryCode:r.country_code,postalCode:r.postal_code,stateOrProvinceCode:r.admin_area_1})}getValidButtonStyle(e){const{color:t,height:n,label:r,shape:i}=e||{},o={color:t&&pe[t]?t:void 0,height:this.getValidHeight(n),label:r&&de[r]?r:void 0,shape:i&&he[i]?i:void 0};return(0,g.omitBy)(o,g.isNil)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}var Qe=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class et{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,r,i){return Qe(this,void 0,void 0,function*(){const o=this.getPayPalSdkScriptConfigOrThrow(e,t,n,r);return this.loadPayPalSDK(o,i)})}loadPayPalSDK(e,t=!1){return Qe(this,void 0,void 0,function*(){if(!this.window.paypal||t){const t=this.transformConfig(e.options),n=this.transformConfig(e.attributes),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(t).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:n})}if(!this.window.paypal)throw new u;return this.window.paypal})}getPayPalSdkScriptConfigOrThrow(e,t,n,r=!0){const{id:o,clientToken:a,initializationData:s}=e;if(!(null==s?void 0:s.clientId))throw new c(i.MissingPaymentMethod);const{intent:u,clientId:l,merchantId:d,buyerCountry:h,attributionId:f,isVenmoEnabled:y,isHostedCheckoutEnabled:g,isPayPalCreditAvailable:v,isDeveloperModeApplicable:m,availableAlternativePaymentMethods:_=[],enabledAlternativePaymentMethods:b=[],isGooglePayEnabled:S}=s,w=g||r,I=\"paypalcommercecreditcards\"===o,P=I?[\"card\"]:[],C=v?[\"credit\",\"paylater\"]:[],O=y?[\"venmo\"]:[],A=S?[\"googlepay\"]:[],E=r?[\"card-fields\"]:[],z=[...I?[]:[\"card\"],...v?[]:[\"credit\",\"paylater\"],...y?[]:[\"venmo\"],..._.filter(e=>!b.includes(e))],k=[...P,...C,...O,...b],T=p(n);return{options:Object.assign(Object.assign({\"client-id\":l,\"merchant-id\":d,\"enable-funding\":k.length>0?k:void 0,\"disable-funding\":z.length>0?z:void 0,commit:w,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...A,...E],currency:t,intent:u},m&&{\"buyer-country\":h}),T&&{locale:T}),attributes:{\"data-partner-attribution-id\":f,\"data-client-token\":a}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const r=e[n];null==r||\"\"===r||Array.isArray(r)&&0===r.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(r)?r.join(\",\"):r}))}),t}}const tt=t=>{const{getHost:n}=t.getState();return new Xe((0,o.createFormPoster)(),t,new Ue((0,a.createRequestSender)({host:n()})),new et((0,e.vQ)()))};var nt=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class rt{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t,this.onError=g.noop}initialize(e){return nt(this,void 0,void 0,function*(){const{paypalcommercecredit:t,methodId:n}=e;if(!n)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new G('Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.');if(!t.container)throw new G('Unable to initialize payment because \"options.paypalcommercecredit.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new G('Unable to initialize payment because \"options.paypalcommercecredit.onClick\" argument is not a function.');this.onError=t.onError||g.noop,this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const r=yield this.paypalCommerceIntegrationService.loadPayPalSdk(n);r&&r.Buttons&&\"function\"==typeof r.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return nt(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return nt(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onComplete:r,onClick:i}=t,o=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:s,paymentButtonStyles:u,isServerSideShippingCallbacksEnabled:c}=a.initializationData||{},{checkoutTopButtonStyles:l}=u||{},d=Object.assign({createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercecredit\"),onApprove:({orderID:t})=>this.paypalCommerceIntegrationService.tokenizePayment(e,t)},i&&{onClick:()=>i()}),p=Object.assign(Object.assign({},!c&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(t,n)=>this.onHostedCheckoutApprove(t,n,e,r,c)}),h=[o.FUNDING.PAYLATER,o.FUNDING.CREDIT];let f=!1;h.forEach(e=>{if(!f){const t=Object.assign(Object.assign({fundingSource:e,style:this.paypalCommerceIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},l),{height:40}))},d),s&&p),r=o.Buttons(t);r.isEligible()&&(r.render(`#${n}`),f=!0)}}),f||this.paypalCommerceIntegrationService.removeElement(n)}onHostedCheckoutApprove(e,t,n,r,o){return nt(this,void 0,void 0,function*(){if(!e.orderID)throw new c(i.MissingOrderId);const a=this.paymentIntegrationService.getState().getCartOrThrow();try{const i=a.lineItems.physicalItems.length>0;if(!o){const e=yield t.order.get(),n=this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),i){const t=this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}i&&(yield this.paypalCommerceIntegrationService.updateOrder(o)),o&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalCommerceIntegrationService.submitPayment(n,e.orderID),r&&\"function\"==typeof r&&r()}catch(e){this.handleError(e)}})}onShippingAddressChange(e){return nt(this,void 0,void 0,function*(){const t=this.paypalCommerceIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.paypalCommerceIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalCommerceIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}onShippingOptionsChange(e){return nt(this,void 0,void 0,function*(){const t=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.paypalCommerceIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const it=t(e=>new rt(e,tt(e)),[{id:\"paypalcommercecredit\"}]);var ot=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class at{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}initialize(e){return ot(this,void 0,void 0,function*(){const{paypalcommercevenmo:t,methodId:n}=e;if(!n)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new G('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');if(!t.container)throw new G('Unable to initialize payment because \"options.paypalcommercevenmo.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new G('Unable to initialize payment because \"options.paypalcommercevenmo.onClick\" argument is not a function.');this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const r=yield this.paypalCommerceIntegrationService.loadPayPalSdk(n);r&&r.Buttons&&\"function\"==typeof r.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return ot(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return ot(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:r}=t,i=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:a}=o.initializationData||{},{checkoutTopButtonStyles:s}=a||{},u=Object.assign({fundingSource:i.FUNDING.VENMO,style:this.paypalCommerceIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},s),{height:40})),createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercevenmo\"),onApprove:({orderID:t})=>this.paypalCommerceIntegrationService.tokenizePayment(e,t)},r&&{onClick:()=>r()}),c=i.Buttons(u);c.isEligible()?c.render(`#${n}`):this.paypalCommerceIntegrationService.removeElement(n)}}const st=t(e=>new at(e,tt(e)),[{id:\"paypalcommercevenmo\"}]);var ut=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class ct{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalSdkScriptLoader=t,this.paypalFastlaneUtils=n}initialize(e){var t;return ut(this,void 0,void 0,function*(){const{methodId:n,paypalcommercefastlane:r}=e;if(!n)throw new G('Unable to proceed because \"methodId\" argument is not provided.');try{yield this.paymentIntegrationService.loadPaymentMethod(n);const e=this.paymentIntegrationService.getState(),i=e.getCartOrThrow(),o=e.getPaymentMethodOrThrow(n),a=!!(null===(t=o.initializationData)||void 0===t?void 0:t.isDeveloperModeApplicable),s=yield this.paypalSdkScriptLoader.getPayPalFastlaneSdk(o,i.currency.code,i.id,e.getLocale());yield this.paypalFastlaneUtils.initializePayPalFastlane(s,a,this.getFastlaneStyles(n,r))}catch(e){}return Promise.resolve()})}deinitialize(){return ut(this,void 0,void 0,function*(){return Promise.resolve()})}signIn(e,t){return ut(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t),yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:void 0,addresses:void 0,instruments:void 0}),this.paypalFastlaneUtils.removeStorageSessionId()})}signOut(e){return ut(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){return ut(this,void 0,void 0,function*(){const{checkoutPaymentMethodExecuted:t,continueWithCheckoutCallback:n,methodId:r}=e||{};if(!r)throw new G('Unable to proceed because \"methodId\" argument is not provided.');if(\"function\"!=typeof n)throw new G('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');if(this.paymentIntegrationService.getState().getCustomerOrThrow().isGuest){t&&\"function\"==typeof t&&t();try{yield this.runPayPalAuthenticationFlowOrThrow(r)}catch(e){}}n()})}runPayPalAuthenticationFlowOrThrow(e){return ut(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow().id,r=t.getCustomer(),i=t.getBillingAddress(),o=(null==r?void 0:r.email)||(null==i?void 0:i.email)||\"\",{customerContextId:a}=yield this.paypalFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(a),u=s.authenticationState===E.CANCELED;yield this.updateCustomerDataState(e,s),u?this.paypalFastlaneUtils.removeStorageSessionId():this.paypalFastlaneUtils.updateStorageSessionId(n)})}updateCustomerDataState(e,t){var n;return ut(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState().getCartOrThrow(),{authenticationState:i,addresses:o,billingAddress:a,shippingAddress:s,instruments:u}=this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,t);if(yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:i,addresses:o,instruments:u}),a&&(yield this.paymentIntegrationService.updateBillingAddress(a)),s&&r.lineItems.physicalItems.length>0){const t=yield this.paymentIntegrationService.updateShippingAddress(s),r=t.getPaymentMethodOrThrow(e),{isFastlaneShippingOptionAutoSelectEnabled:i}=r.initializationData||{},o=t.getConsignments()||[],a=(null===(n=o[0])||void 0===n?void 0:n.availableShippingOptions)||[],u=a[0],c=a.find(e=>e.isRecommended);if((c||u)&&i){const e=(null==c?void 0:c.id)||u.id;yield this.paymentIntegrationService.selectShippingOption(e)}}})}getFastlaneStyles(e,t){const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{fastlaneStyles:r,isFastlaneStylingEnabled:i}=n.initializationData||{};return Le(i?r:{},null==t?void 0:t.styles)}}const lt=t(e=>new ct(e,y(),Pe()),[{id:\"paypalcommerceacceleratedcheckout\"},{id:\"paypalcommercecreditcards\"}]);class dt{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalButtonCreationService=n}initialize(e){var t,n,r,i,o;return n=this,r=void 0,o=function*(){const{paypalcommerce:n,containerId:r,methodId:i}=e,o=Boolean(null==n?void 0:n.buyNowInitializeOptions);if(!i)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new G('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!n)throw new G('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');if(o&&!n.currencyCode)throw new G('Unable to initialize payment because \"options.paypalcommerce.currencyCode\" argument is not provided.');if(o&&\"function\"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new G('Unable to initialize payment because \"options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');o||(yield this.paymentIntegrationService.loadDefaultCheckout());const a=o?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.paypalIntegrationService.loadPayPalSdk(i,a,!1),this.renderButton(r,i,n)},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{u(o.next(e))}catch(e){t(e)}}function s(e){try{u(o.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}u((o=o.apply(n,r||[])).next())})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:r,style:i,onComplete:o,onEligibilityFailure:a}=n,s=this.paypalIntegrationService.getPayPalSdkOrThrow(),u=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:c,isServerSideShippingCallbacksEnabled:l}=u.initializationData||{},d={onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},p=Object.assign(Object.assign({fundingSource:s.FUNDING.PAYPAL,style:this.paypalIntegrationService.getValidButtonStyle(i),isServerSideShippingCallbacksEnabled:l,isHostedCheckoutEnabled:c},r&&d),c&&o&&{onPaymentComplete:()=>o()}),h=this.paypalButtonCreationService.createPayPalButton(\"paypalcommerce\",t,p,r);h.isEligible()?h.render(`#${e}`):a&&\"function\"==typeof a?a():this.paypalIntegrationService.removeElement(e)}}const pt=t(e=>{const t=U(e),n=new He(e,t);return new dt(e,t,n)},[{id:\"paypalcommerce\"}]);var ht=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class ft{constructor(e,t){this.paymentIntegrationService=e,this.paypalIntegrationService=t}initialize(e){return ht(this,void 0,void 0,function*(){const{paypalcommercecredit:t,containerId:n,methodId:r}=e,{buyNowInitializeOptions:i,currencyCode:o}=t||{},a=!!i;if(!r)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new G('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new G('Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.');if(a&&!o)throw new G('Unable to initialize payment because \"options.paypalcommercecredit.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==i?void 0:i.getBuyNowCartRequestBody))throw new G('Unable to initialize payment because \"options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=this.paymentIntegrationService.getState(),u=a?o:s.getCartOrThrow().currency.code;yield this.paypalIntegrationService.loadPayPalSdk(r,u,!1),this.renderButton(n,r,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:r,style:i,onComplete:o,onEligibilityFailure:a}=n,s=this.paypalIntegrationService.getPayPalSdkOrThrow(),u=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:c,isServerSideShippingCallbacksEnabled:l}=u.initializationData||{},d={createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercecredit\"),onApprove:({orderID:e})=>this.paypalIntegrationService.tokenizePayment(t,e)},p={onClick:()=>this.handleClick(r),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},h=Object.assign(Object.assign({},!l&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o,l)}),f=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT];let y=!1;f.forEach(t=>{if(!y){const n=Object.assign(Object.assign(Object.assign({fundingSource:t,style:this.paypalIntegrationService.getValidButtonStyle(i)},d),r&&p),c&&h),o=s.Buttons(n);o.isEligible()?(o.render(`#${e}`),y=!0):a&&\"function\"==typeof a&&a()}}),y||this.paypalIntegrationService.removeElement(e)}handleClick(e){return ht(this,void 0,void 0,function*(){if(e){const t=yield this.paypalIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,r,o){return ht(this,void 0,void 0,function*(){if(!e.orderID)throw new c(i.MissingOrderId);const a=this.paymentIntegrationService.getState().getCartOrThrow();try{const i=a.lineItems.physicalItems.length>0;if(!o){const e=yield t.order.get(),n=this.paypalIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),i){const t=this.paypalIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}return i&&(yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\",void 0,void 0,o)),o&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalIntegrationService.submitPayment(n,e.orderID),r&&\"function\"==typeof r&&r(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return ht(this,void 0,void 0,function*(){const t=this.paypalIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.paypalIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\")}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return ht(this,void 0,void 0,function*(){const t=this.paypalIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\")}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const yt=t(e=>new ft(e,U(e)),[{id:\"paypalcommercecredit\"}]);var gt=function(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}u((r=r.apply(e,t||[])).next())})};class vt{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}initialize(e){return gt(this,void 0,void 0,function*(){const{paypalcommercevenmo:t,containerId:n,methodId:r}=e,{buyNowInitializeOptions:i,currencyCode:o}=t||{},a=!!i;if(!r)throw new G('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new G('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new G('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');if(a&&!o)throw new G('Unable to initialize payment because \"options.paypalcommercevenmo.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==i?void 0:i.getBuyNowCartRequestBody))throw new G('Unable to initialize payment because \"options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=a?o:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.paypalCommerceIntegrationService.loadPayPalSdk(r,s,!1),this.renderButton(n,r,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:r,style:i,onEligibilityFailure:o}=n,a=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),s=a.FUNDING.VENMO,u={createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercevenmo\"),onApprove:({orderID:e})=>this.paypalCommerceIntegrationService.tokenizePayment(t,e)},c={onClick:()=>this.handleClick(r),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},l=Object.assign(Object.assign({fundingSource:s,style:this.getValidVenmoButtonStyles(i)},u),r&&c),d=a.Buttons(l);d.isEligible()?d.render(`#${e}`):o&&\"function\"==typeof o?o():this.paypalCommerceIntegrationService.removeElement(e)}getValidVenmoButtonStyles(e){const t=this.paypalCommerceIntegrationService.getValidButtonStyle(e);return t.color===pe.gold?Object.assign(Object.assign({},t),{color:void 0}):t}handleClick(e){return gt(this,void 0,void 0,function*(){if(e){const t=yield this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}}const mt=t(e=>new vt(e,tt(e)),[{id:\"paypalcommercevenmo\"}])})(),module.exports=r})();\n//# sourceMappingURL=paypal-commerce.js.map"
  },
  {
    "path": "dist/cjs/integrations/paypal-express.js",
    "content": "(()=>{var t={9165(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(t){var n=new r.default;return new i.default(n,t)};var r=e(9828),i=e(5470)},9828(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(){}return t.prototype.build=function(t,n,e){var r=this,i=document.createElement(\"form\");return i.style.display=\"none\",i.setAttribute(\"action\",t),i.setAttribute(\"method\",\"POST\"),i.setAttribute(\"target\",e||\"_top\"),Object.keys(n).forEach(function(t){var e=n[t];i.appendChild(r._createInput(e,t))}),i},t.prototype._createInput=function(t,n){var e=document.createElement(\"input\");return e.setAttribute(\"name\",n),e.setAttribute(\"type\",\"hidden\"),e.setAttribute(\"value\",t),e},t}();n.default=e},5470(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var r=e(9783),i=function(){function t(t,n){this._formBuilder=t,this._options=n}return t.prototype.postForm=function(t,n,e,r){var i=this._formBuilder.build(this._prependHost(t),n,r);window.addEventListener(\"unload\",function t(){window.removeEventListener(\"unload\",t),e&&e()}),document.body.appendChild(i),i.submit()},t.prototype._prependHost=function(t){return this._options&&this._options.host&&!(0,r.isAbsoluteUrl)(t)?(0,r.joinPaths)(this._options.host,t):t},t}();n.default=i},8686(t,n,e){\"use strict\";n.createFormPoster=void 0;var r=e(9165);Object.defineProperty(n,\"createFormPoster\",{enumerable:!0,get:function(){return r.default}});e(5470)},9783(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.isAbsoluteUrl=function(t){return/^https?:\\/\\//.test(t)},n.joinPaths=function(t,n){return\"\".concat((e=t,e.replace(/\\/$/,\"\")),\"/\").concat(function(t){return t.replace(/^\\//,\"\")}(n));var e}},4325(t,n,e){\"use strict\";e.d(n,{g:()=>i});var r=e(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,n){var e=this.getKey(t,n.params);return this._cache[e]||null},t.prototype.write=function(t,n,e){var r=this.getKey(t,n.params);this._cache[r]=e},t.prototype.getKey=function(t,n){return void 0===n&&(n={}),0===Object.keys(n).length?t:\"\".concat(t,\"?\").concat(r.stringify(n))},t}()},321(t,n,e){\"use strict\";e.d(n,{A:()=>a});var r=e(168),i=e(1675),o=e(5861),u=e(4670);function a(t){return new u.A(new o.A,new i.A,r,t)}},6889(t,n,e){\"use strict\";e.d(n,{A:()=>i});var r=e(2024);function i(t){return new r.A(t)}},4043(t,n,e){\"use strict\";e.r(n),e.d(n,{RequestSender:()=>o.A,Timeout:()=>u.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=e(321),i=e(6889),o=e(4670),u=e(2024)},4843(t,n,e){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}e.d(n,{A:()=>r})},1675(t,n,e){\"use strict\";e.d(n,{A:()=>a});var r=e(1635),i=e(710),o=/application\\/(\\w+\\+)?json/,u=/application\\/x-www-form-urlencoded/;const a=function(){function t(){}return t.prototype.toRequestBody=function(t){var n=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(n))return JSON.stringify(t.body);if(u.test(n))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var n=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,n),headers:n,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,n){var e=this._getHeader(n,\"Content-Type\");return t&&o.test(e)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,n){var e,i=n.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((e={})[o.toLowerCase()]=i.join(\":\").trim(),e)):t},{})},t.prototype._getHeader=function(t,n){return t&&n&&(t[n]||t[n.toLowerCase()])||\"\"},t}()},5861(t,n,e){\"use strict\";e.d(n,{A:()=>i});var r=e(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,n){var e=new XMLHttpRequest;return this._configureRequest(e,t,n),e},t.prototype._configureRequest=function(t,n,e){void 0===e&&(e={}),t.open(e.method||\"GET\",this._formatUrl(n,e.params,e.encodeParams),!0),e.headers&&this._configureRequestHeaders(t,e.headers),\"boolean\"==typeof e.credentials&&(t.withCredentials=e.credentials),\"number\"==typeof e.timeout&&(t.timeout=e.timeout)},t.prototype._configureRequestHeaders=function(t,n){Object.keys(n).filter(function(t){return null!==n[t]}).forEach(function(e){t.setRequestHeader(e,n[e])})},t.prototype._formatUrl=function(t,n,e){return void 0===e&&(e=!0),n&&0!==Object.keys(n).length?\"\".concat(t,\"?\").concat(r.stringify(n,{encode:e})):t},t}()},4670(t,n,e){\"use strict\";e.d(n,{A:()=>s});var r=e(1635),i=e(35),o=e.n(i),u=e(4325),a=e(4843),c=e(2024);const s=function(){function t(t,n,e,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=n,this._cookie=e,this._options=r,this._cache=this._options.cache||new u.g}return t.prototype.sendRequest=function(t,n){var e=this,r=this._mergeDefaultOptions(t,n),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(n,i){var u=function(){var u=e._payloadTransformer.toResponse(o);u.status>=200&&u.status<300?(e._cacheRequest(t,r,u),n(u)):i(u)};o.onload=u,o.onerror=u,o.onabort=u,o.ontimeout=u,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,a.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(e._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"GET\"}))},t.prototype.post=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"POST\"}))},t.prototype.put=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"PUT\"}))},t.prototype.patch=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"PATCH\"}))},t.prototype.delete=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,n){var e={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&e.headers&&!this._isAssetRequest(t,n)&&this._isLocalRequest(t)&&(e.headers[\"X-XSRF-TOKEN\"]=r),n&&n.body&&e.headers&&(e.headers[\"Content-Type\"]=\"application/json\"),o()({},e,n)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,n){return this._shouldCacheRequest(n)?this._cache.read(t,n):null},t.prototype._cacheRequest=function(t,n,e){this._shouldCacheRequest(n)&&this._cache.write(t,n,e)},t.prototype._isAssetRequest=function(t,n){return(!n||!n.method||\"GET\"===n.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,n,e){\"use strict\";e.d(n,{A:()=>r});const r=function(){function t(t){var n=this;this._delay=t,this._promise=new Promise(function(t){n._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,n,e){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(n){return void 0!==t[n]}).map(function(n){var e=t[n];return\"string\"==typeof e?\"\".concat(n,\"=\").concat(encodeURIComponent(e)):\"\".concat(n,\"=\").concat(encodeURIComponent(JSON.stringify(e)||\"\"))}).join(\"&\")}e.d(n,{A:()=>r})},5889(t,n,e){\"use strict\";const r=e(803),i=e(1915),o=e(1657),u=e(3814);function a(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,n){return n.encode?n.strict?r(t):encodeURIComponent(t):t}function s(t,n){return n.decode?i(t):t}function f(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?f(Object.keys(t)).sort((t,n)=>Number(t)-Number(n)).map(n=>t[n]):t}function l(t){const n=t.indexOf(\"#\");return-1!==n&&(t=t.slice(0,n)),t}function p(t){const n=(t=l(t)).indexOf(\"?\");return-1===n?\"\":t.slice(n+1)}function h(t,n){return n.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!n.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function d(t,n){a((n=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},n)).arrayFormatSeparator);const e=function(t){let n;switch(t.arrayFormat){case\"index\":return(t,e,r)=>{n=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),n?(void 0===r[t]&&(r[t]={}),r[t][n[1]]=e):r[t]=e};case\"bracket\":return(t,e,r)=>{n=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),n?void 0!==r[t]?r[t]=[].concat(r[t],e):r[t]=[e]:r[t]=e};case\"comma\":case\"separator\":return(n,e,r)=>{const i=\"string\"==typeof e&&e.includes(t.arrayFormatSeparator),o=\"string\"==typeof e&&!i&&s(e,t).includes(t.arrayFormatSeparator);e=o?s(e,t):e;const u=i||o?e.split(t.arrayFormatSeparator).map(n=>s(n,t)):null===e?e:s(e,t);r[n]=u};default:return(t,n,e)=>{void 0!==e[t]?e[t]=[].concat(e[t],n):e[t]=n}}}(n),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,u]=o(n.decode?i.replace(/\\+/g,\" \"):i,\"=\");u=void 0===u?null:[\"comma\",\"separator\"].includes(n.arrayFormat)?u:s(u,n),e(s(t,n),u,r)}for(const t of Object.keys(r)){const e=r[t];if(\"object\"==typeof e&&null!==e)for(const t of Object.keys(e))e[t]=h(e[t],n);else r[t]=h(e,n)}return!1===n.sort?r:(!0===n.sort?Object.keys(r).sort():Object.keys(r).sort(n.sort)).reduce((t,n)=>{const e=r[n];return Boolean(e)&&\"object\"==typeof e&&!Array.isArray(e)?t[n]=f(e):t[n]=e,t},Object.create(null))}n.extract=p,n.parse=d,n.stringify=(t,n)=>{if(!t)return\"\";a((n=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},n)).arrayFormatSeparator);const e=e=>n.skipNull&&null==t[e]||n.skipEmptyString&&\"\"===t[e],r=function(t){switch(t.arrayFormat){case\"index\":return n=>(e,r)=>{const i=e.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,[c(n,t),\"[\",i,\"]\"].join(\"\")]:[...e,[c(n,t),\"[\",c(i,t),\"]=\",c(r,t)].join(\"\")]};case\"bracket\":return n=>(e,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,[c(n,t),\"[]\"].join(\"\")]:[...e,[c(n,t),\"[]=\",c(r,t)].join(\"\")];case\"comma\":case\"separator\":return n=>(e,r)=>null==r||0===r.length?e:0===e.length?[[c(n,t),\"=\",c(r,t)].join(\"\")]:[[e,c(r,t)].join(t.arrayFormatSeparator)];default:return n=>(e,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,c(n,t)]:[...e,[c(n,t),\"=\",c(r,t)].join(\"\")]}}(n),i={};for(const n of Object.keys(t))e(n)||(i[n]=t[n]);const o=Object.keys(i);return!1!==n.sort&&o.sort(n.sort),o.map(e=>{const i=t[e];return void 0===i?\"\":null===i?c(e,n):Array.isArray(i)?i.reduce(r(e),[]).join(\"&\"):c(e,n)+\"=\"+c(i,n)}).filter(t=>t.length>0).join(\"&\")},n.parseUrl=(t,n)=>{n=Object.assign({decode:!0},n);const[e,r]=o(t,\"#\");return Object.assign({url:e.split(\"?\")[0]||\"\",query:d(p(t),n)},n&&n.parseFragmentIdentifier&&r?{fragmentIdentifier:s(r,n)}:{})},n.stringifyUrl=(t,e)=>{e=Object.assign({encode:!0,strict:!0},e);const r=l(t.url).split(\"?\")[0]||\"\",i=n.extract(t.url),o=n.parse(i,{sort:!1}),u=Object.assign(o,t.query);let a=n.stringify(u,e);a&&(a=`?${a}`);let s=function(t){let n=\"\";const e=t.indexOf(\"#\");return-1!==e&&(n=t.slice(e)),n}(t.url);return t.fragmentIdentifier&&(s=`#${c(t.fragmentIdentifier,e)}`),`${r}${a}${s}`},n.pick=(t,e,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:a}=n.parseUrl(t,r);return n.stringifyUrl({url:i,query:u(o,e),fragmentIdentifier:a},r)},n.exclude=(t,e,r)=>{const i=Array.isArray(e)?t=>!e.includes(t):(t,n)=>!e(t,n);return n.pick(t,i,r)}},5477(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(){}return t.prototype.canSupportRel=function(t){var n=document.createElement(\"link\");return!!(n.relList&&n.relList.supports&&n.relList.supports(t))},t}();n.default=e},471(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=e(4043),i=e(5477),o=e(4886)},9722(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=e(4043),i=e(5477),o=e(7995)},5895(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return r||(r=(0,i.default)()),r};var r,i=e(471)},282(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return r||(r=(0,i.default)()),r};var r,i=e(9722)},315(t,n,e){\"use strict\";n.vQ=void 0;e(4886),e(471);var r=e(5895);Object.defineProperty(n,\"vQ\",{enumerable:!0,get:function(){return r.default}});e(7995),e(9722),e(282)},4886(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(t,n){this._browserSupport=t,this._requestSender=n,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,n){var e=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),u=n||{},a=u.async,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(n){delete e._scripts[t],i(n)},o.async=c,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.loadScript(t,n)})).then(function(){})},t.prototype.preloadScript=function(t,n){var e=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(n||{}).prefetch,u=void 0!==o&&o?\"prefetch\":\"preload\";if(e._browserSupport.canSupportRel(u)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=u,a.href=t,a.onload=function(){r()},a.onerror=function(){delete e._preloadedScripts[t],i()},document.head.appendChild(a)}else e._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.preloadScript(t,n)})).then(function(){})},t}();n.default=e},7995(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(t,n){this._browserSupport=t,this._requestSender=n,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,n){var e=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),u=n||{},a=u.prepend,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onerror=function(n){delete e._stylesheets[t],i(n)},o.rel=\"stylesheet\",o.href=t,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.loadStylesheet(t,n)})).then(function(){})},t.prototype.preloadStylesheet=function(t,n){var e=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(n||{}).prefetch,u=void 0!==o&&o,a=u?\"prefetch\":\"preload\";if(e._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=u?\"prefetch\":\"preload\",c.href=t,c.onload=function(){r()},c.onerror=function(n){delete e._preloadedStylesheets[t],i(n)},document.head.appendChild(c)}else e._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.preloadStylesheet(t,n)})).then(function(){})},t}();n.default=e},1915(t){\"use strict\";var n=\"%[a-f0-9]{2}\",e=new RegExp(\"(\"+n+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+n+\")+\",\"gi\");function i(t,n){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;n=n||1;var e=t.slice(0,n),r=t.slice(n);return Array.prototype.concat.call([],i(e),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var n=t.match(e)||[],r=1;r<n.length;r++)n=(t=i(n,r).join(\"\")).match(e)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(n){return function(t){for(var n={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},e=r.exec(t);e;){try{n[e[0]]=decodeURIComponent(e[0])}catch(t){var i=o(e[0]);i!==e[0]&&(n[e[0]]=i)}e=r.exec(t)}n[\"%C2\"]=\"�\";for(var u=Object.keys(n),a=0;a<u.length;a++){var c=u[a];t=t.replace(new RegExp(c,\"g\"),n[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,n){for(var e={},r=Object.keys(t),i=Array.isArray(n),o=0;o<r.length;o++){var u=r[o],a=t[u];(i?-1!==n.indexOf(u):n(u,a,t))&&(e[u]=a)}return e}},168(t){var n;n=function(){function t(){for(var t=0,n={};t<arguments.length;t++){var e=arguments[t];for(var r in e)n[r]=e[r]}return n}function n(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function e(r){function i(){}function o(n,e,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var u=JSON.stringify(e);/^[\\{\\[]/.test(u)&&(e=u)}catch(t){}e=r.write?r.write(e,n):encodeURIComponent(String(e)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),n=encodeURIComponent(String(n)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in o)o[c]&&(a+=\"; \"+c,!0!==o[c]&&(a+=\"=\"+o[c].split(\";\")[0]));return document.cookie=n+\"=\"+e+a}}function u(t,e){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],u=0;u<o.length;u++){var a=o[u].split(\"=\"),c=a.slice(1).join(\"=\");e||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var s=n(a[0]);if(c=(r.read||r)(c,s)||n(c),e)try{c=JSON.parse(c)}catch(t){}if(i[s]=c,t===s)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return u(t,!1)},i.getJSON=function(t){return u(t,!0)},i.remove=function(n,e){o(n,\"\",t(e,{expires:-1}))},i.defaults={},i.withConverter=e,i}(function(){})},\"function\"==typeof define&&define.amd&&define(n),t.exports=n()},35(t,n,e){t=e.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",u=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,s=/^(?:0|[1-9]\\d*)$/,f={};f[\"[object Float32Array]\"]=f[\"[object Float64Array]\"]=f[\"[object Int8Array]\"]=f[\"[object Int16Array]\"]=f[\"[object Int32Array]\"]=f[\"[object Uint8Array]\"]=f[\"[object Uint8ClampedArray]\"]=f[\"[object Uint16Array]\"]=f[\"[object Uint32Array]\"]=!0,f[o]=f[\"[object Array]\"]=f[\"[object ArrayBuffer]\"]=f[\"[object Boolean]\"]=f[\"[object DataView]\"]=f[\"[object Date]\"]=f[\"[object Error]\"]=f[u]=f[\"[object Map]\"]=f[\"[object Number]\"]=f[a]=f[\"[object RegExp]\"]=f[\"[object Set]\"]=f[\"[object String]\"]=f[\"[object WeakMap]\"]=!1;var l,p,h,d=\"object\"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,v=\"object\"==typeof self&&self&&self.Object===Object&&self,_=d||v||Function(\"return this\")(),y=n&&!n.nodeType&&n,g=y&&t&&!t.nodeType&&t,m=g&&g.exports===y,b=m&&d.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),j=w&&w.isTypedArray,x=Array.prototype,S=Function.prototype,O=Object.prototype,A=_[\"__core-js_shared__\"],I=S.toString,E=O.hasOwnProperty,k=(l=/[^.]+$/.exec(A&&A.keys&&A.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",P=O.toString,R=I.call(Object),C=RegExp(\"^\"+I.call(E).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),M=m?_.Buffer:void 0,z=_.Symbol,T=_.Uint8Array,U=(M&&M.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(t){return p(h(t))}),N=Object.create,L=O.propertyIsEnumerable,F=x.splice,q=z?z.toStringTag:void 0,B=function(){try{var t=at(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),D=M?M.isBuffer:void 0,$=Math.max,W=Date.now,H=at(_,\"Map\"),K=at(Object,\"create\"),G=function(){function t(){}return function(n){if(!mt(n))return{};if(N)return N(n);t.prototype=n;var e=new t;return t.prototype=void 0,e}}();function Z(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function V(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function J(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Y(t){var n=this.__data__=new V(t);this.size=n.size}function X(t,n,e){(void 0!==e&&!pt(t[n],e)||void 0===e&&!(n in t))&&nt(t,n,e)}function Q(t,n,e){var r=t[n];E.call(t,n)&&pt(r,e)&&(void 0!==e||n in t)||nt(t,n,e)}function tt(t,n){for(var e=t.length;e--;)if(pt(t[e][0],n))return e;return-1}function nt(t,n,e){\"__proto__\"==n&&B?B(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}Z.prototype.clear=function(){this.__data__=K?K(null):{},this.size=0},Z.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},Z.prototype.get=function(t){var n=this.__data__;if(K){var e=n[t];return e===r?void 0:e}return E.call(n,t)?n[t]:void 0},Z.prototype.has=function(t){var n=this.__data__;return K?void 0!==n[t]:E.call(n,t)},Z.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=K&&void 0===n?r:n,this},V.prototype.clear=function(){this.__data__=[],this.size=0},V.prototype.delete=function(t){var n=this.__data__,e=tt(n,t);return!(e<0||(e==n.length-1?n.pop():F.call(n,e,1),--this.size,0))},V.prototype.get=function(t){var n=this.__data__,e=tt(n,t);return e<0?void 0:n[e][1]},V.prototype.has=function(t){return tt(this.__data__,t)>-1},V.prototype.set=function(t,n){var e=this.__data__,r=tt(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},J.prototype.clear=function(){this.size=0,this.__data__={hash:new Z,map:new(H||V),string:new Z}},J.prototype.delete=function(t){var n=ut(this,t).delete(t);return this.size-=n?1:0,n},J.prototype.get=function(t){return ut(this,t).get(t)},J.prototype.has=function(t){return ut(this,t).has(t)},J.prototype.set=function(t,n){var e=ut(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},Y.prototype.clear=function(){this.__data__=new V,this.size=0},Y.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},Y.prototype.get=function(t){return this.__data__.get(t)},Y.prototype.has=function(t){return this.__data__.has(t)},Y.prototype.set=function(t,n){var e=this.__data__;if(e instanceof V){var r=e.__data__;if(!H||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new J(r)}return e.set(t,n),this.size=e.size,this};function et(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":q&&q in Object(t)?function(t){var n=E.call(t,q),e=t[q];try{t[q]=void 0;var r=!0}catch(t){}var i=P.call(t);return r&&(n?t[q]=e:delete t[q]),i}(t):function(t){return P.call(t)}(t)}function rt(t){return bt(t)&&et(t)==o}function it(t,n,e,r,i){t!==n&&function(t,n,e){for(var r=-1,i=Object(t),o=e(t),u=o.length;u--;){var a=o[++r];if(!1===n(i[a],a,i))break}}(n,function(o,u){if(i||(i=new Y),mt(o))!function(t,n,e,r,i,o,u){var c=ft(t,e),s=ft(n,e),f=u.get(s);if(f)X(t,e,f);else{var l,p,h,d,v,_=o?o(c,s,e+\"\",t,n,u):void 0,y=void 0===_;if(y){var g=dt(s),m=!g&&_t(s),b=!g&&!m&&wt(s);_=s,g||m||b?dt(c)?_=c:bt(v=c)&&vt(v)?_=function(t,n){var e=-1,r=t.length;for(n||(n=Array(r));++e<r;)n[e]=t[e];return n}(c):m?(y=!1,_=function(t){return t.slice()}(s)):b?(y=!1,d=new(h=(l=s).buffer).constructor(h.byteLength),new T(d).set(new T(h)),p=d,_=new l.constructor(p,l.byteOffset,l.length)):_=[]:function(t){if(!bt(t)||et(t)!=a)return!1;var n=U(t);if(null===n)return!0;var e=E.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof e&&e instanceof e&&I.call(e)==R}(s)||ht(s)?(_=c,ht(c)?_=function(t){return function(t,n,e){var r=!e;e||(e={});for(var i=-1,o=n.length;++i<o;){var u=n[i],a=void 0;void 0===a&&(a=t[u]),r?nt(e,u,a):Q(e,u,a)}return e}(t,jt(t))}(c):mt(c)&&!yt(c)||(_=function(t){return\"function\"!=typeof t.constructor||st(t)?{}:G(U(t))}(s))):y=!1}y&&(u.set(s,_),i(_,s,r,o,u),u.delete(s)),X(t,e,_)}}(t,n,u,e,it,r,i);else{var c=r?r(ft(t,u),o,u+\"\",t,n,i):void 0;void 0===c&&(c=o),X(t,u,c)}},jt)}var ot=B?function(t,n){return B(t,\"toString\",{configurable:!0,enumerable:!1,value:(e=n,function(){return e}),writable:!0});var e}:Ot;function ut(t,n){var e,r,i=t.__data__;return(\"string\"==(r=typeof(e=n))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==e:null===e)?i[\"string\"==typeof n?\"string\":\"hash\"]:i.map}function at(t,n){var e=function(t,n){return null==t?void 0:t[n]}(t,n);return function(t){return!(!mt(t)||function(t){return!!k&&k in t}(t))&&(yt(t)?C:c).test(function(t){if(null!=t){try{return I.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(e)?e:void 0}function ct(t,n){var e=typeof t;return!!(n=n??i)&&(\"number\"==e||\"symbol\"!=e&&s.test(t))&&t>-1&&t%1==0&&t<n}function st(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||O)}function ft(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var lt=function(t){var n=0,e=0;return function(){var r=W(),i=16-(r-e);if(e=r,i>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(void 0,arguments)}}(ot);function pt(t,n){return t===n||t!=t&&n!=n}var ht=rt(function(){return arguments}())?rt:function(t){return bt(t)&&E.call(t,\"callee\")&&!L.call(t,\"callee\")},dt=Array.isArray;function vt(t){return null!=t&&gt(t.length)&&!yt(t)}var _t=D||function(){return!1};function yt(t){if(!mt(t))return!1;var n=et(t);return n==u||\"[object GeneratorFunction]\"==n||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function mt(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=j?function(t){return function(n){return t(n)}}(j):function(t){return bt(t)&&gt(t.length)&&!!f[et(t)]};function jt(t){return vt(t)?function(t,n){var e=dt(t),r=!e&&ht(t),i=!e&&!r&&_t(t),o=!e&&!r&&!i&&wt(t),u=e||r||i||o,a=u?function(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}(t.length,String):[],c=a.length;for(var s in t)!n&&!E.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||ct(s,c))||a.push(s);return a}(t,!0):function(t){if(!mt(t))return function(t){var n=[];if(null!=t)for(var e in Object(t))n.push(e);return n}(t);var n=st(t),e=[];for(var r in t)(\"constructor\"!=r||!n&&E.call(t,r))&&e.push(r);return e}(t)}var xt,St=(xt=function(t,n,e){it(t,n,e)},function(t,n){return lt(function(t,n,e){return n=$(void 0===n?t.length-1:n,0),function(){for(var r=arguments,i=-1,o=$(r.length-n,0),u=Array(o);++i<o;)u[i]=r[n+i];i=-1;for(var a=Array(n+1);++i<n;)a[i]=r[i];return a[n]=e(u),function(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}(t,this,a)}}(t,n,Ot),t+\"\")}(function(t,n){var e=-1,r=n.length,i=r>1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(i=xt.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,n,e){if(!mt(e))return!1;var r=typeof n;return!!(\"number\"==r?vt(e)&&ct(n,e.length):\"string\"==r&&n in e)&&pt(e[n],t)}(n[0],n[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++e<r;){var u=n[e];u&&xt(t,u,e)}return t}));function Ot(t){return t}t.exports=St},9440(t,n,e){t=e.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,s=1/0,f=9007199254740991,l=NaN,p=4294967295,h=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",v=\"[object Array]\",_=\"[object Boolean]\",y=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",j=\"[object Number]\",x=\"[object Object]\",S=\"[object Promise]\",O=\"[object RegExp]\",A=\"[object Set]\",I=\"[object String]\",E=\"[object Symbol]\",k=\"[object WeakMap]\",P=\"[object ArrayBuffer]\",R=\"[object DataView]\",C=\"[object Float32Array]\",M=\"[object Float64Array]\",z=\"[object Int8Array]\",T=\"[object Int16Array]\",U=\"[object Int32Array]\",N=\"[object Uint8Array]\",L=\"[object Uint8ClampedArray]\",F=\"[object Uint16Array]\",q=\"[object Uint32Array]\",B=/\\b__p \\+= '';/g,D=/\\b(__p \\+=) '' \\+/g,$=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,W=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,K=RegExp(W.source),G=RegExp(H.source),Z=/<%-([\\s\\S]+?)%>/g,V=/<%([\\s\\S]+?)%>/g,J=/<%=([\\s\\S]+?)%>/g,Y=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,X=/^\\w*$/,Q=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,nt=RegExp(tt.source),et=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,vt=/^0o[0-7]+$/i,_t=/^(?:0|[1-9]\\d*)$/,yt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",jt=\"\\\\u2700-\\\\u27bf\",xt=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",St=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ot=\"\\\\ufe0e\\\\ufe0f\",At=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",It=\"[\"+bt+\"]\",Et=\"[\"+At+\"]\",kt=\"[\"+wt+\"]\",Pt=\"\\\\d+\",Rt=\"[\"+jt+\"]\",Ct=\"[\"+xt+\"]\",Mt=\"[^\"+bt+At+Pt+jt+xt+St+\"]\",zt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Tt=\"[^\"+bt+\"]\",Ut=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Nt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Lt=\"[\"+St+\"]\",Ft=\"\\\\u200d\",qt=\"(?:\"+Ct+\"|\"+Mt+\")\",Bt=\"(?:\"+Lt+\"|\"+Mt+\")\",Dt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",$t=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Wt=\"(?:\"+kt+\"|\"+zt+\")?\",Ht=\"[\"+Ot+\"]?\",Kt=Ht+Wt+\"(?:\"+Ft+\"(?:\"+[Tt,Ut,Nt].join(\"|\")+\")\"+Ht+Wt+\")*\",Gt=\"(?:\"+[Rt,Ut,Nt].join(\"|\")+\")\"+Kt,Zt=\"(?:\"+[Tt+kt+\"?\",kt,Ut,Nt,It].join(\"|\")+\")\",Vt=RegExp(\"['’]\",\"g\"),Jt=RegExp(kt,\"g\"),Yt=RegExp(zt+\"(?=\"+zt+\")|\"+Zt+Kt,\"g\"),Xt=RegExp([Lt+\"?\"+Ct+\"+\"+Dt+\"(?=\"+[Et,Lt,\"$\"].join(\"|\")+\")\",Bt+\"+\"+$t+\"(?=\"+[Et,Lt+qt,\"$\"].join(\"|\")+\")\",Lt+\"?\"+qt+\"+\"+Dt,Lt+\"+\"+$t,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Pt,Gt].join(\"|\"),\"g\"),Qt=RegExp(\"[\"+Ft+bt+wt+Ot+\"]\"),tn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,nn=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],en=-1,rn={};rn[C]=rn[M]=rn[z]=rn[T]=rn[U]=rn[N]=rn[L]=rn[F]=rn[q]=!0,rn[d]=rn[v]=rn[P]=rn[_]=rn[R]=rn[y]=rn[g]=rn[m]=rn[w]=rn[j]=rn[x]=rn[O]=rn[A]=rn[I]=rn[k]=!1;var on={};on[d]=on[v]=on[P]=on[R]=on[_]=on[y]=on[C]=on[M]=on[z]=on[T]=on[U]=on[w]=on[j]=on[x]=on[O]=on[A]=on[I]=on[E]=on[N]=on[L]=on[F]=on[q]=!0,on[g]=on[m]=on[k]=!1;var un={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},an=parseFloat,cn=parseInt,sn=\"object\"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,fn=\"object\"==typeof self&&self&&self.Object===Object&&self,ln=sn||fn||Function(\"return this\")(),pn=n&&!n.nodeType&&n,hn=pn&&t&&!t.nodeType&&t,dn=hn&&hn.exports===pn,vn=dn&&sn.process,_n=function(){try{return hn&&hn.require&&hn.require(\"util\").types||vn&&vn.binding&&vn.binding(\"util\")}catch(t){}}(),yn=_n&&_n.isArrayBuffer,gn=_n&&_n.isDate,mn=_n&&_n.isMap,bn=_n&&_n.isRegExp,wn=_n&&_n.isSet,jn=_n&&_n.isTypedArray;function xn(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}function Sn(t,n,e,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];n(r,u,e(u),t)}return r}function On(t,n){for(var e=-1,r=null==t?0:t.length;++e<r&&!1!==n(t[e],e,t););return t}function An(t,n){for(var e=null==t?0:t.length;e--&&!1!==n(t[e],e,t););return t}function In(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(!n(t[e],e,t))return!1;return!0}function En(t,n){for(var e=-1,r=null==t?0:t.length,i=0,o=[];++e<r;){var u=t[e];n(u,e,t)&&(o[i++]=u)}return o}function kn(t,n){return!(null==t||!t.length)&&Fn(t,n,0)>-1}function Pn(t,n,e){for(var r=-1,i=null==t?0:t.length;++r<i;)if(e(n,t[r]))return!0;return!1}function Rn(t,n){for(var e=-1,r=null==t?0:t.length,i=Array(r);++e<r;)i[e]=n(t[e],e,t);return i}function Cn(t,n){for(var e=-1,r=n.length,i=t.length;++e<r;)t[i+e]=n[e];return t}function Mn(t,n,e,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(e=t[++i]);++i<o;)e=n(e,t[i],i,t);return e}function zn(t,n,e,r){var i=null==t?0:t.length;for(r&&i&&(e=t[--i]);i--;)e=n(e,t[i],i,t);return e}function Tn(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(n(t[e],e,t))return!0;return!1}var Un=$n(\"length\");function Nn(t,n,e){var r;return e(t,function(t,e,i){if(n(t,e,i))return r=e,!1}),r}function Ln(t,n,e,r){for(var i=t.length,o=e+(r?1:-1);r?o--:++o<i;)if(n(t[o],o,t))return o;return-1}function Fn(t,n,e){return n==n?function(t,n,e){for(var r=e-1,i=t.length;++r<i;)if(t[r]===n)return r;return-1}(t,n,e):Ln(t,Bn,e)}function qn(t,n,e,r){for(var i=e-1,o=t.length;++i<o;)if(r(t[i],n))return i;return-1}function Bn(t){return t!=t}function Dn(t,n){var e=null==t?0:t.length;return e?Kn(t,n)/e:l}function $n(t){return function(n){return null==n?r:n[t]}}function Wn(t){return function(n){return null==t?r:t[n]}}function Hn(t,n,e,r,i){return i(t,function(t,i,o){e=r?(r=!1,t):n(e,t,i,o)}),e}function Kn(t,n){for(var e,i=-1,o=t.length;++i<o;){var u=n(t[i]);u!==r&&(e=e===r?u:e+u)}return e}function Gn(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}function Zn(t){return t?t.slice(0,le(t)+1).replace(et,\"\"):t}function Vn(t){return function(n){return t(n)}}function Jn(t,n){return Rn(n,function(n){return t[n]})}function Yn(t,n){return t.has(n)}function Xn(t,n){for(var e=-1,r=t.length;++e<r&&Fn(n,t[e],0)>-1;);return e}function Qn(t,n){for(var e=t.length;e--&&Fn(n,t[e],0)>-1;);return e}var te=Wn({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),ne=Wn({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function ee(t){return\"\\\\\"+un[t]}function re(t){return Qt.test(t)}function ie(t){var n=-1,e=Array(t.size);return t.forEach(function(t,r){e[++n]=[r,t]}),e}function oe(t,n){return function(e){return t(n(e))}}function ue(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var a=t[e];a!==n&&a!==u||(t[e]=u,o[i++]=e)}return o}function ae(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=t}),e}function ce(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=[t,t]}),e}function se(t){return re(t)?function(t){for(var n=Yt.lastIndex=0;Yt.test(t);)++n;return n}(t):Un(t)}function fe(t){return re(t)?function(t){return t.match(Yt)||[]}(t):function(t){return t.split(\"\")}(t)}function le(t){for(var n=t.length;n--&&rt.test(t.charAt(n)););return n}var pe=Wn({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),he=function t(n){var e,rt=(n=null==n?ln:he.defaults(ln.Object(),n,he.pick(ln,nn))).Array,bt=n.Date,wt=n.Error,jt=n.Function,xt=n.Math,St=n.Object,Ot=n.RegExp,At=n.String,It=n.TypeError,Et=rt.prototype,kt=jt.prototype,Pt=St.prototype,Rt=n[\"__core-js_shared__\"],Ct=kt.toString,Mt=Pt.hasOwnProperty,zt=0,Tt=(e=/[^.]+$/.exec(Rt&&Rt.keys&&Rt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+e:\"\",Ut=Pt.toString,Nt=Ct.call(St),Lt=ln._,Ft=Ot(\"^\"+Ct.call(Mt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),qt=dn?n.Buffer:r,Bt=n.Symbol,Dt=n.Uint8Array,$t=qt?qt.allocUnsafe:r,Wt=oe(St.getPrototypeOf,St),Ht=St.create,Kt=Pt.propertyIsEnumerable,Gt=Et.splice,Zt=Bt?Bt.isConcatSpreadable:r,Yt=Bt?Bt.iterator:r,Qt=Bt?Bt.toStringTag:r,un=function(){try{var t=co(St,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),sn=n.clearTimeout!==ln.clearTimeout&&n.clearTimeout,fn=bt&&bt.now!==ln.Date.now&&bt.now,pn=n.setTimeout!==ln.setTimeout&&n.setTimeout,hn=xt.ceil,vn=xt.floor,_n=St.getOwnPropertySymbols,Un=qt?qt.isBuffer:r,Wn=n.isFinite,de=Et.join,ve=oe(St.keys,St),_e=xt.max,ye=xt.min,ge=bt.now,me=n.parseInt,be=xt.random,we=Et.reverse,je=co(n,\"DataView\"),xe=co(n,\"Map\"),Se=co(n,\"Promise\"),Oe=co(n,\"Set\"),Ae=co(n,\"WeakMap\"),Ie=co(St,\"create\"),Ee=Ae&&new Ae,ke={},Pe=No(je),Re=No(xe),Ce=No(Se),Me=No(Oe),ze=No(Ae),Te=Bt?Bt.prototype:r,Ue=Te?Te.valueOf:r,Ne=Te?Te.toString:r;function Le(t){if(ta(t)&&!$u(t)&&!(t instanceof De)){if(t instanceof Be)return t;if(Mt.call(t,\"__wrapped__\"))return Lo(t)}return new Be(t)}var Fe=function(){function t(){}return function(n){if(!Qu(n))return{};if(Ht)return Ht(n);t.prototype=n;var e=new t;return t.prototype=r,e}}();function qe(){}function Be(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=r}function De(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function $e(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function We(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function He(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Ke(t){var n=-1,e=null==t?0:t.length;for(this.__data__=new He;++n<e;)this.add(t[n])}function Ge(t){var n=this.__data__=new We(t);this.size=n.size}function Ze(t,n){var e=$u(t),r=!e&&Du(t),i=!e&&!r&&Gu(t),o=!e&&!r&&!i&&ca(t),u=e||r||i||o,a=u?Gn(t.length,At):[],c=a.length;for(var s in t)!n&&!Mt.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||_o(s,c))||a.push(s);return a}function Ve(t){var n=t.length;return n?t[Hr(0,n-1)]:r}function Je(t,n){return Co(Ai(t),or(n,0,t.length))}function Ye(t){return Co(Ai(t))}function Xe(t,n,e){(e!==r&&!Fu(t[n],e)||e===r&&!(n in t))&&rr(t,n,e)}function Qe(t,n,e){var i=t[n];Mt.call(t,n)&&Fu(i,e)&&(e!==r||n in t)||rr(t,n,e)}function tr(t,n){for(var e=t.length;e--;)if(Fu(t[e][0],n))return e;return-1}function nr(t,n,e,r){return fr(t,function(t,i,o){n(r,t,e(t),o)}),r}function er(t,n){return t&&Ii(n,Pa(n),t)}function rr(t,n,e){\"__proto__\"==n&&un?un(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}function ir(t,n){for(var e=-1,i=n.length,o=rt(i),u=null==t;++e<i;)o[e]=u?r:Oa(t,n[e]);return o}function or(t,n,e){return t==t&&(e!==r&&(t=t<=e?t:e),n!==r&&(t=t>=n?t:n)),t}function ur(t,n,e,i,o,u){var a,c=1&n,s=2&n,f=4&n;if(e&&(a=o?e(t,i,o,u):e(t)),a!==r)return a;if(!Qu(t))return t;var l=$u(t);if(l){if(a=function(t){var n=t.length,e=new t.constructor(n);return n&&\"string\"==typeof t[0]&&Mt.call(t,\"index\")&&(e.index=t.index,e.input=t.input),e}(t),!c)return Ai(t,a)}else{var p=lo(t),h=p==m||p==b;if(Gu(t))return bi(t,c);if(p==x||p==d||h&&!o){if(a=s||h?{}:ho(t),!c)return s?function(t,n){return Ii(t,fo(t),n)}(t,function(t,n){return t&&Ii(n,Ra(n),t)}(a,t)):function(t,n){return Ii(t,so(t),n)}(t,er(a,t))}else{if(!on[p])return o?t:{};a=function(t,n,e){var r,i=t.constructor;switch(n){case P:return wi(t);case _:case y:return new i(+t);case R:return function(t,n){var e=n?wi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.byteLength)}(t,e);case C:case M:case z:case T:case U:case N:case L:case F:case q:return ji(t,e);case w:return new i;case j:case I:return new i(t);case O:return function(t){var n=new t.constructor(t.source,lt.exec(t));return n.lastIndex=t.lastIndex,n}(t);case A:return new i;case E:return r=t,Ue?St(Ue.call(r)):{}}}(t,p,c)}}u||(u=new Ge);var v=u.get(t);if(v)return v;u.set(t,a),oa(t)?t.forEach(function(r){a.add(ur(r,n,e,r,t,u))}):na(t)&&t.forEach(function(r,i){a.set(i,ur(r,n,e,i,t,u))});var g=l?r:(f?s?no:to:s?Ra:Pa)(t);return On(g||t,function(r,i){g&&(r=t[i=r]),Qe(a,i,ur(r,n,e,i,t,u))}),a}function ar(t,n,e){var i=e.length;if(null==t)return!i;for(t=St(t);i--;){var o=e[i],u=n[o],a=t[o];if(a===r&&!(o in t)||!u(a))return!1}return!0}function cr(t,n,e){if(\"function\"!=typeof t)throw new It(i);return Eo(function(){t.apply(r,e)},n)}function sr(t,n,e,r){var i=-1,o=kn,u=!0,a=t.length,c=[],s=n.length;if(!a)return c;e&&(n=Rn(n,Vn(e))),r?(o=Pn,u=!1):n.length>=200&&(o=Yn,u=!1,n=new Ke(n));t:for(;++i<a;){var f=t[i],l=null==e?f:e(f);if(f=r||0!==f?f:0,u&&l==l){for(var p=s;p--;)if(n[p]===l)continue t;c.push(f)}else o(n,l,r)||c.push(f)}return c}Le.templateSettings={escape:Z,evaluate:V,interpolate:J,variable:\"\",imports:{_:Le}},Le.prototype=qe.prototype,Le.prototype.constructor=Le,Be.prototype=Fe(qe.prototype),Be.prototype.constructor=Be,De.prototype=Fe(qe.prototype),De.prototype.constructor=De,$e.prototype.clear=function(){this.__data__=Ie?Ie(null):{},this.size=0},$e.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},$e.prototype.get=function(t){var n=this.__data__;if(Ie){var e=n[t];return e===o?r:e}return Mt.call(n,t)?n[t]:r},$e.prototype.has=function(t){var n=this.__data__;return Ie?n[t]!==r:Mt.call(n,t)},$e.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=Ie&&n===r?o:n,this},We.prototype.clear=function(){this.__data__=[],this.size=0},We.prototype.delete=function(t){var n=this.__data__,e=tr(n,t);return!(e<0||(e==n.length-1?n.pop():Gt.call(n,e,1),--this.size,0))},We.prototype.get=function(t){var n=this.__data__,e=tr(n,t);return e<0?r:n[e][1]},We.prototype.has=function(t){return tr(this.__data__,t)>-1},We.prototype.set=function(t,n){var e=this.__data__,r=tr(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},He.prototype.clear=function(){this.size=0,this.__data__={hash:new $e,map:new(xe||We),string:new $e}},He.prototype.delete=function(t){var n=uo(this,t).delete(t);return this.size-=n?1:0,n},He.prototype.get=function(t){return uo(this,t).get(t)},He.prototype.has=function(t){return uo(this,t).has(t)},He.prototype.set=function(t,n){var e=uo(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},Ke.prototype.add=Ke.prototype.push=function(t){return this.__data__.set(t,o),this},Ke.prototype.has=function(t){return this.__data__.has(t)},Ge.prototype.clear=function(){this.__data__=new We,this.size=0},Ge.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},Ge.prototype.get=function(t){return this.__data__.get(t)},Ge.prototype.has=function(t){return this.__data__.has(t)},Ge.prototype.set=function(t,n){var e=this.__data__;if(e instanceof We){var r=e.__data__;if(!xe||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new He(r)}return e.set(t,n),this.size=e.size,this};var fr=Pi(gr),lr=Pi(mr,!0);function pr(t,n){var e=!0;return fr(t,function(t,r,i){return e=!!n(t,r,i)}),e}function hr(t,n,e){for(var i=-1,o=t.length;++i<o;){var u=t[i],a=n(u);if(null!=a&&(c===r?a==a&&!aa(a):e(a,c)))var c=a,s=u}return s}function dr(t,n){var e=[];return fr(t,function(t,r,i){n(t,r,i)&&e.push(t)}),e}function vr(t,n,e,r,i){var o=-1,u=t.length;for(e||(e=vo),i||(i=[]);++o<u;){var a=t[o];n>0&&e(a)?n>1?vr(a,n-1,e,r,i):Cn(i,a):r||(i[i.length]=a)}return i}var _r=Ri(),yr=Ri(!0);function gr(t,n){return t&&_r(t,n,Pa)}function mr(t,n){return t&&yr(t,n,Pa)}function br(t,n){return En(n,function(n){return Ju(t[n])})}function wr(t,n){for(var e=0,i=(n=_i(n,t)).length;null!=t&&e<i;)t=t[Uo(n[e++])];return e&&e==i?t:r}function jr(t,n,e){var r=n(t);return $u(t)?r:Cn(r,e(t))}function xr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Qt&&Qt in St(t)?function(t){var n=Mt.call(t,Qt),e=t[Qt];try{t[Qt]=r;var i=!0}catch(t){}var o=Ut.call(t);return i&&(n?t[Qt]=e:delete t[Qt]),o}(t):function(t){return Ut.call(t)}(t)}function Sr(t,n){return t>n}function Or(t,n){return null!=t&&Mt.call(t,n)}function Ar(t,n){return null!=t&&n in St(t)}function Ir(t,n,e){for(var i=e?Pn:kn,o=t[0].length,u=t.length,a=u,c=rt(u),s=1/0,f=[];a--;){var l=t[a];a&&n&&(l=Rn(l,Vn(n))),s=ye(l.length,s),c[a]=!e&&(n||o>=120&&l.length>=120)?new Ke(a&&l):r}l=t[0];var p=-1,h=c[0];t:for(;++p<o&&f.length<s;){var d=l[p],v=n?n(d):d;if(d=e||0!==d?d:0,!(h?Yn(h,v):i(f,v,e))){for(a=u;--a;){var _=c[a];if(!(_?Yn(_,v):i(t[a],v,e)))continue t}h&&h.push(v),f.push(d)}}return f}function Er(t,n,e){var i=null==(t=Oo(t,n=_i(n,t)))?t:t[Uo(Vo(n))];return null==i?r:xn(i,t,e)}function kr(t){return ta(t)&&xr(t)==d}function Pr(t,n,e,i,o){return t===n||(null==t||null==n||!ta(t)&&!ta(n)?t!=t&&n!=n:function(t,n,e,i,o,u){var a=$u(t),c=$u(n),s=a?v:lo(t),f=c?v:lo(n),l=(s=s==d?x:s)==x,p=(f=f==d?x:f)==x,h=s==f;if(h&&Gu(t)){if(!Gu(n))return!1;a=!0,l=!1}if(h&&!l)return u||(u=new Ge),a||ca(t)?Xi(t,n,e,i,o,u):function(t,n,e,r,i,o,u){switch(e){case R:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case P:return!(t.byteLength!=n.byteLength||!o(new Dt(t),new Dt(n)));case _:case y:case j:return Fu(+t,+n);case g:return t.name==n.name&&t.message==n.message;case O:case I:return t==n+\"\";case w:var a=ie;case A:var c=1&r;if(a||(a=ae),t.size!=n.size&&!c)return!1;var s=u.get(t);if(s)return s==n;r|=2,u.set(t,n);var f=Xi(a(t),a(n),r,i,o,u);return u.delete(t),f;case E:if(Ue)return Ue.call(t)==Ue.call(n)}return!1}(t,n,s,e,i,o,u);if(!(1&e)){var m=l&&Mt.call(t,\"__wrapped__\"),b=p&&Mt.call(n,\"__wrapped__\");if(m||b){var S=m?t.value():t,k=b?n.value():n;return u||(u=new Ge),o(S,k,e,i,u)}}return!!h&&(u||(u=new Ge),function(t,n,e,i,o,u){var a=1&e,c=to(t),s=c.length;if(s!=to(n).length&&!a)return!1;for(var f=s;f--;){var l=c[f];if(!(a?l in n:Mt.call(n,l)))return!1}var p=u.get(t),h=u.get(n);if(p&&h)return p==n&&h==t;var d=!0;u.set(t,n),u.set(n,t);for(var v=a;++f<s;){var _=t[l=c[f]],y=n[l];if(i)var g=a?i(y,_,l,n,t,u):i(_,y,l,t,n,u);if(!(g===r?_===y||o(_,y,e,i,u):g)){d=!1;break}v||(v=\"constructor\"==l)}if(d&&!v){var m=t.constructor,b=n.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in n)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return u.delete(t),u.delete(n),d}(t,n,e,i,o,u))}(t,n,e,i,Pr,o))}function Rr(t,n,e,i){var o=e.length,u=o,a=!i;if(null==t)return!u;for(t=St(t);o--;){var c=e[o];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++o<u;){var s=(c=e[o])[0],f=t[s],l=c[1];if(a&&c[2]){if(f===r&&!(s in t))return!1}else{var p=new Ge;if(i)var h=i(f,l,s,t,n,p);if(!(h===r?Pr(l,f,3,i,p):h))return!1}}return!0}function Cr(t){return!(!Qu(t)||(n=t,Tt&&Tt in n))&&(Ju(t)?Ft:dt).test(No(t));var n}function Mr(t){return\"function\"==typeof t?t:null==t?ec:\"object\"==typeof t?$u(t)?Lr(t[0],t[1]):Nr(t):lc(t)}function zr(t){if(!wo(t))return ve(t);var n=[];for(var e in St(t))Mt.call(t,e)&&\"constructor\"!=e&&n.push(e);return n}function Tr(t,n){return t<n}function Ur(t,n){var e=-1,r=Hu(t)?rt(t.length):[];return fr(t,function(t,i,o){r[++e]=n(t,i,o)}),r}function Nr(t){var n=ao(t);return 1==n.length&&n[0][2]?xo(n[0][0],n[0][1]):function(e){return e===t||Rr(e,t,n)}}function Lr(t,n){return go(t)&&jo(n)?xo(Uo(t),n):function(e){var i=Oa(e,t);return i===r&&i===n?Aa(e,t):Pr(n,i,3)}}function Fr(t,n,e,i,o){t!==n&&_r(n,function(u,a){if(o||(o=new Ge),Qu(u))!function(t,n,e,i,o,u,a){var c=Ao(t,e),s=Ao(n,e),f=a.get(s);if(f)Xe(t,e,f);else{var l=u?u(c,s,e+\"\",t,n,a):r,p=l===r;if(p){var h=$u(s),d=!h&&Gu(s),v=!h&&!d&&ca(s);l=s,h||d||v?$u(c)?l=c:Ku(c)?l=Ai(c):d?(p=!1,l=bi(s,!0)):v?(p=!1,l=ji(s,!0)):l=[]:ra(s)||Du(s)?(l=c,Du(c)?l=_a(c):Qu(c)&&!Ju(c)||(l=ho(s))):p=!1}p&&(a.set(s,l),o(l,s,i,u,a),a.delete(s)),Xe(t,e,l)}}(t,n,a,e,Fr,i,o);else{var c=i?i(Ao(t,a),u,a+\"\",t,n,o):r;c===r&&(c=u),Xe(t,a,c)}},Ra)}function qr(t,n){var e=t.length;if(e)return _o(n+=n<0?e:0,e)?t[n]:r}function Br(t,n,e){n=n.length?Rn(n,function(t){return $u(t)?function(n){return wr(n,1===t.length?t[0]:t)}:t}):[ec];var r=-1;n=Rn(n,Vn(oo()));var i=Ur(t,function(t,e,i){var o=Rn(n,function(n){return n(t)});return{criteria:o,index:++r,value:t}});return function(t){var n=t.length;for(t.sort(function(t,n){return function(t,n,e){for(var r=-1,i=t.criteria,o=n.criteria,u=i.length,a=e.length;++r<u;){var c=xi(i[r],o[r]);if(c)return r>=a?c:c*(\"desc\"==e[r]?-1:1)}return t.index-n.index}(t,n,e)});n--;)t[n]=t[n].value;return t}(i)}function Dr(t,n,e){for(var r=-1,i=n.length,o={};++r<i;){var u=n[r],a=wr(t,u);e(a,u)&&Jr(o,_i(u,t),a)}return o}function $r(t,n,e,r){var i=r?qn:Fn,o=-1,u=n.length,a=t;for(t===n&&(n=Ai(n)),e&&(a=Rn(t,Vn(e)));++o<u;)for(var c=0,s=n[o],f=e?e(s):s;(c=i(a,f,c,r))>-1;)a!==t&&Gt.call(a,c,1),Gt.call(t,c,1);return t}function Wr(t,n){for(var e=t?n.length:0,r=e-1;e--;){var i=n[e];if(e==r||i!==o){var o=i;_o(i)?Gt.call(t,i,1):ci(t,i)}}return t}function Hr(t,n){return t+vn(be()*(n-t+1))}function Kr(t,n){var e=\"\";if(!t||n<1||n>f)return e;do{n%2&&(e+=t),(n=vn(n/2))&&(t+=t)}while(n);return e}function Gr(t,n){return ko(So(t,n,ec),t+\"\")}function Zr(t){return Ve(Fa(t))}function Vr(t,n){var e=Fa(t);return Co(e,or(n,0,e.length))}function Jr(t,n,e,i){if(!Qu(t))return t;for(var o=-1,u=(n=_i(n,t)).length,a=u-1,c=t;null!=c&&++o<u;){var s=Uo(n[o]),f=e;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(o!=a){var l=c[s];(f=i?i(l,s,c):r)===r&&(f=Qu(l)?l:_o(n[o+1])?[]:{})}Qe(c,s,f),c=c[s]}return t}var Yr=Ee?function(t,n){return Ee.set(t,n),t}:ec,Xr=un?function(t,n){return un(t,\"toString\",{configurable:!0,enumerable:!1,value:Qa(n),writable:!0})}:ec;function Qr(t){return Co(Fa(t))}function ti(t,n,e){var r=-1,i=t.length;n<0&&(n=-n>i?0:i+n),(e=e>i?i:e)<0&&(e+=i),i=n>e?0:e-n>>>0,n>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+n];return o}function ni(t,n){var e;return fr(t,function(t,r,i){return!(e=n(t,r,i))}),!!e}function ei(t,n,e){var r=0,i=null==t?r:t.length;if(\"number\"==typeof n&&n==n&&i<=2147483647){for(;r<i;){var o=r+i>>>1,u=t[o];null!==u&&!aa(u)&&(e?u<=n:u<n)?r=o+1:i=o}return i}return ri(t,n,ec,e)}function ri(t,n,e,i){var o=0,u=null==t?0:t.length;if(0===u)return 0;for(var a=(n=e(n))!=n,c=null===n,s=aa(n),f=n===r;o<u;){var l=vn((o+u)/2),p=e(t[l]),h=p!==r,d=null===p,v=p==p,_=aa(p);if(a)var y=i||v;else y=f?v&&(i||h):c?v&&h&&(i||!d):s?v&&h&&!d&&(i||!_):!d&&!_&&(i?p<=n:p<n);y?o=l+1:u=l}return ye(u,4294967294)}function ii(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var u=t[e],a=n?n(u):u;if(!e||!Fu(a,c)){var c=a;o[i++]=0===u?0:u}}return o}function oi(t){return\"number\"==typeof t?t:aa(t)?l:+t}function ui(t){if(\"string\"==typeof t)return t;if($u(t))return Rn(t,ui)+\"\";if(aa(t))return Ne?Ne.call(t):\"\";var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function ai(t,n,e){var r=-1,i=kn,o=t.length,u=!0,a=[],c=a;if(e)u=!1,i=Pn;else if(o>=200){var s=n?null:Ki(t);if(s)return ae(s);u=!1,i=Yn,c=new Ke}else c=n?[]:a;t:for(;++r<o;){var f=t[r],l=n?n(f):f;if(f=e||0!==f?f:0,u&&l==l){for(var p=c.length;p--;)if(c[p]===l)continue t;n&&c.push(l),a.push(f)}else i(c,l,e)||(c!==a&&c.push(l),a.push(f))}return a}function ci(t,n){var e=-1,r=(n=_i(n,t)).length;if(!r)return!0;for(;++e<r;){var i=Uo(n[e]);if(\"__proto__\"===i&&!Mt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&e<r-1)return!1}var o=Oo(t,n);return null==o||delete o[Uo(Vo(n))]}function si(t,n,e,r){return Jr(t,n,e(wr(t,n)),r)}function fi(t,n,e,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&n(t[o],o,t););return e?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function li(t,n){var e=t;return e instanceof De&&(e=e.value()),Mn(n,function(t,n){return n.func.apply(n.thisArg,Cn([t],n.args))},e)}function pi(t,n,e){var r=t.length;if(r<2)return r?ai(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var u=t[i],a=-1;++a<r;)a!=i&&(o[i]=sr(o[i]||u,t[a],n,e));return ai(vr(o,1),n,e)}function hi(t,n,e){for(var i=-1,o=t.length,u=n.length,a={};++i<o;){var c=i<u?n[i]:r;e(a,t[i],c)}return a}function di(t){return Ku(t)?t:[]}function vi(t){return\"function\"==typeof t?t:ec}function _i(t,n){return $u(t)?t:go(t,n)?[t]:To(ya(t))}var yi=Gr;function gi(t,n,e){var i=t.length;return e=e===r?i:e,!n&&e>=i?t:ti(t,n,e)}var mi=sn||function(t){return ln.clearTimeout(t)};function bi(t,n){if(n)return t.slice();var e=t.length,r=$t?$t(e):new t.constructor(e);return t.copy(r),r}function wi(t){var n=new t.constructor(t.byteLength);return new Dt(n).set(new Dt(t)),n}function ji(t,n){var e=n?wi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.length)}function xi(t,n){if(t!==n){var e=t!==r,i=null===t,o=t==t,u=aa(t),a=n!==r,c=null===n,s=n==n,f=aa(n);if(!c&&!f&&!u&&t>n||u&&a&&s&&!c&&!f||i&&a&&s||!e&&s||!o)return 1;if(!i&&!u&&!f&&t<n||f&&e&&o&&!i&&!u||c&&e&&o||!a&&o||!s)return-1}return 0}function Si(t,n,e,r){for(var i=-1,o=t.length,u=e.length,a=-1,c=n.length,s=_e(o-u,0),f=rt(c+s),l=!r;++a<c;)f[a]=n[a];for(;++i<u;)(l||i<o)&&(f[e[i]]=t[i]);for(;s--;)f[a++]=t[i++];return f}function Oi(t,n,e,r){for(var i=-1,o=t.length,u=-1,a=e.length,c=-1,s=n.length,f=_e(o-a,0),l=rt(f+s),p=!r;++i<f;)l[i]=t[i];for(var h=i;++c<s;)l[h+c]=n[c];for(;++u<a;)(p||i<o)&&(l[h+e[u]]=t[i++]);return l}function Ai(t,n){var e=-1,r=t.length;for(n||(n=rt(r));++e<r;)n[e]=t[e];return n}function Ii(t,n,e,i){var o=!e;e||(e={});for(var u=-1,a=n.length;++u<a;){var c=n[u],s=i?i(e[c],t[c],c,e,t):r;s===r&&(s=t[c]),o?rr(e,c,s):Qe(e,c,s)}return e}function Ei(t,n){return function(e,r){var i=$u(e)?Sn:nr,o=n?n():{};return i(e,t,oo(r,2),o)}}function ki(t){return Gr(function(n,e){var i=-1,o=e.length,u=o>1?e[o-1]:r,a=o>2?e[2]:r;for(u=t.length>3&&\"function\"==typeof u?(o--,u):r,a&&yo(e[0],e[1],a)&&(u=o<3?r:u,o=1),n=St(n);++i<o;){var c=e[i];c&&t(n,c,i,u)}return n})}function Pi(t,n){return function(e,r){if(null==e)return e;if(!Hu(e))return t(e,r);for(var i=e.length,o=n?i:-1,u=St(e);(n?o--:++o<i)&&!1!==r(u[o],o,u););return e}}function Ri(t){return function(n,e,r){for(var i=-1,o=St(n),u=r(n),a=u.length;a--;){var c=u[t?a:++i];if(!1===e(o[c],c,o))break}return n}}function Ci(t){return function(n){var e=re(n=ya(n))?fe(n):r,i=e?e[0]:n.charAt(0),o=e?gi(e,1).join(\"\"):n.slice(1);return i[t]()+o}}function Mi(t){return function(n){return Mn(Ja(Da(n).replace(Vt,\"\")),t,\"\")}}function zi(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var e=Fe(t.prototype),r=t.apply(e,n);return Qu(r)?r:e}}function Ti(t){return function(n,e,i){var o=St(n);if(!Hu(n)){var u=oo(e,3);n=Pa(n),e=function(t){return u(o[t],t,o)}}var a=t(n,e,i);return a>-1?o[u?n[a]:a]:r}}function Ui(t){return Qi(function(n){var e=n.length,o=e,u=Be.prototype.thru;for(t&&n.reverse();o--;){var a=n[o];if(\"function\"!=typeof a)throw new It(i);if(u&&!c&&\"wrapper\"==ro(a))var c=new Be([],!0)}for(o=c?o:e;++o<e;){var s=ro(a=n[o]),f=\"wrapper\"==s?eo(a):r;c=f&&mo(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?c[ro(f[0])].apply(c,f[3]):1==a.length&&mo(a)?c[s]():c.thru(a)}return function(){var t=arguments,r=t[0];if(c&&1==t.length&&$u(r))return c.plant(r).value();for(var i=0,o=e?n[i].apply(this,t):r;++i<e;)o=n[i].call(this,o);return o}})}function Ni(t,n,e,i,o,u,a,s,f,l){var p=n&c,h=1&n,d=2&n,v=24&n,_=512&n,y=d?r:zi(t);return function c(){for(var g=arguments.length,m=rt(g),b=g;b--;)m[b]=arguments[b];if(v)var w=io(c),j=function(t,n){for(var e=t.length,r=0;e--;)t[e]===n&&++r;return r}(m,w);if(i&&(m=Si(m,i,o,v)),u&&(m=Oi(m,u,a,v)),g-=j,v&&g<l){var x=ue(m,w);return Wi(t,n,Ni,c.placeholder,e,m,x,s,f,l-g)}var S=h?e:this,O=d?S[t]:t;return g=m.length,s?m=function(t,n){for(var e=t.length,i=ye(n.length,e),o=Ai(t);i--;){var u=n[i];t[i]=_o(u,e)?o[u]:r}return t}(m,s):_&&g>1&&m.reverse(),p&&f<g&&(m.length=f),this&&this!==ln&&this instanceof c&&(O=y||zi(O)),O.apply(S,m)}}function Li(t,n){return function(e,r){return function(t,n,e,r){return gr(t,function(t,i,o){n(r,e(t),i,o)}),r}(e,t,n(r),{})}}function Fi(t,n){return function(e,i){var o;if(e===r&&i===r)return n;if(e!==r&&(o=e),i!==r){if(o===r)return i;\"string\"==typeof e||\"string\"==typeof i?(e=ui(e),i=ui(i)):(e=oi(e),i=oi(i)),o=t(e,i)}return o}}function qi(t){return Qi(function(n){return n=Rn(n,Vn(oo())),Gr(function(e){var r=this;return t(n,function(t){return xn(t,r,e)})})})}function Bi(t,n){var e=(n=n===r?\" \":ui(n)).length;if(e<2)return e?Kr(n,t):n;var i=Kr(n,hn(t/se(n)));return re(n)?gi(fe(i),0,t).join(\"\"):i.slice(0,t)}function Di(t){return function(n,e,i){return i&&\"number\"!=typeof i&&yo(n,e,i)&&(e=i=r),n=pa(n),e===r?(e=n,n=0):e=pa(e),function(t,n,e,r){for(var i=-1,o=_e(hn((n-t)/(e||1)),0),u=rt(o);o--;)u[r?o:++i]=t,t+=e;return u}(n,e,i=i===r?n<e?1:-1:pa(i),t)}}function $i(t){return function(n,e){return\"string\"==typeof n&&\"string\"==typeof e||(n=va(n),e=va(e)),t(n,e)}}function Wi(t,n,e,i,o,u,c,s,f,l){var p=8&n;n|=p?a:64,4&(n&=~(p?64:a))||(n&=-4);var h=[t,n,o,p?u:r,p?c:r,p?r:u,p?r:c,s,f,l],d=e.apply(r,h);return mo(t)&&Io(d,h),d.placeholder=i,Po(d,t,n)}function Hi(t){var n=xt[t];return function(t,e){if(t=va(t),(e=null==e?0:ye(ha(e),292))&&Wn(t)){var r=(ya(t)+\"e\").split(\"e\");return+((r=(ya(n(r[0]+\"e\"+(+r[1]+e)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-e))}return n(t)}}var Ki=Oe&&1/ae(new Oe([,-0]))[1]==s?function(t){return new Oe(t)}:ac;function Gi(t){return function(n){var e=lo(n);return e==w?ie(n):e==A?ce(n):function(t,n){return Rn(n,function(n){return[n,t[n]]})}(n,t(n))}}function Zi(t,n,e,o,s,f,l,p){var h=2&n;if(!h&&\"function\"!=typeof t)throw new It(i);var d=o?o.length:0;if(d||(n&=-97,o=s=r),l=l===r?l:_e(ha(l),0),p=p===r?p:ha(p),d-=s?s.length:0,64&n){var v=o,_=s;o=s=r}var y=h?r:eo(t),g=[t,n,e,o,s,v,_,f,l,p];if(y&&function(t,n){var e=t[1],r=n[1],i=e|r,o=i<131,a=r==c&&8==e||r==c&&256==e&&t[7].length<=n[8]||384==r&&n[7].length<=n[8]&&8==e;if(!o&&!a)return t;1&r&&(t[2]=n[2],i|=1&e?0:4);var s=n[3];if(s){var f=t[3];t[3]=f?Si(f,s,n[4]):s,t[4]=f?ue(t[3],u):n[4]}(s=n[5])&&(f=t[5],t[5]=f?Oi(f,s,n[6]):s,t[6]=f?ue(t[5],u):n[6]),(s=n[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?n[8]:ye(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i}(g,y),t=g[0],n=g[1],e=g[2],o=g[3],s=g[4],!(p=g[9]=g[9]===r?h?0:t.length:_e(g[9]-d,0))&&24&n&&(n&=-25),n&&1!=n)m=8==n||16==n?function(t,n,e){var i=zi(t);return function o(){for(var u=arguments.length,a=rt(u),c=u,s=io(o);c--;)a[c]=arguments[c];var f=u<3&&a[0]!==s&&a[u-1]!==s?[]:ue(a,s);return(u-=f.length)<e?Wi(t,n,Ni,o.placeholder,r,a,f,r,r,e-u):xn(this&&this!==ln&&this instanceof o?i:t,this,a)}}(t,n,p):n!=a&&33!=n||s.length?Ni.apply(r,g):function(t,n,e,r){var i=1&n,o=zi(t);return function n(){for(var u=-1,a=arguments.length,c=-1,s=r.length,f=rt(s+a),l=this&&this!==ln&&this instanceof n?o:t;++c<s;)f[c]=r[c];for(;a--;)f[c++]=arguments[++u];return xn(l,i?e:this,f)}}(t,n,e,o);else var m=function(t,n,e){var r=1&n,i=zi(t);return function n(){return(this&&this!==ln&&this instanceof n?i:t).apply(r?e:this,arguments)}}(t,n,e);return Po((y?Yr:Io)(m,g),t,n)}function Vi(t,n,e,i){return t===r||Fu(t,Pt[e])&&!Mt.call(i,e)?n:t}function Ji(t,n,e,i,o,u){return Qu(t)&&Qu(n)&&(u.set(n,t),Fr(t,n,r,Ji,u),u.delete(n)),t}function Yi(t){return ra(t)?r:t}function Xi(t,n,e,i,o,u){var a=1&e,c=t.length,s=n.length;if(c!=s&&!(a&&s>c))return!1;var f=u.get(t),l=u.get(n);if(f&&l)return f==n&&l==t;var p=-1,h=!0,d=2&e?new Ke:r;for(u.set(t,n),u.set(n,t);++p<c;){var v=t[p],_=n[p];if(i)var y=a?i(_,v,p,n,t,u):i(v,_,p,t,n,u);if(y!==r){if(y)continue;h=!1;break}if(d){if(!Tn(n,function(t,n){if(!Yn(d,n)&&(v===t||o(v,t,e,i,u)))return d.push(n)})){h=!1;break}}else if(v!==_&&!o(v,_,e,i,u)){h=!1;break}}return u.delete(t),u.delete(n),h}function Qi(t){return ko(So(t,r,Wo),t+\"\")}function to(t){return jr(t,Pa,so)}function no(t){return jr(t,Ra,fo)}var eo=Ee?function(t){return Ee.get(t)}:ac;function ro(t){for(var n=t.name+\"\",e=ke[n],r=Mt.call(ke,n)?e.length:0;r--;){var i=e[r],o=i.func;if(null==o||o==t)return i.name}return n}function io(t){return(Mt.call(Le,\"placeholder\")?Le:t).placeholder}function oo(){var t=Le.iteratee||rc;return t=t===rc?Mr:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,n){var e,r,i=t.__data__;return(\"string\"==(r=typeof(e=n))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==e:null===e)?i[\"string\"==typeof n?\"string\":\"hash\"]:i.map}function ao(t){for(var n=Pa(t),e=n.length;e--;){var r=n[e],i=t[r];n[e]=[r,i,jo(i)]}return n}function co(t,n){var e=function(t,n){return null==t?r:t[n]}(t,n);return Cr(e)?e:r}var so=_n?function(t){return null==t?[]:(t=St(t),En(_n(t),function(n){return Kt.call(t,n)}))}:dc,fo=_n?function(t){for(var n=[];t;)Cn(n,so(t)),t=Wt(t);return n}:dc,lo=xr;function po(t,n,e){for(var r=-1,i=(n=_i(n,t)).length,o=!1;++r<i;){var u=Uo(n[r]);if(!(o=null!=t&&e(t,u)))break;t=t[u]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Xu(i)&&_o(u,i)&&($u(t)||Du(t))}function ho(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Fe(Wt(t))}function vo(t){return $u(t)||Du(t)||!!(Zt&&t&&t[Zt])}function _o(t,n){var e=typeof t;return!!(n=n??f)&&(\"number\"==e||\"symbol\"!=e&&_t.test(t))&&t>-1&&t%1==0&&t<n}function yo(t,n,e){if(!Qu(e))return!1;var r=typeof n;return!!(\"number\"==r?Hu(e)&&_o(n,e.length):\"string\"==r&&n in e)&&Fu(e[n],t)}function go(t,n){if($u(t))return!1;var e=typeof t;return!(\"number\"!=e&&\"symbol\"!=e&&\"boolean\"!=e&&null!=t&&!aa(t))||X.test(t)||!Y.test(t)||null!=n&&t in St(n)}function mo(t){var n=ro(t),e=Le[n];if(\"function\"!=typeof e||!(n in De.prototype))return!1;if(t===e)return!0;var r=eo(e);return!!r&&t===r[0]}(je&&lo(new je(new ArrayBuffer(1)))!=R||xe&&lo(new xe)!=w||Se&&lo(Se.resolve())!=S||Oe&&lo(new Oe)!=A||Ae&&lo(new Ae)!=k)&&(lo=function(t){var n=xr(t),e=n==x?t.constructor:r,i=e?No(e):\"\";if(i)switch(i){case Pe:return R;case Re:return w;case Ce:return S;case Me:return A;case ze:return k}return n});var bo=Rt?Ju:vc;function wo(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||Pt)}function jo(t){return t==t&&!Qu(t)}function xo(t,n){return function(e){return null!=e&&e[t]===n&&(n!==r||t in St(e))}}function So(t,n,e){return n=_e(n===r?t.length-1:n,0),function(){for(var r=arguments,i=-1,o=_e(r.length-n,0),u=rt(o);++i<o;)u[i]=r[n+i];i=-1;for(var a=rt(n+1);++i<n;)a[i]=r[i];return a[n]=e(u),xn(t,this,a)}}function Oo(t,n){return n.length<2?t:wr(t,ti(n,0,-1))}function Ao(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var Io=Ro(Yr),Eo=pn||function(t,n){return ln.setTimeout(t,n)},ko=Ro(Xr);function Po(t,n,e){var r=n+\"\";return ko(t,function(t,n){var e=n.length;if(!e)return t;var r=e-1;return n[r]=(e>1?\"& \":\"\")+n[r],n=n.join(e>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+n+\"] */\\n\")}(r,function(t,n){return On(h,function(e){var r=\"_.\"+e[0];n&e[1]&&!kn(t,r)&&t.push(r)}),t.sort()}(function(t){var n=t.match(ot);return n?n[1].split(ut):[]}(r),e)))}function Ro(t){var n=0,e=0;return function(){var i=ge(),o=16-(i-e);if(e=i,o>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(r,arguments)}}function Co(t,n){var e=-1,i=t.length,o=i-1;for(n=n===r?i:n;++e<n;){var u=Hr(e,o),a=t[u];t[u]=t[e],t[e]=a}return t.length=n,t}var Mo,zo,To=(Mo=Mu(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(\"\"),t.replace(Q,function(t,e,r,i){n.push(r?i.replace(st,\"$1\"):e||t)}),n},function(t){return 500===zo.size&&zo.clear(),t}),zo=Mo.cache,Mo);function Uo(t){if(\"string\"==typeof t||aa(t))return t;var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function No(t){if(null!=t){try{return Ct.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Lo(t){if(t instanceof De)return t.clone();var n=new Be(t.__wrapped__,t.__chain__);return n.__actions__=Ai(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}var Fo=Gr(function(t,n){return Ku(t)?sr(t,vr(n,1,Ku,!0)):[]}),qo=Gr(function(t,n){var e=Vo(n);return Ku(e)&&(e=r),Ku(t)?sr(t,vr(n,1,Ku,!0),oo(e,2)):[]}),Bo=Gr(function(t,n){var e=Vo(n);return Ku(e)&&(e=r),Ku(t)?sr(t,vr(n,1,Ku,!0),r,e):[]});function Do(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:ha(e);return i<0&&(i=_e(r+i,0)),Ln(t,oo(n,3),i)}function $o(t,n,e){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return e!==r&&(o=ha(e),o=e<0?_e(i+o,0):ye(o,i-1)),Ln(t,oo(n,3),o,!0)}function Wo(t){return null!=t&&t.length?vr(t,1):[]}function Ho(t){return t&&t.length?t[0]:r}var Ko=Gr(function(t){var n=Rn(t,di);return n.length&&n[0]===t[0]?Ir(n):[]}),Go=Gr(function(t){var n=Vo(t),e=Rn(t,di);return n===Vo(e)?n=r:e.pop(),e.length&&e[0]===t[0]?Ir(e,oo(n,2)):[]}),Zo=Gr(function(t){var n=Vo(t),e=Rn(t,di);return(n=\"function\"==typeof n?n:r)&&e.pop(),e.length&&e[0]===t[0]?Ir(e,r,n):[]});function Vo(t){var n=null==t?0:t.length;return n?t[n-1]:r}var Jo=Gr(Yo);function Yo(t,n){return t&&t.length&&n&&n.length?$r(t,n):t}var Xo=Qi(function(t,n){var e=null==t?0:t.length,r=ir(t,n);return Wr(t,Rn(n,function(t){return _o(t,e)?+t:t}).sort(xi)),r});function Qo(t){return null==t?t:we.call(t)}var tu=Gr(function(t){return ai(vr(t,1,Ku,!0))}),nu=Gr(function(t){var n=Vo(t);return Ku(n)&&(n=r),ai(vr(t,1,Ku,!0),oo(n,2))}),eu=Gr(function(t){var n=Vo(t);return n=\"function\"==typeof n?n:r,ai(vr(t,1,Ku,!0),r,n)});function ru(t){if(!t||!t.length)return[];var n=0;return t=En(t,function(t){if(Ku(t))return n=_e(t.length,n),!0}),Gn(n,function(n){return Rn(t,$n(n))})}function iu(t,n){if(!t||!t.length)return[];var e=ru(t);return null==n?e:Rn(e,function(t){return xn(n,r,t)})}var ou=Gr(function(t,n){return Ku(t)?sr(t,n):[]}),uu=Gr(function(t){return pi(En(t,Ku))}),au=Gr(function(t){var n=Vo(t);return Ku(n)&&(n=r),pi(En(t,Ku),oo(n,2))}),cu=Gr(function(t){var n=Vo(t);return n=\"function\"==typeof n?n:r,pi(En(t,Ku),r,n)}),su=Gr(ru),fu=Gr(function(t){var n=t.length,e=n>1?t[n-1]:r;return e=\"function\"==typeof e?(t.pop(),e):r,iu(t,e)});function lu(t){var n=Le(t);return n.__chain__=!0,n}function pu(t,n){return n(t)}var hu=Qi(function(t){var n=t.length,e=n?t[0]:0,i=this.__wrapped__,o=function(n){return ir(n,t)};return!(n>1||this.__actions__.length)&&i instanceof De&&_o(e)?((i=i.slice(e,+e+(n?1:0))).__actions__.push({func:pu,args:[o],thisArg:r}),new Be(i,this.__chain__).thru(function(t){return n&&!t.length&&t.push(r),t})):this.thru(o)}),du=Ei(function(t,n,e){Mt.call(t,e)?++t[e]:rr(t,e,1)}),vu=Ti(Do),_u=Ti($o);function yu(t,n){return($u(t)?On:fr)(t,oo(n,3))}function gu(t,n){return($u(t)?An:lr)(t,oo(n,3))}var mu=Ei(function(t,n,e){Mt.call(t,e)?t[e].push(n):rr(t,e,[n])}),bu=Gr(function(t,n,e){var r=-1,i=\"function\"==typeof n,o=Hu(t)?rt(t.length):[];return fr(t,function(t){o[++r]=i?xn(n,t,e):Er(t,n,e)}),o}),wu=Ei(function(t,n,e){rr(t,e,n)});function ju(t,n){return($u(t)?Rn:Ur)(t,oo(n,3))}var xu=Ei(function(t,n,e){t[e?0:1].push(n)},function(){return[[],[]]}),Su=Gr(function(t,n){if(null==t)return[];var e=n.length;return e>1&&yo(t,n[0],n[1])?n=[]:e>2&&yo(n[0],n[1],n[2])&&(n=[n[0]]),Br(t,vr(n,1),[])}),Ou=fn||function(){return ln.Date.now()};function Au(t,n,e){return n=e?r:n,n=t&&null==n?t.length:n,Zi(t,c,r,r,r,r,n)}function Iu(t,n){var e;if(\"function\"!=typeof n)throw new It(i);return t=ha(t),function(){return--t>0&&(e=n.apply(this,arguments)),t<=1&&(n=r),e}}var Eu=Gr(function(t,n,e){var r=1;if(e.length){var i=ue(e,io(Eu));r|=a}return Zi(t,r,n,e,i)}),ku=Gr(function(t,n,e){var r=3;if(e.length){var i=ue(e,io(ku));r|=a}return Zi(n,r,t,e,i)});function Pu(t,n,e){var o,u,a,c,s,f,l=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new It(i);function v(n){var e=o,i=u;return o=u=r,l=n,c=t.apply(i,e)}function _(t){var e=t-f;return f===r||e>=n||e<0||h&&t-l>=a}function y(){var t=Ou();if(_(t))return g(t);s=Eo(y,function(t){var e=n-(t-f);return h?ye(e,a-(t-l)):e}(t))}function g(t){return s=r,d&&o?v(t):(o=u=r,c)}function m(){var t=Ou(),e=_(t);if(o=arguments,u=this,f=t,e){if(s===r)return function(t){return l=t,s=Eo(y,n),p?v(t):c}(f);if(h)return mi(s),s=Eo(y,n),v(f)}return s===r&&(s=Eo(y,n)),c}return n=va(n)||0,Qu(e)&&(p=!!e.leading,a=(h=\"maxWait\"in e)?_e(va(e.maxWait)||0,n):a,d=\"trailing\"in e?!!e.trailing:d),m.cancel=function(){s!==r&&mi(s),l=0,o=f=u=s=r},m.flush=function(){return s===r?c:g(Ou())},m}var Ru=Gr(function(t,n){return cr(t,1,n)}),Cu=Gr(function(t,n,e){return cr(t,va(n)||0,e)});function Mu(t,n){if(\"function\"!=typeof t||null!=n&&\"function\"!=typeof n)throw new It(i);var e=function(){var r=arguments,i=n?n.apply(this,r):r[0],o=e.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return e.cache=o.set(i,u)||o,u};return e.cache=new(Mu.Cache||He),e}function zu(t){if(\"function\"!=typeof t)throw new It(i);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}Mu.Cache=He;var Tu=yi(function(t,n){var e=(n=1==n.length&&$u(n[0])?Rn(n[0],Vn(oo())):Rn(vr(n,1),Vn(oo()))).length;return Gr(function(r){for(var i=-1,o=ye(r.length,e);++i<o;)r[i]=n[i].call(this,r[i]);return xn(t,this,r)})}),Uu=Gr(function(t,n){var e=ue(n,io(Uu));return Zi(t,a,r,n,e)}),Nu=Gr(function(t,n){var e=ue(n,io(Nu));return Zi(t,64,r,n,e)}),Lu=Qi(function(t,n){return Zi(t,256,r,r,r,n)});function Fu(t,n){return t===n||t!=t&&n!=n}var qu=$i(Sr),Bu=$i(function(t,n){return t>=n}),Du=kr(function(){return arguments}())?kr:function(t){return ta(t)&&Mt.call(t,\"callee\")&&!Kt.call(t,\"callee\")},$u=rt.isArray,Wu=yn?Vn(yn):function(t){return ta(t)&&xr(t)==P};function Hu(t){return null!=t&&Xu(t.length)&&!Ju(t)}function Ku(t){return ta(t)&&Hu(t)}var Gu=Un||vc,Zu=gn?Vn(gn):function(t){return ta(t)&&xr(t)==y};function Vu(t){if(!ta(t))return!1;var n=xr(t);return n==g||\"[object DOMException]\"==n||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ra(t)}function Ju(t){if(!Qu(t))return!1;var n=xr(t);return n==m||n==b||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function Yu(t){return\"number\"==typeof t&&t==ha(t)}function Xu(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=f}function Qu(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function ta(t){return null!=t&&\"object\"==typeof t}var na=mn?Vn(mn):function(t){return ta(t)&&lo(t)==w};function ea(t){return\"number\"==typeof t||ta(t)&&xr(t)==j}function ra(t){if(!ta(t)||xr(t)!=x)return!1;var n=Wt(t);if(null===n)return!0;var e=Mt.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof e&&e instanceof e&&Ct.call(e)==Nt}var ia=bn?Vn(bn):function(t){return ta(t)&&xr(t)==O},oa=wn?Vn(wn):function(t){return ta(t)&&lo(t)==A};function ua(t){return\"string\"==typeof t||!$u(t)&&ta(t)&&xr(t)==I}function aa(t){return\"symbol\"==typeof t||ta(t)&&xr(t)==E}var ca=jn?Vn(jn):function(t){return ta(t)&&Xu(t.length)&&!!rn[xr(t)]},sa=$i(Tr),fa=$i(function(t,n){return t<=n});function la(t){if(!t)return[];if(Hu(t))return ua(t)?fe(t):Ai(t);if(Yt&&t[Yt])return function(t){for(var n,e=[];!(n=t.next()).done;)e.push(n.value);return e}(t[Yt]());var n=lo(t);return(n==w?ie:n==A?ae:Fa)(t)}function pa(t){return t?(t=va(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ha(t){var n=pa(t),e=n%1;return n==n?e?n-e:n:0}function da(t){return t?or(ha(t),0,p):0}function va(t){if(\"number\"==typeof t)return t;if(aa(t))return l;if(Qu(t)){var n=\"function\"==typeof t.valueOf?t.valueOf():t;t=Qu(n)?n+\"\":n}if(\"string\"!=typeof t)return 0===t?t:+t;t=Zn(t);var e=ht.test(t);return e||vt.test(t)?cn(t.slice(2),e?2:8):pt.test(t)?l:+t}function _a(t){return Ii(t,Ra(t))}function ya(t){return null==t?\"\":ui(t)}var ga=ki(function(t,n){if(wo(n)||Hu(n))Ii(n,Pa(n),t);else for(var e in n)Mt.call(n,e)&&Qe(t,e,n[e])}),ma=ki(function(t,n){Ii(n,Ra(n),t)}),ba=ki(function(t,n,e,r){Ii(n,Ra(n),t,r)}),wa=ki(function(t,n,e,r){Ii(n,Pa(n),t,r)}),ja=Qi(ir),xa=Gr(function(t,n){t=St(t);var e=-1,i=n.length,o=i>2?n[2]:r;for(o&&yo(n[0],n[1],o)&&(i=1);++e<i;)for(var u=n[e],a=Ra(u),c=-1,s=a.length;++c<s;){var f=a[c],l=t[f];(l===r||Fu(l,Pt[f])&&!Mt.call(t,f))&&(t[f]=u[f])}return t}),Sa=Gr(function(t){return t.push(r,Ji),xn(Ma,r,t)});function Oa(t,n,e){var i=null==t?r:wr(t,n);return i===r?e:i}function Aa(t,n){return null!=t&&po(t,n,Ar)}var Ia=Li(function(t,n,e){null!=n&&\"function\"!=typeof n.toString&&(n=Ut.call(n)),t[n]=e},Qa(ec)),Ea=Li(function(t,n,e){null!=n&&\"function\"!=typeof n.toString&&(n=Ut.call(n)),Mt.call(t,n)?t[n].push(e):t[n]=[e]},oo),ka=Gr(Er);function Pa(t){return Hu(t)?Ze(t):zr(t)}function Ra(t){return Hu(t)?Ze(t,!0):function(t){if(!Qu(t))return function(t){var n=[];if(null!=t)for(var e in St(t))n.push(e);return n}(t);var n=wo(t),e=[];for(var r in t)(\"constructor\"!=r||!n&&Mt.call(t,r))&&e.push(r);return e}(t)}var Ca=ki(function(t,n,e){Fr(t,n,e)}),Ma=ki(function(t,n,e,r){Fr(t,n,e,r)}),za=Qi(function(t,n){var e={};if(null==t)return e;var r=!1;n=Rn(n,function(n){return n=_i(n,t),r||(r=n.length>1),n}),Ii(t,no(t),e),r&&(e=ur(e,7,Yi));for(var i=n.length;i--;)ci(e,n[i]);return e}),Ta=Qi(function(t,n){return null==t?{}:function(t,n){return Dr(t,n,function(n,e){return Aa(t,e)})}(t,n)});function Ua(t,n){if(null==t)return{};var e=Rn(no(t),function(t){return[t]});return n=oo(n),Dr(t,e,function(t,e){return n(t,e[0])})}var Na=Gi(Pa),La=Gi(Ra);function Fa(t){return null==t?[]:Jn(t,Pa(t))}var qa=Mi(function(t,n,e){return n=n.toLowerCase(),t+(e?Ba(n):n)});function Ba(t){return Va(ya(t).toLowerCase())}function Da(t){return(t=ya(t))&&t.replace(yt,te).replace(Jt,\"\")}var $a=Mi(function(t,n,e){return t+(e?\"-\":\"\")+n.toLowerCase()}),Wa=Mi(function(t,n,e){return t+(e?\" \":\"\")+n.toLowerCase()}),Ha=Ci(\"toLowerCase\"),Ka=Mi(function(t,n,e){return t+(e?\"_\":\"\")+n.toLowerCase()}),Ga=Mi(function(t,n,e){return t+(e?\" \":\"\")+Va(n)}),Za=Mi(function(t,n,e){return t+(e?\" \":\"\")+n.toUpperCase()}),Va=Ci(\"toUpperCase\");function Ja(t,n,e){return t=ya(t),(n=e?r:n)===r?function(t){return tn.test(t)}(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(n)||[]}var Ya=Gr(function(t,n){try{return xn(t,r,n)}catch(t){return Vu(t)?t:new wt(t)}}),Xa=Qi(function(t,n){return On(n,function(n){n=Uo(n),rr(t,n,Eu(t[n],t))}),t});function Qa(t){return function(){return t}}var tc=Ui(),nc=Ui(!0);function ec(t){return t}function rc(t){return Mr(\"function\"==typeof t?t:ur(t,1))}var ic=Gr(function(t,n){return function(e){return Er(e,t,n)}}),oc=Gr(function(t,n){return function(e){return Er(t,e,n)}});function uc(t,n,e){var r=Pa(n),i=br(n,r);null!=e||Qu(n)&&(i.length||!r.length)||(e=n,n=t,t=this,i=br(n,Pa(n)));var o=!(Qu(e)&&\"chain\"in e&&!e.chain),u=Ju(t);return On(i,function(e){var r=n[e];t[e]=r,u&&(t.prototype[e]=function(){var n=this.__chain__;if(o||n){var e=t(this.__wrapped__);return(e.__actions__=Ai(this.__actions__)).push({func:r,args:arguments,thisArg:t}),e.__chain__=n,e}return r.apply(t,Cn([this.value()],arguments))})}),t}function ac(){}var cc=qi(Rn),sc=qi(In),fc=qi(Tn);function lc(t){return go(t)?$n(Uo(t)):function(t){return function(n){return wr(n,t)}}(t)}var pc=Di(),hc=Di(!0);function dc(){return[]}function vc(){return!1}var _c,yc=Fi(function(t,n){return t+n},0),gc=Hi(\"ceil\"),mc=Fi(function(t,n){return t/n},1),bc=Hi(\"floor\"),wc=Fi(function(t,n){return t*n},1),jc=Hi(\"round\"),xc=Fi(function(t,n){return t-n},0);return Le.after=function(t,n){if(\"function\"!=typeof n)throw new It(i);return t=ha(t),function(){if(--t<1)return n.apply(this,arguments)}},Le.ary=Au,Le.assign=ga,Le.assignIn=ma,Le.assignInWith=ba,Le.assignWith=wa,Le.at=ja,Le.before=Iu,Le.bind=Eu,Le.bindAll=Xa,Le.bindKey=ku,Le.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return $u(t)?t:[t]},Le.chain=lu,Le.chunk=function(t,n,e){n=(e?yo(t,n,e):n===r)?1:_e(ha(n),0);var i=null==t?0:t.length;if(!i||n<1)return[];for(var o=0,u=0,a=rt(hn(i/n));o<i;)a[u++]=ti(t,o,o+=n);return a},Le.compact=function(t){for(var n=-1,e=null==t?0:t.length,r=0,i=[];++n<e;){var o=t[n];o&&(i[r++]=o)}return i},Le.concat=function(){var t=arguments.length;if(!t)return[];for(var n=rt(t-1),e=arguments[0],r=t;r--;)n[r-1]=arguments[r];return Cn($u(e)?Ai(e):[e],vr(n,1))},Le.cond=function(t){var n=null==t?0:t.length,e=oo();return t=n?Rn(t,function(t){if(\"function\"!=typeof t[1])throw new It(i);return[e(t[0]),t[1]]}):[],Gr(function(e){for(var r=-1;++r<n;){var i=t[r];if(xn(i[0],this,e))return xn(i[1],this,e)}})},Le.conforms=function(t){return function(t){var n=Pa(t);return function(e){return ar(e,t,n)}}(ur(t,1))},Le.constant=Qa,Le.countBy=du,Le.create=function(t,n){var e=Fe(t);return null==n?e:er(e,n)},Le.curry=function t(n,e,i){var o=Zi(n,8,r,r,r,r,r,e=i?r:e);return o.placeholder=t.placeholder,o},Le.curryRight=function t(n,e,i){var o=Zi(n,16,r,r,r,r,r,e=i?r:e);return o.placeholder=t.placeholder,o},Le.debounce=Pu,Le.defaults=xa,Le.defaultsDeep=Sa,Le.defer=Ru,Le.delay=Cu,Le.difference=Fo,Le.differenceBy=qo,Le.differenceWith=Bo,Le.drop=function(t,n,e){var i=null==t?0:t.length;return i?ti(t,(n=e||n===r?1:ha(n))<0?0:n,i):[]},Le.dropRight=function(t,n,e){var i=null==t?0:t.length;return i?ti(t,0,(n=i-(n=e||n===r?1:ha(n)))<0?0:n):[]},Le.dropRightWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!0,!0):[]},Le.dropWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!0):[]},Le.fill=function(t,n,e,i){var o=null==t?0:t.length;return o?(e&&\"number\"!=typeof e&&yo(t,n,e)&&(e=0,i=o),function(t,n,e,i){var o=t.length;for((e=ha(e))<0&&(e=-e>o?0:o+e),(i=i===r||i>o?o:ha(i))<0&&(i+=o),i=e>i?0:da(i);e<i;)t[e++]=n;return t}(t,n,e,i)):[]},Le.filter=function(t,n){return($u(t)?En:dr)(t,oo(n,3))},Le.flatMap=function(t,n){return vr(ju(t,n),1)},Le.flatMapDeep=function(t,n){return vr(ju(t,n),s)},Le.flatMapDepth=function(t,n,e){return e=e===r?1:ha(e),vr(ju(t,n),e)},Le.flatten=Wo,Le.flattenDeep=function(t){return null!=t&&t.length?vr(t,s):[]},Le.flattenDepth=function(t,n){return null!=t&&t.length?vr(t,n=n===r?1:ha(n)):[]},Le.flip=function(t){return Zi(t,512)},Le.flow=tc,Le.flowRight=nc,Le.fromPairs=function(t){for(var n=-1,e=null==t?0:t.length,r={};++n<e;){var i=t[n];rr(r,i[0],i[1])}return r},Le.functions=function(t){return null==t?[]:br(t,Pa(t))},Le.functionsIn=function(t){return null==t?[]:br(t,Ra(t))},Le.groupBy=mu,Le.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Le.intersection=Ko,Le.intersectionBy=Go,Le.intersectionWith=Zo,Le.invert=Ia,Le.invertBy=Ea,Le.invokeMap=bu,Le.iteratee=rc,Le.keyBy=wu,Le.keys=Pa,Le.keysIn=Ra,Le.map=ju,Le.mapKeys=function(t,n){var e={};return n=oo(n,3),gr(t,function(t,r,i){rr(e,n(t,r,i),t)}),e},Le.mapValues=function(t,n){var e={};return n=oo(n,3),gr(t,function(t,r,i){rr(e,r,n(t,r,i))}),e},Le.matches=function(t){return Nr(ur(t,1))},Le.matchesProperty=function(t,n){return Lr(t,ur(n,1))},Le.memoize=Mu,Le.merge=Ca,Le.mergeWith=Ma,Le.method=ic,Le.methodOf=oc,Le.mixin=uc,Le.negate=zu,Le.nthArg=function(t){return t=ha(t),Gr(function(n){return qr(n,t)})},Le.omit=za,Le.omitBy=function(t,n){return Ua(t,zu(oo(n)))},Le.once=function(t){return Iu(2,t)},Le.orderBy=function(t,n,e,i){return null==t?[]:($u(n)||(n=null==n?[]:[n]),$u(e=i?r:e)||(e=null==e?[]:[e]),Br(t,n,e))},Le.over=cc,Le.overArgs=Tu,Le.overEvery=sc,Le.overSome=fc,Le.partial=Uu,Le.partialRight=Nu,Le.partition=xu,Le.pick=Ta,Le.pickBy=Ua,Le.property=lc,Le.propertyOf=function(t){return function(n){return null==t?r:wr(t,n)}},Le.pull=Jo,Le.pullAll=Yo,Le.pullAllBy=function(t,n,e){return t&&t.length&&n&&n.length?$r(t,n,oo(e,2)):t},Le.pullAllWith=function(t,n,e){return t&&t.length&&n&&n.length?$r(t,n,r,e):t},Le.pullAt=Xo,Le.range=pc,Le.rangeRight=hc,Le.rearg=Lu,Le.reject=function(t,n){return($u(t)?En:dr)(t,zu(oo(n,3)))},Le.remove=function(t,n){var e=[];if(!t||!t.length)return e;var r=-1,i=[],o=t.length;for(n=oo(n,3);++r<o;){var u=t[r];n(u,r,t)&&(e.push(u),i.push(r))}return Wr(t,i),e},Le.rest=function(t,n){if(\"function\"!=typeof t)throw new It(i);return Gr(t,n=n===r?n:ha(n))},Le.reverse=Qo,Le.sampleSize=function(t,n,e){return n=(e?yo(t,n,e):n===r)?1:ha(n),($u(t)?Je:Vr)(t,n)},Le.set=function(t,n,e){return null==t?t:Jr(t,n,e)},Le.setWith=function(t,n,e,i){return i=\"function\"==typeof i?i:r,null==t?t:Jr(t,n,e,i)},Le.shuffle=function(t){return($u(t)?Ye:Qr)(t)},Le.slice=function(t,n,e){var i=null==t?0:t.length;return i?(e&&\"number\"!=typeof e&&yo(t,n,e)?(n=0,e=i):(n=null==n?0:ha(n),e=e===r?i:ha(e)),ti(t,n,e)):[]},Le.sortBy=Su,Le.sortedUniq=function(t){return t&&t.length?ii(t):[]},Le.sortedUniqBy=function(t,n){return t&&t.length?ii(t,oo(n,2)):[]},Le.split=function(t,n,e){return e&&\"number\"!=typeof e&&yo(t,n,e)&&(n=e=r),(e=e===r?p:e>>>0)?(t=ya(t))&&(\"string\"==typeof n||null!=n&&!ia(n))&&!(n=ui(n))&&re(t)?gi(fe(t),0,e):t.split(n,e):[]},Le.spread=function(t,n){if(\"function\"!=typeof t)throw new It(i);return n=null==n?0:_e(ha(n),0),Gr(function(e){var r=e[n],i=gi(e,0,n);return r&&Cn(i,r),xn(t,this,i)})},Le.tail=function(t){var n=null==t?0:t.length;return n?ti(t,1,n):[]},Le.take=function(t,n,e){return t&&t.length?ti(t,0,(n=e||n===r?1:ha(n))<0?0:n):[]},Le.takeRight=function(t,n,e){var i=null==t?0:t.length;return i?ti(t,(n=i-(n=e||n===r?1:ha(n)))<0?0:n,i):[]},Le.takeRightWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!1,!0):[]},Le.takeWhile=function(t,n){return t&&t.length?fi(t,oo(n,3)):[]},Le.tap=function(t,n){return n(t),t},Le.throttle=function(t,n,e){var r=!0,o=!0;if(\"function\"!=typeof t)throw new It(i);return Qu(e)&&(r=\"leading\"in e?!!e.leading:r,o=\"trailing\"in e?!!e.trailing:o),Pu(t,n,{leading:r,maxWait:n,trailing:o})},Le.thru=pu,Le.toArray=la,Le.toPairs=Na,Le.toPairsIn=La,Le.toPath=function(t){return $u(t)?Rn(t,Uo):aa(t)?[t]:Ai(To(ya(t)))},Le.toPlainObject=_a,Le.transform=function(t,n,e){var r=$u(t),i=r||Gu(t)||ca(t);if(n=oo(n,4),null==e){var o=t&&t.constructor;e=i?r?new o:[]:Qu(t)&&Ju(o)?Fe(Wt(t)):{}}return(i?On:gr)(t,function(t,r,i){return n(e,t,r,i)}),e},Le.unary=function(t){return Au(t,1)},Le.union=tu,Le.unionBy=nu,Le.unionWith=eu,Le.uniq=function(t){return t&&t.length?ai(t):[]},Le.uniqBy=function(t,n){return t&&t.length?ai(t,oo(n,2)):[]},Le.uniqWith=function(t,n){return n=\"function\"==typeof n?n:r,t&&t.length?ai(t,r,n):[]},Le.unset=function(t,n){return null==t||ci(t,n)},Le.unzip=ru,Le.unzipWith=iu,Le.update=function(t,n,e){return null==t?t:si(t,n,vi(e))},Le.updateWith=function(t,n,e,i){return i=\"function\"==typeof i?i:r,null==t?t:si(t,n,vi(e),i)},Le.values=Fa,Le.valuesIn=function(t){return null==t?[]:Jn(t,Ra(t))},Le.without=ou,Le.words=Ja,Le.wrap=function(t,n){return Uu(vi(n),t)},Le.xor=uu,Le.xorBy=au,Le.xorWith=cu,Le.zip=su,Le.zipObject=function(t,n){return hi(t||[],n||[],Qe)},Le.zipObjectDeep=function(t,n){return hi(t||[],n||[],Jr)},Le.zipWith=fu,Le.entries=Na,Le.entriesIn=La,Le.extend=ma,Le.extendWith=ba,uc(Le,Le),Le.add=yc,Le.attempt=Ya,Le.camelCase=qa,Le.capitalize=Ba,Le.ceil=gc,Le.clamp=function(t,n,e){return e===r&&(e=n,n=r),e!==r&&(e=(e=va(e))==e?e:0),n!==r&&(n=(n=va(n))==n?n:0),or(va(t),n,e)},Le.clone=function(t){return ur(t,4)},Le.cloneDeep=function(t){return ur(t,5)},Le.cloneDeepWith=function(t,n){return ur(t,5,n=\"function\"==typeof n?n:r)},Le.cloneWith=function(t,n){return ur(t,4,n=\"function\"==typeof n?n:r)},Le.conformsTo=function(t,n){return null==n||ar(t,n,Pa(n))},Le.deburr=Da,Le.defaultTo=function(t,n){return null==t||t!=t?n:t},Le.divide=mc,Le.endsWith=function(t,n,e){t=ya(t),n=ui(n);var i=t.length,o=e=e===r?i:or(ha(e),0,i);return(e-=n.length)>=0&&t.slice(e,o)==n},Le.eq=Fu,Le.escape=function(t){return(t=ya(t))&&G.test(t)?t.replace(H,ne):t},Le.escapeRegExp=function(t){return(t=ya(t))&&nt.test(t)?t.replace(tt,\"\\\\$&\"):t},Le.every=function(t,n,e){var i=$u(t)?In:pr;return e&&yo(t,n,e)&&(n=r),i(t,oo(n,3))},Le.find=vu,Le.findIndex=Do,Le.findKey=function(t,n){return Nn(t,oo(n,3),gr)},Le.findLast=_u,Le.findLastIndex=$o,Le.findLastKey=function(t,n){return Nn(t,oo(n,3),mr)},Le.floor=bc,Le.forEach=yu,Le.forEachRight=gu,Le.forIn=function(t,n){return null==t?t:_r(t,oo(n,3),Ra)},Le.forInRight=function(t,n){return null==t?t:yr(t,oo(n,3),Ra)},Le.forOwn=function(t,n){return t&&gr(t,oo(n,3))},Le.forOwnRight=function(t,n){return t&&mr(t,oo(n,3))},Le.get=Oa,Le.gt=qu,Le.gte=Bu,Le.has=function(t,n){return null!=t&&po(t,n,Or)},Le.hasIn=Aa,Le.head=Ho,Le.identity=ec,Le.includes=function(t,n,e,r){t=Hu(t)?t:Fa(t),e=e&&!r?ha(e):0;var i=t.length;return e<0&&(e=_e(i+e,0)),ua(t)?e<=i&&t.indexOf(n,e)>-1:!!i&&Fn(t,n,e)>-1},Le.indexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:ha(e);return i<0&&(i=_e(r+i,0)),Fn(t,n,i)},Le.inRange=function(t,n,e){return n=pa(n),e===r?(e=n,n=0):e=pa(e),function(t,n,e){return t>=ye(n,e)&&t<_e(n,e)}(t=va(t),n,e)},Le.invoke=ka,Le.isArguments=Du,Le.isArray=$u,Le.isArrayBuffer=Wu,Le.isArrayLike=Hu,Le.isArrayLikeObject=Ku,Le.isBoolean=function(t){return!0===t||!1===t||ta(t)&&xr(t)==_},Le.isBuffer=Gu,Le.isDate=Zu,Le.isElement=function(t){return ta(t)&&1===t.nodeType&&!ra(t)},Le.isEmpty=function(t){if(null==t)return!0;if(Hu(t)&&($u(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Gu(t)||ca(t)||Du(t)))return!t.length;var n=lo(t);if(n==w||n==A)return!t.size;if(wo(t))return!zr(t).length;for(var e in t)if(Mt.call(t,e))return!1;return!0},Le.isEqual=function(t,n){return Pr(t,n)},Le.isEqualWith=function(t,n,e){var i=(e=\"function\"==typeof e?e:r)?e(t,n):r;return i===r?Pr(t,n,r,e):!!i},Le.isError=Vu,Le.isFinite=function(t){return\"number\"==typeof t&&Wn(t)},Le.isFunction=Ju,Le.isInteger=Yu,Le.isLength=Xu,Le.isMap=na,Le.isMatch=function(t,n){return t===n||Rr(t,n,ao(n))},Le.isMatchWith=function(t,n,e){return e=\"function\"==typeof e?e:r,Rr(t,n,ao(n),e)},Le.isNaN=function(t){return ea(t)&&t!=+t},Le.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Cr(t)},Le.isNil=function(t){return null==t},Le.isNull=function(t){return null===t},Le.isNumber=ea,Le.isObject=Qu,Le.isObjectLike=ta,Le.isPlainObject=ra,Le.isRegExp=ia,Le.isSafeInteger=function(t){return Yu(t)&&t>=-9007199254740991&&t<=f},Le.isSet=oa,Le.isString=ua,Le.isSymbol=aa,Le.isTypedArray=ca,Le.isUndefined=function(t){return t===r},Le.isWeakMap=function(t){return ta(t)&&lo(t)==k},Le.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==xr(t)},Le.join=function(t,n){return null==t?\"\":de.call(t,n)},Le.kebabCase=$a,Le.last=Vo,Le.lastIndexOf=function(t,n,e){var i=null==t?0:t.length;if(!i)return-1;var o=i;return e!==r&&(o=(o=ha(e))<0?_e(i+o,0):ye(o,i-1)),n==n?function(t,n,e){for(var r=e+1;r--;)if(t[r]===n)return r;return r}(t,n,o):Ln(t,Bn,o,!0)},Le.lowerCase=Wa,Le.lowerFirst=Ha,Le.lt=sa,Le.lte=fa,Le.max=function(t){return t&&t.length?hr(t,ec,Sr):r},Le.maxBy=function(t,n){return t&&t.length?hr(t,oo(n,2),Sr):r},Le.mean=function(t){return Dn(t,ec)},Le.meanBy=function(t,n){return Dn(t,oo(n,2))},Le.min=function(t){return t&&t.length?hr(t,ec,Tr):r},Le.minBy=function(t,n){return t&&t.length?hr(t,oo(n,2),Tr):r},Le.stubArray=dc,Le.stubFalse=vc,Le.stubObject=function(){return{}},Le.stubString=function(){return\"\"},Le.stubTrue=function(){return!0},Le.multiply=wc,Le.nth=function(t,n){return t&&t.length?qr(t,ha(n)):r},Le.noConflict=function(){return ln._===this&&(ln._=Lt),this},Le.noop=ac,Le.now=Ou,Le.pad=function(t,n,e){t=ya(t);var r=(n=ha(n))?se(t):0;if(!n||r>=n)return t;var i=(n-r)/2;return Bi(vn(i),e)+t+Bi(hn(i),e)},Le.padEnd=function(t,n,e){t=ya(t);var r=(n=ha(n))?se(t):0;return n&&r<n?t+Bi(n-r,e):t},Le.padStart=function(t,n,e){t=ya(t);var r=(n=ha(n))?se(t):0;return n&&r<n?Bi(n-r,e)+t:t},Le.parseInt=function(t,n,e){return e||null==n?n=0:n&&(n=+n),me(ya(t).replace(et,\"\"),n||0)},Le.random=function(t,n,e){if(e&&\"boolean\"!=typeof e&&yo(t,n,e)&&(n=e=r),e===r&&(\"boolean\"==typeof n?(e=n,n=r):\"boolean\"==typeof t&&(e=t,t=r)),t===r&&n===r?(t=0,n=1):(t=pa(t),n===r?(n=t,t=0):n=pa(n)),t>n){var i=t;t=n,n=i}if(e||t%1||n%1){var o=be();return ye(t+o*(n-t+an(\"1e-\"+((o+\"\").length-1))),n)}return Hr(t,n)},Le.reduce=function(t,n,e){var r=$u(t)?Mn:Hn,i=arguments.length<3;return r(t,oo(n,4),e,i,fr)},Le.reduceRight=function(t,n,e){var r=$u(t)?zn:Hn,i=arguments.length<3;return r(t,oo(n,4),e,i,lr)},Le.repeat=function(t,n,e){return n=(e?yo(t,n,e):n===r)?1:ha(n),Kr(ya(t),n)},Le.replace=function(){var t=arguments,n=ya(t[0]);return t.length<3?n:n.replace(t[1],t[2])},Le.result=function(t,n,e){var i=-1,o=(n=_i(n,t)).length;for(o||(o=1,t=r);++i<o;){var u=null==t?r:t[Uo(n[i])];u===r&&(i=o,u=e),t=Ju(u)?u.call(t):u}return t},Le.round=jc,Le.runInContext=t,Le.sample=function(t){return($u(t)?Ve:Zr)(t)},Le.size=function(t){if(null==t)return 0;if(Hu(t))return ua(t)?se(t):t.length;var n=lo(t);return n==w||n==A?t.size:zr(t).length},Le.snakeCase=Ka,Le.some=function(t,n,e){var i=$u(t)?Tn:ni;return e&&yo(t,n,e)&&(n=r),i(t,oo(n,3))},Le.sortedIndex=function(t,n){return ei(t,n)},Le.sortedIndexBy=function(t,n,e){return ri(t,n,oo(e,2))},Le.sortedIndexOf=function(t,n){var e=null==t?0:t.length;if(e){var r=ei(t,n);if(r<e&&Fu(t[r],n))return r}return-1},Le.sortedLastIndex=function(t,n){return ei(t,n,!0)},Le.sortedLastIndexBy=function(t,n,e){return ri(t,n,oo(e,2),!0)},Le.sortedLastIndexOf=function(t,n){if(null!=t&&t.length){var e=ei(t,n,!0)-1;if(Fu(t[e],n))return e}return-1},Le.startCase=Ga,Le.startsWith=function(t,n,e){return t=ya(t),e=null==e?0:or(ha(e),0,t.length),n=ui(n),t.slice(e,e+n.length)==n},Le.subtract=xc,Le.sum=function(t){return t&&t.length?Kn(t,ec):0},Le.sumBy=function(t,n){return t&&t.length?Kn(t,oo(n,2)):0},Le.template=function(t,n,e){var i=Le.templateSettings;e&&yo(t,n,e)&&(n=r),t=ya(t),n=wa({},n,i,Vi);var o=wa({},n.imports,i.imports,Vi),u=Pa(o),a=Jn(o,u);On(u,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,f=0,l=n.interpolate||gt,p=\"__p += '\",h=Ot((n.escape||gt).source+\"|\"+l.source+\"|\"+(l===J?ft:gt).source+\"|\"+(n.evaluate||gt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Mt.call(n,\"sourceURL\")?(n.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++en+\"]\")+\"\\n\";t.replace(h,function(n,e,r,i,o,u){return r||(r=i),p+=t.slice(f,u).replace(mt,ee),e&&(c=!0,p+=\"' +\\n__e(\"+e+\") +\\n'\"),o&&(s=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),f=u+n.length,n}),p+=\"';\\n\";var v=Mt.call(n,\"variable\")&&n.variable;if(v){if(ct.test(v))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(B,\"\"):p).replace(D,\"$1\").replace($,\"$1;\"),p=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var _=Ya(function(){return jt(u,d+\"return \"+p).apply(r,a)});if(_.source=p,Vu(_))throw _;return _},Le.times=function(t,n){if((t=ha(t))<1||t>f)return[];var e=p,r=ye(t,p);n=oo(n),t-=p;for(var i=Gn(r,n);++e<t;)n(e);return i},Le.toFinite=pa,Le.toInteger=ha,Le.toLength=da,Le.toLower=function(t){return ya(t).toLowerCase()},Le.toNumber=va,Le.toSafeInteger=function(t){return t?or(ha(t),-9007199254740991,f):0===t?t:0},Le.toString=ya,Le.toUpper=function(t){return ya(t).toUpperCase()},Le.trim=function(t,n,e){if((t=ya(t))&&(e||n===r))return Zn(t);if(!t||!(n=ui(n)))return t;var i=fe(t),o=fe(n);return gi(i,Xn(i,o),Qn(i,o)+1).join(\"\")},Le.trimEnd=function(t,n,e){if((t=ya(t))&&(e||n===r))return t.slice(0,le(t)+1);if(!t||!(n=ui(n)))return t;var i=fe(t);return gi(i,0,Qn(i,fe(n))+1).join(\"\")},Le.trimStart=function(t,n,e){if((t=ya(t))&&(e||n===r))return t.replace(et,\"\");if(!t||!(n=ui(n)))return t;var i=fe(t);return gi(i,Xn(i,fe(n))).join(\"\")},Le.truncate=function(t,n){var e=30,i=\"...\";if(Qu(n)){var o=\"separator\"in n?n.separator:o;e=\"length\"in n?ha(n.length):e,i=\"omission\"in n?ui(n.omission):i}var u=(t=ya(t)).length;if(re(t)){var a=fe(t);u=a.length}if(e>=u)return t;var c=e-se(i);if(c<1)return i;var s=a?gi(a,0,c).join(\"\"):t.slice(0,c);if(o===r)return s+i;if(a&&(c+=s.length-c),ia(o)){if(t.slice(c).search(o)){var f,l=s;for(o.global||(o=Ot(o.source,ya(lt.exec(o))+\"g\")),o.lastIndex=0;f=o.exec(l);)var p=f.index;s=s.slice(0,p===r?c:p)}}else if(t.indexOf(ui(o),c)!=c){var h=s.lastIndexOf(o);h>-1&&(s=s.slice(0,h))}return s+i},Le.unescape=function(t){return(t=ya(t))&&K.test(t)?t.replace(W,pe):t},Le.uniqueId=function(t){var n=++zt;return ya(t)+n},Le.upperCase=Za,Le.upperFirst=Va,Le.each=yu,Le.eachRight=gu,Le.first=Ho,uc(Le,(_c={},gr(Le,function(t,n){Mt.call(Le.prototype,n)||(_c[n]=t)}),_c),{chain:!1}),Le.VERSION=\"4.18.1\",On([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Le[t].placeholder=Le}),On([\"drop\",\"take\"],function(t,n){De.prototype[t]=function(e){e=e===r?1:_e(ha(e),0);var i=this.__filtered__&&!n?new De(this):this.clone();return i.__filtered__?i.__takeCount__=ye(e,i.__takeCount__):i.__views__.push({size:ye(e,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},De.prototype[t+\"Right\"]=function(n){return this.reverse()[t](n).reverse()}}),On([\"filter\",\"map\",\"takeWhile\"],function(t,n){var e=n+1,r=1==e||3==e;De.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:oo(t,3),type:e}),n.__filtered__=n.__filtered__||r,n}}),On([\"head\",\"last\"],function(t,n){var e=\"take\"+(n?\"Right\":\"\");De.prototype[t]=function(){return this[e](1).value()[0]}}),On([\"initial\",\"tail\"],function(t,n){var e=\"drop\"+(n?\"\":\"Right\");De.prototype[t]=function(){return this.__filtered__?new De(this):this[e](1)}}),De.prototype.compact=function(){return this.filter(ec)},De.prototype.find=function(t){return this.filter(t).head()},De.prototype.findLast=function(t){return this.reverse().find(t)},De.prototype.invokeMap=Gr(function(t,n){return\"function\"==typeof t?new De(this):this.map(function(e){return Er(e,t,n)})}),De.prototype.reject=function(t){return this.filter(zu(oo(t)))},De.prototype.slice=function(t,n){t=ha(t);var e=this;return e.__filtered__&&(t>0||n<0)?new De(e):(t<0?e=e.takeRight(-t):t&&(e=e.drop(t)),n!==r&&(e=(n=ha(n))<0?e.dropRight(-n):e.take(n-t)),e)},De.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},De.prototype.toArray=function(){return this.take(p)},gr(De.prototype,function(t,n){var e=/^(?:filter|find|map|reject)|While$/.test(n),i=/^(?:head|last)$/.test(n),o=Le[i?\"take\"+(\"last\"==n?\"Right\":\"\"):n],u=i||/^find/.test(n);o&&(Le.prototype[n]=function(){var n=this.__wrapped__,a=i?[1]:arguments,c=n instanceof De,s=a[0],f=c||$u(n),l=function(t){var n=o.apply(Le,Cn([t],a));return i&&p?n[0]:n};f&&e&&\"function\"==typeof s&&1!=s.length&&(c=f=!1);var p=this.__chain__,h=!!this.__actions__.length,d=u&&!p,v=c&&!h;if(!u&&f){n=v?n:new De(this);var _=t.apply(n,a);return _.__actions__.push({func:pu,args:[l],thisArg:r}),new Be(_,p)}return d&&v?t.apply(this,a):(_=this.thru(l),d?i?_.value()[0]:_.value():_)})}),On([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var n=Et[t],e=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Le.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return n.apply($u(i)?i:[],t)}return this[e](function(e){return n.apply($u(e)?e:[],t)})}}),gr(De.prototype,function(t,n){var e=Le[n];if(e){var r=e.name+\"\";Mt.call(ke,r)||(ke[r]=[]),ke[r].push({name:n,func:e})}}),ke[Ni(r,2).name]=[{name:\"wrapper\",func:r}],De.prototype.clone=function(){var t=new De(this.__wrapped__);return t.__actions__=Ai(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ai(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ai(this.__views__),t},De.prototype.reverse=function(){if(this.__filtered__){var t=new De(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},De.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,e=$u(t),r=n<0,i=e?t.length:0,o=function(t,n,e){for(var r=-1,i=e.length;++r<i;){var o=e[r],u=o.size;switch(o.type){case\"drop\":t+=u;break;case\"dropRight\":n-=u;break;case\"take\":n=ye(n,t+u);break;case\"takeRight\":t=_e(t,n-u)}}return{start:t,end:n}}(0,i,this.__views__),u=o.start,a=o.end,c=a-u,s=r?a:u-1,f=this.__iteratees__,l=f.length,p=0,h=ye(c,this.__takeCount__);if(!e||!r&&i==c&&h==c)return li(t,this.__actions__);var d=[];t:for(;c--&&p<h;){for(var v=-1,_=t[s+=n];++v<l;){var y=f[v],g=y.iteratee,m=y.type,b=g(_);if(2==m)_=b;else if(!b){if(1==m)continue t;break t}}d[p++]=_}return d},Le.prototype.at=hu,Le.prototype.chain=function(){return lu(this)},Le.prototype.commit=function(){return new Be(this.value(),this.__chain__)},Le.prototype.next=function(){this.__values__===r&&(this.__values__=la(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Le.prototype.plant=function(t){for(var n,e=this;e instanceof qe;){var i=Lo(e);i.__index__=0,i.__values__=r,n?o.__wrapped__=i:n=i;var o=i;e=e.__wrapped__}return o.__wrapped__=t,n},Le.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof De){var n=t;return this.__actions__.length&&(n=new De(this)),(n=n.reverse()).__actions__.push({func:pu,args:[Qo],thisArg:r}),new Be(n,this.__chain__)}return this.thru(Qo)},Le.prototype.toJSON=Le.prototype.valueOf=Le.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},Le.prototype.first=Le.prototype.head,Yt&&(Le.prototype[Yt]=function(){return this}),Le}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(ln._=he,define(function(){return he})):hn?((hn.exports=he)._=he,pn._=he):ln._=he}.call(this)},1657(t){\"use strict\";t.exports=(t,n)=>{if(\"string\"!=typeof t||\"string\"!=typeof n)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===n)return[t];const e=t.indexOf(n);return-1===e?[t]:[t.slice(0,e),t.slice(e+n.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,n,e){\"use strict\";e.d(n,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var i in n=arguments[e])Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},n={};function e(r){var i=n[r];if(void 0!==i)return i.exports;var o=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";e.r(r),e.d(r,{createPaypalExpressButtonStrategy:()=>I,createPaypalExpressPaymentStrategy:()=>w});var t=e(315);function n(t,n){return Object.assign(t,{resolveIds:n})}var i,o,u,a,c,s,f,l,p=e(9440);class h extends Error{constructor(t){var n;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",n=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(i||(i={}));class d extends h{constructor(t){super(function(t){switch(t){case i.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case i.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case i.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case i.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case i.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case i.MissingCheckoutConfig:case i.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case i.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case i.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case i.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case i.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case i.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case i.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(o||(o={}));class v extends h{constructor(t){super(function(t){switch(t){case o.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case o.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case o.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case o.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class _ extends h{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(t){t.HORIZONTAL=\"horizontal\",t.VERTICAL=\"vertical\"}(u||(u={})),function(t){t.SMALL=\"small\",t.MEDIUM=\"medium\",t.LARGE=\"large\",t.RESPONSIVE=\"responsive\"}(a||(a={})),function(t){t.GOLD=\"gold\",t.BLUE=\"blue\",t.SIlVER=\"silver\",t.BLACK=\"black\"}(c||(c={})),function(t){t.CHECKOUT=\"checkout\",t.PAY=\"pay\",t.BUYNOW=\"buynow\",t.PAYPAL=\"paypal\",t.CREDIT=\"credit\"}(s||(s={})),function(t){t.PILL=\"pill\",t.RECT=\"rect\"}(f||(f={})),function(t){t.ACKNOWLEDGE=\"ACKNOWLEDGE\",t.FINALIZE=\"FINALIZE\",t.INITIALIZE=\"INITIALIZE\"}(l||(l={}));var y=function(t,n,e,r){return new(e||(e=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e(function(t){t(n)})).then(u,a)}c((r=r.apply(t,n||[])).next())})};class g{constructor(t,n){this.paymentIntegrationService=t,this.scriptLoader=n,this.useRedirectFlow=!1,this.window=window}initialize(t){return y(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState();this.paymentMethod=n.getPaymentMethodOrThrow(t.methodId),this.useRedirectFlow=!0===(t.paypalexpress&&t.paypalexpress.useRedirectFlow);const e=this.paymentMethod.config.merchantId;if(!this.isInContextEnabled()||!e)throw new d(i.MissingPaymentMethod);const r=yield this.scriptLoader.loadPaypalSDK();this.paypalSdk=r,this.paypalSdk.checkout.setup(e,{button:\"paypal-button\",environment:this.paymentMethod.config.testMode?\"sandbox\":\"production\"})})}deinitialize(){return this.isInContextEnabled()&&this.paypalSdk&&(this.paypalSdk.checkout.closeFlow(),this.paypalSdk=void 0),Promise.resolve()}execute(t,n){return y(this,void 0,void 0,function*(){let e,r;const i=this.paypalSdk;if(!this.isAcknowledgedOrFinalized()){if(!this.isInContextEnabled()||this.useRedirectFlow)return e=yield this.paymentIntegrationService.submitOrder(t,n),r=e.getPaymentRedirectUrl(),r&&this.window.top&&(this.window.top.location.href=r),new Promise(p.noop);if(!i)throw new v(o.PaymentNotInitialized);i.checkout.initXO();try{e=yield this.paymentIntegrationService.submitOrder(t,n)}catch(t){return i.checkout.closeFlow(),Promise.reject(t)}return r=e.getPaymentRedirectUrl(),r&&i.checkout.startFlow(r),new Promise(p.noop)}yield this.paymentIntegrationService.submitOrder(t,n)})}finalize(t){return y(this,void 0,void 0,function*(){return this.paymentIntegrationService.getState().getOrder()&&this.isAcknowledgedOrFinalized()?(yield this.paymentIntegrationService.finalizeOrder(t),Promise.resolve()):Promise.reject(new _)})}isAcknowledgedOrFinalized(){const t=this.paymentIntegrationService.getState();return t.getPaymentStatus()===l.ACKNOWLEDGE||t.getPaymentStatus()===l.FINALIZE}isInContextEnabled(){return!(!this.paymentMethod||!this.paymentMethod.config.merchantId)}}class m extends h{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class b{constructor(t){this.scriptLoader=t,this.window=window}loadPaypalSDK(t=\"\"){return n=this,e=void 0,i=function*(){const n=Object.assign({async:!0,attributes:{\"data-merchant-id\":t}},t&&{attributes:{\"data-merchant-id\":t}});if(yield this.scriptLoader.loadScript(\"//www.paypalobjects.com/api/checkout.min.js\",n),!this.window.paypal)throw new m;return this.window.paypal},new((r=void 0)||(r=Promise))(function(t,o){function u(t){try{c(i.next(t))}catch(t){o(t)}}function a(t){try{c(i.throw(t))}catch(t){o(t)}}function c(n){var e;n.done?t(n.value):(e=n.value,e instanceof r?e:new r(function(t){t(e)})).then(u,a)}c((i=i.apply(n,e||[])).next())});var n,e,r,i}}const w=n(n=>new g(n,new b((0,t.vQ)())),[{id:\"paypalexpress\",type:\"PAYMENT_TYPE_HOSTED\"},{id:\"paypalexpresscredit\",type:\"PAYMENT_TYPE_HOSTED\"}]);var j=e(8686);class x extends h{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}const S={\"X-Checkout-SDK-Version\":\"1.916.1\"};var O=function(t,n,e,r){return new(e||(e=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e(function(t){t(n)})).then(u,a)}c((r=r.apply(t,n||[])).next())})};class A{constructor(t,n,e){this.paymentIntegrationService=t,this.paypalExpressScriptLoader=n,this.formPoster=e}initialize(t){return O(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t.methodId);if(!t.paypal)throw new x;if(!n.config.merchantId)throw new d(i.MissingPaymentMethod);const e=yield this.paypalExpressScriptLoader.loadPaypalSDK(n.config.merchantId);this.renderButton(t,e)})}deinitialize(){return Promise.resolve()}renderButton(t,n){const{containerId:e,methodId:r,paypal:o}=t,{allowCredit:u,clientId:a,onPaymentError:c,shouldProcessPayment:s,style:f}=o,l=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t.methodId);if(!l.config.merchantId)throw new d(i.MissingPaymentMethod);const p=l.config.merchantId,h=l.config.testMode?\"sandbox\":\"production\",v={[h]:a},_=n.FUNDING.CREDIT||\"credit\",y=u?[_]:[],g=u?[]:[_];return n.Button.render({env:h,client:v,commit:s,funding:{allowed:y,disallowed:g},style:this.getStyle(f),payment:(t,n)=>this.setupPayment(p,n,c),onAuthorize:(t,n)=>this.tokenizePayment(t,r,n,s)},e)}getStyle(t){const{color:n,fundingicons:e,label:r,layout:i,shape:o,size:u,tagline:c}=t||{};return{color:n,fundingicons:e,label:r,layout:i,shape:o||f.RECT,size:\"small\"===u?a.RESPONSIVE:u,tagline:c}}setupPayment(t,n,e){return O(this,void 0,void 0,function*(){if(!n)throw new v(o.CheckoutButtonNotInitialized);try{const e=yield this.paymentIntegrationService.loadDefaultCheckout(),{id:r}=e.getCartOrThrow(),i=e.getHost()||\"\";return(yield n.request.post(`${i}/api/storefront/payment/paypalexpress`,{merchantId:t,cartId:r},{headers:Object.assign({\"X-API-INTERNAL\":\"This API endpoint is for internal use only and may change in the future\"},S)})).id}catch(t){throw e&&t instanceof h&&e(t),t}})}tokenizePayment(t,n,e,r){return O(this,void 0,void 0,function*(){if(!e)throw new v(o.CheckoutButtonNotInitialized);if(!t.paymentID||!t.payerID)throw new d(i.MissingPayment);const u=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n),a=yield e.payment.get(t.paymentID);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:u.id,action:r?\"process_payment\":\"set_external_checkout\",paymentId:t.paymentID,payerId:t.payerID,payerInfo:JSON.stringify(a.payer.payer_info)})})}}const I=n(n=>new A(n,new b((0,t.vQ)()),(0,j.createFormPoster)()),[{id:\"paypalexpress\"}])})(),module.exports=r})();\n//# sourceMappingURL=paypal-express.js.map"
  },
  {
    "path": "dist/cjs/integrations/paypal-pro.js",
    "content": "(()=>{var t={4325(t,e,n){\"use strict\";n.d(e,{g:()=>i});var r=n(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(r.stringify(e))},t}()},321(t,e,n){\"use strict\";n.d(e,{A:()=>a});var r=n(168),i=n(1675),o=n(5861),u=n(4670);function a(t){return new u.A(new o.A,new i.A,r,t)}},6889(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(2024);function i(t){return new r.A(t)}},4043(t,e,n){\"use strict\";n.r(e),n.d(e,{RequestSender:()=>o.A,Timeout:()=>u.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),u=n(2024)},4843(t,e,n){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}n.d(e,{A:()=>r})},1675(t,e,n){\"use strict\";n.d(e,{A:()=>a});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,u=/application\\/x-www-form-urlencoded/;const a=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(e))return JSON.stringify(t.body);if(u.test(e))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,\"Content-Type\");return t&&o.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var n,i=e.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}()},5861(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||\"GET\",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),\"boolean\"==typeof n.credentials&&(t.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(n){t.setRequestHeader(n,e[n])})},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(r.stringify(e,{encode:n})):t},t}()},4670(t,e,n){\"use strict\";n.d(e,{A:()=>s});var r=n(1635),i=n(35),o=n.n(i),u=n(4325),a=n(4843),c=n(2024);const s=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new u.g}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(e,i){var u=function(){var u=n._payloadTransformer.toResponse(o);u.status>=200&&u.status<300?(n._cacheRequest(t,r,u),e(u)):i(u)};o.onload=u,o.onerror=u,o.onabort=u,o.ontimeout=u,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,a.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(n.headers[\"X-XSRF-TOKEN\"]=r),e&&e.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,e,n){\"use strict\";n.d(e,{A:()=>r});const r=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,e,n){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var n=t[e];return\"string\"==typeof n?\"\".concat(e,\"=\").concat(encodeURIComponent(n)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(e,{A:()=>r})},5889(t,e,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),u=n(3814);function a(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}function s(t,e){return e.decode?i(t):t}function f(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?f(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function l(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function p(t){const e=(t=l(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function h(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function d(t,e){a((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,n,r)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case\"bracket\":return(t,n,r)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"comma\":case\"separator\":return(e,n,r)=>{const i=\"string\"==typeof n&&n.includes(t.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&s(n,t).includes(t.arrayFormatSeparator);n=o?s(n,t):n;const u=i||o?n.split(t.arrayFormatSeparator).map(e=>s(e,t)):null===n?n:s(n,t);r[e]=u};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[].concat(n[t],e):n[t]=e}}}(e),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,u]=o(e.decode?i.replace(/\\+/g,\" \"):i,\"=\");u=void 0===u?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?u:s(u,e),n(s(t,e),u,r)}for(const t of Object.keys(r)){const n=r[t];if(\"object\"==typeof n&&null!==n)for(const t of Object.keys(n))n[t]=h(n[t],e);else r[t]=h(n,e)}return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce((t,e)=>{const n=r[e];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?t[e]=f(n):t[e]=n,t},Object.create(null))}e.extract=p,e.parse=d,e.stringify=(t,e)=>{if(!t)return\"\";a((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const n=n=>e.skipNull&&null==t[n]||e.skipEmptyString&&\"\"===t[n],r=function(t){switch(t.arrayFormat){case\"index\":return e=>(n,r)=>{const i=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[\",i,\"]\"].join(\"\")]:[...n,[c(e,t),\"[\",c(i,t),\"]=\",c(r,t)].join(\"\")]};case\"bracket\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[c(e,t),\"[]\"].join(\"\")]:[...n,[c(e,t),\"[]=\",c(r,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(n,r)=>null==r||0===r.length?n:0===n.length?[[c(e,t),\"=\",c(r,t)].join(\"\")]:[[n,c(r,t)].join(t.arrayFormatSeparator)];default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,c(e,t)]:[...n,[c(e,t),\"=\",c(r,t)].join(\"\")]}}(e),i={};for(const e of Object.keys(t))n(e)||(i[e]=t[e]);const o=Object.keys(i);return!1!==e.sort&&o.sort(e.sort),o.map(n=>{const i=t[n];return void 0===i?\"\":null===i?c(n,e):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):c(n,e)+\"=\"+c(i,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[n,r]=o(t,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:d(p(t),e)},e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:s(r,e)}:{})},e.stringifyUrl=(t,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=l(t.url).split(\"?\")[0]||\"\",i=e.extract(t.url),o=e.parse(i,{sort:!1}),u=Object.assign(o,t.query);let a=e.stringify(u,n);a&&(a=`?${a}`);let s=function(t){let e=\"\";const n=t.indexOf(\"#\");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(s=`#${c(t.fragmentIdentifier,n)}`),`${r}${a}${s}`},e.pick=(t,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:a}=e.parseUrl(t,r);return e.stringifyUrl({url:i,query:u(o,n),fragmentIdentifier:a},r)},e.exclude=(t,n,r)=>{const i=Array.isArray(n)?t=>!n.includes(t):(t,e)=>!n(t,e);return e.pick(t,i,r)}},5477(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement(\"link\");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=n},471(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(t,e,n){\"use strict\";e.vQ=void 0;n(4886),n(471);var r=n(5895);Object.defineProperty(e,\"vQ\",{enumerable:!0,get:function(){return r.default}});n(7995),n(9722),n(282)},4886(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var n=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),u=e||{},a=u.async,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(e){delete n._scripts[t],i(e)},o.async=c,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadScript(t,e)})).then(function(){})},t.prototype.preloadScript=function(t,e){var n=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(e||{}).prefetch,u=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(u)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=u,a.href=t,a.onload=function(){r()},a.onerror=function(){delete n._preloadedScripts[t],i()},document.head.appendChild(a)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadScript(t,e)})).then(function(){})},t}();e.default=n},7995(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var n=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),u=e||{},a=u.prepend,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onerror=function(e){delete n._stylesheets[t],i(e)},o.rel=\"stylesheet\",o.href=t,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadStylesheet(t,e)})).then(function(){})},t.prototype.preloadStylesheet=function(t,e){var n=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(e||{}).prefetch,u=void 0!==o&&o,a=u?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=u?\"prefetch\":\"preload\",c.href=t,c.onload=function(){r()},c.onerror=function(e){delete n._preloadedStylesheets[t],i(e)},document.head.appendChild(c)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadStylesheet(t,e)})).then(function(){})},t}();e.default=n},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+e+\")+\",\"gi\");function i(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],i(n),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var e=t.match(n)||[],r=1;r<e.length;r++)e=(t=i(e,r).join(\"\")).match(n)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(t);n;){try{e[n[0]]=decodeURIComponent(n[0])}catch(t){var i=o(n[0]);i!==n[0]&&(e[n[0]]=i)}n=r.exec(t)}e[\"%C2\"]=\"�\";for(var u=Object.keys(e),a=0;a<u.length;a++){var c=u[a];t=t.replace(new RegExp(c,\"g\"),e[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,e){for(var n={},r=Object.keys(t),i=Array.isArray(e),o=0;o<r.length;o++){var u=r[o],a=t[u];(i?-1!==e.indexOf(u):e(u,a,t))&&(n[u]=a)}return n}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(e,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var u=JSON.stringify(n);/^[\\{\\[]/.test(u)&&(n=u)}catch(t){}n=r.write?r.write(n,e):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in o)o[c]&&(a+=\"; \"+c,!0!==o[c]&&(a+=\"=\"+o[c].split(\";\")[0]));return document.cookie=e+\"=\"+n+a}}function u(t,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],u=0;u<o.length;u++){var a=o[u].split(\"=\"),c=a.slice(1).join(\"=\");n||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var s=e(a[0]);if(c=(r.read||r)(c,s)||e(c),n)try{c=JSON.parse(c)}catch(t){}if(i[s]=c,t===s)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return u(t,!1)},i.getJSON=function(t){return u(t,!0)},i.remove=function(e,n){o(e,\"\",t(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},35(t,e,n){t=n.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",u=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,s=/^(?:0|[1-9]\\d*)$/,f={};f[\"[object Float32Array]\"]=f[\"[object Float64Array]\"]=f[\"[object Int8Array]\"]=f[\"[object Int16Array]\"]=f[\"[object Int32Array]\"]=f[\"[object Uint8Array]\"]=f[\"[object Uint8ClampedArray]\"]=f[\"[object Uint16Array]\"]=f[\"[object Uint32Array]\"]=!0,f[o]=f[\"[object Array]\"]=f[\"[object ArrayBuffer]\"]=f[\"[object Boolean]\"]=f[\"[object DataView]\"]=f[\"[object Date]\"]=f[\"[object Error]\"]=f[u]=f[\"[object Map]\"]=f[\"[object Number]\"]=f[a]=f[\"[object RegExp]\"]=f[\"[object Set]\"]=f[\"[object String]\"]=f[\"[object WeakMap]\"]=!1;var l,p,h,d=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,v=\"object\"==typeof self&&self&&self.Object===Object&&self,_=d||v||Function(\"return this\")(),y=e&&!e.nodeType&&e,g=y&&t&&!t.nodeType&&t,m=g&&g.exports===y,b=m&&d.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),j=w&&w.isTypedArray,S=Array.prototype,A=Function.prototype,O=Object.prototype,x=_[\"__core-js_shared__\"],C=A.toString,I=O.hasOwnProperty,k=(l=/[^.]+$/.exec(x&&x.keys&&x.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",E=O.toString,P=C.call(Object),R=RegExp(\"^\"+C.call(I).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),T=m?_.Buffer:void 0,z=_.Symbol,M=_.Uint8Array,U=(T&&T.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(t){return p(h(t))}),N=Object.create,F=O.propertyIsEnumerable,D=S.splice,q=z?z.toStringTag:void 0,L=function(){try{var t=at(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),B=T?T.isBuffer:void 0,$=Math.max,W=Date.now,H=at(_,\"Map\"),K=at(Object,\"create\"),V=function(){function t(){}return function(e){if(!mt(e))return{};if(N)return N(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function G(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Z(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function J(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Y(t){var e=this.__data__=new Z(t);this.size=e.size}function X(t,e,n){(void 0!==n&&!pt(t[e],n)||void 0===n&&!(e in t))&&et(t,e,n)}function Q(t,e,n){var r=t[e];I.call(t,e)&&pt(r,n)&&(void 0!==n||e in t)||et(t,e,n)}function tt(t,e){for(var n=t.length;n--;)if(pt(t[n][0],e))return n;return-1}function et(t,e,n){\"__proto__\"==e&&L?L(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}G.prototype.clear=function(){this.__data__=K?K(null):{},this.size=0},G.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},G.prototype.get=function(t){var e=this.__data__;if(K){var n=e[t];return n===r?void 0:n}return I.call(e,t)?e[t]:void 0},G.prototype.has=function(t){var e=this.__data__;return K?void 0!==e[t]:I.call(e,t)},G.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=K&&void 0===e?r:e,this},Z.prototype.clear=function(){this.__data__=[],this.size=0},Z.prototype.delete=function(t){var e=this.__data__,n=tt(e,t);return!(n<0||(n==e.length-1?e.pop():D.call(e,n,1),--this.size,0))},Z.prototype.get=function(t){var e=this.__data__,n=tt(e,t);return n<0?void 0:e[n][1]},Z.prototype.has=function(t){return tt(this.__data__,t)>-1},Z.prototype.set=function(t,e){var n=this.__data__,r=tt(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},J.prototype.clear=function(){this.size=0,this.__data__={hash:new G,map:new(H||Z),string:new G}},J.prototype.delete=function(t){var e=ut(this,t).delete(t);return this.size-=e?1:0,e},J.prototype.get=function(t){return ut(this,t).get(t)},J.prototype.has=function(t){return ut(this,t).has(t)},J.prototype.set=function(t,e){var n=ut(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Y.prototype.clear=function(){this.__data__=new Z,this.size=0},Y.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Y.prototype.get=function(t){return this.__data__.get(t)},Y.prototype.has=function(t){return this.__data__.has(t)},Y.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Z){var r=n.__data__;if(!H||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new J(r)}return n.set(t,e),this.size=n.size,this};function nt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":q&&q in Object(t)?function(t){var e=I.call(t,q),n=t[q];try{t[q]=void 0;var r=!0}catch(t){}var i=E.call(t);return r&&(e?t[q]=n:delete t[q]),i}(t):function(t){return E.call(t)}(t)}function rt(t){return bt(t)&&nt(t)==o}function it(t,e,n,r,i){t!==e&&function(t,e,n){for(var r=-1,i=Object(t),o=n(t),u=o.length;u--;){var a=o[++r];if(!1===e(i[a],a,i))break}}(e,function(o,u){if(i||(i=new Y),mt(o))!function(t,e,n,r,i,o,u){var c=ft(t,n),s=ft(e,n),f=u.get(s);if(f)X(t,n,f);else{var l,p,h,d,v,_=o?o(c,s,n+\"\",t,e,u):void 0,y=void 0===_;if(y){var g=dt(s),m=!g&&_t(s),b=!g&&!m&&wt(s);_=s,g||m||b?dt(c)?_=c:bt(v=c)&&vt(v)?_=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}(c):m?(y=!1,_=function(t){return t.slice()}(s)):b?(y=!1,d=new(h=(l=s).buffer).constructor(h.byteLength),new M(d).set(new M(h)),p=d,_=new l.constructor(p,l.byteOffset,l.length)):_=[]:function(t){if(!bt(t)||nt(t)!=a)return!1;var e=U(t);if(null===e)return!0;var n=I.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&C.call(n)==P}(s)||ht(s)?(_=c,ht(c)?_=function(t){return function(t,e,n){var r=!n;n||(n={});for(var i=-1,o=e.length;++i<o;){var u=e[i],a=void 0;void 0===a&&(a=t[u]),r?et(n,u,a):Q(n,u,a)}return n}(t,jt(t))}(c):mt(c)&&!yt(c)||(_=function(t){return\"function\"!=typeof t.constructor||st(t)?{}:V(U(t))}(s))):y=!1}y&&(u.set(s,_),i(_,s,r,o,u),u.delete(s)),X(t,n,_)}}(t,e,u,n,it,r,i);else{var c=r?r(ft(t,u),o,u+\"\",t,e,i):void 0;void 0===c&&(c=o),X(t,u,c)}},jt)}var ot=L?function(t,e){return L(t,\"toString\",{configurable:!0,enumerable:!1,value:(n=e,function(){return n}),writable:!0});var n}:Ot;function ut(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function at(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!mt(t)||function(t){return!!k&&k in t}(t))&&(yt(t)?R:c).test(function(t){if(null!=t){try{return C.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(n)?n:void 0}function ct(t,e){var n=typeof t;return!!(e=e??i)&&(\"number\"==n||\"symbol\"!=n&&s.test(t))&&t>-1&&t%1==0&&t<e}function st(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||O)}function ft(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var lt=function(t){var e=0,n=0;return function(){var r=W(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ot);function pt(t,e){return t===e||t!=t&&e!=e}var ht=rt(function(){return arguments}())?rt:function(t){return bt(t)&&I.call(t,\"callee\")&&!F.call(t,\"callee\")},dt=Array.isArray;function vt(t){return null!=t&&gt(t.length)&&!yt(t)}var _t=B||function(){return!1};function yt(t){if(!mt(t))return!1;var e=nt(t);return e==u||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function mt(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=j?function(t){return function(e){return t(e)}}(j):function(t){return bt(t)&&gt(t.length)&&!!f[nt(t)]};function jt(t){return vt(t)?function(t,e){var n=dt(t),r=!n&&ht(t),i=!n&&!r&&_t(t),o=!n&&!r&&!i&&wt(t),u=n||r||i||o,a=u?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],c=a.length;for(var s in t)!e&&!I.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||ct(s,c))||a.push(s);return a}(t,!0):function(t){if(!mt(t))return function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}(t);var e=st(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&I.call(t,r))&&n.push(r);return n}(t)}var St,At=(St=function(t,e,n){it(t,e,n)},function(t,e){return lt(function(t,e,n){return e=$(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=$(r.length-e,0),u=Array(o);++i<o;)u[i]=r[e+i];i=-1;for(var a=Array(e+1);++i<e;)a[i]=r[i];return a[e]=n(u),function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}(t,this,a)}}(t,e,Ot),t+\"\")}(function(t,e){var n=-1,r=e.length,i=r>1?e[r-1]:void 0,o=r>2?e[2]:void 0;for(i=St.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,e,n){if(!mt(n))return!1;var r=typeof e;return!!(\"number\"==r?vt(n)&&ct(e,n.length):\"string\"==r&&e in n)&&pt(n[e],t)}(e[0],e[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++n<r;){var u=e[n];u&&St(t,u,n)}return t}));function Ot(t){return t}t.exports=At},9440(t,e,n){t=n.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,s=1/0,f=9007199254740991,l=NaN,p=4294967295,h=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",v=\"[object Array]\",_=\"[object Boolean]\",y=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",j=\"[object Number]\",S=\"[object Object]\",A=\"[object Promise]\",O=\"[object RegExp]\",x=\"[object Set]\",C=\"[object String]\",I=\"[object Symbol]\",k=\"[object WeakMap]\",E=\"[object ArrayBuffer]\",P=\"[object DataView]\",R=\"[object Float32Array]\",T=\"[object Float64Array]\",z=\"[object Int8Array]\",M=\"[object Int16Array]\",U=\"[object Int32Array]\",N=\"[object Uint8Array]\",F=\"[object Uint8ClampedArray]\",D=\"[object Uint16Array]\",q=\"[object Uint32Array]\",L=/\\b__p \\+= '';/g,B=/\\b(__p \\+=) '' \\+/g,$=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,W=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,K=RegExp(W.source),V=RegExp(H.source),G=/<%-([\\s\\S]+?)%>/g,Z=/<%([\\s\\S]+?)%>/g,J=/<%=([\\s\\S]+?)%>/g,Y=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,X=/^\\w*$/,Q=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,et=RegExp(tt.source),nt=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,vt=/^0o[0-7]+$/i,_t=/^(?:0|[1-9]\\d*)$/,yt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",jt=\"\\\\u2700-\\\\u27bf\",St=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",At=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ot=\"\\\\ufe0e\\\\ufe0f\",xt=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Ct=\"[\"+bt+\"]\",It=\"[\"+xt+\"]\",kt=\"[\"+wt+\"]\",Et=\"\\\\d+\",Pt=\"[\"+jt+\"]\",Rt=\"[\"+St+\"]\",Tt=\"[^\"+bt+xt+Et+jt+St+At+\"]\",zt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Mt=\"[^\"+bt+\"]\",Ut=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Nt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ft=\"[\"+At+\"]\",Dt=\"\\\\u200d\",qt=\"(?:\"+Rt+\"|\"+Tt+\")\",Lt=\"(?:\"+Ft+\"|\"+Tt+\")\",Bt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",$t=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Wt=\"(?:\"+kt+\"|\"+zt+\")?\",Ht=\"[\"+Ot+\"]?\",Kt=Ht+Wt+\"(?:\"+Dt+\"(?:\"+[Mt,Ut,Nt].join(\"|\")+\")\"+Ht+Wt+\")*\",Vt=\"(?:\"+[Pt,Ut,Nt].join(\"|\")+\")\"+Kt,Gt=\"(?:\"+[Mt+kt+\"?\",kt,Ut,Nt,Ct].join(\"|\")+\")\",Zt=RegExp(\"['’]\",\"g\"),Jt=RegExp(kt,\"g\"),Yt=RegExp(zt+\"(?=\"+zt+\")|\"+Gt+Kt,\"g\"),Xt=RegExp([Ft+\"?\"+Rt+\"+\"+Bt+\"(?=\"+[It,Ft,\"$\"].join(\"|\")+\")\",Lt+\"+\"+$t+\"(?=\"+[It,Ft+qt,\"$\"].join(\"|\")+\")\",Ft+\"?\"+qt+\"+\"+Bt,Ft+\"+\"+$t,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Et,Vt].join(\"|\"),\"g\"),Qt=RegExp(\"[\"+Dt+bt+wt+Ot+\"]\"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ne=-1,re={};re[R]=re[T]=re[z]=re[M]=re[U]=re[N]=re[F]=re[D]=re[q]=!0,re[d]=re[v]=re[E]=re[_]=re[P]=re[y]=re[g]=re[m]=re[w]=re[j]=re[S]=re[O]=re[x]=re[C]=re[k]=!1;var ie={};ie[d]=ie[v]=ie[E]=ie[P]=ie[_]=ie[y]=ie[R]=ie[T]=ie[z]=ie[M]=ie[U]=ie[w]=ie[j]=ie[S]=ie[O]=ie[x]=ie[C]=ie[I]=ie[N]=ie[F]=ie[D]=ie[q]=!0,ie[g]=ie[m]=ie[k]=!1;var oe={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ue=parseFloat,ae=parseInt,ce=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,se=\"object\"==typeof self&&self&&self.Object===Object&&self,fe=ce||se||Function(\"return this\")(),le=e&&!e.nodeType&&e,pe=le&&t&&!t.nodeType&&t,he=pe&&pe.exports===le,de=he&&ce.process,ve=function(){try{return pe&&pe.require&&pe.require(\"util\").types||de&&de.binding&&de.binding(\"util\")}catch(t){}}(),_e=ve&&ve.isArrayBuffer,ye=ve&&ve.isDate,ge=ve&&ve.isMap,me=ve&&ve.isRegExp,be=ve&&ve.isSet,we=ve&&ve.isTypedArray;function je(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Se(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];e(r,u,n(u),t)}return r}function Ae(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function Oe(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function xe(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function Ce(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var u=t[n];e(u,n,t)&&(o[i++]=u)}return o}function Ie(t,e){return!(null==t||!t.length)&&Fe(t,e,0)>-1}function ke(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function Ee(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function Pe(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function Re(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function Te(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function ze(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var Me=Be(\"length\");function Ue(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function Ne(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function Fe(t,e,n){return e==e?function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):Ne(t,qe,n)}function De(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function qe(t){return t!=t}function Le(t,e){var n=null==t?0:t.length;return n?He(t,e)/n:l}function Be(t){return function(e){return null==e?r:e[t]}}function $e(t){return function(e){return null==t?r:t[e]}}function We(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function He(t,e){for(var n,i=-1,o=t.length;++i<o;){var u=e(t[i]);u!==r&&(n=n===r?u:n+u)}return n}function Ke(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function Ve(t){return t?t.slice(0,ln(t)+1).replace(nt,\"\"):t}function Ge(t){return function(e){return t(e)}}function Ze(t,e){return Ee(e,function(e){return t[e]})}function Je(t,e){return t.has(e)}function Ye(t,e){for(var n=-1,r=t.length;++n<r&&Fe(e,t[n],0)>-1;);return n}function Xe(t,e){for(var n=t.length;n--&&Fe(e,t[n],0)>-1;);return n}var Qe=$e({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tn=$e({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function en(t){return\"\\\\\"+oe[t]}function nn(t){return Qt.test(t)}function rn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function on(t,e){return function(n){return t(e(n))}}function un(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n];a!==e&&a!==u||(t[n]=u,o[i++]=n)}return o}function an(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function cn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function sn(t){return nn(t)?function(t){for(var e=Yt.lastIndex=0;Yt.test(t);)++e;return e}(t):Me(t)}function fn(t){return nn(t)?function(t){return t.match(Yt)||[]}(t):function(t){return t.split(\"\")}(t)}function ln(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}var pn=$e({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),hn=function t(e){var n,rt=(e=null==e?fe:hn.defaults(fe.Object(),e,hn.pick(fe,ee))).Array,bt=e.Date,wt=e.Error,jt=e.Function,St=e.Math,At=e.Object,Ot=e.RegExp,xt=e.String,Ct=e.TypeError,It=rt.prototype,kt=jt.prototype,Et=At.prototype,Pt=e[\"__core-js_shared__\"],Rt=kt.toString,Tt=Et.hasOwnProperty,zt=0,Mt=(n=/[^.]+$/.exec(Pt&&Pt.keys&&Pt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",Ut=Et.toString,Nt=Rt.call(At),Ft=fe._,Dt=Ot(\"^\"+Rt.call(Tt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),qt=he?e.Buffer:r,Lt=e.Symbol,Bt=e.Uint8Array,$t=qt?qt.allocUnsafe:r,Wt=on(At.getPrototypeOf,At),Ht=At.create,Kt=Et.propertyIsEnumerable,Vt=It.splice,Gt=Lt?Lt.isConcatSpreadable:r,Yt=Lt?Lt.iterator:r,Qt=Lt?Lt.toStringTag:r,oe=function(){try{var t=co(At,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ce=e.clearTimeout!==fe.clearTimeout&&e.clearTimeout,se=bt&&bt.now!==fe.Date.now&&bt.now,le=e.setTimeout!==fe.setTimeout&&e.setTimeout,pe=St.ceil,de=St.floor,ve=At.getOwnPropertySymbols,Me=qt?qt.isBuffer:r,$e=e.isFinite,dn=It.join,vn=on(At.keys,At),_n=St.max,yn=St.min,gn=bt.now,mn=e.parseInt,bn=St.random,wn=It.reverse,jn=co(e,\"DataView\"),Sn=co(e,\"Map\"),An=co(e,\"Promise\"),On=co(e,\"Set\"),xn=co(e,\"WeakMap\"),Cn=co(At,\"create\"),In=xn&&new xn,kn={},En=No(jn),Pn=No(Sn),Rn=No(An),Tn=No(On),zn=No(xn),Mn=Lt?Lt.prototype:r,Un=Mn?Mn.valueOf:r,Nn=Mn?Mn.toString:r;function Fn(t){if(ta(t)&&!$u(t)&&!(t instanceof Bn)){if(t instanceof Ln)return t;if(Tt.call(t,\"__wrapped__\"))return Fo(t)}return new Ln(t)}var Dn=function(){function t(){}return function(e){if(!Qu(e))return{};if(Ht)return Ht(e);t.prototype=e;var n=new t;return t.prototype=r,n}}();function qn(){}function Ln(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=r}function Bn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function $n(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Wn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Hn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Kn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new Hn;++e<n;)this.add(t[e])}function Vn(t){var e=this.__data__=new Wn(t);this.size=e.size}function Gn(t,e){var n=$u(t),r=!n&&Bu(t),i=!n&&!r&&Vu(t),o=!n&&!r&&!i&&ca(t),u=n||r||i||o,a=u?Ke(t.length,xt):[],c=a.length;for(var s in t)!e&&!Tt.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||_o(s,c))||a.push(s);return a}function Zn(t){var e=t.length;return e?t[Hr(0,e-1)]:r}function Jn(t,e){return Ro(xi(t),or(e,0,t.length))}function Yn(t){return Ro(xi(t))}function Xn(t,e,n){(n!==r&&!Du(t[e],n)||n===r&&!(e in t))&&rr(t,e,n)}function Qn(t,e,n){var i=t[e];Tt.call(t,e)&&Du(i,n)&&(n!==r||e in t)||rr(t,e,n)}function tr(t,e){for(var n=t.length;n--;)if(Du(t[n][0],e))return n;return-1}function er(t,e,n,r){return fr(t,function(t,i,o){e(r,t,n(t),o)}),r}function nr(t,e){return t&&Ci(e,Ea(e),t)}function rr(t,e,n){\"__proto__\"==e&&oe?oe(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function ir(t,e){for(var n=-1,i=e.length,o=rt(i),u=null==t;++n<i;)o[n]=u?r:Oa(t,e[n]);return o}function or(t,e,n){return t==t&&(n!==r&&(t=t<=n?t:n),e!==r&&(t=t>=e?t:e)),t}function ur(t,e,n,i,o,u){var a,c=1&e,s=2&e,f=4&e;if(n&&(a=o?n(t,i,o,u):n(t)),a!==r)return a;if(!Qu(t))return t;var l=$u(t);if(l){if(a=function(t){var e=t.length,n=new t.constructor(e);return e&&\"string\"==typeof t[0]&&Tt.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}(t),!c)return xi(t,a)}else{var p=lo(t),h=p==m||p==b;if(Vu(t))return bi(t,c);if(p==S||p==d||h&&!o){if(a=s||h?{}:ho(t),!c)return s?function(t,e){return Ci(t,fo(t),e)}(t,function(t,e){return t&&Ci(e,Pa(e),t)}(a,t)):function(t,e){return Ci(t,so(t),e)}(t,nr(a,t))}else{if(!ie[p])return o?t:{};a=function(t,e,n){var r,i=t.constructor;switch(e){case E:return wi(t);case _:case y:return new i(+t);case P:return function(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case R:case T:case z:case M:case U:case N:case F:case D:case q:return ji(t,n);case w:return new i;case j:case C:return new i(t);case O:return function(t){var e=new t.constructor(t.source,lt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case x:return new i;case I:return r=t,Un?At(Un.call(r)):{}}}(t,p,c)}}u||(u=new Vn);var v=u.get(t);if(v)return v;u.set(t,a),oa(t)?t.forEach(function(r){a.add(ur(r,e,n,r,t,u))}):ea(t)&&t.forEach(function(r,i){a.set(i,ur(r,e,n,i,t,u))});var g=l?r:(f?s?eo:to:s?Pa:Ea)(t);return Ae(g||t,function(r,i){g&&(r=t[i=r]),Qn(a,i,ur(r,e,n,i,t,u))}),a}function ar(t,e,n){var i=n.length;if(null==t)return!i;for(t=At(t);i--;){var o=n[i],u=e[o],a=t[o];if(a===r&&!(o in t)||!u(a))return!1}return!0}function cr(t,e,n){if(\"function\"!=typeof t)throw new Ct(i);return Io(function(){t.apply(r,n)},e)}function sr(t,e,n,r){var i=-1,o=Ie,u=!0,a=t.length,c=[],s=e.length;if(!a)return c;n&&(e=Ee(e,Ge(n))),r?(o=ke,u=!1):e.length>=200&&(o=Je,u=!1,e=new Kn(e));t:for(;++i<a;){var f=t[i],l=null==n?f:n(f);if(f=r||0!==f?f:0,u&&l==l){for(var p=s;p--;)if(e[p]===l)continue t;c.push(f)}else o(e,l,r)||c.push(f)}return c}Fn.templateSettings={escape:G,evaluate:Z,interpolate:J,variable:\"\",imports:{_:Fn}},Fn.prototype=qn.prototype,Fn.prototype.constructor=Fn,Ln.prototype=Dn(qn.prototype),Ln.prototype.constructor=Ln,Bn.prototype=Dn(qn.prototype),Bn.prototype.constructor=Bn,$n.prototype.clear=function(){this.__data__=Cn?Cn(null):{},this.size=0},$n.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},$n.prototype.get=function(t){var e=this.__data__;if(Cn){var n=e[t];return n===o?r:n}return Tt.call(e,t)?e[t]:r},$n.prototype.has=function(t){var e=this.__data__;return Cn?e[t]!==r:Tt.call(e,t)},$n.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=Cn&&e===r?o:e,this},Wn.prototype.clear=function(){this.__data__=[],this.size=0},Wn.prototype.delete=function(t){var e=this.__data__,n=tr(e,t);return!(n<0||(n==e.length-1?e.pop():Vt.call(e,n,1),--this.size,0))},Wn.prototype.get=function(t){var e=this.__data__,n=tr(e,t);return n<0?r:e[n][1]},Wn.prototype.has=function(t){return tr(this.__data__,t)>-1},Wn.prototype.set=function(t,e){var n=this.__data__,r=tr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Hn.prototype.clear=function(){this.size=0,this.__data__={hash:new $n,map:new(Sn||Wn),string:new $n}},Hn.prototype.delete=function(t){var e=uo(this,t).delete(t);return this.size-=e?1:0,e},Hn.prototype.get=function(t){return uo(this,t).get(t)},Hn.prototype.has=function(t){return uo(this,t).has(t)},Hn.prototype.set=function(t,e){var n=uo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Kn.prototype.add=Kn.prototype.push=function(t){return this.__data__.set(t,o),this},Kn.prototype.has=function(t){return this.__data__.has(t)},Vn.prototype.clear=function(){this.__data__=new Wn,this.size=0},Vn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Vn.prototype.get=function(t){return this.__data__.get(t)},Vn.prototype.has=function(t){return this.__data__.has(t)},Vn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Wn){var r=n.__data__;if(!Sn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Hn(r)}return n.set(t,e),this.size=n.size,this};var fr=Ei(gr),lr=Ei(mr,!0);function pr(t,e){var n=!0;return fr(t,function(t,r,i){return n=!!e(t,r,i)}),n}function hr(t,e,n){for(var i=-1,o=t.length;++i<o;){var u=t[i],a=e(u);if(null!=a&&(c===r?a==a&&!aa(a):n(a,c)))var c=a,s=u}return s}function dr(t,e){var n=[];return fr(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function vr(t,e,n,r,i){var o=-1,u=t.length;for(n||(n=vo),i||(i=[]);++o<u;){var a=t[o];e>0&&n(a)?e>1?vr(a,e-1,n,r,i):Pe(i,a):r||(i[i.length]=a)}return i}var _r=Pi(),yr=Pi(!0);function gr(t,e){return t&&_r(t,e,Ea)}function mr(t,e){return t&&yr(t,e,Ea)}function br(t,e){return Ce(e,function(e){return Ju(t[e])})}function wr(t,e){for(var n=0,i=(e=_i(e,t)).length;null!=t&&n<i;)t=t[Uo(e[n++])];return n&&n==i?t:r}function jr(t,e,n){var r=e(t);return $u(t)?r:Pe(r,n(t))}function Sr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Qt&&Qt in At(t)?function(t){var e=Tt.call(t,Qt),n=t[Qt];try{t[Qt]=r;var i=!0}catch(t){}var o=Ut.call(t);return i&&(e?t[Qt]=n:delete t[Qt]),o}(t):function(t){return Ut.call(t)}(t)}function Ar(t,e){return t>e}function Or(t,e){return null!=t&&Tt.call(t,e)}function xr(t,e){return null!=t&&e in At(t)}function Cr(t,e,n){for(var i=n?ke:Ie,o=t[0].length,u=t.length,a=u,c=rt(u),s=1/0,f=[];a--;){var l=t[a];a&&e&&(l=Ee(l,Ge(e))),s=yn(l.length,s),c[a]=!n&&(e||o>=120&&l.length>=120)?new Kn(a&&l):r}l=t[0];var p=-1,h=c[0];t:for(;++p<o&&f.length<s;){var d=l[p],v=e?e(d):d;if(d=n||0!==d?d:0,!(h?Je(h,v):i(f,v,n))){for(a=u;--a;){var _=c[a];if(!(_?Je(_,v):i(t[a],v,n)))continue t}h&&h.push(v),f.push(d)}}return f}function Ir(t,e,n){var i=null==(t=Oo(t,e=_i(e,t)))?t:t[Uo(Zo(e))];return null==i?r:je(i,t,n)}function kr(t){return ta(t)&&Sr(t)==d}function Er(t,e,n,i,o){return t===e||(null==t||null==e||!ta(t)&&!ta(e)?t!=t&&e!=e:function(t,e,n,i,o,u){var a=$u(t),c=$u(e),s=a?v:lo(t),f=c?v:lo(e),l=(s=s==d?S:s)==S,p=(f=f==d?S:f)==S,h=s==f;if(h&&Vu(t)){if(!Vu(e))return!1;a=!0,l=!1}if(h&&!l)return u||(u=new Vn),a||ca(t)?Xi(t,e,n,i,o,u):function(t,e,n,r,i,o,u){switch(n){case P:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case E:return!(t.byteLength!=e.byteLength||!o(new Bt(t),new Bt(e)));case _:case y:case j:return Du(+t,+e);case g:return t.name==e.name&&t.message==e.message;case O:case C:return t==e+\"\";case w:var a=rn;case x:var c=1&r;if(a||(a=an),t.size!=e.size&&!c)return!1;var s=u.get(t);if(s)return s==e;r|=2,u.set(t,e);var f=Xi(a(t),a(e),r,i,o,u);return u.delete(t),f;case I:if(Un)return Un.call(t)==Un.call(e)}return!1}(t,e,s,n,i,o,u);if(!(1&n)){var m=l&&Tt.call(t,\"__wrapped__\"),b=p&&Tt.call(e,\"__wrapped__\");if(m||b){var A=m?t.value():t,k=b?e.value():e;return u||(u=new Vn),o(A,k,n,i,u)}}return!!h&&(u||(u=new Vn),function(t,e,n,i,o,u){var a=1&n,c=to(t),s=c.length;if(s!=to(e).length&&!a)return!1;for(var f=s;f--;){var l=c[f];if(!(a?l in e:Tt.call(e,l)))return!1}var p=u.get(t),h=u.get(e);if(p&&h)return p==e&&h==t;var d=!0;u.set(t,e),u.set(e,t);for(var v=a;++f<s;){var _=t[l=c[f]],y=e[l];if(i)var g=a?i(y,_,l,e,t,u):i(_,y,l,t,e,u);if(!(g===r?_===y||o(_,y,n,i,u):g)){d=!1;break}v||(v=\"constructor\"==l)}if(d&&!v){var m=t.constructor,b=e.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return u.delete(t),u.delete(e),d}(t,e,n,i,o,u))}(t,e,n,i,Er,o))}function Pr(t,e,n,i){var o=n.length,u=o,a=!i;if(null==t)return!u;for(t=At(t);o--;){var c=n[o];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++o<u;){var s=(c=n[o])[0],f=t[s],l=c[1];if(a&&c[2]){if(f===r&&!(s in t))return!1}else{var p=new Vn;if(i)var h=i(f,l,s,t,e,p);if(!(h===r?Er(l,f,3,i,p):h))return!1}}return!0}function Rr(t){return!(!Qu(t)||(e=t,Mt&&Mt in e))&&(Ju(t)?Dt:dt).test(No(t));var e}function Tr(t){return\"function\"==typeof t?t:null==t?nc:\"object\"==typeof t?$u(t)?Fr(t[0],t[1]):Nr(t):lc(t)}function zr(t){if(!wo(t))return vn(t);var e=[];for(var n in At(t))Tt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function Mr(t,e){return t<e}function Ur(t,e){var n=-1,r=Hu(t)?rt(t.length):[];return fr(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Nr(t){var e=ao(t);return 1==e.length&&e[0][2]?So(e[0][0],e[0][1]):function(n){return n===t||Pr(n,t,e)}}function Fr(t,e){return go(t)&&jo(e)?So(Uo(t),e):function(n){var i=Oa(n,t);return i===r&&i===e?xa(n,t):Er(e,i,3)}}function Dr(t,e,n,i,o){t!==e&&_r(e,function(u,a){if(o||(o=new Vn),Qu(u))!function(t,e,n,i,o,u,a){var c=xo(t,n),s=xo(e,n),f=a.get(s);if(f)Xn(t,n,f);else{var l=u?u(c,s,n+\"\",t,e,a):r,p=l===r;if(p){var h=$u(s),d=!h&&Vu(s),v=!h&&!d&&ca(s);l=s,h||d||v?$u(c)?l=c:Ku(c)?l=xi(c):d?(p=!1,l=bi(s,!0)):v?(p=!1,l=ji(s,!0)):l=[]:ra(s)||Bu(s)?(l=c,Bu(c)?l=_a(c):Qu(c)&&!Ju(c)||(l=ho(s))):p=!1}p&&(a.set(s,l),o(l,s,i,u,a),a.delete(s)),Xn(t,n,l)}}(t,e,a,n,Dr,i,o);else{var c=i?i(xo(t,a),u,a+\"\",t,e,o):r;c===r&&(c=u),Xn(t,a,c)}},Pa)}function qr(t,e){var n=t.length;if(n)return _o(e+=e<0?n:0,n)?t[e]:r}function Lr(t,e,n){e=e.length?Ee(e,function(t){return $u(t)?function(e){return wr(e,1===t.length?t[0]:t)}:t}):[nc];var r=-1;e=Ee(e,Ge(oo()));var i=Ur(t,function(t,n,i){var o=Ee(e,function(e){return e(t)});return{criteria:o,index:++r,value:t}});return function(t){var e=t.length;for(t.sort(function(t,e){return function(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,u=i.length,a=n.length;++r<u;){var c=Si(i[r],o[r]);if(c)return r>=a?c:c*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)});e--;)t[e]=t[e].value;return t}(i)}function Br(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var u=e[r],a=wr(t,u);n(a,u)&&Jr(o,_i(u,t),a)}return o}function $r(t,e,n,r){var i=r?De:Fe,o=-1,u=e.length,a=t;for(t===e&&(e=xi(e)),n&&(a=Ee(t,Ge(n)));++o<u;)for(var c=0,s=e[o],f=n?n(s):s;(c=i(a,f,c,r))>-1;)a!==t&&Vt.call(a,c,1),Vt.call(t,c,1);return t}function Wr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;_o(i)?Vt.call(t,i,1):ci(t,i)}}return t}function Hr(t,e){return t+de(bn()*(e-t+1))}function Kr(t,e){var n=\"\";if(!t||e<1||e>f)return n;do{e%2&&(n+=t),(e=de(e/2))&&(t+=t)}while(e);return n}function Vr(t,e){return ko(Ao(t,e,nc),t+\"\")}function Gr(t){return Zn(Da(t))}function Zr(t,e){var n=Da(t);return Ro(n,or(e,0,n.length))}function Jr(t,e,n,i){if(!Qu(t))return t;for(var o=-1,u=(e=_i(e,t)).length,a=u-1,c=t;null!=c&&++o<u;){var s=Uo(e[o]),f=n;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(o!=a){var l=c[s];(f=i?i(l,s,c):r)===r&&(f=Qu(l)?l:_o(e[o+1])?[]:{})}Qn(c,s,f),c=c[s]}return t}var Yr=In?function(t,e){return In.set(t,e),t}:nc,Xr=oe?function(t,e){return oe(t,\"toString\",{configurable:!0,enumerable:!1,value:Qa(e),writable:!0})}:nc;function Qr(t){return Ro(Da(t))}function ti(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+e];return o}function ei(t,e){var n;return fr(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ni(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;r<i;){var o=r+i>>>1,u=t[o];null!==u&&!aa(u)&&(n?u<=e:u<e)?r=o+1:i=o}return i}return ri(t,e,nc,n)}function ri(t,e,n,i){var o=0,u=null==t?0:t.length;if(0===u)return 0;for(var a=(e=n(e))!=e,c=null===e,s=aa(e),f=e===r;o<u;){var l=de((o+u)/2),p=n(t[l]),h=p!==r,d=null===p,v=p==p,_=aa(p);if(a)var y=i||v;else y=f?v&&(i||h):c?v&&h&&(i||!d):s?v&&h&&!d&&(i||!_):!d&&!_&&(i?p<=e:p<e);y?o=l+1:u=l}return yn(u,4294967294)}function ii(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var u=t[n],a=e?e(u):u;if(!n||!Du(a,c)){var c=a;o[i++]=0===u?0:u}}return o}function oi(t){return\"number\"==typeof t?t:aa(t)?l:+t}function ui(t){if(\"string\"==typeof t)return t;if($u(t))return Ee(t,ui)+\"\";if(aa(t))return Nn?Nn.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function ai(t,e,n){var r=-1,i=Ie,o=t.length,u=!0,a=[],c=a;if(n)u=!1,i=ke;else if(o>=200){var s=e?null:Ki(t);if(s)return an(s);u=!1,i=Je,c=new Kn}else c=e?[]:a;t:for(;++r<o;){var f=t[r],l=e?e(f):f;if(f=n||0!==f?f:0,u&&l==l){for(var p=c.length;p--;)if(c[p]===l)continue t;e&&c.push(l),a.push(f)}else i(c,l,n)||(c!==a&&c.push(l),a.push(f))}return a}function ci(t,e){var n=-1,r=(e=_i(e,t)).length;if(!r)return!0;for(;++n<r;){var i=Uo(e[n]);if(\"__proto__\"===i&&!Tt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Oo(t,e);return null==o||delete o[Uo(Zo(e))]}function si(t,e,n,r){return Jr(t,e,n(wr(t,e)),r)}function fi(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function li(t,e){var n=t;return n instanceof Bn&&(n=n.value()),Re(e,function(t,e){return e.func.apply(e.thisArg,Pe([t],e.args))},n)}function pi(t,e,n){var r=t.length;if(r<2)return r?ai(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var u=t[i],a=-1;++a<r;)a!=i&&(o[i]=sr(o[i]||u,t[a],e,n));return ai(vr(o,1),e,n)}function hi(t,e,n){for(var i=-1,o=t.length,u=e.length,a={};++i<o;){var c=i<u?e[i]:r;n(a,t[i],c)}return a}function di(t){return Ku(t)?t:[]}function vi(t){return\"function\"==typeof t?t:nc}function _i(t,e){return $u(t)?t:go(t,e)?[t]:Mo(ya(t))}var yi=Vr;function gi(t,e,n){var i=t.length;return n=n===r?i:n,!e&&n>=i?t:ti(t,e,n)}var mi=ce||function(t){return fe.clearTimeout(t)};function bi(t,e){if(e)return t.slice();var n=t.length,r=$t?$t(n):new t.constructor(n);return t.copy(r),r}function wi(t){var e=new t.constructor(t.byteLength);return new Bt(e).set(new Bt(t)),e}function ji(t,e){var n=e?wi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Si(t,e){if(t!==e){var n=t!==r,i=null===t,o=t==t,u=aa(t),a=e!==r,c=null===e,s=e==e,f=aa(e);if(!c&&!f&&!u&&t>e||u&&a&&s&&!c&&!f||i&&a&&s||!n&&s||!o)return 1;if(!i&&!u&&!f&&t<e||f&&n&&o&&!i&&!u||c&&n&&o||!a&&o||!s)return-1}return 0}function Ai(t,e,n,r){for(var i=-1,o=t.length,u=n.length,a=-1,c=e.length,s=_n(o-u,0),f=rt(c+s),l=!r;++a<c;)f[a]=e[a];for(;++i<u;)(l||i<o)&&(f[n[i]]=t[i]);for(;s--;)f[a++]=t[i++];return f}function Oi(t,e,n,r){for(var i=-1,o=t.length,u=-1,a=n.length,c=-1,s=e.length,f=_n(o-a,0),l=rt(f+s),p=!r;++i<f;)l[i]=t[i];for(var h=i;++c<s;)l[h+c]=e[c];for(;++u<a;)(p||i<o)&&(l[h+n[u]]=t[i++]);return l}function xi(t,e){var n=-1,r=t.length;for(e||(e=rt(r));++n<r;)e[n]=t[n];return e}function Ci(t,e,n,i){var o=!n;n||(n={});for(var u=-1,a=e.length;++u<a;){var c=e[u],s=i?i(n[c],t[c],c,n,t):r;s===r&&(s=t[c]),o?rr(n,c,s):Qn(n,c,s)}return n}function Ii(t,e){return function(n,r){var i=$u(n)?Se:er,o=e?e():{};return i(n,t,oo(r,2),o)}}function ki(t){return Vr(function(e,n){var i=-1,o=n.length,u=o>1?n[o-1]:r,a=o>2?n[2]:r;for(u=t.length>3&&\"function\"==typeof u?(o--,u):r,a&&yo(n[0],n[1],a)&&(u=o<3?r:u,o=1),e=At(e);++i<o;){var c=n[i];c&&t(e,c,i,u)}return e})}function Ei(t,e){return function(n,r){if(null==n)return n;if(!Hu(n))return t(n,r);for(var i=n.length,o=e?i:-1,u=At(n);(e?o--:++o<i)&&!1!==r(u[o],o,u););return n}}function Pi(t){return function(e,n,r){for(var i=-1,o=At(e),u=r(e),a=u.length;a--;){var c=u[t?a:++i];if(!1===n(o[c],c,o))break}return e}}function Ri(t){return function(e){var n=nn(e=ya(e))?fn(e):r,i=n?n[0]:e.charAt(0),o=n?gi(n,1).join(\"\"):e.slice(1);return i[t]()+o}}function Ti(t){return function(e){return Re(Ja(Ba(e).replace(Zt,\"\")),t,\"\")}}function zi(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Dn(t.prototype),r=t.apply(n,e);return Qu(r)?r:n}}function Mi(t){return function(e,n,i){var o=At(e);if(!Hu(e)){var u=oo(n,3);e=Ea(e),n=function(t){return u(o[t],t,o)}}var a=t(e,n,i);return a>-1?o[u?e[a]:a]:r}}function Ui(t){return Qi(function(e){var n=e.length,o=n,u=Ln.prototype.thru;for(t&&e.reverse();o--;){var a=e[o];if(\"function\"!=typeof a)throw new Ct(i);if(u&&!c&&\"wrapper\"==ro(a))var c=new Ln([],!0)}for(o=c?o:n;++o<n;){var s=ro(a=e[o]),f=\"wrapper\"==s?no(a):r;c=f&&mo(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?c[ro(f[0])].apply(c,f[3]):1==a.length&&mo(a)?c[s]():c.thru(a)}return function(){var t=arguments,r=t[0];if(c&&1==t.length&&$u(r))return c.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Ni(t,e,n,i,o,u,a,s,f,l){var p=e&c,h=1&e,d=2&e,v=24&e,_=512&e,y=d?r:zi(t);return function c(){for(var g=arguments.length,m=rt(g),b=g;b--;)m[b]=arguments[b];if(v)var w=io(c),j=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(m,w);if(i&&(m=Ai(m,i,o,v)),u&&(m=Oi(m,u,a,v)),g-=j,v&&g<l){var S=un(m,w);return Wi(t,e,Ni,c.placeholder,n,m,S,s,f,l-g)}var A=h?n:this,O=d?A[t]:t;return g=m.length,s?m=function(t,e){for(var n=t.length,i=yn(e.length,n),o=xi(t);i--;){var u=e[i];t[i]=_o(u,n)?o[u]:r}return t}(m,s):_&&g>1&&m.reverse(),p&&f<g&&(m.length=f),this&&this!==fe&&this instanceof c&&(O=y||zi(O)),O.apply(A,m)}}function Fi(t,e){return function(n,r){return function(t,e,n,r){return gr(t,function(t,i,o){e(r,n(t),i,o)}),r}(n,t,e(r),{})}}function Di(t,e){return function(n,i){var o;if(n===r&&i===r)return e;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ui(n),i=ui(i)):(n=oi(n),i=oi(i)),o=t(n,i)}return o}}function qi(t){return Qi(function(e){return e=Ee(e,Ge(oo())),Vr(function(n){var r=this;return t(e,function(t){return je(t,r,n)})})})}function Li(t,e){var n=(e=e===r?\" \":ui(e)).length;if(n<2)return n?Kr(e,t):e;var i=Kr(e,pe(t/sn(e)));return nn(e)?gi(fn(i),0,t).join(\"\"):i.slice(0,t)}function Bi(t){return function(e,n,i){return i&&\"number\"!=typeof i&&yo(e,n,i)&&(n=i=r),e=pa(e),n===r?(n=e,e=0):n=pa(n),function(t,e,n,r){for(var i=-1,o=_n(pe((e-t)/(n||1)),0),u=rt(o);o--;)u[r?o:++i]=t,t+=n;return u}(e,n,i=i===r?e<n?1:-1:pa(i),t)}}function $i(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=va(e),n=va(n)),t(e,n)}}function Wi(t,e,n,i,o,u,c,s,f,l){var p=8&e;e|=p?a:64,4&(e&=~(p?64:a))||(e&=-4);var h=[t,e,o,p?u:r,p?c:r,p?r:u,p?r:c,s,f,l],d=n.apply(r,h);return mo(t)&&Co(d,h),d.placeholder=i,Eo(d,t,e)}function Hi(t){var e=St[t];return function(t,n){if(t=va(t),(n=null==n?0:yn(ha(n),292))&&$e(t)){var r=(ya(t)+\"e\").split(\"e\");return+((r=(ya(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var Ki=On&&1/an(new On([,-0]))[1]==s?function(t){return new On(t)}:ac;function Vi(t){return function(e){var n=lo(e);return n==w?rn(e):n==x?cn(e):function(t,e){return Ee(e,function(e){return[e,t[e]]})}(e,t(e))}}function Gi(t,e,n,o,s,f,l,p){var h=2&e;if(!h&&\"function\"!=typeof t)throw new Ct(i);var d=o?o.length:0;if(d||(e&=-97,o=s=r),l=l===r?l:_n(ha(l),0),p=p===r?p:ha(p),d-=s?s.length:0,64&e){var v=o,_=s;o=s=r}var y=h?r:no(t),g=[t,e,n,o,s,v,_,f,l,p];if(y&&function(t,e){var n=t[1],r=e[1],i=n|r,o=i<131,a=r==c&&8==n||r==c&&256==n&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!o&&!a)return t;1&r&&(t[2]=e[2],i|=1&n?0:4);var s=e[3];if(s){var f=t[3];t[3]=f?Ai(f,s,e[4]):s,t[4]=f?un(t[3],u):e[4]}(s=e[5])&&(f=t[5],t[5]=f?Oi(f,s,e[6]):s,t[6]=f?un(t[5],u):e[6]),(s=e[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?e[8]:yn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i}(g,y),t=g[0],e=g[1],n=g[2],o=g[3],s=g[4],!(p=g[9]=g[9]===r?h?0:t.length:_n(g[9]-d,0))&&24&e&&(e&=-25),e&&1!=e)m=8==e||16==e?function(t,e,n){var i=zi(t);return function o(){for(var u=arguments.length,a=rt(u),c=u,s=io(o);c--;)a[c]=arguments[c];var f=u<3&&a[0]!==s&&a[u-1]!==s?[]:un(a,s);return(u-=f.length)<n?Wi(t,e,Ni,o.placeholder,r,a,f,r,r,n-u):je(this&&this!==fe&&this instanceof o?i:t,this,a)}}(t,e,p):e!=a&&33!=e||s.length?Ni.apply(r,g):function(t,e,n,r){var i=1&e,o=zi(t);return function e(){for(var u=-1,a=arguments.length,c=-1,s=r.length,f=rt(s+a),l=this&&this!==fe&&this instanceof e?o:t;++c<s;)f[c]=r[c];for(;a--;)f[c++]=arguments[++u];return je(l,i?n:this,f)}}(t,e,n,o);else var m=function(t,e,n){var r=1&e,i=zi(t);return function e(){return(this&&this!==fe&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return Eo((y?Yr:Co)(m,g),t,e)}function Zi(t,e,n,i){return t===r||Du(t,Et[n])&&!Tt.call(i,n)?e:t}function Ji(t,e,n,i,o,u){return Qu(t)&&Qu(e)&&(u.set(e,t),Dr(t,e,r,Ji,u),u.delete(e)),t}function Yi(t){return ra(t)?r:t}function Xi(t,e,n,i,o,u){var a=1&n,c=t.length,s=e.length;if(c!=s&&!(a&&s>c))return!1;var f=u.get(t),l=u.get(e);if(f&&l)return f==e&&l==t;var p=-1,h=!0,d=2&n?new Kn:r;for(u.set(t,e),u.set(e,t);++p<c;){var v=t[p],_=e[p];if(i)var y=a?i(_,v,p,e,t,u):i(v,_,p,t,e,u);if(y!==r){if(y)continue;h=!1;break}if(d){if(!ze(e,function(t,e){if(!Je(d,e)&&(v===t||o(v,t,n,i,u)))return d.push(e)})){h=!1;break}}else if(v!==_&&!o(v,_,n,i,u)){h=!1;break}}return u.delete(t),u.delete(e),h}function Qi(t){return ko(Ao(t,r,Wo),t+\"\")}function to(t){return jr(t,Ea,so)}function eo(t){return jr(t,Pa,fo)}var no=In?function(t){return In.get(t)}:ac;function ro(t){for(var e=t.name+\"\",n=kn[e],r=Tt.call(kn,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function io(t){return(Tt.call(Fn,\"placeholder\")?Fn:t).placeholder}function oo(){var t=Fn.iteratee||rc;return t=t===rc?Tr:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function ao(t){for(var e=Ea(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,jo(i)]}return e}function co(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return Rr(n)?n:r}var so=ve?function(t){return null==t?[]:(t=At(t),Ce(ve(t),function(e){return Kt.call(t,e)}))}:dc,fo=ve?function(t){for(var e=[];t;)Pe(e,so(t)),t=Wt(t);return e}:dc,lo=Sr;function po(t,e,n){for(var r=-1,i=(e=_i(e,t)).length,o=!1;++r<i;){var u=Uo(e[r]);if(!(o=null!=t&&n(t,u)))break;t=t[u]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Xu(i)&&_o(u,i)&&($u(t)||Bu(t))}function ho(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Dn(Wt(t))}function vo(t){return $u(t)||Bu(t)||!!(Gt&&t&&t[Gt])}function _o(t,e){var n=typeof t;return!!(e=e??f)&&(\"number\"==n||\"symbol\"!=n&&_t.test(t))&&t>-1&&t%1==0&&t<e}function yo(t,e,n){if(!Qu(n))return!1;var r=typeof e;return!!(\"number\"==r?Hu(n)&&_o(e,n.length):\"string\"==r&&e in n)&&Du(n[e],t)}function go(t,e){if($u(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!aa(t))||X.test(t)||!Y.test(t)||null!=e&&t in At(e)}function mo(t){var e=ro(t),n=Fn[e];if(\"function\"!=typeof n||!(e in Bn.prototype))return!1;if(t===n)return!0;var r=no(n);return!!r&&t===r[0]}(jn&&lo(new jn(new ArrayBuffer(1)))!=P||Sn&&lo(new Sn)!=w||An&&lo(An.resolve())!=A||On&&lo(new On)!=x||xn&&lo(new xn)!=k)&&(lo=function(t){var e=Sr(t),n=e==S?t.constructor:r,i=n?No(n):\"\";if(i)switch(i){case En:return P;case Pn:return w;case Rn:return A;case Tn:return x;case zn:return k}return e});var bo=Pt?Ju:vc;function wo(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||Et)}function jo(t){return t==t&&!Qu(t)}function So(t,e){return function(n){return null!=n&&n[t]===e&&(e!==r||t in At(n))}}function Ao(t,e,n){return e=_n(e===r?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=_n(r.length-e,0),u=rt(o);++i<o;)u[i]=r[e+i];i=-1;for(var a=rt(e+1);++i<e;)a[i]=r[i];return a[e]=n(u),je(t,this,a)}}function Oo(t,e){return e.length<2?t:wr(t,ti(e,0,-1))}function xo(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var Co=Po(Yr),Io=le||function(t,e){return fe.setTimeout(t,e)},ko=Po(Xr);function Eo(t,e,n){var r=e+\"\";return ko(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return Ae(h,function(n){var r=\"_.\"+n[0];e&n[1]&&!Ie(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(ot);return e?e[1].split(ut):[]}(r),n)))}function Po(t){var e=0,n=0;return function(){var i=gn(),o=16-(i-n);if(n=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(r,arguments)}}function Ro(t,e){var n=-1,i=t.length,o=i-1;for(e=e===r?i:e;++n<e;){var u=Hr(n,o),a=t[u];t[u]=t[n],t[n]=a}return t.length=e,t}var To,zo,Mo=(To=Tu(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(Q,function(t,n,r,i){e.push(r?i.replace(st,\"$1\"):n||t)}),e},function(t){return 500===zo.size&&zo.clear(),t}),zo=To.cache,To);function Uo(t){if(\"string\"==typeof t||aa(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function No(t){if(null!=t){try{return Rt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Fo(t){if(t instanceof Bn)return t.clone();var e=new Ln(t.__wrapped__,t.__chain__);return e.__actions__=xi(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Do=Vr(function(t,e){return Ku(t)?sr(t,vr(e,1,Ku,!0)):[]}),qo=Vr(function(t,e){var n=Zo(e);return Ku(n)&&(n=r),Ku(t)?sr(t,vr(e,1,Ku,!0),oo(n,2)):[]}),Lo=Vr(function(t,e){var n=Zo(e);return Ku(n)&&(n=r),Ku(t)?sr(t,vr(e,1,Ku,!0),r,n):[]});function Bo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ha(n);return i<0&&(i=_n(r+i,0)),Ne(t,oo(e,3),i)}function $o(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return n!==r&&(o=ha(n),o=n<0?_n(i+o,0):yn(o,i-1)),Ne(t,oo(e,3),o,!0)}function Wo(t){return null!=t&&t.length?vr(t,1):[]}function Ho(t){return t&&t.length?t[0]:r}var Ko=Vr(function(t){var e=Ee(t,di);return e.length&&e[0]===t[0]?Cr(e):[]}),Vo=Vr(function(t){var e=Zo(t),n=Ee(t,di);return e===Zo(n)?e=r:n.pop(),n.length&&n[0]===t[0]?Cr(n,oo(e,2)):[]}),Go=Vr(function(t){var e=Zo(t),n=Ee(t,di);return(e=\"function\"==typeof e?e:r)&&n.pop(),n.length&&n[0]===t[0]?Cr(n,r,e):[]});function Zo(t){var e=null==t?0:t.length;return e?t[e-1]:r}var Jo=Vr(Yo);function Yo(t,e){return t&&t.length&&e&&e.length?$r(t,e):t}var Xo=Qi(function(t,e){var n=null==t?0:t.length,r=ir(t,e);return Wr(t,Ee(e,function(t){return _o(t,n)?+t:t}).sort(Si)),r});function Qo(t){return null==t?t:wn.call(t)}var tu=Vr(function(t){return ai(vr(t,1,Ku,!0))}),eu=Vr(function(t){var e=Zo(t);return Ku(e)&&(e=r),ai(vr(t,1,Ku,!0),oo(e,2))}),nu=Vr(function(t){var e=Zo(t);return e=\"function\"==typeof e?e:r,ai(vr(t,1,Ku,!0),r,e)});function ru(t){if(!t||!t.length)return[];var e=0;return t=Ce(t,function(t){if(Ku(t))return e=_n(t.length,e),!0}),Ke(e,function(e){return Ee(t,Be(e))})}function iu(t,e){if(!t||!t.length)return[];var n=ru(t);return null==e?n:Ee(n,function(t){return je(e,r,t)})}var ou=Vr(function(t,e){return Ku(t)?sr(t,e):[]}),uu=Vr(function(t){return pi(Ce(t,Ku))}),au=Vr(function(t){var e=Zo(t);return Ku(e)&&(e=r),pi(Ce(t,Ku),oo(e,2))}),cu=Vr(function(t){var e=Zo(t);return e=\"function\"==typeof e?e:r,pi(Ce(t,Ku),r,e)}),su=Vr(ru),fu=Vr(function(t){var e=t.length,n=e>1?t[e-1]:r;return n=\"function\"==typeof n?(t.pop(),n):r,iu(t,n)});function lu(t){var e=Fn(t);return e.__chain__=!0,e}function pu(t,e){return e(t)}var hu=Qi(function(t){var e=t.length,n=e?t[0]:0,i=this.__wrapped__,o=function(e){return ir(e,t)};return!(e>1||this.__actions__.length)&&i instanceof Bn&&_o(n)?((i=i.slice(n,+n+(e?1:0))).__actions__.push({func:pu,args:[o],thisArg:r}),new Ln(i,this.__chain__).thru(function(t){return e&&!t.length&&t.push(r),t})):this.thru(o)}),du=Ii(function(t,e,n){Tt.call(t,n)?++t[n]:rr(t,n,1)}),vu=Mi(Bo),_u=Mi($o);function yu(t,e){return($u(t)?Ae:fr)(t,oo(e,3))}function gu(t,e){return($u(t)?Oe:lr)(t,oo(e,3))}var mu=Ii(function(t,e,n){Tt.call(t,n)?t[n].push(e):rr(t,n,[e])}),bu=Vr(function(t,e,n){var r=-1,i=\"function\"==typeof e,o=Hu(t)?rt(t.length):[];return fr(t,function(t){o[++r]=i?je(e,t,n):Ir(t,e,n)}),o}),wu=Ii(function(t,e,n){rr(t,n,e)});function ju(t,e){return($u(t)?Ee:Ur)(t,oo(e,3))}var Su=Ii(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),Au=Vr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&yo(t,e[0],e[1])?e=[]:n>2&&yo(e[0],e[1],e[2])&&(e=[e[0]]),Lr(t,vr(e,1),[])}),Ou=se||function(){return fe.Date.now()};function xu(t,e,n){return e=n?r:e,e=t&&null==e?t.length:e,Gi(t,c,r,r,r,r,e)}function Cu(t,e){var n;if(\"function\"!=typeof e)throw new Ct(i);return t=ha(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=r),n}}var Iu=Vr(function(t,e,n){var r=1;if(n.length){var i=un(n,io(Iu));r|=a}return Gi(t,r,e,n,i)}),ku=Vr(function(t,e,n){var r=3;if(n.length){var i=un(n,io(ku));r|=a}return Gi(e,r,t,n,i)});function Eu(t,e,n){var o,u,a,c,s,f,l=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new Ct(i);function v(e){var n=o,i=u;return o=u=r,l=e,c=t.apply(i,n)}function _(t){var n=t-f;return f===r||n>=e||n<0||h&&t-l>=a}function y(){var t=Ou();if(_(t))return g(t);s=Io(y,function(t){var n=e-(t-f);return h?yn(n,a-(t-l)):n}(t))}function g(t){return s=r,d&&o?v(t):(o=u=r,c)}function m(){var t=Ou(),n=_(t);if(o=arguments,u=this,f=t,n){if(s===r)return function(t){return l=t,s=Io(y,e),p?v(t):c}(f);if(h)return mi(s),s=Io(y,e),v(f)}return s===r&&(s=Io(y,e)),c}return e=va(e)||0,Qu(n)&&(p=!!n.leading,a=(h=\"maxWait\"in n)?_n(va(n.maxWait)||0,e):a,d=\"trailing\"in n?!!n.trailing:d),m.cancel=function(){s!==r&&mi(s),l=0,o=f=u=s=r},m.flush=function(){return s===r?c:g(Ou())},m}var Pu=Vr(function(t,e){return cr(t,1,e)}),Ru=Vr(function(t,e,n){return cr(t,va(e)||0,n)});function Tu(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new Ct(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return n.cache=o.set(i,u)||o,u};return n.cache=new(Tu.Cache||Hn),n}function zu(t){if(\"function\"!=typeof t)throw new Ct(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Tu.Cache=Hn;var Mu=yi(function(t,e){var n=(e=1==e.length&&$u(e[0])?Ee(e[0],Ge(oo())):Ee(vr(e,1),Ge(oo()))).length;return Vr(function(r){for(var i=-1,o=yn(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return je(t,this,r)})}),Uu=Vr(function(t,e){var n=un(e,io(Uu));return Gi(t,a,r,e,n)}),Nu=Vr(function(t,e){var n=un(e,io(Nu));return Gi(t,64,r,e,n)}),Fu=Qi(function(t,e){return Gi(t,256,r,r,r,e)});function Du(t,e){return t===e||t!=t&&e!=e}var qu=$i(Ar),Lu=$i(function(t,e){return t>=e}),Bu=kr(function(){return arguments}())?kr:function(t){return ta(t)&&Tt.call(t,\"callee\")&&!Kt.call(t,\"callee\")},$u=rt.isArray,Wu=_e?Ge(_e):function(t){return ta(t)&&Sr(t)==E};function Hu(t){return null!=t&&Xu(t.length)&&!Ju(t)}function Ku(t){return ta(t)&&Hu(t)}var Vu=Me||vc,Gu=ye?Ge(ye):function(t){return ta(t)&&Sr(t)==y};function Zu(t){if(!ta(t))return!1;var e=Sr(t);return e==g||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ra(t)}function Ju(t){if(!Qu(t))return!1;var e=Sr(t);return e==m||e==b||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Yu(t){return\"number\"==typeof t&&t==ha(t)}function Xu(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=f}function Qu(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function ta(t){return null!=t&&\"object\"==typeof t}var ea=ge?Ge(ge):function(t){return ta(t)&&lo(t)==w};function na(t){return\"number\"==typeof t||ta(t)&&Sr(t)==j}function ra(t){if(!ta(t)||Sr(t)!=S)return!1;var e=Wt(t);if(null===e)return!0;var n=Tt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&Rt.call(n)==Nt}var ia=me?Ge(me):function(t){return ta(t)&&Sr(t)==O},oa=be?Ge(be):function(t){return ta(t)&&lo(t)==x};function ua(t){return\"string\"==typeof t||!$u(t)&&ta(t)&&Sr(t)==C}function aa(t){return\"symbol\"==typeof t||ta(t)&&Sr(t)==I}var ca=we?Ge(we):function(t){return ta(t)&&Xu(t.length)&&!!re[Sr(t)]},sa=$i(Mr),fa=$i(function(t,e){return t<=e});function la(t){if(!t)return[];if(Hu(t))return ua(t)?fn(t):xi(t);if(Yt&&t[Yt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Yt]());var e=lo(t);return(e==w?rn:e==x?an:Da)(t)}function pa(t){return t?(t=va(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ha(t){var e=pa(t),n=e%1;return e==e?n?e-n:e:0}function da(t){return t?or(ha(t),0,p):0}function va(t){if(\"number\"==typeof t)return t;if(aa(t))return l;if(Qu(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=Qu(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Ve(t);var n=ht.test(t);return n||vt.test(t)?ae(t.slice(2),n?2:8):pt.test(t)?l:+t}function _a(t){return Ci(t,Pa(t))}function ya(t){return null==t?\"\":ui(t)}var ga=ki(function(t,e){if(wo(e)||Hu(e))Ci(e,Ea(e),t);else for(var n in e)Tt.call(e,n)&&Qn(t,n,e[n])}),ma=ki(function(t,e){Ci(e,Pa(e),t)}),ba=ki(function(t,e,n,r){Ci(e,Pa(e),t,r)}),wa=ki(function(t,e,n,r){Ci(e,Ea(e),t,r)}),ja=Qi(ir),Sa=Vr(function(t,e){t=At(t);var n=-1,i=e.length,o=i>2?e[2]:r;for(o&&yo(e[0],e[1],o)&&(i=1);++n<i;)for(var u=e[n],a=Pa(u),c=-1,s=a.length;++c<s;){var f=a[c],l=t[f];(l===r||Du(l,Et[f])&&!Tt.call(t,f))&&(t[f]=u[f])}return t}),Aa=Vr(function(t){return t.push(r,Ji),je(Ta,r,t)});function Oa(t,e,n){var i=null==t?r:wr(t,e);return i===r?n:i}function xa(t,e){return null!=t&&po(t,e,xr)}var Ca=Fi(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Ut.call(e)),t[e]=n},Qa(nc)),Ia=Fi(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=Ut.call(e)),Tt.call(t,e)?t[e].push(n):t[e]=[n]},oo),ka=Vr(Ir);function Ea(t){return Hu(t)?Gn(t):zr(t)}function Pa(t){return Hu(t)?Gn(t,!0):function(t){if(!Qu(t))return function(t){var e=[];if(null!=t)for(var n in At(t))e.push(n);return e}(t);var e=wo(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&Tt.call(t,r))&&n.push(r);return n}(t)}var Ra=ki(function(t,e,n){Dr(t,e,n)}),Ta=ki(function(t,e,n,r){Dr(t,e,n,r)}),za=Qi(function(t,e){var n={};if(null==t)return n;var r=!1;e=Ee(e,function(e){return e=_i(e,t),r||(r=e.length>1),e}),Ci(t,eo(t),n),r&&(n=ur(n,7,Yi));for(var i=e.length;i--;)ci(n,e[i]);return n}),Ma=Qi(function(t,e){return null==t?{}:function(t,e){return Br(t,e,function(e,n){return xa(t,n)})}(t,e)});function Ua(t,e){if(null==t)return{};var n=Ee(eo(t),function(t){return[t]});return e=oo(e),Br(t,n,function(t,n){return e(t,n[0])})}var Na=Vi(Ea),Fa=Vi(Pa);function Da(t){return null==t?[]:Ze(t,Ea(t))}var qa=Ti(function(t,e,n){return e=e.toLowerCase(),t+(n?La(e):e)});function La(t){return Za(ya(t).toLowerCase())}function Ba(t){return(t=ya(t))&&t.replace(yt,Qe).replace(Jt,\"\")}var $a=Ti(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Wa=Ti(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),Ha=Ri(\"toLowerCase\"),Ka=Ti(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Va=Ti(function(t,e,n){return t+(n?\" \":\"\")+Za(e)}),Ga=Ti(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Za=Ri(\"toUpperCase\");function Ja(t,e,n){return t=ya(t),(e=n?r:e)===r?function(t){return te.test(t)}(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(e)||[]}var Ya=Vr(function(t,e){try{return je(t,r,e)}catch(t){return Zu(t)?t:new wt(t)}}),Xa=Qi(function(t,e){return Ae(e,function(e){e=Uo(e),rr(t,e,Iu(t[e],t))}),t});function Qa(t){return function(){return t}}var tc=Ui(),ec=Ui(!0);function nc(t){return t}function rc(t){return Tr(\"function\"==typeof t?t:ur(t,1))}var ic=Vr(function(t,e){return function(n){return Ir(n,t,e)}}),oc=Vr(function(t,e){return function(n){return Ir(t,n,e)}});function uc(t,e,n){var r=Ea(e),i=br(e,r);null!=n||Qu(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=br(e,Ea(e)));var o=!(Qu(n)&&\"chain\"in n&&!n.chain),u=Ju(t);return Ae(i,function(n){var r=e[n];t[n]=r,u&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=xi(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Pe([this.value()],arguments))})}),t}function ac(){}var cc=qi(Ee),sc=qi(xe),fc=qi(ze);function lc(t){return go(t)?Be(Uo(t)):function(t){return function(e){return wr(e,t)}}(t)}var pc=Bi(),hc=Bi(!0);function dc(){return[]}function vc(){return!1}var _c,yc=Di(function(t,e){return t+e},0),gc=Hi(\"ceil\"),mc=Di(function(t,e){return t/e},1),bc=Hi(\"floor\"),wc=Di(function(t,e){return t*e},1),jc=Hi(\"round\"),Sc=Di(function(t,e){return t-e},0);return Fn.after=function(t,e){if(\"function\"!=typeof e)throw new Ct(i);return t=ha(t),function(){if(--t<1)return e.apply(this,arguments)}},Fn.ary=xu,Fn.assign=ga,Fn.assignIn=ma,Fn.assignInWith=ba,Fn.assignWith=wa,Fn.at=ja,Fn.before=Cu,Fn.bind=Iu,Fn.bindAll=Xa,Fn.bindKey=ku,Fn.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return $u(t)?t:[t]},Fn.chain=lu,Fn.chunk=function(t,e,n){e=(n?yo(t,e,n):e===r)?1:_n(ha(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,u=0,a=rt(pe(i/e));o<i;)a[u++]=ti(t,o,o+=e);return a},Fn.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i},Fn.concat=function(){var t=arguments.length;if(!t)return[];for(var e=rt(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return Pe($u(n)?xi(n):[n],vr(e,1))},Fn.cond=function(t){var e=null==t?0:t.length,n=oo();return t=e?Ee(t,function(t){if(\"function\"!=typeof t[1])throw new Ct(i);return[n(t[0]),t[1]]}):[],Vr(function(n){for(var r=-1;++r<e;){var i=t[r];if(je(i[0],this,n))return je(i[1],this,n)}})},Fn.conforms=function(t){return function(t){var e=Ea(t);return function(n){return ar(n,t,e)}}(ur(t,1))},Fn.constant=Qa,Fn.countBy=du,Fn.create=function(t,e){var n=Dn(t);return null==e?n:nr(n,e)},Fn.curry=function t(e,n,i){var o=Gi(e,8,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Fn.curryRight=function t(e,n,i){var o=Gi(e,16,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Fn.debounce=Eu,Fn.defaults=Sa,Fn.defaultsDeep=Aa,Fn.defer=Pu,Fn.delay=Ru,Fn.difference=Do,Fn.differenceBy=qo,Fn.differenceWith=Lo,Fn.drop=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=n||e===r?1:ha(e))<0?0:e,i):[]},Fn.dropRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,0,(e=i-(e=n||e===r?1:ha(e)))<0?0:e):[]},Fn.dropRightWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!0,!0):[]},Fn.dropWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!0):[]},Fn.fill=function(t,e,n,i){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&yo(t,e,n)&&(n=0,i=o),function(t,e,n,i){var o=t.length;for((n=ha(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:ha(i))<0&&(i+=o),i=n>i?0:da(i);n<i;)t[n++]=e;return t}(t,e,n,i)):[]},Fn.filter=function(t,e){return($u(t)?Ce:dr)(t,oo(e,3))},Fn.flatMap=function(t,e){return vr(ju(t,e),1)},Fn.flatMapDeep=function(t,e){return vr(ju(t,e),s)},Fn.flatMapDepth=function(t,e,n){return n=n===r?1:ha(n),vr(ju(t,e),n)},Fn.flatten=Wo,Fn.flattenDeep=function(t){return null!=t&&t.length?vr(t,s):[]},Fn.flattenDepth=function(t,e){return null!=t&&t.length?vr(t,e=e===r?1:ha(e)):[]},Fn.flip=function(t){return Gi(t,512)},Fn.flow=tc,Fn.flowRight=ec,Fn.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];rr(r,i[0],i[1])}return r},Fn.functions=function(t){return null==t?[]:br(t,Ea(t))},Fn.functionsIn=function(t){return null==t?[]:br(t,Pa(t))},Fn.groupBy=mu,Fn.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Fn.intersection=Ko,Fn.intersectionBy=Vo,Fn.intersectionWith=Go,Fn.invert=Ca,Fn.invertBy=Ia,Fn.invokeMap=bu,Fn.iteratee=rc,Fn.keyBy=wu,Fn.keys=Ea,Fn.keysIn=Pa,Fn.map=ju,Fn.mapKeys=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,e(t,r,i),t)}),n},Fn.mapValues=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,r,e(t,r,i))}),n},Fn.matches=function(t){return Nr(ur(t,1))},Fn.matchesProperty=function(t,e){return Fr(t,ur(e,1))},Fn.memoize=Tu,Fn.merge=Ra,Fn.mergeWith=Ta,Fn.method=ic,Fn.methodOf=oc,Fn.mixin=uc,Fn.negate=zu,Fn.nthArg=function(t){return t=ha(t),Vr(function(e){return qr(e,t)})},Fn.omit=za,Fn.omitBy=function(t,e){return Ua(t,zu(oo(e)))},Fn.once=function(t){return Cu(2,t)},Fn.orderBy=function(t,e,n,i){return null==t?[]:($u(e)||(e=null==e?[]:[e]),$u(n=i?r:n)||(n=null==n?[]:[n]),Lr(t,e,n))},Fn.over=cc,Fn.overArgs=Mu,Fn.overEvery=sc,Fn.overSome=fc,Fn.partial=Uu,Fn.partialRight=Nu,Fn.partition=Su,Fn.pick=Ma,Fn.pickBy=Ua,Fn.property=lc,Fn.propertyOf=function(t){return function(e){return null==t?r:wr(t,e)}},Fn.pull=Jo,Fn.pullAll=Yo,Fn.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?$r(t,e,oo(n,2)):t},Fn.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?$r(t,e,r,n):t},Fn.pullAt=Xo,Fn.range=pc,Fn.rangeRight=hc,Fn.rearg=Fu,Fn.reject=function(t,e){return($u(t)?Ce:dr)(t,zu(oo(e,3)))},Fn.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=oo(e,3);++r<o;){var u=t[r];e(u,r,t)&&(n.push(u),i.push(r))}return Wr(t,i),n},Fn.rest=function(t,e){if(\"function\"!=typeof t)throw new Ct(i);return Vr(t,e=e===r?e:ha(e))},Fn.reverse=Qo,Fn.sampleSize=function(t,e,n){return e=(n?yo(t,e,n):e===r)?1:ha(e),($u(t)?Jn:Zr)(t,e)},Fn.set=function(t,e,n){return null==t?t:Jr(t,e,n)},Fn.setWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:Jr(t,e,n,i)},Fn.shuffle=function(t){return($u(t)?Yn:Qr)(t)},Fn.slice=function(t,e,n){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&yo(t,e,n)?(e=0,n=i):(e=null==e?0:ha(e),n=n===r?i:ha(n)),ti(t,e,n)):[]},Fn.sortBy=Au,Fn.sortedUniq=function(t){return t&&t.length?ii(t):[]},Fn.sortedUniqBy=function(t,e){return t&&t.length?ii(t,oo(e,2)):[]},Fn.split=function(t,e,n){return n&&\"number\"!=typeof n&&yo(t,e,n)&&(e=n=r),(n=n===r?p:n>>>0)?(t=ya(t))&&(\"string\"==typeof e||null!=e&&!ia(e))&&!(e=ui(e))&&nn(t)?gi(fn(t),0,n):t.split(e,n):[]},Fn.spread=function(t,e){if(\"function\"!=typeof t)throw new Ct(i);return e=null==e?0:_n(ha(e),0),Vr(function(n){var r=n[e],i=gi(n,0,e);return r&&Pe(i,r),je(t,this,i)})},Fn.tail=function(t){var e=null==t?0:t.length;return e?ti(t,1,e):[]},Fn.take=function(t,e,n){return t&&t.length?ti(t,0,(e=n||e===r?1:ha(e))<0?0:e):[]},Fn.takeRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=i-(e=n||e===r?1:ha(e)))<0?0:e,i):[]},Fn.takeRightWhile=function(t,e){return t&&t.length?fi(t,oo(e,3),!1,!0):[]},Fn.takeWhile=function(t,e){return t&&t.length?fi(t,oo(e,3)):[]},Fn.tap=function(t,e){return e(t),t},Fn.throttle=function(t,e,n){var r=!0,o=!0;if(\"function\"!=typeof t)throw new Ct(i);return Qu(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),Eu(t,e,{leading:r,maxWait:e,trailing:o})},Fn.thru=pu,Fn.toArray=la,Fn.toPairs=Na,Fn.toPairsIn=Fa,Fn.toPath=function(t){return $u(t)?Ee(t,Uo):aa(t)?[t]:xi(Mo(ya(t)))},Fn.toPlainObject=_a,Fn.transform=function(t,e,n){var r=$u(t),i=r||Vu(t)||ca(t);if(e=oo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Qu(t)&&Ju(o)?Dn(Wt(t)):{}}return(i?Ae:gr)(t,function(t,r,i){return e(n,t,r,i)}),n},Fn.unary=function(t){return xu(t,1)},Fn.union=tu,Fn.unionBy=eu,Fn.unionWith=nu,Fn.uniq=function(t){return t&&t.length?ai(t):[]},Fn.uniqBy=function(t,e){return t&&t.length?ai(t,oo(e,2)):[]},Fn.uniqWith=function(t,e){return e=\"function\"==typeof e?e:r,t&&t.length?ai(t,r,e):[]},Fn.unset=function(t,e){return null==t||ci(t,e)},Fn.unzip=ru,Fn.unzipWith=iu,Fn.update=function(t,e,n){return null==t?t:si(t,e,vi(n))},Fn.updateWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:si(t,e,vi(n),i)},Fn.values=Da,Fn.valuesIn=function(t){return null==t?[]:Ze(t,Pa(t))},Fn.without=ou,Fn.words=Ja,Fn.wrap=function(t,e){return Uu(vi(e),t)},Fn.xor=uu,Fn.xorBy=au,Fn.xorWith=cu,Fn.zip=su,Fn.zipObject=function(t,e){return hi(t||[],e||[],Qn)},Fn.zipObjectDeep=function(t,e){return hi(t||[],e||[],Jr)},Fn.zipWith=fu,Fn.entries=Na,Fn.entriesIn=Fa,Fn.extend=ma,Fn.extendWith=ba,uc(Fn,Fn),Fn.add=yc,Fn.attempt=Ya,Fn.camelCase=qa,Fn.capitalize=La,Fn.ceil=gc,Fn.clamp=function(t,e,n){return n===r&&(n=e,e=r),n!==r&&(n=(n=va(n))==n?n:0),e!==r&&(e=(e=va(e))==e?e:0),or(va(t),e,n)},Fn.clone=function(t){return ur(t,4)},Fn.cloneDeep=function(t){return ur(t,5)},Fn.cloneDeepWith=function(t,e){return ur(t,5,e=\"function\"==typeof e?e:r)},Fn.cloneWith=function(t,e){return ur(t,4,e=\"function\"==typeof e?e:r)},Fn.conformsTo=function(t,e){return null==e||ar(t,e,Ea(e))},Fn.deburr=Ba,Fn.defaultTo=function(t,e){return null==t||t!=t?e:t},Fn.divide=mc,Fn.endsWith=function(t,e,n){t=ya(t),e=ui(e);var i=t.length,o=n=n===r?i:or(ha(n),0,i);return(n-=e.length)>=0&&t.slice(n,o)==e},Fn.eq=Du,Fn.escape=function(t){return(t=ya(t))&&V.test(t)?t.replace(H,tn):t},Fn.escapeRegExp=function(t){return(t=ya(t))&&et.test(t)?t.replace(tt,\"\\\\$&\"):t},Fn.every=function(t,e,n){var i=$u(t)?xe:pr;return n&&yo(t,e,n)&&(e=r),i(t,oo(e,3))},Fn.find=vu,Fn.findIndex=Bo,Fn.findKey=function(t,e){return Ue(t,oo(e,3),gr)},Fn.findLast=_u,Fn.findLastIndex=$o,Fn.findLastKey=function(t,e){return Ue(t,oo(e,3),mr)},Fn.floor=bc,Fn.forEach=yu,Fn.forEachRight=gu,Fn.forIn=function(t,e){return null==t?t:_r(t,oo(e,3),Pa)},Fn.forInRight=function(t,e){return null==t?t:yr(t,oo(e,3),Pa)},Fn.forOwn=function(t,e){return t&&gr(t,oo(e,3))},Fn.forOwnRight=function(t,e){return t&&mr(t,oo(e,3))},Fn.get=Oa,Fn.gt=qu,Fn.gte=Lu,Fn.has=function(t,e){return null!=t&&po(t,e,Or)},Fn.hasIn=xa,Fn.head=Ho,Fn.identity=nc,Fn.includes=function(t,e,n,r){t=Hu(t)?t:Da(t),n=n&&!r?ha(n):0;var i=t.length;return n<0&&(n=_n(i+n,0)),ua(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&Fe(t,e,n)>-1},Fn.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ha(n);return i<0&&(i=_n(r+i,0)),Fe(t,e,i)},Fn.inRange=function(t,e,n){return e=pa(e),n===r?(n=e,e=0):n=pa(n),function(t,e,n){return t>=yn(e,n)&&t<_n(e,n)}(t=va(t),e,n)},Fn.invoke=ka,Fn.isArguments=Bu,Fn.isArray=$u,Fn.isArrayBuffer=Wu,Fn.isArrayLike=Hu,Fn.isArrayLikeObject=Ku,Fn.isBoolean=function(t){return!0===t||!1===t||ta(t)&&Sr(t)==_},Fn.isBuffer=Vu,Fn.isDate=Gu,Fn.isElement=function(t){return ta(t)&&1===t.nodeType&&!ra(t)},Fn.isEmpty=function(t){if(null==t)return!0;if(Hu(t)&&($u(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Vu(t)||ca(t)||Bu(t)))return!t.length;var e=lo(t);if(e==w||e==x)return!t.size;if(wo(t))return!zr(t).length;for(var n in t)if(Tt.call(t,n))return!1;return!0},Fn.isEqual=function(t,e){return Er(t,e)},Fn.isEqualWith=function(t,e,n){var i=(n=\"function\"==typeof n?n:r)?n(t,e):r;return i===r?Er(t,e,r,n):!!i},Fn.isError=Zu,Fn.isFinite=function(t){return\"number\"==typeof t&&$e(t)},Fn.isFunction=Ju,Fn.isInteger=Yu,Fn.isLength=Xu,Fn.isMap=ea,Fn.isMatch=function(t,e){return t===e||Pr(t,e,ao(e))},Fn.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:r,Pr(t,e,ao(e),n)},Fn.isNaN=function(t){return na(t)&&t!=+t},Fn.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Rr(t)},Fn.isNil=function(t){return null==t},Fn.isNull=function(t){return null===t},Fn.isNumber=na,Fn.isObject=Qu,Fn.isObjectLike=ta,Fn.isPlainObject=ra,Fn.isRegExp=ia,Fn.isSafeInteger=function(t){return Yu(t)&&t>=-9007199254740991&&t<=f},Fn.isSet=oa,Fn.isString=ua,Fn.isSymbol=aa,Fn.isTypedArray=ca,Fn.isUndefined=function(t){return t===r},Fn.isWeakMap=function(t){return ta(t)&&lo(t)==k},Fn.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==Sr(t)},Fn.join=function(t,e){return null==t?\"\":dn.call(t,e)},Fn.kebabCase=$a,Fn.last=Zo,Fn.lastIndexOf=function(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=ha(n))<0?_n(i+o,0):yn(o,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Ne(t,qe,o,!0)},Fn.lowerCase=Wa,Fn.lowerFirst=Ha,Fn.lt=sa,Fn.lte=fa,Fn.max=function(t){return t&&t.length?hr(t,nc,Ar):r},Fn.maxBy=function(t,e){return t&&t.length?hr(t,oo(e,2),Ar):r},Fn.mean=function(t){return Le(t,nc)},Fn.meanBy=function(t,e){return Le(t,oo(e,2))},Fn.min=function(t){return t&&t.length?hr(t,nc,Mr):r},Fn.minBy=function(t,e){return t&&t.length?hr(t,oo(e,2),Mr):r},Fn.stubArray=dc,Fn.stubFalse=vc,Fn.stubObject=function(){return{}},Fn.stubString=function(){return\"\"},Fn.stubTrue=function(){return!0},Fn.multiply=wc,Fn.nth=function(t,e){return t&&t.length?qr(t,ha(e)):r},Fn.noConflict=function(){return fe._===this&&(fe._=Ft),this},Fn.noop=ac,Fn.now=Ou,Fn.pad=function(t,e,n){t=ya(t);var r=(e=ha(e))?sn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Li(de(i),n)+t+Li(pe(i),n)},Fn.padEnd=function(t,e,n){t=ya(t);var r=(e=ha(e))?sn(t):0;return e&&r<e?t+Li(e-r,n):t},Fn.padStart=function(t,e,n){t=ya(t);var r=(e=ha(e))?sn(t):0;return e&&r<e?Li(e-r,n)+t:t},Fn.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),mn(ya(t).replace(nt,\"\"),e||0)},Fn.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&yo(t,e,n)&&(e=n=r),n===r&&(\"boolean\"==typeof e?(n=e,e=r):\"boolean\"==typeof t&&(n=t,t=r)),t===r&&e===r?(t=0,e=1):(t=pa(t),e===r?(e=t,t=0):e=pa(e)),t>e){var i=t;t=e,e=i}if(n||t%1||e%1){var o=bn();return yn(t+o*(e-t+ue(\"1e-\"+((o+\"\").length-1))),e)}return Hr(t,e)},Fn.reduce=function(t,e,n){var r=$u(t)?Re:We,i=arguments.length<3;return r(t,oo(e,4),n,i,fr)},Fn.reduceRight=function(t,e,n){var r=$u(t)?Te:We,i=arguments.length<3;return r(t,oo(e,4),n,i,lr)},Fn.repeat=function(t,e,n){return e=(n?yo(t,e,n):e===r)?1:ha(e),Kr(ya(t),e)},Fn.replace=function(){var t=arguments,e=ya(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Fn.result=function(t,e,n){var i=-1,o=(e=_i(e,t)).length;for(o||(o=1,t=r);++i<o;){var u=null==t?r:t[Uo(e[i])];u===r&&(i=o,u=n),t=Ju(u)?u.call(t):u}return t},Fn.round=jc,Fn.runInContext=t,Fn.sample=function(t){return($u(t)?Zn:Gr)(t)},Fn.size=function(t){if(null==t)return 0;if(Hu(t))return ua(t)?sn(t):t.length;var e=lo(t);return e==w||e==x?t.size:zr(t).length},Fn.snakeCase=Ka,Fn.some=function(t,e,n){var i=$u(t)?ze:ei;return n&&yo(t,e,n)&&(e=r),i(t,oo(e,3))},Fn.sortedIndex=function(t,e){return ni(t,e)},Fn.sortedIndexBy=function(t,e,n){return ri(t,e,oo(n,2))},Fn.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=ni(t,e);if(r<n&&Du(t[r],e))return r}return-1},Fn.sortedLastIndex=function(t,e){return ni(t,e,!0)},Fn.sortedLastIndexBy=function(t,e,n){return ri(t,e,oo(n,2),!0)},Fn.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=ni(t,e,!0)-1;if(Du(t[n],e))return n}return-1},Fn.startCase=Va,Fn.startsWith=function(t,e,n){return t=ya(t),n=null==n?0:or(ha(n),0,t.length),e=ui(e),t.slice(n,n+e.length)==e},Fn.subtract=Sc,Fn.sum=function(t){return t&&t.length?He(t,nc):0},Fn.sumBy=function(t,e){return t&&t.length?He(t,oo(e,2)):0},Fn.template=function(t,e,n){var i=Fn.templateSettings;n&&yo(t,e,n)&&(e=r),t=ya(t),e=wa({},e,i,Zi);var o=wa({},e.imports,i.imports,Zi),u=Ea(o),a=Ze(o,u);Ae(u,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,f=0,l=e.interpolate||gt,p=\"__p += '\",h=Ot((e.escape||gt).source+\"|\"+l.source+\"|\"+(l===J?ft:gt).source+\"|\"+(e.evaluate||gt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Tt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ne+\"]\")+\"\\n\";t.replace(h,function(e,n,r,i,o,u){return r||(r=i),p+=t.slice(f,u).replace(mt,en),n&&(c=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(s=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),f=u+e.length,e}),p+=\"';\\n\";var v=Tt.call(e,\"variable\")&&e.variable;if(v){if(ct.test(v))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(L,\"\"):p).replace(B,\"$1\").replace($,\"$1;\"),p=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var _=Ya(function(){return jt(u,d+\"return \"+p).apply(r,a)});if(_.source=p,Zu(_))throw _;return _},Fn.times=function(t,e){if((t=ha(t))<1||t>f)return[];var n=p,r=yn(t,p);e=oo(e),t-=p;for(var i=Ke(r,e);++n<t;)e(n);return i},Fn.toFinite=pa,Fn.toInteger=ha,Fn.toLength=da,Fn.toLower=function(t){return ya(t).toLowerCase()},Fn.toNumber=va,Fn.toSafeInteger=function(t){return t?or(ha(t),-9007199254740991,f):0===t?t:0},Fn.toString=ya,Fn.toUpper=function(t){return ya(t).toUpperCase()},Fn.trim=function(t,e,n){if((t=ya(t))&&(n||e===r))return Ve(t);if(!t||!(e=ui(e)))return t;var i=fn(t),o=fn(e);return gi(i,Ye(i,o),Xe(i,o)+1).join(\"\")},Fn.trimEnd=function(t,e,n){if((t=ya(t))&&(n||e===r))return t.slice(0,ln(t)+1);if(!t||!(e=ui(e)))return t;var i=fn(t);return gi(i,0,Xe(i,fn(e))+1).join(\"\")},Fn.trimStart=function(t,e,n){if((t=ya(t))&&(n||e===r))return t.replace(nt,\"\");if(!t||!(e=ui(e)))return t;var i=fn(t);return gi(i,Ye(i,fn(e))).join(\"\")},Fn.truncate=function(t,e){var n=30,i=\"...\";if(Qu(e)){var o=\"separator\"in e?e.separator:o;n=\"length\"in e?ha(e.length):n,i=\"omission\"in e?ui(e.omission):i}var u=(t=ya(t)).length;if(nn(t)){var a=fn(t);u=a.length}if(n>=u)return t;var c=n-sn(i);if(c<1)return i;var s=a?gi(a,0,c).join(\"\"):t.slice(0,c);if(o===r)return s+i;if(a&&(c+=s.length-c),ia(o)){if(t.slice(c).search(o)){var f,l=s;for(o.global||(o=Ot(o.source,ya(lt.exec(o))+\"g\")),o.lastIndex=0;f=o.exec(l);)var p=f.index;s=s.slice(0,p===r?c:p)}}else if(t.indexOf(ui(o),c)!=c){var h=s.lastIndexOf(o);h>-1&&(s=s.slice(0,h))}return s+i},Fn.unescape=function(t){return(t=ya(t))&&K.test(t)?t.replace(W,pn):t},Fn.uniqueId=function(t){var e=++zt;return ya(t)+e},Fn.upperCase=Ga,Fn.upperFirst=Za,Fn.each=yu,Fn.eachRight=gu,Fn.first=Ho,uc(Fn,(_c={},gr(Fn,function(t,e){Tt.call(Fn.prototype,e)||(_c[e]=t)}),_c),{chain:!1}),Fn.VERSION=\"4.18.1\",Ae([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Fn[t].placeholder=Fn}),Ae([\"drop\",\"take\"],function(t,e){Bn.prototype[t]=function(n){n=n===r?1:_n(ha(n),0);var i=this.__filtered__&&!e?new Bn(this):this.clone();return i.__filtered__?i.__takeCount__=yn(n,i.__takeCount__):i.__views__.push({size:yn(n,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Bn.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),Ae([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=1==n||3==n;Bn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:oo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),Ae([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");Bn.prototype[t]=function(){return this[n](1).value()[0]}}),Ae([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");Bn.prototype[t]=function(){return this.__filtered__?new Bn(this):this[n](1)}}),Bn.prototype.compact=function(){return this.filter(nc)},Bn.prototype.find=function(t){return this.filter(t).head()},Bn.prototype.findLast=function(t){return this.reverse().find(t)},Bn.prototype.invokeMap=Vr(function(t,e){return\"function\"==typeof t?new Bn(this):this.map(function(n){return Ir(n,t,e)})}),Bn.prototype.reject=function(t){return this.filter(zu(oo(t)))},Bn.prototype.slice=function(t,e){t=ha(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Bn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==r&&(n=(e=ha(e))<0?n.dropRight(-e):n.take(e-t)),n)},Bn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Bn.prototype.toArray=function(){return this.take(p)},gr(Bn.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Fn[i?\"take\"+(\"last\"==e?\"Right\":\"\"):e],u=i||/^find/.test(e);o&&(Fn.prototype[e]=function(){var e=this.__wrapped__,a=i?[1]:arguments,c=e instanceof Bn,s=a[0],f=c||$u(e),l=function(t){var e=o.apply(Fn,Pe([t],a));return i&&p?e[0]:e};f&&n&&\"function\"==typeof s&&1!=s.length&&(c=f=!1);var p=this.__chain__,h=!!this.__actions__.length,d=u&&!p,v=c&&!h;if(!u&&f){e=v?e:new Bn(this);var _=t.apply(e,a);return _.__actions__.push({func:pu,args:[l],thisArg:r}),new Ln(_,p)}return d&&v?t.apply(this,a):(_=this.thru(l),d?i?_.value()[0]:_.value():_)})}),Ae([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=It[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Fn.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply($u(i)?i:[],t)}return this[n](function(n){return e.apply($u(n)?n:[],t)})}}),gr(Bn.prototype,function(t,e){var n=Fn[e];if(n){var r=n.name+\"\";Tt.call(kn,r)||(kn[r]=[]),kn[r].push({name:e,func:n})}}),kn[Ni(r,2).name]=[{name:\"wrapper\",func:r}],Bn.prototype.clone=function(){var t=new Bn(this.__wrapped__);return t.__actions__=xi(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=xi(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=xi(this.__views__),t},Bn.prototype.reverse=function(){if(this.__filtered__){var t=new Bn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Bn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=$u(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],u=o.size;switch(o.type){case\"drop\":t+=u;break;case\"dropRight\":e-=u;break;case\"take\":e=yn(e,t+u);break;case\"takeRight\":t=_n(t,e-u)}}return{start:t,end:e}}(0,i,this.__views__),u=o.start,a=o.end,c=a-u,s=r?a:u-1,f=this.__iteratees__,l=f.length,p=0,h=yn(c,this.__takeCount__);if(!n||!r&&i==c&&h==c)return li(t,this.__actions__);var d=[];t:for(;c--&&p<h;){for(var v=-1,_=t[s+=e];++v<l;){var y=f[v],g=y.iteratee,m=y.type,b=g(_);if(2==m)_=b;else if(!b){if(1==m)continue t;break t}}d[p++]=_}return d},Fn.prototype.at=hu,Fn.prototype.chain=function(){return lu(this)},Fn.prototype.commit=function(){return new Ln(this.value(),this.__chain__)},Fn.prototype.next=function(){this.__values__===r&&(this.__values__=la(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Fn.prototype.plant=function(t){for(var e,n=this;n instanceof qn;){var i=Fo(n);i.__index__=0,i.__values__=r,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e},Fn.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Bn){var e=t;return this.__actions__.length&&(e=new Bn(this)),(e=e.reverse()).__actions__.push({func:pu,args:[Qo],thisArg:r}),new Ln(e,this.__chain__)}return this.thru(Qo)},Fn.prototype.toJSON=Fn.prototype.valueOf=Fn.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},Fn.prototype.first=Fn.prototype.head,Yt&&(Fn.prototype[Yt]=function(){return this}),Fn}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(fe._=hn,define(function(){return hn})):pe?((pe.exports=hn)._=hn,le._=hn):fe._=hn}.call(this)},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,e,n){\"use strict\";n.d(e,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createPayPalProPaymentStrategy:()=>T});var t=n(315),e=n(9440);var i,o,u=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};class a{constructor(t,e){this._paymentIntegrationService=t,this._cardinalClient=e}prepare(t){return u(this,void 0,void 0,function*(){yield this._cardinalClient.load(t.id,t.config.testMode),yield this._cardinalClient.configure(yield this._getClientToken(t))})}start(t,n,r,i){return u(this,void 0,void 0,function*(){const{getCardInstrument:o,getPaymentMethodOrThrow:u}=this._paymentIntegrationService.getState(),{payment:{methodId:a=\"\",paymentData:c={}}={}}=n,s=function(t){return Boolean(t.instrumentId)}(c)&&o(c.instrumentId),f=s?s.iin:i&&i.getBin();f&&(yield this._cardinalClient.runBinProcess(f));try{return yield t((0,e.merge)(n,{payment:{paymentData:{threeDSecure:{token:u(a).clientToken}}}}),r)}catch(t){if(!(t=>\"object\"==typeof t&&null!==t&&\"body\"in t)(t)||!(0,e.some)(t.body.errors,{code:\"three_d_secure_required\"}))throw t;const r=yield this._cardinalClient.getThreeDSecureData(t.body.three_ds_result,this._getOrderData());if(!i)return void(yield this._paymentIntegrationService.submitPayment((0,e.merge)(n.payment,{paymentData:{threeDSecure:r}})));yield i.submit((0,e.merge)(n.payment,{paymentData:{threeDSecure:r}}))}})}_getClientToken(t){return u(this,void 0,void 0,function*(){return t.clientToken?t.clientToken:(yield this._paymentIntegrationService.loadPaymentMethod(t.id),this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t.id).clientToken||\"\")})}_getOrderData(){const t=this._paymentIntegrationService.getState(),e=t.getBillingAddressOrThrow(),n=t.getShippingAddress(),r=t.getCheckoutOrThrow(),i=t.getOrderOrThrow();return{billingAddress:e,shippingAddress:n,currencyCode:r.cart.currency.code,id:i.orderId.toString(),amount:r.cart.cartAmount}}}class c extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(i||(i={}));class s extends c{constructor(t){super(function(t){switch(t){case i.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case i.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case i.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case i.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case i.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case i.MissingCheckoutConfig:case i.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case i.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case i.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case i.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case i.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case i.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case i.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class f extends c{constructor(t){super(t||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(o||(o={}));class l extends c{constructor(t){super(function(t){switch(t){case o.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case o.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case o.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case o.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const p=[100004,1010,1011,1020];var h,d,v,_,y,g,m;!function(t){t.SetupCompleted=\"payments.setupComplete\",t.Validated=\"payments.validated\"}(h||(h={})),function(t){t.Init=\"init\",t.Complete=\"complete\",t.Confirm=\"confirm\"}(d||(d={})),function(t){t.Success=\"SUCCESS\",t.NoAction=\"NOACTION\",t.Failure=\"FAILURE\",t.Error=\"ERROR\"}(v||(v={})),function(t){t.CCA=\"CCA\",t.Paypal=\"Paypal\",t.Wallet=\"Wallet\",t.VisaCheckout=\"VisaCheckout\",t.ApplePay=\"ApplePay\",t.DiscoverWallet=\"DiscoverWallet\"}(_||(_={})),function(t){t.BinProcess=\"bin.process\"}(y||(y={})),function(t){t.CCA=\"cca\"}(g||(g={})),function(t){t.Yes=\"Y\",t.No=\"N\"}(m||(m={}));class b{constructor(t){this._scriptLoader=t,this._provider=\"\",this._testMode=!1,this._configurationToken=\"\"}load(t,n=!1){return this._provider=t,this._testMode=n,this._sdk||(this._sdk=this._scriptLoader.load(t,n)),this._sdk.then(e.noop)}configure(t){if(this._configurationToken){if(this._configurationToken===t)return Promise.resolve();this._sdk=this._scriptLoader.load(`${this._provider}.${Date.now()}`,this._testMode)}return this._getClientSDK().then(n=>new Promise((r,o)=>{n.on(h.SetupCompleted,()=>{n.off(h.SetupCompleted),n.off(h.Validated),this._configurationToken=t,r()}),n.on(h.Validated,t=>{n.off(h.SetupCompleted),n.off(h.Validated),t.ActionCode===v.Error&&((0,e.includes)(p,t.ErrorNumber)&&o(new s(i.MissingPaymentMethod)),o(new f(t.ErrorDescription)))}),n.setup(d.Init,{jwt:t})}))}runBinProcess(t){return this._getClientSDK().then(n=>n.trigger(y.BinProcess,t).catch(e.noop)).then(t=>{if(!t||!t.Status)throw new l(o.PaymentNotInitialized)})}getThreeDSecureData(t,e){return this._getClientSDK().then(n=>new Promise((r,i)=>{n.on(h.Validated,(t,e)=>{if(n.off(h.Validated),!e)return i(new f(t.ErrorDescription?t.ErrorDescription:\"An error was encountered while processing the transaction.\"));if(!t.ActionCode)return r({token:e});switch(t.ActionCode){case v.Success:return r({token:e});case v.NoAction:return t.ErrorNumber>0?i(new f(t.ErrorDescription)):t.Payment&&t.Payment.ExtendedData&&t.Payment.ExtendedData.SignatureVerification===m.Yes?r({token:e}):i(new f(\"Transaction signature could not be validated.\"));case v.Failure:return i(new f(\"User failed authentication or an error was encountered while processing the transaction.\"));case v.Error:return i(new f(t.ErrorDescription))}});const o={AcsUrl:t.acs_url,Payload:t.merchant_data},u=this._mapToPartialOrder(e,t.payer_auth_request);n.continue(g.CCA,o,u)}))}_mapToPartialOrder(t,e){const n={BillingAddress:this._mapToCardinalAddress(t.billingAddress)};return t.paymentData&&(n.Account=this._mapToCardinalAccount(t.paymentData)),t.billingAddress.email&&(n.Email1=t.billingAddress.email),t.shippingAddress&&(n.ShippingAddress=this._mapToCardinalAddress(t.shippingAddress)),{Consumer:n,OrderDetails:{OrderNumber:t.id,Amount:t.amount,CurrencyCode:t.currencyCode,OrderChannel:\"S\",TransactionId:e}}}_mapToCardinalAccount(t){return{AccountNumber:Number(t.ccNumber),ExpirationMonth:Number(t.ccExpiry.month),ExpirationYear:Number(t.ccExpiry.year),NameOnAccount:t.ccName,CardCode:Number(t.ccCvv)}}_mapToCardinalAddress(t){const e={FirstName:t.firstName,LastName:t.lastName,Address1:t.address1,City:t.city,State:t.stateOrProvince,PostalCode:t.postalCode,CountryCode:t.countryCode};return t.address2&&(e.Address2=t.address2),t.phone&&(e.Phone1=t.phone),e}_getClientSDK(){if(!this._sdk)throw new l(o.PaymentNotInitialized);return this._sdk}}class w extends c{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class j{constructor(t,e=window){this._scriptLoader=t,this._window=e}load(t,e){const n=e?\"https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js\":\"https://static.client.cardinaltrusted.com/songbird/v2.0.0/songbird.js\";return this._scriptLoader.loadScript(`${n}?v=${t}`).then(()=>{if(!this._window.Cardinal)throw new w;return this._window.Cardinal})}}class S extends c{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class A extends c{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class O extends S{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}var x,C=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})},I=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n};class k{constructor(t){this._paymentIntegrationService=t}execute(t,e){var n,r;return this._isHostedPaymentFormEnabled(null===(n=t.payment)||void 0===n?void 0:n.methodId,null===(r=t.payment)||void 0===r?void 0:r.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(t,e):this._executeWithoutHostedForm(t,e)}initialize(t){if(!this._isHostedPaymentFormEnabled(null==t?void 0:t.methodId,null==t?void 0:t.gatewayId)||!this._isHostedFieldAvailable(t))return this._shouldRenderHostedForm=!1,Promise.resolve();const e=t&&t.creditCard&&t.creditCard.form,n=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:r=\"\"}={}}=n.getStoreConfigOrThrow();if(!e)throw new S;const i=this._paymentIntegrationService.createHostedForm(r,e);return i.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=i,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new A)}_executeWithoutHostedForm(t,e){return C(this,void 0,void 0,function*(){const{payment:n}=t,r=I(t,[\"payment\"]),i=n&&n.paymentData;if(!n||!i)throw new O([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(r,e),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:i}))})}_executeWithHostedForm(t,e){return C(this,void 0,void 0,function*(){const{payment:n}=t,r=I(t,[\"payment\"]),i=this._hostedForm;if(!i)throw new l(o.PaymentNotInitialized);if(!n||!n.methodId)throw new O([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(r,e),yield i.validate().then(()=>i.submit(n))})}_isHostedPaymentFormEnabled(t,e){return!!t&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t,e).config.isHostedFormEnabled}_isHostedFieldAvailable(t){return!(0,e.values)(t&&t.creditCard&&t.creditCard.form.fields).every(e.isNil)}}!function(t){t.ACKNOWLEDGE=\"ACKNOWLEDGE\",t.FINALIZE=\"FINALIZE\",t.INITIALIZE=\"INITIALIZE\"}(x||(x={}));const E=x;var P=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(u,a)}c((r=r.apply(t,e||[])).next())})};class R extends k{constructor(t,e){super(t),this.paymentIntegrationService=t,this.threeDSecureFlow=e}initialize(t){const e=Object.create(null,{initialize:{get:()=>super.initialize}});return P(this,void 0,void 0,function*(){yield e.initialize.call(this,t);const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t.methodId);n.config.is3dsEnabled&&(yield this.threeDSecureFlow.prepare(n))})}execute(t,e){const n=Object.create(null,{execute:{get:()=>super.execute}});return P(this,void 0,void 0,function*(){const{payment:{methodId:r=\"\"}={}}=t,i=this.paymentIntegrationService.getState();return i.getPaymentStatus()===E.ACKNOWLEDGE?(yield this.paymentIntegrationService.submitOrder(Object.assign(Object.assign({},t),{payment:{methodId:r}}),e),Promise.resolve()):i.getPaymentMethodOrThrow(r).config.is3dsEnabled?this.threeDSecureFlow.start(n.execute.bind(this),t,e,this._hostedForm):n.execute.call(this,t,e)})}}const T=Object.assign(e=>new R(e,new a(e,new b(new j((0,t.vQ)())))),{resolveIds:[{id:\"paypal\"}]})})(),module.exports=r})();\n//# sourceMappingURL=paypal-pro.js.map"
  },
  {
    "path": "dist/cjs/integrations/sagepay.js",
    "content": "(()=>{var t={9165(t,n,r){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(t){var n=new e.default;return new i.default(n,t)};var e=r(9828),i=r(5470)},9828(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var r=function(){function t(){}return t.prototype.build=function(t,n,r){var e=this,i=document.createElement(\"form\");return i.style.display=\"none\",i.setAttribute(\"action\",t),i.setAttribute(\"method\",\"POST\"),i.setAttribute(\"target\",r||\"_top\"),Object.keys(n).forEach(function(t){var r=n[t];i.appendChild(e._createInput(r,t))}),i},t.prototype._createInput=function(t,n){var r=document.createElement(\"input\");return r.setAttribute(\"name\",n),r.setAttribute(\"type\",\"hidden\"),r.setAttribute(\"value\",t),r},t}();n.default=r},5470(t,n,r){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=r(9783),i=function(){function t(t,n){this._formBuilder=t,this._options=n}return t.prototype.postForm=function(t,n,r,e){var i=this._formBuilder.build(this._prependHost(t),n,e);window.addEventListener(\"unload\",function t(){window.removeEventListener(\"unload\",t),r&&r()}),document.body.appendChild(i),i.submit()},t.prototype._prependHost=function(t){return this._options&&this._options.host&&!(0,e.isAbsoluteUrl)(t)?(0,e.joinPaths)(this._options.host,t):t},t}();n.default=i},8686(t,n,r){\"use strict\";n.createFormPoster=void 0;var e=r(9165);Object.defineProperty(n,\"createFormPoster\",{enumerable:!0,get:function(){return e.default}});r(5470)},9783(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.isAbsoluteUrl=function(t){return/^https?:\\/\\//.test(t)},n.joinPaths=function(t,n){return\"\".concat((r=t,r.replace(/\\/$/,\"\")),\"/\").concat(function(t){return t.replace(/^\\//,\"\")}(n));var r}},9440(t,n,r){t=r.nmd(t),function(){var e,i=\"Expected a function\",u=\"__lodash_hash_undefined__\",o=\"__lodash_placeholder__\",a=32,c=128,f=1/0,s=9007199254740991,l=NaN,h=4294967295,p=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],v=\"[object Arguments]\",_=\"[object Array]\",d=\"[object Boolean]\",g=\"[object Date]\",y=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",x=\"[object Number]\",I=\"[object Object]\",j=\"[object Promise]\",O=\"[object RegExp]\",A=\"[object Set]\",S=\"[object String]\",z=\"[object Symbol]\",E=\"[object WeakMap]\",k=\"[object ArrayBuffer]\",P=\"[object DataView]\",M=\"[object Float32Array]\",C=\"[object Float64Array]\",R=\"[object Int8Array]\",U=\"[object Int16Array]\",T=\"[object Int32Array]\",F=\"[object Uint8Array]\",L=\"[object Uint8ClampedArray]\",N=\"[object Uint16Array]\",W=\"[object Uint32Array]\",D=/\\b__p \\+= '';/g,B=/\\b(__p \\+=) '' \\+/g,$=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,q=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,Z=RegExp(q.source),K=RegExp(H.source),G=/<%-([\\s\\S]+?)%>/g,V=/<%([\\s\\S]+?)%>/g,J=/<%=([\\s\\S]+?)%>/g,Y=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,nt=RegExp(tt.source),rt=/^\\s+/,et=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ut=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ot=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,ft=/\\\\(\\\\)?/g,st=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,ht=/^[-+]0x[0-9a-f]+$/i,pt=/^0b[01]+$/i,vt=/^\\[object .+?Constructor\\]$/,_t=/^0o[0-7]+$/i,dt=/^(?:0|[1-9]\\d*)$/,gt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,yt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",xt=\"\\\\u2700-\\\\u27bf\",It=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",jt=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",Ot=\"\\\\ufe0e\\\\ufe0f\",At=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",St=\"[\"+bt+\"]\",zt=\"[\"+At+\"]\",Et=\"[\"+wt+\"]\",kt=\"\\\\d+\",Pt=\"[\"+xt+\"]\",Mt=\"[\"+It+\"]\",Ct=\"[^\"+bt+At+kt+xt+It+jt+\"]\",Rt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Ut=\"[^\"+bt+\"]\",Tt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ft=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Lt=\"[\"+jt+\"]\",Nt=\"\\\\u200d\",Wt=\"(?:\"+Mt+\"|\"+Ct+\")\",Dt=\"(?:\"+Lt+\"|\"+Ct+\")\",Bt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",$t=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",qt=\"(?:\"+Et+\"|\"+Rt+\")?\",Ht=\"[\"+Ot+\"]?\",Zt=Ht+qt+\"(?:\"+Nt+\"(?:\"+[Ut,Tt,Ft].join(\"|\")+\")\"+Ht+qt+\")*\",Kt=\"(?:\"+[Pt,Tt,Ft].join(\"|\")+\")\"+Zt,Gt=\"(?:\"+[Ut+Et+\"?\",Et,Tt,Ft,St].join(\"|\")+\")\",Vt=RegExp(\"['’]\",\"g\"),Jt=RegExp(Et,\"g\"),Yt=RegExp(Rt+\"(?=\"+Rt+\")|\"+Gt+Zt,\"g\"),Qt=RegExp([Lt+\"?\"+Mt+\"+\"+Bt+\"(?=\"+[zt,Lt,\"$\"].join(\"|\")+\")\",Dt+\"+\"+$t+\"(?=\"+[zt,Lt+Wt,\"$\"].join(\"|\")+\")\",Lt+\"?\"+Wt+\"+\"+Bt,Lt+\"+\"+$t,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",kt,Kt].join(\"|\"),\"g\"),Xt=RegExp(\"[\"+Nt+bt+wt+Ot+\"]\"),tn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,nn=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],rn=-1,en={};en[M]=en[C]=en[R]=en[U]=en[T]=en[F]=en[L]=en[N]=en[W]=!0,en[v]=en[_]=en[k]=en[d]=en[P]=en[g]=en[y]=en[m]=en[w]=en[x]=en[I]=en[O]=en[A]=en[S]=en[E]=!1;var un={};un[v]=un[_]=un[k]=un[P]=un[d]=un[g]=un[M]=un[C]=un[R]=un[U]=un[T]=un[w]=un[x]=un[I]=un[O]=un[A]=un[S]=un[z]=un[F]=un[L]=un[N]=un[W]=!0,un[y]=un[m]=un[E]=!1;var on={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},an=parseFloat,cn=parseInt,fn=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,sn=\"object\"==typeof self&&self&&self.Object===Object&&self,ln=fn||sn||Function(\"return this\")(),hn=n&&!n.nodeType&&n,pn=hn&&t&&!t.nodeType&&t,vn=pn&&pn.exports===hn,_n=vn&&fn.process,dn=function(){try{return pn&&pn.require&&pn.require(\"util\").types||_n&&_n.binding&&_n.binding(\"util\")}catch(t){}}(),gn=dn&&dn.isArrayBuffer,yn=dn&&dn.isDate,mn=dn&&dn.isMap,bn=dn&&dn.isRegExp,wn=dn&&dn.isSet,xn=dn&&dn.isTypedArray;function In(t,n,r){switch(r.length){case 0:return t.call(n);case 1:return t.call(n,r[0]);case 2:return t.call(n,r[0],r[1]);case 3:return t.call(n,r[0],r[1],r[2])}return t.apply(n,r)}function jn(t,n,r,e){for(var i=-1,u=null==t?0:t.length;++i<u;){var o=t[i];n(e,o,r(o),t)}return e}function On(t,n){for(var r=-1,e=null==t?0:t.length;++r<e&&!1!==n(t[r],r,t););return t}function An(t,n){for(var r=null==t?0:t.length;r--&&!1!==n(t[r],r,t););return t}function Sn(t,n){for(var r=-1,e=null==t?0:t.length;++r<e;)if(!n(t[r],r,t))return!1;return!0}function zn(t,n){for(var r=-1,e=null==t?0:t.length,i=0,u=[];++r<e;){var o=t[r];n(o,r,t)&&(u[i++]=o)}return u}function En(t,n){return!(null==t||!t.length)&&Nn(t,n,0)>-1}function kn(t,n,r){for(var e=-1,i=null==t?0:t.length;++e<i;)if(r(n,t[e]))return!0;return!1}function Pn(t,n){for(var r=-1,e=null==t?0:t.length,i=Array(e);++r<e;)i[r]=n(t[r],r,t);return i}function Mn(t,n){for(var r=-1,e=n.length,i=t.length;++r<e;)t[i+r]=n[r];return t}function Cn(t,n,r,e){var i=-1,u=null==t?0:t.length;for(e&&u&&(r=t[++i]);++i<u;)r=n(r,t[i],i,t);return r}function Rn(t,n,r,e){var i=null==t?0:t.length;for(e&&i&&(r=t[--i]);i--;)r=n(r,t[i],i,t);return r}function Un(t,n){for(var r=-1,e=null==t?0:t.length;++r<e;)if(n(t[r],r,t))return!0;return!1}var Tn=$n(\"length\");function Fn(t,n,r){var e;return r(t,function(t,r,i){if(n(t,r,i))return e=r,!1}),e}function Ln(t,n,r,e){for(var i=t.length,u=r+(e?1:-1);e?u--:++u<i;)if(n(t[u],u,t))return u;return-1}function Nn(t,n,r){return n==n?function(t,n,r){for(var e=r-1,i=t.length;++e<i;)if(t[e]===n)return e;return-1}(t,n,r):Ln(t,Dn,r)}function Wn(t,n,r,e){for(var i=r-1,u=t.length;++i<u;)if(e(t[i],n))return i;return-1}function Dn(t){return t!=t}function Bn(t,n){var r=null==t?0:t.length;return r?Zn(t,n)/r:l}function $n(t){return function(n){return null==n?e:n[t]}}function qn(t){return function(n){return null==t?e:t[n]}}function Hn(t,n,r,e,i){return i(t,function(t,i,u){r=e?(e=!1,t):n(r,t,i,u)}),r}function Zn(t,n){for(var r,i=-1,u=t.length;++i<u;){var o=n(t[i]);o!==e&&(r=r===e?o:r+o)}return r}function Kn(t,n){for(var r=-1,e=Array(t);++r<t;)e[r]=n(r);return e}function Gn(t){return t?t.slice(0,lr(t)+1).replace(rt,\"\"):t}function Vn(t){return function(n){return t(n)}}function Jn(t,n){return Pn(n,function(n){return t[n]})}function Yn(t,n){return t.has(n)}function Qn(t,n){for(var r=-1,e=t.length;++r<e&&Nn(n,t[r],0)>-1;);return r}function Xn(t,n){for(var r=t.length;r--&&Nn(n,t[r],0)>-1;);return r}var tr=qn({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),nr=qn({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function rr(t){return\"\\\\\"+on[t]}function er(t){return Xt.test(t)}function ir(t){var n=-1,r=Array(t.size);return t.forEach(function(t,e){r[++n]=[e,t]}),r}function ur(t,n){return function(r){return t(n(r))}}function or(t,n){for(var r=-1,e=t.length,i=0,u=[];++r<e;){var a=t[r];a!==n&&a!==o||(t[r]=o,u[i++]=r)}return u}function ar(t){var n=-1,r=Array(t.size);return t.forEach(function(t){r[++n]=t}),r}function cr(t){var n=-1,r=Array(t.size);return t.forEach(function(t){r[++n]=[t,t]}),r}function fr(t){return er(t)?function(t){for(var n=Yt.lastIndex=0;Yt.test(t);)++n;return n}(t):Tn(t)}function sr(t){return er(t)?function(t){return t.match(Yt)||[]}(t):function(t){return t.split(\"\")}(t)}function lr(t){for(var n=t.length;n--&&et.test(t.charAt(n)););return n}var hr=qn({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pr=function t(n){var r,et=(n=null==n?ln:pr.defaults(ln.Object(),n,pr.pick(ln,nn))).Array,bt=n.Date,wt=n.Error,xt=n.Function,It=n.Math,jt=n.Object,Ot=n.RegExp,At=n.String,St=n.TypeError,zt=et.prototype,Et=xt.prototype,kt=jt.prototype,Pt=n[\"__core-js_shared__\"],Mt=Et.toString,Ct=kt.hasOwnProperty,Rt=0,Ut=(r=/[^.]+$/.exec(Pt&&Pt.keys&&Pt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",Tt=kt.toString,Ft=Mt.call(jt),Lt=ln._,Nt=Ot(\"^\"+Mt.call(Ct).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Wt=vn?n.Buffer:e,Dt=n.Symbol,Bt=n.Uint8Array,$t=Wt?Wt.allocUnsafe:e,qt=ur(jt.getPrototypeOf,jt),Ht=jt.create,Zt=kt.propertyIsEnumerable,Kt=zt.splice,Gt=Dt?Dt.isConcatSpreadable:e,Yt=Dt?Dt.iterator:e,Xt=Dt?Dt.toStringTag:e,on=function(){try{var t=cu(jt,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),fn=n.clearTimeout!==ln.clearTimeout&&n.clearTimeout,sn=bt&&bt.now!==ln.Date.now&&bt.now,hn=n.setTimeout!==ln.setTimeout&&n.setTimeout,pn=It.ceil,_n=It.floor,dn=jt.getOwnPropertySymbols,Tn=Wt?Wt.isBuffer:e,qn=n.isFinite,vr=zt.join,_r=ur(jt.keys,jt),dr=It.max,gr=It.min,yr=bt.now,mr=n.parseInt,br=It.random,wr=zt.reverse,xr=cu(n,\"DataView\"),Ir=cu(n,\"Map\"),jr=cu(n,\"Promise\"),Or=cu(n,\"Set\"),Ar=cu(n,\"WeakMap\"),Sr=cu(jt,\"create\"),zr=Ar&&new Ar,Er={},kr=Tu(xr),Pr=Tu(Ir),Mr=Tu(jr),Cr=Tu(Or),Rr=Tu(Ar),Ur=Dt?Dt.prototype:e,Tr=Ur?Ur.valueOf:e,Fr=Ur?Ur.toString:e;function Lr(t){if(ta(t)&&!$o(t)&&!(t instanceof Br)){if(t instanceof Dr)return t;if(Ct.call(t,\"__wrapped__\"))return Fu(t)}return new Dr(t)}var Nr=function(){function t(){}return function(n){if(!Xo(n))return{};if(Ht)return Ht(n);t.prototype=n;var r=new t;return t.prototype=e,r}}();function Wr(){}function Dr(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=e}function Br(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function $r(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function qr(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function Hr(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function Zr(t){var n=-1,r=null==t?0:t.length;for(this.__data__=new Hr;++n<r;)this.add(t[n])}function Kr(t){var n=this.__data__=new qr(t);this.size=n.size}function Gr(t,n){var r=$o(t),e=!r&&Bo(t),i=!r&&!e&&Ko(t),u=!r&&!e&&!i&&ca(t),o=r||e||i||u,a=o?Kn(t.length,At):[],c=a.length;for(var f in t)!n&&!Ct.call(t,f)||o&&(\"length\"==f||i&&(\"offset\"==f||\"parent\"==f)||u&&(\"buffer\"==f||\"byteLength\"==f||\"byteOffset\"==f)||_u(f,c))||a.push(f);return a}function Vr(t){var n=t.length;return n?t[He(0,n-1)]:e}function Jr(t,n){return Pu(Ai(t),ue(n,0,t.length))}function Yr(t){return Pu(Ai(t))}function Qr(t,n,r){(r!==e&&!No(t[n],r)||r===e&&!(n in t))&&ee(t,n,r)}function Xr(t,n,r){var i=t[n];Ct.call(t,n)&&No(i,r)&&(r!==e||n in t)||ee(t,n,r)}function te(t,n){for(var r=t.length;r--;)if(No(t[r][0],n))return r;return-1}function ne(t,n,r,e){return se(t,function(t,i,u){n(e,t,r(t),u)}),e}function re(t,n){return t&&Si(n,ka(n),t)}function ee(t,n,r){\"__proto__\"==n&&on?on(t,n,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[n]=r}function ie(t,n){for(var r=-1,i=n.length,u=et(i),o=null==t;++r<i;)u[r]=o?e:Oa(t,n[r]);return u}function ue(t,n,r){return t==t&&(r!==e&&(t=t<=r?t:r),n!==e&&(t=t>=n?t:n)),t}function oe(t,n,r,i,u,o){var a,c=1&n,f=2&n,s=4&n;if(r&&(a=u?r(t,i,u,o):r(t)),a!==e)return a;if(!Xo(t))return t;var l=$o(t);if(l){if(a=function(t){var n=t.length,r=new t.constructor(n);return n&&\"string\"==typeof t[0]&&Ct.call(t,\"index\")&&(r.index=t.index,r.input=t.input),r}(t),!c)return Ai(t,a)}else{var h=lu(t),p=h==m||h==b;if(Ko(t))return bi(t,c);if(h==I||h==v||p&&!u){if(a=f||p?{}:pu(t),!c)return f?function(t,n){return Si(t,su(t),n)}(t,function(t,n){return t&&Si(n,Pa(n),t)}(a,t)):function(t,n){return Si(t,fu(t),n)}(t,re(a,t))}else{if(!un[h])return u?t:{};a=function(t,n,r){var e,i=t.constructor;switch(n){case k:return wi(t);case d:case g:return new i(+t);case P:return function(t,n){var r=n?wi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case M:case C:case R:case U:case T:case F:case L:case N:case W:return xi(t,r);case w:return new i;case x:case S:return new i(t);case O:return function(t){var n=new t.constructor(t.source,lt.exec(t));return n.lastIndex=t.lastIndex,n}(t);case A:return new i;case z:return e=t,Tr?jt(Tr.call(e)):{}}}(t,h,c)}}o||(o=new Kr);var _=o.get(t);if(_)return _;o.set(t,a),ua(t)?t.forEach(function(e){a.add(oe(e,n,r,e,t,o))}):na(t)&&t.forEach(function(e,i){a.set(i,oe(e,n,r,i,t,o))});var y=l?e:(s?f?nu:tu:f?Pa:ka)(t);return On(y||t,function(e,i){y&&(e=t[i=e]),Xr(a,i,oe(e,n,r,i,t,o))}),a}function ae(t,n,r){var i=r.length;if(null==t)return!i;for(t=jt(t);i--;){var u=r[i],o=n[u],a=t[u];if(a===e&&!(u in t)||!o(a))return!1}return!0}function ce(t,n,r){if(\"function\"!=typeof t)throw new St(i);return Su(function(){t.apply(e,r)},n)}function fe(t,n,r,e){var i=-1,u=En,o=!0,a=t.length,c=[],f=n.length;if(!a)return c;r&&(n=Pn(n,Vn(r))),e?(u=kn,o=!1):n.length>=200&&(u=Yn,o=!1,n=new Zr(n));t:for(;++i<a;){var s=t[i],l=null==r?s:r(s);if(s=e||0!==s?s:0,o&&l==l){for(var h=f;h--;)if(n[h]===l)continue t;c.push(s)}else u(n,l,e)||c.push(s)}return c}Lr.templateSettings={escape:G,evaluate:V,interpolate:J,variable:\"\",imports:{_:Lr}},Lr.prototype=Wr.prototype,Lr.prototype.constructor=Lr,Dr.prototype=Nr(Wr.prototype),Dr.prototype.constructor=Dr,Br.prototype=Nr(Wr.prototype),Br.prototype.constructor=Br,$r.prototype.clear=function(){this.__data__=Sr?Sr(null):{},this.size=0},$r.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},$r.prototype.get=function(t){var n=this.__data__;if(Sr){var r=n[t];return r===u?e:r}return Ct.call(n,t)?n[t]:e},$r.prototype.has=function(t){var n=this.__data__;return Sr?n[t]!==e:Ct.call(n,t)},$r.prototype.set=function(t,n){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Sr&&n===e?u:n,this},qr.prototype.clear=function(){this.__data__=[],this.size=0},qr.prototype.delete=function(t){var n=this.__data__,r=te(n,t);return!(r<0||(r==n.length-1?n.pop():Kt.call(n,r,1),--this.size,0))},qr.prototype.get=function(t){var n=this.__data__,r=te(n,t);return r<0?e:n[r][1]},qr.prototype.has=function(t){return te(this.__data__,t)>-1},qr.prototype.set=function(t,n){var r=this.__data__,e=te(r,t);return e<0?(++this.size,r.push([t,n])):r[e][1]=n,this},Hr.prototype.clear=function(){this.size=0,this.__data__={hash:new $r,map:new(Ir||qr),string:new $r}},Hr.prototype.delete=function(t){var n=ou(this,t).delete(t);return this.size-=n?1:0,n},Hr.prototype.get=function(t){return ou(this,t).get(t)},Hr.prototype.has=function(t){return ou(this,t).has(t)},Hr.prototype.set=function(t,n){var r=ou(this,t),e=r.size;return r.set(t,n),this.size+=r.size==e?0:1,this},Zr.prototype.add=Zr.prototype.push=function(t){return this.__data__.set(t,u),this},Zr.prototype.has=function(t){return this.__data__.has(t)},Kr.prototype.clear=function(){this.__data__=new qr,this.size=0},Kr.prototype.delete=function(t){var n=this.__data__,r=n.delete(t);return this.size=n.size,r},Kr.prototype.get=function(t){return this.__data__.get(t)},Kr.prototype.has=function(t){return this.__data__.has(t)},Kr.prototype.set=function(t,n){var r=this.__data__;if(r instanceof qr){var e=r.__data__;if(!Ir||e.length<199)return e.push([t,n]),this.size=++r.size,this;r=this.__data__=new Hr(e)}return r.set(t,n),this.size=r.size,this};var se=ki(ye),le=ki(me,!0);function he(t,n){var r=!0;return se(t,function(t,e,i){return r=!!n(t,e,i)}),r}function pe(t,n,r){for(var i=-1,u=t.length;++i<u;){var o=t[i],a=n(o);if(null!=a&&(c===e?a==a&&!aa(a):r(a,c)))var c=a,f=o}return f}function ve(t,n){var r=[];return se(t,function(t,e,i){n(t,e,i)&&r.push(t)}),r}function _e(t,n,r,e,i){var u=-1,o=t.length;for(r||(r=vu),i||(i=[]);++u<o;){var a=t[u];n>0&&r(a)?n>1?_e(a,n-1,r,e,i):Mn(i,a):e||(i[i.length]=a)}return i}var de=Pi(),ge=Pi(!0);function ye(t,n){return t&&de(t,n,ka)}function me(t,n){return t&&ge(t,n,ka)}function be(t,n){return zn(n,function(n){return Jo(t[n])})}function we(t,n){for(var r=0,i=(n=di(n,t)).length;null!=t&&r<i;)t=t[Uu(n[r++])];return r&&r==i?t:e}function xe(t,n,r){var e=n(t);return $o(t)?e:Mn(e,r(t))}function Ie(t){return null==t?t===e?\"[object Undefined]\":\"[object Null]\":Xt&&Xt in jt(t)?function(t){var n=Ct.call(t,Xt),r=t[Xt];try{t[Xt]=e;var i=!0}catch(t){}var u=Tt.call(t);return i&&(n?t[Xt]=r:delete t[Xt]),u}(t):function(t){return Tt.call(t)}(t)}function je(t,n){return t>n}function Oe(t,n){return null!=t&&Ct.call(t,n)}function Ae(t,n){return null!=t&&n in jt(t)}function Se(t,n,r){for(var i=r?kn:En,u=t[0].length,o=t.length,a=o,c=et(o),f=1/0,s=[];a--;){var l=t[a];a&&n&&(l=Pn(l,Vn(n))),f=gr(l.length,f),c[a]=!r&&(n||u>=120&&l.length>=120)?new Zr(a&&l):e}l=t[0];var h=-1,p=c[0];t:for(;++h<u&&s.length<f;){var v=l[h],_=n?n(v):v;if(v=r||0!==v?v:0,!(p?Yn(p,_):i(s,_,r))){for(a=o;--a;){var d=c[a];if(!(d?Yn(d,_):i(t[a],_,r)))continue t}p&&p.push(_),s.push(v)}}return s}function ze(t,n,r){var i=null==(t=ju(t,n=di(n,t)))?t:t[Uu(Gu(n))];return null==i?e:In(i,t,r)}function Ee(t){return ta(t)&&Ie(t)==v}function ke(t,n,r,i,u){return t===n||(null==t||null==n||!ta(t)&&!ta(n)?t!=t&&n!=n:function(t,n,r,i,u,o){var a=$o(t),c=$o(n),f=a?_:lu(t),s=c?_:lu(n),l=(f=f==v?I:f)==I,h=(s=s==v?I:s)==I,p=f==s;if(p&&Ko(t)){if(!Ko(n))return!1;a=!0,l=!1}if(p&&!l)return o||(o=new Kr),a||ca(t)?Qi(t,n,r,i,u,o):function(t,n,r,e,i,u,o){switch(r){case P:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case k:return!(t.byteLength!=n.byteLength||!u(new Bt(t),new Bt(n)));case d:case g:case x:return No(+t,+n);case y:return t.name==n.name&&t.message==n.message;case O:case S:return t==n+\"\";case w:var a=ir;case A:var c=1&e;if(a||(a=ar),t.size!=n.size&&!c)return!1;var f=o.get(t);if(f)return f==n;e|=2,o.set(t,n);var s=Qi(a(t),a(n),e,i,u,o);return o.delete(t),s;case z:if(Tr)return Tr.call(t)==Tr.call(n)}return!1}(t,n,f,r,i,u,o);if(!(1&r)){var m=l&&Ct.call(t,\"__wrapped__\"),b=h&&Ct.call(n,\"__wrapped__\");if(m||b){var j=m?t.value():t,E=b?n.value():n;return o||(o=new Kr),u(j,E,r,i,o)}}return!!p&&(o||(o=new Kr),function(t,n,r,i,u,o){var a=1&r,c=tu(t),f=c.length;if(f!=tu(n).length&&!a)return!1;for(var s=f;s--;){var l=c[s];if(!(a?l in n:Ct.call(n,l)))return!1}var h=o.get(t),p=o.get(n);if(h&&p)return h==n&&p==t;var v=!0;o.set(t,n),o.set(n,t);for(var _=a;++s<f;){var d=t[l=c[s]],g=n[l];if(i)var y=a?i(g,d,l,n,t,o):i(d,g,l,t,n,o);if(!(y===e?d===g||u(d,g,r,i,o):y)){v=!1;break}_||(_=\"constructor\"==l)}if(v&&!_){var m=t.constructor,b=n.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in n)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(v=!1)}return o.delete(t),o.delete(n),v}(t,n,r,i,u,o))}(t,n,r,i,ke,u))}function Pe(t,n,r,i){var u=r.length,o=u,a=!i;if(null==t)return!o;for(t=jt(t);u--;){var c=r[u];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++u<o;){var f=(c=r[u])[0],s=t[f],l=c[1];if(a&&c[2]){if(s===e&&!(f in t))return!1}else{var h=new Kr;if(i)var p=i(s,l,f,t,n,h);if(!(p===e?ke(l,s,3,i,h):p))return!1}}return!0}function Me(t){return!(!Xo(t)||(n=t,Ut&&Ut in n))&&(Jo(t)?Nt:vt).test(Tu(t));var n}function Ce(t){return\"function\"==typeof t?t:null==t?rc:\"object\"==typeof t?$o(t)?Le(t[0],t[1]):Fe(t):lc(t)}function Re(t){if(!bu(t))return _r(t);var n=[];for(var r in jt(t))Ct.call(t,r)&&\"constructor\"!=r&&n.push(r);return n}function Ue(t,n){return t<n}function Te(t,n){var r=-1,e=Ho(t)?et(t.length):[];return se(t,function(t,i,u){e[++r]=n(t,i,u)}),e}function Fe(t){var n=au(t);return 1==n.length&&n[0][2]?xu(n[0][0],n[0][1]):function(r){return r===t||Pe(r,t,n)}}function Le(t,n){return gu(t)&&wu(n)?xu(Uu(t),n):function(r){var i=Oa(r,t);return i===e&&i===n?Aa(r,t):ke(n,i,3)}}function Ne(t,n,r,i,u){t!==n&&de(n,function(o,a){if(u||(u=new Kr),Xo(o))!function(t,n,r,i,u,o,a){var c=Ou(t,r),f=Ou(n,r),s=a.get(f);if(s)Qr(t,r,s);else{var l=o?o(c,f,r+\"\",t,n,a):e,h=l===e;if(h){var p=$o(f),v=!p&&Ko(f),_=!p&&!v&&ca(f);l=f,p||v||_?$o(c)?l=c:Zo(c)?l=Ai(c):v?(h=!1,l=bi(f,!0)):_?(h=!1,l=xi(f,!0)):l=[]:ea(f)||Bo(f)?(l=c,Bo(c)?l=da(c):Xo(c)&&!Jo(c)||(l=pu(f))):h=!1}h&&(a.set(f,l),u(l,f,i,o,a),a.delete(f)),Qr(t,r,l)}}(t,n,a,r,Ne,i,u);else{var c=i?i(Ou(t,a),o,a+\"\",t,n,u):e;c===e&&(c=o),Qr(t,a,c)}},Pa)}function We(t,n){var r=t.length;if(r)return _u(n+=n<0?r:0,r)?t[n]:e}function De(t,n,r){n=n.length?Pn(n,function(t){return $o(t)?function(n){return we(n,1===t.length?t[0]:t)}:t}):[rc];var e=-1;n=Pn(n,Vn(uu()));var i=Te(t,function(t,r,i){var u=Pn(n,function(n){return n(t)});return{criteria:u,index:++e,value:t}});return function(t){var n=t.length;for(t.sort(function(t,n){return function(t,n,r){for(var e=-1,i=t.criteria,u=n.criteria,o=i.length,a=r.length;++e<o;){var c=Ii(i[e],u[e]);if(c)return e>=a?c:c*(\"desc\"==r[e]?-1:1)}return t.index-n.index}(t,n,r)});n--;)t[n]=t[n].value;return t}(i)}function Be(t,n,r){for(var e=-1,i=n.length,u={};++e<i;){var o=n[e],a=we(t,o);r(a,o)&&Je(u,di(o,t),a)}return u}function $e(t,n,r,e){var i=e?Wn:Nn,u=-1,o=n.length,a=t;for(t===n&&(n=Ai(n)),r&&(a=Pn(t,Vn(r)));++u<o;)for(var c=0,f=n[u],s=r?r(f):f;(c=i(a,s,c,e))>-1;)a!==t&&Kt.call(a,c,1),Kt.call(t,c,1);return t}function qe(t,n){for(var r=t?n.length:0,e=r-1;r--;){var i=n[r];if(r==e||i!==u){var u=i;_u(i)?Kt.call(t,i,1):ci(t,i)}}return t}function He(t,n){return t+_n(br()*(n-t+1))}function Ze(t,n){var r=\"\";if(!t||n<1||n>s)return r;do{n%2&&(r+=t),(n=_n(n/2))&&(t+=t)}while(n);return r}function Ke(t,n){return zu(Iu(t,n,rc),t+\"\")}function Ge(t){return Vr(Na(t))}function Ve(t,n){var r=Na(t);return Pu(r,ue(n,0,r.length))}function Je(t,n,r,i){if(!Xo(t))return t;for(var u=-1,o=(n=di(n,t)).length,a=o-1,c=t;null!=c&&++u<o;){var f=Uu(n[u]),s=r;if(\"__proto__\"===f||\"constructor\"===f||\"prototype\"===f)return t;if(u!=a){var l=c[f];(s=i?i(l,f,c):e)===e&&(s=Xo(l)?l:_u(n[u+1])?[]:{})}Xr(c,f,s),c=c[f]}return t}var Ye=zr?function(t,n){return zr.set(t,n),t}:rc,Qe=on?function(t,n){return on(t,\"toString\",{configurable:!0,enumerable:!1,value:Xa(n),writable:!0})}:rc;function Xe(t){return Pu(Na(t))}function ti(t,n,r){var e=-1,i=t.length;n<0&&(n=-n>i?0:i+n),(r=r>i?i:r)<0&&(r+=i),i=n>r?0:r-n>>>0,n>>>=0;for(var u=et(i);++e<i;)u[e]=t[e+n];return u}function ni(t,n){var r;return se(t,function(t,e,i){return!(r=n(t,e,i))}),!!r}function ri(t,n,r){var e=0,i=null==t?e:t.length;if(\"number\"==typeof n&&n==n&&i<=2147483647){for(;e<i;){var u=e+i>>>1,o=t[u];null!==o&&!aa(o)&&(r?o<=n:o<n)?e=u+1:i=u}return i}return ei(t,n,rc,r)}function ei(t,n,r,i){var u=0,o=null==t?0:t.length;if(0===o)return 0;for(var a=(n=r(n))!=n,c=null===n,f=aa(n),s=n===e;u<o;){var l=_n((u+o)/2),h=r(t[l]),p=h!==e,v=null===h,_=h==h,d=aa(h);if(a)var g=i||_;else g=s?_&&(i||p):c?_&&p&&(i||!v):f?_&&p&&!v&&(i||!d):!v&&!d&&(i?h<=n:h<n);g?u=l+1:o=l}return gr(o,4294967294)}function ii(t,n){for(var r=-1,e=t.length,i=0,u=[];++r<e;){var o=t[r],a=n?n(o):o;if(!r||!No(a,c)){var c=a;u[i++]=0===o?0:o}}return u}function ui(t){return\"number\"==typeof t?t:aa(t)?l:+t}function oi(t){if(\"string\"==typeof t)return t;if($o(t))return Pn(t,oi)+\"\";if(aa(t))return Fr?Fr.call(t):\"\";var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function ai(t,n,r){var e=-1,i=En,u=t.length,o=!0,a=[],c=a;if(r)o=!1,i=kn;else if(u>=200){var f=n?null:Zi(t);if(f)return ar(f);o=!1,i=Yn,c=new Zr}else c=n?[]:a;t:for(;++e<u;){var s=t[e],l=n?n(s):s;if(s=r||0!==s?s:0,o&&l==l){for(var h=c.length;h--;)if(c[h]===l)continue t;n&&c.push(l),a.push(s)}else i(c,l,r)||(c!==a&&c.push(l),a.push(s))}return a}function ci(t,n){var r=-1,e=(n=di(n,t)).length;if(!e)return!0;for(;++r<e;){var i=Uu(n[r]);if(\"__proto__\"===i&&!Ct.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&r<e-1)return!1}var u=ju(t,n);return null==u||delete u[Uu(Gu(n))]}function fi(t,n,r,e){return Je(t,n,r(we(t,n)),e)}function si(t,n,r,e){for(var i=t.length,u=e?i:-1;(e?u--:++u<i)&&n(t[u],u,t););return r?ti(t,e?0:u,e?u+1:i):ti(t,e?u+1:0,e?i:u)}function li(t,n){var r=t;return r instanceof Br&&(r=r.value()),Cn(n,function(t,n){return n.func.apply(n.thisArg,Mn([t],n.args))},r)}function hi(t,n,r){var e=t.length;if(e<2)return e?ai(t[0]):[];for(var i=-1,u=et(e);++i<e;)for(var o=t[i],a=-1;++a<e;)a!=i&&(u[i]=fe(u[i]||o,t[a],n,r));return ai(_e(u,1),n,r)}function pi(t,n,r){for(var i=-1,u=t.length,o=n.length,a={};++i<u;){var c=i<o?n[i]:e;r(a,t[i],c)}return a}function vi(t){return Zo(t)?t:[]}function _i(t){return\"function\"==typeof t?t:rc}function di(t,n){return $o(t)?t:gu(t,n)?[t]:Ru(ga(t))}var gi=Ke;function yi(t,n,r){var i=t.length;return r=r===e?i:r,!n&&r>=i?t:ti(t,n,r)}var mi=fn||function(t){return ln.clearTimeout(t)};function bi(t,n){if(n)return t.slice();var r=t.length,e=$t?$t(r):new t.constructor(r);return t.copy(e),e}function wi(t){var n=new t.constructor(t.byteLength);return new Bt(n).set(new Bt(t)),n}function xi(t,n){var r=n?wi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function Ii(t,n){if(t!==n){var r=t!==e,i=null===t,u=t==t,o=aa(t),a=n!==e,c=null===n,f=n==n,s=aa(n);if(!c&&!s&&!o&&t>n||o&&a&&f&&!c&&!s||i&&a&&f||!r&&f||!u)return 1;if(!i&&!o&&!s&&t<n||s&&r&&u&&!i&&!o||c&&r&&u||!a&&u||!f)return-1}return 0}function ji(t,n,r,e){for(var i=-1,u=t.length,o=r.length,a=-1,c=n.length,f=dr(u-o,0),s=et(c+f),l=!e;++a<c;)s[a]=n[a];for(;++i<o;)(l||i<u)&&(s[r[i]]=t[i]);for(;f--;)s[a++]=t[i++];return s}function Oi(t,n,r,e){for(var i=-1,u=t.length,o=-1,a=r.length,c=-1,f=n.length,s=dr(u-a,0),l=et(s+f),h=!e;++i<s;)l[i]=t[i];for(var p=i;++c<f;)l[p+c]=n[c];for(;++o<a;)(h||i<u)&&(l[p+r[o]]=t[i++]);return l}function Ai(t,n){var r=-1,e=t.length;for(n||(n=et(e));++r<e;)n[r]=t[r];return n}function Si(t,n,r,i){var u=!r;r||(r={});for(var o=-1,a=n.length;++o<a;){var c=n[o],f=i?i(r[c],t[c],c,r,t):e;f===e&&(f=t[c]),u?ee(r,c,f):Xr(r,c,f)}return r}function zi(t,n){return function(r,e){var i=$o(r)?jn:ne,u=n?n():{};return i(r,t,uu(e,2),u)}}function Ei(t){return Ke(function(n,r){var i=-1,u=r.length,o=u>1?r[u-1]:e,a=u>2?r[2]:e;for(o=t.length>3&&\"function\"==typeof o?(u--,o):e,a&&du(r[0],r[1],a)&&(o=u<3?e:o,u=1),n=jt(n);++i<u;){var c=r[i];c&&t(n,c,i,o)}return n})}function ki(t,n){return function(r,e){if(null==r)return r;if(!Ho(r))return t(r,e);for(var i=r.length,u=n?i:-1,o=jt(r);(n?u--:++u<i)&&!1!==e(o[u],u,o););return r}}function Pi(t){return function(n,r,e){for(var i=-1,u=jt(n),o=e(n),a=o.length;a--;){var c=o[t?a:++i];if(!1===r(u[c],c,u))break}return n}}function Mi(t){return function(n){var r=er(n=ga(n))?sr(n):e,i=r?r[0]:n.charAt(0),u=r?yi(r,1).join(\"\"):n.slice(1);return i[t]()+u}}function Ci(t){return function(n){return Cn(Ja(Ba(n).replace(Vt,\"\")),t,\"\")}}function Ri(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var r=Nr(t.prototype),e=t.apply(r,n);return Xo(e)?e:r}}function Ui(t){return function(n,r,i){var u=jt(n);if(!Ho(n)){var o=uu(r,3);n=ka(n),r=function(t){return o(u[t],t,u)}}var a=t(n,r,i);return a>-1?u[o?n[a]:a]:e}}function Ti(t){return Xi(function(n){var r=n.length,u=r,o=Dr.prototype.thru;for(t&&n.reverse();u--;){var a=n[u];if(\"function\"!=typeof a)throw new St(i);if(o&&!c&&\"wrapper\"==eu(a))var c=new Dr([],!0)}for(u=c?u:r;++u<r;){var f=eu(a=n[u]),s=\"wrapper\"==f?ru(a):e;c=s&&yu(s[0])&&424==s[1]&&!s[4].length&&1==s[9]?c[eu(s[0])].apply(c,s[3]):1==a.length&&yu(a)?c[f]():c.thru(a)}return function(){var t=arguments,e=t[0];if(c&&1==t.length&&$o(e))return c.plant(e).value();for(var i=0,u=r?n[i].apply(this,t):e;++i<r;)u=n[i].call(this,u);return u}})}function Fi(t,n,r,i,u,o,a,f,s,l){var h=n&c,p=1&n,v=2&n,_=24&n,d=512&n,g=v?e:Ri(t);return function c(){for(var y=arguments.length,m=et(y),b=y;b--;)m[b]=arguments[b];if(_)var w=iu(c),x=function(t,n){for(var r=t.length,e=0;r--;)t[r]===n&&++e;return e}(m,w);if(i&&(m=ji(m,i,u,_)),o&&(m=Oi(m,o,a,_)),y-=x,_&&y<l){var I=or(m,w);return qi(t,n,Fi,c.placeholder,r,m,I,f,s,l-y)}var j=p?r:this,O=v?j[t]:t;return y=m.length,f?m=function(t,n){for(var r=t.length,i=gr(n.length,r),u=Ai(t);i--;){var o=n[i];t[i]=_u(o,r)?u[o]:e}return t}(m,f):d&&y>1&&m.reverse(),h&&s<y&&(m.length=s),this&&this!==ln&&this instanceof c&&(O=g||Ri(O)),O.apply(j,m)}}function Li(t,n){return function(r,e){return function(t,n,r,e){return ye(t,function(t,i,u){n(e,r(t),i,u)}),e}(r,t,n(e),{})}}function Ni(t,n){return function(r,i){var u;if(r===e&&i===e)return n;if(r!==e&&(u=r),i!==e){if(u===e)return i;\"string\"==typeof r||\"string\"==typeof i?(r=oi(r),i=oi(i)):(r=ui(r),i=ui(i)),u=t(r,i)}return u}}function Wi(t){return Xi(function(n){return n=Pn(n,Vn(uu())),Ke(function(r){var e=this;return t(n,function(t){return In(t,e,r)})})})}function Di(t,n){var r=(n=n===e?\" \":oi(n)).length;if(r<2)return r?Ze(n,t):n;var i=Ze(n,pn(t/fr(n)));return er(n)?yi(sr(i),0,t).join(\"\"):i.slice(0,t)}function Bi(t){return function(n,r,i){return i&&\"number\"!=typeof i&&du(n,r,i)&&(r=i=e),n=ha(n),r===e?(r=n,n=0):r=ha(r),function(t,n,r,e){for(var i=-1,u=dr(pn((n-t)/(r||1)),0),o=et(u);u--;)o[e?u:++i]=t,t+=r;return o}(n,r,i=i===e?n<r?1:-1:ha(i),t)}}function $i(t){return function(n,r){return\"string\"==typeof n&&\"string\"==typeof r||(n=_a(n),r=_a(r)),t(n,r)}}function qi(t,n,r,i,u,o,c,f,s,l){var h=8&n;n|=h?a:64,4&(n&=~(h?64:a))||(n&=-4);var p=[t,n,u,h?o:e,h?c:e,h?e:o,h?e:c,f,s,l],v=r.apply(e,p);return yu(t)&&Au(v,p),v.placeholder=i,Eu(v,t,n)}function Hi(t){var n=It[t];return function(t,r){if(t=_a(t),(r=null==r?0:gr(pa(r),292))&&qn(t)){var e=(ga(t)+\"e\").split(\"e\");return+((e=(ga(n(e[0]+\"e\"+(+e[1]+r)))+\"e\").split(\"e\"))[0]+\"e\"+(+e[1]-r))}return n(t)}}var Zi=Or&&1/ar(new Or([,-0]))[1]==f?function(t){return new Or(t)}:ac;function Ki(t){return function(n){var r=lu(n);return r==w?ir(n):r==A?cr(n):function(t,n){return Pn(n,function(n){return[n,t[n]]})}(n,t(n))}}function Gi(t,n,r,u,f,s,l,h){var p=2&n;if(!p&&\"function\"!=typeof t)throw new St(i);var v=u?u.length:0;if(v||(n&=-97,u=f=e),l=l===e?l:dr(pa(l),0),h=h===e?h:pa(h),v-=f?f.length:0,64&n){var _=u,d=f;u=f=e}var g=p?e:ru(t),y=[t,n,r,u,f,_,d,s,l,h];if(g&&function(t,n){var r=t[1],e=n[1],i=r|e,u=i<131,a=e==c&&8==r||e==c&&256==r&&t[7].length<=n[8]||384==e&&n[7].length<=n[8]&&8==r;if(!u&&!a)return t;1&e&&(t[2]=n[2],i|=1&r?0:4);var f=n[3];if(f){var s=t[3];t[3]=s?ji(s,f,n[4]):f,t[4]=s?or(t[3],o):n[4]}(f=n[5])&&(s=t[5],t[5]=s?Oi(s,f,n[6]):f,t[6]=s?or(t[5],o):n[6]),(f=n[7])&&(t[7]=f),e&c&&(t[8]=null==t[8]?n[8]:gr(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i}(y,g),t=y[0],n=y[1],r=y[2],u=y[3],f=y[4],!(h=y[9]=y[9]===e?p?0:t.length:dr(y[9]-v,0))&&24&n&&(n&=-25),n&&1!=n)m=8==n||16==n?function(t,n,r){var i=Ri(t);return function u(){for(var o=arguments.length,a=et(o),c=o,f=iu(u);c--;)a[c]=arguments[c];var s=o<3&&a[0]!==f&&a[o-1]!==f?[]:or(a,f);return(o-=s.length)<r?qi(t,n,Fi,u.placeholder,e,a,s,e,e,r-o):In(this&&this!==ln&&this instanceof u?i:t,this,a)}}(t,n,h):n!=a&&33!=n||f.length?Fi.apply(e,y):function(t,n,r,e){var i=1&n,u=Ri(t);return function n(){for(var o=-1,a=arguments.length,c=-1,f=e.length,s=et(f+a),l=this&&this!==ln&&this instanceof n?u:t;++c<f;)s[c]=e[c];for(;a--;)s[c++]=arguments[++o];return In(l,i?r:this,s)}}(t,n,r,u);else var m=function(t,n,r){var e=1&n,i=Ri(t);return function n(){return(this&&this!==ln&&this instanceof n?i:t).apply(e?r:this,arguments)}}(t,n,r);return Eu((g?Ye:Au)(m,y),t,n)}function Vi(t,n,r,i){return t===e||No(t,kt[r])&&!Ct.call(i,r)?n:t}function Ji(t,n,r,i,u,o){return Xo(t)&&Xo(n)&&(o.set(n,t),Ne(t,n,e,Ji,o),o.delete(n)),t}function Yi(t){return ea(t)?e:t}function Qi(t,n,r,i,u,o){var a=1&r,c=t.length,f=n.length;if(c!=f&&!(a&&f>c))return!1;var s=o.get(t),l=o.get(n);if(s&&l)return s==n&&l==t;var h=-1,p=!0,v=2&r?new Zr:e;for(o.set(t,n),o.set(n,t);++h<c;){var _=t[h],d=n[h];if(i)var g=a?i(d,_,h,n,t,o):i(_,d,h,t,n,o);if(g!==e){if(g)continue;p=!1;break}if(v){if(!Un(n,function(t,n){if(!Yn(v,n)&&(_===t||u(_,t,r,i,o)))return v.push(n)})){p=!1;break}}else if(_!==d&&!u(_,d,r,i,o)){p=!1;break}}return o.delete(t),o.delete(n),p}function Xi(t){return zu(Iu(t,e,$u),t+\"\")}function tu(t){return xe(t,ka,fu)}function nu(t){return xe(t,Pa,su)}var ru=zr?function(t){return zr.get(t)}:ac;function eu(t){for(var n=t.name+\"\",r=Er[n],e=Ct.call(Er,n)?r.length:0;e--;){var i=r[e],u=i.func;if(null==u||u==t)return i.name}return n}function iu(t){return(Ct.call(Lr,\"placeholder\")?Lr:t).placeholder}function uu(){var t=Lr.iteratee||ec;return t=t===ec?Ce:t,arguments.length?t(arguments[0],arguments[1]):t}function ou(t,n){var r,e,i=t.__data__;return(\"string\"==(e=typeof(r=n))||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==r:null===r)?i[\"string\"==typeof n?\"string\":\"hash\"]:i.map}function au(t){for(var n=ka(t),r=n.length;r--;){var e=n[r],i=t[e];n[r]=[e,i,wu(i)]}return n}function cu(t,n){var r=function(t,n){return null==t?e:t[n]}(t,n);return Me(r)?r:e}var fu=dn?function(t){return null==t?[]:(t=jt(t),zn(dn(t),function(n){return Zt.call(t,n)}))}:vc,su=dn?function(t){for(var n=[];t;)Mn(n,fu(t)),t=qt(t);return n}:vc,lu=Ie;function hu(t,n,r){for(var e=-1,i=(n=di(n,t)).length,u=!1;++e<i;){var o=Uu(n[e]);if(!(u=null!=t&&r(t,o)))break;t=t[o]}return u||++e!=i?u:!!(i=null==t?0:t.length)&&Qo(i)&&_u(o,i)&&($o(t)||Bo(t))}function pu(t){return\"function\"!=typeof t.constructor||bu(t)?{}:Nr(qt(t))}function vu(t){return $o(t)||Bo(t)||!!(Gt&&t&&t[Gt])}function _u(t,n){var r=typeof t;return!!(n=n??s)&&(\"number\"==r||\"symbol\"!=r&&dt.test(t))&&t>-1&&t%1==0&&t<n}function du(t,n,r){if(!Xo(r))return!1;var e=typeof n;return!!(\"number\"==e?Ho(r)&&_u(n,r.length):\"string\"==e&&n in r)&&No(r[n],t)}function gu(t,n){if($o(t))return!1;var r=typeof t;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=t&&!aa(t))||Q.test(t)||!Y.test(t)||null!=n&&t in jt(n)}function yu(t){var n=eu(t),r=Lr[n];if(\"function\"!=typeof r||!(n in Br.prototype))return!1;if(t===r)return!0;var e=ru(r);return!!e&&t===e[0]}(xr&&lu(new xr(new ArrayBuffer(1)))!=P||Ir&&lu(new Ir)!=w||jr&&lu(jr.resolve())!=j||Or&&lu(new Or)!=A||Ar&&lu(new Ar)!=E)&&(lu=function(t){var n=Ie(t),r=n==I?t.constructor:e,i=r?Tu(r):\"\";if(i)switch(i){case kr:return P;case Pr:return w;case Mr:return j;case Cr:return A;case Rr:return E}return n});var mu=Pt?Jo:_c;function bu(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||kt)}function wu(t){return t==t&&!Xo(t)}function xu(t,n){return function(r){return null!=r&&r[t]===n&&(n!==e||t in jt(r))}}function Iu(t,n,r){return n=dr(n===e?t.length-1:n,0),function(){for(var e=arguments,i=-1,u=dr(e.length-n,0),o=et(u);++i<u;)o[i]=e[n+i];i=-1;for(var a=et(n+1);++i<n;)a[i]=e[i];return a[n]=r(o),In(t,this,a)}}function ju(t,n){return n.length<2?t:we(t,ti(n,0,-1))}function Ou(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var Au=ku(Ye),Su=hn||function(t,n){return ln.setTimeout(t,n)},zu=ku(Qe);function Eu(t,n,r){var e=n+\"\";return zu(t,function(t,n){var r=n.length;if(!r)return t;var e=r-1;return n[e]=(r>1?\"& \":\"\")+n[e],n=n.join(r>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+n+\"] */\\n\")}(e,function(t,n){return On(p,function(r){var e=\"_.\"+r[0];n&r[1]&&!En(t,e)&&t.push(e)}),t.sort()}(function(t){var n=t.match(ut);return n?n[1].split(ot):[]}(e),r)))}function ku(t){var n=0,r=0;return function(){var i=yr(),u=16-(i-r);if(r=i,u>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(e,arguments)}}function Pu(t,n){var r=-1,i=t.length,u=i-1;for(n=n===e?i:n;++r<n;){var o=He(r,u),a=t[o];t[o]=t[r],t[r]=a}return t.length=n,t}var Mu,Cu,Ru=(Mu=Co(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(\"\"),t.replace(X,function(t,r,e,i){n.push(e?i.replace(ft,\"$1\"):r||t)}),n},function(t){return 500===Cu.size&&Cu.clear(),t}),Cu=Mu.cache,Mu);function Uu(t){if(\"string\"==typeof t||aa(t))return t;var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function Tu(t){if(null!=t){try{return Mt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Fu(t){if(t instanceof Br)return t.clone();var n=new Dr(t.__wrapped__,t.__chain__);return n.__actions__=Ai(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}var Lu=Ke(function(t,n){return Zo(t)?fe(t,_e(n,1,Zo,!0)):[]}),Nu=Ke(function(t,n){var r=Gu(n);return Zo(r)&&(r=e),Zo(t)?fe(t,_e(n,1,Zo,!0),uu(r,2)):[]}),Wu=Ke(function(t,n){var r=Gu(n);return Zo(r)&&(r=e),Zo(t)?fe(t,_e(n,1,Zo,!0),e,r):[]});function Du(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=null==r?0:pa(r);return i<0&&(i=dr(e+i,0)),Ln(t,uu(n,3),i)}function Bu(t,n,r){var i=null==t?0:t.length;if(!i)return-1;var u=i-1;return r!==e&&(u=pa(r),u=r<0?dr(i+u,0):gr(u,i-1)),Ln(t,uu(n,3),u,!0)}function $u(t){return null!=t&&t.length?_e(t,1):[]}function qu(t){return t&&t.length?t[0]:e}var Hu=Ke(function(t){var n=Pn(t,vi);return n.length&&n[0]===t[0]?Se(n):[]}),Zu=Ke(function(t){var n=Gu(t),r=Pn(t,vi);return n===Gu(r)?n=e:r.pop(),r.length&&r[0]===t[0]?Se(r,uu(n,2)):[]}),Ku=Ke(function(t){var n=Gu(t),r=Pn(t,vi);return(n=\"function\"==typeof n?n:e)&&r.pop(),r.length&&r[0]===t[0]?Se(r,e,n):[]});function Gu(t){var n=null==t?0:t.length;return n?t[n-1]:e}var Vu=Ke(Ju);function Ju(t,n){return t&&t.length&&n&&n.length?$e(t,n):t}var Yu=Xi(function(t,n){var r=null==t?0:t.length,e=ie(t,n);return qe(t,Pn(n,function(t){return _u(t,r)?+t:t}).sort(Ii)),e});function Qu(t){return null==t?t:wr.call(t)}var Xu=Ke(function(t){return ai(_e(t,1,Zo,!0))}),to=Ke(function(t){var n=Gu(t);return Zo(n)&&(n=e),ai(_e(t,1,Zo,!0),uu(n,2))}),no=Ke(function(t){var n=Gu(t);return n=\"function\"==typeof n?n:e,ai(_e(t,1,Zo,!0),e,n)});function ro(t){if(!t||!t.length)return[];var n=0;return t=zn(t,function(t){if(Zo(t))return n=dr(t.length,n),!0}),Kn(n,function(n){return Pn(t,$n(n))})}function eo(t,n){if(!t||!t.length)return[];var r=ro(t);return null==n?r:Pn(r,function(t){return In(n,e,t)})}var io=Ke(function(t,n){return Zo(t)?fe(t,n):[]}),uo=Ke(function(t){return hi(zn(t,Zo))}),oo=Ke(function(t){var n=Gu(t);return Zo(n)&&(n=e),hi(zn(t,Zo),uu(n,2))}),ao=Ke(function(t){var n=Gu(t);return n=\"function\"==typeof n?n:e,hi(zn(t,Zo),e,n)}),co=Ke(ro),fo=Ke(function(t){var n=t.length,r=n>1?t[n-1]:e;return r=\"function\"==typeof r?(t.pop(),r):e,eo(t,r)});function so(t){var n=Lr(t);return n.__chain__=!0,n}function lo(t,n){return n(t)}var ho=Xi(function(t){var n=t.length,r=n?t[0]:0,i=this.__wrapped__,u=function(n){return ie(n,t)};return!(n>1||this.__actions__.length)&&i instanceof Br&&_u(r)?((i=i.slice(r,+r+(n?1:0))).__actions__.push({func:lo,args:[u],thisArg:e}),new Dr(i,this.__chain__).thru(function(t){return n&&!t.length&&t.push(e),t})):this.thru(u)}),po=zi(function(t,n,r){Ct.call(t,r)?++t[r]:ee(t,r,1)}),vo=Ui(Du),_o=Ui(Bu);function go(t,n){return($o(t)?On:se)(t,uu(n,3))}function yo(t,n){return($o(t)?An:le)(t,uu(n,3))}var mo=zi(function(t,n,r){Ct.call(t,r)?t[r].push(n):ee(t,r,[n])}),bo=Ke(function(t,n,r){var e=-1,i=\"function\"==typeof n,u=Ho(t)?et(t.length):[];return se(t,function(t){u[++e]=i?In(n,t,r):ze(t,n,r)}),u}),wo=zi(function(t,n,r){ee(t,r,n)});function xo(t,n){return($o(t)?Pn:Te)(t,uu(n,3))}var Io=zi(function(t,n,r){t[r?0:1].push(n)},function(){return[[],[]]}),jo=Ke(function(t,n){if(null==t)return[];var r=n.length;return r>1&&du(t,n[0],n[1])?n=[]:r>2&&du(n[0],n[1],n[2])&&(n=[n[0]]),De(t,_e(n,1),[])}),Oo=sn||function(){return ln.Date.now()};function Ao(t,n,r){return n=r?e:n,n=t&&null==n?t.length:n,Gi(t,c,e,e,e,e,n)}function So(t,n){var r;if(\"function\"!=typeof n)throw new St(i);return t=pa(t),function(){return--t>0&&(r=n.apply(this,arguments)),t<=1&&(n=e),r}}var zo=Ke(function(t,n,r){var e=1;if(r.length){var i=or(r,iu(zo));e|=a}return Gi(t,e,n,r,i)}),Eo=Ke(function(t,n,r){var e=3;if(r.length){var i=or(r,iu(Eo));e|=a}return Gi(n,e,t,r,i)});function ko(t,n,r){var u,o,a,c,f,s,l=0,h=!1,p=!1,v=!0;if(\"function\"!=typeof t)throw new St(i);function _(n){var r=u,i=o;return u=o=e,l=n,c=t.apply(i,r)}function d(t){var r=t-s;return s===e||r>=n||r<0||p&&t-l>=a}function g(){var t=Oo();if(d(t))return y(t);f=Su(g,function(t){var r=n-(t-s);return p?gr(r,a-(t-l)):r}(t))}function y(t){return f=e,v&&u?_(t):(u=o=e,c)}function m(){var t=Oo(),r=d(t);if(u=arguments,o=this,s=t,r){if(f===e)return function(t){return l=t,f=Su(g,n),h?_(t):c}(s);if(p)return mi(f),f=Su(g,n),_(s)}return f===e&&(f=Su(g,n)),c}return n=_a(n)||0,Xo(r)&&(h=!!r.leading,a=(p=\"maxWait\"in r)?dr(_a(r.maxWait)||0,n):a,v=\"trailing\"in r?!!r.trailing:v),m.cancel=function(){f!==e&&mi(f),l=0,u=s=o=f=e},m.flush=function(){return f===e?c:y(Oo())},m}var Po=Ke(function(t,n){return ce(t,1,n)}),Mo=Ke(function(t,n,r){return ce(t,_a(n)||0,r)});function Co(t,n){if(\"function\"!=typeof t||null!=n&&\"function\"!=typeof n)throw new St(i);var r=function(){var e=arguments,i=n?n.apply(this,e):e[0],u=r.cache;if(u.has(i))return u.get(i);var o=t.apply(this,e);return r.cache=u.set(i,o)||u,o};return r.cache=new(Co.Cache||Hr),r}function Ro(t){if(\"function\"!=typeof t)throw new St(i);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}Co.Cache=Hr;var Uo=gi(function(t,n){var r=(n=1==n.length&&$o(n[0])?Pn(n[0],Vn(uu())):Pn(_e(n,1),Vn(uu()))).length;return Ke(function(e){for(var i=-1,u=gr(e.length,r);++i<u;)e[i]=n[i].call(this,e[i]);return In(t,this,e)})}),To=Ke(function(t,n){var r=or(n,iu(To));return Gi(t,a,e,n,r)}),Fo=Ke(function(t,n){var r=or(n,iu(Fo));return Gi(t,64,e,n,r)}),Lo=Xi(function(t,n){return Gi(t,256,e,e,e,n)});function No(t,n){return t===n||t!=t&&n!=n}var Wo=$i(je),Do=$i(function(t,n){return t>=n}),Bo=Ee(function(){return arguments}())?Ee:function(t){return ta(t)&&Ct.call(t,\"callee\")&&!Zt.call(t,\"callee\")},$o=et.isArray,qo=gn?Vn(gn):function(t){return ta(t)&&Ie(t)==k};function Ho(t){return null!=t&&Qo(t.length)&&!Jo(t)}function Zo(t){return ta(t)&&Ho(t)}var Ko=Tn||_c,Go=yn?Vn(yn):function(t){return ta(t)&&Ie(t)==g};function Vo(t){if(!ta(t))return!1;var n=Ie(t);return n==y||\"[object DOMException]\"==n||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ea(t)}function Jo(t){if(!Xo(t))return!1;var n=Ie(t);return n==m||n==b||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function Yo(t){return\"number\"==typeof t&&t==pa(t)}function Qo(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=s}function Xo(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function ta(t){return null!=t&&\"object\"==typeof t}var na=mn?Vn(mn):function(t){return ta(t)&&lu(t)==w};function ra(t){return\"number\"==typeof t||ta(t)&&Ie(t)==x}function ea(t){if(!ta(t)||Ie(t)!=I)return!1;var n=qt(t);if(null===n)return!0;var r=Ct.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof r&&r instanceof r&&Mt.call(r)==Ft}var ia=bn?Vn(bn):function(t){return ta(t)&&Ie(t)==O},ua=wn?Vn(wn):function(t){return ta(t)&&lu(t)==A};function oa(t){return\"string\"==typeof t||!$o(t)&&ta(t)&&Ie(t)==S}function aa(t){return\"symbol\"==typeof t||ta(t)&&Ie(t)==z}var ca=xn?Vn(xn):function(t){return ta(t)&&Qo(t.length)&&!!en[Ie(t)]},fa=$i(Ue),sa=$i(function(t,n){return t<=n});function la(t){if(!t)return[];if(Ho(t))return oa(t)?sr(t):Ai(t);if(Yt&&t[Yt])return function(t){for(var n,r=[];!(n=t.next()).done;)r.push(n.value);return r}(t[Yt]());var n=lu(t);return(n==w?ir:n==A?ar:Na)(t)}function ha(t){return t?(t=_a(t))===f||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function pa(t){var n=ha(t),r=n%1;return n==n?r?n-r:n:0}function va(t){return t?ue(pa(t),0,h):0}function _a(t){if(\"number\"==typeof t)return t;if(aa(t))return l;if(Xo(t)){var n=\"function\"==typeof t.valueOf?t.valueOf():t;t=Xo(n)?n+\"\":n}if(\"string\"!=typeof t)return 0===t?t:+t;t=Gn(t);var r=pt.test(t);return r||_t.test(t)?cn(t.slice(2),r?2:8):ht.test(t)?l:+t}function da(t){return Si(t,Pa(t))}function ga(t){return null==t?\"\":oi(t)}var ya=Ei(function(t,n){if(bu(n)||Ho(n))Si(n,ka(n),t);else for(var r in n)Ct.call(n,r)&&Xr(t,r,n[r])}),ma=Ei(function(t,n){Si(n,Pa(n),t)}),ba=Ei(function(t,n,r,e){Si(n,Pa(n),t,e)}),wa=Ei(function(t,n,r,e){Si(n,ka(n),t,e)}),xa=Xi(ie),Ia=Ke(function(t,n){t=jt(t);var r=-1,i=n.length,u=i>2?n[2]:e;for(u&&du(n[0],n[1],u)&&(i=1);++r<i;)for(var o=n[r],a=Pa(o),c=-1,f=a.length;++c<f;){var s=a[c],l=t[s];(l===e||No(l,kt[s])&&!Ct.call(t,s))&&(t[s]=o[s])}return t}),ja=Ke(function(t){return t.push(e,Ji),In(Ca,e,t)});function Oa(t,n,r){var i=null==t?e:we(t,n);return i===e?r:i}function Aa(t,n){return null!=t&&hu(t,n,Ae)}var Sa=Li(function(t,n,r){null!=n&&\"function\"!=typeof n.toString&&(n=Tt.call(n)),t[n]=r},Xa(rc)),za=Li(function(t,n,r){null!=n&&\"function\"!=typeof n.toString&&(n=Tt.call(n)),Ct.call(t,n)?t[n].push(r):t[n]=[r]},uu),Ea=Ke(ze);function ka(t){return Ho(t)?Gr(t):Re(t)}function Pa(t){return Ho(t)?Gr(t,!0):function(t){if(!Xo(t))return function(t){var n=[];if(null!=t)for(var r in jt(t))n.push(r);return n}(t);var n=bu(t),r=[];for(var e in t)(\"constructor\"!=e||!n&&Ct.call(t,e))&&r.push(e);return r}(t)}var Ma=Ei(function(t,n,r){Ne(t,n,r)}),Ca=Ei(function(t,n,r,e){Ne(t,n,r,e)}),Ra=Xi(function(t,n){var r={};if(null==t)return r;var e=!1;n=Pn(n,function(n){return n=di(n,t),e||(e=n.length>1),n}),Si(t,nu(t),r),e&&(r=oe(r,7,Yi));for(var i=n.length;i--;)ci(r,n[i]);return r}),Ua=Xi(function(t,n){return null==t?{}:function(t,n){return Be(t,n,function(n,r){return Aa(t,r)})}(t,n)});function Ta(t,n){if(null==t)return{};var r=Pn(nu(t),function(t){return[t]});return n=uu(n),Be(t,r,function(t,r){return n(t,r[0])})}var Fa=Ki(ka),La=Ki(Pa);function Na(t){return null==t?[]:Jn(t,ka(t))}var Wa=Ci(function(t,n,r){return n=n.toLowerCase(),t+(r?Da(n):n)});function Da(t){return Va(ga(t).toLowerCase())}function Ba(t){return(t=ga(t))&&t.replace(gt,tr).replace(Jt,\"\")}var $a=Ci(function(t,n,r){return t+(r?\"-\":\"\")+n.toLowerCase()}),qa=Ci(function(t,n,r){return t+(r?\" \":\"\")+n.toLowerCase()}),Ha=Mi(\"toLowerCase\"),Za=Ci(function(t,n,r){return t+(r?\"_\":\"\")+n.toLowerCase()}),Ka=Ci(function(t,n,r){return t+(r?\" \":\"\")+Va(n)}),Ga=Ci(function(t,n,r){return t+(r?\" \":\"\")+n.toUpperCase()}),Va=Mi(\"toUpperCase\");function Ja(t,n,r){return t=ga(t),(n=r?e:n)===e?function(t){return tn.test(t)}(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(n)||[]}var Ya=Ke(function(t,n){try{return In(t,e,n)}catch(t){return Vo(t)?t:new wt(t)}}),Qa=Xi(function(t,n){return On(n,function(n){n=Uu(n),ee(t,n,zo(t[n],t))}),t});function Xa(t){return function(){return t}}var tc=Ti(),nc=Ti(!0);function rc(t){return t}function ec(t){return Ce(\"function\"==typeof t?t:oe(t,1))}var ic=Ke(function(t,n){return function(r){return ze(r,t,n)}}),uc=Ke(function(t,n){return function(r){return ze(t,r,n)}});function oc(t,n,r){var e=ka(n),i=be(n,e);null!=r||Xo(n)&&(i.length||!e.length)||(r=n,n=t,t=this,i=be(n,ka(n)));var u=!(Xo(r)&&\"chain\"in r&&!r.chain),o=Jo(t);return On(i,function(r){var e=n[r];t[r]=e,o&&(t.prototype[r]=function(){var n=this.__chain__;if(u||n){var r=t(this.__wrapped__);return(r.__actions__=Ai(this.__actions__)).push({func:e,args:arguments,thisArg:t}),r.__chain__=n,r}return e.apply(t,Mn([this.value()],arguments))})}),t}function ac(){}var cc=Wi(Pn),fc=Wi(Sn),sc=Wi(Un);function lc(t){return gu(t)?$n(Uu(t)):function(t){return function(n){return we(n,t)}}(t)}var hc=Bi(),pc=Bi(!0);function vc(){return[]}function _c(){return!1}var dc,gc=Ni(function(t,n){return t+n},0),yc=Hi(\"ceil\"),mc=Ni(function(t,n){return t/n},1),bc=Hi(\"floor\"),wc=Ni(function(t,n){return t*n},1),xc=Hi(\"round\"),Ic=Ni(function(t,n){return t-n},0);return Lr.after=function(t,n){if(\"function\"!=typeof n)throw new St(i);return t=pa(t),function(){if(--t<1)return n.apply(this,arguments)}},Lr.ary=Ao,Lr.assign=ya,Lr.assignIn=ma,Lr.assignInWith=ba,Lr.assignWith=wa,Lr.at=xa,Lr.before=So,Lr.bind=zo,Lr.bindAll=Qa,Lr.bindKey=Eo,Lr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return $o(t)?t:[t]},Lr.chain=so,Lr.chunk=function(t,n,r){n=(r?du(t,n,r):n===e)?1:dr(pa(n),0);var i=null==t?0:t.length;if(!i||n<1)return[];for(var u=0,o=0,a=et(pn(i/n));u<i;)a[o++]=ti(t,u,u+=n);return a},Lr.compact=function(t){for(var n=-1,r=null==t?0:t.length,e=0,i=[];++n<r;){var u=t[n];u&&(i[e++]=u)}return i},Lr.concat=function(){var t=arguments.length;if(!t)return[];for(var n=et(t-1),r=arguments[0],e=t;e--;)n[e-1]=arguments[e];return Mn($o(r)?Ai(r):[r],_e(n,1))},Lr.cond=function(t){var n=null==t?0:t.length,r=uu();return t=n?Pn(t,function(t){if(\"function\"!=typeof t[1])throw new St(i);return[r(t[0]),t[1]]}):[],Ke(function(r){for(var e=-1;++e<n;){var i=t[e];if(In(i[0],this,r))return In(i[1],this,r)}})},Lr.conforms=function(t){return function(t){var n=ka(t);return function(r){return ae(r,t,n)}}(oe(t,1))},Lr.constant=Xa,Lr.countBy=po,Lr.create=function(t,n){var r=Nr(t);return null==n?r:re(r,n)},Lr.curry=function t(n,r,i){var u=Gi(n,8,e,e,e,e,e,r=i?e:r);return u.placeholder=t.placeholder,u},Lr.curryRight=function t(n,r,i){var u=Gi(n,16,e,e,e,e,e,r=i?e:r);return u.placeholder=t.placeholder,u},Lr.debounce=ko,Lr.defaults=Ia,Lr.defaultsDeep=ja,Lr.defer=Po,Lr.delay=Mo,Lr.difference=Lu,Lr.differenceBy=Nu,Lr.differenceWith=Wu,Lr.drop=function(t,n,r){var i=null==t?0:t.length;return i?ti(t,(n=r||n===e?1:pa(n))<0?0:n,i):[]},Lr.dropRight=function(t,n,r){var i=null==t?0:t.length;return i?ti(t,0,(n=i-(n=r||n===e?1:pa(n)))<0?0:n):[]},Lr.dropRightWhile=function(t,n){return t&&t.length?si(t,uu(n,3),!0,!0):[]},Lr.dropWhile=function(t,n){return t&&t.length?si(t,uu(n,3),!0):[]},Lr.fill=function(t,n,r,i){var u=null==t?0:t.length;return u?(r&&\"number\"!=typeof r&&du(t,n,r)&&(r=0,i=u),function(t,n,r,i){var u=t.length;for((r=pa(r))<0&&(r=-r>u?0:u+r),(i=i===e||i>u?u:pa(i))<0&&(i+=u),i=r>i?0:va(i);r<i;)t[r++]=n;return t}(t,n,r,i)):[]},Lr.filter=function(t,n){return($o(t)?zn:ve)(t,uu(n,3))},Lr.flatMap=function(t,n){return _e(xo(t,n),1)},Lr.flatMapDeep=function(t,n){return _e(xo(t,n),f)},Lr.flatMapDepth=function(t,n,r){return r=r===e?1:pa(r),_e(xo(t,n),r)},Lr.flatten=$u,Lr.flattenDeep=function(t){return null!=t&&t.length?_e(t,f):[]},Lr.flattenDepth=function(t,n){return null!=t&&t.length?_e(t,n=n===e?1:pa(n)):[]},Lr.flip=function(t){return Gi(t,512)},Lr.flow=tc,Lr.flowRight=nc,Lr.fromPairs=function(t){for(var n=-1,r=null==t?0:t.length,e={};++n<r;){var i=t[n];ee(e,i[0],i[1])}return e},Lr.functions=function(t){return null==t?[]:be(t,ka(t))},Lr.functionsIn=function(t){return null==t?[]:be(t,Pa(t))},Lr.groupBy=mo,Lr.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Lr.intersection=Hu,Lr.intersectionBy=Zu,Lr.intersectionWith=Ku,Lr.invert=Sa,Lr.invertBy=za,Lr.invokeMap=bo,Lr.iteratee=ec,Lr.keyBy=wo,Lr.keys=ka,Lr.keysIn=Pa,Lr.map=xo,Lr.mapKeys=function(t,n){var r={};return n=uu(n,3),ye(t,function(t,e,i){ee(r,n(t,e,i),t)}),r},Lr.mapValues=function(t,n){var r={};return n=uu(n,3),ye(t,function(t,e,i){ee(r,e,n(t,e,i))}),r},Lr.matches=function(t){return Fe(oe(t,1))},Lr.matchesProperty=function(t,n){return Le(t,oe(n,1))},Lr.memoize=Co,Lr.merge=Ma,Lr.mergeWith=Ca,Lr.method=ic,Lr.methodOf=uc,Lr.mixin=oc,Lr.negate=Ro,Lr.nthArg=function(t){return t=pa(t),Ke(function(n){return We(n,t)})},Lr.omit=Ra,Lr.omitBy=function(t,n){return Ta(t,Ro(uu(n)))},Lr.once=function(t){return So(2,t)},Lr.orderBy=function(t,n,r,i){return null==t?[]:($o(n)||(n=null==n?[]:[n]),$o(r=i?e:r)||(r=null==r?[]:[r]),De(t,n,r))},Lr.over=cc,Lr.overArgs=Uo,Lr.overEvery=fc,Lr.overSome=sc,Lr.partial=To,Lr.partialRight=Fo,Lr.partition=Io,Lr.pick=Ua,Lr.pickBy=Ta,Lr.property=lc,Lr.propertyOf=function(t){return function(n){return null==t?e:we(t,n)}},Lr.pull=Vu,Lr.pullAll=Ju,Lr.pullAllBy=function(t,n,r){return t&&t.length&&n&&n.length?$e(t,n,uu(r,2)):t},Lr.pullAllWith=function(t,n,r){return t&&t.length&&n&&n.length?$e(t,n,e,r):t},Lr.pullAt=Yu,Lr.range=hc,Lr.rangeRight=pc,Lr.rearg=Lo,Lr.reject=function(t,n){return($o(t)?zn:ve)(t,Ro(uu(n,3)))},Lr.remove=function(t,n){var r=[];if(!t||!t.length)return r;var e=-1,i=[],u=t.length;for(n=uu(n,3);++e<u;){var o=t[e];n(o,e,t)&&(r.push(o),i.push(e))}return qe(t,i),r},Lr.rest=function(t,n){if(\"function\"!=typeof t)throw new St(i);return Ke(t,n=n===e?n:pa(n))},Lr.reverse=Qu,Lr.sampleSize=function(t,n,r){return n=(r?du(t,n,r):n===e)?1:pa(n),($o(t)?Jr:Ve)(t,n)},Lr.set=function(t,n,r){return null==t?t:Je(t,n,r)},Lr.setWith=function(t,n,r,i){return i=\"function\"==typeof i?i:e,null==t?t:Je(t,n,r,i)},Lr.shuffle=function(t){return($o(t)?Yr:Xe)(t)},Lr.slice=function(t,n,r){var i=null==t?0:t.length;return i?(r&&\"number\"!=typeof r&&du(t,n,r)?(n=0,r=i):(n=null==n?0:pa(n),r=r===e?i:pa(r)),ti(t,n,r)):[]},Lr.sortBy=jo,Lr.sortedUniq=function(t){return t&&t.length?ii(t):[]},Lr.sortedUniqBy=function(t,n){return t&&t.length?ii(t,uu(n,2)):[]},Lr.split=function(t,n,r){return r&&\"number\"!=typeof r&&du(t,n,r)&&(n=r=e),(r=r===e?h:r>>>0)?(t=ga(t))&&(\"string\"==typeof n||null!=n&&!ia(n))&&!(n=oi(n))&&er(t)?yi(sr(t),0,r):t.split(n,r):[]},Lr.spread=function(t,n){if(\"function\"!=typeof t)throw new St(i);return n=null==n?0:dr(pa(n),0),Ke(function(r){var e=r[n],i=yi(r,0,n);return e&&Mn(i,e),In(t,this,i)})},Lr.tail=function(t){var n=null==t?0:t.length;return n?ti(t,1,n):[]},Lr.take=function(t,n,r){return t&&t.length?ti(t,0,(n=r||n===e?1:pa(n))<0?0:n):[]},Lr.takeRight=function(t,n,r){var i=null==t?0:t.length;return i?ti(t,(n=i-(n=r||n===e?1:pa(n)))<0?0:n,i):[]},Lr.takeRightWhile=function(t,n){return t&&t.length?si(t,uu(n,3),!1,!0):[]},Lr.takeWhile=function(t,n){return t&&t.length?si(t,uu(n,3)):[]},Lr.tap=function(t,n){return n(t),t},Lr.throttle=function(t,n,r){var e=!0,u=!0;if(\"function\"!=typeof t)throw new St(i);return Xo(r)&&(e=\"leading\"in r?!!r.leading:e,u=\"trailing\"in r?!!r.trailing:u),ko(t,n,{leading:e,maxWait:n,trailing:u})},Lr.thru=lo,Lr.toArray=la,Lr.toPairs=Fa,Lr.toPairsIn=La,Lr.toPath=function(t){return $o(t)?Pn(t,Uu):aa(t)?[t]:Ai(Ru(ga(t)))},Lr.toPlainObject=da,Lr.transform=function(t,n,r){var e=$o(t),i=e||Ko(t)||ca(t);if(n=uu(n,4),null==r){var u=t&&t.constructor;r=i?e?new u:[]:Xo(t)&&Jo(u)?Nr(qt(t)):{}}return(i?On:ye)(t,function(t,e,i){return n(r,t,e,i)}),r},Lr.unary=function(t){return Ao(t,1)},Lr.union=Xu,Lr.unionBy=to,Lr.unionWith=no,Lr.uniq=function(t){return t&&t.length?ai(t):[]},Lr.uniqBy=function(t,n){return t&&t.length?ai(t,uu(n,2)):[]},Lr.uniqWith=function(t,n){return n=\"function\"==typeof n?n:e,t&&t.length?ai(t,e,n):[]},Lr.unset=function(t,n){return null==t||ci(t,n)},Lr.unzip=ro,Lr.unzipWith=eo,Lr.update=function(t,n,r){return null==t?t:fi(t,n,_i(r))},Lr.updateWith=function(t,n,r,i){return i=\"function\"==typeof i?i:e,null==t?t:fi(t,n,_i(r),i)},Lr.values=Na,Lr.valuesIn=function(t){return null==t?[]:Jn(t,Pa(t))},Lr.without=io,Lr.words=Ja,Lr.wrap=function(t,n){return To(_i(n),t)},Lr.xor=uo,Lr.xorBy=oo,Lr.xorWith=ao,Lr.zip=co,Lr.zipObject=function(t,n){return pi(t||[],n||[],Xr)},Lr.zipObjectDeep=function(t,n){return pi(t||[],n||[],Je)},Lr.zipWith=fo,Lr.entries=Fa,Lr.entriesIn=La,Lr.extend=ma,Lr.extendWith=ba,oc(Lr,Lr),Lr.add=gc,Lr.attempt=Ya,Lr.camelCase=Wa,Lr.capitalize=Da,Lr.ceil=yc,Lr.clamp=function(t,n,r){return r===e&&(r=n,n=e),r!==e&&(r=(r=_a(r))==r?r:0),n!==e&&(n=(n=_a(n))==n?n:0),ue(_a(t),n,r)},Lr.clone=function(t){return oe(t,4)},Lr.cloneDeep=function(t){return oe(t,5)},Lr.cloneDeepWith=function(t,n){return oe(t,5,n=\"function\"==typeof n?n:e)},Lr.cloneWith=function(t,n){return oe(t,4,n=\"function\"==typeof n?n:e)},Lr.conformsTo=function(t,n){return null==n||ae(t,n,ka(n))},Lr.deburr=Ba,Lr.defaultTo=function(t,n){return null==t||t!=t?n:t},Lr.divide=mc,Lr.endsWith=function(t,n,r){t=ga(t),n=oi(n);var i=t.length,u=r=r===e?i:ue(pa(r),0,i);return(r-=n.length)>=0&&t.slice(r,u)==n},Lr.eq=No,Lr.escape=function(t){return(t=ga(t))&&K.test(t)?t.replace(H,nr):t},Lr.escapeRegExp=function(t){return(t=ga(t))&&nt.test(t)?t.replace(tt,\"\\\\$&\"):t},Lr.every=function(t,n,r){var i=$o(t)?Sn:he;return r&&du(t,n,r)&&(n=e),i(t,uu(n,3))},Lr.find=vo,Lr.findIndex=Du,Lr.findKey=function(t,n){return Fn(t,uu(n,3),ye)},Lr.findLast=_o,Lr.findLastIndex=Bu,Lr.findLastKey=function(t,n){return Fn(t,uu(n,3),me)},Lr.floor=bc,Lr.forEach=go,Lr.forEachRight=yo,Lr.forIn=function(t,n){return null==t?t:de(t,uu(n,3),Pa)},Lr.forInRight=function(t,n){return null==t?t:ge(t,uu(n,3),Pa)},Lr.forOwn=function(t,n){return t&&ye(t,uu(n,3))},Lr.forOwnRight=function(t,n){return t&&me(t,uu(n,3))},Lr.get=Oa,Lr.gt=Wo,Lr.gte=Do,Lr.has=function(t,n){return null!=t&&hu(t,n,Oe)},Lr.hasIn=Aa,Lr.head=qu,Lr.identity=rc,Lr.includes=function(t,n,r,e){t=Ho(t)?t:Na(t),r=r&&!e?pa(r):0;var i=t.length;return r<0&&(r=dr(i+r,0)),oa(t)?r<=i&&t.indexOf(n,r)>-1:!!i&&Nn(t,n,r)>-1},Lr.indexOf=function(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=null==r?0:pa(r);return i<0&&(i=dr(e+i,0)),Nn(t,n,i)},Lr.inRange=function(t,n,r){return n=ha(n),r===e?(r=n,n=0):r=ha(r),function(t,n,r){return t>=gr(n,r)&&t<dr(n,r)}(t=_a(t),n,r)},Lr.invoke=Ea,Lr.isArguments=Bo,Lr.isArray=$o,Lr.isArrayBuffer=qo,Lr.isArrayLike=Ho,Lr.isArrayLikeObject=Zo,Lr.isBoolean=function(t){return!0===t||!1===t||ta(t)&&Ie(t)==d},Lr.isBuffer=Ko,Lr.isDate=Go,Lr.isElement=function(t){return ta(t)&&1===t.nodeType&&!ea(t)},Lr.isEmpty=function(t){if(null==t)return!0;if(Ho(t)&&($o(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Ko(t)||ca(t)||Bo(t)))return!t.length;var n=lu(t);if(n==w||n==A)return!t.size;if(bu(t))return!Re(t).length;for(var r in t)if(Ct.call(t,r))return!1;return!0},Lr.isEqual=function(t,n){return ke(t,n)},Lr.isEqualWith=function(t,n,r){var i=(r=\"function\"==typeof r?r:e)?r(t,n):e;return i===e?ke(t,n,e,r):!!i},Lr.isError=Vo,Lr.isFinite=function(t){return\"number\"==typeof t&&qn(t)},Lr.isFunction=Jo,Lr.isInteger=Yo,Lr.isLength=Qo,Lr.isMap=na,Lr.isMatch=function(t,n){return t===n||Pe(t,n,au(n))},Lr.isMatchWith=function(t,n,r){return r=\"function\"==typeof r?r:e,Pe(t,n,au(n),r)},Lr.isNaN=function(t){return ra(t)&&t!=+t},Lr.isNative=function(t){if(mu(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Me(t)},Lr.isNil=function(t){return null==t},Lr.isNull=function(t){return null===t},Lr.isNumber=ra,Lr.isObject=Xo,Lr.isObjectLike=ta,Lr.isPlainObject=ea,Lr.isRegExp=ia,Lr.isSafeInteger=function(t){return Yo(t)&&t>=-9007199254740991&&t<=s},Lr.isSet=ua,Lr.isString=oa,Lr.isSymbol=aa,Lr.isTypedArray=ca,Lr.isUndefined=function(t){return t===e},Lr.isWeakMap=function(t){return ta(t)&&lu(t)==E},Lr.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==Ie(t)},Lr.join=function(t,n){return null==t?\"\":vr.call(t,n)},Lr.kebabCase=$a,Lr.last=Gu,Lr.lastIndexOf=function(t,n,r){var i=null==t?0:t.length;if(!i)return-1;var u=i;return r!==e&&(u=(u=pa(r))<0?dr(i+u,0):gr(u,i-1)),n==n?function(t,n,r){for(var e=r+1;e--;)if(t[e]===n)return e;return e}(t,n,u):Ln(t,Dn,u,!0)},Lr.lowerCase=qa,Lr.lowerFirst=Ha,Lr.lt=fa,Lr.lte=sa,Lr.max=function(t){return t&&t.length?pe(t,rc,je):e},Lr.maxBy=function(t,n){return t&&t.length?pe(t,uu(n,2),je):e},Lr.mean=function(t){return Bn(t,rc)},Lr.meanBy=function(t,n){return Bn(t,uu(n,2))},Lr.min=function(t){return t&&t.length?pe(t,rc,Ue):e},Lr.minBy=function(t,n){return t&&t.length?pe(t,uu(n,2),Ue):e},Lr.stubArray=vc,Lr.stubFalse=_c,Lr.stubObject=function(){return{}},Lr.stubString=function(){return\"\"},Lr.stubTrue=function(){return!0},Lr.multiply=wc,Lr.nth=function(t,n){return t&&t.length?We(t,pa(n)):e},Lr.noConflict=function(){return ln._===this&&(ln._=Lt),this},Lr.noop=ac,Lr.now=Oo,Lr.pad=function(t,n,r){t=ga(t);var e=(n=pa(n))?fr(t):0;if(!n||e>=n)return t;var i=(n-e)/2;return Di(_n(i),r)+t+Di(pn(i),r)},Lr.padEnd=function(t,n,r){t=ga(t);var e=(n=pa(n))?fr(t):0;return n&&e<n?t+Di(n-e,r):t},Lr.padStart=function(t,n,r){t=ga(t);var e=(n=pa(n))?fr(t):0;return n&&e<n?Di(n-e,r)+t:t},Lr.parseInt=function(t,n,r){return r||null==n?n=0:n&&(n=+n),mr(ga(t).replace(rt,\"\"),n||0)},Lr.random=function(t,n,r){if(r&&\"boolean\"!=typeof r&&du(t,n,r)&&(n=r=e),r===e&&(\"boolean\"==typeof n?(r=n,n=e):\"boolean\"==typeof t&&(r=t,t=e)),t===e&&n===e?(t=0,n=1):(t=ha(t),n===e?(n=t,t=0):n=ha(n)),t>n){var i=t;t=n,n=i}if(r||t%1||n%1){var u=br();return gr(t+u*(n-t+an(\"1e-\"+((u+\"\").length-1))),n)}return He(t,n)},Lr.reduce=function(t,n,r){var e=$o(t)?Cn:Hn,i=arguments.length<3;return e(t,uu(n,4),r,i,se)},Lr.reduceRight=function(t,n,r){var e=$o(t)?Rn:Hn,i=arguments.length<3;return e(t,uu(n,4),r,i,le)},Lr.repeat=function(t,n,r){return n=(r?du(t,n,r):n===e)?1:pa(n),Ze(ga(t),n)},Lr.replace=function(){var t=arguments,n=ga(t[0]);return t.length<3?n:n.replace(t[1],t[2])},Lr.result=function(t,n,r){var i=-1,u=(n=di(n,t)).length;for(u||(u=1,t=e);++i<u;){var o=null==t?e:t[Uu(n[i])];o===e&&(i=u,o=r),t=Jo(o)?o.call(t):o}return t},Lr.round=xc,Lr.runInContext=t,Lr.sample=function(t){return($o(t)?Vr:Ge)(t)},Lr.size=function(t){if(null==t)return 0;if(Ho(t))return oa(t)?fr(t):t.length;var n=lu(t);return n==w||n==A?t.size:Re(t).length},Lr.snakeCase=Za,Lr.some=function(t,n,r){var i=$o(t)?Un:ni;return r&&du(t,n,r)&&(n=e),i(t,uu(n,3))},Lr.sortedIndex=function(t,n){return ri(t,n)},Lr.sortedIndexBy=function(t,n,r){return ei(t,n,uu(r,2))},Lr.sortedIndexOf=function(t,n){var r=null==t?0:t.length;if(r){var e=ri(t,n);if(e<r&&No(t[e],n))return e}return-1},Lr.sortedLastIndex=function(t,n){return ri(t,n,!0)},Lr.sortedLastIndexBy=function(t,n,r){return ei(t,n,uu(r,2),!0)},Lr.sortedLastIndexOf=function(t,n){if(null!=t&&t.length){var r=ri(t,n,!0)-1;if(No(t[r],n))return r}return-1},Lr.startCase=Ka,Lr.startsWith=function(t,n,r){return t=ga(t),r=null==r?0:ue(pa(r),0,t.length),n=oi(n),t.slice(r,r+n.length)==n},Lr.subtract=Ic,Lr.sum=function(t){return t&&t.length?Zn(t,rc):0},Lr.sumBy=function(t,n){return t&&t.length?Zn(t,uu(n,2)):0},Lr.template=function(t,n,r){var i=Lr.templateSettings;r&&du(t,n,r)&&(n=e),t=ga(t),n=wa({},n,i,Vi);var u=wa({},n.imports,i.imports,Vi),o=ka(u),a=Jn(u,o);On(o,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,f,s=0,l=n.interpolate||yt,h=\"__p += '\",p=Ot((n.escape||yt).source+\"|\"+l.source+\"|\"+(l===J?st:yt).source+\"|\"+(n.evaluate||yt).source+\"|$\",\"g\"),v=\"//# sourceURL=\"+(Ct.call(n,\"sourceURL\")?(n.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++rn+\"]\")+\"\\n\";t.replace(p,function(n,r,e,i,u,o){return e||(e=i),h+=t.slice(s,o).replace(mt,rr),r&&(c=!0,h+=\"' +\\n__e(\"+r+\") +\\n'\"),u&&(f=!0,h+=\"';\\n\"+u+\";\\n__p += '\"),e&&(h+=\"' +\\n((__t = (\"+e+\")) == null ? '' : __t) +\\n'\"),s=o+n.length,n}),h+=\"';\\n\";var _=Ct.call(n,\"variable\")&&n.variable;if(_){if(ct.test(_))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(f?h.replace(D,\"\"):h).replace(B,\"$1\").replace($,\"$1;\"),h=\"function(\"+(_||\"obj\")+\") {\\n\"+(_?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(f?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var d=Ya(function(){return xt(o,v+\"return \"+h).apply(e,a)});if(d.source=h,Vo(d))throw d;return d},Lr.times=function(t,n){if((t=pa(t))<1||t>s)return[];var r=h,e=gr(t,h);n=uu(n),t-=h;for(var i=Kn(e,n);++r<t;)n(r);return i},Lr.toFinite=ha,Lr.toInteger=pa,Lr.toLength=va,Lr.toLower=function(t){return ga(t).toLowerCase()},Lr.toNumber=_a,Lr.toSafeInteger=function(t){return t?ue(pa(t),-9007199254740991,s):0===t?t:0},Lr.toString=ga,Lr.toUpper=function(t){return ga(t).toUpperCase()},Lr.trim=function(t,n,r){if((t=ga(t))&&(r||n===e))return Gn(t);if(!t||!(n=oi(n)))return t;var i=sr(t),u=sr(n);return yi(i,Qn(i,u),Xn(i,u)+1).join(\"\")},Lr.trimEnd=function(t,n,r){if((t=ga(t))&&(r||n===e))return t.slice(0,lr(t)+1);if(!t||!(n=oi(n)))return t;var i=sr(t);return yi(i,0,Xn(i,sr(n))+1).join(\"\")},Lr.trimStart=function(t,n,r){if((t=ga(t))&&(r||n===e))return t.replace(rt,\"\");if(!t||!(n=oi(n)))return t;var i=sr(t);return yi(i,Qn(i,sr(n))).join(\"\")},Lr.truncate=function(t,n){var r=30,i=\"...\";if(Xo(n)){var u=\"separator\"in n?n.separator:u;r=\"length\"in n?pa(n.length):r,i=\"omission\"in n?oi(n.omission):i}var o=(t=ga(t)).length;if(er(t)){var a=sr(t);o=a.length}if(r>=o)return t;var c=r-fr(i);if(c<1)return i;var f=a?yi(a,0,c).join(\"\"):t.slice(0,c);if(u===e)return f+i;if(a&&(c+=f.length-c),ia(u)){if(t.slice(c).search(u)){var s,l=f;for(u.global||(u=Ot(u.source,ga(lt.exec(u))+\"g\")),u.lastIndex=0;s=u.exec(l);)var h=s.index;f=f.slice(0,h===e?c:h)}}else if(t.indexOf(oi(u),c)!=c){var p=f.lastIndexOf(u);p>-1&&(f=f.slice(0,p))}return f+i},Lr.unescape=function(t){return(t=ga(t))&&Z.test(t)?t.replace(q,hr):t},Lr.uniqueId=function(t){var n=++Rt;return ga(t)+n},Lr.upperCase=Ga,Lr.upperFirst=Va,Lr.each=go,Lr.eachRight=yo,Lr.first=qu,oc(Lr,(dc={},ye(Lr,function(t,n){Ct.call(Lr.prototype,n)||(dc[n]=t)}),dc),{chain:!1}),Lr.VERSION=\"4.18.1\",On([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Lr[t].placeholder=Lr}),On([\"drop\",\"take\"],function(t,n){Br.prototype[t]=function(r){r=r===e?1:dr(pa(r),0);var i=this.__filtered__&&!n?new Br(this):this.clone();return i.__filtered__?i.__takeCount__=gr(r,i.__takeCount__):i.__views__.push({size:gr(r,h),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Br.prototype[t+\"Right\"]=function(n){return this.reverse()[t](n).reverse()}}),On([\"filter\",\"map\",\"takeWhile\"],function(t,n){var r=n+1,e=1==r||3==r;Br.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:uu(t,3),type:r}),n.__filtered__=n.__filtered__||e,n}}),On([\"head\",\"last\"],function(t,n){var r=\"take\"+(n?\"Right\":\"\");Br.prototype[t]=function(){return this[r](1).value()[0]}}),On([\"initial\",\"tail\"],function(t,n){var r=\"drop\"+(n?\"\":\"Right\");Br.prototype[t]=function(){return this.__filtered__?new Br(this):this[r](1)}}),Br.prototype.compact=function(){return this.filter(rc)},Br.prototype.find=function(t){return this.filter(t).head()},Br.prototype.findLast=function(t){return this.reverse().find(t)},Br.prototype.invokeMap=Ke(function(t,n){return\"function\"==typeof t?new Br(this):this.map(function(r){return ze(r,t,n)})}),Br.prototype.reject=function(t){return this.filter(Ro(uu(t)))},Br.prototype.slice=function(t,n){t=pa(t);var r=this;return r.__filtered__&&(t>0||n<0)?new Br(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),n!==e&&(r=(n=pa(n))<0?r.dropRight(-n):r.take(n-t)),r)},Br.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Br.prototype.toArray=function(){return this.take(h)},ye(Br.prototype,function(t,n){var r=/^(?:filter|find|map|reject)|While$/.test(n),i=/^(?:head|last)$/.test(n),u=Lr[i?\"take\"+(\"last\"==n?\"Right\":\"\"):n],o=i||/^find/.test(n);u&&(Lr.prototype[n]=function(){var n=this.__wrapped__,a=i?[1]:arguments,c=n instanceof Br,f=a[0],s=c||$o(n),l=function(t){var n=u.apply(Lr,Mn([t],a));return i&&h?n[0]:n};s&&r&&\"function\"==typeof f&&1!=f.length&&(c=s=!1);var h=this.__chain__,p=!!this.__actions__.length,v=o&&!h,_=c&&!p;if(!o&&s){n=_?n:new Br(this);var d=t.apply(n,a);return d.__actions__.push({func:lo,args:[l],thisArg:e}),new Dr(d,h)}return v&&_?t.apply(this,a):(d=this.thru(l),v?i?d.value()[0]:d.value():d)})}),On([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var n=zt[t],r=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",e=/^(?:pop|shift)$/.test(t);Lr.prototype[t]=function(){var t=arguments;if(e&&!this.__chain__){var i=this.value();return n.apply($o(i)?i:[],t)}return this[r](function(r){return n.apply($o(r)?r:[],t)})}}),ye(Br.prototype,function(t,n){var r=Lr[n];if(r){var e=r.name+\"\";Ct.call(Er,e)||(Er[e]=[]),Er[e].push({name:n,func:r})}}),Er[Fi(e,2).name]=[{name:\"wrapper\",func:e}],Br.prototype.clone=function(){var t=new Br(this.__wrapped__);return t.__actions__=Ai(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ai(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ai(this.__views__),t},Br.prototype.reverse=function(){if(this.__filtered__){var t=new Br(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Br.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,r=$o(t),e=n<0,i=r?t.length:0,u=function(t,n,r){for(var e=-1,i=r.length;++e<i;){var u=r[e],o=u.size;switch(u.type){case\"drop\":t+=o;break;case\"dropRight\":n-=o;break;case\"take\":n=gr(n,t+o);break;case\"takeRight\":t=dr(t,n-o)}}return{start:t,end:n}}(0,i,this.__views__),o=u.start,a=u.end,c=a-o,f=e?a:o-1,s=this.__iteratees__,l=s.length,h=0,p=gr(c,this.__takeCount__);if(!r||!e&&i==c&&p==c)return li(t,this.__actions__);var v=[];t:for(;c--&&h<p;){for(var _=-1,d=t[f+=n];++_<l;){var g=s[_],y=g.iteratee,m=g.type,b=y(d);if(2==m)d=b;else if(!b){if(1==m)continue t;break t}}v[h++]=d}return v},Lr.prototype.at=ho,Lr.prototype.chain=function(){return so(this)},Lr.prototype.commit=function(){return new Dr(this.value(),this.__chain__)},Lr.prototype.next=function(){this.__values__===e&&(this.__values__=la(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?e:this.__values__[this.__index__++]}},Lr.prototype.plant=function(t){for(var n,r=this;r instanceof Wr;){var i=Fu(r);i.__index__=0,i.__values__=e,n?u.__wrapped__=i:n=i;var u=i;r=r.__wrapped__}return u.__wrapped__=t,n},Lr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Br){var n=t;return this.__actions__.length&&(n=new Br(this)),(n=n.reverse()).__actions__.push({func:lo,args:[Qu],thisArg:e}),new Dr(n,this.__chain__)}return this.thru(Qu)},Lr.prototype.toJSON=Lr.prototype.valueOf=Lr.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},Lr.prototype.first=Lr.prototype.head,Yt&&(Lr.prototype[Yt]=function(){return this}),Lr}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(ln._=pr,define(function(){return pr})):pn?((pn.exports=pr)._=pr,hn._=pr):ln._=pr}.call(this)}},n={};function r(e){var i=n[e];if(void 0!==i)return i.exports;var u=n[e]={id:e,loaded:!1,exports:{}};return t[e].call(u.exports,u,u.exports,r),u.loaded=!0,u.exports}r.d=(t,n)=>{for(var e in n)r.o(n,e)&&!r.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var e={};(()=>{\"use strict\";r.r(e),r.d(e,{createSagePayPaymentStrategy:()=>m});var t,n=r(8686),i=r(9440);class u extends Error{constructor(t){var n;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",n=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class o extends u{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class a extends u{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class c extends o{constructor(t){let n=\"Unable to submit payment for the order because the payload is invalid.\";t&&(n=`${n} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(n),this.name=\"PaymentArgumentInvalidError\"}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(t||(t={}));class f extends u{constructor(n){super(function(n){switch(n){case t.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case t.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case t.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case t.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(n)),this.subtype=n,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var s,l=function(t,n,r,e){return new(r||(r=Promise))(function(i,u){function o(t){try{c(e.next(t))}catch(t){u(t)}}function a(t){try{c(e.throw(t))}catch(t){u(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof r?n:new r(function(t){t(n)})).then(o,a)}c((e=e.apply(t,n||[])).next())})},h=function(t,n){var r={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.indexOf(e)<0&&(r[e]=t[e]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(e=Object.getOwnPropertySymbols(t);i<e.length;i++)n.indexOf(e[i])<0&&Object.prototype.propertyIsEnumerable.call(t,e[i])&&(r[e[i]]=t[e[i]])}return r};class p{constructor(t){this._paymentIntegrationService=t}execute(t,n){var r,e;return this._isHostedPaymentFormEnabled(null===(r=t.payment)||void 0===r?void 0:r.methodId,null===(e=t.payment)||void 0===e?void 0:e.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(t,n):this._executeWithoutHostedForm(t,n)}initialize(t){if(!this._isHostedPaymentFormEnabled(null==t?void 0:t.methodId,null==t?void 0:t.gatewayId)||!this._isHostedFieldAvailable(t))return this._shouldRenderHostedForm=!1,Promise.resolve();const n=t&&t.creditCard&&t.creditCard.form,r=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:e=\"\"}={}}=r.getStoreConfigOrThrow();if(!n)throw new o;const i=this._paymentIntegrationService.createHostedForm(e,n);return i.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=i,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new a)}_executeWithoutHostedForm(t,n){return l(this,void 0,void 0,function*(){const{payment:r}=t,e=h(t,[\"payment\"]),i=r&&r.paymentData;if(!r||!i)throw new c([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(e,n),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:i}))})}_executeWithHostedForm(n,r){return l(this,void 0,void 0,function*(){const{payment:e}=n,i=h(n,[\"payment\"]),u=this._hostedForm;if(!u)throw new f(t.PaymentNotInitialized);if(!e||!e.methodId)throw new c([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(i,r),yield u.validate().then(()=>u.submit(e))})}_isHostedPaymentFormEnabled(t,n){return!!t&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n).config.isHostedFormEnabled}_isHostedFieldAvailable(t){return!(0,i.values)(t&&t.creditCard&&t.creditCard.form.fields).every(i.isNil)}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(s||(s={}));class v extends u{constructor(t){super(function(t){switch(t){case s.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case s.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case s.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case s.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case s.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case s.MissingCheckoutConfig:case s.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case s.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case s.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case s.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case s.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case s.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case s.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function _(){const{navigator:t}=window;let n;return n=t.language?t.language:t.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof t.javaEnabled&&t.javaEnabled(),language:n,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}var d;!function(t){t.ACKNOWLEDGE=\"ACKNOWLEDGE\",t.FINALIZE=\"FINALIZE\",t.INITIALIZE=\"INITIALIZE\"}(d||(d={}));const g=d;class y extends p{constructor(t,n){super(t),this.paymentIntegrationService=t,this._formPoster=n}execute(n,r){const{payment:e}=n;if(!e)throw new f(t.PaymentNotInitialized);const{paymentData:u}=e;if(!u)throw new v(s.MissingPayment);if(this._isThreeDSTwoExperimentOn()){const t=Object.assign(Object.assign({},u),{browser_info:_()});n.payment&&(n.payment.paymentData=t)}return super.execute(n,r).catch(t=>(t=>\"object\"==typeof t&&null!==t&&\"body\"in t)(t)&&(0,i.some)(t.body.errors,{code:\"three_d_secure_required\"})?new Promise(()=>{let n;n=this._isThreeDSTwoExperimentOn()&&!t.body.three_ds_result.merchant_data?{creq:t.body.three_ds_result.payer_auth_request}:{PaReq:t.body.three_ds_result.payer_auth_request,TermUrl:t.body.three_ds_result.callback_url,MD:t.body.three_ds_result.merchant_data},this._formPoster.postForm(t.body.three_ds_result.acs_url,n,void 0,\"_top\")}):Promise.reject(t))}finalize(t){const n=this.paymentIntegrationService.getState();return n.getOrder()&&n.getPaymentStatus()===g.FINALIZE&&this.paymentIntegrationService.finalizeOrder(t),super.finalize()}_isThreeDSTwoExperimentOn(){return!0===this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features[\"INT-4994.Opayo_3DS2\"]}}const m=Object.assign(t=>new y(t,(0,n.createFormPoster)()),{resolveIds:[{id:\"sagepay\"}]})})(),module.exports=e})();\n//# sourceMappingURL=sagepay.js.map"
  },
  {
    "path": "dist/cjs/integrations/sezzle.js",
    "content": "(()=>{\"use strict\";var e={9165(e,t,r){Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){var t=new n.default;return new o.default(t,e)};var n=r(9828),o=r(5470)},9828(e,t){Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(){function e(){}return e.prototype.build=function(e,t,r){var n=this,o=document.createElement(\"form\");return o.style.display=\"none\",o.setAttribute(\"action\",e),o.setAttribute(\"method\",\"POST\"),o.setAttribute(\"target\",r||\"_top\"),Object.keys(t).forEach(function(e){var r=t[e];o.appendChild(n._createInput(r,e))}),o},e.prototype._createInput=function(e,t){var r=document.createElement(\"input\");return r.setAttribute(\"name\",t),r.setAttribute(\"type\",\"hidden\"),r.setAttribute(\"value\",e),r},e}();t.default=r},5470(e,t,r){Object.defineProperty(t,\"__esModule\",{value:!0});var n=r(9783),o=function(){function e(e,t){this._formBuilder=e,this._options=t}return e.prototype.postForm=function(e,t,r,n){var o=this._formBuilder.build(this._prependHost(e),t,n);window.addEventListener(\"unload\",function e(){window.removeEventListener(\"unload\",e),r&&r()}),document.body.appendChild(o),o.submit()},e.prototype._prependHost=function(e){return this._options&&this._options.host&&!(0,n.isAbsoluteUrl)(e)?(0,n.joinPaths)(this._options.host,e):e},e}();t.default=o},8686(e,t,r){t.createFormPoster=void 0;var n=r(9165);Object.defineProperty(t,\"createFormPoster\",{enumerable:!0,get:function(){return n.default}});r(5470)},9783(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.isAbsoluteUrl=function(e){return/^https?:\\/\\//.test(e)},t.joinPaths=function(e,t){return\"\".concat((r=e,r.replace(/\\/$/,\"\")),\"/\").concat(function(e){return e.replace(/^\\//,\"\")}(t));var r}}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var n={};r.r(n),r.d(n,{createSezzlePaymentStrategy:()=>l});var o=r(8686);class i extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class a extends i{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class s extends a{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class u extends i{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class c{constructor(e,t){this._formPoster=e,this._paymentIntegrationService=t}execute(e,t){return r=this,n=void 0,i=function*(){const{payment:r}=e,n=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"payment\"]),o=r&&r.paymentData;if(!r||!o)throw new s([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(n,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:o}))}catch(e){if(!(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)||\"object\"!=typeof(i=e.body)||null===i||!(\"additional_action_required\"in i)||!this._isAdditionalActionRequired(e.body))return Promise.reject(e);const{body:{additional_action_required:{data:{redirect_url:t}}}}=e;return new Promise(()=>{this.redirectUrl(t)})}var i},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{u(i.next(e))}catch(e){t(e)}}function s(e){try{u(i.throw(e))}catch(e){t(e)}}function u(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o(function(e){e(r)})).then(a,s)}u((i=i.apply(r,n||[])).next())});var r,n,o,i}finalize(){return Promise.reject(new u)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}redirectUrl(e){return this._formPoster.postForm(e,{})}_isAdditionalActionRequired(e){const{additional_action_required:t,status:r}=e;return\"additional_action_required\"===r&&t&&\"offsite_redirect\"===t.type}}class d extends c{redirectUrl(e){window.location.replace(e)}}const l=Object.assign(e=>new d((0,o.createFormPoster)(),e),{resolveIds:[{id:\"sezzle\"}]});module.exports=n})();\n//# sourceMappingURL=sezzle.js.map"
  },
  {
    "path": "dist/cjs/integrations/squarev2.js",
    "content": "(()=>{var t={4325(t,e,r){\"use strict\";r.d(e,{g:()=>o});var n=r(5889),o=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var r=this.getKey(t,e.params);return this._cache[r]||null},t.prototype.write=function(t,e,r){var n=this.getKey(t,e.params);this._cache[n]=r},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(n.stringify(e))},t}()},321(t,e,r){\"use strict\";r.d(e,{A:()=>a});var n=r(168),o=r(1675),i=r(5861),s=r(4670);function a(t){return new s.A(new i.A,new o.A,n,t)}},6889(t,e,r){\"use strict\";r.d(e,{A:()=>o});var n=r(2024);function o(t){return new n.A(t)}},4043(t,e,r){\"use strict\";r.r(e),r.d(e,{RequestSender:()=>i.A,Timeout:()=>s.A,createRequestSender:()=>n.A,createTimeout:()=>o.A});var n=r(321),o=r(6889),i=r(4670),s=r(2024)},4843(t,e,r){\"use strict\";function n(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}r.d(e,{A:()=>n})},1675(t,e,r){\"use strict\";r.d(e,{A:()=>a});var n=r(1635),o=r(710),i=/application\\/(\\w+\\+)?json/,s=/application\\/x-www-form-urlencoded/;const a=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(i.test(e))return JSON.stringify(t.body);if(s.test(e))return(0,o.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var r=this._getHeader(e,\"Content-Type\");return t&&i.test(r)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var r,o=e.split(\":\"),i=(o.shift()||\"\").trim();return i?(0,n.__assign)((0,n.__assign)({},t),((r={})[i.toLowerCase()]=o.join(\":\").trim(),r)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}()},5861(t,e,r){\"use strict\";r.d(e,{A:()=>o});var n=r(5889);const o=function(){function t(){}return t.prototype.createRequest=function(t,e){var r=new XMLHttpRequest;return this._configureRequest(r,t,e),r},t.prototype._configureRequest=function(t,e,r){void 0===r&&(r={}),t.open(r.method||\"GET\",this._formatUrl(e,r.params,r.encodeParams),!0),r.headers&&this._configureRequestHeaders(t,r.headers),\"boolean\"==typeof r.credentials&&(t.withCredentials=r.credentials),\"number\"==typeof r.timeout&&(t.timeout=r.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(r){t.setRequestHeader(r,e[r])})},t.prototype._formatUrl=function(t,e,r){return void 0===r&&(r=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(n.stringify(e,{encode:r})):t},t}()},4670(t,e,r){\"use strict\";r.d(e,{A:()=>u});var n=r(1635),o=r(35),i=r.n(o),s=r(4325),a=r(4843),c=r(2024);const u=function(){function t(t,e,r,n){void 0===n&&(n={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=r,this._options=n,this._cache=this._options.cache||new s.g}return t.prototype.sendRequest=function(t,e){var r=this,n=this._mergeDefaultOptions(t,e),o=this._getCachedRequest(t,n);if(o)return Promise.resolve(o);var i=this._requestFactory.createRequest(this._prependHost(t),n);return new Promise(function(e,o){var s=function(){var s=r._payloadTransformer.toResponse(i);s.status>=200&&s.status<300?(r._cacheRequest(t,n,s),e(s)):o(s)};i.onload=s,i.onerror=s,i.onabort=s,i.ontimeout=s,n.timeout instanceof c.A&&(n.timeout.onComplete(function(){return i.abort()}),n.timeout.start()),(0,a.A)(n.timeout)&&n.timeout.then(function(){return i.abort()}),i.send(r._payloadTransformer.toRequestBody(n))})},t.prototype.get=function(t,e){return this.sendRequest(t,(0,n.__assign)((0,n.__assign)({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,n.__assign)((0,n.__assign)({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,n.__assign)((0,n.__assign)({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,n.__assign)((0,n.__assign)({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,n.__assign)((0,n.__assign)({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var r={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},n=this._cookie.get(\"XSRF-TOKEN\");return n&&r.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(r.headers[\"X-XSRF-TOKEN\"]=n),e&&e.body&&r.headers&&(r.headers[\"Content-Type\"]=\"application/json\"),i()({},r,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,r){this._shouldCacheRequest(e)&&this._cache.write(t,e,r)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,e,r){\"use strict\";r.d(e,{A:()=>n});const n=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,e,r){\"use strict\";function n(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var r=t[e];return\"string\"==typeof r?\"\".concat(e,\"=\").concat(encodeURIComponent(r)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(r)||\"\"))}).join(\"&\")}r.d(e,{A:()=>n})},5889(t,e,r){\"use strict\";const n=r(803),o=r(1915),i=r(1657),s=r(3814);function a(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,e){return e.encode?e.strict?n(t):encodeURIComponent(t):t}function u(t,e){return e.decode?o(t):t}function p(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?p(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function l(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function f(t){const e=(t=l(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function d(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function h(t,e){a((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const r=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,r,n)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===n[t]&&(n[t]={}),n[t][e[1]]=r):n[t]=r};case\"bracket\":return(t,r,n)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==n[t]?n[t]=[].concat(n[t],r):n[t]=[r]:n[t]=r};case\"comma\":case\"separator\":return(e,r,n)=>{const o=\"string\"==typeof r&&r.includes(t.arrayFormatSeparator),i=\"string\"==typeof r&&!o&&u(r,t).includes(t.arrayFormatSeparator);r=i?u(r,t):r;const s=o||i?r.split(t.arrayFormatSeparator).map(e=>u(e,t)):null===r?r:u(r,t);n[e]=s};default:return(t,e,r)=>{void 0!==r[t]?r[t]=[].concat(r[t],e):r[t]=e}}}(e),n=Object.create(null);if(\"string\"!=typeof t)return n;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return n;for(const o of t.split(\"&\")){if(\"\"===o)continue;let[t,s]=i(e.decode?o.replace(/\\+/g,\" \"):o,\"=\");s=void 0===s?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?s:u(s,e),r(u(t,e),s,n)}for(const t of Object.keys(n)){const r=n[t];if(\"object\"==typeof r&&null!==r)for(const t of Object.keys(r))r[t]=d(r[t],e);else n[t]=d(r,e)}return!1===e.sort?n:(!0===e.sort?Object.keys(n).sort():Object.keys(n).sort(e.sort)).reduce((t,e)=>{const r=n[e];return Boolean(r)&&\"object\"==typeof r&&!Array.isArray(r)?t[e]=p(r):t[e]=r,t},Object.create(null))}e.extract=f,e.parse=h,e.stringify=(t,e)=>{if(!t)return\"\";a((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const r=r=>e.skipNull&&null==t[r]||e.skipEmptyString&&\"\"===t[r],n=function(t){switch(t.arrayFormat){case\"index\":return e=>(r,n)=>{const o=r.length;return void 0===n||t.skipNull&&null===n||t.skipEmptyString&&\"\"===n?r:null===n?[...r,[c(e,t),\"[\",o,\"]\"].join(\"\")]:[...r,[c(e,t),\"[\",c(o,t),\"]=\",c(n,t)].join(\"\")]};case\"bracket\":return e=>(r,n)=>void 0===n||t.skipNull&&null===n||t.skipEmptyString&&\"\"===n?r:null===n?[...r,[c(e,t),\"[]\"].join(\"\")]:[...r,[c(e,t),\"[]=\",c(n,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(r,n)=>null==n||0===n.length?r:0===r.length?[[c(e,t),\"=\",c(n,t)].join(\"\")]:[[r,c(n,t)].join(t.arrayFormatSeparator)];default:return e=>(r,n)=>void 0===n||t.skipNull&&null===n||t.skipEmptyString&&\"\"===n?r:null===n?[...r,c(e,t)]:[...r,[c(e,t),\"=\",c(n,t)].join(\"\")]}}(e),o={};for(const e of Object.keys(t))r(e)||(o[e]=t[e]);const i=Object.keys(o);return!1!==e.sort&&i.sort(e.sort),i.map(r=>{const o=t[r];return void 0===o?\"\":null===o?c(r,e):Array.isArray(o)?o.reduce(n(r),[]).join(\"&\"):c(r,e)+\"=\"+c(o,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[r,n]=i(t,\"#\");return Object.assign({url:r.split(\"?\")[0]||\"\",query:h(f(t),e)},e&&e.parseFragmentIdentifier&&n?{fragmentIdentifier:u(n,e)}:{})},e.stringifyUrl=(t,r)=>{r=Object.assign({encode:!0,strict:!0},r);const n=l(t.url).split(\"?\")[0]||\"\",o=e.extract(t.url),i=e.parse(o,{sort:!1}),s=Object.assign(i,t.query);let a=e.stringify(s,r);a&&(a=`?${a}`);let u=function(t){let e=\"\";const r=t.indexOf(\"#\");return-1!==r&&(e=t.slice(r)),e}(t.url);return t.fragmentIdentifier&&(u=`#${c(t.fragmentIdentifier,r)}`),`${n}${a}${u}`},e.pick=(t,r,n)=>{n=Object.assign({parseFragmentIdentifier:!0},n);const{url:o,query:i,fragmentIdentifier:a}=e.parseUrl(t,n);return e.stringifyUrl({url:o,query:s(i,r),fragmentIdentifier:a},n)},e.exclude=(t,r,n)=>{const o=Array.isArray(r)?t=>!r.includes(t):(t,e)=>!r(t,e);return e.pick(t,o,n)}},5477(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement(\"link\");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=r},471(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new i.default(new o.default,(0,n.createRequestSender)())};var n=r(4043),o=r(5477),i=r(4886)},9722(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new i.default(new o.default,(0,n.createRequestSender)())};var n=r(4043),o=r(5477),i=r(7995)},5895(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return n||(n=(0,o.default)()),n};var n,o=r(471)},282(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return n||(n=(0,o.default)()),n};var n,o=r(9722)},315(t,e,r){\"use strict\";e.vQ=void 0;r(4886),r(471);var n=r(5895);Object.defineProperty(e,\"vQ\",{enumerable:!0,get:function(){return n.default}});r(7995),r(9722),r(282)},4886(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var r=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(n,o){var i=document.createElement(\"script\"),s=e||{},a=s.async,c=void 0!==a&&a,u=s.attributes,p=void 0===u?{}:u;Object.keys(p).forEach(function(t){i.setAttribute(t,p[t])}),i.onload=function(){return n()},i.onreadystatechange=function(){return n()},i.onerror=function(e){delete r._scripts[t],o(e)},i.async=c,i.src=t,document.body.appendChild(i)})),this._scripts[t]},t.prototype.loadScripts=function(t,e){var r=this;return Promise.all(t.map(function(t){return r.loadScript(t,e)})).then(function(){})},t.prototype.preloadScript=function(t,e){var r=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(n,o){var i=(e||{}).prefetch,s=void 0!==i&&i?\"prefetch\":\"preload\";if(r._browserSupport.canSupportRel(s)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=s,a.href=t,a.onload=function(){n()},a.onerror=function(){delete r._preloadedScripts[t],o()},document.head.appendChild(a)}else r._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return n()}).catch(o)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var r=this;return Promise.all(t.map(function(t){return r.preloadScript(t,e)})).then(function(){})},t}();e.default=r},7995(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var r=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(n,o){var i=document.createElement(\"link\"),s=e||{},a=s.prepend,c=void 0!==a&&a,u=s.attributes,p=void 0===u?{}:u;Object.keys(p).forEach(function(t){i.setAttribute(t,p[t])}),i.onload=function(){return n()},i.onerror=function(e){delete r._stylesheets[t],o(e)},i.rel=\"stylesheet\",i.href=t,c&&document.head.children[0]?document.head.insertBefore(i,document.head.children[0]):document.head.appendChild(i)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var r=this;return Promise.all(t.map(function(t){return r.loadStylesheet(t,e)})).then(function(){})},t.prototype.preloadStylesheet=function(t,e){var r=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(n,o){var i=(e||{}).prefetch,s=void 0!==i&&i,a=s?\"prefetch\":\"preload\";if(r._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=s?\"prefetch\":\"preload\",c.href=t,c.onload=function(){n()},c.onerror=function(e){delete r._preloadedStylesheets[t],o(e)},document.head.appendChild(c)}else r._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return n()}).catch(o)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var r=this;return Promise.all(t.map(function(t){return r.preloadStylesheet(t,e)})).then(function(){})},t}();e.default=r},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",r=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),n=new RegExp(\"(\"+e+\")+\",\"gi\");function o(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var r=t.slice(0,e),n=t.slice(e);return Array.prototype.concat.call([],o(r),o(n))}function i(t){try{return decodeURIComponent(t)}catch(i){for(var e=t.match(r)||[],n=1;n<e.length;n++)e=(t=o(e,n).join(\"\")).match(r)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},r=n.exec(t);r;){try{e[r[0]]=decodeURIComponent(r[0])}catch(t){var o=i(r[0]);o!==r[0]&&(e[r[0]]=o)}r=n.exec(t)}e[\"%C2\"]=\"�\";for(var s=Object.keys(e),a=0;a<s.length;a++){var c=s[a];t=t.replace(new RegExp(c,\"g\"),e[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,e){for(var r={},n=Object.keys(t),o=Array.isArray(e),i=0;i<n.length;i++){var s=n[i],a=t[s];(o?-1!==e.indexOf(s):e(s,a,t))&&(r[s]=a)}return r}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var r=arguments[t];for(var n in r)e[n]=r[n]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function r(n){function o(){}function i(e,r,i){if(\"undefined\"!=typeof document){\"number\"==typeof(i=t({path:\"/\"},o.defaults,i)).expires&&(i.expires=new Date(1*new Date+864e5*i.expires)),i.expires=i.expires?i.expires.toUTCString():\"\";try{var s=JSON.stringify(r);/^[\\{\\[]/.test(s)&&(r=s)}catch(t){}r=n.write?n.write(r,e):encodeURIComponent(String(r)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in i)i[c]&&(a+=\"; \"+c,!0!==i[c]&&(a+=\"=\"+i[c].split(\";\")[0]));return document.cookie=e+\"=\"+r+a}}function s(t,r){if(\"undefined\"!=typeof document){for(var o={},i=document.cookie?document.cookie.split(\"; \"):[],s=0;s<i.length;s++){var a=i[s].split(\"=\"),c=a.slice(1).join(\"=\");r||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var u=e(a[0]);if(c=(n.read||n)(c,u)||e(c),r)try{c=JSON.parse(c)}catch(t){}if(o[u]=c,t===u)break}catch(t){}}return t?o[t]:o}}return o.set=i,o.get=function(t){return s(t,!1)},o.getJSON=function(t){return s(t,!0)},o.remove=function(e,r){i(e,\"\",t(r,{expires:-1}))},o.defaults={},o.withConverter=r,o}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},35(t,e,r){t=r.nmd(t);var n=\"__lodash_hash_undefined__\",o=9007199254740991,i=\"[object Arguments]\",s=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,u=/^(?:0|[1-9]\\d*)$/,p={};p[\"[object Float32Array]\"]=p[\"[object Float64Array]\"]=p[\"[object Int8Array]\"]=p[\"[object Int16Array]\"]=p[\"[object Int32Array]\"]=p[\"[object Uint8Array]\"]=p[\"[object Uint8ClampedArray]\"]=p[\"[object Uint16Array]\"]=p[\"[object Uint32Array]\"]=!0,p[i]=p[\"[object Array]\"]=p[\"[object ArrayBuffer]\"]=p[\"[object Boolean]\"]=p[\"[object DataView]\"]=p[\"[object Date]\"]=p[\"[object Error]\"]=p[s]=p[\"[object Map]\"]=p[\"[object Number]\"]=p[a]=p[\"[object RegExp]\"]=p[\"[object Set]\"]=p[\"[object String]\"]=p[\"[object WeakMap]\"]=!1;var l,f,d,h=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,y=\"object\"==typeof self&&self&&self.Object===Object&&self,b=h||y||Function(\"return this\")(),_=e&&!e.nodeType&&e,v=_&&t&&!t.nodeType&&t,m=v&&v.exports===_,g=m&&h.process,S=function(){try{return v&&v.require&&v.require(\"util\").types||g&&g.binding&&g.binding(\"util\")}catch(t){}}(),w=S&&S.isTypedArray,j=Array.prototype,O=Function.prototype,E=Object.prototype,x=b[\"__core-js_shared__\"],I=O.toString,P=E.hasOwnProperty,T=(l=/[^.]+$/.exec(x&&x.keys&&x.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",A=E.toString,C=I.call(Object),k=RegExp(\"^\"+I.call(P).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),R=m?b.Buffer:void 0,q=b.Symbol,N=b.Uint8Array,z=(R&&R.allocUnsafe,f=Object.getPrototypeOf,d=Object,function(t){return f(d(t))}),V=Object.create,U=E.propertyIsEnumerable,F=j.splice,B=q?q.toStringTag:void 0,D=function(){try{var t=at(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),H=R?R.isBuffer:void 0,L=Math.max,M=Date.now,$=at(b,\"Map\"),G=at(Object,\"create\"),J=function(){function t(){}return function(e){if(!mt(e))return{};if(V)return V(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();function K(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function Y(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function X(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function Q(t){var e=this.__data__=new Y(t);this.size=e.size}function W(t,e,r){(void 0!==r&&!ft(t[e],r)||void 0===r&&!(e in t))&&et(t,e,r)}function Z(t,e,r){var n=t[e];P.call(t,e)&&ft(n,r)&&(void 0!==r||e in t)||et(t,e,r)}function tt(t,e){for(var r=t.length;r--;)if(ft(t[r][0],e))return r;return-1}function et(t,e,r){\"__proto__\"==e&&D?D(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}K.prototype.clear=function(){this.__data__=G?G(null):{},this.size=0},K.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},K.prototype.get=function(t){var e=this.__data__;if(G){var r=e[t];return r===n?void 0:r}return P.call(e,t)?e[t]:void 0},K.prototype.has=function(t){var e=this.__data__;return G?void 0!==e[t]:P.call(e,t)},K.prototype.set=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=G&&void 0===e?n:e,this},Y.prototype.clear=function(){this.__data__=[],this.size=0},Y.prototype.delete=function(t){var e=this.__data__,r=tt(e,t);return!(r<0||(r==e.length-1?e.pop():F.call(e,r,1),--this.size,0))},Y.prototype.get=function(t){var e=this.__data__,r=tt(e,t);return r<0?void 0:e[r][1]},Y.prototype.has=function(t){return tt(this.__data__,t)>-1},Y.prototype.set=function(t,e){var r=this.__data__,n=tt(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this},X.prototype.clear=function(){this.size=0,this.__data__={hash:new K,map:new($||Y),string:new K}},X.prototype.delete=function(t){var e=st(this,t).delete(t);return this.size-=e?1:0,e},X.prototype.get=function(t){return st(this,t).get(t)},X.prototype.has=function(t){return st(this,t).has(t)},X.prototype.set=function(t,e){var r=st(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this},Q.prototype.clear=function(){this.__data__=new Y,this.size=0},Q.prototype.delete=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},Q.prototype.get=function(t){return this.__data__.get(t)},Q.prototype.has=function(t){return this.__data__.has(t)},Q.prototype.set=function(t,e){var r=this.__data__;if(r instanceof Y){var n=r.__data__;if(!$||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new X(n)}return r.set(t,e),this.size=r.size,this};function rt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":B&&B in Object(t)?function(t){var e=P.call(t,B),r=t[B];try{t[B]=void 0;var n=!0}catch(t){}var o=A.call(t);return n&&(e?t[B]=r:delete t[B]),o}(t):function(t){return A.call(t)}(t)}function nt(t){return gt(t)&&rt(t)==i}function ot(t,e,r,n,o){t!==e&&function(t,e,r){for(var n=-1,o=Object(t),i=r(t),s=i.length;s--;){var a=i[++n];if(!1===e(o[a],a,o))break}}(e,function(i,s){if(o||(o=new Q),mt(i))!function(t,e,r,n,o,i,s){var c=pt(t,r),u=pt(e,r),p=s.get(u);if(p)W(t,r,p);else{var l,f,d,h,y,b=i?i(c,u,r+\"\",t,e,s):void 0,_=void 0===b;if(_){var v=ht(u),m=!v&&bt(u),g=!v&&!m&&St(u);b=u,v||m||g?ht(c)?b=c:gt(y=c)&&yt(y)?b=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}(c):m?(_=!1,b=function(t){return t.slice()}(u)):g?(_=!1,h=new(d=(l=u).buffer).constructor(d.byteLength),new N(h).set(new N(d)),f=h,b=new l.constructor(f,l.byteOffset,l.length)):b=[]:function(t){if(!gt(t)||rt(t)!=a)return!1;var e=z(t);if(null===e)return!0;var r=P.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof r&&r instanceof r&&I.call(r)==C}(u)||dt(u)?(b=c,dt(c)?b=function(t){return function(t,e,r){var n=!r;r||(r={});for(var o=-1,i=e.length;++o<i;){var s=e[o],a=void 0;void 0===a&&(a=t[s]),n?et(r,s,a):Z(r,s,a)}return r}(t,wt(t))}(c):mt(c)&&!_t(c)||(b=function(t){return\"function\"!=typeof t.constructor||ut(t)?{}:J(z(t))}(u))):_=!1}_&&(s.set(u,b),o(b,u,n,i,s),s.delete(u)),W(t,r,b)}}(t,e,s,r,ot,n,o);else{var c=n?n(pt(t,s),i,s+\"\",t,e,o):void 0;void 0===c&&(c=i),W(t,s,c)}},wt)}var it=D?function(t,e){return D(t,\"toString\",{configurable:!0,enumerable:!1,value:(r=e,function(){return r}),writable:!0});var r}:Et;function st(t,e){var r,n,o=t.__data__;return(\"string\"==(n=typeof(r=e))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?o[\"string\"==typeof e?\"string\":\"hash\"]:o.map}function at(t,e){var r=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!mt(t)||function(t){return!!T&&T in t}(t))&&(_t(t)?k:c).test(function(t){if(null!=t){try{return I.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(r)?r:void 0}function ct(t,e){var r=typeof t;return!!(e=e??o)&&(\"number\"==r||\"symbol\"!=r&&u.test(t))&&t>-1&&t%1==0&&t<e}function ut(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||E)}function pt(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var lt=function(t){var e=0,r=0;return function(){var n=M(),o=16-(n-r);if(r=n,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(it);function ft(t,e){return t===e||t!=t&&e!=e}var dt=nt(function(){return arguments}())?nt:function(t){return gt(t)&&P.call(t,\"callee\")&&!U.call(t,\"callee\")},ht=Array.isArray;function yt(t){return null!=t&&vt(t.length)&&!_t(t)}var bt=H||function(){return!1};function _t(t){if(!mt(t))return!1;var e=rt(t);return e==s||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function vt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=o}function mt(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function gt(t){return null!=t&&\"object\"==typeof t}var St=w?function(t){return function(e){return t(e)}}(w):function(t){return gt(t)&&vt(t.length)&&!!p[rt(t)]};function wt(t){return yt(t)?function(t,e){var r=ht(t),n=!r&&dt(t),o=!r&&!n&&bt(t),i=!r&&!n&&!o&&St(t),s=r||n||o||i,a=s?function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}(t.length,String):[],c=a.length;for(var u in t)!e&&!P.call(t,u)||s&&(\"length\"==u||o&&(\"offset\"==u||\"parent\"==u)||i&&(\"buffer\"==u||\"byteLength\"==u||\"byteOffset\"==u)||ct(u,c))||a.push(u);return a}(t,!0):function(t){if(!mt(t))return function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e}(t);var e=ut(t),r=[];for(var n in t)(\"constructor\"!=n||!e&&P.call(t,n))&&r.push(n);return r}(t)}var jt,Ot=(jt=function(t,e,r){ot(t,e,r)},function(t,e){return lt(function(t,e,r){return e=L(void 0===e?t.length-1:e,0),function(){for(var n=arguments,o=-1,i=L(n.length-e,0),s=Array(i);++o<i;)s[o]=n[e+o];o=-1;for(var a=Array(e+1);++o<e;)a[o]=n[o];return a[e]=r(s),function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}(t,this,a)}}(t,e,Et),t+\"\")}(function(t,e){var r=-1,n=e.length,o=n>1?e[n-1]:void 0,i=n>2?e[2]:void 0;for(o=jt.length>3&&\"function\"==typeof o?(n--,o):void 0,i&&function(t,e,r){if(!mt(r))return!1;var n=typeof e;return!!(\"number\"==n?yt(r)&&ct(e,r.length):\"string\"==n&&e in r)&&ft(r[e],t)}(e[0],e[1],i)&&(o=n<3?void 0:o,n=1),t=Object(t);++r<n;){var s=e[r];s&&jt(t,s,r)}return t}));function Et(t){return t}t.exports=Ot},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const r=t.indexOf(e);return-1===r?[t]:[t.slice(0,r),t.slice(r+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,e,r){\"use strict\";r.d(e,{__assign:()=>n});var n=function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={id:n,loaded:!1,exports:{}};return t[n](i,i.exports,r),i.loaded=!0,i.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var n={};(()=>{\"use strict\";r.r(n),r.d(n,{createSquareV2PaymentStrategy:()=>st});var t=r(315),e=function(t,r){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},e(t,r)};function o(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}function i(t){return\"function\"==typeof t}var s=!1,a={Promise:void 0,set useDeprecatedSynchronousErrorHandling(t){t&&(new Error).stack,s=t},get useDeprecatedSynchronousErrorHandling(){return s}};function c(t){setTimeout(function(){throw t},0)}var u={closed:!0,next:function(t){},error:function(t){if(a.useDeprecatedSynchronousErrorHandling)throw t;c(t)},complete:function(){}},p=function(){return Array.isArray||function(t){return t&&\"number\"==typeof t.length}}();function l(t){return null!==t&&\"object\"==typeof t}var f=function(){function t(t){return Error.call(this),this.message=t?t.length+\" errors occurred during unsubscription:\\n\"+t.map(function(t,e){return e+1+\") \"+t.toString()}).join(\"\\n  \"):\"\",this.name=\"UnsubscriptionError\",this.errors=t,this}return t.prototype=Object.create(Error.prototype),t}(),d=function(){function t(t){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,t&&(this._ctorUnsubscribe=!0,this._unsubscribe=t)}return t.prototype.unsubscribe=function(){var e;if(!this.closed){var r=this,n=r._parentOrParents,o=r._ctorUnsubscribe,s=r._unsubscribe,a=r._subscriptions;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,n instanceof t)n.remove(this);else if(null!==n)for(var c=0;c<n.length;++c)n[c].remove(this);if(i(s)){o&&(this._unsubscribe=void 0);try{s.call(this)}catch(t){e=t instanceof f?h(t.errors):[t]}}if(p(a)){c=-1;for(var u=a.length;++c<u;){var d=a[c];if(l(d))try{d.unsubscribe()}catch(t){e=e||[],t instanceof f?e=e.concat(h(t.errors)):e.push(t)}}}if(e)throw new f(e)}},t.prototype.add=function(e){var r=e;if(!e)return t.EMPTY;switch(typeof e){case\"function\":r=new t(e);case\"object\":if(r===this||r.closed||\"function\"!=typeof r.unsubscribe)return r;if(this.closed)return r.unsubscribe(),r;if(!(r instanceof t)){var n=r;(r=new t)._subscriptions=[n]}break;default:throw new Error(\"unrecognized teardown \"+e+\" added to Subscription.\")}var o=r._parentOrParents;if(null===o)r._parentOrParents=this;else if(o instanceof t){if(o===this)return r;r._parentOrParents=[o,this]}else{if(-1!==o.indexOf(this))return r;o.push(this)}var i=this._subscriptions;return null===i?this._subscriptions=[r]:i.push(r),r},t.prototype.remove=function(t){var e=this._subscriptions;if(e){var r=e.indexOf(t);-1!==r&&e.splice(r,1)}},t.EMPTY=function(t){return t.closed=!0,t}(new t),t}();function h(t){return t.reduce(function(t,e){return t.concat(e instanceof f?e.errors:e)},[])}var y=function(){return\"function\"==typeof Symbol?Symbol(\"rxSubscriber\"):\"@@rxSubscriber_\"+Math.random()}(),b=function(t){function e(r,n,o){var i=t.call(this)||this;switch(i.syncErrorValue=null,i.syncErrorThrown=!1,i.syncErrorThrowable=!1,i.isStopped=!1,arguments.length){case 0:i.destination=u;break;case 1:if(!r){i.destination=u;break}if(\"object\"==typeof r){r instanceof e?(i.syncErrorThrowable=r.syncErrorThrowable,i.destination=r,r.add(i)):(i.syncErrorThrowable=!0,i.destination=new _(i,r));break}default:i.syncErrorThrowable=!0,i.destination=new _(i,r,n,o)}return i}return o(e,t),e.prototype[y]=function(){return this},e.create=function(t,r,n){var o=new e(t,r,n);return o.syncErrorThrowable=!1,o},e.prototype.next=function(t){this.isStopped||this._next(t)},e.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this))},e.prototype._next=function(t){this.destination.next(t)},e.prototype._error=function(t){this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},e.prototype._unsubscribeAndRecycle=function(){var t=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this},e}(d),_=function(t){function e(e,r,n,o){var s,a=t.call(this)||this;a._parentSubscriber=e;var c=a;return i(r)?s=r:r&&(s=r.next,n=r.error,o=r.complete,r!==u&&(i((c=Object.create(r)).unsubscribe)&&a.add(c.unsubscribe.bind(c)),c.unsubscribe=a.unsubscribe.bind(a))),a._context=c,a._next=s,a._error=n,a._complete=o,a}return o(e,t),e.prototype.next=function(t){if(!this.isStopped&&this._next){var e=this._parentSubscriber;a.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}},e.prototype.error=function(t){if(!this.isStopped){var e=this._parentSubscriber,r=a.useDeprecatedSynchronousErrorHandling;if(this._error)r&&e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(e.syncErrorThrowable)r?(e.syncErrorValue=t,e.syncErrorThrown=!0):c(t),this.unsubscribe();else{if(this.unsubscribe(),r)throw t;c(t)}}},e.prototype.complete=function(){var t=this;if(!this.isStopped){var e=this._parentSubscriber;if(this._complete){var r=function(){return t._complete.call(t._context)};a.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?(this.__tryOrSetError(e,r),this.unsubscribe()):(this.__tryOrUnsub(r),this.unsubscribe())}else this.unsubscribe()}},e.prototype.__tryOrUnsub=function(t,e){try{t.call(this._context,e)}catch(t){if(this.unsubscribe(),a.useDeprecatedSynchronousErrorHandling)throw t;c(t)}},e.prototype.__tryOrSetError=function(t,e,r){if(!a.useDeprecatedSynchronousErrorHandling)throw new Error(\"bad call\");try{e.call(this._context,r)}catch(e){return a.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=e,t.syncErrorThrown=!0,!0):(c(e),!0)}return!1},e.prototype._unsubscribe=function(){var t=this._parentSubscriber;this._context=null,this._parentSubscriber=null,t.unsubscribe()},e}(b),v=function(){return\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\"}();function m(t){return t}var g=function(){function t(t){this._isScalar=!1,t&&(this._subscribe=t)}return t.prototype.lift=function(e){var r=new t;return r.source=this,r.operator=e,r},t.prototype.subscribe=function(t,e,r){var n=this.operator,o=function(t,e,r){if(t){if(t instanceof b)return t;if(t[y])return t[y]()}return t||e||r?new b(t,e,r):new b(u)}(t,e,r);if(n?o.add(n.call(o,this.source)):o.add(this.source||a.useDeprecatedSynchronousErrorHandling&&!o.syncErrorThrowable?this._subscribe(o):this._trySubscribe(o)),a.useDeprecatedSynchronousErrorHandling&&o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o},t.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){a.useDeprecatedSynchronousErrorHandling&&(t.syncErrorThrown=!0,t.syncErrorValue=e),function(t){for(;t;){var e=t,r=e.closed,n=e.destination,o=e.isStopped;if(r||o)return!1;t=n&&n instanceof b?n:null}return!0}(t)?t.error(e):console.warn(e)}},t.prototype.forEach=function(t,e){var r=this;return new(e=S(e))(function(e,n){var o;o=r.subscribe(function(e){try{t(e)}catch(t){n(t),o&&o.unsubscribe()}},n,e)})},t.prototype._subscribe=function(t){var e=this.source;return e&&e.subscribe(t)},t.prototype[v]=function(){return this},t.prototype.pipe=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return 0===t.length?this:(0===(r=t).length?m:1===r.length?r[0]:function(t){return r.reduce(function(t,e){return e(t)},t)})(this);var r},t.prototype.toPromise=function(t){var e=this;return new(t=S(t))(function(t,r){var n;e.subscribe(function(t){return n=t},function(t){return r(t)},function(){return t(n)})})},t.create=function(e){return new t(e)},t}();function S(t){if(t||(t=a.Promise||Promise),!t)throw new Error(\"no Promise impl found\");return t}function w(t,e){return function(r){if(\"function\"!=typeof t)throw new TypeError(\"argument is not a function. Are you looking for `mapTo()`?\");return r.lift(new j(t,e))}}var j=function(){function t(t,e){this.project=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new O(t,this.project,this.thisArg))},t}(),O=function(t){function e(e,r,n){var o=t.call(this,e)||this;return o.project=r,o.count=0,o.thisArg=n||o,o}return o(e,t),e.prototype._next=function(t){var e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(b);function E(t,e,r,n){return i(r)&&(n=r,r=void 0),n?E(t,e,r).pipe(w(function(t){return p(t)?n.apply(void 0,t):n(t)})):new g(function(n){x(t,e,function(t){arguments.length>1?n.next(Array.prototype.slice.call(arguments)):n.next(t)},n,r)})}function x(t,e,r,n,o){var i;if(function(t){return t&&\"function\"==typeof t.addEventListener&&\"function\"==typeof t.removeEventListener}(t)){var s=t;t.addEventListener(e,r,o),i=function(){return s.removeEventListener(e,r,o)}}else if(function(t){return t&&\"function\"==typeof t.on&&\"function\"==typeof t.off}(t)){var a=t;t.on(e,r),i=function(){return a.off(e,r)}}else if(function(t){return t&&\"function\"==typeof t.addListener&&\"function\"==typeof t.removeListener}(t)){var c=t;t.addListener(e,r),i=function(){return c.removeListener(e,r)}}else{if(!t||!t.length)throw new TypeError(\"Invalid event target\");for(var u=0,p=t.length;u<p;u++)x(t[u],e,r,n,o)}n.add(i)}var I=function(t){return function(e){for(var r=0,n=t.length;r<n&&!e.closed;r++)e.next(t[r]);e.complete()}};function P(){return\"function\"==typeof Symbol&&Symbol.iterator?Symbol.iterator:\"@@iterator\"}var T=P(),A=function(t){return t&&\"number\"==typeof t.length&&\"function\"!=typeof t};function C(t){return!!t&&\"function\"!=typeof t.subscribe&&\"function\"==typeof t.then}var k=function(t){if(t&&\"function\"==typeof t[v])return n=t,function(t){var e=n[v]();if(\"function\"!=typeof e.subscribe)throw new TypeError(\"Provided object does not correctly implement Symbol.observable\");return e.subscribe(t)};if(A(t))return I(t);if(C(t))return r=t,function(t){return r.then(function(e){t.closed||(t.next(e),t.complete())},function(e){return t.error(e)}).then(null,c),t};if(t&&\"function\"==typeof t[T])return e=t,function(t){for(var r=e[T]();;){var n=void 0;try{n=r.next()}catch(e){return t.error(e),t}if(n.done){t.complete();break}if(t.next(n.value),t.closed)break}return\"function\"==typeof r.return&&t.add(function(){r.return&&r.return()}),t};var e,r,n,o=l(t)?\"an invalid object\":\"'\"+t+\"'\";throw new TypeError(\"You provided \"+o+\" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.\")};function R(t,e){return new g(function(r){var n=new d,o=0;return n.add(e.schedule(function(){o!==t.length?(r.next(t[o++]),r.closed||n.add(this.schedule())):r.complete()})),n})}var q=function(t){function e(e){var r=t.call(this)||this;return r.parent=e,r}return o(e,t),e.prototype._next=function(t){this.parent.notifyNext(t)},e.prototype._error=function(t){this.parent.notifyError(t),this.unsubscribe()},e.prototype._complete=function(){this.parent.notifyComplete(),this.unsubscribe()},e}(b),N=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.notifyNext=function(t){this.destination.next(t)},e.prototype.notifyError=function(t){this.destination.error(t)},e.prototype.notifyComplete=function(){this.destination.complete()},e}(b);function z(t,e,r){return void 0===r&&(r=Number.POSITIVE_INFINITY),\"function\"==typeof e?function(n){return n.pipe(z(function(r,n){return(o=t(r,n),o instanceof g?o:new g(k(o))).pipe(w(function(t,o){return e(r,t,n,o)}));var o},r))}:(\"number\"==typeof e&&(r=e),function(e){return e.lift(new V(t,r))})}var V=function(){function t(t,e){void 0===e&&(e=Number.POSITIVE_INFINITY),this.project=t,this.concurrent=e}return t.prototype.call=function(t,e){return e.subscribe(new U(t,this.project,this.concurrent))},t}(),U=function(t){function e(e,r,n){void 0===n&&(n=Number.POSITIVE_INFINITY);var o=t.call(this,e)||this;return o.project=r,o.concurrent=n,o.hasCompleted=!1,o.buffer=[],o.active=0,o.index=0,o}return o(e,t),e.prototype._next=function(t){this.active<this.concurrent?this._tryNext(t):this.buffer.push(t)},e.prototype._tryNext=function(t){var e,r=this.index++;try{e=this.project(t,r)}catch(t){return void this.destination.error(t)}this.active++,this._innerSub(e)},e.prototype._innerSub=function(t){var e=new q(this),r=this.destination;r.add(e);var n=function(t,e){if(!e.closed){if(t instanceof g)return t.subscribe(e);var r;try{r=k(t)(e)}catch(t){e.error(t)}return r}}(t,e);n!==e&&r.add(n)},e.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete(),this.unsubscribe()},e.prototype.notifyNext=function(t){this.destination.next(t)},e.prototype.notifyComplete=function(){var t=this.buffer;this.active--,t.length>0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(N);var F,B,D=function(){function t(t,e){this.compare=t,this.keySelector=e}return t.prototype.call=function(t,e){return e.subscribe(new H(t,this.compare,this.keySelector))},t}(),H=function(t){function e(e,r,n){var o=t.call(this,e)||this;return o.keySelector=n,o.hasKey=!1,\"function\"==typeof r&&(o.compare=r),o}return o(e,t),e.prototype.compare=function(t,e){return t===e},e.prototype._next=function(t){var e;try{var r=this.keySelector;e=r?r(t):t}catch(t){return this.destination.error(t)}var n=!1;if(this.hasKey)try{n=(0,this.compare)(this.key,e)}catch(t){return this.destination.error(t)}else this.hasKey=!0;n||(this.key=e,this.destination.next(t))},e}(b);class L extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class M extends L{constructor(t,e,r){super(r||\"Payment cannot be processed for this order, please select another payment method\"),this.type=\"custom_provider_execute_error\",this.name=e,this.subtype=t}}function $(t,e){if(null==t)throw e?e():new Error(\"An unexpected error has occurred.\");return t}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(F||(F={}));class G extends L{constructor(t){super(function(t){switch(t){case F.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case F.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case F.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case F.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}!function(t){t.CHARGE=\"CHARGE\",t.STORE=\"STORE\"}(B||(B={}));var J=function(t,e,r,n){return new(r||(r=Promise))(function(o,i){function s(t){try{c(n.next(t))}catch(t){i(t)}}function a(t){try{c(n.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r(function(t){t(e)})).then(s,a)}c((n=n.apply(t,e||[])).next())})};class K{constructor(t,e){this._scriptLoader=t,this._paymentIntegrationService=e}initialize({testMode:t,applicationId:e,locationId:r}){return J(this,void 0,void 0,function*(){const n=yield this._scriptLoader.load(t);this._payments=n.payments(e,r)})}deinitialize(){return J(this,void 0,void 0,function*(){this._formValidationSubscription&&this._formValidationSubscription.unsubscribe(),this._card&&(yield this._card.destroy()),this._formValidationSubscription=void 0,this._card=void 0,this._payments=void 0})}initializeCard({containerId:t,style:e,onValidationChange:r}){return J(this,void 0,void 0,function*(){const{postalCode:n}=this._paymentIntegrationService.getState().getBillingAddress()||{};this._card=yield this._getPayments().card(),yield this._card.attach(`#${t}`);try{yield this._card.configure({postalCode:n,style:e})}catch(t){}r&&(this._formValidationSubscription=this._subscribeToFormValidation(this._card,r))})}tokenize(){return J(this,void 0,void 0,function*(){const t=yield this._getCard().tokenize();if(\"OK\"!==t.status||!t.token){let e=`Tokenization failed with status: ${t.status}`;throw\"errors\"in t&&t.errors&&(e+=` and errors: ${JSON.stringify(t.errors)}`),new M(\"payment.errors.card_error\",\"SquareV2TokenizationError\",e)}return t.token})}verifyBuyer(t,e){return J(this,void 0,void 0,function*(){return e===B.CHARGE?this._chargeVerifyBuyer(t):this._storeVerifyBuyer(t)})}_getPayments(){return $(this._payments,()=>new G(F.PaymentNotInitialized))}_subscribeToFormValidation(t,e){const r=[\"cardNumber\",\"cvv\"],n=new Set(r);return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var r,n=Number.POSITIVE_INFINITY,o=null,i=t[t.length-1];return(r=i)&&\"function\"==typeof r.schedule?(o=t.pop(),t.length>1&&\"number\"==typeof t[t.length-1]&&(n=t.pop())):\"number\"==typeof i&&(n=t.pop()),null===o&&1===t.length&&t[0]instanceof g?t[0]:function(t){return void 0===t&&(t=Number.POSITIVE_INFINITY),z(m,t)}(n)(function(t,e){return e?R(t,e):new g(I(t))}(t,o))}(...[\"focusClassAdded\",\"focusClassRemoved\",\"errorClassAdded\",\"errorClassRemoved\",\"cardBrandChanged\",\"postalCodeChanged\"].map(e=>E(t,e))).pipe(w(t=>{const{detail:{field:e,currentState:{isCompletelyValid:o}}}=t;return r.includes(e)&&n[o?\"delete\":\"add\"](e),0===n.size}),function(t){return t.lift(new D(void 0,void 0))}).subscribe(e)}_getCard(){return $(this._card,()=>new G(F.PaymentNotInitialized))}_mapToSquareBillingContact({firstName:t,lastName:e,address1:r,address2:n,city:o,stateOrProvinceCode:i,postalCode:s,countryCode:a,email:c,phone:u}){return{givenName:t,familyName:e,addressLines:[r,n],city:o,state:i,postalCode:s,countryCode:a,email:c,phone:u}}_chargeVerifyBuyer(t){return J(this,void 0,void 0,function*(){const{getCheckoutOrThrow:e,getBillingAddressOrThrow:r}=this._paymentIntegrationService.getState(),{outstandingBalance:n,cart:o}=e(),i={amount:n.toString(),billingContact:this._mapToSquareBillingContact(r()),currencyCode:o.currency.code,intent:B.CHARGE},s=yield this._getPayments().verifyBuyer(t,i);return s?s.token:\"\"})}_storeVerifyBuyer(t){return J(this,void 0,void 0,function*(){const{getBillingAddressOrThrow:e}=this._paymentIntegrationService.getState(),r={billingContact:this._mapToSquareBillingContact(e()),intent:B.STORE},n=yield this._getPayments().verifyBuyer(t,r);return n?n.token:\"\"})}}class Y extends L{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}const X={body:{},headers:{},status:0};class Q extends L{constructor(t,{message:e,errors:r}={}){const{body:n,headers:o,status:i}=t||X;super(e||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=n,this.headers=o,this.status=i,this.errors=r||[]}}class W extends Q{constructor(t){super(t,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class Z extends Y{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}class tt extends L{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}var et=function(t,e,r,n){return new(r||(r=Promise))(function(o,i){function s(t){try{c(n.next(t))}catch(t){i(t)}}function a(t){try{c(n.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r(function(t){t(e)})).then(s,a)}c((n=n.apply(t,e||[])).next())})};class rt{constructor(t,e){this._paymentIntegrationService=t,this._squareV2PaymentProcessor=e}initialize(t){var e;return et(this,void 0,void 0,function*(){if(!(null===(e=null==t?void 0:t.squarev2)||void 0===e?void 0:e.containerId))throw new Y('Unable to proceed because \"containerId\" argument is not provided.');const{methodId:r,squarev2:n}=t,{config:{testMode:o},initializationData:i}=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(r),{applicationId:s,locationId:a}=i||{};if(!s)throw new W;yield this._squareV2PaymentProcessor.initialize({applicationId:s,locationId:a,testMode:o}),yield this._squareV2PaymentProcessor.initializeCard(n)})}execute({payment:t}){return et(this,void 0,void 0,function*(){if(!t)throw new Z([\"payment\"]);const{methodId:e,paymentData:r}=t,{shouldSaveInstrument:n,shouldSetAsDefaultInstrument:o}=\"object\"!=typeof(i=r)||null===i||void 0!==i.shouldSaveInstrument&&\"boolean\"!=typeof i.shouldSaveInstrument||void 0!==i.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof i.shouldSetAsDefaultInstrument?{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1}:r;var i;yield this._paymentIntegrationService.submitOrder();const s=r&&function(t){return Boolean(t.instrumentId)}(r)?yield this._getVaultedInstrumentPayload(e,r):yield this._getCardPayload(e,n);yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},t),{paymentData:{formattedPayload:Object.assign(Object.assign({},s),{vault_payment_instrument:n||!1,set_as_default_stored_instrument:o||!1})}}))})}finalize(){return Promise.reject(new tt)}deinitialize(){return this._squareV2PaymentProcessor.deinitialize()}shouldVerify(){const{features:t}=this._paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings;return t[\"PROJECT-3828.add_3ds_support_on_squarev2\"]}_getCardPayload(t,e){return et(this,void 0,void 0,function*(){const{getPaymentMethodOrThrow:r}=this._paymentIntegrationService.getState(),{initializationData:n}=r(t),o=yield this._squareV2PaymentProcessor.tokenize();if(n&&\"isSquareV2ApiV2Enabled\"in n?!n.isSquareV2ApiV2Enabled:!this.shouldVerify())return{credit_card_token:{token:o}};let i={nonce:o,token:yield this._squareV2PaymentProcessor.verifyBuyer(o,B.CHARGE)};if(e){const t=yield this._squareV2PaymentProcessor.tokenize();i=Object.assign(Object.assign({},i),{store_card_nonce:t,store_card_token:yield this._squareV2PaymentProcessor.verifyBuyer(t,B.STORE)})}return{credit_card_token:{token:JSON.stringify(i)}}})}_getVaultedInstrumentPayload(t,e){return et(this,void 0,void 0,function*(){const{getPaymentMethodOrThrow:r}=this._paymentIntegrationService.getState(),{initializationData:n}=r(t),{instrumentId:o}=e,i=(n&&\"isSquareV2ApiV2Enabled\"in n?n.isSquareV2ApiV2Enabled:this.shouldVerify())?yield this._squareV2PaymentProcessor.verifyBuyer(yield this._getSquareCardIdOrThrow(t,o),B.CHARGE):void 0;return{bigpay_token:Object.assign({token:o},i&&{three_d_secure:{token:i}})}})}_getSquareCardIdOrThrow(t,e){return et(this,void 0,void 0,function*(){const r=yield this._paymentIntegrationService.loadPaymentMethod(t,{params:{method:t,bigpayToken:e}}),{initializationData:n}=r.getPaymentMethodOrThrow(t),{cardId:o}=n||{};if(!o)throw new Z([\"cardId\"]);return o})}}class nt extends L{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var ot;!function(t){t.LIVE=\"https://web.squarecdn.com/v1/square.js\",t.SANDBOX=\"https://sandbox.web.squarecdn.com/v1/square.js\"}(ot||(ot={}));class it{constructor(t){this._scriptLoader=t}load(t=!1){return e=this,r=void 0,o=function*(){return yield this._scriptLoader.loadScript(t?ot.SANDBOX:ot.LIVE),function(t){if(!function(t){return\"Square\"in t}(t))throw new nt}(window),window.Square},new((n=void 0)||(n=Promise))(function(t,i){function s(t){try{c(o.next(t))}catch(t){i(t)}}function a(t){try{c(o.throw(t))}catch(t){i(t)}}function c(e){var r;e.done?t(e.value):(r=e.value,r instanceof n?r:new n(function(t){t(r)})).then(s,a)}c((o=o.apply(e,r||[])).next())});var e,r,n,o}}const st=Object.assign(e=>new rt(e,new K(new it((0,t.vQ)()),e)),{resolveIds:[{id:\"squarev2\"}]})})(),module.exports=n})();\n//# sourceMappingURL=squarev2.js.map"
  },
  {
    "path": "dist/cjs/integrations/stripe.js",
    "content": "(()=>{var t={4325(t,e,n){\"use strict\";n.d(e,{g:()=>i});var r=n(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,e){var n=this.getKey(t,e.params);return this._cache[n]||null},t.prototype.write=function(t,e,n){var r=this.getKey(t,e.params);this._cache[r]=n},t.prototype.getKey=function(t,e){return void 0===e&&(e={}),0===Object.keys(e).length?t:\"\".concat(t,\"?\").concat(r.stringify(e))},t}()},321(t,e,n){\"use strict\";n.d(e,{A:()=>s});var r=n(168),i=n(1675),o=n(5861),a=n(4670);function s(t){return new a.A(new o.A,new i.A,r,t)}},6889(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(2024);function i(t){return new r.A(t)}},4043(t,e,n){\"use strict\";n.r(e),n.d(e,{RequestSender:()=>o.A,Timeout:()=>a.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=n(321),i=n(6889),o=n(4670),a=n(2024)},4843(t,e,n){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}n.d(e,{A:()=>r})},1675(t,e,n){\"use strict\";n.d(e,{A:()=>s});var r=n(1635),i=n(710),o=/application\\/(\\w+\\+)?json/,a=/application\\/x-www-form-urlencoded/;const s=function(){function t(){}return t.prototype.toRequestBody=function(t){var e=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(e))return JSON.stringify(t.body);if(a.test(e))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var e=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,e),headers:e,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,e){var n=this._getHeader(e,\"Content-Type\");return t&&o.test(n)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,e){var n,i=e.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((n={})[o.toLowerCase()]=i.join(\":\").trim(),n)):t},{})},t.prototype._getHeader=function(t,e){return t&&e&&(t[e]||t[e.toLowerCase()])||\"\"},t}()},5861(t,e,n){\"use strict\";n.d(e,{A:()=>i});var r=n(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,e){var n=new XMLHttpRequest;return this._configureRequest(n,t,e),n},t.prototype._configureRequest=function(t,e,n){void 0===n&&(n={}),t.open(n.method||\"GET\",this._formatUrl(e,n.params,n.encodeParams),!0),n.headers&&this._configureRequestHeaders(t,n.headers),\"boolean\"==typeof n.credentials&&(t.withCredentials=n.credentials),\"number\"==typeof n.timeout&&(t.timeout=n.timeout)},t.prototype._configureRequestHeaders=function(t,e){Object.keys(e).filter(function(t){return null!==e[t]}).forEach(function(n){t.setRequestHeader(n,e[n])})},t.prototype._formatUrl=function(t,e,n){return void 0===n&&(n=!0),e&&0!==Object.keys(e).length?\"\".concat(t,\"?\").concat(r.stringify(e,{encode:n})):t},t}()},4670(t,e,n){\"use strict\";n.d(e,{A:()=>c});var r=n(1635),i=n(35),o=n.n(i),a=n(4325),s=n(4843),u=n(2024);const c=function(){function t(t,e,n,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=e,this._cookie=n,this._options=r,this._cache=this._options.cache||new a.g}return t.prototype.sendRequest=function(t,e){var n=this,r=this._mergeDefaultOptions(t,e),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(e,i){var a=function(){var a=n._payloadTransformer.toResponse(o);a.status>=200&&a.status<300?(n._cacheRequest(t,r,a),e(a)):i(a)};o.onload=a,o.onerror=a,o.onabort=a,o.ontimeout=a,r.timeout instanceof u.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,s.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(n._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"GET\"}))},t.prototype.post=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"POST\"}))},t.prototype.put=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PUT\"}))},t.prototype.patch=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"PATCH\"}))},t.prototype.delete=function(t,e){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},e),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,e){var n={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&n.headers&&!this._isAssetRequest(t,e)&&this._isLocalRequest(t)&&(n.headers[\"X-XSRF-TOKEN\"]=r),e&&e.body&&n.headers&&(n.headers[\"Content-Type\"]=\"application/json\"),o()({},n,e)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,e){return this._shouldCacheRequest(e)?this._cache.read(t,e):null},t.prototype._cacheRequest=function(t,e,n){this._shouldCacheRequest(e)&&this._cache.write(t,e,n)},t.prototype._isAssetRequest=function(t,e){return(!e||!e.method||\"GET\"===e.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,e,n){\"use strict\";n.d(e,{A:()=>r});const r=function(){function t(t){var e=this;this._delay=t,this._promise=new Promise(function(t){e._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,e,n){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var n=t[e];return\"string\"==typeof n?\"\".concat(e,\"=\").concat(encodeURIComponent(n)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(n)||\"\"))}).join(\"&\")}n.d(e,{A:()=>r})},5889(t,e,n){\"use strict\";const r=n(803),i=n(1915),o=n(1657),a=n(3814);function s(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function u(t,e){return e.encode?e.strict?r(t):encodeURIComponent(t):t}function c(t,e){return e.decode?i(t):t}function l(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?l(Object.keys(t)).sort((t,e)=>Number(t)-Number(e)).map(e=>t[e]):t}function d(t){const e=t.indexOf(\"#\");return-1!==e&&(t=t.slice(0,e)),t}function p(t){const e=(t=d(t)).indexOf(\"?\");return-1===e?\"\":t.slice(e+1)}function h(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!e.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function f(t,e){s((e=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},e)).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case\"index\":return(t,n,r)=>{e=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case\"bracket\":return(t,n,r)=>{e=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),e?void 0!==r[t]?r[t]=[].concat(r[t],n):r[t]=[n]:r[t]=n};case\"comma\":case\"separator\":return(e,n,r)=>{const i=\"string\"==typeof n&&n.includes(t.arrayFormatSeparator),o=\"string\"==typeof n&&!i&&c(n,t).includes(t.arrayFormatSeparator);n=o?c(n,t):n;const a=i||o?n.split(t.arrayFormatSeparator).map(e=>c(e,t)):null===n?n:c(n,t);r[e]=a};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[].concat(n[t],e):n[t]=e}}}(e),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,a]=o(e.decode?i.replace(/\\+/g,\" \"):i,\"=\");a=void 0===a?null:[\"comma\",\"separator\"].includes(e.arrayFormat)?a:c(a,e),n(c(t,e),a,r)}for(const t of Object.keys(r)){const n=r[t];if(\"object\"==typeof n&&null!==n)for(const t of Object.keys(n))n[t]=h(n[t],e);else r[t]=h(n,e)}return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce((t,e)=>{const n=r[e];return Boolean(n)&&\"object\"==typeof n&&!Array.isArray(n)?t[e]=l(n):t[e]=n,t},Object.create(null))}e.extract=p,e.parse=f,e.stringify=(t,e)=>{if(!t)return\"\";s((e=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},e)).arrayFormatSeparator);const n=n=>e.skipNull&&null==t[n]||e.skipEmptyString&&\"\"===t[n],r=function(t){switch(t.arrayFormat){case\"index\":return e=>(n,r)=>{const i=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(e,t),\"[\",i,\"]\"].join(\"\")]:[...n,[u(e,t),\"[\",u(i,t),\"]=\",u(r,t)].join(\"\")]};case\"bracket\":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,[u(e,t),\"[]\"].join(\"\")]:[...n,[u(e,t),\"[]=\",u(r,t)].join(\"\")];case\"comma\":case\"separator\":return e=>(n,r)=>null==r||0===r.length?n:0===n.length?[[u(e,t),\"=\",u(r,t)].join(\"\")]:[[n,u(r,t)].join(t.arrayFormatSeparator)];default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?n:null===r?[...n,u(e,t)]:[...n,[u(e,t),\"=\",u(r,t)].join(\"\")]}}(e),i={};for(const e of Object.keys(t))n(e)||(i[e]=t[e]);const o=Object.keys(i);return!1!==e.sort&&o.sort(e.sort),o.map(n=>{const i=t[n];return void 0===i?\"\":null===i?u(n,e):Array.isArray(i)?i.reduce(r(n),[]).join(\"&\"):u(n,e)+\"=\"+u(i,e)}).filter(t=>t.length>0).join(\"&\")},e.parseUrl=(t,e)=>{e=Object.assign({decode:!0},e);const[n,r]=o(t,\"#\");return Object.assign({url:n.split(\"?\")[0]||\"\",query:f(p(t),e)},e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:c(r,e)}:{})},e.stringifyUrl=(t,n)=>{n=Object.assign({encode:!0,strict:!0},n);const r=d(t.url).split(\"?\")[0]||\"\",i=e.extract(t.url),o=e.parse(i,{sort:!1}),a=Object.assign(o,t.query);let s=e.stringify(a,n);s&&(s=`?${s}`);let c=function(t){let e=\"\";const n=t.indexOf(\"#\");return-1!==n&&(e=t.slice(n)),e}(t.url);return t.fragmentIdentifier&&(c=`#${u(t.fragmentIdentifier,n)}`),`${r}${s}${c}`},e.pick=(t,n,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:s}=e.parseUrl(t,r);return e.stringifyUrl({url:i,query:a(o,n),fragmentIdentifier:s},r)},e.exclude=(t,n,r)=>{const i=Array.isArray(n)?t=>!n.includes(t):(t,e)=>!n(t,e);return e.pick(t,i,r)}},5477(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(){}return t.prototype.canSupportRel=function(t){var e=document.createElement(\"link\");return!!(e.relList&&e.relList.supports&&e.relList.supports(t))},t}();e.default=n},471(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(4886)},9722(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=n(4043),i=n(5477),o=n(7995)},5895(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(471)},282(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(){return r||(r=(0,i.default)()),r};var r,i=n(9722)},315(t,e,n){\"use strict\";e.vQ=void 0;n(4886),n(471);var r=n(5895);Object.defineProperty(e,\"vQ\",{enumerable:!0,get:function(){return r.default}});n(7995),n(9722),n(282)},4886(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,e){var n=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),a=e||{},s=a.async,u=void 0!==s&&s,c=a.attributes,l=void 0===c?{}:c;Object.keys(l).forEach(function(t){o.setAttribute(t,l[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(e){delete n._scripts[t],i(e)},o.async=u,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadScript(t,e)})).then(function(){})},t.prototype.preloadScript=function(t,e){var n=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(e||{}).prefetch,a=void 0!==o&&o?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(a)){var s=document.createElement(\"link\");s.as=\"script\",s.rel=a,s.href=t,s.onload=function(){r()},s.onerror=function(){delete n._preloadedScripts[t],i()},document.head.appendChild(s)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadScript(t,e)})).then(function(){})},t}();e.default=n},7995(t,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(){function t(t,e){this._browserSupport=t,this._requestSender=e,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,e){var n=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),a=e||{},s=a.prepend,u=void 0!==s&&s,c=a.attributes,l=void 0===c?{}:c;Object.keys(l).forEach(function(t){o.setAttribute(t,l[t])}),o.onload=function(){return r()},o.onerror=function(e){delete n._stylesheets[t],i(e)},o.rel=\"stylesheet\",o.href=t,u&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.loadStylesheet(t,e)})).then(function(){})},t.prototype.preloadStylesheet=function(t,e){var n=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(e||{}).prefetch,a=void 0!==o&&o,s=a?\"prefetch\":\"preload\";if(n._browserSupport.canSupportRel(s)){var u=document.createElement(\"link\");u.as=\"style\",u.rel=a?\"prefetch\":\"preload\",u.href=t,u.onload=function(){r()},u.onerror=function(e){delete n._preloadedStylesheets[t],i(e)},document.head.appendChild(u)}else n._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,e){var n=this;return Promise.all(t.map(function(t){return n.preloadStylesheet(t,e)})).then(function(){})},t}();e.default=n},1915(t){\"use strict\";var e=\"%[a-f0-9]{2}\",n=new RegExp(\"(\"+e+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+e+\")+\",\"gi\");function i(t,e){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;e=e||1;var n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],i(n),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var e=t.match(n)||[],r=1;r<e.length;r++)e=(t=i(e,r).join(\"\")).match(n)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(e){return function(t){for(var e={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},n=r.exec(t);n;){try{e[n[0]]=decodeURIComponent(n[0])}catch(t){var i=o(n[0]);i!==n[0]&&(e[n[0]]=i)}n=r.exec(t)}e[\"%C2\"]=\"�\";for(var a=Object.keys(e),s=0;s<a.length;s++){var u=a[s];t=t.replace(new RegExp(u,\"g\"),e[u])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,e){for(var n={},r=Object.keys(t),i=Array.isArray(e),o=0;o<r.length;o++){var a=r[o],s=t[a];(i?-1!==e.indexOf(a):e(a,s,t))&&(n[a]=s)}return n}},168(t){var e;e=function(){function t(){for(var t=0,e={};t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}function e(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function i(){}function o(e,n,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var a=JSON.stringify(n);/^[\\{\\[]/.test(a)&&(n=a)}catch(t){}n=r.write?r.write(n,e):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var s=\"\";for(var u in o)o[u]&&(s+=\"; \"+u,!0!==o[u]&&(s+=\"=\"+o[u].split(\";\")[0]));return document.cookie=e+\"=\"+n+s}}function a(t,n){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],a=0;a<o.length;a++){var s=o[a].split(\"=\"),u=s.slice(1).join(\"=\");n||'\"'!==u.charAt(0)||(u=u.slice(1,-1));try{var c=e(s[0]);if(u=(r.read||r)(u,c)||e(u),n)try{u=JSON.parse(u)}catch(t){}if(i[c]=u,t===c)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return a(t,!1)},i.getJSON=function(t){return a(t,!0)},i.remove=function(e,n){o(e,\"\",t(n,{expires:-1}))},i.defaults={},i.withConverter=n,i}(function(){})},\"function\"==typeof define&&define.amd&&define(e),t.exports=e()},35(t,e,n){t=n.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",a=\"[object Function]\",s=\"[object Object]\",u=/^\\[object .+?Constructor\\]$/,c=/^(?:0|[1-9]\\d*)$/,l={};l[\"[object Float32Array]\"]=l[\"[object Float64Array]\"]=l[\"[object Int8Array]\"]=l[\"[object Int16Array]\"]=l[\"[object Int32Array]\"]=l[\"[object Uint8Array]\"]=l[\"[object Uint8ClampedArray]\"]=l[\"[object Uint16Array]\"]=l[\"[object Uint32Array]\"]=!0,l[o]=l[\"[object Array]\"]=l[\"[object ArrayBuffer]\"]=l[\"[object Boolean]\"]=l[\"[object DataView]\"]=l[\"[object Date]\"]=l[\"[object Error]\"]=l[a]=l[\"[object Map]\"]=l[\"[object Number]\"]=l[s]=l[\"[object RegExp]\"]=l[\"[object Set]\"]=l[\"[object String]\"]=l[\"[object WeakMap]\"]=!1;var d,p,h,f=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,v=\"object\"==typeof self&&self&&self.Object===Object&&self,y=f||v||Function(\"return this\")(),m=e&&!e.nodeType&&e,g=m&&t&&!t.nodeType&&t,_=g&&g.exports===m,S=_&&f.process,b=function(){try{return g&&g.require&&g.require(\"util\").types||S&&S.binding&&S.binding(\"util\")}catch(t){}}(),w=b&&b.isTypedArray,C=Array.prototype,E=Function.prototype,I=Object.prototype,P=y[\"__core-js_shared__\"],A=E.toString,O=I.hasOwnProperty,k=(d=/[^.]+$/.exec(P&&P.keys&&P.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+d:\"\",j=I.toString,T=A.call(Object),R=RegExp(\"^\"+A.call(O).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),x=_?y.Buffer:void 0,M=y.Symbol,N=y.Uint8Array,z=(x&&x.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(t){return p(h(t))}),D=Object.create,U=I.propertyIsEnumerable,L=C.splice,B=M?M.toStringTag:void 0,F=function(){try{var t=st(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),V=x?x.isBuffer:void 0,q=Math.max,W=Date.now,$=st(y,\"Map\"),H=st(Object,\"create\"),G=function(){function t(){}return function(e){if(!_t(e))return{};if(D)return D(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function K(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function J(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Y(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Z(t){var e=this.__data__=new J(t);this.size=e.size}function Q(t,e,n){(void 0!==n&&!pt(t[e],n)||void 0===n&&!(e in t))&&et(t,e,n)}function X(t,e,n){var r=t[e];O.call(t,e)&&pt(r,n)&&(void 0!==n||e in t)||et(t,e,n)}function tt(t,e){for(var n=t.length;n--;)if(pt(t[n][0],e))return n;return-1}function et(t,e,n){\"__proto__\"==e&&F?F(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}K.prototype.clear=function(){this.__data__=H?H(null):{},this.size=0},K.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},K.prototype.get=function(t){var e=this.__data__;if(H){var n=e[t];return n===r?void 0:n}return O.call(e,t)?e[t]:void 0},K.prototype.has=function(t){var e=this.__data__;return H?void 0!==e[t]:O.call(e,t)},K.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=H&&void 0===e?r:e,this},J.prototype.clear=function(){this.__data__=[],this.size=0},J.prototype.delete=function(t){var e=this.__data__,n=tt(e,t);return!(n<0||(n==e.length-1?e.pop():L.call(e,n,1),--this.size,0))},J.prototype.get=function(t){var e=this.__data__,n=tt(e,t);return n<0?void 0:e[n][1]},J.prototype.has=function(t){return tt(this.__data__,t)>-1},J.prototype.set=function(t,e){var n=this.__data__,r=tt(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Y.prototype.clear=function(){this.size=0,this.__data__={hash:new K,map:new($||J),string:new K}},Y.prototype.delete=function(t){var e=at(this,t).delete(t);return this.size-=e?1:0,e},Y.prototype.get=function(t){return at(this,t).get(t)},Y.prototype.has=function(t){return at(this,t).has(t)},Y.prototype.set=function(t,e){var n=at(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Z.prototype.clear=function(){this.__data__=new J,this.size=0},Z.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Z.prototype.get=function(t){return this.__data__.get(t)},Z.prototype.has=function(t){return this.__data__.has(t)},Z.prototype.set=function(t,e){var n=this.__data__;if(n instanceof J){var r=n.__data__;if(!$||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Y(r)}return n.set(t,e),this.size=n.size,this};function nt(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":B&&B in Object(t)?function(t){var e=O.call(t,B),n=t[B];try{t[B]=void 0;var r=!0}catch(t){}var i=j.call(t);return r&&(e?t[B]=n:delete t[B]),i}(t):function(t){return j.call(t)}(t)}function rt(t){return St(t)&&nt(t)==o}function it(t,e,n,r,i){t!==e&&function(t,e,n){for(var r=-1,i=Object(t),o=n(t),a=o.length;a--;){var s=o[++r];if(!1===e(i[s],s,i))break}}(e,function(o,a){if(i||(i=new Z),_t(o))!function(t,e,n,r,i,o,a){var u=lt(t,n),c=lt(e,n),l=a.get(c);if(l)Q(t,n,l);else{var d,p,h,f,v,y=o?o(u,c,n+\"\",t,e,a):void 0,m=void 0===y;if(m){var g=ft(c),_=!g&&yt(c),S=!g&&!_&&bt(c);y=c,g||_||S?ft(u)?y=u:St(v=u)&&vt(v)?y=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}(u):_?(m=!1,y=function(t){return t.slice()}(c)):S?(m=!1,f=new(h=(d=c).buffer).constructor(h.byteLength),new N(f).set(new N(h)),p=f,y=new d.constructor(p,d.byteOffset,d.length)):y=[]:function(t){if(!St(t)||nt(t)!=s)return!1;var e=z(t);if(null===e)return!0;var n=O.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&A.call(n)==T}(c)||ht(c)?(y=u,ht(u)?y=function(t){return function(t,e,n){var r=!n;n||(n={});for(var i=-1,o=e.length;++i<o;){var a=e[i],s=void 0;void 0===s&&(s=t[a]),r?et(n,a,s):X(n,a,s)}return n}(t,wt(t))}(u):_t(u)&&!mt(u)||(y=function(t){return\"function\"!=typeof t.constructor||ct(t)?{}:G(z(t))}(c))):m=!1}m&&(a.set(c,y),i(y,c,r,o,a),a.delete(c)),Q(t,n,y)}}(t,e,a,n,it,r,i);else{var u=r?r(lt(t,a),o,a+\"\",t,e,i):void 0;void 0===u&&(u=o),Q(t,a,u)}},wt)}var ot=F?function(t,e){return F(t,\"toString\",{configurable:!0,enumerable:!1,value:(n=e,function(){return n}),writable:!0});var n}:It;function at(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function st(t,e){var n=function(t,e){return null==t?void 0:t[e]}(t,e);return function(t){return!(!_t(t)||function(t){return!!k&&k in t}(t))&&(mt(t)?R:u).test(function(t){if(null!=t){try{return A.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(n)?n:void 0}function ut(t,e){var n=typeof t;return!!(e=e??i)&&(\"number\"==n||\"symbol\"!=n&&c.test(t))&&t>-1&&t%1==0&&t<e}function ct(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||I)}function lt(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var dt=function(t){var e=0,n=0;return function(){var r=W(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ot);function pt(t,e){return t===e||t!=t&&e!=e}var ht=rt(function(){return arguments}())?rt:function(t){return St(t)&&O.call(t,\"callee\")&&!U.call(t,\"callee\")},ft=Array.isArray;function vt(t){return null!=t&&gt(t.length)&&!mt(t)}var yt=V||function(){return!1};function mt(t){if(!_t(t))return!1;var e=nt(t);return e==a||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function _t(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function St(t){return null!=t&&\"object\"==typeof t}var bt=w?function(t){return function(e){return t(e)}}(w):function(t){return St(t)&&gt(t.length)&&!!l[nt(t)]};function wt(t){return vt(t)?function(t,e){var n=ft(t),r=!n&&ht(t),i=!n&&!r&&yt(t),o=!n&&!r&&!i&&bt(t),a=n||r||i||o,s=a?function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}(t.length,String):[],u=s.length;for(var c in t)!e&&!O.call(t,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||ut(c,u))||s.push(c);return s}(t,!0):function(t){if(!_t(t))return function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}(t);var e=ct(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&O.call(t,r))&&n.push(r);return n}(t)}var Ct,Et=(Ct=function(t,e,n){it(t,e,n)},function(t,e){return dt(function(t,e,n){return e=q(void 0===e?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=q(r.length-e,0),a=Array(o);++i<o;)a[i]=r[e+i];i=-1;for(var s=Array(e+1);++i<e;)s[i]=r[i];return s[e]=n(a),function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}(t,this,s)}}(t,e,It),t+\"\")}(function(t,e){var n=-1,r=e.length,i=r>1?e[r-1]:void 0,o=r>2?e[2]:void 0;for(i=Ct.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,e,n){if(!_t(n))return!1;var r=typeof e;return!!(\"number\"==r?vt(n)&&ut(e,n.length):\"string\"==r&&e in n)&&pt(n[e],t)}(e[0],e[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++n<r;){var a=e[n];a&&Ct(t,a,n)}return t}));function It(t){return t}t.exports=Et},9440(t,e,n){t=n.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",a=\"__lodash_placeholder__\",s=32,u=128,c=1/0,l=9007199254740991,d=NaN,p=4294967295,h=[[\"ary\",u],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",s],[\"partialRight\",64],[\"rearg\",256]],f=\"[object Arguments]\",v=\"[object Array]\",y=\"[object Boolean]\",m=\"[object Date]\",g=\"[object Error]\",_=\"[object Function]\",S=\"[object GeneratorFunction]\",b=\"[object Map]\",w=\"[object Number]\",C=\"[object Object]\",E=\"[object Promise]\",I=\"[object RegExp]\",P=\"[object Set]\",A=\"[object String]\",O=\"[object Symbol]\",k=\"[object WeakMap]\",j=\"[object ArrayBuffer]\",T=\"[object DataView]\",R=\"[object Float32Array]\",x=\"[object Float64Array]\",M=\"[object Int8Array]\",N=\"[object Int16Array]\",z=\"[object Int32Array]\",D=\"[object Uint8Array]\",U=\"[object Uint8ClampedArray]\",L=\"[object Uint16Array]\",B=\"[object Uint32Array]\",F=/\\b__p \\+= '';/g,V=/\\b(__p \\+=) '' \\+/g,q=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,W=/&(?:amp|lt|gt|quot|#39);/g,$=/[&<>\"']/g,H=RegExp(W.source),G=RegExp($.source),K=/<%-([\\s\\S]+?)%>/g,J=/<%([\\s\\S]+?)%>/g,Y=/<%=([\\s\\S]+?)%>/g,Z=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,et=RegExp(tt.source),nt=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,at=/,? & /,st=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ut=/[()=,{}\\[\\]\\/\\s]/,ct=/\\\\(\\\\)?/g,lt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,dt=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,ft=/^\\[object .+?Constructor\\]$/,vt=/^0o[0-7]+$/i,yt=/^(?:0|[1-9]\\d*)$/,mt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,_t=/['\\n\\r\\u2028\\u2029\\\\]/g,St=\"\\\\ud800-\\\\udfff\",bt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",wt=\"\\\\u2700-\\\\u27bf\",Ct=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",Et=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",It=\"\\\\ufe0e\\\\ufe0f\",Pt=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",At=\"[\"+St+\"]\",Ot=\"[\"+Pt+\"]\",kt=\"[\"+bt+\"]\",jt=\"\\\\d+\",Tt=\"[\"+wt+\"]\",Rt=\"[\"+Ct+\"]\",xt=\"[^\"+St+Pt+jt+wt+Ct+Et+\"]\",Mt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Nt=\"[^\"+St+\"]\",zt=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Dt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ut=\"[\"+Et+\"]\",Lt=\"\\\\u200d\",Bt=\"(?:\"+Rt+\"|\"+xt+\")\",Ft=\"(?:\"+Ut+\"|\"+xt+\")\",Vt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",qt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Wt=\"(?:\"+kt+\"|\"+Mt+\")?\",$t=\"[\"+It+\"]?\",Ht=$t+Wt+\"(?:\"+Lt+\"(?:\"+[Nt,zt,Dt].join(\"|\")+\")\"+$t+Wt+\")*\",Gt=\"(?:\"+[Tt,zt,Dt].join(\"|\")+\")\"+Ht,Kt=\"(?:\"+[Nt+kt+\"?\",kt,zt,Dt,At].join(\"|\")+\")\",Jt=RegExp(\"['’]\",\"g\"),Yt=RegExp(kt,\"g\"),Zt=RegExp(Mt+\"(?=\"+Mt+\")|\"+Kt+Ht,\"g\"),Qt=RegExp([Ut+\"?\"+Rt+\"+\"+Vt+\"(?=\"+[Ot,Ut,\"$\"].join(\"|\")+\")\",Ft+\"+\"+qt+\"(?=\"+[Ot,Ut+Bt,\"$\"].join(\"|\")+\")\",Ut+\"?\"+Bt+\"+\"+Vt,Ut+\"+\"+qt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",jt,Gt].join(\"|\"),\"g\"),Xt=RegExp(\"[\"+Lt+St+bt+It+\"]\"),te=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ee=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],ne=-1,re={};re[R]=re[x]=re[M]=re[N]=re[z]=re[D]=re[U]=re[L]=re[B]=!0,re[f]=re[v]=re[j]=re[y]=re[T]=re[m]=re[g]=re[_]=re[b]=re[w]=re[C]=re[I]=re[P]=re[A]=re[k]=!1;var ie={};ie[f]=ie[v]=ie[j]=ie[T]=ie[y]=ie[m]=ie[R]=ie[x]=ie[M]=ie[N]=ie[z]=ie[b]=ie[w]=ie[C]=ie[I]=ie[P]=ie[A]=ie[O]=ie[D]=ie[U]=ie[L]=ie[B]=!0,ie[g]=ie[_]=ie[k]=!1;var oe={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},ae=parseFloat,se=parseInt,ue=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,ce=\"object\"==typeof self&&self&&self.Object===Object&&self,le=ue||ce||Function(\"return this\")(),de=e&&!e.nodeType&&e,pe=de&&t&&!t.nodeType&&t,he=pe&&pe.exports===de,fe=he&&ue.process,ve=function(){try{return pe&&pe.require&&pe.require(\"util\").types||fe&&fe.binding&&fe.binding(\"util\")}catch(t){}}(),ye=ve&&ve.isArrayBuffer,me=ve&&ve.isDate,ge=ve&&ve.isMap,_e=ve&&ve.isRegExp,Se=ve&&ve.isSet,be=ve&&ve.isTypedArray;function we(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Ce(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i];e(r,a,n(a),t)}return r}function Ee(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function Ie(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function Pe(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function Ae(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var a=t[n];e(a,n,t)&&(o[i++]=a)}return o}function Oe(t,e){return!(null==t||!t.length)&&Ue(t,e,0)>-1}function ke(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function je(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function Te(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function Re(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function xe(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function Me(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var Ne=Ve(\"length\");function ze(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function De(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function Ue(t,e,n){return e==e?function(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):De(t,Be,n)}function Le(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function Be(t){return t!=t}function Fe(t,e){var n=null==t?0:t.length;return n?$e(t,e)/n:d}function Ve(t){return function(e){return null==e?r:e[t]}}function qe(t){return function(e){return null==t?r:t[e]}}function We(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function $e(t,e){for(var n,i=-1,o=t.length;++i<o;){var a=e(t[i]);a!==r&&(n=n===r?a:n+a)}return n}function He(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function Ge(t){return t?t.slice(0,dn(t)+1).replace(nt,\"\"):t}function Ke(t){return function(e){return t(e)}}function Je(t,e){return je(e,function(e){return t[e]})}function Ye(t,e){return t.has(e)}function Ze(t,e){for(var n=-1,r=t.length;++n<r&&Ue(e,t[n],0)>-1;);return n}function Qe(t,e){for(var n=t.length;n--&&Ue(e,t[n],0)>-1;);return n}var Xe=qe({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tn=qe({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function en(t){return\"\\\\\"+oe[t]}function nn(t){return Xt.test(t)}function rn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function on(t,e){return function(n){return t(e(n))}}function an(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var s=t[n];s!==e&&s!==a||(t[n]=a,o[i++]=n)}return o}function sn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function un(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function cn(t){return nn(t)?function(t){for(var e=Zt.lastIndex=0;Zt.test(t);)++e;return e}(t):Ne(t)}function ln(t){return nn(t)?function(t){return t.match(Zt)||[]}(t):function(t){return t.split(\"\")}(t)}function dn(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}var pn=qe({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),hn=function t(e){var n,rt=(e=null==e?le:hn.defaults(le.Object(),e,hn.pick(le,ee))).Array,St=e.Date,bt=e.Error,wt=e.Function,Ct=e.Math,Et=e.Object,It=e.RegExp,Pt=e.String,At=e.TypeError,Ot=rt.prototype,kt=wt.prototype,jt=Et.prototype,Tt=e[\"__core-js_shared__\"],Rt=kt.toString,xt=jt.hasOwnProperty,Mt=0,Nt=(n=/[^.]+$/.exec(Tt&&Tt.keys&&Tt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\",zt=jt.toString,Dt=Rt.call(Et),Ut=le._,Lt=It(\"^\"+Rt.call(xt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Bt=he?e.Buffer:r,Ft=e.Symbol,Vt=e.Uint8Array,qt=Bt?Bt.allocUnsafe:r,Wt=on(Et.getPrototypeOf,Et),$t=Et.create,Ht=jt.propertyIsEnumerable,Gt=Ot.splice,Kt=Ft?Ft.isConcatSpreadable:r,Zt=Ft?Ft.iterator:r,Xt=Ft?Ft.toStringTag:r,oe=function(){try{var t=uo(Et,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),ue=e.clearTimeout!==le.clearTimeout&&e.clearTimeout,ce=St&&St.now!==le.Date.now&&St.now,de=e.setTimeout!==le.setTimeout&&e.setTimeout,pe=Ct.ceil,fe=Ct.floor,ve=Et.getOwnPropertySymbols,Ne=Bt?Bt.isBuffer:r,qe=e.isFinite,fn=Ot.join,vn=on(Et.keys,Et),yn=Ct.max,mn=Ct.min,gn=St.now,_n=e.parseInt,Sn=Ct.random,bn=Ot.reverse,wn=uo(e,\"DataView\"),Cn=uo(e,\"Map\"),En=uo(e,\"Promise\"),In=uo(e,\"Set\"),Pn=uo(e,\"WeakMap\"),An=uo(Et,\"create\"),On=Pn&&new Pn,kn={},jn=Do(wn),Tn=Do(Cn),Rn=Do(En),xn=Do(In),Mn=Do(Pn),Nn=Ft?Ft.prototype:r,zn=Nn?Nn.valueOf:r,Dn=Nn?Nn.toString:r;function Un(t){if(ts(t)&&!qa(t)&&!(t instanceof Vn)){if(t instanceof Fn)return t;if(xt.call(t,\"__wrapped__\"))return Uo(t)}return new Fn(t)}var Ln=function(){function t(){}return function(e){if(!Xa(e))return{};if($t)return $t(e);t.prototype=e;var n=new t;return t.prototype=r,n}}();function Bn(){}function Fn(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=r}function Vn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function qn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Wn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function $n(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Hn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new $n;++e<n;)this.add(t[e])}function Gn(t){var e=this.__data__=new Wn(t);this.size=e.size}function Kn(t,e){var n=qa(t),r=!n&&Va(t),i=!n&&!r&&Ga(t),o=!n&&!r&&!i&&us(t),a=n||r||i||o,s=a?He(t.length,Pt):[],u=s.length;for(var c in t)!e&&!xt.call(t,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||yo(c,u))||s.push(c);return s}function Jn(t){var e=t.length;return e?t[$r(0,e-1)]:r}function Yn(t,e){return Ro(Pi(t),or(e,0,t.length))}function Zn(t){return Ro(Pi(t))}function Qn(t,e,n){(n!==r&&!La(t[e],n)||n===r&&!(e in t))&&rr(t,e,n)}function Xn(t,e,n){var i=t[e];xt.call(t,e)&&La(i,n)&&(n!==r||e in t)||rr(t,e,n)}function tr(t,e){for(var n=t.length;n--;)if(La(t[n][0],e))return n;return-1}function er(t,e,n,r){return lr(t,function(t,i,o){e(r,t,n(t),o)}),r}function nr(t,e){return t&&Ai(e,js(e),t)}function rr(t,e,n){\"__proto__\"==e&&oe?oe(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function ir(t,e){for(var n=-1,i=e.length,o=rt(i),a=null==t;++n<i;)o[n]=a?r:Is(t,e[n]);return o}function or(t,e,n){return t==t&&(n!==r&&(t=t<=n?t:n),e!==r&&(t=t>=e?t:e)),t}function ar(t,e,n,i,o,a){var s,u=1&e,c=2&e,l=4&e;if(n&&(s=o?n(t,i,o,a):n(t)),s!==r)return s;if(!Xa(t))return t;var d=qa(t);if(d){if(s=function(t){var e=t.length,n=new t.constructor(e);return e&&\"string\"==typeof t[0]&&xt.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}(t),!u)return Pi(t,s)}else{var p=po(t),h=p==_||p==S;if(Ga(t))return Si(t,u);if(p==C||p==f||h&&!o){if(s=c||h?{}:fo(t),!u)return c?function(t,e){return Ai(t,lo(t),e)}(t,function(t,e){return t&&Ai(e,Ts(e),t)}(s,t)):function(t,e){return Ai(t,co(t),e)}(t,nr(s,t))}else{if(!ie[p])return o?t:{};s=function(t,e,n){var r,i=t.constructor;switch(e){case j:return bi(t);case y:case m:return new i(+t);case T:return function(t,e){var n=e?bi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case R:case x:case M:case N:case z:case D:case U:case L:case B:return wi(t,n);case b:return new i;case w:case A:return new i(t);case I:return function(t){var e=new t.constructor(t.source,dt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case P:return new i;case O:return r=t,zn?Et(zn.call(r)):{}}}(t,p,u)}}a||(a=new Gn);var v=a.get(t);if(v)return v;a.set(t,s),os(t)?t.forEach(function(r){s.add(ar(r,e,n,r,t,a))}):es(t)&&t.forEach(function(r,i){s.set(i,ar(r,e,n,i,t,a))});var g=d?r:(l?c?eo:to:c?Ts:js)(t);return Ee(g||t,function(r,i){g&&(r=t[i=r]),Xn(s,i,ar(r,e,n,i,t,a))}),s}function sr(t,e,n){var i=n.length;if(null==t)return!i;for(t=Et(t);i--;){var o=n[i],a=e[o],s=t[o];if(s===r&&!(o in t)||!a(s))return!1}return!0}function ur(t,e,n){if(\"function\"!=typeof t)throw new At(i);return Oo(function(){t.apply(r,n)},e)}function cr(t,e,n,r){var i=-1,o=Oe,a=!0,s=t.length,u=[],c=e.length;if(!s)return u;n&&(e=je(e,Ke(n))),r?(o=ke,a=!1):e.length>=200&&(o=Ye,a=!1,e=new Hn(e));t:for(;++i<s;){var l=t[i],d=null==n?l:n(l);if(l=r||0!==l?l:0,a&&d==d){for(var p=c;p--;)if(e[p]===d)continue t;u.push(l)}else o(e,d,r)||u.push(l)}return u}Un.templateSettings={escape:K,evaluate:J,interpolate:Y,variable:\"\",imports:{_:Un}},Un.prototype=Bn.prototype,Un.prototype.constructor=Un,Fn.prototype=Ln(Bn.prototype),Fn.prototype.constructor=Fn,Vn.prototype=Ln(Bn.prototype),Vn.prototype.constructor=Vn,qn.prototype.clear=function(){this.__data__=An?An(null):{},this.size=0},qn.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},qn.prototype.get=function(t){var e=this.__data__;if(An){var n=e[t];return n===o?r:n}return xt.call(e,t)?e[t]:r},qn.prototype.has=function(t){var e=this.__data__;return An?e[t]!==r:xt.call(e,t)},qn.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=An&&e===r?o:e,this},Wn.prototype.clear=function(){this.__data__=[],this.size=0},Wn.prototype.delete=function(t){var e=this.__data__,n=tr(e,t);return!(n<0||(n==e.length-1?e.pop():Gt.call(e,n,1),--this.size,0))},Wn.prototype.get=function(t){var e=this.__data__,n=tr(e,t);return n<0?r:e[n][1]},Wn.prototype.has=function(t){return tr(this.__data__,t)>-1},Wn.prototype.set=function(t,e){var n=this.__data__,r=tr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},$n.prototype.clear=function(){this.size=0,this.__data__={hash:new qn,map:new(Cn||Wn),string:new qn}},$n.prototype.delete=function(t){var e=ao(this,t).delete(t);return this.size-=e?1:0,e},$n.prototype.get=function(t){return ao(this,t).get(t)},$n.prototype.has=function(t){return ao(this,t).has(t)},$n.prototype.set=function(t,e){var n=ao(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Hn.prototype.add=Hn.prototype.push=function(t){return this.__data__.set(t,o),this},Hn.prototype.has=function(t){return this.__data__.has(t)},Gn.prototype.clear=function(){this.__data__=new Wn,this.size=0},Gn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Gn.prototype.get=function(t){return this.__data__.get(t)},Gn.prototype.has=function(t){return this.__data__.has(t)},Gn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Wn){var r=n.__data__;if(!Cn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new $n(r)}return n.set(t,e),this.size=n.size,this};var lr=ji(gr),dr=ji(_r,!0);function pr(t,e){var n=!0;return lr(t,function(t,r,i){return n=!!e(t,r,i)}),n}function hr(t,e,n){for(var i=-1,o=t.length;++i<o;){var a=t[i],s=e(a);if(null!=s&&(u===r?s==s&&!ss(s):n(s,u)))var u=s,c=a}return c}function fr(t,e){var n=[];return lr(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function vr(t,e,n,r,i){var o=-1,a=t.length;for(n||(n=vo),i||(i=[]);++o<a;){var s=t[o];e>0&&n(s)?e>1?vr(s,e-1,n,r,i):Te(i,s):r||(i[i.length]=s)}return i}var yr=Ti(),mr=Ti(!0);function gr(t,e){return t&&yr(t,e,js)}function _r(t,e){return t&&mr(t,e,js)}function Sr(t,e){return Ae(e,function(e){return Ya(t[e])})}function br(t,e){for(var n=0,i=(e=yi(e,t)).length;null!=t&&n<i;)t=t[zo(e[n++])];return n&&n==i?t:r}function wr(t,e,n){var r=e(t);return qa(t)?r:Te(r,n(t))}function Cr(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Xt&&Xt in Et(t)?function(t){var e=xt.call(t,Xt),n=t[Xt];try{t[Xt]=r;var i=!0}catch(t){}var o=zt.call(t);return i&&(e?t[Xt]=n:delete t[Xt]),o}(t):function(t){return zt.call(t)}(t)}function Er(t,e){return t>e}function Ir(t,e){return null!=t&&xt.call(t,e)}function Pr(t,e){return null!=t&&e in Et(t)}function Ar(t,e,n){for(var i=n?ke:Oe,o=t[0].length,a=t.length,s=a,u=rt(a),c=1/0,l=[];s--;){var d=t[s];s&&e&&(d=je(d,Ke(e))),c=mn(d.length,c),u[s]=!n&&(e||o>=120&&d.length>=120)?new Hn(s&&d):r}d=t[0];var p=-1,h=u[0];t:for(;++p<o&&l.length<c;){var f=d[p],v=e?e(f):f;if(f=n||0!==f?f:0,!(h?Ye(h,v):i(l,v,n))){for(s=a;--s;){var y=u[s];if(!(y?Ye(y,v):i(t[s],v,n)))continue t}h&&h.push(v),l.push(f)}}return l}function Or(t,e,n){var i=null==(t=Io(t,e=yi(e,t)))?t:t[zo(Jo(e))];return null==i?r:we(i,t,n)}function kr(t){return ts(t)&&Cr(t)==f}function jr(t,e,n,i,o){return t===e||(null==t||null==e||!ts(t)&&!ts(e)?t!=t&&e!=e:function(t,e,n,i,o,a){var s=qa(t),u=qa(e),c=s?v:po(t),l=u?v:po(e),d=(c=c==f?C:c)==C,p=(l=l==f?C:l)==C,h=c==l;if(h&&Ga(t)){if(!Ga(e))return!1;s=!0,d=!1}if(h&&!d)return a||(a=new Gn),s||us(t)?Qi(t,e,n,i,o,a):function(t,e,n,r,i,o,a){switch(n){case T:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case j:return!(t.byteLength!=e.byteLength||!o(new Vt(t),new Vt(e)));case y:case m:case w:return La(+t,+e);case g:return t.name==e.name&&t.message==e.message;case I:case A:return t==e+\"\";case b:var s=rn;case P:var u=1&r;if(s||(s=sn),t.size!=e.size&&!u)return!1;var c=a.get(t);if(c)return c==e;r|=2,a.set(t,e);var l=Qi(s(t),s(e),r,i,o,a);return a.delete(t),l;case O:if(zn)return zn.call(t)==zn.call(e)}return!1}(t,e,c,n,i,o,a);if(!(1&n)){var _=d&&xt.call(t,\"__wrapped__\"),S=p&&xt.call(e,\"__wrapped__\");if(_||S){var E=_?t.value():t,k=S?e.value():e;return a||(a=new Gn),o(E,k,n,i,a)}}return!!h&&(a||(a=new Gn),function(t,e,n,i,o,a){var s=1&n,u=to(t),c=u.length;if(c!=to(e).length&&!s)return!1;for(var l=c;l--;){var d=u[l];if(!(s?d in e:xt.call(e,d)))return!1}var p=a.get(t),h=a.get(e);if(p&&h)return p==e&&h==t;var f=!0;a.set(t,e),a.set(e,t);for(var v=s;++l<c;){var y=t[d=u[l]],m=e[d];if(i)var g=s?i(m,y,d,e,t,a):i(y,m,d,t,e,a);if(!(g===r?y===m||o(y,m,n,i,a):g)){f=!1;break}v||(v=\"constructor\"==d)}if(f&&!v){var _=t.constructor,S=e.constructor;_==S||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof _&&_ instanceof _&&\"function\"==typeof S&&S instanceof S||(f=!1)}return a.delete(t),a.delete(e),f}(t,e,n,i,o,a))}(t,e,n,i,jr,o))}function Tr(t,e,n,i){var o=n.length,a=o,s=!i;if(null==t)return!a;for(t=Et(t);o--;){var u=n[o];if(s&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++o<a;){var c=(u=n[o])[0],l=t[c],d=u[1];if(s&&u[2]){if(l===r&&!(c in t))return!1}else{var p=new Gn;if(i)var h=i(l,d,c,t,e,p);if(!(h===r?jr(d,l,3,i,p):h))return!1}}return!0}function Rr(t){return!(!Xa(t)||(e=t,Nt&&Nt in e))&&(Ya(t)?Lt:ft).test(Do(t));var e}function xr(t){return\"function\"==typeof t?t:null==t?nu:\"object\"==typeof t?qa(t)?Ur(t[0],t[1]):Dr(t):du(t)}function Mr(t){if(!bo(t))return vn(t);var e=[];for(var n in Et(t))xt.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function Nr(t,e){return t<e}function zr(t,e){var n=-1,r=$a(t)?rt(t.length):[];return lr(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Dr(t){var e=so(t);return 1==e.length&&e[0][2]?Co(e[0][0],e[0][1]):function(n){return n===t||Tr(n,t,e)}}function Ur(t,e){return go(t)&&wo(e)?Co(zo(t),e):function(n){var i=Is(n,t);return i===r&&i===e?Ps(n,t):jr(e,i,3)}}function Lr(t,e,n,i,o){t!==e&&yr(e,function(a,s){if(o||(o=new Gn),Xa(a))!function(t,e,n,i,o,a,s){var u=Po(t,n),c=Po(e,n),l=s.get(c);if(l)Qn(t,n,l);else{var d=a?a(u,c,n+\"\",t,e,s):r,p=d===r;if(p){var h=qa(c),f=!h&&Ga(c),v=!h&&!f&&us(c);d=c,h||f||v?qa(u)?d=u:Ha(u)?d=Pi(u):f?(p=!1,d=Si(c,!0)):v?(p=!1,d=wi(c,!0)):d=[]:rs(c)||Va(c)?(d=u,Va(u)?d=ys(u):Xa(u)&&!Ya(u)||(d=fo(c))):p=!1}p&&(s.set(c,d),o(d,c,i,a,s),s.delete(c)),Qn(t,n,d)}}(t,e,s,n,Lr,i,o);else{var u=i?i(Po(t,s),a,s+\"\",t,e,o):r;u===r&&(u=a),Qn(t,s,u)}},Ts)}function Br(t,e){var n=t.length;if(n)return yo(e+=e<0?n:0,n)?t[e]:r}function Fr(t,e,n){e=e.length?je(e,function(t){return qa(t)?function(e){return br(e,1===t.length?t[0]:t)}:t}):[nu];var r=-1;e=je(e,Ke(oo()));var i=zr(t,function(t,n,i){var o=je(e,function(e){return e(t)});return{criteria:o,index:++r,value:t}});return function(t){var e=t.length;for(t.sort(function(t,e){return function(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,a=i.length,s=n.length;++r<a;){var u=Ci(i[r],o[r]);if(u)return r>=s?u:u*(\"desc\"==n[r]?-1:1)}return t.index-e.index}(t,e,n)});e--;)t[e]=t[e].value;return t}(i)}function Vr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var a=e[r],s=br(t,a);n(s,a)&&Yr(o,yi(a,t),s)}return o}function qr(t,e,n,r){var i=r?Le:Ue,o=-1,a=e.length,s=t;for(t===e&&(e=Pi(e)),n&&(s=je(t,Ke(n)));++o<a;)for(var u=0,c=e[o],l=n?n(c):c;(u=i(s,l,u,r))>-1;)s!==t&&Gt.call(s,u,1),Gt.call(t,u,1);return t}function Wr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;yo(i)?Gt.call(t,i,1):ui(t,i)}}return t}function $r(t,e){return t+fe(Sn()*(e-t+1))}function Hr(t,e){var n=\"\";if(!t||e<1||e>l)return n;do{e%2&&(n+=t),(e=fe(e/2))&&(t+=t)}while(e);return n}function Gr(t,e){return ko(Eo(t,e,nu),t+\"\")}function Kr(t){return Jn(Ls(t))}function Jr(t,e){var n=Ls(t);return Ro(n,or(e,0,n.length))}function Yr(t,e,n,i){if(!Xa(t))return t;for(var o=-1,a=(e=yi(e,t)).length,s=a-1,u=t;null!=u&&++o<a;){var c=zo(e[o]),l=n;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return t;if(o!=s){var d=u[c];(l=i?i(d,c,u):r)===r&&(l=Xa(d)?d:yo(e[o+1])?[]:{})}Xn(u,c,l),u=u[c]}return t}var Zr=On?function(t,e){return On.set(t,e),t}:nu,Qr=oe?function(t,e){return oe(t,\"toString\",{configurable:!0,enumerable:!1,value:Xs(e),writable:!0})}:nu;function Xr(t){return Ro(Ls(t))}function ti(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+e];return o}function ei(t,e){var n;return lr(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ni(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e==e&&i<=2147483647){for(;r<i;){var o=r+i>>>1,a=t[o];null!==a&&!ss(a)&&(n?a<=e:a<e)?r=o+1:i=o}return i}return ri(t,e,nu,n)}function ri(t,e,n,i){var o=0,a=null==t?0:t.length;if(0===a)return 0;for(var s=(e=n(e))!=e,u=null===e,c=ss(e),l=e===r;o<a;){var d=fe((o+a)/2),p=n(t[d]),h=p!==r,f=null===p,v=p==p,y=ss(p);if(s)var m=i||v;else m=l?v&&(i||h):u?v&&h&&(i||!f):c?v&&h&&!f&&(i||!y):!f&&!y&&(i?p<=e:p<e);m?o=d+1:a=d}return mn(a,4294967294)}function ii(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n],s=e?e(a):a;if(!n||!La(s,u)){var u=s;o[i++]=0===a?0:a}}return o}function oi(t){return\"number\"==typeof t?t:ss(t)?d:+t}function ai(t){if(\"string\"==typeof t)return t;if(qa(t))return je(t,ai)+\"\";if(ss(t))return Dn?Dn.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function si(t,e,n){var r=-1,i=Oe,o=t.length,a=!0,s=[],u=s;if(n)a=!1,i=ke;else if(o>=200){var c=e?null:Hi(t);if(c)return sn(c);a=!1,i=Ye,u=new Hn}else u=e?[]:s;t:for(;++r<o;){var l=t[r],d=e?e(l):l;if(l=n||0!==l?l:0,a&&d==d){for(var p=u.length;p--;)if(u[p]===d)continue t;e&&u.push(d),s.push(l)}else i(u,d,n)||(u!==s&&u.push(d),s.push(l))}return s}function ui(t,e){var n=-1,r=(e=yi(e,t)).length;if(!r)return!0;for(;++n<r;){var i=zo(e[n]);if(\"__proto__\"===i&&!xt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&n<r-1)return!1}var o=Io(t,e);return null==o||delete o[zo(Jo(e))]}function ci(t,e,n,r){return Yr(t,e,n(br(t,e)),r)}function li(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function di(t,e){var n=t;return n instanceof Vn&&(n=n.value()),Re(e,function(t,e){return e.func.apply(e.thisArg,Te([t],e.args))},n)}function pi(t,e,n){var r=t.length;if(r<2)return r?si(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var a=t[i],s=-1;++s<r;)s!=i&&(o[i]=cr(o[i]||a,t[s],e,n));return si(vr(o,1),e,n)}function hi(t,e,n){for(var i=-1,o=t.length,a=e.length,s={};++i<o;){var u=i<a?e[i]:r;n(s,t[i],u)}return s}function fi(t){return Ha(t)?t:[]}function vi(t){return\"function\"==typeof t?t:nu}function yi(t,e){return qa(t)?t:go(t,e)?[t]:No(ms(t))}var mi=Gr;function gi(t,e,n){var i=t.length;return n=n===r?i:n,!e&&n>=i?t:ti(t,e,n)}var _i=ue||function(t){return le.clearTimeout(t)};function Si(t,e){if(e)return t.slice();var n=t.length,r=qt?qt(n):new t.constructor(n);return t.copy(r),r}function bi(t){var e=new t.constructor(t.byteLength);return new Vt(e).set(new Vt(t)),e}function wi(t,e){var n=e?bi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Ci(t,e){if(t!==e){var n=t!==r,i=null===t,o=t==t,a=ss(t),s=e!==r,u=null===e,c=e==e,l=ss(e);if(!u&&!l&&!a&&t>e||a&&s&&c&&!u&&!l||i&&s&&c||!n&&c||!o)return 1;if(!i&&!a&&!l&&t<e||l&&n&&o&&!i&&!a||u&&n&&o||!s&&o||!c)return-1}return 0}function Ei(t,e,n,r){for(var i=-1,o=t.length,a=n.length,s=-1,u=e.length,c=yn(o-a,0),l=rt(u+c),d=!r;++s<u;)l[s]=e[s];for(;++i<a;)(d||i<o)&&(l[n[i]]=t[i]);for(;c--;)l[s++]=t[i++];return l}function Ii(t,e,n,r){for(var i=-1,o=t.length,a=-1,s=n.length,u=-1,c=e.length,l=yn(o-s,0),d=rt(l+c),p=!r;++i<l;)d[i]=t[i];for(var h=i;++u<c;)d[h+u]=e[u];for(;++a<s;)(p||i<o)&&(d[h+n[a]]=t[i++]);return d}function Pi(t,e){var n=-1,r=t.length;for(e||(e=rt(r));++n<r;)e[n]=t[n];return e}function Ai(t,e,n,i){var o=!n;n||(n={});for(var a=-1,s=e.length;++a<s;){var u=e[a],c=i?i(n[u],t[u],u,n,t):r;c===r&&(c=t[u]),o?rr(n,u,c):Xn(n,u,c)}return n}function Oi(t,e){return function(n,r){var i=qa(n)?Ce:er,o=e?e():{};return i(n,t,oo(r,2),o)}}function ki(t){return Gr(function(e,n){var i=-1,o=n.length,a=o>1?n[o-1]:r,s=o>2?n[2]:r;for(a=t.length>3&&\"function\"==typeof a?(o--,a):r,s&&mo(n[0],n[1],s)&&(a=o<3?r:a,o=1),e=Et(e);++i<o;){var u=n[i];u&&t(e,u,i,a)}return e})}function ji(t,e){return function(n,r){if(null==n)return n;if(!$a(n))return t(n,r);for(var i=n.length,o=e?i:-1,a=Et(n);(e?o--:++o<i)&&!1!==r(a[o],o,a););return n}}function Ti(t){return function(e,n,r){for(var i=-1,o=Et(e),a=r(e),s=a.length;s--;){var u=a[t?s:++i];if(!1===n(o[u],u,o))break}return e}}function Ri(t){return function(e){var n=nn(e=ms(e))?ln(e):r,i=n?n[0]:e.charAt(0),o=n?gi(n,1).join(\"\"):e.slice(1);return i[t]()+o}}function xi(t){return function(e){return Re(Ys(Vs(e).replace(Jt,\"\")),t,\"\")}}function Mi(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Ln(t.prototype),r=t.apply(n,e);return Xa(r)?r:n}}function Ni(t){return function(e,n,i){var o=Et(e);if(!$a(e)){var a=oo(n,3);e=js(e),n=function(t){return a(o[t],t,o)}}var s=t(e,n,i);return s>-1?o[a?e[s]:s]:r}}function zi(t){return Xi(function(e){var n=e.length,o=n,a=Fn.prototype.thru;for(t&&e.reverse();o--;){var s=e[o];if(\"function\"!=typeof s)throw new At(i);if(a&&!u&&\"wrapper\"==ro(s))var u=new Fn([],!0)}for(o=u?o:n;++o<n;){var c=ro(s=e[o]),l=\"wrapper\"==c?no(s):r;u=l&&_o(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?u[ro(l[0])].apply(u,l[3]):1==s.length&&_o(s)?u[c]():u.thru(s)}return function(){var t=arguments,r=t[0];if(u&&1==t.length&&qa(r))return u.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Di(t,e,n,i,o,a,s,c,l,d){var p=e&u,h=1&e,f=2&e,v=24&e,y=512&e,m=f?r:Mi(t);return function u(){for(var g=arguments.length,_=rt(g),S=g;S--;)_[S]=arguments[S];if(v)var b=io(u),w=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(_,b);if(i&&(_=Ei(_,i,o,v)),a&&(_=Ii(_,a,s,v)),g-=w,v&&g<d){var C=an(_,b);return Wi(t,e,Di,u.placeholder,n,_,C,c,l,d-g)}var E=h?n:this,I=f?E[t]:t;return g=_.length,c?_=function(t,e){for(var n=t.length,i=mn(e.length,n),o=Pi(t);i--;){var a=e[i];t[i]=yo(a,n)?o[a]:r}return t}(_,c):y&&g>1&&_.reverse(),p&&l<g&&(_.length=l),this&&this!==le&&this instanceof u&&(I=m||Mi(I)),I.apply(E,_)}}function Ui(t,e){return function(n,r){return function(t,e,n,r){return gr(t,function(t,i,o){e(r,n(t),i,o)}),r}(n,t,e(r),{})}}function Li(t,e){return function(n,i){var o;if(n===r&&i===r)return e;if(n!==r&&(o=n),i!==r){if(o===r)return i;\"string\"==typeof n||\"string\"==typeof i?(n=ai(n),i=ai(i)):(n=oi(n),i=oi(i)),o=t(n,i)}return o}}function Bi(t){return Xi(function(e){return e=je(e,Ke(oo())),Gr(function(n){var r=this;return t(e,function(t){return we(t,r,n)})})})}function Fi(t,e){var n=(e=e===r?\" \":ai(e)).length;if(n<2)return n?Hr(e,t):e;var i=Hr(e,pe(t/cn(e)));return nn(e)?gi(ln(i),0,t).join(\"\"):i.slice(0,t)}function Vi(t){return function(e,n,i){return i&&\"number\"!=typeof i&&mo(e,n,i)&&(n=i=r),e=ps(e),n===r?(n=e,e=0):n=ps(n),function(t,e,n,r){for(var i=-1,o=yn(pe((e-t)/(n||1)),0),a=rt(o);o--;)a[r?o:++i]=t,t+=n;return a}(e,n,i=i===r?e<n?1:-1:ps(i),t)}}function qi(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=vs(e),n=vs(n)),t(e,n)}}function Wi(t,e,n,i,o,a,u,c,l,d){var p=8&e;e|=p?s:64,4&(e&=~(p?64:s))||(e&=-4);var h=[t,e,o,p?a:r,p?u:r,p?r:a,p?r:u,c,l,d],f=n.apply(r,h);return _o(t)&&Ao(f,h),f.placeholder=i,jo(f,t,e)}function $i(t){var e=Ct[t];return function(t,n){if(t=vs(t),(n=null==n?0:mn(hs(n),292))&&qe(t)){var r=(ms(t)+\"e\").split(\"e\");return+((r=(ms(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-n))}return e(t)}}var Hi=In&&1/sn(new In([,-0]))[1]==c?function(t){return new In(t)}:su;function Gi(t){return function(e){var n=po(e);return n==b?rn(e):n==P?un(e):function(t,e){return je(e,function(e){return[e,t[e]]})}(e,t(e))}}function Ki(t,e,n,o,c,l,d,p){var h=2&e;if(!h&&\"function\"!=typeof t)throw new At(i);var f=o?o.length:0;if(f||(e&=-97,o=c=r),d=d===r?d:yn(hs(d),0),p=p===r?p:hs(p),f-=c?c.length:0,64&e){var v=o,y=c;o=c=r}var m=h?r:no(t),g=[t,e,n,o,c,v,y,l,d,p];if(m&&function(t,e){var n=t[1],r=e[1],i=n|r,o=i<131,s=r==u&&8==n||r==u&&256==n&&t[7].length<=e[8]||384==r&&e[7].length<=e[8]&&8==n;if(!o&&!s)return t;1&r&&(t[2]=e[2],i|=1&n?0:4);var c=e[3];if(c){var l=t[3];t[3]=l?Ei(l,c,e[4]):c,t[4]=l?an(t[3],a):e[4]}(c=e[5])&&(l=t[5],t[5]=l?Ii(l,c,e[6]):c,t[6]=l?an(t[5],a):e[6]),(c=e[7])&&(t[7]=c),r&u&&(t[8]=null==t[8]?e[8]:mn(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i}(g,m),t=g[0],e=g[1],n=g[2],o=g[3],c=g[4],!(p=g[9]=g[9]===r?h?0:t.length:yn(g[9]-f,0))&&24&e&&(e&=-25),e&&1!=e)_=8==e||16==e?function(t,e,n){var i=Mi(t);return function o(){for(var a=arguments.length,s=rt(a),u=a,c=io(o);u--;)s[u]=arguments[u];var l=a<3&&s[0]!==c&&s[a-1]!==c?[]:an(s,c);return(a-=l.length)<n?Wi(t,e,Di,o.placeholder,r,s,l,r,r,n-a):we(this&&this!==le&&this instanceof o?i:t,this,s)}}(t,e,p):e!=s&&33!=e||c.length?Di.apply(r,g):function(t,e,n,r){var i=1&e,o=Mi(t);return function e(){for(var a=-1,s=arguments.length,u=-1,c=r.length,l=rt(c+s),d=this&&this!==le&&this instanceof e?o:t;++u<c;)l[u]=r[u];for(;s--;)l[u++]=arguments[++a];return we(d,i?n:this,l)}}(t,e,n,o);else var _=function(t,e,n){var r=1&e,i=Mi(t);return function e(){return(this&&this!==le&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return jo((m?Zr:Ao)(_,g),t,e)}function Ji(t,e,n,i){return t===r||La(t,jt[n])&&!xt.call(i,n)?e:t}function Yi(t,e,n,i,o,a){return Xa(t)&&Xa(e)&&(a.set(e,t),Lr(t,e,r,Yi,a),a.delete(e)),t}function Zi(t){return rs(t)?r:t}function Qi(t,e,n,i,o,a){var s=1&n,u=t.length,c=e.length;if(u!=c&&!(s&&c>u))return!1;var l=a.get(t),d=a.get(e);if(l&&d)return l==e&&d==t;var p=-1,h=!0,f=2&n?new Hn:r;for(a.set(t,e),a.set(e,t);++p<u;){var v=t[p],y=e[p];if(i)var m=s?i(y,v,p,e,t,a):i(v,y,p,t,e,a);if(m!==r){if(m)continue;h=!1;break}if(f){if(!Me(e,function(t,e){if(!Ye(f,e)&&(v===t||o(v,t,n,i,a)))return f.push(e)})){h=!1;break}}else if(v!==y&&!o(v,y,n,i,a)){h=!1;break}}return a.delete(t),a.delete(e),h}function Xi(t){return ko(Eo(t,r,Wo),t+\"\")}function to(t){return wr(t,js,co)}function eo(t){return wr(t,Ts,lo)}var no=On?function(t){return On.get(t)}:su;function ro(t){for(var e=t.name+\"\",n=kn[e],r=xt.call(kn,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function io(t){return(xt.call(Un,\"placeholder\")?Un:t).placeholder}function oo(){var t=Un.iteratee||ru;return t=t===ru?xr:t,arguments.length?t(arguments[0],arguments[1]):t}function ao(t,e){var n,r,i=t.__data__;return(\"string\"==(r=typeof(n=e))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==n:null===n)?i[\"string\"==typeof e?\"string\":\"hash\"]:i.map}function so(t){for(var e=js(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,wo(i)]}return e}function uo(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return Rr(n)?n:r}var co=ve?function(t){return null==t?[]:(t=Et(t),Ae(ve(t),function(e){return Ht.call(t,e)}))}:fu,lo=ve?function(t){for(var e=[];t;)Te(e,co(t)),t=Wt(t);return e}:fu,po=Cr;function ho(t,e,n){for(var r=-1,i=(e=yi(e,t)).length,o=!1;++r<i;){var a=zo(e[r]);if(!(o=null!=t&&n(t,a)))break;t=t[a]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Qa(i)&&yo(a,i)&&(qa(t)||Va(t))}function fo(t){return\"function\"!=typeof t.constructor||bo(t)?{}:Ln(Wt(t))}function vo(t){return qa(t)||Va(t)||!!(Kt&&t&&t[Kt])}function yo(t,e){var n=typeof t;return!!(e=e??l)&&(\"number\"==n||\"symbol\"!=n&&yt.test(t))&&t>-1&&t%1==0&&t<e}function mo(t,e,n){if(!Xa(n))return!1;var r=typeof e;return!!(\"number\"==r?$a(n)&&yo(e,n.length):\"string\"==r&&e in n)&&La(n[e],t)}function go(t,e){if(qa(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!ss(t))||Q.test(t)||!Z.test(t)||null!=e&&t in Et(e)}function _o(t){var e=ro(t),n=Un[e];if(\"function\"!=typeof n||!(e in Vn.prototype))return!1;if(t===n)return!0;var r=no(n);return!!r&&t===r[0]}(wn&&po(new wn(new ArrayBuffer(1)))!=T||Cn&&po(new Cn)!=b||En&&po(En.resolve())!=E||In&&po(new In)!=P||Pn&&po(new Pn)!=k)&&(po=function(t){var e=Cr(t),n=e==C?t.constructor:r,i=n?Do(n):\"\";if(i)switch(i){case jn:return T;case Tn:return b;case Rn:return E;case xn:return P;case Mn:return k}return e});var So=Tt?Ya:vu;function bo(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||jt)}function wo(t){return t==t&&!Xa(t)}function Co(t,e){return function(n){return null!=n&&n[t]===e&&(e!==r||t in Et(n))}}function Eo(t,e,n){return e=yn(e===r?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=yn(r.length-e,0),a=rt(o);++i<o;)a[i]=r[e+i];i=-1;for(var s=rt(e+1);++i<e;)s[i]=r[i];return s[e]=n(a),we(t,this,s)}}function Io(t,e){return e.length<2?t:br(t,ti(e,0,-1))}function Po(t,e){if((\"constructor\"!==e||\"function\"!=typeof t[e])&&\"__proto__\"!=e)return t[e]}var Ao=To(Zr),Oo=de||function(t,e){return le.setTimeout(t,e)},ko=To(Qr);function jo(t,e,n){var r=e+\"\";return ko(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}(r,function(t,e){return Ee(h,function(n){var r=\"_.\"+n[0];e&n[1]&&!Oe(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(ot);return e?e[1].split(at):[]}(r),n)))}function To(t){var e=0,n=0;return function(){var i=gn(),o=16-(i-n);if(n=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(r,arguments)}}function Ro(t,e){var n=-1,i=t.length,o=i-1;for(e=e===r?i:e;++n<e;){var a=$r(n,o),s=t[a];t[a]=t[n],t[n]=s}return t.length=e,t}var xo,Mo,No=(xo=xa(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(X,function(t,n,r,i){e.push(r?i.replace(ct,\"$1\"):n||t)}),e},function(t){return 500===Mo.size&&Mo.clear(),t}),Mo=xo.cache,xo);function zo(t){if(\"string\"==typeof t||ss(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-1/0?\"-0\":e}function Do(t){if(null!=t){try{return Rt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Uo(t){if(t instanceof Vn)return t.clone();var e=new Fn(t.__wrapped__,t.__chain__);return e.__actions__=Pi(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var Lo=Gr(function(t,e){return Ha(t)?cr(t,vr(e,1,Ha,!0)):[]}),Bo=Gr(function(t,e){var n=Jo(e);return Ha(n)&&(n=r),Ha(t)?cr(t,vr(e,1,Ha,!0),oo(n,2)):[]}),Fo=Gr(function(t,e){var n=Jo(e);return Ha(n)&&(n=r),Ha(t)?cr(t,vr(e,1,Ha,!0),r,n):[]});function Vo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:hs(n);return i<0&&(i=yn(r+i,0)),De(t,oo(e,3),i)}function qo(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return n!==r&&(o=hs(n),o=n<0?yn(i+o,0):mn(o,i-1)),De(t,oo(e,3),o,!0)}function Wo(t){return null!=t&&t.length?vr(t,1):[]}function $o(t){return t&&t.length?t[0]:r}var Ho=Gr(function(t){var e=je(t,fi);return e.length&&e[0]===t[0]?Ar(e):[]}),Go=Gr(function(t){var e=Jo(t),n=je(t,fi);return e===Jo(n)?e=r:n.pop(),n.length&&n[0]===t[0]?Ar(n,oo(e,2)):[]}),Ko=Gr(function(t){var e=Jo(t),n=je(t,fi);return(e=\"function\"==typeof e?e:r)&&n.pop(),n.length&&n[0]===t[0]?Ar(n,r,e):[]});function Jo(t){var e=null==t?0:t.length;return e?t[e-1]:r}var Yo=Gr(Zo);function Zo(t,e){return t&&t.length&&e&&e.length?qr(t,e):t}var Qo=Xi(function(t,e){var n=null==t?0:t.length,r=ir(t,e);return Wr(t,je(e,function(t){return yo(t,n)?+t:t}).sort(Ci)),r});function Xo(t){return null==t?t:bn.call(t)}var ta=Gr(function(t){return si(vr(t,1,Ha,!0))}),ea=Gr(function(t){var e=Jo(t);return Ha(e)&&(e=r),si(vr(t,1,Ha,!0),oo(e,2))}),na=Gr(function(t){var e=Jo(t);return e=\"function\"==typeof e?e:r,si(vr(t,1,Ha,!0),r,e)});function ra(t){if(!t||!t.length)return[];var e=0;return t=Ae(t,function(t){if(Ha(t))return e=yn(t.length,e),!0}),He(e,function(e){return je(t,Ve(e))})}function ia(t,e){if(!t||!t.length)return[];var n=ra(t);return null==e?n:je(n,function(t){return we(e,r,t)})}var oa=Gr(function(t,e){return Ha(t)?cr(t,e):[]}),aa=Gr(function(t){return pi(Ae(t,Ha))}),sa=Gr(function(t){var e=Jo(t);return Ha(e)&&(e=r),pi(Ae(t,Ha),oo(e,2))}),ua=Gr(function(t){var e=Jo(t);return e=\"function\"==typeof e?e:r,pi(Ae(t,Ha),r,e)}),ca=Gr(ra),la=Gr(function(t){var e=t.length,n=e>1?t[e-1]:r;return n=\"function\"==typeof n?(t.pop(),n):r,ia(t,n)});function da(t){var e=Un(t);return e.__chain__=!0,e}function pa(t,e){return e(t)}var ha=Xi(function(t){var e=t.length,n=e?t[0]:0,i=this.__wrapped__,o=function(e){return ir(e,t)};return!(e>1||this.__actions__.length)&&i instanceof Vn&&yo(n)?((i=i.slice(n,+n+(e?1:0))).__actions__.push({func:pa,args:[o],thisArg:r}),new Fn(i,this.__chain__).thru(function(t){return e&&!t.length&&t.push(r),t})):this.thru(o)}),fa=Oi(function(t,e,n){xt.call(t,n)?++t[n]:rr(t,n,1)}),va=Ni(Vo),ya=Ni(qo);function ma(t,e){return(qa(t)?Ee:lr)(t,oo(e,3))}function ga(t,e){return(qa(t)?Ie:dr)(t,oo(e,3))}var _a=Oi(function(t,e,n){xt.call(t,n)?t[n].push(e):rr(t,n,[e])}),Sa=Gr(function(t,e,n){var r=-1,i=\"function\"==typeof e,o=$a(t)?rt(t.length):[];return lr(t,function(t){o[++r]=i?we(e,t,n):Or(t,e,n)}),o}),ba=Oi(function(t,e,n){rr(t,n,e)});function wa(t,e){return(qa(t)?je:zr)(t,oo(e,3))}var Ca=Oi(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),Ea=Gr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&mo(t,e[0],e[1])?e=[]:n>2&&mo(e[0],e[1],e[2])&&(e=[e[0]]),Fr(t,vr(e,1),[])}),Ia=ce||function(){return le.Date.now()};function Pa(t,e,n){return e=n?r:e,e=t&&null==e?t.length:e,Ki(t,u,r,r,r,r,e)}function Aa(t,e){var n;if(\"function\"!=typeof e)throw new At(i);return t=hs(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=r),n}}var Oa=Gr(function(t,e,n){var r=1;if(n.length){var i=an(n,io(Oa));r|=s}return Ki(t,r,e,n,i)}),ka=Gr(function(t,e,n){var r=3;if(n.length){var i=an(n,io(ka));r|=s}return Ki(e,r,t,n,i)});function ja(t,e,n){var o,a,s,u,c,l,d=0,p=!1,h=!1,f=!0;if(\"function\"!=typeof t)throw new At(i);function v(e){var n=o,i=a;return o=a=r,d=e,u=t.apply(i,n)}function y(t){var n=t-l;return l===r||n>=e||n<0||h&&t-d>=s}function m(){var t=Ia();if(y(t))return g(t);c=Oo(m,function(t){var n=e-(t-l);return h?mn(n,s-(t-d)):n}(t))}function g(t){return c=r,f&&o?v(t):(o=a=r,u)}function _(){var t=Ia(),n=y(t);if(o=arguments,a=this,l=t,n){if(c===r)return function(t){return d=t,c=Oo(m,e),p?v(t):u}(l);if(h)return _i(c),c=Oo(m,e),v(l)}return c===r&&(c=Oo(m,e)),u}return e=vs(e)||0,Xa(n)&&(p=!!n.leading,s=(h=\"maxWait\"in n)?yn(vs(n.maxWait)||0,e):s,f=\"trailing\"in n?!!n.trailing:f),_.cancel=function(){c!==r&&_i(c),d=0,o=l=a=c=r},_.flush=function(){return c===r?u:g(Ia())},_}var Ta=Gr(function(t,e){return ur(t,1,e)}),Ra=Gr(function(t,e,n){return ur(t,vs(e)||0,n)});function xa(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new At(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(xa.Cache||$n),n}function Ma(t){if(\"function\"!=typeof t)throw new At(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}xa.Cache=$n;var Na=mi(function(t,e){var n=(e=1==e.length&&qa(e[0])?je(e[0],Ke(oo())):je(vr(e,1),Ke(oo()))).length;return Gr(function(r){for(var i=-1,o=mn(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return we(t,this,r)})}),za=Gr(function(t,e){var n=an(e,io(za));return Ki(t,s,r,e,n)}),Da=Gr(function(t,e){var n=an(e,io(Da));return Ki(t,64,r,e,n)}),Ua=Xi(function(t,e){return Ki(t,256,r,r,r,e)});function La(t,e){return t===e||t!=t&&e!=e}var Ba=qi(Er),Fa=qi(function(t,e){return t>=e}),Va=kr(function(){return arguments}())?kr:function(t){return ts(t)&&xt.call(t,\"callee\")&&!Ht.call(t,\"callee\")},qa=rt.isArray,Wa=ye?Ke(ye):function(t){return ts(t)&&Cr(t)==j};function $a(t){return null!=t&&Qa(t.length)&&!Ya(t)}function Ha(t){return ts(t)&&$a(t)}var Ga=Ne||vu,Ka=me?Ke(me):function(t){return ts(t)&&Cr(t)==m};function Ja(t){if(!ts(t))return!1;var e=Cr(t);return e==g||\"[object DOMException]\"==e||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!rs(t)}function Ya(t){if(!Xa(t))return!1;var e=Cr(t);return e==_||e==S||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}function Za(t){return\"number\"==typeof t&&t==hs(t)}function Qa(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=l}function Xa(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function ts(t){return null!=t&&\"object\"==typeof t}var es=ge?Ke(ge):function(t){return ts(t)&&po(t)==b};function ns(t){return\"number\"==typeof t||ts(t)&&Cr(t)==w}function rs(t){if(!ts(t)||Cr(t)!=C)return!1;var e=Wt(t);if(null===e)return!0;var n=xt.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&Rt.call(n)==Dt}var is=_e?Ke(_e):function(t){return ts(t)&&Cr(t)==I},os=Se?Ke(Se):function(t){return ts(t)&&po(t)==P};function as(t){return\"string\"==typeof t||!qa(t)&&ts(t)&&Cr(t)==A}function ss(t){return\"symbol\"==typeof t||ts(t)&&Cr(t)==O}var us=be?Ke(be):function(t){return ts(t)&&Qa(t.length)&&!!re[Cr(t)]},cs=qi(Nr),ls=qi(function(t,e){return t<=e});function ds(t){if(!t)return[];if($a(t))return as(t)?ln(t):Pi(t);if(Zt&&t[Zt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Zt]());var e=po(t);return(e==b?rn:e==P?sn:Ls)(t)}function ps(t){return t?(t=vs(t))===c||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function hs(t){var e=ps(t),n=e%1;return e==e?n?e-n:e:0}function fs(t){return t?or(hs(t),0,p):0}function vs(t){if(\"number\"==typeof t)return t;if(ss(t))return d;if(Xa(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=Xa(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=Ge(t);var n=ht.test(t);return n||vt.test(t)?se(t.slice(2),n?2:8):pt.test(t)?d:+t}function ys(t){return Ai(t,Ts(t))}function ms(t){return null==t?\"\":ai(t)}var gs=ki(function(t,e){if(bo(e)||$a(e))Ai(e,js(e),t);else for(var n in e)xt.call(e,n)&&Xn(t,n,e[n])}),_s=ki(function(t,e){Ai(e,Ts(e),t)}),Ss=ki(function(t,e,n,r){Ai(e,Ts(e),t,r)}),bs=ki(function(t,e,n,r){Ai(e,js(e),t,r)}),ws=Xi(ir),Cs=Gr(function(t,e){t=Et(t);var n=-1,i=e.length,o=i>2?e[2]:r;for(o&&mo(e[0],e[1],o)&&(i=1);++n<i;)for(var a=e[n],s=Ts(a),u=-1,c=s.length;++u<c;){var l=s[u],d=t[l];(d===r||La(d,jt[l])&&!xt.call(t,l))&&(t[l]=a[l])}return t}),Es=Gr(function(t){return t.push(r,Yi),we(xs,r,t)});function Is(t,e,n){var i=null==t?r:br(t,e);return i===r?n:i}function Ps(t,e){return null!=t&&ho(t,e,Pr)}var As=Ui(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=zt.call(e)),t[e]=n},Xs(nu)),Os=Ui(function(t,e,n){null!=e&&\"function\"!=typeof e.toString&&(e=zt.call(e)),xt.call(t,e)?t[e].push(n):t[e]=[n]},oo),ks=Gr(Or);function js(t){return $a(t)?Kn(t):Mr(t)}function Ts(t){return $a(t)?Kn(t,!0):function(t){if(!Xa(t))return function(t){var e=[];if(null!=t)for(var n in Et(t))e.push(n);return e}(t);var e=bo(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&xt.call(t,r))&&n.push(r);return n}(t)}var Rs=ki(function(t,e,n){Lr(t,e,n)}),xs=ki(function(t,e,n,r){Lr(t,e,n,r)}),Ms=Xi(function(t,e){var n={};if(null==t)return n;var r=!1;e=je(e,function(e){return e=yi(e,t),r||(r=e.length>1),e}),Ai(t,eo(t),n),r&&(n=ar(n,7,Zi));for(var i=e.length;i--;)ui(n,e[i]);return n}),Ns=Xi(function(t,e){return null==t?{}:function(t,e){return Vr(t,e,function(e,n){return Ps(t,n)})}(t,e)});function zs(t,e){if(null==t)return{};var n=je(eo(t),function(t){return[t]});return e=oo(e),Vr(t,n,function(t,n){return e(t,n[0])})}var Ds=Gi(js),Us=Gi(Ts);function Ls(t){return null==t?[]:Je(t,js(t))}var Bs=xi(function(t,e,n){return e=e.toLowerCase(),t+(n?Fs(e):e)});function Fs(t){return Js(ms(t).toLowerCase())}function Vs(t){return(t=ms(t))&&t.replace(mt,Xe).replace(Yt,\"\")}var qs=xi(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Ws=xi(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),$s=Ri(\"toLowerCase\"),Hs=xi(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Gs=xi(function(t,e,n){return t+(n?\" \":\"\")+Js(e)}),Ks=xi(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Js=Ri(\"toUpperCase\");function Ys(t,e,n){return t=ms(t),(e=n?r:e)===r?function(t){return te.test(t)}(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.match(st)||[]}(t):t.match(e)||[]}var Zs=Gr(function(t,e){try{return we(t,r,e)}catch(t){return Ja(t)?t:new bt(t)}}),Qs=Xi(function(t,e){return Ee(e,function(e){e=zo(e),rr(t,e,Oa(t[e],t))}),t});function Xs(t){return function(){return t}}var tu=zi(),eu=zi(!0);function nu(t){return t}function ru(t){return xr(\"function\"==typeof t?t:ar(t,1))}var iu=Gr(function(t,e){return function(n){return Or(n,t,e)}}),ou=Gr(function(t,e){return function(n){return Or(t,n,e)}});function au(t,e,n){var r=js(e),i=Sr(e,r);null!=n||Xa(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=Sr(e,js(e)));var o=!(Xa(n)&&\"chain\"in n&&!n.chain),a=Ya(t);return Ee(i,function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Pi(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Te([this.value()],arguments))})}),t}function su(){}var uu=Bi(je),cu=Bi(Pe),lu=Bi(Me);function du(t){return go(t)?Ve(zo(t)):function(t){return function(e){return br(e,t)}}(t)}var pu=Vi(),hu=Vi(!0);function fu(){return[]}function vu(){return!1}var yu,mu=Li(function(t,e){return t+e},0),gu=$i(\"ceil\"),_u=Li(function(t,e){return t/e},1),Su=$i(\"floor\"),bu=Li(function(t,e){return t*e},1),wu=$i(\"round\"),Cu=Li(function(t,e){return t-e},0);return Un.after=function(t,e){if(\"function\"!=typeof e)throw new At(i);return t=hs(t),function(){if(--t<1)return e.apply(this,arguments)}},Un.ary=Pa,Un.assign=gs,Un.assignIn=_s,Un.assignInWith=Ss,Un.assignWith=bs,Un.at=ws,Un.before=Aa,Un.bind=Oa,Un.bindAll=Qs,Un.bindKey=ka,Un.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return qa(t)?t:[t]},Un.chain=da,Un.chunk=function(t,e,n){e=(n?mo(t,e,n):e===r)?1:yn(hs(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,a=0,s=rt(pe(i/e));o<i;)s[a++]=ti(t,o,o+=e);return s},Un.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i},Un.concat=function(){var t=arguments.length;if(!t)return[];for(var e=rt(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return Te(qa(n)?Pi(n):[n],vr(e,1))},Un.cond=function(t){var e=null==t?0:t.length,n=oo();return t=e?je(t,function(t){if(\"function\"!=typeof t[1])throw new At(i);return[n(t[0]),t[1]]}):[],Gr(function(n){for(var r=-1;++r<e;){var i=t[r];if(we(i[0],this,n))return we(i[1],this,n)}})},Un.conforms=function(t){return function(t){var e=js(t);return function(n){return sr(n,t,e)}}(ar(t,1))},Un.constant=Xs,Un.countBy=fa,Un.create=function(t,e){var n=Ln(t);return null==e?n:nr(n,e)},Un.curry=function t(e,n,i){var o=Ki(e,8,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Un.curryRight=function t(e,n,i){var o=Ki(e,16,r,r,r,r,r,n=i?r:n);return o.placeholder=t.placeholder,o},Un.debounce=ja,Un.defaults=Cs,Un.defaultsDeep=Es,Un.defer=Ta,Un.delay=Ra,Un.difference=Lo,Un.differenceBy=Bo,Un.differenceWith=Fo,Un.drop=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=n||e===r?1:hs(e))<0?0:e,i):[]},Un.dropRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,0,(e=i-(e=n||e===r?1:hs(e)))<0?0:e):[]},Un.dropRightWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!0,!0):[]},Un.dropWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!0):[]},Un.fill=function(t,e,n,i){var o=null==t?0:t.length;return o?(n&&\"number\"!=typeof n&&mo(t,e,n)&&(n=0,i=o),function(t,e,n,i){var o=t.length;for((n=hs(n))<0&&(n=-n>o?0:o+n),(i=i===r||i>o?o:hs(i))<0&&(i+=o),i=n>i?0:fs(i);n<i;)t[n++]=e;return t}(t,e,n,i)):[]},Un.filter=function(t,e){return(qa(t)?Ae:fr)(t,oo(e,3))},Un.flatMap=function(t,e){return vr(wa(t,e),1)},Un.flatMapDeep=function(t,e){return vr(wa(t,e),c)},Un.flatMapDepth=function(t,e,n){return n=n===r?1:hs(n),vr(wa(t,e),n)},Un.flatten=Wo,Un.flattenDeep=function(t){return null!=t&&t.length?vr(t,c):[]},Un.flattenDepth=function(t,e){return null!=t&&t.length?vr(t,e=e===r?1:hs(e)):[]},Un.flip=function(t){return Ki(t,512)},Un.flow=tu,Un.flowRight=eu,Un.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];rr(r,i[0],i[1])}return r},Un.functions=function(t){return null==t?[]:Sr(t,js(t))},Un.functionsIn=function(t){return null==t?[]:Sr(t,Ts(t))},Un.groupBy=_a,Un.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Un.intersection=Ho,Un.intersectionBy=Go,Un.intersectionWith=Ko,Un.invert=As,Un.invertBy=Os,Un.invokeMap=Sa,Un.iteratee=ru,Un.keyBy=ba,Un.keys=js,Un.keysIn=Ts,Un.map=wa,Un.mapKeys=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,e(t,r,i),t)}),n},Un.mapValues=function(t,e){var n={};return e=oo(e,3),gr(t,function(t,r,i){rr(n,r,e(t,r,i))}),n},Un.matches=function(t){return Dr(ar(t,1))},Un.matchesProperty=function(t,e){return Ur(t,ar(e,1))},Un.memoize=xa,Un.merge=Rs,Un.mergeWith=xs,Un.method=iu,Un.methodOf=ou,Un.mixin=au,Un.negate=Ma,Un.nthArg=function(t){return t=hs(t),Gr(function(e){return Br(e,t)})},Un.omit=Ms,Un.omitBy=function(t,e){return zs(t,Ma(oo(e)))},Un.once=function(t){return Aa(2,t)},Un.orderBy=function(t,e,n,i){return null==t?[]:(qa(e)||(e=null==e?[]:[e]),qa(n=i?r:n)||(n=null==n?[]:[n]),Fr(t,e,n))},Un.over=uu,Un.overArgs=Na,Un.overEvery=cu,Un.overSome=lu,Un.partial=za,Un.partialRight=Da,Un.partition=Ca,Un.pick=Ns,Un.pickBy=zs,Un.property=du,Un.propertyOf=function(t){return function(e){return null==t?r:br(t,e)}},Un.pull=Yo,Un.pullAll=Zo,Un.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?qr(t,e,oo(n,2)):t},Un.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?qr(t,e,r,n):t},Un.pullAt=Qo,Un.range=pu,Un.rangeRight=hu,Un.rearg=Ua,Un.reject=function(t,e){return(qa(t)?Ae:fr)(t,Ma(oo(e,3)))},Un.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=oo(e,3);++r<o;){var a=t[r];e(a,r,t)&&(n.push(a),i.push(r))}return Wr(t,i),n},Un.rest=function(t,e){if(\"function\"!=typeof t)throw new At(i);return Gr(t,e=e===r?e:hs(e))},Un.reverse=Xo,Un.sampleSize=function(t,e,n){return e=(n?mo(t,e,n):e===r)?1:hs(e),(qa(t)?Yn:Jr)(t,e)},Un.set=function(t,e,n){return null==t?t:Yr(t,e,n)},Un.setWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:Yr(t,e,n,i)},Un.shuffle=function(t){return(qa(t)?Zn:Xr)(t)},Un.slice=function(t,e,n){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&mo(t,e,n)?(e=0,n=i):(e=null==e?0:hs(e),n=n===r?i:hs(n)),ti(t,e,n)):[]},Un.sortBy=Ea,Un.sortedUniq=function(t){return t&&t.length?ii(t):[]},Un.sortedUniqBy=function(t,e){return t&&t.length?ii(t,oo(e,2)):[]},Un.split=function(t,e,n){return n&&\"number\"!=typeof n&&mo(t,e,n)&&(e=n=r),(n=n===r?p:n>>>0)?(t=ms(t))&&(\"string\"==typeof e||null!=e&&!is(e))&&!(e=ai(e))&&nn(t)?gi(ln(t),0,n):t.split(e,n):[]},Un.spread=function(t,e){if(\"function\"!=typeof t)throw new At(i);return e=null==e?0:yn(hs(e),0),Gr(function(n){var r=n[e],i=gi(n,0,e);return r&&Te(i,r),we(t,this,i)})},Un.tail=function(t){var e=null==t?0:t.length;return e?ti(t,1,e):[]},Un.take=function(t,e,n){return t&&t.length?ti(t,0,(e=n||e===r?1:hs(e))<0?0:e):[]},Un.takeRight=function(t,e,n){var i=null==t?0:t.length;return i?ti(t,(e=i-(e=n||e===r?1:hs(e)))<0?0:e,i):[]},Un.takeRightWhile=function(t,e){return t&&t.length?li(t,oo(e,3),!1,!0):[]},Un.takeWhile=function(t,e){return t&&t.length?li(t,oo(e,3)):[]},Un.tap=function(t,e){return e(t),t},Un.throttle=function(t,e,n){var r=!0,o=!0;if(\"function\"!=typeof t)throw new At(i);return Xa(n)&&(r=\"leading\"in n?!!n.leading:r,o=\"trailing\"in n?!!n.trailing:o),ja(t,e,{leading:r,maxWait:e,trailing:o})},Un.thru=pa,Un.toArray=ds,Un.toPairs=Ds,Un.toPairsIn=Us,Un.toPath=function(t){return qa(t)?je(t,zo):ss(t)?[t]:Pi(No(ms(t)))},Un.toPlainObject=ys,Un.transform=function(t,e,n){var r=qa(t),i=r||Ga(t)||us(t);if(e=oo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Xa(t)&&Ya(o)?Ln(Wt(t)):{}}return(i?Ee:gr)(t,function(t,r,i){return e(n,t,r,i)}),n},Un.unary=function(t){return Pa(t,1)},Un.union=ta,Un.unionBy=ea,Un.unionWith=na,Un.uniq=function(t){return t&&t.length?si(t):[]},Un.uniqBy=function(t,e){return t&&t.length?si(t,oo(e,2)):[]},Un.uniqWith=function(t,e){return e=\"function\"==typeof e?e:r,t&&t.length?si(t,r,e):[]},Un.unset=function(t,e){return null==t||ui(t,e)},Un.unzip=ra,Un.unzipWith=ia,Un.update=function(t,e,n){return null==t?t:ci(t,e,vi(n))},Un.updateWith=function(t,e,n,i){return i=\"function\"==typeof i?i:r,null==t?t:ci(t,e,vi(n),i)},Un.values=Ls,Un.valuesIn=function(t){return null==t?[]:Je(t,Ts(t))},Un.without=oa,Un.words=Ys,Un.wrap=function(t,e){return za(vi(e),t)},Un.xor=aa,Un.xorBy=sa,Un.xorWith=ua,Un.zip=ca,Un.zipObject=function(t,e){return hi(t||[],e||[],Xn)},Un.zipObjectDeep=function(t,e){return hi(t||[],e||[],Yr)},Un.zipWith=la,Un.entries=Ds,Un.entriesIn=Us,Un.extend=_s,Un.extendWith=Ss,au(Un,Un),Un.add=mu,Un.attempt=Zs,Un.camelCase=Bs,Un.capitalize=Fs,Un.ceil=gu,Un.clamp=function(t,e,n){return n===r&&(n=e,e=r),n!==r&&(n=(n=vs(n))==n?n:0),e!==r&&(e=(e=vs(e))==e?e:0),or(vs(t),e,n)},Un.clone=function(t){return ar(t,4)},Un.cloneDeep=function(t){return ar(t,5)},Un.cloneDeepWith=function(t,e){return ar(t,5,e=\"function\"==typeof e?e:r)},Un.cloneWith=function(t,e){return ar(t,4,e=\"function\"==typeof e?e:r)},Un.conformsTo=function(t,e){return null==e||sr(t,e,js(e))},Un.deburr=Vs,Un.defaultTo=function(t,e){return null==t||t!=t?e:t},Un.divide=_u,Un.endsWith=function(t,e,n){t=ms(t),e=ai(e);var i=t.length,o=n=n===r?i:or(hs(n),0,i);return(n-=e.length)>=0&&t.slice(n,o)==e},Un.eq=La,Un.escape=function(t){return(t=ms(t))&&G.test(t)?t.replace($,tn):t},Un.escapeRegExp=function(t){return(t=ms(t))&&et.test(t)?t.replace(tt,\"\\\\$&\"):t},Un.every=function(t,e,n){var i=qa(t)?Pe:pr;return n&&mo(t,e,n)&&(e=r),i(t,oo(e,3))},Un.find=va,Un.findIndex=Vo,Un.findKey=function(t,e){return ze(t,oo(e,3),gr)},Un.findLast=ya,Un.findLastIndex=qo,Un.findLastKey=function(t,e){return ze(t,oo(e,3),_r)},Un.floor=Su,Un.forEach=ma,Un.forEachRight=ga,Un.forIn=function(t,e){return null==t?t:yr(t,oo(e,3),Ts)},Un.forInRight=function(t,e){return null==t?t:mr(t,oo(e,3),Ts)},Un.forOwn=function(t,e){return t&&gr(t,oo(e,3))},Un.forOwnRight=function(t,e){return t&&_r(t,oo(e,3))},Un.get=Is,Un.gt=Ba,Un.gte=Fa,Un.has=function(t,e){return null!=t&&ho(t,e,Ir)},Un.hasIn=Ps,Un.head=$o,Un.identity=nu,Un.includes=function(t,e,n,r){t=$a(t)?t:Ls(t),n=n&&!r?hs(n):0;var i=t.length;return n<0&&(n=yn(i+n,0)),as(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&Ue(t,e,n)>-1},Un.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:hs(n);return i<0&&(i=yn(r+i,0)),Ue(t,e,i)},Un.inRange=function(t,e,n){return e=ps(e),n===r?(n=e,e=0):n=ps(n),function(t,e,n){return t>=mn(e,n)&&t<yn(e,n)}(t=vs(t),e,n)},Un.invoke=ks,Un.isArguments=Va,Un.isArray=qa,Un.isArrayBuffer=Wa,Un.isArrayLike=$a,Un.isArrayLikeObject=Ha,Un.isBoolean=function(t){return!0===t||!1===t||ts(t)&&Cr(t)==y},Un.isBuffer=Ga,Un.isDate=Ka,Un.isElement=function(t){return ts(t)&&1===t.nodeType&&!rs(t)},Un.isEmpty=function(t){if(null==t)return!0;if($a(t)&&(qa(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Ga(t)||us(t)||Va(t)))return!t.length;var e=po(t);if(e==b||e==P)return!t.size;if(bo(t))return!Mr(t).length;for(var n in t)if(xt.call(t,n))return!1;return!0},Un.isEqual=function(t,e){return jr(t,e)},Un.isEqualWith=function(t,e,n){var i=(n=\"function\"==typeof n?n:r)?n(t,e):r;return i===r?jr(t,e,r,n):!!i},Un.isError=Ja,Un.isFinite=function(t){return\"number\"==typeof t&&qe(t)},Un.isFunction=Ya,Un.isInteger=Za,Un.isLength=Qa,Un.isMap=es,Un.isMatch=function(t,e){return t===e||Tr(t,e,so(e))},Un.isMatchWith=function(t,e,n){return n=\"function\"==typeof n?n:r,Tr(t,e,so(e),n)},Un.isNaN=function(t){return ns(t)&&t!=+t},Un.isNative=function(t){if(So(t))throw new bt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Rr(t)},Un.isNil=function(t){return null==t},Un.isNull=function(t){return null===t},Un.isNumber=ns,Un.isObject=Xa,Un.isObjectLike=ts,Un.isPlainObject=rs,Un.isRegExp=is,Un.isSafeInteger=function(t){return Za(t)&&t>=-9007199254740991&&t<=l},Un.isSet=os,Un.isString=as,Un.isSymbol=ss,Un.isTypedArray=us,Un.isUndefined=function(t){return t===r},Un.isWeakMap=function(t){return ts(t)&&po(t)==k},Un.isWeakSet=function(t){return ts(t)&&\"[object WeakSet]\"==Cr(t)},Un.join=function(t,e){return null==t?\"\":fn.call(t,e)},Un.kebabCase=qs,Un.last=Jo,Un.lastIndexOf=function(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var o=i;return n!==r&&(o=(o=hs(n))<0?yn(i+o,0):mn(o,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):De(t,Be,o,!0)},Un.lowerCase=Ws,Un.lowerFirst=$s,Un.lt=cs,Un.lte=ls,Un.max=function(t){return t&&t.length?hr(t,nu,Er):r},Un.maxBy=function(t,e){return t&&t.length?hr(t,oo(e,2),Er):r},Un.mean=function(t){return Fe(t,nu)},Un.meanBy=function(t,e){return Fe(t,oo(e,2))},Un.min=function(t){return t&&t.length?hr(t,nu,Nr):r},Un.minBy=function(t,e){return t&&t.length?hr(t,oo(e,2),Nr):r},Un.stubArray=fu,Un.stubFalse=vu,Un.stubObject=function(){return{}},Un.stubString=function(){return\"\"},Un.stubTrue=function(){return!0},Un.multiply=bu,Un.nth=function(t,e){return t&&t.length?Br(t,hs(e)):r},Un.noConflict=function(){return le._===this&&(le._=Ut),this},Un.noop=su,Un.now=Ia,Un.pad=function(t,e,n){t=ms(t);var r=(e=hs(e))?cn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Fi(fe(i),n)+t+Fi(pe(i),n)},Un.padEnd=function(t,e,n){t=ms(t);var r=(e=hs(e))?cn(t):0;return e&&r<e?t+Fi(e-r,n):t},Un.padStart=function(t,e,n){t=ms(t);var r=(e=hs(e))?cn(t):0;return e&&r<e?Fi(e-r,n)+t:t},Un.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),_n(ms(t).replace(nt,\"\"),e||0)},Un.random=function(t,e,n){if(n&&\"boolean\"!=typeof n&&mo(t,e,n)&&(e=n=r),n===r&&(\"boolean\"==typeof e?(n=e,e=r):\"boolean\"==typeof t&&(n=t,t=r)),t===r&&e===r?(t=0,e=1):(t=ps(t),e===r?(e=t,t=0):e=ps(e)),t>e){var i=t;t=e,e=i}if(n||t%1||e%1){var o=Sn();return mn(t+o*(e-t+ae(\"1e-\"+((o+\"\").length-1))),e)}return $r(t,e)},Un.reduce=function(t,e,n){var r=qa(t)?Re:We,i=arguments.length<3;return r(t,oo(e,4),n,i,lr)},Un.reduceRight=function(t,e,n){var r=qa(t)?xe:We,i=arguments.length<3;return r(t,oo(e,4),n,i,dr)},Un.repeat=function(t,e,n){return e=(n?mo(t,e,n):e===r)?1:hs(e),Hr(ms(t),e)},Un.replace=function(){var t=arguments,e=ms(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Un.result=function(t,e,n){var i=-1,o=(e=yi(e,t)).length;for(o||(o=1,t=r);++i<o;){var a=null==t?r:t[zo(e[i])];a===r&&(i=o,a=n),t=Ya(a)?a.call(t):a}return t},Un.round=wu,Un.runInContext=t,Un.sample=function(t){return(qa(t)?Jn:Kr)(t)},Un.size=function(t){if(null==t)return 0;if($a(t))return as(t)?cn(t):t.length;var e=po(t);return e==b||e==P?t.size:Mr(t).length},Un.snakeCase=Hs,Un.some=function(t,e,n){var i=qa(t)?Me:ei;return n&&mo(t,e,n)&&(e=r),i(t,oo(e,3))},Un.sortedIndex=function(t,e){return ni(t,e)},Un.sortedIndexBy=function(t,e,n){return ri(t,e,oo(n,2))},Un.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=ni(t,e);if(r<n&&La(t[r],e))return r}return-1},Un.sortedLastIndex=function(t,e){return ni(t,e,!0)},Un.sortedLastIndexBy=function(t,e,n){return ri(t,e,oo(n,2),!0)},Un.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=ni(t,e,!0)-1;if(La(t[n],e))return n}return-1},Un.startCase=Gs,Un.startsWith=function(t,e,n){return t=ms(t),n=null==n?0:or(hs(n),0,t.length),e=ai(e),t.slice(n,n+e.length)==e},Un.subtract=Cu,Un.sum=function(t){return t&&t.length?$e(t,nu):0},Un.sumBy=function(t,e){return t&&t.length?$e(t,oo(e,2)):0},Un.template=function(t,e,n){var i=Un.templateSettings;n&&mo(t,e,n)&&(e=r),t=ms(t),e=bs({},e,i,Ji);var o=bs({},e.imports,i.imports,Ji),a=js(o),s=Je(o,a);Ee(a,function(t){if(ut.test(t))throw new bt(\"Invalid `imports` option passed into `_.template`\")});var u,c,l=0,d=e.interpolate||gt,p=\"__p += '\",h=It((e.escape||gt).source+\"|\"+d.source+\"|\"+(d===Y?lt:gt).source+\"|\"+(e.evaluate||gt).source+\"|$\",\"g\"),f=\"//# sourceURL=\"+(xt.call(e,\"sourceURL\")?(e.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++ne+\"]\")+\"\\n\";t.replace(h,function(e,n,r,i,o,a){return r||(r=i),p+=t.slice(l,a).replace(_t,en),n&&(u=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),o&&(c=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=a+e.length,e}),p+=\"';\\n\";var v=xt.call(e,\"variable\")&&e.variable;if(v){if(ut.test(v))throw new bt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(c?p.replace(F,\"\"):p).replace(V,\"$1\").replace(q,\"$1;\"),p=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(u?\", __e = _.escape\":\"\")+(c?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var y=Zs(function(){return wt(a,f+\"return \"+p).apply(r,s)});if(y.source=p,Ja(y))throw y;return y},Un.times=function(t,e){if((t=hs(t))<1||t>l)return[];var n=p,r=mn(t,p);e=oo(e),t-=p;for(var i=He(r,e);++n<t;)e(n);return i},Un.toFinite=ps,Un.toInteger=hs,Un.toLength=fs,Un.toLower=function(t){return ms(t).toLowerCase()},Un.toNumber=vs,Un.toSafeInteger=function(t){return t?or(hs(t),-9007199254740991,l):0===t?t:0},Un.toString=ms,Un.toUpper=function(t){return ms(t).toUpperCase()},Un.trim=function(t,e,n){if((t=ms(t))&&(n||e===r))return Ge(t);if(!t||!(e=ai(e)))return t;var i=ln(t),o=ln(e);return gi(i,Ze(i,o),Qe(i,o)+1).join(\"\")},Un.trimEnd=function(t,e,n){if((t=ms(t))&&(n||e===r))return t.slice(0,dn(t)+1);if(!t||!(e=ai(e)))return t;var i=ln(t);return gi(i,0,Qe(i,ln(e))+1).join(\"\")},Un.trimStart=function(t,e,n){if((t=ms(t))&&(n||e===r))return t.replace(nt,\"\");if(!t||!(e=ai(e)))return t;var i=ln(t);return gi(i,Ze(i,ln(e))).join(\"\")},Un.truncate=function(t,e){var n=30,i=\"...\";if(Xa(e)){var o=\"separator\"in e?e.separator:o;n=\"length\"in e?hs(e.length):n,i=\"omission\"in e?ai(e.omission):i}var a=(t=ms(t)).length;if(nn(t)){var s=ln(t);a=s.length}if(n>=a)return t;var u=n-cn(i);if(u<1)return i;var c=s?gi(s,0,u).join(\"\"):t.slice(0,u);if(o===r)return c+i;if(s&&(u+=c.length-u),is(o)){if(t.slice(u).search(o)){var l,d=c;for(o.global||(o=It(o.source,ms(dt.exec(o))+\"g\")),o.lastIndex=0;l=o.exec(d);)var p=l.index;c=c.slice(0,p===r?u:p)}}else if(t.indexOf(ai(o),u)!=u){var h=c.lastIndexOf(o);h>-1&&(c=c.slice(0,h))}return c+i},Un.unescape=function(t){return(t=ms(t))&&H.test(t)?t.replace(W,pn):t},Un.uniqueId=function(t){var e=++Mt;return ms(t)+e},Un.upperCase=Ks,Un.upperFirst=Js,Un.each=ma,Un.eachRight=ga,Un.first=$o,au(Un,(yu={},gr(Un,function(t,e){xt.call(Un.prototype,e)||(yu[e]=t)}),yu),{chain:!1}),Un.VERSION=\"4.18.1\",Ee([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Un[t].placeholder=Un}),Ee([\"drop\",\"take\"],function(t,e){Vn.prototype[t]=function(n){n=n===r?1:yn(hs(n),0);var i=this.__filtered__&&!e?new Vn(this):this.clone();return i.__filtered__?i.__takeCount__=mn(n,i.__takeCount__):i.__views__.push({size:mn(n,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Vn.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),Ee([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=1==n||3==n;Vn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:oo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),Ee([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");Vn.prototype[t]=function(){return this[n](1).value()[0]}}),Ee([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");Vn.prototype[t]=function(){return this.__filtered__?new Vn(this):this[n](1)}}),Vn.prototype.compact=function(){return this.filter(nu)},Vn.prototype.find=function(t){return this.filter(t).head()},Vn.prototype.findLast=function(t){return this.reverse().find(t)},Vn.prototype.invokeMap=Gr(function(t,e){return\"function\"==typeof t?new Vn(this):this.map(function(n){return Or(n,t,e)})}),Vn.prototype.reject=function(t){return this.filter(Ma(oo(t)))},Vn.prototype.slice=function(t,e){t=hs(t);var n=this;return n.__filtered__&&(t>0||e<0)?new Vn(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==r&&(n=(e=hs(e))<0?n.dropRight(-e):n.take(e-t)),n)},Vn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Vn.prototype.toArray=function(){return this.take(p)},gr(Vn.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Un[i?\"take\"+(\"last\"==e?\"Right\":\"\"):e],a=i||/^find/.test(e);o&&(Un.prototype[e]=function(){var e=this.__wrapped__,s=i?[1]:arguments,u=e instanceof Vn,c=s[0],l=u||qa(e),d=function(t){var e=o.apply(Un,Te([t],s));return i&&p?e[0]:e};l&&n&&\"function\"==typeof c&&1!=c.length&&(u=l=!1);var p=this.__chain__,h=!!this.__actions__.length,f=a&&!p,v=u&&!h;if(!a&&l){e=v?e:new Vn(this);var y=t.apply(e,s);return y.__actions__.push({func:pa,args:[d],thisArg:r}),new Fn(y,p)}return f&&v?t.apply(this,s):(y=this.thru(d),f?i?y.value()[0]:y.value():y)})}),Ee([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=Ot[t],n=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Un.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(qa(i)?i:[],t)}return this[n](function(n){return e.apply(qa(n)?n:[],t)})}}),gr(Vn.prototype,function(t,e){var n=Un[e];if(n){var r=n.name+\"\";xt.call(kn,r)||(kn[r]=[]),kn[r].push({name:e,func:n})}}),kn[Di(r,2).name]=[{name:\"wrapper\",func:r}],Vn.prototype.clone=function(){var t=new Vn(this.__wrapped__);return t.__actions__=Pi(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Pi(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Pi(this.__views__),t},Vn.prototype.reverse=function(){if(this.__filtered__){var t=new Vn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Vn.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=qa(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case\"drop\":t+=a;break;case\"dropRight\":e-=a;break;case\"take\":e=mn(e,t+a);break;case\"takeRight\":t=yn(t,e-a)}}return{start:t,end:e}}(0,i,this.__views__),a=o.start,s=o.end,u=s-a,c=r?s:a-1,l=this.__iteratees__,d=l.length,p=0,h=mn(u,this.__takeCount__);if(!n||!r&&i==u&&h==u)return di(t,this.__actions__);var f=[];t:for(;u--&&p<h;){for(var v=-1,y=t[c+=e];++v<d;){var m=l[v],g=m.iteratee,_=m.type,S=g(y);if(2==_)y=S;else if(!S){if(1==_)continue t;break t}}f[p++]=y}return f},Un.prototype.at=ha,Un.prototype.chain=function(){return da(this)},Un.prototype.commit=function(){return new Fn(this.value(),this.__chain__)},Un.prototype.next=function(){this.__values__===r&&(this.__values__=ds(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Un.prototype.plant=function(t){for(var e,n=this;n instanceof Bn;){var i=Uo(n);i.__index__=0,i.__values__=r,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e},Un.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Vn){var e=t;return this.__actions__.length&&(e=new Vn(this)),(e=e.reverse()).__actions__.push({func:pa,args:[Xo],thisArg:r}),new Fn(e,this.__chain__)}return this.thru(Xo)},Un.prototype.toJSON=Un.prototype.valueOf=Un.prototype.value=function(){return di(this.__wrapped__,this.__actions__)},Un.prototype.first=Un.prototype.head,Zt&&(Un.prototype[Zt]=function(){return this}),Un}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(le._=hn,define(function(){return hn})):pe?((pe.exports=hn)._=hn,de._=hn):le._=hn}.call(this)},1657(t){\"use strict\";t.exports=(t,e)=>{if(\"string\"!=typeof t||\"string\"!=typeof e)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===e)return[t];const n=t.indexOf(e);return-1===n?[t]:[t.slice(0,n),t.slice(n+e.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,e,n){\"use strict\";n.d(e,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";n.r(r),n.d(r,{createLinkV2ButtonStrategy:()=>Ct,createStripeCSPaymentStrategy:()=>ct,createStripeLinkV2CustomerStrategy:()=>St,createStripeOCSPaymentStrategy:()=>at,createStripeUPECustomerStrategy:()=>dt,createStripeUPEPaymentStrategy:()=>nt,createStripeV3PaymentStrategy:()=>O});var t=n(315);function e(t,e){return Object.assign(t,{resolveIds:e})}var i,o,a=n(9440);class s extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class u extends s{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class c extends u{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}function l(t){return!(\"object\"!=typeof t||null===t||void 0!==t.shouldSaveInstrument&&\"boolean\"!=typeof t.shouldSaveInstrument||void 0!==t.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof t.shouldSetAsDefaultInstrument)}function d(t){return Boolean(t.instrumentId)}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(i||(i={}));class p extends s{constructor(t){super(function(t){switch(t){case i.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case i.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case i.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case i.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case i.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case i.MissingCheckoutConfig:case i.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case i.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case i.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case i.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case i.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case i.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case i.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class h extends s{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(o||(o={}));class f extends s{constructor(t){super(function(t){switch(t){case o.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case o.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case o.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case o.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const v=t=>\"object\"==typeof t&&null!==t&&\"body\"in t;class y extends s{constructor(t){super(t||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}function m(t){return null!==t&&\"object\"==typeof t&&\"cardNumberElementOptions\"in t&&\"cardCvcElementOptions\"in t&&\"cardExpiryElementOptions\"in t&&void 0!==t.cardNumberElementOptions&&void 0!==t.cardCvcElementOptions&&void 0!==t.cardExpiryElementOptions}var g,_,S,b;!function(t){t.Solid=\"solid\",t.Default=\"default\"}(g||(g={})),function(t){t.Alipay=\"alipay\",t.CardCvc=\"cardCvc\",t.CardExpiry=\"cardExpiry\",t.CardNumber=\"cardNumber\",t.CreditCard=\"card\",t.IDEAL=\"idealBank\",t.Sepa=\"iban\"}(_||(_={})),function(t){t.Alipay=\"alipay\",t.CreditCard=\"card\",t.IDEAL=\"ideal\",t.Sepa=\"sepa_debit\"}(S||(S={})),function(t){t.AuthFailure=\"auth_failure\"}(b||(b={}));class w extends s{constructor(t){super(t===b.AuthFailure?\"User did not authenticate\":\"There was an error while processing your payment. Please try again or contact us.\"),this.type=\"stripev3_error\",this.subtype=t}}var C=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};const E=[_.Alipay,_.IDEAL];class I{constructor(t,e){this.paymentIntegrationService=t,this.scriptLoader=e}initialize(t){return C(this,void 0,void 0,function*(){const{stripev3:e,methodId:n,gatewayId:r}=t;if(!r)throw new u('Unable to initialize payment because \"gatewayId\" argument is not provided.');this.initializeOptions=e,this.isDeinitialize=!1;const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n),{initializationData:{stripePublishableKey:o,stripeConnectedAccount:a,useIndividualCardFields:s,allowRedisplayForStoredInstruments:c}}=i;this._allowRedisplayForStoredInstruments=c;const l=this.getInitializeOptions().form;this.useIndividualCardFields=s,this.stripeV3Client=yield this.loadStripeJs(o,a),this.isCreditCard(n)&&this.shouldShowTSVHostedForm(n,r)&&l?this.hostedForm=yield this.mountCardVerificationFields(l):this.stripeElement=yield this.mountCardFields(n)})}execute(t,e){var n,r;return C(this,void 0,void 0,function*(){const{payment:o}=t,s=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]);let u,h;if(!o||!o.paymentData)throw new c([\"payment.paymentData\"]);const{paymentData:f,gatewayId:v,methodId:y}=o,{shouldSaveInstrument:m,shouldSetAsDefaultInstrument:g}=l(f)?f:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1},S=(0,a.includes)(E,y),{isStoreCreditApplied:b}=this.paymentIntegrationService.getState().getCheckoutOrThrow();b&&(yield this.paymentIntegrationService.applyStoreCredit(b));try{S&&(yield this.paymentIntegrationService.submitOrder(s,e)),v&&(yield this.paymentIntegrationService.loadPaymentMethod(v,{params:{method:y}}));const t=this.paymentIntegrationService.getState();if(d(f)){yield this.paymentIntegrationService.submitOrder(s,e);const{instrumentId:n}=f,r=t.getPaymentMethodOrThrow(o.methodId).clientToken;if(!r)throw new p(i.MissingPaymentMethod);return yield this.executeWithVaulted(o,n,g,r)}const a=t.getPaymentMethodOrThrow(y),c=yield this.confirmStripePayment(a),{clientToken:l,method:b}=a,{id:w}=null!==(r=null!==(n=c.paymentIntent)&&void 0!==n?n:c.paymentMethod)&&void 0!==r?r:{id:\"\"};h=c.error,u={credit_card_token:{token:w},vault_payment_instrument:m,confirm:!1,set_as_default_stored_instrument:g},b===_.CreditCard&&(u.client_token=l),S||(yield this.paymentIntegrationService.submitOrder(s,e));const C=this.buildPaymentPayload(y,u,g);yield this.paymentIntegrationService.submitPayment(C)}catch(t){yield this.processAdditionalAction(this.handleEmptyPaymentIntentError(t,h),y,m,g)}})}finalize(){return Promise.reject(new h)}deinitialize(){return this.hostedForm&&this.hostedForm.detach(),this.isDeinitialize=!0,this.unmountElement(),Promise.resolve()}buildPaymentPayload(t,e,n){return{methodId:t,paymentData:n?{formattedPayload:Object.assign(Object.assign({},e),{set_as_default_stored_instrument:n})}:{formattedPayload:e}}}isCancellationError(t){var e,n;return t&&-1!==(null===(n=null===(e=t.payment_intent.last_payment_error)||void 0===e?void 0:e.message)||void 0===n?void 0:n.indexOf(\"canceled\"))}isAuthError(t){return\"payment_intent_authentication_failure\"===(null==t?void 0:t.code)}isCreditCard(t){return t===S.CreditCard}isHostedFieldAvailable(){var t;const e=this.getInitializeOptions(),n=(0,a.omitBy)(null===(t=e.form)||void 0===t?void 0:t.fields,a.isEmpty);return!(0,a.isEmpty)(n)}isHostedPaymentFormEnabled(t,e){const{getPaymentMethodOrThrow:n}=this.paymentIntegrationService.getState(),r=n(t,e);return Boolean(r.config.isHostedFormEnabled)}confirmStripePayment(t){return C(this,void 0,void 0,function*(){const{clientToken:e,method:n,returnUrl:r}=t;if(!e)throw new p(i.MissingPaymentMethod);switch(n){case _.Alipay:return this.getStripeJs().confirmAlipayPayment(e,{return_url:r},{handleActions:!1});case _.IDEAL:{const t=this.mapStripePaymentData(S.IDEAL,r);return this.getStripeJs().confirmIdealPayment(e,t,{handleActions:!1})}case _.Sepa:{const t=this.mapStripePaymentData(S.Sepa);return this.getStripeJs().confirmSepaDebitPayment(e,t)}default:{const t=this.useIndividualCardFields?this.getStripeCardElements()[0]:this.getStripeElement(),e=this.mapStripeBillingDetails(this.paymentIntegrationService.getState().getBillingAddress(),this.paymentIntegrationService.getState().getCustomer()),n=this._allowRedisplayForStoredInstruments;return this.getStripeJs().createPaymentMethod(Object.assign({type:S.CreditCard,card:t,billing_details:e},n?{allow_redisplay:\"always\"}:{}))}}})}executeWithVaulted(t,e,n,r){var i;return C(this,void 0,void 0,function*(){const o={bigpay_token:{token:e},confirm:!0,client_token:r,set_as_default_stored_instrument:n};if(this.isHostedPaymentFormEnabled(t.methodId,t.gatewayId)&&this.hostedForm){const e=this.hostedForm;return t.paymentData&&d(t.paymentData)&&(t.paymentData=Object.assign(Object.assign({},t.paymentData),{instrumentId:JSON.stringify({token:(null===(i=t.paymentData)||void 0===i?void 0:i.instrumentId)||\"\",client_token:r})})),yield e.validate(),yield e.submit(t),this.paymentIntegrationService.loadCurrentOrder()}const a=this.buildPaymentPayload(t.methodId,o,n);return this.paymentIntegrationService.submitPayment(a)})}getInitializeOptions(){if(!this.initializeOptions)throw new f(o.PaymentNotInitialized);return this.initializeOptions}getStripeCardElements(){if(!this.stripeCardElements)throw new f(o.PaymentNotInitialized);return this.stripeCardElements}getStripeElement(){if(!this.stripeElement)throw new f(o.PaymentNotInitialized);return this.stripeElement}getStripeJs(){if(!this.stripeV3Client)throw new f(o.PaymentNotInitialized);return this.stripeV3Client}handleEmptyPaymentIntentError(t,e){return v(t)&&(0,a.some)(t.body.errors,{code:\"required_field\"})&&e?new Error(e.message):t}loadStripeJs(t,e){return C(this,void 0,void 0,function*(){return this.stripeV3Client?Promise.resolve(this.stripeV3Client):this.scriptLoader.load(t,e,this.paymentIntegrationService.getState().getLocale())})}mapStripeAddress(t){if(t){const{city:e,countryCode:n,address1:r,address2:i,postalCode:o,stateOrProvinceCode:a}=t;return{city:e,country:n,line1:r,line2:i,postal_code:o,state:a}}return{line1:\"\"}}mapStripeBillingDetails(t,e){const{firstName:n,lastName:r}=t||e||{firstName:\"Guest\",lastName:\"\"},i=`${n} ${r}`.trim(),{options:o}=this.getInitializeOptions();if(this.useIndividualCardFields&&m(o)){const{zipCodeElementOptions:e}=o;if(e){const n=document.getElementById(e.containerId)?document.getElementById(e.containerId).value:\"\";n&&t&&(t=Object.assign(Object.assign({},t),{postalCode:n}))}}const a={address:this.mapStripeAddress(t)};if(e&&e.addresses[0]&&function(t){return\"object\"==typeof t&&null!==t&&\"id\"in t&&void 0!==t.id}(e.addresses[0])){const t=e.addresses[0],{email:n}=e,{phone:r}=t;return r?Object.assign(Object.assign({},a),{email:n,name:i,phone:r}):Object.assign(Object.assign({},a),{email:n,name:i})}if(t){const{email:e,phone:n}=t;return n?Object.assign(Object.assign({},a),{email:e,name:i,phone:n}):Object.assign(Object.assign({},a),{email:e,name:i})}return Object.assign(Object.assign({},a),{name:i})}mapStripePaymentData(t,e){const n=this.paymentIntegrationService.getState().getCustomer(),r=this.paymentIntegrationService.getState().getBillingAddress(),i={payment_method:{[t]:this.getStripeElement(),billing_details:this.mapStripeBillingDetails(r,n)}};return t===S.IDEAL?Object.assign(Object.assign({},i),{return_url:e}):i}mountCardFields(t){const{options:e,containerId:n}=this.getInitializeOptions();let r;return new Promise((i,o)=>{switch(this.stripeElements||(this.stripeElements=this.getStripeJs().elements()),t){case _.CreditCard:if(this.useIndividualCardFields&&m(e)){const{cardNumberElementOptions:t,cardExpiryElementOptions:n,cardCvcElementOptions:i}=e,a=this.stripeElements.getElement(_.CardNumber)||this.stripeElements.create(_.CardNumber,t),s=this.stripeElements.getElement(_.CardExpiry)||this.stripeElements.create(_.CardExpiry,n),c=this.stripeElements.getElement(_.CardCvc)||this.stripeElements.create(_.CardCvc,i);this.stripeCardElements=[a,s,c],r=this.stripeCardElements[0];try{a.mount(`#${t.containerId}`),s.mount(`#${n.containerId}`),c.mount(`#${i.containerId}`)}catch(t){this.isDeinitialize||o(new u(\"Unable to mount Stripe component without valid container ID.\"))}}else{r=this.stripeElements.getElement(t)||this.stripeElements.create(t,e);try{r.mount(`#${n}`)}catch(t){this.isDeinitialize||o(new u(\"Unable to mount Stripe component without valid container ID.\"))}}break;case _.IDEAL:case _.Sepa:r=this.stripeElements.getElement(t)||this.stripeElements.create(t,e);try{r.mount(`#${n}`)}catch(t){this.isDeinitialize||o(new u(\"Unable to mount Stripe component without valid container ID.\"))}case _.Alipay:}i(r)})}mountCardVerificationFields(t){return C(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getStoreConfig();if(!e)throw new p(i.MissingCheckoutConfig);const n=e.paymentSettings.bigpayBaseUrl,r=this.paymentIntegrationService.createHostedForm(n,t);return yield r.attach(),r})}processAdditionalAction(t,e,n=!1,r=!1){return C(this,void 0,void 0,function*(){if(!v(t))throw t;const i=(0,a.some)(t.body.errors,{code:\"additional_action_required\"}),o=(0,a.some)(t.body.errors,{code:\"three_d_secure_required\"});if(i){const e=t.body.additional_action_required;if(e&&\"redirect_to_url\"===e.type)return new Promise(()=>{e.data.redirect_url&&window.location.replace(e.data.redirect_url)})}if(o){const i=t.body.three_ds_result.token,o=!1;let a,s=!1;try{a=yield this.getStripeJs().confirmCardPayment(i)}catch(t){s=!0}if(null==a?void 0:a.error){if(this.isCancellationError(a.error))throw new y;if(this.isAuthError(a.error))throw new w(b.AuthFailure);throw new Error(a.error.message)}const u={credit_card_token:{token:this.getPaymentToken(null==a?void 0:a.paymentIntent,i,s)},vault_payment_instrument:n,confirm:o},c=this.buildPaymentPayload(e,u,r);try{return yield this.paymentIntegrationService.submitPayment(c)}catch(t){throw this.handleEmptyPaymentIntentError(t,null==a?void 0:a.error)}}throw t})}getPaymentToken(t,e,n){return!t||n?e:t.id}shouldShowTSVHostedForm(t,e){return this.isHostedFieldAvailable()&&this.isHostedPaymentFormEnabled(t,e)}unmountElement(){this.stripeElement&&(this.stripeElement.unmount(),this.stripeElement=void 0)}}class P extends s{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class A{constructor(t,e=window){this.scriptLoader=t,this.stripeWindow=e}load(t,e,n){return this.scriptLoader.loadScript(\"https://js.stripe.com/v3/\").then(()=>{if(!this.stripeWindow.Stripe)throw new P;return this.stripeWindow.Stripe(t,{stripeAccount:e,locale:n,betas:[\"payment_intent_beta_3\",\"alipay_pm_beta_1\"],apiVersion:\"2020-03-02;alipay_beta=v1\"})})}}const O=e(e=>new I(e,new A((0,t.vQ)())),[{gateway:\"stripev3\"}]);var k,j,T,R,x,M,N,z,D,U,L,B;!function(t){t.SHIPPING=\"shipping\",t.BILLING=\"billing\"}(k||(k={})),function(t){t.SPLIT=\"split\",t.FULL=\"full\",t.ORGANIZATION=\"organization\"}(j||(j={})),function(t){t.Open=\"open\",t.Expired=\"expired\",t.Complete=\"complete\"}(T||(T={})),function(t){t.Paid=\"paid\",t.UnPaid=\"unpaid\",t.NoPaymentRequired=\"no_payment_required\"}(R||(R={})),function(t){t.SUCCESS=\"success\",t.ERROR=\"error\"}(x||(x={})),function(t){t.CreditCard=\"card\",t.ACH=\"us_bank_account\",t.Link=\"link\",t.EPS=\"eps\",t.GRABPAY=\"grabpay\",t.BANCONTACT=\"bancontact\",t.IDEAL=\"ideal\",t.ALIPAY=\"alipay\",t.KLARNA=\"klarna\",t.OCS=\"optimized_checkout\",t.CHECKOUT_SESSION=\"checkout_session\"}(M||(M={})),function(t){t.NEVER=\"never\",t.AUTO=\"auto\",t.ALWAYS=\"always\",t.PAYMENT=\"payment\",t.IF_REQUIRED=\"if_required\"}(N||(N={})),function(t){t.V3=\"v3\",t.ACACIA=\"acacia\",t.BASIL=\"basil\",t.CLOVER=\"clover\"}(z||(z={})),function(t){t.PAYMENT=\"payment\",t.AUTHENTICATION=\"linkAuthentication\",t.SHIPPING=\"address\",t.EXPRESS_CHECKOUT=\"expressCheckout\"}(D||(D={})),function(t){t.REQUIRES_PAYMENT_METHOD=\"requires_payment_method\",t.REQUIRES_CONFIRMATION=\"requires_confirmation\",t.REQUIRES_ACTION=\"requires_action\",t.PROCESSING=\"processing\",t.SUCCEEDED=\"succeeded\",t.CANCELED=\"canceled\"}(U||(U={})),function(t){t.CLICK=\"click\",t.CHANGE=\"change\",t.READY=\"ready\",t.SHIPPING_ADDRESS_CHANGE=\"shippingaddresschange\",t.SHIPPING_RATE_CHANGE=\"shippingratechange\",t.CONFIRM=\"confirm\",t.CANCEL=\"cancel\",t.LOADER_START=\"loaderstart\"}(L||(L={})),function(t){t.ON_SESSION=\"on_session\",t.OFF_SESSION=\"off_session\"}(B||(B={}));var F=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class V{constructor(t,e=window){this.scriptLoader=t,this.stripeWindow=e}getStripeClient(t,e,n,r,i){return F(this,void 0,void 0,function*(){if(this.stripeWindow.bcStripeClient)return this.stripeWindow.bcStripeClient;const o=yield this.load(n),{stripePublishableKey:a,stripeConnectedAccount:s}=t,u=o(a,Object.assign(Object.assign(Object.assign(Object.assign({},s?{stripeAccount:s}:{}),e?{locale:e}:{}),r?{betas:r}:{}),i?{apiVersion:i}:{}));return Object.assign(this.stripeWindow,{bcStripeClient:u}),u})}getElements(t,e){return F(this,void 0,void 0,function*(){let n=this.stripeWindow.bcStripeElements;return n?yield this.updateStripeElements(e):(n=t.elements(e),Object.assign(this.stripeWindow,{bcStripeElements:n})),n})}updateStripeElements(t){return F(this,void 0,void 0,function*(){const e=this.stripeWindow.bcStripeElements;e&&(e.update(t),yield e.fetchUpdates())})}getStripeCheckout(t,e){return F(this,void 0,void 0,function*(){let n=yield this.getStoredStripeCheckout(e);return n||(n=yield t.initCheckout(e),Object.assign(this.stripeWindow,{bcStripeCheckout:n})),n})}load(t){return F(this,void 0,void 0,function*(){if(!this.stripeWindow.Stripe&&(yield this.scriptLoader.loadScript(this.getScriptUrl(t)),!this.stripeWindow.Stripe))throw new P;return this.stripeWindow.Stripe})}getScriptUrl(t){return t&&t!==z.V3?`https://js.stripe.com/${t}/stripe.js`:\"https://js.stripe.com/v3/\"}getStoredStripeCheckout(t){return F(this,void 0,void 0,function*(){const e=this.stripeWindow.bcStripeCheckout;if(e)try{const{actions:n,error:r}=yield e.loadActions();if(r||!n)return void this.logErrorToConsole(r);const i=yield n.getSession(),o=t.clientSecret.split(\"_secret_\")[0];if(i.id===o)return e}catch(t){return void this.logErrorToConsole(t)}})}logErrorToConsole(t){t?console.error(t):console.error(\"No stripe checkout actions available on loadActions().\")}}class q extends s{constructor(t){super(t||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}var W=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class ${constructor(t,e){this.paymentIntegrationService=t,this.scriptLoader=e,this.isMounted=!1}deinitialize(){var t;null===(t=this.checkoutEventsUnsubscribe)||void 0===t||t.call(this),this.isMounted=!1}initCheckoutEventsSubscription(t,e,n,r){this.checkoutEventsUnsubscribe=this.paymentIntegrationService.subscribe(()=>W(this,void 0,void 0,function*(){var i;const o=null==r?void 0:r.getElement(D.PAYMENT);if(o){try{yield this.updateStripePaymentIntent(t,e)}catch(t){return this.isMounted&&(o.unmount(),this.isMounted=!1),void(t instanceof Error&&(null===(i=n.onError)||void 0===i||i.call(n,t)))}this.isMounted||(yield null==r?void 0:r.fetchUpdates(),this.mountElement(o,n.containerId))}}),t=>{var e;return null===(e=t.getCheckout())||void 0===e?void 0:e.outstandingBalance},t=>{var e;return null===(e=t.getCheckout())||void 0===e?void 0:e.coupons})}mountElement(t,e){document.getElementById(e)&&(t.mount(`#${e}`),this.isMounted=!0)}mapAppearanceVariables(t){return{colorPrimary:t.fieldInnerShadow,colorBackground:t.fieldBackground,colorText:t.labelText,colorDanger:t.fieldErrorText,colorTextSecondary:t.labelText,colorTextPlaceholder:t.fieldPlaceholderText,colorIcon:t.fieldPlaceholderText}}mapInputAppearanceRules(t){return{borderColor:t.fieldBorder,color:t.fieldText,boxShadow:t.fieldInnerShadow}}throwStripeError(t){if(\"object\"==typeof(e=t)&&null!==e&&\"type\"in e&&(this.throwDisplayableStripeError(t),this.isCancellationError(t)))throw new y;var e;throw new q}throwDisplayableStripeError(t){if((0,a.includes)([\"card_error\",\"invalid_request_error\",\"validation_error\"],t.type))throw new Error(t.message)}isCancellationError(t){var e;const n=null===(e=null==t?void 0:t.payment_intent.last_payment_error)||void 0===e?void 0:e.message;return!!n&&-1!==n.indexOf(\"canceled\")}throwPaymentConfirmationProceedMessage(){throw new q(\"We've received your order and are processing your payment. Once the payment is verified, your order will be completed. We will send you an email when it's completed. Please note, this process may take a few minutes depending on the processing times of your chosen method.\")}isPaymentCompleted(t,e){return W(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),r=n.getPaymentMethodOrThrow(t),{features:i}=n.getStoreConfigOrThrow().checkoutSettings;if(!r.clientToken||!e||!i[\"PI-626.Block_unnecessary_payment_confirmation_for_StripeUPE\"])return!1;const{paymentIntent:o}=yield e.retrievePaymentIntent(r.clientToken);return(null==o?void 0:o.status)===U.SUCCEEDED})}mapStripePaymentData(t,e,n=!1){const r=this.paymentIntegrationService.getState().getBillingAddress(),{firstName:a=\"\",lastName:s=\"\",email:u=\"\"}=r||{},c=this.mapStripeAddress(r);if(!t)throw new f(o.PaymentNotInitialized);if(!(u&&c&&c.city&&c.country&&a&&s))throw new p(i.MissingBillingAddress);return{elements:t,redirect:N.IF_REQUIRED,confirmParams:Object.assign({payment_method_data:Object.assign(Object.assign({},n?{allow_redisplay:\"always\"}:{}),{billing_details:{email:u,address:c,name:this.getShopperFullName(r)}})},e&&{return_url:e})}}isAdditionalActionError(t){return(0,a.some)(t,{code:\"additional_action_required\"})}isRedirectAction(t){const{type:e,data:{redirect_url:n}}=t;return\"redirect_to_url\"===e&&!!n}isOnPageAdditionalAction(t){const{type:e,data:{token:n}}=t;return\"additional_action_requires_payment_method\"===e&&!!n}updateStripePaymentIntent(t,e){return W(this,void 0,void 0,function*(){const n=yield this.paymentIntegrationService.loadPaymentMethod(t,{params:{method:e}}),{clientToken:r}=n.getPaymentMethodOrThrow(e);r&&this.scriptLoader.updateStripeElements({clientSecret:r})})}getStripeJsVersion(t){return t.useNewStripeJsVersion?z.CLOVER:z.V3}mapStripeAddress(t){if(t){const{city:e,address1:n,address2:r,countryCode:i,postalCode:o,stateOrProvinceCode:a}=t;return Object.assign({city:e,country:i,postal_code:o,line1:n,line2:r},a?{state:a}:{})}throw new p(i.MissingBillingAddress)}getShopperFullName(t){const{firstName:e=\"\",lastName:n=\"\"}=t||{};return`${e} ${n}`.trim()}verifyCheckoutSpamProtection(){return W(this,void 0,void 0,function*(){const{shouldExecuteSpamCheck:t}=this.paymentIntegrationService.getState().getCheckoutOrThrow();t&&(yield this.paymentIntegrationService.verifyCheckoutSpamProtection())})}}const H={body:{},headers:{},status:0};class G extends s{constructor(t,{message:e,errors:n}={}){const{body:r,headers:i,status:o}=t||H;super(e||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=i,this.status=o,this.errors=n||[]}}function K(t){return\"object\"==typeof t&&null!==t&&\"initializationData\"in t&&void 0!==t.initializationData&&null!==t.initializationData&&\"object\"==typeof t.initializationData&&\"stripePublishableKey\"in t.initializationData&&\"stripeConnectedAccount\"in t.initializationData&&\"shopperLanguage\"in t.initializationData&&void 0!==t.initializationData.stripePublishableKey&&void 0!==t.initializationData.stripeConnectedAccount&&void 0!==t.initializationData.shopperLanguage}const J={ar:[\"ar\"],bg:[\"bg\"],cs:[\"cs\"],da:[\"da\"],de:[\"de\"],el:[\"el\"],en:[\"en\",\"en-GB\"],es:[\"es\",\"es-419\"],et:[\"et\"],fi:[\"fi\"],fil:[\"fil\"],fr:[\"fr\",\"fr-CA\"],he:[\"he\"],hr:[\"hr\"],hu:[\"hu\"],id:[\"id\"],it:[\"it\"],ja:[\"ja\"],ko:[\"ko\"],lt:[\"lt\"],lv:[\"lv\"],ms:[\"ms\"],mt:[\"mt\"],nb:[\"nb\"],nl:[\"nl\"],pl:[\"pl\"],pt:[\"pt\",\"pt-BR\"],ro:[\"ro\"],ru:[\"ru\"],sk:[\"sk\"],sl:[\"sl\"],sv:[\"sv\"],th:[\"th\"],tr:[\"tr\"],vi:[\"vi\"],zh:[\"zh\",\"zh-HK\",\"zh-TW\"]};function Y(t){const[e,n]=t.replace(/_/g,\"-\").toLowerCase().split(\"-\"),r=J[e];if(!r)return\"auto\";const i=n?`${e}-${n.toUpperCase()}`:e;return r.indexOf(i)>-1?i:r[0]}const Z=[\"payment_element_beta_2\",\"alipay_pm_beta_1\",\"link_default_integration_beta_1\",\"shipping_address_element_beta_1\",\"address_element_beta_1\"],Q=\"2020-03-02;alipay_beta=v1;link_beta=v1\";function X(t){return\"stripeLinkAuthenticationState\"in t}var tt=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class et{constructor(t,e,n){this.paymentIntegrationService=t,this.scriptLoader=e,this.stripeIntegrationService=n}initialize(t){return tt(this,void 0,void 0,function*(){const{stripeupe:e,methodId:n,gatewayId:r}=t;if(!(null==e?void 0:e.containerId))throw new f(o.PaymentNotInitialized);if(!r)throw new u('Unable to initialize payment because \"gatewayId\" argument is not provided.');return this._loadStripeElement(e,r,n).catch(t=>{var n;return null===(n=e.onError)||void 0===n?void 0:n.call(e,t)}),this.stripeIntegrationService.initCheckoutEventsSubscription(r,n,e,this._stripeElements),Promise.resolve()})}execute(t,e){return tt(this,void 0,void 0,function*(){const{payment:n}=t,r=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]);if(!n||!n.paymentData)throw new c([\"payment.paymentData\"]);if(!this._stripeUPEClient)throw new f(o.PaymentNotInitialized);const{paymentData:i,methodId:a,gatewayId:s}=n,{shouldSaveInstrument:u=!1,shouldSetAsDefaultInstrument:p=!1}=l(i)?i:{},h=this.paymentIntegrationService.getState(),{isStoreCreditApplied:v}=h.getCheckoutOrThrow(),y=h.getPaymentProviderCustomerOrThrow(),m=(X(y)?y:{}).stripeLinkAuthenticationState;if(v&&(yield this.paymentIntegrationService.applyStoreCredit(v)),s){yield this.stripeIntegrationService.updateStripePaymentIntent(s,a);const{email:t}=h.getCustomerOrThrow();if(void 0!==m&&!t){const t=h.getBillingAddressOrThrow();yield this.paymentIntegrationService.updateBillingAddress(t)}}if(yield this.paymentIntegrationService.submitOrder(r,e),d(i)){const{instrumentId:t}=i;return void(yield this._executeWithVaulted(n.methodId,t,p))}yield this._executeWithStripeConfirmation(n.methodId,n.gatewayId,!m&&u,p)})}finalize(){return Promise.reject(new h)}deinitialize(){var t,e;return null===(e=null===(t=this._stripeElements)||void 0===t?void 0:t.getElement(D.PAYMENT))||void 0===e||e.unmount(),this.stripeIntegrationService.deinitialize(),this._stripeElements=void 0,this._stripeUPEClient=void 0,Promise.resolve()}_executeWithStripeConfirmation(t,e,n,r){return tt(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),{clientToken:o}=i.getPaymentMethodOrThrow(t),a=this._getPaymentPayload(t,o||\"\",n,r);try{yield this.paymentIntegrationService.submitPayment(a)}catch(i){yield this._processAdditionalActionWithStripeConfirmation(i,t,e,n,r)}})}_executeWithVaulted(t,e,n){var r;return tt(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),o=i.getPaymentMethodOrThrow(t),a=null===(r=i.getCart())||void 0===r?void 0:r.id;try{const r={methodId:t,paymentData:{formattedPayload:{cart_id:a,bigpay_token:{token:e},confirm:!1,client_token:o.clientToken,set_as_default_stored_instrument:n}}};return yield this.paymentIntegrationService.submitPayment(r)}catch(e){return this._processVaultedAdditionalAction(e,t,n)}})}_loadStripeElement(t,e,n){return tt(this,void 0,void 0,function*(){const{containerId:r,style:o,render:a,initStripeElementUpdateTrigger:s}=t,u=yield this.paymentIntegrationService.loadPaymentMethod(e,{params:{method:n}}),c=u.getPaymentMethodOrThrow(n);if(!K(c))throw new p(i.MissingPaymentMethod);const{clientToken:l,initializationData:d}=c,{shopperLanguage:h,allowRedisplayForStoredInstruments:f=!1,enableLink:v}=d;if(this._allowRedisplayForStoredInstruments=f,!l)throw new p(i.MissingPaymentMethod);let y;if(this._stripeUPEClient=yield this._loadStripeJs(d),this._isStripeElementUpdateEnabled=\"function\"==typeof s,o){const t=o;y={variables:this.stripeIntegrationService.mapAppearanceVariables(o),rules:{\".Input\":this.stripeIntegrationService.mapInputAppearanceRules(t)}}}this._stripeElements=yield this.scriptLoader.getElements(this._stripeUPEClient,{clientSecret:l,locale:Y(h),appearance:y});const{getBillingAddress:m,getShippingAddress:g}=u,{postalCode:_}=g()||m()||{},S=this._stripeElements.getElement(D.PAYMENT)||this._stripeElements.create(D.PAYMENT,Object.assign({fields:{billingDetails:{email:N.NEVER,address:{country:N.NEVER,city:N.NEVER,postalCode:_?N.NEVER:N.AUTO}}},wallets:{applePay:N.NEVER,googlePay:N.NEVER,link:v?N.AUTO:N.NEVER}},this._getStripeElementTerms()));this.stripeIntegrationService.mountElement(S,r),S.on(L.READY,()=>{a()}),S.on(L.CHANGE,t=>{(null==t?void 0:t.value)&&\"type\"in t.value&&this._updateStripeLinkStateByElementType(t.value.type)}),this._isStripeElementUpdateEnabled&&(null==s||s(this._updateStripeElement.bind(this)))})}_processAdditionalActionWithStripeConfirmation(t,e,n,r=!1,i=!1){return tt(this,void 0,void 0,function*(){if(!v(t)||!this.stripeIntegrationService.isAdditionalActionError(t.body.errors))throw t;if(!this._stripeUPEClient||!this._stripeElements)throw new f(o.PaymentNotInitialized);const{data:s}=t.body.additional_action_required,{token:u}=s,{paymentIntent:c,error:l}=yield this._confirmStripePaymentOrThrow(e,s),d=this._getPaymentPayload(e,(null==c?void 0:c.id)||u,r,i);if(l||!c){const{initializationData:t}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,n),{sendSecondPaymentRequestOnStripeError:r}=t||{};if(r)try{const t=(0,a.merge)({},d,{paymentData:{formattedPayload:{client_side_error:!0}}});yield this.paymentIntegrationService.submitPayment(t)}catch(t){}this.stripeIntegrationService.throwStripeError(l)}try{yield this.paymentIntegrationService.submitPayment(d)}catch(t){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}})}_confirmStripePaymentOrThrow(t,e){return tt(this,void 0,void 0,function*(){if(!this._stripeUPEClient)throw new f(o.PaymentNotInitialized);const{token:n,redirect_url:r}=e,i=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,r,!!this._allowRedisplayForStoredInstruments);return(yield this.stripeIntegrationService.isPaymentCompleted(t,this._stripeUPEClient))?this._stripeUPEClient.retrievePaymentIntent(n||\"\"):this._stripeUPEClient.confirmPayment(i)})}_processVaultedAdditionalAction(t,e,n=!1){var r;return tt(this,void 0,void 0,function*(){if(!e||!v(t)||!(0,a.some)(t.body.errors,{code:\"three_d_secure_required\"}))throw t;if(!this._stripeUPEClient||!this._stripeElements)throw new f(o.PaymentNotInitialized);const i=t.body.three_ds_result.token;let s,u=!1;try{s=yield this._stripeUPEClient.confirmCardPayment(i)}catch(t){try{s=yield this._stripeUPEClient.retrievePaymentIntent(i)}catch(t){u=!0}}if((null==s?void 0:s.error)&&this.stripeIntegrationService.throwStripeError(s.error),!(null==s?void 0:s.paymentIntent)&&!u)throw new G;const c=this._getPaymentPayload(e,u?i:null===(r=null==s?void 0:s.paymentIntent)||void 0===r?void 0:r.id,!1,n);return this.paymentIntegrationService.submitPayment(c)})}_loadStripeJs(t){return tt(this,void 0,void 0,function*(){if(this._stripeUPEClient)return this._stripeUPEClient;const e=this.paymentIntegrationService.getState();return this.scriptLoader.getStripeClient(t,e.getCartLocale(),z.V3,Z,Q)})}_getPaymentPayload(t,e,n=!1,r=!1){var i;return{methodId:t,paymentData:{formattedPayload:{cart_id:(null===(i=this.paymentIntegrationService.getState().getCart())||void 0===i?void 0:i.id)||\"\",credit_card_token:{token:e},confirm:!1,vault_payment_instrument:n,set_as_default_stored_instrument:r}}}}_updateStripeElement({shouldShowTerms:t}){var e;const n=null===(e=this._stripeElements)||void 0===e?void 0:e.getElement(D.PAYMENT);null==n||n.update(Object.assign({},this._getStripeElementTerms(t)))}_getStripeElementTerms(t){let e=N.AUTO;return this._isStripeElementUpdateEnabled&&(e=t?N.AUTO:N.NEVER),{terms:{card:e}}}_updateStripeLinkStateByElementType(t){const e=this.paymentIntegrationService.getState().getPaymentProviderCustomerOrThrow(),n=t===M.Link;!X(e)&&n&&this.paymentIntegrationService.updatePaymentProviderCustomer({stripeLinkAuthenticationState:n})}}const nt=e(e=>{const n=new V((0,t.vQ)());return new et(e,n,new $(e,n))},[{gateway:\"stripeupe\"},{gateway:\"stripeupe\",id:\"klarna\"}]),rt=t=>\"object\"==typeof t&&null!==t&&\"value\"in t&&\"collapsed\"in t;var it=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class ot{constructor(t,e,n){this.paymentIntegrationService=t,this.scriptLoader=e,this.stripeIntegrationService=n}initialize(t){var e;return it(this,void 0,void 0,function*(){const{stripeocs:n,methodId:r,gatewayId:i}=t;if(!(null==n?void 0:n.containerId))throw new f(o.PaymentNotInitialized);if(!i)throw new u('Unable to initialize payment because \"gatewayId\" argument is not provided.');try{yield this._initializeStripeElement(n,i,r)}catch(t){t instanceof Error&&(null===(e=n.onError)||void 0===e||e.call(n,t))}this.stripeIntegrationService.initCheckoutEventsSubscription(i,r,n,this.stripeElements)})}execute(t,e){return it(this,void 0,void 0,function*(){const{payment:n}=t,r=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]),{methodId:i,gatewayId:a}=n||{};if(!this.stripeClient)throw new f(o.PaymentNotInitialized);if(!a||!i)throw new u('Unable to initialize payment because \"gatewayId\" or \"methodId\" argument is not provided.');const{isStoreCreditApplied:s}=this.paymentIntegrationService.getState().getCheckoutOrThrow();s&&(yield this.paymentIntegrationService.applyStoreCredit(s)),yield this.stripeIntegrationService.updateStripePaymentIntent(a,i),yield this.paymentIntegrationService.submitOrder(r,e);const{clientToken:c}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i,a),l=this._getPaymentPayload(i,c||\"\");try{yield this.paymentIntegrationService.submitPayment(l)}catch(t){yield this._processAdditionalAction(t,i,a)}})}finalize(){return Promise.reject(new h)}deinitialize(){var t;const e=null===(t=this.stripeElements)||void 0===t?void 0:t.getElement(D.PAYMENT);return null==e||e.unmount(),null==e||e.destroy(),this.stripeIntegrationService.deinitialize(),this.stripeElements=void 0,this.stripeClient=void 0,Promise.resolve()}_initializeStripeElement(t,e,n){return it(this,void 0,void 0,function*(){let r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,e);if((null==r?void 0:r.clientToken)||(r=(yield this.paymentIntegrationService.loadPaymentMethod(e,{params:{method:n}})).getPaymentMethodOrThrow(n,e)),!K(r))throw new p(i.MissingPaymentMethod);const{clientToken:o,initializationData:a}=r,{customerSessionToken:s,enableLink:u}=a;if(!o)throw new p(i.MissingPaymentMethod);this.stripeClient=yield this._loadStripeJs(a);const{appearance:c,containerId:l,fonts:d,layout:h,render:f,paymentMethodSelect:v,handleClosePaymentMethod:y,togglePreloader:m}=t;this.stripeElements=yield this.scriptLoader.getElements(this.stripeClient,{clientSecret:o,customerSessionClientSecret:s,appearance:c,fonts:d});const{getBillingAddress:g,getShippingAddress:_}=this.paymentIntegrationService.getState(),S=g(),{postalCode:b}=_()||S||{},w=this.stripeElements.getElement(D.PAYMENT)||this.stripeElements.create(D.PAYMENT,{fields:{billingDetails:{email:N.NEVER,address:{country:N.NEVER,city:N.NEVER,postalCode:b?N.NEVER:N.AUTO}}},wallets:{applePay:N.NEVER,googlePay:N.NEVER,link:u?N.AUTO:N.NEVER},layout:h,savePaymentMethod:{maxVisiblePaymentMethods:20},defaultValues:{billingDetails:{email:(null==S?void 0:S.email)||\"\"}}});this.stripeIntegrationService.mountElement(w,l),w.on(L.LOADER_START,()=>{null==m||m(!1)}),w.on(L.READY,()=>{f()}),w.on(L.CHANGE,t=>{this._onStripeElementChange(t,e,n,v)}),null==y||y(this._collapseStripeElement.bind(this))})}_loadStripeJs(t){return it(this,void 0,void 0,function*(){if(this.stripeClient)return this.stripeClient;const e=this.paymentIntegrationService.getState(),n=this.stripeIntegrationService.getStripeJsVersion(t);return this.scriptLoader.getStripeClient(t,e.getCartLocale(),n)})}_collapseStripeElement(){var t;const e=null===(t=this.stripeElements)||void 0===t?void 0:t.getElement(D.PAYMENT);null==e||e.collapse()}_getPaymentPayload(t,e,n){var r;const i=(null===(r=this.paymentIntegrationService.getState().getCart())||void 0===r?void 0:r.id)||\"\",{card:o,us_bank_account:a}=n||{},s=this._shouldSaveInstrument(o)||this._shouldSaveInstrument(a),u=this._getTokenizedOptions(e,n);return{methodId:t,paymentData:{formattedPayload:Object.assign({cart_id:i,confirm:!1,method:this.selectedMethodId,vault_payment_instrument:s},u)}}}_processAdditionalAction(t,e,n){return it(this,void 0,void 0,function*(){if(!v(t)||!this.stripeIntegrationService.isAdditionalActionError(t.body.errors))throw t;if(!this.stripeClient||!this.stripeElements)throw new f(o.PaymentNotInitialized);const{data:r}=t.body.additional_action_required,{token:i}=r,{paymentIntent:s,error:u}=yield this._confirmStripePaymentOrThrow(e,r),{client_secret:c,payment_method_options:l}=s||{},d=this._getPaymentPayload(e,c||i,l);if(u||!s){const{initializationData:t}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,n),{sendSecondPaymentRequestOnStripeError:r}=t||{};if(r)try{const t=(0,a.merge)({},d,{paymentData:{formattedPayload:{client_side_error:!0}}});yield this.paymentIntegrationService.submitPayment(t)}catch(t){}this.stripeIntegrationService.throwStripeError(u)}try{return yield this.paymentIntegrationService.submitPayment(d)}catch(t){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}})}_confirmStripePaymentOrThrow(t,e){return it(this,void 0,void 0,function*(){if(!this.stripeClient)throw new f(o.PaymentNotInitialized);const{token:n,redirect_url:r}=e,i=this.stripeIntegrationService.mapStripePaymentData(this.stripeElements,r);return(yield this.stripeIntegrationService.isPaymentCompleted(t,this.stripeClient))?this.stripeClient.retrievePaymentIntent(n||\"\"):this.stripeClient.confirmPayment(i)})}_onStripeElementChange(t,e,n,r){rt(t)&&!t.collapsed&&(this.selectedMethodId=t.value.type,null==r||r(`${e}-${n}`))}_shouldSaveInstrument(t){const e=null==t?void 0:t.setup_future_usage;return e===B.ON_SESSION||e===B.OFF_SESSION}_getTokenizedOptions(t,e){return this._shouldSaveInstrument(null==e?void 0:e.us_bank_account)?{tokenized_ach:{token:t}}:{credit_card_token:{token:t}}}}const at=e(e=>{const n=new V((0,t.vQ)());return new ot(e,n,new $(e,n))},[{gateway:\"stripeocs\",id:\"optimized_checkout\"}]);var st=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class ut{constructor(t,e,n){this.paymentIntegrationService=t,this.scriptLoader=e,this.stripeIntegrationService=n}initialize(t){var e;return st(this,void 0,void 0,function*(){const{stripeocs:n,methodId:r,gatewayId:i}=t;if(!(null==n?void 0:n.containerId)||!i)throw new f(o.PaymentNotInitialized);let a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r,i);(null==a?void 0:a.clientToken)||(yield this.paymentIntegrationService.loadPaymentMethod(i,{params:{method:r}}),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r,i));try{yield this._initStripeCheckoutSession(n,a),yield this._updateStripeShopperData(),this._initializePaymentElement(n,a),this._initializeAdaptivePricingElement(n,a)}catch(t){t instanceof Error&&(null===(e=n.onError)||void 0===e||e.call(n,t))}})}execute(t,e){return st(this,void 0,void 0,function*(){const{payment:n}=t,r=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(n[r[i]]=t[r[i]])}return n}(t,[\"payment\"]),{methodId:i,gatewayId:a}=n||{};if(!this.stripeClient)throw new f(o.PaymentNotInitialized);if(!a||!i)throw new u('Unable to initialize payment because \"gatewayId\" or \"methodId\" argument is not provided.');const s=this.paymentIntegrationService.getState(),{isStoreCreditApplied:c}=s.getCheckoutOrThrow();c&&(yield this.paymentIntegrationService.applyStoreCredit(c)),yield this._updateCheckoutSessionData(a,i),yield this.paymentIntegrationService.submitOrder(r,e);const{clientToken:l}=s.getPaymentMethodOrThrow(i,a),d=this._getPaymentPayload(i,l||\"\");try{yield this.paymentIntegrationService.submitPayment(d)}catch(t){yield this._processAdditionalAction(t,a,i)}})}finalize(){return Promise.reject(new h)}deinitialize(){var t,e;const n=null===(t=this.stripeCheckout)||void 0===t?void 0:t.getPaymentElement(),r=null===(e=this.stripeCheckout)||void 0===e?void 0:e.getCurrencySelectorElement();return null==n||n.unmount(),null==n||n.destroy(),null==r||r.unmount(),null==r||r.destroy(),this.stripeCheckout=void 0,this.stripeClient=void 0,this.selectedMethodId=void 0,Promise.resolve()}_initStripeCheckoutSession(t,e){return st(this,void 0,void 0,function*(){const{clientToken:n,initializationData:r}=e;if(!n||!r)throw new p(i.MissingPaymentMethod);this.stripeClient=yield this._loadStripeJs(r);const{appearance:o,fonts:a}=t;this.stripeCheckout=yield this.scriptLoader.getStripeCheckout(this.stripeClient,{clientSecret:n,elementsOptions:{appearance:o,fonts:a},adaptivePricing:{allowed:!!(null==r?void 0:r.adaptivePricingEnabled)}})})}_initializePaymentElement(t,e){const{initializationData:n,id:r,gateway:i}=e,{enableLink:a}=n||{},{containerId:s,layout:u,render:c,paymentMethodSelect:l,handleClosePaymentMethod:d,togglePreloader:p}=t,h=this._getStripeElement({fields:{billingDetails:{email:N.NEVER,name:N.NEVER,address:N.NEVER}},wallets:{applePay:N.NEVER,googlePay:N.NEVER,link:a?N.AUTO:N.NEVER},layout:u});if(!h||!i)throw new f(o.PaymentNotInitialized);this.stripeIntegrationService.mountElement(h,s),h.on(L.LOADER_START,()=>{null==p||p(!1)}),h.on(L.READY,()=>{c()}),h.on(L.CHANGE,t=>{this._onStripeElementChange(t,i,r,l)}),null==d||d(this._collapseStripeElement.bind(this))}_loadStripeJs(t){return st(this,void 0,void 0,function*(){if(this.stripeClient)return this.stripeClient;const e=this.paymentIntegrationService.getState();return this.scriptLoader.getStripeClient(t,e.getCartLocale(),z.CLOVER)})}_getStripeActionsOrThrow(){return st(this,void 0,void 0,function*(){if(!this.stripeCheckout)throw new f(o.PaymentNotInitialized);const{actions:t,error:e}=yield this.stripeCheckout.loadActions();if(!t||e)throw new q(null==e?void 0:e.message);return t})}_getStripeElement(t){var e,n;return(null===(e=this.stripeCheckout)||void 0===e?void 0:e.getPaymentElement())||(null===(n=this.stripeCheckout)||void 0===n?void 0:n.createPaymentElement(t))}_onStripeElementChange(t,e,n,r){rt(t)&&!t.collapsed&&(this.selectedMethodId=t.value.type,null==r||r(`${e}-${n}`))}_collapseStripeElement(){var t;const e=null===(t=this.stripeCheckout)||void 0===t?void 0:t.getPaymentElement();null==e||e.collapse()}_updateCheckoutSessionData(t,e){return st(this,void 0,void 0,function*(){yield this._updateStripeShopperData(),yield this.paymentIntegrationService.loadPaymentMethod(t,{params:{method:e}})})}_getPaymentPayload(t,e,n){var r;const i=(null===(r=this.paymentIntegrationService.getState().getCart())||void 0===r?void 0:r.id)||\"\",o=this._getTokenizedOptions(e,n);return{methodId:t,paymentData:{formattedPayload:Object.assign({cart_id:i,confirm:!1,method:this.selectedMethodId,vault_payment_instrument:!!n},o)}}}_processAdditionalAction(t,e,n){var r;return st(this,void 0,void 0,function*(){if(!v(t)||!this.stripeIntegrationService.isAdditionalActionError(t.body.errors))throw t;const{data:i}=(null===(r=t.body)||void 0===r?void 0:r.additional_action_required)||{},{token:o}=i||{},s=yield this._getStripeSavedPaymentMethodsOrThrow(),{session:u,error:c}=yield this._confirmStripePayment(i),l=yield this._getStripeSavedPaymentMethodsOrThrow(u),{id:d,status:p}=u||{},h=this._getNewVaultedStripeInstrument(s,l),f=this._getPaymentPayload(n,d||o,h),{initializationData:y}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,e),{sendSecondPaymentRequestOnStripeError:m}=y||{};if(c||!u){if(m)try{const t=(0,a.merge)({},f,{paymentData:{formattedPayload:{client_side_error:!0}}});yield this.paymentIntegrationService.submitPayment(t)}catch(t){}throw new q(null==c?void 0:c.message)}try{return yield this.paymentIntegrationService.submitPayment(f)}catch(t){throw(null==p?void 0:p.paymentStatus)===R.Paid&&this.stripeIntegrationService.throwPaymentConfirmationProceedMessage(),t}})}_confirmStripePayment(t){return st(this,void 0,void 0,function*(){const{redirect_url:e}=t||{};if(!this.stripeCheckout)throw new f(o.PaymentNotInitialized);return(yield this._getStripeActionsOrThrow()).confirm({redirect:N.IF_REQUIRED,returnUrl:e})})}_updateStripeShopperData(){return st(this,void 0,void 0,function*(){const t=yield this._getStripeActionsOrThrow();yield this._updateStripeEmail(t),yield this._updateStripeShippingAddress(t),yield this._updateStripeBillingAddress(t)})}_updateStripeEmail(t){return st(this,void 0,void 0,function*(){if((yield t.getSession()).email)return;const{getBillingAddress:e}=this.paymentIntegrationService.getState(),n=e();yield t.updateEmail((null==n?void 0:n.email)||\"\")})}_updateStripeShippingAddress(t){return st(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getShippingAddress();e&&(yield t.updateShippingAddress({name:this.stripeIntegrationService.getShopperFullName(e),address:this.stripeIntegrationService.mapStripeAddress(e)}))})}_updateStripeBillingAddress(t){return st(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getBillingAddress();e&&(yield t.updateBillingAddress({name:this.stripeIntegrationService.getShopperFullName(e),address:this.stripeIntegrationService.mapStripeAddress(e)}))})}_getStripeSavedPaymentMethodsOrThrow(t){return st(this,void 0,void 0,function*(){if(null==t?void 0:t.savedPaymentMethods)return t.savedPaymentMethods;const e=yield this._getStripeActionsOrThrow(),{savedPaymentMethods:n}=yield e.getSession();return n||[]})}_getNewVaultedStripeInstrument(t,e){return e.find(e=>!t.some(t=>t.id===e.id))}_getTokenizedOptions(t,e){return(null==e?void 0:e.type)===M.ACH?{tokenized_ach:{token:t}}:{credit_card_token:{token:t}}}_initializeAdaptivePricingElement(t,e){const{initializationData:n}=e,{currencySelectorContainerId:r}=t;if(!(null==n?void 0:n.adaptivePricingEnabled))return;if(!r)throw new f(o.PaymentNotInitialized);const i=this._getCurrencySelectorElement();i&&(i.mount(`#${r}`),this._initAdaptivePricingEvents(i))}_getCurrencySelectorElement(){var t,e;return(null===(t=this.stripeCheckout)||void 0===t?void 0:t.getCurrencySelectorElement())||(null===(e=this.stripeCheckout)||void 0===e?void 0:e.createCurrencySelectorElement())}_initAdaptivePricingEvents(t){t.on(L.CHANGE,t=>st(this,void 0,void 0,function*(){if(!t.value||!(\"currency\"in t.value))return;const{currency:e}=this.paymentIntegrationService.getState().getCartOrThrow(),n=e.code.toLowerCase(),r=t.value.currency.toLowerCase();yield this.paymentIntegrationService.updatePaymentProviderCustomer({isCustomerCurrencySelected:n!==r,customerCurrency:r})}))}}const ct=e(e=>{const n=new V((0,t.vQ)());return new ut(e,n,new $(e,n))},[{gateway:\"stripeocs\",id:\"checkout_session\"}]);class lt{constructor(t,e){this.paymentIntegrationService=t,this.scriptLoader=e}initialize(t){var e,n,r,o,a;return n=this,r=void 0,a=function*(){let n;if(!t.stripeupe)throw new u('Unable to proceed because \"options\" argument is not provided.');const{container:r,gatewayId:o,methodId:a,onEmailChange:s,getStyles:c,isLoading:l}=t.stripeupe;Object.entries(t.stripeupe).forEach(([t,e])=>{if(!e)throw new u(`Unable to proceed because \"${t}\" argument is not provided.`)}),yield this.paymentIntegrationService.loadPaymentMethod(o,{params:{method:a}});const d=this.paymentIntegrationService.getState(),h=d.getPaymentMethodOrThrow(a,o),{clientToken:f}=h;if(!K(h)||!f)throw new p(i.MissingPaymentToken);const{email:v}=d.getCustomerOrThrow(),y=d.getPaymentProviderCustomerOrThrow(),m=(X(y)?y:{}).stripeLinkAuthenticationState;if(!v){let t;const o=\"function\"==typeof c&&c();t=o?{variables:{colorPrimary:o.fieldInnerShadow,colorBackground:o.fieldBackground,colorText:o.labelText,colorDanger:o.fieldErrorText,colorTextSecondary:o.labelText,colorTextPlaceholder:o.fieldPlaceholderText},rules:{\".Input\":{borderColor:o.fieldBorder,color:o.fieldText,boxShadow:o.fieldInnerShadow}}}:{},n=yield this.scriptLoader.getStripeClient(h.initializationData,d.getCartLocale(),z.V3,Z,Q),this._stripeElements=yield this.scriptLoader.getElements(n,{clientSecret:f,appearance:t});const{getBillingAddress:a,getConsignments:u}=this.paymentIntegrationService.getState(),v=u(),y=null===(e=null==v?void 0:v[0])||void 0===e?void 0:e.id,{email:g}=a()||{},_=g?{defaultValues:{mode:k.SHIPPING,email:g}}:{},S=this._stripeElements.getElement(D.AUTHENTICATION)||this._stripeElements.create(D.AUTHENTICATION,_);S.on(L.CHANGE,t=>{if(!(\"authenticated\"in t))throw new p(i.MissingCustomer);this.paymentIntegrationService.updatePaymentProviderCustomer({stripeLinkAuthenticationState:t.authenticated}),t.complete?s(t.authenticated,t.value.email):s(!1,\"\"),l&&l(!1),void 0===m&&t.authenticated&&y&&this.paymentIntegrationService.deleteConsignment(y)}),S.mount(`#${r}`)}},new((o=void 0)||(o=Promise))(function(t,e){function i(t){try{u(a.next(t))}catch(t){e(t)}}function s(t){try{u(a.throw(t))}catch(t){e(t)}}function u(e){var n;e.done?t(e.value):(n=e.value,n instanceof o?n:new o(function(t){t(n)})).then(i,s)}u((a=a.apply(n,r||[])).next())})}deinitialize(){var t,e;return null===(e=null===(t=this._stripeElements)||void 0===t?void 0:t.getElement(D.AUTHENTICATION))||void 0===e||e.unmount(),Promise.resolve()}signIn(t,e){return this.paymentIntegrationService.signInCustomer(t,e),Promise.resolve()}signOut(t){return this.paymentIntegrationService.signOutCustomer(t),Promise.resolve()}executePaymentMethodCheckout(t){var e;return null===(e=null==t?void 0:t.continueWithCheckoutCallback)||void 0===e||e.call(t),Promise.resolve()}}const dt=e(e=>new lt(e,new V((0,t.vQ)())),[{id:\"stripeupe\"}]),pt={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},ht={position:\"fixed\",\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},ft=\"embedded-checkout-loading-indicator-rotation\";class vt{constructor(t){this.styles=Object.assign(Object.assign({},pt),t&&t.styles),this.containerStyles=Object.assign({},t&&t.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(t){if(t){const e=document.getElementById(t);if(!e)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");e.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const t=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",t)};this.container.addEventListener(\"transitionend\",t),this.container.style.opacity=\"0\"}buildContainer(){const t=document.createElement(\"div\");return t.style.display=\"block\",t.style.bottom=\"0\",t.style.left=\"0\",t.style.height=\"100%\",t.style.width=\"100%\",t.style.position=\"absolute\",t.style.right=\"0\",t.style.top=\"0\",t.style.transition=\"all 250ms ease-out\",t.style.opacity=\"0\",this.setStyleAttribute(t,this.containerStyles),t}buildIndicator(){const t=document.createElement(\"div\");return t.style.display=\"block\",t.style.width=`${this.styles.size}px`,t.style.height=`${this.styles.size}px`,t.style.borderRadius=`${this.styles.size}px`,t.style.border=\"solid 1px\",t.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,t.style.margin=\"0 auto\",t.style.position=\"absolute\",t.style.left=\"0\",t.style.right=\"0\",t.style.top=\"50%\",t.style.transform=\"translateY(-50%) rotate(0deg)\",t.style.transformStyle=\"preserve-3d\",t.style.animation=`${ft} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,t}setStyleAttribute(t,e){Object.keys(e).forEach(n=>{t.style.setProperty(n,e[n])})}defineAnimation(){var t;if(document.getElementById(ft))return;const e=document.createElement(\"style\");e.id=ft,null===(t=document.head)||void 0===t||t.appendChild(e),e.sheet instanceof CSSStyleSheet&&e.sheet.insertRule(`\\n                @keyframes ${ft} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}class yt{constructor(t){this._decimalPlaces=t}toInteger(t){return Math.round(t*Math.pow(10,this._decimalPlaces))}}const mt=[\"AC\",\"AD\",\"AE\",\"AF\",\"AG\",\"AI\",\"AL\",\"AM\",\"AO\",\"AQ\",\"AR\",\"AT\",\"AU\",\"AW\",\"AX\",\"AZ\",\"BA\",\"BB\",\"BD\",\"BE\",\"BF\",\"BG\",\"BH\",\"BI\",\"BJ\",\"BL\",\"BM\",\"BN\",\"BO\",\"BQ\",\"BR\",\"BS\",\"BT\",\"BV\",\"BW\",\"BY\",\"BZ\",\"CA\",\"CD\",\"CF\",\"CG\",\"CH\",\"CI\",\"CK\",\"CL\",\"CM\",\"CN\",\"CO\",\"CR\",\"CV\",\"CW\",\"CY\",\"CZ\",\"DE\",\"DJ\",\"DK\",\"DM\",\"DO\",\"DZ\",\"EC\",\"EE\",\"EG\",\"EH\",\"ER\",\"ES\",\"ET\",\"FI\",\"FJ\",\"FK\",\"FO\",\"FR\",\"GA\",\"GB\",\"GD\",\"GE\",\"GF\",\"GG\",\"GH\",\"GI\",\"GL\",\"GM\",\"GN\",\"GP\",\"GQ\",\"GR\",\"GS\",\"GT\",\"GU\",\"GW\",\"GY\",\"HK\",\"HN\",\"HR\",\"HT\",\"HU\",\"ID\",\"IE\",\"IL\",\"IM\",\"IN\",\"IO\",\"IQ\",\"IS\",\"IT\",\"JE\",\"JM\",\"JO\",\"JP\",\"KE\",\"KG\",\"KH\",\"KI\",\"KM\",\"KN\",\"KR\",\"KW\",\"KY\",\"KZ\",\"LA\",\"LB\",\"LC\",\"LI\",\"LK\",\"LR\",\"LS\",\"LT\",\"LU\",\"LV\",\"LY\",\"MA\",\"MC\",\"MD\",\"ME\",\"MF\",\"MG\",\"MK\",\"ML\",\"MM\",\"MN\",\"MO\",\"MQ\",\"MR\",\"MS\",\"MT\",\"MU\",\"MV\",\"MW\",\"MX\",\"MY\",\"MZ\",\"NA\",\"NC\",\"NE\",\"NG\",\"NI\",\"NL\",\"NO\",\"NP\",\"NR\",\"NU\",\"NZ\",\"OM\",\"PA\",\"PE\",\"PF\",\"PG\",\"PH\",\"PK\",\"PL\",\"PM\",\"PN\",\"PR\",\"PS\",\"PT\",\"PY\",\"QA\",\"RE\",\"RO\",\"RS\",\"RU\",\"RW\",\"SA\",\"SB\",\"SC\",\"SD\",\"SE\",\"SG\",\"SH\",\"SI\",\"SJ\",\"SK\",\"SL\",\"SM\",\"SN\",\"SO\",\"SR\",\"SS\",\"ST\",\"SV\",\"SX\",\"SZ\",\"TA\",\"TC\",\"TD\",\"TF\",\"TG\",\"TH\",\"TJ\",\"TK\",\"TL\",\"TM\",\"TN\",\"TO\",\"TR\",\"TT\",\"TV\",\"TW\",\"TZ\",\"UA\",\"UG\",\"US\",\"UY\",\"UZ\",\"VA\",\"VC\",\"VE\",\"VG\",\"VN\",\"VU\",\"WF\",\"WS\",\"XK\",\"YE\",\"YT\",\"ZA\",\"ZM\",\"ZW\",\"ZZ\"];var gt=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class _t{constructor(t,e,n,r){this.paymentIntegrationService=t,this.scriptLoader=e,this.stripeIntegrationService=n,this.loadingIndicator=r}initialize(t){return gt(this,void 0,void 0,function*(){const{stripeocs:e}=t||{};if(!e)throw new u('Unable to proceed because \"options\" argument is not provided.');const{gatewayId:n,container:r}=e;if(!r||!n)throw new f(o.PaymentNotInitialized);const a=this._getMethodId(n),s=yield this.paymentIntegrationService.loadPaymentMethod(n,{params:{method:a}}),c=s.getPaymentMethodOrThrow(a,n),{loadingContainerId:l,buttonHeight:d,onComplete:h}=e;if(this._loadingIndicatorContainer=l,this._onComplete=h,!K(c))throw new p(i.MissingPaymentMethod);const{initializationData:v}=c,{captureMethod:y}=v,m=this.stripeIntegrationService.getStripeJsVersion(v);this._captureMethod=y,this._stripeClient=yield this.scriptLoader.getStripeClient(v,s.getCartLocale(),m),yield this._mountExpressCheckoutElement(r,this._stripeClient,d),this._initializeEvents(a)})}signIn(){return Promise.resolve()}signOut(){return Promise.resolve()}executePaymentMethodCheckout(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_mountExpressCheckoutElement(t,e,n=40){return gt(this,void 0,void 0,function*(){const r=this._shouldRequireShippingAddress(),i=Object.assign(Object.assign(Object.assign({shippingAddressRequired:r},r?{allowedShippingCountries:yield this._getAvailableCountries()}:{}),r?{shippingRates:[{id:\"_\",amount:0,displayName:\"Pending rates\"}]}:{}),{billingAddressRequired:!0,emailRequired:!0,phoneNumberRequired:!0,paymentMethods:{link:N.AUTO,applePay:N.NEVER,googlePay:N.NEVER,amazonPay:N.NEVER,paypal:N.NEVER,klarna:N.NEVER},buttonHeight:n}),{cartAmount:o}=this.paymentIntegrationService.getState().getCartOrThrow(),a=Object.assign({mode:\"payment\",amount:this._toCents(o),currency:this._getCurrency()},this._captureMethod?{captureMethod:this._captureMethod}:{});return this._stripeElements=e.elements(a),this._linkV2Element=this._stripeElements.create(D.EXPRESS_CHECKOUT,i),this._linkV2Element.mount(`#${t}`),this._linkV2Element})}_initializeEvents(t){this._linkV2Element&&(this._shouldRequireShippingAddress()&&(this._linkV2Element.on(L.SHIPPING_ADDRESS_CHANGE,t=>gt(this,void 0,void 0,function*(){return this._onShippingAddressChange(t)})),this._linkV2Element.on(L.SHIPPING_RATE_CHANGE,t=>gt(this,void 0,void 0,function*(){return this._onShippingRateChange(t)}))),this._linkV2Element.on(L.CONFIRM,e=>gt(this,void 0,void 0,function*(){return this._onConfirm(e,t)})),this._linkV2Element.on(L.CANCEL,this._onCancel))}_onShippingAddressChange(t){return gt(this,void 0,void 0,function*(){if(!(\"address\"in t))return;const e=t.address,n={firstName:\"\",lastName:\"\",phone:\"\",company:\"\",address1:\"\",address2:\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.country)||\"\",postalCode:(null==e?void 0:e.postal_code)||\"\",stateOrProvince:(null==e?void 0:e.state)||\"\",stateOrProvinceCode:(null==e?void 0:e.state)||\"\",customFields:[]};yield this.paymentIntegrationService.updateShippingAddress(n);const r=yield this._getAvailableShippingOptions();yield this._updateDisplayedPrice(),(null==r?void 0:r.length)?t.resolve({shippingRates:r}):t.reject()})}_onCancel(){throw new y}_onShippingRateChange(t){return gt(this,void 0,void 0,function*(){if(\"shippingRate\"in t){const{shippingRate:e}=t;yield this._handleShippingOptionChange(null==e?void 0:e.id),yield this._updateDisplayedPrice(),t.resolve({})}})}_onConfirm(t,e){return gt(this,void 0,void 0,function*(){if(\"billingDetails\"in t&&\"shippingAddress\"in t&&this._stripeClient&&this._stripeElements){yield this.stripeIntegrationService.verifyCheckoutSpamProtection(),yield this._updateShippingAndBillingAddress(t),yield this.paymentIntegrationService.submitOrder();const n=this._getPaymentPayload(e);try{yield this.paymentIntegrationService.submitPayment(n)}catch(t){yield this._processAdditionalAction(t,e)}}return Promise.resolve()})}_updateShippingAndBillingAddress(t){var e,n,r,i,o,a,s,u;return gt(this,void 0,void 0,function*(){const c=this._shouldRequireShippingAddress(),l=(null===(n=null===(e=t.shippingAddress)||void 0===e?void 0:e.name)||void 0===n?void 0:n.split(\" \")[0])||(null===(i=null===(r=t.billingDetails)||void 0===r?void 0:r.name)||void 0===i?void 0:i.split(\" \")[0])||\"\",d=(null===(a=null===(o=t.shippingAddress)||void 0===o?void 0:o.name)||void 0===a?void 0:a.split(\" \")[1])||(null===(u=null===(s=t.billingDetails)||void 0===s?void 0:s.name)||void 0===u?void 0:u.split(\" \")[1])||\"\";if(c){const e=this._mapShippingAddress(t.shippingAddress,t.billingDetails,l,d);yield this.paymentIntegrationService.updateShippingAddress(e)}const p=this._mapBillingAddress(t.shippingAddress,t.billingDetails,l,d);yield this.paymentIntegrationService.updateBillingAddress(p)})}_mapShippingAddress(t,e,n,r){var i,o,a,s,u,c,l;return{firstName:n,lastName:r,phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null===(i=null==t?void 0:t.address)||void 0===i?void 0:i.line1)||\"\",address2:(null===(o=null==t?void 0:t.address)||void 0===o?void 0:o.line2)||\"\",city:(null===(a=null==t?void 0:t.address)||void 0===a?void 0:a.city)||\"\",countryCode:(null===(s=null==t?void 0:t.address)||void 0===s?void 0:s.country)||\"\",postalCode:(null===(u=null==t?void 0:t.address)||void 0===u?void 0:u.postal_code)||\"\",stateOrProvince:(null===(c=null==t?void 0:t.address)||void 0===c?void 0:c.state)||\"\",stateOrProvinceCode:(null===(l=null==t?void 0:t.address)||void 0===l?void 0:l.state)||\"\",customFields:[]}}_mapBillingAddress(t,e,n,r){var i,o,a,s,u,c;return{email:(null==e?void 0:e.email)||\"\",firstName:n,lastName:r,phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null===(i=null==e?void 0:e.address)||void 0===i?void 0:i.line1)||\"\",address2:\"\",city:(null===(o=null==e?void 0:e.address)||void 0===o?void 0:o.city)||\"\",countryCode:(null===(a=null==e?void 0:e.address)||void 0===a?void 0:a.country)||\"\",postalCode:(null===(s=null==e?void 0:e.address)||void 0===s?void 0:s.postal_code)||\"\",stateOrProvince:(null===(u=null==e?void 0:e.address)||void 0===u?void 0:u.state)||\"\",stateOrProvinceCode:(null===(c=null==t?void 0:t.address)||void 0===c?void 0:c.state)||\"\",customFields:[]}}_processAdditionalAction(t,e){return gt(this,void 0,void 0,function*(){if(!v(t)||!this.stripeIntegrationService.isAdditionalActionError(t.body.errors))throw t;if(!this._stripeClient||!this._stripeElements)throw new f(o.PaymentNotInitialized);const{data:n}=t.body.additional_action_required,{token:r}=n,{paymentIntent:i}=yield this._confirmStripePaymentOrThrow(n,e),a=this._getPaymentPayload(e,(null==i?void 0:i.id)||r);try{this._toggleLoadingIndicator(!0),yield this.paymentIntegrationService.submitPayment(a),yield this._completeCheckoutFlow()}catch(t){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}finally{this._toggleLoadingIndicator(!1)}})}_confirmStripePaymentOrThrow(t,e){var n,r,i;return gt(this,void 0,void 0,function*(){const{token:o,redirect_url:a}=t,s=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,a);let u;try{const t=(yield this.stripeIntegrationService.isPaymentCompleted(e,this._stripeClient))?yield null===(i=this._stripeClient)||void 0===i?void 0:i.retrievePaymentIntent(o||\"\"):yield null===(n=this._stripeClient)||void 0===n?void 0:n.confirmPayment({elements:s.elements,clientSecret:o,redirect:N.IF_REQUIRED,confirmParams:{return_url:null===(r=s.confirmParams)||void 0===r?void 0:r.return_url}});if(u=null==t?void 0:t.error,u||!(null==t?void 0:t.paymentIntent))throw new q;return t}catch(t){return this.stripeIntegrationService.throwStripeError(u)}})}_completeCheckoutFlow(){return gt(this,void 0,void 0,function*(){return\"function\"==typeof this._onComplete?this._onComplete():(window.location.replace(\"/order-confirmation\"),Promise.resolve())})}_getPaymentPayload(t,e){var n;const r=(null===(n=this.paymentIntegrationService.getState().getCart())||void 0===n?void 0:n.id)||\"\";return{methodId:t,paymentData:{formattedPayload:Object.assign(Object.assign({cart_id:r},e?{credit_card_token:{token:e}}:{}),{confirm:!1,method:M.Link})}}}_shouldRequireShippingAddress(){const{getCartOrThrow:t}=this.paymentIntegrationService.getState(),{lineItems:e}=t();return!!e.physicalItems.length}_updateDisplayedPrice(){return gt(this,void 0,void 0,function*(){this._stripeElements&&this._stripeElements.update({currency:this._getCurrency(),mode:\"payment\",amount:yield this._getTotalPrice()})})}_getCurrency(){if(!this._currencyCode){const{code:t}=this.paymentIntegrationService.getState().getCartOrThrow().currency;this._currencyCode=t.toLowerCase()}return this._currencyCode}_getTotalPrice(){return gt(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const{getCheckoutOrThrow:t,getCartOrThrow:e}=this.paymentIntegrationService.getState(),{decimalPlaces:n}=e().currency,r=(0,a.round)(t().outstandingBalance,n).toFixed(n);return this._toCents(+r)})}_getAvailableCountries(){var t;return gt(this,void 0,void 0,function*(){const e=yield this.paymentIntegrationService.loadShippingCountries();return((null===(t=e.getShippingCountries())||void 0===t?void 0:t.map(t=>t.code))||[]).filter(t=>mt.includes(t))})}_getAvailableShippingOptions(){var t,e,n;return gt(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState().getConsignments();if(!(null==r?void 0:r[0]))return;const i=r[0],o=(i.availableShippingOptions||[]).map(this._getStripeShippingOption.bind(this)),a=null===(t=i.availableShippingOptions)||void 0===t?void 0:t.find(t=>t.isRecommended),s=null===(e=i.selectedShippingOption)||void 0===e?void 0:e.id,u=null==a?void 0:a.id;return s?o.sort(t=>t.id===s?-1:0):u?(o.sort(t=>t.id===u?-1:0),yield this._handleShippingOptionChange(u)):yield this._handleShippingOptionChange(null===(n=o[0])||void 0===n?void 0:n.id),o.slice(0,9)})}_getStripeShippingOption({id:t,cost:e,description:n}){return{id:t,displayName:n,amount:this._toCents(e)}}_handleShippingOptionChange(t){return gt(this,void 0,void 0,function*(){if(t&&\"shipping_option_unselected\"!==t)return this.paymentIntegrationService.selectShippingOption(t)})}_getAmountTransformer(){if(this._amountTransformer)return this._amountTransformer;const{getCart:t}=this.paymentIntegrationService.getState(),{currency:e}=t()||{};return e?new yt(e.decimalPlaces):void 0}_toCents(t){const e=Math.round(100*t),n=this._getAmountTransformer();return n?n.toInteger(t):e}_toggleLoadingIndicator(t){t&&this._loadingIndicatorContainer?this.loadingIndicator.show(this._loadingIndicatorContainer):this.loadingIndicator.hide()}_getMethodId(t){const{initializationData:{checkoutSessionEnabled:e}={}}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t);return e?M.CHECKOUT_SESSION:M.OCS}}const St=e(e=>{const n=new V((0,t.vQ)()),r=new vt({containerStyles:ht});return new _t(e,n,new $(e,n),r)},[{id:\"stripeocs\"}]);var bt=function(t,e,n,r){return new(n||(n=Promise))(function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}u((r=r.apply(t,e||[])).next())})};class wt{constructor(t,e,n,r){this.paymentIntegrationService=t,this.scriptLoader=e,this.stripeIntegrationService=n,this.loadingIndicator=r}initialize(t){return bt(this,void 0,void 0,function*(){const{stripeocs:e,containerId:n}=t||{};if(!e||!n)throw new f(o.PaymentNotInitialized);const{gatewayId:r}=e;if(!r)throw new p(i.MissingPaymentMethod);const a=this._getMethodId(r),s=yield this.paymentIntegrationService.loadPaymentMethod(r,{params:{method:a}}),u=s.getPaymentMethodOrThrow(a,r),{loadingContainerId:c,buttonHeight:l,onComplete:d}=e;if(this._loadingIndicatorContainer=c,this._onComplete=d,!K(u))throw new p(i.MissingPaymentMethod);const{initializationData:h}=u,{captureMethod:v}=h,y=this.stripeIntegrationService.getStripeJsVersion(h);this._captureMethod=v,this._stripeClient=yield this.scriptLoader.getStripeClient(h,s.getCartLocale(),y),yield this.paymentIntegrationService.loadDefaultCheckout(),yield this._mountExpressCheckoutElement(n,this._stripeClient,l),this._initializeEvents(a)})}signIn(){return Promise.resolve()}signOut(){return Promise.resolve()}executePaymentMethodCheckout(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_mountExpressCheckoutElement(t,e,n=40){return bt(this,void 0,void 0,function*(){const r=this._shouldRequireShippingAddress(),i=Object.assign(Object.assign(Object.assign({shippingAddressRequired:r},r?{allowedShippingCountries:yield this._getAvailableCountries()}:{}),r?{shippingRates:[{id:\"_\",amount:0,displayName:\"Pending rates\"}]}:{}),{billingAddressRequired:!0,emailRequired:!0,phoneNumberRequired:!0,paymentMethods:{link:N.AUTO,applePay:N.NEVER,googlePay:N.NEVER,amazonPay:N.NEVER,paypal:N.NEVER,klarna:N.NEVER},buttonHeight:n}),{cartAmount:o=1}=this.paymentIntegrationService.getState().getCart()||{},a=Object.assign({mode:\"payment\",amount:this._toCents(o),currency:this._getCurrency()},this._captureMethod?{captureMethod:this._captureMethod}:{});this._stripeElements=e.elements(a),this._linkV2Element=this._stripeElements.create(D.EXPRESS_CHECKOUT,i),this._linkV2Element.mount(`#${t}`)})}_initializeEvents(t){this._linkV2Element&&(this._shouldRequireShippingAddress()&&(this._linkV2Element.on(L.SHIPPING_ADDRESS_CHANGE,t=>bt(this,void 0,void 0,function*(){return this._onShippingAddressChange(t)})),this._linkV2Element.on(L.SHIPPING_RATE_CHANGE,t=>bt(this,void 0,void 0,function*(){return this._onShippingRateChange(t)}))),this._linkV2Element.on(L.CONFIRM,e=>bt(this,void 0,void 0,function*(){return this._onConfirm(e,t)})),this._linkV2Element.on(L.CANCEL,this._onCancel))}_onShippingAddressChange(t){return bt(this,void 0,void 0,function*(){if(!(\"address\"in t))return;const e=t.address,n={firstName:\"\",lastName:\"\",phone:\"\",company:\"\",address1:\"\",address2:\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.country)||\"\",postalCode:(null==e?void 0:e.postal_code)||\"\",stateOrProvince:(null==e?void 0:e.state)||\"\",stateOrProvinceCode:(null==e?void 0:e.state)||\"\",customFields:[]};yield this.paymentIntegrationService.updateShippingAddress(n);const r=yield this._getAvailableShippingOptions();yield this._updateDisplayedPrice(),(null==r?void 0:r.length)?t.resolve({shippingRates:r}):t.reject()})}_onCancel(){throw new y}_onShippingRateChange(t){return bt(this,void 0,void 0,function*(){if(\"shippingRate\"in t){const{shippingRate:e}=t;yield this._handleShippingOptionChange(null==e?void 0:e.id),yield this._updateDisplayedPrice(),t.resolve({})}})}_onConfirm(t,e){return bt(this,void 0,void 0,function*(){if(\"billingDetails\"in t&&\"shippingAddress\"in t&&this._stripeClient&&this._stripeElements){yield this.stripeIntegrationService.verifyCheckoutSpamProtection(),yield this._updateShippingAndBillingAddress(t),yield this.paymentIntegrationService.submitOrder();const n=this._getPaymentPayload(e);try{yield this.paymentIntegrationService.submitPayment(n)}catch(t){yield this._processAdditionalAction(t,e)}}return Promise.resolve()})}_updateShippingAndBillingAddress(t){var e,n,r,i,o,a,s,u;return bt(this,void 0,void 0,function*(){const c=this._shouldRequireShippingAddress(),l=(null===(n=null===(e=t.shippingAddress)||void 0===e?void 0:e.name)||void 0===n?void 0:n.split(\" \")[0])||(null===(i=null===(r=t.billingDetails)||void 0===r?void 0:r.name)||void 0===i?void 0:i.split(\" \")[0])||\"\",d=(null===(a=null===(o=t.shippingAddress)||void 0===o?void 0:o.name)||void 0===a?void 0:a.split(\" \")[1])||(null===(u=null===(s=t.billingDetails)||void 0===s?void 0:s.name)||void 0===u?void 0:u.split(\" \")[1])||\"\";if(c){const e=this._mapShippingAddress(t.shippingAddress,t.billingDetails,l,d);yield this.paymentIntegrationService.updateShippingAddress(e)}const p=this._mapBillingAddress(t.shippingAddress,t.billingDetails,l,d);yield this.paymentIntegrationService.updateBillingAddress(p)})}_mapShippingAddress(t,e,n,r){var i,o,a,s,u,c,l;return{firstName:n,lastName:r,phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null===(i=null==t?void 0:t.address)||void 0===i?void 0:i.line1)||\"\",address2:(null===(o=null==t?void 0:t.address)||void 0===o?void 0:o.line2)||\"\",city:(null===(a=null==t?void 0:t.address)||void 0===a?void 0:a.city)||\"\",countryCode:(null===(s=null==t?void 0:t.address)||void 0===s?void 0:s.country)||\"\",postalCode:(null===(u=null==t?void 0:t.address)||void 0===u?void 0:u.postal_code)||\"\",stateOrProvince:(null===(c=null==t?void 0:t.address)||void 0===c?void 0:c.state)||\"\",stateOrProvinceCode:(null===(l=null==t?void 0:t.address)||void 0===l?void 0:l.state)||\"\",customFields:[]}}_mapBillingAddress(t,e,n,r){var i,o,a,s,u,c;return{email:(null==e?void 0:e.email)||\"\",firstName:n,lastName:r,phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null===(i=null==e?void 0:e.address)||void 0===i?void 0:i.line1)||\"\",address2:\"\",city:(null===(o=null==e?void 0:e.address)||void 0===o?void 0:o.city)||\"\",countryCode:(null===(a=null==e?void 0:e.address)||void 0===a?void 0:a.country)||\"\",postalCode:(null===(s=null==e?void 0:e.address)||void 0===s?void 0:s.postal_code)||\"\",stateOrProvince:(null===(u=null==e?void 0:e.address)||void 0===u?void 0:u.state)||\"\",stateOrProvinceCode:(null===(c=null==t?void 0:t.address)||void 0===c?void 0:c.state)||\"\",customFields:[]}}_processAdditionalAction(t,e){return bt(this,void 0,void 0,function*(){if(!v(t)||!this.stripeIntegrationService.isAdditionalActionError(t.body.errors))throw t;if(!this._stripeClient||!this._stripeElements)throw new f(o.PaymentNotInitialized);const{data:n}=t.body.additional_action_required,{token:r}=n,{paymentIntent:i}=yield this._confirmStripePaymentOrThrow(n,e),a=this._getPaymentPayload(e,(null==i?void 0:i.id)||r);try{this._toggleLoadingIndicator(!0),yield this.paymentIntegrationService.submitPayment(a),yield this._completeCheckoutFlow()}catch(t){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}finally{this._toggleLoadingIndicator(!1)}})}_confirmStripePaymentOrThrow(t,e){var n,r,i;return bt(this,void 0,void 0,function*(){const{token:o,redirect_url:a}=t,s=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,a);let u;try{const t=(yield this.stripeIntegrationService.isPaymentCompleted(e,this._stripeClient))?yield null===(i=this._stripeClient)||void 0===i?void 0:i.retrievePaymentIntent(o||\"\"):yield null===(n=this._stripeClient)||void 0===n?void 0:n.confirmPayment({elements:s.elements,clientSecret:o,redirect:N.IF_REQUIRED,confirmParams:{return_url:null===(r=s.confirmParams)||void 0===r?void 0:r.return_url}});if(u=null==t?void 0:t.error,u||!(null==t?void 0:t.paymentIntent))throw new q;return t}catch(t){return this.stripeIntegrationService.throwStripeError(u)}})}_completeCheckoutFlow(){return bt(this,void 0,void 0,function*(){return\"function\"==typeof this._onComplete?this._onComplete():(window.location.replace(\"/checkout/order-confirmation\"),Promise.resolve())})}_getPaymentPayload(t,e){var n;const r=(null===(n=this.paymentIntegrationService.getState().getCart())||void 0===n?void 0:n.id)||\"\";return{methodId:t,paymentData:{formattedPayload:Object.assign(Object.assign({cart_id:r},e?{credit_card_token:{token:e}}:{}),{confirm:!1,method:M.Link})}}}_shouldRequireShippingAddress(){const{getCart:t}=this.paymentIntegrationService.getState(),{lineItems:e}=t()||{};return!!(null==e?void 0:e.physicalItems.length)}_updateDisplayedPrice(){return bt(this,void 0,void 0,function*(){this._stripeElements&&this._stripeElements.update({currency:this._getCurrency(),mode:\"payment\",amount:yield this._getTotalPrice()})})}_getCurrency(){var t;if(!this._currencyCode){const e=null===(t=this.paymentIntegrationService.getState().getCart())||void 0===t?void 0:t.currency;e&&(this._currencyCode=e.code.toLowerCase())}return this._currencyCode}_getTotalPrice(){var t;return bt(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const{getCheckoutOrThrow:e,getCart:n}=this.paymentIntegrationService.getState(),{decimalPlaces:r}=(null===(t=n())||void 0===t?void 0:t.currency)||{},i=(0,a.round)(e().outstandingBalance,r).toFixed(r);return this._toCents(+i)})}_getAvailableCountries(){var t;return bt(this,void 0,void 0,function*(){const e=yield this.paymentIntegrationService.loadShippingCountries();return((null===(t=e.getShippingCountries())||void 0===t?void 0:t.map(t=>t.code))||[]).filter(t=>mt.includes(t))})}_getAvailableShippingOptions(){var t,e,n;return bt(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState().getConsignments();if(!(null==r?void 0:r[0]))return;const i=r[0],o=(i.availableShippingOptions||[]).map(this._getStripeShippingOption.bind(this)),a=null===(t=i.availableShippingOptions)||void 0===t?void 0:t.find(t=>t.isRecommended),s=null===(e=i.selectedShippingOption)||void 0===e?void 0:e.id,u=null==a?void 0:a.id;return s?o.sort(t=>t.id===s?-1:0):u?(o.sort(t=>t.id===u?-1:0),yield this._handleShippingOptionChange(u)):yield this._handleShippingOptionChange(null===(n=o[0])||void 0===n?void 0:n.id),o.slice(0,9)})}_getStripeShippingOption({id:t,cost:e,description:n}){return{id:t,displayName:n,amount:this._toCents(e)}}_handleShippingOptionChange(t){return bt(this,void 0,void 0,function*(){if(t&&\"shipping_option_unselected\"!==t)return this.paymentIntegrationService.selectShippingOption(t)})}_getAmountTransformer(){if(this._amountTransformer)return this._amountTransformer;const{getCart:t}=this.paymentIntegrationService.getState(),{currency:e}=t()||{};return e?new yt(e.decimalPlaces):void 0}_toCents(t){const e=Math.round(100*t),n=this._getAmountTransformer();return n?n.toInteger(t):e}_toggleLoadingIndicator(t){t&&this._loadingIndicatorContainer?this.loadingIndicator.show(this._loadingIndicatorContainer):this.loadingIndicator.hide()}_getMethodId(t){const{initializationData:{checkoutSessionEnabled:e}={}}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t);return e?M.CHECKOUT_SESSION:M.OCS}}const Ct=e(e=>{const n=new V((0,t.vQ)()),r=new vt({containerStyles:ht});return new wt(e,n,new $(e,n),r)},[{id:\"stripeocs\"}])})(),module.exports=r})();\n//# sourceMappingURL=stripe.js.map"
  },
  {
    "path": "dist/cjs/integrations/td-bank.js",
    "content": "(()=>{var t={9165(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(t){var n=new r.default;return new i.default(n,t)};var r=e(9828),i=e(5470)},9828(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(){}return t.prototype.build=function(t,n,e){var r=this,i=document.createElement(\"form\");return i.style.display=\"none\",i.setAttribute(\"action\",t),i.setAttribute(\"method\",\"POST\"),i.setAttribute(\"target\",e||\"_top\"),Object.keys(n).forEach(function(t){var e=n[t];i.appendChild(r._createInput(e,t))}),i},t.prototype._createInput=function(t,n){var e=document.createElement(\"input\");return e.setAttribute(\"name\",n),e.setAttribute(\"type\",\"hidden\"),e.setAttribute(\"value\",t),e},t}();n.default=e},5470(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var r=e(9783),i=function(){function t(t,n){this._formBuilder=t,this._options=n}return t.prototype.postForm=function(t,n,e,r){var i=this._formBuilder.build(this._prependHost(t),n,r);window.addEventListener(\"unload\",function t(){window.removeEventListener(\"unload\",t),e&&e()}),document.body.appendChild(i),i.submit()},t.prototype._prependHost=function(t){return this._options&&this._options.host&&!(0,r.isAbsoluteUrl)(t)?(0,r.joinPaths)(this._options.host,t):t},t}();n.default=i},8686(t,n,e){\"use strict\";n.createFormPoster=void 0;var r=e(9165);Object.defineProperty(n,\"createFormPoster\",{enumerable:!0,get:function(){return r.default}});e(5470)},9783(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.isAbsoluteUrl=function(t){return/^https?:\\/\\//.test(t)},n.joinPaths=function(t,n){return\"\".concat((e=t,e.replace(/\\/$/,\"\")),\"/\").concat(function(t){return t.replace(/^\\//,\"\")}(n));var e}},4325(t,n,e){\"use strict\";e.d(n,{g:()=>i});var r=e(5889),i=function(){function t(){this._cache={}}return t.prototype.read=function(t,n){var e=this.getKey(t,n.params);return this._cache[e]||null},t.prototype.write=function(t,n,e){var r=this.getKey(t,n.params);this._cache[r]=e},t.prototype.getKey=function(t,n){return void 0===n&&(n={}),0===Object.keys(n).length?t:\"\".concat(t,\"?\").concat(r.stringify(n))},t}()},321(t,n,e){\"use strict\";e.d(n,{A:()=>a});var r=e(168),i=e(1675),o=e(5861),u=e(4670);function a(t){return new u.A(new o.A,new i.A,r,t)}},6889(t,n,e){\"use strict\";e.d(n,{A:()=>i});var r=e(2024);function i(t){return new r.A(t)}},4043(t,n,e){\"use strict\";e.r(n),e.d(n,{RequestSender:()=>o.A,Timeout:()=>u.A,createRequestSender:()=>r.A,createTimeout:()=>i.A});var r=e(321),i=e(6889),o=e(4670),u=e(2024)},4843(t,n,e){\"use strict\";function r(t){return!!t&&(\"object\"==typeof t||\"function\"==typeof t)&&\"function\"==typeof t.then}e.d(n,{A:()=>r})},1675(t,n,e){\"use strict\";e.d(n,{A:()=>a});var r=e(1635),i=e(710),o=/application\\/(\\w+\\+)?json/,u=/application\\/x-www-form-urlencoded/;const a=function(){function t(){}return t.prototype.toRequestBody=function(t){var n=t.headers?this._getHeader(t.headers,\"Content-Type\"):\"\";if(t.body){if(o.test(n))return JSON.stringify(t.body);if(u.test(n))return(0,i.A)(t.body)}return t.body},t.prototype.toResponse=function(t){var n=this._parseResponseHeaders(t.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in t?t.response:t.responseText,n),headers:n,status:t.status,statusText:t.statusText}},t.prototype._parseResponseBody=function(t,n){var e=this._getHeader(n,\"Content-Type\");return t&&o.test(e)?JSON.parse(t):t},t.prototype._parseResponseHeaders=function(t){return(t?t.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(t,n){var e,i=n.split(\":\"),o=(i.shift()||\"\").trim();return o?(0,r.__assign)((0,r.__assign)({},t),((e={})[o.toLowerCase()]=i.join(\":\").trim(),e)):t},{})},t.prototype._getHeader=function(t,n){return t&&n&&(t[n]||t[n.toLowerCase()])||\"\"},t}()},5861(t,n,e){\"use strict\";e.d(n,{A:()=>i});var r=e(5889);const i=function(){function t(){}return t.prototype.createRequest=function(t,n){var e=new XMLHttpRequest;return this._configureRequest(e,t,n),e},t.prototype._configureRequest=function(t,n,e){void 0===e&&(e={}),t.open(e.method||\"GET\",this._formatUrl(n,e.params,e.encodeParams),!0),e.headers&&this._configureRequestHeaders(t,e.headers),\"boolean\"==typeof e.credentials&&(t.withCredentials=e.credentials),\"number\"==typeof e.timeout&&(t.timeout=e.timeout)},t.prototype._configureRequestHeaders=function(t,n){Object.keys(n).filter(function(t){return null!==n[t]}).forEach(function(e){t.setRequestHeader(e,n[e])})},t.prototype._formatUrl=function(t,n,e){return void 0===e&&(e=!0),n&&0!==Object.keys(n).length?\"\".concat(t,\"?\").concat(r.stringify(n,{encode:e})):t},t}()},4670(t,n,e){\"use strict\";e.d(n,{A:()=>s});var r=e(1635),i=e(35),o=e.n(i),u=e(4325),a=e(4843),c=e(2024);const s=function(){function t(t,n,e,r){void 0===r&&(r={}),this._requestFactory=t,this._payloadTransformer=n,this._cookie=e,this._options=r,this._cache=this._options.cache||new u.g}return t.prototype.sendRequest=function(t,n){var e=this,r=this._mergeDefaultOptions(t,n),i=this._getCachedRequest(t,r);if(i)return Promise.resolve(i);var o=this._requestFactory.createRequest(this._prependHost(t),r);return new Promise(function(n,i){var u=function(){var u=e._payloadTransformer.toResponse(o);u.status>=200&&u.status<300?(e._cacheRequest(t,r,u),n(u)):i(u)};o.onload=u,o.onerror=u,o.onabort=u,o.ontimeout=u,r.timeout instanceof c.A&&(r.timeout.onComplete(function(){return o.abort()}),r.timeout.start()),(0,a.A)(r.timeout)&&r.timeout.then(function(){return o.abort()}),o.send(e._payloadTransformer.toRequestBody(r))})},t.prototype.get=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"GET\"}))},t.prototype.post=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"POST\"}))},t.prototype.put=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"PUT\"}))},t.prototype.patch=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"PATCH\"}))},t.prototype.delete=function(t,n){return this.sendRequest(t,(0,r.__assign)((0,r.__assign)({},n),{method:\"DELETE\"}))},t.prototype._mergeDefaultOptions=function(t,n){var e={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},r=this._cookie.get(\"XSRF-TOKEN\");return r&&e.headers&&!this._isAssetRequest(t,n)&&this._isLocalRequest(t)&&(e.headers[\"X-XSRF-TOKEN\"]=r),n&&n.body&&e.headers&&(e.headers[\"Content-Type\"]=\"application/json\"),o()({},e,n)},t.prototype._prependHost=function(t){return!this._options.host||/^https?:\\/\\//.test(t)?t:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(t.replace(/^\\//,\"\"))},t.prototype._shouldCacheRequest=function(t){return\"GET\"===(t.method||\"GET\").toUpperCase()&&Boolean(t.cache)},t.prototype._getCachedRequest=function(t,n){return this._shouldCacheRequest(n)?this._cache.read(t,n):null},t.prototype._cacheRequest=function(t,n,e){this._shouldCacheRequest(n)&&this._cache.write(t,n,e)},t.prototype._isAssetRequest=function(t,n){return(!n||!n.method||\"GET\"===n.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(t.split(\"?\")[0])},t.prototype._isLocalRequest=function(t){return!!t.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!t.match(new RegExp(\"^(https?:)?//\"))},t}()},2024(t,n,e){\"use strict\";e.d(n,{A:()=>r});const r=function(){function t(t){var n=this;this._delay=t,this._promise=new Promise(function(t){n._resolve=t})}return t.prototype.onComplete=function(t){this._promise.then(t)},t.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},t.prototype.start=function(){var t=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return t.complete()},this._delay))},t}()},710(t,n,e){\"use strict\";function r(t){return\"object\"!=typeof t||null===t?t:Object.keys(t).filter(function(n){return void 0!==t[n]}).map(function(n){var e=t[n];return\"string\"==typeof e?\"\".concat(n,\"=\").concat(encodeURIComponent(e)):\"\".concat(n,\"=\").concat(encodeURIComponent(JSON.stringify(e)||\"\"))}).join(\"&\")}e.d(n,{A:()=>r})},5889(t,n,e){\"use strict\";const r=e(803),i=e(1915),o=e(1657),u=e(3814);function a(t){if(\"string\"!=typeof t||1!==t.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(t,n){return n.encode?n.strict?r(t):encodeURIComponent(t):t}function s(t,n){return n.decode?i(t):t}function f(t){return Array.isArray(t)?t.sort():\"object\"==typeof t?f(Object.keys(t)).sort((t,n)=>Number(t)-Number(n)).map(n=>t[n]):t}function l(t){const n=t.indexOf(\"#\");return-1!==n&&(t=t.slice(0,n)),t}function p(t){const n=(t=l(t)).indexOf(\"?\");return-1===n?\"\":t.slice(n+1)}function h(t,n){return n.parseNumbers&&!Number.isNaN(Number(t))&&\"string\"==typeof t&&\"\"!==t.trim()?t=Number(t):!n.parseBooleans||null===t||\"true\"!==t.toLowerCase()&&\"false\"!==t.toLowerCase()||(t=\"true\"===t.toLowerCase()),t}function d(t,n){a((n=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},n)).arrayFormatSeparator);const e=function(t){let n;switch(t.arrayFormat){case\"index\":return(t,e,r)=>{n=/\\[(\\d*)\\]$/.exec(t),t=t.replace(/\\[\\d*\\]$/,\"\"),n?(void 0===r[t]&&(r[t]={}),r[t][n[1]]=e):r[t]=e};case\"bracket\":return(t,e,r)=>{n=/(\\[\\])$/.exec(t),t=t.replace(/\\[\\]$/,\"\"),n?void 0!==r[t]?r[t]=[].concat(r[t],e):r[t]=[e]:r[t]=e};case\"comma\":case\"separator\":return(n,e,r)=>{const i=\"string\"==typeof e&&e.includes(t.arrayFormatSeparator),o=\"string\"==typeof e&&!i&&s(e,t).includes(t.arrayFormatSeparator);e=o?s(e,t):e;const u=i||o?e.split(t.arrayFormatSeparator).map(n=>s(n,t)):null===e?e:s(e,t);r[n]=u};default:return(t,n,e)=>{void 0!==e[t]?e[t]=[].concat(e[t],n):e[t]=n}}}(n),r=Object.create(null);if(\"string\"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,\"\")))return r;for(const i of t.split(\"&\")){if(\"\"===i)continue;let[t,u]=o(n.decode?i.replace(/\\+/g,\" \"):i,\"=\");u=void 0===u?null:[\"comma\",\"separator\"].includes(n.arrayFormat)?u:s(u,n),e(s(t,n),u,r)}for(const t of Object.keys(r)){const e=r[t];if(\"object\"==typeof e&&null!==e)for(const t of Object.keys(e))e[t]=h(e[t],n);else r[t]=h(e,n)}return!1===n.sort?r:(!0===n.sort?Object.keys(r).sort():Object.keys(r).sort(n.sort)).reduce((t,n)=>{const e=r[n];return Boolean(e)&&\"object\"==typeof e&&!Array.isArray(e)?t[n]=f(e):t[n]=e,t},Object.create(null))}n.extract=p,n.parse=d,n.stringify=(t,n)=>{if(!t)return\"\";a((n=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},n)).arrayFormatSeparator);const e=e=>n.skipNull&&null==t[e]||n.skipEmptyString&&\"\"===t[e],r=function(t){switch(t.arrayFormat){case\"index\":return n=>(e,r)=>{const i=e.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,[c(n,t),\"[\",i,\"]\"].join(\"\")]:[...e,[c(n,t),\"[\",c(i,t),\"]=\",c(r,t)].join(\"\")]};case\"bracket\":return n=>(e,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,[c(n,t),\"[]\"].join(\"\")]:[...e,[c(n,t),\"[]=\",c(r,t)].join(\"\")];case\"comma\":case\"separator\":return n=>(e,r)=>null==r||0===r.length?e:0===e.length?[[c(n,t),\"=\",c(r,t)].join(\"\")]:[[e,c(r,t)].join(t.arrayFormatSeparator)];default:return n=>(e,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&\"\"===r?e:null===r?[...e,c(n,t)]:[...e,[c(n,t),\"=\",c(r,t)].join(\"\")]}}(n),i={};for(const n of Object.keys(t))e(n)||(i[n]=t[n]);const o=Object.keys(i);return!1!==n.sort&&o.sort(n.sort),o.map(e=>{const i=t[e];return void 0===i?\"\":null===i?c(e,n):Array.isArray(i)?i.reduce(r(e),[]).join(\"&\"):c(e,n)+\"=\"+c(i,n)}).filter(t=>t.length>0).join(\"&\")},n.parseUrl=(t,n)=>{n=Object.assign({decode:!0},n);const[e,r]=o(t,\"#\");return Object.assign({url:e.split(\"?\")[0]||\"\",query:d(p(t),n)},n&&n.parseFragmentIdentifier&&r?{fragmentIdentifier:s(r,n)}:{})},n.stringifyUrl=(t,e)=>{e=Object.assign({encode:!0,strict:!0},e);const r=l(t.url).split(\"?\")[0]||\"\",i=n.extract(t.url),o=n.parse(i,{sort:!1}),u=Object.assign(o,t.query);let a=n.stringify(u,e);a&&(a=`?${a}`);let s=function(t){let n=\"\";const e=t.indexOf(\"#\");return-1!==e&&(n=t.slice(e)),n}(t.url);return t.fragmentIdentifier&&(s=`#${c(t.fragmentIdentifier,e)}`),`${r}${a}${s}`},n.pick=(t,e,r)=>{r=Object.assign({parseFragmentIdentifier:!0},r);const{url:i,query:o,fragmentIdentifier:a}=n.parseUrl(t,r);return n.stringifyUrl({url:i,query:u(o,e),fragmentIdentifier:a},r)},n.exclude=(t,e,r)=>{const i=Array.isArray(e)?t=>!e.includes(t):(t,n)=>!e(t,n);return n.pick(t,i,r)}},5477(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(){}return t.prototype.canSupportRel=function(t){var n=document.createElement(\"link\");return!!(n.relList&&n.relList.supports&&n.relList.supports(t))},t}();n.default=e},471(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=e(4043),i=e(5477),o=e(4886)},9722(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return new o.default(new i.default,(0,r.createRequestSender)())};var r=e(4043),i=e(5477),o=e(7995)},5895(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return r||(r=(0,i.default)()),r};var r,i=e(471)},282(t,n,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.default=function(){return r||(r=(0,i.default)()),r};var r,i=e(9722)},315(t,n,e){\"use strict\";n.vQ=void 0;e(4886),e(471);var r=e(5895);Object.defineProperty(n,\"vQ\",{enumerable:!0,get:function(){return r.default}});e(7995),e(9722),e(282)},4886(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(t,n){this._browserSupport=t,this._requestSender=n,this._scripts={},this._preloadedScripts={}}return t.prototype.loadScript=function(t,n){var e=this;return this._scripts[t]||(this._scripts[t]=new Promise(function(r,i){var o=document.createElement(\"script\"),u=n||{},a=u.async,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onreadystatechange=function(){return r()},o.onerror=function(n){delete e._scripts[t],i(n)},o.async=c,o.src=t,document.body.appendChild(o)})),this._scripts[t]},t.prototype.loadScripts=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.loadScript(t,n)})).then(function(){})},t.prototype.preloadScript=function(t,n){var e=this;return this._preloadedScripts[t]||(this._preloadedScripts[t]=new Promise(function(r,i){var o=(n||{}).prefetch,u=void 0!==o&&o?\"prefetch\":\"preload\";if(e._browserSupport.canSupportRel(u)){var a=document.createElement(\"link\");a.as=\"script\",a.rel=u,a.href=t,a.onload=function(){r()},a.onerror=function(){delete e._preloadedScripts[t],i()},document.head.appendChild(a)}else e._requestSender.get(t,{credentials:!1,headers:{Accept:\"application/javascript\"}}).then(function(){return r()}).catch(i)})),this._preloadedScripts[t]},t.prototype.preloadScripts=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.preloadScript(t,n)})).then(function(){})},t}();n.default=e},7995(t,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0});var e=function(){function t(t,n){this._browserSupport=t,this._requestSender=n,this._stylesheets={},this._preloadedStylesheets={}}return t.prototype.loadStylesheet=function(t,n){var e=this;return this._stylesheets[t]||(this._stylesheets[t]=new Promise(function(r,i){var o=document.createElement(\"link\"),u=n||{},a=u.prepend,c=void 0!==a&&a,s=u.attributes,f=void 0===s?{}:s;Object.keys(f).forEach(function(t){o.setAttribute(t,f[t])}),o.onload=function(){return r()},o.onerror=function(n){delete e._stylesheets[t],i(n)},o.rel=\"stylesheet\",o.href=t,c&&document.head.children[0]?document.head.insertBefore(o,document.head.children[0]):document.head.appendChild(o)})),this._stylesheets[t]},t.prototype.loadStylesheets=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.loadStylesheet(t,n)})).then(function(){})},t.prototype.preloadStylesheet=function(t,n){var e=this;return this._preloadedStylesheets[t]||(this._preloadedStylesheets[t]=new Promise(function(r,i){var o=(n||{}).prefetch,u=void 0!==o&&o,a=u?\"prefetch\":\"preload\";if(e._browserSupport.canSupportRel(a)){var c=document.createElement(\"link\");c.as=\"style\",c.rel=u?\"prefetch\":\"preload\",c.href=t,c.onload=function(){r()},c.onerror=function(n){delete e._preloadedStylesheets[t],i(n)},document.head.appendChild(c)}else e._requestSender.get(t,{credentials:!1,headers:{Accept:\"text/css\"}}).then(function(){return r()}).catch(i)})),this._preloadedStylesheets[t]},t.prototype.preloadStylesheets=function(t,n){var e=this;return Promise.all(t.map(function(t){return e.preloadStylesheet(t,n)})).then(function(){})},t}();n.default=e},1915(t){\"use strict\";var n=\"%[a-f0-9]{2}\",e=new RegExp(\"(\"+n+\")|([^%]+?)\",\"gi\"),r=new RegExp(\"(\"+n+\")+\",\"gi\");function i(t,n){try{return[decodeURIComponent(t.join(\"\"))]}catch(t){}if(1===t.length)return t;n=n||1;var e=t.slice(0,n),r=t.slice(n);return Array.prototype.concat.call([],i(e),i(r))}function o(t){try{return decodeURIComponent(t)}catch(o){for(var n=t.match(e)||[],r=1;r<n.length;r++)n=(t=i(n,r).join(\"\")).match(e)||[];return t}}t.exports=function(t){if(\"string\"!=typeof t)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof t+\"`\");try{return t=t.replace(/\\+/g,\" \"),decodeURIComponent(t)}catch(n){return function(t){for(var n={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},e=r.exec(t);e;){try{n[e[0]]=decodeURIComponent(e[0])}catch(t){var i=o(e[0]);i!==e[0]&&(n[e[0]]=i)}e=r.exec(t)}n[\"%C2\"]=\"�\";for(var u=Object.keys(n),a=0;a<u.length;a++){var c=u[a];t=t.replace(new RegExp(c,\"g\"),n[c])}return t}(t)}}},3814(t){\"use strict\";t.exports=function(t,n){for(var e={},r=Object.keys(t),i=Array.isArray(n),o=0;o<r.length;o++){var u=r[o],a=t[u];(i?-1!==n.indexOf(u):n(u,a,t))&&(e[u]=a)}return e}},168(t){var n;n=function(){function t(){for(var t=0,n={};t<arguments.length;t++){var e=arguments[t];for(var r in e)n[r]=e[r]}return n}function n(t){return t.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function e(r){function i(){}function o(n,e,o){if(\"undefined\"!=typeof document){\"number\"==typeof(o=t({path:\"/\"},i.defaults,o)).expires&&(o.expires=new Date(1*new Date+864e5*o.expires)),o.expires=o.expires?o.expires.toUTCString():\"\";try{var u=JSON.stringify(e);/^[\\{\\[]/.test(u)&&(e=u)}catch(t){}e=r.write?r.write(e,n):encodeURIComponent(String(e)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),n=encodeURIComponent(String(n)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in o)o[c]&&(a+=\"; \"+c,!0!==o[c]&&(a+=\"=\"+o[c].split(\";\")[0]));return document.cookie=n+\"=\"+e+a}}function u(t,e){if(\"undefined\"!=typeof document){for(var i={},o=document.cookie?document.cookie.split(\"; \"):[],u=0;u<o.length;u++){var a=o[u].split(\"=\"),c=a.slice(1).join(\"=\");e||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var s=n(a[0]);if(c=(r.read||r)(c,s)||n(c),e)try{c=JSON.parse(c)}catch(t){}if(i[s]=c,t===s)break}catch(t){}}return t?i[t]:i}}return i.set=o,i.get=function(t){return u(t,!1)},i.getJSON=function(t){return u(t,!0)},i.remove=function(n,e){o(n,\"\",t(e,{expires:-1}))},i.defaults={},i.withConverter=e,i}(function(){})},\"function\"==typeof define&&define.amd&&define(n),t.exports=n()},35(t,n,e){t=e.nmd(t);var r=\"__lodash_hash_undefined__\",i=9007199254740991,o=\"[object Arguments]\",u=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,s=/^(?:0|[1-9]\\d*)$/,f={};f[\"[object Float32Array]\"]=f[\"[object Float64Array]\"]=f[\"[object Int8Array]\"]=f[\"[object Int16Array]\"]=f[\"[object Int32Array]\"]=f[\"[object Uint8Array]\"]=f[\"[object Uint8ClampedArray]\"]=f[\"[object Uint16Array]\"]=f[\"[object Uint32Array]\"]=!0,f[o]=f[\"[object Array]\"]=f[\"[object ArrayBuffer]\"]=f[\"[object Boolean]\"]=f[\"[object DataView]\"]=f[\"[object Date]\"]=f[\"[object Error]\"]=f[u]=f[\"[object Map]\"]=f[\"[object Number]\"]=f[a]=f[\"[object RegExp]\"]=f[\"[object Set]\"]=f[\"[object String]\"]=f[\"[object WeakMap]\"]=!1;var l,p,h,d=\"object\"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,v=\"object\"==typeof self&&self&&self.Object===Object&&self,_=d||v||Function(\"return this\")(),y=n&&!n.nodeType&&n,g=y&&t&&!t.nodeType&&t,m=g&&g.exports===y,b=m&&d.process,w=function(){try{return g&&g.require&&g.require(\"util\").types||b&&b.binding&&b.binding(\"util\")}catch(t){}}(),j=w&&w.isTypedArray,O=Array.prototype,x=Function.prototype,A=Object.prototype,S=_[\"__core-js_shared__\"],I=x.toString,k=A.hasOwnProperty,E=(l=/[^.]+$/.exec(S&&S.keys&&S.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",C=A.toString,R=I.call(Object),M=RegExp(\"^\"+I.call(k).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),P=m?_.Buffer:void 0,T=_.Symbol,z=_.Uint8Array,U=(P&&P.allocUnsafe,p=Object.getPrototypeOf,h=Object,function(t){return p(h(t))}),q=Object.create,F=A.propertyIsEnumerable,N=O.splice,B=T?T.toStringTag:void 0,D=function(){try{var t=at(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),L=P?P.isBuffer:void 0,$=Math.max,W=Date.now,H=at(_,\"Map\"),V=at(Object,\"create\"),G=function(){function t(){}return function(n){if(!mt(n))return{};if(q)return q(n);t.prototype=n;var e=new t;return t.prototype=void 0,e}}();function K(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function J(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Z(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function X(t){var n=this.__data__=new J(t);this.size=n.size}function Y(t,n,e){(void 0!==e&&!pt(t[n],e)||void 0===e&&!(n in t))&&nt(t,n,e)}function Q(t,n,e){var r=t[n];k.call(t,n)&&pt(r,e)&&(void 0!==e||n in t)||nt(t,n,e)}function tt(t,n){for(var e=t.length;e--;)if(pt(t[e][0],n))return e;return-1}function nt(t,n,e){\"__proto__\"==n&&D?D(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}K.prototype.clear=function(){this.__data__=V?V(null):{},this.size=0},K.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},K.prototype.get=function(t){var n=this.__data__;if(V){var e=n[t];return e===r?void 0:e}return k.call(n,t)?n[t]:void 0},K.prototype.has=function(t){var n=this.__data__;return V?void 0!==n[t]:k.call(n,t)},K.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=V&&void 0===n?r:n,this},J.prototype.clear=function(){this.__data__=[],this.size=0},J.prototype.delete=function(t){var n=this.__data__,e=tt(n,t);return!(e<0||(e==n.length-1?n.pop():N.call(n,e,1),--this.size,0))},J.prototype.get=function(t){var n=this.__data__,e=tt(n,t);return e<0?void 0:n[e][1]},J.prototype.has=function(t){return tt(this.__data__,t)>-1},J.prototype.set=function(t,n){var e=this.__data__,r=tt(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},Z.prototype.clear=function(){this.size=0,this.__data__={hash:new K,map:new(H||J),string:new K}},Z.prototype.delete=function(t){var n=ut(this,t).delete(t);return this.size-=n?1:0,n},Z.prototype.get=function(t){return ut(this,t).get(t)},Z.prototype.has=function(t){return ut(this,t).has(t)},Z.prototype.set=function(t,n){var e=ut(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},X.prototype.clear=function(){this.__data__=new J,this.size=0},X.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},X.prototype.get=function(t){return this.__data__.get(t)},X.prototype.has=function(t){return this.__data__.has(t)},X.prototype.set=function(t,n){var e=this.__data__;if(e instanceof J){var r=e.__data__;if(!H||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new Z(r)}return e.set(t,n),this.size=e.size,this};function et(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":B&&B in Object(t)?function(t){var n=k.call(t,B),e=t[B];try{t[B]=void 0;var r=!0}catch(t){}var i=C.call(t);return r&&(n?t[B]=e:delete t[B]),i}(t):function(t){return C.call(t)}(t)}function rt(t){return bt(t)&&et(t)==o}function it(t,n,e,r,i){t!==n&&function(t,n,e){for(var r=-1,i=Object(t),o=e(t),u=o.length;u--;){var a=o[++r];if(!1===n(i[a],a,i))break}}(n,function(o,u){if(i||(i=new X),mt(o))!function(t,n,e,r,i,o,u){var c=ft(t,e),s=ft(n,e),f=u.get(s);if(f)Y(t,e,f);else{var l,p,h,d,v,_=o?o(c,s,e+\"\",t,n,u):void 0,y=void 0===_;if(y){var g=dt(s),m=!g&&_t(s),b=!g&&!m&&wt(s);_=s,g||m||b?dt(c)?_=c:bt(v=c)&&vt(v)?_=function(t,n){var e=-1,r=t.length;for(n||(n=Array(r));++e<r;)n[e]=t[e];return n}(c):m?(y=!1,_=function(t){return t.slice()}(s)):b?(y=!1,d=new(h=(l=s).buffer).constructor(h.byteLength),new z(d).set(new z(h)),p=d,_=new l.constructor(p,l.byteOffset,l.length)):_=[]:function(t){if(!bt(t)||et(t)!=a)return!1;var n=U(t);if(null===n)return!0;var e=k.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof e&&e instanceof e&&I.call(e)==R}(s)||ht(s)?(_=c,ht(c)?_=function(t){return function(t,n,e){var r=!e;e||(e={});for(var i=-1,o=n.length;++i<o;){var u=n[i],a=void 0;void 0===a&&(a=t[u]),r?nt(e,u,a):Q(e,u,a)}return e}(t,jt(t))}(c):mt(c)&&!yt(c)||(_=function(t){return\"function\"!=typeof t.constructor||st(t)?{}:G(U(t))}(s))):y=!1}y&&(u.set(s,_),i(_,s,r,o,u),u.delete(s)),Y(t,e,_)}}(t,n,u,e,it,r,i);else{var c=r?r(ft(t,u),o,u+\"\",t,n,i):void 0;void 0===c&&(c=o),Y(t,u,c)}},jt)}var ot=D?function(t,n){return D(t,\"toString\",{configurable:!0,enumerable:!1,value:(e=n,function(){return e}),writable:!0});var e}:At;function ut(t,n){var e,r,i=t.__data__;return(\"string\"==(r=typeof(e=n))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==e:null===e)?i[\"string\"==typeof n?\"string\":\"hash\"]:i.map}function at(t,n){var e=function(t,n){return null==t?void 0:t[n]}(t,n);return function(t){return!(!mt(t)||function(t){return!!E&&E in t}(t))&&(yt(t)?M:c).test(function(t){if(null!=t){try{return I.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}(t))}(e)?e:void 0}function ct(t,n){var e=typeof t;return!!(n=n??i)&&(\"number\"==e||\"symbol\"!=e&&s.test(t))&&t>-1&&t%1==0&&t<n}function st(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||A)}function ft(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var lt=function(t){var n=0,e=0;return function(){var r=W(),i=16-(r-e);if(e=r,i>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(void 0,arguments)}}(ot);function pt(t,n){return t===n||t!=t&&n!=n}var ht=rt(function(){return arguments}())?rt:function(t){return bt(t)&&k.call(t,\"callee\")&&!F.call(t,\"callee\")},dt=Array.isArray;function vt(t){return null!=t&&gt(t.length)&&!yt(t)}var _t=L||function(){return!1};function yt(t){if(!mt(t))return!1;var n=et(t);return n==u||\"[object GeneratorFunction]\"==n||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function gt(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=i}function mt(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function bt(t){return null!=t&&\"object\"==typeof t}var wt=j?function(t){return function(n){return t(n)}}(j):function(t){return bt(t)&&gt(t.length)&&!!f[et(t)]};function jt(t){return vt(t)?function(t,n){var e=dt(t),r=!e&&ht(t),i=!e&&!r&&_t(t),o=!e&&!r&&!i&&wt(t),u=e||r||i||o,a=u?function(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}(t.length,String):[],c=a.length;for(var s in t)!n&&!k.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||ct(s,c))||a.push(s);return a}(t,!0):function(t){if(!mt(t))return function(t){var n=[];if(null!=t)for(var e in Object(t))n.push(e);return n}(t);var n=st(t),e=[];for(var r in t)(\"constructor\"!=r||!n&&k.call(t,r))&&e.push(r);return e}(t)}var Ot,xt=(Ot=function(t,n,e){it(t,n,e)},function(t,n){return lt(function(t,n,e){return n=$(void 0===n?t.length-1:n,0),function(){for(var r=arguments,i=-1,o=$(r.length-n,0),u=Array(o);++i<o;)u[i]=r[n+i];i=-1;for(var a=Array(n+1);++i<n;)a[i]=r[i];return a[n]=e(u),function(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}(t,this,a)}}(t,n,At),t+\"\")}(function(t,n){var e=-1,r=n.length,i=r>1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(i=Ot.length>3&&\"function\"==typeof i?(r--,i):void 0,o&&function(t,n,e){if(!mt(e))return!1;var r=typeof n;return!!(\"number\"==r?vt(e)&&ct(n,e.length):\"string\"==r&&n in e)&&pt(e[n],t)}(n[0],n[1],o)&&(i=r<3?void 0:i,r=1),t=Object(t);++e<r;){var u=n[e];u&&Ot(t,u,e)}return t}));function At(t){return t}t.exports=xt},9440(t,n,e){t=e.nmd(t),function(){var r,i=\"Expected a function\",o=\"__lodash_hash_undefined__\",u=\"__lodash_placeholder__\",a=32,c=128,s=1/0,f=9007199254740991,l=NaN,p=4294967295,h=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],d=\"[object Arguments]\",v=\"[object Array]\",_=\"[object Boolean]\",y=\"[object Date]\",g=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",j=\"[object Number]\",O=\"[object Object]\",x=\"[object Promise]\",A=\"[object RegExp]\",S=\"[object Set]\",I=\"[object String]\",k=\"[object Symbol]\",E=\"[object WeakMap]\",C=\"[object ArrayBuffer]\",R=\"[object DataView]\",M=\"[object Float32Array]\",P=\"[object Float64Array]\",T=\"[object Int8Array]\",z=\"[object Int16Array]\",U=\"[object Int32Array]\",q=\"[object Uint8Array]\",F=\"[object Uint8ClampedArray]\",N=\"[object Uint16Array]\",B=\"[object Uint32Array]\",D=/\\b__p \\+= '';/g,L=/\\b(__p \\+=) '' \\+/g,$=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,W=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,V=RegExp(W.source),G=RegExp(H.source),K=/<%-([\\s\\S]+?)%>/g,J=/<%([\\s\\S]+?)%>/g,Z=/<%=([\\s\\S]+?)%>/g,X=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Y=/^\\w*$/,Q=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,nt=RegExp(tt.source),et=/^\\s+/,rt=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ot=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ut=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,st=/\\\\(\\\\)?/g,ft=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,lt=/\\w*$/,pt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,dt=/^\\[object .+?Constructor\\]$/,vt=/^0o[0-7]+$/i,_t=/^(?:0|[1-9]\\d*)$/,yt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,gt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",jt=\"\\\\u2700-\\\\u27bf\",Ot=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",xt=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",At=\"\\\\ufe0e\\\\ufe0f\",St=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",It=\"[\"+bt+\"]\",kt=\"[\"+St+\"]\",Et=\"[\"+wt+\"]\",Ct=\"\\\\d+\",Rt=\"[\"+jt+\"]\",Mt=\"[\"+Ot+\"]\",Pt=\"[^\"+bt+St+Ct+jt+Ot+xt+\"]\",Tt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",zt=\"[^\"+bt+\"]\",Ut=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",qt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ft=\"[\"+xt+\"]\",Nt=\"\\\\u200d\",Bt=\"(?:\"+Mt+\"|\"+Pt+\")\",Dt=\"(?:\"+Ft+\"|\"+Pt+\")\",Lt=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",$t=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Wt=\"(?:\"+Et+\"|\"+Tt+\")?\",Ht=\"[\"+At+\"]?\",Vt=Ht+Wt+\"(?:\"+Nt+\"(?:\"+[zt,Ut,qt].join(\"|\")+\")\"+Ht+Wt+\")*\",Gt=\"(?:\"+[Rt,Ut,qt].join(\"|\")+\")\"+Vt,Kt=\"(?:\"+[zt+Et+\"?\",Et,Ut,qt,It].join(\"|\")+\")\",Jt=RegExp(\"['’]\",\"g\"),Zt=RegExp(Et,\"g\"),Xt=RegExp(Tt+\"(?=\"+Tt+\")|\"+Kt+Vt,\"g\"),Yt=RegExp([Ft+\"?\"+Mt+\"+\"+Lt+\"(?=\"+[kt,Ft,\"$\"].join(\"|\")+\")\",Dt+\"+\"+$t+\"(?=\"+[kt,Ft+Bt,\"$\"].join(\"|\")+\")\",Ft+\"?\"+Bt+\"+\"+Lt,Ft+\"+\"+$t,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Ct,Gt].join(\"|\"),\"g\"),Qt=RegExp(\"[\"+Nt+bt+wt+At+\"]\"),tn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,nn=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],en=-1,rn={};rn[M]=rn[P]=rn[T]=rn[z]=rn[U]=rn[q]=rn[F]=rn[N]=rn[B]=!0,rn[d]=rn[v]=rn[C]=rn[_]=rn[R]=rn[y]=rn[g]=rn[m]=rn[w]=rn[j]=rn[O]=rn[A]=rn[S]=rn[I]=rn[E]=!1;var on={};on[d]=on[v]=on[C]=on[R]=on[_]=on[y]=on[M]=on[P]=on[T]=on[z]=on[U]=on[w]=on[j]=on[O]=on[A]=on[S]=on[I]=on[k]=on[q]=on[F]=on[N]=on[B]=!0,on[g]=on[m]=on[E]=!1;var un={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},an=parseFloat,cn=parseInt,sn=\"object\"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,fn=\"object\"==typeof self&&self&&self.Object===Object&&self,ln=sn||fn||Function(\"return this\")(),pn=n&&!n.nodeType&&n,hn=pn&&t&&!t.nodeType&&t,dn=hn&&hn.exports===pn,vn=dn&&sn.process,_n=function(){try{return hn&&hn.require&&hn.require(\"util\").types||vn&&vn.binding&&vn.binding(\"util\")}catch(t){}}(),yn=_n&&_n.isArrayBuffer,gn=_n&&_n.isDate,mn=_n&&_n.isMap,bn=_n&&_n.isRegExp,wn=_n&&_n.isSet,jn=_n&&_n.isTypedArray;function On(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}function xn(t,n,e,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var u=t[i];n(r,u,e(u),t)}return r}function An(t,n){for(var e=-1,r=null==t?0:t.length;++e<r&&!1!==n(t[e],e,t););return t}function Sn(t,n){for(var e=null==t?0:t.length;e--&&!1!==n(t[e],e,t););return t}function In(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(!n(t[e],e,t))return!1;return!0}function kn(t,n){for(var e=-1,r=null==t?0:t.length,i=0,o=[];++e<r;){var u=t[e];n(u,e,t)&&(o[i++]=u)}return o}function En(t,n){return!(null==t||!t.length)&&Nn(t,n,0)>-1}function Cn(t,n,e){for(var r=-1,i=null==t?0:t.length;++r<i;)if(e(n,t[r]))return!0;return!1}function Rn(t,n){for(var e=-1,r=null==t?0:t.length,i=Array(r);++e<r;)i[e]=n(t[e],e,t);return i}function Mn(t,n){for(var e=-1,r=n.length,i=t.length;++e<r;)t[i+e]=n[e];return t}function Pn(t,n,e,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(e=t[++i]);++i<o;)e=n(e,t[i],i,t);return e}function Tn(t,n,e,r){var i=null==t?0:t.length;for(r&&i&&(e=t[--i]);i--;)e=n(e,t[i],i,t);return e}function zn(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(n(t[e],e,t))return!0;return!1}var Un=$n(\"length\");function qn(t,n,e){var r;return e(t,function(t,e,i){if(n(t,e,i))return r=e,!1}),r}function Fn(t,n,e,r){for(var i=t.length,o=e+(r?1:-1);r?o--:++o<i;)if(n(t[o],o,t))return o;return-1}function Nn(t,n,e){return n==n?function(t,n,e){for(var r=e-1,i=t.length;++r<i;)if(t[r]===n)return r;return-1}(t,n,e):Fn(t,Dn,e)}function Bn(t,n,e,r){for(var i=e-1,o=t.length;++i<o;)if(r(t[i],n))return i;return-1}function Dn(t){return t!=t}function Ln(t,n){var e=null==t?0:t.length;return e?Vn(t,n)/e:l}function $n(t){return function(n){return null==n?r:n[t]}}function Wn(t){return function(n){return null==t?r:t[n]}}function Hn(t,n,e,r,i){return i(t,function(t,i,o){e=r?(r=!1,t):n(e,t,i,o)}),e}function Vn(t,n){for(var e,i=-1,o=t.length;++i<o;){var u=n(t[i]);u!==r&&(e=e===r?u:e+u)}return e}function Gn(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}function Kn(t){return t?t.slice(0,le(t)+1).replace(et,\"\"):t}function Jn(t){return function(n){return t(n)}}function Zn(t,n){return Rn(n,function(n){return t[n]})}function Xn(t,n){return t.has(n)}function Yn(t,n){for(var e=-1,r=t.length;++e<r&&Nn(n,t[e],0)>-1;);return e}function Qn(t,n){for(var e=t.length;e--&&Nn(n,t[e],0)>-1;);return e}var te=Wn({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),ne=Wn({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function ee(t){return\"\\\\\"+un[t]}function re(t){return Qt.test(t)}function ie(t){var n=-1,e=Array(t.size);return t.forEach(function(t,r){e[++n]=[r,t]}),e}function oe(t,n){return function(e){return t(n(e))}}function ue(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var a=t[e];a!==n&&a!==u||(t[e]=u,o[i++]=e)}return o}function ae(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=t}),e}function ce(t){var n=-1,e=Array(t.size);return t.forEach(function(t){e[++n]=[t,t]}),e}function se(t){return re(t)?function(t){for(var n=Xt.lastIndex=0;Xt.test(t);)++n;return n}(t):Un(t)}function fe(t){return re(t)?function(t){return t.match(Xt)||[]}(t):function(t){return t.split(\"\")}(t)}function le(t){for(var n=t.length;n--&&rt.test(t.charAt(n)););return n}var pe=Wn({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),he=function t(n){var e,rt=(n=null==n?ln:he.defaults(ln.Object(),n,he.pick(ln,nn))).Array,bt=n.Date,wt=n.Error,jt=n.Function,Ot=n.Math,xt=n.Object,At=n.RegExp,St=n.String,It=n.TypeError,kt=rt.prototype,Et=jt.prototype,Ct=xt.prototype,Rt=n[\"__core-js_shared__\"],Mt=Et.toString,Pt=Ct.hasOwnProperty,Tt=0,zt=(e=/[^.]+$/.exec(Rt&&Rt.keys&&Rt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+e:\"\",Ut=Ct.toString,qt=Mt.call(xt),Ft=ln._,Nt=At(\"^\"+Mt.call(Pt).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Bt=dn?n.Buffer:r,Dt=n.Symbol,Lt=n.Uint8Array,$t=Bt?Bt.allocUnsafe:r,Wt=oe(xt.getPrototypeOf,xt),Ht=xt.create,Vt=Ct.propertyIsEnumerable,Gt=kt.splice,Kt=Dt?Dt.isConcatSpreadable:r,Xt=Dt?Dt.iterator:r,Qt=Dt?Dt.toStringTag:r,un=function(){try{var t=co(xt,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),sn=n.clearTimeout!==ln.clearTimeout&&n.clearTimeout,fn=bt&&bt.now!==ln.Date.now&&bt.now,pn=n.setTimeout!==ln.setTimeout&&n.setTimeout,hn=Ot.ceil,vn=Ot.floor,_n=xt.getOwnPropertySymbols,Un=Bt?Bt.isBuffer:r,Wn=n.isFinite,de=kt.join,ve=oe(xt.keys,xt),_e=Ot.max,ye=Ot.min,ge=bt.now,me=n.parseInt,be=Ot.random,we=kt.reverse,je=co(n,\"DataView\"),Oe=co(n,\"Map\"),xe=co(n,\"Promise\"),Ae=co(n,\"Set\"),Se=co(n,\"WeakMap\"),Ie=co(xt,\"create\"),ke=Se&&new Se,Ee={},Ce=qo(je),Re=qo(Oe),Me=qo(xe),Pe=qo(Ae),Te=qo(Se),ze=Dt?Dt.prototype:r,Ue=ze?ze.valueOf:r,qe=ze?ze.toString:r;function Fe(t){if(ta(t)&&!$u(t)&&!(t instanceof Le)){if(t instanceof De)return t;if(Pt.call(t,\"__wrapped__\"))return Fo(t)}return new De(t)}var Ne=function(){function t(){}return function(n){if(!Qu(n))return{};if(Ht)return Ht(n);t.prototype=n;var e=new t;return t.prototype=r,e}}();function Be(){}function De(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=r}function Le(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function $e(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function We(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function He(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Ve(t){var n=-1,e=null==t?0:t.length;for(this.__data__=new He;++n<e;)this.add(t[n])}function Ge(t){var n=this.__data__=new We(t);this.size=n.size}function Ke(t,n){var e=$u(t),r=!e&&Lu(t),i=!e&&!r&&Gu(t),o=!e&&!r&&!i&&ca(t),u=e||r||i||o,a=u?Gn(t.length,St):[],c=a.length;for(var s in t)!n&&!Pt.call(t,s)||u&&(\"length\"==s||i&&(\"offset\"==s||\"parent\"==s)||o&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||_o(s,c))||a.push(s);return a}function Je(t){var n=t.length;return n?t[Hr(0,n-1)]:r}function Ze(t,n){return Mo(Si(t),or(n,0,t.length))}function Xe(t){return Mo(Si(t))}function Ye(t,n,e){(e!==r&&!Nu(t[n],e)||e===r&&!(n in t))&&rr(t,n,e)}function Qe(t,n,e){var i=t[n];Pt.call(t,n)&&Nu(i,e)&&(e!==r||n in t)||rr(t,n,e)}function tr(t,n){for(var e=t.length;e--;)if(Nu(t[e][0],n))return e;return-1}function nr(t,n,e,r){return fr(t,function(t,i,o){n(r,t,e(t),o)}),r}function er(t,n){return t&&Ii(n,Ca(n),t)}function rr(t,n,e){\"__proto__\"==n&&un?un(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}function ir(t,n){for(var e=-1,i=n.length,o=rt(i),u=null==t;++e<i;)o[e]=u?r:Aa(t,n[e]);return o}function or(t,n,e){return t==t&&(e!==r&&(t=t<=e?t:e),n!==r&&(t=t>=n?t:n)),t}function ur(t,n,e,i,o,u){var a,c=1&n,s=2&n,f=4&n;if(e&&(a=o?e(t,i,o,u):e(t)),a!==r)return a;if(!Qu(t))return t;var l=$u(t);if(l){if(a=function(t){var n=t.length,e=new t.constructor(n);return n&&\"string\"==typeof t[0]&&Pt.call(t,\"index\")&&(e.index=t.index,e.input=t.input),e}(t),!c)return Si(t,a)}else{var p=lo(t),h=p==m||p==b;if(Gu(t))return bi(t,c);if(p==O||p==d||h&&!o){if(a=s||h?{}:ho(t),!c)return s?function(t,n){return Ii(t,fo(t),n)}(t,function(t,n){return t&&Ii(n,Ra(n),t)}(a,t)):function(t,n){return Ii(t,so(t),n)}(t,er(a,t))}else{if(!on[p])return o?t:{};a=function(t,n,e){var r,i=t.constructor;switch(n){case C:return wi(t);case _:case y:return new i(+t);case R:return function(t,n){var e=n?wi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.byteLength)}(t,e);case M:case P:case T:case z:case U:case q:case F:case N:case B:return ji(t,e);case w:return new i;case j:case I:return new i(t);case A:return function(t){var n=new t.constructor(t.source,lt.exec(t));return n.lastIndex=t.lastIndex,n}(t);case S:return new i;case k:return r=t,Ue?xt(Ue.call(r)):{}}}(t,p,c)}}u||(u=new Ge);var v=u.get(t);if(v)return v;u.set(t,a),oa(t)?t.forEach(function(r){a.add(ur(r,n,e,r,t,u))}):na(t)&&t.forEach(function(r,i){a.set(i,ur(r,n,e,i,t,u))});var g=l?r:(f?s?no:to:s?Ra:Ca)(t);return An(g||t,function(r,i){g&&(r=t[i=r]),Qe(a,i,ur(r,n,e,i,t,u))}),a}function ar(t,n,e){var i=e.length;if(null==t)return!i;for(t=xt(t);i--;){var o=e[i],u=n[o],a=t[o];if(a===r&&!(o in t)||!u(a))return!1}return!0}function cr(t,n,e){if(\"function\"!=typeof t)throw new It(i);return ko(function(){t.apply(r,e)},n)}function sr(t,n,e,r){var i=-1,o=En,u=!0,a=t.length,c=[],s=n.length;if(!a)return c;e&&(n=Rn(n,Jn(e))),r?(o=Cn,u=!1):n.length>=200&&(o=Xn,u=!1,n=new Ve(n));t:for(;++i<a;){var f=t[i],l=null==e?f:e(f);if(f=r||0!==f?f:0,u&&l==l){for(var p=s;p--;)if(n[p]===l)continue t;c.push(f)}else o(n,l,r)||c.push(f)}return c}Fe.templateSettings={escape:K,evaluate:J,interpolate:Z,variable:\"\",imports:{_:Fe}},Fe.prototype=Be.prototype,Fe.prototype.constructor=Fe,De.prototype=Ne(Be.prototype),De.prototype.constructor=De,Le.prototype=Ne(Be.prototype),Le.prototype.constructor=Le,$e.prototype.clear=function(){this.__data__=Ie?Ie(null):{},this.size=0},$e.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},$e.prototype.get=function(t){var n=this.__data__;if(Ie){var e=n[t];return e===o?r:e}return Pt.call(n,t)?n[t]:r},$e.prototype.has=function(t){var n=this.__data__;return Ie?n[t]!==r:Pt.call(n,t)},$e.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=Ie&&n===r?o:n,this},We.prototype.clear=function(){this.__data__=[],this.size=0},We.prototype.delete=function(t){var n=this.__data__,e=tr(n,t);return!(e<0||(e==n.length-1?n.pop():Gt.call(n,e,1),--this.size,0))},We.prototype.get=function(t){var n=this.__data__,e=tr(n,t);return e<0?r:n[e][1]},We.prototype.has=function(t){return tr(this.__data__,t)>-1},We.prototype.set=function(t,n){var e=this.__data__,r=tr(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},He.prototype.clear=function(){this.size=0,this.__data__={hash:new $e,map:new(Oe||We),string:new $e}},He.prototype.delete=function(t){var n=uo(this,t).delete(t);return this.size-=n?1:0,n},He.prototype.get=function(t){return uo(this,t).get(t)},He.prototype.has=function(t){return uo(this,t).has(t)},He.prototype.set=function(t,n){var e=uo(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},Ve.prototype.add=Ve.prototype.push=function(t){return this.__data__.set(t,o),this},Ve.prototype.has=function(t){return this.__data__.has(t)},Ge.prototype.clear=function(){this.__data__=new We,this.size=0},Ge.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},Ge.prototype.get=function(t){return this.__data__.get(t)},Ge.prototype.has=function(t){return this.__data__.has(t)},Ge.prototype.set=function(t,n){var e=this.__data__;if(e instanceof We){var r=e.__data__;if(!Oe||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new He(r)}return e.set(t,n),this.size=e.size,this};var fr=Ci(gr),lr=Ci(mr,!0);function pr(t,n){var e=!0;return fr(t,function(t,r,i){return e=!!n(t,r,i)}),e}function hr(t,n,e){for(var i=-1,o=t.length;++i<o;){var u=t[i],a=n(u);if(null!=a&&(c===r?a==a&&!aa(a):e(a,c)))var c=a,s=u}return s}function dr(t,n){var e=[];return fr(t,function(t,r,i){n(t,r,i)&&e.push(t)}),e}function vr(t,n,e,r,i){var o=-1,u=t.length;for(e||(e=vo),i||(i=[]);++o<u;){var a=t[o];n>0&&e(a)?n>1?vr(a,n-1,e,r,i):Mn(i,a):r||(i[i.length]=a)}return i}var _r=Ri(),yr=Ri(!0);function gr(t,n){return t&&_r(t,n,Ca)}function mr(t,n){return t&&yr(t,n,Ca)}function br(t,n){return kn(n,function(n){return Zu(t[n])})}function wr(t,n){for(var e=0,i=(n=_i(n,t)).length;null!=t&&e<i;)t=t[Uo(n[e++])];return e&&e==i?t:r}function jr(t,n,e){var r=n(t);return $u(t)?r:Mn(r,e(t))}function Or(t){return null==t?t===r?\"[object Undefined]\":\"[object Null]\":Qt&&Qt in xt(t)?function(t){var n=Pt.call(t,Qt),e=t[Qt];try{t[Qt]=r;var i=!0}catch(t){}var o=Ut.call(t);return i&&(n?t[Qt]=e:delete t[Qt]),o}(t):function(t){return Ut.call(t)}(t)}function xr(t,n){return t>n}function Ar(t,n){return null!=t&&Pt.call(t,n)}function Sr(t,n){return null!=t&&n in xt(t)}function Ir(t,n,e){for(var i=e?Cn:En,o=t[0].length,u=t.length,a=u,c=rt(u),s=1/0,f=[];a--;){var l=t[a];a&&n&&(l=Rn(l,Jn(n))),s=ye(l.length,s),c[a]=!e&&(n||o>=120&&l.length>=120)?new Ve(a&&l):r}l=t[0];var p=-1,h=c[0];t:for(;++p<o&&f.length<s;){var d=l[p],v=n?n(d):d;if(d=e||0!==d?d:0,!(h?Xn(h,v):i(f,v,e))){for(a=u;--a;){var _=c[a];if(!(_?Xn(_,v):i(t[a],v,e)))continue t}h&&h.push(v),f.push(d)}}return f}function kr(t,n,e){var i=null==(t=Ao(t,n=_i(n,t)))?t:t[Uo(Jo(n))];return null==i?r:On(i,t,e)}function Er(t){return ta(t)&&Or(t)==d}function Cr(t,n,e,i,o){return t===n||(null==t||null==n||!ta(t)&&!ta(n)?t!=t&&n!=n:function(t,n,e,i,o,u){var a=$u(t),c=$u(n),s=a?v:lo(t),f=c?v:lo(n),l=(s=s==d?O:s)==O,p=(f=f==d?O:f)==O,h=s==f;if(h&&Gu(t)){if(!Gu(n))return!1;a=!0,l=!1}if(h&&!l)return u||(u=new Ge),a||ca(t)?Yi(t,n,e,i,o,u):function(t,n,e,r,i,o,u){switch(e){case R:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case C:return!(t.byteLength!=n.byteLength||!o(new Lt(t),new Lt(n)));case _:case y:case j:return Nu(+t,+n);case g:return t.name==n.name&&t.message==n.message;case A:case I:return t==n+\"\";case w:var a=ie;case S:var c=1&r;if(a||(a=ae),t.size!=n.size&&!c)return!1;var s=u.get(t);if(s)return s==n;r|=2,u.set(t,n);var f=Yi(a(t),a(n),r,i,o,u);return u.delete(t),f;case k:if(Ue)return Ue.call(t)==Ue.call(n)}return!1}(t,n,s,e,i,o,u);if(!(1&e)){var m=l&&Pt.call(t,\"__wrapped__\"),b=p&&Pt.call(n,\"__wrapped__\");if(m||b){var x=m?t.value():t,E=b?n.value():n;return u||(u=new Ge),o(x,E,e,i,u)}}return!!h&&(u||(u=new Ge),function(t,n,e,i,o,u){var a=1&e,c=to(t),s=c.length;if(s!=to(n).length&&!a)return!1;for(var f=s;f--;){var l=c[f];if(!(a?l in n:Pt.call(n,l)))return!1}var p=u.get(t),h=u.get(n);if(p&&h)return p==n&&h==t;var d=!0;u.set(t,n),u.set(n,t);for(var v=a;++f<s;){var _=t[l=c[f]],y=n[l];if(i)var g=a?i(y,_,l,n,t,u):i(_,y,l,t,n,u);if(!(g===r?_===y||o(_,y,e,i,u):g)){d=!1;break}v||(v=\"constructor\"==l)}if(d&&!v){var m=t.constructor,b=n.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in n)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(d=!1)}return u.delete(t),u.delete(n),d}(t,n,e,i,o,u))}(t,n,e,i,Cr,o))}function Rr(t,n,e,i){var o=e.length,u=o,a=!i;if(null==t)return!u;for(t=xt(t);o--;){var c=e[o];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++o<u;){var s=(c=e[o])[0],f=t[s],l=c[1];if(a&&c[2]){if(f===r&&!(s in t))return!1}else{var p=new Ge;if(i)var h=i(f,l,s,t,n,p);if(!(h===r?Cr(l,f,3,i,p):h))return!1}}return!0}function Mr(t){return!(!Qu(t)||(n=t,zt&&zt in n))&&(Zu(t)?Nt:dt).test(qo(t));var n}function Pr(t){return\"function\"==typeof t?t:null==t?ec:\"object\"==typeof t?$u(t)?Fr(t[0],t[1]):qr(t):lc(t)}function Tr(t){if(!wo(t))return ve(t);var n=[];for(var e in xt(t))Pt.call(t,e)&&\"constructor\"!=e&&n.push(e);return n}function zr(t,n){return t<n}function Ur(t,n){var e=-1,r=Hu(t)?rt(t.length):[];return fr(t,function(t,i,o){r[++e]=n(t,i,o)}),r}function qr(t){var n=ao(t);return 1==n.length&&n[0][2]?Oo(n[0][0],n[0][1]):function(e){return e===t||Rr(e,t,n)}}function Fr(t,n){return go(t)&&jo(n)?Oo(Uo(t),n):function(e){var i=Aa(e,t);return i===r&&i===n?Sa(e,t):Cr(n,i,3)}}function Nr(t,n,e,i,o){t!==n&&_r(n,function(u,a){if(o||(o=new Ge),Qu(u))!function(t,n,e,i,o,u,a){var c=So(t,e),s=So(n,e),f=a.get(s);if(f)Ye(t,e,f);else{var l=u?u(c,s,e+\"\",t,n,a):r,p=l===r;if(p){var h=$u(s),d=!h&&Gu(s),v=!h&&!d&&ca(s);l=s,h||d||v?$u(c)?l=c:Vu(c)?l=Si(c):d?(p=!1,l=bi(s,!0)):v?(p=!1,l=ji(s,!0)):l=[]:ra(s)||Lu(s)?(l=c,Lu(c)?l=_a(c):Qu(c)&&!Zu(c)||(l=ho(s))):p=!1}p&&(a.set(s,l),o(l,s,i,u,a),a.delete(s)),Ye(t,e,l)}}(t,n,a,e,Nr,i,o);else{var c=i?i(So(t,a),u,a+\"\",t,n,o):r;c===r&&(c=u),Ye(t,a,c)}},Ra)}function Br(t,n){var e=t.length;if(e)return _o(n+=n<0?e:0,e)?t[n]:r}function Dr(t,n,e){n=n.length?Rn(n,function(t){return $u(t)?function(n){return wr(n,1===t.length?t[0]:t)}:t}):[ec];var r=-1;n=Rn(n,Jn(oo()));var i=Ur(t,function(t,e,i){var o=Rn(n,function(n){return n(t)});return{criteria:o,index:++r,value:t}});return function(t){var n=t.length;for(t.sort(function(t,n){return function(t,n,e){for(var r=-1,i=t.criteria,o=n.criteria,u=i.length,a=e.length;++r<u;){var c=Oi(i[r],o[r]);if(c)return r>=a?c:c*(\"desc\"==e[r]?-1:1)}return t.index-n.index}(t,n,e)});n--;)t[n]=t[n].value;return t}(i)}function Lr(t,n,e){for(var r=-1,i=n.length,o={};++r<i;){var u=n[r],a=wr(t,u);e(a,u)&&Zr(o,_i(u,t),a)}return o}function $r(t,n,e,r){var i=r?Bn:Nn,o=-1,u=n.length,a=t;for(t===n&&(n=Si(n)),e&&(a=Rn(t,Jn(e)));++o<u;)for(var c=0,s=n[o],f=e?e(s):s;(c=i(a,f,c,r))>-1;)a!==t&&Gt.call(a,c,1),Gt.call(t,c,1);return t}function Wr(t,n){for(var e=t?n.length:0,r=e-1;e--;){var i=n[e];if(e==r||i!==o){var o=i;_o(i)?Gt.call(t,i,1):ci(t,i)}}return t}function Hr(t,n){return t+vn(be()*(n-t+1))}function Vr(t,n){var e=\"\";if(!t||n<1||n>f)return e;do{n%2&&(e+=t),(n=vn(n/2))&&(t+=t)}while(n);return e}function Gr(t,n){return Eo(xo(t,n,ec),t+\"\")}function Kr(t){return Je(Na(t))}function Jr(t,n){var e=Na(t);return Mo(e,or(n,0,e.length))}function Zr(t,n,e,i){if(!Qu(t))return t;for(var o=-1,u=(n=_i(n,t)).length,a=u-1,c=t;null!=c&&++o<u;){var s=Uo(n[o]),f=e;if(\"__proto__\"===s||\"constructor\"===s||\"prototype\"===s)return t;if(o!=a){var l=c[s];(f=i?i(l,s,c):r)===r&&(f=Qu(l)?l:_o(n[o+1])?[]:{})}Qe(c,s,f),c=c[s]}return t}var Xr=ke?function(t,n){return ke.set(t,n),t}:ec,Yr=un?function(t,n){return un(t,\"toString\",{configurable:!0,enumerable:!1,value:Qa(n),writable:!0})}:ec;function Qr(t){return Mo(Na(t))}function ti(t,n,e){var r=-1,i=t.length;n<0&&(n=-n>i?0:i+n),(e=e>i?i:e)<0&&(e+=i),i=n>e?0:e-n>>>0,n>>>=0;for(var o=rt(i);++r<i;)o[r]=t[r+n];return o}function ni(t,n){var e;return fr(t,function(t,r,i){return!(e=n(t,r,i))}),!!e}function ei(t,n,e){var r=0,i=null==t?r:t.length;if(\"number\"==typeof n&&n==n&&i<=2147483647){for(;r<i;){var o=r+i>>>1,u=t[o];null!==u&&!aa(u)&&(e?u<=n:u<n)?r=o+1:i=o}return i}return ri(t,n,ec,e)}function ri(t,n,e,i){var o=0,u=null==t?0:t.length;if(0===u)return 0;for(var a=(n=e(n))!=n,c=null===n,s=aa(n),f=n===r;o<u;){var l=vn((o+u)/2),p=e(t[l]),h=p!==r,d=null===p,v=p==p,_=aa(p);if(a)var y=i||v;else y=f?v&&(i||h):c?v&&h&&(i||!d):s?v&&h&&!d&&(i||!_):!d&&!_&&(i?p<=n:p<n);y?o=l+1:u=l}return ye(u,4294967294)}function ii(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var u=t[e],a=n?n(u):u;if(!e||!Nu(a,c)){var c=a;o[i++]=0===u?0:u}}return o}function oi(t){return\"number\"==typeof t?t:aa(t)?l:+t}function ui(t){if(\"string\"==typeof t)return t;if($u(t))return Rn(t,ui)+\"\";if(aa(t))return qe?qe.call(t):\"\";var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function ai(t,n,e){var r=-1,i=En,o=t.length,u=!0,a=[],c=a;if(e)u=!1,i=Cn;else if(o>=200){var s=n?null:Vi(t);if(s)return ae(s);u=!1,i=Xn,c=new Ve}else c=n?[]:a;t:for(;++r<o;){var f=t[r],l=n?n(f):f;if(f=e||0!==f?f:0,u&&l==l){for(var p=c.length;p--;)if(c[p]===l)continue t;n&&c.push(l),a.push(f)}else i(c,l,e)||(c!==a&&c.push(l),a.push(f))}return a}function ci(t,n){var e=-1,r=(n=_i(n,t)).length;if(!r)return!0;for(;++e<r;){var i=Uo(n[e]);if(\"__proto__\"===i&&!Pt.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&e<r-1)return!1}var o=Ao(t,n);return null==o||delete o[Uo(Jo(n))]}function si(t,n,e,r){return Zr(t,n,e(wr(t,n)),r)}function fi(t,n,e,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&n(t[o],o,t););return e?ti(t,r?0:o,r?o+1:i):ti(t,r?o+1:0,r?i:o)}function li(t,n){var e=t;return e instanceof Le&&(e=e.value()),Pn(n,function(t,n){return n.func.apply(n.thisArg,Mn([t],n.args))},e)}function pi(t,n,e){var r=t.length;if(r<2)return r?ai(t[0]):[];for(var i=-1,o=rt(r);++i<r;)for(var u=t[i],a=-1;++a<r;)a!=i&&(o[i]=sr(o[i]||u,t[a],n,e));return ai(vr(o,1),n,e)}function hi(t,n,e){for(var i=-1,o=t.length,u=n.length,a={};++i<o;){var c=i<u?n[i]:r;e(a,t[i],c)}return a}function di(t){return Vu(t)?t:[]}function vi(t){return\"function\"==typeof t?t:ec}function _i(t,n){return $u(t)?t:go(t,n)?[t]:zo(ya(t))}var yi=Gr;function gi(t,n,e){var i=t.length;return e=e===r?i:e,!n&&e>=i?t:ti(t,n,e)}var mi=sn||function(t){return ln.clearTimeout(t)};function bi(t,n){if(n)return t.slice();var e=t.length,r=$t?$t(e):new t.constructor(e);return t.copy(r),r}function wi(t){var n=new t.constructor(t.byteLength);return new Lt(n).set(new Lt(t)),n}function ji(t,n){var e=n?wi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.length)}function Oi(t,n){if(t!==n){var e=t!==r,i=null===t,o=t==t,u=aa(t),a=n!==r,c=null===n,s=n==n,f=aa(n);if(!c&&!f&&!u&&t>n||u&&a&&s&&!c&&!f||i&&a&&s||!e&&s||!o)return 1;if(!i&&!u&&!f&&t<n||f&&e&&o&&!i&&!u||c&&e&&o||!a&&o||!s)return-1}return 0}function xi(t,n,e,r){for(var i=-1,o=t.length,u=e.length,a=-1,c=n.length,s=_e(o-u,0),f=rt(c+s),l=!r;++a<c;)f[a]=n[a];for(;++i<u;)(l||i<o)&&(f[e[i]]=t[i]);for(;s--;)f[a++]=t[i++];return f}function Ai(t,n,e,r){for(var i=-1,o=t.length,u=-1,a=e.length,c=-1,s=n.length,f=_e(o-a,0),l=rt(f+s),p=!r;++i<f;)l[i]=t[i];for(var h=i;++c<s;)l[h+c]=n[c];for(;++u<a;)(p||i<o)&&(l[h+e[u]]=t[i++]);return l}function Si(t,n){var e=-1,r=t.length;for(n||(n=rt(r));++e<r;)n[e]=t[e];return n}function Ii(t,n,e,i){var o=!e;e||(e={});for(var u=-1,a=n.length;++u<a;){var c=n[u],s=i?i(e[c],t[c],c,e,t):r;s===r&&(s=t[c]),o?rr(e,c,s):Qe(e,c,s)}return e}function ki(t,n){return function(e,r){var i=$u(e)?xn:nr,o=n?n():{};return i(e,t,oo(r,2),o)}}function Ei(t){return Gr(function(n,e){var i=-1,o=e.length,u=o>1?e[o-1]:r,a=o>2?e[2]:r;for(u=t.length>3&&\"function\"==typeof u?(o--,u):r,a&&yo(e[0],e[1],a)&&(u=o<3?r:u,o=1),n=xt(n);++i<o;){var c=e[i];c&&t(n,c,i,u)}return n})}function Ci(t,n){return function(e,r){if(null==e)return e;if(!Hu(e))return t(e,r);for(var i=e.length,o=n?i:-1,u=xt(e);(n?o--:++o<i)&&!1!==r(u[o],o,u););return e}}function Ri(t){return function(n,e,r){for(var i=-1,o=xt(n),u=r(n),a=u.length;a--;){var c=u[t?a:++i];if(!1===e(o[c],c,o))break}return n}}function Mi(t){return function(n){var e=re(n=ya(n))?fe(n):r,i=e?e[0]:n.charAt(0),o=e?gi(e,1).join(\"\"):n.slice(1);return i[t]()+o}}function Pi(t){return function(n){return Pn(Za(La(n).replace(Jt,\"\")),t,\"\")}}function Ti(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var e=Ne(t.prototype),r=t.apply(e,n);return Qu(r)?r:e}}function zi(t){return function(n,e,i){var o=xt(n);if(!Hu(n)){var u=oo(e,3);n=Ca(n),e=function(t){return u(o[t],t,o)}}var a=t(n,e,i);return a>-1?o[u?n[a]:a]:r}}function Ui(t){return Qi(function(n){var e=n.length,o=e,u=De.prototype.thru;for(t&&n.reverse();o--;){var a=n[o];if(\"function\"!=typeof a)throw new It(i);if(u&&!c&&\"wrapper\"==ro(a))var c=new De([],!0)}for(o=c?o:e;++o<e;){var s=ro(a=n[o]),f=\"wrapper\"==s?eo(a):r;c=f&&mo(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?c[ro(f[0])].apply(c,f[3]):1==a.length&&mo(a)?c[s]():c.thru(a)}return function(){var t=arguments,r=t[0];if(c&&1==t.length&&$u(r))return c.plant(r).value();for(var i=0,o=e?n[i].apply(this,t):r;++i<e;)o=n[i].call(this,o);return o}})}function qi(t,n,e,i,o,u,a,s,f,l){var p=n&c,h=1&n,d=2&n,v=24&n,_=512&n,y=d?r:Ti(t);return function c(){for(var g=arguments.length,m=rt(g),b=g;b--;)m[b]=arguments[b];if(v)var w=io(c),j=function(t,n){for(var e=t.length,r=0;e--;)t[e]===n&&++r;return r}(m,w);if(i&&(m=xi(m,i,o,v)),u&&(m=Ai(m,u,a,v)),g-=j,v&&g<l){var O=ue(m,w);return Wi(t,n,qi,c.placeholder,e,m,O,s,f,l-g)}var x=h?e:this,A=d?x[t]:t;return g=m.length,s?m=function(t,n){for(var e=t.length,i=ye(n.length,e),o=Si(t);i--;){var u=n[i];t[i]=_o(u,e)?o[u]:r}return t}(m,s):_&&g>1&&m.reverse(),p&&f<g&&(m.length=f),this&&this!==ln&&this instanceof c&&(A=y||Ti(A)),A.apply(x,m)}}function Fi(t,n){return function(e,r){return function(t,n,e,r){return gr(t,function(t,i,o){n(r,e(t),i,o)}),r}(e,t,n(r),{})}}function Ni(t,n){return function(e,i){var o;if(e===r&&i===r)return n;if(e!==r&&(o=e),i!==r){if(o===r)return i;\"string\"==typeof e||\"string\"==typeof i?(e=ui(e),i=ui(i)):(e=oi(e),i=oi(i)),o=t(e,i)}return o}}function Bi(t){return Qi(function(n){return n=Rn(n,Jn(oo())),Gr(function(e){var r=this;return t(n,function(t){return On(t,r,e)})})})}function Di(t,n){var e=(n=n===r?\" \":ui(n)).length;if(e<2)return e?Vr(n,t):n;var i=Vr(n,hn(t/se(n)));return re(n)?gi(fe(i),0,t).join(\"\"):i.slice(0,t)}function Li(t){return function(n,e,i){return i&&\"number\"!=typeof i&&yo(n,e,i)&&(e=i=r),n=pa(n),e===r?(e=n,n=0):e=pa(e),function(t,n,e,r){for(var i=-1,o=_e(hn((n-t)/(e||1)),0),u=rt(o);o--;)u[r?o:++i]=t,t+=e;return u}(n,e,i=i===r?n<e?1:-1:pa(i),t)}}function $i(t){return function(n,e){return\"string\"==typeof n&&\"string\"==typeof e||(n=va(n),e=va(e)),t(n,e)}}function Wi(t,n,e,i,o,u,c,s,f,l){var p=8&n;n|=p?a:64,4&(n&=~(p?64:a))||(n&=-4);var h=[t,n,o,p?u:r,p?c:r,p?r:u,p?r:c,s,f,l],d=e.apply(r,h);return mo(t)&&Io(d,h),d.placeholder=i,Co(d,t,n)}function Hi(t){var n=Ot[t];return function(t,e){if(t=va(t),(e=null==e?0:ye(ha(e),292))&&Wn(t)){var r=(ya(t)+\"e\").split(\"e\");return+((r=(ya(n(r[0]+\"e\"+(+r[1]+e)))+\"e\").split(\"e\"))[0]+\"e\"+(+r[1]-e))}return n(t)}}var Vi=Ae&&1/ae(new Ae([,-0]))[1]==s?function(t){return new Ae(t)}:ac;function Gi(t){return function(n){var e=lo(n);return e==w?ie(n):e==S?ce(n):function(t,n){return Rn(n,function(n){return[n,t[n]]})}(n,t(n))}}function Ki(t,n,e,o,s,f,l,p){var h=2&n;if(!h&&\"function\"!=typeof t)throw new It(i);var d=o?o.length:0;if(d||(n&=-97,o=s=r),l=l===r?l:_e(ha(l),0),p=p===r?p:ha(p),d-=s?s.length:0,64&n){var v=o,_=s;o=s=r}var y=h?r:eo(t),g=[t,n,e,o,s,v,_,f,l,p];if(y&&function(t,n){var e=t[1],r=n[1],i=e|r,o=i<131,a=r==c&&8==e||r==c&&256==e&&t[7].length<=n[8]||384==r&&n[7].length<=n[8]&&8==e;if(!o&&!a)return t;1&r&&(t[2]=n[2],i|=1&e?0:4);var s=n[3];if(s){var f=t[3];t[3]=f?xi(f,s,n[4]):s,t[4]=f?ue(t[3],u):n[4]}(s=n[5])&&(f=t[5],t[5]=f?Ai(f,s,n[6]):s,t[6]=f?ue(t[5],u):n[6]),(s=n[7])&&(t[7]=s),r&c&&(t[8]=null==t[8]?n[8]:ye(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i}(g,y),t=g[0],n=g[1],e=g[2],o=g[3],s=g[4],!(p=g[9]=g[9]===r?h?0:t.length:_e(g[9]-d,0))&&24&n&&(n&=-25),n&&1!=n)m=8==n||16==n?function(t,n,e){var i=Ti(t);return function o(){for(var u=arguments.length,a=rt(u),c=u,s=io(o);c--;)a[c]=arguments[c];var f=u<3&&a[0]!==s&&a[u-1]!==s?[]:ue(a,s);return(u-=f.length)<e?Wi(t,n,qi,o.placeholder,r,a,f,r,r,e-u):On(this&&this!==ln&&this instanceof o?i:t,this,a)}}(t,n,p):n!=a&&33!=n||s.length?qi.apply(r,g):function(t,n,e,r){var i=1&n,o=Ti(t);return function n(){for(var u=-1,a=arguments.length,c=-1,s=r.length,f=rt(s+a),l=this&&this!==ln&&this instanceof n?o:t;++c<s;)f[c]=r[c];for(;a--;)f[c++]=arguments[++u];return On(l,i?e:this,f)}}(t,n,e,o);else var m=function(t,n,e){var r=1&n,i=Ti(t);return function n(){return(this&&this!==ln&&this instanceof n?i:t).apply(r?e:this,arguments)}}(t,n,e);return Co((y?Xr:Io)(m,g),t,n)}function Ji(t,n,e,i){return t===r||Nu(t,Ct[e])&&!Pt.call(i,e)?n:t}function Zi(t,n,e,i,o,u){return Qu(t)&&Qu(n)&&(u.set(n,t),Nr(t,n,r,Zi,u),u.delete(n)),t}function Xi(t){return ra(t)?r:t}function Yi(t,n,e,i,o,u){var a=1&e,c=t.length,s=n.length;if(c!=s&&!(a&&s>c))return!1;var f=u.get(t),l=u.get(n);if(f&&l)return f==n&&l==t;var p=-1,h=!0,d=2&e?new Ve:r;for(u.set(t,n),u.set(n,t);++p<c;){var v=t[p],_=n[p];if(i)var y=a?i(_,v,p,n,t,u):i(v,_,p,t,n,u);if(y!==r){if(y)continue;h=!1;break}if(d){if(!zn(n,function(t,n){if(!Xn(d,n)&&(v===t||o(v,t,e,i,u)))return d.push(n)})){h=!1;break}}else if(v!==_&&!o(v,_,e,i,u)){h=!1;break}}return u.delete(t),u.delete(n),h}function Qi(t){return Eo(xo(t,r,Wo),t+\"\")}function to(t){return jr(t,Ca,so)}function no(t){return jr(t,Ra,fo)}var eo=ke?function(t){return ke.get(t)}:ac;function ro(t){for(var n=t.name+\"\",e=Ee[n],r=Pt.call(Ee,n)?e.length:0;r--;){var i=e[r],o=i.func;if(null==o||o==t)return i.name}return n}function io(t){return(Pt.call(Fe,\"placeholder\")?Fe:t).placeholder}function oo(){var t=Fe.iteratee||rc;return t=t===rc?Pr:t,arguments.length?t(arguments[0],arguments[1]):t}function uo(t,n){var e,r,i=t.__data__;return(\"string\"==(r=typeof(e=n))||\"number\"==r||\"symbol\"==r||\"boolean\"==r?\"__proto__\"!==e:null===e)?i[\"string\"==typeof n?\"string\":\"hash\"]:i.map}function ao(t){for(var n=Ca(t),e=n.length;e--;){var r=n[e],i=t[r];n[e]=[r,i,jo(i)]}return n}function co(t,n){var e=function(t,n){return null==t?r:t[n]}(t,n);return Mr(e)?e:r}var so=_n?function(t){return null==t?[]:(t=xt(t),kn(_n(t),function(n){return Vt.call(t,n)}))}:dc,fo=_n?function(t){for(var n=[];t;)Mn(n,so(t)),t=Wt(t);return n}:dc,lo=Or;function po(t,n,e){for(var r=-1,i=(n=_i(n,t)).length,o=!1;++r<i;){var u=Uo(n[r]);if(!(o=null!=t&&e(t,u)))break;t=t[u]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Yu(i)&&_o(u,i)&&($u(t)||Lu(t))}function ho(t){return\"function\"!=typeof t.constructor||wo(t)?{}:Ne(Wt(t))}function vo(t){return $u(t)||Lu(t)||!!(Kt&&t&&t[Kt])}function _o(t,n){var e=typeof t;return!!(n=n??f)&&(\"number\"==e||\"symbol\"!=e&&_t.test(t))&&t>-1&&t%1==0&&t<n}function yo(t,n,e){if(!Qu(e))return!1;var r=typeof n;return!!(\"number\"==r?Hu(e)&&_o(n,e.length):\"string\"==r&&n in e)&&Nu(e[n],t)}function go(t,n){if($u(t))return!1;var e=typeof t;return!(\"number\"!=e&&\"symbol\"!=e&&\"boolean\"!=e&&null!=t&&!aa(t))||Y.test(t)||!X.test(t)||null!=n&&t in xt(n)}function mo(t){var n=ro(t),e=Fe[n];if(\"function\"!=typeof e||!(n in Le.prototype))return!1;if(t===e)return!0;var r=eo(e);return!!r&&t===r[0]}(je&&lo(new je(new ArrayBuffer(1)))!=R||Oe&&lo(new Oe)!=w||xe&&lo(xe.resolve())!=x||Ae&&lo(new Ae)!=S||Se&&lo(new Se)!=E)&&(lo=function(t){var n=Or(t),e=n==O?t.constructor:r,i=e?qo(e):\"\";if(i)switch(i){case Ce:return R;case Re:return w;case Me:return x;case Pe:return S;case Te:return E}return n});var bo=Rt?Zu:vc;function wo(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||Ct)}function jo(t){return t==t&&!Qu(t)}function Oo(t,n){return function(e){return null!=e&&e[t]===n&&(n!==r||t in xt(e))}}function xo(t,n,e){return n=_e(n===r?t.length-1:n,0),function(){for(var r=arguments,i=-1,o=_e(r.length-n,0),u=rt(o);++i<o;)u[i]=r[n+i];i=-1;for(var a=rt(n+1);++i<n;)a[i]=r[i];return a[n]=e(u),On(t,this,a)}}function Ao(t,n){return n.length<2?t:wr(t,ti(n,0,-1))}function So(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var Io=Ro(Xr),ko=pn||function(t,n){return ln.setTimeout(t,n)},Eo=Ro(Yr);function Co(t,n,e){var r=n+\"\";return Eo(t,function(t,n){var e=n.length;if(!e)return t;var r=e-1;return n[r]=(e>1?\"& \":\"\")+n[r],n=n.join(e>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+n+\"] */\\n\")}(r,function(t,n){return An(h,function(e){var r=\"_.\"+e[0];n&e[1]&&!En(t,r)&&t.push(r)}),t.sort()}(function(t){var n=t.match(ot);return n?n[1].split(ut):[]}(r),e)))}function Ro(t){var n=0,e=0;return function(){var i=ge(),o=16-(i-e);if(e=i,o>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(r,arguments)}}function Mo(t,n){var e=-1,i=t.length,o=i-1;for(n=n===r?i:n;++e<n;){var u=Hr(e,o),a=t[u];t[u]=t[e],t[e]=a}return t.length=n,t}var Po,To,zo=(Po=Pu(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(\"\"),t.replace(Q,function(t,e,r,i){n.push(r?i.replace(st,\"$1\"):e||t)}),n},function(t){return 500===To.size&&To.clear(),t}),To=Po.cache,Po);function Uo(t){if(\"string\"==typeof t||aa(t))return t;var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function qo(t){if(null!=t){try{return Mt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Fo(t){if(t instanceof Le)return t.clone();var n=new De(t.__wrapped__,t.__chain__);return n.__actions__=Si(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}var No=Gr(function(t,n){return Vu(t)?sr(t,vr(n,1,Vu,!0)):[]}),Bo=Gr(function(t,n){var e=Jo(n);return Vu(e)&&(e=r),Vu(t)?sr(t,vr(n,1,Vu,!0),oo(e,2)):[]}),Do=Gr(function(t,n){var e=Jo(n);return Vu(e)&&(e=r),Vu(t)?sr(t,vr(n,1,Vu,!0),r,e):[]});function Lo(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:ha(e);return i<0&&(i=_e(r+i,0)),Fn(t,oo(n,3),i)}function $o(t,n,e){var i=null==t?0:t.length;if(!i)return-1;var o=i-1;return e!==r&&(o=ha(e),o=e<0?_e(i+o,0):ye(o,i-1)),Fn(t,oo(n,3),o,!0)}function Wo(t){return null!=t&&t.length?vr(t,1):[]}function Ho(t){return t&&t.length?t[0]:r}var Vo=Gr(function(t){var n=Rn(t,di);return n.length&&n[0]===t[0]?Ir(n):[]}),Go=Gr(function(t){var n=Jo(t),e=Rn(t,di);return n===Jo(e)?n=r:e.pop(),e.length&&e[0]===t[0]?Ir(e,oo(n,2)):[]}),Ko=Gr(function(t){var n=Jo(t),e=Rn(t,di);return(n=\"function\"==typeof n?n:r)&&e.pop(),e.length&&e[0]===t[0]?Ir(e,r,n):[]});function Jo(t){var n=null==t?0:t.length;return n?t[n-1]:r}var Zo=Gr(Xo);function Xo(t,n){return t&&t.length&&n&&n.length?$r(t,n):t}var Yo=Qi(function(t,n){var e=null==t?0:t.length,r=ir(t,n);return Wr(t,Rn(n,function(t){return _o(t,e)?+t:t}).sort(Oi)),r});function Qo(t){return null==t?t:we.call(t)}var tu=Gr(function(t){return ai(vr(t,1,Vu,!0))}),nu=Gr(function(t){var n=Jo(t);return Vu(n)&&(n=r),ai(vr(t,1,Vu,!0),oo(n,2))}),eu=Gr(function(t){var n=Jo(t);return n=\"function\"==typeof n?n:r,ai(vr(t,1,Vu,!0),r,n)});function ru(t){if(!t||!t.length)return[];var n=0;return t=kn(t,function(t){if(Vu(t))return n=_e(t.length,n),!0}),Gn(n,function(n){return Rn(t,$n(n))})}function iu(t,n){if(!t||!t.length)return[];var e=ru(t);return null==n?e:Rn(e,function(t){return On(n,r,t)})}var ou=Gr(function(t,n){return Vu(t)?sr(t,n):[]}),uu=Gr(function(t){return pi(kn(t,Vu))}),au=Gr(function(t){var n=Jo(t);return Vu(n)&&(n=r),pi(kn(t,Vu),oo(n,2))}),cu=Gr(function(t){var n=Jo(t);return n=\"function\"==typeof n?n:r,pi(kn(t,Vu),r,n)}),su=Gr(ru),fu=Gr(function(t){var n=t.length,e=n>1?t[n-1]:r;return e=\"function\"==typeof e?(t.pop(),e):r,iu(t,e)});function lu(t){var n=Fe(t);return n.__chain__=!0,n}function pu(t,n){return n(t)}var hu=Qi(function(t){var n=t.length,e=n?t[0]:0,i=this.__wrapped__,o=function(n){return ir(n,t)};return!(n>1||this.__actions__.length)&&i instanceof Le&&_o(e)?((i=i.slice(e,+e+(n?1:0))).__actions__.push({func:pu,args:[o],thisArg:r}),new De(i,this.__chain__).thru(function(t){return n&&!t.length&&t.push(r),t})):this.thru(o)}),du=ki(function(t,n,e){Pt.call(t,e)?++t[e]:rr(t,e,1)}),vu=zi(Lo),_u=zi($o);function yu(t,n){return($u(t)?An:fr)(t,oo(n,3))}function gu(t,n){return($u(t)?Sn:lr)(t,oo(n,3))}var mu=ki(function(t,n,e){Pt.call(t,e)?t[e].push(n):rr(t,e,[n])}),bu=Gr(function(t,n,e){var r=-1,i=\"function\"==typeof n,o=Hu(t)?rt(t.length):[];return fr(t,function(t){o[++r]=i?On(n,t,e):kr(t,n,e)}),o}),wu=ki(function(t,n,e){rr(t,e,n)});function ju(t,n){return($u(t)?Rn:Ur)(t,oo(n,3))}var Ou=ki(function(t,n,e){t[e?0:1].push(n)},function(){return[[],[]]}),xu=Gr(function(t,n){if(null==t)return[];var e=n.length;return e>1&&yo(t,n[0],n[1])?n=[]:e>2&&yo(n[0],n[1],n[2])&&(n=[n[0]]),Dr(t,vr(n,1),[])}),Au=fn||function(){return ln.Date.now()};function Su(t,n,e){return n=e?r:n,n=t&&null==n?t.length:n,Ki(t,c,r,r,r,r,n)}function Iu(t,n){var e;if(\"function\"!=typeof n)throw new It(i);return t=ha(t),function(){return--t>0&&(e=n.apply(this,arguments)),t<=1&&(n=r),e}}var ku=Gr(function(t,n,e){var r=1;if(e.length){var i=ue(e,io(ku));r|=a}return Ki(t,r,n,e,i)}),Eu=Gr(function(t,n,e){var r=3;if(e.length){var i=ue(e,io(Eu));r|=a}return Ki(n,r,t,e,i)});function Cu(t,n,e){var o,u,a,c,s,f,l=0,p=!1,h=!1,d=!0;if(\"function\"!=typeof t)throw new It(i);function v(n){var e=o,i=u;return o=u=r,l=n,c=t.apply(i,e)}function _(t){var e=t-f;return f===r||e>=n||e<0||h&&t-l>=a}function y(){var t=Au();if(_(t))return g(t);s=ko(y,function(t){var e=n-(t-f);return h?ye(e,a-(t-l)):e}(t))}function g(t){return s=r,d&&o?v(t):(o=u=r,c)}function m(){var t=Au(),e=_(t);if(o=arguments,u=this,f=t,e){if(s===r)return function(t){return l=t,s=ko(y,n),p?v(t):c}(f);if(h)return mi(s),s=ko(y,n),v(f)}return s===r&&(s=ko(y,n)),c}return n=va(n)||0,Qu(e)&&(p=!!e.leading,a=(h=\"maxWait\"in e)?_e(va(e.maxWait)||0,n):a,d=\"trailing\"in e?!!e.trailing:d),m.cancel=function(){s!==r&&mi(s),l=0,o=f=u=s=r},m.flush=function(){return s===r?c:g(Au())},m}var Ru=Gr(function(t,n){return cr(t,1,n)}),Mu=Gr(function(t,n,e){return cr(t,va(n)||0,e)});function Pu(t,n){if(\"function\"!=typeof t||null!=n&&\"function\"!=typeof n)throw new It(i);var e=function(){var r=arguments,i=n?n.apply(this,r):r[0],o=e.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return e.cache=o.set(i,u)||o,u};return e.cache=new(Pu.Cache||He),e}function Tu(t){if(\"function\"!=typeof t)throw new It(i);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}Pu.Cache=He;var zu=yi(function(t,n){var e=(n=1==n.length&&$u(n[0])?Rn(n[0],Jn(oo())):Rn(vr(n,1),Jn(oo()))).length;return Gr(function(r){for(var i=-1,o=ye(r.length,e);++i<o;)r[i]=n[i].call(this,r[i]);return On(t,this,r)})}),Uu=Gr(function(t,n){var e=ue(n,io(Uu));return Ki(t,a,r,n,e)}),qu=Gr(function(t,n){var e=ue(n,io(qu));return Ki(t,64,r,n,e)}),Fu=Qi(function(t,n){return Ki(t,256,r,r,r,n)});function Nu(t,n){return t===n||t!=t&&n!=n}var Bu=$i(xr),Du=$i(function(t,n){return t>=n}),Lu=Er(function(){return arguments}())?Er:function(t){return ta(t)&&Pt.call(t,\"callee\")&&!Vt.call(t,\"callee\")},$u=rt.isArray,Wu=yn?Jn(yn):function(t){return ta(t)&&Or(t)==C};function Hu(t){return null!=t&&Yu(t.length)&&!Zu(t)}function Vu(t){return ta(t)&&Hu(t)}var Gu=Un||vc,Ku=gn?Jn(gn):function(t){return ta(t)&&Or(t)==y};function Ju(t){if(!ta(t))return!1;var n=Or(t);return n==g||\"[object DOMException]\"==n||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ra(t)}function Zu(t){if(!Qu(t))return!1;var n=Or(t);return n==m||n==b||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function Xu(t){return\"number\"==typeof t&&t==ha(t)}function Yu(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=f}function Qu(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function ta(t){return null!=t&&\"object\"==typeof t}var na=mn?Jn(mn):function(t){return ta(t)&&lo(t)==w};function ea(t){return\"number\"==typeof t||ta(t)&&Or(t)==j}function ra(t){if(!ta(t)||Or(t)!=O)return!1;var n=Wt(t);if(null===n)return!0;var e=Pt.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof e&&e instanceof e&&Mt.call(e)==qt}var ia=bn?Jn(bn):function(t){return ta(t)&&Or(t)==A},oa=wn?Jn(wn):function(t){return ta(t)&&lo(t)==S};function ua(t){return\"string\"==typeof t||!$u(t)&&ta(t)&&Or(t)==I}function aa(t){return\"symbol\"==typeof t||ta(t)&&Or(t)==k}var ca=jn?Jn(jn):function(t){return ta(t)&&Yu(t.length)&&!!rn[Or(t)]},sa=$i(zr),fa=$i(function(t,n){return t<=n});function la(t){if(!t)return[];if(Hu(t))return ua(t)?fe(t):Si(t);if(Xt&&t[Xt])return function(t){for(var n,e=[];!(n=t.next()).done;)e.push(n.value);return e}(t[Xt]());var n=lo(t);return(n==w?ie:n==S?ae:Na)(t)}function pa(t){return t?(t=va(t))===s||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ha(t){var n=pa(t),e=n%1;return n==n?e?n-e:n:0}function da(t){return t?or(ha(t),0,p):0}function va(t){if(\"number\"==typeof t)return t;if(aa(t))return l;if(Qu(t)){var n=\"function\"==typeof t.valueOf?t.valueOf():t;t=Qu(n)?n+\"\":n}if(\"string\"!=typeof t)return 0===t?t:+t;t=Kn(t);var e=ht.test(t);return e||vt.test(t)?cn(t.slice(2),e?2:8):pt.test(t)?l:+t}function _a(t){return Ii(t,Ra(t))}function ya(t){return null==t?\"\":ui(t)}var ga=Ei(function(t,n){if(wo(n)||Hu(n))Ii(n,Ca(n),t);else for(var e in n)Pt.call(n,e)&&Qe(t,e,n[e])}),ma=Ei(function(t,n){Ii(n,Ra(n),t)}),ba=Ei(function(t,n,e,r){Ii(n,Ra(n),t,r)}),wa=Ei(function(t,n,e,r){Ii(n,Ca(n),t,r)}),ja=Qi(ir),Oa=Gr(function(t,n){t=xt(t);var e=-1,i=n.length,o=i>2?n[2]:r;for(o&&yo(n[0],n[1],o)&&(i=1);++e<i;)for(var u=n[e],a=Ra(u),c=-1,s=a.length;++c<s;){var f=a[c],l=t[f];(l===r||Nu(l,Ct[f])&&!Pt.call(t,f))&&(t[f]=u[f])}return t}),xa=Gr(function(t){return t.push(r,Zi),On(Pa,r,t)});function Aa(t,n,e){var i=null==t?r:wr(t,n);return i===r?e:i}function Sa(t,n){return null!=t&&po(t,n,Sr)}var Ia=Fi(function(t,n,e){null!=n&&\"function\"!=typeof n.toString&&(n=Ut.call(n)),t[n]=e},Qa(ec)),ka=Fi(function(t,n,e){null!=n&&\"function\"!=typeof n.toString&&(n=Ut.call(n)),Pt.call(t,n)?t[n].push(e):t[n]=[e]},oo),Ea=Gr(kr);function Ca(t){return Hu(t)?Ke(t):Tr(t)}function Ra(t){return Hu(t)?Ke(t,!0):function(t){if(!Qu(t))return function(t){var n=[];if(null!=t)for(var e in xt(t))n.push(e);return n}(t);var n=wo(t),e=[];for(var r in t)(\"constructor\"!=r||!n&&Pt.call(t,r))&&e.push(r);return e}(t)}var Ma=Ei(function(t,n,e){Nr(t,n,e)}),Pa=Ei(function(t,n,e,r){Nr(t,n,e,r)}),Ta=Qi(function(t,n){var e={};if(null==t)return e;var r=!1;n=Rn(n,function(n){return n=_i(n,t),r||(r=n.length>1),n}),Ii(t,no(t),e),r&&(e=ur(e,7,Xi));for(var i=n.length;i--;)ci(e,n[i]);return e}),za=Qi(function(t,n){return null==t?{}:function(t,n){return Lr(t,n,function(n,e){return Sa(t,e)})}(t,n)});function Ua(t,n){if(null==t)return{};var e=Rn(no(t),function(t){return[t]});return n=oo(n),Lr(t,e,function(t,e){return n(t,e[0])})}var qa=Gi(Ca),Fa=Gi(Ra);function Na(t){return null==t?[]:Zn(t,Ca(t))}var Ba=Pi(function(t,n,e){return n=n.toLowerCase(),t+(e?Da(n):n)});function Da(t){return Ja(ya(t).toLowerCase())}function La(t){return(t=ya(t))&&t.replace(yt,te).replace(Zt,\"\")}var $a=Pi(function(t,n,e){return t+(e?\"-\":\"\")+n.toLowerCase()}),Wa=Pi(function(t,n,e){return t+(e?\" \":\"\")+n.toLowerCase()}),Ha=Mi(\"toLowerCase\"),Va=Pi(function(t,n,e){return t+(e?\"_\":\"\")+n.toLowerCase()}),Ga=Pi(function(t,n,e){return t+(e?\" \":\"\")+Ja(n)}),Ka=Pi(function(t,n,e){return t+(e?\" \":\"\")+n.toUpperCase()}),Ja=Mi(\"toUpperCase\");function Za(t,n,e){return t=ya(t),(n=e?r:n)===r?function(t){return tn.test(t)}(t)?function(t){return t.match(Yt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(n)||[]}var Xa=Gr(function(t,n){try{return On(t,r,n)}catch(t){return Ju(t)?t:new wt(t)}}),Ya=Qi(function(t,n){return An(n,function(n){n=Uo(n),rr(t,n,ku(t[n],t))}),t});function Qa(t){return function(){return t}}var tc=Ui(),nc=Ui(!0);function ec(t){return t}function rc(t){return Pr(\"function\"==typeof t?t:ur(t,1))}var ic=Gr(function(t,n){return function(e){return kr(e,t,n)}}),oc=Gr(function(t,n){return function(e){return kr(t,e,n)}});function uc(t,n,e){var r=Ca(n),i=br(n,r);null!=e||Qu(n)&&(i.length||!r.length)||(e=n,n=t,t=this,i=br(n,Ca(n)));var o=!(Qu(e)&&\"chain\"in e&&!e.chain),u=Zu(t);return An(i,function(e){var r=n[e];t[e]=r,u&&(t.prototype[e]=function(){var n=this.__chain__;if(o||n){var e=t(this.__wrapped__);return(e.__actions__=Si(this.__actions__)).push({func:r,args:arguments,thisArg:t}),e.__chain__=n,e}return r.apply(t,Mn([this.value()],arguments))})}),t}function ac(){}var cc=Bi(Rn),sc=Bi(In),fc=Bi(zn);function lc(t){return go(t)?$n(Uo(t)):function(t){return function(n){return wr(n,t)}}(t)}var pc=Li(),hc=Li(!0);function dc(){return[]}function vc(){return!1}var _c,yc=Ni(function(t,n){return t+n},0),gc=Hi(\"ceil\"),mc=Ni(function(t,n){return t/n},1),bc=Hi(\"floor\"),wc=Ni(function(t,n){return t*n},1),jc=Hi(\"round\"),Oc=Ni(function(t,n){return t-n},0);return Fe.after=function(t,n){if(\"function\"!=typeof n)throw new It(i);return t=ha(t),function(){if(--t<1)return n.apply(this,arguments)}},Fe.ary=Su,Fe.assign=ga,Fe.assignIn=ma,Fe.assignInWith=ba,Fe.assignWith=wa,Fe.at=ja,Fe.before=Iu,Fe.bind=ku,Fe.bindAll=Ya,Fe.bindKey=Eu,Fe.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return $u(t)?t:[t]},Fe.chain=lu,Fe.chunk=function(t,n,e){n=(e?yo(t,n,e):n===r)?1:_e(ha(n),0);var i=null==t?0:t.length;if(!i||n<1)return[];for(var o=0,u=0,a=rt(hn(i/n));o<i;)a[u++]=ti(t,o,o+=n);return a},Fe.compact=function(t){for(var n=-1,e=null==t?0:t.length,r=0,i=[];++n<e;){var o=t[n];o&&(i[r++]=o)}return i},Fe.concat=function(){var t=arguments.length;if(!t)return[];for(var n=rt(t-1),e=arguments[0],r=t;r--;)n[r-1]=arguments[r];return Mn($u(e)?Si(e):[e],vr(n,1))},Fe.cond=function(t){var n=null==t?0:t.length,e=oo();return t=n?Rn(t,function(t){if(\"function\"!=typeof t[1])throw new It(i);return[e(t[0]),t[1]]}):[],Gr(function(e){for(var r=-1;++r<n;){var i=t[r];if(On(i[0],this,e))return On(i[1],this,e)}})},Fe.conforms=function(t){return function(t){var n=Ca(t);return function(e){return ar(e,t,n)}}(ur(t,1))},Fe.constant=Qa,Fe.countBy=du,Fe.create=function(t,n){var e=Ne(t);return null==n?e:er(e,n)},Fe.curry=function t(n,e,i){var o=Ki(n,8,r,r,r,r,r,e=i?r:e);return o.placeholder=t.placeholder,o},Fe.curryRight=function t(n,e,i){var o=Ki(n,16,r,r,r,r,r,e=i?r:e);return o.placeholder=t.placeholder,o},Fe.debounce=Cu,Fe.defaults=Oa,Fe.defaultsDeep=xa,Fe.defer=Ru,Fe.delay=Mu,Fe.difference=No,Fe.differenceBy=Bo,Fe.differenceWith=Do,Fe.drop=function(t,n,e){var i=null==t?0:t.length;return i?ti(t,(n=e||n===r?1:ha(n))<0?0:n,i):[]},Fe.dropRight=function(t,n,e){var i=null==t?0:t.length;return i?ti(t,0,(n=i-(n=e||n===r?1:ha(n)))<0?0:n):[]},Fe.dropRightWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!0,!0):[]},Fe.dropWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!0):[]},Fe.fill=function(t,n,e,i){var o=null==t?0:t.length;return o?(e&&\"number\"!=typeof e&&yo(t,n,e)&&(e=0,i=o),function(t,n,e,i){var o=t.length;for((e=ha(e))<0&&(e=-e>o?0:o+e),(i=i===r||i>o?o:ha(i))<0&&(i+=o),i=e>i?0:da(i);e<i;)t[e++]=n;return t}(t,n,e,i)):[]},Fe.filter=function(t,n){return($u(t)?kn:dr)(t,oo(n,3))},Fe.flatMap=function(t,n){return vr(ju(t,n),1)},Fe.flatMapDeep=function(t,n){return vr(ju(t,n),s)},Fe.flatMapDepth=function(t,n,e){return e=e===r?1:ha(e),vr(ju(t,n),e)},Fe.flatten=Wo,Fe.flattenDeep=function(t){return null!=t&&t.length?vr(t,s):[]},Fe.flattenDepth=function(t,n){return null!=t&&t.length?vr(t,n=n===r?1:ha(n)):[]},Fe.flip=function(t){return Ki(t,512)},Fe.flow=tc,Fe.flowRight=nc,Fe.fromPairs=function(t){for(var n=-1,e=null==t?0:t.length,r={};++n<e;){var i=t[n];rr(r,i[0],i[1])}return r},Fe.functions=function(t){return null==t?[]:br(t,Ca(t))},Fe.functionsIn=function(t){return null==t?[]:br(t,Ra(t))},Fe.groupBy=mu,Fe.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Fe.intersection=Vo,Fe.intersectionBy=Go,Fe.intersectionWith=Ko,Fe.invert=Ia,Fe.invertBy=ka,Fe.invokeMap=bu,Fe.iteratee=rc,Fe.keyBy=wu,Fe.keys=Ca,Fe.keysIn=Ra,Fe.map=ju,Fe.mapKeys=function(t,n){var e={};return n=oo(n,3),gr(t,function(t,r,i){rr(e,n(t,r,i),t)}),e},Fe.mapValues=function(t,n){var e={};return n=oo(n,3),gr(t,function(t,r,i){rr(e,r,n(t,r,i))}),e},Fe.matches=function(t){return qr(ur(t,1))},Fe.matchesProperty=function(t,n){return Fr(t,ur(n,1))},Fe.memoize=Pu,Fe.merge=Ma,Fe.mergeWith=Pa,Fe.method=ic,Fe.methodOf=oc,Fe.mixin=uc,Fe.negate=Tu,Fe.nthArg=function(t){return t=ha(t),Gr(function(n){return Br(n,t)})},Fe.omit=Ta,Fe.omitBy=function(t,n){return Ua(t,Tu(oo(n)))},Fe.once=function(t){return Iu(2,t)},Fe.orderBy=function(t,n,e,i){return null==t?[]:($u(n)||(n=null==n?[]:[n]),$u(e=i?r:e)||(e=null==e?[]:[e]),Dr(t,n,e))},Fe.over=cc,Fe.overArgs=zu,Fe.overEvery=sc,Fe.overSome=fc,Fe.partial=Uu,Fe.partialRight=qu,Fe.partition=Ou,Fe.pick=za,Fe.pickBy=Ua,Fe.property=lc,Fe.propertyOf=function(t){return function(n){return null==t?r:wr(t,n)}},Fe.pull=Zo,Fe.pullAll=Xo,Fe.pullAllBy=function(t,n,e){return t&&t.length&&n&&n.length?$r(t,n,oo(e,2)):t},Fe.pullAllWith=function(t,n,e){return t&&t.length&&n&&n.length?$r(t,n,r,e):t},Fe.pullAt=Yo,Fe.range=pc,Fe.rangeRight=hc,Fe.rearg=Fu,Fe.reject=function(t,n){return($u(t)?kn:dr)(t,Tu(oo(n,3)))},Fe.remove=function(t,n){var e=[];if(!t||!t.length)return e;var r=-1,i=[],o=t.length;for(n=oo(n,3);++r<o;){var u=t[r];n(u,r,t)&&(e.push(u),i.push(r))}return Wr(t,i),e},Fe.rest=function(t,n){if(\"function\"!=typeof t)throw new It(i);return Gr(t,n=n===r?n:ha(n))},Fe.reverse=Qo,Fe.sampleSize=function(t,n,e){return n=(e?yo(t,n,e):n===r)?1:ha(n),($u(t)?Ze:Jr)(t,n)},Fe.set=function(t,n,e){return null==t?t:Zr(t,n,e)},Fe.setWith=function(t,n,e,i){return i=\"function\"==typeof i?i:r,null==t?t:Zr(t,n,e,i)},Fe.shuffle=function(t){return($u(t)?Xe:Qr)(t)},Fe.slice=function(t,n,e){var i=null==t?0:t.length;return i?(e&&\"number\"!=typeof e&&yo(t,n,e)?(n=0,e=i):(n=null==n?0:ha(n),e=e===r?i:ha(e)),ti(t,n,e)):[]},Fe.sortBy=xu,Fe.sortedUniq=function(t){return t&&t.length?ii(t):[]},Fe.sortedUniqBy=function(t,n){return t&&t.length?ii(t,oo(n,2)):[]},Fe.split=function(t,n,e){return e&&\"number\"!=typeof e&&yo(t,n,e)&&(n=e=r),(e=e===r?p:e>>>0)?(t=ya(t))&&(\"string\"==typeof n||null!=n&&!ia(n))&&!(n=ui(n))&&re(t)?gi(fe(t),0,e):t.split(n,e):[]},Fe.spread=function(t,n){if(\"function\"!=typeof t)throw new It(i);return n=null==n?0:_e(ha(n),0),Gr(function(e){var r=e[n],i=gi(e,0,n);return r&&Mn(i,r),On(t,this,i)})},Fe.tail=function(t){var n=null==t?0:t.length;return n?ti(t,1,n):[]},Fe.take=function(t,n,e){return t&&t.length?ti(t,0,(n=e||n===r?1:ha(n))<0?0:n):[]},Fe.takeRight=function(t,n,e){var i=null==t?0:t.length;return i?ti(t,(n=i-(n=e||n===r?1:ha(n)))<0?0:n,i):[]},Fe.takeRightWhile=function(t,n){return t&&t.length?fi(t,oo(n,3),!1,!0):[]},Fe.takeWhile=function(t,n){return t&&t.length?fi(t,oo(n,3)):[]},Fe.tap=function(t,n){return n(t),t},Fe.throttle=function(t,n,e){var r=!0,o=!0;if(\"function\"!=typeof t)throw new It(i);return Qu(e)&&(r=\"leading\"in e?!!e.leading:r,o=\"trailing\"in e?!!e.trailing:o),Cu(t,n,{leading:r,maxWait:n,trailing:o})},Fe.thru=pu,Fe.toArray=la,Fe.toPairs=qa,Fe.toPairsIn=Fa,Fe.toPath=function(t){return $u(t)?Rn(t,Uo):aa(t)?[t]:Si(zo(ya(t)))},Fe.toPlainObject=_a,Fe.transform=function(t,n,e){var r=$u(t),i=r||Gu(t)||ca(t);if(n=oo(n,4),null==e){var o=t&&t.constructor;e=i?r?new o:[]:Qu(t)&&Zu(o)?Ne(Wt(t)):{}}return(i?An:gr)(t,function(t,r,i){return n(e,t,r,i)}),e},Fe.unary=function(t){return Su(t,1)},Fe.union=tu,Fe.unionBy=nu,Fe.unionWith=eu,Fe.uniq=function(t){return t&&t.length?ai(t):[]},Fe.uniqBy=function(t,n){return t&&t.length?ai(t,oo(n,2)):[]},Fe.uniqWith=function(t,n){return n=\"function\"==typeof n?n:r,t&&t.length?ai(t,r,n):[]},Fe.unset=function(t,n){return null==t||ci(t,n)},Fe.unzip=ru,Fe.unzipWith=iu,Fe.update=function(t,n,e){return null==t?t:si(t,n,vi(e))},Fe.updateWith=function(t,n,e,i){return i=\"function\"==typeof i?i:r,null==t?t:si(t,n,vi(e),i)},Fe.values=Na,Fe.valuesIn=function(t){return null==t?[]:Zn(t,Ra(t))},Fe.without=ou,Fe.words=Za,Fe.wrap=function(t,n){return Uu(vi(n),t)},Fe.xor=uu,Fe.xorBy=au,Fe.xorWith=cu,Fe.zip=su,Fe.zipObject=function(t,n){return hi(t||[],n||[],Qe)},Fe.zipObjectDeep=function(t,n){return hi(t||[],n||[],Zr)},Fe.zipWith=fu,Fe.entries=qa,Fe.entriesIn=Fa,Fe.extend=ma,Fe.extendWith=ba,uc(Fe,Fe),Fe.add=yc,Fe.attempt=Xa,Fe.camelCase=Ba,Fe.capitalize=Da,Fe.ceil=gc,Fe.clamp=function(t,n,e){return e===r&&(e=n,n=r),e!==r&&(e=(e=va(e))==e?e:0),n!==r&&(n=(n=va(n))==n?n:0),or(va(t),n,e)},Fe.clone=function(t){return ur(t,4)},Fe.cloneDeep=function(t){return ur(t,5)},Fe.cloneDeepWith=function(t,n){return ur(t,5,n=\"function\"==typeof n?n:r)},Fe.cloneWith=function(t,n){return ur(t,4,n=\"function\"==typeof n?n:r)},Fe.conformsTo=function(t,n){return null==n||ar(t,n,Ca(n))},Fe.deburr=La,Fe.defaultTo=function(t,n){return null==t||t!=t?n:t},Fe.divide=mc,Fe.endsWith=function(t,n,e){t=ya(t),n=ui(n);var i=t.length,o=e=e===r?i:or(ha(e),0,i);return(e-=n.length)>=0&&t.slice(e,o)==n},Fe.eq=Nu,Fe.escape=function(t){return(t=ya(t))&&G.test(t)?t.replace(H,ne):t},Fe.escapeRegExp=function(t){return(t=ya(t))&&nt.test(t)?t.replace(tt,\"\\\\$&\"):t},Fe.every=function(t,n,e){var i=$u(t)?In:pr;return e&&yo(t,n,e)&&(n=r),i(t,oo(n,3))},Fe.find=vu,Fe.findIndex=Lo,Fe.findKey=function(t,n){return qn(t,oo(n,3),gr)},Fe.findLast=_u,Fe.findLastIndex=$o,Fe.findLastKey=function(t,n){return qn(t,oo(n,3),mr)},Fe.floor=bc,Fe.forEach=yu,Fe.forEachRight=gu,Fe.forIn=function(t,n){return null==t?t:_r(t,oo(n,3),Ra)},Fe.forInRight=function(t,n){return null==t?t:yr(t,oo(n,3),Ra)},Fe.forOwn=function(t,n){return t&&gr(t,oo(n,3))},Fe.forOwnRight=function(t,n){return t&&mr(t,oo(n,3))},Fe.get=Aa,Fe.gt=Bu,Fe.gte=Du,Fe.has=function(t,n){return null!=t&&po(t,n,Ar)},Fe.hasIn=Sa,Fe.head=Ho,Fe.identity=ec,Fe.includes=function(t,n,e,r){t=Hu(t)?t:Na(t),e=e&&!r?ha(e):0;var i=t.length;return e<0&&(e=_e(i+e,0)),ua(t)?e<=i&&t.indexOf(n,e)>-1:!!i&&Nn(t,n,e)>-1},Fe.indexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:ha(e);return i<0&&(i=_e(r+i,0)),Nn(t,n,i)},Fe.inRange=function(t,n,e){return n=pa(n),e===r?(e=n,n=0):e=pa(e),function(t,n,e){return t>=ye(n,e)&&t<_e(n,e)}(t=va(t),n,e)},Fe.invoke=Ea,Fe.isArguments=Lu,Fe.isArray=$u,Fe.isArrayBuffer=Wu,Fe.isArrayLike=Hu,Fe.isArrayLikeObject=Vu,Fe.isBoolean=function(t){return!0===t||!1===t||ta(t)&&Or(t)==_},Fe.isBuffer=Gu,Fe.isDate=Ku,Fe.isElement=function(t){return ta(t)&&1===t.nodeType&&!ra(t)},Fe.isEmpty=function(t){if(null==t)return!0;if(Hu(t)&&($u(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Gu(t)||ca(t)||Lu(t)))return!t.length;var n=lo(t);if(n==w||n==S)return!t.size;if(wo(t))return!Tr(t).length;for(var e in t)if(Pt.call(t,e))return!1;return!0},Fe.isEqual=function(t,n){return Cr(t,n)},Fe.isEqualWith=function(t,n,e){var i=(e=\"function\"==typeof e?e:r)?e(t,n):r;return i===r?Cr(t,n,r,e):!!i},Fe.isError=Ju,Fe.isFinite=function(t){return\"number\"==typeof t&&Wn(t)},Fe.isFunction=Zu,Fe.isInteger=Xu,Fe.isLength=Yu,Fe.isMap=na,Fe.isMatch=function(t,n){return t===n||Rr(t,n,ao(n))},Fe.isMatchWith=function(t,n,e){return e=\"function\"==typeof e?e:r,Rr(t,n,ao(n),e)},Fe.isNaN=function(t){return ea(t)&&t!=+t},Fe.isNative=function(t){if(bo(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Mr(t)},Fe.isNil=function(t){return null==t},Fe.isNull=function(t){return null===t},Fe.isNumber=ea,Fe.isObject=Qu,Fe.isObjectLike=ta,Fe.isPlainObject=ra,Fe.isRegExp=ia,Fe.isSafeInteger=function(t){return Xu(t)&&t>=-9007199254740991&&t<=f},Fe.isSet=oa,Fe.isString=ua,Fe.isSymbol=aa,Fe.isTypedArray=ca,Fe.isUndefined=function(t){return t===r},Fe.isWeakMap=function(t){return ta(t)&&lo(t)==E},Fe.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==Or(t)},Fe.join=function(t,n){return null==t?\"\":de.call(t,n)},Fe.kebabCase=$a,Fe.last=Jo,Fe.lastIndexOf=function(t,n,e){var i=null==t?0:t.length;if(!i)return-1;var o=i;return e!==r&&(o=(o=ha(e))<0?_e(i+o,0):ye(o,i-1)),n==n?function(t,n,e){for(var r=e+1;r--;)if(t[r]===n)return r;return r}(t,n,o):Fn(t,Dn,o,!0)},Fe.lowerCase=Wa,Fe.lowerFirst=Ha,Fe.lt=sa,Fe.lte=fa,Fe.max=function(t){return t&&t.length?hr(t,ec,xr):r},Fe.maxBy=function(t,n){return t&&t.length?hr(t,oo(n,2),xr):r},Fe.mean=function(t){return Ln(t,ec)},Fe.meanBy=function(t,n){return Ln(t,oo(n,2))},Fe.min=function(t){return t&&t.length?hr(t,ec,zr):r},Fe.minBy=function(t,n){return t&&t.length?hr(t,oo(n,2),zr):r},Fe.stubArray=dc,Fe.stubFalse=vc,Fe.stubObject=function(){return{}},Fe.stubString=function(){return\"\"},Fe.stubTrue=function(){return!0},Fe.multiply=wc,Fe.nth=function(t,n){return t&&t.length?Br(t,ha(n)):r},Fe.noConflict=function(){return ln._===this&&(ln._=Ft),this},Fe.noop=ac,Fe.now=Au,Fe.pad=function(t,n,e){t=ya(t);var r=(n=ha(n))?se(t):0;if(!n||r>=n)return t;var i=(n-r)/2;return Di(vn(i),e)+t+Di(hn(i),e)},Fe.padEnd=function(t,n,e){t=ya(t);var r=(n=ha(n))?se(t):0;return n&&r<n?t+Di(n-r,e):t},Fe.padStart=function(t,n,e){t=ya(t);var r=(n=ha(n))?se(t):0;return n&&r<n?Di(n-r,e)+t:t},Fe.parseInt=function(t,n,e){return e||null==n?n=0:n&&(n=+n),me(ya(t).replace(et,\"\"),n||0)},Fe.random=function(t,n,e){if(e&&\"boolean\"!=typeof e&&yo(t,n,e)&&(n=e=r),e===r&&(\"boolean\"==typeof n?(e=n,n=r):\"boolean\"==typeof t&&(e=t,t=r)),t===r&&n===r?(t=0,n=1):(t=pa(t),n===r?(n=t,t=0):n=pa(n)),t>n){var i=t;t=n,n=i}if(e||t%1||n%1){var o=be();return ye(t+o*(n-t+an(\"1e-\"+((o+\"\").length-1))),n)}return Hr(t,n)},Fe.reduce=function(t,n,e){var r=$u(t)?Pn:Hn,i=arguments.length<3;return r(t,oo(n,4),e,i,fr)},Fe.reduceRight=function(t,n,e){var r=$u(t)?Tn:Hn,i=arguments.length<3;return r(t,oo(n,4),e,i,lr)},Fe.repeat=function(t,n,e){return n=(e?yo(t,n,e):n===r)?1:ha(n),Vr(ya(t),n)},Fe.replace=function(){var t=arguments,n=ya(t[0]);return t.length<3?n:n.replace(t[1],t[2])},Fe.result=function(t,n,e){var i=-1,o=(n=_i(n,t)).length;for(o||(o=1,t=r);++i<o;){var u=null==t?r:t[Uo(n[i])];u===r&&(i=o,u=e),t=Zu(u)?u.call(t):u}return t},Fe.round=jc,Fe.runInContext=t,Fe.sample=function(t){return($u(t)?Je:Kr)(t)},Fe.size=function(t){if(null==t)return 0;if(Hu(t))return ua(t)?se(t):t.length;var n=lo(t);return n==w||n==S?t.size:Tr(t).length},Fe.snakeCase=Va,Fe.some=function(t,n,e){var i=$u(t)?zn:ni;return e&&yo(t,n,e)&&(n=r),i(t,oo(n,3))},Fe.sortedIndex=function(t,n){return ei(t,n)},Fe.sortedIndexBy=function(t,n,e){return ri(t,n,oo(e,2))},Fe.sortedIndexOf=function(t,n){var e=null==t?0:t.length;if(e){var r=ei(t,n);if(r<e&&Nu(t[r],n))return r}return-1},Fe.sortedLastIndex=function(t,n){return ei(t,n,!0)},Fe.sortedLastIndexBy=function(t,n,e){return ri(t,n,oo(e,2),!0)},Fe.sortedLastIndexOf=function(t,n){if(null!=t&&t.length){var e=ei(t,n,!0)-1;if(Nu(t[e],n))return e}return-1},Fe.startCase=Ga,Fe.startsWith=function(t,n,e){return t=ya(t),e=null==e?0:or(ha(e),0,t.length),n=ui(n),t.slice(e,e+n.length)==n},Fe.subtract=Oc,Fe.sum=function(t){return t&&t.length?Vn(t,ec):0},Fe.sumBy=function(t,n){return t&&t.length?Vn(t,oo(n,2)):0},Fe.template=function(t,n,e){var i=Fe.templateSettings;e&&yo(t,n,e)&&(n=r),t=ya(t),n=wa({},n,i,Ji);var o=wa({},n.imports,i.imports,Ji),u=Ca(o),a=Zn(o,u);An(u,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,s,f=0,l=n.interpolate||gt,p=\"__p += '\",h=At((n.escape||gt).source+\"|\"+l.source+\"|\"+(l===Z?ft:gt).source+\"|\"+(n.evaluate||gt).source+\"|$\",\"g\"),d=\"//# sourceURL=\"+(Pt.call(n,\"sourceURL\")?(n.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++en+\"]\")+\"\\n\";t.replace(h,function(n,e,r,i,o,u){return r||(r=i),p+=t.slice(f,u).replace(mt,ee),e&&(c=!0,p+=\"' +\\n__e(\"+e+\") +\\n'\"),o&&(s=!0,p+=\"';\\n\"+o+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),f=u+n.length,n}),p+=\"';\\n\";var v=Pt.call(n,\"variable\")&&n.variable;if(v){if(ct.test(v))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(s?p.replace(D,\"\"):p).replace(L,\"$1\").replace($,\"$1;\"),p=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(s?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var _=Xa(function(){return jt(u,d+\"return \"+p).apply(r,a)});if(_.source=p,Ju(_))throw _;return _},Fe.times=function(t,n){if((t=ha(t))<1||t>f)return[];var e=p,r=ye(t,p);n=oo(n),t-=p;for(var i=Gn(r,n);++e<t;)n(e);return i},Fe.toFinite=pa,Fe.toInteger=ha,Fe.toLength=da,Fe.toLower=function(t){return ya(t).toLowerCase()},Fe.toNumber=va,Fe.toSafeInteger=function(t){return t?or(ha(t),-9007199254740991,f):0===t?t:0},Fe.toString=ya,Fe.toUpper=function(t){return ya(t).toUpperCase()},Fe.trim=function(t,n,e){if((t=ya(t))&&(e||n===r))return Kn(t);if(!t||!(n=ui(n)))return t;var i=fe(t),o=fe(n);return gi(i,Yn(i,o),Qn(i,o)+1).join(\"\")},Fe.trimEnd=function(t,n,e){if((t=ya(t))&&(e||n===r))return t.slice(0,le(t)+1);if(!t||!(n=ui(n)))return t;var i=fe(t);return gi(i,0,Qn(i,fe(n))+1).join(\"\")},Fe.trimStart=function(t,n,e){if((t=ya(t))&&(e||n===r))return t.replace(et,\"\");if(!t||!(n=ui(n)))return t;var i=fe(t);return gi(i,Yn(i,fe(n))).join(\"\")},Fe.truncate=function(t,n){var e=30,i=\"...\";if(Qu(n)){var o=\"separator\"in n?n.separator:o;e=\"length\"in n?ha(n.length):e,i=\"omission\"in n?ui(n.omission):i}var u=(t=ya(t)).length;if(re(t)){var a=fe(t);u=a.length}if(e>=u)return t;var c=e-se(i);if(c<1)return i;var s=a?gi(a,0,c).join(\"\"):t.slice(0,c);if(o===r)return s+i;if(a&&(c+=s.length-c),ia(o)){if(t.slice(c).search(o)){var f,l=s;for(o.global||(o=At(o.source,ya(lt.exec(o))+\"g\")),o.lastIndex=0;f=o.exec(l);)var p=f.index;s=s.slice(0,p===r?c:p)}}else if(t.indexOf(ui(o),c)!=c){var h=s.lastIndexOf(o);h>-1&&(s=s.slice(0,h))}return s+i},Fe.unescape=function(t){return(t=ya(t))&&V.test(t)?t.replace(W,pe):t},Fe.uniqueId=function(t){var n=++Tt;return ya(t)+n},Fe.upperCase=Ka,Fe.upperFirst=Ja,Fe.each=yu,Fe.eachRight=gu,Fe.first=Ho,uc(Fe,(_c={},gr(Fe,function(t,n){Pt.call(Fe.prototype,n)||(_c[n]=t)}),_c),{chain:!1}),Fe.VERSION=\"4.18.1\",An([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Fe[t].placeholder=Fe}),An([\"drop\",\"take\"],function(t,n){Le.prototype[t]=function(e){e=e===r?1:_e(ha(e),0);var i=this.__filtered__&&!n?new Le(this):this.clone();return i.__filtered__?i.__takeCount__=ye(e,i.__takeCount__):i.__views__.push({size:ye(e,p),type:t+(i.__dir__<0?\"Right\":\"\")}),i},Le.prototype[t+\"Right\"]=function(n){return this.reverse()[t](n).reverse()}}),An([\"filter\",\"map\",\"takeWhile\"],function(t,n){var e=n+1,r=1==e||3==e;Le.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:oo(t,3),type:e}),n.__filtered__=n.__filtered__||r,n}}),An([\"head\",\"last\"],function(t,n){var e=\"take\"+(n?\"Right\":\"\");Le.prototype[t]=function(){return this[e](1).value()[0]}}),An([\"initial\",\"tail\"],function(t,n){var e=\"drop\"+(n?\"\":\"Right\");Le.prototype[t]=function(){return this.__filtered__?new Le(this):this[e](1)}}),Le.prototype.compact=function(){return this.filter(ec)},Le.prototype.find=function(t){return this.filter(t).head()},Le.prototype.findLast=function(t){return this.reverse().find(t)},Le.prototype.invokeMap=Gr(function(t,n){return\"function\"==typeof t?new Le(this):this.map(function(e){return kr(e,t,n)})}),Le.prototype.reject=function(t){return this.filter(Tu(oo(t)))},Le.prototype.slice=function(t,n){t=ha(t);var e=this;return e.__filtered__&&(t>0||n<0)?new Le(e):(t<0?e=e.takeRight(-t):t&&(e=e.drop(t)),n!==r&&(e=(n=ha(n))<0?e.dropRight(-n):e.take(n-t)),e)},Le.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Le.prototype.toArray=function(){return this.take(p)},gr(Le.prototype,function(t,n){var e=/^(?:filter|find|map|reject)|While$/.test(n),i=/^(?:head|last)$/.test(n),o=Fe[i?\"take\"+(\"last\"==n?\"Right\":\"\"):n],u=i||/^find/.test(n);o&&(Fe.prototype[n]=function(){var n=this.__wrapped__,a=i?[1]:arguments,c=n instanceof Le,s=a[0],f=c||$u(n),l=function(t){var n=o.apply(Fe,Mn([t],a));return i&&p?n[0]:n};f&&e&&\"function\"==typeof s&&1!=s.length&&(c=f=!1);var p=this.__chain__,h=!!this.__actions__.length,d=u&&!p,v=c&&!h;if(!u&&f){n=v?n:new Le(this);var _=t.apply(n,a);return _.__actions__.push({func:pu,args:[l],thisArg:r}),new De(_,p)}return d&&v?t.apply(this,a):(_=this.thru(l),d?i?_.value()[0]:_.value():_)})}),An([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var n=kt[t],e=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",r=/^(?:pop|shift)$/.test(t);Fe.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return n.apply($u(i)?i:[],t)}return this[e](function(e){return n.apply($u(e)?e:[],t)})}}),gr(Le.prototype,function(t,n){var e=Fe[n];if(e){var r=e.name+\"\";Pt.call(Ee,r)||(Ee[r]=[]),Ee[r].push({name:n,func:e})}}),Ee[qi(r,2).name]=[{name:\"wrapper\",func:r}],Le.prototype.clone=function(){var t=new Le(this.__wrapped__);return t.__actions__=Si(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Si(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Si(this.__views__),t},Le.prototype.reverse=function(){if(this.__filtered__){var t=new Le(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Le.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,e=$u(t),r=n<0,i=e?t.length:0,o=function(t,n,e){for(var r=-1,i=e.length;++r<i;){var o=e[r],u=o.size;switch(o.type){case\"drop\":t+=u;break;case\"dropRight\":n-=u;break;case\"take\":n=ye(n,t+u);break;case\"takeRight\":t=_e(t,n-u)}}return{start:t,end:n}}(0,i,this.__views__),u=o.start,a=o.end,c=a-u,s=r?a:u-1,f=this.__iteratees__,l=f.length,p=0,h=ye(c,this.__takeCount__);if(!e||!r&&i==c&&h==c)return li(t,this.__actions__);var d=[];t:for(;c--&&p<h;){for(var v=-1,_=t[s+=n];++v<l;){var y=f[v],g=y.iteratee,m=y.type,b=g(_);if(2==m)_=b;else if(!b){if(1==m)continue t;break t}}d[p++]=_}return d},Fe.prototype.at=hu,Fe.prototype.chain=function(){return lu(this)},Fe.prototype.commit=function(){return new De(this.value(),this.__chain__)},Fe.prototype.next=function(){this.__values__===r&&(this.__values__=la(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},Fe.prototype.plant=function(t){for(var n,e=this;e instanceof Be;){var i=Fo(e);i.__index__=0,i.__values__=r,n?o.__wrapped__=i:n=i;var o=i;e=e.__wrapped__}return o.__wrapped__=t,n},Fe.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Le){var n=t;return this.__actions__.length&&(n=new Le(this)),(n=n.reverse()).__actions__.push({func:pu,args:[Qo],thisArg:r}),new De(n,this.__chain__)}return this.thru(Qo)},Fe.prototype.toJSON=Fe.prototype.valueOf=Fe.prototype.value=function(){return li(this.__wrapped__,this.__actions__)},Fe.prototype.first=Fe.prototype.head,Xt&&(Fe.prototype[Xt]=function(){return this}),Fe}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(ln._=he,define(function(){return he})):hn?((hn.exports=he)._=he,pn._=he):ln._=he}.call(this)},1657(t){\"use strict\";t.exports=(t,n)=>{if(\"string\"!=typeof t||\"string\"!=typeof n)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===n)return[t];const e=t.indexOf(n);return-1===e?[t]:[t.slice(0,e),t.slice(e+n.length)]}},803(t){\"use strict\";t.exports=t=>encodeURIComponent(t).replace(/[!'()*]/g,t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)},1635(t,n,e){\"use strict\";e.d(n,{__assign:()=>r});var r=function(){return r=Object.assign||function(t){for(var n,e=1,r=arguments.length;e<r;e++)for(var i in n=arguments[e])Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i]);return t},r.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError}},n={};function e(r){var i=n[r];if(void 0!==i)return i.exports;var o=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},e.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var r={};(()=>{\"use strict\";e.r(r),e.d(r,{createTDOnlineMartPaymentStrategy:()=>w});var t,n,i=e(8686),o=e(315);class u extends Error{constructor(t){var n;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",n=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class a extends u{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class c extends a{constructor(t){let n=\"Unable to submit payment for the order because the payload is invalid.\";t&&(n=`${n} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(n),this.name=\"PaymentArgumentInvalidError\"}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(t||(t={}));class s extends u{constructor(n){super(function(n){switch(n){case t.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case t.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case t.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case t.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case t.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case t.MissingCheckoutConfig:case t.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case t.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case t.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case t.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case t.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case t.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case t.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(n)),this.subtype=n,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class f extends u{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}function l(t){return!(\"object\"!=typeof t||null===t||void 0!==t.shouldSaveInstrument&&\"boolean\"!=typeof t.shouldSaveInstrument||void 0!==t.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof t.shouldSetAsDefaultInstrument)}function p(){const{navigator:t}=window;let n;return n=t.language?t.language:t.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof t.javaEnabled&&t.javaEnabled(),language:n,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(n||(n={}));class h extends u{constructor(t){super(function(t){switch(t){case n.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case n.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case n.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case n.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}function d(t){return\"object\"==typeof t&&null!==t&&\"bigpayToken\"in t&&\"defaultInstrument\"in t&&\"provider\"in t&&\"trustedShippingAddress\"in t&&\"method\"in t&&\"type\"in t}var v=e(9440);var _;!function(t){t.CARD_NUMBER=\"card-number\",t.CVV=\"cvv\",t.EXPIRY=\"expiry\"}(_||(_={}));var y=function(t,n,e,r){return new(e||(e=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e(function(t){t(n)})).then(u,a)}c((r=r.apply(t,n||[])).next())})};class g{constructor(t,n,e){this.paymentIntegrationService=t,this.tdOnlineMartScriptLoader=n,this.formPoster=e,this.tdInputs=[{id:\"ccNumber\",fieldType:_.CARD_NUMBER},{id:\"ccCvv\",fieldType:_.CVV},{id:\"ccExpiry\",fieldType:_.EXPIRY}]}initialize(t){return y(this,void 0,void 0,function*(){const{methodId:n}=t;if(!n)throw new a('Unable to initialize payment because \"options.methodId\" argument is not provided.');this.tdOnlineMartClient=yield this.loadTDOnlineMartJs(),this.mountHostedFields(n)})}execute(n,e){return y(this,void 0,void 0,function*(){const{payment:r}=n,i=function(t,n){var e={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&n.indexOf(r)<0&&(e[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(t);i<r.length;i++)n.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(t,r[i])&&(e[r[i]]=t[r[i]])}return e}(n,[\"payment\"]);if(!r)throw new c([\"payment\"]);if(!r.methodId)throw new s(t.MissingPaymentMethod);const o=yield this.getPaymentPayloadOrThrow(r);yield this.paymentIntegrationService.submitOrder(i,e);try{yield this.paymentIntegrationService.submitPayment(o)}catch(t){yield this.processWithAdditionalAction(t)}})}finalize(){return Promise.reject(new f)}deinitialize(){return this.tdOnlineMartClient=void 0,this.tdInputs.forEach(({inputElement:t})=>{null==t||t.unmount()}),Promise.resolve()}getPaymentPayloadOrThrow(t){return y(this,void 0,void 0,function*(){const{methodId:n,paymentData:e}=t,{shouldSaveInstrument:r=!1,shouldSetAsDefaultInstrument:i=!1}=l(e)?e:{},o={browser_info:p(),shouldSaveInstrument:r,shouldSetAsDefaultInstrument:i};if(l(e)&&Boolean(e.instrumentId)&&e.instrumentId){const t=!!this.paymentIntegrationService.getState().getCartOrThrow().lineItems.digitalItems.length,r=!this.isTrustedVaultingInstrument(e.instrumentId)||t;return{methodId:n,paymentData:Object.assign(Object.assign(Object.assign({},o),{instrumentId:e.instrumentId}),r?{nonce:e.instrumentId}:{})}}let u;try{u=yield this.getTokenOrThrow()}catch(t){this.throwTokenizationError(t)}return{methodId:n,paymentData:Object.assign(Object.assign({},o),{nonce:u})}})}mountHostedFields(t){const n=this.getHostedFieldsOptions(),e=this.getTDOnlineMartClientOrThrow();this.tdInputs.forEach(r=>{const i=`${t}-${r.id}`;document.getElementById(i)&&(r.inputElement=e.create(r.fieldType,n),r.inputElement.mount(`#${i}`))})}loadTDOnlineMartJs(){return y(this,void 0,void 0,function*(){return this.tdOnlineMartClient?this.tdOnlineMartClient:this.tdOnlineMartScriptLoader.load()})}getTokenOrThrow(){return new Promise((t,n)=>{this.getTDOnlineMartClientOrThrow().createToken(e=>{const{error:r,token:i}=e;if(r||!i)return n(r);t(i)})})}getTDOnlineMartClientOrThrow(){if(!this.tdOnlineMartClient)throw new h(n.PaymentNotInitialized);return this.tdOnlineMartClient}processWithAdditionalAction(t){return y(this,void 0,void 0,function*(){if(!function(t){return(t=>\"object\"==typeof t&&null!==t&&\"body\"in t)(t)&&(n=t.body,(0,v.isObject)(n)&&\"object\"==typeof n&&\"errors\"in n&&\"three_ds_result\"in n&&(0,v.isArray)(n.errors)&&(0,v.some)(n.errors,{code:\"three_d_secure_required\"}));var n}(t))throw t;const{three_ds_result:n}=t.body,{acs_url:e,payer_auth_request:r,merchant_data:i}=n||{};if(!e||!r||!i)throw new c([\"formUrl\",\"threeDSSessionData\",\"creq\"]);return new Promise(t=>{this.formPoster.postForm(e,{threeDSSessionData:r,creq:i},t,\"_top\")})})}throwTokenizationError(n){if(!function(t){return\"object\"==typeof t&&null!==t&&\"field\"in t&&\"type\"in t&&\"message\"in t}(n))throw new s(t.MissingPaymentToken);throw new Error(n.message)}getHostedFieldsOptions(){return{style:{error:{color:\"#d14343\"}},classes:{error:\"form-input--error\"}}}isTrustedVaultingInstrument(t){const n=this.paymentIntegrationService.getState().getInstruments(),e=null==n?void 0:n.find(n=>d(n)&&n.bigpayToken===t);return!(d(e)&&!e.trustedShippingAddress)}}class m extends u{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class b{constructor(t,n=window){this.scriptLoader=t,this.tdOnlineMartWindow=n}load(){return t=this,n=void 0,r=function*(){if(this.tdOnlineMartWindow.customcheckout||(yield this.scriptLoader.loadScript(\"https://libs.na.bambora.com/customcheckout/1/customcheckout.js\")),!this.tdOnlineMartWindow.customcheckout)throw new m;return this.tdOnlineMartWindow.customcheckout()},new((e=void 0)||(e=Promise))(function(i,o){function u(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e(function(t){t(n)})).then(u,a)}c((r=r.apply(t,n||[])).next())});var t,n,e,r}}const w=Object.assign(t=>new g(t,new b((0,o.vQ)()),(0,i.createFormPoster)()),{resolveIds:[{id:\"tdonlinemart\"}]})})(),module.exports=r})();\n//# sourceMappingURL=td-bank.js.map"
  },
  {
    "path": "dist/cjs/integrations/worldpayaccess.js",
    "content": "(()=>{var t={9440(t,n,r){t=r.nmd(t),function(){var e,i=\"Expected a function\",u=\"__lodash_hash_undefined__\",o=\"__lodash_placeholder__\",a=32,c=128,f=1/0,l=9007199254740991,s=NaN,h=4294967295,p=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],v=\"[object Arguments]\",d=\"[object Array]\",_=\"[object Boolean]\",g=\"[object Date]\",y=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",x=\"[object Number]\",I=\"[object Object]\",j=\"[object Promise]\",S=\"[object RegExp]\",A=\"[object Set]\",O=\"[object String]\",z=\"[object Symbol]\",E=\"[object WeakMap]\",k=\"[object ArrayBuffer]\",P=\"[object DataView]\",R=\"[object Float32Array]\",C=\"[object Float64Array]\",W=\"[object Int8Array]\",T=\"[object Int16Array]\",F=\"[object Int32Array]\",L=\"[object Uint8Array]\",N=\"[object Uint8ClampedArray]\",B=\"[object Uint16Array]\",U=\"[object Uint32Array]\",D=/\\b__p \\+= '';/g,$=/\\b(__p \\+=) '' \\+/g,M=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,q=/&(?:amp|lt|gt|quot|#39);/g,H=/[&<>\"']/g,Z=RegExp(q.source),J=RegExp(H.source),V=/<%-([\\s\\S]+?)%>/g,K=/<%([\\s\\S]+?)%>/g,G=/<%=([\\s\\S]+?)%>/g,Y=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,tt=/[\\\\^$.*+?()[\\]{}|]/g,nt=RegExp(tt.source),rt=/^\\s+/,et=/\\s/,it=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,ut=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ot=/,? & /,at=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ct=/[()=,{}\\[\\]\\/\\s]/,ft=/\\\\(\\\\)?/g,lt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,st=/\\w*$/,ht=/^[-+]0x[0-9a-f]+$/i,pt=/^0b[01]+$/i,vt=/^\\[object .+?Constructor\\]$/,dt=/^0o[0-7]+$/i,_t=/^(?:0|[1-9]\\d*)$/,gt=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,yt=/($^)/,mt=/['\\n\\r\\u2028\\u2029\\\\]/g,bt=\"\\\\ud800-\\\\udfff\",wt=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",xt=\"\\\\u2700-\\\\u27bf\",It=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",jt=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",St=\"\\\\ufe0e\\\\ufe0f\",At=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Ot=\"[\"+bt+\"]\",zt=\"[\"+At+\"]\",Et=\"[\"+wt+\"]\",kt=\"\\\\d+\",Pt=\"[\"+xt+\"]\",Rt=\"[\"+It+\"]\",Ct=\"[^\"+bt+At+kt+xt+It+jt+\"]\",Wt=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Tt=\"[^\"+bt+\"]\",Ft=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Lt=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Nt=\"[\"+jt+\"]\",Bt=\"\\\\u200d\",Ut=\"(?:\"+Rt+\"|\"+Ct+\")\",Dt=\"(?:\"+Nt+\"|\"+Ct+\")\",$t=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Mt=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",qt=\"(?:\"+Et+\"|\"+Wt+\")?\",Ht=\"[\"+St+\"]?\",Zt=Ht+qt+\"(?:\"+Bt+\"(?:\"+[Tt,Ft,Lt].join(\"|\")+\")\"+Ht+qt+\")*\",Jt=\"(?:\"+[Pt,Ft,Lt].join(\"|\")+\")\"+Zt,Vt=\"(?:\"+[Tt+Et+\"?\",Et,Ft,Lt,Ot].join(\"|\")+\")\",Kt=RegExp(\"['’]\",\"g\"),Gt=RegExp(Et,\"g\"),Yt=RegExp(Wt+\"(?=\"+Wt+\")|\"+Vt+Zt,\"g\"),Qt=RegExp([Nt+\"?\"+Rt+\"+\"+$t+\"(?=\"+[zt,Nt,\"$\"].join(\"|\")+\")\",Dt+\"+\"+Mt+\"(?=\"+[zt,Nt+Ut,\"$\"].join(\"|\")+\")\",Nt+\"?\"+Ut+\"+\"+$t,Nt+\"+\"+Mt,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",kt,Jt].join(\"|\"),\"g\"),Xt=RegExp(\"[\"+Bt+bt+wt+St+\"]\"),tn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,nn=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],rn=-1,en={};en[R]=en[C]=en[W]=en[T]=en[F]=en[L]=en[N]=en[B]=en[U]=!0,en[v]=en[d]=en[k]=en[_]=en[P]=en[g]=en[y]=en[m]=en[w]=en[x]=en[I]=en[S]=en[A]=en[O]=en[E]=!1;var un={};un[v]=un[d]=un[k]=un[P]=un[_]=un[g]=un[R]=un[C]=un[W]=un[T]=un[F]=un[w]=un[x]=un[I]=un[S]=un[A]=un[O]=un[z]=un[L]=un[N]=un[B]=un[U]=!0,un[y]=un[m]=un[E]=!1;var on={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},an=parseFloat,cn=parseInt,fn=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,ln=\"object\"==typeof self&&self&&self.Object===Object&&self,sn=fn||ln||Function(\"return this\")(),hn=n&&!n.nodeType&&n,pn=hn&&t&&!t.nodeType&&t,vn=pn&&pn.exports===hn,dn=vn&&fn.process,_n=function(){try{return pn&&pn.require&&pn.require(\"util\").types||dn&&dn.binding&&dn.binding(\"util\")}catch(t){}}(),gn=_n&&_n.isArrayBuffer,yn=_n&&_n.isDate,mn=_n&&_n.isMap,bn=_n&&_n.isRegExp,wn=_n&&_n.isSet,xn=_n&&_n.isTypedArray;function In(t,n,r){switch(r.length){case 0:return t.call(n);case 1:return t.call(n,r[0]);case 2:return t.call(n,r[0],r[1]);case 3:return t.call(n,r[0],r[1],r[2])}return t.apply(n,r)}function jn(t,n,r,e){for(var i=-1,u=null==t?0:t.length;++i<u;){var o=t[i];n(e,o,r(o),t)}return e}function Sn(t,n){for(var r=-1,e=null==t?0:t.length;++r<e&&!1!==n(t[r],r,t););return t}function An(t,n){for(var r=null==t?0:t.length;r--&&!1!==n(t[r],r,t););return t}function On(t,n){for(var r=-1,e=null==t?0:t.length;++r<e;)if(!n(t[r],r,t))return!1;return!0}function zn(t,n){for(var r=-1,e=null==t?0:t.length,i=0,u=[];++r<e;){var o=t[r];n(o,r,t)&&(u[i++]=o)}return u}function En(t,n){return!(null==t||!t.length)&&Bn(t,n,0)>-1}function kn(t,n,r){for(var e=-1,i=null==t?0:t.length;++e<i;)if(r(n,t[e]))return!0;return!1}function Pn(t,n){for(var r=-1,e=null==t?0:t.length,i=Array(e);++r<e;)i[r]=n(t[r],r,t);return i}function Rn(t,n){for(var r=-1,e=n.length,i=t.length;++r<e;)t[i+r]=n[r];return t}function Cn(t,n,r,e){var i=-1,u=null==t?0:t.length;for(e&&u&&(r=t[++i]);++i<u;)r=n(r,t[i],i,t);return r}function Wn(t,n,r,e){var i=null==t?0:t.length;for(e&&i&&(r=t[--i]);i--;)r=n(r,t[i],i,t);return r}function Tn(t,n){for(var r=-1,e=null==t?0:t.length;++r<e;)if(n(t[r],r,t))return!0;return!1}var Fn=Mn(\"length\");function Ln(t,n,r){var e;return r(t,function(t,r,i){if(n(t,r,i))return e=r,!1}),e}function Nn(t,n,r,e){for(var i=t.length,u=r+(e?1:-1);e?u--:++u<i;)if(n(t[u],u,t))return u;return-1}function Bn(t,n,r){return n==n?function(t,n,r){for(var e=r-1,i=t.length;++e<i;)if(t[e]===n)return e;return-1}(t,n,r):Nn(t,Dn,r)}function Un(t,n,r,e){for(var i=r-1,u=t.length;++i<u;)if(e(t[i],n))return i;return-1}function Dn(t){return t!=t}function $n(t,n){var r=null==t?0:t.length;return r?Zn(t,n)/r:s}function Mn(t){return function(n){return null==n?e:n[t]}}function qn(t){return function(n){return null==t?e:t[n]}}function Hn(t,n,r,e,i){return i(t,function(t,i,u){r=e?(e=!1,t):n(r,t,i,u)}),r}function Zn(t,n){for(var r,i=-1,u=t.length;++i<u;){var o=n(t[i]);o!==e&&(r=r===e?o:r+o)}return r}function Jn(t,n){for(var r=-1,e=Array(t);++r<t;)e[r]=n(r);return e}function Vn(t){return t?t.slice(0,sr(t)+1).replace(rt,\"\"):t}function Kn(t){return function(n){return t(n)}}function Gn(t,n){return Pn(n,function(n){return t[n]})}function Yn(t,n){return t.has(n)}function Qn(t,n){for(var r=-1,e=t.length;++r<e&&Bn(n,t[r],0)>-1;);return r}function Xn(t,n){for(var r=t.length;r--&&Bn(n,t[r],0)>-1;);return r}var tr=qn({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),nr=qn({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function rr(t){return\"\\\\\"+on[t]}function er(t){return Xt.test(t)}function ir(t){var n=-1,r=Array(t.size);return t.forEach(function(t,e){r[++n]=[e,t]}),r}function ur(t,n){return function(r){return t(n(r))}}function or(t,n){for(var r=-1,e=t.length,i=0,u=[];++r<e;){var a=t[r];a!==n&&a!==o||(t[r]=o,u[i++]=r)}return u}function ar(t){var n=-1,r=Array(t.size);return t.forEach(function(t){r[++n]=t}),r}function cr(t){var n=-1,r=Array(t.size);return t.forEach(function(t){r[++n]=[t,t]}),r}function fr(t){return er(t)?function(t){for(var n=Yt.lastIndex=0;Yt.test(t);)++n;return n}(t):Fn(t)}function lr(t){return er(t)?function(t){return t.match(Yt)||[]}(t):function(t){return t.split(\"\")}(t)}function sr(t){for(var n=t.length;n--&&et.test(t.charAt(n)););return n}var hr=qn({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),pr=function t(n){var r,et=(n=null==n?sn:pr.defaults(sn.Object(),n,pr.pick(sn,nn))).Array,bt=n.Date,wt=n.Error,xt=n.Function,It=n.Math,jt=n.Object,St=n.RegExp,At=n.String,Ot=n.TypeError,zt=et.prototype,Et=xt.prototype,kt=jt.prototype,Pt=n[\"__core-js_shared__\"],Rt=Et.toString,Ct=kt.hasOwnProperty,Wt=0,Tt=(r=/[^.]+$/.exec(Pt&&Pt.keys&&Pt.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",Ft=kt.toString,Lt=Rt.call(jt),Nt=sn._,Bt=St(\"^\"+Rt.call(Ct).replace(tt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Ut=vn?n.Buffer:e,Dt=n.Symbol,$t=n.Uint8Array,Mt=Ut?Ut.allocUnsafe:e,qt=ur(jt.getPrototypeOf,jt),Ht=jt.create,Zt=kt.propertyIsEnumerable,Jt=zt.splice,Vt=Dt?Dt.isConcatSpreadable:e,Yt=Dt?Dt.iterator:e,Xt=Dt?Dt.toStringTag:e,on=function(){try{var t=cu(jt,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),fn=n.clearTimeout!==sn.clearTimeout&&n.clearTimeout,ln=bt&&bt.now!==sn.Date.now&&bt.now,hn=n.setTimeout!==sn.setTimeout&&n.setTimeout,pn=It.ceil,dn=It.floor,_n=jt.getOwnPropertySymbols,Fn=Ut?Ut.isBuffer:e,qn=n.isFinite,vr=zt.join,dr=ur(jt.keys,jt),_r=It.max,gr=It.min,yr=bt.now,mr=n.parseInt,br=It.random,wr=zt.reverse,xr=cu(n,\"DataView\"),Ir=cu(n,\"Map\"),jr=cu(n,\"Promise\"),Sr=cu(n,\"Set\"),Ar=cu(n,\"WeakMap\"),Or=cu(jt,\"create\"),zr=Ar&&new Ar,Er={},kr=Fu(xr),Pr=Fu(Ir),Rr=Fu(jr),Cr=Fu(Sr),Wr=Fu(Ar),Tr=Dt?Dt.prototype:e,Fr=Tr?Tr.valueOf:e,Lr=Tr?Tr.toString:e;function Nr(t){if(ta(t)&&!Mo(t)&&!(t instanceof $r)){if(t instanceof Dr)return t;if(Ct.call(t,\"__wrapped__\"))return Lu(t)}return new Dr(t)}var Br=function(){function t(){}return function(n){if(!Xo(n))return{};if(Ht)return Ht(n);t.prototype=n;var r=new t;return t.prototype=e,r}}();function Ur(){}function Dr(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=e}function $r(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=h,this.__views__=[]}function Mr(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function qr(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function Hr(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n<r;){var e=t[n];this.set(e[0],e[1])}}function Zr(t){var n=-1,r=null==t?0:t.length;for(this.__data__=new Hr;++n<r;)this.add(t[n])}function Jr(t){var n=this.__data__=new qr(t);this.size=n.size}function Vr(t,n){var r=Mo(t),e=!r&&$o(t),i=!r&&!e&&Jo(t),u=!r&&!e&&!i&&ca(t),o=r||e||i||u,a=o?Jn(t.length,At):[],c=a.length;for(var f in t)!n&&!Ct.call(t,f)||o&&(\"length\"==f||i&&(\"offset\"==f||\"parent\"==f)||u&&(\"buffer\"==f||\"byteLength\"==f||\"byteOffset\"==f)||du(f,c))||a.push(f);return a}function Kr(t){var n=t.length;return n?t[He(0,n-1)]:e}function Gr(t,n){return Pu(Ai(t),ue(n,0,t.length))}function Yr(t){return Pu(Ai(t))}function Qr(t,n,r){(r!==e&&!Bo(t[n],r)||r===e&&!(n in t))&&ee(t,n,r)}function Xr(t,n,r){var i=t[n];Ct.call(t,n)&&Bo(i,r)&&(r!==e||n in t)||ee(t,n,r)}function te(t,n){for(var r=t.length;r--;)if(Bo(t[r][0],n))return r;return-1}function ne(t,n,r,e){return le(t,function(t,i,u){n(e,t,r(t),u)}),e}function re(t,n){return t&&Oi(n,ka(n),t)}function ee(t,n,r){\"__proto__\"==n&&on?on(t,n,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[n]=r}function ie(t,n){for(var r=-1,i=n.length,u=et(i),o=null==t;++r<i;)u[r]=o?e:Sa(t,n[r]);return u}function ue(t,n,r){return t==t&&(r!==e&&(t=t<=r?t:r),n!==e&&(t=t>=n?t:n)),t}function oe(t,n,r,i,u,o){var a,c=1&n,f=2&n,l=4&n;if(r&&(a=u?r(t,i,u,o):r(t)),a!==e)return a;if(!Xo(t))return t;var s=Mo(t);if(s){if(a=function(t){var n=t.length,r=new t.constructor(n);return n&&\"string\"==typeof t[0]&&Ct.call(t,\"index\")&&(r.index=t.index,r.input=t.input),r}(t),!c)return Ai(t,a)}else{var h=su(t),p=h==m||h==b;if(Jo(t))return bi(t,c);if(h==I||h==v||p&&!u){if(a=f||p?{}:pu(t),!c)return f?function(t,n){return Oi(t,lu(t),n)}(t,function(t,n){return t&&Oi(n,Pa(n),t)}(a,t)):function(t,n){return Oi(t,fu(t),n)}(t,re(a,t))}else{if(!un[h])return u?t:{};a=function(t,n,r){var e,i=t.constructor;switch(n){case k:return wi(t);case _:case g:return new i(+t);case P:return function(t,n){var r=n?wi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case R:case C:case W:case T:case F:case L:case N:case B:case U:return xi(t,r);case w:return new i;case x:case O:return new i(t);case S:return function(t){var n=new t.constructor(t.source,st.exec(t));return n.lastIndex=t.lastIndex,n}(t);case A:return new i;case z:return e=t,Fr?jt(Fr.call(e)):{}}}(t,h,c)}}o||(o=new Jr);var d=o.get(t);if(d)return d;o.set(t,a),ua(t)?t.forEach(function(e){a.add(oe(e,n,r,e,t,o))}):na(t)&&t.forEach(function(e,i){a.set(i,oe(e,n,r,i,t,o))});var y=s?e:(l?f?nu:tu:f?Pa:ka)(t);return Sn(y||t,function(e,i){y&&(e=t[i=e]),Xr(a,i,oe(e,n,r,i,t,o))}),a}function ae(t,n,r){var i=r.length;if(null==t)return!i;for(t=jt(t);i--;){var u=r[i],o=n[u],a=t[u];if(a===e&&!(u in t)||!o(a))return!1}return!0}function ce(t,n,r){if(\"function\"!=typeof t)throw new Ot(i);return Ou(function(){t.apply(e,r)},n)}function fe(t,n,r,e){var i=-1,u=En,o=!0,a=t.length,c=[],f=n.length;if(!a)return c;r&&(n=Pn(n,Kn(r))),e?(u=kn,o=!1):n.length>=200&&(u=Yn,o=!1,n=new Zr(n));t:for(;++i<a;){var l=t[i],s=null==r?l:r(l);if(l=e||0!==l?l:0,o&&s==s){for(var h=f;h--;)if(n[h]===s)continue t;c.push(l)}else u(n,s,e)||c.push(l)}return c}Nr.templateSettings={escape:V,evaluate:K,interpolate:G,variable:\"\",imports:{_:Nr}},Nr.prototype=Ur.prototype,Nr.prototype.constructor=Nr,Dr.prototype=Br(Ur.prototype),Dr.prototype.constructor=Dr,$r.prototype=Br(Ur.prototype),$r.prototype.constructor=$r,Mr.prototype.clear=function(){this.__data__=Or?Or(null):{},this.size=0},Mr.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},Mr.prototype.get=function(t){var n=this.__data__;if(Or){var r=n[t];return r===u?e:r}return Ct.call(n,t)?n[t]:e},Mr.prototype.has=function(t){var n=this.__data__;return Or?n[t]!==e:Ct.call(n,t)},Mr.prototype.set=function(t,n){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Or&&n===e?u:n,this},qr.prototype.clear=function(){this.__data__=[],this.size=0},qr.prototype.delete=function(t){var n=this.__data__,r=te(n,t);return!(r<0||(r==n.length-1?n.pop():Jt.call(n,r,1),--this.size,0))},qr.prototype.get=function(t){var n=this.__data__,r=te(n,t);return r<0?e:n[r][1]},qr.prototype.has=function(t){return te(this.__data__,t)>-1},qr.prototype.set=function(t,n){var r=this.__data__,e=te(r,t);return e<0?(++this.size,r.push([t,n])):r[e][1]=n,this},Hr.prototype.clear=function(){this.size=0,this.__data__={hash:new Mr,map:new(Ir||qr),string:new Mr}},Hr.prototype.delete=function(t){var n=ou(this,t).delete(t);return this.size-=n?1:0,n},Hr.prototype.get=function(t){return ou(this,t).get(t)},Hr.prototype.has=function(t){return ou(this,t).has(t)},Hr.prototype.set=function(t,n){var r=ou(this,t),e=r.size;return r.set(t,n),this.size+=r.size==e?0:1,this},Zr.prototype.add=Zr.prototype.push=function(t){return this.__data__.set(t,u),this},Zr.prototype.has=function(t){return this.__data__.has(t)},Jr.prototype.clear=function(){this.__data__=new qr,this.size=0},Jr.prototype.delete=function(t){var n=this.__data__,r=n.delete(t);return this.size=n.size,r},Jr.prototype.get=function(t){return this.__data__.get(t)},Jr.prototype.has=function(t){return this.__data__.has(t)},Jr.prototype.set=function(t,n){var r=this.__data__;if(r instanceof qr){var e=r.__data__;if(!Ir||e.length<199)return e.push([t,n]),this.size=++r.size,this;r=this.__data__=new Hr(e)}return r.set(t,n),this.size=r.size,this};var le=ki(ye),se=ki(me,!0);function he(t,n){var r=!0;return le(t,function(t,e,i){return r=!!n(t,e,i)}),r}function pe(t,n,r){for(var i=-1,u=t.length;++i<u;){var o=t[i],a=n(o);if(null!=a&&(c===e?a==a&&!aa(a):r(a,c)))var c=a,f=o}return f}function ve(t,n){var r=[];return le(t,function(t,e,i){n(t,e,i)&&r.push(t)}),r}function de(t,n,r,e,i){var u=-1,o=t.length;for(r||(r=vu),i||(i=[]);++u<o;){var a=t[u];n>0&&r(a)?n>1?de(a,n-1,r,e,i):Rn(i,a):e||(i[i.length]=a)}return i}var _e=Pi(),ge=Pi(!0);function ye(t,n){return t&&_e(t,n,ka)}function me(t,n){return t&&ge(t,n,ka)}function be(t,n){return zn(n,function(n){return Go(t[n])})}function we(t,n){for(var r=0,i=(n=_i(n,t)).length;null!=t&&r<i;)t=t[Tu(n[r++])];return r&&r==i?t:e}function xe(t,n,r){var e=n(t);return Mo(t)?e:Rn(e,r(t))}function Ie(t){return null==t?t===e?\"[object Undefined]\":\"[object Null]\":Xt&&Xt in jt(t)?function(t){var n=Ct.call(t,Xt),r=t[Xt];try{t[Xt]=e;var i=!0}catch(t){}var u=Ft.call(t);return i&&(n?t[Xt]=r:delete t[Xt]),u}(t):function(t){return Ft.call(t)}(t)}function je(t,n){return t>n}function Se(t,n){return null!=t&&Ct.call(t,n)}function Ae(t,n){return null!=t&&n in jt(t)}function Oe(t,n,r){for(var i=r?kn:En,u=t[0].length,o=t.length,a=o,c=et(o),f=1/0,l=[];a--;){var s=t[a];a&&n&&(s=Pn(s,Kn(n))),f=gr(s.length,f),c[a]=!r&&(n||u>=120&&s.length>=120)?new Zr(a&&s):e}s=t[0];var h=-1,p=c[0];t:for(;++h<u&&l.length<f;){var v=s[h],d=n?n(v):v;if(v=r||0!==v?v:0,!(p?Yn(p,d):i(l,d,r))){for(a=o;--a;){var _=c[a];if(!(_?Yn(_,d):i(t[a],d,r)))continue t}p&&p.push(d),l.push(v)}}return l}function ze(t,n,r){var i=null==(t=ju(t,n=_i(n,t)))?t:t[Tu(Vu(n))];return null==i?e:In(i,t,r)}function Ee(t){return ta(t)&&Ie(t)==v}function ke(t,n,r,i,u){return t===n||(null==t||null==n||!ta(t)&&!ta(n)?t!=t&&n!=n:function(t,n,r,i,u,o){var a=Mo(t),c=Mo(n),f=a?d:su(t),l=c?d:su(n),s=(f=f==v?I:f)==I,h=(l=l==v?I:l)==I,p=f==l;if(p&&Jo(t)){if(!Jo(n))return!1;a=!0,s=!1}if(p&&!s)return o||(o=new Jr),a||ca(t)?Qi(t,n,r,i,u,o):function(t,n,r,e,i,u,o){switch(r){case P:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case k:return!(t.byteLength!=n.byteLength||!u(new $t(t),new $t(n)));case _:case g:case x:return Bo(+t,+n);case y:return t.name==n.name&&t.message==n.message;case S:case O:return t==n+\"\";case w:var a=ir;case A:var c=1&e;if(a||(a=ar),t.size!=n.size&&!c)return!1;var f=o.get(t);if(f)return f==n;e|=2,o.set(t,n);var l=Qi(a(t),a(n),e,i,u,o);return o.delete(t),l;case z:if(Fr)return Fr.call(t)==Fr.call(n)}return!1}(t,n,f,r,i,u,o);if(!(1&r)){var m=s&&Ct.call(t,\"__wrapped__\"),b=h&&Ct.call(n,\"__wrapped__\");if(m||b){var j=m?t.value():t,E=b?n.value():n;return o||(o=new Jr),u(j,E,r,i,o)}}return!!p&&(o||(o=new Jr),function(t,n,r,i,u,o){var a=1&r,c=tu(t),f=c.length;if(f!=tu(n).length&&!a)return!1;for(var l=f;l--;){var s=c[l];if(!(a?s in n:Ct.call(n,s)))return!1}var h=o.get(t),p=o.get(n);if(h&&p)return h==n&&p==t;var v=!0;o.set(t,n),o.set(n,t);for(var d=a;++l<f;){var _=t[s=c[l]],g=n[s];if(i)var y=a?i(g,_,s,n,t,o):i(_,g,s,t,n,o);if(!(y===e?_===g||u(_,g,r,i,o):y)){v=!1;break}d||(d=\"constructor\"==s)}if(v&&!d){var m=t.constructor,b=n.constructor;m==b||!(\"constructor\"in t)||!(\"constructor\"in n)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(v=!1)}return o.delete(t),o.delete(n),v}(t,n,r,i,u,o))}(t,n,r,i,ke,u))}function Pe(t,n,r,i){var u=r.length,o=u,a=!i;if(null==t)return!o;for(t=jt(t);u--;){var c=r[u];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++u<o;){var f=(c=r[u])[0],l=t[f],s=c[1];if(a&&c[2]){if(l===e&&!(f in t))return!1}else{var h=new Jr;if(i)var p=i(l,s,f,t,n,h);if(!(p===e?ke(s,l,3,i,h):p))return!1}}return!0}function Re(t){return!(!Xo(t)||(n=t,Tt&&Tt in n))&&(Go(t)?Bt:vt).test(Fu(t));var n}function Ce(t){return\"function\"==typeof t?t:null==t?rc:\"object\"==typeof t?Mo(t)?Ne(t[0],t[1]):Le(t):sc(t)}function We(t){if(!bu(t))return dr(t);var n=[];for(var r in jt(t))Ct.call(t,r)&&\"constructor\"!=r&&n.push(r);return n}function Te(t,n){return t<n}function Fe(t,n){var r=-1,e=Ho(t)?et(t.length):[];return le(t,function(t,i,u){e[++r]=n(t,i,u)}),e}function Le(t){var n=au(t);return 1==n.length&&n[0][2]?xu(n[0][0],n[0][1]):function(r){return r===t||Pe(r,t,n)}}function Ne(t,n){return gu(t)&&wu(n)?xu(Tu(t),n):function(r){var i=Sa(r,t);return i===e&&i===n?Aa(r,t):ke(n,i,3)}}function Be(t,n,r,i,u){t!==n&&_e(n,function(o,a){if(u||(u=new Jr),Xo(o))!function(t,n,r,i,u,o,a){var c=Su(t,r),f=Su(n,r),l=a.get(f);if(l)Qr(t,r,l);else{var s=o?o(c,f,r+\"\",t,n,a):e,h=s===e;if(h){var p=Mo(f),v=!p&&Jo(f),d=!p&&!v&&ca(f);s=f,p||v||d?Mo(c)?s=c:Zo(c)?s=Ai(c):v?(h=!1,s=bi(f,!0)):d?(h=!1,s=xi(f,!0)):s=[]:ea(f)||$o(f)?(s=c,$o(c)?s=_a(c):Xo(c)&&!Go(c)||(s=pu(f))):h=!1}h&&(a.set(f,s),u(s,f,i,o,a),a.delete(f)),Qr(t,r,s)}}(t,n,a,r,Be,i,u);else{var c=i?i(Su(t,a),o,a+\"\",t,n,u):e;c===e&&(c=o),Qr(t,a,c)}},Pa)}function Ue(t,n){var r=t.length;if(r)return du(n+=n<0?r:0,r)?t[n]:e}function De(t,n,r){n=n.length?Pn(n,function(t){return Mo(t)?function(n){return we(n,1===t.length?t[0]:t)}:t}):[rc];var e=-1;n=Pn(n,Kn(uu()));var i=Fe(t,function(t,r,i){var u=Pn(n,function(n){return n(t)});return{criteria:u,index:++e,value:t}});return function(t){var n=t.length;for(t.sort(function(t,n){return function(t,n,r){for(var e=-1,i=t.criteria,u=n.criteria,o=i.length,a=r.length;++e<o;){var c=Ii(i[e],u[e]);if(c)return e>=a?c:c*(\"desc\"==r[e]?-1:1)}return t.index-n.index}(t,n,r)});n--;)t[n]=t[n].value;return t}(i)}function $e(t,n,r){for(var e=-1,i=n.length,u={};++e<i;){var o=n[e],a=we(t,o);r(a,o)&&Ge(u,_i(o,t),a)}return u}function Me(t,n,r,e){var i=e?Un:Bn,u=-1,o=n.length,a=t;for(t===n&&(n=Ai(n)),r&&(a=Pn(t,Kn(r)));++u<o;)for(var c=0,f=n[u],l=r?r(f):f;(c=i(a,l,c,e))>-1;)a!==t&&Jt.call(a,c,1),Jt.call(t,c,1);return t}function qe(t,n){for(var r=t?n.length:0,e=r-1;r--;){var i=n[r];if(r==e||i!==u){var u=i;du(i)?Jt.call(t,i,1):ci(t,i)}}return t}function He(t,n){return t+dn(br()*(n-t+1))}function Ze(t,n){var r=\"\";if(!t||n<1||n>l)return r;do{n%2&&(r+=t),(n=dn(n/2))&&(t+=t)}while(n);return r}function Je(t,n){return zu(Iu(t,n,rc),t+\"\")}function Ve(t){return Kr(Ba(t))}function Ke(t,n){var r=Ba(t);return Pu(r,ue(n,0,r.length))}function Ge(t,n,r,i){if(!Xo(t))return t;for(var u=-1,o=(n=_i(n,t)).length,a=o-1,c=t;null!=c&&++u<o;){var f=Tu(n[u]),l=r;if(\"__proto__\"===f||\"constructor\"===f||\"prototype\"===f)return t;if(u!=a){var s=c[f];(l=i?i(s,f,c):e)===e&&(l=Xo(s)?s:du(n[u+1])?[]:{})}Xr(c,f,l),c=c[f]}return t}var Ye=zr?function(t,n){return zr.set(t,n),t}:rc,Qe=on?function(t,n){return on(t,\"toString\",{configurable:!0,enumerable:!1,value:Xa(n),writable:!0})}:rc;function Xe(t){return Pu(Ba(t))}function ti(t,n,r){var e=-1,i=t.length;n<0&&(n=-n>i?0:i+n),(r=r>i?i:r)<0&&(r+=i),i=n>r?0:r-n>>>0,n>>>=0;for(var u=et(i);++e<i;)u[e]=t[e+n];return u}function ni(t,n){var r;return le(t,function(t,e,i){return!(r=n(t,e,i))}),!!r}function ri(t,n,r){var e=0,i=null==t?e:t.length;if(\"number\"==typeof n&&n==n&&i<=2147483647){for(;e<i;){var u=e+i>>>1,o=t[u];null!==o&&!aa(o)&&(r?o<=n:o<n)?e=u+1:i=u}return i}return ei(t,n,rc,r)}function ei(t,n,r,i){var u=0,o=null==t?0:t.length;if(0===o)return 0;for(var a=(n=r(n))!=n,c=null===n,f=aa(n),l=n===e;u<o;){var s=dn((u+o)/2),h=r(t[s]),p=h!==e,v=null===h,d=h==h,_=aa(h);if(a)var g=i||d;else g=l?d&&(i||p):c?d&&p&&(i||!v):f?d&&p&&!v&&(i||!_):!v&&!_&&(i?h<=n:h<n);g?u=s+1:o=s}return gr(o,4294967294)}function ii(t,n){for(var r=-1,e=t.length,i=0,u=[];++r<e;){var o=t[r],a=n?n(o):o;if(!r||!Bo(a,c)){var c=a;u[i++]=0===o?0:o}}return u}function ui(t){return\"number\"==typeof t?t:aa(t)?s:+t}function oi(t){if(\"string\"==typeof t)return t;if(Mo(t))return Pn(t,oi)+\"\";if(aa(t))return Lr?Lr.call(t):\"\";var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function ai(t,n,r){var e=-1,i=En,u=t.length,o=!0,a=[],c=a;if(r)o=!1,i=kn;else if(u>=200){var f=n?null:Zi(t);if(f)return ar(f);o=!1,i=Yn,c=new Zr}else c=n?[]:a;t:for(;++e<u;){var l=t[e],s=n?n(l):l;if(l=r||0!==l?l:0,o&&s==s){for(var h=c.length;h--;)if(c[h]===s)continue t;n&&c.push(s),a.push(l)}else i(c,s,r)||(c!==a&&c.push(s),a.push(l))}return a}function ci(t,n){var r=-1,e=(n=_i(n,t)).length;if(!e)return!0;for(;++r<e;){var i=Tu(n[r]);if(\"__proto__\"===i&&!Ct.call(t,\"__proto__\"))return!1;if((\"constructor\"===i||\"prototype\"===i)&&r<e-1)return!1}var u=ju(t,n);return null==u||delete u[Tu(Vu(n))]}function fi(t,n,r,e){return Ge(t,n,r(we(t,n)),e)}function li(t,n,r,e){for(var i=t.length,u=e?i:-1;(e?u--:++u<i)&&n(t[u],u,t););return r?ti(t,e?0:u,e?u+1:i):ti(t,e?u+1:0,e?i:u)}function si(t,n){var r=t;return r instanceof $r&&(r=r.value()),Cn(n,function(t,n){return n.func.apply(n.thisArg,Rn([t],n.args))},r)}function hi(t,n,r){var e=t.length;if(e<2)return e?ai(t[0]):[];for(var i=-1,u=et(e);++i<e;)for(var o=t[i],a=-1;++a<e;)a!=i&&(u[i]=fe(u[i]||o,t[a],n,r));return ai(de(u,1),n,r)}function pi(t,n,r){for(var i=-1,u=t.length,o=n.length,a={};++i<u;){var c=i<o?n[i]:e;r(a,t[i],c)}return a}function vi(t){return Zo(t)?t:[]}function di(t){return\"function\"==typeof t?t:rc}function _i(t,n){return Mo(t)?t:gu(t,n)?[t]:Wu(ga(t))}var gi=Je;function yi(t,n,r){var i=t.length;return r=r===e?i:r,!n&&r>=i?t:ti(t,n,r)}var mi=fn||function(t){return sn.clearTimeout(t)};function bi(t,n){if(n)return t.slice();var r=t.length,e=Mt?Mt(r):new t.constructor(r);return t.copy(e),e}function wi(t){var n=new t.constructor(t.byteLength);return new $t(n).set(new $t(t)),n}function xi(t,n){var r=n?wi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function Ii(t,n){if(t!==n){var r=t!==e,i=null===t,u=t==t,o=aa(t),a=n!==e,c=null===n,f=n==n,l=aa(n);if(!c&&!l&&!o&&t>n||o&&a&&f&&!c&&!l||i&&a&&f||!r&&f||!u)return 1;if(!i&&!o&&!l&&t<n||l&&r&&u&&!i&&!o||c&&r&&u||!a&&u||!f)return-1}return 0}function ji(t,n,r,e){for(var i=-1,u=t.length,o=r.length,a=-1,c=n.length,f=_r(u-o,0),l=et(c+f),s=!e;++a<c;)l[a]=n[a];for(;++i<o;)(s||i<u)&&(l[r[i]]=t[i]);for(;f--;)l[a++]=t[i++];return l}function Si(t,n,r,e){for(var i=-1,u=t.length,o=-1,a=r.length,c=-1,f=n.length,l=_r(u-a,0),s=et(l+f),h=!e;++i<l;)s[i]=t[i];for(var p=i;++c<f;)s[p+c]=n[c];for(;++o<a;)(h||i<u)&&(s[p+r[o]]=t[i++]);return s}function Ai(t,n){var r=-1,e=t.length;for(n||(n=et(e));++r<e;)n[r]=t[r];return n}function Oi(t,n,r,i){var u=!r;r||(r={});for(var o=-1,a=n.length;++o<a;){var c=n[o],f=i?i(r[c],t[c],c,r,t):e;f===e&&(f=t[c]),u?ee(r,c,f):Xr(r,c,f)}return r}function zi(t,n){return function(r,e){var i=Mo(r)?jn:ne,u=n?n():{};return i(r,t,uu(e,2),u)}}function Ei(t){return Je(function(n,r){var i=-1,u=r.length,o=u>1?r[u-1]:e,a=u>2?r[2]:e;for(o=t.length>3&&\"function\"==typeof o?(u--,o):e,a&&_u(r[0],r[1],a)&&(o=u<3?e:o,u=1),n=jt(n);++i<u;){var c=r[i];c&&t(n,c,i,o)}return n})}function ki(t,n){return function(r,e){if(null==r)return r;if(!Ho(r))return t(r,e);for(var i=r.length,u=n?i:-1,o=jt(r);(n?u--:++u<i)&&!1!==e(o[u],u,o););return r}}function Pi(t){return function(n,r,e){for(var i=-1,u=jt(n),o=e(n),a=o.length;a--;){var c=o[t?a:++i];if(!1===r(u[c],c,u))break}return n}}function Ri(t){return function(n){var r=er(n=ga(n))?lr(n):e,i=r?r[0]:n.charAt(0),u=r?yi(r,1).join(\"\"):n.slice(1);return i[t]()+u}}function Ci(t){return function(n){return Cn(Ga($a(n).replace(Kt,\"\")),t,\"\")}}function Wi(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var r=Br(t.prototype),e=t.apply(r,n);return Xo(e)?e:r}}function Ti(t){return function(n,r,i){var u=jt(n);if(!Ho(n)){var o=uu(r,3);n=ka(n),r=function(t){return o(u[t],t,u)}}var a=t(n,r,i);return a>-1?u[o?n[a]:a]:e}}function Fi(t){return Xi(function(n){var r=n.length,u=r,o=Dr.prototype.thru;for(t&&n.reverse();u--;){var a=n[u];if(\"function\"!=typeof a)throw new Ot(i);if(o&&!c&&\"wrapper\"==eu(a))var c=new Dr([],!0)}for(u=c?u:r;++u<r;){var f=eu(a=n[u]),l=\"wrapper\"==f?ru(a):e;c=l&&yu(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?c[eu(l[0])].apply(c,l[3]):1==a.length&&yu(a)?c[f]():c.thru(a)}return function(){var t=arguments,e=t[0];if(c&&1==t.length&&Mo(e))return c.plant(e).value();for(var i=0,u=r?n[i].apply(this,t):e;++i<r;)u=n[i].call(this,u);return u}})}function Li(t,n,r,i,u,o,a,f,l,s){var h=n&c,p=1&n,v=2&n,d=24&n,_=512&n,g=v?e:Wi(t);return function c(){for(var y=arguments.length,m=et(y),b=y;b--;)m[b]=arguments[b];if(d)var w=iu(c),x=function(t,n){for(var r=t.length,e=0;r--;)t[r]===n&&++e;return e}(m,w);if(i&&(m=ji(m,i,u,d)),o&&(m=Si(m,o,a,d)),y-=x,d&&y<s){var I=or(m,w);return qi(t,n,Li,c.placeholder,r,m,I,f,l,s-y)}var j=p?r:this,S=v?j[t]:t;return y=m.length,f?m=function(t,n){for(var r=t.length,i=gr(n.length,r),u=Ai(t);i--;){var o=n[i];t[i]=du(o,r)?u[o]:e}return t}(m,f):_&&y>1&&m.reverse(),h&&l<y&&(m.length=l),this&&this!==sn&&this instanceof c&&(S=g||Wi(S)),S.apply(j,m)}}function Ni(t,n){return function(r,e){return function(t,n,r,e){return ye(t,function(t,i,u){n(e,r(t),i,u)}),e}(r,t,n(e),{})}}function Bi(t,n){return function(r,i){var u;if(r===e&&i===e)return n;if(r!==e&&(u=r),i!==e){if(u===e)return i;\"string\"==typeof r||\"string\"==typeof i?(r=oi(r),i=oi(i)):(r=ui(r),i=ui(i)),u=t(r,i)}return u}}function Ui(t){return Xi(function(n){return n=Pn(n,Kn(uu())),Je(function(r){var e=this;return t(n,function(t){return In(t,e,r)})})})}function Di(t,n){var r=(n=n===e?\" \":oi(n)).length;if(r<2)return r?Ze(n,t):n;var i=Ze(n,pn(t/fr(n)));return er(n)?yi(lr(i),0,t).join(\"\"):i.slice(0,t)}function $i(t){return function(n,r,i){return i&&\"number\"!=typeof i&&_u(n,r,i)&&(r=i=e),n=ha(n),r===e?(r=n,n=0):r=ha(r),function(t,n,r,e){for(var i=-1,u=_r(pn((n-t)/(r||1)),0),o=et(u);u--;)o[e?u:++i]=t,t+=r;return o}(n,r,i=i===e?n<r?1:-1:ha(i),t)}}function Mi(t){return function(n,r){return\"string\"==typeof n&&\"string\"==typeof r||(n=da(n),r=da(r)),t(n,r)}}function qi(t,n,r,i,u,o,c,f,l,s){var h=8&n;n|=h?a:64,4&(n&=~(h?64:a))||(n&=-4);var p=[t,n,u,h?o:e,h?c:e,h?e:o,h?e:c,f,l,s],v=r.apply(e,p);return yu(t)&&Au(v,p),v.placeholder=i,Eu(v,t,n)}function Hi(t){var n=It[t];return function(t,r){if(t=da(t),(r=null==r?0:gr(pa(r),292))&&qn(t)){var e=(ga(t)+\"e\").split(\"e\");return+((e=(ga(n(e[0]+\"e\"+(+e[1]+r)))+\"e\").split(\"e\"))[0]+\"e\"+(+e[1]-r))}return n(t)}}var Zi=Sr&&1/ar(new Sr([,-0]))[1]==f?function(t){return new Sr(t)}:ac;function Ji(t){return function(n){var r=su(n);return r==w?ir(n):r==A?cr(n):function(t,n){return Pn(n,function(n){return[n,t[n]]})}(n,t(n))}}function Vi(t,n,r,u,f,l,s,h){var p=2&n;if(!p&&\"function\"!=typeof t)throw new Ot(i);var v=u?u.length:0;if(v||(n&=-97,u=f=e),s=s===e?s:_r(pa(s),0),h=h===e?h:pa(h),v-=f?f.length:0,64&n){var d=u,_=f;u=f=e}var g=p?e:ru(t),y=[t,n,r,u,f,d,_,l,s,h];if(g&&function(t,n){var r=t[1],e=n[1],i=r|e,u=i<131,a=e==c&&8==r||e==c&&256==r&&t[7].length<=n[8]||384==e&&n[7].length<=n[8]&&8==r;if(!u&&!a)return t;1&e&&(t[2]=n[2],i|=1&r?0:4);var f=n[3];if(f){var l=t[3];t[3]=l?ji(l,f,n[4]):f,t[4]=l?or(t[3],o):n[4]}(f=n[5])&&(l=t[5],t[5]=l?Si(l,f,n[6]):f,t[6]=l?or(t[5],o):n[6]),(f=n[7])&&(t[7]=f),e&c&&(t[8]=null==t[8]?n[8]:gr(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i}(y,g),t=y[0],n=y[1],r=y[2],u=y[3],f=y[4],!(h=y[9]=y[9]===e?p?0:t.length:_r(y[9]-v,0))&&24&n&&(n&=-25),n&&1!=n)m=8==n||16==n?function(t,n,r){var i=Wi(t);return function u(){for(var o=arguments.length,a=et(o),c=o,f=iu(u);c--;)a[c]=arguments[c];var l=o<3&&a[0]!==f&&a[o-1]!==f?[]:or(a,f);return(o-=l.length)<r?qi(t,n,Li,u.placeholder,e,a,l,e,e,r-o):In(this&&this!==sn&&this instanceof u?i:t,this,a)}}(t,n,h):n!=a&&33!=n||f.length?Li.apply(e,y):function(t,n,r,e){var i=1&n,u=Wi(t);return function n(){for(var o=-1,a=arguments.length,c=-1,f=e.length,l=et(f+a),s=this&&this!==sn&&this instanceof n?u:t;++c<f;)l[c]=e[c];for(;a--;)l[c++]=arguments[++o];return In(s,i?r:this,l)}}(t,n,r,u);else var m=function(t,n,r){var e=1&n,i=Wi(t);return function n(){return(this&&this!==sn&&this instanceof n?i:t).apply(e?r:this,arguments)}}(t,n,r);return Eu((g?Ye:Au)(m,y),t,n)}function Ki(t,n,r,i){return t===e||Bo(t,kt[r])&&!Ct.call(i,r)?n:t}function Gi(t,n,r,i,u,o){return Xo(t)&&Xo(n)&&(o.set(n,t),Be(t,n,e,Gi,o),o.delete(n)),t}function Yi(t){return ea(t)?e:t}function Qi(t,n,r,i,u,o){var a=1&r,c=t.length,f=n.length;if(c!=f&&!(a&&f>c))return!1;var l=o.get(t),s=o.get(n);if(l&&s)return l==n&&s==t;var h=-1,p=!0,v=2&r?new Zr:e;for(o.set(t,n),o.set(n,t);++h<c;){var d=t[h],_=n[h];if(i)var g=a?i(_,d,h,n,t,o):i(d,_,h,t,n,o);if(g!==e){if(g)continue;p=!1;break}if(v){if(!Tn(n,function(t,n){if(!Yn(v,n)&&(d===t||u(d,t,r,i,o)))return v.push(n)})){p=!1;break}}else if(d!==_&&!u(d,_,r,i,o)){p=!1;break}}return o.delete(t),o.delete(n),p}function Xi(t){return zu(Iu(t,e,Mu),t+\"\")}function tu(t){return xe(t,ka,fu)}function nu(t){return xe(t,Pa,lu)}var ru=zr?function(t){return zr.get(t)}:ac;function eu(t){for(var n=t.name+\"\",r=Er[n],e=Ct.call(Er,n)?r.length:0;e--;){var i=r[e],u=i.func;if(null==u||u==t)return i.name}return n}function iu(t){return(Ct.call(Nr,\"placeholder\")?Nr:t).placeholder}function uu(){var t=Nr.iteratee||ec;return t=t===ec?Ce:t,arguments.length?t(arguments[0],arguments[1]):t}function ou(t,n){var r,e,i=t.__data__;return(\"string\"==(e=typeof(r=n))||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==r:null===r)?i[\"string\"==typeof n?\"string\":\"hash\"]:i.map}function au(t){for(var n=ka(t),r=n.length;r--;){var e=n[r],i=t[e];n[r]=[e,i,wu(i)]}return n}function cu(t,n){var r=function(t,n){return null==t?e:t[n]}(t,n);return Re(r)?r:e}var fu=_n?function(t){return null==t?[]:(t=jt(t),zn(_n(t),function(n){return Zt.call(t,n)}))}:vc,lu=_n?function(t){for(var n=[];t;)Rn(n,fu(t)),t=qt(t);return n}:vc,su=Ie;function hu(t,n,r){for(var e=-1,i=(n=_i(n,t)).length,u=!1;++e<i;){var o=Tu(n[e]);if(!(u=null!=t&&r(t,o)))break;t=t[o]}return u||++e!=i?u:!!(i=null==t?0:t.length)&&Qo(i)&&du(o,i)&&(Mo(t)||$o(t))}function pu(t){return\"function\"!=typeof t.constructor||bu(t)?{}:Br(qt(t))}function vu(t){return Mo(t)||$o(t)||!!(Vt&&t&&t[Vt])}function du(t,n){var r=typeof t;return!!(n=n??l)&&(\"number\"==r||\"symbol\"!=r&&_t.test(t))&&t>-1&&t%1==0&&t<n}function _u(t,n,r){if(!Xo(r))return!1;var e=typeof n;return!!(\"number\"==e?Ho(r)&&du(n,r.length):\"string\"==e&&n in r)&&Bo(r[n],t)}function gu(t,n){if(Mo(t))return!1;var r=typeof t;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=t&&!aa(t))||Q.test(t)||!Y.test(t)||null!=n&&t in jt(n)}function yu(t){var n=eu(t),r=Nr[n];if(\"function\"!=typeof r||!(n in $r.prototype))return!1;if(t===r)return!0;var e=ru(r);return!!e&&t===e[0]}(xr&&su(new xr(new ArrayBuffer(1)))!=P||Ir&&su(new Ir)!=w||jr&&su(jr.resolve())!=j||Sr&&su(new Sr)!=A||Ar&&su(new Ar)!=E)&&(su=function(t){var n=Ie(t),r=n==I?t.constructor:e,i=r?Fu(r):\"\";if(i)switch(i){case kr:return P;case Pr:return w;case Rr:return j;case Cr:return A;case Wr:return E}return n});var mu=Pt?Go:dc;function bu(t){var n=t&&t.constructor;return t===(\"function\"==typeof n&&n.prototype||kt)}function wu(t){return t==t&&!Xo(t)}function xu(t,n){return function(r){return null!=r&&r[t]===n&&(n!==e||t in jt(r))}}function Iu(t,n,r){return n=_r(n===e?t.length-1:n,0),function(){for(var e=arguments,i=-1,u=_r(e.length-n,0),o=et(u);++i<u;)o[i]=e[n+i];i=-1;for(var a=et(n+1);++i<n;)a[i]=e[i];return a[n]=r(o),In(t,this,a)}}function ju(t,n){return n.length<2?t:we(t,ti(n,0,-1))}function Su(t,n){if((\"constructor\"!==n||\"function\"!=typeof t[n])&&\"__proto__\"!=n)return t[n]}var Au=ku(Ye),Ou=hn||function(t,n){return sn.setTimeout(t,n)},zu=ku(Qe);function Eu(t,n,r){var e=n+\"\";return zu(t,function(t,n){var r=n.length;if(!r)return t;var e=r-1;return n[e]=(r>1?\"& \":\"\")+n[e],n=n.join(r>2?\", \":\" \"),t.replace(it,\"{\\n/* [wrapped with \"+n+\"] */\\n\")}(e,function(t,n){return Sn(p,function(r){var e=\"_.\"+r[0];n&r[1]&&!En(t,e)&&t.push(e)}),t.sort()}(function(t){var n=t.match(ut);return n?n[1].split(ot):[]}(e),r)))}function ku(t){var n=0,r=0;return function(){var i=yr(),u=16-(i-r);if(r=i,u>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(e,arguments)}}function Pu(t,n){var r=-1,i=t.length,u=i-1;for(n=n===e?i:n;++r<n;){var o=He(r,u),a=t[o];t[o]=t[r],t[r]=a}return t.length=n,t}var Ru,Cu,Wu=(Ru=Co(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(\"\"),t.replace(X,function(t,r,e,i){n.push(e?i.replace(ft,\"$1\"):r||t)}),n},function(t){return 500===Cu.size&&Cu.clear(),t}),Cu=Ru.cache,Ru);function Tu(t){if(\"string\"==typeof t||aa(t))return t;var n=t+\"\";return\"0\"==n&&1/t==-1/0?\"-0\":n}function Fu(t){if(null!=t){try{return Rt.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Lu(t){if(t instanceof $r)return t.clone();var n=new Dr(t.__wrapped__,t.__chain__);return n.__actions__=Ai(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}var Nu=Je(function(t,n){return Zo(t)?fe(t,de(n,1,Zo,!0)):[]}),Bu=Je(function(t,n){var r=Vu(n);return Zo(r)&&(r=e),Zo(t)?fe(t,de(n,1,Zo,!0),uu(r,2)):[]}),Uu=Je(function(t,n){var r=Vu(n);return Zo(r)&&(r=e),Zo(t)?fe(t,de(n,1,Zo,!0),e,r):[]});function Du(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=null==r?0:pa(r);return i<0&&(i=_r(e+i,0)),Nn(t,uu(n,3),i)}function $u(t,n,r){var i=null==t?0:t.length;if(!i)return-1;var u=i-1;return r!==e&&(u=pa(r),u=r<0?_r(i+u,0):gr(u,i-1)),Nn(t,uu(n,3),u,!0)}function Mu(t){return null!=t&&t.length?de(t,1):[]}function qu(t){return t&&t.length?t[0]:e}var Hu=Je(function(t){var n=Pn(t,vi);return n.length&&n[0]===t[0]?Oe(n):[]}),Zu=Je(function(t){var n=Vu(t),r=Pn(t,vi);return n===Vu(r)?n=e:r.pop(),r.length&&r[0]===t[0]?Oe(r,uu(n,2)):[]}),Ju=Je(function(t){var n=Vu(t),r=Pn(t,vi);return(n=\"function\"==typeof n?n:e)&&r.pop(),r.length&&r[0]===t[0]?Oe(r,e,n):[]});function Vu(t){var n=null==t?0:t.length;return n?t[n-1]:e}var Ku=Je(Gu);function Gu(t,n){return t&&t.length&&n&&n.length?Me(t,n):t}var Yu=Xi(function(t,n){var r=null==t?0:t.length,e=ie(t,n);return qe(t,Pn(n,function(t){return du(t,r)?+t:t}).sort(Ii)),e});function Qu(t){return null==t?t:wr.call(t)}var Xu=Je(function(t){return ai(de(t,1,Zo,!0))}),to=Je(function(t){var n=Vu(t);return Zo(n)&&(n=e),ai(de(t,1,Zo,!0),uu(n,2))}),no=Je(function(t){var n=Vu(t);return n=\"function\"==typeof n?n:e,ai(de(t,1,Zo,!0),e,n)});function ro(t){if(!t||!t.length)return[];var n=0;return t=zn(t,function(t){if(Zo(t))return n=_r(t.length,n),!0}),Jn(n,function(n){return Pn(t,Mn(n))})}function eo(t,n){if(!t||!t.length)return[];var r=ro(t);return null==n?r:Pn(r,function(t){return In(n,e,t)})}var io=Je(function(t,n){return Zo(t)?fe(t,n):[]}),uo=Je(function(t){return hi(zn(t,Zo))}),oo=Je(function(t){var n=Vu(t);return Zo(n)&&(n=e),hi(zn(t,Zo),uu(n,2))}),ao=Je(function(t){var n=Vu(t);return n=\"function\"==typeof n?n:e,hi(zn(t,Zo),e,n)}),co=Je(ro),fo=Je(function(t){var n=t.length,r=n>1?t[n-1]:e;return r=\"function\"==typeof r?(t.pop(),r):e,eo(t,r)});function lo(t){var n=Nr(t);return n.__chain__=!0,n}function so(t,n){return n(t)}var ho=Xi(function(t){var n=t.length,r=n?t[0]:0,i=this.__wrapped__,u=function(n){return ie(n,t)};return!(n>1||this.__actions__.length)&&i instanceof $r&&du(r)?((i=i.slice(r,+r+(n?1:0))).__actions__.push({func:so,args:[u],thisArg:e}),new Dr(i,this.__chain__).thru(function(t){return n&&!t.length&&t.push(e),t})):this.thru(u)}),po=zi(function(t,n,r){Ct.call(t,r)?++t[r]:ee(t,r,1)}),vo=Ti(Du),_o=Ti($u);function go(t,n){return(Mo(t)?Sn:le)(t,uu(n,3))}function yo(t,n){return(Mo(t)?An:se)(t,uu(n,3))}var mo=zi(function(t,n,r){Ct.call(t,r)?t[r].push(n):ee(t,r,[n])}),bo=Je(function(t,n,r){var e=-1,i=\"function\"==typeof n,u=Ho(t)?et(t.length):[];return le(t,function(t){u[++e]=i?In(n,t,r):ze(t,n,r)}),u}),wo=zi(function(t,n,r){ee(t,r,n)});function xo(t,n){return(Mo(t)?Pn:Fe)(t,uu(n,3))}var Io=zi(function(t,n,r){t[r?0:1].push(n)},function(){return[[],[]]}),jo=Je(function(t,n){if(null==t)return[];var r=n.length;return r>1&&_u(t,n[0],n[1])?n=[]:r>2&&_u(n[0],n[1],n[2])&&(n=[n[0]]),De(t,de(n,1),[])}),So=ln||function(){return sn.Date.now()};function Ao(t,n,r){return n=r?e:n,n=t&&null==n?t.length:n,Vi(t,c,e,e,e,e,n)}function Oo(t,n){var r;if(\"function\"!=typeof n)throw new Ot(i);return t=pa(t),function(){return--t>0&&(r=n.apply(this,arguments)),t<=1&&(n=e),r}}var zo=Je(function(t,n,r){var e=1;if(r.length){var i=or(r,iu(zo));e|=a}return Vi(t,e,n,r,i)}),Eo=Je(function(t,n,r){var e=3;if(r.length){var i=or(r,iu(Eo));e|=a}return Vi(n,e,t,r,i)});function ko(t,n,r){var u,o,a,c,f,l,s=0,h=!1,p=!1,v=!0;if(\"function\"!=typeof t)throw new Ot(i);function d(n){var r=u,i=o;return u=o=e,s=n,c=t.apply(i,r)}function _(t){var r=t-l;return l===e||r>=n||r<0||p&&t-s>=a}function g(){var t=So();if(_(t))return y(t);f=Ou(g,function(t){var r=n-(t-l);return p?gr(r,a-(t-s)):r}(t))}function y(t){return f=e,v&&u?d(t):(u=o=e,c)}function m(){var t=So(),r=_(t);if(u=arguments,o=this,l=t,r){if(f===e)return function(t){return s=t,f=Ou(g,n),h?d(t):c}(l);if(p)return mi(f),f=Ou(g,n),d(l)}return f===e&&(f=Ou(g,n)),c}return n=da(n)||0,Xo(r)&&(h=!!r.leading,a=(p=\"maxWait\"in r)?_r(da(r.maxWait)||0,n):a,v=\"trailing\"in r?!!r.trailing:v),m.cancel=function(){f!==e&&mi(f),s=0,u=l=o=f=e},m.flush=function(){return f===e?c:y(So())},m}var Po=Je(function(t,n){return ce(t,1,n)}),Ro=Je(function(t,n,r){return ce(t,da(n)||0,r)});function Co(t,n){if(\"function\"!=typeof t||null!=n&&\"function\"!=typeof n)throw new Ot(i);var r=function(){var e=arguments,i=n?n.apply(this,e):e[0],u=r.cache;if(u.has(i))return u.get(i);var o=t.apply(this,e);return r.cache=u.set(i,o)||u,o};return r.cache=new(Co.Cache||Hr),r}function Wo(t){if(\"function\"!=typeof t)throw new Ot(i);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}Co.Cache=Hr;var To=gi(function(t,n){var r=(n=1==n.length&&Mo(n[0])?Pn(n[0],Kn(uu())):Pn(de(n,1),Kn(uu()))).length;return Je(function(e){for(var i=-1,u=gr(e.length,r);++i<u;)e[i]=n[i].call(this,e[i]);return In(t,this,e)})}),Fo=Je(function(t,n){var r=or(n,iu(Fo));return Vi(t,a,e,n,r)}),Lo=Je(function(t,n){var r=or(n,iu(Lo));return Vi(t,64,e,n,r)}),No=Xi(function(t,n){return Vi(t,256,e,e,e,n)});function Bo(t,n){return t===n||t!=t&&n!=n}var Uo=Mi(je),Do=Mi(function(t,n){return t>=n}),$o=Ee(function(){return arguments}())?Ee:function(t){return ta(t)&&Ct.call(t,\"callee\")&&!Zt.call(t,\"callee\")},Mo=et.isArray,qo=gn?Kn(gn):function(t){return ta(t)&&Ie(t)==k};function Ho(t){return null!=t&&Qo(t.length)&&!Go(t)}function Zo(t){return ta(t)&&Ho(t)}var Jo=Fn||dc,Vo=yn?Kn(yn):function(t){return ta(t)&&Ie(t)==g};function Ko(t){if(!ta(t))return!1;var n=Ie(t);return n==y||\"[object DOMException]\"==n||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!ea(t)}function Go(t){if(!Xo(t))return!1;var n=Ie(t);return n==m||n==b||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n}function Yo(t){return\"number\"==typeof t&&t==pa(t)}function Qo(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=l}function Xo(t){var n=typeof t;return null!=t&&(\"object\"==n||\"function\"==n)}function ta(t){return null!=t&&\"object\"==typeof t}var na=mn?Kn(mn):function(t){return ta(t)&&su(t)==w};function ra(t){return\"number\"==typeof t||ta(t)&&Ie(t)==x}function ea(t){if(!ta(t)||Ie(t)!=I)return!1;var n=qt(t);if(null===n)return!0;var r=Ct.call(n,\"constructor\")&&n.constructor;return\"function\"==typeof r&&r instanceof r&&Rt.call(r)==Lt}var ia=bn?Kn(bn):function(t){return ta(t)&&Ie(t)==S},ua=wn?Kn(wn):function(t){return ta(t)&&su(t)==A};function oa(t){return\"string\"==typeof t||!Mo(t)&&ta(t)&&Ie(t)==O}function aa(t){return\"symbol\"==typeof t||ta(t)&&Ie(t)==z}var ca=xn?Kn(xn):function(t){return ta(t)&&Qo(t.length)&&!!en[Ie(t)]},fa=Mi(Te),la=Mi(function(t,n){return t<=n});function sa(t){if(!t)return[];if(Ho(t))return oa(t)?lr(t):Ai(t);if(Yt&&t[Yt])return function(t){for(var n,r=[];!(n=t.next()).done;)r.push(n.value);return r}(t[Yt]());var n=su(t);return(n==w?ir:n==A?ar:Ba)(t)}function ha(t){return t?(t=da(t))===f||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function pa(t){var n=ha(t),r=n%1;return n==n?r?n-r:n:0}function va(t){return t?ue(pa(t),0,h):0}function da(t){if(\"number\"==typeof t)return t;if(aa(t))return s;if(Xo(t)){var n=\"function\"==typeof t.valueOf?t.valueOf():t;t=Xo(n)?n+\"\":n}if(\"string\"!=typeof t)return 0===t?t:+t;t=Vn(t);var r=pt.test(t);return r||dt.test(t)?cn(t.slice(2),r?2:8):ht.test(t)?s:+t}function _a(t){return Oi(t,Pa(t))}function ga(t){return null==t?\"\":oi(t)}var ya=Ei(function(t,n){if(bu(n)||Ho(n))Oi(n,ka(n),t);else for(var r in n)Ct.call(n,r)&&Xr(t,r,n[r])}),ma=Ei(function(t,n){Oi(n,Pa(n),t)}),ba=Ei(function(t,n,r,e){Oi(n,Pa(n),t,e)}),wa=Ei(function(t,n,r,e){Oi(n,ka(n),t,e)}),xa=Xi(ie),Ia=Je(function(t,n){t=jt(t);var r=-1,i=n.length,u=i>2?n[2]:e;for(u&&_u(n[0],n[1],u)&&(i=1);++r<i;)for(var o=n[r],a=Pa(o),c=-1,f=a.length;++c<f;){var l=a[c],s=t[l];(s===e||Bo(s,kt[l])&&!Ct.call(t,l))&&(t[l]=o[l])}return t}),ja=Je(function(t){return t.push(e,Gi),In(Ca,e,t)});function Sa(t,n,r){var i=null==t?e:we(t,n);return i===e?r:i}function Aa(t,n){return null!=t&&hu(t,n,Ae)}var Oa=Ni(function(t,n,r){null!=n&&\"function\"!=typeof n.toString&&(n=Ft.call(n)),t[n]=r},Xa(rc)),za=Ni(function(t,n,r){null!=n&&\"function\"!=typeof n.toString&&(n=Ft.call(n)),Ct.call(t,n)?t[n].push(r):t[n]=[r]},uu),Ea=Je(ze);function ka(t){return Ho(t)?Vr(t):We(t)}function Pa(t){return Ho(t)?Vr(t,!0):function(t){if(!Xo(t))return function(t){var n=[];if(null!=t)for(var r in jt(t))n.push(r);return n}(t);var n=bu(t),r=[];for(var e in t)(\"constructor\"!=e||!n&&Ct.call(t,e))&&r.push(e);return r}(t)}var Ra=Ei(function(t,n,r){Be(t,n,r)}),Ca=Ei(function(t,n,r,e){Be(t,n,r,e)}),Wa=Xi(function(t,n){var r={};if(null==t)return r;var e=!1;n=Pn(n,function(n){return n=_i(n,t),e||(e=n.length>1),n}),Oi(t,nu(t),r),e&&(r=oe(r,7,Yi));for(var i=n.length;i--;)ci(r,n[i]);return r}),Ta=Xi(function(t,n){return null==t?{}:function(t,n){return $e(t,n,function(n,r){return Aa(t,r)})}(t,n)});function Fa(t,n){if(null==t)return{};var r=Pn(nu(t),function(t){return[t]});return n=uu(n),$e(t,r,function(t,r){return n(t,r[0])})}var La=Ji(ka),Na=Ji(Pa);function Ba(t){return null==t?[]:Gn(t,ka(t))}var Ua=Ci(function(t,n,r){return n=n.toLowerCase(),t+(r?Da(n):n)});function Da(t){return Ka(ga(t).toLowerCase())}function $a(t){return(t=ga(t))&&t.replace(gt,tr).replace(Gt,\"\")}var Ma=Ci(function(t,n,r){return t+(r?\"-\":\"\")+n.toLowerCase()}),qa=Ci(function(t,n,r){return t+(r?\" \":\"\")+n.toLowerCase()}),Ha=Ri(\"toLowerCase\"),Za=Ci(function(t,n,r){return t+(r?\"_\":\"\")+n.toLowerCase()}),Ja=Ci(function(t,n,r){return t+(r?\" \":\"\")+Ka(n)}),Va=Ci(function(t,n,r){return t+(r?\" \":\"\")+n.toUpperCase()}),Ka=Ri(\"toUpperCase\");function Ga(t,n,r){return t=ga(t),(n=r?e:n)===e?function(t){return tn.test(t)}(t)?function(t){return t.match(Qt)||[]}(t):function(t){return t.match(at)||[]}(t):t.match(n)||[]}var Ya=Je(function(t,n){try{return In(t,e,n)}catch(t){return Ko(t)?t:new wt(t)}}),Qa=Xi(function(t,n){return Sn(n,function(n){n=Tu(n),ee(t,n,zo(t[n],t))}),t});function Xa(t){return function(){return t}}var tc=Fi(),nc=Fi(!0);function rc(t){return t}function ec(t){return Ce(\"function\"==typeof t?t:oe(t,1))}var ic=Je(function(t,n){return function(r){return ze(r,t,n)}}),uc=Je(function(t,n){return function(r){return ze(t,r,n)}});function oc(t,n,r){var e=ka(n),i=be(n,e);null!=r||Xo(n)&&(i.length||!e.length)||(r=n,n=t,t=this,i=be(n,ka(n)));var u=!(Xo(r)&&\"chain\"in r&&!r.chain),o=Go(t);return Sn(i,function(r){var e=n[r];t[r]=e,o&&(t.prototype[r]=function(){var n=this.__chain__;if(u||n){var r=t(this.__wrapped__);return(r.__actions__=Ai(this.__actions__)).push({func:e,args:arguments,thisArg:t}),r.__chain__=n,r}return e.apply(t,Rn([this.value()],arguments))})}),t}function ac(){}var cc=Ui(Pn),fc=Ui(On),lc=Ui(Tn);function sc(t){return gu(t)?Mn(Tu(t)):function(t){return function(n){return we(n,t)}}(t)}var hc=$i(),pc=$i(!0);function vc(){return[]}function dc(){return!1}var _c,gc=Bi(function(t,n){return t+n},0),yc=Hi(\"ceil\"),mc=Bi(function(t,n){return t/n},1),bc=Hi(\"floor\"),wc=Bi(function(t,n){return t*n},1),xc=Hi(\"round\"),Ic=Bi(function(t,n){return t-n},0);return Nr.after=function(t,n){if(\"function\"!=typeof n)throw new Ot(i);return t=pa(t),function(){if(--t<1)return n.apply(this,arguments)}},Nr.ary=Ao,Nr.assign=ya,Nr.assignIn=ma,Nr.assignInWith=ba,Nr.assignWith=wa,Nr.at=xa,Nr.before=Oo,Nr.bind=zo,Nr.bindAll=Qa,Nr.bindKey=Eo,Nr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Mo(t)?t:[t]},Nr.chain=lo,Nr.chunk=function(t,n,r){n=(r?_u(t,n,r):n===e)?1:_r(pa(n),0);var i=null==t?0:t.length;if(!i||n<1)return[];for(var u=0,o=0,a=et(pn(i/n));u<i;)a[o++]=ti(t,u,u+=n);return a},Nr.compact=function(t){for(var n=-1,r=null==t?0:t.length,e=0,i=[];++n<r;){var u=t[n];u&&(i[e++]=u)}return i},Nr.concat=function(){var t=arguments.length;if(!t)return[];for(var n=et(t-1),r=arguments[0],e=t;e--;)n[e-1]=arguments[e];return Rn(Mo(r)?Ai(r):[r],de(n,1))},Nr.cond=function(t){var n=null==t?0:t.length,r=uu();return t=n?Pn(t,function(t){if(\"function\"!=typeof t[1])throw new Ot(i);return[r(t[0]),t[1]]}):[],Je(function(r){for(var e=-1;++e<n;){var i=t[e];if(In(i[0],this,r))return In(i[1],this,r)}})},Nr.conforms=function(t){return function(t){var n=ka(t);return function(r){return ae(r,t,n)}}(oe(t,1))},Nr.constant=Xa,Nr.countBy=po,Nr.create=function(t,n){var r=Br(t);return null==n?r:re(r,n)},Nr.curry=function t(n,r,i){var u=Vi(n,8,e,e,e,e,e,r=i?e:r);return u.placeholder=t.placeholder,u},Nr.curryRight=function t(n,r,i){var u=Vi(n,16,e,e,e,e,e,r=i?e:r);return u.placeholder=t.placeholder,u},Nr.debounce=ko,Nr.defaults=Ia,Nr.defaultsDeep=ja,Nr.defer=Po,Nr.delay=Ro,Nr.difference=Nu,Nr.differenceBy=Bu,Nr.differenceWith=Uu,Nr.drop=function(t,n,r){var i=null==t?0:t.length;return i?ti(t,(n=r||n===e?1:pa(n))<0?0:n,i):[]},Nr.dropRight=function(t,n,r){var i=null==t?0:t.length;return i?ti(t,0,(n=i-(n=r||n===e?1:pa(n)))<0?0:n):[]},Nr.dropRightWhile=function(t,n){return t&&t.length?li(t,uu(n,3),!0,!0):[]},Nr.dropWhile=function(t,n){return t&&t.length?li(t,uu(n,3),!0):[]},Nr.fill=function(t,n,r,i){var u=null==t?0:t.length;return u?(r&&\"number\"!=typeof r&&_u(t,n,r)&&(r=0,i=u),function(t,n,r,i){var u=t.length;for((r=pa(r))<0&&(r=-r>u?0:u+r),(i=i===e||i>u?u:pa(i))<0&&(i+=u),i=r>i?0:va(i);r<i;)t[r++]=n;return t}(t,n,r,i)):[]},Nr.filter=function(t,n){return(Mo(t)?zn:ve)(t,uu(n,3))},Nr.flatMap=function(t,n){return de(xo(t,n),1)},Nr.flatMapDeep=function(t,n){return de(xo(t,n),f)},Nr.flatMapDepth=function(t,n,r){return r=r===e?1:pa(r),de(xo(t,n),r)},Nr.flatten=Mu,Nr.flattenDeep=function(t){return null!=t&&t.length?de(t,f):[]},Nr.flattenDepth=function(t,n){return null!=t&&t.length?de(t,n=n===e?1:pa(n)):[]},Nr.flip=function(t){return Vi(t,512)},Nr.flow=tc,Nr.flowRight=nc,Nr.fromPairs=function(t){for(var n=-1,r=null==t?0:t.length,e={};++n<r;){var i=t[n];ee(e,i[0],i[1])}return e},Nr.functions=function(t){return null==t?[]:be(t,ka(t))},Nr.functionsIn=function(t){return null==t?[]:be(t,Pa(t))},Nr.groupBy=mo,Nr.initial=function(t){return null!=t&&t.length?ti(t,0,-1):[]},Nr.intersection=Hu,Nr.intersectionBy=Zu,Nr.intersectionWith=Ju,Nr.invert=Oa,Nr.invertBy=za,Nr.invokeMap=bo,Nr.iteratee=ec,Nr.keyBy=wo,Nr.keys=ka,Nr.keysIn=Pa,Nr.map=xo,Nr.mapKeys=function(t,n){var r={};return n=uu(n,3),ye(t,function(t,e,i){ee(r,n(t,e,i),t)}),r},Nr.mapValues=function(t,n){var r={};return n=uu(n,3),ye(t,function(t,e,i){ee(r,e,n(t,e,i))}),r},Nr.matches=function(t){return Le(oe(t,1))},Nr.matchesProperty=function(t,n){return Ne(t,oe(n,1))},Nr.memoize=Co,Nr.merge=Ra,Nr.mergeWith=Ca,Nr.method=ic,Nr.methodOf=uc,Nr.mixin=oc,Nr.negate=Wo,Nr.nthArg=function(t){return t=pa(t),Je(function(n){return Ue(n,t)})},Nr.omit=Wa,Nr.omitBy=function(t,n){return Fa(t,Wo(uu(n)))},Nr.once=function(t){return Oo(2,t)},Nr.orderBy=function(t,n,r,i){return null==t?[]:(Mo(n)||(n=null==n?[]:[n]),Mo(r=i?e:r)||(r=null==r?[]:[r]),De(t,n,r))},Nr.over=cc,Nr.overArgs=To,Nr.overEvery=fc,Nr.overSome=lc,Nr.partial=Fo,Nr.partialRight=Lo,Nr.partition=Io,Nr.pick=Ta,Nr.pickBy=Fa,Nr.property=sc,Nr.propertyOf=function(t){return function(n){return null==t?e:we(t,n)}},Nr.pull=Ku,Nr.pullAll=Gu,Nr.pullAllBy=function(t,n,r){return t&&t.length&&n&&n.length?Me(t,n,uu(r,2)):t},Nr.pullAllWith=function(t,n,r){return t&&t.length&&n&&n.length?Me(t,n,e,r):t},Nr.pullAt=Yu,Nr.range=hc,Nr.rangeRight=pc,Nr.rearg=No,Nr.reject=function(t,n){return(Mo(t)?zn:ve)(t,Wo(uu(n,3)))},Nr.remove=function(t,n){var r=[];if(!t||!t.length)return r;var e=-1,i=[],u=t.length;for(n=uu(n,3);++e<u;){var o=t[e];n(o,e,t)&&(r.push(o),i.push(e))}return qe(t,i),r},Nr.rest=function(t,n){if(\"function\"!=typeof t)throw new Ot(i);return Je(t,n=n===e?n:pa(n))},Nr.reverse=Qu,Nr.sampleSize=function(t,n,r){return n=(r?_u(t,n,r):n===e)?1:pa(n),(Mo(t)?Gr:Ke)(t,n)},Nr.set=function(t,n,r){return null==t?t:Ge(t,n,r)},Nr.setWith=function(t,n,r,i){return i=\"function\"==typeof i?i:e,null==t?t:Ge(t,n,r,i)},Nr.shuffle=function(t){return(Mo(t)?Yr:Xe)(t)},Nr.slice=function(t,n,r){var i=null==t?0:t.length;return i?(r&&\"number\"!=typeof r&&_u(t,n,r)?(n=0,r=i):(n=null==n?0:pa(n),r=r===e?i:pa(r)),ti(t,n,r)):[]},Nr.sortBy=jo,Nr.sortedUniq=function(t){return t&&t.length?ii(t):[]},Nr.sortedUniqBy=function(t,n){return t&&t.length?ii(t,uu(n,2)):[]},Nr.split=function(t,n,r){return r&&\"number\"!=typeof r&&_u(t,n,r)&&(n=r=e),(r=r===e?h:r>>>0)?(t=ga(t))&&(\"string\"==typeof n||null!=n&&!ia(n))&&!(n=oi(n))&&er(t)?yi(lr(t),0,r):t.split(n,r):[]},Nr.spread=function(t,n){if(\"function\"!=typeof t)throw new Ot(i);return n=null==n?0:_r(pa(n),0),Je(function(r){var e=r[n],i=yi(r,0,n);return e&&Rn(i,e),In(t,this,i)})},Nr.tail=function(t){var n=null==t?0:t.length;return n?ti(t,1,n):[]},Nr.take=function(t,n,r){return t&&t.length?ti(t,0,(n=r||n===e?1:pa(n))<0?0:n):[]},Nr.takeRight=function(t,n,r){var i=null==t?0:t.length;return i?ti(t,(n=i-(n=r||n===e?1:pa(n)))<0?0:n,i):[]},Nr.takeRightWhile=function(t,n){return t&&t.length?li(t,uu(n,3),!1,!0):[]},Nr.takeWhile=function(t,n){return t&&t.length?li(t,uu(n,3)):[]},Nr.tap=function(t,n){return n(t),t},Nr.throttle=function(t,n,r){var e=!0,u=!0;if(\"function\"!=typeof t)throw new Ot(i);return Xo(r)&&(e=\"leading\"in r?!!r.leading:e,u=\"trailing\"in r?!!r.trailing:u),ko(t,n,{leading:e,maxWait:n,trailing:u})},Nr.thru=so,Nr.toArray=sa,Nr.toPairs=La,Nr.toPairsIn=Na,Nr.toPath=function(t){return Mo(t)?Pn(t,Tu):aa(t)?[t]:Ai(Wu(ga(t)))},Nr.toPlainObject=_a,Nr.transform=function(t,n,r){var e=Mo(t),i=e||Jo(t)||ca(t);if(n=uu(n,4),null==r){var u=t&&t.constructor;r=i?e?new u:[]:Xo(t)&&Go(u)?Br(qt(t)):{}}return(i?Sn:ye)(t,function(t,e,i){return n(r,t,e,i)}),r},Nr.unary=function(t){return Ao(t,1)},Nr.union=Xu,Nr.unionBy=to,Nr.unionWith=no,Nr.uniq=function(t){return t&&t.length?ai(t):[]},Nr.uniqBy=function(t,n){return t&&t.length?ai(t,uu(n,2)):[]},Nr.uniqWith=function(t,n){return n=\"function\"==typeof n?n:e,t&&t.length?ai(t,e,n):[]},Nr.unset=function(t,n){return null==t||ci(t,n)},Nr.unzip=ro,Nr.unzipWith=eo,Nr.update=function(t,n,r){return null==t?t:fi(t,n,di(r))},Nr.updateWith=function(t,n,r,i){return i=\"function\"==typeof i?i:e,null==t?t:fi(t,n,di(r),i)},Nr.values=Ba,Nr.valuesIn=function(t){return null==t?[]:Gn(t,Pa(t))},Nr.without=io,Nr.words=Ga,Nr.wrap=function(t,n){return Fo(di(n),t)},Nr.xor=uo,Nr.xorBy=oo,Nr.xorWith=ao,Nr.zip=co,Nr.zipObject=function(t,n){return pi(t||[],n||[],Xr)},Nr.zipObjectDeep=function(t,n){return pi(t||[],n||[],Ge)},Nr.zipWith=fo,Nr.entries=La,Nr.entriesIn=Na,Nr.extend=ma,Nr.extendWith=ba,oc(Nr,Nr),Nr.add=gc,Nr.attempt=Ya,Nr.camelCase=Ua,Nr.capitalize=Da,Nr.ceil=yc,Nr.clamp=function(t,n,r){return r===e&&(r=n,n=e),r!==e&&(r=(r=da(r))==r?r:0),n!==e&&(n=(n=da(n))==n?n:0),ue(da(t),n,r)},Nr.clone=function(t){return oe(t,4)},Nr.cloneDeep=function(t){return oe(t,5)},Nr.cloneDeepWith=function(t,n){return oe(t,5,n=\"function\"==typeof n?n:e)},Nr.cloneWith=function(t,n){return oe(t,4,n=\"function\"==typeof n?n:e)},Nr.conformsTo=function(t,n){return null==n||ae(t,n,ka(n))},Nr.deburr=$a,Nr.defaultTo=function(t,n){return null==t||t!=t?n:t},Nr.divide=mc,Nr.endsWith=function(t,n,r){t=ga(t),n=oi(n);var i=t.length,u=r=r===e?i:ue(pa(r),0,i);return(r-=n.length)>=0&&t.slice(r,u)==n},Nr.eq=Bo,Nr.escape=function(t){return(t=ga(t))&&J.test(t)?t.replace(H,nr):t},Nr.escapeRegExp=function(t){return(t=ga(t))&&nt.test(t)?t.replace(tt,\"\\\\$&\"):t},Nr.every=function(t,n,r){var i=Mo(t)?On:he;return r&&_u(t,n,r)&&(n=e),i(t,uu(n,3))},Nr.find=vo,Nr.findIndex=Du,Nr.findKey=function(t,n){return Ln(t,uu(n,3),ye)},Nr.findLast=_o,Nr.findLastIndex=$u,Nr.findLastKey=function(t,n){return Ln(t,uu(n,3),me)},Nr.floor=bc,Nr.forEach=go,Nr.forEachRight=yo,Nr.forIn=function(t,n){return null==t?t:_e(t,uu(n,3),Pa)},Nr.forInRight=function(t,n){return null==t?t:ge(t,uu(n,3),Pa)},Nr.forOwn=function(t,n){return t&&ye(t,uu(n,3))},Nr.forOwnRight=function(t,n){return t&&me(t,uu(n,3))},Nr.get=Sa,Nr.gt=Uo,Nr.gte=Do,Nr.has=function(t,n){return null!=t&&hu(t,n,Se)},Nr.hasIn=Aa,Nr.head=qu,Nr.identity=rc,Nr.includes=function(t,n,r,e){t=Ho(t)?t:Ba(t),r=r&&!e?pa(r):0;var i=t.length;return r<0&&(r=_r(i+r,0)),oa(t)?r<=i&&t.indexOf(n,r)>-1:!!i&&Bn(t,n,r)>-1},Nr.indexOf=function(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=null==r?0:pa(r);return i<0&&(i=_r(e+i,0)),Bn(t,n,i)},Nr.inRange=function(t,n,r){return n=ha(n),r===e?(r=n,n=0):r=ha(r),function(t,n,r){return t>=gr(n,r)&&t<_r(n,r)}(t=da(t),n,r)},Nr.invoke=Ea,Nr.isArguments=$o,Nr.isArray=Mo,Nr.isArrayBuffer=qo,Nr.isArrayLike=Ho,Nr.isArrayLikeObject=Zo,Nr.isBoolean=function(t){return!0===t||!1===t||ta(t)&&Ie(t)==_},Nr.isBuffer=Jo,Nr.isDate=Vo,Nr.isElement=function(t){return ta(t)&&1===t.nodeType&&!ea(t)},Nr.isEmpty=function(t){if(null==t)return!0;if(Ho(t)&&(Mo(t)||\"string\"==typeof t||\"function\"==typeof t.splice||Jo(t)||ca(t)||$o(t)))return!t.length;var n=su(t);if(n==w||n==A)return!t.size;if(bu(t))return!We(t).length;for(var r in t)if(Ct.call(t,r))return!1;return!0},Nr.isEqual=function(t,n){return ke(t,n)},Nr.isEqualWith=function(t,n,r){var i=(r=\"function\"==typeof r?r:e)?r(t,n):e;return i===e?ke(t,n,e,r):!!i},Nr.isError=Ko,Nr.isFinite=function(t){return\"number\"==typeof t&&qn(t)},Nr.isFunction=Go,Nr.isInteger=Yo,Nr.isLength=Qo,Nr.isMap=na,Nr.isMatch=function(t,n){return t===n||Pe(t,n,au(n))},Nr.isMatchWith=function(t,n,r){return r=\"function\"==typeof r?r:e,Pe(t,n,au(n),r)},Nr.isNaN=function(t){return ra(t)&&t!=+t},Nr.isNative=function(t){if(mu(t))throw new wt(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Re(t)},Nr.isNil=function(t){return null==t},Nr.isNull=function(t){return null===t},Nr.isNumber=ra,Nr.isObject=Xo,Nr.isObjectLike=ta,Nr.isPlainObject=ea,Nr.isRegExp=ia,Nr.isSafeInteger=function(t){return Yo(t)&&t>=-9007199254740991&&t<=l},Nr.isSet=ua,Nr.isString=oa,Nr.isSymbol=aa,Nr.isTypedArray=ca,Nr.isUndefined=function(t){return t===e},Nr.isWeakMap=function(t){return ta(t)&&su(t)==E},Nr.isWeakSet=function(t){return ta(t)&&\"[object WeakSet]\"==Ie(t)},Nr.join=function(t,n){return null==t?\"\":vr.call(t,n)},Nr.kebabCase=Ma,Nr.last=Vu,Nr.lastIndexOf=function(t,n,r){var i=null==t?0:t.length;if(!i)return-1;var u=i;return r!==e&&(u=(u=pa(r))<0?_r(i+u,0):gr(u,i-1)),n==n?function(t,n,r){for(var e=r+1;e--;)if(t[e]===n)return e;return e}(t,n,u):Nn(t,Dn,u,!0)},Nr.lowerCase=qa,Nr.lowerFirst=Ha,Nr.lt=fa,Nr.lte=la,Nr.max=function(t){return t&&t.length?pe(t,rc,je):e},Nr.maxBy=function(t,n){return t&&t.length?pe(t,uu(n,2),je):e},Nr.mean=function(t){return $n(t,rc)},Nr.meanBy=function(t,n){return $n(t,uu(n,2))},Nr.min=function(t){return t&&t.length?pe(t,rc,Te):e},Nr.minBy=function(t,n){return t&&t.length?pe(t,uu(n,2),Te):e},Nr.stubArray=vc,Nr.stubFalse=dc,Nr.stubObject=function(){return{}},Nr.stubString=function(){return\"\"},Nr.stubTrue=function(){return!0},Nr.multiply=wc,Nr.nth=function(t,n){return t&&t.length?Ue(t,pa(n)):e},Nr.noConflict=function(){return sn._===this&&(sn._=Nt),this},Nr.noop=ac,Nr.now=So,Nr.pad=function(t,n,r){t=ga(t);var e=(n=pa(n))?fr(t):0;if(!n||e>=n)return t;var i=(n-e)/2;return Di(dn(i),r)+t+Di(pn(i),r)},Nr.padEnd=function(t,n,r){t=ga(t);var e=(n=pa(n))?fr(t):0;return n&&e<n?t+Di(n-e,r):t},Nr.padStart=function(t,n,r){t=ga(t);var e=(n=pa(n))?fr(t):0;return n&&e<n?Di(n-e,r)+t:t},Nr.parseInt=function(t,n,r){return r||null==n?n=0:n&&(n=+n),mr(ga(t).replace(rt,\"\"),n||0)},Nr.random=function(t,n,r){if(r&&\"boolean\"!=typeof r&&_u(t,n,r)&&(n=r=e),r===e&&(\"boolean\"==typeof n?(r=n,n=e):\"boolean\"==typeof t&&(r=t,t=e)),t===e&&n===e?(t=0,n=1):(t=ha(t),n===e?(n=t,t=0):n=ha(n)),t>n){var i=t;t=n,n=i}if(r||t%1||n%1){var u=br();return gr(t+u*(n-t+an(\"1e-\"+((u+\"\").length-1))),n)}return He(t,n)},Nr.reduce=function(t,n,r){var e=Mo(t)?Cn:Hn,i=arguments.length<3;return e(t,uu(n,4),r,i,le)},Nr.reduceRight=function(t,n,r){var e=Mo(t)?Wn:Hn,i=arguments.length<3;return e(t,uu(n,4),r,i,se)},Nr.repeat=function(t,n,r){return n=(r?_u(t,n,r):n===e)?1:pa(n),Ze(ga(t),n)},Nr.replace=function(){var t=arguments,n=ga(t[0]);return t.length<3?n:n.replace(t[1],t[2])},Nr.result=function(t,n,r){var i=-1,u=(n=_i(n,t)).length;for(u||(u=1,t=e);++i<u;){var o=null==t?e:t[Tu(n[i])];o===e&&(i=u,o=r),t=Go(o)?o.call(t):o}return t},Nr.round=xc,Nr.runInContext=t,Nr.sample=function(t){return(Mo(t)?Kr:Ve)(t)},Nr.size=function(t){if(null==t)return 0;if(Ho(t))return oa(t)?fr(t):t.length;var n=su(t);return n==w||n==A?t.size:We(t).length},Nr.snakeCase=Za,Nr.some=function(t,n,r){var i=Mo(t)?Tn:ni;return r&&_u(t,n,r)&&(n=e),i(t,uu(n,3))},Nr.sortedIndex=function(t,n){return ri(t,n)},Nr.sortedIndexBy=function(t,n,r){return ei(t,n,uu(r,2))},Nr.sortedIndexOf=function(t,n){var r=null==t?0:t.length;if(r){var e=ri(t,n);if(e<r&&Bo(t[e],n))return e}return-1},Nr.sortedLastIndex=function(t,n){return ri(t,n,!0)},Nr.sortedLastIndexBy=function(t,n,r){return ei(t,n,uu(r,2),!0)},Nr.sortedLastIndexOf=function(t,n){if(null!=t&&t.length){var r=ri(t,n,!0)-1;if(Bo(t[r],n))return r}return-1},Nr.startCase=Ja,Nr.startsWith=function(t,n,r){return t=ga(t),r=null==r?0:ue(pa(r),0,t.length),n=oi(n),t.slice(r,r+n.length)==n},Nr.subtract=Ic,Nr.sum=function(t){return t&&t.length?Zn(t,rc):0},Nr.sumBy=function(t,n){return t&&t.length?Zn(t,uu(n,2)):0},Nr.template=function(t,n,r){var i=Nr.templateSettings;r&&_u(t,n,r)&&(n=e),t=ga(t),n=wa({},n,i,Ki);var u=wa({},n.imports,i.imports,Ki),o=ka(u),a=Gn(u,o);Sn(o,function(t){if(ct.test(t))throw new wt(\"Invalid `imports` option passed into `_.template`\")});var c,f,l=0,s=n.interpolate||yt,h=\"__p += '\",p=St((n.escape||yt).source+\"|\"+s.source+\"|\"+(s===G?lt:yt).source+\"|\"+(n.evaluate||yt).source+\"|$\",\"g\"),v=\"//# sourceURL=\"+(Ct.call(n,\"sourceURL\")?(n.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++rn+\"]\")+\"\\n\";t.replace(p,function(n,r,e,i,u,o){return e||(e=i),h+=t.slice(l,o).replace(mt,rr),r&&(c=!0,h+=\"' +\\n__e(\"+r+\") +\\n'\"),u&&(f=!0,h+=\"';\\n\"+u+\";\\n__p += '\"),e&&(h+=\"' +\\n((__t = (\"+e+\")) == null ? '' : __t) +\\n'\"),l=o+n.length,n}),h+=\"';\\n\";var d=Ct.call(n,\"variable\")&&n.variable;if(d){if(ct.test(d))throw new wt(\"Invalid `variable` option passed into `_.template`\")}else h=\"with (obj) {\\n\"+h+\"\\n}\\n\";h=(f?h.replace(D,\"\"):h).replace($,\"$1\").replace(M,\"$1;\"),h=\"function(\"+(d||\"obj\")+\") {\\n\"+(d?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(f?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+h+\"return __p\\n}\";var _=Ya(function(){return xt(o,v+\"return \"+h).apply(e,a)});if(_.source=h,Ko(_))throw _;return _},Nr.times=function(t,n){if((t=pa(t))<1||t>l)return[];var r=h,e=gr(t,h);n=uu(n),t-=h;for(var i=Jn(e,n);++r<t;)n(r);return i},Nr.toFinite=ha,Nr.toInteger=pa,Nr.toLength=va,Nr.toLower=function(t){return ga(t).toLowerCase()},Nr.toNumber=da,Nr.toSafeInteger=function(t){return t?ue(pa(t),-9007199254740991,l):0===t?t:0},Nr.toString=ga,Nr.toUpper=function(t){return ga(t).toUpperCase()},Nr.trim=function(t,n,r){if((t=ga(t))&&(r||n===e))return Vn(t);if(!t||!(n=oi(n)))return t;var i=lr(t),u=lr(n);return yi(i,Qn(i,u),Xn(i,u)+1).join(\"\")},Nr.trimEnd=function(t,n,r){if((t=ga(t))&&(r||n===e))return t.slice(0,sr(t)+1);if(!t||!(n=oi(n)))return t;var i=lr(t);return yi(i,0,Xn(i,lr(n))+1).join(\"\")},Nr.trimStart=function(t,n,r){if((t=ga(t))&&(r||n===e))return t.replace(rt,\"\");if(!t||!(n=oi(n)))return t;var i=lr(t);return yi(i,Qn(i,lr(n))).join(\"\")},Nr.truncate=function(t,n){var r=30,i=\"...\";if(Xo(n)){var u=\"separator\"in n?n.separator:u;r=\"length\"in n?pa(n.length):r,i=\"omission\"in n?oi(n.omission):i}var o=(t=ga(t)).length;if(er(t)){var a=lr(t);o=a.length}if(r>=o)return t;var c=r-fr(i);if(c<1)return i;var f=a?yi(a,0,c).join(\"\"):t.slice(0,c);if(u===e)return f+i;if(a&&(c+=f.length-c),ia(u)){if(t.slice(c).search(u)){var l,s=f;for(u.global||(u=St(u.source,ga(st.exec(u))+\"g\")),u.lastIndex=0;l=u.exec(s);)var h=l.index;f=f.slice(0,h===e?c:h)}}else if(t.indexOf(oi(u),c)!=c){var p=f.lastIndexOf(u);p>-1&&(f=f.slice(0,p))}return f+i},Nr.unescape=function(t){return(t=ga(t))&&Z.test(t)?t.replace(q,hr):t},Nr.uniqueId=function(t){var n=++Wt;return ga(t)+n},Nr.upperCase=Va,Nr.upperFirst=Ka,Nr.each=go,Nr.eachRight=yo,Nr.first=qu,oc(Nr,(_c={},ye(Nr,function(t,n){Ct.call(Nr.prototype,n)||(_c[n]=t)}),_c),{chain:!1}),Nr.VERSION=\"4.18.1\",Sn([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){Nr[t].placeholder=Nr}),Sn([\"drop\",\"take\"],function(t,n){$r.prototype[t]=function(r){r=r===e?1:_r(pa(r),0);var i=this.__filtered__&&!n?new $r(this):this.clone();return i.__filtered__?i.__takeCount__=gr(r,i.__takeCount__):i.__views__.push({size:gr(r,h),type:t+(i.__dir__<0?\"Right\":\"\")}),i},$r.prototype[t+\"Right\"]=function(n){return this.reverse()[t](n).reverse()}}),Sn([\"filter\",\"map\",\"takeWhile\"],function(t,n){var r=n+1,e=1==r||3==r;$r.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:uu(t,3),type:r}),n.__filtered__=n.__filtered__||e,n}}),Sn([\"head\",\"last\"],function(t,n){var r=\"take\"+(n?\"Right\":\"\");$r.prototype[t]=function(){return this[r](1).value()[0]}}),Sn([\"initial\",\"tail\"],function(t,n){var r=\"drop\"+(n?\"\":\"Right\");$r.prototype[t]=function(){return this.__filtered__?new $r(this):this[r](1)}}),$r.prototype.compact=function(){return this.filter(rc)},$r.prototype.find=function(t){return this.filter(t).head()},$r.prototype.findLast=function(t){return this.reverse().find(t)},$r.prototype.invokeMap=Je(function(t,n){return\"function\"==typeof t?new $r(this):this.map(function(r){return ze(r,t,n)})}),$r.prototype.reject=function(t){return this.filter(Wo(uu(t)))},$r.prototype.slice=function(t,n){t=pa(t);var r=this;return r.__filtered__&&(t>0||n<0)?new $r(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),n!==e&&(r=(n=pa(n))<0?r.dropRight(-n):r.take(n-t)),r)},$r.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},$r.prototype.toArray=function(){return this.take(h)},ye($r.prototype,function(t,n){var r=/^(?:filter|find|map|reject)|While$/.test(n),i=/^(?:head|last)$/.test(n),u=Nr[i?\"take\"+(\"last\"==n?\"Right\":\"\"):n],o=i||/^find/.test(n);u&&(Nr.prototype[n]=function(){var n=this.__wrapped__,a=i?[1]:arguments,c=n instanceof $r,f=a[0],l=c||Mo(n),s=function(t){var n=u.apply(Nr,Rn([t],a));return i&&h?n[0]:n};l&&r&&\"function\"==typeof f&&1!=f.length&&(c=l=!1);var h=this.__chain__,p=!!this.__actions__.length,v=o&&!h,d=c&&!p;if(!o&&l){n=d?n:new $r(this);var _=t.apply(n,a);return _.__actions__.push({func:so,args:[s],thisArg:e}),new Dr(_,h)}return v&&d?t.apply(this,a):(_=this.thru(s),v?i?_.value()[0]:_.value():_)})}),Sn([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var n=zt[t],r=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",e=/^(?:pop|shift)$/.test(t);Nr.prototype[t]=function(){var t=arguments;if(e&&!this.__chain__){var i=this.value();return n.apply(Mo(i)?i:[],t)}return this[r](function(r){return n.apply(Mo(r)?r:[],t)})}}),ye($r.prototype,function(t,n){var r=Nr[n];if(r){var e=r.name+\"\";Ct.call(Er,e)||(Er[e]=[]),Er[e].push({name:n,func:r})}}),Er[Li(e,2).name]=[{name:\"wrapper\",func:e}],$r.prototype.clone=function(){var t=new $r(this.__wrapped__);return t.__actions__=Ai(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ai(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ai(this.__views__),t},$r.prototype.reverse=function(){if(this.__filtered__){var t=new $r(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},$r.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,r=Mo(t),e=n<0,i=r?t.length:0,u=function(t,n,r){for(var e=-1,i=r.length;++e<i;){var u=r[e],o=u.size;switch(u.type){case\"drop\":t+=o;break;case\"dropRight\":n-=o;break;case\"take\":n=gr(n,t+o);break;case\"takeRight\":t=_r(t,n-o)}}return{start:t,end:n}}(0,i,this.__views__),o=u.start,a=u.end,c=a-o,f=e?a:o-1,l=this.__iteratees__,s=l.length,h=0,p=gr(c,this.__takeCount__);if(!r||!e&&i==c&&p==c)return si(t,this.__actions__);var v=[];t:for(;c--&&h<p;){for(var d=-1,_=t[f+=n];++d<s;){var g=l[d],y=g.iteratee,m=g.type,b=y(_);if(2==m)_=b;else if(!b){if(1==m)continue t;break t}}v[h++]=_}return v},Nr.prototype.at=ho,Nr.prototype.chain=function(){return lo(this)},Nr.prototype.commit=function(){return new Dr(this.value(),this.__chain__)},Nr.prototype.next=function(){this.__values__===e&&(this.__values__=sa(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?e:this.__values__[this.__index__++]}},Nr.prototype.plant=function(t){for(var n,r=this;r instanceof Ur;){var i=Lu(r);i.__index__=0,i.__values__=e,n?u.__wrapped__=i:n=i;var u=i;r=r.__wrapped__}return u.__wrapped__=t,n},Nr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof $r){var n=t;return this.__actions__.length&&(n=new $r(this)),(n=n.reverse()).__actions__.push({func:so,args:[Qu],thisArg:e}),new Dr(n,this.__chain__)}return this.thru(Qu)},Nr.prototype.toJSON=Nr.prototype.valueOf=Nr.prototype.value=function(){return si(this.__wrapped__,this.__actions__)},Nr.prototype.first=Nr.prototype.head,Yt&&(Nr.prototype[Yt]=function(){return this}),Nr}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(sn._=pr,define(function(){return pr})):pn?((pn.exports=pr)._=pr,hn._=pr):sn._=pr}.call(this)}},n={};function r(e){var i=n[e];if(void 0!==i)return i.exports;var u=n[e]={id:e,loaded:!1,exports:{}};return t[e].call(u.exports,u,u.exports,r),u.loaded=!0,u.exports}r.d=(t,n)=>{for(var e in n)r.o(n,e)&&!r.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var e={};(()=>{\"use strict\";function t(t,n){return Object.assign(t,{resolveIds:n})}r.r(e),r.d(e,{createWorldpayAccessOpenBankingPaymentStrategy:()=>b,createWorldpayAccessPaymentStrategy:()=>y});var n,i=r(9440);class u extends Error{constructor(t){var n;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",n=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class o extends u{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class a extends u{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class c extends o{constructor(t){let n=\"Unable to submit payment for the order because the payload is invalid.\";t&&(n=`${n} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(n),this.name=\"PaymentArgumentInvalidError\"}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(n||(n={}));class f extends u{constructor(t){super(function(t){switch(t){case n.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case n.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case n.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case n.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var l=function(t,n,r,e){return new(r||(r=Promise))(function(i,u){function o(t){try{c(e.next(t))}catch(t){u(t)}}function a(t){try{c(e.throw(t))}catch(t){u(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof r?n:new r(function(t){t(n)})).then(o,a)}c((e=e.apply(t,n||[])).next())})},s=function(t,n){var r={};for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.indexOf(e)<0&&(r[e]=t[e]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(e=Object.getOwnPropertySymbols(t);i<e.length;i++)n.indexOf(e[i])<0&&Object.prototype.propertyIsEnumerable.call(t,e[i])&&(r[e[i]]=t[e[i]])}return r};class h{constructor(t){this._paymentIntegrationService=t}execute(t,n){var r,e;return this._isHostedPaymentFormEnabled(null===(r=t.payment)||void 0===r?void 0:r.methodId,null===(e=t.payment)||void 0===e?void 0:e.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(t,n):this._executeWithoutHostedForm(t,n)}initialize(t){if(!this._isHostedPaymentFormEnabled(null==t?void 0:t.methodId,null==t?void 0:t.gatewayId)||!this._isHostedFieldAvailable(t))return this._shouldRenderHostedForm=!1,Promise.resolve();const n=t&&t.creditCard&&t.creditCard.form,r=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:e=\"\"}={}}=r.getStoreConfigOrThrow();if(!n)throw new o;const i=this._paymentIntegrationService.createHostedForm(e,n);return i.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=i,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new a)}_executeWithoutHostedForm(t,n){return l(this,void 0,void 0,function*(){const{payment:r}=t,e=s(t,[\"payment\"]),i=r&&r.paymentData;if(!r||!i)throw new c([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(e,n),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:i}))})}_executeWithHostedForm(t,r){return l(this,void 0,void 0,function*(){const{payment:e}=t,i=s(t,[\"payment\"]),u=this._hostedForm;if(!u)throw new f(n.PaymentNotInitialized);if(!e||!e.methodId)throw new c([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(i,r),yield u.validate().then(()=>u.submit(e))})}_isHostedPaymentFormEnabled(t,n){return!!t&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n).config.isHostedFormEnabled}_isHostedFieldAvailable(t){return!(0,i.values)(t&&t.creditCard&&t.creditCard.form.fields).every(i.isNil)}}const p=t=>\"object\"==typeof t&&null!==t&&\"body\"in t;var v=function(t,n,r,e){return new(r||(r=Promise))(function(i,u){function o(t){try{c(e.next(t))}catch(t){u(t)}}function a(t){try{c(e.throw(t))}catch(t){u(t)}}function c(t){var n;t.done?i(t.value):(n=t.value,n instanceof r?n:new r(function(t){t(n)})).then(o,a)}c((e=e.apply(t,n||[])).next())})};const d=\"Payment cannot continue\";let _;class g extends h{initialize(t){const r=Object.create(null,{initialize:{get:()=>super.initialize}});return v(this,void 0,void 0,function*(){if(this._initializeOptions=t&&t.worldpay,!this._initializeOptions)throw new f(n.PaymentNotInitialized);return r.initialize.call(this,t)})}execute(t,n){const r=Object.create(null,{execute:{get:()=>super.execute}});return v(this,void 0,void 0,function*(){const{payment:e}=t;if(_=this._submitAdditionalAction(),!e)throw new c([\"payment\"]);try{return yield r.execute.call(this,t,n)}catch(t){return this._processAdditionalAction(t,e)}})}_processAdditionalAction(t,r){return v(this,void 0,void 0,function*(){return p(t)&&(0,i.some)(t.body.errors,{code:\"additional_action_required\"})?new Promise((e,u)=>{const o=t=>v(this,void 0,void 0,function*(){if(-1===t.origin.indexOf(\"cardinalcommerce.com\"))return;if(\"string\"!=typeof t.data||!this._isValidJsonWithSessionId(t.data))return u(new Error(d));window.removeEventListener(\"message\",o),a.remove();const c=JSON.parse(t.data),l=(0,i.merge)({},r,{paymentData:{threeDSecure:{token:c.SessionId}}});try{e(yield _(l))}catch(t){if(!p(t)||!(0,i.some)(t.body.errors,{code:\"three_d_secure_required\"}))return u(t);if(!this._initializeOptions)return u(new f(n.PaymentNotInitialized));const{onLoad:r}=this._initializeOptions,e=this._createIframe(t.body.three_ds_result);try{r(e,()=>u(new Error(\"Payment was cancelled\")))}catch(t){u(new Error(d))}}});let a;window.addEventListener(\"message\",o);try{a=this._createHiddenIframe(t.body)}catch(t){throw window.removeEventListener(\"message\",o),new Error(d)}}):Promise.reject(t)})}_createHiddenIframe(t){const n=document.createElement(\"iframe\");if(document.body.appendChild(n),!n.contentWindow)throw new Error;n.id=\"worldpay_hosted_hidden_payment_page\",n.height=\"0px\",n.width=\"0px\";const r=document.createElement(\"form\"),e=\"collectionForm\";r.id=e,r.name=\"devicedata\",r.method=\"post\";const i=t.additional_action_required.data.redirect_url;r.action=i;const u=document.createElement(\"input\");u.name=\"Bin\",u.type=\"hidden\",u.value=t.provider_data.source_id,r.appendChild(u);const o=document.createElement(\"input\");o.name=\"JWT\",o.type=\"hidden\",o.value=t.provider_data.data,r.appendChild(o);const a=document.createElement(\"button\");a.type=\"submit\",a.id=\"btnsubmit\",r.appendChild(a),navigator.userAgent.match(\"Firefox\")?n.srcdoc=r.outerHTML:n.contentWindow.document.body.appendChild(r);const c=document.createElement(\"script\");return c.innerHTML=`\\n            document.getElementById('${e}').submit();\\n        `,n.contentWindow.document.body.appendChild(c),n}_createIframe(t){const n=document.createElement(\"form\");n.id=\"challengeForm\",n.method=\"POST\",n.action=t.acs_url;const r=document.createElement(\"input\");r.name=\"JWT\",r.type=\"hidden\",r.value=t.payer_auth_request,n.appendChild(r);const e=document.createElement(\"input\");e.name=\"MD\",e.type=\"hidden\",e.value=`merchantSessionId=${t.merchant_data}`,n.appendChild(e);const i=document.createElement(\"script\");i.type=\"text/javascript\",i.innerHTML=\"window.onload = function() { document.getElementById('challengeForm').submit(); }\";const u=document.createElement(\"iframe\");return u.name=\"worldpay_hosted_payment_page\",u.height=\"400\",u.width=\"100%\",u.srcdoc=`${n.outerHTML} ${i.outerHTML}`,u}_submitAdditionalAction(){if(this._shouldRenderHostedForm){if(!this._hostedForm)throw new f(n.PaymentNotInitialized);const t=this._hostedForm;return n=>v(this,void 0,void 0,function*(){yield t.submit(n)})}return t=>v(this,void 0,void 0,function*(){yield this._paymentIntegrationService.submitPayment(t)})}_isValidJsonWithSessionId(t){try{const n=JSON.parse(t);return!(!n.SessionId||!n.Status)}catch(t){return!1}}}const y=t(t=>new g(t),[{gateway:\"worldpayaccess\",id:\"credit_card\"},{id:\"worldpayaccess\"}]);class m{constructor(t){this._paymentIntegrationService=t}execute({payment:t}){return n=this,r=void 0,i=function*(){if(!t)throw new c([\"payment\"]);yield this._paymentIntegrationService.submitOrder();try{yield this._paymentIntegrationService.submitPayment(this._buildOpenBankingSubmitPayment(t))}catch(t){if(this._isWorldpayAccessRedirectResponse(t)){const n=t.body.additional_action_required.data.redirect_url;return new Promise(()=>window.location.replace(n))}return Promise.reject(t)}},new((e=void 0)||(e=Promise))(function(t,u){function o(t){try{c(i.next(t))}catch(t){u(t)}}function a(t){try{c(i.throw(t))}catch(t){u(t)}}function c(n){var r;n.done?t(n.value):(r=n.value,r instanceof e?r:new e(function(t){t(r)})).then(o,a)}c((i=i.apply(n,r||[])).next())});var n,r,e,i}initialize(){return Promise.resolve()}finalize(){return Promise.reject(new a)}deinitialize(){return Promise.resolve()}_buildOpenBankingSubmitPayment(t){const{shouldSaveInstrument:n,shouldSetAsDefaultInstrument:r}=\"object\"!=typeof(e=t.paymentData)||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument?{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1}:t.paymentData;var e;return Object.assign(Object.assign({},t),{paymentData:{formattedPayload:{open_banking:{},vault_payment_instrument:n||!1,set_as_default_stored_instrument:r||!1}}})}_isWorldpayAccessRedirectResponse(t){var n,r;if(\"object\"!=typeof t||null===t)return!1;const e=t;if(!e.body)return!1;const i=e.body;return\"additional_action_required\"===i.status&&!!(null===(r=null===(n=i.additional_action_required)||void 0===n?void 0:n.data)||void 0===r?void 0:r.redirect_url)}}const b=t(t=>new m(t),[{id:\"open_banking\",gateway:\"worldpayaccess\"}])})(),module.exports=e})();\n//# sourceMappingURL=worldpayaccess.js.map"
  },
  {
    "path": "dist/cjs/integrations/zip.js",
    "content": "(()=>{var e={5889(e,t,r){\"use strict\";const n=r(803),o=r(1915),i=r(1657),s=r(3814);function a(e){if(\"string\"!=typeof e||1!==e.length)throw new TypeError(\"arrayFormatSeparator must be single character string\")}function c(e,t){return t.encode?t.strict?n(e):encodeURIComponent(e):e}function u(e,t){return t.decode?o(e):e}function p(e){return Array.isArray(e)?e.sort():\"object\"==typeof e?p(Object.keys(e)).sort((e,t)=>Number(e)-Number(t)).map(t=>e[t]):e}function l(e){const t=e.indexOf(\"#\");return-1!==t&&(e=e.slice(0,t)),e}function f(e){const t=(e=l(e)).indexOf(\"?\");return-1===t?\"\":e.slice(t+1)}function d(e,t){return t.parseNumbers&&!Number.isNaN(Number(e))&&\"string\"==typeof e&&\"\"!==e.trim()?e=Number(e):!t.parseBooleans||null===e||\"true\"!==e.toLowerCase()&&\"false\"!==e.toLowerCase()||(e=\"true\"===e.toLowerCase()),e}function h(e,t){a((t=Object.assign({decode:!0,sort:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\",parseNumbers:!1,parseBooleans:!1},t)).arrayFormatSeparator);const r=function(e){let t;switch(e.arrayFormat){case\"index\":return(e,r,n)=>{t=/\\[(\\d*)\\]$/.exec(e),e=e.replace(/\\[\\d*\\]$/,\"\"),t?(void 0===n[e]&&(n[e]={}),n[e][t[1]]=r):n[e]=r};case\"bracket\":return(e,r,n)=>{t=/(\\[\\])$/.exec(e),e=e.replace(/\\[\\]$/,\"\"),t?void 0!==n[e]?n[e]=[].concat(n[e],r):n[e]=[r]:n[e]=r};case\"comma\":case\"separator\":return(t,r,n)=>{const o=\"string\"==typeof r&&r.includes(e.arrayFormatSeparator),i=\"string\"==typeof r&&!o&&u(r,e).includes(e.arrayFormatSeparator);r=i?u(r,e):r;const s=o||i?r.split(e.arrayFormatSeparator).map(t=>u(t,e)):null===r?r:u(r,e);n[t]=s};default:return(e,t,r)=>{void 0!==r[e]?r[e]=[].concat(r[e],t):r[e]=t}}}(t),n=Object.create(null);if(\"string\"!=typeof e)return n;if(!(e=e.trim().replace(/^[?#&]/,\"\")))return n;for(const o of e.split(\"&\")){if(\"\"===o)continue;let[e,s]=i(t.decode?o.replace(/\\+/g,\" \"):o,\"=\");s=void 0===s?null:[\"comma\",\"separator\"].includes(t.arrayFormat)?s:u(s,t),r(u(e,t),s,n)}for(const e of Object.keys(n)){const r=n[e];if(\"object\"==typeof r&&null!==r)for(const e of Object.keys(r))r[e]=d(r[e],t);else n[e]=d(r,t)}return!1===t.sort?n:(!0===t.sort?Object.keys(n).sort():Object.keys(n).sort(t.sort)).reduce((e,t)=>{const r=n[t];return Boolean(r)&&\"object\"==typeof r&&!Array.isArray(r)?e[t]=p(r):e[t]=r,e},Object.create(null))}t.extract=f,t.parse=h,t.stringify=(e,t)=>{if(!e)return\"\";a((t=Object.assign({encode:!0,strict:!0,arrayFormat:\"none\",arrayFormatSeparator:\",\"},t)).arrayFormatSeparator);const r=r=>t.skipNull&&null==e[r]||t.skipEmptyString&&\"\"===e[r],n=function(e){switch(e.arrayFormat){case\"index\":return t=>(r,n)=>{const o=r.length;return void 0===n||e.skipNull&&null===n||e.skipEmptyString&&\"\"===n?r:null===n?[...r,[c(t,e),\"[\",o,\"]\"].join(\"\")]:[...r,[c(t,e),\"[\",c(o,e),\"]=\",c(n,e)].join(\"\")]};case\"bracket\":return t=>(r,n)=>void 0===n||e.skipNull&&null===n||e.skipEmptyString&&\"\"===n?r:null===n?[...r,[c(t,e),\"[]\"].join(\"\")]:[...r,[c(t,e),\"[]=\",c(n,e)].join(\"\")];case\"comma\":case\"separator\":return t=>(r,n)=>null==n||0===n.length?r:0===r.length?[[c(t,e),\"=\",c(n,e)].join(\"\")]:[[r,c(n,e)].join(e.arrayFormatSeparator)];default:return t=>(r,n)=>void 0===n||e.skipNull&&null===n||e.skipEmptyString&&\"\"===n?r:null===n?[...r,c(t,e)]:[...r,[c(t,e),\"=\",c(n,e)].join(\"\")]}}(t),o={};for(const t of Object.keys(e))r(t)||(o[t]=e[t]);const i=Object.keys(o);return!1!==t.sort&&i.sort(t.sort),i.map(r=>{const o=e[r];return void 0===o?\"\":null===o?c(r,t):Array.isArray(o)?o.reduce(n(r),[]).join(\"&\"):c(r,t)+\"=\"+c(o,t)}).filter(e=>e.length>0).join(\"&\")},t.parseUrl=(e,t)=>{t=Object.assign({decode:!0},t);const[r,n]=i(e,\"#\");return Object.assign({url:r.split(\"?\")[0]||\"\",query:h(f(e),t)},t&&t.parseFragmentIdentifier&&n?{fragmentIdentifier:u(n,t)}:{})},t.stringifyUrl=(e,r)=>{r=Object.assign({encode:!0,strict:!0},r);const n=l(e.url).split(\"?\")[0]||\"\",o=t.extract(e.url),i=t.parse(o,{sort:!1}),s=Object.assign(i,e.query);let a=t.stringify(s,r);a&&(a=`?${a}`);let u=function(e){let t=\"\";const r=e.indexOf(\"#\");return-1!==r&&(t=e.slice(r)),t}(e.url);return e.fragmentIdentifier&&(u=`#${c(e.fragmentIdentifier,r)}`),`${n}${a}${u}`},t.pick=(e,r,n)=>{n=Object.assign({parseFragmentIdentifier:!0},n);const{url:o,query:i,fragmentIdentifier:a}=t.parseUrl(e,n);return t.stringifyUrl({url:o,query:s(i,r),fragmentIdentifier:a},n)},t.exclude=(e,r,n)=>{const o=Array.isArray(r)?e=>!r.includes(e):(e,t)=>!r(e,t);return t.pick(e,o,n)}},1915(e){\"use strict\";var t=\"%[a-f0-9]{2}\",r=new RegExp(\"(\"+t+\")|([^%]+?)\",\"gi\"),n=new RegExp(\"(\"+t+\")+\",\"gi\");function o(e,t){try{return[decodeURIComponent(e.join(\"\"))]}catch(e){}if(1===e.length)return e;t=t||1;var r=e.slice(0,t),n=e.slice(t);return Array.prototype.concat.call([],o(r),o(n))}function i(e){try{return decodeURIComponent(e)}catch(i){for(var t=e.match(r)||[],n=1;n<t.length;n++)t=(e=o(t,n).join(\"\")).match(r)||[];return e}}e.exports=function(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected `encodedURI` to be of type `string`, got `\"+typeof e+\"`\");try{return e=e.replace(/\\+/g,\" \"),decodeURIComponent(e)}catch(t){return function(e){for(var t={\"%FE%FF\":\"��\",\"%FF%FE\":\"��\"},r=n.exec(e);r;){try{t[r[0]]=decodeURIComponent(r[0])}catch(e){var o=i(r[0]);o!==r[0]&&(t[r[0]]=o)}r=n.exec(e)}t[\"%C2\"]=\"�\";for(var s=Object.keys(t),a=0;a<s.length;a++){var c=s[a];e=e.replace(new RegExp(c,\"g\"),t[c])}return e}(e)}}},3814(e){\"use strict\";e.exports=function(e,t){for(var r={},n=Object.keys(e),o=Array.isArray(t),i=0;i<n.length;i++){var s=n[i],a=e[s];(o?-1!==t.indexOf(s):t(s,a,e))&&(r[s]=a)}return r}},168(e){var t;t=function(){function e(){for(var e=0,t={};e<arguments.length;e++){var r=arguments[e];for(var n in r)t[n]=r[n]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function r(n){function o(){}function i(t,r,i){if(\"undefined\"!=typeof document){\"number\"==typeof(i=e({path:\"/\"},o.defaults,i)).expires&&(i.expires=new Date(1*new Date+864e5*i.expires)),i.expires=i.expires?i.expires.toUTCString():\"\";try{var s=JSON.stringify(r);/^[\\{\\[]/.test(s)&&(r=s)}catch(e){}r=n.write?n.write(r,t):encodeURIComponent(String(r)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\\(\\)]/g,escape);var a=\"\";for(var c in i)i[c]&&(a+=\"; \"+c,!0!==i[c]&&(a+=\"=\"+i[c].split(\";\")[0]));return document.cookie=t+\"=\"+r+a}}function s(e,r){if(\"undefined\"!=typeof document){for(var o={},i=document.cookie?document.cookie.split(\"; \"):[],s=0;s<i.length;s++){var a=i[s].split(\"=\"),c=a.slice(1).join(\"=\");r||'\"'!==c.charAt(0)||(c=c.slice(1,-1));try{var u=t(a[0]);if(c=(n.read||n)(c,u)||t(c),r)try{c=JSON.parse(c)}catch(e){}if(o[u]=c,e===u)break}catch(e){}}return e?o[e]:o}}return o.set=i,o.get=function(e){return s(e,!1)},o.getJSON=function(e){return s(e,!0)},o.remove=function(t,r){i(t,\"\",e(r,{expires:-1}))},o.defaults={},o.withConverter=r,o}(function(){})},\"function\"==typeof define&&define.amd&&define(t),e.exports=t()},35(e,t,r){e=r.nmd(e);var n=\"__lodash_hash_undefined__\",o=9007199254740991,i=\"[object Arguments]\",s=\"[object Function]\",a=\"[object Object]\",c=/^\\[object .+?Constructor\\]$/,u=/^(?:0|[1-9]\\d*)$/,p={};p[\"[object Float32Array]\"]=p[\"[object Float64Array]\"]=p[\"[object Int8Array]\"]=p[\"[object Int16Array]\"]=p[\"[object Int32Array]\"]=p[\"[object Uint8Array]\"]=p[\"[object Uint8ClampedArray]\"]=p[\"[object Uint16Array]\"]=p[\"[object Uint32Array]\"]=!0,p[i]=p[\"[object Array]\"]=p[\"[object ArrayBuffer]\"]=p[\"[object Boolean]\"]=p[\"[object DataView]\"]=p[\"[object Date]\"]=p[\"[object Error]\"]=p[s]=p[\"[object Map]\"]=p[\"[object Number]\"]=p[a]=p[\"[object RegExp]\"]=p[\"[object Set]\"]=p[\"[object String]\"]=p[\"[object WeakMap]\"]=!1;var l,f,d,h=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,y=\"object\"==typeof self&&self&&self.Object===Object&&self,g=h||y||Function(\"return this\")(),m=t&&!t.nodeType&&t,v=m&&e&&!e.nodeType&&e,b=v&&v.exports===m,_=b&&h.process,j=function(){try{return v&&v.require&&v.require(\"util\").types||_&&_.binding&&_.binding(\"util\")}catch(e){}}(),O=j&&j.isTypedArray,w=Array.prototype,S=Function.prototype,C=Object.prototype,R=g[\"__core-js_shared__\"],x=S.toString,M=C.hasOwnProperty,P=(l=/[^.]+$/.exec(R&&R.keys&&R.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",k=C.toString,A=x.call(Object),I=RegExp(\"^\"+x.call(M).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),E=b?g.Buffer:void 0,T=g.Symbol,U=g.Uint8Array,q=(E&&E.allocUnsafe,f=Object.getPrototypeOf,d=Object,function(e){return f(d(e))}),F=Object.create,z=C.propertyIsEnumerable,N=w.splice,$=T?T.toStringTag:void 0,B=function(){try{var e=ae(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}(),D=E?E.isBuffer:void 0,H=Math.max,L=Date.now,J=ae(g,\"Map\"),G=ae(Object,\"create\"),K=function(){function e(){}return function(t){if(!be(t))return{};if(F)return F(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();function X(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function V(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function Z(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function W(e){var t=this.__data__=new V(e);this.size=t.size}function Q(e,t,r){(void 0!==r&&!fe(e[t],r)||void 0===r&&!(t in e))&&te(e,t,r)}function Y(e,t,r){var n=e[t];M.call(e,t)&&fe(n,r)&&(void 0!==r||t in e)||te(e,t,r)}function ee(e,t){for(var r=e.length;r--;)if(fe(e[r][0],t))return r;return-1}function te(e,t,r){\"__proto__\"==t&&B?B(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}X.prototype.clear=function(){this.__data__=G?G(null):{},this.size=0},X.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},X.prototype.get=function(e){var t=this.__data__;if(G){var r=t[e];return r===n?void 0:r}return M.call(t,e)?t[e]:void 0},X.prototype.has=function(e){var t=this.__data__;return G?void 0!==t[e]:M.call(t,e)},X.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=G&&void 0===t?n:t,this},V.prototype.clear=function(){this.__data__=[],this.size=0},V.prototype.delete=function(e){var t=this.__data__,r=ee(t,e);return!(r<0||(r==t.length-1?t.pop():N.call(t,r,1),--this.size,0))},V.prototype.get=function(e){var t=this.__data__,r=ee(t,e);return r<0?void 0:t[r][1]},V.prototype.has=function(e){return ee(this.__data__,e)>-1},V.prototype.set=function(e,t){var r=this.__data__,n=ee(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this},Z.prototype.clear=function(){this.size=0,this.__data__={hash:new X,map:new(J||V),string:new X}},Z.prototype.delete=function(e){var t=se(this,e).delete(e);return this.size-=t?1:0,t},Z.prototype.get=function(e){return se(this,e).get(e)},Z.prototype.has=function(e){return se(this,e).has(e)},Z.prototype.set=function(e,t){var r=se(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this},W.prototype.clear=function(){this.__data__=new V,this.size=0},W.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},W.prototype.get=function(e){return this.__data__.get(e)},W.prototype.has=function(e){return this.__data__.has(e)},W.prototype.set=function(e,t){var r=this.__data__;if(r instanceof V){var n=r.__data__;if(!J||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new Z(n)}return r.set(e,t),this.size=r.size,this};function re(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":$&&$ in Object(e)?function(e){var t=M.call(e,$),r=e[$];try{e[$]=void 0;var n=!0}catch(e){}var o=k.call(e);return n&&(t?e[$]=r:delete e[$]),o}(e):function(e){return k.call(e)}(e)}function ne(e){return _e(e)&&re(e)==i}function oe(e,t,r,n,o){e!==t&&function(e,t,r){for(var n=-1,o=Object(e),i=r(e),s=i.length;s--;){var a=i[++n];if(!1===t(o[a],a,o))break}}(t,function(i,s){if(o||(o=new W),be(i))!function(e,t,r,n,o,i,s){var c=pe(e,r),u=pe(t,r),p=s.get(u);if(p)Q(e,r,p);else{var l,f,d,h,y,g=i?i(c,u,r+\"\",e,t,s):void 0,m=void 0===g;if(m){var v=he(u),b=!v&&ge(u),_=!v&&!b&&je(u);g=u,v||b||_?he(c)?g=c:_e(y=c)&&ye(y)?g=function(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}(c):b?(m=!1,g=function(e){return e.slice()}(u)):_?(m=!1,h=new(d=(l=u).buffer).constructor(d.byteLength),new U(h).set(new U(d)),f=h,g=new l.constructor(f,l.byteOffset,l.length)):g=[]:function(e){if(!_e(e)||re(e)!=a)return!1;var t=q(e);if(null===t)return!0;var r=M.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof r&&r instanceof r&&x.call(r)==A}(u)||de(u)?(g=c,de(c)?g=function(e){return function(e,t,r){var n=!r;r||(r={});for(var o=-1,i=t.length;++o<i;){var s=t[o],a=void 0;void 0===a&&(a=e[s]),n?te(r,s,a):Y(r,s,a)}return r}(e,Oe(e))}(c):be(c)&&!me(c)||(g=function(e){return\"function\"!=typeof e.constructor||ue(e)?{}:K(q(e))}(u))):m=!1}m&&(s.set(u,g),o(g,u,n,i,s),s.delete(u)),Q(e,r,g)}}(e,t,s,r,oe,n,o);else{var c=n?n(pe(e,s),i,s+\"\",e,t,o):void 0;void 0===c&&(c=i),Q(e,s,c)}},Oe)}var ie=B?function(e,t){return B(e,\"toString\",{configurable:!0,enumerable:!1,value:(r=t,function(){return r}),writable:!0});var r}:Ce;function se(e,t){var r,n,o=e.__data__;return(\"string\"==(n=typeof(r=t))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?o[\"string\"==typeof t?\"string\":\"hash\"]:o.map}function ae(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!be(e)||function(e){return!!P&&P in e}(e))&&(me(e)?I:c).test(function(e){if(null!=e){try{return x.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e))}(r)?r:void 0}function ce(e,t){var r=typeof e;return!!(t=t??o)&&(\"number\"==r||\"symbol\"!=r&&u.test(e))&&e>-1&&e%1==0&&e<t}function ue(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||C)}function pe(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}var le=function(e){var t=0,r=0;return function(){var n=L(),o=16-(n-r);if(r=n,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(ie);function fe(e,t){return e===t||e!=e&&t!=t}var de=ne(function(){return arguments}())?ne:function(e){return _e(e)&&M.call(e,\"callee\")&&!z.call(e,\"callee\")},he=Array.isArray;function ye(e){return null!=e&&ve(e.length)&&!me(e)}var ge=D||function(){return!1};function me(e){if(!be(e))return!1;var t=re(e);return t==s||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function ve(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=o}function be(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}function _e(e){return null!=e&&\"object\"==typeof e}var je=O?function(e){return function(t){return e(t)}}(O):function(e){return _e(e)&&ve(e.length)&&!!p[re(e)]};function Oe(e){return ye(e)?function(e,t){var r=he(e),n=!r&&de(e),o=!r&&!n&&ge(e),i=!r&&!n&&!o&&je(e),s=r||n||o||i,a=s?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],c=a.length;for(var u in e)!t&&!M.call(e,u)||s&&(\"length\"==u||o&&(\"offset\"==u||\"parent\"==u)||i&&(\"buffer\"==u||\"byteLength\"==u||\"byteOffset\"==u)||ce(u,c))||a.push(u);return a}(e,!0):function(e){if(!be(e))return function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t}(e);var t=ue(e),r=[];for(var n in e)(\"constructor\"!=n||!t&&M.call(e,n))&&r.push(n);return r}(e)}var we,Se=(we=function(e,t,r){oe(e,t,r)},function(e,t){return le(function(e,t,r){return t=H(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=H(n.length-t,0),s=Array(i);++o<i;)s[o]=n[t+o];o=-1;for(var a=Array(t+1);++o<t;)a[o]=n[o];return a[t]=r(s),function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}(e,this,a)}}(e,t,Ce),e+\"\")}(function(e,t){var r=-1,n=t.length,o=n>1?t[n-1]:void 0,i=n>2?t[2]:void 0;for(o=we.length>3&&\"function\"==typeof o?(n--,o):void 0,i&&function(e,t,r){if(!be(r))return!1;var n=typeof t;return!!(\"number\"==n?ye(r)&&ce(t,r.length):\"string\"==n&&t in r)&&fe(r[t],e)}(t[0],t[1],i)&&(o=n<3?void 0:o,n=1),e=Object(e);++r<n;){var s=t[r];s&&we(e,s,r)}return e}));function Ce(e){return e}e.exports=Se},1657(e){\"use strict\";e.exports=(e,t)=>{if(\"string\"!=typeof e||\"string\"!=typeof t)throw new TypeError(\"Expected the arguments to be of type `string`\");if(\"\"===t)return[e];const r=e.indexOf(t);return-1===r?[e]:[e.slice(0,r),e.slice(r+t.length)]}},803(e){\"use strict\";e.exports=e=>encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={id:n,loaded:!1,exports:{}};return e[n](i,i.exports,r),i.loaded=!0,i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var n={};(()=>{\"use strict\";r.r(n),r.d(n,{createZipPaymentStrategy:()=>C});var e=r(168),t=function(){return t=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},t.apply(this,arguments)};Object.create,Object.create,\"function\"==typeof SuppressedError&&SuppressedError;var o=/application\\/(\\w+\\+)?json/,i=/application\\/x-www-form-urlencoded/;const s=function(){function e(){}return e.prototype.toRequestBody=function(e){var t,r=e.headers?this._getHeader(e.headers,\"Content-Type\"):\"\";if(e.body){if(o.test(r))return JSON.stringify(e.body);if(i.test(r))return\"object\"!=typeof(t=e.body)||null===t?t:Object.keys(t).filter(function(e){return void 0!==t[e]}).map(function(e){var r=t[e];return\"string\"==typeof r?\"\".concat(e,\"=\").concat(encodeURIComponent(r)):\"\".concat(e,\"=\").concat(encodeURIComponent(JSON.stringify(r)||\"\"))}).join(\"&\")}return e.body},e.prototype.toResponse=function(e){var t=this._parseResponseHeaders(e.getAllResponseHeaders());return{body:this._parseResponseBody(\"response\"in e?e.response:e.responseText,t),headers:t,status:e.status,statusText:e.statusText}},e.prototype._parseResponseBody=function(e,t){var r=this._getHeader(t,\"Content-Type\");return e&&o.test(r)?JSON.parse(e):e},e.prototype._parseResponseHeaders=function(e){return(e?e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/):[]).reduce(function(e,r){var n,o=r.split(\":\"),i=(o.shift()||\"\").trim();return i?t(t({},e),((n={})[i.toLowerCase()]=o.join(\":\").trim(),n)):e},{})},e.prototype._getHeader=function(e,t){return e&&t&&(e[t]||e[t.toLowerCase()])||\"\"},e}();var a=r(5889);const c=function(){function e(){}return e.prototype.createRequest=function(e,t){var r=new XMLHttpRequest;return this._configureRequest(r,e,t),r},e.prototype._configureRequest=function(e,t,r){void 0===r&&(r={}),e.open(r.method||\"GET\",this._formatUrl(t,r.params,r.encodeParams),!0),r.headers&&this._configureRequestHeaders(e,r.headers),\"boolean\"==typeof r.credentials&&(e.withCredentials=r.credentials),\"number\"==typeof r.timeout&&(e.timeout=r.timeout)},e.prototype._configureRequestHeaders=function(e,t){Object.keys(t).filter(function(e){return null!==t[e]}).forEach(function(r){e.setRequestHeader(r,t[r])})},e.prototype._formatUrl=function(e,t,r){return void 0===r&&(r=!0),t&&0!==Object.keys(t).length?\"\".concat(e,\"?\").concat(a.stringify(t,{encode:r})):e},e}();var u=r(35),p=r.n(u),l=function(){function e(){this._cache={}}return e.prototype.read=function(e,t){var r=this.getKey(e,t.params);return this._cache[r]||null},e.prototype.write=function(e,t,r){var n=this.getKey(e,t.params);this._cache[n]=r},e.prototype.getKey=function(e,t){return void 0===t&&(t={}),0===Object.keys(t).length?e:\"\".concat(e,\"?\").concat(a.stringify(t))},e}();const f=function(){function e(e){var t=this;this._delay=e,this._promise=new Promise(function(e){t._resolve=e})}return e.prototype.onComplete=function(e){this._promise.then(e)},e.prototype.complete=function(){this._resolve(),void 0!==this._timeoutToken&&clearTimeout(this._timeoutToken)},e.prototype.start=function(){var e=this;void 0!==this._delay&&(this._timeoutToken=setTimeout(function(){return e.complete()},this._delay))},e}(),d=function(){function e(e,t,r,n){void 0===n&&(n={}),this._requestFactory=e,this._payloadTransformer=t,this._cookie=r,this._options=n,this._cache=this._options.cache||new l}return e.prototype.sendRequest=function(e,t){var r=this,n=this._mergeDefaultOptions(e,t),o=this._getCachedRequest(e,n);if(o)return Promise.resolve(o);var i=this._requestFactory.createRequest(this._prependHost(e),n);return new Promise(function(t,o){var s,a=function(){var s=r._payloadTransformer.toResponse(i);s.status>=200&&s.status<300?(r._cacheRequest(e,n,s),t(s)):o(s)};i.onload=a,i.onerror=a,i.onabort=a,i.ontimeout=a,n.timeout instanceof f&&(n.timeout.onComplete(function(){return i.abort()}),n.timeout.start()),!(s=n.timeout)||\"object\"!=typeof s&&\"function\"!=typeof s||\"function\"!=typeof s.then||n.timeout.then(function(){return i.abort()}),i.send(r._payloadTransformer.toRequestBody(n))})},e.prototype.get=function(e,r){return this.sendRequest(e,t(t({},r),{method:\"GET\"}))},e.prototype.post=function(e,r){return this.sendRequest(e,t(t({},r),{method:\"POST\"}))},e.prototype.put=function(e,r){return this.sendRequest(e,t(t({},r),{method:\"PUT\"}))},e.prototype.patch=function(e,r){return this.sendRequest(e,t(t({},r),{method:\"PATCH\"}))},e.prototype.delete=function(e,r){return this.sendRequest(e,t(t({},r),{method:\"DELETE\"}))},e.prototype._mergeDefaultOptions=function(e,t){var r={credentials:!0,encodeParams:!0,headers:{Accept:\"application/json, text/plain, */*\"},method:\"GET\"},n=this._cookie.get(\"XSRF-TOKEN\");return n&&r.headers&&!this._isAssetRequest(e,t)&&this._isLocalRequest(e)&&(r.headers[\"X-XSRF-TOKEN\"]=n),t&&t.body&&r.headers&&(r.headers[\"Content-Type\"]=\"application/json\"),p()({},r,t)},e.prototype._prependHost=function(e){return!this._options.host||/^https?:\\/\\//.test(e)?e:\"\".concat(this._options.host.replace(/\\/$/,\"\"),\"/\").concat(e.replace(/^\\//,\"\"))},e.prototype._shouldCacheRequest=function(e){return\"GET\"===(e.method||\"GET\").toUpperCase()&&Boolean(e.cache)},e.prototype._getCachedRequest=function(e,t){return this._shouldCacheRequest(t)?this._cache.read(e,t):null},e.prototype._cacheRequest=function(e,t,r){this._shouldCacheRequest(t)&&this._cache.write(e,t,r)},e.prototype._isAssetRequest=function(e,t){return(!t||!t.method||\"GET\"===t.method.toUpperCase())&&/\\.(png|gif|jpe?g|css|js|json|svg|html?)$/.test(e.split(\"?\")[0])},e.prototype._isLocalRequest=function(e){return!!e.match(new RegExp(\"^(https?:)?//\"+window.location.hostname))||!e.match(new RegExp(\"^(https?:)?//\"))},e}();var h;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(h||(h={}));const y=h,g={\"X-Checkout-SDK-Version\":\"1.916.1\"};var m;class v{constructor(e){this._requestSender=e}saveExternalId(e,t){return r=this,n=void 0,i=function*(){const r=`/api/storefront/payment/${e}/save-external-id`,n={headers:Object.assign({Accept:y.JsonV1,\"X-API-INTERNAL\":\"This API endpoint is for internal use only and may change in the future\"},g),body:{externalId:t,provider:e}};yield this._requestSender.post(r,n)},new((o=void 0)||(o=Promise))(function(e,t){function s(e){try{c(i.next(e))}catch(e){t(e)}}function a(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o(function(e){e(r)})).then(s,a)}c((i=i.apply(r,n||[])).next())});var r,n,o,i}}class b extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class _ extends b{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class j extends _{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(m||(m={}));class O extends b{constructor(e){super(function(e){switch(e){case m.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case m.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case m.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case m.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case m.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case m.MissingCheckoutConfig:case m.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case m.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case m.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case m.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case m.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case m.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case m.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class w extends b{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class S{constructor(e,t){this.paymentIntegrationService=e,this.storefrontPaymentRequestSender=t}initialize(){return Promise.resolve()}execute(e,t){return r=this,n=void 0,i=function*(){const{payment:r}=e,n=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"payment\"]);if(!r)throw new j([\"payment\"]);const{methodId:o}=r,{getPaymentMethodOrThrow:i}=yield this.paymentIntegrationService.loadPaymentMethod(o,t),{clientToken:s,initializationData:a}=i(o),c=null==a?void 0:a.redirectUrl;if(!s||!c)throw new O(m.MissingPaymentMethod);const{id:u}=JSON.parse(s);if(!u)throw new O(m.MissingPaymentToken);const{isStoreCreditApplied:p}=this.paymentIntegrationService.getState().getCheckoutOrThrow();yield this.paymentIntegrationService.applyStoreCredit(p),yield this.paymentIntegrationService.initializePayment(o,{useStoreCredit:p}),yield this.paymentIntegrationService.submitOrder(n,t),yield this._prepareForReferredRegistration(o,u);try{yield this.paymentIntegrationService.submitPayment({methodId:o,paymentData:{nonce:u}})}catch(e){if((e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)&&\"additional_action_required\"===e.body.status)return new Promise(()=>window.location.replace(c));throw e}},new((o=void 0)||(o=Promise))(function(e,t){function s(e){try{c(i.next(e))}catch(e){t(e)}}function a(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o(function(e){e(r)})).then(s,a)}c((i=i.apply(r,n||[])).next())});var r,n,o,i}finalize(){return Promise.reject(new w)}deinitialize(){return Promise.resolve()}_prepareForReferredRegistration(e,t){return this.storefrontPaymentRequestSender.saveExternalId(e,t)}}const C=Object.assign(t=>{const{getHost:r}=t.getState(),n=(o={host:r()},new d(new c,new s,e,o));var o;const i=new v(n);return new S(t,i)},{resolveIds:[{id:\"zip\"},{id:\"quadpay\"}]})})(),module.exports=n})();\n//# sourceMappingURL=zip.js.map"
  },
  {
    "path": "dist/cjs/internal-mappers.js",
    "content": "(()=>{var n={9440(n,t,r){n=r.nmd(n),function(){var e,u=\"Expected a function\",i=\"__lodash_hash_undefined__\",o=\"__lodash_placeholder__\",a=32,c=128,f=1/0,l=9007199254740991,s=NaN,p=4294967295,h=[[\"ary\",c],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",a],[\"partialRight\",64],[\"rearg\",256]],v=\"[object Arguments]\",_=\"[object Array]\",g=\"[object Boolean]\",d=\"[object Date]\",y=\"[object Error]\",m=\"[object Function]\",b=\"[object GeneratorFunction]\",w=\"[object Map]\",x=\"[object Number]\",A=\"[object Object]\",I=\"[object Promise]\",j=\"[object RegExp]\",O=\"[object Set]\",C=\"[object String]\",T=\"[object Symbol]\",k=\"[object WeakMap]\",S=\"[object ArrayBuffer]\",E=\"[object DataView]\",R=\"[object Float32Array]\",M=\"[object Float64Array]\",z=\"[object Int8Array]\",D=\"[object Int16Array]\",U=\"[object Int32Array]\",B=\"[object Uint8Array]\",P=\"[object Uint8ClampedArray]\",L=\"[object Uint16Array]\",N=\"[object Uint32Array]\",W=/\\b__p \\+= '';/g,$=/\\b(__p \\+=) '' \\+/g,q=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,F=/&(?:amp|lt|gt|quot|#39);/g,G=/[&<>\"']/g,K=RegExp(F.source),Z=RegExp(G.source),V=/<%-([\\s\\S]+?)%>/g,H=/<%([\\s\\S]+?)%>/g,Y=/<%=([\\s\\S]+?)%>/g,J=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Q=/^\\w*$/,X=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,nn=/[\\\\^$.*+?()[\\]{}|]/g,tn=RegExp(nn.source),rn=/^\\s+/,en=/\\s/,un=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,on=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,an=/,? & /,cn=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,fn=/[()=,{}\\[\\]\\/\\s]/,ln=/\\\\(\\\\)?/g,sn=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,pn=/\\w*$/,hn=/^[-+]0x[0-9a-f]+$/i,vn=/^0b[01]+$/i,_n=/^\\[object .+?Constructor\\]$/,gn=/^0o[0-7]+$/i,dn=/^(?:0|[1-9]\\d*)$/,yn=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,mn=/($^)/,bn=/['\\n\\r\\u2028\\u2029\\\\]/g,wn=\"\\\\ud800-\\\\udfff\",xn=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",An=\"\\\\u2700-\\\\u27bf\",In=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",jn=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",On=\"\\\\ufe0e\\\\ufe0f\",Cn=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Tn=\"[\"+wn+\"]\",kn=\"[\"+Cn+\"]\",Sn=\"[\"+xn+\"]\",En=\"\\\\d+\",Rn=\"[\"+An+\"]\",Mn=\"[\"+In+\"]\",zn=\"[^\"+wn+Cn+En+An+In+jn+\"]\",Dn=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Un=\"[^\"+wn+\"]\",Bn=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Pn=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ln=\"[\"+jn+\"]\",Nn=\"\\\\u200d\",Wn=\"(?:\"+Mn+\"|\"+zn+\")\",$n=\"(?:\"+Ln+\"|\"+zn+\")\",qn=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",Fn=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",Gn=\"(?:\"+Sn+\"|\"+Dn+\")?\",Kn=\"[\"+On+\"]?\",Zn=Kn+Gn+\"(?:\"+Nn+\"(?:\"+[Un,Bn,Pn].join(\"|\")+\")\"+Kn+Gn+\")*\",Vn=\"(?:\"+[Rn,Bn,Pn].join(\"|\")+\")\"+Zn,Hn=\"(?:\"+[Un+Sn+\"?\",Sn,Bn,Pn,Tn].join(\"|\")+\")\",Yn=RegExp(\"['’]\",\"g\"),Jn=RegExp(Sn,\"g\"),Qn=RegExp(Dn+\"(?=\"+Dn+\")|\"+Hn+Zn,\"g\"),Xn=RegExp([Ln+\"?\"+Mn+\"+\"+qn+\"(?=\"+[kn,Ln,\"$\"].join(\"|\")+\")\",$n+\"+\"+Fn+\"(?=\"+[kn,Ln+Wn,\"$\"].join(\"|\")+\")\",Ln+\"?\"+Wn+\"+\"+qn,Ln+\"+\"+Fn,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",En,Vn].join(\"|\"),\"g\"),nt=RegExp(\"[\"+Nn+wn+xn+On+\"]\"),tt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,rt=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],et=-1,ut={};ut[R]=ut[M]=ut[z]=ut[D]=ut[U]=ut[B]=ut[P]=ut[L]=ut[N]=!0,ut[v]=ut[_]=ut[S]=ut[g]=ut[E]=ut[d]=ut[y]=ut[m]=ut[w]=ut[x]=ut[A]=ut[j]=ut[O]=ut[C]=ut[k]=!1;var it={};it[v]=it[_]=it[S]=it[E]=it[g]=it[d]=it[R]=it[M]=it[z]=it[D]=it[U]=it[w]=it[x]=it[A]=it[j]=it[O]=it[C]=it[T]=it[B]=it[P]=it[L]=it[N]=!0,it[y]=it[m]=it[k]=!1;var ot={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},at=parseFloat,ct=parseInt,ft=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,lt=\"object\"==typeof self&&self&&self.Object===Object&&self,st=ft||lt||Function(\"return this\")(),pt=t&&!t.nodeType&&t,ht=pt&&n&&!n.nodeType&&n,vt=ht&&ht.exports===pt,_t=vt&&ft.process,gt=function(){try{return ht&&ht.require&&ht.require(\"util\").types||_t&&_t.binding&&_t.binding(\"util\")}catch(n){}}(),dt=gt&&gt.isArrayBuffer,yt=gt&&gt.isDate,mt=gt&&gt.isMap,bt=gt&&gt.isRegExp,wt=gt&&gt.isSet,xt=gt&&gt.isTypedArray;function At(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function It(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function jt(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&!1!==t(n[r],r,n););return n}function Ot(n,t){for(var r=null==n?0:n.length;r--&&!1!==t(n[r],r,n););return n}function Ct(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return!1;return!0}function Tt(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function kt(n,t){return!(null==n||!n.length)&&Lt(n,t,0)>-1}function St(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return!0;return!1}function Et(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function Rt(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function Mt(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);return r}function zt(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function Dt(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return!0;return!1}var Ut=qt(\"length\");function Bt(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,!1}),e}function Pt(n,t,r,e){for(var u=n.length,i=r+(e?1:-1);e?i--:++i<u;)if(t(n[i],i,n))return i;return-1}function Lt(n,t,r){return t==t?function(n,t,r){for(var e=r-1,u=n.length;++e<u;)if(n[e]===t)return e;return-1}(n,t,r):Pt(n,Wt,r)}function Nt(n,t,r,e){for(var u=r-1,i=n.length;++u<i;)if(e(n[u],t))return u;return-1}function Wt(n){return n!=n}function $t(n,t){var r=null==n?0:n.length;return r?Kt(n,t)/r:s}function qt(n){return function(t){return null==t?e:t[n]}}function Ft(n){return function(t){return null==n?e:n[t]}}function Gt(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=!1,n):t(r,n,u,i)}),r}function Kt(n,t){for(var r,u=-1,i=n.length;++u<i;){var o=t(n[u]);o!==e&&(r=r===e?o:r+o)}return r}function Zt(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function Vt(n){return n?n.slice(0,sr(n)+1).replace(rn,\"\"):n}function Ht(n){return function(t){return n(t)}}function Yt(n,t){return Et(t,function(t){return n[t]})}function Jt(n,t){return n.has(t)}function Qt(n,t){for(var r=-1,e=n.length;++r<e&&Lt(t,n[r],0)>-1;);return r}function Xt(n,t){for(var r=n.length;r--&&Lt(t,n[r],0)>-1;);return r}var nr=Ft({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"}),tr=Ft({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"});function rr(n){return\"\\\\\"+ot[n]}function er(n){return nt.test(n)}function ur(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function ir(n,t){return function(r){return n(t(r))}}function or(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var a=n[r];a!==t&&a!==o||(n[r]=o,i[u++]=r)}return i}function ar(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=n}),r}function cr(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function fr(n){return er(n)?function(n){for(var t=Qn.lastIndex=0;Qn.test(n);)++t;return t}(n):Ut(n)}function lr(n){return er(n)?function(n){return n.match(Qn)||[]}(n):function(n){return n.split(\"\")}(n)}function sr(n){for(var t=n.length;t--&&en.test(n.charAt(t)););return t}var pr=Ft({\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"}),hr=function n(t){var r,en=(t=null==t?st:hr.defaults(st.Object(),t,hr.pick(st,rt))).Array,wn=t.Date,xn=t.Error,An=t.Function,In=t.Math,jn=t.Object,On=t.RegExp,Cn=t.String,Tn=t.TypeError,kn=en.prototype,Sn=An.prototype,En=jn.prototype,Rn=t[\"__core-js_shared__\"],Mn=Sn.toString,zn=En.hasOwnProperty,Dn=0,Un=(r=/[^.]+$/.exec(Rn&&Rn.keys&&Rn.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\",Bn=En.toString,Pn=Mn.call(jn),Ln=st._,Nn=On(\"^\"+Mn.call(zn).replace(nn,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Wn=vt?t.Buffer:e,$n=t.Symbol,qn=t.Uint8Array,Fn=Wn?Wn.allocUnsafe:e,Gn=ir(jn.getPrototypeOf,jn),Kn=jn.create,Zn=En.propertyIsEnumerable,Vn=kn.splice,Hn=$n?$n.isConcatSpreadable:e,Qn=$n?$n.iterator:e,nt=$n?$n.toStringTag:e,ot=function(){try{var n=ci(jn,\"defineProperty\");return n({},\"\",{}),n}catch(n){}}(),ft=t.clearTimeout!==st.clearTimeout&&t.clearTimeout,lt=wn&&wn.now!==st.Date.now&&wn.now,pt=t.setTimeout!==st.setTimeout&&t.setTimeout,ht=In.ceil,_t=In.floor,gt=jn.getOwnPropertySymbols,Ut=Wn?Wn.isBuffer:e,Ft=t.isFinite,vr=kn.join,_r=ir(jn.keys,jn),gr=In.max,dr=In.min,yr=wn.now,mr=t.parseInt,br=In.random,wr=kn.reverse,xr=ci(t,\"DataView\"),Ar=ci(t,\"Map\"),Ir=ci(t,\"Promise\"),jr=ci(t,\"Set\"),Or=ci(t,\"WeakMap\"),Cr=ci(jn,\"create\"),Tr=Or&&new Or,kr={},Sr=Ui(xr),Er=Ui(Ar),Rr=Ui(Ir),Mr=Ui(jr),zr=Ui(Or),Dr=$n?$n.prototype:e,Ur=Dr?Dr.valueOf:e,Br=Dr?Dr.toString:e;function Pr(n){if(na(n)&&!qo(n)&&!(n instanceof $r)){if(n instanceof Wr)return n;if(zn.call(n,\"__wrapped__\"))return Bi(n)}return new Wr(n)}var Lr=function(){function n(){}return function(t){if(!Xo(t))return{};if(Kn)return Kn(t);n.prototype=t;var r=new n;return n.prototype=e,r}}();function Nr(){}function Wr(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=e}function $r(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=p,this.__views__=[]}function qr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Fr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Gr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Kr(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new Gr;++t<r;)this.add(n[t])}function Zr(n){var t=this.__data__=new Fr(n);this.size=t.size}function Vr(n,t){var r=qo(n),e=!r&&$o(n),u=!r&&!e&&Zo(n),i=!r&&!e&&!u&&ca(n),o=r||e||u||i,a=o?Zt(n.length,Cn):[],c=a.length;for(var f in n)!t&&!zn.call(n,f)||o&&(\"length\"==f||u&&(\"offset\"==f||\"parent\"==f)||i&&(\"buffer\"==f||\"byteLength\"==f||\"byteOffset\"==f)||_i(f,c))||a.push(f);return a}function Hr(n){var t=n.length;return t?n[Ge(0,t-1)]:e}function Yr(n,t){return Ei(Ou(n),ie(t,0,n.length))}function Jr(n){return Ei(Ou(n))}function Qr(n,t,r){(r!==e&&!Lo(n[t],r)||r===e&&!(t in n))&&ee(n,t,r)}function Xr(n,t,r){var u=n[t];zn.call(n,t)&&Lo(u,r)&&(r!==e||t in n)||ee(n,t,r)}function ne(n,t){for(var r=n.length;r--;)if(Lo(n[r][0],t))return r;return-1}function te(n,t,r,e){return le(n,function(n,u,i){t(e,n,r(n),i)}),e}function re(n,t){return n&&Cu(t,Sa(t),n)}function ee(n,t,r){\"__proto__\"==t&&ot?ot(n,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):n[t]=r}function ue(n,t){for(var r=-1,u=t.length,i=en(u),o=null==n;++r<u;)i[r]=o?e:ja(n,t[r]);return i}function ie(n,t,r){return n==n&&(r!==e&&(n=n<=r?n:r),t!==e&&(n=n>=t?n:t)),n}function oe(n,t,r,u,i,o){var a,c=1&t,f=2&t,l=4&t;if(r&&(a=i?r(n,u,i,o):r(n)),a!==e)return a;if(!Xo(n))return n;var s=qo(n);if(s){if(a=function(n){var t=n.length,r=new n.constructor(t);return t&&\"string\"==typeof n[0]&&zn.call(n,\"index\")&&(r.index=n.index,r.input=n.input),r}(n),!c)return Ou(n,a)}else{var p=si(n),h=p==m||p==b;if(Zo(n))return bu(n,c);if(p==A||p==v||h&&!i){if(a=f||h?{}:hi(n),!c)return f?function(n,t){return Cu(n,li(n),t)}(n,function(n,t){return n&&Cu(t,Ea(t),n)}(a,n)):function(n,t){return Cu(n,fi(n),t)}(n,re(a,n))}else{if(!it[p])return i?n:{};a=function(n,t,r){var e,u=n.constructor;switch(t){case S:return wu(n);case g:case d:return new u(+n);case E:return function(n,t){var r=t?wu(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.byteLength)}(n,r);case R:case M:case z:case D:case U:case B:case P:case L:case N:return xu(n,r);case w:return new u;case x:case C:return new u(n);case j:return function(n){var t=new n.constructor(n.source,pn.exec(n));return t.lastIndex=n.lastIndex,t}(n);case O:return new u;case T:return e=n,Ur?jn(Ur.call(e)):{}}}(n,p,c)}}o||(o=new Zr);var _=o.get(n);if(_)return _;o.set(n,a),ia(n)?n.forEach(function(e){a.add(oe(e,t,r,e,n,o))}):ta(n)&&n.forEach(function(e,u){a.set(u,oe(e,t,r,u,n,o))});var y=s?e:(l?f?ti:ni:f?Ea:Sa)(n);return jt(y||n,function(e,u){y&&(e=n[u=e]),Xr(a,u,oe(e,t,r,u,n,o))}),a}function ae(n,t,r){var u=r.length;if(null==n)return!u;for(n=jn(n);u--;){var i=r[u],o=t[i],a=n[i];if(a===e&&!(i in n)||!o(a))return!1}return!0}function ce(n,t,r){if(\"function\"!=typeof n)throw new Tn(u);return Ci(function(){n.apply(e,r)},t)}function fe(n,t,r,e){var u=-1,i=kt,o=!0,a=n.length,c=[],f=t.length;if(!a)return c;r&&(t=Et(t,Ht(r))),e?(i=St,o=!1):t.length>=200&&(i=Jt,o=!1,t=new Kr(t));n:for(;++u<a;){var l=n[u],s=null==r?l:r(l);if(l=e||0!==l?l:0,o&&s==s){for(var p=f;p--;)if(t[p]===s)continue n;c.push(l)}else i(t,s,e)||c.push(l)}return c}Pr.templateSettings={escape:V,evaluate:H,interpolate:Y,variable:\"\",imports:{_:Pr}},Pr.prototype=Nr.prototype,Pr.prototype.constructor=Pr,Wr.prototype=Lr(Nr.prototype),Wr.prototype.constructor=Wr,$r.prototype=Lr(Nr.prototype),$r.prototype.constructor=$r,qr.prototype.clear=function(){this.__data__=Cr?Cr(null):{},this.size=0},qr.prototype.delete=function(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t},qr.prototype.get=function(n){var t=this.__data__;if(Cr){var r=t[n];return r===i?e:r}return zn.call(t,n)?t[n]:e},qr.prototype.has=function(n){var t=this.__data__;return Cr?t[n]!==e:zn.call(t,n)},qr.prototype.set=function(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=Cr&&t===e?i:t,this},Fr.prototype.clear=function(){this.__data__=[],this.size=0},Fr.prototype.delete=function(n){var t=this.__data__,r=ne(t,n);return!(r<0||(r==t.length-1?t.pop():Vn.call(t,r,1),--this.size,0))},Fr.prototype.get=function(n){var t=this.__data__,r=ne(t,n);return r<0?e:t[r][1]},Fr.prototype.has=function(n){return ne(this.__data__,n)>-1},Fr.prototype.set=function(n,t){var r=this.__data__,e=ne(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this},Gr.prototype.clear=function(){this.size=0,this.__data__={hash:new qr,map:new(Ar||Fr),string:new qr}},Gr.prototype.delete=function(n){var t=oi(this,n).delete(n);return this.size-=t?1:0,t},Gr.prototype.get=function(n){return oi(this,n).get(n)},Gr.prototype.has=function(n){return oi(this,n).has(n)},Gr.prototype.set=function(n,t){var r=oi(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},Kr.prototype.add=Kr.prototype.push=function(n){return this.__data__.set(n,i),this},Kr.prototype.has=function(n){return this.__data__.has(n)},Zr.prototype.clear=function(){this.__data__=new Fr,this.size=0},Zr.prototype.delete=function(n){var t=this.__data__,r=t.delete(n);return this.size=t.size,r},Zr.prototype.get=function(n){return this.__data__.get(n)},Zr.prototype.has=function(n){return this.__data__.has(n)},Zr.prototype.set=function(n,t){var r=this.__data__;if(r instanceof Fr){var e=r.__data__;if(!Ar||e.length<199)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new Gr(e)}return r.set(n,t),this.size=r.size,this};var le=Su(ye),se=Su(me,!0);function pe(n,t){var r=!0;return le(n,function(n,e,u){return r=!!t(n,e,u)}),r}function he(n,t,r){for(var u=-1,i=n.length;++u<i;){var o=n[u],a=t(o);if(null!=a&&(c===e?a==a&&!aa(a):r(a,c)))var c=a,f=o}return f}function ve(n,t){var r=[];return le(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function _e(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=vi),u||(u=[]);++i<o;){var a=n[i];t>0&&r(a)?t>1?_e(a,t-1,r,e,u):Rt(u,a):e||(u[u.length]=a)}return u}var ge=Eu(),de=Eu(!0);function ye(n,t){return n&&ge(n,t,Sa)}function me(n,t){return n&&de(n,t,Sa)}function be(n,t){return Tt(t,function(t){return Yo(n[t])})}function we(n,t){for(var r=0,u=(t=gu(t,n)).length;null!=n&&r<u;)n=n[Di(t[r++])];return r&&r==u?n:e}function xe(n,t,r){var e=t(n);return qo(n)?e:Rt(e,r(n))}function Ae(n){return null==n?n===e?\"[object Undefined]\":\"[object Null]\":nt&&nt in jn(n)?function(n){var t=zn.call(n,nt),r=n[nt];try{n[nt]=e;var u=!0}catch(n){}var i=Bn.call(n);return u&&(t?n[nt]=r:delete n[nt]),i}(n):function(n){return Bn.call(n)}(n)}function Ie(n,t){return n>t}function je(n,t){return null!=n&&zn.call(n,t)}function Oe(n,t){return null!=n&&t in jn(n)}function Ce(n,t,r){for(var u=r?St:kt,i=n[0].length,o=n.length,a=o,c=en(o),f=1/0,l=[];a--;){var s=n[a];a&&t&&(s=Et(s,Ht(t))),f=dr(s.length,f),c[a]=!r&&(t||i>=120&&s.length>=120)?new Kr(a&&s):e}s=n[0];var p=-1,h=c[0];n:for(;++p<i&&l.length<f;){var v=s[p],_=t?t(v):v;if(v=r||0!==v?v:0,!(h?Jt(h,_):u(l,_,r))){for(a=o;--a;){var g=c[a];if(!(g?Jt(g,_):u(n[a],_,r)))continue n}h&&h.push(_),l.push(v)}}return l}function Te(n,t,r){var u=null==(n=Ii(n,t=gu(t,n)))?n:n[Di(Vi(t))];return null==u?e:At(u,n,r)}function ke(n){return na(n)&&Ae(n)==v}function Se(n,t,r,u,i){return n===t||(null==n||null==t||!na(n)&&!na(t)?n!=n&&t!=t:function(n,t,r,u,i,o){var a=qo(n),c=qo(t),f=a?_:si(n),l=c?_:si(t),s=(f=f==v?A:f)==A,p=(l=l==v?A:l)==A,h=f==l;if(h&&Zo(n)){if(!Zo(t))return!1;a=!0,s=!1}if(h&&!s)return o||(o=new Zr),a||ca(n)?Qu(n,t,r,u,i,o):function(n,t,r,e,u,i,o){switch(r){case E:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1;n=n.buffer,t=t.buffer;case S:return!(n.byteLength!=t.byteLength||!i(new qn(n),new qn(t)));case g:case d:case x:return Lo(+n,+t);case y:return n.name==t.name&&n.message==t.message;case j:case C:return n==t+\"\";case w:var a=ur;case O:var c=1&e;if(a||(a=ar),n.size!=t.size&&!c)return!1;var f=o.get(n);if(f)return f==t;e|=2,o.set(n,t);var l=Qu(a(n),a(t),e,u,i,o);return o.delete(n),l;case T:if(Ur)return Ur.call(n)==Ur.call(t)}return!1}(n,t,f,r,u,i,o);if(!(1&r)){var m=s&&zn.call(n,\"__wrapped__\"),b=p&&zn.call(t,\"__wrapped__\");if(m||b){var I=m?n.value():n,k=b?t.value():t;return o||(o=new Zr),i(I,k,r,u,o)}}return!!h&&(o||(o=new Zr),function(n,t,r,u,i,o){var a=1&r,c=ni(n),f=c.length;if(f!=ni(t).length&&!a)return!1;for(var l=f;l--;){var s=c[l];if(!(a?s in t:zn.call(t,s)))return!1}var p=o.get(n),h=o.get(t);if(p&&h)return p==t&&h==n;var v=!0;o.set(n,t),o.set(t,n);for(var _=a;++l<f;){var g=n[s=c[l]],d=t[s];if(u)var y=a?u(d,g,s,t,n,o):u(g,d,s,n,t,o);if(!(y===e?g===d||i(g,d,r,u,o):y)){v=!1;break}_||(_=\"constructor\"==s)}if(v&&!_){var m=n.constructor,b=t.constructor;m==b||!(\"constructor\"in n)||!(\"constructor\"in t)||\"function\"==typeof m&&m instanceof m&&\"function\"==typeof b&&b instanceof b||(v=!1)}return o.delete(n),o.delete(t),v}(n,t,r,u,i,o))}(n,t,r,u,Se,i))}function Ee(n,t,r,u){var i=r.length,o=i,a=!u;if(null==n)return!o;for(n=jn(n);i--;){var c=r[i];if(a&&c[2]?c[1]!==n[c[0]]:!(c[0]in n))return!1}for(;++i<o;){var f=(c=r[i])[0],l=n[f],s=c[1];if(a&&c[2]){if(l===e&&!(f in n))return!1}else{var p=new Zr;if(u)var h=u(l,s,f,n,t,p);if(!(h===e?Se(s,l,3,u,p):h))return!1}}return!0}function Re(n){return!(!Xo(n)||(t=n,Un&&Un in t))&&(Yo(n)?Nn:_n).test(Ui(n));var t}function Me(n){return\"function\"==typeof n?n:null==n?rc:\"object\"==typeof n?qo(n)?Pe(n[0],n[1]):Be(n):sc(n)}function ze(n){if(!bi(n))return _r(n);var t=[];for(var r in jn(n))zn.call(n,r)&&\"constructor\"!=r&&t.push(r);return t}function De(n,t){return n<t}function Ue(n,t){var r=-1,e=Go(n)?en(n.length):[];return le(n,function(n,u,i){e[++r]=t(n,u,i)}),e}function Be(n){var t=ai(n);return 1==t.length&&t[0][2]?xi(t[0][0],t[0][1]):function(r){return r===n||Ee(r,n,t)}}function Pe(n,t){return di(n)&&wi(t)?xi(Di(n),t):function(r){var u=ja(r,n);return u===e&&u===t?Oa(r,n):Se(t,u,3)}}function Le(n,t,r,u,i){n!==t&&ge(t,function(o,a){if(i||(i=new Zr),Xo(o))!function(n,t,r,u,i,o,a){var c=ji(n,r),f=ji(t,r),l=a.get(f);if(l)Qr(n,r,l);else{var s=o?o(c,f,r+\"\",n,t,a):e,p=s===e;if(p){var h=qo(f),v=!h&&Zo(f),_=!h&&!v&&ca(f);s=f,h||v||_?qo(c)?s=c:Ko(c)?s=Ou(c):v?(p=!1,s=bu(f,!0)):_?(p=!1,s=xu(f,!0)):s=[]:ea(f)||$o(f)?(s=c,$o(c)?s=ga(c):Xo(c)&&!Yo(c)||(s=hi(f))):p=!1}p&&(a.set(f,s),i(s,f,u,o,a),a.delete(f)),Qr(n,r,s)}}(n,t,a,r,Le,u,i);else{var c=u?u(ji(n,a),o,a+\"\",n,t,i):e;c===e&&(c=o),Qr(n,a,c)}},Ea)}function Ne(n,t){var r=n.length;if(r)return _i(t+=t<0?r:0,r)?n[t]:e}function We(n,t,r){t=t.length?Et(t,function(n){return qo(n)?function(t){return we(t,1===n.length?n[0]:n)}:n}):[rc];var e=-1;t=Et(t,Ht(ii()));var u=Ue(n,function(n,r,u){var i=Et(t,function(t){return t(n)});return{criteria:i,index:++e,value:n}});return function(n){var t=n.length;for(n.sort(function(n,t){return function(n,t,r){for(var e=-1,u=n.criteria,i=t.criteria,o=u.length,a=r.length;++e<o;){var c=Au(u[e],i[e]);if(c)return e>=a?c:c*(\"desc\"==r[e]?-1:1)}return n.index-t.index}(n,t,r)});t--;)n[t]=n[t].value;return n}(u)}function $e(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],a=we(n,o);r(a,o)&&Ye(i,gu(o,n),a)}return i}function qe(n,t,r,e){var u=e?Nt:Lt,i=-1,o=t.length,a=n;for(n===t&&(t=Ou(t)),r&&(a=Et(n,Ht(r)));++i<o;)for(var c=0,f=t[i],l=r?r(f):f;(c=u(a,l,c,e))>-1;)a!==n&&Vn.call(a,c,1),Vn.call(n,c,1);return n}function Fe(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(r==e||u!==i){var i=u;_i(u)?Vn.call(n,u,1):cu(n,u)}}return n}function Ge(n,t){return n+_t(br()*(t-n+1))}function Ke(n,t){var r=\"\";if(!n||t<1||t>l)return r;do{t%2&&(r+=n),(t=_t(t/2))&&(n+=n)}while(t);return r}function Ze(n,t){return Ti(Ai(n,t,rc),n+\"\")}function Ve(n){return Hr(La(n))}function He(n,t){var r=La(n);return Ei(r,ie(t,0,r.length))}function Ye(n,t,r,u){if(!Xo(n))return n;for(var i=-1,o=(t=gu(t,n)).length,a=o-1,c=n;null!=c&&++i<o;){var f=Di(t[i]),l=r;if(\"__proto__\"===f||\"constructor\"===f||\"prototype\"===f)return n;if(i!=a){var s=c[f];(l=u?u(s,f,c):e)===e&&(l=Xo(s)?s:_i(t[i+1])?[]:{})}Xr(c,f,l),c=c[f]}return n}var Je=Tr?function(n,t){return Tr.set(n,t),n}:rc,Qe=ot?function(n,t){return ot(n,\"toString\",{configurable:!0,enumerable:!1,value:Xa(t),writable:!0})}:rc;function Xe(n){return Ei(La(n))}function nu(n,t,r){var e=-1,u=n.length;t<0&&(t=-t>u?0:u+t),(r=r>u?u:r)<0&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0;for(var i=en(u);++e<u;)i[e]=n[e+t];return i}function tu(n,t){var r;return le(n,function(n,e,u){return!(r=t(n,e,u))}),!!r}function ru(n,t,r){var e=0,u=null==n?e:n.length;if(\"number\"==typeof t&&t==t&&u<=2147483647){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!aa(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return eu(n,t,rc,r)}function eu(n,t,r,u){var i=0,o=null==n?0:n.length;if(0===o)return 0;for(var a=(t=r(t))!=t,c=null===t,f=aa(t),l=t===e;i<o;){var s=_t((i+o)/2),p=r(n[s]),h=p!==e,v=null===p,_=p==p,g=aa(p);if(a)var d=u||_;else d=l?_&&(u||h):c?_&&h&&(u||!v):f?_&&h&&!v&&(u||!g):!v&&!g&&(u?p<=t:p<t);d?i=s+1:o=s}return dr(o,4294967294)}function uu(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r],a=t?t(o):o;if(!r||!Lo(a,c)){var c=a;i[u++]=0===o?0:o}}return i}function iu(n){return\"number\"==typeof n?n:aa(n)?s:+n}function ou(n){if(\"string\"==typeof n)return n;if(qo(n))return Et(n,ou)+\"\";if(aa(n))return Br?Br.call(n):\"\";var t=n+\"\";return\"0\"==t&&1/n==-1/0?\"-0\":t}function au(n,t,r){var e=-1,u=kt,i=n.length,o=!0,a=[],c=a;if(r)o=!1,u=St;else if(i>=200){var f=t?null:Ku(n);if(f)return ar(f);o=!1,u=Jt,c=new Kr}else c=t?[]:a;n:for(;++e<i;){var l=n[e],s=t?t(l):l;if(l=r||0!==l?l:0,o&&s==s){for(var p=c.length;p--;)if(c[p]===s)continue n;t&&c.push(s),a.push(l)}else u(c,s,r)||(c!==a&&c.push(s),a.push(l))}return a}function cu(n,t){var r=-1,e=(t=gu(t,n)).length;if(!e)return!0;for(;++r<e;){var u=Di(t[r]);if(\"__proto__\"===u&&!zn.call(n,\"__proto__\"))return!1;if((\"constructor\"===u||\"prototype\"===u)&&r<e-1)return!1}var i=Ii(n,t);return null==i||delete i[Di(Vi(t))]}function fu(n,t,r,e){return Ye(n,t,r(we(n,t)),e)}function lu(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?nu(n,e?0:i,e?i+1:u):nu(n,e?i+1:0,e?u:i)}function su(n,t){var r=n;return r instanceof $r&&(r=r.value()),Mt(t,function(n,t){return t.func.apply(t.thisArg,Rt([n],t.args))},r)}function pu(n,t,r){var e=n.length;if(e<2)return e?au(n[0]):[];for(var u=-1,i=en(e);++u<e;)for(var o=n[u],a=-1;++a<e;)a!=u&&(i[u]=fe(i[u]||o,n[a],t,r));return au(_e(i,1),t,r)}function hu(n,t,r){for(var u=-1,i=n.length,o=t.length,a={};++u<i;){var c=u<o?t[u]:e;r(a,n[u],c)}return a}function vu(n){return Ko(n)?n:[]}function _u(n){return\"function\"==typeof n?n:rc}function gu(n,t){return qo(n)?n:di(n,t)?[n]:zi(da(n))}var du=Ze;function yu(n,t,r){var u=n.length;return r=r===e?u:r,!t&&r>=u?n:nu(n,t,r)}var mu=ft||function(n){return st.clearTimeout(n)};function bu(n,t){if(t)return n.slice();var r=n.length,e=Fn?Fn(r):new n.constructor(r);return n.copy(e),e}function wu(n){var t=new n.constructor(n.byteLength);return new qn(t).set(new qn(n)),t}function xu(n,t){var r=t?wu(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.length)}function Au(n,t){if(n!==t){var r=n!==e,u=null===n,i=n==n,o=aa(n),a=t!==e,c=null===t,f=t==t,l=aa(t);if(!c&&!l&&!o&&n>t||o&&a&&f&&!c&&!l||u&&a&&f||!r&&f||!i)return 1;if(!u&&!o&&!l&&n<t||l&&r&&i&&!u&&!o||c&&r&&i||!a&&i||!f)return-1}return 0}function Iu(n,t,r,e){for(var u=-1,i=n.length,o=r.length,a=-1,c=t.length,f=gr(i-o,0),l=en(c+f),s=!e;++a<c;)l[a]=t[a];for(;++u<o;)(s||u<i)&&(l[r[u]]=n[u]);for(;f--;)l[a++]=n[u++];return l}function ju(n,t,r,e){for(var u=-1,i=n.length,o=-1,a=r.length,c=-1,f=t.length,l=gr(i-a,0),s=en(l+f),p=!e;++u<l;)s[u]=n[u];for(var h=u;++c<f;)s[h+c]=t[c];for(;++o<a;)(p||u<i)&&(s[h+r[o]]=n[u++]);return s}function Ou(n,t){var r=-1,e=n.length;for(t||(t=en(e));++r<e;)t[r]=n[r];return t}function Cu(n,t,r,u){var i=!r;r||(r={});for(var o=-1,a=t.length;++o<a;){var c=t[o],f=u?u(r[c],n[c],c,r,n):e;f===e&&(f=n[c]),i?ee(r,c,f):Xr(r,c,f)}return r}function Tu(n,t){return function(r,e){var u=qo(r)?It:te,i=t?t():{};return u(r,n,ii(e,2),i)}}function ku(n){return Ze(function(t,r){var u=-1,i=r.length,o=i>1?r[i-1]:e,a=i>2?r[2]:e;for(o=n.length>3&&\"function\"==typeof o?(i--,o):e,a&&gi(r[0],r[1],a)&&(o=i<3?e:o,i=1),t=jn(t);++u<i;){var c=r[u];c&&n(t,c,u,o)}return t})}function Su(n,t){return function(r,e){if(null==r)return r;if(!Go(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=jn(r);(t?i--:++i<u)&&!1!==e(o[i],i,o););return r}}function Eu(n){return function(t,r,e){for(var u=-1,i=jn(t),o=e(t),a=o.length;a--;){var c=o[n?a:++u];if(!1===r(i[c],c,i))break}return t}}function Ru(n){return function(t){var r=er(t=da(t))?lr(t):e,u=r?r[0]:t.charAt(0),i=r?yu(r,1).join(\"\"):t.slice(1);return u[n]()+i}}function Mu(n){return function(t){return Mt(Ya($a(t).replace(Yn,\"\")),n,\"\")}}function zu(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=Lr(n.prototype),e=n.apply(r,t);return Xo(e)?e:r}}function Du(n){return function(t,r,u){var i=jn(t);if(!Go(t)){var o=ii(r,3);t=Sa(t),r=function(n){return o(i[n],n,i)}}var a=n(t,r,u);return a>-1?i[o?t[a]:a]:e}}function Uu(n){return Xu(function(t){var r=t.length,i=r,o=Wr.prototype.thru;for(n&&t.reverse();i--;){var a=t[i];if(\"function\"!=typeof a)throw new Tn(u);if(o&&!c&&\"wrapper\"==ei(a))var c=new Wr([],!0)}for(i=c?i:r;++i<r;){var f=ei(a=t[i]),l=\"wrapper\"==f?ri(a):e;c=l&&yi(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?c[ei(l[0])].apply(c,l[3]):1==a.length&&yi(a)?c[f]():c.thru(a)}return function(){var n=arguments,e=n[0];if(c&&1==n.length&&qo(e))return c.plant(e).value();for(var u=0,i=r?t[u].apply(this,n):e;++u<r;)i=t[u].call(this,i);return i}})}function Bu(n,t,r,u,i,o,a,f,l,s){var p=t&c,h=1&t,v=2&t,_=24&t,g=512&t,d=v?e:zu(n);return function c(){for(var y=arguments.length,m=en(y),b=y;b--;)m[b]=arguments[b];if(_)var w=ui(c),x=function(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&++e;return e}(m,w);if(u&&(m=Iu(m,u,i,_)),o&&(m=ju(m,o,a,_)),y-=x,_&&y<s){var A=or(m,w);return Fu(n,t,Bu,c.placeholder,r,m,A,f,l,s-y)}var I=h?r:this,j=v?I[n]:n;return y=m.length,f?m=function(n,t){for(var r=n.length,u=dr(t.length,r),i=Ou(n);u--;){var o=t[u];n[u]=_i(o,r)?i[o]:e}return n}(m,f):g&&y>1&&m.reverse(),p&&l<y&&(m.length=l),this&&this!==st&&this instanceof c&&(j=d||zu(j)),j.apply(I,m)}}function Pu(n,t){return function(r,e){return function(n,t,r,e){return ye(n,function(n,u,i){t(e,r(n),u,i)}),e}(r,n,t(e),{})}}function Lu(n,t){return function(r,u){var i;if(r===e&&u===e)return t;if(r!==e&&(i=r),u!==e){if(i===e)return u;\"string\"==typeof r||\"string\"==typeof u?(r=ou(r),u=ou(u)):(r=iu(r),u=iu(u)),i=n(r,u)}return i}}function Nu(n){return Xu(function(t){return t=Et(t,Ht(ii())),Ze(function(r){var e=this;return n(t,function(n){return At(n,e,r)})})})}function Wu(n,t){var r=(t=t===e?\" \":ou(t)).length;if(r<2)return r?Ke(t,n):t;var u=Ke(t,ht(n/fr(t)));return er(t)?yu(lr(u),0,n).join(\"\"):u.slice(0,n)}function $u(n){return function(t,r,u){return u&&\"number\"!=typeof u&&gi(t,r,u)&&(r=u=e),t=pa(t),r===e?(r=t,t=0):r=pa(r),function(n,t,r,e){for(var u=-1,i=gr(ht((t-n)/(r||1)),0),o=en(i);i--;)o[e?i:++u]=n,n+=r;return o}(t,r,u=u===e?t<r?1:-1:pa(u),n)}}function qu(n){return function(t,r){return\"string\"==typeof t&&\"string\"==typeof r||(t=_a(t),r=_a(r)),n(t,r)}}function Fu(n,t,r,u,i,o,c,f,l,s){var p=8&t;t|=p?a:64,4&(t&=~(p?64:a))||(t&=-4);var h=[n,t,i,p?o:e,p?c:e,p?e:o,p?e:c,f,l,s],v=r.apply(e,h);return yi(n)&&Oi(v,h),v.placeholder=u,ki(v,n,t)}function Gu(n){var t=In[n];return function(n,r){if(n=_a(n),(r=null==r?0:dr(ha(r),292))&&Ft(n)){var e=(da(n)+\"e\").split(\"e\");return+((e=(da(t(e[0]+\"e\"+(+e[1]+r)))+\"e\").split(\"e\"))[0]+\"e\"+(+e[1]-r))}return t(n)}}var Ku=jr&&1/ar(new jr([,-0]))[1]==f?function(n){return new jr(n)}:ac;function Zu(n){return function(t){var r=si(t);return r==w?ur(t):r==O?cr(t):function(n,t){return Et(t,function(t){return[t,n[t]]})}(t,n(t))}}function Vu(n,t,r,i,f,l,s,p){var h=2&t;if(!h&&\"function\"!=typeof n)throw new Tn(u);var v=i?i.length:0;if(v||(t&=-97,i=f=e),s=s===e?s:gr(ha(s),0),p=p===e?p:ha(p),v-=f?f.length:0,64&t){var _=i,g=f;i=f=e}var d=h?e:ri(n),y=[n,t,r,i,f,_,g,l,s,p];if(d&&function(n,t){var r=n[1],e=t[1],u=r|e,i=u<131,a=e==c&&8==r||e==c&&256==r&&n[7].length<=t[8]||384==e&&t[7].length<=t[8]&&8==r;if(!i&&!a)return n;1&e&&(n[2]=t[2],u|=1&r?0:4);var f=t[3];if(f){var l=n[3];n[3]=l?Iu(l,f,t[4]):f,n[4]=l?or(n[3],o):t[4]}(f=t[5])&&(l=n[5],n[5]=l?ju(l,f,t[6]):f,n[6]=l?or(n[5],o):t[6]),(f=t[7])&&(n[7]=f),e&c&&(n[8]=null==n[8]?t[8]:dr(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=u}(y,d),n=y[0],t=y[1],r=y[2],i=y[3],f=y[4],!(p=y[9]=y[9]===e?h?0:n.length:gr(y[9]-v,0))&&24&t&&(t&=-25),t&&1!=t)m=8==t||16==t?function(n,t,r){var u=zu(n);return function i(){for(var o=arguments.length,a=en(o),c=o,f=ui(i);c--;)a[c]=arguments[c];var l=o<3&&a[0]!==f&&a[o-1]!==f?[]:or(a,f);return(o-=l.length)<r?Fu(n,t,Bu,i.placeholder,e,a,l,e,e,r-o):At(this&&this!==st&&this instanceof i?u:n,this,a)}}(n,t,p):t!=a&&33!=t||f.length?Bu.apply(e,y):function(n,t,r,e){var u=1&t,i=zu(n);return function t(){for(var o=-1,a=arguments.length,c=-1,f=e.length,l=en(f+a),s=this&&this!==st&&this instanceof t?i:n;++c<f;)l[c]=e[c];for(;a--;)l[c++]=arguments[++o];return At(s,u?r:this,l)}}(n,t,r,i);else var m=function(n,t,r){var e=1&t,u=zu(n);return function t(){return(this&&this!==st&&this instanceof t?u:n).apply(e?r:this,arguments)}}(n,t,r);return ki((d?Je:Oi)(m,y),n,t)}function Hu(n,t,r,u){return n===e||Lo(n,En[r])&&!zn.call(u,r)?t:n}function Yu(n,t,r,u,i,o){return Xo(n)&&Xo(t)&&(o.set(t,n),Le(n,t,e,Yu,o),o.delete(t)),n}function Ju(n){return ea(n)?e:n}function Qu(n,t,r,u,i,o){var a=1&r,c=n.length,f=t.length;if(c!=f&&!(a&&f>c))return!1;var l=o.get(n),s=o.get(t);if(l&&s)return l==t&&s==n;var p=-1,h=!0,v=2&r?new Kr:e;for(o.set(n,t),o.set(t,n);++p<c;){var _=n[p],g=t[p];if(u)var d=a?u(g,_,p,t,n,o):u(_,g,p,n,t,o);if(d!==e){if(d)continue;h=!1;break}if(v){if(!Dt(t,function(n,t){if(!Jt(v,t)&&(_===n||i(_,n,r,u,o)))return v.push(t)})){h=!1;break}}else if(_!==g&&!i(_,g,r,u,o)){h=!1;break}}return o.delete(n),o.delete(t),h}function Xu(n){return Ti(Ai(n,e,qi),n+\"\")}function ni(n){return xe(n,Sa,fi)}function ti(n){return xe(n,Ea,li)}var ri=Tr?function(n){return Tr.get(n)}:ac;function ei(n){for(var t=n.name+\"\",r=kr[t],e=zn.call(kr,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function ui(n){return(zn.call(Pr,\"placeholder\")?Pr:n).placeholder}function ii(){var n=Pr.iteratee||ec;return n=n===ec?Me:n,arguments.length?n(arguments[0],arguments[1]):n}function oi(n,t){var r,e,u=n.__data__;return(\"string\"==(e=typeof(r=t))||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==r:null===r)?u[\"string\"==typeof t?\"string\":\"hash\"]:u.map}function ai(n){for(var t=Sa(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,wi(u)]}return t}function ci(n,t){var r=function(n,t){return null==n?e:n[t]}(n,t);return Re(r)?r:e}var fi=gt?function(n){return null==n?[]:(n=jn(n),Tt(gt(n),function(t){return Zn.call(n,t)}))}:vc,li=gt?function(n){for(var t=[];n;)Rt(t,fi(n)),n=Gn(n);return t}:vc,si=Ae;function pi(n,t,r){for(var e=-1,u=(t=gu(t,n)).length,i=!1;++e<u;){var o=Di(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:!!(u=null==n?0:n.length)&&Qo(u)&&_i(o,u)&&(qo(n)||$o(n))}function hi(n){return\"function\"!=typeof n.constructor||bi(n)?{}:Lr(Gn(n))}function vi(n){return qo(n)||$o(n)||!!(Hn&&n&&n[Hn])}function _i(n,t){var r=typeof n;return!!(t=t??l)&&(\"number\"==r||\"symbol\"!=r&&dn.test(n))&&n>-1&&n%1==0&&n<t}function gi(n,t,r){if(!Xo(r))return!1;var e=typeof t;return!!(\"number\"==e?Go(r)&&_i(t,r.length):\"string\"==e&&t in r)&&Lo(r[t],n)}function di(n,t){if(qo(n))return!1;var r=typeof n;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=n&&!aa(n))||Q.test(n)||!J.test(n)||null!=t&&n in jn(t)}function yi(n){var t=ei(n),r=Pr[t];if(\"function\"!=typeof r||!(t in $r.prototype))return!1;if(n===r)return!0;var e=ri(r);return!!e&&n===e[0]}(xr&&si(new xr(new ArrayBuffer(1)))!=E||Ar&&si(new Ar)!=w||Ir&&si(Ir.resolve())!=I||jr&&si(new jr)!=O||Or&&si(new Or)!=k)&&(si=function(n){var t=Ae(n),r=t==A?n.constructor:e,u=r?Ui(r):\"\";if(u)switch(u){case Sr:return E;case Er:return w;case Rr:return I;case Mr:return O;case zr:return k}return t});var mi=Rn?Yo:_c;function bi(n){var t=n&&n.constructor;return n===(\"function\"==typeof t&&t.prototype||En)}function wi(n){return n==n&&!Xo(n)}function xi(n,t){return function(r){return null!=r&&r[n]===t&&(t!==e||n in jn(r))}}function Ai(n,t,r){return t=gr(t===e?n.length-1:t,0),function(){for(var e=arguments,u=-1,i=gr(e.length-t,0),o=en(i);++u<i;)o[u]=e[t+u];u=-1;for(var a=en(t+1);++u<t;)a[u]=e[u];return a[t]=r(o),At(n,this,a)}}function Ii(n,t){return t.length<2?n:we(n,nu(t,0,-1))}function ji(n,t){if((\"constructor\"!==t||\"function\"!=typeof n[t])&&\"__proto__\"!=t)return n[t]}var Oi=Si(Je),Ci=pt||function(n,t){return st.setTimeout(n,t)},Ti=Si(Qe);function ki(n,t,r){var e=t+\"\";return Ti(n,function(n,t){var r=t.length;if(!r)return n;var e=r-1;return t[e]=(r>1?\"& \":\"\")+t[e],t=t.join(r>2?\", \":\" \"),n.replace(un,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}(e,function(n,t){return jt(h,function(r){var e=\"_.\"+r[0];t&r[1]&&!kt(n,e)&&n.push(e)}),n.sort()}(function(n){var t=n.match(on);return t?t[1].split(an):[]}(e),r)))}function Si(n){var t=0,r=0;return function(){var u=yr(),i=16-(u-r);if(r=u,i>0){if(++t>=800)return arguments[0]}else t=0;return n.apply(e,arguments)}}function Ei(n,t){var r=-1,u=n.length,i=u-1;for(t=t===e?u:t;++r<t;){var o=Ge(r,i),a=n[o];n[o]=n[r],n[r]=a}return n.length=t,n}var Ri,Mi,zi=(Ri=Mo(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(\"\"),n.replace(X,function(n,r,e,u){t.push(e?u.replace(ln,\"$1\"):r||n)}),t},function(n){return 500===Mi.size&&Mi.clear(),n}),Mi=Ri.cache,Ri);function Di(n){if(\"string\"==typeof n||aa(n))return n;var t=n+\"\";return\"0\"==t&&1/n==-1/0?\"-0\":t}function Ui(n){if(null!=n){try{return Mn.call(n)}catch(n){}try{return n+\"\"}catch(n){}}return\"\"}function Bi(n){if(n instanceof $r)return n.clone();var t=new Wr(n.__wrapped__,n.__chain__);return t.__actions__=Ou(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}var Pi=Ze(function(n,t){return Ko(n)?fe(n,_e(t,1,Ko,!0)):[]}),Li=Ze(function(n,t){var r=Vi(t);return Ko(r)&&(r=e),Ko(n)?fe(n,_e(t,1,Ko,!0),ii(r,2)):[]}),Ni=Ze(function(n,t){var r=Vi(t);return Ko(r)&&(r=e),Ko(n)?fe(n,_e(t,1,Ko,!0),e,r):[]});function Wi(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:ha(r);return u<0&&(u=gr(e+u,0)),Pt(n,ii(t,3),u)}function $i(n,t,r){var u=null==n?0:n.length;if(!u)return-1;var i=u-1;return r!==e&&(i=ha(r),i=r<0?gr(u+i,0):dr(i,u-1)),Pt(n,ii(t,3),i,!0)}function qi(n){return null!=n&&n.length?_e(n,1):[]}function Fi(n){return n&&n.length?n[0]:e}var Gi=Ze(function(n){var t=Et(n,vu);return t.length&&t[0]===n[0]?Ce(t):[]}),Ki=Ze(function(n){var t=Vi(n),r=Et(n,vu);return t===Vi(r)?t=e:r.pop(),r.length&&r[0]===n[0]?Ce(r,ii(t,2)):[]}),Zi=Ze(function(n){var t=Vi(n),r=Et(n,vu);return(t=\"function\"==typeof t?t:e)&&r.pop(),r.length&&r[0]===n[0]?Ce(r,e,t):[]});function Vi(n){var t=null==n?0:n.length;return t?n[t-1]:e}var Hi=Ze(Yi);function Yi(n,t){return n&&n.length&&t&&t.length?qe(n,t):n}var Ji=Xu(function(n,t){var r=null==n?0:n.length,e=ue(n,t);return Fe(n,Et(t,function(n){return _i(n,r)?+n:n}).sort(Au)),e});function Qi(n){return null==n?n:wr.call(n)}var Xi=Ze(function(n){return au(_e(n,1,Ko,!0))}),no=Ze(function(n){var t=Vi(n);return Ko(t)&&(t=e),au(_e(n,1,Ko,!0),ii(t,2))}),to=Ze(function(n){var t=Vi(n);return t=\"function\"==typeof t?t:e,au(_e(n,1,Ko,!0),e,t)});function ro(n){if(!n||!n.length)return[];var t=0;return n=Tt(n,function(n){if(Ko(n))return t=gr(n.length,t),!0}),Zt(t,function(t){return Et(n,qt(t))})}function eo(n,t){if(!n||!n.length)return[];var r=ro(n);return null==t?r:Et(r,function(n){return At(t,e,n)})}var uo=Ze(function(n,t){return Ko(n)?fe(n,t):[]}),io=Ze(function(n){return pu(Tt(n,Ko))}),oo=Ze(function(n){var t=Vi(n);return Ko(t)&&(t=e),pu(Tt(n,Ko),ii(t,2))}),ao=Ze(function(n){var t=Vi(n);return t=\"function\"==typeof t?t:e,pu(Tt(n,Ko),e,t)}),co=Ze(ro),fo=Ze(function(n){var t=n.length,r=t>1?n[t-1]:e;return r=\"function\"==typeof r?(n.pop(),r):e,eo(n,r)});function lo(n){var t=Pr(n);return t.__chain__=!0,t}function so(n,t){return t(n)}var po=Xu(function(n){var t=n.length,r=t?n[0]:0,u=this.__wrapped__,i=function(t){return ue(t,n)};return!(t>1||this.__actions__.length)&&u instanceof $r&&_i(r)?((u=u.slice(r,+r+(t?1:0))).__actions__.push({func:so,args:[i],thisArg:e}),new Wr(u,this.__chain__).thru(function(n){return t&&!n.length&&n.push(e),n})):this.thru(i)}),ho=Tu(function(n,t,r){zn.call(n,r)?++n[r]:ee(n,r,1)}),vo=Du(Wi),_o=Du($i);function go(n,t){return(qo(n)?jt:le)(n,ii(t,3))}function yo(n,t){return(qo(n)?Ot:se)(n,ii(t,3))}var mo=Tu(function(n,t,r){zn.call(n,r)?n[r].push(t):ee(n,r,[t])}),bo=Ze(function(n,t,r){var e=-1,u=\"function\"==typeof t,i=Go(n)?en(n.length):[];return le(n,function(n){i[++e]=u?At(t,n,r):Te(n,t,r)}),i}),wo=Tu(function(n,t,r){ee(n,r,t)});function xo(n,t){return(qo(n)?Et:Ue)(n,ii(t,3))}var Ao=Tu(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),Io=Ze(function(n,t){if(null==n)return[];var r=t.length;return r>1&&gi(n,t[0],t[1])?t=[]:r>2&&gi(t[0],t[1],t[2])&&(t=[t[0]]),We(n,_e(t,1),[])}),jo=lt||function(){return st.Date.now()};function Oo(n,t,r){return t=r?e:t,t=n&&null==t?n.length:t,Vu(n,c,e,e,e,e,t)}function Co(n,t){var r;if(\"function\"!=typeof t)throw new Tn(u);return n=ha(n),function(){return--n>0&&(r=t.apply(this,arguments)),n<=1&&(t=e),r}}var To=Ze(function(n,t,r){var e=1;if(r.length){var u=or(r,ui(To));e|=a}return Vu(n,e,t,r,u)}),ko=Ze(function(n,t,r){var e=3;if(r.length){var u=or(r,ui(ko));e|=a}return Vu(t,e,n,r,u)});function So(n,t,r){var i,o,a,c,f,l,s=0,p=!1,h=!1,v=!0;if(\"function\"!=typeof n)throw new Tn(u);function _(t){var r=i,u=o;return i=o=e,s=t,c=n.apply(u,r)}function g(n){var r=n-l;return l===e||r>=t||r<0||h&&n-s>=a}function d(){var n=jo();if(g(n))return y(n);f=Ci(d,function(n){var r=t-(n-l);return h?dr(r,a-(n-s)):r}(n))}function y(n){return f=e,v&&i?_(n):(i=o=e,c)}function m(){var n=jo(),r=g(n);if(i=arguments,o=this,l=n,r){if(f===e)return function(n){return s=n,f=Ci(d,t),p?_(n):c}(l);if(h)return mu(f),f=Ci(d,t),_(l)}return f===e&&(f=Ci(d,t)),c}return t=_a(t)||0,Xo(r)&&(p=!!r.leading,a=(h=\"maxWait\"in r)?gr(_a(r.maxWait)||0,t):a,v=\"trailing\"in r?!!r.trailing:v),m.cancel=function(){f!==e&&mu(f),s=0,i=l=o=f=e},m.flush=function(){return f===e?c:y(jo())},m}var Eo=Ze(function(n,t){return ce(n,1,t)}),Ro=Ze(function(n,t,r){return ce(n,_a(t)||0,r)});function Mo(n,t){if(\"function\"!=typeof n||null!=t&&\"function\"!=typeof t)throw new Tn(u);var r=function(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;if(i.has(u))return i.get(u);var o=n.apply(this,e);return r.cache=i.set(u,o)||i,o};return r.cache=new(Mo.Cache||Gr),r}function zo(n){if(\"function\"!=typeof n)throw new Tn(u);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}Mo.Cache=Gr;var Do=du(function(n,t){var r=(t=1==t.length&&qo(t[0])?Et(t[0],Ht(ii())):Et(_e(t,1),Ht(ii()))).length;return Ze(function(e){for(var u=-1,i=dr(e.length,r);++u<i;)e[u]=t[u].call(this,e[u]);return At(n,this,e)})}),Uo=Ze(function(n,t){var r=or(t,ui(Uo));return Vu(n,a,e,t,r)}),Bo=Ze(function(n,t){var r=or(t,ui(Bo));return Vu(n,64,e,t,r)}),Po=Xu(function(n,t){return Vu(n,256,e,e,e,t)});function Lo(n,t){return n===t||n!=n&&t!=t}var No=qu(Ie),Wo=qu(function(n,t){return n>=t}),$o=ke(function(){return arguments}())?ke:function(n){return na(n)&&zn.call(n,\"callee\")&&!Zn.call(n,\"callee\")},qo=en.isArray,Fo=dt?Ht(dt):function(n){return na(n)&&Ae(n)==S};function Go(n){return null!=n&&Qo(n.length)&&!Yo(n)}function Ko(n){return na(n)&&Go(n)}var Zo=Ut||_c,Vo=yt?Ht(yt):function(n){return na(n)&&Ae(n)==d};function Ho(n){if(!na(n))return!1;var t=Ae(n);return t==y||\"[object DOMException]\"==t||\"string\"==typeof n.message&&\"string\"==typeof n.name&&!ea(n)}function Yo(n){if(!Xo(n))return!1;var t=Ae(n);return t==m||t==b||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function Jo(n){return\"number\"==typeof n&&n==ha(n)}function Qo(n){return\"number\"==typeof n&&n>-1&&n%1==0&&n<=l}function Xo(n){var t=typeof n;return null!=n&&(\"object\"==t||\"function\"==t)}function na(n){return null!=n&&\"object\"==typeof n}var ta=mt?Ht(mt):function(n){return na(n)&&si(n)==w};function ra(n){return\"number\"==typeof n||na(n)&&Ae(n)==x}function ea(n){if(!na(n)||Ae(n)!=A)return!1;var t=Gn(n);if(null===t)return!0;var r=zn.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof r&&r instanceof r&&Mn.call(r)==Pn}var ua=bt?Ht(bt):function(n){return na(n)&&Ae(n)==j},ia=wt?Ht(wt):function(n){return na(n)&&si(n)==O};function oa(n){return\"string\"==typeof n||!qo(n)&&na(n)&&Ae(n)==C}function aa(n){return\"symbol\"==typeof n||na(n)&&Ae(n)==T}var ca=xt?Ht(xt):function(n){return na(n)&&Qo(n.length)&&!!ut[Ae(n)]},fa=qu(De),la=qu(function(n,t){return n<=t});function sa(n){if(!n)return[];if(Go(n))return oa(n)?lr(n):Ou(n);if(Qn&&n[Qn])return function(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}(n[Qn]());var t=si(n);return(t==w?ur:t==O?ar:La)(n)}function pa(n){return n?(n=_a(n))===f||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function ha(n){var t=pa(n),r=t%1;return t==t?r?t-r:t:0}function va(n){return n?ie(ha(n),0,p):0}function _a(n){if(\"number\"==typeof n)return n;if(aa(n))return s;if(Xo(n)){var t=\"function\"==typeof n.valueOf?n.valueOf():n;n=Xo(t)?t+\"\":t}if(\"string\"!=typeof n)return 0===n?n:+n;n=Vt(n);var r=vn.test(n);return r||gn.test(n)?ct(n.slice(2),r?2:8):hn.test(n)?s:+n}function ga(n){return Cu(n,Ea(n))}function da(n){return null==n?\"\":ou(n)}var ya=ku(function(n,t){if(bi(t)||Go(t))Cu(t,Sa(t),n);else for(var r in t)zn.call(t,r)&&Xr(n,r,t[r])}),ma=ku(function(n,t){Cu(t,Ea(t),n)}),ba=ku(function(n,t,r,e){Cu(t,Ea(t),n,e)}),wa=ku(function(n,t,r,e){Cu(t,Sa(t),n,e)}),xa=Xu(ue),Aa=Ze(function(n,t){n=jn(n);var r=-1,u=t.length,i=u>2?t[2]:e;for(i&&gi(t[0],t[1],i)&&(u=1);++r<u;)for(var o=t[r],a=Ea(o),c=-1,f=a.length;++c<f;){var l=a[c],s=n[l];(s===e||Lo(s,En[l])&&!zn.call(n,l))&&(n[l]=o[l])}return n}),Ia=Ze(function(n){return n.push(e,Yu),At(Ma,e,n)});function ja(n,t,r){var u=null==n?e:we(n,t);return u===e?r:u}function Oa(n,t){return null!=n&&pi(n,t,Oe)}var Ca=Pu(function(n,t,r){null!=t&&\"function\"!=typeof t.toString&&(t=Bn.call(t)),n[t]=r},Xa(rc)),Ta=Pu(function(n,t,r){null!=t&&\"function\"!=typeof t.toString&&(t=Bn.call(t)),zn.call(n,t)?n[t].push(r):n[t]=[r]},ii),ka=Ze(Te);function Sa(n){return Go(n)?Vr(n):ze(n)}function Ea(n){return Go(n)?Vr(n,!0):function(n){if(!Xo(n))return function(n){var t=[];if(null!=n)for(var r in jn(n))t.push(r);return t}(n);var t=bi(n),r=[];for(var e in n)(\"constructor\"!=e||!t&&zn.call(n,e))&&r.push(e);return r}(n)}var Ra=ku(function(n,t,r){Le(n,t,r)}),Ma=ku(function(n,t,r,e){Le(n,t,r,e)}),za=Xu(function(n,t){var r={};if(null==n)return r;var e=!1;t=Et(t,function(t){return t=gu(t,n),e||(e=t.length>1),t}),Cu(n,ti(n),r),e&&(r=oe(r,7,Ju));for(var u=t.length;u--;)cu(r,t[u]);return r}),Da=Xu(function(n,t){return null==n?{}:function(n,t){return $e(n,t,function(t,r){return Oa(n,r)})}(n,t)});function Ua(n,t){if(null==n)return{};var r=Et(ti(n),function(n){return[n]});return t=ii(t),$e(n,r,function(n,r){return t(n,r[0])})}var Ba=Zu(Sa),Pa=Zu(Ea);function La(n){return null==n?[]:Yt(n,Sa(n))}var Na=Mu(function(n,t,r){return t=t.toLowerCase(),n+(r?Wa(t):t)});function Wa(n){return Ha(da(n).toLowerCase())}function $a(n){return(n=da(n))&&n.replace(yn,nr).replace(Jn,\"\")}var qa=Mu(function(n,t,r){return n+(r?\"-\":\"\")+t.toLowerCase()}),Fa=Mu(function(n,t,r){return n+(r?\" \":\"\")+t.toLowerCase()}),Ga=Ru(\"toLowerCase\"),Ka=Mu(function(n,t,r){return n+(r?\"_\":\"\")+t.toLowerCase()}),Za=Mu(function(n,t,r){return n+(r?\" \":\"\")+Ha(t)}),Va=Mu(function(n,t,r){return n+(r?\" \":\"\")+t.toUpperCase()}),Ha=Ru(\"toUpperCase\");function Ya(n,t,r){return n=da(n),(t=r?e:t)===e?function(n){return tt.test(n)}(n)?function(n){return n.match(Xn)||[]}(n):function(n){return n.match(cn)||[]}(n):n.match(t)||[]}var Ja=Ze(function(n,t){try{return At(n,e,t)}catch(n){return Ho(n)?n:new xn(n)}}),Qa=Xu(function(n,t){return jt(t,function(t){t=Di(t),ee(n,t,To(n[t],n))}),n});function Xa(n){return function(){return n}}var nc=Uu(),tc=Uu(!0);function rc(n){return n}function ec(n){return Me(\"function\"==typeof n?n:oe(n,1))}var uc=Ze(function(n,t){return function(r){return Te(r,n,t)}}),ic=Ze(function(n,t){return function(r){return Te(n,r,t)}});function oc(n,t,r){var e=Sa(t),u=be(t,e);null!=r||Xo(t)&&(u.length||!e.length)||(r=t,t=n,n=this,u=be(t,Sa(t)));var i=!(Xo(r)&&\"chain\"in r&&!r.chain),o=Yo(n);return jt(u,function(r){var e=t[r];n[r]=e,o&&(n.prototype[r]=function(){var t=this.__chain__;if(i||t){var r=n(this.__wrapped__);return(r.__actions__=Ou(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,Rt([this.value()],arguments))})}),n}function ac(){}var cc=Nu(Et),fc=Nu(Ct),lc=Nu(Dt);function sc(n){return di(n)?qt(Di(n)):function(n){return function(t){return we(t,n)}}(n)}var pc=$u(),hc=$u(!0);function vc(){return[]}function _c(){return!1}var gc,dc=Lu(function(n,t){return n+t},0),yc=Gu(\"ceil\"),mc=Lu(function(n,t){return n/t},1),bc=Gu(\"floor\"),wc=Lu(function(n,t){return n*t},1),xc=Gu(\"round\"),Ac=Lu(function(n,t){return n-t},0);return Pr.after=function(n,t){if(\"function\"!=typeof t)throw new Tn(u);return n=ha(n),function(){if(--n<1)return t.apply(this,arguments)}},Pr.ary=Oo,Pr.assign=ya,Pr.assignIn=ma,Pr.assignInWith=ba,Pr.assignWith=wa,Pr.at=xa,Pr.before=Co,Pr.bind=To,Pr.bindAll=Qa,Pr.bindKey=ko,Pr.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return qo(n)?n:[n]},Pr.chain=lo,Pr.chunk=function(n,t,r){t=(r?gi(n,t,r):t===e)?1:gr(ha(t),0);var u=null==n?0:n.length;if(!u||t<1)return[];for(var i=0,o=0,a=en(ht(u/t));i<u;)a[o++]=nu(n,i,i+=t);return a},Pr.compact=function(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){var i=n[t];i&&(u[e++]=i)}return u},Pr.concat=function(){var n=arguments.length;if(!n)return[];for(var t=en(n-1),r=arguments[0],e=n;e--;)t[e-1]=arguments[e];return Rt(qo(r)?Ou(r):[r],_e(t,1))},Pr.cond=function(n){var t=null==n?0:n.length,r=ii();return n=t?Et(n,function(n){if(\"function\"!=typeof n[1])throw new Tn(u);return[r(n[0]),n[1]]}):[],Ze(function(r){for(var e=-1;++e<t;){var u=n[e];if(At(u[0],this,r))return At(u[1],this,r)}})},Pr.conforms=function(n){return function(n){var t=Sa(n);return function(r){return ae(r,n,t)}}(oe(n,1))},Pr.constant=Xa,Pr.countBy=ho,Pr.create=function(n,t){var r=Lr(n);return null==t?r:re(r,t)},Pr.curry=function n(t,r,u){var i=Vu(t,8,e,e,e,e,e,r=u?e:r);return i.placeholder=n.placeholder,i},Pr.curryRight=function n(t,r,u){var i=Vu(t,16,e,e,e,e,e,r=u?e:r);return i.placeholder=n.placeholder,i},Pr.debounce=So,Pr.defaults=Aa,Pr.defaultsDeep=Ia,Pr.defer=Eo,Pr.delay=Ro,Pr.difference=Pi,Pr.differenceBy=Li,Pr.differenceWith=Ni,Pr.drop=function(n,t,r){var u=null==n?0:n.length;return u?nu(n,(t=r||t===e?1:ha(t))<0?0:t,u):[]},Pr.dropRight=function(n,t,r){var u=null==n?0:n.length;return u?nu(n,0,(t=u-(t=r||t===e?1:ha(t)))<0?0:t):[]},Pr.dropRightWhile=function(n,t){return n&&n.length?lu(n,ii(t,3),!0,!0):[]},Pr.dropWhile=function(n,t){return n&&n.length?lu(n,ii(t,3),!0):[]},Pr.fill=function(n,t,r,u){var i=null==n?0:n.length;return i?(r&&\"number\"!=typeof r&&gi(n,t,r)&&(r=0,u=i),function(n,t,r,u){var i=n.length;for((r=ha(r))<0&&(r=-r>i?0:i+r),(u=u===e||u>i?i:ha(u))<0&&(u+=i),u=r>u?0:va(u);r<u;)n[r++]=t;return n}(n,t,r,u)):[]},Pr.filter=function(n,t){return(qo(n)?Tt:ve)(n,ii(t,3))},Pr.flatMap=function(n,t){return _e(xo(n,t),1)},Pr.flatMapDeep=function(n,t){return _e(xo(n,t),f)},Pr.flatMapDepth=function(n,t,r){return r=r===e?1:ha(r),_e(xo(n,t),r)},Pr.flatten=qi,Pr.flattenDeep=function(n){return null!=n&&n.length?_e(n,f):[]},Pr.flattenDepth=function(n,t){return null!=n&&n.length?_e(n,t=t===e?1:ha(t)):[]},Pr.flip=function(n){return Vu(n,512)},Pr.flow=nc,Pr.flowRight=tc,Pr.fromPairs=function(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];ee(e,u[0],u[1])}return e},Pr.functions=function(n){return null==n?[]:be(n,Sa(n))},Pr.functionsIn=function(n){return null==n?[]:be(n,Ea(n))},Pr.groupBy=mo,Pr.initial=function(n){return null!=n&&n.length?nu(n,0,-1):[]},Pr.intersection=Gi,Pr.intersectionBy=Ki,Pr.intersectionWith=Zi,Pr.invert=Ca,Pr.invertBy=Ta,Pr.invokeMap=bo,Pr.iteratee=ec,Pr.keyBy=wo,Pr.keys=Sa,Pr.keysIn=Ea,Pr.map=xo,Pr.mapKeys=function(n,t){var r={};return t=ii(t,3),ye(n,function(n,e,u){ee(r,t(n,e,u),n)}),r},Pr.mapValues=function(n,t){var r={};return t=ii(t,3),ye(n,function(n,e,u){ee(r,e,t(n,e,u))}),r},Pr.matches=function(n){return Be(oe(n,1))},Pr.matchesProperty=function(n,t){return Pe(n,oe(t,1))},Pr.memoize=Mo,Pr.merge=Ra,Pr.mergeWith=Ma,Pr.method=uc,Pr.methodOf=ic,Pr.mixin=oc,Pr.negate=zo,Pr.nthArg=function(n){return n=ha(n),Ze(function(t){return Ne(t,n)})},Pr.omit=za,Pr.omitBy=function(n,t){return Ua(n,zo(ii(t)))},Pr.once=function(n){return Co(2,n)},Pr.orderBy=function(n,t,r,u){return null==n?[]:(qo(t)||(t=null==t?[]:[t]),qo(r=u?e:r)||(r=null==r?[]:[r]),We(n,t,r))},Pr.over=cc,Pr.overArgs=Do,Pr.overEvery=fc,Pr.overSome=lc,Pr.partial=Uo,Pr.partialRight=Bo,Pr.partition=Ao,Pr.pick=Da,Pr.pickBy=Ua,Pr.property=sc,Pr.propertyOf=function(n){return function(t){return null==n?e:we(n,t)}},Pr.pull=Hi,Pr.pullAll=Yi,Pr.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?qe(n,t,ii(r,2)):n},Pr.pullAllWith=function(n,t,r){return n&&n.length&&t&&t.length?qe(n,t,e,r):n},Pr.pullAt=Ji,Pr.range=pc,Pr.rangeRight=hc,Pr.rearg=Po,Pr.reject=function(n,t){return(qo(n)?Tt:ve)(n,zo(ii(t,3)))},Pr.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=ii(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),u.push(e))}return Fe(n,u),r},Pr.rest=function(n,t){if(\"function\"!=typeof n)throw new Tn(u);return Ze(n,t=t===e?t:ha(t))},Pr.reverse=Qi,Pr.sampleSize=function(n,t,r){return t=(r?gi(n,t,r):t===e)?1:ha(t),(qo(n)?Yr:He)(n,t)},Pr.set=function(n,t,r){return null==n?n:Ye(n,t,r)},Pr.setWith=function(n,t,r,u){return u=\"function\"==typeof u?u:e,null==n?n:Ye(n,t,r,u)},Pr.shuffle=function(n){return(qo(n)?Jr:Xe)(n)},Pr.slice=function(n,t,r){var u=null==n?0:n.length;return u?(r&&\"number\"!=typeof r&&gi(n,t,r)?(t=0,r=u):(t=null==t?0:ha(t),r=r===e?u:ha(r)),nu(n,t,r)):[]},Pr.sortBy=Io,Pr.sortedUniq=function(n){return n&&n.length?uu(n):[]},Pr.sortedUniqBy=function(n,t){return n&&n.length?uu(n,ii(t,2)):[]},Pr.split=function(n,t,r){return r&&\"number\"!=typeof r&&gi(n,t,r)&&(t=r=e),(r=r===e?p:r>>>0)?(n=da(n))&&(\"string\"==typeof t||null!=t&&!ua(t))&&!(t=ou(t))&&er(n)?yu(lr(n),0,r):n.split(t,r):[]},Pr.spread=function(n,t){if(\"function\"!=typeof n)throw new Tn(u);return t=null==t?0:gr(ha(t),0),Ze(function(r){var e=r[t],u=yu(r,0,t);return e&&Rt(u,e),At(n,this,u)})},Pr.tail=function(n){var t=null==n?0:n.length;return t?nu(n,1,t):[]},Pr.take=function(n,t,r){return n&&n.length?nu(n,0,(t=r||t===e?1:ha(t))<0?0:t):[]},Pr.takeRight=function(n,t,r){var u=null==n?0:n.length;return u?nu(n,(t=u-(t=r||t===e?1:ha(t)))<0?0:t,u):[]},Pr.takeRightWhile=function(n,t){return n&&n.length?lu(n,ii(t,3),!1,!0):[]},Pr.takeWhile=function(n,t){return n&&n.length?lu(n,ii(t,3)):[]},Pr.tap=function(n,t){return t(n),n},Pr.throttle=function(n,t,r){var e=!0,i=!0;if(\"function\"!=typeof n)throw new Tn(u);return Xo(r)&&(e=\"leading\"in r?!!r.leading:e,i=\"trailing\"in r?!!r.trailing:i),So(n,t,{leading:e,maxWait:t,trailing:i})},Pr.thru=so,Pr.toArray=sa,Pr.toPairs=Ba,Pr.toPairsIn=Pa,Pr.toPath=function(n){return qo(n)?Et(n,Di):aa(n)?[n]:Ou(zi(da(n)))},Pr.toPlainObject=ga,Pr.transform=function(n,t,r){var e=qo(n),u=e||Zo(n)||ca(n);if(t=ii(t,4),null==r){var i=n&&n.constructor;r=u?e?new i:[]:Xo(n)&&Yo(i)?Lr(Gn(n)):{}}return(u?jt:ye)(n,function(n,e,u){return t(r,n,e,u)}),r},Pr.unary=function(n){return Oo(n,1)},Pr.union=Xi,Pr.unionBy=no,Pr.unionWith=to,Pr.uniq=function(n){return n&&n.length?au(n):[]},Pr.uniqBy=function(n,t){return n&&n.length?au(n,ii(t,2)):[]},Pr.uniqWith=function(n,t){return t=\"function\"==typeof t?t:e,n&&n.length?au(n,e,t):[]},Pr.unset=function(n,t){return null==n||cu(n,t)},Pr.unzip=ro,Pr.unzipWith=eo,Pr.update=function(n,t,r){return null==n?n:fu(n,t,_u(r))},Pr.updateWith=function(n,t,r,u){return u=\"function\"==typeof u?u:e,null==n?n:fu(n,t,_u(r),u)},Pr.values=La,Pr.valuesIn=function(n){return null==n?[]:Yt(n,Ea(n))},Pr.without=uo,Pr.words=Ya,Pr.wrap=function(n,t){return Uo(_u(t),n)},Pr.xor=io,Pr.xorBy=oo,Pr.xorWith=ao,Pr.zip=co,Pr.zipObject=function(n,t){return hu(n||[],t||[],Xr)},Pr.zipObjectDeep=function(n,t){return hu(n||[],t||[],Ye)},Pr.zipWith=fo,Pr.entries=Ba,Pr.entriesIn=Pa,Pr.extend=ma,Pr.extendWith=ba,oc(Pr,Pr),Pr.add=dc,Pr.attempt=Ja,Pr.camelCase=Na,Pr.capitalize=Wa,Pr.ceil=yc,Pr.clamp=function(n,t,r){return r===e&&(r=t,t=e),r!==e&&(r=(r=_a(r))==r?r:0),t!==e&&(t=(t=_a(t))==t?t:0),ie(_a(n),t,r)},Pr.clone=function(n){return oe(n,4)},Pr.cloneDeep=function(n){return oe(n,5)},Pr.cloneDeepWith=function(n,t){return oe(n,5,t=\"function\"==typeof t?t:e)},Pr.cloneWith=function(n,t){return oe(n,4,t=\"function\"==typeof t?t:e)},Pr.conformsTo=function(n,t){return null==t||ae(n,t,Sa(t))},Pr.deburr=$a,Pr.defaultTo=function(n,t){return null==n||n!=n?t:n},Pr.divide=mc,Pr.endsWith=function(n,t,r){n=da(n),t=ou(t);var u=n.length,i=r=r===e?u:ie(ha(r),0,u);return(r-=t.length)>=0&&n.slice(r,i)==t},Pr.eq=Lo,Pr.escape=function(n){return(n=da(n))&&Z.test(n)?n.replace(G,tr):n},Pr.escapeRegExp=function(n){return(n=da(n))&&tn.test(n)?n.replace(nn,\"\\\\$&\"):n},Pr.every=function(n,t,r){var u=qo(n)?Ct:pe;return r&&gi(n,t,r)&&(t=e),u(n,ii(t,3))},Pr.find=vo,Pr.findIndex=Wi,Pr.findKey=function(n,t){return Bt(n,ii(t,3),ye)},Pr.findLast=_o,Pr.findLastIndex=$i,Pr.findLastKey=function(n,t){return Bt(n,ii(t,3),me)},Pr.floor=bc,Pr.forEach=go,Pr.forEachRight=yo,Pr.forIn=function(n,t){return null==n?n:ge(n,ii(t,3),Ea)},Pr.forInRight=function(n,t){return null==n?n:de(n,ii(t,3),Ea)},Pr.forOwn=function(n,t){return n&&ye(n,ii(t,3))},Pr.forOwnRight=function(n,t){return n&&me(n,ii(t,3))},Pr.get=ja,Pr.gt=No,Pr.gte=Wo,Pr.has=function(n,t){return null!=n&&pi(n,t,je)},Pr.hasIn=Oa,Pr.head=Fi,Pr.identity=rc,Pr.includes=function(n,t,r,e){n=Go(n)?n:La(n),r=r&&!e?ha(r):0;var u=n.length;return r<0&&(r=gr(u+r,0)),oa(n)?r<=u&&n.indexOf(t,r)>-1:!!u&&Lt(n,t,r)>-1},Pr.indexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:ha(r);return u<0&&(u=gr(e+u,0)),Lt(n,t,u)},Pr.inRange=function(n,t,r){return t=pa(t),r===e?(r=t,t=0):r=pa(r),function(n,t,r){return n>=dr(t,r)&&n<gr(t,r)}(n=_a(n),t,r)},Pr.invoke=ka,Pr.isArguments=$o,Pr.isArray=qo,Pr.isArrayBuffer=Fo,Pr.isArrayLike=Go,Pr.isArrayLikeObject=Ko,Pr.isBoolean=function(n){return!0===n||!1===n||na(n)&&Ae(n)==g},Pr.isBuffer=Zo,Pr.isDate=Vo,Pr.isElement=function(n){return na(n)&&1===n.nodeType&&!ea(n)},Pr.isEmpty=function(n){if(null==n)return!0;if(Go(n)&&(qo(n)||\"string\"==typeof n||\"function\"==typeof n.splice||Zo(n)||ca(n)||$o(n)))return!n.length;var t=si(n);if(t==w||t==O)return!n.size;if(bi(n))return!ze(n).length;for(var r in n)if(zn.call(n,r))return!1;return!0},Pr.isEqual=function(n,t){return Se(n,t)},Pr.isEqualWith=function(n,t,r){var u=(r=\"function\"==typeof r?r:e)?r(n,t):e;return u===e?Se(n,t,e,r):!!u},Pr.isError=Ho,Pr.isFinite=function(n){return\"number\"==typeof n&&Ft(n)},Pr.isFunction=Yo,Pr.isInteger=Jo,Pr.isLength=Qo,Pr.isMap=ta,Pr.isMatch=function(n,t){return n===t||Ee(n,t,ai(t))},Pr.isMatchWith=function(n,t,r){return r=\"function\"==typeof r?r:e,Ee(n,t,ai(t),r)},Pr.isNaN=function(n){return ra(n)&&n!=+n},Pr.isNative=function(n){if(mi(n))throw new xn(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Re(n)},Pr.isNil=function(n){return null==n},Pr.isNull=function(n){return null===n},Pr.isNumber=ra,Pr.isObject=Xo,Pr.isObjectLike=na,Pr.isPlainObject=ea,Pr.isRegExp=ua,Pr.isSafeInteger=function(n){return Jo(n)&&n>=-9007199254740991&&n<=l},Pr.isSet=ia,Pr.isString=oa,Pr.isSymbol=aa,Pr.isTypedArray=ca,Pr.isUndefined=function(n){return n===e},Pr.isWeakMap=function(n){return na(n)&&si(n)==k},Pr.isWeakSet=function(n){return na(n)&&\"[object WeakSet]\"==Ae(n)},Pr.join=function(n,t){return null==n?\"\":vr.call(n,t)},Pr.kebabCase=qa,Pr.last=Vi,Pr.lastIndexOf=function(n,t,r){var u=null==n?0:n.length;if(!u)return-1;var i=u;return r!==e&&(i=(i=ha(r))<0?gr(u+i,0):dr(i,u-1)),t==t?function(n,t,r){for(var e=r+1;e--;)if(n[e]===t)return e;return e}(n,t,i):Pt(n,Wt,i,!0)},Pr.lowerCase=Fa,Pr.lowerFirst=Ga,Pr.lt=fa,Pr.lte=la,Pr.max=function(n){return n&&n.length?he(n,rc,Ie):e},Pr.maxBy=function(n,t){return n&&n.length?he(n,ii(t,2),Ie):e},Pr.mean=function(n){return $t(n,rc)},Pr.meanBy=function(n,t){return $t(n,ii(t,2))},Pr.min=function(n){return n&&n.length?he(n,rc,De):e},Pr.minBy=function(n,t){return n&&n.length?he(n,ii(t,2),De):e},Pr.stubArray=vc,Pr.stubFalse=_c,Pr.stubObject=function(){return{}},Pr.stubString=function(){return\"\"},Pr.stubTrue=function(){return!0},Pr.multiply=wc,Pr.nth=function(n,t){return n&&n.length?Ne(n,ha(t)):e},Pr.noConflict=function(){return st._===this&&(st._=Ln),this},Pr.noop=ac,Pr.now=jo,Pr.pad=function(n,t,r){n=da(n);var e=(t=ha(t))?fr(n):0;if(!t||e>=t)return n;var u=(t-e)/2;return Wu(_t(u),r)+n+Wu(ht(u),r)},Pr.padEnd=function(n,t,r){n=da(n);var e=(t=ha(t))?fr(n):0;return t&&e<t?n+Wu(t-e,r):n},Pr.padStart=function(n,t,r){n=da(n);var e=(t=ha(t))?fr(n):0;return t&&e<t?Wu(t-e,r)+n:n},Pr.parseInt=function(n,t,r){return r||null==t?t=0:t&&(t=+t),mr(da(n).replace(rn,\"\"),t||0)},Pr.random=function(n,t,r){if(r&&\"boolean\"!=typeof r&&gi(n,t,r)&&(t=r=e),r===e&&(\"boolean\"==typeof t?(r=t,t=e):\"boolean\"==typeof n&&(r=n,n=e)),n===e&&t===e?(n=0,t=1):(n=pa(n),t===e?(t=n,n=0):t=pa(t)),n>t){var u=n;n=t,t=u}if(r||n%1||t%1){var i=br();return dr(n+i*(t-n+at(\"1e-\"+((i+\"\").length-1))),t)}return Ge(n,t)},Pr.reduce=function(n,t,r){var e=qo(n)?Mt:Gt,u=arguments.length<3;return e(n,ii(t,4),r,u,le)},Pr.reduceRight=function(n,t,r){var e=qo(n)?zt:Gt,u=arguments.length<3;return e(n,ii(t,4),r,u,se)},Pr.repeat=function(n,t,r){return t=(r?gi(n,t,r):t===e)?1:ha(t),Ke(da(n),t)},Pr.replace=function(){var n=arguments,t=da(n[0]);return n.length<3?t:t.replace(n[1],n[2])},Pr.result=function(n,t,r){var u=-1,i=(t=gu(t,n)).length;for(i||(i=1,n=e);++u<i;){var o=null==n?e:n[Di(t[u])];o===e&&(u=i,o=r),n=Yo(o)?o.call(n):o}return n},Pr.round=xc,Pr.runInContext=n,Pr.sample=function(n){return(qo(n)?Hr:Ve)(n)},Pr.size=function(n){if(null==n)return 0;if(Go(n))return oa(n)?fr(n):n.length;var t=si(n);return t==w||t==O?n.size:ze(n).length},Pr.snakeCase=Ka,Pr.some=function(n,t,r){var u=qo(n)?Dt:tu;return r&&gi(n,t,r)&&(t=e),u(n,ii(t,3))},Pr.sortedIndex=function(n,t){return ru(n,t)},Pr.sortedIndexBy=function(n,t,r){return eu(n,t,ii(r,2))},Pr.sortedIndexOf=function(n,t){var r=null==n?0:n.length;if(r){var e=ru(n,t);if(e<r&&Lo(n[e],t))return e}return-1},Pr.sortedLastIndex=function(n,t){return ru(n,t,!0)},Pr.sortedLastIndexBy=function(n,t,r){return eu(n,t,ii(r,2),!0)},Pr.sortedLastIndexOf=function(n,t){if(null!=n&&n.length){var r=ru(n,t,!0)-1;if(Lo(n[r],t))return r}return-1},Pr.startCase=Za,Pr.startsWith=function(n,t,r){return n=da(n),r=null==r?0:ie(ha(r),0,n.length),t=ou(t),n.slice(r,r+t.length)==t},Pr.subtract=Ac,Pr.sum=function(n){return n&&n.length?Kt(n,rc):0},Pr.sumBy=function(n,t){return n&&n.length?Kt(n,ii(t,2)):0},Pr.template=function(n,t,r){var u=Pr.templateSettings;r&&gi(n,t,r)&&(t=e),n=da(n),t=wa({},t,u,Hu);var i=wa({},t.imports,u.imports,Hu),o=Sa(i),a=Yt(i,o);jt(o,function(n){if(fn.test(n))throw new xn(\"Invalid `imports` option passed into `_.template`\")});var c,f,l=0,s=t.interpolate||mn,p=\"__p += '\",h=On((t.escape||mn).source+\"|\"+s.source+\"|\"+(s===Y?sn:mn).source+\"|\"+(t.evaluate||mn).source+\"|$\",\"g\"),v=\"//# sourceURL=\"+(zn.call(t,\"sourceURL\")?(t.sourceURL+\"\").replace(/\\s/g,\" \"):\"lodash.templateSources[\"+ ++et+\"]\")+\"\\n\";n.replace(h,function(t,r,e,u,i,o){return e||(e=u),p+=n.slice(l,o).replace(bn,rr),r&&(c=!0,p+=\"' +\\n__e(\"+r+\") +\\n'\"),i&&(f=!0,p+=\"';\\n\"+i+\";\\n__p += '\"),e&&(p+=\"' +\\n((__t = (\"+e+\")) == null ? '' : __t) +\\n'\"),l=o+t.length,t}),p+=\"';\\n\";var _=zn.call(t,\"variable\")&&t.variable;if(_){if(fn.test(_))throw new xn(\"Invalid `variable` option passed into `_.template`\")}else p=\"with (obj) {\\n\"+p+\"\\n}\\n\";p=(f?p.replace(W,\"\"):p).replace($,\"$1\").replace(q,\"$1;\"),p=\"function(\"+(_||\"obj\")+\") {\\n\"+(_?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(c?\", __e = _.escape\":\"\")+(f?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var g=Ja(function(){return An(o,v+\"return \"+p).apply(e,a)});if(g.source=p,Ho(g))throw g;return g},Pr.times=function(n,t){if((n=ha(n))<1||n>l)return[];var r=p,e=dr(n,p);t=ii(t),n-=p;for(var u=Zt(e,t);++r<n;)t(r);return u},Pr.toFinite=pa,Pr.toInteger=ha,Pr.toLength=va,Pr.toLower=function(n){return da(n).toLowerCase()},Pr.toNumber=_a,Pr.toSafeInteger=function(n){return n?ie(ha(n),-9007199254740991,l):0===n?n:0},Pr.toString=da,Pr.toUpper=function(n){return da(n).toUpperCase()},Pr.trim=function(n,t,r){if((n=da(n))&&(r||t===e))return Vt(n);if(!n||!(t=ou(t)))return n;var u=lr(n),i=lr(t);return yu(u,Qt(u,i),Xt(u,i)+1).join(\"\")},Pr.trimEnd=function(n,t,r){if((n=da(n))&&(r||t===e))return n.slice(0,sr(n)+1);if(!n||!(t=ou(t)))return n;var u=lr(n);return yu(u,0,Xt(u,lr(t))+1).join(\"\")},Pr.trimStart=function(n,t,r){if((n=da(n))&&(r||t===e))return n.replace(rn,\"\");if(!n||!(t=ou(t)))return n;var u=lr(n);return yu(u,Qt(u,lr(t))).join(\"\")},Pr.truncate=function(n,t){var r=30,u=\"...\";if(Xo(t)){var i=\"separator\"in t?t.separator:i;r=\"length\"in t?ha(t.length):r,u=\"omission\"in t?ou(t.omission):u}var o=(n=da(n)).length;if(er(n)){var a=lr(n);o=a.length}if(r>=o)return n;var c=r-fr(u);if(c<1)return u;var f=a?yu(a,0,c).join(\"\"):n.slice(0,c);if(i===e)return f+u;if(a&&(c+=f.length-c),ua(i)){if(n.slice(c).search(i)){var l,s=f;for(i.global||(i=On(i.source,da(pn.exec(i))+\"g\")),i.lastIndex=0;l=i.exec(s);)var p=l.index;f=f.slice(0,p===e?c:p)}}else if(n.indexOf(ou(i),c)!=c){var h=f.lastIndexOf(i);h>-1&&(f=f.slice(0,h))}return f+u},Pr.unescape=function(n){return(n=da(n))&&K.test(n)?n.replace(F,pr):n},Pr.uniqueId=function(n){var t=++Dn;return da(n)+t},Pr.upperCase=Va,Pr.upperFirst=Ha,Pr.each=go,Pr.eachRight=yo,Pr.first=Fi,oc(Pr,(gc={},ye(Pr,function(n,t){zn.call(Pr.prototype,t)||(gc[t]=n)}),gc),{chain:!1}),Pr.VERSION=\"4.18.1\",jt([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(n){Pr[n].placeholder=Pr}),jt([\"drop\",\"take\"],function(n,t){$r.prototype[n]=function(r){r=r===e?1:gr(ha(r),0);var u=this.__filtered__&&!t?new $r(this):this.clone();return u.__filtered__?u.__takeCount__=dr(r,u.__takeCount__):u.__views__.push({size:dr(r,p),type:n+(u.__dir__<0?\"Right\":\"\")}),u},$r.prototype[n+\"Right\"]=function(t){return this.reverse()[n](t).reverse()}}),jt([\"filter\",\"map\",\"takeWhile\"],function(n,t){var r=t+1,e=1==r||3==r;$r.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:ii(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),jt([\"head\",\"last\"],function(n,t){var r=\"take\"+(t?\"Right\":\"\");$r.prototype[n]=function(){return this[r](1).value()[0]}}),jt([\"initial\",\"tail\"],function(n,t){var r=\"drop\"+(t?\"\":\"Right\");$r.prototype[n]=function(){return this.__filtered__?new $r(this):this[r](1)}}),$r.prototype.compact=function(){return this.filter(rc)},$r.prototype.find=function(n){return this.filter(n).head()},$r.prototype.findLast=function(n){return this.reverse().find(n)},$r.prototype.invokeMap=Ze(function(n,t){return\"function\"==typeof n?new $r(this):this.map(function(r){return Te(r,n,t)})}),$r.prototype.reject=function(n){return this.filter(zo(ii(n)))},$r.prototype.slice=function(n,t){n=ha(n);var r=this;return r.__filtered__&&(n>0||t<0)?new $r(r):(n<0?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==e&&(r=(t=ha(t))<0?r.dropRight(-t):r.take(t-n)),r)},$r.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},$r.prototype.toArray=function(){return this.take(p)},ye($r.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),u=/^(?:head|last)$/.test(t),i=Pr[u?\"take\"+(\"last\"==t?\"Right\":\"\"):t],o=u||/^find/.test(t);i&&(Pr.prototype[t]=function(){var t=this.__wrapped__,a=u?[1]:arguments,c=t instanceof $r,f=a[0],l=c||qo(t),s=function(n){var t=i.apply(Pr,Rt([n],a));return u&&p?t[0]:t};l&&r&&\"function\"==typeof f&&1!=f.length&&(c=l=!1);var p=this.__chain__,h=!!this.__actions__.length,v=o&&!p,_=c&&!h;if(!o&&l){t=_?t:new $r(this);var g=n.apply(t,a);return g.__actions__.push({func:so,args:[s],thisArg:e}),new Wr(g,p)}return v&&_?n.apply(this,a):(g=this.thru(s),v?u?g.value()[0]:g.value():g)})}),jt([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(n){var t=kn[n],r=/^(?:push|sort|unshift)$/.test(n)?\"tap\":\"thru\",e=/^(?:pop|shift)$/.test(n);Pr.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(qo(u)?u:[],n)}return this[r](function(r){return t.apply(qo(r)?r:[],n)})}}),ye($r.prototype,function(n,t){var r=Pr[t];if(r){var e=r.name+\"\";zn.call(kr,e)||(kr[e]=[]),kr[e].push({name:t,func:r})}}),kr[Bu(e,2).name]=[{name:\"wrapper\",func:e}],$r.prototype.clone=function(){var n=new $r(this.__wrapped__);return n.__actions__=Ou(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Ou(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Ou(this.__views__),n},$r.prototype.reverse=function(){if(this.__filtered__){var n=new $r(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},$r.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,r=qo(n),e=t<0,u=r?n.length:0,i=function(n,t,r){for(var e=-1,u=r.length;++e<u;){var i=r[e],o=i.size;switch(i.type){case\"drop\":n+=o;break;case\"dropRight\":t-=o;break;case\"take\":t=dr(t,n+o);break;case\"takeRight\":n=gr(n,t-o)}}return{start:n,end:t}}(0,u,this.__views__),o=i.start,a=i.end,c=a-o,f=e?a:o-1,l=this.__iteratees__,s=l.length,p=0,h=dr(c,this.__takeCount__);if(!r||!e&&u==c&&h==c)return su(n,this.__actions__);var v=[];n:for(;c--&&p<h;){for(var _=-1,g=n[f+=t];++_<s;){var d=l[_],y=d.iteratee,m=d.type,b=y(g);if(2==m)g=b;else if(!b){if(1==m)continue n;break n}}v[p++]=g}return v},Pr.prototype.at=po,Pr.prototype.chain=function(){return lo(this)},Pr.prototype.commit=function(){return new Wr(this.value(),this.__chain__)},Pr.prototype.next=function(){this.__values__===e&&(this.__values__=sa(this.value()));var n=this.__index__>=this.__values__.length;return{done:n,value:n?e:this.__values__[this.__index__++]}},Pr.prototype.plant=function(n){for(var t,r=this;r instanceof Nr;){var u=Bi(r);u.__index__=0,u.__values__=e,t?i.__wrapped__=u:t=u;var i=u;r=r.__wrapped__}return i.__wrapped__=n,t},Pr.prototype.reverse=function(){var n=this.__wrapped__;if(n instanceof $r){var t=n;return this.__actions__.length&&(t=new $r(this)),(t=t.reverse()).__actions__.push({func:so,args:[Qi],thisArg:e}),new Wr(t,this.__chain__)}return this.thru(Qi)},Pr.prototype.toJSON=Pr.prototype.valueOf=Pr.prototype.value=function(){return su(this.__wrapped__,this.__actions__)},Pr.prototype.first=Pr.prototype.head,Qn&&(Pr.prototype[Qn]=function(){return this}),Pr}();\"function\"==typeof define&&\"object\"==typeof define.amd&&define.amd?(st._=hr,define(function(){return hr})):ht?((ht.exports=hr)._=hr,pt._=hr):st._=hr}.call(this)},540(n){n.exports=function(n,t,r,e){var u=r?r.call(e,n,t):void 0;if(void 0!==u)return!!u;if(n===t)return!0;if(\"object\"!=typeof n||!n||\"object\"!=typeof t||!t)return!1;var i=Object.keys(n),o=Object.keys(t);if(i.length!==o.length)return!1;for(var a=Object.prototype.hasOwnProperty.bind(t),c=0;c<i.length;c++){var f=i[c];if(!a(f))return!1;var l=n[f],s=t[f];if(!1===(u=r?r.call(e,l,s,f):void 0)||void 0===u&&l!==s)return!1}return!0}}},t={};function r(e){var u=t[e];if(void 0!==u)return u.exports;var i=t[e]={id:e,loaded:!1,exports:{}};return n[e].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.n=n=>{var t=n&&n.__esModule?()=>n.default:()=>n;return r.d(t,{a:t}),t},r.d=(n,t)=>{for(var e in t)r.o(t,e)&&!r.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(n){if(\"object\"==typeof window)return window}}(),r.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t),r.r=n=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(n,\"__esModule\",{value:!0})},r.nmd=n=>(n.paths=[],n.children||(n.children=[]),n);var e={};(()=>{\"use strict\";function n(n,t){let r;return function(n){return void 0!==n.id}(n)?r=n.id:t&&t.length&&(r=t[0].id),{id:r,firstName:n.firstName,lastName:n.lastName,company:n.company,addressLine1:n.address1,addressLine2:n.address2,city:n.city,province:n.stateOrProvince,provinceCode:n.stateOrProvinceCode,postCode:n.postalCode,country:n.country,countryCode:n.countryCode,phone:n.phone,customFields:n.customFields}}r.r(e),r.d(e,{CacheKeyResolver:()=>j,mapToInternalAddress:()=>n,mapToInternalCart:()=>s,mapToInternalCoupon:()=>o,mapToInternalCustomer:()=>p,mapToInternalGiftCertificate:()=>a,mapToInternalLineItem:()=>f,mapToInternalLineItems:()=>l,mapToInternalOrder:()=>h,mapToInternalQuote:()=>m,mapToInternalShippingOption:()=>b,mapToInternalShippingOptions:()=>w});var t=r(9440);class u{constructor(n){this._decimalPlaces=n}toInteger(n){return Math.round(n*Math.pow(10,this._decimalPlaces))}}const i=[\"per_item_discount\",\"percentage_discount\",\"per_total_discount\",\"shipping_discount\",\"free_shipping\"];function o(n){return{code:n.code,discount:n.displayName,discountType:i.indexOf(n.couponType)}}function a(n){return{code:n.code,discountedAmount:n.used,remainingBalance:n.remaining,giftCertificate:{balance:n.balance,code:n.code,purchaseDate:n.purchaseDate}}}function c(n){const t=[];return(n||[]).forEach(n=>{(n.banners||[]).forEach(n=>{t.push({placeholders:[],discountType:null,message:\"\",messageHtml:n.text})})}),t}function f(n,t,r,e=\"id\"){const i=new u(r);return{id:n[e],imageUrl:n.imageUrl,amount:n.extendedListPrice,amountAfterDiscount:n.extendedSalePrice,discount:n.discountAmount,integerAmount:i.toInteger(n.extendedListPrice),integerAmountAfterDiscount:i.toInteger(n.extendedSalePrice),integerDiscount:i.toInteger(n.discountAmount),integerUnitPrice:i.toInteger(n.listPrice),integerUnitPriceAfterDiscount:i.toInteger(n.salePrice),downloadsPageUrl:n.downloadPageUrl,name:n.name,quantity:n.quantity,brand:n.brand,sku:n.sku,categoryNames:n.categoryNames,variantId:n.variantId,productId:n.productId,attributes:(n.options||[]).map(n=>({name:n.name,value:n.value})),addedByPromotion:n.addedByPromotion,type:t}}function l(n,t,r=\"id\"){return Object.keys(n).reduce((e,i)=>[...e,...n[i].map(n=>\"giftCertificates\"===i?function(n,t){const r=new u(t);return{id:n.id,imageUrl:\"\",name:n.name,amount:n.amount,amountAfterDiscount:n.amount,discount:0,integerAmount:r.toInteger(n.amount),integerAmountAfterDiscount:r.toInteger(n.amount),integerUnitPrice:r.toInteger(n.amount),integerUnitPriceAfterDiscount:r.toInteger(n.amount),integerDiscount:0,quantity:1,sender:n.sender,recipient:n.recipient,type:\"ItemGiftCertificateEntity\",attributes:[],variantId:null}}(n,t):f(n,function(n){switch(n){case\"physicalItems\":return\"ItemPhysicalEntity\";case\"digitalItems\":return\"ItemDigitalEntity\";case\"giftCertificates\":return\"ItemGiftCertificateEntity\";default:return\"\"}}(i),t,r))],[])}function s(n){const r=n.cart.currency.decimalPlaces,e=new u(r);return{id:n.cart.id,items:l(n.cart.lineItems,r),currency:n.cart.currency.code,coupon:{discountedAmount:(0,t.reduce)(n.cart.coupons,(n,t)=>n+t.discountedAmount,0),coupons:n.cart.coupons.map(o)},discount:{amount:n.cart.discountAmount,integerAmount:e.toInteger(n.cart.discountAmount)},discountNotifications:c(n.promotions),giftCertificate:{totalDiscountedAmount:(0,t.reduce)(n.giftCertificates,(n,t)=>n+t.used,0),appliedGiftCertificates:(0,t.keyBy)(n.giftCertificates.map(a),\"code\")},shipping:{amount:n.shippingCostTotal,integerAmount:e.toInteger(n.shippingCostTotal),amountBeforeDiscount:n.shippingCostBeforeDiscount,integerAmountBeforeDiscount:e.toInteger(n.shippingCostBeforeDiscount),required:(0,t.some)(n.cart.lineItems.physicalItems,n=>n.isShippingRequired)},subtotal:{amount:n.subtotal,integerAmount:e.toInteger(n.subtotal)},storeCredit:{amount:n.customer?n.customer.storeCredit:0},taxSubtotal:{amount:n.taxTotal,integerAmount:e.toInteger(n.taxTotal)},taxes:n.taxes,taxTotal:{amount:n.taxTotal,integerAmount:e.toInteger(n.taxTotal)},handling:{amount:n.handlingCostTotal,integerAmount:e.toInteger(n.handlingCostTotal)},grandTotal:{amount:n.grandTotal,integerAmount:e.toInteger(n.grandTotal)}}}function p(t,r){const e=t.firstName||r.firstName||\"\",u=t.lastName||r.lastName||\"\";return{addresses:(t.addresses||[]).map(t=>n(t)),customerId:t.id,isGuest:t.isGuest,storeCredit:t.storeCredit,email:t.email||r.email||\"\",firstName:e,lastName:u,name:t.fullName||[e,u].join(\" \"),customerGroupName:t.customerGroup&&t.customerGroup.name}}function h(n,r={}){const e=n.currency.decimalPlaces,i=new u(e);return{id:n.orderId,items:l(n.lineItems,n.currency.decimalPlaces,\"productId\"),orderId:n.orderId,currency:n.currency.code,customerCanBeCreated:n.customerCanBeCreated,payment:g(n.payments,r.payment),subtotal:{amount:n.baseAmount,integerAmount:i.toInteger(n.baseAmount)},coupon:{discountedAmount:(0,t.reduce)(n.coupons,(n,t)=>n+t.discountedAmount,0),coupons:n.coupons.map(o)},discount:{amount:n.discountAmount,integerAmount:i.toInteger(n.discountAmount)},token:r.orderToken,callbackUrl:r.callbackUrl,discountNotifications:[],giftCertificate:_(n.payments),socialData:y(n),status:n.status,hasDigitalItems:n.hasDigitalItems,isDownloadable:n.isDownloadable,isComplete:n.isComplete,shipping:{amount:n.shippingCostTotal,integerAmount:i.toInteger(n.shippingCostTotal),amountBeforeDiscount:n.shippingCostBeforeDiscount,integerAmountBeforeDiscount:i.toInteger(n.shippingCostBeforeDiscount)},storeCredit:{amount:v(n.payments)},taxes:n.taxes,taxTotal:{amount:n.taxTotal,integerAmount:i.toInteger(n.taxTotal)},handling:{amount:n.handlingCostTotal,integerAmount:i.toInteger(n.handlingCostTotal)},grandTotal:{amount:n.orderAmount,integerAmount:n.orderAmountAsInteger}}}function v(n){const r=(0,t.find)(n,{providerId:\"storecredit\"});return r?r.amount:0}function _(n){const r=(0,t.filter)(n,{providerId:\"giftcertificate\"});return{totalDiscountedAmount:(0,t.reduce)(r,(n,t)=>t.amount+n,0),appliedGiftCertificates:(0,t.keyBy)(r.map(n=>({code:n.detail.code,discountedAmount:n.amount,remainingBalance:n.detail.remaining,giftCertificate:{balance:n.amount+n.detail.remaining,code:n.detail.code,purchaseDate:\"\"}})),\"code\")}}function g(n,r={}){const e=(0,t.find)(n,d);return e?{id:e.providerId,status:(u=e.detail.step,`PAYMENT_STATUS_${u}`),helpText:e.detail.instructions,returnUrl:r.returnUrl}:{};var u}function d(n){return\"giftcertificate\"!==n.providerId&&\"storecredit\"!==n.providerId}function y(n){const r={};return[...n.lineItems.physicalItems,...n.lineItems.digitalItems].forEach(n=>{var e;r[n.id]=(e=n,[\"fb\",\"tw\",\"gp\"].reduce((n,r)=>{const u=e.socialMedia&&(0,t.find)(e.socialMedia,n=>n.code===r);return u?(n[r]={name:e.name,description:e.name,image:e.imageUrl,url:u.link,shareText:u.text,sharingLink:u.link,channelName:u.channel,channelCode:u.code},n):n},{}))}),r}function m(t,r){const e=t.consignments&&t.consignments[0];return{orderComment:t.customerMessage,shippingOption:e&&e.selectedShippingOption?e.selectedShippingOption.id:void 0,billingAddress:t.billingAddress?n(t.billingAddress):{},shippingAddress:r&&n(r,t.consignments)}}function b(n,t){return{description:n.description,module:n.type,price:n.cost,id:n.id,selected:t,isRecommended:n.isRecommended,imageUrl:n.imageUrl,transitTime:n.transitTime}}function w(n){return n.reduce((n,t)=>{let r;return t.availableShippingOptions&&t.availableShippingOptions.length?r=t.availableShippingOptions:t.selectedShippingOption&&(r=[t.selectedShippingOption]),Object.assign(Object.assign({},n),{[t.id]:(r||[]).map(n=>{const r=t.selectedShippingOption&&t.selectedShippingOption.id;return b(n,n.id===r)})})},{})}var x=r(540),A=r.n(x);function I(n){return Object.prototype.hasOwnProperty.call(n,\"cacheKey\")}class j{constructor(n){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=Object.assign({maxSize:0,isEqual:A(),onExpire:t.noop},n)}getKey(...n){const t=this._resolveMap(...n),{index:r,parentMap:e}=t;let{map:u}=t;return u&&u.cacheKey?u.usedCount++:u=this._generateMap(e,n.slice(r)),this._removeLeastUsedMap(u),u.cacheKey}getUsedCount(...n){const{map:t}=this._resolveMap(...n);return t?t.usedCount:0}_resolveMap(...n){let t=0,r=this._map;for(;r.maps.length;){let e=!1;for(let u=0;u<r.maps.length;u++){const i=r.maps[u];if(this._options.isEqual(i.value,n[t])){if(r.maps.unshift(...r.maps.splice(u,1)),(0===n.length||t===n.length-1)&&I(i))return{index:t,map:i,parentMap:r};e=!0,r=i,t++;break}}if(!e)break}return{index:t,parentMap:r}}_generateMap(n,t){let r,e=0,u=n;do{r={maps:[],parentMap:u,usedCount:1,value:t[e]},u.maps.unshift(r),u=r,e++}while(e<t.length);const i=r;return i.cacheKey=\"\"+ ++this._lastId,i}_removeLeastUsedMap(n){if(!this._options.maxSize)return;const t=this._usedMaps.indexOf(n);if(this._usedMaps.splice(-1===t?0:t,-1===t?0:1,n),this._usedMaps.length<=this._options.maxSize)return;const r=this._usedMaps.pop();r&&(this._removeMap(r),this._options.onExpire(r.cacheKey))}_removeMap(n){n.parentMap&&(n.parentMap.maps.splice(n.parentMap.maps.indexOf(n),1),function(n){return Object.prototype.hasOwnProperty.call(n,\"parentMap\")}(n.parentMap)||this._removeMap(n.parentMap))}}})(),module.exports=e})();\n//# sourceMappingURL=internal-mappers.js.map"
  },
  {
    "path": "dist/esm/checkout-button.js",
    "content": "import{createRequestSender as e,createTimeout as t}from\"@bigcommerce/request-sender\";import{createFormPoster as n}from\"@bigcommerce/form-poster\";import{combineReducers as i,composeReducers as r,createAction as o,createDataStore as a,createErrorAction as s,deepFreeze as d}from\"@bigcommerce/data-store\";import{difference as c,filter as u,find as l,findIndex as h,flatMap as p,identity as g,includes as m,isArray as y,isEmpty as f,isEqual as _,isMatch as v,isNil as S,isObject as C,isPlainObject as I,keyBy as w,keys as b,last as E,map as P,max as O,memoize as A,noop as T,omit as k,omitBy as R,pick as D,pickBy as M,reduce as N,round as L,some as z,transform as U,uniq as F,uniqueId as B,values as x,without as q}from\"lodash\";import{Observable as j,Subject as G,concat as V,defer as H,empty as W,from as Y,fromEvent as K,merge as $,of as Z,throwError as J}from\"rxjs\";import{catchError as Q,delay as X,filter as ee,map as te,retryWhen as ne,shareReplay as ie,switchMap as re,take as oe}from\"rxjs/operators\";import{memoize as ae,memoizeOne as se}from\"@bigcommerce/memoize\";import{createSelector as de}from\"reselect\";import{ScriptLoader as ce,createScriptLoader as ue,getScriptLoader as le}from\"@bigcommerce/script-loader\";import{stringifyUrl as he}from\"query-string\";import{supportsPopups as pe}from\"@braintree/browser-detection\";import{createClient as ge}from\"@bigcommerce/bigpay-client\";import{creditCardType as me,number as ye}from\"card-validator\";import{default as fe}from\"shallowequal\";var _e={d:(e,t)=>{for(var n in t)_e.o(t,n)&&!_e.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})}},ve={};_e.r(ve),_e.d(ve,{createAmazonPayV2ButtonStrategy:()=>Lr,createApplePayButtonStrategy:()=>go,createBigCommercePaymentsButtonStrategy:()=>Do,createBigCommercePaymentsPayLaterButtonStrategy:()=>Lo,createBigCommercePaymentsVenmoButtonStrategy:()=>Fo,createBoltButtonStrategy:()=>Wo,createBraintreePaypalButtonStrategy:()=>la,createBraintreePaypalCreditButtonStrategy:()=>ga,createBraintreeVenmoButtonStrategy:()=>wa,createBraintreeVisaCheckoutButtonStrategy:()=>fa,createGooglePayAdyenV2ButtonStrategy:()=>hs,createGooglePayAdyenV3ButtonStrategy:()=>ps,createGooglePayAuthorizeDotNetButtonStrategy:()=>ms,createGooglePayBigCommercePaymentsButtonStrategy:()=>ls,createGooglePayBraintreeButtonStrategy:()=>Qa,createGooglePayCheckoutComButtonStrategy:()=>Ss,createGooglePayCybersourceButtonStrategy:()=>Is,createGooglePayOrbitalButtonStrategy:()=>bs,createGooglePayPayPalCommerceButtonStrategy:()=>as,createGooglePayStripeButtonStrategy:()=>Gs,createGooglePayTdOnlineMartButtonStrategy:()=>$s,createGooglePayWorldpayAccessButtonStrategy:()=>Hs,createLinkV2ButtonStrategy:()=>nc,createPayPalCommerceButtonStrategy:()=>yd,createPayPalCommerceCreditButtonStrategy:()=>vd,createPayPalCommerceVenmoButtonStrategy:()=>Ld,createPaypalExpressButtonStrategy:()=>Hd});class Se extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}const Ce={body:{},headers:{},status:0};class Ie extends Se{constructor(e,{message:t,errors:n}={}){const{body:i,headers:r,status:o}=e||Ce;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=r,this.status=o,this.errors=n||[]}}class we extends Ie{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class be extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}const Ee={body:{},headers:{},status:0};class Pe extends be{constructor(e,{message:t,errors:n}={}){const{body:i,headers:r,status:o}=e||Ee;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=r,this.status=o,this.errors=n||[]}}class Oe extends Pe{constructor(e,t){super(e,{message:t||\"An unexpected error has occurred. The checkout process cannot continue as a result.\"}),this.name=\"UnrecoverableError\",this.type=\"unrecoverable\"}}function Ae(e){return e.reduce((e,t)=>t?[...e,t]:e,[]).join(\" \")}function Te(e,t){const{body:n}=e,{errors:i=[]}=n;return new Pe(e,{message:ke(i)||t,errors:i})}function ke(e){if(Array.isArray(e))return e.reduce((e,t)=>t&&t.message?[...e,t.message]:e,[]).join(\" \")}class Re extends Pe{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}class De{constructor(){this._factoryMethods={},this.register(\"default\",(e,t)=>new Pe(e,{message:t})),this.register(\"internal\",(e,t)=>function(e,t){const{body:n}=e,{errors:i=[]}=n;return new Pe(e,{message:Ae(i)||n.detail||n.title||t,errors:i.length?i.map(e=>({code:n.type,message:e})):[{code:n.type,message:n.detail||n.title}]})}(e,t)),this.register(\"storefront\",(e,t)=>function(e,t){const{body:n}=e;return new Pe(e,{message:t||n.detail||n.title,errors:[{code:n.code||n.type,message:n.detail||n.title}]})}(e,t)),this.register(\"payment\",(e,t)=>Te(e,t)),this.register(\"timeout\",e=>new Re(e))}register(e,t){this._factoryMethods[e]=t}createError(e,t){return(this._factoryMethods[this._getType(e)]||this._factoryMethods.default)(e,t)}_getType(e){if(0===e.status)return\"timeout\";if(this._isStorefrontErrorResponseBody(e.body))return\"storefront\";if(this._isInternalErrorResponseBody(e.body)){const t=E(e.body.type.split(\"/\"));return t&&this._factoryMethods[t]?t:\"internal\"}const t=E(e.body&&e.body.errors);return t&&t.code&&this._factoryMethods[t.code]?t.code:\"payment\"}_isStorefrontErrorResponseBody(e){const t=e;return!this._isInternalErrorResponseBody(e)&&\"string\"==typeof t.title&&\"string\"==typeof t.type&&\"number\"==typeof t.status&&\"string\"==typeof t.detail}_isInternalErrorResponseBody(e){const t=e;return\"object\"==typeof t.errors&&\"string\"==typeof t.title&&\"string\"==typeof t.type&&\"number\"==typeof t.status}}function Me(e,t){return Array.isArray(e)?e.map(e=>Me(e,t)):I(e)?U(R(e,t),(e,n,i)=>{e[i]=Me(n,t)},{}):e}var Ne,Le;function ze(e,t){return function(e){return e.type===Ne.ClearError}(t)?Me(e,e=>e===t.payload):e}function Ue(e,t,n){return e===t||(e&&t&&\"object\"==typeof e&&\"object\"==typeof t?Array.isArray(e)&&Array.isArray(t)?function(e,t,n){if(e.length!==t.length)return!1;for(let i=0,r=e.length;i<r;i++)if(!Ue(e[i],t[i],n))return!1;return!0}(e,t,n):!Array.isArray(e)&&!Array.isArray(t)&&(e instanceof Date&&t instanceof Date?function(e,t){return e.getTime()===t.getTime()}(e,t):!(e instanceof Date||t instanceof Date)&&(e instanceof RegExp&&t instanceof RegExp?function(e,t){return e.toString()===t.toString()}(e,t):!(e instanceof RegExp||t instanceof RegExp)&&function(e,t,n){const i=n&&n.keyFilter,r=i?Object.keys(e).filter(i):Object.keys(e),o=i?Object.keys(t).filter(i):Object.keys(t);if(r.length!==o.length)return!1;for(let i=0,o=r.length;i<o;i++){const o=r[i];if(!Object.prototype.hasOwnProperty.call(t,o))return!1;if(!Ue(e[o],t[o],n))return!1}return!0}(e,t,n))):e===t)}function Fe(e,t,n){return e&&Object.prototype.hasOwnProperty.call(e,t)&&Ue(e[t],n)?e:Object.assign(Object.assign({},e),{[t]:n})}!function(e){e.ClearError=\"CLEAR_ERROR\"}(Ne||(Ne={})),function(e){e.LoadB2BTokenRequested=\"LOAD_B2B_TOKEN_REQUESTED\",e.LoadB2BTokenSucceeded=\"LOAD_B2B_TOKEN_SUCCEEDED\",e.LoadB2BTokenFailed=\"LOAD_B2B_TOKEN_FAILED\"}(Le||(Le={}));const Be={errors:{},statuses:{}};function xe(e=Be,t){return i({data:qe,errors:r(je,ze),statuses:Ge})(e,t)}function qe(e,t){return t.type===Le.LoadB2BTokenSucceeded?t.payload:e}function je(e=Be.errors,t){switch(t.type){case Le.LoadB2BTokenRequested:case Le.LoadB2BTokenSucceeded:return Fe(e,\"loadError\",void 0);case Le.LoadB2BTokenFailed:return Fe(e,\"loadError\",t.payload);default:return e}}function Ge(e=Be.statuses,t){switch(t.type){case Le.LoadB2BTokenRequested:return Fe(e,\"isLoading\",!0);case Le.LoadB2BTokenFailed:case Le.LoadB2BTokenSucceeded:return Fe(e,\"isLoading\",!1);default:return e}}var Ve,He,We,Ye;function Ke(e,t){return void 0===t||Ue(e,t)?e:t}!function(e){e.LoadCheckoutRequested=\"LOAD_CHECKOUT_REQUESTED\",e.LoadCheckoutSucceeded=\"LOAD_CHECKOUT_SUCCEEDED\",e.LoadCheckoutFailed=\"LOAD_CHECKOUT_FAILED\",e.UpdateCheckoutRequested=\"UPDATE_CHECKOUT_REQUESTED\",e.UpdateCheckoutSucceeded=\"UPDATE_CHECKOUT_SUCCEEDED\",e.UpdateCheckoutFailed=\"UPDATE_CHECKOUT_FAILED\"}(Ve||(Ve={})),function(e){e.HydrateInitialState=\"HYDRATE_INITIAL_STATE\"}(He||(He={})),function(e){e.UpdateSubscriptionsRequested=\"UPDATE_SUBSCRIPTIONS_REQUESTED\",e.UpdateSubscriptionsSucceeded=\"UPDATE_SUBSCRIPTIONS_SUCCEEDED\",e.UpdateSubscriptionsFailed=\"UPDATE_SUBSCRIPTIONS_FAILED\"}(We||(We={})),function(e){e.UpdateBillingAddressRequested=\"UPDATE_BILLING_ADDRESS_REQUESTED\",e.UpdateBillingAddressSucceeded=\"UPDATE_BILLING_ADDRESS_SUCCEEDED\",e.UpdateBillingAddressFailed=\"UPDATE_BILLING_ADDRESS_FAILED\",e.ContinueAsGuestRequested=\"CONTINUE_AS_GUEST_REQUESTED\",e.ContinueAsGuestSucceeded=\"CONTINUE_AS_GUEST_SUCCEEDED\",e.ContinueAsGuestFailed=\"CONTINUE_AS_GUEST_FAILED\"}(Ye||(Ye={}));const $e={errors:{},statuses:{}};function Ze(e=$e,t){return i({data:Je,errors:r(Qe,ze),statuses:Xe})(e,t)}function Je(e,t){var n,i;switch(t.type){case Ye.UpdateBillingAddressSucceeded:case Ye.ContinueAsGuestSucceeded:case Ve.LoadCheckoutSucceeded:return Ke(e,t.payload&&t.payload.billingAddress);case He.HydrateInitialState:return Ke(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.billingAddress);default:return e}}function Qe(e=$e.errors,t){switch(t.type){case Ve.LoadCheckoutRequested:case Ve.LoadCheckoutSucceeded:return Fe(e,\"loadError\",void 0);case Ve.LoadCheckoutFailed:return Fe(e,\"loadError\",t.payload);case Ye.UpdateBillingAddressRequested:case Ye.UpdateBillingAddressSucceeded:return Fe(e,\"updateError\",void 0);case Ye.UpdateBillingAddressFailed:return Fe(e,\"updateError\",t.payload);case We.UpdateSubscriptionsRequested:case We.UpdateSubscriptionsSucceeded:case Ye.ContinueAsGuestRequested:case Ye.ContinueAsGuestSucceeded:return Fe(e,\"continueAsGuestError\",void 0);case We.UpdateSubscriptionsFailed:case Ye.ContinueAsGuestFailed:return Fe(e,\"continueAsGuestError\",t.payload);default:return e}}function Xe(e=$e.statuses,t){switch(t.type){case Ve.LoadCheckoutRequested:return Fe(e,\"isLoading\",!0);case Ve.LoadCheckoutSucceeded:case Ve.LoadCheckoutFailed:return Fe(e,\"isLoading\",!1);case Ye.UpdateBillingAddressRequested:return Fe(e,\"isUpdating\",!0);case Ye.UpdateBillingAddressFailed:case Ye.UpdateBillingAddressSucceeded:return Fe(e,\"isUpdating\",!1);case Ye.ContinueAsGuestRequested:case We.UpdateSubscriptionsRequested:return Fe(e,\"isContinuingAsGuest\",!0);case We.UpdateSubscriptionsSucceeded:case We.UpdateSubscriptionsFailed:case Ye.ContinueAsGuestFailed:case Ye.ContinueAsGuestSucceeded:return Fe(e,\"isContinuingAsGuest\",!1);default:return e}}function et(e){return I(e)}const tt=function e(t,n,i){const{matchObject:r=(e,t)=>void 0!==e.id&&e.id===t.id}=i||{};if(!t)return n;if(!n||t===n)return t;let o=0,a=0;const s=(e,t,n)=>(o+=e===t?1:0,a+=e===n?1:0,e),d=n.map((n,i)=>{const o=t&&t[i];return et(o)&&et(n)?r(o,n)?s(nt(o,n),o,n):s(Ke(o,n),o,n):y(o)&&y(n)?s(e(o,n),o,n):s(Ke(o,n),o,n)});return o===n.length&&t&&t.length===n.length?t:a===n.length?n:d},nt=function e(t,n){return t?n&&t!==n?Object.keys(n).reduce((t,i)=>{const r=t[i],o=n[i];return et(r)&&et(o)?Fe(t,i,e(r,o)):y(r)&&y(o)?Fe(t,i,tt(r,o)):Fe(t,i,o)},t):t:n};var it,rt,ot;!function(e){e.ApplyCouponRequested=\"APPLY_COUPON_REQUESTED\",e.ApplyCouponSucceeded=\"APPLY_COUPON_SUCCEEDED\",e.ApplyCouponFailed=\"APPLY_COUPON_FAILED\",e.RemoveCouponRequested=\"REMOVE_COUPON_REQUESTED\",e.RemoveCouponSucceeded=\"REMOVE_COUPON_SUCCEEDED\",e.RemoveCouponFailed=\"REMOVE_COUPON_FAILED\"}(it||(it={})),function(e){e.ApplyGiftCertificateRequested=\"APPLY_GIFT_CERTIFICATE_REQUESTED\",e.ApplyGiftCertificateSucceeded=\"APPLY_GIFT_CERTIFICATE_SUCCEEDED\",e.ApplyGiftCertificateFailed=\"APPLY_GIFT_CERTIFICATE_FAILED\",e.RemoveGiftCertificateRequested=\"REMOVE_GIFT_CERTIFICATE_REQUESTED\",e.RemoveGiftCertificateSucceeded=\"REMOVE_GIFT_CERTIFICATE_SUCCEEDED\",e.RemoveGiftCertificateFailed=\"REMOVE_GIFT_CERTIFICATE_FAILED\"}(rt||(rt={})),function(e){e.CreateConsignmentsRequested=\"CREATE_CONSIGNMENTS_REQUESTED\",e.CreateConsignmentsSucceeded=\"CREATE_CONSIGNMENTS_SUCCEEDED\",e.CreateConsignmentsFailed=\"CREATE_CONSIGNMENTS_FAILED\",e.UpdateConsignmentRequested=\"UPDATE_CONSIGNMENT_REQUESTED\",e.UpdateConsignmentSucceeded=\"UPDATE_CONSIGNMENT_SUCCEEDED\",e.UpdateConsignmentFailed=\"UPDATE_CONSIGNMENT_FAILED\",e.DeleteConsignmentRequested=\"DELETE_CONSIGNMENT_REQUESTED\",e.DeleteConsignmentSucceeded=\"DELETE_CONSIGNMENT_SUCCEEDED\",e.DeleteConsignmentFailed=\"DELETE_CONSIGNMENT_FAILED\",e.UpdateShippingOptionRequested=\"UPDATE_SHIPPING_OPTION_REQUESTED\",e.UpdateShippingOptionSucceeded=\"UPDATE_SHIPPING_OPTION_SUCCEEDED\",e.UpdateShippingOptionFailed=\"UPDATE_SHIPPING_OPTION_FAILED\",e.LoadShippingOptionsRequested=\"LOAD_SHIPPING_OPTIONS_REQUESTED\",e.LoadShippingOptionsSucceeded=\"LOAD_SHIPPING_OPTIONS_SUCCEEDED\",e.LoadShippingOptionsFailed=\"LOAD_SHIPPING_OPTIONS_FAILED\"}(ot||(ot={}));const at={errors:{},statuses:{}};function st(e=at,t){return i({data:dt,errors:r(ut,ze),statuses:ct})(e,t)}function dt(e,t){var n,i;switch(t.type){case Ye.UpdateBillingAddressSucceeded:case Ve.LoadCheckoutSucceeded:case ot.CreateConsignmentsSucceeded:case ot.DeleteConsignmentSucceeded:case ot.UpdateConsignmentSucceeded:case ot.UpdateShippingOptionSucceeded:case ot.LoadShippingOptionsSucceeded:case it.ApplyCouponSucceeded:case it.RemoveCouponSucceeded:case rt.ApplyGiftCertificateSucceeded:case rt.RemoveGiftCertificateSucceeded:return nt(e,t.payload&&t.payload.cart);case He.HydrateInitialState:return nt(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.cart);default:return e}}function ct(e=at.statuses,t){switch(t.type){case Ve.LoadCheckoutRequested:return Fe(e,\"isLoading\",!0);case Ve.LoadCheckoutFailed:case Ve.LoadCheckoutSucceeded:return Fe(e,\"isLoading\",!1);default:return e}}function ut(e=at.errors,t){switch(t.type){case Ve.LoadCheckoutRequested:case Ve.LoadCheckoutSucceeded:return Fe(e,\"loadError\",void 0);case Ve.LoadCheckoutFailed:return Fe(e,\"loadError\",t.payload);default:return e}}var lt;!function(e){e.InitializeButtonFailed=\"INITIALIZE_BUTTON_FAILED\",e.InitializeButtonRequested=\"INITIALIZE_BUTTON_REQUESTED\",e.InitializeButtonSucceeded=\"INITIALIZE_BUTTON_SUCCEEDED\",e.DeinitializeButtonFailed=\"DEINITIALIZE_BUTTON_FAILED\",e.DeinitializeButtonRequested=\"DEINITIALIZE_BUTTON_REQUESTED\",e.DeinitializeButtonSucceeded=\"DEINITIALIZE_BUTTON_SUCCEEDED\"}(lt||(lt={}));const ht={data:{},errors:{},statuses:{}},pt={initializedContainers:{}},gt={},mt={};function yt(e=ht,t){return t.meta&&t.meta.methodId?i({data:i({[t.meta.methodId]:ft}),errors:i({[t.meta.methodId]:_t}),statuses:i({[t.meta.methodId]:vt})})(e,t):e}function ft(e=pt,t){switch(t.type){case lt.InitializeButtonSucceeded:return t.meta&&t.meta.containerId?nt(e,{initializedContainers:{[t.meta.containerId]:!0}}):e;case lt.DeinitializeButtonSucceeded:return Fe(e,\"initializedContainers\",{})}return e}function _t(e=gt,t){switch(t.type){case lt.InitializeButtonRequested:case lt.InitializeButtonSucceeded:return Fe(e,\"initializeError\",void 0);case lt.InitializeButtonFailed:return Fe(e,\"initializeError\",t.payload);case lt.DeinitializeButtonRequested:case lt.DeinitializeButtonSucceeded:return Fe(e,\"deinitializeError\",void 0);case lt.DeinitializeButtonFailed:return Fe(e,\"deinitializeError\",t.payload);default:return e}}function vt(e=mt,t){switch(t.type){case lt.InitializeButtonRequested:return Fe(e,\"isInitializing\",!0);case lt.InitializeButtonFailed:case lt.InitializeButtonSucceeded:return Fe(e,\"isInitializing\",!1);case lt.DeinitializeButtonRequested:return Fe(e,\"isDeinitializing\",!0);case lt.DeinitializeButtonFailed:case lt.DeinitializeButtonSucceeded:return Fe(e,\"isDeinitializing\",!1);default:return e}}var St;!function(e){e.LoadConfigRequested=\"LOAD_CONFIG_REQUESTED\",e.LoadConfigSucceeded=\"LOAD_CONFIG_SUCCEEDED\",e.LoadConfigFailed=\"LOAD_CONFIG_FAILED\"}(St||(St={}));const Ct={meta:{},errors:{},statuses:{}};function It(e=Ct,t){return i({data:wt,errors:r(bt,ze),statuses:Et})(e,t)}function wt(e,t){var n,i;switch(t.type){case St.LoadConfigSucceeded:return nt(e,t.payload);case He.HydrateInitialState:{const r=nt(e,null===(n=t.payload)||void 0===n?void 0:n.config);return r&&(null===(i=t.payload)||void 0===i?void 0:i.b2bApiSettings)?Object.assign(Object.assign({},r),{storeConfig:Object.assign(Object.assign({},r.storeConfig),{b2bApiSettings:t.payload.b2bApiSettings})}):r}default:return e}}function bt(e=Ct.errors,t){switch(t.type){case St.LoadConfigSucceeded:return Fe(e,\"loadError\",void 0);case St.LoadConfigFailed:return Fe(e,\"loadError\",t.payload);default:return e}}function Et(e=Ct.statuses,t){switch(t.type){case St.LoadConfigRequested:return Fe(e,\"isLoading\",!0);case St.LoadConfigSucceeded:case St.LoadConfigFailed:return Fe(e,\"isLoading\",!1);default:return e}}var Pt;!function(e){e.LoadOrderRequested=\"LOAD_ORDER_REQUESTED\",e.LoadOrderSucceeded=\"LOAD_ORDER_SUCCEEDED\",e.LoadOrderFailed=\"LOAD_ORDER_FAILED\",e.LoadOrderPaymentsRequested=\"LOAD_ORDER_PAYMENTS_REQUESTED\",e.LoadOrderPaymentsSucceeded=\"LOAD_ORDER_PAYMENTS_SUCCEEDED\",e.LoadOrderPaymentsFailed=\"LOAD_ORDER_PAYMENTS_FAILED\",e.SubmitOrderRequested=\"SUBMIT_ORDER_REQUESTED\",e.SubmitOrderSucceeded=\"SUBMIT_ORDER_SUCCEEDED\",e.SubmitOrderFailed=\"SUBMIT_ORDER_FAILED\",e.FinalizeOrderRequested=\"FINALIZE_ORDER_REQUESTED\",e.FinalizeOrderSucceeded=\"FINALIZE_ORDER_SUCCEEDED\",e.FinalizeOrderFailed=\"FINALIZE_ORDER_FAILED\"}(Pt||(Pt={}));const Ot={errors:{},statuses:{}};function At(e=Ot,t){return i({data:Tt,errors:r(kt,ze),statuses:Rt})(e,t)}function Tt(e,t){var n,i;switch(t.type){case Ve.LoadCheckoutSucceeded:case it.ApplyCouponSucceeded:case ot.UpdateShippingOptionSucceeded:case it.RemoveCouponSucceeded:case Pt.LoadOrderSucceeded:return tt(e,t.payload&&t.payload.coupons);case He.HydrateInitialState:return tt(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.coupons);default:return e}}function kt(e={},t){switch(t.type){case it.ApplyCouponRequested:case it.ApplyCouponSucceeded:return Fe(e,\"applyCouponError\",void 0);case it.ApplyCouponFailed:return Fe(e,\"applyCouponError\",t.payload);case it.RemoveCouponRequested:case it.RemoveCouponSucceeded:return Fe(e,\"removeCouponError\",void 0);case it.RemoveCouponFailed:return Fe(e,\"removeCouponError\",t.payload);default:return e}}function Rt(e={},t){switch(t.type){case it.ApplyCouponRequested:return Fe(e,\"isApplyingCoupon\",!0);case it.ApplyCouponSucceeded:case it.ApplyCouponFailed:return Fe(e,\"isApplyingCoupon\",!1);case it.RemoveCouponRequested:return Fe(e,\"isRemovingCoupon\",!0);case it.RemoveCouponSucceeded:case it.RemoveCouponFailed:return Fe(e,\"isRemovingCoupon\",!1);default:return e}}const Dt={errors:{},statuses:{}};function Mt(e=Dt,t){return i({data:Nt,errors:r(Lt,ze),statuses:zt})(e,t)}function Nt(e,t){var n,i;switch(t.type){case Ve.LoadCheckoutSucceeded:case ot.CreateConsignmentsSucceeded:case ot.UpdateConsignmentSucceeded:case ot.DeleteConsignmentSucceeded:case ot.UpdateShippingOptionSucceeded:case it.ApplyCouponSucceeded:case it.RemoveCouponSucceeded:case rt.ApplyGiftCertificateSucceeded:case rt.RemoveGiftCertificateSucceeded:return tt(e,t.payload&&t.payload.giftCertificates);case He.HydrateInitialState:return tt(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.giftCertificates);default:return e}}function Lt(e=Dt.errors,t){switch(t.type){case rt.ApplyGiftCertificateRequested:case rt.ApplyGiftCertificateSucceeded:return Fe(e,\"applyGiftCertificateError\",void 0);case rt.ApplyGiftCertificateFailed:return Fe(e,\"applyGiftCertificateError\",t.payload);case rt.RemoveGiftCertificateRequested:case rt.RemoveGiftCertificateSucceeded:return Fe(e,\"removeGiftCertificateError\",void 0);case rt.RemoveGiftCertificateFailed:return Fe(e,\"removeGiftCertificateError\",t.payload);default:return e}}function zt(e=Dt.statuses,t){switch(t.type){case rt.ApplyGiftCertificateRequested:return Fe(e,\"isApplyingGiftCertificate\",!0);case rt.ApplyGiftCertificateSucceeded:case rt.ApplyGiftCertificateFailed:return Fe(e,\"isApplyingGiftCertificate\",!1);case rt.RemoveGiftCertificateRequested:return Fe(e,\"isRemovingGiftCertificate\",!0);case rt.RemoveGiftCertificateSucceeded:case rt.RemoveGiftCertificateFailed:return Fe(e,\"isRemovingGiftCertificate\",!1);default:return e}}var Ut;!function(e){e.SignInCustomerRequested=\"SIGN_IN_CUSTOMER_REQUESTED\",e.SignInCustomerSucceeded=\"SIGN_IN_CUSTOMER_SUCCEEDED\",e.SignInCustomerFailed=\"SIGN_IN_CUSTOMER_FAILED\",e.SignOutCustomerRequested=\"SIGN_OUT_CUSTOMER_REQUESTED\",e.SignOutCustomerSucceeded=\"SIGN_OUT_CUSTOMER_SUCCEEDED\",e.SignOutCustomerFailed=\"SIGN_OUT_CUSTOMER_FAILED\",e.CreateCustomerRequested=\"CREATE_CUSTOMER_REQUESTED\",e.CreateCustomerSucceeded=\"CREATE_CUSTOMER_SUCCEEDED\",e.CreateCustomerFailed=\"CREATE_CUSTOMER_FAILED\",e.CreateCustomerAddressRequested=\"CREATE_CUSTOMER_ADDRESS_REQUESTED\",e.CreateCustomerAddressSucceeded=\"CREATE_CUSTOMER_ADDRESS_SUCCEEDED\",e.CreateCustomerAddressFailed=\"CREATE_CUSTOMER_ADDRESS_FAILED\",e.StripeLinkAuthenticated=\"STRIPE_LINK_AUTHENTICATED\"}(Ut||(Ut={}));const Ft={errors:{},statuses:{}};function Bt(e=Ft,t){return i({data:xt,errors:r(qt,ze),statuses:jt})(e,t)}function xt(e,t){var n,i;switch(t.type){case Ye.ContinueAsGuestSucceeded:case Ve.LoadCheckoutSucceeded:return nt(e,t.payload&&t.payload.customer);case Ut.CreateCustomerAddressSucceeded:return nt(e,t.payload);case He.HydrateInitialState:return nt(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.customer);default:return e}}function qt(e=Ft.errors,t){switch(t.type){case Ut.CreateCustomerRequested:case Ut.CreateCustomerSucceeded:return Fe(e,\"createError\",void 0);case Ut.CreateCustomerFailed:return Fe(e,\"createError\",t.payload);case Ut.CreateCustomerAddressRequested:case Ut.CreateCustomerAddressSucceeded:return Fe(e,\"createAddressError\",void 0);case Ut.CreateCustomerAddressFailed:return Fe(e,\"createAddressError\",t.payload);default:return e}}function jt(e=Ft.statuses,t){switch(t.type){case Ut.CreateCustomerRequested:return Fe(e,\"isCreating\",!0);case Ut.CreateCustomerFailed:case Ut.CreateCustomerSucceeded:return Fe(e,\"isCreating\",!1);case Ut.CreateCustomerAddressRequested:return Fe(e,\"isCreatingAddress\",!0);case Ut.CreateCustomerAddressFailed:case Ut.CreateCustomerAddressSucceeded:return Fe(e,\"isCreatingAddress\",!1);default:return e}}var Gt;!function(e){e.SignInFailed=\"CUSTOMER_STRATEGY_SIGN_IN_FAILED\",e.SignInRequested=\"CUSTOMER_STRATEGY_SIGN_IN_REQUESTED\",e.SignInSucceeded=\"CUSTOMER_STRATEGY_SIGN_IN_SUCCEEDED\",e.SignOutFailed=\"CUSTOMER_STRATEGY_SIGN_OUT_FAILED\",e.SignOutRequested=\"CUSTOMER_STRATEGY_SIGN_OUT_REQUESTED\",e.SignOutSucceeded=\"CUSTOMER_STRATEGY_SIGN_OUT_SUCCEEDED\",e.ExecutePaymentMethodCheckoutFailed=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_FAILED\",e.ExecutePaymentMethodCheckoutRequested=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_REQUESTED\",e.ExecutePaymentMethodCheckoutSucceeded=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_SUCCEEDED\",e.InitializeFailed=\"CUSTOMER_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"CUSTOMER_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"CUSTOMER_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"CUSTOMER_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"CUSTOMER_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"CUSTOMER_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_FAILED\"}(Gt||(Gt={}));const Vt={data:{},errors:{},statuses:{}};function Ht(e=Vt,t){return i({data:Wt,errors:r(Yt,ze),statuses:Kt})(e,t)}function Wt(e=Vt.data,t){switch(t.type){case Gt.InitializeSucceeded:return nt(e,{[t.meta&&t.meta.methodId]:{isInitialized:!0}});case Gt.DeinitializeSucceeded:return nt(e,{[t.meta&&t.meta.methodId]:{isInitialized:!1}})}return e}function Yt(e=Vt.errors,t){switch(t.type){case Gt.InitializeRequested:case Gt.InitializeSucceeded:return nt(e,{initializeErrors:Object.assign({},e.initializeErrors),initializeMethodId:e.initializeMethodId?e.initializeMethodId:void 0});case Gt.InitializeFailed:return nt(e,{initializeErrors:Object.assign(Object.assign({},e.initializeErrors),{[t.meta&&t.meta.methodId]:t.payload}),initializeMethodId:t.meta&&t.meta.methodId});case Gt.DeinitializeRequested:case Gt.DeinitializeSucceeded:return nt(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case Gt.DeinitializeFailed:return nt(e,{deinitializeError:t.payload,deinitializeMethodId:t.meta&&t.meta.methodId});case Gt.SignInRequested:case Gt.SignInSucceeded:return nt(e,{signInError:void 0,signInMethodId:void 0});case Gt.SignInFailed:return nt(e,{signInError:t.payload,signInMethodId:t.meta&&t.meta.methodId});case Gt.SignOutRequested:case Gt.SignOutSucceeded:return nt(e,{signOutError:void 0,signOutMethodId:void 0});case Gt.SignOutFailed:return nt(e,{signOutError:t.payload,signOutMethodId:t.meta&&t.meta.methodId});case Gt.ExecutePaymentMethodCheckoutRequested:case Gt.ExecutePaymentMethodCheckoutSucceeded:return nt(e,{executePaymentMethodCheckoutError:void 0,executePaymentMethodCheckoutMethodId:void 0});case Gt.ExecutePaymentMethodCheckoutFailed:return nt(e,{executePaymentMethodCheckoutError:t.payload,executePaymentMethodCheckoutMethodId:t.meta&&t.meta.methodId});case Gt.WidgetInteractionStarted:case Gt.WidgetInteractionFinished:return nt(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case Gt.WidgetInteractionFailed:return nt(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta.methodId});default:return e}}function Kt(e=Vt.statuses,t){switch(t.type){case Gt.InitializeRequested:return nt(e,{isInitializing:!0,initializeMethodId:t.meta&&t.meta.methodId});case Gt.InitializeFailed:case Gt.InitializeSucceeded:return nt(e,{isInitializing:!1,initializeMethodId:void 0});case Gt.DeinitializeRequested:return nt(e,{isDeinitializing:!0,deinitializeMethodId:t.meta&&t.meta.methodId});case Gt.DeinitializeFailed:case Gt.DeinitializeSucceeded:return nt(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case Gt.SignInRequested:return nt(e,{isSigningIn:!0,signInMethodId:t.meta&&t.meta.methodId});case Gt.SignInFailed:case Gt.SignInSucceeded:return nt(e,{isSigningIn:!1,signInMethodId:void 0});case Gt.SignOutRequested:return nt(e,{isSigningOut:!0,signOutMethodId:t.meta&&t.meta.methodId});case Gt.SignOutFailed:case Gt.SignOutSucceeded:return nt(e,{isSigningOut:!1,signOutMethodId:void 0});case Gt.ExecutePaymentMethodCheckoutRequested:return nt(e,{isExecutingPaymentMethodCheckout:!0,executePaymentMethodCheckoutMethodId:t.meta&&t.meta.methodId});case Gt.ExecutePaymentMethodCheckoutFailed:case Gt.ExecutePaymentMethodCheckoutSucceeded:return nt(e,{isExecutingPaymentMethodCheckout:!1,executePaymentMethodCheckoutMethodId:void 0});case Gt.WidgetInteractionStarted:return nt(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta.methodId});case Gt.WidgetInteractionFinished:case Gt.WidgetInteractionFailed:return nt(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}var $t;!function(e){e.LoadExtensionsRequested=\"LOAD_EXTENSIONS_REQUESTED\",e.LoadExtensionsSucceeded=\"LOAD_EXTENSIONS_SUCCEEDED\",e.LoadExtensionsFailed=\"LOAD_EXTENSIONS_FAILED\",e.RenderExtensionRequested=\"RENDER_EXTENSION_REQUESTED\",e.RenderExtensionSucceeded=\"RENDER_EXTENSION_SUCCEEDED\",e.RenderExtensionFailed=\"RENDER_EXTENSION_FAILED\"}($t||($t={}));const Zt={errors:{},statuses:{}};function Jt(e=Zt,t){return i({data:Qt,errors:r(Xt,ze),statuses:en})(e,t)}function Qt(e,t){var n;return t.type===$t.LoadExtensionsSucceeded?tt(e,t.payload):t.type===He.HydrateInitialState?tt(e,null===(n=t.payload)||void 0===n?void 0:n.extensions):e}function Xt(e=Zt.errors,t){switch(t.type){case $t.LoadExtensionsRequested:case $t.LoadExtensionsSucceeded:return Fe(e,\"loadError\",void 0);case $t.RenderExtensionRequested:case $t.RenderExtensionSucceeded:return Fe(e,\"renderError\",void 0);case $t.LoadExtensionsFailed:return Fe(e,\"loadError\",t.payload);case $t.RenderExtensionFailed:return Fe(e,\"renderError\",t.payload);default:return e}}function en(e=Zt.statuses,t){switch(t.type){case $t.LoadExtensionsRequested:return Fe(e,\"isLoading\",!0);case $t.LoadExtensionsSucceeded:case $t.LoadExtensionsFailed:return Fe(e,\"isLoading\",!1);default:return e}}var tn;!function(e){e.LoadFormFieldsRequested=\"LOAD_FORM_FIELDS_REQUESTED\",e.LoadFormFieldsSucceeded=\"LOAD_FORM_FIELDS_SUCCEEDED\",e.LoadFormFieldsFailed=\"LOAD_FORM_FIELDS_FAILED\"}(tn||(tn={}));const nn={errors:{},statuses:{}};function rn(e=nn,t){return i({data:on,extraFields:an,errors:r(sn,ze),statuses:dn})(e,t)}function on(e,t){var n;switch(t.type){case tn.LoadFormFieldsSucceeded:return nt(e,t.payload);case He.HydrateInitialState:return nt(e,null===(n=t.payload)||void 0===n?void 0:n.formFields);default:return e}}function an(e,t){var n,i;return t.type===He.HydrateInitialState&&null!==(i=null===(n=t.payload)||void 0===n?void 0:n.extraFields)&&void 0!==i?i:e}function sn(e=nn.errors,t){switch(t.type){case tn.LoadFormFieldsSucceeded:return Fe(e,\"loadError\",void 0);case tn.LoadFormFieldsFailed:return Fe(e,\"loadError\",t.payload);default:return e}}function dn(e=nn.statuses,t){switch(t.type){case tn.LoadFormFieldsRequested:return Fe(e,\"isLoading\",!0);case tn.LoadFormFieldsSucceeded:case tn.LoadFormFieldsFailed:return Fe(e,\"isLoading\",!1);default:return e}}var cn;!function(e){e.LoadCountriesRequested=\"LOAD_COUNTRIES_REQUESTED\",e.LoadCountriesSucceeded=\"LOAD_COUNTRIES_SUCCEEDED\",e.LoadCountriesFailed=\"LOAD_COUNTRIES_FAILED\"}(cn||(cn={}));const un={errors:{},statuses:{}};function ln(e=un,t){return i({data:hn,errors:r(pn,ze),statuses:gn})(e,t)}function hn(e,t){return t.type===cn.LoadCountriesSucceeded?tt(e,t.payload):e}function pn(e=un.errors,t){switch(t.type){case cn.LoadCountriesRequested:case cn.LoadCountriesSucceeded:return Fe(e,\"loadError\",void 0);case cn.LoadCountriesFailed:return Fe(e,\"loadError\",t.payload);default:return e}}function gn(e=un.statuses,t){switch(t.type){case cn.LoadCountriesRequested:return Fe(e,\"isLoading\",!0);case cn.LoadCountriesSucceeded:case cn.LoadCountriesFailed:return Fe(e,\"isLoading\",!1);default:return e}}const mn={errors:{},meta:{},statuses:{}};function yn(e=mn,t){return i({data:fn,errors:r(vn,ze),meta:_n,statuses:Sn})(e,t)}function fn(e,t){switch(t.type){case Pt.LoadOrderSucceeded:case Pt.LoadOrderPaymentsSucceeded:return nt(e,k(t.payload,[\"billingAddress\",\"coupons\"]));default:return e}}function _n(e,t){switch(t.type){case Pt.FinalizeOrderSucceeded:case Pt.SubmitOrderSucceeded:return nt(e,Object.assign(Object.assign({},t.meta),{callbackUrl:t.payload&&t.payload.order.callbackUrl,orderToken:t.payload&&t.payload.order.token,payment:t.payload&&t.payload.order&&t.payload.order.payment}));default:return e}}function vn(e=mn.errors,t){switch(t.type){case Pt.LoadOrderRequested:case Pt.LoadOrderSucceeded:case Pt.LoadOrderPaymentsSucceeded:case Pt.LoadOrderPaymentsRequested:return Fe(e,\"loadError\",void 0);case Pt.LoadOrderFailed:case Pt.LoadOrderPaymentsFailed:return Fe(e,\"loadError\",t.payload);default:return e}}function Sn(e=mn.statuses,t){switch(t.type){case Pt.LoadOrderRequested:case Pt.LoadOrderPaymentsRequested:return Fe(e,\"isLoading\",!0);case Pt.LoadOrderSucceeded:case Pt.LoadOrderFailed:case Pt.LoadOrderPaymentsSucceeded:case Pt.LoadOrderPaymentsFailed:return Fe(e,\"isLoading\",!1);default:return e}}const Cn={};function In(e=Cn,t){return i({data:wn})(e,t)}function wn(e,t){switch(t.type){case Pt.LoadOrderPaymentsSucceeded:case Pt.LoadOrderSucceeded:return Ke(e,t.payload&&t.payload.billingAddress);default:return e}}var bn,En;function Pn(e={},t){return i({data:On})(e,t)}function On(e,t){return t.type===bn.SubmitPaymentSucceeded?t.payload:e}!function(e){e.SubmitPaymentRequested=\"SUBMIT_PAYMENT_REQUESTED\",e.SubmitPaymentSucceeded=\"SUBMIT_PAYMENT_SUCCEEDED\",e.SubmitPaymentFailed=\"SUBMIT_PAYMENT_FAILED\",e.InitializeOffsitePaymentRequested=\"INITIALIZE_OFFSITE_PAYMENT_REQUESTED\",e.InitializeOffsitePaymentSucceeded=\"INITIALIZE_OFFSITE_PAYMENT_SUCCEEDED\",e.InitializeOffsitePaymentFailed=\"INITIALIZE_OFFSITE_PAYMENT_FAILED\"}(bn||(bn={})),function(e){e.LoadPaymentMethodRequested=\"LOAD_PAYMENT_METHOD_REQUESTED\",e.LoadPaymentMethodSucceeded=\"LOAD_PAYMENT_METHOD_SUCCEEDED\",e.LoadPaymentMethodFailed=\"LOAD_PAYMENT_METHOD_FAILED\",e.LoadPaymentMethodsRequested=\"LOAD_PAYMENT_METHODS_REQUESTED\",e.LoadPaymentMethodsSucceeded=\"LOAD_PAYMENT_METHODS_SUCCEEDED\",e.LoadPaymentMethodsFailed=\"LOAD_PAYMENT_METHODS_FAILED\"}(En||(En={}));const An={errors:{},statuses:{}};function Tn(e=An,t){return i({data:kn,errors:r(Dn,ze),meta:Rn,statuses:Mn})(e,t)}function kn(e,t){switch(t.type){case En.LoadPaymentMethodSucceeded:return function(e,t,n){if(!t)return e;const i=D(t,\"id\"),r=\"object\"==typeof n?M(n):n||i,o=h(e,r),a=[...e];if(-1===o)a.push(t);else{const n=e[o];a[o]=et(n)&&et(t)?nt(n,t):t}return a}(e||[],t.payload,t.payload&&{id:t.payload.id,gateway:t.payload.gateway});case En.LoadPaymentMethodsSucceeded:return tt(e,t.payload,{matchObject:(e,t)=>e.id===t.id&&e.gateway===t.gateway});default:return e}}function Rn(e,t){return t.type===En.LoadPaymentMethodsSucceeded?nt(e,t.meta):e}function Dn(e=An.errors,t){switch(t.type){case En.LoadPaymentMethodsRequested:case En.LoadPaymentMethodsSucceeded:return Fe(e,\"loadError\",void 0);case En.LoadPaymentMethodsFailed:return Fe(e,\"loadError\",t.payload);case En.LoadPaymentMethodRequested:case En.LoadPaymentMethodSucceeded:return nt(e,{loadMethodId:void 0,loadMethodError:void 0});case En.LoadPaymentMethodFailed:return nt(e,{loadMethodId:t.meta.methodId,loadMethodError:t.payload});default:return e}}function Mn(e=An.statuses,t){switch(t.type){case En.LoadPaymentMethodsRequested:return Fe(e,\"isLoading\",!0);case En.LoadPaymentMethodsSucceeded:case En.LoadPaymentMethodsFailed:return Fe(e,\"isLoading\",!1);case En.LoadPaymentMethodRequested:return nt(e,{isLoadingMethod:!0,loadMethodId:t.meta.methodId});case En.LoadPaymentMethodSucceeded:case En.LoadPaymentMethodFailed:return nt(e,{isLoadingMethod:!1,loadMethodId:void 0});default:return e}}var Nn;!function(e){e.ExecuteFailed=\"PAYMENT_STRATEGY_EXECUTE_FAILED\",e.ExecuteRequested=\"PAYMENT_STRATEGY_EXECUTE_REQUESTED\",e.ExecuteSucceeded=\"PAYMENT_STRATEGY_EXECUTE_SUCCEEDED\",e.FinalizeFailed=\"PAYMENT_STRATEGY_FINALIZE_FAILED\",e.FinalizeRequested=\"PAYMENT_STRATEGY_FINALIZE_REQUESTED\",e.FinalizeSucceeded=\"PAYMENT_STRATEGY_FINALIZE_SUCCEEDED\",e.InitializeFailed=\"PAYMENT_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"PAYMENT_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"PAYMENT_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"PAYMENT_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"PAYMENT_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"PAYMENT_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_FAILED\"}(Nn||(Nn={}));const Ln={data:{},errors:{},statuses:{}};function zn(e=Ln,t){return i({data:Un,errors:r(Fn,ze),statuses:Bn})(e,t)}function Un(e=Ln.data,t){switch(t.type){case Nn.InitializeSucceeded:if(t.meta){const{methodId:n,gatewayId:i}=t.meta,r=i?`${n}.${i}`:n;return nt(e,{[r]:{isInitialized:!0}})}break;case Nn.DeinitializeSucceeded:if(t.meta){const{methodId:n,gatewayId:i}=t.meta,r=i?`${n}.${i}`:n;return nt(e,{[r]:{isInitialized:!1}})}}return e}function Fn(e=Ln.errors,t){switch(t.type){case Nn.InitializeRequested:case Nn.InitializeSucceeded:return nt(e,{initializeError:void 0,initializeMethodId:void 0});case Nn.InitializeFailed:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return nt(e,{initializeError:t.payload,initializeMethodId:n})}case Nn.DeinitializeRequested:case Nn.DeinitializeSucceeded:return nt(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case Nn.DeinitializeFailed:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return nt(e,{deinitializeError:t.payload,deinitializeMethodId:n})}case Nn.ExecuteRequested:case Nn.ExecuteSucceeded:return nt(e,{executeError:void 0,executeMethodId:void 0});case Nn.ExecuteFailed:return nt(e,{executeError:t.payload,executeMethodId:t.meta&&t.meta.methodId});case Nn.FinalizeRequested:case Nn.FinalizeSucceeded:return nt(e,{finalizeError:void 0,finalizeMethodId:void 0});case Nn.FinalizeFailed:return nt(e,{finalizeError:t.payload,finalizeMethodId:t.meta&&t.meta.methodId});case Nn.WidgetInteractionStarted:case Nn.WidgetInteractionFinished:return nt(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case Nn.WidgetInteractionFailed:return nt(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta.methodId});default:return e}}function Bn(e=Ln.statuses,t){switch(t.type){case Nn.InitializeRequested:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return nt(e,{isInitializing:!0,initializeMethodId:n})}case Nn.InitializeFailed:case Nn.InitializeSucceeded:return nt(e,{isInitializing:!1,initializeMethodId:void 0});case Nn.DeinitializeRequested:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return nt(e,{isDeinitializing:!0,deinitializeMethodId:n})}case Nn.DeinitializeFailed:case Nn.DeinitializeSucceeded:return nt(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case Nn.ExecuteRequested:return nt(e,{isExecuting:!0,executeMethodId:t.meta&&t.meta.methodId});case Nn.ExecuteFailed:case Nn.ExecuteSucceeded:return nt(e,{isExecuting:!1,executeMethodId:void 0});case Nn.FinalizeRequested:return nt(e,{isFinalizing:!0,finalizeMethodId:t.meta&&t.meta.methodId});case Nn.FinalizeFailed:case Nn.FinalizeSucceeded:return nt(e,{isFinalizing:!1,finalizeMethodId:void 0});case Nn.WidgetInteractionStarted:return nt(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta.methodId});case Nn.WidgetInteractionFinished:case Nn.WidgetInteractionFailed:return nt(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}var xn;!function(e){e.UpdatePaymentProviderCustomer=\"UPDATE_PAYMENT_PROVIDER_CUSTOMER\"}(xn||(xn={}));const qn={data:{}};function jn(e=qn,t){return i({data:Gn})(e,t)}function Gn(e=qn.data,t){return t.type===xn.UpdatePaymentProviderCustomer?nt(e,t.payload):e}var Vn;!function(e){e.LoadInstrumentsRequested=\"LOAD_INSTRUMENTS_REQUESTED\",e.LoadInstrumentsSucceeded=\"LOAD_INSTRUMENTS_SUCCEEDED\",e.LoadInstrumentsFailed=\"LOAD_INSTRUMENTS_FAILED\",e.DeleteInstrumentRequested=\"DELETE_INSTRUMENT_REQUESTED\",e.DeleteInstrumentSucceeded=\"DELETE_INSTRUMENT_SUCCEEDED\",e.DeleteInstrumentFailed=\"DELETE_INSTRUMENT_FAILED\"}(Vn||(Vn={}));const Hn={data:[],errors:{},statuses:{}};function Wn(e=Hn,t){return i({data:Yn,errors:r($n,ze),meta:Kn,statuses:Zn})(e,t)}function Yn(e=Hn.data,t){return t.type===Vn.LoadInstrumentsSucceeded?tt(e,t.payload&&t.payload.vaultedInstruments||[]):e}function Kn(e,t){switch(t.type){case Vn.LoadInstrumentsSucceeded:case Vn.DeleteInstrumentSucceeded:return nt(e,t.meta);default:return e}}function $n(e=Hn.errors,t){switch(t.type){case Vn.LoadInstrumentsRequested:case Vn.LoadInstrumentsSucceeded:return Fe(e,\"loadError\",void 0);case Vn.DeleteInstrumentRequested:case Vn.DeleteInstrumentSucceeded:return nt(e,{deleteError:void 0,failedInstrument:void 0});case Vn.LoadInstrumentsFailed:return Fe(e,\"loadError\",t.payload);case Vn.DeleteInstrumentFailed:return nt(e,{deleteError:t.payload,failedInstrument:t.meta.instrumentId});default:return e}}function Zn(e=Hn.statuses,t){switch(t.type){case Vn.LoadInstrumentsRequested:return Fe(e,\"isLoading\",!0);case Vn.DeleteInstrumentRequested:return nt(e,{isDeleting:!0,deletingInstrument:t.meta.instrumentId});case Vn.LoadInstrumentsSucceeded:case Vn.LoadInstrumentsFailed:return Fe(e,\"isLoading\",!1);case Vn.DeleteInstrumentSucceeded:case Vn.DeleteInstrumentFailed:return nt(e,{isDeleting:!1,deletingInstrument:void 0});default:return e}}var Jn;!function(e){e.ForgetCheckoutRemoteCustomerRequested=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_REQUESTED\",e.ForgetCheckoutRemoteCustomerSucceeded=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_SUCCEEDED\",e.ForgetCheckoutRemoteCustomerFailed=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_FAILED\",e.InitializeRemoteBillingRequested=\"INITIALIZE_REMOTE_BILLING_REQUESTED\",e.InitializeRemoteBillingSucceeded=\"INITIALIZE_REMOTE_BILLING_SUCCEEDED\",e.InitializeRemoteBillingFailed=\"INITIALIZE_REMOTE_BILLING_FAILED\",e.InitializeRemoteShippingRequested=\"INITIALIZE_REMOTE_SHIPPING_REQUESTED\",e.InitializeRemoteShippingSucceeded=\"INITIALIZE_REMOTE_SHIPPING_SUCCEEDED\",e.InitializeRemoteShippingFailed=\"INITIALIZE_REMOTE_SHIPPING_FAILED\",e.InitializeRemotePaymentRequested=\"INITIALIZE_REMOTE_PAYMENT_REQUESTED\",e.InitializeRemotePaymentSucceeded=\"INITIALIZE_REMOTE_PAYMENT_SUCCEEDED\",e.InitializeRemotePaymentFailed=\"INITIALIZE_REMOTE_PAYMENT_FAILED\",e.LoadRemoteSettingsRequested=\"LOAD_REMOTE_SETTINGS_REQUESTED\",e.LoadRemoteSettingsSucceeded=\"LOAD_REMOTE_SETTINGS_SUCCEEDED\",e.LoadRemoteSettingsFailed=\"LOAD_REMOTE_SETTINGS_FAILED\",e.SignOutRemoteCustomerRequested=\"SIGN_OUT_REMOTE_CUSTOMER_REQUESTED\",e.SignOutRemoteCustomerSucceeded=\"SIGN_OUT_REMOTE_CUSTOMER_SUCCEEDED\",e.SignOutRemoteCustomerFailed=\"SIGN_OUT_REMOTE_CUSTOMER_FAILED\",e.UpdateRemoteCheckout=\"UPDATE_REMOTE_CHECKOUT\"}(Jn||(Jn={}));const Qn={data:{}};function Xn(e=Qn,t){return t.meta&&t.meta.methodId?i({data:i({[t.meta.methodId]:ei})})(e,t):e}function ei(e,t){switch(t.type){case Jn.InitializeRemoteBillingSucceeded:return Fe(e,\"billing\",t.payload&&t.payload.billing);case Jn.InitializeRemoteShippingSucceeded:return Fe(e,\"shipping\",t.payload&&t.payload.shipping);case Jn.LoadRemoteSettingsSucceeded:return Fe(e,\"settings\",t.payload);case Jn.UpdateRemoteCheckout:return nt(e,t.payload);default:return e}}const ti={errors:{updateShippingOptionError:{},updateError:{},deleteError:{}},statuses:{isUpdating:{},isUpdatingShippingOption:{},isDeleting:{}}};function ni(e=ti,t){return i({data:ii,errors:r(ri,ze),statuses:oi})(e,t)}function ii(e,t){var n,i;switch(t.type){case Ve.LoadCheckoutSucceeded:case ot.LoadShippingOptionsSucceeded:case ot.CreateConsignmentsSucceeded:case ot.UpdateConsignmentSucceeded:case ot.DeleteConsignmentSucceeded:case ot.UpdateShippingOptionSucceeded:case it.ApplyCouponSucceeded:case it.RemoveCouponSucceeded:return tt(e,t.payload&&t.payload.consignments);case Ut.SignOutCustomerSucceeded:return tt(e,[]);case He.HydrateInitialState:return tt(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.consignments);default:return e}}function ri(e=ti.errors,t){switch(t.type){case Ve.LoadCheckoutRequested:case Ve.LoadCheckoutSucceeded:case ot.LoadShippingOptionsSucceeded:case ot.LoadShippingOptionsRequested:return Fe(e,\"loadError\",void 0);case Ve.LoadCheckoutFailed:case ot.LoadShippingOptionsFailed:return Fe(e,\"loadError\",t.payload);case ot.CreateConsignmentsRequested:case ot.CreateConsignmentsSucceeded:return Fe(e,\"createError\",void 0);case ot.CreateConsignmentsFailed:return Fe(e,\"createError\",t.payload);case ot.UpdateConsignmentSucceeded:case ot.UpdateConsignmentRequested:return t.meta?nt(e,{updateError:{[t.meta.id]:void 0}}):e;case ot.UpdateConsignmentFailed:return t.meta?nt(e,{updateError:{[t.meta.id]:t.payload}}):e;case ot.DeleteConsignmentSucceeded:case ot.DeleteConsignmentRequested:return t.meta?nt(e,{deleteError:{[t.meta.id]:void 0}}):e;case ot.DeleteConsignmentFailed:return t.meta?nt(e,{deleteError:{[t.meta.id]:t.payload}}):e;case ot.UpdateShippingOptionRequested:case ot.UpdateShippingOptionSucceeded:return t.meta?nt(e,{updateShippingOptionError:{[t.meta.id]:void 0}}):e;case ot.UpdateShippingOptionFailed:return t.meta?nt(e,{updateShippingOptionError:{[t.meta.id]:t.payload}}):e;default:return e}}function oi(e=ti.statuses,t){switch(t.type){case Ve.LoadCheckoutRequested:return Fe(e,\"isLoading\",!0);case ot.LoadShippingOptionsRequested:return Fe(e,\"isLoadingShippingOptions\",!0);case Ve.LoadCheckoutSucceeded:case Ve.LoadCheckoutFailed:return Fe(e,\"isLoading\",!1);case ot.LoadShippingOptionsSucceeded:case ot.LoadShippingOptionsFailed:return Fe(e,\"isLoadingShippingOptions\",!1);case ot.CreateConsignmentsRequested:return Fe(e,\"isCreating\",!0);case ot.CreateConsignmentsSucceeded:case ot.CreateConsignmentsFailed:return Fe(e,\"isCreating\",!1);case ot.UpdateConsignmentRequested:return t.meta?nt(e,{isUpdating:{[t.meta.id]:!0}}):e;case ot.UpdateConsignmentSucceeded:case ot.UpdateConsignmentFailed:return t.meta?nt(e,{isUpdating:{[t.meta.id]:!1}}):e;case ot.DeleteConsignmentRequested:return t.meta?nt(e,{isDeleting:{[t.meta.id]:!0}}):e;case ot.DeleteConsignmentSucceeded:case ot.DeleteConsignmentFailed:return t.meta?nt(e,{isDeleting:{[t.meta.id]:!1}}):e;case ot.UpdateShippingOptionRequested:return t.meta?nt(e,{isUpdatingShippingOption:{[t.meta.id]:!0}}):e;case ot.UpdateShippingOptionSucceeded:case ot.UpdateShippingOptionFailed:return t.meta?nt(e,{isUpdatingShippingOption:{[t.meta.id]:!1}}):e;default:return e}}function ai(e,t){const n={};return Object.keys(e).forEach(i=>{const r=e[i],o=t?`${t}.${i}`:i;\"object\"==typeof r?Object.assign(n,ai(r,o)):n[o]=r}),n}function si(e){return Object.keys(e).sort().reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:e[n]}),{})}var di;!function(e){e.LoadPickupOptionsRequested=\"LOAD_PICKUP_OPTIONS_REQUESTED\",e.LoadPickupOptionsSucceeded=\"LOAD_PICKUP_OPTIONS_SUCCEEDED\",e.LoadPickupOptionsFailed=\"LOAD_PICKUP_OPTIONS_FAILED\"}(di||(di={}));const ci={errors:{},statuses:{}};function ui(e=ci,t){return i({data:li,errors:r(hi,ze),statuses:pi})(e,t)}function li(e,t){if(t.type!==di.LoadPickupOptionsSucceeded)return e;if(t.meta){const n=si(ai({consignmentId:t.meta.consignmentId,searchArea:t.meta.searchArea}));return Fe(e,btoa(`${JSON.stringify(n)}`),t.payload)}}function hi(e=ci.errors,t){switch(t.type){case di.LoadPickupOptionsRequested:case di.LoadPickupOptionsSucceeded:return Fe(e,\"loadError\",void 0);case di.LoadPickupOptionsFailed:return Fe(e,\"loadError\",t.payload);default:return e}}function pi(e=ci.statuses,t){switch(t.type){case di.LoadPickupOptionsRequested:return Fe(e,\"isLoading\",!0);case di.LoadPickupOptionsSucceeded:case di.LoadPickupOptionsFailed:return Fe(e,\"isLoading\",!1);default:return e}}var gi;!function(e){e.LoadShippingCountriesRequested=\"LOAD_SHIPPING_COUNTRIES_REQUESTED\",e.LoadShippingCountriesSucceeded=\"LOAD_SHIPPING_COUNTRIES_SUCCEEDED\",e.LoadShippingCountriesFailed=\"LOAD_SHIPPING_COUNTRIES_FAILED\"}(gi||(gi={}));const mi={errors:{},statuses:{}};function yi(e=mi,t){return i({data:fi,errors:r(_i,ze),statuses:vi})(e,t)}function fi(e,t){return t.type===gi.LoadShippingCountriesSucceeded?tt(e,t.payload):e}function _i(e=mi.errors,t){switch(t.type){case gi.LoadShippingCountriesRequested:case gi.LoadShippingCountriesSucceeded:return Fe(e,\"loadError\",void 0);case gi.LoadShippingCountriesFailed:return Fe(e,\"loadError\",t.payload);default:return e}}function vi(e=mi.statuses,t){switch(t.type){case gi.LoadShippingCountriesRequested:return Fe(e,\"isLoading\",!0);case gi.LoadShippingCountriesSucceeded:case gi.LoadShippingCountriesFailed:return Fe(e,\"isLoading\",!1);default:return e}}var Si;!function(e){e.UpdateAddressFailed=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_FAILED\",e.UpdateAddressRequested=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_REQUESTED\",e.UpdateAddressSucceeded=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_SUCCEEDED\",e.SelectOptionFailed=\"SHIPPING_STRATEGY_SELECT_OPTION_FAILED\",e.SelectOptionRequested=\"SHIPPING_STRATEGY_SELECT_OPTION_REQUESTED\",e.SelectOptionSucceeded=\"SHIPPING_STRATEGY_SELECT_OPTION_SUCCEEDED\",e.InitializeFailed=\"SHIPPING_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"SHIPPING_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"SHIPPING_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"SHIPPING_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"SHIPPING_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"SHIPPING_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_FAILED\"}(Si||(Si={}));const Ci={data:{},errors:{},statuses:{}};function Ii(e=Ci,t){return i({data:wi,errors:r(bi,ze),statuses:Ei})(e,t)}function wi(e=Ci.data,t){switch(t.type){case Si.InitializeSucceeded:return nt(e,{[t.meta&&t.meta.methodId]:{isInitialized:!0}});case Si.DeinitializeSucceeded:return nt(e,{[t.meta&&t.meta.methodId]:{isInitialized:!1}})}return e}function bi(e=Ci.errors,t){switch(t.type){case Si.InitializeRequested:case Si.InitializeSucceeded:return nt(e,{initializeError:void 0,initializeMethodId:void 0});case Si.InitializeFailed:return nt(e,{initializeError:t.payload,initializeMethodId:t.meta&&t.meta.methodId});case Si.DeinitializeRequested:case Si.DeinitializeSucceeded:return nt(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case Si.DeinitializeFailed:return nt(e,{deinitializeError:t.payload,deinitializeMethodId:t.meta&&t.meta.methodId});case Si.UpdateAddressRequested:case Si.UpdateAddressSucceeded:return nt(e,{updateAddressError:void 0,updateAddressMethodId:void 0});case Si.UpdateAddressFailed:return nt(e,{updateAddressError:t.payload,updateAddressMethodId:t.meta&&t.meta.methodId});case Si.SelectOptionRequested:case Si.SelectOptionSucceeded:return nt(e,{selectOptionError:void 0,selectOptionMethodId:void 0});case Si.SelectOptionFailed:return nt(e,{selectOptionError:t.payload,selectOptionMethodId:t.meta&&t.meta.methodId});case Si.WidgetInteractionStarted:case Si.WidgetInteractionFinished:return nt(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case Si.WidgetInteractionFailed:return nt(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta&&t.meta.methodId});default:return e}}function Ei(e=Ci.statuses,t){switch(t.type){case Si.InitializeRequested:return nt(e,{isInitializing:!0,initializeMethodId:t.meta&&t.meta.methodId});case Si.InitializeFailed:case Si.InitializeSucceeded:return nt(e,{isInitializing:!1,initializeMethodId:void 0});case Si.DeinitializeRequested:return nt(e,{isDeinitializing:!0,deinitializeMethodId:t.meta&&t.meta.methodId});case Si.DeinitializeFailed:case Si.DeinitializeSucceeded:return nt(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case Si.UpdateAddressRequested:return nt(e,{isUpdatingAddress:!0,updateAddressMethodId:t.meta&&t.meta.methodId});case Si.UpdateAddressFailed:case Si.UpdateAddressSucceeded:return nt(e,{isUpdatingAddress:!1,updateAddressMethodId:void 0});case Si.SelectOptionRequested:return nt(e,{isSelectingOption:!0,selectOptionMethodId:t.meta&&t.meta.methodId});case Si.SelectOptionFailed:case Si.SelectOptionSucceeded:return nt(e,{isSelectingOption:!1,selectOptionMethodId:void 0});case Si.WidgetInteractionStarted:return nt(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta&&t.meta.methodId});case Si.WidgetInteractionFinished:case Si.WidgetInteractionFailed:return nt(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}var Pi;!function(e){e.SendSignInEmailRequested=\"SEND_SIGNIN_EMAIL_REQUESTED\",e.SendSignInEmailSucceeded=\"SEND_SIGNIN_EMAIL_SUCCEEDED\",e.SendSignInEmailFailed=\"SEND_SIGNIN_EMAIL_FAILED\"}(Pi||(Pi={}));const Oi={errors:{},statuses:{}};function Ai(e=Oi,t){return i({data:Ti,errors:r(ki,ze),statuses:Ri})(e,t)}function Ti(e,t){return t.type===Pi.SendSignInEmailSucceeded?nt(e,t.payload):e}function ki(e=Oi.errors,t){switch(t.type){case Pi.SendSignInEmailRequested:case Pi.SendSignInEmailSucceeded:return Fe(e,\"sendError\",void 0);case Pi.SendSignInEmailFailed:return Fe(e,\"sendError\",t.payload);default:return e}}function Ri(e=Oi.statuses,t){switch(t.type){case Pi.SendSignInEmailRequested:return Fe(e,\"isSending\",!0);case Pi.SendSignInEmailFailed:case Pi.SendSignInEmailSucceeded:return Fe(e,\"isSending\",!1);default:return e}}var Di;!function(e){e.ApplyStoreCreditRequested=\"APPLY_STORE_CREDIT_REQUESTED\",e.ApplyStoreCreditSucceeded=\"APPLY_STORE_CREDIT_SUCCEEDED\",e.ApplyStoreCreditFailed=\"APPLY_STORE_CREDIT_FAILED\"}(Di||(Di={}));const Mi={errors:{},statuses:{}};function Ni(e=Mi,t){return i({errors:r(Li,ze),statuses:zi})(e,t)}function Li(e=Mi.errors,t){switch(t.type){case Di.ApplyStoreCreditRequested:case Di.ApplyStoreCreditSucceeded:return Fe(e,\"applyError\",void 0);case Di.ApplyStoreCreditFailed:return Fe(e,\"applyError\",t.payload);default:return e}}function zi(e=Mi.statuses,t){switch(t.type){case Di.ApplyStoreCreditRequested:return Fe(e,\"isApplying\",!0);case Di.ApplyStoreCreditSucceeded:case Di.ApplyStoreCreditFailed:return Fe(e,\"isApplying\",!1);default:return e}}const Ui={errors:{},statuses:{}};function Fi(e=Ui,t){return i({errors:r(Bi,ze),statuses:xi})(e,t)}function Bi(e=Ui.errors,t){switch(t.type){case We.UpdateSubscriptionsRequested:case We.UpdateSubscriptionsSucceeded:return Fe(e,\"updateError\",void 0);case We.UpdateSubscriptionsFailed:return Fe(e,\"updateError\",t.payload);default:return e}}function xi(e=Ui.statuses,t){switch(t.type){case We.UpdateSubscriptionsRequested:return Fe(e,\"isUpdating\",!0);case We.UpdateSubscriptionsFailed:case We.UpdateSubscriptionsSucceeded:return Fe(e,\"isUpdating\",!1);default:return e}}var qi;!function(e){e.InitializeFailed=\"SPAM_PROTECTION_INITIALIZE_FAILED\",e.InitializeSucceeded=\"SPAM_PROTECTION_INITIALIZE_SUCCEEDED\",e.InitializeRequested=\"SPAM_PROTECTION_INITIALIZE_REQUESTED\",e.VerifyCheckoutRequested=\"SPAM_PROTECTION_CHECKOUT_VERIFY_REQUESTED\",e.VerifyCheckoutSucceeded=\"SPAM_PROTECTION_CHECKOUT_VERIFY_SUCCEEDED\",e.VerifyCheckoutFailed=\"SPAM_PROTECTION_CHECKOUT_VERIFY_FAILED\",e.ExecuteRequested=\"SPAM_PROTECTION_EXECUTE_REQUESTED\",e.ExecuteSucceeded=\"SPAM_PROTECTION_EXECUTE_SUCCEEDED\",e.ExecuteFailed=\"SPAM_PROTECTION_EXECUTE_FAILED\"}(qi||(qi={}));const ji={errors:{},statuses:{}};function Gi(e=ji,t){return i({data:Vi,errors:r(Hi,ze),statuses:Wi})(e,t)}function Vi(e,t){var n;switch(t.type){case Ve.LoadCheckoutSucceeded:case Ve.UpdateCheckoutSucceeded:case Di.ApplyStoreCreditSucceeded:case Ye.UpdateBillingAddressSucceeded:case it.ApplyCouponSucceeded:case it.RemoveCouponSucceeded:case ot.CreateConsignmentsSucceeded:case ot.UpdateConsignmentSucceeded:case ot.DeleteConsignmentSucceeded:case ot.UpdateShippingOptionSucceeded:case ot.LoadShippingOptionsSucceeded:case rt.ApplyGiftCertificateSucceeded:case rt.RemoveGiftCertificateSucceeded:case qi.VerifyCheckoutSucceeded:return nt(e,k(t.payload,[\"billingAddress\",\"cart\",\"consignments\",\"customer\",\"coupons\",\"giftCertificates\"]));case Pt.SubmitOrderSucceeded:return Fe(e,\"orderId\",t.payload&&t.payload.order.orderId);case He.HydrateInitialState:return nt(e,k(null===(n=t.payload)||void 0===n?void 0:n.checkout,[\"billingAddress\",\"cart\",\"consignments\",\"customer\",\"coupons\",\"giftCertificates\"]));default:return e}}function Hi(e=ji.errors,t){switch(t.type){case Ve.LoadCheckoutRequested:case Ve.LoadCheckoutSucceeded:return Fe(e,\"loadError\",void 0);case Ve.LoadCheckoutFailed:return Fe(e,\"loadError\",t.payload);case Ve.UpdateCheckoutRequested:case Ve.UpdateCheckoutSucceeded:return Fe(e,\"updateError\",void 0);case Ve.UpdateCheckoutFailed:return Fe(e,\"updateError\",t.payload);default:return e}}function Wi(e=ji.statuses,t){switch(t.type){case Ve.LoadCheckoutRequested:return Fe(e,\"isLoading\",!0);case Ve.LoadCheckoutFailed:case Ve.LoadCheckoutSucceeded:return Fe(e,\"isLoading\",!1);case Ve.UpdateCheckoutRequested:return Fe(e,\"isUpdating\",!0);case Ve.UpdateCheckoutFailed:case Ve.UpdateCheckoutSucceeded:return Fe(e,\"isUpdating\",!1);case qi.ExecuteRequested:return Fe(e,\"isExecutingSpamCheck\",!0);case qi.ExecuteFailed:case qi.ExecuteSucceeded:return Fe(e,\"isExecutingSpamCheck\",!1);default:return e}}const Yi=(Ki=de,(...e)=>{const t=e.pop();return Ki(...e,(...e)=>{const n=t(...e);return\"function\"==typeof n?ae(n):n})});var Ki,$i;!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentProviderCustomer=13]=\"MissingPaymentProviderCustomer\",e[e.MissingPaymentRedirectUrl=14]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=15]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=16]=\"MissingPaymentToken\",e[e.MissingShippingAddress=17]=\"MissingShippingAddress\"}($i||($i={}));class Zi extends be{constructor(e){super(function(e){switch(e){case $i.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case $i.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case $i.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case $i.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case $i.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case $i.MissingCheckoutConfig:case $i.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case $i.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case $i.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case $i.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case $i.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case $i.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case $i.MissingPaymentProviderCustomer:return\"Unable to proceed because payment provider customer is unavailable.\";case $i.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function Ji(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}function Qi(e){return function(e){const t=Object.create(e);return function(e,t){let n=Object.getPrototypeOf(e);for(;n;)t(n),n=Object.getPrototypeOf(n)}(e,n=>{Object.getOwnPropertyNames(n).forEach(n=>{\"constructor\"!==n&&\"function\"==typeof t[n]&&\"_\"!==n.charAt(0)&&(t[n]=((e,t)=>(...n)=>d(e[t].call(e,...n)))(e,n))})}),t}(e)}const Xi=\"b2bExtraField_\";function er(e){var t;const{fieldType:n,type:i}=function(e){switch(e){case\"multiline_text\":return{fieldType:\"multiline\",type:\"string\"};case\"number\":return{fieldType:\"text\",type:\"integer\"};case\"dropdown\":return{fieldType:\"dropdown\",type:\"array\"};default:return{fieldType:\"text\",type:\"string\"}}}(e.type);let r;return e.config.numberOfRows&&(r={rows:e.config.numberOfRows}),(null===(t=e.config.options)||void 0===t?void 0:t.length)&&(r=Object.assign(Object.assign({},r),{items:e.config.options.map(e=>({value:e,label:e}))})),{id:`${Xi}${e.id}`,name:`${Xi}${e.id}`,custom:!1,label:e.name,hidden:!e.visibleToStorefront,required:e.isRequired,default:null!=e.config.defaultValue?String(e.config.defaultValue):void 0,fieldType:n,type:i,maxLength:e.config.maxLength,max:e.config.maxValue,options:r}}const tr={\"mollie.credit_card\":{provider:\"mollie\",method:\"credit_card\"},\"adyenv2.scheme\":{provider:\"adyenv2\",method:\"scheme\"},\"adyenv3.scheme\":{provider:\"adyenv3\",method:\"scheme\"},\"adyenv2.bcmc\":{provider:\"adyenv2\",method:\"bcmc\"},\"adyenv2.ideal\":{provider:\"adyenv2\",method:\"ideal\"},\"adyenv2.sepadirectdebit\":{provider:\"adyenv2\",method:\"sepadirectdebit\"},\"adyenv2.directEbanking\":{provider:\"adyenv2\",method:\"directEbanking\"},\"adyenv2.giropay\":{provider:\"adyenv2\",method:\"giropay\"},braintree:{provider:\"braintree\",method:\"credit_card\"},braintreepaypal:{provider:\"braintree\",method:\"paypal\"},braintreeach:{provider:\"braintree\",method:\"ach\"},authorizenet:{provider:\"authorizenet\",method:\"credit_card\"},elavon:{provider:\"elavon\",method:\"credit_card\"},checkoutcom:{provider:\"checkoutcom\",method:\"credit_card\"},\"checkoutcom.credit_card\":{provider:\"checkoutcom\",method:\"credit_card\"},\"checkoutcom.card\":{provider:\"checkoutcom\",method:\"card\"},sagepay:{provider:\"sagepay\",method:\"credit_card\"},stripe:{provider:\"stripe\",method:\"credit_card\"},\"stripev3.card\":{provider:\"stripev3\",method:\"card\"},\"stripeupe.card\":{provider:\"stripeupe\",method:\"card\"},cybersource:{provider:\"cybersource\",method:\"credit_card\"},cybersourcev2:{provider:\"cybersourcev2\",method:\"credit_card\"},bnz:{provider:\"bnz\",method:\"credit_card\"},converge:{provider:\"converge\",method:\"credit_card\"},bluesnapv2:{provider:\"bluesnapv2\",method:\"credit_card\"},\"bluesnapdirect.credit_card\":{provider:\"bluesnapdirect\",method:\"credit_card\"},\"bluesnapdirect.ecp\":{provider:\"bluesnapdirect\",method:\"ecp\"},\"bluesnapdirect.sepa_direct_debit\":{provider:\"bluesnapdirect\",method:\"sepa_direct_debit\"},orbital:{provider:\"orbital\",method:\"credit_card\"},paymetric:{provider:\"paymetric\",method:\"credit_card\"},bolt:{provider:\"bolt\",method:\"credit_card\"},\"barclaycard.credit_card\":{provider:\"barclaycard\",method:\"credit_card\"},moneris:{provider:\"moneris\",method:\"credit_card\"},cba_mpgs:{provider:\"cba_mpgs\",method:\"credit_card\"},worldpayaccess:{provider:\"worldpayaccess\",method:\"credit_card\"},\"worldpayaccess.credit_card\":{provider:\"worldpayaccess\",method:\"credit_card\"},squarev2:{provider:\"squarev2\",method:\"credit_card\"},paypalcommercecreditcards:{provider:\"paypalcommerce\",method:\"credit_card\"},paypalcommerce:{provider:\"paypalcommerce\",method:\"paypal\"},bigcommerce_payments_creditcards:{provider:\"bigcommerce_payments\",method:\"credit_card\"},bigcommerce_payments:{provider:\"bigcommerce_payments\",method:\"paypal\"},tdonlinemart:{provider:\"tdonlinemart\",method:\"credit_card\"}};function nr(e){return M({firstName:e.firstName,lastName:e.lastName,company:e.company,address1:e.address1,address2:e.address2,city:e.city,stateOrProvince:e.stateOrProvince,countryCode:e.countryCode,postalCode:e.postalCode,phone:e.phone,customFields:e.customFields},g)}const ir={errors:{},statuses:{}};function rr(){const e=function(){const e=Yi(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.token},e=>()=>e),t=Yi(e=>e.errors.loadError,e=>()=>e),n=Yi(e=>!!e.statuses.isLoading,e=>()=>e);return se((i=Be)=>({getToken:e(i),getLoadError:t(i),isLoading:n(i)}))}(),t=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e,e=>()=>Ji(e(),()=>new Zi($i.MissingBillingAddress))),n=Yi(e=>e.errors.updateError,e=>()=>e),i=Yi(e=>e.errors.continueAsGuestError,e=>()=>e),r=Yi(e=>e.errors.loadError,e=>()=>e),o=Yi(e=>!!e.statuses.isUpdating,e=>()=>e),a=Yi(e=>!!e.statuses.isContinuingAsGuest,e=>()=>e),s=Yi(e=>!!e.statuses.isLoading,e=>()=>e);return se((d=$e)=>({getBillingAddress:e(d),getBillingAddressOrThrow:t(d),getUpdateError:n(d),getContinueAsGuestError:i(d),getLoadError:r(d),isUpdating:o(d),isContinuingAsGuest:a(d),isLoading:s(d)}))}(),n=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e,e=>()=>Ji(e(),()=>new Zi($i.MissingCart))),n=Yi(e=>e.errors.loadError,e=>()=>e),i=Yi(e=>!!e.statuses.isLoading,e=>()=>e),r=Yi(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.locale},e=>()=>e);return se((o=at)=>({getCart:e(o),getCartOrThrow:t(o),getLoadError:n(o),isLoading:i(o),getLocale:r(o)}))}(),i=function(){const e=Yi(e=>e,e=>()=>e),t=Yi(e=>e.statuses,e=>ae(t=>{if(t){const n=e[t];return!0===(n&&n.isInitializing)}return z(e,{isInitializing:!0})})),n=Yi(e=>e.data,e=>ae((t,n)=>{const i=e[t];return!!i&&(n?!0===i.initializedContainers[n]:z(i.initializedContainers,e=>!0===e))})),i=Yi(e=>e.statuses,e=>ae(t=>{if(t){const n=e[t];return!0===(n&&n.isDeinitializing)}return z(e,{isDeinitializing:!0})})),r=Yi(e=>e.errors,e=>ae(t=>{const n=t?e[t]:l(x(e),e=>!(!e||!e.initializeError));return n&&n.initializeError})),o=Yi(e=>e.errors,e=>ae(t=>{const n=t?e[t]:l(x(e),e=>!(!e||!e.deinitializeError));return n&&n.deinitializeError}));return se((a=ht)=>({getState:e(a),isInitializing:t(a),isInitialized:n(a),isDeinitializing:i(a),getInitializeError:r(a),getDeinitializeError:o(a)}))}(),r=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e=>e.data,e=>t=>{if(!e)return;const{flashMessages:n}=e.context;return n?void 0!==t?n.filter(({type:e})=>t===e):n:void 0}),n=Yi(e=>e.data,(e,{formState:t})=>t&&t.data,(e,t={customerAccount:[],shippingAddress:[],billingAddress:[]})=>()=>e?Object.assign(Object.assign({},e.storeConfig),{formFields:t}):void 0),i=Yi(n,e=>()=>Ji(e(),()=>new Zi($i.MissingCheckoutConfig))),r=Yi(e=>e.data&&e.data.context,e=>()=>e),o=Yi(e=>e.meta&&e.meta.externalSource,e=>()=>e),a=Yi(e=>{var t;return null===(t=e.meta)||void 0===t?void 0:t.host},e=>()=>e),s=Yi(e=>{var t;return null===(t=e.meta)||void 0===t?void 0:t.locale},e=>()=>e),d=Yi(e=>e.meta&&e.meta.variantIdentificationToken,e=>()=>e),c=Yi(e=>e.errors.loadError,e=>()=>e),u=Yi(e=>!!e.statuses.isLoading,e=>()=>e);return se((l=Ct,h)=>({getConfig:e(l),getFlashMessages:t(l),getStoreConfig:n(l,{formState:h}),getStoreConfigOrThrow:i(l,{formState:h}),getContextConfig:r(l),getExternalSource:o(l),getHost:a(l),getLocale:s(l),getVariantIdentificationToken:d(l),getLoadError:c(l),isLoading:u(l)}))}(),o=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e=>e.errors.loadError,e=>()=>e),n=Yi(e=>!!e.statuses.isLoading,e=>()=>e);return se((i=un)=>({getCountries:e(i),getLoadError:t(i),isLoading:n(i)}))}(),a=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e=>e.errors.removeCouponError,e=>()=>e),n=Yi(e=>e.errors.applyCouponError,e=>()=>e),i=Yi(e=>!!e.statuses.isApplyingCoupon,e=>()=>e),r=Yi(e=>!!e.statuses.isRemovingCoupon,e=>()=>e);return se((o=Ot)=>({getCoupons:e(o),getRemoveError:t(o),getApplyError:n(o),isApplying:i(o),isRemoving:r(o)}))}(),s=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e,e=>()=>Ji(e(),()=>new Zi($i.MissingCustomer))),n=Yi(e=>e.errors.createError,e=>()=>e),i=Yi(e=>!!e.statuses.isCreating,e=>()=>e),r=Yi(e=>e.errors.createAddressError,e=>()=>e),o=Yi(e=>!!e.statuses.isCreatingAddress,e=>()=>e);return se((a=Ft)=>({getCustomer:e(a),getCustomerOrThrow:t(a),getCreateAccountError:n(a),isCreatingCustomerAccount:i(a),getCreateAddressError:r(a),isCreatingCustomerAddress:o(a)}))}(),d=function(){const e=Yi(e=>e.errors.signInMethodId,e=>e.errors.signInError,(e,t)=>n=>{if(!n||e===n)return t}),t=Yi(e=>e.errors.signOutMethodId,e=>e.errors.signOutError,(e,t)=>n=>{if(!n||e===n)return t}),n=Yi(e=>e.errors.executePaymentMethodCheckoutMethodId,e=>e.errors.executePaymentMethodCheckoutError,(e,t)=>n=>{if(!n||e===n)return t}),i=Yi(e=>e.errors.initializeMethodId,e=>e.errors.initializeErrors,(e,t)=>n=>{if(e&&t)return n?t[n]:t[e]}),r=Yi(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),o=Yi(e=>e.statuses.signInMethodId,e=>e.statuses.isSigningIn,(e,t)=>n=>!(n&&e!==n||!t)),a=Yi(e=>e.statuses.signOutMethodId,e=>e.statuses.isSigningOut,(e,t)=>n=>!(n&&e!==n||!t)),s=Yi(e=>e.statuses.executePaymentMethodCheckoutMethodId,e=>e.statuses.isExecutingPaymentMethodCheckout,(e,t)=>n=>!(n&&e!==n||!t)),d=Yi(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),c=Yi(e=>e.data,e=>t=>!(!e[t]||!e[t].isInitialized)),u=Yi(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return se((l=Vt)=>({getSignInError:e(l),getSignOutError:t(l),getExecutePaymentMethodCheckoutError:n(l),getInitializeError:i(l),getWidgetInteractionError:r(l),isSigningIn:o(l),isSigningOut:a(l),isExecutingPaymentMethodCheckout:s(l),isInitializing:d(l),isInitialized:c(l),isWidgetInteracting:u(l)}))}(),c=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e=>e.errors.removeGiftCertificateError,e=>()=>e),n=Yi(e=>e.errors.applyGiftCertificateError,e=>()=>e),i=Yi(e=>!!e.statuses.isApplyingGiftCertificate,e=>()=>e),r=Yi(e=>!!e.statuses.isRemovingGiftCertificate,e=>()=>e);return se((o=Dt)=>({getGiftCertificates:e(o),getRemoveError:t(o),getApplyError:n(o),isApplying:i(o),isRemoving:r(o)}))}(),h=function(){const e=Yi(e=>e.data,e=>t=>{if(!e)return;const n=t.gateway?`${t.gateway}.${t.id}`:t.id,i=tr[n];return i?u(e,i):[]}),t=Yi(e=>e.data,(e=[])=>t=>{const n=x(tr);return e.find(e=>e.bigpayToken===t&&\"card\"===e.type&&n.some(t=>v(e,t)))}),n=Yi(t,e=>t=>Ji(e(t),()=>new Zi($i.MissingPaymentInstrument))),i=Yi(e=>e.data,e=>()=>{if(e)return p(tr,t=>u(e,e=>v(e,t)))}),r=Yi(e=>e.meta,e=>()=>e),o=Yi(e=>e.errors.loadError,e=>()=>e),a=Yi(e=>e.errors.failedInstrument,e=>e.errors.deleteError,(e,t)=>n=>{if(!n||e===n)return t}),s=Yi(e=>e.statuses.isLoading,e=>()=>!!e),d=Yi(e=>e.statuses.deletingInstrument,e=>e.statuses.isDeleting,(e,t)=>n=>!(n&&e!==n||!t));return se((c=Hn)=>({getCardInstrument:t(c),getCardInstrumentOrThrow:n(c),getInstruments:i(c),getInstrumentsByPaymentMethod:e(c),getInstrumentsMeta:r(c),getLoadError:o(c),getDeleteError:a(c),isLoading:s(c),isDeleting:d(c)}))}(),g=function(){const e=Yi(e=>e.data,e=>(t=[],n)=>{const i=l(t,{code:n});return(e?e.shippingAddress:[]).map(e=>s(e,t,i))}),t=Yi(e=>e.data,e=>(t=[],n)=>{const i=l(t,{code:n});return(e?e.billingAddress:[]).map(e=>s(e,t,i))}),n=Yi(e=>e.data,e=>()=>e?e.customerAccount:[]),i=Yi(e=>e.extraFields,e=>()=>e&&e.address.length?e.address.map(er):[]),r=Yi(e=>e.extraFields,e=>()=>e&&e.order.length?e.order.map(er):[]),o=Yi(e=>e.errors.loadError,e=>()=>e),a=Yi(e=>!!e.statuses.isLoading,e=>()=>e);function s(e,t,n){return\"countryCode\"===e.name?function(e,t=[],n){if(!t.length)return e;const{code:i=\"\"}=n||{},r=t.map(({code:e,name:t})=>({value:e,label:t}));return Object.assign(Object.assign({},e),{options:{items:r},default:i,type:\"array\",fieldType:\"dropdown\",itemtype:\"string\"})}(e,t,n):\"stateOrProvince\"===e.name?function(e,t){const{subdivisions:n=[],requiresState:i}=t||{};if(!n.length)return Object.assign(Object.assign({},e),{required:null!=i&&i});const r=n.map(({code:e,name:t})=>({value:e,label:t}));return Object.assign(Object.assign({},e),{name:\"stateOrProvinceCode\",options:{items:r},required:null==i||i,type:\"array\",fieldType:\"dropdown\",itemtype:\"string\"})}(e,n):\"postalCode\"===e.name?function(e,t){const{hasPostalCodes:n=[]}=t||{};return void 0===n?e:Object.assign(Object.assign({},e),{required:Boolean(n)})}(e,n):e}return se((s=nn)=>({getShippingAddressFields:e(s),getBillingAddressFields:t(s),getCustomerAccountFields:n(s),getAddressExtraFields:i(s),getOrderExtraFields:r(s),getLoadError:o(s),isLoading:a(s)}))}(),m=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e=>e.meta,e=>()=>e),n=Yi(e=>e.data,e=>(t,n)=>l(e,n?{id:t,gateway:n}:{id:t})),i=Yi(n,e=>(t,n)=>Ji(e(t,n),()=>new Zi($i.MissingPaymentMethod))),r=Yi(e=>e.errors.loadError,e=>()=>e),o=Yi(e=>e.errors.loadMethodId,e=>e.errors.loadMethodError,(e,t)=>n=>{if(!n||e===n)return t}),a=Yi(e=>e.statuses.isLoading,e=>()=>!!e),s=Yi(e=>e.statuses.loadMethodId,e=>e.statuses.isLoadingMethod,(e,t)=>n=>!(n&&e!==n||!t));return se((d=An)=>({getPaymentMethods:e(d),getPaymentMethodsMeta:t(d),getPaymentMethod:n(d),getPaymentMethodOrThrow:i(d),getLoadError:r(d),getLoadMethodError:o(d),isLoading:a(d),isLoadingMethod:s(d)}))}(),y=function(){const e=Yi(e=>e.errors.initializeMethodId,e=>e.errors.initializeError,(e,t)=>n=>{if(!n||e===n)return t}),t=Yi(e=>e.errors.executeMethodId,e=>e.errors.executeError,(e,t)=>n=>{if(!n||e===n)return t}),n=Yi(e=>e.errors.finalizeMethodId,e=>e.errors.finalizeError,(e,t)=>n=>{if(!n||e===n)return t}),i=Yi(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),r=Yi(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),o=Yi(e=>e.data,e=>t=>{const n=t.gatewayId?`${t.methodId}.${t.gatewayId}`:t.methodId;return!(!e[n]||!e[n].isInitialized)}),a=Yi(e=>e.statuses.executeMethodId,e=>e.statuses.isExecuting,(e,t)=>n=>!(n&&e!==n||!t)),s=Yi(e=>e.statuses.finalizeMethodId,e=>e.statuses.isFinalizing,(e,t)=>n=>!(n&&e!==n||!t)),d=Yi(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return se((c=Ln)=>({getInitializeError:e(c),getExecuteError:t(c),getFinalizeError:n(c),getWidgetInteractingError:i(c),isInitializing:r(c),isInitialized:o(c),isExecuting:a(c),isFinalizing:s(c),isWidgetInteracting:d(c)}))}(),f=function(){const e=Yi(e=>e.data,e=>(t,n)=>{if(!e)return;const i=si(ai({consignmentId:t,searchArea:n})),r=btoa(`${JSON.stringify(i)}`);return e[r]}),t=Yi(e=>e.errors.loadError,e=>()=>e),n=Yi(e=>!!e.statuses.isLoading,e=>()=>e);return se((i=ci)=>({getPickupOptions:e(i),getLoadError:t(i),isLoading:n(i)}))}(),S=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e,e=>()=>Ji(e(),()=>new Zi($i.MissingPaymentProviderCustomer)));return se((n=qn)=>({getPaymentProviderCustomer:e(n),getPaymentProviderCustomerOrThrow:t(n)}))}(),C=function(){const e=Yi(e=>e.data,e=>t=>e[t]);return se((t=Qn)=>({getCheckout:e(t)}))}(),I=function(){const e=Yi(e=>e.data,e=>()=>{const t=null==e?void 0:e.find(e=>!e.selectedPickupOption);return null==t?void 0:t.shippingAddress}),t=Yi(e,e=>()=>Ji(e(),()=>new Zi($i.MissingShippingAddress))),n=Yi(e=>e.data,e=>()=>{const t=null==e?void 0:e.filter(e=>!e.selectedPickupOption);return t?t.map(e=>e.shippingAddress):[]}),i=Yi(n,e=>()=>Ji(e(),()=>new Zi($i.MissingShippingAddress)));return se((r=ti)=>({getShippingAddress:e(r),getShippingAddressOrThrow:t(r),getShippingAddresses:n(r),getShippingAddressesOrThrow:i(r)}))}(),w=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e=>e.errors.loadError,e=>()=>e),n=Yi(e=>e.statuses.isLoading,e=>()=>!!e);return se((i=mi)=>({getShippingCountries:e(i),getLoadError:t(i),isLoading:n(i)}))}(),b=function(){const e=Yi(e=>e.errors.updateAddressMethodId,e=>e.errors.updateAddressError,(e,t)=>n=>{if(!n||e===n)return t}),t=Yi(e=>e.errors.selectOptionMethodId,e=>e.errors.selectOptionError,(e,t)=>n=>{if(!n||e===n)return t}),n=Yi(e=>e.errors.initializeMethodId,e=>e.errors.initializeError,(e,t)=>n=>{if(!n||e===n)return t}),i=Yi(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),r=Yi(e=>e.statuses.updateAddressMethodId,e=>e.statuses.isUpdatingAddress,(e,t)=>n=>!(n&&e!==n||!t)),o=Yi(e=>e.statuses.selectOptionMethodId,e=>e.statuses.isSelectingOption,(e,t)=>n=>!(n&&e!==n||!t)),a=Yi(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),s=Yi(e=>e.data,e=>t=>!(!e[t]||!e[t].isInitialized)),d=Yi(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return se((c=Ci)=>({getUpdateAddressError:e(c),getSelectOptionError:t(c),getInitializeError:n(c),getWidgetInteractionError:i(c),isUpdatingAddress:r(c),isSelectingOption:o(c),isInitializing:a(c),isInitialized:s(c),isWidgetInteracting:d(c)}))}(),E=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e,e=>()=>Ji(e(),()=>new Zi($i.MissingConsignments))),n=Yi(e=>e.data,e=>t=>{if(e&&e.length)return l(e,{id:t})}),i=Yi(e=>e.data,e=>t=>{if(e&&e.length)return l(e,e=>{return n=e.shippingAddress,i=t,_(nr(n),nr(i));var n,i})}),r=Yi(e=>e.data,e=>()=>{if(e&&e.length)return e[0].selectedShippingOption}),o=Yi(e=>e.errors.loadError,e=>()=>e),a=Yi(e=>e.errors.createError,e=>()=>e),s=Yi(e=>e.errors.loadShippingOptionsError,e=>()=>e),d=Yi(e,(e,{cart:t})=>t.getCart,(e,t)=>()=>{const n=t();if(!n)return[];const i=(e()||[]).reduce((e,t)=>e.concat(t.lineItemIds),[]);return(n.lineItems.physicalItems||[]).filter(e=>i.indexOf(e.id)<0)}),c=Yi(e=>e.errors.updateError,e=>t=>t?e[t]:l(e)),u=Yi(e=>e.errors.deleteError,e=>t=>t?e[t]:l(e)),h=Yi(i,c,a,(e,t,n)=>i=>{const r=e(i);return r?t(r.id):n()}),p=Yi(e=>e.errors.updateShippingOptionError,e=>t=>t?e[t]:l(e)),g=Yi(e=>e.statuses.isLoading,e=>()=>!0===e),m=Yi(e=>e.statuses.isLoadingShippingOptions,e=>()=>!0===e),y=Yi(e=>e.statuses.isCreating,e=>()=>!0===e),f=Yi(e=>e.statuses.isUpdating,e=>t=>t?!0===e[t]:!0===l(e)),v=Yi(e=>e.statuses.isDeleting,e=>t=>t?!0===e[t]:!0===l(e)),S=Yi(i,f,y,(e,t,n)=>i=>{const r=e(i);return r?t(r.id):n()}),C=Yi(e=>e.statuses.isUpdatingShippingOption,e=>t=>t?!0===e[t]:!0===l(e));return se((l=ti,_)=>({getConsignments:e(l),getConsignmentsOrThrow:t(l),getConsignmentById:n(l),getConsignmentByAddress:i(l),getShippingOption:r(l),getLoadError:o(l),getCreateError:a(l),getLoadShippingOptionsError:s(l),getUnassignedItems:d(l,{cart:_}),getUpdateError:c(l),getDeleteError:u(l),getItemAssignmentError:h(l),getUpdateShippingOptionError:p(l),isLoading:g(l),isLoadingShippingOptions:m(l),isCreating:y(l),isUpdating:f(l),isDeleting:v(l),isAssigningItems:S(l),isUpdatingShippingOption:C(l)}))}(),P=function(){const e=Yi(e=>e.data,(e,{billingAddress:t})=>t.getBillingAddress,(e,{cart:t})=>t.getCart,(e,{customer:t})=>t.getCustomer,(e,{consignments:t})=>t.getConsignments,(e,{coupons:t})=>t.getCoupons,(e,{giftCertificates:t})=>t.getGiftCertificates,(e,t,n,i,r,o,a)=>()=>{const s=t(),d=n(),c=i(),u=r()||[],l=o()||[],h=a()||[];if(e&&d&&c)return Object.assign(Object.assign({},e),{billingAddress:s,cart:d,customer:c,consignments:u,coupons:l,giftCertificates:h})}),t=Yi(e,e=>()=>Ji(e(),()=>new Zi($i.MissingCheckout))),n=Yi(e,e=>t=>{const n=e();if(!n)return;const i=n.grandTotal||0,r=n.customer.storeCredit||0;return t?Math.max(i-r,0):n.outstandingBalance}),i=Yi(e=>e.errors.loadError,e=>()=>e),r=Yi(e=>e.errors.updateError,e=>()=>e),o=Yi(e=>e.statuses.isExecutingSpamCheck,e=>()=>!0===e),a=Yi(e=>e.statuses.isLoading,e=>()=>!0===e),s=Yi(e=>e.statuses.isUpdating,e=>()=>!0===e);return se((d=ji,c,u,l,h,p,g)=>({getCheckout:e(d,{billingAddress:c,cart:u,consignments:l,coupons:h,customer:p,giftCertificates:g}),getCheckoutOrThrow:t(d,{billingAddress:c,cart:u,consignments:l,coupons:h,customer:p,giftCertificates:g}),getOutstandingBalance:n(d,{billingAddress:c,cart:u,consignments:l,coupons:h,customer:p,giftCertificates:g}),getLoadError:i(d),getUpdateError:r(d),isExecutingSpamCheck:o(d),isLoading:a(d),isUpdating:s(d)}))}(),O=function(){const e=Yi(e=>e.data,(e,{billingAddress:t})=>t.getOrderBillingAddress(),(e,{coupons:t})=>t.getCoupons(),(e,t,n=[])=>()=>{if(e&&t)return Object.assign(Object.assign({},e),{billingAddress:t,coupons:n})}),t=Yi(e,e=>()=>Ji(e(),()=>new Zi($i.MissingOrder))),n=Yi(e=>e.meta,e=>()=>e),i=Yi(e=>e.errors.loadError,e=>()=>e),r=Yi(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.payments},(e=[])=>t=>{const n=e.find(({providerId:e})=>e===t);return null==n?void 0:n.paymentId}),o=Yi(e=>!!e.statuses.isLoading,e=>()=>e);return se((a=mn,s,d)=>({getOrder:e(a,{billingAddress:s,coupons:d}),getOrderOrThrow:t(a,{billingAddress:s,coupons:d}),getOrderMeta:n(a),getLoadError:i(a),getPaymentId:r(a),isLoading:o(a)}))}(),A=function(){const e=Yi(e=>e.data,e=>()=>e);return se((t=Cn)=>({getOrderBillingAddress:e(t)}))}(),T=function(){const e=Yi(({order:e})=>e.getOrderMeta,e=>()=>{const t=e();return t&&t.payment}),t=Yi(({order:e})=>e.getOrder,e=>()=>{const t=e();return l(t&&t.payments,({providerId:e})=>\"giftcertificate\"!==e&&\"storecredit\"!==e)}),n=Yi(({checkout:e})=>e.getCheckout,e=>()=>{const t=e();return l(t&&t.payments,({providerType:e})=>\"PAYMENT_TYPE_HOSTED\"===e)}),i=Yi(e,n,t,(e,t,n)=>()=>{const i=e();if(i&&i.id)return{providerId:i.id,gatewayId:i.gateway};const r=t()||n();return r&&r.providerId?{providerId:r.providerId,gatewayId:r.gatewayId}:void 0}),r=Yi(i,e=>()=>Ji(e(),()=>new Zi($i.MissingPaymentId))),o=Yi(e,n,t,(e,t,n)=>()=>{const i=e();if(i&&i.status)return i.status.replace(\"PAYMENT_STATUS_\",\"\");const r=t()||n();return r?r.detail.step:void 0}),a=Yi(o,e=>()=>Ji(e(),()=>new Zi($i.MissingPaymentStatus))),s=Yi(({order:e})=>e.getOrderMeta,e=>()=>{const t=e();return t&&t.token}),d=Yi(s,e=>()=>Ji(e(),()=>new Zi($i.MissingPaymentToken))),c=Yi(e,e=>()=>{const t=e();return t&&t.redirectUrl}),u=Yi(c,e=>()=>Ji(e(),()=>new Zi($i.MissingPaymentRedirectUrl))),h=Yi(({checkout:e})=>e.getOutstandingBalance,e=>(t=!1)=>{const n=e(t);return!!n&&n>0}),p=Yi(o,e=>t=>!(!t||!t.nonce)||\"ACKNOWLEDGE\"===e()||\"FINALIZE\"===e());return se((e,t)=>({getPaymentId:i({checkout:e,order:t}),getPaymentIdOrThrow:r({checkout:e,order:t}),getPaymentStatus:o({checkout:e,order:t}),getPaymentStatusOrThrow:a({checkout:e,order:t}),getPaymentToken:s({checkout:e,order:t}),getPaymentTokenOrThrow:d({checkout:e,order:t}),getPaymentRedirectUrl:c({checkout:e,order:t}),getPaymentRedirectUrlOrThrow:u({checkout:e,order:t}),isPaymentDataRequired:h({checkout:e,order:t}),isPaymentDataSubmitted:p({checkout:e,order:t})}))}(),k=function(){const e=Yi(e=>e.errors.applyError,e=>()=>e),t=Yi(e=>!!e.statuses.isApplying,e=>()=>e);return se((n=ir)=>({getApplyError:e(n),isApplying:t(n)}))}(),R=function(){const e=Yi(e=>e.errors.updateError,e=>()=>e),t=Yi(e=>!!e.statuses.isUpdating,e=>()=>e);return se((n=Ui)=>({getUpdateError:e(n),isUpdating:t(n)}))}(),D=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e=>e.errors.sendError,e=>()=>e),n=Yi(e=>!!e.statuses.isSending,e=>()=>e);return se((i=Oi)=>({getEmail:e(i),getSendError:t(i),isSending:n(i)}))}(),M=function(){const e=Yi(e=>e.data,e=>()=>e),t=Yi(e=>e.data,e=>t=>null==e?void 0:e.find(e=>e.region===t)),n=Yi(e=>e.errors.loadError,e=>()=>e),i=Yi(e=>e.statuses.isLoading,e=>()=>!!e);return se((r=Zt)=>({getExtensions:e(r),getExtensionByRegion:t(r),getLoadError:n(r),isLoading:i(r)}))}();return(u,l={})=>{const p=e(u.b2bToken),_=t(u.billingAddress),v=n(u.cart),N=i(u.checkoutButton),L=o(u.countries),z=a(u.coupons),U=s(u.customer),F=d(u.customerStrategies),B=M(u.extensions),x=g(u.formFields),q=c(u.giftCertificates),j=h(u.instruments),G=A(u.orderBillingAddress),V=m(u.paymentMethods),H=S(u.paymentProviderCustomer),W=y(u.paymentStrategies),Y=f(u.pickupOptions),K=C(u.remoteCheckout),$=I(u.consignments),Z=w(u.shippingCountries),J=b(u.shippingStrategies),Q=R(u.subscriptions),X=k(u.storeCredit),ee=D(u.signInEmail),te=E(u.consignments,v),ne=P(u.checkout,_,v,te,z,U,q),ie=O(u.order,G,z),re=T(ne,ie),oe={b2bToken:p,billingAddress:_,cart:v,checkout:ne,checkoutButton:N,config:r(u.config,u.formFields),consignments:te,countries:L,coupons:z,customer:U,customerStrategies:F,extensions:B,form:x,giftCertificates:q,instruments:j,order:ie,orderBillingAddress:G,payment:re,paymentMethods:V,paymentProviderCustomer:H,paymentStrategies:W,pickupOptions:Y,remoteCheckout:K,shippingAddress:$,shippingCountries:Z,shippingStrategies:J,signInEmail:ee,subscriptions:Q,storeCredit:X};return l.shouldWarnMutation?(ae=oe,Object.keys(ae).reduce((e,t)=>(e[t]=Qi(ae[t]),e),{})):oe;var ae}}function or(e={},t){const n=(s=function(){const e=new De;return[\"catalog_only\",\"empty_cart\",\"invalid_order_id\",\"invalid_order_token\",\"missing_order_token\",\"missing_provider_token\",\"missing_shipping_method\",\"order_completion_error\",\"order_could_not_be_finalized_error\",\"order_create_failed\",\"provider_fatal_error\",\"provider_setup_error\",\"stock_too_low\"].forEach(t=>{e.register(t,(e,t)=>new Oe(e,t))}),e.register(\"invalid_payment_provider\",e=>new we(e)),e.register(\"payment_config_not_found\",e=>new we(e)),e}(),e=>Y(e).pipe(Q(e=>{if(e instanceof Error||e.payload instanceof Error)throw e;if((t=e.payload)&&\"object\"==typeof t&&[\"body\",\"headers\",\"status\",\"statusText\"].every(e=>Object.prototype.hasOwnProperty.call(t,e))){const t=e.payload.body&&e.payload.body.detail;throw Object.assign(Object.assign({},e),{payload:s.createError(e.payload,t)})}var t;throw e}))),r=rr(),o=i({b2bToken:xe,billingAddress:Ze,cart:st,checkout:Gi,checkoutButton:yt,config:It,consignments:ni,countries:ln,coupons:At,customer:Bt,customerStrategies:Ht,extensions:Jt,formFields:rn,giftCertificates:Mt,instruments:Wn,orderBillingAddress:In,order:yn,payment:Pn,paymentMethods:Tn,paymentStrategies:zn,pickupOptions:ui,paymentProviderCustomer:jn,remoteCheckout:Xn,shippingCountries:yi,shippingStrategies:Ii,signInEmail:Ai,subscriptions:Fi,storeCredit:Ni});var s;return a(o,e,Object.assign({actionTransformer:n,stateTransformer:e=>r(e)},t))}var ar,sr;!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(ar||(ar={}));class dr extends Se{constructor(e){super(function(e){switch(e){case ar.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case ar.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case ar.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case ar.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case ar.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case ar.MissingCheckoutConfig:case ar.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case ar.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case ar.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case ar.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case ar.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case ar.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case ar.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function cr(e){return t=e.lineItems.physicalItems.filter(e=>!e.addedByPromotion),N(t,(e,t)=>e+t.quantity,0);var t}function ur(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(sr||(sr={}));class lr extends Se{constructor(e){super(function(e){switch(e){case sr.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case sr.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case sr.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case sr.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const hr={de:\"eu\",jp:\"fe\",uk:\"eu\",us:\"na\"};var pr,gr,mr,yr,fr,_r;!function(e){e.en_US=\"en_US\",e.en_GB=\"en_GB\",e.de_DE=\"de_DE\",e.fr_FR=\"fr_FR\",e.it_IT=\"it_IT\",e.es_ES=\"es_ES\",e.ja_JP=\"ja_JP\"}(pr||(pr={})),function(e){e.Home=\"Home\",e.Product=\"Product\",e.Cart=\"Cart\",e.Checkout=\"Checkout\",e.Other=\"Other\"}(gr||(gr={})),function(e){e.USD=\"USD\",e.EUR=\"EUR\",e.GBP=\"GBP\",e.JPY=\"JPY\"}(mr||(mr={})),function(e){e.PayAndShip=\"PayAndShip\",e.PayOnly=\"PayOnly\"}(yr||(yr={})),function(e){e.Gold=\"Gold\",e.LightGray=\"LightGray\",e.DarkGray=\"DarkGray\"}(fr||(fr={})),function(e){e.C0001=\"C0001\"}(_r||(_r={}));var vr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Sr{constructor(e){this.amazonPayV2ScriptLoader=e}initialize(e){return vr(this,void 0,void 0,function*(){this.amazonPayV2SDK=yield this.amazonPayV2ScriptLoader.load(e),this.buttonParentContainer=this.buttonParentContainer||this.createAmazonPayButtonParentContainer()})}deinitialize(){var e;return this.amazonPayV2Button=void 0,null===(e=this.buttonParentContainer)||void 0===e||e.remove(),this.buttonParentContainer=void 0,this.amazonPayV2SDK=void 0,Promise.resolve()}bindButton(e,t,n){this.getAmazonPayV2SDK().Pay.bindChangeAction(`#${e}`,{amazonCheckoutSessionId:t,changeAction:n})}createButton(e,t){this.amazonPayV2Button=this.getAmazonPayV2SDK().Pay.renderButton(`#${e}`,t)}prepareCheckout(e){const t=this.prepareRequestConfig(e);this.getAmazonPayV2Button().onClick(()=>{this.getAmazonPayV2Button().initCheckout(t)})}prepareCheckoutWithCreationRequestConfig(e){this.getAmazonPayV2Button().onClick(()=>vr(this,void 0,void 0,function*(){const t=yield e();if(t){const e=this.prepareRequestConfig(t.createCheckoutSessionConfig,t.estimatedOrderAmount,t.productType);this.getAmazonPayV2Button().initCheckout(e)}}))}signout(){return vr(this,void 0,void 0,function*(){return this.amazonPayV2SDK&&this.amazonPayV2SDK.Pay.signout(),Promise.resolve()})}renderAmazonPayButton({buttonColor:e,checkoutState:t,containerId:n,decoupleCheckoutInitiation:i=!1,methodId:r,options:o,placement:a,isButtonMicroTextDisabled:s=!1}){const d=document.querySelector(`#${n}`);if(!d)return;const{id:c}=d.appendChild(this.getButtonParentContainer());o&&s&&(o.design=_r.C0001);const u=null!=o?o:this.getAmazonPayV2ButtonOptions(t,r,a,i,e);return this.createButton(c,u),this.getButtonParentContainer()}updateBuyNowFlowFlag(e){this.isBuyNowFlow=Boolean(e)}isPh4Enabled(e,t){const n=!!e[\"PROJECT-3483.amazon_pay_ph4\"],i=!!e[\"INT-6885.amazon_pay_ph4_us_only\"];return n&&i?\"US\"===t:n}prepareRequestConfig(e,t,n){const{publicKeyId:i}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"publicKeyId\"]);return Object.assign(Object.assign({createCheckoutSessionConfig:this.isEnvironmentSpecific(i)?r:e},t&&{estimatedOrderAmount:t}),n&&{productType:n})}createAmazonPayButtonParentContainer(){const e=Math.random().toString(16).substr(-4),t=document.createElement(\"div\");return t.id=`amazonpay_button_parent_container_${e}`,t}getAmazonPayV2ButtonOptions(e,t,n,i=!1,r=fr.Gold){var o;const{getCart:a,getCheckout:s,getStoreConfigOrThrow:d,getPaymentMethodOrThrow:c}=this.getCheckoutState(e),{config:{merchantId:u,testMode:l},initializationData:h}=c(t);if(!h)throw new dr(ar.MissingPaymentMethod);const{checkoutLanguage:p,checkoutSessionMethod:g,createCheckoutSessionConfig:m,extractAmazonCheckoutSessionId:y,ledgerCurrency:f,publicKeyId:_=\"\",isButtonMicroTextDisabled:v}=h;if(!u||!f)throw new dr(ar.MissingPaymentMethod);const S=Object.assign({merchantId:u,ledgerCurrency:f,checkoutLanguage:p,placement:n,buttonColor:r},v?{design:_r.C0001}:{});if(this.isBuyNowFlow)return Object.assign(Object.assign({},S),{sandbox:!!l});const C=a();S.productType=C&&0===cr(C)?yr.PayOnly:yr.PayAndShip;const{checkoutSettings:{features:I},storeProfile:{shopPath:w,storeCountryCode:b}}=d();if(this.isPh4Enabled(I,b)){if(!m)throw new dr(ar.MissingPaymentMethod);const e=null===(o=s())||void 0===o?void 0:o.outstandingBalance.toString(),t=null==C?void 0:C.currency.code,n=Object.assign({},S);let r;return this.isEnvironmentSpecific(_)?(n.publicKeyId=_,r=m):(n.sandbox=!!l,r=Object.assign(Object.assign({},m),{publicKeyId:_})),i||(n.createCheckoutSessionConfig=r),e&&t&&(n.estimatedOrderAmount={amount:e,currencyCode:t}),n}const E={method:g,url:`${w}/remote-checkout/${t}/payment-session`,extractAmazonCheckoutSessionId:y};return Object.assign(Object.assign({},S),{createCheckoutSession:E,sandbox:!!l})}isEnvironmentSpecific(e){return/^(SANDBOX|LIVE)/.test(e)}getAmazonPayV2SDK(){return this.getOrThrow(this.amazonPayV2SDK)}getButtonParentContainer(){return this.getOrThrow(this.buttonParentContainer)}getAmazonPayV2Button(){return this.getOrThrow(this.amazonPayV2Button)}getOrThrow(e){return ur(e,()=>new lr(sr.PaymentNotInitialized))}getCheckoutState(e){return\"object\"==typeof(t=e)&&null!==t&&\"cart\"in t&&\"checkout\"in t&&\"config\"in t&&\"paymentMethods\"in t?{getCart:e.cart.getCart,getCheckout:e.checkout.getCheckout,getStoreConfigOrThrow:e.config.getStoreConfigOrThrow,getPaymentMethodOrThrow:t=>e.paymentMethods.getPaymentMethodOrThrow(t)}:e;var t}}class Cr extends Se{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class Ir{constructor(e,t=window){this.scriptLoader=e,this.windowWithAmazonPay=t}load(e){return t=this,n=void 0,r=function*(){const{initializationData:t}=e,n=(null==t?void 0:t.region)||\"us\",i=hr[n];if(yield this.scriptLoader.loadScript(`https://static-${i}.payments-amazon.com/checkout.js`),!this.windowWithAmazonPay.amazon)throw new Cr;return this.windowWithAmazonPay.amazon},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}}function wr(e,t){return Object.assign(e,{resolveIds:t})}class br extends Se{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class Er extends Se{constructor(e){super(e||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}class Pr extends Se{constructor(e){super(e||\"An unexpected error has occurred during config creation process. Please try again later.\"),this.name=\"AmazonPayV2ConfigCreationError\",this.type=\"amazon_pay_v2_config_creation_error\"}}function Or(e){return e instanceof Object&&\"buyNowInitializeOptions\"in e}var Ar=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Tr{constructor(e,t,n){this.paymentIntegrationService=e,this.amazonPayV2PaymentProcessor=t,this.amazonPayV2ConfigRequestSender=n}initialize(e){var t;return Ar(this,void 0,void 0,function*(){const{methodId:n,containerId:i,amazonpay:r}=e,{buttonColor:o}=r||{};if(!n||!i)throw new br('Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.');const{getPaymentMethodOrThrow:a}=this.paymentIntegrationService.getState(),s=a(n),{initializationData:d}=s;yield this.amazonPayV2PaymentProcessor.initialize(s),r||(yield this.paymentIntegrationService.loadDefaultCheckout());const c=Or(r)?void 0:r;Or(r)&&\"function\"==typeof(null===(t=r.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody)&&(this._buyNowInitializeOptions=r.buyNowInitializeOptions,this.amazonPayV2PaymentProcessor.updateBuyNowFlowFlag(!0)),this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:this.paymentIntegrationService.getState(),containerId:i,methodId:n,options:c,placement:gr.Cart,buttonColor:o,isButtonMicroTextDisabled:null==d?void 0:d.isButtonMicroTextDisabled}),this._buyNowInitializeOptions&&this.amazonPayV2PaymentProcessor.prepareCheckoutWithCreationRequestConfig(this._getCheckoutCreationRequestConfig.bind(this))})}deinitialize(){return this.amazonPayV2PaymentProcessor.deinitialize()}_createBuyNowCartOrThrow(){var e,t;return Ar(this,void 0,void 0,function*(){const n=null===(t=null===(e=this._buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody)||void 0===t?void 0:t.call(e);if(!n)throw new dr(ar.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(n)}catch(e){throw new Er}})}_createCheckoutConfig(e){return Ar(this,void 0,void 0,function*(){try{const t=(yield this.amazonPayV2ConfigRequestSender.createCheckoutConfig(e)).body,{payload:n,public_key:i}=t,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"payload\",\"public_key\"]);return Object.assign({payloadJSON:n,publicKeyId:i},r)}catch(e){throw new Pr}})}_getCheckoutCreationRequestConfig(){return Ar(this,void 0,void 0,function*(){const e=yield this._createBuyNowCartOrThrow(),t={amount:String(e.baseAmount),currencyCode:e.currency.code};return{createCheckoutSessionConfig:yield this._createCheckoutConfig(e.id),estimatedOrderAmount:t,productType:0===cr(e)?yr.PayOnly:yr.PayAndShip}})}}const kr=\"This API endpoint is for internal use only and may change in the future\";var Rr;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(Rr||(Rr={}));const Dr=Rr,Mr={\"X-Checkout-SDK-Version\":\"1.916.1\"};class Nr{constructor(e){this._requestSender=e}createCheckoutConfig(e){const t={cartId:e},n=Object.assign({\"X-API-INTERNAL\":kr,\"Content-Type\":Dr.Json},Mr);return this._requestSender.post(\"/api/storefront/payment/amazonpay\",{headers:n,body:t})}}const Lr=wr(t=>{const n=e(),i=new Nr(n),r=new Sr(new Ir(le()));return new Tr(t,r,i)},[{id:\"amazonpay\"}]);function zr(e,t,n=!0){var i;return null!==(i=e[t])&&void 0!==i?i:n}const Ur=\"3.128.0\",Fr=\"3.123.2\",Br=\"3.106.0\";class xr{constructor(e){this.paymentIntegrationService=e,this.braintreeWindow=window}getSDKVersion(){const e=this.paymentIntegrationService.getState().getStoreConfig(),t=(null==e?void 0:e.checkoutSettings.features)||{};return this.getPreloadedSDKVersion()||(zr(t,\"PAYPAL-5809.braintree_hosted_fields_fix_version\")?Ur:zr(t,\"PAYPAL-5636.update_braintree_sdk_version\")?Fr:Br)}getPreloadedSDKVersion(){const e=this.braintreeWindow.braintree;if(e){const t=l(Object.values(e),e=>!!e.VERSION);return null==t?void 0:t.VERSION}}}class qr extends Se{constructor(e){super(e||\"Unsupported browser error\"),this.name=\"UnsupportedBrowserError\",this.type=\"unsupported_browser\"}}var jr,Gr,Vr,Hr,Wr,Yr,Kr;function $r(e){return Boolean(\"object\"==typeof e&&null!==e&&(\"type\"in e||\"message\"in e||\"code\"in e))}!function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(jr||(jr={})),function(e){e.Completed=\"COMPLETED\",e.Pending=\"PENDING\",e.Failed=\"FAILED\"}(Gr||(Gr={})),function(e){e.TRUSTLY=\"trustly\"}(Vr||(Vr={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"cancelled\",e.UNRECOGNIZED=\"unrecognized\"}(Hr||(Hr={})),function(e){e.Customer=\"CUSTOMER\",e.Merchant=\"MERCHANT\",e.Network=\"NETWORK\",e.Internal=\"INTERNAL\",e.Unknown=\"UNKNOWN\"}(Wr||(Wr={})),function(e){e.KountNotEnabled=\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"}(Yr||(Yr={})),function(e){e.Visa=\"visa\",e.Mastercard=\"mastercard\",e.AmericanExpress=\"american-express\",e.DinersClub=\"diners-club\",e.Discover=\"discover\",e.Jcb=\"jcb\",e.UnionPay=\"union-pay\",e.Maestro=\"maestro\",e.Elo=\"elo\",e.Mir=\"mir\",e.Hiper=\"hiper\",e.Hipercard=\"hipercard\"}(Kr||(Kr={}));var Zr,Jr,Qr,Xr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class eo{constructor(e){this.braintreeScriptLoader=e}initialize(e){this.setClientToken(e)}deinitialize(){return Xr(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollector),this.dataCollector=void 0})}getClient(){return Xr(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=yield t.create({authorization:e})}return this.client})}getDataCollectorOrThrow(e){return Xr(this,void 0,void 0,function*(){const t={deviceData:void 0,teardown:()=>Promise.resolve()};if(!this.dataCollector)try{const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadDataCollector(),i=Object.assign({client:t,kount:!0},e);this.dataCollector=yield n.create(i)}catch(e){if($r(e)&&e.code===Yr.KountNotEnabled)return t;throw e}return this.dataCollector})}getBraintreeGooglePayment(){return Xr(this,void 0,void 0,function*(){if(!this.googlePayment){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadGooglePayment()]);this.googlePayment=yield t.create({client:e})}return this.googlePayment})}getBraintreeThreeDS(){return Xr(this,void 0,void 0,function*(){if(!this.threeDS){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]);this.threeDS=yield t.create({client:e,version:2})}return this.threeDS})}getBraintreeLocalPayment(e){return Xr(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment){const[t,n]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadLocalPayment()]);this.braintreeLocalPayment=yield new Promise((i,r)=>{n.create({client:t,merchantAccountId:e},(e,t)=>{e&&r(e),i(t)})})}return this.braintreeLocalPayment})}getUsBankAccount(){return Xr(this,void 0,void 0,function*(){if(!this.usBankAccount){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadUsBankAccount();this.usBankAccount=yield t.create({client:e})}return this.usBankAccount})}getBraintreeVisaCheckout(){return this.visaCheckout||(this.visaCheckout=Promise.all([this.getClient(),this.braintreeScriptLoader.loadVisaCheckout()]).then(([e,t])=>t.create({client:e}))),this.visaCheckout}getVisaCheckoutSdk(e){return Xr(this,void 0,void 0,function*(){return this.visaCheckoutSDK||(this.visaCheckoutSDK=yield this.braintreeScriptLoader.loadVisaCheckoutSdk(e)),this.visaCheckoutSDK})}getVenmoCheckoutOrThrow(){return Xr(this,void 0,void 0,function*(){if(!this.braintreeVenmo){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadVenmoCheckout(),n={client:e,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},i=yield t.create(n);if(!i.isBrowserSupported())throw new qr;this.braintreeVenmo=i}return this.braintreeVenmo})}setClientToken(e){this.clientToken=e}getClientTokenOrThrow(){if(!this.clientToken)throw new lr(sr.PaymentNotInitialized);return this.clientToken}teardownModule(e){return e?e.teardown():Promise.resolve()}}!function(e){e.Sandbox=\"sandbox\",e.Production=\"production\"}(Zr||(Zr={})),function(e){e.Client=\"client\",e.DataCollector=\"dataCollector\",e.Fastlane=\"fastlane\",e.GooglePayment=\"googlePayment\",e.HostedFields=\"hostedFields\",e.LocalPayment=\"localPayment\",e.Paypal=\"paypal\",e.PaypalCheckout=\"paypalCheckout\",e.ThreeDSecure=\"threeDSecure\",e.UsBankAccount=\"usBankAccount\",e.Venmo=\"venmo\",e.VisaCheckout=\"visaCheckout\"}(Jr||(Jr={})),function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\"}(Qr||(Qr={}));const to={[Br]:{[Jr.Client]:\"sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt\",[Jr.PaypalCheckout]:\"sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O\",[Jr.Paypal]:\"sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+\",[Jr.LocalPayment]:\"sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT\",[Jr.DataCollector]:\"sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV\",[Jr.UsBankAccount]:\"sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ\",[Jr.GooglePayment]:\"sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe\",[Jr.ThreeDSecure]:\"sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB\",[Jr.VisaCheckout]:\"sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT\",[Jr.Venmo]:\"sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov\",[Jr.HostedFields]:\"sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy\",[Jr.Fastlane]:\"sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa\"},[Fr]:{[Jr.Client]:\"sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO\",[Jr.PaypalCheckout]:\"sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/\",[Jr.Paypal]:\"sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt\",[Jr.LocalPayment]:\"sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH\",[Jr.DataCollector]:\"sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO\",[Jr.UsBankAccount]:\"sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW\",[Jr.GooglePayment]:\"sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO\",[Jr.ThreeDSecure]:\"sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym\",[Jr.VisaCheckout]:\"sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS\",[Jr.Venmo]:\"sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU\",[Jr.HostedFields]:\"sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P\",[Jr.Fastlane]:\"sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y\"},[Ur]:{[Jr.Client]:\"sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq\",[Jr.PaypalCheckout]:\"sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh\",[Jr.Paypal]:\"sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH\",[Jr.LocalPayment]:\"sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC\",[Jr.DataCollector]:\"sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc\",[Jr.UsBankAccount]:\"sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F\",[Jr.GooglePayment]:\"sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i\",[Jr.ThreeDSecure]:\"sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D\",[Jr.VisaCheckout]:\"sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv\",[Jr.Venmo]:\"sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz\",[Jr.HostedFields]:\"sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z\",[Jr.Fastlane]:\"sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr\"}};var no,io=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ro{constructor(e,t,n){this.scriptLoader=e,this.braintreeHostWindow=t,this.braintreeSDKVersionManager=n}loadClient(){return io(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Jr.Client,\"client.min.js\")})}loadFastlane(){return io(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Jr.Fastlane,\"fastlane.min.js\")})}loadPaypalCheckout(){return io(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Jr.PaypalCheckout,\"paypal-checkout.min.js\")})}loadPaypal(){return io(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Jr.Paypal,\"paypal.min.js\")})}loadLocalPayment(){return io(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Jr.LocalPayment,\"local-payment.min.js\")})}loadDataCollector(){return io(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Jr.DataCollector,\"data-collector.min.js\")})}loadUsBankAccount(){return io(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Jr.UsBankAccount,\"us-bank-account.min.js\")})}loadGooglePayment(){return io(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Jr.GooglePayment,\"google-payment.min.js\")})}load3DS(){return io(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Jr.ThreeDSecure,\"three-d-secure.min.js\")})}loadVisaCheckout(){return this.loadBraintreeModuleOrThrow(Jr.VisaCheckout,\"visa-checkout.min.js\")}loadVenmoCheckout(){return this.loadBraintreeModuleOrThrow(Jr.Venmo,\"venmo.min.js\")}loadHostedFields(){return io(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(Jr.HostedFields,\"hosted-fields.min.js\")})}loadVisaCheckoutSdk(e){return io(this,void 0,void 0,function*(){if(this.braintreeHostWindow.V)return this.braintreeHostWindow.V;const t=e?\"sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm\":\"sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6\";return this.scriptLoader.loadScript(`//${e?\"sandbox-\":\"\"}assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,{async:!0,attributes:{integrity:t,crossorigin:\"anonymous\"}}).then(()=>{if(!this.braintreeHostWindow.V)throw new Cr;return this.braintreeHostWindow.V})})}loadBraintreeModuleOrThrow(e,t){return io(this,void 0,void 0,function*(){let n=this.getBraintreeModule(e);if(n)return n;const i=this.braintreeSDKVersionManager.getSDKVersion(),r=`//js.braintreegateway.com/web/${i}/js/${t}`,o=i in to?this.getIntegrityValuesByModuleName(e,i):void 0;if(yield this.scriptLoader.loadScript(r,o?{async:!0,attributes:{integrity:o,crossorigin:\"anonymous\"}}:void 0),n=this.getBraintreeModule(e),!n)throw new Cr;return n})}getBraintreeModule(e){var t;return null===(t=this.braintreeHostWindow.braintree)||void 0===t?void 0:t[e]}getIntegrityValuesByModuleName(e,t){const n=to[t][e];if(!n)throw new Error(\"Unexpected fileName value\");return n}}class oo extends Se{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}!function(e){e.BRAINTREE=\"braintree\",e.BRAINTREE_FASTLANE=\"braintreeacceleratedcheckout\"}(no||(no={}));var ao,so,co=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};!function(e){e.Subtotal=\"Subtotal\",e.Shipping=\"Shipping\"}(ao||(ao={})),function(e){e.Black=\"black\",e.White=\"white\",e.WhiteBorder=\"white-border\"}(so||(so={}));class uo{constructor(e,t,n,i,r){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=n,this._braintreeSdk=i,this._applePayScriptLoader=r,this._onAuthorizeCallback=T,this._subTotalLabel=ao.Subtotal,this._shippingLabel=ao.Shipping}initialize(e){var t,n;return co(this,void 0,void 0,function*(){const{methodId:i,containerId:r,applepay:o}=e;if(!i||!o)throw new dr(ar.MissingPaymentMethod);yield this._applePayScriptLoader.loadSdk();const{onPaymentAuthorize:a,buyNowInitializeOptions:s,requiresShipping:d}=o;this._requiresShipping=d,this._buyNowInitializeOptions=s,this._onAuthorizeCallback=a,s||(yield this._paymentIntegrationService.loadDefaultCheckout()),yield this._paymentIntegrationService.loadPaymentMethod(i);const c=this._paymentIntegrationService.getState();return this._paymentMethod=c.getPaymentMethodOrThrow(i),c.getCart()&&(yield this._paymentIntegrationService.verifyCheckoutSpamProtection()),(null===(t=this._paymentMethod.initializationData)||void 0===t?void 0:t.gateway)===no.BRAINTREE&&this._paymentMethod.clientToken&&this._braintreeSdk.initialize(this._paymentMethod.clientToken),this._applePayButton=this._createButton(r,null===(n=this._paymentMethod.initializationData)||void 0===n?void 0:n.styleOption),this._applePayButton.addEventListener(\"click\",this._handleWalletButtonClick.bind(this)),Promise.resolve()})}deinitialize(){return Promise.resolve()}_createButton(e,t){const n=document.getElementById(e);if(!n)throw new br(\"Unable to create wallet button without valid container ID.\");const i=this._createApplePayButtonElement(t);return n.appendChild(i),i}_createApplePayButtonElement(e){const t=document.createElement(\"apple-pay-button\");return t.setAttribute(\"buttonstyle\",(e=>{switch(e){case so.White:return\"white\";case so.WhiteBorder:return\"white-outline\";case so.Black:default:return\"black\"}})(e)),t.setAttribute(\"type\",\"plain\"),t.setAttribute(\"style\",\"--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;\"),t}_handleWalletButtonClick(e){var t;return co(this,void 0,void 0,function*(){if(e.preventDefault(),!this._paymentMethod||!this._paymentMethod.initializationData)throw new dr(ar.MissingPaymentMethod);if(this._buyNowInitializeOptions&&\"function\"==typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody){const{countryCode:e,currencyCode:n,merchantCapabilities:i,supportedNetworks:r,storeName:o}=this._paymentMethod.initializationData,a=this._getRequestWithEmptyTotal(e,n,r,i);this._requiresShipping&&(null===(t=a.requiredShippingContactFields)||void 0===t||t.push(\"postalAddress\"));const s=this._sessionFactory.create(a);this._handleApplePayEvents(s,this._paymentMethod,o),s.begin()}else{const e=this._paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getStoreConfigOrThrow(),i=e.getCheckoutOrThrow(),r=this._getBaseRequest(t,i,n,this._paymentMethod),o=this._sessionFactory.create(r);this._handleApplePayEvents(o,this._paymentMethod,n.storeProfile.storeName),o.begin()}})}_getRequestWithEmptyTotal(e,t,n,i){return{countryCode:e,currencyCode:t,supportedNetworks:n,merchantCapabilities:i,total:{label:\"\",amount:\"0\",type:\"pending\"},requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"]}}_getBaseRequest(e,t,n,i){var r;const{storeProfile:{storeCountryCode:o,storeName:a}}=n,{currency:{code:s,decimalPlaces:d}}=e,{initializationData:{merchantCapabilities:c,supportedNetworks:u}}=i,l=e.lineItems.physicalItems.length>0,h={requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"],countryCode:o,currencyCode:s,merchantCapabilities:c,supportedNetworks:u,lineItems:[],total:l?{label:a,amount:`${t.grandTotal.toFixed(d)}`,type:\"pending\"}:{label:a,amount:`${t.grandTotal.toFixed(d)}`,type:\"final\"}};if(l)null===(r=h.requiredShippingContactFields)||void 0===r||r.push(\"postalAddress\");else{const e=[{label:this._subTotalLabel,amount:`${t.subtotal.toFixed(d)}`}];t.taxes.forEach(t=>e.push({label:t.name,amount:`${t.amount.toFixed(d)}`})),h.lineItems=e}return h}_handleApplePayEvents(e,t,n){e.onvalidatemerchant=n=>co(this,void 0,void 0,function*(){try{const{body:i}=yield this._onValidateMerchant(t,n);e.completeMerchantValidation(i)}catch(e){throw new Error(\"Merchant validation failed\")}}),this._buyNowInitializeOptions&&!this._requiresShipping&&(e.onpaymentmethodselected=()=>co(this,void 0,void 0,function*(){yield this._createBuyNowCart(),this._handlePaymentMethodSelected(e)})),e.onshippingcontactselected=t=>co(this,void 0,void 0,function*(){this._buyNowInitializeOptions&&this._requiresShipping&&(yield this._createBuyNowCart()),yield this._handleShippingContactSelected(e,n,t)}),e.onshippingmethodselected=t=>co(this,void 0,void 0,function*(){yield this._handleShippingMethodSelected(e,n,t)}),e.oncancel=()=>co(this,void 0,void 0,function*(){try{const e=`/remote-checkout/${t.id}/signout`;return yield this._requestSender.get(e),yield this._paymentIntegrationService.loadCheckout()}catch(e){throw new oo}}),e.onpaymentauthorized=n=>co(this,void 0,void 0,function*(){return this._onPaymentAuthorized(n,e,t)})}_createBuyNowCart(){var e,t;return co(this,void 0,void 0,function*(){try{const n=null===(t=null===(e=this._buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody)||void 0===t?void 0:t.call(e);if(!n)throw new dr(ar.MissingCart);const i=yield this._paymentIntegrationService.createBuyNowCart(n);yield this._paymentIntegrationService.loadCheckout(i.id);const r=this._paymentIntegrationService.getState(),{shouldExecuteSpamCheck:o}=r.getCheckoutOrThrow();o&&(yield this._paymentIntegrationService.verifyCheckoutSpamProtection())}catch(e){throw new Er}})}_handlePaymentMethodSelected(e){const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getStoreConfigOrThrow(),r=t.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new dr(ar.MissingPaymentMethod);const o=this._getBaseRequest(n,r,i,this._paymentMethod);delete o.total.type,e.completePaymentMethodSelection({newTotal:o.total,newLineItems:o.lineItems})}_handleShippingContactSelected(e,t,n){var i;return co(this,void 0,void 0,function*(){const r=this._transformContactToAddress(n.shippingContact);try{yield this._paymentIntegrationService.updateShippingAddress(r)}catch(t){throw e.abort(),new Error(\"Shipping address update failed\")}let o=this._paymentIntegrationService.getState();const{currency:{decimalPlaces:a}}=o.getCartOrThrow();let s=o.getCheckoutOrThrow();const d=null===(i=s.consignments[0].selectedShippingOption)||void 0===i?void 0:i.id,c=s.consignments[0].availableShippingOptions,u=null==c?void 0:c.find(({id:e})=>e===d),l=null==c?void 0:c.filter(e=>e.id!==d),h=u?[{label:u.description,amount:`${u.cost.toFixed(a)}`,detail:u.additionalDescription,identifier:u.id}]:[];if(l&&[...l.filter(e=>e.isRecommended),...l.filter(e=>!e.isRecommended)].forEach(e=>h.push({label:e.description,amount:`${e.cost.toFixed(a)}`,detail:e.additionalDescription,identifier:e.id})),!(c instanceof Array))throw new Error(\"Shipping options not available.\");if(0===c.length)return void e.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:\"pending\",label:t,amount:`${s.grandTotal.toFixed(a)}`},[]);const p=c.find(e=>e.isRecommended),g=p?p.id:c[0].id,m=u?u.id:g;try{yield this._updateShippingOption(m)}catch(e){throw new Error(\"Shipping options update failed\")}o=this._paymentIntegrationService.getState(),s=o.getCheckoutOrThrow(),e.completeShippingContactSelection({newShippingMethods:h,newTotal:{type:\"final\",label:t,amount:`${s.grandTotal.toFixed(a)}`},newLineItems:this._getUpdatedLineItems(s,a)})})}_handleShippingMethodSelected(e,t,n){return co(this,void 0,void 0,function*(){const{shippingMethod:{identifier:i}}=n;try{yield this._updateShippingOption(i)}catch(t){throw e.abort(),new Error(\"Shipping option selection update failed.\")}const r=this._paymentIntegrationService.getState(),{currency:{decimalPlaces:o}}=r.getCartOrThrow(),a=r.getCheckoutOrThrow();e.completeShippingMethodSelection({newTotal:{type:\"final\",label:t,amount:`${a.grandTotal.toFixed(o)}`},newLineItems:this._getUpdatedLineItems(a,o)})})}_getUpdatedLineItems(e,t){const n=[{label:this._subTotalLabel,amount:`${e.subtotal.toFixed(t)}`}];return e.taxes.forEach(e=>n.push({label:e.name,amount:`${e.amount.toFixed(t)}`})),n.push({label:this._shippingLabel,amount:`${e.shippingCostTotal.toFixed(t)}`}),n}_updateShippingOption(e){return co(this,void 0,void 0,function*(){return this._paymentIntegrationService.selectShippingOption(e)})}_onValidateMerchant(e,t){return co(this,void 0,void 0,function*(){const n=[`validationUrl=${t.validationURL}`,`merchantIdentifier=${e.initializationData.merchantId}`,`displayName=${e.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${e.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:n})})}_onPaymentAuthorized(e,t,n){var i;return co(this,void 0,void 0,function*(){const{token:r,billingContact:o,shippingContact:a}=e.payment,s=this._paymentIntegrationService.getState().getCartOrThrow().lineItems.physicalItems.length>0;let d;(null===(i=n.initializationData)||void 0===i?void 0:i.gateway)===no.BRAINTREE&&(d=yield this._getBraintreeDeviceData());const c={methodId:n.id,paymentData:{deviceSessionId:d,formattedPayload:{apple_pay_token:{payment_data:r.paymentData,payment_method:r.paymentMethod,transaction_id:r.transactionIdentifier}}}},u=this._transformContactToAddress(o),l=this._transformContactToAddress(a),h=null==a?void 0:a.emailAddress,p=(null==a?void 0:a.phoneNumber)||\"\";try{return yield this._paymentIntegrationService.updateBillingAddress(Object.assign(Object.assign({},u),{email:h,phone:p})),s&&(yield this._paymentIntegrationService.updateShippingAddress(l)),yield this._paymentIntegrationService.submitOrder({useStoreCredit:!1}),yield this._paymentIntegrationService.submitPayment(c),t.completePayment(ApplePaySession.STATUS_SUCCESS),this._onAuthorizeCallback()}catch(e){throw t.completePayment(ApplePaySession.STATUS_FAILURE),new Error(\"Payment cannot complete\")}})}_transformContactToAddress(e){return{firstName:(null==e?void 0:e.givenName)||\"\",lastName:(null==e?void 0:e.familyName)||\"\",city:(null==e?void 0:e.locality)||\"\",company:\"\",address1:(null==e?void 0:e.addressLines)&&e.addressLines[0]||\"\",address2:(null==e?void 0:e.addressLines)&&e.addressLines[1]||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",phone:(null==e?void 0:e.phoneNumber)||\"\",stateOrProvince:(null==e?void 0:e.administrativeArea)||\"\",stateOrProvinceCode:(null==e?void 0:e.administrativeArea)||\"\",customFields:[]}}_getBraintreeDeviceData(){return co(this,void 0,void 0,function*(){try{const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e}catch(e){}})}}function lo(e){if(!function(e){return\"ApplePaySession\"in e}(e))throw new Error(\"Apple pay is not supported\")}class ho{create(e){return lo(window),new ApplePaySession(1,e)}}class po{constructor(e){this.scriptLoader=e,this.sdkVersion=\"1.latest\"}loadSdk(){return e=this,t=void 0,i=function*(){(function(e){return\"ApplePaySDK\"in e})(window)||(yield this.scriptLoader.loadScript(`https://applepay.cdn-apple.com/jsapi/${this.sdkVersion}/apple-pay-sdk.js`),lo(window))},new((n=void 0)||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())});var e,t,n,i}}const go=wr(t=>{const{getHost:n}=t.getState(),i=new xr(t);return new uo(e({host:n()}),t,new ho,new eo(new ro(le(),window,i)),new po(new ce))},[{id:\"applepay\"}]);var mo,yo,fo,_o,vo,So,Co,Io;!function(e){e.BuyNow=\"BUY_NOW\"}(mo||(mo={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(yo||(yo={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(fo||(fo={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(_o||(_o={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(vo||(vo={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(So||(So={})),function(e){e.OXXO=\"oxxo\"}(Co||(Co={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(Io||(Io={}));var wo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class bo{constructor(e,t,n,i){this.formPoster=e,this.paymentIntegrationService=t,this.bigCommercePaymentsRequestSender=n,this.bigCommercePaymentsScriptLoader=i}loadPayPalSdk(e,t,n,i){return wo(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e);return this.paypalSdk=yield this.bigCommercePaymentsScriptLoader.getPayPalSDK(a,o,n,i),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new Cr;return this.paypalSdk}createBuyNowCartOrThrow(e){return wo(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new dr(ar.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new Er}})}createOrder(e,t){return wo(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i}=yield this.bigCommercePaymentsRequestSender.createOrder(e,Object.assign({cartId:n},t));return i})}createOrderCardFields(e,t){return wo(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i,setupToken:r}=yield this.bigCommercePaymentsRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:i},r?{setupToken:r}:{})})}updateOrder(e){return wo(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow();let i;e||(i=t.getConsignmentsOrThrow()[0]);try{yield this.bigCommercePaymentsRequestSender.updateOrder({availableShippingOptions:e?[]:null==i?void 0:i.availableShippingOptions,cartId:n.id,selectedShippingOption:e?null:null==i?void 0:i.selectedShippingOption})}catch(e){throw new Ie}})}getOrderStatus(e,t){return wo(this,void 0,void 0,function*(){try{const{status:n}=yield this.bigCommercePaymentsRequestSender.getOrderStatus(e,t);return n}catch(e){throw new Ie}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new dr(ar.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===mo.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return wo(this,void 0,void 0,function*(){const i={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:i},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],i=n.find(e=>e.isRecommended),r=(e?n.find(t=>t.id===e):n.find(e=>{var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)}))||i||n[0];if(!r)throw new Error(\"Your order can't be shipped to this address\");return r}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:i,name:{full_name:r}}=n[0].shipping,[o,...a]=r.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:i.address_line_1,address2:i.address_line_2,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})}getValidButtonStyle(e){const{color:t,height:n,label:i,shape:r}=e||{},o={color:t&&vo[t]?t:void 0,height:this.getValidHeight(n),label:i&&_o[i]?i:void 0,shape:r&&So[r]?r:void 0};return R(o,S)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}var Eo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Po{constructor(e){this.requestSender=e}createOrder(e,t){return Eo(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":kr,\"Content-Type\":Dr.Json},Mr);return(yield this.requestSender.post(n,{headers:r,body:i})).body})}updateOrder(e){return Eo(this,void 0,void 0,function*(){const t=e,n=Object.assign({\"X-API-INTERNAL\":kr,\"Content-Type\":Dr.Json},Mr);return(yield this.requestSender.put(\"/api/storefront/initialization/bigcommerce_payments\",{headers:n,body:t})).body})}getOrderStatus(e=\"bigcommerce_payments\",t){return Eo(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":kr,\"Content-Type\":Dr.Json},Mr);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body})}}var Oo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ao{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,i){return Oo(this,void 0,void 0,function*(){const r=this.getPayPalSdkScriptConfigOrThrow(e,t,n);return this.loadPayPalSDK(r,i)})}loadPayPalSDK(e,t=!1){return Oo(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsPayPalSDK||t){const t=this.transformConfig(e.options),n=this.transformConfig(e.attributes),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(t).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:n})}if(!this.window.bigCommercePaymentsPayPalSDK)throw new Cr;return this.window.bigCommercePaymentsPayPalSDK})}getPayPalSdkScriptConfigOrThrow(e,t,n=!0){const{id:i,clientToken:r,initializationData:o}=e;if(!(null==o?void 0:o.clientId))throw new dr(ar.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:d,buyerCountry:c,attributionId:u,isVenmoEnabled:l,isHostedCheckoutEnabled:h,isPayPalCreditAvailable:p,isDeveloperModeApplicable:g,availableAlternativePaymentMethods:m=[],enabledAlternativePaymentMethods:y=[],isGooglePayEnabled:f}=o,_=h||n,v=\"bigcommerce_payments_creditcards\"===i,S=v?[\"card\"]:[],C=v?[]:[\"card\"],I=p?[\"credit\",\"paylater\"]:[],w=p?[]:[\"credit\",\"paylater\"],b=l?[\"venmo\"]:[],E=l?[]:[\"venmo\"],P=m.filter(e=>!y.includes(e)),O=f?[\"googlepay\"]:[],A=n?[\"card-fields\"]:[],T=this.filterFundingOptions([...C,...w,...E,...P]),k=this.filterFundingOptions([...S,...I,...b,...y]);return{options:Object.assign({\"client-id\":s,\"merchant-id\":d,\"enable-funding\":k.length>0?k:void 0,\"disable-funding\":T.length>0?T:void 0,commit:_,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...O,...A],currency:t,intent:a},g&&{\"buyer-country\":c}),attributes:{\"data-partner-attribution-id\":u,\"data-client-token\":r,\"data-namespace\":\"bigCommercePaymentsPayPalSDK\"}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}const To=t=>{const{getHost:i}=t.getState();return new bo(n(),t,new Po(e({host:i()})),new Ao(le()))};var ko=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ro{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){var t;return ko(this,void 0,void 0,function*(){const{bigcommerce_payments:n,containerId:i,methodId:r}=e,o=Boolean(null==n?void 0:n.buyNowInitializeOptions);if(!r)throw new br('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new br('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!n)throw new br('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');if(o&&!n.currencyCode)throw new br('Unable to initialize payment because \"options.bigcommerce_payments.currencyCode\" argument is not provided.');if(o&&\"function\"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new br('Unable to initialize payment because \"options.bigcommerce_payments.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');o||(yield this.paymentIntegrationService.loadDefaultCheckout());const a=o?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(r,a,!1),this.renderButton(i,r,n)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:c,isServerSideShippingCallbacksEnabled:u}=d.initializationData||{},l={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},h={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},p=Object.assign(Object.assign({},!u&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o,u)}),g=Object.assign(Object.assign(Object.assign({fundingSource:s.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(r)},l),i&&h),c&&p),m=s.Buttons(g);m.isEligible()?m.render(`#${e}`):a&&\"function\"==typeof a?a():this.bigCommercePaymentsIntegrationService.removeElement(e)}handleClick(e){return ko(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,i,r){return ko(this,void 0,void 0,function*(){if(!e.orderID)throw new dr(ar.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!r){const e=yield t.order.get(),n=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}return a&&(yield this.bigCommercePaymentsIntegrationService.updateOrder(r)),r&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return ko(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return ko(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const Do=wr(e=>new Ro(e,To(e)),[{id:\"bigcommerce_payments\"}]);var Mo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class No{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return Mo(this,void 0,void 0,function*(){const{bigcommerce_payments_paylater:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new br('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new br('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new br('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');if(a&&!o)throw new br('Unable to initialize payment because \"options.bigcommerce_payments_paylater.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new br('Unable to initialize payment because \"options.bigcommerce_payments_paylater.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=this.paymentIntegrationService.getState(),d=a?o:s.getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i,d,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:c}=d.initializationData||{},u={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},l={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},h={onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e),onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o)},p=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT];let g=!1;p.forEach(t=>{if(!g){const n=Object.assign(Object.assign(Object.assign({fundingSource:t,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(r)},u),i&&l),c&&h),o=s.Buttons(n);o.isEligible()?(o.render(`#${e}`),g=!0):a&&\"function\"==typeof a&&a()}}),g||this.bigCommercePaymentsIntegrationService.removeElement(e)}handleClick(e){return Mo(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,i){return Mo(this,void 0,void 0,function*(){if(!e.orderID)throw new dr(ar.MissingOrderId);const r=this.paymentIntegrationService.getState().getCartOrThrow(),o=yield t.order.get();try{const t=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(o);if(yield this.paymentIntegrationService.updateBillingAddress(t),r.lineItems.physicalItems.length>0){const e=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(o);yield this.paymentIntegrationService.updateShippingAddress(e),yield this.bigCommercePaymentsIntegrationService.updateOrder()}return yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return Mo(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return Mo(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const Lo=wr(e=>new No(e,To(e)),[{id:\"bigcommerce_payments_paylater\"}]);var zo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Uo{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return zo(this,void 0,void 0,function*(){const{bigcommerce_payments_venmo:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new br('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new br('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new br('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');if(a&&!o)throw new br('Unable to initialize payment because \"options.bigcommerce_payments_venmo.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new br('Unable to initialize payment because \"options.bigcommerce_payments_venmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=a?o:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i,s,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onEligibilityFailure:o}=n,a=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),s=a.FUNDING.VENMO,d={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmo\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},c={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},u=Object.assign(Object.assign({fundingSource:s,style:this.getValidVenmoButtonStyles(r)},d),i&&c),l=a.Buttons(u);l.isEligible()?l.render(`#${e}`):o&&\"function\"==typeof o?o():this.bigCommercePaymentsIntegrationService.removeElement(e)}getValidVenmoButtonStyles(e){const t=this.bigCommercePaymentsIntegrationService.getValidButtonStyle(e);return t.color===vo.gold?Object.assign(Object.assign({},t),{color:void 0}):t}handleClick(e){return zo(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}}const Fo=wr(e=>new Uo(e,To(e)),[{id:\"bigcommerce_payments_venmo\"}]);class Bo extends Se{constructor(e){super(e||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var xo,qo,jo;!function(e){e.SandboxMode=\"bolt_sandbox\",e.StagingMode=\"bolt_staging\",e.DevelopmentMode=\"bolt_development\"}(xo||(xo={})),function(e){e.Small=\"small\",e.Medium=\"medium\",e.Large=\"large\"}(qo||(qo={})),function(e){e.Pill=\"pill\",e.Rect=\"rect\"}(jo||(jo={}));class Go{constructor(e,t,n=window){this.paymentIntegrationService=e,this.boltScriptLoader=t,this.boltHostWindow=n}initialize(e){return t=this,n=void 0,r=function*(){const{bolt:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,style:o}=t||{};if(!i)throw new br('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new br('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new br('Unable to initialize payment because \"options.bolt\" argument is not provided.');if(!Boolean(r))throw new Bo(\"Only buy now flow is implemented for Bolt button\");if(!(null==r?void 0:r.storefrontApiToken)||\"string\"!=typeof r.storefrontApiToken)throw new br('Unable to initialize payment because \"options.storefrontApiToken\" argument is not provided.');const a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i),{initializationData:s,config:d}=a,{publishableKey:c,developerConfig:u}=s||{};yield this.boltScriptLoader.loadBoltClient(c,d.testMode,u,\"BigCommerce\",r.storefrontApiToken),this.renderButton(n,a,o)},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}deinitialize(){return Promise.resolve()}renderButton(e,t,n){var i;\"function\"==typeof(null===(i=this.boltHostWindow.BoltConnect)||void 0===i?void 0:i.setupProductPageCheckout)&&(this.addButtonContainer(e,t,n),this.boltHostWindow.BoltConnect.setupProductPageCheckout())}addButtonContainer(e,t,n){const i=document.getElementById(e);if(!i)return;const r=document.createElement(\"div\"),o=document.createElement(\"object\");r.setAttribute(\"id\",\"product-page-checkout-wrapper\"),r.setAttribute(\"class\",\"bolt-button-wrapper\"),r.setAttribute(\"style\",\"display:none\"),r.setAttribute(\"data-tid\",\"product-page-checkout-wrapper\"),o.setAttribute(\"data\",this.getBoltObjectData(t,n)),o.setAttribute(\"class\",\"bolt-product-checkout-button\"),r.append(o),i.innerHTML=\"\",i.append(r)}getBoltObjectData(e,t){const{initializationData:n,config:i}=e,{publishableKey:r,developerConfig:o}=n||{},a=this.boltScriptLoader.getDomainURL(!!i.testMode,o),s=this.getButtonHeight(null==t?void 0:t.size),d=this.getButtonBorderRadius(null==t?void 0:t.shape,s);return he({url:`https://${a}/v1/checkout_button`,query:{publishable_key:r,variant:\"ppc\",height:s,border_radius:d}})}getButtonHeight(e){if(e)switch(e){case qo.Small:return 25;case qo.Large:return 45;case qo.Medium:default:return 40}}getButtonBorderRadius(e,t){if(e)switch(e){case jo.Pill:return t?Math.round(t/2):void 0;case jo.Rect:default:return 4}}}var Vo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ho{constructor(e,t=window){this.scriptLoader=e,this.boltHostWindow=t}loadBoltClient(e,t,n,i,r){return Vo(this,void 0,void 0,function*(){if(this.boltHostWindow.BoltCheckout)return this.boltHostWindow.BoltCheckout;if(!e)throw new br('Unable to initialize payment because \"publishableKey\" argument is not provided.');if(yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!t,n)}/connect-bigcommerce.js`,this.getScriptOptions(\"bolt-connect\",e,i,r)),yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!t,n)}/track.js`,this.getScriptOptions(\"bolt-track\",e)),!this.boltHostWindow.BoltCheckout)throw new Cr;return this.boltHostWindow.BoltCheckout})}loadBoltEmbedded(e,t,n){return Vo(this,void 0,void 0,function*(){if(yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!t,n)}/embed.js`,{async:!0,attributes:{id:\"bolt-embedded\"}}),!this.boltHostWindow.Bolt)throw new Cr;return this.boltHostWindow.Bolt(e)})}getDomainURL(e,t){if(!e)return\"connect.bolt.com\";if(t)switch(t.developerMode){case xo.StagingMode:return\"connect-staging.bolt.com\";case xo.DevelopmentMode:return`connect.${t.developerDomain}`}return\"connect-sandbox.bolt.com\"}getScriptOptions(e,t,n,i){return{async:!0,attributes:Object.assign(Object.assign({id:e,\"data-publishable-key\":t},n&&{\"data-shopping-cart-id\":n}),i&&{\"data-storefront-api-token\":i})}}}const Wo=wr(e=>new Go(e,new Ho(le())),[{id:\"bolt\"}]);class Yo extends br{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class Ko extends Se{constructor(e,t){super(t||\"Unable to proceed because the payment form contains invalid data.\"),this.details=e,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}class $o{constructor(e){const t=new Promise((e,t)=>{this.cancel=t});this.promise=Promise.race([e,t])}}let Zo=null;const Jo=[\"buttons\",\"messages\"];var Qo,Xo,ea,ta,na,ia;!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(Qo||(Qo={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(Xo||(Xo={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(ea||(ea={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(ta||(ta={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(na||(na={})),function(e){e.CART=\"cart\",e.HOME=\"homepage\",e.PAYMENT=\"payment\",e.PRODUCT=\"product\"}(ia||(ia={}));var ra=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class oa{constructor(e,t,n){this.braintreeScriptLoader=e,this.braintreeHostWindow=t,this.overlay=n,this.dataCollectors={}}initialize(e,t){this.clientToken=e,this.threeDSecureOptions=t}getBraintreeFastlane(e,t,n){return ra(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"axoEnv\",\"sandbox\"),window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\")),!this.braintreeHostWindow.braintreeFastlane){const t=this.getClientTokenOrThrow(),i=yield this.getClient(),r=yield this.getSessionId(e),o=yield this.braintreeScriptLoader.loadFastlane(),a={root:{backgroundColorPrimary:\"transparent\"}};this.braintreeHostWindow.braintreeFastlane=yield o.create({authorization:t,client:i,deviceData:r,styles:n||a})}return this.braintreeHostWindow.braintreeFastlane})}getClient(){return ra(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=t.create({authorization:e})}return this.client})}getPaypal(){return this.braintreePaypal||(this.braintreePaypal=Promise.all([this.getClient(),this.braintreeScriptLoader.loadPaypal()]).then(([e,t])=>t.create({client:e}))),this.braintreePaypal}paypal(e){var{shouldSaveInstrument:t}=e,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"shouldSaveInstrument\"]);const i=pe();return this.getPaypal().then(e=>{var r;return i&&(null===(r=this.overlay)||void 0===r||r.show({onClick:()=>e.focusWindow()})),e.tokenize(Object.assign({enableShippingAddress:!0,flow:t?\"vault\":\"checkout\",useraction:\"commit\"},n))}).then(e=>{var t;return null===(t=this.overlay)||void 0===t||t.remove(),e}).catch(e=>{var t;throw null===(t=this.overlay)||void 0===t||t.remove(),e})}getPaypalCheckout(e,t,n){return ra(this,void 0,void 0,function*(){const i=yield this.getClient(),r=yield this.braintreeScriptLoader.loadPaypalCheckout(),o={client:i};return this.paypalCheckout=yield r.create(o,(i,r)=>{var o;if(i)return n(i);const a=Object.assign(Object.assign({currency:e.currency},e.isCreditEnabled&&{\"enable-funding\":\"paylater\"}),{components:Jo.toString(),intent:e.intent,commit:null===(o=e.commit)||void 0===o||o});this.braintreeHostWindow.paypal?t(r):function(e,t){return Zo||(Zo=new Promise((n,i)=>{e.loadPayPalSDK(t,t=>{t?(Zo=null,i(t)):n(e)})})),Zo}(r,a).then(()=>t(r))}),this.paypalCheckout})}getDataCollector(e){return ra(this,void 0,void 0,function*(){const t=(null==e?void 0:e.paypal)?\"paypal\":\"default\";let n=this.dataCollectors[t];if(!n){try{const t=yield this.getClient(),i=yield this.braintreeScriptLoader.loadDataCollector(),r=Object.assign({client:t,kount:!0},e);n=yield i.create(r)}catch(e){if(!$r(e)||\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"!==e.code)throw e;n={deviceData:void 0,teardown:()=>Promise.resolve()}}this.dataCollectors[t]=n}return n})}getBraintreeEnv(e=!1){return e?Zr.Sandbox:Zr.Production}mapToBraintreeShippingAddressOverride(e){return{recipientName:`${e.firstName} ${e.lastName}`,line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,postalCode:e.postalCode,countryCode:e.countryCode,phone:e.phone}}mapToLegacyShippingAddress(e){const{email:t,phone:n,shippingAddress:i}=e,r=(null==i?void 0:i.recipientName)||\"\",[o,a]=r.split(\" \");return{email:t,first_name:o||\"\",last_name:a||\"\",phone_number:n,address_line_1:null==i?void 0:i.line1,address_line_2:null==i?void 0:i.line2,city:null==i?void 0:i.city,state:null==i?void 0:i.state,country_code:null==i?void 0:i.countryCode,postal_code:null==i?void 0:i.postalCode}}mapToLegacyBillingAddress(e){const{billingAddress:t,email:n,firstName:i,lastName:r,phone:o,shippingAddress:a}=e,s=t||a;return{email:n,first_name:i,last_name:r,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}removeElement(e){const t=e&&document.getElementById(e);t&&t.remove()}getSessionId(e){return ra(this,void 0,void 0,function*(){const{deviceData:t}=yield this.getDataCollector({riskCorrelationId:e});return t})}teardown(){return ra(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollectors.default),yield this.teardownModule(this.dataCollectors.paypal),this.dataCollectors={},yield this.teardownModule(this.paypalCheckout),this.paypalCheckout=void 0})}get3DS(){return ra(this,void 0,void 0,function*(){return this.threeDS||(this.threeDS=Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]).then(([e,t])=>t.create({client:e,version:2}))),this.threeDS})}getVenmoCheckout(e){return ra(this,void 0,void 0,function*(){if(!this.venmoCheckout){const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadVenmoCheckout(),i=Object.assign({client:t,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},e||{});this.venmoCheckout=yield new Promise((e,t)=>{n.create(i,(n,i)=>n?t(n):i.isBrowserSupported()?void e(i):t(new qr))})}return this.venmoCheckout})}verifyCard(e,t,n){return ra(this,void 0,void 0,function*(){const i=yield this.tokenizeCard(e,t);return this.challenge3DSVerification(i,n)})}tokenizeCard(e,t){return ra(this,void 0,void 0,function*(){const{paymentData:n}=e;if(!function(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;return\"object\"==typeof t.ccExpiry&&null!==t.ccExpiry&&\"string\"==typeof t.ccNumber&&\"string\"==typeof t.ccName}(n))throw new Yo([\"payment.paymentData\"]);const i=this.getErrorsRequiredFields(n);if(!f(i))throw new Ko(i);const r=this.mapToCreditCard(n,t),o=yield this.getClient(),{creditCards:a}=yield o.request(r);return{nonce:a[0].nonce,bin:a[0].details.bin}})}challenge3DSVerification(e,t){return ra(this,void 0,void 0,function*(){const n=yield this.get3DS();return this.present3DSChallenge(n,t,e)})}teardownModule(e){return e?e.teardown():Promise.resolve()}getClientTokenOrThrow(){if(!this.clientToken)throw new lr(sr.PaymentNotInitialized);return this.clientToken}getErrorsRequiredFields(e){const{ccNumber:t,ccExpiry:n}=e,i={};return t||(i.ccNumber=[{message:\"Credit card number is required\",type:\"required\"}]),n||(i.ccExpiry=[{message:\"Expiration date is required\",type:\"required\"}]),i}mapToCreditCard(e,t){return{data:{creditCard:{cardholderName:e.ccName,number:e.ccNumber,cvv:e.ccCvv,expirationDate:`${e.ccExpiry.month}/${e.ccExpiry.year}`,options:{validate:!1},billingAddress:t&&{countryCodeAlpha2:t.countryCode,locality:t.city,countryName:t.country,postalCode:t.postalCode,streetAddress:t.address2?`${t.address1} ${t.address2}`:t.address1}}},endpoint:\"payment_methods/credit_cards\",method:\"post\"}}present3DSChallenge(e,t,n){const{nonce:i,bin:r}=n;if(!this.threeDSecureOptions||!i)throw new lr(sr.PaymentNotInitialized);const{addFrame:o,removeFrame:a,challengeRequested:s=!0,additionalInformation:d}=this.threeDSecureOptions,c=()=>ra(this,void 0,void 0,function*(){const t=yield e.cancelVerifyCard();return l.cancel(new oo),t}),u=t.toFixed(2),l=new $o(e.verifyCard({addFrame:(e,t)=>{o&&o(e,t,c)},amount:Number(u),bin:r,challengeRequested:s,nonce:i,removeFrame:a,onLookupComplete:(e,t)=>{t()},collectDeviceData:!0,additionalInformation:d}));return l.promise}}function aa(e){const{color:t,fundingicons:n,height:i=40,layout:r,shape:o,size:a,tagline:s}=e||{},d={color:t,fundingicons:n,height:sa(i),layout:r,shape:o||\"rect\",size:a,tagline:s};return R(d,S)}function sa(e){const t=Number(e);return!t||Number.isNaN(t)?40:t>55?55:t<25?25:t}function da(e){return{recipientName:`${e.firstName} ${e.lastName}`,line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,postalCode:e.postalCode,countryCode:e.countryCode,phone:e.phone}}var ca=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ua{constructor(e,t,n,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=n,this.braintreeHostWindow=i}initialize(e){return ca(this,void 0,void 0,function*(){const{braintreepaypal:t,containerId:n,methodId:i}=e;if(!i)throw new br('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new br('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new br('Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.');let r,o=this.paymentIntegrationService.getState();if(t.buyNowInitializeOptions){if(!t.currencyCode)throw new br('Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.');r=t.currencyCode}else yield this.paymentIntegrationService.loadDefaultCheckout(),o=this.paymentIntegrationService.getState(),r=o.getCartOrThrow().currency.code;const a=o.getPaymentMethodOrThrow(i),{clientToken:s,config:d,initializationData:c}=a;if(!s||!c)throw new dr(ar.MissingPaymentMethod);const u={currency:r,intent:c.intent,isCreditEnabled:c.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(u,e=>{this.renderPayPalButton(e,t,n,i,!!d.testMode)},e=>this.handleError(e,n,t.onError))})}deinitialize(){return ca(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}renderPayPalButton(e,t,n,i,r){const{style:o,shouldProcessPayment:a,onAuthorizeError:s,onEligibilityFailure:d}=t,{paypal:c}=this.braintreeHostWindow;if(c){const u=c.Buttons({env:r?\"sandbox\":\"production\",fundingSource:c.FUNDING.PAYPAL,style:aa(o),createOrder:()=>this.setupPayment(e,t,i),onApprove:t=>this.tokenizePayment(t,e,i,a,s)});u.isEligible()?u.render(`#${n}`):d&&\"function\"==typeof d&&d()}else this.braintreeIntegrationService.removeElement(n)}setupPayment(e,t,n){var i;return ca(this,void 0,void 0,function*(){const{onPaymentError:r,shippingAddress:o,buyNowInitializeOptions:a}=t;try{const r=\"function\"==typeof(null==a?void 0:a.getBuyNowCartRequestBody)?yield this.createBuyNowCart(a.getBuyNowCartRequestBody()):void 0;this.buyNowCartId=null==r?void 0:r.id;const s=this.paymentIntegrationService.getState(),d=s.getCustomer(),c=s.getPaymentMethodOrThrow(n),u=r?r.cartAmount:s.getCartOrThrow().cartAmount,l=r?t.currencyCode:s.getCartOrThrow().currency.code,h=o||(null==d?void 0:d.addresses[0]),p=h?da(h):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:p,amount:u,currency:l,offerCredit:!1,intent:null===(i=c.initializationData)||void 0===i?void 0:i.intent})}catch(e){throw r&&($r(e)||e instanceof Se)&&r(e),e}})}tokenizePayment(e,t,n,i,r){return ca(this,void 0,void 0,function*(){try{const{deviceData:r}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),o=yield t.tokenizePayment(e),{details:a,nonce:s}=o,d=this.braintreeIntegrationService.mapToLegacyBillingAddress(a),c=this.braintreeIntegrationService.mapToLegacyShippingAddress(a);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",provider:n,action:i?\"process_payment\":\"set_external_checkout\",nonce:s,device_data:r,billing_address:JSON.stringify(d),shipping_address:JSON.stringify(c)},this.buyNowCartId&&{cart_id:this.buyNowCartId})),o}catch(e){throw r&&($r(e)||e instanceof Se)&&r(e),e}})}createBuyNowCart(e){return ca(this,void 0,void 0,function*(){if(!e)throw new dr(ar.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(e)}catch(e){throw new Er}})}handleError(e,t,n){if(this.braintreeIntegrationService.removeElement(t),!n||!$r(e))throw e;n(e)}}const la=wr(e=>{const t=window,i=new xr(e),r=new oa(new ro(le(),t,i),t);return new ua(e,n(),r,t)},[{id:\"braintreepaypal\"}]);var ha=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class pa{constructor(e,t,n,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=n,this.braintreeHostWindow=i}initialize(e){return ha(this,void 0,void 0,function*(){const{braintreepaypalcredit:t,containerId:n,methodId:i}=e;if(!i)throw new br('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new br('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new br('Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.');let r,o=this.paymentIntegrationService.getState();if(t.buyNowInitializeOptions){if(!t.currencyCode)throw new br('Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.');r=t.currencyCode}else yield this.paymentIntegrationService.loadDefaultCheckout(),o=this.paymentIntegrationService.getState(),r=o.getCartOrThrow().currency.code;const a=o.getPaymentMethodOrThrow(i),{clientToken:s,config:d,initializationData:c}=a;if(!s||!c)throw new dr(ar.MissingPaymentMethod);const u={currency:r,intent:c.intent,isCreditEnabled:c.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(u,e=>{this.renderPayPalButton(e,t,n,i,!!d.testMode)},e=>this.handleError(e,n,t.onError))})}deinitialize(){return ha(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}renderPayPalButton(e,t,n,i,r){const{style:o,shouldProcessPayment:a,onAuthorizeError:s,onEligibilityFailure:d}=t,{paypal:c}=this.braintreeHostWindow;let u=!1;c&&[c.FUNDING.PAYLATER,c.FUNDING.CREDIT].forEach(l=>{const h=l===c.FUNDING.CREDIT?Object.assign({label:ta.CREDIT},aa(o)):aa(o);if(!u){const o=c.Buttons({env:r?\"sandbox\":\"production\",fundingSource:l,style:h,createOrder:()=>this.setupPayment(e,t,i),onApprove:t=>this.tokenizePayment(t,e,i,a,s)});o.isEligible()?(o.render(`#${n}`),u=!0):c.FUNDING.CREDIT&&d&&\"function\"==typeof d&&d()}}),c&&u||this.braintreeIntegrationService.removeElement(n)}setupPayment(e,t,n){var i;return ha(this,void 0,void 0,function*(){const{onPaymentError:r,shippingAddress:o,buyNowInitializeOptions:a}=t;try{const r=\"function\"==typeof(null==a?void 0:a.getBuyNowCartRequestBody)?yield this.createBuyNowCart(a.getBuyNowCartRequestBody()):void 0;this.buyNowCartId=null==r?void 0:r.id;const s=this.paymentIntegrationService.getState(),d=s.getCustomer(),c=s.getPaymentMethodOrThrow(n),u=r?r.cartAmount:s.getCartOrThrow().cartAmount,l=r?t.currencyCode:s.getCartOrThrow().currency.code,h=o||(null==d?void 0:d.addresses[0]),p=h?da(h):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:p,amount:u,currency:l,offerCredit:!0,intent:null===(i=c.initializationData)||void 0===i?void 0:i.intent})}catch(e){throw r&&($r(e)||e instanceof Se)&&r(e),e}})}tokenizePayment(e,t,n,i,r){return ha(this,void 0,void 0,function*(){try{const{deviceData:r}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),o=yield t.tokenizePayment(e),{details:a,nonce:s}=o,d=this.braintreeIntegrationService.mapToLegacyBillingAddress(a),c=this.braintreeIntegrationService.mapToLegacyShippingAddress(a);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",provider:n,action:i?\"process_payment\":\"set_external_checkout\",nonce:s,device_data:r,billing_address:JSON.stringify(d),shipping_address:JSON.stringify(c)},this.buyNowCartId&&{cart_id:this.buyNowCartId})),o}catch(e){throw r&&($r(e)||e instanceof Se)&&r(e),e}})}createBuyNowCart(e){return ha(this,void 0,void 0,function*(){if(!e)throw new dr(ar.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(e)}catch(e){throw new Er}})}handleError(e,t,n){if(this.braintreeIntegrationService.removeElement(t),!n||!$r(e))throw e;n(e)}}const ga=wr(e=>{const t=window,i=new xr(e),r=new oa(new ro(le(),t,i),t);return new pa(e,n(),r,t)},[{id:\"braintreepaypalcredit\"}]);var ma=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ya{constructor(e,t,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=n}initialize(e){return ma(this,void 0,void 0,function*(){const{containerId:t,methodId:n}=e;if(!n)throw new br('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new br('Unable to initialize payment because \"options.containerId\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const i=this.paymentIntegrationService.getState(),{clientToken:r,initializationData:o,config:a}=i.getPaymentMethodOrThrow(n);if(!r||!o)throw new dr(ar.MissingPaymentMethod);this.braintreeSdk.initialize(r);const s=yield this.braintreeSdk.getBraintreeVisaCheckout(),{currency:{code:d},cartAmount:c}=i.getCartOrThrow(),u=yield this.braintreeSdk.getVisaCheckoutSdk(a.testMode),l=s.createInitOptions({paymentRequest:{currencyCode:d,subtotal:String(c)},settings:{shipping:{collectShipping:!0}}});this.createSignInButton(t),yield u.init(l),u.on(\"payment.success\",e=>ma(this,void 0,void 0,function*(){yield this.paymentSuccess(s,e)}))})}deinitialize(){return Promise.resolve()}paymentSuccess(e,t){return ma(this,void 0,void 0,function*(){return Promise.all([e.tokenize(t),this.braintreeSdk.getDataCollectorOrThrow()]).then(([e,t])=>{const n=this.paymentIntegrationService.getState(),i=n.getShippingAddress(),r=n.getBillingAddress(),{shippingAddress:o=this.toVisaCheckoutAddress(i),billingAddress:a=this.toVisaCheckoutAddress(r)}=e;return this.postForm(Object.assign(Object.assign({},e),{shippingAddress:o,billingAddress:a}),t)})})}postForm(e,t){const{userData:n,billingAddress:i,shippingAddress:r,details:o}=e,{userEmail:a}=n,{deviceData:s}=t;return this.formPoster.postForm(\"/checkout.php\",{payment_type:e.type,nonce:e.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,i)),shipping_address:JSON.stringify(this.getAddress(a,r))})}toVisaCheckoutAddress(e){return e?{firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phone,streetAddress:e.address1,extendedAddress:e.address2,locality:e.city,region:e.stateOrProvinceCode,countryCode:e.countryCode,postalCode:e.postalCode}:{}}getAddress(e,t={}){return{email:e,first_name:t.firstName,last_name:t.lastName,phone_number:t.phoneNumber,address_line_1:t.streetAddress,address_line_2:t.extendedAddress,city:t.locality,state:t.region,country_code:t.countryCode,postal_code:t.postalCode}}createSignInButton(e){const t=document.querySelector(`#${e}`);if(!t)throw new Error(\"Need a container to place the button\");return this.insertVisaCheckoutButton(t)}insertVisaCheckoutButton(e){const t=document.createElement(\"div\");return t.style.display=\"flex\",t.style.flexDirection=\"column\",t.style.alignItems=\"flex-end\",t.innerHTML='\\n            <img\\n                alt=\"Visa Checkout\"\\n                class=\"v-button\"\\n                role=\"button\"\\n                src=\"https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178\"\\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>',e.appendChild(t),t}}const fa=wr(e=>{const t=window,i=new xr(e),r=new eo(new ro(le(),t,i));return new ya(e,n(),r)},[{id:\"braintreevisacheckout\"}]);function _a(e){const{billingAddress:t,email:n,firstName:i,lastName:r,phone:o,shippingAddress:a}=e,s=t||a;return{email:n,first_name:i,last_name:r,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}function va(e){const{email:t,phone:n,shippingAddress:i}=e,r=(null==i?void 0:i.recipientName)||\"\",[o,a]=r.split(\" \");return{email:t,first_name:o||\"\",last_name:a||\"\",phone_number:n,address_line_1:null==i?void 0:i.line1,address_line_2:null==i?void 0:i.line2,city:null==i?void 0:i.city,state:null==i?void 0:i.state,country_code:null==i?void 0:i.countryCode,postal_code:null==i?void 0:i.postalCode}}var Sa=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};const Ca=e=>{const{color:t,height:n}=e;return{backgroundColor:(i=t||\"\",i===ea.WHITE?\"#FFFFFF\":\"#3D95CE\"),backgroundPosition:\"50% 50%\",backgroundSize:\"80px auto\",backgroundImage:`url(\"/app/assets/img/payment-providers/venmo-logo-${t===ea.WHITE?ea.BLUE:ea.WHITE}.svg\")`,backgroundRepeat:\"no-repeat\",borderRadius:\"4px\",cursor:\"pointer\",transition:\"0.2s ease\",minHeight:`${n||40}px`,minWidth:\"150px\",height:\"100%\",width:\"100%\",border:t===ea.WHITE?\"1px solid black\":\"none\"};var i};class Ia{constructor(e,t,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=n,this.onError=T}initialize(e){return Sa(this,void 0,void 0,function*(){const{braintreevenmo:t,containerId:n,methodId:i}=e;if(!i)throw new br('Unable to initialize payment because \"options.methodId\" argument is not provided.');const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i),{clientToken:o,initializationData:a}=r,{paymentButtonStyles:s}=a,{cartButtonStyles:d}=s||{},c=(null==t?void 0:t.style)||d;if(!o||!a)throw new dr(ar.MissingPaymentMethod);if(!n)throw new br('Unable to initialize payment because \"options.containerId\" argument is not provided.');yield this.paymentIntegrationService.loadDefaultCheckout(),this.onError=(null==t?void 0:t.onError)||this.handleError,this.braintreeSdk.initialize(o);try{const e=yield this.braintreeSdk.getVenmoCheckoutOrThrow();this.renderVenmoButton(e,n,null==t?void 0:t.buyNowInitializeOptions,c)}catch(e){(function(e){return\"object\"==typeof e&&null!==e&&\"name\"in e&&\"BraintreeError\"===e.name}(e)||function(e){return e instanceof qr}(e))&&this.handleInitializationVenmoError(e,n)}})}deinitialize(){return Sa(this,void 0,void 0,function*(){return yield this.braintreeSdk.deinitialize(),Promise.resolve()})}handleError(e){throw new Error(e.message)}createBuyNowCart(e){return Sa(this,void 0,void 0,function*(){if(\"function\"==typeof(null==e?void 0:e.getBuyNowCartRequestBody)){const t=null==e?void 0:e.getBuyNowCartRequestBody();if(!t)throw new dr(ar.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new Er}}})}handleInitializationVenmoError(e,t){return this.removeVenmoContainer(t),this.onError(e)}removeVenmoContainer(e){const t=document.getElementById(e);t&&t.remove()}renderVenmoButton(e,t,n,i){const r=document.getElementById(t),{color:o}=i||{};if(!r)throw new br(\"Unable to create wallet button without valid container ID.\");r.setAttribute(\"aria-label\",\"Venmo\"),Object.assign(r.style,Ca(i||{})),r.addEventListener(\"click\",()=>Sa(this,void 0,void 0,function*(){r.setAttribute(\"disabled\",\"true\");const t=yield this.createBuyNowCart(n);e.tokenize&&e.tokenize((e,n)=>Sa(this,void 0,void 0,function*(){r.removeAttribute(\"disabled\"),e&&this.onError(e),yield this.handlePostForm(n,null==t?void 0:t.id)}))})),o===ea.BLUE&&(r.addEventListener(\"mouseenter\",()=>{r.style.backgroundColor=\"#0a7fc2\"}),r.addEventListener(\"mouseleave\",()=>{r.style.backgroundColor=Ca(i||{}).backgroundColor}))}handlePostForm(e,t){return Sa(this,void 0,void 0,function*(){const{deviceData:n}=yield this.braintreeSdk.getDataCollectorOrThrow(),{nonce:i,details:r}=e;this.formPoster.postForm(\"/checkout.php\",Object.assign({nonce:i,provider:\"braintreevenmo\",payment_type:\"paypal\",device_data:n,action:\"set_external_checkout\",billing_address:JSON.stringify(_a(r)),shipping_address:JSON.stringify(va(r))},t&&{cart_id:t}))})}}const wa=wr(e=>{const t=window,i=le(),r=new xr(e),o=new ro(i,t,r),a=new eo(o);return new Ia(e,n(),a)},[{id:\"braintreevenmo\"}]);var ba;!function(e){e.ADYEN_V2=\"googlepayadyenv2\",e.ADYEN_V3=\"googlepayadyenv3\",e.AUTHORIZE_NET=\"googlepayauthorizenet\",e.BNZ=\"googlepaybnz\",e.BRAINTREE=\"googlepaybraintree\",e.PAYPAL_COMMERCE=\"googlepaypaypalcommerce\",e.BIGCOMMERCE_PAYMENTS=\"googlepay_bigcommerce_payments\",e.CHECKOUT_COM=\"googlepaycheckoutcom\",e.CYBERSOURCE_V2=\"googlepaycybersourcev2\",e.ORBITAL=\"googlepayorbital\",e.STRIPE=\"googlepaystripe\",e.STRIPE_UPE=\"googlepaystripeupe\",e.STRIPE_OCS=\"googlepaystripeocs\",e.WORLDPAY_ACCESS=\"googlepayworldpayaccess\",e.TD_ONLINE_MART=\"googlepaytdonlinemart\"}(ba||(ba={}));const Ea=function(e,t,n){return t&&n?Pa(0,t,n):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const i=Object.getOwnPropertyDescriptor(e.prototype,n);i&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,Pa(e.prototype,n,i))}),t}(e)};function Pa(e,t,n){if(\"function\"!=typeof n.value)return n;let i=n.value;return{get(){const e=i.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){i=e}}}class Oa{constructor(e){if(!e)throw new Error(\"Currency settings missing\");const{decimalPlaces:t,symbolLocation:n,symbol:i,thousandsSeparator:r,decimalSeparator:o}=e;if(\"string\"!=typeof n||\"string\"!=typeof i||\"string\"!=typeof r||\"string\"!=typeof o||\"string\"!=typeof t)throw new br(\"Invalid currency settings provided\");this._decimalPlaces=parseInt(t,10),this._symbolLocation=n,this._symbol=i,this._thousandsSeparator=r,this._decimalSeparator=o}format(e){if(\"number\"!=typeof e)throw new br(\"Invalid amount provided\");const t=this._formatNumber(e),n=this._formatCurrency(t);return e<0?`-${n}`:n}_formatNumber(e){const t=Math.abs(e),[n,i=\"\"]=this._toFixed(t,this._decimalPlaces).split(\".\"),r=n.replace(/\\B(?=(\\d{3})+(?!\\d))/g,this._thousandsSeparator);return this._decimalPlaces<1?r:[r,i].join(this._decimalSeparator)}_formatCurrency(e){return\"left\"===this._symbolLocation.toLowerCase()?`${this._symbol}${e}`:`${e}${this._symbol}`}_toFixed(e,t){return(+`${Math.round(+`${e}e${t}`)}e${-t}`).toFixed(t)}}let Aa=class{constructor(e){this._storeConfig=e,this._customerFormatter=new Oa(this._storeConfig.shopperCurrency),this._storeFormatter=new Oa(this._storeConfig.currency)}toCustomerCurrency(e){const t=this._storeConfig.shopperCurrency.exchangeRate;return this._customerFormatter.format(e*t)}toStoreCurrency(e){return this._storeFormatter.format(e)}};Aa=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Ea],Aa);const Ta=Aa;function ka(){if(\"undefined\"==typeof window)return!1;if(function(e){return\"ReactNativeWebView\"in e}(window))return!0;const e=navigator.userAgent||navigator.vendor||(function(e){return\"opera\"in e}(window)?window.opera:\"\"),t=/android.+; wv/i.test(e),n=/iPhone|iPod|iPad/i.test(e)&&/AppleWebKit/i.test(e)&&!/Safari/i.test(e);return t||n}var Ra,Da,Ma,Na,La,za,Ua,Fa,Ba;function xa(e){return e in za}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Ra||(Ra={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(Da||(Da={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(Ma||(Ma={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(Na||(Na={})),function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(La||(La={})),function(e){e.AMEX=\"AMEX\",e.DISCOVER=\"DISCOVER\",e.INTERAC=\"INTERAC\",e.JCB=\"JCB\",e.MC=\"MASTERCARD\",e.VISA=\"VISA\"}(za||(za={})),function(e){e.OFFER=\"OFFER\",e.PAYMENT_AUTHORIZATION=\"PAYMENT_AUTHORIZATION\",e.SHIPPING_ADDRESS=\"SHIPPING_ADDRESS\",e.SHIPPING_OPTION=\"SHIPPING_OPTION\"}(Ua||(Ua={})),function(e){e.OFFER_INVALID=\"OFFER_INVALID\",e.PAYMENT_DATA_INVALID=\"PAYMENT_DATA_INVALID\",e.SHIPPING_ADDRESS_INVALID=\"SHIPPING_ADDRESS_INVALID\",e.SHIPPING_ADDRESS_UNSERVICEABLE=\"SHIPPING_ADDRESS_UNSERVICEABLE\",e.SHIPPING_OPTION_INVALID=\"SHIPPING_OPTION_INVALID\",e.OTHER_ERROR=\"OTHER_ERROR\"}(Fa||(Fa={})),function(e){e.INITIALIZE=\"INITIALIZE\",e.SHIPPING_OPTION=\"SHIPPING_OPTION\",e.SHIPPING_ADDRESS=\"SHIPPING_ADDRESS\",e.OFFER=\"OFFER\"}(Ba||(Ba={}));var qa=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ja{constructor(e,t){this._gatewayIdentifier=e,this._paymentIntegrationService=t,this._isBuyNowFlow=!1,this._shouldRequestShipping=!0,this._isWebViewExperimentOn=null}mapToShippingAddressRequestBody({shippingAddress:e}){if(!e)return;const{company:t=\"\",phone:n=\"\"}=this._paymentIntegrationService.getState().getShippingAddress()||{};return this._mapToAddressRequestBody(e,t,n)}mapToBillingAddressRequestBody(e){const{billingAddress:t}=e.paymentMethodData.info;if(!t)return;const{company:n=\"\",phone:i=\"\",email:r,customFields:o=[]}=this._paymentIntegrationService.getState().getBillingAddress()||{};return Object.assign(Object.assign({},this._mapToAddressRequestBody(t,n,i,o)),{email:r||e.email})}mapToExternalCheckoutData(e){var t;const{paymentMethodData:{tokenizationData:{token:n},info:{cardNetwork:i,cardDetails:r}}}=e;if(!n)throw new dr(ar.MissingPaymentToken);return Promise.resolve(Object.assign({nonce:n,card_information:{type:i,number:r}},this._isBuyNowFlow&&{cart_id:null===(t=this._paymentIntegrationService.getState().getCart())||void 0===t?void 0:t.id}))}getRequiredData(){var e;return qa(this,void 0,void 0,function*(){const t={emailRequired:!0};if(!this._isShippingAddressRequired())return t;const n=yield this._paymentIntegrationService.loadShippingCountries(),i=null===(e=n.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code);return Object.assign(Object.assign({},t),{shippingAddressRequired:!0,shippingAddressParameters:Object.assign({phoneNumberRequired:!0},i&&{allowedCountryCodes:i}),shippingOptionRequired:!0})})}getCallbackIntents(){return this._isShippingAddressRequired()?[Ua.OFFER,Ua.SHIPPING_ADDRESS,Ua.SHIPPING_OPTION]:[Ua.OFFER]}getCallbackTriggers(){return{availableTriggers:[Ba.INITIALIZE,Ba.SHIPPING_ADDRESS,Ba.SHIPPING_OPTION,Ba.OFFER],initializationTrigger:[Ba.INITIALIZE],addressChangeTriggers:[Ba.INITIALIZE,Ba.SHIPPING_ADDRESS],shippingOptionsChangeTriggers:[Ba.SHIPPING_OPTION],offerChangeTriggers:[Ba.OFFER]}}getNonce(e){var t;const n=null===(t=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e).initializationData)||void 0===t?void 0:t.nonce;if(!n)throw new dr(ar.MissingPaymentToken);return Promise.resolve(n)}extraPaymentData(){return Promise.resolve(void 0)}getMerchantInfo(){const{googleMerchantName:e,googleMerchantId:t,platformToken:n}=this.getGooglePayInitializationData();return{merchantName:e,merchantId:t,authJwt:n}}getTransactionInfo(){let e;const{getCartOrThrow:t}=this._paymentIntegrationService.getState();e=this._isBuyNowFlow?this._getCurrencyCodeOrThrow():t().currency.code;const n=this.getGooglePayInitializationData().storeCountry;if(this.isWebViewWithRestrictions()){const t=this.getTotalPrice();return Object.assign(Object.assign({},n&&{countryCode:n}),{currencyCode:e,totalPrice:t,totalPriceStatus:La.ESTIMATED})}return Object.assign(Object.assign({},n&&{countryCode:n}),{currencyCode:e,totalPriceStatus:La.ESTIMATED,totalPrice:\"0\"})}isWebViewWithRestrictions(){return null!==this._isWebViewExperimentOn?this._isWebViewExperimentOn&&ka():ka()}setIsWebViewExperimentOn(e){this._isWebViewExperimentOn=e}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData().gatewayMerchantId;if(!e)throw new br(\"Unable to proceed, gatewayMerchantId is missing.\");return{gateway:this._gatewayIdentifier,gatewayMerchantId:e}}getCardParameters(){return{allowedAuthMethods:[\"PAN_ONLY\",\"CRYPTOGRAM_3DS\"],allowedCardNetworks:this.getPaymentMethod().supportedCards.filter(xa).map(e=>za[e]),billingAddressRequired:!0,billingAddressParameters:{format:\"FULL\",phoneNumberRequired:!0}}}initialize(e,t,n){return this._getPaymentMethodFn=e,this._isBuyNowFlow=Boolean(t),this._currencyCode=n,this._isBuyNowFlow&&this._getCurrencyCodeOrThrow(),Promise.resolve()}handleShippingAddressChange(e){var t,n,i,r;return qa(this,void 0,void 0,function*(){e&&(e.name=e.name||\"\",e.address1=e.address1||\"\");const o=this.mapToShippingAddressRequestBody({shippingAddress:e});o&&(yield this._paymentIntegrationService.updateShippingAddress(o));const a=this._paymentIntegrationService.getState(),s=a.getConsignments();if(!(null==s?void 0:s[0]))return;const d=s[0],c=a.getStoreConfigOrThrow();this._currencyService||(this._currencyService=new Ta(c));const u=(d.availableShippingOptions||[]).map(this._getGooglePayShippingOption.bind(this)),l=null===(t=d.availableShippingOptions)||void 0===t?void 0:t.find(e=>e.isRecommended);if(u.length){const e=(null===(n=d.selectedShippingOption)||void 0===n?void 0:n.id)||(null==l?void 0:l.id)||(null===(i=u[0])||void 0===i?void 0:i.id);return!(null===(r=d.selectedShippingOption)||void 0===r?void 0:r.id)&&u[0]&&(yield this.handleShippingOptionChange((null==l?void 0:l.id)||u[0].id)),{defaultSelectedOptionId:e,shippingOptions:u}}})}handleShippingOptionChange(e){return qa(this,void 0,void 0,function*(){if(\"shipping_option_unselected\"!==e)return this._paymentIntegrationService.selectShippingOption(e)})}getTotalPrice(){const{getCheckoutOrThrow:e,getCartOrThrow:t,getStoreConfigOrThrow:n}=this._paymentIntegrationService.getState(),{decimalPlaces:i}=t().currency,r=zr(n().checkoutSettings.features,\"PI-5075.google_pay_round_total_price_to_max_2_decimal_places\")?Math.min(i,2):i;return L(e().outstandingBalance,r).toFixed(r)}handleCoupons(e){return qa(this,void 0,void 0,function*(){const{redemptionCodes:t=[]}=e,{offers:n}=this.getAppliedCoupons()||{};let i;return yield t.reduce((e,t)=>qa(this,void 0,void 0,function*(){if(yield e,(n||[]).some(({redemptionCode:e})=>e===t))return;const r=yield this.applyCoupon(t);r&&(i=r)}),Promise.resolve()),yield(n||[]).reduce((e,n)=>qa(this,void 0,void 0,function*(){yield e,t.includes(n.redemptionCode)||(yield this._paymentIntegrationService.removeCoupon(n.redemptionCode))}),Promise.resolve()),{newOfferInfo:this.getAppliedCoupons(),error:i}})}getAppliedCoupons(){const e=this._paymentIntegrationService.getState(),{coupons:t}=e.getCheckout()||{};return{offers:(t||[]).map(e=>{const{displayName:t,code:n}=e;return{redemptionCode:n,description:t}})}}applyCoupon(e){return qa(this,void 0,void 0,function*(){let t;try{yield this._paymentIntegrationService.applyCoupon(e)}catch(e){return e instanceof Error&&(t={reason:Fa.OFFER_INVALID,message:e.message,intent:Ba.OFFER}),t}})}setShouldRequestShipping(e){this._shouldRequestShipping=e}getGooglePayInitializationData(){return ur(this.getPaymentMethod().initializationData,()=>new br(\"Missing initialization data.\"))}getPaymentMethod(){return ur(this._getPaymentMethodFn,()=>new lr(sr.PaymentNotInitialized))()}getGatewayIdentifier(){return this._gatewayIdentifier}setGatewayIdentifier(e){this._gatewayIdentifier=e||this.getGatewayIdentifier()}_isShippingAddressRequired(){const{getCartOrThrow:e,getStoreConfigOrThrow:t,getShippingAddress:n}=this._paymentIntegrationService.getState(),i=t();let r;return r=zr(i.checkoutSettings.features,\"PI-4290.google_pay_require_shipping_address\")?this._shouldRequestShipping:void 0===n(),r&&(o=e(),a=i,!!o&&(!!o.lineItems.physicalItems.some(e=>e.isShippingRequired)||!(!a||!o.lineItems.customItems)&&o.lineItems.customItems.length>0));var o,a}_mapToAddressRequestBody(e,t,n,i){const{name:r,address1:o,address2:a,address3:s,locality:d,administrativeArea:c,countryCode:u,postalCode:l,phoneNumber:h}=e,[p,g]=this._getFirstAndLastName(r);return{firstName:p,lastName:g,company:t,address1:o,address2:`${a} ${s}`.trim(),city:d||c,stateOrProvince:c,stateOrProvinceCode:c,countryCode:u,postalCode:l,phone:h||n,customFields:i||[]}}_getFirstAndLastName(e){const t=e.split(\" \");return 1===t.length?[e,\"\"]:[t.slice(0,-1).join(\" \"),t[t.length-1]]}_getCurrencyCodeOrThrow(){return ur(this._currencyCode,()=>new br('Unable to initialize payment because \"options.currencyCode\" argument is not provided.'))}_getGooglePayShippingOption({id:e,cost:t,description:n,additionalDescription:i}){var r;return{id:e,label:`${(null===(r=this._currencyService)||void 0===r?void 0:r.toCustomerCurrency(t))||t} ${n}`,description:i}}}var Ga=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Va extends ja{constructor(e,t){super(\"braintree\",e),this._braintreeSdk=t,this._methodId=ba.BRAINTREE,this._service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return Ga(this,void 0,void 0,function*(){yield i.initialize.call(this,e,t,n);let r=i.getPaymentMethod.call(this);if(r.clientToken||(r=(yield this._service.loadPaymentMethod(this._methodId)).getPaymentMethodOrThrow(this._methodId)),!r.clientToken||!r.initializationData)throw new dr(ar.MissingPaymentMethod);return this._braintreeSdk.initialize(r.clientToken),this._braintreeGooglePayment=yield this._braintreeSdk.getBraintreeGooglePayment(),Promise.resolve()})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});var n;return Ga(this,void 0,void 0,function*(){const i=yield t.getNonce.call(this,e),{clientToken:r,initializationData:o}=t.getPaymentMethod.call(this);if(!r||!o||!(null===(n=o.card_information)||void 0===n?void 0:n.bin))throw new dr(ar.MissingPaymentMethod);const{isThreeDSecureEnabled:a,card_information:{bin:s,isNetworkTokenized:d}}=o;if(a&&!d){const e=yield this._braintreeSdk.getBraintreeThreeDS(),{orderAmount:t}=this._service.getState().getOrderOrThrow();return(yield this._braintreePresent3DSChallenge(e,t,i,s)).nonce}return i})}extraPaymentData(){return Ga(this,void 0,void 0,function*(){return{deviceSessionId:yield this._getBraintreeDeviceData()}})}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return Ga(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let i;try{i=JSON.parse(n.nonce)}catch(e){throw new br(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"androidPayCards\"in e}(e))throw new dr(ar.MissingPaymentToken)}(i),n.nonce=i.androidPayCards[0].nonce,n.card_information.bin=i.androidPayCards[0].details.bin,n.card_information.isNetworkTokenized=i.androidPayCards[0].details.isNetworkTokenized,n})}getCardParameters(){return super.getCardParameters()}getPaymentGatewayParameters(){const e=Object.create(null,{getMerchantInfo:{get:()=>super.getMerchantInfo},getTransactionInfo:{get:()=>super.getTransactionInfo},getRequiredData:{get:()=>super.getRequiredData}});return Ga(this,void 0,void 0,function*(){return this.getBraintreeGooglePayment().createPaymentDataRequest(Object.assign({merchantInfo:e.getMerchantInfo.call(this),transactionInfo:e.getTransactionInfo.call(this),cardRequirements:{billingAddressRequired:!0,billingAddressFormat:\"FULL\"}},yield e.getRequiredData.call(this))).paymentMethodTokenizationParameters.parameters})}getBraintreeGooglePayment(){if(!this._braintreeGooglePayment)throw new dr(ar.MissingPaymentMethod);return this._braintreeGooglePayment}_getBraintreeDeviceData(){return Ga(this,void 0,void 0,function*(){const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e})}_braintreePresent3DSChallenge(e,t,n,i){return new $o(e.verifyCard({amount:t,bin:i,nonce:n,onLookupComplete:(e,t)=>{t()}})).promise}}class Ha extends Se{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}var Wa=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ya{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t}initialize(e){var t,n,i;return Wa(this,void 0,void 0,function*(){if(!e.methodId||(r=e.methodId,!Object.values(ba).includes(r)))throw new br('Unable to proceed because \"methodId\" is not a valid key.');var r;if(this._methodId=e.methodId,!e.containerId)throw new br('Unable to proceed because \"containerId\" is not a valid key.');const o=e[this._getMethodOrThrow()];if(!o)throw new br(\"Unable to proceed without valid options.\");const{buyNowInitializeOptions:a,currencyCode:s,buttonColor:d,buttonType:c,onError:u}=o;let l,h=this._paymentIntegrationService.getState();try{l=h.getPaymentMethodOrThrow(this._getMethodOrThrow())}catch(e){h=yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodOrThrow()),l=h.getPaymentMethodOrThrow(this._getMethodOrThrow())}if(this._countryCode=null===(t=l.initializationData)||void 0===t?void 0:t.storeCountry,this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(n=l.initializationData)||void 0===n?void 0:n.isWebViewExperimentOn)),a){if(!s)throw new br('Unable to initialize payment because \"options.currencyCode\" argument is not provided.');this._currencyCode=s,this._buyNowInitializeOptions=a,yield this._googlePayPaymentProcessor.initialize(()=>l,this._getGooglePayClientOptions(),!!a,s)}else yield this._paymentIntegrationService.loadDefaultCheckout(),yield this._googlePayPaymentProcessor.initialize(()=>l,this._getGooglePayClientOptions());this._paymentButton=null!==(i=this._paymentButton)&&void 0!==i?i:this._googlePayPaymentProcessor.addPaymentButton(e.containerId,{buttonColor:null!=d?d:\"default\",buttonType:null!=c?c:\"plain\",onClick:this._handleClick(u)})})}deinitialize(){var e;return null===(e=this._paymentButton)||void 0===e||e.remove(),this._paymentButton=void 0,this._methodId=void 0,Promise.resolve()}_handleClick(e){return t=>Wa(this,void 0,void 0,function*(){t.preventDefault();try{this._buyNowInitializeOptions?yield this._createBuyNowCartOrThrow(this._buyNowInitializeOptions):yield this._paymentIntegrationService.loadDefaultCheckout(),yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheet()}catch(t){let n=t;if(function(e){return\"object\"==typeof e&&null!==e&&\"statusCode\"in e}(t)){if(\"CANCELED\"===t.statusCode)throw new oo;n=new Ha(JSON.stringify(t))}throw null==e||e(new Ha(\"An error occurred while requesting your Google Pay payment details.\")),n}})}_interactWithPaymentSheet(){var e;return Wa(this,void 0,void 0,function*(){const t=yield this._googlePayPaymentProcessor.showPaymentSheet(),n=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(t),i=this._googlePayPaymentProcessor.mapToShippingAddressRequestBody(t),r=\"/embedded-checkout\"===window.location.pathname?this._paymentIntegrationService.getState().getStoreConfigOrThrow().links.siteLink:void 0;n&&(yield this._paymentIntegrationService.updateBillingAddress(n)),i&&!(null===(e=this._buyNowCart)||void 0===e?void 0:e.lineItems.digitalItems.length)&&(yield this._paymentIntegrationService.updateShippingAddress(i)),yield this._googlePayPaymentProcessor.setExternalCheckoutForm(this._getMethodOrThrow(),t,r)})}_getGooglePayClientOptions(){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:e,shippingAddress:t,shippingOptionData:n,offerData:i})=>Wa(this,void 0,void 0,function*(){const{availableTriggers:r,addressChangeTriggers:o,shippingOptionsChangeTriggers:a,offerChangeTriggers:s}=this._googlePayPaymentProcessor.getCallbackTriggers();if(!r.includes(e))return;const d=o.includes(e)?yield this._googlePayPaymentProcessor.handleShippingAddressChange(t):void 0;a.includes(e)&&(yield this._googlePayPaymentProcessor.handleShippingOptionChange(n.id));const{newOfferInfo:c,error:u}=s.includes(e)?yield this._googlePayPaymentProcessor.handleCoupons(i):{},l=u;return this._buyNowInitializeOptions?this._getBuyNowTransactionInfo(d,c,l):this._getTransactionInfo(d,c,l)})}}}_createBuyNowCartOrThrow(e){return Wa(this,void 0,void 0,function*(){if(\"function\"==typeof(null==e?void 0:e.getBuyNowCartRequestBody)){const t=e.getBuyNowCartRequestBody();try{this._buyNowCart=yield this._paymentIntegrationService.createBuyNowCart(t),yield this._paymentIntegrationService.loadCheckout(this._buyNowCart.id)}catch(e){if(\"string\"==typeof e)throw new Er(e);throw e}}})}_getBuyNowTransactionInfo(e,t,n){if(!this._buyNowCart)return;const{cartAmount:i}=this._buyNowCart,r=this._googlePayPaymentProcessor.getTotalPrice();return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},this._countryCode&&{countryCode:this._countryCode}),{currencyCode:this._getCurrencyCodeOrThrow(),totalPrice:r||String(i),totalPriceStatus:La.FINAL})},e&&{newShippingOptionParameters:e}),t&&{newOfferInfo:t}),n&&{error:n})}_getTransactionInfo(e,t,n){return Wa(this,void 0,void 0,function*(){yield this._paymentIntegrationService.loadCheckout();const i=this._googlePayPaymentProcessor.getTotalPrice(),{code:r}=this._paymentIntegrationService.getState().getCartOrThrow().currency;return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},this._countryCode&&{countryCode:this._countryCode}),{currencyCode:r,totalPriceStatus:La.FINAL,totalPrice:i})},e&&{newShippingOptionParameters:e}),t&&{newOfferInfo:t}),n&&{error:n})})}_getMethodOrThrow(){return ur(this._methodId,()=>new lr(sr.PaymentNotInitialized))}_getCurrencyCodeOrThrow(){return ur(this._currencyCode,()=>new br('Unable to initialize payment because \"options.currencyCode\" argument is not provided.'))}}var Ka=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class $a{constructor(e,t,n,i){this._scriptLoader=e,this._gateway=t,this._requestSender=n,this._formPoster=i,this._baseRequest={apiVersion:2,apiVersionMinor:0}}initialize(e,t,n,i){return Ka(this,void 0,void 0,function*(){this._paymentsClient=yield this._scriptLoader.getGooglePaymentsClient(e().config.testMode,t),yield this._gateway.initialize(e,n,i),this._buildButtonPayloads()})}initializeWidget(){return Ka(this,void 0,void 0,function*(){yield this._buildWidgetPayloads(),yield this._determineReadinessToPay(),this._prefetchGooglePaymentData()})}getNonce(e){return this._gateway.getNonce(e)}extraPaymentData(){return Ka(this,void 0,void 0,function*(){return this._gateway.extraPaymentData()})}addPaymentButton(e,t){const n=document.querySelector(`#${e}`);if(!n)return;const i=this._getPaymentsClient().createButton(Object.assign(Object.assign({},t),{allowedPaymentMethods:[this._getBaseCardPaymentMethod()]}));return n.appendChild(i)}showPaymentSheet(){return Ka(this,void 0,void 0,function*(){const e=this._getPaymentDataRequest();return this._getPaymentsClient().loadPaymentData(e)})}setExternalCheckoutXhr(e,t){return Ka(this,void 0,void 0,function*(){return this._setExternalCheckout(e,t)})}setExternalCheckoutForm(e,t,n){return Ka(this,void 0,void 0,function*(){return this._setExternalCheckout(e,t,!0,n)})}mapToBillingAddressRequestBody(e){return this._gateway.mapToBillingAddressRequestBody(e)}mapToShippingAddressRequestBody(e){return this._gateway.mapToShippingAddressRequestBody(e)}processAdditionalAction(e,t){return\"processAdditionalAction\"in this._gateway?this._gateway.processAdditionalAction(e,t):Promise.reject(e)}signOut(e){return Ka(this,void 0,void 0,function*(){yield this._requestSender.get(`/remote-checkout/${e}/signout`)})}getCallbackTriggers(){return this._gateway.getCallbackTriggers()}setShouldRequestShipping(e){return this._gateway.setShouldRequestShipping(e)}handleShippingAddressChange(e){return Ka(this,void 0,void 0,function*(){return this._gateway.handleShippingAddressChange(e)})}handleShippingOptionChange(e){return Ka(this,void 0,void 0,function*(){yield this._gateway.handleShippingOptionChange(e)})}handleCoupons(e){return Ka(this,void 0,void 0,function*(){return this._gateway.handleCoupons(e)})}getTotalPrice(){return this._gateway.getTotalPrice()}_setExternalCheckout(e,t,n=!1,i){return Ka(this,void 0,void 0,function*(){const r=\"/checkout.php\",o=Object.assign({action:\"set_external_checkout\",provider:e},yield this._gateway.mapToExternalCheckoutData(t));if(n)return new Promise(e=>{this._formPoster.postForm(i?`${i}/checkout`:r,Object.assign(Object.assign({},o),{card_information:JSON.stringify(o.card_information)}),e)});yield this._requestSender.post(r,{headers:Object.assign({Accept:\"text/html\",\"Content-Type\":\"application/x-www-form-urlencoded\"},Mr),body:o})})}isWebViewWithRestrictions(){return this._gateway.isWebViewWithRestrictions()}setIsWebViewExperimentOn(e){return this._gateway.setIsWebViewExperimentOn(e)}_prefetchGooglePaymentData(){const e=this._getPaymentDataRequest();e.transactionInfo=this._gateway.getTransactionInfo(),this._getPaymentsClient().prefetchPaymentData(e)}_determineReadinessToPay(){return Ka(this,void 0,void 0,function*(){try{const{result:e}=yield this._getPaymentsClient().isReadyToPay(this._getIsReadyToPayRequest());if(!1===e)throw new Ha(\"Google Pay is not supported by the current device and browser, please try another payment method.\")}catch(e){if(e instanceof Ha)throw e;throw new Ha}})}_buildButtonPayloads(){this._baseCardPaymentMethod={type:\"CARD\",parameters:this._gateway.getCardParameters()}}_buildWidgetPayloads(){return Ka(this,void 0,void 0,function*(){const e=this._getBaseCardPaymentMethod();this._cardPaymentMethod=Object.assign(Object.assign({},e),{tokenizationSpecification:{type:\"PAYMENT_GATEWAY\",parameters:yield this._gateway.getPaymentGatewayParameters()}});const t=this._gateway.isWebViewWithRestrictions()?{shippingOptionRequired:!1}:{callbackIntents:this._gateway.getCallbackIntents(),offerInfo:this._gateway.getAppliedCoupons()};this._paymentDataRequest=Object.assign(Object.assign(Object.assign(Object.assign({},this._baseRequest),{allowedPaymentMethods:[this._cardPaymentMethod],transactionInfo:this._gateway.getTransactionInfo(),merchantInfo:this._gateway.getMerchantInfo()}),yield this._gateway.getRequiredData()),t),this._isReadyToPayRequest=Object.assign(Object.assign({},this._baseRequest),{allowedPaymentMethods:[e]})})}_getBaseCardPaymentMethod(){return this._getOrThrow(this._baseCardPaymentMethod)}_getPaymentDataRequest(){return this._getOrThrow(this._paymentDataRequest)}_getIsReadyToPayRequest(){return this._getOrThrow(this._isReadyToPayRequest)}_getPaymentsClient(){return this._getOrThrow(this._paymentsClient)}_getOrThrow(e){return ur(e,()=>new lr(sr.PaymentNotInitialized))}}class Za{constructor(e){this._scriptLoader=e,this._window=window}getGooglePaymentsClient(e=!1,t){return n=this,i=void 0,o=function*(){if(yield this._scriptLoader.loadScript(\"https://pay.google.com/gp/p/js/pay.js\"),!this._window.google)throw new Cr;return void 0===this._paymentsClient&&(this._paymentsClient=new this._window.google.payments.api.PaymentsClient(Object.assign({environment:e?\"TEST\":\"PRODUCTION\"},null!=t?t:{}))),this._paymentsClient},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}function Ja(){return new Za(le())}const Qa=wr(t=>{const i=e(),r=window,o=new xr(t),a=new eo(new ro(le(),r,o));return new Ya(t,new $a(Ja(),new Va(t,a),i,n()))},[{id:\"googlepaybraintree\"}]),Xa=[\"ar_BH\",\"ar_DZ\",\"ar_EG\",\"ar_JO\",\"ar_KW\",\"ar_MA\",\"ar_OM\",\"ar_QA\",\"ar_SA\",\"ar_TN\",\"ar_YE\",\"ar_AE\",\"bg_BG\",\"cs_CZ\",\"da_DK\",\"da_FO\",\"da_GL\",\"de_AT\",\"de_CH\",\"de_DE\",\"de_LU\",\"el_GR\",\"en_AD\",\"en_AE\",\"en_AG\",\"en_AI\",\"en_AL\",\"en_AM\",\"en_AN\",\"en_AO\",\"en_AT\",\"en_AU\",\"en_AW\",\"en_AZ\",\"en_BB\",\"en_BE\",\"en_BH\",\"en_BJ\",\"en_BM\",\"en_BN\",\"en_BS\",\"en_BT\",\"en_BW\",\"en_BY\",\"en_BZ\",\"en_C2\",\"en_CA\",\"en_CD\",\"en_CG\",\"en_CH\",\"en_CI\",\"en_CK\",\"en_CL\",\"en_CM\",\"en_CN\",\"en_CO\",\"en_CR\",\"en_CV\",\"en_CY\",\"en_CZ\",\"en_DE\",\"en_DJ\",\"en_DK\",\"en_DM\",\"en_DO\",\"en_DZ\",\"en_EC\",\"en_EE\",\"en_EG\",\"en_ER\",\"en_ES\",\"en_ET\",\"en_FI\",\"en_FJ\",\"en_FK\",\"en_FM\",\"en_FO\",\"en_FR\",\"en_GA\",\"en_GB\",\"en_GD\",\"en_GE\",\"en_GF\",\"en_GI\",\"en_GL\",\"en_GM\",\"en_GN\",\"en_GP\",\"en_GR\",\"en_GT\",\"en_GW\",\"en_GY\",\"en_HK\",\"en_HN\",\"en_HR\",\"en_HU\",\"en_ID\",\"en_IE\",\"en_IL\",\"en_IN\",\"en_IS\",\"en_IT\",\"en_JM\",\"en_JO\",\"en_JP\",\"en_KE\",\"en_KG\",\"en_KH\",\"en_KI\",\"en_KM\",\"en_KN\",\"en_KR\",\"en_KW\",\"en_KY\",\"en_KZ\",\"en_LA\",\"en_LC\",\"en_LI\",\"en_LK\",\"en_LS\",\"en_LT\",\"en_LU\",\"en_LV\",\"en_MA\",\"en_MC\",\"en_MD\",\"en_ME\",\"en_MG\",\"en_MH\",\"en_MK\",\"en_ML\",\"en_MN\",\"en_MQ\",\"en_MR\",\"en_MS\",\"en_MT\",\"en_MU\",\"en_MV\",\"en_MW\",\"en_MY\",\"en_MZ\",\"en_NA\",\"en_NC\",\"en_NE\",\"en_NF\",\"en_NG\",\"en_NI\",\"en_NL\",\"en_NO\",\"en_NP\",\"en_NR\",\"en_NU\",\"en_NZ\",\"en_OM\",\"en_PA\",\"en_PE\",\"en_PF\",\"en_PG\",\"en_PH\",\"en_PL\",\"en_PM\",\"en_PN\",\"en_PT\",\"en_PW\",\"en_PY\",\"en_QA\",\"en_RE\",\"en_RO\",\"en_RS\",\"en_RU\",\"en_RW\",\"en_SA\",\"en_SB\",\"en_SC\",\"en_SE\",\"en_SG\",\"en_SH\",\"en_SI\",\"en_SJ\",\"en_SK\",\"en_SL\",\"en_SM\",\"en_SN\",\"en_SO\",\"en_SR\",\"en_ST\",\"en_SV\",\"en_SZ\",\"en_TC\",\"en_TD\",\"en_TG\",\"en_TH\",\"en_TJ\",\"en_TM\",\"en_TN\",\"en_TO\",\"en_TR\",\"en_TT\",\"en_TV\",\"en_TW\",\"en_TZ\",\"en_UA\",\"en_UG\",\"en_US\",\"en_UY\",\"en_VA\",\"en_VC\",\"en_VE\",\"en_VG\",\"en_VN\",\"en_VU\",\"en_WF\",\"en_WS\",\"en_YE\",\"en_YT\",\"en_ZA\",\"en_ZM\",\"en_ZW\",\"es_AD\",\"es_AI\",\"es_AO\",\"es_AR\",\"es_AW\",\"es_BB\",\"es_BJ\",\"es_BM\",\"es_BO\",\"es_BS\",\"es_BZ\",\"es_CD\",\"es_CG\",\"es_CK\",\"es_CL\",\"es_CO\",\"es_CR\",\"es_CV\",\"es_DJ\",\"es_DM\",\"es_DO\",\"es_DZ\",\"es_EC\",\"es_EG\",\"es_ER\",\"es_ES\",\"es_ET\",\"es_FJ\",\"es_FK\",\"es_FO\",\"es_GA\",\"es_GD\",\"es_GE\",\"es_GI\",\"es_GL\",\"es_GM\",\"es_GN\",\"es_GT\",\"es_GW\",\"es_GY\",\"es_HN\",\"es_IE\",\"es_JM\",\"es_JO\",\"es_KE\",\"es_KG\",\"es_KI\",\"es_KM\",\"es_KN\",\"es_KW\",\"es_KY\",\"es_KZ\",\"es_LC\",\"es_LI\",\"es_LS\",\"es_LU\",\"es_MA\",\"es_MG\",\"es_MH\",\"es_ML\",\"es_MR\",\"es_MS\",\"es_MU\",\"es_MW\",\"es_MX\",\"es_MZ\",\"es_NA\",\"es_NC\",\"es_NE\",\"es_NF\",\"es_NI\",\"es_NR\",\"es_NU\",\"es_NZ\",\"es_OM\",\"es_PA\",\"es_PE\",\"es_PF\",\"es_PG\",\"es_PM\",\"es_PN\",\"es_PW\",\"es_PY\",\"es_QA\",\"es_RS\",\"es_RW\",\"es_SA\",\"es_SB\",\"es_SC\",\"es_SH\",\"es_SJ\",\"es_SL\",\"es_SM\",\"es_SN\",\"es_SO\",\"es_SR\",\"es_ST\",\"es_SV\",\"es_SZ\",\"es_TC\",\"es_TD\",\"es_TG\",\"es_TJ\",\"es_TM\",\"es_TN\",\"es_TT\",\"es_TV\",\"es_UA\",\"es_UG\",\"es_US\",\"es_UY\",\"es_VA\",\"es_VC\",\"es_VE\",\"es_VG\",\"es_VU\",\"es_WF\",\"es_YE\",\"es_ZM\",\"et_EE\",\"fi_FI\",\"fr_AD\",\"fr_AE\",\"fr_AI\",\"fr_AM\",\"fr_AO\",\"fr_AW\",\"fr_AZ\",\"fr_BB\",\"fr_BE\",\"fr_BF\",\"fr_BI\",\"fr_BJ\",\"fr_BM\",\"fr_BS\",\"fr_BZ\",\"fr_CA\",\"fr_CD\",\"fr_CG\",\"fr_CH\",\"fr_CI\",\"fr_CK\",\"fr_CM\",\"fr_CV\",\"fr_DJ\",\"fr_DM\",\"fr_DO\",\"fr_DZ\",\"fr_EC\",\"fr_ER\",\"fr_ET\",\"fr_FJ\",\"fr_FK\",\"fr_FO\",\"fr_FR\",\"fr_GA\",\"fr_GD\",\"fr_GE\",\"fr_GF\",\"fr_GI\",\"fr_GL\",\"fr_GM\",\"fr_GN\",\"fr_GP\",\"fr_GT\",\"fr_GW\",\"fr_GY\",\"fr_HN\",\"fr_IE\",\"fr_JM\",\"fr_JO\",\"fr_KE\",\"fr_KG\",\"fr_KI\",\"fr_KM\",\"fr_KN\",\"fr_KW\",\"fr_KY\",\"fr_KZ\",\"fr_LC\",\"fr_LI\",\"fr_LS\",\"fr_LU\",\"fr_MA\",\"fr_MC\",\"fr_MG\",\"fr_MH\",\"fr_ML\",\"fr_MQ\",\"fr_MR\",\"fr_MS\",\"fr_MU\",\"fr_MW\",\"fr_MZ\",\"fr_NA\",\"fr_NC\",\"fr_NE\",\"fr_NF\",\"fr_NI\",\"fr_NR\",\"fr_NU\",\"fr_NZ\",\"fr_OM\",\"fr_PA\",\"fr_PE\",\"fr_PF\",\"fr_PG\",\"fr_PM\",\"fr_PN\",\"fr_PW\",\"fr_QA\",\"fr_RE\",\"fr_RS\",\"fr_RW\",\"fr_SA\",\"fr_SB\",\"fr_SC\",\"fr_SH\",\"fr_SJ\",\"fr_SL\",\"fr_SM\",\"fr_SN\",\"fr_SO\",\"fr_SR\",\"fr_ST\",\"fr_SV\",\"fr_SZ\",\"fr_TC\",\"fr_TD\",\"fr_TG\",\"fr_TJ\",\"fr_TM\",\"fr_TN\",\"fr_TT\",\"fr_TV\",\"fr_UA\",\"fr_UG\",\"fr_US\",\"fr_UY\",\"fr_VA\",\"fr_VC\",\"fr_VE\",\"fr_VG\",\"fr_VU\",\"fr_WF\",\"fr_YE\",\"fr_YT\",\"fr_ZA\",\"fr_ZM\",\"he_IL\",\"hu_HU\",\"id_ID\",\"it_IT\",\"ja_JP\",\"ko_KR\",\"lv_LV\",\"lt_LT\",\"ms_BN\",\"ms_MY\",\"nl_BE\",\"nl_NL\",\"pl_PL\",\"pt_BR\",\"pt_PT\",\"ro_RO\",\"ru_EE\",\"ru_LT\",\"ru_LV\",\"ru_RU\",\"ru_UA\",\"si_LK\",\"sk_SK\",\"sl_SI\",\"sq_AL\",\"sv_SE\",\"tl_PH\",\"th_TH\",\"tr_TR\",\"vi_VN\",\"zh_C2\",\"zh_CN\",\"zh_HK\",\"zh_TW\",\"zh_AD\",\"zh_AE\",\"zh_AI\",\"zh_AO\",\"zh_AW\",\"zh_BB\",\"zh_BH\",\"zh_BJ\",\"zh_BM\",\"zh_BS\",\"zh_BZ\",\"zh_CD\",\"zh_CG\",\"zh_CK\",\"zh_CL\",\"zh_CO\",\"zh_CV\",\"zh_DJ\",\"zh_DM\",\"zh_DO\",\"zh_DZ\",\"zh_EC\",\"zh_EG\",\"zh_ER\",\"zh_ET\",\"zh_FJ\",\"zh_FK\",\"zh_FO\",\"zh_GA\",\"zh_GD\",\"zh_GE\",\"zh_GI\",\"zh_GL\",\"zh_GM\",\"zh_GN\",\"zh_GT\",\"zh_GW\",\"zh_GY\",\"zh_HN\",\"zh_IE\",\"zh_JM\",\"zh_JO\",\"zh_KE\",\"zh_KG\",\"zh_KI\",\"zh_KM\",\"zh_KN\",\"zh_KW\",\"zh_KY\",\"zh_KZ\",\"zh_LC\",\"zh_LI\",\"zh_LS\",\"zh_LT\",\"zh_LU\",\"zh_MA\",\"zh_MG\",\"zh_MH\",\"zh_ML\",\"zh_MR\",\"zh_MS\",\"zh_MU\",\"zh_MW\",\"zh_MZ\",\"zh_NA\",\"zh_NC\",\"zh_NE\",\"zh_NF\",\"zh_NI\",\"zh_NR\",\"zh_NU\",\"zh_NZ\",\"zh_OM\",\"zh_PA\",\"zh_PE\",\"zh_PF\",\"zh_PG\",\"zh_PM\",\"zh_PN\",\"zh_PW\",\"zh_QA\",\"zh_RS\",\"zh_RW\",\"zh_SA\",\"zh_SB\",\"zh_SC\",\"zh_SH\",\"zh_SJ\",\"zh_SL\",\"zh_SM\",\"zh_SN\",\"zh_SO\",\"zh_SR\",\"zh_ST\",\"zh_SV\",\"zh_SZ\",\"zh_TC\",\"zh_TD\",\"zh_TG\",\"zh_TJ\",\"zh_TM\",\"zh_TN\",\"zh_TT\",\"zh_TV\",\"zh_UA\",\"zh_UG\",\"zh_US\",\"zh_UY\",\"zh_VA\",\"zh_VC\",\"zh_VE\",\"zh_VG\",\"zh_VU\",\"zh_WF\",\"zh_YE\",\"zh_ZA\",\"zh_ZM\"];function es(e){if(!e)return;let t;if(e.includes(\"-\")){const[n,i]=e.split(\"-\");t=`${n}_${i.toUpperCase()}`}else t=`${e}_${e.toUpperCase()}`;return Xa.includes(t)?t:void 0}var ts=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ns{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n,i){return ts(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const r=this.getPayPalFastlaneSdkConfiguration(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypalFastlaneSdk)throw new Cr}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i,r){return ts(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||r){const r=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i);yield this.loadPayPalSdk(r)}if(!this.window.paypalGooglePay)throw new Cr;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return ts(this,void 0,void 0,function*(){if(!this.window.paypalApms){const i=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.paypalApms)throw new Cr}return this.window.paypalApms})}getPayPalMessages(e,t,n){return ts(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const i=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.paypalMessages)throw new Cr;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return ts(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:i})})}getPayPalFastlaneSdkConfiguration(e,t,n,i){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new dr(ar.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:d,attributionId:c}=o,u=es(i);return{options:Object.assign({\"client-id\":s,\"merchant-id\":d,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t,intent:a},u&&{locale:u}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":c,\"data-sdk-client-token\":r}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i=!0){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new dr(ar.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:d,buyerCountry:c,attributionId:u,isHostedCheckoutEnabled:l,isDeveloperModeApplicable:h}=o,p=l||i,g=es(n);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":d,commit:p,components:[\"googlepay\"],currency:t,intent:a},h&&{\"buyer-country\":c}),g&&{locale:g}),attributes:{\"data-partner-attribution-id\":u,\"data-client-token\":r,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new dr(ar.MissingPaymentMethod);const{intent:r,clientId:o,merchantId:a,buyerCountry:s,attributionId:d,isDeveloperModeApplicable:c,availableAlternativePaymentMethods:u=[],enabledAlternativePaymentMethods:l=[]}=i,h=l,p=u.filter(e=>!l.includes(e)),g=es(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":a,\"enable-funding\":h.length>0?h:void 0,\"disable-funding\":p.length>0?p:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:r},c&&{\"buyer-country\":s}),g&&{locale:g}),attributes:{\"data-partner-attribution-id\":d,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new dr(ar.MissingPaymentMethod);const{clientId:r,merchantId:o,attributionId:a,isDeveloperModeApplicable:s,buyerCountry:d}=i,c=es(n);return{options:Object.assign(Object.assign({\"client-id\":r,\"merchant-id\":o,components:[\"messages\"],currency:t},s&&{\"buyer-country\":d}),c&&{locale:c}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":a}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}function is(e){if(!function(e){return!!e.initializationData&&\"attributionId\"in e.initializationData&&\"isVenmoEnabled\"in e.initializationData&&\"isGooglePayEnabled\"in e.initializationData&&\"isPayPalCreditAvailable\"in e.initializationData}(e))throw new dr(ar.MissingPaymentMethod)}var rs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class os extends ja{constructor(e,t){super(\"paypalsb\",e),this.payPalCommerceSdk=t,this.service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});var r,o,a,s,d;return rs(this,void 0,void 0,function*(){const c=this.service.getState(),u=null!==(o=null===(r=c.getStoreConfig())||void 0===r?void 0:r.currency.code)&&void 0!==o?o:n;if(!u)throw new dr(ar.MissingPaymentMethod);yield i.initialize.call(this,e,t,u);const l=i.getPaymentMethod.call(this);if(!l.initializationData)throw new dr(ar.MissingPaymentMethod);is(l);const h=yield this.payPalCommerceSdk.getPayPalGooglePaySdk(l,u,c.getLocale());this.googlepayConfig=yield h.Googlepay().config();const{allowedPaymentMethods:p}=this.googlepayConfig;this.setGatewayIdentifier(null===(d=null===(s=null===(a=p[0])||void 0===a?void 0:a.tokenizationSpecification)||void 0===s?void 0:s.parameters)||void 0===d?void 0:d.gateway)})}getPaymentGatewayParameters(){if(this.googlepayConfig){const{allowedPaymentMethods:e}=this.googlepayConfig,{gatewayMerchantId:t}=e[0].tokenizationSpecification.parameters;return{gateway:this.getGatewayIdentifier(),gatewayMerchantId:t}}return{gateway:this.getGatewayIdentifier()}}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return rs(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n})}}const as=wr(t=>new Ya(t,new $a(Ja(),new os(t,new ns(le())),e(),n())),[{id:\"googlepaypaypalcommerce\"}]);var ss=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ds{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n){return ss(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsFastlaneSdk){const i=this.getPayPalFastlaneSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.bigCommercePaymentsFastlaneSdk)throw new Cr}return this.window.bigCommercePaymentsFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i){return ss(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsGooglePay||i){const i=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.bigCommercePaymentsGooglePay)throw new Cr;return this.window.bigCommercePaymentsGooglePay})}getPayPalApmsSdk(e,t){return ss(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsApms){const n=this.getPayPalApmSdkConfiguration(e,t);if(yield this.loadPayPalSdk(n),!this.window.bigCommercePaymentsApms)throw new Cr}return this.window.bigCommercePaymentsApms})}getPayPalMessages(e,t){return ss(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsMessages){const n=this.getPayPalSdkMessagesConfiguration(e,t);yield this.loadPayPalSdk(n)}if(!this.window.bigCommercePaymentsMessages)throw new Cr;return this.window.bigCommercePaymentsMessages})}loadPayPalSdk({options:e,attributes:t}){return ss(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:i})})}getPayPalFastlaneSdkConfiguration(e,t,n){const{clientToken:i,initializationData:r}=e;if(!r||!r.clientId)throw new dr(ar.MissingPaymentMethod);const{intent:o,clientId:a,merchantId:s,attributionId:d}=r;return{options:{\"client-id\":a,\"merchant-id\":s,commit:!0,components:[\"fastlane\",\"three-domain-secure\"],currency:t,intent:o},attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"bigCommercePaymentsFastlaneSdk\",\"data-partner-attribution-id\":d,\"data-sdk-client-token\":i}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n=!0){const{clientToken:i,initializationData:r}=e;if(!r||!r.clientId)throw new dr(ar.MissingPaymentMethod);const{intent:o,clientId:a,merchantId:s,buyerCountry:d,attributionId:c,isHostedCheckoutEnabled:u,isDeveloperModeApplicable:l}=r,h=u||n;return{options:Object.assign({\"client-id\":a,\"merchant-id\":s,commit:h,components:[\"googlepay\"],currency:t,intent:o},l&&{\"buyer-country\":d}),attributes:{\"data-partner-attribution-id\":c,\"data-client-token\":i,\"data-namespace\":\"bigCommercePaymentsGooglePay\"}}}getPayPalApmSdkConfiguration(e,t){const{initializationData:n}=e;if(!n||!n.clientId)throw new dr(ar.MissingPaymentMethod);const{intent:i,clientId:r,merchantId:o,buyerCountry:a,attributionId:s,isDeveloperModeApplicable:d,availableAlternativePaymentMethods:c=[],enabledAlternativePaymentMethods:u=[]}=n,l=this.filterFundingOptions(u),h=this.filterFundingOptions(c.filter(e=>!u.includes(e)));return{options:Object.assign({\"client-id\":r,\"merchant-id\":o,\"enable-funding\":l.length>0?l:void 0,\"disable-funding\":h.length>0?h:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:i},d&&{\"buyer-country\":a}),attributes:{\"data-partner-attribution-id\":s,\"data-namespace\":\"bigCommercePaymentsApms\"}}}getPayPalSdkMessagesConfiguration(e,t){const{initializationData:n}=e;if(!n||!n.clientId)throw new dr(ar.MissingPaymentMethod);const{clientId:i,merchantId:r,attributionId:o,isDeveloperModeApplicable:a,buyerCountry:s}=n;return{options:Object.assign({\"client-id\":i,\"merchant-id\":r,components:[\"messages\"],currency:t},a&&{\"buyer-country\":s}),attributes:{\"data-namespace\":\"bigCommercePaymentsMessages\",\"data-partner-attribution-id\":o}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}var cs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class us extends ja{constructor(e,t){super(\"googlepay_bigcommerce_payments\",e),this.payPalSdkHelper=t,this.service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});var r,o,a,s,d;return cs(this,void 0,void 0,function*(){const c=null!==(o=null===(r=this.service.getState().getStoreConfig())||void 0===r?void 0:r.currency.code)&&void 0!==o?o:n;if(!c)throw new dr(ar.MissingPaymentMethod);yield i.initialize.call(this,e,t,c);const u=i.getPaymentMethod.call(this);if(!u.initializationData)throw new dr(ar.MissingPaymentMethod);is(u);const l=yield this.payPalSdkHelper.getPayPalGooglePaySdk(u,c);this.googlepayConfig=yield l.Googlepay().config();const{allowedPaymentMethods:h}=this.googlepayConfig;this.setGatewayIdentifier(null===(d=null===(s=null===(a=h[0])||void 0===a?void 0:a.tokenizationSpecification)||void 0===s?void 0:s.parameters)||void 0===d?void 0:d.gateway)})}getPaymentGatewayParameters(){if(this.googlepayConfig){const{allowedPaymentMethods:e}=this.googlepayConfig,{gatewayMerchantId:t}=e[0].tokenizationSpecification.parameters;return{gateway:this.getGatewayIdentifier(),gatewayMerchantId:t}}return{gateway:this.getGatewayIdentifier()}}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return cs(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n})}}const ls=wr(t=>new Ya(t,new $a(Ja(),new us(t,new ds(le())),e(),n())),[{id:\"googlepay_bigcommerce_payments\"}]),hs=wr(t=>{const i=e();return new Ya(t,new $a(Ja(),new ja(\"adyen\",t),i,n()))},[{id:\"googlepayadyenv2\"}]),ps=wr(t=>{const i=e();return new Ya(t,new $a(Ja(),new ja(\"adyen\",t),i,n()))},[{id:\"googlepayadyenv3\"}]);class gs extends ja{constructor(e){super(\"authorizenet\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();return function(e){if(!function(e){return\"paymentGatewayId\"in e}(e))throw new dr(ar.MissingPaymentMethod)}(e),{gateway:this.getGatewayIdentifier(),gatewayMerchantId:e.paymentGatewayId}}}const ms=wr(t=>new Ya(t,new $a(Ja(),new gs(t),e(),n())),[{id:\"googlepayauthorizenet\"}]),ys=e=>\"object\"==typeof e&&null!==e&&\"body\"in e;function fs(e){if(!function(e){return\"checkoutcomkey\"in e}(e))throw new dr(ar.MissingPaymentMethod)}var _s=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class vs extends ja{constructor(e,t){super(\"checkoutltd\",e),this._requestSender=t}processAdditionalAction(e){return new Promise((t,n)=>{if(ys(e)&&function(e){var t;if(\"object\"!=typeof e||null===e)return!1;const n=e;return\"string\"==typeof(null===(t=n.three_ds_result)||void 0===t?void 0:t.acs_url)&&\"string\"==typeof n.three_ds_result.code}(e.body)&&\"three_d_secure_required\"===e.body.three_ds_result.code)return window.location.assign(e.body.three_ds_result.acs_url);n(e)})}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return _s(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let i;try{i=JSON.parse(n.nonce)}catch(e){throw new br(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"protocolVersion\"in e&&\"signature\"in e&&\"signedMessage\"in e}(e))throw new dr(ar.MissingPaymentToken)}(i),n.nonce=yield this._tokenize(i),n})}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();return fs(e),{gateway:this.getGatewayIdentifier(),gatewayMerchantId:e.checkoutcomkey}}_tokenize(e){return _s(this,void 0,void 0,function*(){const t=this.getPaymentMethod().config.testMode?\"https://api.sandbox.checkout.com/tokens\":\"https://api.checkout.com/tokens\",n=this.getGooglePayInitializationData();fs(n);const{body:i}=yield this._requestSender.post(t,{credentials:!1,body:{type:\"googlepay\",token_data:e},headers:{Authorization:n.checkoutcomkey,\"Content-Type\":Dr.Json,\"X-XSRF-TOKEN\":null}});return i.token})}}const Ss=wr(t=>{const i=e();return new Ya(t,new $a(Ja(),new vs(t,i),i,n()))},[{id:\"googlepaycheckoutcom\"}]);class Cs extends ja{constructor(e){super(\"cybersource\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}const Is=wr(t=>new Ya(t,new $a(Ja(),new Cs(t),e(),n())),[{id:\"googlepaycybersourcev2\"},{id:\"googlepaybnz\"}]);class ws extends ja{constructor(e){super(\"chase\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}const bs=wr(t=>new Ya(t,new $a(Ja(),new ws(t),e(),n())),[{id:\"googlepayorbital\"}]);var Es,Ps,Os,As,Ts,ks,Rs,Ds,Ms,Ns,Ls,zs;!function(e){e.SHIPPING=\"shipping\",e.BILLING=\"billing\"}(Es||(Es={})),function(e){e.SPLIT=\"split\",e.FULL=\"full\",e.ORGANIZATION=\"organization\"}(Ps||(Ps={})),function(e){e.Open=\"open\",e.Expired=\"expired\",e.Complete=\"complete\"}(Os||(Os={})),function(e){e.Paid=\"paid\",e.UnPaid=\"unpaid\",e.NoPaymentRequired=\"no_payment_required\"}(As||(As={})),function(e){e.SUCCESS=\"success\",e.ERROR=\"error\"}(Ts||(Ts={})),function(e){e.CreditCard=\"card\",e.ACH=\"us_bank_account\",e.Link=\"link\",e.EPS=\"eps\",e.GRABPAY=\"grabpay\",e.BANCONTACT=\"bancontact\",e.IDEAL=\"ideal\",e.ALIPAY=\"alipay\",e.KLARNA=\"klarna\",e.OCS=\"optimized_checkout\",e.CHECKOUT_SESSION=\"checkout_session\"}(ks||(ks={})),function(e){e.NEVER=\"never\",e.AUTO=\"auto\",e.ALWAYS=\"always\",e.PAYMENT=\"payment\",e.IF_REQUIRED=\"if_required\"}(Rs||(Rs={})),function(e){e.V3=\"v3\",e.ACACIA=\"acacia\",e.BASIL=\"basil\",e.CLOVER=\"clover\"}(Ds||(Ds={})),function(e){e.PAYMENT=\"payment\",e.AUTHENTICATION=\"linkAuthentication\",e.SHIPPING=\"address\",e.EXPRESS_CHECKOUT=\"expressCheckout\"}(Ms||(Ms={})),function(e){e.REQUIRES_PAYMENT_METHOD=\"requires_payment_method\",e.REQUIRES_CONFIRMATION=\"requires_confirmation\",e.REQUIRES_ACTION=\"requires_action\",e.PROCESSING=\"processing\",e.SUCCEEDED=\"succeeded\",e.CANCELED=\"canceled\"}(Ns||(Ns={})),function(e){e.CLICK=\"click\",e.CHANGE=\"change\",e.READY=\"ready\",e.SHIPPING_ADDRESS_CHANGE=\"shippingaddresschange\",e.SHIPPING_RATE_CHANGE=\"shippingratechange\",e.CONFIRM=\"confirm\",e.CANCEL=\"cancel\",e.LOADER_START=\"loaderstart\"}(Ls||(Ls={})),function(e){e.ON_SESSION=\"on_session\",e.OFF_SESSION=\"off_session\"}(zs||(zs={}));var Us=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Fs{constructor(e,t=window){this.scriptLoader=e,this.stripeWindow=t}getStripeClient(e,t,n,i,r){return Us(this,void 0,void 0,function*(){if(this.stripeWindow.bcStripeClient)return this.stripeWindow.bcStripeClient;const o=yield this.load(n),{stripePublishableKey:a,stripeConnectedAccount:s}=e,d=o(a,Object.assign(Object.assign(Object.assign(Object.assign({},s?{stripeAccount:s}:{}),t?{locale:t}:{}),i?{betas:i}:{}),r?{apiVersion:r}:{}));return Object.assign(this.stripeWindow,{bcStripeClient:d}),d})}getElements(e,t){return Us(this,void 0,void 0,function*(){let n=this.stripeWindow.bcStripeElements;return n?yield this.updateStripeElements(t):(n=e.elements(t),Object.assign(this.stripeWindow,{bcStripeElements:n})),n})}updateStripeElements(e){return Us(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeElements;t&&(t.update(e),yield t.fetchUpdates())})}getStripeCheckout(e,t){return Us(this,void 0,void 0,function*(){let n=yield this.getStoredStripeCheckout(t);return n||(n=yield e.initCheckout(t),Object.assign(this.stripeWindow,{bcStripeCheckout:n})),n})}load(e){return Us(this,void 0,void 0,function*(){if(!this.stripeWindow.Stripe&&(yield this.scriptLoader.loadScript(this.getScriptUrl(e)),!this.stripeWindow.Stripe))throw new Cr;return this.stripeWindow.Stripe})}getScriptUrl(e){return e&&e!==Ds.V3?`https://js.stripe.com/${e}/stripe.js`:\"https://js.stripe.com/v3/\"}getStoredStripeCheckout(e){return Us(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeCheckout;if(t)try{const{actions:n,error:i}=yield t.loadActions();if(i||!n)return void this.logErrorToConsole(i);const r=yield n.getSession(),o=e.clientSecret.split(\"_secret_\")[0];if(r.id===o)return t}catch(e){return void this.logErrorToConsole(e)}})}logErrorToConsole(e){e?console.error(e):console.error(\"No stripe checkout actions available on loadActions().\")}}const Bs=[\"payment_element_beta_2\",\"alipay_pm_beta_1\",\"link_default_integration_beta_1\",\"shipping_address_element_beta_1\",\"address_element_beta_1\"];function xs(e){if(!function(e){return\"stripeConnectedAccount\"in e&&\"stripePublishableKey\"in e&&\"stripeVersion\"in e}(e))throw new dr(ar.MissingPaymentMethod)}var qs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class js extends ja{constructor(e,t){super(\"stripe\",e),this.paymentIntegrationService=e,this.scriptLoader=t}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return qs(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let i;try{i=JSON.parse(n.nonce)}catch(e){throw new br(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"id\"in e}(e))throw new dr(ar.MissingPaymentToken)}(i),n.nonce=i.id,n})}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();xs(e);const{stripeVersion:t,stripePublishableKey:n,stripeConnectedAccount:i}=e;return{gateway:this.getGatewayIdentifier(),\"stripe:version\":t,\"stripe:publishableKey\":`${n}/${i}`}}processAdditionalAction(e,t){var n;return qs(this,void 0,void 0,function*(){if(!t)throw new Yo([\"payment\"]);if(!ys(e)||(\"object\"!=typeof(i=e.body)||null===i||!(\"three_ds_result\"in i)||!(\"errors\"in i)))throw e;var i;if(z(e.body.errors,{code:\"three_d_secure_required\"})){const i=this.getGooglePayInitializationData();xs(i),this.stripeUPEClient=yield this.loadStripeJs(i,t);const r=e.body.three_ds_result.token;let o,a=!1;try{o=yield this.stripeUPEClient.confirmCardPayment(r)}catch(e){try{o=yield this.stripeUPEClient.retrievePaymentIntent(r)}catch(e){a=!0}}if(null==o?void 0:o.error){if(this._throwDisplayableStripeError(o.error),this._isCancellationError(o.error))throw new oo;throw new Ha}if(!(null==o?void 0:o.paymentIntent)&&!a)throw new Ie;return this.paymentIntegrationService.submitPayment({methodId:t,paymentData:{nonce:(null===(n=null==o?void 0:o.paymentIntent)||void 0===n?void 0:n.id)||r}})}throw e})}loadStripeJs(e,t){return qs(this,void 0,void 0,function*(){if(this.stripeUPEClient)return this.stripeUPEClient;const n=this.paymentIntegrationService.getState().getCartLocale();return\"googlepaystripeocs\"===t&&e.useNewStripeJsVersion?this.scriptLoader.getStripeClient(e,n,Ds.CLOVER):this.scriptLoader.getStripeClient(e,n,Ds.V3,Bs,\"2020-03-02;alipay_beta=v1;link_beta=v1\")})}_isCancellationError(e){var t,n;return e&&-1!==(null===(n=null===(t=e.payment_intent.last_payment_error)||void 0===t?void 0:t.message)||void 0===n?void 0:n.indexOf(\"canceled\"))}_throwDisplayableStripeError(e){if(m([\"card_error\",\"invalid_request_error\",\"validation_error\"],e.type))throw new Error(e.message)}}const Gs=wr(t=>new Ya(t,new $a(Ja(),new js(t,new Fs(le())),e(),n())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeupe\"},{id:\"googlepaystripeocs\"}]);class Vs extends ja{constructor(e){super(\"worldpay\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}const Hs=wr(t=>new Ya(t,new $a(Ja(),new Vs(t),e(),n())),[{id:\"googlepayworldpayaccess\"}]);function Ws(){const{navigator:e}=window;let t;return t=e.language?e.language:e.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof e.javaEnabled&&e.javaEnabled(),language:t,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}var Ys=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ks extends ja{constructor(e,t){super(\"worldlinena\",e),this.formPoster=t}extraPaymentData(){return Ys(this,void 0,void 0,function*(){return Promise.resolve({browser_info:Ws()})})}processAdditionalAction(e){return Ys(this,void 0,void 0,function*(){if(!function(e){return ys(e)&&(t=e.body,C(t)&&\"object\"==typeof t&&\"errors\"in t&&\"three_ds_result\"in t&&y(t.errors)&&z(t.errors,{code:\"three_d_secure_required\"}));var t}(e))throw e;const{three_ds_result:t}=e.body,{acs_url:n,payer_auth_request:i,merchant_data:r}=t||{};if(!n||!i||!r)throw new Yo([\"formUrl\",\"threeDSSessionData\",\"creq\"]);return new Promise(e=>{this.formPoster.postForm(n,{threeDSSessionData:i,creq:r},e,\"_top\")})})}}const $s=wr(t=>new Ya(t,new $a(Ja(),new Ks(t,n()),e(),n())),[{id:\"googlepaytdonlinemart\"}]);var Zs,Js,Qs,Xs,ed,td,nd,id,rd,od,ad=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class sd{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,i,r){return ad(this,void 0,void 0,function*(){if(!this.window.paypal||r){const r=this.getPayPalSdkScriptConfigOrThrow(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypal)throw new Cr}return this.window.paypal})}getPayPalFastlaneSdk(e,t,n,i){return ad(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const r=this.getPayPalFastlaneSdkConfiguration(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypalFastlaneSdk)throw new Cr}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i,r){return ad(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||r){const r=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i);yield this.loadPayPalSdk(r)}if(!this.window.paypalGooglePay)throw new Cr;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return ad(this,void 0,void 0,function*(){if(!this.window.paypalApms){const i=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.paypalApms)throw new Cr}return this.window.paypalApms})}getPayPalMessages(e,t,n){return ad(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const i=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.paypalMessages)throw new Cr;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return ad(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:i})})}getPayPalSdkScriptConfigOrThrow(e,t,n,i=!0){const{id:r,clientToken:o,initializationData:a}=e;if(!a||!a.clientId)throw new dr(ar.MissingPaymentMethod);const{intent:s,clientId:d,merchantId:c,buyerCountry:u,attributionId:l,isVenmoEnabled:h,isHostedCheckoutEnabled:p,isPayPalCreditAvailable:g,isDeveloperModeApplicable:m,availableAlternativePaymentMethods:y=[],enabledAlternativePaymentMethods:f=[],isGooglePayEnabled:_}=a,v=p||i,S=\"paypalcommercecreditcards\"===r||\"bigcommerce_payments_creditcards\"===r,C=S?[\"card\"]:[],I=g?[\"credit\",\"paylater\"]:[],w=h?[\"venmo\"]:[],b=_?[\"googlepay\"]:[],E=i?[\"card-fields\"]:[],P=[...S?[]:[\"card\"],...g?[]:[\"credit\",\"paylater\"],...h?[]:[\"venmo\"],...y.filter(e=>!f.includes(e))],O=[...C,...I,...w,...f],A=es(n);return{options:Object.assign(Object.assign({\"client-id\":d,\"merchant-id\":c,\"enable-funding\":O.length>0?O:void 0,\"disable-funding\":P.length>0?P:void 0,commit:v,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...b,...E],currency:t,intent:s},m&&{\"buyer-country\":u}),A&&{locale:A}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":o}}}getPayPalFastlaneSdkConfiguration(e,t,n,i){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new dr(ar.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:d,attributionId:c}=o,u=es(i);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":d,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t},u&&{locale:u}),{intent:a}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":c,\"data-sdk-client-token\":r}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i=!0){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new dr(ar.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:d,buyerCountry:c,attributionId:u,isHostedCheckoutEnabled:l,isDeveloperModeApplicable:h}=o,p=l||i,g=es(n);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":d,commit:p,components:[\"googlepay\"],currency:t,intent:a},h&&{\"buyer-country\":c}),g&&{locale:g}),attributes:{\"data-partner-attribution-id\":u,\"data-client-token\":r,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new dr(ar.MissingPaymentMethod);const{intent:r,clientId:o,merchantId:a,buyerCountry:s,attributionId:d,isDeveloperModeApplicable:c,availableAlternativePaymentMethods:u=[],enabledAlternativePaymentMethods:l=[]}=i,h=l,p=u.filter(e=>!l.includes(e)),g=es(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":a,\"enable-funding\":h.length>0?h:void 0,\"disable-funding\":p.length>0?p:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:r},c&&{\"buyer-country\":s}),g&&{locale:g}),attributes:{\"data-partner-attribution-id\":d,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new dr(ar.MissingPaymentMethod);const{clientId:r,merchantId:o,attributionId:a,isDeveloperModeApplicable:s,buyerCountry:d}=i,c=es(n);return{options:Object.assign(Object.assign({\"client-id\":r,\"merchant-id\":o,components:[\"messages\"],currency:t},s&&{\"buyer-country\":d}),c&&{locale:c}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":a}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Zs||(Zs={})),function(e){e.Always=\"SCA_ALWAYS\"}(Js||(Js={})),function(e){e.Succeeded=\"succeeded\",e.Cancelled=\"cancelled\",e.Errored=\"errored\"}(Qs||(Qs={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(Xs||(Xs={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(ed||(ed={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(td||(td={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(nd||(nd={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"canceled\",e.UNRECOGNIZED=\"unrecognized\"}(id||(id={})),(rd||(rd={})).OXXO=\"oxxo\",function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(od||(od={}));var dd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class cd{constructor(e,t,n,i){this.formPoster=e,this.paymentIntegrationService=t,this.paypalRequestSender=n,this.paypalSdkLoader=i}loadPayPalSdk(e,t,n,i){return dd(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e),s=r.getLocale();return this.paypalSdk=yield this.paypalSdkLoader.getPayPalSDK(a,o,s,n,i),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new Cr;return this.paypalSdk}createBuyNowCartOrThrow(e){return dd(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new dr(ar.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new Er}})}createOrder(e,t){return dd(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i}=yield this.paypalRequestSender.createOrder(e,Object.assign({cartId:n},t));return i})}createOrderCardFields(e,t){return dd(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i,setupToken:r}=yield this.paypalRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:i},r?{setupToken:r}:{})})}updateOrder(e,t,n,i){return dd(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=r.getCartOrThrow();let a;i||(a=r.getConsignmentsOrThrow()[0]);try{yield this.paypalRequestSender.updateOrder(e,Object.assign(Object.assign({availableShippingOptions:i?[]:null==a?void 0:a.availableShippingOptions,cartId:o.id,selectedShippingOption:i?null:null==a?void 0:a.selectedShippingOption},t?{methodId:t}:{}),n?{orderId:n}:{}))}catch(e){throw new Ie}})}getOrderStatus(e,t){return dd(this,void 0,void 0,function*(){try{const{status:n}=yield this.paypalRequestSender.getOrderStatus(e,t);return n}catch(e){throw new Ie}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new dr(ar.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===mo.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return dd(this,void 0,void 0,function*(){const i={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:i},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],i=n.find(e=>e.isRecommended),r=(e?n.find(t=>t.id===e):n.find(e=>{if(t.selectedShippingOption){const n=t.selectedShippingOption.id;return e.id===n}return!1}))||i||n[0];if(!r)throw new Error(\"Your order can't be shipped to this address\");return r}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:i,name:{full_name:r}}=n[0].shipping,[o,...a]=r.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:i.address_line_1,address2:i.address_line_2,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})}getValidButtonStyle(e={}){const{color:t,height:n,label:i,shape:r}=e,o={color:t&&td[t]?t:void 0,height:this.getValidHeight(n),label:i&&ed[i]?i:void 0,shape:r&&nd[r]?r:void 0};return R(o,S)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}var ud=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ld{constructor(e){this.requestSender=e}createOrder(e,t){return ud(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":kr,\"Content-Type\":Dr.Json},Mr);return(yield this.requestSender.post(n,{headers:r,body:i})).body})}updateOrder(e,t){return ud(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":kr,\"Content-Type\":Dr.Json},Mr);return(yield this.requestSender.put(n,{headers:r,body:i})).body})}getOrderStatus(e,t){return ud(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":kr,\"Content-Type\":Dr.Json},Mr);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body})}}const hd=t=>{const{getHost:i}=t.getState();return new cd(n(),t,new ld(e({host:i()})),new sd(le()))};var pd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};const gd=class{constructor(e,t){this.paymentIntegrationService=e,this.paypalIntegrationService=t}createPayPalButton(e,t,n,i){const{style:r,fundingSource:o,isHostedCheckoutEnabled:a,isServerSideShippingCallbacksEnabled:s,onClick:d,onCancel:c,onPaymentComplete:u,onError:l}=n;this.onError=l;const h=this.paypalIntegrationService.getPayPalSdkOrThrow();if(!Object.values(h.FUNDING).includes(o))throw new br('Unable to initialize PayPal button because \"fundingSource\" argument is not valid funding source.');const p=Object.assign(Object.assign({},!s&&{onShippingAddressChange:t=>this.onShippingAddressChange(t,e),onShippingOptionsChange:t=>this.onShippingOptionsChange(t,e)}),{onApprove:(n,i)=>this.onHostedCheckoutApprove(n,i,t,e,u,s)});return h.Buttons(Object.assign(Object.assign(Object.assign({fundingSource:o,style:this.paypalIntegrationService.getValidButtonStyle(r),createOrder:()=>pd(this,void 0,void 0,function*(){if(i){const e=yield this.paypalIntegrationService.createBuyNowCartOrThrow(i);yield this.paymentIntegrationService.loadCheckout(e.id)}return this.paypalIntegrationService.createOrder(e)}),onApprove:({orderID:e})=>this.paypalIntegrationService.tokenizePayment(t,e)},d?{onClick:d}:{}),c?{onCancel:c}:{}),a&&p))}onHostedCheckoutApprove(e,t,n,i,r,o){return pd(this,void 0,void 0,function*(){if(!e.orderID)throw new dr(ar.MissingOrderId);const a=this.paymentIntegrationService.getState().getCartOrThrow();try{const s=a.lineItems.physicalItems.length>0;if(!o){const e=yield t.order.get(),n=this.paypalIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),s){const t=this.paypalIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}s&&(yield this.paypalIntegrationService.updateOrder(i,void 0,void 0,o)),o&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalIntegrationService.submitPayment(n,e.orderID),r&&\"function\"==typeof r&&r()}catch(e){this.handleError(e)}})}onShippingAddressChange(e,t){return pd(this,void 0,void 0,function*(){const n=this.paypalIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(n),yield this.paymentIntegrationService.updateShippingAddress(n);const e=this.paypalIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalIntegrationService.updateOrder(t)}catch(e){this.handleError(e)}})}onShippingOptionsChange(e,t){return pd(this,void 0,void 0,function*(){const n=this.paypalIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(n.id),yield this.paypalIntegrationService.updateOrder(t)}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}};class md{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalButtonCreationService=n}initialize(e){var t,n,i,r,o;return n=this,i=void 0,o=function*(){const{paypalcommerce:n,containerId:i,methodId:r}=e,o=Boolean(null==n?void 0:n.buyNowInitializeOptions);if(!r)throw new br('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new br('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!n)throw new br('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');if(o&&!n.currencyCode)throw new br('Unable to initialize payment because \"options.paypalcommerce.currencyCode\" argument is not provided.');if(o&&\"function\"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new br('Unable to initialize payment because \"options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');o||(yield this.paymentIntegrationService.loadDefaultCheckout());const a=o?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.paypalIntegrationService.loadPayPalSdk(r,a,!1),this.renderButton(i,r,n)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.paypalIntegrationService.getPayPalSdkOrThrow(),d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:c,isServerSideShippingCallbacksEnabled:u}=d.initializationData||{},l={onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},h=Object.assign(Object.assign({fundingSource:s.FUNDING.PAYPAL,style:this.paypalIntegrationService.getValidButtonStyle(r),isServerSideShippingCallbacksEnabled:u,isHostedCheckoutEnabled:c},i&&l),c&&o&&{onPaymentComplete:()=>o()}),p=this.paypalButtonCreationService.createPayPalButton(\"paypalcommerce\",t,h,i);p.isEligible()?p.render(`#${e}`):a&&\"function\"==typeof a?a():this.paypalIntegrationService.removeElement(e)}}const yd=wr(e=>{const t=hd(e),n=new gd(e,t);return new md(e,t,n)},[{id:\"paypalcommerce\"}]);var fd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class _d{constructor(e,t){this.paymentIntegrationService=e,this.paypalIntegrationService=t}initialize(e){return fd(this,void 0,void 0,function*(){const{paypalcommercecredit:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new br('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new br('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new br('Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.');if(a&&!o)throw new br('Unable to initialize payment because \"options.paypalcommercecredit.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new br('Unable to initialize payment because \"options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=this.paymentIntegrationService.getState(),d=a?o:s.getCartOrThrow().currency.code;yield this.paypalIntegrationService.loadPayPalSdk(i,d,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.paypalIntegrationService.getPayPalSdkOrThrow(),d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:c,isServerSideShippingCallbacksEnabled:u}=d.initializationData||{},l={createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercecredit\"),onApprove:({orderID:e})=>this.paypalIntegrationService.tokenizePayment(t,e)},h={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},p=Object.assign(Object.assign({},!u&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o,u)}),g=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT];let m=!1;g.forEach(t=>{if(!m){const n=Object.assign(Object.assign(Object.assign({fundingSource:t,style:this.paypalIntegrationService.getValidButtonStyle(r)},l),i&&h),c&&p),o=s.Buttons(n);o.isEligible()?(o.render(`#${e}`),m=!0):a&&\"function\"==typeof a&&a()}}),m||this.paypalIntegrationService.removeElement(e)}handleClick(e){return fd(this,void 0,void 0,function*(){if(e){const t=yield this.paypalIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,i,r){return fd(this,void 0,void 0,function*(){if(!e.orderID)throw new dr(ar.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!r){const e=yield t.order.get(),n=this.paypalIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.paypalIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}return a&&(yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\",void 0,void 0,r)),r&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return fd(this,void 0,void 0,function*(){const t=this.paypalIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.paypalIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\")}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return fd(this,void 0,void 0,function*(){const t=this.paypalIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\")}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const vd=wr(e=>new _d(e,hd(e)),[{id:\"paypalcommercecredit\"}]);var Sd,Cd,Id,wd,bd,Ed,Pd;!function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(Sd||(Sd={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Cd||(Cd={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(Id||(Id={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(wd||(wd={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(bd||(bd={})),function(e){e.OXXO=\"oxxo\",e.IDEAL=\"ideal\"}(Ed||(Ed={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(Pd||(Pd={}));var Od=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ad{constructor(e,t,n,i){this.formPoster=e,this.paymentIntegrationService=t,this.paypalCommerceRequestSender=n,this.paypalCommerceScriptLoader=i}loadPayPalSdk(e,t,n,i){return Od(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e);return this.paypalSdk=yield this.paypalCommerceScriptLoader.getPayPalSDK(a,o,r.getLocale(),n,i),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new Cr;return this.paypalSdk}createBuyNowCartOrThrow(e){return Od(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new dr(ar.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new Er}})}createOrder(e,t){return Od(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i}=yield this.paypalCommerceRequestSender.createOrder(e,Object.assign({cartId:n},t));return i})}createOrderCardFields(e,t){return Od(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i,setupToken:r}=yield this.paypalCommerceRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:i},r?{setupToken:r}:{})})}updateOrder(e){return Od(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getConsignmentsOrThrow()[0];try{yield this.paypalCommerceRequestSender.updateOrder({availableShippingOptions:e?[]:i.availableShippingOptions,cartId:n.id,selectedShippingOption:e?null:i.selectedShippingOption})}catch(e){throw new Ie}})}getOrderStatus(e,t){return Od(this,void 0,void 0,function*(){try{const{status:n}=yield this.paypalCommerceRequestSender.getOrderStatus(e,t);return n}catch(e){throw new Ie}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new dr(ar.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===mo.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return Od(this,void 0,void 0,function*(){const i={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:i},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],i=n.find(e=>e.isRecommended),r=(e?n.find(t=>t.id===e):n.find(e=>{var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)}))||i||n[0];if(!r)throw new Error(\"Your order can't be shipped to this address\");return r}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:i,name:{full_name:r}}=n[0].shipping,[o,...a]=r.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:i.address_line_1,address2:i.address_line_2,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})}getValidButtonStyle(e){const{color:t,height:n,label:i,shape:r}=e||{},o={color:t&&wd[t]?t:void 0,height:this.getValidHeight(n),label:i&&Id[i]?i:void 0,shape:r&&bd[r]?r:void 0};return R(o,S)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}var Td=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class kd{constructor(e){this.requestSender=e}createOrder(e,t){return Td(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":kr,\"Content-Type\":Dr.Json},Mr);return(yield this.requestSender.post(n,{headers:r,body:i})).body})}updateOrder(e){return Td(this,void 0,void 0,function*(){const t=e,n=Object.assign({\"X-API-INTERNAL\":kr,\"Content-Type\":Dr.Json},Mr);return(yield this.requestSender.put(\"/api/storefront/initialization/paypalcommerce\",{headers:n,body:t})).body})}getOrderStatus(e=\"paypalcommerce\",t){return Td(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":kr,\"Content-Type\":Dr.Json},Mr);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body})}}var Rd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Dd{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,i,r){return Rd(this,void 0,void 0,function*(){const o=this.getPayPalSdkScriptConfigOrThrow(e,t,n,i);return this.loadPayPalSDK(o,r)})}loadPayPalSDK(e,t=!1){return Rd(this,void 0,void 0,function*(){if(!this.window.paypal||t){const t=this.transformConfig(e.options),n=this.transformConfig(e.attributes),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(t).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:n})}if(!this.window.paypal)throw new Cr;return this.window.paypal})}getPayPalSdkScriptConfigOrThrow(e,t,n,i=!0){const{id:r,clientToken:o,initializationData:a}=e;if(!(null==a?void 0:a.clientId))throw new dr(ar.MissingPaymentMethod);const{intent:s,clientId:d,merchantId:c,buyerCountry:u,attributionId:l,isVenmoEnabled:h,isHostedCheckoutEnabled:p,isPayPalCreditAvailable:g,isDeveloperModeApplicable:m,availableAlternativePaymentMethods:y=[],enabledAlternativePaymentMethods:f=[],isGooglePayEnabled:_}=a,v=p||i,S=\"paypalcommercecreditcards\"===r,C=S?[\"card\"]:[],I=g?[\"credit\",\"paylater\"]:[],w=h?[\"venmo\"]:[],b=_?[\"googlepay\"]:[],E=i?[\"card-fields\"]:[],P=[...S?[]:[\"card\"],...g?[]:[\"credit\",\"paylater\"],...h?[]:[\"venmo\"],...y.filter(e=>!f.includes(e))],O=[...C,...I,...w,...f],A=es(n);return{options:Object.assign(Object.assign({\"client-id\":d,\"merchant-id\":c,\"enable-funding\":O.length>0?O:void 0,\"disable-funding\":P.length>0?P:void 0,commit:v,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...b,...E],currency:t,intent:s},m&&{\"buyer-country\":u}),A&&{locale:A}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":o}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}var Md=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Nd{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}initialize(e){return Md(this,void 0,void 0,function*(){const{paypalcommercevenmo:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new br('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new br('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new br('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');if(a&&!o)throw new br('Unable to initialize payment because \"options.paypalcommercevenmo.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new br('Unable to initialize payment because \"options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=a?o:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.paypalCommerceIntegrationService.loadPayPalSdk(i,s,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onEligibilityFailure:o}=n,a=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),s=a.FUNDING.VENMO,d={createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercevenmo\"),onApprove:({orderID:e})=>this.paypalCommerceIntegrationService.tokenizePayment(t,e)},c={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},u=Object.assign(Object.assign({fundingSource:s,style:this.getValidVenmoButtonStyles(r)},d),i&&c),l=a.Buttons(u);l.isEligible()?l.render(`#${e}`):o&&\"function\"==typeof o?o():this.paypalCommerceIntegrationService.removeElement(e)}getValidVenmoButtonStyles(e){const t=this.paypalCommerceIntegrationService.getValidButtonStyle(e);return t.color===wd.gold?Object.assign(Object.assign({},t),{color:void 0}):t}handleClick(e){return Md(this,void 0,void 0,function*(){if(e){const t=yield this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}}const Ld=wr(t=>new Nd(t,(t=>{const{getHost:i}=t.getState();return new Ad(n(),t,new kd(e({host:i()})),new Dd(le()))})(t)),[{id:\"paypalcommercevenmo\"}]);var zd,Ud,Fd,Bd,xd,qd;!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(zd||(zd={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(Ud||(Ud={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\"}(Fd||(Fd={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(Bd||(Bd={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(xd||(xd={})),function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(qd||(qd={}));var jd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Gd{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalExpressScriptLoader=t,this.formPoster=n}initialize(e){return jd(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);if(!e.paypal)throw new br;if(!t.config.merchantId)throw new dr(ar.MissingPaymentMethod);const n=yield this.paypalExpressScriptLoader.loadPaypalSDK(t.config.merchantId);this.renderButton(e,n)})}deinitialize(){return Promise.resolve()}renderButton(e,t){const{containerId:n,methodId:i,paypal:r}=e,{allowCredit:o,clientId:a,onPaymentError:s,shouldProcessPayment:d,style:c}=r,u=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);if(!u.config.merchantId)throw new dr(ar.MissingPaymentMethod);const l=u.config.merchantId,h=u.config.testMode?\"sandbox\":\"production\",p={[h]:a},g=t.FUNDING.CREDIT||\"credit\",m=o?[g]:[],y=o?[]:[g];return t.Button.render({env:h,client:p,commit:d,funding:{allowed:m,disallowed:y},style:this.getStyle(c),payment:(e,t)=>this.setupPayment(l,t,s),onAuthorize:(e,t)=>this.tokenizePayment(e,i,t,d)},n)}getStyle(e){const{color:t,fundingicons:n,label:i,layout:r,shape:o,size:a,tagline:s}=e||{};return{color:t,fundingicons:n,label:i,layout:r,shape:o||xd.RECT,size:\"small\"===a?Ud.RESPONSIVE:a,tagline:s}}setupPayment(e,t,n){return jd(this,void 0,void 0,function*(){if(!t)throw new lr(sr.CheckoutButtonNotInitialized);try{const n=yield this.paymentIntegrationService.loadDefaultCheckout(),{id:i}=n.getCartOrThrow(),r=n.getHost()||\"\";return(yield t.request.post(`${r}/api/storefront/payment/paypalexpress`,{merchantId:e,cartId:i},{headers:Object.assign({\"X-API-INTERNAL\":kr},Mr)})).id}catch(e){throw n&&e instanceof Se&&n(e),e}})}tokenizePayment(e,t,n,i){return jd(this,void 0,void 0,function*(){if(!n)throw new lr(sr.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new dr(ar.MissingPayment);const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),o=yield n.payment.get(e.paymentID);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:r.id,action:i?\"process_payment\":\"set_external_checkout\",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(o.payer.payer_info)})})}}class Vd{constructor(e){this.scriptLoader=e,this.window=window}loadPaypalSDK(e=\"\"){return t=this,n=void 0,r=function*(){const t=Object.assign({async:!0,attributes:{\"data-merchant-id\":e}},e&&{attributes:{\"data-merchant-id\":e}});if(yield this.scriptLoader.loadScript(\"//www.paypalobjects.com/api/checkout.min.js\",t),!this.window.paypal)throw new Cr;return this.window.paypal},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}}const Hd=wr(e=>new Gd(e,new Vd(le()),n()),[{id:\"paypalexpress\"}]);var Wd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Yd{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t,this.isMounted=!1}deinitialize(){var e;null===(e=this.checkoutEventsUnsubscribe)||void 0===e||e.call(this),this.isMounted=!1}initCheckoutEventsSubscription(e,t,n,i){this.checkoutEventsUnsubscribe=this.paymentIntegrationService.subscribe(()=>Wd(this,void 0,void 0,function*(){var r;const o=null==i?void 0:i.getElement(Ms.PAYMENT);if(o){try{yield this.updateStripePaymentIntent(e,t)}catch(e){return this.isMounted&&(o.unmount(),this.isMounted=!1),void(e instanceof Error&&(null===(r=n.onError)||void 0===r||r.call(n,e)))}this.isMounted||(yield null==i?void 0:i.fetchUpdates(),this.mountElement(o,n.containerId))}}),e=>{var t;return null===(t=e.getCheckout())||void 0===t?void 0:t.outstandingBalance},e=>{var t;return null===(t=e.getCheckout())||void 0===t?void 0:t.coupons})}mountElement(e,t){document.getElementById(t)&&(e.mount(`#${t}`),this.isMounted=!0)}mapAppearanceVariables(e){return{colorPrimary:e.fieldInnerShadow,colorBackground:e.fieldBackground,colorText:e.labelText,colorDanger:e.fieldErrorText,colorTextSecondary:e.labelText,colorTextPlaceholder:e.fieldPlaceholderText,colorIcon:e.fieldPlaceholderText}}mapInputAppearanceRules(e){return{borderColor:e.fieldBorder,color:e.fieldText,boxShadow:e.fieldInnerShadow}}throwStripeError(e){if(\"object\"==typeof(t=e)&&null!==t&&\"type\"in t&&(this.throwDisplayableStripeError(e),this.isCancellationError(e)))throw new oo;var t;throw new Ha}throwDisplayableStripeError(e){if(m([\"card_error\",\"invalid_request_error\",\"validation_error\"],e.type))throw new Error(e.message)}isCancellationError(e){var t;const n=null===(t=null==e?void 0:e.payment_intent.last_payment_error)||void 0===t?void 0:t.message;return!!n&&-1!==n.indexOf(\"canceled\")}throwPaymentConfirmationProceedMessage(){throw new Ha(\"We've received your order and are processing your payment. Once the payment is verified, your order will be completed. We will send you an email when it's completed. Please note, this process may take a few minutes depending on the processing times of your chosen method.\")}isPaymentCompleted(e,t){return Wd(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getPaymentMethodOrThrow(e),{features:r}=n.getStoreConfigOrThrow().checkoutSettings;if(!i.clientToken||!t||!r[\"PI-626.Block_unnecessary_payment_confirmation_for_StripeUPE\"])return!1;const{paymentIntent:o}=yield t.retrievePaymentIntent(i.clientToken);return(null==o?void 0:o.status)===Ns.SUCCEEDED})}mapStripePaymentData(e,t,n=!1){const i=this.paymentIntegrationService.getState().getBillingAddress(),{firstName:r=\"\",lastName:o=\"\",email:a=\"\"}=i||{},s=this.mapStripeAddress(i);if(!e)throw new lr(sr.PaymentNotInitialized);if(!(a&&s&&s.city&&s.country&&r&&o))throw new dr(ar.MissingBillingAddress);return{elements:e,redirect:Rs.IF_REQUIRED,confirmParams:Object.assign({payment_method_data:Object.assign(Object.assign({},n?{allow_redisplay:\"always\"}:{}),{billing_details:{email:a,address:s,name:this.getShopperFullName(i)}})},t&&{return_url:t})}}isAdditionalActionError(e){return z(e,{code:\"additional_action_required\"})}isRedirectAction(e){const{type:t,data:{redirect_url:n}}=e;return\"redirect_to_url\"===t&&!!n}isOnPageAdditionalAction(e){const{type:t,data:{token:n}}=e;return\"additional_action_requires_payment_method\"===t&&!!n}updateStripePaymentIntent(e,t){return Wd(this,void 0,void 0,function*(){const n=yield this.paymentIntegrationService.loadPaymentMethod(e,{params:{method:t}}),{clientToken:i}=n.getPaymentMethodOrThrow(t);i&&this.scriptLoader.updateStripeElements({clientSecret:i})})}getStripeJsVersion(e){return e.useNewStripeJsVersion?Ds.CLOVER:Ds.V3}mapStripeAddress(e){if(e){const{city:t,address1:n,address2:i,countryCode:r,postalCode:o,stateOrProvinceCode:a}=e;return Object.assign({city:t,country:r,postal_code:o,line1:n,line2:i},a?{state:a}:{})}throw new dr(ar.MissingBillingAddress)}getShopperFullName(e){const{firstName:t=\"\",lastName:n=\"\"}=e||{};return`${t} ${n}`.trim()}verifyCheckoutSpamProtection(){return Wd(this,void 0,void 0,function*(){const{shouldExecuteSpamCheck:e}=this.paymentIntegrationService.getState().getCheckoutOrThrow();e&&(yield this.paymentIntegrationService.verifyCheckoutSpamProtection())})}}const Kd={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},$d={position:\"fixed\",\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},Zd=\"embedded-checkout-loading-indicator-rotation\";class Jd{constructor(e){this.styles=Object.assign(Object.assign({},Kd),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${Zd} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(n=>{e.style.setProperty(n,t[n])})}defineAnimation(){var e;if(document.getElementById(Zd))return;const t=document.createElement(\"style\");t.id=Zd,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${Zd} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}class Qd{constructor(e){this._decimalPlaces=e}toInteger(e){return Math.round(e*Math.pow(10,this._decimalPlaces))}}const Xd=[\"AC\",\"AD\",\"AE\",\"AF\",\"AG\",\"AI\",\"AL\",\"AM\",\"AO\",\"AQ\",\"AR\",\"AT\",\"AU\",\"AW\",\"AX\",\"AZ\",\"BA\",\"BB\",\"BD\",\"BE\",\"BF\",\"BG\",\"BH\",\"BI\",\"BJ\",\"BL\",\"BM\",\"BN\",\"BO\",\"BQ\",\"BR\",\"BS\",\"BT\",\"BV\",\"BW\",\"BY\",\"BZ\",\"CA\",\"CD\",\"CF\",\"CG\",\"CH\",\"CI\",\"CK\",\"CL\",\"CM\",\"CN\",\"CO\",\"CR\",\"CV\",\"CW\",\"CY\",\"CZ\",\"DE\",\"DJ\",\"DK\",\"DM\",\"DO\",\"DZ\",\"EC\",\"EE\",\"EG\",\"EH\",\"ER\",\"ES\",\"ET\",\"FI\",\"FJ\",\"FK\",\"FO\",\"FR\",\"GA\",\"GB\",\"GD\",\"GE\",\"GF\",\"GG\",\"GH\",\"GI\",\"GL\",\"GM\",\"GN\",\"GP\",\"GQ\",\"GR\",\"GS\",\"GT\",\"GU\",\"GW\",\"GY\",\"HK\",\"HN\",\"HR\",\"HT\",\"HU\",\"ID\",\"IE\",\"IL\",\"IM\",\"IN\",\"IO\",\"IQ\",\"IS\",\"IT\",\"JE\",\"JM\",\"JO\",\"JP\",\"KE\",\"KG\",\"KH\",\"KI\",\"KM\",\"KN\",\"KR\",\"KW\",\"KY\",\"KZ\",\"LA\",\"LB\",\"LC\",\"LI\",\"LK\",\"LR\",\"LS\",\"LT\",\"LU\",\"LV\",\"LY\",\"MA\",\"MC\",\"MD\",\"ME\",\"MF\",\"MG\",\"MK\",\"ML\",\"MM\",\"MN\",\"MO\",\"MQ\",\"MR\",\"MS\",\"MT\",\"MU\",\"MV\",\"MW\",\"MX\",\"MY\",\"MZ\",\"NA\",\"NC\",\"NE\",\"NG\",\"NI\",\"NL\",\"NO\",\"NP\",\"NR\",\"NU\",\"NZ\",\"OM\",\"PA\",\"PE\",\"PF\",\"PG\",\"PH\",\"PK\",\"PL\",\"PM\",\"PN\",\"PR\",\"PS\",\"PT\",\"PY\",\"QA\",\"RE\",\"RO\",\"RS\",\"RU\",\"RW\",\"SA\",\"SB\",\"SC\",\"SD\",\"SE\",\"SG\",\"SH\",\"SI\",\"SJ\",\"SK\",\"SL\",\"SM\",\"SN\",\"SO\",\"SR\",\"SS\",\"ST\",\"SV\",\"SX\",\"SZ\",\"TA\",\"TC\",\"TD\",\"TF\",\"TG\",\"TH\",\"TJ\",\"TK\",\"TL\",\"TM\",\"TN\",\"TO\",\"TR\",\"TT\",\"TV\",\"TW\",\"TZ\",\"UA\",\"UG\",\"US\",\"UY\",\"UZ\",\"VA\",\"VC\",\"VE\",\"VG\",\"VN\",\"VU\",\"WF\",\"WS\",\"XK\",\"YE\",\"YT\",\"ZA\",\"ZM\",\"ZW\",\"ZZ\"];var ec=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class tc{constructor(e,t,n,i){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=n,this.loadingIndicator=i}initialize(e){return ec(this,void 0,void 0,function*(){const{stripeocs:t,containerId:n}=e||{};if(!t||!n)throw new lr(sr.PaymentNotInitialized);const{gatewayId:i}=t;if(!i)throw new dr(ar.MissingPaymentMethod);const r=this._getMethodId(i),o=yield this.paymentIntegrationService.loadPaymentMethod(i,{params:{method:r}}),a=o.getPaymentMethodOrThrow(r,i),{loadingContainerId:s,buttonHeight:d,onComplete:c}=t;if(this._loadingIndicatorContainer=s,this._onComplete=c,!function(e){return\"object\"==typeof e&&null!==e&&\"initializationData\"in e&&void 0!==e.initializationData&&null!==e.initializationData&&\"object\"==typeof e.initializationData&&\"stripePublishableKey\"in e.initializationData&&\"stripeConnectedAccount\"in e.initializationData&&\"shopperLanguage\"in e.initializationData&&void 0!==e.initializationData.stripePublishableKey&&void 0!==e.initializationData.stripeConnectedAccount&&void 0!==e.initializationData.shopperLanguage}(a))throw new dr(ar.MissingPaymentMethod);const{initializationData:u}=a,{captureMethod:l}=u,h=this.stripeIntegrationService.getStripeJsVersion(u);this._captureMethod=l,this._stripeClient=yield this.scriptLoader.getStripeClient(u,o.getCartLocale(),h),yield this.paymentIntegrationService.loadDefaultCheckout(),yield this._mountExpressCheckoutElement(n,this._stripeClient,d),this._initializeEvents(r)})}signIn(){return Promise.resolve()}signOut(){return Promise.resolve()}executePaymentMethodCheckout(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_mountExpressCheckoutElement(e,t,n=40){return ec(this,void 0,void 0,function*(){const i=this._shouldRequireShippingAddress(),r=Object.assign(Object.assign(Object.assign({shippingAddressRequired:i},i?{allowedShippingCountries:yield this._getAvailableCountries()}:{}),i?{shippingRates:[{id:\"_\",amount:0,displayName:\"Pending rates\"}]}:{}),{billingAddressRequired:!0,emailRequired:!0,phoneNumberRequired:!0,paymentMethods:{link:Rs.AUTO,applePay:Rs.NEVER,googlePay:Rs.NEVER,amazonPay:Rs.NEVER,paypal:Rs.NEVER,klarna:Rs.NEVER},buttonHeight:n}),{cartAmount:o=1}=this.paymentIntegrationService.getState().getCart()||{},a=Object.assign({mode:\"payment\",amount:this._toCents(o),currency:this._getCurrency()},this._captureMethod?{captureMethod:this._captureMethod}:{});this._stripeElements=t.elements(a),this._linkV2Element=this._stripeElements.create(Ms.EXPRESS_CHECKOUT,r),this._linkV2Element.mount(`#${e}`)})}_initializeEvents(e){this._linkV2Element&&(this._shouldRequireShippingAddress()&&(this._linkV2Element.on(Ls.SHIPPING_ADDRESS_CHANGE,e=>ec(this,void 0,void 0,function*(){return this._onShippingAddressChange(e)})),this._linkV2Element.on(Ls.SHIPPING_RATE_CHANGE,e=>ec(this,void 0,void 0,function*(){return this._onShippingRateChange(e)}))),this._linkV2Element.on(Ls.CONFIRM,t=>ec(this,void 0,void 0,function*(){return this._onConfirm(t,e)})),this._linkV2Element.on(Ls.CANCEL,this._onCancel))}_onShippingAddressChange(e){return ec(this,void 0,void 0,function*(){if(!(\"address\"in e))return;const t=e.address,n={firstName:\"\",lastName:\"\",phone:\"\",company:\"\",address1:\"\",address2:\"\",city:(null==t?void 0:t.city)||\"\",countryCode:(null==t?void 0:t.country)||\"\",postalCode:(null==t?void 0:t.postal_code)||\"\",stateOrProvince:(null==t?void 0:t.state)||\"\",stateOrProvinceCode:(null==t?void 0:t.state)||\"\",customFields:[]};yield this.paymentIntegrationService.updateShippingAddress(n);const i=yield this._getAvailableShippingOptions();yield this._updateDisplayedPrice(),(null==i?void 0:i.length)?e.resolve({shippingRates:i}):e.reject()})}_onCancel(){throw new oo}_onShippingRateChange(e){return ec(this,void 0,void 0,function*(){if(\"shippingRate\"in e){const{shippingRate:t}=e;yield this._handleShippingOptionChange(null==t?void 0:t.id),yield this._updateDisplayedPrice(),e.resolve({})}})}_onConfirm(e,t){return ec(this,void 0,void 0,function*(){if(\"billingDetails\"in e&&\"shippingAddress\"in e&&this._stripeClient&&this._stripeElements){yield this.stripeIntegrationService.verifyCheckoutSpamProtection(),yield this._updateShippingAndBillingAddress(e),yield this.paymentIntegrationService.submitOrder();const n=this._getPaymentPayload(t);try{yield this.paymentIntegrationService.submitPayment(n)}catch(e){yield this._processAdditionalAction(e,t)}}return Promise.resolve()})}_updateShippingAndBillingAddress(e){var t,n,i,r,o,a,s,d;return ec(this,void 0,void 0,function*(){const c=this._shouldRequireShippingAddress(),u=(null===(n=null===(t=e.shippingAddress)||void 0===t?void 0:t.name)||void 0===n?void 0:n.split(\" \")[0])||(null===(r=null===(i=e.billingDetails)||void 0===i?void 0:i.name)||void 0===r?void 0:r.split(\" \")[0])||\"\",l=(null===(a=null===(o=e.shippingAddress)||void 0===o?void 0:o.name)||void 0===a?void 0:a.split(\" \")[1])||(null===(d=null===(s=e.billingDetails)||void 0===s?void 0:s.name)||void 0===d?void 0:d.split(\" \")[1])||\"\";if(c){const t=this._mapShippingAddress(e.shippingAddress,e.billingDetails,u,l);yield this.paymentIntegrationService.updateShippingAddress(t)}const h=this._mapBillingAddress(e.shippingAddress,e.billingDetails,u,l);yield this.paymentIntegrationService.updateBillingAddress(h)})}_mapShippingAddress(e,t,n,i){var r,o,a,s,d,c,u;return{firstName:n,lastName:i,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==e?void 0:e.address)||void 0===r?void 0:r.line1)||\"\",address2:(null===(o=null==e?void 0:e.address)||void 0===o?void 0:o.line2)||\"\",city:(null===(a=null==e?void 0:e.address)||void 0===a?void 0:a.city)||\"\",countryCode:(null===(s=null==e?void 0:e.address)||void 0===s?void 0:s.country)||\"\",postalCode:(null===(d=null==e?void 0:e.address)||void 0===d?void 0:d.postal_code)||\"\",stateOrProvince:(null===(c=null==e?void 0:e.address)||void 0===c?void 0:c.state)||\"\",stateOrProvinceCode:(null===(u=null==e?void 0:e.address)||void 0===u?void 0:u.state)||\"\",customFields:[]}}_mapBillingAddress(e,t,n,i){var r,o,a,s,d,c;return{email:(null==t?void 0:t.email)||\"\",firstName:n,lastName:i,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==t?void 0:t.address)||void 0===r?void 0:r.line1)||\"\",address2:\"\",city:(null===(o=null==t?void 0:t.address)||void 0===o?void 0:o.city)||\"\",countryCode:(null===(a=null==t?void 0:t.address)||void 0===a?void 0:a.country)||\"\",postalCode:(null===(s=null==t?void 0:t.address)||void 0===s?void 0:s.postal_code)||\"\",stateOrProvince:(null===(d=null==t?void 0:t.address)||void 0===d?void 0:d.state)||\"\",stateOrProvinceCode:(null===(c=null==e?void 0:e.address)||void 0===c?void 0:c.state)||\"\",customFields:[]}}_processAdditionalAction(e,t){return ec(this,void 0,void 0,function*(){if(!ys(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this._stripeClient||!this._stripeElements)throw new lr(sr.PaymentNotInitialized);const{data:n}=e.body.additional_action_required,{token:i}=n,{paymentIntent:r}=yield this._confirmStripePaymentOrThrow(n,t),o=this._getPaymentPayload(t,(null==r?void 0:r.id)||i);try{this._toggleLoadingIndicator(!0),yield this.paymentIntegrationService.submitPayment(o),yield this._completeCheckoutFlow()}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}finally{this._toggleLoadingIndicator(!1)}})}_confirmStripePaymentOrThrow(e,t){var n,i,r;return ec(this,void 0,void 0,function*(){const{token:o,redirect_url:a}=e,s=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,a);let d;try{const e=(yield this.stripeIntegrationService.isPaymentCompleted(t,this._stripeClient))?yield null===(r=this._stripeClient)||void 0===r?void 0:r.retrievePaymentIntent(o||\"\"):yield null===(n=this._stripeClient)||void 0===n?void 0:n.confirmPayment({elements:s.elements,clientSecret:o,redirect:Rs.IF_REQUIRED,confirmParams:{return_url:null===(i=s.confirmParams)||void 0===i?void 0:i.return_url}});if(d=null==e?void 0:e.error,d||!(null==e?void 0:e.paymentIntent))throw new Ha;return e}catch(e){return this.stripeIntegrationService.throwStripeError(d)}})}_completeCheckoutFlow(){return ec(this,void 0,void 0,function*(){return\"function\"==typeof this._onComplete?this._onComplete():(window.location.replace(\"/checkout/order-confirmation\"),Promise.resolve())})}_getPaymentPayload(e,t){var n;const i=(null===(n=this.paymentIntegrationService.getState().getCart())||void 0===n?void 0:n.id)||\"\";return{methodId:e,paymentData:{formattedPayload:Object.assign(Object.assign({cart_id:i},t?{credit_card_token:{token:t}}:{}),{confirm:!1,method:ks.Link})}}}_shouldRequireShippingAddress(){const{getCart:e}=this.paymentIntegrationService.getState(),{lineItems:t}=e()||{};return!!(null==t?void 0:t.physicalItems.length)}_updateDisplayedPrice(){return ec(this,void 0,void 0,function*(){this._stripeElements&&this._stripeElements.update({currency:this._getCurrency(),mode:\"payment\",amount:yield this._getTotalPrice()})})}_getCurrency(){var e;if(!this._currencyCode){const t=null===(e=this.paymentIntegrationService.getState().getCart())||void 0===e?void 0:e.currency;t&&(this._currencyCode=t.code.toLowerCase())}return this._currencyCode}_getTotalPrice(){var e;return ec(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const{getCheckoutOrThrow:t,getCart:n}=this.paymentIntegrationService.getState(),{decimalPlaces:i}=(null===(e=n())||void 0===e?void 0:e.currency)||{},r=L(t().outstandingBalance,i).toFixed(i);return this._toCents(+r)})}_getAvailableCountries(){var e;return ec(this,void 0,void 0,function*(){const t=yield this.paymentIntegrationService.loadShippingCountries();return((null===(e=t.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code))||[]).filter(e=>Xd.includes(e))})}_getAvailableShippingOptions(){var e,t,n;return ec(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState().getConsignments();if(!(null==i?void 0:i[0]))return;const r=i[0],o=(r.availableShippingOptions||[]).map(this._getStripeShippingOption.bind(this)),a=null===(e=r.availableShippingOptions)||void 0===e?void 0:e.find(e=>e.isRecommended),s=null===(t=r.selectedShippingOption)||void 0===t?void 0:t.id,d=null==a?void 0:a.id;return s?o.sort(e=>e.id===s?-1:0):d?(o.sort(e=>e.id===d?-1:0),yield this._handleShippingOptionChange(d)):yield this._handleShippingOptionChange(null===(n=o[0])||void 0===n?void 0:n.id),o.slice(0,9)})}_getStripeShippingOption({id:e,cost:t,description:n}){return{id:e,displayName:n,amount:this._toCents(t)}}_handleShippingOptionChange(e){return ec(this,void 0,void 0,function*(){if(e&&\"shipping_option_unselected\"!==e)return this.paymentIntegrationService.selectShippingOption(e)})}_getAmountTransformer(){if(this._amountTransformer)return this._amountTransformer;const{getCart:e}=this.paymentIntegrationService.getState(),{currency:t}=e()||{};return t?new Qd(t.decimalPlaces):void 0}_toCents(e){const t=Math.round(100*e),n=this._getAmountTransformer();return n?n.toInteger(e):t}_toggleLoadingIndicator(e){e&&this._loadingIndicatorContainer?this.loadingIndicator.show(this._loadingIndicatorContainer):this.loadingIndicator.hide()}_getMethodId(e){const{initializationData:{checkoutSessionEnabled:t}={}}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e);return t?ks.CHECKOUT_SESSION:ks.OCS}}const nc=wr(e=>{const t=new Fs(le()),n=new Jd({containerStyles:$d});return new tc(e,t,new Yd(e,t),n)},[{id:\"stripeocs\"}]);function ic(e,t,n){const i=new WeakMap;function r(e){return(...n)=>{const r=n[n.length-1],{useCache:o}=(a=r)&&\"boolean\"==typeof a.useCache?r:{useCache:!1};var a;if(!o)return e.call(this,...n);const s=i.get(this)||{};var d;return i.get(this)||i.set(this,s),s[t]||(s[t]=(d=e,ae(function(...e){const t=d.call(this,...e);return t instanceof j?Y(t).pipe(ie()):\"function\"==typeof t?ae(e=>Y(t(e)).pipe(ie()),{isEqual:_}):t},{isEqual:_}))),s[t].call(this,...n)}}return{get(){if(\"function\"!=typeof n.value)throw new Error(\"Decorator should be used in functions\");const e=r.call(this,n.value);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e}}}function rc(e,t,n,i){var r,o,a,s,d,c,u,l;return d=this,c=void 0,l=function*(){const d=t.customer.getCustomer(),c=t.b2bToken.getToken(),u=(l=null!==(a=null===(o=null===(r=t.config.getStoreConfig())||void 0===r?void 0:r.b2bApiSettings)||void 0===o?void 0:o.baseUrl)&&void 0!==a?a:\"\",function(){if(\"undefined\"==typeof window||!window.location)return!1;try{return!!new URLSearchParams(window.location.search).has(\"enableB2bDevMode\")&&(console.log(\"B2B Dev Mode Enabled\"),!0)}catch(e){return!1}}()?\"https://api-b2b.bigcommerce.com\":l);var l;const h=null===(s=t.cart.getCart())||void 0===s?void 0:s.companyId;if(!d||d.isGuest||!c||!u||!h)throw new Zi($i.MissingCheckoutConfig);const{body:p}=yield n.getB2BCompanyPaymentMethods(h,c,u,i);return function(e,t){const n=new Set(t.data.filter(e=>\"1\"===e.isEnabled).map(e=>e.code));return e.filter(e=>n.has(e.id))}(e,p)},new((u=void 0)||(u=Promise))(function(e,t){function n(e){try{r(l.next(e))}catch(e){t(e)}}function i(e){try{r(l.throw(e))}catch(e){t(e)}}function r(t){var r;t.done?e(t.value):(r=t.value,r instanceof u?r:new u(function(e){e(r)})).then(n,i)}r((l=l.apply(d,c||[])).next())})}var oc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};const ac=e=>!!e;class sc{constructor(e,t){this._requestSender=e,this._b2bCompanyPaymentMethodRequestSender=t}loadPaymentMethodsById(e,t){return n=>new j(i=>{var r;const a=null===(r=n.getState().cart.getCart())||void 0===r?void 0:r.id,s=a?Object.assign(Object.assign({},null==t?void 0:t.params),{cartId:a}):Object.assign({},null==t?void 0:t.params);i.next(o(En.LoadPaymentMethodsRequested)),Promise.all(e.map(e=>oc(this,void 0,void 0,function*(){try{return(yield this._requestSender.loadPaymentMethod(e,Object.assign(Object.assign({},t),{params:s}))).body}catch(e){return}}))).then(e=>{const t=e.filter(ac);i.next(o(En.LoadPaymentMethodsSucceeded,t)),i.complete()}).catch(e=>{i.next(o(En.LoadPaymentMethodsFailed,e)),i.complete()})})}loadPaymentMethods(e){return t=>j.create(n=>{const i=t.getState(),r=i.cart.getCartOrThrow();n.next(o(En.LoadPaymentMethodsRequested)),this._requestSender.loadPaymentMethods(Object.assign(Object.assign({},e),{params:Object.assign(Object.assign({},null==e?void 0:e.params),{cartId:r.id})})).then(t=>oc(this,void 0,void 0,function*(){var r,a,s,d;const c={deviceSessionId:t.headers[\"x-device-session-id\"],sessionHash:t.headers[\"x-session-hash\"]};let u=t.body;null!==(d=null===(s=null===(a=null===(r=i.config.getStoreConfig())||void 0===r?void 0:r.checkoutSettings.capabilities)||void 0===a?void 0:a.payment)||void 0===s?void 0:s.b2bPaymentMethodFilter)&&void 0!==d&&d&&(u=yield rc(u,i,this._b2bCompanyPaymentMethodRequestSender,e)),n.next(o(En.LoadPaymentMethodsSucceeded,u,c)),n.complete()})).catch(e=>{n.error(s(En.LoadPaymentMethodsFailed,e))})})}loadPaymentMethod(e,t){return n=>j.create(i=>{var r;const a=null===(r=n.getState().cart.getCart())||void 0===r?void 0:r.id,d=a?Object.assign(Object.assign({},null==t?void 0:t.params),{cartId:a}):Object.assign({},null==t?void 0:t.params);i.next(o(En.LoadPaymentMethodRequested,void 0,{methodId:e})),this._requestSender.loadPaymentMethod(e,Object.assign(Object.assign({},t),{params:d})).then(t=>{i.next(o(En.LoadPaymentMethodSucceeded,t.body,{methodId:e})),i.complete()}).catch(t=>{i.error(s(En.LoadPaymentMethodFailed,t,{methodId:e}))})})}}var dc;(function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)})([ic],sc.prototype,\"loadPaymentMethod\",null),function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(dc||(dc={}));const cc=dc,uc=\"This API endpoint is for internal use only and may change in the future\",lc={\"X-Checkout-SDK-Version\":\"1.916.1\"};class hc{constructor(e){this._requestSender=e}loadPaymentMethods({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/payments\",{timeout:e,headers:Object.assign({Accept:cc.JsonV1,\"X-API-INTERNAL\":uc},lc),params:t})}loadPaymentMethod(e,{timeout:t,params:n}={}){const i=`/api/storefront/payments/${e}`;return this._requestSender.get(i,{timeout:t,headers:Object.assign({Accept:cc.JsonV1,\"X-API-INTERNAL\":uc},lc),params:n})}}class pc{constructor(e){this._requestSender=e}getB2BCompanyPaymentMethods(e,t,n,i){return r=this,o=void 0,s=function*(){return this._requestSender.get(`${n}/api/v2/companies/${e}/payments`,{timeout:null==i?void 0:i.timeout,credentials:!1,headers:{authToken:t,Authorization:`Bearer ${t}`}})},new((a=void 0)||(a=Promise))(function(e,t){function n(e){try{d(s.next(e))}catch(e){t(e)}}function i(e){try{d(s.throw(e))}catch(e){t(e)}}function d(t){var r;t.done?e(t.value):(r=t.value,r instanceof a?r:new a(function(e){e(r)})).then(n,i)}d((s=s.apply(r,o||[])).next())});var r,o,a,s}}function gc(e,t,n){return(i=t)&&i.type&&i.error?V(Z(t),J(s(e,t.payload,n))):J(s(e,t,n));var i}class mc extends be{constructor(e){super(e||\"Unable to continue as a guest because the customer is already signed in.\"),this.name=\"UnableToContinueAsGuestError\",this.type=\"unable_to_continue_as_guest\"}}class yc{constructor(e,t){this._requestSender=e,this._subscriptionActionCreator=t}continueAsGuest(e,t){return n=>{const i=n.getState(),r=i.checkout.getCheckout();if(!r)throw new Zi($i.MissingCheckout);const a=i.customer.getCustomer();if(a&&!a.isGuest)throw new mc;const s=i.billingAddress.getBillingAddress();let d;if(s){const{country:t}=s,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(s,[\"country\"]);d=Object.assign(Object.assign({},n),e)}else d=e;const c=!f(s);return $(V(Z(o(Ye.ContinueAsGuestRequested)),H(()=>{return e=this,n=void 0,a=function*(){const{body:e}=yield this._createOrUpdateBillingAddress(r.id,d,c,t);return o(Ye.ContinueAsGuestSucceeded,e)},new((i=void 0)||(i=Promise))(function(t,r){function o(e){try{d(a.next(e))}catch(e){r(e)}}function s(e){try{d(a.throw(e))}catch(e){r(e)}}function d(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i(function(e){e(n)})).then(o,s)}d((a=a.apply(e,n||[])).next())});var e,n,i,a})).pipe(Q(e=>gc(Ye.ContinueAsGuestFailed,e))),this._updateCustomerConsent(e,t))}}updateAddress(e,t){return n=>j.create(i=>{const r=n.getState(),a=r.checkout.getCheckout();if(!a)throw new Zi($i.MissingCheckout);i.next(o(Ye.UpdateBillingAddressRequested));const d=r.billingAddress.getBillingAddress(),c=!f(d),u=Object.assign(Object.assign({},e),{email:void 0===e.email&&d?d.email:e.email});d&&d.id&&(u.id=d.id),this._createOrUpdateBillingAddress(a.id,u,c,t).then(({body:e})=>{i.next(o(Ye.UpdateBillingAddressSucceeded,e)),i.complete()}).catch(e=>{i.error(s(Ye.UpdateBillingAddressFailed,e))})})}_updateCustomerConsent({email:e,acceptsAbandonedCartEmails:t,acceptsMarketingNewsletter:n},i){return null==t&&null==n?W():this._subscriptionActionCreator.updateSubscriptions({email:e,acceptsMarketingNewsletter:n||!1,acceptsAbandonedCartEmails:t||!1},i)}_createOrUpdateBillingAddress(e,t,n,i){return n?this._requestSender.updateAddress(e,t,i):this._requestSender.createAddress(e,t,i)}}class fc extends be{constructor(e){super(e||\"Your checkout could not be processed because your cart is empty. Please add items to your cart and try again.\"),this.name=\"EmptyCartError\",this.type=\"empty_cart\"}}const _c={include:[\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"promotions.banners\"].join(\",\")};class vc{constructor(e){this._requestSender=e}createAddress(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/billing-address`,r=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.post(i,{body:t,params:_c,headers:r,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new fc;throw e})}updateAddress(e,t,{timeout:n}={}){const{id:i}=t,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"id\"]),o=`/api/storefront/checkouts/${e}/billing-address/${i}`,a=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.put(o,{params:_c,body:r,headers:a,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new fc;throw e})}}class Sc{constructor(e){this._requestSender=e}createBuyNowCart(e,{timeout:t}={}){const n=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.post(\"/api/storefront/carts\",{body:e,headers:n,timeout:t})}}class Cc{constructor(e,t,n){this._checkoutRequestSender=e,this._configActionCreator=t,this._formFieldsActionCreator=n}loadCheckout(e,t){return()=>V(Z(o(Ve.LoadCheckoutRequested)),$(this._configActionCreator.loadConfig({useCache:!0,timeout:null==t?void 0:t.timeout,params:{checkoutId:e}}),this._formFieldsActionCreator.loadFormFields({useCache:!0,timeout:null==t?void 0:t.timeout})),H(()=>this._checkoutRequestSender.loadCheckout(e,t).then(({body:e})=>o(Ve.LoadCheckoutSucceeded,this._transformCustomerAddresses(e))))).pipe(Q(e=>gc(Ve.LoadCheckoutFailed,e)))}loadDefaultCheckout(e){return t=>V(Z(o(Ve.LoadCheckoutRequested)),$(this._configActionCreator.loadConfig({useCache:!0,timeout:null==e?void 0:e.timeout}),this._formFieldsActionCreator.loadFormFields({useCache:!0,timeout:null==e?void 0:e.timeout})),H(()=>{return n=this,i=void 0,a=function*(){const n=t.getState().config.getContextConfig();if(!n||!n.checkoutId)throw new Zi($i.MissingCheckoutConfig);const{body:i}=yield this._checkoutRequestSender.loadCheckout(n.checkoutId,e);return o(Ve.LoadCheckoutSucceeded,this._transformCustomerAddresses(i))},new((r=void 0)||(r=Promise))(function(e,t){function o(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(o,s)}d((a=a.apply(n,i||[])).next())});var n,i,r,a})).pipe(Q(e=>gc(Ve.LoadCheckoutFailed,e)))}updateCheckout(e,t){return n=>new j(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new Zi($i.MissingCheckout);i.next(o(Ve.UpdateCheckoutRequested)),this._checkoutRequestSender.updateCheckout(r.id,e,t).then(({body:e})=>{i.next(o(Ve.UpdateCheckoutSucceeded,e)),i.complete()}).catch(e=>{i.error(s(Ve.UpdateCheckoutFailed,e))})})}loadCurrentCheckout(e){return t=>{const n=t.getState().checkout.getCheckout();if(!n)throw new Zi($i.MissingCheckout);return this.loadCheckout(n.id,e)(t)}}hydrateInitialState(e){return{type:He.HydrateInitialState,payload:e}}_transformCustomerAddresses(e){return Object.assign(Object.assign({},e),{customer:Object.assign(Object.assign({},e.customer),{addresses:e.customer.addresses.map(e=>Object.assign(Object.assign({},e),{shouldSaveAddress:!1}))})})}}function Ic(e){return F(e).join(\",\")}function wc(e,t=[]){return Array.isArray(t)?Ic([...e,...t]):function(e,t){const n=b(M(t,e=>!e)),i=b(u(t));return Ic([...c(e,n),...i])}(e,t)}const bc=[\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"customer.customerGroup\",\"payments\",\"promotions.banners\"];class Ec extends Pe{constructor(e){super(e,{message:e.body.title}),this.name=\"CheckoutNotAvailableError\",this.type=\"checkout_not_available\"}}class Pc{constructor(e){this._requestSender=e}loadCheckout(e,{params:{include:t}={},timeout:n}={}){const i=`/api/storefront/checkout/${e}`,r=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.get(i,{params:{include:wc(bc,t)},headers:r,timeout:n}).catch(e=>{if(e.status>=400&&e.status<500)throw new Ec(e);throw e})}updateCheckout(e,t,{params:{include:n}={},timeout:i}={}){const r=`/api/storefront/checkout/${e}`,o=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.put(r,{params:{include:wc(bc,n)},body:t,headers:o,timeout:i}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new fc;throw e})}}class Oc{isEqual(e,t){return _(this._normalize(e),this._normalize(t))}_normalize(e){return{cartAmount:e.cartAmount,currency:e.currency,id:e.id,lineItems:{digitalItems:e.lineItems.digitalItems.slice().sort((e,t)=>`${e.productId}${e.variantId}`.localeCompare(`${t.productId}${t.variantId}`)).map(e=>({extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId})),giftCertificates:e.lineItems.giftCertificates.slice().sort((e,t)=>`${e.id}`.localeCompare(`${t.id}`)).map(e=>({amount:e.amount,recipient:e.recipient})),physicalItems:e.lineItems.physicalItems.slice().sort((e,t)=>`${e.productId}${e.variantId}`.localeCompare(`${t.productId}${t.variantId}`)).map(e=>({extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId,giftWrapping:e.giftWrapping}))}}}}class Ac extends be{constructor(e,t){super(\"An update to your shopping cart has been detected and your available shipping costs have been updated.\"),this.name=\"CartChangedError\",this.type=\"cart_changed\",this.data={previous:e,updated:t}}}class Tc{constructor(e){this._checkoutRequestSender=e}validate(e,t){if(!e)throw new Zi($i.MissingCheckout);return this._checkoutRequestSender.loadCheckout(e.id,t).then(t=>{const n=new Oc;if(!(e.outstandingBalance===t.body.outstandingBalance&&this._compareCoupons(e.coupons,t.body.coupons)&&this._compareGiftCertificates(e.giftCertificates,t.body.giftCertificates)&&n.isEqual(e.cart,t.body.cart)))throw new Ac(this._getComparableCheckout(e),this._getComparableCheckout(t.body))})}_compareCoupons(e,t){return _(P(e,\"code\"),P(t,\"code\"))}_compareGiftCertificates(e,t){return _(P(e,\"code\"),P(t,\"code\"))}_getComparableCheckout(e){const{cart:t,coupons:n,giftCertificates:i,outstandingBalance:r}=e;return{cart:{cartAmount:t.cartAmount,currency:t.currency,lineItems:t.lineItems},coupons:n,giftCertificates:i,outstandingBalance:r}}}var kc;class Rc{constructor(e){this._configRequestSender=e}loadConfig(e){return j.create(t=>{t.next(o(St.LoadConfigRequested)),this._configRequestSender.loadConfig(e).then(e=>{t.next(o(St.LoadConfigSucceeded,e.body)),t.complete()}).catch(e=>{t.error(s(St.LoadConfigFailed,e))})})}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([ic],Rc.prototype,\"loadConfig\",null);class Dc{constructor(e){this._requestSender=e}loadConfig({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/checkout-settings\",{timeout:e,headers:Object.assign({Accept:cc.JsonV1,\"X-API-INTERNAL\":uc},lc),params:t}).catch(e=>{if(e.status>=400&&e.status<500)throw new Ec(e);throw e})}}class Mc{constructor(e){this._couponRequestSender=e}applyCoupon(e,t){return n=>j.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new Zi($i.MissingCheckout);i.next(o(it.ApplyCouponRequested)),this._couponRequestSender.applyCoupon(r.id,e,t).then(({body:e})=>{i.next(o(it.ApplyCouponSucceeded,e)),i.complete()}).catch(e=>{i.error(s(it.ApplyCouponFailed,e))})})}removeCoupon(e,t){return n=>j.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new Zi($i.MissingCheckout);i.next(o(it.RemoveCouponRequested)),this._couponRequestSender.removeCoupon(r.id,e,t).then(({body:e})=>{i.next(o(it.RemoveCouponSucceeded,e)),i.complete()}).catch(e=>{i.error(s(it.RemoveCouponFailed,e))})})}}!function(e){e.AvailableShippingOptions=\"consignments.availableShippingOptions\",e.PhysicalItemsCategoryNames=\"cart.lineItems.physicalItems.categoryNames\",e.DigitalItemsCategoryNames=\"cart.lineItems.digitalItems.categoryNames\"}(kc||(kc={}));class Nc{constructor(e){this._requestSender=e}applyCoupon(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/coupons`,r=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.post(i,{headers:r,timeout:n,params:{include:Ic([...bc,kc.AvailableShippingOptions])},body:{couponCode:t}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new fc;throw e})}removeCoupon(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/coupons/${t}`,r=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.delete(i,{headers:r,timeout:n,params:{include:Ic([...bc,kc.AvailableShippingOptions])}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new fc;throw e})}}function Lc(e){const t=e;return\"object\"==typeof t&&\"object\"==typeof t.payload&&\"string\"==typeof t.payload.token}class zc{constructor(e,t,n){this._customerRequestSender=e,this._checkoutActionCreator=t,this._spamProtectionActionCreator=n}createCustomer(e,t){return n=>{const i=n.getState().config.getStoreConfigOrThrow(),{isStorefrontSpamProtectionEnabled:r}=i.checkoutSettings,a=i=>Y(this._customerRequestSender.createAccount(Object.assign(Object.assign({},e),{token:i}),t)).pipe(re(()=>V(this._checkoutActionCreator.loadCurrentCheckout(t)(n),Z(o(Ut.CreateCustomerSucceeded)))));return V(Z(o(Ut.CreateCustomerRequested)),r?Y(this._spamProtectionActionCreator.execute()(n)).pipe(re(e=>{var t;return Lc(e)?V(Z(e),a(null===(t=e.payload)||void 0===t?void 0:t.token)):Z(e)})):a()).pipe(Q(e=>gc(Ut.CreateCustomerFailed,e)))}}createAddress(e,t){return V(Z(o(Ut.CreateCustomerAddressRequested)),H(()=>{return n=this,i=void 0,a=function*(){const{body:n}=yield this._customerRequestSender.createAddress(e,t);return o(Ut.CreateCustomerAddressSucceeded,n)},new((r=void 0)||(r=Promise))(function(e,t){function o(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(o,s)}d((a=a.apply(n,i||[])).next())});var n,i,r,a})).pipe(Q(e=>gc(Ut.CreateCustomerAddressFailed,e)))}signInCustomer(e,t){return n=>{const i=n.getState().checkout.getCheckoutOrThrow(),r=i.cart.source===mo.BuyNow?i.id:void 0;return V(Z(o(Ut.SignInCustomerRequested)),Y(this._customerRequestSender.signInCustomer(Object.assign(Object.assign({},e),{cartId:r}),t)).pipe(re(({body:e})=>e.data.persistentCartRetrievalInformation?V(this._checkoutActionCreator.loadCheckout(e.data.persistentCartRetrievalInformation.id,t)(n),Z(o(Ut.SignInCustomerSucceeded,e.data))):V(this._checkoutActionCreator.loadCurrentCheckout(t)(n),Z(o(Ut.SignInCustomerSucceeded,e.data)))))).pipe(Q(e=>gc(Ut.SignInCustomerFailed,e)))}}signOutCustomer(e){return t=>{const n=t.getState().checkout.getCheckoutOrThrow(),i=n.cart.source===mo.BuyNow?n.id:void 0;return V(Z(o(Ut.SignOutCustomerRequested)),Y(this._customerRequestSender.signOutCustomer(e,i)).pipe(re(({body:n})=>V(this._checkoutActionCreator.loadCurrentCheckout(e)(t),Z(o(Ut.SignOutCustomerSucceeded,n.data)))))).pipe(Q(e=>gc(Ut.SignOutCustomerFailed,e)))}}}class Uc{constructor(e){this._requestSender=e}createAccount(e,{timeout:t}={}){return this._requestSender.post(\"/api/storefront/customer\",{timeout:t,headers:lc,body:e})}createAddress(e,{timeout:t}={}){return this._requestSender.post(\"/api/storefront/customer-address\",{timeout:t,headers:lc,body:e})}signInCustomer(e,{timeout:t}={}){return this._requestSender.post(\"/internalapi/v1/checkout/customer\",{timeout:t,headers:lc,body:e})}signOutCustomer({timeout:e}={},t){return this._requestSender.delete(\"/internalapi/v1/checkout/customer\",Object.assign({timeout:e,headers:lc},t&&{body:{cartId:t}}))}}class Fc{constructor(e){this._formFieldsRequestSender=e}loadFormFields(e){return V(Z(o(tn.LoadFormFieldsRequested)),H(()=>{return t=this,n=void 0,r=function*(){const{body:t}=yield this._formFieldsRequestSender.loadFields(e);return o(tn.LoadFormFieldsSucceeded,t)},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r})).pipe(Q(e=>gc(tn.LoadFormFieldsFailed,e)))}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([ic],Fc.prototype,\"loadFormFields\",null);class Bc{constructor(e){this._requestSender=e}loadFields({timeout:e}={}){return this._requestSender.get(\"/api/storefront/form-fields\",{timeout:e,headers:Object.assign({Accept:cc.JsonV1,\"X-API-INTERNAL\":uc},lc)})}}class xc extends be{constructor(e){super(e||\"Unable to proceed because the required element is unexpectedly detached from the page.\"),this.name=\"UnexpectedDetachmentError\",this.type=\"unexpected_detachment\"}}class qc{constructor(e){this._mutationObserver=e}ensurePresence(e,t){return n=this,i=void 0,o=function*(){const n=new $o(t),i=this._mutationObserver.create(t=>{t.forEach(t=>{0!==Array.from(t.removedNodes).filter(t=>e.some(e=>t===e||t.contains(e))).length&&n.cancel(new xc)})});i.observe(document.body,{childList:!0,subtree:!0});try{const e=yield n.promise;return i.disconnect(),e}catch(e){throw i.disconnect(),e}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}class jc{constructor(e=window){this._window=e}create(e){return new this._window.MutationObserver(e)}}class Gc extends be{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function Vc(e){if(!/^(https?:)?\\/\\//.test(e))throw new Gc(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=e;const n=t.port&&-1!==e.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${n?`:${n}`:\"\"}`,pathname:t.pathname,port:n,protocol:t.protocol,search:t.search}}function Hc(e,t){return e.type===t}class Wc{constructor(e,t,n){this._targetWindow=t,this._context=n,this._targetOrigin=\"*\"===e?\"*\":Vc(e).origin}post(e,t){const n=this._targetWindow;if(window===n)return;if(!n)throw new Error(\"Unable to post message because target window is not set.\");const i=t&&K(window,\"message\").pipe(ee(e=>e.origin===this._targetOrigin&&Hc(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)),te(e=>{if(t.errorType===e.data.type)throw e.data;return e.data}),oe(1)).toPromise();return n.postMessage(Object.assign(Object.assign({},e),{context:this._context}),this._targetOrigin),i}setTarget(e){this._targetWindow=e}setContext(e){this._context=e}}class Yc{constructor(e){var t;this._sourceOrigins=[Vc(e).origin,(t=Vc(e),Vc(0===t.hostname.indexOf(\"www\")?t.href:t.href.replace(t.hostname,`www.${t.hostname}`))).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const i=n.indexOf(t);i>=0&&n.splice(i,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){if(-1===this._sourceOrigins.indexOf(e.origin)||!Hc(e.data,e.data.type))return;const t=e.data,{context:n}=t,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"context\"]);this.trigger(i,n)}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([Ea],Yc.prototype,\"_handleMessage\",null);class Kc extends be{constructor(){super(\"You haven't complete our spam protection challenge. Please try again.\"),this.name=\"SpamProtectionChallengeNotCompletedError\",this.type=\"spam_protection_challenge_not_completed\"}}class $c extends be{constructor(){super(\"Please complete our human verification challenge and try again.\"),this.name=\"CardingProtectionChallengeNotCompletedError\",this.type=\"carding_protection_challenge_not_completed\"}}class Zc extends be{constructor(){super(\"We were not able to verify that you are not a robot. Please try again.\"),this.name=\"CardingProtectionFailedError\",this.type=\"carding_protection_failed\"}}var Jc,Qc,Xc,eu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class tu{constructor(e){this._googleRecaptcha=e}handle(e,t){return eu(this,void 0,void 0,function*(){return\"string\"==typeof e?this.handleWithRecaptchaSitekey(e,t):this.handleWithPaymentHumanVerificationRequestError(e)})}handleWithPaymentHumanVerificationRequestError(e){return eu(this,void 0,void 0,function*(){if(!this._isPaymentHumanVerificationRequest(e))throw e;return yield this._initialize(e.body.additional_action_required.data.key),this._performRecaptcha()})}handleWithRecaptchaSitekey(e,t){return eu(this,void 0,void 0,function*(){if(\"recaptcha_v2\"!==e)throw Error(\"Human verification method is not supported.\");if(!t)throw Error(\"Recaptcha site key is missing.\");return yield this._initialize(t),this._performRecaptcha()})}_performRecaptcha(){return this._googleRecaptcha.execute().pipe(oe(1)).pipe(re(({error:e,token:t})=>eu(this,void 0,void 0,function*(){if(e instanceof Kc)throw new $c;if(e||!t)throw new Zc;return{type:\"recaptcha_v2_verification\",data:{human_verification_token:t}}}))).toPromise()}_initialize(e){const t=\"cardingProtectionContainer\";let n=document.getElementById(t);return n&&n.parentNode&&n.parentNode.removeChild(n),n=document.createElement(\"div\"),n.setAttribute(\"id\",t),document.body.appendChild(n),this._googleRecaptcha.load(t,e)}_isPaymentHumanVerificationRequest(e){const{additional_action_required:t,status:n}=e.body||{};return\"additional_action_required\"===n&&t&&\"recaptcha_v2_verification\"===t.type}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(Jc||(Jc={}));class nu extends be{constructor(e){super(function(e){switch(e){case Jc.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case Jc.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case Jc.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case Jc.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class iu extends be{constructor(){super(\"We were not able to complete your spam protection verification. Please try again.\"),this.name=\"SpamProtectionFailedError\",this.type=\"spam_protection_failed\"}}class ru extends be{constructor(){super(\"Spam protection is not loaded. Please try again.\"),this.name=\"SpamProtectionNotLoadedError\",this.type=\"spam_protection_failed\"}}class ou{constructor(e,t){this.googleRecaptchaScriptLoader=e,this.mutationObserverFactory=t,this._memoized=ae((e,t,n)=>{const i=new G;if(!n)throw new Error;return this._widgetId=e.render(n.id,{sitekey:t,size:\"invisible\",callback:()=>{i.next({token:e.getResponse(this._widgetId)}),e.reset(this._widgetId)},\"error-callback\":()=>{i.next({error:new iu})}}),i},{isEqual:(e,t)=>e===t})}load(e,t){return this.googleRecaptchaScriptLoader.load().then(n=>{n&&(this._event$=this._memoized(n,t,document.getElementById(e)),this._recaptcha=n)}).catch(e=>{throw e})}reset(e){var t;const n=document.getElementById(e);null==n||n.remove(),null===(t=this._recaptcha)||void 0===t||t.reset(this._widgetId)}execute(){return H(()=>{const e=this._event$,t=this._recaptcha;if(!e||!t)throw new nu(Jc.SpamProtectionNotInitialized);return H(()=>{const e=document.querySelector('iframe[src*=\"bframe\"]');return e?Z(e):J(new ru)}).pipe(ne(e=>e.pipe(X(250),re((e,t)=>t<28?Z(e):J(e)))),re(n=>(this._watchRecaptchaChallengeWindow(e,n),t.execute(this._widgetId),e)),Q(e=>Z({error:e})))})}_watchRecaptchaChallengeWindow(e,t){const n=t.parentElement;if(!n)throw new ru;const i=n.parentElement;if(!i)throw new ru;this.mutationObserverFactory.create(()=>{\"hidden\"===i.style.visibility&&e.next({error:new Kc})}).observe(i,{attributes:!0,attributeFilter:[\"style\"]})}}class au{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(){return this._loadPromise||(this._loadPromise=this._loadScript()),this._loadPromise}_loadScript(){const e=\"initRecaptcha\",t=[`onload=${e}`,\"render=explicit\"].join(\"&\");return new Promise((n,i)=>{this._window[e]=()=>n(this._window.grecaptcha),this._scriptLoader.loadScript(`//www.google.com/recaptcha/api.js?${t}`).catch(e=>{this._loadPromise=void 0,i(e)})})}}function su(e){return new ou(new au(e),new jc)}class du extends be{constructor(e){super(e||\"Unable to proceed due to invalid configuration provided for the hosted payment form.\"),this.name=\"InvalidHostedFormConfigError\",this.type=\"invalid_hosted_form_config\"}}class cu extends be{constructor(e){super(e||\"Unable to proceed due to an unknown error with the hosted payment form.\"),this.name=\"InvalidHostedFormError\",this.type=\"invalid_hosted_form\"}}class uu extends be{constructor(e){super([\"Unable to proceed due to invalid user input values\",...p(x(e),e=>P(e,({message:e})=>e))].join(\". \")),this.errors=e,this.name=\"InvalidHostedFormValueError\",this.type=\"invalid_hosted_form_value\"}}!function(e){e.AttachRequested=\"HOSTED_FIELD:ATTACH_REQUESTED\",e.SubmitRequested=\"HOSTED_FIELD:SUBMITTED_REQUESTED\",e.ValidateRequested=\"HOSTED_FIELD:VALIDATE_REQUESTED\",e.StoredCardRequested=\"HOSTED_FIELD:STORED_CARD_REQUESTED\"}(Qc||(Qc={})),function(e){e.AttachSucceeded=\"HOSTED_INPUT:ATTACH_SUCCEEDED\",e.AttachFailed=\"HOSTED_INPUT:ATTACH_FAILED\",e.BinChanged=\"HOSTED_INPUT:BIN_CHANGED\",e.Blurred=\"HOSTED_INPUT:BLURRED\",e.Changed=\"HOSTED_INPUT:CHANGED\",e.CardTypeChanged=\"HOSTED_INPUT:CARD_TYPE_CHANGED\",e.Entered=\"HOSTED_INPUT:ENTERED\",e.Focused=\"HOSTED_INPUT:FOCUSED\",e.SubmitSucceeded=\"HOSTED_INPUT:SUBMIT_SUCCEEDED\",e.SubmitFailed=\"HOSTED_INPUT:SUBMIT_FAILED\",e.Validated=\"HOSTED_INPUT:VALIDATED\",e.StoredCardSucceeded=\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",e.StoredCardFailed=\"HOSTED_INPUT:STORED_CARD_FAILED\"}(Xc||(Xc={}));var lu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class hu{constructor(e,t,n,i,r,o,a,s,d,c){this._type=e,this._containerId=t,this._placeholder=n,this._accessibilityLabel=i,this._styles=r,this._eventPoster=o,this._eventListener=a,this._detachmentObserver=s,this._checkoutId=d,this._cardInstrument=c,this._iframe=document.createElement(\"iframe\");const u=this._checkoutId?`/checkout/payment/hosted-field?version=1.916.1&checkoutId=${this._checkoutId}`:\"/checkout/payment/hosted-field?version=1.916.1\";this._iframe.src=u,this._iframe.style.border=\"none\",this._iframe.style.height=\"100%\",this._iframe.style.overflow=\"hidden\",this._iframe.style.width=\"100%\"}getType(){return this._type}attach(){return lu(this,void 0,void 0,function*(){const e=document.getElementById(this._containerId);if(!e)throw new du(\"Unable to proceed because the provided container ID is not valid.\");e.appendChild(this._iframe),this._eventListener.listen();const t=K(this._iframe,\"load\").pipe(re(({target:e})=>lu(this,void 0,void 0,function*(){const t=e&&e.contentWindow;if(!t)throw new Error(\"The content window of the iframe cannot be accessed.\");this._eventPoster.setTarget(t),yield this._eventPoster.post({type:Qc.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,cardInstrument:this._cardInstrument,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:Xc.AttachSucceeded,errorType:Xc.AttachFailed})})),oe(1)).toPromise();yield this._detachmentObserver.ensurePresence([this._iframe],t)})}detach(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())}submitForm(e,t){return lu(this,void 0,void 0,function*(){try{const n=this._eventPoster.post({type:Qc.SubmitRequested,payload:{fields:e,data:t}},{successType:Xc.SubmitSucceeded,errorType:Xc.SubmitFailed});return yield this._detachmentObserver.ensurePresence([this._iframe],n)}catch(e){if(this._isSubmitErrorEvent(e)){if(\"hosted_form_error\"===e.payload.error.code)throw new cu(e.payload.error.message);if(e.payload.response)throw Te(e.payload.response);throw new Error(e.payload.error.message)}throw e}})}submitStoredCardForm(e,t){return lu(this,void 0,void 0,function*(){const n=this._eventPoster.post({type:Qc.StoredCardRequested,payload:{fields:e,data:t}},{successType:Xc.StoredCardSucceeded,errorType:Xc.StoredCardFailed});return this._detachmentObserver.ensurePresence([this._iframe],n)})}validateForm(){return lu(this,void 0,void 0,function*(){const e=this._eventPoster.post({type:Qc.ValidateRequested},{successType:Xc.Validated}),{payload:t}=yield this._detachmentObserver.ensurePresence([this._iframe],e);if(!t.isValid)throw new uu(t.errors)})}_getFontUrls(){const e=\"fonts.googleapis.com\",t=document.querySelectorAll(`link[href*='${e}'][rel='stylesheet']`);return Array.prototype.slice.call(t).filter(t=>Vc(t.href).hostname===e).filter(e=>x(this._styles).map(e=>e&&e.fontFamily).filter(e=>\"string\"==typeof e).some(t=>t.split(/,\\s/).some(t=>-1!==e.href.indexOf(t.replace(\" \",\"+\"))))).map(e=>e.href)}_isSubmitErrorEvent(e){return e.type===Xc.SubmitFailed}}var pu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class gu{constructor(e,t,n,i,r){this._fields=e,this._eventListener=t,this._payloadTransformer=n,this._eventCallbacks=i,this._paymentHumanVerificationHandler=r,this._handleEnter=({payload:e})=>pu(this,void 0,void 0,function*(){try{yield this.validate()}catch(e){if(e instanceof Error&&\"InvalidHostedFormValueError\"!==e.name)throw e}const{onEnter:t=T}=this._eventCallbacks;t(e)});const{onBlur:o=T,onCardTypeChange:a=T,onFocus:s=T,onValidate:d=T}=this._eventCallbacks;this._eventListener.addListener(Xc.Blurred,({payload:e})=>o(e)),this._eventListener.addListener(Xc.CardTypeChanged,({payload:e})=>a(e)),this._eventListener.addListener(Xc.Focused,({payload:e})=>s(e)),this._eventListener.addListener(Xc.Validated,({payload:e})=>d(e)),this._eventListener.addListener(Xc.Entered,this._handleEnter),this._eventListener.addListener(Xc.CardTypeChanged,({payload:e})=>this._cardType=e.cardType),this._eventListener.addListener(Xc.BinChanged,({payload:e})=>this._bin=e.bin)}getBin(){return this._bin}getCardType(){return this._cardType}attach(){return pu(this,void 0,void 0,function*(){this._eventListener.listen();const e=this._getFirstField(),t=q(this._fields,e);yield e.attach(),yield Promise.all(t.map(e=>e.attach()))})}detach(){this._eventListener.stopListen(),this._fields.forEach(e=>{e.detach()})}submit(e,t){return pu(this,void 0,void 0,function*(){try{return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),this._payloadTransformer.transform(e,t))}catch(t){const n=yield this._paymentHumanVerificationHandler.handle(t);return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),this._payloadTransformer.transform(e,n))}})}submitStoredCard(e){return pu(this,void 0,void 0,function*(){return this._getFirstField().submitStoredCardForm(e.fields,e.data)})}validate(){return pu(this,void 0,void 0,function*(){return this._getFirstField().validateForm()})}_getFirstField(){const e=this._fields[0];if(!e)throw new du(\"Unable to proceed because the payment form has no field defined.\");return e}}function mu(e){return Boolean(e.instrumentId)}class yu{constructor(e){this._store=e}transform(e,t){const n=this._store.getState(),i=n.checkout.getCheckout(),r=n.config.getConfig(),o=n.instruments.getInstrumentsMeta(),a=n.order.getOrder(),s=n.order.getOrderMeta(),d=k(e.paymentData,\"ccExpiry\",\"ccName\",\"ccNumber\",\"ccCvv\");let c=n.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId);\"worldpayaccess\"===(null==c?void 0:c.gateway)&&\"credit_card\"===(null==c?void 0:c.id)&&(c=Object.assign(Object.assign({},c),{id:\"worldpayaccess\",method:\"credit-card\"}));const u=n.paymentMethods.getPaymentMethodsMeta(),l=o&&d&&mu(d)?`${n.payment.getPaymentToken()}, ${o.vaultAccessToken}`:n.payment.getPaymentToken();if(!l)throw new Zi($i.MissingPaymentToken);return{additionalAction:t,authToken:l,checkout:i,config:r,order:a,orderMeta:s,payment:d,paymentMethod:c,paymentMethodMeta:u}}}class fu{constructor(e){this._store=e}create(e,t,n){const i=Object.keys(t.fields).reduce((i,r)=>{const o=t.fields[r];return o?[...i,new hu(r,o.containerId,o.placeholder||\"\",o.accessibilityLabel||\"\",t.styles||{},new Wc(e),new Yc(e),new qc(new jc),n,\"instrumentId\"in o?this._getCardInstrument(o.instrumentId):void 0)]:i},[]);return new gu(i,new Yc(e),new yu(this._store),D(t,\"onBlur\",\"onEnter\",\"onFocus\",\"onCardTypeChange\",\"onValidate\"),new tu(su(ue())))}_getCardInstrument(e){const{instruments:{getCardInstrument:t}}=this._store.getState(),n=t(e);if(!n)throw new Zi($i.MissingPaymentInstrument);return n}}class _u extends be{constructor(){super(\"You haven't complete our spam check. Please try again.\"),this.name=\"SpamProtectionNotCompletedError\",this.type=\"spam_protection_not_completed\"}}class vu{constructor(e,t){this._orderRequestSender=e,this._checkoutValidator=t}loadOrder(e,t){return new j(n=>{n.next(o(Pt.LoadOrderRequested)),this._orderRequestSender.loadOrder(e,t).then(e=>{n.next(o(Pt.LoadOrderSucceeded,e.body)),n.complete()}).catch(e=>{n.error(s(Pt.LoadOrderFailed,e))})})}loadOrderPayments(e,t){return new j(n=>{n.next(o(Pt.LoadOrderPaymentsRequested)),this._orderRequestSender.loadOrder(e,t).then(e=>{n.next(o(Pt.LoadOrderPaymentsSucceeded,e.body)),n.complete()}).catch(e=>{n.error(s(Pt.LoadOrderPaymentsFailed,e))})})}loadCurrentOrder(e){return t=>H(()=>{const n=this._getCurrentOrderId(t.getState());if(!n)throw new Zi($i.MissingOrderId);return this.loadOrder(n,e)})}submitOrder(e,t){return n=>V(Z(o(Pt.SubmitOrderRequested)),H(()=>{const i=n.getState(),r=i.config.getExternalSource(),a=i.config.getVariantIdentificationToken(),s=i.checkout.getCheckout();if(!s)throw new Zi($i.MissingCheckout);if(s.shouldExecuteSpamCheck)throw new _u;return Y(this._checkoutValidator.validate(s,t).then(()=>this._orderRequestSender.submitOrder(this._mapToOrderRequestBody(null!=e?e:{},s.id,s.customerMessage,r),Object.assign(Object.assign({},t),{headers:{checkoutVariant:a}})))).pipe(re(e=>V(this.loadOrder(e.body.data.order.orderId,t),Z(o(Pt.SubmitOrderSucceeded,e.body.data,Object.assign(Object.assign({},e.body.meta),{token:e.headers.token}))))))}).pipe(Q(e=>gc(Pt.SubmitOrderFailed,e))))}finalizeOrder(e,t){return V(Z(o(Pt.FinalizeOrderRequested)),Y(this._orderRequestSender.finalizeOrder(e,t)).pipe(re(n=>V(this.loadOrder(e,t),Z(o(Pt.FinalizeOrderSucceeded,n.body.data)))))).pipe(Q(e=>gc(Pt.FinalizeOrderFailed,e)))}_getCurrentOrderId(e){const t=e.order.getOrder(),n=e.checkout.getCheckout();return t&&t.orderId||n&&n.orderId}_mapToOrderRequestBody(e,t,n,i){const{payment:r}=e,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);return r?Object.assign(Object.assign({},o),{cartId:t,customerMessage:n,externalSource:i,payment:{paymentData:r.paymentData,name:r.methodId,gateway:r.gatewayId}}):Object.assign(Object.assign({},o),{cartId:t,customerMessage:n,externalSource:i})}}class Su extends be{constructor(e){super(e||\"Your checkout could not be processed because some details have changed. Please review your order and try again.\"),this.name=\"CartConsistencyError\",this.type=\"cart_consistency\"}}class Cu extends be{constructor(e,t){super(t||\"At least one item changed stock position. Please review your cart and try again.\"),this.name=\"CartStockPositionsChangedError\",this.type=\"cart_stock_positions_changed\",this.changedItemIds=e}}class Iu extends be{constructor(e){super(e||\"The tax provider is unavailable.\"),this.name=\"OrderTaxProviderUnavailableError\",this.type=\"tax_provider_unavailable\"}}class wu extends be{constructor(e){super(e),this.name=\"MissingShippingMethodError\",this.type=\"missing_shipping_method\"}}class bu extends be{constructor(e){super(e),this.name=\"InvalidShippingAddressError\",this.type=\"invalid_shipping_address\"}}class Eu{constructor(e){this._requestSender=e}loadOrder(e,{timeout:t}={}){const n=`/api/storefront/orders/${e}`,i=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.get(n,{params:{include:Ic([\"payments\",\"lineItems.physicalItems.socialMedia\",\"lineItems.physicalItems.options\",\"lineItems.physicalItems.categories\",\"lineItems.digitalItems.socialMedia\",\"lineItems.digitalItems.options\",\"lineItems.digitalItems.categories\"])},headers:i,timeout:t})}submitOrder(e,{headers:t,timeout:n}={}){return this._requestSender.post(\"/internalapi/v1/checkout/order\",{body:e,headers:R(Object.assign({\"X-Checkout-Variant\":t&&t.checkoutVariant},lc),S),timeout:n}).catch(e=>{var t,n;if(\"tax_provider_unavailable\"===e.body.type)throw new Iu;if(\"cart_has_changed\"===e.body.type)throw new Su;if(\"cart_stock_positions_changed\"===e.body.type){const i=null!==(n=null===(t=e.body.errors)||void 0===t?void 0:t.changedItemIds)&&void 0!==n?n:[];throw new Cu(i)}if(\"missing_shipping_method\"===e.body.type)throw new wu(e.body.detail);if(\"invalid_shipping_address\"===e.body.type)throw new bu(e.body.detail);if(\"empty_cart\"===e.body.type)throw new fc;throw e})}finalizeOrder(e,{timeout:t}={}){const n=`/internalapi/v1/checkout/order/${e}`;return this._requestSender.post(n,{timeout:t,headers:lc})}}class Pu{constructor(e,t,n,i){this._paymentRequestSender=e,this._orderActionCreator=t,this._paymentRequestTransformer=n,this._paymentHumanVerificationHandler=i,this.initializeOffsitePayment=({methodId:e,gatewayId:t,instrumentId:n,target:i,promise:r,shouldSaveInstrument:a,shouldSetAsDefaultInstrument:s})=>d=>{let c;n?c={formattedPayload:{bigpay_token:n}}:a&&(c={formattedPayload:{vault_payment_instrument:a,set_as_default_stored_instrument:s||null}});const u=this._paymentRequestTransformer.transform({gatewayId:t,methodId:e,paymentData:c},d.getState());return V(Z(o(bn.InitializeOffsitePaymentRequested)),Promise.race([this._paymentRequestSender.initializeOffsitePayment(u,i),r].filter(Boolean)).then(()=>o(bn.InitializeOffsitePaymentSucceeded))).pipe(Q(e=>gc(bn.InitializeOffsitePaymentFailed,e)))}}submitPayment(e){return t=>V(Z(o(bn.SubmitPaymentRequested)),H(()=>{return n=this,i=void 0,o=function*(){try{return yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(e,t.getState()))}catch(n){const i=yield this._paymentHumanVerificationHandler.handle(n);return yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(Object.assign(Object.assign({},e),{additionalAction:i}),t.getState()))}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}).pipe(re(({body:e})=>V(this._orderActionCreator.loadCurrentOrder()(t),Z(o(bn.SubmitPaymentSucceeded,e)))))).pipe(Q(e=>gc(bn.SubmitPaymentFailed,e)))}}class Ou{constructor(e){this._client=e}submitPayment(e){return new Promise((t,n)=>{this._client.submitPayment(e,(e,i)=>{e?n(this._transformResponse(e)):t(this._transformResponse(i))})})}initializeOffsitePayment(e,t){return new Promise(()=>{this._client.initializeOffsitePayment(e,null,t)})}_transformResponse(e){return{headers:e.headers,body:e.data,status:e.status,statusText:e.statusText}}}function Au(e,t){let n;return function(e){return void 0!==e.id}(e)?n=e.id:t&&t.length&&(n=t[0].id),{id:n,firstName:e.firstName,lastName:e.lastName,company:e.company,addressLine1:e.address1,addressLine2:e.address2,city:e.city,province:e.stateOrProvince,provinceCode:e.stateOrProvinceCode,postCode:e.postalCode,country:e.country,countryCode:e.countryCode,phone:e.phone,customFields:e.customFields}}const Tu=[\"per_item_discount\",\"percentage_discount\",\"per_total_discount\",\"shipping_discount\",\"free_shipping\"];function ku(e){return{code:e.code,discount:e.displayName,discountType:Tu.indexOf(e.couponType)}}function Ru(e){return{code:e.code,discountedAmount:e.used,remainingBalance:e.remaining,giftCertificate:{balance:e.balance,code:e.code,purchaseDate:e.purchaseDate}}}function Du(e){const t=[];return(e||[]).forEach(e=>{(e.banners||[]).forEach(e=>{t.push({placeholders:[],discountType:null,message:\"\",messageHtml:e.text})})}),t}function Mu(e,t,n=\"id\"){return Object.keys(e).reduce((i,r)=>[...i,...e[r].map(e=>\"giftCertificates\"===r?function(e,t){const n=new Qd(t);return{id:e.id,imageUrl:\"\",name:e.name,amount:e.amount,amountAfterDiscount:e.amount,discount:0,integerAmount:n.toInteger(e.amount),integerAmountAfterDiscount:n.toInteger(e.amount),integerUnitPrice:n.toInteger(e.amount),integerUnitPriceAfterDiscount:n.toInteger(e.amount),integerDiscount:0,quantity:1,sender:e.sender,recipient:e.recipient,type:\"ItemGiftCertificateEntity\",attributes:[],variantId:null}}(e,t):function(e,t,n,i=\"id\"){const r=new Qd(n);return{id:e[i],imageUrl:e.imageUrl,amount:e.extendedListPrice,amountAfterDiscount:e.extendedSalePrice,discount:e.discountAmount,integerAmount:r.toInteger(e.extendedListPrice),integerAmountAfterDiscount:r.toInteger(e.extendedSalePrice),integerDiscount:r.toInteger(e.discountAmount),integerUnitPrice:r.toInteger(e.listPrice),integerUnitPriceAfterDiscount:r.toInteger(e.salePrice),downloadsPageUrl:e.downloadPageUrl,name:e.name,quantity:e.quantity,brand:e.brand,sku:e.sku,categoryNames:e.categoryNames,variantId:e.variantId,productId:e.productId,attributes:(e.options||[]).map(e=>({name:e.name,value:e.value})),addedByPromotion:e.addedByPromotion,type:t}}(e,function(e){switch(e){case\"physicalItems\":return\"ItemPhysicalEntity\";case\"digitalItems\":return\"ItemDigitalEntity\";case\"giftCertificates\":return\"ItemGiftCertificateEntity\";default:return\"\"}}(r),t,n))],[])}function Nu(e){const t=e.cart.currency.decimalPlaces,n=new Qd(t);return{id:e.cart.id,items:Mu(e.cart.lineItems,t),currency:e.cart.currency.code,coupon:{discountedAmount:N(e.cart.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.cart.coupons.map(ku)},discount:{amount:e.cart.discountAmount,integerAmount:n.toInteger(e.cart.discountAmount)},discountNotifications:Du(e.promotions),giftCertificate:{totalDiscountedAmount:N(e.giftCertificates,(e,t)=>e+t.used,0),appliedGiftCertificates:w(e.giftCertificates.map(Ru),\"code\")},shipping:{amount:e.shippingCostTotal,integerAmount:n.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:n.toInteger(e.shippingCostBeforeDiscount),required:z(e.cart.lineItems.physicalItems,e=>e.isShippingRequired)},subtotal:{amount:e.subtotal,integerAmount:n.toInteger(e.subtotal)},storeCredit:{amount:e.customer?e.customer.storeCredit:0},taxSubtotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:n.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.grandTotal,integerAmount:n.toInteger(e.grandTotal)}}}var Lu;!function(e){e.APPLEPAY=\"applepay\",e.AMAZON_PAY_V2=\"amazonpay\",e.BRAINTREE_PAYPAL=\"braintreepaypal\",e.BRAINTREE_VENMO=\"braintreevenmo\",e.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",e.GOOGLEPAY_ADYENV2=\"googlepayadyenv2\",e.GOOGLEPAY_ADYENV3=\"googlepayadyenv3\",e.GOOGLEPAY_AUTHORIZENET=\"googlepayauthorizenet\",e.GOOGLEPAY_BNZ=\"googlepaybnz\",e.GOOGLEPAY_BRAINTREE=\"googlepaybraintree\",e.GOOGLEPAY_CHECKOUTCOM=\"googlepaycheckoutcom\",e.GOOGLEPAY_CYBERSOURCEV2=\"googlepaycybersourcev2\",e.GOOGLEPAY_ORBITAL=\"googlepayorbital\",e.GOOGLEPAY_STRIPE=\"googlepaystripe\",e.GOOGLEPAY_STRIPEUPE=\"googlepaystripeupe\",e.GOOGLEPAY_WORLDPAYACCESS=\"googlepayworldpayaccess\",e.PAYPALEXPRESS=\"paypalexpress\"}(Lu||(Lu={}));const zu=Lu;function Uu(e,t){const n=e.firstName||t.firstName||\"\",i=e.lastName||t.lastName||\"\";return{addresses:(e.addresses||[]).map(e=>Au(e)),customerId:e.id,isGuest:e.isGuest,storeCredit:e.storeCredit,email:e.email||t.email||\"\",firstName:n,lastName:i,name:e.fullName||[n,i].join(\" \"),customerGroupName:e.customerGroup&&e.customerGroup.name}}class Fu{format(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\")),i=t.slice(0,2),r=4===n.length?n.slice(-2):n?n.slice(0,2):t.slice(2);return e.length<2?t:e.length>3&&!r?i:`${i} / ${r}`}toObject(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\"));return/^\\d+$/.test(t)&&/^\\d+$/.test(n)?{month:1===t.length?`0${t}`:t.slice(0,2),year:2===n.length?`20${n}`:n.slice(0,4)}:{month:\"\",year:\"\"}}}class Bu{format(e){const{card:t}=ye(e);if(!t)return e;const n=O(me(e).map(e=>O(e.lengths))),i=this.unformat(e).slice(0,n);return t.gaps.filter(e=>i.length>e).reduce((e,t,n)=>[e.slice(0,t+n),e.slice(t+n)].join(\" \"),i)}unformat(e){const{card:t}=ye(e);return t?e.replace(new RegExp(\" \",\"g\"),\"\"):e}}function xu(e,t={}){const n=e.currency.decimalPlaces,i=new Qd(n);return{id:e.orderId,items:Mu(e.lineItems,e.currency.decimalPlaces,\"productId\"),orderId:e.orderId,currency:e.currency.code,customerCanBeCreated:e.customerCanBeCreated,payment:Gu(e.payments,t.payment),subtotal:{amount:e.baseAmount,integerAmount:i.toInteger(e.baseAmount)},coupon:{discountedAmount:N(e.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.coupons.map(ku)},discount:{amount:e.discountAmount,integerAmount:i.toInteger(e.discountAmount)},token:t.orderToken,callbackUrl:t.callbackUrl,discountNotifications:[],giftCertificate:ju(e.payments),socialData:Hu(e),status:e.status,hasDigitalItems:e.hasDigitalItems,isDownloadable:e.isDownloadable,isComplete:e.isComplete,shipping:{amount:e.shippingCostTotal,integerAmount:i.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:i.toInteger(e.shippingCostBeforeDiscount)},storeCredit:{amount:qu(e.payments)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:i.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:i.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.orderAmount,integerAmount:e.orderAmountAsInteger}}}function qu(e){const t=l(e,{providerId:\"storecredit\"});return t?t.amount:0}function ju(e){const t=u(e,{providerId:\"giftcertificate\"});return{totalDiscountedAmount:N(t,(e,t)=>t.amount+e,0),appliedGiftCertificates:w(t.map(e=>({code:e.detail.code,discountedAmount:e.amount,remainingBalance:e.detail.remaining,giftCertificate:{balance:e.amount+e.detail.remaining,code:e.detail.code,purchaseDate:\"\"}})),\"code\")}}function Gu(e,t={}){const n=l(e,Vu);return n?{id:n.providerId,status:(i=n.detail.step,`PAYMENT_STATUS_${i}`),helpText:n.detail.instructions,returnUrl:t.returnUrl}:{};var i}function Vu(e){return\"giftcertificate\"!==e.providerId&&\"storecredit\"!==e.providerId}function Hu(e){const t={};return[...e.lineItems.physicalItems,...e.lineItems.digitalItems].forEach(e=>{var n;t[e.id]=(n=e,[\"fb\",\"tw\",\"gp\"].reduce((e,t)=>{const i=n.socialMedia&&l(n.socialMedia,e=>e.code===t);return i?(e[t]={name:n.name,description:n.name,image:n.imageUrl,url:i.link,shareText:i.text,sharingLink:i.link,channelName:i.channel,channelCode:i.code},e):e},{}))}),t}function Wu(e,t){return{description:e.description,module:e.type,price:e.cost,id:e.id,selected:t,isRecommended:e.isRecommended,imageUrl:e.imageUrl,transitTime:e.transitTime}}class Yu{constructor(){this._cardExpiryFormatter=new Fu,this._cardNumberFormatter=new Bu}transform(e,t){const n=t.billingAddress.getBillingAddress(),i=t.checkout.getCheckout(),r=t.customer.getCustomer(),o=t.order.getOrder(),a=t.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId),s=this._mapShippingAddress(t,a),d=t.consignments.getConsignments(),c=t.consignments.getShippingOption(),u=t.config.getStoreConfig(),l=t.config.getContextConfig(),h=t.instruments.getInstrumentsMeta(),p=t.paymentMethods.getPaymentMethodsMeta(),g=t.order.getOrderMeta(),m=r&&n&&Uu(r,n),y=h&&e.paymentData&&(mu(e.paymentData)||function(e){const t=e.formattedPayload;return!!t&&(\"string\"==typeof t.bigpay_token||Boolean(t.bigpay_token&&t.bigpay_token.token))}(e.paymentData))?`${t.payment.getPaymentToken()}, ${h.vaultAccessToken}`:t.payment.getPaymentToken();if(!y)throw new Zi($i.MissingPaymentToken);return{additionalAction:e.additionalAction,authToken:y,customer:m,billingAddress:n&&Au(n),shippingAddress:s&&Au(s,d),shippingOption:c&&Wu(c,!0),cart:i&&Nu(i),order:o&&xu(o,g),orderMeta:g,payment:e.paymentData,paymentMethod:a&&this._transformPaymentMethod(a),quoteMeta:{request:Object.assign(Object.assign({},p),{geoCountryCode:l&&l.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:D(u&&u.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}transformWithHostedFormData(e,t,n){const{additionalAction:i,authToken:r,checkout:o,config:a,order:s,orderMeta:d,payment:c={},paymentMethod:u,paymentMethodMeta:l}=t,h=o&&o.consignments[0],p=h&&h.shippingAddress,g=h&&h.selectedShippingOption;return{additionalAction:i,authToken:r,paymentMethod:u&&this._transformPaymentMethod(u),customer:s&&s.billingAddress&&o&&Uu(o.customer,s.billingAddress),billingAddress:s&&s.billingAddress&&Au(s.billingAddress),shippingAddress:p&&o&&Au(p,o.consignments),shippingOption:g&&Wu(g,!0),cart:o&&Nu(o),order:s&&xu(s,d),orderMeta:d,payment:this._transformHostedInputValues(e,c,n),quoteMeta:{request:Object.assign(Object.assign({},l),{geoCountryCode:a&&a.context.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:a&&D(a.storeConfig.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}_transformPaymentMethod(e){if(\"multi-option\"===e.method&&!e.gateway)return Object.assign(Object.assign({},e),{gateway:e.id});if(e.initializationData&&e.initializationData.gateway)return Object.assign(Object.assign({},e),{id:e.initializationData.gateway});if(\"worldpayaccess\"===e.gateway){if(\"credit_card\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"credit-card\"});if(\"open_banking\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"open_banking\"})}return e.id===zu.BRAINTREE_VENMO?Object.assign(Object.assign({},e),{id:zu.BRAINTREE_PAYPAL}):e}_transformHostedInputValues(e,t,n){return\"instrumentId\"in t?Object.assign(Object.assign({},t),{ccCvv:e.cardCodeVerification,ccNumber:e.cardNumberVerification&&this._cardNumberFormatter.unformat(e.cardNumberVerification),hostedFormNonce:n}):Object.assign(Object.assign({},t),{ccCvv:e.cardCode,ccExpiry:this._cardExpiryFormatter.toObject(e.cardExpiry||\"\"),ccName:e.cardName||\"\",ccNumber:this._cardNumberFormatter.unformat(e.cardNumber||\"\"),hostedFormNonce:n})}_mapShippingAddress(e,t){var n,i,r,o;if(t){const a=null===(i=null===(n=t.initializationData)||void 0===n?void 0:n.bopis)||void 0===i?void 0:i.enabled,s=null===(o=null===(r=t.initializationData)||void 0===r?void 0:r.bopis)||void 0===o?void 0:o.requiredAddress,d=e.consignments.getConsignments(),c=null==d?void 0:d.every(e=>e.selectedPickupOption);if(a&&c&&\"none\"===s)return}return e.shippingAddress.getShippingAddress()}}class Ku{updatePaymentProviderCustomer(e){return Z(o(xn.UpdatePaymentProviderCustomer,e))}}class $u{widgetInteraction(e,t){const n={methodId:t&&t.methodId};return V(Z(o(Nn.WidgetInteractionStarted,void 0,n)),H(()=>e().then(()=>o(Nn.WidgetInteractionFinished,void 0,n)))).pipe(Q(e=>gc(Nn.WidgetInteractionFailed,e,n)))}}class Zu{constructor(e,t){this._remoteCheckoutRequestSender=e,this._checkoutActionCreator=t}initializeBilling(e,t,n){return j.create(i=>{i.next(o(Jn.InitializeRemoteBillingRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializeBilling(e,t,n).then(({body:t={}})=>{i.next(o(Jn.InitializeRemoteBillingSucceeded,t,{methodId:e})),i.complete()}).catch(t=>{i.error(s(Jn.InitializeRemoteBillingFailed,t,{methodId:e}))})})}initializeShipping(e,t,n){return j.create(i=>{i.next(o(Jn.InitializeRemoteShippingRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializeShipping(e,t,n).then(({body:t={}})=>{i.next(o(Jn.InitializeRemoteShippingSucceeded,t,{methodId:e})),i.complete()}).catch(t=>{i.error(s(Jn.InitializeRemoteShippingFailed,t,{methodId:e}))})})}initializePayment(e,t,n){return j.create(i=>{i.next(o(Jn.InitializeRemotePaymentRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializePayment(e,t,n).then(({body:t={}})=>{i.next(o(Jn.InitializeRemotePaymentSucceeded,t,{methodId:e})),i.complete()}).catch(t=>{i.error(s(Jn.InitializeRemotePaymentFailed,t,{methodId:e}))})})}loadSettings(e,t){return j.create(n=>{n.next(o(Jn.LoadRemoteSettingsRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.loadSettings(e,t).then(({body:t})=>{n.next(o(Jn.LoadRemoteSettingsSucceeded,t,{methodId:e})),n.complete()}).catch(t=>{n.error(s(Jn.LoadRemoteSettingsFailed,t,{methodId:e}))})})}signOut(e,t){return j.create(n=>{n.next(o(Jn.SignOutRemoteCustomerRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.signOut(e,t).then(()=>{n.next(o(Jn.SignOutRemoteCustomerSucceeded,void 0,{methodId:e})),n.complete()}).catch(t=>{n.error(s(Jn.SignOutRemoteCustomerFailed,t,{methodId:e}))})})}forgetCheckout(e,t){return V(Z(o(Jn.ForgetCheckoutRemoteCustomerRequested,void 0,{methodId:e})),H(()=>{return n=this,i=void 0,a=function*(){return yield this._remoteCheckoutRequestSender.forgetCheckout(t),yield this._checkoutActionCreator.loadCurrentCheckout(),o(Jn.ForgetCheckoutRemoteCustomerSucceeded,void 0,{methodId:e})},new((r=void 0)||(r=Promise))(function(e,t){function o(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(o,s)}d((a=a.apply(n,i||[])).next())});var n,i,r,a})).pipe(Q(t=>gc(Jn.ForgetCheckoutRemoteCustomerFailed,t,{methodId:e})))}updateCheckout(e,t){return o(Jn.UpdateRemoteCheckout,t,{methodId:e})}}class Ju{constructor(e){this._requestSender=e}initializeBilling(e,t,{timeout:n}={}){const i=`/remote-checkout/${e}/billing`;return this._requestSender.get(i,{params:t,timeout:n,headers:lc})}initializeShipping(e,t,{timeout:n}={}){const i=`/remote-checkout/${e}/shipping`;return this._requestSender.get(i,{params:t,timeout:n,headers:lc})}initializePayment(e,t,{timeout:n}={}){const i=`/remote-checkout/${e}/payment`;return this._requestSender.get(i,{params:t,timeout:n,headers:lc})}loadSettings(e,{timeout:t}={}){const n=`/remote-checkout/${e}/settings`;return this._requestSender.get(n,{timeout:t,headers:lc})}signOut(e,{timeout:t}={}){const n=`/remote-checkout/${e}/signout`;return this._requestSender.get(n,{timeout:t,headers:lc})}generateToken({timeout:e}={}){return this._requestSender.get(\"/remote-checkout-token\",{timeout:e,headers:lc})}trackAuthorizationEvent({timeout:e}={}){return this._requestSender.post(\"/remote-checkout/events/shopper-checkout-service-provider-authorization-requested\",{timeout:e,headers:lc})}forgetCheckout({timeout:e}={}){return this._requestSender.post(\"/remote-checkout/forget-checkout\",{timeout:e,headers:lc})}}class Qu{constructor(e,t){this._consignmentRequestSender=e,this._checkoutRequestSender=t}unassignItemsByAddress(e,t){return n=>{const i=n.getState();if(!i.checkout.getCheckout())throw new Zi($i.MissingCheckout);const r=this._consignmentHasAddress(e)?e.address:e.shippingAddress,o=i.consignments.getConsignmentByAddress(r);if(!o)throw new Gc(\"No consignment found for the specified address\");const a=this._removeLineItems(e.lineItems,o,i.cart.getCart());return a.length?this.updateConsignment({id:o.id,address:r,lineItems:a},t)(n):this.deleteConsignment(o.id,t)(n)}}assignItemsByAddress(e,t){return n=>{const i=n.getState(),r=this._consignmentHasAddress(e)?e.address:e.shippingAddress,o=i.consignments.getConsignmentByAddress(r);return this._createOrUpdateConsignment({id:o&&o.id,address:r,lineItems:this._addLineItems(e.lineItems,o,i.cart.getCart())},t)(n)}}selectShippingOption(e,t){return n=>j.create(i=>{const r=n.getState(),a=r.checkout.getCheckout(),d=r.consignments.getConsignments();if(!a)throw new Zi($i.MissingCheckout);if(!d||!d.length)throw new Zi($i.MissingConsignments);const c={id:d[0].id,shippingOptionId:e},u={id:d[0].id};i.next(o(ot.UpdateShippingOptionRequested,void 0,u)),this._consignmentRequestSender.updateConsignment(a.id,c,t).then(({body:e})=>{i.next(o(ot.UpdateShippingOptionSucceeded,e,u)),i.complete()}).catch(e=>{i.error(s(ot.UpdateShippingOptionFailed,e,u))})})}loadShippingOptions(e){return t=>j.create(n=>{const i=t.getState().checkout.getCheckout();if(!i)throw new Zi($i.MissingCheckout);n.next(o(ot.LoadShippingOptionsRequested)),this._checkoutRequestSender.loadCheckout(i.id,Object.assign(Object.assign({},e),{params:{include:[kc.AvailableShippingOptions]}})).then(({body:e})=>{n.next(o(ot.LoadShippingOptionsSucceeded,e)),n.complete()}).catch(e=>{n.error(s(ot.LoadShippingOptionsFailed,e))})})}updateAddress(e,t){return n=>{const i=this._getUpdateAddressRequestBody(e,n),r=n.getState().consignments.getConsignments();return r&&r.length&&(i.id=r[0].id),this._createOrUpdateConsignment(i,t)(n)}}createConsignments(e,t){return n=>j.create(i=>{const r=n.getState().checkout.getCheckout();if(!r||!r.id)throw new Zi($i.MissingCheckout);i.next(o(ot.CreateConsignmentsRequested)),this._consignmentRequestSender.createConsignments(r.id,e,t).then(({body:e})=>{i.next(o(ot.CreateConsignmentsSucceeded,e)),i.complete()}).catch(e=>{i.error(s(ot.CreateConsignmentsFailed,e))})})}updateConsignment(e,t){return n=>j.create(i=>{const r=n.getState().checkout.getCheckout();if(!r||!r.id)throw new Zi($i.MissingCheckout);const a={id:e.id};i.next(o(ot.UpdateConsignmentRequested,void 0,a)),this._consignmentRequestSender.updateConsignment(r.id,e,t).then(({body:e})=>{i.next(o(ot.UpdateConsignmentSucceeded,e,a)),i.complete()}).catch(e=>{i.error(s(ot.UpdateConsignmentFailed,e,a))})})}deleteConsignment(e,t){return n=>j.create(i=>{const r=n.getState().checkout.getCheckout(),a={id:e};if(!r||!r.id)throw new Zi($i.MissingCheckout);i.next(o(ot.DeleteConsignmentRequested,void 0,a)),this._consignmentRequestSender.deleteConsignment(r.id,e,t).then(({body:e})=>{i.next(o(ot.DeleteConsignmentSucceeded,e,a)),i.complete()}).catch(e=>{i.error(s(ot.DeleteConsignmentFailed,e,a))})})}updateShippingOption(e,t){return n=>j.create(i=>{var r;const a=n.getState().checkout.getCheckout(),d=n.getState().consignments.getConsignmentById(e.id);if((null===(r=null==d?void 0:d.selectedShippingOption)||void 0===r?void 0:r.id)===e.shippingOptionId)return void i.complete();if(!a||!a.id)throw new Zi($i.MissingCheckout);const c={id:e.id};i.next(o(ot.UpdateShippingOptionRequested,void 0,c)),this._consignmentRequestSender.updateConsignment(a.id,e,t).then(({body:e})=>{i.next(o(ot.UpdateShippingOptionSucceeded,e,c)),i.complete()}).catch(e=>{i.error(s(ot.UpdateShippingOptionFailed,e,c))})})}_createOrUpdateConsignment(e,t){return n=>{const i=n.getState().checkout.getCheckout();if(!i||!i.id)throw new Zi($i.MissingCheckout);return this._isUpdateConsignmentRequest(e)?this.updateConsignment(e,t)(n):this.createConsignments([e],t)(n)}}_getUpdateAddressRequestBody(e,t){const n=t.getState().cart.getCart();if(!n)throw new Zi($i.MissingCart);const{physicalItems:i,customItems:r=[]}=n.lineItems;return{address:e,lineItems:[...i,...r].map(e=>({itemId:e.id,quantity:e.quantity}))}}_removeLineItems(e,t,n){if(!n)throw new Zi($i.MissingCart);return this._hydrateLineItems(t.lineItemIds,n).map(t=>{const n=l(e,e=>e.itemId===t.itemId);return Object.assign(Object.assign({},t),{quantity:n?t.quantity-n.quantity:t.quantity})}).filter(e=>e.quantity>0)}_addLineItems(e,t,n){if(!t)return e;if(!n)throw new Zi($i.MissingCart);return e.concat(this._hydrateLineItems(t.lineItemIds,n)).filter(e=>e.quantity>0)}_hydrateLineItems(e,t){return e.map(e=>{const n=l(t.lineItems.physicalItems,t=>t.id===e);return{itemId:e,quantity:n?n.quantity:0}})}_isUpdateConsignmentRequest(e){return!!e.id}_consignmentHasAddress(e){return\"object\"==typeof e&&\"address\"in e}}const Xu=[\"consignments.availableShippingOptions\",\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"promotions.banners\"];class el{constructor(e){this._requestSender=e}createConsignments(e,t,{timeout:n,params:{include:i}={}}={}){const r=`/api/storefront/checkouts/${e}/consignments`,o=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.post(r,{body:t,params:{include:wc(Xu,i)},headers:o,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new fc;throw e})}updateConsignment(e,t,{timeout:n,params:{include:i}={}}={}){const{id:r}=t,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"id\"]),a=`/api/storefront/checkouts/${e}/consignments/${r}`,s=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.put(a,{body:o,params:{include:wc(Xu,i)},headers:s,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new fc;throw e})}deleteConsignment(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/consignments/${t}`,r=Object.assign({Accept:cc.JsonV1},lc),o=Ic(Xu);return this._requestSender.delete(i,{params:{include:o},headers:r,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new fc;throw e})}}class tl{constructor(e,t){this._shippingCountryRequestSender=e,this._store=t}loadCountries(e){const{checkout:t}=this._store.getState(),n=t.getCheckout(),i=n?n.channelId:null;return j.create(t=>{t.next(o(gi.LoadShippingCountriesRequested)),this._shippingCountryRequestSender.loadCountries(i,e).then(e=>{t.next(o(gi.LoadShippingCountriesSucceeded,e.body.data)),t.complete()}).catch(e=>{t.error(s(gi.LoadShippingCountriesFailed,e))})})}}class nl{constructor(e,t){this._requestSender=e,this._config=t}loadCountries(e,{timeout:t}={}){const n=\"/internalapi/v1/shipping/countries\"+(e?`?channel_id=${e}`:\"\"),i=Object.assign({\"Accept-Language\":this._config.locale},lc);return this._requestSender.get(n,{headers:i,timeout:t})}}var il=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class rl{constructor(e,t){this._googleRecaptcha=e,this._requestSender=t}initialize(e){return t=>V(Z(o(qi.InitializeRequested,void 0)),H(()=>il(this,void 0,void 0,function*(){const n=e?e.containerId:\"spamProtectionContainer\";if(document.getElementById(n)&&this._googleRecaptcha.reset(n),!e&&!document.getElementById(n)){const e=document.createElement(\"div\");e.setAttribute(\"id\",n),document.body.appendChild(e)}const i=t.getState().config.getStoreConfigOrThrow().checkoutSettings.googleRecaptchaSitekey;return yield this._googleRecaptcha.load(n,i),o(qi.InitializeSucceeded)}))).pipe(Q(e=>gc(qi.InitializeFailed,e)))}verifyCheckoutSpamProtection(){return e=>H(()=>{const t=e.getState().checkout.getCheckout();if(!t)throw new Zi($i.MissingCheckout);return V(Z(o(qi.VerifyCheckoutRequested)),Y(this.execute()(e)).pipe(re(e=>Lc(e)&&e.payload?Y(this._requestSender.validate(t.id,e.payload.token)).pipe(re(({body:t})=>V(Z(e),Z(o(qi.VerifyCheckoutSucceeded,t))))):Z(e)))).pipe(Q(e=>gc(qi.VerifyCheckoutFailed,e)))})}execute(){return e=>V(Z(o(qi.ExecuteRequested)),this.initialize()(e),this._googleRecaptcha.execute().pipe(oe(1)).pipe(re(({error:e,token:t})=>il(this,void 0,void 0,function*(){if(e instanceof Kc)throw e;if(e||!t)throw new iu;return o(qi.ExecuteSucceeded,{token:t})})))).pipe(Q(e=>gc(qi.ExecuteFailed,e)))}}class ol{constructor(e){this._requestSender=e}validate(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/spam-protection`,r=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.post(i,{body:{token:t},headers:r,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new fc;throw e})}}class al{constructor(e){this._storeCreditRequestSender=e}applyStoreCredit(e,t){return n=>V(Z(o(Di.ApplyStoreCreditRequested)),H(()=>{return i=this,r=void 0,s=function*(){var i;const r=n.getState().checkout.getCheckout();if(!r)throw new Zi($i.MissingCheckout);const{id:a}=r,s=null!==(i=null==t?void 0:t.version)&&void 0!==i?i:r.version,{body:d}=yield e?this._storeCreditRequestSender.applyStoreCredit(a,Object.assign(Object.assign({},t),{version:s})):this._storeCreditRequestSender.removeStoreCredit(a,Object.assign(Object.assign({},t),{version:s}));return o(Di.ApplyStoreCreditSucceeded,d)},new((a=void 0)||(a=Promise))(function(e,t){function n(e){try{d(s.next(e))}catch(e){t(e)}}function o(e){try{d(s.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof a?i:new a(function(e){e(i)})).then(n,o)}d((s=s.apply(i,r||[])).next())});var i,r,a,s})).pipe(Q(e=>gc(Di.ApplyStoreCreditFailed,e)))}}class sl{constructor(e){this._requestSender=e}applyStoreCredit(e,{timeout:t,version:n}={}){const i=`/api/storefront/checkouts/${e}/store-credit`,r=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.post(i,{headers:r,timeout:t,params:{include:Ic(bc)},body:{version:n}})}removeStoreCredit(e,{timeout:t,version:n}={}){const i=`/api/storefront/checkouts/${e}/store-credit`,r=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.delete(i,{headers:r,timeout:t,params:{include:Ic(bc)},body:{version:n}})}}class dl extends Pe{constructor(e){super(e),this.name=\"UpdateSubscriptionsError\",this.type=\"update_subscriptions\"}}class cl{constructor(e){this._subscriptionsRequestSender=e}updateSubscriptions(e,t){return V(Z(o(We.UpdateSubscriptionsRequested)),H(()=>{return n=this,i=void 0,a=function*(){const{body:n}=yield this._subscriptionsRequestSender.updateSubscriptions(e,t);return o(We.UpdateSubscriptionsSucceeded,n)},new((r=void 0)||(r=Promise))(function(e,t){function o(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(o,s)}d((a=a.apply(n,i||[])).next())});var n,i,r,a})).pipe(Q(e=>gc(We.UpdateSubscriptionsFailed,new dl(e))))}}class ul{constructor(e){this._requestSender=e}updateSubscriptions(e,{timeout:t}={}){const n=Object.assign({Accept:cc.JsonV1},lc);return this._requestSender.post(\"/api/storefront/subscriptions\",{body:e,headers:n,timeout:t})}}const ll=A(e=>Array.isArray(e)?e.map(e=>hl(e)):et(e)?Object.keys(e).reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:hl(e[n])}),{}):e);ll.cache=new WeakMap;const hl=e=>\"object\"==typeof e&&null!==e?ll(e):e;function pl(e){return(...t)=>hl(e(...t))}function gl({billingAddress:{getBillingAddress:e,getBillingAddressOrThrow:t},cart:{getCart:n,getCartOrThrow:i,getLocale:r},checkout:{getCheckout:o,getCheckoutOrThrow:a,getOutstandingBalance:s},config:{getContextConfig:d,getHost:c,getLocale:u,getStoreConfig:l,getStoreConfigOrThrow:h,getConfig:p},consignments:{getConsignments:g,getConsignmentsOrThrow:m},countries:{getCountries:y},customer:{getCustomer:f,getCustomerOrThrow:_},instruments:{getCardInstrument:v,getCardInstrumentOrThrow:S,getInstruments:C,getInstrumentsMeta:I},order:{getOrder:w,getOrderOrThrow:b,getOrderMeta:E},payment:{getPaymentToken:P,getPaymentTokenOrThrow:O,getPaymentId:A,getPaymentIdOrThrow:T,getPaymentStatus:k,getPaymentStatusOrThrow:R,getPaymentRedirectUrl:D,getPaymentRedirectUrlOrThrow:M,isPaymentDataRequired:N},paymentMethods:{getPaymentMethod:L,getPaymentMethodOrThrow:z,getPaymentMethodsMeta:U},paymentProviderCustomer:{getPaymentProviderCustomer:F,getPaymentProviderCustomerOrThrow:B},paymentStrategies:{isInitialized:x},shippingAddress:{getShippingAddress:q,getShippingAddressOrThrow:j,getShippingAddresses:G,getShippingAddressesOrThrow:V},shippingCountries:{getShippingCountries:H}}){return{getHost:pl(c),getLocale:pl(u),getCartLocale:pl(r),getBillingAddress:pl(e),getBillingAddressOrThrow:pl(t),getCart:pl(n),getCartOrThrow:pl(i),getCheckout:pl(o),getCheckoutOrThrow:pl(a),getCountries:pl(y),getStoreConfig:pl(l),getStoreConfigOrThrow:pl(h),getConfig:pl(p),getConsignments:pl(g),getConsignmentsOrThrow:pl(m),getContextConfig:pl(d),getCustomer:pl(f),getCustomerOrThrow:pl(_),getCardInstrument:pl(v),getInstruments:pl(C),getCardInstrumentOrThrow:pl(S),getOrder:pl(w),getOrderOrThrow:pl(b),getOrderMeta:pl(E),getInstrumentsMeta:pl(I),getPaymentToken:P,getPaymentTokenOrThrow:O,getPaymentId:A,getPaymentIdOrThrow:T,getPaymentStatus:k,getPaymentStatusOrThrow:R,getPaymentRedirectUrl:D,getPaymentRedirectUrlOrThrow:M,getPaymentMethod:pl(L),getPaymentMethodOrThrow:pl(z),getPaymentMethodsMeta:pl(U),getPaymentProviderCustomer:pl(F),getPaymentProviderCustomerOrThrow:pl(B),getShippingAddress:pl(q),getShippingAddressOrThrow:pl(j),getShippingAddresses:pl(G),getShippingAddressesOrThrow:pl(V),getShippingCountries:pl(H),getOutstandingBalance:pl(s),isPaymentDataRequired:N,isPaymentMethodInitialized:x}}var ml,yl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class fl{constructor(e,t,n,i,r,o,a,s,d,c,u,l,h,p,g,m,y,f,_,v){this._store=e,this._storeProjectionFactory=t,this._checkoutActionCreator=n,this._checkoutValidator=i,this._hostedFormFactory=r,this._orderActionCreator=o,this._billingAddressActionCreator=a,this._consignmentActionCreator=s,this._paymentMethodActionCreator=d,this._paymentActionCreator=c,this._paymentHumanVerificationHandler=u,this._customerActionCreator=l,this._cartRequestSender=h,this._storeCreditActionCreator=p,this._couponActionCreator=g,this._spamProtectionActionCreator=m,this._paymentProviderCustomerActionCreator=y,this._shippingCountryActionCreator=f,this._remoteCheckoutActionCreator=_,this._paymentStrategyWidgetActionCreator=v,this._storeProjection=this._storeProjectionFactory.create(this._store)}createHostedForm(e,t){const n=this._storeProjection.getState().getCheckoutOrThrow().id;return this._hostedFormFactory.create(e,t,n)}subscribe(e,...t){return this._storeProjection.subscribe(e,...t)}getState(){return this._storeProjection.getState()}initializeOffsitePayment(e){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentActionCreator.initializeOffsitePayment(e)),this._storeProjection.getState()})}loadCheckout(e){return yl(this,void 0,void 0,function*(){return e?yield this._store.dispatch(this._checkoutActionCreator.loadCheckout(e)):yield this._store.dispatch(this._checkoutActionCreator.loadCurrentCheckout()),this._storeProjection.getState()})}loadDefaultCheckout(){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()),this._storeProjection.getState()})}loadPaymentMethod(e,t){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e,t)),this._storeProjection.getState()})}loadPaymentMethods(e){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethods(e)),this._storeProjection.getState()})}submitOrder(e,t){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._orderActionCreator.submitOrder(e,t)),this._storeProjection.getState()})}submitPayment(e){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentActionCreator.submitPayment(e)),this._storeProjection.getState()})}finalizeOrder(e){return yl(this,void 0,void 0,function*(){const{order:{getOrderOrThrow:t}}=this._store.getState();return yield this._store.dispatch(this._orderActionCreator.finalizeOrder(t().orderId,e)),this._storeProjection.getState()})}updateBillingAddress(e){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(e)),this._storeProjection.getState()})}updateShippingAddress(e){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.updateAddress(e)),this._storeProjection.getState()})}selectShippingOption(e,t){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t)),this._storeProjection.getState()})}signInCustomer(e,t){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._customerActionCreator.signInCustomer(e,t)),this._storeProjection.getState()})}signOutCustomer(e){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._customerActionCreator.signOutCustomer(e)),this._storeProjection.getState()})}createBuyNowCart(e,t){return yl(this,void 0,void 0,function*(){const{body:n}=yield this._cartRequestSender.createBuyNowCart(e,t);return n})}applyStoreCredit(e,t){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._storeCreditActionCreator.applyStoreCredit(e,t)),this._storeProjection.getState()})}applyCoupon(e,t){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._couponActionCreator.applyCoupon(e,t)),this._storeProjection.getState()})}removeCoupon(e,t){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._couponActionCreator.removeCoupon(e,t)),this._storeProjection.getState()})}verifyCheckoutSpamProtection(){return yl(this,void 0,void 0,function*(){const{checkout:e}=this._store.getState(),{shouldExecuteSpamCheck:t}=e.getCheckoutOrThrow();return t&&(yield this._store.dispatch(this._spamProtectionActionCreator.verifyCheckoutSpamProtection())),this._storeProjection.getState()})}loadCurrentOrder(e){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._orderActionCreator.loadCurrentOrder(e)),this._storeProjection.getState()})}updatePaymentProviderCustomer(e){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(e)),this._storeProjection.getState()})}loadShippingCountries(e){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._shippingCountryActionCreator.loadCountries(e)),this._storeProjection.getState()})}deleteConsignment(e,t){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.deleteConsignment(e,t)),this._storeProjection.getState()})}initializePayment(e,t,n){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.initializePayment(e,t,n)),this._storeProjection.getState()})}forgetCheckout(e,t){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.forgetCheckout(e,t)),this._storeProjection.getState()})}remoteCheckoutSignOut(e,t){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.signOut(e,t)),this._storeProjection.getState()})}validateCheckout(e,t){return yl(this,void 0,void 0,function*(){yield this._checkoutValidator.validate(e,t)})}handlePaymentHumanVerification(e,t){return yl(this,void 0,void 0,function*(){return\"string\"==typeof e?this._paymentHumanVerificationHandler.handle(e,null!=t?t:\"\"):this._paymentHumanVerificationHandler.handle(e)})}widgetInteraction(e){return yl(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentStrategyWidgetActionCreator.widgetInteraction(e),{queueId:\"widgetInteraction\"}),this._storeProjection.getState()})}}!function(e){e.Synchronize=\"SYNCHRONIZE\"}(ml||(ml={}));class _l{constructor(e){this._transformSelectors=e}create(e){return function(e,t){const n=a((e,t)=>t.type===ml.Synchronize?t.payload:e,e.getState(),{stateTransformer:t});return e.subscribe(e=>{n.dispatch(o(ml.Synchronize,e))},{initial:!1}),n}(e,this._transformSelectors)}}const vl=e=>{const t=B(e);return document.getElementById(t)?vl(e):t};function Sl(e){return Object.prototype.hasOwnProperty.call(e,\"cacheKey\")}class Cl{constructor(e){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=Object.assign({maxSize:0,isEqual:fe,onExpire:T},e)}getKey(...e){const t=this._resolveMap(...e),{index:n,parentMap:i}=t;let{map:r}=t;return r&&r.cacheKey?r.usedCount++:r=this._generateMap(i,e.slice(n)),this._removeLeastUsedMap(r),r.cacheKey}getUsedCount(...e){const{map:t}=this._resolveMap(...e);return t?t.usedCount:0}_resolveMap(...e){let t=0,n=this._map;for(;n.maps.length;){let i=!1;for(let r=0;r<n.maps.length;r++){const o=n.maps[r];if(this._options.isEqual(o.value,e[t])){if(n.maps.unshift(...n.maps.splice(r,1)),(0===e.length||t===e.length-1)&&Sl(o))return{index:t,map:o,parentMap:n};i=!0,n=o,t++;break}}if(!i)break}return{index:t,parentMap:n}}_generateMap(e,t){let n,i=0,r=e;do{n={maps:[],parentMap:r,usedCount:1,value:t[i]},r.maps.unshift(n),r=n,i++}while(i<t.length);const o=n;return o.cacheKey=\"\"+ ++this._lastId,o}_removeLeastUsedMap(e){if(!this._options.maxSize)return;const t=this._usedMaps.indexOf(e);if(this._usedMaps.splice(-1===t?0:t,-1===t?0:1,e),this._usedMaps.length<=this._options.maxSize)return;const n=this._usedMaps.pop();n&&(this._removeMap(n),this._options.onExpire(n.cacheKey))}_removeMap(e){e.parentMap&&(e.parentMap.maps.splice(e.parentMap.maps.indexOf(e),1),function(e){return Object.prototype.hasOwnProperty.call(e,\"parentMap\")}(e.parentMap)||this._removeMap(e.parentMap))}}function Il(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const i=Object.getOwnPropertyDescriptor(e.prototype,n);i&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,function(e,t,n){if(\"function\"!=typeof n.value)return n;let i=new Cl,r=n.value,o=ae(r);return Ea(e,t,{get(){const e=(...e)=>{const t=o.call(this,...e);if(1===i.getUsedCount(...e))return t;const n=r.call(this,...e);return Ue(n,t,{keyFilter:e=>!function(e){return 0===`${e}`.indexOf(\"$$\")||0===`${e}`.indexOf(\"_\")}(e)})?t:(o.cache.set(i.getKey(...e),n),n)};return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){i=new Cl,r=e,o=ae(r)}})}(e.prototype,n,i))}),t}let wl=class{constructor(e){this._checkoutButton=e.checkoutButton}getInitializeButtonError(e){return this._checkoutButton.getInitializeError(e)}getDeinitializeButtonError(e){return this._checkoutButton.getDeinitializeError(e)}};wl=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Il],wl);const bl=wl;let El=class{constructor(e){this._checkoutButton=e.checkoutButton}isInitializingButton(e){return this._checkoutButton.isInitializing(e)}isDeinitializingButton(e){return this._checkoutButton.isDeinitializing(e)}};El=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Il],El);const Pl=El;function Ol(e){return{errors:new bl(e),statuses:new Pl(e)}}let Al=class{constructor(e,t){this._store=e,this._buttonStrategyActionCreator=t,this._state=Ol(this._store.getState()),this._store.subscribe(e=>{this._state=Ol(e)})}getState(){return this._state}subscribe(e,...t){return this._store.subscribe(()=>e(this.getState()),e=>e.checkoutButton.getState(),...t.map(e=>t=>e(Ol(t))))}initializeButton(e){const t=(n=e.containerId,/^\\w[\\w\\-\\:\\.]*$/.test(n)?[e.containerId]:function(e,t){const n=document.querySelectorAll(e);if(!n.length)throw new Gc(`Unable to find any element with the specified selector: ${e}`);return Array.prototype.slice.call(n).map(e=>(e.id||(e.id=vl(t)),e.id))}(e.containerId,`${e.methodId}-container`));var n;return Promise.all(t.map(t=>{const n=this._buttonStrategyActionCreator.initialize(Object.assign(Object.assign({},e),{containerId:t})),i=`checkoutButtonStrategy:${e.methodId}:${t}`;return this._store.dispatch(n,{queueId:i})})).then(()=>this.getState())}deinitializeButton(e){const t=this._buttonStrategyActionCreator.deinitialize(e),n=`checkoutButtonStrategy:${e.methodId}`;return this._store.dispatch(t,{queueId:n}).then(()=>this.getState())}};Al=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Ea],Al);const Tl=Al;class kl{constructor(e,t,n){this._registry=e,this._registryV2=t,this._paymentMethodActionCreator=n}initialize(e){return t=>{const n={methodId:e.methodId,containerId:e.containerId};if(t.getState().checkoutButton.isInitialized(e.methodId,e.containerId))return W();const i=e.currencyCode?{params:{currencyCode:e.currencyCode}}:{},r=Object.assign(Object.assign({},i),{timeout:e.timeout,useCache:!0});return V(Z(o(lt.InitializeButtonRequested,void 0,n)),this._paymentMethodActionCreator.loadPaymentMethod(e.methodId,r)(t),H(()=>this._getStrategy(e.methodId).initialize(e).then(()=>o(lt.InitializeButtonSucceeded,void 0,n)))).pipe(Q(e=>gc(lt.InitializeButtonFailed,e,n)))}}deinitialize(e){return t=>{const n={methodId:e.methodId};return t.getState().checkoutButton.isInitialized(e.methodId)?V(Z(o(lt.DeinitializeButtonRequested,void 0,n)),H(()=>this._getStrategy(e.methodId).deinitialize().then(()=>o(lt.DeinitializeButtonSucceeded,void 0,n)))).pipe(Q(e=>gc(lt.DeinitializeButtonFailed,e,n))):W()}}_getStrategy(e){let t;try{t=this._registryV2.get({id:e})}catch(n){t=this._registry.get(e)}return t}}class Rl{constructor(e){var t,n,i;this._factories={},this._instances={},this._defaultToken=null!==(t=null==e?void 0:e.defaultToken)&&void 0!==t?t:\"default\",this._useFallback=null===(n=null==e?void 0:e.useFallback)||void 0===n||n,this._tokenResolver=null!==(i=null==e?void 0:e.tokenResolver)&&void 0!==i?i:e=>e}get(e,t){try{return this._getInstance(e||this._defaultToken,t||e||this._defaultToken)}catch(e){if(!this._useFallback)throw e;return this._getInstance(this._defaultToken,t||this._defaultToken)}}getFactory(e,t){const n=this._tokenResolver(e,Object.keys(this._factories),t);return n?this._factories[n]:void 0}register(e,t){if(this._hasFactory(e))throw new Gc(`'${e}' is already registered.`);this._factories[e]=t}_hasFactory(e){return!!this._factories[e]}_hasInstance(e){return!!this._instances[e]}_getInstance(e,t){if(!this._hasInstance(t)){const n=this.getFactory(e);if(!n)throw new Gc(`'${e}' is not registered.`);this._instances[t]=n()}return this._instances[t]}}class Dl extends be{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var Ml,Nl,Ll,zl,Ul;class Fl{constructor(e){this._scriptLoader=e,this._window=window}loadPaypal(e=\"\"){return t=this,n=void 0,r=function*(){const t=\"//www.paypalobjects.com/api/checkout.min.js\",n={async:!0,attributes:{\"data-merchant-id\":e}};if(e?yield this._scriptLoader.loadScript(t,n):yield this._scriptLoader.loadScript(t),!this._window.paypal)throw new Dl;return this._window.paypal},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}}!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(Ml||(Ml={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(Nl||(Nl={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(Ll||(Ll={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(zl||(zl={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(Ul||(Ul={}));class Bl{constructor(e,t,n,i,r=\"\"){this._store=e,this._checkoutActionCreator=t,this._paypalScriptLoader=n,this._formPoster=i,this._host=r}initialize(e){const t=e.paypal,n=this._store.getState(),i=this._paymentMethod=n.paymentMethods.getPaymentMethod(e.methodId);if(!t)throw new Gc;if(!i)throw new Zi($i.MissingPaymentMethod);return this._paypalScriptLoader.loadPaypal(i.config.merchantId).then(n=>{var r,o;if(!i||!i.config.merchantId)throw new Zi($i.MissingPaymentMethod);const a=i.config.merchantId,s=i.config.testMode?\"sandbox\":\"production\",d={[s]:t.clientId},c=n.FUNDING.CREDIT||\"credit\",u=t.allowCredit?[c]:[],l=t.allowCredit?[]:[c];return n.Button.render({env:s,client:d,commit:t.shouldProcessPayment,funding:{allowed:u,disallowed:l},style:Object.assign(Object.assign({shape:Ul.RECT},D(t.style,\"layout\",\"color\",\"label\",\"shape\",\"tagline\",\"fundingicons\")),{size:\"paypalexpress\"===i.id&&\"small\"===(null===(r=t.style)||void 0===r?void 0:r.size)?Nl.RESPONSIVE:null===(o=t.style)||void 0===o?void 0:o.size}),payment:(e,n)=>this._setupPayment(a,n,t.onPaymentError),onAuthorize:(e,n)=>this._tokenizePayment(e,n,t.shouldProcessPayment,t.onAuthorizeError)},e.containerId)})}deinitialize(){return this._paymentMethod=void 0,Promise.resolve()}_setupPayment(e,t,n){if(!t)throw new nu(Jc.CheckoutButtonNotInitialized);return this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then(n=>{const i=n.cart.getCart(),r=i?i.id:\"\";return t.request.post(`${this._host}/api/storefront/payment/paypalexpress`,{merchantId:e,cartId:r},{headers:Object.assign({\"X-API-INTERNAL\":uc},lc)})}).then(e=>e.id).catch(e=>{throw n&&n(e),e})}_tokenizePayment(e,t,n,i){if(!this._paymentMethod)throw new nu(Jc.CheckoutButtonNotInitialized);if(!t)throw new nu(Jc.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new Zi($i.MissingPayment);const r=this._paymentMethod.id;return t.payment.get(e.paymentID).then(t=>{this._formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:r,action:n?\"process_payment\":\"set_external_checkout\",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(t.payer.payer_info)})})}}function xl(e){return e&&\"resolveIds\"in e}function ql(){try{return\"production\"}catch(e){return\"development\"}}class jl{constructor(e){this._console=e}log(...e){this._logToConsole(\"log\",...e)}info(...e){this._logToConsole(\"info\",...e)}warn(...e){this._logToConsole(\"warn\",...e)}error(...e){this._logToConsole(\"error\",...e)}debug(...e){this._logToConsole(\"debug\",...e)}_logToConsole(e,...t){this._console&&this._console[e]&&this._console[e].call(this._console,...t)}}class Gl{log(){}info(){}warn(){}error(){}debug(){}}const Vl=function(e=!0){return e?new jl(console):new Gl}(\"test\"!==ql());class Hl{constructor(e=!1){this._useFallback=e,this._registry=new Rl({tokenResolver:this._resolveToken.bind(this),defaultToken:this._encodeToken({default:!0}),useFallback:this._useFallback})}get(e){return this._registry.get(this._encodeToken(e))}getFactory(e,t){try{return this._registry.getFactory(this._encodeToken(e),t)}catch(e){return}}getUseFallback(){return this._useFallback}register(e,t){this._registry.register(this._encodeToken(e),t)}_encodeToken(e){return btoa(JSON.stringify(e))}_decodeToken(e){return JSON.parse(atob(e))}_resolveToken(e,t,n){var i;const r=this._decodeToken(e),o=[];t.forEach(e=>{const t=this._decodeToken(e),n={token:e,matches:0,default:!1,totalKeys:Object.keys(t).length};for(const[e,i]of Object.entries(t)){if(e in r&&r[e]!==i){n.matches=0;break}e in r&&r[e]===i&&n.matches++,\"default\"===e&&!0===i&&(n.default=!0)}o.push(n)});const a=o.sort((e,t)=>t.matches-e.matches).filter(e=>e.matches>0);a.length>1&&a[0].matches===a[1].matches&&\"development\"===ql()&&Vl.warn(\"The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.\");const s=Object.keys(r).length;if(n){const e=a.find(e=>e.matches===s&&e.matches===e.totalKeys);if(!e)throw new Error(`Unable to resolve to a registered token with the provided token for ${JSON.stringify(r)} with exact match.`);return e.token}const d=a[0];if(d&&d.token)return d.token;if(this._useFallback){const e=null===(i=o.find(e=>e.default))||void 0===i?void 0:i.token;if(e)return e}throw new Error(`Unable to resolve to a registered token with the provided token for ${JSON.stringify(r)}.`)}}function Wl(t){const{host:i}=null!=t?t:{},r=or({config:{meta:{host:null==t?void 0:t.host,locale:null==t?void 0:t.locale},errors:{},statuses:{}}}),o=e({host:i}),a=n({host:i}),s=function(e,t){const n=new Hl;for(const[,i]of Object.entries(t))if(xl(i))for(const t of i.resolveIds)n.register(t,()=>i(e));return n}(function(t,n){const{config:{getHost:i,getLocale:r}}=t.getState();n||(n=e({host:i()}));const o=new _l(gl),a=new Cc(new Pc(n),new Rc(new Dc(n)),new Fc(new Bc(n))),s=new Tc(new Pc(n)),d=new fu(t),c=new vu(new Eu(n),new Tc(new Pc(n))),u=new yc(new vc(n),new cl(new ul(n))),l=new Qu(new el(n),new Pc(n)),h=new sc(new hc(n),new pc(n)),p=new Pu(new Ou(function(e){const t=ge();return e.subscribe(e=>{const n=e.config.getStoreConfig();n&&t.setHost(n.paymentSettings.bigpayBaseUrl)},e=>e.config.getStoreConfig()),t}(t)),c,new Yu,new tu(su(ue()))),g=new tu(su(ue())),m=new zc(new Uc(n),a,new rl(su(ue()),new ol(n))),y=new al(new sl(n)),f=new Mc(new Nc(n)),_=su(ue()),v=new ol(n),S=new rl(_,v),C=new Sc(n),I=new Ku,w=new tl(new nl(n,{locale:r()}),t),b=new Zu(new Ju(n),a),E=new $u;return new fl(t,o,a,s,d,c,u,l,h,p,g,m,C,y,f,S,I,w,b,E)}(r),ve);return new Tl(r,new kl(function(e,t,n,i){const r=new Rl,o=le(),a=new Pc(t),s=new Cc(a,new Rc(new Dc(t)),new Fc(new Bc(t)));return r.register(zu.PAYPALEXPRESS,()=>new Bl(e,s,new Fl(o),n,i)),r}(r,o,a,i),s,new sc(new hc(o),new pc(o))))}export{Wl as createCheckoutButtonInitializer,t as createTimeout};\n//# sourceMappingURL=checkout-button.js.map"
  },
  {
    "path": "dist/esm/checkout-sdk-essential.js",
    "content": "import*as e from\"iframe-resizer\";import*as t from\"iframe-resizer/js/iframeResizer.contentWindow\";import{createRequestSender as n,createTimeout as i}from\"@bigcommerce/request-sender\";import{createScriptLoader as r,getScriptLoader as o}from\"@bigcommerce/script-loader\";import{combineReducers as s,composeReducers as a,createAction as d,createDataStore as c,createErrorAction as u,deepFreeze as l}from\"@bigcommerce/data-store\";import{Observable as h,Subject as p,concat as m,defer as g,empty as y,from as _,fromEvent as f,merge as S,noop as C,of as E,throwError as v}from\"rxjs\";import{catchError as I,delay as b,filter as O,map as w,retryWhen as A,shareReplay as P,switchMap as T,take as k}from\"rxjs/operators\";import{cond as R,constant as M,difference as L,filter as D,find as F,findIndex as N,flatMap as x,flatten as U,get as z,identity as q,includes as B,isArray as j,isEmpty as G,isEqual as H,isMatch as V,isNil as Y,isObject as W,isPlainObject as $,isString as K,isUndefined as Z,keyBy as Q,keys as J,last as X,map as ee,max as te,memoize as ne,noop as ie,omit as re,omitBy as oe,overSome as se,pick as ae,pickBy as de,reduce as ce,some as ue,stubTrue as le,transform as he,union as pe,uniq as me,uniqueId as ge,values as ye,without as _e}from\"lodash\";import{memoize as fe,memoizeOne as Se}from\"@bigcommerce/memoize\";import{createClient as Ce}from\"@bigcommerce/bigpay-client\";import{createFormPoster as Ee}from\"@bigcommerce/form-poster\";import{default as ve}from\"local-storage-fallback\";import{creditCardType as Ie,number as be}from\"card-validator\";import{exclude as Oe,parseUrl as we,stringifyUrl as Ae}from\"query-string\";import{supportsPopups as Pe}from\"@braintree/browser-detection\";import{createSelector as Te,createSelectorCreator as ke,defaultMemoize as Re}from\"reselect\";import{default as Me}from\"shallowequal\";import{IntlMessageFormat as Le}from\"intl-messageformat\";var De={785(t,n,i){var r,o;t.exports=(r={iframeResizer:()=>e.iframeResizer},o={},i.d(o,r),o)},939(e){e.exports=t}},Fe={};function Ne(e){var t=Fe[e];if(void 0!==t)return t.exports;var n=Fe[e]={exports:{}};return De[e](n,n.exports,Ne),n.exports}Ne.d=(e,t)=>{for(var n in t)Ne.o(t,n)&&!Ne.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},Ne.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);const xe=\"b2bExtraField_\";function Ue(e){return e.name.startsWith(xe)}function ze(e){var t;const{fieldType:n,type:i}=function(e){switch(e){case\"multiline_text\":return{fieldType:\"multiline\",type:\"string\"};case\"number\":return{fieldType:\"text\",type:\"integer\"};case\"dropdown\":return{fieldType:\"dropdown\",type:\"array\"};default:return{fieldType:\"text\",type:\"string\"}}}(e.type);let r;return e.config.numberOfRows&&(r={rows:e.config.numberOfRows}),(null===(t=e.config.options)||void 0===t?void 0:t.length)&&(r=Object.assign(Object.assign({},r),{items:e.config.options.map(e=>({value:e,label:e}))})),{id:`${xe}${e.id}`,name:`${xe}${e.id}`,custom:!1,label:e.name,hidden:!e.visibleToStorefront,required:e.isRequired,default:null!=e.config.defaultValue?String(e.config.defaultValue):void 0,fieldType:n,type:i,maxLength:e.config.maxLength,max:e.config.maxValue,options:r}}function qe(){if(\"undefined\"==typeof window||!window.location)return!1;try{return!!new URLSearchParams(window.location.search).has(\"enableB2bDevMode\")&&(console.log(\"B2B Dev Mode Enabled\"),!0)}catch(e){return!1}}function Be(e){return qe()?\"https://api-b2b.bigcommerce.com\":e}function je(e,t,n){return(i=t)&&i.type&&i.error?m(E(t),v(u(e,t.payload,n))):v(u(e,t,n));var i}var Ge;!function(e){e.LoadB2BTokenRequested=\"LOAD_B2B_TOKEN_REQUESTED\",e.LoadB2BTokenSucceeded=\"LOAD_B2B_TOKEN_SUCCEEDED\",e.LoadB2BTokenFailed=\"LOAD_B2B_TOKEN_FAILED\"}(Ge||(Ge={}));class He{constructor(e){this._requestSender=e}loadB2BToken(e){return t=>{var n;const i=t.getState(),r=i.config.getStoreConfigOrThrow(),{storeHash:o}=r.storeProfile,{baseUrl:s=\"\",clientId:a=\"\"}=null!==(n=r.b2bApiSettings)&&void 0!==n?n:{},c=(u=a,qe()?\"dl7c39mdpul6hyc489yk0vzxl6jesyx\":u);var u;const l=Be(s),{id:h}=i.customer.getCustomerOrThrow(),{channelId:p}=i.checkout.getCheckoutOrThrow();return m(E(d(Ge.LoadB2BTokenRequested)),g(()=>{return t=this,n=void 0,r=function*(){const{body:t}=yield this._requestSender.getB2BToken(c,h,o,p,l,e);return d(Ge.LoadB2BTokenSucceeded,{token:t.data.token})},new((i=void 0)||(i=Promise))(function(e,o){function s(e){try{d(r.next(e))}catch(e){o(e)}}function a(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}d((r=r.apply(t,n||[])).next())});var t,n,i,r})).pipe(I(e=>je(Ge.LoadB2BTokenFailed,e)))}}}const Ve={\"X-Checkout-SDK-Version\":\"1.916.1\"};var Ye,We;class $e{constructor(e){this._requestSender=e}getB2BToken(e,t,n,i,r,o){return s=this,a=void 0,c=function*(){const{body:s}=yield this._requestSender.get(\"/customer/current.jwt\",{timeout:null==o?void 0:o.timeout,params:{app_client_id:e},headers:Ve});return this._requestSender.post(`${r}/api/v2/login`,{timeout:null==o?void 0:o.timeout,credentials:!1,headers:{\"Content-Type\":\"application/json\"},body:{bcToken:s.token,customerId:t,storeHash:n,channelId:i}})},new((d=void 0)||(d=Promise))(function(e,t){function n(e){try{r(c.next(e))}catch(e){t(e)}}function i(e){try{r(c.throw(e))}catch(e){t(e)}}function r(t){var r;t.done?e(t.value):(r=t.value,r instanceof d?r:new d(function(e){e(r)})).then(n,i)}r((c=c.apply(s,a||[])).next())});var s,a,d,c}}class Ke extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentProviderCustomer=13]=\"MissingPaymentProviderCustomer\",e[e.MissingPaymentRedirectUrl=14]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=15]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=16]=\"MissingPaymentToken\",e[e.MissingShippingAddress=17]=\"MissingShippingAddress\"}(Ye||(Ye={}));class Ze extends Ke{constructor(e){super(function(e){switch(e){case Ye.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case Ye.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case Ye.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case Ye.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case Ye.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case Ye.MissingCheckoutConfig:case Ye.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case Ye.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case Ye.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case Ye.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case Ye.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case Ye.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case Ye.MissingPaymentProviderCustomer:return\"Unable to proceed because payment provider customer is unavailable.\";case Ye.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(e){e.UpdateBillingAddressRequested=\"UPDATE_BILLING_ADDRESS_REQUESTED\",e.UpdateBillingAddressSucceeded=\"UPDATE_BILLING_ADDRESS_SUCCEEDED\",e.UpdateBillingAddressFailed=\"UPDATE_BILLING_ADDRESS_FAILED\",e.ContinueAsGuestRequested=\"CONTINUE_AS_GUEST_REQUESTED\",e.ContinueAsGuestSucceeded=\"CONTINUE_AS_GUEST_SUCCEEDED\",e.ContinueAsGuestFailed=\"CONTINUE_AS_GUEST_FAILED\"}(We||(We={}));class Qe extends Ke{constructor(e){super(e||\"Unable to continue as a guest because the customer is already signed in.\"),this.name=\"UnableToContinueAsGuestError\",this.type=\"unable_to_continue_as_guest\"}}var Je;class Xe{constructor(e,t){this._requestSender=e,this._subscriptionActionCreator=t}continueAsGuest(e,t){return n=>{const i=n.getState(),r=i.checkout.getCheckout();if(!r)throw new Ze(Ye.MissingCheckout);const o=i.customer.getCustomer();if(o&&!o.isGuest)throw new Qe;const s=i.billingAddress.getBillingAddress();let a;if(s){const{country:t}=s,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(s,[\"country\"]);a=Object.assign(Object.assign({},n),e)}else a=e;const c=!G(s);return S(m(E(d(We.ContinueAsGuestRequested)),g(()=>{return e=this,n=void 0,o=function*(){const{body:e}=yield this._createOrUpdateBillingAddress(r.id,a,c,t);return d(We.ContinueAsGuestSucceeded,e)},new((i=void 0)||(i=Promise))(function(t,r){function s(e){try{d(o.next(e))}catch(e){r(e)}}function a(e){try{d(o.throw(e))}catch(e){r(e)}}function d(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}d((o=o.apply(e,n||[])).next())});var e,n,i,o})).pipe(I(e=>je(We.ContinueAsGuestFailed,e))),this._updateCustomerConsent(e,t))}}updateAddress(e,t){return n=>h.create(i=>{const r=n.getState(),o=r.checkout.getCheckout();if(!o)throw new Ze(Ye.MissingCheckout);i.next(d(We.UpdateBillingAddressRequested));const s=r.billingAddress.getBillingAddress(),a=!G(s),c=Object.assign(Object.assign({},e),{email:void 0===e.email&&s?s.email:e.email});s&&s.id&&(c.id=s.id),this._createOrUpdateBillingAddress(o.id,c,a,t).then(({body:e})=>{i.next(d(We.UpdateBillingAddressSucceeded,e)),i.complete()}).catch(e=>{i.error(u(We.UpdateBillingAddressFailed,e))})})}_updateCustomerConsent({email:e,acceptsAbandonedCartEmails:t,acceptsMarketingNewsletter:n},i){return null==t&&null==n?y():this._subscriptionActionCreator.updateSubscriptions({email:e,acceptsMarketingNewsletter:n||!1,acceptsAbandonedCartEmails:t||!1},i)}_createOrUpdateBillingAddress(e,t,n,i){return n?this._requestSender.updateAddress(e,t,i):this._requestSender.createAddress(e,t,i)}}class et extends Ke{constructor(e){super(e||\"Your checkout could not be processed because your cart is empty. Please add items to your cart and try again.\"),this.name=\"EmptyCartError\",this.type=\"empty_cart\"}}!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(Je||(Je={}));const tt=Je;const nt={include:[\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"promotions.banners\"].join(\",\")};class it{constructor(e){this._requestSender=e}createAddress(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/billing-address`,r=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.post(i,{body:t,params:nt,headers:r,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new et;throw e})}updateAddress(e,t,{timeout:n}={}){const{id:i}=t,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"id\"]),o=`/api/storefront/checkouts/${e}/billing-address/${i}`,s=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.put(o,{params:nt,body:r,headers:s,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new et;throw e})}}var rt,ot;function st(e,t){const n=c((e,t)=>t.type===rt.Synchronize?t.payload:e,e.getState(),{stateTransformer:t});return e.subscribe(e=>{n.dispatch(d(rt.Synchronize,e))},{initial:!1}),n}!function(e){e.Synchronize=\"SYNCHRONIZE\"}(rt||(rt={})),function(e){e.ClearError=\"CLEAR_ERROR\"}(ot||(ot={}));class at{clearError(e){return{type:ot.ClearError,payload:e}}}class dt{constructor(e,t){this._requestSender=e,this._config=t}sendRequest(e,t){return this._requestSender.sendRequest(e,t)}get(e,t){return this._requestSender.get(e,t)}post(e,t){return this._requestSender.post(this._prefixed(e),t)}put(e,t){return this._requestSender.put(this._prefixed(e),t)}patch(e,t){return this._requestSender.patch(this._prefixed(e),t)}delete(e,t){return this._requestSender.delete(this._prefixed(e),t)}_prefixed(e){const t=this._config.getBasePath();return!this._config.getFeatures()[\"CHECKOUT-9950.update_sf_checkout_url_for_subfolder\"]||!t||t.endsWith(\"/checkout\")||/^https?:\\/\\//.test(e)?e:`${t}${e}`}}function ct(){try{return\"production\"}catch(e){return\"development\"}}class ut{constructor(e){this._console=e}log(...e){this._logToConsole(\"log\",...e)}info(...e){this._logToConsole(\"info\",...e)}warn(...e){this._logToConsole(\"warn\",...e)}error(...e){this._logToConsole(\"error\",...e)}debug(...e){this._logToConsole(\"debug\",...e)}_logToConsole(e,...t){this._console&&this._console[e]&&this._console[e].call(this._console,...t)}}class lt{log(){}info(){}warn(){}error(){}debug(){}}const ht=function(e=!0){return e?new ut(console):new lt}(\"test\"!==ct());function pt(){return ht}function mt(e,t,n){const i=new WeakMap;function r(e){return(...n)=>{const r=n[n.length-1],{useCache:o}=(s=r)&&\"boolean\"==typeof s.useCache?r:{useCache:!1};var s;if(!o)return e.call(this,...n);const a=i.get(this)||{};var d;return i.get(this)||i.set(this,a),a[t]||(a[t]=(d=e,fe(function(...e){const t=d.call(this,...e);return t instanceof h?_(t).pipe(P()):\"function\"==typeof t?fe(e=>_(t(e)).pipe(P()),{isEqual:H}):t},{isEqual:H}))),a[t].call(this,...n)}}return{get(){if(\"function\"!=typeof n.value)throw new Error(\"Decorator should be used in functions\");const e=r.call(this,n.value);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e}}}var gt;!function(e){e.LoadConfigRequested=\"LOAD_CONFIG_REQUESTED\",e.LoadConfigSucceeded=\"LOAD_CONFIG_SUCCEEDED\",e.LoadConfigFailed=\"LOAD_CONFIG_FAILED\"}(gt||(gt={}));class yt{constructor(e){this._configRequestSender=e}loadConfig(e){return h.create(t=>{t.next(d(gt.LoadConfigRequested)),this._configRequestSender.loadConfig(e).then(e=>{t.next(d(gt.LoadConfigSucceeded,e.body)),t.complete()}).catch(e=>{t.error(u(gt.LoadConfigFailed,e))})})}}!function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);o>3&&s&&Object.defineProperty(t,n,s)}([mt],yt.prototype,\"loadConfig\",null);const _t={body:{},headers:{},status:0};class ft extends Ke{constructor(e,{message:t,errors:n}={}){const{body:i,headers:r,status:o}=e||_t;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=r,this.status=o,this.errors=n||[]}}class St extends ft{constructor(e){super(e,{message:e.body.title}),this.name=\"CheckoutNotAvailableError\",this.type=\"checkout_not_available\"}}const Ct=\"This API endpoint is for internal use only and may change in the future\";class Et{constructor(e){this._requestSender=e}loadConfig({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/checkout-settings\",{timeout:e,headers:Object.assign({Accept:tt.JsonV1,\"X-API-INTERNAL\":Ct},Ve),params:t}).catch(e=>{if(e.status>=400&&e.status<500)throw new St(e);throw e})}}var vt;!function(e){e.ApplyCouponRequested=\"APPLY_COUPON_REQUESTED\",e.ApplyCouponSucceeded=\"APPLY_COUPON_SUCCEEDED\",e.ApplyCouponFailed=\"APPLY_COUPON_FAILED\",e.RemoveCouponRequested=\"REMOVE_COUPON_REQUESTED\",e.RemoveCouponSucceeded=\"REMOVE_COUPON_SUCCEEDED\",e.RemoveCouponFailed=\"REMOVE_COUPON_FAILED\"}(vt||(vt={}));class It{constructor(e){this._couponRequestSender=e}applyCoupon(e,t){return n=>h.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new Ze(Ye.MissingCheckout);i.next(d(vt.ApplyCouponRequested)),this._couponRequestSender.applyCoupon(r.id,e,t).then(({body:e})=>{i.next(d(vt.ApplyCouponSucceeded,e)),i.complete()}).catch(e=>{i.error(u(vt.ApplyCouponFailed,e))})})}removeCoupon(e,t){return n=>h.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new Ze(Ye.MissingCheckout);i.next(d(vt.RemoveCouponRequested)),this._couponRequestSender.removeCoupon(r.id,e,t).then(({body:e})=>{i.next(d(vt.RemoveCouponSucceeded,e)),i.complete()}).catch(e=>{i.error(u(vt.RemoveCouponFailed,e))})})}}const bt=[\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"customer.customerGroup\",\"payments\",\"promotions.banners\"];var Ot,wt,At,Pt;function Tt(e){return me(e).join(\",\")}!function(e){e.AvailableShippingOptions=\"consignments.availableShippingOptions\",e.PhysicalItemsCategoryNames=\"cart.lineItems.physicalItems.categoryNames\",e.DigitalItemsCategoryNames=\"cart.lineItems.digitalItems.categoryNames\"}(Ot||(Ot={}));class kt{constructor(e){this._requestSender=e}applyCoupon(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/coupons`,r=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.post(i,{headers:r,timeout:n,params:{include:Tt([...bt,Ot.AvailableShippingOptions])},body:{couponCode:t}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new et;throw e})}removeCoupon(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/coupons/${t}`,r=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.delete(i,{headers:r,timeout:n,params:{include:Tt([...bt,Ot.AvailableShippingOptions])}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new et;throw e})}}!function(e){e.ApplyGiftCertificateRequested=\"APPLY_GIFT_CERTIFICATE_REQUESTED\",e.ApplyGiftCertificateSucceeded=\"APPLY_GIFT_CERTIFICATE_SUCCEEDED\",e.ApplyGiftCertificateFailed=\"APPLY_GIFT_CERTIFICATE_FAILED\",e.RemoveGiftCertificateRequested=\"REMOVE_GIFT_CERTIFICATE_REQUESTED\",e.RemoveGiftCertificateSucceeded=\"REMOVE_GIFT_CERTIFICATE_SUCCEEDED\",e.RemoveGiftCertificateFailed=\"REMOVE_GIFT_CERTIFICATE_FAILED\"}(wt||(wt={}));class Rt{constructor(e){this._giftCertificateRequestSender=e}applyGiftCertificate(e,t){return n=>h.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new Ze(Ye.MissingCheckout);i.next(d(wt.ApplyGiftCertificateRequested)),this._giftCertificateRequestSender.applyGiftCertificate(r.id,e,t).then(({body:e})=>{i.next(d(wt.ApplyGiftCertificateSucceeded,e)),i.complete()}).catch(e=>{i.error(u(wt.ApplyGiftCertificateFailed,e))})})}removeGiftCertificate(e,t){return n=>h.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new Ze(Ye.MissingCheckout);i.next(d(wt.RemoveGiftCertificateRequested)),this._giftCertificateRequestSender.removeGiftCertificate(r.id,e,t).then(({body:e})=>{i.next(d(wt.RemoveGiftCertificateSucceeded,e)),i.complete()}).catch(e=>{i.error(u(wt.RemoveGiftCertificateFailed,e))})})}}class Mt{constructor(e){this._requestSender=e}applyGiftCertificate(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/gift-certificates`,r=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.post(i,{headers:r,timeout:n,params:{include:Tt(bt)},body:{giftCertificateCode:t}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new et;throw e})}removeGiftCertificate(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/gift-certificates/${t}`,r=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.delete(i,{headers:r,timeout:n,params:{include:Tt(bt)}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new et;throw e})}}function Lt(e){return e&&\"resolveIds\"in e}class Dt extends Ke{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class Ft{constructor(e){var t,n,i;this._factories={},this._instances={},this._defaultToken=null!==(t=null==e?void 0:e.defaultToken)&&void 0!==t?t:\"default\",this._useFallback=null===(n=null==e?void 0:e.useFallback)||void 0===n||n,this._tokenResolver=null!==(i=null==e?void 0:e.tokenResolver)&&void 0!==i?i:e=>e}get(e,t){try{return this._getInstance(e||this._defaultToken,t||e||this._defaultToken)}catch(e){if(!this._useFallback)throw e;return this._getInstance(this._defaultToken,t||this._defaultToken)}}getFactory(e,t){const n=this._tokenResolver(e,Object.keys(this._factories),t);return n?this._factories[n]:void 0}register(e,t){if(this._hasFactory(e))throw new Dt(`'${e}' is already registered.`);this._factories[e]=t}_hasFactory(e){return!!this._factories[e]}_hasInstance(e){return!!this._instances[e]}_getInstance(e,t){if(!this._hasInstance(t)){const n=this.getFactory(e);if(!n)throw new Dt(`'${e}' is not registered.`);this._instances[t]=n()}return this._instances[t]}}class Nt{constructor(e=!1){this._useFallback=e,this._registry=new Ft({tokenResolver:this._resolveToken.bind(this),defaultToken:this._encodeToken({default:!0}),useFallback:this._useFallback})}get(e){return this._registry.get(this._encodeToken(e))}getFactory(e,t){try{return this._registry.getFactory(this._encodeToken(e),t)}catch(e){return}}getUseFallback(){return this._useFallback}register(e,t){this._registry.register(this._encodeToken(e),t)}_encodeToken(e){return btoa(JSON.stringify(e))}_decodeToken(e){return JSON.parse(atob(e))}_resolveToken(e,t,n){var i;const r=this._decodeToken(e),o=[];t.forEach(e=>{const t=this._decodeToken(e),n={token:e,matches:0,default:!1,totalKeys:Object.keys(t).length};for(const[e,i]of Object.entries(t)){if(e in r&&r[e]!==i){n.matches=0;break}e in r&&r[e]===i&&n.matches++,\"default\"===e&&!0===i&&(n.default=!0)}o.push(n)});const s=o.sort((e,t)=>t.matches-e.matches).filter(e=>e.matches>0);s.length>1&&s[0].matches===s[1].matches&&\"development\"===ct()&&pt().warn(\"The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.\");const a=Object.keys(r).length;if(n){const e=s.find(e=>e.matches===a&&e.matches===e.totalKeys);if(!e)throw new Error(`Unable to resolve to a registered token with the provided token for ${JSON.stringify(r)} with exact match.`);return e.token}const d=s[0];if(d&&d.token)return d.token;if(this._useFallback){const e=null===(i=o.find(e=>e.default))||void 0===i?void 0:i.token;if(e)return e}throw new Error(`Unable to resolve to a registered token with the provided token for ${JSON.stringify(r)}.`)}}function xt(e){const t=e;return\"object\"==typeof t&&\"object\"==typeof t.payload&&\"string\"==typeof t.payload.token}!function(e){e.BuyNow=\"BUY_NOW\"}(At||(At={})),function(e){e.SignInCustomerRequested=\"SIGN_IN_CUSTOMER_REQUESTED\",e.SignInCustomerSucceeded=\"SIGN_IN_CUSTOMER_SUCCEEDED\",e.SignInCustomerFailed=\"SIGN_IN_CUSTOMER_FAILED\",e.SignOutCustomerRequested=\"SIGN_OUT_CUSTOMER_REQUESTED\",e.SignOutCustomerSucceeded=\"SIGN_OUT_CUSTOMER_SUCCEEDED\",e.SignOutCustomerFailed=\"SIGN_OUT_CUSTOMER_FAILED\",e.CreateCustomerRequested=\"CREATE_CUSTOMER_REQUESTED\",e.CreateCustomerSucceeded=\"CREATE_CUSTOMER_SUCCEEDED\",e.CreateCustomerFailed=\"CREATE_CUSTOMER_FAILED\",e.CreateCustomerAddressRequested=\"CREATE_CUSTOMER_ADDRESS_REQUESTED\",e.CreateCustomerAddressSucceeded=\"CREATE_CUSTOMER_ADDRESS_SUCCEEDED\",e.CreateCustomerAddressFailed=\"CREATE_CUSTOMER_ADDRESS_FAILED\",e.StripeLinkAuthenticated=\"STRIPE_LINK_AUTHENTICATED\"}(Pt||(Pt={}));var Ut,zt,qt;class Bt{constructor(e,t,n){this._customerRequestSender=e,this._checkoutActionCreator=t,this._spamProtectionActionCreator=n}createCustomer(e,t){return n=>{const i=n.getState().config.getStoreConfigOrThrow(),{isStorefrontSpamProtectionEnabled:r}=i.checkoutSettings,o=i=>_(this._customerRequestSender.createAccount(Object.assign(Object.assign({},e),{token:i}),t)).pipe(T(()=>m(this._checkoutActionCreator.loadCurrentCheckout(t)(n),E(d(Pt.CreateCustomerSucceeded)))));return m(E(d(Pt.CreateCustomerRequested)),r?_(this._spamProtectionActionCreator.execute()(n)).pipe(T(e=>{var t;return xt(e)?m(E(e),o(null===(t=e.payload)||void 0===t?void 0:t.token)):E(e)})):o()).pipe(I(e=>je(Pt.CreateCustomerFailed,e)))}}createAddress(e,t){return m(E(d(Pt.CreateCustomerAddressRequested)),g(()=>{return n=this,i=void 0,o=function*(){const{body:n}=yield this._customerRequestSender.createAddress(e,t);return d(Pt.CreateCustomerAddressSucceeded,n)},new((r=void 0)||(r=Promise))(function(e,t){function s(e){try{d(o.next(e))}catch(e){t(e)}}function a(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}d((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe(I(e=>je(Pt.CreateCustomerAddressFailed,e)))}signInCustomer(e,t){return n=>{const i=n.getState().checkout.getCheckoutOrThrow(),r=i.cart.source===At.BuyNow?i.id:void 0;return m(E(d(Pt.SignInCustomerRequested)),_(this._customerRequestSender.signInCustomer(Object.assign(Object.assign({},e),{cartId:r}),t)).pipe(T(({body:e})=>e.data.persistentCartRetrievalInformation?m(this._checkoutActionCreator.loadCheckout(e.data.persistentCartRetrievalInformation.id,t)(n),E(d(Pt.SignInCustomerSucceeded,e.data))):m(this._checkoutActionCreator.loadCurrentCheckout(t)(n),E(d(Pt.SignInCustomerSucceeded,e.data)))))).pipe(I(e=>je(Pt.SignInCustomerFailed,e)))}}signOutCustomer(e){return t=>{const n=t.getState().checkout.getCheckoutOrThrow(),i=n.cart.source===At.BuyNow?n.id:void 0;return m(E(d(Pt.SignOutCustomerRequested)),_(this._customerRequestSender.signOutCustomer(e,i)).pipe(T(({body:n})=>m(this._checkoutActionCreator.loadCurrentCheckout(e)(t),E(d(Pt.SignOutCustomerSucceeded,n.data)))))).pipe(I(e=>je(Pt.SignOutCustomerFailed,e)))}}}class jt{constructor(e){this._requestSender=e}createAccount(e,{timeout:t}={}){return this._requestSender.post(\"/api/storefront/customer\",{timeout:t,headers:Ve,body:e})}createAddress(e,{timeout:t}={}){return this._requestSender.post(\"/api/storefront/customer-address\",{timeout:t,headers:Ve,body:e})}signInCustomer(e,{timeout:t}={}){return this._requestSender.post(\"/internalapi/v1/checkout/customer\",{timeout:t,headers:Ve,body:e})}signOutCustomer({timeout:e}={},t){return this._requestSender.delete(\"/internalapi/v1/checkout/customer\",Object.assign({timeout:e,headers:Ve},t&&{body:{cartId:t}}))}}function Gt(e,t,n){t.forEach(t=>{Lt(t)&&t.resolveIds.forEach(i=>{e.getFactory(i,!0)||e.register(i,()=>t(n))})})}!function(e){e.SignInFailed=\"CUSTOMER_STRATEGY_SIGN_IN_FAILED\",e.SignInRequested=\"CUSTOMER_STRATEGY_SIGN_IN_REQUESTED\",e.SignInSucceeded=\"CUSTOMER_STRATEGY_SIGN_IN_SUCCEEDED\",e.SignOutFailed=\"CUSTOMER_STRATEGY_SIGN_OUT_FAILED\",e.SignOutRequested=\"CUSTOMER_STRATEGY_SIGN_OUT_REQUESTED\",e.SignOutSucceeded=\"CUSTOMER_STRATEGY_SIGN_OUT_SUCCEEDED\",e.ExecutePaymentMethodCheckoutFailed=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_FAILED\",e.ExecutePaymentMethodCheckoutRequested=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_REQUESTED\",e.ExecutePaymentMethodCheckoutSucceeded=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_SUCCEEDED\",e.InitializeFailed=\"CUSTOMER_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"CUSTOMER_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"CUSTOMER_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"CUSTOMER_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"CUSTOMER_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"CUSTOMER_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_FAILED\"}(Ut||(Ut={}));class Ht{constructor(e,t,n){this._strategyRegistry=e,this._strategyRegistryV2=t,this._paymentIntegrationService=n}signIn(e,t){return h.create(n=>{const i=t&&t.methodId,r={methodId:i};n.next(d(Ut.SignInRequested,void 0,r)),this._getStrategy(i).signIn(e,t).then(()=>{n.next(d(Ut.SignInSucceeded,void 0,r)),n.complete()}).catch(e=>{n.error(u(Ut.SignInFailed,e,r))})})}signOut(e){return h.create(t=>{const n=e&&e.methodId,i={methodId:n};t.next(d(Ut.SignOutRequested,void 0,i)),this._getStrategy(n).signOut(e).then(()=>{t.next(d(Ut.SignOutSucceeded,void 0,i)),t.complete()}).catch(e=>{t.error(u(Ut.SignOutFailed,e,i))})})}executePaymentMethodCheckout(e){return h.create(t=>{const n=e&&e.methodId,i={methodId:n};t.next(d(Ut.ExecutePaymentMethodCheckoutRequested,void 0,i)),this._getStrategy(n).executePaymentMethodCheckout(e).then(()=>{t.next(d(Ut.ExecutePaymentMethodCheckoutSucceeded,void 0,i)),t.complete()}).catch(e=>{t.error(u(Ut.ExecutePaymentMethodCheckoutFailed,e,i))})})}initialize(e){return t=>h.create(n=>{var i;const r=t.getState(),o=e&&e.methodId,s={methodId:o};if(Gt(this._strategyRegistryV2,null!==(i=null==e?void 0:e.integrations)&&void 0!==i?i:[],this._paymentIntegrationService),o&&r.customerStrategies.isInitialized(o))return n.complete();n.next(d(Ut.InitializeRequested,void 0,s)),this._getStrategy(o).initialize(e).then(()=>{n.next(d(Ut.InitializeSucceeded,void 0,s)),n.complete()}).catch(e=>{n.error(u(Ut.InitializeFailed,e,s))})})}deinitialize(e){return t=>h.create(n=>{const i=t.getState(),r=e&&e.methodId,o={methodId:r};if(r&&!i.customerStrategies.isInitialized(r))return n.complete();n.next(d(Ut.DeinitializeRequested,void 0,o)),this._getStrategy(r).deinitialize(e).then(()=>{n.next(d(Ut.DeinitializeSucceeded,void 0,o)),n.complete()}).catch(e=>{n.error(u(Ut.DeinitializeFailed,e,o))})})}widgetInteraction(e,t){return h.create(n=>{const i={methodId:t&&t.methodId};n.next(d(Ut.WidgetInteractionStarted,void 0,i)),e().then(()=>{n.next(d(Ut.WidgetInteractionFinished,void 0,i)),n.complete()}).catch(e=>{n.error(u(Ut.WidgetInteractionFailed,e,i))})})}_getStrategy(e){let t;try{t=this._strategyRegistryV2.get({id:e||\"\"})}catch(n){t=this._strategyRegistry.get(e)}return t}}function Vt(e,t=[]){return Array.isArray(t)?Tt([...e,...t]):function(e,t){const n=J(de(t,e=>!e)),i=J(D(t));return Tt([...L(e,n),...i])}(e,t)}class Yt{constructor(e){this._requestSender=e}loadCheckout(e,{params:{include:t}={},timeout:n}={}){const i=`/api/storefront/checkout/${e}`,r=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.get(i,{params:{include:Vt(bt,t)},headers:r,timeout:n}).catch(e=>{if(e.status>=400&&e.status<500)throw new St(e);throw e})}updateCheckout(e,t,{params:{include:n}={},timeout:i}={}){const r=`/api/storefront/checkout/${e}`,o=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.put(r,{params:{include:Vt(bt,n)},body:t,headers:o,timeout:i}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new et;throw e})}}!function(e){e.LoadCheckoutRequested=\"LOAD_CHECKOUT_REQUESTED\",e.LoadCheckoutSucceeded=\"LOAD_CHECKOUT_SUCCEEDED\",e.LoadCheckoutFailed=\"LOAD_CHECKOUT_FAILED\",e.UpdateCheckoutRequested=\"UPDATE_CHECKOUT_REQUESTED\",e.UpdateCheckoutSucceeded=\"UPDATE_CHECKOUT_SUCCEEDED\",e.UpdateCheckoutFailed=\"UPDATE_CHECKOUT_FAILED\"}(zt||(zt={})),function(e){e.HydrateInitialState=\"HYDRATE_INITIAL_STATE\"}(qt||(qt={}));var Wt;class $t{constructor(e,t,n){this._checkoutRequestSender=e,this._configActionCreator=t,this._formFieldsActionCreator=n}loadCheckout(e,t){return()=>m(E(d(zt.LoadCheckoutRequested)),S(this._configActionCreator.loadConfig({useCache:!0,timeout:null==t?void 0:t.timeout,params:{checkoutId:e}}),this._formFieldsActionCreator.loadFormFields({useCache:!0,timeout:null==t?void 0:t.timeout})),g(()=>this._checkoutRequestSender.loadCheckout(e,t).then(({body:e})=>d(zt.LoadCheckoutSucceeded,this._transformCustomerAddresses(e))))).pipe(I(e=>je(zt.LoadCheckoutFailed,e)))}loadDefaultCheckout(e){return t=>m(E(d(zt.LoadCheckoutRequested)),S(this._configActionCreator.loadConfig({useCache:!0,timeout:null==e?void 0:e.timeout}),this._formFieldsActionCreator.loadFormFields({useCache:!0,timeout:null==e?void 0:e.timeout})),g(()=>{return n=this,i=void 0,o=function*(){const n=t.getState().config.getContextConfig();if(!n||!n.checkoutId)throw new Ze(Ye.MissingCheckoutConfig);const{body:i}=yield this._checkoutRequestSender.loadCheckout(n.checkoutId,e);return d(zt.LoadCheckoutSucceeded,this._transformCustomerAddresses(i))},new((r=void 0)||(r=Promise))(function(e,t){function s(e){try{d(o.next(e))}catch(e){t(e)}}function a(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}d((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe(I(e=>je(zt.LoadCheckoutFailed,e)))}updateCheckout(e,t){return n=>new h(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new Ze(Ye.MissingCheckout);i.next(d(zt.UpdateCheckoutRequested)),this._checkoutRequestSender.updateCheckout(r.id,e,t).then(({body:e})=>{i.next(d(zt.UpdateCheckoutSucceeded,e)),i.complete()}).catch(e=>{i.error(u(zt.UpdateCheckoutFailed,e))})})}loadCurrentCheckout(e){return t=>{const n=t.getState().checkout.getCheckout();if(!n)throw new Ze(Ye.MissingCheckout);return this.loadCheckout(n.id,e)(t)}}hydrateInitialState(e){return{type:qt.HydrateInitialState,payload:e}}_transformCustomerAddresses(e){return Object.assign(Object.assign({},e),{customer:Object.assign(Object.assign({},e.customer),{addresses:e.customer.addresses.map(e=>Object.assign(Object.assign({},e),{shouldSaveAddress:!1}))})})}}!function(e){e.LoadFormFieldsRequested=\"LOAD_FORM_FIELDS_REQUESTED\",e.LoadFormFieldsSucceeded=\"LOAD_FORM_FIELDS_SUCCEEDED\",e.LoadFormFieldsFailed=\"LOAD_FORM_FIELDS_FAILED\"}(Wt||(Wt={}));var Kt;class Zt{constructor(e){this._formFieldsRequestSender=e}loadFormFields(e){return m(E(d(Wt.LoadFormFieldsRequested)),g(()=>{return t=this,n=void 0,r=function*(){const{body:t}=yield this._formFieldsRequestSender.loadFields(e);return d(Wt.LoadFormFieldsSucceeded,t)},new((i=void 0)||(i=Promise))(function(e,o){function s(e){try{d(r.next(e))}catch(e){o(e)}}function a(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}d((r=r.apply(t,n||[])).next())});var t,n,i,r})).pipe(I(e=>je(Wt.LoadFormFieldsFailed,e)))}}!function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);o>3&&s&&Object.defineProperty(t,n,s)}([mt],Zt.prototype,\"loadFormFields\",null);class Qt{constructor(e){this._requestSender=e}loadFields({timeout:e}={}){return this._requestSender.get(\"/api/storefront/form-fields\",{timeout:e,headers:Object.assign({Accept:tt.JsonV1,\"X-API-INTERNAL\":Ct},Ve)})}}class Jt extends Ke{constructor(){super(\"You haven't complete our spam protection challenge. Please try again.\"),this.name=\"SpamProtectionChallengeNotCompletedError\",this.type=\"spam_protection_challenge_not_completed\"}}class Xt extends Ke{constructor(){super(\"We were not able to complete your spam protection verification. Please try again.\"),this.name=\"SpamProtectionFailedError\",this.type=\"spam_protection_failed\"}}!function(e){e.InitializeFailed=\"SPAM_PROTECTION_INITIALIZE_FAILED\",e.InitializeSucceeded=\"SPAM_PROTECTION_INITIALIZE_SUCCEEDED\",e.InitializeRequested=\"SPAM_PROTECTION_INITIALIZE_REQUESTED\",e.VerifyCheckoutRequested=\"SPAM_PROTECTION_CHECKOUT_VERIFY_REQUESTED\",e.VerifyCheckoutSucceeded=\"SPAM_PROTECTION_CHECKOUT_VERIFY_SUCCEEDED\",e.VerifyCheckoutFailed=\"SPAM_PROTECTION_CHECKOUT_VERIFY_FAILED\",e.ExecuteRequested=\"SPAM_PROTECTION_EXECUTE_REQUESTED\",e.ExecuteSucceeded=\"SPAM_PROTECTION_EXECUTE_SUCCEEDED\",e.ExecuteFailed=\"SPAM_PROTECTION_EXECUTE_FAILED\"}(Kt||(Kt={}));var en,tn,nn,rn=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class on{constructor(e,t){this._googleRecaptcha=e,this._requestSender=t}initialize(e){return t=>m(E(d(Kt.InitializeRequested,void 0)),g(()=>rn(this,void 0,void 0,function*(){const n=e?e.containerId:\"spamProtectionContainer\";if(document.getElementById(n)&&this._googleRecaptcha.reset(n),!e&&!document.getElementById(n)){const e=document.createElement(\"div\");e.setAttribute(\"id\",n),document.body.appendChild(e)}const i=t.getState().config.getStoreConfigOrThrow().checkoutSettings.googleRecaptchaSitekey;return yield this._googleRecaptcha.load(n,i),d(Kt.InitializeSucceeded)}))).pipe(I(e=>je(Kt.InitializeFailed,e)))}verifyCheckoutSpamProtection(){return e=>g(()=>{const t=e.getState().checkout.getCheckout();if(!t)throw new Ze(Ye.MissingCheckout);return m(E(d(Kt.VerifyCheckoutRequested)),_(this.execute()(e)).pipe(T(e=>xt(e)&&e.payload?_(this._requestSender.validate(t.id,e.payload.token)).pipe(T(({body:t})=>m(E(e),E(d(Kt.VerifyCheckoutSucceeded,t))))):E(e)))).pipe(I(e=>je(Kt.VerifyCheckoutFailed,e)))})}execute(){return e=>m(E(d(Kt.ExecuteRequested)),this.initialize()(e),this._googleRecaptcha.execute().pipe(k(1)).pipe(T(({error:e,token:t})=>rn(this,void 0,void 0,function*(){if(e instanceof Jt)throw e;if(e||!t)throw new Xt;return d(Kt.ExecuteSucceeded,{token:t})})))).pipe(I(e=>je(Kt.ExecuteFailed,e)))}}class sn{constructor(e=window){this._window=e}create(e){return new this._window.MutationObserver(e)}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(en||(en={}));class an extends Ke{constructor(e){super(function(e){switch(e){case en.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case en.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case en.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case en.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class dn extends Ke{constructor(){super(\"Spam protection is not loaded. Please try again.\"),this.name=\"SpamProtectionNotLoadedError\",this.type=\"spam_protection_failed\"}}class cn{constructor(e,t){this.googleRecaptchaScriptLoader=e,this.mutationObserverFactory=t,this._memoized=fe((e,t,n)=>{const i=new p;if(!n)throw new Error;return this._widgetId=e.render(n.id,{sitekey:t,size:\"invisible\",callback:()=>{i.next({token:e.getResponse(this._widgetId)}),e.reset(this._widgetId)},\"error-callback\":()=>{i.next({error:new Xt})}}),i},{isEqual:(e,t)=>e===t})}load(e,t){return this.googleRecaptchaScriptLoader.load().then(n=>{n&&(this._event$=this._memoized(n,t,document.getElementById(e)),this._recaptcha=n)}).catch(e=>{throw e})}reset(e){var t;const n=document.getElementById(e);null==n||n.remove(),null===(t=this._recaptcha)||void 0===t||t.reset(this._widgetId)}execute(){return g(()=>{const e=this._event$,t=this._recaptcha;if(!e||!t)throw new an(en.SpamProtectionNotInitialized);return g(()=>{const e=document.querySelector('iframe[src*=\"bframe\"]');return e?E(e):v(new dn)}).pipe(A(e=>e.pipe(b(250),T((e,t)=>t<28?E(e):v(e)))),T(n=>(this._watchRecaptchaChallengeWindow(e,n),t.execute(this._widgetId),e)),I(e=>E({error:e})))})}_watchRecaptchaChallengeWindow(e,t){const n=t.parentElement;if(!n)throw new dn;const i=n.parentElement;if(!i)throw new dn;this.mutationObserverFactory.create(()=>{\"hidden\"===i.style.visibility&&e.next({error:new Jt})}).observe(i,{attributes:!0,attributeFilter:[\"style\"]})}}class un{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(){return this._loadPromise||(this._loadPromise=this._loadScript()),this._loadPromise}_loadScript(){const e=\"initRecaptcha\",t=[`onload=${e}`,\"render=explicit\"].join(\"&\");return new Promise((n,i)=>{this._window[e]=()=>n(this._window.grecaptcha),this._scriptLoader.loadScript(`//www.google.com/recaptcha/api.js?${t}`).catch(e=>{this._loadPromise=void 0,i(e)})})}}function ln(e){return new cn(new un(e),new sn)}class hn{constructor(e){this._requestSender=e}validate(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/spam-protection`,r=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.post(i,{body:{token:t},headers:r,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new et;throw e})}}class pn{constructor(e,t){this._store=e,this._customerActionCreator=t}signIn(e,t){return this._store.dispatch(this._customerActionCreator.signInCustomer(e,t))}signOut(e){return this._store.dispatch(this._customerActionCreator.signOutCustomer(e))}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve(this._store.getState())}initialize(){return Promise.resolve(this._store.getState())}deinitialize(){return Promise.resolve(this._store.getState())}}function mn(e){if(!/^(https?:)?\\/\\//.test(e))throw new Dt(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=e;const n=t.port&&-1!==e.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${n?`:${n}`:\"\"}`,pathname:t.pathname,port:n,protocol:t.protocol,search:t.search}}class gn extends Ke{constructor(e){super(e||\"Unable to proceed due to no extension configured for this region.\"),this.name=\"ExtensionNotFoundError\",this.type=\"extension_not_found\"}}function yn(e,t){return e.type===t}!function(e){e.LoadExtensionsRequested=\"LOAD_EXTENSIONS_REQUESTED\",e.LoadExtensionsSucceeded=\"LOAD_EXTENSIONS_SUCCEEDED\",e.LoadExtensionsFailed=\"LOAD_EXTENSIONS_FAILED\",e.RenderExtensionRequested=\"RENDER_EXTENSION_REQUESTED\",e.RenderExtensionSucceeded=\"RENDER_EXTENSION_SUCCEEDED\",e.RenderExtensionFailed=\"RENDER_EXTENSION_FAILED\"}(tn||(tn={}));class _n{constructor(e,t,n){this._targetWindow=t,this._context=n,this._targetOrigin=\"*\"===e?\"*\":mn(e).origin}post(e,t){const n=this._targetWindow;if(window===n)return;if(!n)throw new Error(\"Unable to post message because target window is not set.\");const i=t&&f(window,\"message\").pipe(O(e=>e.origin===this._targetOrigin&&yn(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)),w(e=>{if(t.errorType===e.data.type)throw e.data;return e.data}),k(1)).toPromise();return n.postMessage(Object.assign(Object.assign({},e),{context:this._context}),this._targetOrigin),i}setTarget(e){this._targetWindow=e}setContext(e){this._context=e}}function fn(e){var t;const n=null===(t=document.querySelector(`[data-extension-id=\"${e.id}\"]`))||void 0===t?void 0:t.querySelector(\"iframe\");if(!(null==n?void 0:n.contentWindow))throw new gn(`Unable to post due to no extension rendered for ID: ${e.id}.`);return new _n(e.url,n.contentWindow)}!function(e){e.ExtensionReady=\"EXTENSION:READY\",e.ExtensionFailed=\"EXTENSION:FAILED\"}(nn||(nn={}));class Sn{constructor(e){const t=new Promise((e,t)=>{this.cancel=t});this.promise=Promise.race([e,t])}}class Cn extends Ke{constructor(e){super(e||\"Unable to proceed because the required element is unexpectedly detached from the page.\"),this.name=\"UnexpectedDetachmentError\",this.type=\"unexpected_detachment\"}}var En;class vn{constructor(e){this._mutationObserver=e}ensurePresence(e,t){return n=this,i=void 0,o=function*(){const n=new Sn(t),i=this._mutationObserver.create(t=>{t.forEach(t=>{0!==Array.from(t.removedNodes).filter(t=>e.some(e=>t===e||t.contains(e))).length&&n.cancel(new Cn)})});i.observe(document.body,{childList:!0,subtree:!0});try{const e=yield n.promise;return i.disconnect(),e}catch(e){throw i.disconnect(),e}},new((r=void 0)||(r=Promise))(function(e,t){function s(e){try{d(o.next(e))}catch(e){t(e)}}function a(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}function In(e,t){const{iframeResizer:n}=Ne(785);return n(e,t)}class bn extends Ke{constructor(e){super(e||\"Unable to load an extension\"),this.name=\"ExtensionNotLoadedError\",this.type=\"extension_not_loaded\"}}!function(e){e.Subscribe=\"EXTENSION_INTERNAL:SUBSCRIBE\",e.Unsubscribe=\"EXTENSION_INTERNAL:UNSUBSCRIBE\",e.ResizeIframe=\"EXTENSION_INTERNAL:RESIZE_IFRAME\"}(En||(En={}));class On{constructor(e){this._options=e}createFrame(e,t,n,i){const r=document.getElementById(t),{timeout:o=6e4}=this._options||{};if(!r)throw new bn(\"Unable to embed the iframe because the container element could not be found.\");const s=document.createElement(\"iframe\");return s.src=e,s.style.border=\"none\",s.style.display=\"none\",s.style.width=\"100%\",r.appendChild(s),this._toResizableFrame(s,o,n,i).catch(e=>{throw r.removeChild(s),e})}_toResizableFrame(e,t,n,i){return r=this,o=void 0,a=function*(){const r=new vn(new sn),o=new Promise((r,o)=>{const s=window.setTimeout(()=>{try{i()}catch(e){e instanceof Error&&console.error(`Extension rendering timed out after ${t}ms, and the callback function could not be executed. Error: ${e.message}`)}o(new bn(\"Unable to load the extension because the content could not be loaded.\"))},t),a=t=>{if(t.origin===mn(e.src).origin&&yn(t.data,En.ResizeIframe)){e.style.display=\"\";const t=In({autoResize:!1,scrolling:!1,sizeWidth:!1,heightCalculationMethod:\"bodyOffset\",initCallback:n},e);d(),r(t[t.length-1])}},d=()=>{window.removeEventListener(\"message\",a),window.clearTimeout(s)};window.addEventListener(\"message\",a)});return r.ensurePresence([e],o)},new((s=void 0)||(s=Promise))(function(e,t){function n(e){try{d(a.next(e))}catch(e){t(e)}}function i(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var r;t.done?e(t.value):(r=t.value,r instanceof s?r:new s(function(e){e(r)})).then(n,i)}d((a=a.apply(r,o||[])).next())});var r,o,s,a}}class wn{constructor(e,t,n){this._containerId=e,this._extension=t,this._config=n;const{cartId:i,parentOrigin:r}=this._config;this._url=new URL(this._extension.url),this._url.searchParams.set(\"extensionId\",this._extension.id),this._url.searchParams.set(\"cartId\",i),this._url.searchParams.set(\"parentOrigin\",r)}attach(){var e,t,n,i,r;return t=this,n=void 0,r=function*(){if(null===(e=document.querySelector(`[data-extension-id=\"${this._extension.id}\"]`))||void 0===e?void 0:e.querySelector(\"iframe\"))return;const t=new On,n=e=>{fn(this._extension).post({type:e})};this._iframe=yield t.createFrame(this._url.toString(),this._containerId,()=>{n(nn.ExtensionReady)},()=>{n(nn.ExtensionFailed)});const i=document.getElementById(this._containerId);null==i||i.setAttribute(\"data-extension-id\",this._extension.id)},new((i=void 0)||(i=Promise))(function(e,o){function s(e){try{d(r.next(e))}catch(e){o(e)}}function a(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}d((r=r.apply(t,n||[])).next())})}detach(){this._iframe&&this._iframe.parentElement&&this._iframe.parentElement.removeChild(this._iframe)}}class An{constructor(e){this._requestSender=e}loadExtensions(e){return()=>h.create(t=>{t.next(d(tn.LoadExtensionsRequested)),this._requestSender.loadExtensions(e).then(e=>{const n=e.body;t.next(d(tn.LoadExtensionsSucceeded,n)),t.complete()}).catch(e=>{t.error(u(tn.LoadExtensionsFailed,e))})})}renderExtension(e,t,n){return i=>h.create(r=>{return o=this,s=void 0,c=function*(){const o=i.getState(),{id:s}=o.cart.getCartOrThrow(),{links:{checkoutLink:a}}=o.config.getStoreConfigOrThrow(),c=o.extensions.getExtensionByRegion(t);try{if(!c)throw new gn(`Unable to proceed due to no extension configured for the region: ${t}.`);if(r.next(d(tn.RenderExtensionRequested)),\"worker\"===c.type){const e=function(e){if(!window.Worker)throw new Error(\"Unable to load the extension's web worker: your browser does not support Web Workers.\");try{const t=URL.createObjectURL(new Blob([`importScripts=((i)=>(...a)=>i(...a.map((u)=>''+new URL(u,\"${e}\"))))(importScripts);importScripts(\"${e}\")`],{type:\"text/javascript\"}));return new Worker(t)}catch(e){throw new Error(\"Unable to load the extension's web worker\")}}(c.url);n.add(c.id,e)}else{const t=new wn(e,c,{cartId:s,parentOrigin:mn(a).origin});yield t.attach()}r.next(d(tn.RenderExtensionSucceeded)),r.complete()}catch(e){r.error(u(tn.RenderExtensionFailed,e))}},new((a=void 0)||(a=Promise))(function(e,t){function n(e){try{r(c.next(e))}catch(e){t(e)}}function i(e){try{r(c.throw(e))}catch(e){t(e)}}function r(t){var r;t.done?e(t.value):(r=t.value,r instanceof a?r:new a(function(e){e(r)})).then(n,i)}r((c=c.apply(o,s||[])).next())});var o,s,a,c})}}class Pn{constructor(e){this._requestSender=e}loadExtensions({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/checkout-extensions\",{timeout:e,headers:Object.assign({Accept:tt.JsonV1},Ve),params:t})}}const Tn=function(e,t,n){return t&&n?kn(0,t,n):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const i=Object.getOwnPropertyDescriptor(e.prototype,n);i&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,kn(e.prototype,n,i))}),t}(e)};function kn(e,t,n){if(\"function\"!=typeof n.value)return n;let i=n.value;return{get(){const e=i.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){i=e}}}var Rn,Mn;class Ln{constructor(e){this._worker=e,this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,this._worker.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,this._worker.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const i=n.indexOf(t);i>=0&&n.splice(i,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){const t=e.data,{context:n}=t,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"context\"]);this.trigger(i,n)}}!function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);o>3&&s&&Object.defineProperty(t,n,s)}([Tn],Ln.prototype,\"_handleMessage\",null);class Dn{constructor(e,t){this._worker=e,this._context=t}post(e){if(!this._worker)throw new Error(\"WorkerPoster: Worker is not initialized or creation failed. Cannot post message.\");this._worker.postMessage(Object.assign(Object.assign({},e),{context:this._context}))}}class Fn extends Ke{constructor(e){super(e||\"Unable to proceed due to unsupported extension command.\"),this.name=\"UnsupportedExtensionCommandError\",this.type=\"unsupported_extension_command_error\"}}class Nn extends Ke{constructor(e){super(e||\"Unable to proceed due to unsupported extension query.\"),this.name=\"UnsupportedExtensionQueryError\",this.type=\"unsupported_extension_query_error\"}}!function(e){e.ReloadCheckout=\"EXTENSION:RELOAD_CHECKOUT\",e.ShowLoadingIndicator=\"EXTENSION:SHOW_LOADING_INDICATOR\",e.SetIframeStyle=\"EXTENSION:SET_IFRAME_STYLE\",e.ReRenderShippingForm=\"EXTENSION:RE_RENDER_SHIPPING_FORM\",e.ReRenderShippingStep=\"EXTENSION:RE_RENDER_SHIPPING_STEP\"}(Rn||(Rn={})),function(e){e.GetConsignments=\"EXTENSION:GET_CONSIGNMENTS\"}(Mn||(Mn={}));class xn{constructor(e={},t={},n={}){this._workers=e,this._commandListeners=t,this._queryListeners=n}add(e,t){this._workers[e]=t}listenForCommand(e,t,n){const i=this._getWorkerById(e);this._commandListeners[e]||(this._commandListeners[e]=new Ln(i));const r=this._commandListeners[e];r.listen();const o=this._validateCommand(t),s=(t,i)=>{(null==i?void 0:i.extensionId)===e&&n(t,i)};return r.addListener(o,s),()=>{r.removeListener(o,s)}}listenForQuery(e,t,n){const i=this._getWorkerById(e);this._queryListeners[e]||(this._queryListeners[e]=new Ln(i));const r=this._queryListeners[e];r.listen();const o=this._validateQuery(t),s=(t,i)=>{(null==i?void 0:i.extensionId)===e&&n(t,i)};return r.addListener(o,s),()=>{r.removeListener(o,s)}}stopListen(e){this._commandListeners[e]&&this._commandListeners[e].stopListen(),this._queryListeners[e]&&this._queryListeners[e].stopListen()}post(e,t){if(!this._workers[e])throw new Error(`Worker with extensionId ${e} not found`);new Dn(this._workers[e],e).post(t)}clearCacheById(e){delete this._workers[e]}_getWorkerById(e){const t=this._workers[e];if(!t)throw new gn(`Worker with extensionId ${e} not found`);return t}_validateCommand(e){if(Object.values(Rn).includes(e))return e;throw new Fn}_validateQuery(e){if(Object.values(Mn).includes(e))return e;throw new Nn}}function Un(e){return mn(0===e.hostname.indexOf(\"www\")?e.href:e.href.replace(e.hostname,`www.${e.hostname}`))}var zn;class qn{constructor(e){this._sourceOrigins=[mn(e).origin,Un(mn(e)).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const i=n.indexOf(t);i>=0&&n.splice(i,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){if(-1===this._sourceOrigins.indexOf(e.origin)||!yn(e.data,e.data.type))return;const t=e.data,{context:n}=t,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"context\"]);this.trigger(i,n)}}!function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);o>3&&s&&Object.defineProperty(t,n,s)}([Tn],qn.prototype,\"_handleMessage\",null);class Bn{constructor(e,t,n={},i={},r={}){this._store=e,this._workerExtensionMessenger=t,this._commandListeners=n,this._queryListeners=i,this._posters=r}clearCacheByRegion(e){const t=this._getExtensionByRegion(e);\"worker\"!==t.type?this.clearCacheById(t.id):this._workerExtensionMessenger.clearCacheById(t.id)}clearCacheById(e){const t=this._getExtensionById(e);\"worker\"!==t.type?(this._commandListeners[e]&&delete this._commandListeners[e],this._queryListeners[e]&&delete this._queryListeners[e],this._posters[e]&&delete this._posters[e]):this._workerExtensionMessenger.clearCacheById(t.id)}listenForCommand(e,t,n){const i=this._getExtensionById(e);if(\"worker\"===i.type)return this._workerExtensionMessenger.listenForCommand(e,t,n);this._commandListeners[e]||(this._commandListeners[e]=new qn(i.url));const r=this._commandListeners[e];r.listen();const o=this._validateCommand(t),s=(t,i)=>{(null==i?void 0:i.extensionId)===e&&n(t,i)};return r.addListener(o,s),()=>{r.removeListener(o,s)}}listenForQuery(e,t,n){const i=this._getExtensionById(e);if(\"worker\"===i.type)return this._workerExtensionMessenger.listenForQuery(e,t,n);this._queryListeners[e]||(this._queryListeners[e]=new qn(i.url));const r=this._queryListeners[e];r.listen();const o=this._validateQuery(t),s=(t,i)=>{(null==i?void 0:i.extensionId)===e&&n(t,i)};return r.addListener(o,s),()=>{r.removeListener(o,s)}}stopListen(e){\"worker\"!==this._getExtensionById(e).type?(this._commandListeners[e]&&this._commandListeners[e].stopListen(),this._queryListeners[e]&&this._queryListeners[e].stopListen()):this._workerExtensionMessenger.stopListen(e)}post(e,t){try{const n=this._getExtensionById(e);if(\"worker\"===n.type)return void this._workerExtensionMessenger.post(e,t);this._posters[e]||(this._posters[e]=fn(n)),this._posters[e].post(t)}catch(n){this.clearCacheById(e),console.log(`Unable to post event to extension(${e}) because extension iframe is not mounted.\\nThe event that could not be delivered:`,t)}}_getExtensionById(e){var t;this._getExtensions();const n=null===(t=this._extensions)||void 0===t?void 0:t.find(t=>t.id===e);if(!n)throw new gn(`Unable to proceed due to no extension found for ID: ${e}.`);return n}_getExtensionByRegion(e){var t;this._getExtensions();const n=null===(t=this._extensions)||void 0===t?void 0:t.find(t=>t.region===e);if(!n)throw new gn(`Unable to proceed due to no extension found for region: ${e}.`);return n}_getExtensions(){if(this._extensions)return;const{extensions:{getExtensions:e}}=this._store.getState();if(this._extensions=e(),!this._extensions)throw new gn(\"Extension configurations not found.\")}_validateCommand(e){if(Object.values(Rn).includes(e))return e;throw new Fn}_validateQuery(e){if(Object.values(Mn).includes(e))return e;throw new Nn}}class jn{constructor(e,t,n){this._store=e,this._extensionMessenger=t,this._subscribers=n,this._subscribed={},this._unsubscribers={},this._listeners={}}listen(){var e;const{data:{getExtensions:t}}=this._store.getState();null===(e=t())||void 0===e||e.forEach(e=>{if(this._listeners[e.id])return;const t=new qn(e.url);t.addListener(En.Subscribe,this._handleSubscribe.bind(this)),t.addListener(En.Unsubscribe,this._handleUnsubscribe.bind(this)),t.listen(),this._listeners[e.id]=t})}broadcast(e){var t;const{data:{getExtensions:n}}=this._store.getState();null===(t=n())||void 0===t||t.forEach(t=>{this._subscribed[t.id]&&this._extensionMessenger.post(t.id,e)})}_handleSubscribe({payload:{eventType:e,extensionId:t}}){this._subscribed[t]=!0,this._unsubscribers[e]||(this._unsubscribers[e]=this._subscribers[e](this._store,this))}_handleUnsubscribe({payload:{eventType:e,extensionId:t}}){var n,i;delete this._subscribed[t],Object.keys(this._subscribed).length||(null===(i=(n=this._unsubscribers)[e])||void 0===i||i.call(n),delete this._unsubscribers[e])}}!function(e){e.ConsignmentsChanged=\"EXTENSION:CONSIGNMENTS_CHANGED\"}(zn||(zn={}));const Gn=(e,t)=>{var n;const{data:{getConsignments:i}}=e.getState();let r=null!==(n=i())&&void 0!==n?n:[];return e.subscribe(({data:{getConsignments:e}})=>{var n;const i=null!==(n=e())&&void 0!==n?n:[];i!==r&&(t.broadcast({type:zn.ConsignmentsChanged,payload:{consignments:i,previousConsignments:r}}),r=i)},({data:{getConsignments:e}})=>e())};class Hn extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class Vn extends Hn{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class Yn{constructor(e){this._paymentIntegrationService=e}execute(e,t){return n=this,i=void 0,o=function*(){yield this._paymentIntegrationService.submitOrder(re(e,\"payment\"),t)},new((r=void 0)||(r=Promise))(function(e,t){function s(e){try{d(o.next(e))}catch(e){t(e)}}function a(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new Vn)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const Wn=($n=e=>new Yn(e),Kn=[{id:\"nopaymentdatarequired\"}],Object.assign($n,{resolveIds:Kn}));var $n,Kn,Zn,Qn;!function(e){e.LoadCountriesRequested=\"LOAD_COUNTRIES_REQUESTED\",e.LoadCountriesSucceeded=\"LOAD_COUNTRIES_SUCCEEDED\",e.LoadCountriesFailed=\"LOAD_COUNTRIES_FAILED\"}(Zn||(Zn={}));class Jn{constructor(e){this._countryRequestSender=e}loadCountries(e){return h.create(t=>{t.next(d(Zn.LoadCountriesRequested)),this._countryRequestSender.loadCountries(e).then(e=>{t.next(d(Zn.LoadCountriesSucceeded,e.body.data)),t.complete()}).catch(e=>{t.error(u(Zn.LoadCountriesFailed,e))})})}}class Xn{constructor(e,t){this._requestSender=e,this._config=t}loadCountries({timeout:e}={}){const t=Object.assign({\"Accept-Language\":this._config.locale},Ve);return this._requestSender.get(\"/internalapi/v1/store/countries\",{headers:t,timeout:e})}}class ei extends Ke{constructor(e){super(e||\"Your checkout could not be processed because some details have changed. Please review your order and try again.\"),this.name=\"CartConsistencyError\",this.type=\"cart_consistency\"}}class ti extends Ke{constructor(e,t){super(t||\"At least one item changed stock position. Please review your cart and try again.\"),this.name=\"CartStockPositionsChangedError\",this.type=\"cart_stock_positions_changed\",this.changedItemIds=e}}class ni extends Ke{constructor(e){super(e||\"The tax provider is unavailable.\"),this.name=\"OrderTaxProviderUnavailableError\",this.type=\"tax_provider_unavailable\"}}class ii extends Ke{constructor(e){super(e),this.name=\"MissingShippingMethodError\",this.type=\"missing_shipping_method\"}}class ri extends Ke{constructor(e){super(e),this.name=\"InvalidShippingAddressError\",this.type=\"invalid_shipping_address\"}}class oi{constructor(e){this._requestSender=e}loadOrder(e,{timeout:t}={}){const n=`/api/storefront/orders/${e}`,i=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.get(n,{params:{include:Tt([\"payments\",\"lineItems.physicalItems.socialMedia\",\"lineItems.physicalItems.options\",\"lineItems.physicalItems.categories\",\"lineItems.digitalItems.socialMedia\",\"lineItems.digitalItems.options\",\"lineItems.digitalItems.categories\"])},headers:i,timeout:t})}submitOrder(e,{headers:t,timeout:n}={}){return this._requestSender.post(\"/internalapi/v1/checkout/order\",{body:e,headers:oe(Object.assign({\"X-Checkout-Variant\":t&&t.checkoutVariant},Ve),Y),timeout:n}).catch(e=>{var t,n;if(\"tax_provider_unavailable\"===e.body.type)throw new ni;if(\"cart_has_changed\"===e.body.type)throw new ei;if(\"cart_stock_positions_changed\"===e.body.type){const i=null!==(n=null===(t=e.body.errors)||void 0===t?void 0:t.changedItemIds)&&void 0!==n?n:[];throw new ti(i)}if(\"missing_shipping_method\"===e.body.type)throw new ii(e.body.detail);if(\"invalid_shipping_address\"===e.body.type)throw new ri(e.body.detail);if(\"empty_cart\"===e.body.type)throw new et;throw e})}finalizeOrder(e,{timeout:t}={}){const n=`/internalapi/v1/checkout/order/${e}`;return this._requestSender.post(n,{timeout:t,headers:Ve})}}class si extends Ke{constructor(){super(\"You haven't complete our spam check. Please try again.\"),this.name=\"SpamProtectionNotCompletedError\",this.type=\"spam_protection_not_completed\"}}!function(e){e.LoadOrderRequested=\"LOAD_ORDER_REQUESTED\",e.LoadOrderSucceeded=\"LOAD_ORDER_SUCCEEDED\",e.LoadOrderFailed=\"LOAD_ORDER_FAILED\",e.LoadOrderPaymentsRequested=\"LOAD_ORDER_PAYMENTS_REQUESTED\",e.LoadOrderPaymentsSucceeded=\"LOAD_ORDER_PAYMENTS_SUCCEEDED\",e.LoadOrderPaymentsFailed=\"LOAD_ORDER_PAYMENTS_FAILED\",e.SubmitOrderRequested=\"SUBMIT_ORDER_REQUESTED\",e.SubmitOrderSucceeded=\"SUBMIT_ORDER_SUCCEEDED\",e.SubmitOrderFailed=\"SUBMIT_ORDER_FAILED\",e.FinalizeOrderRequested=\"FINALIZE_ORDER_REQUESTED\",e.FinalizeOrderSucceeded=\"FINALIZE_ORDER_SUCCEEDED\",e.FinalizeOrderFailed=\"FINALIZE_ORDER_FAILED\"}(Qn||(Qn={}));class ai{constructor(e,t){this._orderRequestSender=e,this._checkoutValidator=t}loadOrder(e,t){return new h(n=>{n.next(d(Qn.LoadOrderRequested)),this._orderRequestSender.loadOrder(e,t).then(e=>{n.next(d(Qn.LoadOrderSucceeded,e.body)),n.complete()}).catch(e=>{n.error(u(Qn.LoadOrderFailed,e))})})}loadOrderPayments(e,t){return new h(n=>{n.next(d(Qn.LoadOrderPaymentsRequested)),this._orderRequestSender.loadOrder(e,t).then(e=>{n.next(d(Qn.LoadOrderPaymentsSucceeded,e.body)),n.complete()}).catch(e=>{n.error(u(Qn.LoadOrderPaymentsFailed,e))})})}loadCurrentOrder(e){return t=>g(()=>{const n=this._getCurrentOrderId(t.getState());if(!n)throw new Ze(Ye.MissingOrderId);return this.loadOrder(n,e)})}submitOrder(e,t){return n=>m(E(d(Qn.SubmitOrderRequested)),g(()=>{const i=n.getState(),r=i.config.getExternalSource(),o=i.config.getVariantIdentificationToken(),s=i.checkout.getCheckout();if(!s)throw new Ze(Ye.MissingCheckout);if(s.shouldExecuteSpamCheck)throw new si;return _(this._checkoutValidator.validate(s,t).then(()=>this._orderRequestSender.submitOrder(this._mapToOrderRequestBody(null!=e?e:{},s.id,s.customerMessage,r),Object.assign(Object.assign({},t),{headers:{checkoutVariant:o}})))).pipe(T(e=>m(this.loadOrder(e.body.data.order.orderId,t),E(d(Qn.SubmitOrderSucceeded,e.body.data,Object.assign(Object.assign({},e.body.meta),{token:e.headers.token}))))))}).pipe(I(e=>je(Qn.SubmitOrderFailed,e))))}finalizeOrder(e,t){return m(E(d(Qn.FinalizeOrderRequested)),_(this._orderRequestSender.finalizeOrder(e,t)).pipe(T(n=>m(this.loadOrder(e,t),E(d(Qn.FinalizeOrderSucceeded,n.body.data)))))).pipe(I(e=>je(Qn.FinalizeOrderFailed,e)))}_getCurrentOrderId(e){const t=e.order.getOrder(),n=e.checkout.getCheckout();return t&&t.orderId||n&&n.orderId}_mapToOrderRequestBody(e,t,n,i){const{payment:r}=e,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);return r?Object.assign(Object.assign({},o),{cartId:t,customerMessage:n,externalSource:i,payment:{paymentData:r.paymentData,name:r.methodId,gateway:r.gatewayId}}):Object.assign(Object.assign({},o),{cartId:t,customerMessage:n,externalSource:i})}}function di(e){const t=Ce();return e.subscribe(e=>{const n=e.config.getStoreConfig();n&&t.setHost(n.paymentSettings.bigpayBaseUrl)},e=>e.config.getStoreConfig()),t}var ci;function ui(e,t,n,i){var r,o,s,a,d,c,u,l;return d=this,c=void 0,l=function*(){const d=t.customer.getCustomer(),c=t.b2bToken.getToken(),u=Be(null!==(s=null===(o=null===(r=t.config.getStoreConfig())||void 0===r?void 0:r.b2bApiSettings)||void 0===o?void 0:o.baseUrl)&&void 0!==s?s:\"\"),l=null===(a=t.cart.getCart())||void 0===a?void 0:a.companyId;if(!d||d.isGuest||!c||!u||!l)throw new Ze(Ye.MissingCheckoutConfig);const{body:h}=yield n.getB2BCompanyPaymentMethods(l,c,u,i);return function(e,t){const n=new Set(t.data.filter(e=>\"1\"===e.isEnabled).map(e=>e.code));return e.filter(e=>n.has(e.id))}(e,h)},new((u=void 0)||(u=Promise))(function(e,t){function n(e){try{r(l.next(e))}catch(e){t(e)}}function i(e){try{r(l.throw(e))}catch(e){t(e)}}function r(t){var r;t.done?e(t.value):(r=t.value,r instanceof u?r:new u(function(e){e(r)})).then(n,i)}r((l=l.apply(d,c||[])).next())})}!function(e){e.LoadPaymentMethodRequested=\"LOAD_PAYMENT_METHOD_REQUESTED\",e.LoadPaymentMethodSucceeded=\"LOAD_PAYMENT_METHOD_SUCCEEDED\",e.LoadPaymentMethodFailed=\"LOAD_PAYMENT_METHOD_FAILED\",e.LoadPaymentMethodsRequested=\"LOAD_PAYMENT_METHODS_REQUESTED\",e.LoadPaymentMethodsSucceeded=\"LOAD_PAYMENT_METHODS_SUCCEEDED\",e.LoadPaymentMethodsFailed=\"LOAD_PAYMENT_METHODS_FAILED\"}(ci||(ci={}));var li=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};const hi=e=>!!e;class pi{constructor(e,t){this._requestSender=e,this._b2bCompanyPaymentMethodRequestSender=t}loadPaymentMethodsById(e,t){return n=>new h(i=>{var r;const o=null===(r=n.getState().cart.getCart())||void 0===r?void 0:r.id,s=o?Object.assign(Object.assign({},null==t?void 0:t.params),{cartId:o}):Object.assign({},null==t?void 0:t.params);i.next(d(ci.LoadPaymentMethodsRequested)),Promise.all(e.map(e=>li(this,void 0,void 0,function*(){try{return(yield this._requestSender.loadPaymentMethod(e,Object.assign(Object.assign({},t),{params:s}))).body}catch(e){return}}))).then(e=>{const t=e.filter(hi);i.next(d(ci.LoadPaymentMethodsSucceeded,t)),i.complete()}).catch(e=>{i.next(d(ci.LoadPaymentMethodsFailed,e)),i.complete()})})}loadPaymentMethods(e){return t=>h.create(n=>{const i=t.getState(),r=i.cart.getCartOrThrow();n.next(d(ci.LoadPaymentMethodsRequested)),this._requestSender.loadPaymentMethods(Object.assign(Object.assign({},e),{params:Object.assign(Object.assign({},null==e?void 0:e.params),{cartId:r.id})})).then(t=>li(this,void 0,void 0,function*(){var r,o,s,a;const c={deviceSessionId:t.headers[\"x-device-session-id\"],sessionHash:t.headers[\"x-session-hash\"]};let u=t.body;null!==(a=null===(s=null===(o=null===(r=i.config.getStoreConfig())||void 0===r?void 0:r.checkoutSettings.capabilities)||void 0===o?void 0:o.payment)||void 0===s?void 0:s.b2bPaymentMethodFilter)&&void 0!==a&&a&&(u=yield ui(u,i,this._b2bCompanyPaymentMethodRequestSender,e)),n.next(d(ci.LoadPaymentMethodsSucceeded,u,c)),n.complete()})).catch(e=>{n.error(u(ci.LoadPaymentMethodsFailed,e))})})}loadPaymentMethod(e,t){return n=>h.create(i=>{var r;const o=null===(r=n.getState().cart.getCart())||void 0===r?void 0:r.id,s=o?Object.assign(Object.assign({},null==t?void 0:t.params),{cartId:o}):Object.assign({},null==t?void 0:t.params);i.next(d(ci.LoadPaymentMethodRequested,void 0,{methodId:e})),this._requestSender.loadPaymentMethod(e,Object.assign(Object.assign({},t),{params:s})).then(t=>{i.next(d(ci.LoadPaymentMethodSucceeded,t.body,{methodId:e})),i.complete()}).catch(t=>{i.error(u(ci.LoadPaymentMethodFailed,t,{methodId:e}))})})}}!function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);o>3&&s&&Object.defineProperty(t,n,s)}([mt],pi.prototype,\"loadPaymentMethod\",null);class mi{constructor(e){this._requestSender=e}loadPaymentMethods({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/payments\",{timeout:e,headers:Object.assign({Accept:tt.JsonV1,\"X-API-INTERNAL\":Ct},Ve),params:t})}loadPaymentMethod(e,{timeout:t,params:n}={}){const i=`/api/storefront/payments/${e}`;return this._requestSender.get(i,{timeout:t,headers:Object.assign({Accept:tt.JsonV1,\"X-API-INTERNAL\":Ct},Ve),params:n})}}var gi,yi;class _i{constructor(e){this._requestSender=e}getB2BCompanyPaymentMethods(e,t,n,i){return r=this,o=void 0,a=function*(){return this._requestSender.get(`${n}/api/v2/companies/${e}/payments`,{timeout:null==i?void 0:i.timeout,credentials:!1,headers:{authToken:t,Authorization:`Bearer ${t}`}})},new((s=void 0)||(s=Promise))(function(e,t){function n(e){try{d(a.next(e))}catch(e){t(e)}}function i(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var r;t.done?e(t.value):(r=t.value,r instanceof s?r:new s(function(e){e(r)})).then(n,i)}d((a=a.apply(r,o||[])).next())});var r,o,s,a}}class fi extends Ke{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(e){e.ExecuteFailed=\"PAYMENT_STRATEGY_EXECUTE_FAILED\",e.ExecuteRequested=\"PAYMENT_STRATEGY_EXECUTE_REQUESTED\",e.ExecuteSucceeded=\"PAYMENT_STRATEGY_EXECUTE_SUCCEEDED\",e.FinalizeFailed=\"PAYMENT_STRATEGY_FINALIZE_FAILED\",e.FinalizeRequested=\"PAYMENT_STRATEGY_FINALIZE_REQUESTED\",e.FinalizeSucceeded=\"PAYMENT_STRATEGY_FINALIZE_SUCCEEDED\",e.InitializeFailed=\"PAYMENT_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"PAYMENT_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"PAYMENT_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"PAYMENT_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"PAYMENT_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"PAYMENT_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_FAILED\"}(gi||(gi={})),function(e){e.ADYENV2=\"adyenv2\",e.ADYENV2_GOOGLEPAY=\"googlepayadyenv2\",e.ADYENV3=\"adyenv3\",e.ADYENV3_GOOGLEPAY=\"googlepayadyenv3\",e.AFFIRM=\"affirm\",e.AFTERPAY=\"afterpay\",e.AUTHORIZENET_GOOGLE_PAY=\"googlepayauthorizenet\",e.AMAZONPAY=\"amazonpay\",e.APPLEPAY=\"applepay\",e.BLUESNAPV2=\"bluesnapv2\",e.BOLT=\"bolt\",e.CBA_MPGS=\"cba_mpgs\",e.CHECKOUTCOM=\"checkoutcom\",e.CHECKOUTCOM_APM=\"checkoutcomapm\",e.CHECKOUTCOM_FAWRY=\"checkoutcomfawry\",e.CHECKOUTCOM_SEPA=\"checkoutcomsepa\",e.CHECKOUTCOM_IDEAL=\"checkoutcomideal\",e.CREDIT_CARD=\"creditcard\",e.CHECKOUTCOM_GOOGLE_PAY=\"googlepaycheckoutcom\",e.CLEARPAY=\"clearpay\",e.CONVERGE=\"converge\",e.CYBERSOURCE=\"cybersource\",e.CYBERSOURCEV2=\"cybersourcev2\",e.BNZ=\"bnz\",e.BNZ_GOOGLEPAY=\"googlepaybnz\",e.CYBERSOURCEV2_GOOGLE_PAY=\"googlepaycybersourcev2\",e.HUMM=\"humm\",e.KLARNA=\"klarna\",e.KLARNAV2=\"klarnav2\",e.LEGACY=\"legacy\",e.MOLLIE=\"mollie\",e.MONERIS=\"moneris\",e.NO_PAYMENT_DATA_REQUIRED=\"nopaymentdatarequired\",e.OFFLINE=\"offline\",e.OFFSITE=\"offsite\",e.ORBITAL_GOOGLE_PAY=\"googlepayorbital\",e.PAYPAL_EXPRESS=\"paypalexpress\",e.PAYPAL_EXPRESS_CREDIT=\"paypalexpresscredit\",e.PAYPAL_COMMERCE=\"paypalcommerce\",e.PAYPAL_COMMERCE_CREDIT=\"paypalcommercecredit\",e.PAYPAL_COMMERCE_CREDIT_CARD=\"paypalcommercecreditcards\",e.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=\"paypalcommercealternativemethods\",e.PAYPAL_COMMERCE_VENMO=\"paypalcommercevenmo\",e.PPSDK=\"PAYMENT_TYPE_SDK\",e.QUADPAY=\"quadpay\",e.SAGE_PAY=\"sagepay\",e.SQUARE=\"squarev2\",e.STRIPEV3=\"stripev3\",e.STRIPE_UPE=\"stripeupe\",e.STRIPE_UPE_GOOGLE_PAY=\"googlepaystripeupe\",e.BRAINTREE=\"braintree\",e.BRAINTREE_PAYPAL=\"braintreepaypal\",e.BRAINTREE_VENMO=\"braintreevenmo\",e.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",e.BRAINTREE_VISA_CHECKOUT=\"braintreevisacheckout\",e.BRAINTREE_GOOGLE_PAY=\"googlepaybraintree\",e.WORLDPAYACCESS=\"worldpayaccess\",e.WORLDPAYACCESS_GOOGLE_PAY=\"googlepayworldpayaccess\",e.STRIPE_GOOGLE_PAY=\"googlepaystripe\",e.SEZZLE=\"sezzle\",e.ZIP=\"zip\"}(yi||(yi={}));const Si=yi;class Ci{widgetInteraction(e,t){const n={methodId:t&&t.methodId};return m(E(d(gi.WidgetInteractionStarted,void 0,n)),g(()=>e().then(()=>d(gi.WidgetInteractionFinished,void 0,n)))).pipe(I(e=>je(gi.WidgetInteractionFailed,e,n)))}}class Ei{constructor(e,t,n,i,r){this._strategyRegistry=e,this._strategyRegistryV2=t,this._orderActionCreator=n,this._spamProtectionActionCreator=i,this._paymentIntegrationService=r,this._paymentStrategyWidgetActionCreator=new Ci}execute(e,t){const{payment:n={},useStoreCredit:i}=e,r={methodId:n.methodId};return o=>{const{checkout:s}=o.getState(),{shouldExecuteSpamCheck:a}=s.getCheckoutOrThrow();return m(a?this._spamProtectionActionCreator.verifyCheckoutSpamProtection()(o):y(),E(d(gi.ExecuteRequested,void 0,r)),g(()=>{const s=o.getState();let a;if(s.payment.isPaymentDataRequired(i)){const e=s.paymentMethods.getPaymentMethod(n.methodId,n.gatewayId);if(!e)throw new Ze(Ye.MissingPaymentMethod);a=this._getStrategy(e)}else a=this._strategyRegistryV2.get({id:Si.NO_PAYMENT_DATA_REQUIRED});return a.execute(e,Object.assign(Object.assign({},t),{methodId:n.methodId,gatewayId:n.gatewayId})).then(()=>d(gi.ExecuteSucceeded,void 0,r))})).pipe(I(e=>je(gi.ExecuteFailed,e,r)))}}finalize(e){const{integrations:t}=null!=e?e:{};return n=>m(E(d(gi.FinalizeRequested)),this._loadOrderPaymentsIfNeeded(n,e),g(()=>{return i=this,r=void 0,s=function*(){const i=n.getState(),{providerId:r=\"\",gatewayId:o=\"\"}=i.payment.getPaymentId()||{},s=i.paymentMethods.getPaymentMethod(r,o);if(!s)throw new fi;let a;Gt(this._strategyRegistryV2,null!=t?t:[],this._paymentIntegrationService);try{a=this._getStrategy(s)}catch(e){throw new fi}return yield a.finalize(Object.assign(Object.assign({},e),{methodId:s.id,gatewayId:s.gateway})),d(gi.FinalizeSucceeded,void 0,{methodId:s.id})},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{d(s.next(e))}catch(e){t(e)}}function a(e){try{d(s.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,a)}d((s=s.apply(i,r||[])).next())});var i,r,o,s})).pipe(I(e=>{const t=n.getState().payment.getPaymentId();return je(gi.FinalizeFailed,e,{methodId:t&&t.providerId})}))}initialize(e){const{methodId:t,gatewayId:n,integrations:i}=e;return r=>g(()=>{const o=r.getState(),s=o.paymentMethods.getPaymentMethod(t,n);if(!s)throw new Ze(Ye.MissingPaymentMethod);if(t&&o.paymentStrategies.isInitialized({methodId:t,gatewayId:n}))return y();Gt(this._strategyRegistryV2,null!=i?i:[],this._paymentIntegrationService);const a=this._getStrategy(s).initialize(Object.assign(Object.assign({},e),{methodId:t,gatewayId:n}));return m(E(d(gi.InitializeRequested,void 0,{methodId:t,gatewayId:n})),a.then(()=>d(gi.InitializeSucceeded,void 0,{methodId:t,gatewayId:n})))}).pipe(I(e=>je(gi.InitializeFailed,e,{methodId:t,gatewayId:n})))}deinitialize(e){const{methodId:t,gatewayId:n}=e;return i=>g(()=>{const r=i.getState(),o=r.paymentMethods.getPaymentMethod(t,n);if(!o)throw new Ze(Ye.MissingPaymentMethod);if(t&&!r.paymentStrategies.isInitialized({methodId:t,gatewayId:n}))return y();const s=this._getStrategy(o).deinitialize(Object.assign(Object.assign({},e),{methodId:t,gatewayId:n}));return m(E(d(gi.DeinitializeRequested,void 0,{methodId:t,gatewayId:n})),s.then(()=>d(gi.DeinitializeSucceeded,void 0,{methodId:t,gatewayId:n})))}).pipe(I(e=>je(gi.DeinitializeFailed,e,{methodId:t,gatewayId:n})))}widgetInteraction(e,t){return this._paymentStrategyWidgetActionCreator.widgetInteraction(e,t)}_getStrategy(e){let t;try{t=this._strategyRegistry.getByMethod(e)}catch(n){try{t=this._strategyRegistryV2.get({id:e.id,gateway:e.gateway,type:e.type})}catch(t){throw pt().error(`[PaymentStrategyActionCreator] Unable to resolve V2 strategy for id: ${e.id}, gateway: ${e.gateway}, type: ${e.type}`),t}}return t}_loadOrderPaymentsIfNeeded(e,t){const n=e.getState().checkout.getCheckout();return n&&n.orderId?this._orderActionCreator.loadOrderPayments(n.orderId,t):y()}}class vi{isEqual(e,t){return H(this._normalize(e),this._normalize(t))}_normalize(e){return{cartAmount:e.cartAmount,currency:e.currency,id:e.id,lineItems:{digitalItems:e.lineItems.digitalItems.slice().sort((e,t)=>`${e.productId}${e.variantId}`.localeCompare(`${t.productId}${t.variantId}`)).map(e=>({extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId})),giftCertificates:e.lineItems.giftCertificates.slice().sort((e,t)=>`${e.id}`.localeCompare(`${t.id}`)).map(e=>({amount:e.amount,recipient:e.recipient})),physicalItems:e.lineItems.physicalItems.slice().sort((e,t)=>`${e.productId}${e.variantId}`.localeCompare(`${t.productId}${t.variantId}`)).map(e=>({extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId,giftWrapping:e.giftWrapping}))}}}}class Ii extends Ke{constructor(e,t){super(\"An update to your shopping cart has been detected and your available shipping costs have been updated.\"),this.name=\"CartChangedError\",this.type=\"cart_changed\",this.data={previous:e,updated:t}}}class bi{constructor(e){this._checkoutRequestSender=e}validate(e,t){if(!e)throw new Ze(Ye.MissingCheckout);return this._checkoutRequestSender.loadCheckout(e.id,t).then(t=>{const n=new vi;if(!(e.outstandingBalance===t.body.outstandingBalance&&this._compareCoupons(e.coupons,t.body.coupons)&&this._compareGiftCertificates(e.giftCertificates,t.body.giftCertificates)&&n.isEqual(e.cart,t.body.cart)))throw new Ii(this._getComparableCheckout(e),this._getComparableCheckout(t.body))})}_compareCoupons(e,t){return H(ee(e,\"code\"),ee(t,\"code\"))}_compareGiftCertificates(e,t){return H(ee(e,\"code\"),ee(t,\"code\"))}_getComparableCheckout(e){const{cart:t,coupons:n,giftCertificates:i,outstandingBalance:r}=e;return{cart:{cartAmount:t.cartAmount,currency:t.currency,lineItems:t.lineItems},coupons:n,giftCertificates:i,outstandingBalance:r}}}class Oi{constructor(e){this._namespace=e}getItem(e){const t=ve.getItem(this.withNamespace(e));if(null===t)return null;try{return JSON.parse(t)}catch(t){return this.removeItem(this.withNamespace(e)),null}}getItemOnce(e){const t=this.getItem(e);return this.removeItem(e),t}setItem(e,t){return ve.setItem(this.withNamespace(e),JSON.stringify(t))}removeItem(e){return ve.removeItem(this.withNamespace(e))}withNamespace(e){return`${this._namespace}.${e}`}}class wi extends Ke{constructor(){super(\"Please complete our human verification challenge and try again.\"),this.name=\"CardingProtectionChallengeNotCompletedError\",this.type=\"carding_protection_challenge_not_completed\"}}class Ai extends Ke{constructor(){super(\"We were not able to verify that you are not a robot. Please try again.\"),this.name=\"CardingProtectionFailedError\",this.type=\"carding_protection_failed\"}}var Pi,Ti,ki=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class Ri{constructor(e){this._googleRecaptcha=e}handle(e,t){return ki(this,void 0,void 0,function*(){return\"string\"==typeof e?this.handleWithRecaptchaSitekey(e,t):this.handleWithPaymentHumanVerificationRequestError(e)})}handleWithPaymentHumanVerificationRequestError(e){return ki(this,void 0,void 0,function*(){if(!this._isPaymentHumanVerificationRequest(e))throw e;return yield this._initialize(e.body.additional_action_required.data.key),this._performRecaptcha()})}handleWithRecaptchaSitekey(e,t){return ki(this,void 0,void 0,function*(){if(\"recaptcha_v2\"!==e)throw Error(\"Human verification method is not supported.\");if(!t)throw Error(\"Recaptcha site key is missing.\");return yield this._initialize(t),this._performRecaptcha()})}_performRecaptcha(){return this._googleRecaptcha.execute().pipe(k(1)).pipe(T(({error:e,token:t})=>ki(this,void 0,void 0,function*(){if(e instanceof Jt)throw new wi;if(e||!t)throw new Ai;return{type:\"recaptcha_v2_verification\",data:{human_verification_token:t}}}))).toPromise()}_initialize(e){const t=\"cardingProtectionContainer\";let n=document.getElementById(t);return n&&n.parentNode&&n.parentNode.removeChild(n),n=document.createElement(\"div\"),n.setAttribute(\"id\",t),document.body.appendChild(n),this._googleRecaptcha.load(t,e)}_isPaymentHumanVerificationRequest(e){const{additional_action_required:t,status:n}=e.body||{};return\"additional_action_required\"===n&&t&&\"recaptcha_v2_verification\"===t.type}}function Mi(e,t){const{body:n}=e,{errors:i=[]}=n;return new ft(e,{message:Li(i)||t,errors:i})}function Li(e){if(Array.isArray(e))return e.reduce((e,t)=>t&&t.message?[...e,t.message]:e,[]).join(\" \")}class Di extends Ke{constructor(e){super(e||\"Unable to proceed due to invalid configuration provided for the hosted payment form.\"),this.name=\"InvalidHostedFormConfigError\",this.type=\"invalid_hosted_form_config\"}}class Fi extends Ke{constructor(e){super(e||\"Unable to proceed due to an unknown error with the hosted payment form.\"),this.name=\"InvalidHostedFormError\",this.type=\"invalid_hosted_form\"}}class Ni extends Ke{constructor(e){super([\"Unable to proceed due to invalid user input values\",...x(ye(e),e=>ee(e,({message:e})=>e))].join(\". \")),this.errors=e,this.name=\"InvalidHostedFormValueError\",this.type=\"invalid_hosted_form_value\"}}!function(e){e.AttachRequested=\"HOSTED_FIELD:ATTACH_REQUESTED\",e.SubmitRequested=\"HOSTED_FIELD:SUBMITTED_REQUESTED\",e.ValidateRequested=\"HOSTED_FIELD:VALIDATE_REQUESTED\",e.StoredCardRequested=\"HOSTED_FIELD:STORED_CARD_REQUESTED\"}(Pi||(Pi={})),function(e){e.AttachSucceeded=\"HOSTED_INPUT:ATTACH_SUCCEEDED\",e.AttachFailed=\"HOSTED_INPUT:ATTACH_FAILED\",e.BinChanged=\"HOSTED_INPUT:BIN_CHANGED\",e.Blurred=\"HOSTED_INPUT:BLURRED\",e.Changed=\"HOSTED_INPUT:CHANGED\",e.CardTypeChanged=\"HOSTED_INPUT:CARD_TYPE_CHANGED\",e.Entered=\"HOSTED_INPUT:ENTERED\",e.Focused=\"HOSTED_INPUT:FOCUSED\",e.SubmitSucceeded=\"HOSTED_INPUT:SUBMIT_SUCCEEDED\",e.SubmitFailed=\"HOSTED_INPUT:SUBMIT_FAILED\",e.Validated=\"HOSTED_INPUT:VALIDATED\",e.StoredCardSucceeded=\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",e.StoredCardFailed=\"HOSTED_INPUT:STORED_CARD_FAILED\"}(Ti||(Ti={}));var xi=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class Ui{constructor(e,t,n,i,r,o,s,a,d,c){this._type=e,this._containerId=t,this._placeholder=n,this._accessibilityLabel=i,this._styles=r,this._eventPoster=o,this._eventListener=s,this._detachmentObserver=a,this._checkoutId=d,this._cardInstrument=c,this._iframe=document.createElement(\"iframe\");const u=this._checkoutId?`/checkout/payment/hosted-field?version=1.916.1&checkoutId=${this._checkoutId}`:\"/checkout/payment/hosted-field?version=1.916.1\";this._iframe.src=u,this._iframe.style.border=\"none\",this._iframe.style.height=\"100%\",this._iframe.style.overflow=\"hidden\",this._iframe.style.width=\"100%\"}getType(){return this._type}attach(){return xi(this,void 0,void 0,function*(){const e=document.getElementById(this._containerId);if(!e)throw new Di(\"Unable to proceed because the provided container ID is not valid.\");e.appendChild(this._iframe),this._eventListener.listen();const t=f(this._iframe,\"load\").pipe(T(({target:e})=>xi(this,void 0,void 0,function*(){const t=e&&e.contentWindow;if(!t)throw new Error(\"The content window of the iframe cannot be accessed.\");this._eventPoster.setTarget(t),yield this._eventPoster.post({type:Pi.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,cardInstrument:this._cardInstrument,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:Ti.AttachSucceeded,errorType:Ti.AttachFailed})})),k(1)).toPromise();yield this._detachmentObserver.ensurePresence([this._iframe],t)})}detach(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())}submitForm(e,t){return xi(this,void 0,void 0,function*(){try{const n=this._eventPoster.post({type:Pi.SubmitRequested,payload:{fields:e,data:t}},{successType:Ti.SubmitSucceeded,errorType:Ti.SubmitFailed});return yield this._detachmentObserver.ensurePresence([this._iframe],n)}catch(e){if(this._isSubmitErrorEvent(e)){if(\"hosted_form_error\"===e.payload.error.code)throw new Fi(e.payload.error.message);if(e.payload.response)throw Mi(e.payload.response);throw new Error(e.payload.error.message)}throw e}})}submitStoredCardForm(e,t){return xi(this,void 0,void 0,function*(){const n=this._eventPoster.post({type:Pi.StoredCardRequested,payload:{fields:e,data:t}},{successType:Ti.StoredCardSucceeded,errorType:Ti.StoredCardFailed});return this._detachmentObserver.ensurePresence([this._iframe],n)})}validateForm(){return xi(this,void 0,void 0,function*(){const e=this._eventPoster.post({type:Pi.ValidateRequested},{successType:Ti.Validated}),{payload:t}=yield this._detachmentObserver.ensurePresence([this._iframe],e);if(!t.isValid)throw new Ni(t.errors)})}_getFontUrls(){const e=\"fonts.googleapis.com\",t=document.querySelectorAll(`link[href*='${e}'][rel='stylesheet']`);return Array.prototype.slice.call(t).filter(t=>mn(t.href).hostname===e).filter(e=>ye(this._styles).map(e=>e&&e.fontFamily).filter(e=>\"string\"==typeof e).some(t=>t.split(/,\\s/).some(t=>-1!==e.href.indexOf(t.replace(\" \",\"+\"))))).map(e=>e.href)}_isSubmitErrorEvent(e){return e.type===Ti.SubmitFailed}}var zi,qi=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class Bi{constructor(e,t,n,i,r){this._fields=e,this._eventListener=t,this._payloadTransformer=n,this._eventCallbacks=i,this._paymentHumanVerificationHandler=r,this._handleEnter=({payload:e})=>qi(this,void 0,void 0,function*(){try{yield this.validate()}catch(e){if(e instanceof Error&&\"InvalidHostedFormValueError\"!==e.name)throw e}const{onEnter:t=ie}=this._eventCallbacks;t(e)});const{onBlur:o=ie,onCardTypeChange:s=ie,onFocus:a=ie,onValidate:d=ie}=this._eventCallbacks;this._eventListener.addListener(Ti.Blurred,({payload:e})=>o(e)),this._eventListener.addListener(Ti.CardTypeChanged,({payload:e})=>s(e)),this._eventListener.addListener(Ti.Focused,({payload:e})=>a(e)),this._eventListener.addListener(Ti.Validated,({payload:e})=>d(e)),this._eventListener.addListener(Ti.Entered,this._handleEnter),this._eventListener.addListener(Ti.CardTypeChanged,({payload:e})=>this._cardType=e.cardType),this._eventListener.addListener(Ti.BinChanged,({payload:e})=>this._bin=e.bin)}getBin(){return this._bin}getCardType(){return this._cardType}attach(){return qi(this,void 0,void 0,function*(){this._eventListener.listen();const e=this._getFirstField(),t=_e(this._fields,e);yield e.attach(),yield Promise.all(t.map(e=>e.attach()))})}detach(){this._eventListener.stopListen(),this._fields.forEach(e=>{e.detach()})}submit(e,t){return qi(this,void 0,void 0,function*(){try{return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),this._payloadTransformer.transform(e,t))}catch(t){const n=yield this._paymentHumanVerificationHandler.handle(t);return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),this._payloadTransformer.transform(e,n))}})}submitStoredCard(e){return qi(this,void 0,void 0,function*(){return this._getFirstField().submitStoredCardForm(e.fields,e.data)})}validate(){return qi(this,void 0,void 0,function*(){return this._getFirstField().validateForm()})}_getFirstField(){const e=this._fields[0];if(!e)throw new Di(\"Unable to proceed because the payment form has no field defined.\");return e}}function ji(e){return Boolean(e.instrumentId)}class Gi{constructor(e){this._store=e}transform(e,t){const n=this._store.getState(),i=n.checkout.getCheckout(),r=n.config.getConfig(),o=n.instruments.getInstrumentsMeta(),s=n.order.getOrder(),a=n.order.getOrderMeta(),d=re(e.paymentData,\"ccExpiry\",\"ccName\",\"ccNumber\",\"ccCvv\");let c=n.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId);\"worldpayaccess\"===(null==c?void 0:c.gateway)&&\"credit_card\"===(null==c?void 0:c.id)&&(c=Object.assign(Object.assign({},c),{id:\"worldpayaccess\",method:\"credit-card\"}));const u=n.paymentMethods.getPaymentMethodsMeta(),l=o&&d&&ji(d)?`${n.payment.getPaymentToken()}, ${o.vaultAccessToken}`:n.payment.getPaymentToken();if(!l)throw new Ze(Ye.MissingPaymentToken);return{additionalAction:t,authToken:l,checkout:i,config:r,order:s,orderMeta:a,payment:d,paymentMethod:c,paymentMethodMeta:u}}}class Hi{constructor(e){this._store=e}create(e,t,n){const i=Object.keys(t.fields).reduce((i,r)=>{const o=t.fields[r];return o?[...i,new Ui(r,o.containerId,o.placeholder||\"\",o.accessibilityLabel||\"\",t.styles||{},new _n(e),new qn(e),new vn(new sn),n,\"instrumentId\"in o?this._getCardInstrument(o.instrumentId):void 0)]:i},[]);return new Bi(i,new qn(e),new Gi(this._store),ae(t,\"onBlur\",\"onEnter\",\"onFocus\",\"onCardTypeChange\",\"onValidate\"),new Ri(ln(r())))}_getCardInstrument(e){const{instruments:{getCardInstrument:t}}=this._store.getState(),n=t(e);if(!n)throw new Ze(Ye.MissingPaymentInstrument);return n}}!function(e){e.SubmitPaymentRequested=\"SUBMIT_PAYMENT_REQUESTED\",e.SubmitPaymentSucceeded=\"SUBMIT_PAYMENT_SUCCEEDED\",e.SubmitPaymentFailed=\"SUBMIT_PAYMENT_FAILED\",e.InitializeOffsitePaymentRequested=\"INITIALIZE_OFFSITE_PAYMENT_REQUESTED\",e.InitializeOffsitePaymentSucceeded=\"INITIALIZE_OFFSITE_PAYMENT_SUCCEEDED\",e.InitializeOffsitePaymentFailed=\"INITIALIZE_OFFSITE_PAYMENT_FAILED\"}(zi||(zi={}));class Vi{constructor(e,t,n,i){this._paymentRequestSender=e,this._orderActionCreator=t,this._paymentRequestTransformer=n,this._paymentHumanVerificationHandler=i,this.initializeOffsitePayment=({methodId:e,gatewayId:t,instrumentId:n,target:i,promise:r,shouldSaveInstrument:o,shouldSetAsDefaultInstrument:s})=>a=>{let c;n?c={formattedPayload:{bigpay_token:n}}:o&&(c={formattedPayload:{vault_payment_instrument:o,set_as_default_stored_instrument:s||null}});const u=this._paymentRequestTransformer.transform({gatewayId:t,methodId:e,paymentData:c},a.getState());return m(E(d(zi.InitializeOffsitePaymentRequested)),Promise.race([this._paymentRequestSender.initializeOffsitePayment(u,i),r].filter(Boolean)).then(()=>d(zi.InitializeOffsitePaymentSucceeded))).pipe(I(e=>je(zi.InitializeOffsitePaymentFailed,e)))}}submitPayment(e){return t=>m(E(d(zi.SubmitPaymentRequested)),g(()=>{return n=this,i=void 0,o=function*(){try{return yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(e,t.getState()))}catch(n){const i=yield this._paymentHumanVerificationHandler.handle(n);return yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(Object.assign(Object.assign({},e),{additionalAction:i}),t.getState()))}},new((r=void 0)||(r=Promise))(function(e,t){function s(e){try{d(o.next(e))}catch(e){t(e)}}function a(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}).pipe(T(({body:e})=>m(this._orderActionCreator.loadCurrentOrder()(t),E(d(zi.SubmitPaymentSucceeded,e)))))).pipe(I(e=>je(zi.SubmitPaymentFailed,e)))}}class Yi{constructor(e){this._client=e}submitPayment(e){return new Promise((t,n)=>{this._client.submitPayment(e,(e,i)=>{e?n(this._transformResponse(e)):t(this._transformResponse(i))})})}initializeOffsitePayment(e,t){return new Promise(()=>{this._client.initializeOffsitePayment(e,null,t)})}_transformResponse(e){return{headers:e.headers,body:e.data,status:e.status,statusText:e.statusText}}}function Wi(e,t){let n;return function(e){return void 0!==e.id}(e)?n=e.id:t&&t.length&&(n=t[0].id),{id:n,firstName:e.firstName,lastName:e.lastName,company:e.company,addressLine1:e.address1,addressLine2:e.address2,city:e.city,province:e.stateOrProvince,provinceCode:e.stateOrProvinceCode,postCode:e.postalCode,country:e.country,countryCode:e.countryCode,phone:e.phone,customFields:e.customFields}}class $i{constructor(e){this._decimalPlaces=e}toInteger(e){return Math.round(e*Math.pow(10,this._decimalPlaces))}}const Ki=[\"per_item_discount\",\"percentage_discount\",\"per_total_discount\",\"shipping_discount\",\"free_shipping\"];function Zi(e){return{code:e.code,discount:e.displayName,discountType:Ki.indexOf(e.couponType)}}function Qi(e){return{code:e.code,discountedAmount:e.used,remainingBalance:e.remaining,giftCertificate:{balance:e.balance,code:e.code,purchaseDate:e.purchaseDate}}}function Ji(e){const t=[];return(e||[]).forEach(e=>{(e.banners||[]).forEach(e=>{t.push({placeholders:[],discountType:null,message:\"\",messageHtml:e.text})})}),t}function Xi(e,t,n=\"id\"){return Object.keys(e).reduce((i,r)=>[...i,...e[r].map(e=>\"giftCertificates\"===r?function(e,t){const n=new $i(t);return{id:e.id,imageUrl:\"\",name:e.name,amount:e.amount,amountAfterDiscount:e.amount,discount:0,integerAmount:n.toInteger(e.amount),integerAmountAfterDiscount:n.toInteger(e.amount),integerUnitPrice:n.toInteger(e.amount),integerUnitPriceAfterDiscount:n.toInteger(e.amount),integerDiscount:0,quantity:1,sender:e.sender,recipient:e.recipient,type:\"ItemGiftCertificateEntity\",attributes:[],variantId:null}}(e,t):function(e,t,n,i=\"id\"){const r=new $i(n);return{id:e[i],imageUrl:e.imageUrl,amount:e.extendedListPrice,amountAfterDiscount:e.extendedSalePrice,discount:e.discountAmount,integerAmount:r.toInteger(e.extendedListPrice),integerAmountAfterDiscount:r.toInteger(e.extendedSalePrice),integerDiscount:r.toInteger(e.discountAmount),integerUnitPrice:r.toInteger(e.listPrice),integerUnitPriceAfterDiscount:r.toInteger(e.salePrice),downloadsPageUrl:e.downloadPageUrl,name:e.name,quantity:e.quantity,brand:e.brand,sku:e.sku,categoryNames:e.categoryNames,variantId:e.variantId,productId:e.productId,attributes:(e.options||[]).map(e=>({name:e.name,value:e.value})),addedByPromotion:e.addedByPromotion,type:t}}(e,function(e){switch(e){case\"physicalItems\":return\"ItemPhysicalEntity\";case\"digitalItems\":return\"ItemDigitalEntity\";case\"giftCertificates\":return\"ItemGiftCertificateEntity\";default:return\"\"}}(r),t,n))],[])}function er(e){const t=e.cart.currency.decimalPlaces,n=new $i(t);return{id:e.cart.id,items:Xi(e.cart.lineItems,t),currency:e.cart.currency.code,coupon:{discountedAmount:ce(e.cart.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.cart.coupons.map(Zi)},discount:{amount:e.cart.discountAmount,integerAmount:n.toInteger(e.cart.discountAmount)},discountNotifications:Ji(e.promotions),giftCertificate:{totalDiscountedAmount:ce(e.giftCertificates,(e,t)=>e+t.used,0),appliedGiftCertificates:Q(e.giftCertificates.map(Qi),\"code\")},shipping:{amount:e.shippingCostTotal,integerAmount:n.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:n.toInteger(e.shippingCostBeforeDiscount),required:ue(e.cart.lineItems.physicalItems,e=>e.isShippingRequired)},subtotal:{amount:e.subtotal,integerAmount:n.toInteger(e.subtotal)},storeCredit:{amount:e.customer?e.customer.storeCredit:0},taxSubtotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:n.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.grandTotal,integerAmount:n.toInteger(e.grandTotal)}}}var tr;!function(e){e.APPLEPAY=\"applepay\",e.AMAZON_PAY_V2=\"amazonpay\",e.BRAINTREE_PAYPAL=\"braintreepaypal\",e.BRAINTREE_VENMO=\"braintreevenmo\",e.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",e.GOOGLEPAY_ADYENV2=\"googlepayadyenv2\",e.GOOGLEPAY_ADYENV3=\"googlepayadyenv3\",e.GOOGLEPAY_AUTHORIZENET=\"googlepayauthorizenet\",e.GOOGLEPAY_BNZ=\"googlepaybnz\",e.GOOGLEPAY_BRAINTREE=\"googlepaybraintree\",e.GOOGLEPAY_CHECKOUTCOM=\"googlepaycheckoutcom\",e.GOOGLEPAY_CYBERSOURCEV2=\"googlepaycybersourcev2\",e.GOOGLEPAY_ORBITAL=\"googlepayorbital\",e.GOOGLEPAY_STRIPE=\"googlepaystripe\",e.GOOGLEPAY_STRIPEUPE=\"googlepaystripeupe\",e.GOOGLEPAY_WORLDPAYACCESS=\"googlepayworldpayaccess\",e.PAYPALEXPRESS=\"paypalexpress\"}(tr||(tr={}));const nr=tr;function ir(e,t){const n=e.firstName||t.firstName||\"\",i=e.lastName||t.lastName||\"\";return{addresses:(e.addresses||[]).map(e=>Wi(e)),customerId:e.id,isGuest:e.isGuest,storeCredit:e.storeCredit,email:e.email||t.email||\"\",firstName:n,lastName:i,name:e.fullName||[n,i].join(\" \"),customerGroupName:e.customerGroup&&e.customerGroup.name}}class rr{format(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\")),i=t.slice(0,2),r=4===n.length?n.slice(-2):n?n.slice(0,2):t.slice(2);return e.length<2?t:e.length>3&&!r?i:`${i} / ${r}`}toObject(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\"));return/^\\d+$/.test(t)&&/^\\d+$/.test(n)?{month:1===t.length?`0${t}`:t.slice(0,2),year:2===n.length?`20${n}`:n.slice(0,4)}:{month:\"\",year:\"\"}}}class or{format(e){const{card:t}=be(e);if(!t)return e;const n=te(Ie(e).map(e=>te(e.lengths))),i=this.unformat(e).slice(0,n);return t.gaps.filter(e=>i.length>e).reduce((e,t,n)=>[e.slice(0,t+n),e.slice(t+n)].join(\" \"),i)}unformat(e){const{card:t}=be(e);return t?e.replace(new RegExp(\" \",\"g\"),\"\"):e}}function sr(e,t={}){const n=e.currency.decimalPlaces,i=new $i(n);return{id:e.orderId,items:Xi(e.lineItems,e.currency.decimalPlaces,\"productId\"),orderId:e.orderId,currency:e.currency.code,customerCanBeCreated:e.customerCanBeCreated,payment:cr(e.payments,t.payment),subtotal:{amount:e.baseAmount,integerAmount:i.toInteger(e.baseAmount)},coupon:{discountedAmount:ce(e.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.coupons.map(Zi)},discount:{amount:e.discountAmount,integerAmount:i.toInteger(e.discountAmount)},token:t.orderToken,callbackUrl:t.callbackUrl,discountNotifications:[],giftCertificate:dr(e.payments),socialData:lr(e),status:e.status,hasDigitalItems:e.hasDigitalItems,isDownloadable:e.isDownloadable,isComplete:e.isComplete,shipping:{amount:e.shippingCostTotal,integerAmount:i.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:i.toInteger(e.shippingCostBeforeDiscount)},storeCredit:{amount:ar(e.payments)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:i.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:i.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.orderAmount,integerAmount:e.orderAmountAsInteger}}}function ar(e){const t=F(e,{providerId:\"storecredit\"});return t?t.amount:0}function dr(e){const t=D(e,{providerId:\"giftcertificate\"});return{totalDiscountedAmount:ce(t,(e,t)=>t.amount+e,0),appliedGiftCertificates:Q(t.map(e=>({code:e.detail.code,discountedAmount:e.amount,remainingBalance:e.detail.remaining,giftCertificate:{balance:e.amount+e.detail.remaining,code:e.detail.code,purchaseDate:\"\"}})),\"code\")}}function cr(e,t={}){const n=F(e,ur);return n?{id:n.providerId,status:(i=n.detail.step,`PAYMENT_STATUS_${i}`),helpText:n.detail.instructions,returnUrl:t.returnUrl}:{};var i}function ur(e){return\"giftcertificate\"!==e.providerId&&\"storecredit\"!==e.providerId}function lr(e){const t={};return[...e.lineItems.physicalItems,...e.lineItems.digitalItems].forEach(e=>{var n;t[e.id]=(n=e,[\"fb\",\"tw\",\"gp\"].reduce((e,t)=>{const i=n.socialMedia&&F(n.socialMedia,e=>e.code===t);return i?(e[t]={name:n.name,description:n.name,image:n.imageUrl,url:i.link,shareText:i.text,sharingLink:i.link,channelName:i.channel,channelCode:i.code},e):e},{}))}),t}function hr(e,t){return{description:e.description,module:e.type,price:e.cost,id:e.id,selected:t,isRecommended:e.isRecommended,imageUrl:e.imageUrl,transitTime:e.transitTime}}class pr{constructor(){this._cardExpiryFormatter=new rr,this._cardNumberFormatter=new or}transform(e,t){const n=t.billingAddress.getBillingAddress(),i=t.checkout.getCheckout(),r=t.customer.getCustomer(),o=t.order.getOrder(),s=t.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId),a=this._mapShippingAddress(t,s),d=t.consignments.getConsignments(),c=t.consignments.getShippingOption(),u=t.config.getStoreConfig(),l=t.config.getContextConfig(),h=t.instruments.getInstrumentsMeta(),p=t.paymentMethods.getPaymentMethodsMeta(),m=t.order.getOrderMeta(),g=r&&n&&ir(r,n),y=h&&e.paymentData&&(ji(e.paymentData)||function(e){const t=e.formattedPayload;return!!t&&(\"string\"==typeof t.bigpay_token||Boolean(t.bigpay_token&&t.bigpay_token.token))}(e.paymentData))?`${t.payment.getPaymentToken()}, ${h.vaultAccessToken}`:t.payment.getPaymentToken();if(!y)throw new Ze(Ye.MissingPaymentToken);return{additionalAction:e.additionalAction,authToken:y,customer:g,billingAddress:n&&Wi(n),shippingAddress:a&&Wi(a,d),shippingOption:c&&hr(c,!0),cart:i&&er(i),order:o&&sr(o,m),orderMeta:m,payment:e.paymentData,paymentMethod:s&&this._transformPaymentMethod(s),quoteMeta:{request:Object.assign(Object.assign({},p),{geoCountryCode:l&&l.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:ae(u&&u.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}transformWithHostedFormData(e,t,n){const{additionalAction:i,authToken:r,checkout:o,config:s,order:a,orderMeta:d,payment:c={},paymentMethod:u,paymentMethodMeta:l}=t,h=o&&o.consignments[0],p=h&&h.shippingAddress,m=h&&h.selectedShippingOption;return{additionalAction:i,authToken:r,paymentMethod:u&&this._transformPaymentMethod(u),customer:a&&a.billingAddress&&o&&ir(o.customer,a.billingAddress),billingAddress:a&&a.billingAddress&&Wi(a.billingAddress),shippingAddress:p&&o&&Wi(p,o.consignments),shippingOption:m&&hr(m,!0),cart:o&&er(o),order:a&&sr(a,d),orderMeta:d,payment:this._transformHostedInputValues(e,c,n),quoteMeta:{request:Object.assign(Object.assign({},l),{geoCountryCode:s&&s.context.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:s&&ae(s.storeConfig.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}_transformPaymentMethod(e){if(\"multi-option\"===e.method&&!e.gateway)return Object.assign(Object.assign({},e),{gateway:e.id});if(e.initializationData&&e.initializationData.gateway)return Object.assign(Object.assign({},e),{id:e.initializationData.gateway});if(\"worldpayaccess\"===e.gateway){if(\"credit_card\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"credit-card\"});if(\"open_banking\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"open_banking\"})}return e.id===nr.BRAINTREE_VENMO?Object.assign(Object.assign({},e),{id:nr.BRAINTREE_PAYPAL}):e}_transformHostedInputValues(e,t,n){return\"instrumentId\"in t?Object.assign(Object.assign({},t),{ccCvv:e.cardCodeVerification,ccNumber:e.cardNumberVerification&&this._cardNumberFormatter.unformat(e.cardNumberVerification),hostedFormNonce:n}):Object.assign(Object.assign({},t),{ccCvv:e.cardCode,ccExpiry:this._cardExpiryFormatter.toObject(e.cardExpiry||\"\"),ccName:e.cardName||\"\",ccNumber:this._cardNumberFormatter.unformat(e.cardNumber||\"\"),hostedFormNonce:n})}_mapShippingAddress(e,t){var n,i,r,o;if(t){const s=null===(i=null===(n=t.initializationData)||void 0===n?void 0:n.bopis)||void 0===i?void 0:i.enabled,a=null===(o=null===(r=t.initializationData)||void 0===r?void 0:r.bopis)||void 0===o?void 0:o.requiredAddress,d=e.consignments.getConsignments(),c=null==d?void 0:d.every(e=>e.selectedPickupOption);if(s&&c&&\"none\"===a)return}return e.shippingAddress.getShippingAddress()}}const mr=e=>{const{type:t,initializationStrategy:n}=e;return t===Si.PPSDK&&\"string\"==typeof(null==n?void 0:n.type)};class gr extends Ft{getByMethod(e){if(!e)return this.get();const t=this._getToken(e),n=[e.gateway,e.id].filter(e=>null!=e).join(\"-\");return this.get(t,n)}_getToken(e){if(mr(e))return Si.PPSDK;if(\"klarna\"===e.gateway)return Si.KLARNAV2;const t=e.gateway||e.id;if(this._hasFactoryForMethod(t))return t;if(\"PAYMENT_TYPE_OFFLINE\"===e.type)return Si.OFFLINE;throw new Dt(`'${t}' is not registered.`)}_hasFactoryForMethod(e){return this._hasFactory(e)}}const yr=\"FINALIZE\";class _r extends Dt{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}var fr=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n};class Sr{constructor(e,t,n,i){this._store=e,this._orderActionCreator=t,this._paymentActionCreator=n,this._hostedFormFactory=i}execute(e,t){var n,i;return this._isHostedPaymentFormEnabled(null===(n=e.payment)||void 0===n?void 0:n.methodId,null===(i=e.payment)||void 0===i?void 0:i.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}finalize(e){return Promise.reject(new fi)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve(this._store.getState());const t=e&&e.creditCard&&e.creditCard.form,{config:n}=this._store.getState(),{paymentSettings:{bigpayBaseUrl:i=\"\"}={}}=n.getStoreConfig()||{};if(!t)throw new Dt;const r=this._hostedFormFactory.create(i,t);return r.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=r,this._store.getState()))}deinitialize(e){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve(this._store.getState())}_executeWithoutHostedForm(e,t){const{payment:n}=e,i=fr(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new _r([\"payment.paymentData\"]);return this._store.dispatch(this._orderActionCreator.submitOrder(i,t)).then(()=>this._store.dispatch(this._paymentActionCreator.submitPayment(Object.assign(Object.assign({},n),{paymentData:r}))))}_executeWithHostedForm(e,t){const{payment:n}=e,i=fr(e,[\"payment\"]),r=this._hostedForm;if(!r)throw new an(en.PaymentNotInitialized);if(!n||!n.methodId)throw new _r([\"payment.methodId\"]);return r.validate().then(()=>this._store.dispatch(this._orderActionCreator.submitOrder(i,t))).then(()=>r.submit(n)).then(()=>this._store.dispatch(this._orderActionCreator.loadCurrentOrder()))}_isHostedPaymentFormEnabled(e,t){if(!e)return!1;const{paymentMethods:{getPaymentMethodOrThrow:n}}=this._store.getState();return!0===n(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(e){return!ye(e&&e.creditCard&&e.creditCard.form.fields).every(Y)}}class Cr extends Sr{constructor(e,t,n,i,r){super(e,t,n,i),this._formPoster=r}execute(e,t){return super.execute(e,t).catch(e=>e instanceof ft&&ue(e.body.errors,{code:\"three_d_secure_required\"})?new Promise(()=>{this._formPoster.postForm(e.body.three_ds_result.acs_url,{PaReq:e.body.three_ds_result.payer_auth_request,TermUrl:e.body.three_ds_result.callback_url,MD:e.body.three_ds_result.merchant_data})}):Promise.reject(e))}finalize(e){const t=this._store.getState(),n=t.order.getOrder();return n&&t.payment.getPaymentStatus()===yr?this._store.dispatch(this._orderActionCreator.finalizeOrder(n.orderId,e)):Promise.reject(new fi)}}class Er extends Ke{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}const vr=\"redirecting\";class Ir{constructor(){this._isRedirecting=this.currentUrlHasRedirectingParam()}isRedirecting(){return this._isRedirecting}setRedirecting(e){e?this.setRedirectingParamOnUrl():this.removeRedirectingParamFromUrl(),this._isRedirecting=e}currentUrlHasRedirectingParam(){return vr in this.getCurrentUrl().query}getCurrentUrl(){return we(window.location.href)}replaceCurrentUrl(e){window.history.replaceState(null,\"\",e)}setRedirectingParamOnUrl(){if(this.currentUrlHasRedirectingParam())return;const e=this.getCurrentUrl(),t=Object.assign(Object.assign({},e),{query:Object.assign(Object.assign({},e.query),{[vr]:\"true\"})});this.replaceCurrentUrl(Ae(t))}removeRedirectingParamFromUrl(){this.currentUrlHasRedirectingParam()&&this.replaceCurrentUrl(Oe(window.location.href,[vr]))}}const br=se([e=>\"continue\"===z(e,\"type\")&&\"redirect\"===z(e,\"code\")&&(e=>{const t=z(e,\"form_fields\");return K(z(e,\"url\"))&&(Z(t)||W(t))})(z(e,\"parameters\")),e=>\"continue\"===z(e,\"type\")&&\"resubmit_with_human_verification\"===z(e,\"code\")&&(e=>{const t=z(e,\"available_methods\");return j(t)})(z(e,\"parameters\"))]);class Or{constructor(e,t){this._formPoster=e,this._humanVerificationHandler=t}handle(e,t){switch(e.code){case\"redirect\":return(({url:e,form_fields:t},n)=>{const i=new Ir;return i.isRedirecting()?(i.setRedirecting(!1),Promise.reject(new Er)):(i.setRedirecting(!0),t?n.postForm(e,t):window.location.assign(e),new Promise(ie))})(e.parameters,this._formPoster);case\"resubmit_with_human_verification\":return(({available_methods:e},t,n)=>{return i=void 0,r=void 0,s=function*(){if(!n)throw new Error(\"PPSDK human verification callback function is missing.\");if(!t)throw new Error(\"PPSDK human verification handler is missing.\");if(0===e.length)throw Error(\"Human verification method is missing.\");const{id:i,parameters:r}=e[0],o=yield t.handle(i,r.key);return n(o)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{d(s.next(e))}catch(e){t(e)}}function a(e){try{d(s.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,a)}d((s=s.apply(i,r||[])).next())});var i,r,o,s})(e.parameters,this._humanVerificationHandler,null==t?void 0:t.humanVerification)}}}class wr{constructor(e){this._continueHandler=e}handle(e,t){const{body:n}=e;return(e=>\"success\"===z(e,\"type\"))(n)?Promise.resolve():(e=>br(e))(n)?this._continueHandler.handle(n,null==t?void 0:t.continue):(e=>\"failure\"===z(e.body,\"type\")&&K(z(e.body,\"code\")))(e)?(e=>{return Promise.reject(new ft((t=e,Object.assign(Object.assign({},t),{body:{errors:[{code:t.body.code}]}}))));var t})(e):((e=>{z(e.body,\"type\")})(e),(e=>Promise.reject(new ft(e)))(e))}}const Ar=\"completed-payments\";class Pr{constructor(e){this._browserStorage=e}isCompleted(e){return this.getCompletedPayments().indexOf(e)>=0}setCompleted(e){const t=this.getCompletedPayments();t.push(e),this.setCompletedPayments(t)}getCompletedPayments(){return this._browserStorage.getItem(Ar)||[]}setCompletedPayments(e){this._browserStorage.setItem(Ar,e)}}var Tr,kr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class Rr{constructor(e,t,n,i,r){this._store=e,this._orderActionCreator=t,this._subStrategyRegistry=n,this._paymentResumer=i,this._completedPayments=new Pr(r)}execute(e,t){var n;return kr(this,void 0,void 0,function*(){const{bigpayBaseUrl:i}=this._store.getState().config.getStoreConfigOrThrow().paymentSettings;if(!(null==t?void 0:t.methodId))throw new Dt('Unable to submit payment because \"options.methodId\" argument is not provided.');const{methodId:r}=t,{payment:o}=e,s=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{_subStrategy:a}=this;if(!a)throw new an(en.PaymentNotInitialized);yield this._store.dispatch(this._orderActionCreator.submitOrder(s,t));const d=null===(n=this._store.getState().order.getOrderMeta())||void 0===n?void 0:n.token;if(!d)throw new Ze(Ye.MissingOrder);return yield a.execute({methodId:r,payment:o,bigpayBaseUrl:i,token:d}),this._store.getState()})}finalize(e){return kr(this,void 0,void 0,function*(){const t=this._store.getState().order.getOrderOrThrow();if(t.isComplete)return this._store.getState();const{bigpayBaseUrl:n}=this._store.getState().config.getStoreConfigOrThrow().paymentSettings;if(!(null==e?void 0:e.methodId))throw new Dt('Unable to submit payment because \"options.methodId\" argument is not provided.');const i=this._store.getState().order.getPaymentId(e.methodId);if(!i||!t||this._completedPayments.isCompleted(i))throw new fi;const{orderId:r}=t;return yield this._paymentResumer.resume({paymentId:i,bigpayBaseUrl:n,orderId:r}).catch(e=>{throw this._completedPayments.setCompleted(i),e}),this._store.getState()})}initialize(e){return kr(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new Dt('Unable to submit payment because \"options.methodId\" argument is not provided.');const t=((e,t)=>{const n=e.getState().paymentMethods.getPaymentMethod(t);if(n&&mr(n))return n})(this._store,e.methodId);if(!t)throw new an(en.PaymentNotInitialized);if(this._subStrategy=this._subStrategyRegistry.getByMethod(t),!this._subStrategy)throw new an(en.PaymentNotInitialized);return yield this._subStrategy.initialize(e),this._store.getState()})}deinitialize(e){var t;return kr(this,void 0,void 0,function*(){return null===(t=this._subStrategy)||void 0===t||t.deinitialize(),this._store.getState()})}}!function(e){e.CARD=\"card_ui\",e.NONE=\"none\",e.UNSUPPORTED=\"unsupported\"}(Tr||(Tr={}));const Mr=R([[e=>\"card_ui\"===e.type,M(Tr.CARD)],[e=>\"none\"===e.type,M(Tr.NONE)],[le,M(Tr.UNSUPPORTED)]]);class Lr extends Ft{getByMethod(e){const t=Mr(e.initializationStrategy);return this.get(t)}}var Dr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class Fr{constructor(e,t,n,i){this._store=e,this._orderActionCreator=t,this._hostedFormFactory=n,this._ppsdkStepHandler=i}execute(e){return Dr(this,void 0,void 0,function*(){const t=this._hostedForm;if(!t)throw new an(en.PaymentNotInitialized);const{additionalAction:n,payment:i}=e;if(!i||!i.methodId)throw new _r([\"payment.methodId\"]);yield t.validate();const{payload:r}=yield t.submit(i,n),{response:o}=r;yield this._ppsdkStepHandler.handle(o,{continue:{humanVerification:t=>Dr(this,void 0,void 0,function*(){return this.execute(Object.assign({additionalAction:t},e))})}}),yield this._store.dispatch(this._orderActionCreator.loadCurrentOrder())})}initialize(e){return Dr(this,void 0,void 0,function*(){const t=e&&e.creditCard&&e.creditCard.form,{config:n,checkout:i}=this._store.getState(),{paymentSettings:{bigpayBaseUrl:r=\"\"}={}}=n.getStoreConfig()||{},o=i.getCheckoutOrThrow().id;if(!t)throw new Dt;const s=t&&this._hostedFormFactory.create(r,t,o);yield s.attach(),this._hostedForm=s})}deinitialize(){this._hostedForm&&this._hostedForm.detach()}}class Nr{constructor(e,t){this._requestSender=e,this._stepHandler=t}execute({methodId:e,bigpayBaseUrl:t,token:n}){const i={credentials:!1,body:{payment_method_id:e},headers:{authorization:n,\"X-XSRF-TOKEN\":null}};return this._requestSender.post(`${t}/payments`,i).then(e=>this._stepHandler.handle(e))}initialize(){return Promise.resolve()}deinitialize(){}}var xr,Ur,zr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class qr{constructor(e,t){this._requestSender=e,this._stepHandler=t}resume({paymentId:e,bigpayBaseUrl:t,orderId:n}){return zr(this,void 0,void 0,function*(){const i={credentials:!1,headers:{authorization:yield this._getToken(n).catch(()=>{throw new fi}),\"X-XSRF-TOKEN\":null}};return this._requestSender.get(`${t}/payments/${e}`,i).then(e=>this._stepHandler.handle(e))})}_getToken(e){return zr(this,void 0,void 0,function*(){const t={params:{order_id:e}};return this._requestSender.get(\"/api/storefront/payments/auth-token\",t).then(({body:e})=>e.auth_token)})}}class Br{constructor(e){this._requestSender=e}createBuyNowCart(e,{timeout:t}={}){const n=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.post(\"/api/storefront/carts\",{body:e,headers:n,timeout:t})}}!function(e){e.UpdatePaymentProviderCustomer=\"UPDATE_PAYMENT_PROVIDER_CUSTOMER\"}(xr||(xr={}));class jr{updatePaymentProviderCustomer(e){return E(d(xr.UpdatePaymentProviderCustomer,e))}}!function(e){e.ForgetCheckoutRemoteCustomerRequested=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_REQUESTED\",e.ForgetCheckoutRemoteCustomerSucceeded=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_SUCCEEDED\",e.ForgetCheckoutRemoteCustomerFailed=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_FAILED\",e.InitializeRemoteBillingRequested=\"INITIALIZE_REMOTE_BILLING_REQUESTED\",e.InitializeRemoteBillingSucceeded=\"INITIALIZE_REMOTE_BILLING_SUCCEEDED\",e.InitializeRemoteBillingFailed=\"INITIALIZE_REMOTE_BILLING_FAILED\",e.InitializeRemoteShippingRequested=\"INITIALIZE_REMOTE_SHIPPING_REQUESTED\",e.InitializeRemoteShippingSucceeded=\"INITIALIZE_REMOTE_SHIPPING_SUCCEEDED\",e.InitializeRemoteShippingFailed=\"INITIALIZE_REMOTE_SHIPPING_FAILED\",e.InitializeRemotePaymentRequested=\"INITIALIZE_REMOTE_PAYMENT_REQUESTED\",e.InitializeRemotePaymentSucceeded=\"INITIALIZE_REMOTE_PAYMENT_SUCCEEDED\",e.InitializeRemotePaymentFailed=\"INITIALIZE_REMOTE_PAYMENT_FAILED\",e.LoadRemoteSettingsRequested=\"LOAD_REMOTE_SETTINGS_REQUESTED\",e.LoadRemoteSettingsSucceeded=\"LOAD_REMOTE_SETTINGS_SUCCEEDED\",e.LoadRemoteSettingsFailed=\"LOAD_REMOTE_SETTINGS_FAILED\",e.SignOutRemoteCustomerRequested=\"SIGN_OUT_REMOTE_CUSTOMER_REQUESTED\",e.SignOutRemoteCustomerSucceeded=\"SIGN_OUT_REMOTE_CUSTOMER_SUCCEEDED\",e.SignOutRemoteCustomerFailed=\"SIGN_OUT_REMOTE_CUSTOMER_FAILED\",e.UpdateRemoteCheckout=\"UPDATE_REMOTE_CHECKOUT\"}(Ur||(Ur={}));var Gr;class Hr{constructor(e,t){this._remoteCheckoutRequestSender=e,this._checkoutActionCreator=t}initializeBilling(e,t,n){return h.create(i=>{i.next(d(Ur.InitializeRemoteBillingRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializeBilling(e,t,n).then(({body:t={}})=>{i.next(d(Ur.InitializeRemoteBillingSucceeded,t,{methodId:e})),i.complete()}).catch(t=>{i.error(u(Ur.InitializeRemoteBillingFailed,t,{methodId:e}))})})}initializeShipping(e,t,n){return h.create(i=>{i.next(d(Ur.InitializeRemoteShippingRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializeShipping(e,t,n).then(({body:t={}})=>{i.next(d(Ur.InitializeRemoteShippingSucceeded,t,{methodId:e})),i.complete()}).catch(t=>{i.error(u(Ur.InitializeRemoteShippingFailed,t,{methodId:e}))})})}initializePayment(e,t,n){return h.create(i=>{i.next(d(Ur.InitializeRemotePaymentRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializePayment(e,t,n).then(({body:t={}})=>{i.next(d(Ur.InitializeRemotePaymentSucceeded,t,{methodId:e})),i.complete()}).catch(t=>{i.error(u(Ur.InitializeRemotePaymentFailed,t,{methodId:e}))})})}loadSettings(e,t){return h.create(n=>{n.next(d(Ur.LoadRemoteSettingsRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.loadSettings(e,t).then(({body:t})=>{n.next(d(Ur.LoadRemoteSettingsSucceeded,t,{methodId:e})),n.complete()}).catch(t=>{n.error(u(Ur.LoadRemoteSettingsFailed,t,{methodId:e}))})})}signOut(e,t){return h.create(n=>{n.next(d(Ur.SignOutRemoteCustomerRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.signOut(e,t).then(()=>{n.next(d(Ur.SignOutRemoteCustomerSucceeded,void 0,{methodId:e})),n.complete()}).catch(t=>{n.error(u(Ur.SignOutRemoteCustomerFailed,t,{methodId:e}))})})}forgetCheckout(e,t){return m(E(d(Ur.ForgetCheckoutRemoteCustomerRequested,void 0,{methodId:e})),g(()=>{return n=this,i=void 0,o=function*(){return yield this._remoteCheckoutRequestSender.forgetCheckout(t),yield this._checkoutActionCreator.loadCurrentCheckout(),d(Ur.ForgetCheckoutRemoteCustomerSucceeded,void 0,{methodId:e})},new((r=void 0)||(r=Promise))(function(e,t){function s(e){try{d(o.next(e))}catch(e){t(e)}}function a(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}d((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe(I(t=>je(Ur.ForgetCheckoutRemoteCustomerFailed,t,{methodId:e})))}updateCheckout(e,t){return d(Ur.UpdateRemoteCheckout,t,{methodId:e})}}class Vr{constructor(e){this._requestSender=e}initializeBilling(e,t,{timeout:n}={}){const i=`/remote-checkout/${e}/billing`;return this._requestSender.get(i,{params:t,timeout:n,headers:Ve})}initializeShipping(e,t,{timeout:n}={}){const i=`/remote-checkout/${e}/shipping`;return this._requestSender.get(i,{params:t,timeout:n,headers:Ve})}initializePayment(e,t,{timeout:n}={}){const i=`/remote-checkout/${e}/payment`;return this._requestSender.get(i,{params:t,timeout:n,headers:Ve})}loadSettings(e,{timeout:t}={}){const n=`/remote-checkout/${e}/settings`;return this._requestSender.get(n,{timeout:t,headers:Ve})}signOut(e,{timeout:t}={}){const n=`/remote-checkout/${e}/signout`;return this._requestSender.get(n,{timeout:t,headers:Ve})}generateToken({timeout:e}={}){return this._requestSender.get(\"/remote-checkout-token\",{timeout:e,headers:Ve})}trackAuthorizationEvent({timeout:e}={}){return this._requestSender.post(\"/remote-checkout/events/shopper-checkout-service-provider-authorization-requested\",{timeout:e,headers:Ve})}forgetCheckout({timeout:e}={}){return this._requestSender.post(\"/remote-checkout/forget-checkout\",{timeout:e,headers:Ve})}}!function(e){e.CreateConsignmentsRequested=\"CREATE_CONSIGNMENTS_REQUESTED\",e.CreateConsignmentsSucceeded=\"CREATE_CONSIGNMENTS_SUCCEEDED\",e.CreateConsignmentsFailed=\"CREATE_CONSIGNMENTS_FAILED\",e.UpdateConsignmentRequested=\"UPDATE_CONSIGNMENT_REQUESTED\",e.UpdateConsignmentSucceeded=\"UPDATE_CONSIGNMENT_SUCCEEDED\",e.UpdateConsignmentFailed=\"UPDATE_CONSIGNMENT_FAILED\",e.DeleteConsignmentRequested=\"DELETE_CONSIGNMENT_REQUESTED\",e.DeleteConsignmentSucceeded=\"DELETE_CONSIGNMENT_SUCCEEDED\",e.DeleteConsignmentFailed=\"DELETE_CONSIGNMENT_FAILED\",e.UpdateShippingOptionRequested=\"UPDATE_SHIPPING_OPTION_REQUESTED\",e.UpdateShippingOptionSucceeded=\"UPDATE_SHIPPING_OPTION_SUCCEEDED\",e.UpdateShippingOptionFailed=\"UPDATE_SHIPPING_OPTION_FAILED\",e.LoadShippingOptionsRequested=\"LOAD_SHIPPING_OPTIONS_REQUESTED\",e.LoadShippingOptionsSucceeded=\"LOAD_SHIPPING_OPTIONS_SUCCEEDED\",e.LoadShippingOptionsFailed=\"LOAD_SHIPPING_OPTIONS_FAILED\"}(Gr||(Gr={}));class Yr{constructor(e,t){this._consignmentRequestSender=e,this._checkoutRequestSender=t}unassignItemsByAddress(e,t){return n=>{const i=n.getState();if(!i.checkout.getCheckout())throw new Ze(Ye.MissingCheckout);const r=this._consignmentHasAddress(e)?e.address:e.shippingAddress,o=i.consignments.getConsignmentByAddress(r);if(!o)throw new Dt(\"No consignment found for the specified address\");const s=this._removeLineItems(e.lineItems,o,i.cart.getCart());return s.length?this.updateConsignment({id:o.id,address:r,lineItems:s},t)(n):this.deleteConsignment(o.id,t)(n)}}assignItemsByAddress(e,t){return n=>{const i=n.getState(),r=this._consignmentHasAddress(e)?e.address:e.shippingAddress,o=i.consignments.getConsignmentByAddress(r);return this._createOrUpdateConsignment({id:o&&o.id,address:r,lineItems:this._addLineItems(e.lineItems,o,i.cart.getCart())},t)(n)}}selectShippingOption(e,t){return n=>h.create(i=>{const r=n.getState(),o=r.checkout.getCheckout(),s=r.consignments.getConsignments();if(!o)throw new Ze(Ye.MissingCheckout);if(!s||!s.length)throw new Ze(Ye.MissingConsignments);const a={id:s[0].id,shippingOptionId:e},c={id:s[0].id};i.next(d(Gr.UpdateShippingOptionRequested,void 0,c)),this._consignmentRequestSender.updateConsignment(o.id,a,t).then(({body:e})=>{i.next(d(Gr.UpdateShippingOptionSucceeded,e,c)),i.complete()}).catch(e=>{i.error(u(Gr.UpdateShippingOptionFailed,e,c))})})}loadShippingOptions(e){return t=>h.create(n=>{const i=t.getState().checkout.getCheckout();if(!i)throw new Ze(Ye.MissingCheckout);n.next(d(Gr.LoadShippingOptionsRequested)),this._checkoutRequestSender.loadCheckout(i.id,Object.assign(Object.assign({},e),{params:{include:[Ot.AvailableShippingOptions]}})).then(({body:e})=>{n.next(d(Gr.LoadShippingOptionsSucceeded,e)),n.complete()}).catch(e=>{n.error(u(Gr.LoadShippingOptionsFailed,e))})})}updateAddress(e,t){return n=>{const i=this._getUpdateAddressRequestBody(e,n),r=n.getState().consignments.getConsignments();return r&&r.length&&(i.id=r[0].id),this._createOrUpdateConsignment(i,t)(n)}}createConsignments(e,t){return n=>h.create(i=>{const r=n.getState().checkout.getCheckout();if(!r||!r.id)throw new Ze(Ye.MissingCheckout);i.next(d(Gr.CreateConsignmentsRequested)),this._consignmentRequestSender.createConsignments(r.id,e,t).then(({body:e})=>{i.next(d(Gr.CreateConsignmentsSucceeded,e)),i.complete()}).catch(e=>{i.error(u(Gr.CreateConsignmentsFailed,e))})})}updateConsignment(e,t){return n=>h.create(i=>{const r=n.getState().checkout.getCheckout();if(!r||!r.id)throw new Ze(Ye.MissingCheckout);const o={id:e.id};i.next(d(Gr.UpdateConsignmentRequested,void 0,o)),this._consignmentRequestSender.updateConsignment(r.id,e,t).then(({body:e})=>{i.next(d(Gr.UpdateConsignmentSucceeded,e,o)),i.complete()}).catch(e=>{i.error(u(Gr.UpdateConsignmentFailed,e,o))})})}deleteConsignment(e,t){return n=>h.create(i=>{const r=n.getState().checkout.getCheckout(),o={id:e};if(!r||!r.id)throw new Ze(Ye.MissingCheckout);i.next(d(Gr.DeleteConsignmentRequested,void 0,o)),this._consignmentRequestSender.deleteConsignment(r.id,e,t).then(({body:e})=>{i.next(d(Gr.DeleteConsignmentSucceeded,e,o)),i.complete()}).catch(e=>{i.error(u(Gr.DeleteConsignmentFailed,e,o))})})}updateShippingOption(e,t){return n=>h.create(i=>{var r;const o=n.getState().checkout.getCheckout(),s=n.getState().consignments.getConsignmentById(e.id);if((null===(r=null==s?void 0:s.selectedShippingOption)||void 0===r?void 0:r.id)===e.shippingOptionId)return void i.complete();if(!o||!o.id)throw new Ze(Ye.MissingCheckout);const a={id:e.id};i.next(d(Gr.UpdateShippingOptionRequested,void 0,a)),this._consignmentRequestSender.updateConsignment(o.id,e,t).then(({body:e})=>{i.next(d(Gr.UpdateShippingOptionSucceeded,e,a)),i.complete()}).catch(e=>{i.error(u(Gr.UpdateShippingOptionFailed,e,a))})})}_createOrUpdateConsignment(e,t){return n=>{const i=n.getState().checkout.getCheckout();if(!i||!i.id)throw new Ze(Ye.MissingCheckout);return this._isUpdateConsignmentRequest(e)?this.updateConsignment(e,t)(n):this.createConsignments([e],t)(n)}}_getUpdateAddressRequestBody(e,t){const n=t.getState().cart.getCart();if(!n)throw new Ze(Ye.MissingCart);const{physicalItems:i,customItems:r=[]}=n.lineItems;return{address:e,lineItems:[...i,...r].map(e=>({itemId:e.id,quantity:e.quantity}))}}_removeLineItems(e,t,n){if(!n)throw new Ze(Ye.MissingCart);return this._hydrateLineItems(t.lineItemIds,n).map(t=>{const n=F(e,e=>e.itemId===t.itemId);return Object.assign(Object.assign({},t),{quantity:n?t.quantity-n.quantity:t.quantity})}).filter(e=>e.quantity>0)}_addLineItems(e,t,n){if(!t)return e;if(!n)throw new Ze(Ye.MissingCart);return e.concat(this._hydrateLineItems(t.lineItemIds,n)).filter(e=>e.quantity>0)}_hydrateLineItems(e,t){return e.map(e=>{const n=F(t.lineItems.physicalItems,t=>t.id===e);return{itemId:e,quantity:n?n.quantity:0}})}_isUpdateConsignmentRequest(e){return!!e.id}_consignmentHasAddress(e){return\"object\"==typeof e&&\"address\"in e}}const Wr=[\"consignments.availableShippingOptions\",\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"promotions.banners\"];class $r{constructor(e){this._requestSender=e}createConsignments(e,t,{timeout:n,params:{include:i}={}}={}){const r=`/api/storefront/checkouts/${e}/consignments`,o=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.post(r,{body:t,params:{include:Vt(Wr,i)},headers:o,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new et;throw e})}updateConsignment(e,t,{timeout:n,params:{include:i}={}}={}){const{id:r}=t,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"id\"]),s=`/api/storefront/checkouts/${e}/consignments/${r}`,a=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.put(s,{body:o,params:{include:Vt(Wr,i)},headers:a,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new et;throw e})}deleteConsignment(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/consignments/${t}`,r=Object.assign({Accept:tt.JsonV1},Ve),o=Tt(Wr);return this._requestSender.delete(i,{params:{include:o},headers:r,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new et;throw e})}}var Kr,Zr;!function(e){e.LoadShippingCountriesRequested=\"LOAD_SHIPPING_COUNTRIES_REQUESTED\",e.LoadShippingCountriesSucceeded=\"LOAD_SHIPPING_COUNTRIES_SUCCEEDED\",e.LoadShippingCountriesFailed=\"LOAD_SHIPPING_COUNTRIES_FAILED\"}(Kr||(Kr={}));class Qr{constructor(e,t){this._shippingCountryRequestSender=e,this._store=t}loadCountries(e){const{checkout:t}=this._store.getState(),n=t.getCheckout(),i=n?n.channelId:null;return h.create(t=>{t.next(d(Kr.LoadShippingCountriesRequested)),this._shippingCountryRequestSender.loadCountries(i,e).then(e=>{t.next(d(Kr.LoadShippingCountriesSucceeded,e.body.data)),t.complete()}).catch(e=>{t.error(u(Kr.LoadShippingCountriesFailed,e))})})}}class Jr{constructor(e,t){this._requestSender=e,this._config=t}loadCountries(e,{timeout:t}={}){const n=\"/internalapi/v1/shipping/countries\"+(e?`?channel_id=${e}`:\"\"),i=Object.assign({\"Accept-Language\":this._config.locale},Ve);return this._requestSender.get(n,{headers:i,timeout:t})}}!function(e){e.ApplyStoreCreditRequested=\"APPLY_STORE_CREDIT_REQUESTED\",e.ApplyStoreCreditSucceeded=\"APPLY_STORE_CREDIT_SUCCEEDED\",e.ApplyStoreCreditFailed=\"APPLY_STORE_CREDIT_FAILED\"}(Zr||(Zr={}));var Xr;class eo{constructor(e){this._storeCreditRequestSender=e}applyStoreCredit(e,t){return n=>m(E(d(Zr.ApplyStoreCreditRequested)),g(()=>{return i=this,r=void 0,s=function*(){var i;const r=n.getState().checkout.getCheckout();if(!r)throw new Ze(Ye.MissingCheckout);const{id:o}=r,s=null!==(i=null==t?void 0:t.version)&&void 0!==i?i:r.version,{body:a}=yield e?this._storeCreditRequestSender.applyStoreCredit(o,Object.assign(Object.assign({},t),{version:s})):this._storeCreditRequestSender.removeStoreCredit(o,Object.assign(Object.assign({},t),{version:s}));return d(Zr.ApplyStoreCreditSucceeded,a)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{d(s.next(e))}catch(e){t(e)}}function a(e){try{d(s.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,a)}d((s=s.apply(i,r||[])).next())});var i,r,o,s})).pipe(I(e=>je(Zr.ApplyStoreCreditFailed,e)))}}class to{constructor(e){this._requestSender=e}applyStoreCredit(e,{timeout:t,version:n}={}){const i=`/api/storefront/checkouts/${e}/store-credit`,r=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.post(i,{headers:r,timeout:t,params:{include:Tt(bt)},body:{version:n}})}removeStoreCredit(e,{timeout:t,version:n}={}){const i=`/api/storefront/checkouts/${e}/store-credit`,r=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.delete(i,{headers:r,timeout:t,params:{include:Tt(bt)},body:{version:n}})}}!function(e){e.UpdateSubscriptionsRequested=\"UPDATE_SUBSCRIPTIONS_REQUESTED\",e.UpdateSubscriptionsSucceeded=\"UPDATE_SUBSCRIPTIONS_SUCCEEDED\",e.UpdateSubscriptionsFailed=\"UPDATE_SUBSCRIPTIONS_FAILED\"}(Xr||(Xr={}));class no extends ft{constructor(e){super(e),this.name=\"UpdateSubscriptionsError\",this.type=\"update_subscriptions\"}}class io{constructor(e){this._subscriptionsRequestSender=e}updateSubscriptions(e,t){return m(E(d(Xr.UpdateSubscriptionsRequested)),g(()=>{return n=this,i=void 0,o=function*(){const{body:n}=yield this._subscriptionsRequestSender.updateSubscriptions(e,t);return d(Xr.UpdateSubscriptionsSucceeded,n)},new((r=void 0)||(r=Promise))(function(e,t){function s(e){try{d(o.next(e))}catch(e){t(e)}}function a(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}d((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe(I(e=>je(Xr.UpdateSubscriptionsFailed,new no(e))))}}class ro{constructor(e){this._requestSender=e}updateSubscriptions(e,{timeout:t}={}){const n=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.post(\"/api/storefront/subscriptions\",{body:e,headers:n,timeout:t})}}function oo(e){return $(e)}const so=ne(e=>Array.isArray(e)?e.map(e=>ao(e)):oo(e)?Object.keys(e).reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:ao(e[n])}),{}):e);so.cache=new WeakMap;const ao=e=>\"object\"==typeof e&&null!==e?so(e):e;function co(e){return(...t)=>ao(e(...t))}function uo({billingAddress:{getBillingAddress:e,getBillingAddressOrThrow:t},cart:{getCart:n,getCartOrThrow:i,getLocale:r},checkout:{getCheckout:o,getCheckoutOrThrow:s,getOutstandingBalance:a},config:{getContextConfig:d,getHost:c,getLocale:u,getStoreConfig:l,getStoreConfigOrThrow:h,getConfig:p},consignments:{getConsignments:m,getConsignmentsOrThrow:g},countries:{getCountries:y},customer:{getCustomer:_,getCustomerOrThrow:f},instruments:{getCardInstrument:S,getCardInstrumentOrThrow:C,getInstruments:E,getInstrumentsMeta:v},order:{getOrder:I,getOrderOrThrow:b,getOrderMeta:O},payment:{getPaymentToken:w,getPaymentTokenOrThrow:A,getPaymentId:P,getPaymentIdOrThrow:T,getPaymentStatus:k,getPaymentStatusOrThrow:R,getPaymentRedirectUrl:M,getPaymentRedirectUrlOrThrow:L,isPaymentDataRequired:D},paymentMethods:{getPaymentMethod:F,getPaymentMethodOrThrow:N,getPaymentMethodsMeta:x},paymentProviderCustomer:{getPaymentProviderCustomer:U,getPaymentProviderCustomerOrThrow:z},paymentStrategies:{isInitialized:q},shippingAddress:{getShippingAddress:B,getShippingAddressOrThrow:j,getShippingAddresses:G,getShippingAddressesOrThrow:H},shippingCountries:{getShippingCountries:V}}){return{getHost:co(c),getLocale:co(u),getCartLocale:co(r),getBillingAddress:co(e),getBillingAddressOrThrow:co(t),getCart:co(n),getCartOrThrow:co(i),getCheckout:co(o),getCheckoutOrThrow:co(s),getCountries:co(y),getStoreConfig:co(l),getStoreConfigOrThrow:co(h),getConfig:co(p),getConsignments:co(m),getConsignmentsOrThrow:co(g),getContextConfig:co(d),getCustomer:co(_),getCustomerOrThrow:co(f),getCardInstrument:co(S),getInstruments:co(E),getCardInstrumentOrThrow:co(C),getOrder:co(I),getOrderOrThrow:co(b),getOrderMeta:co(O),getInstrumentsMeta:co(v),getPaymentToken:w,getPaymentTokenOrThrow:A,getPaymentId:P,getPaymentIdOrThrow:T,getPaymentStatus:k,getPaymentStatusOrThrow:R,getPaymentRedirectUrl:M,getPaymentRedirectUrlOrThrow:L,getPaymentMethod:co(F),getPaymentMethodOrThrow:co(N),getPaymentMethodsMeta:co(x),getPaymentProviderCustomer:co(U),getPaymentProviderCustomerOrThrow:co(z),getShippingAddress:co(B),getShippingAddressOrThrow:co(j),getShippingAddresses:co(G),getShippingAddressesOrThrow:co(H),getShippingCountries:co(V),getOutstandingBalance:co(a),isPaymentDataRequired:D,isPaymentMethodInitialized:q}}var lo,ho=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class po{constructor(e,t,n,i,r,o,s,a,d,c,u,l,h,p,m,g,y,_,f,S){this._store=e,this._storeProjectionFactory=t,this._checkoutActionCreator=n,this._checkoutValidator=i,this._hostedFormFactory=r,this._orderActionCreator=o,this._billingAddressActionCreator=s,this._consignmentActionCreator=a,this._paymentMethodActionCreator=d,this._paymentActionCreator=c,this._paymentHumanVerificationHandler=u,this._customerActionCreator=l,this._cartRequestSender=h,this._storeCreditActionCreator=p,this._couponActionCreator=m,this._spamProtectionActionCreator=g,this._paymentProviderCustomerActionCreator=y,this._shippingCountryActionCreator=_,this._remoteCheckoutActionCreator=f,this._paymentStrategyWidgetActionCreator=S,this._storeProjection=this._storeProjectionFactory.create(this._store)}createHostedForm(e,t){const n=this._storeProjection.getState().getCheckoutOrThrow().id;return this._hostedFormFactory.create(e,t,n)}subscribe(e,...t){return this._storeProjection.subscribe(e,...t)}getState(){return this._storeProjection.getState()}initializeOffsitePayment(e){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentActionCreator.initializeOffsitePayment(e)),this._storeProjection.getState()})}loadCheckout(e){return ho(this,void 0,void 0,function*(){return e?yield this._store.dispatch(this._checkoutActionCreator.loadCheckout(e)):yield this._store.dispatch(this._checkoutActionCreator.loadCurrentCheckout()),this._storeProjection.getState()})}loadDefaultCheckout(){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()),this._storeProjection.getState()})}loadPaymentMethod(e,t){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e,t)),this._storeProjection.getState()})}loadPaymentMethods(e){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethods(e)),this._storeProjection.getState()})}submitOrder(e,t){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._orderActionCreator.submitOrder(e,t)),this._storeProjection.getState()})}submitPayment(e){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentActionCreator.submitPayment(e)),this._storeProjection.getState()})}finalizeOrder(e){return ho(this,void 0,void 0,function*(){const{order:{getOrderOrThrow:t}}=this._store.getState();return yield this._store.dispatch(this._orderActionCreator.finalizeOrder(t().orderId,e)),this._storeProjection.getState()})}updateBillingAddress(e){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(e)),this._storeProjection.getState()})}updateShippingAddress(e){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.updateAddress(e)),this._storeProjection.getState()})}selectShippingOption(e,t){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t)),this._storeProjection.getState()})}signInCustomer(e,t){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._customerActionCreator.signInCustomer(e,t)),this._storeProjection.getState()})}signOutCustomer(e){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._customerActionCreator.signOutCustomer(e)),this._storeProjection.getState()})}createBuyNowCart(e,t){return ho(this,void 0,void 0,function*(){const{body:n}=yield this._cartRequestSender.createBuyNowCart(e,t);return n})}applyStoreCredit(e,t){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._storeCreditActionCreator.applyStoreCredit(e,t)),this._storeProjection.getState()})}applyCoupon(e,t){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._couponActionCreator.applyCoupon(e,t)),this._storeProjection.getState()})}removeCoupon(e,t){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._couponActionCreator.removeCoupon(e,t)),this._storeProjection.getState()})}verifyCheckoutSpamProtection(){return ho(this,void 0,void 0,function*(){const{checkout:e}=this._store.getState(),{shouldExecuteSpamCheck:t}=e.getCheckoutOrThrow();return t&&(yield this._store.dispatch(this._spamProtectionActionCreator.verifyCheckoutSpamProtection())),this._storeProjection.getState()})}loadCurrentOrder(e){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._orderActionCreator.loadCurrentOrder(e)),this._storeProjection.getState()})}updatePaymentProviderCustomer(e){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(e)),this._storeProjection.getState()})}loadShippingCountries(e){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._shippingCountryActionCreator.loadCountries(e)),this._storeProjection.getState()})}deleteConsignment(e,t){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.deleteConsignment(e,t)),this._storeProjection.getState()})}initializePayment(e,t,n){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.initializePayment(e,t,n)),this._storeProjection.getState()})}forgetCheckout(e,t){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.forgetCheckout(e,t)),this._storeProjection.getState()})}remoteCheckoutSignOut(e,t){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.signOut(e,t)),this._storeProjection.getState()})}validateCheckout(e,t){return ho(this,void 0,void 0,function*(){yield this._checkoutValidator.validate(e,t)})}handlePaymentHumanVerification(e,t){return ho(this,void 0,void 0,function*(){return\"string\"==typeof e?this._paymentHumanVerificationHandler.handle(e,null!=t?t:\"\"):this._paymentHumanVerificationHandler.handle(e)})}widgetInteraction(e){return ho(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentStrategyWidgetActionCreator.widgetInteraction(e),{queueId:\"widgetInteraction\"}),this._storeProjection.getState()})}}class mo{constructor(e){this._transformSelectors=e}create(e){return st(e,this._transformSelectors)}}function go(e,t){const{config:{getHost:i,getLocale:o}}=e.getState();t||(t=n({host:i()}));const s=new mo(uo),a=new $t(new Yt(t),new yt(new Et(t)),new Zt(new Qt(t))),d=new bi(new Yt(t)),c=new Hi(e),u=new ai(new oi(t),new bi(new Yt(t))),l=new Xe(new it(t),new io(new ro(t))),h=new Yr(new $r(t),new Yt(t)),p=new pi(new mi(t),new _i(t)),m=new Vi(new Yi(di(e)),u,new pr,new Ri(ln(r()))),g=new Ri(ln(r())),y=new Bt(new jt(t),a,new on(ln(r()),new hn(t))),_=new eo(new to(t)),f=new It(new kt(t)),S=ln(r()),C=new hn(t),E=new on(S,C),v=new Br(t),I=new jr,b=new Qr(new Jr(t,{locale:o()}),e),O=new Hr(new Vr(t),a),w=new Ci;return new po(e,s,a,d,c,u,l,h,p,m,g,y,v,_,f,E,I,b,O,w)}!function(e){e.LoadInstrumentsRequested=\"LOAD_INSTRUMENTS_REQUESTED\",e.LoadInstrumentsSucceeded=\"LOAD_INSTRUMENTS_SUCCEEDED\",e.LoadInstrumentsFailed=\"LOAD_INSTRUMENTS_FAILED\",e.DeleteInstrumentRequested=\"DELETE_INSTRUMENT_REQUESTED\",e.DeleteInstrumentSucceeded=\"DELETE_INSTRUMENT_SUCCEEDED\",e.DeleteInstrumentFailed=\"DELETE_INSTRUMENT_FAILED\"}(lo||(lo={}));class yo{constructor(e){this._instrumentRequestSender=e}loadInstruments(){return e=>h.create(t=>{t.next(d(lo.LoadInstrumentsRequested));const n=this._getSessionContext(e),i=this._getCurrentAccessToken(e),r=this._getShippingAddress(e);return this._getValidAccessToken(i).then(e=>this._instrumentRequestSender.loadInstruments(Object.assign(Object.assign({},n),{authToken:e.vaultAccessToken}),r).then(({body:n})=>{t.next(d(lo.LoadInstrumentsSucceeded,n,e)),t.complete()})).catch(e=>{t.error(u(lo.LoadInstrumentsFailed,e))})})}deleteInstrument(e){return t=>h.create(n=>{n.next(d(lo.DeleteInstrumentRequested,void 0,{instrumentId:e}));const i=this._getSessionContext(t),r=this._getCurrentAccessToken(t);return this._getValidAccessToken(r).then(t=>this._instrumentRequestSender.deleteInstrument(Object.assign(Object.assign({},i),{authToken:t.vaultAccessToken}),e).then(({body:i})=>{n.next(d(lo.DeleteInstrumentSucceeded,i,Object.assign({instrumentId:e},t))),n.complete()})).catch(t=>{n.error(u(lo.DeleteInstrumentFailed,t,{instrumentId:e}))})})}_isValidVaultAccessToken(e){if(!e||!e.vaultAccessToken)return!1;return function(e){const t=new Date(e.getTime());return t.setMinutes(e.getMinutes()+2),t}(new Date(e.vaultAccessExpiry)).valueOf()>Date.now()}_getCurrentAccessToken(e){const{instruments:t}=e.getState(),n=t.getInstrumentsMeta();if(n)return{vaultAccessToken:n.vaultAccessToken,vaultAccessExpiry:n.vaultAccessExpiry}}_getValidAccessToken(e){return e&&this._isValidVaultAccessToken(e)?Promise.resolve(e):this._instrumentRequestSender.getVaultAccessToken().then(({body:e})=>e)}_getShippingAddress(e){const t=e.getState(),n=t.shippingAddress.getShippingAddresses();return n.length>1?n:t.shippingAddress.getShippingAddress()}_getSessionContext(e){const t=e.getState(),n=t.config.getStoreConfig(),i=t.cart.getCart();if(!n)throw new Ze(Ye.MissingCheckoutConfig);if(!i)throw new Ze(Ye.MissingCart);const{customerId:r}=i,{storeId:o}=n.storeProfile,{code:s}=n.shopperCurrency.isTransactional?n.shopperCurrency:n.currency;return{customerId:r,storeId:o,currencyCode:s}}}var _o,fo,So,Co,Eo=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n};class vo{transformResponse(e){const t=this._transformResponse(e),{body:n}=t,i=Eo(t,[\"body\"]);return Object.assign(Object.assign({},i),{body:{vaultedInstruments:this._transformVaultedInstruments(n.vaulted_instruments)}})}transformErrorResponse(e){return this._transformResponse(e)}transformVaultAccessResponse(e){return Object.assign(Object.assign({},e),{body:{vaultAccessToken:e.body.data.token,vaultAccessExpiry:e.body.data.expires_at}})}_transformVaultedInstruments(e=[]){return e.map(e=>this._isPayPalInstrument(e)?function(e){return{bigpayToken:e.bigpay_token,defaultInstrument:e.default_instrument,provider:e.provider,externalId:e.external_id,trustedShippingAddress:e.trusted_shipping_address,method:\"paypal\",type:\"account\"}}(e):this._isBankInstrument(e)?function(e){return{bigpayToken:e.bigpay_token,defaultInstrument:e.default_instrument,provider:e.provider,trustedShippingAddress:e.trusted_shipping_address,accountNumber:e.account_number,issuer:e.issuer,iban:e.iban,method:e.method,type:\"bank\"}}(e):function(e){return{bigpayToken:e.bigpay_token,defaultInstrument:e.default_instrument,provider:e.provider,iin:e.iin,last4:e.last_4,expiryMonth:e.expiry_month,expiryYear:e.expiry_year,brand:e.brand,trustedShippingAddress:e.trusted_shipping_address,untrustedShippingCardVerificationMode:e.untrusted_shipping_address_card_verification_mode,method:e.method,type:\"card\"}}(e))}_isPayPalInstrument(e){return\"paypal\"===e.method_type}_isBankInstrument(e){return\"bank\"===e.method_type}_transformResponse(e){const{data:t}=e,n=Eo(e,[\"data\"]);return Object.assign(Object.assign({},n),{body:t})}}class Io{constructor(e,t){this._client=e,this._requestSender=t,this._transformer=new vo}getVaultAccessToken({timeout:e}={}){return this._requestSender.get(\"/internalapi/v1/checkout/payments/vault-access-token\",{timeout:e}).then(e=>Object.assign(Object.assign({},e),{body:{vaultAccessToken:e.body.data.token,vaultAccessExpiry:e.body.data.expires_at}}))}loadInstruments(e,t){return t?this._loadInstrumentsWithAddress(e,t):this._loadInstruments(e)}deleteInstrument(e,t){const n=Object.assign(Object.assign({},e),{instrumentId:t});return new Promise((e,t)=>{this._client.deleteShopperInstrument(n,(n,i)=>n?t(this._transformer.transformErrorResponse(n)):e(this._transformer.transformResponse(i)))})}_loadInstruments(e){return new Promise((t,n)=>{this._client.loadInstruments(e,(e,i)=>e?n(this._transformer.transformErrorResponse(e)):t(this._transformer.transformResponse(i)))})}_loadInstrumentsWithAddress(e,t){const n=Object.assign(Object.assign({},e),{shippingAddress:Array.isArray(t)?t.map(e=>Wi(e)):Wi(t)});return new Promise((e,t)=>{this._client.loadInstrumentsWithAddress(n,(n,i)=>n?t(this._transformer.transformErrorResponse(n)):e(this._transformer.transformResponse(i)))})}}!function(e){e.LoadPickupOptionsRequested=\"LOAD_PICKUP_OPTIONS_REQUESTED\",e.LoadPickupOptionsSucceeded=\"LOAD_PICKUP_OPTIONS_SUCCEEDED\",e.LoadPickupOptionsFailed=\"LOAD_PICKUP_OPTIONS_FAILED\"}(_o||(_o={}));class bo{constructor(e){this._pickupOptionRequestSender=e}loadPickupOptions(e){return t=>new h(n=>{const i=this._hydrateApiQuery(t,e);n.next(d(_o.LoadPickupOptionsRequested)),this._pickupOptionRequestSender.fetchPickupOptions(i).then(t=>{n.next(d(_o.LoadPickupOptionsSucceeded,t.body.results,e)),n.complete()}).catch(e=>{n.error(u(_o.LoadPickupOptionsFailed,e))})})}_hydrateApiQuery(e,t){const n=e.getState(),i=n.cart.getCartOrThrow();if(!i)throw new Ze(Ye.MissingCart);const r=n.consignments.getConsignmentById(t.consignmentId);if(!r)throw new Ze(Ye.MissingConsignments);const o=r.lineItemIds,s=i.lineItems.physicalItems.filter(e=>B(o,e.id)).map(e=>({variantId:e.variantId,quantity:e.quantity}));return{searchArea:t.searchArea,items:s}}}class Oo{constructor(e){this._requestSender=e}fetchPickupOptions(e){return this._requestSender.post(\"/api/storefront/pickup-options\",{headers:Object.assign({Accept:tt.Json},Ve),body:e})}}!function(e){e.UpdateAddressFailed=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_FAILED\",e.UpdateAddressRequested=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_REQUESTED\",e.UpdateAddressSucceeded=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_SUCCEEDED\",e.SelectOptionFailed=\"SHIPPING_STRATEGY_SELECT_OPTION_FAILED\",e.SelectOptionRequested=\"SHIPPING_STRATEGY_SELECT_OPTION_REQUESTED\",e.SelectOptionSucceeded=\"SHIPPING_STRATEGY_SELECT_OPTION_SUCCEEDED\",e.InitializeFailed=\"SHIPPING_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"SHIPPING_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"SHIPPING_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"SHIPPING_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"SHIPPING_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"SHIPPING_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_FAILED\"}(fo||(fo={}));class wo{constructor(e){this._strategyRegistry=e}updateAddress(e,t){return n=>h.create(i=>{const r=n.getState().payment.getPaymentId(),o=t&&t.methodId||r&&r.providerId;i.next(d(fo.UpdateAddressRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).updateAddress(e,Object.assign(Object.assign({},t),{methodId:o})).then(()=>{i.next(d(fo.UpdateAddressSucceeded,void 0,{methodId:o})),i.complete()}).catch(e=>{i.error(u(fo.UpdateAddressFailed,e,{methodId:o}))})})}selectOption(e,t){return n=>h.create(i=>{const r=n.getState().payment.getPaymentId(),o=t&&t.methodId||r&&r.providerId;i.next(d(fo.SelectOptionRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).selectOption(e,Object.assign(Object.assign({},t),{methodId:o})).then(()=>{i.next(d(fo.SelectOptionSucceeded,void 0,{methodId:o})),i.complete()}).catch(e=>{i.error(u(fo.SelectOptionFailed,e,{methodId:o}))})})}initialize(e){return t=>h.create(n=>{const i=t.getState(),r=i.payment.getPaymentId(),o=e&&e.methodId||r&&r.providerId,s=Object.assign(Object.assign({},e),{methodId:o});if(o&&i.shippingStrategies.isInitialized(o))return n.complete();n.next(d(fo.InitializeRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).initialize(s).then(()=>{n.next(d(fo.InitializeSucceeded,void 0,{methodId:o})),n.complete()}).catch(e=>{n.error(u(fo.InitializeFailed,e,{methodId:o}))})})}deinitialize(e){return t=>h.create(n=>{const i=t.getState(),r=i.payment.getPaymentId(),o=e&&e.methodId||r&&r.providerId;if(o&&!i.shippingStrategies.isInitialized(o))return n.complete();n.next(d(fo.DeinitializeRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).deinitialize(Object.assign(Object.assign({},e),{methodId:o})).then(()=>{n.next(d(fo.DeinitializeSucceeded,void 0,{methodId:o})),n.complete()}).catch(e=>{n.error(u(fo.DeinitializeFailed,e,{methodId:o}))})})}widgetInteraction(e,t){return h.create(n=>{const i={methodId:t&&t.methodId};n.next(d(fo.WidgetInteractionStarted,void 0,i)),e().then(()=>{n.next(d(fo.WidgetInteractionFinished,void 0,i)),n.complete()}).catch(e=>{n.error(u(fo.WidgetInteractionFailed,e,i))})})}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(So||(So={}));class Ao extends Hn{constructor(e){super(function(e){switch(e){case So.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case So.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case So.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case So.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case So.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case So.MissingCheckoutConfig:case So.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case So.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case So.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case So.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case So.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case So.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case So.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(Co||(Co={}));class Po extends Hn{constructor(e){super(function(e){switch(e){case Co.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case Co.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case Co.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case Co.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const To={de:\"eu\",jp:\"fe\",uk:\"eu\",us:\"na\"};var ko,Ro,Mo,Lo,Do,Fo;!function(e){e.en_US=\"en_US\",e.en_GB=\"en_GB\",e.de_DE=\"de_DE\",e.fr_FR=\"fr_FR\",e.it_IT=\"it_IT\",e.es_ES=\"es_ES\",e.ja_JP=\"ja_JP\"}(ko||(ko={})),function(e){e.Home=\"Home\",e.Product=\"Product\",e.Cart=\"Cart\",e.Checkout=\"Checkout\",e.Other=\"Other\"}(Ro||(Ro={})),function(e){e.USD=\"USD\",e.EUR=\"EUR\",e.GBP=\"GBP\",e.JPY=\"JPY\"}(Mo||(Mo={})),function(e){e.PayAndShip=\"PayAndShip\",e.PayOnly=\"PayOnly\"}(Lo||(Lo={})),function(e){e.Gold=\"Gold\",e.LightGray=\"LightGray\",e.DarkGray=\"DarkGray\"}(Do||(Do={})),function(e){e.C0001=\"C0001\"}(Fo||(Fo={}));var No=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class xo{constructor(e){this.amazonPayV2ScriptLoader=e}initialize(e){return No(this,void 0,void 0,function*(){this.amazonPayV2SDK=yield this.amazonPayV2ScriptLoader.load(e),this.buttonParentContainer=this.buttonParentContainer||this.createAmazonPayButtonParentContainer()})}deinitialize(){var e;return this.amazonPayV2Button=void 0,null===(e=this.buttonParentContainer)||void 0===e||e.remove(),this.buttonParentContainer=void 0,this.amazonPayV2SDK=void 0,Promise.resolve()}bindButton(e,t,n){this.getAmazonPayV2SDK().Pay.bindChangeAction(`#${e}`,{amazonCheckoutSessionId:t,changeAction:n})}createButton(e,t){this.amazonPayV2Button=this.getAmazonPayV2SDK().Pay.renderButton(`#${e}`,t)}prepareCheckout(e){const t=this.prepareRequestConfig(e);this.getAmazonPayV2Button().onClick(()=>{this.getAmazonPayV2Button().initCheckout(t)})}prepareCheckoutWithCreationRequestConfig(e){this.getAmazonPayV2Button().onClick(()=>No(this,void 0,void 0,function*(){const t=yield e();if(t){const e=this.prepareRequestConfig(t.createCheckoutSessionConfig,t.estimatedOrderAmount,t.productType);this.getAmazonPayV2Button().initCheckout(e)}}))}signout(){return No(this,void 0,void 0,function*(){return this.amazonPayV2SDK&&this.amazonPayV2SDK.Pay.signout(),Promise.resolve()})}renderAmazonPayButton({buttonColor:e,checkoutState:t,containerId:n,decoupleCheckoutInitiation:i=!1,methodId:r,options:o,placement:s,isButtonMicroTextDisabled:a=!1}){const d=document.querySelector(`#${n}`);if(!d)return;const{id:c}=d.appendChild(this.getButtonParentContainer());o&&a&&(o.design=Fo.C0001);const u=null!=o?o:this.getAmazonPayV2ButtonOptions(t,r,s,i,e);return this.createButton(c,u),this.getButtonParentContainer()}updateBuyNowFlowFlag(e){this.isBuyNowFlow=Boolean(e)}isPh4Enabled(e,t){const n=!!e[\"PROJECT-3483.amazon_pay_ph4\"],i=!!e[\"INT-6885.amazon_pay_ph4_us_only\"];return n&&i?\"US\"===t:n}prepareRequestConfig(e,t,n){const{publicKeyId:i}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"publicKeyId\"]);return Object.assign(Object.assign({createCheckoutSessionConfig:this.isEnvironmentSpecific(i)?r:e},t&&{estimatedOrderAmount:t}),n&&{productType:n})}createAmazonPayButtonParentContainer(){const e=Math.random().toString(16).substr(-4),t=document.createElement(\"div\");return t.id=`amazonpay_button_parent_container_${e}`,t}getAmazonPayV2ButtonOptions(e,t,n,i=!1,r=Do.Gold){var o;const{getCart:s,getCheckout:a,getStoreConfigOrThrow:d,getPaymentMethodOrThrow:c}=this.getCheckoutState(e),{config:{merchantId:u,testMode:l},initializationData:h}=c(t);if(!h)throw new Ao(So.MissingPaymentMethod);const{checkoutLanguage:p,checkoutSessionMethod:m,createCheckoutSessionConfig:g,extractAmazonCheckoutSessionId:y,ledgerCurrency:_,publicKeyId:f=\"\",isButtonMicroTextDisabled:S}=h;if(!u||!_)throw new Ao(So.MissingPaymentMethod);const C=Object.assign({merchantId:u,ledgerCurrency:_,checkoutLanguage:p,placement:n,buttonColor:r},S?{design:Fo.C0001}:{});if(this.isBuyNowFlow)return Object.assign(Object.assign({},C),{sandbox:!!l});const E=s();C.productType=E&&0===function(e){return t=e.lineItems.physicalItems.filter(e=>!e.addedByPromotion),ce(t,(e,t)=>e+t.quantity,0);var t}(E)?Lo.PayOnly:Lo.PayAndShip;const{checkoutSettings:{features:v},storeProfile:{shopPath:I,storeCountryCode:b}}=d();if(this.isPh4Enabled(v,b)){if(!g)throw new Ao(So.MissingPaymentMethod);const e=null===(o=a())||void 0===o?void 0:o.outstandingBalance.toString(),t=null==E?void 0:E.currency.code,n=Object.assign({},C);let r;return this.isEnvironmentSpecific(f)?(n.publicKeyId=f,r=g):(n.sandbox=!!l,r=Object.assign(Object.assign({},g),{publicKeyId:f})),i||(n.createCheckoutSessionConfig=r),e&&t&&(n.estimatedOrderAmount={amount:e,currencyCode:t}),n}const O={method:m,url:`${I}/remote-checkout/${t}/payment-session`,extractAmazonCheckoutSessionId:y};return Object.assign(Object.assign({},C),{createCheckoutSession:O,sandbox:!!l})}isEnvironmentSpecific(e){return/^(SANDBOX|LIVE)/.test(e)}getAmazonPayV2SDK(){return this.getOrThrow(this.amazonPayV2SDK)}getButtonParentContainer(){return this.getOrThrow(this.buttonParentContainer)}getAmazonPayV2Button(){return this.getOrThrow(this.amazonPayV2Button)}getOrThrow(e){return function(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}(e,()=>new Po(Co.PaymentNotInitialized))}getCheckoutState(e){return\"object\"==typeof(t=e)&&null!==t&&\"cart\"in t&&\"checkout\"in t&&\"config\"in t&&\"paymentMethods\"in t?{getCart:e.cart.getCart,getCheckout:e.checkout.getCheckout,getStoreConfigOrThrow:e.config.getStoreConfigOrThrow,getPaymentMethodOrThrow:t=>e.paymentMethods.getPaymentMethodOrThrow(t)}:e;var t}}class Uo extends Hn{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class zo{constructor(e,t=window){this.scriptLoader=e,this.windowWithAmazonPay=t}load(e){return t=this,n=void 0,r=function*(){const{initializationData:t}=e,n=(null==t?void 0:t.region)||\"us\",i=To[n];if(yield this.scriptLoader.loadScript(`https://static-${i}.payments-amazon.com/checkout.js`),!this.windowWithAmazonPay.amazon)throw new Uo;return this.windowWithAmazonPay.amazon},new((i=void 0)||(i=Promise))(function(e,o){function s(e){try{d(r.next(e))}catch(e){o(e)}}function a(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}}function qo(e,t,n=!0){var i;return null!==(i=e[t])&&void 0!==i?i:n}const Bo=\"3.128.0\",jo=\"3.123.2\",Go=\"3.106.0\";class Ho{constructor(e){this.paymentIntegrationService=e,this.braintreeWindow=window}getSDKVersion(){const e=this.paymentIntegrationService.getState().getStoreConfig(),t=(null==e?void 0:e.checkoutSettings.features)||{};return this.getPreloadedSDKVersion()||(qo(t,\"PAYPAL-5809.braintree_hosted_fields_fix_version\")?Bo:qo(t,\"PAYPAL-5636.update_braintree_sdk_version\")?jo:Go)}getPreloadedSDKVersion(){const e=this.braintreeWindow.braintree;if(e){const t=F(Object.values(e),e=>!!e.VERSION);return null==t?void 0:t.VERSION}}}class Vo extends Hn{constructor(e){super(e||\"Unsupported browser error\"),this.name=\"UnsupportedBrowserError\",this.type=\"unsupported_browser\"}}class Yo extends Hn{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class Wo extends Yo{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class $o extends Hn{constructor(e,t){super(t||\"Unable to proceed because the payment form contains invalid data.\"),this.details=e,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}class Ko extends Hn{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}let Zo=null;const Qo=[\"buttons\",\"messages\"];var Jo,Xo,es,ts,ns,is,rs,os,ss;!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(Jo||(Jo={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(Xo||(Xo={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(es||(es={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(ts||(ts={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(ns||(ns={})),function(e){e.CART=\"cart\",e.HOME=\"homepage\",e.PAYMENT=\"payment\",e.PRODUCT=\"product\"}(is||(is={})),function(e){e.Sandbox=\"sandbox\",e.Production=\"production\"}(rs||(rs={})),function(e){e.Client=\"client\",e.DataCollector=\"dataCollector\",e.Fastlane=\"fastlane\",e.GooglePayment=\"googlePayment\",e.HostedFields=\"hostedFields\",e.LocalPayment=\"localPayment\",e.Paypal=\"paypal\",e.PaypalCheckout=\"paypalCheckout\",e.ThreeDSecure=\"threeDSecure\",e.UsBankAccount=\"usBankAccount\",e.Venmo=\"venmo\",e.VisaCheckout=\"visaCheckout\"}(os||(os={})),function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\"}(ss||(ss={}));var as=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class ds{constructor(e,t,n){this.braintreeScriptLoader=e,this.braintreeHostWindow=t,this.overlay=n,this.dataCollectors={}}initialize(e,t){this.clientToken=e,this.threeDSecureOptions=t}getBraintreeFastlane(e,t,n){return as(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"axoEnv\",\"sandbox\"),window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\")),!this.braintreeHostWindow.braintreeFastlane){const t=this.getClientTokenOrThrow(),i=yield this.getClient(),r=yield this.getSessionId(e),o=yield this.braintreeScriptLoader.loadFastlane(),s={root:{backgroundColorPrimary:\"transparent\"}};this.braintreeHostWindow.braintreeFastlane=yield o.create({authorization:t,client:i,deviceData:r,styles:n||s})}return this.braintreeHostWindow.braintreeFastlane})}getClient(){return as(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=t.create({authorization:e})}return this.client})}getPaypal(){return this.braintreePaypal||(this.braintreePaypal=Promise.all([this.getClient(),this.braintreeScriptLoader.loadPaypal()]).then(([e,t])=>t.create({client:e}))),this.braintreePaypal}paypal(e){var{shouldSaveInstrument:t}=e,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"shouldSaveInstrument\"]);const i=Pe();return this.getPaypal().then(e=>{var r;return i&&(null===(r=this.overlay)||void 0===r||r.show({onClick:()=>e.focusWindow()})),e.tokenize(Object.assign({enableShippingAddress:!0,flow:t?\"vault\":\"checkout\",useraction:\"commit\"},n))}).then(e=>{var t;return null===(t=this.overlay)||void 0===t||t.remove(),e}).catch(e=>{var t;throw null===(t=this.overlay)||void 0===t||t.remove(),e})}getPaypalCheckout(e,t,n){return as(this,void 0,void 0,function*(){const i=yield this.getClient(),r=yield this.braintreeScriptLoader.loadPaypalCheckout(),o={client:i};return this.paypalCheckout=yield r.create(o,(i,r)=>{var o;if(i)return n(i);const s=Object.assign(Object.assign({currency:e.currency},e.isCreditEnabled&&{\"enable-funding\":\"paylater\"}),{components:Qo.toString(),intent:e.intent,commit:null===(o=e.commit)||void 0===o||o});this.braintreeHostWindow.paypal?t(r):function(e,t){return Zo||(Zo=new Promise((n,i)=>{e.loadPayPalSDK(t,t=>{t?(Zo=null,i(t)):n(e)})})),Zo}(r,s).then(()=>t(r))}),this.paypalCheckout})}getDataCollector(e){return as(this,void 0,void 0,function*(){const t=(null==e?void 0:e.paypal)?\"paypal\":\"default\";let n=this.dataCollectors[t];if(!n){try{const t=yield this.getClient(),i=yield this.braintreeScriptLoader.loadDataCollector(),r=Object.assign({client:t,kount:!0},e);n=yield i.create(r)}catch(e){if(!function(e){return Boolean(\"object\"==typeof e&&null!==e&&(\"type\"in e||\"message\"in e||\"code\"in e))}(e)||\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"!==e.code)throw e;n={deviceData:void 0,teardown:()=>Promise.resolve()}}this.dataCollectors[t]=n}return n})}getBraintreeEnv(e=!1){return e?rs.Sandbox:rs.Production}mapToBraintreeShippingAddressOverride(e){return{recipientName:`${e.firstName} ${e.lastName}`,line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,postalCode:e.postalCode,countryCode:e.countryCode,phone:e.phone}}mapToLegacyShippingAddress(e){const{email:t,phone:n,shippingAddress:i}=e,r=(null==i?void 0:i.recipientName)||\"\",[o,s]=r.split(\" \");return{email:t,first_name:o||\"\",last_name:s||\"\",phone_number:n,address_line_1:null==i?void 0:i.line1,address_line_2:null==i?void 0:i.line2,city:null==i?void 0:i.city,state:null==i?void 0:i.state,country_code:null==i?void 0:i.countryCode,postal_code:null==i?void 0:i.postalCode}}mapToLegacyBillingAddress(e){const{billingAddress:t,email:n,firstName:i,lastName:r,phone:o,shippingAddress:s}=e,a=t||s;return{email:n,first_name:i,last_name:r,phone_number:o,address_line_1:null==a?void 0:a.line1,address_line_2:null==a?void 0:a.line2,city:null==a?void 0:a.city,state:null==a?void 0:a.state,country_code:null==a?void 0:a.countryCode,postal_code:null==a?void 0:a.postalCode}}removeElement(e){const t=e&&document.getElementById(e);t&&t.remove()}getSessionId(e){return as(this,void 0,void 0,function*(){const{deviceData:t}=yield this.getDataCollector({riskCorrelationId:e});return t})}teardown(){return as(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollectors.default),yield this.teardownModule(this.dataCollectors.paypal),this.dataCollectors={},yield this.teardownModule(this.paypalCheckout),this.paypalCheckout=void 0})}get3DS(){return as(this,void 0,void 0,function*(){return this.threeDS||(this.threeDS=Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]).then(([e,t])=>t.create({client:e,version:2}))),this.threeDS})}getVenmoCheckout(e){return as(this,void 0,void 0,function*(){if(!this.venmoCheckout){const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadVenmoCheckout(),i=Object.assign({client:t,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},e||{});this.venmoCheckout=yield new Promise((e,t)=>{n.create(i,(n,i)=>n?t(n):i.isBrowserSupported()?void e(i):t(new Vo))})}return this.venmoCheckout})}verifyCard(e,t,n){return as(this,void 0,void 0,function*(){const i=yield this.tokenizeCard(e,t);return this.challenge3DSVerification(i,n)})}tokenizeCard(e,t){return as(this,void 0,void 0,function*(){const{paymentData:n}=e;if(!function(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;return\"object\"==typeof t.ccExpiry&&null!==t.ccExpiry&&\"string\"==typeof t.ccNumber&&\"string\"==typeof t.ccName}(n))throw new Wo([\"payment.paymentData\"]);const i=this.getErrorsRequiredFields(n);if(!G(i))throw new $o(i);const r=this.mapToCreditCard(n,t),o=yield this.getClient(),{creditCards:s}=yield o.request(r);return{nonce:s[0].nonce,bin:s[0].details.bin}})}challenge3DSVerification(e,t){return as(this,void 0,void 0,function*(){const n=yield this.get3DS();return this.present3DSChallenge(n,t,e)})}teardownModule(e){return e?e.teardown():Promise.resolve()}getClientTokenOrThrow(){if(!this.clientToken)throw new Po(Co.PaymentNotInitialized);return this.clientToken}getErrorsRequiredFields(e){const{ccNumber:t,ccExpiry:n}=e,i={};return t||(i.ccNumber=[{message:\"Credit card number is required\",type:\"required\"}]),n||(i.ccExpiry=[{message:\"Expiration date is required\",type:\"required\"}]),i}mapToCreditCard(e,t){return{data:{creditCard:{cardholderName:e.ccName,number:e.ccNumber,cvv:e.ccCvv,expirationDate:`${e.ccExpiry.month}/${e.ccExpiry.year}`,options:{validate:!1},billingAddress:t&&{countryCodeAlpha2:t.countryCode,locality:t.city,countryName:t.country,postalCode:t.postalCode,streetAddress:t.address2?`${t.address1} ${t.address2}`:t.address1}}},endpoint:\"payment_methods/credit_cards\",method:\"post\"}}present3DSChallenge(e,t,n){const{nonce:i,bin:r}=n;if(!this.threeDSecureOptions||!i)throw new Po(Co.PaymentNotInitialized);const{addFrame:o,removeFrame:s,challengeRequested:a=!0,additionalInformation:d}=this.threeDSecureOptions,c=()=>as(this,void 0,void 0,function*(){const t=yield e.cancelVerifyCard();return l.cancel(new Ko),t}),u=t.toFixed(2),l=new Sn(e.verifyCard({addFrame:(e,t)=>{o&&o(e,t,c)},amount:Number(u),bin:r,challengeRequested:a,nonce:i,removeFrame:s,onLookupComplete:(e,t)=>{t()},collectDeviceData:!0,additionalInformation:d}));return l.promise}}const cs={[Go]:{[os.Client]:\"sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt\",[os.PaypalCheckout]:\"sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O\",[os.Paypal]:\"sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+\",[os.LocalPayment]:\"sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT\",[os.DataCollector]:\"sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV\",[os.UsBankAccount]:\"sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ\",[os.GooglePayment]:\"sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe\",[os.ThreeDSecure]:\"sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB\",[os.VisaCheckout]:\"sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT\",[os.Venmo]:\"sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov\",[os.HostedFields]:\"sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy\",[os.Fastlane]:\"sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa\"},[jo]:{[os.Client]:\"sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO\",[os.PaypalCheckout]:\"sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/\",[os.Paypal]:\"sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt\",[os.LocalPayment]:\"sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH\",[os.DataCollector]:\"sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO\",[os.UsBankAccount]:\"sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW\",[os.GooglePayment]:\"sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO\",[os.ThreeDSecure]:\"sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym\",[os.VisaCheckout]:\"sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS\",[os.Venmo]:\"sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU\",[os.HostedFields]:\"sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P\",[os.Fastlane]:\"sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y\"},[Bo]:{[os.Client]:\"sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq\",[os.PaypalCheckout]:\"sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh\",[os.Paypal]:\"sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH\",[os.LocalPayment]:\"sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC\",[os.DataCollector]:\"sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc\",[os.UsBankAccount]:\"sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F\",[os.GooglePayment]:\"sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i\",[os.ThreeDSecure]:\"sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D\",[os.VisaCheckout]:\"sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv\",[os.Venmo]:\"sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz\",[os.HostedFields]:\"sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z\",[os.Fastlane]:\"sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr\"}};var us=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class ls{constructor(e,t,n){this.scriptLoader=e,this.braintreeHostWindow=t,this.braintreeSDKVersionManager=n}loadClient(){return us(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(os.Client,\"client.min.js\")})}loadFastlane(){return us(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(os.Fastlane,\"fastlane.min.js\")})}loadPaypalCheckout(){return us(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(os.PaypalCheckout,\"paypal-checkout.min.js\")})}loadPaypal(){return us(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(os.Paypal,\"paypal.min.js\")})}loadLocalPayment(){return us(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(os.LocalPayment,\"local-payment.min.js\")})}loadDataCollector(){return us(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(os.DataCollector,\"data-collector.min.js\")})}loadUsBankAccount(){return us(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(os.UsBankAccount,\"us-bank-account.min.js\")})}loadGooglePayment(){return us(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(os.GooglePayment,\"google-payment.min.js\")})}load3DS(){return us(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(os.ThreeDSecure,\"three-d-secure.min.js\")})}loadVisaCheckout(){return this.loadBraintreeModuleOrThrow(os.VisaCheckout,\"visa-checkout.min.js\")}loadVenmoCheckout(){return this.loadBraintreeModuleOrThrow(os.Venmo,\"venmo.min.js\")}loadHostedFields(){return us(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(os.HostedFields,\"hosted-fields.min.js\")})}loadVisaCheckoutSdk(e){return us(this,void 0,void 0,function*(){if(this.braintreeHostWindow.V)return this.braintreeHostWindow.V;const t=e?\"sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm\":\"sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6\";return this.scriptLoader.loadScript(`//${e?\"sandbox-\":\"\"}assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,{async:!0,attributes:{integrity:t,crossorigin:\"anonymous\"}}).then(()=>{if(!this.braintreeHostWindow.V)throw new Uo;return this.braintreeHostWindow.V})})}loadBraintreeModuleOrThrow(e,t){return us(this,void 0,void 0,function*(){let n=this.getBraintreeModule(e);if(n)return n;const i=this.braintreeSDKVersionManager.getSDKVersion(),r=`//js.braintreegateway.com/web/${i}/js/${t}`,o=i in cs?this.getIntegrityValuesByModuleName(e,i):void 0;if(yield this.scriptLoader.loadScript(r,o?{async:!0,attributes:{integrity:o,crossorigin:\"anonymous\"}}:void 0),n=this.getBraintreeModule(e),!n)throw new Uo;return n})}getBraintreeModule(e){var t;return null===(t=this.braintreeHostWindow.braintree)||void 0===t?void 0:t[e]}getIntegrityValuesByModuleName(e,t){const n=cs[t][e];if(!n)throw new Error(\"Unexpected fileName value\");return n}}const hs=[\"ar_BH\",\"ar_DZ\",\"ar_EG\",\"ar_JO\",\"ar_KW\",\"ar_MA\",\"ar_OM\",\"ar_QA\",\"ar_SA\",\"ar_TN\",\"ar_YE\",\"ar_AE\",\"bg_BG\",\"cs_CZ\",\"da_DK\",\"da_FO\",\"da_GL\",\"de_AT\",\"de_CH\",\"de_DE\",\"de_LU\",\"el_GR\",\"en_AD\",\"en_AE\",\"en_AG\",\"en_AI\",\"en_AL\",\"en_AM\",\"en_AN\",\"en_AO\",\"en_AT\",\"en_AU\",\"en_AW\",\"en_AZ\",\"en_BB\",\"en_BE\",\"en_BH\",\"en_BJ\",\"en_BM\",\"en_BN\",\"en_BS\",\"en_BT\",\"en_BW\",\"en_BY\",\"en_BZ\",\"en_C2\",\"en_CA\",\"en_CD\",\"en_CG\",\"en_CH\",\"en_CI\",\"en_CK\",\"en_CL\",\"en_CM\",\"en_CN\",\"en_CO\",\"en_CR\",\"en_CV\",\"en_CY\",\"en_CZ\",\"en_DE\",\"en_DJ\",\"en_DK\",\"en_DM\",\"en_DO\",\"en_DZ\",\"en_EC\",\"en_EE\",\"en_EG\",\"en_ER\",\"en_ES\",\"en_ET\",\"en_FI\",\"en_FJ\",\"en_FK\",\"en_FM\",\"en_FO\",\"en_FR\",\"en_GA\",\"en_GB\",\"en_GD\",\"en_GE\",\"en_GF\",\"en_GI\",\"en_GL\",\"en_GM\",\"en_GN\",\"en_GP\",\"en_GR\",\"en_GT\",\"en_GW\",\"en_GY\",\"en_HK\",\"en_HN\",\"en_HR\",\"en_HU\",\"en_ID\",\"en_IE\",\"en_IL\",\"en_IN\",\"en_IS\",\"en_IT\",\"en_JM\",\"en_JO\",\"en_JP\",\"en_KE\",\"en_KG\",\"en_KH\",\"en_KI\",\"en_KM\",\"en_KN\",\"en_KR\",\"en_KW\",\"en_KY\",\"en_KZ\",\"en_LA\",\"en_LC\",\"en_LI\",\"en_LK\",\"en_LS\",\"en_LT\",\"en_LU\",\"en_LV\",\"en_MA\",\"en_MC\",\"en_MD\",\"en_ME\",\"en_MG\",\"en_MH\",\"en_MK\",\"en_ML\",\"en_MN\",\"en_MQ\",\"en_MR\",\"en_MS\",\"en_MT\",\"en_MU\",\"en_MV\",\"en_MW\",\"en_MY\",\"en_MZ\",\"en_NA\",\"en_NC\",\"en_NE\",\"en_NF\",\"en_NG\",\"en_NI\",\"en_NL\",\"en_NO\",\"en_NP\",\"en_NR\",\"en_NU\",\"en_NZ\",\"en_OM\",\"en_PA\",\"en_PE\",\"en_PF\",\"en_PG\",\"en_PH\",\"en_PL\",\"en_PM\",\"en_PN\",\"en_PT\",\"en_PW\",\"en_PY\",\"en_QA\",\"en_RE\",\"en_RO\",\"en_RS\",\"en_RU\",\"en_RW\",\"en_SA\",\"en_SB\",\"en_SC\",\"en_SE\",\"en_SG\",\"en_SH\",\"en_SI\",\"en_SJ\",\"en_SK\",\"en_SL\",\"en_SM\",\"en_SN\",\"en_SO\",\"en_SR\",\"en_ST\",\"en_SV\",\"en_SZ\",\"en_TC\",\"en_TD\",\"en_TG\",\"en_TH\",\"en_TJ\",\"en_TM\",\"en_TN\",\"en_TO\",\"en_TR\",\"en_TT\",\"en_TV\",\"en_TW\",\"en_TZ\",\"en_UA\",\"en_UG\",\"en_US\",\"en_UY\",\"en_VA\",\"en_VC\",\"en_VE\",\"en_VG\",\"en_VN\",\"en_VU\",\"en_WF\",\"en_WS\",\"en_YE\",\"en_YT\",\"en_ZA\",\"en_ZM\",\"en_ZW\",\"es_AD\",\"es_AI\",\"es_AO\",\"es_AR\",\"es_AW\",\"es_BB\",\"es_BJ\",\"es_BM\",\"es_BO\",\"es_BS\",\"es_BZ\",\"es_CD\",\"es_CG\",\"es_CK\",\"es_CL\",\"es_CO\",\"es_CR\",\"es_CV\",\"es_DJ\",\"es_DM\",\"es_DO\",\"es_DZ\",\"es_EC\",\"es_EG\",\"es_ER\",\"es_ES\",\"es_ET\",\"es_FJ\",\"es_FK\",\"es_FO\",\"es_GA\",\"es_GD\",\"es_GE\",\"es_GI\",\"es_GL\",\"es_GM\",\"es_GN\",\"es_GT\",\"es_GW\",\"es_GY\",\"es_HN\",\"es_IE\",\"es_JM\",\"es_JO\",\"es_KE\",\"es_KG\",\"es_KI\",\"es_KM\",\"es_KN\",\"es_KW\",\"es_KY\",\"es_KZ\",\"es_LC\",\"es_LI\",\"es_LS\",\"es_LU\",\"es_MA\",\"es_MG\",\"es_MH\",\"es_ML\",\"es_MR\",\"es_MS\",\"es_MU\",\"es_MW\",\"es_MX\",\"es_MZ\",\"es_NA\",\"es_NC\",\"es_NE\",\"es_NF\",\"es_NI\",\"es_NR\",\"es_NU\",\"es_NZ\",\"es_OM\",\"es_PA\",\"es_PE\",\"es_PF\",\"es_PG\",\"es_PM\",\"es_PN\",\"es_PW\",\"es_PY\",\"es_QA\",\"es_RS\",\"es_RW\",\"es_SA\",\"es_SB\",\"es_SC\",\"es_SH\",\"es_SJ\",\"es_SL\",\"es_SM\",\"es_SN\",\"es_SO\",\"es_SR\",\"es_ST\",\"es_SV\",\"es_SZ\",\"es_TC\",\"es_TD\",\"es_TG\",\"es_TJ\",\"es_TM\",\"es_TN\",\"es_TT\",\"es_TV\",\"es_UA\",\"es_UG\",\"es_US\",\"es_UY\",\"es_VA\",\"es_VC\",\"es_VE\",\"es_VG\",\"es_VU\",\"es_WF\",\"es_YE\",\"es_ZM\",\"et_EE\",\"fi_FI\",\"fr_AD\",\"fr_AE\",\"fr_AI\",\"fr_AM\",\"fr_AO\",\"fr_AW\",\"fr_AZ\",\"fr_BB\",\"fr_BE\",\"fr_BF\",\"fr_BI\",\"fr_BJ\",\"fr_BM\",\"fr_BS\",\"fr_BZ\",\"fr_CA\",\"fr_CD\",\"fr_CG\",\"fr_CH\",\"fr_CI\",\"fr_CK\",\"fr_CM\",\"fr_CV\",\"fr_DJ\",\"fr_DM\",\"fr_DO\",\"fr_DZ\",\"fr_EC\",\"fr_ER\",\"fr_ET\",\"fr_FJ\",\"fr_FK\",\"fr_FO\",\"fr_FR\",\"fr_GA\",\"fr_GD\",\"fr_GE\",\"fr_GF\",\"fr_GI\",\"fr_GL\",\"fr_GM\",\"fr_GN\",\"fr_GP\",\"fr_GT\",\"fr_GW\",\"fr_GY\",\"fr_HN\",\"fr_IE\",\"fr_JM\",\"fr_JO\",\"fr_KE\",\"fr_KG\",\"fr_KI\",\"fr_KM\",\"fr_KN\",\"fr_KW\",\"fr_KY\",\"fr_KZ\",\"fr_LC\",\"fr_LI\",\"fr_LS\",\"fr_LU\",\"fr_MA\",\"fr_MC\",\"fr_MG\",\"fr_MH\",\"fr_ML\",\"fr_MQ\",\"fr_MR\",\"fr_MS\",\"fr_MU\",\"fr_MW\",\"fr_MZ\",\"fr_NA\",\"fr_NC\",\"fr_NE\",\"fr_NF\",\"fr_NI\",\"fr_NR\",\"fr_NU\",\"fr_NZ\",\"fr_OM\",\"fr_PA\",\"fr_PE\",\"fr_PF\",\"fr_PG\",\"fr_PM\",\"fr_PN\",\"fr_PW\",\"fr_QA\",\"fr_RE\",\"fr_RS\",\"fr_RW\",\"fr_SA\",\"fr_SB\",\"fr_SC\",\"fr_SH\",\"fr_SJ\",\"fr_SL\",\"fr_SM\",\"fr_SN\",\"fr_SO\",\"fr_SR\",\"fr_ST\",\"fr_SV\",\"fr_SZ\",\"fr_TC\",\"fr_TD\",\"fr_TG\",\"fr_TJ\",\"fr_TM\",\"fr_TN\",\"fr_TT\",\"fr_TV\",\"fr_UA\",\"fr_UG\",\"fr_US\",\"fr_UY\",\"fr_VA\",\"fr_VC\",\"fr_VE\",\"fr_VG\",\"fr_VU\",\"fr_WF\",\"fr_YE\",\"fr_YT\",\"fr_ZA\",\"fr_ZM\",\"he_IL\",\"hu_HU\",\"id_ID\",\"it_IT\",\"ja_JP\",\"ko_KR\",\"lv_LV\",\"lt_LT\",\"ms_BN\",\"ms_MY\",\"nl_BE\",\"nl_NL\",\"pl_PL\",\"pt_BR\",\"pt_PT\",\"ro_RO\",\"ru_EE\",\"ru_LT\",\"ru_LV\",\"ru_RU\",\"ru_UA\",\"si_LK\",\"sk_SK\",\"sl_SI\",\"sq_AL\",\"sv_SE\",\"tl_PH\",\"th_TH\",\"tr_TR\",\"vi_VN\",\"zh_C2\",\"zh_CN\",\"zh_HK\",\"zh_TW\",\"zh_AD\",\"zh_AE\",\"zh_AI\",\"zh_AO\",\"zh_AW\",\"zh_BB\",\"zh_BH\",\"zh_BJ\",\"zh_BM\",\"zh_BS\",\"zh_BZ\",\"zh_CD\",\"zh_CG\",\"zh_CK\",\"zh_CL\",\"zh_CO\",\"zh_CV\",\"zh_DJ\",\"zh_DM\",\"zh_DO\",\"zh_DZ\",\"zh_EC\",\"zh_EG\",\"zh_ER\",\"zh_ET\",\"zh_FJ\",\"zh_FK\",\"zh_FO\",\"zh_GA\",\"zh_GD\",\"zh_GE\",\"zh_GI\",\"zh_GL\",\"zh_GM\",\"zh_GN\",\"zh_GT\",\"zh_GW\",\"zh_GY\",\"zh_HN\",\"zh_IE\",\"zh_JM\",\"zh_JO\",\"zh_KE\",\"zh_KG\",\"zh_KI\",\"zh_KM\",\"zh_KN\",\"zh_KW\",\"zh_KY\",\"zh_KZ\",\"zh_LC\",\"zh_LI\",\"zh_LS\",\"zh_LT\",\"zh_LU\",\"zh_MA\",\"zh_MG\",\"zh_MH\",\"zh_ML\",\"zh_MR\",\"zh_MS\",\"zh_MU\",\"zh_MW\",\"zh_MZ\",\"zh_NA\",\"zh_NC\",\"zh_NE\",\"zh_NF\",\"zh_NI\",\"zh_NR\",\"zh_NU\",\"zh_NZ\",\"zh_OM\",\"zh_PA\",\"zh_PE\",\"zh_PF\",\"zh_PG\",\"zh_PM\",\"zh_PN\",\"zh_PW\",\"zh_QA\",\"zh_RS\",\"zh_RW\",\"zh_SA\",\"zh_SB\",\"zh_SC\",\"zh_SH\",\"zh_SJ\",\"zh_SL\",\"zh_SM\",\"zh_SN\",\"zh_SO\",\"zh_SR\",\"zh_ST\",\"zh_SV\",\"zh_SZ\",\"zh_TC\",\"zh_TD\",\"zh_TG\",\"zh_TJ\",\"zh_TM\",\"zh_TN\",\"zh_TT\",\"zh_TV\",\"zh_UA\",\"zh_UG\",\"zh_US\",\"zh_UY\",\"zh_VA\",\"zh_VC\",\"zh_VE\",\"zh_VG\",\"zh_VU\",\"zh_WF\",\"zh_YE\",\"zh_ZA\",\"zh_ZM\"];function ps(e){if(!e)return;let t;if(e.includes(\"-\")){const[n,i]=e.split(\"-\");t=`${n}_${i.toUpperCase()}`}else t=`${e}_${e.toUpperCase()}`;return hs.includes(t)?t:void 0}var ms,gs,ys,_s,fs,Ss,Cs,Es,vs,Is,bs,Os=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class ws{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,i,r){return Os(this,void 0,void 0,function*(){if(!this.window.paypal||r){const r=this.getPayPalSdkScriptConfigOrThrow(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypal)throw new Uo}return this.window.paypal})}getPayPalFastlaneSdk(e,t,n,i){return Os(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const r=this.getPayPalFastlaneSdkConfiguration(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypalFastlaneSdk)throw new Uo}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i,r){return Os(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||r){const r=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i);yield this.loadPayPalSdk(r)}if(!this.window.paypalGooglePay)throw new Uo;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return Os(this,void 0,void 0,function*(){if(!this.window.paypalApms){const i=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.paypalApms)throw new Uo}return this.window.paypalApms})}getPayPalMessages(e,t,n){return Os(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const i=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.paypalMessages)throw new Uo;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return Os(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:i})})}getPayPalSdkScriptConfigOrThrow(e,t,n,i=!0){const{id:r,clientToken:o,initializationData:s}=e;if(!s||!s.clientId)throw new Ao(So.MissingPaymentMethod);const{intent:a,clientId:d,merchantId:c,buyerCountry:u,attributionId:l,isVenmoEnabled:h,isHostedCheckoutEnabled:p,isPayPalCreditAvailable:m,isDeveloperModeApplicable:g,availableAlternativePaymentMethods:y=[],enabledAlternativePaymentMethods:_=[],isGooglePayEnabled:f}=s,S=p||i,C=\"paypalcommercecreditcards\"===r||\"bigcommerce_payments_creditcards\"===r,E=C?[\"card\"]:[],v=m?[\"credit\",\"paylater\"]:[],I=h?[\"venmo\"]:[],b=f?[\"googlepay\"]:[],O=i?[\"card-fields\"]:[],w=[...C?[]:[\"card\"],...m?[]:[\"credit\",\"paylater\"],...h?[]:[\"venmo\"],...y.filter(e=>!_.includes(e))],A=[...E,...v,...I,..._],P=ps(n);return{options:Object.assign(Object.assign({\"client-id\":d,\"merchant-id\":c,\"enable-funding\":A.length>0?A:void 0,\"disable-funding\":w.length>0?w:void 0,commit:S,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...b,...O],currency:t,intent:a},g&&{\"buyer-country\":u}),P&&{locale:P}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":o}}}getPayPalFastlaneSdkConfiguration(e,t,n,i){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new Ao(So.MissingPaymentMethod);const{intent:s,clientId:a,merchantId:d,attributionId:c}=o,u=ps(i);return{options:Object.assign(Object.assign({\"client-id\":a,\"merchant-id\":d,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t},u&&{locale:u}),{intent:s}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":c,\"data-sdk-client-token\":r}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i=!0){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new Ao(So.MissingPaymentMethod);const{intent:s,clientId:a,merchantId:d,buyerCountry:c,attributionId:u,isHostedCheckoutEnabled:l,isDeveloperModeApplicable:h}=o,p=l||i,m=ps(n);return{options:Object.assign(Object.assign({\"client-id\":a,\"merchant-id\":d,commit:p,components:[\"googlepay\"],currency:t,intent:s},h&&{\"buyer-country\":c}),m&&{locale:m}),attributes:{\"data-partner-attribution-id\":u,\"data-client-token\":r,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new Ao(So.MissingPaymentMethod);const{intent:r,clientId:o,merchantId:s,buyerCountry:a,attributionId:d,isDeveloperModeApplicable:c,availableAlternativePaymentMethods:u=[],enabledAlternativePaymentMethods:l=[]}=i,h=l,p=u.filter(e=>!l.includes(e)),m=ps(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":s,\"enable-funding\":h.length>0?h:void 0,\"disable-funding\":p.length>0?p:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:r},c&&{\"buyer-country\":a}),m&&{locale:m}),attributes:{\"data-partner-attribution-id\":d,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new Ao(So.MissingPaymentMethod);const{clientId:r,merchantId:o,attributionId:s,isDeveloperModeApplicable:a,buyerCountry:d}=i,c=ps(n);return{options:Object.assign(Object.assign({\"client-id\":r,\"merchant-id\":o,components:[\"messages\"],currency:t},a&&{\"buyer-country\":d}),c&&{locale:c}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":s}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}!function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(ms||(ms={}));class As{static get(e){const t=`${encodeURIComponent(`${e}`)}=`,n=document.cookie;let i=null;const r=n.indexOf(t);if(r>-1){let e=n.indexOf(\";\",r);-1===e&&(e=n.length),i=decodeURIComponent(n.substring(r+t.length,e))}return i}static set(e,t,n={secure:!0}){let i=`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;const{expires:r,path:o,domain:s,secure:a}=n;if(r)i+=`; expires=${r.toUTCString()}`;else{const e=new Date,t=60;e.setTime(e.getTime()+60*t*1e3),i+=`; expires=${e.toUTCString()}`}o&&(i+=`; path=${o}`),s&&(i+=`; domain=${s}`),a&&(i+=\"; secure\"),document.cookie=i}static remove(e,t){As.set(e,\"\",Object.assign({expires:new Date(0)},t))}}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(gs||(gs={})),function(e){e.Always=\"SCA_ALWAYS\"}(ys||(ys={})),function(e){e.Succeeded=\"succeeded\",e.Cancelled=\"cancelled\",e.Errored=\"errored\"}(_s||(_s={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(fs||(fs={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(Ss||(Ss={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(Cs||(Cs={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(Es||(Es={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"canceled\",e.UNRECOGNIZED=\"unrecognized\"}(vs||(vs={})),function(e){e.OXXO=\"oxxo\"}(Is||(Is={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(bs||(bs={}));var Ps,Ts,ks,Rs,Ms,Ls,Ds,Fs,Ns,xs,Us,zs,qs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class Bs{constructor(){this.window=window}initializePayPalFastlane(e,t,n){return qs(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\"),window.localStorage.setItem(\"axoEnv\",\"sandbox\")),!this.window.paypalFastlane){const t={root:{backgroundColorPrimary:\"transparent\"}};this.window.paypalFastlane=yield e.Fastlane({styles:n||t})}return this.window.paypalFastlane})}getPayPalFastlaneOrThrow(){if(!this.window.paypalFastlane)throw new Uo;return this.window.paypalFastlane}lookupCustomerOrThrow(e){return qs(this,void 0,void 0,function*(){return this.getPayPalFastlaneOrThrow().identity.lookupCustomerByEmail(e)})}triggerAuthenticationFlowOrThrow(e){return qs(this,void 0,void 0,function*(){return e?this.getPayPalFastlaneOrThrow().identity.triggerAuthenticationFlow(e):{}})}updateStorageSessionId(e){const t=new Date;t.setDate(t.getDate()+14);const n={expires:t,secure:!0};As.set(\"bc-fastlane-sessionId\",e,n)}removeStorageSessionId(){As.remove(\"bc-fastlane-sessionId\")}getStorageSessionId(){return As.get(\"bc-fastlane-sessionId\")||\"\"}mapPayPalFastlaneProfileToBcCustomerData(e,t){var n,i,r;const{authenticationState:o,profileData:s}=t,a=null===(r=null===(i=null===(n=null==s?void 0:s.card)||void 0===n?void 0:n.paymentSource)||void 0===i?void 0:i.card)||void 0===r?void 0:r.billingAddress,d=null==s?void 0:s.shippingAddress,c=null==s?void 0:s.name,u=null==s?void 0:s.card,l=d?this.mapPayPalToBcAddress(d.address,d.name,d.phoneNumber):void 0,h=a&&c?this.mapPayPalToBcAddress(a,c,null==d?void 0:d.phoneNumber):void 0,p=u?this.mapPayPalToBcInstrument(e,u):[],m=this.filterAddresses([l,h]);return{authenticationState:o||vs.UNRECOGNIZED,addresses:m,billingAddress:h,shippingAddress:l,instruments:p}}mapPayPalToBcInstrument(e,t){const{id:n,paymentSource:i}=t,{brand:r,expiry:o,lastDigits:s}=i.card,[a,d]=o.split(\"-\");return[{bigpayToken:n,brand:r,defaultInstrument:!1,expiryMonth:d,expiryYear:a,iin:\"\",last4:s,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:ms.PAN,type:\"card\"}]}mapBcToPayPalAddress(e){return{company:(null==e?void 0:e.company)||\"\",addressLine1:(null==e?void 0:e.address1)||\"\",addressLine2:(null==e?void 0:e.address2)||\"\",adminArea1:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",adminArea2:(null==e?void 0:e.city)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\"}}mapPayPalToBcAddress(e,t,n,i){const[r,o]=t.fullName.split(\" \"),s=(null==n?void 0:n.nationalNumber)||\"\",a=(null==n?void 0:n.countryCode)||\"\";return{id:Date.now(),type:\"paypal-address\",firstName:t.firstName||r||\"\",lastName:t.lastName||o||\"\",company:e.company||\"\",address1:e.addressLine1,address2:e.addressLine2||\"\",city:e.adminArea2,stateOrProvince:e.adminArea1,stateOrProvinceCode:e.adminArea1,country:e.countryCode||\"\",countryCode:e.countryCode||\"\",postalCode:e.postalCode,phone:a+s,customFields:i||[]}}filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this.isEqualAddresses(e,t))?e:[...e,t]:e,[])}isEqualAddresses(e,t){return H(this.normalizeAddress(e),this.normalizeAddress(t))}normalizeAddress(e){return re(e,[\"id\",\"phone\"])}}!function(e){e.SHIPPING=\"shipping\",e.BILLING=\"billing\"}(Ps||(Ps={})),function(e){e.SPLIT=\"split\",e.FULL=\"full\",e.ORGANIZATION=\"organization\"}(Ts||(Ts={})),function(e){e.Open=\"open\",e.Expired=\"expired\",e.Complete=\"complete\"}(ks||(ks={})),function(e){e.Paid=\"paid\",e.UnPaid=\"unpaid\",e.NoPaymentRequired=\"no_payment_required\"}(Rs||(Rs={})),function(e){e.SUCCESS=\"success\",e.ERROR=\"error\"}(Ms||(Ms={})),function(e){e.CreditCard=\"card\",e.ACH=\"us_bank_account\",e.Link=\"link\",e.EPS=\"eps\",e.GRABPAY=\"grabpay\",e.BANCONTACT=\"bancontact\",e.IDEAL=\"ideal\",e.ALIPAY=\"alipay\",e.KLARNA=\"klarna\",e.OCS=\"optimized_checkout\",e.CHECKOUT_SESSION=\"checkout_session\"}(Ls||(Ls={})),function(e){e.NEVER=\"never\",e.AUTO=\"auto\",e.ALWAYS=\"always\",e.PAYMENT=\"payment\",e.IF_REQUIRED=\"if_required\"}(Ds||(Ds={})),function(e){e.V3=\"v3\",e.ACACIA=\"acacia\",e.BASIL=\"basil\",e.CLOVER=\"clover\"}(Fs||(Fs={})),function(e){e.PAYMENT=\"payment\",e.AUTHENTICATION=\"linkAuthentication\",e.SHIPPING=\"address\",e.EXPRESS_CHECKOUT=\"expressCheckout\"}(Ns||(Ns={})),function(e){e.REQUIRES_PAYMENT_METHOD=\"requires_payment_method\",e.REQUIRES_CONFIRMATION=\"requires_confirmation\",e.REQUIRES_ACTION=\"requires_action\",e.PROCESSING=\"processing\",e.SUCCEEDED=\"succeeded\",e.CANCELED=\"canceled\"}(xs||(xs={})),function(e){e.CLICK=\"click\",e.CHANGE=\"change\",e.READY=\"ready\",e.SHIPPING_ADDRESS_CHANGE=\"shippingaddresschange\",e.SHIPPING_RATE_CHANGE=\"shippingratechange\",e.CONFIRM=\"confirm\",e.CANCEL=\"cancel\",e.LOADER_START=\"loaderstart\"}(Us||(Us={})),function(e){e.ON_SESSION=\"on_session\",e.OFF_SESSION=\"off_session\"}(zs||(zs={}));var js=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class Gs{constructor(e,t=window){this.scriptLoader=e,this.stripeWindow=t}getStripeClient(e,t,n,i,r){return js(this,void 0,void 0,function*(){if(this.stripeWindow.bcStripeClient)return this.stripeWindow.bcStripeClient;const o=yield this.load(n),{stripePublishableKey:s,stripeConnectedAccount:a}=e,d=o(s,Object.assign(Object.assign(Object.assign(Object.assign({},a?{stripeAccount:a}:{}),t?{locale:t}:{}),i?{betas:i}:{}),r?{apiVersion:r}:{}));return Object.assign(this.stripeWindow,{bcStripeClient:d}),d})}getElements(e,t){return js(this,void 0,void 0,function*(){let n=this.stripeWindow.bcStripeElements;return n?yield this.updateStripeElements(t):(n=e.elements(t),Object.assign(this.stripeWindow,{bcStripeElements:n})),n})}updateStripeElements(e){return js(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeElements;t&&(t.update(e),yield t.fetchUpdates())})}getStripeCheckout(e,t){return js(this,void 0,void 0,function*(){let n=yield this.getStoredStripeCheckout(t);return n||(n=yield e.initCheckout(t),Object.assign(this.stripeWindow,{bcStripeCheckout:n})),n})}load(e){return js(this,void 0,void 0,function*(){if(!this.stripeWindow.Stripe&&(yield this.scriptLoader.loadScript(this.getScriptUrl(e)),!this.stripeWindow.Stripe))throw new Uo;return this.stripeWindow.Stripe})}getScriptUrl(e){return e&&e!==Fs.V3?`https://js.stripe.com/${e}/stripe.js`:\"https://js.stripe.com/v3/\"}getStoredStripeCheckout(e){return js(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeCheckout;if(t)try{const{actions:n,error:i}=yield t.loadActions();if(i||!n)return void this.logErrorToConsole(i);const r=yield n.getSession(),o=e.clientSecret.split(\"_secret_\")[0];if(r.id===o)return t}catch(e){return void this.logErrorToConsole(e)}})}logErrorToConsole(e){e?console.error(e):console.error(\"No stripe checkout actions available on loadActions().\")}}var Hs,Vs,Ys,Ws,$s,Ks,Zs,Qs,Js=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class Xs{constructor(e,t,n,i,r){this._store=e,this._consignmentActionCreator=t,this._paymentMethodActionCreator=n,this._amazonPayV2PaymentProcessor=i,this._shippingStrategyActionCreator=r}updateAddress(e,t){const n=this._store.getState().shippingAddress.getShippingAddress();if(!n)throw new Ze(Ye.MissingShippingAddress);const i=Object.assign(Object.assign({},n),{customFields:e.customFields});return this._store.dispatch(this._consignmentActionCreator.updateAddress(i,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}initialize(e){return Js(this,void 0,void 0,function*(){const{amazonpay:t,methodId:n}=e;if(!t||!n)throw new Dt('Unable to proceed because \"options.amazonpay\" argument is not provided.');const i=(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(n))).paymentMethods.getPaymentMethodOrThrow(n);yield this._amazonPayV2PaymentProcessor.initialize(i);const{paymentToken:r,region:o}=i.initializationData,s=t.editAddressButtonId;if(r&&s){const e=this._shouldShowLoadingSpinner(o);this._bindEditButton(s,r,\"changeAddress\",e)}return this._store.getState()})}deinitialize(){return Js(this,void 0,void 0,function*(){return yield this._amazonPayV2PaymentProcessor.deinitialize(),Promise.resolve(this._store.getState())})}_bindEditButton(e,t,n,i){const r=document.getElementById(e);if(r&&r.parentNode){if(i){const e=r.cloneNode(!0);r.parentNode.replaceChild(e,r),e.addEventListener(\"click\",()=>this._showLoadingSpinner())}this._amazonPayV2PaymentProcessor.bindButton(e,t,n)}}_showLoadingSpinner(){return this._store.dispatch(this._shippingStrategyActionCreator.widgetInteraction(()=>new Promise(C)),{queueId:\"widgetInteraction\"})}_shouldShowLoadingSpinner(e){return\"us\"!==e}}function ea(e){return\"string\"!=typeof e}function ta(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}!function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(Hs||(Hs={})),function(e){e.Completed=\"COMPLETED\",e.Pending=\"PENDING\",e.Failed=\"FAILED\"}(Vs||(Vs={})),function(e){e.TRUSTLY=\"trustly\"}(Ys||(Ys={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"cancelled\",e.UNRECOGNIZED=\"unrecognized\"}(Ws||(Ws={})),function(e){e.Customer=\"CUSTOMER\",e.Merchant=\"MERCHANT\",e.Network=\"NETWORK\",e.Internal=\"INTERNAL\",e.Unknown=\"UNKNOWN\"}($s||($s={})),function(e){e.KountNotEnabled=\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"}(Ks||(Ks={})),function(e){e.Visa=\"visa\",e.Mastercard=\"mastercard\",e.AmericanExpress=\"american-express\",e.DinersClub=\"diners-club\",e.Discover=\"discover\",e.Jcb=\"jcb\",e.UnionPay=\"union-pay\",e.Maestro=\"maestro\",e.Elo=\"elo\",e.Mir=\"mir\",e.Hiper=\"hiper\",e.Hipercard=\"hipercard\"}(Zs||(Zs={})),function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(Qs||(Qs={}));var na=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class ia{constructor(e,t,n,i,r,o){this._store=e,this._billingAddressActionCreator=t,this._consignmentActionCreator=n,this._paymentMethodActionCreator=i,this._paymentProviderCustomerActionCreator=r,this._braintreeIntegrationService=o}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}deinitialize(){return Promise.resolve(this._store.getState())}initialize(e){var t;return na(this,void 0,void 0,function*(){const{methodId:n,braintreefastlane:i,fastlane:r}=e||{},o=r||i,{onPayPalFastlaneAddressChange:s}=o||{};if(!n)throw new Dt('Unable to proceed because \"methodId\" argument is not provided.');const a=this._store.getState();if(!a.customer.getCustomerOrThrow().isGuest)return Promise.resolve(this._store.getState());try{if(this._shouldRunAuthenticationFlow()){const e=a.paymentMethods.getPaymentMethod(n),{clientToken:i,isFastlaneStylingEnabled:r}=(null==e?void 0:e.initializationData)||{};i||(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(n)));const s=function(e,t){if(t||e)return function(e){var t,n;const i={},r=oe(e.root,ea),o=oe(e.input,ea),s=oe(e.toggle,ea),a=oe(null===(t=e.text)||void 0===t?void 0:t.body,ea),d=oe(null===(n=e.text)||void 0===n?void 0:n.caption,ea),c=e.branding;return Object.keys(r).length&&(i.root=r),Object.keys(o).length&&(i.input=o),Object.keys(s).length&&(i.toggle=s),Object.keys(a).length&&(i.text={},i.text.body=a),Object.keys(d).length&&(i.text=Object.assign({},i.text),i.text.caption=d),c&&(i.branding=c),i}(function(e,t){var n,i,r,o,s,a,d,c,u,l,h,p,m,g,y,_,f,S,C,E,v,I;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(g=null==t?void 0:t.toggle)||void 0===g?void 0:g.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(_=null===(y=null==t?void 0:t.text)||void 0===y?void 0:y.body)||void 0===_?void 0:_.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(S=null===(f=null==t?void 0:t.text)||void 0===f?void 0:f.body)||void 0===S?void 0:S.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(E=null===(C=null==t?void 0:t.text)||void 0===C?void 0:C.caption)||void 0===E?void 0:E.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(I=null===(v=null==t?void 0:t.text)||void 0===v?void 0:v.caption)||void 0===I?void 0:I.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}(r?null===(t=null==e?void 0:e.initializationData)||void 0===t?void 0:t.fastlaneStyles:void 0,null==o?void 0:o.styles);yield this._runAuthenticationFlowOrThrow(n,s)}\"function\"==typeof s&&(yield this._shouldUseBraintreeFastlaneShippingComponent(n))&&s(()=>this._handleBraintreeFastlaneShippingAddressChange())}catch(e){}return Promise.resolve(this._store.getState())})}_shouldRunAuthenticationFlow(){var e;const t=this._store.getState(),n=null===(e=t.cart.getCart())||void 0===e?void 0:e.id,i=As.get(\"bc-fastlane-sessionId\")||\"\",r=t.paymentProviderCustomer.getPaymentProviderCustomer(),o=ta(r)?r:{};return(null==o?void 0:o.authenticationState)!==Ws.CANCELED&&!(null==o?void 0:o.authenticationState)&&i===n}_runAuthenticationFlowOrThrow(e,t){var n,i;return na(this,void 0,void 0,function*(){const r=this._store.getState(),o=r.cart.getCartOrThrow(),s=r.countries.getCountries()||[],a=r.paymentMethods.getPaymentMethodOrThrow(e),{clientToken:d,config:c}=a;if(!d)throw new Ze(Ye.MissingPaymentMethod);this._braintreeIntegrationService.initialize(d);const u=yield this._braintreeIntegrationService.getBraintreeFastlane(null==o?void 0:o.id,null==c?void 0:c.testMode,t),l=(null===(n=r.customer.getCustomer())||void 0===n?void 0:n.email)||(null===(i=r.billingAddress.getBillingAddress())||void 0===i?void 0:i.email);if(!l)return;const{lookupCustomerByEmail:h,triggerAuthenticationFlow:p}=u.identity,{customerContextId:m}=yield h(l);if(!m)return;const{authenticationState:g,profileData:y}=yield p(m);if(g===Ws.CANCELED)return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({authenticationState:g,addresses:[],instruments:[]})),void As.remove(\"bc-fastlane-sessionId\");const _=this._getPayPalBillingAddress(y),f=y.shippingAddress,S=y.shippingAddress.phoneNumber,C=this._mapPayPalToBcAddress(f,s,S),E=this._mapPayPalToBcAddress(_,s,S);if(E&&C){const t=this._mergeShippingAndBillingAddresses(C,E),n=this._mapPayPalToBcInstrument(e,y.card),i=n?[n]:[];yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({authenticationState:g,addresses:t,instruments:i})),E&&(yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(Object.assign(Object.assign({},E),{id:String(E.id)})))),C&&o.lineItems.physicalItems.length>0&&(yield this._store.dispatch(this._consignmentActionCreator.updateAddress(C)))}})}_getPayPalBillingAddress(e){const{name:t,card:n}=e,i=n.paymentSource.card.billingAddress;return Object.assign(Object.assign({},i),{firstName:i.firstName||(null==t?void 0:t.firstName),lastName:i.lastName||(null==t?void 0:t.lastName)})}_getCountryNameByCountryCode(e,t){const n=t.find(t=>t.code===e);return(null==n?void 0:n.name)||\"\"}_mapPayPalToBcAddress(e,t,n,i){return{id:Number(Date.now()),type:\"paypal-address\",firstName:e.firstName||\"\",lastName:e.lastName||\"\",company:e.company||\"\",address1:e.streetAddress,address2:e.extendedAddress||\"\",city:e.locality,stateOrProvince:e.region,stateOrProvinceCode:e.region,country:this._getCountryNameByCountryCode(e.countryCodeAlpha2,t),countryCode:e.countryCodeAlpha2,postalCode:e.postalCode,phone:n||\"\",customFields:i||[]}}_normalizeAddress(e){return re(e,[\"id\"])}_mergeShippingAndBillingAddresses(e,t){return H(this._normalizeAddress(e),this._normalizeAddress(t))?[e]:[e,t]}_mapPayPalToBcInstrument(e,t){if(!t)return;const{id:n,paymentSource:i}=t,{brand:r,expiry:o,lastDigits:s}=i.card,[a,d]=o.split(\"-\");return{bigpayToken:n,brand:r,defaultInstrument:!1,expiryMonth:d,expiryYear:a,iin:\"\",last4:s,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:Qs.CVV,type:\"card\"}}_handleBraintreeFastlaneShippingAddressChange(){var e;return na(this,void 0,void 0,function*(){const t=this._store.getState().countries.getCountries()||[],n=yield this._braintreeIntegrationService.getBraintreeFastlane(),{selectionChanged:i,selectedAddress:r}=yield n.profile.showShippingAddressSelector();if(i){const n=this._store.getState(),i=n.shippingAddress.getShippingAddressesOrThrow(),o=n.paymentProviderCustomer.getPaymentProviderCustomer(),s=ta(o)?o:{},a=this._mapPayPalToBcAddress(r,t,r.phoneNumber,null===(e=i[0])||void 0===e?void 0:e.customFields);if(a){const e=this._filterAddresses([a,...s.addresses||[]]);return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(Object.assign(Object.assign({},s),{addresses:e}))),yield this._store.dispatch(this._consignmentActionCreator.updateAddress(a)),a}}})}_filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this._isEqualAddresses(e,t))?e:[...e,t]:e,[])}_isEqualAddresses(e,t){return H(this._normalizeAddress(e),this._normalizeAddress(t))}_shouldUseBraintreeFastlaneShippingComponent(e){var t;return na(this,void 0,void 0,function*(){const n=this._store.getState().paymentProviderCustomer.getPaymentProviderCustomer(),i=ta(n)?n:{};if(i&&(null==i?void 0:i.authenticationState)!==Ws.CANCELED){const n=yield this._getBraintreePaymentMethodOrThrow(e);return!!(null===(t=null==n?void 0:n.initializationData)||void 0===t?void 0:t.isFastlaneEnabled)}return!1})}_getBraintreePaymentMethodOrThrow(e){return na(this,void 0,void 0,function*(){const t=this._store.getState().paymentMethods.getPaymentMethod(e);return t||(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e))).paymentMethods.getPaymentMethodOrThrow(e)})}}class ra{constructor(e,t){this._store=e,this._consignmentActionCreator=t}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}initialize(){return Promise.resolve(this._store.getState())}deinitialize(){return Promise.resolve(this._store.getState())}}function oa(e){return\"string\"!=typeof e}var sa=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function s(e){try{d(i.next(e))}catch(e){o(e)}}function a(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,a)}d((i=i.apply(e,t||[])).next())})};class aa{constructor(e,t,n,i,r,o,s){this._store=e,this._billingAddressActionCreator=t,this._consignmentActionCreator=n,this._paymentMethodActionCreator=i,this._paymentProviderCustomerActionCreator=r,this._paypalSdkScriptLoader=o,this._paypalCommerceFastlaneUtils=s}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}deinitialize(){return Promise.resolve(this._store.getState())}initialize(e){return sa(this,void 0,void 0,function*(){const{methodId:t,paypalcommercefastlane:n,fastlane:i}=e||{},r=i||n,{onPayPalFastlaneAddressChange:o,styles:s}=r||{};if(!t)throw new Dt('Unable to proceed because \"methodId\" argument is not provided.');const a=this._store.getState().customer.getCustomerOrThrow();if(!(null==a?void 0:a.isGuest))return Promise.resolve(this._store.getState());try{this._shouldAuthenticateUserWithFastlane()&&(yield this._initializePayPalSdk(t,s),yield this._authenticateUserWithFastlaneOtp(t)),\"function\"==typeof o&&this._shouldUsePayPalFastlaneShippingComponent()&&(yield this._initializePayPalSdk(t,s),o(()=>this._handlePayPalShippingAddressChange()))}catch(e){}return Promise.resolve(this._store.getState())})}_getPayPalPaymentMethodOrThrow(e){return sa(this,void 0,void 0,function*(){const t=this._store.getState().paymentMethods.getPaymentMethod(e);return t||(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e))).paymentMethods.getPaymentMethodOrThrow(e)})}_getPayPalCustomerAuthenticationState(){const e=this._store.getState().paymentProviderCustomer.getPaymentProviderCustomerOrThrow();var t;return((t=e)&&(\"authenticationState\"in t||\"addresses\"in t||\"instruments\"in t)?e:{}).authenticationState}_shouldAuthenticateUserWithFastlane(){const e=this._store.getState().cart.getCartOrThrow(),t=this._paypalCommerceFastlaneUtils.getStorageSessionId();return!this._getPayPalCustomerAuthenticationState()&&t===e.id}_shouldUsePayPalFastlaneShippingComponent(){const e=this._getPayPalCustomerAuthenticationState();return!!e&&e!==vs.CANCELED}_initializePayPalSdk(e,t){var n;return sa(this,void 0,void 0,function*(){const i=this._store.getState().cart.getCartOrThrow(),r=yield this._getPayPalPaymentMethodOrThrow(e),{isDeveloperModeApplicable:o,isFastlaneStylingEnabled:s}=(null==r?void 0:r.initializationData)||{},a=!!o,d=function(e,t){if(t||e)return function(e){var t,n;const i={},r=oe(e.root,oa),o=oe(e.input,oa),s=oe(e.toggle,oa),a=oe(null===(t=e.text)||void 0===t?void 0:t.body,oa),d=oe(null===(n=e.text)||void 0===n?void 0:n.caption,oa),c=e.branding;return Object.keys(r).length&&(i.root=r),Object.keys(o).length&&(i.input=o),Object.keys(s).length&&(i.toggle=s),Object.keys(a).length&&(i.text={},i.text.body=a),Object.keys(d).length&&(i.text=Object.assign({},i.text),i.text.caption=d),c&&(i.branding=c),i}(function(e,t){var n,i,r,o,s,a,d,c,u,l,h,p,m,g,y,_,f,S,C,E,v,I;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(g=null==t?void 0:t.toggle)||void 0===g?void 0:g.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(_=null===(y=null==t?void 0:t.text)||void 0===y?void 0:y.body)||void 0===_?void 0:_.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(S=null===(f=null==t?void 0:t.text)||void 0===f?void 0:f.body)||void 0===S?void 0:S.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(E=null===(C=null==t?void 0:t.text)||void 0===C?void 0:C.caption)||void 0===E?void 0:E.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(I=null===(v=null==t?void 0:t.text)||void 0===v?void 0:v.caption)||void 0===I?void 0:I.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}(s?null===(n=null==r?void 0:r.initializationData)||void 0===n?void 0:n.fastlaneStyles:{},t),c=yield this._paypalSdkScriptLoader.getPayPalFastlaneSdk(r,i.currency.code,i.id,i.locale);yield this._paypalCommerceFastlaneUtils.initializePayPalFastlane(c,a,d)})}_authenticateUserWithFastlaneOtp(e){var t,n;return sa(this,void 0,void 0,function*(){const i=this._store.getState(),r=i.cart.getCartOrThrow(),o=null===(t=i.customer.getCustomer())||void 0===t?void 0:t.email,s=null===(n=i.billingAddress.getBillingAddress())||void 0===n?void 0:n.email,a=o||s||\"\",{customerContextId:d}=yield this._paypalCommerceFastlaneUtils.lookupCustomerOrThrow(a),c=yield this._paypalCommerceFastlaneUtils.triggerAuthenticationFlowOrThrow(d),{authenticationState:u,addresses:l,billingAddress:h,shippingAddress:p,instruments:m}=this._paypalCommerceFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,c);yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({authenticationState:u,addresses:l,instruments:m})),c.authenticationState===vs.CANCELED?this._paypalCommerceFastlaneUtils.removeStorageSessionId():this._paypalCommerceFastlaneUtils.updateStorageSessionId(r.id),h&&(yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(Object.assign(Object.assign({},h),{id:String(h.id)})))),p&&r.lineItems.physicalItems.length>0&&(yield this._store.dispatch(this._consignmentActionCreator.updateAddress(p)))})}_handlePayPalShippingAddressChange(){var e;return sa(this,void 0,void 0,function*(){const t=this._paypalCommerceFastlaneUtils.getPayPalFastlaneOrThrow(),{selectionChanged:n,selectedAddress:i}=yield t.profile.showShippingAddressSelector();if(n){const t=this._store.getState(),n=t.shippingAddress.getShippingAddressesOrThrow(),o=t.paymentProviderCustomer.getPaymentProviderCustomer(),s=(r=o)&&(\"authenticationState\"in r||\"addresses\"in r||\"instruments\"in r)?o:{},a=this._paypalCommerceFastlaneUtils.mapPayPalToBcAddress(i.address,i.name,i.phoneNumber,null===(e=n[0])||void 0===e?void 0:e.customFields),d=this._paypalCommerceFastlaneUtils.filterAddresses([a,...s.addresses||[]]);return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(Object.assign(Object.assign({},s),{addresses:d}))),yield this._store.dispatch(this._consignmentActionCreator.updateAddress(a)),a}var r})}}const da=[\"payment_element_beta_2\",\"alipay_pm_beta_1\",\"link_default_integration_beta_1\",\"shipping_address_element_beta_1\",\"address_element_beta_1\"];var ca;class ua{constructor(e,t,n,i){this._store=e,this._stripeScriptLoader=t,this._consignmentActionCreator=n,this._paymentMethodActionCreator=i}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}initialize(e){return t=this,n=void 0,r=function*(){if(!e.stripeupe)throw new Dt('Unable to proceed because \"options\" argument is not provided.');const{container:t,gatewayId:n,methodId:i,onChangeShipping:r,getStyles:o,availableCountries:s,getStripeState:a}=e.stripeupe;Object.entries(e.stripeupe).forEach(([e,t])=>{if(!t)throw new Dt(`Unable to proceed because \"${e}\" argument is not provided.`)});const d=yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(n,{params:{method:i}})),c=d.paymentMethods.getPaymentMethodOrThrow(i,n),{initializationData:u}=c;if(!c||!c.initializationData.stripePublishableKey||!c.clientToken)throw new Ze(Ye.MissingPaymentMethod);let l;this._stripeUPEClient=yield this._stripeScriptLoader.getStripeClient(u,d.cart.getLocale(),Fs.V3,da,\"2020-03-02;alipay_beta=v1;link_beta=v1\");const h=o&&o(),{form:{getShippingAddressFields:p},shippingAddress:{getShippingAddress:m}}=this._store.getState(),g=p([],\"\");l=h?{variables:{colorPrimary:h.fieldInnerShadow,colorBackground:h.fieldBackground,colorText:h.labelText,colorDanger:h.fieldErrorText,colorTextSecondary:h.labelText,colorTextPlaceholder:h.fieldPlaceholderText,spacingUnit:\"4px\",borderRadius:\"4px\"},rules:{\".Input\":{borderColor:h.fieldBorder,color:h.fieldText,boxShadow:h.fieldInnerShadow}}}:{variables:{spacingUnit:\"4px\",borderRadius:\"4px\"}},this._stripeElements=yield this._stripeScriptLoader.getElements(this._stripeUPEClient,{clientSecret:c.clientToken,appearance:l});const y=m(),_=g.find(e=>\"phone\"===e.name);let f={mode:Ps.SHIPPING,allowedCountries:[s],fields:{phone:\"always\"},validation:{phone:{required:_&&_.required?\"always\":\"never\"}},display:{name:Ts.SPLIT}};if(y){const{stateOrProvinceCode:e,countryCode:t,lastName:n,firstName:i,phone:r,address1:o,address2:s,city:d,postalCode:c}=y,u=e&&t?a(t,e):e;f=Object.assign(Object.assign({},f),{defaultValues:{firstName:i,lastName:n,phone:r,address:{line1:o,line2:s,city:d,state:u,postal_code:c,country:t}}})}let S=this._stripeElements.getElement(Ns.SHIPPING);return S&&S.destroy(),S=this._stripeElements.create(Ns.SHIPPING,f),S.on(Us.CHANGE,e=>{if(!(\"isNewAddress\"in e))throw new Ze(Ye.MissingShippingAddress);(e.complete||e.isNewAddress)&&(this.sendData&&clearTimeout(this.sendData),this.sendData=setTimeout(()=>{r(Object.assign(Object.assign({},e),{phoneFieldRequired:!!_&&_.required}))},1e3))}),S.mount(`#${t}`),Promise.resolve(this._store.getState())},new((i=void 0)||(i=Promise))(function(e,o){function s(e){try{d(r.next(e))}catch(e){o(e)}}function a(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}deinitialize(){return Promise.resolve(this._store.getState())}}!function(e){e.SendSignInEmailRequested=\"SEND_SIGNIN_EMAIL_REQUESTED\",e.SendSignInEmailSucceeded=\"SEND_SIGNIN_EMAIL_SUCCEEDED\",e.SendSignInEmailFailed=\"SEND_SIGNIN_EMAIL_FAILED\"}(ca||(ca={}));class la{constructor(e){this._requestSender=e}sendSignInEmail(e,t){return m(E(d(ca.SendSignInEmailRequested)),g(()=>{return n=this,i=void 0,o=function*(){const{body:n}=yield this._requestSender.sendSignInEmail(e,t);return d(ca.SendSignInEmailSucceeded,n)},new((r=void 0)||(r=Promise))(function(e,t){function s(e){try{d(o.next(e))}catch(e){t(e)}}function a(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}d((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe(I(e=>je(ca.SendSignInEmailFailed,e)))}}class ha{constructor(e){this._requestSender=e}sendSignInEmail({email:e,redirectUrl:t},{timeout:n}={}){const i=Object.assign({Accept:tt.JsonV1},Ve);return this._requestSender.post(\"/login.php?action=passwordless_login\",{body:{email:e,redirect_url:t||mn(window.top?window.top.location.href:\"\").pathname},headers:i,timeout:n})}}class pa{constructor(e){this._messageCustomizer=e}transform(e){var t;return e.message=(t=this._messageCustomizer(e))?t.split(/(?:\\r\\n|\\n|\\r)/).map(e=>e.replace(/^\\s+/gm,\"\")).join(\" \").trim():\"\",e}}let ma=class{constructor(e,t,n,i,r,o,s,a,d,c,u,l,h,p,m,g,y,_,f,S,C,E,v,I,b,O,w,A,P){this._store=e,this._storeProjection=t,this._extensionMessenger=n,this._extensionEventBroadcaster=i,this._b2bTokenActionCreator=r,this._billingAddressActionCreator=o,this._checkoutActionCreator=s,this._configActionCreator=a,this._customerActionCreator=d,this._consignmentActionCreator=c,this._countryActionCreator=u,this._couponActionCreator=l,this._customerStrategyActionCreator=h,this._errorActionCreator=p,this._giftCertificateActionCreator=m,this._instrumentActionCreator=g,this._orderActionCreator=y,this._paymentMethodActionCreator=_,this._paymentStrategyActionCreator=f,this._pickupOptionActionCreator=S,this._shippingCountryActionCreator=C,this._shippingStrategyActionCreator=E,this._signInEmailActionCreator=v,this._spamProtectionActionCreator=I,this._storeCreditActionCreator=b,this._subscriptionsActionCreator=O,this._formFieldsActionCreator=w,this._extensionActionCreator=A,this._workerExtensionMessenger=P,this._errorTransformer=function(e=\"development\"===ct()){return new pa(t=>{if(!e||!function(e){return!(!e.subtype&&!e.type)}(t))return t.message;switch(t.subtype||t.type){case Ye.MissingConsignments:return`\\n                ${t.message}\\n                The data could be unavailable because no shipping address has been provided.\\n                To fix this, create a consignment or update the shipping address before performing\\n                the same action again.\\n            `;case Ye.MissingCart:case Ye.MissingCheckout:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server yet.\\n                To fix this issue, you can try calling \\`CheckoutService#loadCheckout\\`\\n                before performing the same action again.\\n            `;case Ye.MissingCheckoutConfig:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server yet.\\n                To fix this issue, you need to make sure \\`CheckoutService\\` is initialized\\n                properly by calling \\`CheckoutService#loadCheckout\\` before performing any\\n                other actions.\\n            `;case Ye.MissingOrder:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server yet.\\n                To fix this issue, you can try calling \\`CheckoutService#loadOrder\\`\\n                before performing the same action again.\\n            `;case Ye.MissingOrderId:return`\\n                ${t.message}\\n                The data could be unavailable because no order has been created yet. You have\\n                to first create the order before you can perform the action.\\n            `;case Ye.MissingPaymentMethod:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server, or\\n                configured by the merchant yet. To fix the former issue, you can try calling\\n                \\`CheckoutService#loadPaymentMethods\\` before performing the same action again.\\n            `;case en.CustomerNotInitialized:return\"\\n                In order to initialize the customer step of checkout, you need to call\\n                `CheckoutService#initializeCustomer`. Afterwards, you should be able to\\n                submit customer details.\\n            \";case en.PaymentNotInitialized:return`\\n                ${t.message}\\n                In order to initialize the payment step of checkout, you need to call\\n                \\`CheckoutService#initializePayment\\`. Afterwards, you should be able to\\n                submit payment details.\\n            `;case en.ShippingNotInitialized:return`\\n                ${t.message}\\n                In order to initialize the shipping step of checkout, you need to call\\n                \\`CheckoutService#initializeShipping\\`. Afterwards, you should be able to\\n                submit shipping details.\\n            `;default:return t.message}})}()}getState(){return this._storeProjection.getState()}notifyState(){this._storeProjection.notifyState()}subscribe(e,...t){return this._storeProjection.subscribe(e,...t)}hydrateInitialState(e){return this._dispatch(this._checkoutActionCreator.hydrateInitialState(e))}loadCheckout(e,t){return this._dispatch(e?this._checkoutActionCreator.loadCheckout(e,t):this._checkoutActionCreator.loadDefaultCheckout(t))}updateCheckout(e,t){const n=this._checkoutActionCreator.updateCheckout(e,t);return this._dispatch(n)}loadOrder(e,t){const n=this._orderActionCreator.loadOrder(e,t),i=this._formFieldsActionCreator.loadFormFields(t),r=this._configActionCreator.loadConfig(t);return Promise.all([this._dispatch(n),this._dispatch(r,{queueId:\"config\"}),this._dispatch(i,{queueId:\"formFields\"})]).then(()=>this.getState())}submitOrder(e,t){const n=this._paymentStrategyActionCreator.execute(e,t);return this._dispatch(n,{queueId:\"paymentStrategy\"})}finalizeOrderIfNeeded(e){const t=this._paymentStrategyActionCreator.finalize(e);return this._dispatch(t,{queueId:\"paymentStrategy\"})}loadPaymentMethods(e){const t=this._paymentMethodActionCreator.loadPaymentMethods(e);return this._dispatch(t,{queueId:\"paymentMethods\"})}loadPaymentMethodByIds(e,t){const n=this._paymentMethodActionCreator.loadPaymentMethodsById(e,t);return this._dispatch(n,{queueId:\"paymentMethods\"})}loadPaymentMethod(e,t){const n=this._paymentMethodActionCreator.loadPaymentMethod(e,t);return this._dispatch(n,{queueId:\"paymentMethods\"})}initializePayment(e){const t=this._paymentStrategyActionCreator.initialize(e);return this._dispatch(t,{queueId:\"paymentStrategy\"})}deinitializePayment(e){const t=this._paymentStrategyActionCreator.deinitialize(e);return this._dispatch(t,{queueId:\"paymentStrategy\"})}loadBillingCountries(e){const t=this._countryActionCreator.loadCountries(e);return this._dispatch(t,{queueId:\"billingCountries\"})}loadShippingCountries(e){const t=this._shippingCountryActionCreator.loadCountries(e);return this._dispatch(t,{queueId:\"shippingCountries\"})}loadPickupOptions(e){const t=this._pickupOptionActionCreator.loadPickupOptions(e);return this._dispatch(t,{queueId:\"pickupOptions\"})}loadBillingAddressFields(e){return this.loadBillingCountries(e)}loadShippingAddressFields(e){return this.loadShippingCountries(e)}initializeCustomer(e){const t=this._customerStrategyActionCreator.initialize(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}deinitializeCustomer(e){const t=this._customerStrategyActionCreator.deinitialize(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}sendSignInEmail(e,t){const n=this._signInEmailActionCreator.sendSignInEmail(e,t);return this._dispatch(n,{queueId:\"signInEmail\"})}getB2BToken(e){const t=this._b2bTokenActionCreator.loadB2BToken(e);return this._dispatch(t,{queueId:\"b2bToken\"})}createCustomerAccount(e,t){const n=this._customerActionCreator.createCustomer(e,t);return this._dispatch(n)}createCustomerAddress(e,t){const n=this._customerActionCreator.createAddress(e,t);return this._dispatch(n)}updateSubscriptions(e,t){const n=this._subscriptionsActionCreator.updateSubscriptions(e,t);return this._dispatch(n,{queueId:\"subscriptions\"})}continueAsGuest(e,t){const n=this._billingAddressActionCreator.continueAsGuest(e,t);return this._dispatch(n)}signInCustomer(e,t){const n=this._customerStrategyActionCreator.signIn(e,t);return this._dispatch(n,{queueId:\"customerStrategy\"})}signOutCustomer(e){const t=this._customerStrategyActionCreator.signOut(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}executePaymentMethodCheckout(e){const t=this._customerStrategyActionCreator.executePaymentMethodCheckout(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}loadShippingOptions(e){const t=this._consignmentActionCreator.loadShippingOptions(e);return this._dispatch(t)}initializeShipping(e){const t=this._shippingStrategyActionCreator.initialize(e);return this._dispatch(t,{queueId:\"shippingStrategy\"})}deinitializeShipping(e){const t=this._shippingStrategyActionCreator.deinitialize(e);return this._dispatch(t,{queueId:\"shippingStrategy\"})}selectShippingOption(e,t){const n=this._shippingStrategyActionCreator.selectOption(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}updateShippingAddress(e,t){const n=this._shippingStrategyActionCreator.updateAddress(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}createConsignments(e,t){const n=this._consignmentActionCreator.createConsignments(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}deleteConsignment(e,t){const n=this._consignmentActionCreator.deleteConsignment(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}updateConsignment(e,t){const n=this._consignmentActionCreator.updateConsignment(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}assignItemsToAddress(e,t){const n=this._consignmentActionCreator.assignItemsByAddress(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}unassignItemsToAddress(e,t){const n=this._consignmentActionCreator.unassignItemsByAddress(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}selectConsignmentShippingOption(e,t,n){const i=this._consignmentActionCreator.updateShippingOption({id:e,shippingOptionId:t},n);return this._dispatch(i,{queueId:\"shippingStrategy\"})}updateBillingAddress(e,t={}){const n=this._billingAddressActionCreator.updateAddress(e,t);return this._dispatch(n)}applyStoreCredit(e,t){const n=this._storeCreditActionCreator.applyStoreCredit(e,t);return this._dispatch(n)}applyCoupon(e,t){const n=this._couponActionCreator.applyCoupon(e,t);return this._dispatch(n)}removeCoupon(e,t){const n=this._couponActionCreator.removeCoupon(e,t);return this._dispatch(n)}applyGiftCertificate(e,t){const n=this._giftCertificateActionCreator.applyGiftCertificate(e,t);return this._dispatch(n)}removeGiftCertificate(e,t){const n=this._giftCertificateActionCreator.removeGiftCertificate(e,t);return this._dispatch(n)}loadInstruments(){const e=this._instrumentActionCreator.loadInstruments();return this._dispatch(e)}deleteInstrument(e){const t=this._instrumentActionCreator.deleteInstrument(e);return this._dispatch(t).then(()=>this.loadInstruments())}clearError(e){const t=this._errorActionCreator.clearError(e);return this._dispatch(t)}initializeSpamProtection(e){const t=this._spamProtectionActionCreator.initialize(e);return this._dispatch(t,{queueId:\"spamProtection\"})}executeSpamCheck(){const e=this._spamProtectionActionCreator.verifyCheckoutSpamProtection();return this._dispatch(e,{queueId:\"spamProtection\"})}loadExtensions(e){const t=this._extensionActionCreator.loadExtensions(e);return this._dispatch(t,{queueId:\"extensions\"})}renderExtension(e,t){return n=this,i=void 0,o=function*(){const n=this._extensionActionCreator.renderExtension(e,t,this._workerExtensionMessenger),i=yield this._dispatch(n,{queueId:\"extensions\"});return this._extensionEventBroadcaster.listen(),i},new((r=void 0)||(r=Promise))(function(e,t){function s(e){try{d(o.next(e))}catch(e){t(e)}}function a(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}clearExtensionCache(e){this._extensionMessenger.clearCacheByRegion(e)}postMessageToExtension(e,t){this._extensionMessenger.post(e,t)}handleExtensionCommand(e,t,n){return this._extensionMessenger.listenForCommand(e,t,n)}handleExtensionQuery(e,t,n){return this._extensionMessenger.listenForQuery(e,t,n)}_dispatch(e,t){return this._store.dispatch(e,t).then(()=>this.getState()).catch(e=>{throw this._errorTransformer.transform(e)})}};ma=function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([Tn],ma);const ga=ma;function ya(e){return(...t)=>{const n=t.pop();return e(...t,(...e)=>{const t=n(...e);return\"function\"==typeof t?fe(t):t})}}const _a=ya(Te),fa=ya(ke(Re,(e,t)=>Me(e,t)));const Sa={body:{},headers:{},status:0};class Ca extends Hn{constructor(e,{message:t,errors:n}={}){const{body:i,headers:r,status:o}=e||Sa;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=r,this.status=o,this.errors=n||[]}}class Ea extends Ca{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class va extends ft{constructor(e,t){super(e,{message:t||\"An unexpected error has occurred. The checkout process cannot continue as a result.\"}),this.name=\"UnrecoverableError\",this.type=\"unrecoverable\"}}function Ia(e){return e.reduce((e,t)=>t?[...e,t]:e,[]).join(\" \")}class ba extends ft{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}class Oa{constructor(){this._factoryMethods={},this.register(\"default\",(e,t)=>new ft(e,{message:t})),this.register(\"internal\",(e,t)=>function(e,t){const{body:n}=e,{errors:i=[]}=n;return new ft(e,{message:Ia(i)||n.detail||n.title||t,errors:i.length?i.map(e=>({code:n.type,message:e})):[{code:n.type,message:n.detail||n.title}]})}(e,t)),this.register(\"storefront\",(e,t)=>function(e,t){const{body:n}=e;return new ft(e,{message:t||n.detail||n.title,errors:[{code:n.code||n.type,message:n.detail||n.title}]})}(e,t)),this.register(\"payment\",(e,t)=>Mi(e,t)),this.register(\"timeout\",e=>new ba(e))}register(e,t){this._factoryMethods[e]=t}createError(e,t){return(this._factoryMethods[this._getType(e)]||this._factoryMethods.default)(e,t)}_getType(e){if(0===e.status)return\"timeout\";if(this._isStorefrontErrorResponseBody(e.body))return\"storefront\";if(this._isInternalErrorResponseBody(e.body)){const t=X(e.body.type.split(\"/\"));return t&&this._factoryMethods[t]?t:\"internal\"}const t=X(e.body&&e.body.errors);return t&&t.code&&this._factoryMethods[t.code]?t.code:\"payment\"}_isStorefrontErrorResponseBody(e){const t=e;return!this._isInternalErrorResponseBody(e)&&\"string\"==typeof t.title&&\"string\"==typeof t.type&&\"number\"==typeof t.status&&\"string\"==typeof t.detail}_isInternalErrorResponseBody(e){const t=e;return\"object\"==typeof t.errors&&\"string\"==typeof t.title&&\"string\"==typeof t.type&&\"number\"==typeof t.status}}function wa(e,t){return Array.isArray(e)?e.map(e=>wa(e,t)):$(e)?he(oe(e,t),(e,n,i)=>{e[i]=wa(n,t)},{}):e}function Aa(e,t){return function(e){return e.type===ot.ClearError}(t)?wa(e,e=>e===t.payload):e}function Pa(e,t,n){return e===t||(e&&t&&\"object\"==typeof e&&\"object\"==typeof t?Array.isArray(e)&&Array.isArray(t)?function(e,t,n){if(e.length!==t.length)return!1;for(let i=0,r=e.length;i<r;i++)if(!Pa(e[i],t[i],n))return!1;return!0}(e,t,n):!Array.isArray(e)&&!Array.isArray(t)&&(e instanceof Date&&t instanceof Date?function(e,t){return e.getTime()===t.getTime()}(e,t):!(e instanceof Date||t instanceof Date)&&(e instanceof RegExp&&t instanceof RegExp?function(e,t){return e.toString()===t.toString()}(e,t):!(e instanceof RegExp||t instanceof RegExp)&&function(e,t,n){const i=n&&n.keyFilter,r=i?Object.keys(e).filter(i):Object.keys(e),o=i?Object.keys(t).filter(i):Object.keys(t);if(r.length!==o.length)return!1;for(let i=0,o=r.length;i<o;i++){const o=r[i];if(!Object.prototype.hasOwnProperty.call(t,o))return!1;if(!Pa(e[o],t[o],n))return!1}return!0}(e,t,n))):e===t)}function Ta(e,t,n){return e&&Object.prototype.hasOwnProperty.call(e,t)&&Pa(e[t],n)?e:Object.assign(Object.assign({},e),{[t]:n})}const ka={errors:{},statuses:{}};function Ra(e=ka,t){return s({data:Ma,errors:a(La,Aa),statuses:Da})(e,t)}function Ma(e,t){return t.type===Ge.LoadB2BTokenSucceeded?t.payload:e}function La(e=ka.errors,t){switch(t.type){case Ge.LoadB2BTokenRequested:case Ge.LoadB2BTokenSucceeded:return Ta(e,\"loadError\",void 0);case Ge.LoadB2BTokenFailed:return Ta(e,\"loadError\",t.payload);default:return e}}function Da(e=ka.statuses,t){switch(t.type){case Ge.LoadB2BTokenRequested:return Ta(e,\"isLoading\",!0);case Ge.LoadB2BTokenFailed:case Ge.LoadB2BTokenSucceeded:return Ta(e,\"isLoading\",!1);default:return e}}function Fa(e,t){return void 0===t||Pa(e,t)?e:t}const Na={errors:{},statuses:{}};function xa(e=Na,t){return s({data:Ua,errors:a(za,Aa),statuses:qa})(e,t)}function Ua(e,t){var n,i;switch(t.type){case We.UpdateBillingAddressSucceeded:case We.ContinueAsGuestSucceeded:case zt.LoadCheckoutSucceeded:return Fa(e,t.payload&&t.payload.billingAddress);case qt.HydrateInitialState:return Fa(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.billingAddress);default:return e}}function za(e=Na.errors,t){switch(t.type){case zt.LoadCheckoutRequested:case zt.LoadCheckoutSucceeded:return Ta(e,\"loadError\",void 0);case zt.LoadCheckoutFailed:return Ta(e,\"loadError\",t.payload);case We.UpdateBillingAddressRequested:case We.UpdateBillingAddressSucceeded:return Ta(e,\"updateError\",void 0);case We.UpdateBillingAddressFailed:return Ta(e,\"updateError\",t.payload);case Xr.UpdateSubscriptionsRequested:case Xr.UpdateSubscriptionsSucceeded:case We.ContinueAsGuestRequested:case We.ContinueAsGuestSucceeded:return Ta(e,\"continueAsGuestError\",void 0);case Xr.UpdateSubscriptionsFailed:case We.ContinueAsGuestFailed:return Ta(e,\"continueAsGuestError\",t.payload);default:return e}}function qa(e=Na.statuses,t){switch(t.type){case zt.LoadCheckoutRequested:return Ta(e,\"isLoading\",!0);case zt.LoadCheckoutSucceeded:case zt.LoadCheckoutFailed:return Ta(e,\"isLoading\",!1);case We.UpdateBillingAddressRequested:return Ta(e,\"isUpdating\",!0);case We.UpdateBillingAddressFailed:case We.UpdateBillingAddressSucceeded:return Ta(e,\"isUpdating\",!1);case We.ContinueAsGuestRequested:case Xr.UpdateSubscriptionsRequested:return Ta(e,\"isContinuingAsGuest\",!0);case Xr.UpdateSubscriptionsSucceeded:case Xr.UpdateSubscriptionsFailed:case We.ContinueAsGuestFailed:case We.ContinueAsGuestSucceeded:return Ta(e,\"isContinuingAsGuest\",!1);default:return e}}const Ba=function e(t,n,i){const{matchObject:r=(e,t)=>void 0!==e.id&&e.id===t.id}=i||{};if(!t)return n;if(!n||t===n)return t;let o=0,s=0;const a=(e,t,n)=>(o+=e===t?1:0,s+=e===n?1:0,e),d=n.map((n,i)=>{const o=t&&t[i];return oo(o)&&oo(n)?r(o,n)?a(ja(o,n),o,n):a(Fa(o,n),o,n):j(o)&&j(n)?a(e(o,n),o,n):a(Fa(o,n),o,n)});return o===n.length&&t&&t.length===n.length?t:s===n.length?n:d},ja=function e(t,n){return t?n&&t!==n?Object.keys(n).reduce((t,i)=>{const r=t[i],o=n[i];return oo(r)&&oo(o)?Ta(t,i,e(r,o)):j(r)&&j(o)?Ta(t,i,Ba(r,o)):Ta(t,i,o)},t):t:n},Ga={errors:{},statuses:{}};function Ha(e=Ga,t){return s({data:Va,errors:a(Wa,Aa),statuses:Ya})(e,t)}function Va(e,t){var n,i;switch(t.type){case We.UpdateBillingAddressSucceeded:case zt.LoadCheckoutSucceeded:case Gr.CreateConsignmentsSucceeded:case Gr.DeleteConsignmentSucceeded:case Gr.UpdateConsignmentSucceeded:case Gr.UpdateShippingOptionSucceeded:case Gr.LoadShippingOptionsSucceeded:case vt.ApplyCouponSucceeded:case vt.RemoveCouponSucceeded:case wt.ApplyGiftCertificateSucceeded:case wt.RemoveGiftCertificateSucceeded:return ja(e,t.payload&&t.payload.cart);case qt.HydrateInitialState:return ja(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.cart);default:return e}}function Ya(e=Ga.statuses,t){switch(t.type){case zt.LoadCheckoutRequested:return Ta(e,\"isLoading\",!0);case zt.LoadCheckoutFailed:case zt.LoadCheckoutSucceeded:return Ta(e,\"isLoading\",!1);default:return e}}function Wa(e=Ga.errors,t){switch(t.type){case zt.LoadCheckoutRequested:case zt.LoadCheckoutSucceeded:return Ta(e,\"loadError\",void 0);case zt.LoadCheckoutFailed:return Ta(e,\"loadError\",t.payload);default:return e}}var $a;!function(e){e.InitializeButtonFailed=\"INITIALIZE_BUTTON_FAILED\",e.InitializeButtonRequested=\"INITIALIZE_BUTTON_REQUESTED\",e.InitializeButtonSucceeded=\"INITIALIZE_BUTTON_SUCCEEDED\",e.DeinitializeButtonFailed=\"DEINITIALIZE_BUTTON_FAILED\",e.DeinitializeButtonRequested=\"DEINITIALIZE_BUTTON_REQUESTED\",e.DeinitializeButtonSucceeded=\"DEINITIALIZE_BUTTON_SUCCEEDED\"}($a||($a={}));const Ka={data:{},errors:{},statuses:{}},Za={initializedContainers:{}},Qa={},Ja={};function Xa(e=Ka,t){return t.meta&&t.meta.methodId?s({data:s({[t.meta.methodId]:ed}),errors:s({[t.meta.methodId]:td}),statuses:s({[t.meta.methodId]:nd})})(e,t):e}function ed(e=Za,t){switch(t.type){case $a.InitializeButtonSucceeded:return t.meta&&t.meta.containerId?ja(e,{initializedContainers:{[t.meta.containerId]:!0}}):e;case $a.DeinitializeButtonSucceeded:return Ta(e,\"initializedContainers\",{})}return e}function td(e=Qa,t){switch(t.type){case $a.InitializeButtonRequested:case $a.InitializeButtonSucceeded:return Ta(e,\"initializeError\",void 0);case $a.InitializeButtonFailed:return Ta(e,\"initializeError\",t.payload);case $a.DeinitializeButtonRequested:case $a.DeinitializeButtonSucceeded:return Ta(e,\"deinitializeError\",void 0);case $a.DeinitializeButtonFailed:return Ta(e,\"deinitializeError\",t.payload);default:return e}}function nd(e=Ja,t){switch(t.type){case $a.InitializeButtonRequested:return Ta(e,\"isInitializing\",!0);case $a.InitializeButtonFailed:case $a.InitializeButtonSucceeded:return Ta(e,\"isInitializing\",!1);case $a.DeinitializeButtonRequested:return Ta(e,\"isDeinitializing\",!0);case $a.DeinitializeButtonFailed:case $a.DeinitializeButtonSucceeded:return Ta(e,\"isDeinitializing\",!1);default:return e}}const id={meta:{},errors:{},statuses:{}};function rd(e=id,t){return s({data:od,errors:a(sd,Aa),statuses:ad})(e,t)}function od(e,t){var n,i;switch(t.type){case gt.LoadConfigSucceeded:return ja(e,t.payload);case qt.HydrateInitialState:{const r=ja(e,null===(n=t.payload)||void 0===n?void 0:n.config);return r&&(null===(i=t.payload)||void 0===i?void 0:i.b2bApiSettings)?Object.assign(Object.assign({},r),{storeConfig:Object.assign(Object.assign({},r.storeConfig),{b2bApiSettings:t.payload.b2bApiSettings})}):r}default:return e}}function sd(e=id.errors,t){switch(t.type){case gt.LoadConfigSucceeded:return Ta(e,\"loadError\",void 0);case gt.LoadConfigFailed:return Ta(e,\"loadError\",t.payload);default:return e}}function ad(e=id.statuses,t){switch(t.type){case gt.LoadConfigRequested:return Ta(e,\"isLoading\",!0);case gt.LoadConfigSucceeded:case gt.LoadConfigFailed:return Ta(e,\"isLoading\",!1);default:return e}}const dd={errors:{},statuses:{}};function cd(e=dd,t){return s({data:ud,errors:a(ld,Aa),statuses:hd})(e,t)}function ud(e,t){var n,i;switch(t.type){case zt.LoadCheckoutSucceeded:case vt.ApplyCouponSucceeded:case Gr.UpdateShippingOptionSucceeded:case vt.RemoveCouponSucceeded:case Qn.LoadOrderSucceeded:return Ba(e,t.payload&&t.payload.coupons);case qt.HydrateInitialState:return Ba(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.coupons);default:return e}}function ld(e={},t){switch(t.type){case vt.ApplyCouponRequested:case vt.ApplyCouponSucceeded:return Ta(e,\"applyCouponError\",void 0);case vt.ApplyCouponFailed:return Ta(e,\"applyCouponError\",t.payload);case vt.RemoveCouponRequested:case vt.RemoveCouponSucceeded:return Ta(e,\"removeCouponError\",void 0);case vt.RemoveCouponFailed:return Ta(e,\"removeCouponError\",t.payload);default:return e}}function hd(e={},t){switch(t.type){case vt.ApplyCouponRequested:return Ta(e,\"isApplyingCoupon\",!0);case vt.ApplyCouponSucceeded:case vt.ApplyCouponFailed:return Ta(e,\"isApplyingCoupon\",!1);case vt.RemoveCouponRequested:return Ta(e,\"isRemovingCoupon\",!0);case vt.RemoveCouponSucceeded:case vt.RemoveCouponFailed:return Ta(e,\"isRemovingCoupon\",!1);default:return e}}const pd={errors:{},statuses:{}};function md(e=pd,t){return s({data:gd,errors:a(yd,Aa),statuses:_d})(e,t)}function gd(e,t){var n,i;switch(t.type){case zt.LoadCheckoutSucceeded:case Gr.CreateConsignmentsSucceeded:case Gr.UpdateConsignmentSucceeded:case Gr.DeleteConsignmentSucceeded:case Gr.UpdateShippingOptionSucceeded:case vt.ApplyCouponSucceeded:case vt.RemoveCouponSucceeded:case wt.ApplyGiftCertificateSucceeded:case wt.RemoveGiftCertificateSucceeded:return Ba(e,t.payload&&t.payload.giftCertificates);case qt.HydrateInitialState:return Ba(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.giftCertificates);default:return e}}function yd(e=pd.errors,t){switch(t.type){case wt.ApplyGiftCertificateRequested:case wt.ApplyGiftCertificateSucceeded:return Ta(e,\"applyGiftCertificateError\",void 0);case wt.ApplyGiftCertificateFailed:return Ta(e,\"applyGiftCertificateError\",t.payload);case wt.RemoveGiftCertificateRequested:case wt.RemoveGiftCertificateSucceeded:return Ta(e,\"removeGiftCertificateError\",void 0);case wt.RemoveGiftCertificateFailed:return Ta(e,\"removeGiftCertificateError\",t.payload);default:return e}}function _d(e=pd.statuses,t){switch(t.type){case wt.ApplyGiftCertificateRequested:return Ta(e,\"isApplyingGiftCertificate\",!0);case wt.ApplyGiftCertificateSucceeded:case wt.ApplyGiftCertificateFailed:return Ta(e,\"isApplyingGiftCertificate\",!1);case wt.RemoveGiftCertificateRequested:return Ta(e,\"isRemovingGiftCertificate\",!0);case wt.RemoveGiftCertificateSucceeded:case wt.RemoveGiftCertificateFailed:return Ta(e,\"isRemovingGiftCertificate\",!1);default:return e}}const fd={errors:{},statuses:{}};function Sd(e=fd,t){return s({data:Cd,errors:a(Ed,Aa),statuses:vd})(e,t)}function Cd(e,t){var n,i;switch(t.type){case We.ContinueAsGuestSucceeded:case zt.LoadCheckoutSucceeded:return ja(e,t.payload&&t.payload.customer);case Pt.CreateCustomerAddressSucceeded:return ja(e,t.payload);case qt.HydrateInitialState:return ja(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.customer);default:return e}}function Ed(e=fd.errors,t){switch(t.type){case Pt.CreateCustomerRequested:case Pt.CreateCustomerSucceeded:return Ta(e,\"createError\",void 0);case Pt.CreateCustomerFailed:return Ta(e,\"createError\",t.payload);case Pt.CreateCustomerAddressRequested:case Pt.CreateCustomerAddressSucceeded:return Ta(e,\"createAddressError\",void 0);case Pt.CreateCustomerAddressFailed:return Ta(e,\"createAddressError\",t.payload);default:return e}}function vd(e=fd.statuses,t){switch(t.type){case Pt.CreateCustomerRequested:return Ta(e,\"isCreating\",!0);case Pt.CreateCustomerFailed:case Pt.CreateCustomerSucceeded:return Ta(e,\"isCreating\",!1);case Pt.CreateCustomerAddressRequested:return Ta(e,\"isCreatingAddress\",!0);case Pt.CreateCustomerAddressFailed:case Pt.CreateCustomerAddressSucceeded:return Ta(e,\"isCreatingAddress\",!1);default:return e}}const Id={data:{},errors:{},statuses:{}};function bd(e=Id,t){return s({data:Od,errors:a(wd,Aa),statuses:Ad})(e,t)}function Od(e=Id.data,t){switch(t.type){case Ut.InitializeSucceeded:return ja(e,{[t.meta&&t.meta.methodId]:{isInitialized:!0}});case Ut.DeinitializeSucceeded:return ja(e,{[t.meta&&t.meta.methodId]:{isInitialized:!1}})}return e}function wd(e=Id.errors,t){switch(t.type){case Ut.InitializeRequested:case Ut.InitializeSucceeded:return ja(e,{initializeErrors:Object.assign({},e.initializeErrors),initializeMethodId:e.initializeMethodId?e.initializeMethodId:void 0});case Ut.InitializeFailed:return ja(e,{initializeErrors:Object.assign(Object.assign({},e.initializeErrors),{[t.meta&&t.meta.methodId]:t.payload}),initializeMethodId:t.meta&&t.meta.methodId});case Ut.DeinitializeRequested:case Ut.DeinitializeSucceeded:return ja(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case Ut.DeinitializeFailed:return ja(e,{deinitializeError:t.payload,deinitializeMethodId:t.meta&&t.meta.methodId});case Ut.SignInRequested:case Ut.SignInSucceeded:return ja(e,{signInError:void 0,signInMethodId:void 0});case Ut.SignInFailed:return ja(e,{signInError:t.payload,signInMethodId:t.meta&&t.meta.methodId});case Ut.SignOutRequested:case Ut.SignOutSucceeded:return ja(e,{signOutError:void 0,signOutMethodId:void 0});case Ut.SignOutFailed:return ja(e,{signOutError:t.payload,signOutMethodId:t.meta&&t.meta.methodId});case Ut.ExecutePaymentMethodCheckoutRequested:case Ut.ExecutePaymentMethodCheckoutSucceeded:return ja(e,{executePaymentMethodCheckoutError:void 0,executePaymentMethodCheckoutMethodId:void 0});case Ut.ExecutePaymentMethodCheckoutFailed:return ja(e,{executePaymentMethodCheckoutError:t.payload,executePaymentMethodCheckoutMethodId:t.meta&&t.meta.methodId});case Ut.WidgetInteractionStarted:case Ut.WidgetInteractionFinished:return ja(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case Ut.WidgetInteractionFailed:return ja(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta.methodId});default:return e}}function Ad(e=Id.statuses,t){switch(t.type){case Ut.InitializeRequested:return ja(e,{isInitializing:!0,initializeMethodId:t.meta&&t.meta.methodId});case Ut.InitializeFailed:case Ut.InitializeSucceeded:return ja(e,{isInitializing:!1,initializeMethodId:void 0});case Ut.DeinitializeRequested:return ja(e,{isDeinitializing:!0,deinitializeMethodId:t.meta&&t.meta.methodId});case Ut.DeinitializeFailed:case Ut.DeinitializeSucceeded:return ja(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case Ut.SignInRequested:return ja(e,{isSigningIn:!0,signInMethodId:t.meta&&t.meta.methodId});case Ut.SignInFailed:case Ut.SignInSucceeded:return ja(e,{isSigningIn:!1,signInMethodId:void 0});case Ut.SignOutRequested:return ja(e,{isSigningOut:!0,signOutMethodId:t.meta&&t.meta.methodId});case Ut.SignOutFailed:case Ut.SignOutSucceeded:return ja(e,{isSigningOut:!1,signOutMethodId:void 0});case Ut.ExecutePaymentMethodCheckoutRequested:return ja(e,{isExecutingPaymentMethodCheckout:!0,executePaymentMethodCheckoutMethodId:t.meta&&t.meta.methodId});case Ut.ExecutePaymentMethodCheckoutFailed:case Ut.ExecutePaymentMethodCheckoutSucceeded:return ja(e,{isExecutingPaymentMethodCheckout:!1,executePaymentMethodCheckoutMethodId:void 0});case Ut.WidgetInteractionStarted:return ja(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta.methodId});case Ut.WidgetInteractionFinished:case Ut.WidgetInteractionFailed:return ja(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}const Pd={errors:{},statuses:{}};function Td(e=Pd,t){return s({data:kd,errors:a(Rd,Aa),statuses:Md})(e,t)}function kd(e,t){var n;return t.type===tn.LoadExtensionsSucceeded?Ba(e,t.payload):t.type===qt.HydrateInitialState?Ba(e,null===(n=t.payload)||void 0===n?void 0:n.extensions):e}function Rd(e=Pd.errors,t){switch(t.type){case tn.LoadExtensionsRequested:case tn.LoadExtensionsSucceeded:return Ta(e,\"loadError\",void 0);case tn.RenderExtensionRequested:case tn.RenderExtensionSucceeded:return Ta(e,\"renderError\",void 0);case tn.LoadExtensionsFailed:return Ta(e,\"loadError\",t.payload);case tn.RenderExtensionFailed:return Ta(e,\"renderError\",t.payload);default:return e}}function Md(e=Pd.statuses,t){switch(t.type){case tn.LoadExtensionsRequested:return Ta(e,\"isLoading\",!0);case tn.LoadExtensionsSucceeded:case tn.LoadExtensionsFailed:return Ta(e,\"isLoading\",!1);default:return e}}const Ld={errors:{},statuses:{}};function Dd(e=Ld,t){return s({data:Fd,extraFields:Nd,errors:a(xd,Aa),statuses:Ud})(e,t)}function Fd(e,t){var n;switch(t.type){case Wt.LoadFormFieldsSucceeded:return ja(e,t.payload);case qt.HydrateInitialState:return ja(e,null===(n=t.payload)||void 0===n?void 0:n.formFields);default:return e}}function Nd(e,t){var n,i;return t.type===qt.HydrateInitialState&&null!==(i=null===(n=t.payload)||void 0===n?void 0:n.extraFields)&&void 0!==i?i:e}function xd(e=Ld.errors,t){switch(t.type){case Wt.LoadFormFieldsSucceeded:return Ta(e,\"loadError\",void 0);case Wt.LoadFormFieldsFailed:return Ta(e,\"loadError\",t.payload);default:return e}}function Ud(e=Ld.statuses,t){switch(t.type){case Wt.LoadFormFieldsRequested:return Ta(e,\"isLoading\",!0);case Wt.LoadFormFieldsSucceeded:case Wt.LoadFormFieldsFailed:return Ta(e,\"isLoading\",!1);default:return e}}const zd={errors:{},statuses:{}};function qd(e=zd,t){return s({data:Bd,errors:a(jd,Aa),statuses:Gd})(e,t)}function Bd(e,t){return t.type===Zn.LoadCountriesSucceeded?Ba(e,t.payload):e}function jd(e=zd.errors,t){switch(t.type){case Zn.LoadCountriesRequested:case Zn.LoadCountriesSucceeded:return Ta(e,\"loadError\",void 0);case Zn.LoadCountriesFailed:return Ta(e,\"loadError\",t.payload);default:return e}}function Gd(e=zd.statuses,t){switch(t.type){case Zn.LoadCountriesRequested:return Ta(e,\"isLoading\",!0);case Zn.LoadCountriesSucceeded:case Zn.LoadCountriesFailed:return Ta(e,\"isLoading\",!1);default:return e}}const Hd={errors:{},meta:{},statuses:{}};function Vd(e=Hd,t){return s({data:Yd,errors:a($d,Aa),meta:Wd,statuses:Kd})(e,t)}function Yd(e,t){switch(t.type){case Qn.LoadOrderSucceeded:case Qn.LoadOrderPaymentsSucceeded:return ja(e,re(t.payload,[\"billingAddress\",\"coupons\"]));default:return e}}function Wd(e,t){switch(t.type){case Qn.FinalizeOrderSucceeded:case Qn.SubmitOrderSucceeded:return ja(e,Object.assign(Object.assign({},t.meta),{callbackUrl:t.payload&&t.payload.order.callbackUrl,orderToken:t.payload&&t.payload.order.token,payment:t.payload&&t.payload.order&&t.payload.order.payment}));default:return e}}function $d(e=Hd.errors,t){switch(t.type){case Qn.LoadOrderRequested:case Qn.LoadOrderSucceeded:case Qn.LoadOrderPaymentsSucceeded:case Qn.LoadOrderPaymentsRequested:return Ta(e,\"loadError\",void 0);case Qn.LoadOrderFailed:case Qn.LoadOrderPaymentsFailed:return Ta(e,\"loadError\",t.payload);default:return e}}function Kd(e=Hd.statuses,t){switch(t.type){case Qn.LoadOrderRequested:case Qn.LoadOrderPaymentsRequested:return Ta(e,\"isLoading\",!0);case Qn.LoadOrderSucceeded:case Qn.LoadOrderFailed:case Qn.LoadOrderPaymentsSucceeded:case Qn.LoadOrderPaymentsFailed:return Ta(e,\"isLoading\",!1);default:return e}}const Zd={};function Qd(e=Zd,t){return s({data:Jd})(e,t)}function Jd(e,t){switch(t.type){case Qn.LoadOrderPaymentsSucceeded:case Qn.LoadOrderSucceeded:return Fa(e,t.payload&&t.payload.billingAddress);default:return e}}function Xd(e={},t){return s({data:ec})(e,t)}function ec(e,t){return t.type===zi.SubmitPaymentSucceeded?t.payload:e}const tc={errors:{},statuses:{}};function nc(e=tc,t){return s({data:ic,errors:a(oc,Aa),meta:rc,statuses:sc})(e,t)}function ic(e,t){switch(t.type){case ci.LoadPaymentMethodSucceeded:return function(e,t,n){if(!t)return e;const i=ae(t,\"id\"),r=\"object\"==typeof n?de(n):n||i,o=N(e,r),s=[...e];if(-1===o)s.push(t);else{const n=e[o];s[o]=oo(n)&&oo(t)?ja(n,t):t}return s}(e||[],t.payload,t.payload&&{id:t.payload.id,gateway:t.payload.gateway});case ci.LoadPaymentMethodsSucceeded:return Ba(e,t.payload,{matchObject:(e,t)=>e.id===t.id&&e.gateway===t.gateway});default:return e}}function rc(e,t){return t.type===ci.LoadPaymentMethodsSucceeded?ja(e,t.meta):e}function oc(e=tc.errors,t){switch(t.type){case ci.LoadPaymentMethodsRequested:case ci.LoadPaymentMethodsSucceeded:return Ta(e,\"loadError\",void 0);case ci.LoadPaymentMethodsFailed:return Ta(e,\"loadError\",t.payload);case ci.LoadPaymentMethodRequested:case ci.LoadPaymentMethodSucceeded:return ja(e,{loadMethodId:void 0,loadMethodError:void 0});case ci.LoadPaymentMethodFailed:return ja(e,{loadMethodId:t.meta.methodId,loadMethodError:t.payload});default:return e}}function sc(e=tc.statuses,t){switch(t.type){case ci.LoadPaymentMethodsRequested:return Ta(e,\"isLoading\",!0);case ci.LoadPaymentMethodsSucceeded:case ci.LoadPaymentMethodsFailed:return Ta(e,\"isLoading\",!1);case ci.LoadPaymentMethodRequested:return ja(e,{isLoadingMethod:!0,loadMethodId:t.meta.methodId});case ci.LoadPaymentMethodSucceeded:case ci.LoadPaymentMethodFailed:return ja(e,{isLoadingMethod:!1,loadMethodId:void 0});default:return e}}const ac={data:{},errors:{},statuses:{}};function dc(e=ac,t){return s({data:cc,errors:a(uc,Aa),statuses:lc})(e,t)}function cc(e=ac.data,t){switch(t.type){case gi.InitializeSucceeded:if(t.meta){const{methodId:n,gatewayId:i}=t.meta,r=i?`${n}.${i}`:n;return ja(e,{[r]:{isInitialized:!0}})}break;case gi.DeinitializeSucceeded:if(t.meta){const{methodId:n,gatewayId:i}=t.meta,r=i?`${n}.${i}`:n;return ja(e,{[r]:{isInitialized:!1}})}}return e}function uc(e=ac.errors,t){switch(t.type){case gi.InitializeRequested:case gi.InitializeSucceeded:return ja(e,{initializeError:void 0,initializeMethodId:void 0});case gi.InitializeFailed:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return ja(e,{initializeError:t.payload,initializeMethodId:n})}case gi.DeinitializeRequested:case gi.DeinitializeSucceeded:return ja(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case gi.DeinitializeFailed:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return ja(e,{deinitializeError:t.payload,deinitializeMethodId:n})}case gi.ExecuteRequested:case gi.ExecuteSucceeded:return ja(e,{executeError:void 0,executeMethodId:void 0});case gi.ExecuteFailed:return ja(e,{executeError:t.payload,executeMethodId:t.meta&&t.meta.methodId});case gi.FinalizeRequested:case gi.FinalizeSucceeded:return ja(e,{finalizeError:void 0,finalizeMethodId:void 0});case gi.FinalizeFailed:return ja(e,{finalizeError:t.payload,finalizeMethodId:t.meta&&t.meta.methodId});case gi.WidgetInteractionStarted:case gi.WidgetInteractionFinished:return ja(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case gi.WidgetInteractionFailed:return ja(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta.methodId});default:return e}}function lc(e=ac.statuses,t){switch(t.type){case gi.InitializeRequested:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return ja(e,{isInitializing:!0,initializeMethodId:n})}case gi.InitializeFailed:case gi.InitializeSucceeded:return ja(e,{isInitializing:!1,initializeMethodId:void 0});case gi.DeinitializeRequested:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return ja(e,{isDeinitializing:!0,deinitializeMethodId:n})}case gi.DeinitializeFailed:case gi.DeinitializeSucceeded:return ja(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case gi.ExecuteRequested:return ja(e,{isExecuting:!0,executeMethodId:t.meta&&t.meta.methodId});case gi.ExecuteFailed:case gi.ExecuteSucceeded:return ja(e,{isExecuting:!1,executeMethodId:void 0});case gi.FinalizeRequested:return ja(e,{isFinalizing:!0,finalizeMethodId:t.meta&&t.meta.methodId});case gi.FinalizeFailed:case gi.FinalizeSucceeded:return ja(e,{isFinalizing:!1,finalizeMethodId:void 0});case gi.WidgetInteractionStarted:return ja(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta.methodId});case gi.WidgetInteractionFinished:case gi.WidgetInteractionFailed:return ja(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}const hc={data:{}};function pc(e=hc,t){return s({data:mc})(e,t)}function mc(e=hc.data,t){return t.type===xr.UpdatePaymentProviderCustomer?ja(e,t.payload):e}const gc={data:[],errors:{},statuses:{}};function yc(e=gc,t){return s({data:_c,errors:a(Sc,Aa),meta:fc,statuses:Cc})(e,t)}function _c(e=gc.data,t){return t.type===lo.LoadInstrumentsSucceeded?Ba(e,t.payload&&t.payload.vaultedInstruments||[]):e}function fc(e,t){switch(t.type){case lo.LoadInstrumentsSucceeded:case lo.DeleteInstrumentSucceeded:return ja(e,t.meta);default:return e}}function Sc(e=gc.errors,t){switch(t.type){case lo.LoadInstrumentsRequested:case lo.LoadInstrumentsSucceeded:return Ta(e,\"loadError\",void 0);case lo.DeleteInstrumentRequested:case lo.DeleteInstrumentSucceeded:return ja(e,{deleteError:void 0,failedInstrument:void 0});case lo.LoadInstrumentsFailed:return Ta(e,\"loadError\",t.payload);case lo.DeleteInstrumentFailed:return ja(e,{deleteError:t.payload,failedInstrument:t.meta.instrumentId});default:return e}}function Cc(e=gc.statuses,t){switch(t.type){case lo.LoadInstrumentsRequested:return Ta(e,\"isLoading\",!0);case lo.DeleteInstrumentRequested:return ja(e,{isDeleting:!0,deletingInstrument:t.meta.instrumentId});case lo.LoadInstrumentsSucceeded:case lo.LoadInstrumentsFailed:return Ta(e,\"isLoading\",!1);case lo.DeleteInstrumentSucceeded:case lo.DeleteInstrumentFailed:return ja(e,{isDeleting:!1,deletingInstrument:void 0});default:return e}}const Ec={data:{}};function vc(e=Ec,t){return t.meta&&t.meta.methodId?s({data:s({[t.meta.methodId]:Ic})})(e,t):e}function Ic(e,t){switch(t.type){case Ur.InitializeRemoteBillingSucceeded:return Ta(e,\"billing\",t.payload&&t.payload.billing);case Ur.InitializeRemoteShippingSucceeded:return Ta(e,\"shipping\",t.payload&&t.payload.shipping);case Ur.LoadRemoteSettingsSucceeded:return Ta(e,\"settings\",t.payload);case Ur.UpdateRemoteCheckout:return ja(e,t.payload);default:return e}}const bc={errors:{updateShippingOptionError:{},updateError:{},deleteError:{}},statuses:{isUpdating:{},isUpdatingShippingOption:{},isDeleting:{}}};function Oc(e=bc,t){return s({data:wc,errors:a(Ac,Aa),statuses:Pc})(e,t)}function wc(e,t){var n,i;switch(t.type){case zt.LoadCheckoutSucceeded:case Gr.LoadShippingOptionsSucceeded:case Gr.CreateConsignmentsSucceeded:case Gr.UpdateConsignmentSucceeded:case Gr.DeleteConsignmentSucceeded:case Gr.UpdateShippingOptionSucceeded:case vt.ApplyCouponSucceeded:case vt.RemoveCouponSucceeded:return Ba(e,t.payload&&t.payload.consignments);case Pt.SignOutCustomerSucceeded:return Ba(e,[]);case qt.HydrateInitialState:return Ba(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.consignments);default:return e}}function Ac(e=bc.errors,t){switch(t.type){case zt.LoadCheckoutRequested:case zt.LoadCheckoutSucceeded:case Gr.LoadShippingOptionsSucceeded:case Gr.LoadShippingOptionsRequested:return Ta(e,\"loadError\",void 0);case zt.LoadCheckoutFailed:case Gr.LoadShippingOptionsFailed:return Ta(e,\"loadError\",t.payload);case Gr.CreateConsignmentsRequested:case Gr.CreateConsignmentsSucceeded:return Ta(e,\"createError\",void 0);case Gr.CreateConsignmentsFailed:return Ta(e,\"createError\",t.payload);case Gr.UpdateConsignmentSucceeded:case Gr.UpdateConsignmentRequested:return t.meta?ja(e,{updateError:{[t.meta.id]:void 0}}):e;case Gr.UpdateConsignmentFailed:return t.meta?ja(e,{updateError:{[t.meta.id]:t.payload}}):e;case Gr.DeleteConsignmentSucceeded:case Gr.DeleteConsignmentRequested:return t.meta?ja(e,{deleteError:{[t.meta.id]:void 0}}):e;case Gr.DeleteConsignmentFailed:return t.meta?ja(e,{deleteError:{[t.meta.id]:t.payload}}):e;case Gr.UpdateShippingOptionRequested:case Gr.UpdateShippingOptionSucceeded:return t.meta?ja(e,{updateShippingOptionError:{[t.meta.id]:void 0}}):e;case Gr.UpdateShippingOptionFailed:return t.meta?ja(e,{updateShippingOptionError:{[t.meta.id]:t.payload}}):e;default:return e}}function Pc(e=bc.statuses,t){switch(t.type){case zt.LoadCheckoutRequested:return Ta(e,\"isLoading\",!0);case Gr.LoadShippingOptionsRequested:return Ta(e,\"isLoadingShippingOptions\",!0);case zt.LoadCheckoutSucceeded:case zt.LoadCheckoutFailed:return Ta(e,\"isLoading\",!1);case Gr.LoadShippingOptionsSucceeded:case Gr.LoadShippingOptionsFailed:return Ta(e,\"isLoadingShippingOptions\",!1);case Gr.CreateConsignmentsRequested:return Ta(e,\"isCreating\",!0);case Gr.CreateConsignmentsSucceeded:case Gr.CreateConsignmentsFailed:return Ta(e,\"isCreating\",!1);case Gr.UpdateConsignmentRequested:return t.meta?ja(e,{isUpdating:{[t.meta.id]:!0}}):e;case Gr.UpdateConsignmentSucceeded:case Gr.UpdateConsignmentFailed:return t.meta?ja(e,{isUpdating:{[t.meta.id]:!1}}):e;case Gr.DeleteConsignmentRequested:return t.meta?ja(e,{isDeleting:{[t.meta.id]:!0}}):e;case Gr.DeleteConsignmentSucceeded:case Gr.DeleteConsignmentFailed:return t.meta?ja(e,{isDeleting:{[t.meta.id]:!1}}):e;case Gr.UpdateShippingOptionRequested:return t.meta?ja(e,{isUpdatingShippingOption:{[t.meta.id]:!0}}):e;case Gr.UpdateShippingOptionSucceeded:case Gr.UpdateShippingOptionFailed:return t.meta?ja(e,{isUpdatingShippingOption:{[t.meta.id]:!1}}):e;default:return e}}function Tc(e,t){const n={};return Object.keys(e).forEach(i=>{const r=e[i],o=t?`${t}.${i}`:i;\"object\"==typeof r?Object.assign(n,Tc(r,o)):n[o]=r}),n}function kc(e){return Object.keys(e).sort().reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:e[n]}),{})}const Rc={errors:{},statuses:{}};function Mc(e=Rc,t){return s({data:Lc,errors:a(Dc,Aa),statuses:Fc})(e,t)}function Lc(e,t){if(t.type!==_o.LoadPickupOptionsSucceeded)return e;if(t.meta){const n=kc(Tc({consignmentId:t.meta.consignmentId,searchArea:t.meta.searchArea}));return Ta(e,btoa(`${JSON.stringify(n)}`),t.payload)}}function Dc(e=Rc.errors,t){switch(t.type){case _o.LoadPickupOptionsRequested:case _o.LoadPickupOptionsSucceeded:return Ta(e,\"loadError\",void 0);case _o.LoadPickupOptionsFailed:return Ta(e,\"loadError\",t.payload);default:return e}}function Fc(e=Rc.statuses,t){switch(t.type){case _o.LoadPickupOptionsRequested:return Ta(e,\"isLoading\",!0);case _o.LoadPickupOptionsSucceeded:case _o.LoadPickupOptionsFailed:return Ta(e,\"isLoading\",!1);default:return e}}const Nc={errors:{},statuses:{}};function xc(e=Nc,t){return s({data:Uc,errors:a(zc,Aa),statuses:qc})(e,t)}function Uc(e,t){return t.type===Kr.LoadShippingCountriesSucceeded?Ba(e,t.payload):e}function zc(e=Nc.errors,t){switch(t.type){case Kr.LoadShippingCountriesRequested:case Kr.LoadShippingCountriesSucceeded:return Ta(e,\"loadError\",void 0);case Kr.LoadShippingCountriesFailed:return Ta(e,\"loadError\",t.payload);default:return e}}function qc(e=Nc.statuses,t){switch(t.type){case Kr.LoadShippingCountriesRequested:return Ta(e,\"isLoading\",!0);case Kr.LoadShippingCountriesSucceeded:case Kr.LoadShippingCountriesFailed:return Ta(e,\"isLoading\",!1);default:return e}}const Bc={data:{},errors:{},statuses:{}};function jc(e=Bc,t){return s({data:Gc,errors:a(Hc,Aa),statuses:Vc})(e,t)}function Gc(e=Bc.data,t){switch(t.type){case fo.InitializeSucceeded:return ja(e,{[t.meta&&t.meta.methodId]:{isInitialized:!0}});case fo.DeinitializeSucceeded:return ja(e,{[t.meta&&t.meta.methodId]:{isInitialized:!1}})}return e}function Hc(e=Bc.errors,t){switch(t.type){case fo.InitializeRequested:case fo.InitializeSucceeded:return ja(e,{initializeError:void 0,initializeMethodId:void 0});case fo.InitializeFailed:return ja(e,{initializeError:t.payload,initializeMethodId:t.meta&&t.meta.methodId});case fo.DeinitializeRequested:case fo.DeinitializeSucceeded:return ja(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case fo.DeinitializeFailed:return ja(e,{deinitializeError:t.payload,deinitializeMethodId:t.meta&&t.meta.methodId});case fo.UpdateAddressRequested:case fo.UpdateAddressSucceeded:return ja(e,{updateAddressError:void 0,updateAddressMethodId:void 0});case fo.UpdateAddressFailed:return ja(e,{updateAddressError:t.payload,updateAddressMethodId:t.meta&&t.meta.methodId});case fo.SelectOptionRequested:case fo.SelectOptionSucceeded:return ja(e,{selectOptionError:void 0,selectOptionMethodId:void 0});case fo.SelectOptionFailed:return ja(e,{selectOptionError:t.payload,selectOptionMethodId:t.meta&&t.meta.methodId});case fo.WidgetInteractionStarted:case fo.WidgetInteractionFinished:return ja(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case fo.WidgetInteractionFailed:return ja(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta&&t.meta.methodId});default:return e}}function Vc(e=Bc.statuses,t){switch(t.type){case fo.InitializeRequested:return ja(e,{isInitializing:!0,initializeMethodId:t.meta&&t.meta.methodId});case fo.InitializeFailed:case fo.InitializeSucceeded:return ja(e,{isInitializing:!1,initializeMethodId:void 0});case fo.DeinitializeRequested:return ja(e,{isDeinitializing:!0,deinitializeMethodId:t.meta&&t.meta.methodId});case fo.DeinitializeFailed:case fo.DeinitializeSucceeded:return ja(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case fo.UpdateAddressRequested:return ja(e,{isUpdatingAddress:!0,updateAddressMethodId:t.meta&&t.meta.methodId});case fo.UpdateAddressFailed:case fo.UpdateAddressSucceeded:return ja(e,{isUpdatingAddress:!1,updateAddressMethodId:void 0});case fo.SelectOptionRequested:return ja(e,{isSelectingOption:!0,selectOptionMethodId:t.meta&&t.meta.methodId});case fo.SelectOptionFailed:case fo.SelectOptionSucceeded:return ja(e,{isSelectingOption:!1,selectOptionMethodId:void 0});case fo.WidgetInteractionStarted:return ja(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta&&t.meta.methodId});case fo.WidgetInteractionFinished:case fo.WidgetInteractionFailed:return ja(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}const Yc={errors:{},statuses:{}};function Wc(e=Yc,t){return s({data:$c,errors:a(Kc,Aa),statuses:Zc})(e,t)}function $c(e,t){return t.type===ca.SendSignInEmailSucceeded?ja(e,t.payload):e}function Kc(e=Yc.errors,t){switch(t.type){case ca.SendSignInEmailRequested:case ca.SendSignInEmailSucceeded:return Ta(e,\"sendError\",void 0);case ca.SendSignInEmailFailed:return Ta(e,\"sendError\",t.payload);default:return e}}function Zc(e=Yc.statuses,t){switch(t.type){case ca.SendSignInEmailRequested:return Ta(e,\"isSending\",!0);case ca.SendSignInEmailFailed:case ca.SendSignInEmailSucceeded:return Ta(e,\"isSending\",!1);default:return e}}const Qc={errors:{},statuses:{}};function Jc(e=Qc,t){return s({errors:a(Xc,Aa),statuses:eu})(e,t)}function Xc(e=Qc.errors,t){switch(t.type){case Zr.ApplyStoreCreditRequested:case Zr.ApplyStoreCreditSucceeded:return Ta(e,\"applyError\",void 0);case Zr.ApplyStoreCreditFailed:return Ta(e,\"applyError\",t.payload);default:return e}}function eu(e=Qc.statuses,t){switch(t.type){case Zr.ApplyStoreCreditRequested:return Ta(e,\"isApplying\",!0);case Zr.ApplyStoreCreditSucceeded:case Zr.ApplyStoreCreditFailed:return Ta(e,\"isApplying\",!1);default:return e}}const tu={errors:{},statuses:{}};function nu(e=tu,t){return s({errors:a(iu,Aa),statuses:ru})(e,t)}function iu(e=tu.errors,t){switch(t.type){case Xr.UpdateSubscriptionsRequested:case Xr.UpdateSubscriptionsSucceeded:return Ta(e,\"updateError\",void 0);case Xr.UpdateSubscriptionsFailed:return Ta(e,\"updateError\",t.payload);default:return e}}function ru(e=tu.statuses,t){switch(t.type){case Xr.UpdateSubscriptionsRequested:return Ta(e,\"isUpdating\",!0);case Xr.UpdateSubscriptionsFailed:case Xr.UpdateSubscriptionsSucceeded:return Ta(e,\"isUpdating\",!1);default:return e}}const ou={errors:{},statuses:{}};function su(e=ou,t){return s({data:au,errors:a(du,Aa),statuses:cu})(e,t)}function au(e,t){var n;switch(t.type){case zt.LoadCheckoutSucceeded:case zt.UpdateCheckoutSucceeded:case Zr.ApplyStoreCreditSucceeded:case We.UpdateBillingAddressSucceeded:case vt.ApplyCouponSucceeded:case vt.RemoveCouponSucceeded:case Gr.CreateConsignmentsSucceeded:case Gr.UpdateConsignmentSucceeded:case Gr.DeleteConsignmentSucceeded:case Gr.UpdateShippingOptionSucceeded:case Gr.LoadShippingOptionsSucceeded:case wt.ApplyGiftCertificateSucceeded:case wt.RemoveGiftCertificateSucceeded:case Kt.VerifyCheckoutSucceeded:return ja(e,re(t.payload,[\"billingAddress\",\"cart\",\"consignments\",\"customer\",\"coupons\",\"giftCertificates\"]));case Qn.SubmitOrderSucceeded:return Ta(e,\"orderId\",t.payload&&t.payload.order.orderId);case qt.HydrateInitialState:return ja(e,re(null===(n=t.payload)||void 0===n?void 0:n.checkout,[\"billingAddress\",\"cart\",\"consignments\",\"customer\",\"coupons\",\"giftCertificates\"]));default:return e}}function du(e=ou.errors,t){switch(t.type){case zt.LoadCheckoutRequested:case zt.LoadCheckoutSucceeded:return Ta(e,\"loadError\",void 0);case zt.LoadCheckoutFailed:return Ta(e,\"loadError\",t.payload);case zt.UpdateCheckoutRequested:case zt.UpdateCheckoutSucceeded:return Ta(e,\"updateError\",void 0);case zt.UpdateCheckoutFailed:return Ta(e,\"updateError\",t.payload);default:return e}}function cu(e=ou.statuses,t){switch(t.type){case zt.LoadCheckoutRequested:return Ta(e,\"isLoading\",!0);case zt.LoadCheckoutFailed:case zt.LoadCheckoutSucceeded:return Ta(e,\"isLoading\",!1);case zt.UpdateCheckoutRequested:return Ta(e,\"isUpdating\",!0);case zt.UpdateCheckoutFailed:case zt.UpdateCheckoutSucceeded:return Ta(e,\"isUpdating\",!1);case Kt.ExecuteRequested:return Ta(e,\"isExecutingSpamCheck\",!0);case Kt.ExecuteFailed:case Kt.ExecuteSucceeded:return Ta(e,\"isExecutingSpamCheck\",!1);default:return e}}function uu(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}function lu(e){return function(e){const t=Object.create(e);return function(e,t){let n=Object.getPrototypeOf(e);for(;n;)t(n),n=Object.getPrototypeOf(n)}(e,n=>{Object.getOwnPropertyNames(n).forEach(n=>{\"constructor\"!==n&&\"function\"==typeof t[n]&&\"_\"!==n.charAt(0)&&(t[n]=((e,t)=>(...n)=>l(e[t].call(e,...n)))(e,n))})}),t}(e)}const hu={\"mollie.credit_card\":{provider:\"mollie\",method:\"credit_card\"},\"adyenv2.scheme\":{provider:\"adyenv2\",method:\"scheme\"},\"adyenv3.scheme\":{provider:\"adyenv3\",method:\"scheme\"},\"adyenv2.bcmc\":{provider:\"adyenv2\",method:\"bcmc\"},\"adyenv2.ideal\":{provider:\"adyenv2\",method:\"ideal\"},\"adyenv2.sepadirectdebit\":{provider:\"adyenv2\",method:\"sepadirectdebit\"},\"adyenv2.directEbanking\":{provider:\"adyenv2\",method:\"directEbanking\"},\"adyenv2.giropay\":{provider:\"adyenv2\",method:\"giropay\"},braintree:{provider:\"braintree\",method:\"credit_card\"},braintreepaypal:{provider:\"braintree\",method:\"paypal\"},braintreeach:{provider:\"braintree\",method:\"ach\"},authorizenet:{provider:\"authorizenet\",method:\"credit_card\"},elavon:{provider:\"elavon\",method:\"credit_card\"},checkoutcom:{provider:\"checkoutcom\",method:\"credit_card\"},\"checkoutcom.credit_card\":{provider:\"checkoutcom\",method:\"credit_card\"},\"checkoutcom.card\":{provider:\"checkoutcom\",method:\"card\"},sagepay:{provider:\"sagepay\",method:\"credit_card\"},stripe:{provider:\"stripe\",method:\"credit_card\"},\"stripev3.card\":{provider:\"stripev3\",method:\"card\"},\"stripeupe.card\":{provider:\"stripeupe\",method:\"card\"},cybersource:{provider:\"cybersource\",method:\"credit_card\"},cybersourcev2:{provider:\"cybersourcev2\",method:\"credit_card\"},bnz:{provider:\"bnz\",method:\"credit_card\"},converge:{provider:\"converge\",method:\"credit_card\"},bluesnapv2:{provider:\"bluesnapv2\",method:\"credit_card\"},\"bluesnapdirect.credit_card\":{provider:\"bluesnapdirect\",method:\"credit_card\"},\"bluesnapdirect.ecp\":{provider:\"bluesnapdirect\",method:\"ecp\"},\"bluesnapdirect.sepa_direct_debit\":{provider:\"bluesnapdirect\",method:\"sepa_direct_debit\"},orbital:{provider:\"orbital\",method:\"credit_card\"},paymetric:{provider:\"paymetric\",method:\"credit_card\"},bolt:{provider:\"bolt\",method:\"credit_card\"},\"barclaycard.credit_card\":{provider:\"barclaycard\",method:\"credit_card\"},moneris:{provider:\"moneris\",method:\"credit_card\"},cba_mpgs:{provider:\"cba_mpgs\",method:\"credit_card\"},worldpayaccess:{provider:\"worldpayaccess\",method:\"credit_card\"},\"worldpayaccess.credit_card\":{provider:\"worldpayaccess\",method:\"credit_card\"},squarev2:{provider:\"squarev2\",method:\"credit_card\"},paypalcommercecreditcards:{provider:\"paypalcommerce\",method:\"credit_card\"},paypalcommerce:{provider:\"paypalcommerce\",method:\"paypal\"},bigcommerce_payments_creditcards:{provider:\"bigcommerce_payments\",method:\"credit_card\"},bigcommerce_payments:{provider:\"bigcommerce_payments\",method:\"paypal\"},tdonlinemart:{provider:\"tdonlinemart\",method:\"credit_card\"}};function pu(e){return de({firstName:e.firstName,lastName:e.lastName,company:e.company,address1:e.address1,address2:e.address2,city:e.city,stateOrProvince:e.stateOrProvince,countryCode:e.countryCode,postalCode:e.postalCode,phone:e.phone,customFields:e.customFields},q)}const mu={errors:{},statuses:{}};function gu(){const e=function(){const e=_a(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.token},e=>()=>e),t=_a(e=>e.errors.loadError,e=>()=>e),n=_a(e=>!!e.statuses.isLoading,e=>()=>e);return Se((i=ka)=>({getToken:e(i),getLoadError:t(i),isLoading:n(i)}))}(),t=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e,e=>()=>uu(e(),()=>new Ze(Ye.MissingBillingAddress))),n=_a(e=>e.errors.updateError,e=>()=>e),i=_a(e=>e.errors.continueAsGuestError,e=>()=>e),r=_a(e=>e.errors.loadError,e=>()=>e),o=_a(e=>!!e.statuses.isUpdating,e=>()=>e),s=_a(e=>!!e.statuses.isContinuingAsGuest,e=>()=>e),a=_a(e=>!!e.statuses.isLoading,e=>()=>e);return Se((d=Na)=>({getBillingAddress:e(d),getBillingAddressOrThrow:t(d),getUpdateError:n(d),getContinueAsGuestError:i(d),getLoadError:r(d),isUpdating:o(d),isContinuingAsGuest:s(d),isLoading:a(d)}))}(),n=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e,e=>()=>uu(e(),()=>new Ze(Ye.MissingCart))),n=_a(e=>e.errors.loadError,e=>()=>e),i=_a(e=>!!e.statuses.isLoading,e=>()=>e),r=_a(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.locale},e=>()=>e);return Se((o=Ga)=>({getCart:e(o),getCartOrThrow:t(o),getLoadError:n(o),isLoading:i(o),getLocale:r(o)}))}(),i=function(){const e=_a(e=>e,e=>()=>e),t=_a(e=>e.statuses,e=>fe(t=>{if(t){const n=e[t];return!0===(n&&n.isInitializing)}return ue(e,{isInitializing:!0})})),n=_a(e=>e.data,e=>fe((t,n)=>{const i=e[t];return!!i&&(n?!0===i.initializedContainers[n]:ue(i.initializedContainers,e=>!0===e))})),i=_a(e=>e.statuses,e=>fe(t=>{if(t){const n=e[t];return!0===(n&&n.isDeinitializing)}return ue(e,{isDeinitializing:!0})})),r=_a(e=>e.errors,e=>fe(t=>{const n=t?e[t]:F(ye(e),e=>!(!e||!e.initializeError));return n&&n.initializeError})),o=_a(e=>e.errors,e=>fe(t=>{const n=t?e[t]:F(ye(e),e=>!(!e||!e.deinitializeError));return n&&n.deinitializeError}));return Se((s=Ka)=>({getState:e(s),isInitializing:t(s),isInitialized:n(s),isDeinitializing:i(s),getInitializeError:r(s),getDeinitializeError:o(s)}))}(),r=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e=>e.data,e=>t=>{if(!e)return;const{flashMessages:n}=e.context;return n?void 0!==t?n.filter(({type:e})=>t===e):n:void 0}),n=_a(e=>e.data,(e,{formState:t})=>t&&t.data,(e,t={customerAccount:[],shippingAddress:[],billingAddress:[]})=>()=>e?Object.assign(Object.assign({},e.storeConfig),{formFields:t}):void 0),i=_a(n,e=>()=>uu(e(),()=>new Ze(Ye.MissingCheckoutConfig))),r=_a(e=>e.data&&e.data.context,e=>()=>e),o=_a(e=>e.meta&&e.meta.externalSource,e=>()=>e),s=_a(e=>{var t;return null===(t=e.meta)||void 0===t?void 0:t.host},e=>()=>e),a=_a(e=>{var t;return null===(t=e.meta)||void 0===t?void 0:t.locale},e=>()=>e),d=_a(e=>e.meta&&e.meta.variantIdentificationToken,e=>()=>e),c=_a(e=>e.errors.loadError,e=>()=>e),u=_a(e=>!!e.statuses.isLoading,e=>()=>e);return Se((l=id,h)=>({getConfig:e(l),getFlashMessages:t(l),getStoreConfig:n(l,{formState:h}),getStoreConfigOrThrow:i(l,{formState:h}),getContextConfig:r(l),getExternalSource:o(l),getHost:s(l),getLocale:a(l),getVariantIdentificationToken:d(l),getLoadError:c(l),isLoading:u(l)}))}(),o=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e=>e.errors.loadError,e=>()=>e),n=_a(e=>!!e.statuses.isLoading,e=>()=>e);return Se((i=zd)=>({getCountries:e(i),getLoadError:t(i),isLoading:n(i)}))}(),s=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e=>e.errors.removeCouponError,e=>()=>e),n=_a(e=>e.errors.applyCouponError,e=>()=>e),i=_a(e=>!!e.statuses.isApplyingCoupon,e=>()=>e),r=_a(e=>!!e.statuses.isRemovingCoupon,e=>()=>e);return Se((o=dd)=>({getCoupons:e(o),getRemoveError:t(o),getApplyError:n(o),isApplying:i(o),isRemoving:r(o)}))}(),a=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e,e=>()=>uu(e(),()=>new Ze(Ye.MissingCustomer))),n=_a(e=>e.errors.createError,e=>()=>e),i=_a(e=>!!e.statuses.isCreating,e=>()=>e),r=_a(e=>e.errors.createAddressError,e=>()=>e),o=_a(e=>!!e.statuses.isCreatingAddress,e=>()=>e);return Se((s=fd)=>({getCustomer:e(s),getCustomerOrThrow:t(s),getCreateAccountError:n(s),isCreatingCustomerAccount:i(s),getCreateAddressError:r(s),isCreatingCustomerAddress:o(s)}))}(),d=function(){const e=_a(e=>e.errors.signInMethodId,e=>e.errors.signInError,(e,t)=>n=>{if(!n||e===n)return t}),t=_a(e=>e.errors.signOutMethodId,e=>e.errors.signOutError,(e,t)=>n=>{if(!n||e===n)return t}),n=_a(e=>e.errors.executePaymentMethodCheckoutMethodId,e=>e.errors.executePaymentMethodCheckoutError,(e,t)=>n=>{if(!n||e===n)return t}),i=_a(e=>e.errors.initializeMethodId,e=>e.errors.initializeErrors,(e,t)=>n=>{if(e&&t)return n?t[n]:t[e]}),r=_a(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),o=_a(e=>e.statuses.signInMethodId,e=>e.statuses.isSigningIn,(e,t)=>n=>!(n&&e!==n||!t)),s=_a(e=>e.statuses.signOutMethodId,e=>e.statuses.isSigningOut,(e,t)=>n=>!(n&&e!==n||!t)),a=_a(e=>e.statuses.executePaymentMethodCheckoutMethodId,e=>e.statuses.isExecutingPaymentMethodCheckout,(e,t)=>n=>!(n&&e!==n||!t)),d=_a(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),c=_a(e=>e.data,e=>t=>!(!e[t]||!e[t].isInitialized)),u=_a(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return Se((l=Id)=>({getSignInError:e(l),getSignOutError:t(l),getExecutePaymentMethodCheckoutError:n(l),getInitializeError:i(l),getWidgetInteractionError:r(l),isSigningIn:o(l),isSigningOut:s(l),isExecutingPaymentMethodCheckout:a(l),isInitializing:d(l),isInitialized:c(l),isWidgetInteracting:u(l)}))}(),c=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e=>e.errors.removeGiftCertificateError,e=>()=>e),n=_a(e=>e.errors.applyGiftCertificateError,e=>()=>e),i=_a(e=>!!e.statuses.isApplyingGiftCertificate,e=>()=>e),r=_a(e=>!!e.statuses.isRemovingGiftCertificate,e=>()=>e);return Se((o=pd)=>({getGiftCertificates:e(o),getRemoveError:t(o),getApplyError:n(o),isApplying:i(o),isRemoving:r(o)}))}(),u=function(){const e=_a(e=>e.data,e=>t=>{if(!e)return;const n=t.gateway?`${t.gateway}.${t.id}`:t.id,i=hu[n];return i?D(e,i):[]}),t=_a(e=>e.data,(e=[])=>t=>{const n=ye(hu);return e.find(e=>e.bigpayToken===t&&\"card\"===e.type&&n.some(t=>V(e,t)))}),n=_a(t,e=>t=>uu(e(t),()=>new Ze(Ye.MissingPaymentInstrument))),i=_a(e=>e.data,e=>()=>{if(e)return x(hu,t=>D(e,e=>V(e,t)))}),r=_a(e=>e.meta,e=>()=>e),o=_a(e=>e.errors.loadError,e=>()=>e),s=_a(e=>e.errors.failedInstrument,e=>e.errors.deleteError,(e,t)=>n=>{if(!n||e===n)return t}),a=_a(e=>e.statuses.isLoading,e=>()=>!!e),d=_a(e=>e.statuses.deletingInstrument,e=>e.statuses.isDeleting,(e,t)=>n=>!(n&&e!==n||!t));return Se((c=gc)=>({getCardInstrument:t(c),getCardInstrumentOrThrow:n(c),getInstruments:i(c),getInstrumentsByPaymentMethod:e(c),getInstrumentsMeta:r(c),getLoadError:o(c),getDeleteError:s(c),isLoading:a(c),isDeleting:d(c)}))}(),l=function(){const e=_a(e=>e.data,e=>(t=[],n)=>{const i=F(t,{code:n});return(e?e.shippingAddress:[]).map(e=>a(e,t,i))}),t=_a(e=>e.data,e=>(t=[],n)=>{const i=F(t,{code:n});return(e?e.billingAddress:[]).map(e=>a(e,t,i))}),n=_a(e=>e.data,e=>()=>e?e.customerAccount:[]),i=_a(e=>e.extraFields,e=>()=>e&&e.address.length?e.address.map(ze):[]),r=_a(e=>e.extraFields,e=>()=>e&&e.order.length?e.order.map(ze):[]),o=_a(e=>e.errors.loadError,e=>()=>e),s=_a(e=>!!e.statuses.isLoading,e=>()=>e);function a(e,t,n){return\"countryCode\"===e.name?function(e,t=[],n){if(!t.length)return e;const{code:i=\"\"}=n||{},r=t.map(({code:e,name:t})=>({value:e,label:t}));return Object.assign(Object.assign({},e),{options:{items:r},default:i,type:\"array\",fieldType:\"dropdown\",itemtype:\"string\"})}(e,t,n):\"stateOrProvince\"===e.name?function(e,t){const{subdivisions:n=[],requiresState:i}=t||{};if(!n.length)return Object.assign(Object.assign({},e),{required:null!=i&&i});const r=n.map(({code:e,name:t})=>({value:e,label:t}));return Object.assign(Object.assign({},e),{name:\"stateOrProvinceCode\",options:{items:r},required:null==i||i,type:\"array\",fieldType:\"dropdown\",itemtype:\"string\"})}(e,n):\"postalCode\"===e.name?function(e,t){const{hasPostalCodes:n=[]}=t||{};return void 0===n?e:Object.assign(Object.assign({},e),{required:Boolean(n)})}(e,n):e}return Se((a=Ld)=>({getShippingAddressFields:e(a),getBillingAddressFields:t(a),getCustomerAccountFields:n(a),getAddressExtraFields:i(a),getOrderExtraFields:r(a),getLoadError:o(a),isLoading:s(a)}))}(),h=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e=>e.meta,e=>()=>e),n=_a(e=>e.data,e=>(t,n)=>F(e,n?{id:t,gateway:n}:{id:t})),i=_a(n,e=>(t,n)=>uu(e(t,n),()=>new Ze(Ye.MissingPaymentMethod))),r=_a(e=>e.errors.loadError,e=>()=>e),o=_a(e=>e.errors.loadMethodId,e=>e.errors.loadMethodError,(e,t)=>n=>{if(!n||e===n)return t}),s=_a(e=>e.statuses.isLoading,e=>()=>!!e),a=_a(e=>e.statuses.loadMethodId,e=>e.statuses.isLoadingMethod,(e,t)=>n=>!(n&&e!==n||!t));return Se((d=tc)=>({getPaymentMethods:e(d),getPaymentMethodsMeta:t(d),getPaymentMethod:n(d),getPaymentMethodOrThrow:i(d),getLoadError:r(d),getLoadMethodError:o(d),isLoading:s(d),isLoadingMethod:a(d)}))}(),p=function(){const e=_a(e=>e.errors.initializeMethodId,e=>e.errors.initializeError,(e,t)=>n=>{if(!n||e===n)return t}),t=_a(e=>e.errors.executeMethodId,e=>e.errors.executeError,(e,t)=>n=>{if(!n||e===n)return t}),n=_a(e=>e.errors.finalizeMethodId,e=>e.errors.finalizeError,(e,t)=>n=>{if(!n||e===n)return t}),i=_a(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),r=_a(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),o=_a(e=>e.data,e=>t=>{const n=t.gatewayId?`${t.methodId}.${t.gatewayId}`:t.methodId;return!(!e[n]||!e[n].isInitialized)}),s=_a(e=>e.statuses.executeMethodId,e=>e.statuses.isExecuting,(e,t)=>n=>!(n&&e!==n||!t)),a=_a(e=>e.statuses.finalizeMethodId,e=>e.statuses.isFinalizing,(e,t)=>n=>!(n&&e!==n||!t)),d=_a(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return Se((c=ac)=>({getInitializeError:e(c),getExecuteError:t(c),getFinalizeError:n(c),getWidgetInteractingError:i(c),isInitializing:r(c),isInitialized:o(c),isExecuting:s(c),isFinalizing:a(c),isWidgetInteracting:d(c)}))}(),m=function(){const e=_a(e=>e.data,e=>(t,n)=>{if(!e)return;const i=kc(Tc({consignmentId:t,searchArea:n})),r=btoa(`${JSON.stringify(i)}`);return e[r]}),t=_a(e=>e.errors.loadError,e=>()=>e),n=_a(e=>!!e.statuses.isLoading,e=>()=>e);return Se((i=Rc)=>({getPickupOptions:e(i),getLoadError:t(i),isLoading:n(i)}))}(),g=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e,e=>()=>uu(e(),()=>new Ze(Ye.MissingPaymentProviderCustomer)));return Se((n=hc)=>({getPaymentProviderCustomer:e(n),getPaymentProviderCustomerOrThrow:t(n)}))}(),y=function(){const e=_a(e=>e.data,e=>t=>e[t]);return Se((t=Ec)=>({getCheckout:e(t)}))}(),_=function(){const e=_a(e=>e.data,e=>()=>{const t=null==e?void 0:e.find(e=>!e.selectedPickupOption);return null==t?void 0:t.shippingAddress}),t=_a(e,e=>()=>uu(e(),()=>new Ze(Ye.MissingShippingAddress))),n=_a(e=>e.data,e=>()=>{const t=null==e?void 0:e.filter(e=>!e.selectedPickupOption);return t?t.map(e=>e.shippingAddress):[]}),i=_a(n,e=>()=>uu(e(),()=>new Ze(Ye.MissingShippingAddress)));return Se((r=bc)=>({getShippingAddress:e(r),getShippingAddressOrThrow:t(r),getShippingAddresses:n(r),getShippingAddressesOrThrow:i(r)}))}(),f=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e=>e.errors.loadError,e=>()=>e),n=_a(e=>e.statuses.isLoading,e=>()=>!!e);return Se((i=Nc)=>({getShippingCountries:e(i),getLoadError:t(i),isLoading:n(i)}))}(),S=function(){const e=_a(e=>e.errors.updateAddressMethodId,e=>e.errors.updateAddressError,(e,t)=>n=>{if(!n||e===n)return t}),t=_a(e=>e.errors.selectOptionMethodId,e=>e.errors.selectOptionError,(e,t)=>n=>{if(!n||e===n)return t}),n=_a(e=>e.errors.initializeMethodId,e=>e.errors.initializeError,(e,t)=>n=>{if(!n||e===n)return t}),i=_a(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),r=_a(e=>e.statuses.updateAddressMethodId,e=>e.statuses.isUpdatingAddress,(e,t)=>n=>!(n&&e!==n||!t)),o=_a(e=>e.statuses.selectOptionMethodId,e=>e.statuses.isSelectingOption,(e,t)=>n=>!(n&&e!==n||!t)),s=_a(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),a=_a(e=>e.data,e=>t=>!(!e[t]||!e[t].isInitialized)),d=_a(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return Se((c=Bc)=>({getUpdateAddressError:e(c),getSelectOptionError:t(c),getInitializeError:n(c),getWidgetInteractionError:i(c),isUpdatingAddress:r(c),isSelectingOption:o(c),isInitializing:s(c),isInitialized:a(c),isWidgetInteracting:d(c)}))}(),C=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e,e=>()=>uu(e(),()=>new Ze(Ye.MissingConsignments))),n=_a(e=>e.data,e=>t=>{if(e&&e.length)return F(e,{id:t})}),i=_a(e=>e.data,e=>t=>{if(e&&e.length)return F(e,e=>{return n=e.shippingAddress,i=t,H(pu(n),pu(i));var n,i})}),r=_a(e=>e.data,e=>()=>{if(e&&e.length)return e[0].selectedShippingOption}),o=_a(e=>e.errors.loadError,e=>()=>e),s=_a(e=>e.errors.createError,e=>()=>e),a=_a(e=>e.errors.loadShippingOptionsError,e=>()=>e),d=_a(e,(e,{cart:t})=>t.getCart,(e,t)=>()=>{const n=t();if(!n)return[];const i=(e()||[]).reduce((e,t)=>e.concat(t.lineItemIds),[]);return(n.lineItems.physicalItems||[]).filter(e=>i.indexOf(e.id)<0)}),c=_a(e=>e.errors.updateError,e=>t=>t?e[t]:F(e)),u=_a(e=>e.errors.deleteError,e=>t=>t?e[t]:F(e)),l=_a(i,c,s,(e,t,n)=>i=>{const r=e(i);return r?t(r.id):n()}),h=_a(e=>e.errors.updateShippingOptionError,e=>t=>t?e[t]:F(e)),p=_a(e=>e.statuses.isLoading,e=>()=>!0===e),m=_a(e=>e.statuses.isLoadingShippingOptions,e=>()=>!0===e),g=_a(e=>e.statuses.isCreating,e=>()=>!0===e),y=_a(e=>e.statuses.isUpdating,e=>t=>t?!0===e[t]:!0===F(e)),_=_a(e=>e.statuses.isDeleting,e=>t=>t?!0===e[t]:!0===F(e)),f=_a(i,y,g,(e,t,n)=>i=>{const r=e(i);return r?t(r.id):n()}),S=_a(e=>e.statuses.isUpdatingShippingOption,e=>t=>t?!0===e[t]:!0===F(e));return Se((C=bc,E)=>({getConsignments:e(C),getConsignmentsOrThrow:t(C),getConsignmentById:n(C),getConsignmentByAddress:i(C),getShippingOption:r(C),getLoadError:o(C),getCreateError:s(C),getLoadShippingOptionsError:a(C),getUnassignedItems:d(C,{cart:E}),getUpdateError:c(C),getDeleteError:u(C),getItemAssignmentError:l(C),getUpdateShippingOptionError:h(C),isLoading:p(C),isLoadingShippingOptions:m(C),isCreating:g(C),isUpdating:y(C),isDeleting:_(C),isAssigningItems:f(C),isUpdatingShippingOption:S(C)}))}(),E=function(){const e=_a(e=>e.data,(e,{billingAddress:t})=>t.getBillingAddress,(e,{cart:t})=>t.getCart,(e,{customer:t})=>t.getCustomer,(e,{consignments:t})=>t.getConsignments,(e,{coupons:t})=>t.getCoupons,(e,{giftCertificates:t})=>t.getGiftCertificates,(e,t,n,i,r,o,s)=>()=>{const a=t(),d=n(),c=i(),u=r()||[],l=o()||[],h=s()||[];if(e&&d&&c)return Object.assign(Object.assign({},e),{billingAddress:a,cart:d,customer:c,consignments:u,coupons:l,giftCertificates:h})}),t=_a(e,e=>()=>uu(e(),()=>new Ze(Ye.MissingCheckout))),n=_a(e,e=>t=>{const n=e();if(!n)return;const i=n.grandTotal||0,r=n.customer.storeCredit||0;return t?Math.max(i-r,0):n.outstandingBalance}),i=_a(e=>e.errors.loadError,e=>()=>e),r=_a(e=>e.errors.updateError,e=>()=>e),o=_a(e=>e.statuses.isExecutingSpamCheck,e=>()=>!0===e),s=_a(e=>e.statuses.isLoading,e=>()=>!0===e),a=_a(e=>e.statuses.isUpdating,e=>()=>!0===e);return Se((d=ou,c,u,l,h,p,m)=>({getCheckout:e(d,{billingAddress:c,cart:u,consignments:l,coupons:h,customer:p,giftCertificates:m}),getCheckoutOrThrow:t(d,{billingAddress:c,cart:u,consignments:l,coupons:h,customer:p,giftCertificates:m}),getOutstandingBalance:n(d,{billingAddress:c,cart:u,consignments:l,coupons:h,customer:p,giftCertificates:m}),getLoadError:i(d),getUpdateError:r(d),isExecutingSpamCheck:o(d),isLoading:s(d),isUpdating:a(d)}))}(),v=function(){const e=_a(e=>e.data,(e,{billingAddress:t})=>t.getOrderBillingAddress(),(e,{coupons:t})=>t.getCoupons(),(e,t,n=[])=>()=>{if(e&&t)return Object.assign(Object.assign({},e),{billingAddress:t,coupons:n})}),t=_a(e,e=>()=>uu(e(),()=>new Ze(Ye.MissingOrder))),n=_a(e=>e.meta,e=>()=>e),i=_a(e=>e.errors.loadError,e=>()=>e),r=_a(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.payments},(e=[])=>t=>{const n=e.find(({providerId:e})=>e===t);return null==n?void 0:n.paymentId}),o=_a(e=>!!e.statuses.isLoading,e=>()=>e);return Se((s=Hd,a,d)=>({getOrder:e(s,{billingAddress:a,coupons:d}),getOrderOrThrow:t(s,{billingAddress:a,coupons:d}),getOrderMeta:n(s),getLoadError:i(s),getPaymentId:r(s),isLoading:o(s)}))}(),I=function(){const e=_a(e=>e.data,e=>()=>e);return Se((t=Zd)=>({getOrderBillingAddress:e(t)}))}(),b=function(){const e=_a(({order:e})=>e.getOrderMeta,e=>()=>{const t=e();return t&&t.payment}),t=_a(({order:e})=>e.getOrder,e=>()=>{const t=e();return F(t&&t.payments,({providerId:e})=>\"giftcertificate\"!==e&&\"storecredit\"!==e)}),n=_a(({checkout:e})=>e.getCheckout,e=>()=>{const t=e();return F(t&&t.payments,({providerType:e})=>\"PAYMENT_TYPE_HOSTED\"===e)}),i=_a(e,n,t,(e,t,n)=>()=>{const i=e();if(i&&i.id)return{providerId:i.id,gatewayId:i.gateway};const r=t()||n();return r&&r.providerId?{providerId:r.providerId,gatewayId:r.gatewayId}:void 0}),r=_a(i,e=>()=>uu(e(),()=>new Ze(Ye.MissingPaymentId))),o=_a(e,n,t,(e,t,n)=>()=>{const i=e();if(i&&i.status)return i.status.replace(\"PAYMENT_STATUS_\",\"\");const r=t()||n();return r?r.detail.step:void 0}),s=_a(o,e=>()=>uu(e(),()=>new Ze(Ye.MissingPaymentStatus))),a=_a(({order:e})=>e.getOrderMeta,e=>()=>{const t=e();return t&&t.token}),d=_a(a,e=>()=>uu(e(),()=>new Ze(Ye.MissingPaymentToken))),c=_a(e,e=>()=>{const t=e();return t&&t.redirectUrl}),u=_a(c,e=>()=>uu(e(),()=>new Ze(Ye.MissingPaymentRedirectUrl))),l=_a(({checkout:e})=>e.getOutstandingBalance,e=>(t=!1)=>{const n=e(t);return!!n&&n>0}),h=_a(o,e=>t=>!(!t||!t.nonce)||\"ACKNOWLEDGE\"===e()||e()===yr);return Se((e,t)=>({getPaymentId:i({checkout:e,order:t}),getPaymentIdOrThrow:r({checkout:e,order:t}),getPaymentStatus:o({checkout:e,order:t}),getPaymentStatusOrThrow:s({checkout:e,order:t}),getPaymentToken:a({checkout:e,order:t}),getPaymentTokenOrThrow:d({checkout:e,order:t}),getPaymentRedirectUrl:c({checkout:e,order:t}),getPaymentRedirectUrlOrThrow:u({checkout:e,order:t}),isPaymentDataRequired:l({checkout:e,order:t}),isPaymentDataSubmitted:h({checkout:e,order:t})}))}(),O=function(){const e=_a(e=>e.errors.applyError,e=>()=>e),t=_a(e=>!!e.statuses.isApplying,e=>()=>e);return Se((n=mu)=>({getApplyError:e(n),isApplying:t(n)}))}(),w=function(){const e=_a(e=>e.errors.updateError,e=>()=>e),t=_a(e=>!!e.statuses.isUpdating,e=>()=>e);return Se((n=tu)=>({getUpdateError:e(n),isUpdating:t(n)}))}(),A=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e=>e.errors.sendError,e=>()=>e),n=_a(e=>!!e.statuses.isSending,e=>()=>e);return Se((i=Yc)=>({getEmail:e(i),getSendError:t(i),isSending:n(i)}))}(),P=function(){const e=_a(e=>e.data,e=>()=>e),t=_a(e=>e.data,e=>t=>null==e?void 0:e.find(e=>e.region===t)),n=_a(e=>e.errors.loadError,e=>()=>e),i=_a(e=>e.statuses.isLoading,e=>()=>!!e);return Se((r=Pd)=>({getExtensions:e(r),getExtensionByRegion:t(r),getLoadError:n(r),isLoading:i(r)}))}();return(T,k={})=>{const R=e(T.b2bToken),M=t(T.billingAddress),L=n(T.cart),D=i(T.checkoutButton),F=o(T.countries),N=s(T.coupons),x=a(T.customer),U=d(T.customerStrategies),z=P(T.extensions),q=l(T.formFields),B=c(T.giftCertificates),j=u(T.instruments),G=I(T.orderBillingAddress),H=h(T.paymentMethods),V=g(T.paymentProviderCustomer),Y=p(T.paymentStrategies),W=m(T.pickupOptions),$=y(T.remoteCheckout),K=_(T.consignments),Z=f(T.shippingCountries),Q=S(T.shippingStrategies),J=w(T.subscriptions),X=O(T.storeCredit),ee=A(T.signInEmail),te=C(T.consignments,L),ne=E(T.checkout,M,L,te,N,x,B),ie=v(T.order,G,N),re=b(ne,ie),oe={b2bToken:R,billingAddress:M,cart:L,checkout:ne,checkoutButton:D,config:r(T.config,T.formFields),consignments:te,countries:F,coupons:N,customer:x,customerStrategies:U,extensions:z,form:q,giftCertificates:B,instruments:j,order:ie,orderBillingAddress:G,payment:re,paymentMethods:H,paymentProviderCustomer:V,paymentStrategies:Y,pickupOptions:W,remoteCheckout:$,shippingAddress:K,shippingCountries:Z,shippingStrategies:Q,signInEmail:ee,subscriptions:J,storeCredit:X};return k.shouldWarnMutation?(se=oe,Object.keys(se).reduce((e,t)=>(e[t]=lu(se[t]),e),{})):oe;var se}}function yu(e={},t){const n=(o=function(){const e=new Oa;return[\"catalog_only\",\"empty_cart\",\"invalid_order_id\",\"invalid_order_token\",\"missing_order_token\",\"missing_provider_token\",\"missing_shipping_method\",\"order_completion_error\",\"order_could_not_be_finalized_error\",\"order_create_failed\",\"provider_fatal_error\",\"provider_setup_error\",\"stock_too_low\"].forEach(t=>{e.register(t,(e,t)=>new va(e,t))}),e.register(\"invalid_payment_provider\",e=>new Ea(e)),e.register(\"payment_config_not_found\",e=>new Ea(e)),e}(),e=>_(e).pipe(I(e=>{if(e instanceof Error||e.payload instanceof Error)throw e;if((t=e.payload)&&\"object\"==typeof t&&[\"body\",\"headers\",\"status\",\"statusText\"].every(e=>Object.prototype.hasOwnProperty.call(t,e))){const t=e.payload.body&&e.payload.body.detail;throw Object.assign(Object.assign({},e),{payload:o.createError(e.payload,t)})}var t;throw e}))),i=gu(),r=s({b2bToken:Ra,billingAddress:xa,cart:Ha,checkout:su,checkoutButton:Xa,config:rd,consignments:Oc,countries:qd,coupons:cd,customer:Sd,customerStrategies:bd,extensions:Td,formFields:Dd,giftCertificates:md,instruments:yc,orderBillingAddress:Qd,order:Vd,payment:Xd,paymentMethods:nc,paymentStrategies:dc,pickupOptions:Mc,paymentProviderCustomer:pc,remoteCheckout:vc,shippingCountries:xc,shippingStrategies:jc,signInEmail:Wc,subscriptions:nu,storeCredit:Jc});var o;return c(r,e,Object.assign({actionTransformer:n,stateTransformer:e=>i(e)},t))}function _u(e){\"https:\"!==document.location.protocol&&pt().warn(\"The BigCommerce Checkout SDK should not be used on a non-HTTPS page\"),\"production\"!==ct()&&pt().warn(\"Note that the development build is not optimized. To create a production build, set process​.env.NODE_ENV to `production`.\");const t={meta:{externalSource:e&&e.externalSource,host:null==e?void 0:e.host,locale:null==e?void 0:e.locale,variantIdentificationToken:window.checkoutVariantIdentificationToken},errors:{},statuses:{}},{locale:i=\"\",shouldWarnMutation:s=!0}=e||{},a=n({host:e&&e.host}),d=yu({config:t},{shouldWarnMutation:s}),c=new dt(a,{getBasePath:()=>{var e,t;return null!==(t=null===(e=d.getState().config.getStoreConfig())||void 0===e?void 0:e.links.baseUrl)&&void 0!==t?t:void 0},getFeatures:()=>{var e,t,n;return null!==(n=null===(t=null===(e=d.getState().config.getStoreConfig())||void 0===e?void 0:e.checkoutSettings)||void 0===t?void 0:t.features)&&void 0!==n?n:{}}}),u=di(d),l=new oi(c),h=new Yt(c),p=new yt(new Et(a)),m=ln(r()),g=new hn(c),y=new on(m,g),_=new ai(l,new bi(h)),f=new io(new ro(c)),S=new Zt(new Qt(c)),C=new $t(h,p,S),E=go(d,c),v=function(e,t,n={useFallback:!1}){const{useFallback:i}=n,r=new Nt(i);for(const[,n]of Object.entries(t))if(Lt(n))for(const t of n.resolveIds)r.register(t,()=>n(e));return r}(E,{createNoPaymentStrategy:Wn},{useFallback:!0}),I=function(e){const t=new Nt;for(const[,n]of Object.entries({}))if(Lt(n))for(const i of n.resolveIds)t.register(i,()=>n(e));return t}(E),b=new An(new Pn(c)),O=new xn,w=new Bn(d,O),A=st(d,function(){const e=function(){const e=_a(({checkout:e})=>e.getCheckout,e=>co(e)),t=_a(({order:e})=>e.getOrder,e=>co(e)),n=_a(({config:e})=>e.getStoreConfig,e=>co(e)),i=_a(({shippingAddress:e})=>e.getShippingAddress,({config:e})=>e.getContextConfig,(e,t)=>co(()=>{const n=e(),i=t();if(!n){if(!i||!i.geoCountryCode)return;return{firstName:\"\",lastName:\"\",company:\"\",address1:\"\",address2:\"\",city:\"\",stateOrProvince:\"\",stateOrProvinceCode:\"\",postalCode:\"\",country:\"\",phone:\"\",customFields:[],countryCode:i.geoCountryCode}}return n})),r=_a(({consignments:e})=>e.getConsignments,e=>co(()=>{const t=e(),n=null==t?void 0:t.find(e=>!e.selectedPickupOption);return null==n?void 0:n.availableShippingOptions})),o=_a(({consignments:e})=>e.getConsignments,e=>co(e)),s=_a(({consignments:e})=>e.getConsignments,e=>co(()=>{const t=e(),n=null==t?void 0:t.find(e=>!e.selectedPickupOption);return null==n?void 0:n.selectedShippingOption})),a=_a(({shippingCountries:e})=>e.getShippingCountries,e=>co(e)),d=_a(({billingAddress:e})=>e.getBillingAddress,({config:e})=>e.getContextConfig,(e,t)=>co(()=>{const n=e(),i=t();return(!n||ye(re(n,\"shouldSaveAddress\",\"email\",\"id\")).every(e=>!e||!e.length))&&i&&i.geoCountryCode?{id:n?n.id:\"\",firstName:\"\",lastName:\"\",company:\"\",address1:\"\",address2:\"\",city:\"\",email:n?n.email:\"\",stateOrProvince:\"\",stateOrProvinceCode:\"\",postalCode:\"\",country:\"\",phone:\"\",customFields:[],countryCode:i.geoCountryCode}:n})),c=_a(({countries:e})=>e.getCountries,e=>co(e)),u=_a(({paymentMethods:e})=>e.getPaymentMethods,e=>co(e)),l=_a(({paymentMethods:e})=>e.getPaymentMethod,e=>co(e)),h=_a(({payment:e})=>e.getPaymentId,({paymentMethods:e})=>e.getPaymentMethod,(e,t)=>co(()=>{const n=e();return n&&t(n.providerId,n.gatewayId)})),p=_a(({cart:e})=>e.getCart,e=>co(e)),m=_a(({coupons:e})=>e.getCoupons,e=>co(e)),g=_a(({giftCertificates:e})=>e.getGiftCertificates,e=>co(e)),y=_a(({customer:e})=>e.getCustomer,e=>co(e)),_=_a(({signInEmail:e})=>e.getEmail,e=>co(e)),f=_a(({b2bToken:e})=>e.getToken,e=>co(e)),S=_a(({payment:e})=>e.isPaymentDataRequired,e=>co(e)),C=_a(({payment:e})=>e.isPaymentDataSubmitted,({paymentMethods:e})=>e.getPaymentMethod,(e,t)=>co((n,i)=>e(t(n,i)))),E=_a(({instruments:e})=>e.getInstruments,({instruments:e})=>e.getInstrumentsByPaymentMethod,(e,t)=>co(function(n){return n?t(n):e()})),v=_a(({form:e})=>e.getCustomerAccountFields,e=>co(e)),I=_a(({form:e})=>e.getBillingAddressFields,({countries:e})=>e.getCountries,(e,t)=>co(n=>e(t(),n))),b=_a(({form:e})=>e.getShippingAddressFields,({shippingCountries:e})=>e.getShippingCountries,(e,t)=>co(n=>e(t(),n))),O=_a(({form:e})=>e.getAddressExtraFields,e=>co(e)),w=_a(({form:e})=>e.getOrderExtraFields,e=>co(e)),A=_a(({config:e})=>e.getFlashMessages,e=>co(e)),P=_a(({pickupOptions:e})=>e.getPickupOptions,e=>co(e)),T=_a(({config:e})=>e.getStoreConfig,e=>co(()=>{const t=e();if(t)return t.checkoutSettings.checkoutUserExperienceSettings})),k=_a(({extensions:e})=>e.getExtensions,e=>co(e)),R=_a(({paymentProviderCustomer:e})=>e.getPaymentProviderCustomer,e=>co(e)),M=_a(({extensions:e})=>e.getExtensionByRegion,e=>co(e));return Se(L=>({getCheckout:e(L),getOrder:t(L),getConfig:n(L),getExtensions:k(L),getExtensionByRegion:M(L),getFlashMessages:A(L),getShippingAddress:i(L),getShippingOptions:r(L),getConsignments:o(L),getSelectedShippingOption:s(L),getShippingCountries:a(L),getBillingAddress:d(L),getBillingCountries:c(L),getPaymentMethods:u(L),getPaymentMethod:l(L),getSelectedPaymentMethod:h(L),getCart:p(L),getCoupons:m(L),getGiftCertificates:g(L),getCustomer:y(L),isPaymentDataRequired:S(L),isPaymentDataSubmitted:C(L),getSignInEmail:_(L),getB2BToken:f(L),getInstruments:E(L),getCustomerAccountFields:v(L),getBillingAddressFields:I(L),getShippingAddressFields:b(L),getAddressExtraFields:O(L),getOrderExtraFields:w(L),getPickupOptions:P(L),getUserExperienceSettings:T(L),getPaymentProviderCustomer:R(L)}))}(),t=function(){const e=fa(e=>e,e=>()=>{for(const t of Object.keys(e)){const n=e[t]();if(n)return n}}),t=_a(({shippingStrategies:e})=>e.getSelectOptionError,({consignments:e})=>e.getUpdateShippingOptionError,(e,t)=>n=>e()||t(n));return Se(n=>{const i={getLoadCheckoutError:n.checkout.getLoadError,getUpdateCheckoutError:n.checkout.getUpdateError,getSubmitOrderError:n.paymentStrategies.getExecuteError,getFinalizeOrderError:n.paymentStrategies.getFinalizeError,getLoadOrderError:n.order.getLoadError,getLoadCartError:n.cart.getLoadError,getLoadBillingCountriesError:n.countries.getLoadError,getLoadShippingCountriesError:n.shippingCountries.getLoadError,getLoadPaymentMethodsError:n.paymentMethods.getLoadError,getLoadPaymentMethodError:n.paymentMethods.getLoadMethodError,getInitializePaymentError:n.paymentStrategies.getInitializeError,getSignInError:n.customerStrategies.getSignInError,getSignOutError:n.customerStrategies.getSignOutError,getInitializeCustomerError:n.customerStrategies.getInitializeError,getLoadShippingOptionsError:n.consignments.getLoadShippingOptionsError,getSelectShippingOptionError:t(n),getContinueAsGuestError:n.billingAddress.getContinueAsGuestError,getUpdateBillingAddressError:n.billingAddress.getUpdateError,getUpdateSubscriptionsError:n.subscriptions.getUpdateError,getUpdateShippingAddressError:n.shippingStrategies.getUpdateAddressError,getDeleteConsignmentError:n.consignments.getDeleteError,getUpdateConsignmentError:n.consignments.getUpdateError,getCreateConsignmentsError:n.consignments.getCreateError,getInitializeShippingError:n.shippingStrategies.getInitializeError,getApplyStoreCreditError:n.storeCredit.getApplyError,getApplyCouponError:n.coupons.getApplyError,getRemoveCouponError:n.coupons.getRemoveError,getApplyGiftCertificateError:n.giftCertificates.getApplyError,getRemoveGiftCertificateError:n.giftCertificates.getRemoveError,getLoadInstrumentsError:n.instruments.getLoadError,getDeleteInstrumentError:n.instruments.getDeleteError,getLoadConfigError:n.config.getLoadError,getSignInEmailError:n.signInEmail.getSendError,getLoadB2BTokenError:n.b2bToken.getLoadError,getCreateCustomerAccountError:n.customer.getCreateAccountError,getCreateCustomerAddressError:n.customer.getCreateAddressError,getPickupOptionsError:n.pickupOptions.getLoadError,getLoadExtensionsError:n.extensions.getLoadError};return Object.assign({getError:e(i)},i)})}(),n=function(){const e=fa(e=>e,e=>()=>Object.keys(e).some(t=>e[t]())),t=_a(({shippingStrategies:e})=>e.isSelectingOption,({consignments:e})=>e.isUpdatingShippingOption,(e,t)=>n=>e()||t(n)),n=_a(({customerStrategies:e})=>e.isInitializing,({customerStrategies:e})=>e.isSigningIn,({customerStrategies:e})=>e.isSigningOut,({customerStrategies:e})=>e.isExecutingPaymentMethodCheckout,({customerStrategies:e})=>e.isWidgetInteracting,(e,t,n,i,r)=>o=>e(o)||t(o)||n(o)||i(o)||r(o)),i=_a(({shippingStrategies:e})=>e.isInitializing,({shippingStrategies:e})=>e.isUpdatingAddress,({shippingStrategies:e})=>e.isSelectingOption,({shippingStrategies:e})=>e.isWidgetInteracting,(e,t,n,i)=>r=>e(r)||t(r)||n(r)||i(r)),r=_a(({paymentStrategies:e})=>e.isInitializing,({paymentStrategies:e})=>e.isExecuting,({paymentStrategies:e})=>e.isFinalizing,({paymentStrategies:e})=>e.isWidgetInteracting,(e,t,n,i)=>r=>e(r)||t(r)||n(r)||i(r)),o=_a(({paymentStrategies:e})=>e.isExecuting,({checkout:e})=>e.isExecutingSpamCheck,(e,t)=>n=>e(n)||t());return Se(s=>{const a={isLoadingCheckout:s.checkout.isLoading,isUpdatingCheckout:s.checkout.isUpdating,isExecutingSpamCheck:s.checkout.isExecutingSpamCheck,isSubmittingOrder:o(s),isFinalizingOrder:s.paymentStrategies.isFinalizing,isLoadingOrder:s.order.isLoading,isLoadingCart:s.cart.isLoading,isLoadingBillingCountries:s.countries.isLoading,isLoadingShippingCountries:s.shippingCountries.isLoading,isLoadingPaymentMethods:s.paymentMethods.isLoading,isLoadingPaymentMethod:s.paymentMethods.isLoadingMethod,isInitializingPayment:s.paymentStrategies.isInitializing,isSigningIn:s.customerStrategies.isSigningIn,isSigningOut:s.customerStrategies.isSigningOut,isExecutingPaymentMethodCheckout:s.customerStrategies.isExecutingPaymentMethodCheckout,isInitializingCustomer:s.customerStrategies.isInitializing,isInitializedCustomer:s.customerStrategies.isInitialized,isLoadingShippingOptions:s.consignments.isLoadingShippingOptions,isSelectingShippingOption:t(s),isUpdatingBillingAddress:s.billingAddress.isUpdating,isUpdatingSubscriptions:s.subscriptions.isUpdating,isCreatingCustomerAccount:s.customer.isCreatingCustomerAccount,isCreatingCustomerAddress:s.customer.isCreatingCustomerAddress,isContinuingAsGuest:s.billingAddress.isContinuingAsGuest,isUpdatingShippingAddress:s.shippingStrategies.isUpdatingAddress,isUpdatingConsignment:s.consignments.isUpdating,isDeletingConsignment:s.consignments.isDeleting,isCreatingConsignments:s.consignments.isCreating,isInitializingShipping:s.shippingStrategies.isInitializing,isApplyingStoreCredit:s.storeCredit.isApplying,isApplyingCoupon:s.coupons.isApplying,isRemovingCoupon:s.coupons.isRemoving,isApplyingGiftCertificate:s.giftCertificates.isApplying,isRemovingGiftCertificate:s.giftCertificates.isRemoving,isLoadingInstruments:s.instruments.isLoading,isDeletingInstrument:s.instruments.isDeleting,isLoadingConfig:s.config.isLoading,isSendingSignInEmail:s.signInEmail.isSending,isLoadingB2BToken:s.b2bToken.isLoading,isCustomerStepPending:n(s),isShippingStepPending:i(s),isPaymentStepPending:r(s),isLoadingPickupOptions:s.pickupOptions.isLoading};return Object.assign({isPending:e(a)},a)})}();return i=>({data:e(i),errors:t(i),statuses:n(i)})}());return new ga(d,A,w,function(e,t){const n={[zn.ConsignmentsChanged]:Gn};return new jn(e,t,n)}(A,w),new He(new $e(a)),new Xe(new it(c),f),C,p,new Bt(new jt(c),C,y),new Yr(new $r(c),h),new Jn(new Xn(c,{locale:i})),new It(new kt(c)),new Ht(function(e,t){const n=new Ft,i=o(),r=new Yt(t),s=new $t(r,new yt(new Et(t)),new Zt(new Qt(t))),a=new on(ln(i),new hn(t)),d=new Bt(new jt(t),s,a);return n.register(\"default\",()=>new pn(e,d)),n}(d,c),I,E),new at,new Rt(new Mt(c)),new yo(new Io(u,c)),_,new pi(new mi(c),new _i(a)),new Ei(function(e,t,n){const i=new gr({defaultToken:Si.CREDIT_CARD}),o=new pr,s=new Yi(t),a=new Yt(n),d=new bi(a),c=new ai(new oi(n),d),u=new Ri(ln(r())),l=new Vi(s,c,o,u),h=Ee(),p=((e,t)=>new wr(new Or(e,t)))(h,u),m=new Hi(e);return i.register(Si.CONVERGE,()=>new Cr(e,c,l,m,h)),i.register(Si.PPSDK,()=>new Rr(e,c,((e,t,n,i,r)=>{const o=new Lr;return o.register(Tr.CARD,()=>new Fr(e,t,r,i)),o.register(Tr.NONE,()=>new Nr(n,i)),o.register(Tr.UNSUPPORTED,()=>{}),o})(e,c,n,p,m),new qr(n,p),new Oi(\"PPSDK\"))),i}(d,u,c),v,_,y,E),new bo(new Oo(c)),new Qr(new Jr(c,{locale:i}),d),new wo(function(e,t){const n=new Ft,i=go(e),r=new Yt(t),s=new $r(t),a=new Yr(s,r),d=new pi(new mi(t),new _i(t)),c=o(),u=new io(new ro(t)),l=new Xe(new it(t),u),h=window,p=new Ho(i);return n.register(\"amazonpay\",()=>new Xs(e,a,d,new xo(new zo(o())),new wo(n))),n.register(\"stripeupe\",()=>new ua(e,new Gs(c),a,d)),n.register(\"braintreeacceleratedcheckout\",()=>new ia(e,l,a,d,new jr,new ds(new ls(o(),h,p),h))),n.register(\"paypalcommerceacceleratedcheckout\",()=>new aa(e,l,a,d,new jr,new ws(o()),new Bs)),n.register(\"default\",()=>new ra(e,a)),n}(d,c)),new la(new ha(c)),y,new eo(new to(c)),f,S,b,O)}const fu=e=>{const t=ge(e);return document.getElementById(t)?fu(e):t};function Su(e){return Object.prototype.hasOwnProperty.call(e,\"cacheKey\")}class Cu{constructor(e){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=Object.assign({maxSize:0,isEqual:Me,onExpire:ie},e)}getKey(...e){const t=this._resolveMap(...e),{index:n,parentMap:i}=t;let{map:r}=t;return r&&r.cacheKey?r.usedCount++:r=this._generateMap(i,e.slice(n)),this._removeLeastUsedMap(r),r.cacheKey}getUsedCount(...e){const{map:t}=this._resolveMap(...e);return t?t.usedCount:0}_resolveMap(...e){let t=0,n=this._map;for(;n.maps.length;){let i=!1;for(let r=0;r<n.maps.length;r++){const o=n.maps[r];if(this._options.isEqual(o.value,e[t])){if(n.maps.unshift(...n.maps.splice(r,1)),(0===e.length||t===e.length-1)&&Su(o))return{index:t,map:o,parentMap:n};i=!0,n=o,t++;break}}if(!i)break}return{index:t,parentMap:n}}_generateMap(e,t){let n,i=0,r=e;do{n={maps:[],parentMap:r,usedCount:1,value:t[i]},r.maps.unshift(n),r=n,i++}while(i<t.length);const o=n;return o.cacheKey=\"\"+ ++this._lastId,o}_removeLeastUsedMap(e){if(!this._options.maxSize)return;const t=this._usedMaps.indexOf(e);if(this._usedMaps.splice(-1===t?0:t,-1===t?0:1,e),this._usedMaps.length<=this._options.maxSize)return;const n=this._usedMaps.pop();n&&(this._removeMap(n),this._options.onExpire(n.cacheKey))}_removeMap(e){e.parentMap&&(e.parentMap.maps.splice(e.parentMap.maps.indexOf(e),1),function(e){return Object.prototype.hasOwnProperty.call(e,\"parentMap\")}(e.parentMap)||this._removeMap(e.parentMap))}}function Eu(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const i=Object.getOwnPropertyDescriptor(e.prototype,n);i&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,function(e,t,n){if(\"function\"!=typeof n.value)return n;let i=new Cu,r=n.value,o=fe(r);return Tn(e,t,{get(){const e=(...e)=>{const t=o.call(this,...e);if(1===i.getUsedCount(...e))return t;const n=r.call(this,...e);return Pa(n,t,{keyFilter:e=>!function(e){return 0===`${e}`.indexOf(\"$$\")||0===`${e}`.indexOf(\"_\")}(e)})?t:(o.cache.set(i.getKey(...e),n),n)};return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){i=new Cu,r=e,o=fe(r)}})}(e.prototype,n,i))}),t}let vu=class{constructor(e){this._checkoutButton=e.checkoutButton}getInitializeButtonError(e){return this._checkoutButton.getInitializeError(e)}getDeinitializeButtonError(e){return this._checkoutButton.getDeinitializeError(e)}};vu=function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([Eu],vu);const Iu=vu;let bu=class{constructor(e){this._checkoutButton=e.checkoutButton}isInitializingButton(e){return this._checkoutButton.isInitializing(e)}isDeinitializingButton(e){return this._checkoutButton.isDeinitializing(e)}};bu=function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([Eu],bu);const Ou=bu;function wu(e){return{errors:new Iu(e),statuses:new Ou(e)}}let Au=class{constructor(e,t){this._store=e,this._buttonStrategyActionCreator=t,this._state=wu(this._store.getState()),this._store.subscribe(e=>{this._state=wu(e)})}getState(){return this._state}subscribe(e,...t){return this._store.subscribe(()=>e(this.getState()),e=>e.checkoutButton.getState(),...t.map(e=>t=>e(wu(t))))}initializeButton(e){const t=(n=e.containerId,/^\\w[\\w\\-\\:\\.]*$/.test(n)?[e.containerId]:function(e,t){const n=document.querySelectorAll(e);if(!n.length)throw new Dt(`Unable to find any element with the specified selector: ${e}`);return Array.prototype.slice.call(n).map(e=>(e.id||(e.id=fu(t)),e.id))}(e.containerId,`${e.methodId}-container`));var n;return Promise.all(t.map(t=>{const n=this._buttonStrategyActionCreator.initialize(Object.assign(Object.assign({},e),{containerId:t})),i=`checkoutButtonStrategy:${e.methodId}:${t}`;return this._store.dispatch(n,{queueId:i})})).then(()=>this.getState())}deinitializeButton(e){const t=this._buttonStrategyActionCreator.deinitialize(e),n=`checkoutButtonStrategy:${e.methodId}`;return this._store.dispatch(t,{queueId:n}).then(()=>this.getState())}};Au=function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([Tn],Au);const Pu=Au;class Tu{constructor(e,t,n){this._registry=e,this._registryV2=t,this._paymentMethodActionCreator=n}initialize(e){return t=>{const n={methodId:e.methodId,containerId:e.containerId};if(t.getState().checkoutButton.isInitialized(e.methodId,e.containerId))return y();const i=e.currencyCode?{params:{currencyCode:e.currencyCode}}:{},r=Object.assign(Object.assign({},i),{timeout:e.timeout,useCache:!0});return m(E(d($a.InitializeButtonRequested,void 0,n)),this._paymentMethodActionCreator.loadPaymentMethod(e.methodId,r)(t),g(()=>this._getStrategy(e.methodId).initialize(e).then(()=>d($a.InitializeButtonSucceeded,void 0,n)))).pipe(I(e=>je($a.InitializeButtonFailed,e,n)))}}deinitialize(e){return t=>{const n={methodId:e.methodId};return t.getState().checkoutButton.isInitialized(e.methodId)?m(E(d($a.DeinitializeButtonRequested,void 0,n)),g(()=>this._getStrategy(e.methodId).deinitialize().then(()=>d($a.DeinitializeButtonSucceeded,void 0,n)))).pipe(I(e=>je($a.DeinitializeButtonFailed,e,n))):y()}}_getStrategy(e){let t;try{t=this._registryV2.get({id:e})}catch(n){t=this._registry.get(e)}return t}}class ku extends Ke{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var Ru,Mu,Lu,Du,Fu;class Nu{constructor(e){this._scriptLoader=e,this._window=window}loadPaypal(e=\"\"){return t=this,n=void 0,r=function*(){const t=\"//www.paypalobjects.com/api/checkout.min.js\",n={async:!0,attributes:{\"data-merchant-id\":e}};if(e?yield this._scriptLoader.loadScript(t,n):yield this._scriptLoader.loadScript(t),!this._window.paypal)throw new ku;return this._window.paypal},new((i=void 0)||(i=Promise))(function(e,o){function s(e){try{d(r.next(e))}catch(e){o(e)}}function a(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,a)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}}!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(Ru||(Ru={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(Mu||(Mu={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(Lu||(Lu={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(Du||(Du={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(Fu||(Fu={}));class xu{constructor(e,t,n,i,r=\"\"){this._store=e,this._checkoutActionCreator=t,this._paypalScriptLoader=n,this._formPoster=i,this._host=r}initialize(e){const t=e.paypal,n=this._store.getState(),i=this._paymentMethod=n.paymentMethods.getPaymentMethod(e.methodId);if(!t)throw new Dt;if(!i)throw new Ze(Ye.MissingPaymentMethod);return this._paypalScriptLoader.loadPaypal(i.config.merchantId).then(n=>{var r,o;if(!i||!i.config.merchantId)throw new Ze(Ye.MissingPaymentMethod);const s=i.config.merchantId,a=i.config.testMode?\"sandbox\":\"production\",d={[a]:t.clientId},c=n.FUNDING.CREDIT||\"credit\",u=t.allowCredit?[c]:[],l=t.allowCredit?[]:[c];return n.Button.render({env:a,client:d,commit:t.shouldProcessPayment,funding:{allowed:u,disallowed:l},style:Object.assign(Object.assign({shape:Fu.RECT},ae(t.style,\"layout\",\"color\",\"label\",\"shape\",\"tagline\",\"fundingicons\")),{size:\"paypalexpress\"===i.id&&\"small\"===(null===(r=t.style)||void 0===r?void 0:r.size)?Mu.RESPONSIVE:null===(o=t.style)||void 0===o?void 0:o.size}),payment:(e,n)=>this._setupPayment(s,n,t.onPaymentError),onAuthorize:(e,n)=>this._tokenizePayment(e,n,t.shouldProcessPayment,t.onAuthorizeError)},e.containerId)})}deinitialize(){return this._paymentMethod=void 0,Promise.resolve()}_setupPayment(e,t,n){if(!t)throw new an(en.CheckoutButtonNotInitialized);return this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then(n=>{const i=n.cart.getCart(),r=i?i.id:\"\";return t.request.post(`${this._host}/api/storefront/payment/paypalexpress`,{merchantId:e,cartId:r},{headers:Object.assign({\"X-API-INTERNAL\":Ct},Ve)})}).then(e=>e.id).catch(e=>{throw n&&n(e),e})}_tokenizePayment(e,t,n,i){if(!this._paymentMethod)throw new an(en.CheckoutButtonNotInitialized);if(!t)throw new an(en.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new Ze(Ye.MissingPayment);const r=this._paymentMethod.id;return t.payment.get(e.paymentID).then(t=>{this._formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:r,action:n?\"process_payment\":\"set_external_checkout\",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(t.payer.payer_info)})})}}function Uu(e){const{host:t}=null!=e?e:{},i=yu({config:{meta:{host:null==e?void 0:e.host,locale:null==e?void 0:e.locale},errors:{},statuses:{}}}),r=n({host:t}),s=Ee({host:t}),a=function(e){const t=new Nt;for(const[,n]of Object.entries({}))if(Lt(n))for(const i of n.resolveIds)t.register(i,()=>n(e));return t}(go(i));return new Pu(i,new Tu(function(e,t,n,i){const r=new Ft,s=o(),a=new Yt(t),d=new $t(a,new yt(new Et(t)),new Zt(new Qt(t)));return r.register(nr.PAYPALEXPRESS,()=>new xu(e,d,new Nu(s),n,i)),r}(i,r,s,t),a,new pi(new mi(r),new _i(r))))}const zu={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},qu=\"embedded-checkout-loading-indicator-rotation\";class Bu{constructor(e){this.styles=Object.assign(Object.assign({},zu),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${qu} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(n=>{e.style.setProperty(n,t[n])})}defineAnimation(){var e;if(document.getElementById(qu))return;const t=document.createElement(\"style\");t.id=qu,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${qu} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}var ju,Gu,Hu;!function(e){e.CheckoutComplete=\"CHECKOUT_COMPLETE\",e.CheckoutError=\"CHECKOUT_ERROR\",e.CheckoutLoaded=\"CHECKOUT_LOADED\",e.FrameError=\"FRAME_ERROR\",e.FrameLoaded=\"FRAME_LOADED\",e.SignedOut=\"SIGNED_OUT\"}(ju||(ju={}));class Vu extends ft{constructor(e){super(e,{message:e.body.title}),this.name=\"InvalidLoginTokenError\",this.type=\"invalid_login_token\"}}!function(e){e.MissingContainer=\"missing_container\",e.MissingContent=\"missing_content\",e.UnknownError=\"unknown_error\"}(Gu||(Gu={}));class Yu extends Ke{constructor(e,t=Gu.UnknownError){super(e||\"Unable to embed the checkout form.\"),this.subtype=t,this.name=\"NotEmbeddableError\",this.type=\"not_embeddable\"}}!function(e){e.StyleConfigured=\"STYLE_CONFIGURED\"}(Hu||(Hu={}));const Wu=\"isCookieAllowed\",$u=\"lastAllowCookieAttempt\";let Ku=class{constructor(e,t,n,i,r,o,s,a){this._iframeCreator=e,this._messageListener=t,this._messagePoster=n,this._loadingIndicator=i,this._requestSender=r,this._storage=o,this._location=s,this._options=a,this._isAttached=!1,this._options.onComplete&&this._messageListener.addListener(ju.CheckoutComplete,this._options.onComplete),this._options.onError&&this._messageListener.addListener(ju.CheckoutError,this._options.onError),this._options.onLoad&&this._messageListener.addListener(ju.CheckoutLoaded,this._options.onLoad),this._options.onFrameLoad&&this._messageListener.addListener(ju.FrameLoaded,this._options.onFrameLoad),this._options.onSignOut&&this._messageListener.addListener(ju.SignedOut,this._options.onSignOut),this._messageListener.addListener(ju.FrameLoaded,()=>this._configureStyles())}attach(){return this._isAttached?Promise.resolve(this):(this._isAttached=!0,this._messageListener.listen(),this._loadingIndicator.show(this._options.containerId),this._allowCookie().then(()=>this._attemptLogin()).then(e=>this._iframeCreator.createFrame(e,this._options.containerId)).then(e=>{this._iframe=e,this._configureStyles(),this._loadingIndicator.hide()}).catch(e=>(this._isAttached=!1,this._retryAllowCookie(e).catch(()=>{throw this._messageListener.trigger({type:ju.FrameError,payload:e}),this._loadingIndicator.hide(),e}))).then(()=>this))}detach(){this._isAttached&&(this._isAttached=!1,this._messageListener.stopListen(),this._iframe&&this._iframe.parentNode&&(this._iframe.parentNode.removeChild(this._iframe),this._iframe.iFrameResizer.close()))}_configureStyles(){this._iframe&&this._iframe.contentWindow&&this._options.styles&&(this._messagePoster.setTarget(this._iframe.contentWindow),this._messagePoster.post({type:Hu.StyleConfigured,payload:this._options.styles}))}_attemptLogin(){return/^\\/login\\/token/.test(mn(this._options.url).pathname)?this._requestSender.post(this._options.url).then(({body:{redirectUrl:e}})=>e).catch(e=>Promise.reject(new Vu(e))):Promise.resolve(this._options.url)}_allowCookie(){if(this._storage.getItem(Wu))return Promise.resolve();this._storage.setItem(Wu,!0),this._storage.setItem($u,Date.now());const{origin:e}=mn(this._options.url),t=`${e}/embedded-checkout/allow-cookie?returnUrl=${encodeURIComponent(this._location.href)}`;return document.body.style.visibility=\"hidden\",this._location.replace(t),new Promise(()=>{})}_retryAllowCookie(e){const t=Number(this._storage.getItem($u));return(!t||Date.now()-t>6e5)&&e instanceof Yu&&e.subtype===Gu.MissingContent?(this._storage.removeItem($u),this._storage.removeItem(Wu),this._allowCookie()):Promise.reject()}};Ku=function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([Tn],Ku);const Zu=Ku;class Qu{constructor(e){this._options=e}createFrame(e,t){const n=document.getElementById(t),{timeout:i=6e4}=this._options||{};if(!n)throw new Yu(\"Unable to embed the iframe because the container element could not be found.\",Gu.MissingContainer);const r=document.createElement(\"iframe\");return r.src=e,r.style.border=\"none\",r.style.display=\"none\",r.style.width=\"100%\",r.allowPaymentRequest=!0,r.allow=\"payment\",n.appendChild(r),this._toResizableFrame(r,i).catch(e=>{throw n.removeChild(r),e})}_toResizableFrame(e,t){return new Promise((n,i)=>{const r=window.setTimeout(()=>{i(new Yu(\"Unable to embed the iframe because the content could not be loaded.\"))},t),o=t=>{if((t.origin===mn(e.src).origin||t.origin===Un(mn(e.src)).origin)&&(yn(t.data,ju.FrameError)&&(s(),i(new Yu(t.data.payload.message,Gu.MissingContent))),yn(t.data,ju.FrameLoaded))){e.style.display=\"\";const i=In({scrolling:!1,sizeWidth:!1,heightCalculationMethod:t.data.payload&&t.data.payload.contentId?\"taggedElement\":\"lowestElement\"},e);s(),n(i[i.length-1])}},s=()=>{window.removeEventListener(\"message\",o),window.clearTimeout(r)};window.addEventListener(\"message\",o)})}}function Ju(e){const t=mn(e.url).origin;return new Zu(new Qu,new qn(t),new _n(t),new Bu({styles:e.styles&&e.styles.loadingIndicator}),n(),new Oi(\"BigCommerce.EmbeddedCheckout\"),window.location,e).attach()}function Xu(e){if(!e.payload||!e.payload.contentId)return;const t=document.getElementById(e.payload.contentId);t&&!t.hasAttribute(\"data-iframe-height\")&&t.setAttribute(\"data-iframe-height\",\"\")}function el(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"type\"in e}let tl=class{constructor(e,t,n,i={}){this._messageListener=e,this._messagePoster=t,this._untargetedMessagePoster=n,this._messageHandlers=i,this._messageListener.listen()}postComplete(){const e={type:ju.CheckoutComplete};this._postMessage(e)}postError(e){const t={type:ju.CheckoutError,payload:this._transformError(e)};this._postMessage(t)}postFrameError(e){const t={type:ju.FrameError,payload:this._transformError(e)};this._postMessage(t,{untargeted:!0})}postFrameLoaded(e){const t={type:ju.FrameLoaded,payload:e};this._postMessage(t)}postLoaded(){const e={type:ju.CheckoutLoaded};this._postMessage(e)}postSignedOut(){const e={type:ju.SignedOut};this._postMessage(e)}receiveStyles(e){this._messageListener.addListener(Hu.StyleConfigured,({payload:t})=>{e(t)})}_postMessage(e,t){if(this._notifyMessageHandlers(e),t&&t.untargeted)return this._untargetedMessagePoster.post(e);this._messagePoster.post(e)}_notifyMessageHandlers(e){Object.keys(this._messageHandlers).forEach(t=>{if(e.type!==t)return;const n=this._messageHandlers[t];n&&n.call(null,e)})}_transformError(e){return{message:e.message,type:el(e)?e.type:void 0,subtype:el(e)?e.subtype:void 0}}};tl=function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([Tn],tl);const nl=tl;let il=class{postComplete(){}postError(){}postFrameError(){}postFrameLoaded(){}postLoaded(){}postSignedOut(){}receiveStyles(){}};il=function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([Tn],il);const rl=il;function ol(e){Ne(939);const t=e.parentWindow||window.parent;return window===t?new rl:new nl(new qn(e.parentOrigin),new _n(e.parentOrigin,t),new _n(\"*\",t),{[ju.FrameLoaded]:Xu})}const sl=\"en\",al=\"optimized_checkout\";let dl=class{constructor(e,t){this._logger=t;const{locale:n,locales:i,translations:r}=this._transformConfig(e);this._locale=n,this._locales=i,this._translations=r,this._formatters={}}mapKeys(e){Object.keys(e).forEach(t=>{const n=`${al}.${e[t]}`;this._translations[`${al}.${t}`]=this._translations[n]})}getLocale(){return this._hasTranslations()?this._locale:sl}translate(e,t={}){var n;const i=`${al}.${e}`;if(\"string\"!=typeof this._translations[i])return this._logger.warn(`Translation key \"${i}\" is missing`),i;this._formatters[i]||(this._formatters[i]=new Le(this._escapeSpecialCharacters(this._translations[i]||\"\"),this._locales[i],void 0,{ignoreTag:!0}));try{return this._formatters[i].format(this._transformData(t))}catch(e){if(this._isFormatError(e))return null!==(n=e.originalMessage)&&void 0!==n?n:\"\";throw e}}_transformConfig(e={}){const t={defaultLocale:\"\",defaultTranslations:{},translations:{},locales:{},locale:e.locale||sl},n=e.locales||{},i=this._flattenObject(e.translations||{}),r=this._flattenObject(e.defaultTranslations||{}),o=this._flattenObject(e.fallbackTranslations||{});return pe(Object.keys(o),Object.keys(r),Object.keys(i)).forEach(s=>{var a,d;i&&i[s]?(t.translations[s]=i[s],t.locales[s]=n[s]||t.locale):r[s]?(t.translations[s]=r[s],t.locales[s]=null!==(a=e.defaultLocale)&&void 0!==a?a:sl):(t.translations[s]=o[s],t.locales[s]=null!==(d=e.fallbackLocale)&&void 0!==d?d:sl)}),t}_flattenObject(e,t={},n=\"\"){try{Object.keys(e).forEach(i=>{const r=e[i],o=n?`${n}.${i}`:i;if(W(r))return this._flattenObject(r,t,o);t[o]=r})}catch(e){this._logger.warn(`Unable to parse object: ${e}`)}return t}_transformData(e){return Object.keys(e).reduce((t,n)=>{const i=e[n];return t[n]=null==i?\"\":i,t},{})}_hasTranslations(){return Object.keys(this._locales).map(e=>this._locales[e]).filter(e=>e.split(\"-\")[0]===this._locale.split(\"-\")[0]).length>0}_isFormatError(e){return\"object\"==typeof e&&null!==e&&\"originalMessage\"in e}_escapeSpecialCharacters(e){return e.replace(/(\\w+)='([^']*)'/g,\"$1=''$2''\")}};dl=function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([Tn],dl);const cl=dl;function ul(e={}){return new cl(e,pt())}class ll{constructor(e){if(!e)throw new Error(\"Currency settings missing\");const{decimalPlaces:t,symbolLocation:n,symbol:i,thousandsSeparator:r,decimalSeparator:o}=e;if(\"string\"!=typeof n||\"string\"!=typeof i||\"string\"!=typeof r||\"string\"!=typeof o||\"string\"!=typeof t)throw new Yo(\"Invalid currency settings provided\");this._decimalPlaces=parseInt(t,10),this._symbolLocation=n,this._symbol=i,this._thousandsSeparator=r,this._decimalSeparator=o}format(e){if(\"number\"!=typeof e)throw new Yo(\"Invalid amount provided\");const t=this._formatNumber(e),n=this._formatCurrency(t);return e<0?`-${n}`:n}_formatNumber(e){const t=Math.abs(e),[n,i=\"\"]=this._toFixed(t,this._decimalPlaces).split(\".\"),r=n.replace(/\\B(?=(\\d{3})+(?!\\d))/g,this._thousandsSeparator);return this._decimalPlaces<1?r:[r,i].join(this._decimalSeparator)}_formatCurrency(e){return\"left\"===this._symbolLocation.toLowerCase()?`${this._symbol}${e}`:`${e}${this._symbol}`}_toFixed(e,t){return(+`${Math.round(+`${e}e${t}`)}e${-t}`).toFixed(t)}}let hl=class{constructor(e){this._storeConfig=e,this._customerFormatter=new ll(this._storeConfig.shopperCurrency),this._storeFormatter=new ll(this._storeConfig.currency)}toCustomerCurrency(e){const t=this._storeConfig.shopperCurrency.exchangeRate;return this._customerFormatter.format(e*t)}toStoreCurrency(e){return this._storeFormatter.format(e)}};hl=function(e,t,n,i){var r,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(s=(o<3?r(s):o>3?r(t,n,s):r(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}([Tn],hl);const pl=hl;function ml(e){return new pl(e)}function gl(e){return Boolean(e.hasOwnProperty(\"analytics\"))}class yl{constructor(e){this.storage=e}saveExtraItemsData(e,t){const n=[...t.physicalItems,...t.digitalItems].reduce((e,t)=>(e[t.productId]={brand:t.brand?t.brand:\"\",category:t.categoryNames?t.categoryNames.join(\", \"):\"\"},e),{});try{return this.storage.setItem(this.getStorageKey(e),JSON.stringify(n)),n}catch(e){return{}}}readExtraItemsData(e){try{const t=this.storage.getItem(this.getStorageKey(e));if(!t)return null;const n=JSON.parse(t);return function(e){if(!W(e))return!1;const t=Object.values(e).some(e=>!W(e)||!(\"brand\"in e)||!(\"category\"in e));return Boolean(!t)}(n)?n:null}catch(e){return null}}clearExtraItemData(e){try{this.storage.removeItem(this.getStorageKey(e))}catch(e){}}getStorageKey(e){return e?`ORDER_ITEMS_${e}`:\"\"}}function _l(e){return e&&\"ga\"in e&&\"function\"==typeof e.ga}function fl(e,t){_l(window)&&window.ga(\"send\",e,Object.assign(Object.assign({},t),{nonInteraction:!1}))}function Sl(e){return Cl(e).length>=8096}function Cl(e){return Object.keys(e).reduce((t,n)=>{const i=typeof e[n];return\"string\"===i||\"number\"===i?[...t,`${n}=${e[n]}`]:\"object\"===i&&null!==e[n]?[...t,Cl(e[n])]:t},[]).join(\"&\")}var El;!function(e){e[e.CUSTOMER=1]=\"CUSTOMER\",e[e.SHIPPING=2]=\"SHIPPING\",e[e.BILLING=3]=\"BILLING\",e[e.PAYMENT=4]=\"PAYMENT\"}(El||(El={}));const vl={customer:El.CUSTOMER,shipping:El.SHIPPING,billing:El.BILLING,payment:El.PAYMENT};class Il{constructor(e,t,n,{checkoutSteps:i}={}){if(this.checkoutService=e,this.analyticsExtraItemsManager=t,this.analytics=n,this._checkoutStarted=!1,this._completedSteps={},this._viewedSteps={},this._analyticStepOrder=[\"customer\",\"shipping\",\"billing\",\"payment\"],void 0!==i){if(i.some(e=>!(e in vl)))throw new Dt(`Invalid checkout steps provided. Valid values are: ${J(vl).join(\", \")}.`);this._analyticStepOrder=i}}trackCheckoutStarted(){if(this._checkoutStarted)return;const e=this.getCheckout();if(!e)return;const{coupons:t,grandTotal:n,shippingCostTotal:i,taxTotal:r,cart:{lineItems:o,discountAmount:s,id:a}}=e,d=this.analyticsExtraItemsManager.saveExtraItemsData(a,o);this.analytics.track(\"Checkout Started\",this.getTrackingPayload({revenue:n,shipping:i,tax:r,discount:s,coupons:t,lineItems:o,extraItemsData:d})),this._checkoutStarted=!0}trackOrderComplete(){var e;const t=this.getOrder();if(!t)return;const{isComplete:n,orderId:i,orderAmount:r,shippingCostTotal:o,taxTotal:s,discountAmount:a,coupons:d,lineItems:c,cartId:u}=t;if(!n)return;const l=this.analyticsExtraItemsManager.readExtraItemsData(u);if(null===l)return;const h=null===(e=this.checkoutService.getState().data.getConfig())||void 0===e?void 0:e.checkoutSettings.features[\"DATA-6891.missing_orders_within_GA\"],p=this.getTrackingPayload({orderId:i,revenue:r,shipping:o,tax:s,discount:a,coupons:d,extraItemsData:l,lineItems:c});if(h&&gl(window)&&_l(window)&&Sl(p))return fl(\"transaction\",{\"&ti\":p.order_id,\"&ta\":p.affiliation,\"&tr\":p.revenue,\"&ts\":p.shipping,\"&tt\":p.tax,\"&tcc\":p.coupon,\"&cu\":p.currency}),p.products.forEach(e=>{fl(\"item\",{\"&ti\":p.order_id,\"&in\":e.name,\"&ic\":e.sku,\"&iv\":`${e.category}`,\"&ip\":e.price,\"&iq\":e.quantity})}),this.analyticsExtraItemsManager.clearExtraItemData(u);this.analytics.track(\"Order Completed\",p),this.analyticsExtraItemsManager.clearExtraItemData(u)}trackStepViewed(e){const t=this.getIdFromStep(e);t&&!this.hasStepViewed(t)&&(this.trackViewed(t),this.backfill(t))}trackStepCompleted(e){const t=this.getIdFromStep(e);t&&!this.hasStepCompleted(t)&&(this.backfill(t),this.trackCompleted(t))}backfill(e){for(const t of this._analyticStepOrder){const n=this.getIdFromStep(t);if(!n)break;if(this.hasStepViewed(n)||this.trackViewed(n),n===e)break;this.hasStepCompleted(n)||this.trackCompleted(n)}}trackCompleted(e){const t=this.getSelectedShippingOption(),{code:n=\"\"}=this.getShopperCurrency()||{},i=this.getPaymentMethodName(),r={step:e,currency:n};t&&(r.shipping_method=t.description),i&&(r.payment_method=i),r.shipping_method||r.payment_method||(r.shipping_method=\" \"),this.analytics.track(\"Checkout Step Completed\",r);const o=t?t.id:\"\",s=e===El.SHIPPING?`${e}-${o}`:e;this._completedSteps[s]=!0}getTrackingPayload({orderId:e,revenue:t,shipping:n,tax:i,discount:r,coupons:o,extraItemsData:s,lineItems:a}){const{code:d=\"\"}=this.getShopperCurrency()||{},{storeName:c=\"\"}=this.getStoreProfile()||{};return{order_id:String(e),affiliation:c,revenue:this.toShopperCurrency(t),shipping:this.toShopperCurrency(n),tax:this.toShopperCurrency(i),discount:this.toShopperCurrency(r),coupon:(o||[]).map(e=>e.code.toUpperCase()).join(\",\"),currency:d,products:this.getProducts(s,a)}}hasStepCompleted(e){const t=this.getSelectedShippingOption(),n=t?t.id:\"\";return Object.prototype.hasOwnProperty.call(this._completedSteps,e)||e===El.SHIPPING&&Object.prototype.hasOwnProperty.call(this._completedSteps,`${e}-${n}`)}hasStepViewed(e){return!!this._viewedSteps[e]}getIdFromStep(e){const t=e.split(\".\");return vl[t[0]]||null}trackViewed(e){const t=this.getShopperCurrency();this.analytics.track(\"Checkout Step Viewed\",{step:e,currency:t?t.code:\"\"}),this._viewedSteps[e]=!0}getOrder(){const{data:{getOrder:e}}=this.checkoutService.getState();return e()}getCheckout(){const{data:{getCheckout:e}}=this.checkoutService.getState();return e()}getShopperCurrency(){const{data:{getConfig:e}}=this.checkoutService.getState(),t=e();return t&&t.shopperCurrency}getStoreProfile(){const{data:{getConfig:e}}=this.checkoutService.getState(),t=e();return t&&t.storeProfile}toShopperCurrency(e){const{exchangeRate:t=1}=this.getShopperCurrency()||{};return Math.round(e*t*100)/100}getSelectedShippingOption(){const{data:e}=this.checkoutService.getState(),t=e.getSelectedShippingOption();return t&&t.id&&t.description?t:null}getPaymentMethodName(){const{data:e}=this.checkoutService.getState(),t=e.getSelectedPaymentMethod();return t&&t.config&&t.config.displayName||\"\"}getProducts(e,t){const n=(t.customItems||[]).map(e=>({product_id:e.id,sku:e.sku,price:e.listPrice,quantity:e.quantity,name:e.name})),i=t.giftCertificates.map(e=>({product_id:e.id,price:this.toShopperCurrency(e.amount),name:e.name,quantity:1}));return[...n,...[...t.physicalItems,...t.digitalItems].map(t=>{let n;t.options&&t.options.length&&(n=t.options.map(e=>`${e.name}:${e.value}`),n.sort());const i=Array.isArray(n)&&n.length?n.join(\", \"):\"single-product-option\",r=e[t.productId]&&e[t.productId].brand;return Object.assign({product_id:String(t.productId),sku:t.sku,price:t.salePrice,image_url:t.imageUrl,name:t.name,quantity:t.quantity,category:e[t.productId]?e[t.productId].category:\"\",variant:i},r&&{brand:r})}),...i]}}class bl{trackCheckoutStarted(){}trackOrderComplete(){}trackStepViewed(){}trackStepCompleted(){}}function Ol(e,t){const{data:n}=e.getState(),i=n.getConfig();if(!i)throw new Ze(Ye.MissingCheckoutConfig);const{isAnalyticsEnabled:r}=i.checkoutSettings;return r&&gl(window)?new Il(e,new yl(ve),window.analytics,t):new bl}function wl(e){return Boolean(e.hasOwnProperty(\"braintreeFastlane\"))}class Al{constructor(e){this.checkoutService=e,this._selectedPaymentMethodId=\"\"}customerPaymentMethodExecuted(){this._shouldTrackFastlaneEvent()&&this._trackEmailSubmitted()}paymentComplete(){this._shouldTrackFastlaneEvent()&&this._trackOrderPlaced(this._selectedPaymentMethodId)}selectedPaymentMethod(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!1))}walletButtonClick(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!0))}_shouldTrackFastlaneEvent(){const e=this.checkoutService.getState(),t=e.data.getPaymentMethod(\"braintree\")||e.data.getPaymentMethod(\"braintreeacceleratedcheckout\"),n=null==t?void 0:t.initializationData.isBraintreeAnalyticsV2Enabled,i=wl(window)&&window.braintreeFastlane.events;return n&&i}_getBraintreeEventsOrThrow(){if(wl(window))return window.braintreeFastlane.events;throw new Uo}_trackEmailSubmitted(){const{emailSubmitted:e}=this._getBraintreeEventsOrThrow();e(this._getEmailSubmittedEventOptions())}_trackApmSelected(e,t){const{apmSelected:n}=this._getBraintreeEventsOrThrow();n(this._getApmSelectedEventOptions(e,t))}_trackOrderPlaced(e){const{orderPlaced:t}=this._getBraintreeEventsOrThrow();t(this._getOrderPlacedEventOptions(e))}_getEventCommonOptions(){var e,t;const n=this.checkoutService.getState(),i=n.data.getCart(),r=null===(e=n.data.getConfig())||void 0===e?void 0:e.storeProfile,o=null===(t=n.data.getCustomer())||void 0===t?void 0:t.isGuest,s=n.data.getPaymentMethod(\"braintreeacceleratedcheckout\"),a=[{treatment_group:!n.errors.getLoadPaymentMethodError(\"braintreeacceleratedcheckout\")&&(null==s?void 0:s.initializationData.shouldRunAcceleratedCheckout)?\"test\":\"control\"}];return{context_type:\"cs_id\",context_id:(null==i?void 0:i.id)||\"\",page_type:\"checkout_page\",page_name:window.document.title,partner_name:\"bigc\",user_type:o?\"store_guest\":\"store_member\",store_id:(null==r?void 0:r.storeId)||\"\",merchant_name:(null==r?void 0:r.storeName)||\"\",experiment:JSON.stringify(a)}}_getEmailSubmittedEventOptions(){const e=(this.checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{user_email_saved:!1,apm_shown:e.length>1?\"1\":\"0\",apm_list:e.join(\",\")})}_getApmSelectedEventOptions(e,t){const n=(this.checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{apm_shown:n.length>1?\"1\":\"0\",apm_list:n.join(\",\"),apm_selected:e,apm_location:t?\"pre-email section\":\"payment section\"})}_getOrderPlacedEventOptions(e){const t=this.checkoutService.getState().data.getCart();return Object.assign(Object.assign({},this._getEventCommonOptions()),{selected_payment_method:e,currency_code:(null==t?void 0:t.currency.code)||\"\"})}}function Pl(e){return new Al(e)}class Tl{constructor(e){this._checkoutService=e,this._selectedPaymentMethodId=\"\"}customerPaymentMethodExecuted(){this._shouldTrackFastlaneEvent()&&this._trackEmailSubmitted()}paymentComplete(){this._shouldTrackFastlaneEvent()&&this._trackOrderPlaced(this._selectedPaymentMethodId)}selectedPaymentMethod(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!1))}walletButtonClick(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!0))}_shouldTrackFastlaneEvent(){const e=this._checkoutService.getState().data.getPaymentMethod(\"paypalcommerce\"),t=((null==e?void 0:e.initializationData)||{}).isPayPalCommerceAnalyticsV2Enabled,n=window,i=!!n.paypalFastlane&&!!n.paypalFastlane.events;return t&&i}_getPayPalEventsOrThrow(){const e=window;if(e.paypalFastlane&&e.paypalFastlane.events)return e.paypalFastlane.events;throw new Uo}_trackEmailSubmitted(){const{emailSubmitted:e}=this._getPayPalEventsOrThrow();e(this._getEmailSubmittedEventOptions())}_trackApmSelected(e,t){const{apmSelected:n}=this._getPayPalEventsOrThrow();n(this._getApmSelectedEventOptions(e,t))}_trackOrderPlaced(e){const{orderPlaced:t}=this._getPayPalEventsOrThrow();t(this._getOrderPlacedEventOptions(e))}_getEventCommonOptions(){var e,t;const n=this._checkoutService.getState(),i=n.data.getCart(),r=null===(e=n.data.getConfig())||void 0===e?void 0:e.storeProfile,o=null===(t=n.data.getCustomer())||void 0===t?void 0:t.isGuest,s=\"paypalcommerceacceleratedcheckout\",a=n.data.getPaymentMethod(s),d=[{treatment_group:!n.errors.getLoadPaymentMethodError(s)&&(null==a?void 0:a.initializationData.shouldRunAcceleratedCheckout)?\"test\":\"control\"}];return{context_type:\"cs_id\",context_id:(null==i?void 0:i.id.replace(/-/g,\"\"))||\"\",page_type:\"checkout_page\",page_name:window.document.title,partner_name:\"bigc\",user_type:o?\"store_guest\":\"store_member\",store_id:(null==r?void 0:r.storeId)||\"\",merchant_name:(null==r?void 0:r.storeName)||\"\",experiment:JSON.stringify(d)}}_getEmailSubmittedEventOptions(){const e=(this._checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{user_email_saved:!1,apm_shown:e.length>1?\"1\":\"0\",apm_list:e.join(\",\")})}_getApmSelectedEventOptions(e,t){const n=(this._checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{apm_shown:n.length>1?\"1\":\"0\",apm_list:n.join(\",\"),apm_selected:e,apm_location:t?\"pre-email section\":\"payment section\"})}_getOrderPlacedEventOptions(e){const t=this._checkoutService.getState().data.getCart();return Object.assign(Object.assign({},this._getEventCommonOptions()),{selected_payment_method:e,currency_code:(null==t?void 0:t.currency.code)||\"\"})}}function kl(e){return new Tl(e)}var Rl;class Ml{constructor(e,t){this._host=e,this._hostedFormFactory=t}submitStoredCard(e,t){return n=this,i=void 0,o=function*(){const n=this._hostedForm;if(!n)throw new an(en.PaymentNotInitialized);yield n.validate().then(()=>n.submitStoredCard({fields:e,data:t}))},new((r=void 0)||(r=Promise))(function(e,t){function s(e){try{d(o.next(e))}catch(e){t(e)}}function a(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(s,a)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}initialize(e){const t=this._hostedFormFactory.create(this._host,e);return t.attach().then(()=>{this._hostedForm=t})}deinitialize(){this._hostedForm&&this._hostedForm.detach()}}function Ll(e){const t=yu();return new Ml(e,new Hi(t))}!function(e){e.CUSTOMER=\"customer\",e.SHIPPING=\"shipping\",e.BILLING=\"billing\",e.PAYMENT=\"payment\"}(Rl||(Rl={}));const Dl=[Rl.CUSTOMER,Rl.SHIPPING,Rl.BILLING,Rl.PAYMENT];class Fl{constructor(e,t){this.subscribe=e,this.bodlEvents=t,this._checkoutStarted=!1,this._emailEntryBegan=!1,this._shippingOptionsShown=!1,this._completedSteps={},this.subscribe(e=>{var t;if(this.setState(e.data),!(null===(t=this.state)||void 0===t?void 0:t.getConfig()))throw new Ze(Ye.MissingCheckoutConfig)})}setState(e){this.state=e}checkoutBegin(){const e=this._getCommonCheckoutData();!this._checkoutStarted&&e&&(this.bodlEvents.emitCheckoutBeginEvent(e),this._checkoutStarted=!0)}orderPurchased(){var e;const t=null===(e=this.state)||void 0===e?void 0:e.getOrder();if(!t)return;const{currency:n,isComplete:i,orderId:r,orderAmount:o,shippingCostTotal:s,lineItems:a,cartId:d,coupons:c,channelId:u,taxTotal:l}=t;i&&this.bodlEvents.emitOrderPurchasedEvent({event_id:d,currency:n.code,order_id:r,tax:l,channel_id:u,cart_value:o,coupon_codes:c.map(e=>e.code.toUpperCase()),shipping_cost:s,line_items:this._getProducts(a,n.code)})}stepCompleted(e){e&&Dl.some(t=>(this._hasStepCompleted(t)||this._trackCompletedStep(t),t===e))}customerEmailEntry(e){!this._emailEntryBegan&&(null==e?void 0:e.length)&&(this._emailEntryBegan=!0,this.bodlEvents.emit(\"bodl_checkout_email_entry_began\"))}customerSuggestionInit(e){this.bodlEvents.emit(\"bodl_checkout_customer_suggestion_initialization\",e)}customerSuggestionExecute(){this.bodlEvents.emit(\"bodl_checkout_customer_suggestion_execute\")}customerPaymentMethodExecuted(e){this.bodlEvents.emit(\"bodl_checkout_customer_payment_method_executed\",e)}showShippingMethods(){this._shippingOptionsShown||(this._shippingOptionsShown=!0,this.bodlEvents.emit(\"bodl_checkout_show_shipping_options\"))}selectedPaymentMethod(e){const t=this._getCommonCheckoutData();t&&e&&this.bodlEvents.emitPaymentDetailsProvidedEvent(Object.assign(Object.assign({},t),{payment_type:e}))}clickPayButton(e){this.bodlEvents.emit(\"bodl_checkout_click_pay_button\",e)}paymentRejected(){this.bodlEvents.emit(\"bodl_checkout_payment_rejected\")}paymentComplete(){this.bodlEvents.emit(\"bodl_checkout_payment_complete\")}exitCheckout(){this.bodlEvents.emit(\"bodl_checkout_exit\")}_trackCompletedStep(e){this._completedSteps[e]=!0;const t={[Rl.SHIPPING]:this._trackShippingStepCompleted.bind(this)}[e];t?t():this.bodlEvents.emit(\"bodl_checkout_step_completed\",{step:e})}_trackShippingStepCompleted(){var e,t;const n=null===(t=null===(e=this.state)||void 0===e?void 0:e.getSelectedShippingOption())||void 0===t?void 0:t.description,i=this._getCommonCheckoutData();i&&n&&this.bodlEvents.emitShippingDetailsProvidedEvent(Object.assign(Object.assign({},i),{shipping_method:n}))}_getCommonCheckoutData(){var e;const t=null===(e=this.state)||void 0===e?void 0:e.getCheckout();if(!t)return null;const{cart:{cartAmount:n,currency:i,lineItems:r,id:o,coupons:s},channelId:a}=t;return{event_id:o,currency:i.code,cart_value:n,coupon_codes:s.map(e=>e.code.toUpperCase()),line_items:this._getProducts(r,i.code),channel_id:a}}_getProducts(e,t){const n=(e.customItems||[]).map(e=>({product_id:e.id,sku:e.sku,base_price:e.listPrice,sale_price:e.listPrice,purchase_price:e.listPrice,quantity:e.quantity,product_name:e.name,currency:t})),i=e.giftCertificates.map(e=>({product_id:e.id,gift_certificate_id:e.id,base_price:e.amount,sale_price:e.amount,purchase_price:e.amount,product_name:e.name,gift_certificate_name:e.name,gift_certificate_theme:e.theme,quantity:1,currency:t}));return[...n,...[...e.physicalItems,...e.digitalItems].map(e=>{let n;return e.options&&e.options.length&&(n=e.options.map(e=>`${e.name}:${e.value}`),n.sort()),{product_id:e.productId,quantity:e.quantity,product_name:e.name,base_price:e.listPrice,sale_price:e.salePrice,purchase_price:e.salePrice>0?e.salePrice:e.listPrice,sku:e.sku,variant_id:e.variantId,discount:e.discountAmount,coupon_amount:e.couponAmount,brand_name:e.brand,currency:t,category_names:(i=e,Array.isArray(i.categoryNames)?i.categoryNames:Array.isArray(i.categories)?U(i.categories).map(({name:e})=>e):[]),retail_price:e.retailPrice};var i}),...i].map(e=>Object.assign(Object.assign({},e),{product_id:String(e.product_id)}))}_hasStepCompleted(e){return this._completedSteps[e]}}class Nl{checkoutBegin(){}orderPurchased(){}stepCompleted(){}customerEmailEntry(){}customerSuggestionInit(){}customerSuggestionExecute(){}customerPaymentMethodExecuted(){}showShippingMethods(){}selectedPaymentMethod(){}clickPayButton(){}paymentRejected(){}paymentComplete(){}exitCheckout(){}}function xl(e){return function(e){return\"bodlEvents\"in e}(window)?new Fl(e,window.bodlEvents.checkout):new Nl}export{Rn as ExtensionCommandType,Mn as ExtensionQueryType,xl as createBodlService,Pl as createBraintreeAnalyticTracker,Uu as createCheckoutButtonInitializer,_u as createCheckoutService,ml as createCurrencyService,ol as createEmbeddedCheckoutMessenger,ul as createLanguageService,kl as createPayPalCommerceAnalyticTracker,Ol as createStepTracker,Ll as createStoredCardHostedFormService,i as createTimeout,Ju as embedCheckout,Ue as isExtraField};\n//# sourceMappingURL=checkout-sdk-essential.js.map"
  },
  {
    "path": "dist/esm/checkout-sdk.js",
    "content": "import*as e from\"iframe-resizer\";import*as t from\"iframe-resizer/js/iframeResizer.contentWindow\";import{createRequestSender as n,createTimeout as i}from\"@bigcommerce/request-sender\";import{ScriptLoader as r,createScriptLoader as o,getScriptLoader as a,getStylesheetLoader as s}from\"@bigcommerce/script-loader\";import{combineReducers as d,composeReducers as c,createAction as l,createDataStore as u,createErrorAction as h,deepFreeze as p}from\"@bigcommerce/data-store\";import{Observable as m,Subject as y,concat as g,defer as v,empty as f,from as S,fromEvent as _,merge as w,noop as I,of as C,throwError as b}from\"rxjs\";import{catchError as P,delay as O,distinctUntilChanged as E,filter as A,map as T,retryWhen as k,shareReplay as D,switchMap as M,take as z}from\"rxjs/operators\";import{cond as N,constant as x,difference as R,each as F,filter as L,find as B,findIndex as j,flatMap as U,flatten as q,get as V,identity as G,includes as H,isArray as W,isEmpty as $,isEqual as Y,isMatch as K,isNil as J,isObject as Z,isPlainObject as Q,isString as X,isUndefined as ee,kebabCase as te,keyBy as ne,keys as ie,last as re,map as oe,max as ae,memoize as se,merge as de,noop as ce,omit as le,omitBy as ue,overSome as he,pick as pe,pickBy as me,reduce as ye,round as ge,some as ve,stubTrue as fe,transform as Se,union as _e,uniq as we,uniqueId as Ie,values as Ce,without as be}from\"lodash\";import{memoize as Pe,memoizeOne as Oe}from\"@bigcommerce/memoize\";import{createFormPoster as Ee}from\"@bigcommerce/form-poster\";import{supportsPopups as Ae}from\"@braintree/browser-detection\";import{default as Te}from\"local-storage-fallback\";import{createClient as ke}from\"@bigcommerce/bigpay-client\";import{creditCardType as De,number as Me}from\"card-validator\";import{exclude as ze,parseUrl as Ne,stringifyUrl as xe}from\"query-string\";import{createSelector as Re,createSelectorCreator as Fe,defaultMemoize as Le}from\"reselect\";import{default as Be}from\"shallowequal\";import{IntlMessageFormat as je}from\"intl-messageformat\";var Ue={785(t,n,i){var r,o;t.exports=(r={iframeResizer:()=>e.iframeResizer},o={},i.d(o,r),o)},939(e){e.exports=t}},qe={};function Ve(e){var t=qe[e];if(void 0!==t)return t.exports;var n=qe[e]={exports:{}};return Ue[e](n,n.exports,Ve),n.exports}Ve.d=(e,t)=>{for(var n in t)Ve.o(t,n)&&!Ve.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},Ve.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),Ve.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var Ge={};Ve.r(Ge),Ve.d(Ge,{createAmazonPayV2CustomerStrategy:()=>bi,createApplePayCustomerStrategy:()=>tr,createBigCommercePaymentsCustomerStrategy:()=>Or,createBigCommercePaymentsFastlaneCustomerStrategy:()=>$r,createBigCommercePaymentsPayLaterCustomerStrategy:()=>Jr,createBigCommercePaymentsVenmoCustomerStrategy:()=>Xr,createBoltCustomerStrategy:()=>lo,createBraintreeFastlaneCustomerStrategy:()=>xo,createBraintreePaypalCreditCustomerStrategy:()=>Ao,createBraintreePaypalCustomerStrategy:()=>Po,createBraintreeVisaCheckoutCustomerStrategy:()=>Lo,createGooglePayAdyenV2CustomerStrategy:()=>ua,createGooglePayAdyenV3CustomerStrategy:()=>ha,createGooglePayAuthorizeDotNetCustomerStrategy:()=>ma,createGooglePayBigCommercePaymentsCustomerStrategy:()=>ds,createGooglePayBnzCustomerStrategy:()=>Ia,createGooglePayBraintreeCustomerStrategy:()=>Ja,createGooglePayCheckoutComCustomerStrategy:()=>Sa,createGooglePayCybersourceCustomerStrategy:()=>wa,createGooglePayOrbitalCustomerStrategy:()=>ba,createGooglePayPayPalCommerceCustomerStrategy:()=>os,createGooglePayStripeCustomerStrategy:()=>Ga,createGooglePayStripeUpeCustomerStrategy:()=>Ha,createGooglePayTdOnlineMartCustomerStrategy:()=>hs,createGooglePayWorldpayAccessCustomerStrategy:()=>$a,createPayPalCommerceCreditCustomerStrategy:()=>Qs,createPayPalCommerceCustomerStrategy:()=>xs,createPayPalCommerceFastlaneCustomerStrategy:()=>cd,createPayPalCommerceVenmoCustomerStrategy:()=>td,createStripeLinkV2CustomerStrategy:()=>bd,createStripeUPECustomerStrategy:()=>pd});var He={};Ve.r(He),Ve.d(He,{createAdyenV2PaymentStrategy:()=>jd,createAdyenV3PaymentStrategy:()=>Hd,createAffirmPaymentStrategy:()=>Jd,createAfterpayPaymentStrategy:()=>ic,createAmazonPayV2PaymentStrategy:()=>ac,createApplePayPaymentStrategy:()=>lc,createBigCommercePaymentsAlternativeMethodsPaymentStrategy:()=>Fc,createBigCommercePaymentsCreditCardsPaymentStrategy:()=>Nc,createBigCommercePaymentsFastlanePaymentStrategy:()=>_c,createBigCommercePaymentsPayLaterPaymentStrategy:()=>Cc,createBigCommercePaymentsPaymentStrategy:()=>gc,createBigCommercePaymentsRatePayPayPaymentStrategy:()=>Ec,createBigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy:()=>Bc,createBigCommercePaymentsVenmoPaymentStrategy:()=>qc,createBlueSnapDirectAPMPaymentStrategy:()=>dl,createBlueSnapDirectCreditCardPaymentStrategy:()=>al,createBlueSnapV2PaymentStrategy:()=>pl,createBoltPaymentStrategy:()=>_l,createBraintreeAchPaymentStrategy:()=>bl,createBraintreeCreditCardPaymentStrategy:()=>eu,createBraintreeFastlanePaymentStrategy:()=>jl,createBraintreeLocalMethodsPaymentStrategy:()=>Rl,createBraintreePaypalPaymentStrategy:()=>Ml,createBraintreeVenmoPaymentStrategy:()=>Wl,createBraintreeVisaCheckoutPaymentStrategy:()=>Vl,createCBAMPGSPaymentStrategy:()=>su,createCheckoutComAPMPaymentStrategy:()=>Cu,createCheckoutComCreditCardPaymentStrategy:()=>gu,createCheckoutComFawryPaymentStrategy:()=>uu,createCheckoutComIdealPaymentStrategy:()=>_u,createCheckoutComSepaPaymentStrategy:()=>fu,createClearpayPaymentStrategy:()=>Eu,createCreditCardPaymentStrategy:()=>Au,createCyberSourcePaymentStrategy:()=>Vu,createCyberSourceV2PaymentStrategy:()=>Yu,createGooglePayAdyenV2PaymentStrategy:()=>eh,createGooglePayAdyenV3PaymentStrategy:()=>ih,createGooglePayAuthorizeNetPaymentStrategy:()=>rh,createGooglePayBigCommercePaymentsPaymentStrategy:()=>_h,createGooglePayBraintreePaymentStrategy:()=>lh,createGooglePayCheckoutComPaymentStrategy:()=>oh,createGooglePayCybersourcePaymentStrategy:()=>ah,createGooglePayOrbitalPaymentStrategy:()=>sh,createGooglePayPPCPPaymentStrategy:()=>yh,createGooglePayStripePaymentStrategy:()=>dh,createGooglePayTdOnlineMartPaymentStrategy:()=>wh,createGooglePayWorldpayAccessPaymentStrategy:()=>ch,createHummPaymentStrategy:()=>bh,createKlarnaPaymentStrategy:()=>kh,createKlarnaV2PaymentStrategy:()=>xh,createLegacyPaymentStrategy:()=>Fh,createMolliePaymentStrategy:()=>Vh,createMonerisPaymentStrategy:()=>$h,createNoPaymentStrategy:()=>Ed,createOfflinePaymentStrategy:()=>Kh,createOffsitePaymentStrategy:()=>Qh,createPayPalCommerceAlternativeMethodsPaymentStrategy:()=>hp,createPayPalCommerceCreditCardsPaymentStrategy:()=>yp,createPayPalCommerceCreditPaymentStrategy:()=>op,createPayPalCommerceFastlanePaymentStrategy:()=>Ip,createPayPalCommercePaymentStrategy:()=>np,createPayPalCommerceRatePayPaymentStrategy:()=>fp,createPayPalCommerceVenmoPaymentStrategy:()=>dp,createPayPalProPaymentStrategy:()=>xp,createPaypalExpressPaymentStrategy:()=>Mp,createSagePayPaymentStrategy:()=>Fp,createSezzlePaymentStrategy:()=>jp,createSquareV2PaymentStrategy:()=>Yp,createStripeCSPaymentStrategy:()=>vm,createStripeOCSPaymentStrategy:()=>mm,createStripeUPEPaymentStrategy:()=>lm,createStripeV3PaymentStrategy:()=>om,createTDOnlineMartPaymentStrategy:()=>Im,createWorldpayAccessOpenBankingPaymentStrategy:()=>Tm,createWorldpayAccessPaymentStrategy:()=>Em,createZipPaymentStrategy:()=>Mm});var We={};Ve.r(We),Ve.d(We,{createAmazonPayV2ButtonStrategy:()=>O_,createApplePayButtonStrategy:()=>D_,createBigCommercePaymentsButtonStrategy:()=>N_,createBigCommercePaymentsPayLaterButtonStrategy:()=>F_,createBigCommercePaymentsVenmoButtonStrategy:()=>j_,createBoltButtonStrategy:()=>q_,createBraintreePaypalButtonStrategy:()=>$_,createBraintreePaypalCreditButtonStrategy:()=>J_,createBraintreeVenmoButtonStrategy:()=>ow,createBraintreeVisaCheckoutButtonStrategy:()=>X_,createGooglePayAdyenV2ButtonStrategy:()=>uw,createGooglePayAdyenV3ButtonStrategy:()=>hw,createGooglePayAuthorizeDotNetButtonStrategy:()=>pw,createGooglePayBigCommercePaymentsButtonStrategy:()=>lw,createGooglePayBraintreeButtonStrategy:()=>dw,createGooglePayCheckoutComButtonStrategy:()=>mw,createGooglePayCybersourceButtonStrategy:()=>yw,createGooglePayOrbitalButtonStrategy:()=>gw,createGooglePayPayPalCommerceButtonStrategy:()=>cw,createGooglePayStripeButtonStrategy:()=>vw,createGooglePayTdOnlineMartButtonStrategy:()=>Sw,createGooglePayWorldpayAccessButtonStrategy:()=>fw,createLinkV2ButtonStrategy:()=>zw,createPayPalCommerceButtonStrategy:()=>ww,createPayPalCommerceCreditButtonStrategy:()=>bw,createPayPalCommerceVenmoButtonStrategy:()=>Ew,createPaypalExpressButtonStrategy:()=>kw});const $e=\"b2bExtraField_\";function Ye(e){return e.name.startsWith($e)}function Ke(e){var t;const{fieldType:n,type:i}=function(e){switch(e){case\"multiline_text\":return{fieldType:\"multiline\",type:\"string\"};case\"number\":return{fieldType:\"text\",type:\"integer\"};case\"dropdown\":return{fieldType:\"dropdown\",type:\"array\"};default:return{fieldType:\"text\",type:\"string\"}}}(e.type);let r;return e.config.numberOfRows&&(r={rows:e.config.numberOfRows}),(null===(t=e.config.options)||void 0===t?void 0:t.length)&&(r=Object.assign(Object.assign({},r),{items:e.config.options.map(e=>({value:e,label:e}))})),{id:`${$e}${e.id}`,name:`${$e}${e.id}`,custom:!1,label:e.name,hidden:!e.visibleToStorefront,required:e.isRequired,default:null!=e.config.defaultValue?String(e.config.defaultValue):void 0,fieldType:n,type:i,maxLength:e.config.maxLength,max:e.config.maxValue,options:r}}function Je(){if(\"undefined\"==typeof window||!window.location)return!1;try{return!!new URLSearchParams(window.location.search).has(\"enableB2bDevMode\")&&(console.log(\"B2B Dev Mode Enabled\"),!0)}catch(e){return!1}}function Ze(e){return Je()?\"https://api-b2b.bigcommerce.com\":e}function Qe(e,t,n){return(i=t)&&i.type&&i.error?g(C(t),b(h(e,t.payload,n))):b(h(e,t,n));var i}var Xe;!function(e){e.LoadB2BTokenRequested=\"LOAD_B2B_TOKEN_REQUESTED\",e.LoadB2BTokenSucceeded=\"LOAD_B2B_TOKEN_SUCCEEDED\",e.LoadB2BTokenFailed=\"LOAD_B2B_TOKEN_FAILED\"}(Xe||(Xe={}));class et{constructor(e){this._requestSender=e}loadB2BToken(e){return t=>{var n;const i=t.getState(),r=i.config.getStoreConfigOrThrow(),{storeHash:o}=r.storeProfile,{baseUrl:a=\"\",clientId:s=\"\"}=null!==(n=r.b2bApiSettings)&&void 0!==n?n:{},d=(c=s,Je()?\"dl7c39mdpul6hyc489yk0vzxl6jesyx\":c);var c;const u=Ze(a),{id:h}=i.customer.getCustomerOrThrow(),{channelId:p}=i.checkout.getCheckoutOrThrow();return g(C(l(Xe.LoadB2BTokenRequested)),v(()=>{return t=this,n=void 0,r=function*(){const{body:t}=yield this._requestSender.getB2BToken(d,h,o,p,u,e);return l(Xe.LoadB2BTokenSucceeded,{token:t.data.token})},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r})).pipe(P(e=>Qe(Xe.LoadB2BTokenFailed,e)))}}}const tt={\"X-Checkout-SDK-Version\":\"1.916.1\"};var nt,it;class rt{constructor(e){this._requestSender=e}getB2BToken(e,t,n,i,r,o){return a=this,s=void 0,c=function*(){const{body:a}=yield this._requestSender.get(\"/customer/current.jwt\",{timeout:null==o?void 0:o.timeout,params:{app_client_id:e},headers:tt});return this._requestSender.post(`${r}/api/v2/login`,{timeout:null==o?void 0:o.timeout,credentials:!1,headers:{\"Content-Type\":\"application/json\"},body:{bcToken:a.token,customerId:t,storeHash:n,channelId:i}})},new((d=void 0)||(d=Promise))(function(e,t){function n(e){try{r(c.next(e))}catch(e){t(e)}}function i(e){try{r(c.throw(e))}catch(e){t(e)}}function r(t){var r;t.done?e(t.value):(r=t.value,r instanceof d?r:new d(function(e){e(r)})).then(n,i)}r((c=c.apply(a,s||[])).next())});var a,s,d,c}}class ot extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentProviderCustomer=13]=\"MissingPaymentProviderCustomer\",e[e.MissingPaymentRedirectUrl=14]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=15]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=16]=\"MissingPaymentToken\",e[e.MissingShippingAddress=17]=\"MissingShippingAddress\"}(nt||(nt={}));class at extends ot{constructor(e){super(function(e){switch(e){case nt.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case nt.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case nt.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case nt.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case nt.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case nt.MissingCheckoutConfig:case nt.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case nt.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case nt.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case nt.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case nt.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case nt.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case nt.MissingPaymentProviderCustomer:return\"Unable to proceed because payment provider customer is unavailable.\";case nt.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(e){e.UpdateBillingAddressRequested=\"UPDATE_BILLING_ADDRESS_REQUESTED\",e.UpdateBillingAddressSucceeded=\"UPDATE_BILLING_ADDRESS_SUCCEEDED\",e.UpdateBillingAddressFailed=\"UPDATE_BILLING_ADDRESS_FAILED\",e.ContinueAsGuestRequested=\"CONTINUE_AS_GUEST_REQUESTED\",e.ContinueAsGuestSucceeded=\"CONTINUE_AS_GUEST_SUCCEEDED\",e.ContinueAsGuestFailed=\"CONTINUE_AS_GUEST_FAILED\"}(it||(it={}));class st extends ot{constructor(e){super(e||\"Unable to continue as a guest because the customer is already signed in.\"),this.name=\"UnableToContinueAsGuestError\",this.type=\"unable_to_continue_as_guest\"}}var dt;class ct{constructor(e,t){this._requestSender=e,this._subscriptionActionCreator=t}continueAsGuest(e,t){return n=>{const i=n.getState(),r=i.checkout.getCheckout();if(!r)throw new at(nt.MissingCheckout);const o=i.customer.getCustomer();if(o&&!o.isGuest)throw new st;const a=i.billingAddress.getBillingAddress();let s;if(a){const{country:t}=a,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(a,[\"country\"]);s=Object.assign(Object.assign({},n),e)}else s=e;const d=!$(a);return w(g(C(l(it.ContinueAsGuestRequested)),v(()=>{return e=this,n=void 0,o=function*(){const{body:e}=yield this._createOrUpdateBillingAddress(r.id,s,d,t);return l(it.ContinueAsGuestSucceeded,e)},new((i=void 0)||(i=Promise))(function(t,r){function a(e){try{d(o.next(e))}catch(e){r(e)}}function s(e){try{d(o.throw(e))}catch(e){r(e)}}function d(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((o=o.apply(e,n||[])).next())});var e,n,i,o})).pipe(P(e=>Qe(it.ContinueAsGuestFailed,e))),this._updateCustomerConsent(e,t))}}updateAddress(e,t){return n=>m.create(i=>{const r=n.getState(),o=r.checkout.getCheckout();if(!o)throw new at(nt.MissingCheckout);i.next(l(it.UpdateBillingAddressRequested));const a=r.billingAddress.getBillingAddress(),s=!$(a),d=Object.assign(Object.assign({},e),{email:void 0===e.email&&a?a.email:e.email});a&&a.id&&(d.id=a.id),this._createOrUpdateBillingAddress(o.id,d,s,t).then(({body:e})=>{i.next(l(it.UpdateBillingAddressSucceeded,e)),i.complete()}).catch(e=>{i.error(h(it.UpdateBillingAddressFailed,e))})})}_updateCustomerConsent({email:e,acceptsAbandonedCartEmails:t,acceptsMarketingNewsletter:n},i){return null==t&&null==n?f():this._subscriptionActionCreator.updateSubscriptions({email:e,acceptsMarketingNewsletter:n||!1,acceptsAbandonedCartEmails:t||!1},i)}_createOrUpdateBillingAddress(e,t,n,i){return n?this._requestSender.updateAddress(e,t,i):this._requestSender.createAddress(e,t,i)}}class lt extends ot{constructor(e){super(e||\"Your checkout could not be processed because your cart is empty. Please add items to your cart and try again.\"),this.name=\"EmptyCartError\",this.type=\"empty_cart\"}}!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(dt||(dt={}));const ut=dt;const ht={include:[\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"promotions.banners\"].join(\",\")};class pt{constructor(e){this._requestSender=e}createAddress(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/billing-address`,r=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.post(i,{body:t,params:ht,headers:r,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new lt;throw e})}updateAddress(e,t,{timeout:n}={}){const{id:i}=t,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"id\"]),o=`/api/storefront/checkouts/${e}/billing-address/${i}`,a=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.put(o,{params:ht,body:r,headers:a,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new lt;throw e})}}var mt,yt;function gt(e,t){const n=u((e,t)=>t.type===mt.Synchronize?t.payload:e,e.getState(),{stateTransformer:t});return e.subscribe(e=>{n.dispatch(l(mt.Synchronize,e))},{initial:!1}),n}!function(e){e.Synchronize=\"SYNCHRONIZE\"}(mt||(mt={})),function(e){e.ClearError=\"CLEAR_ERROR\"}(yt||(yt={}));class vt{clearError(e){return{type:yt.ClearError,payload:e}}}class ft{constructor(e,t){this._requestSender=e,this._config=t}sendRequest(e,t){return this._requestSender.sendRequest(e,t)}get(e,t){return this._requestSender.get(e,t)}post(e,t){return this._requestSender.post(this._prefixed(e),t)}put(e,t){return this._requestSender.put(this._prefixed(e),t)}patch(e,t){return this._requestSender.patch(this._prefixed(e),t)}delete(e,t){return this._requestSender.delete(this._prefixed(e),t)}_prefixed(e){const t=this._config.getBasePath();return!this._config.getFeatures()[\"CHECKOUT-9950.update_sf_checkout_url_for_subfolder\"]||!t||t.endsWith(\"/checkout\")||/^https?:\\/\\//.test(e)?e:`${t}${e}`}}function St(){try{return\"production\"}catch(e){return\"development\"}}class _t{constructor(e){this._console=e}log(...e){this._logToConsole(\"log\",...e)}info(...e){this._logToConsole(\"info\",...e)}warn(...e){this._logToConsole(\"warn\",...e)}error(...e){this._logToConsole(\"error\",...e)}debug(...e){this._logToConsole(\"debug\",...e)}_logToConsole(e,...t){this._console&&this._console[e]&&this._console[e].call(this._console,...t)}}class wt{log(){}info(){}warn(){}error(){}debug(){}}const It=function(e=!0){return e?new _t(console):new wt}(\"test\"!==St());function Ct(){return It}function bt(e,t,n){const i=new WeakMap;function r(e){return(...n)=>{const r=n[n.length-1],{useCache:o}=(a=r)&&\"boolean\"==typeof a.useCache?r:{useCache:!1};var a;if(!o)return e.call(this,...n);const s=i.get(this)||{};var d;return i.get(this)||i.set(this,s),s[t]||(s[t]=(d=e,Pe(function(...e){const t=d.call(this,...e);return t instanceof m?S(t).pipe(D()):\"function\"==typeof t?Pe(e=>S(t(e)).pipe(D()),{isEqual:Y}):t},{isEqual:Y}))),s[t].call(this,...n)}}return{get(){if(\"function\"!=typeof n.value)throw new Error(\"Decorator should be used in functions\");const e=r.call(this,n.value);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e}}}var Pt;!function(e){e.LoadConfigRequested=\"LOAD_CONFIG_REQUESTED\",e.LoadConfigSucceeded=\"LOAD_CONFIG_SUCCEEDED\",e.LoadConfigFailed=\"LOAD_CONFIG_FAILED\"}(Pt||(Pt={}));class Ot{constructor(e){this._configRequestSender=e}loadConfig(e){return m.create(t=>{t.next(l(Pt.LoadConfigRequested)),this._configRequestSender.loadConfig(e).then(e=>{t.next(l(Pt.LoadConfigSucceeded,e.body)),t.complete()}).catch(e=>{t.error(h(Pt.LoadConfigFailed,e))})})}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([bt],Ot.prototype,\"loadConfig\",null);const Et={body:{},headers:{},status:0};class At extends ot{constructor(e,{message:t,errors:n}={}){const{body:i,headers:r,status:o}=e||Et;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=r,this.status=o,this.errors=n||[]}}class Tt extends At{constructor(e){super(e,{message:e.body.title}),this.name=\"CheckoutNotAvailableError\",this.type=\"checkout_not_available\"}}const kt=\"This API endpoint is for internal use only and may change in the future\";class Dt{constructor(e){this._requestSender=e}loadConfig({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/checkout-settings\",{timeout:e,headers:Object.assign({Accept:ut.JsonV1,\"X-API-INTERNAL\":kt},tt),params:t}).catch(e=>{if(e.status>=400&&e.status<500)throw new Tt(e);throw e})}}var Mt;!function(e){e.ApplyCouponRequested=\"APPLY_COUPON_REQUESTED\",e.ApplyCouponSucceeded=\"APPLY_COUPON_SUCCEEDED\",e.ApplyCouponFailed=\"APPLY_COUPON_FAILED\",e.RemoveCouponRequested=\"REMOVE_COUPON_REQUESTED\",e.RemoveCouponSucceeded=\"REMOVE_COUPON_SUCCEEDED\",e.RemoveCouponFailed=\"REMOVE_COUPON_FAILED\"}(Mt||(Mt={}));class zt{constructor(e){this._couponRequestSender=e}applyCoupon(e,t){return n=>m.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new at(nt.MissingCheckout);i.next(l(Mt.ApplyCouponRequested)),this._couponRequestSender.applyCoupon(r.id,e,t).then(({body:e})=>{i.next(l(Mt.ApplyCouponSucceeded,e)),i.complete()}).catch(e=>{i.error(h(Mt.ApplyCouponFailed,e))})})}removeCoupon(e,t){return n=>m.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new at(nt.MissingCheckout);i.next(l(Mt.RemoveCouponRequested)),this._couponRequestSender.removeCoupon(r.id,e,t).then(({body:e})=>{i.next(l(Mt.RemoveCouponSucceeded,e)),i.complete()}).catch(e=>{i.error(h(Mt.RemoveCouponFailed,e))})})}}const Nt=[\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"customer.customerGroup\",\"payments\",\"promotions.banners\"];var xt,Rt,Ft,Lt;function Bt(e){return we(e).join(\",\")}!function(e){e.AvailableShippingOptions=\"consignments.availableShippingOptions\",e.PhysicalItemsCategoryNames=\"cart.lineItems.physicalItems.categoryNames\",e.DigitalItemsCategoryNames=\"cart.lineItems.digitalItems.categoryNames\"}(xt||(xt={}));class jt{constructor(e){this._requestSender=e}applyCoupon(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/coupons`,r=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.post(i,{headers:r,timeout:n,params:{include:Bt([...Nt,xt.AvailableShippingOptions])},body:{couponCode:t}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new lt;throw e})}removeCoupon(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/coupons/${t}`,r=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.delete(i,{headers:r,timeout:n,params:{include:Bt([...Nt,xt.AvailableShippingOptions])}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new lt;throw e})}}!function(e){e.ApplyGiftCertificateRequested=\"APPLY_GIFT_CERTIFICATE_REQUESTED\",e.ApplyGiftCertificateSucceeded=\"APPLY_GIFT_CERTIFICATE_SUCCEEDED\",e.ApplyGiftCertificateFailed=\"APPLY_GIFT_CERTIFICATE_FAILED\",e.RemoveGiftCertificateRequested=\"REMOVE_GIFT_CERTIFICATE_REQUESTED\",e.RemoveGiftCertificateSucceeded=\"REMOVE_GIFT_CERTIFICATE_SUCCEEDED\",e.RemoveGiftCertificateFailed=\"REMOVE_GIFT_CERTIFICATE_FAILED\"}(Rt||(Rt={}));class Ut{constructor(e){this._giftCertificateRequestSender=e}applyGiftCertificate(e,t){return n=>m.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new at(nt.MissingCheckout);i.next(l(Rt.ApplyGiftCertificateRequested)),this._giftCertificateRequestSender.applyGiftCertificate(r.id,e,t).then(({body:e})=>{i.next(l(Rt.ApplyGiftCertificateSucceeded,e)),i.complete()}).catch(e=>{i.error(h(Rt.ApplyGiftCertificateFailed,e))})})}removeGiftCertificate(e,t){return n=>m.create(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new at(nt.MissingCheckout);i.next(l(Rt.RemoveGiftCertificateRequested)),this._giftCertificateRequestSender.removeGiftCertificate(r.id,e,t).then(({body:e})=>{i.next(l(Rt.RemoveGiftCertificateSucceeded,e)),i.complete()}).catch(e=>{i.error(h(Rt.RemoveGiftCertificateFailed,e))})})}}class qt{constructor(e){this._requestSender=e}applyGiftCertificate(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/gift-certificates`,r=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.post(i,{headers:r,timeout:n,params:{include:Bt(Nt)},body:{giftCertificateCode:t}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new lt;throw e})}removeGiftCertificate(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/gift-certificates/${t}`,r=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.delete(i,{headers:r,timeout:n,params:{include:Bt(Nt)}}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new lt;throw e})}}function Vt(e){return e&&\"resolveIds\"in e}class Gt extends ot{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class Ht{constructor(e){var t,n,i;this._factories={},this._instances={},this._defaultToken=null!==(t=null==e?void 0:e.defaultToken)&&void 0!==t?t:\"default\",this._useFallback=null===(n=null==e?void 0:e.useFallback)||void 0===n||n,this._tokenResolver=null!==(i=null==e?void 0:e.tokenResolver)&&void 0!==i?i:e=>e}get(e,t){try{return this._getInstance(e||this._defaultToken,t||e||this._defaultToken)}catch(e){if(!this._useFallback)throw e;return this._getInstance(this._defaultToken,t||this._defaultToken)}}getFactory(e,t){const n=this._tokenResolver(e,Object.keys(this._factories),t);return n?this._factories[n]:void 0}register(e,t){if(this._hasFactory(e))throw new Gt(`'${e}' is already registered.`);this._factories[e]=t}_hasFactory(e){return!!this._factories[e]}_hasInstance(e){return!!this._instances[e]}_getInstance(e,t){if(!this._hasInstance(t)){const n=this.getFactory(e);if(!n)throw new Gt(`'${e}' is not registered.`);this._instances[t]=n()}return this._instances[t]}}class Wt{constructor(e=!1){this._useFallback=e,this._registry=new Ht({tokenResolver:this._resolveToken.bind(this),defaultToken:this._encodeToken({default:!0}),useFallback:this._useFallback})}get(e){return this._registry.get(this._encodeToken(e))}getFactory(e,t){try{return this._registry.getFactory(this._encodeToken(e),t)}catch(e){return}}getUseFallback(){return this._useFallback}register(e,t){this._registry.register(this._encodeToken(e),t)}_encodeToken(e){return btoa(JSON.stringify(e))}_decodeToken(e){return JSON.parse(atob(e))}_resolveToken(e,t,n){var i;const r=this._decodeToken(e),o=[];t.forEach(e=>{const t=this._decodeToken(e),n={token:e,matches:0,default:!1,totalKeys:Object.keys(t).length};for(const[e,i]of Object.entries(t)){if(e in r&&r[e]!==i){n.matches=0;break}e in r&&r[e]===i&&n.matches++,\"default\"===e&&!0===i&&(n.default=!0)}o.push(n)});const a=o.sort((e,t)=>t.matches-e.matches).filter(e=>e.matches>0);a.length>1&&a[0].matches===a[1].matches&&\"development\"===St()&&Ct().warn(\"The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.\");const s=Object.keys(r).length;if(n){const e=a.find(e=>e.matches===s&&e.matches===e.totalKeys);if(!e)throw new Error(`Unable to resolve to a registered token with the provided token for ${JSON.stringify(r)} with exact match.`);return e.token}const d=a[0];if(d&&d.token)return d.token;if(this._useFallback){const e=null===(i=o.find(e=>e.default))||void 0===i?void 0:i.token;if(e)return e}throw new Error(`Unable to resolve to a registered token with the provided token for ${JSON.stringify(r)}.`)}}function $t(e){const t=e;return\"object\"==typeof t&&\"object\"==typeof t.payload&&\"string\"==typeof t.payload.token}!function(e){e.BuyNow=\"BUY_NOW\"}(Ft||(Ft={})),function(e){e.SignInCustomerRequested=\"SIGN_IN_CUSTOMER_REQUESTED\",e.SignInCustomerSucceeded=\"SIGN_IN_CUSTOMER_SUCCEEDED\",e.SignInCustomerFailed=\"SIGN_IN_CUSTOMER_FAILED\",e.SignOutCustomerRequested=\"SIGN_OUT_CUSTOMER_REQUESTED\",e.SignOutCustomerSucceeded=\"SIGN_OUT_CUSTOMER_SUCCEEDED\",e.SignOutCustomerFailed=\"SIGN_OUT_CUSTOMER_FAILED\",e.CreateCustomerRequested=\"CREATE_CUSTOMER_REQUESTED\",e.CreateCustomerSucceeded=\"CREATE_CUSTOMER_SUCCEEDED\",e.CreateCustomerFailed=\"CREATE_CUSTOMER_FAILED\",e.CreateCustomerAddressRequested=\"CREATE_CUSTOMER_ADDRESS_REQUESTED\",e.CreateCustomerAddressSucceeded=\"CREATE_CUSTOMER_ADDRESS_SUCCEEDED\",e.CreateCustomerAddressFailed=\"CREATE_CUSTOMER_ADDRESS_FAILED\",e.StripeLinkAuthenticated=\"STRIPE_LINK_AUTHENTICATED\"}(Lt||(Lt={}));var Yt,Kt,Jt;class Zt{constructor(e,t,n){this._customerRequestSender=e,this._checkoutActionCreator=t,this._spamProtectionActionCreator=n}createCustomer(e,t){return n=>{const i=n.getState().config.getStoreConfigOrThrow(),{isStorefrontSpamProtectionEnabled:r}=i.checkoutSettings,o=i=>S(this._customerRequestSender.createAccount(Object.assign(Object.assign({},e),{token:i}),t)).pipe(M(()=>g(this._checkoutActionCreator.loadCurrentCheckout(t)(n),C(l(Lt.CreateCustomerSucceeded)))));return g(C(l(Lt.CreateCustomerRequested)),r?S(this._spamProtectionActionCreator.execute()(n)).pipe(M(e=>{var t;return $t(e)?g(C(e),o(null===(t=e.payload)||void 0===t?void 0:t.token)):C(e)})):o()).pipe(P(e=>Qe(Lt.CreateCustomerFailed,e)))}}createAddress(e,t){return g(C(l(Lt.CreateCustomerAddressRequested)),v(()=>{return n=this,i=void 0,o=function*(){const{body:n}=yield this._customerRequestSender.createAddress(e,t);return l(Lt.CreateCustomerAddressSucceeded,n)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe(P(e=>Qe(Lt.CreateCustomerAddressFailed,e)))}signInCustomer(e,t){return n=>{const i=n.getState().checkout.getCheckoutOrThrow(),r=i.cart.source===Ft.BuyNow?i.id:void 0;return g(C(l(Lt.SignInCustomerRequested)),S(this._customerRequestSender.signInCustomer(Object.assign(Object.assign({},e),{cartId:r}),t)).pipe(M(({body:e})=>e.data.persistentCartRetrievalInformation?g(this._checkoutActionCreator.loadCheckout(e.data.persistentCartRetrievalInformation.id,t)(n),C(l(Lt.SignInCustomerSucceeded,e.data))):g(this._checkoutActionCreator.loadCurrentCheckout(t)(n),C(l(Lt.SignInCustomerSucceeded,e.data)))))).pipe(P(e=>Qe(Lt.SignInCustomerFailed,e)))}}signOutCustomer(e){return t=>{const n=t.getState().checkout.getCheckoutOrThrow(),i=n.cart.source===Ft.BuyNow?n.id:void 0;return g(C(l(Lt.SignOutCustomerRequested)),S(this._customerRequestSender.signOutCustomer(e,i)).pipe(M(({body:n})=>g(this._checkoutActionCreator.loadCurrentCheckout(e)(t),C(l(Lt.SignOutCustomerSucceeded,n.data)))))).pipe(P(e=>Qe(Lt.SignOutCustomerFailed,e)))}}}class Qt{constructor(e){this._requestSender=e}createAccount(e,{timeout:t}={}){return this._requestSender.post(\"/api/storefront/customer\",{timeout:t,headers:tt,body:e})}createAddress(e,{timeout:t}={}){return this._requestSender.post(\"/api/storefront/customer-address\",{timeout:t,headers:tt,body:e})}signInCustomer(e,{timeout:t}={}){return this._requestSender.post(\"/internalapi/v1/checkout/customer\",{timeout:t,headers:tt,body:e})}signOutCustomer({timeout:e}={},t){return this._requestSender.delete(\"/internalapi/v1/checkout/customer\",Object.assign({timeout:e,headers:tt},t&&{body:{cartId:t}}))}}function Xt(e,t,n){t.forEach(t=>{Vt(t)&&t.resolveIds.forEach(i=>{e.getFactory(i,!0)||e.register(i,()=>t(n))})})}!function(e){e.SignInFailed=\"CUSTOMER_STRATEGY_SIGN_IN_FAILED\",e.SignInRequested=\"CUSTOMER_STRATEGY_SIGN_IN_REQUESTED\",e.SignInSucceeded=\"CUSTOMER_STRATEGY_SIGN_IN_SUCCEEDED\",e.SignOutFailed=\"CUSTOMER_STRATEGY_SIGN_OUT_FAILED\",e.SignOutRequested=\"CUSTOMER_STRATEGY_SIGN_OUT_REQUESTED\",e.SignOutSucceeded=\"CUSTOMER_STRATEGY_SIGN_OUT_SUCCEEDED\",e.ExecutePaymentMethodCheckoutFailed=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_FAILED\",e.ExecutePaymentMethodCheckoutRequested=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_REQUESTED\",e.ExecutePaymentMethodCheckoutSucceeded=\"CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_SUCCEEDED\",e.InitializeFailed=\"CUSTOMER_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"CUSTOMER_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"CUSTOMER_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"CUSTOMER_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"CUSTOMER_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"CUSTOMER_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"CUSTOMER_STRATEGY_WIDGET_INTERACTION_FAILED\"}(Yt||(Yt={}));class en{constructor(e,t,n){this._strategyRegistry=e,this._strategyRegistryV2=t,this._paymentIntegrationService=n}signIn(e,t){return m.create(n=>{const i=t&&t.methodId,r={methodId:i};n.next(l(Yt.SignInRequested,void 0,r)),this._getStrategy(i).signIn(e,t).then(()=>{n.next(l(Yt.SignInSucceeded,void 0,r)),n.complete()}).catch(e=>{n.error(h(Yt.SignInFailed,e,r))})})}signOut(e){return m.create(t=>{const n=e&&e.methodId,i={methodId:n};t.next(l(Yt.SignOutRequested,void 0,i)),this._getStrategy(n).signOut(e).then(()=>{t.next(l(Yt.SignOutSucceeded,void 0,i)),t.complete()}).catch(e=>{t.error(h(Yt.SignOutFailed,e,i))})})}executePaymentMethodCheckout(e){return m.create(t=>{const n=e&&e.methodId,i={methodId:n};t.next(l(Yt.ExecutePaymentMethodCheckoutRequested,void 0,i)),this._getStrategy(n).executePaymentMethodCheckout(e).then(()=>{t.next(l(Yt.ExecutePaymentMethodCheckoutSucceeded,void 0,i)),t.complete()}).catch(e=>{t.error(h(Yt.ExecutePaymentMethodCheckoutFailed,e,i))})})}initialize(e){return t=>m.create(n=>{var i;const r=t.getState(),o=e&&e.methodId,a={methodId:o};if(Xt(this._strategyRegistryV2,null!==(i=null==e?void 0:e.integrations)&&void 0!==i?i:[],this._paymentIntegrationService),o&&r.customerStrategies.isInitialized(o))return n.complete();n.next(l(Yt.InitializeRequested,void 0,a)),this._getStrategy(o).initialize(e).then(()=>{n.next(l(Yt.InitializeSucceeded,void 0,a)),n.complete()}).catch(e=>{n.error(h(Yt.InitializeFailed,e,a))})})}deinitialize(e){return t=>m.create(n=>{const i=t.getState(),r=e&&e.methodId,o={methodId:r};if(r&&!i.customerStrategies.isInitialized(r))return n.complete();n.next(l(Yt.DeinitializeRequested,void 0,o)),this._getStrategy(r).deinitialize(e).then(()=>{n.next(l(Yt.DeinitializeSucceeded,void 0,o)),n.complete()}).catch(e=>{n.error(h(Yt.DeinitializeFailed,e,o))})})}widgetInteraction(e,t){return m.create(n=>{const i={methodId:t&&t.methodId};n.next(l(Yt.WidgetInteractionStarted,void 0,i)),e().then(()=>{n.next(l(Yt.WidgetInteractionFinished,void 0,i)),n.complete()}).catch(e=>{n.error(h(Yt.WidgetInteractionFailed,e,i))})})}_getStrategy(e){let t;try{t=this._strategyRegistryV2.get({id:e||\"\"})}catch(n){t=this._strategyRegistry.get(e)}return t}}function tn(e,t=[]){return Array.isArray(t)?Bt([...e,...t]):function(e,t){const n=ie(me(t,e=>!e)),i=ie(L(t));return Bt([...R(e,n),...i])}(e,t)}class nn{constructor(e){this._requestSender=e}loadCheckout(e,{params:{include:t}={},timeout:n}={}){const i=`/api/storefront/checkout/${e}`,r=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.get(i,{params:{include:tn(Nt,t)},headers:r,timeout:n}).catch(e=>{if(e.status>=400&&e.status<500)throw new Tt(e);throw e})}updateCheckout(e,t,{params:{include:n}={},timeout:i}={}){const r=`/api/storefront/checkout/${e}`,o=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.put(r,{params:{include:tn(Nt,n)},body:t,headers:o,timeout:i}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new lt;throw e})}}!function(e){e.LoadCheckoutRequested=\"LOAD_CHECKOUT_REQUESTED\",e.LoadCheckoutSucceeded=\"LOAD_CHECKOUT_SUCCEEDED\",e.LoadCheckoutFailed=\"LOAD_CHECKOUT_FAILED\",e.UpdateCheckoutRequested=\"UPDATE_CHECKOUT_REQUESTED\",e.UpdateCheckoutSucceeded=\"UPDATE_CHECKOUT_SUCCEEDED\",e.UpdateCheckoutFailed=\"UPDATE_CHECKOUT_FAILED\"}(Kt||(Kt={})),function(e){e.HydrateInitialState=\"HYDRATE_INITIAL_STATE\"}(Jt||(Jt={}));var rn;class on{constructor(e,t,n){this._checkoutRequestSender=e,this._configActionCreator=t,this._formFieldsActionCreator=n}loadCheckout(e,t){return()=>g(C(l(Kt.LoadCheckoutRequested)),w(this._configActionCreator.loadConfig({useCache:!0,timeout:null==t?void 0:t.timeout,params:{checkoutId:e}}),this._formFieldsActionCreator.loadFormFields({useCache:!0,timeout:null==t?void 0:t.timeout})),v(()=>this._checkoutRequestSender.loadCheckout(e,t).then(({body:e})=>l(Kt.LoadCheckoutSucceeded,this._transformCustomerAddresses(e))))).pipe(P(e=>Qe(Kt.LoadCheckoutFailed,e)))}loadDefaultCheckout(e){return t=>g(C(l(Kt.LoadCheckoutRequested)),w(this._configActionCreator.loadConfig({useCache:!0,timeout:null==e?void 0:e.timeout}),this._formFieldsActionCreator.loadFormFields({useCache:!0,timeout:null==e?void 0:e.timeout})),v(()=>{return n=this,i=void 0,o=function*(){const n=t.getState().config.getContextConfig();if(!n||!n.checkoutId)throw new at(nt.MissingCheckoutConfig);const{body:i}=yield this._checkoutRequestSender.loadCheckout(n.checkoutId,e);return l(Kt.LoadCheckoutSucceeded,this._transformCustomerAddresses(i))},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe(P(e=>Qe(Kt.LoadCheckoutFailed,e)))}updateCheckout(e,t){return n=>new m(i=>{const r=n.getState().checkout.getCheckout();if(!r)throw new at(nt.MissingCheckout);i.next(l(Kt.UpdateCheckoutRequested)),this._checkoutRequestSender.updateCheckout(r.id,e,t).then(({body:e})=>{i.next(l(Kt.UpdateCheckoutSucceeded,e)),i.complete()}).catch(e=>{i.error(h(Kt.UpdateCheckoutFailed,e))})})}loadCurrentCheckout(e){return t=>{const n=t.getState().checkout.getCheckout();if(!n)throw new at(nt.MissingCheckout);return this.loadCheckout(n.id,e)(t)}}hydrateInitialState(e){return{type:Jt.HydrateInitialState,payload:e}}_transformCustomerAddresses(e){return Object.assign(Object.assign({},e),{customer:Object.assign(Object.assign({},e.customer),{addresses:e.customer.addresses.map(e=>Object.assign(Object.assign({},e),{shouldSaveAddress:!1}))})})}}!function(e){e.LoadFormFieldsRequested=\"LOAD_FORM_FIELDS_REQUESTED\",e.LoadFormFieldsSucceeded=\"LOAD_FORM_FIELDS_SUCCEEDED\",e.LoadFormFieldsFailed=\"LOAD_FORM_FIELDS_FAILED\"}(rn||(rn={}));var an;class sn{constructor(e){this._formFieldsRequestSender=e}loadFormFields(e){return g(C(l(rn.LoadFormFieldsRequested)),v(()=>{return t=this,n=void 0,r=function*(){const{body:t}=yield this._formFieldsRequestSender.loadFields(e);return l(rn.LoadFormFieldsSucceeded,t)},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r})).pipe(P(e=>Qe(rn.LoadFormFieldsFailed,e)))}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([bt],sn.prototype,\"loadFormFields\",null);class dn{constructor(e){this._requestSender=e}loadFields({timeout:e}={}){return this._requestSender.get(\"/api/storefront/form-fields\",{timeout:e,headers:Object.assign({Accept:ut.JsonV1,\"X-API-INTERNAL\":kt},tt)})}}class cn extends ot{constructor(){super(\"You haven't complete our spam protection challenge. Please try again.\"),this.name=\"SpamProtectionChallengeNotCompletedError\",this.type=\"spam_protection_challenge_not_completed\"}}class ln extends ot{constructor(){super(\"We were not able to complete your spam protection verification. Please try again.\"),this.name=\"SpamProtectionFailedError\",this.type=\"spam_protection_failed\"}}!function(e){e.InitializeFailed=\"SPAM_PROTECTION_INITIALIZE_FAILED\",e.InitializeSucceeded=\"SPAM_PROTECTION_INITIALIZE_SUCCEEDED\",e.InitializeRequested=\"SPAM_PROTECTION_INITIALIZE_REQUESTED\",e.VerifyCheckoutRequested=\"SPAM_PROTECTION_CHECKOUT_VERIFY_REQUESTED\",e.VerifyCheckoutSucceeded=\"SPAM_PROTECTION_CHECKOUT_VERIFY_SUCCEEDED\",e.VerifyCheckoutFailed=\"SPAM_PROTECTION_CHECKOUT_VERIFY_FAILED\",e.ExecuteRequested=\"SPAM_PROTECTION_EXECUTE_REQUESTED\",e.ExecuteSucceeded=\"SPAM_PROTECTION_EXECUTE_SUCCEEDED\",e.ExecuteFailed=\"SPAM_PROTECTION_EXECUTE_FAILED\"}(an||(an={}));var un,hn,pn,mn=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class yn{constructor(e,t){this._googleRecaptcha=e,this._requestSender=t}initialize(e){return t=>g(C(l(an.InitializeRequested,void 0)),v(()=>mn(this,void 0,void 0,function*(){const n=e?e.containerId:\"spamProtectionContainer\";if(document.getElementById(n)&&this._googleRecaptcha.reset(n),!e&&!document.getElementById(n)){const e=document.createElement(\"div\");e.setAttribute(\"id\",n),document.body.appendChild(e)}const i=t.getState().config.getStoreConfigOrThrow().checkoutSettings.googleRecaptchaSitekey;return yield this._googleRecaptcha.load(n,i),l(an.InitializeSucceeded)}))).pipe(P(e=>Qe(an.InitializeFailed,e)))}verifyCheckoutSpamProtection(){return e=>v(()=>{const t=e.getState().checkout.getCheckout();if(!t)throw new at(nt.MissingCheckout);return g(C(l(an.VerifyCheckoutRequested)),S(this.execute()(e)).pipe(M(e=>$t(e)&&e.payload?S(this._requestSender.validate(t.id,e.payload.token)).pipe(M(({body:t})=>g(C(e),C(l(an.VerifyCheckoutSucceeded,t))))):C(e)))).pipe(P(e=>Qe(an.VerifyCheckoutFailed,e)))})}execute(){return e=>g(C(l(an.ExecuteRequested)),this.initialize()(e),this._googleRecaptcha.execute().pipe(z(1)).pipe(M(({error:e,token:t})=>mn(this,void 0,void 0,function*(){if(e instanceof cn)throw e;if(e||!t)throw new ln;return l(an.ExecuteSucceeded,{token:t})})))).pipe(P(e=>Qe(an.ExecuteFailed,e)))}}class gn{constructor(e=window){this._window=e}create(e){return new this._window.MutationObserver(e)}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(un||(un={}));class vn extends ot{constructor(e){super(function(e){switch(e){case un.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case un.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case un.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case un.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class fn extends ot{constructor(){super(\"Spam protection is not loaded. Please try again.\"),this.name=\"SpamProtectionNotLoadedError\",this.type=\"spam_protection_failed\"}}class Sn{constructor(e,t){this.googleRecaptchaScriptLoader=e,this.mutationObserverFactory=t,this._memoized=Pe((e,t,n)=>{const i=new y;if(!n)throw new Error;return this._widgetId=e.render(n.id,{sitekey:t,size:\"invisible\",callback:()=>{i.next({token:e.getResponse(this._widgetId)}),e.reset(this._widgetId)},\"error-callback\":()=>{i.next({error:new ln})}}),i},{isEqual:(e,t)=>e===t})}load(e,t){return this.googleRecaptchaScriptLoader.load().then(n=>{n&&(this._event$=this._memoized(n,t,document.getElementById(e)),this._recaptcha=n)}).catch(e=>{throw e})}reset(e){var t;const n=document.getElementById(e);null==n||n.remove(),null===(t=this._recaptcha)||void 0===t||t.reset(this._widgetId)}execute(){return v(()=>{const e=this._event$,t=this._recaptcha;if(!e||!t)throw new vn(un.SpamProtectionNotInitialized);return v(()=>{const e=document.querySelector('iframe[src*=\"bframe\"]');return e?C(e):b(new fn)}).pipe(k(e=>e.pipe(O(250),M((e,t)=>t<28?C(e):b(e)))),M(n=>(this._watchRecaptchaChallengeWindow(e,n),t.execute(this._widgetId),e)),P(e=>C({error:e})))})}_watchRecaptchaChallengeWindow(e,t){const n=t.parentElement;if(!n)throw new fn;const i=n.parentElement;if(!i)throw new fn;this.mutationObserverFactory.create(()=>{\"hidden\"===i.style.visibility&&e.next({error:new cn})}).observe(i,{attributes:!0,attributeFilter:[\"style\"]})}}class _n{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(){return this._loadPromise||(this._loadPromise=this._loadScript()),this._loadPromise}_loadScript(){const e=\"initRecaptcha\",t=[`onload=${e}`,\"render=explicit\"].join(\"&\");return new Promise((n,i)=>{this._window[e]=()=>n(this._window.grecaptcha),this._scriptLoader.loadScript(`//www.google.com/recaptcha/api.js?${t}`).catch(e=>{this._loadPromise=void 0,i(e)})})}}function wn(e){return new Sn(new _n(e),new gn)}class In{constructor(e){this._requestSender=e}validate(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/spam-protection`,r=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.post(i,{body:{token:t},headers:r,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new lt;throw e})}}class Cn{constructor(e,t){this._store=e,this._customerActionCreator=t}signIn(e,t){return this._store.dispatch(this._customerActionCreator.signInCustomer(e,t))}signOut(e){return this._store.dispatch(this._customerActionCreator.signOutCustomer(e))}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve(this._store.getState())}initialize(){return Promise.resolve(this._store.getState())}deinitialize(){return Promise.resolve(this._store.getState())}}function bn(e){if(!/^(https?:)?\\/\\//.test(e))throw new Gt(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=e;const n=t.port&&-1!==e.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${n?`:${n}`:\"\"}`,pathname:t.pathname,port:n,protocol:t.protocol,search:t.search}}class Pn extends ot{constructor(e){super(e||\"Unable to proceed due to no extension configured for this region.\"),this.name=\"ExtensionNotFoundError\",this.type=\"extension_not_found\"}}function On(e,t){return e.type===t}!function(e){e.LoadExtensionsRequested=\"LOAD_EXTENSIONS_REQUESTED\",e.LoadExtensionsSucceeded=\"LOAD_EXTENSIONS_SUCCEEDED\",e.LoadExtensionsFailed=\"LOAD_EXTENSIONS_FAILED\",e.RenderExtensionRequested=\"RENDER_EXTENSION_REQUESTED\",e.RenderExtensionSucceeded=\"RENDER_EXTENSION_SUCCEEDED\",e.RenderExtensionFailed=\"RENDER_EXTENSION_FAILED\"}(hn||(hn={}));class En{constructor(e,t,n){this._targetWindow=t,this._context=n,this._targetOrigin=\"*\"===e?\"*\":bn(e).origin}post(e,t){const n=this._targetWindow;if(window===n)return;if(!n)throw new Error(\"Unable to post message because target window is not set.\");const i=t&&_(window,\"message\").pipe(A(e=>e.origin===this._targetOrigin&&On(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)),T(e=>{if(t.errorType===e.data.type)throw e.data;return e.data}),z(1)).toPromise();return n.postMessage(Object.assign(Object.assign({},e),{context:this._context}),this._targetOrigin),i}setTarget(e){this._targetWindow=e}setContext(e){this._context=e}}function An(e){var t;const n=null===(t=document.querySelector(`[data-extension-id=\"${e.id}\"]`))||void 0===t?void 0:t.querySelector(\"iframe\");if(!(null==n?void 0:n.contentWindow))throw new Pn(`Unable to post due to no extension rendered for ID: ${e.id}.`);return new En(e.url,n.contentWindow)}!function(e){e.ExtensionReady=\"EXTENSION:READY\",e.ExtensionFailed=\"EXTENSION:FAILED\"}(pn||(pn={}));class Tn{constructor(e){const t=new Promise((e,t)=>{this.cancel=t});this.promise=Promise.race([e,t])}}class kn extends ot{constructor(e){super(e||\"Unable to proceed because the required element is unexpectedly detached from the page.\"),this.name=\"UnexpectedDetachmentError\",this.type=\"unexpected_detachment\"}}var Dn;class Mn{constructor(e){this._mutationObserver=e}ensurePresence(e,t){return n=this,i=void 0,o=function*(){const n=new Tn(t),i=this._mutationObserver.create(t=>{t.forEach(t=>{0!==Array.from(t.removedNodes).filter(t=>e.some(e=>t===e||t.contains(e))).length&&n.cancel(new kn)})});i.observe(document.body,{childList:!0,subtree:!0});try{const e=yield n.promise;return i.disconnect(),e}catch(e){throw i.disconnect(),e}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}function zn(e,t){const{iframeResizer:n}=Ve(785);return n(e,t)}class Nn extends ot{constructor(e){super(e||\"Unable to load an extension\"),this.name=\"ExtensionNotLoadedError\",this.type=\"extension_not_loaded\"}}!function(e){e.Subscribe=\"EXTENSION_INTERNAL:SUBSCRIBE\",e.Unsubscribe=\"EXTENSION_INTERNAL:UNSUBSCRIBE\",e.ResizeIframe=\"EXTENSION_INTERNAL:RESIZE_IFRAME\"}(Dn||(Dn={}));class xn{constructor(e){this._options=e}createFrame(e,t,n,i){const r=document.getElementById(t),{timeout:o=6e4}=this._options||{};if(!r)throw new Nn(\"Unable to embed the iframe because the container element could not be found.\");const a=document.createElement(\"iframe\");return a.src=e,a.style.border=\"none\",a.style.display=\"none\",a.style.width=\"100%\",r.appendChild(a),this._toResizableFrame(a,o,n,i).catch(e=>{throw r.removeChild(a),e})}_toResizableFrame(e,t,n,i){return r=this,o=void 0,s=function*(){const r=new Mn(new gn),o=new Promise((r,o)=>{const a=window.setTimeout(()=>{try{i()}catch(e){e instanceof Error&&console.error(`Extension rendering timed out after ${t}ms, and the callback function could not be executed. Error: ${e.message}`)}o(new Nn(\"Unable to load the extension because the content could not be loaded.\"))},t),s=t=>{if(t.origin===bn(e.src).origin&&On(t.data,Dn.ResizeIframe)){e.style.display=\"\";const t=zn({autoResize:!1,scrolling:!1,sizeWidth:!1,heightCalculationMethod:\"bodyOffset\",initCallback:n},e);d(),r(t[t.length-1])}},d=()=>{window.removeEventListener(\"message\",s),window.clearTimeout(a)};window.addEventListener(\"message\",s)});return r.ensurePresence([e],o)},new((a=void 0)||(a=Promise))(function(e,t){function n(e){try{d(s.next(e))}catch(e){t(e)}}function i(e){try{d(s.throw(e))}catch(e){t(e)}}function d(t){var r;t.done?e(t.value):(r=t.value,r instanceof a?r:new a(function(e){e(r)})).then(n,i)}d((s=s.apply(r,o||[])).next())});var r,o,a,s}}class Rn{constructor(e,t,n){this._containerId=e,this._extension=t,this._config=n;const{cartId:i,parentOrigin:r}=this._config;this._url=new URL(this._extension.url),this._url.searchParams.set(\"extensionId\",this._extension.id),this._url.searchParams.set(\"cartId\",i),this._url.searchParams.set(\"parentOrigin\",r)}attach(){var e,t,n,i,r;return t=this,n=void 0,r=function*(){if(null===(e=document.querySelector(`[data-extension-id=\"${this._extension.id}\"]`))||void 0===e?void 0:e.querySelector(\"iframe\"))return;const t=new xn,n=e=>{An(this._extension).post({type:e})};this._iframe=yield t.createFrame(this._url.toString(),this._containerId,()=>{n(pn.ExtensionReady)},()=>{n(pn.ExtensionFailed)});const i=document.getElementById(this._containerId);null==i||i.setAttribute(\"data-extension-id\",this._extension.id)},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())})}detach(){this._iframe&&this._iframe.parentElement&&this._iframe.parentElement.removeChild(this._iframe)}}class Fn{constructor(e){this._requestSender=e}loadExtensions(e){return()=>m.create(t=>{t.next(l(hn.LoadExtensionsRequested)),this._requestSender.loadExtensions(e).then(e=>{const n=e.body;t.next(l(hn.LoadExtensionsSucceeded,n)),t.complete()}).catch(e=>{t.error(h(hn.LoadExtensionsFailed,e))})})}renderExtension(e,t,n){return i=>m.create(r=>{return o=this,a=void 0,d=function*(){const o=i.getState(),{id:a}=o.cart.getCartOrThrow(),{links:{checkoutLink:s}}=o.config.getStoreConfigOrThrow(),d=o.extensions.getExtensionByRegion(t);try{if(!d)throw new Pn(`Unable to proceed due to no extension configured for the region: ${t}.`);if(r.next(l(hn.RenderExtensionRequested)),\"worker\"===d.type){const e=function(e){if(!window.Worker)throw new Error(\"Unable to load the extension's web worker: your browser does not support Web Workers.\");try{const t=URL.createObjectURL(new Blob([`importScripts=((i)=>(...a)=>i(...a.map((u)=>''+new URL(u,\"${e}\"))))(importScripts);importScripts(\"${e}\")`],{type:\"text/javascript\"}));return new Worker(t)}catch(e){throw new Error(\"Unable to load the extension's web worker\")}}(d.url);n.add(d.id,e)}else{const t=new Rn(e,d,{cartId:a,parentOrigin:bn(s).origin});yield t.attach()}r.next(l(hn.RenderExtensionSucceeded)),r.complete()}catch(e){r.error(h(hn.RenderExtensionFailed,e))}},new((s=void 0)||(s=Promise))(function(e,t){function n(e){try{r(d.next(e))}catch(e){t(e)}}function i(e){try{r(d.throw(e))}catch(e){t(e)}}function r(t){var r;t.done?e(t.value):(r=t.value,r instanceof s?r:new s(function(e){e(r)})).then(n,i)}r((d=d.apply(o,a||[])).next())});var o,a,s,d})}}class Ln{constructor(e){this._requestSender=e}loadExtensions({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/checkout-extensions\",{timeout:e,headers:Object.assign({Accept:ut.JsonV1},tt),params:t})}}const Bn=function(e,t,n){return t&&n?jn(0,t,n):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const i=Object.getOwnPropertyDescriptor(e.prototype,n);i&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,jn(e.prototype,n,i))}),t}(e)};function jn(e,t,n){if(\"function\"!=typeof n.value)return n;let i=n.value;return{get(){const e=i.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){i=e}}}var Un,qn;class Vn{constructor(e){this._worker=e,this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,this._worker.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,this._worker.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const i=n.indexOf(t);i>=0&&n.splice(i,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){const t=e.data,{context:n}=t,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"context\"]);this.trigger(i,n)}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([Bn],Vn.prototype,\"_handleMessage\",null);class Gn{constructor(e,t){this._worker=e,this._context=t}post(e){if(!this._worker)throw new Error(\"WorkerPoster: Worker is not initialized or creation failed. Cannot post message.\");this._worker.postMessage(Object.assign(Object.assign({},e),{context:this._context}))}}class Hn extends ot{constructor(e){super(e||\"Unable to proceed due to unsupported extension command.\"),this.name=\"UnsupportedExtensionCommandError\",this.type=\"unsupported_extension_command_error\"}}class Wn extends ot{constructor(e){super(e||\"Unable to proceed due to unsupported extension query.\"),this.name=\"UnsupportedExtensionQueryError\",this.type=\"unsupported_extension_query_error\"}}!function(e){e.ReloadCheckout=\"EXTENSION:RELOAD_CHECKOUT\",e.ShowLoadingIndicator=\"EXTENSION:SHOW_LOADING_INDICATOR\",e.SetIframeStyle=\"EXTENSION:SET_IFRAME_STYLE\",e.ReRenderShippingForm=\"EXTENSION:RE_RENDER_SHIPPING_FORM\",e.ReRenderShippingStep=\"EXTENSION:RE_RENDER_SHIPPING_STEP\"}(Un||(Un={})),function(e){e.GetConsignments=\"EXTENSION:GET_CONSIGNMENTS\"}(qn||(qn={}));class $n{constructor(e={},t={},n={}){this._workers=e,this._commandListeners=t,this._queryListeners=n}add(e,t){this._workers[e]=t}listenForCommand(e,t,n){const i=this._getWorkerById(e);this._commandListeners[e]||(this._commandListeners[e]=new Vn(i));const r=this._commandListeners[e];r.listen();const o=this._validateCommand(t),a=(t,i)=>{(null==i?void 0:i.extensionId)===e&&n(t,i)};return r.addListener(o,a),()=>{r.removeListener(o,a)}}listenForQuery(e,t,n){const i=this._getWorkerById(e);this._queryListeners[e]||(this._queryListeners[e]=new Vn(i));const r=this._queryListeners[e];r.listen();const o=this._validateQuery(t),a=(t,i)=>{(null==i?void 0:i.extensionId)===e&&n(t,i)};return r.addListener(o,a),()=>{r.removeListener(o,a)}}stopListen(e){this._commandListeners[e]&&this._commandListeners[e].stopListen(),this._queryListeners[e]&&this._queryListeners[e].stopListen()}post(e,t){if(!this._workers[e])throw new Error(`Worker with extensionId ${e} not found`);new Gn(this._workers[e],e).post(t)}clearCacheById(e){delete this._workers[e]}_getWorkerById(e){const t=this._workers[e];if(!t)throw new Pn(`Worker with extensionId ${e} not found`);return t}_validateCommand(e){if(Object.values(Un).includes(e))return e;throw new Hn}_validateQuery(e){if(Object.values(qn).includes(e))return e;throw new Wn}}function Yn(e){return bn(0===e.hostname.indexOf(\"www\")?e.href:e.href.replace(e.hostname,`www.${e.hostname}`))}var Kn;class Jn{constructor(e){this._sourceOrigins=[bn(e).origin,Yn(bn(e)).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const i=n.indexOf(t);i>=0&&n.splice(i,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){if(-1===this._sourceOrigins.indexOf(e.origin)||!On(e.data,e.data.type))return;const t=e.data,{context:n}=t,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"context\"]);this.trigger(i,n)}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([Bn],Jn.prototype,\"_handleMessage\",null);class Zn{constructor(e,t,n={},i={},r={}){this._store=e,this._workerExtensionMessenger=t,this._commandListeners=n,this._queryListeners=i,this._posters=r}clearCacheByRegion(e){const t=this._getExtensionByRegion(e);\"worker\"!==t.type?this.clearCacheById(t.id):this._workerExtensionMessenger.clearCacheById(t.id)}clearCacheById(e){const t=this._getExtensionById(e);\"worker\"!==t.type?(this._commandListeners[e]&&delete this._commandListeners[e],this._queryListeners[e]&&delete this._queryListeners[e],this._posters[e]&&delete this._posters[e]):this._workerExtensionMessenger.clearCacheById(t.id)}listenForCommand(e,t,n){const i=this._getExtensionById(e);if(\"worker\"===i.type)return this._workerExtensionMessenger.listenForCommand(e,t,n);this._commandListeners[e]||(this._commandListeners[e]=new Jn(i.url));const r=this._commandListeners[e];r.listen();const o=this._validateCommand(t),a=(t,i)=>{(null==i?void 0:i.extensionId)===e&&n(t,i)};return r.addListener(o,a),()=>{r.removeListener(o,a)}}listenForQuery(e,t,n){const i=this._getExtensionById(e);if(\"worker\"===i.type)return this._workerExtensionMessenger.listenForQuery(e,t,n);this._queryListeners[e]||(this._queryListeners[e]=new Jn(i.url));const r=this._queryListeners[e];r.listen();const o=this._validateQuery(t),a=(t,i)=>{(null==i?void 0:i.extensionId)===e&&n(t,i)};return r.addListener(o,a),()=>{r.removeListener(o,a)}}stopListen(e){\"worker\"!==this._getExtensionById(e).type?(this._commandListeners[e]&&this._commandListeners[e].stopListen(),this._queryListeners[e]&&this._queryListeners[e].stopListen()):this._workerExtensionMessenger.stopListen(e)}post(e,t){try{const n=this._getExtensionById(e);if(\"worker\"===n.type)return void this._workerExtensionMessenger.post(e,t);this._posters[e]||(this._posters[e]=An(n)),this._posters[e].post(t)}catch(n){this.clearCacheById(e),console.log(`Unable to post event to extension(${e}) because extension iframe is not mounted.\\nThe event that could not be delivered:`,t)}}_getExtensionById(e){var t;this._getExtensions();const n=null===(t=this._extensions)||void 0===t?void 0:t.find(t=>t.id===e);if(!n)throw new Pn(`Unable to proceed due to no extension found for ID: ${e}.`);return n}_getExtensionByRegion(e){var t;this._getExtensions();const n=null===(t=this._extensions)||void 0===t?void 0:t.find(t=>t.region===e);if(!n)throw new Pn(`Unable to proceed due to no extension found for region: ${e}.`);return n}_getExtensions(){if(this._extensions)return;const{extensions:{getExtensions:e}}=this._store.getState();if(this._extensions=e(),!this._extensions)throw new Pn(\"Extension configurations not found.\")}_validateCommand(e){if(Object.values(Un).includes(e))return e;throw new Hn}_validateQuery(e){if(Object.values(qn).includes(e))return e;throw new Wn}}class Qn{constructor(e,t,n){this._store=e,this._extensionMessenger=t,this._subscribers=n,this._subscribed={},this._unsubscribers={},this._listeners={}}listen(){var e;const{data:{getExtensions:t}}=this._store.getState();null===(e=t())||void 0===e||e.forEach(e=>{if(this._listeners[e.id])return;const t=new Jn(e.url);t.addListener(Dn.Subscribe,this._handleSubscribe.bind(this)),t.addListener(Dn.Unsubscribe,this._handleUnsubscribe.bind(this)),t.listen(),this._listeners[e.id]=t})}broadcast(e){var t;const{data:{getExtensions:n}}=this._store.getState();null===(t=n())||void 0===t||t.forEach(t=>{this._subscribed[t.id]&&this._extensionMessenger.post(t.id,e)})}_handleSubscribe({payload:{eventType:e,extensionId:t}}){this._subscribed[t]=!0,this._unsubscribers[e]||(this._unsubscribers[e]=this._subscribers[e](this._store,this))}_handleUnsubscribe({payload:{eventType:e,extensionId:t}}){var n,i;delete this._subscribed[t],Object.keys(this._subscribed).length||(null===(i=(n=this._unsubscribers)[e])||void 0===i||i.call(n),delete this._unsubscribers[e])}}!function(e){e.ConsignmentsChanged=\"EXTENSION:CONSIGNMENTS_CHANGED\"}(Kn||(Kn={}));const Xn=(e,t)=>{var n;const{data:{getConsignments:i}}=e.getState();let r=null!==(n=i())&&void 0!==n?n:[];return e.subscribe(({data:{getConsignments:e}})=>{var n;const i=null!==(n=e())&&void 0!==n?n:[];i!==r&&(t.broadcast({type:Kn.ConsignmentsChanged,payload:{consignments:i,previousConsignments:r}}),r=i)},({data:{getConsignments:e}})=>e())};class ei extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}var ti,ni;!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(ti||(ti={}));class ii extends ei{constructor(e){super(function(e){switch(e){case ti.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case ti.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case ti.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case ti.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case ti.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case ti.MissingCheckoutConfig:case ti.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case ti.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case ti.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case ti.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case ti.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case ti.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case ti.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function ri(e){return t=e.lineItems.physicalItems.filter(e=>!e.addedByPromotion),ye(t,(e,t)=>e+t.quantity,0);var t}function oi(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(ni||(ni={}));class ai extends ei{constructor(e){super(function(e){switch(e){case ni.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case ni.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case ni.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case ni.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const si={de:\"eu\",jp:\"fe\",uk:\"eu\",us:\"na\"};var di,ci,li,ui,hi,pi;!function(e){e.en_US=\"en_US\",e.en_GB=\"en_GB\",e.de_DE=\"de_DE\",e.fr_FR=\"fr_FR\",e.it_IT=\"it_IT\",e.es_ES=\"es_ES\",e.ja_JP=\"ja_JP\"}(di||(di={})),function(e){e.Home=\"Home\",e.Product=\"Product\",e.Cart=\"Cart\",e.Checkout=\"Checkout\",e.Other=\"Other\"}(ci||(ci={})),function(e){e.USD=\"USD\",e.EUR=\"EUR\",e.GBP=\"GBP\",e.JPY=\"JPY\"}(li||(li={})),function(e){e.PayAndShip=\"PayAndShip\",e.PayOnly=\"PayOnly\"}(ui||(ui={})),function(e){e.Gold=\"Gold\",e.LightGray=\"LightGray\",e.DarkGray=\"DarkGray\"}(hi||(hi={})),function(e){e.C0001=\"C0001\"}(pi||(pi={}));var mi=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class yi{constructor(e){this.amazonPayV2ScriptLoader=e}initialize(e){return mi(this,void 0,void 0,function*(){this.amazonPayV2SDK=yield this.amazonPayV2ScriptLoader.load(e),this.buttonParentContainer=this.buttonParentContainer||this.createAmazonPayButtonParentContainer()})}deinitialize(){var e;return this.amazonPayV2Button=void 0,null===(e=this.buttonParentContainer)||void 0===e||e.remove(),this.buttonParentContainer=void 0,this.amazonPayV2SDK=void 0,Promise.resolve()}bindButton(e,t,n){this.getAmazonPayV2SDK().Pay.bindChangeAction(`#${e}`,{amazonCheckoutSessionId:t,changeAction:n})}createButton(e,t){this.amazonPayV2Button=this.getAmazonPayV2SDK().Pay.renderButton(`#${e}`,t)}prepareCheckout(e){const t=this.prepareRequestConfig(e);this.getAmazonPayV2Button().onClick(()=>{this.getAmazonPayV2Button().initCheckout(t)})}prepareCheckoutWithCreationRequestConfig(e){this.getAmazonPayV2Button().onClick(()=>mi(this,void 0,void 0,function*(){const t=yield e();if(t){const e=this.prepareRequestConfig(t.createCheckoutSessionConfig,t.estimatedOrderAmount,t.productType);this.getAmazonPayV2Button().initCheckout(e)}}))}signout(){return mi(this,void 0,void 0,function*(){return this.amazonPayV2SDK&&this.amazonPayV2SDK.Pay.signout(),Promise.resolve()})}renderAmazonPayButton({buttonColor:e,checkoutState:t,containerId:n,decoupleCheckoutInitiation:i=!1,methodId:r,options:o,placement:a,isButtonMicroTextDisabled:s=!1}){const d=document.querySelector(`#${n}`);if(!d)return;const{id:c}=d.appendChild(this.getButtonParentContainer());o&&s&&(o.design=pi.C0001);const l=null!=o?o:this.getAmazonPayV2ButtonOptions(t,r,a,i,e);return this.createButton(c,l),this.getButtonParentContainer()}updateBuyNowFlowFlag(e){this.isBuyNowFlow=Boolean(e)}isPh4Enabled(e,t){const n=!!e[\"PROJECT-3483.amazon_pay_ph4\"],i=!!e[\"INT-6885.amazon_pay_ph4_us_only\"];return n&&i?\"US\"===t:n}prepareRequestConfig(e,t,n){const{publicKeyId:i}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"publicKeyId\"]);return Object.assign(Object.assign({createCheckoutSessionConfig:this.isEnvironmentSpecific(i)?r:e},t&&{estimatedOrderAmount:t}),n&&{productType:n})}createAmazonPayButtonParentContainer(){const e=Math.random().toString(16).substr(-4),t=document.createElement(\"div\");return t.id=`amazonpay_button_parent_container_${e}`,t}getAmazonPayV2ButtonOptions(e,t,n,i=!1,r=hi.Gold){var o;const{getCart:a,getCheckout:s,getStoreConfigOrThrow:d,getPaymentMethodOrThrow:c}=this.getCheckoutState(e),{config:{merchantId:l,testMode:u},initializationData:h}=c(t);if(!h)throw new ii(ti.MissingPaymentMethod);const{checkoutLanguage:p,checkoutSessionMethod:m,createCheckoutSessionConfig:y,extractAmazonCheckoutSessionId:g,ledgerCurrency:v,publicKeyId:f=\"\",isButtonMicroTextDisabled:S}=h;if(!l||!v)throw new ii(ti.MissingPaymentMethod);const _=Object.assign({merchantId:l,ledgerCurrency:v,checkoutLanguage:p,placement:n,buttonColor:r},S?{design:pi.C0001}:{});if(this.isBuyNowFlow)return Object.assign(Object.assign({},_),{sandbox:!!u});const w=a();_.productType=w&&0===ri(w)?ui.PayOnly:ui.PayAndShip;const{checkoutSettings:{features:I},storeProfile:{shopPath:C,storeCountryCode:b}}=d();if(this.isPh4Enabled(I,b)){if(!y)throw new ii(ti.MissingPaymentMethod);const e=null===(o=s())||void 0===o?void 0:o.outstandingBalance.toString(),t=null==w?void 0:w.currency.code,n=Object.assign({},_);let r;return this.isEnvironmentSpecific(f)?(n.publicKeyId=f,r=y):(n.sandbox=!!u,r=Object.assign(Object.assign({},y),{publicKeyId:f})),i||(n.createCheckoutSessionConfig=r),e&&t&&(n.estimatedOrderAmount={amount:e,currencyCode:t}),n}const P={method:m,url:`${C}/remote-checkout/${t}/payment-session`,extractAmazonCheckoutSessionId:g};return Object.assign(Object.assign({},_),{createCheckoutSession:P,sandbox:!!u})}isEnvironmentSpecific(e){return/^(SANDBOX|LIVE)/.test(e)}getAmazonPayV2SDK(){return this.getOrThrow(this.amazonPayV2SDK)}getButtonParentContainer(){return this.getOrThrow(this.buttonParentContainer)}getAmazonPayV2Button(){return this.getOrThrow(this.amazonPayV2Button)}getOrThrow(e){return oi(e,()=>new ai(ni.PaymentNotInitialized))}getCheckoutState(e){return\"object\"==typeof(t=e)&&null!==t&&\"cart\"in t&&\"checkout\"in t&&\"config\"in t&&\"paymentMethods\"in t?{getCart:e.cart.getCart,getCheckout:e.checkout.getCheckout,getStoreConfigOrThrow:e.config.getStoreConfigOrThrow,getPaymentMethodOrThrow:t=>e.paymentMethods.getPaymentMethodOrThrow(t)}:e;var t}}class gi extends ei{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class vi{constructor(e,t=window){this.scriptLoader=e,this.windowWithAmazonPay=t}load(e){return t=this,n=void 0,r=function*(){const{initializationData:t}=e,n=(null==t?void 0:t.region)||\"us\",i=si[n];if(yield this.scriptLoader.loadScript(`https://static-${i}.payments-amazon.com/checkout.js`),!this.windowWithAmazonPay.amazon)throw new gi;return this.windowWithAmazonPay.amazon},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}}function fi(){return new yi(new vi(a()))}function Si(e,t){return Object.assign(e,{resolveIds:t})}class _i extends ei{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class wi extends ei{constructor(e){super(e||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var Ii=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ci{constructor(e,t){this.paymentIntegrationService=e,this.amazonPayV2PaymentProcessor=t}initialize(e){return Ii(this,void 0,void 0,function*(){const{methodId:t,amazonpay:n}=e;if(!t||!(null==n?void 0:n.container))throw new _i('Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.');let i;try{i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t)}catch(e){yield this.paymentIntegrationService.loadPaymentMethod(t),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t)}yield this.amazonPayV2PaymentProcessor.initialize(i),this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:this.paymentIntegrationService.getState(),containerId:n.container,methodId:t,placement:ci.Checkout})})}deinitialize(){return Ii(this,void 0,void 0,function*(){yield this.amazonPayV2PaymentProcessor.deinitialize()})}signIn(){throw new wi('In order to sign in via Amazon, the shopper must click on \"Amazon Pay\" button.')}signOut(e){return Ii(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getPaymentId();t&&(yield this.amazonPayV2PaymentProcessor.signout(),yield this.paymentIntegrationService.remoteCheckoutSignOut(t.providerId,e))})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}}const bi=Si(e=>new Ci(e,fi()),[{id:\"amazonpay\"}]);function Pi(e,t,n=!0){var i;return null!==(i=e[t])&&void 0!==i?i:n}const Oi=\"3.128.0\",Ei=\"3.123.2\",Ai=\"3.106.0\";class Ti{constructor(e){this.paymentIntegrationService=e,this.braintreeWindow=window}getSDKVersion(){const e=this.paymentIntegrationService.getState().getStoreConfig(),t=(null==e?void 0:e.checkoutSettings.features)||{};return this.getPreloadedSDKVersion()||(Pi(t,\"PAYPAL-5809.braintree_hosted_fields_fix_version\")?Oi:Pi(t,\"PAYPAL-5636.update_braintree_sdk_version\")?Ei:Ai)}getPreloadedSDKVersion(){const e=this.braintreeWindow.braintree;if(e){const t=B(Object.values(e),e=>!!e.VERSION);return null==t?void 0:t.VERSION}}}class ki extends ei{constructor(e){super(e||\"Unsupported browser error\"),this.name=\"UnsupportedBrowserError\",this.type=\"unsupported_browser\"}}var Di,Mi,zi,Ni,xi,Ri,Fi;function Li(e){return Boolean(\"object\"==typeof e&&null!==e&&(\"type\"in e||\"message\"in e||\"code\"in e))}!function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(Di||(Di={})),function(e){e.Completed=\"COMPLETED\",e.Pending=\"PENDING\",e.Failed=\"FAILED\"}(Mi||(Mi={})),function(e){e.TRUSTLY=\"trustly\"}(zi||(zi={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"cancelled\",e.UNRECOGNIZED=\"unrecognized\"}(Ni||(Ni={})),function(e){e.Customer=\"CUSTOMER\",e.Merchant=\"MERCHANT\",e.Network=\"NETWORK\",e.Internal=\"INTERNAL\",e.Unknown=\"UNKNOWN\"}(xi||(xi={})),function(e){e.KountNotEnabled=\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"}(Ri||(Ri={})),function(e){e.Visa=\"visa\",e.Mastercard=\"mastercard\",e.AmericanExpress=\"american-express\",e.DinersClub=\"diners-club\",e.Discover=\"discover\",e.Jcb=\"jcb\",e.UnionPay=\"union-pay\",e.Maestro=\"maestro\",e.Elo=\"elo\",e.Mir=\"mir\",e.Hiper=\"hiper\",e.Hipercard=\"hipercard\"}(Fi||(Fi={}));var Bi,ji,Ui,qi=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Vi{constructor(e){this.braintreeScriptLoader=e}initialize(e){this.setClientToken(e)}deinitialize(){return qi(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollector),this.dataCollector=void 0})}getClient(){return qi(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=yield t.create({authorization:e})}return this.client})}getDataCollectorOrThrow(e){return qi(this,void 0,void 0,function*(){const t={deviceData:void 0,teardown:()=>Promise.resolve()};if(!this.dataCollector)try{const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadDataCollector(),i=Object.assign({client:t,kount:!0},e);this.dataCollector=yield n.create(i)}catch(e){if(Li(e)&&e.code===Ri.KountNotEnabled)return t;throw e}return this.dataCollector})}getBraintreeGooglePayment(){return qi(this,void 0,void 0,function*(){if(!this.googlePayment){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadGooglePayment()]);this.googlePayment=yield t.create({client:e})}return this.googlePayment})}getBraintreeThreeDS(){return qi(this,void 0,void 0,function*(){if(!this.threeDS){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]);this.threeDS=yield t.create({client:e,version:2})}return this.threeDS})}getBraintreeLocalPayment(e){return qi(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment){const[t,n]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadLocalPayment()]);this.braintreeLocalPayment=yield new Promise((i,r)=>{n.create({client:t,merchantAccountId:e},(e,t)=>{e&&r(e),i(t)})})}return this.braintreeLocalPayment})}getUsBankAccount(){return qi(this,void 0,void 0,function*(){if(!this.usBankAccount){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadUsBankAccount();this.usBankAccount=yield t.create({client:e})}return this.usBankAccount})}getBraintreeVisaCheckout(){return this.visaCheckout||(this.visaCheckout=Promise.all([this.getClient(),this.braintreeScriptLoader.loadVisaCheckout()]).then(([e,t])=>t.create({client:e}))),this.visaCheckout}getVisaCheckoutSdk(e){return qi(this,void 0,void 0,function*(){return this.visaCheckoutSDK||(this.visaCheckoutSDK=yield this.braintreeScriptLoader.loadVisaCheckoutSdk(e)),this.visaCheckoutSDK})}getVenmoCheckoutOrThrow(){return qi(this,void 0,void 0,function*(){if(!this.braintreeVenmo){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadVenmoCheckout(),n={client:e,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},i=yield t.create(n);if(!i.isBrowserSupported())throw new ki;this.braintreeVenmo=i}return this.braintreeVenmo})}setClientToken(e){this.clientToken=e}getClientTokenOrThrow(){if(!this.clientToken)throw new ai(ni.PaymentNotInitialized);return this.clientToken}teardownModule(e){return e?e.teardown():Promise.resolve()}}!function(e){e.Sandbox=\"sandbox\",e.Production=\"production\"}(Bi||(Bi={})),function(e){e.Client=\"client\",e.DataCollector=\"dataCollector\",e.Fastlane=\"fastlane\",e.GooglePayment=\"googlePayment\",e.HostedFields=\"hostedFields\",e.LocalPayment=\"localPayment\",e.Paypal=\"paypal\",e.PaypalCheckout=\"paypalCheckout\",e.ThreeDSecure=\"threeDSecure\",e.UsBankAccount=\"usBankAccount\",e.Venmo=\"venmo\",e.VisaCheckout=\"visaCheckout\"}(ji||(ji={})),function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\"}(Ui||(Ui={}));const Gi={[Ai]:{[ji.Client]:\"sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt\",[ji.PaypalCheckout]:\"sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O\",[ji.Paypal]:\"sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+\",[ji.LocalPayment]:\"sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT\",[ji.DataCollector]:\"sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV\",[ji.UsBankAccount]:\"sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ\",[ji.GooglePayment]:\"sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe\",[ji.ThreeDSecure]:\"sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB\",[ji.VisaCheckout]:\"sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT\",[ji.Venmo]:\"sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov\",[ji.HostedFields]:\"sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy\",[ji.Fastlane]:\"sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa\"},[Ei]:{[ji.Client]:\"sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO\",[ji.PaypalCheckout]:\"sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/\",[ji.Paypal]:\"sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt\",[ji.LocalPayment]:\"sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH\",[ji.DataCollector]:\"sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO\",[ji.UsBankAccount]:\"sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW\",[ji.GooglePayment]:\"sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO\",[ji.ThreeDSecure]:\"sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym\",[ji.VisaCheckout]:\"sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS\",[ji.Venmo]:\"sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU\",[ji.HostedFields]:\"sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P\",[ji.Fastlane]:\"sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y\"},[Oi]:{[ji.Client]:\"sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq\",[ji.PaypalCheckout]:\"sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh\",[ji.Paypal]:\"sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH\",[ji.LocalPayment]:\"sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC\",[ji.DataCollector]:\"sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc\",[ji.UsBankAccount]:\"sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F\",[ji.GooglePayment]:\"sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i\",[ji.ThreeDSecure]:\"sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D\",[ji.VisaCheckout]:\"sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv\",[ji.Venmo]:\"sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz\",[ji.HostedFields]:\"sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z\",[ji.Fastlane]:\"sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr\"}};var Hi,Wi=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class $i{constructor(e,t,n){this.scriptLoader=e,this.braintreeHostWindow=t,this.braintreeSDKVersionManager=n}loadClient(){return Wi(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(ji.Client,\"client.min.js\")})}loadFastlane(){return Wi(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(ji.Fastlane,\"fastlane.min.js\")})}loadPaypalCheckout(){return Wi(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(ji.PaypalCheckout,\"paypal-checkout.min.js\")})}loadPaypal(){return Wi(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(ji.Paypal,\"paypal.min.js\")})}loadLocalPayment(){return Wi(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(ji.LocalPayment,\"local-payment.min.js\")})}loadDataCollector(){return Wi(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(ji.DataCollector,\"data-collector.min.js\")})}loadUsBankAccount(){return Wi(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(ji.UsBankAccount,\"us-bank-account.min.js\")})}loadGooglePayment(){return Wi(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(ji.GooglePayment,\"google-payment.min.js\")})}load3DS(){return Wi(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(ji.ThreeDSecure,\"three-d-secure.min.js\")})}loadVisaCheckout(){return this.loadBraintreeModuleOrThrow(ji.VisaCheckout,\"visa-checkout.min.js\")}loadVenmoCheckout(){return this.loadBraintreeModuleOrThrow(ji.Venmo,\"venmo.min.js\")}loadHostedFields(){return Wi(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(ji.HostedFields,\"hosted-fields.min.js\")})}loadVisaCheckoutSdk(e){return Wi(this,void 0,void 0,function*(){if(this.braintreeHostWindow.V)return this.braintreeHostWindow.V;const t=e?\"sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm\":\"sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6\";return this.scriptLoader.loadScript(`//${e?\"sandbox-\":\"\"}assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,{async:!0,attributes:{integrity:t,crossorigin:\"anonymous\"}}).then(()=>{if(!this.braintreeHostWindow.V)throw new gi;return this.braintreeHostWindow.V})})}loadBraintreeModuleOrThrow(e,t){return Wi(this,void 0,void 0,function*(){let n=this.getBraintreeModule(e);if(n)return n;const i=this.braintreeSDKVersionManager.getSDKVersion(),r=`//js.braintreegateway.com/web/${i}/js/${t}`,o=i in Gi?this.getIntegrityValuesByModuleName(e,i):void 0;if(yield this.scriptLoader.loadScript(r,o?{async:!0,attributes:{integrity:o,crossorigin:\"anonymous\"}}:void 0),n=this.getBraintreeModule(e),!n)throw new gi;return n})}getBraintreeModule(e){var t;return null===(t=this.braintreeHostWindow.braintree)||void 0===t?void 0:t[e]}getIntegrityValuesByModuleName(e,t){const n=Gi[t][e];if(!n)throw new Error(\"Unexpected fileName value\");return n}}class Yi extends ei{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}!function(e){e.BRAINTREE=\"braintree\",e.BRAINTREE_FASTLANE=\"braintreeacceleratedcheckout\"}(Hi||(Hi={}));var Ki,Ji=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};!function(e){e.Subtotal=\"Subtotal\",e.Shipping=\"Shipping\"}(Ki||(Ki={}));class Zi{constructor(e,t,n,i,r){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=n,this._braintreeSdk=i,this._applePayScriptLoader=r,this._onAuthorizeCallback=ce,this._onError=ce,this._onClick=ce,this._subTotalLabel=Ki.Subtotal,this._shippingLabel=Ki.Shipping,this._hasApplePaySession=!1}initialize(e){var t;return Ji(this,void 0,void 0,function*(){const{methodId:n,applepay:i}=e;if(!n||!i)throw new ii(ti.MissingPaymentMethod);const{container:r,shippingLabel:o,subtotalLabel:a,onError:s=ce,onClick:d=ce,onPaymentAuthorize:c}=i;this._shippingLabel=o||Ki.Shipping,this._subTotalLabel=a||Ki.Subtotal,this._onAuthorizeCallback=c,this._onError=s,this._onClick=d;let l=this._paymentIntegrationService.getState();yield this._applePayScriptLoader.loadSdk();try{this._paymentMethod=l.getPaymentMethodOrThrow(n)}catch(e){l=yield this._paymentIntegrationService.loadPaymentMethod(n),this._paymentMethod=l.getPaymentMethodOrThrow(n)}yield this._paymentIntegrationService.verifyCheckoutSpamProtection(),this._applePayButton=this._createButton(r),this._applePayButton.addEventListener(\"click\",this._handleWalletButtonClick.bind(this)),(null===(t=this._paymentMethod.initializationData)||void 0===t?void 0:t.gateway)===Hi.BRAINTREE&&this._paymentMethod.clientToken&&this._braintreeSdk.initialize(this._paymentMethod.clientToken)})}deinitialize(){return Promise.resolve()}signIn(){throw new wi('In order to sign in via Apple, the shopper must click on \"Apple Pay\" button.')}signOut(){throw new wi(\"Need to do signout via apple.\")}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}_createButton(e){const t=document.getElementById(e);if(!t)throw new _i(\"Unable to create sign-in button without valid container ID.\");const n=this._createApplePayButtonElement();return t.appendChild(n),n}_createApplePayButtonElement(){const e=document.createElement(\"apple-pay-button\");return e.setAttribute(\"buttonstyle\",\"black\"),e.setAttribute(\"type\",\"plain\"),e.setAttribute(\"style\",\"--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;\"),e}_handleWalletButtonClick(e){if(e.preventDefault(),this._hasApplePaySession)return;this._onClick();const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getStoreConfigOrThrow(),r=t.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new ii(ti.MissingPaymentMethod);const o=this._getBaseRequest(n,r,i,this._paymentMethod),a=this._sessionFactory.create(o);this._handleApplePayEvents(a,this._paymentMethod,i),a.begin(),this._hasApplePaySession=!0}_getBaseRequest(e,t,n,i){var r;const{storeProfile:{storeCountryCode:o,storeName:a}}=n,{currency:{code:s,decimalPlaces:d}}=e,{initializationData:{merchantCapabilities:c,supportedNetworks:l}}=i,u=e.lineItems.physicalItems.length>0,h={requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"],countryCode:o,currencyCode:s,merchantCapabilities:c,supportedNetworks:l,lineItems:[],total:u?{label:a,amount:`${t.grandTotal.toFixed(d)}`,type:\"pending\"}:{label:a,amount:`${t.grandTotal.toFixed(d)}`,type:\"final\"}};if(u)null===(r=h.requiredShippingContactFields)||void 0===r||r.push(\"postalAddress\");else{const e=[{label:this._subTotalLabel,amount:`${t.subtotal.toFixed(d)}`}];t.taxes.forEach(t=>e.push({label:t.name,amount:`${t.amount.toFixed(d)}`})),h.lineItems=e}return h}_handleApplePayEvents(e,t,n){e.onvalidatemerchant=n=>Ji(this,void 0,void 0,function*(){try{const{body:i}=yield this._onValidateMerchant(t,n);e.completeMerchantValidation(i)}catch(e){this._onError(e)}}),e.onshippingcontactselected=t=>Ji(this,void 0,void 0,function*(){return this._handleShippingContactSelected(e,n,t)}),e.onshippingmethodselected=t=>Ji(this,void 0,void 0,function*(){return this._handleShippingMethodSelected(e,n,t)}),e.oncancel=()=>Ji(this,void 0,void 0,function*(){this._hasApplePaySession=!1;try{const e=`/remote-checkout/${t.id}/signout`;return yield this._requestSender.get(e),yield this._paymentIntegrationService.loadCheckout()}catch(e){return this._onError(new Yi)}}),e.onpaymentauthorized=n=>Ji(this,void 0,void 0,function*(){return this._onPaymentAuthorized(n,e,t)})}_handleShippingContactSelected(e,t,n){var i;return Ji(this,void 0,void 0,function*(){const r=this._transformContactToAddress(n.shippingContact);try{yield this._paymentIntegrationService.updateShippingAddress(r)}catch(t){return e.abort(),this._hasApplePaySession=!1,this._onError(t)}const{storeProfile:{storeName:o}}=t;let a=this._paymentIntegrationService.getState();const{currency:{decimalPlaces:s}}=a.getCartOrThrow();let d=a.getCheckoutOrThrow();const c=null===(i=d.consignments[0].selectedShippingOption)||void 0===i?void 0:i.id,l=d.consignments[0].availableShippingOptions,u=null==l?void 0:l.find(({id:e})=>e===c),h=null==l?void 0:l.filter(e=>e.id!==c),p=u?[{label:u.description,amount:`${u.cost.toFixed(s)}`,detail:u.additionalDescription,identifier:u.id}]:[];if(h&&[...h.filter(e=>e.isRecommended),...h.filter(e=>!e.isRecommended)].forEach(e=>p.push({label:e.description,amount:`${e.cost.toFixed(s)}`,detail:e.additionalDescription,identifier:e.id})),!(l instanceof Array))throw new Error(\"Shipping options not available.\");if(0===l.length)return void e.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:\"pending\",label:o,amount:`${d.grandTotal.toFixed(s)}`},[]);const m=l.find(e=>e.isRecommended),y=m?m.id:l[0].id,g=u?u.id:y;try{yield this._updateShippingOption(g)}catch(e){return this._onError(e)}a=this._paymentIntegrationService.getState(),d=a.getCheckoutOrThrow(),e.completeShippingContactSelection({newShippingMethods:p,newTotal:{type:\"final\",label:o,amount:`${d.grandTotal.toFixed(s)}`},newLineItems:this._getUpdatedLineItems(d,s)})})}_handleShippingMethodSelected(e,t,n){return Ji(this,void 0,void 0,function*(){const{storeProfile:{storeName:i}}=t,{shippingMethod:{identifier:r}}=n;try{yield this._updateShippingOption(r)}catch(t){return e.abort(),this._hasApplePaySession=!1,this._onError(t)}const o=this._paymentIntegrationService.getState(),{currency:{decimalPlaces:a}}=o.getCartOrThrow(),s=o.getCheckoutOrThrow();e.completeShippingMethodSelection({newTotal:{type:\"final\",label:i,amount:`${s.grandTotal.toFixed(a)}`},newLineItems:this._getUpdatedLineItems(s,a)})})}_getUpdatedLineItems(e,t){const n=[{label:this._subTotalLabel,amount:`${e.subtotal.toFixed(t)}`}];return e.taxes.forEach(e=>n.push({label:e.name,amount:`${e.amount.toFixed(t)}`})),n.push({label:this._shippingLabel,amount:`${e.shippingCostTotal.toFixed(t)}`}),n}_updateShippingOption(e){return Ji(this,void 0,void 0,function*(){return this._paymentIntegrationService.selectShippingOption(e)})}_onValidateMerchant(e,t){return Ji(this,void 0,void 0,function*(){const n=[`validationUrl=${t.validationURL}`,`merchantIdentifier=${e.initializationData.merchantId}`,`displayName=${e.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${e.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:n})})}_onPaymentAuthorized(e,t,n){var i;return Ji(this,void 0,void 0,function*(){const{token:r,billingContact:o,shippingContact:a}=e.payment,s=this._paymentIntegrationService.getState().getCartOrThrow().lineItems.physicalItems.length>0;let d;(null===(i=n.initializationData)||void 0===i?void 0:i.gateway)===Hi.BRAINTREE&&(d=yield this._getBraintreeDeviceData());const c={methodId:n.id,paymentData:{deviceSessionId:d,formattedPayload:{apple_pay_token:{payment_data:r.paymentData,payment_method:r.paymentMethod,transaction_id:r.transactionIdentifier}}}},l=this._transformContactToAddress(o),u=this._transformContactToAddress(a),h=null==a?void 0:a.emailAddress,p=(null==a?void 0:a.phoneNumber)||\"\";try{return yield this._paymentIntegrationService.updateBillingAddress(Object.assign(Object.assign({},l),{email:h,phone:p})),s&&(yield this._paymentIntegrationService.updateShippingAddress(u)),yield this._paymentIntegrationService.submitOrder({useStoreCredit:!1}),yield this._paymentIntegrationService.submitPayment(c),t.completePayment(ApplePaySession.STATUS_SUCCESS),this._onAuthorizeCallback()}catch(e){return t.completePayment(ApplePaySession.STATUS_FAILURE),this._onError(e)}})}_transformContactToAddress(e){return{firstName:(null==e?void 0:e.givenName)||\"\",lastName:(null==e?void 0:e.familyName)||\"\",city:(null==e?void 0:e.locality)||\"\",company:\"\",address1:(null==e?void 0:e.addressLines)&&e.addressLines[0]||\"\",address2:(null==e?void 0:e.addressLines)&&e.addressLines[1]||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",phone:(null==e?void 0:e.phoneNumber)||\"\",stateOrProvince:(null==e?void 0:e.administrativeArea)||\"\",stateOrProvinceCode:(null==e?void 0:e.administrativeArea)||\"\",customFields:[]}}_getBraintreeDeviceData(){return Ji(this,void 0,void 0,function*(){try{const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e}catch(e){}})}}function Qi(e){if(!function(e){return\"ApplePaySession\"in e}(e))throw new Error(\"Apple pay is not supported\")}class Xi{create(e){return Qi(window),new ApplePaySession(1,e)}}class er{constructor(e){this.scriptLoader=e,this.sdkVersion=\"1.latest\"}loadSdk(){return e=this,t=void 0,i=function*(){(function(e){return\"ApplePaySDK\"in e})(window)||(yield this.scriptLoader.loadScript(`https://applepay.cdn-apple.com/jsapi/${this.sdkVersion}/apple-pay-sdk.js`),Qi(window))},new((n=void 0)||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())});var e,t,n,i}}const tr=Si(e=>{const{getHost:t}=e.getState(),i=new Ti(e);return new Zi(n({host:t()}),e,new Xi,new Vi(new $i(a(),window,i)),new er(new r))},[{id:\"applepay\"}]);class nr extends ei{constructor(e){super(e||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}const ir={body:{},headers:{},status:0};class rr extends ei{constructor(e,{message:t,errors:n}={}){const{body:i,headers:r,status:o}=e||ir;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=r,this.status=o,this.errors=n||[]}}var or,ar,sr,dr,cr,lr,ur;!function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(or||(or={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(ar||(ar={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(sr||(sr={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(dr||(dr={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(cr||(cr={})),function(e){e.OXXO=\"oxxo\"}(lr||(lr={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(ur||(ur={}));var hr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class pr{constructor(e,t,n,i){this.formPoster=e,this.paymentIntegrationService=t,this.bigCommercePaymentsRequestSender=n,this.bigCommercePaymentsScriptLoader=i}loadPayPalSdk(e,t,n,i){return hr(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e);return this.paypalSdk=yield this.bigCommercePaymentsScriptLoader.getPayPalSDK(a,o,n,i),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new gi;return this.paypalSdk}createBuyNowCartOrThrow(e){return hr(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new ii(ti.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new nr}})}createOrder(e,t){return hr(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i}=yield this.bigCommercePaymentsRequestSender.createOrder(e,Object.assign({cartId:n},t));return i})}createOrderCardFields(e,t){return hr(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i,setupToken:r}=yield this.bigCommercePaymentsRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:i},r?{setupToken:r}:{})})}updateOrder(e){return hr(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow();let i;e||(i=t.getConsignmentsOrThrow()[0]);try{yield this.bigCommercePaymentsRequestSender.updateOrder({availableShippingOptions:e?[]:null==i?void 0:i.availableShippingOptions,cartId:n.id,selectedShippingOption:e?null:null==i?void 0:i.selectedShippingOption})}catch(e){throw new rr}})}getOrderStatus(e,t){return hr(this,void 0,void 0,function*(){try{const{status:n}=yield this.bigCommercePaymentsRequestSender.getOrderStatus(e,t);return n}catch(e){throw new rr}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new ii(ti.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===Ft.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return hr(this,void 0,void 0,function*(){const i={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:i},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],i=n.find(e=>e.isRecommended),r=(e?n.find(t=>t.id===e):n.find(e=>{var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)}))||i||n[0];if(!r)throw new Error(\"Your order can't be shipped to this address\");return r}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:i,name:{full_name:r}}=n[0].shipping,[o,...a]=r.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:i.address_line_1,address2:i.address_line_2,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})}getValidButtonStyle(e){const{color:t,height:n,label:i,shape:r}=e||{},o={color:t&&dr[t]?t:void 0,height:this.getValidHeight(n),label:i&&sr[i]?i:void 0,shape:r&&cr[r]?r:void 0};return ue(o,J)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}const mr=\"This API endpoint is for internal use only and may change in the future\";var yr;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(yr||(yr={}));const gr=yr,vr={\"X-Checkout-SDK-Version\":\"1.916.1\"};var fr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Sr{constructor(e){this.requestSender=e}createOrder(e,t){return fr(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr);return(yield this.requestSender.post(n,{headers:r,body:i})).body})}updateOrder(e){return fr(this,void 0,void 0,function*(){const t=e,n=Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr);return(yield this.requestSender.put(\"/api/storefront/initialization/bigcommerce_payments\",{headers:n,body:t})).body})}getOrderStatus(e=\"bigcommerce_payments\",t){return fr(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body})}}var _r=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class wr{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,i){return _r(this,void 0,void 0,function*(){const r=this.getPayPalSdkScriptConfigOrThrow(e,t,n);return this.loadPayPalSDK(r,i)})}loadPayPalSDK(e,t=!1){return _r(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsPayPalSDK||t){const t=this.transformConfig(e.options),n=this.transformConfig(e.attributes),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(t).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:n})}if(!this.window.bigCommercePaymentsPayPalSDK)throw new gi;return this.window.bigCommercePaymentsPayPalSDK})}getPayPalSdkScriptConfigOrThrow(e,t,n=!0){const{id:i,clientToken:r,initializationData:o}=e;if(!(null==o?void 0:o.clientId))throw new ii(ti.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:d,buyerCountry:c,attributionId:l,isVenmoEnabled:u,isHostedCheckoutEnabled:h,isPayPalCreditAvailable:p,isDeveloperModeApplicable:m,availableAlternativePaymentMethods:y=[],enabledAlternativePaymentMethods:g=[],isGooglePayEnabled:v}=o,f=h||n,S=\"bigcommerce_payments_creditcards\"===i,_=S?[\"card\"]:[],w=S?[]:[\"card\"],I=p?[\"credit\",\"paylater\"]:[],C=p?[]:[\"credit\",\"paylater\"],b=u?[\"venmo\"]:[],P=u?[]:[\"venmo\"],O=y.filter(e=>!g.includes(e)),E=v?[\"googlepay\"]:[],A=n?[\"card-fields\"]:[],T=this.filterFundingOptions([...w,...C,...P,...O]),k=this.filterFundingOptions([..._,...I,...b,...g]);return{options:Object.assign({\"client-id\":s,\"merchant-id\":d,\"enable-funding\":k.length>0?k:void 0,\"disable-funding\":T.length>0?T:void 0,commit:f,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...E,...A],currency:t,intent:a},m&&{\"buyer-country\":c}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":r,\"data-namespace\":\"bigCommercePaymentsPayPalSDK\"}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}const Ir=e=>{const{getHost:t}=e.getState();return new pr(Ee(),e,new Sr(n({host:t()})),new wr(a()))},Cr=40;var br=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Pr{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.onError=ce}initialize(e){return br(this,void 0,void 0,function*(){const{bigcommerce_payments:t,methodId:n}=e;if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');if(!t.container)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments.onClick\" argument is not a function.');this.onError=t.onError||ce,this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return br(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()})}signOut(e){return br(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:i,onComplete:r}=t,o=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:s,paymentButtonStyles:d,isServerSideShippingCallbacksEnabled:c}=a.initializationData||{},{checkoutTopButtonStyles:l}=d||{},u=Object.assign({createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments\"),onApprove:({orderID:t})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(e,t)},i&&{onClick:()=>i()}),h=Object.assign(Object.assign({},!c&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(t,n)=>this.onHostedCheckoutApprove(t,n,e,r,c)}),p=Object.assign(Object.assign({fundingSource:o.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},l),{height:Cr}))},u),s&&h),m=o.Buttons(p);m.isEligible()?m.render(`#${n}`):this.bigCommercePaymentsIntegrationService.removeElement(n)}onHostedCheckoutApprove(e,t,n,i,r){return br(this,void 0,void 0,function*(){if(!e.orderID)throw new ii(ti.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!r){const e=yield t.order.get(),n=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}a&&(yield this.bigCommercePaymentsIntegrationService.updateOrder(r)),r&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i()}catch(e){this.handleError(e)}})}onShippingAddressChange(e){return br(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}onShippingOptionsChange(e){return br(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const Or=Si(e=>new Pr(e,Ir(e)),[{id:\"bigcommerce_payments\"}]);var Er,Ar,Tr,kr,Dr,Mr,zr,Nr,xr,Rr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Fr{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n){return Rr(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsFastlaneSdk){const i=this.getPayPalFastlaneSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.bigCommercePaymentsFastlaneSdk)throw new gi}return this.window.bigCommercePaymentsFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i){return Rr(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsGooglePay||i){const i=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.bigCommercePaymentsGooglePay)throw new gi;return this.window.bigCommercePaymentsGooglePay})}getPayPalApmsSdk(e,t){return Rr(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsApms){const n=this.getPayPalApmSdkConfiguration(e,t);if(yield this.loadPayPalSdk(n),!this.window.bigCommercePaymentsApms)throw new gi}return this.window.bigCommercePaymentsApms})}getPayPalMessages(e,t){return Rr(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsMessages){const n=this.getPayPalSdkMessagesConfiguration(e,t);yield this.loadPayPalSdk(n)}if(!this.window.bigCommercePaymentsMessages)throw new gi;return this.window.bigCommercePaymentsMessages})}loadPayPalSdk({options:e,attributes:t}){return Rr(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:i})})}getPayPalFastlaneSdkConfiguration(e,t,n){const{clientToken:i,initializationData:r}=e;if(!r||!r.clientId)throw new ii(ti.MissingPaymentMethod);const{intent:o,clientId:a,merchantId:s,attributionId:d}=r;return{options:{\"client-id\":a,\"merchant-id\":s,commit:!0,components:[\"fastlane\",\"three-domain-secure\"],currency:t,intent:o},attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"bigCommercePaymentsFastlaneSdk\",\"data-partner-attribution-id\":d,\"data-sdk-client-token\":i}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n=!0){const{clientToken:i,initializationData:r}=e;if(!r||!r.clientId)throw new ii(ti.MissingPaymentMethod);const{intent:o,clientId:a,merchantId:s,buyerCountry:d,attributionId:c,isHostedCheckoutEnabled:l,isDeveloperModeApplicable:u}=r,h=l||n;return{options:Object.assign({\"client-id\":a,\"merchant-id\":s,commit:h,components:[\"googlepay\"],currency:t,intent:o},u&&{\"buyer-country\":d}),attributes:{\"data-partner-attribution-id\":c,\"data-client-token\":i,\"data-namespace\":\"bigCommercePaymentsGooglePay\"}}}getPayPalApmSdkConfiguration(e,t){const{initializationData:n}=e;if(!n||!n.clientId)throw new ii(ti.MissingPaymentMethod);const{intent:i,clientId:r,merchantId:o,buyerCountry:a,attributionId:s,isDeveloperModeApplicable:d,availableAlternativePaymentMethods:c=[],enabledAlternativePaymentMethods:l=[]}=n,u=this.filterFundingOptions(l),h=this.filterFundingOptions(c.filter(e=>!l.includes(e)));return{options:Object.assign({\"client-id\":r,\"merchant-id\":o,\"enable-funding\":u.length>0?u:void 0,\"disable-funding\":h.length>0?h:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:i},d&&{\"buyer-country\":a}),attributes:{\"data-partner-attribution-id\":s,\"data-namespace\":\"bigCommercePaymentsApms\"}}}getPayPalSdkMessagesConfiguration(e,t){const{initializationData:n}=e;if(!n||!n.clientId)throw new ii(ti.MissingPaymentMethod);const{clientId:i,merchantId:r,attributionId:o,isDeveloperModeApplicable:a,buyerCountry:s}=n;return{options:Object.assign({\"client-id\":i,\"merchant-id\":r,components:[\"messages\"],currency:t},a&&{\"buyer-country\":s}),attributes:{\"data-namespace\":\"bigCommercePaymentsMessages\",\"data-partner-attribution-id\":o}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}function Lr(){return new Fr(o())}!function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(Er||(Er={}));class Br{static get(e){const t=`${encodeURIComponent(`${e}`)}=`,n=document.cookie;let i=null;const r=n.indexOf(t);if(r>-1){let e=n.indexOf(\";\",r);-1===e&&(e=n.length),i=decodeURIComponent(n.substring(r+t.length,e))}return i}static set(e,t,n={secure:!0}){let i=`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;const{expires:r,path:o,domain:a,secure:s}=n;if(r)i+=`; expires=${r.toUTCString()}`;else{const e=new Date,t=60;e.setTime(e.getTime()+60*t*1e3),i+=`; expires=${e.toUTCString()}`}o&&(i+=`; path=${o}`),a&&(i+=`; domain=${a}`),s&&(i+=\"; secure\"),document.cookie=i}static remove(e,t){Br.set(e,\"\",Object.assign({expires:new Date(0)},t))}}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Ar||(Ar={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(Tr||(Tr={})),function(e){e.Always=\"SCA_ALWAYS\"}(kr||(kr={})),function(e){e.Succeeded=\"succeeded\",e.Cancelled=\"cancelled\",e.Errored=\"errored\"}(Dr||(Dr={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(Mr||(Mr={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(zr||(zr={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(Nr||(Nr={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"canceled\",e.UNRECOGNIZED=\"unrecognized\"}(xr||(xr={}));var jr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ur{constructor(){this.window=window}initializePayPalFastlane(e,t,n){return jr(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\"),window.localStorage.setItem(\"axoEnv\",\"sandbox\")),!this.window.bigCommercePaymentsFastlane){const t={root:{backgroundColorPrimary:\"transparent\"}};this.window.bigCommercePaymentsFastlane=yield e.Fastlane({styles:n||t})}return this.window.bigCommercePaymentsFastlane})}getPayPalFastlaneOrThrow(){if(!this.window.bigCommercePaymentsFastlane)throw new gi;return this.window.bigCommercePaymentsFastlane}lookupCustomerOrThrow(e){return jr(this,void 0,void 0,function*(){return this.getPayPalFastlaneOrThrow().identity.lookupCustomerByEmail(e)})}triggerAuthenticationFlowOrThrow(e){return jr(this,void 0,void 0,function*(){return e?this.getPayPalFastlaneOrThrow().identity.triggerAuthenticationFlow(e):{}})}updateStorageSessionId(e){const t=new Date;t.setDate(t.getDate()+14);const n={expires:t,secure:!0};Br.set(\"bc-fastlane-sessionId\",e,n)}removeStorageSessionId(){Br.remove(\"bc-fastlane-sessionId\")}getStorageSessionId(){return Br.get(\"bc-fastlane-sessionId\")||\"\"}mapPayPalFastlaneProfileToBcCustomerData(e,t){var n,i,r;const{authenticationState:o,profileData:a}=t,s=null===(r=null===(i=null===(n=null==a?void 0:a.card)||void 0===n?void 0:n.paymentSource)||void 0===i?void 0:i.card)||void 0===r?void 0:r.billingAddress,d=null==a?void 0:a.shippingAddress,c=null==a?void 0:a.name,l=null==a?void 0:a.card,u=d?this.mapPayPalToBcAddress(d.address,d.name,d.phoneNumber):void 0,h=s&&c?this.mapPayPalToBcAddress(s,c,null==d?void 0:d.phoneNumber):void 0,p=l?this.mapPayPalToBcInstrument(e,l):[],m=this.filterAddresses([u,h]);return{authenticationState:o||xr.UNRECOGNIZED,addresses:m,billingAddress:h,shippingAddress:u,instruments:p}}mapPayPalToBcInstrument(e,t){const{id:n,paymentSource:i}=t,{brand:r,expiry:o,lastDigits:a}=i.card,[s,d]=o.split(\"-\");return[{bigpayToken:n,brand:r,defaultInstrument:!1,expiryMonth:d,expiryYear:s,iin:\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:Er.PAN,type:\"card\"}]}mapBcToPayPalAddress(e){return{company:(null==e?void 0:e.company)||\"\",addressLine1:(null==e?void 0:e.address1)||\"\",addressLine2:(null==e?void 0:e.address2)||\"\",adminArea1:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",adminArea2:(null==e?void 0:e.city)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\"}}mapPayPalToBcAddress(e,t,n,i){const[r,o]=t.fullName.split(\" \"),a=(null==n?void 0:n.nationalNumber)||\"\",s=(null==n?void 0:n.countryCode)||\"\";return{id:Date.now(),type:\"paypal-address\",firstName:t.firstName||r||\"\",lastName:t.lastName||o||\"\",company:e.company||\"\",address1:e.addressLine1,address2:e.addressLine2||\"\",city:e.adminArea2,stateOrProvince:e.adminArea1,stateOrProvinceCode:e.adminArea1,country:e.countryCode||\"\",countryCode:e.countryCode||\"\",postalCode:e.postalCode,phone:s+a,customFields:i||[]}}filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this.isEqualAddresses(e,t))?e:[...e,t]:e,[])}isEqualAddresses(e,t){return Y(this.normalizeAddress(e),this.normalizeAddress(t))}normalizeAddress(e){return le(e,[\"id\",\"phone\"])}}function qr(){return new Ur}function Vr(e){return\"string\"!=typeof e}function Gr(e,t){if(t||e)return function(e){var t,n;const i={},r=ue(e.root,Vr),o=ue(e.input,Vr),a=ue(e.toggle,Vr),s=ue(null===(t=e.text)||void 0===t?void 0:t.body,Vr),d=ue(null===(n=e.text)||void 0===n?void 0:n.caption,Vr),c=e.branding;return Object.keys(r).length&&(i.root=r),Object.keys(o).length&&(i.input=o),Object.keys(a).length&&(i.toggle=a),Object.keys(s).length&&(i.text={},i.text.body=s),Object.keys(d).length&&(i.text=Object.assign({},i.text),i.text.caption=d),c&&(i.branding=c),i}(function(e,t){var n,i,r,o,a,s,d,c,l,u,h,p,m,y,g,v,f,S,_,w,I,C;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(y=null==t?void 0:t.toggle)||void 0===y?void 0:y.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(v=null===(g=null==t?void 0:t.text)||void 0===g?void 0:g.body)||void 0===v?void 0:v.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(S=null===(f=null==t?void 0:t.text)||void 0===f?void 0:f.body)||void 0===S?void 0:S.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(w=null===(_=null==t?void 0:t.text)||void 0===_?void 0:_.caption)||void 0===w?void 0:w.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(C=null===(I=null==t?void 0:t.text)||void 0===I?void 0:I.caption)||void 0===C?void 0:C.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}var Hr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Wr{constructor(e,t,n){this.paymentIntegrationService=e,this.bigCommercePaymentsSdk=t,this.bigCommercePaymentsFastlaneUtils=n}initialize(e){var t;return Hr(this,void 0,void 0,function*(){const{methodId:n,bigcommerce_payments_fastlane:i}=e;if(!n)throw new _i('Unable to proceed because \"methodId\" argument is not provided.');try{yield this.paymentIntegrationService.loadPaymentMethod(n);const e=this.paymentIntegrationService.getState(),r=e.getCartOrThrow(),o=e.getPaymentMethodOrThrow(n),a=!!(null===(t=o.initializationData)||void 0===t?void 0:t.isDeveloperModeApplicable),s=yield this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(o,r.currency.code,r.id);yield this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(s,a,this.getFastlaneStyles(n,i))}catch(e){}return Promise.resolve()})}deinitialize(){return Hr(this,void 0,void 0,function*(){return Promise.resolve()})}signIn(e,t){return Hr(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t),yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:void 0,addresses:void 0,instruments:void 0}),this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId()})}signOut(e){return Hr(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){return Hr(this,void 0,void 0,function*(){const{checkoutPaymentMethodExecuted:t,continueWithCheckoutCallback:n,methodId:i}=e||{};if(!i)throw new _i('Unable to proceed because \"methodId\" argument is not provided.');if(\"function\"!=typeof n)throw new _i('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');if(this.paymentIntegrationService.getState().getCustomerOrThrow().isGuest){t&&\"function\"==typeof t&&t();try{yield this.runPayPalAuthenticationFlowOrThrow(i)}catch(e){}}n()})}runPayPalAuthenticationFlowOrThrow(e){return Hr(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow().id,i=t.getCustomer(),r=t.getBillingAddress(),o=(null==i?void 0:i.email)||(null==r?void 0:r.email)||\"\",{customerContextId:a}=yield this.bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow(a),d=s.authenticationState===xr.CANCELED;yield this.updateCustomerDataState(e,s),d?this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId():this.bigCommercePaymentsFastlaneUtils.updateStorageSessionId(n)})}updateCustomerDataState(e,t){var n;return Hr(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState().getCartOrThrow(),{authenticationState:r,addresses:o,billingAddress:a,shippingAddress:s,instruments:d}=this.bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,t);if(yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:r,addresses:o,instruments:d}),a&&(yield this.paymentIntegrationService.updateBillingAddress(a)),s&&i.lineItems.physicalItems.length>0){const t=yield this.paymentIntegrationService.updateShippingAddress(s),i=t.getPaymentMethodOrThrow(e),{isFastlaneShippingOptionAutoSelectEnabled:r}=i.initializationData||{},o=t.getConsignments()||[],a=(null===(n=o[0])||void 0===n?void 0:n.availableShippingOptions)||[],d=a[0],c=a.find(e=>e.isRecommended);if((c||d)&&r){const e=(null==c?void 0:c.id)||d.id;yield this.paymentIntegrationService.selectShippingOption(e)}}})}getFastlaneStyles(e,t){const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{fastlaneStyles:i,isFastlaneStylingEnabled:r}=n.initializationData||{};return Gr(r?i:{},null==t?void 0:t.styles)}}const $r=Si(e=>new Wr(e,Lr(),qr()),[{id:\"bigcommerce_payments_fastlane\"},{id:\"bigcommerce_payments_creditcards\"}]);var Yr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Kr{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.onError=ce}initialize(e){return Yr(this,void 0,void 0,function*(){const{bigcommerce_payments_paylater:t,methodId:n}=e;if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');if(!t.container)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_paylater.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_paylater.onClick\" argument is not a function.');this.onError=t.onError||ce,this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC BigCommercePayments PayLater]: button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Yr(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Yr(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onComplete:i,onClick:r}=t,o=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:s,paymentButtonStyles:d}=a.initializationData||{},{checkoutTopButtonStyles:c}=d||{},l=Object.assign({createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onApprove:({orderID:t})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(e,t)},r&&{onClick:()=>r()}),u={onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e),onApprove:(t,n)=>this.onHostedCheckoutApprove(t,n,e,i)},h=[o.FUNDING.PAYLATER,o.FUNDING.CREDIT];let p=!1;h.forEach(e=>{if(!p){const t=Object.assign(Object.assign({fundingSource:e,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},c),{height:Cr}))},l),s&&u),i=o.Buttons(t);i.isEligible()&&(i.render(`#${n}`),p=!0)}}),p||this.bigCommercePaymentsIntegrationService.removeElement(n)}onHostedCheckoutApprove(e,t,n,i){return Yr(this,void 0,void 0,function*(){if(!e.orderID)throw new ii(ti.MissingOrderId);const r=this.paymentIntegrationService.getState().getCartOrThrow(),o=yield t.order.get();try{const t=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(o);if(yield this.paymentIntegrationService.updateBillingAddress(t),r.lineItems.physicalItems.length>0){const e=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(o);yield this.paymentIntegrationService.updateShippingAddress(e),yield this.bigCommercePaymentsIntegrationService.updateOrder()}yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i()}catch(e){this.handleError(e)}})}onShippingAddressChange(e){return Yr(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}onShippingOptionsChange(e){return Yr(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const Jr=Si(e=>new Kr(e,Ir(e)),[{id:\"bigcommerce_payments_paylater\"}]);var Zr=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Qr{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return Zr(this,void 0,void 0,function*(){const{bigcommerce_payments_venmo:t,methodId:n}=e;if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');if(!t.container)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_venmo.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_venmo.onClick\" argument is not a function.');this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC Payments Venmo]: Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Zr(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Zr(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:i}=t,r=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:a}=o.initializationData||{},{checkoutTopButtonStyles:s}=a||{},d=Object.assign({fundingSource:r.FUNDING.VENMO,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},s),{height:Cr})),createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmo\"),onApprove:({orderID:t})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(e,t)},i&&{onClick:()=>i()}),c=r.Buttons(d);c.isEligible()?c.render(`#${n}`):this.bigCommercePaymentsIntegrationService.removeElement(n)}}const Xr=Si(e=>new Qr(e,Ir(e)),[{id:\"bigcommerce_payments_venmo\"}]);class eo extends ei{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}class to extends rr{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}var no,io,ro,oo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ao{constructor(e,t){this.paymentIntegrationService=e,this.boltScriptLoader=t,this.boltHostWindow=window}initialize(e){var t;return oo(this,void 0,void 0,function*(){const{methodId:n,bolt:i}=e,{onInit:r}=i||{};if(!n)throw new _i('Unable to proceed because \"methodId\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n);if(!(null===(t=o.initializationData)||void 0===t?void 0:t.publishableKey))throw new ii(ti.MissingPaymentMethod);const{developerConfig:a,publishableKey:s}=o.initializationData;if(yield this.boltScriptLoader.loadBoltClient(s,o.config.testMode,a),r&&\"function\"==typeof r){const e=this.getCustomerEmail();r(yield this.hasBoltAccount(e),e)}})}deinitialize(){return Promise.resolve()}signIn(e,t){return oo(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()})}signOut(e){return oo(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){return oo(this,void 0,void 0,function*(){const{continueWithCheckoutCallback:t=I,checkoutPaymentMethodExecuted:n,methodId:i}=e||{},r=this.getCustomerEmail();if(!i)throw new _i('Unable to proceed because \"methodId\" argument is not provided.');if(\"function\"!=typeof t)throw new _i('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');if(r)return this.openBoltCheckoutModalOrThrow(r,i,t,n);t()})}openBoltCheckoutModalOrThrow(e,t,n,i){var r;return oo(this,void 0,void 0,function*(){const o=this.getBoltClientOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethod(t);try{if(null===(r=null==a?void 0:a.initializationData)||void 0===r?void 0:r.embeddedOneClickEnabled){const t=yield this.hasBoltAccount(e);if(t){const t={close:()=>{n()}};yield o.openCheckout(e,t)}else n();\"function\"==typeof i&&i({hasBoltAccount:t})}else n()}catch(e){if(function(e){return\"string\"==typeof e.message&&\"string\"==typeof e.type&&(\"string\"==typeof e.subtype||!e.subtype)&&e instanceof Error}(e)&&\"MissingDataError\"!==e.name&&\"NotInitializedError\"!==e.name)throw new eo(e.message);throw e}})}getBoltClientOrThrow(){const e=this.boltHostWindow.BoltCheckout;if(!e)throw new ai(ni.PaymentNotInitialized);return e}hasBoltAccount(e){return oo(this,void 0,void 0,function*(){const t=this.getBoltClientOrThrow();try{return yield t.hasBoltAccount(e)}catch(e){throw new to}})}getCustomerEmail(){const e=this.paymentIntegrationService.getState(),t=e.getCustomer(),n=e.getBillingAddress();return(null==t?void 0:t.email)||(null==n?void 0:n.email)||\"\"}}!function(e){e.SandboxMode=\"bolt_sandbox\",e.StagingMode=\"bolt_staging\",e.DevelopmentMode=\"bolt_development\"}(no||(no={})),function(e){e.Small=\"small\",e.Medium=\"medium\",e.Large=\"large\"}(io||(io={})),function(e){e.Pill=\"pill\",e.Rect=\"rect\"}(ro||(ro={}));var so=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class co{constructor(e,t=window){this.scriptLoader=e,this.boltHostWindow=t}loadBoltClient(e,t,n,i,r){return so(this,void 0,void 0,function*(){if(this.boltHostWindow.BoltCheckout)return this.boltHostWindow.BoltCheckout;if(!e)throw new _i('Unable to initialize payment because \"publishableKey\" argument is not provided.');if(yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!t,n)}/connect-bigcommerce.js`,this.getScriptOptions(\"bolt-connect\",e,i,r)),yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!t,n)}/track.js`,this.getScriptOptions(\"bolt-track\",e)),!this.boltHostWindow.BoltCheckout)throw new gi;return this.boltHostWindow.BoltCheckout})}loadBoltEmbedded(e,t,n){return so(this,void 0,void 0,function*(){if(yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!t,n)}/embed.js`,{async:!0,attributes:{id:\"bolt-embedded\"}}),!this.boltHostWindow.Bolt)throw new gi;return this.boltHostWindow.Bolt(e)})}getDomainURL(e,t){if(!e)return\"connect.bolt.com\";if(t)switch(t.developerMode){case no.StagingMode:return\"connect-staging.bolt.com\";case no.DevelopmentMode:return`connect.${t.developerDomain}`}return\"connect-sandbox.bolt.com\"}getScriptOptions(e,t,n,i){return{async:!0,attributes:Object.assign(Object.assign({id:e,\"data-publishable-key\":t},n&&{\"data-shopping-cart-id\":n}),i&&{\"data-storefront-api-token\":i})}}}const lo=Si(e=>new ao(e,new co(a())),[{id:\"bolt\"}]);class uo extends _i{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class ho extends ei{constructor(e,t){super(t||\"Unable to proceed because the payment form contains invalid data.\"),this.details=e,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}let po=null;const mo=[\"buttons\",\"messages\"];var yo,go,vo,fo,So,_o;!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(yo||(yo={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(go||(go={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(vo||(vo={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(fo||(fo={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(So||(So={})),function(e){e.CART=\"cart\",e.HOME=\"homepage\",e.PAYMENT=\"payment\",e.PRODUCT=\"product\"}(_o||(_o={}));var wo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Io{constructor(e,t,n){this.braintreeScriptLoader=e,this.braintreeHostWindow=t,this.overlay=n,this.dataCollectors={}}initialize(e,t){this.clientToken=e,this.threeDSecureOptions=t}getBraintreeFastlane(e,t,n){return wo(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"axoEnv\",\"sandbox\"),window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\")),!this.braintreeHostWindow.braintreeFastlane){const t=this.getClientTokenOrThrow(),i=yield this.getClient(),r=yield this.getSessionId(e),o=yield this.braintreeScriptLoader.loadFastlane(),a={root:{backgroundColorPrimary:\"transparent\"}};this.braintreeHostWindow.braintreeFastlane=yield o.create({authorization:t,client:i,deviceData:r,styles:n||a})}return this.braintreeHostWindow.braintreeFastlane})}getClient(){return wo(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=t.create({authorization:e})}return this.client})}getPaypal(){return this.braintreePaypal||(this.braintreePaypal=Promise.all([this.getClient(),this.braintreeScriptLoader.loadPaypal()]).then(([e,t])=>t.create({client:e}))),this.braintreePaypal}paypal(e){var{shouldSaveInstrument:t}=e,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"shouldSaveInstrument\"]);const i=Ae();return this.getPaypal().then(e=>{var r;return i&&(null===(r=this.overlay)||void 0===r||r.show({onClick:()=>e.focusWindow()})),e.tokenize(Object.assign({enableShippingAddress:!0,flow:t?\"vault\":\"checkout\",useraction:\"commit\"},n))}).then(e=>{var t;return null===(t=this.overlay)||void 0===t||t.remove(),e}).catch(e=>{var t;throw null===(t=this.overlay)||void 0===t||t.remove(),e})}getPaypalCheckout(e,t,n){return wo(this,void 0,void 0,function*(){const i=yield this.getClient(),r=yield this.braintreeScriptLoader.loadPaypalCheckout(),o={client:i};return this.paypalCheckout=yield r.create(o,(i,r)=>{var o;if(i)return n(i);const a=Object.assign(Object.assign({currency:e.currency},e.isCreditEnabled&&{\"enable-funding\":\"paylater\"}),{components:mo.toString(),intent:e.intent,commit:null===(o=e.commit)||void 0===o||o});this.braintreeHostWindow.paypal?t(r):function(e,t){return po||(po=new Promise((n,i)=>{e.loadPayPalSDK(t,t=>{t?(po=null,i(t)):n(e)})})),po}(r,a).then(()=>t(r))}),this.paypalCheckout})}getDataCollector(e){return wo(this,void 0,void 0,function*(){const t=(null==e?void 0:e.paypal)?\"paypal\":\"default\";let n=this.dataCollectors[t];if(!n){try{const t=yield this.getClient(),i=yield this.braintreeScriptLoader.loadDataCollector(),r=Object.assign({client:t,kount:!0},e);n=yield i.create(r)}catch(e){if(!Li(e)||\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"!==e.code)throw e;n={deviceData:void 0,teardown:()=>Promise.resolve()}}this.dataCollectors[t]=n}return n})}getBraintreeEnv(e=!1){return e?Bi.Sandbox:Bi.Production}mapToBraintreeShippingAddressOverride(e){return{recipientName:`${e.firstName} ${e.lastName}`,line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,postalCode:e.postalCode,countryCode:e.countryCode,phone:e.phone}}mapToLegacyShippingAddress(e){const{email:t,phone:n,shippingAddress:i}=e,r=(null==i?void 0:i.recipientName)||\"\",[o,a]=r.split(\" \");return{email:t,first_name:o||\"\",last_name:a||\"\",phone_number:n,address_line_1:null==i?void 0:i.line1,address_line_2:null==i?void 0:i.line2,city:null==i?void 0:i.city,state:null==i?void 0:i.state,country_code:null==i?void 0:i.countryCode,postal_code:null==i?void 0:i.postalCode}}mapToLegacyBillingAddress(e){const{billingAddress:t,email:n,firstName:i,lastName:r,phone:o,shippingAddress:a}=e,s=t||a;return{email:n,first_name:i,last_name:r,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}removeElement(e){const t=e&&document.getElementById(e);t&&t.remove()}getSessionId(e){return wo(this,void 0,void 0,function*(){const{deviceData:t}=yield this.getDataCollector({riskCorrelationId:e});return t})}teardown(){return wo(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollectors.default),yield this.teardownModule(this.dataCollectors.paypal),this.dataCollectors={},yield this.teardownModule(this.paypalCheckout),this.paypalCheckout=void 0})}get3DS(){return wo(this,void 0,void 0,function*(){return this.threeDS||(this.threeDS=Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]).then(([e,t])=>t.create({client:e,version:2}))),this.threeDS})}getVenmoCheckout(e){return wo(this,void 0,void 0,function*(){if(!this.venmoCheckout){const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadVenmoCheckout(),i=Object.assign({client:t,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},e||{});this.venmoCheckout=yield new Promise((e,t)=>{n.create(i,(n,i)=>n?t(n):i.isBrowserSupported()?void e(i):t(new ki))})}return this.venmoCheckout})}verifyCard(e,t,n){return wo(this,void 0,void 0,function*(){const i=yield this.tokenizeCard(e,t);return this.challenge3DSVerification(i,n)})}tokenizeCard(e,t){return wo(this,void 0,void 0,function*(){const{paymentData:n}=e;if(!function(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;return\"object\"==typeof t.ccExpiry&&null!==t.ccExpiry&&\"string\"==typeof t.ccNumber&&\"string\"==typeof t.ccName}(n))throw new uo([\"payment.paymentData\"]);const i=this.getErrorsRequiredFields(n);if(!$(i))throw new ho(i);const r=this.mapToCreditCard(n,t),o=yield this.getClient(),{creditCards:a}=yield o.request(r);return{nonce:a[0].nonce,bin:a[0].details.bin}})}challenge3DSVerification(e,t){return wo(this,void 0,void 0,function*(){const n=yield this.get3DS();return this.present3DSChallenge(n,t,e)})}teardownModule(e){return e?e.teardown():Promise.resolve()}getClientTokenOrThrow(){if(!this.clientToken)throw new ai(ni.PaymentNotInitialized);return this.clientToken}getErrorsRequiredFields(e){const{ccNumber:t,ccExpiry:n}=e,i={};return t||(i.ccNumber=[{message:\"Credit card number is required\",type:\"required\"}]),n||(i.ccExpiry=[{message:\"Expiration date is required\",type:\"required\"}]),i}mapToCreditCard(e,t){return{data:{creditCard:{cardholderName:e.ccName,number:e.ccNumber,cvv:e.ccCvv,expirationDate:`${e.ccExpiry.month}/${e.ccExpiry.year}`,options:{validate:!1},billingAddress:t&&{countryCodeAlpha2:t.countryCode,locality:t.city,countryName:t.country,postalCode:t.postalCode,streetAddress:t.address2?`${t.address1} ${t.address2}`:t.address1}}},endpoint:\"payment_methods/credit_cards\",method:\"post\"}}present3DSChallenge(e,t,n){const{nonce:i,bin:r}=n;if(!this.threeDSecureOptions||!i)throw new ai(ni.PaymentNotInitialized);const{addFrame:o,removeFrame:a,challengeRequested:s=!0,additionalInformation:d}=this.threeDSecureOptions,c=()=>wo(this,void 0,void 0,function*(){const t=yield e.cancelVerifyCard();return u.cancel(new Yi),t}),l=t.toFixed(2),u=new Tn(e.verifyCard({addFrame:(e,t)=>{o&&o(e,t,c)},amount:Number(l),bin:r,challengeRequested:s,nonce:i,removeFrame:a,onLookupComplete:(e,t)=>{t()},collectDeviceData:!0,additionalInformation:d}));return u.promise}}var Co=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class bo{constructor(e,t,n,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=n,this.braintreeHostWindow=i}initialize(e){return Co(this,void 0,void 0,function*(){const{braintreepaypal:t,methodId:n}=e,{container:i,onError:r}=t||{};if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.');if(!i)throw new _i('Unable to initialize payment because \"options.braintreepaypal.container\" argument is not provided.');let o,a=this.paymentIntegrationService.getState();try{if(o=a.getPaymentMethodOrThrow(n),!o.clientToken)throw new ii(ti.MissingPaymentToken)}catch(e){a=yield this.paymentIntegrationService.loadPaymentMethod(n),o=a.getPaymentMethodOrThrow(n)}const{clientToken:s,config:d,initializationData:c}=o,{paymentButtonStyles:l}=c||{},{checkoutTopButtonStyles:u}=l||{};if(!s||!c)throw new ii(ti.MissingPaymentMethod);const h={currency:a.getCartOrThrow().currency.code,intent:c.intent,isCreditEnabled:c.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(h,e=>{this.renderPayPalButton(e,t,n,Boolean(d.testMode),u)},e=>this.handleError(e,i,r))})}deinitialize(){return Co(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}signIn(e,t){return Co(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Co(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderPayPalButton(e,t,n,i,r){const{container:o,onClick:a=ce}=t,{paypal:s}=this.braintreeHostWindow,d=null==s?void 0:s.FUNDING.PAYPAL;if(s&&d){const c=s.Buttons({env:this.braintreeIntegrationService.getBraintreeEnv(i),fundingSource:d,style:Object.assign(Object.assign({},r),{height:Cr}),createOrder:()=>this.setupPayment(e,t,n),onApprove:i=>this.tokenizePayment(i,e,n,t),onClick:a});c.isEligible()&&c.render(`#${o}`)}else this.braintreeIntegrationService.removeElement(o)}setupPayment(e,t,n){var i;return Co(this,void 0,void 0,function*(){try{yield this.paymentIntegrationService.loadDefaultCheckout();const t=this.paymentIntegrationService.getState(),r=t.getCheckoutOrThrow().outstandingBalance,o=t.getCartOrThrow().currency.code,a=t.getCustomer(),s=t.getPaymentMethodOrThrow(n),d=null==a?void 0:a.addresses[0],c=d?this.braintreeIntegrationService.mapToBraintreeShippingAddressOverride(d):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:c,amount:r,currency:o,offerCredit:!1,intent:null===(i=s.initializationData)||void 0===i?void 0:i.intent})}catch(e){const{container:n,onError:i}=t;this.handleError(e,n,i)}})}tokenizePayment(e,t,n,i){return Co(this,void 0,void 0,function*(){try{const{deviceData:i}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),r=yield t.tokenizePayment(e),{details:o,nonce:a}=r,s=this.braintreeIntegrationService.mapToLegacyBillingAddress(o),d=this.braintreeIntegrationService.mapToLegacyShippingAddress(o);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:n,action:\"set_external_checkout\",nonce:a,device_data:i,billing_address:JSON.stringify(s),shipping_address:JSON.stringify(d)}),r}catch(e){const{container:t,onError:n}=i;this.handleError(e,t,n)}})}handleError(e,t,n){if(this.braintreeIntegrationService.removeElement(t),!n||!Li(e))throw e;n(e)}}const Po=Si(e=>{const t=window,n=new Ti(e),i=new Io(new $i(a(),t,n),t);return new bo(e,Ee(),i,t)},[{id:\"braintreepaypal\"}]);var Oo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Eo{constructor(e,t,n,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=n,this.braintreeHostWindow=i}initialize(e){return Oo(this,void 0,void 0,function*(){const{braintreepaypalcredit:t,methodId:n}=e,{container:i,onError:r}=t||{};if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.');if(!i)throw new _i('Unable to initialize payment because \"options.braintreepaypalcredit.container\" argument is not provided.');let o,a=this.paymentIntegrationService.getState();try{if(o=a.getPaymentMethodOrThrow(n),!o.clientToken)throw new ii(ti.MissingPaymentToken)}catch(e){a=yield this.paymentIntegrationService.loadPaymentMethod(n),o=a.getPaymentMethodOrThrow(n)}const{clientToken:s,config:d,initializationData:c}=o,{paymentButtonStyles:l}=c||{},{checkoutTopButtonStyles:u}=l||{};if(!s||!c)throw new ii(ti.MissingPaymentMethod);const h={currency:a.getCartOrThrow().currency.code,intent:c.intent,isCreditEnabled:c.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(h,e=>{this.renderPayPalButton(e,t,n,Boolean(d.testMode),Object.assign(Object.assign({},u),{height:Cr}))},e=>this.handleError(e,i,r))})}deinitialize(){return Oo(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}signIn(e,t){return Oo(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Oo(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderPayPalButton(e,t,n,i,r){const{container:o,onClick:a=ce}=t,{paypal:s}=this.braintreeHostWindow;let d=!1;s&&[s.FUNDING.PAYLATER,s.FUNDING.CREDIT].forEach(c=>{if(!d){const l=s.Buttons({env:i?\"sandbox\":\"production\",fundingSource:c,style:r,createOrder:()=>this.setupPayment(e,t,n),onApprove:i=>this.tokenizePayment(i,e,n,t),onClick:a});l.isEligible()&&(l.render(`#${o}`),d=!0)}}),s&&d||this.braintreeIntegrationService.removeElement(o)}setupPayment(e,t,n){var i;return Oo(this,void 0,void 0,function*(){try{yield this.paymentIntegrationService.loadDefaultCheckout();const t=this.paymentIntegrationService.getState(),r=t.getCheckoutOrThrow().outstandingBalance,o=t.getCartOrThrow().currency.code,a=t.getCustomer(),s=t.getPaymentMethodOrThrow(n),d=null==a?void 0:a.addresses[0],c=d?this.braintreeIntegrationService.mapToBraintreeShippingAddressOverride(d):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:c,amount:r,currency:o,offerCredit:!0,intent:null===(i=s.initializationData)||void 0===i?void 0:i.intent})}catch(e){const{container:n,onError:i}=t;this.handleError(e,n,i)}})}tokenizePayment(e,t,n,i){return Oo(this,void 0,void 0,function*(){try{const{deviceData:i}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),r=yield t.tokenizePayment(e),{details:o,nonce:a}=r,s=this.braintreeIntegrationService.mapToLegacyBillingAddress(o),d=this.braintreeIntegrationService.mapToLegacyShippingAddress(o);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:n,action:\"set_external_checkout\",nonce:a,device_data:i,billing_address:JSON.stringify(s),shipping_address:JSON.stringify(d)}),r}catch(e){const{container:t,onError:n}=i;this.handleError(e,t,n)}})}handleError(e,t,n){if(this.braintreeIntegrationService.removeElement(t),!n||!Li(e))throw e;n(e)}}const Ao=Si(e=>{const t=window,n=new Ti(e),i=new Io(new $i(a(),t,n),t);return new Eo(e,Ee(),i,t)},[{id:\"braintreepaypalcredit\"}]);function To(e){return\"string\"!=typeof e}function ko(e,t){if(t||e)return function(e){var t,n;const i={},r=ue(e.root,To),o=ue(e.input,To),a=ue(e.toggle,To),s=ue(null===(t=e.text)||void 0===t?void 0:t.body,To),d=ue(null===(n=e.text)||void 0===n?void 0:n.caption,To),c=e.branding;return Object.keys(r).length&&(i.root=r),Object.keys(o).length&&(i.input=o),Object.keys(a).length&&(i.toggle=a),Object.keys(s).length&&(i.text={},i.text.body=s),Object.keys(d).length&&(i.text=Object.assign({},i.text),i.text.caption=d),c&&(i.branding=c),i}(function(e,t){var n,i,r,o,a,s,d,c,l,u,h,p,m,y,g,v,f,S,_,w,I,C;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(y=null==t?void 0:t.toggle)||void 0===y?void 0:y.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(v=null===(g=null==t?void 0:t.text)||void 0===g?void 0:g.body)||void 0===v?void 0:v.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(S=null===(f=null==t?void 0:t.text)||void 0===f?void 0:f.body)||void 0===S?void 0:S.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(w=null===(_=null==t?void 0:t.text)||void 0===_?void 0:_.caption)||void 0===w?void 0:w.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(C=null===(I=null==t?void 0:t.text)||void 0===I?void 0:I.caption)||void 0===C?void 0:C.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}var Do=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Mo{constructor(e,t){this.paymentIntegrationService=e,this.braintreeFastlaneUtils=t,this.isAcceleratedCheckoutEnabled=!1}initialize({methodId:e,braintreefastlane:t}){var n;return Do(this,void 0,void 0,function*(){if(!e)throw new _i('Unable to proceed because \"methodId\" argument is not provided.');const i=yield this.getValidPaymentMethodOrThrow(e),{isAcceleratedCheckoutEnabled:r,isFastlaneStylingEnabled:o}=i.initializationData||{},a=o?null===(n=i.initializationData)||void 0===n?void 0:n.fastlaneStyles:void 0;this.isAcceleratedCheckoutEnabled=!!r;try{if(this.isAcceleratedCheckoutEnabled){const e=ko(a,null==t?void 0:t.styles);yield this.braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow(i.id,e)}}catch(e){}return Promise.resolve()})}deinitialize(){return Do(this,void 0,void 0,function*(){return Promise.resolve()})}signIn(e,t){return Do(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Do(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){return Do(this,void 0,void 0,function*(){const{checkoutPaymentMethodExecuted:t,continueWithCheckoutCallback:n}=e||{};if(\"function\"!=typeof n)throw new _i('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');const i=this.paymentIntegrationService.getState().getCustomerOrThrow();if(this.isAcceleratedCheckoutEnabled&&i.isGuest){const e=yield this.shouldRunAuthenticationFlow();t&&\"function\"==typeof t&&t(),e&&(yield this.braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow(void 0,!0))}n()})}shouldRunAuthenticationFlow(){var e;return Do(this,void 0,void 0,function*(){const t=\"braintreeacceleratedcheckout\";try{yield this.paymentIntegrationService.loadPaymentMethod(t);const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t);return(null===(e=n.initializationData)||void 0===e?void 0:e.shouldRunAcceleratedCheckout)||!1}catch(e){return!1}})}getValidPaymentMethodOrThrow(e){return Do(this,void 0,void 0,function*(){let t=e;try{yield this.paymentIntegrationService.loadPaymentMethod(t)}catch(n){t=\"braintree\"===e?\"braintreeacceleratedcheckout\":\"braintree\",yield this.paymentIntegrationService.loadPaymentMethod(t)}return this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t)})}}var zo=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class No{constructor(e,t){this.paymentIntegrationService=e,this.braintreeIntegrationService=t}getDeviceSessionId(){return zo(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getCart();return this.braintreeIntegrationService.getSessionId(null==e?void 0:e.id)})}initializeBraintreeFastlaneOrThrow(e,t){return zo(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getCart(),{clientToken:r,config:o}=n.getPaymentMethodOrThrow(e);if(!r)throw new ii(ti.MissingPaymentMethod);this.methodId=e,this.braintreeIntegrationService.initialize(r),this.braintreeFastlane=yield this.braintreeIntegrationService.getBraintreeFastlane(null==i?void 0:i.id,o.testMode,t)})}getBraintreeFastlaneOrThrow(){if(!this.braintreeFastlane)throw new gi;return this.braintreeFastlane}getBraintreeFastlaneComponentOrThrow(){return this.getBraintreeFastlaneOrThrow().FastlaneCardComponent}runPayPalAuthenticationFlowOrThrow(e,t){var n;return zo(this,void 0,void 0,function*(){try{const i=this.getMethodIdOrThrow(),r=this.getBraintreeFastlaneOrThrow(),{lookupCustomerByEmail:o,triggerAuthenticationFlow:a}=r.identity,s=this.paymentIntegrationService.getState(),d=s.getCartOrThrow(),c=s.getCustomer(),l=s.getBillingAddress(),{isFastlaneShippingOptionAutoSelectEnabled:u}=s.getPaymentMethodOrThrow(i).initializationData||{},h=e||(null==c?void 0:c.email)||(null==l?void 0:l.email)||\"\",{customerContextId:p}=yield o(h);if(!p)return yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:Ni.UNRECOGNIZED,addresses:[],instruments:[]}),void this.saveSessionIdToCookies(d.id);const{authenticationState:m,profileData:y}=yield a(p),g=(null===(n=null==y?void 0:y.shippingAddress)||void 0===n?void 0:n.phoneNumber)||\"\";if(m===Ni.CANCELED)return yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:m,addresses:[],instruments:[]}),void this.removeSessionIdFromCookies();const v=this.mapPayPalToBcAddress([y.shippingAddress],[g])||[],f=this.getPayPalBillingAddresses(y),S=f?this.mapPayPalToBcAddress([f],[g]):[],_=y.card?this.mapPayPalToBcInstrument(i,[y.card]):[],w=this.mergeShippingAndBillingAddresses(v,S);if(this.saveSessionIdToCookies(d.id),yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:m,addresses:w,instruments:_}),S.length>0&&d.lineItems.physicalItems.length>0&&(yield this.paymentIntegrationService.updateBillingAddress(S[0])),S.length>0&&d.lineItems.digitalItems.length>0&&0===d.lineItems.physicalItems.length){const{firstName:e,lastName:t}=w[0],n=Object.assign(Object.assign({},S[0]),{firstName:e,lastName:t});yield this.paymentIntegrationService.updateBillingAddress(n)}v.length>0&&d.lineItems.physicalItems.length>0&&(yield this.paymentIntegrationService.updateShippingAddress(v[0]),t&&u&&(yield this.setShippingOption()))}catch(e){}})}getSessionIdFromCookies(){return Br.get(\"bc-fastlane-sessionId\")||\"\"}saveSessionIdToCookies(e){const t=new Date;t.setDate(t.getDate()+14),Br.set(\"bc-fastlane-sessionId\",e,{expires:t,secure:!0})}removeSessionIdFromCookies(){Br.remove(\"bc-fastlane-sessionId\")}mapPayPalToBcInstrument(e,t){if(t)return t.map(t=>{const{id:n,paymentSource:i}=t,{brand:r,expiry:o,lastDigits:a,binDetails:s}=i.card,[d,c]=o.split(\"-\");return{bigpayToken:n,brand:r,defaultInstrument:!1,expiryMonth:c,expiryYear:d,iin:(null==s?void 0:s.bin)||\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,type:\"card\",untrustedShippingCardVerificationMode:Er.PAN}})}mapPayPalToBcAddress(e,t){if(!e)return[];const n=this.paymentIntegrationService.getState().getCountries()||[],i=e=>{const t=n.find(t=>t.code===e);return(null==t?void 0:t.name)||\"\"};return e.map(e=>({id:Date.now(),type:\"paypal-address\",firstName:e.firstName||\"\",lastName:e.lastName||\"\",company:e.company||\"\",address1:e.streetAddress,address2:e.extendedAddress||\"\",city:e.locality,stateOrProvince:e.region,stateOrProvinceCode:e.region,country:i(e.countryCodeAlpha2),countryCode:e.countryCodeAlpha2,postalCode:e.postalCode,phone:t&&t[0]||\"\",customFields:[]}))}getPayPalBillingAddresses(e){const{card:t,name:n}=e||{};if(!t)return;const{firstName:i,lastName:r}=t.paymentSource.card.billingAddress,{firstName:o,lastName:a}=n||{},{shippingAddress:s}=e||{},d=Object.assign(Object.assign({},t.paymentSource.card.billingAddress),{firstName:i||o,lastName:r||a});return s&&Y(this.normalizeAddress(d),this.normalizeAddress(s))?s:d}normalizeAddress(e){return le(e,[\"id\"])}mergeShippingAndBillingAddresses(e,t){const n=t.filter(t=>!e.some(e=>Y(this.normalizeAddress(e),this.normalizeAddress(t))));return[...e,...n]}getMethodIdOrThrow(){if(!this.methodId)throw new _i('Unable to proceed because \"methodId\" argument is not provided.');return this.methodId}setShippingOption(){var e;return zo(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getConsignments()||[],n=(null===(e=t[0])||void 0===e?void 0:e.availableShippingOptions)||[],i=n.find(e=>e.isRecommended);if(i||n.length){const e=i||n[0];yield this.paymentIntegrationService.selectShippingOption(e.id)}})}}const xo=Si(e=>{const t=window,n=new Ti(e),i=new Io(new $i(a(),t,n),t),r=new No(e,i);return new Mo(e,r)},[{id:\"braintreeacceleratedcheckout\"},{id:\"braintree\"}]);var Ro=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Fo{constructor(e,t,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=n,this.buttonClassName=\"visa-checkout-wrapper\",this.onError=ce}initialize(e){return Ro(this,void 0,void 0,function*(){const{braintreevisacheckout:t,methodId:n}=e;if(!n)throw new _i('Unable to proceed because \"methodId\" argument is not provided.');if(!t)throw new _i('Unable to proceed because \"options.braintreevisacheckout\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const i=this.paymentIntegrationService.getState(),r=i.getCheckoutOrThrow(),{clientToken:o,config:a}=i.getPaymentMethodOrThrow(n),s=i.getStoreConfigOrThrow();if(!o)throw new ii(ti.MissingPaymentMethod);this.braintreeSdk.initialize(o);const d=yield this.braintreeSdk.getBraintreeVisaCheckout(),c=yield this.braintreeSdk.getVisaCheckoutSdk(a.testMode),{container:l,onError:u}=t;this.onError=u||ce;const h=d.createInitOptions({paymentRequest:{currencyCode:s.currency.code,subtotal:String(r.subtotal)},settings:{locale:s.storeProfile.storeLanguage,shipping:{collectShipping:!0}}}),p=this.createSignInButton(l,this.buttonClassName);yield c.init(h),c.on(\"payment.success\",e=>this.tokenizePayment(d,e).then(()=>this.paymentIntegrationService.loadCheckout()).catch(e=>this.handleError(e))),c.on(\"payment.error\",(e,t)=>this.handleError(t)),p.style.visibility=\"visible\"})}deinitialize(){return Ro(this,void 0,void 0,function*(){yield this.braintreeSdk.deinitialize()})}signIn(){throw new wi('In order to sign in via VisaCheckout, the shopper must click on \"Visa Checkout\" button.')}signOut(e){return Ro(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}tokenizePayment(e,t){return Ro(this,void 0,void 0,function*(){return Promise.all([e.tokenize(t),this.braintreeSdk.getDataCollectorOrThrow()]).then(([e,t])=>{const n=this.paymentIntegrationService.getState(),i=n.getShippingAddress(),r=n.getBillingAddress(),{shippingAddress:o=this.mapToVisaCheckoutAddress(i),billingAddress:a=this.mapToVisaCheckoutAddress(r)}=e;return this.postForm(Object.assign(Object.assign({},e),{shippingAddress:o,billingAddress:a}),t)})})}postForm(e,t){const{userData:n,billingAddress:i,shippingAddress:r,details:o}=e,{userEmail:a}=n,{deviceData:s}=t;return this.formPoster.postForm(\"/checkout.php\",{payment_type:e.type,nonce:e.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,i)),shipping_address:JSON.stringify(this.getAddress(a,r))})}mapToVisaCheckoutAddress(e){return e?{firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phone,streetAddress:e.address1,extendedAddress:e.address2,locality:e.city,region:e.stateOrProvinceCode,countryCode:e.countryCode,postalCode:e.postalCode}:{}}getAddress(e,t={}){return{email:e,first_name:t.firstName,last_name:t.lastName,phone_number:t.phoneNumber,address_line_1:t.streetAddress,address_line_2:t.extendedAddress,city:t.locality,state:t.region,country_code:t.countryCode,postal_code:t.postalCode}}createSignInButton(e,t){const n=document.querySelector(`#${e}`);if(!n)throw new Error(\"Unable to proceed because the provided container ID is not valid.\");return this.insertVisaCheckoutButton(n,t)}insertVisaCheckoutButton(e,t){const n=document.createElement(\"div\");return n.style.display=\"flex\",n.style.flexDirection=\"column\",n.style.visibility=\"hidden\",n.style.width=\"max-content\",n.className=t,n.innerHTML='\\n            <img\\n                alt=\"Visa Checkout\"\\n                class=\"v-button\"\\n                role=\"button\"\\n                src=\"https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178\"\\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>',e.appendChild(n),n}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const Lo=Si(e=>{const t=window,n=new Ti(e),i=new Vi(new $i(a(),t,n));return new Fo(e,Ee(),i)},[{id:\"braintreevisacheckout\"}]);class Bo{constructor(e){if(!e)throw new Error(\"Currency settings missing\");const{decimalPlaces:t,symbolLocation:n,symbol:i,thousandsSeparator:r,decimalSeparator:o}=e;if(\"string\"!=typeof n||\"string\"!=typeof i||\"string\"!=typeof r||\"string\"!=typeof o||\"string\"!=typeof t)throw new _i(\"Invalid currency settings provided\");this._decimalPlaces=parseInt(t,10),this._symbolLocation=n,this._symbol=i,this._thousandsSeparator=r,this._decimalSeparator=o}format(e){if(\"number\"!=typeof e)throw new _i(\"Invalid amount provided\");const t=this._formatNumber(e),n=this._formatCurrency(t);return e<0?`-${n}`:n}_formatNumber(e){const t=Math.abs(e),[n,i=\"\"]=this._toFixed(t,this._decimalPlaces).split(\".\"),r=n.replace(/\\B(?=(\\d{3})+(?!\\d))/g,this._thousandsSeparator);return this._decimalPlaces<1?r:[r,i].join(this._decimalSeparator)}_formatCurrency(e){return\"left\"===this._symbolLocation.toLowerCase()?`${this._symbol}${e}`:`${e}${this._symbol}`}_toFixed(e,t){return(+`${Math.round(+`${e}e${t}`)}e${-t}`).toFixed(t)}}let jo=class{constructor(e){this._storeConfig=e,this._customerFormatter=new Bo(this._storeConfig.shopperCurrency),this._storeFormatter=new Bo(this._storeConfig.currency)}toCustomerCurrency(e){const t=this._storeConfig.shopperCurrency.exchangeRate;return this._customerFormatter.format(e*t)}toStoreCurrency(e){return this._storeFormatter.format(e)}};jo=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Bn],jo);const Uo=jo,qo=(e,t)=>!!e&&(!!e.lineItems.physicalItems.some(e=>e.isShippingRequired)||!(!t||!e.lineItems.customItems)&&e.lineItems.customItems.length>0);function Vo(){if(\"undefined\"==typeof window)return!1;if(function(e){return\"ReactNativeWebView\"in e}(window))return!0;const e=navigator.userAgent||navigator.vendor||(function(e){return\"opera\"in e}(window)?window.opera:\"\"),t=/android.+; wv/i.test(e),n=/iPhone|iPod|iPad/i.test(e)&&/AppleWebKit/i.test(e)&&!/Safari/i.test(e);return t||n}var Go,Ho,Wo,$o,Yo,Ko,Jo,Zo,Qo;function Xo(e){return e in Ko}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Go||(Go={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(Ho||(Ho={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(Wo||(Wo={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}($o||($o={})),function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(Yo||(Yo={})),function(e){e.AMEX=\"AMEX\",e.DISCOVER=\"DISCOVER\",e.INTERAC=\"INTERAC\",e.JCB=\"JCB\",e.MC=\"MASTERCARD\",e.VISA=\"VISA\"}(Ko||(Ko={})),function(e){e.OFFER=\"OFFER\",e.PAYMENT_AUTHORIZATION=\"PAYMENT_AUTHORIZATION\",e.SHIPPING_ADDRESS=\"SHIPPING_ADDRESS\",e.SHIPPING_OPTION=\"SHIPPING_OPTION\"}(Jo||(Jo={})),function(e){e.OFFER_INVALID=\"OFFER_INVALID\",e.PAYMENT_DATA_INVALID=\"PAYMENT_DATA_INVALID\",e.SHIPPING_ADDRESS_INVALID=\"SHIPPING_ADDRESS_INVALID\",e.SHIPPING_ADDRESS_UNSERVICEABLE=\"SHIPPING_ADDRESS_UNSERVICEABLE\",e.SHIPPING_OPTION_INVALID=\"SHIPPING_OPTION_INVALID\",e.OTHER_ERROR=\"OTHER_ERROR\"}(Zo||(Zo={})),function(e){e.INITIALIZE=\"INITIALIZE\",e.SHIPPING_OPTION=\"SHIPPING_OPTION\",e.SHIPPING_ADDRESS=\"SHIPPING_ADDRESS\",e.OFFER=\"OFFER\"}(Qo||(Qo={}));var ea,ta=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class na{constructor(e,t){this._gatewayIdentifier=e,this._paymentIntegrationService=t,this._isBuyNowFlow=!1,this._shouldRequestShipping=!0,this._isWebViewExperimentOn=null}mapToShippingAddressRequestBody({shippingAddress:e}){if(!e)return;const{company:t=\"\",phone:n=\"\"}=this._paymentIntegrationService.getState().getShippingAddress()||{};return this._mapToAddressRequestBody(e,t,n)}mapToBillingAddressRequestBody(e){const{billingAddress:t}=e.paymentMethodData.info;if(!t)return;const{company:n=\"\",phone:i=\"\",email:r,customFields:o=[]}=this._paymentIntegrationService.getState().getBillingAddress()||{};return Object.assign(Object.assign({},this._mapToAddressRequestBody(t,n,i,o)),{email:r||e.email})}mapToExternalCheckoutData(e){var t;const{paymentMethodData:{tokenizationData:{token:n},info:{cardNetwork:i,cardDetails:r}}}=e;if(!n)throw new ii(ti.MissingPaymentToken);return Promise.resolve(Object.assign({nonce:n,card_information:{type:i,number:r}},this._isBuyNowFlow&&{cart_id:null===(t=this._paymentIntegrationService.getState().getCart())||void 0===t?void 0:t.id}))}getRequiredData(){var e;return ta(this,void 0,void 0,function*(){const t={emailRequired:!0};if(!this._isShippingAddressRequired())return t;const n=yield this._paymentIntegrationService.loadShippingCountries(),i=null===(e=n.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code);return Object.assign(Object.assign({},t),{shippingAddressRequired:!0,shippingAddressParameters:Object.assign({phoneNumberRequired:!0},i&&{allowedCountryCodes:i}),shippingOptionRequired:!0})})}getCallbackIntents(){return this._isShippingAddressRequired()?[Jo.OFFER,Jo.SHIPPING_ADDRESS,Jo.SHIPPING_OPTION]:[Jo.OFFER]}getCallbackTriggers(){return{availableTriggers:[Qo.INITIALIZE,Qo.SHIPPING_ADDRESS,Qo.SHIPPING_OPTION,Qo.OFFER],initializationTrigger:[Qo.INITIALIZE],addressChangeTriggers:[Qo.INITIALIZE,Qo.SHIPPING_ADDRESS],shippingOptionsChangeTriggers:[Qo.SHIPPING_OPTION],offerChangeTriggers:[Qo.OFFER]}}getNonce(e){var t;const n=null===(t=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e).initializationData)||void 0===t?void 0:t.nonce;if(!n)throw new ii(ti.MissingPaymentToken);return Promise.resolve(n)}extraPaymentData(){return Promise.resolve(void 0)}getMerchantInfo(){const{googleMerchantName:e,googleMerchantId:t,platformToken:n}=this.getGooglePayInitializationData();return{merchantName:e,merchantId:t,authJwt:n}}getTransactionInfo(){let e;const{getCartOrThrow:t}=this._paymentIntegrationService.getState();e=this._isBuyNowFlow?this._getCurrencyCodeOrThrow():t().currency.code;const n=this.getGooglePayInitializationData().storeCountry;if(this.isWebViewWithRestrictions()){const t=this.getTotalPrice();return Object.assign(Object.assign({},n&&{countryCode:n}),{currencyCode:e,totalPrice:t,totalPriceStatus:Yo.ESTIMATED})}return Object.assign(Object.assign({},n&&{countryCode:n}),{currencyCode:e,totalPriceStatus:Yo.ESTIMATED,totalPrice:\"0\"})}isWebViewWithRestrictions(){return null!==this._isWebViewExperimentOn?this._isWebViewExperimentOn&&Vo():Vo()}setIsWebViewExperimentOn(e){this._isWebViewExperimentOn=e}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData().gatewayMerchantId;if(!e)throw new _i(\"Unable to proceed, gatewayMerchantId is missing.\");return{gateway:this._gatewayIdentifier,gatewayMerchantId:e}}getCardParameters(){return{allowedAuthMethods:[\"PAN_ONLY\",\"CRYPTOGRAM_3DS\"],allowedCardNetworks:this.getPaymentMethod().supportedCards.filter(Xo).map(e=>Ko[e]),billingAddressRequired:!0,billingAddressParameters:{format:\"FULL\",phoneNumberRequired:!0}}}initialize(e,t,n){return this._getPaymentMethodFn=e,this._isBuyNowFlow=Boolean(t),this._currencyCode=n,this._isBuyNowFlow&&this._getCurrencyCodeOrThrow(),Promise.resolve()}handleShippingAddressChange(e){var t,n,i,r;return ta(this,void 0,void 0,function*(){e&&(e.name=e.name||\"\",e.address1=e.address1||\"\");const o=this.mapToShippingAddressRequestBody({shippingAddress:e});o&&(yield this._paymentIntegrationService.updateShippingAddress(o));const a=this._paymentIntegrationService.getState(),s=a.getConsignments();if(!(null==s?void 0:s[0]))return;const d=s[0],c=a.getStoreConfigOrThrow();this._currencyService||(this._currencyService=new Uo(c));const l=(d.availableShippingOptions||[]).map(this._getGooglePayShippingOption.bind(this)),u=null===(t=d.availableShippingOptions)||void 0===t?void 0:t.find(e=>e.isRecommended);if(l.length){const e=(null===(n=d.selectedShippingOption)||void 0===n?void 0:n.id)||(null==u?void 0:u.id)||(null===(i=l[0])||void 0===i?void 0:i.id);return!(null===(r=d.selectedShippingOption)||void 0===r?void 0:r.id)&&l[0]&&(yield this.handleShippingOptionChange((null==u?void 0:u.id)||l[0].id)),{defaultSelectedOptionId:e,shippingOptions:l}}})}handleShippingOptionChange(e){return ta(this,void 0,void 0,function*(){if(\"shipping_option_unselected\"!==e)return this._paymentIntegrationService.selectShippingOption(e)})}getTotalPrice(){const{getCheckoutOrThrow:e,getCartOrThrow:t,getStoreConfigOrThrow:n}=this._paymentIntegrationService.getState(),{decimalPlaces:i}=t().currency,r=Pi(n().checkoutSettings.features,\"PI-5075.google_pay_round_total_price_to_max_2_decimal_places\")?Math.min(i,2):i;return ge(e().outstandingBalance,r).toFixed(r)}handleCoupons(e){return ta(this,void 0,void 0,function*(){const{redemptionCodes:t=[]}=e,{offers:n}=this.getAppliedCoupons()||{};let i;return yield t.reduce((e,t)=>ta(this,void 0,void 0,function*(){if(yield e,(n||[]).some(({redemptionCode:e})=>e===t))return;const r=yield this.applyCoupon(t);r&&(i=r)}),Promise.resolve()),yield(n||[]).reduce((e,n)=>ta(this,void 0,void 0,function*(){yield e,t.includes(n.redemptionCode)||(yield this._paymentIntegrationService.removeCoupon(n.redemptionCode))}),Promise.resolve()),{newOfferInfo:this.getAppliedCoupons(),error:i}})}getAppliedCoupons(){const e=this._paymentIntegrationService.getState(),{coupons:t}=e.getCheckout()||{};return{offers:(t||[]).map(e=>{const{displayName:t,code:n}=e;return{redemptionCode:n,description:t}})}}applyCoupon(e){return ta(this,void 0,void 0,function*(){let t;try{yield this._paymentIntegrationService.applyCoupon(e)}catch(e){return e instanceof Error&&(t={reason:Zo.OFFER_INVALID,message:e.message,intent:Qo.OFFER}),t}})}setShouldRequestShipping(e){this._shouldRequestShipping=e}getGooglePayInitializationData(){return oi(this.getPaymentMethod().initializationData,()=>new _i(\"Missing initialization data.\"))}getPaymentMethod(){return oi(this._getPaymentMethodFn,()=>new ai(ni.PaymentNotInitialized))()}getGatewayIdentifier(){return this._gatewayIdentifier}setGatewayIdentifier(e){this._gatewayIdentifier=e||this.getGatewayIdentifier()}_isShippingAddressRequired(){const{getCartOrThrow:e,getStoreConfigOrThrow:t,getShippingAddress:n}=this._paymentIntegrationService.getState(),i=t();let r;return r=Pi(i.checkoutSettings.features,\"PI-4290.google_pay_require_shipping_address\")?this._shouldRequestShipping:void 0===n(),r&&qo(e(),i)}_mapToAddressRequestBody(e,t,n,i){const{name:r,address1:o,address2:a,address3:s,locality:d,administrativeArea:c,countryCode:l,postalCode:u,phoneNumber:h}=e,[p,m]=this._getFirstAndLastName(r);return{firstName:p,lastName:m,company:t,address1:o,address2:`${a} ${s}`.trim(),city:d||c,stateOrProvince:c,stateOrProvinceCode:c,countryCode:l,postalCode:u,phone:h||n,customFields:i||[]}}_getFirstAndLastName(e){const t=e.split(\" \");return 1===t.length?[e,\"\"]:[t.slice(0,-1).join(\" \"),t[t.length-1]]}_getCurrencyCodeOrThrow(){return oi(this._currencyCode,()=>new _i('Unable to initialize payment because \"options.currencyCode\" argument is not provided.'))}_getGooglePayShippingOption({id:e,cost:t,description:n,additionalDescription:i}){var r;return{id:e,label:`${(null===(r=this._currencyService)||void 0===r?void 0:r.toCustomerCurrency(t))||t} ${n}`,description:i}}}function ia(e){return\"object\"==typeof e&&null!==e&&\"statusCode\"in e}function ra(e){return Object.values(ea).includes(e)}!function(e){e.ADYEN_V2=\"googlepayadyenv2\",e.ADYEN_V3=\"googlepayadyenv3\",e.AUTHORIZE_NET=\"googlepayauthorizenet\",e.BNZ=\"googlepaybnz\",e.BRAINTREE=\"googlepaybraintree\",e.PAYPAL_COMMERCE=\"googlepaypaypalcommerce\",e.BIGCOMMERCE_PAYMENTS=\"googlepay_bigcommerce_payments\",e.CHECKOUT_COM=\"googlepaycheckoutcom\",e.CYBERSOURCE_V2=\"googlepaycybersourcev2\",e.ORBITAL=\"googlepayorbital\",e.STRIPE=\"googlepaystripe\",e.STRIPE_UPE=\"googlepaystripeupe\",e.STRIPE_OCS=\"googlepaystripeocs\",e.WORLDPAY_ACCESS=\"googlepayworldpayaccess\",e.TD_ONLINE_MART=\"googlepaytdonlinemart\"}(ea||(ea={}));var oa=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class aa{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t}initialize(e){var t,n;return oa(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId)||!ra(e.methodId))throw new _i('Unable to proceed because \"methodId\" is not a valid key.');this._methodId=e.methodId;const i=e[this._getMethodId()];if(!i)throw new _i(\"Unable to proceed without valid options.\");let r,o=this._paymentIntegrationService.getState();try{r=o.getPaymentMethodOrThrow(this._getMethodId())}catch(e){o=yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodId()),r=o.getPaymentMethodOrThrow(this._getMethodId())}try{this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(t=r.initializationData)||void 0===t?void 0:t.isWebViewExperimentOn)),yield this._googlePayPaymentProcessor.initialize(()=>r,this._getGooglePayClientOptions(null===(n=r.initializationData)||void 0===n?void 0:n.storeCountry))}catch(e){return}this._addPaymentButton(i)})}signIn(){return Promise.reject(new wi('In order to sign in via Google Pay, the shopper must click on \"Google Pay\" button.'))}signOut(){var e;return oa(this,void 0,void 0,function*(){const t=null===(e=this._paymentIntegrationService.getState().getPaymentId())||void 0===e?void 0:e.providerId;t&&(yield this._googlePayPaymentProcessor.signOut(t))})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}deinitialize(){var e;return null===(e=this._paymentButton)||void 0===e||e.remove(),this._paymentButton=void 0,this._methodId=void 0,Promise.resolve()}_getGooglePayClientOptions(e){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:t,shippingAddress:n,shippingOptionData:i,offerData:r})=>oa(this,void 0,void 0,function*(){const{availableTriggers:o,addressChangeTriggers:a,shippingOptionsChangeTriggers:s,offerChangeTriggers:d}=this._googlePayPaymentProcessor.getCallbackTriggers();if(!o.includes(t))return;const c=a.includes(t)?yield this._googlePayPaymentProcessor.handleShippingAddressChange(n):void 0;s.includes(t)&&(yield this._googlePayPaymentProcessor.handleShippingOptionChange(i.id));const{newOfferInfo:l,error:u}=d.includes(t)?yield this._googlePayPaymentProcessor.handleCoupons(r):{},h=u;yield this._paymentIntegrationService.loadCheckout();const p=this._googlePayPaymentProcessor.getTotalPrice(),{code:m}=this._paymentIntegrationService.getState().getCartOrThrow().currency;return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},e&&{countryCode:e}),{currencyCode:m,totalPriceStatus:Yo.FINAL,totalPrice:p})},c&&{newShippingOptionParameters:c}),l&&{newOfferInfo:l}),h&&{error:h})})}}}_addPaymentButton({container:e,buttonColor:t,buttonType:n,onClick:i,onError:r}){var o;this._paymentButton=null!==(o=this._paymentButton)&&void 0!==o?o:this._googlePayPaymentProcessor.addPaymentButton(e,{buttonColor:null!=t?t:\"default\",buttonType:null!=n?n:\"plain\",onClick:this._handleClick(r,i)})}_handleClick(e,t){return n=>oa(this,void 0,void 0,function*(){n.preventDefault(),t&&\"function\"==typeof t&&t();try{yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheet()}catch(t){let n=t;if(ia(t)){if(\"CANCELED\"===t.statusCode)throw new Yi;n=new eo(JSON.stringify(t))}throw null==e||e(new eo(\"An error occurred while requesting your Google Pay payment details.\")),n}})}_interactWithPaymentSheet(){return oa(this,void 0,void 0,function*(){const e=yield this._googlePayPaymentProcessor.showPaymentSheet(),t=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(e),n=this._googlePayPaymentProcessor.mapToShippingAddressRequestBody(e),i=\"/embedded-checkout\"===window.location.pathname?this._paymentIntegrationService.getState().getStoreConfigOrThrow().links.siteLink:void 0;t&&(yield this._paymentIntegrationService.updateBillingAddress(t)),n&&(yield this._paymentIntegrationService.updateShippingAddress(n)),yield this._googlePayPaymentProcessor.setExternalCheckoutForm(this._getMethodId(),e,i)})}_getMethodId(){return oi(this._methodId,()=>new ai(ni.PaymentNotInitialized))}}var sa=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class da{constructor(e,t,n,i){this._scriptLoader=e,this._gateway=t,this._requestSender=n,this._formPoster=i,this._baseRequest={apiVersion:2,apiVersionMinor:0}}initialize(e,t,n,i){return sa(this,void 0,void 0,function*(){this._paymentsClient=yield this._scriptLoader.getGooglePaymentsClient(e().config.testMode,t),yield this._gateway.initialize(e,n,i),this._buildButtonPayloads()})}initializeWidget(){return sa(this,void 0,void 0,function*(){yield this._buildWidgetPayloads(),yield this._determineReadinessToPay(),this._prefetchGooglePaymentData()})}getNonce(e){return this._gateway.getNonce(e)}extraPaymentData(){return sa(this,void 0,void 0,function*(){return this._gateway.extraPaymentData()})}addPaymentButton(e,t){const n=document.querySelector(`#${e}`);if(!n)return;const i=this._getPaymentsClient().createButton(Object.assign(Object.assign({},t),{allowedPaymentMethods:[this._getBaseCardPaymentMethod()]}));return n.appendChild(i)}showPaymentSheet(){return sa(this,void 0,void 0,function*(){const e=this._getPaymentDataRequest();return this._getPaymentsClient().loadPaymentData(e)})}setExternalCheckoutXhr(e,t){return sa(this,void 0,void 0,function*(){return this._setExternalCheckout(e,t)})}setExternalCheckoutForm(e,t,n){return sa(this,void 0,void 0,function*(){return this._setExternalCheckout(e,t,!0,n)})}mapToBillingAddressRequestBody(e){return this._gateway.mapToBillingAddressRequestBody(e)}mapToShippingAddressRequestBody(e){return this._gateway.mapToShippingAddressRequestBody(e)}processAdditionalAction(e,t){return\"processAdditionalAction\"in this._gateway?this._gateway.processAdditionalAction(e,t):Promise.reject(e)}signOut(e){return sa(this,void 0,void 0,function*(){yield this._requestSender.get(`/remote-checkout/${e}/signout`)})}getCallbackTriggers(){return this._gateway.getCallbackTriggers()}setShouldRequestShipping(e){return this._gateway.setShouldRequestShipping(e)}handleShippingAddressChange(e){return sa(this,void 0,void 0,function*(){return this._gateway.handleShippingAddressChange(e)})}handleShippingOptionChange(e){return sa(this,void 0,void 0,function*(){yield this._gateway.handleShippingOptionChange(e)})}handleCoupons(e){return sa(this,void 0,void 0,function*(){return this._gateway.handleCoupons(e)})}getTotalPrice(){return this._gateway.getTotalPrice()}_setExternalCheckout(e,t,n=!1,i){return sa(this,void 0,void 0,function*(){const r=\"/checkout.php\",o=Object.assign({action:\"set_external_checkout\",provider:e},yield this._gateway.mapToExternalCheckoutData(t));if(n)return new Promise(e=>{this._formPoster.postForm(i?`${i}/checkout`:r,Object.assign(Object.assign({},o),{card_information:JSON.stringify(o.card_information)}),e)});yield this._requestSender.post(r,{headers:Object.assign({Accept:\"text/html\",\"Content-Type\":\"application/x-www-form-urlencoded\"},vr),body:o})})}isWebViewWithRestrictions(){return this._gateway.isWebViewWithRestrictions()}setIsWebViewExperimentOn(e){return this._gateway.setIsWebViewExperimentOn(e)}_prefetchGooglePaymentData(){const e=this._getPaymentDataRequest();e.transactionInfo=this._gateway.getTransactionInfo(),this._getPaymentsClient().prefetchPaymentData(e)}_determineReadinessToPay(){return sa(this,void 0,void 0,function*(){try{const{result:e}=yield this._getPaymentsClient().isReadyToPay(this._getIsReadyToPayRequest());if(!1===e)throw new eo(\"Google Pay is not supported by the current device and browser, please try another payment method.\")}catch(e){if(e instanceof eo)throw e;throw new eo}})}_buildButtonPayloads(){this._baseCardPaymentMethod={type:\"CARD\",parameters:this._gateway.getCardParameters()}}_buildWidgetPayloads(){return sa(this,void 0,void 0,function*(){const e=this._getBaseCardPaymentMethod();this._cardPaymentMethod=Object.assign(Object.assign({},e),{tokenizationSpecification:{type:\"PAYMENT_GATEWAY\",parameters:yield this._gateway.getPaymentGatewayParameters()}});const t=this._gateway.isWebViewWithRestrictions()?{shippingOptionRequired:!1}:{callbackIntents:this._gateway.getCallbackIntents(),offerInfo:this._gateway.getAppliedCoupons()};this._paymentDataRequest=Object.assign(Object.assign(Object.assign(Object.assign({},this._baseRequest),{allowedPaymentMethods:[this._cardPaymentMethod],transactionInfo:this._gateway.getTransactionInfo(),merchantInfo:this._gateway.getMerchantInfo()}),yield this._gateway.getRequiredData()),t),this._isReadyToPayRequest=Object.assign(Object.assign({},this._baseRequest),{allowedPaymentMethods:[e]})})}_getBaseCardPaymentMethod(){return this._getOrThrow(this._baseCardPaymentMethod)}_getPaymentDataRequest(){return this._getOrThrow(this._paymentDataRequest)}_getIsReadyToPayRequest(){return this._getOrThrow(this._isReadyToPayRequest)}_getPaymentsClient(){return this._getOrThrow(this._paymentsClient)}_getOrThrow(e){return oi(e,()=>new ai(ni.PaymentNotInitialized))}}class ca{constructor(e){this._scriptLoader=e,this._window=window}getGooglePaymentsClient(e=!1,t){return n=this,i=void 0,o=function*(){if(yield this._scriptLoader.loadScript(\"https://pay.google.com/gp/p/js/pay.js\"),!this._window.google)throw new gi;return void 0===this._paymentsClient&&(this._paymentsClient=new this._window.google.payments.api.PaymentsClient(Object.assign({environment:e?\"TEST\":\"PRODUCTION\"},null!=t?t:{}))),this._paymentsClient},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}function la(){return new ca(a())}const ua=Si(e=>{const t=n();return new aa(e,new da(la(),new na(\"adyen\",e),t,Ee()))},[{id:\"googlepayadyenv2\"}]),ha=Si(e=>{const t=n();return new aa(e,new da(la(),new na(\"adyen\",e),t,Ee()))},[{id:\"googlepayadyenv3\"}]);class pa extends na{constructor(e){super(\"authorizenet\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();return function(e){if(!function(e){return\"paymentGatewayId\"in e}(e))throw new ii(ti.MissingPaymentMethod)}(e),{gateway:this.getGatewayIdentifier(),gatewayMerchantId:e.paymentGatewayId}}}const ma=Si(e=>new aa(e,new da(la(),new pa(e),n(),Ee())),[{id:\"googlepayauthorizenet\"}]),ya=e=>\"object\"==typeof e&&null!==e&&\"body\"in e;function ga(e){if(!function(e){return\"checkoutcomkey\"in e}(e))throw new ii(ti.MissingPaymentMethod)}var va=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class fa extends na{constructor(e,t){super(\"checkoutltd\",e),this._requestSender=t}processAdditionalAction(e){return new Promise((t,n)=>{if(ya(e)&&function(e){var t;if(\"object\"!=typeof e||null===e)return!1;const n=e;return\"string\"==typeof(null===(t=n.three_ds_result)||void 0===t?void 0:t.acs_url)&&\"string\"==typeof n.three_ds_result.code}(e.body)&&\"three_d_secure_required\"===e.body.three_ds_result.code)return window.location.assign(e.body.three_ds_result.acs_url);n(e)})}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return va(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let i;try{i=JSON.parse(n.nonce)}catch(e){throw new _i(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"protocolVersion\"in e&&\"signature\"in e&&\"signedMessage\"in e}(e))throw new ii(ti.MissingPaymentToken)}(i),n.nonce=yield this._tokenize(i),n})}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();return ga(e),{gateway:this.getGatewayIdentifier(),gatewayMerchantId:e.checkoutcomkey}}_tokenize(e){return va(this,void 0,void 0,function*(){const t=this.getPaymentMethod().config.testMode?\"https://api.sandbox.checkout.com/tokens\":\"https://api.checkout.com/tokens\",n=this.getGooglePayInitializationData();ga(n);const{body:i}=yield this._requestSender.post(t,{credentials:!1,body:{type:\"googlepay\",token_data:e},headers:{Authorization:n.checkoutcomkey,\"Content-Type\":gr.Json,\"X-XSRF-TOKEN\":null}});return i.token})}}const Sa=Si(e=>{const t=n();return new aa(e,new da(la(),new fa(e,t),t,Ee()))},[{id:\"googlepaycheckoutcom\"}]);class _a extends na{constructor(e){super(\"cybersource\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}const wa=Si(e=>new aa(e,new da(la(),new _a(e),n(),Ee())),[{id:\"googlepaycybersourcev2\"}]),Ia=Si(e=>new aa(e,new da(la(),new _a(e),n(),Ee())),[{id:\"googlepaybnz\"}]);class Ca extends na{constructor(e){super(\"chase\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}const ba=Si(e=>new aa(e,new da(la(),new Ca(e),n(),Ee())),[{id:\"googlepayorbital\"}]);var Pa,Oa,Ea,Aa,Ta,ka,Da,Ma,za,Na,xa,Ra;!function(e){e.SHIPPING=\"shipping\",e.BILLING=\"billing\"}(Pa||(Pa={})),function(e){e.SPLIT=\"split\",e.FULL=\"full\",e.ORGANIZATION=\"organization\"}(Oa||(Oa={})),function(e){e.Open=\"open\",e.Expired=\"expired\",e.Complete=\"complete\"}(Ea||(Ea={})),function(e){e.Paid=\"paid\",e.UnPaid=\"unpaid\",e.NoPaymentRequired=\"no_payment_required\"}(Aa||(Aa={})),function(e){e.SUCCESS=\"success\",e.ERROR=\"error\"}(Ta||(Ta={})),function(e){e.CreditCard=\"card\",e.ACH=\"us_bank_account\",e.Link=\"link\",e.EPS=\"eps\",e.GRABPAY=\"grabpay\",e.BANCONTACT=\"bancontact\",e.IDEAL=\"ideal\",e.ALIPAY=\"alipay\",e.KLARNA=\"klarna\",e.OCS=\"optimized_checkout\",e.CHECKOUT_SESSION=\"checkout_session\"}(ka||(ka={})),function(e){e.NEVER=\"never\",e.AUTO=\"auto\",e.ALWAYS=\"always\",e.PAYMENT=\"payment\",e.IF_REQUIRED=\"if_required\"}(Da||(Da={})),function(e){e.V3=\"v3\",e.ACACIA=\"acacia\",e.BASIL=\"basil\",e.CLOVER=\"clover\"}(Ma||(Ma={})),function(e){e.PAYMENT=\"payment\",e.AUTHENTICATION=\"linkAuthentication\",e.SHIPPING=\"address\",e.EXPRESS_CHECKOUT=\"expressCheckout\"}(za||(za={})),function(e){e.REQUIRES_PAYMENT_METHOD=\"requires_payment_method\",e.REQUIRES_CONFIRMATION=\"requires_confirmation\",e.REQUIRES_ACTION=\"requires_action\",e.PROCESSING=\"processing\",e.SUCCEEDED=\"succeeded\",e.CANCELED=\"canceled\"}(Na||(Na={})),function(e){e.CLICK=\"click\",e.CHANGE=\"change\",e.READY=\"ready\",e.SHIPPING_ADDRESS_CHANGE=\"shippingaddresschange\",e.SHIPPING_RATE_CHANGE=\"shippingratechange\",e.CONFIRM=\"confirm\",e.CANCEL=\"cancel\",e.LOADER_START=\"loaderstart\"}(xa||(xa={})),function(e){e.ON_SESSION=\"on_session\",e.OFF_SESSION=\"off_session\"}(Ra||(Ra={}));var Fa=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class La{constructor(e,t=window){this.scriptLoader=e,this.stripeWindow=t}getStripeClient(e,t,n,i,r){return Fa(this,void 0,void 0,function*(){if(this.stripeWindow.bcStripeClient)return this.stripeWindow.bcStripeClient;const o=yield this.load(n),{stripePublishableKey:a,stripeConnectedAccount:s}=e,d=o(a,Object.assign(Object.assign(Object.assign(Object.assign({},s?{stripeAccount:s}:{}),t?{locale:t}:{}),i?{betas:i}:{}),r?{apiVersion:r}:{}));return Object.assign(this.stripeWindow,{bcStripeClient:d}),d})}getElements(e,t){return Fa(this,void 0,void 0,function*(){let n=this.stripeWindow.bcStripeElements;return n?yield this.updateStripeElements(t):(n=e.elements(t),Object.assign(this.stripeWindow,{bcStripeElements:n})),n})}updateStripeElements(e){return Fa(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeElements;t&&(t.update(e),yield t.fetchUpdates())})}getStripeCheckout(e,t){return Fa(this,void 0,void 0,function*(){let n=yield this.getStoredStripeCheckout(t);return n||(n=yield e.initCheckout(t),Object.assign(this.stripeWindow,{bcStripeCheckout:n})),n})}load(e){return Fa(this,void 0,void 0,function*(){if(!this.stripeWindow.Stripe&&(yield this.scriptLoader.loadScript(this.getScriptUrl(e)),!this.stripeWindow.Stripe))throw new gi;return this.stripeWindow.Stripe})}getScriptUrl(e){return e&&e!==Ma.V3?`https://js.stripe.com/${e}/stripe.js`:\"https://js.stripe.com/v3/\"}getStoredStripeCheckout(e){return Fa(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeCheckout;if(t)try{const{actions:n,error:i}=yield t.loadActions();if(i||!n)return void this.logErrorToConsole(i);const r=yield n.getSession(),o=e.clientSecret.split(\"_secret_\")[0];if(r.id===o)return t}catch(e){return void this.logErrorToConsole(e)}})}logErrorToConsole(e){e?console.error(e):console.error(\"No stripe checkout actions available on loadActions().\")}}const Ba=[\"payment_element_beta_2\",\"alipay_pm_beta_1\",\"link_default_integration_beta_1\",\"shipping_address_element_beta_1\",\"address_element_beta_1\"],ja=\"2020-03-02;alipay_beta=v1;link_beta=v1\";function Ua(e){if(!function(e){return\"stripeConnectedAccount\"in e&&\"stripePublishableKey\"in e&&\"stripeVersion\"in e}(e))throw new ii(ti.MissingPaymentMethod)}var qa=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Va extends na{constructor(e,t){super(\"stripe\",e),this.paymentIntegrationService=e,this.scriptLoader=t}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return qa(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let i;try{i=JSON.parse(n.nonce)}catch(e){throw new _i(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"id\"in e}(e))throw new ii(ti.MissingPaymentToken)}(i),n.nonce=i.id,n})}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();Ua(e);const{stripeVersion:t,stripePublishableKey:n,stripeConnectedAccount:i}=e;return{gateway:this.getGatewayIdentifier(),\"stripe:version\":t,\"stripe:publishableKey\":`${n}/${i}`}}processAdditionalAction(e,t){var n;return qa(this,void 0,void 0,function*(){if(!t)throw new uo([\"payment\"]);if(!ya(e)||(\"object\"!=typeof(i=e.body)||null===i||!(\"three_ds_result\"in i)||!(\"errors\"in i)))throw e;var i;if(ve(e.body.errors,{code:\"three_d_secure_required\"})){const i=this.getGooglePayInitializationData();Ua(i),this.stripeUPEClient=yield this.loadStripeJs(i,t);const r=e.body.three_ds_result.token;let o,a=!1;try{o=yield this.stripeUPEClient.confirmCardPayment(r)}catch(e){try{o=yield this.stripeUPEClient.retrievePaymentIntent(r)}catch(e){a=!0}}if(null==o?void 0:o.error){if(this._throwDisplayableStripeError(o.error),this._isCancellationError(o.error))throw new Yi;throw new eo}if(!(null==o?void 0:o.paymentIntent)&&!a)throw new rr;return this.paymentIntegrationService.submitPayment({methodId:t,paymentData:{nonce:(null===(n=null==o?void 0:o.paymentIntent)||void 0===n?void 0:n.id)||r}})}throw e})}loadStripeJs(e,t){return qa(this,void 0,void 0,function*(){if(this.stripeUPEClient)return this.stripeUPEClient;const n=this.paymentIntegrationService.getState().getCartLocale();return\"googlepaystripeocs\"===t&&e.useNewStripeJsVersion?this.scriptLoader.getStripeClient(e,n,Ma.CLOVER):this.scriptLoader.getStripeClient(e,n,Ma.V3,Ba,ja)})}_isCancellationError(e){var t,n;return e&&-1!==(null===(n=null===(t=e.payment_intent.last_payment_error)||void 0===t?void 0:t.message)||void 0===n?void 0:n.indexOf(\"canceled\"))}_throwDisplayableStripeError(e){if(H([\"card_error\",\"invalid_request_error\",\"validation_error\"],e.type))throw new Error(e.message)}}const Ga=Si(e=>new aa(e,new da(la(),new Va(e,new La(a())),n(),Ee())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeocs\"}]),Ha=Si(e=>new aa(e,new da(la(),new Va(e,new La(a())),n(),Ee())),[{id:\"googlepaystripeupe\"}]);class Wa extends na{constructor(e){super(\"worldpay\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,o=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}const $a=Si(e=>new aa(e,new da(la(),new Wa(e),n(),Ee())),[{id:\"googlepayworldpayaccess\"}]);var Ya=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ka extends na{constructor(e,t){super(\"braintree\",e),this._braintreeSdk=t,this._methodId=ea.BRAINTREE,this._service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return Ya(this,void 0,void 0,function*(){yield i.initialize.call(this,e,t,n);let r=i.getPaymentMethod.call(this);if(r.clientToken||(r=(yield this._service.loadPaymentMethod(this._methodId)).getPaymentMethodOrThrow(this._methodId)),!r.clientToken||!r.initializationData)throw new ii(ti.MissingPaymentMethod);return this._braintreeSdk.initialize(r.clientToken),this._braintreeGooglePayment=yield this._braintreeSdk.getBraintreeGooglePayment(),Promise.resolve()})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});var n;return Ya(this,void 0,void 0,function*(){const i=yield t.getNonce.call(this,e),{clientToken:r,initializationData:o}=t.getPaymentMethod.call(this);if(!r||!o||!(null===(n=o.card_information)||void 0===n?void 0:n.bin))throw new ii(ti.MissingPaymentMethod);const{isThreeDSecureEnabled:a,card_information:{bin:s,isNetworkTokenized:d}}=o;if(a&&!d){const e=yield this._braintreeSdk.getBraintreeThreeDS(),{orderAmount:t}=this._service.getState().getOrderOrThrow();return(yield this._braintreePresent3DSChallenge(e,t,i,s)).nonce}return i})}extraPaymentData(){return Ya(this,void 0,void 0,function*(){return{deviceSessionId:yield this._getBraintreeDeviceData()}})}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return Ya(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let i;try{i=JSON.parse(n.nonce)}catch(e){throw new _i(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"androidPayCards\"in e}(e))throw new ii(ti.MissingPaymentToken)}(i),n.nonce=i.androidPayCards[0].nonce,n.card_information.bin=i.androidPayCards[0].details.bin,n.card_information.isNetworkTokenized=i.androidPayCards[0].details.isNetworkTokenized,n})}getCardParameters(){return super.getCardParameters()}getPaymentGatewayParameters(){const e=Object.create(null,{getMerchantInfo:{get:()=>super.getMerchantInfo},getTransactionInfo:{get:()=>super.getTransactionInfo},getRequiredData:{get:()=>super.getRequiredData}});return Ya(this,void 0,void 0,function*(){return this.getBraintreeGooglePayment().createPaymentDataRequest(Object.assign({merchantInfo:e.getMerchantInfo.call(this),transactionInfo:e.getTransactionInfo.call(this),cardRequirements:{billingAddressRequired:!0,billingAddressFormat:\"FULL\"}},yield e.getRequiredData.call(this))).paymentMethodTokenizationParameters.parameters})}getBraintreeGooglePayment(){if(!this._braintreeGooglePayment)throw new ii(ti.MissingPaymentMethod);return this._braintreeGooglePayment}_getBraintreeDeviceData(){return Ya(this,void 0,void 0,function*(){const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e})}_braintreePresent3DSChallenge(e,t,n,i){return new Tn(e.verifyCard({amount:t,bin:i,nonce:n,onLookupComplete:(e,t)=>{t()}})).promise}}const Ja=Si(e=>{const t=n(),i=window,r=new Ti(e),o=new Vi(new $i(a(),i,r));return new aa(e,new da(la(),new Ka(e,o),t,Ee()))},[{id:\"googlepaybraintree\"}]),Za={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},Qa=[\"ar_BH\",\"ar_DZ\",\"ar_EG\",\"ar_JO\",\"ar_KW\",\"ar_MA\",\"ar_OM\",\"ar_QA\",\"ar_SA\",\"ar_TN\",\"ar_YE\",\"ar_AE\",\"bg_BG\",\"cs_CZ\",\"da_DK\",\"da_FO\",\"da_GL\",\"de_AT\",\"de_CH\",\"de_DE\",\"de_LU\",\"el_GR\",\"en_AD\",\"en_AE\",\"en_AG\",\"en_AI\",\"en_AL\",\"en_AM\",\"en_AN\",\"en_AO\",\"en_AT\",\"en_AU\",\"en_AW\",\"en_AZ\",\"en_BB\",\"en_BE\",\"en_BH\",\"en_BJ\",\"en_BM\",\"en_BN\",\"en_BS\",\"en_BT\",\"en_BW\",\"en_BY\",\"en_BZ\",\"en_C2\",\"en_CA\",\"en_CD\",\"en_CG\",\"en_CH\",\"en_CI\",\"en_CK\",\"en_CL\",\"en_CM\",\"en_CN\",\"en_CO\",\"en_CR\",\"en_CV\",\"en_CY\",\"en_CZ\",\"en_DE\",\"en_DJ\",\"en_DK\",\"en_DM\",\"en_DO\",\"en_DZ\",\"en_EC\",\"en_EE\",\"en_EG\",\"en_ER\",\"en_ES\",\"en_ET\",\"en_FI\",\"en_FJ\",\"en_FK\",\"en_FM\",\"en_FO\",\"en_FR\",\"en_GA\",\"en_GB\",\"en_GD\",\"en_GE\",\"en_GF\",\"en_GI\",\"en_GL\",\"en_GM\",\"en_GN\",\"en_GP\",\"en_GR\",\"en_GT\",\"en_GW\",\"en_GY\",\"en_HK\",\"en_HN\",\"en_HR\",\"en_HU\",\"en_ID\",\"en_IE\",\"en_IL\",\"en_IN\",\"en_IS\",\"en_IT\",\"en_JM\",\"en_JO\",\"en_JP\",\"en_KE\",\"en_KG\",\"en_KH\",\"en_KI\",\"en_KM\",\"en_KN\",\"en_KR\",\"en_KW\",\"en_KY\",\"en_KZ\",\"en_LA\",\"en_LC\",\"en_LI\",\"en_LK\",\"en_LS\",\"en_LT\",\"en_LU\",\"en_LV\",\"en_MA\",\"en_MC\",\"en_MD\",\"en_ME\",\"en_MG\",\"en_MH\",\"en_MK\",\"en_ML\",\"en_MN\",\"en_MQ\",\"en_MR\",\"en_MS\",\"en_MT\",\"en_MU\",\"en_MV\",\"en_MW\",\"en_MY\",\"en_MZ\",\"en_NA\",\"en_NC\",\"en_NE\",\"en_NF\",\"en_NG\",\"en_NI\",\"en_NL\",\"en_NO\",\"en_NP\",\"en_NR\",\"en_NU\",\"en_NZ\",\"en_OM\",\"en_PA\",\"en_PE\",\"en_PF\",\"en_PG\",\"en_PH\",\"en_PL\",\"en_PM\",\"en_PN\",\"en_PT\",\"en_PW\",\"en_PY\",\"en_QA\",\"en_RE\",\"en_RO\",\"en_RS\",\"en_RU\",\"en_RW\",\"en_SA\",\"en_SB\",\"en_SC\",\"en_SE\",\"en_SG\",\"en_SH\",\"en_SI\",\"en_SJ\",\"en_SK\",\"en_SL\",\"en_SM\",\"en_SN\",\"en_SO\",\"en_SR\",\"en_ST\",\"en_SV\",\"en_SZ\",\"en_TC\",\"en_TD\",\"en_TG\",\"en_TH\",\"en_TJ\",\"en_TM\",\"en_TN\",\"en_TO\",\"en_TR\",\"en_TT\",\"en_TV\",\"en_TW\",\"en_TZ\",\"en_UA\",\"en_UG\",\"en_US\",\"en_UY\",\"en_VA\",\"en_VC\",\"en_VE\",\"en_VG\",\"en_VN\",\"en_VU\",\"en_WF\",\"en_WS\",\"en_YE\",\"en_YT\",\"en_ZA\",\"en_ZM\",\"en_ZW\",\"es_AD\",\"es_AI\",\"es_AO\",\"es_AR\",\"es_AW\",\"es_BB\",\"es_BJ\",\"es_BM\",\"es_BO\",\"es_BS\",\"es_BZ\",\"es_CD\",\"es_CG\",\"es_CK\",\"es_CL\",\"es_CO\",\"es_CR\",\"es_CV\",\"es_DJ\",\"es_DM\",\"es_DO\",\"es_DZ\",\"es_EC\",\"es_EG\",\"es_ER\",\"es_ES\",\"es_ET\",\"es_FJ\",\"es_FK\",\"es_FO\",\"es_GA\",\"es_GD\",\"es_GE\",\"es_GI\",\"es_GL\",\"es_GM\",\"es_GN\",\"es_GT\",\"es_GW\",\"es_GY\",\"es_HN\",\"es_IE\",\"es_JM\",\"es_JO\",\"es_KE\",\"es_KG\",\"es_KI\",\"es_KM\",\"es_KN\",\"es_KW\",\"es_KY\",\"es_KZ\",\"es_LC\",\"es_LI\",\"es_LS\",\"es_LU\",\"es_MA\",\"es_MG\",\"es_MH\",\"es_ML\",\"es_MR\",\"es_MS\",\"es_MU\",\"es_MW\",\"es_MX\",\"es_MZ\",\"es_NA\",\"es_NC\",\"es_NE\",\"es_NF\",\"es_NI\",\"es_NR\",\"es_NU\",\"es_NZ\",\"es_OM\",\"es_PA\",\"es_PE\",\"es_PF\",\"es_PG\",\"es_PM\",\"es_PN\",\"es_PW\",\"es_PY\",\"es_QA\",\"es_RS\",\"es_RW\",\"es_SA\",\"es_SB\",\"es_SC\",\"es_SH\",\"es_SJ\",\"es_SL\",\"es_SM\",\"es_SN\",\"es_SO\",\"es_SR\",\"es_ST\",\"es_SV\",\"es_SZ\",\"es_TC\",\"es_TD\",\"es_TG\",\"es_TJ\",\"es_TM\",\"es_TN\",\"es_TT\",\"es_TV\",\"es_UA\",\"es_UG\",\"es_US\",\"es_UY\",\"es_VA\",\"es_VC\",\"es_VE\",\"es_VG\",\"es_VU\",\"es_WF\",\"es_YE\",\"es_ZM\",\"et_EE\",\"fi_FI\",\"fr_AD\",\"fr_AE\",\"fr_AI\",\"fr_AM\",\"fr_AO\",\"fr_AW\",\"fr_AZ\",\"fr_BB\",\"fr_BE\",\"fr_BF\",\"fr_BI\",\"fr_BJ\",\"fr_BM\",\"fr_BS\",\"fr_BZ\",\"fr_CA\",\"fr_CD\",\"fr_CG\",\"fr_CH\",\"fr_CI\",\"fr_CK\",\"fr_CM\",\"fr_CV\",\"fr_DJ\",\"fr_DM\",\"fr_DO\",\"fr_DZ\",\"fr_EC\",\"fr_ER\",\"fr_ET\",\"fr_FJ\",\"fr_FK\",\"fr_FO\",\"fr_FR\",\"fr_GA\",\"fr_GD\",\"fr_GE\",\"fr_GF\",\"fr_GI\",\"fr_GL\",\"fr_GM\",\"fr_GN\",\"fr_GP\",\"fr_GT\",\"fr_GW\",\"fr_GY\",\"fr_HN\",\"fr_IE\",\"fr_JM\",\"fr_JO\",\"fr_KE\",\"fr_KG\",\"fr_KI\",\"fr_KM\",\"fr_KN\",\"fr_KW\",\"fr_KY\",\"fr_KZ\",\"fr_LC\",\"fr_LI\",\"fr_LS\",\"fr_LU\",\"fr_MA\",\"fr_MC\",\"fr_MG\",\"fr_MH\",\"fr_ML\",\"fr_MQ\",\"fr_MR\",\"fr_MS\",\"fr_MU\",\"fr_MW\",\"fr_MZ\",\"fr_NA\",\"fr_NC\",\"fr_NE\",\"fr_NF\",\"fr_NI\",\"fr_NR\",\"fr_NU\",\"fr_NZ\",\"fr_OM\",\"fr_PA\",\"fr_PE\",\"fr_PF\",\"fr_PG\",\"fr_PM\",\"fr_PN\",\"fr_PW\",\"fr_QA\",\"fr_RE\",\"fr_RS\",\"fr_RW\",\"fr_SA\",\"fr_SB\",\"fr_SC\",\"fr_SH\",\"fr_SJ\",\"fr_SL\",\"fr_SM\",\"fr_SN\",\"fr_SO\",\"fr_SR\",\"fr_ST\",\"fr_SV\",\"fr_SZ\",\"fr_TC\",\"fr_TD\",\"fr_TG\",\"fr_TJ\",\"fr_TM\",\"fr_TN\",\"fr_TT\",\"fr_TV\",\"fr_UA\",\"fr_UG\",\"fr_US\",\"fr_UY\",\"fr_VA\",\"fr_VC\",\"fr_VE\",\"fr_VG\",\"fr_VU\",\"fr_WF\",\"fr_YE\",\"fr_YT\",\"fr_ZA\",\"fr_ZM\",\"he_IL\",\"hu_HU\",\"id_ID\",\"it_IT\",\"ja_JP\",\"ko_KR\",\"lv_LV\",\"lt_LT\",\"ms_BN\",\"ms_MY\",\"nl_BE\",\"nl_NL\",\"pl_PL\",\"pt_BR\",\"pt_PT\",\"ro_RO\",\"ru_EE\",\"ru_LT\",\"ru_LV\",\"ru_RU\",\"ru_UA\",\"si_LK\",\"sk_SK\",\"sl_SI\",\"sq_AL\",\"sv_SE\",\"tl_PH\",\"th_TH\",\"tr_TR\",\"vi_VN\",\"zh_C2\",\"zh_CN\",\"zh_HK\",\"zh_TW\",\"zh_AD\",\"zh_AE\",\"zh_AI\",\"zh_AO\",\"zh_AW\",\"zh_BB\",\"zh_BH\",\"zh_BJ\",\"zh_BM\",\"zh_BS\",\"zh_BZ\",\"zh_CD\",\"zh_CG\",\"zh_CK\",\"zh_CL\",\"zh_CO\",\"zh_CV\",\"zh_DJ\",\"zh_DM\",\"zh_DO\",\"zh_DZ\",\"zh_EC\",\"zh_EG\",\"zh_ER\",\"zh_ET\",\"zh_FJ\",\"zh_FK\",\"zh_FO\",\"zh_GA\",\"zh_GD\",\"zh_GE\",\"zh_GI\",\"zh_GL\",\"zh_GM\",\"zh_GN\",\"zh_GT\",\"zh_GW\",\"zh_GY\",\"zh_HN\",\"zh_IE\",\"zh_JM\",\"zh_JO\",\"zh_KE\",\"zh_KG\",\"zh_KI\",\"zh_KM\",\"zh_KN\",\"zh_KW\",\"zh_KY\",\"zh_KZ\",\"zh_LC\",\"zh_LI\",\"zh_LS\",\"zh_LT\",\"zh_LU\",\"zh_MA\",\"zh_MG\",\"zh_MH\",\"zh_ML\",\"zh_MR\",\"zh_MS\",\"zh_MU\",\"zh_MW\",\"zh_MZ\",\"zh_NA\",\"zh_NC\",\"zh_NE\",\"zh_NF\",\"zh_NI\",\"zh_NR\",\"zh_NU\",\"zh_NZ\",\"zh_OM\",\"zh_PA\",\"zh_PE\",\"zh_PF\",\"zh_PG\",\"zh_PM\",\"zh_PN\",\"zh_PW\",\"zh_QA\",\"zh_RS\",\"zh_RW\",\"zh_SA\",\"zh_SB\",\"zh_SC\",\"zh_SH\",\"zh_SJ\",\"zh_SL\",\"zh_SM\",\"zh_SN\",\"zh_SO\",\"zh_SR\",\"zh_ST\",\"zh_SV\",\"zh_SZ\",\"zh_TC\",\"zh_TD\",\"zh_TG\",\"zh_TJ\",\"zh_TM\",\"zh_TN\",\"zh_TT\",\"zh_TV\",\"zh_UA\",\"zh_UG\",\"zh_US\",\"zh_UY\",\"zh_VA\",\"zh_VC\",\"zh_VE\",\"zh_VG\",\"zh_VU\",\"zh_WF\",\"zh_YE\",\"zh_ZA\",\"zh_ZM\"];function Xa(e){if(!e)return;let t;if(e.includes(\"-\")){const[n,i]=e.split(\"-\");t=`${n}_${i.toUpperCase()}`}else t=`${e}_${e.toUpperCase()}`;return Qa.includes(t)?t:void 0}var es=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ts{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n,i){return es(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const r=this.getPayPalFastlaneSdkConfiguration(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypalFastlaneSdk)throw new gi}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i,r){return es(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||r){const r=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i);yield this.loadPayPalSdk(r)}if(!this.window.paypalGooglePay)throw new gi;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return es(this,void 0,void 0,function*(){if(!this.window.paypalApms){const i=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.paypalApms)throw new gi}return this.window.paypalApms})}getPayPalMessages(e,t,n){return es(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const i=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.paypalMessages)throw new gi;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return es(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:i})})}getPayPalFastlaneSdkConfiguration(e,t,n,i){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new ii(ti.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:d,attributionId:c}=o,l=Xa(i);return{options:Object.assign({\"client-id\":s,\"merchant-id\":d,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t,intent:a},l&&{locale:l}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":c,\"data-sdk-client-token\":r}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i=!0){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new ii(ti.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:d,buyerCountry:c,attributionId:l,isHostedCheckoutEnabled:u,isDeveloperModeApplicable:h}=o,p=u||i,m=Xa(n);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":d,commit:p,components:[\"googlepay\"],currency:t,intent:a},h&&{\"buyer-country\":c}),m&&{locale:m}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":r,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new ii(ti.MissingPaymentMethod);const{intent:r,clientId:o,merchantId:a,buyerCountry:s,attributionId:d,isDeveloperModeApplicable:c,availableAlternativePaymentMethods:l=[],enabledAlternativePaymentMethods:u=[]}=i,h=u,p=l.filter(e=>!u.includes(e)),m=Xa(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":a,\"enable-funding\":h.length>0?h:void 0,\"disable-funding\":p.length>0?p:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:r},c&&{\"buyer-country\":s}),m&&{locale:m}),attributes:{\"data-partner-attribution-id\":d,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new ii(ti.MissingPaymentMethod);const{clientId:r,merchantId:o,attributionId:a,isDeveloperModeApplicable:s,buyerCountry:d}=i,c=Xa(n);return{options:Object.assign(Object.assign({\"client-id\":r,\"merchant-id\":o,components:[\"messages\"],currency:t},s&&{\"buyer-country\":d}),c&&{locale:c}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":a}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}function ns(e){if(!function(e){return!!e.initializationData&&\"attributionId\"in e.initializationData&&\"isVenmoEnabled\"in e.initializationData&&\"isGooglePayEnabled\"in e.initializationData&&\"isPayPalCreditAvailable\"in e.initializationData}(e))throw new ii(ti.MissingPaymentMethod)}var is=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class rs extends na{constructor(e,t){super(\"paypalsb\",e),this.payPalCommerceSdk=t,this.service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});var r,o,a,s,d;return is(this,void 0,void 0,function*(){const c=this.service.getState(),l=null!==(o=null===(r=c.getStoreConfig())||void 0===r?void 0:r.currency.code)&&void 0!==o?o:n;if(!l)throw new ii(ti.MissingPaymentMethod);yield i.initialize.call(this,e,t,l);const u=i.getPaymentMethod.call(this);if(!u.initializationData)throw new ii(ti.MissingPaymentMethod);ns(u);const h=yield this.payPalCommerceSdk.getPayPalGooglePaySdk(u,l,c.getLocale());this.googlepayConfig=yield h.Googlepay().config();const{allowedPaymentMethods:p}=this.googlepayConfig;this.setGatewayIdentifier(null===(d=null===(s=null===(a=p[0])||void 0===a?void 0:a.tokenizationSpecification)||void 0===s?void 0:s.parameters)||void 0===d?void 0:d.gateway)})}getPaymentGatewayParameters(){if(this.googlepayConfig){const{allowedPaymentMethods:e}=this.googlepayConfig,{gatewayMerchantId:t}=e[0].tokenizationSpecification.parameters;return{gateway:this.getGatewayIdentifier(),gatewayMerchantId:t}}return{gateway:this.getGatewayIdentifier()}}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return is(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n})}}const os=Si(e=>new aa(e,new da(la(),new rs(e,new ts(a())),n(),Ee())),[{id:\"googlepaypaypalcommerce\"}]);var as=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ss extends na{constructor(e,t){super(\"googlepay_bigcommerce_payments\",e),this.payPalSdkHelper=t,this.service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});var r,o,a,s,d;return as(this,void 0,void 0,function*(){const c=null!==(o=null===(r=this.service.getState().getStoreConfig())||void 0===r?void 0:r.currency.code)&&void 0!==o?o:n;if(!c)throw new ii(ti.MissingPaymentMethod);yield i.initialize.call(this,e,t,c);const l=i.getPaymentMethod.call(this);if(!l.initializationData)throw new ii(ti.MissingPaymentMethod);ns(l);const u=yield this.payPalSdkHelper.getPayPalGooglePaySdk(l,c);this.googlepayConfig=yield u.Googlepay().config();const{allowedPaymentMethods:h}=this.googlepayConfig;this.setGatewayIdentifier(null===(d=null===(s=null===(a=h[0])||void 0===a?void 0:a.tokenizationSpecification)||void 0===s?void 0:s.parameters)||void 0===d?void 0:d.gateway)})}getPaymentGatewayParameters(){if(this.googlepayConfig){const{allowedPaymentMethods:e}=this.googlepayConfig,{gatewayMerchantId:t}=e[0].tokenizationSpecification.parameters;return{gateway:this.getGatewayIdentifier(),gatewayMerchantId:t}}return{gateway:this.getGatewayIdentifier()}}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return as(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n})}}const ds=Si(e=>new aa(e,new da(la(),new ss(e,new Fr(a())),n(),Ee())),[{id:\"googlepay_bigcommerce_payments\"}]);function cs(){const{navigator:e}=window;let t;return t=e.language?e.language:e.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof e.javaEnabled&&e.javaEnabled(),language:t,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}var ls=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class us extends na{constructor(e,t){super(\"worldlinena\",e),this.formPoster=t}extraPaymentData(){return ls(this,void 0,void 0,function*(){return Promise.resolve({browser_info:cs()})})}processAdditionalAction(e){return ls(this,void 0,void 0,function*(){if(!function(e){return ya(e)&&(t=e.body,Z(t)&&\"object\"==typeof t&&\"errors\"in t&&\"three_ds_result\"in t&&W(t.errors)&&ve(t.errors,{code:\"three_d_secure_required\"}));var t}(e))throw e;const{three_ds_result:t}=e.body,{acs_url:n,payer_auth_request:i,merchant_data:r}=t||{};if(!n||!i||!r)throw new uo([\"formUrl\",\"threeDSSessionData\",\"creq\"]);return new Promise(e=>{this.formPoster.postForm(n,{threeDSSessionData:i,creq:r},e,\"_top\")})})}}const hs=Si(e=>new aa(e,new da(la(),new us(e,Ee()),n(),Ee())),[{id:\"googlepaytdonlinemart\"}]);var ps,ms,ys,gs,vs,fs,Ss,_s,ws,Is,Cs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class bs{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,i,r){return Cs(this,void 0,void 0,function*(){if(!this.window.paypal||r){const r=this.getPayPalSdkScriptConfigOrThrow(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypal)throw new gi}return this.window.paypal})}getPayPalFastlaneSdk(e,t,n,i){return Cs(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const r=this.getPayPalFastlaneSdkConfiguration(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypalFastlaneSdk)throw new gi}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i,r){return Cs(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||r){const r=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i);yield this.loadPayPalSdk(r)}if(!this.window.paypalGooglePay)throw new gi;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return Cs(this,void 0,void 0,function*(){if(!this.window.paypalApms){const i=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.paypalApms)throw new gi}return this.window.paypalApms})}getPayPalMessages(e,t,n){return Cs(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const i=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.paypalMessages)throw new gi;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return Cs(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:i})})}getPayPalSdkScriptConfigOrThrow(e,t,n,i=!0){const{id:r,clientToken:o,initializationData:a}=e;if(!a||!a.clientId)throw new ii(ti.MissingPaymentMethod);const{intent:s,clientId:d,merchantId:c,buyerCountry:l,attributionId:u,isVenmoEnabled:h,isHostedCheckoutEnabled:p,isPayPalCreditAvailable:m,isDeveloperModeApplicable:y,availableAlternativePaymentMethods:g=[],enabledAlternativePaymentMethods:v=[],isGooglePayEnabled:f}=a,S=p||i,_=\"paypalcommercecreditcards\"===r||\"bigcommerce_payments_creditcards\"===r,w=_?[\"card\"]:[],I=m?[\"credit\",\"paylater\"]:[],C=h?[\"venmo\"]:[],b=f?[\"googlepay\"]:[],P=i?[\"card-fields\"]:[],O=[..._?[]:[\"card\"],...m?[]:[\"credit\",\"paylater\"],...h?[]:[\"venmo\"],...g.filter(e=>!v.includes(e))],E=[...w,...I,...C,...v],A=Xa(n);return{options:Object.assign(Object.assign({\"client-id\":d,\"merchant-id\":c,\"enable-funding\":E.length>0?E:void 0,\"disable-funding\":O.length>0?O:void 0,commit:S,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...b,...P],currency:t,intent:s},y&&{\"buyer-country\":l}),A&&{locale:A}),attributes:{\"data-partner-attribution-id\":u,\"data-client-token\":o}}}getPayPalFastlaneSdkConfiguration(e,t,n,i){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new ii(ti.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:d,attributionId:c}=o,l=Xa(i);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":d,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t},l&&{locale:l}),{intent:a}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":c,\"data-sdk-client-token\":r}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i=!0){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new ii(ti.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:d,buyerCountry:c,attributionId:l,isHostedCheckoutEnabled:u,isDeveloperModeApplicable:h}=o,p=u||i,m=Xa(n);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":d,commit:p,components:[\"googlepay\"],currency:t,intent:a},h&&{\"buyer-country\":c}),m&&{locale:m}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":r,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new ii(ti.MissingPaymentMethod);const{intent:r,clientId:o,merchantId:a,buyerCountry:s,attributionId:d,isDeveloperModeApplicable:c,availableAlternativePaymentMethods:l=[],enabledAlternativePaymentMethods:u=[]}=i,h=u,p=l.filter(e=>!u.includes(e)),m=Xa(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":a,\"enable-funding\":h.length>0?h:void 0,\"disable-funding\":p.length>0?p:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:r},c&&{\"buyer-country\":s}),m&&{locale:m}),attributes:{\"data-partner-attribution-id\":d,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new ii(ti.MissingPaymentMethod);const{clientId:r,merchantId:o,attributionId:a,isDeveloperModeApplicable:s,buyerCountry:d}=i,c=Xa(n);return{options:Object.assign(Object.assign({\"client-id\":r,\"merchant-id\":o,components:[\"messages\"],currency:t},s&&{\"buyer-country\":d}),c&&{locale:c}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":a}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}function Ps(){return new bs(a())}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(ps||(ps={})),(ms||(ms={})).Always=\"SCA_ALWAYS\",function(e){e.Succeeded=\"succeeded\",e.Cancelled=\"cancelled\",e.Errored=\"errored\"}(ys||(ys={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(gs||(gs={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(vs||(vs={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(fs||(fs={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(Ss||(Ss={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"canceled\",e.UNRECOGNIZED=\"unrecognized\"}(_s||(_s={})),(ws||(ws={})).OXXO=\"oxxo\",function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(Is||(Is={}));var Os=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Es{constructor(e,t,n,i){this.formPoster=e,this.paymentIntegrationService=t,this.paypalRequestSender=n,this.paypalSdkLoader=i}loadPayPalSdk(e,t,n,i){return Os(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e),s=r.getLocale();return this.paypalSdk=yield this.paypalSdkLoader.getPayPalSDK(a,o,s,n,i),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new gi;return this.paypalSdk}createBuyNowCartOrThrow(e){return Os(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new ii(ti.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new nr}})}createOrder(e,t){return Os(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i}=yield this.paypalRequestSender.createOrder(e,Object.assign({cartId:n},t));return i})}createOrderCardFields(e,t){return Os(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i,setupToken:r}=yield this.paypalRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:i},r?{setupToken:r}:{})})}updateOrder(e,t,n,i){return Os(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=r.getCartOrThrow();let a;i||(a=r.getConsignmentsOrThrow()[0]);try{yield this.paypalRequestSender.updateOrder(e,Object.assign(Object.assign({availableShippingOptions:i?[]:null==a?void 0:a.availableShippingOptions,cartId:o.id,selectedShippingOption:i?null:null==a?void 0:a.selectedShippingOption},t?{methodId:t}:{}),n?{orderId:n}:{}))}catch(e){throw new rr}})}getOrderStatus(e,t){return Os(this,void 0,void 0,function*(){try{const{status:n}=yield this.paypalRequestSender.getOrderStatus(e,t);return n}catch(e){throw new rr}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new ii(ti.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===Ft.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return Os(this,void 0,void 0,function*(){const i={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:i},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],i=n.find(e=>e.isRecommended),r=(e?n.find(t=>t.id===e):n.find(e=>{if(t.selectedShippingOption){const n=t.selectedShippingOption.id;return e.id===n}return!1}))||i||n[0];if(!r)throw new Error(\"Your order can't be shipped to this address\");return r}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:i,name:{full_name:r}}=n[0].shipping,[o,...a]=r.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:i.address_line_1,address2:i.address_line_2,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})}getValidButtonStyle(e={}){const{color:t,height:n,label:i,shape:r}=e,o={color:t&&fs[t]?t:void 0,height:this.getValidHeight(n),label:i&&vs[i]?i:void 0,shape:r&&Ss[r]?r:void 0};return ue(o,J)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}var As=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ts{constructor(e){this.requestSender=e}createOrder(e,t){return As(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr);return(yield this.requestSender.post(n,{headers:r,body:i})).body})}updateOrder(e,t){return As(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr);return(yield this.requestSender.put(n,{headers:r,body:i})).body})}getOrderStatus(e,t){return As(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body})}}const ks=e=>{const{getHost:t}=e.getState();return new Es(Ee(),e,new Ts(n({host:t()})),Ps())};var Ds=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};const Ms=class{constructor(e,t){this.paymentIntegrationService=e,this.paypalIntegrationService=t}createPayPalButton(e,t,n,i){const{style:r,fundingSource:o,isHostedCheckoutEnabled:a,isServerSideShippingCallbacksEnabled:s,onClick:d,onCancel:c,onPaymentComplete:l,onError:u}=n;this.onError=u;const h=this.paypalIntegrationService.getPayPalSdkOrThrow();if(!Object.values(h.FUNDING).includes(o))throw new _i('Unable to initialize PayPal button because \"fundingSource\" argument is not valid funding source.');const p=Object.assign(Object.assign({},!s&&{onShippingAddressChange:t=>this.onShippingAddressChange(t,e),onShippingOptionsChange:t=>this.onShippingOptionsChange(t,e)}),{onApprove:(n,i)=>this.onHostedCheckoutApprove(n,i,t,e,l,s)});return h.Buttons(Object.assign(Object.assign(Object.assign({fundingSource:o,style:this.paypalIntegrationService.getValidButtonStyle(r),createOrder:()=>Ds(this,void 0,void 0,function*(){if(i){const e=yield this.paypalIntegrationService.createBuyNowCartOrThrow(i);yield this.paymentIntegrationService.loadCheckout(e.id)}return this.paypalIntegrationService.createOrder(e)}),onApprove:({orderID:e})=>this.paypalIntegrationService.tokenizePayment(t,e)},d?{onClick:d}:{}),c?{onCancel:c}:{}),a&&p))}onHostedCheckoutApprove(e,t,n,i,r,o){return Ds(this,void 0,void 0,function*(){if(!e.orderID)throw new ii(ti.MissingOrderId);const a=this.paymentIntegrationService.getState().getCartOrThrow();try{const s=a.lineItems.physicalItems.length>0;if(!o){const e=yield t.order.get(),n=this.paypalIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),s){const t=this.paypalIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}s&&(yield this.paypalIntegrationService.updateOrder(i,void 0,void 0,o)),o&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalIntegrationService.submitPayment(n,e.orderID),r&&\"function\"==typeof r&&r()}catch(e){this.handleError(e)}})}onShippingAddressChange(e,t){return Ds(this,void 0,void 0,function*(){const n=this.paypalIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(n),yield this.paymentIntegrationService.updateShippingAddress(n);const e=this.paypalIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalIntegrationService.updateOrder(t)}catch(e){this.handleError(e)}})}onShippingOptionsChange(e,t){return Ds(this,void 0,void 0,function*(){const n=this.paypalIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(n.id),yield this.paypalIntegrationService.updateOrder(t)}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}};var zs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ns{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalButtonCreationService=n}initialize(e){return zs(this,void 0,void 0,function*(){const{paypalcommerce:t,methodId:n}=e;if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');if(!t.container)throw new _i('Unable to initialize payment because \"options.paypalcommerce.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new _i('Unable to initialize payment because \"options.paypalcommerce.onClick\" argument is not a function.');this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.paypalIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return zs(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()})}signOut(e){return zs(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:i,onComplete:r,onError:o}=t,a=this.paypalIntegrationService.getPayPalSdkOrThrow(),s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:d,paymentButtonStyles:c,isServerSideShippingCallbacksEnabled:l}=s.initializationData||{},{checkoutTopButtonStyles:u}=c||{},h=Object.assign(Object.assign(Object.assign({fundingSource:a.FUNDING.PAYPAL,isServerSideShippingCallbacksEnabled:l,isHostedCheckoutEnabled:d,style:Object.assign(Object.assign({},u),{height:Cr})},i&&{onClick:()=>i()}),d&&r&&{onPaymentComplete:()=>r()}),{onError:o}),p=this.paypalButtonCreationService.createPayPalButton(\"paypalcommerce\",e,h);p.isEligible()?p.render(`#${n}`):this.paypalIntegrationService.removeElement(n)}}const xs=Si(e=>{const t=ks(e),n=new Ms(e,t);return new Ns(e,t,n)},[{id:\"paypalcommerce\"}]);var Rs,Fs,Ls,Bs,js,Us,qs;!function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(Rs||(Rs={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Fs||(Fs={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(Ls||(Ls={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(Bs||(Bs={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(js||(js={})),function(e){e.OXXO=\"oxxo\",e.IDEAL=\"ideal\"}(Us||(Us={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(qs||(qs={}));var Vs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Gs{constructor(e,t,n,i){this.formPoster=e,this.paymentIntegrationService=t,this.paypalCommerceRequestSender=n,this.paypalCommerceScriptLoader=i}loadPayPalSdk(e,t,n,i){return Vs(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e);return this.paypalSdk=yield this.paypalCommerceScriptLoader.getPayPalSDK(a,o,r.getLocale(),n,i),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new gi;return this.paypalSdk}createBuyNowCartOrThrow(e){return Vs(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new ii(ti.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new nr}})}createOrder(e,t){return Vs(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i}=yield this.paypalCommerceRequestSender.createOrder(e,Object.assign({cartId:n},t));return i})}createOrderCardFields(e,t){return Vs(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i,setupToken:r}=yield this.paypalCommerceRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:i},r?{setupToken:r}:{})})}updateOrder(e){return Vs(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getConsignmentsOrThrow()[0];try{yield this.paypalCommerceRequestSender.updateOrder({availableShippingOptions:e?[]:i.availableShippingOptions,cartId:n.id,selectedShippingOption:e?null:i.selectedShippingOption})}catch(e){throw new rr}})}getOrderStatus(e,t){return Vs(this,void 0,void 0,function*(){try{const{status:n}=yield this.paypalCommerceRequestSender.getOrderStatus(e,t);return n}catch(e){throw new rr}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new ii(ti.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===Ft.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return Vs(this,void 0,void 0,function*(){const i={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:i},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],i=n.find(e=>e.isRecommended),r=(e?n.find(t=>t.id===e):n.find(e=>{var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)}))||i||n[0];if(!r)throw new Error(\"Your order can't be shipped to this address\");return r}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:i,name:{full_name:r}}=n[0].shipping,[o,...a]=r.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:i.address_line_1,address2:i.address_line_2,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})}getValidButtonStyle(e){const{color:t,height:n,label:i,shape:r}=e||{},o={color:t&&Bs[t]?t:void 0,height:this.getValidHeight(n),label:i&&Ls[i]?i:void 0,shape:r&&js[r]?r:void 0};return ue(o,J)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}var Hs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ws{constructor(e){this.requestSender=e}createOrder(e,t){return Hs(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr);return(yield this.requestSender.post(n,{headers:r,body:i})).body})}updateOrder(e){return Hs(this,void 0,void 0,function*(){const t=e,n=Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr);return(yield this.requestSender.put(\"/api/storefront/initialization/paypalcommerce\",{headers:n,body:t})).body})}getOrderStatus(e=\"paypalcommerce\",t){return Hs(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body})}}var $s=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ys{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,i,r){return $s(this,void 0,void 0,function*(){const o=this.getPayPalSdkScriptConfigOrThrow(e,t,n,i);return this.loadPayPalSDK(o,r)})}loadPayPalSDK(e,t=!1){return $s(this,void 0,void 0,function*(){if(!this.window.paypal||t){const t=this.transformConfig(e.options),n=this.transformConfig(e.attributes),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(t).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:n})}if(!this.window.paypal)throw new gi;return this.window.paypal})}getPayPalSdkScriptConfigOrThrow(e,t,n,i=!0){const{id:r,clientToken:o,initializationData:a}=e;if(!(null==a?void 0:a.clientId))throw new ii(ti.MissingPaymentMethod);const{intent:s,clientId:d,merchantId:c,buyerCountry:l,attributionId:u,isVenmoEnabled:h,isHostedCheckoutEnabled:p,isPayPalCreditAvailable:m,isDeveloperModeApplicable:y,availableAlternativePaymentMethods:g=[],enabledAlternativePaymentMethods:v=[],isGooglePayEnabled:f}=a,S=p||i,_=\"paypalcommercecreditcards\"===r,w=_?[\"card\"]:[],I=m?[\"credit\",\"paylater\"]:[],C=h?[\"venmo\"]:[],b=f?[\"googlepay\"]:[],P=i?[\"card-fields\"]:[],O=[..._?[]:[\"card\"],...m?[]:[\"credit\",\"paylater\"],...h?[]:[\"venmo\"],...g.filter(e=>!v.includes(e))],E=[...w,...I,...C,...v],A=Xa(n);return{options:Object.assign(Object.assign({\"client-id\":d,\"merchant-id\":c,\"enable-funding\":E.length>0?E:void 0,\"disable-funding\":O.length>0?O:void 0,commit:S,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...b,...P],currency:t,intent:s},y&&{\"buyer-country\":l}),A&&{locale:A}),attributes:{\"data-partner-attribution-id\":u,\"data-client-token\":o}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}const Ks=e=>{const{getHost:t}=e.getState();return new Gs(Ee(),e,new Ws(n({host:t()})),new Ys(a()))};var Js=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Zs{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t,this.onError=ce}initialize(e){return Js(this,void 0,void 0,function*(){const{paypalcommercecredit:t,methodId:n}=e;if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.');if(!t.container)throw new _i('Unable to initialize payment because \"options.paypalcommercecredit.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new _i('Unable to initialize payment because \"options.paypalcommercecredit.onClick\" argument is not a function.');this.onError=t.onError||ce,this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.paypalCommerceIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Js(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Js(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onComplete:i,onClick:r}=t,o=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:s,paymentButtonStyles:d,isServerSideShippingCallbacksEnabled:c}=a.initializationData||{},{checkoutTopButtonStyles:l}=d||{},u=Object.assign({createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercecredit\"),onApprove:({orderID:t})=>this.paypalCommerceIntegrationService.tokenizePayment(e,t)},r&&{onClick:()=>r()}),h=Object.assign(Object.assign({},!c&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(t,n)=>this.onHostedCheckoutApprove(t,n,e,i,c)}),p=[o.FUNDING.PAYLATER,o.FUNDING.CREDIT];let m=!1;p.forEach(e=>{if(!m){const t=Object.assign(Object.assign({fundingSource:e,style:this.paypalCommerceIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},l),{height:Cr}))},u),s&&h),i=o.Buttons(t);i.isEligible()&&(i.render(`#${n}`),m=!0)}}),m||this.paypalCommerceIntegrationService.removeElement(n)}onHostedCheckoutApprove(e,t,n,i,r){return Js(this,void 0,void 0,function*(){if(!e.orderID)throw new ii(ti.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!r){const e=yield t.order.get(),n=this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}a&&(yield this.paypalCommerceIntegrationService.updateOrder(r)),r&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalCommerceIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i()}catch(e){this.handleError(e)}})}onShippingAddressChange(e){return Js(this,void 0,void 0,function*(){const t=this.paypalCommerceIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.paypalCommerceIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalCommerceIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}onShippingOptionsChange(e){return Js(this,void 0,void 0,function*(){const t=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.paypalCommerceIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const Qs=Si(e=>new Zs(e,Ks(e)),[{id:\"paypalcommercecredit\"}]);var Xs=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ed{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}initialize(e){return Xs(this,void 0,void 0,function*(){const{paypalcommercevenmo:t,methodId:n}=e;if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');if(!t.container)throw new _i('Unable to initialize payment because \"options.paypalcommercevenmo.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new _i('Unable to initialize payment because \"options.paypalcommercevenmo.onClick\" argument is not a function.');this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.paypalCommerceIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Xs(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Xs(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:i}=t,r=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:a}=o.initializationData||{},{checkoutTopButtonStyles:s}=a||{},d=Object.assign({fundingSource:r.FUNDING.VENMO,style:this.paypalCommerceIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},s),{height:Cr})),createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercevenmo\"),onApprove:({orderID:t})=>this.paypalCommerceIntegrationService.tokenizePayment(e,t)},i&&{onClick:()=>i()}),c=r.Buttons(d);c.isEligible()?c.render(`#${n}`):this.paypalCommerceIntegrationService.removeElement(n)}}const td=Si(e=>new ed(e,Ks(e)),[{id:\"paypalcommercevenmo\"}]);var nd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class id{constructor(){this.window=window}initializePayPalFastlane(e,t,n){return nd(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\"),window.localStorage.setItem(\"axoEnv\",\"sandbox\")),!this.window.paypalFastlane){const t={root:{backgroundColorPrimary:\"transparent\"}};this.window.paypalFastlane=yield e.Fastlane({styles:n||t})}return this.window.paypalFastlane})}getPayPalFastlaneOrThrow(){if(!this.window.paypalFastlane)throw new gi;return this.window.paypalFastlane}lookupCustomerOrThrow(e){return nd(this,void 0,void 0,function*(){return this.getPayPalFastlaneOrThrow().identity.lookupCustomerByEmail(e)})}triggerAuthenticationFlowOrThrow(e){return nd(this,void 0,void 0,function*(){return e?this.getPayPalFastlaneOrThrow().identity.triggerAuthenticationFlow(e):{}})}updateStorageSessionId(e){const t=new Date;t.setDate(t.getDate()+14);const n={expires:t,secure:!0};Br.set(\"bc-fastlane-sessionId\",e,n)}removeStorageSessionId(){Br.remove(\"bc-fastlane-sessionId\")}getStorageSessionId(){return Br.get(\"bc-fastlane-sessionId\")||\"\"}mapPayPalFastlaneProfileToBcCustomerData(e,t){var n,i,r;const{authenticationState:o,profileData:a}=t,s=null===(r=null===(i=null===(n=null==a?void 0:a.card)||void 0===n?void 0:n.paymentSource)||void 0===i?void 0:i.card)||void 0===r?void 0:r.billingAddress,d=null==a?void 0:a.shippingAddress,c=null==a?void 0:a.name,l=null==a?void 0:a.card,u=d?this.mapPayPalToBcAddress(d.address,d.name,d.phoneNumber):void 0,h=s&&c?this.mapPayPalToBcAddress(s,c,null==d?void 0:d.phoneNumber):void 0,p=l?this.mapPayPalToBcInstrument(e,l):[],m=this.filterAddresses([u,h]);return{authenticationState:o||_s.UNRECOGNIZED,addresses:m,billingAddress:h,shippingAddress:u,instruments:p}}mapPayPalToBcInstrument(e,t){const{id:n,paymentSource:i}=t,{brand:r,expiry:o,lastDigits:a}=i.card,[s,d]=o.split(\"-\");return[{bigpayToken:n,brand:r,defaultInstrument:!1,expiryMonth:d,expiryYear:s,iin:\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:Er.PAN,type:\"card\"}]}mapBcToPayPalAddress(e){return{company:(null==e?void 0:e.company)||\"\",addressLine1:(null==e?void 0:e.address1)||\"\",addressLine2:(null==e?void 0:e.address2)||\"\",adminArea1:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",adminArea2:(null==e?void 0:e.city)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\"}}mapPayPalToBcAddress(e,t,n,i){const[r,o]=t.fullName.split(\" \"),a=(null==n?void 0:n.nationalNumber)||\"\",s=(null==n?void 0:n.countryCode)||\"\";return{id:Date.now(),type:\"paypal-address\",firstName:t.firstName||r||\"\",lastName:t.lastName||o||\"\",company:e.company||\"\",address1:e.addressLine1,address2:e.addressLine2||\"\",city:e.adminArea2,stateOrProvince:e.adminArea1,stateOrProvinceCode:e.adminArea1,country:e.countryCode||\"\",countryCode:e.countryCode||\"\",postalCode:e.postalCode,phone:s+a,customFields:i||[]}}filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this.isEqualAddresses(e,t))?e:[...e,t]:e,[])}isEqualAddresses(e,t){return Y(this.normalizeAddress(e),this.normalizeAddress(t))}normalizeAddress(e){return le(e,[\"id\",\"phone\"])}}function rd(){return new id}function od(e){return\"string\"!=typeof e}function ad(e,t){if(t||e)return function(e){var t,n;const i={},r=ue(e.root,od),o=ue(e.input,od),a=ue(e.toggle,od),s=ue(null===(t=e.text)||void 0===t?void 0:t.body,od),d=ue(null===(n=e.text)||void 0===n?void 0:n.caption,od),c=e.branding;return Object.keys(r).length&&(i.root=r),Object.keys(o).length&&(i.input=o),Object.keys(a).length&&(i.toggle=a),Object.keys(s).length&&(i.text={},i.text.body=s),Object.keys(d).length&&(i.text=Object.assign({},i.text),i.text.caption=d),c&&(i.branding=c),i}(function(e,t){var n,i,r,o,a,s,d,c,l,u,h,p,m,y,g,v,f,S,_,w,I,C;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(y=null==t?void 0:t.toggle)||void 0===y?void 0:y.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(v=null===(g=null==t?void 0:t.text)||void 0===g?void 0:g.body)||void 0===v?void 0:v.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(S=null===(f=null==t?void 0:t.text)||void 0===f?void 0:f.body)||void 0===S?void 0:S.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(w=null===(_=null==t?void 0:t.text)||void 0===_?void 0:_.caption)||void 0===w?void 0:w.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(C=null===(I=null==t?void 0:t.text)||void 0===I?void 0:I.caption)||void 0===C?void 0:C.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}var sd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class dd{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalSdkScriptLoader=t,this.paypalFastlaneUtils=n}initialize(e){var t;return sd(this,void 0,void 0,function*(){const{methodId:n,paypalcommercefastlane:i}=e;if(!n)throw new _i('Unable to proceed because \"methodId\" argument is not provided.');try{yield this.paymentIntegrationService.loadPaymentMethod(n);const e=this.paymentIntegrationService.getState(),r=e.getCartOrThrow(),o=e.getPaymentMethodOrThrow(n),a=!!(null===(t=o.initializationData)||void 0===t?void 0:t.isDeveloperModeApplicable),s=yield this.paypalSdkScriptLoader.getPayPalFastlaneSdk(o,r.currency.code,r.id,e.getLocale());yield this.paypalFastlaneUtils.initializePayPalFastlane(s,a,this.getFastlaneStyles(n,i))}catch(e){}return Promise.resolve()})}deinitialize(){return sd(this,void 0,void 0,function*(){return Promise.resolve()})}signIn(e,t){return sd(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t),yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:void 0,addresses:void 0,instruments:void 0}),this.paypalFastlaneUtils.removeStorageSessionId()})}signOut(e){return sd(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){return sd(this,void 0,void 0,function*(){const{checkoutPaymentMethodExecuted:t,continueWithCheckoutCallback:n,methodId:i}=e||{};if(!i)throw new _i('Unable to proceed because \"methodId\" argument is not provided.');if(\"function\"!=typeof n)throw new _i('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');if(this.paymentIntegrationService.getState().getCustomerOrThrow().isGuest){t&&\"function\"==typeof t&&t();try{yield this.runPayPalAuthenticationFlowOrThrow(i)}catch(e){}}n()})}runPayPalAuthenticationFlowOrThrow(e){return sd(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow().id,i=t.getCustomer(),r=t.getBillingAddress(),o=(null==i?void 0:i.email)||(null==r?void 0:r.email)||\"\",{customerContextId:a}=yield this.paypalFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(a),d=s.authenticationState===_s.CANCELED;yield this.updateCustomerDataState(e,s),d?this.paypalFastlaneUtils.removeStorageSessionId():this.paypalFastlaneUtils.updateStorageSessionId(n)})}updateCustomerDataState(e,t){var n;return sd(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState().getCartOrThrow(),{authenticationState:r,addresses:o,billingAddress:a,shippingAddress:s,instruments:d}=this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,t);if(yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:r,addresses:o,instruments:d}),a&&(yield this.paymentIntegrationService.updateBillingAddress(a)),s&&i.lineItems.physicalItems.length>0){const t=yield this.paymentIntegrationService.updateShippingAddress(s),i=t.getPaymentMethodOrThrow(e),{isFastlaneShippingOptionAutoSelectEnabled:r}=i.initializationData||{},o=t.getConsignments()||[],a=(null===(n=o[0])||void 0===n?void 0:n.availableShippingOptions)||[],d=a[0],c=a.find(e=>e.isRecommended);if((c||d)&&r){const e=(null==c?void 0:c.id)||d.id;yield this.paymentIntegrationService.selectShippingOption(e)}}})}getFastlaneStyles(e,t){const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{fastlaneStyles:i,isFastlaneStylingEnabled:r}=n.initializationData||{};return ad(r?i:{},null==t?void 0:t.styles)}}const cd=Si(e=>new dd(e,Ps(),rd()),[{id:\"paypalcommerceacceleratedcheckout\"},{id:\"paypalcommercecreditcards\"}]);function ld(e){return\"object\"==typeof e&&null!==e&&\"initializationData\"in e&&void 0!==e.initializationData&&null!==e.initializationData&&\"object\"==typeof e.initializationData&&\"stripePublishableKey\"in e.initializationData&&\"stripeConnectedAccount\"in e.initializationData&&\"shopperLanguage\"in e.initializationData&&void 0!==e.initializationData.stripePublishableKey&&void 0!==e.initializationData.stripeConnectedAccount&&void 0!==e.initializationData.shopperLanguage}function ud(e){return\"stripeLinkAuthenticationState\"in e}class hd{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t}initialize(e){var t,n,i,r,o;return n=this,i=void 0,o=function*(){let n;if(!e.stripeupe)throw new _i('Unable to proceed because \"options\" argument is not provided.');const{container:i,gatewayId:r,methodId:o,onEmailChange:a,getStyles:s,isLoading:d}=e.stripeupe;Object.entries(e.stripeupe).forEach(([e,t])=>{if(!t)throw new _i(`Unable to proceed because \"${e}\" argument is not provided.`)}),yield this.paymentIntegrationService.loadPaymentMethod(r,{params:{method:o}});const c=this.paymentIntegrationService.getState(),l=c.getPaymentMethodOrThrow(o,r),{clientToken:u}=l;if(!ld(l)||!u)throw new ii(ti.MissingPaymentToken);const{email:h}=c.getCustomerOrThrow(),p=c.getPaymentProviderCustomerOrThrow(),m=(ud(p)?p:{}).stripeLinkAuthenticationState;if(!h){let e;const r=\"function\"==typeof s&&s();e=r?{variables:{colorPrimary:r.fieldInnerShadow,colorBackground:r.fieldBackground,colorText:r.labelText,colorDanger:r.fieldErrorText,colorTextSecondary:r.labelText,colorTextPlaceholder:r.fieldPlaceholderText},rules:{\".Input\":{borderColor:r.fieldBorder,color:r.fieldText,boxShadow:r.fieldInnerShadow}}}:{},n=yield this.scriptLoader.getStripeClient(l.initializationData,c.getCartLocale(),Ma.V3,Ba,ja),this._stripeElements=yield this.scriptLoader.getElements(n,{clientSecret:u,appearance:e});const{getBillingAddress:o,getConsignments:h}=this.paymentIntegrationService.getState(),p=h(),y=null===(t=null==p?void 0:p[0])||void 0===t?void 0:t.id,{email:g}=o()||{},v=g?{defaultValues:{mode:Pa.SHIPPING,email:g}}:{},f=this._stripeElements.getElement(za.AUTHENTICATION)||this._stripeElements.create(za.AUTHENTICATION,v);f.on(xa.CHANGE,e=>{if(!(\"authenticated\"in e))throw new ii(ti.MissingCustomer);this.paymentIntegrationService.updatePaymentProviderCustomer({stripeLinkAuthenticationState:e.authenticated}),e.complete?a(e.authenticated,e.value.email):a(!1,\"\"),d&&d(!1),void 0===m&&e.authenticated&&y&&this.paymentIntegrationService.deleteConsignment(y)}),f.mount(`#${i}`)}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())})}deinitialize(){var e,t;return null===(t=null===(e=this._stripeElements)||void 0===e?void 0:e.getElement(za.AUTHENTICATION))||void 0===t||t.unmount(),Promise.resolve()}signIn(e,t){return this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()}signOut(e){return this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}}const pd=Si(e=>new hd(e,new La(a())),[{id:\"stripeupe\"}]);var md=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class yd{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t,this.isMounted=!1}deinitialize(){var e;null===(e=this.checkoutEventsUnsubscribe)||void 0===e||e.call(this),this.isMounted=!1}initCheckoutEventsSubscription(e,t,n,i){this.checkoutEventsUnsubscribe=this.paymentIntegrationService.subscribe(()=>md(this,void 0,void 0,function*(){var r;const o=null==i?void 0:i.getElement(za.PAYMENT);if(o){try{yield this.updateStripePaymentIntent(e,t)}catch(e){return this.isMounted&&(o.unmount(),this.isMounted=!1),void(e instanceof Error&&(null===(r=n.onError)||void 0===r||r.call(n,e)))}this.isMounted||(yield null==i?void 0:i.fetchUpdates(),this.mountElement(o,n.containerId))}}),e=>{var t;return null===(t=e.getCheckout())||void 0===t?void 0:t.outstandingBalance},e=>{var t;return null===(t=e.getCheckout())||void 0===t?void 0:t.coupons})}mountElement(e,t){document.getElementById(t)&&(e.mount(`#${t}`),this.isMounted=!0)}mapAppearanceVariables(e){return{colorPrimary:e.fieldInnerShadow,colorBackground:e.fieldBackground,colorText:e.labelText,colorDanger:e.fieldErrorText,colorTextSecondary:e.labelText,colorTextPlaceholder:e.fieldPlaceholderText,colorIcon:e.fieldPlaceholderText}}mapInputAppearanceRules(e){return{borderColor:e.fieldBorder,color:e.fieldText,boxShadow:e.fieldInnerShadow}}throwStripeError(e){if(\"object\"==typeof(t=e)&&null!==t&&\"type\"in t&&(this.throwDisplayableStripeError(e),this.isCancellationError(e)))throw new Yi;var t;throw new eo}throwDisplayableStripeError(e){if(H([\"card_error\",\"invalid_request_error\",\"validation_error\"],e.type))throw new Error(e.message)}isCancellationError(e){var t;const n=null===(t=null==e?void 0:e.payment_intent.last_payment_error)||void 0===t?void 0:t.message;return!!n&&-1!==n.indexOf(\"canceled\")}throwPaymentConfirmationProceedMessage(){throw new eo(\"We've received your order and are processing your payment. Once the payment is verified, your order will be completed. We will send you an email when it's completed. Please note, this process may take a few minutes depending on the processing times of your chosen method.\")}isPaymentCompleted(e,t){return md(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getPaymentMethodOrThrow(e),{features:r}=n.getStoreConfigOrThrow().checkoutSettings;if(!i.clientToken||!t||!r[\"PI-626.Block_unnecessary_payment_confirmation_for_StripeUPE\"])return!1;const{paymentIntent:o}=yield t.retrievePaymentIntent(i.clientToken);return(null==o?void 0:o.status)===Na.SUCCEEDED})}mapStripePaymentData(e,t,n=!1){const i=this.paymentIntegrationService.getState().getBillingAddress(),{firstName:r=\"\",lastName:o=\"\",email:a=\"\"}=i||{},s=this.mapStripeAddress(i);if(!e)throw new ai(ni.PaymentNotInitialized);if(!(a&&s&&s.city&&s.country&&r&&o))throw new ii(ti.MissingBillingAddress);return{elements:e,redirect:Da.IF_REQUIRED,confirmParams:Object.assign({payment_method_data:Object.assign(Object.assign({},n?{allow_redisplay:\"always\"}:{}),{billing_details:{email:a,address:s,name:this.getShopperFullName(i)}})},t&&{return_url:t})}}isAdditionalActionError(e){return ve(e,{code:\"additional_action_required\"})}isRedirectAction(e){const{type:t,data:{redirect_url:n}}=e;return\"redirect_to_url\"===t&&!!n}isOnPageAdditionalAction(e){const{type:t,data:{token:n}}=e;return\"additional_action_requires_payment_method\"===t&&!!n}updateStripePaymentIntent(e,t){return md(this,void 0,void 0,function*(){const n=yield this.paymentIntegrationService.loadPaymentMethod(e,{params:{method:t}}),{clientToken:i}=n.getPaymentMethodOrThrow(t);i&&this.scriptLoader.updateStripeElements({clientSecret:i})})}getStripeJsVersion(e){return e.useNewStripeJsVersion?Ma.CLOVER:Ma.V3}mapStripeAddress(e){if(e){const{city:t,address1:n,address2:i,countryCode:r,postalCode:o,stateOrProvinceCode:a}=e;return Object.assign({city:t,country:r,postal_code:o,line1:n,line2:i},a?{state:a}:{})}throw new ii(ti.MissingBillingAddress)}getShopperFullName(e){const{firstName:t=\"\",lastName:n=\"\"}=e||{};return`${t} ${n}`.trim()}verifyCheckoutSpamProtection(){return md(this,void 0,void 0,function*(){const{shouldExecuteSpamCheck:e}=this.paymentIntegrationService.getState().getCheckoutOrThrow();e&&(yield this.paymentIntegrationService.verifyCheckoutSpamProtection())})}}const gd={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},vd={position:\"fixed\",\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},fd=\"embedded-checkout-loading-indicator-rotation\";class Sd{constructor(e){this.styles=Object.assign(Object.assign({},gd),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${fd} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(n=>{e.style.setProperty(n,t[n])})}defineAnimation(){var e;if(document.getElementById(fd))return;const t=document.createElement(\"style\");t.id=fd,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${fd} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}class _d{constructor(e){this._decimalPlaces=e}toInteger(e){return Math.round(e*Math.pow(10,this._decimalPlaces))}}const wd=[\"AC\",\"AD\",\"AE\",\"AF\",\"AG\",\"AI\",\"AL\",\"AM\",\"AO\",\"AQ\",\"AR\",\"AT\",\"AU\",\"AW\",\"AX\",\"AZ\",\"BA\",\"BB\",\"BD\",\"BE\",\"BF\",\"BG\",\"BH\",\"BI\",\"BJ\",\"BL\",\"BM\",\"BN\",\"BO\",\"BQ\",\"BR\",\"BS\",\"BT\",\"BV\",\"BW\",\"BY\",\"BZ\",\"CA\",\"CD\",\"CF\",\"CG\",\"CH\",\"CI\",\"CK\",\"CL\",\"CM\",\"CN\",\"CO\",\"CR\",\"CV\",\"CW\",\"CY\",\"CZ\",\"DE\",\"DJ\",\"DK\",\"DM\",\"DO\",\"DZ\",\"EC\",\"EE\",\"EG\",\"EH\",\"ER\",\"ES\",\"ET\",\"FI\",\"FJ\",\"FK\",\"FO\",\"FR\",\"GA\",\"GB\",\"GD\",\"GE\",\"GF\",\"GG\",\"GH\",\"GI\",\"GL\",\"GM\",\"GN\",\"GP\",\"GQ\",\"GR\",\"GS\",\"GT\",\"GU\",\"GW\",\"GY\",\"HK\",\"HN\",\"HR\",\"HT\",\"HU\",\"ID\",\"IE\",\"IL\",\"IM\",\"IN\",\"IO\",\"IQ\",\"IS\",\"IT\",\"JE\",\"JM\",\"JO\",\"JP\",\"KE\",\"KG\",\"KH\",\"KI\",\"KM\",\"KN\",\"KR\",\"KW\",\"KY\",\"KZ\",\"LA\",\"LB\",\"LC\",\"LI\",\"LK\",\"LR\",\"LS\",\"LT\",\"LU\",\"LV\",\"LY\",\"MA\",\"MC\",\"MD\",\"ME\",\"MF\",\"MG\",\"MK\",\"ML\",\"MM\",\"MN\",\"MO\",\"MQ\",\"MR\",\"MS\",\"MT\",\"MU\",\"MV\",\"MW\",\"MX\",\"MY\",\"MZ\",\"NA\",\"NC\",\"NE\",\"NG\",\"NI\",\"NL\",\"NO\",\"NP\",\"NR\",\"NU\",\"NZ\",\"OM\",\"PA\",\"PE\",\"PF\",\"PG\",\"PH\",\"PK\",\"PL\",\"PM\",\"PN\",\"PR\",\"PS\",\"PT\",\"PY\",\"QA\",\"RE\",\"RO\",\"RS\",\"RU\",\"RW\",\"SA\",\"SB\",\"SC\",\"SD\",\"SE\",\"SG\",\"SH\",\"SI\",\"SJ\",\"SK\",\"SL\",\"SM\",\"SN\",\"SO\",\"SR\",\"SS\",\"ST\",\"SV\",\"SX\",\"SZ\",\"TA\",\"TC\",\"TD\",\"TF\",\"TG\",\"TH\",\"TJ\",\"TK\",\"TL\",\"TM\",\"TN\",\"TO\",\"TR\",\"TT\",\"TV\",\"TW\",\"TZ\",\"UA\",\"UG\",\"US\",\"UY\",\"UZ\",\"VA\",\"VC\",\"VE\",\"VG\",\"VN\",\"VU\",\"WF\",\"WS\",\"XK\",\"YE\",\"YT\",\"ZA\",\"ZM\",\"ZW\",\"ZZ\"];var Id=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Cd{constructor(e,t,n,i){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=n,this.loadingIndicator=i}initialize(e){return Id(this,void 0,void 0,function*(){const{stripeocs:t}=e||{};if(!t)throw new _i('Unable to proceed because \"options\" argument is not provided.');const{gatewayId:n,container:i}=t;if(!i||!n)throw new ai(ni.PaymentNotInitialized);const r=this._getMethodId(n),o=yield this.paymentIntegrationService.loadPaymentMethod(n,{params:{method:r}}),a=o.getPaymentMethodOrThrow(r,n),{loadingContainerId:s,buttonHeight:d,onComplete:c}=t;if(this._loadingIndicatorContainer=s,this._onComplete=c,!ld(a))throw new ii(ti.MissingPaymentMethod);const{initializationData:l}=a,{captureMethod:u}=l,h=this.stripeIntegrationService.getStripeJsVersion(l);this._captureMethod=u,this._stripeClient=yield this.scriptLoader.getStripeClient(l,o.getCartLocale(),h),yield this._mountExpressCheckoutElement(i,this._stripeClient,d),this._initializeEvents(r)})}signIn(){return Promise.resolve()}signOut(){return Promise.resolve()}executePaymentMethodCheckout(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_mountExpressCheckoutElement(e,t,n=40){return Id(this,void 0,void 0,function*(){const i=this._shouldRequireShippingAddress(),r=Object.assign(Object.assign(Object.assign({shippingAddressRequired:i},i?{allowedShippingCountries:yield this._getAvailableCountries()}:{}),i?{shippingRates:[{id:\"_\",amount:0,displayName:\"Pending rates\"}]}:{}),{billingAddressRequired:!0,emailRequired:!0,phoneNumberRequired:!0,paymentMethods:{link:Da.AUTO,applePay:Da.NEVER,googlePay:Da.NEVER,amazonPay:Da.NEVER,paypal:Da.NEVER,klarna:Da.NEVER},buttonHeight:n}),{cartAmount:o}=this.paymentIntegrationService.getState().getCartOrThrow(),a=Object.assign({mode:\"payment\",amount:this._toCents(o),currency:this._getCurrency()},this._captureMethod?{captureMethod:this._captureMethod}:{});return this._stripeElements=t.elements(a),this._linkV2Element=this._stripeElements.create(za.EXPRESS_CHECKOUT,r),this._linkV2Element.mount(`#${e}`),this._linkV2Element})}_initializeEvents(e){this._linkV2Element&&(this._shouldRequireShippingAddress()&&(this._linkV2Element.on(xa.SHIPPING_ADDRESS_CHANGE,e=>Id(this,void 0,void 0,function*(){return this._onShippingAddressChange(e)})),this._linkV2Element.on(xa.SHIPPING_RATE_CHANGE,e=>Id(this,void 0,void 0,function*(){return this._onShippingRateChange(e)}))),this._linkV2Element.on(xa.CONFIRM,t=>Id(this,void 0,void 0,function*(){return this._onConfirm(t,e)})),this._linkV2Element.on(xa.CANCEL,this._onCancel))}_onShippingAddressChange(e){return Id(this,void 0,void 0,function*(){if(!(\"address\"in e))return;const t=e.address,n={firstName:\"\",lastName:\"\",phone:\"\",company:\"\",address1:\"\",address2:\"\",city:(null==t?void 0:t.city)||\"\",countryCode:(null==t?void 0:t.country)||\"\",postalCode:(null==t?void 0:t.postal_code)||\"\",stateOrProvince:(null==t?void 0:t.state)||\"\",stateOrProvinceCode:(null==t?void 0:t.state)||\"\",customFields:[]};yield this.paymentIntegrationService.updateShippingAddress(n);const i=yield this._getAvailableShippingOptions();yield this._updateDisplayedPrice(),(null==i?void 0:i.length)?e.resolve({shippingRates:i}):e.reject()})}_onCancel(){throw new Yi}_onShippingRateChange(e){return Id(this,void 0,void 0,function*(){if(\"shippingRate\"in e){const{shippingRate:t}=e;yield this._handleShippingOptionChange(null==t?void 0:t.id),yield this._updateDisplayedPrice(),e.resolve({})}})}_onConfirm(e,t){return Id(this,void 0,void 0,function*(){if(\"billingDetails\"in e&&\"shippingAddress\"in e&&this._stripeClient&&this._stripeElements){yield this.stripeIntegrationService.verifyCheckoutSpamProtection(),yield this._updateShippingAndBillingAddress(e),yield this.paymentIntegrationService.submitOrder();const n=this._getPaymentPayload(t);try{yield this.paymentIntegrationService.submitPayment(n)}catch(e){yield this._processAdditionalAction(e,t)}}return Promise.resolve()})}_updateShippingAndBillingAddress(e){var t,n,i,r,o,a,s,d;return Id(this,void 0,void 0,function*(){const c=this._shouldRequireShippingAddress(),l=(null===(n=null===(t=e.shippingAddress)||void 0===t?void 0:t.name)||void 0===n?void 0:n.split(\" \")[0])||(null===(r=null===(i=e.billingDetails)||void 0===i?void 0:i.name)||void 0===r?void 0:r.split(\" \")[0])||\"\",u=(null===(a=null===(o=e.shippingAddress)||void 0===o?void 0:o.name)||void 0===a?void 0:a.split(\" \")[1])||(null===(d=null===(s=e.billingDetails)||void 0===s?void 0:s.name)||void 0===d?void 0:d.split(\" \")[1])||\"\";if(c){const t=this._mapShippingAddress(e.shippingAddress,e.billingDetails,l,u);yield this.paymentIntegrationService.updateShippingAddress(t)}const h=this._mapBillingAddress(e.shippingAddress,e.billingDetails,l,u);yield this.paymentIntegrationService.updateBillingAddress(h)})}_mapShippingAddress(e,t,n,i){var r,o,a,s,d,c,l;return{firstName:n,lastName:i,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==e?void 0:e.address)||void 0===r?void 0:r.line1)||\"\",address2:(null===(o=null==e?void 0:e.address)||void 0===o?void 0:o.line2)||\"\",city:(null===(a=null==e?void 0:e.address)||void 0===a?void 0:a.city)||\"\",countryCode:(null===(s=null==e?void 0:e.address)||void 0===s?void 0:s.country)||\"\",postalCode:(null===(d=null==e?void 0:e.address)||void 0===d?void 0:d.postal_code)||\"\",stateOrProvince:(null===(c=null==e?void 0:e.address)||void 0===c?void 0:c.state)||\"\",stateOrProvinceCode:(null===(l=null==e?void 0:e.address)||void 0===l?void 0:l.state)||\"\",customFields:[]}}_mapBillingAddress(e,t,n,i){var r,o,a,s,d,c;return{email:(null==t?void 0:t.email)||\"\",firstName:n,lastName:i,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==t?void 0:t.address)||void 0===r?void 0:r.line1)||\"\",address2:\"\",city:(null===(o=null==t?void 0:t.address)||void 0===o?void 0:o.city)||\"\",countryCode:(null===(a=null==t?void 0:t.address)||void 0===a?void 0:a.country)||\"\",postalCode:(null===(s=null==t?void 0:t.address)||void 0===s?void 0:s.postal_code)||\"\",stateOrProvince:(null===(d=null==t?void 0:t.address)||void 0===d?void 0:d.state)||\"\",stateOrProvinceCode:(null===(c=null==e?void 0:e.address)||void 0===c?void 0:c.state)||\"\",customFields:[]}}_processAdditionalAction(e,t){return Id(this,void 0,void 0,function*(){if(!ya(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this._stripeClient||!this._stripeElements)throw new ai(ni.PaymentNotInitialized);const{data:n}=e.body.additional_action_required,{token:i}=n,{paymentIntent:r}=yield this._confirmStripePaymentOrThrow(n,t),o=this._getPaymentPayload(t,(null==r?void 0:r.id)||i);try{this._toggleLoadingIndicator(!0),yield this.paymentIntegrationService.submitPayment(o),yield this._completeCheckoutFlow()}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}finally{this._toggleLoadingIndicator(!1)}})}_confirmStripePaymentOrThrow(e,t){var n,i,r;return Id(this,void 0,void 0,function*(){const{token:o,redirect_url:a}=e,s=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,a);let d;try{const e=(yield this.stripeIntegrationService.isPaymentCompleted(t,this._stripeClient))?yield null===(r=this._stripeClient)||void 0===r?void 0:r.retrievePaymentIntent(o||\"\"):yield null===(n=this._stripeClient)||void 0===n?void 0:n.confirmPayment({elements:s.elements,clientSecret:o,redirect:Da.IF_REQUIRED,confirmParams:{return_url:null===(i=s.confirmParams)||void 0===i?void 0:i.return_url}});if(d=null==e?void 0:e.error,d||!(null==e?void 0:e.paymentIntent))throw new eo;return e}catch(e){return this.stripeIntegrationService.throwStripeError(d)}})}_completeCheckoutFlow(){return Id(this,void 0,void 0,function*(){return\"function\"==typeof this._onComplete?this._onComplete():(window.location.replace(\"/order-confirmation\"),Promise.resolve())})}_getPaymentPayload(e,t){var n;const i=(null===(n=this.paymentIntegrationService.getState().getCart())||void 0===n?void 0:n.id)||\"\";return{methodId:e,paymentData:{formattedPayload:Object.assign(Object.assign({cart_id:i},t?{credit_card_token:{token:t}}:{}),{confirm:!1,method:ka.Link})}}}_shouldRequireShippingAddress(){const{getCartOrThrow:e}=this.paymentIntegrationService.getState(),{lineItems:t}=e();return!!t.physicalItems.length}_updateDisplayedPrice(){return Id(this,void 0,void 0,function*(){this._stripeElements&&this._stripeElements.update({currency:this._getCurrency(),mode:\"payment\",amount:yield this._getTotalPrice()})})}_getCurrency(){if(!this._currencyCode){const{code:e}=this.paymentIntegrationService.getState().getCartOrThrow().currency;this._currencyCode=e.toLowerCase()}return this._currencyCode}_getTotalPrice(){return Id(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const{getCheckoutOrThrow:e,getCartOrThrow:t}=this.paymentIntegrationService.getState(),{decimalPlaces:n}=t().currency,i=ge(e().outstandingBalance,n).toFixed(n);return this._toCents(+i)})}_getAvailableCountries(){var e;return Id(this,void 0,void 0,function*(){const t=yield this.paymentIntegrationService.loadShippingCountries();return((null===(e=t.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code))||[]).filter(e=>wd.includes(e))})}_getAvailableShippingOptions(){var e,t,n;return Id(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState().getConsignments();if(!(null==i?void 0:i[0]))return;const r=i[0],o=(r.availableShippingOptions||[]).map(this._getStripeShippingOption.bind(this)),a=null===(e=r.availableShippingOptions)||void 0===e?void 0:e.find(e=>e.isRecommended),s=null===(t=r.selectedShippingOption)||void 0===t?void 0:t.id,d=null==a?void 0:a.id;return s?o.sort(e=>e.id===s?-1:0):d?(o.sort(e=>e.id===d?-1:0),yield this._handleShippingOptionChange(d)):yield this._handleShippingOptionChange(null===(n=o[0])||void 0===n?void 0:n.id),o.slice(0,9)})}_getStripeShippingOption({id:e,cost:t,description:n}){return{id:e,displayName:n,amount:this._toCents(t)}}_handleShippingOptionChange(e){return Id(this,void 0,void 0,function*(){if(e&&\"shipping_option_unselected\"!==e)return this.paymentIntegrationService.selectShippingOption(e)})}_getAmountTransformer(){if(this._amountTransformer)return this._amountTransformer;const{getCart:e}=this.paymentIntegrationService.getState(),{currency:t}=e()||{};return t?new _d(t.decimalPlaces):void 0}_toCents(e){const t=Math.round(100*e),n=this._getAmountTransformer();return n?n.toInteger(e):t}_toggleLoadingIndicator(e){e&&this._loadingIndicatorContainer?this.loadingIndicator.show(this._loadingIndicatorContainer):this.loadingIndicator.hide()}_getMethodId(e){const{initializationData:{checkoutSessionEnabled:t}={}}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e);return t?ka.CHECKOUT_SESSION:ka.OCS}}const bd=Si(e=>{const t=new La(a()),n=new Sd({containerStyles:vd});return new Cd(e,t,new yd(e,t),n)},[{id:\"stripeocs\"}]);class Pd extends ei{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class Od{constructor(e){this._paymentIntegrationService=e}execute(e,t){return n=this,i=void 0,o=function*(){yield this._paymentIntegrationService.submitOrder(le(e,\"payment\"),t)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new Pd)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const Ed=Si(e=>new Od(e),[{id:\"nopaymentdatarequired\"}]);var Ad,Td,kd,Dd,Md,zd,Nd;class xd{constructor(e,t,n=window){this._scriptLoader=e,this._stylesheetLoader=t,this._window=n}load(e){var t,n,i,r,o,a;return i=this,r=void 0,a=function*(){if(yield Promise.all([this._stylesheetLoader.loadStylesheet(`https://checkoutshopper-${null!==(t=e.environment)&&void 0!==t?t:\"\"}.adyen.com/checkoutshopper/sdk/3.10.1/adyen.css`,{prepend:!1,attributes:{integrity:\"sha384-8ofgICZZ/k5cC5N7xegqFZOA73H9RQ7H13439JfAZW8Gj3qjuKL2isaTD3GMIhDE\",crossorigin:\"anonymous\"}}),this._scriptLoader.loadScript(`https://checkoutshopper-${null!==(n=e.environment)&&void 0!==n?n:\"\"}.adyen.com/checkoutshopper/sdk/3.10.1/adyen.js`,{async:!0,attributes:{integrity:\"sha384-wG2z9zSQo61EIvyXmiFCo+zB3y0ZB4hsrXVcANmpP8HLthjoQJQPBh7tZKJSV8jA\",crossorigin:\"anonymous\"}})]),!this._window.AdyenCheckout)throw new gi;return new this._window.AdyenCheckout(e)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}d((a=a.apply(i,r||[])).next())})}}function Rd(e){return\"object\"==typeof e&&\"string\"==typeof e.data.paymentMethod.encryptedSecurityCode||\"string\"==typeof e.data.paymentMethod.encryptedExpiryMonth}function Fd(e){return Boolean(e.instrumentId)}!function(e){e.ThreeDS2Fingerprint=\"threeDS2Fingerprint\",e.ThreeDS2=\"threeDS2\",e.Redirect=\"redirect\",e.QRCode=\"qrCode\",e.Voucher=\"voucher\",e.Sdk=\"sdk\"}(Ad||(Ad={})),function(e){e.ThreeDS2Fingerprint=\"threeDS2Fingerprint\",e.ThreeDS2Challenge=\"threeDS2Challenge\",e.Redirect=\"redirect\",e.QRCode=\"qrCode\",e.Voucher=\"voucher\"}(Td||(Td={})),function(e){e.SecuredFields=\"securedfields\"}(kd||(kd={})),function(e){e.ACH=\"ach\",e.AliPay=\"alipay\",e.Bancontact=\"bcmc\",e.CreditCard=\"scheme\",e.Klarna=\"klarna\",e.KlarnaPayNow=\"klarna_paynow\",e.KlarnaAccount=\"klarna_account\",e.IDEAL=\"ideal\",e.GiroPay=\"giropay\",e.GooglePay=\"paywithgoogle\",e.SEPA=\"sepadirectdebit\",e.Sofort=\"directEbanking\",e.Vipps=\"vipps\",e.WeChatPayQR=\"wechatpayQR\"}(Dd||(Dd={})),function(e){e.POST=\"POST\"}(Md||(Md={})),function(e){e.ChallengeShopper=\"ChallengeShopper\",e.Error=\"Error\",e.IdentifyShopper=\"IdentifyShopper\"}(zd||(zd={})),function(e){e.CardNumber=\"encryptedCardNumber\",e.SecurityCode=\"encryptedSecurityCode\",e.ExpiryDate=\"encryptedExpiryDate\"}(Nd||(Nd={}));var Ld=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Bd{constructor(e,t){this._paymentIntegrationService=e,this._scriptLoader=t}initialize(e){return Ld(this,void 0,void 0,function*(){const{adyenv2:t}=e;if(!t)throw new _i('Unable to initialize payment because \"options.adyenv2\" argument is not provided.');this._paymentInitializeOptions=t;const n=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId),{originKey:i,clientKey:r,environment:o,paymentMethodsResponse:a}=n.initializationData||{},s={key:\"\",value:\"\"};return i?(s.key=\"originKey\",s.value=i):(s.key=\"clientKey\",s.value=r||\"\"),this._adyenClient=yield this._scriptLoader.load({environment:o,locale:this._paymentIntegrationService.getState().getLocale(),[s.key]:s.value,paymentMethodsResponse:a,translations:{es:{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-AR\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-ES\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-MX\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CL\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CO\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-PE\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"}}}),this._paymentComponent=yield this._mountPaymentComponent(n),n.method!==Dd.CreditCard&&n.method!==Dd.Bancontact||(this._cardVerificationComponent=yield this._mountCardVerificationComponent()),Promise.resolve()})}execute(e,t){return Ld(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=n&&n.paymentData,o=r&&r.shouldSaveInstrument,a=r&&r.shouldSetAsDefaultInstrument;if(!n)return Promise.reject(new uo([\"payment\"]));this._validateCardData(),yield this._paymentIntegrationService.submitOrder(i,t);const s=this._componentState;if(!s)throw new ai(ni.PaymentNotInitialized);if(r&&Fd(r)){let e={};if(Rd(s)){const{encryptedCardNumber:t,encryptedSecurityCode:n,encryptedExpiryMonth:i,encryptedExpiryYear:r}=s.data.paymentMethod;e={credit_card_number_confirmation:t,expiry_month:i,expiry_year:r,verification_value:n}}if(Rd(s)||-1!==[\"ideal\",\"sepadirectdebit\",\"directEbanking\",\"giropay\"].indexOf(s.data.paymentMethod.type))try{return void(yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:{formattedPayload:{bigpay_token:Object.assign(Object.assign({},e),{token:r.instrumentId}),origin:window.location.origin,browser_info:cs(),set_as_default_stored_instrument:a||null}}})))}catch(e){return void(yield this._processAdditionalAction(e,o,a))}}try{yield this._paymentIntegrationService.submitPayment({methodId:n.methodId,paymentData:{formattedPayload:{credit_card_token:{token:JSON.stringify(Object.assign(Object.assign({},s.data.paymentMethod),{origin:window.location.origin}))},browser_info:cs(),vault_payment_instrument:o||null,set_as_default_stored_instrument:a||null}}})}catch(e){yield this._processAdditionalAction(e,o,a)}})}finalize(){return Promise.reject(new Pd)}deinitialize(){return this._componentState=void 0,this._paymentComponent&&(this._paymentComponent.unmount(),this._paymentComponent=void 0),this._cardVerificationComponent&&(this._cardVerificationComponent.unmount(),this._cardVerificationComponent=void 0),Promise.resolve()}_getAdyenClient(){if(!this._adyenClient)throw new ai(ni.PaymentNotInitialized);return this._adyenClient}_getPaymentInitializeOptions(){if(!this._paymentInitializeOptions)throw new _i('\"options.adyenv2\" argument was not provided during initialization.');return this._paymentInitializeOptions}_getThreeDS2ChallengeWidgetSize(){const{additionalActionOptions:e,threeDS2Options:t}=this._getPaymentInitializeOptions();return e.widgetSize||(null==t?void 0:t.widgetSize)||\"05\"}_handleAction(e){return new Promise((t,n)=>{const{threeDS2ContainerId:i,additionalActionOptions:r}=this._getPaymentInitializeOptions(),{onBeforeLoad:o,containerId:a,onLoad:s,onComplete:d}=r,c=JSON.parse(e.action),l=this._getAdyenClient().createFromAction(c,{onAdditionalDetails:e=>{const n={methodId:c.paymentMethodType,paymentData:{nonce:JSON.stringify(e.data)}};d&&d(),t(n)},size:this._getThreeDS2ChallengeWidgetSize(),onError:e=>n(e)});o&&o(c.type===Td.ThreeDS2Challenge||c.type===Td.QRCode),l.mount(`#${a||i}`),s&&s(()=>{n(new Yi),l.unmount()})})}_mapAdyenPlaceholderData(e,t){if(!e)return{};const{firstName:n,lastName:i,address1:r,address2:o,postalCode:a,city:s,stateOrProvinceCode:d,countryCode:c}=e;return{holderName:t?`${n} ${i}`:\"\",billingAddress:{street:r,houseNumberOrName:o,postalCode:a,city:s,stateOrProvince:d,country:c}}}_mountCardVerificationComponent(){const e=this._getPaymentInitializeOptions(),t=this._getAdyenClient();let n;return new Promise((i,r)=>{var o,a,s;if(e.cardVerificationContainerId){n=t.create(kd.SecuredFields,Object.assign(Object.assign({},e.options),{styles:Object.assign(Object.assign({},null===(o=e.options)||void 0===o?void 0:o.styles),{placeholder:Object.assign({color:\"transparent\",caretColor:\"#000\"},null===(s=null===(a=e.options)||void 0===a?void 0:a.styles)||void 0===s?void 0:s.placeholder)}),onChange:e=>this._updateComponentState(e),onError:t=>e.validateCardFields(t),onFieldValid:t=>e.validateCardFields(t)}));try{n.mount(`#${e.cardVerificationContainerId}`)}catch(e){r(new ai(ni.PaymentNotInitialized))}}i(n)})}_mountPaymentComponent(e){let t;const n=this._getPaymentInitializeOptions(),i=this._getAdyenClient();return new Promise((r,o)=>{switch(e.method){case Dd.CreditCard:case Dd.ACH:case Dd.Bancontact:{const r=this._paymentIntegrationService.getState().getBillingAddress(),{prefillCardHolderName:a}=e.initializationData;t=i.create(e.method,Object.assign(Object.assign({},n.options),{onChange:e=>this._updateComponentState(e),data:this._mapAdyenPlaceholderData(r,a)}));try{t.mount(`#${n.containerId}`)}catch(e){o(new ai(ni.PaymentNotInitialized))}break}case Dd.IDEAL:case Dd.SEPA:if(n.hasVaultedInstruments)this._updateComponentState({data:{paymentMethod:{type:e.method}}});else{t=i.create(e.method,Object.assign(Object.assign({},n.options),{onChange:e=>this._updateComponentState(e)}));try{t.mount(`#${n.containerId}`)}catch(e){o(new ai(ni.PaymentNotInitialized))}}break;case Dd.AliPay:case Dd.GiroPay:case Dd.Sofort:case Dd.Klarna:case Dd.KlarnaPayNow:case Dd.KlarnaAccount:case Dd.Vipps:case Dd.WeChatPayQR:this._updateComponentState({data:{paymentMethod:{type:e.method}}})}r(t)})}_processAdditionalAction(e,t,n){return Ld(this,void 0,void 0,function*(){if(!ya(e)||!ve(e.body.errors,{code:\"additional_action_required\"}))throw e;const i=yield this._handleAction(e.body.provider_data);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},i),{paymentData:Object.assign(Object.assign({},i.paymentData),{shouldSaveInstrument:t,shouldSetAsDefaultInstrument:n})}))}catch(e){return this._processAdditionalAction(e,t,n)}})}_updateComponentState(e){this._componentState=e}_validateCardData(){var e,t;const n=this._getPaymentInitializeOptions().hasVaultedInstruments?this._cardVerificationComponent:this._paymentComponent;if((null===(e=null==n?void 0:n.componentRef)||void 0===e?void 0:e.showValidation)&&n.state&&(n.componentRef.showValidation(),0===Object.keys(n.state).length||!n.state.isValid&&!n.state.issuer||\"sepadirectdebit\"===(null===(t=n.props)||void 0===t?void 0:t.type)&&n.state.data&&Object.values(n.state.data).some(e=>0===e.toString().trim().length)))throw new ho(this._mapCardErrors(n.state.errors))}_mapCardErrors(e={}){const t={};return Object.keys(e).forEach(n=>{t[n]=[{message:e[n],type:n}]}),t}}const jd=Si(e=>new Bd(e,new xd(a(),s())),[{gateway:\"adyenv2\"}]);class Ud{constructor(e,t,n=window){this._scriptLoader=e,this._stylesheetLoader=t,this._window=n}load(e){var t,n,i,r,o,a;return i=this,r=void 0,a=function*(){if(yield Promise.all([this._stylesheetLoader.loadStylesheet(`https://checkoutshopper-${null!==(t=e.environment)&&void 0!==t?t:\"\"}.adyen.com/checkoutshopper/sdk/5.71.1/adyen.css`,{prepend:!1,attributes:{integrity:\"sha384-5MvB4RnzvviA3VBT4KYABZ4HXNZG5LRqREEgd41xt/pf/QvKmsj2O9GuNuywRXx9\",crossorigin:\"anonymous\"}}),this._scriptLoader.loadScript(`https://checkoutshopper-${null!==(n=e.environment)&&void 0!==n?n:\"\"}.adyen.com/checkoutshopper/sdk/5.71.1/adyen.js`,{async:!0,attributes:{integrity:\"sha384-yvY2yFNR4WqIjPqP9MzjI+gJimmaJnAvj4rLHKvgJbgFD5fMuf8zIJrFJOW8Lhhf\",crossorigin:\"anonymous\"}})]),!this._window.AdyenCheckout)throw new gi;return yield this._window.AdyenCheckout(e)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}d((a=a.apply(i,r||[])).next())})}}function qd(e){return!(\"object\"!=typeof e||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument)}var Vd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Gd{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t}initialize(e){return Vd(this,void 0,void 0,function*(){const{adyenv3:t}=e;if(!t)throw new _i('Unable to initialize payment because \"options.adyenv3\" argument is not provided.');this.paymentInitializeOptions=t;const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId),{environment:i,clientKey:r,paymentMethodsResponse:o,installmentOptions:a}=n.initializationData||{};return this.adyenClient=yield this.scriptLoader.load({paymentMethodsConfiguration:Object.assign({klarna:{useKlarnaWidget:!0},klarna_account:{useKlarnaWidget:!0},klarna_paynow:{useKlarnaWidget:!0}},a?{card:{installmentOptions:Object.assign({showInstallmentAmounts:!0},a)}}:{}),environment:i,locale:this._getLocale(),clientKey:r,paymentMethodsResponse:o,showPayButton:!1,translations:{es:{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-AR\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-ES\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-MX\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CL\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CO\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-PE\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"}}}),this.paymentComponent=yield this._mountPaymentComponent(n),n.method!==Dd.CreditCard&&n.method!==Dd.Bancontact||(this.cardVerificationComponent=yield this._mountCardVerificationComponent()),Promise.resolve()})}execute(e,t){var n;return Vd(this,void 0,void 0,function*(){const{payment:i}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!i)throw new uo([\"payment\"]);const o=i.paymentData,{shouldSaveInstrument:a,shouldSetAsDefaultInstrument:s}=qd(o)?o:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1};this._validateCardData(),\"klarna\"!==i.methodId&&\"klarna_account\"!==i.methodId&&\"klarna_paynow\"!==i.methodId||null===(n=this.paymentComponent)||void 0===n||n.submit(),yield this.paymentIntegrationService.submitOrder(r,t);const d=this.componentState||{data:{paymentMethod:{type:i.methodId}}};if(o&&Fd(o)){let e={};if(Rd(d)){const{encryptedCardNumber:t,encryptedSecurityCode:n,encryptedExpiryMonth:i,encryptedExpiryYear:r}=d.data.paymentMethod;e={credit_card_number_confirmation:t,expiry_month:i,expiry_year:r,verification_value:n}}try{return void(yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},i),{paymentData:{formattedPayload:{bigpay_token:Object.assign(Object.assign({},e),{token:o.instrumentId}),origin:window.location.origin,browser_info:cs(),set_as_default_stored_instrument:s||null}}})))}catch(t){return void(yield this._processAdditionalAction(t,a,s,o.instrumentId,e))}}let c=JSON.stringify(Object.assign(Object.assign({},d.data.paymentMethod),{type:i.methodId,origin:window.location.origin}));\"boletobancario\"===i.methodId&&function(e){var t,n;return\"string\"===(\"object\"==typeof e&&typeof e.data.socialSecurityNumber)&&\"string\"==typeof(null===(t=e.data.shopperName)||void 0===t?void 0:t.firstName)&&\"string\"==typeof(null===(n=e.data.shopperName)||void 0===n?void 0:n.lastName)}(d)&&(c=JSON.stringify(Object.assign(Object.assign({socialSecurityNumber:d.data.socialSecurityNumber},d.data.shopperName),{type:i.methodId,origin:window.location.origin})));try{yield this.paymentIntegrationService.submitPayment({methodId:i.methodId,paymentData:{formattedPayload:Object.assign(Object.assign({credit_card_token:{token:c}},Rd(d)&&d.data.installments?{installments:{value:d.data.installments.value,plan:d.data.installments.plan||\"regular\"}}:{}),{browser_info:cs(),vault_payment_instrument:a||null,set_as_default_stored_instrument:s||null})}})}catch(e){yield this._processAdditionalAction(e,a,s)}})}finalize(){return Promise.reject(new Pd)}deinitialize(){return this.componentState=void 0,this.paymentComponent&&(this.paymentComponent.unmount(),this.paymentComponent=void 0),this.cardVerificationComponent&&(this.cardVerificationComponent.unmount(),this.cardVerificationComponent=void 0),Promise.resolve()}_updateComponentState(e){this.componentState=e}_getLocale(){const e=this.paymentIntegrationService.getState().getLocale();return e&&\"es\"===e.substring(0,2)?\"es\":e}_getAdyenClient(){if(!this.adyenClient)throw new ai(ni.PaymentNotInitialized);return this.adyenClient}_getPaymentInitializeOptions(){if(!this.paymentInitializeOptions)throw new _i('\"options.adyenv3\" argument was not provided during initialization.');return this.paymentInitializeOptions}_handleAction(e){return new Promise((t,n)=>{const{additionalActionOptions:i}=this._getPaymentInitializeOptions(),{onBeforeLoad:r,containerId:o,onLoad:a,onComplete:s,widgetSize:d,onActionHandled:c}=i,l=JSON.parse(e.action),u=this._getAdyenClient().createFromAction(l,{onActionHandled:e=>{c&&\"function\"==typeof c&&\"3DS2Fingerprint\"!==e.componentType&&c()},onAdditionalDetails:e=>{const n={methodId:l.paymentMethodType,paymentData:{nonce:JSON.stringify(e.data)}};s&&\"function\"==typeof s&&s(),t(n)},challengeWindowSize:d||\"05\",onError:e=>n(e)});r&&\"function\"==typeof r&&r(l.type===Ad.ThreeDS2||l.type===Ad.QRCode||l.type===Ad.Sdk),this._mountElement(u,o).then(()=>{a&&\"function\"==typeof a&&a(()=>{n(new Yi),u.unmount()})}).catch(n)})}_mapAdyenPlaceholderData(e,t){if(!e)return{};const{firstName:n,lastName:i,address1:r,address2:o,postalCode:a,city:s,stateOrProvinceCode:d,countryCode:c}=e;return{holderName:t?`${n} ${i}`:\"\",firstName:t?n:\"\",lastName:t?i:\"\",billingAddress:{street:r,houseNumberOrName:o,postalCode:a,city:s,stateOrProvince:d,country:c}}}_mountCardVerificationComponent(){var e,t,n;return Vd(this,void 0,void 0,function*(){const i=this._getPaymentInitializeOptions(),r=this._getAdyenClient();if(!i.cardVerificationContainerId)return;const o=r.create(kd.SecuredFields,Object.assign(Object.assign({},i.options),{styles:Object.assign(Object.assign({},null===(e=i.options)||void 0===e?void 0:e.styles),{placeholder:Object.assign({color:\"transparent\",caretColor:\"#000\"},null===(n=null===(t=i.options)||void 0===t?void 0:t.styles)||void 0===n?void 0:n.placeholder)}),onChange:e=>this._updateComponentState(e),onError:e=>i.validateCardFields(e),onFieldValid:e=>i.validateCardFields(e)}));try{yield this._mountElement(o,i.cardVerificationContainerId)}catch(e){throw new ai(ni.PaymentNotInitialized)}return o})}_mountPaymentComponent(e){return Vd(this,void 0,void 0,function*(){const t=this._getPaymentInitializeOptions(),n=this._getAdyenClient(),i=this.paymentIntegrationService.getState().getBillingAddress(),{prefillCardHolderName:r}=e.initializationData,o=n.create(e.method,Object.assign(Object.assign(Object.assign(Object.assign({},this._isOneyPaymentMethod(e.method)?{visibility:{personalDetails:\"hidden\",billingAddress:\"hidden\",deliveryAddress:\"hidden\"}}:{}),t.options),{showBrandsUnderCardNumber:!1,billingAddressRequired:!1,showEmailAddress:!1,onChange:e=>this._updateComponentState(e),onSubmit:e=>this._updateComponentState(e)}),i?{data:this._mapAdyenPlaceholderData(i,r)}:{}));try{yield this._mountElement(o,t.containerId)}catch(e){throw new ai(ni.PaymentNotInitialized)}return o})}_isOneyPaymentMethod(e){return e.startsWith(\"facilypay\")}_processAdditionalAction(e,t,n,i,r){return Vd(this,void 0,void 0,function*(){if(!ya(e)||!ve(e.body.errors,{code:\"additional_action_required\"}))throw e;const o=yield this._handleAction(e.body.provider_data);try{const e=Object.assign(Object.assign({},o.paymentData),{shouldSaveInstrument:t,shouldSetAsDefaultInstrument:n}),a=n&&!t?{instrumentId:i,formattedPayload:{bigpay_token:Object.assign(Object.assign({},r),{token:i})}}:{};yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},o),{paymentData:Object.assign(Object.assign({},e),a)}))}catch(e){return this._processAdditionalAction(e,t,n,i,r)}})}_validateCardData(){var e;const t=this._getPaymentInitializeOptions().hasVaultedInstruments?this.cardVerificationComponent:this.paymentComponent;if((null===(e=null==t?void 0:t.componentRef)||void 0===e?void 0:e.showValidation)&&t.state&&(t.componentRef.showValidation(),0===Object.keys(t.state).length||!t.state.isValid))throw new ho(this._mapCardErrors(t.state.errors))}_mapCardErrors(e={}){const t={};return Object.keys(e).forEach(n=>{t[n]=[{message:e[n],type:n}]}),t}_mountElement(e,t){return Vd(this,void 0,void 0,function*(){yield this._waitForMountContainer(t);try{e.mount(`#${t}`)}catch(e){throw new ai(ni.PaymentNotInitialized)}})}_waitForMountContainer(e){return Vd(this,void 0,void 0,function*(){const t=Math.ceil(Gd.mountContainerMaxWaitMs/Gd.mountContainerPollIntervalMs),n=Gd.mountContainerPollIntervalMs;let i=0;const r=()=>Vd(this,void 0,void 0,function*(){if(i===t)throw new ai(ni.PaymentNotInitialized);document.getElementById(e)||(yield new Promise(e=>{setTimeout(e,n)}),i+=1,yield r())});yield r()})}}Gd.mountContainerMaxWaitMs=5e3,Gd.mountContainerPollIntervalMs=50;const Hd=Si(e=>new Gd(e,new Ud(a(),s())),[{gateway:\"adyenv3\"}]);var Wd,$d=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Yd{constructor(e,t){this.paymentIntegrationService=e,this.affirmScriptLoader=t}initialize(e){return $d(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadPaymentMethod(e.methodId);const t=this.paymentIntegrationService.getState(),{clientToken:n,config:{testMode:i}}=t.getPaymentMethodOrThrow(e.methodId);if(!n)throw new ii(ti.MissingPaymentMethod);this.affirm=yield this.affirmScriptLoader.load(n,i)})}execute(e,t){var n;return $d(this,void 0,void 0,function*(){const i=null===(n=e.payment)||void 0===n?void 0:n.methodId,{useStoreCredit:r}=e;if(!this.affirm)throw new ai(ni.PaymentNotInitialized);if(!i)throw new uo([\"payment.methodId\"]);yield this.paymentIntegrationService.submitOrder({useStoreCredit:r},t);const o={methodId:i,paymentData:{nonce:(yield this.initializeAffirmCheckout()).checkout_token}};yield this.paymentIntegrationService.submitPayment(o)})}deinitialize(){return this.affirm&&(this.affirm=void 0),Promise.resolve()}finalize(){return Promise.reject(new Pd)}initializeAffirmCheckout(){var e;return null===(e=this.affirm)||void 0===e||e.checkout(this.getCheckoutInformation()),new Promise((e,t)=>{var n,i;null===(n=this.affirm)||void 0===n||n.checkout.open({onFail:e=>{\"canceled\"===e.reason?t(new Yi):t(new to)},onSuccess:t=>{e(t)}}),null===(i=this.affirm)||void 0===i||i.ui.error.on(\"close\",()=>{t(new Yi)})})}getCheckoutInformation(){const e=this.paymentIntegrationService.getState(),t=e.getStoreConfig(),n=e.getConsignments(),i=e.getOrder(),r=e.getCart();if(!t)throw new ii(ti.MissingCheckoutConfig);if(!i)throw new ii(ti.MissingCheckout);const o=new _d(i.currency.decimalPlaces),a=this.getBillingAddress(),s=this.getShippingAddress(),d=qo(r,t)&&s?s:a;return{merchant:{user_confirmation_url:t.links.checkoutLink,user_cancel_url:t.links.checkoutLink,user_confirmation_url_action:\"POST\"},shipping:d,billing:a,items:this.getItems(o,i),metadata:{shipping_type:this.getShippingType(n),mode:\"modal\",platform_type:\"BigCommerce\",platform_version:\"\",platform_affirm:\"\"},discounts:this.getDiscounts(o,i),order_id:i.orderId?i.orderId.toString():\"\",shipping_amount:o.toInteger(i.shippingCostTotal),tax_amount:o.toInteger(i.taxTotal),total:o.toInteger(i.orderAmount)}}getShippingType(e){if(!e)return\"\";const t=e[0];return(null==t?void 0:t.selectedShippingOption)?t.selectedShippingOption.type:\"\"}getBillingAddress(){const e=this.paymentIntegrationService.getState().getBillingAddress();if(!e)throw new ii(ti.MissingBillingAddress);return{name:{first:e.firstName,last:e.lastName,full:`${e.firstName} ${e.lastName}`},address:{line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,zipcode:e.postalCode,country:e.countryCode},phone_number:e.phone,email:e.email}}getShippingAddress(){const e=this.paymentIntegrationService.getState().getShippingAddress();if(e)return{name:{first:e.firstName,last:e.lastName,full:`${e.firstName} ${e.lastName}`},address:{line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,zipcode:e.postalCode,country:e.countryCode},phone_number:e.phone}}getItems(e,t){const n=[];return t.lineItems.physicalItems.forEach(t=>{n.push({display_name:t.name,sku:t.sku,unit_price:e.toInteger(t.salePrice),qty:t.quantity,item_image_url:t.imageUrl,item_url:t.url,categories:this.getCategories(t.categories)})}),t.lineItems.digitalItems.forEach(t=>{n.push({display_name:t.name,sku:t.sku,unit_price:e.toInteger(t.salePrice),qty:t.quantity,item_image_url:t.imageUrl,item_url:t.url,categories:this.getCategories(t.categories)})}),t.lineItems.giftCertificates.forEach(t=>{n.push({display_name:t.name,sku:\"\",unit_price:e.toInteger(t.amount),qty:1,item_image_url:\"\",item_url:\"\"})}),t.lineItems.customItems&&t.lineItems.customItems.forEach(t=>{n.push({display_name:t.name,sku:t.sku,unit_price:e.toInteger(t.listPrice),qty:t.quantity,item_image_url:\"\",item_url:\"\"})}),n}getDiscounts(e,t){const n={};return t.coupons.forEach(t=>{t.discountedAmount>0&&(n[t.code]={discount_amount:e.toInteger(t.discountedAmount),discount_display_name:t.displayName})}),t.discountAmount>0&&(n.DISCOUNTED_AMOUNT={discount_amount:e.toInteger(t.discountAmount),discount_display_name:\"discount\"}),n}getCategories(e){return e?e.map(e=>e.map(e=>e.name)):[[]]}}!function(e){e.PROD=\"//cdn1.affirm.com/js/v2/affirm.js\",e.SANDBOX=\"//cdn1-sandbox.affirm.com/js/v2/affirm.js\"}(Wd||(Wd={}));class Kd{constructor(e=window){this.affirmWindow=e}load(e=\"\",t){const n=t?Wd.SANDBOX:Wd.PROD;if(function(e,t,n,i,r,o,a){const s=e[n]||{},d=document.createElement(o),c=document.getElementsByTagName(o)[0],l=function(e,t,n){return function(){e[t]._.push([n,arguments])}};s[i]=l(s,i,\"set\");const u=s[i];s[r]={},s[r]._=[],u._=[],s._=[],s[r][a]=l(s,r,a),s.jsReady=function(){s._.push([a,arguments])};let h=0;for(const e=\"set add save post open empty reset on off trigger ready setProduct\".split(\" \");h<e.length;h++)u[e[h]]=l(s,i,e[h]);let p=0;for(const e=[\"get\",\"token\",\"url\",\"items\"];p<e.length;p++)u[e[p]]=function(){};d.async=!0,d.src=t[o],c.parentNode&&c.parentNode.insertBefore(d,c),delete t[o],u(t),e[n]=s}(window,{public_api_key:e,script:n},\"affirm\",\"checkout\",\"ui\",\"script\",\"ready\"),!this.affirmWindow.affirm)throw new gi;return Promise.resolve(this.affirmWindow.affirm)}}const Jd=Si(e=>new Yd(e,new Kd),[{id:\"affirm\"}]);class Zd extends ei{constructor(e){super(e||\"The current order could not be finalized successfully\"),this.name=\"OrderFinalizationNotCompletedError\",this.type=\"order_finalization_not_completed\"}}var Qd=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Xd{constructor(e,t){this._paymentIntegrationService=e,this._afterpayScriptLoader=t}initialize(e){var t;return Qd(this,void 0,void 0,function*(){const n=this._paymentIntegrationService.getState(),i=n.getPaymentMethod(e.methodId,e.gatewayId),r=(null===(t=n.getCart())||void 0===t?void 0:t.currency.code)||\"\",o=this._mapCurrencyToISO2(r),a=Pi(n.getStoreConfigOrThrow().checkoutSettings.features,\"PI-4789.afterpay_script_use_https\",!1);if(!i)throw new ii(ti.MissingPaymentMethod);this._afterpaySdk=yield this._afterpayScriptLoader.load(i,o,a)})}deinitialize(){return this._afterpaySdk&&(this._afterpaySdk=void 0),Promise.resolve()}execute(e,t){var n;return Qd(this,void 0,void 0,function*(){if(!e.payment)throw new uo([\"payment.gatewayId\",\"payment.methodId\"]);const{gatewayId:i,methodId:r}=e.payment;if(!i||!r)throw new uo([\"payment.gatewayId\",\"payment.methodId\"]);const{useStoreCredit:o}=e;void 0!==o&&(yield this._paymentIntegrationService.applyStoreCredit(o)),yield this._loadPaymentMethod(i,r,t);const a=this._paymentIntegrationService.getState();yield this._paymentIntegrationService.validateCheckout(a.getCheckout(),t);const s=(null===(n=a.getCart())||void 0===n?void 0:n.currency.code)||\"\",d=this._mapCurrencyToISO2(s);return this._redirectToAfterpay(d,a.getPaymentMethod(r,i)),new Promise(()=>{})})}finalize(e){var t,n,i;return Qd(this,void 0,void 0,function*(){const r=this._paymentIntegrationService.getState(),o=r.getPaymentId(),a=r.getContextConfig();if(!o)throw new ii(ti.MissingCheckout);if(!(null==a?void 0:a.payment.token))throw new ii(ti.MissingCheckoutConfig);const s={methodId:o.providerId,paymentData:{nonce:a.payment.token}};yield this._paymentIntegrationService.submitOrder({},e);try{yield this._paymentIntegrationService.submitPayment(s)}catch(e){if(yield this._paymentIntegrationService.forgetCheckout(o.providerId),yield this._paymentIntegrationService.loadPaymentMethods(),ya(e))throw new Zd(null===(i=null===(n=null===(t=e.body)||void 0===t?void 0:t.errors)||void 0===n?void 0:n[0])||void 0===i?void 0:i.message)}})}_redirectToAfterpay(e,t){if(!this._afterpaySdk||!(null==t?void 0:t.clientToken))throw new ai(ni.PaymentNotInitialized);this._afterpaySdk.initialize({countryCode:e}),this._afterpaySdk.redirect({token:t.clientToken})}_mapCurrencyToISO2(e){return{AUD:\"AU\",NZD:\"NZ\",CAD:\"CA\",USD:\"US\"}[e]||\"AU\"}_loadPaymentMethod(e,t,n){var i;return Qd(this,void 0,void 0,function*(){try{return yield this._paymentIntegrationService.loadPaymentMethod(e,Object.assign(Object.assign({},n),{params:Object.assign(Object.assign({},null==n?void 0:n.params),{method:t})}))}catch(e){if(e instanceof rr&&422===(null===(i=e.body)||void 0===i?void 0:i.status))throw new _i(\"Afterpay can't process your payment for this order, please try another payment method\");throw e}})}}var ec,tc;!function(e){e.PROD=\"//portal.afterpay.com/afterpay-async.js\",e.SANDBOX=\"//portal.sandbox.afterpay.com/afterpay.js\",e.HTTPS_PROD=\"https://portal.afterpay.com/afterpay-async.js\",e.HTTPS_SANDBOX=\"https://portal.sandbox.afterpay.com/afterpay.js\"}(ec||(ec={})),function(e){e.PROD=\"//portal.afterpay.com/afterpay-async.js\",e.SANDBOX=\"//portal.sandbox.afterpay.com/afterpay.js\",e.HTTPS_PROD=\"https://portal.afterpay.com/afterpay-async.js\",e.HTTPS_SANDBOX=\"https://portal.sandbox.afterpay.com/afterpay.js\"}(tc||(tc={}));class nc{constructor(e){this._scriptLoader=e}load(e,t,n=!1){return i=this,r=void 0,a=function*(){const i=e.config.testMode||!1,r=this._getScriptURI(t,i,n);return this._scriptLoader.loadScript(r).then(()=>{if(!function(e){return\"AfterPay\"in e}(window))throw new gi;return window.AfterPay})},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}d((a=a.apply(i,r||[])).next())});var i,r,o,a}_getScriptURI(e,t,n=!1){return\"US\"===e?n?t?tc.HTTPS_SANDBOX:tc.HTTPS_PROD:t?tc.SANDBOX:tc.PROD:n?t?ec.HTTPS_SANDBOX:ec.HTTPS_PROD:t?ec.SANDBOX:ec.PROD}}const ic=Si(e=>new Xd(e,new nc(o())),[{gateway:\"afterpay\"},{id:\"afterpay\"}]);var rc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class oc{constructor(e,t){this.paymentIntegrationService=e,this.amazonPayV2PaymentProcessor=t}initialize(e){return rc(this,void 0,void 0,function*(){const{methodId:t,amazonpay:n}=e;if(!t)throw new _i('Unable to proceed because \"methodId\" argument is not provided.');const i=this.paymentIntegrationService.getState(),{features:r}=i.getStoreConfigOrThrow().checkoutSettings,o=i.getPaymentMethodOrThrow(t),a=o.initializationData||{},{paymentToken:s=\"\",region:d=\"\",isButtonMicroTextDisabled:c}=a;if(yield this.amazonPayV2PaymentProcessor.initialize(o),this._isReadyToPay(s))(null==n?void 0:n.editButtonId)&&this._bindEditButton(n.editButtonId,s,\"changePayment\",this._isModalFlow(d));else{const{id:e}=this._createContainer();if(this._amazonPayButton=this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:i,containerId:e,decoupleCheckoutInitiation:this._isOneTimeTransaction(r,d.toUpperCase()),methodId:t,placement:ci.Checkout,isButtonMicroTextDisabled:c}),!this._amazonPayButton)throw new _i(\"Unable to render the Amazon Pay button to an invalid HTML container element.\")}})}execute(e,t){return rc(this,void 0,void 0,function*(){const{payment:n}=e;if(!n)throw new uo([\"payment\"]);const{methodId:i}=n,r=this.paymentIntegrationService.getState(),{features:o}=r.getStoreConfigOrThrow().checkoutSettings,a=r.getPaymentMethodOrThrow(i).initializationData||{},{paymentToken:s=\"\",region:d=\"\"}=a;if(this._isReadyToPay(s)||this._isOneTimeTransaction(o,d.toUpperCase())){const n={methodId:i,paymentData:{nonce:s||\"apb\"}};yield this.paymentIntegrationService.submitOrder(e,t);try{return void(yield this.paymentIntegrationService.submitPayment(n))}catch(e){if(!(ya(e)&&(c=e.body,\"object\"==typeof c&&null!==c&&\"status\"in c&&\"additional_action_required\"in c&&\"additional_action_required\"===c.status&&\"data\"in c.additional_action_required&&\"redirect_url\"in c.additional_action_required.data&&\"string\"==typeof c.additional_action_required.data.redirect_url)))throw e;const{additional_action_required:t}=e.body,{redirect_url:n}=t.data;if(s)return new Promise(()=>window.location.assign(n));this.amazonPayV2PaymentProcessor.prepareCheckout(JSON.parse(n))}}var c;return this._getAmazonPayButton().click(),this._isModalFlow(d)?new Promise((e,t)=>{const n=()=>{window.removeEventListener(\"focus\",n),t(new Yi(\"Shopper needs to login to Amazonpay to continue\"))};window.addEventListener(\"focus\",n)}):new Promise(ce)})}finalize(){return Promise.reject(new Pd)}deinitialize(){return rc(this,void 0,void 0,function*(){yield this.amazonPayV2PaymentProcessor.deinitialize(),this._amazonPayButton=void 0})}_bindEditButton(e,t,n,i){const r=document.getElementById(e);if(r&&r.parentNode){if(!i){const e=r.cloneNode(!0);r.parentNode.replaceChild(e,r),e.addEventListener(\"click\",()=>{this._showLoadingSpinner()})}this.amazonPayV2PaymentProcessor.bindButton(e,t,n)}}_isModalFlow(e){return\"us\"===e}_showLoadingSpinner(){return rc(this,void 0,void 0,function*(){yield this.paymentIntegrationService.widgetInteraction(()=>new Promise(ce))})}_createContainer(){let e=document.getElementById(\"AmazonPayButton\");return e||(e=document.createElement(\"div\"),e.id=\"AmazonPayButton\",e.style.display=\"none\",document.body.appendChild(e))}_getAmazonPayButton(){return oi(this._amazonPayButton,()=>new ai(ni.PaymentNotInitialized))}_isOneTimeTransaction(e,t){return this.amazonPayV2PaymentProcessor.isPh4Enabled(e,t)&&e[\"INT-6399.amazon_pay_apb\"]}_isReadyToPay(e){return!!e}}const ac=Si(e=>new oc(e,fi()),[{id:\"amazonpay\"}]);var sc,dc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};!function(e){e.Shipping=\"Shipping\",e.Subtotal=\"Subtotal\",e.StoreCredit=\"Store Credit\"}(sc||(sc={}));class cc{constructor(e,t,n,i,r){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=n,this._braintreeSdk=i,this._applePayScriptLoader=r,this._shippingLabel=sc.Shipping,this._subTotalLabel=sc.Subtotal,this._storeCreditLabel=sc.StoreCredit}initialize(e){var t,n,i,r;return dc(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new _i('Unable to submit payment because \"options.methodId\" argument is not provided.');const{methodId:o}=e;yield this._applePayScriptLoader.loadSdk(),this._shippingLabel=(null===(t=e.applepay)||void 0===t?void 0:t.shippingLabel)||sc.Shipping,this._subTotalLabel=(null===(n=e.applepay)||void 0===n?void 0:n.subtotalLabel)||sc.Subtotal,this._storeCreditLabel=(null===(i=e.applepay)||void 0===i?void 0:i.storeCreditLabel)||sc.StoreCredit;const a=(yield this._paymentIntegrationService.loadPaymentMethod(o)).getPaymentMethodOrThrow(o);(null===(r=a.initializationData)||void 0===r?void 0:r.gateway)===Hi.BRAINTREE&&a.clientToken&&this._braintreeSdk.initialize(a.clientToken)})}execute(e,t){return dc(this,void 0,void 0,function*(){const{payment:n}=e,i=this._paymentIntegrationService.getState();if(!n)throw new uo([\"payment\"]);const{methodId:r}=n,o=i.getPaymentMethodOrThrow(r),a=this._getBaseRequest(i,o),s=this._sessionFactory.create(a);return yield this._paymentIntegrationService.submitOrder({useStoreCredit:e.useStoreCredit},t),s.begin(),new Promise((e,t)=>{this._handleApplePayEvents(s,o,{resolve:e,reject:t})})})}finalize(){return Promise.reject(new Pd)}deinitialize(){return Promise.resolve()}_getBaseRequest(e,t){const n=e.getCheckoutOrThrow(),i=e.getCartOrThrow(),r=e.getStoreConfigOrThrow(),{storeProfile:{storeCountryCode:o,storeName:a}}=r,{currency:{code:s,decimalPlaces:d}}=i,{initializationData:{merchantCapabilities:c,supportedNetworks:l}}=t,{grandTotal:u,isStoreCreditApplied:h,outstandingBalance:p}=n,m=[{label:this._subTotalLabel,amount:`${n.subtotal.toFixed(d)}`}];if(n.taxes.forEach(e=>m.push({label:e.name,amount:`${e.amount.toFixed(d)}`})),m.push({label:this._shippingLabel,amount:`${n.shippingCostTotal.toFixed(d)}`}),h){const{storeCredit:t}=e.getCustomerOrThrow();m.push({label:this._storeCreditLabel,amount:`-${Math.min(u,t).toFixed(d)}`})}return{countryCode:o,currencyCode:s,merchantCapabilities:c,supportedNetworks:l,lineItems:m,total:{label:a,amount:`${p.toFixed(d)}`,type:\"final\"}}}_handleApplePayEvents(e,t,n){e.onvalidatemerchant=n=>dc(this,void 0,void 0,function*(){try{const{body:i}=yield this._onValidateMerchant(t,n);e.completeMerchantValidation(i)}catch(e){throw new Error(\"Merchant validation failed\")}}),e.oncancel=()=>dc(this,void 0,void 0,function*(){return n.reject(new Yi(\"Continue with applepay\"))}),e.onpaymentauthorized=i=>this._onPaymentAuthorized(i,e,t,n)}_onValidateMerchant(e,t){return dc(this,void 0,void 0,function*(){const n=[`validationUrl=${t.validationURL}`,`merchantIdentifier=${e.initializationData.merchantId}`,`displayName=${e.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${e.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:n})})}_onPaymentAuthorized(e,t,n,i){var r;return dc(this,void 0,void 0,function*(){const{token:o}=e.payment;let a;(null===(r=n.initializationData)||void 0===r?void 0:r.gateway)===Hi.BRAINTREE&&(a=yield this._getBraintreeDeviceData());const s={methodId:n.id,paymentData:{deviceSessionId:a,formattedPayload:{apple_pay_token:{payment_data:o.paymentData,payment_method:o.paymentMethod,transaction_id:o.transactionIdentifier}}}};try{return yield this._paymentIntegrationService.submitPayment(s),t.completePayment(ApplePaySession.STATUS_SUCCESS),i.resolve()}catch(e){return t.completePayment(ApplePaySession.STATUS_FAILURE),i.reject(new ai(ni.PaymentNotInitialized))}})}_getBraintreeDeviceData(){return dc(this,void 0,void 0,function*(){try{const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e}catch(e){}})}}const lc=Si(e=>{const{getHost:t}=e.getState(),i=new Ti(e);return new cc(n({host:t()}),e,new Xi,new Vi(new $i(a(),window,i)),new er(new r))},[{id:\"applepay\"}]),uc={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},hc=function({styles:e}){const t={};return e.color&&(t.color=e.color),e.layout&&(t.layout=e.layout),(e[\"logo-type\"]||e[\"logo-position\"])&&(t.logo={},e[\"logo-type\"]&&(t.logo.type=e[\"logo-type\"]),e[\"logo-position\"]&&(t.logo.position=e[\"logo-position\"])),e.ratio&&(t.ratio=e.ratio),(e[\"text-color\"]||e[\"text-size\"])&&(t.text={},e[\"text-color\"]&&(t.text.color=e[\"text-color\"]),e[\"text-size\"]&&(t.text.size=+e[\"text-size\"])),t};function pc(e){return\"object\"==typeof e&&null!==e&&\"bigpayToken\"in e&&\"defaultInstrument\"in e&&\"provider\"in e&&\"trustedShippingAddress\"in e&&\"method\"in e&&\"type\"in e}var mc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class yc{constructor(e,t,n,i){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.paypalSdkHelper=n,this.loadingIndicator=i}initialize(e){return mc(this,void 0,void 0,function*(){const{methodId:t,bigcommerce_payments:n}=e||{};if(this.bigcommerce_payments=n,!t)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(t);const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(t),{container:o,bannerContainerId:a}=n,{orderId:s,paypalBNPLConfiguration:d=[],isPayPalCreditAvailable:c}=r.initializationData||{};if(void 0!==a){if(!document.getElementById(a))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=null==d?void 0:d.find(({id:e})=>\"checkout\"===e);if(c||!(null==e?void 0:e.status))return;const t=yield this.paypalSdkHelper.getPayPalMessages(r,i.getCartOrThrow().currency.code);return t&&\"function\"==typeof(null==t?void 0:t.Messages)?this.renderMessages(t,a,e):void console.error(\"[BC PayPalCommerce PayLater]: banner could not be rendered, due to issues with loading PayPal SDK\")}s?this.orderId=s:(this.loadingIndicatorContainer=null==o?void 0:o.split(\"#\")[1],yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(t),n.onInit&&\"function\"==typeof n.onInit&&n.onInit(()=>this.renderButton(t,n)),(void 0===n.shouldRenderPayPalButtonOnInitialization||n.shouldRenderPayPalButtonOnInitialization)&&this.renderButton(t,n))})}execute(e,t){return mc(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{onError:r}=this.bigcommerce_payments||{};if(!n)throw new uo([\"payment\"]);const{methodId:o,paymentData:a}=n;if(this.isPayPalVaultedInstrumentPaymentData(a)&&!this.orderId&&(this.orderId=yield this.createOrder()),!this.orderId)throw new to;const s=this.isPayPalVaultedInstrumentPaymentData(a)?this.prepareVaultedInstrumentPaymentPayload(o,this.orderId,a):this.preparePaymentPayload(o,this.orderId,a);try{yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment(s)}catch(e){return this.isProviderError(e)&&(yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n.methodId),yield new Promise((e,t)=>{var i;this.bigcommerce_payments&&(null===(i=this.paypalButton)||void 0===i||i.close(),this.renderButton(n.methodId,this.bigcommerce_payments),this.handleError(new Error(\"INSTRUMENT_DECLINED\"),r)),t()})),this.handleError(e,r),Promise.reject()}})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}prepareVaultedInstrumentPaymentPayload(e,t,n){const{instrumentId:i,shouldSetAsDefaultInstrument:r}=n,o=!this.isTrustedVaultingFlow(n);return o?{methodId:e,paymentData:{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t}}}}:{methodId:e,paymentData:{instrumentId:i,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t},bigpay_token:{token:i}}}}}preparePaymentPayload(e,t,n){const{shouldSaveInstrument:i=!1,shouldSetAsDefaultInstrument:r=!1}=qd(n)?n:{};return{methodId:e,paymentData:{shouldSaveInstrument:i,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t}}}}}renderButton(e,t){const n=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:d,onValidate:c,submitForm:l}=t;if(!a)throw new _i('Unable to initialize payment because \"container\" argument is not provided.');const u={fundingSource:n.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o),createOrder:()=>this.createOrder(),onClick:(e,t)=>this.handleClick(t,c),onApprove:e=>this.handleApprove(e,l),onError:e=>this.handleError(e,s),onCancel:()=>this.toggleLoadingIndicator(!1)};this.paypalButton=n.Buttons(u),this.paypalButton.isEligible()&&(d&&\"function\"==typeof d&&d(),this.paypalButton.render(a))}handleClick(e,t){return mc(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;yield null==t?void 0:t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,null==t||t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createOrder(){return mc(this,void 0,void 0,function*(){const e=this.getFieldsValues();return this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_paymentscheckout\",{shouldSaveInstrument:(null==e?void 0:e.shouldSaveInstrument)||!1})})}getFieldsValues(){const{getFieldsValues:e}=this.bigcommerce_payments||{};return\"function\"==typeof e?e():void 0}isTrustedVaultingFlow(e){if(e&&Fd(e)){const t=this.paymentIntegrationService.getState().getInstruments(),n=null==t?void 0:t.find(t=>pc(t)&&t.bigpayToken===e.instrumentId);return!(pc(n)&&!n.trustedShippingAddress)}return!1}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isPayPalVaultedInstrumentPaymentData(e){return!!e&&Fd(e)&&qd(e)}renderMessages(e,t,n){const i={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:hc(n)};e.Messages(i).render(`#${t}`)}isProviderError(e){var t,n,i;return!!function(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e}(e)&&\"INSTRUMENT_DECLINED\"===(null===(i=null===(n=((null===(t=null==e?void 0:e.errors)||void 0===t?void 0:t.filter(e=>e.provider_error))||[])[0])||void 0===n?void 0:n.provider_error)||void 0===i?void 0:i.code)}}const gc=Si(e=>new yc(e,Ir(e),Lr(),new Sd({containerStyles:uc})),[{id:\"bigcommerce_payments\"}]);function vc(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}var fc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Sc{constructor(e,t,n,i){this.paymentIntegrationService=e,this.bigCommercePaymentsRequestSender=t,this.bigCommercePaymentsSdk=n,this.bigCommercePaymentsFastlaneUtils=i}initialize(e){var t,n;return fc(this,void 0,void 0,function*(){const{methodId:i,bigcommerce_payments_fastlane:r}=e;if(!i)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(this.methodId=i,!r)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_fastlane\" argument is not provided.');if(this.bigcommerce_payments_fastlane=r,!r.onInit||\"function\"!=typeof r.onInit)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_fastlane.onInit\" argument is not provided or it is not a function.');if(!r.onChange||\"function\"!=typeof r.onChange)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_fastlane.onChange\" argument is not provided or it is not a function.');yield this.paymentIntegrationService.loadPaymentMethod(i);const o=this.paymentIntegrationService.getState(),a=o.getCartOrThrow(),s=o.getPaymentMethodOrThrow(i),{isDeveloperModeApplicable:d,isFastlaneStylingEnabled:c}=s.initializationData||{};this.threeDSVerificationMethod=null===(t=s.initializationData)||void 0===t?void 0:t.threeDSVerificationMethod,this.paypalFastlaneSdk=yield this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(s,a.currency.code,a.id);const l=Gr(c?null===(n=null==s?void 0:s.initializationData)||void 0===n?void 0:n.fastlaneStyles:{},null==r?void 0:r.styles);yield this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(this.paypalFastlaneSdk,!!d,l),this.shouldRunAuthenticationFlow()&&(yield this.runPayPalAuthenticationFlowOrThrow(i)),yield this.initializePayPalPaymentComponent(),r.onInit(e=>this.renderPayPalPaymentComponent(e)),r.onChange(()=>this.handlePayPalStoredInstrumentChange(i))})}execute(e,t){return fc(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);const{paymentData:r,methodId:o}=n,a=r&&Fd(r);try{yield this.paymentIntegrationService.submitOrder(i,t);const e=a?yield this.prepareVaultedInstrumentPaymentPayload(o,r):yield this.preparePaymentPayload(o,r);yield this.paymentIntegrationService.submitPayment(e),this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId()}catch(e){if(function(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"response\"in e&&\"name\"in e.response}(e)&&\"INVALID_REQUEST\"===e.response.name){const e={translationKey:\"payment.errors.invalid_request_error\"};return this.handleError(e),Promise.reject()}if(e instanceof Error&&\"FastlaneError\"!==e.name)throw e;return Promise.reject()}})}finalize(){return Promise.reject(new Pd)}deinitialize(){return fc(this,void 0,void 0,function*(){return Promise.resolve()})}shouldRunAuthenticationFlow(){const e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getCustomerOrThrow(),i=e.getPaymentProviderCustomer(),r=vc(i)?i:{},o=this.bigCommercePaymentsFastlaneUtils.getStorageSessionId();return!(!n.isGuest||(null==r?void 0:r.authenticationState)===xr.CANCELED||(null==r?void 0:r.authenticationState)||o!==t.id)}runPayPalAuthenticationFlowOrThrow(e){return fc(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getCustomer(),r=t.getBillingAddress(),o=(null==i?void 0:i.email)||(null==r?void 0:r.email)||\"\",{customerContextId:a}=yield this.bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow(a),{authenticationState:d,addresses:c,instruments:l}=this.bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,s);yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:d,addresses:c,instruments:l}),s.authenticationState===xr.CANCELED?this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId():this.bigCommercePaymentsFastlaneUtils.updateStorageSessionId(n.id)}catch(e){}})}initializePayPalPaymentComponent(){return fc(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),t=e.phone,n=`${e.firstName} ${e.lastName}`.trim(),i=this.bigCommercePaymentsFastlaneUtils.getPayPalFastlaneOrThrow(),r={fields:Object.assign({cardholderName:{prefill:n,enabled:!0}},t&&{phoneNumber:{prefill:t}})};this.paypalComponentMethods=yield i.FastlaneCardComponent(r)})}renderPayPalPaymentComponent(e){const t=this.getPayPalComponentMethodsOrThrow();if(!e)throw new _i('Unable to render card component because \"container\" argument is not provided.');t.render(e)}getPayPalComponentMethodsOrThrow(){if(!this.paypalComponentMethods)throw new gi;return this.paypalComponentMethods}prepareVaultedInstrumentPaymentPayload(e,t){return fc(this,void 0,void 0,function*(){const{instrumentId:n}=t,i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),r=this.isBigcommercePaymentsFastlaneThreeDSAvailable()&&i.config.is3dsEnabled?yield this.get3DSNonce(n):n;return yield this.createOrder(r),{methodId:e,paymentData:{formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:r}}}}})}preparePaymentPayload(e,t){return fc(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getBillingAddressOrThrow(),r=n.getPaymentMethodOrThrow(e),o=`${i.firstName} ${i.lastName}`.trim(),{getPaymentToken:a}=this.getPayPalComponentMethodsOrThrow(),{id:s}=yield a({name:{fullName:o},billingAddress:this.bigCommercePaymentsFastlaneUtils.mapBcToPayPalAddress(i)}),d=this.isBigcommercePaymentsFastlaneThreeDSAvailable()&&r.config.is3dsEnabled,{shouldSaveInstrument:c=!1,shouldSetAsDefaultInstrument:l=!1}=qd(t)?t:{},u=d?yield this.get3DSNonce(s):s;return yield this.createOrder(u),{methodId:e,paymentData:Object.assign(Object.assign({},t),{shouldSaveInstrument:c,shouldSetAsDefaultInstrument:l,formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:u}}})}})}createOrder(e){return fc(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getCartOrThrow().id;if(this.methodId){const{orderId:n}=yield this.bigCommercePaymentsRequestSender.createOrder(this.methodId,{cartId:t,fastlaneToken:e});this.orderId=n}})}get3DSNonce(e){var t;return fc(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getCartOrThrow(),r=n.getOrderOrThrow(),o=n.getStoreConfigOrThrow().links.checkoutLink,a=null===(t=this.paypalFastlaneSdk)||void 0===t?void 0:t.ThreeDomainSecureClient;if(!a)throw new gi;const s={amount:r.orderAmount.toFixed(2),currency:i.currency.code,nonce:e,threeDSRequested:this.threeDSVerificationMethod===kr.Always,transactionContext:{experience_context:{locale:\"en-US\",return_url:o,cancel_url:o}}},d=yield a.isEligible(s);if(this.threeDSVerificationMethod===kr.Always&&!d)throw new to;if(d){const{liabilityShift:e,authenticationState:t,nonce:n}=yield a.show();if(e===or.No||e===or.Unknown||t===Dr.Errored||t===Dr.Cancelled)throw new to;if(t===Dr.Succeeded&&[or.Yes,or.Possible].includes(e))return n}return e})}handlePayPalStoredInstrumentChange(e){return fc(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsFastlaneUtils.getPayPalFastlaneOrThrow(),{selectionChanged:n,selectedCard:i}=yield t.profile.showCardSelector();if(n){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomer(),n=vc(t)?t:{},r=this.bigCommercePaymentsFastlaneUtils.mapPayPalToBcInstrument(e,i)[0];return yield this.paymentIntegrationService.updatePaymentProviderCustomer(Object.assign(Object.assign({},n),{instruments:[r]})),r}})}isBigcommercePaymentsFastlaneThreeDSAvailable(){return Pi(this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features,\"PROJECT-7080.bcp_fastlane_three_ds\")}handleError(e){var t;(null===(t=this.bigcommerce_payments_fastlane)||void 0===t?void 0:t.onError)&&\"function\"==typeof this.bigcommerce_payments_fastlane.onError&&this.bigcommerce_payments_fastlane.onError(e)}}const _c=Si(e=>{const{getHost:t}=e.getState();return new Sc(e,new Sr(n({host:t()})),Lr(),qr())},[{id:\"bigcommerce_payments_fastlane\"}]);var wc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ic{constructor(e,t,n,i){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.loadingIndicator=n,this.paypalSdkHelper=i}initialize(e){return wc(this,void 0,void 0,function*(){const{methodId:t,bigcommerce_payments_paylater:n}=e||{};if(!t)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(t);const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(t),{paypalBNPLConfiguration:o=[],orderId:a}=r.initializationData||{},{bannerContainerId:s,container:d}=n;if(void 0!==s){if(!document.getElementById(s))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=o&&o.find(({id:e})=>\"checkout\"===e);if(!(null==e?void 0:e.status))return;const t=yield this.paypalSdkHelper.getPayPalMessages(r,i.getCartOrThrow().currency.code);return this.renderMessages(t,s,e)}a?this.orderId=a:(yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(t),this.loadingIndicatorContainer=null==d?void 0:d.split(\"#\")[1],this.renderButton(t,n))})}execute(e,t){return wc(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);if(!this.orderId)throw new to;yield this.paymentIntegrationService.submitOrder(i,t),yield this.bigCommercePaymentsIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.bigCommercePaymentsButtons)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){if(!(null==t?void 0:t.container))throw new _i('Unable to initialize payment because \"container\" argument is not provided.');const n=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:d,onValidate:c,submitForm:l}=t,u=[n.FUNDING.PAYLATER,n.FUNDING.CREDIT];let h=!1;u.forEach(e=>{if(h)return;const t={fundingSource:e,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o),createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onClick:(e,t)=>this.handleClick(t,c),onApprove:e=>this.handleApprove(e,l),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.bigCommercePaymentsButtons=n.Buttons(t),this.bigCommercePaymentsButtons.isEligible()||e!==n.FUNDING.PAYLATER){if(!this.bigCommercePaymentsButtons.isEligible()&&e===n.FUNDING.CREDIT)throw new wi(`BigCommercePayments ${e} is not available for your region. Please use BigCommercePayments Checkout instead.`);d&&\"function\"==typeof d&&d(),this.bigCommercePaymentsButtons.render(a),h=!0}})}handleClick(e,t){return wc(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;t&&\"function\"==typeof t&&(yield t(()=>(this.toggleLoadingIndicator(!0),n()),i))})}handleApprove({orderID:e},t){this.orderId=e,t&&\"function\"==typeof t&&t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}renderMessages(e,t,n){const i={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:hc(n)};e.Messages(i).render(`#${t}`)}}const Cc=Si(e=>new Ic(e,Ir(e),new Sd({containerStyles:uc}),Lr()),[{id:\"bigcommerce_payments_paylater\"}]);class bc extends rr{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}var Pc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Oc{constructor(e,t,n,i=3e3,r=3e5){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.loadingIndicator=n,this.pollingInterval=i,this.maxPollingIntervalTime=r,this.pollingTimer=0,this.stopPolling=ce}initialize(e){return Pc(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,bigcommerce_payments_ratepay:i}=e;if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!i)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_ratepay\" argument is not provided.');const{legalTextContainer:r,container:o,loadingContainerId:a}=i;if(!o)throw new _i('Unable to initialize payment because \"options.container\" argument is not provided.');if(!r)throw new _i('Unable to initialize payment because \"options.legalTextContainer\" argument is not provided.');if(!a)throw new _i('Unable to initialize payment because \"options.loadingContainerId\" argument is not provided.');this.loadingIndicatorContainer=a;const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,t),{merchantId:d}=s.initializationData||{};if(!d)throw new _i(\"Unable to initialize payment because merchantId argument is not provided.\");this.bigcommerce_payments_ratepay=i,yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n),this.createFraudNetScript(d,n,t),this.loadFraudnetConfig(),this.renderLegalText(r,o)})}execute(e,t){return Pc(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{getFieldsValues:r}=this.bigcommerce_payments_ratepay||{};if(!n)throw new uo([\"payment\"]);if(!r||\"function\"!=typeof r)throw new _i('Unable to initialize payment because \"options.getFieldsValues\" argument is not provided.');this.toggleLoadingIndicator(!0);try{const e=yield this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_apmscheckout\",{metadataId:this.guid}),{ratepayBirthDate:o,ratepayPhoneNumber:a,ratepayPhoneCountryCode:s}=r(),d={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:n.methodId,rate_pay:{birth_date:this.normalizeDate(o),phone:{national_number:a,country_code:s.split(\"+\")[1]}},paypal_account:{order_id:e}}};return yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment({methodId:n.methodId,paymentData:d}),yield new Promise((e,t)=>{this.initializePollingMechanism(n.methodId,e,t,n.gatewayId)})}catch(e){return this.handleError(e),new Promise((e,t)=>t())}})}finalize(){return Promise.reject(new Pd)}deinitialize(){const{legalTextContainer:e}=this.bigcommerce_payments_ratepay||{},t=document.querySelectorAll('[data-id=\"fraudnetScript\"]')[0],n=document.querySelectorAll('[data-id=\"fraudnetConfig\"]')[0];if(this.deinitializePollingMechanism(),t.remove(),n.remove(),e){const t=document.getElementById(e);null==t||t.remove()}return Promise.resolve()}normalizeDate(e){const t=this.formatDate(e.getDate()),n=this.formatDate(e.getMonth()+1);return`${e.getFullYear()}-${n}-${t}`}formatDate(e){return`${e<10?0:\"\"}${e}`}renderLegalText(e,t){const n=e,i=t.split(\"#\")[1],r=document.getElementById(i),o=null==r?void 0:r.parentNode,a=document.createElement(\"div\");a.style.marginBottom=\"20px\",a.setAttribute(\"id\",n),null==o||o.prepend(a);const s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),d=s.Legal({fundingSource:s.Legal.FUNDING.PAY_UPON_INVOICE});if(!document.getElementById(n))throw new _i('Unable to initialize payment because \"legalTextContainerElement\" argument is not found.');d.render(`#${n}`)}handleError(e){const{onError:t}=this.bigcommerce_payments_ratepay||{};this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createFraudNetScript(e,t,n){const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n),{testMode:r}=i.config,o=document.createElement(\"script\");o.setAttribute(\"type\",\"application/json\"),o.setAttribute(\"fncls\",\"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\"),o.setAttribute(\"data-id\",\"fraudnetScript\"),this.guid=this.generateGUID();const a={f:this.guid,s:`${e}_checkout-page`,sandbox:r};o.innerHTML=JSON.stringify(a),document.body.appendChild(o)}generateGUID(){let e=\"\";for(let t=0;t<32;t+=1)e+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"[Math.floor(62*Math.random())];return e}loadFraudnetConfig(){const e=document.createElement(\"script\");e.setAttribute(\"data-id\",\"fraudnetConfig\"),e.src=\"https://c.paypal.com/da/r/fb.js\",document.body.appendChild(e)}reinitializeStrategy(e){return Pc(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}initializePollingMechanism(e,t,n,i){return Pc(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.bigCommercePaymentsIntegrationService.getOrderStatus(\"bigcommerce_payments_apms\",{params:{useMetadata:!0}}),o=r===ur.PollingStop,a=r===ur.PollingError;if(o)return this.deinitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,i);yield this.reinitializeStrategy({methodId:e,gatewayId:i,bigcommerce_payments_ratepay:this.bigcommerce_payments_ratepay}),this.handleError(new bc)}catch(e){this.handleError(e),n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const Ec=Si(e=>new Oc(e,Ir(e),new Sd({containerStyles:Object.assign(Object.assign({},uc),{position:\"fixed\"})})),[{gateway:\"bigcommerce_payments_apms\",id:\"ratepay\"}]);var Ac;!function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\",e.CardExpiryVerification=\"cardExpiryVerification\"}(Ac||(Ac={}));const Tc=Ac;function kc(e){return Tc.CardNumber in e&&Tc.CardName in e&&Tc.CardExpiry in e}function Dc(e){return Tc.CardNumberVerification in e&&Tc.CardCodeVerification in e&&Tc.CardExpiryVerification in e}var Mc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class zc{constructor(e,t,n,i){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.bigCommercePaymentsSdk=n,this.bigCommercePaymentsFastlaneUtils=i}initialize(e){return Mc(this,void 0,void 0,function*(){const{methodId:t,bigcommerce_payments_creditcards:n}=e,i=n,{form:r,onCreditCardFieldsRenderingError:o,onLoadComplete:a}=i||{};if(!t)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new _i('Unable to proceed because \"options.bigcommerce_payments_creditcards.form\" argument is not provided.');this.hostedFormOptions=r,this.isCreditCardForm=kc(r.fields),this.isCreditCardVaultedForm=Dc(r.fields)&&!this.hasUndefinedValues(),yield this.paymentIntegrationService.loadPaymentMethod(t),yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(t,void 0,!0,!0),(this.isCreditCardForm||this.isCreditCardVaultedForm)&&(yield this.initializeFields(r,o)),null==a||a(),this.shouldInitializePayPalFastlane(t)&&(yield this.initializePayPalFastlaneOrThrow(t))})}execute(e,t){return Mc(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{methodId:r,paymentData:o}=n||{};if(!n||!r)throw new uo([\"payment\"]);if(this.executionPaymentData=o,this.isCreditCardForm||this.isCreditCardVaultedForm)yield this.validateHostedFormOrThrow(),yield this.submitHostedForm();else{const{orderId:e}=yield this.bigCommercePaymentsIntegrationService.createOrderCardFields(\"bigcommerce_payments_creditcardscheckout\",this.getInstrumentParams());this.returnedOrderId=e}const a=this.preparePaymentPayload(r,o,this.returnedOrderId,this.returnedVaultedToken);yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment(a)})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e,t,n,i;return Mc(this,void 0,void 0,function*(){return yield null===(e=this.cvvField)||void 0===e?void 0:e.close(),yield null===(t=this.expiryField)||void 0===t?void 0:t.close(),yield null===(n=this.numberField)||void 0===n?void 0:n.close(),yield null===(i=this.nameField)||void 0===i?void 0:i.close(),Promise.resolve()})}preparePaymentPayload(e,t,n,i){const{shouldSaveInstrument:r=!1,shouldSetAsDefaultInstrument:o=!1}=qd(t)?t:{},a=t&&Fd(t)?t.instrumentId:void 0,s=ue({verification_nonce:i,token:a},J);return{methodId:e,paymentData:{shouldSaveInstrument:r,shouldSetAsDefaultInstrument:o,instrumentId:a,formattedPayload:Object.assign(Object.assign({},i||a?{bigpay_token:s}:{}),n?{card_with_order:{order_id:n}}:{})}}}initializeFields(e,t){return Mc(this,void 0,void 0,function*(){const{fields:n,styles:i}=e,r=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),o=this.getExecuteCallback(n),a=Object.assign({style:this.getInputStyles(i),onApprove:({orderID:e,vaultSetupToken:t,liabilityShift:n})=>{if(n===or.No||n===or.Unknown)throw new Error;return this.handleApprove({orderID:e,vaultSetupToken:t})},onError:()=>{throw new eo},inputEvents:{onChange:t=>this.onChangeHandler(e,t),onFocus:t=>this.onFocusHandler(e,t),onBlur:t=>this.onBlurHandler(e,t),onInputSubmitRequest:t=>this.onInputSubmitRequest(e,t)}},o);if(this.cardFields=yield r.CardFields(a),!this.cardFields.isEligible())throw new ai(ni.PaymentNotInitialized);try{this.stylizeInputContainers(n),kc(n)&&(yield this.renderFields(n)),Dc(n)&&(yield this.renderVaultedFields(n))}catch(e){\"function\"==typeof t&&t(e)}})}getExecuteCallback(e){return Dc(e)?this.createVaultSetupTokenCallback():this.createOrderCallback()}createVaultSetupTokenCallback(){return{createVaultSetupToken:()=>Mc(this,void 0,void 0,function*(){const{setupToken:e}=(yield this.bigCommercePaymentsIntegrationService.createOrderCardFields(\"bigcommerce_payments_creditcardscheckout\",Object.assign(Object.assign({},this.getInstrumentParams()),{setupToken:!0})))||{};return e})}}createOrderCallback(){return{createOrder:()=>Mc(this,void 0,void 0,function*(){const{orderId:e}=(yield this.bigCommercePaymentsIntegrationService.createOrderCardFields(\"bigcommerce_payments_creditcardscheckout\",this.getInstrumentParams()))||{};return e})}}handleApprove({orderID:e,vaultSetupToken:t}){e&&(this.returnedOrderId=e),t&&(this.returnedVaultedToken=t)}renderFields(e){var t,n,i,r;return Mc(this,void 0,void 0,function*(){const o=this.getCardFieldsOrThrow();(null===(t=e.cardCode)||void 0===t?void 0:t.containerId)&&(this.cvvField=o.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCode.containerId}`)),(null===(n=e.cardExpiry)||void 0===n?void 0:n.containerId)&&(this.expiryField=o.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiry.containerId}`)),(null===(i=e.cardName)||void 0===i?void 0:i.containerId)&&(this.nameField=o.NameField({placeholder:\"\"}),yield this.nameField.render(`#${e.cardName.containerId}`)),(null===(r=e.cardNumber)||void 0===r?void 0:r.containerId)&&(this.numberField=o.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumber.containerId}`))})}renderVaultedFields(e){var t,n,i;return Mc(this,void 0,void 0,function*(){const r=this.getCardFieldsOrThrow();(null===(t=e.cardCodeVerification)||void 0===t?void 0:t.containerId)&&(this.cvvField=r.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCodeVerification.containerId}`)),(null===(n=e.cardExpiryVerification)||void 0===n?void 0:n.containerId)&&(this.expiryField=r.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiryVerification.containerId}`)),(null===(i=e.cardNumberVerification)||void 0===i?void 0:i.containerId)&&(this.numberField=r.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumberVerification.containerId}`))})}getInstrumentParams(){if(!this.executionPaymentData)return{};if(qd(this.executionPaymentData)){const{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}=this.executionPaymentData;return{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}}if(Fd(this.executionPaymentData)){const{instrumentId:e}=this.executionPaymentData;return{instrumentId:e}}return{}}getFieldTypeByEmittedField({emittedBy:e}){return{fieldType:this.mapFieldType(e)}}submitHostedForm(){return Mc(this,void 0,void 0,function*(){const e=this.getCardFieldsOrThrow(),t=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),n={billingAddress:{company:t.company,addressLine1:t.address1,addressLine2:t.address2,adminArea1:t.stateOrProvinceCode,adminArea2:t.city,postalCode:t.postalCode,countryCode:t.countryCode}};try{this.isCreditCardVaultedForm?yield e.submit():yield e.submit(n)}catch(e){throw new eo(\"Failed authentication. Please try to authorize again.\")}})}validateHostedFormOrThrow(){var e,t;return Mc(this,void 0,void 0,function*(){const n=this.getCardFieldsOrThrow(),i=yield n.getState().then(e=>e),r=this.getValidityData(i);if(!r.isValid)throw null===(t=null===(e=this.hostedFormOptions)||void 0===e?void 0:e.onValidate)||void 0===t||t.call(e,r),new ho(this.mapValidationErrors(r.errors))})}getValidityData({fields:e}){const t=Object.assign({},e);delete t.cardNameField;const n=Object.keys(t);return{isValid:n.every(e=>{var n;return null===(n=t[e])||void 0===n?void 0:n.isValid}),errors:n.reduce((e,n)=>{var i;const r=this.mapFieldType(n);return Object.assign(Object.assign({},e),{[r]:(null===(i=t[n])||void 0===i?void 0:i.isValid)?void 0:[this.getInvalidErrorByFieldType(r)]})},{})}}getInvalidErrorByFieldType(e){switch(e){case Tc.CardCode:case Tc.CardCodeVerification:return{fieldType:e,message:\"Invalid card code\",type:\"invalid_card_code\"};case Tc.CardNumber:case Tc.CardNumberVerification:return{fieldType:e,message:\"Invalid card number\",type:\"invalid_card_number\"};case Tc.CardExpiry:case Tc.CardExpiryVerification:return{fieldType:e,message:\"Invalid card expiry\",type:\"invalid_card_expiry\"};default:return{fieldType:e,message:\"Invalid field\",type:\"invalid\"}}}mapValidationErrors(e={}){const t={};return Object.keys(e).forEach(n=>{var i,r;t[n]=[{message:(null===(r=null===(i=e[n])||void 0===i?void 0:i[0])||void 0===r?void 0:r.message)||\"\",type:n}]}),t}mapFieldType(e){switch(e){case\"name\":return Tc.CardName;case\"cardNumberField\":case\"number\":return this.isCreditCardForm?Tc.CardNumber:Tc.CardNumberVerification;case\"cardExpiryField\":case\"expiry\":return this.isCreditCardForm?Tc.CardExpiry:Tc.CardExpiryVerification;case\"cardCvvField\":case\"cvv\":return this.isCreditCardForm?Tc.CardCode:Tc.CardCodeVerification;default:throw new Error(\"Unexpected field type\")}}getCardFieldsOrThrow(){if(!this.cardFields)throw new ai(ni.PaymentNotInitialized);return this.cardFields}getInputStyles(e){var t,n,i;const r={\"font-size\":(null===(t=null==e?void 0:e.default)||void 0===t?void 0:t.fontSize)||\"1rem\",\"font-family\":(null===(n=null==e?void 0:e.default)||void 0===n?void 0:n.fontFamily)||\"Montserrat, Arial, Helvetica, sans-serif\",\"font-weight\":(null===(i=null==e?void 0:e.default)||void 0===i?void 0:i.fontWeight)||\"400\",outline:\"none\",padding:\"9px 13px\"},o=Object.assign(Object.assign({},r),{color:\"#333333\"});return{input:o,\".invalid\":Object.assign(Object.assign({},r),{color:\"red\"}),\".valid\":o,\":focus\":o}}stylizeInputContainers(e){Object.values(e||{}).forEach(e=>{const t=document.getElementById(`${(null==e?void 0:e.containerId)||\"\"}`);t&&(t.style.padding=\"0px\",t.style.boxShadow=\"none\",t.style.border=\"none\",t.style.background=\"transparent\",t.style.marginBottom=\"10px\",t.style.marginLeft=\"-5px\")})}hasUndefinedValues(){return!this.hostedFormOptions||Object.values(this.hostedFormOptions.fields).some(e=>void 0===e)}onChangeHandler(e,t){var n;null===(n=null==e?void 0:e.onValidate)||void 0===n||n.call(e,this.getValidityData(t))}onFocusHandler(e,t){var n;null===(n=null==e?void 0:e.onFocus)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onBlurHandler(e,t){var n;null===(n=null==e?void 0:e.onBlur)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onInputSubmitRequest(e,t){var n;null===(n=null==e?void 0:e.onEnter)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}shouldInitializePayPalFastlane(e){var t,n;const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(e),o=i.getPaymentProviderCustomer(),a=(s=o)&&(\"authenticationState\"in s||\"addresses\"in s||\"instruments\"in s)?o:{};var s;return(null===(t=null==r?void 0:r.initializationData)||void 0===t?void 0:t.isAcceleratedCheckoutEnabled)&&(null===(n=null==r?void 0:r.initializationData)||void 0===n?void 0:n.isBigCommercePaymentsAnalyticsV2Enabled)&&!(null==a?void 0:a.authenticationState)}initializePayPalFastlaneOrThrow(e){return Mc(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getPaymentMethodOrThrow(e),{initializationData:r}=i;if(!(null==r?void 0:r.connectClientToken))return;const o=yield this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(i,n.currency.code,n.id);yield this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(o,!!(null==r?void 0:r.isDeveloperModeApplicable))}catch(e){}})}}const Nc=Si(e=>new zc(e,Ir(e),Lr(),qr()),[{id:\"bigcommerce_payments_creditcards\"}]);var xc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Rc{constructor(e,t,n,i,r=3e3,o=3e5){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.bigCommercePaymentsSdkHelper=n,this.loadingIndicator=i,this.pollingInterval=r,this.maxPollingIntervalTime=o,this.pollingTimer=0,this.stopPolling=ce,this.isPollingEnabled=!1}initialize(e){return xc(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,bigcommerce_payments_apms:i}=e;if(this.bigCommercePaymentsAlternativeMethods=i,!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!i)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_apms\" argument is not provided.');const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(n,t),{orderId:a,shouldRenderFields:s}=o.initializationData||{},d=r.getStoreConfigOrThrow().checkoutSettings.features;this.isPollingEnabled=Pi(d,\"PAYPAL-5624.bcp_ideal_polling\"),a?this.orderId=a:(this.paypalApms=yield this.bigCommercePaymentsSdkHelper.getPayPalApmsSdk(o,r.getCartOrThrow().currency.code),this.loadingIndicatorContainer=i.container.split(\"#\")[1],this.renderButton(n,t,i),s&&this.renderFields(n,i))})}execute(e,t){return xc(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);const{methodId:r,gatewayId:o}=n;if(!this.orderId)throw new to;this.isPollingEnabled&&\"ideal\"===r&&(yield new Promise((e,t)=>{this.initializePollingMechanism(r,e,t,o)})),this.isNonInstantPaymentMethod(r)||(yield this.paymentIntegrationService.submitOrder(i,t)),yield this.bigCommercePaymentsIntegrationService.submitPayment(r,this.orderId,o)})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e;return this.orderId=void 0,this.isPollingEnabled&&this.resetPollingMechanism(),null===(e=this.bigCommercePaymentsButton)||void 0===e||e.close(),Promise.resolve()}initializePollingMechanism(e,t,n,i){return xc(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.bigCommercePaymentsIntegrationService.getOrderStatus(i),o=r===ur.Approved,a=r===ur.PollingError;if(o)return this.deInitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,i);yield this.reinitializeStrategy({methodId:e,gatewayId:i,bigCommercePaymentsAlternativeMethods:this.bigCommercePaymentsAlternativeMethods}),this.handleError(new bc)}catch(e){n()}})}deInitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deInitializePollingMechanism()}reinitializeStrategy(e){return xc(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}handleError(e){const{onError:t}=this.bigCommercePaymentsAlternativeMethods||{};this.isPollingEnabled&&this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderButton(e,t,n){const i=this.getPaypalAmpsSdkOrThrow(),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t),{buttonStyle:o}=r.initializationData||{},{container:a,onError:s,onRenderButton:d,submitForm:c}=n,l={fundingSource:e,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o),onInit:(e,t)=>n.onInitButton(t),createOrder:()=>this.onCreateOrder(e,t,n),onApprove:e=>this.handleApprove(e,c),onCancel:()=>{this.toggleLoadingIndicator(!1),this.deInitializePollingMechanism()},onError:e=>{this.deInitializePollingMechanism(),this.handleFailure(e,s)},onClick:(e,t)=>xc(this,void 0,void 0,function*(){return n.onValidate(t.resolve,t.reject)})};this.bigCommercePaymentsButton=i.Buttons(l),this.bigCommercePaymentsButton.isEligible()&&(d&&\"function\"==typeof d&&d(),this.bigCommercePaymentsButton.render(a))}onCreateOrder(e,t,n){return xc(this,void 0,void 0,function*(){const{onValidate:i}=n;yield i(()=>(this.toggleLoadingIndicator(!0),()=>Promise.resolve()),ce);const r=yield this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_apms\");if(this.isNonInstantPaymentMethod(e)){const n={useStoreCredit:!1},i={params:{methodId:e,gatewayId:t}};yield this.paymentIntegrationService.submitOrder(n,i),yield this.bigCommercePaymentsIntegrationService.submitPayment(e,r,t)}return r})}handleApprove({orderID:e},t){this.orderId=e,t()}handleFailure(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderFields(e,t){const n=this.getPaypalAmpsSdkOrThrow(),i=this.paymentIntegrationService.getState(),{firstName:r,lastName:o,email:a}=i.getBillingAddressOrThrow(),{apmFieldsContainer:s,apmFieldsStyles:d}=t;if(!s)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_apms\" argument should contain \"apmFieldsContainer\".');const c=document.querySelector(s);c&&(c.innerHTML=\"\");const l={fundingSource:e,style:d||{},fields:{name:{value:`${r} ${o}`},email:{value:a}}};n.PaymentFields(l).render(s)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isNonInstantPaymentMethod(e){return e.toUpperCase()in lr}getPaypalAmpsSdkOrThrow(){if(!this.paypalApms)throw new gi;return this.paypalApms}}const Fc=Si(e=>new Rc(e,Ir(e),Lr(),new Sd({containerStyles:uc})),[{gateway:\"bigcommerce_payments_apms\"}]);class Lc{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){const{gatewayId:t,methodId:n,bigcommerce_payments_apms:i}=e;if(this.bigCommercePaymentsAlternativeMethods=i,!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');return Promise.resolve()}execute(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);const{methodId:r,gatewayId:o}=n;try{const e={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:r,paypal_account:{order_id:yield this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_apms\",{gatewayId:\"bigcommerce_payments_apms\",methodId:r})}}};yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment({methodId:r,gatewayId:o,paymentData:e})}catch(e){if(function(e){var t,n;return ya(e)&&(null===(n=null===(t=e.body)||void 0===t?void 0:t.additional_action_required)||void 0===n?void 0:n.data.redirect_url)}(e)){const t=e.body.additional_action_required.data.redirect_url;return new Promise((e,n)=>{window.location.replace(t),n()})}return this.handleError(e),Promise.reject(e)}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new Pd)}deinitialize(){return Promise.resolve()}handleError(e){const{onError:t}=this.bigCommercePaymentsAlternativeMethods||{};t&&\"function\"==typeof t&&t(e)}}const Bc=Si(e=>new Lc(e,Ir(e)),[{gateway:\"bigcommerce_payments_apms\",id:\"klarna\"},{gateway:\"bigcommerce_payments_apms\",id:\"afterpay\"}]);var jc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Uc{constructor(e,t,n){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.loadingIndicator=n}initialize(e){var t,n;return jc(this,void 0,void 0,function*(){const{methodId:i,bigcommerce_payments_venmo:r}=e||{};if(!i)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(i);const o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i);(null===(t=o.initializationData)||void 0===t?void 0:t.orderId)?this.orderId=null===(n=o.initializationData)||void 0===n?void 0:n.orderId:(yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i),this.loadingIndicatorContainer=r.container.split(\"#\")[1],this.renderButton(i,r))})}execute(e,t){return jc(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);if(!this.orderId)throw new to;yield this.paymentIntegrationService.submitOrder(i,t),yield this.bigCommercePaymentsIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){const n=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:d,onValidate:c,submitForm:l}=t,u={fundingSource:n.FUNDING.VENMO,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o),createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmocheckout\"),onClick:(e,t)=>this.handleClick(t,c),onApprove:e=>this.handleApprove(e,l),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.paypalButton=n.Buttons(u),!this.paypalButton.isEligible())throw new wi(\"Venmo is not available for your region. Please another payment method instead.\");d&&\"function\"==typeof d&&d(),this.paypalButton.render(a)}handleClick(e,t){return jc(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;yield t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,t(),this.toggleLoadingIndicator(!1)}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const qc=Si(e=>new Uc(e,Ir(e),new Sd({styles:{backgroundColor:\"black\"}})),[{id:\"bigcommerce_payments_venmo\"}]);class Vc{initialize(e){this._blueSnapSdk=e}initialize3ds(e,t){return n=this,i=void 0,o=function*(){const n=this._getBlueSnapSdk();return new Promise((i,r)=>{n.threeDsPaymentsSetup(e,e=>\"1\"===e.code?i(e.threeDSecure.threeDSecureReferenceId):r(new eo)),n.threeDsPaymentsSubmitData(t)})},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}_getBlueSnapSdk(){return oi(this._blueSnapSdk,()=>new ai(ni.PaymentNotInitialized))}}function Gc(e){return Tc.CardNumber in e}function Hc(e){return Tc.CardCodeVerification in e||Tc.CardNumberVerification in e}var Wc,$c,Yc,Kc,Jc,Zc=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Qc{constructor(e,t,n,i){this._scriptLoader=e,this._paymentIntegrationService=t,this._blueSnapDirectHostedForm=n,this._blueSnapDirect3ds=i}initialize(e){return Zc(this,void 0,void 0,function*(){const{methodId:t,gatewayId:n,creditCard:i}=e;if(!n||!i)throw new _i;const r=yield this._paymentIntegrationService.loadPaymentMethod(n,{params:{method:t,bigpayToken:i.bigpayToken}}),{config:{testMode:o,is3dsEnabled:a},clientToken:s}=r.getPaymentMethodOrThrow(t,n);if(this._blueSnapSdk=yield this._scriptLoader.load(o),this._paymentFieldsToken=s,this._shouldUseHostedFields=Gc(i.form.fields)||Hc(i.form.fields)&&!!i.form.fields.cardNumberVerification,this._shouldUseHostedFields){this._blueSnapDirectHostedForm.initialize(this._blueSnapSdk,i.form.fields);try{yield this._blueSnapDirectHostedForm.attach(this._getPaymentFieldsToken(),i,a)}catch(e){if(e instanceof _i)return;throw e}}})}execute(e){return Zc(this,void 0,void 0,function*(){if(!e.payment)throw new uo([\"payment\"]);if(!this._blueSnapSdk)throw new uo([\"payment\"]);const{paymentData:t}=e.payment,{shouldSaveInstrument:n,shouldSetAsDefaultInstrument:i}=qd(t)?t:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1},r=this._getPaymentFieldsToken();let o;const{is3dsEnabled:a}=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e.payment.methodId,e.payment.gatewayId).config,s=this._shouldUseHostedFields?yield this._blueSnapDirectHostedForm.validate().submit(a?this._getBlueSnapDirectThreeDSecureData():void 0,!(qd(t)&&Fd(t))):void 0;if(yield this._paymentIntegrationService.submitOrder(),qd(t)&&Fd(t)&&this._paymentFieldsToken&&t.instrumentId){if(a){this._blueSnapDirect3ds.initialize(this._blueSnapSdk);const{last4:e,brand:n}=this._paymentIntegrationService.getState().getCardInstrumentOrThrow(t.instrumentId),i=Object.assign({last4Digits:e,ccType:n.toUpperCase()},this._getBlueSnapDirectThreeDSecureData());o=yield this._blueSnapDirect3ds.initialize3ds(this._paymentFieldsToken,i)}yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e.payment),{paymentData:Object.assign(Object.assign(Object.assign({instrumentId:t.instrumentId},this._shouldUseHostedFields?{nonce:r}:{}),o?{deviceSessionId:o}:{}),{shouldSetAsDefaultInstrument:!!i})}))}else yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e.payment),{paymentData:{formattedPayload:{credit_card_token:{token:JSON.stringify({pfToken:r,cardHolderName:s&&s.cardHolderName})},vault_payment_instrument:n,set_as_default_stored_instrument:i}}}))})}finalize(){return Promise.reject(new Pd)}deinitialize(){return this._shouldUseHostedFields&&this._blueSnapDirectHostedForm.detach(),Promise.resolve()}_getBlueSnapDirectThreeDSecureData(){var e;const{getBillingAddress:t,getShippingAddress:n,getCustomer:i,getCheckoutOrThrow:r,getCartOrThrow:o}=this._paymentIntegrationService.getState(),a=t(),s=n(),d=(null===(e=i())||void 0===e?void 0:e.email)||(null==a?void 0:a.email),c=(null==a?void 0:a.phone)||(null==s?void 0:s.phone);return Object.assign(Object.assign(Object.assign(Object.assign({amount:r().outstandingBalance,currency:o().currency.code},d&&{email:d}),c&&{phone:c}),a&&{billingFirstName:a.firstName,billingLastName:a.lastName,billingCountry:a.countryCode,billingCity:a.city,billingAddress:`${a.address1} ${a.address2}`.trim(),billingZip:a.postalCode}),s&&{shippingFirstName:s.firstName,shippingLastName:s.lastName,shippingCountry:s.countryCode,shippingCity:s.city,shippingAddress:`${s.address1} ${s.address2}`.trim(),shippingZip:s.postalCode})}_getPaymentFieldsToken(){return oi(this._paymentFieldsToken,()=>new ii(ti.MissingPaymentToken))}}!function(e){e.AMEX=\"american-express\",e.CHINA_UNION_PAY=\"unionpay\",e.DINERS=\"diners-club\",e.DISCOVER=\"discover\",e.JCB=\"jcb\",e.MASTERCARD=\"mastercard\",e.UNKNOWN=\"unknown\",e.VISA=\"visa\"}(Wc||(Wc={})),function(e){e.ON_BLUR=\"onBlur\",e.ON_SUBMIT=\"onSubmit\"}($c||($c={})),function(e){e.EMPTY=\"empty\",e.INVALID=\"invalid\",e.THREE_DS_NOT_ENABLED=\"3D Secure is not enabled\"}(Yc||(Yc={})),function(e){e.CC_NOT_SUPORTED=\"22013\",e.ERROR_403=\"403\",e.ERROR_404=\"404\",e.ERROR_500=\"500\",e.INVALID_OR_EMPTY=\"10\",e.SESSION_EXPIRED=\"400\",e.THREE_DS_AUTH_FAILED=\"14101\",e.THREE_DS_CLIENT_ERROR=\"14103\",e.THREE_DS_MISSING_FIELDS=\"14102\",e.THREE_DS_NOT_ENABLED=\"14100\",e.TOKEN_EXPIRED=\"14040\",e.TOKEN_NOT_ASSOCIATED=\"14042\",e.TOKEN_NOT_FOUND=\"14041\"}(Kc||(Kc={})),function(e){e.CardCode=\"cvv\",e.CardExpiry=\"exp\",e.CardName=\"noc\",e.CardNumber=\"ccn\"}(Jc||(Jc={}));const Xc={[Jc.CardNumber]:Tc.CardNumber,[Jc.CardExpiry]:Tc.CardExpiry,[Jc.CardName]:Tc.CardName,[Jc.CardCode]:Tc.CardCode},el={empty:{[Tc.CardNumber]:{fieldType:\"cardNumber\",message:\"Credit card number is required\",type:\"required\"},[Tc.CardNumberVerification]:{fieldType:\"cardNumber\",message:\"Credit card number is required\",type:\"required\"},[Tc.CardExpiry]:{fieldType:\"cardExpiry\",message:\"Expiration date is required\",type:\"required\"},[Tc.CardCode]:{fieldType:\"cardCode\",message:\"CVV is required\",type:\"required\"},[Tc.CardName]:{fieldType:\"cardName\",message:\"Full name is required\",type:\"required\"}},invalid:{[Tc.CardNumber]:{fieldType:\"cardNumber\",message:\"Credit card number must be valid\",type:\"invalid_card_number\"},[Tc.CardNumberVerification]:{fieldType:\"cardNumber\",message:\"Credit card number must be valid\",type:\"invalid_card_number\"},[Tc.CardExpiry]:{fieldType:\"cardExpiry\",message:\"Expiration date must be a valid future date in MM / YY format\",type:\"invalid_card_expiry\"},[Tc.CardCode]:{fieldType:\"cardCode\",message:\"CVV must be valid\",type:\"invalid_card_code\"},[Tc.CardName]:{fieldType:\"cardName\",message:\"Full name is required\",type:\"required\"}}};class tl{constructor(e,t){this._nameOnCardInput=e,this._hostedInputValidator=t}initialize(e,t){this._blueSnapSdk=e,t&&(Gc(t)?this._hostedInputValidator.initialize():Hc(t)&&t.cardNumberVerification&&this._hostedInputValidator.initializeValidationFields())}attach(e,t,n){var i,r,o,a,s=t.form,{fields:d}=s,c=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(s,[\"fields\"]);return void 0===n&&(n=!1),i=this,r=void 0,a=function*(){const t=this._getBlueSnapSdk();if(!Gc(d)&&!Hc(d))throw new _i(\"Field options must be of type HostedCardFieldOptionsMap\");return this._onValidate=c.onValidate,Gc(d)&&this._setCustomBlueSnapAttributes(d),Hc(d)&&this._setCustomStoredCardsBlueSnapAttributes(d),new Promise(i=>{const r=this._getHostedPaymentFieldsOptions(e,d,c,i,n);t.hostedPaymentFieldsCreate(r),Gc(d)&&this._nameOnCardInput.attach(r,d.cardName.accessibilityLabel,d.cardName.placeholder)})},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}d((a=a.apply(i,r||[])).next())})}validate(){var e;const t=this._hostedInputValidator.validate();if(null===(e=this._onValidate)||void 0===e||e.call(this,t),!t.isValid){const e=Object.entries(t.errors).reduce((e,[t,n])=>Object.assign(Object.assign({},e),{[t]:n.map(({message:e,type:t})=>({message:e,type:t}))}),{});throw new ho(e)}return this}submit(e,t=!1){return new Promise((n,i)=>this._getBlueSnapSdk().hostedPaymentFieldsSubmitData(e=>this._isBlueSnapDirectCallbackError(e)?i(new eo(e.statusCode===Kc.THREE_DS_AUTH_FAILED?e.error[0].errorDescription:`Submission failed with status: ${e.statusCode} and errors: ${JSON.stringify(e.error)}`)):n(Object.assign(Object.assign({},e.cardData),t?{cardHolderName:this._nameOnCardInput.getValue()}:{})),e))}detach(){this._nameOnCardInput.detach()}_isBlueSnapDirectCallbackError(e){return\"error\"in e}_getHostedPaymentFieldsOptions(e,t,{onFocus:n,onBlur:i,onValidate:r,onCardTypeChange:o,onEnter:a,styles:s},d,c){var l;return Object.assign(Object.assign(Object.assign({token:e,onFieldEventHandler:{setupComplete:()=>d(),onFocus:this._usetUiEventCallback(n),onBlur:this._usetUiEventCallback(i),onError:this._handleError(r),onType:(e,t)=>null==o?void 0:o({cardType:Wc[t]}),onEnter:this._usetUiEventCallback(a),onValid:e=>null==r?void 0:r(this._hostedInputValidator.validate({tagId:e}))}},Gc(t)&&{ccnPlaceHolder:t.cardNumber.placeholder||\"\",cvvPlaceHolder:(null===(l=t.cardCode)||void 0===l?void 0:l.placeholder)||\"\",expPlaceHolder:t.cardExpiry.placeholder||\"MM / YY\"}),s&&{style:this._mapStyles(s)}),{\"3DS\":c})}_mapStyles({default:e,error:t,focus:n}){return Object.entries(Object.assign(Object.assign(Object.assign({},e&&{input:e}),t&&{\".invalid\":t}),n&&{\":focus\":n})).reduce((e,[t,n])=>Object.assign(Object.assign({},e),{[t]:Object.entries(n).reduce((e,[t,n])=>Object.assign(Object.assign({},e),{[te(t)]:n}),{})}),{})}_handleError(e){return(t,n,i,r)=>{if(n===Kc.INVALID_OR_EMPTY&&t&&function(e){return void 0!==e&&[Yc.EMPTY,Yc.INVALID].includes(e)}(i))return null==e?void 0:e(this._hostedInputValidator.validate({tagId:t,errorDescription:i}));throw new eo(`An unexpected error has occurred: ${JSON.stringify({tagId:t,errorCode:n,errorDescription:i,eventOrigin:r})}`)}}_usetUiEventCallback(e){return t=>{e&&e({fieldType:Xc[t]})}}_getBlueSnapSdk(){return oi(this._blueSnapSdk,()=>new ai(ni.PaymentNotInitialized))}_setCustomBlueSnapAttributes(e){const{cardNumber:t,cardExpiry:n,cardCode:i,cardName:r}=e,o=document.getElementById(t.containerId),a=document.getElementById(n.containerId),s=i&&document.getElementById(i.containerId),d=document.getElementById(r.containerId);if(!(o&&a&&s&&d))throw new _i(\"Unable to create hosted payment fields to invalid HTML container elements.\");o.dataset.bluesnap=Jc.CardNumber,a.dataset.bluesnap=Jc.CardExpiry,s.dataset.bluesnap=Jc.CardCode,d.dataset.bluesnap=Jc.CardName}_setCustomStoredCardsBlueSnapAttributes(e){const{cardNumberVerification:t,cardCodeVerification:n}=e,i=t&&document.getElementById(t.containerId),r=n&&document.getElementById(n.containerId);(i||r)&&(i&&(i.dataset.bluesnap=Jc.CardNumber),r&&(r.dataset.bluesnap=Jc.CardCode))}}class nl{constructor(){this._errors={}}initialize(){this._errors={cardNumber:[el.empty.cardNumber],cardExpiry:[el.empty.cardExpiry],cardCode:[el.empty.cardCode],cardName:[el.empty.cardName]}}initializeValidationFields(){this._errors={cardNumberVerification:[el.empty.cardNumber]}}validate(e){return e&&this._updateErrors(e.tagId,e.errorDescription),{isValid:Object.values(this._errors).every(e=>0===e.length),errors:this._errors}}_updateErrors(e,t){const n=this._errors.cardNumberVerification?Tc.CardNumberVerification:Xc[e];this._errors[n]=t?[el[t][n]]:[]}}class il{attach({style:e,onFieldEventHandler:{onFocus:t,onBlur:n,onValid:i,onError:r,onEnter:o}={}},a,s){var d;this._style=e,this._create(),this._getInput().addEventListener(\"focus\",this._handleFocus(t)),this._getInput().addEventListener(\"blur\",this._handleBlur(n,i,r)),this._getInput().addEventListener(\"enter\",this._handleEnter(o)),a&&this._getInput().setAttribute(\"aria-label\",a),s&&(this._getInput().placeholder=s),null===(d=document.querySelector('[data-bluesnap=\"noc\"]'))||void 0===d||d.appendChild(this._getInput())}getValue(){return this._getInput().value}detach(){this._input&&(this._input.remove(),this._input=void 0)}_handleFocus(e){return()=>{var t;this._applyStyles(null===(t=this._style)||void 0===t?void 0:t[\":focus\"]),null==e||e(Jc.CardName)}}_handleBlur(e,t,n){return({target:i})=>{var r,o;null==e||e(Jc.CardName),i instanceof HTMLInputElement&&(/\\w{1,200}/.test(i.value)?(this._applyStyles(null===(r=this._style)||void 0===r?void 0:r.input),null==t||t(Jc.CardName)):(this._applyStyles(null===(o=this._style)||void 0===o?void 0:o[\".invalid\"]),null==n||n(Jc.CardName,Kc.INVALID_OR_EMPTY,Yc.EMPTY,$c.ON_BLUR)))}}_handleEnter(e){return()=>null==e?void 0:e(Jc.CardName)}_applyStyles(e={}){const t={color:e.color,fontFamily:e[\"font-family\"],fontSize:e[\"font-size\"],fontWeight:e[\"font-weight\"]},n=Object.keys(t);n.every(e=>[\"color\",\"fontFamily\",\"fontSize\",\"fontWeight\"].includes(e))&&n.forEach(e=>{t[e]&&(this._getInput().style[e]=t[e]||\"\")})}_configureInput(){this._getInput().autocomplete=\"cc-name\",this._getInput().id=Jc.CardName,this._getInput().inputMode=\"text\",this._getInput().maxLength=200,this._getInput().style.backgroundColor=\"transparent\",this._getInput().style.border=\"0\",this._getInput().style.height=\"100%\",this._getInput().style.margin=\"0\",this._getInput().style.outline=\"none\",this._getInput().style.padding=\"0\",this._getInput().style.width=\"100%\",this._getInput().type=\"text\"}_getInput(){return oi(this._input,()=>new ai(ni.PaymentNotInitialized))}_create(){var e;this._input=document.createElement(\"input\"),this._configureInput(),this._applyStyles(null===(e=this._style)||void 0===e?void 0:e.input)}}var rl;!function(e){e.PRODUCTION=\"https://pay.bluesnap.com/web-sdk/5/bluesnap.js\",e.SANDBOX=\"https://sandpay.bluesnap.com/web-sdk/5/bluesnap.js\"}(rl||(rl={}));class ol{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e=!1){return t=this,n=void 0,r=function*(){if(this._window.bluesnap)return this._window.bluesnap;if(yield this._scriptLoader.loadScript(e?rl.SANDBOX:rl.PRODUCTION),!this._window.bluesnap)throw new gi;return this._window.bluesnap},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}}const al=Si(e=>new Qc(new ol(a()),e,new tl(new il,new nl),new Vc),[{id:\"credit_card\",gateway:\"bluesnapdirect\"}]);class sl{constructor(e){this._paymentIntegrationService=e}execute(e){return t=this,n=void 0,r=function*(){const t=this._formatePaymentPayload(e);yield this._paymentIntegrationService.submitOrder();try{yield this._paymentIntegrationService.submitPayment(t)}catch(e){if(this._isBlueSnapDirectRedirectResponse(e)){const t=e.body.provider_data&&JSON.parse(e.body.provider_data);let n=e.body.additional_action_required.data.redirect_url;if(function(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;return!!t.merchantid&&\"string\"==typeof t.merchantid}(t)){const e=new URLSearchParams(t).toString();n=`${n}&${e}`}return new Promise(()=>window.location.replace(n))}return Promise.reject(e)}},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}initialize(){return Promise.resolve()}finalize(){return Promise.reject(new Pd)}deinitialize(){return Promise.resolve()}_formatePaymentPayload({payment:e}){if(!e)throw new uo([\"payment\"]);return e.paymentData&&Fd(e.paymentData)&&qd(e.paymentData)?Object.assign(Object.assign({},e),{paymentData:{instrumentId:e.paymentData.instrumentId,shouldSetAsDefaultInstrument:!!e.paymentData.shouldSetAsDefaultInstrument}}):(t=e.paymentData,Boolean(\"object\"==typeof t&&null!==t&&\"accountNumber\"in t&&\"accountType\"in t&&\"shopperPermission\"in t&&\"routingNumber\"in t)?Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{ecp:Object.assign({account_number:e.paymentData.accountNumber,account_type:e.paymentData.accountType,shopper_permission:e.paymentData.shopperPermission,routing_number:e.paymentData.routingNumber},e.paymentData.companyName?{company_name:e.paymentData.companyName}:{}),vault_payment_instrument:e.paymentData.shouldSaveInstrument,set_as_default_stored_instrument:e.paymentData.shouldSetAsDefaultInstrument}}}):(n=e.paymentData,Boolean(\"object\"==typeof n&&null!==n&&\"iban\"in n&&\"firstName\"in n&&\"lastName\"in n&&\"shopperPermission\"in n)?Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{sepa_direct_debit:{iban:e.paymentData.iban,first_name:e.paymentData.firstName,last_name:e.paymentData.lastName,shopper_permission:e.paymentData.shopperPermission},vault_payment_instrument:e.paymentData.shouldSaveInstrument,set_as_default_stored_instrument:e.paymentData.shouldSetAsDefaultInstrument}}}):function(e){return Boolean(\"object\"==typeof e&&null!==e&&\"bic\"in e)}(e.paymentData)?Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{ideal:{bic:e.paymentData.bic}}}}):function(e){return Boolean(\"object\"==typeof e&&null!==e&&\"iban\"in e&&!(\"firstName\"in e)&&!(\"lastName\"in e)&&!(\"shopperPermission\"in e))}(e.paymentData)?Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{pay_by_bank:{iban:e.paymentData.iban}}}}):{methodId:e.methodId}));var t,n}_isBlueSnapDirectRedirectResponse(e){var t;if(\"object\"!=typeof e||null===e)return!1;const n=e;if(!n.body)return!1;const i=n.body;return\"additional_action_required\"===i.status&&!!(null===(t=i.additional_action_required)||void 0===t?void 0:t.data.redirect_url)}}const dl=Si(e=>new sl(e),[{gateway:\"bluesnapdirect\"}]);var cl;!function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(cl||(cl={}));const ll=cl;var ul=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class hl{constructor(e){this._paymentIntegrationService=e}execute(e,t){return ul(this,void 0,void 0,function*(){const{payment:n}=e;if(!n)throw new uo([\"payment\"]);if(!this._initializeOptions)throw new ai(ni.PaymentNotInitialized);const{onLoad:i,style:r}=this._initializeOptions,o=this._createIframe(\"bluesnapv2_hosted_payment_page\",r),a=new Tn(new Promise(ce));i(o,()=>a.cancel(new Yi)),yield this._paymentIntegrationService.submitOrder(e,t),yield this._paymentIntegrationService.initializeOffsitePayment({methodId:n.methodId,gatewayId:n.gatewayId,shouldSaveInstrument:!1,target:o.name,promise:a.promise})})}finalize(e){return ul(this,void 0,void 0,function*(){const t=this._paymentIntegrationService.getState(),n=t.getOrder(),i=t.getPaymentStatus();if(!n||i!==ll.ACKNOWLEDGE&&i!==ll.FINALIZE)return Promise.reject(new Pd);yield this._paymentIntegrationService.finalizeOrder(e)})}initialize(e){return ul(this,void 0,void 0,function*(){this._initializeOptions=e&&e.bluesnapv2,yield Promise.resolve()})}deinitialize(){return Promise.resolve()}_createIframe(e,t){const n=document.createElement(\"iframe\");if(n.setAttribute(\"sandbox\",\"allow-top-navigation allow-scripts allow-forms allow-same-origin\"),n.name=e,t){const{border:e,height:i,width:r}=t;n.style.border=null!=e?e:\"\",n.style.height=null!=i?i:\"\",n.style.width=null!=r?r:\"\"}return n}}const pl=Si(e=>new hl(e),[{gateway:\"bluesnapv2\"}]);class ml{constructor(e){this.storage=e}saveExtraItemsData(e,t){const n=[...t.physicalItems,...t.digitalItems].reduce((e,t)=>(e[t.productId]={brand:t.brand?t.brand:\"\",category:t.categoryNames?t.categoryNames.join(\", \"):\"\"},e),{});try{return this.storage.setItem(this.getStorageKey(e),JSON.stringify(n)),n}catch(e){return{}}}readExtraItemsData(e){try{const t=this.storage.getItem(this.getStorageKey(e));if(!t)return null;const n=JSON.parse(t);return function(e){if(!Z(e))return!1;const t=Object.values(e).some(e=>!Z(e)||!(\"brand\"in e)||!(\"category\"in e));return Boolean(!t)}(n)?n:null}catch(e){return null}}clearExtraItemData(e){try{this.storage.removeItem(this.getStorageKey(e))}catch(e){}}getStorageKey(e){return e?`ORDER_ITEMS_${e}`:\"\"}}function yl(e){return Boolean(e.hasOwnProperty(\"analytics\"))}function gl(e){return\"object\"==typeof e&&null!==e&&\"shouldCreateAccount\"in e}class vl extends ei{constructor(e){super(),this.errorCode=e,this.name=\"BoltPaymentsFieldError\",this.type=\"bolt_payments_field_error\",this.body={errors:[vl.getError(e)]}}static getError(e){switch(e){case\"1000\":case\"2000\":case\"3000\":return{code:\"invalid_number\"};case\"1001\":case\"2001\":case\"3001\":return{code:\"invalid_expiry_date\"};case\"1002\":case\"2002\":return{code:\"invalid_cvc\"};case\"1003\":return{code:\"invalid_zip\"};case\"2003\":return{code:\"incorrect_zip\"};default:return{code:\"general_error\"}}}}var fl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Sl{constructor(e,t,n){this.paymentIntegrationService=e,this.boltScriptLoader=t,this.analyticsExtraItemsManager=n,this.useBoltClient=!1,this.useBoltEmbedded=!1}initialize(e){return fl(this,void 0,void 0,function*(){const{bolt:t,methodId:n}=e,{containerId:i,onPaymentSelect:r,useBigCommerceCheckout:o}=t||{};if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!o)return void(this.boltClient=yield this.boltScriptLoader.loadBoltClient());const a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId),{initializationData:s,config:d}=a,{publishableKey:c,developerConfig:l,embeddedOneClickEnabled:u}=s||{},{testMode:h}=d;if(!c)throw new ii(ti.MissingPaymentMethod);if(this.boltClient=yield this.boltScriptLoader.loadBoltClient(c,h,l),this.useBoltClient=!u,this.useBoltEmbedded=!!u,this.useBoltEmbedded){if(!i)throw new _i('Unable to initialize payment because \"options.bolt.containerId\" argument is not provided.');if(!r)throw new _i('Unable to initialize payment because \"options.bolt.onPaymentSelect\" argument is not provided.');this.boltEmbedded=yield this.boltScriptLoader.loadBoltEmbedded(c,h,l),this.mountBoltEmbeddedField(i),r(yield this.hasBoltAccount())}})}deinitialize(){var e;return null===(e=this.embeddedField)||void 0===e||e.unmount(),this.boltClient=void 0,this.boltEmbedded=void 0,Promise.resolve()}finalize(){return Promise.reject(new Pd)}execute(e,t){return fl(this,void 0,void 0,function*(){this.setExtraItemsForAnalytics();const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{methodId:r,paymentData:o}=n||{};let a;if(!e.payment)throw new uo([\"payment\"]);if(!r)throw new ii(ti.MissingPaymentMethod);if(!o||!function(e){return Boolean(Z(e)&&(\"shouldSaveInstrument\"in e||\"nonce\"in e||gl(e)))}(o))throw new ii(ti.MissingPayment);yield this.paymentIntegrationService.submitOrder(i,t),a=this.useBoltClient?yield this.getBoltClientPaymentPayload(r,o,t):this.useBoltEmbedded?yield this.getBoltEmbeddedPaymentPayload(r,o):yield this.getBoltFullCheckoutPaymentPayload(r,o),yield this.paymentIntegrationService.submitPayment(a)})}getBoltClientPaymentPayload(e,t,n){return fl(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadPaymentMethod(e,n);const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(e).clientToken,{isStoreCreditApplied:o}=i.getCheckoutOrThrow(),{shouldSaveInstrument:a}=t,s=this.getBoltClientOrThrow();if(yield this.paymentIntegrationService.applyStoreCredit(o),!r)throw new ii(ti.MissingPaymentMethod);const d=yield new Promise((e,t)=>{const n={success:(n,i)=>{n.reference?e(n):t(new eo(\"Unable to proceed because transaction reference is unavailable. Please try again later.\")),i()},close:()=>{t(new Yi)}};s.configure({orderToken:r},{},n).open()});return{methodId:e,paymentData:{nonce:d.reference,shouldSaveInstrument:a}}})}getBoltEmbeddedPaymentPayload(e,t){var n;return fl(this,void 0,void 0,function*(){if(!gl(t))throw new ii(ti.MissingPayment);const i=this.validateTokenizeResultOrThrow(yield null===(n=this.embeddedField)||void 0===n?void 0:n.tokenize());return{methodId:e,paymentData:{formattedPayload:{credit_card_token:{token:i.token,last_four_digits:i.last4,iin:i.bin,expiration_month:+i.expiration.split(\"-\")[1],expiration_year:+i.expiration.split(\"-\")[0]},provider_data:{create_account:!!t.shouldCreateAccount,embedded_checkout:!0}}}}})}getBoltFullCheckoutPaymentPayload(e,t){return fl(this,void 0,void 0,function*(){yield this.setBoltOrderId();const n=this.getBoltClientOrThrow(),i=yield n.getTransactionReference();if(!i)throw new to;return{methodId:e,paymentData:Object.assign(Object.assign({},t),{nonce:i})}})}getBoltClientOrThrow(){if(!this.boltClient)throw new ai(ni.PaymentNotInitialized);return this.boltClient}getBoltEmbeddedOrThrow(){if(!this.boltEmbedded)throw new ai(ni.PaymentNotInitialized);return this.boltEmbedded}hasBoltAccount(){return fl(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState(),t=e.getCustomer(),n=e.getBillingAddress(),i=(null==t?void 0:t.email)||(null==n?void 0:n.email)||\"\",r=this.getBoltClientOrThrow();try{return yield r.hasBoltAccount(i)}catch(e){throw new to}})}setBoltOrderId(){return fl(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getOrderOrThrow(),t=this.getBoltClientOrThrow();try{yield t.setOrderId(e.orderId)}catch(e){throw new to}})}mountBoltEmbeddedField(e){const t=this.getBoltEmbeddedOrThrow().create(\"payment_field\",{styles:{backgroundColor:\"#fff\"},renderSeparateFields:!0});t.mount(`#${e}`),this.embeddedField=t}validateTokenizeResultOrThrow(e){if(!e)throw new to;if(e instanceof Error)throw new vl(e.message);const{token:t,last4:n,bin:i,expiration:r}=e,o=+n,a=+i,s=+`${r}`.split(\"-\")[1],d=+`${r}`.split(\"-\")[0];if(!t||Number.isNaN(o)||Number.isNaN(a)||Number.isNaN(s)||Number.isNaN(d))throw new uo;return e}setExtraItemsForAnalytics(){const e=this.paymentIntegrationService.getState(),t=e.getStoreConfigOrThrow(),n=e.getCartOrThrow();if(t.checkoutSettings.isAnalyticsEnabled&&yl(window)){const{id:e,lineItems:t}=n;this.analyticsExtraItemsManager.saveExtraItemsData(e,t)}}}const _l=Si(e=>new Sl(e,new co(a()),new ml(Te)),[{id:\"bolt\"}]);function wl(e){return!!e&&\"accountNumber\"in e&&\"routingNumber\"in e&&\"ownershipType\"in e&&\"accountType\"in e}var Il=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Cl{constructor(e,t){this.paymentIntegrationService=e,this.braintreeSdk=t}initialize(e){return Il(this,void 0,void 0,function*(){const{methodId:t,braintreeach:n}=e||{};if(!t)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');this.getMandateText=null==n?void 0:n.getMandateText,yield this.paymentIntegrationService.loadPaymentMethod(t);const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{clientToken:r,initializationData:o}=i;if(!r||!o)throw new ii(ti.MissingPaymentMethod);this.braintreeSdk.initialize(r);try{this.usBankAccount=yield this.braintreeSdk.getUsBankAccount()}catch(e){this.handleBraintreeError(e)}})}execute(e,t){return Il(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);const r=Fd(n.paymentData||{}),o=r?yield this.tokenizePaymentForVaultedInstrument(n):yield this.tokenizePayment(n),a=r?yield this.preparePaymentDataForVaultedInstrument(o,n):yield this.preparePaymentData(o,n);yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment(a)})}finalize(){return Promise.reject(new Pd)}deinitialize(){return Il(this,void 0,void 0,function*(){return yield this.braintreeSdk.deinitialize(),Promise.resolve()})}tokenizePayment({paymentData:e}){return Il(this,void 0,void 0,function*(){const t=this.getUsBankAccountOrThrow();if(!wl(e))throw new uo([\"payment.paymentData\"]);const n=Fd(e)?\"The data are used for stored instrument verification\":\"function\"==typeof this.getMandateText&&this.getMandateText();if(!n)throw new _i(\"Unable to proceed because getMandateText is not provided or returned undefined value.\");try{const{nonce:i}=yield t.tokenize({bankDetails:this.getBankDetails(e),mandateText:n});return i}catch(e){this.handleBraintreeError(e)}})}tokenizePaymentForVaultedInstrument(e){return Il(this,void 0,void 0,function*(){const{methodId:t,paymentData:n={}}=e,i=this.paymentIntegrationService.getState(),{config:r}=i.getPaymentMethodOrThrow(t);if(!r.isVaultingEnabled)throw new _i(\"Vaulting is disabled but a vaulted instrument was being used for this transaction\");return wl(n)?this.tokenizePayment(e):null})}preparePaymentData(e,t){return Il(this,void 0,void 0,function*(){const{methodId:n,paymentData:i={}}=t;if(!wl(i))throw new uo([\"payment.paymentData\"]);const{deviceData:r}=yield this.braintreeSdk.getDataCollectorOrThrow(),{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a,routingNumber:s,accountNumber:d}=i;return{methodId:n,paymentData:{deviceSessionId:r,shouldSetAsDefaultInstrument:a,shouldSaveInstrument:o,formattedPayload:{tokenized_bank_account:{issuer:s,masked_account_number:d.substr(-4),token:e}}}}})}preparePaymentDataForVaultedInstrument(e,t){return Il(this,void 0,void 0,function*(){const{methodId:n,paymentData:i={}}=t;if(!Fd(i)||!qd(i))throw new uo([\"payment.paymentData\"]);const{deviceData:r}=yield this.braintreeSdk.getDataCollectorOrThrow(),{instrumentId:o,shouldSetAsDefaultInstrument:a}=i;return{methodId:n,paymentData:Object.assign({deviceSessionId:r,instrumentId:o,shouldSetAsDefaultInstrument:a},e&&{nonce:e})}})}getBankDetails(e){const t=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),n=e.ownershipType.toLowerCase(),i=e.accountType.toLowerCase();return Object.assign(Object.assign({accountNumber:e.accountNumber,routingNumber:e.routingNumber,ownershipType:n},\"personal\"===n?{firstName:e.firstName,lastName:e.lastName}:{businessName:e.businessName}),{accountType:i,billingAddress:{streetAddress:t.address1,extendedAddress:t.address2,locality:t.city,region:t.stateOrProvinceCode,postalCode:t.postalCode}})}getUsBankAccountOrThrow(){if(!this.usBankAccount)throw new ai(ni.PaymentNotInitialized);return this.usBankAccount}handleBraintreeError(e){if(!Li(e))throw e;throw new eo(e.message)}}const bl=Si(e=>new Cl(e,(e=>{const t=new Ti(e),n=new $i(a(),window,t);return new Vi(n)})(e)),[{id:\"braintreeach\"}]);class Pl{constructor(e){this.paymentIntegrationService=e,this.braintreeHostWindow=window}render(e,t,n){const i=t&&document.getElementById(t);if(this.braintreeHostWindow.paypal&&i){const r=this.paymentIntegrationService.getState(),o=r.getCartOrThrow(),a=r.getBillingAddressOrThrow(),s=r.getPaymentMethodOrThrow(e);if(!s.initializationData)return;const{paypalBNPLConfiguration:d=[]}=s.initializationData,c=n===_o.PAYMENT?\"checkout\":n,l=d&&d.find(({id:e})=>e===c);if(!l||!l.status)return;n===_o.CART&&(i.removeAttribute(\"data-pp-style-logo-type\"),i.removeAttribute(\"data-pp-style-logo-position\"),i.removeAttribute(\"data-pp-style-text-color\"),i.removeAttribute(\"data-pp-style-text-size\")),this.braintreeHostWindow.paypal.Messages({amount:o.cartAmount,buyerCountry:a.countryCode,placement:n,style:this.getPaypalMessagesStylesFromBNPLConfig(l)}).render(`#${t}`)}}getPaypalMessagesStylesFromBNPLConfig({styles:e}){const t={};return e.color&&(t.color=e.color),e.layout&&(t.layout=e.layout),(e[\"logo-type\"]||e[\"logo-position\"])&&(t.logo={},e[\"logo-type\"]&&(t.logo.type=e[\"logo-type\"]),e[\"logo-position\"]&&(t.logo.position=e[\"logo-position\"])),e.ratio&&(t.ratio=e.ratio),(e[\"text-color\"]||e[\"text-size\"])&&(t.text={},e[\"text-color\"]&&(t.text.color=e[\"text-color\"]),e[\"text-size\"]&&(t.text.size=+e[\"text-size\"])),t}}class Ol{constructor(e){const{element:t,closeElement:n,mainElement:i}=this._createElements(e);this._element=t,this._closeElement=n,this._mainElement=i}show(e){this._mainElement.parentElement||(this._registerClick(e),document.body.appendChild(this._mainElement),setTimeout(()=>this._element.style.opacity=\"1\"))}remove(){this._mainElement.parentElement&&(this._unregisterClick&&this._unregisterClick(),this._removeAfterTransition(),setTimeout(()=>this._element.style.opacity=\"0\"))}_createElements(e){const t=document.createElement(\"div\"),{background:n=\"rgba(0, 0, 0, 0.8)\",id:i=\"checkoutOverlay\",transitionDuration:r=400,hasCloseButton:o=!1,innerHtml:a=null}=e||{};let s,d,c,l,u=t;if(i&&(t.id=i),a){const e=document.createElement(\"div\");l=`${i}--overlayText`,e.className=l,e.appendChild(a),t.appendChild(e)}return o&&(c=`${i}--close`,s=document.createElement(\"div\"),s.className=c,d=`${i}--layout`,u=document.createElement(\"div\"),u.className=d,u.appendChild(t),u.appendChild(s)),u.appendChild(function(e){const{id:t,background:n,transitionDuration:i,classLayout:r,classOverlayText:o,classClose:a}=e,s=document.createElement(\"style\"),d=r?`, .${r}`:\"\";return s.id=`${t}--styles`,s.type=\"text/css\",s.innerText=`\\n        #${t}${d} {\\n            display: block;\\n            height: 100%;\\n            width: 100%;\\n            left: 0;\\n            top: 0;\\n            position: fixed;\\n            z-index: 2147483647;\\n        }\\n        #${t} {\\n            transition: opacity ${i}ms ease-out;\\n            background: ${n};\\n            opacity: 0;\\n        }\\n    `,o&&(s.innerText+=`\\n             #${t} {\\n                display: flex;\\n                align-items: center;\\n                justify-content: center;\\n             }\\n             #${t} .${o} {\\n                color: white;\\n                max-width: 330px;\\n                font-size: 1.2em;\\n                text-align: center;\\n             }\\n        `),a&&(s.innerText+=`\\n            #${t} {\\n                opacity: 1;\\n            }\\n            .${r} .${a} {\\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            .${r} .${a}::after, .${r} .${a}::before {\\n                position: absolute;\\n                left: 8px;\\n                content: '';\\n                height: 16px;\\n                width: 2px;\\n                background-color: #fff;\\n            }\\n            .${r} .${a}::after {\\n                transform: rotate(-45deg);\\n            }\\n            .${r} .${a}::before {\\n                transform: rotate(45deg);\\n            }\\n        `),s}({id:i,background:n,transitionDuration:r,classLayout:d,classOverlayText:l,classClose:c})),{element:t,closeElement:s,mainElement:u}}_addEventListener(e,t){e&&t&&e.addEventListener(\"click\",t)}_removeEventListener(e,t){e&&t&&e.removeEventListener(\"click\",t)}_registerClick(e){if(this._unregisterClick&&this._unregisterClick(),e){const{onClick:t,onClickClose:n}=e;this._addEventListener(this._element,t),this._addEventListener(this._closeElement,n),this._unregisterClick=()=>{this._removeEventListener(this._element,t),this._removeEventListener(this._closeElement,n),this._unregisterClick=void 0}}}_removeAfterTransition(){const e=t=>{\"opacity\"===t.propertyName&&(this._mainElement.parentElement&&this._mainElement.remove(),this._element.removeEventListener(\"transitionend\",e))};this._element.addEventListener(\"transitionend\",e)}}const El={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"};function Al(e){return\"object\"==typeof e&&null!==e&&\"name\"in e&&\"BraintreeError\"===e.name}function Tl(e){return{recipientName:`${e.firstName} ${e.lastName}`,line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,postalCode:e.postalCode,countryCode:e.countryCode,phone:e.phone}}var kl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Dl{constructor(e,t,n,i){this.paymentIntegrationService=e,this.braintreeIntegrationService=t,this.braintreeMessages=n,this.loadingIndicator=i,this.braintreeHostWindow=window}initialize(e){return kl(this,void 0,void 0,function*(){const{braintree:t,methodId:n}=e;if((null==t?void 0:t.containerId)&&(this.braintreeButtonOptions=t),this.paymentMethod&&this.paymentMethod.nonce||(this.paymentMethod=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n)),this.paymentMethod.clientToken&&(null==t?void 0:t.bannerContainerId))return yield this.loadPaypal(),this.loadPaypalCheckoutInstance(t);if(this.paymentMethod.clientToken)return this.loadPaypal();const i=yield this.paymentIntegrationService.loadPaymentMethod(n);if(this.paymentMethod=i.getPaymentMethodOrThrow(n),null==t?void 0:t.bannerContainerId)return this.loadPaypalCheckoutInstance(t);if(!this.paymentMethod.clientToken)throw new ii(ti.MissingPaymentMethod);return this.loadPaypal()})}execute(e,t){var n;return kl(this,void 0,void 0,function*(){const{payment:i}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!i)throw new uo([\"payment\"]);const{onError:o}=this.braintreeButtonOptions||{};try{const e=yield this.preparePaymentData(i,r.useStoreCredit);yield this.paymentIntegrationService.submitOrder(r,t),yield this.paymentIntegrationService.submitPayment(e)}catch(e){this.isProviderError(e)&&(yield this.loadPaypal(),null===(n=this.paypalButtonRender)||void 0===n||n.close(),yield this.loadPaypalCheckoutInstance(this.braintreeButtonOptions),yield new Promise((e,t)=>{o&&\"function\"==typeof o&&o(new Error(\"INSTRUMENT_DECLINED\")),t()})),this.handleError(e)}})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e;return this.braintreeTokenizePayload=void 0,null===(e=this.paypalButtonRender)||void 0===e||e.close(),this.braintreeIntegrationService.teardown()}preparePaymentData(e,t){var n;return kl(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),r=i.getOutstandingBalance(t),o=i.getStoreConfig();if(!r)throw new ii(ti.MissingCheckout);if(!o)throw new ii(ti.MissingCheckoutConfig);if(!this.paymentMethod)throw new ai(ni.PaymentNotInitialized);const{currency:a,storeProfile:{storeLanguage:s}}=o,{nonce:d,config:{isVaultingEnabled:c}}=this.paymentMethod,{methodId:l,paymentData:u={}}=e,h=(null===(n=this.braintreeTokenizePayload)||void 0===n?void 0:n.nonce)||d;if(h){const t=yield this.paymentIntegrationService.loadPaymentMethod(l);return this.paymentMethod=t.getPaymentMethod(l),Object.assign(Object.assign({},e),{paymentData:this.formattedPayload(h)})}if(Fd(u)||(p=u,Boolean(p.instrumentId)&&!Object.prototype.hasOwnProperty.call(p,\"ccNumber\")&&!Object.prototype.hasOwnProperty.call(p,\"ccCvv\"))){if(!c)throw new _i(\"Vaulting is disabled but a vaulted instrument was being used for this transaction\");return Promise.resolve(e)}var p;if(!qd(u))throw new ii(ti.MissingPayment);const{shouldSaveInstrument:m,shouldSetAsDefaultInstrument:y}=u;if(m&&!c)throw new _i(\"Vaulting is disabled but shouldSaveInstrument is set to true\");const g=i.getShippingAddress(),v=g?Tl(g):void 0;return Promise.all([this.braintreeIntegrationService.paypal({amount:r,locale:s,currency:a.code,offerCredit:\"braintreepaypalcredit\"===this.paymentMethod.id,shippingAddressOverride:v,shouldSaveInstrument:m||!1,shippingAddressEditable:!1}),this.braintreeIntegrationService.getSessionId()]).then(([{nonce:t,details:n}={},i])=>Object.assign(Object.assign({},e),{paymentData:this.formattedPayload(t,n&&n.email,i,m,y)}))})}formattedPayload(e,t,n,i,r){return{formattedPayload:{vault_payment_instrument:i||null,set_as_default_stored_instrument:r||null,device_info:n||null,paypal_account:{token:e,email:t||null}}}}loadPaypalCheckoutInstance(e){return kl(this,void 0,void 0,function*(){const{clientToken:t,initializationData:n,id:i}=this.paymentMethod||{};if(!t)throw new ii(ti.MissingPaymentMethod);try{this.braintreeIntegrationService.initialize(t);const r={currency:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,intent:null==n?void 0:n.intent,isCreditEnabled:null==n?void 0:n.isCreditEnabled},o=\"braintreepaypalcredit\"===i||!(null==n?void 0:n.isCreditEnabled);yield this.braintreeIntegrationService.getPaypalCheckout(r,t=>{o&&i&&(null==e?void 0:e.bannerContainerId)&&this.renderPayPalMessages(i,e.bannerContainerId),this.renderPayPalButton(t,e)},this.handleError)}catch(e){this.handleError(e)}})}renderPayPalMessages(e,t){this.braintreeMessages.render(e,t,_o.PAYMENT)}renderPayPalButton(e,t){const{onPaymentError:n,submitForm:i,onRenderButton:r,containerId:o,onError:a}=t||{};if(!o)return;const s=this.getSmartButtonContainerId(o);if(!document.getElementById(s))throw new _i(`Unable to initialize payment because element with id ${o} does not exist.`);if(!this.paymentMethod)throw new ai(ni.PaymentNotInitialized);this.loadingIndicatorContainer=o.split(\"#\")[1];const{id:d,config:{testMode:c}}=this.paymentMethod,{paypal:l}=this.braintreeHostWindow,u=null==l?void 0:l.FUNDING.PAYPAL;l&&u?(this.paypalButtonRender=l.Buttons({env:c?\"sandbox\":\"production\",commit:!1,fundingSource:u,onClick:()=>{this.toggleLoadingIndicator(!0)},createOrder:()=>this.setupPayment(e,d,n),onApprove:t=>kl(this,void 0,void 0,function*(){this.braintreeTokenizePayload=yield this.tokenizePaymentOrThrow(t,e),i&&\"function\"==typeof i&&i()}),onCancel:()=>{this.toggleLoadingIndicator(!1)},onError:e=>{this.toggleLoadingIndicator(!1),null==a||a(e)}}),r&&\"function\"==typeof r&&r(),this.paypalButtonRender.isEligible()&&this.paypalButtonRender.render(`${o}`)):this.removeElement(o.split(\"#\")[1])}setupPayment(e,t,n){return kl(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState();try{const n=i.getCustomer(),r=i.getPaymentMethodOrThrow(t),o=i.getCheckoutOrThrow().outstandingBalance,a=i.getStoreConfigOrThrow().currency.code,s=i.getShippingAddress()||(null==n?void 0:n.addresses[0]),d=s?Tl(s):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:d,amount:o,currency:a,offerCredit:!1,intent:r.initializationData.intent})}catch(e){throw n&&(Al(e)||e instanceof ei)&&n(e),e}})}tokenizePaymentOrThrow(e,t,n){return kl(this,void 0,void 0,function*(){try{return yield t.tokenizePayment(e)}catch(e){throw n&&(Al(e)||e instanceof ei)&&n(e),e}})}loadPaypal(){return kl(this,void 0,void 0,function*(){const{clientToken:e,initializationData:t}=this.paymentMethod||{};if(!e||!t)throw new ii(ti.MissingPaymentMethod);try{this.braintreeIntegrationService.initialize(e),yield this.braintreeIntegrationService.getPaypal()}catch(e){this.handleError(e)}return Promise.resolve()})}handleError(e){if(!Al(e))throw e;if(\"PAYPAL_POPUP_CLOSED\"===e.code)throw new Yi(e.message);throw new eo(e.message)}isProviderError(e){var t,n,i;return!!function(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e}(e)&&\"2046\"===(null===(i=null===(n=((null===(t=null==e?void 0:e.errors)||void 0===t?void 0:t.filter(e=>e.provider_error))||[])[0])||void 0===n?void 0:n.provider_error)||void 0===i?void 0:i.code)}removeElement(e){const t=e&&document.getElementById(e);t&&t.remove()}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}getSmartButtonContainerId(e){var t;return null!==(t=e.split(\"#\")[1])&&void 0!==t?t:e}}const Ml=Si(e=>{const t=window,n=new Ol,i=new Ti(e),r=new Io(new $i(a(),t,i),t,n),o=new Pl(e);return new Dl(e,r,o,new Sd({containerStyles:El}))},[{id:\"braintreepaypal\"},{id:\"braintreepaypalcredit\"}]);class zl{constructor(e){this.requestSender=e}getOrderStatus(e=\"braintreelocalmethods\",t){return n=this,i=void 0,o=function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}var Nl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class xl{constructor(e,t,n,i,r=3e3,o=3e5){this.paymentIntegrationService=e,this.braintreeSdk=t,this.braintreeRequestSender=n,this.loadingIndicator=i,this.pollingInterval=r,this.maxPollingIntervalTime=o,this.isLPMsUpdateExperimentEnabled=!1,this.pollingTimer=0,this.stopPolling=ce,this.isPollingEnabled=!1}initialize(e){return Nl(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,braintreelocalmethods:i}=e;if(this.gatewayId=t,!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!i)throw new _i('Unable to initialize payment because \"options.braintreelocalmethods\" argument is not provided.');this.braintreelocalmethods=i,this.loadingIndicatorContainer=i.container.split(\"#\")[1],yield this.paymentIntegrationService.loadPaymentMethod(t);const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(t),{clientToken:a,config:s,initializationData:d}=o,c=r.getStoreConfigOrThrow().checkoutSettings.features;if(this.isPollingEnabled=Pi(c,\"PAYPAL-5258.braintree_local_methods_polling\"),this.isLPMsUpdateExperimentEnabled=Pi(c,\"PAYPAL-4853.add_new_payment_flow_for_braintree_lpms\"),!a||!d||!s.merchantId)throw new ii(ti.MissingPaymentMethod);try{this.braintreeSdk.initialize(a),this.isNonInstantPaymentMethod(n)||(this.braintreeLocalPayment=yield this.braintreeSdk.getBraintreeLocalPayment(s.merchantId))}catch(e){this.handleError(e)}})}finalize(){return Promise.reject(new Pd)}deinitialize(){return Nl(this,void 0,void 0,function*(){return this.toggleLoadingIndicator(!1),Promise.resolve()})}execute(e,t){return Nl(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);const{methodId:r}=n;this.toggleLoadingIndicator(!0),this.isNonInstantPaymentMethod(r)?yield this.executeWithNotInstantLPM(r):yield this.executeWithInstantLPM(r,i,t)})}executeWithNotInstantLPM(e){return Nl(this,void 0,void 0,function*(){try{const t=yield this.getLPMsBasicPaymentData();yield this.paymentIntegrationService.submitOrder(),yield this.paymentIntegrationService.submitPayment({methodId:e,paymentData:Object.assign(Object.assign({},t),{formattedPayload:{method:e}})})}catch(e){if(this.isBraintreeRedirectError(e)){const t=e.body.additional_action_required.data.redirect_url;return new Promise((e,n)=>{window.location.replace(t),this.toggleLoadingIndicator(!1),n()})}return this.handleError(e),Promise.reject(e)}})}executeWithInstantLPM(e,t,n){return Nl(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment)throw new to;yield new Promise((i,r)=>{var o;null===(o=this.braintreeLocalPayment)||void 0===o||o.startPayment(this.getInstantLPMConfig(e,t,n),this.getInstantLPMCallback(i,r,e,t,n))})})}getLPMsBasicPaymentData(){return Nl(this,void 0,void 0,function*(){const{deviceData:e}=yield this.braintreeSdk.getDataCollectorOrThrow();return{deviceSessionId:e}})}getInstantLPMConfig(e,t,n){const i=this.paymentIntegrationService.getState(),r=i.getCartOrThrow(),o=i.getBillingAddressOrThrow(),{firstName:a,lastName:s,countryCode:d}=o,{currency:c,email:l,lineItems:u}=r,h=u.physicalItems.length>0,p=i.getCheckoutOrThrow().outstandingBalance,m=i.getStoreConfigOrThrow().links.checkoutLink;return{paymentType:e,amount:p,fallback:{url:m,buttonText:\"Complete Payment\"},currencyCode:c.code,shippingAddressRequired:h,email:l,givenName:a,surname:s,address:{countryCode:d},onPaymentStart:(i,r)=>Nl(this,void 0,void 0,function*(){if(!this.isLPMsUpdateExperimentEnabled)return this.orderId=i.paymentId,void r();const o=yield this.getLPMsBasicPaymentData(),a=Object.assign(Object.assign({},o),{formattedPayload:{method:e,[`${e}_account`]:{order_id:i.paymentId}}});try{yield this.paymentIntegrationService.submitOrder(t,n),yield this.paymentIntegrationService.submitPayment({methodId:e,paymentData:a})}catch(t){if(this.isBraintreeOrderSavedResponse(t)&&t.body.additional_action_required.data.order_id_saved_successfully)return r(),this.isPollingEnabled?new Promise((t,n)=>{this.initializePollingMechanism(e,t,n,this.gatewayId)}):void 0;throw t}})}}getInstantLPMCallback(e,t,n,i,r){const o=this.paymentIntegrationService.getState().getCartOrThrow();return(a,s)=>Nl(this,void 0,void 0,function*(){if(a)return\"LOCAL_PAYMENT_WINDOW_CLOSED\"===a.code?(this.toggleLoadingIndicator(!1),this.resetPollingMechanism(),t()):(this.isPollingEnabled&&this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t(new to));const d=yield this.getLPMsBasicPaymentData(),c=Object.assign(Object.assign({},d),{formattedPayload:{method:n,[`${n}_account`]:Object.assign({email:o.email,token:s.nonce},this.isLPMsUpdateExperimentEnabled?{}:{order_id:this.orderId})}});try{return this.isLPMsUpdateExperimentEnabled||(yield this.paymentIntegrationService.submitOrder(i,r)),yield this.paymentIntegrationService.submitPayment({methodId:n,paymentData:c}),e(void 0)}catch(e){return this.handleError(e),t(e)}})}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}handleError(e){const{onError:t}=this.braintreelocalmethods||{};this.isPollingEnabled&&this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}isNonInstantPaymentMethod(e){return e.toUpperCase()in zi}isBraintreeRedirectError(e){var t;if(\"object\"!=typeof e||null===e)return!1;const{body:n}=e;return!!n&&!!(null===(t=n.additional_action_required)||void 0===t?void 0:t.data.redirect_url)}isBraintreeOrderSavedResponse(e){var t;if(\"object\"!=typeof e||null===e)return!1;const{body:n}=e;return!!n&&(null===(t=n.additional_action_required)||void 0===t?void 0:t.data.hasOwnProperty(\"order_id_saved_successfully\"))}initializePollingMechanism(e,t,n,i){return Nl(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.braintreeRequestSender.getOrderStatus(i,{params:{useMetadata:!1}}),o=r.status===Mi.Pending,a=r.status===Mi.Completed,s=r.status===Mi.Failed;if(a)return this.deinitializePollingMechanism(),t();if(s)return n();if(!a&&o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,i);yield this.reinitializeStrategy({methodId:e,gatewayId:i,braintreelocalmethods:this.braintreelocalmethods}),this.handleError(new bc)}catch(e){n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}reinitializeStrategy(e){return Nl(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}}const Rl=Si(e=>{const t=window,i=new Ti(e),r=new Vi(new $i(a(),t,i)),o=n(),s=new zl(o);return new xl(e,r,s,new Sd({styles:{backgroundColor:\"black\"}}))},[{gateway:\"braintreelocalmethods\"}]);function Fl(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}var Ll=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Bl{constructor(e,t,n){this.paymentIntegrationService=e,this.braintreeFastlaneUtils=t,this.braintreeSdk=n}initialize(e){var t;return Ll(this,void 0,void 0,function*(){const{methodId:n,braintreefastlane:i}=e;if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new _i('Unable to initialize payment because \"options.braintreefastlane\" argument is not provided.');if(!i.onInit||\"function\"!=typeof i.onInit)throw new _i('Unable to initialize payment because \"options.braintreefastlane.onInit\" argument is not provided or it is not a function.');if(!i.onChange||\"function\"!=typeof i.onChange)throw new _i('Unable to initialize payment because \"options.braintreefastlane.onChange\" argument is not provided or it is not a function.');yield this.paymentIntegrationService.loadPaymentMethod(n);const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(n),{initializationData:a,clientToken:s}=o||{},{isFastlaneStylingEnabled:d}=a||{},c=Pi(r.getStoreConfigOrThrow().checkoutSettings.features,\"PROJECT-7080.braintree_fastlane_three_ds\");this.is3DSEnabled=o.config.is3dsEnabled,s&&c&&this.braintreeSdk.initialize(s);const l=ko(d?null===(t=o.initializationData)||void 0===t?void 0:t.fastlaneStyles:void 0,i.styles);yield this.braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow(n,l),this.shouldRunAuthenticationFlow()&&(yield this.braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow()),yield this.initializeCardComponent(),this.onError=i.onError,i.onInit(e=>this.renderBraintreeCardComponent(e)),i.onChange(()=>this.handleBraintreeStoredInstrumentChange(n))})}execute(e,t){return Ll(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);yield this.paymentIntegrationService.submitOrder(i,t);const r=yield this.preparePaymentPayload(n.methodId);yield this.paymentIntegrationService.submitPayment(r),this.braintreeFastlaneUtils.removeSessionIdFromCookies()})}finalize(){return Promise.reject(new Pd)}deinitialize(){return Ll(this,void 0,void 0,function*(){return this.braintreeCardComponent=void 0,Promise.resolve()})}initializeCardComponent(){return Ll(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState(),{phone:t,firstName:n,lastName:i}=e.getBillingAddressOrThrow(),r=`${n} ${i}`,o={styles:{},fields:Object.assign({cardholderName:{prefill:r,enabled:!0}},t&&{phoneNumber:{prefill:t}})},a=this.braintreeFastlaneUtils.getBraintreeFastlaneComponentOrThrow();this.braintreeCardComponent=yield a(o)})}renderBraintreeCardComponent(e){const t=this.getBraintreeCardComponentOrThrow();if(!e)throw new _i('Unable to initialize payment because \"container\" argument is not provided.');t.render(e)}preparePaymentPayload(e){var t,n;return Ll(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),r=i.getBillingAddressOrThrow(),o=`${r.firstName} ${r.lastName}`,a=this.getPayPalInstruments()[0],s=yield this.braintreeFastlaneUtils.getDeviceSessionId(),d=Pi(i.getStoreConfigOrThrow().checkoutSettings.features,\"PROJECT-7080.braintree_fastlane_three_ds\");if(a){const t=this.is3DSEnabled&&d?yield this.get3DS(a.bigpayToken,(null==a?void 0:a.iin)||\"\"):void 0;return{methodId:e,paymentData:{deviceSessionId:s,formattedPayload:{paypal_fastlane_token:{token:t||a.bigpayToken}}}}}const{getPaymentToken:c}=this.getBraintreeCardComponentOrThrow(),l=yield c({name:{fullName:o},billingAddress:this.mapToPayPalAddress(r)}),u=(null===(n=null===(t=l.paymentSource.card)||void 0===t?void 0:t.binDetails)||void 0===n?void 0:n.bin)||\"\",h=this.is3DSEnabled&&d?yield this.get3DS(l.id,u):void 0;return{methodId:e,paymentData:{deviceSessionId:s,nonce:h||l.id}}})}get3DS(e,t){return Ll(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=yield this.braintreeSdk.getBraintreeThreeDS(),r=n.getOrderOrThrow();return new Promise((n,o)=>{i.verifyCard({amount:null==r?void 0:r.orderAmount,nonce:e,bin:t,onLookupComplete:(e,t)=>{i.on(\"customer-canceled\",()=>{\"function\"==typeof this.onError&&this.onError(new Yi),o(new Yi)}),t()}},(e,t)=>(e&&\"THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT\"===e.code&&(\"function\"==typeof this.onError&&this.onError(new Yi),o(new Yi)),n(t.nonce)))})})}mapToPayPalAddress(e){return{streetAddress:(null==e?void 0:e.address1)||\"\",locality:(null==e?void 0:e.city)||\"\",region:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCodeAlpha2:(null==e?void 0:e.countryCode)||\"\"}}shouldRunAuthenticationFlow(){const e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getCustomerOrThrow(),i=e.getPaymentProviderCustomer(),r=Fl(i)?i:{},o=this.braintreeFastlaneUtils.getSessionIdFromCookies();return!(!n.isGuest||(null==r?void 0:r.authenticationState)===Ni.CANCELED||(null==r?void 0:r.authenticationState)||o!==t.id)}getBraintreeCardComponentOrThrow(){if(!this.braintreeCardComponent)throw new gi;return this.braintreeCardComponent}getPayPalInstruments(){const e=this.paymentIntegrationService.getState().getPaymentProviderCustomerOrThrow();return(Fl(e)?e:{}).instruments||[]}handleBraintreeStoredInstrumentChange(e){return Ll(this,void 0,void 0,function*(){const t=this.braintreeFastlaneUtils.getBraintreeFastlaneOrThrow(),{selectionChanged:n,selectedCard:i}=yield t.profile.showCardSelector();if(n){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomer(),n=Fl(t)?t:{},r=this.braintreeFastlaneUtils.mapPayPalToBcInstrument(e,[i]);if(r&&r.length>0)return yield this.paymentIntegrationService.updatePaymentProviderCustomer(Object.assign(Object.assign({},n),{instruments:[...r]})),r[0]}})}}const jl=Si(e=>{const t=window,n=new Ti(e),i=new Io(new $i(a(),t,n),t),r=new No(e,i),o=new $i(a(),t,n),s=new Vi(o);return new Bl(e,r,s)},[{id:\"braintreeacceleratedcheckout\"}]);var Ul=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ql{constructor(e,t,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=n}initialize(e){return Ul(this,void 0,void 0,function*(){const{braintreevisacheckout:t,methodId:n}=e;if(!t)throw new _i('Unable to initialize payment because \"options.braintreevisacheckout\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const i=this.paymentIntegrationService.getState();this.paymentMethod=i.getPaymentMethodOrThrow(n);const r=i.getCheckoutOrThrow(),o=i.getStoreConfigOrThrow(),{clientToken:a,config:s}=this.paymentMethod||{};if(!a)throw new ii(ti.MissingPaymentMethod);const{onError:d=ce,onPaymentSelect:c=ce}=t;this.braintreeSdk.initialize(a);const l=yield this.braintreeSdk.getBraintreeVisaCheckout(),u=yield this.braintreeSdk.getVisaCheckoutSdk(null==s?void 0:s.testMode),h=l.createInitOptions({settings:{locale:o.storeProfile.storeLanguage,shipping:{collectShipping:!1}},paymentRequest:{currencyCode:o.currency.code,subtotal:String(r.subtotal)}});yield u.init(h),u.on(\"payment.success\",e=>this.tokenizePayment(l,e).then(()=>Promise.all([this.paymentIntegrationService.loadCheckout(),this.paymentIntegrationService.loadPaymentMethod(n)])).then(()=>c()).catch(e=>d(e))),u.on(\"payment.error\",(e,t)=>d(t))})}execute(e,t){var n,i;return Ul(this,void 0,void 0,function*(){const{payment:r}=e,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!r)throw new _i('Unable to submit payment because \"payload.payment\" argument is not provided.');if(!(null===(i=null===(n=this.paymentMethod)||void 0===n?void 0:n.initializationData)||void 0===i?void 0:i.nonce))throw new ii(ti.MissingPaymentMethod);const{nonce:a}=this.paymentMethod.initializationData;try{yield this.paymentIntegrationService.submitOrder(o,t),yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:{nonce:a}}))}catch(e){this.handleError(e)}})}finalize(){return Promise.reject(new Pd)}deinitialize(){return Ul(this,void 0,void 0,function*(){yield this.braintreeSdk.deinitialize()})}tokenizePayment(e,t){return Ul(this,void 0,void 0,function*(){return Promise.all([e.tokenize(t),this.braintreeSdk.getDataCollectorOrThrow()]).then(([e,t])=>{const n=this.paymentIntegrationService.getState(),i=n.getShippingAddress(),r=n.getBillingAddress(),{shippingAddress:o=this.mapToVisaCheckoutAddress(i),billingAddress:a=this.mapToVisaCheckoutAddress(r)}=e;return this.postForm(Object.assign(Object.assign({},e),{shippingAddress:o,billingAddress:a}),t)})})}mapToVisaCheckoutAddress(e){return e?{firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phone,streetAddress:e.address1,extendedAddress:e.address2,locality:e.city,region:e.stateOrProvinceCode,countryCode:e.countryCode,postalCode:e.postalCode}:{}}postForm(e,t){const{userData:n,billingAddress:i,shippingAddress:r,details:o}=e,{userEmail:a}=n,{deviceData:s}=t;return this.formPoster.postForm(\"/checkout.php\",{payment_type:e.type,nonce:e.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,i)),shipping_address:JSON.stringify(this.getAddress(a,r))})}getAddress(e,t={}){return{email:e,first_name:t.firstName,last_name:t.lastName,phone_number:t.phoneNumber,address_line_1:t.streetAddress,address_line_2:t.extendedAddress,city:t.locality,state:t.region,country_code:t.countryCode,postal_code:t.postalCode}}handleError(e){if(e instanceof Error&&\"BraintreeError\"===e.name)throw new eo(e.message);throw e}}const Vl=Si(e=>{const t=window,n=new Ti(e),i=new Vi(new $i(a(),t,n));return new ql(e,Ee(),i)},[{id:\"braintreevisacheckout\"}]);var Gl=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Hl{constructor(e,t){this.paymentIntegrationService=e,this.braintreeIntegrationService=t}initialize(e){return Gl(this,void 0,void 0,function*(){const{methodId:t}=e;yield this.paymentIntegrationService.loadPaymentMethod(t);const n=this.paymentIntegrationService.getState();this.venmoOptions=e.braintreevenmo;const i=n.getPaymentMethodOrThrow(t);yield this.initializeBraintreeVenmo(i)})}execute(e){return Gl(this,void 0,void 0,function*(){const{payment:t}=e,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!t)throw new uo([\"payment\"]);try{const e=yield this.preparePaymentData(t);yield this.paymentIntegrationService.submitOrder(n),yield this.paymentIntegrationService.submitPayment(e)}catch(e){this.handleError(e)}})}finalize(){return Promise.reject(new Pd)}deinitialize(){return Gl(this,void 0,void 0,function*(){return yield this.braintreeIntegrationService.teardown(),Promise.resolve()})}handleError(e){if(!Li(e))throw e;if(\"PAYPAL_POPUP_CLOSED\"===e.code)throw new Yi(e.message);throw new eo(e.message)}initializeBraintreeVenmo(e){var t;return Gl(this,void 0,void 0,function*(){const{clientToken:n}=e;if(!n)throw new ii(ti.MissingPaymentMethod);const i=Pi(this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features,\"PAYPAL-5406.braintree_venmo_web_fallback_support\");try{this.braintreeIntegrationService.initialize(n),this.braintreeVenmoCheckout=yield this.braintreeIntegrationService.getVenmoCheckout(Object.assign(Object.assign({},void 0!==(null===(t=this.venmoOptions)||void 0===t?void 0:t.allowDesktop)?{allowDesktop:this.venmoOptions.allowDesktop}:{}),i?{mobileWebFallBack:i}:{}))}catch(e){this.handleError(e)}})}preparePaymentData(e){return Gl(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),{nonce:n}=t.getPaymentMethodOrThrow(e.methodId);if(n)return Object.assign(Object.assign({},e),{paymentData:this.formattedPayload(n)});const i=yield this.braintreeVenmoTokenize(),r=yield this.braintreeIntegrationService.getSessionId();return Object.assign(Object.assign({},e),{paymentData:this.formattedPayload(i.nonce,i.details.email,r)})})}formattedPayload(e,t,n){return{formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:n||null,paypal_account:{token:e,email:t||null}}}}braintreeVenmoTokenize(){return new Promise((e,t)=>{var n;null===(n=this.braintreeVenmoCheckout)||void 0===n||n.tokenize((n,i)=>{if(n)return t(n);e(i)})})}}const Wl=Si(e=>{const t=window,n=a(),i=new Ti(e),r=new $i(n,t,i),o=new Io(r,t);return new Hl(e,o)},[{id:\"braintreevenmo\"}]);var $l=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Yl{constructor(e,t,n){this.paymentIntegrationService=e,this.braintreeIntegrationService=t,this.braintreeHostedForm=n}initialize(e){return $l(this,void 0,void 0,function*(){const{methodId:t,gatewayId:n,braintree:i}=e;yield this.paymentIntegrationService.loadPaymentMethod(t);const r=this.paymentIntegrationService.getState();this.paymentMethod=r.getPaymentMethodOrThrow(t);const{clientToken:o}=this.paymentMethod;if(!o)throw new ii(ti.MissingPaymentMethod);this.threeDSecure=null==i?void 0:i.threeDSecure,this.onPaymentError=null==i?void 0:i.onPaymentError;try{this.braintreeIntegrationService.initialize(o,this.threeDSecure),this.isHostedPaymentFormEnabled(t,n)&&(null==i?void 0:i.form)&&(yield this.braintreeHostedForm.initialize(i.form,i.unsupportedCardBrands,o),this.isHostedFormInitialized=this.braintreeHostedForm.isInitialized()),this.is3dsEnabled=this.paymentMethod.config.is3dsEnabled,this.deviceSessionId=yield this.braintreeIntegrationService.getSessionId(),this.shouldInitializeBraintreeFastlane()&&(yield this.initializeBraintreeFastlaneOrThrow(t))}catch(e){return this.handleError(e,t)}})}execute(e){return $l(this,void 0,void 0,function*(){const{payment:t}=e,n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!t)throw new uo([\"payment\"]);this.isHostedFormInitialized&&this.braintreeHostedForm.validate(),yield this.paymentIntegrationService.submitOrder(n);const i=this.paymentIntegrationService.getState(),r=i.getBillingAddressOrThrow(),o=i.getOrderOrThrow().orderAmount;try{const e=this.isHostedFormInitialized?yield this.prepareHostedPaymentData(t,r,o):yield this.preparePaymentData(t,r,o);yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},t),{paymentData:e}))}catch(e){return this.processAdditionalAction(e,t,o)}})}finalize(){return Promise.reject(new Pd)}deinitialize(){return $l(this,void 0,void 0,function*(){return this.isHostedFormInitialized=!1,yield Promise.all([this.braintreeIntegrationService.teardown(),this.braintreeHostedForm.deinitialize()]),Promise.resolve()})}handleError(e,t){var n;if(Al(e)){if(!(t&&this.paymentIntegrationService.getState().isPaymentMethodInitialized({methodId:t})||\"HOSTED_FIELDS_INVALID_FIELD_SELECTOR\"!==e.code))return;if(e.code.startsWith(\"THREEDS_\"))return null===(n=this.onPaymentError)||void 0===n||n.call(this,new eo(\"THREEDS_VERIFICATION_FAILED\")),Promise.reject();throw new eo(e.message)}throw e}preparePaymentData(e,t,n){return $l(this,void 0,void 0,function*(){const{paymentData:i}=e,r={deviceSessionId:this.deviceSessionId};if(this.isSubmittingWithStoredCard(e))return Object.assign(Object.assign({},r),i);const{shouldSaveInstrument:o=!1,shouldSetAsDefaultInstrument:a=!1}=qd(i)?i:{},{nonce:s}=this.shouldPerform3DSVerification(e)?yield this.braintreeIntegrationService.verifyCard(e,t,n):yield this.braintreeIntegrationService.tokenizeCard(e,t);return Object.assign(Object.assign({},r),{nonce:s,shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a})})}prepareHostedPaymentData(e,t,n){return $l(this,void 0,void 0,function*(){const{paymentData:i}=e,r={deviceSessionId:this.deviceSessionId};if(this.isSubmittingWithStoredCard(e)){const{nonce:e}=yield this.braintreeHostedForm.tokenizeForStoredCardVerification();return Object.assign(Object.assign(Object.assign({},r),i),{nonce:e})}const{shouldSaveInstrument:o=!1,shouldSetAsDefaultInstrument:a=!1}=qd(i)?i:{},{nonce:s}=this.shouldPerform3DSVerification(e)?yield this.verifyCardWithHostedForm(t,n):yield this.braintreeHostedForm.tokenize(t);return Object.assign(Object.assign({},r),{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a,nonce:s})})}prepareAdditionalActionPaymentData(e,t){const{paymentData:n}=e,i={deviceSessionId:this.deviceSessionId,nonce:t},{shouldSaveInstrument:r=!1,shouldSetAsDefaultInstrument:o=!1}=qd(n)?n:{};return this.isSubmittingWithStoredCard(e)&&(r||o)?Object.assign(Object.assign({},n),i):Object.assign({},i)}verifyCardWithHostedForm(e,t){return $l(this,void 0,void 0,function*(){const n=yield this.braintreeHostedForm.tokenize(e);return this.braintreeIntegrationService.challenge3DSVerification(n,t)})}processAdditionalAction(e,t,n){return $l(this,void 0,void 0,function*(){if(!ya(e)||!ve(e.body.errors,{code:\"three_d_secure_required\"}))return this.handleError(e);try{const{payer_auth_request:i}=function(e){return\"object\"==typeof e&&null!==e&&\"name\"in e&&\"body\"in e&&\"status\"in e.body&&\"three_ds_result\"in e.body&&\"payer_auth_request\"in e.body.three_ds_result&&\"errors\"in e.body}(e)&&e.body.three_ds_result||{},{paymentData:r}=t,o=this.paymentIntegrationService.getState();if(!r||!Fd(r))throw new uo([\"instrumentId\"]);const a=o.getCardInstrumentOrThrow(r.instrumentId),{nonce:s}=yield this.braintreeIntegrationService.challenge3DSVerification({nonce:i||\"\",bin:a.iin},n),d=this.prepareAdditionalActionPaymentData(t,s);yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},t),{paymentData:d}))}catch(e){return this.handleError(e)}})}isHostedPaymentFormEnabled(e,t){return!!e&&!0===this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t).config.isHostedFormEnabled}isSubmittingWithStoredCard(e){return!(!e.paymentData||!Fd(e.paymentData))}shouldPerform3DSVerification(e){return!(!this.is3dsEnabled||this.isSubmittingWithStoredCard(e))}shouldInitializeBraintreeFastlane(){var e;const t=this.paymentIntegrationService.getState().getPaymentProviderCustomerOrThrow(),n=Fl(t)?t:{};return(null===(e=this.paymentMethod)||void 0===e?void 0:e.initializationData.isAcceleratedCheckoutEnabled)&&!(null==n?void 0:n.authenticationState)}initializeBraintreeFastlaneOrThrow(e){return $l(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getPaymentMethodOrThrow(e),{clientToken:r,config:o}=i;if(!r)throw new ii(ti.MissingPaymentMethod);this.braintreeIntegrationService.initialize(r,this.threeDSecure),yield this.braintreeIntegrationService.getBraintreeFastlane(n.id,o.testMode)})}}function Kl(e){return\"cardNumber\"in e}function Jl(e){if(!Li(e))return!1;const{details:t}=e;return void 0===t||\"object\"==typeof t&&null!==t&&void 0===t.invalidFieldKeys||(n=t,Array.isArray(n)&&n.every(e=>\"string\"==typeof e));var n}var Zl,Ql=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};!function(e){e[e.CreditCard=0]=\"CreditCard\",e[e.StoredCardVerification=1]=\"StoredCardVerification\"}(Zl||(Zl={}));class Xl{constructor(e,t){this.braintreeScriptLoader=e,this.braintreeSDKVersionManager=t,this.isInitializedHostedForm=!1,this.handleBlur=e=>{var t,n;null===(n=null===(t=this.formOptions)||void 0===t?void 0:t.onBlur)||void 0===n||n.call(t,{fieldType:this.mapFieldType(e.emittedBy),errors:this.mapErrors(e.fields)})},this.handleFocus=e=>{var t,n;null===(n=null===(t=this.formOptions)||void 0===t?void 0:t.onFocus)||void 0===n||n.call(t,{fieldType:this.mapFieldType(e.emittedBy)})},this.handleCardTypeChange=e=>{var t,n;const i=1===e.cards.length?e.cards[0].type.replace(/^master-card$/,\"mastercard\"):void 0;null===(n=null===(t=this.formOptions)||void 0===t?void 0:t.onCardTypeChange)||void 0===n||n.call(t,{cardType:i})},this.handleInputSubmitRequest=e=>{var t,n;null===(n=null===(t=this.formOptions)||void 0===t?void 0:t.onEnter)||void 0===n||n.call(t,{fieldType:this.mapFieldType(e.emittedBy)})},this.handleValidityChange=e=>{var t,n;null===(n=null===(t=this.formOptions)||void 0===t?void 0:t.onValidate)||void 0===n||n.call(t,{isValid:this.isValidForm(e),errors:this.mapValidationErrors(e.fields)})}}initialize(e,t,n){var i,r,o,a,s;return Ql(this,void 0,void 0,function*(){this.clientToken=n,this.formOptions=e,this.type=Kl(e.fields)?Zl.CreditCard:Zl.StoredCardVerification;const d=this.mapFieldOptions(e.fields,t);$(d)?this.isInitializedHostedForm=!1:(this.cardFields=yield this.createHostedFields({fields:d,styles:e.styles&&this.mapStyleOptions(e.styles)}),null===(i=this.cardFields)||void 0===i||i.on(\"blur\",this.handleBlur),null===(r=this.cardFields)||void 0===r||r.on(\"focus\",this.handleFocus),null===(o=this.cardFields)||void 0===o||o.on(\"cardTypeChange\",this.handleCardTypeChange),null===(a=this.cardFields)||void 0===a||a.on(\"validityChange\",this.handleValidityChange),null===(s=this.cardFields)||void 0===s||s.on(\"inputSubmitRequest\",this.handleInputSubmitRequest),this.isInitializedHostedForm=!0)})}isInitialized(){return!!this.isInitializedHostedForm}deinitialize(){var e;return Ql(this,void 0,void 0,function*(){this.isInitializedHostedForm&&(this.isInitializedHostedForm=!1,yield null===(e=this.cardFields)||void 0===e?void 0:e.teardown())})}validate(){if(!this.cardFields)throw new ai(ni.PaymentNotInitialized);const e=this.cardFields.getState();if(!this.isValidForm(e)){this.handleValidityChange(e);const t=this.mapValidationErrors(e.fields);throw new ho(t)}}tokenize(e){var t,n,i,r,o;return Ql(this,void 0,void 0,function*(){if(!this.cardFields)throw new ai(ni.PaymentNotInitialized);try{const r=yield this.cardFields.tokenize(ue({billingAddress:e&&this.mapBillingAddress(e)},J));return null===(n=null===(t=this.formOptions)||void 0===t?void 0:t.onValidate)||void 0===n||n.call(t,{isValid:!0,errors:{}}),{nonce:r.nonce,bin:null===(i=r.details)||void 0===i?void 0:i.bin}}catch(e){if(Jl(e)){const t=this.mapTokenizeError(e);if(t)throw null===(o=null===(r=this.formOptions)||void 0===r?void 0:r.onValidate)||void 0===o||o.call(r,{isValid:!1,errors:t}),new ho(t)}throw e}})}tokenizeForStoredCardVerification(){var e,t,n,i,r;return Ql(this,void 0,void 0,function*(){if(!this.cardFields)throw new ai(ni.PaymentNotInitialized);try{const i=yield this.cardFields.tokenize();return null===(t=null===(e=this.formOptions)||void 0===e?void 0:e.onValidate)||void 0===t||t.call(e,{isValid:!0,errors:{}}),{nonce:i.nonce,bin:null===(n=i.details)||void 0===n?void 0:n.bin}}catch(e){if(Jl(e)){const t=this.mapTokenizeError(e,!0);if(t)throw null===(r=null===(i=this.formOptions)||void 0===i?void 0:i.onValidate)||void 0===r||r.call(i,{isValid:!1,errors:t}),new ho(t)}throw e}})}createHostedFields(e){return Ql(this,void 0,void 0,function*(){const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadHostedFields(),i=this.braintreeSDKVersionManager.getSDKVersion()===Oi?Object.assign(Object.assign({},e),{preventCursorJumps:!0}):e;return n.create(Object.assign(Object.assign({},i),{client:t}))})}getClient(){return Ql(this,void 0,void 0,function*(){if(!this.clientToken)throw new ai(ni.PaymentNotInitialized);if(!this.client){const e=yield this.braintreeScriptLoader.loadClient();this.client=e.create({authorization:this.clientToken})}return this.client})}mapBillingAddress(e){return{countryName:e.country,postalCode:e.postalCode,streetAddress:e.address2?`${e.address1} ${e.address2}`:e.address1}}mapFieldOptions(e,t){if(Kl(e)){const n={};return null==t||t.forEach(e=>{(e=>Object.values(Fi).includes(e))(e)&&(n[e]=!1)}),ue({number:Object.assign({container:`#${e.cardNumber.containerId}`,placeholder:e.cardNumber.placeholder,internalLabel:e.cardNumber.accessibilityLabel},Object.keys(n).length>0?{supportedCardBrands:n}:{}),expirationDate:{container:`#${e.cardExpiry.containerId}`,placeholder:e.cardExpiry.placeholder,internalLabel:e.cardExpiry.accessibilityLabel},cvv:e.cardCode&&{container:`#${e.cardCode.containerId}`,placeholder:e.cardCode.placeholder,internalLabel:e.cardCode.accessibilityLabel},cardholderName:{container:`#${e.cardName.containerId}`,placeholder:e.cardName.placeholder,internalLabel:e.cardName.accessibilityLabel}},J)}return ue({number:e.cardNumberVerification&&{container:`#${e.cardNumberVerification.containerId}`,placeholder:e.cardNumberVerification.placeholder},cvv:e.cardCodeVerification&&{container:`#${e.cardCodeVerification.containerId}`,placeholder:e.cardCodeVerification.placeholder}},J)}mapStyleOptions(e){const t=(e={})=>ue({color:e.color,\"font-family\":e.fontFamily,\"font-size\":e.fontSize,\"font-weight\":e.fontWeight},J);return{input:t(e.default),\".invalid\":t(e.error),\":focus\":t(e.focus)}}mapFieldType(e){switch(e){case\"number\":return this.type===Zl.StoredCardVerification?Ui.CardNumberVerification:Ui.CardNumber;case\"expirationDate\":return Ui.CardExpiry;case\"cvv\":return this.type===Zl.StoredCardVerification?Ui.CardCodeVerification:Ui.CardCode;case\"cardholderName\":return Ui.CardName;default:throw new Error(\"Unexpected field type\")}}mapErrors(e){const t={};if(e)for(const[n,i]of Object.entries(e))if(i&&this.isValidParam(n)){const{isValid:e,isEmpty:r,isPotentiallyValid:o}=i;t[n]={isValid:e,isEmpty:r,isPotentiallyValid:o}}return t}mapValidationErrors(e){return Object.keys(e).reduce((t,n)=>{var i;return Object.assign(Object.assign({},t),{[this.mapFieldType(n)]:(null===(i=e[n])||void 0===i?void 0:i.isValid)?void 0:[this.createInvalidError(this.mapFieldType(n))]})},{})}mapTokenizeError(e,t=!1){var n,i;if(\"HOSTED_FIELDS_FIELDS_EMPTY\"===e.code){const e=[this.createRequiredError(this.mapFieldType(\"cvv\"))];return t?{[this.mapFieldType(\"cvv\")]:e}:{[this.mapFieldType(\"cvv\")]:e,[this.mapFieldType(\"expirationDate\")]:[this.createRequiredError(this.mapFieldType(\"expirationDate\"))],[this.mapFieldType(\"number\")]:[this.createRequiredError(this.mapFieldType(\"number\"))],[this.mapFieldType(\"cardholderName\")]:[this.createRequiredError(this.mapFieldType(\"cardholderName\"))]}}return null===(i=null===(n=e.details)||void 0===n?void 0:n.invalidFieldKeys)||void 0===i?void 0:i.reduce((e,t)=>{const n=this.mapFieldType(t);return Object.assign(Object.assign({},e),{[n]:[this.createInvalidError(n)]})},{})}createRequiredError(e){var t;return{fieldType:e,message:null!==(t={[Ui.CardCode]:\"CVV is required\",[Ui.CardCodeVerification]:\"CVV is required\",[Ui.CardNumber]:\"Credit card number is required\",[Ui.CardNumberVerification]:\"Credit card number is required\",[Ui.CardExpiry]:\"Expiration date is required\",[Ui.CardName]:\"Full name is required\"}[e])&&void 0!==t?t:\"Field is required\",type:\"required\"}}createInvalidError(e){var t,n,i,r;const o={[Ui.CardCode]:{message:\"Invalid card code\",type:\"invalid_card_code\"},[Ui.CardCodeVerification]:{message:\"Invalid card code\",type:\"invalid_card_code\"},[Ui.CardNumber]:{message:\"Invalid card number\",type:\"invalid_card_number\"},[Ui.CardNumberVerification]:{message:\"Invalid card number\",type:\"invalid_card_number\"},[Ui.CardExpiry]:{message:\"Invalid card expiry\",type:\"invalid_card_expiry\"},[Ui.CardName]:{message:\"Invalid card name\",type:\"invalid_card_name\"}};return{fieldType:e,message:null!==(n=null===(t=o[e])||void 0===t?void 0:t.message)&&void 0!==n?n:\"Invalid field\",type:null!==(r=null===(i=o[e])||void 0===i?void 0:i.type)&&void 0!==r?r:\"invalid\"}}isValidForm(e){return Object.keys(e.fields).every(t=>{var n;return null===(n=e.fields[t])||void 0===n?void 0:n.isValid})}isValidParam(e){return[\"number\",\"cvv\",\"expirationDate\",\"postalCode\",\"cardholderName\",\"cardType\"].includes(e)}}const eu=Si(e=>{const t=window,n=new Ti(e),i=new $i(a(),t,n),r=new Io(i,t),o=new Xl(i,n);return new Yl(e,r,o)},[{id:\"braintree\"}]);var tu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})},nu=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n};class iu{constructor(e){this._paymentIntegrationService=e}execute(e,t){var n,i;return this._isHostedPaymentFormEnabled(null===(n=e.payment)||void 0===n?void 0:n.methodId,null===(i=e.payment)||void 0===i?void 0:i.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve();const t=e&&e.creditCard&&e.creditCard.form,n=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:i=\"\"}={}}=n.getStoreConfigOrThrow();if(!t)throw new _i;const r=this._paymentIntegrationService.createHostedForm(i,t);return r.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=r,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new Pd)}_executeWithoutHostedForm(e,t){return tu(this,void 0,void 0,function*(){const{payment:n}=e,i=nu(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new uo([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:r}))})}_executeWithHostedForm(e,t){return tu(this,void 0,void 0,function*(){const{payment:n}=e,i=nu(e,[\"payment\"]),r=this._hostedForm;if(!r)throw new ai(ni.PaymentNotInitialized);if(!n||!n.methodId)throw new uo([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(i,t),yield r.validate().then(()=>r.submit(n))})}_isHostedPaymentFormEnabled(e,t){return!!e&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(e){return!Ce(e&&e.creditCard&&e.creditCard.form.fields).every(J)}}var ru=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ou extends iu{constructor(e,t){super(e),this.paymentIntegrationService=e,this.cbaMGPSScriptLoader=t,this.sessionId=\"\"}initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return ru(this,void 0,void 0,function*(){yield t.initialize.call(this,e);const{methodId:n}=e;yield this.paymentIntegrationService.loadPaymentMethod(n);const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(n);if(!function(e){return\"object\"==typeof e&&null!==e&&\"initializationData\"in e&&\"object\"==typeof e.initializationData&&null!==e.initializationData&&\"merchantId\"in e.initializationData&&\"string\"==typeof e.initializationData.merchantId&&(\"boolean\"==typeof e.initializationData.isTestModeFlagEnabled||void 0===e.initializationData.isTestModeFlagEnabled)}(r))throw new ii(ti.MissingPaymentMethod);const{clientToken:o,initializationData:{isTestModeFlagEnabled:a=!1,merchantId:s},config:{is3dsEnabled:d}}=r;if(d){if(this.threeDSjs=yield this.cbaMGPSScriptLoader.load(a),!this.threeDSjs)throw new ai(ni.PaymentNotInitialized);if(!o||!s)throw new ii(ti.MissingPaymentMethod);if(this.sessionId=o,this.locale=i.getLocale(),!this.locale)throw new ii(ti.MissingCart);yield this.threeDSjs.configure({merchantId:s,sessionId:this.sessionId,callback:()=>{var e;if(null===(e=this.threeDSjs)||void 0===e?void 0:e.isConfigured())return this.paymentIntegrationService.getState();throw new eo(\"Failed to configure 3DS API.\")},configuration:{userLanguage:this.locale,wsVersion:62}})}return Promise.resolve()})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return ru(this,void 0,void 0,function*(){const{payment:i}=e,r=i&&i.paymentData;if(!i||!r)throw new uo([\"payment.paymentData\"]);const o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i.methodId),{is3dsEnabled:a}=o.config;if(a){const t=Object.assign(Object.assign({},r),{threeDSecure:{token:this.sessionId}});e.payment&&(e.payment.paymentData=t)}return n.execute.call(this,e,t).catch(e=>{if(!a||!ya(e)||!ve(e.body.errors,{code:\"three_d_secure_required\"}))return Promise.reject(e);const t=this.paymentIntegrationService.getState(),n=t.getOrder(),{storeProfile:{storeId:i}}=t.getStoreConfigOrThrow();if(!n||!this.sessionId)throw new ii(ti.MissingCheckout);const r=`${i}_${n.orderId}`;if(\"object\"!=typeof(o=e.body)||null===o||!(\"three_ds_result\"in o)||\"object\"!=typeof o.three_ds_result||null===o.three_ds_result||!(\"token\"in o.three_ds_result)||\"string\"!=typeof o.three_ds_result.token)throw new rr;var o;const{three_ds_result:{token:s}}=e.body;return s?this.initiateAuthentication(r,s):Promise.reject(e)})})}finalize(e){return ru(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState();return t.getOrder()&&t.getPaymentStatus()===ll.FINALIZE?(yield this.paymentIntegrationService.finalizeOrder(e),Promise.resolve()):Promise.reject(new Pd)})}deinitialize(){return this.threeDSjs=void 0,this.sessionId=\"\",super.deinitialize()}initiateAuthentication(e,t){return ru(this,void 0,void 0,function*(){const n=yield new Promise((n,i)=>{if(!this.threeDSjs)throw new ai(ni.PaymentNotInitialized);this.threeDSjs.initiateAuthentication(e,t,e=>{const t=e.error;return t?i(new eo(t.msg)):this.threeDSjs&&\"PROCEED\"===e.gatewayRecommendation?n(e.restApiResponse):i(new eo)})});if(n.transaction&&\"AUTHENTICATION_AVAILABLE\"===n.transaction.authenticationStatus)return this.authenticatePayer(e,t);throw new eo})}authenticatePayer(e,t,n=1){return ru(this,void 0,void 0,function*(){return new Promise((i,r)=>{if(!this.threeDSjs)return r(new ai(ni.PaymentNotInitialized));this.threeDSjs.authenticatePayer(e,t,i=>ru(this,void 0,void 0,function*(){const o=i.error;return o?o.cause&&\"SERVER_BUSY\"===o.cause&&n<5?(yield new Promise(e=>setTimeout(e,3e3)),this.authenticatePayer(e,t,++n)):r(new eo):new Promise(ce)}),{fullScreenRedirect:!0})})})}}class au{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e){return t=this,n=void 0,r=function*(){if(yield this._scriptLoader.loadScript(`//${e?\"test\":\"ap\"}-gateway.mastercard.com/static/threeDS/1.3.0/three-ds.min.js`),!this._window.ThreeDS)throw new gi;return this._window.ThreeDS},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}}const su=Si(e=>new ou(e,new au(a())),[{id:\"cba_mpgs\"}]);var du;!function(e){e.OffsiteRedirect=\"offsite_redirect\"}(du||(du={}));class cu extends iu{constructor(e){super(e),this.paymentIntegrationService=e}finalize(e){const t=this.paymentIntegrationService.getState();return t.getOrder()&&t.getPaymentStatus()===ll.FINALIZE&&this.paymentIntegrationService.finalizeOrder(e),Promise.reject(new Pd)}_executeWithHostedForm(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=this._hostedForm;if(!r)throw new ai(ni.PaymentNotInitialized);if(!n||!n.methodId)throw new uo([\"payment.methodId\"]);try{yield r.validate(),yield this.paymentIntegrationService.submitOrder(i,t),yield r.submit(n)}catch(e){return this._processResponse(e)}this.paymentIntegrationService.loadCurrentOrder()},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}_processResponse(e){if(!ya(e))return Promise.reject(e);const t=e.body.additional_action_required;return t&&t.type===du.OffsiteRedirect?this._performRedirect(t):Promise.reject(e)}_performRedirect(e){return new Promise(()=>{window.location.replace(e.data.redirect_url)})}}class lu extends cu{_executeWithoutHostedForm(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new uo([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:Object.assign(Object.assign({},r),{formattedPayload:this._createFormattedPayload(n.methodId,r)})}))}catch(e){return this._processResponse(e)}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}_createFormattedPayload(e,t){if(\"fawry\"===e&&\"customerMobile\"in t&&\"customerEmail\"in t){const e=t;return{customerMobile:e.customerMobile,customerEmail:e.customerEmail}}}}const uu=Si(e=>new lu(e),[{gateway:\"checkoutcom\",id:\"fawry\"}]);function hu(e){return ya(e)&&ve(e.body.errors,{code:\"three_d_secure_required\"})}var pu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})},mu=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n};class yu extends iu{constructor(e,t){super(e),this.paymentIntegrationService=e,this.formPoster=t}finalize(e){const t=this.paymentIntegrationService.getState();return t.getOrder()&&t.getPaymentStatus()===ll.FINALIZE&&this.paymentIntegrationService.finalizeOrder(e),Promise.reject(new Pd)}_executeWithoutHostedForm(e,t){return pu(this,void 0,void 0,function*(){const{payment:n}=e,i=mu(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new uo([\"payment.paymentData\"]);yield this.paymentIntegrationService.submitOrder(i,t);try{yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:r}))}catch(e){return hu(e)?this._handleThreeDSecure(e):Promise.reject(e)}})}_executeWithHostedForm(e,t){return pu(this,void 0,void 0,function*(){const{payment:n}=e,i=mu(e,[\"payment\"]),r=this._hostedForm;if(!r)throw new ai(ni.PaymentNotInitialized);if(!n||!n.methodId)throw new uo([\"payment.methodId\"]);try{yield r.validate(),yield this.paymentIntegrationService.submitOrder(i,t),yield r.submit(n)}catch(e){return hu(e)?this._handleThreeDSecure(e):Promise.reject(e)}this.paymentIntegrationService.loadCurrentOrder()})}_handleThreeDSecure(e){const{acs_url:t,payer_auth_request:n,callback_url:i,merchant_data:r}=e.body.three_ds_result;return new Promise(()=>this.formPoster.postForm(t,{PaReq:n||null,TermUrl:i||null,MD:r||null}))}}const gu=Si(e=>new yu(e,Ee()),[{gateway:\"checkoutcom\",id:\"credit_card\"},{gateway:\"checkoutcom\",id:\"card\"}]);class vu extends cu{_executeWithoutHostedForm(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=null==n?void 0:n.paymentData;if(!n||!r)throw new uo([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:Object.assign(Object.assign({},r),{formattedPayload:this._createFormattedPayload(n.methodId,r)})}))}catch(e){return this._processResponse(e)}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}_createFormattedPayload(e,t){const n={iban:\"\",bic:\"\"};if(\"sepa\"===e&&document&&\"iban\"in t&&\"bic\"in t){const{iban:e,bic:i}=t;n.iban=e,n.bic=i}return n}}const fu=Si(e=>new vu(e),[{gateway:\"checkoutcom\",id:\"sepa\"}]);class Su extends cu{_executeWithoutHostedForm(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=null==n?void 0:n.paymentData;if(!n||!r)throw new uo([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:Object.assign(Object.assign({},r),{formattedPayload:this._createFormattedPayload(n.methodId,r)})}))}catch(e){return this._processResponse(e)}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}_createFormattedPayload(e,t){if(\"ideal\"===e&&\"bic\"in t)return{bic:t.bic}}}const _u=Si(e=>new Su(e),[{gateway:\"checkoutcom\",id:\"ideal\"}]);const wu=[\"boleto\",\"oxxo\",\"qpay\",\"ideal\"];class Iu extends cu{_executeWithoutHostedForm(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=null==n?void 0:n.paymentData;if(!n||!r)throw new uo([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:Object.assign(Object.assign({},r),{formattedPayload:this._createFormattedPayload(n.methodId,r)})}))}catch(e){return this._processResponse(e)}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}_createFormattedPayload(e,t){const n={ccDocument:\"\"},i=\"ccDocument\"in t?t.ccDocument:\"\";return-1!==wu.indexOf(e)&&i&&(n.ccDocument=i),n}}const Cu=Si(e=>new Iu(e),[{gateway:\"checkoutcom\"}]);var bu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Pu{constructor(e,t){this._paymentIntegrationService=e,this._clearpayScriptLoader=t}initialize(e){return bu(this,void 0,void 0,function*(){const{getPaymentMethodOrThrow:t}=this._paymentIntegrationService.getState(),n=t(e.methodId,e.gatewayId),i=this._paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features;this._clearpaySdk=yield this._clearpayScriptLoader.load(n,i)})}deinitialize(){return this._clearpaySdk=void 0,Promise.resolve()}execute(e,t){return bu(this,void 0,void 0,function*(){const{gatewayId:n,methodId:i}=e.payment||{};if(!n||!i)throw new uo([\"payment.gatewayId\",\"payment.methodId\"]);const r=this._paymentIntegrationService.getState(),{isStoreCreditApplied:o}=r.getCheckoutOrThrow();yield this._paymentIntegrationService.applyStoreCredit(o),yield this._paymentIntegrationService.validateCheckout(r.getCheckout(),t);const{countryCode:a}=r.getBillingAddressOrThrow();if(!this._isCountrySupported(a))throw new _i(\"Unable to proceed because billing country is not supported.\");return yield this._loadPaymentMethod(n,i,t),yield this._redirectToClearpay(a,this._paymentIntegrationService.getState().getPaymentMethod(i,n)),new Promise(ce)})}finalize(e){var t,n,i;return bu(this,void 0,void 0,function*(){const r=this._paymentIntegrationService.getState(),o=r.getPaymentId(),a=r.getContextConfig();if(!o)throw new ii(ti.MissingCheckout);if(!a||!a.payment.token)throw new ii(ti.MissingCheckoutConfig);const s={methodId:o.providerId,paymentData:{nonce:a.payment.token}};yield this._paymentIntegrationService.submitOrder({},e);try{yield this._paymentIntegrationService.submitPayment(s)}catch(e){if(yield this._paymentIntegrationService.forgetCheckout(o.providerId),yield this._paymentIntegrationService.loadPaymentMethods(),ya(e))throw new Zd(null===(i=null===(n=null===(t=e.body)||void 0===t?void 0:t.errors)||void 0===n?void 0:n[0])||void 0===i?void 0:i.message)}})}_redirectToClearpay(e,t){return bu(this,void 0,void 0,function*(){if(!this._clearpaySdk||!t||!t.clientToken)throw new ai(ni.PaymentNotInitialized);return this._clearpaySdk.initialize({countryCode:e}),this._clearpaySdk.redirect({token:t.clientToken}),Promise.resolve()})}_isCountrySupported(e){return\"GB\"===e}_loadPaymentMethod(e,t,n){var i;return bu(this,void 0,void 0,function*(){try{return yield this._paymentIntegrationService.loadPaymentMethod(e,Object.assign(Object.assign({},n),{params:Object.assign(Object.assign({},null==n?void 0:n.params),{method:t})}))}catch(e){if(e instanceof rr&&422===(null===(i=e.body)||void 0===i?void 0:i.status))throw new _i(\"Clearpay can't process your payment for this order, please try another payment method\");throw e}})}}class Ou{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e,t={}){return n=this,i=void 0,o=function*(){if(yield this._scriptLoader.loadScript(this._getScriptUrl(e.config.testMode,t)),!this._window.AfterPay)throw new gi;return this._window.AfterPay},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}_getScriptUrl(e,t={}){const n=Pi(t,\"PI-4555.clearpay_add_https_to_prod_script\",!1);return e?n?\"https://portal.sandbox.clearpay.co.uk/afterpay-async.js\":\"//portal.sandbox.clearpay.co.uk/afterpay-async.js\":n?\"https://portal.clearpay.co.uk/afterpay-async.js\":\"//portal.clearpay.co.uk/afterpay-async.js\"}}const Eu=Si(e=>new Pu(e,new Ou(a())),[{gateway:\"clearpay\"},{id:\"clearpay\"}]),Au=Si(e=>new iu(e),[{default:!0}]);var Tu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class ku{constructor(e,t){this._paymentIntegrationService=e,this._cardinalClient=t}prepare(e){return Tu(this,void 0,void 0,function*(){yield this._cardinalClient.load(e.id,e.config.testMode),yield this._cardinalClient.configure(yield this._getClientToken(e))})}start(e,t,n,i){return Tu(this,void 0,void 0,function*(){const{getCardInstrument:r,getPaymentMethodOrThrow:o}=this._paymentIntegrationService.getState(),{payment:{methodId:a=\"\",paymentData:s={}}={}}=t,d=Fd(s)&&r(s.instrumentId),c=d?d.iin:i&&i.getBin();c&&(yield this._cardinalClient.runBinProcess(c));try{return yield e(de(t,{payment:{paymentData:{threeDSecure:{token:o(a).clientToken}}}}),n)}catch(e){if(!ya(e)||!ve(e.body.errors,{code:\"three_d_secure_required\"}))throw e;const n=yield this._cardinalClient.getThreeDSecureData(e.body.three_ds_result,this._getOrderData());if(!i)return void(yield this._paymentIntegrationService.submitPayment(de(t.payment,{paymentData:{threeDSecure:n}})));yield i.submit(de(t.payment,{paymentData:{threeDSecure:n}}))}})}_getClientToken(e){return Tu(this,void 0,void 0,function*(){return e.clientToken?e.clientToken:(yield this._paymentIntegrationService.loadPaymentMethod(e.id),this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e.id).clientToken||\"\")})}_getOrderData(){const e=this._paymentIntegrationService.getState(),t=e.getBillingAddressOrThrow(),n=e.getShippingAddress(),i=e.getCheckoutOrThrow(),r=e.getOrderOrThrow();return{billingAddress:t,shippingAddress:n,currencyCode:i.cart.currency.code,id:r.orderId.toString(),amount:i.cart.cartAmount}}}const Du=[100004,1010,1011,1020];var Mu,zu,Nu,xu,Ru,Fu,Lu;!function(e){e.SetupCompleted=\"payments.setupComplete\",e.Validated=\"payments.validated\"}(Mu||(Mu={})),function(e){e.Init=\"init\",e.Complete=\"complete\",e.Confirm=\"confirm\"}(zu||(zu={})),function(e){e.Success=\"SUCCESS\",e.NoAction=\"NOACTION\",e.Failure=\"FAILURE\",e.Error=\"ERROR\"}(Nu||(Nu={})),function(e){e.CCA=\"CCA\",e.Paypal=\"Paypal\",e.Wallet=\"Wallet\",e.VisaCheckout=\"VisaCheckout\",e.ApplePay=\"ApplePay\",e.DiscoverWallet=\"DiscoverWallet\"}(xu||(xu={})),function(e){e.BinProcess=\"bin.process\"}(Ru||(Ru={})),function(e){e.CCA=\"cca\"}(Fu||(Fu={})),function(e){e.Yes=\"Y\",e.No=\"N\"}(Lu||(Lu={}));class Bu{constructor(e){this._scriptLoader=e,this._provider=\"\",this._testMode=!1,this._configurationToken=\"\"}load(e,t=!1){return this._provider=e,this._testMode=t,this._sdk||(this._sdk=this._scriptLoader.load(e,t)),this._sdk.then(ce)}configure(e){if(this._configurationToken){if(this._configurationToken===e)return Promise.resolve();this._sdk=this._scriptLoader.load(`${this._provider}.${Date.now()}`,this._testMode)}return this._getClientSDK().then(t=>new Promise((n,i)=>{t.on(Mu.SetupCompleted,()=>{t.off(Mu.SetupCompleted),t.off(Mu.Validated),this._configurationToken=e,n()}),t.on(Mu.Validated,e=>{t.off(Mu.SetupCompleted),t.off(Mu.Validated),e.ActionCode===Nu.Error&&(H(Du,e.ErrorNumber)&&i(new ii(ti.MissingPaymentMethod)),i(new eo(e.ErrorDescription)))}),t.setup(zu.Init,{jwt:e})}))}runBinProcess(e){return this._getClientSDK().then(t=>t.trigger(Ru.BinProcess,e).catch(ce)).then(e=>{if(!e||!e.Status)throw new ai(ni.PaymentNotInitialized)})}getThreeDSecureData(e,t){return this._getClientSDK().then(n=>new Promise((i,r)=>{n.on(Mu.Validated,(e,t)=>{if(n.off(Mu.Validated),!t)return r(new eo(e.ErrorDescription?e.ErrorDescription:\"An error was encountered while processing the transaction.\"));if(!e.ActionCode)return i({token:t});switch(e.ActionCode){case Nu.Success:return i({token:t});case Nu.NoAction:return e.ErrorNumber>0?r(new eo(e.ErrorDescription)):e.Payment&&e.Payment.ExtendedData&&e.Payment.ExtendedData.SignatureVerification===Lu.Yes?i({token:t}):r(new eo(\"Transaction signature could not be validated.\"));case Nu.Failure:return r(new eo(\"User failed authentication or an error was encountered while processing the transaction.\"));case Nu.Error:return r(new eo(e.ErrorDescription))}});const o={AcsUrl:e.acs_url,Payload:e.merchant_data},a=this._mapToPartialOrder(t,e.payer_auth_request);n.continue(Fu.CCA,o,a)}))}_mapToPartialOrder(e,t){const n={BillingAddress:this._mapToCardinalAddress(e.billingAddress)};return e.paymentData&&(n.Account=this._mapToCardinalAccount(e.paymentData)),e.billingAddress.email&&(n.Email1=e.billingAddress.email),e.shippingAddress&&(n.ShippingAddress=this._mapToCardinalAddress(e.shippingAddress)),{Consumer:n,OrderDetails:{OrderNumber:e.id,Amount:e.amount,CurrencyCode:e.currencyCode,OrderChannel:\"S\",TransactionId:t}}}_mapToCardinalAccount(e){return{AccountNumber:Number(e.ccNumber),ExpirationMonth:Number(e.ccExpiry.month),ExpirationYear:Number(e.ccExpiry.year),NameOnAccount:e.ccName,CardCode:Number(e.ccCvv)}}_mapToCardinalAddress(e){const t={FirstName:e.firstName,LastName:e.lastName,Address1:e.address1,City:e.city,State:e.stateOrProvince,PostalCode:e.postalCode,CountryCode:e.countryCode};return e.address2&&(t.Address2=e.address2),e.phone&&(t.Phone1=e.phone),t}_getClientSDK(){if(!this._sdk)throw new ai(ni.PaymentNotInitialized);return this._sdk}}class ju{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e,t){const n=t?\"https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js\":\"https://static.client.cardinaltrusted.com/songbird/v2.0.0/songbird.js\";return this._scriptLoader.loadScript(`${n}?v=${e}`).then(()=>{if(!this._window.Cardinal)throw new gi;return this._window.Cardinal})}}var Uu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class qu extends iu{constructor(e,t){super(e),this._threeDSecureFlow=t}initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return Uu(this,void 0,void 0,function*(){yield t.initialize.call(this,e);const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),i=n(e.methodId);i.config.is3dsEnabled&&(yield this._threeDSecureFlow.prepare(i))})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return Uu(this,void 0,void 0,function*(){const{payment:{methodId:i=\"\"}={}}=e,{getPaymentMethodOrThrow:r}=this._paymentIntegrationService.getState();return r(i).config.is3dsEnabled?this._threeDSecureFlow.start(n.execute.bind(this),e,t,this._hostedForm):n.execute.call(this,e,t)})}}const Vu=Si(e=>new qu(e,new ku(e,new Bu(new ju(a())))),[{id:\"cybersource\"}]);var Gu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Hu{constructor(e,t){this._paymentIntegrationService=e,this._cardinalClient=t}prepare(e){return Gu(this,void 0,void 0,function*(){yield this._cardinalClient.load(e.id,e.config.testMode)})}start(e,t,n,i){var r,o,a,s;return Gu(this,void 0,void 0,function*(){const{getCardInstrument:d}=this._paymentIntegrationService.getState(),{payment:c={methodId:\"\"}}=t,{paymentData:l={}}=c;try{return yield e(t,n)}catch(e){if(ya(e)&&\"additional_action_required\"===(null===(r=e.body)||void 0===r?void 0:r.status)){const t=null===(a=null===(o=e.body.additional_action_required)||void 0===o?void 0:o.data)||void 0===a?void 0:a.token,n=null===(s=e.body.three_ds_result)||void 0===s?void 0:s.payer_auth_request;yield this._cardinalClient.configure(t);const r=this._getBin(l,d,i);r&&(yield this._cardinalClient.runBinProcess(r));try{return yield this._submitPayment(c,{xid:n},i)}catch(e){if(ya(e)&&ve(e.body.errors,{code:\"three_d_secure_required\"})){const t=e.body.three_ds_result,n=null==t?void 0:t.payer_auth_request;return yield this._cardinalClient.getThreeDSecureData(t,this._getOrderData()),this._submitPayment(c,{token:n},i)}throw e}}throw e}})}_getOrderData(){const e=this._paymentIntegrationService.getState(),t=e.getBillingAddressOrThrow(),n=e.getShippingAddress(),{cart:{currency:{code:i},cartAmount:r}}=e.getCheckoutOrThrow();return{billingAddress:t,shippingAddress:n,currencyCode:i,id:e.getOrderOrThrow().orderId.toString(),amount:r}}_submitPayment(e,t,n){return Gu(this,void 0,void 0,function*(){const i=de({},e,{paymentData:{threeDSecure:t}});n||(yield this._paymentIntegrationService.submitPayment(i)),yield null==n?void 0:n.submit(i)})}_getBin(e,t,n){const i=Fd(e)&&t(e.instrumentId),r=function(e){const t=e;return!Fd(t)&&\"string\"==typeof t.ccName&&\"string\"==typeof t.ccNumber&&\"object\"==typeof t.ccExpiry&&\"string\"==typeof t.ccExpiry.month&&\"string\"==typeof t.ccExpiry.year}(e)&&e.ccNumber,o=n?n.getBin():r;return(i?i.iin:o)||\"\"}}var Wu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class $u extends iu{constructor(e,t){super(e),this._threeDSecureFlow=t}initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return Wu(this,void 0,void 0,function*(){yield t.initialize.call(this,e);const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),i=n(e.methodId);i.config.is3dsEnabled&&(yield this._threeDSecureFlow.prepare(i))})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return Wu(this,void 0,void 0,function*(){const{payment:{methodId:i=\"\"}={}}=e,{getPaymentMethodOrThrow:r}=this._paymentIntegrationService.getState();return r(i).config.is3dsEnabled?this._threeDSecureFlow.start(n.execute.bind(this),e,t,this._hostedForm):n.execute.call(this,e,t)})}}const Yu=Si(e=>new $u(e,new Hu(e,new Bu(new ju(a())))),[{id:\"cybersourcev2\"},{id:\"bnz\"}]);function Ku(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e&&Array.isArray(e.errors)&&\"code\"in e.errors[0]&&\"string\"==typeof e.errors[0].code&&\"provider_data\"in e&&\"object\"==typeof e.provider_data}var Ju=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Zu extends na{constructor(e,t){super(\"adyen\",e),this._scriptLoader=t,this._service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return Ju(this,void 0,void 0,function*(){yield i.initialize.call(this,e,t,n);const r=i.getPaymentMethod.call(this),o=this._service.getState().getStoreConfig();if(!o)throw new ii(ti.MissingCheckoutConfig);return this._adyenClient=yield this._scriptLoader.load({environment:r.config.testMode?\"test\":\"live\",locale:o.storeProfile.storeLanguage}),Promise.resolve()})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});return Ju(this,void 0,void 0,function*(){const n=yield t.getNonce.call(this,e),i=t.getPaymentMethod.call(this);return JSON.stringify({type:i.method,googlePayToken:n,browser_info:cs()})})}processAdditionalAction(e){return Ju(this,void 0,void 0,function*(){if(!ya(e)||!Ku(e.body))throw e;const t=yield this._handleAction(e.body.provider_data);try{return yield this._service.submitPayment(t)}catch(e){return this.processAdditionalAction(e)}})}_handleAction(e){return new Promise((t,n)=>{const i=JSON.parse(e.action);this._getAdyenClient().createFromAction(i,{onAdditionalDetails:e=>{const n={methodId:i.paymentMethodType,paymentData:{nonce:JSON.stringify(e.data)}};t(n)},size:\"05\",onError:e=>n(e)}).mount(\"body\"),n(new Yi)})}_getAdyenClient(){if(!this._adyenClient)throw new ai(ni.PaymentNotInitialized);return this._adyenClient}}var Qu=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Xu{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t,this._isDeinitializationBlocked=!1,this._isContainerMode=!1,this._loadingIndicator=new Sd({containerStyles:vd})}initialize(e){var t,n;return Qu(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId)||!ra(e.methodId))throw new _i('Unable to proceed because \"methodId\" is not a valid key.');this._methodId=e.methodId;const i=e[this._getMethodId()];if(!(null==i?void 0:i.walletButton)&&!(null==i?void 0:i.container))throw new _i(\"Unable to proceed without valid options.\");const{walletButton:r,loadingContainerId:o,container:a,buttonColor:s,buttonSizeMode:d,buttonType:c,onInit:l}=i,u=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(i,[\"walletButton\",\"loadingContainerId\",\"container\",\"buttonColor\",\"buttonSizeMode\",\"buttonType\",\"onInit\"]);this._loadingIndicatorContainer=o,yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodId());const h=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(this._getMethodId());if(this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(t=h.initializationData)||void 0===t?void 0:t.isWebViewExperimentOn)),yield this._googlePayPaymentProcessor.initialize(()=>h,this._getGooglePayClientOptions(null===(n=h.initializationData)||void 0===n?void 0:n.storeCountry)),a){this._isContainerMode=!0;const e=()=>this._addPaymentButtonToContainer(i);l?l(e):e()}else this._addPaymentButton(r,u)})}execute({payment:e}){return Qu(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new uo([\"payment\"]);yield this._paymentIntegrationService.submitOrder();const t=yield this._googlePayPaymentProcessor.getNonce(e.methodId),n=yield this._googlePayPaymentProcessor.extraPaymentData();try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:Object.assign({nonce:t},n)}))}catch(t){yield this._googlePayPaymentProcessor.processAdditionalAction(t,e.methodId)}})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e,t;return this._isDeinitializationBlocked||(this._isContainerMode?null===(e=this._paymentButton)||void 0===e||e.remove():this._clickListener&&(null===(t=this._paymentButton)||void 0===t||t.removeEventListener(\"click\",this._clickListener)),this._paymentButton=void 0,this._clickListener=void 0,this._methodId=void 0,this._isContainerMode=!1),Promise.resolve()}_addPaymentButton(e,t){if(this._paymentButton)return;const n=document.getElementById(e);if(!n)throw new _i(\"Unable to proceed without a walletButton.\");this._paymentButton=n,this._clickListener=this._handleClick(t),this._paymentButton.addEventListener(\"click\",this._clickListener)}_addPaymentButtonToContainer(e){if(this._paymentButton)return;const{container:t,buttonColor:n,buttonSizeMode:i,buttonType:r,onError:o}=e;if(!t)throw new _i(\"Unable to proceed: container ID is not valid.\");const a=this._googlePayPaymentProcessor.addPaymentButton(t,{buttonColor:null!=n?n:\"default\",buttonSizeMode:null!=i?i:\"fill\",buttonType:null!=r?r:\"pay\",onClick:this._handleContainerButtonClick(o)});if(!a)throw new _i(`Unable to proceed: container element \"#${t}\" not found in the DOM.`);this._paymentButton=a}_handleContainerButtonClick(e){return t=>Qu(this,void 0,void 0,function*(){t.preventDefault(),yield this._runGooglePayWidgetInteractionWithErrorHandling(e,()=>Qu(this,void 0,void 0,function*(){this._googlePayPaymentProcessor.setShouldRequestShipping(!1),yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheetAndPay()}))})}_handleClick({onPaymentSelect:e,onError:t}){return n=>Qu(this,void 0,void 0,function*(){n.preventDefault(),yield this._runGooglePayWidgetInteractionWithErrorHandling(t,()=>Qu(this,void 0,void 0,function*(){this._googlePayPaymentProcessor.setShouldRequestShipping(!1),yield this._googlePayPaymentProcessor.initializeWidget(),this._isDirectPayOnClickEnabled()?yield this._interactWithPaymentSheetAndPay():yield this._interactWithPaymentSheet()})),null==e||e()})}_interactWithPaymentSheetAndPay(){return Qu(this,void 0,void 0,function*(){const e=yield this._googlePayPaymentProcessor.showPaymentSheet();this._toggleBlockDeinitialization(!0),this._toggleLoadingIndicator(!0);const t=this._getMethodId(),n=this._paymentIntegrationService.getState(),{features:i}=n.getStoreConfigOrThrow().checkoutSettings,r=Pi(i,\"PI-5031.google_pay_dont_override_address\"),o=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(e);o&&!r&&(yield this._paymentIntegrationService.updateBillingAddress(o)),yield this._googlePayPaymentProcessor.setExternalCheckoutXhr(t,e),yield this._paymentIntegrationService.loadCheckout(),yield this._paymentIntegrationService.loadPaymentMethod(t);const a=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t);yield this._googlePayPaymentProcessor.initialize(()=>a),yield this.execute({useStoreCredit:!1,payment:{methodId:t}}),this._completeCheckoutFlow()})}_completeCheckoutFlow(){window.location.replace(\"/checkout/order-confirmation\"),this._toggleLoadingIndicator(!1),this._toggleBlockDeinitialization(!1)}_interactWithPaymentSheet(){return Qu(this,void 0,void 0,function*(){const e=yield this._googlePayPaymentProcessor.showPaymentSheet(),t=this._paymentIntegrationService.getState(),{features:n}=t.getStoreConfigOrThrow().checkoutSettings,i=Pi(n,\"PI-5031.google_pay_dont_override_address\");this._toggleBlockDeinitialization(!0),this._toggleLoadingIndicator(!0);const r=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(e);r&&!i&&(yield this._paymentIntegrationService.updateBillingAddress(r)),yield this._googlePayPaymentProcessor.setExternalCheckoutXhr(this._getMethodId(),e),yield this._paymentIntegrationService.loadCheckout(),yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodId()),this._toggleLoadingIndicator(!1),this._toggleBlockDeinitialization(!1)})}_getMethodId(){return oi(this._methodId,()=>new ai(ni.PaymentNotInitialized))}_getIsSignedInOrThrow(){return Qu(this,void 0,void 0,function*(){try{return!!(yield this._googlePayPaymentProcessor.getNonce(this._getMethodId()))}catch(e){if(e instanceof ii&&e.subtype===ti.MissingPaymentToken)return!1;throw e}})}_handleOfferTrigger(e){return Qu(this,void 0,void 0,function*(){let t=!1,n=\"Sign in to Google Pay first to apply or remove promo codes.\";try{t=yield this._getIsSignedInOrThrow()}catch(e){e instanceof ii&&(n=e.message)}if(t){const{newOfferInfo:t,error:n}=yield this._googlePayPaymentProcessor.handleCoupons(e);return{newOfferInfo:t,error:n}}return{error:{reason:Zo.OFFER_INVALID,message:n,intent:Qo.OFFER}}})}_getGooglePayClientOptions(e){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:t,offerData:n})=>Qu(this,void 0,void 0,function*(){if(t!==Qo.INITIALIZE&&t!==Qo.OFFER)return;const{offerChangeTriggers:i}=this._googlePayPaymentProcessor.getCallbackTriggers(),{newOfferInfo:r,error:o}=i.includes(t)?yield this._handleOfferTrigger(n):{},a=o;yield this._paymentIntegrationService.loadCheckout();const{code:s}=this._paymentIntegrationService.getState().getCartOrThrow().currency,d=this._googlePayPaymentProcessor.getTotalPrice();return Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},e&&{countryCode:e}),{currencyCode:s,totalPriceStatus:Yo.FINAL,totalPrice:d})},r&&{newOfferInfo:r}),a&&{error:a})})}}}_runGooglePayWidgetInteractionWithErrorHandling(e,t){return Qu(this,void 0,void 0,function*(){try{yield t()}catch(t){let n=t;if(this._toggleLoadingIndicator(!1),ia(t)){if(\"CANCELED\"===t.statusCode)throw new Yi;n=new eo(JSON.stringify(t))}throw null==e||e(new eo(\"An error occurred while requesting your Google Pay payment details.\")),n}finally{this._toggleBlockDeinitialization(!1)}})}_isDirectPayOnClickEnabled(){const{features:e}=this._paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings;return Pi(e,\"PI-5111.google_pay_direct_pay_on_click\")}_toggleBlockDeinitialization(e){this._isDeinitializationBlocked=e}_toggleLoadingIndicator(e){e&&this._loadingIndicatorContainer?this._loadingIndicator.show(this._loadingIndicatorContainer):this._loadingIndicator.hide()}}const eh=Si(e=>new Xu(e,new da(la(),new Zu(e,new xd(a(),s())),n(),Ee())),[{id:\"googlepayadyenv2\"}]);var th=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class nh extends na{constructor(e,t){super(\"adyen\",e),this._scriptLoader=t,this._service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return th(this,void 0,void 0,function*(){yield i.initialize.call(this,e,t,n);const r=i.getPaymentMethod.call(this),o=this._service.getState().getStoreConfig();if(!o)throw new ii(ti.MissingCheckoutConfig);return this._adyenClient=yield this._scriptLoader.load({environment:r.config.testMode?\"test\":\"live\",locale:o.storeProfile.storeLanguage}),Promise.resolve()})}processAdditionalAction(e){return th(this,void 0,void 0,function*(){if(!ya(e)||!Ku(e.body))throw e;const t=yield this._handleAction(e.body.provider_data);try{return yield this._service.submitPayment(t)}catch(e){return this.processAdditionalAction(e)}})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});return th(this,void 0,void 0,function*(){const n=yield t.getNonce.call(this,e),i=t.getPaymentMethod.call(this);return JSON.stringify({type:i.method,googlePayToken:n,browser_info:cs()})})}_handleAction(e){return new Promise((t,n)=>{const i=JSON.parse(e.action);this._getAdyenClient().createFromAction(i,{onAdditionalDetails:e=>{const n={methodId:i.paymentMethodType,paymentData:{nonce:JSON.stringify(e.data)}};t(n)},size:\"05\",onError:e=>n(e)}).mount(\"body\"),n(new Yi)})}_getAdyenClient(){if(!this._adyenClient)throw new ai(ni.PaymentNotInitialized);return this._adyenClient}}const ih=Si(e=>new Xu(e,new da(la(),new nh(e,new Ud(a(),s())),n(),Ee())),[{id:\"googlepayadyenv3\"}]),rh=Si(e=>new Xu(e,new da(la(),new pa(e),n(),Ee())),[{id:\"googlepayauthorizenet\"}]),oh=Si(e=>{const t=n();return new Xu(e,new da(la(),new fa(e,t),t,Ee()))},[{id:\"googlepaycheckoutcom\"}]),ah=Si(e=>new Xu(e,new da(la(),new _a(e),n(),Ee())),[{id:\"googlepaycybersourcev2\"},{id:\"googlepaybnz\"}]),sh=Si(e=>new Xu(e,new da(la(),new Ca(e),n(),Ee())),[{id:\"googlepayorbital\"}]),dh=Si(e=>new Xu(e,new da(la(),new Va(e,new La(a())),n(),Ee())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeupe\"},{id:\"googlepaystripeocs\"}]),ch=Si(e=>new Xu(e,new da(la(),new Wa(e),n(),Ee())),[{id:\"googlepayworldpayaccess\"}]),lh=Si(e=>{const t=n(),i=window,r=new Ti(e),o=new Vi(new $i(a(),i,r));return new Xu(e,new da(la(),new Ka(e,o),t,Ee()))},[{id:\"googlepaybraintree\"}]);var uh,hh;!function(e){e.Approved=\"APPROVED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\"}(uh||(uh={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(hh||(hh={}));var ph=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class mh extends Xu{constructor(e,t,n,i){super(e,t),this._payPalCommerceSdk=n,this._requestSender=i}execute({payment:e}){return ph(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new uo([\"payment\"]);const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow().id,{initializationData:i}=t.getPaymentMethodOrThrow(this._getMethodId()),{orderId:r}=yield this.getOrderId(n),{card_information:o}=i||{},a=yield this._googlePayPaymentProcessor.getNonce(e.methodId),s={tokenizationData:{type:\"PAYMENT_GATEWAY\",token:atob(a)},info:{cardNetwork:(null==o?void 0:o.type)||\"\",cardDetails:(null==o?void 0:o.number)||\"\"},type:\"CARD\"};yield this.confirmOrder(r,s),yield this._paymentIntegrationService.submitOrder();try{const t={formattedPayload:{method_id:e.methodId,paypal_account:{order_id:r}}};yield this._paymentIntegrationService.submitPayment({methodId:e.methodId,paymentData:t})}catch(e){yield this._googlePayPaymentProcessor.processAdditionalAction(e)}})}confirmOrder(e,t){return ph(this,void 0,void 0,function*(){const n=this._paymentIntegrationService.getState(),i=n.getPaymentMethodOrThrow(this._getMethodId());if(!i.initializationData)throw new ii(ti.MissingPaymentMethod);const r=n.getCartOrThrow().currency.code,o=yield this._payPalCommerceSdk.getPayPalGooglePaySdk(i,r,n.getLocale(),!0),{status:a}=yield o.Googlepay().confirmOrder({orderId:e,paymentMethodData:t});if(a===uh.PayerActionRequired)return yield o.Googlepay().initiatePayerAction({orderId:e}),Promise.resolve();if(a!==uh.Approved)throw new _i(\"Payment is not approved.\");return Promise.resolve()})}getOrderId(e){return ph(this,void 0,void 0,function*(){const t={cartId:e,shouldSaveInstrument:!1},{body:n}=yield this._requestSender.post(\"/api/storefront/payments/googlepaypaypalcommercecheckout\",{headers:Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr),body:t});return n})}}const yh=Si(e=>{const t=new ts(a());return new mh(e,new da(la(),new rs(e,t),n(),Ee()),t,n())},[{id:\"googlepaypaypalcommerce\"}]);var gh,vh;!function(e){e.Approved=\"APPROVED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\"}(gh||(gh={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(vh||(vh={}));var fh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Sh extends Xu{constructor(e,t,n,i){super(e,t),this._payPalSdkHelper=n,this._requestSender=i}execute({payment:e}){return fh(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new uo([\"payment\"]);const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow().id,{initializationData:i}=t.getPaymentMethodOrThrow(this._getMethodId()),{orderId:r}=yield this.getOrderId(n),{card_information:o}=i||{},a=yield this._googlePayPaymentProcessor.getNonce(e.methodId),s={tokenizationData:{type:\"PAYMENT_GATEWAY\",token:atob(a)},info:{cardNetwork:(null==o?void 0:o.type)||\"\",cardDetails:(null==o?void 0:o.number)||\"\"},type:\"CARD\"};yield this.confirmOrder(r,s),yield this._paymentIntegrationService.submitOrder();try{const t={formattedPayload:{method_id:e.methodId,paypal_account:{order_id:r}}};yield this._paymentIntegrationService.submitPayment({methodId:e.methodId,paymentData:t})}catch(e){yield this._googlePayPaymentProcessor.processAdditionalAction(e)}})}confirmOrder(e,t){return fh(this,void 0,void 0,function*(){const n=this._paymentIntegrationService.getState(),i=n.getPaymentMethodOrThrow(this._getMethodId());if(!i.initializationData)throw new ii(ti.MissingPaymentMethod);const r=n.getCartOrThrow().currency.code,o=yield this._payPalSdkHelper.getPayPalGooglePaySdk(i,r,!0),{status:a}=yield o.Googlepay().confirmOrder({orderId:e,paymentMethodData:t});if(a===gh.PayerActionRequired)return yield o.Googlepay().initiatePayerAction({orderId:e}),Promise.resolve();if(a!==gh.Approved)throw new _i(\"Payment is not approved.\");return Promise.resolve()})}getOrderId(e){return fh(this,void 0,void 0,function*(){const t={cartId:e,shouldSaveInstrument:!1},{body:n}=yield this._requestSender.post(\"/api/storefront/payments/googlepay_bigcommerce_paymentscheckout\",{headers:Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr),body:t});return n})}}const _h=Si(e=>{const t=new Fr(a());return new Sh(e,new da(la(),new ss(e,t),n(),Ee()),t,n())},[{id:\"googlepay_bigcommerce_payments\"}]),wh=Si(e=>new Xu(e,new da(la(),new us(e,Ee()),n(),Ee())),[{id:\"googlepaytdonlinemart\"}]);class Ih extends ei{constructor(e,t,n){super(n||\"Payment cannot be processed for this order, please select another payment method\"),this.type=\"custom_provider_execute_error\",this.name=t,this.subtype=e}}class Ch{constructor(e,t){this.paymentIntegrationService=e,this.formPoster=t}execute(e,t){var n,i,r,o,a;return i=this,r=void 0,a=function*(){const{payment:i}=e,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!(null==i?void 0:i.methodId))throw new uo([\"payment.methodId\"]);yield this.paymentIntegrationService.loadPaymentMethod(i.methodId,t);const o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i.methodId);if(!(null===(n=o.initializationData)||void 0===n?void 0:n.processable))throw new Ih(\"payment.humm_not_processable_error\",\"hummNotProcessableError\");yield this.paymentIntegrationService.submitOrder(r,t);try{yield this.paymentIntegrationService.submitPayment({methodId:i.methodId})}catch(e){return this.isOffsiteRedirectResponse(e)?this.handleOffsiteRedirectResponse(e):Promise.reject(e)}},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}d((a=a.apply(i,r||[])).next())})}finalize(){return Promise.reject(new Pd)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}handleOffsiteRedirectResponse(e){const t=e.body.additional_action_required.data.redirect_url,n=e.body.provider_data;return new Promise(e=>{this.formPoster.postForm(t,JSON.parse(n),e)})}isOffsiteRedirectResponse(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;if(!t.body)return!1;const n=t.body;return\"additional_action_required\"===n.status&&!!n.additional_action_required&&\"offsite_redirect\"===n.additional_action_required.type&&\"string\"==typeof n.provider_data}}const bh=Si(e=>new Ch(e,Ee()),[{id:\"humm\"}]),Ph=[\"AT\",\"BE\",\"CA\",\"CH\",\"CZ\",\"DE\",\"DK\",\"ES\",\"FI\",\"FR\",\"GB\",\"GR\",\"IE\",\"IT\",\"NL\",\"NO\",\"NZ\",\"PL\",\"PT\",\"SE\"],Oh=[\"AU\"];var Eh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ah{constructor(e,t){this.paymentIntegrationService=e,this.klarnaScriptLoader=t}initialize(e){return Eh(this,void 0,void 0,function*(){this.klarnaCredit=yield this.klarnaScriptLoader.load(),this.unsubscribe=this.paymentIntegrationService.subscribe(t=>{t.isPaymentMethodInitialized({methodId:e.methodId,gatewayId:e.gatewayId})&&this.loadWidget(e)},e=>{const t=e.getCheckout();return t&&t.outstandingBalance},e=>{const t=e.getCheckout();return t&&t.coupons}),yield this.loadWidget(e)})}deinitialize(){return this.unsubscribe&&this.unsubscribe(),Promise.resolve()}execute(e,t){return Eh(this,void 0,void 0,function*(){if(!e.payment)throw new _i('Unable to proceed because \"payload.payment\" argument is not provided.');const n=e.payment,{paymentData:i}=n,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(n,[\"paymentData\"]),{authorization_token:o}=yield this.authorize();yield this.paymentIntegrationService.initializePayment(r.methodId,{authorizationToken:o}),yield this.paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:r,useStoreCredit:e.useStoreCredit}),t)})}finalize(){return Promise.reject(new Pd)}loadWidget(e){return Eh(this,void 0,void 0,function*(){if(!e.klarna)throw new _i('Unable to load widget because \"options.klarna\" argument is not provided.');const{methodId:t,klarna:{container:n,onLoad:i}}=e;return yield this.paymentIntegrationService.loadPaymentMethod(t),new Promise(e=>{const r=this.paymentIntegrationService.getState().getPaymentMethod(t);if(!r)throw new ii(ti.MissingPaymentMethod);if(!this.klarnaCredit||!r.clientToken)throw new ai(ni.PaymentNotInitialized);this.klarnaCredit.init({client_token:r.clientToken}),this.klarnaCredit.load({container:n},t=>{i&&i(t),e(t)})})})}getUpdateSessionData(e,t){if(!H([...Ph,...Oh],e.countryCode))return{};const n={billing_address:this.mapToKlarnaAddress(e,e.email)};return t&&(n.shipping_address=this.mapToKlarnaAddress(t,e.email)),n}needsStateCode(e){return H(Oh,e)}mapToKlarnaAddress(e,t){const n={street_address:e.address1,city:e.city,country:e.countryCode,given_name:e.firstName,family_name:e.lastName,postal_code:e.postalCode,region:this.needsStateCode(e.countryCode)?e.stateOrProvinceCode:e.stateOrProvince,email:t};return e.address2&&(n.street_address2=e.address2),e.phone&&(n.phone=e.phone),n}authorize(){return new Promise((e,t)=>{const n=this.paymentIntegrationService.getState(),i=n.getBillingAddress(),r=n.getShippingAddress();if(!i)throw new ii(ti.MissingBillingAddress);if(!this.klarnaCredit)throw new ai(ni.PaymentNotInitialized);const o=this.getUpdateSessionData(i,r);this.klarnaCredit.authorize(o,n=>n.approved?e(n):n.show_form?t(new Yi):void t(new to))})}}class Th{constructor(e,t=window){this.scriptLoader=e,this.klarnaWindow=t}load(){var e,t,n,i,r,o;return n=this,i=void 0,o=function*(){if((null===(e=this.klarnaWindow.Klarna)||void 0===e?void 0:e.Credit)||(yield this.scriptLoader.loadScript(\"//credit.klarnacdn.net/lib/v1/api.js\")),!(null===(t=this.klarnaWindow.Klarna)||void 0===t?void 0:t.Credit))throw new gi;return this.klarnaWindow.Klarna.Credit},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())})}}const kh=Si(e=>new Ah(e,new Th(a())),[{id:\"klarna\"}]);var Dh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Mh{constructor(e,t,n){this.paymentIntegrationService=e,this.klarnav2ScriptLoader=t,this.klarnav2TokenUpdater=n}initialize(e){return Dh(this,void 0,void 0,function*(){this.klarnaPayments=yield this.klarnav2ScriptLoader.load(),this.unsubscribe=this.paymentIntegrationService.subscribe(t=>{t.isPaymentMethodInitialized({methodId:e.methodId,gatewayId:e.gatewayId})&&this.loadPaymentsWidget(e)},e=>{const t=e.getCheckout();return t&&t.outstandingBalance},e=>{const t=e.getCheckout();return t&&t.coupons}),yield this.loadPaymentsWidget(e)})}deinitialize(){return this.unsubscribe&&this.unsubscribe(),Promise.resolve()}execute(e,t){return Dh(this,void 0,void 0,function*(){if(!e.payment)throw new _i('Unable to proceed because \"payload.payment\" argument is not provided.');const n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e.payment,[]),{gatewayId:i,methodId:r}=n;if(!i)throw new _i('Unable to proceed because \"payload.payment.gatewayId\" argument is not provided.');const o=this.paymentIntegrationService.getState(),{id:a}=o.getCartOrThrow(),{clientToken:s,initializationData:d}=o.getPaymentMethodOrThrow(r),{klarnaMultipleRadioButton:c}=d||{};yield this.klarnav2TokenUpdater.klarnaOrderInitialization(a,s);const l=this.isKlarnaMultipleRadioButtonEnabled(c,i,r),{authorization_token:u}=yield this.authorizeOrThrow(l,r);yield this.paymentIntegrationService.initializePayment(i,{authorizationToken:u}),yield this.paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:n,useStoreCredit:e.useStoreCredit}),t)})}finalize(){return Promise.reject(new Pd)}loadPaymentsWidget(e){return Dh(this,void 0,void 0,function*(){if(!e.klarnav2)throw new _i('Unable to load widget because \"options.klarnav2\" argument is not provided.');const{methodId:t,gatewayId:n,klarnav2:{container:i,onLoad:r}}=e;if(!n)throw new _i('Unable to proceed because \"payload.payment.gatewayId\" argument is not provided.');const o=this.paymentIntegrationService.getState(),a={params:o.getCartOrThrow().id};return yield this.klarnav2TokenUpdater.updateClientToken(n,{params:a}).catch(()=>{throw new ii(ti.MissingPaymentMethod)}),new Promise(e=>{const a=o.getPaymentMethodOrThrow(t),{klarnaMultipleRadioButton:s}=a.initializationData||{};if(!this.klarnaPayments||!a.clientToken)throw new ai(ni.PaymentNotInitialized);this.klarnaPayments.init({client_token:a.clientToken}),this.klarnaPayments.load({container:i,payment_method_category:this.isKlarnaMultipleRadioButtonEnabled(s,n,t)},t=>{r&&r(t),e(t)})})})}getUpdateSessionData(e,t,n){if(!H([...Ph,...Oh],t.countryCode))return{};const i={billing_address:this.mapToKlarnaAddress(e,t,t.email)};return n&&(i.shipping_address=this.mapToKlarnaAddress(e,n,t.email)),i}needsStateCode(e){return H(Oh,e)}isKlarnaMultipleRadioButtonEnabled(e,t,n){return e?n:t}mapToKlarnaAddress(e,t,n){const i=this.paymentIntegrationService.getState(),{checkoutSettings:r}=i.getStoreConfigOrThrow(),o=i.getPaymentMethodOrThrow(e),{enableBillie:a}=o.initializationData||{},s={street_address:t.address1,city:t.city,country:t.countryCode,given_name:t.firstName,family_name:t.lastName,postal_code:t.postalCode,region:this.needsStateCode(t.countryCode)?t.stateOrProvinceCode:t.stateOrProvince,email:n};return t.address2&&(s.street_address2=t.address2),t.phone&&(s.phone=t.phone),t.company&&a&&Pi(r.features,\"PI-3915.b2b_payment_session_for_klarna\")&&(s.organization_name=t.company),s}authorizeOrThrow(e,t){return Dh(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const n=this.paymentIntegrationService.getState(),i=n.getBillingAddressOrThrow(),r=n.getShippingAddress(),o=this.getUpdateSessionData(t,i,r);return new Promise((t,n)=>{if(!this.klarnaPayments)return n(new ai(ni.PaymentNotInitialized));this.klarnaPayments.authorize({payment_method_category:e},o,e=>e.approved?t(e):e.show_form?n(new Yi):void n(new to))})})}}class zh{constructor(e,t=window){this.scriptLoader=e,this.klarnaWindow=t}load(){var e,t,n,i,r,o;return n=this,i=void 0,o=function*(){if((null===(e=this.klarnaWindow.Klarna)||void 0===e?void 0:e.Payments)||(yield this.scriptLoader.loadScript(\"https://x.klarnacdn.net/kp/lib/v1/api.js\")),!(null===(t=this.klarnaWindow.Klarna)||void 0===t?void 0:t.Payments))throw new gi;return this.klarnaWindow.Klarna.Payments},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())})}}class Nh{constructor(e){this.requestSender=e}updateClientToken(e,{timeout:t,params:n}={}){const i=`/api/storefront/payments/${e}`;return this.requestSender.get(i,{timeout:t,headers:Object.assign({Accept:gr.JsonV1,\"X-API-INTERNAL\":mr},vr),params:n})}klarnaOrderInitialization(e,t){return n=this,i=void 0,o=function*(){const n={headers:Object.assign({Accept:gr.JsonV1,\"X-API-INTERNAL\":mr},vr),body:{cartId:e,clientToken:t}};yield this.requestSender.put(\"/api/storefront/initialization/klarna\",n)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}const xh=Si(e=>{const{getHost:t}=e.getState(),i=n({host:t()});return new Mh(e,new zh(a()),new Nh(i))},[{gateway:\"klarna\"}]);class Rh{constructor(e){this._paymentIntegrationService=e}execute(e,t){return n=this,i=void 0,o=function*(){return yield this._paymentIntegrationService.submitOrder(e,t),Promise.resolve()},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new Pd)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const Fh=Si(e=>new Rh(e),[{id:\"testgateway\"}]);var Lh,Bh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};!function(e){e.CREDIT_CARD=\"credit_card\"}(Lh||(Lh={}));const jh=[\"klarnapaylater\",\"klarnasliceit\"];class Uh{constructor(e,t){this.mollieScriptLoader=e,this.paymentIntegrationService=t}initialize(e){return Bh(this,void 0,void 0,function*(){const{mollie:t,methodId:n,gatewayId:i}=e;if(!t)throw new _i('Unable to initialize payment because \"options.mollie\" argument is not provided.');if(!n||!i)throw new _i('Unable to initialize payment because \"methodId\" and/or \"gatewayId\" argument is not provided.');const r=document.querySelectorAll(\".mollie-components-controller\");F(r,e=>e.remove());const o=this.paymentIntegrationService.getState(),a=o.getStoreConfigOrThrow();this.initializeOptions=t;const s=o.getPaymentMethodOrThrow(n,i),{config:{merchantId:d,testMode:c}}=s;if(this.locale=o.getLocale(),!d)throw new ii(ti.MissingPaymentMethod);return this.isCreditCard(n)&&t.form&&this.shouldShowTSVHostedForm(n,i)?this.hostedForm=yield this.mountCardVerificationfields(t.form):this.isCreditCard(n)&&(this.mollieClient=yield this.loadMollieJs(d,a.storeProfile.storeLanguage,c),this.mountElements()),this.unsubscribe=()=>{if(this.paymentIntegrationService.getState().isPaymentMethodInitialized({methodId:e.methodId,gatewayId:e.gatewayId})){const e=document.getElementById(`${i}-${n}-paragraph`);e&&e.remove(),t.disableButton(!1),this.loadPaymentMethodsAllowed(t,n,i)}},this.unsubscribe(),this.loadPaymentMethodsAllowed(t,n,i),Promise.resolve()})}execute(e,t){return Bh(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=null==n?void 0:n.paymentData;if(!n||!n.gatewayId||!r)throw new uo([\"payment\",\"gatewayId\",\"paymentData\"]);try{return yield this.paymentIntegrationService.submitOrder(i,t),Fd(r)?yield this.executeWithVaulted(n):this.isCreditCard(n.methodId)?yield this.executeWithCC(n):yield this.executeWithAPM(n)}catch(e){yield this.processAdditionalAction(e)}})}finalize(){return Promise.resolve()}deinitialize(e){if(this.unsubscribe&&this.unsubscribe(),this.hostedForm&&this.hostedForm.detach(),e&&e.methodId&&e.gatewayId&&!this.hostedForm){const t=document.getElementById(`${e.gatewayId}-${e.methodId}`);t&&t.remove()}else e&&e.methodId&&this.isCreditCard(e.methodId)&&this.cardHolderElement&&this.cardNumberElement&&this.verificationCodeElement&&this.expiryDateElement&&(this.cardHolderElement.unmount(),this.cardHolderElement=void 0,this.cardNumberElement.unmount(),this.cardNumberElement=void 0,this.verificationCodeElement.unmount(),this.verificationCodeElement=void 0,this.expiryDateElement.unmount(),this.expiryDateElement=void 0);return this.mollieClient=void 0,Promise.resolve()}executeWithCC(e){return Bh(this,void 0,void 0,function*(){const t=e.paymentData,{shouldSaveInstrument:n=!1,shouldSetAsDefaultInstrument:i=!1}=qd(t)?t:{},{token:r,error:o}=yield this.getMollieClient().createToken();if(o)return Promise.reject(o);const a={credit_card_token:{token:r},vault_payment_instrument:n,set_as_default_stored_instrument:i,browser_info:cs(),shopper_locale:this.getShopperLocale()};yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:{formattedPayload:a}}))})}executeWithVaulted(e){return Bh(this,void 0,void 0,function*(){if(this.isHostedPaymentFormEnabled(e.methodId,e.gatewayId)){const t=this.hostedForm;if(!t)throw new ai(ni.PaymentNotInitialized);yield t.validate(),yield t.submit(e),yield this.paymentIntegrationService.loadCurrentOrder()}else yield this.paymentIntegrationService.submitPayment(e)})}executeWithAPM(e){return Bh(this,void 0,void 0,function*(){const t=e.paymentData,n=t&&\"issuer\"in t?t.issuer:\"\";yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:Object.assign(Object.assign({},t),{formattedPayload:{issuer:n,shopper_locale:this.getShopperLocale()}})}))})}isCreditCard(e){return e===Lh.CREDIT_CARD}shouldShowTSVHostedForm(e,t){return this.isHostedPaymentFormEnabled(e,t)&&this.isHostedFieldAvailable()}mountCardVerificationfields(e){return new Promise((t,n)=>Bh(this,void 0,void 0,function*(){try{const n=this.paymentIntegrationService.getState().getStoreConfig(),i=null==n?void 0:n.paymentSettings.bigpayBaseUrl;if(!i)throw new ii(ti.MissingCheckoutConfig);const r=this.paymentIntegrationService.createHostedForm(i,e);yield r.attach(),t(r)}catch(e){n(e)}}))}isHostedPaymentFormEnabled(e,t){const{getPaymentMethodOrThrow:n}=this.paymentIntegrationService.getState();return!0===n(e,t).config.isHostedFormEnabled}isHostedFieldAvailable(){var e;return!!(null===(e=this.getInitializeOptions().form)||void 0===e?void 0:e.fields)}processAdditionalAction(e){if(!ya(e))return Promise.reject(e);if(ve(e.body.errors,{code:\"additional_action_required\"})){const{additional_action_required:{data:{redirect_url:t}}}=e.body;return new Promise(()=>window.location.replace(t))}return Promise.reject(e)}getInitializeOptions(){if(!this.initializeOptions)throw new ai(ni.PaymentNotInitialized);return this.initializeOptions}loadMollieJs(e,t,n=!1){return this.mollieClient?Promise.resolve(this.mollieClient):this.mollieScriptLoader.load(e,t,n)}getMollieClient(){if(!this.mollieClient)throw new ai(ni.PaymentNotInitialized);return this.mollieClient}getShopperLocale(){if(!this.locale)throw new ai(ni.PaymentNotInitialized);return this.locale}mountElements(){const{containerId:e,cardNumberId:t,cardCvcId:n,cardExpiryId:i,cardHolderId:r,styles:o}=this.getInitializeOptions();let a;e&&(a=document.getElementById(e)),setTimeout(()=>{if(!e||\"none\"!==(null==a?void 0:a.style.display)){const e=this.getMollieClient();this.cardHolderElement=e.createComponent(\"cardHolder\",{styles:o}),this.cardHolderElement.mount(`#${r}`),this.cardNumberElement=e.createComponent(\"cardNumber\",{styles:o}),this.cardNumberElement.mount(`#${t}`),this.verificationCodeElement=e.createComponent(\"verificationCode\",{styles:o}),this.verificationCodeElement.mount(`#${n}`),this.expiryDateElement=e.createComponent(\"expiryDate\",{styles:o}),this.expiryDateElement.mount(`#${i}`)}},0)}loadPaymentMethodsAllowed(e,t,n){var i;if(jh.includes(t)){const r=null===(i=this.paymentIntegrationService.getState().getCartOrThrow().lineItems)||void 0===i?void 0:i.digitalItems;if(r&&r.length>0){const{containerId:i}=this.getInitializeOptions();if(i){const r=document.getElementById(i);if(r){const i=document.createElement(\"p\");i.setAttribute(\"id\",`${n}-${t}-paragraph`),e.unsupportedMethodMessage&&(i.innerText=e.unsupportedMethodMessage,r.appendChild(i),e.disableButton(!0))}}}}}}class qh{constructor(e,t=window){this.scriptLoader=e,this.mollieHostWindow=t}load(e,t,n){return i=this,r=void 0,a=function*(){if(yield this.scriptLoader.loadScript(\"https://js.mollie.com/v1/mollie.js\"),!function(e){return\"Mollie\"in e}(this.mollieHostWindow))throw new gi;return this.mollieHostWindow.Mollie(e,{locale:t,testmode:n})},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}d((a=a.apply(i,r||[])).next())});var i,r,o,a}}const Vh=Si(e=>new Uh(new qh(a()),e),[{gateway:\"mollie\"},{gateway:\"mollie\",id:\"applepay\"}]);var Gh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};const Hh=\"moneris-payment-iframe\";class Wh{constructor(e){this.paymentIntegrationService=e}initialize(e){return Gh(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),{moneris:n,methodId:i}=e;if(!i)throw new _i('Unable to initialize payment because \"methodId\" argument is not provided.');if(!n)throw new _i('Unable to initialize payment because \"options.moneris\" argument is not provided.');this.initializeOptions=n;const{config:r,initializationData:o}=t.getPaymentMethodOrThrow(i);if(!(null==o?void 0:o.profileId))throw new ii(ti.MissingPaymentMethod);return n.form&&this.shouldShowTSVHostedForm(i)&&(this.hostedForm=yield this.mountCardVerificationfields(n.form)),this.iframe||(this.iframe=this.createIframe(n.containerId,o,!!r.testMode)),Promise.resolve()})}execute(e,t){return Gh(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);const{isStoreCreditApplied:r}=this.paymentIntegrationService.getState().getCheckoutOrThrow();if(r&&(yield this.paymentIntegrationService.applyStoreCredit(r)),yield this.paymentIntegrationService.submitOrder(i,t),!n.paymentData||!Fd(n.paymentData))return this.executeWithCC(n);yield this.executeWithVaulted(n)})}finalize(){return Promise.reject(new Pd)}deinitialize(){return this.hostedForm&&this.hostedForm.detach(),this.windowEventListener&&(window.removeEventListener(\"message\",this.windowEventListener),this.windowEventListener=void 0),this.iframe&&this.iframe.parentNode&&(this.iframe.parentNode.removeChild(this.iframe),this.iframe=void 0),Promise.resolve()}executeWithCC(e){return Gh(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId).config.testMode,n=e.paymentData||{},i=qd(n)?n:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1},{shouldSaveInstrument:r,shouldSetAsDefaultInstrument:o}=i,a=yield new Promise((e,n)=>{if(!this.iframe)throw new ai(ni.PaymentNotInitialized);const i=this.iframe.contentWindow;if(null===i)throw new ai(ni.PaymentNotInitialized);i.postMessage(\"tokenize\",this.monerisURL(!!t)),this.windowEventListener=i=>{if(\"string\"==typeof i.data&&i.origin===`https://${t?\"esqa\":\"www3\"}.moneris.com`)try{e(this.handleMonerisResponse(i))}catch(e){n(e)}},window.addEventListener(\"message\",this.windowEventListener)});void 0!==a&&(yield this.paymentIntegrationService.submitPayment({methodId:e.methodId,paymentData:{nonce:a,shouldSaveInstrument:r,shouldSetAsDefaultInstrument:o}}))})}executeWithVaulted(e){return Gh(this,void 0,void 0,function*(){if(this.hostedForm){const t=this.hostedForm;return yield t.validate(),yield t.submit(e),this.paymentIntegrationService.loadCurrentOrder()}return this.paymentIntegrationService.submitPayment(e)})}shouldShowTSVHostedForm(e){return this.isHostedPaymentFormEnabled(e)&&this.isHostedFieldAvailable()}isHostedPaymentFormEnabled(e){const t=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e);return Boolean(t.config.isHostedFormEnabled)}isHostedFieldAvailable(){var e;const t=this.getInitializeOptions(),n=ue(null===(e=t.form)||void 0===e?void 0:e.fields,$);return!$(n)}getInitializeOptions(){if(!this.initializeOptions)throw new ai(ni.PaymentNotInitialized);return this.initializeOptions}mountCardVerificationfields(e){var t;return Gh(this,void 0,void 0,function*(){const n=null===(t=this.paymentIntegrationService.getState().getStoreConfig())||void 0===t?void 0:t.paymentSettings.bigpayBaseUrl;if(!n)throw new ii(ti.MissingCheckoutConfig);const i=this.paymentIntegrationService.createHostedForm(n,e);return yield i.attach(),i})}createIframe(e,t,n,i){const r=document.getElementById(e);if(!r)throw new _i(\"Unable to create iframe without valid container ID.\");const o=document.createElement(\"iframe\"),a={id:t.profileId,pmmsg:!0,display_labels:1,enable_exp:1,enable_cvd:1,css_body:(null==i?void 0:i.cssBody)||\"font-family: Arial, Helvetica,sans-serif;background: transparent;\",css_textbox:(null==i?void 0:i.cssTextbox)||\"border-radius:4px;border: 2px solid rgb(00,00,00);width: 100%;font-weight: 600;padding: 8px 8px;outline: 0;\",css_textbox_pan:(null==i?void 0:i.cssTextboxCardNumber)||\"width: 240px;\",css_textbox_exp:(null==i?void 0:i.cssTextboxExpiryDate)||\"margin-bottom: 0;width: calc(30% - 12px);\",css_textbox_cvd:(null==i?void 0:i.cssTextboxCVV)||\"margin-bottom: 0;width: calc(30% - 12px);\",css_input_label:(null==i?void 0:i.cssInputLabel)||\"font-size: 10px;position: relative;top: 8px;left: 6px;background: rgb(255,255,255);padding: 3px 2px;color: rgb(66,66,66);font-weight: 600;z-index: 2;\",pan_label:t.creditCardLabel||\"Credit Card Number\",exp_label:t.expiryDateLabel||\"Expiration\",cvd_label:t.cvdLabel||\"CVD\"},s=oe(a,(e,t)=>`${t}=${e}`).join(\"&\");return o.width=\"100%\",o.height=\"100%\",o.name=Hh,o.id=Hh,o.style.border=\"none\",o.src=`${this.monerisURL(n)}?${s}`,o.allow=\"payment\",r.appendChild(o),o}handleMonerisResponse(e){const t=JSON.parse(e.data);if(\"001\"!==t.responseCode[0])throw new Error(t.errorMessage);return t.dataKey}monerisURL(e){return`https://${e?\"esqa\":\"www3\"}.moneris.com/HPPtoken/index.php`}}const $h=Si(e=>new Wh(e),[{id:\"moneris\"}]);class Yh{constructor(e){this._paymentIntegrationService=e}execute(e,t){return n=this,i=void 0,o=function*(){return yield this._paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:e.payment?{methodId:e.payment.methodId}:void 0}),t),Promise.resolve()},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new Pd)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const Kh=Si(e=>new Yh(e),[{type:\"PAYMENT_TYPE_OFFLINE\"}]);var Jh=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Zh{constructor(e){this._paymentIntegrationService=e}execute(e,t){return Jh(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=this._shouldSubmitFullPayload(n)?e:i,o=n&&n.paymentData,a=o&&Fd(o)&&o.instrumentId||void 0,s=o&&qd(o)&&o.shouldSaveInstrument||void 0,d=o&&qd(o)&&o.shouldSetAsDefaultInstrument||void 0;if(!n)throw new uo([\"payment\"]);const{methodId:c,gatewayId:l}=n;yield this._paymentIntegrationService.submitOrder(r,t),yield this._paymentIntegrationService.initializeOffsitePayment({methodId:c,gatewayId:l,instrumentId:a,shouldSaveInstrument:s,shouldSetAsDefaultInstrument:d})})}finalize(e){return Jh(this,void 0,void 0,function*(){const t=this._paymentIntegrationService.getState(),n=t.getOrder(),i=t.getPaymentStatus();if(!n||i!==ll.ACKNOWLEDGE&&i!==ll.FINALIZE)return Promise.reject(new Pd);yield this._paymentIntegrationService.finalizeOrder(e)})}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_shouldSubmitFullPayload(e){return!!e&&(\"adyen\"===e.gatewayId||\"barclaycard\"===e.gatewayId)}}const Qh=Si(e=>new Zh(e),[{type:\"PAYMENT_TYPE_HOSTED\"}]),Xh=function({styles:e}){const t={};return e.color&&(t.color=e.color),e.layout&&(t.layout=e.layout),(e[\"logo-type\"]||e[\"logo-position\"])&&(t.logo={},e[\"logo-type\"]&&(t.logo.type=e[\"logo-type\"]),e[\"logo-position\"]&&(t.logo.position=e[\"logo-position\"])),e.ratio&&(t.ratio=e.ratio),(e[\"text-color\"]||e[\"text-size\"])&&(t.text={},e[\"text-color\"]&&(t.text.color=e[\"text-color\"]),e[\"text-size\"]&&(t.text.size=+e[\"text-size\"])),t};var ep=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class tp{constructor(e,t,n,i){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.payPalSdkScriptLoader=n,this.loadingIndicator=i}initialize(e){var t;return ep(this,void 0,void 0,function*(){const{methodId:n,paypalcommerce:i}=e||{};if(this.paypalcommerce=i,!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new _i('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(n),{container:a,bannerContainerId:s}=i,{orderId:d,paypalBNPLConfiguration:c=[],isPayPalCreditAvailable:l}=o.initializationData||{};if(void 0!==s){if(!document.getElementById(s))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=null==c?void 0:c.find(({id:e})=>\"checkout\"===e);if(l||!(null==e?void 0:e.status))return;const t=yield this.payPalSdkScriptLoader.getPayPalMessages(o,r.getCartOrThrow().currency.code,r.getLocale());return t&&\"function\"==typeof(null==t?void 0:t.Messages)?this.renderMessages(t,s,e):void console.error(\"[BC PayPalCommerce PayLater]: banner could not be rendered, due to issues with loading PayPal SDK\")}d?this.orderId=null===(t=o.initializationData)||void 0===t?void 0:t.orderId:(this.loadingIndicatorContainer=null==a?void 0:a.split(\"#\")[1],yield this.paypalIntegrationService.loadPayPalSdk(n),i.onInit&&\"function\"==typeof i.onInit&&i.onInit(()=>this.renderButton(n,i)),(void 0===i.shouldRenderPayPalButtonOnInitialization||i.shouldRenderPayPalButtonOnInitialization)&&this.renderButton(n,i))})}execute(e,t){var n,i;return ep(this,void 0,void 0,function*(){const{payment:r}=e,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{onError:a}=this.paypalcommerce||{};if(!r)throw new uo([\"payment\"]);const{methodId:s,paymentData:d}=r;if(this.isPayPalVaultedInstrumentPaymentData(d)&&!this.orderId&&(this.orderId=yield this.createOrder()),!this.orderId)throw new to;const c=this.isPayPalVaultedInstrumentPaymentData(d)?this.prepareVaultedInstrumentPaymentPayload(s,this.orderId,d):this.preparePaymentPayload(s,this.orderId,d);try{yield this.paymentIntegrationService.submitOrder(o,t),yield this.paymentIntegrationService.submitPayment(c)}catch(e){if(function(e){var t;return ya(e)&&\"offsite_redirect\"===(null===(t=e.body.additional_action_required)||void 0===t?void 0:t.type)}(e)){const t=null===(i=null===(n=e.body.additional_action_required)||void 0===n?void 0:n.data)||void 0===i?void 0:i.redirect_url;return new Promise(()=>window.location.replace(t))}return this.isProviderError(e)&&(yield this.paypalIntegrationService.loadPayPalSdk(r.methodId),yield new Promise((e,t)=>{var n;this.paypalcommerce&&(null===(n=this.paypalButton)||void 0===n||n.close(),this.renderButton(r.methodId,this.paypalcommerce),this.handleError(new Error(\"INSTRUMENT_DECLINED\"),a)),t()})),this.handleError(e,a),Promise.reject()}})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}prepareVaultedInstrumentPaymentPayload(e,t,n){const{instrumentId:i,shouldSetAsDefaultInstrument:r}=n,o=!this.isTrustedVaultingFlow(n);return o?{methodId:e,paymentData:{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t}}}}:{methodId:e,paymentData:{instrumentId:i,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t},bigpay_token:{token:i}}}}}preparePaymentPayload(e,t,n){const{shouldSaveInstrument:i=!1,shouldSetAsDefaultInstrument:r=!1}=qd(n)?n:{};return{methodId:e,paymentData:{shouldSaveInstrument:i,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t}}}}}renderButton(e,t){const n=this.paypalIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:d,onValidate:c,submitForm:l}=t;if(!a)throw new _i('Unable to initialize payment because \"container\" argument is not provided.');const u=this.getSmartButtonContainerId(a);if(!document.getElementById(u))throw new _i(`Unable to initialize payment because element with id ${u} does not exist.`);const h={fundingSource:n.FUNDING.PAYPAL,style:this.paypalIntegrationService.getValidButtonStyle(o),createOrder:()=>this.createOrder(),onClick:(e,t)=>this.handleClick(t,c),onApprove:e=>this.handleApprove(e,l),onError:e=>this.handleError(e,s),onCancel:()=>this.toggleLoadingIndicator(!1)};this.paypalButton=n.Buttons(h),this.paypalButton.isEligible()&&(d&&\"function\"==typeof d&&d(),this.paypalButton.render(a))}handleClick(e,t){return ep(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;return null==t?void 0:t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,null==t||t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createOrder(){return ep(this,void 0,void 0,function*(){const e=this.getFieldsValues();return this.paypalIntegrationService.createOrder(\"paypalcommercecheckout\",{shouldSaveInstrument:(null==e?void 0:e.shouldSaveInstrument)||!1})})}getFieldsValues(){const{getFieldsValues:e}=this.paypalcommerce||{};return\"function\"==typeof e?e():void 0}isTrustedVaultingFlow(e){if(e&&Fd(e)){const t=this.paymentIntegrationService.getState().getInstruments(),n=null==t?void 0:t.find(t=>pc(t)&&t.bigpayToken===e.instrumentId);return!(pc(n)&&!n.trustedShippingAddress)}return!1}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isPayPalVaultedInstrumentPaymentData(e){return!!e&&Fd(e)&&qd(e)}renderMessages(e,t,n){const i={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:Xh(n)};e.Messages(i).render(`#${t}`)}isProviderError(e){var t,n,i;return!!function(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e}(e)&&\"INSTRUMENT_DECLINED\"===(null===(i=null===(n=((null===(t=null==e?void 0:e.errors)||void 0===t?void 0:t.filter(e=>e.provider_error))||[])[0])||void 0===n?void 0:n.provider_error)||void 0===i?void 0:i.code)}getSmartButtonContainerId(e){var t;return null!==(t=e.split(\"#\")[1])&&void 0!==t?t:e}}const np=Si(e=>new tp(e,ks(e),new bs(a()),new Sd({containerStyles:Za})),[{id:\"paypalcommerce\"}]);var ip=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class rp{constructor(e,t,n,i){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.loadingIndicator=n,this.payPalSdkScriptLoader=i}initialize(e){return ip(this,void 0,void 0,function*(){const{methodId:t,paypalcommerce:n,paypalcommercecredit:i}=e||{},r=i||n;if(!t)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new _i('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(t);const o=this.paymentIntegrationService.getState(),a=o.getPaymentMethodOrThrow(t),{paypalBNPLConfiguration:s=[],orderId:d}=a.initializationData||{},{bannerContainerId:c,container:l}=r;if(void 0!==c){if(!document.getElementById(c))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=s&&s.find(({id:e})=>\"checkout\"===e);if(!(null==e?void 0:e.status))return;const t=yield this.payPalSdkScriptLoader.getPayPalMessages(a,o.getCartOrThrow().currency.code,o.getLocale());return this.renderMessages(t,c,e)}d?this.orderId=d:(yield this.paypalIntegrationService.loadPayPalSdk(t),this.loadingIndicatorContainer=null==l?void 0:l.split(\"#\")[1],this.renderButton(t,r))})}execute(e,t){return ip(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);if(!this.orderId)throw new to;yield this.paymentIntegrationService.submitOrder(i,t),yield this.paypalIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){if(!(null==t?void 0:t.container))throw new _i('Unable to initialize payment because \"container\" argument is not provided.');const n=this.paypalIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:d,onValidate:c,submitForm:l}=t,u=[n.FUNDING.PAYLATER,n.FUNDING.CREDIT];let h=!1;u.forEach(e=>{if(h)return;const t={fundingSource:e,style:this.paypalIntegrationService.getValidButtonStyle(o),createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercecreditcheckout\"),onClick:(e,t)=>this.handleClick(t,c),onApprove:e=>this.handleApprove(e,l),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.paypalButton=n.Buttons(t),this.paypalButton.isEligible()||e!==n.FUNDING.PAYLATER){if(!this.paypalButton.isEligible()&&e===n.FUNDING.CREDIT)throw new wi(`PayPal ${e} is not available for your region. Please use PayPal Checkout instead.`);d&&\"function\"==typeof d&&d(),this.paypalButton.render(a),h=!0}})}handleClick(e,t){return ip(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;if(t&&\"function\"==typeof t)return t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,t&&\"function\"==typeof t&&t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}renderMessages(e,t,n){const i={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:Xh(n)};e.Messages(i).render(`#${t}`)}}const op=Si(e=>new rp(e,ks(e),new Sd({containerStyles:Za}),Ps()),[{id:\"paypalcommercecredit\"}]);var ap=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class sp{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.loadingIndicator=n}initialize(e){var t,n;return ap(this,void 0,void 0,function*(){const{methodId:i,paypalcommerce:r,paypalcommercevenmo:o}=e||{},a=o||r;if(!i)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!a)throw new _i('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(i);const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i);(null===(t=s.initializationData)||void 0===t?void 0:t.orderId)?this.orderId=null===(n=s.initializationData)||void 0===n?void 0:n.orderId:(yield this.paypalIntegrationService.loadPayPalSdk(i),this.loadingIndicatorContainer=a.container.split(\"#\")[1],this.renderButton(i,a))})}execute(e,t){return ap(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);if(!this.orderId)throw new to;yield this.paymentIntegrationService.submitOrder(i,t),yield this.paypalIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){const n=this.paypalIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:d,onValidate:c,submitForm:l}=t,u={fundingSource:n.FUNDING.VENMO,style:this.paypalIntegrationService.getValidButtonStyle(o),createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercevenmocheckout\"),onClick:(e,t)=>this.handleClick(t,c),onApprove:e=>this.handleApprove(e,l),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.paypalButton=n.Buttons(u),!this.paypalButton.isEligible())throw new wi(\"PayPal Venmo is not available for your region. Please use PayPal Checkout instead.\");d&&\"function\"==typeof d&&d(),this.paypalButton.render(a)}handleClick(e,t){return ap(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;return t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,t(),this.toggleLoadingIndicator(!1)}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const dp=Si(e=>new sp(e,ks(e),new Sd({styles:{backgroundColor:\"black\"}})),[{id:\"paypalcommercevenmo\"}]),cp={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"};var lp=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class up{constructor(e,t,n,i,r=3e3,o=3e5){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t,this.paypalSdkScriptLoader=n,this.loadingIndicator=i,this.pollingInterval=r,this.maxPollingIntervalTime=o,this.pollingTimer=0,this.stopPolling=ce,this.isOrderApprovedProcessing=!1}initialize(e){return lp(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,paypalcommerce:i,paypalcommercealternativemethods:r}=e,o=r||i;if(this.paypalcommercealternativemethods=r,!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!o)throw new _i('Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument is not provided.');const a=this.paymentIntegrationService.getState(),s=a.getPaymentMethodOrThrow(n,t),{orderId:d,shouldRenderFields:c}=s.initializationData||{},l=a.getStoreConfigOrThrow().checkoutSettings.features;this.isOrderApprovedProcessing=Pi(l,\"PAYPAL-5431.order_approved_processing\",!1),d?this.orderId=d:(this.paypalApms=yield this.paypalSdkScriptLoader.getPayPalApmsSdk(s,a.getCartOrThrow().currency.code,a.getLocale()),this.loadingIndicatorContainer=o.container.split(\"#\")[1],this.renderButton(n,t,o),c&&this.renderFields(n,o))})}execute(e,t){return lp(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);const{methodId:r,gatewayId:o}=n;if(!this.orderId)throw new to;this.isOrderApprovedProcessing||\"ideal\"!==r||(yield new Promise((e,t)=>{this.initializePollingMechanism(r,e,t,o)})),this.isNonInstantPaymentMethod(r)&&(r!==Us.IDEAL||this.isOrderApprovedProcessing)||(yield this.paymentIntegrationService.submitOrder(i,t)),yield this.paypalCommerceIntegrationService.submitPayment(r,this.orderId,o)})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e;return this.orderId=void 0,this.isOrderApprovedProcessing||this.resetPollingMechanism(),null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}initializePollingMechanism(e,t,n,i){return lp(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.paypalCommerceIntegrationService.getOrderStatus(null!=i?i:\"paypalcommerce\"),o=r===qs.Approved,a=r===qs.PollingError;if(o)return this.deinitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,i);yield this.reinitializeStrategy({methodId:e,gatewayId:i,paypalcommercealternativemethods:this.paypalcommercealternativemethods}),this.handleError(new bc)}catch(e){n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}reinitializeStrategy(e){return lp(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}handleError(e){const{onError:t}=this.paypalcommercealternativemethods||{};this.isOrderApprovedProcessing||this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderButton(e,t,n){const i=this.getPaypalAmpsSdkOrThrow(),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t),{buttonStyle:o}=r.initializationData||{},{container:a,onError:s,onRenderButton:d,submitForm:c}=n,l={fundingSource:e,style:this.paypalCommerceIntegrationService.getValidButtonStyle(o),onInit:(e,t)=>n.onInitButton(t),createOrder:()=>this.onCreateOrder(e,t,n),onApprove:e=>this.handleApprove(e,c),onCancel:()=>{this.toggleLoadingIndicator(!1),this.deinitializePollingMechanism()},onError:e=>{this.deinitializePollingMechanism(),this.handleFailure(e,s)},onClick:(e,t)=>lp(this,void 0,void 0,function*(){return n.onValidate(t.resolve,t.reject)})};this.paypalButton=i.Buttons(l),this.paypalButton.isEligible()&&(d&&\"function\"==typeof d&&d(),this.paypalButton.render(a))}onCreateOrder(e,t,n){var i;return lp(this,void 0,void 0,function*(){const{onValidate:r}=n;yield r(()=>(this.toggleLoadingIndicator(!0),()=>Promise.resolve()),ce);const o=yield this.paypalCommerceIntegrationService.createOrder(\"paypalcommercealternativemethodscheckout\");if(this.isNonInstantPaymentMethod(e)&&(e===Us.IDEAL&&this.isOrderApprovedProcessing||e===Us.OXXO)){const n={useStoreCredit:!1},r={params:{methodId:e,gatewayId:t}};if(yield this.paymentIntegrationService.submitOrder(n,r),e===Us.IDEAL){const t=this.paymentIntegrationService.getState(),n=null===(i=t.getOrder())||void 0===i?void 0:i.orderId;yield this.paypalCommerceIntegrationService.updateOrder(\"paypalcommercealternativemethods\",e,n)}yield this.paypalCommerceIntegrationService.submitPayment(e,o,t)}return o})}handleApprove({orderID:e},t){this.orderId=e,t()}handleFailure(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderFields(e,t){const n=this.getPaypalAmpsSdkOrThrow(),i=this.paymentIntegrationService.getState(),{firstName:r,lastName:o,email:a}=i.getBillingAddressOrThrow(),{apmFieldsContainer:s,apmFieldsStyles:d}=t;if(!s)throw new _i('Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument should contain \"apmFieldsContainer\".');const c=document.querySelector(s);c&&(c.innerHTML=\"\");const l={fundingSource:e,style:d||{},fields:{name:{value:`${r} ${o}`},email:{value:a}}};n.PaymentFields(l).render(s)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isNonInstantPaymentMethod(e){return e.toUpperCase()in Us}getPaypalAmpsSdkOrThrow(){if(!this.paypalApms)throw new gi;return this.paypalApms}}const hp=Si(e=>new up(e,ks(e),Ps(),new Sd({containerStyles:cp})),[{gateway:\"paypalcommercealternativemethods\"}]);var pp=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class mp{constructor(e,t,n,i){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalSdkScriptLoader=n,this.paypalFastlaneUtils=i}initialize(e){return pp(this,void 0,void 0,function*(){const{methodId:t,paypalcommercecreditcards:n,paypalcommerce:i}=e,r=n||i,{form:o,onCreditCardFieldsRenderingError:a,onLoadComplete:s}=r||{};if(!t)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!o)throw new _i('Unable to proceed because \"options.paypalcommercecreditcards.form\" argument is not provided.');this.hostedFormOptions=o,this.isCreditCardForm=kc(o.fields),this.isCreditCardVaultedForm=Dc(o.fields)&&!this.hasUndefinedValues(),yield this.paymentIntegrationService.loadPaymentMethod(t),yield this.paypalIntegrationService.loadPayPalSdk(t,void 0,!0,!0),(this.isCreditCardForm||this.isCreditCardVaultedForm)&&(yield this.initializeFields(o,a)),null==s||s(),this.shouldInitializePayPalFastlane(t)&&(yield this.initializePayPalFastlaneOrThrow(t))})}execute(e,t){return pp(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{methodId:r,paymentData:o}=n||{};if(!n||!r)throw new uo([\"payment\"]);if(this.executionPaymentData=o,this.isCreditCardForm||this.isCreditCardVaultedForm)yield this.validateHostedFormOrThrow(),yield this.submitHostedForm();else{const{orderId:e}=yield this.paypalIntegrationService.createOrderCardFields(\"paypalcommercecreditcardscheckout\",this.getInstrumentParams());this.returnedOrderId=e}const a=this.preparePaymentPayload(r,o,this.returnedOrderId,this.returnedVaultedToken);yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment(a)})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e,t,n,i;return pp(this,void 0,void 0,function*(){return yield null===(e=this.cvvField)||void 0===e?void 0:e.close(),yield null===(t=this.expiryField)||void 0===t?void 0:t.close(),yield null===(n=this.numberField)||void 0===n?void 0:n.close(),yield null===(i=this.nameField)||void 0===i?void 0:i.close(),Promise.resolve()})}preparePaymentPayload(e,t,n,i){const{shouldSaveInstrument:r=!1,shouldSetAsDefaultInstrument:o=!1}=qd(t)?t:{},a=t&&Fd(t)?t.instrumentId:void 0,s=ue({verification_nonce:i,token:a},J);return{methodId:e,paymentData:{shouldSaveInstrument:r,shouldSetAsDefaultInstrument:o,instrumentId:a,formattedPayload:Object.assign(Object.assign({},i||a?{bigpay_token:s}:{}),n?{card_with_order:{order_id:n}}:{})}}}initializeFields(e,t){return pp(this,void 0,void 0,function*(){const{fields:n,styles:i}=e,r=this.paypalIntegrationService.getPayPalSdkOrThrow(),o=this.getExecuteCallback(n),a=Object.assign({style:this.getInputStyles(i),onApprove:({orderID:e,vaultSetupToken:t,liabilityShift:n})=>{if(n===Rs.No||n===Rs.Unknown)throw new Error;return this.handleApprove({orderID:e,vaultSetupToken:t})},onError:()=>{throw new eo},inputEvents:{onChange:t=>this.onChangeHandler(e,t),onFocus:t=>this.onFocusHandler(e,t),onBlur:t=>this.onBlurHandler(e,t),onInputSubmitRequest:t=>this.onInputSubmitRequest(e,t)}},o);if(this.cardFields=yield r.CardFields(a),!this.cardFields.isEligible())throw new ai(ni.PaymentNotInitialized);try{this.stylizeInputContainers(n),kc(n)&&(yield this.renderFields(n)),Dc(n)&&(yield this.renderVaultedFields(n))}catch(e){\"function\"==typeof t&&t(e)}})}getExecuteCallback(e){return Dc(e)?this.createVaultSetupTokenCallback():this.createOrderCallback()}createVaultSetupTokenCallback(){return{createVaultSetupToken:()=>pp(this,void 0,void 0,function*(){const{setupToken:e}=(yield this.paypalIntegrationService.createOrderCardFields(\"paypalcommercecreditcardscheckout\",Object.assign(Object.assign({},this.getInstrumentParams()),{setupToken:!0})))||{};return e})}}createOrderCallback(){return{createOrder:()=>pp(this,void 0,void 0,function*(){const{orderId:e}=(yield this.paypalIntegrationService.createOrderCardFields(\"paypalcommercecreditcardscheckout\",this.getInstrumentParams()))||{};return e})}}handleApprove({orderID:e,vaultSetupToken:t}){e&&(this.returnedOrderId=e),t&&(this.returnedVaultedToken=t)}renderFields(e){var t,n,i,r;return pp(this,void 0,void 0,function*(){const o=this.getCardFieldsOrThrow();(null===(t=e.cardCode)||void 0===t?void 0:t.containerId)&&(this.cvvField=o.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCode.containerId}`)),(null===(n=e.cardExpiry)||void 0===n?void 0:n.containerId)&&(this.expiryField=o.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiry.containerId}`)),(null===(i=e.cardName)||void 0===i?void 0:i.containerId)&&(this.nameField=o.NameField({placeholder:\"\"}),yield this.nameField.render(`#${e.cardName.containerId}`)),(null===(r=e.cardNumber)||void 0===r?void 0:r.containerId)&&(this.numberField=o.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumber.containerId}`))})}renderVaultedFields(e){var t,n,i;return pp(this,void 0,void 0,function*(){const r=this.getCardFieldsOrThrow();(null===(t=e.cardCodeVerification)||void 0===t?void 0:t.containerId)&&(this.cvvField=r.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCodeVerification.containerId}`)),(null===(n=e.cardExpiryVerification)||void 0===n?void 0:n.containerId)&&(this.expiryField=r.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiryVerification.containerId}`)),(null===(i=e.cardNumberVerification)||void 0===i?void 0:i.containerId)&&(this.numberField=r.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumberVerification.containerId}`))})}getInstrumentParams(){if(!this.executionPaymentData)return{};if(qd(this.executionPaymentData)){const{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}=this.executionPaymentData;return{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}}if(Fd(this.executionPaymentData)){const{instrumentId:e}=this.executionPaymentData;return{instrumentId:e}}return{}}getFieldTypeByEmittedField({emittedBy:e}){return{fieldType:this.mapFieldType(e)}}submitHostedForm(){return pp(this,void 0,void 0,function*(){const e=this.getCardFieldsOrThrow(),t=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),n={billingAddress:{company:t.company,addressLine1:t.address1,addressLine2:t.address2,adminArea1:t.stateOrProvinceCode,adminArea2:t.city,postalCode:t.postalCode,countryCode:t.countryCode}};try{this.isCreditCardVaultedForm?yield e.submit():yield e.submit(n)}catch(e){throw new eo(\"Failed authentication. Please try to authorize again.\")}})}validateHostedFormOrThrow(){var e,t;return pp(this,void 0,void 0,function*(){const n=this.getCardFieldsOrThrow(),i=yield n.getState().then(e=>e),r=this.getValidityData(i);if(!r.isValid)throw null===(t=null===(e=this.hostedFormOptions)||void 0===e?void 0:e.onValidate)||void 0===t||t.call(e,r),new ho(this.mapValidationErrors(r.errors))})}getValidityData({fields:e}){const t=Object.assign({},e);delete t.cardNameField;const n=Object.keys(t);return{isValid:n.every(e=>{var n;return null===(n=t[e])||void 0===n?void 0:n.isValid}),errors:n.reduce((e,n)=>{var i;const r=this.mapFieldType(n);return Object.assign(Object.assign({},e),{[r]:(null===(i=t[n])||void 0===i?void 0:i.isValid)?void 0:[this.getInvalidErrorByFieldType(r)]})},{})}}getInvalidErrorByFieldType(e){switch(e){case Tc.CardCode:case Tc.CardCodeVerification:return{fieldType:e,message:\"Invalid card code\",type:\"invalid_card_code\"};case Tc.CardNumber:case Tc.CardNumberVerification:return{fieldType:e,message:\"Invalid card number\",type:\"invalid_card_number\"};case Tc.CardExpiry:case Tc.CardExpiryVerification:return{fieldType:e,message:\"Invalid card expiry\",type:\"invalid_card_expiry\"};default:return{fieldType:e,message:\"Invalid field\",type:\"invalid\"}}}mapValidationErrors(e={}){const t={};return Object.keys(e).forEach(n=>{var i,r;t[n]=[{message:(null===(r=null===(i=e[n])||void 0===i?void 0:i[0])||void 0===r?void 0:r.message)||\"\",type:n}]}),t}mapFieldType(e){switch(e){case\"name\":return Tc.CardName;case\"cardNumberField\":case\"number\":return this.isCreditCardForm?Tc.CardNumber:Tc.CardNumberVerification;case\"cardExpiryField\":case\"expiry\":return this.isCreditCardForm?Tc.CardExpiry:Tc.CardExpiryVerification;case\"cardCvvField\":case\"cvv\":return this.isCreditCardForm?Tc.CardCode:Tc.CardCodeVerification;default:throw new Error(\"Unexpected field type\")}}getCardFieldsOrThrow(){if(!this.cardFields)throw new ai(ni.PaymentNotInitialized);return this.cardFields}getInputStyles(e){var t,n,i;const r={\"font-size\":(null===(t=null==e?void 0:e.default)||void 0===t?void 0:t.fontSize)||\"1rem\",\"font-family\":(null===(n=null==e?void 0:e.default)||void 0===n?void 0:n.fontFamily)||\"Montserrat, Arial, Helvetica, sans-serif\",\"font-weight\":(null===(i=null==e?void 0:e.default)||void 0===i?void 0:i.fontWeight)||\"400\",outline:\"none\",padding:\"9px 13px\"},o=Object.assign(Object.assign({},r),{color:\"#333333\"});return{input:o,\".invalid\":Object.assign(Object.assign({},r),{color:\"red\"}),\".valid\":o,\":focus\":o}}stylizeInputContainers(e){Object.values(e||{}).forEach(e=>{const t=document.getElementById(`${(null==e?void 0:e.containerId)||\"\"}`);t&&(t.style.padding=\"0px\",t.style.boxShadow=\"none\",t.style.border=\"none\",t.style.background=\"transparent\",t.style.marginBottom=\"10px\",t.style.marginLeft=\"-5px\")})}hasUndefinedValues(){return!this.hostedFormOptions||Object.values(this.hostedFormOptions.fields).some(e=>void 0===e)}onChangeHandler(e,t){var n;null===(n=null==e?void 0:e.onValidate)||void 0===n||n.call(e,this.getValidityData(t))}onFocusHandler(e,t){var n;null===(n=null==e?void 0:e.onFocus)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onBlurHandler(e,t){var n;null===(n=null==e?void 0:e.onBlur)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onInputSubmitRequest(e,t){var n;null===(n=null==e?void 0:e.onEnter)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}shouldInitializePayPalFastlane(e){var t,n;const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(e),o=i.getPaymentProviderCustomer(),a=(s=o)&&(\"authenticationState\"in s||\"addresses\"in s||\"instruments\"in s)?o:{};var s;return(null===(t=null==r?void 0:r.initializationData)||void 0===t?void 0:t.isAcceleratedCheckoutEnabled)&&(null===(n=null==r?void 0:r.initializationData)||void 0===n?void 0:n.isPayPalCommerceAnalyticsV2Enabled)&&!(null==a?void 0:a.authenticationState)}initializePayPalFastlaneOrThrow(e){return pp(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getPaymentMethodOrThrow(e),{initializationData:r}=i;if(!(null==r?void 0:r.connectClientToken))return;const o=yield this.paypalSdkScriptLoader.getPayPalFastlaneSdk(i,n.currency.code,n.id,t.getLocale());yield this.paypalFastlaneUtils.initializePayPalFastlane(o,!!(null==r?void 0:r.isDeveloperModeApplicable))}catch(e){}})}}const yp=Si(e=>new mp(e,ks(e),Ps(),rd()),[{id:\"paypalcommercecreditcards\"}]);var gp=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class vp{constructor(e,t,n,i=3e3,r=3e5){this.paymentIntegrationService=e,this.paypalCommerceService=t,this.loadingIndicator=n,this.pollingInterval=i,this.maxPollingIntervalTime=r,this.pollingTimer=0,this.stopPolling=ce}initialize(e){return gp(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,paypalcommerceratepay:i}=e;if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!i)throw new _i('Unable to initialize payment because \"options.paypalcommerceratepay\" argument is not provided.');const{legalTextContainer:r,container:o,loadingContainerId:a}=i;if(!o)throw new _i('Unable to initialize payment because \"options.container\" argument is not provided.');if(!r)throw new _i('Unable to initialize payment because \"options.legalTextContainer\" argument is not provided.');if(!a)throw new _i('Unable to initialize payment because \"options.loadingContainerId\" argument is not provided.');this.loadingIndicatorContainer=a;const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,t),{merchantId:d}=s.initializationData||{};if(!d)throw new _i(\"Unable to initialize payment because merchantId argument is not provided.\");this.paypalcommerceratepay=i,yield this.paypalCommerceService.loadPayPalSdk(n),this.createFraudNetScript(d,n,t),this.loadFraudnetConfig(),this.renderLegalText(r,o)})}execute(e,t){return gp(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{getFieldsValues:r}=this.paypalcommerceratepay||{};if(!n)throw new uo([\"payment\"]);if(!r||\"function\"!=typeof r)throw new _i('Unable to initialize payment because \"options.getFieldsValues\" argument is not provided.');this.toggleLoadingIndicator(!0);try{const e=yield this.paypalCommerceService.createOrder(\"paypalcommercealternativemethodscheckout\",{metadataId:this.guid}),{ratepayBirthDate:o,ratepayPhoneNumber:a,ratepayPhoneCountryCode:s}=r(),d={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:n.methodId,rate_pay:{birth_date:this.normalizeDate(o),phone:{national_number:a,country_code:s.split(\"+\")[1]}},paypal_account:{order_id:e}}};return yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment({methodId:n.methodId,paymentData:d}),yield new Promise((e,t)=>{this.initializePollingMechanism(n.methodId,e,t,n.gatewayId)})}catch(e){return this.handleError(e),new Promise((e,t)=>t())}})}finalize(){return Promise.reject(new Pd)}deinitialize(){const{legalTextContainer:e}=this.paypalcommerceratepay||{},t=document.querySelectorAll('[data-id=\"fraudnetScript\"]')[0],n=document.querySelectorAll('[data-id=\"fraudnetConfig\"]')[0];if(this.deinitializePollingMechanism(),t.remove(),n.remove(),e){const t=document.getElementById(e);null==t||t.remove()}return Promise.resolve()}normalizeDate(e){const t=this.formatDate(e.getDate()),n=this.formatDate(e.getMonth()+1);return`${e.getFullYear()}-${n}-${t}`}formatDate(e){return`${e<10?0:\"\"}${e}`}renderLegalText(e,t){const n=e,i=t.split(\"#\")[1],r=document.getElementById(i),o=null==r?void 0:r.parentNode,a=document.createElement(\"div\");a.style.marginBottom=\"20px\",a.setAttribute(\"id\",n),null==o||o.prepend(a);const s=this.paypalCommerceService.getPayPalSdkOrThrow(),d=s.Legal({fundingSource:s.Legal.FUNDING.PAY_UPON_INVOICE});if(!document.getElementById(n))throw new _i('Unable to initialize payment because \"legalTextContainerElement\" argument is not found.');d.render(`#${n}`)}handleError(e){const{onError:t}=this.paypalcommerceratepay||{};this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createFraudNetScript(e,t,n){const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n),{testMode:r}=i.config,o=document.createElement(\"script\");o.setAttribute(\"type\",\"application/json\"),o.setAttribute(\"fncls\",\"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\"),o.setAttribute(\"data-id\",\"fraudnetScript\"),this.guid=this.generateGUID();const a={f:this.guid,s:`${e}_checkout-page`,sandbox:r};o.innerHTML=JSON.stringify(a),document.body.appendChild(o)}generateGUID(){let e=\"\";for(let t=0;t<32;t+=1)e+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"[Math.floor(62*Math.random())];return e}loadFraudnetConfig(){const e=document.createElement(\"script\");e.setAttribute(\"data-id\",\"fraudnetConfig\"),e.src=\"https://c.paypal.com/da/r/fb.js\",document.body.appendChild(e)}reinitializeStrategy(e){return gp(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}initializePollingMechanism(e,t,n,i){return gp(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.paypalCommerceService.getOrderStatus(\"paypalcommercealternativemethods\",{params:{useMetadata:!0}}),o=r===Is.PollingStop,a=r===Is.PollingError;if(o)return this.deinitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,i);yield this.reinitializeStrategy({methodId:e,gatewayId:i,paypalcommerceratepay:this.paypalcommerceratepay}),this.handleError(new bc)}catch(e){this.handleError(e),n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const fp=Si(e=>new vp(e,ks(e),new Sd({containerStyles:Object.assign(Object.assign({},Za),{position:\"fixed\"})})),[{gateway:\"paypalcommercealternativemethods\",id:\"ratepay\"}]);function Sp(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}var _p=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class wp{constructor(e,t,n,i){this.paymentIntegrationService=e,this.paypalCommerceRequestSender=t,this.paypalSdkScriptLoader=n,this.paypalFastlaneUtils=i}initialize(e){var t,n;return _p(this,void 0,void 0,function*(){const{methodId:i,paypalcommercefastlane:r}=e;if(this.methodId=i,this.paypalcommercefastlane=r,!i)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new _i('Unable to initialize payment because \"options.paypalcommercefastlane\" argument is not provided.');if(!r.onInit||\"function\"!=typeof r.onInit)throw new _i('Unable to initialize payment because \"options.paypalcommercefastlane.onInit\" argument is not provided or it is not a function.');if(!r.onChange||\"function\"!=typeof r.onChange)throw new _i('Unable to initialize payment because \"options.paypalcommercefastlane.onChange\" argument is not provided or it is not a function.');yield this.paymentIntegrationService.loadPaymentMethod(i);const o=this.paymentIntegrationService.getState(),a=o.getCartOrThrow(),s=o.getPaymentMethodOrThrow(i),{isDeveloperModeApplicable:d,isFastlaneStylingEnabled:c}=s.initializationData||{};this.threeDSVerificationMethod=null===(t=s.initializationData)||void 0===t?void 0:t.threeDSVerificationMethod,this.paypalFastlaneSdk=yield this.paypalSdkScriptLoader.getPayPalFastlaneSdk(s,a.currency.code,a.id,o.getLocale());const l=ad(c?null===(n=null==s?void 0:s.initializationData)||void 0===n?void 0:n.fastlaneStyles:{},null==r?void 0:r.styles);yield this.paypalFastlaneUtils.initializePayPalFastlane(this.paypalFastlaneSdk,!!d,l),this.shouldRunAuthenticationFlow()&&(yield this.runPayPalAuthenticationFlowOrThrow(i)),yield this.initializePayPalPaymentComponent(),r.onInit(e=>this.renderPayPalPaymentComponent(e)),r.onChange(()=>this.handlePayPalStoredInstrumentChange(i))})}execute(e,t){return _p(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);const{paymentData:r,methodId:o}=n,a=r&&Fd(r);try{yield this.paymentIntegrationService.submitOrder(i,t);const e=a?yield this.prepareVaultedInstrumentPaymentPayload(o,r):yield this.preparePaymentPayload(o,r);yield this.paymentIntegrationService.submitPayment(e),this.paypalFastlaneUtils.removeStorageSessionId()}catch(e){if(function(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"response\"in e&&\"body\"in e.response&&\"name\"in e.response.body}(e)&&\"INVALID_REQUEST\"===e.response.body.name){const e={translationKey:\"payment.errors.invalid_request_error\"};return this.handleError(e),Promise.reject()}if(e instanceof Error&&\"FastlaneError\"!==e.name)throw e;return Promise.reject()}})}finalize(){return Promise.reject(new Pd)}deinitialize(){return _p(this,void 0,void 0,function*(){return Promise.resolve()})}shouldRunAuthenticationFlow(){const e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getCustomerOrThrow(),i=e.getPaymentProviderCustomer(),r=Sp(i)?i:{},o=this.paypalFastlaneUtils.getStorageSessionId();return!(!n.isGuest||(null==r?void 0:r.authenticationState)===_s.CANCELED||(null==r?void 0:r.authenticationState)||o!==t.id)}runPayPalAuthenticationFlowOrThrow(e){return _p(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getCustomer(),r=t.getBillingAddress(),o=(null==i?void 0:i.email)||(null==r?void 0:r.email)||\"\",{customerContextId:a}=yield this.paypalFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(a),{authenticationState:d,addresses:c,instruments:l}=this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,s);yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:d,addresses:c,instruments:l}),s.authenticationState===_s.CANCELED?this.paypalFastlaneUtils.removeStorageSessionId():this.paypalFastlaneUtils.updateStorageSessionId(n.id)}catch(e){}})}initializePayPalPaymentComponent(){return _p(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),t=e.phone,n=`${e.firstName} ${e.lastName}`.trim(),i=this.paypalFastlaneUtils.getPayPalFastlaneOrThrow(),r={fields:Object.assign({cardholderName:{prefill:n,enabled:!0}},t&&{phoneNumber:{prefill:t}})};this.paypalComponentMethods=yield i.FastlaneCardComponent(r)})}renderPayPalPaymentComponent(e){const t=this.getPayPalComponentMethodsOrThrow();if(!e)throw new _i('Unable to render card component because \"container\" argument is not provided.');t.render(e)}getPayPalComponentMethodsOrThrow(){if(!this.paypalComponentMethods)throw new gi;return this.paypalComponentMethods}prepareVaultedInstrumentPaymentPayload(e,t){return _p(this,void 0,void 0,function*(){const{instrumentId:n}=t,i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e).config.is3dsEnabled?yield this.get3DSNonce(n):n;return yield this.createOrder(i),{methodId:e,paymentData:{formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:i}}}}})}preparePaymentPayload(e,t){return _p(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getBillingAddressOrThrow(),r=n.getPaymentMethodOrThrow(e),o=`${i.firstName} ${i.lastName}`.trim(),{getPaymentToken:a}=this.getPayPalComponentMethodsOrThrow(),{id:s}=yield a({name:{fullName:o},billingAddress:this.paypalFastlaneUtils.mapBcToPayPalAddress(i)}),d=r.config.is3dsEnabled?yield this.get3DSNonce(s):s;yield this.createOrder(d);const{shouldSaveInstrument:c=!1,shouldSetAsDefaultInstrument:l=!1}=qd(t)?t:{};return{methodId:e,paymentData:Object.assign(Object.assign({},t),{shouldSaveInstrument:c,shouldSetAsDefaultInstrument:l,formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:d}}})}})}createOrder(e){return _p(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getCartOrThrow().id;if(this.methodId){const{orderId:n}=yield this.paypalCommerceRequestSender.createOrder(this.methodId,{cartId:t,fastlaneToken:e});this.orderId=n}})}get3DSNonce(e){var t;return _p(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getCartOrThrow(),r=n.getOrderOrThrow(),o=n.getStoreConfigOrThrow().links.checkoutLink,a=null===(t=this.paypalFastlaneSdk)||void 0===t?void 0:t.ThreeDomainSecureClient;if(!a)throw new gi;const s={amount:r.orderAmount.toFixed(2),currency:i.currency.code,nonce:e,threeDSRequested:this.threeDSVerificationMethod===ms.Always,transactionContext:{experience_context:{locale:\"en-US\",return_url:o,cancel_url:o}}},d=yield a.isEligible(s);if(this.threeDSVerificationMethod===ms.Always&&!d)throw new to;if(d){const{liabilityShift:e,authenticationState:t,nonce:n}=yield a.show();if(e===Rs.No||e===Rs.Unknown||t===ys.Errored||t===ys.Cancelled)throw new to;if(t===ys.Succeeded&&[Rs.Yes,Rs.Possible].includes(e))return n;throw new to}return e})}handlePayPalStoredInstrumentChange(e){return _p(this,void 0,void 0,function*(){const t=this.paypalFastlaneUtils.getPayPalFastlaneOrThrow(),{selectionChanged:n,selectedCard:i}=yield t.profile.showCardSelector();if(n){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomer(),n=Sp(t)?t:{},r=this.paypalFastlaneUtils.mapPayPalToBcInstrument(e,i)[0];return yield this.paymentIntegrationService.updatePaymentProviderCustomer(Object.assign(Object.assign({},n),{instruments:[r]})),r}})}handleError(e){var t;(null===(t=this.paypalcommercefastlane)||void 0===t?void 0:t.onError)&&\"function\"==typeof this.paypalcommercefastlane.onError&&this.paypalcommercefastlane.onError(e)}}const Ip=Si(e=>{const{getHost:t}=e.getState();return new wp(e,new Ws(n({host:t()})),Ps(),rd())},[{id:\"paypalcommerceacceleratedcheckout\"}]);var Cp,bp,Pp,Op,Ep,Ap;!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(Cp||(Cp={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(bp||(bp={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\"}(Pp||(Pp={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(Op||(Op={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(Ep||(Ep={})),function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(Ap||(Ap={}));var Tp=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class kp{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t,this.useRedirectFlow=!1,this.window=window}initialize(e){return Tp(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState();this.paymentMethod=t.getPaymentMethodOrThrow(e.methodId),this.useRedirectFlow=!0===(e.paypalexpress&&e.paypalexpress.useRedirectFlow);const n=this.paymentMethod.config.merchantId;if(!this.isInContextEnabled()||!n)throw new ii(ti.MissingPaymentMethod);const i=yield this.scriptLoader.loadPaypalSDK();this.paypalSdk=i,this.paypalSdk.checkout.setup(n,{button:\"paypal-button\",environment:this.paymentMethod.config.testMode?\"sandbox\":\"production\"})})}deinitialize(){return this.isInContextEnabled()&&this.paypalSdk&&(this.paypalSdk.checkout.closeFlow(),this.paypalSdk=void 0),Promise.resolve()}execute(e,t){return Tp(this,void 0,void 0,function*(){let n,i;const r=this.paypalSdk;if(!this.isAcknowledgedOrFinalized()){if(!this.isInContextEnabled()||this.useRedirectFlow)return n=yield this.paymentIntegrationService.submitOrder(e,t),i=n.getPaymentRedirectUrl(),i&&this.window.top&&(this.window.top.location.href=i),new Promise(ce);if(!r)throw new ai(ni.PaymentNotInitialized);r.checkout.initXO();try{n=yield this.paymentIntegrationService.submitOrder(e,t)}catch(e){return r.checkout.closeFlow(),Promise.reject(e)}return i=n.getPaymentRedirectUrl(),i&&r.checkout.startFlow(i),new Promise(ce)}yield this.paymentIntegrationService.submitOrder(e,t)})}finalize(e){return Tp(this,void 0,void 0,function*(){return this.paymentIntegrationService.getState().getOrder()&&this.isAcknowledgedOrFinalized()?(yield this.paymentIntegrationService.finalizeOrder(e),Promise.resolve()):Promise.reject(new Pd)})}isAcknowledgedOrFinalized(){const e=this.paymentIntegrationService.getState();return e.getPaymentStatus()===Ap.ACKNOWLEDGE||e.getPaymentStatus()===Ap.FINALIZE}isInContextEnabled(){return!(!this.paymentMethod||!this.paymentMethod.config.merchantId)}}class Dp{constructor(e){this.scriptLoader=e,this.window=window}loadPaypalSDK(e=\"\"){return t=this,n=void 0,r=function*(){const t=Object.assign({async:!0,attributes:{\"data-merchant-id\":e}},e&&{attributes:{\"data-merchant-id\":e}});if(yield this.scriptLoader.loadScript(\"//www.paypalobjects.com/api/checkout.min.js\",t),!this.window.paypal)throw new gi;return this.window.paypal},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}}const Mp=Si(e=>new kp(e,new Dp(a())),[{id:\"paypalexpress\",type:\"PAYMENT_TYPE_HOSTED\"},{id:\"paypalexpresscredit\",type:\"PAYMENT_TYPE_HOSTED\"}]);var zp=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Np extends iu{constructor(e,t){super(e),this.paymentIntegrationService=e,this.threeDSecureFlow=t}initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return zp(this,void 0,void 0,function*(){yield t.initialize.call(this,e);const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);n.config.is3dsEnabled&&(yield this.threeDSecureFlow.prepare(n))})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return zp(this,void 0,void 0,function*(){const{payment:{methodId:i=\"\"}={}}=e,r=this.paymentIntegrationService.getState();return r.getPaymentStatus()===ll.ACKNOWLEDGE?(yield this.paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:{methodId:i}}),t),Promise.resolve()):r.getPaymentMethodOrThrow(i).config.is3dsEnabled?this.threeDSecureFlow.start(n.execute.bind(this),e,t,this._hostedForm):n.execute.call(this,e,t)})}}const xp=Si(e=>new Np(e,new ku(e,new Bu(new ju(a())))),[{id:\"paypal\"}]);class Rp extends iu{constructor(e,t){super(e),this.paymentIntegrationService=e,this._formPoster=t}execute(e,t){const{payment:n}=e;if(!n)throw new ai(ni.PaymentNotInitialized);const{paymentData:i}=n;if(!i)throw new ii(ti.MissingPayment);if(this._isThreeDSTwoExperimentOn()){const t=Object.assign(Object.assign({},i),{browser_info:cs()});e.payment&&(e.payment.paymentData=t)}return super.execute(e,t).catch(e=>ya(e)&&ve(e.body.errors,{code:\"three_d_secure_required\"})?new Promise(()=>{let t;t=this._isThreeDSTwoExperimentOn()&&!e.body.three_ds_result.merchant_data?{creq:e.body.three_ds_result.payer_auth_request}:{PaReq:e.body.three_ds_result.payer_auth_request,TermUrl:e.body.three_ds_result.callback_url,MD:e.body.three_ds_result.merchant_data},this._formPoster.postForm(e.body.three_ds_result.acs_url,t,void 0,\"_top\")}):Promise.reject(e))}finalize(e){const t=this.paymentIntegrationService.getState();return t.getOrder()&&t.getPaymentStatus()===ll.FINALIZE&&this.paymentIntegrationService.finalizeOrder(e),super.finalize()}_isThreeDSTwoExperimentOn(){return!0===this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features[\"INT-4994.Opayo_3DS2\"]}}const Fp=Si(e=>new Rp(e,Ee()),[{id:\"sagepay\"}]);class Lp{constructor(e,t){this._formPoster=e,this._paymentIntegrationService=t}execute(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new uo([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:r}))}catch(e){if(!ya(e)||\"object\"!=typeof(o=e.body)||null===o||!(\"additional_action_required\"in o)||!this._isAdditionalActionRequired(e.body))return Promise.reject(e);const{body:{additional_action_required:{data:{redirect_url:t}}}}=e;return new Promise(()=>{this.redirectUrl(t)})}var o},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new Pd)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}redirectUrl(e){return this._formPoster.postForm(e,{})}_isAdditionalActionRequired(e){const{additional_action_required:t,status:n}=e;return\"additional_action_required\"===n&&t&&\"offsite_redirect\"===t.type}}class Bp extends Lp{redirectUrl(e){window.location.replace(e)}}const jp=Si(e=>new Bp(Ee(),e),[{id:\"sezzle\"}]);var Up;!function(e){e.CHARGE=\"CHARGE\",e.STORE=\"STORE\"}(Up||(Up={}));var qp=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Vp{constructor(e,t){this._scriptLoader=e,this._paymentIntegrationService=t}initialize({testMode:e,applicationId:t,locationId:n}){return qp(this,void 0,void 0,function*(){const i=yield this._scriptLoader.load(e);this._payments=i.payments(t,n)})}deinitialize(){return qp(this,void 0,void 0,function*(){this._formValidationSubscription&&this._formValidationSubscription.unsubscribe(),this._card&&(yield this._card.destroy()),this._formValidationSubscription=void 0,this._card=void 0,this._payments=void 0})}initializeCard({containerId:e,style:t,onValidationChange:n}){return qp(this,void 0,void 0,function*(){const{postalCode:i}=this._paymentIntegrationService.getState().getBillingAddress()||{};this._card=yield this._getPayments().card(),yield this._card.attach(`#${e}`);try{yield this._card.configure({postalCode:i,style:t})}catch(e){}n&&(this._formValidationSubscription=this._subscribeToFormValidation(this._card,n))})}tokenize(){return qp(this,void 0,void 0,function*(){const e=yield this._getCard().tokenize();if(\"OK\"!==e.status||!e.token){let t=`Tokenization failed with status: ${e.status}`;throw\"errors\"in e&&e.errors&&(t+=` and errors: ${JSON.stringify(e.errors)}`),new Ih(\"payment.errors.card_error\",\"SquareV2TokenizationError\",t)}return e.token})}verifyBuyer(e,t){return qp(this,void 0,void 0,function*(){return t===Up.CHARGE?this._chargeVerifyBuyer(e):this._storeVerifyBuyer(e)})}_getPayments(){return oi(this._payments,()=>new ai(ni.PaymentNotInitialized))}_subscribeToFormValidation(e,t){const n=[\"cardNumber\",\"cvv\"],i=new Set(n),r=[\"focusClassAdded\",\"focusClassRemoved\",\"errorClassAdded\",\"errorClassRemoved\",\"cardBrandChanged\",\"postalCodeChanged\"].map(t=>_(e,t));return w(...r).pipe(T(e=>{const{detail:{field:t,currentState:{isCompletelyValid:r}}}=e;return n.includes(t)&&i[r?\"delete\":\"add\"](t),0===i.size}),E()).subscribe(t)}_getCard(){return oi(this._card,()=>new ai(ni.PaymentNotInitialized))}_mapToSquareBillingContact({firstName:e,lastName:t,address1:n,address2:i,city:r,stateOrProvinceCode:o,postalCode:a,countryCode:s,email:d,phone:c}){return{givenName:e,familyName:t,addressLines:[n,i],city:r,state:o,postalCode:a,countryCode:s,email:d,phone:c}}_chargeVerifyBuyer(e){return qp(this,void 0,void 0,function*(){const{getCheckoutOrThrow:t,getBillingAddressOrThrow:n}=this._paymentIntegrationService.getState(),{outstandingBalance:i,cart:r}=t(),o={amount:i.toString(),billingContact:this._mapToSquareBillingContact(n()),currencyCode:r.currency.code,intent:Up.CHARGE},a=yield this._getPayments().verifyBuyer(e,o);return a?a.token:\"\"})}_storeVerifyBuyer(e){return qp(this,void 0,void 0,function*(){const{getBillingAddressOrThrow:t}=this._paymentIntegrationService.getState(),n={billingContact:this._mapToSquareBillingContact(t()),intent:Up.STORE},i=yield this._getPayments().verifyBuyer(e,n);return i?i.token:\"\"})}}var Gp=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Hp{constructor(e,t){this._paymentIntegrationService=e,this._squareV2PaymentProcessor=t}initialize(e){var t;return Gp(this,void 0,void 0,function*(){if(!(null===(t=null==e?void 0:e.squarev2)||void 0===t?void 0:t.containerId))throw new _i('Unable to proceed because \"containerId\" argument is not provided.');const{methodId:n,squarev2:i}=e,{config:{testMode:r},initializationData:o}=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(n),{applicationId:a,locationId:s}=o||{};if(!a)throw new to;yield this._squareV2PaymentProcessor.initialize({applicationId:a,locationId:s,testMode:r}),yield this._squareV2PaymentProcessor.initializeCard(i)})}execute({payment:e}){return Gp(this,void 0,void 0,function*(){if(!e)throw new uo([\"payment\"]);const{methodId:t,paymentData:n}=e,{shouldSaveInstrument:i,shouldSetAsDefaultInstrument:r}=qd(n)?n:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1};yield this._paymentIntegrationService.submitOrder();const o=n&&Fd(n)?yield this._getVaultedInstrumentPayload(t,n):yield this._getCardPayload(t,i);yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:{formattedPayload:Object.assign(Object.assign({},o),{vault_payment_instrument:i||!1,set_as_default_stored_instrument:r||!1})}}))})}finalize(){return Promise.reject(new Pd)}deinitialize(){return this._squareV2PaymentProcessor.deinitialize()}shouldVerify(){const{features:e}=this._paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings;return e[\"PROJECT-3828.add_3ds_support_on_squarev2\"]}_getCardPayload(e,t){return Gp(this,void 0,void 0,function*(){const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),{initializationData:i}=n(e),r=yield this._squareV2PaymentProcessor.tokenize();if(i&&\"isSquareV2ApiV2Enabled\"in i?!i.isSquareV2ApiV2Enabled:!this.shouldVerify())return{credit_card_token:{token:r}};let o={nonce:r,token:yield this._squareV2PaymentProcessor.verifyBuyer(r,Up.CHARGE)};if(t){const e=yield this._squareV2PaymentProcessor.tokenize();o=Object.assign(Object.assign({},o),{store_card_nonce:e,store_card_token:yield this._squareV2PaymentProcessor.verifyBuyer(e,Up.STORE)})}return{credit_card_token:{token:JSON.stringify(o)}}})}_getVaultedInstrumentPayload(e,t){return Gp(this,void 0,void 0,function*(){const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),{initializationData:i}=n(e),{instrumentId:r}=t,o=(i&&\"isSquareV2ApiV2Enabled\"in i?i.isSquareV2ApiV2Enabled:this.shouldVerify())?yield this._squareV2PaymentProcessor.verifyBuyer(yield this._getSquareCardIdOrThrow(e,r),Up.CHARGE):void 0;return{bigpay_token:Object.assign({token:r},o&&{three_d_secure:{token:o}})}})}_getSquareCardIdOrThrow(e,t){return Gp(this,void 0,void 0,function*(){const n=yield this._paymentIntegrationService.loadPaymentMethod(e,{params:{method:e,bigpayToken:t}}),{initializationData:i}=n.getPaymentMethodOrThrow(e),{cardId:r}=i||{};if(!r)throw new uo([\"cardId\"]);return r})}}var Wp;!function(e){e.LIVE=\"https://web.squarecdn.com/v1/square.js\",e.SANDBOX=\"https://sandbox.web.squarecdn.com/v1/square.js\"}(Wp||(Wp={}));class $p{constructor(e){this._scriptLoader=e}load(e=!1){return t=this,n=void 0,r=function*(){return yield this._scriptLoader.loadScript(e?Wp.SANDBOX:Wp.LIVE),function(e){if(!function(e){return\"Square\"in e}(e))throw new gi}(window),window.Square},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}}const Yp=Si(e=>new Hp(e,new Vp(new $p(a()),e)),[{id:\"squarev2\"}]);function Kp(e){return null!==e&&\"object\"==typeof e&&\"cardNumberElementOptions\"in e&&\"cardCvcElementOptions\"in e&&\"cardExpiryElementOptions\"in e&&void 0!==e.cardNumberElementOptions&&void 0!==e.cardCvcElementOptions&&void 0!==e.cardExpiryElementOptions}var Jp,Zp,Qp,Xp;!function(e){e.Solid=\"solid\",e.Default=\"default\"}(Jp||(Jp={})),function(e){e.Alipay=\"alipay\",e.CardCvc=\"cardCvc\",e.CardExpiry=\"cardExpiry\",e.CardNumber=\"cardNumber\",e.CreditCard=\"card\",e.IDEAL=\"idealBank\",e.Sepa=\"iban\"}(Zp||(Zp={})),function(e){e.Alipay=\"alipay\",e.CreditCard=\"card\",e.IDEAL=\"ideal\",e.Sepa=\"sepa_debit\"}(Qp||(Qp={})),function(e){e.AuthFailure=\"auth_failure\"}(Xp||(Xp={}));class em extends ei{constructor(e){super(e===Xp.AuthFailure?\"User did not authenticate\":\"There was an error while processing your payment. Please try again or contact us.\"),this.type=\"stripev3_error\",this.subtype=e}}var tm=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};const nm=[Zp.Alipay,Zp.IDEAL];class im{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t}initialize(e){return tm(this,void 0,void 0,function*(){const{stripev3:t,methodId:n,gatewayId:i}=e;if(!i)throw new _i('Unable to initialize payment because \"gatewayId\" argument is not provided.');this.initializeOptions=t,this.isDeinitialize=!1;const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n),{initializationData:{stripePublishableKey:o,stripeConnectedAccount:a,useIndividualCardFields:s,allowRedisplayForStoredInstruments:d}}=r;this._allowRedisplayForStoredInstruments=d;const c=this.getInitializeOptions().form;this.useIndividualCardFields=s,this.stripeV3Client=yield this.loadStripeJs(o,a),this.isCreditCard(n)&&this.shouldShowTSVHostedForm(n,i)&&c?this.hostedForm=yield this.mountCardVerificationFields(c):this.stripeElement=yield this.mountCardFields(n)})}execute(e,t){var n,i;return tm(this,void 0,void 0,function*(){const{payment:r}=e,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);let a,s;if(!r||!r.paymentData)throw new uo([\"payment.paymentData\"]);const{paymentData:d,gatewayId:c,methodId:l}=r,{shouldSaveInstrument:u,shouldSetAsDefaultInstrument:h}=qd(d)?d:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1},p=H(nm,l),{isStoreCreditApplied:m}=this.paymentIntegrationService.getState().getCheckoutOrThrow();m&&(yield this.paymentIntegrationService.applyStoreCredit(m));try{p&&(yield this.paymentIntegrationService.submitOrder(o,t)),c&&(yield this.paymentIntegrationService.loadPaymentMethod(c,{params:{method:l}}));const e=this.paymentIntegrationService.getState();if(Fd(d)){yield this.paymentIntegrationService.submitOrder(o,t);const{instrumentId:n}=d,i=e.getPaymentMethodOrThrow(r.methodId).clientToken;if(!i)throw new ii(ti.MissingPaymentMethod);return yield this.executeWithVaulted(r,n,h,i)}const m=e.getPaymentMethodOrThrow(l),y=yield this.confirmStripePayment(m),{clientToken:g,method:v}=m,{id:f}=null!==(i=null!==(n=y.paymentIntent)&&void 0!==n?n:y.paymentMethod)&&void 0!==i?i:{id:\"\"};s=y.error,a={credit_card_token:{token:f},vault_payment_instrument:u,confirm:!1,set_as_default_stored_instrument:h},v===Zp.CreditCard&&(a.client_token=g),p||(yield this.paymentIntegrationService.submitOrder(o,t));const S=this.buildPaymentPayload(l,a,h);yield this.paymentIntegrationService.submitPayment(S)}catch(e){yield this.processAdditionalAction(this.handleEmptyPaymentIntentError(e,s),l,u,h)}})}finalize(){return Promise.reject(new Pd)}deinitialize(){return this.hostedForm&&this.hostedForm.detach(),this.isDeinitialize=!0,this.unmountElement(),Promise.resolve()}buildPaymentPayload(e,t,n){return{methodId:e,paymentData:n?{formattedPayload:Object.assign(Object.assign({},t),{set_as_default_stored_instrument:n})}:{formattedPayload:t}}}isCancellationError(e){var t,n;return e&&-1!==(null===(n=null===(t=e.payment_intent.last_payment_error)||void 0===t?void 0:t.message)||void 0===n?void 0:n.indexOf(\"canceled\"))}isAuthError(e){return\"payment_intent_authentication_failure\"===(null==e?void 0:e.code)}isCreditCard(e){return e===Qp.CreditCard}isHostedFieldAvailable(){var e;const t=this.getInitializeOptions(),n=ue(null===(e=t.form)||void 0===e?void 0:e.fields,$);return!$(n)}isHostedPaymentFormEnabled(e,t){const{getPaymentMethodOrThrow:n}=this.paymentIntegrationService.getState(),i=n(e,t);return Boolean(i.config.isHostedFormEnabled)}confirmStripePayment(e){return tm(this,void 0,void 0,function*(){const{clientToken:t,method:n,returnUrl:i}=e;if(!t)throw new ii(ti.MissingPaymentMethod);switch(n){case Zp.Alipay:return this.getStripeJs().confirmAlipayPayment(t,{return_url:i},{handleActions:!1});case Zp.IDEAL:{const e=this.mapStripePaymentData(Qp.IDEAL,i);return this.getStripeJs().confirmIdealPayment(t,e,{handleActions:!1})}case Zp.Sepa:{const e=this.mapStripePaymentData(Qp.Sepa);return this.getStripeJs().confirmSepaDebitPayment(t,e)}default:{const e=this.useIndividualCardFields?this.getStripeCardElements()[0]:this.getStripeElement(),t=this.mapStripeBillingDetails(this.paymentIntegrationService.getState().getBillingAddress(),this.paymentIntegrationService.getState().getCustomer()),n=this._allowRedisplayForStoredInstruments;return this.getStripeJs().createPaymentMethod(Object.assign({type:Qp.CreditCard,card:e,billing_details:t},n?{allow_redisplay:\"always\"}:{}))}}})}executeWithVaulted(e,t,n,i){var r;return tm(this,void 0,void 0,function*(){const o={bigpay_token:{token:t},confirm:!0,client_token:i,set_as_default_stored_instrument:n};if(this.isHostedPaymentFormEnabled(e.methodId,e.gatewayId)&&this.hostedForm){const t=this.hostedForm;return e.paymentData&&Fd(e.paymentData)&&(e.paymentData=Object.assign(Object.assign({},e.paymentData),{instrumentId:JSON.stringify({token:(null===(r=e.paymentData)||void 0===r?void 0:r.instrumentId)||\"\",client_token:i})})),yield t.validate(),yield t.submit(e),this.paymentIntegrationService.loadCurrentOrder()}const a=this.buildPaymentPayload(e.methodId,o,n);return this.paymentIntegrationService.submitPayment(a)})}getInitializeOptions(){if(!this.initializeOptions)throw new ai(ni.PaymentNotInitialized);return this.initializeOptions}getStripeCardElements(){if(!this.stripeCardElements)throw new ai(ni.PaymentNotInitialized);return this.stripeCardElements}getStripeElement(){if(!this.stripeElement)throw new ai(ni.PaymentNotInitialized);return this.stripeElement}getStripeJs(){if(!this.stripeV3Client)throw new ai(ni.PaymentNotInitialized);return this.stripeV3Client}handleEmptyPaymentIntentError(e,t){return ya(e)&&ve(e.body.errors,{code:\"required_field\"})&&t?new Error(t.message):e}loadStripeJs(e,t){return tm(this,void 0,void 0,function*(){return this.stripeV3Client?Promise.resolve(this.stripeV3Client):this.scriptLoader.load(e,t,this.paymentIntegrationService.getState().getLocale())})}mapStripeAddress(e){if(e){const{city:t,countryCode:n,address1:i,address2:r,postalCode:o,stateOrProvinceCode:a}=e;return{city:t,country:n,line1:i,line2:r,postal_code:o,state:a}}return{line1:\"\"}}mapStripeBillingDetails(e,t){const{firstName:n,lastName:i}=e||t||{firstName:\"Guest\",lastName:\"\"},r=`${n} ${i}`.trim(),{options:o}=this.getInitializeOptions();if(this.useIndividualCardFields&&Kp(o)){const{zipCodeElementOptions:t}=o;if(t){const n=document.getElementById(t.containerId)?document.getElementById(t.containerId).value:\"\";n&&e&&(e=Object.assign(Object.assign({},e),{postalCode:n}))}}const a={address:this.mapStripeAddress(e)};if(t&&t.addresses[0]&&function(e){return\"object\"==typeof e&&null!==e&&\"id\"in e&&void 0!==e.id}(t.addresses[0])){const e=t.addresses[0],{email:n}=t,{phone:i}=e;return i?Object.assign(Object.assign({},a),{email:n,name:r,phone:i}):Object.assign(Object.assign({},a),{email:n,name:r})}if(e){const{email:t,phone:n}=e;return n?Object.assign(Object.assign({},a),{email:t,name:r,phone:n}):Object.assign(Object.assign({},a),{email:t,name:r})}return Object.assign(Object.assign({},a),{name:r})}mapStripePaymentData(e,t){const n=this.paymentIntegrationService.getState().getCustomer(),i=this.paymentIntegrationService.getState().getBillingAddress(),r={payment_method:{[e]:this.getStripeElement(),billing_details:this.mapStripeBillingDetails(i,n)}};return e===Qp.IDEAL?Object.assign(Object.assign({},r),{return_url:t}):r}mountCardFields(e){const{options:t,containerId:n}=this.getInitializeOptions();let i;return new Promise((r,o)=>{switch(this.stripeElements||(this.stripeElements=this.getStripeJs().elements()),e){case Zp.CreditCard:if(this.useIndividualCardFields&&Kp(t)){const{cardNumberElementOptions:e,cardExpiryElementOptions:n,cardCvcElementOptions:r}=t,a=this.stripeElements.getElement(Zp.CardNumber)||this.stripeElements.create(Zp.CardNumber,e),s=this.stripeElements.getElement(Zp.CardExpiry)||this.stripeElements.create(Zp.CardExpiry,n),d=this.stripeElements.getElement(Zp.CardCvc)||this.stripeElements.create(Zp.CardCvc,r);this.stripeCardElements=[a,s,d],i=this.stripeCardElements[0];try{a.mount(`#${e.containerId}`),s.mount(`#${n.containerId}`),d.mount(`#${r.containerId}`)}catch(e){this.isDeinitialize||o(new _i(\"Unable to mount Stripe component without valid container ID.\"))}}else{i=this.stripeElements.getElement(e)||this.stripeElements.create(e,t);try{i.mount(`#${n}`)}catch(e){this.isDeinitialize||o(new _i(\"Unable to mount Stripe component without valid container ID.\"))}}break;case Zp.IDEAL:case Zp.Sepa:i=this.stripeElements.getElement(e)||this.stripeElements.create(e,t);try{i.mount(`#${n}`)}catch(e){this.isDeinitialize||o(new _i(\"Unable to mount Stripe component without valid container ID.\"))}case Zp.Alipay:}r(i)})}mountCardVerificationFields(e){return tm(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getStoreConfig();if(!t)throw new ii(ti.MissingCheckoutConfig);const n=t.paymentSettings.bigpayBaseUrl,i=this.paymentIntegrationService.createHostedForm(n,e);return yield i.attach(),i})}processAdditionalAction(e,t,n=!1,i=!1){return tm(this,void 0,void 0,function*(){if(!ya(e))throw e;const r=ve(e.body.errors,{code:\"additional_action_required\"}),o=ve(e.body.errors,{code:\"three_d_secure_required\"});if(r){const t=e.body.additional_action_required;if(t&&\"redirect_to_url\"===t.type)return new Promise(()=>{t.data.redirect_url&&window.location.replace(t.data.redirect_url)})}if(o){const r=e.body.three_ds_result.token,o=!1;let a,s=!1;try{a=yield this.getStripeJs().confirmCardPayment(r)}catch(e){s=!0}if(null==a?void 0:a.error){if(this.isCancellationError(a.error))throw new Yi;if(this.isAuthError(a.error))throw new em(Xp.AuthFailure);throw new Error(a.error.message)}const d={credit_card_token:{token:this.getPaymentToken(null==a?void 0:a.paymentIntent,r,s)},vault_payment_instrument:n,confirm:o},c=this.buildPaymentPayload(t,d,i);try{return yield this.paymentIntegrationService.submitPayment(c)}catch(e){throw this.handleEmptyPaymentIntentError(e,null==a?void 0:a.error)}}throw e})}getPaymentToken(e,t,n){return!e||n?t:e.id}shouldShowTSVHostedForm(e,t){return this.isHostedFieldAvailable()&&this.isHostedPaymentFormEnabled(e,t)}unmountElement(){this.stripeElement&&(this.stripeElement.unmount(),this.stripeElement=void 0)}}class rm{constructor(e,t=window){this.scriptLoader=e,this.stripeWindow=t}load(e,t,n){return this.scriptLoader.loadScript(\"https://js.stripe.com/v3/\").then(()=>{if(!this.stripeWindow.Stripe)throw new gi;return this.stripeWindow.Stripe(e,{stripeAccount:t,locale:n,betas:[\"payment_intent_beta_3\",\"alipay_pm_beta_1\"],apiVersion:\"2020-03-02;alipay_beta=v1\"})})}}const om=Si(e=>new im(e,new rm(a())),[{gateway:\"stripev3\"}]),am={ar:[\"ar\"],bg:[\"bg\"],cs:[\"cs\"],da:[\"da\"],de:[\"de\"],el:[\"el\"],en:[\"en\",\"en-GB\"],es:[\"es\",\"es-419\"],et:[\"et\"],fi:[\"fi\"],fil:[\"fil\"],fr:[\"fr\",\"fr-CA\"],he:[\"he\"],hr:[\"hr\"],hu:[\"hu\"],id:[\"id\"],it:[\"it\"],ja:[\"ja\"],ko:[\"ko\"],lt:[\"lt\"],lv:[\"lv\"],ms:[\"ms\"],mt:[\"mt\"],nb:[\"nb\"],nl:[\"nl\"],pl:[\"pl\"],pt:[\"pt\",\"pt-BR\"],ro:[\"ro\"],ru:[\"ru\"],sk:[\"sk\"],sl:[\"sl\"],sv:[\"sv\"],th:[\"th\"],tr:[\"tr\"],vi:[\"vi\"],zh:[\"zh\",\"zh-HK\",\"zh-TW\"]};function sm(e){const[t,n]=e.replace(/_/g,\"-\").toLowerCase().split(\"-\"),i=am[t];if(!i)return\"auto\";const r=n?`${t}-${n.toUpperCase()}`:t;return i.indexOf(r)>-1?r:i[0]}var dm=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class cm{constructor(e,t,n){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=n}initialize(e){return dm(this,void 0,void 0,function*(){const{stripeupe:t,methodId:n,gatewayId:i}=e;if(!(null==t?void 0:t.containerId))throw new ai(ni.PaymentNotInitialized);if(!i)throw new _i('Unable to initialize payment because \"gatewayId\" argument is not provided.');return this._loadStripeElement(t,i,n).catch(e=>{var n;return null===(n=t.onError)||void 0===n?void 0:n.call(t,e)}),this.stripeIntegrationService.initCheckoutEventsSubscription(i,n,t,this._stripeElements),Promise.resolve()})}execute(e,t){return dm(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n||!n.paymentData)throw new uo([\"payment.paymentData\"]);if(!this._stripeUPEClient)throw new ai(ni.PaymentNotInitialized);const{paymentData:r,methodId:o,gatewayId:a}=n,{shouldSaveInstrument:s=!1,shouldSetAsDefaultInstrument:d=!1}=qd(r)?r:{},c=this.paymentIntegrationService.getState(),{isStoreCreditApplied:l}=c.getCheckoutOrThrow(),u=c.getPaymentProviderCustomerOrThrow(),h=(ud(u)?u:{}).stripeLinkAuthenticationState;if(l&&(yield this.paymentIntegrationService.applyStoreCredit(l)),a){yield this.stripeIntegrationService.updateStripePaymentIntent(a,o);const{email:e}=c.getCustomerOrThrow();if(void 0!==h&&!e){const e=c.getBillingAddressOrThrow();yield this.paymentIntegrationService.updateBillingAddress(e)}}if(yield this.paymentIntegrationService.submitOrder(i,t),Fd(r)){const{instrumentId:e}=r;return void(yield this._executeWithVaulted(n.methodId,e,d))}yield this._executeWithStripeConfirmation(n.methodId,n.gatewayId,!h&&s,d)})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e,t;return null===(t=null===(e=this._stripeElements)||void 0===e?void 0:e.getElement(za.PAYMENT))||void 0===t||t.unmount(),this.stripeIntegrationService.deinitialize(),this._stripeElements=void 0,this._stripeUPEClient=void 0,Promise.resolve()}_executeWithStripeConfirmation(e,t,n,i){return dm(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),{clientToken:o}=r.getPaymentMethodOrThrow(e),a=this._getPaymentPayload(e,o||\"\",n,i);try{yield this.paymentIntegrationService.submitPayment(a)}catch(r){yield this._processAdditionalActionWithStripeConfirmation(r,e,t,n,i)}})}_executeWithVaulted(e,t,n){var i;return dm(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(e),a=null===(i=r.getCart())||void 0===i?void 0:i.id;try{const i={methodId:e,paymentData:{formattedPayload:{cart_id:a,bigpay_token:{token:t},confirm:!1,client_token:o.clientToken,set_as_default_stored_instrument:n}}};return yield this.paymentIntegrationService.submitPayment(i)}catch(t){return this._processVaultedAdditionalAction(t,e,n)}})}_loadStripeElement(e,t,n){return dm(this,void 0,void 0,function*(){const{containerId:i,style:r,render:o,initStripeElementUpdateTrigger:a}=e,s=yield this.paymentIntegrationService.loadPaymentMethod(t,{params:{method:n}}),d=s.getPaymentMethodOrThrow(n);if(!ld(d))throw new ii(ti.MissingPaymentMethod);const{clientToken:c,initializationData:l}=d,{shopperLanguage:u,allowRedisplayForStoredInstruments:h=!1,enableLink:p}=l;if(this._allowRedisplayForStoredInstruments=h,!c)throw new ii(ti.MissingPaymentMethod);let m;if(this._stripeUPEClient=yield this._loadStripeJs(l),this._isStripeElementUpdateEnabled=\"function\"==typeof a,r){const e=r;m={variables:this.stripeIntegrationService.mapAppearanceVariables(r),rules:{\".Input\":this.stripeIntegrationService.mapInputAppearanceRules(e)}}}this._stripeElements=yield this.scriptLoader.getElements(this._stripeUPEClient,{clientSecret:c,locale:sm(u),appearance:m});const{getBillingAddress:y,getShippingAddress:g}=s,{postalCode:v}=g()||y()||{},f=this._stripeElements.getElement(za.PAYMENT)||this._stripeElements.create(za.PAYMENT,Object.assign({fields:{billingDetails:{email:Da.NEVER,address:{country:Da.NEVER,city:Da.NEVER,postalCode:v?Da.NEVER:Da.AUTO}}},wallets:{applePay:Da.NEVER,googlePay:Da.NEVER,link:p?Da.AUTO:Da.NEVER}},this._getStripeElementTerms()));this.stripeIntegrationService.mountElement(f,i),f.on(xa.READY,()=>{o()}),f.on(xa.CHANGE,e=>{(null==e?void 0:e.value)&&\"type\"in e.value&&this._updateStripeLinkStateByElementType(e.value.type)}),this._isStripeElementUpdateEnabled&&(null==a||a(this._updateStripeElement.bind(this)))})}_processAdditionalActionWithStripeConfirmation(e,t,n,i=!1,r=!1){return dm(this,void 0,void 0,function*(){if(!ya(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this._stripeUPEClient||!this._stripeElements)throw new ai(ni.PaymentNotInitialized);const{data:o}=e.body.additional_action_required,{token:a}=o,{paymentIntent:s,error:d}=yield this._confirmStripePaymentOrThrow(t,o),c=this._getPaymentPayload(t,(null==s?void 0:s.id)||a,i,r);if(d||!s){const{initializationData:e}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n),{sendSecondPaymentRequestOnStripeError:i}=e||{};if(i)try{const e=de({},c,{paymentData:{formattedPayload:{client_side_error:!0}}});yield this.paymentIntegrationService.submitPayment(e)}catch(e){}this.stripeIntegrationService.throwStripeError(d)}try{yield this.paymentIntegrationService.submitPayment(c)}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}})}_confirmStripePaymentOrThrow(e,t){return dm(this,void 0,void 0,function*(){if(!this._stripeUPEClient)throw new ai(ni.PaymentNotInitialized);const{token:n,redirect_url:i}=t,r=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,i,!!this._allowRedisplayForStoredInstruments);return(yield this.stripeIntegrationService.isPaymentCompleted(e,this._stripeUPEClient))?this._stripeUPEClient.retrievePaymentIntent(n||\"\"):this._stripeUPEClient.confirmPayment(r)})}_processVaultedAdditionalAction(e,t,n=!1){var i;return dm(this,void 0,void 0,function*(){if(!t||!ya(e)||!ve(e.body.errors,{code:\"three_d_secure_required\"}))throw e;if(!this._stripeUPEClient||!this._stripeElements)throw new ai(ni.PaymentNotInitialized);const r=e.body.three_ds_result.token;let o,a=!1;try{o=yield this._stripeUPEClient.confirmCardPayment(r)}catch(e){try{o=yield this._stripeUPEClient.retrievePaymentIntent(r)}catch(e){a=!0}}if((null==o?void 0:o.error)&&this.stripeIntegrationService.throwStripeError(o.error),!(null==o?void 0:o.paymentIntent)&&!a)throw new rr;const s=this._getPaymentPayload(t,a?r:null===(i=null==o?void 0:o.paymentIntent)||void 0===i?void 0:i.id,!1,n);return this.paymentIntegrationService.submitPayment(s)})}_loadStripeJs(e){return dm(this,void 0,void 0,function*(){if(this._stripeUPEClient)return this._stripeUPEClient;const t=this.paymentIntegrationService.getState();return this.scriptLoader.getStripeClient(e,t.getCartLocale(),Ma.V3,Ba,ja)})}_getPaymentPayload(e,t,n=!1,i=!1){var r;return{methodId:e,paymentData:{formattedPayload:{cart_id:(null===(r=this.paymentIntegrationService.getState().getCart())||void 0===r?void 0:r.id)||\"\",credit_card_token:{token:t},confirm:!1,vault_payment_instrument:n,set_as_default_stored_instrument:i}}}}_updateStripeElement({shouldShowTerms:e}){var t;const n=null===(t=this._stripeElements)||void 0===t?void 0:t.getElement(za.PAYMENT);null==n||n.update(Object.assign({},this._getStripeElementTerms(e)))}_getStripeElementTerms(e){let t=Da.AUTO;return this._isStripeElementUpdateEnabled&&(t=e?Da.AUTO:Da.NEVER),{terms:{card:t}}}_updateStripeLinkStateByElementType(e){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomerOrThrow(),n=e===ka.Link;!ud(t)&&n&&this.paymentIntegrationService.updatePaymentProviderCustomer({stripeLinkAuthenticationState:n})}}const lm=Si(e=>{const t=new La(a());return new cm(e,t,new yd(e,t))},[{gateway:\"stripeupe\"},{gateway:\"stripeupe\",id:\"klarna\"}]),um=e=>\"object\"==typeof e&&null!==e&&\"value\"in e&&\"collapsed\"in e;var hm=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class pm{constructor(e,t,n){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=n}initialize(e){var t;return hm(this,void 0,void 0,function*(){const{stripeocs:n,methodId:i,gatewayId:r}=e;if(!(null==n?void 0:n.containerId))throw new ai(ni.PaymentNotInitialized);if(!r)throw new _i('Unable to initialize payment because \"gatewayId\" argument is not provided.');try{yield this._initializeStripeElement(n,r,i)}catch(e){e instanceof Error&&(null===(t=n.onError)||void 0===t||t.call(n,e))}this.stripeIntegrationService.initCheckoutEventsSubscription(r,i,n,this.stripeElements)})}execute(e,t){return hm(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{methodId:r,gatewayId:o}=n||{};if(!this.stripeClient)throw new ai(ni.PaymentNotInitialized);if(!o||!r)throw new _i('Unable to initialize payment because \"gatewayId\" or \"methodId\" argument is not provided.');const{isStoreCreditApplied:a}=this.paymentIntegrationService.getState().getCheckoutOrThrow();a&&(yield this.paymentIntegrationService.applyStoreCredit(a)),yield this.stripeIntegrationService.updateStripePaymentIntent(o,r),yield this.paymentIntegrationService.submitOrder(i,t);const{clientToken:s}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r,o),d=this._getPaymentPayload(r,s||\"\");try{yield this.paymentIntegrationService.submitPayment(d)}catch(e){yield this._processAdditionalAction(e,r,o)}})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e;const t=null===(e=this.stripeElements)||void 0===e?void 0:e.getElement(za.PAYMENT);return null==t||t.unmount(),null==t||t.destroy(),this.stripeIntegrationService.deinitialize(),this.stripeElements=void 0,this.stripeClient=void 0,Promise.resolve()}_initializeStripeElement(e,t,n){return hm(this,void 0,void 0,function*(){let i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,t);if((null==i?void 0:i.clientToken)||(i=(yield this.paymentIntegrationService.loadPaymentMethod(t,{params:{method:n}})).getPaymentMethodOrThrow(n,t)),!ld(i))throw new ii(ti.MissingPaymentMethod);const{clientToken:r,initializationData:o}=i,{customerSessionToken:a,enableLink:s}=o;if(!r)throw new ii(ti.MissingPaymentMethod);this.stripeClient=yield this._loadStripeJs(o);const{appearance:d,containerId:c,fonts:l,layout:u,render:h,paymentMethodSelect:p,handleClosePaymentMethod:m,togglePreloader:y}=e;this.stripeElements=yield this.scriptLoader.getElements(this.stripeClient,{clientSecret:r,customerSessionClientSecret:a,appearance:d,fonts:l});const{getBillingAddress:g,getShippingAddress:v}=this.paymentIntegrationService.getState(),f=g(),{postalCode:S}=v()||f||{},_=this.stripeElements.getElement(za.PAYMENT)||this.stripeElements.create(za.PAYMENT,{fields:{billingDetails:{email:Da.NEVER,address:{country:Da.NEVER,city:Da.NEVER,postalCode:S?Da.NEVER:Da.AUTO}}},wallets:{applePay:Da.NEVER,googlePay:Da.NEVER,link:s?Da.AUTO:Da.NEVER},layout:u,savePaymentMethod:{maxVisiblePaymentMethods:20},defaultValues:{billingDetails:{email:(null==f?void 0:f.email)||\"\"}}});this.stripeIntegrationService.mountElement(_,c),_.on(xa.LOADER_START,()=>{null==y||y(!1)}),_.on(xa.READY,()=>{h()}),_.on(xa.CHANGE,e=>{this._onStripeElementChange(e,t,n,p)}),null==m||m(this._collapseStripeElement.bind(this))})}_loadStripeJs(e){return hm(this,void 0,void 0,function*(){if(this.stripeClient)return this.stripeClient;const t=this.paymentIntegrationService.getState(),n=this.stripeIntegrationService.getStripeJsVersion(e);return this.scriptLoader.getStripeClient(e,t.getCartLocale(),n)})}_collapseStripeElement(){var e;const t=null===(e=this.stripeElements)||void 0===e?void 0:e.getElement(za.PAYMENT);null==t||t.collapse()}_getPaymentPayload(e,t,n){var i;const r=(null===(i=this.paymentIntegrationService.getState().getCart())||void 0===i?void 0:i.id)||\"\",{card:o,us_bank_account:a}=n||{},s=this._shouldSaveInstrument(o)||this._shouldSaveInstrument(a),d=this._getTokenizedOptions(t,n);return{methodId:e,paymentData:{formattedPayload:Object.assign({cart_id:r,confirm:!1,method:this.selectedMethodId,vault_payment_instrument:s},d)}}}_processAdditionalAction(e,t,n){return hm(this,void 0,void 0,function*(){if(!ya(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this.stripeClient||!this.stripeElements)throw new ai(ni.PaymentNotInitialized);const{data:i}=e.body.additional_action_required,{token:r}=i,{paymentIntent:o,error:a}=yield this._confirmStripePaymentOrThrow(t,i),{client_secret:s,payment_method_options:d}=o||{},c=this._getPaymentPayload(t,s||r,d);if(a||!o){const{initializationData:e}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n),{sendSecondPaymentRequestOnStripeError:i}=e||{};if(i)try{const e=de({},c,{paymentData:{formattedPayload:{client_side_error:!0}}});yield this.paymentIntegrationService.submitPayment(e)}catch(e){}this.stripeIntegrationService.throwStripeError(a)}try{return yield this.paymentIntegrationService.submitPayment(c)}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}})}_confirmStripePaymentOrThrow(e,t){return hm(this,void 0,void 0,function*(){if(!this.stripeClient)throw new ai(ni.PaymentNotInitialized);const{token:n,redirect_url:i}=t,r=this.stripeIntegrationService.mapStripePaymentData(this.stripeElements,i);return(yield this.stripeIntegrationService.isPaymentCompleted(e,this.stripeClient))?this.stripeClient.retrievePaymentIntent(n||\"\"):this.stripeClient.confirmPayment(r)})}_onStripeElementChange(e,t,n,i){um(e)&&!e.collapsed&&(this.selectedMethodId=e.value.type,null==i||i(`${t}-${n}`))}_shouldSaveInstrument(e){const t=null==e?void 0:e.setup_future_usage;return t===Ra.ON_SESSION||t===Ra.OFF_SESSION}_getTokenizedOptions(e,t){return this._shouldSaveInstrument(null==t?void 0:t.us_bank_account)?{tokenized_ach:{token:e}}:{credit_card_token:{token:e}}}}const mm=Si(e=>{const t=new La(a());return new pm(e,t,new yd(e,t))},[{gateway:\"stripeocs\",id:\"optimized_checkout\"}]);var ym=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class gm{constructor(e,t,n){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=n}initialize(e){var t;return ym(this,void 0,void 0,function*(){const{stripeocs:n,methodId:i,gatewayId:r}=e;if(!(null==n?void 0:n.containerId)||!r)throw new ai(ni.PaymentNotInitialized);let o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i,r);(null==o?void 0:o.clientToken)||(yield this.paymentIntegrationService.loadPaymentMethod(r,{params:{method:i}}),o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i,r));try{yield this._initStripeCheckoutSession(n,o),yield this._updateStripeShopperData(),this._initializePaymentElement(n,o),this._initializeAdaptivePricingElement(n,o)}catch(e){e instanceof Error&&(null===(t=n.onError)||void 0===t||t.call(n,e))}})}execute(e,t){return ym(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{methodId:r,gatewayId:o}=n||{};if(!this.stripeClient)throw new ai(ni.PaymentNotInitialized);if(!o||!r)throw new _i('Unable to initialize payment because \"gatewayId\" or \"methodId\" argument is not provided.');const a=this.paymentIntegrationService.getState(),{isStoreCreditApplied:s}=a.getCheckoutOrThrow();s&&(yield this.paymentIntegrationService.applyStoreCredit(s)),yield this._updateCheckoutSessionData(o,r),yield this.paymentIntegrationService.submitOrder(i,t);const{clientToken:d}=a.getPaymentMethodOrThrow(r,o),c=this._getPaymentPayload(r,d||\"\");try{yield this.paymentIntegrationService.submitPayment(c)}catch(e){yield this._processAdditionalAction(e,o,r)}})}finalize(){return Promise.reject(new Pd)}deinitialize(){var e,t;const n=null===(e=this.stripeCheckout)||void 0===e?void 0:e.getPaymentElement(),i=null===(t=this.stripeCheckout)||void 0===t?void 0:t.getCurrencySelectorElement();return null==n||n.unmount(),null==n||n.destroy(),null==i||i.unmount(),null==i||i.destroy(),this.stripeCheckout=void 0,this.stripeClient=void 0,this.selectedMethodId=void 0,Promise.resolve()}_initStripeCheckoutSession(e,t){return ym(this,void 0,void 0,function*(){const{clientToken:n,initializationData:i}=t;if(!n||!i)throw new ii(ti.MissingPaymentMethod);this.stripeClient=yield this._loadStripeJs(i);const{appearance:r,fonts:o}=e;this.stripeCheckout=yield this.scriptLoader.getStripeCheckout(this.stripeClient,{clientSecret:n,elementsOptions:{appearance:r,fonts:o},adaptivePricing:{allowed:!!(null==i?void 0:i.adaptivePricingEnabled)}})})}_initializePaymentElement(e,t){const{initializationData:n,id:i,gateway:r}=t,{enableLink:o}=n||{},{containerId:a,layout:s,render:d,paymentMethodSelect:c,handleClosePaymentMethod:l,togglePreloader:u}=e,h=this._getStripeElement({fields:{billingDetails:{email:Da.NEVER,name:Da.NEVER,address:Da.NEVER}},wallets:{applePay:Da.NEVER,googlePay:Da.NEVER,link:o?Da.AUTO:Da.NEVER},layout:s});if(!h||!r)throw new ai(ni.PaymentNotInitialized);this.stripeIntegrationService.mountElement(h,a),h.on(xa.LOADER_START,()=>{null==u||u(!1)}),h.on(xa.READY,()=>{d()}),h.on(xa.CHANGE,e=>{this._onStripeElementChange(e,r,i,c)}),null==l||l(this._collapseStripeElement.bind(this))}_loadStripeJs(e){return ym(this,void 0,void 0,function*(){if(this.stripeClient)return this.stripeClient;const t=this.paymentIntegrationService.getState();return this.scriptLoader.getStripeClient(e,t.getCartLocale(),Ma.CLOVER)})}_getStripeActionsOrThrow(){return ym(this,void 0,void 0,function*(){if(!this.stripeCheckout)throw new ai(ni.PaymentNotInitialized);const{actions:e,error:t}=yield this.stripeCheckout.loadActions();if(!e||t)throw new eo(null==t?void 0:t.message);return e})}_getStripeElement(e){var t,n;return(null===(t=this.stripeCheckout)||void 0===t?void 0:t.getPaymentElement())||(null===(n=this.stripeCheckout)||void 0===n?void 0:n.createPaymentElement(e))}_onStripeElementChange(e,t,n,i){um(e)&&!e.collapsed&&(this.selectedMethodId=e.value.type,null==i||i(`${t}-${n}`))}_collapseStripeElement(){var e;const t=null===(e=this.stripeCheckout)||void 0===e?void 0:e.getPaymentElement();null==t||t.collapse()}_updateCheckoutSessionData(e,t){return ym(this,void 0,void 0,function*(){yield this._updateStripeShopperData(),yield this.paymentIntegrationService.loadPaymentMethod(e,{params:{method:t}})})}_getPaymentPayload(e,t,n){var i;const r=(null===(i=this.paymentIntegrationService.getState().getCart())||void 0===i?void 0:i.id)||\"\",o=this._getTokenizedOptions(t,n);return{methodId:e,paymentData:{formattedPayload:Object.assign({cart_id:r,confirm:!1,method:this.selectedMethodId,vault_payment_instrument:!!n},o)}}}_processAdditionalAction(e,t,n){var i;return ym(this,void 0,void 0,function*(){if(!ya(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;const{data:r}=(null===(i=e.body)||void 0===i?void 0:i.additional_action_required)||{},{token:o}=r||{},a=yield this._getStripeSavedPaymentMethodsOrThrow(),{session:s,error:d}=yield this._confirmStripePayment(r),c=yield this._getStripeSavedPaymentMethodsOrThrow(s),{id:l,status:u}=s||{},h=this._getNewVaultedStripeInstrument(a,c),p=this._getPaymentPayload(n,l||o,h),{initializationData:m}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,t),{sendSecondPaymentRequestOnStripeError:y}=m||{};if(d||!s){if(y)try{const e=de({},p,{paymentData:{formattedPayload:{client_side_error:!0}}});yield this.paymentIntegrationService.submitPayment(e)}catch(e){}throw new eo(null==d?void 0:d.message)}try{return yield this.paymentIntegrationService.submitPayment(p)}catch(e){throw(null==u?void 0:u.paymentStatus)===Aa.Paid&&this.stripeIntegrationService.throwPaymentConfirmationProceedMessage(),e}})}_confirmStripePayment(e){return ym(this,void 0,void 0,function*(){const{redirect_url:t}=e||{};if(!this.stripeCheckout)throw new ai(ni.PaymentNotInitialized);return(yield this._getStripeActionsOrThrow()).confirm({redirect:Da.IF_REQUIRED,returnUrl:t})})}_updateStripeShopperData(){return ym(this,void 0,void 0,function*(){const e=yield this._getStripeActionsOrThrow();yield this._updateStripeEmail(e),yield this._updateStripeShippingAddress(e),yield this._updateStripeBillingAddress(e)})}_updateStripeEmail(e){return ym(this,void 0,void 0,function*(){if((yield e.getSession()).email)return;const{getBillingAddress:t}=this.paymentIntegrationService.getState(),n=t();yield e.updateEmail((null==n?void 0:n.email)||\"\")})}_updateStripeShippingAddress(e){return ym(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getShippingAddress();t&&(yield e.updateShippingAddress({name:this.stripeIntegrationService.getShopperFullName(t),address:this.stripeIntegrationService.mapStripeAddress(t)}))})}_updateStripeBillingAddress(e){return ym(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getBillingAddress();t&&(yield e.updateBillingAddress({name:this.stripeIntegrationService.getShopperFullName(t),address:this.stripeIntegrationService.mapStripeAddress(t)}))})}_getStripeSavedPaymentMethodsOrThrow(e){return ym(this,void 0,void 0,function*(){if(null==e?void 0:e.savedPaymentMethods)return e.savedPaymentMethods;const t=yield this._getStripeActionsOrThrow(),{savedPaymentMethods:n}=yield t.getSession();return n||[]})}_getNewVaultedStripeInstrument(e,t){return t.find(t=>!e.some(e=>e.id===t.id))}_getTokenizedOptions(e,t){return(null==t?void 0:t.type)===ka.ACH?{tokenized_ach:{token:e}}:{credit_card_token:{token:e}}}_initializeAdaptivePricingElement(e,t){const{initializationData:n}=t,{currencySelectorContainerId:i}=e;if(!(null==n?void 0:n.adaptivePricingEnabled))return;if(!i)throw new ai(ni.PaymentNotInitialized);const r=this._getCurrencySelectorElement();r&&(r.mount(`#${i}`),this._initAdaptivePricingEvents(r))}_getCurrencySelectorElement(){var e,t;return(null===(e=this.stripeCheckout)||void 0===e?void 0:e.getCurrencySelectorElement())||(null===(t=this.stripeCheckout)||void 0===t?void 0:t.createCurrencySelectorElement())}_initAdaptivePricingEvents(e){e.on(xa.CHANGE,e=>ym(this,void 0,void 0,function*(){if(!e.value||!(\"currency\"in e.value))return;const{currency:t}=this.paymentIntegrationService.getState().getCartOrThrow(),n=t.code.toLowerCase(),i=e.value.currency.toLowerCase();yield this.paymentIntegrationService.updatePaymentProviderCustomer({isCustomerCurrencySelected:n!==i,customerCurrency:i})}))}}const vm=Si(e=>{const t=new La(a());return new gm(e,t,new yd(e,t))},[{gateway:\"stripeocs\",id:\"checkout_session\"}]);var fm;!function(e){e.CARD_NUMBER=\"card-number\",e.CVV=\"cvv\",e.EXPIRY=\"expiry\"}(fm||(fm={}));var Sm=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class _m{constructor(e,t,n){this.paymentIntegrationService=e,this.tdOnlineMartScriptLoader=t,this.formPoster=n,this.tdInputs=[{id:\"ccNumber\",fieldType:fm.CARD_NUMBER},{id:\"ccCvv\",fieldType:fm.CVV},{id:\"ccExpiry\",fieldType:fm.EXPIRY}]}initialize(e){return Sm(this,void 0,void 0,function*(){const{methodId:t}=e;if(!t)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');this.tdOnlineMartClient=yield this.loadTDOnlineMartJs(),this.mountHostedFields(t)})}execute(e,t){return Sm(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);if(!n.methodId)throw new ii(ti.MissingPaymentMethod);const r=yield this.getPaymentPayloadOrThrow(n);yield this.paymentIntegrationService.submitOrder(i,t);try{yield this.paymentIntegrationService.submitPayment(r)}catch(e){yield this.processWithAdditionalAction(e)}})}finalize(){return Promise.reject(new Pd)}deinitialize(){return this.tdOnlineMartClient=void 0,this.tdInputs.forEach(({inputElement:e})=>{null==e||e.unmount()}),Promise.resolve()}getPaymentPayloadOrThrow(e){return Sm(this,void 0,void 0,function*(){const{methodId:t,paymentData:n}=e,{shouldSaveInstrument:i=!1,shouldSetAsDefaultInstrument:r=!1}=qd(n)?n:{},o={browser_info:cs(),shouldSaveInstrument:i,shouldSetAsDefaultInstrument:r};if(qd(n)&&Fd(n)&&n.instrumentId){const e=!!this.paymentIntegrationService.getState().getCartOrThrow().lineItems.digitalItems.length,i=!this.isTrustedVaultingInstrument(n.instrumentId)||e;return{methodId:t,paymentData:Object.assign(Object.assign(Object.assign({},o),{instrumentId:n.instrumentId}),i?{nonce:n.instrumentId}:{})}}let a;try{a=yield this.getTokenOrThrow()}catch(e){this.throwTokenizationError(e)}return{methodId:t,paymentData:Object.assign(Object.assign({},o),{nonce:a})}})}mountHostedFields(e){const t=this.getHostedFieldsOptions(),n=this.getTDOnlineMartClientOrThrow();this.tdInputs.forEach(i=>{const r=`${e}-${i.id}`;document.getElementById(r)&&(i.inputElement=n.create(i.fieldType,t),i.inputElement.mount(`#${r}`))})}loadTDOnlineMartJs(){return Sm(this,void 0,void 0,function*(){return this.tdOnlineMartClient?this.tdOnlineMartClient:this.tdOnlineMartScriptLoader.load()})}getTokenOrThrow(){return new Promise((e,t)=>{this.getTDOnlineMartClientOrThrow().createToken(n=>{const{error:i,token:r}=n;if(i||!r)return t(i);e(r)})})}getTDOnlineMartClientOrThrow(){if(!this.tdOnlineMartClient)throw new ai(ni.PaymentNotInitialized);return this.tdOnlineMartClient}processWithAdditionalAction(e){return Sm(this,void 0,void 0,function*(){if(!function(e){return ya(e)&&(t=e.body,Z(t)&&\"object\"==typeof t&&\"errors\"in t&&\"three_ds_result\"in t&&W(t.errors)&&ve(t.errors,{code:\"three_d_secure_required\"}));var t}(e))throw e;const{three_ds_result:t}=e.body,{acs_url:n,payer_auth_request:i,merchant_data:r}=t||{};if(!n||!i||!r)throw new uo([\"formUrl\",\"threeDSSessionData\",\"creq\"]);return new Promise(e=>{this.formPoster.postForm(n,{threeDSSessionData:i,creq:r},e,\"_top\")})})}throwTokenizationError(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"field\"in e&&\"type\"in e&&\"message\"in e}(e))throw new ii(ti.MissingPaymentToken);throw new Error(e.message)}getHostedFieldsOptions(){return{style:{error:{color:\"#d14343\"}},classes:{error:\"form-input--error\"}}}isTrustedVaultingInstrument(e){const t=this.paymentIntegrationService.getState().getInstruments(),n=null==t?void 0:t.find(t=>pc(t)&&t.bigpayToken===e);return!(pc(n)&&!n.trustedShippingAddress)}}class wm{constructor(e,t=window){this.scriptLoader=e,this.tdOnlineMartWindow=t}load(){return e=this,t=void 0,i=function*(){if(this.tdOnlineMartWindow.customcheckout||(yield this.scriptLoader.loadScript(\"https://libs.na.bambora.com/customcheckout/1/customcheckout.js\")),!this.tdOnlineMartWindow.customcheckout)throw new gi;return this.tdOnlineMartWindow.customcheckout()},new((n=void 0)||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())});var e,t,n,i}}const Im=Si(e=>new _m(e,new wm(a()),Ee()),[{id:\"tdonlinemart\"}]);var Cm=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};const bm=\"Payment cannot continue\";let Pm;class Om extends iu{initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return Cm(this,void 0,void 0,function*(){if(this._initializeOptions=e&&e.worldpay,!this._initializeOptions)throw new ai(ni.PaymentNotInitialized);return t.initialize.call(this,e)})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return Cm(this,void 0,void 0,function*(){const{payment:i}=e;if(Pm=this._submitAdditionalAction(),!i)throw new uo([\"payment\"]);try{return yield n.execute.call(this,e,t)}catch(e){return this._processAdditionalAction(e,i)}})}_processAdditionalAction(e,t){return Cm(this,void 0,void 0,function*(){return ya(e)&&ve(e.body.errors,{code:\"additional_action_required\"})?new Promise((n,i)=>{const r=e=>Cm(this,void 0,void 0,function*(){if(-1===e.origin.indexOf(\"cardinalcommerce.com\"))return;if(\"string\"!=typeof e.data||!this._isValidJsonWithSessionId(e.data))return i(new Error(bm));window.removeEventListener(\"message\",r),o.remove();const a=JSON.parse(e.data),s=de({},t,{paymentData:{threeDSecure:{token:a.SessionId}}});try{n(yield Pm(s))}catch(e){if(!ya(e)||!ve(e.body.errors,{code:\"three_d_secure_required\"}))return i(e);if(!this._initializeOptions)return i(new ai(ni.PaymentNotInitialized));const{onLoad:t}=this._initializeOptions,n=this._createIframe(e.body.three_ds_result);try{t(n,()=>i(new Error(\"Payment was cancelled\")))}catch(e){i(new Error(bm))}}});let o;window.addEventListener(\"message\",r);try{o=this._createHiddenIframe(e.body)}catch(e){throw window.removeEventListener(\"message\",r),new Error(bm)}}):Promise.reject(e)})}_createHiddenIframe(e){const t=document.createElement(\"iframe\");if(document.body.appendChild(t),!t.contentWindow)throw new Error;t.id=\"worldpay_hosted_hidden_payment_page\",t.height=\"0px\",t.width=\"0px\";const n=document.createElement(\"form\"),i=\"collectionForm\";n.id=i,n.name=\"devicedata\",n.method=\"post\";const r=e.additional_action_required.data.redirect_url;n.action=r;const o=document.createElement(\"input\");o.name=\"Bin\",o.type=\"hidden\",o.value=e.provider_data.source_id,n.appendChild(o);const a=document.createElement(\"input\");a.name=\"JWT\",a.type=\"hidden\",a.value=e.provider_data.data,n.appendChild(a);const s=document.createElement(\"button\");s.type=\"submit\",s.id=\"btnsubmit\",n.appendChild(s),navigator.userAgent.match(\"Firefox\")?t.srcdoc=n.outerHTML:t.contentWindow.document.body.appendChild(n);const d=document.createElement(\"script\");return d.innerHTML=`\\n            document.getElementById('${i}').submit();\\n        `,t.contentWindow.document.body.appendChild(d),t}_createIframe(e){const t=document.createElement(\"form\");t.id=\"challengeForm\",t.method=\"POST\",t.action=e.acs_url;const n=document.createElement(\"input\");n.name=\"JWT\",n.type=\"hidden\",n.value=e.payer_auth_request,t.appendChild(n);const i=document.createElement(\"input\");i.name=\"MD\",i.type=\"hidden\",i.value=`merchantSessionId=${e.merchant_data}`,t.appendChild(i);const r=document.createElement(\"script\");r.type=\"text/javascript\",r.innerHTML=\"window.onload = function() { document.getElementById('challengeForm').submit(); }\";const o=document.createElement(\"iframe\");return o.name=\"worldpay_hosted_payment_page\",o.height=\"400\",o.width=\"100%\",o.srcdoc=`${t.outerHTML} ${r.outerHTML}`,o}_submitAdditionalAction(){if(this._shouldRenderHostedForm){if(!this._hostedForm)throw new ai(ni.PaymentNotInitialized);const e=this._hostedForm;return t=>Cm(this,void 0,void 0,function*(){yield e.submit(t)})}return e=>Cm(this,void 0,void 0,function*(){yield this._paymentIntegrationService.submitPayment(e)})}_isValidJsonWithSessionId(e){try{const t=JSON.parse(e);return!(!t.SessionId||!t.Status)}catch(e){return!1}}}const Em=Si(e=>new Om(e),[{gateway:\"worldpayaccess\",id:\"credit_card\"},{id:\"worldpayaccess\"}]);class Am{constructor(e){this._paymentIntegrationService=e}execute({payment:e}){return t=this,n=void 0,r=function*(){if(!e)throw new uo([\"payment\"]);yield this._paymentIntegrationService.submitOrder();try{yield this._paymentIntegrationService.submitPayment(this._buildOpenBankingSubmitPayment(e))}catch(e){if(this._isWorldpayAccessRedirectResponse(e)){const t=e.body.additional_action_required.data.redirect_url;return new Promise(()=>window.location.replace(t))}return Promise.reject(e)}},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}initialize(){return Promise.resolve()}finalize(){return Promise.reject(new Pd)}deinitialize(){return Promise.resolve()}_buildOpenBankingSubmitPayment(e){const{shouldSaveInstrument:t,shouldSetAsDefaultInstrument:n}=qd(e.paymentData)?e.paymentData:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1};return Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{open_banking:{},vault_payment_instrument:t||!1,set_as_default_stored_instrument:n||!1}}})}_isWorldpayAccessRedirectResponse(e){var t,n;if(\"object\"!=typeof e||null===e)return!1;const i=e;if(!i.body)return!1;const r=i.body;return\"additional_action_required\"===r.status&&!!(null===(n=null===(t=r.additional_action_required)||void 0===t?void 0:t.data)||void 0===n?void 0:n.redirect_url)}}const Tm=Si(e=>new Am(e),[{id:\"open_banking\",gateway:\"worldpayaccess\"}]);class km{constructor(e){this._requestSender=e}saveExternalId(e,t){return n=this,i=void 0,o=function*(){const n=`/api/storefront/payment/${e}/save-external-id`,i={headers:Object.assign({Accept:gr.JsonV1,\"X-API-INTERNAL\":mr},vr),body:{externalId:t,provider:e}};yield this._requestSender.post(n,i)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}}class Dm{constructor(e,t){this.paymentIntegrationService=e,this.storefrontPaymentRequestSender=t}initialize(){return Promise.resolve()}execute(e,t){return n=this,i=void 0,o=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new uo([\"payment\"]);const{methodId:r}=n,{getPaymentMethodOrThrow:o}=yield this.paymentIntegrationService.loadPaymentMethod(r,t),{clientToken:a,initializationData:s}=o(r),d=null==s?void 0:s.redirectUrl;if(!a||!d)throw new ii(ti.MissingPaymentMethod);const{id:c}=JSON.parse(a);if(!c)throw new ii(ti.MissingPaymentToken);const{isStoreCreditApplied:l}=this.paymentIntegrationService.getState().getCheckoutOrThrow();yield this.paymentIntegrationService.applyStoreCredit(l),yield this.paymentIntegrationService.initializePayment(r,{useStoreCredit:l}),yield this.paymentIntegrationService.submitOrder(i,t),yield this._prepareForReferredRegistration(r,c);try{yield this.paymentIntegrationService.submitPayment({methodId:r,paymentData:{nonce:c}})}catch(e){if(ya(e)&&\"additional_action_required\"===e.body.status)return new Promise(()=>window.location.replace(d));throw e}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}finalize(){return Promise.reject(new Pd)}deinitialize(){return Promise.resolve()}_prepareForReferredRegistration(e,t){return this.storefrontPaymentRequestSender.saveExternalId(e,t)}}const Mm=Si(e=>{const{getHost:t}=e.getState(),i=n({host:t()}),r=new km(i);return new Dm(e,r)},[{id:\"zip\"},{id:\"quadpay\"}]);var zm,Nm;!function(e){e.LoadCountriesRequested=\"LOAD_COUNTRIES_REQUESTED\",e.LoadCountriesSucceeded=\"LOAD_COUNTRIES_SUCCEEDED\",e.LoadCountriesFailed=\"LOAD_COUNTRIES_FAILED\"}(zm||(zm={}));class xm{constructor(e){this._countryRequestSender=e}loadCountries(e){return m.create(t=>{t.next(l(zm.LoadCountriesRequested)),this._countryRequestSender.loadCountries(e).then(e=>{t.next(l(zm.LoadCountriesSucceeded,e.body.data)),t.complete()}).catch(e=>{t.error(h(zm.LoadCountriesFailed,e))})})}}class Rm{constructor(e,t){this._requestSender=e,this._config=t}loadCountries({timeout:e}={}){const t=Object.assign({\"Accept-Language\":this._config.locale},tt);return this._requestSender.get(\"/internalapi/v1/store/countries\",{headers:t,timeout:e})}}class Fm extends ot{constructor(e){super(e||\"Your checkout could not be processed because some details have changed. Please review your order and try again.\"),this.name=\"CartConsistencyError\",this.type=\"cart_consistency\"}}class Lm extends ot{constructor(e,t){super(t||\"At least one item changed stock position. Please review your cart and try again.\"),this.name=\"CartStockPositionsChangedError\",this.type=\"cart_stock_positions_changed\",this.changedItemIds=e}}class Bm extends ot{constructor(e){super(e||\"The tax provider is unavailable.\"),this.name=\"OrderTaxProviderUnavailableError\",this.type=\"tax_provider_unavailable\"}}class jm extends ot{constructor(e){super(e),this.name=\"MissingShippingMethodError\",this.type=\"missing_shipping_method\"}}class Um extends ot{constructor(e){super(e),this.name=\"InvalidShippingAddressError\",this.type=\"invalid_shipping_address\"}}class qm{constructor(e){this._requestSender=e}loadOrder(e,{timeout:t}={}){const n=`/api/storefront/orders/${e}`,i=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.get(n,{params:{include:Bt([\"payments\",\"lineItems.physicalItems.socialMedia\",\"lineItems.physicalItems.options\",\"lineItems.physicalItems.categories\",\"lineItems.digitalItems.socialMedia\",\"lineItems.digitalItems.options\",\"lineItems.digitalItems.categories\"])},headers:i,timeout:t})}submitOrder(e,{headers:t,timeout:n}={}){return this._requestSender.post(\"/internalapi/v1/checkout/order\",{body:e,headers:ue(Object.assign({\"X-Checkout-Variant\":t&&t.checkoutVariant},tt),J),timeout:n}).catch(e=>{var t,n;if(\"tax_provider_unavailable\"===e.body.type)throw new Bm;if(\"cart_has_changed\"===e.body.type)throw new Fm;if(\"cart_stock_positions_changed\"===e.body.type){const i=null!==(n=null===(t=e.body.errors)||void 0===t?void 0:t.changedItemIds)&&void 0!==n?n:[];throw new Lm(i)}if(\"missing_shipping_method\"===e.body.type)throw new jm(e.body.detail);if(\"invalid_shipping_address\"===e.body.type)throw new Um(e.body.detail);if(\"empty_cart\"===e.body.type)throw new lt;throw e})}finalizeOrder(e,{timeout:t}={}){const n=`/internalapi/v1/checkout/order/${e}`;return this._requestSender.post(n,{timeout:t,headers:tt})}}class Vm extends ot{constructor(){super(\"You haven't complete our spam check. Please try again.\"),this.name=\"SpamProtectionNotCompletedError\",this.type=\"spam_protection_not_completed\"}}!function(e){e.LoadOrderRequested=\"LOAD_ORDER_REQUESTED\",e.LoadOrderSucceeded=\"LOAD_ORDER_SUCCEEDED\",e.LoadOrderFailed=\"LOAD_ORDER_FAILED\",e.LoadOrderPaymentsRequested=\"LOAD_ORDER_PAYMENTS_REQUESTED\",e.LoadOrderPaymentsSucceeded=\"LOAD_ORDER_PAYMENTS_SUCCEEDED\",e.LoadOrderPaymentsFailed=\"LOAD_ORDER_PAYMENTS_FAILED\",e.SubmitOrderRequested=\"SUBMIT_ORDER_REQUESTED\",e.SubmitOrderSucceeded=\"SUBMIT_ORDER_SUCCEEDED\",e.SubmitOrderFailed=\"SUBMIT_ORDER_FAILED\",e.FinalizeOrderRequested=\"FINALIZE_ORDER_REQUESTED\",e.FinalizeOrderSucceeded=\"FINALIZE_ORDER_SUCCEEDED\",e.FinalizeOrderFailed=\"FINALIZE_ORDER_FAILED\"}(Nm||(Nm={}));class Gm{constructor(e,t){this._orderRequestSender=e,this._checkoutValidator=t}loadOrder(e,t){return new m(n=>{n.next(l(Nm.LoadOrderRequested)),this._orderRequestSender.loadOrder(e,t).then(e=>{n.next(l(Nm.LoadOrderSucceeded,e.body)),n.complete()}).catch(e=>{n.error(h(Nm.LoadOrderFailed,e))})})}loadOrderPayments(e,t){return new m(n=>{n.next(l(Nm.LoadOrderPaymentsRequested)),this._orderRequestSender.loadOrder(e,t).then(e=>{n.next(l(Nm.LoadOrderPaymentsSucceeded,e.body)),n.complete()}).catch(e=>{n.error(h(Nm.LoadOrderPaymentsFailed,e))})})}loadCurrentOrder(e){return t=>v(()=>{const n=this._getCurrentOrderId(t.getState());if(!n)throw new at(nt.MissingOrderId);return this.loadOrder(n,e)})}submitOrder(e,t){return n=>g(C(l(Nm.SubmitOrderRequested)),v(()=>{const i=n.getState(),r=i.config.getExternalSource(),o=i.config.getVariantIdentificationToken(),a=i.checkout.getCheckout();if(!a)throw new at(nt.MissingCheckout);if(a.shouldExecuteSpamCheck)throw new Vm;return S(this._checkoutValidator.validate(a,t).then(()=>this._orderRequestSender.submitOrder(this._mapToOrderRequestBody(null!=e?e:{},a.id,a.customerMessage,r),Object.assign(Object.assign({},t),{headers:{checkoutVariant:o}})))).pipe(M(e=>g(this.loadOrder(e.body.data.order.orderId,t),C(l(Nm.SubmitOrderSucceeded,e.body.data,Object.assign(Object.assign({},e.body.meta),{token:e.headers.token}))))))}).pipe(P(e=>Qe(Nm.SubmitOrderFailed,e))))}finalizeOrder(e,t){return g(C(l(Nm.FinalizeOrderRequested)),S(this._orderRequestSender.finalizeOrder(e,t)).pipe(M(n=>g(this.loadOrder(e,t),C(l(Nm.FinalizeOrderSucceeded,n.body.data)))))).pipe(P(e=>Qe(Nm.FinalizeOrderFailed,e)))}_getCurrentOrderId(e){const t=e.order.getOrder(),n=e.checkout.getCheckout();return t&&t.orderId||n&&n.orderId}_mapToOrderRequestBody(e,t,n,i){const{payment:r}=e,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);return r?Object.assign(Object.assign({},o),{cartId:t,customerMessage:n,externalSource:i,payment:{paymentData:r.paymentData,name:r.methodId,gateway:r.gatewayId}}):Object.assign(Object.assign({},o),{cartId:t,customerMessage:n,externalSource:i})}}function Hm(e){const t=ke();return e.subscribe(e=>{const n=e.config.getStoreConfig();n&&t.setHost(n.paymentSettings.bigpayBaseUrl)},e=>e.config.getStoreConfig()),t}var Wm;function $m(e,t,n,i){var r,o,a,s,d,c,l,u;return d=this,c=void 0,u=function*(){const d=t.customer.getCustomer(),c=t.b2bToken.getToken(),l=Ze(null!==(a=null===(o=null===(r=t.config.getStoreConfig())||void 0===r?void 0:r.b2bApiSettings)||void 0===o?void 0:o.baseUrl)&&void 0!==a?a:\"\"),u=null===(s=t.cart.getCart())||void 0===s?void 0:s.companyId;if(!d||d.isGuest||!c||!l||!u)throw new at(nt.MissingCheckoutConfig);const{body:h}=yield n.getB2BCompanyPaymentMethods(u,c,l,i);return function(e,t){const n=new Set(t.data.filter(e=>\"1\"===e.isEnabled).map(e=>e.code));return e.filter(e=>n.has(e.id))}(e,h)},new((l=void 0)||(l=Promise))(function(e,t){function n(e){try{r(u.next(e))}catch(e){t(e)}}function i(e){try{r(u.throw(e))}catch(e){t(e)}}function r(t){var r;t.done?e(t.value):(r=t.value,r instanceof l?r:new l(function(e){e(r)})).then(n,i)}r((u=u.apply(d,c||[])).next())})}!function(e){e.LoadPaymentMethodRequested=\"LOAD_PAYMENT_METHOD_REQUESTED\",e.LoadPaymentMethodSucceeded=\"LOAD_PAYMENT_METHOD_SUCCEEDED\",e.LoadPaymentMethodFailed=\"LOAD_PAYMENT_METHOD_FAILED\",e.LoadPaymentMethodsRequested=\"LOAD_PAYMENT_METHODS_REQUESTED\",e.LoadPaymentMethodsSucceeded=\"LOAD_PAYMENT_METHODS_SUCCEEDED\",e.LoadPaymentMethodsFailed=\"LOAD_PAYMENT_METHODS_FAILED\"}(Wm||(Wm={}));var Ym=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};const Km=e=>!!e;class Jm{constructor(e,t){this._requestSender=e,this._b2bCompanyPaymentMethodRequestSender=t}loadPaymentMethodsById(e,t){return n=>new m(i=>{var r;const o=null===(r=n.getState().cart.getCart())||void 0===r?void 0:r.id,a=o?Object.assign(Object.assign({},null==t?void 0:t.params),{cartId:o}):Object.assign({},null==t?void 0:t.params);i.next(l(Wm.LoadPaymentMethodsRequested)),Promise.all(e.map(e=>Ym(this,void 0,void 0,function*(){try{return(yield this._requestSender.loadPaymentMethod(e,Object.assign(Object.assign({},t),{params:a}))).body}catch(e){return}}))).then(e=>{const t=e.filter(Km);i.next(l(Wm.LoadPaymentMethodsSucceeded,t)),i.complete()}).catch(e=>{i.next(l(Wm.LoadPaymentMethodsFailed,e)),i.complete()})})}loadPaymentMethods(e){return t=>m.create(n=>{const i=t.getState(),r=i.cart.getCartOrThrow();n.next(l(Wm.LoadPaymentMethodsRequested)),this._requestSender.loadPaymentMethods(Object.assign(Object.assign({},e),{params:Object.assign(Object.assign({},null==e?void 0:e.params),{cartId:r.id})})).then(t=>Ym(this,void 0,void 0,function*(){var r,o,a,s;const d={deviceSessionId:t.headers[\"x-device-session-id\"],sessionHash:t.headers[\"x-session-hash\"]};let c=t.body;null!==(s=null===(a=null===(o=null===(r=i.config.getStoreConfig())||void 0===r?void 0:r.checkoutSettings.capabilities)||void 0===o?void 0:o.payment)||void 0===a?void 0:a.b2bPaymentMethodFilter)&&void 0!==s&&s&&(c=yield $m(c,i,this._b2bCompanyPaymentMethodRequestSender,e)),n.next(l(Wm.LoadPaymentMethodsSucceeded,c,d)),n.complete()})).catch(e=>{n.error(h(Wm.LoadPaymentMethodsFailed,e))})})}loadPaymentMethod(e,t){return n=>m.create(i=>{var r;const o=null===(r=n.getState().cart.getCart())||void 0===r?void 0:r.id,a=o?Object.assign(Object.assign({},null==t?void 0:t.params),{cartId:o}):Object.assign({},null==t?void 0:t.params);i.next(l(Wm.LoadPaymentMethodRequested,void 0,{methodId:e})),this._requestSender.loadPaymentMethod(e,Object.assign(Object.assign({},t),{params:a})).then(t=>{i.next(l(Wm.LoadPaymentMethodSucceeded,t.body,{methodId:e})),i.complete()}).catch(t=>{i.error(h(Wm.LoadPaymentMethodFailed,t,{methodId:e}))})})}}!function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);o>3&&a&&Object.defineProperty(t,n,a)}([bt],Jm.prototype,\"loadPaymentMethod\",null);class Zm{constructor(e){this._requestSender=e}loadPaymentMethods({timeout:e,params:t}={}){return this._requestSender.get(\"/api/storefront/payments\",{timeout:e,headers:Object.assign({Accept:ut.JsonV1,\"X-API-INTERNAL\":kt},tt),params:t})}loadPaymentMethod(e,{timeout:t,params:n}={}){const i=`/api/storefront/payments/${e}`;return this._requestSender.get(i,{timeout:t,headers:Object.assign({Accept:ut.JsonV1,\"X-API-INTERNAL\":kt},tt),params:n})}}var Qm,Xm;class ey{constructor(e){this._requestSender=e}getB2BCompanyPaymentMethods(e,t,n,i){return r=this,o=void 0,s=function*(){return this._requestSender.get(`${n}/api/v2/companies/${e}/payments`,{timeout:null==i?void 0:i.timeout,credentials:!1,headers:{authToken:t,Authorization:`Bearer ${t}`}})},new((a=void 0)||(a=Promise))(function(e,t){function n(e){try{d(s.next(e))}catch(e){t(e)}}function i(e){try{d(s.throw(e))}catch(e){t(e)}}function d(t){var r;t.done?e(t.value):(r=t.value,r instanceof a?r:new a(function(e){e(r)})).then(n,i)}d((s=s.apply(r,o||[])).next())});var r,o,a,s}}class ty extends ot{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(e){e.ExecuteFailed=\"PAYMENT_STRATEGY_EXECUTE_FAILED\",e.ExecuteRequested=\"PAYMENT_STRATEGY_EXECUTE_REQUESTED\",e.ExecuteSucceeded=\"PAYMENT_STRATEGY_EXECUTE_SUCCEEDED\",e.FinalizeFailed=\"PAYMENT_STRATEGY_FINALIZE_FAILED\",e.FinalizeRequested=\"PAYMENT_STRATEGY_FINALIZE_REQUESTED\",e.FinalizeSucceeded=\"PAYMENT_STRATEGY_FINALIZE_SUCCEEDED\",e.InitializeFailed=\"PAYMENT_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"PAYMENT_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"PAYMENT_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"PAYMENT_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"PAYMENT_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"PAYMENT_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"PAYMENT_STRATEGY_WIDGET_INTERACTION_FAILED\"}(Qm||(Qm={})),function(e){e.ADYENV2=\"adyenv2\",e.ADYENV2_GOOGLEPAY=\"googlepayadyenv2\",e.ADYENV3=\"adyenv3\",e.ADYENV3_GOOGLEPAY=\"googlepayadyenv3\",e.AFFIRM=\"affirm\",e.AFTERPAY=\"afterpay\",e.AUTHORIZENET_GOOGLE_PAY=\"googlepayauthorizenet\",e.AMAZONPAY=\"amazonpay\",e.APPLEPAY=\"applepay\",e.BLUESNAPV2=\"bluesnapv2\",e.BOLT=\"bolt\",e.CBA_MPGS=\"cba_mpgs\",e.CHECKOUTCOM=\"checkoutcom\",e.CHECKOUTCOM_APM=\"checkoutcomapm\",e.CHECKOUTCOM_FAWRY=\"checkoutcomfawry\",e.CHECKOUTCOM_SEPA=\"checkoutcomsepa\",e.CHECKOUTCOM_IDEAL=\"checkoutcomideal\",e.CREDIT_CARD=\"creditcard\",e.CHECKOUTCOM_GOOGLE_PAY=\"googlepaycheckoutcom\",e.CLEARPAY=\"clearpay\",e.CONVERGE=\"converge\",e.CYBERSOURCE=\"cybersource\",e.CYBERSOURCEV2=\"cybersourcev2\",e.BNZ=\"bnz\",e.BNZ_GOOGLEPAY=\"googlepaybnz\",e.CYBERSOURCEV2_GOOGLE_PAY=\"googlepaycybersourcev2\",e.HUMM=\"humm\",e.KLARNA=\"klarna\",e.KLARNAV2=\"klarnav2\",e.LEGACY=\"legacy\",e.MOLLIE=\"mollie\",e.MONERIS=\"moneris\",e.NO_PAYMENT_DATA_REQUIRED=\"nopaymentdatarequired\",e.OFFLINE=\"offline\",e.OFFSITE=\"offsite\",e.ORBITAL_GOOGLE_PAY=\"googlepayorbital\",e.PAYPAL_EXPRESS=\"paypalexpress\",e.PAYPAL_EXPRESS_CREDIT=\"paypalexpresscredit\",e.PAYPAL_COMMERCE=\"paypalcommerce\",e.PAYPAL_COMMERCE_CREDIT=\"paypalcommercecredit\",e.PAYPAL_COMMERCE_CREDIT_CARD=\"paypalcommercecreditcards\",e.PAYPAL_COMMERCE_ALTERNATIVE_METHODS=\"paypalcommercealternativemethods\",e.PAYPAL_COMMERCE_VENMO=\"paypalcommercevenmo\",e.PPSDK=\"PAYMENT_TYPE_SDK\",e.QUADPAY=\"quadpay\",e.SAGE_PAY=\"sagepay\",e.SQUARE=\"squarev2\",e.STRIPEV3=\"stripev3\",e.STRIPE_UPE=\"stripeupe\",e.STRIPE_UPE_GOOGLE_PAY=\"googlepaystripeupe\",e.BRAINTREE=\"braintree\",e.BRAINTREE_PAYPAL=\"braintreepaypal\",e.BRAINTREE_VENMO=\"braintreevenmo\",e.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",e.BRAINTREE_VISA_CHECKOUT=\"braintreevisacheckout\",e.BRAINTREE_GOOGLE_PAY=\"googlepaybraintree\",e.WORLDPAYACCESS=\"worldpayaccess\",e.WORLDPAYACCESS_GOOGLE_PAY=\"googlepayworldpayaccess\",e.STRIPE_GOOGLE_PAY=\"googlepaystripe\",e.SEZZLE=\"sezzle\",e.ZIP=\"zip\"}(Xm||(Xm={}));const ny=Xm;class iy{widgetInteraction(e,t){const n={methodId:t&&t.methodId};return g(C(l(Qm.WidgetInteractionStarted,void 0,n)),v(()=>e().then(()=>l(Qm.WidgetInteractionFinished,void 0,n)))).pipe(P(e=>Qe(Qm.WidgetInteractionFailed,e,n)))}}class ry{constructor(e,t,n,i,r){this._strategyRegistry=e,this._strategyRegistryV2=t,this._orderActionCreator=n,this._spamProtectionActionCreator=i,this._paymentIntegrationService=r,this._paymentStrategyWidgetActionCreator=new iy}execute(e,t){const{payment:n={},useStoreCredit:i}=e,r={methodId:n.methodId};return o=>{const{checkout:a}=o.getState(),{shouldExecuteSpamCheck:s}=a.getCheckoutOrThrow();return g(s?this._spamProtectionActionCreator.verifyCheckoutSpamProtection()(o):f(),C(l(Qm.ExecuteRequested,void 0,r)),v(()=>{const a=o.getState();let s;if(a.payment.isPaymentDataRequired(i)){const e=a.paymentMethods.getPaymentMethod(n.methodId,n.gatewayId);if(!e)throw new at(nt.MissingPaymentMethod);s=this._getStrategy(e)}else s=this._strategyRegistryV2.get({id:ny.NO_PAYMENT_DATA_REQUIRED});return s.execute(e,Object.assign(Object.assign({},t),{methodId:n.methodId,gatewayId:n.gatewayId})).then(()=>l(Qm.ExecuteSucceeded,void 0,r))})).pipe(P(e=>Qe(Qm.ExecuteFailed,e,r)))}}finalize(e){const{integrations:t}=null!=e?e:{};return n=>g(C(l(Qm.FinalizeRequested)),this._loadOrderPaymentsIfNeeded(n,e),v(()=>{return i=this,r=void 0,a=function*(){const i=n.getState(),{providerId:r=\"\",gatewayId:o=\"\"}=i.payment.getPaymentId()||{},a=i.paymentMethods.getPaymentMethod(r,o);if(!a)throw new ty;let s;Xt(this._strategyRegistryV2,null!=t?t:[],this._paymentIntegrationService);try{s=this._getStrategy(a)}catch(e){throw new ty}return yield s.finalize(Object.assign(Object.assign({},e),{methodId:a.id,gatewayId:a.gateway})),l(Qm.FinalizeSucceeded,void 0,{methodId:a.id})},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}d((a=a.apply(i,r||[])).next())});var i,r,o,a})).pipe(P(e=>{const t=n.getState().payment.getPaymentId();return Qe(Qm.FinalizeFailed,e,{methodId:t&&t.providerId})}))}initialize(e){const{methodId:t,gatewayId:n,integrations:i}=e;return r=>v(()=>{const o=r.getState(),a=o.paymentMethods.getPaymentMethod(t,n);if(!a)throw new at(nt.MissingPaymentMethod);if(t&&o.paymentStrategies.isInitialized({methodId:t,gatewayId:n}))return f();Xt(this._strategyRegistryV2,null!=i?i:[],this._paymentIntegrationService);const s=this._getStrategy(a).initialize(Object.assign(Object.assign({},e),{methodId:t,gatewayId:n}));return g(C(l(Qm.InitializeRequested,void 0,{methodId:t,gatewayId:n})),s.then(()=>l(Qm.InitializeSucceeded,void 0,{methodId:t,gatewayId:n})))}).pipe(P(e=>Qe(Qm.InitializeFailed,e,{methodId:t,gatewayId:n})))}deinitialize(e){const{methodId:t,gatewayId:n}=e;return i=>v(()=>{const r=i.getState(),o=r.paymentMethods.getPaymentMethod(t,n);if(!o)throw new at(nt.MissingPaymentMethod);if(t&&!r.paymentStrategies.isInitialized({methodId:t,gatewayId:n}))return f();const a=this._getStrategy(o).deinitialize(Object.assign(Object.assign({},e),{methodId:t,gatewayId:n}));return g(C(l(Qm.DeinitializeRequested,void 0,{methodId:t,gatewayId:n})),a.then(()=>l(Qm.DeinitializeSucceeded,void 0,{methodId:t,gatewayId:n})))}).pipe(P(e=>Qe(Qm.DeinitializeFailed,e,{methodId:t,gatewayId:n})))}widgetInteraction(e,t){return this._paymentStrategyWidgetActionCreator.widgetInteraction(e,t)}_getStrategy(e){let t;try{t=this._strategyRegistry.getByMethod(e)}catch(n){try{t=this._strategyRegistryV2.get({id:e.id,gateway:e.gateway,type:e.type})}catch(t){throw Ct().error(`[PaymentStrategyActionCreator] Unable to resolve V2 strategy for id: ${e.id}, gateway: ${e.gateway}, type: ${e.type}`),t}}return t}_loadOrderPaymentsIfNeeded(e,t){const n=e.getState().checkout.getCheckout();return n&&n.orderId?this._orderActionCreator.loadOrderPayments(n.orderId,t):f()}}class oy{isEqual(e,t){return Y(this._normalize(e),this._normalize(t))}_normalize(e){return{cartAmount:e.cartAmount,currency:e.currency,id:e.id,lineItems:{digitalItems:e.lineItems.digitalItems.slice().sort((e,t)=>`${e.productId}${e.variantId}`.localeCompare(`${t.productId}${t.variantId}`)).map(e=>({extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId})),giftCertificates:e.lineItems.giftCertificates.slice().sort((e,t)=>`${e.id}`.localeCompare(`${t.id}`)).map(e=>({amount:e.amount,recipient:e.recipient})),physicalItems:e.lineItems.physicalItems.slice().sort((e,t)=>`${e.productId}${e.variantId}`.localeCompare(`${t.productId}${t.variantId}`)).map(e=>({extendedSalePrice:e.extendedSalePrice,productId:e.productId,quantity:e.quantity,variantId:e.variantId,giftWrapping:e.giftWrapping}))}}}}class ay extends ot{constructor(e,t){super(\"An update to your shopping cart has been detected and your available shipping costs have been updated.\"),this.name=\"CartChangedError\",this.type=\"cart_changed\",this.data={previous:e,updated:t}}}class sy{constructor(e){this._checkoutRequestSender=e}validate(e,t){if(!e)throw new at(nt.MissingCheckout);return this._checkoutRequestSender.loadCheckout(e.id,t).then(t=>{const n=new oy;if(!(e.outstandingBalance===t.body.outstandingBalance&&this._compareCoupons(e.coupons,t.body.coupons)&&this._compareGiftCertificates(e.giftCertificates,t.body.giftCertificates)&&n.isEqual(e.cart,t.body.cart)))throw new ay(this._getComparableCheckout(e),this._getComparableCheckout(t.body))})}_compareCoupons(e,t){return Y(oe(e,\"code\"),oe(t,\"code\"))}_compareGiftCertificates(e,t){return Y(oe(e,\"code\"),oe(t,\"code\"))}_getComparableCheckout(e){const{cart:t,coupons:n,giftCertificates:i,outstandingBalance:r}=e;return{cart:{cartAmount:t.cartAmount,currency:t.currency,lineItems:t.lineItems},coupons:n,giftCertificates:i,outstandingBalance:r}}}class dy{constructor(e){this._namespace=e}getItem(e){const t=Te.getItem(this.withNamespace(e));if(null===t)return null;try{return JSON.parse(t)}catch(t){return this.removeItem(this.withNamespace(e)),null}}getItemOnce(e){const t=this.getItem(e);return this.removeItem(e),t}setItem(e,t){return Te.setItem(this.withNamespace(e),JSON.stringify(t))}removeItem(e){return Te.removeItem(this.withNamespace(e))}withNamespace(e){return`${this._namespace}.${e}`}}class cy extends ot{constructor(){super(\"Please complete our human verification challenge and try again.\"),this.name=\"CardingProtectionChallengeNotCompletedError\",this.type=\"carding_protection_challenge_not_completed\"}}class ly extends ot{constructor(){super(\"We were not able to verify that you are not a robot. Please try again.\"),this.name=\"CardingProtectionFailedError\",this.type=\"carding_protection_failed\"}}var uy,hy,py=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class my{constructor(e){this._googleRecaptcha=e}handle(e,t){return py(this,void 0,void 0,function*(){return\"string\"==typeof e?this.handleWithRecaptchaSitekey(e,t):this.handleWithPaymentHumanVerificationRequestError(e)})}handleWithPaymentHumanVerificationRequestError(e){return py(this,void 0,void 0,function*(){if(!this._isPaymentHumanVerificationRequest(e))throw e;return yield this._initialize(e.body.additional_action_required.data.key),this._performRecaptcha()})}handleWithRecaptchaSitekey(e,t){return py(this,void 0,void 0,function*(){if(\"recaptcha_v2\"!==e)throw Error(\"Human verification method is not supported.\");if(!t)throw Error(\"Recaptcha site key is missing.\");return yield this._initialize(t),this._performRecaptcha()})}_performRecaptcha(){return this._googleRecaptcha.execute().pipe(z(1)).pipe(M(({error:e,token:t})=>py(this,void 0,void 0,function*(){if(e instanceof cn)throw new cy;if(e||!t)throw new ly;return{type:\"recaptcha_v2_verification\",data:{human_verification_token:t}}}))).toPromise()}_initialize(e){const t=\"cardingProtectionContainer\";let n=document.getElementById(t);return n&&n.parentNode&&n.parentNode.removeChild(n),n=document.createElement(\"div\"),n.setAttribute(\"id\",t),document.body.appendChild(n),this._googleRecaptcha.load(t,e)}_isPaymentHumanVerificationRequest(e){const{additional_action_required:t,status:n}=e.body||{};return\"additional_action_required\"===n&&t&&\"recaptcha_v2_verification\"===t.type}}function yy(e,t){const{body:n}=e,{errors:i=[]}=n;return new At(e,{message:gy(i)||t,errors:i})}function gy(e){if(Array.isArray(e))return e.reduce((e,t)=>t&&t.message?[...e,t.message]:e,[]).join(\" \")}class vy extends ot{constructor(e){super(e||\"Unable to proceed due to invalid configuration provided for the hosted payment form.\"),this.name=\"InvalidHostedFormConfigError\",this.type=\"invalid_hosted_form_config\"}}class fy extends ot{constructor(e){super(e||\"Unable to proceed due to an unknown error with the hosted payment form.\"),this.name=\"InvalidHostedFormError\",this.type=\"invalid_hosted_form\"}}class Sy extends ot{constructor(e){super([\"Unable to proceed due to invalid user input values\",...U(Ce(e),e=>oe(e,({message:e})=>e))].join(\". \")),this.errors=e,this.name=\"InvalidHostedFormValueError\",this.type=\"invalid_hosted_form_value\"}}!function(e){e.AttachRequested=\"HOSTED_FIELD:ATTACH_REQUESTED\",e.SubmitRequested=\"HOSTED_FIELD:SUBMITTED_REQUESTED\",e.ValidateRequested=\"HOSTED_FIELD:VALIDATE_REQUESTED\",e.StoredCardRequested=\"HOSTED_FIELD:STORED_CARD_REQUESTED\"}(uy||(uy={})),function(e){e.AttachSucceeded=\"HOSTED_INPUT:ATTACH_SUCCEEDED\",e.AttachFailed=\"HOSTED_INPUT:ATTACH_FAILED\",e.BinChanged=\"HOSTED_INPUT:BIN_CHANGED\",e.Blurred=\"HOSTED_INPUT:BLURRED\",e.Changed=\"HOSTED_INPUT:CHANGED\",e.CardTypeChanged=\"HOSTED_INPUT:CARD_TYPE_CHANGED\",e.Entered=\"HOSTED_INPUT:ENTERED\",e.Focused=\"HOSTED_INPUT:FOCUSED\",e.SubmitSucceeded=\"HOSTED_INPUT:SUBMIT_SUCCEEDED\",e.SubmitFailed=\"HOSTED_INPUT:SUBMIT_FAILED\",e.Validated=\"HOSTED_INPUT:VALIDATED\",e.StoredCardSucceeded=\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",e.StoredCardFailed=\"HOSTED_INPUT:STORED_CARD_FAILED\"}(hy||(hy={}));var _y=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class wy{constructor(e,t,n,i,r,o,a,s,d,c){this._type=e,this._containerId=t,this._placeholder=n,this._accessibilityLabel=i,this._styles=r,this._eventPoster=o,this._eventListener=a,this._detachmentObserver=s,this._checkoutId=d,this._cardInstrument=c,this._iframe=document.createElement(\"iframe\");const l=this._checkoutId?`/checkout/payment/hosted-field?version=1.916.1&checkoutId=${this._checkoutId}`:\"/checkout/payment/hosted-field?version=1.916.1\";this._iframe.src=l,this._iframe.style.border=\"none\",this._iframe.style.height=\"100%\",this._iframe.style.overflow=\"hidden\",this._iframe.style.width=\"100%\"}getType(){return this._type}attach(){return _y(this,void 0,void 0,function*(){const e=document.getElementById(this._containerId);if(!e)throw new vy(\"Unable to proceed because the provided container ID is not valid.\");e.appendChild(this._iframe),this._eventListener.listen();const t=_(this._iframe,\"load\").pipe(M(({target:e})=>_y(this,void 0,void 0,function*(){const t=e&&e.contentWindow;if(!t)throw new Error(\"The content window of the iframe cannot be accessed.\");this._eventPoster.setTarget(t),yield this._eventPoster.post({type:uy.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,cardInstrument:this._cardInstrument,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:hy.AttachSucceeded,errorType:hy.AttachFailed})})),z(1)).toPromise();yield this._detachmentObserver.ensurePresence([this._iframe],t)})}detach(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())}submitForm(e,t){return _y(this,void 0,void 0,function*(){try{const n=this._eventPoster.post({type:uy.SubmitRequested,payload:{fields:e,data:t}},{successType:hy.SubmitSucceeded,errorType:hy.SubmitFailed});return yield this._detachmentObserver.ensurePresence([this._iframe],n)}catch(e){if(this._isSubmitErrorEvent(e)){if(\"hosted_form_error\"===e.payload.error.code)throw new fy(e.payload.error.message);if(e.payload.response)throw yy(e.payload.response);throw new Error(e.payload.error.message)}throw e}})}submitStoredCardForm(e,t){return _y(this,void 0,void 0,function*(){const n=this._eventPoster.post({type:uy.StoredCardRequested,payload:{fields:e,data:t}},{successType:hy.StoredCardSucceeded,errorType:hy.StoredCardFailed});return this._detachmentObserver.ensurePresence([this._iframe],n)})}validateForm(){return _y(this,void 0,void 0,function*(){const e=this._eventPoster.post({type:uy.ValidateRequested},{successType:hy.Validated}),{payload:t}=yield this._detachmentObserver.ensurePresence([this._iframe],e);if(!t.isValid)throw new Sy(t.errors)})}_getFontUrls(){const e=\"fonts.googleapis.com\",t=document.querySelectorAll(`link[href*='${e}'][rel='stylesheet']`);return Array.prototype.slice.call(t).filter(t=>bn(t.href).hostname===e).filter(e=>Ce(this._styles).map(e=>e&&e.fontFamily).filter(e=>\"string\"==typeof e).some(t=>t.split(/,\\s/).some(t=>-1!==e.href.indexOf(t.replace(\" \",\"+\"))))).map(e=>e.href)}_isSubmitErrorEvent(e){return e.type===hy.SubmitFailed}}var Iy,Cy=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class by{constructor(e,t,n,i,r){this._fields=e,this._eventListener=t,this._payloadTransformer=n,this._eventCallbacks=i,this._paymentHumanVerificationHandler=r,this._handleEnter=({payload:e})=>Cy(this,void 0,void 0,function*(){try{yield this.validate()}catch(e){if(e instanceof Error&&\"InvalidHostedFormValueError\"!==e.name)throw e}const{onEnter:t=ce}=this._eventCallbacks;t(e)});const{onBlur:o=ce,onCardTypeChange:a=ce,onFocus:s=ce,onValidate:d=ce}=this._eventCallbacks;this._eventListener.addListener(hy.Blurred,({payload:e})=>o(e)),this._eventListener.addListener(hy.CardTypeChanged,({payload:e})=>a(e)),this._eventListener.addListener(hy.Focused,({payload:e})=>s(e)),this._eventListener.addListener(hy.Validated,({payload:e})=>d(e)),this._eventListener.addListener(hy.Entered,this._handleEnter),this._eventListener.addListener(hy.CardTypeChanged,({payload:e})=>this._cardType=e.cardType),this._eventListener.addListener(hy.BinChanged,({payload:e})=>this._bin=e.bin)}getBin(){return this._bin}getCardType(){return this._cardType}attach(){return Cy(this,void 0,void 0,function*(){this._eventListener.listen();const e=this._getFirstField(),t=be(this._fields,e);yield e.attach(),yield Promise.all(t.map(e=>e.attach()))})}detach(){this._eventListener.stopListen(),this._fields.forEach(e=>{e.detach()})}submit(e,t){return Cy(this,void 0,void 0,function*(){try{return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),this._payloadTransformer.transform(e,t))}catch(t){const n=yield this._paymentHumanVerificationHandler.handle(t);return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),this._payloadTransformer.transform(e,n))}})}submitStoredCard(e){return Cy(this,void 0,void 0,function*(){return this._getFirstField().submitStoredCardForm(e.fields,e.data)})}validate(){return Cy(this,void 0,void 0,function*(){return this._getFirstField().validateForm()})}_getFirstField(){const e=this._fields[0];if(!e)throw new vy(\"Unable to proceed because the payment form has no field defined.\");return e}}function Py(e){return Boolean(e.instrumentId)}class Oy{constructor(e){this._store=e}transform(e,t){const n=this._store.getState(),i=n.checkout.getCheckout(),r=n.config.getConfig(),o=n.instruments.getInstrumentsMeta(),a=n.order.getOrder(),s=n.order.getOrderMeta(),d=le(e.paymentData,\"ccExpiry\",\"ccName\",\"ccNumber\",\"ccCvv\");let c=n.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId);\"worldpayaccess\"===(null==c?void 0:c.gateway)&&\"credit_card\"===(null==c?void 0:c.id)&&(c=Object.assign(Object.assign({},c),{id:\"worldpayaccess\",method:\"credit-card\"}));const l=n.paymentMethods.getPaymentMethodsMeta(),u=o&&d&&Py(d)?`${n.payment.getPaymentToken()}, ${o.vaultAccessToken}`:n.payment.getPaymentToken();if(!u)throw new at(nt.MissingPaymentToken);return{additionalAction:t,authToken:u,checkout:i,config:r,order:a,orderMeta:s,payment:d,paymentMethod:c,paymentMethodMeta:l}}}class Ey{constructor(e){this._store=e}create(e,t,n){const i=Object.keys(t.fields).reduce((i,r)=>{const o=t.fields[r];return o?[...i,new wy(r,o.containerId,o.placeholder||\"\",o.accessibilityLabel||\"\",t.styles||{},new En(e),new Jn(e),new Mn(new gn),n,\"instrumentId\"in o?this._getCardInstrument(o.instrumentId):void 0)]:i},[]);return new by(i,new Jn(e),new Oy(this._store),pe(t,\"onBlur\",\"onEnter\",\"onFocus\",\"onCardTypeChange\",\"onValidate\"),new my(wn(o())))}_getCardInstrument(e){const{instruments:{getCardInstrument:t}}=this._store.getState(),n=t(e);if(!n)throw new at(nt.MissingPaymentInstrument);return n}}!function(e){e.SubmitPaymentRequested=\"SUBMIT_PAYMENT_REQUESTED\",e.SubmitPaymentSucceeded=\"SUBMIT_PAYMENT_SUCCEEDED\",e.SubmitPaymentFailed=\"SUBMIT_PAYMENT_FAILED\",e.InitializeOffsitePaymentRequested=\"INITIALIZE_OFFSITE_PAYMENT_REQUESTED\",e.InitializeOffsitePaymentSucceeded=\"INITIALIZE_OFFSITE_PAYMENT_SUCCEEDED\",e.InitializeOffsitePaymentFailed=\"INITIALIZE_OFFSITE_PAYMENT_FAILED\"}(Iy||(Iy={}));class Ay{constructor(e,t,n,i){this._paymentRequestSender=e,this._orderActionCreator=t,this._paymentRequestTransformer=n,this._paymentHumanVerificationHandler=i,this.initializeOffsitePayment=({methodId:e,gatewayId:t,instrumentId:n,target:i,promise:r,shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a})=>s=>{let d;n?d={formattedPayload:{bigpay_token:n}}:o&&(d={formattedPayload:{vault_payment_instrument:o,set_as_default_stored_instrument:a||null}});const c=this._paymentRequestTransformer.transform({gatewayId:t,methodId:e,paymentData:d},s.getState());return g(C(l(Iy.InitializeOffsitePaymentRequested)),Promise.race([this._paymentRequestSender.initializeOffsitePayment(c,i),r].filter(Boolean)).then(()=>l(Iy.InitializeOffsitePaymentSucceeded))).pipe(P(e=>Qe(Iy.InitializeOffsitePaymentFailed,e)))}}submitPayment(e){return t=>g(C(l(Iy.SubmitPaymentRequested)),v(()=>{return n=this,i=void 0,o=function*(){try{return yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(e,t.getState()))}catch(n){const i=yield this._paymentHumanVerificationHandler.handle(n);return yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transform(Object.assign(Object.assign({},e),{additionalAction:i}),t.getState()))}},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}).pipe(M(({body:e})=>g(this._orderActionCreator.loadCurrentOrder()(t),C(l(Iy.SubmitPaymentSucceeded,e)))))).pipe(P(e=>Qe(Iy.SubmitPaymentFailed,e)))}}class Ty{constructor(e){this._client=e}submitPayment(e){return new Promise((t,n)=>{this._client.submitPayment(e,(e,i)=>{e?n(this._transformResponse(e)):t(this._transformResponse(i))})})}initializeOffsitePayment(e,t){return new Promise(()=>{this._client.initializeOffsitePayment(e,null,t)})}_transformResponse(e){return{headers:e.headers,body:e.data,status:e.status,statusText:e.statusText}}}function ky(e,t){let n;return function(e){return void 0!==e.id}(e)?n=e.id:t&&t.length&&(n=t[0].id),{id:n,firstName:e.firstName,lastName:e.lastName,company:e.company,addressLine1:e.address1,addressLine2:e.address2,city:e.city,province:e.stateOrProvince,provinceCode:e.stateOrProvinceCode,postCode:e.postalCode,country:e.country,countryCode:e.countryCode,phone:e.phone,customFields:e.customFields}}const Dy=[\"per_item_discount\",\"percentage_discount\",\"per_total_discount\",\"shipping_discount\",\"free_shipping\"];function My(e){return{code:e.code,discount:e.displayName,discountType:Dy.indexOf(e.couponType)}}function zy(e){return{code:e.code,discountedAmount:e.used,remainingBalance:e.remaining,giftCertificate:{balance:e.balance,code:e.code,purchaseDate:e.purchaseDate}}}function Ny(e){const t=[];return(e||[]).forEach(e=>{(e.banners||[]).forEach(e=>{t.push({placeholders:[],discountType:null,message:\"\",messageHtml:e.text})})}),t}function xy(e,t,n=\"id\"){return Object.keys(e).reduce((i,r)=>[...i,...e[r].map(e=>\"giftCertificates\"===r?function(e,t){const n=new _d(t);return{id:e.id,imageUrl:\"\",name:e.name,amount:e.amount,amountAfterDiscount:e.amount,discount:0,integerAmount:n.toInteger(e.amount),integerAmountAfterDiscount:n.toInteger(e.amount),integerUnitPrice:n.toInteger(e.amount),integerUnitPriceAfterDiscount:n.toInteger(e.amount),integerDiscount:0,quantity:1,sender:e.sender,recipient:e.recipient,type:\"ItemGiftCertificateEntity\",attributes:[],variantId:null}}(e,t):function(e,t,n,i=\"id\"){const r=new _d(n);return{id:e[i],imageUrl:e.imageUrl,amount:e.extendedListPrice,amountAfterDiscount:e.extendedSalePrice,discount:e.discountAmount,integerAmount:r.toInteger(e.extendedListPrice),integerAmountAfterDiscount:r.toInteger(e.extendedSalePrice),integerDiscount:r.toInteger(e.discountAmount),integerUnitPrice:r.toInteger(e.listPrice),integerUnitPriceAfterDiscount:r.toInteger(e.salePrice),downloadsPageUrl:e.downloadPageUrl,name:e.name,quantity:e.quantity,brand:e.brand,sku:e.sku,categoryNames:e.categoryNames,variantId:e.variantId,productId:e.productId,attributes:(e.options||[]).map(e=>({name:e.name,value:e.value})),addedByPromotion:e.addedByPromotion,type:t}}(e,function(e){switch(e){case\"physicalItems\":return\"ItemPhysicalEntity\";case\"digitalItems\":return\"ItemDigitalEntity\";case\"giftCertificates\":return\"ItemGiftCertificateEntity\";default:return\"\"}}(r),t,n))],[])}function Ry(e){const t=e.cart.currency.decimalPlaces,n=new _d(t);return{id:e.cart.id,items:xy(e.cart.lineItems,t),currency:e.cart.currency.code,coupon:{discountedAmount:ye(e.cart.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.cart.coupons.map(My)},discount:{amount:e.cart.discountAmount,integerAmount:n.toInteger(e.cart.discountAmount)},discountNotifications:Ny(e.promotions),giftCertificate:{totalDiscountedAmount:ye(e.giftCertificates,(e,t)=>e+t.used,0),appliedGiftCertificates:ne(e.giftCertificates.map(zy),\"code\")},shipping:{amount:e.shippingCostTotal,integerAmount:n.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:n.toInteger(e.shippingCostBeforeDiscount),required:ve(e.cart.lineItems.physicalItems,e=>e.isShippingRequired)},subtotal:{amount:e.subtotal,integerAmount:n.toInteger(e.subtotal)},storeCredit:{amount:e.customer?e.customer.storeCredit:0},taxSubtotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:n.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.grandTotal,integerAmount:n.toInteger(e.grandTotal)}}}var Fy;!function(e){e.APPLEPAY=\"applepay\",e.AMAZON_PAY_V2=\"amazonpay\",e.BRAINTREE_PAYPAL=\"braintreepaypal\",e.BRAINTREE_VENMO=\"braintreevenmo\",e.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",e.GOOGLEPAY_ADYENV2=\"googlepayadyenv2\",e.GOOGLEPAY_ADYENV3=\"googlepayadyenv3\",e.GOOGLEPAY_AUTHORIZENET=\"googlepayauthorizenet\",e.GOOGLEPAY_BNZ=\"googlepaybnz\",e.GOOGLEPAY_BRAINTREE=\"googlepaybraintree\",e.GOOGLEPAY_CHECKOUTCOM=\"googlepaycheckoutcom\",e.GOOGLEPAY_CYBERSOURCEV2=\"googlepaycybersourcev2\",e.GOOGLEPAY_ORBITAL=\"googlepayorbital\",e.GOOGLEPAY_STRIPE=\"googlepaystripe\",e.GOOGLEPAY_STRIPEUPE=\"googlepaystripeupe\",e.GOOGLEPAY_WORLDPAYACCESS=\"googlepayworldpayaccess\",e.PAYPALEXPRESS=\"paypalexpress\"}(Fy||(Fy={}));const Ly=Fy;function By(e,t){const n=e.firstName||t.firstName||\"\",i=e.lastName||t.lastName||\"\";return{addresses:(e.addresses||[]).map(e=>ky(e)),customerId:e.id,isGuest:e.isGuest,storeCredit:e.storeCredit,email:e.email||t.email||\"\",firstName:n,lastName:i,name:e.fullName||[n,i].join(\" \"),customerGroupName:e.customerGroup&&e.customerGroup.name}}class jy{format(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\")),i=t.slice(0,2),r=4===n.length?n.slice(-2):n?n.slice(0,2):t.slice(2);return e.length<2?t:e.length>3&&!r?i:`${i} / ${r}`}toObject(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\"));return/^\\d+$/.test(t)&&/^\\d+$/.test(n)?{month:1===t.length?`0${t}`:t.slice(0,2),year:2===n.length?`20${n}`:n.slice(0,4)}:{month:\"\",year:\"\"}}}class Uy{format(e){const{card:t}=Me(e);if(!t)return e;const n=ae(De(e).map(e=>ae(e.lengths))),i=this.unformat(e).slice(0,n);return t.gaps.filter(e=>i.length>e).reduce((e,t,n)=>[e.slice(0,t+n),e.slice(t+n)].join(\" \"),i)}unformat(e){const{card:t}=Me(e);return t?e.replace(new RegExp(\" \",\"g\"),\"\"):e}}function qy(e,t={}){const n=e.currency.decimalPlaces,i=new _d(n);return{id:e.orderId,items:xy(e.lineItems,e.currency.decimalPlaces,\"productId\"),orderId:e.orderId,currency:e.currency.code,customerCanBeCreated:e.customerCanBeCreated,payment:Hy(e.payments,t.payment),subtotal:{amount:e.baseAmount,integerAmount:i.toInteger(e.baseAmount)},coupon:{discountedAmount:ye(e.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.coupons.map(My)},discount:{amount:e.discountAmount,integerAmount:i.toInteger(e.discountAmount)},token:t.orderToken,callbackUrl:t.callbackUrl,discountNotifications:[],giftCertificate:Gy(e.payments),socialData:$y(e),status:e.status,hasDigitalItems:e.hasDigitalItems,isDownloadable:e.isDownloadable,isComplete:e.isComplete,shipping:{amount:e.shippingCostTotal,integerAmount:i.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:i.toInteger(e.shippingCostBeforeDiscount)},storeCredit:{amount:Vy(e.payments)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:i.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:i.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.orderAmount,integerAmount:e.orderAmountAsInteger}}}function Vy(e){const t=B(e,{providerId:\"storecredit\"});return t?t.amount:0}function Gy(e){const t=L(e,{providerId:\"giftcertificate\"});return{totalDiscountedAmount:ye(t,(e,t)=>t.amount+e,0),appliedGiftCertificates:ne(t.map(e=>({code:e.detail.code,discountedAmount:e.amount,remainingBalance:e.detail.remaining,giftCertificate:{balance:e.amount+e.detail.remaining,code:e.detail.code,purchaseDate:\"\"}})),\"code\")}}function Hy(e,t={}){const n=B(e,Wy);return n?{id:n.providerId,status:(i=n.detail.step,`PAYMENT_STATUS_${i}`),helpText:n.detail.instructions,returnUrl:t.returnUrl}:{};var i}function Wy(e){return\"giftcertificate\"!==e.providerId&&\"storecredit\"!==e.providerId}function $y(e){const t={};return[...e.lineItems.physicalItems,...e.lineItems.digitalItems].forEach(e=>{var n;t[e.id]=(n=e,[\"fb\",\"tw\",\"gp\"].reduce((e,t)=>{const i=n.socialMedia&&B(n.socialMedia,e=>e.code===t);return i?(e[t]={name:n.name,description:n.name,image:n.imageUrl,url:i.link,shareText:i.text,sharingLink:i.link,channelName:i.channel,channelCode:i.code},e):e},{}))}),t}function Yy(e,t){return{description:e.description,module:e.type,price:e.cost,id:e.id,selected:t,isRecommended:e.isRecommended,imageUrl:e.imageUrl,transitTime:e.transitTime}}class Ky{constructor(){this._cardExpiryFormatter=new jy,this._cardNumberFormatter=new Uy}transform(e,t){const n=t.billingAddress.getBillingAddress(),i=t.checkout.getCheckout(),r=t.customer.getCustomer(),o=t.order.getOrder(),a=t.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId),s=this._mapShippingAddress(t,a),d=t.consignments.getConsignments(),c=t.consignments.getShippingOption(),l=t.config.getStoreConfig(),u=t.config.getContextConfig(),h=t.instruments.getInstrumentsMeta(),p=t.paymentMethods.getPaymentMethodsMeta(),m=t.order.getOrderMeta(),y=r&&n&&By(r,n),g=h&&e.paymentData&&(Py(e.paymentData)||function(e){const t=e.formattedPayload;return!!t&&(\"string\"==typeof t.bigpay_token||Boolean(t.bigpay_token&&t.bigpay_token.token))}(e.paymentData))?`${t.payment.getPaymentToken()}, ${h.vaultAccessToken}`:t.payment.getPaymentToken();if(!g)throw new at(nt.MissingPaymentToken);return{additionalAction:e.additionalAction,authToken:g,customer:y,billingAddress:n&&ky(n),shippingAddress:s&&ky(s,d),shippingOption:c&&Yy(c,!0),cart:i&&Ry(i),order:o&&qy(o,m),orderMeta:m,payment:e.paymentData,paymentMethod:a&&this._transformPaymentMethod(a),quoteMeta:{request:Object.assign(Object.assign({},p),{geoCountryCode:u&&u.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:pe(l&&l.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}transformWithHostedFormData(e,t,n){const{additionalAction:i,authToken:r,checkout:o,config:a,order:s,orderMeta:d,payment:c={},paymentMethod:l,paymentMethodMeta:u}=t,h=o&&o.consignments[0],p=h&&h.shippingAddress,m=h&&h.selectedShippingOption;return{additionalAction:i,authToken:r,paymentMethod:l&&this._transformPaymentMethod(l),customer:s&&s.billingAddress&&o&&By(o.customer,s.billingAddress),billingAddress:s&&s.billingAddress&&ky(s.billingAddress),shippingAddress:p&&o&&ky(p,o.consignments),shippingOption:m&&Yy(m,!0),cart:o&&Ry(o),order:s&&qy(s,d),orderMeta:d,payment:this._transformHostedInputValues(e,c,n),quoteMeta:{request:Object.assign(Object.assign({},u),{geoCountryCode:a&&a.context.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:a&&pe(a.storeConfig.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}_transformPaymentMethod(e){if(\"multi-option\"===e.method&&!e.gateway)return Object.assign(Object.assign({},e),{gateway:e.id});if(e.initializationData&&e.initializationData.gateway)return Object.assign(Object.assign({},e),{id:e.initializationData.gateway});if(\"worldpayaccess\"===e.gateway){if(\"credit_card\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"credit-card\"});if(\"open_banking\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"open_banking\"})}return e.id===Ly.BRAINTREE_VENMO?Object.assign(Object.assign({},e),{id:Ly.BRAINTREE_PAYPAL}):e}_transformHostedInputValues(e,t,n){return\"instrumentId\"in t?Object.assign(Object.assign({},t),{ccCvv:e.cardCodeVerification,ccNumber:e.cardNumberVerification&&this._cardNumberFormatter.unformat(e.cardNumberVerification),hostedFormNonce:n}):Object.assign(Object.assign({},t),{ccCvv:e.cardCode,ccExpiry:this._cardExpiryFormatter.toObject(e.cardExpiry||\"\"),ccName:e.cardName||\"\",ccNumber:this._cardNumberFormatter.unformat(e.cardNumber||\"\"),hostedFormNonce:n})}_mapShippingAddress(e,t){var n,i,r,o;if(t){const a=null===(i=null===(n=t.initializationData)||void 0===n?void 0:n.bopis)||void 0===i?void 0:i.enabled,s=null===(o=null===(r=t.initializationData)||void 0===r?void 0:r.bopis)||void 0===o?void 0:o.requiredAddress,d=e.consignments.getConsignments(),c=null==d?void 0:d.every(e=>e.selectedPickupOption);if(a&&c&&\"none\"===s)return}return e.shippingAddress.getShippingAddress()}}const Jy=e=>{const{type:t,initializationStrategy:n}=e;return t===ny.PPSDK&&\"string\"==typeof(null==n?void 0:n.type)};class Zy extends Ht{getByMethod(e){if(!e)return this.get();const t=this._getToken(e),n=[e.gateway,e.id].filter(e=>null!=e).join(\"-\");return this.get(t,n)}_getToken(e){if(Jy(e))return ny.PPSDK;if(\"klarna\"===e.gateway)return ny.KLARNAV2;const t=e.gateway||e.id;if(this._hasFactoryForMethod(t))return t;if(\"PAYMENT_TYPE_OFFLINE\"===e.type)return ny.OFFLINE;throw new Gt(`'${t}' is not registered.`)}_hasFactoryForMethod(e){return this._hasFactory(e)}}const Qy=\"FINALIZE\";class Xy extends Gt{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}var eg=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n};class tg{constructor(e,t,n,i){this._store=e,this._orderActionCreator=t,this._paymentActionCreator=n,this._hostedFormFactory=i}execute(e,t){var n,i;return this._isHostedPaymentFormEnabled(null===(n=e.payment)||void 0===n?void 0:n.methodId,null===(i=e.payment)||void 0===i?void 0:i.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}finalize(e){return Promise.reject(new ty)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve(this._store.getState());const t=e&&e.creditCard&&e.creditCard.form,{config:n}=this._store.getState(),{paymentSettings:{bigpayBaseUrl:i=\"\"}={}}=n.getStoreConfig()||{};if(!t)throw new Gt;const r=this._hostedFormFactory.create(i,t);return r.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=r,this._store.getState()))}deinitialize(e){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve(this._store.getState())}_executeWithoutHostedForm(e,t){const{payment:n}=e,i=eg(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new Xy([\"payment.paymentData\"]);return this._store.dispatch(this._orderActionCreator.submitOrder(i,t)).then(()=>this._store.dispatch(this._paymentActionCreator.submitPayment(Object.assign(Object.assign({},n),{paymentData:r}))))}_executeWithHostedForm(e,t){const{payment:n}=e,i=eg(e,[\"payment\"]),r=this._hostedForm;if(!r)throw new vn(un.PaymentNotInitialized);if(!n||!n.methodId)throw new Xy([\"payment.methodId\"]);return r.validate().then(()=>this._store.dispatch(this._orderActionCreator.submitOrder(i,t))).then(()=>r.submit(n)).then(()=>this._store.dispatch(this._orderActionCreator.loadCurrentOrder()))}_isHostedPaymentFormEnabled(e,t){if(!e)return!1;const{paymentMethods:{getPaymentMethodOrThrow:n}}=this._store.getState();return!0===n(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(e){return!Ce(e&&e.creditCard&&e.creditCard.form.fields).every(J)}}class ng extends tg{constructor(e,t,n,i,r){super(e,t,n,i),this._formPoster=r}execute(e,t){return super.execute(e,t).catch(e=>e instanceof At&&ve(e.body.errors,{code:\"three_d_secure_required\"})?new Promise(()=>{this._formPoster.postForm(e.body.three_ds_result.acs_url,{PaReq:e.body.three_ds_result.payer_auth_request,TermUrl:e.body.three_ds_result.callback_url,MD:e.body.three_ds_result.merchant_data})}):Promise.reject(e))}finalize(e){const t=this._store.getState(),n=t.order.getOrder();return n&&t.payment.getPaymentStatus()===Qy?this._store.dispatch(this._orderActionCreator.finalizeOrder(n.orderId,e)):Promise.reject(new ty)}}class ig extends ot{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}const rg=\"redirecting\";class og{constructor(){this._isRedirecting=this.currentUrlHasRedirectingParam()}isRedirecting(){return this._isRedirecting}setRedirecting(e){e?this.setRedirectingParamOnUrl():this.removeRedirectingParamFromUrl(),this._isRedirecting=e}currentUrlHasRedirectingParam(){return rg in this.getCurrentUrl().query}getCurrentUrl(){return Ne(window.location.href)}replaceCurrentUrl(e){window.history.replaceState(null,\"\",e)}setRedirectingParamOnUrl(){if(this.currentUrlHasRedirectingParam())return;const e=this.getCurrentUrl(),t=Object.assign(Object.assign({},e),{query:Object.assign(Object.assign({},e.query),{[rg]:\"true\"})});this.replaceCurrentUrl(xe(t))}removeRedirectingParamFromUrl(){this.currentUrlHasRedirectingParam()&&this.replaceCurrentUrl(ze(window.location.href,[rg]))}}const ag=he([e=>\"continue\"===V(e,\"type\")&&\"redirect\"===V(e,\"code\")&&(e=>{const t=V(e,\"form_fields\");return X(V(e,\"url\"))&&(ee(t)||Z(t))})(V(e,\"parameters\")),e=>\"continue\"===V(e,\"type\")&&\"resubmit_with_human_verification\"===V(e,\"code\")&&(e=>{const t=V(e,\"available_methods\");return W(t)})(V(e,\"parameters\"))]);class sg{constructor(e,t){this._formPoster=e,this._humanVerificationHandler=t}handle(e,t){switch(e.code){case\"redirect\":return(({url:e,form_fields:t},n)=>{const i=new og;return i.isRedirecting()?(i.setRedirecting(!1),Promise.reject(new ig)):(i.setRedirecting(!0),t?n.postForm(e,t):window.location.assign(e),new Promise(ce))})(e.parameters,this._formPoster);case\"resubmit_with_human_verification\":return(({available_methods:e},t,n)=>{return i=void 0,r=void 0,a=function*(){if(!n)throw new Error(\"PPSDK human verification callback function is missing.\");if(!t)throw new Error(\"PPSDK human verification handler is missing.\");if(0===e.length)throw Error(\"Human verification method is missing.\");const{id:i,parameters:r}=e[0],o=yield t.handle(i,r.key);return n(o)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}d((a=a.apply(i,r||[])).next())});var i,r,o,a})(e.parameters,this._humanVerificationHandler,null==t?void 0:t.humanVerification)}}}class dg{constructor(e){this._continueHandler=e}handle(e,t){const{body:n}=e;return(e=>\"success\"===V(e,\"type\"))(n)?Promise.resolve():(e=>ag(e))(n)?this._continueHandler.handle(n,null==t?void 0:t.continue):(e=>\"failure\"===V(e.body,\"type\")&&X(V(e.body,\"code\")))(e)?(e=>{return Promise.reject(new At((t=e,Object.assign(Object.assign({},t),{body:{errors:[{code:t.body.code}]}}))));var t})(e):((e=>{V(e.body,\"type\")})(e),(e=>Promise.reject(new At(e)))(e))}}const cg=\"completed-payments\";class lg{constructor(e){this._browserStorage=e}isCompleted(e){return this.getCompletedPayments().indexOf(e)>=0}setCompleted(e){const t=this.getCompletedPayments();t.push(e),this.setCompletedPayments(t)}getCompletedPayments(){return this._browserStorage.getItem(cg)||[]}setCompletedPayments(e){this._browserStorage.setItem(cg,e)}}var ug,hg=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class pg{constructor(e,t,n,i,r){this._store=e,this._orderActionCreator=t,this._subStrategyRegistry=n,this._paymentResumer=i,this._completedPayments=new lg(r)}execute(e,t){var n;return hg(this,void 0,void 0,function*(){const{bigpayBaseUrl:i}=this._store.getState().config.getStoreConfigOrThrow().paymentSettings;if(!(null==t?void 0:t.methodId))throw new Gt('Unable to submit payment because \"options.methodId\" argument is not provided.');const{methodId:r}=t,{payment:o}=e,a=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{_subStrategy:s}=this;if(!s)throw new vn(un.PaymentNotInitialized);yield this._store.dispatch(this._orderActionCreator.submitOrder(a,t));const d=null===(n=this._store.getState().order.getOrderMeta())||void 0===n?void 0:n.token;if(!d)throw new at(nt.MissingOrder);return yield s.execute({methodId:r,payment:o,bigpayBaseUrl:i,token:d}),this._store.getState()})}finalize(e){return hg(this,void 0,void 0,function*(){const t=this._store.getState().order.getOrderOrThrow();if(t.isComplete)return this._store.getState();const{bigpayBaseUrl:n}=this._store.getState().config.getStoreConfigOrThrow().paymentSettings;if(!(null==e?void 0:e.methodId))throw new Gt('Unable to submit payment because \"options.methodId\" argument is not provided.');const i=this._store.getState().order.getPaymentId(e.methodId);if(!i||!t||this._completedPayments.isCompleted(i))throw new ty;const{orderId:r}=t;return yield this._paymentResumer.resume({paymentId:i,bigpayBaseUrl:n,orderId:r}).catch(e=>{throw this._completedPayments.setCompleted(i),e}),this._store.getState()})}initialize(e){return hg(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new Gt('Unable to submit payment because \"options.methodId\" argument is not provided.');const t=((e,t)=>{const n=e.getState().paymentMethods.getPaymentMethod(t);if(n&&Jy(n))return n})(this._store,e.methodId);if(!t)throw new vn(un.PaymentNotInitialized);if(this._subStrategy=this._subStrategyRegistry.getByMethod(t),!this._subStrategy)throw new vn(un.PaymentNotInitialized);return yield this._subStrategy.initialize(e),this._store.getState()})}deinitialize(e){var t;return hg(this,void 0,void 0,function*(){return null===(t=this._subStrategy)||void 0===t||t.deinitialize(),this._store.getState()})}}!function(e){e.CARD=\"card_ui\",e.NONE=\"none\",e.UNSUPPORTED=\"unsupported\"}(ug||(ug={}));const mg=N([[e=>\"card_ui\"===e.type,x(ug.CARD)],[e=>\"none\"===e.type,x(ug.NONE)],[fe,x(ug.UNSUPPORTED)]]);class yg extends Ht{getByMethod(e){const t=mg(e.initializationStrategy);return this.get(t)}}var gg=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class vg{constructor(e,t,n,i){this._store=e,this._orderActionCreator=t,this._hostedFormFactory=n,this._ppsdkStepHandler=i}execute(e){return gg(this,void 0,void 0,function*(){const t=this._hostedForm;if(!t)throw new vn(un.PaymentNotInitialized);const{additionalAction:n,payment:i}=e;if(!i||!i.methodId)throw new Xy([\"payment.methodId\"]);yield t.validate();const{payload:r}=yield t.submit(i,n),{response:o}=r;yield this._ppsdkStepHandler.handle(o,{continue:{humanVerification:t=>gg(this,void 0,void 0,function*(){return this.execute(Object.assign({additionalAction:t},e))})}}),yield this._store.dispatch(this._orderActionCreator.loadCurrentOrder())})}initialize(e){return gg(this,void 0,void 0,function*(){const t=e&&e.creditCard&&e.creditCard.form,{config:n,checkout:i}=this._store.getState(),{paymentSettings:{bigpayBaseUrl:r=\"\"}={}}=n.getStoreConfig()||{},o=i.getCheckoutOrThrow().id;if(!t)throw new Gt;const a=t&&this._hostedFormFactory.create(r,t,o);yield a.attach(),this._hostedForm=a})}deinitialize(){this._hostedForm&&this._hostedForm.detach()}}class fg{constructor(e,t){this._requestSender=e,this._stepHandler=t}execute({methodId:e,bigpayBaseUrl:t,token:n}){const i={credentials:!1,body:{payment_method_id:e},headers:{authorization:n,\"X-XSRF-TOKEN\":null}};return this._requestSender.post(`${t}/payments`,i).then(e=>this._stepHandler.handle(e))}initialize(){return Promise.resolve()}deinitialize(){}}var Sg,_g,wg=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ig{constructor(e,t){this._requestSender=e,this._stepHandler=t}resume({paymentId:e,bigpayBaseUrl:t,orderId:n}){return wg(this,void 0,void 0,function*(){const i={credentials:!1,headers:{authorization:yield this._getToken(n).catch(()=>{throw new ty}),\"X-XSRF-TOKEN\":null}};return this._requestSender.get(`${t}/payments/${e}`,i).then(e=>this._stepHandler.handle(e))})}_getToken(e){return wg(this,void 0,void 0,function*(){const t={params:{order_id:e}};return this._requestSender.get(\"/api/storefront/payments/auth-token\",t).then(({body:e})=>e.auth_token)})}}class Cg{constructor(e){this._requestSender=e}createBuyNowCart(e,{timeout:t}={}){const n=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.post(\"/api/storefront/carts\",{body:e,headers:n,timeout:t})}}!function(e){e.UpdatePaymentProviderCustomer=\"UPDATE_PAYMENT_PROVIDER_CUSTOMER\"}(Sg||(Sg={}));class bg{updatePaymentProviderCustomer(e){return C(l(Sg.UpdatePaymentProviderCustomer,e))}}!function(e){e.ForgetCheckoutRemoteCustomerRequested=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_REQUESTED\",e.ForgetCheckoutRemoteCustomerSucceeded=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_SUCCEEDED\",e.ForgetCheckoutRemoteCustomerFailed=\"FORGET_CHECKOUT_REMOTE_CUSTOMER_FAILED\",e.InitializeRemoteBillingRequested=\"INITIALIZE_REMOTE_BILLING_REQUESTED\",e.InitializeRemoteBillingSucceeded=\"INITIALIZE_REMOTE_BILLING_SUCCEEDED\",e.InitializeRemoteBillingFailed=\"INITIALIZE_REMOTE_BILLING_FAILED\",e.InitializeRemoteShippingRequested=\"INITIALIZE_REMOTE_SHIPPING_REQUESTED\",e.InitializeRemoteShippingSucceeded=\"INITIALIZE_REMOTE_SHIPPING_SUCCEEDED\",e.InitializeRemoteShippingFailed=\"INITIALIZE_REMOTE_SHIPPING_FAILED\",e.InitializeRemotePaymentRequested=\"INITIALIZE_REMOTE_PAYMENT_REQUESTED\",e.InitializeRemotePaymentSucceeded=\"INITIALIZE_REMOTE_PAYMENT_SUCCEEDED\",e.InitializeRemotePaymentFailed=\"INITIALIZE_REMOTE_PAYMENT_FAILED\",e.LoadRemoteSettingsRequested=\"LOAD_REMOTE_SETTINGS_REQUESTED\",e.LoadRemoteSettingsSucceeded=\"LOAD_REMOTE_SETTINGS_SUCCEEDED\",e.LoadRemoteSettingsFailed=\"LOAD_REMOTE_SETTINGS_FAILED\",e.SignOutRemoteCustomerRequested=\"SIGN_OUT_REMOTE_CUSTOMER_REQUESTED\",e.SignOutRemoteCustomerSucceeded=\"SIGN_OUT_REMOTE_CUSTOMER_SUCCEEDED\",e.SignOutRemoteCustomerFailed=\"SIGN_OUT_REMOTE_CUSTOMER_FAILED\",e.UpdateRemoteCheckout=\"UPDATE_REMOTE_CHECKOUT\"}(_g||(_g={}));var Pg;class Og{constructor(e,t){this._remoteCheckoutRequestSender=e,this._checkoutActionCreator=t}initializeBilling(e,t,n){return m.create(i=>{i.next(l(_g.InitializeRemoteBillingRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializeBilling(e,t,n).then(({body:t={}})=>{i.next(l(_g.InitializeRemoteBillingSucceeded,t,{methodId:e})),i.complete()}).catch(t=>{i.error(h(_g.InitializeRemoteBillingFailed,t,{methodId:e}))})})}initializeShipping(e,t,n){return m.create(i=>{i.next(l(_g.InitializeRemoteShippingRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializeShipping(e,t,n).then(({body:t={}})=>{i.next(l(_g.InitializeRemoteShippingSucceeded,t,{methodId:e})),i.complete()}).catch(t=>{i.error(h(_g.InitializeRemoteShippingFailed,t,{methodId:e}))})})}initializePayment(e,t,n){return m.create(i=>{i.next(l(_g.InitializeRemotePaymentRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.initializePayment(e,t,n).then(({body:t={}})=>{i.next(l(_g.InitializeRemotePaymentSucceeded,t,{methodId:e})),i.complete()}).catch(t=>{i.error(h(_g.InitializeRemotePaymentFailed,t,{methodId:e}))})})}loadSettings(e,t){return m.create(n=>{n.next(l(_g.LoadRemoteSettingsRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.loadSettings(e,t).then(({body:t})=>{n.next(l(_g.LoadRemoteSettingsSucceeded,t,{methodId:e})),n.complete()}).catch(t=>{n.error(h(_g.LoadRemoteSettingsFailed,t,{methodId:e}))})})}signOut(e,t){return m.create(n=>{n.next(l(_g.SignOutRemoteCustomerRequested,void 0,{methodId:e})),this._remoteCheckoutRequestSender.signOut(e,t).then(()=>{n.next(l(_g.SignOutRemoteCustomerSucceeded,void 0,{methodId:e})),n.complete()}).catch(t=>{n.error(h(_g.SignOutRemoteCustomerFailed,t,{methodId:e}))})})}forgetCheckout(e,t){return g(C(l(_g.ForgetCheckoutRemoteCustomerRequested,void 0,{methodId:e})),v(()=>{return n=this,i=void 0,o=function*(){return yield this._remoteCheckoutRequestSender.forgetCheckout(t),yield this._checkoutActionCreator.loadCurrentCheckout(),l(_g.ForgetCheckoutRemoteCustomerSucceeded,void 0,{methodId:e})},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe(P(t=>Qe(_g.ForgetCheckoutRemoteCustomerFailed,t,{methodId:e})))}updateCheckout(e,t){return l(_g.UpdateRemoteCheckout,t,{methodId:e})}}class Eg{constructor(e){this._requestSender=e}initializeBilling(e,t,{timeout:n}={}){const i=`/remote-checkout/${e}/billing`;return this._requestSender.get(i,{params:t,timeout:n,headers:tt})}initializeShipping(e,t,{timeout:n}={}){const i=`/remote-checkout/${e}/shipping`;return this._requestSender.get(i,{params:t,timeout:n,headers:tt})}initializePayment(e,t,{timeout:n}={}){const i=`/remote-checkout/${e}/payment`;return this._requestSender.get(i,{params:t,timeout:n,headers:tt})}loadSettings(e,{timeout:t}={}){const n=`/remote-checkout/${e}/settings`;return this._requestSender.get(n,{timeout:t,headers:tt})}signOut(e,{timeout:t}={}){const n=`/remote-checkout/${e}/signout`;return this._requestSender.get(n,{timeout:t,headers:tt})}generateToken({timeout:e}={}){return this._requestSender.get(\"/remote-checkout-token\",{timeout:e,headers:tt})}trackAuthorizationEvent({timeout:e}={}){return this._requestSender.post(\"/remote-checkout/events/shopper-checkout-service-provider-authorization-requested\",{timeout:e,headers:tt})}forgetCheckout({timeout:e}={}){return this._requestSender.post(\"/remote-checkout/forget-checkout\",{timeout:e,headers:tt})}}!function(e){e.CreateConsignmentsRequested=\"CREATE_CONSIGNMENTS_REQUESTED\",e.CreateConsignmentsSucceeded=\"CREATE_CONSIGNMENTS_SUCCEEDED\",e.CreateConsignmentsFailed=\"CREATE_CONSIGNMENTS_FAILED\",e.UpdateConsignmentRequested=\"UPDATE_CONSIGNMENT_REQUESTED\",e.UpdateConsignmentSucceeded=\"UPDATE_CONSIGNMENT_SUCCEEDED\",e.UpdateConsignmentFailed=\"UPDATE_CONSIGNMENT_FAILED\",e.DeleteConsignmentRequested=\"DELETE_CONSIGNMENT_REQUESTED\",e.DeleteConsignmentSucceeded=\"DELETE_CONSIGNMENT_SUCCEEDED\",e.DeleteConsignmentFailed=\"DELETE_CONSIGNMENT_FAILED\",e.UpdateShippingOptionRequested=\"UPDATE_SHIPPING_OPTION_REQUESTED\",e.UpdateShippingOptionSucceeded=\"UPDATE_SHIPPING_OPTION_SUCCEEDED\",e.UpdateShippingOptionFailed=\"UPDATE_SHIPPING_OPTION_FAILED\",e.LoadShippingOptionsRequested=\"LOAD_SHIPPING_OPTIONS_REQUESTED\",e.LoadShippingOptionsSucceeded=\"LOAD_SHIPPING_OPTIONS_SUCCEEDED\",e.LoadShippingOptionsFailed=\"LOAD_SHIPPING_OPTIONS_FAILED\"}(Pg||(Pg={}));class Ag{constructor(e,t){this._consignmentRequestSender=e,this._checkoutRequestSender=t}unassignItemsByAddress(e,t){return n=>{const i=n.getState();if(!i.checkout.getCheckout())throw new at(nt.MissingCheckout);const r=this._consignmentHasAddress(e)?e.address:e.shippingAddress,o=i.consignments.getConsignmentByAddress(r);if(!o)throw new Gt(\"No consignment found for the specified address\");const a=this._removeLineItems(e.lineItems,o,i.cart.getCart());return a.length?this.updateConsignment({id:o.id,address:r,lineItems:a},t)(n):this.deleteConsignment(o.id,t)(n)}}assignItemsByAddress(e,t){return n=>{const i=n.getState(),r=this._consignmentHasAddress(e)?e.address:e.shippingAddress,o=i.consignments.getConsignmentByAddress(r);return this._createOrUpdateConsignment({id:o&&o.id,address:r,lineItems:this._addLineItems(e.lineItems,o,i.cart.getCart())},t)(n)}}selectShippingOption(e,t){return n=>m.create(i=>{const r=n.getState(),o=r.checkout.getCheckout(),a=r.consignments.getConsignments();if(!o)throw new at(nt.MissingCheckout);if(!a||!a.length)throw new at(nt.MissingConsignments);const s={id:a[0].id,shippingOptionId:e},d={id:a[0].id};i.next(l(Pg.UpdateShippingOptionRequested,void 0,d)),this._consignmentRequestSender.updateConsignment(o.id,s,t).then(({body:e})=>{i.next(l(Pg.UpdateShippingOptionSucceeded,e,d)),i.complete()}).catch(e=>{i.error(h(Pg.UpdateShippingOptionFailed,e,d))})})}loadShippingOptions(e){return t=>m.create(n=>{const i=t.getState().checkout.getCheckout();if(!i)throw new at(nt.MissingCheckout);n.next(l(Pg.LoadShippingOptionsRequested)),this._checkoutRequestSender.loadCheckout(i.id,Object.assign(Object.assign({},e),{params:{include:[xt.AvailableShippingOptions]}})).then(({body:e})=>{n.next(l(Pg.LoadShippingOptionsSucceeded,e)),n.complete()}).catch(e=>{n.error(h(Pg.LoadShippingOptionsFailed,e))})})}updateAddress(e,t){return n=>{const i=this._getUpdateAddressRequestBody(e,n),r=n.getState().consignments.getConsignments();return r&&r.length&&(i.id=r[0].id),this._createOrUpdateConsignment(i,t)(n)}}createConsignments(e,t){return n=>m.create(i=>{const r=n.getState().checkout.getCheckout();if(!r||!r.id)throw new at(nt.MissingCheckout);i.next(l(Pg.CreateConsignmentsRequested)),this._consignmentRequestSender.createConsignments(r.id,e,t).then(({body:e})=>{i.next(l(Pg.CreateConsignmentsSucceeded,e)),i.complete()}).catch(e=>{i.error(h(Pg.CreateConsignmentsFailed,e))})})}updateConsignment(e,t){return n=>m.create(i=>{const r=n.getState().checkout.getCheckout();if(!r||!r.id)throw new at(nt.MissingCheckout);const o={id:e.id};i.next(l(Pg.UpdateConsignmentRequested,void 0,o)),this._consignmentRequestSender.updateConsignment(r.id,e,t).then(({body:e})=>{i.next(l(Pg.UpdateConsignmentSucceeded,e,o)),i.complete()}).catch(e=>{i.error(h(Pg.UpdateConsignmentFailed,e,o))})})}deleteConsignment(e,t){return n=>m.create(i=>{const r=n.getState().checkout.getCheckout(),o={id:e};if(!r||!r.id)throw new at(nt.MissingCheckout);i.next(l(Pg.DeleteConsignmentRequested,void 0,o)),this._consignmentRequestSender.deleteConsignment(r.id,e,t).then(({body:e})=>{i.next(l(Pg.DeleteConsignmentSucceeded,e,o)),i.complete()}).catch(e=>{i.error(h(Pg.DeleteConsignmentFailed,e,o))})})}updateShippingOption(e,t){return n=>m.create(i=>{var r;const o=n.getState().checkout.getCheckout(),a=n.getState().consignments.getConsignmentById(e.id);if((null===(r=null==a?void 0:a.selectedShippingOption)||void 0===r?void 0:r.id)===e.shippingOptionId)return void i.complete();if(!o||!o.id)throw new at(nt.MissingCheckout);const s={id:e.id};i.next(l(Pg.UpdateShippingOptionRequested,void 0,s)),this._consignmentRequestSender.updateConsignment(o.id,e,t).then(({body:e})=>{i.next(l(Pg.UpdateShippingOptionSucceeded,e,s)),i.complete()}).catch(e=>{i.error(h(Pg.UpdateShippingOptionFailed,e,s))})})}_createOrUpdateConsignment(e,t){return n=>{const i=n.getState().checkout.getCheckout();if(!i||!i.id)throw new at(nt.MissingCheckout);return this._isUpdateConsignmentRequest(e)?this.updateConsignment(e,t)(n):this.createConsignments([e],t)(n)}}_getUpdateAddressRequestBody(e,t){const n=t.getState().cart.getCart();if(!n)throw new at(nt.MissingCart);const{physicalItems:i,customItems:r=[]}=n.lineItems;return{address:e,lineItems:[...i,...r].map(e=>({itemId:e.id,quantity:e.quantity}))}}_removeLineItems(e,t,n){if(!n)throw new at(nt.MissingCart);return this._hydrateLineItems(t.lineItemIds,n).map(t=>{const n=B(e,e=>e.itemId===t.itemId);return Object.assign(Object.assign({},t),{quantity:n?t.quantity-n.quantity:t.quantity})}).filter(e=>e.quantity>0)}_addLineItems(e,t,n){if(!t)return e;if(!n)throw new at(nt.MissingCart);return e.concat(this._hydrateLineItems(t.lineItemIds,n)).filter(e=>e.quantity>0)}_hydrateLineItems(e,t){return e.map(e=>{const n=B(t.lineItems.physicalItems,t=>t.id===e);return{itemId:e,quantity:n?n.quantity:0}})}_isUpdateConsignmentRequest(e){return!!e.id}_consignmentHasAddress(e){return\"object\"==typeof e&&\"address\"in e}}const Tg=[\"consignments.availableShippingOptions\",\"cart.lineItems.physicalItems.options\",\"cart.lineItems.physicalItems.stockPosition\",\"cart.lineItems.digitalItems.options\",\"cart.lineItems.digitalItems.stockPosition\",\"customer\",\"promotions.banners\"];class kg{constructor(e){this._requestSender=e}createConsignments(e,t,{timeout:n,params:{include:i}={}}={}){const r=`/api/storefront/checkouts/${e}/consignments`,o=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.post(r,{body:t,params:{include:tn(Tg,i)},headers:o,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new lt;throw e})}updateConsignment(e,t,{timeout:n,params:{include:i}={}}={}){const{id:r}=t,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"id\"]),a=`/api/storefront/checkouts/${e}/consignments/${r}`,s=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.put(a,{body:o,params:{include:tn(Tg,i)},headers:s,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new lt;throw e})}deleteConsignment(e,t,{timeout:n}={}){const i=`/api/storefront/checkouts/${e}/consignments/${t}`,r=Object.assign({Accept:ut.JsonV1},tt),o=Bt(Tg);return this._requestSender.delete(i,{params:{include:o},headers:r,timeout:n}).catch(e=>{if(\"empty_cart\"===e.body.type)throw new lt;throw e})}}var Dg,Mg;!function(e){e.LoadShippingCountriesRequested=\"LOAD_SHIPPING_COUNTRIES_REQUESTED\",e.LoadShippingCountriesSucceeded=\"LOAD_SHIPPING_COUNTRIES_SUCCEEDED\",e.LoadShippingCountriesFailed=\"LOAD_SHIPPING_COUNTRIES_FAILED\"}(Dg||(Dg={}));class zg{constructor(e,t){this._shippingCountryRequestSender=e,this._store=t}loadCountries(e){const{checkout:t}=this._store.getState(),n=t.getCheckout(),i=n?n.channelId:null;return m.create(t=>{t.next(l(Dg.LoadShippingCountriesRequested)),this._shippingCountryRequestSender.loadCountries(i,e).then(e=>{t.next(l(Dg.LoadShippingCountriesSucceeded,e.body.data)),t.complete()}).catch(e=>{t.error(h(Dg.LoadShippingCountriesFailed,e))})})}}class Ng{constructor(e,t){this._requestSender=e,this._config=t}loadCountries(e,{timeout:t}={}){const n=\"/internalapi/v1/shipping/countries\"+(e?`?channel_id=${e}`:\"\"),i=Object.assign({\"Accept-Language\":this._config.locale},tt);return this._requestSender.get(n,{headers:i,timeout:t})}}!function(e){e.ApplyStoreCreditRequested=\"APPLY_STORE_CREDIT_REQUESTED\",e.ApplyStoreCreditSucceeded=\"APPLY_STORE_CREDIT_SUCCEEDED\",e.ApplyStoreCreditFailed=\"APPLY_STORE_CREDIT_FAILED\"}(Mg||(Mg={}));var xg;class Rg{constructor(e){this._storeCreditRequestSender=e}applyStoreCredit(e,t){return n=>g(C(l(Mg.ApplyStoreCreditRequested)),v(()=>{return i=this,r=void 0,a=function*(){var i;const r=n.getState().checkout.getCheckout();if(!r)throw new at(nt.MissingCheckout);const{id:o}=r,a=null!==(i=null==t?void 0:t.version)&&void 0!==i?i:r.version,{body:s}=yield e?this._storeCreditRequestSender.applyStoreCredit(o,Object.assign(Object.assign({},t),{version:a})):this._storeCreditRequestSender.removeStoreCredit(o,Object.assign(Object.assign({},t),{version:a}));return l(Mg.ApplyStoreCreditSucceeded,s)},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{d(a.next(e))}catch(e){t(e)}}function s(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(n,s)}d((a=a.apply(i,r||[])).next())});var i,r,o,a})).pipe(P(e=>Qe(Mg.ApplyStoreCreditFailed,e)))}}class Fg{constructor(e){this._requestSender=e}applyStoreCredit(e,{timeout:t,version:n}={}){const i=`/api/storefront/checkouts/${e}/store-credit`,r=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.post(i,{headers:r,timeout:t,params:{include:Bt(Nt)},body:{version:n}})}removeStoreCredit(e,{timeout:t,version:n}={}){const i=`/api/storefront/checkouts/${e}/store-credit`,r=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.delete(i,{headers:r,timeout:t,params:{include:Bt(Nt)},body:{version:n}})}}!function(e){e.UpdateSubscriptionsRequested=\"UPDATE_SUBSCRIPTIONS_REQUESTED\",e.UpdateSubscriptionsSucceeded=\"UPDATE_SUBSCRIPTIONS_SUCCEEDED\",e.UpdateSubscriptionsFailed=\"UPDATE_SUBSCRIPTIONS_FAILED\"}(xg||(xg={}));class Lg extends At{constructor(e){super(e),this.name=\"UpdateSubscriptionsError\",this.type=\"update_subscriptions\"}}class Bg{constructor(e){this._subscriptionsRequestSender=e}updateSubscriptions(e,t){return g(C(l(xg.UpdateSubscriptionsRequested)),v(()=>{return n=this,i=void 0,o=function*(){const{body:n}=yield this._subscriptionsRequestSender.updateSubscriptions(e,t);return l(xg.UpdateSubscriptionsSucceeded,n)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe(P(e=>Qe(xg.UpdateSubscriptionsFailed,new Lg(e))))}}class jg{constructor(e){this._requestSender=e}updateSubscriptions(e,{timeout:t}={}){const n=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.post(\"/api/storefront/subscriptions\",{body:e,headers:n,timeout:t})}}function Ug(e){return Q(e)}const qg=se(e=>Array.isArray(e)?e.map(e=>Vg(e)):Ug(e)?Object.keys(e).reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:Vg(e[n])}),{}):e);qg.cache=new WeakMap;const Vg=e=>\"object\"==typeof e&&null!==e?qg(e):e;function Gg(e){return(...t)=>Vg(e(...t))}function Hg({billingAddress:{getBillingAddress:e,getBillingAddressOrThrow:t},cart:{getCart:n,getCartOrThrow:i,getLocale:r},checkout:{getCheckout:o,getCheckoutOrThrow:a,getOutstandingBalance:s},config:{getContextConfig:d,getHost:c,getLocale:l,getStoreConfig:u,getStoreConfigOrThrow:h,getConfig:p},consignments:{getConsignments:m,getConsignmentsOrThrow:y},countries:{getCountries:g},customer:{getCustomer:v,getCustomerOrThrow:f},instruments:{getCardInstrument:S,getCardInstrumentOrThrow:_,getInstruments:w,getInstrumentsMeta:I},order:{getOrder:C,getOrderOrThrow:b,getOrderMeta:P},payment:{getPaymentToken:O,getPaymentTokenOrThrow:E,getPaymentId:A,getPaymentIdOrThrow:T,getPaymentStatus:k,getPaymentStatusOrThrow:D,getPaymentRedirectUrl:M,getPaymentRedirectUrlOrThrow:z,isPaymentDataRequired:N},paymentMethods:{getPaymentMethod:x,getPaymentMethodOrThrow:R,getPaymentMethodsMeta:F},paymentProviderCustomer:{getPaymentProviderCustomer:L,getPaymentProviderCustomerOrThrow:B},paymentStrategies:{isInitialized:j},shippingAddress:{getShippingAddress:U,getShippingAddressOrThrow:q,getShippingAddresses:V,getShippingAddressesOrThrow:G},shippingCountries:{getShippingCountries:H}}){return{getHost:Gg(c),getLocale:Gg(l),getCartLocale:Gg(r),getBillingAddress:Gg(e),getBillingAddressOrThrow:Gg(t),getCart:Gg(n),getCartOrThrow:Gg(i),getCheckout:Gg(o),getCheckoutOrThrow:Gg(a),getCountries:Gg(g),getStoreConfig:Gg(u),getStoreConfigOrThrow:Gg(h),getConfig:Gg(p),getConsignments:Gg(m),getConsignmentsOrThrow:Gg(y),getContextConfig:Gg(d),getCustomer:Gg(v),getCustomerOrThrow:Gg(f),getCardInstrument:Gg(S),getInstruments:Gg(w),getCardInstrumentOrThrow:Gg(_),getOrder:Gg(C),getOrderOrThrow:Gg(b),getOrderMeta:Gg(P),getInstrumentsMeta:Gg(I),getPaymentToken:O,getPaymentTokenOrThrow:E,getPaymentId:A,getPaymentIdOrThrow:T,getPaymentStatus:k,getPaymentStatusOrThrow:D,getPaymentRedirectUrl:M,getPaymentRedirectUrlOrThrow:z,getPaymentMethod:Gg(x),getPaymentMethodOrThrow:Gg(R),getPaymentMethodsMeta:Gg(F),getPaymentProviderCustomer:Gg(L),getPaymentProviderCustomerOrThrow:Gg(B),getShippingAddress:Gg(U),getShippingAddressOrThrow:Gg(q),getShippingAddresses:Gg(V),getShippingAddressesOrThrow:Gg(G),getShippingCountries:Gg(H),getOutstandingBalance:Gg(s),isPaymentDataRequired:N,isPaymentMethodInitialized:j}}var Wg,$g=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Yg{constructor(e,t,n,i,r,o,a,s,d,c,l,u,h,p,m,y,g,v,f,S){this._store=e,this._storeProjectionFactory=t,this._checkoutActionCreator=n,this._checkoutValidator=i,this._hostedFormFactory=r,this._orderActionCreator=o,this._billingAddressActionCreator=a,this._consignmentActionCreator=s,this._paymentMethodActionCreator=d,this._paymentActionCreator=c,this._paymentHumanVerificationHandler=l,this._customerActionCreator=u,this._cartRequestSender=h,this._storeCreditActionCreator=p,this._couponActionCreator=m,this._spamProtectionActionCreator=y,this._paymentProviderCustomerActionCreator=g,this._shippingCountryActionCreator=v,this._remoteCheckoutActionCreator=f,this._paymentStrategyWidgetActionCreator=S,this._storeProjection=this._storeProjectionFactory.create(this._store)}createHostedForm(e,t){const n=this._storeProjection.getState().getCheckoutOrThrow().id;return this._hostedFormFactory.create(e,t,n)}subscribe(e,...t){return this._storeProjection.subscribe(e,...t)}getState(){return this._storeProjection.getState()}initializeOffsitePayment(e){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentActionCreator.initializeOffsitePayment(e)),this._storeProjection.getState()})}loadCheckout(e){return $g(this,void 0,void 0,function*(){return e?yield this._store.dispatch(this._checkoutActionCreator.loadCheckout(e)):yield this._store.dispatch(this._checkoutActionCreator.loadCurrentCheckout()),this._storeProjection.getState()})}loadDefaultCheckout(){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()),this._storeProjection.getState()})}loadPaymentMethod(e,t){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e,t)),this._storeProjection.getState()})}loadPaymentMethods(e){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethods(e)),this._storeProjection.getState()})}submitOrder(e,t){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._orderActionCreator.submitOrder(e,t)),this._storeProjection.getState()})}submitPayment(e){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentActionCreator.submitPayment(e)),this._storeProjection.getState()})}finalizeOrder(e){return $g(this,void 0,void 0,function*(){const{order:{getOrderOrThrow:t}}=this._store.getState();return yield this._store.dispatch(this._orderActionCreator.finalizeOrder(t().orderId,e)),this._storeProjection.getState()})}updateBillingAddress(e){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(e)),this._storeProjection.getState()})}updateShippingAddress(e){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.updateAddress(e)),this._storeProjection.getState()})}selectShippingOption(e,t){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t)),this._storeProjection.getState()})}signInCustomer(e,t){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._customerActionCreator.signInCustomer(e,t)),this._storeProjection.getState()})}signOutCustomer(e){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._customerActionCreator.signOutCustomer(e)),this._storeProjection.getState()})}createBuyNowCart(e,t){return $g(this,void 0,void 0,function*(){const{body:n}=yield this._cartRequestSender.createBuyNowCart(e,t);return n})}applyStoreCredit(e,t){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._storeCreditActionCreator.applyStoreCredit(e,t)),this._storeProjection.getState()})}applyCoupon(e,t){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._couponActionCreator.applyCoupon(e,t)),this._storeProjection.getState()})}removeCoupon(e,t){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._couponActionCreator.removeCoupon(e,t)),this._storeProjection.getState()})}verifyCheckoutSpamProtection(){return $g(this,void 0,void 0,function*(){const{checkout:e}=this._store.getState(),{shouldExecuteSpamCheck:t}=e.getCheckoutOrThrow();return t&&(yield this._store.dispatch(this._spamProtectionActionCreator.verifyCheckoutSpamProtection())),this._storeProjection.getState()})}loadCurrentOrder(e){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._orderActionCreator.loadCurrentOrder(e)),this._storeProjection.getState()})}updatePaymentProviderCustomer(e){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(e)),this._storeProjection.getState()})}loadShippingCountries(e){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._shippingCountryActionCreator.loadCountries(e)),this._storeProjection.getState()})}deleteConsignment(e,t){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._consignmentActionCreator.deleteConsignment(e,t)),this._storeProjection.getState()})}initializePayment(e,t,n){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.initializePayment(e,t,n)),this._storeProjection.getState()})}forgetCheckout(e,t){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.forgetCheckout(e,t)),this._storeProjection.getState()})}remoteCheckoutSignOut(e,t){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._remoteCheckoutActionCreator.signOut(e,t)),this._storeProjection.getState()})}validateCheckout(e,t){return $g(this,void 0,void 0,function*(){yield this._checkoutValidator.validate(e,t)})}handlePaymentHumanVerification(e,t){return $g(this,void 0,void 0,function*(){return\"string\"==typeof e?this._paymentHumanVerificationHandler.handle(e,null!=t?t:\"\"):this._paymentHumanVerificationHandler.handle(e)})}widgetInteraction(e){return $g(this,void 0,void 0,function*(){return yield this._store.dispatch(this._paymentStrategyWidgetActionCreator.widgetInteraction(e),{queueId:\"widgetInteraction\"}),this._storeProjection.getState()})}}class Kg{constructor(e){this._transformSelectors=e}create(e){return gt(e,this._transformSelectors)}}function Jg(e,t){const{config:{getHost:i,getLocale:r}}=e.getState();t||(t=n({host:i()}));const a=new Kg(Hg),s=new on(new nn(t),new Ot(new Dt(t)),new sn(new dn(t))),d=new sy(new nn(t)),c=new Ey(e),l=new Gm(new qm(t),new sy(new nn(t))),u=new ct(new pt(t),new Bg(new jg(t))),h=new Ag(new kg(t),new nn(t)),p=new Jm(new Zm(t),new ey(t)),m=new Ay(new Ty(Hm(e)),l,new Ky,new my(wn(o()))),y=new my(wn(o())),g=new Zt(new Qt(t),s,new yn(wn(o()),new In(t))),v=new Rg(new Fg(t)),f=new zt(new jt(t)),S=wn(o()),_=new In(t),w=new yn(S,_),I=new Cg(t),C=new bg,b=new zg(new Ng(t,{locale:r()}),e),P=new Og(new Eg(t),s),O=new iy;return new Yg(e,a,s,d,c,l,u,h,p,m,y,g,I,v,f,w,C,b,P,O)}!function(e){e.LoadInstrumentsRequested=\"LOAD_INSTRUMENTS_REQUESTED\",e.LoadInstrumentsSucceeded=\"LOAD_INSTRUMENTS_SUCCEEDED\",e.LoadInstrumentsFailed=\"LOAD_INSTRUMENTS_FAILED\",e.DeleteInstrumentRequested=\"DELETE_INSTRUMENT_REQUESTED\",e.DeleteInstrumentSucceeded=\"DELETE_INSTRUMENT_SUCCEEDED\",e.DeleteInstrumentFailed=\"DELETE_INSTRUMENT_FAILED\"}(Wg||(Wg={}));class Zg{constructor(e){this._instrumentRequestSender=e}loadInstruments(){return e=>m.create(t=>{t.next(l(Wg.LoadInstrumentsRequested));const n=this._getSessionContext(e),i=this._getCurrentAccessToken(e),r=this._getShippingAddress(e);return this._getValidAccessToken(i).then(e=>this._instrumentRequestSender.loadInstruments(Object.assign(Object.assign({},n),{authToken:e.vaultAccessToken}),r).then(({body:n})=>{t.next(l(Wg.LoadInstrumentsSucceeded,n,e)),t.complete()})).catch(e=>{t.error(h(Wg.LoadInstrumentsFailed,e))})})}deleteInstrument(e){return t=>m.create(n=>{n.next(l(Wg.DeleteInstrumentRequested,void 0,{instrumentId:e}));const i=this._getSessionContext(t),r=this._getCurrentAccessToken(t);return this._getValidAccessToken(r).then(t=>this._instrumentRequestSender.deleteInstrument(Object.assign(Object.assign({},i),{authToken:t.vaultAccessToken}),e).then(({body:i})=>{n.next(l(Wg.DeleteInstrumentSucceeded,i,Object.assign({instrumentId:e},t))),n.complete()})).catch(t=>{n.error(h(Wg.DeleteInstrumentFailed,t,{instrumentId:e}))})})}_isValidVaultAccessToken(e){if(!e||!e.vaultAccessToken)return!1;return function(e){const t=new Date(e.getTime());return t.setMinutes(e.getMinutes()+2),t}(new Date(e.vaultAccessExpiry)).valueOf()>Date.now()}_getCurrentAccessToken(e){const{instruments:t}=e.getState(),n=t.getInstrumentsMeta();if(n)return{vaultAccessToken:n.vaultAccessToken,vaultAccessExpiry:n.vaultAccessExpiry}}_getValidAccessToken(e){return e&&this._isValidVaultAccessToken(e)?Promise.resolve(e):this._instrumentRequestSender.getVaultAccessToken().then(({body:e})=>e)}_getShippingAddress(e){const t=e.getState(),n=t.shippingAddress.getShippingAddresses();return n.length>1?n:t.shippingAddress.getShippingAddress()}_getSessionContext(e){const t=e.getState(),n=t.config.getStoreConfig(),i=t.cart.getCart();if(!n)throw new at(nt.MissingCheckoutConfig);if(!i)throw new at(nt.MissingCart);const{customerId:r}=i,{storeId:o}=n.storeProfile,{code:a}=n.shopperCurrency.isTransactional?n.shopperCurrency:n.currency;return{customerId:r,storeId:o,currencyCode:a}}}var Qg,Xg,ev=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n};class tv{transformResponse(e){const t=this._transformResponse(e),{body:n}=t,i=ev(t,[\"body\"]);return Object.assign(Object.assign({},i),{body:{vaultedInstruments:this._transformVaultedInstruments(n.vaulted_instruments)}})}transformErrorResponse(e){return this._transformResponse(e)}transformVaultAccessResponse(e){return Object.assign(Object.assign({},e),{body:{vaultAccessToken:e.body.data.token,vaultAccessExpiry:e.body.data.expires_at}})}_transformVaultedInstruments(e=[]){return e.map(e=>this._isPayPalInstrument(e)?function(e){return{bigpayToken:e.bigpay_token,defaultInstrument:e.default_instrument,provider:e.provider,externalId:e.external_id,trustedShippingAddress:e.trusted_shipping_address,method:\"paypal\",type:\"account\"}}(e):this._isBankInstrument(e)?function(e){return{bigpayToken:e.bigpay_token,defaultInstrument:e.default_instrument,provider:e.provider,trustedShippingAddress:e.trusted_shipping_address,accountNumber:e.account_number,issuer:e.issuer,iban:e.iban,method:e.method,type:\"bank\"}}(e):function(e){return{bigpayToken:e.bigpay_token,defaultInstrument:e.default_instrument,provider:e.provider,iin:e.iin,last4:e.last_4,expiryMonth:e.expiry_month,expiryYear:e.expiry_year,brand:e.brand,trustedShippingAddress:e.trusted_shipping_address,untrustedShippingCardVerificationMode:e.untrusted_shipping_address_card_verification_mode,method:e.method,type:\"card\"}}(e))}_isPayPalInstrument(e){return\"paypal\"===e.method_type}_isBankInstrument(e){return\"bank\"===e.method_type}_transformResponse(e){const{data:t}=e,n=ev(e,[\"data\"]);return Object.assign(Object.assign({},n),{body:t})}}class nv{constructor(e,t){this._client=e,this._requestSender=t,this._transformer=new tv}getVaultAccessToken({timeout:e}={}){return this._requestSender.get(\"/internalapi/v1/checkout/payments/vault-access-token\",{timeout:e}).then(e=>Object.assign(Object.assign({},e),{body:{vaultAccessToken:e.body.data.token,vaultAccessExpiry:e.body.data.expires_at}}))}loadInstruments(e,t){return t?this._loadInstrumentsWithAddress(e,t):this._loadInstruments(e)}deleteInstrument(e,t){const n=Object.assign(Object.assign({},e),{instrumentId:t});return new Promise((e,t)=>{this._client.deleteShopperInstrument(n,(n,i)=>n?t(this._transformer.transformErrorResponse(n)):e(this._transformer.transformResponse(i)))})}_loadInstruments(e){return new Promise((t,n)=>{this._client.loadInstruments(e,(e,i)=>e?n(this._transformer.transformErrorResponse(e)):t(this._transformer.transformResponse(i)))})}_loadInstrumentsWithAddress(e,t){const n=Object.assign(Object.assign({},e),{shippingAddress:Array.isArray(t)?t.map(e=>ky(e)):ky(t)});return new Promise((e,t)=>{this._client.loadInstrumentsWithAddress(n,(n,i)=>n?t(this._transformer.transformErrorResponse(n)):e(this._transformer.transformResponse(i)))})}}!function(e){e.LoadPickupOptionsRequested=\"LOAD_PICKUP_OPTIONS_REQUESTED\",e.LoadPickupOptionsSucceeded=\"LOAD_PICKUP_OPTIONS_SUCCEEDED\",e.LoadPickupOptionsFailed=\"LOAD_PICKUP_OPTIONS_FAILED\"}(Qg||(Qg={}));class iv{constructor(e){this._pickupOptionRequestSender=e}loadPickupOptions(e){return t=>new m(n=>{const i=this._hydrateApiQuery(t,e);n.next(l(Qg.LoadPickupOptionsRequested)),this._pickupOptionRequestSender.fetchPickupOptions(i).then(t=>{n.next(l(Qg.LoadPickupOptionsSucceeded,t.body.results,e)),n.complete()}).catch(e=>{n.error(h(Qg.LoadPickupOptionsFailed,e))})})}_hydrateApiQuery(e,t){const n=e.getState(),i=n.cart.getCartOrThrow();if(!i)throw new at(nt.MissingCart);const r=n.consignments.getConsignmentById(t.consignmentId);if(!r)throw new at(nt.MissingConsignments);const o=r.lineItemIds,a=i.lineItems.physicalItems.filter(e=>H(o,e.id)).map(e=>({variantId:e.variantId,quantity:e.quantity}));return{searchArea:t.searchArea,items:a}}}class rv{constructor(e){this._requestSender=e}fetchPickupOptions(e){return this._requestSender.post(\"/api/storefront/pickup-options\",{headers:Object.assign({Accept:ut.Json},tt),body:e})}}!function(e){e.UpdateAddressFailed=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_FAILED\",e.UpdateAddressRequested=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_REQUESTED\",e.UpdateAddressSucceeded=\"SHIPPING_STRATEGY_UPDATE_ADDRESS_SUCCEEDED\",e.SelectOptionFailed=\"SHIPPING_STRATEGY_SELECT_OPTION_FAILED\",e.SelectOptionRequested=\"SHIPPING_STRATEGY_SELECT_OPTION_REQUESTED\",e.SelectOptionSucceeded=\"SHIPPING_STRATEGY_SELECT_OPTION_SUCCEEDED\",e.InitializeFailed=\"SHIPPING_STRATEGY_INITIALIZE_FAILED\",e.InitializeRequested=\"SHIPPING_STRATEGY_INITIALIZE_REQUESTED\",e.InitializeSucceeded=\"SHIPPING_STRATEGY_INITIALIZE_SUCCEEDED\",e.DeinitializeFailed=\"SHIPPING_STRATEGY_DEINITIALIZE_FAILED\",e.DeinitializeRequested=\"SHIPPING_STRATEGY_DEINITIALIZE_REQUESTED\",e.DeinitializeSucceeded=\"SHIPPING_STRATEGY_DEINITIALIZE_SUCCEEDED\",e.WidgetInteractionStarted=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_STARTED\",e.WidgetInteractionFinished=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_FINISHED\",e.WidgetInteractionFailed=\"SHIPPING_STRATEGY_WIDGET_INTERACTION_FAILED\"}(Xg||(Xg={}));class ov{constructor(e){this._strategyRegistry=e}updateAddress(e,t){return n=>m.create(i=>{const r=n.getState().payment.getPaymentId(),o=t&&t.methodId||r&&r.providerId;i.next(l(Xg.UpdateAddressRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).updateAddress(e,Object.assign(Object.assign({},t),{methodId:o})).then(()=>{i.next(l(Xg.UpdateAddressSucceeded,void 0,{methodId:o})),i.complete()}).catch(e=>{i.error(h(Xg.UpdateAddressFailed,e,{methodId:o}))})})}selectOption(e,t){return n=>m.create(i=>{const r=n.getState().payment.getPaymentId(),o=t&&t.methodId||r&&r.providerId;i.next(l(Xg.SelectOptionRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).selectOption(e,Object.assign(Object.assign({},t),{methodId:o})).then(()=>{i.next(l(Xg.SelectOptionSucceeded,void 0,{methodId:o})),i.complete()}).catch(e=>{i.error(h(Xg.SelectOptionFailed,e,{methodId:o}))})})}initialize(e){return t=>m.create(n=>{const i=t.getState(),r=i.payment.getPaymentId(),o=e&&e.methodId||r&&r.providerId,a=Object.assign(Object.assign({},e),{methodId:o});if(o&&i.shippingStrategies.isInitialized(o))return n.complete();n.next(l(Xg.InitializeRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).initialize(a).then(()=>{n.next(l(Xg.InitializeSucceeded,void 0,{methodId:o})),n.complete()}).catch(e=>{n.error(h(Xg.InitializeFailed,e,{methodId:o}))})})}deinitialize(e){return t=>m.create(n=>{const i=t.getState(),r=i.payment.getPaymentId(),o=e&&e.methodId||r&&r.providerId;if(o&&!i.shippingStrategies.isInitialized(o))return n.complete();n.next(l(Xg.DeinitializeRequested,void 0,{methodId:o})),this._strategyRegistry.get(o).deinitialize(Object.assign(Object.assign({},e),{methodId:o})).then(()=>{n.next(l(Xg.DeinitializeSucceeded,void 0,{methodId:o})),n.complete()}).catch(e=>{n.error(h(Xg.DeinitializeFailed,e,{methodId:o}))})})}widgetInteraction(e,t){return m.create(n=>{const i={methodId:t&&t.methodId};n.next(l(Xg.WidgetInteractionStarted,void 0,i)),e().then(()=>{n.next(l(Xg.WidgetInteractionFinished,void 0,i)),n.complete()}).catch(e=>{n.error(h(Xg.WidgetInteractionFailed,e,i))})})}}var av,sv=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class dv{constructor(e,t,n,i,r){this._store=e,this._consignmentActionCreator=t,this._paymentMethodActionCreator=n,this._amazonPayV2PaymentProcessor=i,this._shippingStrategyActionCreator=r}updateAddress(e,t){const n=this._store.getState().shippingAddress.getShippingAddress();if(!n)throw new at(nt.MissingShippingAddress);const i=Object.assign(Object.assign({},n),{customFields:e.customFields});return this._store.dispatch(this._consignmentActionCreator.updateAddress(i,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}initialize(e){return sv(this,void 0,void 0,function*(){const{amazonpay:t,methodId:n}=e;if(!t||!n)throw new Gt('Unable to proceed because \"options.amazonpay\" argument is not provided.');const i=(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(n))).paymentMethods.getPaymentMethodOrThrow(n);yield this._amazonPayV2PaymentProcessor.initialize(i);const{paymentToken:r,region:o}=i.initializationData,a=t.editAddressButtonId;if(r&&a){const e=this._shouldShowLoadingSpinner(o);this._bindEditButton(a,r,\"changeAddress\",e)}return this._store.getState()})}deinitialize(){return sv(this,void 0,void 0,function*(){return yield this._amazonPayV2PaymentProcessor.deinitialize(),Promise.resolve(this._store.getState())})}_bindEditButton(e,t,n,i){const r=document.getElementById(e);if(r&&r.parentNode){if(i){const e=r.cloneNode(!0);r.parentNode.replaceChild(e,r),e.addEventListener(\"click\",()=>this._showLoadingSpinner())}this._amazonPayV2PaymentProcessor.bindButton(e,t,n)}}_showLoadingSpinner(){return this._store.dispatch(this._shippingStrategyActionCreator.widgetInteraction(()=>new Promise(I)),{queueId:\"widgetInteraction\"})}_shouldShowLoadingSpinner(e){return\"us\"!==e}}!function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(av||(av={}));var cv=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class lv{constructor(e,t,n,i,r,o){this._store=e,this._billingAddressActionCreator=t,this._consignmentActionCreator=n,this._paymentMethodActionCreator=i,this._paymentProviderCustomerActionCreator=r,this._braintreeIntegrationService=o}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}deinitialize(){return Promise.resolve(this._store.getState())}initialize(e){var t;return cv(this,void 0,void 0,function*(){const{methodId:n,braintreefastlane:i,fastlane:r}=e||{},o=r||i,{onPayPalFastlaneAddressChange:a}=o||{};if(!n)throw new Gt('Unable to proceed because \"methodId\" argument is not provided.');const s=this._store.getState();if(!s.customer.getCustomerOrThrow().isGuest)return Promise.resolve(this._store.getState());try{if(this._shouldRunAuthenticationFlow()){const e=s.paymentMethods.getPaymentMethod(n),{clientToken:i,isFastlaneStylingEnabled:r}=(null==e?void 0:e.initializationData)||{};i||(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(n)));const a=ko(r?null===(t=null==e?void 0:e.initializationData)||void 0===t?void 0:t.fastlaneStyles:void 0,null==o?void 0:o.styles);yield this._runAuthenticationFlowOrThrow(n,a)}\"function\"==typeof a&&(yield this._shouldUseBraintreeFastlaneShippingComponent(n))&&a(()=>this._handleBraintreeFastlaneShippingAddressChange())}catch(e){}return Promise.resolve(this._store.getState())})}_shouldRunAuthenticationFlow(){var e;const t=this._store.getState(),n=null===(e=t.cart.getCart())||void 0===e?void 0:e.id,i=Br.get(\"bc-fastlane-sessionId\")||\"\",r=t.paymentProviderCustomer.getPaymentProviderCustomer(),o=Fl(r)?r:{};return(null==o?void 0:o.authenticationState)!==Ni.CANCELED&&!(null==o?void 0:o.authenticationState)&&i===n}_runAuthenticationFlowOrThrow(e,t){var n,i;return cv(this,void 0,void 0,function*(){const r=this._store.getState(),o=r.cart.getCartOrThrow(),a=r.countries.getCountries()||[],s=r.paymentMethods.getPaymentMethodOrThrow(e),{clientToken:d,config:c}=s;if(!d)throw new at(nt.MissingPaymentMethod);this._braintreeIntegrationService.initialize(d);const l=yield this._braintreeIntegrationService.getBraintreeFastlane(null==o?void 0:o.id,null==c?void 0:c.testMode,t),u=(null===(n=r.customer.getCustomer())||void 0===n?void 0:n.email)||(null===(i=r.billingAddress.getBillingAddress())||void 0===i?void 0:i.email);if(!u)return;const{lookupCustomerByEmail:h,triggerAuthenticationFlow:p}=l.identity,{customerContextId:m}=yield h(u);if(!m)return;const{authenticationState:y,profileData:g}=yield p(m);if(y===Ni.CANCELED)return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({authenticationState:y,addresses:[],instruments:[]})),void Br.remove(\"bc-fastlane-sessionId\");const v=this._getPayPalBillingAddress(g),f=g.shippingAddress,S=g.shippingAddress.phoneNumber,_=this._mapPayPalToBcAddress(f,a,S),w=this._mapPayPalToBcAddress(v,a,S);if(w&&_){const t=this._mergeShippingAndBillingAddresses(_,w),n=this._mapPayPalToBcInstrument(e,g.card),i=n?[n]:[];yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({authenticationState:y,addresses:t,instruments:i})),w&&(yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(Object.assign(Object.assign({},w),{id:String(w.id)})))),_&&o.lineItems.physicalItems.length>0&&(yield this._store.dispatch(this._consignmentActionCreator.updateAddress(_)))}})}_getPayPalBillingAddress(e){const{name:t,card:n}=e,i=n.paymentSource.card.billingAddress;return Object.assign(Object.assign({},i),{firstName:i.firstName||(null==t?void 0:t.firstName),lastName:i.lastName||(null==t?void 0:t.lastName)})}_getCountryNameByCountryCode(e,t){const n=t.find(t=>t.code===e);return(null==n?void 0:n.name)||\"\"}_mapPayPalToBcAddress(e,t,n,i){return{id:Number(Date.now()),type:\"paypal-address\",firstName:e.firstName||\"\",lastName:e.lastName||\"\",company:e.company||\"\",address1:e.streetAddress,address2:e.extendedAddress||\"\",city:e.locality,stateOrProvince:e.region,stateOrProvinceCode:e.region,country:this._getCountryNameByCountryCode(e.countryCodeAlpha2,t),countryCode:e.countryCodeAlpha2,postalCode:e.postalCode,phone:n||\"\",customFields:i||[]}}_normalizeAddress(e){return le(e,[\"id\"])}_mergeShippingAndBillingAddresses(e,t){return Y(this._normalizeAddress(e),this._normalizeAddress(t))?[e]:[e,t]}_mapPayPalToBcInstrument(e,t){if(!t)return;const{id:n,paymentSource:i}=t,{brand:r,expiry:o,lastDigits:a}=i.card,[s,d]=o.split(\"-\");return{bigpayToken:n,brand:r,defaultInstrument:!1,expiryMonth:d,expiryYear:s,iin:\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:av.CVV,type:\"card\"}}_handleBraintreeFastlaneShippingAddressChange(){var e;return cv(this,void 0,void 0,function*(){const t=this._store.getState().countries.getCountries()||[],n=yield this._braintreeIntegrationService.getBraintreeFastlane(),{selectionChanged:i,selectedAddress:r}=yield n.profile.showShippingAddressSelector();if(i){const n=this._store.getState(),i=n.shippingAddress.getShippingAddressesOrThrow(),o=n.paymentProviderCustomer.getPaymentProviderCustomer(),a=Fl(o)?o:{},s=this._mapPayPalToBcAddress(r,t,r.phoneNumber,null===(e=i[0])||void 0===e?void 0:e.customFields);if(s){const e=this._filterAddresses([s,...a.addresses||[]]);return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(Object.assign(Object.assign({},a),{addresses:e}))),yield this._store.dispatch(this._consignmentActionCreator.updateAddress(s)),s}}})}_filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this._isEqualAddresses(e,t))?e:[...e,t]:e,[])}_isEqualAddresses(e,t){return Y(this._normalizeAddress(e),this._normalizeAddress(t))}_shouldUseBraintreeFastlaneShippingComponent(e){var t;return cv(this,void 0,void 0,function*(){const n=this._store.getState().paymentProviderCustomer.getPaymentProviderCustomer(),i=Fl(n)?n:{};if(i&&(null==i?void 0:i.authenticationState)!==Ni.CANCELED){const n=yield this._getBraintreePaymentMethodOrThrow(e);return!!(null===(t=null==n?void 0:n.initializationData)||void 0===t?void 0:t.isFastlaneEnabled)}return!1})}_getBraintreePaymentMethodOrThrow(e){return cv(this,void 0,void 0,function*(){const t=this._store.getState().paymentMethods.getPaymentMethod(e);return t||(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e))).paymentMethods.getPaymentMethodOrThrow(e)})}}class uv{constructor(e,t){this._store=e,this._consignmentActionCreator=t}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}initialize(){return Promise.resolve(this._store.getState())}deinitialize(){return Promise.resolve(this._store.getState())}}var hv=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class pv{constructor(e,t,n,i,r,o,a){this._store=e,this._billingAddressActionCreator=t,this._consignmentActionCreator=n,this._paymentMethodActionCreator=i,this._paymentProviderCustomerActionCreator=r,this._paypalSdkScriptLoader=o,this._paypalCommerceFastlaneUtils=a}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}deinitialize(){return Promise.resolve(this._store.getState())}initialize(e){return hv(this,void 0,void 0,function*(){const{methodId:t,paypalcommercefastlane:n,fastlane:i}=e||{},r=i||n,{onPayPalFastlaneAddressChange:o,styles:a}=r||{};if(!t)throw new Gt('Unable to proceed because \"methodId\" argument is not provided.');const s=this._store.getState().customer.getCustomerOrThrow();if(!(null==s?void 0:s.isGuest))return Promise.resolve(this._store.getState());try{this._shouldAuthenticateUserWithFastlane()&&(yield this._initializePayPalSdk(t,a),yield this._authenticateUserWithFastlaneOtp(t)),\"function\"==typeof o&&this._shouldUsePayPalFastlaneShippingComponent()&&(yield this._initializePayPalSdk(t,a),o(()=>this._handlePayPalShippingAddressChange()))}catch(e){}return Promise.resolve(this._store.getState())})}_getPayPalPaymentMethodOrThrow(e){return hv(this,void 0,void 0,function*(){const t=this._store.getState().paymentMethods.getPaymentMethod(e);return t||(yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(e))).paymentMethods.getPaymentMethodOrThrow(e)})}_getPayPalCustomerAuthenticationState(){const e=this._store.getState().paymentProviderCustomer.getPaymentProviderCustomerOrThrow();var t;return((t=e)&&(\"authenticationState\"in t||\"addresses\"in t||\"instruments\"in t)?e:{}).authenticationState}_shouldAuthenticateUserWithFastlane(){const e=this._store.getState().cart.getCartOrThrow(),t=this._paypalCommerceFastlaneUtils.getStorageSessionId();return!this._getPayPalCustomerAuthenticationState()&&t===e.id}_shouldUsePayPalFastlaneShippingComponent(){const e=this._getPayPalCustomerAuthenticationState();return!!e&&e!==_s.CANCELED}_initializePayPalSdk(e,t){var n;return hv(this,void 0,void 0,function*(){const i=this._store.getState().cart.getCartOrThrow(),r=yield this._getPayPalPaymentMethodOrThrow(e),{isDeveloperModeApplicable:o,isFastlaneStylingEnabled:a}=(null==r?void 0:r.initializationData)||{},s=!!o,d=ad(a?null===(n=null==r?void 0:r.initializationData)||void 0===n?void 0:n.fastlaneStyles:{},t),c=yield this._paypalSdkScriptLoader.getPayPalFastlaneSdk(r,i.currency.code,i.id,i.locale);yield this._paypalCommerceFastlaneUtils.initializePayPalFastlane(c,s,d)})}_authenticateUserWithFastlaneOtp(e){var t,n;return hv(this,void 0,void 0,function*(){const i=this._store.getState(),r=i.cart.getCartOrThrow(),o=null===(t=i.customer.getCustomer())||void 0===t?void 0:t.email,a=null===(n=i.billingAddress.getBillingAddress())||void 0===n?void 0:n.email,s=o||a||\"\",{customerContextId:d}=yield this._paypalCommerceFastlaneUtils.lookupCustomerOrThrow(s),c=yield this._paypalCommerceFastlaneUtils.triggerAuthenticationFlowOrThrow(d),{authenticationState:l,addresses:u,billingAddress:h,shippingAddress:p,instruments:m}=this._paypalCommerceFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,c);yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({authenticationState:l,addresses:u,instruments:m})),c.authenticationState===_s.CANCELED?this._paypalCommerceFastlaneUtils.removeStorageSessionId():this._paypalCommerceFastlaneUtils.updateStorageSessionId(r.id),h&&(yield this._store.dispatch(this._billingAddressActionCreator.updateAddress(Object.assign(Object.assign({},h),{id:String(h.id)})))),p&&r.lineItems.physicalItems.length>0&&(yield this._store.dispatch(this._consignmentActionCreator.updateAddress(p)))})}_handlePayPalShippingAddressChange(){var e;return hv(this,void 0,void 0,function*(){const t=this._paypalCommerceFastlaneUtils.getPayPalFastlaneOrThrow(),{selectionChanged:n,selectedAddress:i}=yield t.profile.showShippingAddressSelector();if(n){const t=this._store.getState(),n=t.shippingAddress.getShippingAddressesOrThrow(),r=t.paymentProviderCustomer.getPaymentProviderCustomer(),o=Sp(r)?r:{},a=this._paypalCommerceFastlaneUtils.mapPayPalToBcAddress(i.address,i.name,i.phoneNumber,null===(e=n[0])||void 0===e?void 0:e.customFields),s=this._paypalCommerceFastlaneUtils.filterAddresses([a,...o.addresses||[]]);return yield this._store.dispatch(this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(Object.assign(Object.assign({},o),{addresses:s}))),yield this._store.dispatch(this._consignmentActionCreator.updateAddress(a)),a}})}}var mv;class yv{constructor(e,t,n,i){this._store=e,this._stripeScriptLoader=t,this._consignmentActionCreator=n,this._paymentMethodActionCreator=i}updateAddress(e,t){return this._store.dispatch(this._consignmentActionCreator.updateAddress(e,t))}selectOption(e,t){return this._store.dispatch(this._consignmentActionCreator.selectShippingOption(e,t))}initialize(e){return t=this,n=void 0,r=function*(){if(!e.stripeupe)throw new Gt('Unable to proceed because \"options\" argument is not provided.');const{container:t,gatewayId:n,methodId:i,onChangeShipping:r,getStyles:o,availableCountries:a,getStripeState:s}=e.stripeupe;Object.entries(e.stripeupe).forEach(([e,t])=>{if(!t)throw new Gt(`Unable to proceed because \"${e}\" argument is not provided.`)});const d=yield this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethod(n,{params:{method:i}})),c=d.paymentMethods.getPaymentMethodOrThrow(i,n),{initializationData:l}=c;if(!c||!c.initializationData.stripePublishableKey||!c.clientToken)throw new at(nt.MissingPaymentMethod);let u;this._stripeUPEClient=yield this._stripeScriptLoader.getStripeClient(l,d.cart.getLocale(),Ma.V3,Ba,ja);const h=o&&o(),{form:{getShippingAddressFields:p},shippingAddress:{getShippingAddress:m}}=this._store.getState(),y=p([],\"\");u=h?{variables:{colorPrimary:h.fieldInnerShadow,colorBackground:h.fieldBackground,colorText:h.labelText,colorDanger:h.fieldErrorText,colorTextSecondary:h.labelText,colorTextPlaceholder:h.fieldPlaceholderText,spacingUnit:\"4px\",borderRadius:\"4px\"},rules:{\".Input\":{borderColor:h.fieldBorder,color:h.fieldText,boxShadow:h.fieldInnerShadow}}}:{variables:{spacingUnit:\"4px\",borderRadius:\"4px\"}},this._stripeElements=yield this._stripeScriptLoader.getElements(this._stripeUPEClient,{clientSecret:c.clientToken,appearance:u});const g=m(),v=y.find(e=>\"phone\"===e.name);let f={mode:Pa.SHIPPING,allowedCountries:[a],fields:{phone:\"always\"},validation:{phone:{required:v&&v.required?\"always\":\"never\"}},display:{name:Oa.SPLIT}};if(g){const{stateOrProvinceCode:e,countryCode:t,lastName:n,firstName:i,phone:r,address1:o,address2:a,city:d,postalCode:c}=g,l=e&&t?s(t,e):e;f=Object.assign(Object.assign({},f),{defaultValues:{firstName:i,lastName:n,phone:r,address:{line1:o,line2:a,city:d,state:l,postal_code:c,country:t}}})}let S=this._stripeElements.getElement(za.SHIPPING);return S&&S.destroy(),S=this._stripeElements.create(za.SHIPPING,f),S.on(xa.CHANGE,e=>{if(!(\"isNewAddress\"in e))throw new at(nt.MissingShippingAddress);(e.complete||e.isNewAddress)&&(this.sendData&&clearTimeout(this.sendData),this.sendData=setTimeout(()=>{r(Object.assign(Object.assign({},e),{phoneFieldRequired:!!v&&v.required}))},1e3))}),S.mount(`#${t}`),Promise.resolve(this._store.getState())},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}deinitialize(){return Promise.resolve(this._store.getState())}}!function(e){e.SendSignInEmailRequested=\"SEND_SIGNIN_EMAIL_REQUESTED\",e.SendSignInEmailSucceeded=\"SEND_SIGNIN_EMAIL_SUCCEEDED\",e.SendSignInEmailFailed=\"SEND_SIGNIN_EMAIL_FAILED\"}(mv||(mv={}));class gv{constructor(e){this._requestSender=e}sendSignInEmail(e,t){return g(C(l(mv.SendSignInEmailRequested)),v(()=>{return n=this,i=void 0,o=function*(){const{body:n}=yield this._requestSender.sendSignInEmail(e,t);return l(mv.SendSignInEmailSucceeded,n)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o})).pipe(P(e=>Qe(mv.SendSignInEmailFailed,e)))}}class vv{constructor(e){this._requestSender=e}sendSignInEmail({email:e,redirectUrl:t},{timeout:n}={}){const i=Object.assign({Accept:ut.JsonV1},tt);return this._requestSender.post(\"/login.php?action=passwordless_login\",{body:{email:e,redirect_url:t||bn(window.top?window.top.location.href:\"\").pathname},headers:i,timeout:n})}}class fv{constructor(e){this._messageCustomizer=e}transform(e){var t;return e.message=(t=this._messageCustomizer(e))?t.split(/(?:\\r\\n|\\n|\\r)/).map(e=>e.replace(/^\\s+/gm,\"\")).join(\" \").trim():\"\",e}}let Sv=class{constructor(e,t,n,i,r,o,a,s,d,c,l,u,h,p,m,y,g,v,f,S,_,w,I,C,b,P,O,E,A){this._store=e,this._storeProjection=t,this._extensionMessenger=n,this._extensionEventBroadcaster=i,this._b2bTokenActionCreator=r,this._billingAddressActionCreator=o,this._checkoutActionCreator=a,this._configActionCreator=s,this._customerActionCreator=d,this._consignmentActionCreator=c,this._countryActionCreator=l,this._couponActionCreator=u,this._customerStrategyActionCreator=h,this._errorActionCreator=p,this._giftCertificateActionCreator=m,this._instrumentActionCreator=y,this._orderActionCreator=g,this._paymentMethodActionCreator=v,this._paymentStrategyActionCreator=f,this._pickupOptionActionCreator=S,this._shippingCountryActionCreator=_,this._shippingStrategyActionCreator=w,this._signInEmailActionCreator=I,this._spamProtectionActionCreator=C,this._storeCreditActionCreator=b,this._subscriptionsActionCreator=P,this._formFieldsActionCreator=O,this._extensionActionCreator=E,this._workerExtensionMessenger=A,this._errorTransformer=function(e=\"development\"===St()){return new fv(t=>{if(!e||!function(e){return!(!e.subtype&&!e.type)}(t))return t.message;switch(t.subtype||t.type){case nt.MissingConsignments:return`\\n                ${t.message}\\n                The data could be unavailable because no shipping address has been provided.\\n                To fix this, create a consignment or update the shipping address before performing\\n                the same action again.\\n            `;case nt.MissingCart:case nt.MissingCheckout:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server yet.\\n                To fix this issue, you can try calling \\`CheckoutService#loadCheckout\\`\\n                before performing the same action again.\\n            `;case nt.MissingCheckoutConfig:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server yet.\\n                To fix this issue, you need to make sure \\`CheckoutService\\` is initialized\\n                properly by calling \\`CheckoutService#loadCheckout\\` before performing any\\n                other actions.\\n            `;case nt.MissingOrder:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server yet.\\n                To fix this issue, you can try calling \\`CheckoutService#loadOrder\\`\\n                before performing the same action again.\\n            `;case nt.MissingOrderId:return`\\n                ${t.message}\\n                The data could be unavailable because no order has been created yet. You have\\n                to first create the order before you can perform the action.\\n            `;case nt.MissingPaymentMethod:return`\\n                ${t.message}\\n                The data could be unavailable because it has not loaded from the server, or\\n                configured by the merchant yet. To fix the former issue, you can try calling\\n                \\`CheckoutService#loadPaymentMethods\\` before performing the same action again.\\n            `;case un.CustomerNotInitialized:return\"\\n                In order to initialize the customer step of checkout, you need to call\\n                `CheckoutService#initializeCustomer`. Afterwards, you should be able to\\n                submit customer details.\\n            \";case un.PaymentNotInitialized:return`\\n                ${t.message}\\n                In order to initialize the payment step of checkout, you need to call\\n                \\`CheckoutService#initializePayment\\`. Afterwards, you should be able to\\n                submit payment details.\\n            `;case un.ShippingNotInitialized:return`\\n                ${t.message}\\n                In order to initialize the shipping step of checkout, you need to call\\n                \\`CheckoutService#initializeShipping\\`. Afterwards, you should be able to\\n                submit shipping details.\\n            `;default:return t.message}})}()}getState(){return this._storeProjection.getState()}notifyState(){this._storeProjection.notifyState()}subscribe(e,...t){return this._storeProjection.subscribe(e,...t)}hydrateInitialState(e){return this._dispatch(this._checkoutActionCreator.hydrateInitialState(e))}loadCheckout(e,t){return this._dispatch(e?this._checkoutActionCreator.loadCheckout(e,t):this._checkoutActionCreator.loadDefaultCheckout(t))}updateCheckout(e,t){const n=this._checkoutActionCreator.updateCheckout(e,t);return this._dispatch(n)}loadOrder(e,t){const n=this._orderActionCreator.loadOrder(e,t),i=this._formFieldsActionCreator.loadFormFields(t),r=this._configActionCreator.loadConfig(t);return Promise.all([this._dispatch(n),this._dispatch(r,{queueId:\"config\"}),this._dispatch(i,{queueId:\"formFields\"})]).then(()=>this.getState())}submitOrder(e,t){const n=this._paymentStrategyActionCreator.execute(e,t);return this._dispatch(n,{queueId:\"paymentStrategy\"})}finalizeOrderIfNeeded(e){const t=this._paymentStrategyActionCreator.finalize(e);return this._dispatch(t,{queueId:\"paymentStrategy\"})}loadPaymentMethods(e){const t=this._paymentMethodActionCreator.loadPaymentMethods(e);return this._dispatch(t,{queueId:\"paymentMethods\"})}loadPaymentMethodByIds(e,t){const n=this._paymentMethodActionCreator.loadPaymentMethodsById(e,t);return this._dispatch(n,{queueId:\"paymentMethods\"})}loadPaymentMethod(e,t){const n=this._paymentMethodActionCreator.loadPaymentMethod(e,t);return this._dispatch(n,{queueId:\"paymentMethods\"})}initializePayment(e){const t=this._paymentStrategyActionCreator.initialize(e);return this._dispatch(t,{queueId:\"paymentStrategy\"})}deinitializePayment(e){const t=this._paymentStrategyActionCreator.deinitialize(e);return this._dispatch(t,{queueId:\"paymentStrategy\"})}loadBillingCountries(e){const t=this._countryActionCreator.loadCountries(e);return this._dispatch(t,{queueId:\"billingCountries\"})}loadShippingCountries(e){const t=this._shippingCountryActionCreator.loadCountries(e);return this._dispatch(t,{queueId:\"shippingCountries\"})}loadPickupOptions(e){const t=this._pickupOptionActionCreator.loadPickupOptions(e);return this._dispatch(t,{queueId:\"pickupOptions\"})}loadBillingAddressFields(e){return this.loadBillingCountries(e)}loadShippingAddressFields(e){return this.loadShippingCountries(e)}initializeCustomer(e){const t=this._customerStrategyActionCreator.initialize(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}deinitializeCustomer(e){const t=this._customerStrategyActionCreator.deinitialize(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}sendSignInEmail(e,t){const n=this._signInEmailActionCreator.sendSignInEmail(e,t);return this._dispatch(n,{queueId:\"signInEmail\"})}getB2BToken(e){const t=this._b2bTokenActionCreator.loadB2BToken(e);return this._dispatch(t,{queueId:\"b2bToken\"})}createCustomerAccount(e,t){const n=this._customerActionCreator.createCustomer(e,t);return this._dispatch(n)}createCustomerAddress(e,t){const n=this._customerActionCreator.createAddress(e,t);return this._dispatch(n)}updateSubscriptions(e,t){const n=this._subscriptionsActionCreator.updateSubscriptions(e,t);return this._dispatch(n,{queueId:\"subscriptions\"})}continueAsGuest(e,t){const n=this._billingAddressActionCreator.continueAsGuest(e,t);return this._dispatch(n)}signInCustomer(e,t){const n=this._customerStrategyActionCreator.signIn(e,t);return this._dispatch(n,{queueId:\"customerStrategy\"})}signOutCustomer(e){const t=this._customerStrategyActionCreator.signOut(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}executePaymentMethodCheckout(e){const t=this._customerStrategyActionCreator.executePaymentMethodCheckout(e);return this._dispatch(t,{queueId:\"customerStrategy\"})}loadShippingOptions(e){const t=this._consignmentActionCreator.loadShippingOptions(e);return this._dispatch(t)}initializeShipping(e){const t=this._shippingStrategyActionCreator.initialize(e);return this._dispatch(t,{queueId:\"shippingStrategy\"})}deinitializeShipping(e){const t=this._shippingStrategyActionCreator.deinitialize(e);return this._dispatch(t,{queueId:\"shippingStrategy\"})}selectShippingOption(e,t){const n=this._shippingStrategyActionCreator.selectOption(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}updateShippingAddress(e,t){const n=this._shippingStrategyActionCreator.updateAddress(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}createConsignments(e,t){const n=this._consignmentActionCreator.createConsignments(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}deleteConsignment(e,t){const n=this._consignmentActionCreator.deleteConsignment(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}updateConsignment(e,t){const n=this._consignmentActionCreator.updateConsignment(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}assignItemsToAddress(e,t){const n=this._consignmentActionCreator.assignItemsByAddress(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}unassignItemsToAddress(e,t){const n=this._consignmentActionCreator.unassignItemsByAddress(e,t);return this._dispatch(n,{queueId:\"shippingStrategy\"})}selectConsignmentShippingOption(e,t,n){const i=this._consignmentActionCreator.updateShippingOption({id:e,shippingOptionId:t},n);return this._dispatch(i,{queueId:\"shippingStrategy\"})}updateBillingAddress(e,t={}){const n=this._billingAddressActionCreator.updateAddress(e,t);return this._dispatch(n)}applyStoreCredit(e,t){const n=this._storeCreditActionCreator.applyStoreCredit(e,t);return this._dispatch(n)}applyCoupon(e,t){const n=this._couponActionCreator.applyCoupon(e,t);return this._dispatch(n)}removeCoupon(e,t){const n=this._couponActionCreator.removeCoupon(e,t);return this._dispatch(n)}applyGiftCertificate(e,t){const n=this._giftCertificateActionCreator.applyGiftCertificate(e,t);return this._dispatch(n)}removeGiftCertificate(e,t){const n=this._giftCertificateActionCreator.removeGiftCertificate(e,t);return this._dispatch(n)}loadInstruments(){const e=this._instrumentActionCreator.loadInstruments();return this._dispatch(e)}deleteInstrument(e){const t=this._instrumentActionCreator.deleteInstrument(e);return this._dispatch(t).then(()=>this.loadInstruments())}clearError(e){const t=this._errorActionCreator.clearError(e);return this._dispatch(t)}initializeSpamProtection(e){const t=this._spamProtectionActionCreator.initialize(e);return this._dispatch(t,{queueId:\"spamProtection\"})}executeSpamCheck(){const e=this._spamProtectionActionCreator.verifyCheckoutSpamProtection();return this._dispatch(e,{queueId:\"spamProtection\"})}loadExtensions(e){const t=this._extensionActionCreator.loadExtensions(e);return this._dispatch(t,{queueId:\"extensions\"})}renderExtension(e,t){return n=this,i=void 0,o=function*(){const n=this._extensionActionCreator.renderExtension(e,t,this._workerExtensionMessenger),i=yield this._dispatch(n,{queueId:\"extensions\"});return this._extensionEventBroadcaster.listen(),i},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}clearExtensionCache(e){this._extensionMessenger.clearCacheByRegion(e)}postMessageToExtension(e,t){this._extensionMessenger.post(e,t)}handleExtensionCommand(e,t,n){return this._extensionMessenger.listenForCommand(e,t,n)}handleExtensionQuery(e,t,n){return this._extensionMessenger.listenForQuery(e,t,n)}_dispatch(e,t){return this._store.dispatch(e,t).then(()=>this.getState()).catch(e=>{throw this._errorTransformer.transform(e)})}};Sv=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Bn],Sv);const _v=Sv;function wv(e){return(...t)=>{const n=t.pop();return e(...t,(...e)=>{const t=n(...e);return\"function\"==typeof t?Pe(t):t})}}const Iv=wv(Re),Cv=wv(Fe(Le,(e,t)=>Be(e,t)));class bv extends At{constructor(e,t){super(e,{message:t||\"An unexpected error has occurred. The checkout process cannot continue as a result.\"}),this.name=\"UnrecoverableError\",this.type=\"unrecoverable\"}}function Pv(e){return e.reduce((e,t)=>t?[...e,t]:e,[]).join(\" \")}class Ov extends At{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}class Ev{constructor(){this._factoryMethods={},this.register(\"default\",(e,t)=>new At(e,{message:t})),this.register(\"internal\",(e,t)=>function(e,t){const{body:n}=e,{errors:i=[]}=n;return new At(e,{message:Pv(i)||n.detail||n.title||t,errors:i.length?i.map(e=>({code:n.type,message:e})):[{code:n.type,message:n.detail||n.title}]})}(e,t)),this.register(\"storefront\",(e,t)=>function(e,t){const{body:n}=e;return new At(e,{message:t||n.detail||n.title,errors:[{code:n.code||n.type,message:n.detail||n.title}]})}(e,t)),this.register(\"payment\",(e,t)=>yy(e,t)),this.register(\"timeout\",e=>new Ov(e))}register(e,t){this._factoryMethods[e]=t}createError(e,t){return(this._factoryMethods[this._getType(e)]||this._factoryMethods.default)(e,t)}_getType(e){if(0===e.status)return\"timeout\";if(this._isStorefrontErrorResponseBody(e.body))return\"storefront\";if(this._isInternalErrorResponseBody(e.body)){const t=re(e.body.type.split(\"/\"));return t&&this._factoryMethods[t]?t:\"internal\"}const t=re(e.body&&e.body.errors);return t&&t.code&&this._factoryMethods[t.code]?t.code:\"payment\"}_isStorefrontErrorResponseBody(e){const t=e;return!this._isInternalErrorResponseBody(e)&&\"string\"==typeof t.title&&\"string\"==typeof t.type&&\"number\"==typeof t.status&&\"string\"==typeof t.detail}_isInternalErrorResponseBody(e){const t=e;return\"object\"==typeof t.errors&&\"string\"==typeof t.title&&\"string\"==typeof t.type&&\"number\"==typeof t.status}}function Av(e,t){return Array.isArray(e)?e.map(e=>Av(e,t)):Q(e)?Se(ue(e,t),(e,n,i)=>{e[i]=Av(n,t)},{}):e}function Tv(e,t){return function(e){return e.type===yt.ClearError}(t)?Av(e,e=>e===t.payload):e}function kv(e,t,n){return e===t||(e&&t&&\"object\"==typeof e&&\"object\"==typeof t?Array.isArray(e)&&Array.isArray(t)?function(e,t,n){if(e.length!==t.length)return!1;for(let i=0,r=e.length;i<r;i++)if(!kv(e[i],t[i],n))return!1;return!0}(e,t,n):!Array.isArray(e)&&!Array.isArray(t)&&(e instanceof Date&&t instanceof Date?function(e,t){return e.getTime()===t.getTime()}(e,t):!(e instanceof Date||t instanceof Date)&&(e instanceof RegExp&&t instanceof RegExp?function(e,t){return e.toString()===t.toString()}(e,t):!(e instanceof RegExp||t instanceof RegExp)&&function(e,t,n){const i=n&&n.keyFilter,r=i?Object.keys(e).filter(i):Object.keys(e),o=i?Object.keys(t).filter(i):Object.keys(t);if(r.length!==o.length)return!1;for(let i=0,o=r.length;i<o;i++){const o=r[i];if(!Object.prototype.hasOwnProperty.call(t,o))return!1;if(!kv(e[o],t[o],n))return!1}return!0}(e,t,n))):e===t)}function Dv(e,t,n){return e&&Object.prototype.hasOwnProperty.call(e,t)&&kv(e[t],n)?e:Object.assign(Object.assign({},e),{[t]:n})}const Mv={errors:{},statuses:{}};function zv(e=Mv,t){return d({data:Nv,errors:c(xv,Tv),statuses:Rv})(e,t)}function Nv(e,t){return t.type===Xe.LoadB2BTokenSucceeded?t.payload:e}function xv(e=Mv.errors,t){switch(t.type){case Xe.LoadB2BTokenRequested:case Xe.LoadB2BTokenSucceeded:return Dv(e,\"loadError\",void 0);case Xe.LoadB2BTokenFailed:return Dv(e,\"loadError\",t.payload);default:return e}}function Rv(e=Mv.statuses,t){switch(t.type){case Xe.LoadB2BTokenRequested:return Dv(e,\"isLoading\",!0);case Xe.LoadB2BTokenFailed:case Xe.LoadB2BTokenSucceeded:return Dv(e,\"isLoading\",!1);default:return e}}function Fv(e,t){return void 0===t||kv(e,t)?e:t}const Lv={errors:{},statuses:{}};function Bv(e=Lv,t){return d({data:jv,errors:c(Uv,Tv),statuses:qv})(e,t)}function jv(e,t){var n,i;switch(t.type){case it.UpdateBillingAddressSucceeded:case it.ContinueAsGuestSucceeded:case Kt.LoadCheckoutSucceeded:return Fv(e,t.payload&&t.payload.billingAddress);case Jt.HydrateInitialState:return Fv(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.billingAddress);default:return e}}function Uv(e=Lv.errors,t){switch(t.type){case Kt.LoadCheckoutRequested:case Kt.LoadCheckoutSucceeded:return Dv(e,\"loadError\",void 0);case Kt.LoadCheckoutFailed:return Dv(e,\"loadError\",t.payload);case it.UpdateBillingAddressRequested:case it.UpdateBillingAddressSucceeded:return Dv(e,\"updateError\",void 0);case it.UpdateBillingAddressFailed:return Dv(e,\"updateError\",t.payload);case xg.UpdateSubscriptionsRequested:case xg.UpdateSubscriptionsSucceeded:case it.ContinueAsGuestRequested:case it.ContinueAsGuestSucceeded:return Dv(e,\"continueAsGuestError\",void 0);case xg.UpdateSubscriptionsFailed:case it.ContinueAsGuestFailed:return Dv(e,\"continueAsGuestError\",t.payload);default:return e}}function qv(e=Lv.statuses,t){switch(t.type){case Kt.LoadCheckoutRequested:return Dv(e,\"isLoading\",!0);case Kt.LoadCheckoutSucceeded:case Kt.LoadCheckoutFailed:return Dv(e,\"isLoading\",!1);case it.UpdateBillingAddressRequested:return Dv(e,\"isUpdating\",!0);case it.UpdateBillingAddressFailed:case it.UpdateBillingAddressSucceeded:return Dv(e,\"isUpdating\",!1);case it.ContinueAsGuestRequested:case xg.UpdateSubscriptionsRequested:return Dv(e,\"isContinuingAsGuest\",!0);case xg.UpdateSubscriptionsSucceeded:case xg.UpdateSubscriptionsFailed:case it.ContinueAsGuestFailed:case it.ContinueAsGuestSucceeded:return Dv(e,\"isContinuingAsGuest\",!1);default:return e}}const Vv=function e(t,n,i){const{matchObject:r=(e,t)=>void 0!==e.id&&e.id===t.id}=i||{};if(!t)return n;if(!n||t===n)return t;let o=0,a=0;const s=(e,t,n)=>(o+=e===t?1:0,a+=e===n?1:0,e),d=n.map((n,i)=>{const o=t&&t[i];return Ug(o)&&Ug(n)?r(o,n)?s(Gv(o,n),o,n):s(Fv(o,n),o,n):W(o)&&W(n)?s(e(o,n),o,n):s(Fv(o,n),o,n)});return o===n.length&&t&&t.length===n.length?t:a===n.length?n:d},Gv=function e(t,n){return t?n&&t!==n?Object.keys(n).reduce((t,i)=>{const r=t[i],o=n[i];return Ug(r)&&Ug(o)?Dv(t,i,e(r,o)):W(r)&&W(o)?Dv(t,i,Vv(r,o)):Dv(t,i,o)},t):t:n},Hv={errors:{},statuses:{}};function Wv(e=Hv,t){return d({data:$v,errors:c(Kv,Tv),statuses:Yv})(e,t)}function $v(e,t){var n,i;switch(t.type){case it.UpdateBillingAddressSucceeded:case Kt.LoadCheckoutSucceeded:case Pg.CreateConsignmentsSucceeded:case Pg.DeleteConsignmentSucceeded:case Pg.UpdateConsignmentSucceeded:case Pg.UpdateShippingOptionSucceeded:case Pg.LoadShippingOptionsSucceeded:case Mt.ApplyCouponSucceeded:case Mt.RemoveCouponSucceeded:case Rt.ApplyGiftCertificateSucceeded:case Rt.RemoveGiftCertificateSucceeded:return Gv(e,t.payload&&t.payload.cart);case Jt.HydrateInitialState:return Gv(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.cart);default:return e}}function Yv(e=Hv.statuses,t){switch(t.type){case Kt.LoadCheckoutRequested:return Dv(e,\"isLoading\",!0);case Kt.LoadCheckoutFailed:case Kt.LoadCheckoutSucceeded:return Dv(e,\"isLoading\",!1);default:return e}}function Kv(e=Hv.errors,t){switch(t.type){case Kt.LoadCheckoutRequested:case Kt.LoadCheckoutSucceeded:return Dv(e,\"loadError\",void 0);case Kt.LoadCheckoutFailed:return Dv(e,\"loadError\",t.payload);default:return e}}var Jv;!function(e){e.InitializeButtonFailed=\"INITIALIZE_BUTTON_FAILED\",e.InitializeButtonRequested=\"INITIALIZE_BUTTON_REQUESTED\",e.InitializeButtonSucceeded=\"INITIALIZE_BUTTON_SUCCEEDED\",e.DeinitializeButtonFailed=\"DEINITIALIZE_BUTTON_FAILED\",e.DeinitializeButtonRequested=\"DEINITIALIZE_BUTTON_REQUESTED\",e.DeinitializeButtonSucceeded=\"DEINITIALIZE_BUTTON_SUCCEEDED\"}(Jv||(Jv={}));const Zv={data:{},errors:{},statuses:{}},Qv={initializedContainers:{}},Xv={},ef={};function tf(e=Zv,t){return t.meta&&t.meta.methodId?d({data:d({[t.meta.methodId]:nf}),errors:d({[t.meta.methodId]:rf}),statuses:d({[t.meta.methodId]:of})})(e,t):e}function nf(e=Qv,t){switch(t.type){case Jv.InitializeButtonSucceeded:return t.meta&&t.meta.containerId?Gv(e,{initializedContainers:{[t.meta.containerId]:!0}}):e;case Jv.DeinitializeButtonSucceeded:return Dv(e,\"initializedContainers\",{})}return e}function rf(e=Xv,t){switch(t.type){case Jv.InitializeButtonRequested:case Jv.InitializeButtonSucceeded:return Dv(e,\"initializeError\",void 0);case Jv.InitializeButtonFailed:return Dv(e,\"initializeError\",t.payload);case Jv.DeinitializeButtonRequested:case Jv.DeinitializeButtonSucceeded:return Dv(e,\"deinitializeError\",void 0);case Jv.DeinitializeButtonFailed:return Dv(e,\"deinitializeError\",t.payload);default:return e}}function of(e=ef,t){switch(t.type){case Jv.InitializeButtonRequested:return Dv(e,\"isInitializing\",!0);case Jv.InitializeButtonFailed:case Jv.InitializeButtonSucceeded:return Dv(e,\"isInitializing\",!1);case Jv.DeinitializeButtonRequested:return Dv(e,\"isDeinitializing\",!0);case Jv.DeinitializeButtonFailed:case Jv.DeinitializeButtonSucceeded:return Dv(e,\"isDeinitializing\",!1);default:return e}}const af={meta:{},errors:{},statuses:{}};function sf(e=af,t){return d({data:df,errors:c(cf,Tv),statuses:lf})(e,t)}function df(e,t){var n,i;switch(t.type){case Pt.LoadConfigSucceeded:return Gv(e,t.payload);case Jt.HydrateInitialState:{const r=Gv(e,null===(n=t.payload)||void 0===n?void 0:n.config);return r&&(null===(i=t.payload)||void 0===i?void 0:i.b2bApiSettings)?Object.assign(Object.assign({},r),{storeConfig:Object.assign(Object.assign({},r.storeConfig),{b2bApiSettings:t.payload.b2bApiSettings})}):r}default:return e}}function cf(e=af.errors,t){switch(t.type){case Pt.LoadConfigSucceeded:return Dv(e,\"loadError\",void 0);case Pt.LoadConfigFailed:return Dv(e,\"loadError\",t.payload);default:return e}}function lf(e=af.statuses,t){switch(t.type){case Pt.LoadConfigRequested:return Dv(e,\"isLoading\",!0);case Pt.LoadConfigSucceeded:case Pt.LoadConfigFailed:return Dv(e,\"isLoading\",!1);default:return e}}const uf={errors:{},statuses:{}};function hf(e=uf,t){return d({data:pf,errors:c(mf,Tv),statuses:yf})(e,t)}function pf(e,t){var n,i;switch(t.type){case Kt.LoadCheckoutSucceeded:case Mt.ApplyCouponSucceeded:case Pg.UpdateShippingOptionSucceeded:case Mt.RemoveCouponSucceeded:case Nm.LoadOrderSucceeded:return Vv(e,t.payload&&t.payload.coupons);case Jt.HydrateInitialState:return Vv(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.coupons);default:return e}}function mf(e={},t){switch(t.type){case Mt.ApplyCouponRequested:case Mt.ApplyCouponSucceeded:return Dv(e,\"applyCouponError\",void 0);case Mt.ApplyCouponFailed:return Dv(e,\"applyCouponError\",t.payload);case Mt.RemoveCouponRequested:case Mt.RemoveCouponSucceeded:return Dv(e,\"removeCouponError\",void 0);case Mt.RemoveCouponFailed:return Dv(e,\"removeCouponError\",t.payload);default:return e}}function yf(e={},t){switch(t.type){case Mt.ApplyCouponRequested:return Dv(e,\"isApplyingCoupon\",!0);case Mt.ApplyCouponSucceeded:case Mt.ApplyCouponFailed:return Dv(e,\"isApplyingCoupon\",!1);case Mt.RemoveCouponRequested:return Dv(e,\"isRemovingCoupon\",!0);case Mt.RemoveCouponSucceeded:case Mt.RemoveCouponFailed:return Dv(e,\"isRemovingCoupon\",!1);default:return e}}const gf={errors:{},statuses:{}};function vf(e=gf,t){return d({data:ff,errors:c(Sf,Tv),statuses:_f})(e,t)}function ff(e,t){var n,i;switch(t.type){case Kt.LoadCheckoutSucceeded:case Pg.CreateConsignmentsSucceeded:case Pg.UpdateConsignmentSucceeded:case Pg.DeleteConsignmentSucceeded:case Pg.UpdateShippingOptionSucceeded:case Mt.ApplyCouponSucceeded:case Mt.RemoveCouponSucceeded:case Rt.ApplyGiftCertificateSucceeded:case Rt.RemoveGiftCertificateSucceeded:return Vv(e,t.payload&&t.payload.giftCertificates);case Jt.HydrateInitialState:return Vv(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.giftCertificates);default:return e}}function Sf(e=gf.errors,t){switch(t.type){case Rt.ApplyGiftCertificateRequested:case Rt.ApplyGiftCertificateSucceeded:return Dv(e,\"applyGiftCertificateError\",void 0);case Rt.ApplyGiftCertificateFailed:return Dv(e,\"applyGiftCertificateError\",t.payload);case Rt.RemoveGiftCertificateRequested:case Rt.RemoveGiftCertificateSucceeded:return Dv(e,\"removeGiftCertificateError\",void 0);case Rt.RemoveGiftCertificateFailed:return Dv(e,\"removeGiftCertificateError\",t.payload);default:return e}}function _f(e=gf.statuses,t){switch(t.type){case Rt.ApplyGiftCertificateRequested:return Dv(e,\"isApplyingGiftCertificate\",!0);case Rt.ApplyGiftCertificateSucceeded:case Rt.ApplyGiftCertificateFailed:return Dv(e,\"isApplyingGiftCertificate\",!1);case Rt.RemoveGiftCertificateRequested:return Dv(e,\"isRemovingGiftCertificate\",!0);case Rt.RemoveGiftCertificateSucceeded:case Rt.RemoveGiftCertificateFailed:return Dv(e,\"isRemovingGiftCertificate\",!1);default:return e}}const wf={errors:{},statuses:{}};function If(e=wf,t){return d({data:Cf,errors:c(bf,Tv),statuses:Pf})(e,t)}function Cf(e,t){var n,i;switch(t.type){case it.ContinueAsGuestSucceeded:case Kt.LoadCheckoutSucceeded:return Gv(e,t.payload&&t.payload.customer);case Lt.CreateCustomerAddressSucceeded:return Gv(e,t.payload);case Jt.HydrateInitialState:return Gv(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.customer);default:return e}}function bf(e=wf.errors,t){switch(t.type){case Lt.CreateCustomerRequested:case Lt.CreateCustomerSucceeded:return Dv(e,\"createError\",void 0);case Lt.CreateCustomerFailed:return Dv(e,\"createError\",t.payload);case Lt.CreateCustomerAddressRequested:case Lt.CreateCustomerAddressSucceeded:return Dv(e,\"createAddressError\",void 0);case Lt.CreateCustomerAddressFailed:return Dv(e,\"createAddressError\",t.payload);default:return e}}function Pf(e=wf.statuses,t){switch(t.type){case Lt.CreateCustomerRequested:return Dv(e,\"isCreating\",!0);case Lt.CreateCustomerFailed:case Lt.CreateCustomerSucceeded:return Dv(e,\"isCreating\",!1);case Lt.CreateCustomerAddressRequested:return Dv(e,\"isCreatingAddress\",!0);case Lt.CreateCustomerAddressFailed:case Lt.CreateCustomerAddressSucceeded:return Dv(e,\"isCreatingAddress\",!1);default:return e}}const Of={data:{},errors:{},statuses:{}};function Ef(e=Of,t){return d({data:Af,errors:c(Tf,Tv),statuses:kf})(e,t)}function Af(e=Of.data,t){switch(t.type){case Yt.InitializeSucceeded:return Gv(e,{[t.meta&&t.meta.methodId]:{isInitialized:!0}});case Yt.DeinitializeSucceeded:return Gv(e,{[t.meta&&t.meta.methodId]:{isInitialized:!1}})}return e}function Tf(e=Of.errors,t){switch(t.type){case Yt.InitializeRequested:case Yt.InitializeSucceeded:return Gv(e,{initializeErrors:Object.assign({},e.initializeErrors),initializeMethodId:e.initializeMethodId?e.initializeMethodId:void 0});case Yt.InitializeFailed:return Gv(e,{initializeErrors:Object.assign(Object.assign({},e.initializeErrors),{[t.meta&&t.meta.methodId]:t.payload}),initializeMethodId:t.meta&&t.meta.methodId});case Yt.DeinitializeRequested:case Yt.DeinitializeSucceeded:return Gv(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case Yt.DeinitializeFailed:return Gv(e,{deinitializeError:t.payload,deinitializeMethodId:t.meta&&t.meta.methodId});case Yt.SignInRequested:case Yt.SignInSucceeded:return Gv(e,{signInError:void 0,signInMethodId:void 0});case Yt.SignInFailed:return Gv(e,{signInError:t.payload,signInMethodId:t.meta&&t.meta.methodId});case Yt.SignOutRequested:case Yt.SignOutSucceeded:return Gv(e,{signOutError:void 0,signOutMethodId:void 0});case Yt.SignOutFailed:return Gv(e,{signOutError:t.payload,signOutMethodId:t.meta&&t.meta.methodId});case Yt.ExecutePaymentMethodCheckoutRequested:case Yt.ExecutePaymentMethodCheckoutSucceeded:return Gv(e,{executePaymentMethodCheckoutError:void 0,executePaymentMethodCheckoutMethodId:void 0});case Yt.ExecutePaymentMethodCheckoutFailed:return Gv(e,{executePaymentMethodCheckoutError:t.payload,executePaymentMethodCheckoutMethodId:t.meta&&t.meta.methodId});case Yt.WidgetInteractionStarted:case Yt.WidgetInteractionFinished:return Gv(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case Yt.WidgetInteractionFailed:return Gv(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta.methodId});default:return e}}function kf(e=Of.statuses,t){switch(t.type){case Yt.InitializeRequested:return Gv(e,{isInitializing:!0,initializeMethodId:t.meta&&t.meta.methodId});case Yt.InitializeFailed:case Yt.InitializeSucceeded:return Gv(e,{isInitializing:!1,initializeMethodId:void 0});case Yt.DeinitializeRequested:return Gv(e,{isDeinitializing:!0,deinitializeMethodId:t.meta&&t.meta.methodId});case Yt.DeinitializeFailed:case Yt.DeinitializeSucceeded:return Gv(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case Yt.SignInRequested:return Gv(e,{isSigningIn:!0,signInMethodId:t.meta&&t.meta.methodId});case Yt.SignInFailed:case Yt.SignInSucceeded:return Gv(e,{isSigningIn:!1,signInMethodId:void 0});case Yt.SignOutRequested:return Gv(e,{isSigningOut:!0,signOutMethodId:t.meta&&t.meta.methodId});case Yt.SignOutFailed:case Yt.SignOutSucceeded:return Gv(e,{isSigningOut:!1,signOutMethodId:void 0});case Yt.ExecutePaymentMethodCheckoutRequested:return Gv(e,{isExecutingPaymentMethodCheckout:!0,executePaymentMethodCheckoutMethodId:t.meta&&t.meta.methodId});case Yt.ExecutePaymentMethodCheckoutFailed:case Yt.ExecutePaymentMethodCheckoutSucceeded:return Gv(e,{isExecutingPaymentMethodCheckout:!1,executePaymentMethodCheckoutMethodId:void 0});case Yt.WidgetInteractionStarted:return Gv(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta.methodId});case Yt.WidgetInteractionFinished:case Yt.WidgetInteractionFailed:return Gv(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}const Df={errors:{},statuses:{}};function Mf(e=Df,t){return d({data:zf,errors:c(Nf,Tv),statuses:xf})(e,t)}function zf(e,t){var n;return t.type===hn.LoadExtensionsSucceeded?Vv(e,t.payload):t.type===Jt.HydrateInitialState?Vv(e,null===(n=t.payload)||void 0===n?void 0:n.extensions):e}function Nf(e=Df.errors,t){switch(t.type){case hn.LoadExtensionsRequested:case hn.LoadExtensionsSucceeded:return Dv(e,\"loadError\",void 0);case hn.RenderExtensionRequested:case hn.RenderExtensionSucceeded:return Dv(e,\"renderError\",void 0);case hn.LoadExtensionsFailed:return Dv(e,\"loadError\",t.payload);case hn.RenderExtensionFailed:return Dv(e,\"renderError\",t.payload);default:return e}}function xf(e=Df.statuses,t){switch(t.type){case hn.LoadExtensionsRequested:return Dv(e,\"isLoading\",!0);case hn.LoadExtensionsSucceeded:case hn.LoadExtensionsFailed:return Dv(e,\"isLoading\",!1);default:return e}}const Rf={errors:{},statuses:{}};function Ff(e=Rf,t){return d({data:Lf,extraFields:Bf,errors:c(jf,Tv),statuses:Uf})(e,t)}function Lf(e,t){var n;switch(t.type){case rn.LoadFormFieldsSucceeded:return Gv(e,t.payload);case Jt.HydrateInitialState:return Gv(e,null===(n=t.payload)||void 0===n?void 0:n.formFields);default:return e}}function Bf(e,t){var n,i;return t.type===Jt.HydrateInitialState&&null!==(i=null===(n=t.payload)||void 0===n?void 0:n.extraFields)&&void 0!==i?i:e}function jf(e=Rf.errors,t){switch(t.type){case rn.LoadFormFieldsSucceeded:return Dv(e,\"loadError\",void 0);case rn.LoadFormFieldsFailed:return Dv(e,\"loadError\",t.payload);default:return e}}function Uf(e=Rf.statuses,t){switch(t.type){case rn.LoadFormFieldsRequested:return Dv(e,\"isLoading\",!0);case rn.LoadFormFieldsSucceeded:case rn.LoadFormFieldsFailed:return Dv(e,\"isLoading\",!1);default:return e}}const qf={errors:{},statuses:{}};function Vf(e=qf,t){return d({data:Gf,errors:c(Hf,Tv),statuses:Wf})(e,t)}function Gf(e,t){return t.type===zm.LoadCountriesSucceeded?Vv(e,t.payload):e}function Hf(e=qf.errors,t){switch(t.type){case zm.LoadCountriesRequested:case zm.LoadCountriesSucceeded:return Dv(e,\"loadError\",void 0);case zm.LoadCountriesFailed:return Dv(e,\"loadError\",t.payload);default:return e}}function Wf(e=qf.statuses,t){switch(t.type){case zm.LoadCountriesRequested:return Dv(e,\"isLoading\",!0);case zm.LoadCountriesSucceeded:case zm.LoadCountriesFailed:return Dv(e,\"isLoading\",!1);default:return e}}const $f={errors:{},meta:{},statuses:{}};function Yf(e=$f,t){return d({data:Kf,errors:c(Zf,Tv),meta:Jf,statuses:Qf})(e,t)}function Kf(e,t){switch(t.type){case Nm.LoadOrderSucceeded:case Nm.LoadOrderPaymentsSucceeded:return Gv(e,le(t.payload,[\"billingAddress\",\"coupons\"]));default:return e}}function Jf(e,t){switch(t.type){case Nm.FinalizeOrderSucceeded:case Nm.SubmitOrderSucceeded:return Gv(e,Object.assign(Object.assign({},t.meta),{callbackUrl:t.payload&&t.payload.order.callbackUrl,orderToken:t.payload&&t.payload.order.token,payment:t.payload&&t.payload.order&&t.payload.order.payment}));default:return e}}function Zf(e=$f.errors,t){switch(t.type){case Nm.LoadOrderRequested:case Nm.LoadOrderSucceeded:case Nm.LoadOrderPaymentsSucceeded:case Nm.LoadOrderPaymentsRequested:return Dv(e,\"loadError\",void 0);case Nm.LoadOrderFailed:case Nm.LoadOrderPaymentsFailed:return Dv(e,\"loadError\",t.payload);default:return e}}function Qf(e=$f.statuses,t){switch(t.type){case Nm.LoadOrderRequested:case Nm.LoadOrderPaymentsRequested:return Dv(e,\"isLoading\",!0);case Nm.LoadOrderSucceeded:case Nm.LoadOrderFailed:case Nm.LoadOrderPaymentsSucceeded:case Nm.LoadOrderPaymentsFailed:return Dv(e,\"isLoading\",!1);default:return e}}const Xf={};function eS(e=Xf,t){return d({data:tS})(e,t)}function tS(e,t){switch(t.type){case Nm.LoadOrderPaymentsSucceeded:case Nm.LoadOrderSucceeded:return Fv(e,t.payload&&t.payload.billingAddress);default:return e}}function nS(e={},t){return d({data:iS})(e,t)}function iS(e,t){return t.type===Iy.SubmitPaymentSucceeded?t.payload:e}const rS={errors:{},statuses:{}};function oS(e=rS,t){return d({data:aS,errors:c(dS,Tv),meta:sS,statuses:cS})(e,t)}function aS(e,t){switch(t.type){case Wm.LoadPaymentMethodSucceeded:return function(e,t,n){if(!t)return e;const i=pe(t,\"id\"),r=\"object\"==typeof n?me(n):n||i,o=j(e,r),a=[...e];if(-1===o)a.push(t);else{const n=e[o];a[o]=Ug(n)&&Ug(t)?Gv(n,t):t}return a}(e||[],t.payload,t.payload&&{id:t.payload.id,gateway:t.payload.gateway});case Wm.LoadPaymentMethodsSucceeded:return Vv(e,t.payload,{matchObject:(e,t)=>e.id===t.id&&e.gateway===t.gateway});default:return e}}function sS(e,t){return t.type===Wm.LoadPaymentMethodsSucceeded?Gv(e,t.meta):e}function dS(e=rS.errors,t){switch(t.type){case Wm.LoadPaymentMethodsRequested:case Wm.LoadPaymentMethodsSucceeded:return Dv(e,\"loadError\",void 0);case Wm.LoadPaymentMethodsFailed:return Dv(e,\"loadError\",t.payload);case Wm.LoadPaymentMethodRequested:case Wm.LoadPaymentMethodSucceeded:return Gv(e,{loadMethodId:void 0,loadMethodError:void 0});case Wm.LoadPaymentMethodFailed:return Gv(e,{loadMethodId:t.meta.methodId,loadMethodError:t.payload});default:return e}}function cS(e=rS.statuses,t){switch(t.type){case Wm.LoadPaymentMethodsRequested:return Dv(e,\"isLoading\",!0);case Wm.LoadPaymentMethodsSucceeded:case Wm.LoadPaymentMethodsFailed:return Dv(e,\"isLoading\",!1);case Wm.LoadPaymentMethodRequested:return Gv(e,{isLoadingMethod:!0,loadMethodId:t.meta.methodId});case Wm.LoadPaymentMethodSucceeded:case Wm.LoadPaymentMethodFailed:return Gv(e,{isLoadingMethod:!1,loadMethodId:void 0});default:return e}}const lS={data:{},errors:{},statuses:{}};function uS(e=lS,t){return d({data:hS,errors:c(pS,Tv),statuses:mS})(e,t)}function hS(e=lS.data,t){switch(t.type){case Qm.InitializeSucceeded:if(t.meta){const{methodId:n,gatewayId:i}=t.meta,r=i?`${n}.${i}`:n;return Gv(e,{[r]:{isInitialized:!0}})}break;case Qm.DeinitializeSucceeded:if(t.meta){const{methodId:n,gatewayId:i}=t.meta,r=i?`${n}.${i}`:n;return Gv(e,{[r]:{isInitialized:!1}})}}return e}function pS(e=lS.errors,t){switch(t.type){case Qm.InitializeRequested:case Qm.InitializeSucceeded:return Gv(e,{initializeError:void 0,initializeMethodId:void 0});case Qm.InitializeFailed:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return Gv(e,{initializeError:t.payload,initializeMethodId:n})}case Qm.DeinitializeRequested:case Qm.DeinitializeSucceeded:return Gv(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case Qm.DeinitializeFailed:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return Gv(e,{deinitializeError:t.payload,deinitializeMethodId:n})}case Qm.ExecuteRequested:case Qm.ExecuteSucceeded:return Gv(e,{executeError:void 0,executeMethodId:void 0});case Qm.ExecuteFailed:return Gv(e,{executeError:t.payload,executeMethodId:t.meta&&t.meta.methodId});case Qm.FinalizeRequested:case Qm.FinalizeSucceeded:return Gv(e,{finalizeError:void 0,finalizeMethodId:void 0});case Qm.FinalizeFailed:return Gv(e,{finalizeError:t.payload,finalizeMethodId:t.meta&&t.meta.methodId});case Qm.WidgetInteractionStarted:case Qm.WidgetInteractionFinished:return Gv(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case Qm.WidgetInteractionFailed:return Gv(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta.methodId});default:return e}}function mS(e=lS.statuses,t){switch(t.type){case Qm.InitializeRequested:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return Gv(e,{isInitializing:!0,initializeMethodId:n})}case Qm.InitializeFailed:case Qm.InitializeSucceeded:return Gv(e,{isInitializing:!1,initializeMethodId:void 0});case Qm.DeinitializeRequested:{let n=t.meta&&t.meta.methodId;if(t.meta){const{methodId:e,gatewayId:i}=t.meta;n=i?`${e}.${i}`:e}return Gv(e,{isDeinitializing:!0,deinitializeMethodId:n})}case Qm.DeinitializeFailed:case Qm.DeinitializeSucceeded:return Gv(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case Qm.ExecuteRequested:return Gv(e,{isExecuting:!0,executeMethodId:t.meta&&t.meta.methodId});case Qm.ExecuteFailed:case Qm.ExecuteSucceeded:return Gv(e,{isExecuting:!1,executeMethodId:void 0});case Qm.FinalizeRequested:return Gv(e,{isFinalizing:!0,finalizeMethodId:t.meta&&t.meta.methodId});case Qm.FinalizeFailed:case Qm.FinalizeSucceeded:return Gv(e,{isFinalizing:!1,finalizeMethodId:void 0});case Qm.WidgetInteractionStarted:return Gv(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta.methodId});case Qm.WidgetInteractionFinished:case Qm.WidgetInteractionFailed:return Gv(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}const yS={data:{}};function gS(e=yS,t){return d({data:vS})(e,t)}function vS(e=yS.data,t){return t.type===Sg.UpdatePaymentProviderCustomer?Gv(e,t.payload):e}const fS={data:[],errors:{},statuses:{}};function SS(e=fS,t){return d({data:_S,errors:c(IS,Tv),meta:wS,statuses:CS})(e,t)}function _S(e=fS.data,t){return t.type===Wg.LoadInstrumentsSucceeded?Vv(e,t.payload&&t.payload.vaultedInstruments||[]):e}function wS(e,t){switch(t.type){case Wg.LoadInstrumentsSucceeded:case Wg.DeleteInstrumentSucceeded:return Gv(e,t.meta);default:return e}}function IS(e=fS.errors,t){switch(t.type){case Wg.LoadInstrumentsRequested:case Wg.LoadInstrumentsSucceeded:return Dv(e,\"loadError\",void 0);case Wg.DeleteInstrumentRequested:case Wg.DeleteInstrumentSucceeded:return Gv(e,{deleteError:void 0,failedInstrument:void 0});case Wg.LoadInstrumentsFailed:return Dv(e,\"loadError\",t.payload);case Wg.DeleteInstrumentFailed:return Gv(e,{deleteError:t.payload,failedInstrument:t.meta.instrumentId});default:return e}}function CS(e=fS.statuses,t){switch(t.type){case Wg.LoadInstrumentsRequested:return Dv(e,\"isLoading\",!0);case Wg.DeleteInstrumentRequested:return Gv(e,{isDeleting:!0,deletingInstrument:t.meta.instrumentId});case Wg.LoadInstrumentsSucceeded:case Wg.LoadInstrumentsFailed:return Dv(e,\"isLoading\",!1);case Wg.DeleteInstrumentSucceeded:case Wg.DeleteInstrumentFailed:return Gv(e,{isDeleting:!1,deletingInstrument:void 0});default:return e}}const bS={data:{}};function PS(e=bS,t){return t.meta&&t.meta.methodId?d({data:d({[t.meta.methodId]:OS})})(e,t):e}function OS(e,t){switch(t.type){case _g.InitializeRemoteBillingSucceeded:return Dv(e,\"billing\",t.payload&&t.payload.billing);case _g.InitializeRemoteShippingSucceeded:return Dv(e,\"shipping\",t.payload&&t.payload.shipping);case _g.LoadRemoteSettingsSucceeded:return Dv(e,\"settings\",t.payload);case _g.UpdateRemoteCheckout:return Gv(e,t.payload);default:return e}}const ES={errors:{updateShippingOptionError:{},updateError:{},deleteError:{}},statuses:{isUpdating:{},isUpdatingShippingOption:{},isDeleting:{}}};function AS(e=ES,t){return d({data:TS,errors:c(kS,Tv),statuses:DS})(e,t)}function TS(e,t){var n,i;switch(t.type){case Kt.LoadCheckoutSucceeded:case Pg.LoadShippingOptionsSucceeded:case Pg.CreateConsignmentsSucceeded:case Pg.UpdateConsignmentSucceeded:case Pg.DeleteConsignmentSucceeded:case Pg.UpdateShippingOptionSucceeded:case Mt.ApplyCouponSucceeded:case Mt.RemoveCouponSucceeded:return Vv(e,t.payload&&t.payload.consignments);case Lt.SignOutCustomerSucceeded:return Vv(e,[]);case Jt.HydrateInitialState:return Vv(e,null===(i=null===(n=t.payload)||void 0===n?void 0:n.checkout)||void 0===i?void 0:i.consignments);default:return e}}function kS(e=ES.errors,t){switch(t.type){case Kt.LoadCheckoutRequested:case Kt.LoadCheckoutSucceeded:case Pg.LoadShippingOptionsSucceeded:case Pg.LoadShippingOptionsRequested:return Dv(e,\"loadError\",void 0);case Kt.LoadCheckoutFailed:case Pg.LoadShippingOptionsFailed:return Dv(e,\"loadError\",t.payload);case Pg.CreateConsignmentsRequested:case Pg.CreateConsignmentsSucceeded:return Dv(e,\"createError\",void 0);case Pg.CreateConsignmentsFailed:return Dv(e,\"createError\",t.payload);case Pg.UpdateConsignmentSucceeded:case Pg.UpdateConsignmentRequested:return t.meta?Gv(e,{updateError:{[t.meta.id]:void 0}}):e;case Pg.UpdateConsignmentFailed:return t.meta?Gv(e,{updateError:{[t.meta.id]:t.payload}}):e;case Pg.DeleteConsignmentSucceeded:case Pg.DeleteConsignmentRequested:return t.meta?Gv(e,{deleteError:{[t.meta.id]:void 0}}):e;case Pg.DeleteConsignmentFailed:return t.meta?Gv(e,{deleteError:{[t.meta.id]:t.payload}}):e;case Pg.UpdateShippingOptionRequested:case Pg.UpdateShippingOptionSucceeded:return t.meta?Gv(e,{updateShippingOptionError:{[t.meta.id]:void 0}}):e;case Pg.UpdateShippingOptionFailed:return t.meta?Gv(e,{updateShippingOptionError:{[t.meta.id]:t.payload}}):e;default:return e}}function DS(e=ES.statuses,t){switch(t.type){case Kt.LoadCheckoutRequested:return Dv(e,\"isLoading\",!0);case Pg.LoadShippingOptionsRequested:return Dv(e,\"isLoadingShippingOptions\",!0);case Kt.LoadCheckoutSucceeded:case Kt.LoadCheckoutFailed:return Dv(e,\"isLoading\",!1);case Pg.LoadShippingOptionsSucceeded:case Pg.LoadShippingOptionsFailed:return Dv(e,\"isLoadingShippingOptions\",!1);case Pg.CreateConsignmentsRequested:return Dv(e,\"isCreating\",!0);case Pg.CreateConsignmentsSucceeded:case Pg.CreateConsignmentsFailed:return Dv(e,\"isCreating\",!1);case Pg.UpdateConsignmentRequested:return t.meta?Gv(e,{isUpdating:{[t.meta.id]:!0}}):e;case Pg.UpdateConsignmentSucceeded:case Pg.UpdateConsignmentFailed:return t.meta?Gv(e,{isUpdating:{[t.meta.id]:!1}}):e;case Pg.DeleteConsignmentRequested:return t.meta?Gv(e,{isDeleting:{[t.meta.id]:!0}}):e;case Pg.DeleteConsignmentSucceeded:case Pg.DeleteConsignmentFailed:return t.meta?Gv(e,{isDeleting:{[t.meta.id]:!1}}):e;case Pg.UpdateShippingOptionRequested:return t.meta?Gv(e,{isUpdatingShippingOption:{[t.meta.id]:!0}}):e;case Pg.UpdateShippingOptionSucceeded:case Pg.UpdateShippingOptionFailed:return t.meta?Gv(e,{isUpdatingShippingOption:{[t.meta.id]:!1}}):e;default:return e}}function MS(e,t){const n={};return Object.keys(e).forEach(i=>{const r=e[i],o=t?`${t}.${i}`:i;\"object\"==typeof r?Object.assign(n,MS(r,o)):n[o]=r}),n}function zS(e){return Object.keys(e).sort().reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:e[n]}),{})}const NS={errors:{},statuses:{}};function xS(e=NS,t){return d({data:RS,errors:c(FS,Tv),statuses:LS})(e,t)}function RS(e,t){if(t.type!==Qg.LoadPickupOptionsSucceeded)return e;if(t.meta){const n=zS(MS({consignmentId:t.meta.consignmentId,searchArea:t.meta.searchArea}));return Dv(e,btoa(`${JSON.stringify(n)}`),t.payload)}}function FS(e=NS.errors,t){switch(t.type){case Qg.LoadPickupOptionsRequested:case Qg.LoadPickupOptionsSucceeded:return Dv(e,\"loadError\",void 0);case Qg.LoadPickupOptionsFailed:return Dv(e,\"loadError\",t.payload);default:return e}}function LS(e=NS.statuses,t){switch(t.type){case Qg.LoadPickupOptionsRequested:return Dv(e,\"isLoading\",!0);case Qg.LoadPickupOptionsSucceeded:case Qg.LoadPickupOptionsFailed:return Dv(e,\"isLoading\",!1);default:return e}}const BS={errors:{},statuses:{}};function jS(e=BS,t){return d({data:US,errors:c(qS,Tv),statuses:VS})(e,t)}function US(e,t){return t.type===Dg.LoadShippingCountriesSucceeded?Vv(e,t.payload):e}function qS(e=BS.errors,t){switch(t.type){case Dg.LoadShippingCountriesRequested:case Dg.LoadShippingCountriesSucceeded:return Dv(e,\"loadError\",void 0);case Dg.LoadShippingCountriesFailed:return Dv(e,\"loadError\",t.payload);default:return e}}function VS(e=BS.statuses,t){switch(t.type){case Dg.LoadShippingCountriesRequested:return Dv(e,\"isLoading\",!0);case Dg.LoadShippingCountriesSucceeded:case Dg.LoadShippingCountriesFailed:return Dv(e,\"isLoading\",!1);default:return e}}const GS={data:{},errors:{},statuses:{}};function HS(e=GS,t){return d({data:WS,errors:c($S,Tv),statuses:YS})(e,t)}function WS(e=GS.data,t){switch(t.type){case Xg.InitializeSucceeded:return Gv(e,{[t.meta&&t.meta.methodId]:{isInitialized:!0}});case Xg.DeinitializeSucceeded:return Gv(e,{[t.meta&&t.meta.methodId]:{isInitialized:!1}})}return e}function $S(e=GS.errors,t){switch(t.type){case Xg.InitializeRequested:case Xg.InitializeSucceeded:return Gv(e,{initializeError:void 0,initializeMethodId:void 0});case Xg.InitializeFailed:return Gv(e,{initializeError:t.payload,initializeMethodId:t.meta&&t.meta.methodId});case Xg.DeinitializeRequested:case Xg.DeinitializeSucceeded:return Gv(e,{deinitializeError:void 0,deinitializeMethodId:void 0});case Xg.DeinitializeFailed:return Gv(e,{deinitializeError:t.payload,deinitializeMethodId:t.meta&&t.meta.methodId});case Xg.UpdateAddressRequested:case Xg.UpdateAddressSucceeded:return Gv(e,{updateAddressError:void 0,updateAddressMethodId:void 0});case Xg.UpdateAddressFailed:return Gv(e,{updateAddressError:t.payload,updateAddressMethodId:t.meta&&t.meta.methodId});case Xg.SelectOptionRequested:case Xg.SelectOptionSucceeded:return Gv(e,{selectOptionError:void 0,selectOptionMethodId:void 0});case Xg.SelectOptionFailed:return Gv(e,{selectOptionError:t.payload,selectOptionMethodId:t.meta&&t.meta.methodId});case Xg.WidgetInteractionStarted:case Xg.WidgetInteractionFinished:return Gv(e,{widgetInteractionError:void 0,widgetInteractionMethodId:void 0});case Xg.WidgetInteractionFailed:return Gv(e,{widgetInteractionError:t.payload,widgetInteractionMethodId:t.meta&&t.meta.methodId});default:return e}}function YS(e=GS.statuses,t){switch(t.type){case Xg.InitializeRequested:return Gv(e,{isInitializing:!0,initializeMethodId:t.meta&&t.meta.methodId});case Xg.InitializeFailed:case Xg.InitializeSucceeded:return Gv(e,{isInitializing:!1,initializeMethodId:void 0});case Xg.DeinitializeRequested:return Gv(e,{isDeinitializing:!0,deinitializeMethodId:t.meta&&t.meta.methodId});case Xg.DeinitializeFailed:case Xg.DeinitializeSucceeded:return Gv(e,{isDeinitializing:!1,deinitializeMethodId:void 0});case Xg.UpdateAddressRequested:return Gv(e,{isUpdatingAddress:!0,updateAddressMethodId:t.meta&&t.meta.methodId});case Xg.UpdateAddressFailed:case Xg.UpdateAddressSucceeded:return Gv(e,{isUpdatingAddress:!1,updateAddressMethodId:void 0});case Xg.SelectOptionRequested:return Gv(e,{isSelectingOption:!0,selectOptionMethodId:t.meta&&t.meta.methodId});case Xg.SelectOptionFailed:case Xg.SelectOptionSucceeded:return Gv(e,{isSelectingOption:!1,selectOptionMethodId:void 0});case Xg.WidgetInteractionStarted:return Gv(e,{isWidgetInteracting:!0,widgetInteractionMethodId:t.meta&&t.meta.methodId});case Xg.WidgetInteractionFinished:case Xg.WidgetInteractionFailed:return Gv(e,{isWidgetInteracting:!1,widgetInteractionMethodId:void 0});default:return e}}const KS={errors:{},statuses:{}};function JS(e=KS,t){return d({data:ZS,errors:c(QS,Tv),statuses:XS})(e,t)}function ZS(e,t){return t.type===mv.SendSignInEmailSucceeded?Gv(e,t.payload):e}function QS(e=KS.errors,t){switch(t.type){case mv.SendSignInEmailRequested:case mv.SendSignInEmailSucceeded:return Dv(e,\"sendError\",void 0);case mv.SendSignInEmailFailed:return Dv(e,\"sendError\",t.payload);default:return e}}function XS(e=KS.statuses,t){switch(t.type){case mv.SendSignInEmailRequested:return Dv(e,\"isSending\",!0);case mv.SendSignInEmailFailed:case mv.SendSignInEmailSucceeded:return Dv(e,\"isSending\",!1);default:return e}}const e_={errors:{},statuses:{}};function t_(e=e_,t){return d({errors:c(n_,Tv),statuses:i_})(e,t)}function n_(e=e_.errors,t){switch(t.type){case Mg.ApplyStoreCreditRequested:case Mg.ApplyStoreCreditSucceeded:return Dv(e,\"applyError\",void 0);case Mg.ApplyStoreCreditFailed:return Dv(e,\"applyError\",t.payload);default:return e}}function i_(e=e_.statuses,t){switch(t.type){case Mg.ApplyStoreCreditRequested:return Dv(e,\"isApplying\",!0);case Mg.ApplyStoreCreditSucceeded:case Mg.ApplyStoreCreditFailed:return Dv(e,\"isApplying\",!1);default:return e}}const r_={errors:{},statuses:{}};function o_(e=r_,t){return d({errors:c(a_,Tv),statuses:s_})(e,t)}function a_(e=r_.errors,t){switch(t.type){case xg.UpdateSubscriptionsRequested:case xg.UpdateSubscriptionsSucceeded:return Dv(e,\"updateError\",void 0);case xg.UpdateSubscriptionsFailed:return Dv(e,\"updateError\",t.payload);default:return e}}function s_(e=r_.statuses,t){switch(t.type){case xg.UpdateSubscriptionsRequested:return Dv(e,\"isUpdating\",!0);case xg.UpdateSubscriptionsFailed:case xg.UpdateSubscriptionsSucceeded:return Dv(e,\"isUpdating\",!1);default:return e}}const d_={errors:{},statuses:{}};function c_(e=d_,t){return d({data:l_,errors:c(u_,Tv),statuses:h_})(e,t)}function l_(e,t){var n;switch(t.type){case Kt.LoadCheckoutSucceeded:case Kt.UpdateCheckoutSucceeded:case Mg.ApplyStoreCreditSucceeded:case it.UpdateBillingAddressSucceeded:case Mt.ApplyCouponSucceeded:case Mt.RemoveCouponSucceeded:case Pg.CreateConsignmentsSucceeded:case Pg.UpdateConsignmentSucceeded:case Pg.DeleteConsignmentSucceeded:case Pg.UpdateShippingOptionSucceeded:case Pg.LoadShippingOptionsSucceeded:case Rt.ApplyGiftCertificateSucceeded:case Rt.RemoveGiftCertificateSucceeded:case an.VerifyCheckoutSucceeded:return Gv(e,le(t.payload,[\"billingAddress\",\"cart\",\"consignments\",\"customer\",\"coupons\",\"giftCertificates\"]));case Nm.SubmitOrderSucceeded:return Dv(e,\"orderId\",t.payload&&t.payload.order.orderId);case Jt.HydrateInitialState:return Gv(e,le(null===(n=t.payload)||void 0===n?void 0:n.checkout,[\"billingAddress\",\"cart\",\"consignments\",\"customer\",\"coupons\",\"giftCertificates\"]));default:return e}}function u_(e=d_.errors,t){switch(t.type){case Kt.LoadCheckoutRequested:case Kt.LoadCheckoutSucceeded:return Dv(e,\"loadError\",void 0);case Kt.LoadCheckoutFailed:return Dv(e,\"loadError\",t.payload);case Kt.UpdateCheckoutRequested:case Kt.UpdateCheckoutSucceeded:return Dv(e,\"updateError\",void 0);case Kt.UpdateCheckoutFailed:return Dv(e,\"updateError\",t.payload);default:return e}}function h_(e=d_.statuses,t){switch(t.type){case Kt.LoadCheckoutRequested:return Dv(e,\"isLoading\",!0);case Kt.LoadCheckoutFailed:case Kt.LoadCheckoutSucceeded:return Dv(e,\"isLoading\",!1);case Kt.UpdateCheckoutRequested:return Dv(e,\"isUpdating\",!0);case Kt.UpdateCheckoutFailed:case Kt.UpdateCheckoutSucceeded:return Dv(e,\"isUpdating\",!1);case an.ExecuteRequested:return Dv(e,\"isExecutingSpamCheck\",!0);case an.ExecuteFailed:case an.ExecuteSucceeded:return Dv(e,\"isExecutingSpamCheck\",!1);default:return e}}function p_(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}function m_(e){return function(e){const t=Object.create(e);return function(e,t){let n=Object.getPrototypeOf(e);for(;n;)t(n),n=Object.getPrototypeOf(n)}(e,n=>{Object.getOwnPropertyNames(n).forEach(n=>{\"constructor\"!==n&&\"function\"==typeof t[n]&&\"_\"!==n.charAt(0)&&(t[n]=((e,t)=>(...n)=>p(e[t].call(e,...n)))(e,n))})}),t}(e)}const y_={\"mollie.credit_card\":{provider:\"mollie\",method:\"credit_card\"},\"adyenv2.scheme\":{provider:\"adyenv2\",method:\"scheme\"},\"adyenv3.scheme\":{provider:\"adyenv3\",method:\"scheme\"},\"adyenv2.bcmc\":{provider:\"adyenv2\",method:\"bcmc\"},\"adyenv2.ideal\":{provider:\"adyenv2\",method:\"ideal\"},\"adyenv2.sepadirectdebit\":{provider:\"adyenv2\",method:\"sepadirectdebit\"},\"adyenv2.directEbanking\":{provider:\"adyenv2\",method:\"directEbanking\"},\"adyenv2.giropay\":{provider:\"adyenv2\",method:\"giropay\"},braintree:{provider:\"braintree\",method:\"credit_card\"},braintreepaypal:{provider:\"braintree\",method:\"paypal\"},braintreeach:{provider:\"braintree\",method:\"ach\"},authorizenet:{provider:\"authorizenet\",method:\"credit_card\"},elavon:{provider:\"elavon\",method:\"credit_card\"},checkoutcom:{provider:\"checkoutcom\",method:\"credit_card\"},\"checkoutcom.credit_card\":{provider:\"checkoutcom\",method:\"credit_card\"},\"checkoutcom.card\":{provider:\"checkoutcom\",method:\"card\"},sagepay:{provider:\"sagepay\",method:\"credit_card\"},stripe:{provider:\"stripe\",method:\"credit_card\"},\"stripev3.card\":{provider:\"stripev3\",method:\"card\"},\"stripeupe.card\":{provider:\"stripeupe\",method:\"card\"},cybersource:{provider:\"cybersource\",method:\"credit_card\"},cybersourcev2:{provider:\"cybersourcev2\",method:\"credit_card\"},bnz:{provider:\"bnz\",method:\"credit_card\"},converge:{provider:\"converge\",method:\"credit_card\"},bluesnapv2:{provider:\"bluesnapv2\",method:\"credit_card\"},\"bluesnapdirect.credit_card\":{provider:\"bluesnapdirect\",method:\"credit_card\"},\"bluesnapdirect.ecp\":{provider:\"bluesnapdirect\",method:\"ecp\"},\"bluesnapdirect.sepa_direct_debit\":{provider:\"bluesnapdirect\",method:\"sepa_direct_debit\"},orbital:{provider:\"orbital\",method:\"credit_card\"},paymetric:{provider:\"paymetric\",method:\"credit_card\"},bolt:{provider:\"bolt\",method:\"credit_card\"},\"barclaycard.credit_card\":{provider:\"barclaycard\",method:\"credit_card\"},moneris:{provider:\"moneris\",method:\"credit_card\"},cba_mpgs:{provider:\"cba_mpgs\",method:\"credit_card\"},worldpayaccess:{provider:\"worldpayaccess\",method:\"credit_card\"},\"worldpayaccess.credit_card\":{provider:\"worldpayaccess\",method:\"credit_card\"},squarev2:{provider:\"squarev2\",method:\"credit_card\"},paypalcommercecreditcards:{provider:\"paypalcommerce\",method:\"credit_card\"},paypalcommerce:{provider:\"paypalcommerce\",method:\"paypal\"},bigcommerce_payments_creditcards:{provider:\"bigcommerce_payments\",method:\"credit_card\"},bigcommerce_payments:{provider:\"bigcommerce_payments\",method:\"paypal\"},tdonlinemart:{provider:\"tdonlinemart\",method:\"credit_card\"}};function g_(e){return me({firstName:e.firstName,lastName:e.lastName,company:e.company,address1:e.address1,address2:e.address2,city:e.city,stateOrProvince:e.stateOrProvince,countryCode:e.countryCode,postalCode:e.postalCode,phone:e.phone,customFields:e.customFields},G)}const v_={errors:{},statuses:{}};function f_(){const e=function(){const e=Iv(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.token},e=>()=>e),t=Iv(e=>e.errors.loadError,e=>()=>e),n=Iv(e=>!!e.statuses.isLoading,e=>()=>e);return Oe((i=Mv)=>({getToken:e(i),getLoadError:t(i),isLoading:n(i)}))}(),t=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e,e=>()=>p_(e(),()=>new at(nt.MissingBillingAddress))),n=Iv(e=>e.errors.updateError,e=>()=>e),i=Iv(e=>e.errors.continueAsGuestError,e=>()=>e),r=Iv(e=>e.errors.loadError,e=>()=>e),o=Iv(e=>!!e.statuses.isUpdating,e=>()=>e),a=Iv(e=>!!e.statuses.isContinuingAsGuest,e=>()=>e),s=Iv(e=>!!e.statuses.isLoading,e=>()=>e);return Oe((d=Lv)=>({getBillingAddress:e(d),getBillingAddressOrThrow:t(d),getUpdateError:n(d),getContinueAsGuestError:i(d),getLoadError:r(d),isUpdating:o(d),isContinuingAsGuest:a(d),isLoading:s(d)}))}(),n=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e,e=>()=>p_(e(),()=>new at(nt.MissingCart))),n=Iv(e=>e.errors.loadError,e=>()=>e),i=Iv(e=>!!e.statuses.isLoading,e=>()=>e),r=Iv(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.locale},e=>()=>e);return Oe((o=Hv)=>({getCart:e(o),getCartOrThrow:t(o),getLoadError:n(o),isLoading:i(o),getLocale:r(o)}))}(),i=function(){const e=Iv(e=>e,e=>()=>e),t=Iv(e=>e.statuses,e=>Pe(t=>{if(t){const n=e[t];return!0===(n&&n.isInitializing)}return ve(e,{isInitializing:!0})})),n=Iv(e=>e.data,e=>Pe((t,n)=>{const i=e[t];return!!i&&(n?!0===i.initializedContainers[n]:ve(i.initializedContainers,e=>!0===e))})),i=Iv(e=>e.statuses,e=>Pe(t=>{if(t){const n=e[t];return!0===(n&&n.isDeinitializing)}return ve(e,{isDeinitializing:!0})})),r=Iv(e=>e.errors,e=>Pe(t=>{const n=t?e[t]:B(Ce(e),e=>!(!e||!e.initializeError));return n&&n.initializeError})),o=Iv(e=>e.errors,e=>Pe(t=>{const n=t?e[t]:B(Ce(e),e=>!(!e||!e.deinitializeError));return n&&n.deinitializeError}));return Oe((a=Zv)=>({getState:e(a),isInitializing:t(a),isInitialized:n(a),isDeinitializing:i(a),getInitializeError:r(a),getDeinitializeError:o(a)}))}(),r=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e=>e.data,e=>t=>{if(!e)return;const{flashMessages:n}=e.context;return n?void 0!==t?n.filter(({type:e})=>t===e):n:void 0}),n=Iv(e=>e.data,(e,{formState:t})=>t&&t.data,(e,t={customerAccount:[],shippingAddress:[],billingAddress:[]})=>()=>e?Object.assign(Object.assign({},e.storeConfig),{formFields:t}):void 0),i=Iv(n,e=>()=>p_(e(),()=>new at(nt.MissingCheckoutConfig))),r=Iv(e=>e.data&&e.data.context,e=>()=>e),o=Iv(e=>e.meta&&e.meta.externalSource,e=>()=>e),a=Iv(e=>{var t;return null===(t=e.meta)||void 0===t?void 0:t.host},e=>()=>e),s=Iv(e=>{var t;return null===(t=e.meta)||void 0===t?void 0:t.locale},e=>()=>e),d=Iv(e=>e.meta&&e.meta.variantIdentificationToken,e=>()=>e),c=Iv(e=>e.errors.loadError,e=>()=>e),l=Iv(e=>!!e.statuses.isLoading,e=>()=>e);return Oe((u=af,h)=>({getConfig:e(u),getFlashMessages:t(u),getStoreConfig:n(u,{formState:h}),getStoreConfigOrThrow:i(u,{formState:h}),getContextConfig:r(u),getExternalSource:o(u),getHost:a(u),getLocale:s(u),getVariantIdentificationToken:d(u),getLoadError:c(u),isLoading:l(u)}))}(),o=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e=>e.errors.loadError,e=>()=>e),n=Iv(e=>!!e.statuses.isLoading,e=>()=>e);return Oe((i=qf)=>({getCountries:e(i),getLoadError:t(i),isLoading:n(i)}))}(),a=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e=>e.errors.removeCouponError,e=>()=>e),n=Iv(e=>e.errors.applyCouponError,e=>()=>e),i=Iv(e=>!!e.statuses.isApplyingCoupon,e=>()=>e),r=Iv(e=>!!e.statuses.isRemovingCoupon,e=>()=>e);return Oe((o=uf)=>({getCoupons:e(o),getRemoveError:t(o),getApplyError:n(o),isApplying:i(o),isRemoving:r(o)}))}(),s=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e,e=>()=>p_(e(),()=>new at(nt.MissingCustomer))),n=Iv(e=>e.errors.createError,e=>()=>e),i=Iv(e=>!!e.statuses.isCreating,e=>()=>e),r=Iv(e=>e.errors.createAddressError,e=>()=>e),o=Iv(e=>!!e.statuses.isCreatingAddress,e=>()=>e);return Oe((a=wf)=>({getCustomer:e(a),getCustomerOrThrow:t(a),getCreateAccountError:n(a),isCreatingCustomerAccount:i(a),getCreateAddressError:r(a),isCreatingCustomerAddress:o(a)}))}(),d=function(){const e=Iv(e=>e.errors.signInMethodId,e=>e.errors.signInError,(e,t)=>n=>{if(!n||e===n)return t}),t=Iv(e=>e.errors.signOutMethodId,e=>e.errors.signOutError,(e,t)=>n=>{if(!n||e===n)return t}),n=Iv(e=>e.errors.executePaymentMethodCheckoutMethodId,e=>e.errors.executePaymentMethodCheckoutError,(e,t)=>n=>{if(!n||e===n)return t}),i=Iv(e=>e.errors.initializeMethodId,e=>e.errors.initializeErrors,(e,t)=>n=>{if(e&&t)return n?t[n]:t[e]}),r=Iv(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),o=Iv(e=>e.statuses.signInMethodId,e=>e.statuses.isSigningIn,(e,t)=>n=>!(n&&e!==n||!t)),a=Iv(e=>e.statuses.signOutMethodId,e=>e.statuses.isSigningOut,(e,t)=>n=>!(n&&e!==n||!t)),s=Iv(e=>e.statuses.executePaymentMethodCheckoutMethodId,e=>e.statuses.isExecutingPaymentMethodCheckout,(e,t)=>n=>!(n&&e!==n||!t)),d=Iv(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),c=Iv(e=>e.data,e=>t=>!(!e[t]||!e[t].isInitialized)),l=Iv(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return Oe((u=Of)=>({getSignInError:e(u),getSignOutError:t(u),getExecutePaymentMethodCheckoutError:n(u),getInitializeError:i(u),getWidgetInteractionError:r(u),isSigningIn:o(u),isSigningOut:a(u),isExecutingPaymentMethodCheckout:s(u),isInitializing:d(u),isInitialized:c(u),isWidgetInteracting:l(u)}))}(),c=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e=>e.errors.removeGiftCertificateError,e=>()=>e),n=Iv(e=>e.errors.applyGiftCertificateError,e=>()=>e),i=Iv(e=>!!e.statuses.isApplyingGiftCertificate,e=>()=>e),r=Iv(e=>!!e.statuses.isRemovingGiftCertificate,e=>()=>e);return Oe((o=gf)=>({getGiftCertificates:e(o),getRemoveError:t(o),getApplyError:n(o),isApplying:i(o),isRemoving:r(o)}))}(),l=function(){const e=Iv(e=>e.data,e=>t=>{if(!e)return;const n=t.gateway?`${t.gateway}.${t.id}`:t.id,i=y_[n];return i?L(e,i):[]}),t=Iv(e=>e.data,(e=[])=>t=>{const n=Ce(y_);return e.find(e=>e.bigpayToken===t&&\"card\"===e.type&&n.some(t=>K(e,t)))}),n=Iv(t,e=>t=>p_(e(t),()=>new at(nt.MissingPaymentInstrument))),i=Iv(e=>e.data,e=>()=>{if(e)return U(y_,t=>L(e,e=>K(e,t)))}),r=Iv(e=>e.meta,e=>()=>e),o=Iv(e=>e.errors.loadError,e=>()=>e),a=Iv(e=>e.errors.failedInstrument,e=>e.errors.deleteError,(e,t)=>n=>{if(!n||e===n)return t}),s=Iv(e=>e.statuses.isLoading,e=>()=>!!e),d=Iv(e=>e.statuses.deletingInstrument,e=>e.statuses.isDeleting,(e,t)=>n=>!(n&&e!==n||!t));return Oe((c=fS)=>({getCardInstrument:t(c),getCardInstrumentOrThrow:n(c),getInstruments:i(c),getInstrumentsByPaymentMethod:e(c),getInstrumentsMeta:r(c),getLoadError:o(c),getDeleteError:a(c),isLoading:s(c),isDeleting:d(c)}))}(),u=function(){const e=Iv(e=>e.data,e=>(t=[],n)=>{const i=B(t,{code:n});return(e?e.shippingAddress:[]).map(e=>s(e,t,i))}),t=Iv(e=>e.data,e=>(t=[],n)=>{const i=B(t,{code:n});return(e?e.billingAddress:[]).map(e=>s(e,t,i))}),n=Iv(e=>e.data,e=>()=>e?e.customerAccount:[]),i=Iv(e=>e.extraFields,e=>()=>e&&e.address.length?e.address.map(Ke):[]),r=Iv(e=>e.extraFields,e=>()=>e&&e.order.length?e.order.map(Ke):[]),o=Iv(e=>e.errors.loadError,e=>()=>e),a=Iv(e=>!!e.statuses.isLoading,e=>()=>e);function s(e,t,n){return\"countryCode\"===e.name?function(e,t=[],n){if(!t.length)return e;const{code:i=\"\"}=n||{},r=t.map(({code:e,name:t})=>({value:e,label:t}));return Object.assign(Object.assign({},e),{options:{items:r},default:i,type:\"array\",fieldType:\"dropdown\",itemtype:\"string\"})}(e,t,n):\"stateOrProvince\"===e.name?function(e,t){const{subdivisions:n=[],requiresState:i}=t||{};if(!n.length)return Object.assign(Object.assign({},e),{required:null!=i&&i});const r=n.map(({code:e,name:t})=>({value:e,label:t}));return Object.assign(Object.assign({},e),{name:\"stateOrProvinceCode\",options:{items:r},required:null==i||i,type:\"array\",fieldType:\"dropdown\",itemtype:\"string\"})}(e,n):\"postalCode\"===e.name?function(e,t){const{hasPostalCodes:n=[]}=t||{};return void 0===n?e:Object.assign(Object.assign({},e),{required:Boolean(n)})}(e,n):e}return Oe((s=Rf)=>({getShippingAddressFields:e(s),getBillingAddressFields:t(s),getCustomerAccountFields:n(s),getAddressExtraFields:i(s),getOrderExtraFields:r(s),getLoadError:o(s),isLoading:a(s)}))}(),h=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e=>e.meta,e=>()=>e),n=Iv(e=>e.data,e=>(t,n)=>B(e,n?{id:t,gateway:n}:{id:t})),i=Iv(n,e=>(t,n)=>p_(e(t,n),()=>new at(nt.MissingPaymentMethod))),r=Iv(e=>e.errors.loadError,e=>()=>e),o=Iv(e=>e.errors.loadMethodId,e=>e.errors.loadMethodError,(e,t)=>n=>{if(!n||e===n)return t}),a=Iv(e=>e.statuses.isLoading,e=>()=>!!e),s=Iv(e=>e.statuses.loadMethodId,e=>e.statuses.isLoadingMethod,(e,t)=>n=>!(n&&e!==n||!t));return Oe((d=rS)=>({getPaymentMethods:e(d),getPaymentMethodsMeta:t(d),getPaymentMethod:n(d),getPaymentMethodOrThrow:i(d),getLoadError:r(d),getLoadMethodError:o(d),isLoading:a(d),isLoadingMethod:s(d)}))}(),p=function(){const e=Iv(e=>e.errors.initializeMethodId,e=>e.errors.initializeError,(e,t)=>n=>{if(!n||e===n)return t}),t=Iv(e=>e.errors.executeMethodId,e=>e.errors.executeError,(e,t)=>n=>{if(!n||e===n)return t}),n=Iv(e=>e.errors.finalizeMethodId,e=>e.errors.finalizeError,(e,t)=>n=>{if(!n||e===n)return t}),i=Iv(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),r=Iv(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),o=Iv(e=>e.data,e=>t=>{const n=t.gatewayId?`${t.methodId}.${t.gatewayId}`:t.methodId;return!(!e[n]||!e[n].isInitialized)}),a=Iv(e=>e.statuses.executeMethodId,e=>e.statuses.isExecuting,(e,t)=>n=>!(n&&e!==n||!t)),s=Iv(e=>e.statuses.finalizeMethodId,e=>e.statuses.isFinalizing,(e,t)=>n=>!(n&&e!==n||!t)),d=Iv(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return Oe((c=lS)=>({getInitializeError:e(c),getExecuteError:t(c),getFinalizeError:n(c),getWidgetInteractingError:i(c),isInitializing:r(c),isInitialized:o(c),isExecuting:a(c),isFinalizing:s(c),isWidgetInteracting:d(c)}))}(),m=function(){const e=Iv(e=>e.data,e=>(t,n)=>{if(!e)return;const i=zS(MS({consignmentId:t,searchArea:n})),r=btoa(`${JSON.stringify(i)}`);return e[r]}),t=Iv(e=>e.errors.loadError,e=>()=>e),n=Iv(e=>!!e.statuses.isLoading,e=>()=>e);return Oe((i=NS)=>({getPickupOptions:e(i),getLoadError:t(i),isLoading:n(i)}))}(),y=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e,e=>()=>p_(e(),()=>new at(nt.MissingPaymentProviderCustomer)));return Oe((n=yS)=>({getPaymentProviderCustomer:e(n),getPaymentProviderCustomerOrThrow:t(n)}))}(),g=function(){const e=Iv(e=>e.data,e=>t=>e[t]);return Oe((t=bS)=>({getCheckout:e(t)}))}(),v=function(){const e=Iv(e=>e.data,e=>()=>{const t=null==e?void 0:e.find(e=>!e.selectedPickupOption);return null==t?void 0:t.shippingAddress}),t=Iv(e,e=>()=>p_(e(),()=>new at(nt.MissingShippingAddress))),n=Iv(e=>e.data,e=>()=>{const t=null==e?void 0:e.filter(e=>!e.selectedPickupOption);return t?t.map(e=>e.shippingAddress):[]}),i=Iv(n,e=>()=>p_(e(),()=>new at(nt.MissingShippingAddress)));return Oe((r=ES)=>({getShippingAddress:e(r),getShippingAddressOrThrow:t(r),getShippingAddresses:n(r),getShippingAddressesOrThrow:i(r)}))}(),f=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e=>e.errors.loadError,e=>()=>e),n=Iv(e=>e.statuses.isLoading,e=>()=>!!e);return Oe((i=BS)=>({getShippingCountries:e(i),getLoadError:t(i),isLoading:n(i)}))}(),S=function(){const e=Iv(e=>e.errors.updateAddressMethodId,e=>e.errors.updateAddressError,(e,t)=>n=>{if(!n||e===n)return t}),t=Iv(e=>e.errors.selectOptionMethodId,e=>e.errors.selectOptionError,(e,t)=>n=>{if(!n||e===n)return t}),n=Iv(e=>e.errors.initializeMethodId,e=>e.errors.initializeError,(e,t)=>n=>{if(!n||e===n)return t}),i=Iv(e=>e.errors.widgetInteractionMethodId,e=>e.errors.widgetInteractionError,(e,t)=>n=>{if(!n||e===n)return t}),r=Iv(e=>e.statuses.updateAddressMethodId,e=>e.statuses.isUpdatingAddress,(e,t)=>n=>!(n&&e!==n||!t)),o=Iv(e=>e.statuses.selectOptionMethodId,e=>e.statuses.isSelectingOption,(e,t)=>n=>!(n&&e!==n||!t)),a=Iv(e=>e.statuses.initializeMethodId,e=>e.statuses.isInitializing,(e,t)=>n=>!(n&&e!==n||!t)),s=Iv(e=>e.data,e=>t=>!(!e[t]||!e[t].isInitialized)),d=Iv(e=>e.statuses.widgetInteractionMethodId,e=>e.statuses.isWidgetInteracting,(e,t)=>n=>!(n&&e!==n||!t));return Oe((c=GS)=>({getUpdateAddressError:e(c),getSelectOptionError:t(c),getInitializeError:n(c),getWidgetInteractionError:i(c),isUpdatingAddress:r(c),isSelectingOption:o(c),isInitializing:a(c),isInitialized:s(c),isWidgetInteracting:d(c)}))}(),_=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e,e=>()=>p_(e(),()=>new at(nt.MissingConsignments))),n=Iv(e=>e.data,e=>t=>{if(e&&e.length)return B(e,{id:t})}),i=Iv(e=>e.data,e=>t=>{if(e&&e.length)return B(e,e=>{return n=e.shippingAddress,i=t,Y(g_(n),g_(i));var n,i})}),r=Iv(e=>e.data,e=>()=>{if(e&&e.length)return e[0].selectedShippingOption}),o=Iv(e=>e.errors.loadError,e=>()=>e),a=Iv(e=>e.errors.createError,e=>()=>e),s=Iv(e=>e.errors.loadShippingOptionsError,e=>()=>e),d=Iv(e,(e,{cart:t})=>t.getCart,(e,t)=>()=>{const n=t();if(!n)return[];const i=(e()||[]).reduce((e,t)=>e.concat(t.lineItemIds),[]);return(n.lineItems.physicalItems||[]).filter(e=>i.indexOf(e.id)<0)}),c=Iv(e=>e.errors.updateError,e=>t=>t?e[t]:B(e)),l=Iv(e=>e.errors.deleteError,e=>t=>t?e[t]:B(e)),u=Iv(i,c,a,(e,t,n)=>i=>{const r=e(i);return r?t(r.id):n()}),h=Iv(e=>e.errors.updateShippingOptionError,e=>t=>t?e[t]:B(e)),p=Iv(e=>e.statuses.isLoading,e=>()=>!0===e),m=Iv(e=>e.statuses.isLoadingShippingOptions,e=>()=>!0===e),y=Iv(e=>e.statuses.isCreating,e=>()=>!0===e),g=Iv(e=>e.statuses.isUpdating,e=>t=>t?!0===e[t]:!0===B(e)),v=Iv(e=>e.statuses.isDeleting,e=>t=>t?!0===e[t]:!0===B(e)),f=Iv(i,g,y,(e,t,n)=>i=>{const r=e(i);return r?t(r.id):n()}),S=Iv(e=>e.statuses.isUpdatingShippingOption,e=>t=>t?!0===e[t]:!0===B(e));return Oe((_=ES,w)=>({getConsignments:e(_),getConsignmentsOrThrow:t(_),getConsignmentById:n(_),getConsignmentByAddress:i(_),getShippingOption:r(_),getLoadError:o(_),getCreateError:a(_),getLoadShippingOptionsError:s(_),getUnassignedItems:d(_,{cart:w}),getUpdateError:c(_),getDeleteError:l(_),getItemAssignmentError:u(_),getUpdateShippingOptionError:h(_),isLoading:p(_),isLoadingShippingOptions:m(_),isCreating:y(_),isUpdating:g(_),isDeleting:v(_),isAssigningItems:f(_),isUpdatingShippingOption:S(_)}))}(),w=function(){const e=Iv(e=>e.data,(e,{billingAddress:t})=>t.getBillingAddress,(e,{cart:t})=>t.getCart,(e,{customer:t})=>t.getCustomer,(e,{consignments:t})=>t.getConsignments,(e,{coupons:t})=>t.getCoupons,(e,{giftCertificates:t})=>t.getGiftCertificates,(e,t,n,i,r,o,a)=>()=>{const s=t(),d=n(),c=i(),l=r()||[],u=o()||[],h=a()||[];if(e&&d&&c)return Object.assign(Object.assign({},e),{billingAddress:s,cart:d,customer:c,consignments:l,coupons:u,giftCertificates:h})}),t=Iv(e,e=>()=>p_(e(),()=>new at(nt.MissingCheckout))),n=Iv(e,e=>t=>{const n=e();if(!n)return;const i=n.grandTotal||0,r=n.customer.storeCredit||0;return t?Math.max(i-r,0):n.outstandingBalance}),i=Iv(e=>e.errors.loadError,e=>()=>e),r=Iv(e=>e.errors.updateError,e=>()=>e),o=Iv(e=>e.statuses.isExecutingSpamCheck,e=>()=>!0===e),a=Iv(e=>e.statuses.isLoading,e=>()=>!0===e),s=Iv(e=>e.statuses.isUpdating,e=>()=>!0===e);return Oe((d=d_,c,l,u,h,p,m)=>({getCheckout:e(d,{billingAddress:c,cart:l,consignments:u,coupons:h,customer:p,giftCertificates:m}),getCheckoutOrThrow:t(d,{billingAddress:c,cart:l,consignments:u,coupons:h,customer:p,giftCertificates:m}),getOutstandingBalance:n(d,{billingAddress:c,cart:l,consignments:u,coupons:h,customer:p,giftCertificates:m}),getLoadError:i(d),getUpdateError:r(d),isExecutingSpamCheck:o(d),isLoading:a(d),isUpdating:s(d)}))}(),I=function(){const e=Iv(e=>e.data,(e,{billingAddress:t})=>t.getOrderBillingAddress(),(e,{coupons:t})=>t.getCoupons(),(e,t,n=[])=>()=>{if(e&&t)return Object.assign(Object.assign({},e),{billingAddress:t,coupons:n})}),t=Iv(e,e=>()=>p_(e(),()=>new at(nt.MissingOrder))),n=Iv(e=>e.meta,e=>()=>e),i=Iv(e=>e.errors.loadError,e=>()=>e),r=Iv(e=>{var t;return null===(t=e.data)||void 0===t?void 0:t.payments},(e=[])=>t=>{const n=e.find(({providerId:e})=>e===t);return null==n?void 0:n.paymentId}),o=Iv(e=>!!e.statuses.isLoading,e=>()=>e);return Oe((a=$f,s,d)=>({getOrder:e(a,{billingAddress:s,coupons:d}),getOrderOrThrow:t(a,{billingAddress:s,coupons:d}),getOrderMeta:n(a),getLoadError:i(a),getPaymentId:r(a),isLoading:o(a)}))}(),C=function(){const e=Iv(e=>e.data,e=>()=>e);return Oe((t=Xf)=>({getOrderBillingAddress:e(t)}))}(),b=function(){const e=Iv(({order:e})=>e.getOrderMeta,e=>()=>{const t=e();return t&&t.payment}),t=Iv(({order:e})=>e.getOrder,e=>()=>{const t=e();return B(t&&t.payments,({providerId:e})=>\"giftcertificate\"!==e&&\"storecredit\"!==e)}),n=Iv(({checkout:e})=>e.getCheckout,e=>()=>{const t=e();return B(t&&t.payments,({providerType:e})=>\"PAYMENT_TYPE_HOSTED\"===e)}),i=Iv(e,n,t,(e,t,n)=>()=>{const i=e();if(i&&i.id)return{providerId:i.id,gatewayId:i.gateway};const r=t()||n();return r&&r.providerId?{providerId:r.providerId,gatewayId:r.gatewayId}:void 0}),r=Iv(i,e=>()=>p_(e(),()=>new at(nt.MissingPaymentId))),o=Iv(e,n,t,(e,t,n)=>()=>{const i=e();if(i&&i.status)return i.status.replace(\"PAYMENT_STATUS_\",\"\");const r=t()||n();return r?r.detail.step:void 0}),a=Iv(o,e=>()=>p_(e(),()=>new at(nt.MissingPaymentStatus))),s=Iv(({order:e})=>e.getOrderMeta,e=>()=>{const t=e();return t&&t.token}),d=Iv(s,e=>()=>p_(e(),()=>new at(nt.MissingPaymentToken))),c=Iv(e,e=>()=>{const t=e();return t&&t.redirectUrl}),l=Iv(c,e=>()=>p_(e(),()=>new at(nt.MissingPaymentRedirectUrl))),u=Iv(({checkout:e})=>e.getOutstandingBalance,e=>(t=!1)=>{const n=e(t);return!!n&&n>0}),h=Iv(o,e=>t=>!(!t||!t.nonce)||\"ACKNOWLEDGE\"===e()||e()===Qy);return Oe((e,t)=>({getPaymentId:i({checkout:e,order:t}),getPaymentIdOrThrow:r({checkout:e,order:t}),getPaymentStatus:o({checkout:e,order:t}),getPaymentStatusOrThrow:a({checkout:e,order:t}),getPaymentToken:s({checkout:e,order:t}),getPaymentTokenOrThrow:d({checkout:e,order:t}),getPaymentRedirectUrl:c({checkout:e,order:t}),getPaymentRedirectUrlOrThrow:l({checkout:e,order:t}),isPaymentDataRequired:u({checkout:e,order:t}),isPaymentDataSubmitted:h({checkout:e,order:t})}))}(),P=function(){const e=Iv(e=>e.errors.applyError,e=>()=>e),t=Iv(e=>!!e.statuses.isApplying,e=>()=>e);return Oe((n=v_)=>({getApplyError:e(n),isApplying:t(n)}))}(),O=function(){const e=Iv(e=>e.errors.updateError,e=>()=>e),t=Iv(e=>!!e.statuses.isUpdating,e=>()=>e);return Oe((n=r_)=>({getUpdateError:e(n),isUpdating:t(n)}))}(),E=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e=>e.errors.sendError,e=>()=>e),n=Iv(e=>!!e.statuses.isSending,e=>()=>e);return Oe((i=KS)=>({getEmail:e(i),getSendError:t(i),isSending:n(i)}))}(),A=function(){const e=Iv(e=>e.data,e=>()=>e),t=Iv(e=>e.data,e=>t=>null==e?void 0:e.find(e=>e.region===t)),n=Iv(e=>e.errors.loadError,e=>()=>e),i=Iv(e=>e.statuses.isLoading,e=>()=>!!e);return Oe((r=Df)=>({getExtensions:e(r),getExtensionByRegion:t(r),getLoadError:n(r),isLoading:i(r)}))}();return(T,k={})=>{const D=e(T.b2bToken),M=t(T.billingAddress),z=n(T.cart),N=i(T.checkoutButton),x=o(T.countries),R=a(T.coupons),F=s(T.customer),L=d(T.customerStrategies),B=A(T.extensions),j=u(T.formFields),U=c(T.giftCertificates),q=l(T.instruments),V=C(T.orderBillingAddress),G=h(T.paymentMethods),H=y(T.paymentProviderCustomer),W=p(T.paymentStrategies),$=m(T.pickupOptions),Y=g(T.remoteCheckout),K=v(T.consignments),J=f(T.shippingCountries),Z=S(T.shippingStrategies),Q=O(T.subscriptions),X=P(T.storeCredit),ee=E(T.signInEmail),te=_(T.consignments,z),ne=w(T.checkout,M,z,te,R,F,U),ie=I(T.order,V,R),re=b(ne,ie),oe={b2bToken:D,billingAddress:M,cart:z,checkout:ne,checkoutButton:N,config:r(T.config,T.formFields),consignments:te,countries:x,coupons:R,customer:F,customerStrategies:L,extensions:B,form:j,giftCertificates:U,instruments:q,order:ie,orderBillingAddress:V,payment:re,paymentMethods:G,paymentProviderCustomer:H,paymentStrategies:W,pickupOptions:$,remoteCheckout:Y,shippingAddress:K,shippingCountries:J,shippingStrategies:Z,signInEmail:ee,subscriptions:Q,storeCredit:X};return k.shouldWarnMutation?(ae=oe,Object.keys(ae).reduce((e,t)=>(e[t]=m_(ae[t]),e),{})):oe;var ae}}function S_(e={},t){const n=(o=function(){const e=new Ev;return[\"catalog_only\",\"empty_cart\",\"invalid_order_id\",\"invalid_order_token\",\"missing_order_token\",\"missing_provider_token\",\"missing_shipping_method\",\"order_completion_error\",\"order_could_not_be_finalized_error\",\"order_create_failed\",\"provider_fatal_error\",\"provider_setup_error\",\"stock_too_low\"].forEach(t=>{e.register(t,(e,t)=>new bv(e,t))}),e.register(\"invalid_payment_provider\",e=>new to(e)),e.register(\"payment_config_not_found\",e=>new to(e)),e}(),e=>S(e).pipe(P(e=>{if(e instanceof Error||e.payload instanceof Error)throw e;if((t=e.payload)&&\"object\"==typeof t&&[\"body\",\"headers\",\"status\",\"statusText\"].every(e=>Object.prototype.hasOwnProperty.call(t,e))){const t=e.payload.body&&e.payload.body.detail;throw Object.assign(Object.assign({},e),{payload:o.createError(e.payload,t)})}var t;throw e}))),i=f_(),r=d({b2bToken:zv,billingAddress:Bv,cart:Wv,checkout:c_,checkoutButton:tf,config:sf,consignments:AS,countries:Vf,coupons:hf,customer:If,customerStrategies:Ef,extensions:Mf,formFields:Ff,giftCertificates:vf,instruments:SS,orderBillingAddress:eS,order:Yf,payment:nS,paymentMethods:oS,paymentStrategies:uS,pickupOptions:xS,paymentProviderCustomer:gS,remoteCheckout:PS,shippingCountries:jS,shippingStrategies:HS,signInEmail:JS,subscriptions:o_,storeCredit:t_});var o;return u(r,e,Object.assign({actionTransformer:n,stateTransformer:e=>i(e)},t))}function __(e){\"https:\"!==document.location.protocol&&Ct().warn(\"The BigCommerce Checkout SDK should not be used on a non-HTTPS page\"),\"production\"!==St()&&Ct().warn(\"Note that the development build is not optimized. To create a production build, set process​.env.NODE_ENV to `production`.\");const t={meta:{externalSource:e&&e.externalSource,host:null==e?void 0:e.host,locale:null==e?void 0:e.locale,variantIdentificationToken:window.checkoutVariantIdentificationToken},errors:{},statuses:{}},{locale:i=\"\",shouldWarnMutation:r=!0}=e||{},s=n({host:e&&e.host}),d=S_({config:t},{shouldWarnMutation:r}),c=new ft(s,{getBasePath:()=>{var e,t;return null!==(t=null===(e=d.getState().config.getStoreConfig())||void 0===e?void 0:e.links.baseUrl)&&void 0!==t?t:void 0},getFeatures:()=>{var e,t,n;return null!==(n=null===(t=null===(e=d.getState().config.getStoreConfig())||void 0===e?void 0:e.checkoutSettings)||void 0===t?void 0:t.features)&&void 0!==n?n:{}}}),l=Hm(d),u=new qm(c),h=new nn(c),p=new Ot(new Dt(s)),m=wn(o()),y=new In(c),g=new yn(m,y),v=new Gm(u,new sy(h)),f=new Bg(new jg(c)),S=new sn(new dn(c)),_=new on(h,p,S),w=Jg(d,c),I=function(e,t,n={useFallback:!1}){const{useFallback:i}=n,r=new Wt(i);for(const[,n]of Object.entries(t))if(Vt(n))for(const t of n.resolveIds)r.register(t,()=>n(e));return r}(w,He,{useFallback:!0}),C=function(e,t){const n=new Wt;for(const[,i]of Object.entries(t))if(Vt(i))for(const t of i.resolveIds)n.register(t,()=>i(e));return n}(w,Ge),b=new Fn(new Ln(c)),P=new $n,O=new Zn(d,P),E=gt(d,function(){const e=function(){const e=Iv(({checkout:e})=>e.getCheckout,e=>Gg(e)),t=Iv(({order:e})=>e.getOrder,e=>Gg(e)),n=Iv(({config:e})=>e.getStoreConfig,e=>Gg(e)),i=Iv(({shippingAddress:e})=>e.getShippingAddress,({config:e})=>e.getContextConfig,(e,t)=>Gg(()=>{const n=e(),i=t();if(!n){if(!i||!i.geoCountryCode)return;return{firstName:\"\",lastName:\"\",company:\"\",address1:\"\",address2:\"\",city:\"\",stateOrProvince:\"\",stateOrProvinceCode:\"\",postalCode:\"\",country:\"\",phone:\"\",customFields:[],countryCode:i.geoCountryCode}}return n})),r=Iv(({consignments:e})=>e.getConsignments,e=>Gg(()=>{const t=e(),n=null==t?void 0:t.find(e=>!e.selectedPickupOption);return null==n?void 0:n.availableShippingOptions})),o=Iv(({consignments:e})=>e.getConsignments,e=>Gg(e)),a=Iv(({consignments:e})=>e.getConsignments,e=>Gg(()=>{const t=e(),n=null==t?void 0:t.find(e=>!e.selectedPickupOption);return null==n?void 0:n.selectedShippingOption})),s=Iv(({shippingCountries:e})=>e.getShippingCountries,e=>Gg(e)),d=Iv(({billingAddress:e})=>e.getBillingAddress,({config:e})=>e.getContextConfig,(e,t)=>Gg(()=>{const n=e(),i=t();return(!n||Ce(le(n,\"shouldSaveAddress\",\"email\",\"id\")).every(e=>!e||!e.length))&&i&&i.geoCountryCode?{id:n?n.id:\"\",firstName:\"\",lastName:\"\",company:\"\",address1:\"\",address2:\"\",city:\"\",email:n?n.email:\"\",stateOrProvince:\"\",stateOrProvinceCode:\"\",postalCode:\"\",country:\"\",phone:\"\",customFields:[],countryCode:i.geoCountryCode}:n})),c=Iv(({countries:e})=>e.getCountries,e=>Gg(e)),l=Iv(({paymentMethods:e})=>e.getPaymentMethods,e=>Gg(e)),u=Iv(({paymentMethods:e})=>e.getPaymentMethod,e=>Gg(e)),h=Iv(({payment:e})=>e.getPaymentId,({paymentMethods:e})=>e.getPaymentMethod,(e,t)=>Gg(()=>{const n=e();return n&&t(n.providerId,n.gatewayId)})),p=Iv(({cart:e})=>e.getCart,e=>Gg(e)),m=Iv(({coupons:e})=>e.getCoupons,e=>Gg(e)),y=Iv(({giftCertificates:e})=>e.getGiftCertificates,e=>Gg(e)),g=Iv(({customer:e})=>e.getCustomer,e=>Gg(e)),v=Iv(({signInEmail:e})=>e.getEmail,e=>Gg(e)),f=Iv(({b2bToken:e})=>e.getToken,e=>Gg(e)),S=Iv(({payment:e})=>e.isPaymentDataRequired,e=>Gg(e)),_=Iv(({payment:e})=>e.isPaymentDataSubmitted,({paymentMethods:e})=>e.getPaymentMethod,(e,t)=>Gg((n,i)=>e(t(n,i)))),w=Iv(({instruments:e})=>e.getInstruments,({instruments:e})=>e.getInstrumentsByPaymentMethod,(e,t)=>Gg(function(n){return n?t(n):e()})),I=Iv(({form:e})=>e.getCustomerAccountFields,e=>Gg(e)),C=Iv(({form:e})=>e.getBillingAddressFields,({countries:e})=>e.getCountries,(e,t)=>Gg(n=>e(t(),n))),b=Iv(({form:e})=>e.getShippingAddressFields,({shippingCountries:e})=>e.getShippingCountries,(e,t)=>Gg(n=>e(t(),n))),P=Iv(({form:e})=>e.getAddressExtraFields,e=>Gg(e)),O=Iv(({form:e})=>e.getOrderExtraFields,e=>Gg(e)),E=Iv(({config:e})=>e.getFlashMessages,e=>Gg(e)),A=Iv(({pickupOptions:e})=>e.getPickupOptions,e=>Gg(e)),T=Iv(({config:e})=>e.getStoreConfig,e=>Gg(()=>{const t=e();if(t)return t.checkoutSettings.checkoutUserExperienceSettings})),k=Iv(({extensions:e})=>e.getExtensions,e=>Gg(e)),D=Iv(({paymentProviderCustomer:e})=>e.getPaymentProviderCustomer,e=>Gg(e)),M=Iv(({extensions:e})=>e.getExtensionByRegion,e=>Gg(e));return Oe(z=>({getCheckout:e(z),getOrder:t(z),getConfig:n(z),getExtensions:k(z),getExtensionByRegion:M(z),getFlashMessages:E(z),getShippingAddress:i(z),getShippingOptions:r(z),getConsignments:o(z),getSelectedShippingOption:a(z),getShippingCountries:s(z),getBillingAddress:d(z),getBillingCountries:c(z),getPaymentMethods:l(z),getPaymentMethod:u(z),getSelectedPaymentMethod:h(z),getCart:p(z),getCoupons:m(z),getGiftCertificates:y(z),getCustomer:g(z),isPaymentDataRequired:S(z),isPaymentDataSubmitted:_(z),getSignInEmail:v(z),getB2BToken:f(z),getInstruments:w(z),getCustomerAccountFields:I(z),getBillingAddressFields:C(z),getShippingAddressFields:b(z),getAddressExtraFields:P(z),getOrderExtraFields:O(z),getPickupOptions:A(z),getUserExperienceSettings:T(z),getPaymentProviderCustomer:D(z)}))}(),t=function(){const e=Cv(e=>e,e=>()=>{for(const t of Object.keys(e)){const n=e[t]();if(n)return n}}),t=Iv(({shippingStrategies:e})=>e.getSelectOptionError,({consignments:e})=>e.getUpdateShippingOptionError,(e,t)=>n=>e()||t(n));return Oe(n=>{const i={getLoadCheckoutError:n.checkout.getLoadError,getUpdateCheckoutError:n.checkout.getUpdateError,getSubmitOrderError:n.paymentStrategies.getExecuteError,getFinalizeOrderError:n.paymentStrategies.getFinalizeError,getLoadOrderError:n.order.getLoadError,getLoadCartError:n.cart.getLoadError,getLoadBillingCountriesError:n.countries.getLoadError,getLoadShippingCountriesError:n.shippingCountries.getLoadError,getLoadPaymentMethodsError:n.paymentMethods.getLoadError,getLoadPaymentMethodError:n.paymentMethods.getLoadMethodError,getInitializePaymentError:n.paymentStrategies.getInitializeError,getSignInError:n.customerStrategies.getSignInError,getSignOutError:n.customerStrategies.getSignOutError,getInitializeCustomerError:n.customerStrategies.getInitializeError,getLoadShippingOptionsError:n.consignments.getLoadShippingOptionsError,getSelectShippingOptionError:t(n),getContinueAsGuestError:n.billingAddress.getContinueAsGuestError,getUpdateBillingAddressError:n.billingAddress.getUpdateError,getUpdateSubscriptionsError:n.subscriptions.getUpdateError,getUpdateShippingAddressError:n.shippingStrategies.getUpdateAddressError,getDeleteConsignmentError:n.consignments.getDeleteError,getUpdateConsignmentError:n.consignments.getUpdateError,getCreateConsignmentsError:n.consignments.getCreateError,getInitializeShippingError:n.shippingStrategies.getInitializeError,getApplyStoreCreditError:n.storeCredit.getApplyError,getApplyCouponError:n.coupons.getApplyError,getRemoveCouponError:n.coupons.getRemoveError,getApplyGiftCertificateError:n.giftCertificates.getApplyError,getRemoveGiftCertificateError:n.giftCertificates.getRemoveError,getLoadInstrumentsError:n.instruments.getLoadError,getDeleteInstrumentError:n.instruments.getDeleteError,getLoadConfigError:n.config.getLoadError,getSignInEmailError:n.signInEmail.getSendError,getLoadB2BTokenError:n.b2bToken.getLoadError,getCreateCustomerAccountError:n.customer.getCreateAccountError,getCreateCustomerAddressError:n.customer.getCreateAddressError,getPickupOptionsError:n.pickupOptions.getLoadError,getLoadExtensionsError:n.extensions.getLoadError};return Object.assign({getError:e(i)},i)})}(),n=function(){const e=Cv(e=>e,e=>()=>Object.keys(e).some(t=>e[t]())),t=Iv(({shippingStrategies:e})=>e.isSelectingOption,({consignments:e})=>e.isUpdatingShippingOption,(e,t)=>n=>e()||t(n)),n=Iv(({customerStrategies:e})=>e.isInitializing,({customerStrategies:e})=>e.isSigningIn,({customerStrategies:e})=>e.isSigningOut,({customerStrategies:e})=>e.isExecutingPaymentMethodCheckout,({customerStrategies:e})=>e.isWidgetInteracting,(e,t,n,i,r)=>o=>e(o)||t(o)||n(o)||i(o)||r(o)),i=Iv(({shippingStrategies:e})=>e.isInitializing,({shippingStrategies:e})=>e.isUpdatingAddress,({shippingStrategies:e})=>e.isSelectingOption,({shippingStrategies:e})=>e.isWidgetInteracting,(e,t,n,i)=>r=>e(r)||t(r)||n(r)||i(r)),r=Iv(({paymentStrategies:e})=>e.isInitializing,({paymentStrategies:e})=>e.isExecuting,({paymentStrategies:e})=>e.isFinalizing,({paymentStrategies:e})=>e.isWidgetInteracting,(e,t,n,i)=>r=>e(r)||t(r)||n(r)||i(r)),o=Iv(({paymentStrategies:e})=>e.isExecuting,({checkout:e})=>e.isExecutingSpamCheck,(e,t)=>n=>e(n)||t());return Oe(a=>{const s={isLoadingCheckout:a.checkout.isLoading,isUpdatingCheckout:a.checkout.isUpdating,isExecutingSpamCheck:a.checkout.isExecutingSpamCheck,isSubmittingOrder:o(a),isFinalizingOrder:a.paymentStrategies.isFinalizing,isLoadingOrder:a.order.isLoading,isLoadingCart:a.cart.isLoading,isLoadingBillingCountries:a.countries.isLoading,isLoadingShippingCountries:a.shippingCountries.isLoading,isLoadingPaymentMethods:a.paymentMethods.isLoading,isLoadingPaymentMethod:a.paymentMethods.isLoadingMethod,isInitializingPayment:a.paymentStrategies.isInitializing,isSigningIn:a.customerStrategies.isSigningIn,isSigningOut:a.customerStrategies.isSigningOut,isExecutingPaymentMethodCheckout:a.customerStrategies.isExecutingPaymentMethodCheckout,isInitializingCustomer:a.customerStrategies.isInitializing,isInitializedCustomer:a.customerStrategies.isInitialized,isLoadingShippingOptions:a.consignments.isLoadingShippingOptions,isSelectingShippingOption:t(a),isUpdatingBillingAddress:a.billingAddress.isUpdating,isUpdatingSubscriptions:a.subscriptions.isUpdating,isCreatingCustomerAccount:a.customer.isCreatingCustomerAccount,isCreatingCustomerAddress:a.customer.isCreatingCustomerAddress,isContinuingAsGuest:a.billingAddress.isContinuingAsGuest,isUpdatingShippingAddress:a.shippingStrategies.isUpdatingAddress,isUpdatingConsignment:a.consignments.isUpdating,isDeletingConsignment:a.consignments.isDeleting,isCreatingConsignments:a.consignments.isCreating,isInitializingShipping:a.shippingStrategies.isInitializing,isApplyingStoreCredit:a.storeCredit.isApplying,isApplyingCoupon:a.coupons.isApplying,isRemovingCoupon:a.coupons.isRemoving,isApplyingGiftCertificate:a.giftCertificates.isApplying,isRemovingGiftCertificate:a.giftCertificates.isRemoving,isLoadingInstruments:a.instruments.isLoading,isDeletingInstrument:a.instruments.isDeleting,isLoadingConfig:a.config.isLoading,isSendingSignInEmail:a.signInEmail.isSending,isLoadingB2BToken:a.b2bToken.isLoading,isCustomerStepPending:n(a),isShippingStepPending:i(a),isPaymentStepPending:r(a),isLoadingPickupOptions:a.pickupOptions.isLoading};return Object.assign({isPending:e(s)},s)})}();return i=>({data:e(i),errors:t(i),statuses:n(i)})}());return new _v(d,E,O,function(e,t){const n={[Kn.ConsignmentsChanged]:Xn};return new Qn(e,t,n)}(E,O),new et(new rt(s)),new ct(new pt(c),f),_,p,new Zt(new Qt(c),_,g),new Ag(new kg(c),h),new xm(new Rm(c,{locale:i})),new zt(new jt(c)),new en(function(e,t){const n=new Ht,i=a(),r=new nn(t),o=new on(r,new Ot(new Dt(t)),new sn(new dn(t))),s=new yn(wn(i),new In(t)),d=new Zt(new Qt(t),o,s);return n.register(\"default\",()=>new Cn(e,d)),n}(d,c),C,w),new vt,new Ut(new qt(c)),new Zg(new nv(l,c)),v,new Jm(new Zm(c),new ey(s)),new ry(function(e,t,n){const i=new Zy({defaultToken:ny.CREDIT_CARD}),r=new Ky,a=new Ty(t),s=new nn(n),d=new sy(s),c=new Gm(new qm(n),d),l=new my(wn(o())),u=new Ay(a,c,r,l),h=Ee(),p=((e,t)=>new dg(new sg(e,t)))(h,l),m=new Ey(e);return i.register(ny.CONVERGE,()=>new ng(e,c,u,m,h)),i.register(ny.PPSDK,()=>new pg(e,c,((e,t,n,i,r)=>{const o=new yg;return o.register(ug.CARD,()=>new vg(e,t,r,i)),o.register(ug.NONE,()=>new fg(n,i)),o.register(ug.UNSUPPORTED,()=>{}),o})(e,c,n,p,m),new Ig(n,p),new dy(\"PPSDK\"))),i}(d,l,c),I,v,g,w),new iv(new rv(c)),new zg(new Ng(c,{locale:i}),d),new ov(function(e,t){const n=new Ht,i=Jg(e),r=new nn(t),o=new kg(t),s=new Ag(o,r),d=new Jm(new Zm(t),new ey(t)),c=a(),l=new Bg(new jg(t)),u=new ct(new pt(t),l),h=window,p=new Ti(i);return n.register(\"amazonpay\",()=>new dv(e,s,d,fi(),new ov(n))),n.register(\"stripeupe\",()=>new yv(e,new La(c),s,d)),n.register(\"braintreeacceleratedcheckout\",()=>new lv(e,u,s,d,new bg,new Io(new $i(a(),h,p),h))),n.register(\"paypalcommerceacceleratedcheckout\",()=>new pv(e,u,s,d,new bg,Ps(),rd())),n.register(\"default\",()=>new uv(e,s)),n}(d,c)),new gv(new vv(c)),g,new Rg(new Fg(c)),f,S,b,P)}class w_ extends ei{constructor(e){super(e||\"An unexpected error has occurred during config creation process. Please try again later.\"),this.name=\"AmazonPayV2ConfigCreationError\",this.type=\"amazon_pay_v2_config_creation_error\"}}function I_(e){return e instanceof Object&&\"buyNowInitializeOptions\"in e}var C_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class b_{constructor(e,t,n){this.paymentIntegrationService=e,this.amazonPayV2PaymentProcessor=t,this.amazonPayV2ConfigRequestSender=n}initialize(e){var t;return C_(this,void 0,void 0,function*(){const{methodId:n,containerId:i,amazonpay:r}=e,{buttonColor:o}=r||{};if(!n||!i)throw new _i('Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.');const{getPaymentMethodOrThrow:a}=this.paymentIntegrationService.getState(),s=a(n),{initializationData:d}=s;yield this.amazonPayV2PaymentProcessor.initialize(s),r||(yield this.paymentIntegrationService.loadDefaultCheckout());const c=I_(r)?void 0:r;I_(r)&&\"function\"==typeof(null===(t=r.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody)&&(this._buyNowInitializeOptions=r.buyNowInitializeOptions,this.amazonPayV2PaymentProcessor.updateBuyNowFlowFlag(!0)),this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:this.paymentIntegrationService.getState(),containerId:i,methodId:n,options:c,placement:ci.Cart,buttonColor:o,isButtonMicroTextDisabled:null==d?void 0:d.isButtonMicroTextDisabled}),this._buyNowInitializeOptions&&this.amazonPayV2PaymentProcessor.prepareCheckoutWithCreationRequestConfig(this._getCheckoutCreationRequestConfig.bind(this))})}deinitialize(){return this.amazonPayV2PaymentProcessor.deinitialize()}_createBuyNowCartOrThrow(){var e,t;return C_(this,void 0,void 0,function*(){const n=null===(t=null===(e=this._buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody)||void 0===t?void 0:t.call(e);if(!n)throw new ii(ti.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(n)}catch(e){throw new nr}})}_createCheckoutConfig(e){return C_(this,void 0,void 0,function*(){try{const t=(yield this.amazonPayV2ConfigRequestSender.createCheckoutConfig(e)).body,{payload:n,public_key:i}=t,r=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(t,[\"payload\",\"public_key\"]);return Object.assign({payloadJSON:n,publicKeyId:i},r)}catch(e){throw new w_}})}_getCheckoutCreationRequestConfig(){return C_(this,void 0,void 0,function*(){const e=yield this._createBuyNowCartOrThrow(),t={amount:String(e.baseAmount),currencyCode:e.currency.code};return{createCheckoutSessionConfig:yield this._createCheckoutConfig(e.id),estimatedOrderAmount:t,productType:0===ri(e)?ui.PayOnly:ui.PayAndShip}})}}class P_{constructor(e){this._requestSender=e}createCheckoutConfig(e){const t={cartId:e},n=Object.assign({\"X-API-INTERNAL\":mr,\"Content-Type\":gr.Json},vr);return this._requestSender.post(\"/api/storefront/payment/amazonpay\",{headers:n,body:t})}}const O_=Si(e=>{const t=n(),i=new P_(t),r=fi();return new b_(e,r,i)},[{id:\"amazonpay\"}]);var E_,A_,T_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};!function(e){e.Subtotal=\"Subtotal\",e.Shipping=\"Shipping\"}(E_||(E_={})),function(e){e.Black=\"black\",e.White=\"white\",e.WhiteBorder=\"white-border\"}(A_||(A_={}));class k_{constructor(e,t,n,i,r){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=n,this._braintreeSdk=i,this._applePayScriptLoader=r,this._onAuthorizeCallback=ce,this._subTotalLabel=E_.Subtotal,this._shippingLabel=E_.Shipping}initialize(e){var t,n;return T_(this,void 0,void 0,function*(){const{methodId:i,containerId:r,applepay:o}=e;if(!i||!o)throw new ii(ti.MissingPaymentMethod);yield this._applePayScriptLoader.loadSdk();const{onPaymentAuthorize:a,buyNowInitializeOptions:s,requiresShipping:d}=o;this._requiresShipping=d,this._buyNowInitializeOptions=s,this._onAuthorizeCallback=a,s||(yield this._paymentIntegrationService.loadDefaultCheckout()),yield this._paymentIntegrationService.loadPaymentMethod(i);const c=this._paymentIntegrationService.getState();return this._paymentMethod=c.getPaymentMethodOrThrow(i),c.getCart()&&(yield this._paymentIntegrationService.verifyCheckoutSpamProtection()),(null===(t=this._paymentMethod.initializationData)||void 0===t?void 0:t.gateway)===Hi.BRAINTREE&&this._paymentMethod.clientToken&&this._braintreeSdk.initialize(this._paymentMethod.clientToken),this._applePayButton=this._createButton(r,null===(n=this._paymentMethod.initializationData)||void 0===n?void 0:n.styleOption),this._applePayButton.addEventListener(\"click\",this._handleWalletButtonClick.bind(this)),Promise.resolve()})}deinitialize(){return Promise.resolve()}_createButton(e,t){const n=document.getElementById(e);if(!n)throw new _i(\"Unable to create wallet button without valid container ID.\");const i=this._createApplePayButtonElement(t);return n.appendChild(i),i}_createApplePayButtonElement(e){const t=document.createElement(\"apple-pay-button\");return t.setAttribute(\"buttonstyle\",(e=>{switch(e){case A_.White:return\"white\";case A_.WhiteBorder:return\"white-outline\";case A_.Black:default:return\"black\"}})(e)),t.setAttribute(\"type\",\"plain\"),t.setAttribute(\"style\",\"--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;\"),t}_handleWalletButtonClick(e){var t;return T_(this,void 0,void 0,function*(){if(e.preventDefault(),!this._paymentMethod||!this._paymentMethod.initializationData)throw new ii(ti.MissingPaymentMethod);if(this._buyNowInitializeOptions&&\"function\"==typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody){const{countryCode:e,currencyCode:n,merchantCapabilities:i,supportedNetworks:r,storeName:o}=this._paymentMethod.initializationData,a=this._getRequestWithEmptyTotal(e,n,r,i);this._requiresShipping&&(null===(t=a.requiredShippingContactFields)||void 0===t||t.push(\"postalAddress\"));const s=this._sessionFactory.create(a);this._handleApplePayEvents(s,this._paymentMethod,o),s.begin()}else{const e=this._paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getStoreConfigOrThrow(),i=e.getCheckoutOrThrow(),r=this._getBaseRequest(t,i,n,this._paymentMethod),o=this._sessionFactory.create(r);this._handleApplePayEvents(o,this._paymentMethod,n.storeProfile.storeName),o.begin()}})}_getRequestWithEmptyTotal(e,t,n,i){return{countryCode:e,currencyCode:t,supportedNetworks:n,merchantCapabilities:i,total:{label:\"\",amount:\"0\",type:\"pending\"},requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"]}}_getBaseRequest(e,t,n,i){var r;const{storeProfile:{storeCountryCode:o,storeName:a}}=n,{currency:{code:s,decimalPlaces:d}}=e,{initializationData:{merchantCapabilities:c,supportedNetworks:l}}=i,u=e.lineItems.physicalItems.length>0,h={requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"],countryCode:o,currencyCode:s,merchantCapabilities:c,supportedNetworks:l,lineItems:[],total:u?{label:a,amount:`${t.grandTotal.toFixed(d)}`,type:\"pending\"}:{label:a,amount:`${t.grandTotal.toFixed(d)}`,type:\"final\"}};if(u)null===(r=h.requiredShippingContactFields)||void 0===r||r.push(\"postalAddress\");else{const e=[{label:this._subTotalLabel,amount:`${t.subtotal.toFixed(d)}`}];t.taxes.forEach(t=>e.push({label:t.name,amount:`${t.amount.toFixed(d)}`})),h.lineItems=e}return h}_handleApplePayEvents(e,t,n){e.onvalidatemerchant=n=>T_(this,void 0,void 0,function*(){try{const{body:i}=yield this._onValidateMerchant(t,n);e.completeMerchantValidation(i)}catch(e){throw new Error(\"Merchant validation failed\")}}),this._buyNowInitializeOptions&&!this._requiresShipping&&(e.onpaymentmethodselected=()=>T_(this,void 0,void 0,function*(){yield this._createBuyNowCart(),this._handlePaymentMethodSelected(e)})),e.onshippingcontactselected=t=>T_(this,void 0,void 0,function*(){this._buyNowInitializeOptions&&this._requiresShipping&&(yield this._createBuyNowCart()),yield this._handleShippingContactSelected(e,n,t)}),e.onshippingmethodselected=t=>T_(this,void 0,void 0,function*(){yield this._handleShippingMethodSelected(e,n,t)}),e.oncancel=()=>T_(this,void 0,void 0,function*(){try{const e=`/remote-checkout/${t.id}/signout`;return yield this._requestSender.get(e),yield this._paymentIntegrationService.loadCheckout()}catch(e){throw new Yi}}),e.onpaymentauthorized=n=>T_(this,void 0,void 0,function*(){return this._onPaymentAuthorized(n,e,t)})}_createBuyNowCart(){var e,t;return T_(this,void 0,void 0,function*(){try{const n=null===(t=null===(e=this._buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody)||void 0===t?void 0:t.call(e);if(!n)throw new ii(ti.MissingCart);const i=yield this._paymentIntegrationService.createBuyNowCart(n);yield this._paymentIntegrationService.loadCheckout(i.id);const r=this._paymentIntegrationService.getState(),{shouldExecuteSpamCheck:o}=r.getCheckoutOrThrow();o&&(yield this._paymentIntegrationService.verifyCheckoutSpamProtection())}catch(e){throw new nr}})}_handlePaymentMethodSelected(e){const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getStoreConfigOrThrow(),r=t.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new ii(ti.MissingPaymentMethod);const o=this._getBaseRequest(n,r,i,this._paymentMethod);delete o.total.type,e.completePaymentMethodSelection({newTotal:o.total,newLineItems:o.lineItems})}_handleShippingContactSelected(e,t,n){var i;return T_(this,void 0,void 0,function*(){const r=this._transformContactToAddress(n.shippingContact);try{yield this._paymentIntegrationService.updateShippingAddress(r)}catch(t){throw e.abort(),new Error(\"Shipping address update failed\")}let o=this._paymentIntegrationService.getState();const{currency:{decimalPlaces:a}}=o.getCartOrThrow();let s=o.getCheckoutOrThrow();const d=null===(i=s.consignments[0].selectedShippingOption)||void 0===i?void 0:i.id,c=s.consignments[0].availableShippingOptions,l=null==c?void 0:c.find(({id:e})=>e===d),u=null==c?void 0:c.filter(e=>e.id!==d),h=l?[{label:l.description,amount:`${l.cost.toFixed(a)}`,detail:l.additionalDescription,identifier:l.id}]:[];if(u&&[...u.filter(e=>e.isRecommended),...u.filter(e=>!e.isRecommended)].forEach(e=>h.push({label:e.description,amount:`${e.cost.toFixed(a)}`,detail:e.additionalDescription,identifier:e.id})),!(c instanceof Array))throw new Error(\"Shipping options not available.\");if(0===c.length)return void e.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:\"pending\",label:t,amount:`${s.grandTotal.toFixed(a)}`},[]);const p=c.find(e=>e.isRecommended),m=p?p.id:c[0].id,y=l?l.id:m;try{yield this._updateShippingOption(y)}catch(e){throw new Error(\"Shipping options update failed\")}o=this._paymentIntegrationService.getState(),s=o.getCheckoutOrThrow(),e.completeShippingContactSelection({newShippingMethods:h,newTotal:{type:\"final\",label:t,amount:`${s.grandTotal.toFixed(a)}`},newLineItems:this._getUpdatedLineItems(s,a)})})}_handleShippingMethodSelected(e,t,n){return T_(this,void 0,void 0,function*(){const{shippingMethod:{identifier:i}}=n;try{yield this._updateShippingOption(i)}catch(t){throw e.abort(),new Error(\"Shipping option selection update failed.\")}const r=this._paymentIntegrationService.getState(),{currency:{decimalPlaces:o}}=r.getCartOrThrow(),a=r.getCheckoutOrThrow();e.completeShippingMethodSelection({newTotal:{type:\"final\",label:t,amount:`${a.grandTotal.toFixed(o)}`},newLineItems:this._getUpdatedLineItems(a,o)})})}_getUpdatedLineItems(e,t){const n=[{label:this._subTotalLabel,amount:`${e.subtotal.toFixed(t)}`}];return e.taxes.forEach(e=>n.push({label:e.name,amount:`${e.amount.toFixed(t)}`})),n.push({label:this._shippingLabel,amount:`${e.shippingCostTotal.toFixed(t)}`}),n}_updateShippingOption(e){return T_(this,void 0,void 0,function*(){return this._paymentIntegrationService.selectShippingOption(e)})}_onValidateMerchant(e,t){return T_(this,void 0,void 0,function*(){const n=[`validationUrl=${t.validationURL}`,`merchantIdentifier=${e.initializationData.merchantId}`,`displayName=${e.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${e.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:n})})}_onPaymentAuthorized(e,t,n){var i;return T_(this,void 0,void 0,function*(){const{token:r,billingContact:o,shippingContact:a}=e.payment,s=this._paymentIntegrationService.getState().getCartOrThrow().lineItems.physicalItems.length>0;let d;(null===(i=n.initializationData)||void 0===i?void 0:i.gateway)===Hi.BRAINTREE&&(d=yield this._getBraintreeDeviceData());const c={methodId:n.id,paymentData:{deviceSessionId:d,formattedPayload:{apple_pay_token:{payment_data:r.paymentData,payment_method:r.paymentMethod,transaction_id:r.transactionIdentifier}}}},l=this._transformContactToAddress(o),u=this._transformContactToAddress(a),h=null==a?void 0:a.emailAddress,p=(null==a?void 0:a.phoneNumber)||\"\";try{return yield this._paymentIntegrationService.updateBillingAddress(Object.assign(Object.assign({},l),{email:h,phone:p})),s&&(yield this._paymentIntegrationService.updateShippingAddress(u)),yield this._paymentIntegrationService.submitOrder({useStoreCredit:!1}),yield this._paymentIntegrationService.submitPayment(c),t.completePayment(ApplePaySession.STATUS_SUCCESS),this._onAuthorizeCallback()}catch(e){throw t.completePayment(ApplePaySession.STATUS_FAILURE),new Error(\"Payment cannot complete\")}})}_transformContactToAddress(e){return{firstName:(null==e?void 0:e.givenName)||\"\",lastName:(null==e?void 0:e.familyName)||\"\",city:(null==e?void 0:e.locality)||\"\",company:\"\",address1:(null==e?void 0:e.addressLines)&&e.addressLines[0]||\"\",address2:(null==e?void 0:e.addressLines)&&e.addressLines[1]||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",phone:(null==e?void 0:e.phoneNumber)||\"\",stateOrProvince:(null==e?void 0:e.administrativeArea)||\"\",stateOrProvinceCode:(null==e?void 0:e.administrativeArea)||\"\",customFields:[]}}_getBraintreeDeviceData(){return T_(this,void 0,void 0,function*(){try{const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e}catch(e){}})}}const D_=Si(e=>{const{getHost:t}=e.getState(),i=new Ti(e);return new k_(n({host:t()}),e,new Xi,new Vi(new $i(a(),window,i)),new er(new r))},[{id:\"applepay\"}]);var M_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class z_{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){var t;return M_(this,void 0,void 0,function*(){const{bigcommerce_payments:n,containerId:i,methodId:r}=e,o=Boolean(null==n?void 0:n.buyNowInitializeOptions);if(!r)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new _i('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!n)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');if(o&&!n.currencyCode)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments.currencyCode\" argument is not provided.');if(o&&\"function\"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new _i('Unable to initialize payment because \"options.bigcommerce_payments.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');o||(yield this.paymentIntegrationService.loadDefaultCheckout());const a=o?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(r,a,!1),this.renderButton(i,r,n)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:c,isServerSideShippingCallbacksEnabled:l}=d.initializationData||{},u={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},h={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},p=Object.assign(Object.assign({},!l&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o,l)}),m=Object.assign(Object.assign(Object.assign({fundingSource:s.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(r)},u),i&&h),c&&p),y=s.Buttons(m);y.isEligible()?y.render(`#${e}`):a&&\"function\"==typeof a?a():this.bigCommercePaymentsIntegrationService.removeElement(e)}handleClick(e){return M_(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,i,r){return M_(this,void 0,void 0,function*(){if(!e.orderID)throw new ii(ti.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!r){const e=yield t.order.get(),n=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}return a&&(yield this.bigCommercePaymentsIntegrationService.updateOrder(r)),r&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return M_(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return M_(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const N_=Si(e=>new z_(e,Ir(e)),[{id:\"bigcommerce_payments\"}]);var x_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class R_{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return x_(this,void 0,void 0,function*(){const{bigcommerce_payments_paylater:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new _i('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');if(a&&!o)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_paylater.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_paylater.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=this.paymentIntegrationService.getState(),d=a?o:s.getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i,d,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:c}=d.initializationData||{},l={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},u={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},h={onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e),onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o)},p=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT];let m=!1;p.forEach(t=>{if(!m){const n=Object.assign(Object.assign(Object.assign({fundingSource:t,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(r)},l),i&&u),c&&h),o=s.Buttons(n);o.isEligible()?(o.render(`#${e}`),m=!0):a&&\"function\"==typeof a&&a()}}),m||this.bigCommercePaymentsIntegrationService.removeElement(e)}handleClick(e){return x_(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,i){return x_(this,void 0,void 0,function*(){if(!e.orderID)throw new ii(ti.MissingOrderId);const r=this.paymentIntegrationService.getState().getCartOrThrow(),o=yield t.order.get();try{const t=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(o);if(yield this.paymentIntegrationService.updateBillingAddress(t),r.lineItems.physicalItems.length>0){const e=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(o);yield this.paymentIntegrationService.updateShippingAddress(e),yield this.bigCommercePaymentsIntegrationService.updateOrder()}return yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return x_(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return x_(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const F_=Si(e=>new R_(e,Ir(e)),[{id:\"bigcommerce_payments_paylater\"}]);var L_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class B_{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return L_(this,void 0,void 0,function*(){const{bigcommerce_payments_venmo:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new _i('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');if(a&&!o)throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_venmo.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new _i('Unable to initialize payment because \"options.bigcommerce_payments_venmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=a?o:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i,s,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onEligibilityFailure:o}=n,a=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),s=a.FUNDING.VENMO,d={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmo\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},c={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},l=Object.assign(Object.assign({fundingSource:s,style:this.getValidVenmoButtonStyles(r)},d),i&&c),u=a.Buttons(l);u.isEligible()?u.render(`#${e}`):o&&\"function\"==typeof o?o():this.bigCommercePaymentsIntegrationService.removeElement(e)}getValidVenmoButtonStyles(e){const t=this.bigCommercePaymentsIntegrationService.getValidButtonStyle(e);return t.color===dr.gold?Object.assign(Object.assign({},t),{color:void 0}):t}handleClick(e){return L_(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}}const j_=Si(e=>new B_(e,Ir(e)),[{id:\"bigcommerce_payments_venmo\"}]);class U_{constructor(e,t,n=window){this.paymentIntegrationService=e,this.boltScriptLoader=t,this.boltHostWindow=n}initialize(e){return t=this,n=void 0,r=function*(){const{bolt:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,style:o}=t||{};if(!i)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new _i('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.bolt\" argument is not provided.');if(!Boolean(r))throw new wi(\"Only buy now flow is implemented for Bolt button\");if(!(null==r?void 0:r.storefrontApiToken)||\"string\"!=typeof r.storefrontApiToken)throw new _i('Unable to initialize payment because \"options.storefrontApiToken\" argument is not provided.');const a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i),{initializationData:s,config:d}=a,{publishableKey:c,developerConfig:l}=s||{};yield this.boltScriptLoader.loadBoltClient(c,d.testMode,l,\"BigCommerce\",r.storefrontApiToken),this.renderButton(n,a,o)},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}deinitialize(){return Promise.resolve()}renderButton(e,t,n){var i;\"function\"==typeof(null===(i=this.boltHostWindow.BoltConnect)||void 0===i?void 0:i.setupProductPageCheckout)&&(this.addButtonContainer(e,t,n),this.boltHostWindow.BoltConnect.setupProductPageCheckout())}addButtonContainer(e,t,n){const i=document.getElementById(e);if(!i)return;const r=document.createElement(\"div\"),o=document.createElement(\"object\");r.setAttribute(\"id\",\"product-page-checkout-wrapper\"),r.setAttribute(\"class\",\"bolt-button-wrapper\"),r.setAttribute(\"style\",\"display:none\"),r.setAttribute(\"data-tid\",\"product-page-checkout-wrapper\"),o.setAttribute(\"data\",this.getBoltObjectData(t,n)),o.setAttribute(\"class\",\"bolt-product-checkout-button\"),r.append(o),i.innerHTML=\"\",i.append(r)}getBoltObjectData(e,t){const{initializationData:n,config:i}=e,{publishableKey:r,developerConfig:o}=n||{},a=this.boltScriptLoader.getDomainURL(!!i.testMode,o),s=this.getButtonHeight(null==t?void 0:t.size),d=this.getButtonBorderRadius(null==t?void 0:t.shape,s);return xe({url:`https://${a}/v1/checkout_button`,query:{publishable_key:r,variant:\"ppc\",height:s,border_radius:d}})}getButtonHeight(e){if(e)switch(e){case io.Small:return 25;case io.Large:return 45;case io.Medium:default:return 40}}getButtonBorderRadius(e,t){if(e)switch(e){case ro.Pill:return t?Math.round(t/2):void 0;case ro.Rect:default:return 4}}}const q_=Si(e=>new U_(e,new co(a())),[{id:\"bolt\"}]);function V_(e){const{color:t,fundingicons:n,height:i=40,layout:r,shape:o,size:a,tagline:s}=e||{},d={color:t,fundingicons:n,height:G_(i),layout:r,shape:o||\"rect\",size:a,tagline:s};return ue(d,J)}function G_(e){const t=Number(e);return!t||Number.isNaN(t)?40:t>55?55:t<25?25:t}var H_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class W_{constructor(e,t,n,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=n,this.braintreeHostWindow=i}initialize(e){return H_(this,void 0,void 0,function*(){const{braintreepaypal:t,containerId:n,methodId:i}=e;if(!i)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new _i('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.');let r,o=this.paymentIntegrationService.getState();if(t.buyNowInitializeOptions){if(!t.currencyCode)throw new _i('Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.');r=t.currencyCode}else yield this.paymentIntegrationService.loadDefaultCheckout(),o=this.paymentIntegrationService.getState(),r=o.getCartOrThrow().currency.code;const a=o.getPaymentMethodOrThrow(i),{clientToken:s,config:d,initializationData:c}=a;if(!s||!c)throw new ii(ti.MissingPaymentMethod);const l={currency:r,intent:c.intent,isCreditEnabled:c.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(l,e=>{this.renderPayPalButton(e,t,n,i,!!d.testMode)},e=>this.handleError(e,n,t.onError))})}deinitialize(){return H_(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}renderPayPalButton(e,t,n,i,r){const{style:o,shouldProcessPayment:a,onAuthorizeError:s,onEligibilityFailure:d}=t,{paypal:c}=this.braintreeHostWindow;if(c){const l=c.Buttons({env:r?\"sandbox\":\"production\",fundingSource:c.FUNDING.PAYPAL,style:V_(o),createOrder:()=>this.setupPayment(e,t,i),onApprove:t=>this.tokenizePayment(t,e,i,a,s)});l.isEligible()?l.render(`#${n}`):d&&\"function\"==typeof d&&d()}else this.braintreeIntegrationService.removeElement(n)}setupPayment(e,t,n){var i;return H_(this,void 0,void 0,function*(){const{onPaymentError:r,shippingAddress:o,buyNowInitializeOptions:a}=t;try{const r=\"function\"==typeof(null==a?void 0:a.getBuyNowCartRequestBody)?yield this.createBuyNowCart(a.getBuyNowCartRequestBody()):void 0;this.buyNowCartId=null==r?void 0:r.id;const s=this.paymentIntegrationService.getState(),d=s.getCustomer(),c=s.getPaymentMethodOrThrow(n),l=r?r.cartAmount:s.getCartOrThrow().cartAmount,u=r?t.currencyCode:s.getCartOrThrow().currency.code,h=o||(null==d?void 0:d.addresses[0]),p=h?Tl(h):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:p,amount:l,currency:u,offerCredit:!1,intent:null===(i=c.initializationData)||void 0===i?void 0:i.intent})}catch(e){throw r&&(Li(e)||e instanceof ei)&&r(e),e}})}tokenizePayment(e,t,n,i,r){return H_(this,void 0,void 0,function*(){try{const{deviceData:r}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),o=yield t.tokenizePayment(e),{details:a,nonce:s}=o,d=this.braintreeIntegrationService.mapToLegacyBillingAddress(a),c=this.braintreeIntegrationService.mapToLegacyShippingAddress(a);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",provider:n,action:i?\"process_payment\":\"set_external_checkout\",nonce:s,device_data:r,billing_address:JSON.stringify(d),shipping_address:JSON.stringify(c)},this.buyNowCartId&&{cart_id:this.buyNowCartId})),o}catch(e){throw r&&(Li(e)||e instanceof ei)&&r(e),e}})}createBuyNowCart(e){return H_(this,void 0,void 0,function*(){if(!e)throw new ii(ti.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(e)}catch(e){throw new nr}})}handleError(e,t,n){if(this.braintreeIntegrationService.removeElement(t),!n||!Li(e))throw e;n(e)}}const $_=Si(e=>{const t=window,n=new Ti(e),i=new Io(new $i(a(),t,n),t);return new W_(e,Ee(),i,t)},[{id:\"braintreepaypal\"}]);var Y_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class K_{constructor(e,t,n,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=n,this.braintreeHostWindow=i}initialize(e){return Y_(this,void 0,void 0,function*(){const{braintreepaypalcredit:t,containerId:n,methodId:i}=e;if(!i)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new _i('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.');let r,o=this.paymentIntegrationService.getState();if(t.buyNowInitializeOptions){if(!t.currencyCode)throw new _i('Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.');r=t.currencyCode}else yield this.paymentIntegrationService.loadDefaultCheckout(),o=this.paymentIntegrationService.getState(),r=o.getCartOrThrow().currency.code;const a=o.getPaymentMethodOrThrow(i),{clientToken:s,config:d,initializationData:c}=a;if(!s||!c)throw new ii(ti.MissingPaymentMethod);const l={currency:r,intent:c.intent,isCreditEnabled:c.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(l,e=>{this.renderPayPalButton(e,t,n,i,!!d.testMode)},e=>this.handleError(e,n,t.onError))})}deinitialize(){return Y_(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}renderPayPalButton(e,t,n,i,r){const{style:o,shouldProcessPayment:a,onAuthorizeError:s,onEligibilityFailure:d}=t,{paypal:c}=this.braintreeHostWindow;let l=!1;c&&[c.FUNDING.PAYLATER,c.FUNDING.CREDIT].forEach(u=>{const h=u===c.FUNDING.CREDIT?Object.assign({label:fo.CREDIT},V_(o)):V_(o);if(!l){const o=c.Buttons({env:r?\"sandbox\":\"production\",fundingSource:u,style:h,createOrder:()=>this.setupPayment(e,t,i),onApprove:t=>this.tokenizePayment(t,e,i,a,s)});o.isEligible()?(o.render(`#${n}`),l=!0):c.FUNDING.CREDIT&&d&&\"function\"==typeof d&&d()}}),c&&l||this.braintreeIntegrationService.removeElement(n)}setupPayment(e,t,n){var i;return Y_(this,void 0,void 0,function*(){const{onPaymentError:r,shippingAddress:o,buyNowInitializeOptions:a}=t;try{const r=\"function\"==typeof(null==a?void 0:a.getBuyNowCartRequestBody)?yield this.createBuyNowCart(a.getBuyNowCartRequestBody()):void 0;this.buyNowCartId=null==r?void 0:r.id;const s=this.paymentIntegrationService.getState(),d=s.getCustomer(),c=s.getPaymentMethodOrThrow(n),l=r?r.cartAmount:s.getCartOrThrow().cartAmount,u=r?t.currencyCode:s.getCartOrThrow().currency.code,h=o||(null==d?void 0:d.addresses[0]),p=h?Tl(h):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:p,amount:l,currency:u,offerCredit:!0,intent:null===(i=c.initializationData)||void 0===i?void 0:i.intent})}catch(e){throw r&&(Li(e)||e instanceof ei)&&r(e),e}})}tokenizePayment(e,t,n,i,r){return Y_(this,void 0,void 0,function*(){try{const{deviceData:r}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),o=yield t.tokenizePayment(e),{details:a,nonce:s}=o,d=this.braintreeIntegrationService.mapToLegacyBillingAddress(a),c=this.braintreeIntegrationService.mapToLegacyShippingAddress(a);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",provider:n,action:i?\"process_payment\":\"set_external_checkout\",nonce:s,device_data:r,billing_address:JSON.stringify(d),shipping_address:JSON.stringify(c)},this.buyNowCartId&&{cart_id:this.buyNowCartId})),o}catch(e){throw r&&(Li(e)||e instanceof ei)&&r(e),e}})}createBuyNowCart(e){return Y_(this,void 0,void 0,function*(){if(!e)throw new ii(ti.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(e)}catch(e){throw new nr}})}handleError(e,t,n){if(this.braintreeIntegrationService.removeElement(t),!n||!Li(e))throw e;n(e)}}const J_=Si(e=>{const t=window,n=new Ti(e),i=new Io(new $i(a(),t,n),t);return new K_(e,Ee(),i,t)},[{id:\"braintreepaypalcredit\"}]);var Z_=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Q_{constructor(e,t,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=n}initialize(e){return Z_(this,void 0,void 0,function*(){const{containerId:t,methodId:n}=e;if(!n)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.containerId\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const i=this.paymentIntegrationService.getState(),{clientToken:r,initializationData:o,config:a}=i.getPaymentMethodOrThrow(n);if(!r||!o)throw new ii(ti.MissingPaymentMethod);this.braintreeSdk.initialize(r);const s=yield this.braintreeSdk.getBraintreeVisaCheckout(),{currency:{code:d},cartAmount:c}=i.getCartOrThrow(),l=yield this.braintreeSdk.getVisaCheckoutSdk(a.testMode),u=s.createInitOptions({paymentRequest:{currencyCode:d,subtotal:String(c)},settings:{shipping:{collectShipping:!0}}});this.createSignInButton(t),yield l.init(u),l.on(\"payment.success\",e=>Z_(this,void 0,void 0,function*(){yield this.paymentSuccess(s,e)}))})}deinitialize(){return Promise.resolve()}paymentSuccess(e,t){return Z_(this,void 0,void 0,function*(){return Promise.all([e.tokenize(t),this.braintreeSdk.getDataCollectorOrThrow()]).then(([e,t])=>{const n=this.paymentIntegrationService.getState(),i=n.getShippingAddress(),r=n.getBillingAddress(),{shippingAddress:o=this.toVisaCheckoutAddress(i),billingAddress:a=this.toVisaCheckoutAddress(r)}=e;return this.postForm(Object.assign(Object.assign({},e),{shippingAddress:o,billingAddress:a}),t)})})}postForm(e,t){const{userData:n,billingAddress:i,shippingAddress:r,details:o}=e,{userEmail:a}=n,{deviceData:s}=t;return this.formPoster.postForm(\"/checkout.php\",{payment_type:e.type,nonce:e.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,i)),shipping_address:JSON.stringify(this.getAddress(a,r))})}toVisaCheckoutAddress(e){return e?{firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phone,streetAddress:e.address1,extendedAddress:e.address2,locality:e.city,region:e.stateOrProvinceCode,countryCode:e.countryCode,postalCode:e.postalCode}:{}}getAddress(e,t={}){return{email:e,first_name:t.firstName,last_name:t.lastName,phone_number:t.phoneNumber,address_line_1:t.streetAddress,address_line_2:t.extendedAddress,city:t.locality,state:t.region,country_code:t.countryCode,postal_code:t.postalCode}}createSignInButton(e){const t=document.querySelector(`#${e}`);if(!t)throw new Error(\"Need a container to place the button\");return this.insertVisaCheckoutButton(t)}insertVisaCheckoutButton(e){const t=document.createElement(\"div\");return t.style.display=\"flex\",t.style.flexDirection=\"column\",t.style.alignItems=\"flex-end\",t.innerHTML='\\n            <img\\n                alt=\"Visa Checkout\"\\n                class=\"v-button\"\\n                role=\"button\"\\n                src=\"https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178\"\\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>',e.appendChild(t),t}}const X_=Si(e=>{const t=window,n=new Ti(e),i=new Vi(new $i(a(),t,n));return new Q_(e,Ee(),i)},[{id:\"braintreevisacheckout\"}]);function ew(e){const{billingAddress:t,email:n,firstName:i,lastName:r,phone:o,shippingAddress:a}=e,s=t||a;return{email:n,first_name:i,last_name:r,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}function tw(e){const{email:t,phone:n,shippingAddress:i}=e,r=(null==i?void 0:i.recipientName)||\"\",[o,a]=r.split(\" \");return{email:t,first_name:o||\"\",last_name:a||\"\",phone_number:n,address_line_1:null==i?void 0:i.line1,address_line_2:null==i?void 0:i.line2,city:null==i?void 0:i.city,state:null==i?void 0:i.state,country_code:null==i?void 0:i.countryCode,postal_code:null==i?void 0:i.postalCode}}var nw=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};const iw=e=>{const{color:t,height:n}=e;return{backgroundColor:(i=t||\"\",i===vo.WHITE?\"#FFFFFF\":\"#3D95CE\"),backgroundPosition:\"50% 50%\",backgroundSize:\"80px auto\",backgroundImage:`url(\"/app/assets/img/payment-providers/venmo-logo-${t===vo.WHITE?vo.BLUE:vo.WHITE}.svg\")`,backgroundRepeat:\"no-repeat\",borderRadius:\"4px\",cursor:\"pointer\",transition:\"0.2s ease\",minHeight:`${n||40}px`,minWidth:\"150px\",height:\"100%\",width:\"100%\",border:t===vo.WHITE?\"1px solid black\":\"none\"};var i};class rw{constructor(e,t,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=n,this.onError=ce}initialize(e){return nw(this,void 0,void 0,function*(){const{braintreevenmo:t,containerId:n,methodId:i}=e;if(!i)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i),{clientToken:o,initializationData:a}=r,{paymentButtonStyles:s}=a,{cartButtonStyles:d}=s||{},c=(null==t?void 0:t.style)||d;if(!o||!a)throw new ii(ti.MissingPaymentMethod);if(!n)throw new _i('Unable to initialize payment because \"options.containerId\" argument is not provided.');yield this.paymentIntegrationService.loadDefaultCheckout(),this.onError=(null==t?void 0:t.onError)||this.handleError,this.braintreeSdk.initialize(o);try{const e=yield this.braintreeSdk.getVenmoCheckoutOrThrow();this.renderVenmoButton(e,n,null==t?void 0:t.buyNowInitializeOptions,c)}catch(e){(Al(e)||function(e){return e instanceof ki}(e))&&this.handleInitializationVenmoError(e,n)}})}deinitialize(){return nw(this,void 0,void 0,function*(){return yield this.braintreeSdk.deinitialize(),Promise.resolve()})}handleError(e){throw new Error(e.message)}createBuyNowCart(e){return nw(this,void 0,void 0,function*(){if(\"function\"==typeof(null==e?void 0:e.getBuyNowCartRequestBody)){const t=null==e?void 0:e.getBuyNowCartRequestBody();if(!t)throw new ii(ti.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new nr}}})}handleInitializationVenmoError(e,t){return this.removeVenmoContainer(t),this.onError(e)}removeVenmoContainer(e){const t=document.getElementById(e);t&&t.remove()}renderVenmoButton(e,t,n,i){const r=document.getElementById(t),{color:o}=i||{};if(!r)throw new _i(\"Unable to create wallet button without valid container ID.\");r.setAttribute(\"aria-label\",\"Venmo\"),Object.assign(r.style,iw(i||{})),r.addEventListener(\"click\",()=>nw(this,void 0,void 0,function*(){r.setAttribute(\"disabled\",\"true\");const t=yield this.createBuyNowCart(n);e.tokenize&&e.tokenize((e,n)=>nw(this,void 0,void 0,function*(){r.removeAttribute(\"disabled\"),e&&this.onError(e),yield this.handlePostForm(n,null==t?void 0:t.id)}))})),o===vo.BLUE&&(r.addEventListener(\"mouseenter\",()=>{r.style.backgroundColor=\"#0a7fc2\"}),r.addEventListener(\"mouseleave\",()=>{r.style.backgroundColor=iw(i||{}).backgroundColor}))}handlePostForm(e,t){return nw(this,void 0,void 0,function*(){const{deviceData:n}=yield this.braintreeSdk.getDataCollectorOrThrow(),{nonce:i,details:r}=e;this.formPoster.postForm(\"/checkout.php\",Object.assign({nonce:i,provider:\"braintreevenmo\",payment_type:\"paypal\",device_data:n,action:\"set_external_checkout\",billing_address:JSON.stringify(ew(r)),shipping_address:JSON.stringify(tw(r))},t&&{cart_id:t}))})}}const ow=Si(e=>{const t=window,n=a(),i=new Ti(e),r=new $i(n,t,i),o=new Vi(r);return new rw(e,Ee(),o)},[{id:\"braintreevenmo\"}]);var aw=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class sw{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t}initialize(e){var t,n,i;return aw(this,void 0,void 0,function*(){if(!e.methodId||!ra(e.methodId))throw new _i('Unable to proceed because \"methodId\" is not a valid key.');if(this._methodId=e.methodId,!e.containerId)throw new _i('Unable to proceed because \"containerId\" is not a valid key.');const r=e[this._getMethodOrThrow()];if(!r)throw new _i(\"Unable to proceed without valid options.\");const{buyNowInitializeOptions:o,currencyCode:a,buttonColor:s,buttonType:d,onError:c}=r;let l,u=this._paymentIntegrationService.getState();try{l=u.getPaymentMethodOrThrow(this._getMethodOrThrow())}catch(e){u=yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodOrThrow()),l=u.getPaymentMethodOrThrow(this._getMethodOrThrow())}if(this._countryCode=null===(t=l.initializationData)||void 0===t?void 0:t.storeCountry,this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(n=l.initializationData)||void 0===n?void 0:n.isWebViewExperimentOn)),o){if(!a)throw new _i('Unable to initialize payment because \"options.currencyCode\" argument is not provided.');this._currencyCode=a,this._buyNowInitializeOptions=o,yield this._googlePayPaymentProcessor.initialize(()=>l,this._getGooglePayClientOptions(),!!o,a)}else yield this._paymentIntegrationService.loadDefaultCheckout(),yield this._googlePayPaymentProcessor.initialize(()=>l,this._getGooglePayClientOptions());this._paymentButton=null!==(i=this._paymentButton)&&void 0!==i?i:this._googlePayPaymentProcessor.addPaymentButton(e.containerId,{buttonColor:null!=s?s:\"default\",buttonType:null!=d?d:\"plain\",onClick:this._handleClick(c)})})}deinitialize(){var e;return null===(e=this._paymentButton)||void 0===e||e.remove(),this._paymentButton=void 0,this._methodId=void 0,Promise.resolve()}_handleClick(e){return t=>aw(this,void 0,void 0,function*(){t.preventDefault();try{this._buyNowInitializeOptions?yield this._createBuyNowCartOrThrow(this._buyNowInitializeOptions):yield this._paymentIntegrationService.loadDefaultCheckout(),yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheet()}catch(t){let n=t;if(ia(t)){if(\"CANCELED\"===t.statusCode)throw new Yi;n=new eo(JSON.stringify(t))}throw null==e||e(new eo(\"An error occurred while requesting your Google Pay payment details.\")),n}})}_interactWithPaymentSheet(){var e;return aw(this,void 0,void 0,function*(){const t=yield this._googlePayPaymentProcessor.showPaymentSheet(),n=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(t),i=this._googlePayPaymentProcessor.mapToShippingAddressRequestBody(t),r=\"/embedded-checkout\"===window.location.pathname?this._paymentIntegrationService.getState().getStoreConfigOrThrow().links.siteLink:void 0;n&&(yield this._paymentIntegrationService.updateBillingAddress(n)),i&&!(null===(e=this._buyNowCart)||void 0===e?void 0:e.lineItems.digitalItems.length)&&(yield this._paymentIntegrationService.updateShippingAddress(i)),yield this._googlePayPaymentProcessor.setExternalCheckoutForm(this._getMethodOrThrow(),t,r)})}_getGooglePayClientOptions(){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:e,shippingAddress:t,shippingOptionData:n,offerData:i})=>aw(this,void 0,void 0,function*(){const{availableTriggers:r,addressChangeTriggers:o,shippingOptionsChangeTriggers:a,offerChangeTriggers:s}=this._googlePayPaymentProcessor.getCallbackTriggers();if(!r.includes(e))return;const d=o.includes(e)?yield this._googlePayPaymentProcessor.handleShippingAddressChange(t):void 0;a.includes(e)&&(yield this._googlePayPaymentProcessor.handleShippingOptionChange(n.id));const{newOfferInfo:c,error:l}=s.includes(e)?yield this._googlePayPaymentProcessor.handleCoupons(i):{},u=l;return this._buyNowInitializeOptions?this._getBuyNowTransactionInfo(d,c,u):this._getTransactionInfo(d,c,u)})}}}_createBuyNowCartOrThrow(e){return aw(this,void 0,void 0,function*(){if(\"function\"==typeof(null==e?void 0:e.getBuyNowCartRequestBody)){const t=e.getBuyNowCartRequestBody();try{this._buyNowCart=yield this._paymentIntegrationService.createBuyNowCart(t),yield this._paymentIntegrationService.loadCheckout(this._buyNowCart.id)}catch(e){if(\"string\"==typeof e)throw new nr(e);throw e}}})}_getBuyNowTransactionInfo(e,t,n){if(!this._buyNowCart)return;const{cartAmount:i}=this._buyNowCart,r=this._googlePayPaymentProcessor.getTotalPrice();return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},this._countryCode&&{countryCode:this._countryCode}),{currencyCode:this._getCurrencyCodeOrThrow(),totalPrice:r||String(i),totalPriceStatus:Yo.FINAL})},e&&{newShippingOptionParameters:e}),t&&{newOfferInfo:t}),n&&{error:n})}_getTransactionInfo(e,t,n){return aw(this,void 0,void 0,function*(){yield this._paymentIntegrationService.loadCheckout();const i=this._googlePayPaymentProcessor.getTotalPrice(),{code:r}=this._paymentIntegrationService.getState().getCartOrThrow().currency;return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},this._countryCode&&{countryCode:this._countryCode}),{currencyCode:r,totalPriceStatus:Yo.FINAL,totalPrice:i})},e&&{newShippingOptionParameters:e}),t&&{newOfferInfo:t}),n&&{error:n})})}_getMethodOrThrow(){return oi(this._methodId,()=>new ai(ni.PaymentNotInitialized))}_getCurrencyCodeOrThrow(){return oi(this._currencyCode,()=>new _i('Unable to initialize payment because \"options.currencyCode\" argument is not provided.'))}}const dw=Si(e=>{const t=n(),i=window,r=new Ti(e),o=new Vi(new $i(a(),i,r));return new sw(e,new da(la(),new Ka(e,o),t,Ee()))},[{id:\"googlepaybraintree\"}]),cw=Si(e=>new sw(e,new da(la(),new rs(e,new ts(a())),n(),Ee())),[{id:\"googlepaypaypalcommerce\"}]),lw=Si(e=>new sw(e,new da(la(),new ss(e,new Fr(a())),n(),Ee())),[{id:\"googlepay_bigcommerce_payments\"}]),uw=Si(e=>{const t=n();return new sw(e,new da(la(),new na(\"adyen\",e),t,Ee()))},[{id:\"googlepayadyenv2\"}]),hw=Si(e=>{const t=n();return new sw(e,new da(la(),new na(\"adyen\",e),t,Ee()))},[{id:\"googlepayadyenv3\"}]),pw=Si(e=>new sw(e,new da(la(),new pa(e),n(),Ee())),[{id:\"googlepayauthorizenet\"}]),mw=Si(e=>{const t=n();return new sw(e,new da(la(),new fa(e,t),t,Ee()))},[{id:\"googlepaycheckoutcom\"}]),yw=Si(e=>new sw(e,new da(la(),new _a(e),n(),Ee())),[{id:\"googlepaycybersourcev2\"},{id:\"googlepaybnz\"}]),gw=Si(e=>new sw(e,new da(la(),new Ca(e),n(),Ee())),[{id:\"googlepayorbital\"}]),vw=Si(e=>new sw(e,new da(la(),new Va(e,new La(a())),n(),Ee())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeupe\"},{id:\"googlepaystripeocs\"}]),fw=Si(e=>new sw(e,new da(la(),new Wa(e),n(),Ee())),[{id:\"googlepayworldpayaccess\"}]),Sw=Si(e=>new sw(e,new da(la(),new us(e,Ee()),n(),Ee())),[{id:\"googlepaytdonlinemart\"}]);class _w{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalButtonCreationService=n}initialize(e){var t,n,i,r,o;return n=this,i=void 0,o=function*(){const{paypalcommerce:n,containerId:i,methodId:r}=e,o=Boolean(null==n?void 0:n.buyNowInitializeOptions);if(!r)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new _i('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!n)throw new _i('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');if(o&&!n.currencyCode)throw new _i('Unable to initialize payment because \"options.paypalcommerce.currencyCode\" argument is not provided.');if(o&&\"function\"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new _i('Unable to initialize payment because \"options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');o||(yield this.paymentIntegrationService.loadDefaultCheckout());const a=o?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.paypalIntegrationService.loadPayPalSdk(r,a,!1),this.renderButton(i,r,n)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.paypalIntegrationService.getPayPalSdkOrThrow(),d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:c,isServerSideShippingCallbacksEnabled:l}=d.initializationData||{},u={onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},h=Object.assign(Object.assign({fundingSource:s.FUNDING.PAYPAL,style:this.paypalIntegrationService.getValidButtonStyle(r),isServerSideShippingCallbacksEnabled:l,isHostedCheckoutEnabled:c},i&&u),c&&o&&{onPaymentComplete:()=>o()}),p=this.paypalButtonCreationService.createPayPalButton(\"paypalcommerce\",t,h,i);p.isEligible()?p.render(`#${e}`):a&&\"function\"==typeof a?a():this.paypalIntegrationService.removeElement(e)}}const ww=Si(e=>{const t=ks(e),n=new Ms(e,t);return new _w(e,t,n)},[{id:\"paypalcommerce\"}]);var Iw=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Cw{constructor(e,t){this.paymentIntegrationService=e,this.paypalIntegrationService=t}initialize(e){return Iw(this,void 0,void 0,function*(){const{paypalcommercecredit:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new _i('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.');if(a&&!o)throw new _i('Unable to initialize payment because \"options.paypalcommercecredit.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new _i('Unable to initialize payment because \"options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=this.paymentIntegrationService.getState(),d=a?o:s.getCartOrThrow().currency.code;yield this.paypalIntegrationService.loadPayPalSdk(i,d,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.paypalIntegrationService.getPayPalSdkOrThrow(),d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:c,isServerSideShippingCallbacksEnabled:l}=d.initializationData||{},u={createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercecredit\"),onApprove:({orderID:e})=>this.paypalIntegrationService.tokenizePayment(t,e)},h={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},p=Object.assign(Object.assign({},!l&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o,l)}),m=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT];let y=!1;m.forEach(t=>{if(!y){const n=Object.assign(Object.assign(Object.assign({fundingSource:t,style:this.paypalIntegrationService.getValidButtonStyle(r)},u),i&&h),c&&p),o=s.Buttons(n);o.isEligible()?(o.render(`#${e}`),y=!0):a&&\"function\"==typeof a&&a()}}),y||this.paypalIntegrationService.removeElement(e)}handleClick(e){return Iw(this,void 0,void 0,function*(){if(e){const t=yield this.paypalIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,i,r){return Iw(this,void 0,void 0,function*(){if(!e.orderID)throw new ii(ti.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!r){const e=yield t.order.get(),n=this.paypalIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.paypalIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}return a&&(yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\",void 0,void 0,r)),r&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return Iw(this,void 0,void 0,function*(){const t=this.paypalIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.paypalIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\")}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return Iw(this,void 0,void 0,function*(){const t=this.paypalIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\")}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const bw=Si(e=>new Cw(e,ks(e)),[{id:\"paypalcommercecredit\"}]);var Pw=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ow{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}initialize(e){return Pw(this,void 0,void 0,function*(){const{paypalcommercevenmo:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new _i('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new _i('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new _i('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');if(a&&!o)throw new _i('Unable to initialize payment because \"options.paypalcommercevenmo.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new _i('Unable to initialize payment because \"options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=a?o:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.paypalCommerceIntegrationService.loadPayPalSdk(i,s,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onEligibilityFailure:o}=n,a=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),s=a.FUNDING.VENMO,d={createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercevenmo\"),onApprove:({orderID:e})=>this.paypalCommerceIntegrationService.tokenizePayment(t,e)},c={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},l=Object.assign(Object.assign({fundingSource:s,style:this.getValidVenmoButtonStyles(r)},d),i&&c),u=a.Buttons(l);u.isEligible()?u.render(`#${e}`):o&&\"function\"==typeof o?o():this.paypalCommerceIntegrationService.removeElement(e)}getValidVenmoButtonStyles(e){const t=this.paypalCommerceIntegrationService.getValidButtonStyle(e);return t.color===Bs.gold?Object.assign(Object.assign({},t),{color:void 0}):t}handleClick(e){return Pw(this,void 0,void 0,function*(){if(e){const t=yield this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}}const Ew=Si(e=>new Ow(e,Ks(e)),[{id:\"paypalcommercevenmo\"}]);var Aw=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Tw{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalExpressScriptLoader=t,this.formPoster=n}initialize(e){return Aw(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);if(!e.paypal)throw new _i;if(!t.config.merchantId)throw new ii(ti.MissingPaymentMethod);const n=yield this.paypalExpressScriptLoader.loadPaypalSDK(t.config.merchantId);this.renderButton(e,n)})}deinitialize(){return Promise.resolve()}renderButton(e,t){const{containerId:n,methodId:i,paypal:r}=e,{allowCredit:o,clientId:a,onPaymentError:s,shouldProcessPayment:d,style:c}=r,l=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);if(!l.config.merchantId)throw new ii(ti.MissingPaymentMethod);const u=l.config.merchantId,h=l.config.testMode?\"sandbox\":\"production\",p={[h]:a},m=t.FUNDING.CREDIT||\"credit\",y=o?[m]:[],g=o?[]:[m];return t.Button.render({env:h,client:p,commit:d,funding:{allowed:y,disallowed:g},style:this.getStyle(c),payment:(e,t)=>this.setupPayment(u,t,s),onAuthorize:(e,t)=>this.tokenizePayment(e,i,t,d)},n)}getStyle(e){const{color:t,fundingicons:n,label:i,layout:r,shape:o,size:a,tagline:s}=e||{};return{color:t,fundingicons:n,label:i,layout:r,shape:o||Ep.RECT,size:\"small\"===a?bp.RESPONSIVE:a,tagline:s}}setupPayment(e,t,n){return Aw(this,void 0,void 0,function*(){if(!t)throw new ai(ni.CheckoutButtonNotInitialized);try{const n=yield this.paymentIntegrationService.loadDefaultCheckout(),{id:i}=n.getCartOrThrow(),r=n.getHost()||\"\";return(yield t.request.post(`${r}/api/storefront/payment/paypalexpress`,{merchantId:e,cartId:i},{headers:Object.assign({\"X-API-INTERNAL\":mr},vr)})).id}catch(e){throw n&&e instanceof ei&&n(e),e}})}tokenizePayment(e,t,n,i){return Aw(this,void 0,void 0,function*(){if(!n)throw new ai(ni.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new ii(ti.MissingPayment);const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),o=yield n.payment.get(e.paymentID);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:r.id,action:i?\"process_payment\":\"set_external_checkout\",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(o.payer.payer_info)})})}}const kw=Si(e=>new Tw(e,new Dp(a()),Ee()),[{id:\"paypalexpress\"}]);var Dw=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Mw{constructor(e,t,n,i){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=n,this.loadingIndicator=i}initialize(e){return Dw(this,void 0,void 0,function*(){const{stripeocs:t,containerId:n}=e||{};if(!t||!n)throw new ai(ni.PaymentNotInitialized);const{gatewayId:i}=t;if(!i)throw new ii(ti.MissingPaymentMethod);const r=this._getMethodId(i),o=yield this.paymentIntegrationService.loadPaymentMethod(i,{params:{method:r}}),a=o.getPaymentMethodOrThrow(r,i),{loadingContainerId:s,buttonHeight:d,onComplete:c}=t;if(this._loadingIndicatorContainer=s,this._onComplete=c,!ld(a))throw new ii(ti.MissingPaymentMethod);const{initializationData:l}=a,{captureMethod:u}=l,h=this.stripeIntegrationService.getStripeJsVersion(l);this._captureMethod=u,this._stripeClient=yield this.scriptLoader.getStripeClient(l,o.getCartLocale(),h),yield this.paymentIntegrationService.loadDefaultCheckout(),yield this._mountExpressCheckoutElement(n,this._stripeClient,d),this._initializeEvents(r)})}signIn(){return Promise.resolve()}signOut(){return Promise.resolve()}executePaymentMethodCheckout(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_mountExpressCheckoutElement(e,t,n=40){return Dw(this,void 0,void 0,function*(){const i=this._shouldRequireShippingAddress(),r=Object.assign(Object.assign(Object.assign({shippingAddressRequired:i},i?{allowedShippingCountries:yield this._getAvailableCountries()}:{}),i?{shippingRates:[{id:\"_\",amount:0,displayName:\"Pending rates\"}]}:{}),{billingAddressRequired:!0,emailRequired:!0,phoneNumberRequired:!0,paymentMethods:{link:Da.AUTO,applePay:Da.NEVER,googlePay:Da.NEVER,amazonPay:Da.NEVER,paypal:Da.NEVER,klarna:Da.NEVER},buttonHeight:n}),{cartAmount:o=1}=this.paymentIntegrationService.getState().getCart()||{},a=Object.assign({mode:\"payment\",amount:this._toCents(o),currency:this._getCurrency()},this._captureMethod?{captureMethod:this._captureMethod}:{});this._stripeElements=t.elements(a),this._linkV2Element=this._stripeElements.create(za.EXPRESS_CHECKOUT,r),this._linkV2Element.mount(`#${e}`)})}_initializeEvents(e){this._linkV2Element&&(this._shouldRequireShippingAddress()&&(this._linkV2Element.on(xa.SHIPPING_ADDRESS_CHANGE,e=>Dw(this,void 0,void 0,function*(){return this._onShippingAddressChange(e)})),this._linkV2Element.on(xa.SHIPPING_RATE_CHANGE,e=>Dw(this,void 0,void 0,function*(){return this._onShippingRateChange(e)}))),this._linkV2Element.on(xa.CONFIRM,t=>Dw(this,void 0,void 0,function*(){return this._onConfirm(t,e)})),this._linkV2Element.on(xa.CANCEL,this._onCancel))}_onShippingAddressChange(e){return Dw(this,void 0,void 0,function*(){if(!(\"address\"in e))return;const t=e.address,n={firstName:\"\",lastName:\"\",phone:\"\",company:\"\",address1:\"\",address2:\"\",city:(null==t?void 0:t.city)||\"\",countryCode:(null==t?void 0:t.country)||\"\",postalCode:(null==t?void 0:t.postal_code)||\"\",stateOrProvince:(null==t?void 0:t.state)||\"\",stateOrProvinceCode:(null==t?void 0:t.state)||\"\",customFields:[]};yield this.paymentIntegrationService.updateShippingAddress(n);const i=yield this._getAvailableShippingOptions();yield this._updateDisplayedPrice(),(null==i?void 0:i.length)?e.resolve({shippingRates:i}):e.reject()})}_onCancel(){throw new Yi}_onShippingRateChange(e){return Dw(this,void 0,void 0,function*(){if(\"shippingRate\"in e){const{shippingRate:t}=e;yield this._handleShippingOptionChange(null==t?void 0:t.id),yield this._updateDisplayedPrice(),e.resolve({})}})}_onConfirm(e,t){return Dw(this,void 0,void 0,function*(){if(\"billingDetails\"in e&&\"shippingAddress\"in e&&this._stripeClient&&this._stripeElements){yield this.stripeIntegrationService.verifyCheckoutSpamProtection(),yield this._updateShippingAndBillingAddress(e),yield this.paymentIntegrationService.submitOrder();const n=this._getPaymentPayload(t);try{yield this.paymentIntegrationService.submitPayment(n)}catch(e){yield this._processAdditionalAction(e,t)}}return Promise.resolve()})}_updateShippingAndBillingAddress(e){var t,n,i,r,o,a,s,d;return Dw(this,void 0,void 0,function*(){const c=this._shouldRequireShippingAddress(),l=(null===(n=null===(t=e.shippingAddress)||void 0===t?void 0:t.name)||void 0===n?void 0:n.split(\" \")[0])||(null===(r=null===(i=e.billingDetails)||void 0===i?void 0:i.name)||void 0===r?void 0:r.split(\" \")[0])||\"\",u=(null===(a=null===(o=e.shippingAddress)||void 0===o?void 0:o.name)||void 0===a?void 0:a.split(\" \")[1])||(null===(d=null===(s=e.billingDetails)||void 0===s?void 0:s.name)||void 0===d?void 0:d.split(\" \")[1])||\"\";if(c){const t=this._mapShippingAddress(e.shippingAddress,e.billingDetails,l,u);yield this.paymentIntegrationService.updateShippingAddress(t)}const h=this._mapBillingAddress(e.shippingAddress,e.billingDetails,l,u);yield this.paymentIntegrationService.updateBillingAddress(h)})}_mapShippingAddress(e,t,n,i){var r,o,a,s,d,c,l;return{firstName:n,lastName:i,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==e?void 0:e.address)||void 0===r?void 0:r.line1)||\"\",address2:(null===(o=null==e?void 0:e.address)||void 0===o?void 0:o.line2)||\"\",city:(null===(a=null==e?void 0:e.address)||void 0===a?void 0:a.city)||\"\",countryCode:(null===(s=null==e?void 0:e.address)||void 0===s?void 0:s.country)||\"\",postalCode:(null===(d=null==e?void 0:e.address)||void 0===d?void 0:d.postal_code)||\"\",stateOrProvince:(null===(c=null==e?void 0:e.address)||void 0===c?void 0:c.state)||\"\",stateOrProvinceCode:(null===(l=null==e?void 0:e.address)||void 0===l?void 0:l.state)||\"\",customFields:[]}}_mapBillingAddress(e,t,n,i){var r,o,a,s,d,c;return{email:(null==t?void 0:t.email)||\"\",firstName:n,lastName:i,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==t?void 0:t.address)||void 0===r?void 0:r.line1)||\"\",address2:\"\",city:(null===(o=null==t?void 0:t.address)||void 0===o?void 0:o.city)||\"\",countryCode:(null===(a=null==t?void 0:t.address)||void 0===a?void 0:a.country)||\"\",postalCode:(null===(s=null==t?void 0:t.address)||void 0===s?void 0:s.postal_code)||\"\",stateOrProvince:(null===(d=null==t?void 0:t.address)||void 0===d?void 0:d.state)||\"\",stateOrProvinceCode:(null===(c=null==e?void 0:e.address)||void 0===c?void 0:c.state)||\"\",customFields:[]}}_processAdditionalAction(e,t){return Dw(this,void 0,void 0,function*(){if(!ya(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this._stripeClient||!this._stripeElements)throw new ai(ni.PaymentNotInitialized);const{data:n}=e.body.additional_action_required,{token:i}=n,{paymentIntent:r}=yield this._confirmStripePaymentOrThrow(n,t),o=this._getPaymentPayload(t,(null==r?void 0:r.id)||i);try{this._toggleLoadingIndicator(!0),yield this.paymentIntegrationService.submitPayment(o),yield this._completeCheckoutFlow()}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}finally{this._toggleLoadingIndicator(!1)}})}_confirmStripePaymentOrThrow(e,t){var n,i,r;return Dw(this,void 0,void 0,function*(){const{token:o,redirect_url:a}=e,s=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,a);let d;try{const e=(yield this.stripeIntegrationService.isPaymentCompleted(t,this._stripeClient))?yield null===(r=this._stripeClient)||void 0===r?void 0:r.retrievePaymentIntent(o||\"\"):yield null===(n=this._stripeClient)||void 0===n?void 0:n.confirmPayment({elements:s.elements,clientSecret:o,redirect:Da.IF_REQUIRED,confirmParams:{return_url:null===(i=s.confirmParams)||void 0===i?void 0:i.return_url}});if(d=null==e?void 0:e.error,d||!(null==e?void 0:e.paymentIntent))throw new eo;return e}catch(e){return this.stripeIntegrationService.throwStripeError(d)}})}_completeCheckoutFlow(){return Dw(this,void 0,void 0,function*(){return\"function\"==typeof this._onComplete?this._onComplete():(window.location.replace(\"/checkout/order-confirmation\"),Promise.resolve())})}_getPaymentPayload(e,t){var n;const i=(null===(n=this.paymentIntegrationService.getState().getCart())||void 0===n?void 0:n.id)||\"\";return{methodId:e,paymentData:{formattedPayload:Object.assign(Object.assign({cart_id:i},t?{credit_card_token:{token:t}}:{}),{confirm:!1,method:ka.Link})}}}_shouldRequireShippingAddress(){const{getCart:e}=this.paymentIntegrationService.getState(),{lineItems:t}=e()||{};return!!(null==t?void 0:t.physicalItems.length)}_updateDisplayedPrice(){return Dw(this,void 0,void 0,function*(){this._stripeElements&&this._stripeElements.update({currency:this._getCurrency(),mode:\"payment\",amount:yield this._getTotalPrice()})})}_getCurrency(){var e;if(!this._currencyCode){const t=null===(e=this.paymentIntegrationService.getState().getCart())||void 0===e?void 0:e.currency;t&&(this._currencyCode=t.code.toLowerCase())}return this._currencyCode}_getTotalPrice(){var e;return Dw(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const{getCheckoutOrThrow:t,getCart:n}=this.paymentIntegrationService.getState(),{decimalPlaces:i}=(null===(e=n())||void 0===e?void 0:e.currency)||{},r=ge(t().outstandingBalance,i).toFixed(i);return this._toCents(+r)})}_getAvailableCountries(){var e;return Dw(this,void 0,void 0,function*(){const t=yield this.paymentIntegrationService.loadShippingCountries();return((null===(e=t.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code))||[]).filter(e=>wd.includes(e))})}_getAvailableShippingOptions(){var e,t,n;return Dw(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState().getConsignments();if(!(null==i?void 0:i[0]))return;const r=i[0],o=(r.availableShippingOptions||[]).map(this._getStripeShippingOption.bind(this)),a=null===(e=r.availableShippingOptions)||void 0===e?void 0:e.find(e=>e.isRecommended),s=null===(t=r.selectedShippingOption)||void 0===t?void 0:t.id,d=null==a?void 0:a.id;return s?o.sort(e=>e.id===s?-1:0):d?(o.sort(e=>e.id===d?-1:0),yield this._handleShippingOptionChange(d)):yield this._handleShippingOptionChange(null===(n=o[0])||void 0===n?void 0:n.id),o.slice(0,9)})}_getStripeShippingOption({id:e,cost:t,description:n}){return{id:e,displayName:n,amount:this._toCents(t)}}_handleShippingOptionChange(e){return Dw(this,void 0,void 0,function*(){if(e&&\"shipping_option_unselected\"!==e)return this.paymentIntegrationService.selectShippingOption(e)})}_getAmountTransformer(){if(this._amountTransformer)return this._amountTransformer;const{getCart:e}=this.paymentIntegrationService.getState(),{currency:t}=e()||{};return t?new _d(t.decimalPlaces):void 0}_toCents(e){const t=Math.round(100*e),n=this._getAmountTransformer();return n?n.toInteger(e):t}_toggleLoadingIndicator(e){e&&this._loadingIndicatorContainer?this.loadingIndicator.show(this._loadingIndicatorContainer):this.loadingIndicator.hide()}_getMethodId(e){const{initializationData:{checkoutSessionEnabled:t}={}}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e);return t?ka.CHECKOUT_SESSION:ka.OCS}}const zw=Si(e=>{const t=new La(a()),n=new Sd({containerStyles:vd});return new Mw(e,t,new yd(e,t),n)},[{id:\"stripeocs\"}]),Nw=e=>{const t=Ie(e);return document.getElementById(t)?Nw(e):t};function xw(e){return Object.prototype.hasOwnProperty.call(e,\"cacheKey\")}class Rw{constructor(e){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=Object.assign({maxSize:0,isEqual:Be,onExpire:ce},e)}getKey(...e){const t=this._resolveMap(...e),{index:n,parentMap:i}=t;let{map:r}=t;return r&&r.cacheKey?r.usedCount++:r=this._generateMap(i,e.slice(n)),this._removeLeastUsedMap(r),r.cacheKey}getUsedCount(...e){const{map:t}=this._resolveMap(...e);return t?t.usedCount:0}_resolveMap(...e){let t=0,n=this._map;for(;n.maps.length;){let i=!1;for(let r=0;r<n.maps.length;r++){const o=n.maps[r];if(this._options.isEqual(o.value,e[t])){if(n.maps.unshift(...n.maps.splice(r,1)),(0===e.length||t===e.length-1)&&xw(o))return{index:t,map:o,parentMap:n};i=!0,n=o,t++;break}}if(!i)break}return{index:t,parentMap:n}}_generateMap(e,t){let n,i=0,r=e;do{n={maps:[],parentMap:r,usedCount:1,value:t[i]},r.maps.unshift(n),r=n,i++}while(i<t.length);const o=n;return o.cacheKey=\"\"+ ++this._lastId,o}_removeLeastUsedMap(e){if(!this._options.maxSize)return;const t=this._usedMaps.indexOf(e);if(this._usedMaps.splice(-1===t?0:t,-1===t?0:1,e),this._usedMaps.length<=this._options.maxSize)return;const n=this._usedMaps.pop();n&&(this._removeMap(n),this._options.onExpire(n.cacheKey))}_removeMap(e){e.parentMap&&(e.parentMap.maps.splice(e.parentMap.maps.indexOf(e),1),function(e){return Object.prototype.hasOwnProperty.call(e,\"parentMap\")}(e.parentMap)||this._removeMap(e.parentMap))}}function Fw(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const i=Object.getOwnPropertyDescriptor(e.prototype,n);i&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,function(e,t,n){if(\"function\"!=typeof n.value)return n;let i=new Rw,r=n.value,o=Pe(r);return Bn(e,t,{get(){const e=(...e)=>{const t=o.call(this,...e);if(1===i.getUsedCount(...e))return t;const n=r.call(this,...e);return kv(n,t,{keyFilter:e=>!function(e){return 0===`${e}`.indexOf(\"$$\")||0===`${e}`.indexOf(\"_\")}(e)})?t:(o.cache.set(i.getKey(...e),n),n)};return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){i=new Rw,r=e,o=Pe(r)}})}(e.prototype,n,i))}),t}let Lw=class{constructor(e){this._checkoutButton=e.checkoutButton}getInitializeButtonError(e){return this._checkoutButton.getInitializeError(e)}getDeinitializeButtonError(e){return this._checkoutButton.getDeinitializeError(e)}};Lw=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Fw],Lw);const Bw=Lw;let jw=class{constructor(e){this._checkoutButton=e.checkoutButton}isInitializingButton(e){return this._checkoutButton.isInitializing(e)}isDeinitializingButton(e){return this._checkoutButton.isDeinitializing(e)}};jw=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Fw],jw);const Uw=jw;function qw(e){return{errors:new Bw(e),statuses:new Uw(e)}}let Vw=class{constructor(e,t){this._store=e,this._buttonStrategyActionCreator=t,this._state=qw(this._store.getState()),this._store.subscribe(e=>{this._state=qw(e)})}getState(){return this._state}subscribe(e,...t){return this._store.subscribe(()=>e(this.getState()),e=>e.checkoutButton.getState(),...t.map(e=>t=>e(qw(t))))}initializeButton(e){const t=(n=e.containerId,/^\\w[\\w\\-\\:\\.]*$/.test(n)?[e.containerId]:function(e,t){const n=document.querySelectorAll(e);if(!n.length)throw new Gt(`Unable to find any element with the specified selector: ${e}`);return Array.prototype.slice.call(n).map(e=>(e.id||(e.id=Nw(t)),e.id))}(e.containerId,`${e.methodId}-container`));var n;return Promise.all(t.map(t=>{const n=this._buttonStrategyActionCreator.initialize(Object.assign(Object.assign({},e),{containerId:t})),i=`checkoutButtonStrategy:${e.methodId}:${t}`;return this._store.dispatch(n,{queueId:i})})).then(()=>this.getState())}deinitializeButton(e){const t=this._buttonStrategyActionCreator.deinitialize(e),n=`checkoutButtonStrategy:${e.methodId}`;return this._store.dispatch(t,{queueId:n}).then(()=>this.getState())}};Vw=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Bn],Vw);const Gw=Vw;class Hw{constructor(e,t,n){this._registry=e,this._registryV2=t,this._paymentMethodActionCreator=n}initialize(e){return t=>{const n={methodId:e.methodId,containerId:e.containerId};if(t.getState().checkoutButton.isInitialized(e.methodId,e.containerId))return f();const i=e.currencyCode?{params:{currencyCode:e.currencyCode}}:{},r=Object.assign(Object.assign({},i),{timeout:e.timeout,useCache:!0});return g(C(l(Jv.InitializeButtonRequested,void 0,n)),this._paymentMethodActionCreator.loadPaymentMethod(e.methodId,r)(t),v(()=>this._getStrategy(e.methodId).initialize(e).then(()=>l(Jv.InitializeButtonSucceeded,void 0,n)))).pipe(P(e=>Qe(Jv.InitializeButtonFailed,e,n)))}}deinitialize(e){return t=>{const n={methodId:e.methodId};return t.getState().checkoutButton.isInitialized(e.methodId)?g(C(l(Jv.DeinitializeButtonRequested,void 0,n)),v(()=>this._getStrategy(e.methodId).deinitialize().then(()=>l(Jv.DeinitializeButtonSucceeded,void 0,n)))).pipe(P(e=>Qe(Jv.DeinitializeButtonFailed,e,n))):f()}}_getStrategy(e){let t;try{t=this._registryV2.get({id:e})}catch(n){t=this._registry.get(e)}return t}}class Ww extends ot{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var $w,Yw,Kw,Jw,Zw,Qw,Xw,eI;class tI{constructor(e){this._scriptLoader=e,this._window=window}loadPaypal(e=\"\"){return t=this,n=void 0,r=function*(){const t=\"//www.paypalobjects.com/api/checkout.min.js\",n={async:!0,attributes:{\"data-merchant-id\":e}};if(e?yield this._scriptLoader.loadScript(t,n):yield this._scriptLoader.loadScript(t),!this._window.paypal)throw new Ww;return this._window.paypal},new((i=void 0)||(i=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((r=r.apply(t,n||[])).next())});var t,n,i,r}}!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}($w||($w={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(Yw||(Yw={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(Kw||(Kw={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(Jw||(Jw={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(Zw||(Zw={}));class nI{constructor(e,t,n,i,r=\"\"){this._store=e,this._checkoutActionCreator=t,this._paypalScriptLoader=n,this._formPoster=i,this._host=r}initialize(e){const t=e.paypal,n=this._store.getState(),i=this._paymentMethod=n.paymentMethods.getPaymentMethod(e.methodId);if(!t)throw new Gt;if(!i)throw new at(nt.MissingPaymentMethod);return this._paypalScriptLoader.loadPaypal(i.config.merchantId).then(n=>{var r,o;if(!i||!i.config.merchantId)throw new at(nt.MissingPaymentMethod);const a=i.config.merchantId,s=i.config.testMode?\"sandbox\":\"production\",d={[s]:t.clientId},c=n.FUNDING.CREDIT||\"credit\",l=t.allowCredit?[c]:[],u=t.allowCredit?[]:[c];return n.Button.render({env:s,client:d,commit:t.shouldProcessPayment,funding:{allowed:l,disallowed:u},style:Object.assign(Object.assign({shape:Zw.RECT},pe(t.style,\"layout\",\"color\",\"label\",\"shape\",\"tagline\",\"fundingicons\")),{size:\"paypalexpress\"===i.id&&\"small\"===(null===(r=t.style)||void 0===r?void 0:r.size)?Yw.RESPONSIVE:null===(o=t.style)||void 0===o?void 0:o.size}),payment:(e,n)=>this._setupPayment(a,n,t.onPaymentError),onAuthorize:(e,n)=>this._tokenizePayment(e,n,t.shouldProcessPayment,t.onAuthorizeError)},e.containerId)})}deinitialize(){return this._paymentMethod=void 0,Promise.resolve()}_setupPayment(e,t,n){if(!t)throw new vn(un.CheckoutButtonNotInitialized);return this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout()).then(n=>{const i=n.cart.getCart(),r=i?i.id:\"\";return t.request.post(`${this._host}/api/storefront/payment/paypalexpress`,{merchantId:e,cartId:r},{headers:Object.assign({\"X-API-INTERNAL\":kt},tt)})}).then(e=>e.id).catch(e=>{throw n&&n(e),e})}_tokenizePayment(e,t,n,i){if(!this._paymentMethod)throw new vn(un.CheckoutButtonNotInitialized);if(!t)throw new vn(un.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new at(nt.MissingPayment);const r=this._paymentMethod.id;return t.payment.get(e.paymentID).then(t=>{this._formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:r,action:n?\"process_payment\":\"set_external_checkout\",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(t.payer.payer_info)})})}}function iI(e){const{host:t}=null!=e?e:{},i=S_({config:{meta:{host:null==e?void 0:e.host,locale:null==e?void 0:e.locale},errors:{},statuses:{}}}),r=n({host:t}),o=Ee({host:t}),s=function(e,t){const n=new Wt;for(const[,i]of Object.entries(t))if(Vt(i))for(const t of i.resolveIds)n.register(t,()=>i(e));return n}(Jg(i),We);return new Gw(i,new Hw(function(e,t,n,i){const r=new Ht,o=a(),s=new nn(t),d=new on(s,new Ot(new Dt(t)),new sn(new dn(t)));return r.register(Ly.PAYPALEXPRESS,()=>new nI(e,d,new tI(o),n,i)),r}(i,r,o,t),s,new Jm(new Zm(r),new ey(r))))}!function(e){e.CheckoutComplete=\"CHECKOUT_COMPLETE\",e.CheckoutError=\"CHECKOUT_ERROR\",e.CheckoutLoaded=\"CHECKOUT_LOADED\",e.FrameError=\"FRAME_ERROR\",e.FrameLoaded=\"FRAME_LOADED\",e.SignedOut=\"SIGNED_OUT\"}(Qw||(Qw={}));class rI extends At{constructor(e){super(e,{message:e.body.title}),this.name=\"InvalidLoginTokenError\",this.type=\"invalid_login_token\"}}!function(e){e.MissingContainer=\"missing_container\",e.MissingContent=\"missing_content\",e.UnknownError=\"unknown_error\"}(Xw||(Xw={}));class oI extends ot{constructor(e,t=Xw.UnknownError){super(e||\"Unable to embed the checkout form.\"),this.subtype=t,this.name=\"NotEmbeddableError\",this.type=\"not_embeddable\"}}!function(e){e.StyleConfigured=\"STYLE_CONFIGURED\"}(eI||(eI={}));const aI=\"isCookieAllowed\",sI=\"lastAllowCookieAttempt\";let dI=class{constructor(e,t,n,i,r,o,a,s){this._iframeCreator=e,this._messageListener=t,this._messagePoster=n,this._loadingIndicator=i,this._requestSender=r,this._storage=o,this._location=a,this._options=s,this._isAttached=!1,this._options.onComplete&&this._messageListener.addListener(Qw.CheckoutComplete,this._options.onComplete),this._options.onError&&this._messageListener.addListener(Qw.CheckoutError,this._options.onError),this._options.onLoad&&this._messageListener.addListener(Qw.CheckoutLoaded,this._options.onLoad),this._options.onFrameLoad&&this._messageListener.addListener(Qw.FrameLoaded,this._options.onFrameLoad),this._options.onSignOut&&this._messageListener.addListener(Qw.SignedOut,this._options.onSignOut),this._messageListener.addListener(Qw.FrameLoaded,()=>this._configureStyles())}attach(){return this._isAttached?Promise.resolve(this):(this._isAttached=!0,this._messageListener.listen(),this._loadingIndicator.show(this._options.containerId),this._allowCookie().then(()=>this._attemptLogin()).then(e=>this._iframeCreator.createFrame(e,this._options.containerId)).then(e=>{this._iframe=e,this._configureStyles(),this._loadingIndicator.hide()}).catch(e=>(this._isAttached=!1,this._retryAllowCookie(e).catch(()=>{throw this._messageListener.trigger({type:Qw.FrameError,payload:e}),this._loadingIndicator.hide(),e}))).then(()=>this))}detach(){this._isAttached&&(this._isAttached=!1,this._messageListener.stopListen(),this._iframe&&this._iframe.parentNode&&(this._iframe.parentNode.removeChild(this._iframe),this._iframe.iFrameResizer.close()))}_configureStyles(){this._iframe&&this._iframe.contentWindow&&this._options.styles&&(this._messagePoster.setTarget(this._iframe.contentWindow),this._messagePoster.post({type:eI.StyleConfigured,payload:this._options.styles}))}_attemptLogin(){return/^\\/login\\/token/.test(bn(this._options.url).pathname)?this._requestSender.post(this._options.url).then(({body:{redirectUrl:e}})=>e).catch(e=>Promise.reject(new rI(e))):Promise.resolve(this._options.url)}_allowCookie(){if(this._storage.getItem(aI))return Promise.resolve();this._storage.setItem(aI,!0),this._storage.setItem(sI,Date.now());const{origin:e}=bn(this._options.url),t=`${e}/embedded-checkout/allow-cookie?returnUrl=${encodeURIComponent(this._location.href)}`;return document.body.style.visibility=\"hidden\",this._location.replace(t),new Promise(()=>{})}_retryAllowCookie(e){const t=Number(this._storage.getItem(sI));return(!t||Date.now()-t>6e5)&&e instanceof oI&&e.subtype===Xw.MissingContent?(this._storage.removeItem(sI),this._storage.removeItem(aI),this._allowCookie()):Promise.reject()}};dI=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Bn],dI);const cI=dI;class lI{constructor(e){this._options=e}createFrame(e,t){const n=document.getElementById(t),{timeout:i=6e4}=this._options||{};if(!n)throw new oI(\"Unable to embed the iframe because the container element could not be found.\",Xw.MissingContainer);const r=document.createElement(\"iframe\");return r.src=e,r.style.border=\"none\",r.style.display=\"none\",r.style.width=\"100%\",r.allowPaymentRequest=!0,r.allow=\"payment\",n.appendChild(r),this._toResizableFrame(r,i).catch(e=>{throw n.removeChild(r),e})}_toResizableFrame(e,t){return new Promise((n,i)=>{const r=window.setTimeout(()=>{i(new oI(\"Unable to embed the iframe because the content could not be loaded.\"))},t),o=t=>{if((t.origin===bn(e.src).origin||t.origin===Yn(bn(e.src)).origin)&&(On(t.data,Qw.FrameError)&&(a(),i(new oI(t.data.payload.message,Xw.MissingContent))),On(t.data,Qw.FrameLoaded))){e.style.display=\"\";const i=zn({scrolling:!1,sizeWidth:!1,heightCalculationMethod:t.data.payload&&t.data.payload.contentId?\"taggedElement\":\"lowestElement\"},e);a(),n(i[i.length-1])}},a=()=>{window.removeEventListener(\"message\",o),window.clearTimeout(r)};window.addEventListener(\"message\",o)})}}function uI(e){const t=bn(e.url).origin;return new cI(new lI,new Jn(t),new En(t),new Sd({styles:e.styles&&e.styles.loadingIndicator}),n(),new dy(\"BigCommerce.EmbeddedCheckout\"),window.location,e).attach()}function hI(e){if(!e.payload||!e.payload.contentId)return;const t=document.getElementById(e.payload.contentId);t&&!t.hasAttribute(\"data-iframe-height\")&&t.setAttribute(\"data-iframe-height\",\"\")}function pI(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"type\"in e}let mI=class{constructor(e,t,n,i={}){this._messageListener=e,this._messagePoster=t,this._untargetedMessagePoster=n,this._messageHandlers=i,this._messageListener.listen()}postComplete(){const e={type:Qw.CheckoutComplete};this._postMessage(e)}postError(e){const t={type:Qw.CheckoutError,payload:this._transformError(e)};this._postMessage(t)}postFrameError(e){const t={type:Qw.FrameError,payload:this._transformError(e)};this._postMessage(t,{untargeted:!0})}postFrameLoaded(e){const t={type:Qw.FrameLoaded,payload:e};this._postMessage(t)}postLoaded(){const e={type:Qw.CheckoutLoaded};this._postMessage(e)}postSignedOut(){const e={type:Qw.SignedOut};this._postMessage(e)}receiveStyles(e){this._messageListener.addListener(eI.StyleConfigured,({payload:t})=>{e(t)})}_postMessage(e,t){if(this._notifyMessageHandlers(e),t&&t.untargeted)return this._untargetedMessagePoster.post(e);this._messagePoster.post(e)}_notifyMessageHandlers(e){Object.keys(this._messageHandlers).forEach(t=>{if(e.type!==t)return;const n=this._messageHandlers[t];n&&n.call(null,e)})}_transformError(e){return{message:e.message,type:pI(e)?e.type:void 0,subtype:pI(e)?e.subtype:void 0}}};mI=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Bn],mI);const yI=mI;let gI=class{postComplete(){}postError(){}postFrameError(){}postFrameLoaded(){}postLoaded(){}postSignedOut(){}receiveStyles(){}};gI=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Bn],gI);const vI=gI;function fI(e){Ve(939);const t=e.parentWindow||window.parent;return window===t?new vI:new yI(new Jn(e.parentOrigin),new En(e.parentOrigin,t),new En(\"*\",t),{[Qw.FrameLoaded]:hI})}const SI=\"en\",_I=\"optimized_checkout\";let wI=class{constructor(e,t){this._logger=t;const{locale:n,locales:i,translations:r}=this._transformConfig(e);this._locale=n,this._locales=i,this._translations=r,this._formatters={}}mapKeys(e){Object.keys(e).forEach(t=>{const n=`${_I}.${e[t]}`;this._translations[`${_I}.${t}`]=this._translations[n]})}getLocale(){return this._hasTranslations()?this._locale:SI}translate(e,t={}){var n;const i=`${_I}.${e}`;if(\"string\"!=typeof this._translations[i])return this._logger.warn(`Translation key \"${i}\" is missing`),i;this._formatters[i]||(this._formatters[i]=new je(this._escapeSpecialCharacters(this._translations[i]||\"\"),this._locales[i],void 0,{ignoreTag:!0}));try{return this._formatters[i].format(this._transformData(t))}catch(e){if(this._isFormatError(e))return null!==(n=e.originalMessage)&&void 0!==n?n:\"\";throw e}}_transformConfig(e={}){const t={defaultLocale:\"\",defaultTranslations:{},translations:{},locales:{},locale:e.locale||SI},n=e.locales||{},i=this._flattenObject(e.translations||{}),r=this._flattenObject(e.defaultTranslations||{}),o=this._flattenObject(e.fallbackTranslations||{});return _e(Object.keys(o),Object.keys(r),Object.keys(i)).forEach(a=>{var s,d;i&&i[a]?(t.translations[a]=i[a],t.locales[a]=n[a]||t.locale):r[a]?(t.translations[a]=r[a],t.locales[a]=null!==(s=e.defaultLocale)&&void 0!==s?s:SI):(t.translations[a]=o[a],t.locales[a]=null!==(d=e.fallbackLocale)&&void 0!==d?d:SI)}),t}_flattenObject(e,t={},n=\"\"){try{Object.keys(e).forEach(i=>{const r=e[i],o=n?`${n}.${i}`:i;if(Z(r))return this._flattenObject(r,t,o);t[o]=r})}catch(e){this._logger.warn(`Unable to parse object: ${e}`)}return t}_transformData(e){return Object.keys(e).reduce((t,n)=>{const i=e[n];return t[n]=null==i?\"\":i,t},{})}_hasTranslations(){return Object.keys(this._locales).map(e=>this._locales[e]).filter(e=>e.split(\"-\")[0]===this._locale.split(\"-\")[0]).length>0}_isFormatError(e){return\"object\"==typeof e&&null!==e&&\"originalMessage\"in e}_escapeSpecialCharacters(e){return e.replace(/(\\w+)='([^']*)'/g,\"$1=''$2''\")}};wI=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Bn],wI);const II=wI;function CI(e={}){return new II(e,Ct())}let bI=class{constructor(e){this._storeConfig=e,this._customerFormatter=new Bo(this._storeConfig.shopperCurrency),this._storeFormatter=new Bo(this._storeConfig.currency)}toCustomerCurrency(e){const t=this._storeConfig.shopperCurrency.exchangeRate;return this._customerFormatter.format(e*t)}toStoreCurrency(e){return this._storeFormatter.format(e)}};bI=function(e,t,n,i){var r,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(o<3?r(a):o>3?r(t,n,a):r(t,n))||a);return o>3&&a&&Object.defineProperty(t,n,a),a}([Bn],bI);const PI=bI;function OI(e){return new PI(e)}function EI(e){return e&&\"ga\"in e&&\"function\"==typeof e.ga}function AI(e,t){EI(window)&&window.ga(\"send\",e,Object.assign(Object.assign({},t),{nonInteraction:!1}))}function TI(e){return kI(e).length>=8096}function kI(e){return Object.keys(e).reduce((t,n)=>{const i=typeof e[n];return\"string\"===i||\"number\"===i?[...t,`${n}=${e[n]}`]:\"object\"===i&&null!==e[n]?[...t,kI(e[n])]:t},[]).join(\"&\")}var DI;!function(e){e[e.CUSTOMER=1]=\"CUSTOMER\",e[e.SHIPPING=2]=\"SHIPPING\",e[e.BILLING=3]=\"BILLING\",e[e.PAYMENT=4]=\"PAYMENT\"}(DI||(DI={}));const MI={customer:DI.CUSTOMER,shipping:DI.SHIPPING,billing:DI.BILLING,payment:DI.PAYMENT};class zI{constructor(e,t,n,{checkoutSteps:i}={}){if(this.checkoutService=e,this.analyticsExtraItemsManager=t,this.analytics=n,this._checkoutStarted=!1,this._completedSteps={},this._viewedSteps={},this._analyticStepOrder=[\"customer\",\"shipping\",\"billing\",\"payment\"],void 0!==i){if(i.some(e=>!(e in MI)))throw new Gt(`Invalid checkout steps provided. Valid values are: ${ie(MI).join(\", \")}.`);this._analyticStepOrder=i}}trackCheckoutStarted(){if(this._checkoutStarted)return;const e=this.getCheckout();if(!e)return;const{coupons:t,grandTotal:n,shippingCostTotal:i,taxTotal:r,cart:{lineItems:o,discountAmount:a,id:s}}=e,d=this.analyticsExtraItemsManager.saveExtraItemsData(s,o);this.analytics.track(\"Checkout Started\",this.getTrackingPayload({revenue:n,shipping:i,tax:r,discount:a,coupons:t,lineItems:o,extraItemsData:d})),this._checkoutStarted=!0}trackOrderComplete(){var e;const t=this.getOrder();if(!t)return;const{isComplete:n,orderId:i,orderAmount:r,shippingCostTotal:o,taxTotal:a,discountAmount:s,coupons:d,lineItems:c,cartId:l}=t;if(!n)return;const u=this.analyticsExtraItemsManager.readExtraItemsData(l);if(null===u)return;const h=null===(e=this.checkoutService.getState().data.getConfig())||void 0===e?void 0:e.checkoutSettings.features[\"DATA-6891.missing_orders_within_GA\"],p=this.getTrackingPayload({orderId:i,revenue:r,shipping:o,tax:a,discount:s,coupons:d,extraItemsData:u,lineItems:c});if(h&&yl(window)&&EI(window)&&TI(p))return AI(\"transaction\",{\"&ti\":p.order_id,\"&ta\":p.affiliation,\"&tr\":p.revenue,\"&ts\":p.shipping,\"&tt\":p.tax,\"&tcc\":p.coupon,\"&cu\":p.currency}),p.products.forEach(e=>{AI(\"item\",{\"&ti\":p.order_id,\"&in\":e.name,\"&ic\":e.sku,\"&iv\":`${e.category}`,\"&ip\":e.price,\"&iq\":e.quantity})}),this.analyticsExtraItemsManager.clearExtraItemData(l);this.analytics.track(\"Order Completed\",p),this.analyticsExtraItemsManager.clearExtraItemData(l)}trackStepViewed(e){const t=this.getIdFromStep(e);t&&!this.hasStepViewed(t)&&(this.trackViewed(t),this.backfill(t))}trackStepCompleted(e){const t=this.getIdFromStep(e);t&&!this.hasStepCompleted(t)&&(this.backfill(t),this.trackCompleted(t))}backfill(e){for(const t of this._analyticStepOrder){const n=this.getIdFromStep(t);if(!n)break;if(this.hasStepViewed(n)||this.trackViewed(n),n===e)break;this.hasStepCompleted(n)||this.trackCompleted(n)}}trackCompleted(e){const t=this.getSelectedShippingOption(),{code:n=\"\"}=this.getShopperCurrency()||{},i=this.getPaymentMethodName(),r={step:e,currency:n};t&&(r.shipping_method=t.description),i&&(r.payment_method=i),r.shipping_method||r.payment_method||(r.shipping_method=\" \"),this.analytics.track(\"Checkout Step Completed\",r);const o=t?t.id:\"\",a=e===DI.SHIPPING?`${e}-${o}`:e;this._completedSteps[a]=!0}getTrackingPayload({orderId:e,revenue:t,shipping:n,tax:i,discount:r,coupons:o,extraItemsData:a,lineItems:s}){const{code:d=\"\"}=this.getShopperCurrency()||{},{storeName:c=\"\"}=this.getStoreProfile()||{};return{order_id:String(e),affiliation:c,revenue:this.toShopperCurrency(t),shipping:this.toShopperCurrency(n),tax:this.toShopperCurrency(i),discount:this.toShopperCurrency(r),coupon:(o||[]).map(e=>e.code.toUpperCase()).join(\",\"),currency:d,products:this.getProducts(a,s)}}hasStepCompleted(e){const t=this.getSelectedShippingOption(),n=t?t.id:\"\";return Object.prototype.hasOwnProperty.call(this._completedSteps,e)||e===DI.SHIPPING&&Object.prototype.hasOwnProperty.call(this._completedSteps,`${e}-${n}`)}hasStepViewed(e){return!!this._viewedSteps[e]}getIdFromStep(e){const t=e.split(\".\");return MI[t[0]]||null}trackViewed(e){const t=this.getShopperCurrency();this.analytics.track(\"Checkout Step Viewed\",{step:e,currency:t?t.code:\"\"}),this._viewedSteps[e]=!0}getOrder(){const{data:{getOrder:e}}=this.checkoutService.getState();return e()}getCheckout(){const{data:{getCheckout:e}}=this.checkoutService.getState();return e()}getShopperCurrency(){const{data:{getConfig:e}}=this.checkoutService.getState(),t=e();return t&&t.shopperCurrency}getStoreProfile(){const{data:{getConfig:e}}=this.checkoutService.getState(),t=e();return t&&t.storeProfile}toShopperCurrency(e){const{exchangeRate:t=1}=this.getShopperCurrency()||{};return Math.round(e*t*100)/100}getSelectedShippingOption(){const{data:e}=this.checkoutService.getState(),t=e.getSelectedShippingOption();return t&&t.id&&t.description?t:null}getPaymentMethodName(){const{data:e}=this.checkoutService.getState(),t=e.getSelectedPaymentMethod();return t&&t.config&&t.config.displayName||\"\"}getProducts(e,t){const n=(t.customItems||[]).map(e=>({product_id:e.id,sku:e.sku,price:e.listPrice,quantity:e.quantity,name:e.name})),i=t.giftCertificates.map(e=>({product_id:e.id,price:this.toShopperCurrency(e.amount),name:e.name,quantity:1}));return[...n,...[...t.physicalItems,...t.digitalItems].map(t=>{let n;t.options&&t.options.length&&(n=t.options.map(e=>`${e.name}:${e.value}`),n.sort());const i=Array.isArray(n)&&n.length?n.join(\", \"):\"single-product-option\",r=e[t.productId]&&e[t.productId].brand;return Object.assign({product_id:String(t.productId),sku:t.sku,price:t.salePrice,image_url:t.imageUrl,name:t.name,quantity:t.quantity,category:e[t.productId]?e[t.productId].category:\"\",variant:i},r&&{brand:r})}),...i]}}class NI{trackCheckoutStarted(){}trackOrderComplete(){}trackStepViewed(){}trackStepCompleted(){}}function xI(e,t){const{data:n}=e.getState(),i=n.getConfig();if(!i)throw new at(nt.MissingCheckoutConfig);const{isAnalyticsEnabled:r}=i.checkoutSettings;return r&&yl(window)?new zI(e,new ml(Te),window.analytics,t):new NI}function RI(e){return Boolean(e.hasOwnProperty(\"braintreeFastlane\"))}class FI{constructor(e){this.checkoutService=e,this._selectedPaymentMethodId=\"\"}customerPaymentMethodExecuted(){this._shouldTrackFastlaneEvent()&&this._trackEmailSubmitted()}paymentComplete(){this._shouldTrackFastlaneEvent()&&this._trackOrderPlaced(this._selectedPaymentMethodId)}selectedPaymentMethod(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!1))}walletButtonClick(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!0))}_shouldTrackFastlaneEvent(){const e=this.checkoutService.getState(),t=e.data.getPaymentMethod(\"braintree\")||e.data.getPaymentMethod(\"braintreeacceleratedcheckout\"),n=null==t?void 0:t.initializationData.isBraintreeAnalyticsV2Enabled,i=RI(window)&&window.braintreeFastlane.events;return n&&i}_getBraintreeEventsOrThrow(){if(RI(window))return window.braintreeFastlane.events;throw new gi}_trackEmailSubmitted(){const{emailSubmitted:e}=this._getBraintreeEventsOrThrow();e(this._getEmailSubmittedEventOptions())}_trackApmSelected(e,t){const{apmSelected:n}=this._getBraintreeEventsOrThrow();n(this._getApmSelectedEventOptions(e,t))}_trackOrderPlaced(e){const{orderPlaced:t}=this._getBraintreeEventsOrThrow();t(this._getOrderPlacedEventOptions(e))}_getEventCommonOptions(){var e,t;const n=this.checkoutService.getState(),i=n.data.getCart(),r=null===(e=n.data.getConfig())||void 0===e?void 0:e.storeProfile,o=null===(t=n.data.getCustomer())||void 0===t?void 0:t.isGuest,a=n.data.getPaymentMethod(\"braintreeacceleratedcheckout\"),s=[{treatment_group:!n.errors.getLoadPaymentMethodError(\"braintreeacceleratedcheckout\")&&(null==a?void 0:a.initializationData.shouldRunAcceleratedCheckout)?\"test\":\"control\"}];return{context_type:\"cs_id\",context_id:(null==i?void 0:i.id)||\"\",page_type:\"checkout_page\",page_name:window.document.title,partner_name:\"bigc\",user_type:o?\"store_guest\":\"store_member\",store_id:(null==r?void 0:r.storeId)||\"\",merchant_name:(null==r?void 0:r.storeName)||\"\",experiment:JSON.stringify(s)}}_getEmailSubmittedEventOptions(){const e=(this.checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{user_email_saved:!1,apm_shown:e.length>1?\"1\":\"0\",apm_list:e.join(\",\")})}_getApmSelectedEventOptions(e,t){const n=(this.checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{apm_shown:n.length>1?\"1\":\"0\",apm_list:n.join(\",\"),apm_selected:e,apm_location:t?\"pre-email section\":\"payment section\"})}_getOrderPlacedEventOptions(e){const t=this.checkoutService.getState().data.getCart();return Object.assign(Object.assign({},this._getEventCommonOptions()),{selected_payment_method:e,currency_code:(null==t?void 0:t.currency.code)||\"\"})}}function LI(e){return new FI(e)}class BI{constructor(e){this._checkoutService=e,this._selectedPaymentMethodId=\"\"}customerPaymentMethodExecuted(){this._shouldTrackFastlaneEvent()&&this._trackEmailSubmitted()}paymentComplete(){this._shouldTrackFastlaneEvent()&&this._trackOrderPlaced(this._selectedPaymentMethodId)}selectedPaymentMethod(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!1))}walletButtonClick(e){this._shouldTrackFastlaneEvent()&&e&&(this._selectedPaymentMethodId=e,this._trackApmSelected(e,!0))}_shouldTrackFastlaneEvent(){const e=this._checkoutService.getState().data.getPaymentMethod(\"paypalcommerce\"),t=((null==e?void 0:e.initializationData)||{}).isPayPalCommerceAnalyticsV2Enabled,n=window,i=!!n.paypalFastlane&&!!n.paypalFastlane.events;return t&&i}_getPayPalEventsOrThrow(){const e=window;if(e.paypalFastlane&&e.paypalFastlane.events)return e.paypalFastlane.events;throw new gi}_trackEmailSubmitted(){const{emailSubmitted:e}=this._getPayPalEventsOrThrow();e(this._getEmailSubmittedEventOptions())}_trackApmSelected(e,t){const{apmSelected:n}=this._getPayPalEventsOrThrow();n(this._getApmSelectedEventOptions(e,t))}_trackOrderPlaced(e){const{orderPlaced:t}=this._getPayPalEventsOrThrow();t(this._getOrderPlacedEventOptions(e))}_getEventCommonOptions(){var e,t;const n=this._checkoutService.getState(),i=n.data.getCart(),r=null===(e=n.data.getConfig())||void 0===e?void 0:e.storeProfile,o=null===(t=n.data.getCustomer())||void 0===t?void 0:t.isGuest,a=\"paypalcommerceacceleratedcheckout\",s=n.data.getPaymentMethod(a),d=[{treatment_group:!n.errors.getLoadPaymentMethodError(a)&&(null==s?void 0:s.initializationData.shouldRunAcceleratedCheckout)?\"test\":\"control\"}];return{context_type:\"cs_id\",context_id:(null==i?void 0:i.id.replace(/-/g,\"\"))||\"\",page_type:\"checkout_page\",page_name:window.document.title,partner_name:\"bigc\",user_type:o?\"store_guest\":\"store_member\",store_id:(null==r?void 0:r.storeId)||\"\",merchant_name:(null==r?void 0:r.storeName)||\"\",experiment:JSON.stringify(d)}}_getEmailSubmittedEventOptions(){const e=(this._checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{user_email_saved:!1,apm_shown:e.length>1?\"1\":\"0\",apm_list:e.join(\",\")})}_getApmSelectedEventOptions(e,t){const n=(this._checkoutService.getState().data.getPaymentMethods()||[]).map(({id:e})=>e);return Object.assign(Object.assign({},this._getEventCommonOptions()),{apm_shown:n.length>1?\"1\":\"0\",apm_list:n.join(\",\"),apm_selected:e,apm_location:t?\"pre-email section\":\"payment section\"})}_getOrderPlacedEventOptions(e){const t=this._checkoutService.getState().data.getCart();return Object.assign(Object.assign({},this._getEventCommonOptions()),{selected_payment_method:e,currency_code:(null==t?void 0:t.currency.code)||\"\"})}}function jI(e){return new BI(e)}var UI;class qI{constructor(e,t){this._host=e,this._hostedFormFactory=t}submitStoredCard(e,t){return n=this,i=void 0,o=function*(){const n=this._hostedForm;if(!n)throw new vn(un.PaymentNotInitialized);yield n.validate().then(()=>n.submitStoredCard({fields:e,data:t}))},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())});var n,i,r,o}initialize(e){const t=this._hostedFormFactory.create(this._host,e);return t.attach().then(()=>{this._hostedForm=t})}deinitialize(){this._hostedForm&&this._hostedForm.detach()}}function VI(e){const t=S_();return new qI(e,new Ey(t))}!function(e){e.CUSTOMER=\"customer\",e.SHIPPING=\"shipping\",e.BILLING=\"billing\",e.PAYMENT=\"payment\"}(UI||(UI={}));const GI=[UI.CUSTOMER,UI.SHIPPING,UI.BILLING,UI.PAYMENT];class HI{constructor(e,t){this.subscribe=e,this.bodlEvents=t,this._checkoutStarted=!1,this._emailEntryBegan=!1,this._shippingOptionsShown=!1,this._completedSteps={},this.subscribe(e=>{var t;if(this.setState(e.data),!(null===(t=this.state)||void 0===t?void 0:t.getConfig()))throw new at(nt.MissingCheckoutConfig)})}setState(e){this.state=e}checkoutBegin(){const e=this._getCommonCheckoutData();!this._checkoutStarted&&e&&(this.bodlEvents.emitCheckoutBeginEvent(e),this._checkoutStarted=!0)}orderPurchased(){var e;const t=null===(e=this.state)||void 0===e?void 0:e.getOrder();if(!t)return;const{currency:n,isComplete:i,orderId:r,orderAmount:o,shippingCostTotal:a,lineItems:s,cartId:d,coupons:c,channelId:l,taxTotal:u}=t;i&&this.bodlEvents.emitOrderPurchasedEvent({event_id:d,currency:n.code,order_id:r,tax:u,channel_id:l,cart_value:o,coupon_codes:c.map(e=>e.code.toUpperCase()),shipping_cost:a,line_items:this._getProducts(s,n.code)})}stepCompleted(e){e&&GI.some(t=>(this._hasStepCompleted(t)||this._trackCompletedStep(t),t===e))}customerEmailEntry(e){!this._emailEntryBegan&&(null==e?void 0:e.length)&&(this._emailEntryBegan=!0,this.bodlEvents.emit(\"bodl_checkout_email_entry_began\"))}customerSuggestionInit(e){this.bodlEvents.emit(\"bodl_checkout_customer_suggestion_initialization\",e)}customerSuggestionExecute(){this.bodlEvents.emit(\"bodl_checkout_customer_suggestion_execute\")}customerPaymentMethodExecuted(e){this.bodlEvents.emit(\"bodl_checkout_customer_payment_method_executed\",e)}showShippingMethods(){this._shippingOptionsShown||(this._shippingOptionsShown=!0,this.bodlEvents.emit(\"bodl_checkout_show_shipping_options\"))}selectedPaymentMethod(e){const t=this._getCommonCheckoutData();t&&e&&this.bodlEvents.emitPaymentDetailsProvidedEvent(Object.assign(Object.assign({},t),{payment_type:e}))}clickPayButton(e){this.bodlEvents.emit(\"bodl_checkout_click_pay_button\",e)}paymentRejected(){this.bodlEvents.emit(\"bodl_checkout_payment_rejected\")}paymentComplete(){this.bodlEvents.emit(\"bodl_checkout_payment_complete\")}exitCheckout(){this.bodlEvents.emit(\"bodl_checkout_exit\")}_trackCompletedStep(e){this._completedSteps[e]=!0;const t={[UI.SHIPPING]:this._trackShippingStepCompleted.bind(this)}[e];t?t():this.bodlEvents.emit(\"bodl_checkout_step_completed\",{step:e})}_trackShippingStepCompleted(){var e,t;const n=null===(t=null===(e=this.state)||void 0===e?void 0:e.getSelectedShippingOption())||void 0===t?void 0:t.description,i=this._getCommonCheckoutData();i&&n&&this.bodlEvents.emitShippingDetailsProvidedEvent(Object.assign(Object.assign({},i),{shipping_method:n}))}_getCommonCheckoutData(){var e;const t=null===(e=this.state)||void 0===e?void 0:e.getCheckout();if(!t)return null;const{cart:{cartAmount:n,currency:i,lineItems:r,id:o,coupons:a},channelId:s}=t;return{event_id:o,currency:i.code,cart_value:n,coupon_codes:a.map(e=>e.code.toUpperCase()),line_items:this._getProducts(r,i.code),channel_id:s}}_getProducts(e,t){const n=(e.customItems||[]).map(e=>({product_id:e.id,sku:e.sku,base_price:e.listPrice,sale_price:e.listPrice,purchase_price:e.listPrice,quantity:e.quantity,product_name:e.name,currency:t})),i=e.giftCertificates.map(e=>({product_id:e.id,gift_certificate_id:e.id,base_price:e.amount,sale_price:e.amount,purchase_price:e.amount,product_name:e.name,gift_certificate_name:e.name,gift_certificate_theme:e.theme,quantity:1,currency:t}));return[...n,...[...e.physicalItems,...e.digitalItems].map(e=>{let n;return e.options&&e.options.length&&(n=e.options.map(e=>`${e.name}:${e.value}`),n.sort()),{product_id:e.productId,quantity:e.quantity,product_name:e.name,base_price:e.listPrice,sale_price:e.salePrice,purchase_price:e.salePrice>0?e.salePrice:e.listPrice,sku:e.sku,variant_id:e.variantId,discount:e.discountAmount,coupon_amount:e.couponAmount,brand_name:e.brand,currency:t,category_names:(i=e,Array.isArray(i.categoryNames)?i.categoryNames:Array.isArray(i.categories)?q(i.categories).map(({name:e})=>e):[]),retail_price:e.retailPrice};var i}),...i].map(e=>Object.assign(Object.assign({},e),{product_id:String(e.product_id)}))}_hasStepCompleted(e){return this._completedSteps[e]}}class WI{checkoutBegin(){}orderPurchased(){}stepCompleted(){}customerEmailEntry(){}customerSuggestionInit(){}customerSuggestionExecute(){}customerPaymentMethodExecuted(){}showShippingMethods(){}selectedPaymentMethod(){}clickPayButton(){}paymentRejected(){}paymentComplete(){}exitCheckout(){}}function $I(e){return function(e){return\"bodlEvents\"in e}(window)?new HI(e,window.bodlEvents.checkout):new WI}export{Un as ExtensionCommandType,qn as ExtensionQueryType,$I as createBodlService,LI as createBraintreeAnalyticTracker,iI as createCheckoutButtonInitializer,__ as createCheckoutService,OI as createCurrencyService,fI as createEmbeddedCheckoutMessenger,CI as createLanguageService,jI as createPayPalCommerceAnalyticTracker,xI as createStepTracker,VI as createStoredCardHostedFormService,i as createTimeout,uI as embedCheckout,Ye as isExtraField};\n//# sourceMappingURL=checkout-sdk.js.map"
  },
  {
    "path": "dist/esm/embedded-checkout.js",
    "content": "import*as e from\"iframe-resizer\";import*as t from\"iframe-resizer/js/iframeResizer.contentWindow\";import{createRequestSender as s}from\"@bigcommerce/request-sender\";import{fromEvent as r}from\"rxjs\";import{filter as o,map as n,take as i}from\"rxjs/operators\";import{default as a}from\"local-storage-fallback\";var c={785(t,s,r){var o,n;t.exports=(o={iframeResizer:()=>e.iframeResizer},n={},r.d(n,o),n)},939(e){e.exports=t}},l={};function d(e){var t=l[e];if(void 0!==t)return t.exports;var s=l[e]={exports:{}};return c[e](s,s.exports,d),s.exports}d.d=(e,t)=>{for(var s in t)d.o(t,s)&&!d.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);const h={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},p=\"embedded-checkout-loading-indicator-rotation\";class m{constructor(e){this.styles=Object.assign(Object.assign({},h),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${p} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(s=>{e.style.setProperty(s,t[s])})}defineAnimation(){var e;if(document.getElementById(p))return;const t=document.createElement(\"style\");t.id=p,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${p} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}const u=function(e,t,s){return t&&s?g(0,t,s):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(s=>{const r=Object.getOwnPropertyDescriptor(e.prototype,s);r&&\"constructor\"!==s&&Object.defineProperty(t.prototype,s,g(e.prototype,s,r))}),t}(e)};function g(e,t,s){if(\"function\"!=typeof s.value)return s;let r=s.value;return{get(){const e=r.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},s),{value:e})),e},set(e){r=e}}}class y extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class f extends y{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function _(e){if(!/^(https?:)?\\/\\//.test(e))throw new f(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=e;const s=t.port&&-1!==e.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${s?`:${s}`:\"\"}`,pathname:t.pathname,port:s,protocol:t.protocol,search:t.search}}function b(e){return _(0===e.hostname.indexOf(\"www\")?e.href:e.href.replace(e.hostname,`www.${e.hostname}`))}function w(e,t){return e.type===t}var O;class E{constructor(e){this._sourceOrigins=[_(e).origin,b(_(e)).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let s=this._listeners[e];s||(this._listeners[e]=s=[]),-1===s.indexOf(t)&&s.push(t)}removeListener(e,t){const s=this._listeners[e];if(!s)return;const r=s.indexOf(t);r>=0&&s.splice(r,1)}trigger(e,t){const s=this._listeners[e.type];s&&s.forEach(s=>t?s(e,t):s(e))}_handleMessage(e){if(-1===this._sourceOrigins.indexOf(e.origin)||!w(e.data,e.data.type))return;const t=e.data,{context:s}=t,r=function(e,t){var s={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(s[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(s[r[o]]=e[r[o]])}return s}(t,[\"context\"]);this.trigger(r,s)}}!function(e,t,s,r){var o,n=arguments.length,i=n<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,s):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)i=Reflect.decorate(e,t,s,r);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(i=(n<3?o(i):n>3?o(t,s,i):o(t,s))||i);n>3&&i&&Object.defineProperty(t,s,i)}([u],E.prototype,\"_handleMessage\",null);class v{constructor(e,t,s){this._targetWindow=t,this._context=s,this._targetOrigin=\"*\"===e?\"*\":_(e).origin}post(e,t){const s=this._targetWindow;if(window===s)return;if(!s)throw new Error(\"Unable to post message because target window is not set.\");const a=t&&r(window,\"message\").pipe(o(e=>e.origin===this._targetOrigin&&w(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)),n(e=>{if(t.errorType===e.data.type)throw e.data;return e.data}),i(1)).toPromise();return s.postMessage(Object.assign(Object.assign({},e),{context:this._context}),this._targetOrigin),a}setTarget(e){this._targetWindow=e}setContext(e){this._context=e}}class L{constructor(e){this._namespace=e}getItem(e){const t=a.getItem(this.withNamespace(e));if(null===t)return null;try{return JSON.parse(t)}catch(t){return this.removeItem(this.withNamespace(e)),null}}getItemOnce(e){const t=this.getItem(e);return this.removeItem(e),t}setItem(e,t){return a.setItem(this.withNamespace(e),JSON.stringify(t))}removeItem(e){return a.removeItem(this.withNamespace(e))}withNamespace(e){return`${this._namespace}.${e}`}}!function(e){e.CheckoutComplete=\"CHECKOUT_COMPLETE\",e.CheckoutError=\"CHECKOUT_ERROR\",e.CheckoutLoaded=\"CHECKOUT_LOADED\",e.FrameError=\"FRAME_ERROR\",e.FrameLoaded=\"FRAME_LOADED\",e.SignedOut=\"SIGNED_OUT\"}(O||(O={}));const C={body:{},headers:{},status:0};class k extends y{constructor(e,{message:t,errors:s}={}){const{body:r,headers:o,status:n}=e||C;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=r,this.headers=o,this.status=n,this.errors=s||[]}}class I extends k{constructor(e){super(e,{message:e.body.title}),this.name=\"InvalidLoginTokenError\",this.type=\"invalid_login_token\"}}var j,P;!function(e){e.MissingContainer=\"missing_container\",e.MissingContent=\"missing_content\",e.UnknownError=\"unknown_error\"}(j||(j={}));class S extends y{constructor(e,t=j.UnknownError){super(e||\"Unable to embed the checkout form.\"),this.subtype=t,this.name=\"NotEmbeddableError\",this.type=\"not_embeddable\"}}!function(e){e.StyleConfigured=\"STYLE_CONFIGURED\"}(P||(P={}));const x=\"isCookieAllowed\",R=\"lastAllowCookieAttempt\";let M=class{constructor(e,t,s,r,o,n,i,a){this._iframeCreator=e,this._messageListener=t,this._messagePoster=s,this._loadingIndicator=r,this._requestSender=o,this._storage=n,this._location=i,this._options=a,this._isAttached=!1,this._options.onComplete&&this._messageListener.addListener(O.CheckoutComplete,this._options.onComplete),this._options.onError&&this._messageListener.addListener(O.CheckoutError,this._options.onError),this._options.onLoad&&this._messageListener.addListener(O.CheckoutLoaded,this._options.onLoad),this._options.onFrameLoad&&this._messageListener.addListener(O.FrameLoaded,this._options.onFrameLoad),this._options.onSignOut&&this._messageListener.addListener(O.SignedOut,this._options.onSignOut),this._messageListener.addListener(O.FrameLoaded,()=>this._configureStyles())}attach(){return this._isAttached?Promise.resolve(this):(this._isAttached=!0,this._messageListener.listen(),this._loadingIndicator.show(this._options.containerId),this._allowCookie().then(()=>this._attemptLogin()).then(e=>this._iframeCreator.createFrame(e,this._options.containerId)).then(e=>{this._iframe=e,this._configureStyles(),this._loadingIndicator.hide()}).catch(e=>(this._isAttached=!1,this._retryAllowCookie(e).catch(()=>{throw this._messageListener.trigger({type:O.FrameError,payload:e}),this._loadingIndicator.hide(),e}))).then(()=>this))}detach(){this._isAttached&&(this._isAttached=!1,this._messageListener.stopListen(),this._iframe&&this._iframe.parentNode&&(this._iframe.parentNode.removeChild(this._iframe),this._iframe.iFrameResizer.close()))}_configureStyles(){this._iframe&&this._iframe.contentWindow&&this._options.styles&&(this._messagePoster.setTarget(this._iframe.contentWindow),this._messagePoster.post({type:P.StyleConfigured,payload:this._options.styles}))}_attemptLogin(){return/^\\/login\\/token/.test(_(this._options.url).pathname)?this._requestSender.post(this._options.url).then(({body:{redirectUrl:e}})=>e).catch(e=>Promise.reject(new I(e))):Promise.resolve(this._options.url)}_allowCookie(){if(this._storage.getItem(x))return Promise.resolve();this._storage.setItem(x,!0),this._storage.setItem(R,Date.now());const{origin:e}=_(this._options.url),t=`${e}/embedded-checkout/allow-cookie?returnUrl=${encodeURIComponent(this._location.href)}`;return document.body.style.visibility=\"hidden\",this._location.replace(t),new Promise(()=>{})}_retryAllowCookie(e){const t=Number(this._storage.getItem(R));return(!t||Date.now()-t>6e5)&&e instanceof S&&e.subtype===j.MissingContent?(this._storage.removeItem(R),this._storage.removeItem(x),this._allowCookie()):Promise.reject()}};M=function(e,t,s,r){var o,n=arguments.length,i=n<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,s):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)i=Reflect.decorate(e,t,s,r);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(i=(n<3?o(i):n>3?o(t,s,i):o(t,s))||i);return n>3&&i&&Object.defineProperty(t,s,i),i}([u],M);const A=M;class F{constructor(e){this._options=e}createFrame(e,t){const s=document.getElementById(t),{timeout:r=6e4}=this._options||{};if(!s)throw new S(\"Unable to embed the iframe because the container element could not be found.\",j.MissingContainer);const o=document.createElement(\"iframe\");return o.src=e,o.style.border=\"none\",o.style.display=\"none\",o.style.width=\"100%\",o.allowPaymentRequest=!0,o.allow=\"payment\",s.appendChild(o),this._toResizableFrame(o,r).catch(e=>{throw s.removeChild(o),e})}_toResizableFrame(e,t){return new Promise((s,r)=>{const o=window.setTimeout(()=>{r(new S(\"Unable to embed the iframe because the content could not be loaded.\"))},t),n=t=>{if((t.origin===_(e.src).origin||t.origin===b(_(e.src)).origin)&&(w(t.data,O.FrameError)&&(i(),r(new S(t.data.payload.message,j.MissingContent))),w(t.data,O.FrameLoaded))){e.style.display=\"\";const r=function(e,t){const{iframeResizer:s}=d(785);return s(e,t)}({scrolling:!1,sizeWidth:!1,heightCalculationMethod:t.data.payload&&t.data.payload.contentId?\"taggedElement\":\"lowestElement\"},e);i(),s(r[r.length-1])}},i=()=>{window.removeEventListener(\"message\",n),window.clearTimeout(o)};window.addEventListener(\"message\",n)})}}function $(e){const t=_(e.url).origin;return new A(new F,new E(t),new v(t),new m({styles:e.styles&&e.styles.loadingIndicator}),s(),new L(\"BigCommerce.EmbeddedCheckout\"),window.location,e).attach()}function T(e){if(!e.payload||!e.payload.contentId)return;const t=document.getElementById(e.payload.contentId);t&&!t.hasAttribute(\"data-iframe-height\")&&t.setAttribute(\"data-iframe-height\",\"\")}function U(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"type\"in e}let z=class{constructor(e,t,s,r={}){this._messageListener=e,this._messagePoster=t,this._untargetedMessagePoster=s,this._messageHandlers=r,this._messageListener.listen()}postComplete(){const e={type:O.CheckoutComplete};this._postMessage(e)}postError(e){const t={type:O.CheckoutError,payload:this._transformError(e)};this._postMessage(t)}postFrameError(e){const t={type:O.FrameError,payload:this._transformError(e)};this._postMessage(t,{untargeted:!0})}postFrameLoaded(e){const t={type:O.FrameLoaded,payload:e};this._postMessage(t)}postLoaded(){const e={type:O.CheckoutLoaded};this._postMessage(e)}postSignedOut(){const e={type:O.SignedOut};this._postMessage(e)}receiveStyles(e){this._messageListener.addListener(P.StyleConfigured,({payload:t})=>{e(t)})}_postMessage(e,t){if(this._notifyMessageHandlers(e),t&&t.untargeted)return this._untargetedMessagePoster.post(e);this._messagePoster.post(e)}_notifyMessageHandlers(e){Object.keys(this._messageHandlers).forEach(t=>{if(e.type!==t)return;const s=this._messageHandlers[t];s&&s.call(null,e)})}_transformError(e){return{message:e.message,type:U(e)?e.type:void 0,subtype:U(e)?e.subtype:void 0}}};z=function(e,t,s,r){var o,n=arguments.length,i=n<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,s):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)i=Reflect.decorate(e,t,s,r);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(i=(n<3?o(i):n>3?o(t,s,i):o(t,s))||i);return n>3&&i&&Object.defineProperty(t,s,i),i}([u],z);const D=z;let N=class{postComplete(){}postError(){}postFrameError(){}postFrameLoaded(){}postLoaded(){}postSignedOut(){}receiveStyles(){}};N=function(e,t,s,r){var o,n=arguments.length,i=n<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,s):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)i=Reflect.decorate(e,t,s,r);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(i=(n<3?o(i):n>3?o(t,s,i):o(t,s))||i);return n>3&&i&&Object.defineProperty(t,s,i),i}([u],N);const H=N;function W(e){d(939);const t=e.parentWindow||window.parent;return window===t?new H:new D(new E(e.parentOrigin),new v(e.parentOrigin,t),new v(\"*\",t),{[O.FrameLoaded]:T})}export{W as createEmbeddedCheckoutMessenger,$ as embedCheckout};\n//# sourceMappingURL=embedded-checkout.js.map"
  },
  {
    "path": "dist/esm/extension.js",
    "content": "import*as e from\"iframe-resizer\";import*as t from\"iframe-resizer/js/iframeResizer.contentWindow\";import{fromEvent as n}from\"rxjs\";import{filter as r,map as s,take as i}from\"rxjs/operators\";import{noop as o}from\"lodash\";var a={785(t,n,r){var s,i;t.exports=(s={iframeResizer:()=>e.iframeResizer},i={},r.d(i,s),i)},939(e){e.exports=t}},c={};function d(e){var t=c[e];if(void 0!==t)return t.exports;var n=c[e]={exports:{}};return a[e](n,n.exports,d),n.exports}d.d=(e,t)=>{for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);function p(e,t,n){if(\"function\"!=typeof n.value)return n;let r=n.value;return{get(){const e=r.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){r=e}}}class h extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class u extends h{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function f(e){if(!/^(https?:)?\\/\\//.test(e))throw new u(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=e;const n=t.port&&-1!==e.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${n?`:${n}`:\"\"}`,pathname:t.pathname,port:n,protocol:t.protocol,search:t.search}}function l(e,t){return e.type===t}var m,E,g,w,y;class _{constructor(e){var t;this._sourceOrigins=[f(e).origin,(t=f(e),f(0===t.hostname.indexOf(\"www\")?t.href:t.href.replace(t.hostname,`www.${t.hostname}`))).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const r=n.indexOf(t);r>=0&&n.splice(r,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){if(-1===this._sourceOrigins.indexOf(e.origin)||!l(e.data,e.data.type))return;const t=e.data,{context:n}=t,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var s=0;for(r=Object.getOwnPropertySymbols(e);s<r.length;s++)t.indexOf(r[s])<0&&Object.prototype.propertyIsEnumerable.call(e,r[s])&&(n[r[s]]=e[r[s]])}return n}(t,[\"context\"]);this.trigger(r,n)}}!function(e,t,n,r){var s,i=arguments.length,o=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(s=e[a])&&(o=(i<3?s(o):i>3?s(t,n,o):s(t,n))||o);i>3&&o&&Object.defineProperty(t,n,o)}([function(e,t,n){return t&&n?p(0,t,n):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const r=Object.getOwnPropertyDescriptor(e.prototype,n);r&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,p(e.prototype,n,r))}),t}(e)}],_.prototype,\"_handleMessage\",null);class O{constructor(e,t,n){this._targetWindow=t,this._context=n,this._targetOrigin=\"*\"===e?\"*\":f(e).origin}post(e,t){const o=this._targetWindow;if(window===o)return;if(!o)throw new Error(\"Unable to post message because target window is not set.\");const a=t&&n(window,\"message\").pipe(r(e=>e.origin===this._targetOrigin&&l(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)),s(e=>{if(t.errorType===e.data.type)throw e.data;return e.data}),i(1)).toPromise();return o.postMessage(Object.assign(Object.assign({},e),{context:this._context}),this._targetOrigin),a}setTarget(e){this._targetWindow=e}setContext(e){this._context=e}}!function(e){e.ReloadCheckout=\"EXTENSION:RELOAD_CHECKOUT\",e.ShowLoadingIndicator=\"EXTENSION:SHOW_LOADING_INDICATOR\",e.SetIframeStyle=\"EXTENSION:SET_IFRAME_STYLE\",e.ReRenderShippingForm=\"EXTENSION:RE_RENDER_SHIPPING_FORM\",e.ReRenderShippingStep=\"EXTENSION:RE_RENDER_SHIPPING_STEP\"}(m||(m={})),function(e){e.ConsignmentsChanged=\"EXTENSION:CONSIGNMENTS_CHANGED\"}(E||(E={})),function(e){e.Subscribe=\"EXTENSION_INTERNAL:SUBSCRIBE\",e.Unsubscribe=\"EXTENSION_INTERNAL:UNSUBSCRIBE\",e.ResizeIframe=\"EXTENSION_INTERNAL:RESIZE_IFRAME\"}(g||(g={})),function(e){e.ExtensionReady=\"EXTENSION:READY\",e.ExtensionFailed=\"EXTENSION:FAILED\"}(w||(w={})),function(e){e.GetConsignments=\"EXTENSION:GET_CONSIGNMENTS\"}(y||(y={}));var I=function(e,t,n,r){return new(n||(n=Promise))(function(s,i){function o(e){try{c(r.next(e))}catch(e){i(e)}}function a(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(o,a)}c((r=r.apply(e,t||[])).next())})};class v{constructor(e,t,n,r){this._messageListener=e,this._eventListener=t,this._messagePoster=n,this._internalCommandPoster=r,this._messagePoster.setTarget(window.parent),this._internalCommandPoster.setTarget(window.parent)}initialize(e){return I(this,void 0,void 0,function*(){if(!e)throw new Error(\"Extension Id not found.\");this._extensionId=e,this._messageListener.listen(),this._eventListener.listen(),this._messagePoster.setContext({extensionId:e});try{yield this._internalCommandPoster.post({type:g.ResizeIframe,payload:{extensionId:e}},{successType:w.ExtensionReady,errorType:w.ExtensionFailed})}catch(e){if(this._isExtensionFailedEvent(e))throw new Error(\"Extension failed to load within 60 seconds; please reload and try again.\")}})}post(e){if(!this._isCommandOrQueryType(e.type))throw new Error(`${e.type} is not supported.`);this._messagePoster.post(e)}addListener(e,t=o){if(!this._extensionId)throw new Error(\"Extension is not initialized.\");const n=this._extensionId;if(!Object.values(E).includes(e))throw new Error(`${e} is not supported.`);return this._internalCommandPoster.post({type:g.Subscribe,payload:{extensionId:n,eventType:e}}),this._eventListener.addListener(e,t),()=>{this._internalCommandPoster.post({type:g.Unsubscribe,payload:{extensionId:n,eventType:e}}),this._eventListener.removeListener(e,t)}}getConsignments(e=!0){return I(this,void 0,void 0,function*(){return new Promise(t=>{const n=e=>{this._messageListener.removeListener(\"EXTENSION:GET_CONSIGNMENTS\",n),t(e.payload.consignments)};this._messageListener.addListener(\"EXTENSION:GET_CONSIGNMENTS\",n),this.post({type:y.GetConsignments,payload:{useCache:e}})})})}_isExtensionFailedEvent(e){return e.type===w.ExtensionFailed}_isCommandOrQueryType(e){return Object.values(m).includes(e)||Object.values(y).includes(e)}}function N(e){return t=this,n=void 0,s=function*(){const{extensionId:t,parentOrigin:n,taggedElementId:r,fixedHeight:s}=e;d(939);const i=new v(new _(n),new _(n),new O(n),new O(n));return yield i.initialize(t),function(e,t){if(!function(e){return\"parentIFrame\"in e}(window))throw new Error(\"iFramerResizer window not found.\");if(t)window.parentIFrame.size(t);else if(window.parentIFrame.autoResize(!0),e){const t=document.getElementById(e);if(!t)throw new Error(\"Element not found.\");t.setAttribute(\"data-iframe-height\",\"\"),window.parentIFrame.setHeightCalculationMethod(\"taggedElement\")}else window.parentIFrame.setHeightCalculationMethod(\"bodyOffset\")}(r,s),i},new((r=void 0)||(r=Promise))(function(e,i){function o(e){try{c(s.next(e))}catch(e){i(e)}}function a(e){try{c(s.throw(e))}catch(e){i(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(o,a)}c((s=s.apply(t,n||[])).next())});var t,n,r,s}export{m as ExtensionCommandType,E as ExtensionEventType,N as initializeExtensionService};\n//# sourceMappingURL=extension.js.map"
  },
  {
    "path": "dist/esm/hosted-form-v2-iframe-content.js",
    "content": "import{createRequestSender as e}from\"@bigcommerce/request-sender\";import{fromEvent as t}from\"rxjs\";import{filter as n,map as r,take as i}from\"rxjs/operators\";import{creditCardType as s,cvv as a,expirationDate as o,number as d}from\"card-validator\";import{flatMap as c,get as u,isString as l,kebabCase as p,map as h,max as _,snakeCase as m,values as y}from\"lodash\";import{object as f,string as g}from\"yup\";class v extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class b extends v{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function E(e){if(!/^(https?:)?\\/\\//.test(e))throw new b(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=e;const n=t.port&&-1!==e.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${n?`:${n}`:\"\"}`,pathname:t.pathname,port:n,protocol:t.protocol,search:t.search}}function w(e){return E(0===e.hostname.indexOf(\"www\")?e.href:e.href.replace(e.hostname,`www.${e.hostname}`))}function O(e,t,n){if(\"function\"!=typeof n.value)return n;let r=n.value;return{get(){const e=r.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){r=e}}}function C(e,t){return e.type===t}class S{constructor(e){this._sourceOrigins=[E(e).origin,w(E(e)).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const r=n.indexOf(t);r>=0&&n.splice(r,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){if(-1===this._sourceOrigins.indexOf(e.origin)||!C(e.data,e.data.type))return;const t=e.data,{context:n}=t,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(t,[\"context\"]);this.trigger(r,n)}}!function(e,t,n,r){var i,s=arguments.length,a=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(i=e[o])&&(a=(s<3?i(a):s>3?i(t,n,a):i(t,n))||a);s>3&&a&&Object.defineProperty(t,n,a)}([function(e,t,n){return t&&n?O(0,t,n):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const r=Object.getOwnPropertyDescriptor(e.prototype,n);r&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,O(e.prototype,n,r))}),t}(e)}],S.prototype,\"_handleMessage\",null);class T{setNonce(e){this._nonce=e}getNonce(){return this._nonce}}let P;function I(){return P=P||new T,P}class x{constructor(e,t,n){this._targetWindow=t,this._context=n,this._targetOrigin=\"*\"===e?\"*\":E(e).origin}post(e,s){const a=this._targetWindow;if(window===a)return;if(!a)throw new Error(\"Unable to post message because target window is not set.\");const o=s&&t(window,\"message\").pipe(n(e=>e.origin===this._targetOrigin&&C(e.data,e.data.type)&&-1!==[s.successType,s.errorType].indexOf(e.data.type)),r(e=>{if(s.errorType===e.data.type)throw e.data;return e.data}),i(1)).toPromise();return a.postMessage(Object.assign(Object.assign({},e),{context:this._context}),this._targetOrigin),o}setTarget(e){this._targetWindow=e}setContext(e){this._context=e}}var D;!function(e){e.CardCode=\"cardCode\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.Note=\"note\",e.Hidden=\"hidden\"}(D||(D={}));const N=D;var V;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(V||(V={}));const A=V;var L,R,j;!function(e){e.Card=\"card\",e.ManualPayment=\"manual_payment\"}(L||(L={})),function(e){e.BankDeposit=\"bigcommerce_offline.bank_deposit\",e.Cheque=\"bigcommerce_offline.cheque\",e.Cod=\"bigcommerce_offline.cod\",e.InStore=\"bigcommerce_offline.in_store\",e.MoneyOrder=\"bigcommerce_offline.money_order\"}(R||(R={})),function(e){e.BankDeposit=\"bank_deposit\",e.Cheque=\"cheque\",e.Cod=\"cod\",e.InStore=\"in_store\",e.MoneyOrder=\"money_order\"}(j||(j={}));const F={[R.BankDeposit]:j.BankDeposit,[R.Cheque]:j.Cheque,[R.Cod]:j.Cod,[R.InStore]:j.InStore,[R.MoneyOrder]:j.MoneyOrder},M=e=>Object.values(R).includes(e);class U{constructor(e,t){this._requestSender=e,this._paymentOrigin=t}submitPayment(e,t,n){var r,i,s,a,o,d,c;return a=this,o=void 0,c=function*(){const{paymentMethodId:a,paymentSessionToken:o}=e;let d;if(\"bigcommerce.manual_payment\"===a)d={type:L.ManualPayment,note:null!==(r=t.note)&&void 0!==r?r:\"\"};else if(M(a))d={type:F[a]};else{const[e,n]=t.cardExpiry?t.cardExpiry.split(\"/\"):[];d={type:L.Card,name:null!==(i=t.cardName)&&void 0!==i?i:\"\",number:t.cardNumber?t.cardNumber.replace(/ /g,\"\"):\"\",expires:{month:Number(e.trim()),year:Number(`20${n.trim()}`)},verification_value:null!==(s=t.cardCode)&&void 0!==s?s:void 0}}const c={headers:{Accept:A.Json,\"Content-Type\":A.Json,\"X-Payment-Session-Token\":o},body:{instrument:d,payment_method_id:a,form_nonce:null!=n?n:void 0}};return this._requestSender.post(`${this._paymentOrigin}/payments`,c)},new((d=void 0)||(d=Promise))(function(e,t){function n(e){try{i(c.next(e))}catch(e){t(e)}}function r(e){try{i(c.throw(e))}catch(e){t(e)}}function i(t){var i;t.done?e(t.value):(i=t.value,i instanceof d?i:new d(function(e){e(i)})).then(n,r)}i((c=c.apply(a,o||[])).next())})}}var H,q;class k{constructor(e){this._requestSender=e}submitPaymentInstrument(e,t){return n=this,r=void 0,s=function*(){const{providerId:n,currencyCode:r,paymentsUrl:i,shopperId:s,storeHash:a,vaultToken:o}=e,{billingAddress:d,instrument:c,defaultInstrument:u}=t,l=`${i}/stores/${a}/customers/${s}/stored_instruments`,p={headers:{Authorization:o,Accept:\"application/vnd.bc.v1+json\",\"Content-Type\":\"application/vnd.bc.v1+json\"},body:JSON.stringify({instrument:{type:c.type,cardholder_name:c.cardholderName,number:c.number,expiry_month:c.expiryMonth,expiry_year:c.expiryYear,verification_value:c.verificationValue},billing_address:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({email:d.email,address1:d.address1},d.address2&&{address2:d.address2}),{city:d.city,postal_code:d.postalCode,country_code:d.countryCode}),d.company&&{company:d.company}),{first_name:d.firstName,last_name:d.lastName}),d.phone&&{phone:d.phone}),d.stateOrProvinceCode&&{state_or_province_code:d.stateOrProvinceCode}),provider_id:n,default_instrument:u,currency_code:r})};yield this._requestSender.post(l,p)},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{d(s.next(e))}catch(e){t(e)}}function o(e){try{d(s.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,o)}d((s=s.apply(n,r||[])).next())});var n,r,i,s}}class ${format(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\")),r=t.slice(0,2),i=4===n.length?n.slice(-2):n?n.slice(0,2):t.slice(2);return e.length<2?t:e.length>3&&!i?r:`${r} / ${i}`}toObject(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\"));return/^\\d+$/.test(t)&&/^\\d+$/.test(n)?{month:1===t.length?`0${t}`:t.slice(0,2),year:2===n.length?`20${n}`:n.slice(0,4)}:{month:\"\",year:\"\"}}}class B{format(e){const{card:t}=d(e);if(!t)return e;const n=_(s(e).map(e=>_(e.lengths))),r=this.unformat(e).slice(0,n);return t.gaps.filter(e=>r.length>e).reduce((e,t,n)=>[e.slice(0,t+n),e.slice(t+n)].join(\" \"),r)}unformat(e){const{card:t}=d(e);return t?e.replace(new RegExp(\" \",\"g\"),\"\"):e}}function z(e){switch(e){case N.CardCode:return\"cc-csc\";case N.CardExpiry:return\"cc-exp\";case N.CardName:return\"cc-name\";case N.CardNumber:return\"cc-number\";default:return\"\"}}class W{constructor(e,t,n){this._form=e,this._fieldTypes=t,this._inputAggregator=n,this._handleChange=e=>{const t=e.target;if(!t)throw new Error(\"Unable to get a reference to the target of the change event.\");const n=this._inputAggregator.getInputs().find(e=>this._getAutocompleteElementId(e.getType())===t.id);n&&n.setValue(t.value)},this._inputs=this._fieldTypes.map(e=>this._createInput(e))}attach(){this._inputs.forEach(e=>this._form.appendChild(e))}detach(){this._inputs.forEach(e=>{e.parentElement&&e.parentElement.removeChild(e)})}_createInput(e){const t=document.createElement(\"input\");return t.autocomplete=z(e),t.id=this._getAutocompleteElementId(e),t.tabIndex=-1,t.style.position=\"absolute\",t.style.opacity=\"0\",t.style.zIndex=\"-1\",t.addEventListener(\"change\",this._handleChange),t}_getAutocompleteElementId(e){return`autocomplete-${p(e)}`}}!function(e){e.AttachRequested=\"HOSTED_FIELD:ATTACH_REQUESTED\",e.SubmitRequested=\"HOSTED_FIELD:SUBMITTED_REQUESTED\",e.SubmitManualOrderRequested=\"HOSTED_FIELD:SUBMIT_MANUAL_ORDER_REQUESTED\",e.ValidateRequested=\"HOSTED_FIELD:VALIDATE_REQUESTED\",e.StoredCardRequested=\"HOSTED_FIELD:STORED_CARD_REQUESTED\"}(H||(H={})),function(e){e.AttachSucceeded=\"HOSTED_INPUT:ATTACH_SUCCEEDED\",e.AttachFailed=\"HOSTED_INPUT:ATTACH_FAILED\",e.BinChanged=\"HOSTED_INPUT:BIN_CHANGED\",e.Blurred=\"HOSTED_INPUT:BLURRED\",e.Changed=\"HOSTED_INPUT:CHANGED\",e.CardTypeChanged=\"HOSTED_INPUT:CARD_TYPE_CHANGED\",e.Entered=\"HOSTED_INPUT:ENTERED\",e.Focused=\"HOSTED_INPUT:FOCUSED\",e.SubmitSucceeded=\"HOSTED_INPUT:SUBMIT_SUCCEEDED\",e.SubmitFailed=\"HOSTED_INPUT:SUBMIT_FAILED\",e.SubmitManualOrderSucceeded=\"HOSTED_INPUT:SUBMIT_MANUAL_ORDER_SUCCEEDED\",e.SubmitManualOrderFailed=\"HOSTED_INPUT:SUBMIT_MANUAL_ORDER_FAILED\",e.Validated=\"HOSTED_INPUT:VALIDATED\",e.StoredCardSucceeded=\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",e.StoredCardFailed=\"HOSTED_INPUT:STORED_CARD_FAILED\"}(q||(q={}));class J{constructor(e,t,n,r,i,s,a,o,d,c,u,l,p){this._type=e,this._form=t,this._placeholder=n,this._accessibilityLabel=r,this._autocomplete=i,this._styles=s,this._fontUrls=a,this._eventListener=o,this._eventPoster=d,this._inputAggregator=c,this._inputValidator=u,this._manualOrderPaymentHandler=l,this._storedCardHandler=p,this._isTouched=!1,this._handleInput=e=>{const t=e.target;this._processChange(t.value)},this._handleBlur=()=>{this._applyStyles(this._styles.default),this._validateForm(),this._eventPoster.post({type:q.Blurred,payload:{fieldType:this._type}})},this._handleFocus=()=>{this._applyStyles(this._styles.focus),this._eventPoster.post({type:q.Focused,payload:{fieldType:this._type}})},this._handleValidate=()=>{this._validateForm()},this._handleSubmit=e=>{e.preventDefault(),this._eventPoster.post({type:q.Entered,payload:{fieldType:this._type}})},this._forceFocusToInput=()=>{document.activeElement===document.body&&(navigator.userAgent.toLowerCase().indexOf(\"safari\")>-1?\"\"===this._input.value&&(this._input.setAttribute(\"value\",\" \"),this._input.setSelectionRange(0,1),this._input.setAttribute(\"value\",\"\")):this._input.focus())},this._input=document.createElement(\"input\"),this._input.addEventListener(\"input\",this._handleInput),this._input.addEventListener(\"blur\",this._handleBlur),this._input.addEventListener(\"focus\",this._handleFocus),this._eventListener.addListener(H.ValidateRequested,this._handleValidate),this._eventListener.addListener(H.SubmitManualOrderRequested,this._manualOrderPaymentHandler.handle),this._eventListener.addListener(H.StoredCardRequested,this._storedCardHandler.handle),this._configureInput()}getType(){return this._type}getValue(){return this._input.value}setValue(e){this._processChange(e)}isTouched(){return this._isTouched}attach(){this._form.appendChild(this._input),this._form.addEventListener(\"submit\",this._handleSubmit),this._loadFonts(),this._eventPoster.setTarget(window.parent),this._eventListener.listen(),window.addEventListener(\"focus\",this._forceFocusToInput),window.hostedInput=this,this._eventPoster.post({type:q.AttachSucceeded})}detach(){this._input.parentElement&&this._input.parentElement.removeChild(this._input),this._form.removeEventListener(\"submit\",this._handleSubmit),this._unloadFonts(),window.removeEventListener(\"focus\",this._forceFocusToInput),this._eventListener.stopListen()}_formatValue(e){this._input.value=e}_notifyChange(e){this._eventPoster.post({type:q.Changed,payload:{fieldType:this._type}})}_configureInput(){switch(this._input.style.backgroundColor=\"transparent\",this._input.style.border=\"0\",this._input.style.display=\"block\",this._input.style.height=\"100%\",this._input.style.margin=\"0\",this._input.style.outline=\"none\",this._input.style.padding=\"0\",this._input.style.width=\"100%\",this._input.id=p(this._type),this._input.placeholder=this._placeholder,this._input.autocomplete=this._autocomplete,this._input.setAttribute(\"aria-label\",this._accessibilityLabel),this._applyStyles(this._styles.default),this._input.id){case\"card-code\":case\"card-expiry\":case\"card-number\":this._input.type=\"text\",this._input.inputMode=\"numeric\",this._input.pattern=\"[0-9]*\";break;case\"card-name\":case\"note\":case\"hidden\":this._input.type=\"text\",this._input.inputMode=\"text\"}}_applyStyles(e={}){const t={color:e.color,fontFamily:e.fontFamily,fontSize:e.fontSize,fontWeight:e.fontWeight};Object.keys(t).forEach(e=>{t[e]&&(this._input.style[e]=t[e]||\"\")})}_loadFonts(){this._fontLinks||(this._fontLinks=this._fontUrls.filter(e=>\"fonts.googleapis.com\"===E(e).hostname).filter(e=>!document.querySelector(`link[href='${e}'][rel='stylesheet']`)).map(e=>{const t=document.createElement(\"link\");return t.rel=\"stylesheet\",t.href=e,document.head.appendChild(t),t}))}_unloadFonts(){this._fontLinks&&(this._fontLinks.forEach(e=>{e.parentElement&&e.parentElement.removeChild(e)}),this._fontLinks=void 0)}_validateForm(){return e=this,t=void 0,r=function*(){const e=this._inputAggregator.getInputValues(),t=yield this._inputValidator.validate(e);t.isValid?this._applyStyles(this._styles.default):this._applyStyles(this._styles.error),this._eventPoster.post({type:q.Validated,payload:t})},new((n=void 0)||(n=Promise))(function(i,s){function a(e){try{d(r.next(e))}catch(e){s(e)}}function o(e){try{d(r.throw(e))}catch(e){s(e)}}function d(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,o)}d((r=r.apply(e,t||[])).next())});var e,t,n,r}_processChange(e){e!==this._previousValue&&(this._isTouched=!0,this._formatValue(e),this._validateForm(),this._notifyChange(e),this._previousValue=e)}}class Q extends J{constructor(e,t,n,r,i,s,a,o,d,c,u,l,p){super(N.CardExpiry,e,t,n,r,i,s,a,o,d,c,u,l),this._formatter=p}_formatValue(e){this._input.value=this._formatter.format(e)}}class Y extends J{constructor(e,t,n,r,i,s,a,o,d,c,u,l,p,h,_){super(e,t,n,r,i,s,a,o,d,c,u,l,p),this._autocompleteFieldset=h,this._formatter=_}attach(){super.attach(),this._autocompleteFieldset.attach()}_notifyChange(e){const t=d(e).card,n=this._previousValue&&d(this._previousValue).card;u(n,\"type\")!==u(t,\"type\")&&this._eventPoster.post({type:q.CardTypeChanged,payload:{cardType:t?t.type:void 0}});const r=this._formatter.unformat(e),i=this._previousValue?this._formatter.unformat(this._previousValue):\"\",s=r.length>=6&&d(r).isPotentiallyValid?r.substr(0,6):\"\";s!==(i.length>=6?i.substr(0,6):\"\")&&this._eventPoster.post({type:q.BinChanged,payload:{bin:s}})}_formatValue(e){const t=this._input.selectionEnd,n=this._formatter.format(e);t===e.length&&e.length<n.length?this._input.setSelectionRange(n.length,n.length):this._input.setSelectionRange(t||0,t||0),this._input.value=n}}class G{constructor(e){this._parentWindow=e}getInputs(e){return Array.prototype.slice.call(this._parentWindow.frames).reduce((t,n)=>{try{const r=n.hostedInput;return!r||e&&!e(r)?t:[...t,r]}catch(e){if(e instanceof DOMException)return t;if(e instanceof Error&&\"Permission denied\"===e.message)return t;throw e}},[])}getInputValues(e){return this.getInputs(e).reduce((e,t)=>Object.assign(Object.assign({},e),{[t.getType()]:t.getValue()}),{})}}class X extends v{constructor(e){super([\"Unable to proceed due to invalid user input values\",...c(y(e),e=>h(e,({message:e})=>e))].join(\". \")),this.errors=e,this.name=\"InvalidHostedFormValueError\",this.type=\"invalid_hosted_form_value\"}}class K{constructor(e,t,n,r,i){this._inputAggregator=e,this._inputValidator=t,this._inputStorage=n,this._eventPoster=r,this._manualOrderPaymentRequestSender=i,this.handle=e=>{return t=this,n=void 0,i=function*(){var t,n;const{payload:{data:r}}=e,i=this._inputAggregator.getInputValues(),s=yield this._inputValidator.validate(i);if(this._eventPoster.post({type:q.Validated,payload:s}),!s.isValid){const e=new X(s.errors);return this._eventPoster.post({type:q.SubmitManualOrderFailed,payload:{error:{code:m(e.name),message:e.message}}})}try{const e=yield this._manualOrderPaymentRequestSender.submitPayment(r,i,this._inputStorage.getNonce()),s=\"failure\"===u(e.body,\"type\")&&l(u(e.body,\"code\")),a=\"error\"===u(e.body,\"type\"),o=M(r.paymentMethodId)&&\"continue\"===u(e.body,\"type\")&&\"complete_offline\"===u(e.body,\"code\"),d=\"continue\"===u(e.body,\"type\")&&\"await_confirmation\"===u(e.body,\"code\"),c=\"success\"===u(e.body,\"type\")||o||d;s?this._eventPoster.post({type:q.SubmitManualOrderFailed,payload:{error:{code:String(null!==(t=u(e.body,\"code\"))&&void 0!==t?t:\"\")}}}):a?this._eventPoster.post({type:q.SubmitManualOrderFailed,payload:{error:{code:String(null!==(n=u(e.body,\"type\"))&&void 0!==n?n:\"\")}}}):c&&this._eventPoster.post({type:q.SubmitManualOrderSucceeded,payload:{response:e}})}catch(e){this._isPaymentErrorResponse(e)?this._eventPoster.post({type:q.SubmitManualOrderFailed,payload:{error:e.body.errors[0],response:e}}):this._isErrorResponse(e)&&this._eventPoster.post({type:q.SubmitManualOrderFailed,payload:{error:{code:m(e.name),message:e.message}}})}},new((r=void 0)||(r=Promise))(function(e,s){function a(e){try{d(i.next(e))}catch(e){s(e)}}function o(e){try{d(i.throw(e))}catch(e){s(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,o)}d((i=i.apply(t,n||[])).next())});var t,n,r,i}}_isPaymentErrorResponse(e){const{body:{errors:t=[]}={}}=e||{};return\"string\"==typeof(t[0]&&t[0].code)&&\"string\"==typeof(t[0]&&t[0].message)}_isErrorResponse(e){return\"object\"==typeof e&&null!==e&&(\"name\"in e&&\"string\"==typeof e.name||!(\"name\"in e))&&(\"message\"in e&&\"string\"==typeof e.message||!(\"message\"in e))}}class Z{constructor(e,t,n,r){this._inputAggregator=e,this._inputValidator=t,this._eventPoster=n,this._storedCardRequestSender=r,this.handle=e=>{return t=this,n=void 0,i=function*(){var t;const{payload:{data:n,fields:r}}=e,i=this._inputAggregator.getInputValues(),s=yield this._inputValidator.validate(i);if(this._eventPoster.post({type:q.Validated,payload:s}),!s.isValid)return this._eventPoster.post({type:q.StoredCardFailed});const{defaultInstrument:a}=r,o=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(r,[\"defaultInstrument\"]),[d,c]=i.cardExpiry?i.cardExpiry.split(\"/\"):[];try{yield this._storedCardRequestSender.submitPaymentInstrument(n,{billingAddress:o,instrument:{type:\"card\",cardholderName:i.cardName||\"\",number:i.cardNumber?i.cardNumber.replace(/ /g,\"\"):\"\",expiryMonth:Number(d.trim()),expiryYear:Number(`20${c.trim()}`),verificationValue:null!==(t=i.cardCode)&&void 0!==t?t:\"\"},defaultInstrument:a}),this._eventPoster.post({type:q.StoredCardSucceeded})}catch(e){this._eventPoster.post({type:q.StoredCardFailed})}},new((r=void 0)||(r=Promise))(function(e,s){function a(e){try{d(i.next(e))}catch(e){s(e)}}function o(e){try{d(i.throw(e))}catch(e){s(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,o)}d((i=i.apply(t,n||[])).next())});var t,n,r,i}}}class ee{constructor(){this._completeSchema={cardCode:this._getCardCodeSchema(),cardExpiry:this._getCardExpirySchema(),cardName:this._getCardNameSchema(),cardNumber:this._getCardNumberSchema(),note:this._getNoteSchema()},this._configureCardValidator()}validate(e){return t=this,n=void 0,i=function*(){const t={},n={errors:{},isValid:!0};let r;for(r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=this._completeSchema[r],n.errors[r]=[]);try{return yield f(t).validate(e,{abortEarly:!1}),n}catch(e){if(this._isValidationErrorType(e))throw e;return{errors:Object.keys(n.errors).reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:e.inner.filter(e=>e.path===n).map(e=>({fieldType:e.path,message:e.errors.join(\" \"),type:e.type}))}),{}),isValid:!1}}},new((r=void 0)||(r=Promise))(function(e,s){function a(e){try{d(i.next(e))}catch(e){s(e)}}function o(e){try{d(i.throw(e))}catch(e){s(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,o)}d((i=i.apply(t,n||[])).next())});var t,n,r,i}_configureCardValidator(){const e=s.getTypeInfo(\"discover\"),t=s.getTypeInfo(\"visa\");s.updateCard(\"visa\",{lengths:[13,...t.lengths||[]]}),s.updateCard(\"discover\",{patterns:[...e.patterns||[],[810,817]]}),s.addCard({niceType:\"Mada\",type:\"mada\",patterns:[400861,401757,407197,407395,409201,410685,412565,417633,419593,422817,422818,422819,428331,428671,428672,428673,431361,432328,434107,439954,440533,440647,440795,445564,446393,446404,446672,455036,455708,457865,458456,462220,468540,468541,468542,468543,483010,483011,483012,484783,486094,486095,486096,489317,489318,489319,493428,504300,506968,508160,513213,520058,521076,524130,524514,529415,529741,530060,530906,531095,531196,532013,535825,535989,536023,537767,539931,543085,543357,549760,554180,557606,558848,585265,588845,588846,588847,588848,588849,588850,588851,588982,588983,589005,589206,604906,605141,636120,968201,968202,968203,968204,968205,968206,968207,968208,968209,968210,968211],gaps:[4,8,12],lengths:[16,18,19],code:{name:\"CVV\",size:3}})}_getCardCodeSchema(){return g().required(\"CVV is required\").test({message:\"CVV must be valid\",name:\"invalid_card_code\",test(e){const{card:t}=d(this.parent.cardNumber||\"\");return a(e,t&&t.code?t.code.size:void 0).isValid}})}_getCardExpirySchema(){return g().required(\"Expiration date is required\").test({message:\"Expiration date must be a valid future date in MM / YY format\",name:\"invalid_card_expiry\",test:e=>o(e).isValid})}_getCardNameSchema(){return g().max(200).required(\"Full name is required\").test({message:\"Credit card name must be valid\",name:\"invalid_card_name\",test:e=>{const t=e.replace(/\\s/g,\"\").match(/[0-9]+/g);if(!(null==t?void 0:t.length))return!0;for(const e of t)if(d(e).isValid)return!1;return!0}})}_getNoteSchema(){return g().required(\"Manual payment description is required\").max(128,\"Payment description cannot exceed 128 letters\")}_getCardNumberSchema(){return g().required(\"Credit card number is required\").test({message:\"Credit card number must be valid\",name:\"invalid_card_number\",test:e=>d(e).isValid})}_isValidationErrorType(e){return\"name\"in e&&\"ValidationError\"!==e.name}}class te{constructor(e,t){this._parentOrigin=e,this._paymentOrigin=t}create(e,t,n={},r=[],i=\"\",s=function(e){switch(e){case N.CardCode:return\"CVC\";case N.CardExpiry:return\"Expiration\";case N.CardName:return\"Name on card\";case N.CardNumber:return\"Credit card number\";case N.Note:return\"Payment note\";case N.Hidden:return\"Hidden field\"}}(t)){const a=z(t);return t===N.CardNumber?this._createNumberInput(t,e,n,r,i,s,a):t===N.CardExpiry?this._createExpiryInput(e,n,r,i,s,a):this._createInput(t,e,n,r,i,s,a)}normalizeParentOrigin(e){this._parentOrigin!==e&&(this._parentOrigin!==w(E(e)).origin&&e!==w(E(this._parentOrigin)).origin||(this._parentOrigin=e))}getParentOrigin(){return this._parentOrigin}_createExpiryInput(e,t,n,r,i=\"\",s=\"\"){return new Q(e,r,i,s,t,n,new S(this._parentOrigin),new x(this._parentOrigin,window.parent),new G(window.parent),new ee,this._createManualOrderPaymentHandler(),this._createStoredCardHandler(),new $)}_createNumberInput(e,t,n,r,i,s=\"\",a=\"\"){return new Y(e,t,i,s,a,n,r,new S(this._parentOrigin),new x(this._parentOrigin,window.parent),new G(window.parent),new ee,this._createManualOrderPaymentHandler(),this._createStoredCardHandler(),new W(t,[N.CardCode,N.CardExpiry,N.CardName],new G(window.parent)),new B)}_createInput(e,t,n,r,i,s=\"\",a=\"\"){return new J(e,t,i,s,a,n,r,new S(this._parentOrigin),new x(this._parentOrigin,window.parent),new G(window.parent),new ee,this._createManualOrderPaymentHandler(),this._createStoredCardHandler())}_createManualOrderPaymentHandler(){return new K(new G(window.parent),new ee,I(),new x(this._parentOrigin,window.parent),new U(e(),this._paymentOrigin))}_createStoredCardHandler(){return new Z(new G(window.parent),new ee,new x(this._parentOrigin,window.parent),new k(e()))}}class ne extends v{constructor(e){super(e||\"Unable to proceed due to invalid configuration provided for the hosted payment form.\"),this.name=\"InvalidHostedFormConfigError\",this.type=\"invalid_hosted_form_config\"}}class re{constructor(e,t,n){this._factory=e,this._storage=t,this._eventListener=n}initialize(e,n){n&&this._storage.setNonce(n);const s=this._createFormContainer(e);return this._resetPageStyles(e),this._eventListener.listen(),t(this._eventListener,H.AttachRequested).pipe(r(({payload:e})=>{const{accessibilityLabel:t,fontUrls:n,placeholder:r,styles:i,origin:a,type:o}=e;a&&this._factory.normalizeParentOrigin(a);const d=this._factory.create(s,o,i,n,r,t);return d.attach(),d}),i(1)).toPromise()}_resetPageStyles(e){[document.querySelector(\"html\"),document.querySelector(\"body\"),document.getElementById(e)].forEach(e=>{e&&(e.style.height=\"100%\",e.style.width=\"100%\",e.style.overflow=\"hidden\",e.style.padding=\"0\",e.style.margin=\"0\")})}_createFormContainer(e){const t=document.getElementById(e);if(!t)throw new ne(\"Unable to proceed because the provided container ID is not valid.\");const n=document.createElement(\"form\"),r=document.createElement(\"button\");return n.noValidate=!0,n.style.height=\"100%\",n.style.width=\"100%\",r.style.display=\"none\",t.appendChild(n),n.appendChild(r),n}}function ie(e){const{containerId:t,nonce:n,parentOrigin:r,paymentOrigin:i}=e;return new re(new te(r,i),I(),new S(r)).initialize(t,n)}const se=new x(\"*\",window.parent);function ae(e){se.post({type:q.AttachFailed,payload:{error:e}})}export{ie as initializeHostedInput,ae as notifyInitializeError};\n//# sourceMappingURL=hosted-form-v2-iframe-content.js.map"
  },
  {
    "path": "dist/esm/hosted-form-v2-iframe-host.js",
    "content": "import{flatMap as e,map as t,noop as r,pick as i,values as n,without as s}from\"lodash\";import{fromEvent as o}from\"rxjs\";import{filter as a,map as d,switchMap as c,take as h}from\"rxjs/operators\";class u{constructor(e){const t=new Promise((e,t)=>{this.cancel=t});this.promise=Promise.race([e,t])}}class l extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class p extends l{constructor(e){super(e||\"Unable to proceed because the required element is unexpectedly detached from the page.\"),this.name=\"UnexpectedDetachmentError\",this.type=\"unexpected_detachment\"}}class m{constructor(e){this._mutationObserver=e}ensurePresence(e,t){return r=this,i=void 0,s=function*(){const r=new u(t),i=this._mutationObserver.create(t=>{t.forEach(t=>{0!==Array.from(t.removedNodes).filter(t=>e.some(e=>t===e||t.contains(e))).length&&r.cancel(new p)})});i.observe(document.body,{childList:!0,subtree:!0});try{const e=yield r.promise;return i.disconnect(),e}catch(e){throw i.disconnect(),e}},new((n=void 0)||(n=Promise))(function(e,t){function o(e){try{d(s.next(e))}catch(e){t(e)}}function a(e){try{d(s.throw(e))}catch(e){t(e)}}function d(t){var r;t.done?e(t.value):(r=t.value,r instanceof n?r:new n(function(e){e(r)})).then(o,a)}d((s=s.apply(r,i||[])).next())});var r,i,n,s}}class f{constructor(e=window){this._window=e}create(e){return new this._window.MutationObserver(e)}}class _ extends l{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function y(e){if(!/^(https?:)?\\/\\//.test(e))throw new _(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=e;const r=t.port&&-1!==e.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${r?`:${r}`:\"\"}`,pathname:t.pathname,port:r,protocol:t.protocol,search:t.search}}function v(e,t){return e.type===t}class E{constructor(e,t,r){this._targetWindow=t,this._context=r,this._targetOrigin=\"*\"===e?\"*\":y(e).origin}post(e,t){const r=this._targetWindow;if(window===r)return;if(!r)throw new Error(\"Unable to post message because target window is not set.\");const i=t&&o(window,\"message\").pipe(a(e=>e.origin===this._targetOrigin&&v(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)),d(e=>{if(t.errorType===e.data.type)throw e.data;return e.data}),h(1)).toPromise();return r.postMessage(Object.assign(Object.assign({},e),{context:this._context}),this._targetOrigin),i}setTarget(e){this._targetWindow=e}setContext(e){this._context=e}}function b(e,t,r){if(\"function\"!=typeof r.value)return r;let i=r.value;return{get(){const e=i.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},r),{value:e})),e},set(e){i=e}}}class g{constructor(e){var t;this._sourceOrigins=[y(e).origin,(t=y(e),y(0===t.hostname.indexOf(\"www\")?t.href:t.href.replace(t.hostname,`www.${t.hostname}`))).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let r=this._listeners[e];r||(this._listeners[e]=r=[]),-1===r.indexOf(t)&&r.push(t)}removeListener(e,t){const r=this._listeners[e];if(!r)return;const i=r.indexOf(t);i>=0&&r.splice(i,1)}trigger(e,t){const r=this._listeners[e.type];r&&r.forEach(r=>t?r(e,t):r(e))}_handleMessage(e){if(-1===this._sourceOrigins.indexOf(e.origin)||!v(e.data,e.data.type))return;const t=e.data,{context:r}=t,i=function(e,t){var r={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(r[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var n=0;for(i=Object.getOwnPropertySymbols(e);n<i.length;n++)t.indexOf(i[n])<0&&Object.prototype.propertyIsEnumerable.call(e,i[n])&&(r[i[n]]=e[i[n]])}return r}(t,[\"context\"]);this.trigger(i,r)}}!function(e,t,r,i){var n,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,r,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(o=(s<3?n(o):s>3?n(t,r,o):n(t,r))||o);s>3&&o&&Object.defineProperty(t,r,o)}([function(e,t,r){return t&&r?b(0,t,r):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(r=>{const i=Object.getOwnPropertyDescriptor(e.prototype,r);i&&\"constructor\"!==r&&Object.defineProperty(t.prototype,r,b(e.prototype,r,i))}),t}(e)}],g.prototype,\"_handleMessage\",null);const w={body:{},headers:{},status:0};class O extends l{constructor(e,{message:t,errors:r}={}){const{body:i,headers:n,status:s}=e||w;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=n,this.status=s,this.errors=r||[]}}function S(e){if(Array.isArray(e))return e.reduce((e,t)=>t&&t.message?[...e,t.message]:e,[]).join(\" \")}class T extends l{constructor(e){super(e||\"Unable to proceed due to invalid configuration provided for the hosted payment form.\"),this.name=\"InvalidHostedFormConfigError\",this.type=\"invalid_hosted_form_config\"}}class F extends l{constructor(e){super(e||\"Unable to proceed due to an unknown error with the hosted payment form.\"),this.name=\"InvalidHostedFormError\",this.type=\"invalid_hosted_form\"}}class D extends l{constructor(r){super([\"Unable to proceed due to invalid user input values\",...e(n(r),e=>t(e,({message:e})=>e))].join(\". \")),this.errors=r,this.name=\"InvalidHostedFormValueError\",this.type=\"invalid_hosted_form_value\"}}var I,P;!function(e){e.AttachRequested=\"HOSTED_FIELD:ATTACH_REQUESTED\",e.SubmitRequested=\"HOSTED_FIELD:SUBMITTED_REQUESTED\",e.SubmitManualOrderRequested=\"HOSTED_FIELD:SUBMIT_MANUAL_ORDER_REQUESTED\",e.ValidateRequested=\"HOSTED_FIELD:VALIDATE_REQUESTED\",e.StoredCardRequested=\"HOSTED_FIELD:STORED_CARD_REQUESTED\"}(I||(I={})),function(e){e.AttachSucceeded=\"HOSTED_INPUT:ATTACH_SUCCEEDED\",e.AttachFailed=\"HOSTED_INPUT:ATTACH_FAILED\",e.BinChanged=\"HOSTED_INPUT:BIN_CHANGED\",e.Blurred=\"HOSTED_INPUT:BLURRED\",e.Changed=\"HOSTED_INPUT:CHANGED\",e.CardTypeChanged=\"HOSTED_INPUT:CARD_TYPE_CHANGED\",e.Entered=\"HOSTED_INPUT:ENTERED\",e.Focused=\"HOSTED_INPUT:FOCUSED\",e.SubmitSucceeded=\"HOSTED_INPUT:SUBMIT_SUCCEEDED\",e.SubmitFailed=\"HOSTED_INPUT:SUBMIT_FAILED\",e.SubmitManualOrderSucceeded=\"HOSTED_INPUT:SUBMIT_MANUAL_ORDER_SUCCEEDED\",e.SubmitManualOrderFailed=\"HOSTED_INPUT:SUBMIT_MANUAL_ORDER_FAILED\",e.Validated=\"HOSTED_INPUT:VALIDATED\",e.StoredCardSucceeded=\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",e.StoredCardFailed=\"HOSTED_INPUT:STORED_CARD_FAILED\"}(P||(P={}));var C=function(e,t,r,i){return new(r||(r=Promise))(function(n,s){function o(e){try{d(i.next(e))}catch(e){s(e)}}function a(e){try{d(i.throw(e))}catch(e){s(e)}}function d(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(o,a)}d((i=i.apply(e,t||[])).next())})};class L{constructor(e,t,r,i,n,s,o,a,d){this._type=e,this._containerId=t,this._placeholder=r,this._accessibilityLabel=i,this._styles=n,this._eventPoster=s,this._eventListener=o,this._detachmentObserver=a,this._orderId=d,this._iframe=document.createElement(\"iframe\"),this._iframe.src=this.getFrameSrc(this._orderId),this._iframe.style.border=\"none\",this._iframe.style.height=\"100%\",this._iframe.style.overflow=\"hidden\",this._iframe.style.width=\"100%\"}getFrameSrc(e){return void 0!==e?`/admin/payments/${this._orderId}/hosted-form-field?version=1.916.1`:\"/account/stored-instruments/hosted-fields?version=1.916.1\"}getType(){return this._type}attach(){return C(this,void 0,void 0,function*(){const e=document.getElementById(this._containerId);if(!e)throw new T(\"Unable to proceed because the provided container ID is not valid.\");e.appendChild(this._iframe),this._eventListener.listen();const t=o(this._iframe,\"load\").pipe(c(({target:e})=>C(this,void 0,void 0,function*(){const t=e&&e.contentWindow;if(!t)throw new Error(\"The content window of the iframe cannot be accessed.\");this._eventPoster.setTarget(t),yield this._eventPoster.post({type:I.AttachRequested,payload:{accessibilityLabel:this._accessibilityLabel,fontUrls:this._getFontUrls(),placeholder:this._placeholder,styles:this._styles,origin:document.location.origin,type:this._type}},{successType:P.AttachSucceeded,errorType:P.AttachFailed})})),h(1)).toPromise();yield this._detachmentObserver.ensurePresence([this._iframe],t)})}detach(){this._iframe.parentElement&&(this._iframe.parentElement.removeChild(this._iframe),this._eventListener.stopListen())}submitForm(e,t){return C(this,void 0,void 0,function*(){try{const r=this._eventPoster.post({type:I.SubmitRequested,payload:{fields:e,data:t}},{successType:P.SubmitSucceeded,errorType:P.SubmitFailed});return yield this._detachmentObserver.ensurePresence([this._iframe],r)}catch(e){if(this._isSubmitErrorEvent(e)){if(\"hosted_form_error\"===e.payload.error.code)throw new F(e.payload.error.message);if(e.payload.response)throw function(e){const{body:t}=e,{errors:r=[]}=t;return new O(e,{message:S(r)||void 0,errors:r})}(e.payload.response);throw new Error(e.payload.error.message)}throw e}})}submitManualOrderForm(e){return C(this,void 0,void 0,function*(){try{const t=this._eventPoster.post({type:I.SubmitManualOrderRequested,payload:{data:e}},{successType:P.SubmitManualOrderSucceeded,errorType:P.SubmitManualOrderFailed});return yield this._detachmentObserver.ensurePresence([this._iframe],t)}catch(e){if(this._isSubmitManualOrderErrorEvent(e)){if(\"hosted_form_error\"===e.payload.error.code)throw new F(e.payload.error.message);if(e.payload.error.message)throw new Error(e.payload.error.message);throw new Error(e.payload.error.code)}throw e}})}submitStoredCardForm(e,t){return C(this,void 0,void 0,function*(){const r=this._eventPoster.post({type:I.StoredCardRequested,payload:{fields:e,data:t}},{successType:P.StoredCardSucceeded,errorType:P.StoredCardFailed});return this._detachmentObserver.ensurePresence([this._iframe],r)})}validateForm(){return C(this,void 0,void 0,function*(){const e=this._eventPoster.post({type:I.ValidateRequested},{successType:P.Validated}),{payload:t}=yield this._detachmentObserver.ensurePresence([this._iframe],e);if(!t.isValid)throw new D(t.errors)})}_getFontUrls(){const e=\"fonts.googleapis.com\",t=document.querySelectorAll(`link[href*='${e}'][rel='stylesheet']`);return Array.prototype.slice.call(t).filter(t=>y(t.href).hostname===e).filter(e=>n(this._styles).map(e=>e&&e.fontFamily).filter(e=>\"string\"==typeof e).some(t=>t.split(/,\\s/).some(t=>-1!==e.href.indexOf(t.replace(\" \",\"+\"))))).map(e=>e.href)}_isSubmitManualOrderErrorEvent(e){return e instanceof Object&&null!==e&&\"type\"in e&&e.type===P.SubmitManualOrderFailed}_isSubmitErrorEvent(e){return e.type===P.SubmitFailed}}var U,x=function(e,t,r,i){return new(r||(r=Promise))(function(n,s){function o(e){try{d(i.next(e))}catch(e){s(e)}}function a(e){try{d(i.throw(e))}catch(e){s(e)}}function d(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(o,a)}d((i=i.apply(e,t||[])).next())})};class N{constructor(e,t,i){this._fields=e,this._eventListener=t,this._eventCallbacks=i,this._handleEnter=({payload:e})=>x(this,void 0,void 0,function*(){try{yield this.validate()}catch(e){if(e instanceof Error&&\"InvalidHostedFormValueError\"!==e.name)throw e}const{onEnter:t=r}=this._eventCallbacks;t(e)});const{onBlur:n=r,onCardTypeChange:s=r,onFocus:o=r,onValidate:a=r}=this._eventCallbacks;this._eventListener.addListener(P.Blurred,({payload:e})=>n(e)),this._eventListener.addListener(P.CardTypeChanged,({payload:e})=>s(e)),this._eventListener.addListener(P.Focused,({payload:e})=>o(e)),this._eventListener.addListener(P.Validated,({payload:e})=>a(e)),this._eventListener.addListener(P.Entered,this._handleEnter),this._eventListener.addListener(P.CardTypeChanged,({payload:e})=>this._cardType=e.cardType),this._eventListener.addListener(P.BinChanged,({payload:e})=>this._bin=e.bin)}getBin(){return this._bin}getCardType(){return this._cardType}attach(){return x(this,void 0,void 0,function*(){this._eventListener.listen();const e=this._getFirstField(),t=s(this._fields,e);yield e.attach(),yield Promise.all(t.map(e=>e.attach()))})}detach(){this._eventListener.stopListen(),this._fields.forEach(e=>{e.detach()})}submitManualOrderPayment(e){return x(this,void 0,void 0,function*(){return this._getFirstField().submitManualOrderForm(e.data)})}submitStoredCard(e){return x(this,void 0,void 0,function*(){return this._getFirstField().submitStoredCardForm(e.fields,e.data)})}submit(e,t,r,i){return x(this,void 0,void 0,function*(){try{return yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),r.transform(e,i))}catch(i){let n;if(!(i instanceof Error||\"string\"==typeof i))throw new Error(\"Unexpected error type\");return n=yield t.handlePaymentHumanVerification(i),yield this._getFirstField().submitForm(this._fields.map(e=>e.getType()),r.transform(e,n))}})}validate(){return x(this,void 0,void 0,function*(){return this._getFirstField().validateForm()})}_getFirstField(){const e=this._fields[0];if(!e)throw new T(\"Unable to proceed because the payment form has no field defined.\");return e}}class A{create(e,t){const r=Object.keys(t.fields).reduce((r,i)=>{const n=t.fields[i];return n?[...r,new L(i,n.containerId,n.placeholder||\"\",n.accessibilityLabel||\"\",t.styles||{},new E(e),new g(e),new m(new f),t.orderId)]:r},[]);return new N(r,new g(e),i(t,\"onBlur\",\"onEnter\",\"onFocus\",\"onCardTypeChange\",\"onValidate\"))}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(U||(U={}));class R extends l{constructor(e){super(function(e){switch(e){case U.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case U.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case U.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case U.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class H{constructor(e,t){this._host=e,this._hostedFormFactory=t}initialize(e){const t=this._hostedFormFactory.create(this._host,e);return t.attach().then(()=>{this._hostedForm=t})}deinitialize(){this._hostedForm&&(this._hostedForm.detach(),this._hostedForm=void 0)}submitManualOrderPayment(e){return t=this,r=void 0,n=function*(){const t=this._hostedForm;if(!t)throw new R(U.PaymentNotInitialized);return yield t.validate(),t.submitManualOrderPayment({data:e})},new((i=void 0)||(i=Promise))(function(e,s){function o(e){try{d(n.next(e))}catch(e){s(e)}}function a(e){try{d(n.throw(e))}catch(e){s(e)}}function d(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i(function(e){e(r)})).then(o,a)}d((n=n.apply(t,r||[])).next())});var t,r,i,n}}function M(e){return new H(e,new A)}class z{constructor(e,t){this._host=e,this._hostedFormFactory=t}submitStoredCard(e,t){return r=this,i=void 0,s=function*(){const r=this._hostedForm;if(!r)throw new R(U.PaymentNotInitialized);yield r.validate().then(()=>r.submitStoredCard({fields:e,data:t}))},new((n=void 0)||(n=Promise))(function(e,t){function o(e){try{d(s.next(e))}catch(e){t(e)}}function a(e){try{d(s.throw(e))}catch(e){t(e)}}function d(t){var r;t.done?e(t.value):(r=t.value,r instanceof n?r:new n(function(e){e(r)})).then(o,a)}d((s=s.apply(r,i||[])).next())});var r,i,n,s}initialize(e){const t=this._hostedFormFactory.create(this._host,e);return t.attach().then(()=>{this._hostedForm=t})}deinitialize(){this._hostedForm&&this._hostedForm.detach()}}function j(e){return new z(e,new A)}export{M as createHostedFormService,j as createStoredCardHostedFormService};\n//# sourceMappingURL=hosted-form-v2-iframe-host.js.map"
  },
  {
    "path": "dist/esm/hosted-form.js",
    "content": "import{createClient as e}from\"@bigcommerce/bigpay-client\";import{createRequestSender as t}from\"@bigcommerce/request-sender\";import{fromEvent as n}from\"rxjs\";import{filter as r,map as i,take as s}from\"rxjs/operators\";import{filter as a,find as o,flatMap as d,get as c,kebabCase as u,keyBy as l,map as p,max as m,pick as h,reduce as g,snakeCase as y,some as _,values as f}from\"lodash\";import{creditCardType as b,cvv as C,expirationDate as v,number as E}from\"card-validator\";import{object as O,string as I}from\"yup\";function w(e,t,n){if(\"function\"!=typeof n.value)return n;let r=n.value;return{get(){const e=r.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){r=e}}}class P extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class A extends P{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function T(e){if(!/^(https?:)?\\/\\//.test(e))throw new A(\"The provided URL must be absolute.\");const t=document.createElement(\"a\");t.href=e;const n=t.port&&-1!==e.indexOf(`${t.hostname}:${t.port}`)?t.port:\"\";return{hash:t.hash,hostname:t.hostname,href:t.href,origin:`${t.protocol}//${t.hostname}${n?`:${n}`:\"\"}`,pathname:t.pathname,port:n,protocol:t.protocol,search:t.search}}function S(e){return T(0===e.hostname.indexOf(\"www\")?e.href:e.href.replace(e.hostname,`www.${e.hostname}`))}function x(e,t){return e.type===t}class N{constructor(e){this._sourceOrigins=[T(e).origin,S(T(e)).origin],this._isListening=!1,this._listeners={}}listen(){this._isListening||(this._isListening=!0,window.addEventListener(\"message\",this._handleMessage))}stopListen(){this._isListening&&(this._isListening=!1,window.removeEventListener(\"message\",this._handleMessage))}addListener(e,t){let n=this._listeners[e];n||(this._listeners[e]=n=[]),-1===n.indexOf(t)&&n.push(t)}removeListener(e,t){const n=this._listeners[e];if(!n)return;const r=n.indexOf(t);r>=0&&n.splice(r,1)}trigger(e,t){const n=this._listeners[e.type];n&&n.forEach(n=>t?n(e,t):n(e))}_handleMessage(e){if(-1===this._sourceOrigins.indexOf(e.origin)||!x(e.data,e.data.type))return;const t=e.data,{context:n}=t,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(t,[\"context\"]);this.trigger(r,n)}}!function(e,t,n,r){var i,s=arguments.length,a=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,r);else for(var o=e.length-1;o>=0;o--)(i=e[o])&&(a=(s<3?i(a):s>3?i(t,n,a):i(t,n))||a);s>3&&a&&Object.defineProperty(t,n,a)}([function(e,t,n){return t&&n?w(0,t,n):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const r=Object.getOwnPropertyDescriptor(e.prototype,n);r&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,w(e.prototype,n,r))}),t}(e)}],N.prototype,\"_handleMessage\",null);class D{setNonce(e){this._nonce=e}getNonce(){return this._nonce}}let M;function V(){return M=M||new D,M}class L{constructor(e,t,n){this._targetWindow=t,this._context=n,this._targetOrigin=\"*\"===e?\"*\":T(e).origin}post(e,t){const a=this._targetWindow;if(window===a)return;if(!a)throw new Error(\"Unable to post message because target window is not set.\");const o=t&&n(window,\"message\").pipe(r(e=>e.origin===this._targetOrigin&&x(e.data,e.data.type)&&-1!==[t.successType,t.errorType].indexOf(e.data.type)),i(e=>{if(t.errorType===e.data.type)throw e.data;return e.data}),s(1)).toPromise();return a.postMessage(Object.assign(Object.assign({},e),{context:this._context}),this._targetOrigin),o}setTarget(e){this._targetWindow=e}setContext(e){this._context=e}}class R{constructor(e){this._client=e}submitPayment(e){return new Promise((t,n)=>{this._client.submitPayment(e,(e,r)=>{e?n(this._transformResponse(e)):t(this._transformResponse(r))})})}initializeOffsitePayment(e,t){return new Promise(()=>{this._client.initializeOffsitePayment(e,null,t)})}_transformResponse(e){return{headers:e.headers,body:e.data,status:e.status,statusText:e.statusText}}}function U(e,t){let n;return function(e){return void 0!==e.id}(e)?n=e.id:t&&t.length&&(n=t[0].id),{id:n,firstName:e.firstName,lastName:e.lastName,company:e.company,addressLine1:e.address1,addressLine2:e.address2,city:e.city,province:e.stateOrProvince,provinceCode:e.stateOrProvinceCode,postCode:e.postalCode,country:e.country,countryCode:e.countryCode,phone:e.phone,customFields:e.customFields}}class j{constructor(e){this._decimalPlaces=e}toInteger(e){return Math.round(e*Math.pow(10,this._decimalPlaces))}}const k=[\"per_item_discount\",\"percentage_discount\",\"per_total_discount\",\"shipping_discount\",\"free_shipping\"];function F(e){return{code:e.code,discount:e.displayName,discountType:k.indexOf(e.couponType)}}function H(e){return{code:e.code,discountedAmount:e.used,remainingBalance:e.remaining,giftCertificate:{balance:e.balance,code:e.code,purchaseDate:e.purchaseDate}}}function q(e){const t=[];return(e||[]).forEach(e=>{(e.banners||[]).forEach(e=>{t.push({placeholders:[],discountType:null,message:\"\",messageHtml:e.text})})}),t}function B(e,t,n=\"id\"){return Object.keys(e).reduce((r,i)=>[...r,...e[i].map(e=>\"giftCertificates\"===i?function(e,t){const n=new j(t);return{id:e.id,imageUrl:\"\",name:e.name,amount:e.amount,amountAfterDiscount:e.amount,discount:0,integerAmount:n.toInteger(e.amount),integerAmountAfterDiscount:n.toInteger(e.amount),integerUnitPrice:n.toInteger(e.amount),integerUnitPriceAfterDiscount:n.toInteger(e.amount),integerDiscount:0,quantity:1,sender:e.sender,recipient:e.recipient,type:\"ItemGiftCertificateEntity\",attributes:[],variantId:null}}(e,t):function(e,t,n,r=\"id\"){const i=new j(n);return{id:e[r],imageUrl:e.imageUrl,amount:e.extendedListPrice,amountAfterDiscount:e.extendedSalePrice,discount:e.discountAmount,integerAmount:i.toInteger(e.extendedListPrice),integerAmountAfterDiscount:i.toInteger(e.extendedSalePrice),integerDiscount:i.toInteger(e.discountAmount),integerUnitPrice:i.toInteger(e.listPrice),integerUnitPriceAfterDiscount:i.toInteger(e.salePrice),downloadsPageUrl:e.downloadPageUrl,name:e.name,quantity:e.quantity,brand:e.brand,sku:e.sku,categoryNames:e.categoryNames,variantId:e.variantId,productId:e.productId,attributes:(e.options||[]).map(e=>({name:e.name,value:e.value})),addedByPromotion:e.addedByPromotion,type:t}}(e,function(e){switch(e){case\"physicalItems\":return\"ItemPhysicalEntity\";case\"digitalItems\":return\"ItemDigitalEntity\";case\"giftCertificates\":return\"ItemGiftCertificateEntity\";default:return\"\"}}(i),t,n))],[])}function G(e){const t=e.cart.currency.decimalPlaces,n=new j(t);return{id:e.cart.id,items:B(e.cart.lineItems,t),currency:e.cart.currency.code,coupon:{discountedAmount:g(e.cart.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.cart.coupons.map(F)},discount:{amount:e.cart.discountAmount,integerAmount:n.toInteger(e.cart.discountAmount)},discountNotifications:q(e.promotions),giftCertificate:{totalDiscountedAmount:g(e.giftCertificates,(e,t)=>e+t.used,0),appliedGiftCertificates:l(e.giftCertificates.map(H),\"code\")},shipping:{amount:e.shippingCostTotal,integerAmount:n.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:n.toInteger(e.shippingCostBeforeDiscount),required:_(e.cart.lineItems.physicalItems,e=>e.isShippingRequired)},subtotal:{amount:e.subtotal,integerAmount:n.toInteger(e.subtotal)},storeCredit:{amount:e.customer?e.customer.storeCredit:0},taxSubtotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:n.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:n.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.grandTotal,integerAmount:n.toInteger(e.grandTotal)}}}var Y;!function(e){e.APPLEPAY=\"applepay\",e.AMAZON_PAY_V2=\"amazonpay\",e.BRAINTREE_PAYPAL=\"braintreepaypal\",e.BRAINTREE_VENMO=\"braintreevenmo\",e.BRAINTREE_PAYPAL_CREDIT=\"braintreepaypalcredit\",e.GOOGLEPAY_ADYENV2=\"googlepayadyenv2\",e.GOOGLEPAY_ADYENV3=\"googlepayadyenv3\",e.GOOGLEPAY_AUTHORIZENET=\"googlepayauthorizenet\",e.GOOGLEPAY_BNZ=\"googlepaybnz\",e.GOOGLEPAY_BRAINTREE=\"googlepaybraintree\",e.GOOGLEPAY_CHECKOUTCOM=\"googlepaycheckoutcom\",e.GOOGLEPAY_CYBERSOURCEV2=\"googlepaycybersourcev2\",e.GOOGLEPAY_ORBITAL=\"googlepayorbital\",e.GOOGLEPAY_STRIPE=\"googlepaystripe\",e.GOOGLEPAY_STRIPEUPE=\"googlepaystripeupe\",e.GOOGLEPAY_WORLDPAYACCESS=\"googlepayworldpayaccess\",e.PAYPALEXPRESS=\"paypalexpress\"}(Y||(Y={}));const $=Y;var z;!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentProviderCustomer=13]=\"MissingPaymentProviderCustomer\",e[e.MissingPaymentRedirectUrl=14]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=15]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=16]=\"MissingPaymentToken\",e[e.MissingShippingAddress=17]=\"MissingShippingAddress\"}(z||(z={}));class W extends P{constructor(e){super(function(e){switch(e){case z.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case z.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case z.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case z.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case z.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case z.MissingCheckoutConfig:case z.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case z.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case z.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case z.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case z.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case z.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case z.MissingPaymentProviderCustomer:return\"Unable to proceed because payment provider customer is unavailable.\";case z.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function Q(e,t){const n=e.firstName||t.firstName||\"\",r=e.lastName||t.lastName||\"\";return{addresses:(e.addresses||[]).map(e=>U(e)),customerId:e.id,isGuest:e.isGuest,storeCredit:e.storeCredit,email:e.email||t.email||\"\",firstName:n,lastName:r,name:e.fullName||[n,r].join(\" \"),customerGroupName:e.customerGroup&&e.customerGroup.name}}class Z{format(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\")),r=t.slice(0,2),i=4===n.length?n.slice(-2):n?n.slice(0,2):t.slice(2);return e.length<2?t:e.length>3&&!i?r:`${r} / ${i}`}toObject(e){const[t=\"\",n=\"\"]=e.split(new RegExp(\"\\\\s*/\\\\s*\"));return/^\\d+$/.test(t)&&/^\\d+$/.test(n)?{month:1===t.length?`0${t}`:t.slice(0,2),year:2===n.length?`20${n}`:n.slice(0,4)}:{month:\"\",year:\"\"}}}class J{format(e){const{card:t}=E(e);if(!t)return e;const n=m(b(e).map(e=>m(e.lengths))),r=this.unformat(e).slice(0,n);return t.gaps.filter(e=>r.length>e).reduce((e,t,n)=>[e.slice(0,t+n),e.slice(t+n)].join(\" \"),r)}unformat(e){const{card:t}=E(e);return t?e.replace(new RegExp(\" \",\"g\"),\"\"):e}}function K(e,t={}){const n=e.currency.decimalPlaces,r=new j(n);return{id:e.orderId,items:B(e.lineItems,e.currency.decimalPlaces,\"productId\"),orderId:e.orderId,currency:e.currency.code,customerCanBeCreated:e.customerCanBeCreated,payment:te(e.payments,t.payment),subtotal:{amount:e.baseAmount,integerAmount:r.toInteger(e.baseAmount)},coupon:{discountedAmount:g(e.coupons,(e,t)=>e+t.discountedAmount,0),coupons:e.coupons.map(F)},discount:{amount:e.discountAmount,integerAmount:r.toInteger(e.discountAmount)},token:t.orderToken,callbackUrl:t.callbackUrl,discountNotifications:[],giftCertificate:ee(e.payments),socialData:re(e),status:e.status,hasDigitalItems:e.hasDigitalItems,isDownloadable:e.isDownloadable,isComplete:e.isComplete,shipping:{amount:e.shippingCostTotal,integerAmount:r.toInteger(e.shippingCostTotal),amountBeforeDiscount:e.shippingCostBeforeDiscount,integerAmountBeforeDiscount:r.toInteger(e.shippingCostBeforeDiscount)},storeCredit:{amount:X(e.payments)},taxes:e.taxes,taxTotal:{amount:e.taxTotal,integerAmount:r.toInteger(e.taxTotal)},handling:{amount:e.handlingCostTotal,integerAmount:r.toInteger(e.handlingCostTotal)},grandTotal:{amount:e.orderAmount,integerAmount:e.orderAmountAsInteger}}}function X(e){const t=o(e,{providerId:\"storecredit\"});return t?t.amount:0}function ee(e){const t=a(e,{providerId:\"giftcertificate\"});return{totalDiscountedAmount:g(t,(e,t)=>t.amount+e,0),appliedGiftCertificates:l(t.map(e=>({code:e.detail.code,discountedAmount:e.amount,remainingBalance:e.detail.remaining,giftCertificate:{balance:e.amount+e.detail.remaining,code:e.detail.code,purchaseDate:\"\"}})),\"code\")}}function te(e,t={}){const n=o(e,ne);return n?{id:n.providerId,status:(r=n.detail.step,`PAYMENT_STATUS_${r}`),helpText:n.detail.instructions,returnUrl:t.returnUrl}:{};var r}function ne(e){return\"giftcertificate\"!==e.providerId&&\"storecredit\"!==e.providerId}function re(e){const t={};return[...e.lineItems.physicalItems,...e.lineItems.digitalItems].forEach(e=>{var n;t[e.id]=(n=e,[\"fb\",\"tw\",\"gp\"].reduce((e,t)=>{const r=n.socialMedia&&o(n.socialMedia,e=>e.code===t);return r?(e[t]={name:n.name,description:n.name,image:n.imageUrl,url:r.link,shareText:r.text,sharingLink:r.link,channelName:r.channel,channelCode:r.code},e):e},{}))}),t}function ie(e,t){return{description:e.description,module:e.type,price:e.cost,id:e.id,selected:t,isRecommended:e.isRecommended,imageUrl:e.imageUrl,transitTime:e.transitTime}}class se{constructor(){this._cardExpiryFormatter=new Z,this._cardNumberFormatter=new J}transform(e,t){const n=t.billingAddress.getBillingAddress(),r=t.checkout.getCheckout(),i=t.customer.getCustomer(),s=t.order.getOrder(),a=t.paymentMethods.getPaymentMethod(e.methodId,e.gatewayId),o=this._mapShippingAddress(t,a),d=t.consignments.getConsignments(),c=t.consignments.getShippingOption(),u=t.config.getStoreConfig(),l=t.config.getContextConfig(),p=t.instruments.getInstrumentsMeta(),m=t.paymentMethods.getPaymentMethodsMeta(),g=t.order.getOrderMeta(),y=i&&n&&Q(i,n),_=p&&e.paymentData&&(f=e.paymentData,Boolean(f.instrumentId)||function(e){const t=e.formattedPayload;return!!t&&(\"string\"==typeof t.bigpay_token||Boolean(t.bigpay_token&&t.bigpay_token.token))}(e.paymentData))?`${t.payment.getPaymentToken()}, ${p.vaultAccessToken}`:t.payment.getPaymentToken();var f;if(!_)throw new W(z.MissingPaymentToken);return{additionalAction:e.additionalAction,authToken:_,customer:y,billingAddress:n&&U(n),shippingAddress:o&&U(o,d),shippingOption:c&&ie(c,!0),cart:r&&G(r),order:s&&K(s,g),orderMeta:g,payment:e.paymentData,paymentMethod:a&&this._transformPaymentMethod(a),quoteMeta:{request:Object.assign(Object.assign({},m),{geoCountryCode:l&&l.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:h(u&&u.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}transformWithHostedFormData(e,t,n){const{additionalAction:r,authToken:i,checkout:s,config:a,order:o,orderMeta:d,payment:c={},paymentMethod:u,paymentMethodMeta:l}=t,p=s&&s.consignments[0],m=p&&p.shippingAddress,g=p&&p.selectedShippingOption;return{additionalAction:r,authToken:i,paymentMethod:u&&this._transformPaymentMethod(u),customer:o&&o.billingAddress&&s&&Q(s.customer,o.billingAddress),billingAddress:o&&o.billingAddress&&U(o.billingAddress),shippingAddress:m&&s&&U(m,s.consignments),shippingOption:g&&ie(g,!0),cart:s&&G(s),order:o&&K(o,d),orderMeta:d,payment:this._transformHostedInputValues(e,c,n),quoteMeta:{request:Object.assign(Object.assign({},l),{geoCountryCode:a&&a.context.geoCountryCode})},source:\"bigcommerce-checkout-js-sdk\",store:a&&h(a.storeConfig.storeProfile,[\"storeHash\",\"storeId\",\"storeLanguage\",\"storeName\"])}}_transformPaymentMethod(e){if(\"multi-option\"===e.method&&!e.gateway)return Object.assign(Object.assign({},e),{gateway:e.id});if(e.initializationData&&e.initializationData.gateway)return Object.assign(Object.assign({},e),{id:e.initializationData.gateway});if(\"worldpayaccess\"===e.gateway){if(\"credit_card\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"credit-card\"});if(\"open_banking\"===e.id)return Object.assign(Object.assign({},e),{id:\"worldpayaccess\",method:\"open_banking\"})}return e.id===$.BRAINTREE_VENMO?Object.assign(Object.assign({},e),{id:$.BRAINTREE_PAYPAL}):e}_transformHostedInputValues(e,t,n){return\"instrumentId\"in t?Object.assign(Object.assign({},t),{ccCvv:e.cardCodeVerification,ccNumber:e.cardNumberVerification&&this._cardNumberFormatter.unformat(e.cardNumberVerification),hostedFormNonce:n}):Object.assign(Object.assign({},t),{ccCvv:e.cardCode,ccExpiry:this._cardExpiryFormatter.toObject(e.cardExpiry||\"\"),ccName:e.cardName||\"\",ccNumber:this._cardNumberFormatter.unformat(e.cardNumber||\"\"),hostedFormNonce:n})}_mapShippingAddress(e,t){var n,r,i,s;if(t){const a=null===(r=null===(n=t.initializationData)||void 0===n?void 0:n.bopis)||void 0===r?void 0:r.enabled,o=null===(s=null===(i=t.initializationData)||void 0===i?void 0:i.bopis)||void 0===s?void 0:s.requiredAddress,d=e.consignments.getConsignments(),c=null==d?void 0:d.every(e=>e.selectedPickupOption);if(a&&c&&\"none\"===o)return}return e.shippingAddress.getShippingAddress()}}var ae;class oe{constructor(e){this._requestSender=e}submitPaymentInstrument(e,t){return n=this,r=void 0,s=function*(){const{providerId:n,currencyCode:r,paymentsUrl:i,shopperId:s,storeHash:a,vaultToken:o}=e,{billingAddress:d,instrument:c,defaultInstrument:u}=t,l=`${i}/stores/${a}/customers/${s}/stored_instruments`,p={headers:{Authorization:o,Accept:\"application/vnd.bc.v1+json\",\"Content-Type\":\"application/vnd.bc.v1+json\"},body:JSON.stringify({instrument:{type:c.type,cardholder_name:c.cardholderName,number:c.number,expiry_month:c.expiryMonth,expiry_year:c.expiryYear,verification_value:c.verificationValue},billing_address:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({email:d.email,address1:d.address1},d.address2&&{address2:d.address2}),{city:d.city,postal_code:d.postalCode,country_code:d.countryCode}),d.company&&{company:d.company}),{first_name:d.firstName,last_name:d.lastName}),d.phone&&{phone:d.phone}),d.stateOrProvinceCode&&{state_or_province_code:d.stateOrProvinceCode}),provider_id:n,default_instrument:u,currency_code:r})};yield this._requestSender.post(l,p)},new((i=void 0)||(i=Promise))(function(e,t){function a(e){try{d(s.next(e))}catch(e){t(e)}}function o(e){try{d(s.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,o)}d((s=s.apply(n,r||[])).next())});var n,r,i,s}}!function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\"}(ae||(ae={}));const de=ae;function ce(e){switch(e){case de.CardCode:return\"cc-csc\";case de.CardExpiry:return\"cc-exp\";case de.CardName:return\"cc-name\";case de.CardNumber:return\"cc-number\";default:return\"\"}}class ue{constructor(e,t,n){this._form=e,this._fieldTypes=t,this._inputAggregator=n,this._handleChange=e=>{const t=e.target;if(!t)throw new Error(\"Unable to get a reference to the target of the change event.\");const n=this._inputAggregator.getInputs().find(e=>this._getAutocompleteElementId(e.getType())===t.id);n&&n.setValue(t.value)},this._inputs=this._fieldTypes.map(e=>this._createInput(e))}attach(){this._inputs.forEach(e=>this._form.appendChild(e))}detach(){this._inputs.forEach(e=>{e.parentElement&&e.parentElement.removeChild(e)})}_createInput(e){const t=document.createElement(\"input\");return t.autocomplete=ce(e),t.id=this._getAutocompleteElementId(e),t.tabIndex=-1,t.style.position=\"absolute\",t.style.opacity=\"0\",t.style.zIndex=\"-1\",t.addEventListener(\"change\",this._handleChange),t}_getAutocompleteElementId(e){return`autocomplete-${u(e)}`}}var le,pe;!function(e){e.AttachRequested=\"HOSTED_FIELD:ATTACH_REQUESTED\",e.SubmitRequested=\"HOSTED_FIELD:SUBMITTED_REQUESTED\",e.ValidateRequested=\"HOSTED_FIELD:VALIDATE_REQUESTED\",e.StoredCardRequested=\"HOSTED_FIELD:STORED_CARD_REQUESTED\"}(le||(le={})),function(e){e.AttachSucceeded=\"HOSTED_INPUT:ATTACH_SUCCEEDED\",e.AttachFailed=\"HOSTED_INPUT:ATTACH_FAILED\",e.BinChanged=\"HOSTED_INPUT:BIN_CHANGED\",e.Blurred=\"HOSTED_INPUT:BLURRED\",e.Changed=\"HOSTED_INPUT:CHANGED\",e.CardTypeChanged=\"HOSTED_INPUT:CARD_TYPE_CHANGED\",e.Entered=\"HOSTED_INPUT:ENTERED\",e.Focused=\"HOSTED_INPUT:FOCUSED\",e.SubmitSucceeded=\"HOSTED_INPUT:SUBMIT_SUCCEEDED\",e.SubmitFailed=\"HOSTED_INPUT:SUBMIT_FAILED\",e.Validated=\"HOSTED_INPUT:VALIDATED\",e.StoredCardSucceeded=\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",e.StoredCardFailed=\"HOSTED_INPUT:STORED_CARD_FAILED\"}(pe||(pe={}));class me{constructor(e,t,n,r,i,s,a,o,d,c,u,l,p){this._type=e,this._form=t,this._placeholder=n,this._accessibilityLabel=r,this._autocomplete=i,this._styles=s,this._fontUrls=a,this._eventListener=o,this._eventPoster=d,this._inputAggregator=c,this._inputValidator=u,this._paymentHandler=l,this._storedCardHandler=p,this._isTouched=!1,this._handleInput=e=>{const t=e.target;this._processChange(t.value)},this._handleBlur=()=>{this._applyStyles(this._styles.default),this._validateForm(),this._eventPoster.post({type:pe.Blurred,payload:{fieldType:this._type}})},this._handleFocus=()=>{this._applyStyles(this._styles.focus),this._eventPoster.post({type:pe.Focused,payload:{fieldType:this._type}})},this._handleValidate=()=>{this._validateForm()},this._handleSubmit=e=>{e.preventDefault(),this._eventPoster.post({type:pe.Entered,payload:{fieldType:this._type}})},this._forceFocusToInput=()=>{document.activeElement===document.body&&(navigator.userAgent.toLowerCase().indexOf(\"safari\")>-1?\"\"===this._input.value&&(this._input.setAttribute(\"value\",\" \"),this._input.setSelectionRange(0,1),this._input.setAttribute(\"value\",\"\")):this._input.focus())},this._input=document.createElement(\"input\"),this._input.addEventListener(\"input\",this._handleInput),this._input.addEventListener(\"blur\",this._handleBlur),this._input.addEventListener(\"focus\",this._handleFocus),this._eventListener.addListener(le.ValidateRequested,this._handleValidate),this._eventListener.addListener(le.SubmitRequested,this._paymentHandler.handle),this._eventListener.addListener(le.StoredCardRequested,this._storedCardHandler.handle),this._configureInput()}getType(){return this._type}getValue(){return this._input.value}setValue(e){this._processChange(e)}isTouched(){return this._isTouched}attach(){this._form.appendChild(this._input),this._form.addEventListener(\"submit\",this._handleSubmit),this._loadFonts(),this._eventPoster.setTarget(window.parent),this._eventListener.listen(),window.addEventListener(\"focus\",this._forceFocusToInput),window.hostedInput=this,this._eventPoster.post({type:pe.AttachSucceeded})}detach(){this._input.parentElement&&this._input.parentElement.removeChild(this._input),this._form.removeEventListener(\"submit\",this._handleSubmit),this._unloadFonts(),window.removeEventListener(\"focus\",this._forceFocusToInput),this._eventListener.stopListen()}_formatValue(e){this._input.value=e}_notifyChange(e){this._eventPoster.post({type:pe.Changed,payload:{fieldType:this._type}})}_configureInput(){switch(this._input.style.backgroundColor=\"transparent\",this._input.style.border=\"0\",this._input.style.display=\"block\",this._input.style.height=\"100%\",this._input.style.margin=\"0\",this._input.style.outline=\"none\",this._input.style.padding=\"0\",this._input.style.width=\"100%\",this._input.id=u(this._type),this._input.placeholder=this._placeholder,this._input.autocomplete=this._autocomplete,this._input.setAttribute(\"aria-label\",this._accessibilityLabel),this._applyStyles(this._styles.default),this._input.id){case\"card-code\":case\"card-expiry\":case\"card-number\":this._input.type=\"text\",this._input.inputMode=\"numeric\",this._input.pattern=\"[0-9]*\";break;case\"card-name\":this._input.type=\"text\",this._input.inputMode=\"text\"}}_applyStyles(e={}){const t={color:e.color,fontFamily:e.fontFamily,fontSize:e.fontSize,fontWeight:e.fontWeight};Object.keys(t).forEach(e=>{t[e]&&(this._input.style[e]=t[e]||\"\")})}_loadFonts(){this._fontLinks||(this._fontLinks=this._fontUrls.filter(e=>\"fonts.googleapis.com\"===T(e).hostname).filter(e=>!document.querySelector(`link[href='${e}'][rel='stylesheet']`)).map(e=>{const t=document.createElement(\"link\");return t.rel=\"stylesheet\",t.href=e,document.head.appendChild(t),t}))}_unloadFonts(){this._fontLinks&&(this._fontLinks.forEach(e=>{e.parentElement&&e.parentElement.removeChild(e)}),this._fontLinks=void 0)}_validateForm(){return e=this,t=void 0,r=function*(){const e=this._inputAggregator.getInputValues(),t=yield this._inputValidator.validate(e);t.isValid?this._applyStyles(this._styles.default):this._applyStyles(this._styles.error),this._eventPoster.post({type:pe.Validated,payload:t})},new((n=void 0)||(n=Promise))(function(i,s){function a(e){try{d(r.next(e))}catch(e){s(e)}}function o(e){try{d(r.throw(e))}catch(e){s(e)}}function d(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,o)}d((r=r.apply(e,t||[])).next())});var e,t,n,r}_processChange(e){e!==this._previousValue&&(this._isTouched=!0,this._formatValue(e),this._validateForm(),this._notifyChange(e),this._previousValue=e)}}class he extends me{constructor(e,t,n,r,i,s,a,o,d,c,u,l,p){super(de.CardExpiry,e,t,n,r,i,s,a,o,d,c,u,l),this._formatter=p}_formatValue(e){this._input.value=this._formatter.format(e)}}class ge extends me{constructor(e,t,n,r,i,s,a,o,d,c,u,l,p,m,h){super(e,t,n,r,i,s,a,o,d,c,u,l,p),this._autocompleteFieldset=m,this._formatter=h}attach(){super.attach(),this._autocompleteFieldset.attach()}_notifyChange(e){const t=E(e).card,n=this._previousValue&&E(this._previousValue).card;c(n,\"type\")!==c(t,\"type\")&&this._eventPoster.post({type:pe.CardTypeChanged,payload:{cardType:t?t.type:void 0}});const r=this._formatter.unformat(e),i=this._previousValue?this._formatter.unformat(this._previousValue):\"\",s=r.length>=6&&E(r).isPotentiallyValid?r.substr(0,6):\"\";s!==(i.length>=6?i.substr(0,6):\"\")&&this._eventPoster.post({type:pe.BinChanged,payload:{bin:s}})}_formatValue(e){const t=this._input.selectionEnd,n=this._formatter.format(e);t===e.length&&e.length<n.length?this._input.setSelectionRange(n.length,n.length):this._input.setSelectionRange(t||0,t||0),this._input.value=n}}class ye{constructor(e){this._parentWindow=e}getInputs(e){return Array.prototype.slice.call(this._parentWindow.frames).reduce((t,n)=>{try{const r=n.hostedInput;return!r||e&&!e(r)?t:[...t,r]}catch(e){if(e instanceof DOMException)return t;if(e instanceof Error&&\"Permission denied\"===e.message)return t;throw e}},[])}getInputValues(e){return this.getInputs(e).reduce((e,t)=>Object.assign(Object.assign({},e),{[t.getType()]:t.getValue()}),{})}}class _e extends P{constructor(e){super([\"Unable to proceed due to invalid user input values\",...d(f(e),e=>p(e,({message:e})=>e))].join(\". \")),this.errors=e,this.name=\"InvalidHostedFormValueError\",this.type=\"invalid_hosted_form_value\"}}class fe{constructor(e,t,n,r,i,s){this._inputAggregator=e,this._inputValidator=t,this._inputStorage=n,this._eventPoster=r,this._paymentRequestSender=i,this._paymentRequestTransformer=s,this.handle=({payload:{data:e}})=>{return t=this,n=void 0,i=function*(){const t=this._inputAggregator.getInputValues(),n=yield this._inputValidator.validate(t);if(this._eventPoster.post({type:pe.Validated,payload:n}),!n.isValid){const e=new _e(n.errors);return this._eventPoster.post({type:pe.SubmitFailed,payload:{error:{code:y(e.name),message:e.message}}})}try{const n=yield this._paymentRequestSender.submitPayment(this._paymentRequestTransformer.transformWithHostedFormData(t,e,this._inputStorage.getNonce()||\"\"));this._eventPoster.post({type:pe.SubmitSucceeded,payload:{response:n}})}catch(e){this._isPaymentErrorResponse(e)?this._eventPoster.post({type:pe.SubmitFailed,payload:{error:e.body.errors[0],response:e}}):this._isErrorResponse(e)&&this._eventPoster.post({type:pe.SubmitFailed,payload:{error:{code:y(e.name),message:e.message}}})}},new((r=void 0)||(r=Promise))(function(e,s){function a(e){try{d(i.next(e))}catch(e){s(e)}}function o(e){try{d(i.throw(e))}catch(e){s(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,o)}d((i=i.apply(t,n||[])).next())});var t,n,r,i}}_isPaymentErrorResponse(e){const{body:{errors:t=[]}={}}=e||{};return\"string\"==typeof(t[0]&&t[0].code)&&\"string\"==typeof(t[0]&&t[0].message)}_isErrorResponse(e){return\"object\"==typeof e&&null!==e&&(\"name\"in e&&\"string\"==typeof e.name||!(\"name\"in e))&&(\"message\"in e&&\"string\"==typeof e.message||!(\"message\"in e))}}class be{constructor(e,t,n,r){this._inputAggregator=e,this._inputValidator=t,this._eventPoster=n,this._storedCardRequestSender=r,this.handle=e=>{return t=this,n=void 0,i=function*(){var t;const{payload:{data:n,fields:r}}=e,i=this._inputAggregator.getInputValues(),s=yield this._inputValidator.validate(i);if(this._eventPoster.post({type:pe.Validated,payload:s}),!s.isValid)return this._eventPoster.post({type:pe.StoredCardFailed});const{defaultInstrument:a}=r,o=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]])}return n}(r,[\"defaultInstrument\"]),[d,c]=i.cardExpiry?i.cardExpiry.split(\"/\"):[];try{yield this._storedCardRequestSender.submitPaymentInstrument(n,{billingAddress:o,instrument:{type:\"card\",cardholderName:i.cardName||\"\",number:i.cardNumber?i.cardNumber.replace(/ /g,\"\"):\"\",expiryMonth:Number(d.trim()),expiryYear:Number(`20${c.trim()}`),verificationValue:null!==(t=i.cardCode)&&void 0!==t?t:\"\"},defaultInstrument:a}),this._eventPoster.post({type:pe.StoredCardSucceeded})}catch(e){this._eventPoster.post({type:pe.StoredCardFailed})}},new((r=void 0)||(r=Promise))(function(e,s){function a(e){try{d(i.next(e))}catch(e){s(e)}}function o(e){try{d(i.throw(e))}catch(e){s(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,o)}d((i=i.apply(t,n||[])).next())});var t,n,r,i}}}class Ce{constructor(e){this._cardInstrument=e,this._completeSchema={cardCode:this._getCardCodeSchema(),cardCodeVerification:this._getCardCodeVerificationSchema(),cardExpiry:this._getCardExpirySchema(),cardName:this._getCardNameSchema(),cardNumber:this._getCardNumberSchema(),cardNumberVerification:this._getCardNumberVerificationSchema()},this._configureCardValidator()}validate(e){return t=this,n=void 0,i=function*(){const t={},n={errors:{},isValid:!0};let r;for(r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=this._completeSchema[r],n.errors[r]=[]);try{return yield O(t).validate(e,{abortEarly:!1}),n}catch(e){if(this._isValidationErrorType(e))throw e;return{errors:Object.keys(n.errors).reduce((t,n)=>Object.assign(Object.assign({},t),{[n]:e.inner.filter(e=>e.path===n).map(e=>({fieldType:e.path,message:e.errors.join(\" \"),type:e.type}))}),{}),isValid:!1}}},new((r=void 0)||(r=Promise))(function(e,s){function a(e){try{d(i.next(e))}catch(e){s(e)}}function o(e){try{d(i.throw(e))}catch(e){s(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,o)}d((i=i.apply(t,n||[])).next())});var t,n,r,i}_configureCardValidator(){const e=b.getTypeInfo(\"discover\"),t=b.getTypeInfo(\"jcb\"),n=b.getTypeInfo(\"visa\");b.updateCard(\"visa\",{lengths:[13,...n.lengths||[]]}),b.updateCard(\"discover\",{patterns:[...e.patterns||[],[810,817]]}),b.addCard({niceType:\"Mada\",type:\"mada\",patterns:[400861,401757,407197,407395,409201,410685,412565,417633,419593,422817,422818,422819,428331,428671,428672,428673,431361,432328,434107,439954,440533,440647,440795,445564,446393,446404,446672,455036,455708,457865,458456,462220,468540,468541,468542,468543,483010,483011,483012,484783,486094,486095,486096,489317,489318,489319,493428,504300,506968,508160,513213,520058,521076,524130,524514,529415,529741,530060,530906,531095,531196,532013,535825,535989,536023,537767,539931,543085,543357,549760,554180,557606,558848,585265,588845,588846,588847,588848,588849,588850,588851,588982,588983,589005,589206,604906,605141,636120,968201,968202,968203,968204,968205,968206,968207,968208,968209,968210,968211],gaps:[4,8,12],lengths:[16,18,19],code:{name:\"CVV\",size:3}}),b.updateCard(\"jcb\",{patterns:[...t.patterns||[],3088,3337,3338]})}_getCardCodeSchema(){return I().required(\"CVV is required\").test({message:\"CVV must be valid\",name:\"invalid_card_code\",test(e){const{card:t}=E(this.parent.cardNumber||\"\");return C(e,t&&t.code?t.code.size:void 0).isValid}})}_getCardCodeVerificationSchema(){return I().required(\"CVV is required\").test({message:\"CVV must be valid\",name:\"invalid_card_code\",test:(e=\"\")=>{const t=this._cardInstrument&&this._mapFromInstrumentCardType(this._cardInstrument.brand),n=t&&b.getTypeInfo(t);return C(e,n&&n.code?n.code.size:void 0).isValid}})}_getCardExpirySchema(){return I().required(\"Expiration date is required\").test({message:\"Expiration date must be a valid future date in MM / YY format\",name:\"invalid_card_expiry\",test:e=>v(e).isValid})}_getCardNameSchema(){return I().max(200).required(\"Full name is required\").test({message:\"Credit card name must be valid\",name:\"invalid_card_name\",test:e=>{const t=e.replace(/\\s/g,\"\").match(/[0-9]+/g);if(!(null==t?void 0:t.length))return!0;for(const e of t)if(E(e).isValid)return!1;return!0}})}_getCardNumberSchema(){return I().required(\"Credit card number is required\").test({message:\"Credit card number must be valid\",name:\"invalid_card_number\",test:e=>E(e).isValid})}_getCardNumberVerificationSchema(){return I().required(\"Credit card number is required\").test({message:\"Credit card number must be valid\",name:\"invalid_card_number\",test:(e=\"\")=>E(e).isValid}).test({message:\"The card number entered does not match the card stored in your account\",name:\"mismatched_card_number\",test:(e=\"\")=>!!this._cardInstrument&&e.slice(-this._cardInstrument.last4.length)===this._cardInstrument.last4})}_mapFromInstrumentCardType(e){switch(e){case\"amex\":case\"american_express\":return\"american-express\";case\"diners\":return\"diners-club\";default:return e}}_isValidationErrorType(e){return\"name\"in e&&\"ValidationError\"!==e.name}}class ve{constructor(e){this._parentOrigin=e}create(e,t,n={},r=[],i=\"\",s=function(e){switch(e){case de.CardCode:case de.CardCodeVerification:return\"CVC\";case de.CardExpiry:return\"Expiration\";case de.CardName:return\"Name on card\";case de.CardNumber:case de.CardNumberVerification:return\"Credit card number\"}}(t),a){const o=ce(t);return t===de.CardNumber?this._createNumberInput(t,e,n,r,i,s,o):t===de.CardNumberVerification?this._createNumberInput(t,e,n,r,i,s,o,a):t===de.CardExpiry?this._createExpiryInput(e,n,r,i,s,o):t===de.CardCodeVerification?this._createInput(t,e,n,r,i,s,o,a):this._createInput(t,e,n,r,i,s,o)}normalizeParentOrigin(e){this._parentOrigin!==e&&(this._parentOrigin!==S(T(e)).origin&&e!==S(T(this._parentOrigin)).origin||(this._parentOrigin=e))}getParentOrigin(){return this._parentOrigin}_createExpiryInput(e,t,n,r,i=\"\",s=\"\"){return new he(e,r,i,s,t,n,new N(this._parentOrigin),new L(this._parentOrigin,window.parent),new ye(window.parent),new Ce,this._createPaymentHandler(),this._createStoredCardHandler(),new Z)}_createNumberInput(e,t,n,r,i,s=\"\",a=\"\",o){return new ge(e,t,i,s,a,n,r,new N(this._parentOrigin),new L(this._parentOrigin,window.parent),new ye(window.parent),new Ce(o),this._createPaymentHandler(o),this._createStoredCardHandler(o),new ue(t,[de.CardCode,de.CardExpiry,de.CardName],new ye(window.parent)),new J)}_createInput(e,t,n,r,i,s=\"\",a=\"\",o){return new me(e,t,i,s,a,n,r,new N(this._parentOrigin),new L(this._parentOrigin,window.parent),new ye(window.parent),new Ce(o),this._createPaymentHandler(o),this._createStoredCardHandler(o))}_createPaymentHandler(t){return new fe(new ye(window.parent),new Ce(t),V(),new L(this._parentOrigin,window.parent),new R(e()),new se)}_createStoredCardHandler(e){return new be(new ye(window.parent),new Ce(e),new L(this._parentOrigin,window.parent),new oe(t()))}}class Ee extends P{constructor(e){super(e||\"Unable to proceed due to invalid configuration provided for the hosted payment form.\"),this.name=\"InvalidHostedFormConfigError\",this.type=\"invalid_hosted_form_config\"}}class Oe{constructor(e,t,n){this._factory=e,this._storage=t,this._eventListener=n}initialize(e,t){t&&this._storage.setNonce(t);const r=this._createFormContainer(e);return this._resetPageStyles(e),this._eventListener.listen(),n(this._eventListener,le.AttachRequested).pipe(i(({payload:e})=>{const{accessibilityLabel:t,cardInstrument:n,fontUrls:i,placeholder:s,styles:a,origin:o,type:d}=e;o&&this._factory.normalizeParentOrigin(o);const c=this._factory.create(r,d,a,i,s,t,n);return c.attach(),c}),s(1)).toPromise()}_resetPageStyles(e){[document.querySelector(\"html\"),document.querySelector(\"body\"),document.getElementById(e)].forEach(e=>{e&&(e.style.height=\"100%\",e.style.width=\"100%\",e.style.overflow=\"hidden\",e.style.padding=\"0\",e.style.margin=\"0\")})}_createFormContainer(e){const t=document.getElementById(e);if(!t)throw new Ee(\"Unable to proceed because the provided container ID is not valid.\");const n=document.createElement(\"form\"),r=document.createElement(\"button\");return n.noValidate=!0,n.style.height=\"100%\",n.style.width=\"100%\",r.style.display=\"none\",t.appendChild(n),n.appendChild(r),n}}function Ie(e){const{containerId:t,nonce:n,parentOrigin:r}=e;return new Oe(new ve(r),V(),new N(r)).initialize(t,n)}const we=new L(\"*\",window.parent);function Pe(e){we.post({type:pe.AttachFailed,payload:{error:e}})}export{Ie as initializeHostedInput,Pe as notifyInitializeError};\n//# sourceMappingURL=hosted-form.js.map"
  },
  {
    "path": "dist/esm/integrations/adyen.js",
    "content": "import{getScriptLoader as t,getStylesheetLoader as e}from\"@bigcommerce/script-loader\";import{some as n}from\"lodash\";class i extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class a extends i{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var o,r,s,d,c,l,p,h;class u{constructor(t,e,n=window){this._scriptLoader=t,this._stylesheetLoader=e,this._window=n}load(t){var e,n,i,o,r,s;return i=this,o=void 0,s=function*(){if(yield Promise.all([this._stylesheetLoader.loadStylesheet(`https://checkoutshopper-${null!==(e=t.environment)&&void 0!==e?e:\"\"}.adyen.com/checkoutshopper/sdk/3.10.1/adyen.css`,{prepend:!1,attributes:{integrity:\"sha384-8ofgICZZ/k5cC5N7xegqFZOA73H9RQ7H13439JfAZW8Gj3qjuKL2isaTD3GMIhDE\",crossorigin:\"anonymous\"}}),this._scriptLoader.loadScript(`https://checkoutshopper-${null!==(n=t.environment)&&void 0!==n?n:\"\"}.adyen.com/checkoutshopper/sdk/3.10.1/adyen.js`,{async:!0,attributes:{integrity:\"sha384-wG2z9zSQo61EIvyXmiFCo+zB3y0ZB4hsrXVcANmpP8HLthjoQJQPBh7tZKJSV8jA\",crossorigin:\"anonymous\"}})]),!this._window.AdyenCheckout)throw new a;return new this._window.AdyenCheckout(t)},new((r=void 0)||(r=Promise))(function(t,e){function n(t){try{d(s.next(t))}catch(t){e(t)}}function a(t){try{d(s.throw(t))}catch(t){e(t)}}function d(e){var i;e.done?t(e.value):(i=e.value,i instanceof r?i:new r(function(t){t(i)})).then(n,a)}d((s=s.apply(i,o||[])).next())})}}function y(t,e){return Object.assign(t,{resolveIds:e})}function m(t){return\"object\"==typeof t&&\"string\"==typeof t.data.paymentMethod.encryptedSecurityCode||\"string\"==typeof t.data.paymentMethod.encryptedExpiryMonth}!function(t){t.ThreeDS2Fingerprint=\"threeDS2Fingerprint\",t.ThreeDS2=\"threeDS2\",t.Redirect=\"redirect\",t.QRCode=\"qrCode\",t.Voucher=\"voucher\",t.Sdk=\"sdk\"}(o||(o={})),function(t){t.ThreeDS2Fingerprint=\"threeDS2Fingerprint\",t.ThreeDS2Challenge=\"threeDS2Challenge\",t.Redirect=\"redirect\",t.QRCode=\"qrCode\",t.Voucher=\"voucher\"}(r||(r={})),function(t){t.SecuredFields=\"securedfields\"}(s||(s={})),function(t){t.ACH=\"ach\",t.AliPay=\"alipay\",t.Bancontact=\"bcmc\",t.CreditCard=\"scheme\",t.Klarna=\"klarna\",t.KlarnaPayNow=\"klarna_paynow\",t.KlarnaAccount=\"klarna_account\",t.IDEAL=\"ideal\",t.GiroPay=\"giropay\",t.GooglePay=\"paywithgoogle\",t.SEPA=\"sepadirectdebit\",t.Sofort=\"directEbanking\",t.Vipps=\"vipps\",t.WeChatPayQR=\"wechatpayQR\"}(d||(d={})),function(t){t.POST=\"POST\"}(c||(c={})),function(t){t.ChallengeShopper=\"ChallengeShopper\",t.Error=\"Error\",t.IdentifyShopper=\"IdentifyShopper\"}(l||(l={})),function(t){t.CardNumber=\"encryptedCardNumber\",t.SecurityCode=\"encryptedSecurityCode\",t.ExpiryDate=\"encryptedExpiryDate\"}(p||(p={}));class g extends i{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class f extends g{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(h||(h={}));class v extends i{constructor(t){super(function(t){switch(t){case h.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case h.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case h.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case h.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}function _(t){return Boolean(t.instrumentId)}function b(){const{navigator:t}=window;let e;return e=t.language?t.language:t.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof t.javaEnabled&&t.javaEnabled(),language:e,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}class C extends i{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class w extends i{constructor(t){super(t||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}const S=t=>\"object\"==typeof t&&null!==t&&\"body\"in t;class O extends i{constructor(t,e){super(e||\"Unable to proceed because the payment form contains invalid data.\"),this.details=t,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}var I=function(t,e,n,i){return new(n||(n=Promise))(function(a,o){function r(t){try{d(i.next(t))}catch(t){o(t)}}function s(t){try{d(i.throw(t))}catch(t){o(t)}}function d(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(r,s)}d((i=i.apply(t,e||[])).next())})};class P{constructor(t,e){this._paymentIntegrationService=t,this._scriptLoader=e}initialize(t){return I(this,void 0,void 0,function*(){const{adyenv2:e}=t;if(!e)throw new g('Unable to initialize payment because \"options.adyenv2\" argument is not provided.');this._paymentInitializeOptions=e;const n=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t.methodId),{originKey:i,clientKey:a,environment:o,paymentMethodsResponse:r}=n.initializationData||{},s={key:\"\",value:\"\"};return i?(s.key=\"originKey\",s.value=i):(s.key=\"clientKey\",s.value=a||\"\"),this._adyenClient=yield this._scriptLoader.load({environment:o,locale:this._paymentIntegrationService.getState().getLocale(),[s.key]:s.value,paymentMethodsResponse:r,translations:{es:{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-AR\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-ES\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-MX\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CL\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CO\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-PE\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"}}}),this._paymentComponent=yield this._mountPaymentComponent(n),n.method!==d.CreditCard&&n.method!==d.Bancontact||(this._cardVerificationComponent=yield this._mountCardVerificationComponent()),Promise.resolve()})}execute(t,e){return I(this,void 0,void 0,function*(){const{payment:n}=t,i=function(t,e){var n={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var a=0;for(i=Object.getOwnPropertySymbols(t);a<i.length;a++)e.indexOf(i[a])<0&&Object.prototype.propertyIsEnumerable.call(t,i[a])&&(n[i[a]]=t[i[a]])}return n}(t,[\"payment\"]),a=n&&n.paymentData,o=a&&a.shouldSaveInstrument,r=a&&a.shouldSetAsDefaultInstrument;if(!n)return Promise.reject(new f([\"payment\"]));this._validateCardData(),yield this._paymentIntegrationService.submitOrder(i,e);const s=this._componentState;if(!s)throw new v(h.PaymentNotInitialized);if(a&&_(a)){let t={};if(m(s)){const{encryptedCardNumber:e,encryptedSecurityCode:n,encryptedExpiryMonth:i,encryptedExpiryYear:a}=s.data.paymentMethod;t={credit_card_number_confirmation:e,expiry_month:i,expiry_year:a,verification_value:n}}if(m(s)||-1!==[\"ideal\",\"sepadirectdebit\",\"directEbanking\",\"giropay\"].indexOf(s.data.paymentMethod.type))try{return void(yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:{formattedPayload:{bigpay_token:Object.assign(Object.assign({},t),{token:a.instrumentId}),origin:window.location.origin,browser_info:b(),set_as_default_stored_instrument:r||null}}})))}catch(t){return void(yield this._processAdditionalAction(t,o,r))}}try{yield this._paymentIntegrationService.submitPayment({methodId:n.methodId,paymentData:{formattedPayload:{credit_card_token:{token:JSON.stringify(Object.assign(Object.assign({},s.data.paymentMethod),{origin:window.location.origin}))},browser_info:b(),vault_payment_instrument:o||null,set_as_default_stored_instrument:r||null}}})}catch(t){yield this._processAdditionalAction(t,o,r)}})}finalize(){return Promise.reject(new C)}deinitialize(){return this._componentState=void 0,this._paymentComponent&&(this._paymentComponent.unmount(),this._paymentComponent=void 0),this._cardVerificationComponent&&(this._cardVerificationComponent.unmount(),this._cardVerificationComponent=void 0),Promise.resolve()}_getAdyenClient(){if(!this._adyenClient)throw new v(h.PaymentNotInitialized);return this._adyenClient}_getPaymentInitializeOptions(){if(!this._paymentInitializeOptions)throw new g('\"options.adyenv2\" argument was not provided during initialization.');return this._paymentInitializeOptions}_getThreeDS2ChallengeWidgetSize(){const{additionalActionOptions:t,threeDS2Options:e}=this._getPaymentInitializeOptions();return t.widgetSize||(null==e?void 0:e.widgetSize)||\"05\"}_handleAction(t){return new Promise((e,n)=>{const{threeDS2ContainerId:i,additionalActionOptions:a}=this._getPaymentInitializeOptions(),{onBeforeLoad:o,containerId:s,onLoad:d,onComplete:c}=a,l=JSON.parse(t.action),p=this._getAdyenClient().createFromAction(l,{onAdditionalDetails:t=>{const n={methodId:l.paymentMethodType,paymentData:{nonce:JSON.stringify(t.data)}};c&&c(),e(n)},size:this._getThreeDS2ChallengeWidgetSize(),onError:t=>n(t)});o&&o(l.type===r.ThreeDS2Challenge||l.type===r.QRCode),p.mount(`#${s||i}`),d&&d(()=>{n(new w),p.unmount()})})}_mapAdyenPlaceholderData(t,e){if(!t)return{};const{firstName:n,lastName:i,address1:a,address2:o,postalCode:r,city:s,stateOrProvinceCode:d,countryCode:c}=t;return{holderName:e?`${n} ${i}`:\"\",billingAddress:{street:a,houseNumberOrName:o,postalCode:r,city:s,stateOrProvince:d,country:c}}}_mountCardVerificationComponent(){const t=this._getPaymentInitializeOptions(),e=this._getAdyenClient();let n;return new Promise((i,a)=>{var o,r,d;if(t.cardVerificationContainerId){n=e.create(s.SecuredFields,Object.assign(Object.assign({},t.options),{styles:Object.assign(Object.assign({},null===(o=t.options)||void 0===o?void 0:o.styles),{placeholder:Object.assign({color:\"transparent\",caretColor:\"#000\"},null===(d=null===(r=t.options)||void 0===r?void 0:r.styles)||void 0===d?void 0:d.placeholder)}),onChange:t=>this._updateComponentState(t),onError:e=>t.validateCardFields(e),onFieldValid:e=>t.validateCardFields(e)}));try{n.mount(`#${t.cardVerificationContainerId}`)}catch(t){a(new v(h.PaymentNotInitialized))}}i(n)})}_mountPaymentComponent(t){let e;const n=this._getPaymentInitializeOptions(),i=this._getAdyenClient();return new Promise((a,o)=>{switch(t.method){case d.CreditCard:case d.ACH:case d.Bancontact:{const a=this._paymentIntegrationService.getState().getBillingAddress(),{prefillCardHolderName:r}=t.initializationData;e=i.create(t.method,Object.assign(Object.assign({},n.options),{onChange:t=>this._updateComponentState(t),data:this._mapAdyenPlaceholderData(a,r)}));try{e.mount(`#${n.containerId}`)}catch(t){o(new v(h.PaymentNotInitialized))}break}case d.IDEAL:case d.SEPA:if(n.hasVaultedInstruments)this._updateComponentState({data:{paymentMethod:{type:t.method}}});else{e=i.create(t.method,Object.assign(Object.assign({},n.options),{onChange:t=>this._updateComponentState(t)}));try{e.mount(`#${n.containerId}`)}catch(t){o(new v(h.PaymentNotInitialized))}}break;case d.AliPay:case d.GiroPay:case d.Sofort:case d.Klarna:case d.KlarnaPayNow:case d.KlarnaAccount:case d.Vipps:case d.WeChatPayQR:this._updateComponentState({data:{paymentMethod:{type:t.method}}})}a(e)})}_processAdditionalAction(t,e,i){return I(this,void 0,void 0,function*(){if(!S(t)||!n(t.body.errors,{code:\"additional_action_required\"}))throw t;const a=yield this._handleAction(t.body.provider_data);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},a),{paymentData:Object.assign(Object.assign({},a.paymentData),{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:i})}))}catch(t){return this._processAdditionalAction(t,e,i)}})}_updateComponentState(t){this._componentState=t}_validateCardData(){var t,e;const n=this._getPaymentInitializeOptions().hasVaultedInstruments?this._cardVerificationComponent:this._paymentComponent;if((null===(t=null==n?void 0:n.componentRef)||void 0===t?void 0:t.showValidation)&&n.state&&(n.componentRef.showValidation(),0===Object.keys(n.state).length||!n.state.isValid&&!n.state.issuer||\"sepadirectdebit\"===(null===(e=n.props)||void 0===e?void 0:e.type)&&n.state.data&&Object.values(n.state.data).some(t=>0===t.toString().trim().length)))throw new O(this._mapCardErrors(n.state.errors))}_mapCardErrors(t={}){const e={};return Object.keys(t).forEach(n=>{e[n]=[{message:t[n],type:n}]}),e}}const j=y(n=>new P(n,new u(t(),e())),[{gateway:\"adyenv2\"}]);class A{constructor(t,e,n=window){this._scriptLoader=t,this._stylesheetLoader=e,this._window=n}load(t){var e,n,i,o,r,s;return i=this,o=void 0,s=function*(){if(yield Promise.all([this._stylesheetLoader.loadStylesheet(`https://checkoutshopper-${null!==(e=t.environment)&&void 0!==e?e:\"\"}.adyen.com/checkoutshopper/sdk/5.71.1/adyen.css`,{prepend:!1,attributes:{integrity:\"sha384-5MvB4RnzvviA3VBT4KYABZ4HXNZG5LRqREEgd41xt/pf/QvKmsj2O9GuNuywRXx9\",crossorigin:\"anonymous\"}}),this._scriptLoader.loadScript(`https://checkoutshopper-${null!==(n=t.environment)&&void 0!==n?n:\"\"}.adyen.com/checkoutshopper/sdk/5.71.1/adyen.js`,{async:!0,attributes:{integrity:\"sha384-yvY2yFNR4WqIjPqP9MzjI+gJimmaJnAvj4rLHKvgJbgFD5fMuf8zIJrFJOW8Lhhf\",crossorigin:\"anonymous\"}})]),!this._window.AdyenCheckout)throw new a;return yield this._window.AdyenCheckout(t)},new((r=void 0)||(r=Promise))(function(t,e){function n(t){try{d(s.next(t))}catch(t){e(t)}}function a(t){try{d(s.throw(t))}catch(t){e(t)}}function d(e){var i;e.done?t(e.value):(i=e.value,i instanceof r?i:new r(function(t){t(i)})).then(n,a)}d((s=s.apply(i,o||[])).next())})}}var z=function(t,e,n,i){return new(n||(n=Promise))(function(a,o){function r(t){try{d(i.next(t))}catch(t){o(t)}}function s(t){try{d(i.throw(t))}catch(t){o(t)}}function d(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(r,s)}d((i=i.apply(t,e||[])).next())})};class D{constructor(t,e){this.paymentIntegrationService=t,this.scriptLoader=e}initialize(t){return z(this,void 0,void 0,function*(){const{adyenv3:e}=t;if(!e)throw new g('Unable to initialize payment because \"options.adyenv3\" argument is not provided.');this.paymentInitializeOptions=e;const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t.methodId),{environment:i,clientKey:a,paymentMethodsResponse:o,installmentOptions:r}=n.initializationData||{};return this.adyenClient=yield this.scriptLoader.load({paymentMethodsConfiguration:Object.assign({klarna:{useKlarnaWidget:!0},klarna_account:{useKlarnaWidget:!0},klarna_paynow:{useKlarnaWidget:!0}},r?{card:{installmentOptions:Object.assign({showInstallmentAmounts:!0},r)}}:{}),environment:i,locale:this._getLocale(),clientKey:a,paymentMethodsResponse:o,showPayButton:!1,translations:{es:{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-AR\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-ES\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-MX\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CL\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-CO\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"},\"es-PE\":{\"creditCard.expiryDateField.title\":\"Fecha de caducidad\"}}}),this.paymentComponent=yield this._mountPaymentComponent(n),n.method!==d.CreditCard&&n.method!==d.Bancontact||(this.cardVerificationComponent=yield this._mountCardVerificationComponent()),Promise.resolve()})}execute(t,e){var n;return z(this,void 0,void 0,function*(){const{payment:i}=t,a=function(t,e){var n={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var a=0;for(i=Object.getOwnPropertySymbols(t);a<i.length;a++)e.indexOf(i[a])<0&&Object.prototype.propertyIsEnumerable.call(t,i[a])&&(n[i[a]]=t[i[a]])}return n}(t,[\"payment\"]);if(!i)throw new f([\"payment\"]);const o=i.paymentData,{shouldSaveInstrument:r,shouldSetAsDefaultInstrument:s}=\"object\"!=typeof(d=o)||null===d||void 0!==d.shouldSaveInstrument&&\"boolean\"!=typeof d.shouldSaveInstrument||void 0!==d.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof d.shouldSetAsDefaultInstrument?{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1}:o;var d;this._validateCardData(),\"klarna\"!==i.methodId&&\"klarna_account\"!==i.methodId&&\"klarna_paynow\"!==i.methodId||null===(n=this.paymentComponent)||void 0===n||n.submit(),yield this.paymentIntegrationService.submitOrder(a,e);const c=this.componentState||{data:{paymentMethod:{type:i.methodId}}};if(o&&_(o)){let t={};if(m(c)){const{encryptedCardNumber:e,encryptedSecurityCode:n,encryptedExpiryMonth:i,encryptedExpiryYear:a}=c.data.paymentMethod;t={credit_card_number_confirmation:e,expiry_month:i,expiry_year:a,verification_value:n}}try{return void(yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},i),{paymentData:{formattedPayload:{bigpay_token:Object.assign(Object.assign({},t),{token:o.instrumentId}),origin:window.location.origin,browser_info:b(),set_as_default_stored_instrument:s||null}}})))}catch(e){return void(yield this._processAdditionalAction(e,r,s,o.instrumentId,t))}}let l=JSON.stringify(Object.assign(Object.assign({},c.data.paymentMethod),{type:i.methodId,origin:window.location.origin}));\"boletobancario\"===i.methodId&&function(t){var e,n;return\"string\"===(\"object\"==typeof t&&typeof t.data.socialSecurityNumber)&&\"string\"==typeof(null===(e=t.data.shopperName)||void 0===e?void 0:e.firstName)&&\"string\"==typeof(null===(n=t.data.shopperName)||void 0===n?void 0:n.lastName)}(c)&&(l=JSON.stringify(Object.assign(Object.assign({socialSecurityNumber:c.data.socialSecurityNumber},c.data.shopperName),{type:i.methodId,origin:window.location.origin})));try{yield this.paymentIntegrationService.submitPayment({methodId:i.methodId,paymentData:{formattedPayload:Object.assign(Object.assign({credit_card_token:{token:l}},m(c)&&c.data.installments?{installments:{value:c.data.installments.value,plan:c.data.installments.plan||\"regular\"}}:{}),{browser_info:b(),vault_payment_instrument:r||null,set_as_default_stored_instrument:s||null})}})}catch(t){yield this._processAdditionalAction(t,r,s)}})}finalize(){return Promise.reject(new C)}deinitialize(){return this.componentState=void 0,this.paymentComponent&&(this.paymentComponent.unmount(),this.paymentComponent=void 0),this.cardVerificationComponent&&(this.cardVerificationComponent.unmount(),this.cardVerificationComponent=void 0),Promise.resolve()}_updateComponentState(t){this.componentState=t}_getLocale(){const t=this.paymentIntegrationService.getState().getLocale();return t&&\"es\"===t.substring(0,2)?\"es\":t}_getAdyenClient(){if(!this.adyenClient)throw new v(h.PaymentNotInitialized);return this.adyenClient}_getPaymentInitializeOptions(){if(!this.paymentInitializeOptions)throw new g('\"options.adyenv3\" argument was not provided during initialization.');return this.paymentInitializeOptions}_handleAction(t){return new Promise((e,n)=>{const{additionalActionOptions:i}=this._getPaymentInitializeOptions(),{onBeforeLoad:a,containerId:r,onLoad:s,onComplete:d,widgetSize:c,onActionHandled:l}=i,p=JSON.parse(t.action),h=this._getAdyenClient().createFromAction(p,{onActionHandled:t=>{l&&\"function\"==typeof l&&\"3DS2Fingerprint\"!==t.componentType&&l()},onAdditionalDetails:t=>{const n={methodId:p.paymentMethodType,paymentData:{nonce:JSON.stringify(t.data)}};d&&\"function\"==typeof d&&d(),e(n)},challengeWindowSize:c||\"05\",onError:t=>n(t)});a&&\"function\"==typeof a&&a(p.type===o.ThreeDS2||p.type===o.QRCode||p.type===o.Sdk),this._mountElement(h,r).then(()=>{s&&\"function\"==typeof s&&s(()=>{n(new w),h.unmount()})}).catch(n)})}_mapAdyenPlaceholderData(t,e){if(!t)return{};const{firstName:n,lastName:i,address1:a,address2:o,postalCode:r,city:s,stateOrProvinceCode:d,countryCode:c}=t;return{holderName:e?`${n} ${i}`:\"\",firstName:e?n:\"\",lastName:e?i:\"\",billingAddress:{street:a,houseNumberOrName:o,postalCode:r,city:s,stateOrProvince:d,country:c}}}_mountCardVerificationComponent(){var t,e,n;return z(this,void 0,void 0,function*(){const i=this._getPaymentInitializeOptions(),a=this._getAdyenClient();if(!i.cardVerificationContainerId)return;const o=a.create(s.SecuredFields,Object.assign(Object.assign({},i.options),{styles:Object.assign(Object.assign({},null===(t=i.options)||void 0===t?void 0:t.styles),{placeholder:Object.assign({color:\"transparent\",caretColor:\"#000\"},null===(n=null===(e=i.options)||void 0===e?void 0:e.styles)||void 0===n?void 0:n.placeholder)}),onChange:t=>this._updateComponentState(t),onError:t=>i.validateCardFields(t),onFieldValid:t=>i.validateCardFields(t)}));try{yield this._mountElement(o,i.cardVerificationContainerId)}catch(t){throw new v(h.PaymentNotInitialized)}return o})}_mountPaymentComponent(t){return z(this,void 0,void 0,function*(){const e=this._getPaymentInitializeOptions(),n=this._getAdyenClient(),i=this.paymentIntegrationService.getState().getBillingAddress(),{prefillCardHolderName:a}=t.initializationData,o=n.create(t.method,Object.assign(Object.assign(Object.assign(Object.assign({},this._isOneyPaymentMethod(t.method)?{visibility:{personalDetails:\"hidden\",billingAddress:\"hidden\",deliveryAddress:\"hidden\"}}:{}),e.options),{showBrandsUnderCardNumber:!1,billingAddressRequired:!1,showEmailAddress:!1,onChange:t=>this._updateComponentState(t),onSubmit:t=>this._updateComponentState(t)}),i?{data:this._mapAdyenPlaceholderData(i,a)}:{}));try{yield this._mountElement(o,e.containerId)}catch(t){throw new v(h.PaymentNotInitialized)}return o})}_isOneyPaymentMethod(t){return t.startsWith(\"facilypay\")}_processAdditionalAction(t,e,i,a,o){return z(this,void 0,void 0,function*(){if(!S(t)||!n(t.body.errors,{code:\"additional_action_required\"}))throw t;const r=yield this._handleAction(t.body.provider_data);try{const t=Object.assign(Object.assign({},r.paymentData),{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:i}),n=i&&!e?{instrumentId:a,formattedPayload:{bigpay_token:Object.assign(Object.assign({},o),{token:a})}}:{};yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:Object.assign(Object.assign({},t),n)}))}catch(t){return this._processAdditionalAction(t,e,i,a,o)}})}_validateCardData(){var t;const e=this._getPaymentInitializeOptions().hasVaultedInstruments?this.cardVerificationComponent:this.paymentComponent;if((null===(t=null==e?void 0:e.componentRef)||void 0===t?void 0:t.showValidation)&&e.state&&(e.componentRef.showValidation(),0===Object.keys(e.state).length||!e.state.isValid))throw new O(this._mapCardErrors(e.state.errors))}_mapCardErrors(t={}){const e={};return Object.keys(t).forEach(n=>{e[n]=[{message:t[n],type:n}]}),e}_mountElement(t,e){return z(this,void 0,void 0,function*(){yield this._waitForMountContainer(e);try{t.mount(`#${e}`)}catch(t){throw new v(h.PaymentNotInitialized)}})}_waitForMountContainer(t){return z(this,void 0,void 0,function*(){const e=Math.ceil(D.mountContainerMaxWaitMs/D.mountContainerPollIntervalMs),n=D.mountContainerPollIntervalMs;let i=0;const a=()=>z(this,void 0,void 0,function*(){if(i===e)throw new v(h.PaymentNotInitialized);document.getElementById(t)||(yield new Promise(t=>{setTimeout(t,n)}),i+=1,yield a())});yield a()})}}D.mountContainerMaxWaitMs=5e3,D.mountContainerPollIntervalMs=50;const N=y(n=>new D(n,new A(t(),e())),[{gateway:\"adyenv3\"}]);export{j as createAdyenV2PaymentStrategy,N as createAdyenV3PaymentStrategy};\n//# sourceMappingURL=adyen.js.map"
  },
  {
    "path": "dist/esm/integrations/affirm.js",
    "content": "var e,t;class i extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(e||(e={}));class n extends i{constructor(t){super(function(t){switch(t){case e.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case e.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case e.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case e.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case e.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case e.MissingCheckoutConfig:case e.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case e.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case e.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case e.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case e.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case e.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case e.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(t||(t={}));class s extends i{constructor(e){super(function(e){switch(e){case t.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case t.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case t.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case t.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class r extends i{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class a extends r{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class o extends i{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class c extends i{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}const d={body:{},headers:{},status:0};class u extends i{constructor(e,{message:t,errors:i}={}){const{body:n,headers:s,status:r}=e||d;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=n,this.headers=s,this.status=r,this.errors=i||[]}}class l extends u{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class m{constructor(e){this._decimalPlaces=e}toInteger(e){return Math.round(e*Math.pow(10,this._decimalPlaces))}}var h,p=function(e,t,i,n){return new(i||(i=Promise))(function(s,r){function a(e){try{c(n.next(e))}catch(e){r(e)}}function o(e){try{c(n.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,o)}c((n=n.apply(e,t||[])).next())})};class g{constructor(e,t){this.paymentIntegrationService=e,this.affirmScriptLoader=t}initialize(t){return p(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadPaymentMethod(t.methodId);const i=this.paymentIntegrationService.getState(),{clientToken:s,config:{testMode:r}}=i.getPaymentMethodOrThrow(t.methodId);if(!s)throw new n(e.MissingPaymentMethod);this.affirm=yield this.affirmScriptLoader.load(s,r)})}execute(e,i){var n;return p(this,void 0,void 0,function*(){const r=null===(n=e.payment)||void 0===n?void 0:n.methodId,{useStoreCredit:o}=e;if(!this.affirm)throw new s(t.PaymentNotInitialized);if(!r)throw new a([\"payment.methodId\"]);yield this.paymentIntegrationService.submitOrder({useStoreCredit:o},i);const c={methodId:r,paymentData:{nonce:(yield this.initializeAffirmCheckout()).checkout_token}};yield this.paymentIntegrationService.submitPayment(c)})}deinitialize(){return this.affirm&&(this.affirm=void 0),Promise.resolve()}finalize(){return Promise.reject(new o)}initializeAffirmCheckout(){var e;return null===(e=this.affirm)||void 0===e||e.checkout(this.getCheckoutInformation()),new Promise((e,t)=>{var i,n;null===(i=this.affirm)||void 0===i||i.checkout.open({onFail:e=>{\"canceled\"===e.reason?t(new c):t(new l)},onSuccess:t=>{e(t)}}),null===(n=this.affirm)||void 0===n||n.ui.error.on(\"close\",()=>{t(new c)})})}getCheckoutInformation(){const t=this.paymentIntegrationService.getState(),i=t.getStoreConfig(),s=t.getConsignments(),r=t.getOrder(),a=t.getCart();if(!i)throw new n(e.MissingCheckoutConfig);if(!r)throw new n(e.MissingCheckout);const o=new m(r.currency.decimalPlaces),c=this.getBillingAddress(),d=this.getShippingAddress(),u=((e,t)=>!!e&&(!!e.lineItems.physicalItems.some(e=>e.isShippingRequired)||!(!t||!e.lineItems.customItems)&&e.lineItems.customItems.length>0))(a,i)&&d?d:c;return{merchant:{user_confirmation_url:i.links.checkoutLink,user_cancel_url:i.links.checkoutLink,user_confirmation_url_action:\"POST\"},shipping:u,billing:c,items:this.getItems(o,r),metadata:{shipping_type:this.getShippingType(s),mode:\"modal\",platform_type:\"BigCommerce\",platform_version:\"\",platform_affirm:\"\"},discounts:this.getDiscounts(o,r),order_id:r.orderId?r.orderId.toString():\"\",shipping_amount:o.toInteger(r.shippingCostTotal),tax_amount:o.toInteger(r.taxTotal),total:o.toInteger(r.orderAmount)}}getShippingType(e){if(!e)return\"\";const t=e[0];return(null==t?void 0:t.selectedShippingOption)?t.selectedShippingOption.type:\"\"}getBillingAddress(){const t=this.paymentIntegrationService.getState().getBillingAddress();if(!t)throw new n(e.MissingBillingAddress);return{name:{first:t.firstName,last:t.lastName,full:`${t.firstName} ${t.lastName}`},address:{line1:t.address1,line2:t.address2,city:t.city,state:t.stateOrProvinceCode,zipcode:t.postalCode,country:t.countryCode},phone_number:t.phone,email:t.email}}getShippingAddress(){const e=this.paymentIntegrationService.getState().getShippingAddress();if(e)return{name:{first:e.firstName,last:e.lastName,full:`${e.firstName} ${e.lastName}`},address:{line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,zipcode:e.postalCode,country:e.countryCode},phone_number:e.phone}}getItems(e,t){const i=[];return t.lineItems.physicalItems.forEach(t=>{i.push({display_name:t.name,sku:t.sku,unit_price:e.toInteger(t.salePrice),qty:t.quantity,item_image_url:t.imageUrl,item_url:t.url,categories:this.getCategories(t.categories)})}),t.lineItems.digitalItems.forEach(t=>{i.push({display_name:t.name,sku:t.sku,unit_price:e.toInteger(t.salePrice),qty:t.quantity,item_image_url:t.imageUrl,item_url:t.url,categories:this.getCategories(t.categories)})}),t.lineItems.giftCertificates.forEach(t=>{i.push({display_name:t.name,sku:\"\",unit_price:e.toInteger(t.amount),qty:1,item_image_url:\"\",item_url:\"\"})}),t.lineItems.customItems&&t.lineItems.customItems.forEach(t=>{i.push({display_name:t.name,sku:t.sku,unit_price:e.toInteger(t.listPrice),qty:t.quantity,item_image_url:\"\",item_url:\"\"})}),i}getDiscounts(e,t){const i={};return t.coupons.forEach(t=>{t.discountedAmount>0&&(i[t.code]={discount_amount:e.toInteger(t.discountedAmount),discount_display_name:t.displayName})}),t.discountAmount>0&&(i.DISCOUNTED_AMOUNT={discount_amount:e.toInteger(t.discountAmount),discount_display_name:\"discount\"}),i}getCategories(e){return e?e.map(e=>e.map(e=>e.name)):[[]]}}class f extends i{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}!function(e){e.PROD=\"//cdn1.affirm.com/js/v2/affirm.js\",e.SANDBOX=\"//cdn1-sandbox.affirm.com/js/v2/affirm.js\"}(h||(h={}));class y{constructor(e=window){this.affirmWindow=e}load(e=\"\",t){const i=t?h.SANDBOX:h.PROD;if(function(e,t,i,n,s,r,a){const o=e[i]||{},c=document.createElement(r),d=document.getElementsByTagName(r)[0],u=function(e,t,i){return function(){e[t]._.push([i,arguments])}};o[n]=u(o,n,\"set\");const l=o[n];o[s]={},o[s]._=[],l._=[],o._=[],o[s][a]=u(o,s,a),o.jsReady=function(){o._.push([a,arguments])};let m=0;for(const e=\"set add save post open empty reset on off trigger ready setProduct\".split(\" \");m<e.length;m++)l[e[m]]=u(o,n,e[m]);let h=0;for(const e=[\"get\",\"token\",\"url\",\"items\"];h<e.length;h++)l[e[h]]=function(){};c.async=!0,c.src=t[r],d.parentNode&&d.parentNode.insertBefore(c,d),delete t[r],l(t),e[i]=o}(window,{public_api_key:e,script:i},\"affirm\",\"checkout\",\"ui\",\"script\",\"ready\"),!this.affirmWindow.affirm)throw new f;return Promise.resolve(this.affirmWindow.affirm)}}const b=(I=e=>new g(e,new y),_=[{id:\"affirm\"}],Object.assign(I,{resolveIds:_}));var I,_;export{b as createAffirmPaymentStrategy};\n//# sourceMappingURL=affirm.js.map"
  },
  {
    "path": "dist/esm/integrations/afterpay.js",
    "content": "import{createScriptLoader as e}from\"@bigcommerce/script-loader\";var t;class n extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(t||(t={}));class i extends n{constructor(e){super(function(e){switch(e){case t.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case t.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case t.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case t.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case t.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case t.MissingCheckoutConfig:case t.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case t.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case t.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case t.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case t.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case t.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case t.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class a extends n{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class r extends a{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class s extends n{constructor(e){super(e||\"The current order could not be finalized successfully\"),this.name=\"OrderFinalizationNotCompletedError\",this.type=\"order_finalization_not_completed\"}}var o;!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(o||(o={}));class c extends n{constructor(e){super(function(e){switch(e){case o.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case o.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case o.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case o.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const d={body:{},headers:{},status:0};class u extends n{constructor(e,{message:t,errors:n}={}){const{body:i,headers:a,status:r}=e||d;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=a,this.status=r,this.errors=n||[]}}var l=function(e,t,n,i){return new(n||(n=Promise))(function(a,r){function s(e){try{c(i.next(e))}catch(e){r(e)}}function o(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,o)}c((i=i.apply(e,t||[])).next())})};class p{constructor(e,t){this._paymentIntegrationService=e,this._afterpayScriptLoader=t}initialize(e){var n;return l(this,void 0,void 0,function*(){const a=this._paymentIntegrationService.getState(),r=a.getPaymentMethod(e.methodId,e.gatewayId),s=(null===(n=a.getCart())||void 0===n?void 0:n.currency.code)||\"\",o=this._mapCurrencyToISO2(s),c=function(e,t,n=!0){var i;return null!==(i=e[\"PI-4789.afterpay_script_use_https\"])&&void 0!==i?i:n}(a.getStoreConfigOrThrow().checkoutSettings.features,0,!1);if(!r)throw new i(t.MissingPaymentMethod);this._afterpaySdk=yield this._afterpayScriptLoader.load(r,o,c)})}deinitialize(){return this._afterpaySdk&&(this._afterpaySdk=void 0),Promise.resolve()}execute(e,t){var n;return l(this,void 0,void 0,function*(){if(!e.payment)throw new r([\"payment.gatewayId\",\"payment.methodId\"]);const{gatewayId:i,methodId:a}=e.payment;if(!i||!a)throw new r([\"payment.gatewayId\",\"payment.methodId\"]);const{useStoreCredit:s}=e;void 0!==s&&(yield this._paymentIntegrationService.applyStoreCredit(s)),yield this._loadPaymentMethod(i,a,t);const o=this._paymentIntegrationService.getState();yield this._paymentIntegrationService.validateCheckout(o.getCheckout(),t);const c=(null===(n=o.getCart())||void 0===n?void 0:n.currency.code)||\"\",d=this._mapCurrencyToISO2(c);return this._redirectToAfterpay(d,o.getPaymentMethod(a,i)),new Promise(()=>{})})}finalize(e){var n,a,r;return l(this,void 0,void 0,function*(){const o=this._paymentIntegrationService.getState(),c=o.getPaymentId(),d=o.getContextConfig();if(!c)throw new i(t.MissingCheckout);if(!(null==d?void 0:d.payment.token))throw new i(t.MissingCheckoutConfig);const u={methodId:c.providerId,paymentData:{nonce:d.payment.token}};yield this._paymentIntegrationService.submitOrder({},e);try{yield this._paymentIntegrationService.submitPayment(u)}catch(e){if(yield this._paymentIntegrationService.forgetCheckout(c.providerId),yield this._paymentIntegrationService.loadPaymentMethods(),(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e))throw new s(null===(r=null===(a=null===(n=e.body)||void 0===n?void 0:n.errors)||void 0===a?void 0:a[0])||void 0===r?void 0:r.message)}})}_redirectToAfterpay(e,t){if(!this._afterpaySdk||!(null==t?void 0:t.clientToken))throw new c(o.PaymentNotInitialized);this._afterpaySdk.initialize({countryCode:e}),this._afterpaySdk.redirect({token:t.clientToken})}_mapCurrencyToISO2(e){return{AUD:\"AU\",NZD:\"NZ\",CAD:\"CA\",USD:\"US\"}[e]||\"AU\"}_loadPaymentMethod(e,t,n){var i;return l(this,void 0,void 0,function*(){try{return yield this._paymentIntegrationService.loadPaymentMethod(e,Object.assign(Object.assign({},n),{params:Object.assign(Object.assign({},null==n?void 0:n.params),{method:t})}))}catch(e){if(e instanceof u&&422===(null===(i=e.body)||void 0===i?void 0:i.status))throw new a(\"Afterpay can't process your payment for this order, please try another payment method\");throw e}})}}class h extends n{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var y,m;!function(e){e.PROD=\"//portal.afterpay.com/afterpay-async.js\",e.SANDBOX=\"//portal.sandbox.afterpay.com/afterpay.js\",e.HTTPS_PROD=\"https://portal.afterpay.com/afterpay-async.js\",e.HTTPS_SANDBOX=\"https://portal.sandbox.afterpay.com/afterpay.js\"}(y||(y={})),function(e){e.PROD=\"//portal.afterpay.com/afterpay-async.js\",e.SANDBOX=\"//portal.sandbox.afterpay.com/afterpay.js\",e.HTTPS_PROD=\"https://portal.afterpay.com/afterpay-async.js\",e.HTTPS_SANDBOX=\"https://portal.sandbox.afterpay.com/afterpay.js\"}(m||(m={}));class g{constructor(e){this._scriptLoader=e}load(e,t,n=!1){return i=this,a=void 0,s=function*(){const i=e.config.testMode||!1,a=this._getScriptURI(t,i,n);return this._scriptLoader.loadScript(a).then(()=>{if(!function(e){return\"AfterPay\"in e}(window))throw new h;return window.AfterPay})},new((r=void 0)||(r=Promise))(function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function o(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof r?i:new r(function(e){e(i)})).then(n,o)}c((s=s.apply(i,a||[])).next())});var i,a,r,s}_getScriptURI(e,t,n=!1){return\"US\"===e?n?t?m.HTTPS_SANDBOX:m.HTTPS_PROD:t?m.SANDBOX:m.PROD:n?t?y.HTTPS_SANDBOX:y.HTTPS_PROD:t?y.SANDBOX:y.PROD}}const f=(b=t=>new p(t,new g(e())),v=[{gateway:\"afterpay\"},{id:\"afterpay\"}],Object.assign(b,{resolveIds:v}));var b,v;export{f as createAfterpayPaymentStrategy};\n//# sourceMappingURL=afterpay.js.map"
  },
  {
    "path": "dist/esm/integrations/amazon-pay.js",
    "content": "import{getScriptLoader as t}from\"@bigcommerce/script-loader\";import{noop as e,reduce as n}from\"lodash\";import{createRequestSender as i}from\"@bigcommerce/request-sender\";var o,a;class r extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(o||(o={}));class s extends r{constructor(t){super(function(t){switch(t){case o.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case o.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case o.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case o.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case o.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case o.MissingCheckoutConfig:case o.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case o.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case o.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case o.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case o.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case o.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case o.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function c(t){return e=t.lineItems.physicalItems.filter(t=>!t.addedByPromotion),n(e,(t,e)=>t+e.quantity,0);var e}function u(t,e){if(null==t)throw e?e():new Error(\"An unexpected error has occurred.\");return t}!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(a||(a={}));class d extends r{constructor(t){super(function(t){switch(t){case a.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case a.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case a.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case a.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const h={de:\"eu\",jp:\"fe\",uk:\"eu\",us:\"na\"};var l,y,m,p,g,P;!function(t){t.en_US=\"en_US\",t.en_GB=\"en_GB\",t.de_DE=\"de_DE\",t.fr_FR=\"fr_FR\",t.it_IT=\"it_IT\",t.es_ES=\"es_ES\",t.ja_JP=\"ja_JP\"}(l||(l={})),function(t){t.Home=\"Home\",t.Product=\"Product\",t.Cart=\"Cart\",t.Checkout=\"Checkout\",t.Other=\"Other\"}(y||(y={})),function(t){t.USD=\"USD\",t.EUR=\"EUR\",t.GBP=\"GBP\",t.JPY=\"JPY\"}(m||(m={})),function(t){t.PayAndShip=\"PayAndShip\",t.PayOnly=\"PayOnly\"}(p||(p={})),function(t){t.Gold=\"Gold\",t.LightGray=\"LightGray\",t.DarkGray=\"DarkGray\"}(g||(g={})),function(t){t.C0001=\"C0001\"}(P||(P={}));var f=function(t,e,n,i){return new(n||(n=Promise))(function(o,a){function r(t){try{c(i.next(t))}catch(t){a(t)}}function s(t){try{c(i.throw(t))}catch(t){a(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(r,s)}c((i=i.apply(t,e||[])).next())})};class b{constructor(t){this.amazonPayV2ScriptLoader=t}initialize(t){return f(this,void 0,void 0,function*(){this.amazonPayV2SDK=yield this.amazonPayV2ScriptLoader.load(t),this.buttonParentContainer=this.buttonParentContainer||this.createAmazonPayButtonParentContainer()})}deinitialize(){var t;return this.amazonPayV2Button=void 0,null===(t=this.buttonParentContainer)||void 0===t||t.remove(),this.buttonParentContainer=void 0,this.amazonPayV2SDK=void 0,Promise.resolve()}bindButton(t,e,n){this.getAmazonPayV2SDK().Pay.bindChangeAction(`#${t}`,{amazonCheckoutSessionId:e,changeAction:n})}createButton(t,e){this.amazonPayV2Button=this.getAmazonPayV2SDK().Pay.renderButton(`#${t}`,e)}prepareCheckout(t){const e=this.prepareRequestConfig(t);this.getAmazonPayV2Button().onClick(()=>{this.getAmazonPayV2Button().initCheckout(e)})}prepareCheckoutWithCreationRequestConfig(t){this.getAmazonPayV2Button().onClick(()=>f(this,void 0,void 0,function*(){const e=yield t();if(e){const t=this.prepareRequestConfig(e.createCheckoutSessionConfig,e.estimatedOrderAmount,e.productType);this.getAmazonPayV2Button().initCheckout(t)}}))}signout(){return f(this,void 0,void 0,function*(){return this.amazonPayV2SDK&&this.amazonPayV2SDK.Pay.signout(),Promise.resolve()})}renderAmazonPayButton({buttonColor:t,checkoutState:e,containerId:n,decoupleCheckoutInitiation:i=!1,methodId:o,options:a,placement:r,isButtonMicroTextDisabled:s=!1}){const c=document.querySelector(`#${n}`);if(!c)return;const{id:u}=c.appendChild(this.getButtonParentContainer());a&&s&&(a.design=P.C0001);const d=null!=a?a:this.getAmazonPayV2ButtonOptions(e,o,r,i,t);return this.createButton(u,d),this.getButtonParentContainer()}updateBuyNowFlowFlag(t){this.isBuyNowFlow=Boolean(t)}isPh4Enabled(t,e){const n=!!t[\"PROJECT-3483.amazon_pay_ph4\"],i=!!t[\"INT-6885.amazon_pay_ph4_us_only\"];return n&&i?\"US\"===e:n}prepareRequestConfig(t,e,n){const{publicKeyId:i}=t,o=function(t,e){var n={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(i=Object.getOwnPropertySymbols(t);o<i.length;o++)e.indexOf(i[o])<0&&Object.prototype.propertyIsEnumerable.call(t,i[o])&&(n[i[o]]=t[i[o]])}return n}(t,[\"publicKeyId\"]);return Object.assign(Object.assign({createCheckoutSessionConfig:this.isEnvironmentSpecific(i)?o:t},e&&{estimatedOrderAmount:e}),n&&{productType:n})}createAmazonPayButtonParentContainer(){const t=Math.random().toString(16).substr(-4),e=document.createElement(\"div\");return e.id=`amazonpay_button_parent_container_${t}`,e}getAmazonPayV2ButtonOptions(t,e,n,i=!1,a=g.Gold){var r;const{getCart:u,getCheckout:d,getStoreConfigOrThrow:h,getPaymentMethodOrThrow:l}=this.getCheckoutState(t),{config:{merchantId:y,testMode:m},initializationData:f}=l(e);if(!f)throw new s(o.MissingPaymentMethod);const{checkoutLanguage:b,checkoutSessionMethod:v,createCheckoutSessionConfig:C,extractAmazonCheckoutSessionId:z,ledgerCurrency:w,publicKeyId:S=\"\",isButtonMicroTextDisabled:I}=f;if(!y||!w)throw new s(o.MissingPaymentMethod);const _=Object.assign({merchantId:y,ledgerCurrency:w,checkoutLanguage:b,placement:n,buttonColor:a},I?{design:P.C0001}:{});if(this.isBuyNowFlow)return Object.assign(Object.assign({},_),{sandbox:!!m});const O=u();_.productType=O&&0===c(O)?p.PayOnly:p.PayAndShip;const{checkoutSettings:{features:k},storeProfile:{shopPath:M,storeCountryCode:B}}=h();if(this.isPh4Enabled(k,B)){if(!C)throw new s(o.MissingPaymentMethod);const t=null===(r=d())||void 0===r?void 0:r.outstandingBalance.toString(),e=null==O?void 0:O.currency.code,n=Object.assign({},_);let a;return this.isEnvironmentSpecific(S)?(n.publicKeyId=S,a=C):(n.sandbox=!!m,a=Object.assign(Object.assign({},C),{publicKeyId:S})),i||(n.createCheckoutSessionConfig=a),t&&e&&(n.estimatedOrderAmount={amount:t,currencyCode:e}),n}const A={method:v,url:`${M}/remote-checkout/${e}/payment-session`,extractAmazonCheckoutSessionId:z};return Object.assign(Object.assign({},_),{createCheckoutSession:A,sandbox:!!m})}isEnvironmentSpecific(t){return/^(SANDBOX|LIVE)/.test(t)}getAmazonPayV2SDK(){return this.getOrThrow(this.amazonPayV2SDK)}getButtonParentContainer(){return this.getOrThrow(this.buttonParentContainer)}getAmazonPayV2Button(){return this.getOrThrow(this.amazonPayV2Button)}getOrThrow(t){return u(t,()=>new d(a.PaymentNotInitialized))}getCheckoutState(t){return\"object\"==typeof(e=t)&&null!==e&&\"cart\"in e&&\"checkout\"in e&&\"config\"in e&&\"paymentMethods\"in e?{getCart:t.cart.getCart,getCheckout:t.checkout.getCheckout,getStoreConfigOrThrow:t.config.getStoreConfigOrThrow,getPaymentMethodOrThrow:e=>t.paymentMethods.getPaymentMethodOrThrow(e)}:t;var e}}class v extends r{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class C{constructor(t,e=window){this.scriptLoader=t,this.windowWithAmazonPay=e}load(t){return e=this,n=void 0,o=function*(){const{initializationData:e}=t,n=(null==e?void 0:e.region)||\"us\",i=h[n];if(yield this.scriptLoader.loadScript(`https://static-${i}.payments-amazon.com/checkout.js`),!this.windowWithAmazonPay.amazon)throw new v;return this.windowWithAmazonPay.amazon},new((i=void 0)||(i=Promise))(function(t,a){function r(t){try{c(o.next(t))}catch(t){a(t)}}function s(t){try{c(o.throw(t))}catch(t){a(t)}}function c(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i(function(t){t(n)})).then(r,s)}c((o=o.apply(e,n||[])).next())});var e,n,i,o}}function z(){return new b(new C(t()))}function w(t,e){return Object.assign(t,{resolveIds:e})}class S extends r{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class I extends S{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}class _ extends r{constructor(t){super(t||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}class O extends r{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}var k=function(t,e,n,i){return new(n||(n=Promise))(function(o,a){function r(t){try{c(i.next(t))}catch(t){a(t)}}function s(t){try{c(i.throw(t))}catch(t){a(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(r,s)}c((i=i.apply(t,e||[])).next())})};class M{constructor(t,e){this.paymentIntegrationService=t,this.amazonPayV2PaymentProcessor=e}initialize(t){return k(this,void 0,void 0,function*(){const{methodId:e,amazonpay:n}=t;if(!e)throw new S('Unable to proceed because \"methodId\" argument is not provided.');const i=this.paymentIntegrationService.getState(),{features:o}=i.getStoreConfigOrThrow().checkoutSettings,a=i.getPaymentMethodOrThrow(e),r=a.initializationData||{},{paymentToken:s=\"\",region:c=\"\",isButtonMicroTextDisabled:u}=r;if(yield this.amazonPayV2PaymentProcessor.initialize(a),this._isReadyToPay(s))(null==n?void 0:n.editButtonId)&&this._bindEditButton(n.editButtonId,s,\"changePayment\",this._isModalFlow(c));else{const{id:t}=this._createContainer();if(this._amazonPayButton=this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:i,containerId:t,decoupleCheckoutInitiation:this._isOneTimeTransaction(o,c.toUpperCase()),methodId:e,placement:y.Checkout,isButtonMicroTextDisabled:u}),!this._amazonPayButton)throw new S(\"Unable to render the Amazon Pay button to an invalid HTML container element.\")}})}execute(t,n){return k(this,void 0,void 0,function*(){const{payment:i}=t;if(!i)throw new I([\"payment\"]);const{methodId:o}=i,a=this.paymentIntegrationService.getState(),{features:r}=a.getStoreConfigOrThrow().checkoutSettings,s=a.getPaymentMethodOrThrow(o).initializationData||{},{paymentToken:c=\"\",region:u=\"\"}=s;if(this._isReadyToPay(c)||this._isOneTimeTransaction(r,u.toUpperCase())){const e={methodId:o,paymentData:{nonce:c||\"apb\"}};yield this.paymentIntegrationService.submitOrder(t,n);try{return void(yield this.paymentIntegrationService.submitPayment(e))}catch(t){if(!((t=>\"object\"==typeof t&&null!==t&&\"body\"in t)(t)&&(d=t.body,\"object\"==typeof d&&null!==d&&\"status\"in d&&\"additional_action_required\"in d&&\"additional_action_required\"===d.status&&\"data\"in d.additional_action_required&&\"redirect_url\"in d.additional_action_required.data&&\"string\"==typeof d.additional_action_required.data.redirect_url)))throw t;const{additional_action_required:e}=t.body,{redirect_url:n}=e.data;if(c)return new Promise(()=>window.location.assign(n));this.amazonPayV2PaymentProcessor.prepareCheckout(JSON.parse(n))}}var d;return this._getAmazonPayButton().click(),this._isModalFlow(u)?new Promise((t,e)=>{const n=()=>{window.removeEventListener(\"focus\",n),e(new _(\"Shopper needs to login to Amazonpay to continue\"))};window.addEventListener(\"focus\",n)}):new Promise(e)})}finalize(){return Promise.reject(new O)}deinitialize(){return k(this,void 0,void 0,function*(){yield this.amazonPayV2PaymentProcessor.deinitialize(),this._amazonPayButton=void 0})}_bindEditButton(t,e,n,i){const o=document.getElementById(t);if(o&&o.parentNode){if(!i){const t=o.cloneNode(!0);o.parentNode.replaceChild(t,o),t.addEventListener(\"click\",()=>{this._showLoadingSpinner()})}this.amazonPayV2PaymentProcessor.bindButton(t,e,n)}}_isModalFlow(t){return\"us\"===t}_showLoadingSpinner(){return k(this,void 0,void 0,function*(){yield this.paymentIntegrationService.widgetInteraction(()=>new Promise(e))})}_createContainer(){let t=document.getElementById(\"AmazonPayButton\");return t||(t=document.createElement(\"div\"),t.id=\"AmazonPayButton\",t.style.display=\"none\",document.body.appendChild(t))}_getAmazonPayButton(){return u(this._amazonPayButton,()=>new d(a.PaymentNotInitialized))}_isOneTimeTransaction(t,e){return this.amazonPayV2PaymentProcessor.isPh4Enabled(t,e)&&t[\"INT-6399.amazon_pay_apb\"]}_isReadyToPay(t){return!!t}}const B=w(t=>new M(t,z()),[{id:\"amazonpay\"}]);class A extends r{constructor(t){super(t||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var T=function(t,e,n,i){return new(n||(n=Promise))(function(o,a){function r(t){try{c(i.next(t))}catch(t){a(t)}}function s(t){try{c(i.throw(t))}catch(t){a(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(r,s)}c((i=i.apply(t,e||[])).next())})};class V{constructor(t,e){this.paymentIntegrationService=t,this.amazonPayV2PaymentProcessor=e}initialize(t){return T(this,void 0,void 0,function*(){const{methodId:e,amazonpay:n}=t;if(!e||!(null==n?void 0:n.container))throw new S('Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.');let i;try{i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e)}catch(t){yield this.paymentIntegrationService.loadPaymentMethod(e),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e)}yield this.amazonPayV2PaymentProcessor.initialize(i),this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:this.paymentIntegrationService.getState(),containerId:n.container,methodId:e,placement:y.Checkout})})}deinitialize(){return T(this,void 0,void 0,function*(){yield this.amazonPayV2PaymentProcessor.deinitialize()})}signIn(){throw new A('In order to sign in via Amazon, the shopper must click on \"Amazon Pay\" button.')}signOut(t){return T(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getPaymentId();e&&(yield this.amazonPayV2PaymentProcessor.signout(),yield this.paymentIntegrationService.remoteCheckoutSignOut(e.providerId,t))})}executePaymentMethodCheckout(t){var e;return null===(e=null==t?void 0:t.continueWithCheckoutCallback)||void 0===e||e.call(t),Promise.resolve()}}const N=w(t=>new V(t,z()),[{id:\"amazonpay\"}]);class x extends r{constructor(t){super(t||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}class E extends r{constructor(t){super(t||\"An unexpected error has occurred during config creation process. Please try again later.\"),this.name=\"AmazonPayV2ConfigCreationError\",this.type=\"amazon_pay_v2_config_creation_error\"}}function U(t){return t instanceof Object&&\"buyNowInitializeOptions\"in t}var j,D=function(t,e,n,i){return new(n||(n=Promise))(function(o,a){function r(t){try{c(i.next(t))}catch(t){a(t)}}function s(t){try{c(i.throw(t))}catch(t){a(t)}}function c(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(r,s)}c((i=i.apply(t,e||[])).next())})};class q{constructor(t,e,n){this.paymentIntegrationService=t,this.amazonPayV2PaymentProcessor=e,this.amazonPayV2ConfigRequestSender=n}initialize(t){var e;return D(this,void 0,void 0,function*(){const{methodId:n,containerId:i,amazonpay:o}=t,{buttonColor:a}=o||{};if(!n||!i)throw new S('Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.');const{getPaymentMethodOrThrow:r}=this.paymentIntegrationService.getState(),s=r(n),{initializationData:c}=s;yield this.amazonPayV2PaymentProcessor.initialize(s),o||(yield this.paymentIntegrationService.loadDefaultCheckout());const u=U(o)?void 0:o;U(o)&&\"function\"==typeof(null===(e=o.buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody)&&(this._buyNowInitializeOptions=o.buyNowInitializeOptions,this.amazonPayV2PaymentProcessor.updateBuyNowFlowFlag(!0)),this.amazonPayV2PaymentProcessor.renderAmazonPayButton({checkoutState:this.paymentIntegrationService.getState(),containerId:i,methodId:n,options:u,placement:y.Cart,buttonColor:a,isButtonMicroTextDisabled:null==c?void 0:c.isButtonMicroTextDisabled}),this._buyNowInitializeOptions&&this.amazonPayV2PaymentProcessor.prepareCheckoutWithCreationRequestConfig(this._getCheckoutCreationRequestConfig.bind(this))})}deinitialize(){return this.amazonPayV2PaymentProcessor.deinitialize()}_createBuyNowCartOrThrow(){var t,e;return D(this,void 0,void 0,function*(){const n=null===(e=null===(t=this._buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody)||void 0===e?void 0:e.call(t);if(!n)throw new s(o.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(n)}catch(t){throw new x}})}_createCheckoutConfig(t){return D(this,void 0,void 0,function*(){try{const e=(yield this.amazonPayV2ConfigRequestSender.createCheckoutConfig(t)).body,{payload:n,public_key:i}=e,o=function(t,e){var n={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(i=Object.getOwnPropertySymbols(t);o<i.length;o++)e.indexOf(i[o])<0&&Object.prototype.propertyIsEnumerable.call(t,i[o])&&(n[i[o]]=t[i[o]])}return n}(e,[\"payload\",\"public_key\"]);return Object.assign({payloadJSON:n,publicKeyId:i},o)}catch(t){throw new E}})}_getCheckoutCreationRequestConfig(){return D(this,void 0,void 0,function*(){const t=yield this._createBuyNowCartOrThrow(),e={amount:String(t.baseAmount),currencyCode:t.currency.code};return{createCheckoutSessionConfig:yield this._createCheckoutConfig(t.id),estimatedOrderAmount:e,productType:0===c(t)?p.PayOnly:p.PayAndShip}})}}!function(t){t.Json=\"application/json\",t.JsonV1=\"application/vnd.bc.v1+json\"}(j||(j={}));const R=j,L={\"X-Checkout-SDK-Version\":\"1.916.1\"};class K{constructor(t){this._requestSender=t}createCheckoutConfig(t){const e={cartId:t},n=Object.assign({\"X-API-INTERNAL\":\"This API endpoint is for internal use only and may change in the future\",\"Content-Type\":R.Json},L);return this._requestSender.post(\"/api/storefront/payment/amazonpay\",{headers:n,body:e})}}const F=w(t=>{const e=i(),n=new K(e),o=z();return new q(t,o,n)},[{id:\"amazonpay\"}]);export{F as createAmazonPayV2ButtonStrategy,N as createAmazonPayV2CustomerStrategy,B as createAmazonPayV2PaymentStrategy};\n//# sourceMappingURL=amazon-pay.js.map"
  },
  {
    "path": "dist/esm/integrations/apple-pay.js",
    "content": "import{createRequestSender as e}from\"@bigcommerce/request-sender\";import{ScriptLoader as t,getScriptLoader as i}from\"@bigcommerce/script-loader\";import{find as n,noop as o}from\"lodash\";var a={};function r(e,t,i=!0){var n;return null!==(n=e[t])&&void 0!==n?n:i}a.d=(e,t)=>{for(var i in t)a.o(t,i)&&!a.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);const s=\"3.128.0\",l=\"3.123.2\",d=\"3.106.0\";class c{constructor(e){this.paymentIntegrationService=e,this.braintreeWindow=window}getSDKVersion(){const e=this.paymentIntegrationService.getState().getStoreConfig(),t=(null==e?void 0:e.checkoutSettings.features)||{};return this.getPreloadedSDKVersion()||(r(t,\"PAYPAL-5809.braintree_hosted_fields_fix_version\")?s:r(t,\"PAYPAL-5636.update_braintree_sdk_version\")?l:d)}getPreloadedSDKVersion(){const e=this.braintreeWindow.braintree;if(e){const t=n(Object.values(e),e=>!!e.VERSION);return null==t?void 0:t.VERSION}}}class h extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class u extends h{constructor(e){super(e||\"Unsupported browser error\"),this.name=\"UnsupportedBrowserError\",this.type=\"unsupported_browser\"}}var p,m,y,g,v,S,b,C;!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(p||(p={}));class f extends h{constructor(e){super(function(e){switch(e){case p.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case p.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case p.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case p.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}!function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(m||(m={})),function(e){e.Completed=\"COMPLETED\",e.Pending=\"PENDING\",e.Failed=\"FAILED\"}(y||(y={})),function(e){e.TRUSTLY=\"trustly\"}(g||(g={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"cancelled\",e.UNRECOGNIZED=\"unrecognized\"}(v||(v={})),function(e){e.Customer=\"CUSTOMER\",e.Merchant=\"MERCHANT\",e.Network=\"NETWORK\",e.Internal=\"INTERNAL\",e.Unknown=\"UNKNOWN\"}(S||(S={})),function(e){e.KountNotEnabled=\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"}(b||(b={})),function(e){e.Visa=\"visa\",e.Mastercard=\"mastercard\",e.AmericanExpress=\"american-express\",e.DinersClub=\"diners-club\",e.Discover=\"discover\",e.Jcb=\"jcb\",e.UnionPay=\"union-pay\",e.Maestro=\"maestro\",e.Elo=\"elo\",e.Mir=\"mir\",e.Hiper=\"hiper\",e.Hipercard=\"hipercard\"}(C||(C={}));var w,_,P,T=function(e,t,i,n){return new(i||(i=Promise))(function(o,a){function r(e){try{l(n.next(e))}catch(e){a(e)}}function s(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(r,s)}l((n=n.apply(e,t||[])).next())})};class I{constructor(e){this.braintreeScriptLoader=e}initialize(e){this.setClientToken(e)}deinitialize(){return T(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollector),this.dataCollector=void 0})}getClient(){return T(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=yield t.create({authorization:e})}return this.client})}getDataCollectorOrThrow(e){return T(this,void 0,void 0,function*(){const t={deviceData:void 0,teardown:()=>Promise.resolve()};if(!this.dataCollector)try{const t=yield this.getClient(),i=yield this.braintreeScriptLoader.loadDataCollector(),n=Object.assign({client:t,kount:!0},e);this.dataCollector=yield i.create(n)}catch(e){if(function(e){return Boolean(\"object\"==typeof e&&null!==e&&(\"type\"in e||\"message\"in e||\"code\"in e))}(e)&&e.code===b.KountNotEnabled)return t;throw e}return this.dataCollector})}getBraintreeGooglePayment(){return T(this,void 0,void 0,function*(){if(!this.googlePayment){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadGooglePayment()]);this.googlePayment=yield t.create({client:e})}return this.googlePayment})}getBraintreeThreeDS(){return T(this,void 0,void 0,function*(){if(!this.threeDS){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]);this.threeDS=yield t.create({client:e,version:2})}return this.threeDS})}getBraintreeLocalPayment(e){return T(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment){const[t,i]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadLocalPayment()]);this.braintreeLocalPayment=yield new Promise((n,o)=>{i.create({client:t,merchantAccountId:e},(e,t)=>{e&&o(e),n(t)})})}return this.braintreeLocalPayment})}getUsBankAccount(){return T(this,void 0,void 0,function*(){if(!this.usBankAccount){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadUsBankAccount();this.usBankAccount=yield t.create({client:e})}return this.usBankAccount})}getBraintreeVisaCheckout(){return this.visaCheckout||(this.visaCheckout=Promise.all([this.getClient(),this.braintreeScriptLoader.loadVisaCheckout()]).then(([e,t])=>t.create({client:e}))),this.visaCheckout}getVisaCheckoutSdk(e){return T(this,void 0,void 0,function*(){return this.visaCheckoutSDK||(this.visaCheckoutSDK=yield this.braintreeScriptLoader.loadVisaCheckoutSdk(e)),this.visaCheckoutSDK})}getVenmoCheckoutOrThrow(){return T(this,void 0,void 0,function*(){if(!this.braintreeVenmo){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadVenmoCheckout(),i={client:e,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},n=yield t.create(i);if(!n.isBrowserSupported())throw new u;this.braintreeVenmo=n}return this.braintreeVenmo})}setClientToken(e){this.clientToken=e}getClientTokenOrThrow(){if(!this.clientToken)throw new f(p.PaymentNotInitialized);return this.clientToken}teardownModule(e){return e?e.teardown():Promise.resolve()}}class k extends h{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}!function(e){e.Sandbox=\"sandbox\",e.Production=\"production\"}(w||(w={})),function(e){e.Client=\"client\",e.DataCollector=\"dataCollector\",e.Fastlane=\"fastlane\",e.GooglePayment=\"googlePayment\",e.HostedFields=\"hostedFields\",e.LocalPayment=\"localPayment\",e.Paypal=\"paypal\",e.PaypalCheckout=\"paypalCheckout\",e.ThreeDSecure=\"threeDSecure\",e.UsBankAccount=\"usBankAccount\",e.Venmo=\"venmo\",e.VisaCheckout=\"visaCheckout\"}(_||(_={})),function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\"}(P||(P={}));const M={[d]:{[_.Client]:\"sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt\",[_.PaypalCheckout]:\"sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O\",[_.Paypal]:\"sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+\",[_.LocalPayment]:\"sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT\",[_.DataCollector]:\"sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV\",[_.UsBankAccount]:\"sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ\",[_.GooglePayment]:\"sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe\",[_.ThreeDSecure]:\"sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB\",[_.VisaCheckout]:\"sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT\",[_.Venmo]:\"sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov\",[_.HostedFields]:\"sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy\",[_.Fastlane]:\"sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa\"},[l]:{[_.Client]:\"sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO\",[_.PaypalCheckout]:\"sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/\",[_.Paypal]:\"sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt\",[_.LocalPayment]:\"sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH\",[_.DataCollector]:\"sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO\",[_.UsBankAccount]:\"sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW\",[_.GooglePayment]:\"sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO\",[_.ThreeDSecure]:\"sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym\",[_.VisaCheckout]:\"sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS\",[_.Venmo]:\"sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU\",[_.HostedFields]:\"sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P\",[_.Fastlane]:\"sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y\"},[s]:{[_.Client]:\"sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq\",[_.PaypalCheckout]:\"sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh\",[_.Paypal]:\"sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH\",[_.LocalPayment]:\"sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC\",[_.DataCollector]:\"sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc\",[_.UsBankAccount]:\"sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F\",[_.GooglePayment]:\"sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i\",[_.ThreeDSecure]:\"sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D\",[_.VisaCheckout]:\"sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv\",[_.Venmo]:\"sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz\",[_.HostedFields]:\"sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z\",[_.Fastlane]:\"sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr\"}};var A,N=function(e,t,i,n){return new(i||(i=Promise))(function(o,a){function r(e){try{l(n.next(e))}catch(e){a(e)}}function s(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(r,s)}l((n=n.apply(e,t||[])).next())})};class O{constructor(e,t,i){this.scriptLoader=e,this.braintreeHostWindow=t,this.braintreeSDKVersionManager=i}loadClient(){return N(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(_.Client,\"client.min.js\")})}loadFastlane(){return N(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(_.Fastlane,\"fastlane.min.js\")})}loadPaypalCheckout(){return N(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(_.PaypalCheckout,\"paypal-checkout.min.js\")})}loadPaypal(){return N(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(_.Paypal,\"paypal.min.js\")})}loadLocalPayment(){return N(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(_.LocalPayment,\"local-payment.min.js\")})}loadDataCollector(){return N(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(_.DataCollector,\"data-collector.min.js\")})}loadUsBankAccount(){return N(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(_.UsBankAccount,\"us-bank-account.min.js\")})}loadGooglePayment(){return N(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(_.GooglePayment,\"google-payment.min.js\")})}load3DS(){return N(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(_.ThreeDSecure,\"three-d-secure.min.js\")})}loadVisaCheckout(){return this.loadBraintreeModuleOrThrow(_.VisaCheckout,\"visa-checkout.min.js\")}loadVenmoCheckout(){return this.loadBraintreeModuleOrThrow(_.Venmo,\"venmo.min.js\")}loadHostedFields(){return N(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(_.HostedFields,\"hosted-fields.min.js\")})}loadVisaCheckoutSdk(e){return N(this,void 0,void 0,function*(){if(this.braintreeHostWindow.V)return this.braintreeHostWindow.V;const t=e?\"sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm\":\"sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6\";return this.scriptLoader.loadScript(`//${e?\"sandbox-\":\"\"}assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,{async:!0,attributes:{integrity:t,crossorigin:\"anonymous\"}}).then(()=>{if(!this.braintreeHostWindow.V)throw new k;return this.braintreeHostWindow.V})})}loadBraintreeModuleOrThrow(e,t){return N(this,void 0,void 0,function*(){let i=this.getBraintreeModule(e);if(i)return i;const n=this.braintreeSDKVersionManager.getSDKVersion(),o=`//js.braintreegateway.com/web/${n}/js/${t}`,a=n in M?this.getIntegrityValuesByModuleName(e,n):void 0;if(yield this.scriptLoader.loadScript(o,a?{async:!0,attributes:{integrity:a,crossorigin:\"anonymous\"}}:void 0),i=this.getBraintreeModule(e),!i)throw new k;return i})}getBraintreeModule(e){var t;return null===(t=this.braintreeHostWindow.braintree)||void 0===t?void 0:t[e]}getIntegrityValuesByModuleName(e,t){const i=M[t][e];if(!i)throw new Error(\"Unexpected fileName value\");return i}}function E(e,t){return Object.assign(e,{resolveIds:t})}class D extends h{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class L extends D{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class B extends h{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class z extends h{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}!function(e){e.BRAINTREE=\"braintree\",e.BRAINTREE_FASTLANE=\"braintreeacceleratedcheckout\"}(A||(A={}));var x,U=function(e,t,i,n){return new(i||(i=Promise))(function(o,a){function r(e){try{l(n.next(e))}catch(e){a(e)}}function s(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(r,s)}l((n=n.apply(e,t||[])).next())})};!function(e){e.Shipping=\"Shipping\",e.Subtotal=\"Subtotal\",e.StoreCredit=\"Store Credit\"}(x||(x={}));class F{constructor(e,t,i,n,o){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=i,this._braintreeSdk=n,this._applePayScriptLoader=o,this._shippingLabel=x.Shipping,this._subTotalLabel=x.Subtotal,this._storeCreditLabel=x.StoreCredit}initialize(e){var t,i,n,o;return U(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new D('Unable to submit payment because \"options.methodId\" argument is not provided.');const{methodId:a}=e;yield this._applePayScriptLoader.loadSdk(),this._shippingLabel=(null===(t=e.applepay)||void 0===t?void 0:t.shippingLabel)||x.Shipping,this._subTotalLabel=(null===(i=e.applepay)||void 0===i?void 0:i.subtotalLabel)||x.Subtotal,this._storeCreditLabel=(null===(n=e.applepay)||void 0===n?void 0:n.storeCreditLabel)||x.StoreCredit;const r=(yield this._paymentIntegrationService.loadPaymentMethod(a)).getPaymentMethodOrThrow(a);(null===(o=r.initializationData)||void 0===o?void 0:o.gateway)===A.BRAINTREE&&r.clientToken&&this._braintreeSdk.initialize(r.clientToken)})}execute(e,t){return U(this,void 0,void 0,function*(){const{payment:i}=e,n=this._paymentIntegrationService.getState();if(!i)throw new L([\"payment\"]);const{methodId:o}=i,a=n.getPaymentMethodOrThrow(o),r=this._getBaseRequest(n,a),s=this._sessionFactory.create(r);return yield this._paymentIntegrationService.submitOrder({useStoreCredit:e.useStoreCredit},t),s.begin(),new Promise((e,t)=>{this._handleApplePayEvents(s,a,{resolve:e,reject:t})})})}finalize(){return Promise.reject(new B)}deinitialize(){return Promise.resolve()}_getBaseRequest(e,t){const i=e.getCheckoutOrThrow(),n=e.getCartOrThrow(),o=e.getStoreConfigOrThrow(),{storeProfile:{storeCountryCode:a,storeName:r}}=o,{currency:{code:s,decimalPlaces:l}}=n,{initializationData:{merchantCapabilities:d,supportedNetworks:c}}=t,{grandTotal:h,isStoreCreditApplied:u,outstandingBalance:p}=i,m=[{label:this._subTotalLabel,amount:`${i.subtotal.toFixed(l)}`}];if(i.taxes.forEach(e=>m.push({label:e.name,amount:`${e.amount.toFixed(l)}`})),m.push({label:this._shippingLabel,amount:`${i.shippingCostTotal.toFixed(l)}`}),u){const{storeCredit:t}=e.getCustomerOrThrow();m.push({label:this._storeCreditLabel,amount:`-${Math.min(h,t).toFixed(l)}`})}return{countryCode:a,currencyCode:s,merchantCapabilities:d,supportedNetworks:c,lineItems:m,total:{label:r,amount:`${p.toFixed(l)}`,type:\"final\"}}}_handleApplePayEvents(e,t,i){e.onvalidatemerchant=i=>U(this,void 0,void 0,function*(){try{const{body:n}=yield this._onValidateMerchant(t,i);e.completeMerchantValidation(n)}catch(e){throw new Error(\"Merchant validation failed\")}}),e.oncancel=()=>U(this,void 0,void 0,function*(){return i.reject(new z(\"Continue with applepay\"))}),e.onpaymentauthorized=n=>this._onPaymentAuthorized(n,e,t,i)}_onValidateMerchant(e,t){return U(this,void 0,void 0,function*(){const i=[`validationUrl=${t.validationURL}`,`merchantIdentifier=${e.initializationData.merchantId}`,`displayName=${e.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${e.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:i})})}_onPaymentAuthorized(e,t,i,n){var o;return U(this,void 0,void 0,function*(){const{token:a}=e.payment;let r;(null===(o=i.initializationData)||void 0===o?void 0:o.gateway)===A.BRAINTREE&&(r=yield this._getBraintreeDeviceData());const s={methodId:i.id,paymentData:{deviceSessionId:r,formattedPayload:{apple_pay_token:{payment_data:a.paymentData,payment_method:a.paymentMethod,transaction_id:a.transactionIdentifier}}}};try{return yield this._paymentIntegrationService.submitPayment(s),t.completePayment(ApplePaySession.STATUS_SUCCESS),n.resolve()}catch(e){return t.completePayment(ApplePaySession.STATUS_FAILURE),n.reject(new f(p.PaymentNotInitialized))}})}_getBraintreeDeviceData(){return U(this,void 0,void 0,function*(){try{const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e}catch(e){}})}}function V(e){if(!function(e){return\"ApplePaySession\"in e}(e))throw new Error(\"Apple pay is not supported\")}class R{create(e){return V(window),new ApplePaySession(1,e)}}class j{constructor(e){this.scriptLoader=e,this.sdkVersion=\"1.latest\"}loadSdk(){return e=this,t=void 0,n=function*(){(function(e){return\"ApplePaySDK\"in e})(window)||(yield this.scriptLoader.loadScript(`https://applepay.cdn-apple.com/jsapi/${this.sdkVersion}/apple-pay-sdk.js`),V(window))},new((i=void 0)||(i=Promise))(function(o,a){function r(e){try{l(n.next(e))}catch(e){a(e)}}function s(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(r,s)}l((n=n.apply(e,t||[])).next())});var e,t,i,n}}const q=E(n=>{const{getHost:o}=n.getState(),a=new c(n);return new F(e({host:o()}),n,new R,new I(new O(i(),window,a)),new j(new t))},[{id:\"applepay\"}]);var H;!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(H||(H={}));class W extends h{constructor(e){super(function(e){switch(e){case H.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case H.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case H.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case H.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case H.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case H.MissingCheckoutConfig:case H.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case H.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case H.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case H.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case H.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case H.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case H.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class G extends h{constructor(e){super(e||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var $,K=function(e,t,i,n){return new(i||(i=Promise))(function(o,a){function r(e){try{l(n.next(e))}catch(e){a(e)}}function s(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(r,s)}l((n=n.apply(e,t||[])).next())})};!function(e){e.Subtotal=\"Subtotal\",e.Shipping=\"Shipping\"}($||($={}));class X{constructor(e,t,i,n,a){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=i,this._braintreeSdk=n,this._applePayScriptLoader=a,this._onAuthorizeCallback=o,this._onError=o,this._onClick=o,this._subTotalLabel=$.Subtotal,this._shippingLabel=$.Shipping,this._hasApplePaySession=!1}initialize(e){var t;return K(this,void 0,void 0,function*(){const{methodId:i,applepay:n}=e;if(!i||!n)throw new W(H.MissingPaymentMethod);const{container:a,shippingLabel:r,subtotalLabel:s,onError:l=o,onClick:d=o,onPaymentAuthorize:c}=n;this._shippingLabel=r||$.Shipping,this._subTotalLabel=s||$.Subtotal,this._onAuthorizeCallback=c,this._onError=l,this._onClick=d;let h=this._paymentIntegrationService.getState();yield this._applePayScriptLoader.loadSdk();try{this._paymentMethod=h.getPaymentMethodOrThrow(i)}catch(e){h=yield this._paymentIntegrationService.loadPaymentMethod(i),this._paymentMethod=h.getPaymentMethodOrThrow(i)}yield this._paymentIntegrationService.verifyCheckoutSpamProtection(),this._applePayButton=this._createButton(a),this._applePayButton.addEventListener(\"click\",this._handleWalletButtonClick.bind(this)),(null===(t=this._paymentMethod.initializationData)||void 0===t?void 0:t.gateway)===A.BRAINTREE&&this._paymentMethod.clientToken&&this._braintreeSdk.initialize(this._paymentMethod.clientToken)})}deinitialize(){return Promise.resolve()}signIn(){throw new G('In order to sign in via Apple, the shopper must click on \"Apple Pay\" button.')}signOut(){throw new G(\"Need to do signout via apple.\")}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}_createButton(e){const t=document.getElementById(e);if(!t)throw new D(\"Unable to create sign-in button without valid container ID.\");const i=this._createApplePayButtonElement();return t.appendChild(i),i}_createApplePayButtonElement(){const e=document.createElement(\"apple-pay-button\");return e.setAttribute(\"buttonstyle\",\"black\"),e.setAttribute(\"type\",\"plain\"),e.setAttribute(\"style\",\"--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;\"),e}_handleWalletButtonClick(e){if(e.preventDefault(),this._hasApplePaySession)return;this._onClick();const t=this._paymentIntegrationService.getState(),i=t.getCartOrThrow(),n=t.getStoreConfigOrThrow(),o=t.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new W(H.MissingPaymentMethod);const a=this._getBaseRequest(i,o,n,this._paymentMethod),r=this._sessionFactory.create(a);this._handleApplePayEvents(r,this._paymentMethod,n),r.begin(),this._hasApplePaySession=!0}_getBaseRequest(e,t,i,n){var o;const{storeProfile:{storeCountryCode:a,storeName:r}}=i,{currency:{code:s,decimalPlaces:l}}=e,{initializationData:{merchantCapabilities:d,supportedNetworks:c}}=n,h=e.lineItems.physicalItems.length>0,u={requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"],countryCode:a,currencyCode:s,merchantCapabilities:d,supportedNetworks:c,lineItems:[],total:h?{label:r,amount:`${t.grandTotal.toFixed(l)}`,type:\"pending\"}:{label:r,amount:`${t.grandTotal.toFixed(l)}`,type:\"final\"}};if(h)null===(o=u.requiredShippingContactFields)||void 0===o||o.push(\"postalAddress\");else{const e=[{label:this._subTotalLabel,amount:`${t.subtotal.toFixed(l)}`}];t.taxes.forEach(t=>e.push({label:t.name,amount:`${t.amount.toFixed(l)}`})),u.lineItems=e}return u}_handleApplePayEvents(e,t,i){e.onvalidatemerchant=i=>K(this,void 0,void 0,function*(){try{const{body:n}=yield this._onValidateMerchant(t,i);e.completeMerchantValidation(n)}catch(e){this._onError(e)}}),e.onshippingcontactselected=t=>K(this,void 0,void 0,function*(){return this._handleShippingContactSelected(e,i,t)}),e.onshippingmethodselected=t=>K(this,void 0,void 0,function*(){return this._handleShippingMethodSelected(e,i,t)}),e.oncancel=()=>K(this,void 0,void 0,function*(){this._hasApplePaySession=!1;try{const e=`/remote-checkout/${t.id}/signout`;return yield this._requestSender.get(e),yield this._paymentIntegrationService.loadCheckout()}catch(e){return this._onError(new z)}}),e.onpaymentauthorized=i=>K(this,void 0,void 0,function*(){return this._onPaymentAuthorized(i,e,t)})}_handleShippingContactSelected(e,t,i){var n;return K(this,void 0,void 0,function*(){const o=this._transformContactToAddress(i.shippingContact);try{yield this._paymentIntegrationService.updateShippingAddress(o)}catch(t){return e.abort(),this._hasApplePaySession=!1,this._onError(t)}const{storeProfile:{storeName:a}}=t;let r=this._paymentIntegrationService.getState();const{currency:{decimalPlaces:s}}=r.getCartOrThrow();let l=r.getCheckoutOrThrow();const d=null===(n=l.consignments[0].selectedShippingOption)||void 0===n?void 0:n.id,c=l.consignments[0].availableShippingOptions,h=null==c?void 0:c.find(({id:e})=>e===d),u=null==c?void 0:c.filter(e=>e.id!==d),p=h?[{label:h.description,amount:`${h.cost.toFixed(s)}`,detail:h.additionalDescription,identifier:h.id}]:[];if(u&&[...u.filter(e=>e.isRecommended),...u.filter(e=>!e.isRecommended)].forEach(e=>p.push({label:e.description,amount:`${e.cost.toFixed(s)}`,detail:e.additionalDescription,identifier:e.id})),!(c instanceof Array))throw new Error(\"Shipping options not available.\");if(0===c.length)return void e.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:\"pending\",label:a,amount:`${l.grandTotal.toFixed(s)}`},[]);const m=c.find(e=>e.isRecommended),y=m?m.id:c[0].id,g=h?h.id:y;try{yield this._updateShippingOption(g)}catch(e){return this._onError(e)}r=this._paymentIntegrationService.getState(),l=r.getCheckoutOrThrow(),e.completeShippingContactSelection({newShippingMethods:p,newTotal:{type:\"final\",label:a,amount:`${l.grandTotal.toFixed(s)}`},newLineItems:this._getUpdatedLineItems(l,s)})})}_handleShippingMethodSelected(e,t,i){return K(this,void 0,void 0,function*(){const{storeProfile:{storeName:n}}=t,{shippingMethod:{identifier:o}}=i;try{yield this._updateShippingOption(o)}catch(t){return e.abort(),this._hasApplePaySession=!1,this._onError(t)}const a=this._paymentIntegrationService.getState(),{currency:{decimalPlaces:r}}=a.getCartOrThrow(),s=a.getCheckoutOrThrow();e.completeShippingMethodSelection({newTotal:{type:\"final\",label:n,amount:`${s.grandTotal.toFixed(r)}`},newLineItems:this._getUpdatedLineItems(s,r)})})}_getUpdatedLineItems(e,t){const i=[{label:this._subTotalLabel,amount:`${e.subtotal.toFixed(t)}`}];return e.taxes.forEach(e=>i.push({label:e.name,amount:`${e.amount.toFixed(t)}`})),i.push({label:this._shippingLabel,amount:`${e.shippingCostTotal.toFixed(t)}`}),i}_updateShippingOption(e){return K(this,void 0,void 0,function*(){return this._paymentIntegrationService.selectShippingOption(e)})}_onValidateMerchant(e,t){return K(this,void 0,void 0,function*(){const i=[`validationUrl=${t.validationURL}`,`merchantIdentifier=${e.initializationData.merchantId}`,`displayName=${e.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${e.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:i})})}_onPaymentAuthorized(e,t,i){var n;return K(this,void 0,void 0,function*(){const{token:o,billingContact:a,shippingContact:r}=e.payment,s=this._paymentIntegrationService.getState().getCartOrThrow().lineItems.physicalItems.length>0;let l;(null===(n=i.initializationData)||void 0===n?void 0:n.gateway)===A.BRAINTREE&&(l=yield this._getBraintreeDeviceData());const d={methodId:i.id,paymentData:{deviceSessionId:l,formattedPayload:{apple_pay_token:{payment_data:o.paymentData,payment_method:o.paymentMethod,transaction_id:o.transactionIdentifier}}}},c=this._transformContactToAddress(a),h=this._transformContactToAddress(r),u=null==r?void 0:r.emailAddress,p=(null==r?void 0:r.phoneNumber)||\"\";try{return yield this._paymentIntegrationService.updateBillingAddress(Object.assign(Object.assign({},c),{email:u,phone:p})),s&&(yield this._paymentIntegrationService.updateShippingAddress(h)),yield this._paymentIntegrationService.submitOrder({useStoreCredit:!1}),yield this._paymentIntegrationService.submitPayment(d),t.completePayment(ApplePaySession.STATUS_SUCCESS),this._onAuthorizeCallback()}catch(e){return t.completePayment(ApplePaySession.STATUS_FAILURE),this._onError(e)}})}_transformContactToAddress(e){return{firstName:(null==e?void 0:e.givenName)||\"\",lastName:(null==e?void 0:e.familyName)||\"\",city:(null==e?void 0:e.locality)||\"\",company:\"\",address1:(null==e?void 0:e.addressLines)&&e.addressLines[0]||\"\",address2:(null==e?void 0:e.addressLines)&&e.addressLines[1]||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",phone:(null==e?void 0:e.phoneNumber)||\"\",stateOrProvince:(null==e?void 0:e.administrativeArea)||\"\",stateOrProvinceCode:(null==e?void 0:e.administrativeArea)||\"\",customFields:[]}}_getBraintreeDeviceData(){return K(this,void 0,void 0,function*(){try{const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e}catch(e){}})}}const Y=E(n=>{const{getHost:o}=n.getState(),a=new c(n);return new X(e({host:o()}),n,new R,new I(new O(i(),window,a)),new j(new t))},[{id:\"applepay\"}]);class Q extends h{constructor(e){super(e||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}var Z,J,ee=function(e,t,i,n){return new(i||(i=Promise))(function(o,a){function r(e){try{l(n.next(e))}catch(e){a(e)}}function s(e){try{l(n.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(r,s)}l((n=n.apply(e,t||[])).next())})};!function(e){e.Subtotal=\"Subtotal\",e.Shipping=\"Shipping\"}(Z||(Z={})),function(e){e.Black=\"black\",e.White=\"white\",e.WhiteBorder=\"white-border\"}(J||(J={}));class te{constructor(e,t,i,n,a){this._requestSender=e,this._paymentIntegrationService=t,this._sessionFactory=i,this._braintreeSdk=n,this._applePayScriptLoader=a,this._onAuthorizeCallback=o,this._subTotalLabel=Z.Subtotal,this._shippingLabel=Z.Shipping}initialize(e){var t,i;return ee(this,void 0,void 0,function*(){const{methodId:n,containerId:o,applepay:a}=e;if(!n||!a)throw new W(H.MissingPaymentMethod);yield this._applePayScriptLoader.loadSdk();const{onPaymentAuthorize:r,buyNowInitializeOptions:s,requiresShipping:l}=a;this._requiresShipping=l,this._buyNowInitializeOptions=s,this._onAuthorizeCallback=r,s||(yield this._paymentIntegrationService.loadDefaultCheckout()),yield this._paymentIntegrationService.loadPaymentMethod(n);const d=this._paymentIntegrationService.getState();return this._paymentMethod=d.getPaymentMethodOrThrow(n),d.getCart()&&(yield this._paymentIntegrationService.verifyCheckoutSpamProtection()),(null===(t=this._paymentMethod.initializationData)||void 0===t?void 0:t.gateway)===A.BRAINTREE&&this._paymentMethod.clientToken&&this._braintreeSdk.initialize(this._paymentMethod.clientToken),this._applePayButton=this._createButton(o,null===(i=this._paymentMethod.initializationData)||void 0===i?void 0:i.styleOption),this._applePayButton.addEventListener(\"click\",this._handleWalletButtonClick.bind(this)),Promise.resolve()})}deinitialize(){return Promise.resolve()}_createButton(e,t){const i=document.getElementById(e);if(!i)throw new D(\"Unable to create wallet button without valid container ID.\");const n=this._createApplePayButtonElement(t);return i.appendChild(n),n}_createApplePayButtonElement(e){const t=document.createElement(\"apple-pay-button\");return t.setAttribute(\"buttonstyle\",(e=>{switch(e){case J.White:return\"white\";case J.WhiteBorder:return\"white-outline\";case J.Black:default:return\"black\"}})(e)),t.setAttribute(\"type\",\"plain\"),t.setAttribute(\"style\",\"--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;\"),t}_handleWalletButtonClick(e){var t;return ee(this,void 0,void 0,function*(){if(e.preventDefault(),!this._paymentMethod||!this._paymentMethod.initializationData)throw new W(H.MissingPaymentMethod);if(this._buyNowInitializeOptions&&\"function\"==typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody){const{countryCode:e,currencyCode:i,merchantCapabilities:n,supportedNetworks:o,storeName:a}=this._paymentMethod.initializationData,r=this._getRequestWithEmptyTotal(e,i,o,n);this._requiresShipping&&(null===(t=r.requiredShippingContactFields)||void 0===t||t.push(\"postalAddress\"));const s=this._sessionFactory.create(r);this._handleApplePayEvents(s,this._paymentMethod,a),s.begin()}else{const e=this._paymentIntegrationService.getState(),t=e.getCartOrThrow(),i=e.getStoreConfigOrThrow(),n=e.getCheckoutOrThrow(),o=this._getBaseRequest(t,n,i,this._paymentMethod),a=this._sessionFactory.create(o);this._handleApplePayEvents(a,this._paymentMethod,i.storeProfile.storeName),a.begin()}})}_getRequestWithEmptyTotal(e,t,i,n){return{countryCode:e,currencyCode:t,supportedNetworks:i,merchantCapabilities:n,total:{label:\"\",amount:\"0\",type:\"pending\"},requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"]}}_getBaseRequest(e,t,i,n){var o;const{storeProfile:{storeCountryCode:a,storeName:r}}=i,{currency:{code:s,decimalPlaces:l}}=e,{initializationData:{merchantCapabilities:d,supportedNetworks:c}}=n,h=e.lineItems.physicalItems.length>0,u={requiredBillingContactFields:[\"postalAddress\"],requiredShippingContactFields:[\"email\",\"phone\"],countryCode:a,currencyCode:s,merchantCapabilities:d,supportedNetworks:c,lineItems:[],total:h?{label:r,amount:`${t.grandTotal.toFixed(l)}`,type:\"pending\"}:{label:r,amount:`${t.grandTotal.toFixed(l)}`,type:\"final\"}};if(h)null===(o=u.requiredShippingContactFields)||void 0===o||o.push(\"postalAddress\");else{const e=[{label:this._subTotalLabel,amount:`${t.subtotal.toFixed(l)}`}];t.taxes.forEach(t=>e.push({label:t.name,amount:`${t.amount.toFixed(l)}`})),u.lineItems=e}return u}_handleApplePayEvents(e,t,i){e.onvalidatemerchant=i=>ee(this,void 0,void 0,function*(){try{const{body:n}=yield this._onValidateMerchant(t,i);e.completeMerchantValidation(n)}catch(e){throw new Error(\"Merchant validation failed\")}}),this._buyNowInitializeOptions&&!this._requiresShipping&&(e.onpaymentmethodselected=()=>ee(this,void 0,void 0,function*(){yield this._createBuyNowCart(),this._handlePaymentMethodSelected(e)})),e.onshippingcontactselected=t=>ee(this,void 0,void 0,function*(){this._buyNowInitializeOptions&&this._requiresShipping&&(yield this._createBuyNowCart()),yield this._handleShippingContactSelected(e,i,t)}),e.onshippingmethodselected=t=>ee(this,void 0,void 0,function*(){yield this._handleShippingMethodSelected(e,i,t)}),e.oncancel=()=>ee(this,void 0,void 0,function*(){try{const e=`/remote-checkout/${t.id}/signout`;return yield this._requestSender.get(e),yield this._paymentIntegrationService.loadCheckout()}catch(e){throw new z}}),e.onpaymentauthorized=i=>ee(this,void 0,void 0,function*(){return this._onPaymentAuthorized(i,e,t)})}_createBuyNowCart(){var e,t;return ee(this,void 0,void 0,function*(){try{const i=null===(t=null===(e=this._buyNowInitializeOptions)||void 0===e?void 0:e.getBuyNowCartRequestBody)||void 0===t?void 0:t.call(e);if(!i)throw new W(H.MissingCart);const n=yield this._paymentIntegrationService.createBuyNowCart(i);yield this._paymentIntegrationService.loadCheckout(n.id);const o=this._paymentIntegrationService.getState(),{shouldExecuteSpamCheck:a}=o.getCheckoutOrThrow();a&&(yield this._paymentIntegrationService.verifyCheckoutSpamProtection())}catch(e){throw new Q}})}_handlePaymentMethodSelected(e){const t=this._paymentIntegrationService.getState(),i=t.getCartOrThrow(),n=t.getStoreConfigOrThrow(),o=t.getCheckoutOrThrow();if(!this._paymentMethod||!this._paymentMethod.initializationData)throw new W(H.MissingPaymentMethod);const a=this._getBaseRequest(i,o,n,this._paymentMethod);delete a.total.type,e.completePaymentMethodSelection({newTotal:a.total,newLineItems:a.lineItems})}_handleShippingContactSelected(e,t,i){var n;return ee(this,void 0,void 0,function*(){const o=this._transformContactToAddress(i.shippingContact);try{yield this._paymentIntegrationService.updateShippingAddress(o)}catch(t){throw e.abort(),new Error(\"Shipping address update failed\")}let a=this._paymentIntegrationService.getState();const{currency:{decimalPlaces:r}}=a.getCartOrThrow();let s=a.getCheckoutOrThrow();const l=null===(n=s.consignments[0].selectedShippingOption)||void 0===n?void 0:n.id,d=s.consignments[0].availableShippingOptions,c=null==d?void 0:d.find(({id:e})=>e===l),h=null==d?void 0:d.filter(e=>e.id!==l),u=c?[{label:c.description,amount:`${c.cost.toFixed(r)}`,detail:c.additionalDescription,identifier:c.id}]:[];if(h&&[...h.filter(e=>e.isRecommended),...h.filter(e=>!e.isRecommended)].forEach(e=>u.push({label:e.description,amount:`${e.cost.toFixed(r)}`,detail:e.additionalDescription,identifier:e.id})),!(d instanceof Array))throw new Error(\"Shipping options not available.\");if(0===d.length)return void e.completeShippingContactSelection(ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,[],{type:\"pending\",label:t,amount:`${s.grandTotal.toFixed(r)}`},[]);const p=d.find(e=>e.isRecommended),m=p?p.id:d[0].id,y=c?c.id:m;try{yield this._updateShippingOption(y)}catch(e){throw new Error(\"Shipping options update failed\")}a=this._paymentIntegrationService.getState(),s=a.getCheckoutOrThrow(),e.completeShippingContactSelection({newShippingMethods:u,newTotal:{type:\"final\",label:t,amount:`${s.grandTotal.toFixed(r)}`},newLineItems:this._getUpdatedLineItems(s,r)})})}_handleShippingMethodSelected(e,t,i){return ee(this,void 0,void 0,function*(){const{shippingMethod:{identifier:n}}=i;try{yield this._updateShippingOption(n)}catch(t){throw e.abort(),new Error(\"Shipping option selection update failed.\")}const o=this._paymentIntegrationService.getState(),{currency:{decimalPlaces:a}}=o.getCartOrThrow(),r=o.getCheckoutOrThrow();e.completeShippingMethodSelection({newTotal:{type:\"final\",label:t,amount:`${r.grandTotal.toFixed(a)}`},newLineItems:this._getUpdatedLineItems(r,a)})})}_getUpdatedLineItems(e,t){const i=[{label:this._subTotalLabel,amount:`${e.subtotal.toFixed(t)}`}];return e.taxes.forEach(e=>i.push({label:e.name,amount:`${e.amount.toFixed(t)}`})),i.push({label:this._shippingLabel,amount:`${e.shippingCostTotal.toFixed(t)}`}),i}_updateShippingOption(e){return ee(this,void 0,void 0,function*(){return this._paymentIntegrationService.selectShippingOption(e)})}_onValidateMerchant(e,t){return ee(this,void 0,void 0,function*(){const i=[`validationUrl=${t.validationURL}`,`merchantIdentifier=${e.initializationData.merchantId}`,`displayName=${e.initializationData.storeName}`,`domainName=${window.location.hostname}`].join(\"&\");return this._requestSender.post(`${e.initializationData.paymentsUrl}/api/public/v1/payments/applepay/validate_merchant`,{credentials:!1,headers:{Accept:\"application/json\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-XSRF-TOKEN\":null},body:i})})}_onPaymentAuthorized(e,t,i){var n;return ee(this,void 0,void 0,function*(){const{token:o,billingContact:a,shippingContact:r}=e.payment,s=this._paymentIntegrationService.getState().getCartOrThrow().lineItems.physicalItems.length>0;let l;(null===(n=i.initializationData)||void 0===n?void 0:n.gateway)===A.BRAINTREE&&(l=yield this._getBraintreeDeviceData());const d={methodId:i.id,paymentData:{deviceSessionId:l,formattedPayload:{apple_pay_token:{payment_data:o.paymentData,payment_method:o.paymentMethod,transaction_id:o.transactionIdentifier}}}},c=this._transformContactToAddress(a),h=this._transformContactToAddress(r),u=null==r?void 0:r.emailAddress,p=(null==r?void 0:r.phoneNumber)||\"\";try{return yield this._paymentIntegrationService.updateBillingAddress(Object.assign(Object.assign({},c),{email:u,phone:p})),s&&(yield this._paymentIntegrationService.updateShippingAddress(h)),yield this._paymentIntegrationService.submitOrder({useStoreCredit:!1}),yield this._paymentIntegrationService.submitPayment(d),t.completePayment(ApplePaySession.STATUS_SUCCESS),this._onAuthorizeCallback()}catch(e){throw t.completePayment(ApplePaySession.STATUS_FAILURE),new Error(\"Payment cannot complete\")}})}_transformContactToAddress(e){return{firstName:(null==e?void 0:e.givenName)||\"\",lastName:(null==e?void 0:e.familyName)||\"\",city:(null==e?void 0:e.locality)||\"\",company:\"\",address1:(null==e?void 0:e.addressLines)&&e.addressLines[0]||\"\",address2:(null==e?void 0:e.addressLines)&&e.addressLines[1]||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",phone:(null==e?void 0:e.phoneNumber)||\"\",stateOrProvince:(null==e?void 0:e.administrativeArea)||\"\",stateOrProvinceCode:(null==e?void 0:e.administrativeArea)||\"\",customFields:[]}}_getBraintreeDeviceData(){return ee(this,void 0,void 0,function*(){try{const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e}catch(e){}})}}const ie=E(n=>{const{getHost:o}=n.getState(),a=new c(n);return new te(e({host:o()}),n,new R,new I(new O(i(),window,a)),new j(new t))},[{id:\"applepay\"}]);export{ie as createApplePayButtonStrategy,Y as createApplePayCustomerStrategy,q as createApplePayPaymentStrategy};\n//# sourceMappingURL=apple-pay.js.map"
  },
  {
    "path": "dist/esm/integrations/bigcommerce-payments.js",
    "content": "import{createScriptLoader as e,getScriptLoader as t}from\"@bigcommerce/script-loader\";import{createFormPoster as i}from\"@bigcommerce/form-poster\";import{createRequestSender as n}from\"@bigcommerce/request-sender\";import{isEqual as o,isNil as r,noop as a,omit as s,omitBy as d}from\"lodash\";var l;class c extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class m extends c{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(l||(l={}));class u extends c{constructor(e){super(function(e){switch(e){case l.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case l.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case l.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case l.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case l.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case l.MissingCheckoutConfig:case l.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case l.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case l.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case l.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case l.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case l.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case l.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}var h=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class y{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,i){return h(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsFastlaneSdk){const n=this.getPayPalFastlaneSdkConfiguration(e,t,i);if(yield this.loadPayPalSdk(n),!this.window.bigCommercePaymentsFastlaneSdk)throw new m}return this.window.bigCommercePaymentsFastlaneSdk})}getPayPalGooglePaySdk(e,t,i,n){return h(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsGooglePay||n){const n=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,i);yield this.loadPayPalSdk(n)}if(!this.window.bigCommercePaymentsGooglePay)throw new m;return this.window.bigCommercePaymentsGooglePay})}getPayPalApmsSdk(e,t){return h(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsApms){const i=this.getPayPalApmSdkConfiguration(e,t);if(yield this.loadPayPalSdk(i),!this.window.bigCommercePaymentsApms)throw new m}return this.window.bigCommercePaymentsApms})}getPayPalMessages(e,t){return h(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsMessages){const i=this.getPayPalSdkMessagesConfiguration(e,t);yield this.loadPayPalSdk(i)}if(!this.window.bigCommercePaymentsMessages)throw new m;return this.window.bigCommercePaymentsMessages})}loadPayPalSdk({options:e,attributes:t}){return h(this,void 0,void 0,function*(){const i=this.transformConfig(e),n=this.transformConfig(t),o=`https://www.paypal.com/sdk/js?${new URLSearchParams(i).toString()}`;yield this.scriptLoader.loadScript(o,{async:!0,attributes:n})})}getPayPalFastlaneSdkConfiguration(e,t,i){const{clientToken:n,initializationData:o}=e;if(!o||!o.clientId)throw new u(l.MissingPaymentMethod);const{intent:r,clientId:a,merchantId:s,attributionId:d}=o;return{options:{\"client-id\":a,\"merchant-id\":s,commit:!0,components:[\"fastlane\",\"three-domain-secure\"],currency:t,intent:r},attributes:{\"data-client-metadata-id\":i.replace(/-/g,\"\"),\"data-namespace\":\"bigCommercePaymentsFastlaneSdk\",\"data-partner-attribution-id\":d,\"data-sdk-client-token\":n}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,i=!0){const{clientToken:n,initializationData:o}=e;if(!o||!o.clientId)throw new u(l.MissingPaymentMethod);const{intent:r,clientId:a,merchantId:s,buyerCountry:d,attributionId:c,isHostedCheckoutEnabled:m,isDeveloperModeApplicable:h}=o,y=m||i;return{options:Object.assign({\"client-id\":a,\"merchant-id\":s,commit:y,components:[\"googlepay\"],currency:t,intent:r},h&&{\"buyer-country\":d}),attributes:{\"data-partner-attribution-id\":c,\"data-client-token\":n,\"data-namespace\":\"bigCommercePaymentsGooglePay\"}}}getPayPalApmSdkConfiguration(e,t){const{initializationData:i}=e;if(!i||!i.clientId)throw new u(l.MissingPaymentMethod);const{intent:n,clientId:o,merchantId:r,buyerCountry:a,attributionId:s,isDeveloperModeApplicable:d,availableAlternativePaymentMethods:c=[],enabledAlternativePaymentMethods:m=[]}=i,h=this.filterFundingOptions(m),y=this.filterFundingOptions(c.filter(e=>!m.includes(e)));return{options:Object.assign({\"client-id\":o,\"merchant-id\":r,\"enable-funding\":h.length>0?h:void 0,\"disable-funding\":y.length>0?y:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:n},d&&{\"buyer-country\":a}),attributes:{\"data-partner-attribution-id\":s,\"data-namespace\":\"bigCommercePaymentsApms\"}}}getPayPalSdkMessagesConfiguration(e,t){const{initializationData:i}=e;if(!i||!i.clientId)throw new u(l.MissingPaymentMethod);const{clientId:n,merchantId:o,attributionId:r,isDeveloperModeApplicable:a,buyerCountry:s}=i;return{options:Object.assign({\"client-id\":n,\"merchant-id\":o,components:[\"messages\"],currency:t},a&&{\"buyer-country\":s}),attributes:{\"data-namespace\":\"bigCommercePaymentsMessages\",\"data-partner-attribution-id\":r}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(i=>{const n=e[i];null==n||\"\"===n||Array.isArray(n)&&0===n.length||(t=Object.assign(Object.assign({},t),{[i]:Array.isArray(n)?n.join(\",\"):n}))}),t}}function g(){return new y(e())}function p(e,t){return Object.assign(e,{resolveIds:t})}const v={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},b=\"embedded-checkout-loading-indicator-rotation\";class f{constructor(e){this.styles=Object.assign(Object.assign({},v),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${b} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(i=>{e.style.setProperty(i,t[i])})}defineAnimation(){var e;if(document.getElementById(b))return;const t=document.createElement(\"style\");t.id=b,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${b} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}const P={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"};class S extends c{constructor(e){super(e||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}const I={body:{},headers:{},status:0};class C extends c{constructor(e,{message:t,errors:i}={}){const{body:n,headers:o,status:r}=e||I;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=n,this.headers=o,this.status=r,this.errors=i||[]}}var w,O,_,k,A,E,T,F;!function(e){e.BuyNow=\"BUY_NOW\"}(w||(w={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(O||(O={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(_||(_={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(k||(k={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(A||(A={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(E||(E={})),function(e){e.OXXO=\"oxxo\"}(T||(T={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(F||(F={}));var z=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class B{constructor(e,t,i,n){this.formPoster=e,this.paymentIntegrationService=t,this.bigCommercePaymentsRequestSender=i,this.bigCommercePaymentsScriptLoader=n}loadPayPalSdk(e,t,i,n){return z(this,void 0,void 0,function*(){const o=this.paymentIntegrationService.getState(),r=t||o.getCartOrThrow().currency.code,a=o.getPaymentMethodOrThrow(e);return this.paypalSdk=yield this.bigCommercePaymentsScriptLoader.getPayPalSDK(a,r,i,n),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new m;return this.paypalSdk}createBuyNowCartOrThrow(e){return z(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new u(l.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new S}})}createOrder(e,t){return z(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:n}=yield this.bigCommercePaymentsRequestSender.createOrder(e,Object.assign({cartId:i},t));return n})}createOrderCardFields(e,t){return z(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:n,setupToken:o}=yield this.bigCommercePaymentsRequestSender.createOrder(e,Object.assign({cartId:i},t));return Object.assign({orderId:n},o?{setupToken:o}:{})})}updateOrder(e){return z(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),i=t.getCartOrThrow();let n;e||(n=t.getConsignmentsOrThrow()[0]);try{yield this.bigCommercePaymentsRequestSender.updateOrder({availableShippingOptions:e?[]:null==n?void 0:n.availableShippingOptions,cartId:i.id,selectedShippingOption:e?null:null==n?void 0:n.selectedShippingOption})}catch(e){throw new C}})}getOrderStatus(e,t){return z(this,void 0,void 0,function*(){try{const{status:i}=yield this.bigCommercePaymentsRequestSender.getOrderStatus(e,t);return i}catch(e){throw new C}})}tokenizePayment(e,t){const i=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new u(l.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},i.source===w.BuyNow&&{cart_id:i.id}))}submitPayment(e,t,i){return z(this,void 0,void 0,function*(){const n={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:n},i?{gatewayId:i}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],i=t.availableShippingOptions||[],n=i.find(e=>e.isRecommended),o=(e?i.find(t=>t.id===e):i.find(e=>{var i;return e.id===(null===(i=t.selectedShippingOption)||void 0===i?void 0:i.id)}))||n||i[0];if(!o)throw new Error(\"Your order can't be shipped to this address\");return o}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,i;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(i=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===i?void 0:i.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:i}=e,{address:n,name:{full_name:o}}=i[0].shipping,[r,...a]=o.split(\" \");return this.getAddress({firstName:r,lastName:a.join(\" \"),email:t.email_address,address1:n.address_line_1,address2:n.address_line_2,city:n.admin_area_2,countryCode:n.country_code,postalCode:n.postal_code,stateOrProvinceCode:n.admin_area_1})}getValidButtonStyle(e){const{color:t,height:i,label:n,shape:o}=e||{},a={color:t&&A[t]?t:void 0,height:this.getValidHeight(i),label:n&&k[n]?n:void 0,shape:o&&E[o]?o:void 0};return d(a,r)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}const D=\"This API endpoint is for internal use only and may change in the future\";var x;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(x||(x={}));const M=x,N={\"X-Checkout-SDK-Version\":\"1.916.1\"};var U=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class j{constructor(e){this.requestSender=e}createOrder(e,t){return U(this,void 0,void 0,function*(){const i=`/api/storefront/payment/${e}`,n=t,o=Object.assign({\"X-API-INTERNAL\":D,\"Content-Type\":M.Json},N);return(yield this.requestSender.post(i,{headers:o,body:n})).body})}updateOrder(e){return U(this,void 0,void 0,function*(){const t=e,i=Object.assign({\"X-API-INTERNAL\":D,\"Content-Type\":M.Json},N);return(yield this.requestSender.put(\"/api/storefront/initialization/bigcommerce_payments\",{headers:i,body:t})).body})}getOrderStatus(e=\"bigcommerce_payments\",t){return U(this,void 0,void 0,function*(){const i=`/api/storefront/initialization/${e}`,n=Object.assign({\"X-API-INTERNAL\":D,\"Content-Type\":M.Json},N);return(yield this.requestSender.get(i,Object.assign({headers:n},t))).body})}}var V=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class R{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,i,n){return V(this,void 0,void 0,function*(){const o=this.getPayPalSdkScriptConfigOrThrow(e,t,i);return this.loadPayPalSDK(o,n)})}loadPayPalSDK(e,t=!1){return V(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsPayPalSDK||t){const t=this.transformConfig(e.options),i=this.transformConfig(e.attributes),n=`https://www.paypal.com/sdk/js?${new URLSearchParams(t).toString()}`;yield this.scriptLoader.loadScript(n,{async:!0,attributes:i})}if(!this.window.bigCommercePaymentsPayPalSDK)throw new m;return this.window.bigCommercePaymentsPayPalSDK})}getPayPalSdkScriptConfigOrThrow(e,t,i=!0){const{id:n,clientToken:o,initializationData:r}=e;if(!(null==r?void 0:r.clientId))throw new u(l.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:d,buyerCountry:c,attributionId:m,isVenmoEnabled:h,isHostedCheckoutEnabled:y,isPayPalCreditAvailable:g,isDeveloperModeApplicable:p,availableAlternativePaymentMethods:v=[],enabledAlternativePaymentMethods:b=[],isGooglePayEnabled:f}=r,P=y||i,S=\"bigcommerce_payments_creditcards\"===n,I=S?[\"card\"]:[],C=S?[]:[\"card\"],w=g?[\"credit\",\"paylater\"]:[],O=g?[]:[\"credit\",\"paylater\"],_=h?[\"venmo\"]:[],k=h?[]:[\"venmo\"],A=v.filter(e=>!b.includes(e)),E=f?[\"googlepay\"]:[],T=i?[\"card-fields\"]:[],F=this.filterFundingOptions([...C,...O,...k,...A]),z=this.filterFundingOptions([...I,...w,..._,...b]);return{options:Object.assign({\"client-id\":s,\"merchant-id\":d,\"enable-funding\":z.length>0?z:void 0,\"disable-funding\":F.length>0?F:void 0,commit:P,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...E,...T],currency:t,intent:a},p&&{\"buyer-country\":c}),attributes:{\"data-partner-attribution-id\":m,\"data-client-token\":o,\"data-namespace\":\"bigCommercePaymentsPayPalSDK\"}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(i=>{const n=e[i];null==n||\"\"===n||Array.isArray(n)&&0===n.length||(t=Object.assign(Object.assign({},t),{[i]:Array.isArray(n)?n.join(\",\"):n}))}),t}}const L=e=>{const{getHost:o}=e.getState();return new B(i(),e,new j(n({host:o()})),new R(t()))},$=function({styles:e}){const t={};return e.color&&(t.color=e.color),e.layout&&(t.layout=e.layout),(e[\"logo-type\"]||e[\"logo-position\"])&&(t.logo={},e[\"logo-type\"]&&(t.logo.type=e[\"logo-type\"]),e[\"logo-position\"]&&(t.logo.position=e[\"logo-position\"])),e.ratio&&(t.ratio=e.ratio),(e[\"text-color\"]||e[\"text-size\"])&&(t.text={},e[\"text-color\"]&&(t.text.color=e[\"text-color\"]),e[\"text-size\"]&&(t.text.size=+e[\"text-size\"])),t};class q extends c{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class H extends q{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class G extends C{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class Y extends c{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}function K(e){return!(\"object\"!=typeof e||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument)}function W(e){return Boolean(e.instrumentId)}function J(e){return\"object\"==typeof e&&null!==e&&\"bigpayToken\"in e&&\"defaultInstrument\"in e&&\"provider\"in e&&\"trustedShippingAddress\"in e&&\"method\"in e&&\"type\"in e}var X=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class Z{constructor(e,t,i,n){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.paypalSdkHelper=i,this.loadingIndicator=n}initialize(e){return X(this,void 0,void 0,function*(){const{methodId:t,bigcommerce_payments:i}=e||{};if(this.bigcommerce_payments=i,!t)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new q('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(t);const n=this.paymentIntegrationService.getState(),o=n.getPaymentMethodOrThrow(t),{container:r,bannerContainerId:a}=i,{orderId:s,paypalBNPLConfiguration:d=[],isPayPalCreditAvailable:l}=o.initializationData||{};if(void 0!==a){if(!document.getElementById(a))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=null==d?void 0:d.find(({id:e})=>\"checkout\"===e);if(l||!(null==e?void 0:e.status))return;const t=yield this.paypalSdkHelper.getPayPalMessages(o,n.getCartOrThrow().currency.code);return t&&\"function\"==typeof(null==t?void 0:t.Messages)?this.renderMessages(t,a,e):void console.error(\"[BC PayPalCommerce PayLater]: banner could not be rendered, due to issues with loading PayPal SDK\")}s?this.orderId=s:(this.loadingIndicatorContainer=null==r?void 0:r.split(\"#\")[1],yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(t),i.onInit&&\"function\"==typeof i.onInit&&i.onInit(()=>this.renderButton(t,i)),(void 0===i.shouldRenderPayPalButtonOnInitialization||i.shouldRenderPayPalButtonOnInitialization)&&this.renderButton(t,i))})}execute(e,t){return X(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(i[n[o]]=e[n[o]])}return i}(e,[\"payment\"]),{onError:o}=this.bigcommerce_payments||{};if(!i)throw new H([\"payment\"]);const{methodId:r,paymentData:a}=i;if(this.isPayPalVaultedInstrumentPaymentData(a)&&!this.orderId&&(this.orderId=yield this.createOrder()),!this.orderId)throw new G;const s=this.isPayPalVaultedInstrumentPaymentData(a)?this.prepareVaultedInstrumentPaymentPayload(r,this.orderId,a):this.preparePaymentPayload(r,this.orderId,a);try{yield this.paymentIntegrationService.submitOrder(n,t),yield this.paymentIntegrationService.submitPayment(s)}catch(e){return this.isProviderError(e)&&(yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i.methodId),yield new Promise((e,t)=>{var n;this.bigcommerce_payments&&(null===(n=this.paypalButton)||void 0===n||n.close(),this.renderButton(i.methodId,this.bigcommerce_payments),this.handleError(new Error(\"INSTRUMENT_DECLINED\"),o)),t()})),this.handleError(e,o),Promise.reject()}})}finalize(){return Promise.reject(new Y)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}prepareVaultedInstrumentPaymentPayload(e,t,i){const{instrumentId:n,shouldSetAsDefaultInstrument:o}=i,r=!this.isTrustedVaultingFlow(i);return r?{methodId:e,paymentData:{shouldSaveInstrument:r,shouldSetAsDefaultInstrument:o,formattedPayload:{paypal_account:{order_id:t}}}}:{methodId:e,paymentData:{instrumentId:n,shouldSetAsDefaultInstrument:o,formattedPayload:{paypal_account:{order_id:t},bigpay_token:{token:n}}}}}preparePaymentPayload(e,t,i){const{shouldSaveInstrument:n=!1,shouldSetAsDefaultInstrument:o=!1}=K(i)?i:{};return{methodId:e,paymentData:{shouldSaveInstrument:n,shouldSetAsDefaultInstrument:o,formattedPayload:{paypal_account:{order_id:t}}}}}renderButton(e,t){const i=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:o}=n.initializationData||{},{checkoutPaymentButtonStyles:r}=o||{},{container:a,onError:s,onRenderButton:d,onValidate:l,submitForm:c}=t;if(!a)throw new q('Unable to initialize payment because \"container\" argument is not provided.');const m={fundingSource:i.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(r),createOrder:()=>this.createOrder(),onClick:(e,t)=>this.handleClick(t,l),onApprove:e=>this.handleApprove(e,c),onError:e=>this.handleError(e,s),onCancel:()=>this.toggleLoadingIndicator(!1)};this.paypalButton=i.Buttons(m),this.paypalButton.isEligible()&&(d&&\"function\"==typeof d&&d(),this.paypalButton.render(a))}handleClick(e,t){return X(this,void 0,void 0,function*(){const{resolve:i,reject:n}=e;yield null==t?void 0:t(()=>(this.toggleLoadingIndicator(!0),i()),n)})}handleApprove({orderID:e},t){this.orderId=e,null==t||t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createOrder(){return X(this,void 0,void 0,function*(){const e=this.getFieldsValues();return this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_paymentscheckout\",{shouldSaveInstrument:(null==e?void 0:e.shouldSaveInstrument)||!1})})}getFieldsValues(){const{getFieldsValues:e}=this.bigcommerce_payments||{};return\"function\"==typeof e?e():void 0}isTrustedVaultingFlow(e){if(e&&W(e)){const t=this.paymentIntegrationService.getState().getInstruments(),i=null==t?void 0:t.find(t=>J(t)&&t.bigpayToken===e.instrumentId);return!(J(i)&&!i.trustedShippingAddress)}return!1}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isPayPalVaultedInstrumentPaymentData(e){return!!e&&W(e)&&K(e)}renderMessages(e,t,i){const n={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:$(i)};e.Messages(n).render(`#${t}`)}isProviderError(e){var t,i,n;return!!function(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e}(e)&&\"INSTRUMENT_DECLINED\"===(null===(n=null===(i=((null===(t=null==e?void 0:e.errors)||void 0===t?void 0:t.filter(e=>e.provider_error))||[])[0])||void 0===i?void 0:i.provider_error)||void 0===n?void 0:n.code)}}const Q=p(e=>new Z(e,L(e),g(),new f({containerStyles:P})),[{id:\"bigcommerce_payments\"}]);var ee,te,ie,ne,oe,re,ae,se,de;!function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(ee||(ee={}));class le{static get(e){const t=`${encodeURIComponent(`${e}`)}=`,i=document.cookie;let n=null;const o=i.indexOf(t);if(o>-1){let e=i.indexOf(\";\",o);-1===e&&(e=i.length),n=decodeURIComponent(i.substring(o+t.length,e))}return n}static set(e,t,i={secure:!0}){let n=`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;const{expires:o,path:r,domain:a,secure:s}=i;if(o)n+=`; expires=${o.toUTCString()}`;else{const e=new Date,t=60;e.setTime(e.getTime()+60*t*1e3),n+=`; expires=${e.toUTCString()}`}r&&(n+=`; path=${r}`),a&&(n+=`; domain=${a}`),s&&(n+=\"; secure\"),document.cookie=n}static remove(e,t){le.set(e,\"\",Object.assign({expires:new Date(0)},t))}}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(te||(te={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(ie||(ie={})),function(e){e.Always=\"SCA_ALWAYS\"}(ne||(ne={})),function(e){e.Succeeded=\"succeeded\",e.Cancelled=\"cancelled\",e.Errored=\"errored\"}(oe||(oe={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(re||(re={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(ae||(ae={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(se||(se={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"canceled\",e.UNRECOGNIZED=\"unrecognized\"}(de||(de={}));var ce=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class me{constructor(){this.window=window}initializePayPalFastlane(e,t,i){return ce(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\"),window.localStorage.setItem(\"axoEnv\",\"sandbox\")),!this.window.bigCommercePaymentsFastlane){const t={root:{backgroundColorPrimary:\"transparent\"}};this.window.bigCommercePaymentsFastlane=yield e.Fastlane({styles:i||t})}return this.window.bigCommercePaymentsFastlane})}getPayPalFastlaneOrThrow(){if(!this.window.bigCommercePaymentsFastlane)throw new m;return this.window.bigCommercePaymentsFastlane}lookupCustomerOrThrow(e){return ce(this,void 0,void 0,function*(){return this.getPayPalFastlaneOrThrow().identity.lookupCustomerByEmail(e)})}triggerAuthenticationFlowOrThrow(e){return ce(this,void 0,void 0,function*(){return e?this.getPayPalFastlaneOrThrow().identity.triggerAuthenticationFlow(e):{}})}updateStorageSessionId(e){const t=new Date;t.setDate(t.getDate()+14);const i={expires:t,secure:!0};le.set(\"bc-fastlane-sessionId\",e,i)}removeStorageSessionId(){le.remove(\"bc-fastlane-sessionId\")}getStorageSessionId(){return le.get(\"bc-fastlane-sessionId\")||\"\"}mapPayPalFastlaneProfileToBcCustomerData(e,t){var i,n,o;const{authenticationState:r,profileData:a}=t,s=null===(o=null===(n=null===(i=null==a?void 0:a.card)||void 0===i?void 0:i.paymentSource)||void 0===n?void 0:n.card)||void 0===o?void 0:o.billingAddress,d=null==a?void 0:a.shippingAddress,l=null==a?void 0:a.name,c=null==a?void 0:a.card,m=d?this.mapPayPalToBcAddress(d.address,d.name,d.phoneNumber):void 0,u=s&&l?this.mapPayPalToBcAddress(s,l,null==d?void 0:d.phoneNumber):void 0,h=c?this.mapPayPalToBcInstrument(e,c):[],y=this.filterAddresses([m,u]);return{authenticationState:r||de.UNRECOGNIZED,addresses:y,billingAddress:u,shippingAddress:m,instruments:h}}mapPayPalToBcInstrument(e,t){const{id:i,paymentSource:n}=t,{brand:o,expiry:r,lastDigits:a}=n.card,[s,d]=r.split(\"-\");return[{bigpayToken:i,brand:o,defaultInstrument:!1,expiryMonth:d,expiryYear:s,iin:\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:ee.PAN,type:\"card\"}]}mapBcToPayPalAddress(e){return{company:(null==e?void 0:e.company)||\"\",addressLine1:(null==e?void 0:e.address1)||\"\",addressLine2:(null==e?void 0:e.address2)||\"\",adminArea1:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",adminArea2:(null==e?void 0:e.city)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\"}}mapPayPalToBcAddress(e,t,i,n){const[o,r]=t.fullName.split(\" \"),a=(null==i?void 0:i.nationalNumber)||\"\",s=(null==i?void 0:i.countryCode)||\"\";return{id:Date.now(),type:\"paypal-address\",firstName:t.firstName||o||\"\",lastName:t.lastName||r||\"\",company:e.company||\"\",address1:e.addressLine1,address2:e.addressLine2||\"\",city:e.adminArea2,stateOrProvince:e.adminArea1,stateOrProvinceCode:e.adminArea1,country:e.countryCode||\"\",countryCode:e.countryCode||\"\",postalCode:e.postalCode,phone:s+a,customFields:n||[]}}filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this.isEqualAddresses(e,t))?e:[...e,t]:e,[])}isEqualAddresses(e,t){return o(this.normalizeAddress(e),this.normalizeAddress(t))}normalizeAddress(e){return s(e,[\"id\",\"phone\"])}}function ue(){return new me}function he(e){return\"string\"!=typeof e}function ye(e,t){if(t||e)return function(e){var t,i;const n={},o=d(e.root,he),r=d(e.input,he),a=d(e.toggle,he),s=d(null===(t=e.text)||void 0===t?void 0:t.body,he),l=d(null===(i=e.text)||void 0===i?void 0:i.caption,he),c=e.branding;return Object.keys(o).length&&(n.root=o),Object.keys(r).length&&(n.input=r),Object.keys(a).length&&(n.toggle=a),Object.keys(s).length&&(n.text={},n.text.body=s),Object.keys(l).length&&(n.text=Object.assign({},n.text),n.text.caption=l),c&&(n.branding=c),n}(function(e,t){var i,n,o,r,a,s,d,l,c,m,u,h,y,g,p,v,b,f,P,S,I,C;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(m=null==t?void 0:t.input)||void 0===m?void 0:m.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(y=null==t?void 0:t.toggle)||void 0===y?void 0:y.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(g=null==t?void 0:t.toggle)||void 0===g?void 0:g.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(v=null===(p=null==t?void 0:t.text)||void 0===p?void 0:p.body)||void 0===v?void 0:v.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(f=null===(b=null==t?void 0:t.text)||void 0===b?void 0:b.body)||void 0===f?void 0:f.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(S=null===(P=null==t?void 0:t.text)||void 0===P?void 0:P.caption)||void 0===S?void 0:S.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(C=null===(I=null==t?void 0:t.text)||void 0===I?void 0:I.caption)||void 0===C?void 0:C.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}function ge(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}function pe(e,t,i=!0){var n;return null!==(n=e[t])&&void 0!==n?n:i}var ve=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class be{constructor(e,t,i,n){this.paymentIntegrationService=e,this.bigCommercePaymentsRequestSender=t,this.bigCommercePaymentsSdk=i,this.bigCommercePaymentsFastlaneUtils=n}initialize(e){var t,i;return ve(this,void 0,void 0,function*(){const{methodId:n,bigcommerce_payments_fastlane:o}=e;if(!n)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(this.methodId=n,!o)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_fastlane\" argument is not provided.');if(this.bigcommerce_payments_fastlane=o,!o.onInit||\"function\"!=typeof o.onInit)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_fastlane.onInit\" argument is not provided or it is not a function.');if(!o.onChange||\"function\"!=typeof o.onChange)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_fastlane.onChange\" argument is not provided or it is not a function.');yield this.paymentIntegrationService.loadPaymentMethod(n);const r=this.paymentIntegrationService.getState(),a=r.getCartOrThrow(),s=r.getPaymentMethodOrThrow(n),{isDeveloperModeApplicable:d,isFastlaneStylingEnabled:l}=s.initializationData||{};this.threeDSVerificationMethod=null===(t=s.initializationData)||void 0===t?void 0:t.threeDSVerificationMethod,this.paypalFastlaneSdk=yield this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(s,a.currency.code,a.id);const c=ye(l?null===(i=null==s?void 0:s.initializationData)||void 0===i?void 0:i.fastlaneStyles:{},null==o?void 0:o.styles);yield this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(this.paypalFastlaneSdk,!!d,c),this.shouldRunAuthenticationFlow()&&(yield this.runPayPalAuthenticationFlowOrThrow(n)),yield this.initializePayPalPaymentComponent(),o.onInit(e=>this.renderPayPalPaymentComponent(e)),o.onChange(()=>this.handlePayPalStoredInstrumentChange(n))})}execute(e,t){return ve(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(i[n[o]]=e[n[o]])}return i}(e,[\"payment\"]);if(!i)throw new H([\"payment\"]);const{paymentData:o,methodId:r}=i,a=o&&W(o);try{yield this.paymentIntegrationService.submitOrder(n,t);const e=a?yield this.prepareVaultedInstrumentPaymentPayload(r,o):yield this.preparePaymentPayload(r,o);yield this.paymentIntegrationService.submitPayment(e),this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId()}catch(e){if(function(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"response\"in e&&\"name\"in e.response}(e)&&\"INVALID_REQUEST\"===e.response.name){const e={translationKey:\"payment.errors.invalid_request_error\"};return this.handleError(e),Promise.reject()}if(e instanceof Error&&\"FastlaneError\"!==e.name)throw e;return Promise.reject()}})}finalize(){return Promise.reject(new Y)}deinitialize(){return ve(this,void 0,void 0,function*(){return Promise.resolve()})}shouldRunAuthenticationFlow(){const e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),i=e.getCustomerOrThrow(),n=e.getPaymentProviderCustomer(),o=ge(n)?n:{},r=this.bigCommercePaymentsFastlaneUtils.getStorageSessionId();return!(!i.isGuest||(null==o?void 0:o.authenticationState)===de.CANCELED||(null==o?void 0:o.authenticationState)||r!==t.id)}runPayPalAuthenticationFlowOrThrow(e){return ve(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),i=t.getCartOrThrow(),n=t.getCustomer(),o=t.getBillingAddress(),r=(null==n?void 0:n.email)||(null==o?void 0:o.email)||\"\",{customerContextId:a}=yield this.bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow(r),s=yield this.bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow(a),{authenticationState:d,addresses:l,instruments:c}=this.bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,s);yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:d,addresses:l,instruments:c}),s.authenticationState===de.CANCELED?this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId():this.bigCommercePaymentsFastlaneUtils.updateStorageSessionId(i.id)}catch(e){}})}initializePayPalPaymentComponent(){return ve(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),t=e.phone,i=`${e.firstName} ${e.lastName}`.trim(),n=this.bigCommercePaymentsFastlaneUtils.getPayPalFastlaneOrThrow(),o={fields:Object.assign({cardholderName:{prefill:i,enabled:!0}},t&&{phoneNumber:{prefill:t}})};this.paypalComponentMethods=yield n.FastlaneCardComponent(o)})}renderPayPalPaymentComponent(e){const t=this.getPayPalComponentMethodsOrThrow();if(!e)throw new q('Unable to render card component because \"container\" argument is not provided.');t.render(e)}getPayPalComponentMethodsOrThrow(){if(!this.paypalComponentMethods)throw new m;return this.paypalComponentMethods}prepareVaultedInstrumentPaymentPayload(e,t){return ve(this,void 0,void 0,function*(){const{instrumentId:i}=t,n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),o=this.isBigcommercePaymentsFastlaneThreeDSAvailable()&&n.config.is3dsEnabled?yield this.get3DSNonce(i):i;return yield this.createOrder(o),{methodId:e,paymentData:{formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:o}}}}})}preparePaymentPayload(e,t){return ve(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),n=i.getBillingAddressOrThrow(),o=i.getPaymentMethodOrThrow(e),r=`${n.firstName} ${n.lastName}`.trim(),{getPaymentToken:a}=this.getPayPalComponentMethodsOrThrow(),{id:s}=yield a({name:{fullName:r},billingAddress:this.bigCommercePaymentsFastlaneUtils.mapBcToPayPalAddress(n)}),d=this.isBigcommercePaymentsFastlaneThreeDSAvailable()&&o.config.is3dsEnabled,{shouldSaveInstrument:l=!1,shouldSetAsDefaultInstrument:c=!1}=K(t)?t:{},m=d?yield this.get3DSNonce(s):s;return yield this.createOrder(m),{methodId:e,paymentData:Object.assign(Object.assign({},t),{shouldSaveInstrument:l,shouldSetAsDefaultInstrument:c,formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:m}}})}})}createOrder(e){return ve(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getCartOrThrow().id;if(this.methodId){const{orderId:i}=yield this.bigCommercePaymentsRequestSender.createOrder(this.methodId,{cartId:t,fastlaneToken:e});this.orderId=i}})}get3DSNonce(e){var t;return ve(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),n=i.getCartOrThrow(),o=i.getOrderOrThrow(),r=i.getStoreConfigOrThrow().links.checkoutLink,a=null===(t=this.paypalFastlaneSdk)||void 0===t?void 0:t.ThreeDomainSecureClient;if(!a)throw new m;const s={amount:o.orderAmount.toFixed(2),currency:n.currency.code,nonce:e,threeDSRequested:this.threeDSVerificationMethod===ne.Always,transactionContext:{experience_context:{locale:\"en-US\",return_url:r,cancel_url:r}}},d=yield a.isEligible(s);if(this.threeDSVerificationMethod===ne.Always&&!d)throw new G;if(d){const{liabilityShift:e,authenticationState:t,nonce:i}=yield a.show();if(e===O.No||e===O.Unknown||t===oe.Errored||t===oe.Cancelled)throw new G;if(t===oe.Succeeded&&[O.Yes,O.Possible].includes(e))return i}return e})}handlePayPalStoredInstrumentChange(e){return ve(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsFastlaneUtils.getPayPalFastlaneOrThrow(),{selectionChanged:i,selectedCard:n}=yield t.profile.showCardSelector();if(i){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomer(),i=ge(t)?t:{},o=this.bigCommercePaymentsFastlaneUtils.mapPayPalToBcInstrument(e,n)[0];return yield this.paymentIntegrationService.updatePaymentProviderCustomer(Object.assign(Object.assign({},i),{instruments:[o]})),o}})}isBigcommercePaymentsFastlaneThreeDSAvailable(){return pe(this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features,\"PROJECT-7080.bcp_fastlane_three_ds\")}handleError(e){var t;(null===(t=this.bigcommerce_payments_fastlane)||void 0===t?void 0:t.onError)&&\"function\"==typeof this.bigcommerce_payments_fastlane.onError&&this.bigcommerce_payments_fastlane.onError(e)}}const fe=p(e=>{const{getHost:t}=e.getState();return new be(e,new j(n({host:t()})),g(),ue())},[{id:\"bigcommerce_payments_fastlane\"}]);class Pe extends c{constructor(e){super(e||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var Se=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class Ie{constructor(e,t,i,n){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.loadingIndicator=i,this.paypalSdkHelper=n}initialize(e){return Se(this,void 0,void 0,function*(){const{methodId:t,bigcommerce_payments_paylater:i}=e||{};if(!t)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(t);const n=this.paymentIntegrationService.getState(),o=n.getPaymentMethodOrThrow(t),{paypalBNPLConfiguration:r=[],orderId:a}=o.initializationData||{},{bannerContainerId:s,container:d}=i;if(void 0!==s){if(!document.getElementById(s))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=r&&r.find(({id:e})=>\"checkout\"===e);if(!(null==e?void 0:e.status))return;const t=yield this.paypalSdkHelper.getPayPalMessages(o,n.getCartOrThrow().currency.code);return this.renderMessages(t,s,e)}a?this.orderId=a:(yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(t),this.loadingIndicatorContainer=null==d?void 0:d.split(\"#\")[1],this.renderButton(t,i))})}execute(e,t){return Se(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(i[n[o]]=e[n[o]])}return i}(e,[\"payment\"]);if(!i)throw new H([\"payment\"]);if(!this.orderId)throw new G;yield this.paymentIntegrationService.submitOrder(n,t),yield this.bigCommercePaymentsIntegrationService.submitPayment(i.methodId,this.orderId)})}finalize(){return Promise.reject(new Y)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.bigCommercePaymentsButtons)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){if(!(null==t?void 0:t.container))throw new q('Unable to initialize payment because \"container\" argument is not provided.');const i=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:o}=n.initializationData||{},{checkoutPaymentButtonStyles:r}=o||{},{container:a,onError:s,onRenderButton:d,onValidate:l,submitForm:c}=t,m=[i.FUNDING.PAYLATER,i.FUNDING.CREDIT];let u=!1;m.forEach(e=>{if(u)return;const t={fundingSource:e,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(r),createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onClick:(e,t)=>this.handleClick(t,l),onApprove:e=>this.handleApprove(e,c),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.bigCommercePaymentsButtons=i.Buttons(t),this.bigCommercePaymentsButtons.isEligible()||e!==i.FUNDING.PAYLATER){if(!this.bigCommercePaymentsButtons.isEligible()&&e===i.FUNDING.CREDIT)throw new Pe(`BigCommercePayments ${e} is not available for your region. Please use BigCommercePayments Checkout instead.`);d&&\"function\"==typeof d&&d(),this.bigCommercePaymentsButtons.render(a),u=!0}})}handleClick(e,t){return Se(this,void 0,void 0,function*(){const{resolve:i,reject:n}=e;t&&\"function\"==typeof t&&(yield t(()=>(this.toggleLoadingIndicator(!0),i()),n))})}handleApprove({orderID:e},t){this.orderId=e,t&&\"function\"==typeof t&&t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}renderMessages(e,t,i){const n={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:$(i)};e.Messages(n).render(`#${t}`)}}const Ce=p(e=>new Ie(e,L(e),new f({containerStyles:P}),g()),[{id:\"bigcommerce_payments_paylater\"}]);class we extends C{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}var Oe=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class _e{constructor(e,t,i,n=3e3,o=3e5){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.loadingIndicator=i,this.pollingInterval=n,this.maxPollingIntervalTime=o,this.pollingTimer=0,this.stopPolling=a}initialize(e){return Oe(this,void 0,void 0,function*(){const{gatewayId:t,methodId:i,bigcommerce_payments_ratepay:n}=e;if(!i)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new q('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!n)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_ratepay\" argument is not provided.');const{legalTextContainer:o,container:r,loadingContainerId:a}=n;if(!r)throw new q('Unable to initialize payment because \"options.container\" argument is not provided.');if(!o)throw new q('Unable to initialize payment because \"options.legalTextContainer\" argument is not provided.');if(!a)throw new q('Unable to initialize payment because \"options.loadingContainerId\" argument is not provided.');this.loadingIndicatorContainer=a;const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i,t),{merchantId:d}=s.initializationData||{};if(!d)throw new q(\"Unable to initialize payment because merchantId argument is not provided.\");this.bigcommerce_payments_ratepay=n,yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i),this.createFraudNetScript(d,i,t),this.loadFraudnetConfig(),this.renderLegalText(o,r)})}execute(e,t){return Oe(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(i[n[o]]=e[n[o]])}return i}(e,[\"payment\"]),{getFieldsValues:o}=this.bigcommerce_payments_ratepay||{};if(!i)throw new H([\"payment\"]);if(!o||\"function\"!=typeof o)throw new q('Unable to initialize payment because \"options.getFieldsValues\" argument is not provided.');this.toggleLoadingIndicator(!0);try{const e=yield this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_apmscheckout\",{metadataId:this.guid}),{ratepayBirthDate:r,ratepayPhoneNumber:a,ratepayPhoneCountryCode:s}=o(),d={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:i.methodId,rate_pay:{birth_date:this.normalizeDate(r),phone:{national_number:a,country_code:s.split(\"+\")[1]}},paypal_account:{order_id:e}}};return yield this.paymentIntegrationService.submitOrder(n,t),yield this.paymentIntegrationService.submitPayment({methodId:i.methodId,paymentData:d}),yield new Promise((e,t)=>{this.initializePollingMechanism(i.methodId,e,t,i.gatewayId)})}catch(e){return this.handleError(e),new Promise((e,t)=>t())}})}finalize(){return Promise.reject(new Y)}deinitialize(){const{legalTextContainer:e}=this.bigcommerce_payments_ratepay||{},t=document.querySelectorAll('[data-id=\"fraudnetScript\"]')[0],i=document.querySelectorAll('[data-id=\"fraudnetConfig\"]')[0];if(this.deinitializePollingMechanism(),t.remove(),i.remove(),e){const t=document.getElementById(e);null==t||t.remove()}return Promise.resolve()}normalizeDate(e){const t=this.formatDate(e.getDate()),i=this.formatDate(e.getMonth()+1);return`${e.getFullYear()}-${i}-${t}`}formatDate(e){return`${e<10?0:\"\"}${e}`}renderLegalText(e,t){const i=e,n=t.split(\"#\")[1],o=document.getElementById(n),r=null==o?void 0:o.parentNode,a=document.createElement(\"div\");a.style.marginBottom=\"20px\",a.setAttribute(\"id\",i),null==r||r.prepend(a);const s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),d=s.Legal({fundingSource:s.Legal.FUNDING.PAY_UPON_INVOICE});if(!document.getElementById(i))throw new q('Unable to initialize payment because \"legalTextContainerElement\" argument is not found.');d.render(`#${i}`)}handleError(e){const{onError:t}=this.bigcommerce_payments_ratepay||{};this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createFraudNetScript(e,t,i){const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,i),{testMode:o}=n.config,r=document.createElement(\"script\");r.setAttribute(\"type\",\"application/json\"),r.setAttribute(\"fncls\",\"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\"),r.setAttribute(\"data-id\",\"fraudnetScript\"),this.guid=this.generateGUID();const a={f:this.guid,s:`${e}_checkout-page`,sandbox:o};r.innerHTML=JSON.stringify(a),document.body.appendChild(r)}generateGUID(){let e=\"\";for(let t=0;t<32;t+=1)e+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"[Math.floor(62*Math.random())];return e}loadFraudnetConfig(){const e=document.createElement(\"script\");e.setAttribute(\"data-id\",\"fraudnetConfig\"),e.src=\"https://c.paypal.com/da/r/fb.js\",document.body.appendChild(e)}reinitializeStrategy(e){return Oe(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}initializePollingMechanism(e,t,i,n){return Oe(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const i=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(i),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const o=yield this.bigCommercePaymentsIntegrationService.getOrderStatus(\"bigcommerce_payments_apms\",{params:{useMetadata:!0}}),r=o===F.PollingStop,a=o===F.PollingError;if(r)return this.deinitializePollingMechanism(),t();if(a)return i();if(!r&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,i,n);yield this.reinitializeStrategy({methodId:e,gatewayId:n,bigcommerce_payments_ratepay:this.bigcommerce_payments_ratepay}),this.handleError(new we)}catch(e){this.handleError(e),i()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const ke=p(e=>new _e(e,L(e),new f({containerStyles:Object.assign(Object.assign({},P),{position:\"fixed\"})})),[{gateway:\"bigcommerce_payments_apms\",id:\"ratepay\"}]);var Ae;!function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\",e.CardExpiryVerification=\"cardExpiryVerification\"}(Ae||(Ae={}));const Ee=Ae;function Te(e){return Ee.CardNumber in e&&Ee.CardName in e&&Ee.CardExpiry in e}function Fe(e){return Ee.CardNumberVerification in e&&Ee.CardCodeVerification in e&&Ee.CardExpiryVerification in e}class ze extends c{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}var Be;!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(Be||(Be={}));class De extends c{constructor(e){super(function(e){switch(e){case Be.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case Be.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case Be.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case Be.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class xe extends c{constructor(e,t){super(t||\"Unable to proceed because the payment form contains invalid data.\"),this.details=e,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}var Me=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class Ne{constructor(e,t,i,n){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.bigCommercePaymentsSdk=i,this.bigCommercePaymentsFastlaneUtils=n}initialize(e){return Me(this,void 0,void 0,function*(){const{methodId:t,bigcommerce_payments_creditcards:i}=e,n=i,{form:o,onCreditCardFieldsRenderingError:r,onLoadComplete:a}=n||{};if(!t)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!o)throw new q('Unable to proceed because \"options.bigcommerce_payments_creditcards.form\" argument is not provided.');this.hostedFormOptions=o,this.isCreditCardForm=Te(o.fields),this.isCreditCardVaultedForm=Fe(o.fields)&&!this.hasUndefinedValues(),yield this.paymentIntegrationService.loadPaymentMethod(t),yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(t,void 0,!0,!0),(this.isCreditCardForm||this.isCreditCardVaultedForm)&&(yield this.initializeFields(o,r)),null==a||a(),this.shouldInitializePayPalFastlane(t)&&(yield this.initializePayPalFastlaneOrThrow(t))})}execute(e,t){return Me(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(i[n[o]]=e[n[o]])}return i}(e,[\"payment\"]),{methodId:o,paymentData:r}=i||{};if(!i||!o)throw new H([\"payment\"]);if(this.executionPaymentData=r,this.isCreditCardForm||this.isCreditCardVaultedForm)yield this.validateHostedFormOrThrow(),yield this.submitHostedForm();else{const{orderId:e}=yield this.bigCommercePaymentsIntegrationService.createOrderCardFields(\"bigcommerce_payments_creditcardscheckout\",this.getInstrumentParams());this.returnedOrderId=e}const a=this.preparePaymentPayload(o,r,this.returnedOrderId,this.returnedVaultedToken);yield this.paymentIntegrationService.submitOrder(n,t),yield this.paymentIntegrationService.submitPayment(a)})}finalize(){return Promise.reject(new Y)}deinitialize(){var e,t,i,n;return Me(this,void 0,void 0,function*(){return yield null===(e=this.cvvField)||void 0===e?void 0:e.close(),yield null===(t=this.expiryField)||void 0===t?void 0:t.close(),yield null===(i=this.numberField)||void 0===i?void 0:i.close(),yield null===(n=this.nameField)||void 0===n?void 0:n.close(),Promise.resolve()})}preparePaymentPayload(e,t,i,n){const{shouldSaveInstrument:o=!1,shouldSetAsDefaultInstrument:a=!1}=K(t)?t:{},s=t&&W(t)?t.instrumentId:void 0,l=d({verification_nonce:n,token:s},r);return{methodId:e,paymentData:{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a,instrumentId:s,formattedPayload:Object.assign(Object.assign({},n||s?{bigpay_token:l}:{}),i?{card_with_order:{order_id:i}}:{})}}}initializeFields(e,t){return Me(this,void 0,void 0,function*(){const{fields:i,styles:n}=e,o=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),r=this.getExecuteCallback(i),a=Object.assign({style:this.getInputStyles(n),onApprove:({orderID:e,vaultSetupToken:t,liabilityShift:i})=>{if(i===O.No||i===O.Unknown)throw new Error;return this.handleApprove({orderID:e,vaultSetupToken:t})},onError:()=>{throw new ze},inputEvents:{onChange:t=>this.onChangeHandler(e,t),onFocus:t=>this.onFocusHandler(e,t),onBlur:t=>this.onBlurHandler(e,t),onInputSubmitRequest:t=>this.onInputSubmitRequest(e,t)}},r);if(this.cardFields=yield o.CardFields(a),!this.cardFields.isEligible())throw new De(Be.PaymentNotInitialized);try{this.stylizeInputContainers(i),Te(i)&&(yield this.renderFields(i)),Fe(i)&&(yield this.renderVaultedFields(i))}catch(e){\"function\"==typeof t&&t(e)}})}getExecuteCallback(e){return Fe(e)?this.createVaultSetupTokenCallback():this.createOrderCallback()}createVaultSetupTokenCallback(){return{createVaultSetupToken:()=>Me(this,void 0,void 0,function*(){const{setupToken:e}=(yield this.bigCommercePaymentsIntegrationService.createOrderCardFields(\"bigcommerce_payments_creditcardscheckout\",Object.assign(Object.assign({},this.getInstrumentParams()),{setupToken:!0})))||{};return e})}}createOrderCallback(){return{createOrder:()=>Me(this,void 0,void 0,function*(){const{orderId:e}=(yield this.bigCommercePaymentsIntegrationService.createOrderCardFields(\"bigcommerce_payments_creditcardscheckout\",this.getInstrumentParams()))||{};return e})}}handleApprove({orderID:e,vaultSetupToken:t}){e&&(this.returnedOrderId=e),t&&(this.returnedVaultedToken=t)}renderFields(e){var t,i,n,o;return Me(this,void 0,void 0,function*(){const r=this.getCardFieldsOrThrow();(null===(t=e.cardCode)||void 0===t?void 0:t.containerId)&&(this.cvvField=r.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCode.containerId}`)),(null===(i=e.cardExpiry)||void 0===i?void 0:i.containerId)&&(this.expiryField=r.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiry.containerId}`)),(null===(n=e.cardName)||void 0===n?void 0:n.containerId)&&(this.nameField=r.NameField({placeholder:\"\"}),yield this.nameField.render(`#${e.cardName.containerId}`)),(null===(o=e.cardNumber)||void 0===o?void 0:o.containerId)&&(this.numberField=r.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumber.containerId}`))})}renderVaultedFields(e){var t,i,n;return Me(this,void 0,void 0,function*(){const o=this.getCardFieldsOrThrow();(null===(t=e.cardCodeVerification)||void 0===t?void 0:t.containerId)&&(this.cvvField=o.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCodeVerification.containerId}`)),(null===(i=e.cardExpiryVerification)||void 0===i?void 0:i.containerId)&&(this.expiryField=o.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiryVerification.containerId}`)),(null===(n=e.cardNumberVerification)||void 0===n?void 0:n.containerId)&&(this.numberField=o.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumberVerification.containerId}`))})}getInstrumentParams(){if(!this.executionPaymentData)return{};if(K(this.executionPaymentData)){const{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}=this.executionPaymentData;return{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}}if(W(this.executionPaymentData)){const{instrumentId:e}=this.executionPaymentData;return{instrumentId:e}}return{}}getFieldTypeByEmittedField({emittedBy:e}){return{fieldType:this.mapFieldType(e)}}submitHostedForm(){return Me(this,void 0,void 0,function*(){const e=this.getCardFieldsOrThrow(),t=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),i={billingAddress:{company:t.company,addressLine1:t.address1,addressLine2:t.address2,adminArea1:t.stateOrProvinceCode,adminArea2:t.city,postalCode:t.postalCode,countryCode:t.countryCode}};try{this.isCreditCardVaultedForm?yield e.submit():yield e.submit(i)}catch(e){throw new ze(\"Failed authentication. Please try to authorize again.\")}})}validateHostedFormOrThrow(){var e,t;return Me(this,void 0,void 0,function*(){const i=this.getCardFieldsOrThrow(),n=yield i.getState().then(e=>e),o=this.getValidityData(n);if(!o.isValid)throw null===(t=null===(e=this.hostedFormOptions)||void 0===e?void 0:e.onValidate)||void 0===t||t.call(e,o),new xe(this.mapValidationErrors(o.errors))})}getValidityData({fields:e}){const t=Object.assign({},e);delete t.cardNameField;const i=Object.keys(t);return{isValid:i.every(e=>{var i;return null===(i=t[e])||void 0===i?void 0:i.isValid}),errors:i.reduce((e,i)=>{var n;const o=this.mapFieldType(i);return Object.assign(Object.assign({},e),{[o]:(null===(n=t[i])||void 0===n?void 0:n.isValid)?void 0:[this.getInvalidErrorByFieldType(o)]})},{})}}getInvalidErrorByFieldType(e){switch(e){case Ee.CardCode:case Ee.CardCodeVerification:return{fieldType:e,message:\"Invalid card code\",type:\"invalid_card_code\"};case Ee.CardNumber:case Ee.CardNumberVerification:return{fieldType:e,message:\"Invalid card number\",type:\"invalid_card_number\"};case Ee.CardExpiry:case Ee.CardExpiryVerification:return{fieldType:e,message:\"Invalid card expiry\",type:\"invalid_card_expiry\"};default:return{fieldType:e,message:\"Invalid field\",type:\"invalid\"}}}mapValidationErrors(e={}){const t={};return Object.keys(e).forEach(i=>{var n,o;t[i]=[{message:(null===(o=null===(n=e[i])||void 0===n?void 0:n[0])||void 0===o?void 0:o.message)||\"\",type:i}]}),t}mapFieldType(e){switch(e){case\"name\":return Ee.CardName;case\"cardNumberField\":case\"number\":return this.isCreditCardForm?Ee.CardNumber:Ee.CardNumberVerification;case\"cardExpiryField\":case\"expiry\":return this.isCreditCardForm?Ee.CardExpiry:Ee.CardExpiryVerification;case\"cardCvvField\":case\"cvv\":return this.isCreditCardForm?Ee.CardCode:Ee.CardCodeVerification;default:throw new Error(\"Unexpected field type\")}}getCardFieldsOrThrow(){if(!this.cardFields)throw new De(Be.PaymentNotInitialized);return this.cardFields}getInputStyles(e){var t,i,n;const o={\"font-size\":(null===(t=null==e?void 0:e.default)||void 0===t?void 0:t.fontSize)||\"1rem\",\"font-family\":(null===(i=null==e?void 0:e.default)||void 0===i?void 0:i.fontFamily)||\"Montserrat, Arial, Helvetica, sans-serif\",\"font-weight\":(null===(n=null==e?void 0:e.default)||void 0===n?void 0:n.fontWeight)||\"400\",outline:\"none\",padding:\"9px 13px\"},r=Object.assign(Object.assign({},o),{color:\"#333333\"});return{input:r,\".invalid\":Object.assign(Object.assign({},o),{color:\"red\"}),\".valid\":r,\":focus\":r}}stylizeInputContainers(e){Object.values(e||{}).forEach(e=>{const t=document.getElementById(`${(null==e?void 0:e.containerId)||\"\"}`);t&&(t.style.padding=\"0px\",t.style.boxShadow=\"none\",t.style.border=\"none\",t.style.background=\"transparent\",t.style.marginBottom=\"10px\",t.style.marginLeft=\"-5px\")})}hasUndefinedValues(){return!this.hostedFormOptions||Object.values(this.hostedFormOptions.fields).some(e=>void 0===e)}onChangeHandler(e,t){var i;null===(i=null==e?void 0:e.onValidate)||void 0===i||i.call(e,this.getValidityData(t))}onFocusHandler(e,t){var i;null===(i=null==e?void 0:e.onFocus)||void 0===i||i.call(e,this.getFieldTypeByEmittedField(t))}onBlurHandler(e,t){var i;null===(i=null==e?void 0:e.onBlur)||void 0===i||i.call(e,this.getFieldTypeByEmittedField(t))}onInputSubmitRequest(e,t){var i;null===(i=null==e?void 0:e.onEnter)||void 0===i||i.call(e,this.getFieldTypeByEmittedField(t))}shouldInitializePayPalFastlane(e){var t,i;const n=this.paymentIntegrationService.getState(),o=n.getPaymentMethodOrThrow(e),r=n.getPaymentProviderCustomer(),a=(s=r)&&(\"authenticationState\"in s||\"addresses\"in s||\"instruments\"in s)?r:{};var s;return(null===(t=null==o?void 0:o.initializationData)||void 0===t?void 0:t.isAcceleratedCheckoutEnabled)&&(null===(i=null==o?void 0:o.initializationData)||void 0===i?void 0:i.isBigCommercePaymentsAnalyticsV2Enabled)&&!(null==a?void 0:a.authenticationState)}initializePayPalFastlaneOrThrow(e){return Me(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),i=t.getCartOrThrow(),n=t.getPaymentMethodOrThrow(e),{initializationData:o}=n;if(!(null==o?void 0:o.connectClientToken))return;const r=yield this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(n,i.currency.code,i.id);yield this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(r,!!(null==o?void 0:o.isDeveloperModeApplicable))}catch(e){}})}}const Ue=p(e=>new Ne(e,L(e),g(),ue()),[{id:\"bigcommerce_payments_creditcards\"}]);var je=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class Ve{constructor(e,t,i,n,o=3e3,r=3e5){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.bigCommercePaymentsSdkHelper=i,this.loadingIndicator=n,this.pollingInterval=o,this.maxPollingIntervalTime=r,this.pollingTimer=0,this.stopPolling=a,this.isPollingEnabled=!1}initialize(e){return je(this,void 0,void 0,function*(){const{gatewayId:t,methodId:i,bigcommerce_payments_apms:n}=e;if(this.bigCommercePaymentsAlternativeMethods=n,!i)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new q('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!n)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_apms\" argument is not provided.');const o=this.paymentIntegrationService.getState(),r=o.getPaymentMethodOrThrow(i,t),{orderId:a,shouldRenderFields:s}=r.initializationData||{},d=o.getStoreConfigOrThrow().checkoutSettings.features;this.isPollingEnabled=pe(d,\"PAYPAL-5624.bcp_ideal_polling\"),a?this.orderId=a:(this.paypalApms=yield this.bigCommercePaymentsSdkHelper.getPayPalApmsSdk(r,o.getCartOrThrow().currency.code),this.loadingIndicatorContainer=n.container.split(\"#\")[1],this.renderButton(i,t,n),s&&this.renderFields(i,n))})}execute(e,t){return je(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(i[n[o]]=e[n[o]])}return i}(e,[\"payment\"]);if(!i)throw new H([\"payment\"]);const{methodId:o,gatewayId:r}=i;if(!this.orderId)throw new G;this.isPollingEnabled&&\"ideal\"===o&&(yield new Promise((e,t)=>{this.initializePollingMechanism(o,e,t,r)})),this.isNonInstantPaymentMethod(o)||(yield this.paymentIntegrationService.submitOrder(n,t)),yield this.bigCommercePaymentsIntegrationService.submitPayment(o,this.orderId,r)})}finalize(){return Promise.reject(new Y)}deinitialize(){var e;return this.orderId=void 0,this.isPollingEnabled&&this.resetPollingMechanism(),null===(e=this.bigCommercePaymentsButton)||void 0===e||e.close(),Promise.resolve()}initializePollingMechanism(e,t,i,n){return je(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const i=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(i),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const o=yield this.bigCommercePaymentsIntegrationService.getOrderStatus(n),r=o===F.Approved,a=o===F.PollingError;if(r)return this.deInitializePollingMechanism(),t();if(a)return i();if(!r&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,i,n);yield this.reinitializeStrategy({methodId:e,gatewayId:n,bigCommercePaymentsAlternativeMethods:this.bigCommercePaymentsAlternativeMethods}),this.handleError(new we)}catch(e){i()}})}deInitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deInitializePollingMechanism()}reinitializeStrategy(e){return je(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}handleError(e){const{onError:t}=this.bigCommercePaymentsAlternativeMethods||{};this.isPollingEnabled&&this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderButton(e,t,i){const n=this.getPaypalAmpsSdkOrThrow(),o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t),{buttonStyle:r}=o.initializationData||{},{container:a,onError:s,onRenderButton:d,submitForm:l}=i,c={fundingSource:e,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(r),onInit:(e,t)=>i.onInitButton(t),createOrder:()=>this.onCreateOrder(e,t,i),onApprove:e=>this.handleApprove(e,l),onCancel:()=>{this.toggleLoadingIndicator(!1),this.deInitializePollingMechanism()},onError:e=>{this.deInitializePollingMechanism(),this.handleFailure(e,s)},onClick:(e,t)=>je(this,void 0,void 0,function*(){return i.onValidate(t.resolve,t.reject)})};this.bigCommercePaymentsButton=n.Buttons(c),this.bigCommercePaymentsButton.isEligible()&&(d&&\"function\"==typeof d&&d(),this.bigCommercePaymentsButton.render(a))}onCreateOrder(e,t,i){return je(this,void 0,void 0,function*(){const{onValidate:n}=i;yield n(()=>(this.toggleLoadingIndicator(!0),()=>Promise.resolve()),a);const o=yield this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_apms\");if(this.isNonInstantPaymentMethod(e)){const i={useStoreCredit:!1},n={params:{methodId:e,gatewayId:t}};yield this.paymentIntegrationService.submitOrder(i,n),yield this.bigCommercePaymentsIntegrationService.submitPayment(e,o,t)}return o})}handleApprove({orderID:e},t){this.orderId=e,t()}handleFailure(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderFields(e,t){const i=this.getPaypalAmpsSdkOrThrow(),n=this.paymentIntegrationService.getState(),{firstName:o,lastName:r,email:a}=n.getBillingAddressOrThrow(),{apmFieldsContainer:s,apmFieldsStyles:d}=t;if(!s)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_apms\" argument should contain \"apmFieldsContainer\".');const l=document.querySelector(s);l&&(l.innerHTML=\"\");const c={fundingSource:e,style:d||{},fields:{name:{value:`${o} ${r}`},email:{value:a}}};i.PaymentFields(c).render(s)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isNonInstantPaymentMethod(e){return e.toUpperCase()in T}getPaypalAmpsSdkOrThrow(){if(!this.paypalApms)throw new m;return this.paypalApms}}const Re=p(e=>new Ve(e,L(e),g(),new f({containerStyles:P})),[{gateway:\"bigcommerce_payments_apms\"}]);class Le{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){const{gatewayId:t,methodId:i,bigcommerce_payments_apms:n}=e;if(this.bigCommercePaymentsAlternativeMethods=n,!i)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new q('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');return Promise.resolve()}execute(e,t){return i=this,n=void 0,r=function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(i[n[o]]=e[n[o]])}return i}(e,[\"payment\"]);if(!i)throw new H([\"payment\"]);const{methodId:o,gatewayId:r}=i;try{const e={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:o,paypal_account:{order_id:yield this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_apms\",{gatewayId:\"bigcommerce_payments_apms\",methodId:o})}}};yield this.paymentIntegrationService.submitOrder(n,t),yield this.paymentIntegrationService.submitPayment({methodId:o,gatewayId:r,paymentData:e})}catch(e){if(function(e){var t,i;return(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)&&(null===(i=null===(t=e.body)||void 0===t?void 0:t.additional_action_required)||void 0===i?void 0:i.data.redirect_url)}(e)){const t=e.body.additional_action_required.data.redirect_url;return new Promise((e,i)=>{window.location.replace(t),i()})}return this.handleError(e),Promise.reject(e)}},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{d(r.next(e))}catch(e){t(e)}}function s(e){try{d(r.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof o?i:new o(function(e){e(i)})).then(a,s)}d((r=r.apply(i,n||[])).next())});var i,n,o,r}finalize(){return Promise.reject(new Y)}deinitialize(){return Promise.resolve()}handleError(e){const{onError:t}=this.bigCommercePaymentsAlternativeMethods||{};t&&\"function\"==typeof t&&t(e)}}const $e=p(e=>new Le(e,L(e)),[{gateway:\"bigcommerce_payments_apms\",id:\"klarna\"},{gateway:\"bigcommerce_payments_apms\",id:\"afterpay\"}]);var qe=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class He{constructor(e,t,i){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.loadingIndicator=i}initialize(e){var t,i;return qe(this,void 0,void 0,function*(){const{methodId:n,bigcommerce_payments_venmo:o}=e||{};if(!n)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!o)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n);(null===(t=r.initializationData)||void 0===t?void 0:t.orderId)?this.orderId=null===(i=r.initializationData)||void 0===i?void 0:i.orderId:(yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n),this.loadingIndicatorContainer=o.container.split(\"#\")[1],this.renderButton(n,o))})}execute(e,t){return qe(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(i[n[o]]=e[n[o]])}return i}(e,[\"payment\"]);if(!i)throw new H([\"payment\"]);if(!this.orderId)throw new G;yield this.paymentIntegrationService.submitOrder(n,t),yield this.bigCommercePaymentsIntegrationService.submitPayment(i.methodId,this.orderId)})}finalize(){return Promise.reject(new Y)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){const i=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:o}=n.initializationData||{},{checkoutPaymentButtonStyles:r}=o||{},{container:a,onError:s,onRenderButton:d,onValidate:l,submitForm:c}=t,m={fundingSource:i.FUNDING.VENMO,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(r),createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmocheckout\"),onClick:(e,t)=>this.handleClick(t,l),onApprove:e=>this.handleApprove(e,c),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.paypalButton=i.Buttons(m),!this.paypalButton.isEligible())throw new Pe(\"Venmo is not available for your region. Please another payment method instead.\");d&&\"function\"==typeof d&&d(),this.paypalButton.render(a)}handleClick(e,t){return qe(this,void 0,void 0,function*(){const{resolve:i,reject:n}=e;yield t(()=>(this.toggleLoadingIndicator(!0),i()),n)})}handleApprove({orderID:e},t){this.orderId=e,t(),this.toggleLoadingIndicator(!1)}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const Ge=p(e=>new He(e,L(e),new f({styles:{backgroundColor:\"black\"}})),[{id:\"bigcommerce_payments_venmo\"}]);var Ye=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class Ke{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.onError=a}initialize(e){return Ye(this,void 0,void 0,function*(){const{bigcommerce_payments:t,methodId:i}=e;if(!i)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new q('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');if(!t.container)throw new q('Unable to initialize payment because \"options.bigcommerce_payments.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new q('Unable to initialize payment because \"options.bigcommerce_payments.onClick\" argument is not a function.');this.onError=t.onError||a,this.paymentIntegrationService.getState().getPaymentMethod(i)||(yield this.paymentIntegrationService.loadPaymentMethod(i));const n=yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i);n&&n.Buttons&&\"function\"==typeof n.Buttons?this.renderButton(i,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Ye(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()})}signOut(e){return Ye(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:i,onClick:n,onComplete:o}=t,r=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:s,paymentButtonStyles:d,isServerSideShippingCallbacksEnabled:l}=a.initializationData||{},{checkoutTopButtonStyles:c}=d||{},m=Object.assign({createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments\"),onApprove:({orderID:t})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(e,t)},n&&{onClick:()=>n()}),u=Object.assign(Object.assign({},!l&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(t,i)=>this.onHostedCheckoutApprove(t,i,e,o,l)}),h=Object.assign(Object.assign({fundingSource:r.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},c),{height:40}))},m),s&&u),y=r.Buttons(h);y.isEligible()?y.render(`#${i}`):this.bigCommercePaymentsIntegrationService.removeElement(i)}onHostedCheckoutApprove(e,t,i,n,o){return Ye(this,void 0,void 0,function*(){if(!e.orderID)throw new u(l.MissingOrderId);const r=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=r.lineItems.physicalItems.length>0;if(!o){const e=yield t.order.get(),i=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(i),a){const t=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}a&&(yield this.bigCommercePaymentsIntegrationService.updateOrder(o)),o&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:i}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(i,e.orderID),n&&\"function\"==typeof n&&n()}catch(e){this.handleError(e)}})}onShippingAddressChange(e){return Ye(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}onShippingOptionsChange(e){return Ye(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const We=p(e=>new Ke(e,L(e)),[{id:\"bigcommerce_payments\"}]);var Je=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class Xe{constructor(e,t,i){this.paymentIntegrationService=e,this.bigCommercePaymentsSdk=t,this.bigCommercePaymentsFastlaneUtils=i}initialize(e){var t;return Je(this,void 0,void 0,function*(){const{methodId:i,bigcommerce_payments_fastlane:n}=e;if(!i)throw new q('Unable to proceed because \"methodId\" argument is not provided.');try{yield this.paymentIntegrationService.loadPaymentMethod(i);const e=this.paymentIntegrationService.getState(),o=e.getCartOrThrow(),r=e.getPaymentMethodOrThrow(i),a=!!(null===(t=r.initializationData)||void 0===t?void 0:t.isDeveloperModeApplicable),s=yield this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(r,o.currency.code,o.id);yield this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(s,a,this.getFastlaneStyles(i,n))}catch(e){}return Promise.resolve()})}deinitialize(){return Je(this,void 0,void 0,function*(){return Promise.resolve()})}signIn(e,t){return Je(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t),yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:void 0,addresses:void 0,instruments:void 0}),this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId()})}signOut(e){return Je(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){return Je(this,void 0,void 0,function*(){const{checkoutPaymentMethodExecuted:t,continueWithCheckoutCallback:i,methodId:n}=e||{};if(!n)throw new q('Unable to proceed because \"methodId\" argument is not provided.');if(\"function\"!=typeof i)throw new q('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');if(this.paymentIntegrationService.getState().getCustomerOrThrow().isGuest){t&&\"function\"==typeof t&&t();try{yield this.runPayPalAuthenticationFlowOrThrow(n)}catch(e){}}i()})}runPayPalAuthenticationFlowOrThrow(e){return Je(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),i=t.getCartOrThrow().id,n=t.getCustomer(),o=t.getBillingAddress(),r=(null==n?void 0:n.email)||(null==o?void 0:o.email)||\"\",{customerContextId:a}=yield this.bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow(r),s=yield this.bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow(a),d=s.authenticationState===de.CANCELED;yield this.updateCustomerDataState(e,s),d?this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId():this.bigCommercePaymentsFastlaneUtils.updateStorageSessionId(i)})}updateCustomerDataState(e,t){var i;return Je(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow(),{authenticationState:o,addresses:r,billingAddress:a,shippingAddress:s,instruments:d}=this.bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,t);if(yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:o,addresses:r,instruments:d}),a&&(yield this.paymentIntegrationService.updateBillingAddress(a)),s&&n.lineItems.physicalItems.length>0){const t=yield this.paymentIntegrationService.updateShippingAddress(s),n=t.getPaymentMethodOrThrow(e),{isFastlaneShippingOptionAutoSelectEnabled:o}=n.initializationData||{},r=t.getConsignments()||[],a=(null===(i=r[0])||void 0===i?void 0:i.availableShippingOptions)||[],d=a[0],l=a.find(e=>e.isRecommended);if((l||d)&&o){const e=(null==l?void 0:l.id)||d.id;yield this.paymentIntegrationService.selectShippingOption(e)}}})}getFastlaneStyles(e,t){const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{fastlaneStyles:n,isFastlaneStylingEnabled:o}=i.initializationData||{};return ye(o?n:{},null==t?void 0:t.styles)}}const Ze=p(e=>new Xe(e,g(),ue()),[{id:\"bigcommerce_payments_fastlane\"},{id:\"bigcommerce_payments_creditcards\"}]);var Qe=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class et{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t,this.onError=a}initialize(e){return Qe(this,void 0,void 0,function*(){const{bigcommerce_payments_paylater:t,methodId:i}=e;if(!i)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');if(!t.container)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_paylater.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_paylater.onClick\" argument is not a function.');this.onError=t.onError||a,this.paymentIntegrationService.getState().getPaymentMethod(i)||(yield this.paymentIntegrationService.loadPaymentMethod(i));const n=yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i);n&&n.Buttons&&\"function\"==typeof n.Buttons?this.renderButton(i,t):console.error(\"[BC BigCommercePayments PayLater]: button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Qe(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return Qe(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:i,onComplete:n,onClick:o}=t,r=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:s,paymentButtonStyles:d}=a.initializationData||{},{checkoutTopButtonStyles:l}=d||{},c=Object.assign({createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onApprove:({orderID:t})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(e,t)},o&&{onClick:()=>o()}),m={onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e),onApprove:(t,i)=>this.onHostedCheckoutApprove(t,i,e,n)},u=[r.FUNDING.PAYLATER,r.FUNDING.CREDIT];let h=!1;u.forEach(e=>{if(!h){const t=Object.assign(Object.assign({fundingSource:e,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},l),{height:40}))},c),s&&m),n=r.Buttons(t);n.isEligible()&&(n.render(`#${i}`),h=!0)}}),h||this.bigCommercePaymentsIntegrationService.removeElement(i)}onHostedCheckoutApprove(e,t,i,n){return Qe(this,void 0,void 0,function*(){if(!e.orderID)throw new u(l.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow(),r=yield t.order.get();try{const t=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(r);if(yield this.paymentIntegrationService.updateBillingAddress(t),o.lineItems.physicalItems.length>0){const e=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(r);yield this.paymentIntegrationService.updateShippingAddress(e),yield this.bigCommercePaymentsIntegrationService.updateOrder()}yield this.paymentIntegrationService.submitOrder({},{params:{methodId:i}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(i,e.orderID),n&&\"function\"==typeof n&&n()}catch(e){this.handleError(e)}})}onShippingAddressChange(e){return Qe(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}onShippingOptionsChange(e){return Qe(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const tt=p(e=>new et(e,L(e)),[{id:\"bigcommerce_payments_paylater\"}]);var it=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class nt{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return it(this,void 0,void 0,function*(){const{bigcommerce_payments_venmo:t,methodId:i}=e;if(!i)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');if(!t.container)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_venmo.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_venmo.onClick\" argument is not a function.');this.paymentIntegrationService.getState().getPaymentMethod(i)||(yield this.paymentIntegrationService.loadPaymentMethod(i));const n=yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(i);n&&n.Buttons&&\"function\"==typeof n.Buttons?this.renderButton(i,t):console.error(\"[BC Payments Venmo]: Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return it(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return it(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:i,onClick:n}=t,o=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:a}=r.initializationData||{},{checkoutTopButtonStyles:s}=a||{},d=Object.assign({fundingSource:o.FUNDING.VENMO,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},s),{height:40})),createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmo\"),onApprove:({orderID:t})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(e,t)},n&&{onClick:()=>n()}),l=o.Buttons(d);l.isEligible()?l.render(`#${i}`):this.bigCommercePaymentsIntegrationService.removeElement(i)}}const ot=p(e=>new nt(e,L(e)),[{id:\"bigcommerce_payments_venmo\"}]);var rt=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class at{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){var t;return rt(this,void 0,void 0,function*(){const{bigcommerce_payments:i,containerId:n,methodId:o}=e,r=Boolean(null==i?void 0:i.buyNowInitializeOptions);if(!o)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new q('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!i)throw new q('Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.');if(r&&!i.currencyCode)throw new q('Unable to initialize payment because \"options.bigcommerce_payments.currencyCode\" argument is not provided.');if(r&&\"function\"!=typeof(null===(t=i.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new q('Unable to initialize payment because \"options.bigcommerce_payments.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');r||(yield this.paymentIntegrationService.loadDefaultCheckout());const a=r?i.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(o,a,!1),this.renderButton(n,o,i)})}deinitialize(){return Promise.resolve()}renderButton(e,t,i){const{buyNowInitializeOptions:n,style:o,onComplete:r,onEligibilityFailure:a}=i,s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:l,isServerSideShippingCallbacksEnabled:c}=d.initializationData||{},m={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},u={onClick:()=>this.handleClick(n),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},h=Object.assign(Object.assign({},!c&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(e,i)=>this.onHostedCheckoutApprove(e,i,t,r,c)}),y=Object.assign(Object.assign(Object.assign({fundingSource:s.FUNDING.PAYPAL,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o)},m),n&&u),l&&h),g=s.Buttons(y);g.isEligible()?g.render(`#${e}`):a&&\"function\"==typeof a?a():this.bigCommercePaymentsIntegrationService.removeElement(e)}handleClick(e){return rt(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,i,n,o){return rt(this,void 0,void 0,function*(){if(!e.orderID)throw new u(l.MissingOrderId);const r=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=r.lineItems.physicalItems.length>0;if(!o){const e=yield t.order.get(),i=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(i),a){const t=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}return a&&(yield this.bigCommercePaymentsIntegrationService.updateOrder(o)),o&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:i}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(i,e.orderID),n&&\"function\"==typeof n&&n(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return rt(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return rt(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const st=p(e=>new at(e,L(e)),[{id:\"bigcommerce_payments\"}]);var dt=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class lt{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return dt(this,void 0,void 0,function*(){const{bigcommerce_payments_paylater:t,containerId:i,methodId:n}=e,{buyNowInitializeOptions:o,currencyCode:r}=t||{},a=!!o;if(!n)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new q('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.');if(a&&!r)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_paylater.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==o?void 0:o.getBuyNowCartRequestBody))throw new q('Unable to initialize payment because \"options.bigcommerce_payments_paylater.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=this.paymentIntegrationService.getState(),d=a?r:s.getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n,d,!1),this.renderButton(i,n,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,i){const{buyNowInitializeOptions:n,style:o,onComplete:r,onEligibilityFailure:a}=i,s=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:l}=d.initializationData||{},c={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_paylater\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},m={onClick:()=>this.handleClick(n),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},u={onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e),onApprove:(e,i)=>this.onHostedCheckoutApprove(e,i,t,r)},h=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT];let y=!1;h.forEach(t=>{if(!y){const i=Object.assign(Object.assign(Object.assign({fundingSource:t,style:this.bigCommercePaymentsIntegrationService.getValidButtonStyle(o)},c),n&&m),l&&u),r=s.Buttons(i);r.isEligible()?(r.render(`#${e}`),y=!0):a&&\"function\"==typeof a&&a()}}),y||this.bigCommercePaymentsIntegrationService.removeElement(e)}handleClick(e){return dt(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,i,n){return dt(this,void 0,void 0,function*(){if(!e.orderID)throw new u(l.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow(),r=yield t.order.get();try{const t=this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(r);if(yield this.paymentIntegrationService.updateBillingAddress(t),o.lineItems.physicalItems.length>0){const e=this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(r);yield this.paymentIntegrationService.updateShippingAddress(e),yield this.bigCommercePaymentsIntegrationService.updateOrder()}return yield this.paymentIntegrationService.submitOrder({},{params:{methodId:i}}),yield this.bigCommercePaymentsIntegrationService.submitPayment(i,e.orderID),n&&\"function\"==typeof n&&n(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return dt(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return dt(this,void 0,void 0,function*(){const t=this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.bigCommercePaymentsIntegrationService.updateOrder()}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const ct=p(e=>new lt(e,L(e)),[{id:\"bigcommerce_payments_paylater\"}]);var mt=function(e,t,i,n){return new(i||(i=Promise))(function(o,r){function a(e){try{d(n.next(e))}catch(e){r(e)}}function s(e){try{d(n.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class ut{constructor(e,t){this.paymentIntegrationService=e,this.bigCommercePaymentsIntegrationService=t}initialize(e){return mt(this,void 0,void 0,function*(){const{bigcommerce_payments_venmo:t,containerId:i,methodId:n}=e,{buyNowInitializeOptions:o,currencyCode:r}=t||{},a=!!o;if(!n)throw new q('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new q('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.');if(a&&!r)throw new q('Unable to initialize payment because \"options.bigcommerce_payments_venmo.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==o?void 0:o.getBuyNowCartRequestBody))throw new q('Unable to initialize payment because \"options.bigcommerce_payments_venmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=a?r:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.bigCommercePaymentsIntegrationService.loadPayPalSdk(n,s,!1),this.renderButton(i,n,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,i){const{buyNowInitializeOptions:n,style:o,onEligibilityFailure:r}=i,a=this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow(),s=a.FUNDING.VENMO,d={createOrder:()=>this.bigCommercePaymentsIntegrationService.createOrder(\"bigcommerce_payments_venmo\"),onApprove:({orderID:e})=>this.bigCommercePaymentsIntegrationService.tokenizePayment(t,e)},l={onClick:()=>this.handleClick(n),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},c=Object.assign(Object.assign({fundingSource:s,style:this.getValidVenmoButtonStyles(o)},d),n&&l),m=a.Buttons(c);m.isEligible()?m.render(`#${e}`):r&&\"function\"==typeof r?r():this.bigCommercePaymentsIntegrationService.removeElement(e)}getValidVenmoButtonStyles(e){const t=this.bigCommercePaymentsIntegrationService.getValidButtonStyle(e);return t.color===A.gold?Object.assign(Object.assign({},t),{color:void 0}):t}handleClick(e){return mt(this,void 0,void 0,function*(){if(e){const t=yield this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}}const ht=p(e=>new ut(e,L(e)),[{id:\"bigcommerce_payments_venmo\"}]);export{Re as createBigCommercePaymentsAlternativeMethodsPaymentStrategy,st as createBigCommercePaymentsButtonStrategy,Ue as createBigCommercePaymentsCreditCardsPaymentStrategy,We as createBigCommercePaymentsCustomerStrategy,Ze as createBigCommercePaymentsFastlaneCustomerStrategy,fe as createBigCommercePaymentsFastlanePaymentStrategy,ct as createBigCommercePaymentsPayLaterButtonStrategy,tt as createBigCommercePaymentsPayLaterCustomerStrategy,Ce as createBigCommercePaymentsPayLaterPaymentStrategy,Q as createBigCommercePaymentsPaymentStrategy,ke as createBigCommercePaymentsRatePayPayPaymentStrategy,$e as createBigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy,ht as createBigCommercePaymentsVenmoButtonStrategy,ot as createBigCommercePaymentsVenmoCustomerStrategy,Ge as createBigCommercePaymentsVenmoPaymentStrategy};\n//# sourceMappingURL=bigcommerce-payments.js.map"
  },
  {
    "path": "dist/esm/integrations/bluesnap-direct.js",
    "content": "import{getScriptLoader as e}from\"@bigcommerce/script-loader\";import{kebabCase as t,noop as n}from\"lodash\";var i,a={};function r(e,t){return Object.assign(e,{resolveIds:t})}a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);class s extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class o extends s{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}function d(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(i||(i={}));class c extends s{constructor(e){super(function(e){switch(e){case i.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case i.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case i.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case i.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var u,l;class p{initialize(e){this._blueSnapSdk=e}initialize3ds(e,t){return n=this,i=void 0,r=function*(){const n=this._getBlueSnapSdk();return new Promise((i,a)=>{n.threeDsPaymentsSetup(e,e=>\"1\"===e.code?i(e.threeDSecure.threeDSecureReferenceId):a(new o)),n.threeDsPaymentsSubmitData(t)})},new((a=void 0)||(a=Promise))(function(e,t){function s(e){try{d(r.next(e))}catch(e){t(e)}}function o(e){try{d(r.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof a?n:new a(function(e){e(n)})).then(s,o)}d((r=r.apply(n,i||[])).next())});var n,i,a,r}_getBlueSnapSdk(){return d(this._blueSnapSdk,()=>new c(i.PaymentNotInitialized))}}class m extends s{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class h extends m{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}function y(e){return!(\"object\"!=typeof e||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument)}function b(e){return Boolean(e.instrumentId)}class g extends s{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(u||(u={}));class _ extends s{constructor(e){super(function(e){switch(e){case u.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case u.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case u.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case u.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case u.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case u.MissingCheckoutConfig:case u.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case u.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case u.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case u.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case u.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case u.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case u.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\",e.CardExpiryVerification=\"cardExpiryVerification\"}(l||(l={}));const f=l;function v(e){return f.CardNumber in e}function I(e){return f.CardCodeVerification in e||f.CardNumberVerification in e}var S,C,N,O,E,w=function(e,t,n,i){return new(n||(n=Promise))(function(a,r){function s(e){try{d(i.next(e))}catch(e){r(e)}}function o(e){try{d(i.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,o)}d((i=i.apply(e,t||[])).next())})};class P{constructor(e,t,n,i){this._scriptLoader=e,this._paymentIntegrationService=t,this._blueSnapDirectHostedForm=n,this._blueSnapDirect3ds=i}initialize(e){return w(this,void 0,void 0,function*(){const{methodId:t,gatewayId:n,creditCard:i}=e;if(!n||!i)throw new m;const a=yield this._paymentIntegrationService.loadPaymentMethod(n,{params:{method:t,bigpayToken:i.bigpayToken}}),{config:{testMode:r,is3dsEnabled:s},clientToken:o}=a.getPaymentMethodOrThrow(t,n);if(this._blueSnapSdk=yield this._scriptLoader.load(r),this._paymentFieldsToken=o,this._shouldUseHostedFields=v(i.form.fields)||I(i.form.fields)&&!!i.form.fields.cardNumberVerification,this._shouldUseHostedFields){this._blueSnapDirectHostedForm.initialize(this._blueSnapSdk,i.form.fields);try{yield this._blueSnapDirectHostedForm.attach(this._getPaymentFieldsToken(),i,s)}catch(e){if(e instanceof m)return;throw e}}})}execute(e){return w(this,void 0,void 0,function*(){if(!e.payment)throw new h([\"payment\"]);if(!this._blueSnapSdk)throw new h([\"payment\"]);const{paymentData:t}=e.payment,{shouldSaveInstrument:n,shouldSetAsDefaultInstrument:i}=y(t)?t:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1},a=this._getPaymentFieldsToken();let r;const{is3dsEnabled:s}=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e.payment.methodId,e.payment.gatewayId).config,o=this._shouldUseHostedFields?yield this._blueSnapDirectHostedForm.validate().submit(s?this._getBlueSnapDirectThreeDSecureData():void 0,!(y(t)&&b(t))):void 0;if(yield this._paymentIntegrationService.submitOrder(),y(t)&&b(t)&&this._paymentFieldsToken&&t.instrumentId){if(s){this._blueSnapDirect3ds.initialize(this._blueSnapSdk);const{last4:e,brand:n}=this._paymentIntegrationService.getState().getCardInstrumentOrThrow(t.instrumentId),i=Object.assign({last4Digits:e,ccType:n.toUpperCase()},this._getBlueSnapDirectThreeDSecureData());r=yield this._blueSnapDirect3ds.initialize3ds(this._paymentFieldsToken,i)}yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e.payment),{paymentData:Object.assign(Object.assign(Object.assign({instrumentId:t.instrumentId},this._shouldUseHostedFields?{nonce:a}:{}),r?{deviceSessionId:r}:{}),{shouldSetAsDefaultInstrument:!!i})}))}else yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e.payment),{paymentData:{formattedPayload:{credit_card_token:{token:JSON.stringify({pfToken:a,cardHolderName:o&&o.cardHolderName})},vault_payment_instrument:n,set_as_default_stored_instrument:i}}}))})}finalize(){return Promise.reject(new g)}deinitialize(){return this._shouldUseHostedFields&&this._blueSnapDirectHostedForm.detach(),Promise.resolve()}_getBlueSnapDirectThreeDSecureData(){var e;const{getBillingAddress:t,getShippingAddress:n,getCustomer:i,getCheckoutOrThrow:a,getCartOrThrow:r}=this._paymentIntegrationService.getState(),s=t(),o=n(),d=(null===(e=i())||void 0===e?void 0:e.email)||(null==s?void 0:s.email),c=(null==s?void 0:s.phone)||(null==o?void 0:o.phone);return Object.assign(Object.assign(Object.assign(Object.assign({amount:a().outstandingBalance,currency:r().currency.code},d&&{email:d}),c&&{phone:c}),s&&{billingFirstName:s.firstName,billingLastName:s.lastName,billingCountry:s.countryCode,billingCity:s.city,billingAddress:`${s.address1} ${s.address2}`.trim(),billingZip:s.postalCode}),o&&{shippingFirstName:o.firstName,shippingLastName:o.lastName,shippingCountry:o.countryCode,shippingCity:o.city,shippingAddress:`${o.address1} ${o.address2}`.trim(),shippingZip:o.postalCode})}_getPaymentFieldsToken(){return d(this._paymentFieldsToken,()=>new _(u.MissingPaymentToken))}}class D extends s{constructor(e,t){super(t||\"Unable to proceed because the payment form contains invalid data.\"),this.details=e,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}!function(e){e.AMEX=\"american-express\",e.CHINA_UNION_PAY=\"unionpay\",e.DINERS=\"diners-club\",e.DISCOVER=\"discover\",e.JCB=\"jcb\",e.MASTERCARD=\"mastercard\",e.UNKNOWN=\"unknown\",e.VISA=\"visa\"}(S||(S={})),function(e){e.ON_BLUR=\"onBlur\",e.ON_SUBMIT=\"onSubmit\"}(C||(C={})),function(e){e.EMPTY=\"empty\",e.INVALID=\"invalid\",e.THREE_DS_NOT_ENABLED=\"3D Secure is not enabled\"}(N||(N={})),function(e){e.CC_NOT_SUPORTED=\"22013\",e.ERROR_403=\"403\",e.ERROR_404=\"404\",e.ERROR_500=\"500\",e.INVALID_OR_EMPTY=\"10\",e.SESSION_EXPIRED=\"400\",e.THREE_DS_AUTH_FAILED=\"14101\",e.THREE_DS_CLIENT_ERROR=\"14103\",e.THREE_DS_MISSING_FIELDS=\"14102\",e.THREE_DS_NOT_ENABLED=\"14100\",e.TOKEN_EXPIRED=\"14040\",e.TOKEN_NOT_ASSOCIATED=\"14042\",e.TOKEN_NOT_FOUND=\"14041\"}(O||(O={})),function(e){e.CardCode=\"cvv\",e.CardExpiry=\"exp\",e.CardName=\"noc\",e.CardNumber=\"ccn\"}(E||(E={}));const M={[E.CardNumber]:f.CardNumber,[E.CardExpiry]:f.CardExpiry,[E.CardName]:f.CardName,[E.CardCode]:f.CardCode},T={empty:{[f.CardNumber]:{fieldType:\"cardNumber\",message:\"Credit card number is required\",type:\"required\"},[f.CardNumberVerification]:{fieldType:\"cardNumber\",message:\"Credit card number is required\",type:\"required\"},[f.CardExpiry]:{fieldType:\"cardExpiry\",message:\"Expiration date is required\",type:\"required\"},[f.CardCode]:{fieldType:\"cardCode\",message:\"CVV is required\",type:\"required\"},[f.CardName]:{fieldType:\"cardName\",message:\"Full name is required\",type:\"required\"}},invalid:{[f.CardNumber]:{fieldType:\"cardNumber\",message:\"Credit card number must be valid\",type:\"invalid_card_number\"},[f.CardNumberVerification]:{fieldType:\"cardNumber\",message:\"Credit card number must be valid\",type:\"invalid_card_number\"},[f.CardExpiry]:{fieldType:\"cardExpiry\",message:\"Expiration date must be a valid future date in MM / YY format\",type:\"invalid_card_expiry\"},[f.CardCode]:{fieldType:\"cardCode\",message:\"CVV must be valid\",type:\"invalid_card_code\"},[f.CardName]:{fieldType:\"cardName\",message:\"Full name is required\",type:\"required\"}}};class j{constructor(e,t){this._nameOnCardInput=e,this._hostedInputValidator=t}initialize(e,t){this._blueSnapSdk=e,t&&(v(t)?this._hostedInputValidator.initialize():I(t)&&t.cardNumberVerification&&this._hostedInputValidator.initializeValidationFields())}attach(e,t,n){var i,a,r,s,o=t.form,{fields:d}=o,c=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var a=0;for(i=Object.getOwnPropertySymbols(e);a<i.length;a++)t.indexOf(i[a])<0&&Object.prototype.propertyIsEnumerable.call(e,i[a])&&(n[i[a]]=e[i[a]])}return n}(o,[\"fields\"]);return void 0===n&&(n=!1),i=this,a=void 0,s=function*(){const t=this._getBlueSnapSdk();if(!v(d)&&!I(d))throw new m(\"Field options must be of type HostedCardFieldOptionsMap\");return this._onValidate=c.onValidate,v(d)&&this._setCustomBlueSnapAttributes(d),I(d)&&this._setCustomStoredCardsBlueSnapAttributes(d),new Promise(i=>{const a=this._getHostedPaymentFieldsOptions(e,d,c,i,n);t.hostedPaymentFieldsCreate(a),v(d)&&this._nameOnCardInput.attach(a,d.cardName.accessibilityLabel,d.cardName.placeholder)})},new((r=void 0)||(r=Promise))(function(e,t){function n(e){try{d(s.next(e))}catch(e){t(e)}}function o(e){try{d(s.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof r?i:new r(function(e){e(i)})).then(n,o)}d((s=s.apply(i,a||[])).next())})}validate(){var e;const t=this._hostedInputValidator.validate();if(null===(e=this._onValidate)||void 0===e||e.call(this,t),!t.isValid){const e=Object.entries(t.errors).reduce((e,[t,n])=>Object.assign(Object.assign({},e),{[t]:n.map(({message:e,type:t})=>({message:e,type:t}))}),{});throw new D(e)}return this}submit(e,t=!1){return new Promise((n,i)=>this._getBlueSnapSdk().hostedPaymentFieldsSubmitData(e=>this._isBlueSnapDirectCallbackError(e)?i(new o(e.statusCode===O.THREE_DS_AUTH_FAILED?e.error[0].errorDescription:`Submission failed with status: ${e.statusCode} and errors: ${JSON.stringify(e.error)}`)):n(Object.assign(Object.assign({},e.cardData),t?{cardHolderName:this._nameOnCardInput.getValue()}:{})),e))}detach(){this._nameOnCardInput.detach()}_isBlueSnapDirectCallbackError(e){return\"error\"in e}_getHostedPaymentFieldsOptions(e,t,{onFocus:n,onBlur:i,onValidate:a,onCardTypeChange:r,onEnter:s,styles:o},d,c){var u;return Object.assign(Object.assign(Object.assign({token:e,onFieldEventHandler:{setupComplete:()=>d(),onFocus:this._usetUiEventCallback(n),onBlur:this._usetUiEventCallback(i),onError:this._handleError(a),onType:(e,t)=>null==r?void 0:r({cardType:S[t]}),onEnter:this._usetUiEventCallback(s),onValid:e=>null==a?void 0:a(this._hostedInputValidator.validate({tagId:e}))}},v(t)&&{ccnPlaceHolder:t.cardNumber.placeholder||\"\",cvvPlaceHolder:(null===(u=t.cardCode)||void 0===u?void 0:u.placeholder)||\"\",expPlaceHolder:t.cardExpiry.placeholder||\"MM / YY\"}),o&&{style:this._mapStyles(o)}),{\"3DS\":c})}_mapStyles({default:e,error:n,focus:i}){return Object.entries(Object.assign(Object.assign(Object.assign({},e&&{input:e}),n&&{\".invalid\":n}),i&&{\":focus\":i})).reduce((e,[n,i])=>Object.assign(Object.assign({},e),{[n]:Object.entries(i).reduce((e,[n,i])=>Object.assign(Object.assign({},e),{[t(n)]:i}),{})}),{})}_handleError(e){return(t,n,i,a)=>{if(n===O.INVALID_OR_EMPTY&&t&&function(e){return void 0!==e&&[N.EMPTY,N.INVALID].includes(e)}(i))return null==e?void 0:e(this._hostedInputValidator.validate({tagId:t,errorDescription:i}));throw new o(`An unexpected error has occurred: ${JSON.stringify({tagId:t,errorCode:n,errorDescription:i,eventOrigin:a})}`)}}_usetUiEventCallback(e){return t=>{e&&e({fieldType:M[t]})}}_getBlueSnapSdk(){return d(this._blueSnapSdk,()=>new c(i.PaymentNotInitialized))}_setCustomBlueSnapAttributes(e){const{cardNumber:t,cardExpiry:n,cardCode:i,cardName:a}=e,r=document.getElementById(t.containerId),s=document.getElementById(n.containerId),o=i&&document.getElementById(i.containerId),d=document.getElementById(a.containerId);if(!(r&&s&&o&&d))throw new m(\"Unable to create hosted payment fields to invalid HTML container elements.\");r.dataset.bluesnap=E.CardNumber,s.dataset.bluesnap=E.CardExpiry,o.dataset.bluesnap=E.CardCode,d.dataset.bluesnap=E.CardName}_setCustomStoredCardsBlueSnapAttributes(e){const{cardNumberVerification:t,cardCodeVerification:n}=e,i=t&&document.getElementById(t.containerId),a=n&&document.getElementById(n.containerId);(i||a)&&(i&&(i.dataset.bluesnap=E.CardNumber),a&&(a.dataset.bluesnap=E.CardCode))}}class k{constructor(){this._errors={}}initialize(){this._errors={cardNumber:[T.empty.cardNumber],cardExpiry:[T.empty.cardExpiry],cardCode:[T.empty.cardCode],cardName:[T.empty.cardName]}}initializeValidationFields(){this._errors={cardNumberVerification:[T.empty.cardNumber]}}validate(e){return e&&this._updateErrors(e.tagId,e.errorDescription),{isValid:Object.values(this._errors).every(e=>0===e.length),errors:this._errors}}_updateErrors(e,t){const n=this._errors.cardNumberVerification?f.CardNumberVerification:M[e];this._errors[n]=t?[T[t][n]]:[]}}class A{attach({style:e,onFieldEventHandler:{onFocus:t,onBlur:n,onValid:i,onError:a,onEnter:r}={}},s,o){var d;this._style=e,this._create(),this._getInput().addEventListener(\"focus\",this._handleFocus(t)),this._getInput().addEventListener(\"blur\",this._handleBlur(n,i,a)),this._getInput().addEventListener(\"enter\",this._handleEnter(r)),s&&this._getInput().setAttribute(\"aria-label\",s),o&&(this._getInput().placeholder=o),null===(d=document.querySelector('[data-bluesnap=\"noc\"]'))||void 0===d||d.appendChild(this._getInput())}getValue(){return this._getInput().value}detach(){this._input&&(this._input.remove(),this._input=void 0)}_handleFocus(e){return()=>{var t;this._applyStyles(null===(t=this._style)||void 0===t?void 0:t[\":focus\"]),null==e||e(E.CardName)}}_handleBlur(e,t,n){return({target:i})=>{var a,r;null==e||e(E.CardName),i instanceof HTMLInputElement&&(/\\w{1,200}/.test(i.value)?(this._applyStyles(null===(a=this._style)||void 0===a?void 0:a.input),null==t||t(E.CardName)):(this._applyStyles(null===(r=this._style)||void 0===r?void 0:r[\".invalid\"]),null==n||n(E.CardName,O.INVALID_OR_EMPTY,N.EMPTY,C.ON_BLUR)))}}_handleEnter(e){return()=>null==e?void 0:e(E.CardName)}_applyStyles(e={}){const t={color:e.color,fontFamily:e[\"font-family\"],fontSize:e[\"font-size\"],fontWeight:e[\"font-weight\"]},n=Object.keys(t);n.every(e=>[\"color\",\"fontFamily\",\"fontSize\",\"fontWeight\"].includes(e))&&n.forEach(e=>{t[e]&&(this._getInput().style[e]=t[e]||\"\")})}_configureInput(){this._getInput().autocomplete=\"cc-name\",this._getInput().id=E.CardName,this._getInput().inputMode=\"text\",this._getInput().maxLength=200,this._getInput().style.backgroundColor=\"transparent\",this._getInput().style.border=\"0\",this._getInput().style.height=\"100%\",this._getInput().style.margin=\"0\",this._getInput().style.outline=\"none\",this._getInput().style.padding=\"0\",this._getInput().style.width=\"100%\",this._getInput().type=\"text\"}_getInput(){return d(this._input,()=>new c(i.PaymentNotInitialized))}_create(){var e;this._input=document.createElement(\"input\"),this._configureInput(),this._applyStyles(null===(e=this._style)||void 0===e?void 0:e.input)}}class x extends s{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var z;!function(e){e.PRODUCTION=\"https://pay.bluesnap.com/web-sdk/5/bluesnap.js\",e.SANDBOX=\"https://sandpay.bluesnap.com/web-sdk/5/bluesnap.js\"}(z||(z={}));class B{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e=!1){return t=this,n=void 0,a=function*(){if(this._window.bluesnap)return this._window.bluesnap;if(yield this._scriptLoader.loadScript(e?z.SANDBOX:z.PRODUCTION),!this._window.bluesnap)throw new x;return this._window.bluesnap},new((i=void 0)||(i=Promise))(function(e,r){function s(e){try{d(a.next(e))}catch(e){r(e)}}function o(e){try{d(a.throw(e))}catch(e){r(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,o)}d((a=a.apply(t,n||[])).next())});var t,n,i,a}}const F=r(t=>new P(new B(e()),t,new j(new A,new k),new p),[{id:\"credit_card\",gateway:\"bluesnapdirect\"}]);class U{constructor(e){this._paymentIntegrationService=e}execute(e){return t=this,n=void 0,a=function*(){const t=this._formatePaymentPayload(e);yield this._paymentIntegrationService.submitOrder();try{yield this._paymentIntegrationService.submitPayment(t)}catch(e){if(this._isBlueSnapDirectRedirectResponse(e)){const t=e.body.provider_data&&JSON.parse(e.body.provider_data);let n=e.body.additional_action_required.data.redirect_url;if(function(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;return!!t.merchantid&&\"string\"==typeof t.merchantid}(t)){const e=new URLSearchParams(t).toString();n=`${n}&${e}`}return new Promise(()=>window.location.replace(n))}return Promise.reject(e)}},new((i=void 0)||(i=Promise))(function(e,r){function s(e){try{d(a.next(e))}catch(e){r(e)}}function o(e){try{d(a.throw(e))}catch(e){r(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,o)}d((a=a.apply(t,n||[])).next())});var t,n,i,a}initialize(){return Promise.resolve()}finalize(){return Promise.reject(new g)}deinitialize(){return Promise.resolve()}_formatePaymentPayload({payment:e}){if(!e)throw new h([\"payment\"]);return e.paymentData&&b(e.paymentData)&&y(e.paymentData)?Object.assign(Object.assign({},e),{paymentData:{instrumentId:e.paymentData.instrumentId,shouldSetAsDefaultInstrument:!!e.paymentData.shouldSetAsDefaultInstrument}}):(t=e.paymentData,Boolean(\"object\"==typeof t&&null!==t&&\"accountNumber\"in t&&\"accountType\"in t&&\"shopperPermission\"in t&&\"routingNumber\"in t)?Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{ecp:Object.assign({account_number:e.paymentData.accountNumber,account_type:e.paymentData.accountType,shopper_permission:e.paymentData.shopperPermission,routing_number:e.paymentData.routingNumber},e.paymentData.companyName?{company_name:e.paymentData.companyName}:{}),vault_payment_instrument:e.paymentData.shouldSaveInstrument,set_as_default_stored_instrument:e.paymentData.shouldSetAsDefaultInstrument}}}):(n=e.paymentData,Boolean(\"object\"==typeof n&&null!==n&&\"iban\"in n&&\"firstName\"in n&&\"lastName\"in n&&\"shopperPermission\"in n)?Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{sepa_direct_debit:{iban:e.paymentData.iban,first_name:e.paymentData.firstName,last_name:e.paymentData.lastName,shopper_permission:e.paymentData.shopperPermission},vault_payment_instrument:e.paymentData.shouldSaveInstrument,set_as_default_stored_instrument:e.paymentData.shouldSetAsDefaultInstrument}}}):function(e){return Boolean(\"object\"==typeof e&&null!==e&&\"bic\"in e)}(e.paymentData)?Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{ideal:{bic:e.paymentData.bic}}}}):function(e){return Boolean(\"object\"==typeof e&&null!==e&&\"iban\"in e&&!(\"firstName\"in e)&&!(\"lastName\"in e)&&!(\"shopperPermission\"in e))}(e.paymentData)?Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{pay_by_bank:{iban:e.paymentData.iban}}}}):{methodId:e.methodId}));var t,n}_isBlueSnapDirectRedirectResponse(e){var t;if(\"object\"!=typeof e||null===e)return!1;const n=e;if(!n.body)return!1;const i=n.body;return\"additional_action_required\"===i.status&&!!(null===(t=i.additional_action_required)||void 0===t?void 0:t.data.redirect_url)}}const V=r(e=>new U(e),[{gateway:\"bluesnapdirect\"}]);class R{constructor(e){const t=new Promise((e,t)=>{this.cancel=t});this.promise=Promise.race([e,t])}}class L extends s{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}var H;!function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(H||(H={}));const q=H;var Y=function(e,t,n,i){return new(n||(n=Promise))(function(a,r){function s(e){try{d(i.next(e))}catch(e){r(e)}}function o(e){try{d(i.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,o)}d((i=i.apply(e,t||[])).next())})};class ${constructor(e){this._paymentIntegrationService=e}execute(e,t){return Y(this,void 0,void 0,function*(){const{payment:a}=e;if(!a)throw new h([\"payment\"]);if(!this._initializeOptions)throw new c(i.PaymentNotInitialized);const{onLoad:r,style:s}=this._initializeOptions,o=this._createIframe(\"bluesnapv2_hosted_payment_page\",s),d=new R(new Promise(n));r(o,()=>d.cancel(new L)),yield this._paymentIntegrationService.submitOrder(e,t),yield this._paymentIntegrationService.initializeOffsitePayment({methodId:a.methodId,gatewayId:a.gatewayId,shouldSaveInstrument:!1,target:o.name,promise:d.promise})})}finalize(e){return Y(this,void 0,void 0,function*(){const t=this._paymentIntegrationService.getState(),n=t.getOrder(),i=t.getPaymentStatus();if(!n||i!==q.ACKNOWLEDGE&&i!==q.FINALIZE)return Promise.reject(new g);yield this._paymentIntegrationService.finalizeOrder(e)})}initialize(e){return Y(this,void 0,void 0,function*(){this._initializeOptions=e&&e.bluesnapv2,yield Promise.resolve()})}deinitialize(){return Promise.resolve()}_createIframe(e,t){const n=document.createElement(\"iframe\");if(n.setAttribute(\"sandbox\",\"allow-top-navigation allow-scripts allow-forms allow-same-origin\"),n.name=e,t){const{border:e,height:i,width:a}=t;n.style.border=null!=e?e:\"\",n.style.height=null!=i?i:\"\",n.style.width=null!=a?a:\"\"}return n}}const K=r(e=>new $(e),[{gateway:\"bluesnapv2\"}]);export{V as createBlueSnapDirectAPMPaymentStrategy,F as createBlueSnapDirectCreditCardPaymentStrategy,K as createBlueSnapV2PaymentStrategy};\n//# sourceMappingURL=bluesnap-direct.js.map"
  },
  {
    "path": "dist/esm/integrations/bolt.js",
    "content": "import{getScriptLoader as t}from\"@bigcommerce/script-loader\";import{default as e}from\"local-storage-fallback\";import{isObject as n}from\"lodash\";import{noop as i}from\"rxjs\";import{stringifyUrl as o}from\"query-string\";class r{constructor(t){this.storage=t}saveExtraItemsData(t,e){const n=[...e.physicalItems,...e.digitalItems].reduce((t,e)=>(t[e.productId]={brand:e.brand?e.brand:\"\",category:e.categoryNames?e.categoryNames.join(\", \"):\"\"},t),{});try{return this.storage.setItem(this.getStorageKey(t),JSON.stringify(n)),n}catch(t){return{}}}readExtraItemsData(t){try{const e=this.storage.getItem(this.getStorageKey(t));if(!e)return null;const i=JSON.parse(e);return function(t){if(!n(t))return!1;const e=Object.values(t).some(t=>!n(t)||!(\"brand\"in t)||!(\"category\"in t));return Boolean(!e)}(i)?i:null}catch(t){return null}}clearExtraItemData(t){try{this.storage.removeItem(this.getStorageKey(t))}catch(t){}}getStorageKey(t){return t?`ORDER_ITEMS_${t}`:\"\"}}function a(t,e){return Object.assign(t,{resolveIds:e})}class s extends Error{constructor(t){var e;super(t||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",e=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,e):this.__proto__=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class d extends s{constructor(t){super(t||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}var c;!function(t){t[t.MissingBillingAddress=0]=\"MissingBillingAddress\",t[t.MissingCart=1]=\"MissingCart\",t[t.MissingCheckout=2]=\"MissingCheckout\",t[t.MissingConsignments=3]=\"MissingConsignments\",t[t.MissingCustomer=4]=\"MissingCustomer\",t[t.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",t[t.MissingOrder=6]=\"MissingOrder\",t[t.MissingOrderConfig=7]=\"MissingOrderConfig\",t[t.MissingOrderId=8]=\"MissingOrderId\",t[t.MissingPayment=9]=\"MissingPayment\",t[t.MissingPaymentId=10]=\"MissingPaymentId\",t[t.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",t[t.MissingPaymentMethod=12]=\"MissingPaymentMethod\",t[t.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",t[t.MissingPaymentStatus=14]=\"MissingPaymentStatus\",t[t.MissingPaymentToken=15]=\"MissingPaymentToken\",t[t.MissingShippingAddress=16]=\"MissingShippingAddress\"}(c||(c={}));class l extends s{constructor(t){super(function(t){switch(t){case c.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case c.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case c.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case c.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case c.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case c.MissingCheckoutConfig:case c.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case c.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case c.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case c.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case c.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case c.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case c.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(t)),this.subtype=t,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class u extends s{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class h extends d{constructor(t){let e=\"Unable to submit payment for the order because the payload is invalid.\";t&&(e=`${e} Make sure the following fields are provided correctly: ${t.join(\", \")}.`),super(e),this.name=\"PaymentArgumentInvalidError\"}}class m extends s{constructor(t){super(t||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}class p extends s{constructor(t){super(t||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}function g(t){return\"object\"==typeof t&&null!==t&&\"shouldCreateAccount\"in t}const y={body:{},headers:{},status:0};class b extends s{constructor(t,{message:e,errors:n}={}){const{body:i,headers:o,status:r}=t||y;super(e||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=o,this.status=r,this.errors=n||[]}}class f extends b{constructor(t){super(t,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}var v;!function(t){t[t.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",t[t.CustomerNotInitialized=1]=\"CustomerNotInitialized\",t[t.PaymentNotInitialized=2]=\"PaymentNotInitialized\",t[t.ShippingNotInitialized=3]=\"ShippingNotInitialized\",t[t.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(v||(v={}));class w extends s{constructor(t){super(function(t){switch(t){case v.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case v.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case v.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case v.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(t)),this.subtype=t,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class C extends s{constructor(t){super(),this.errorCode=t,this.name=\"BoltPaymentsFieldError\",this.type=\"bolt_payments_field_error\",this.body={errors:[C.getError(t)]}}static getError(t){switch(t){case\"1000\":case\"2000\":case\"3000\":return{code:\"invalid_number\"};case\"1001\":case\"2001\":case\"3001\":return{code:\"invalid_expiry_date\"};case\"1002\":case\"2002\":return{code:\"invalid_cvc\"};case\"1003\":return{code:\"invalid_zip\"};case\"2003\":return{code:\"incorrect_zip\"};default:return{code:\"general_error\"}}}}var I,M,P,B=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function a(t){try{d(i.next(t))}catch(t){r(t)}}function s(t){try{d(i.throw(t))}catch(t){r(t)}}function d(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}d((i=i.apply(t,e||[])).next())})};class S{constructor(t,e,n){this.paymentIntegrationService=t,this.boltScriptLoader=e,this.analyticsExtraItemsManager=n,this.useBoltClient=!1,this.useBoltEmbedded=!1}initialize(t){return B(this,void 0,void 0,function*(){const{bolt:e,methodId:n}=t,{containerId:i,onPaymentSelect:o,useBigCommerceCheckout:r}=e||{};if(!n)throw new d('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)return void(this.boltClient=yield this.boltScriptLoader.loadBoltClient());const a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t.methodId),{initializationData:s,config:u}=a,{publishableKey:h,developerConfig:m,embeddedOneClickEnabled:p}=s||{},{testMode:g}=u;if(!h)throw new l(c.MissingPaymentMethod);if(this.boltClient=yield this.boltScriptLoader.loadBoltClient(h,g,m),this.useBoltClient=!p,this.useBoltEmbedded=!!p,this.useBoltEmbedded){if(!i)throw new d('Unable to initialize payment because \"options.bolt.containerId\" argument is not provided.');if(!o)throw new d('Unable to initialize payment because \"options.bolt.onPaymentSelect\" argument is not provided.');this.boltEmbedded=yield this.boltScriptLoader.loadBoltEmbedded(h,g,m),this.mountBoltEmbeddedField(i),o(yield this.hasBoltAccount())}})}deinitialize(){var t;return null===(t=this.embeddedField)||void 0===t||t.unmount(),this.boltClient=void 0,this.boltEmbedded=void 0,Promise.resolve()}finalize(){return Promise.reject(new u)}execute(t,e){return B(this,void 0,void 0,function*(){this.setExtraItemsForAnalytics();const{payment:i}=t,o=function(t,e){var n={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.indexOf(i)<0&&(n[i]=t[i]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(i=Object.getOwnPropertySymbols(t);o<i.length;o++)e.indexOf(i[o])<0&&Object.prototype.propertyIsEnumerable.call(t,i[o])&&(n[i[o]]=t[i[o]])}return n}(t,[\"payment\"]),{methodId:r,paymentData:a}=i||{};let s;if(!t.payment)throw new h([\"payment\"]);if(!r)throw new l(c.MissingPaymentMethod);if(!a||!function(t){return Boolean(n(t)&&(\"shouldSaveInstrument\"in t||\"nonce\"in t||g(t)))}(a))throw new l(c.MissingPayment);yield this.paymentIntegrationService.submitOrder(o,e),s=this.useBoltClient?yield this.getBoltClientPaymentPayload(r,a,e):this.useBoltEmbedded?yield this.getBoltEmbeddedPaymentPayload(r,a):yield this.getBoltFullCheckoutPaymentPayload(r,a),yield this.paymentIntegrationService.submitPayment(s)})}getBoltClientPaymentPayload(t,e,n){return B(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadPaymentMethod(t,n);const i=this.paymentIntegrationService.getState(),o=i.getPaymentMethodOrThrow(t).clientToken,{isStoreCreditApplied:r}=i.getCheckoutOrThrow(),{shouldSaveInstrument:a}=e,s=this.getBoltClientOrThrow();if(yield this.paymentIntegrationService.applyStoreCredit(r),!o)throw new l(c.MissingPaymentMethod);const d=yield new Promise((t,e)=>{const n={success:(n,i)=>{n.reference?t(n):e(new m(\"Unable to proceed because transaction reference is unavailable. Please try again later.\")),i()},close:()=>{e(new p)}};s.configure({orderToken:o},{},n).open()});return{methodId:t,paymentData:{nonce:d.reference,shouldSaveInstrument:a}}})}getBoltEmbeddedPaymentPayload(t,e){var n;return B(this,void 0,void 0,function*(){if(!g(e))throw new l(c.MissingPayment);const i=this.validateTokenizeResultOrThrow(yield null===(n=this.embeddedField)||void 0===n?void 0:n.tokenize());return{methodId:t,paymentData:{formattedPayload:{credit_card_token:{token:i.token,last_four_digits:i.last4,iin:i.bin,expiration_month:+i.expiration.split(\"-\")[1],expiration_year:+i.expiration.split(\"-\")[0]},provider_data:{create_account:!!e.shouldCreateAccount,embedded_checkout:!0}}}}})}getBoltFullCheckoutPaymentPayload(t,e){return B(this,void 0,void 0,function*(){yield this.setBoltOrderId();const n=this.getBoltClientOrThrow(),i=yield n.getTransactionReference();if(!i)throw new f;return{methodId:t,paymentData:Object.assign(Object.assign({},e),{nonce:i})}})}getBoltClientOrThrow(){if(!this.boltClient)throw new w(v.PaymentNotInitialized);return this.boltClient}getBoltEmbeddedOrThrow(){if(!this.boltEmbedded)throw new w(v.PaymentNotInitialized);return this.boltEmbedded}hasBoltAccount(){return B(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),e=t.getCustomer(),n=t.getBillingAddress(),i=(null==e?void 0:e.email)||(null==n?void 0:n.email)||\"\",o=this.getBoltClientOrThrow();try{return yield o.hasBoltAccount(i)}catch(t){throw new f}})}setBoltOrderId(){return B(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getOrderOrThrow(),e=this.getBoltClientOrThrow();try{yield e.setOrderId(t.orderId)}catch(t){throw new f}})}mountBoltEmbeddedField(t){const e=this.getBoltEmbeddedOrThrow().create(\"payment_field\",{styles:{backgroundColor:\"#fff\"},renderSeparateFields:!0});e.mount(`#${t}`),this.embeddedField=e}validateTokenizeResultOrThrow(t){if(!t)throw new f;if(t instanceof Error)throw new C(t.message);const{token:e,last4:n,bin:i,expiration:o}=t,r=+n,a=+i,s=+`${o}`.split(\"-\")[1],d=+`${o}`.split(\"-\")[0];if(!e||Number.isNaN(r)||Number.isNaN(a)||Number.isNaN(s)||Number.isNaN(d))throw new h;return t}setExtraItemsForAnalytics(){const t=this.paymentIntegrationService.getState(),e=t.getStoreConfigOrThrow(),n=t.getCartOrThrow();if(e.checkoutSettings.isAnalyticsEnabled&&function(t){return Boolean(t.hasOwnProperty(\"analytics\"))}(window)){const{id:t,lineItems:e}=n;this.analyticsExtraItemsManager.saveExtraItemsData(t,e)}}}class O extends s{constructor(t){super(t||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}!function(t){t.SandboxMode=\"bolt_sandbox\",t.StagingMode=\"bolt_staging\",t.DevelopmentMode=\"bolt_development\"}(I||(I={})),function(t){t.Small=\"small\",t.Medium=\"medium\",t.Large=\"large\"}(M||(M={})),function(t){t.Pill=\"pill\",t.Rect=\"rect\"}(P||(P={}));var k=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function a(t){try{d(i.next(t))}catch(t){r(t)}}function s(t){try{d(i.throw(t))}catch(t){r(t)}}function d(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}d((i=i.apply(t,e||[])).next())})};class E{constructor(t,e=window){this.scriptLoader=t,this.boltHostWindow=e}loadBoltClient(t,e,n,i,o){return k(this,void 0,void 0,function*(){if(this.boltHostWindow.BoltCheckout)return this.boltHostWindow.BoltCheckout;if(!t)throw new d('Unable to initialize payment because \"publishableKey\" argument is not provided.');if(yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!e,n)}/connect-bigcommerce.js`,this.getScriptOptions(\"bolt-connect\",t,i,o)),yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!e,n)}/track.js`,this.getScriptOptions(\"bolt-track\",t)),!this.boltHostWindow.BoltCheckout)throw new O;return this.boltHostWindow.BoltCheckout})}loadBoltEmbedded(t,e,n){return k(this,void 0,void 0,function*(){if(yield this.scriptLoader.loadScript(`//${this.getDomainURL(!!e,n)}/embed.js`,{async:!0,attributes:{id:\"bolt-embedded\"}}),!this.boltHostWindow.Bolt)throw new O;return this.boltHostWindow.Bolt(t)})}getDomainURL(t,e){if(!t)return\"connect.bolt.com\";if(e)switch(e.developerMode){case I.StagingMode:return\"connect-staging.bolt.com\";case I.DevelopmentMode:return`connect.${e.developerDomain}`}return\"connect-sandbox.bolt.com\"}getScriptOptions(t,e,n,i){return{async:!0,attributes:Object.assign(Object.assign({id:t,\"data-publishable-key\":e},n&&{\"data-shopping-cart-id\":n}),i&&{\"data-storefront-api-token\":i})}}}const z=a(n=>new S(n,new E(t()),new r(e)),[{id:\"bolt\"}]);var x=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function a(t){try{d(i.next(t))}catch(t){r(t)}}function s(t){try{d(i.throw(t))}catch(t){r(t)}}function d(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,s)}d((i=i.apply(t,e||[])).next())})};class _{constructor(t,e){this.paymentIntegrationService=t,this.boltScriptLoader=e,this.boltHostWindow=window}initialize(t){var e;return x(this,void 0,void 0,function*(){const{methodId:n,bolt:i}=t,{onInit:o}=i||{};if(!n)throw new d('Unable to proceed because \"methodId\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n);if(!(null===(e=r.initializationData)||void 0===e?void 0:e.publishableKey))throw new l(c.MissingPaymentMethod);const{developerConfig:a,publishableKey:s}=r.initializationData;if(yield this.boltScriptLoader.loadBoltClient(s,r.config.testMode,a),o&&\"function\"==typeof o){const t=this.getCustomerEmail();o(yield this.hasBoltAccount(t),t)}})}deinitialize(){return Promise.resolve()}signIn(t,e){return x(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signInCustomer(t,e),Promise.resolve()})}signOut(t){return x(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(t),Promise.resolve()})}executePaymentMethodCheckout(t){return x(this,void 0,void 0,function*(){const{continueWithCheckoutCallback:e=i,checkoutPaymentMethodExecuted:n,methodId:o}=t||{},r=this.getCustomerEmail();if(!o)throw new d('Unable to proceed because \"methodId\" argument is not provided.');if(\"function\"!=typeof e)throw new d('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');if(r)return this.openBoltCheckoutModalOrThrow(r,o,e,n);e()})}openBoltCheckoutModalOrThrow(t,e,n,i){var o;return x(this,void 0,void 0,function*(){const r=this.getBoltClientOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethod(e);try{if(null===(o=null==a?void 0:a.initializationData)||void 0===o?void 0:o.embeddedOneClickEnabled){const e=yield this.hasBoltAccount(t);if(e){const e={close:()=>{n()}};yield r.openCheckout(t,e)}else n();\"function\"==typeof i&&i({hasBoltAccount:e})}else n()}catch(t){if(function(t){return\"string\"==typeof t.message&&\"string\"==typeof t.type&&(\"string\"==typeof t.subtype||!t.subtype)&&t instanceof Error}(t)&&\"MissingDataError\"!==t.name&&\"NotInitializedError\"!==t.name)throw new m(t.message);throw t}})}getBoltClientOrThrow(){const t=this.boltHostWindow.BoltCheckout;if(!t)throw new w(v.PaymentNotInitialized);return t}hasBoltAccount(t){return x(this,void 0,void 0,function*(){const e=this.getBoltClientOrThrow();try{return yield e.hasBoltAccount(t)}catch(t){throw new f}})}getCustomerEmail(){const t=this.paymentIntegrationService.getState(),e=t.getCustomer(),n=t.getBillingAddress();return(null==e?void 0:e.email)||(null==n?void 0:n.email)||\"\"}}const U=a(e=>new _(e,new E(t())),[{id:\"bolt\"}]);class T extends s{constructor(t){super(t||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}class N{constructor(t,e,n=window){this.paymentIntegrationService=t,this.boltScriptLoader=e,this.boltHostWindow=n}initialize(t){return e=this,n=void 0,o=function*(){const{bolt:e,containerId:n,methodId:i}=t,{buyNowInitializeOptions:o,style:r}=e||{};if(!i)throw new d('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new d('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!e)throw new d('Unable to initialize payment because \"options.bolt\" argument is not provided.');if(!Boolean(o))throw new T(\"Only buy now flow is implemented for Bolt button\");if(!(null==o?void 0:o.storefrontApiToken)||\"string\"!=typeof o.storefrontApiToken)throw new d('Unable to initialize payment because \"options.storefrontApiToken\" argument is not provided.');const a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i),{initializationData:s,config:c}=a,{publishableKey:l,developerConfig:u}=s||{};yield this.boltScriptLoader.loadBoltClient(l,c.testMode,u,\"BigCommerce\",o.storefrontApiToken),this.renderButton(n,a,r)},new((i=void 0)||(i=Promise))(function(t,r){function a(t){try{d(o.next(t))}catch(t){r(t)}}function s(t){try{d(o.throw(t))}catch(t){r(t)}}function d(e){var n;e.done?t(e.value):(n=e.value,n instanceof i?n:new i(function(t){t(n)})).then(a,s)}d((o=o.apply(e,n||[])).next())});var e,n,i,o}deinitialize(){return Promise.resolve()}renderButton(t,e,n){var i;\"function\"==typeof(null===(i=this.boltHostWindow.BoltConnect)||void 0===i?void 0:i.setupProductPageCheckout)&&(this.addButtonContainer(t,e,n),this.boltHostWindow.BoltConnect.setupProductPageCheckout())}addButtonContainer(t,e,n){const i=document.getElementById(t);if(!i)return;const o=document.createElement(\"div\"),r=document.createElement(\"object\");o.setAttribute(\"id\",\"product-page-checkout-wrapper\"),o.setAttribute(\"class\",\"bolt-button-wrapper\"),o.setAttribute(\"style\",\"display:none\"),o.setAttribute(\"data-tid\",\"product-page-checkout-wrapper\"),r.setAttribute(\"data\",this.getBoltObjectData(e,n)),r.setAttribute(\"class\",\"bolt-product-checkout-button\"),o.append(r),i.innerHTML=\"\",i.append(o)}getBoltObjectData(t,e){const{initializationData:n,config:i}=t,{publishableKey:r,developerConfig:a}=n||{},s=this.boltScriptLoader.getDomainURL(!!i.testMode,a),d=this.getButtonHeight(null==e?void 0:e.size),c=this.getButtonBorderRadius(null==e?void 0:e.shape,d);return o({url:`https://${s}/v1/checkout_button`,query:{publishable_key:r,variant:\"ppc\",height:d,border_radius:c}})}getButtonHeight(t){if(t)switch(t){case M.Small:return 25;case M.Large:return 45;case M.Medium:default:return 40}}getButtonBorderRadius(t,e){if(t)switch(t){case P.Pill:return e?Math.round(e/2):void 0;case P.Rect:default:return 4}}}const A=a(e=>new N(e,new E(t())),[{id:\"bolt\"}]);export{A as createBoltButtonStrategy,U as createBoltCustomerStrategy,z as createBoltPaymentStrategy};\n//# sourceMappingURL=bolt.js.map"
  },
  {
    "path": "dist/esm/integrations/braintree.js",
    "content": "import{getScriptLoader as e}from\"@bigcommerce/script-loader\";import{find as t,isEmpty as i,isEqual as n,isNil as r,noop as o,omit as a,omitBy as s,some as d}from\"lodash\";import{supportsPopups as l}from\"@braintree/browser-detection\";import{createRequestSender as c}from\"@bigcommerce/request-sender\";import{createFormPoster as u}from\"@bigcommerce/form-poster\";var h,y,m;class p extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class g extends p{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}!function(e){e.Sandbox=\"sandbox\",e.Production=\"production\"}(h||(h={})),function(e){e.Client=\"client\",e.DataCollector=\"dataCollector\",e.Fastlane=\"fastlane\",e.GooglePayment=\"googlePayment\",e.HostedFields=\"hostedFields\",e.LocalPayment=\"localPayment\",e.Paypal=\"paypal\",e.PaypalCheckout=\"paypalCheckout\",e.ThreeDSecure=\"threeDSecure\",e.UsBankAccount=\"usBankAccount\",e.Venmo=\"venmo\",e.VisaCheckout=\"visaCheckout\"}(y||(y={})),function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\"}(m||(m={}));const v=\"3.128.0\",f=\"3.123.2\",b=\"3.106.0\",w={[b]:{[y.Client]:\"sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt\",[y.PaypalCheckout]:\"sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O\",[y.Paypal]:\"sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+\",[y.LocalPayment]:\"sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT\",[y.DataCollector]:\"sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV\",[y.UsBankAccount]:\"sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ\",[y.GooglePayment]:\"sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe\",[y.ThreeDSecure]:\"sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB\",[y.VisaCheckout]:\"sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT\",[y.Venmo]:\"sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov\",[y.HostedFields]:\"sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy\",[y.Fastlane]:\"sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa\"},[f]:{[y.Client]:\"sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO\",[y.PaypalCheckout]:\"sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/\",[y.Paypal]:\"sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt\",[y.LocalPayment]:\"sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH\",[y.DataCollector]:\"sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO\",[y.UsBankAccount]:\"sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW\",[y.GooglePayment]:\"sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO\",[y.ThreeDSecure]:\"sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym\",[y.VisaCheckout]:\"sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS\",[y.Venmo]:\"sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU\",[y.HostedFields]:\"sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P\",[y.Fastlane]:\"sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y\"},[v]:{[y.Client]:\"sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq\",[y.PaypalCheckout]:\"sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh\",[y.Paypal]:\"sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH\",[y.LocalPayment]:\"sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC\",[y.DataCollector]:\"sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc\",[y.UsBankAccount]:\"sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F\",[y.GooglePayment]:\"sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i\",[y.ThreeDSecure]:\"sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D\",[y.VisaCheckout]:\"sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv\",[y.Venmo]:\"sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz\",[y.HostedFields]:\"sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z\",[y.Fastlane]:\"sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr\"}};var C,S,P,I,O,k,E,T,A=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class z{constructor(e,t,i){this.scriptLoader=e,this.braintreeHostWindow=t,this.braintreeSDKVersionManager=i}loadClient(){return A(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(y.Client,\"client.min.js\")})}loadFastlane(){return A(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(y.Fastlane,\"fastlane.min.js\")})}loadPaypalCheckout(){return A(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(y.PaypalCheckout,\"paypal-checkout.min.js\")})}loadPaypal(){return A(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(y.Paypal,\"paypal.min.js\")})}loadLocalPayment(){return A(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(y.LocalPayment,\"local-payment.min.js\")})}loadDataCollector(){return A(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(y.DataCollector,\"data-collector.min.js\")})}loadUsBankAccount(){return A(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(y.UsBankAccount,\"us-bank-account.min.js\")})}loadGooglePayment(){return A(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(y.GooglePayment,\"google-payment.min.js\")})}load3DS(){return A(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(y.ThreeDSecure,\"three-d-secure.min.js\")})}loadVisaCheckout(){return this.loadBraintreeModuleOrThrow(y.VisaCheckout,\"visa-checkout.min.js\")}loadVenmoCheckout(){return this.loadBraintreeModuleOrThrow(y.Venmo,\"venmo.min.js\")}loadHostedFields(){return A(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(y.HostedFields,\"hosted-fields.min.js\")})}loadVisaCheckoutSdk(e){return A(this,void 0,void 0,function*(){if(this.braintreeHostWindow.V)return this.braintreeHostWindow.V;const t=e?\"sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm\":\"sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6\";return this.scriptLoader.loadScript(`//${e?\"sandbox-\":\"\"}assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,{async:!0,attributes:{integrity:t,crossorigin:\"anonymous\"}}).then(()=>{if(!this.braintreeHostWindow.V)throw new g;return this.braintreeHostWindow.V})})}loadBraintreeModuleOrThrow(e,t){return A(this,void 0,void 0,function*(){let i=this.getBraintreeModule(e);if(i)return i;const n=this.braintreeSDKVersionManager.getSDKVersion(),r=`//js.braintreegateway.com/web/${n}/js/${t}`,o=n in w?this.getIntegrityValuesByModuleName(e,n):void 0;if(yield this.scriptLoader.loadScript(r,o?{async:!0,attributes:{integrity:o,crossorigin:\"anonymous\"}}:void 0),i=this.getBraintreeModule(e),!i)throw new g;return i})}getBraintreeModule(e){var t;return null===(t=this.braintreeHostWindow.braintree)||void 0===t?void 0:t[e]}getIntegrityValuesByModuleName(e,t){const i=w[t][e];if(!i)throw new Error(\"Unexpected fileName value\");return i}}class N extends p{constructor(e){super(e||\"Unsupported browser error\"),this.name=\"UnsupportedBrowserError\",this.type=\"unsupported_browser\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(C||(C={}));class D extends p{constructor(e){super(function(e){switch(e){case C.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case C.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case C.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case C.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}function M(e){return Boolean(\"object\"==typeof e&&null!==e&&(\"type\"in e||\"message\"in e||\"code\"in e))}!function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(S||(S={})),function(e){e.Completed=\"COMPLETED\",e.Pending=\"PENDING\",e.Failed=\"FAILED\"}(P||(P={})),function(e){e.TRUSTLY=\"trustly\"}(I||(I={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"cancelled\",e.UNRECOGNIZED=\"unrecognized\"}(O||(O={})),function(e){e.Customer=\"CUSTOMER\",e.Merchant=\"MERCHANT\",e.Network=\"NETWORK\",e.Internal=\"INTERNAL\",e.Unknown=\"UNKNOWN\"}(k||(k={})),function(e){e.KountNotEnabled=\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"}(E||(E={})),function(e){e.Visa=\"visa\",e.Mastercard=\"mastercard\",e.AmericanExpress=\"american-express\",e.DinersClub=\"diners-club\",e.Discover=\"discover\",e.Jcb=\"jcb\",e.UnionPay=\"union-pay\",e.Maestro=\"maestro\",e.Elo=\"elo\",e.Mir=\"mir\",e.Hiper=\"hiper\",e.Hipercard=\"hipercard\"}(T||(T={}));var _=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class B{constructor(e){this.braintreeScriptLoader=e}initialize(e){this.setClientToken(e)}deinitialize(){return _(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollector),this.dataCollector=void 0})}getClient(){return _(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=yield t.create({authorization:e})}return this.client})}getDataCollectorOrThrow(e){return _(this,void 0,void 0,function*(){const t={deviceData:void 0,teardown:()=>Promise.resolve()};if(!this.dataCollector)try{const t=yield this.getClient(),i=yield this.braintreeScriptLoader.loadDataCollector(),n=Object.assign({client:t,kount:!0},e);this.dataCollector=yield i.create(n)}catch(e){if(M(e)&&e.code===E.KountNotEnabled)return t;throw e}return this.dataCollector})}getBraintreeGooglePayment(){return _(this,void 0,void 0,function*(){if(!this.googlePayment){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadGooglePayment()]);this.googlePayment=yield t.create({client:e})}return this.googlePayment})}getBraintreeThreeDS(){return _(this,void 0,void 0,function*(){if(!this.threeDS){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]);this.threeDS=yield t.create({client:e,version:2})}return this.threeDS})}getBraintreeLocalPayment(e){return _(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment){const[t,i]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadLocalPayment()]);this.braintreeLocalPayment=yield new Promise((n,r)=>{i.create({client:t,merchantAccountId:e},(e,t)=>{e&&r(e),n(t)})})}return this.braintreeLocalPayment})}getUsBankAccount(){return _(this,void 0,void 0,function*(){if(!this.usBankAccount){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadUsBankAccount();this.usBankAccount=yield t.create({client:e})}return this.usBankAccount})}getBraintreeVisaCheckout(){return this.visaCheckout||(this.visaCheckout=Promise.all([this.getClient(),this.braintreeScriptLoader.loadVisaCheckout()]).then(([e,t])=>t.create({client:e}))),this.visaCheckout}getVisaCheckoutSdk(e){return _(this,void 0,void 0,function*(){return this.visaCheckoutSDK||(this.visaCheckoutSDK=yield this.braintreeScriptLoader.loadVisaCheckoutSdk(e)),this.visaCheckoutSDK})}getVenmoCheckoutOrThrow(){return _(this,void 0,void 0,function*(){if(!this.braintreeVenmo){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadVenmoCheckout(),i={client:e,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},n=yield t.create(i);if(!n.isBrowserSupported())throw new N;this.braintreeVenmo=n}return this.braintreeVenmo})}setClientToken(e){this.clientToken=e}getClientTokenOrThrow(){if(!this.clientToken)throw new D(C.PaymentNotInitialized);return this.clientToken}teardownModule(e){return e?e.teardown():Promise.resolve()}}function x(e,t,i=!0){var n;return null!==(n=e[t])&&void 0!==n?n:i}class F{constructor(e){this.paymentIntegrationService=e,this.braintreeWindow=window}getSDKVersion(){const e=this.paymentIntegrationService.getState().getStoreConfig(),t=(null==e?void 0:e.checkoutSettings.features)||{};return this.getPreloadedSDKVersion()||(x(t,\"PAYPAL-5809.braintree_hosted_fields_fix_version\")?v:x(t,\"PAYPAL-5636.update_braintree_sdk_version\")?f:b)}getPreloadedSDKVersion(){const e=this.braintreeWindow.braintree;if(e){const i=t(Object.values(e),e=>!!e.VERSION);return null==i?void 0:i.VERSION}}}function L(e,t){return Object.assign(e,{resolveIds:t})}class V extends p{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}var j;!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(j||(j={}));class U extends p{constructor(e){super(function(e){switch(e){case j.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case j.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case j.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case j.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case j.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case j.MissingCheckoutConfig:case j.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case j.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case j.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case j.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case j.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case j.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case j.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class R extends V{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}function H(e){return Boolean(e.instrumentId)}class W extends p{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}function q(e){return!(\"object\"!=typeof e||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument)}class $ extends p{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}function G(e){return!!e&&\"accountNumber\"in e&&\"routingNumber\"in e&&\"ownershipType\"in e&&\"accountType\"in e}var Y=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class J{constructor(e,t){this.paymentIntegrationService=e,this.braintreeSdk=t}initialize(e){return Y(this,void 0,void 0,function*(){const{methodId:t,braintreeach:i}=e||{};if(!t)throw new V('Unable to initialize payment because \"options.methodId\" argument is not provided.');this.getMandateText=null==i?void 0:i.getMandateText,yield this.paymentIntegrationService.loadPaymentMethod(t);const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{clientToken:r,initializationData:o}=n;if(!r||!o)throw new U(j.MissingPaymentMethod);this.braintreeSdk.initialize(r);try{this.usBankAccount=yield this.braintreeSdk.getUsBankAccount()}catch(e){this.handleBraintreeError(e)}})}execute(e,t){return Y(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i}(e,[\"payment\"]);if(!i)throw new R([\"payment\"]);const r=H(i.paymentData||{}),o=r?yield this.tokenizePaymentForVaultedInstrument(i):yield this.tokenizePayment(i),a=r?yield this.preparePaymentDataForVaultedInstrument(o,i):yield this.preparePaymentData(o,i);yield this.paymentIntegrationService.submitOrder(n,t),yield this.paymentIntegrationService.submitPayment(a)})}finalize(){return Promise.reject(new W)}deinitialize(){return Y(this,void 0,void 0,function*(){return yield this.braintreeSdk.deinitialize(),Promise.resolve()})}tokenizePayment({paymentData:e}){return Y(this,void 0,void 0,function*(){const t=this.getUsBankAccountOrThrow();if(!G(e))throw new R([\"payment.paymentData\"]);const i=H(e)?\"The data are used for stored instrument verification\":\"function\"==typeof this.getMandateText&&this.getMandateText();if(!i)throw new V(\"Unable to proceed because getMandateText is not provided or returned undefined value.\");try{const{nonce:n}=yield t.tokenize({bankDetails:this.getBankDetails(e),mandateText:i});return n}catch(e){this.handleBraintreeError(e)}})}tokenizePaymentForVaultedInstrument(e){return Y(this,void 0,void 0,function*(){const{methodId:t,paymentData:i={}}=e,n=this.paymentIntegrationService.getState(),{config:r}=n.getPaymentMethodOrThrow(t);if(!r.isVaultingEnabled)throw new V(\"Vaulting is disabled but a vaulted instrument was being used for this transaction\");return G(i)?this.tokenizePayment(e):null})}preparePaymentData(e,t){return Y(this,void 0,void 0,function*(){const{methodId:i,paymentData:n={}}=t;if(!G(n))throw new R([\"payment.paymentData\"]);const{deviceData:r}=yield this.braintreeSdk.getDataCollectorOrThrow(),{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a,routingNumber:s,accountNumber:d}=n;return{methodId:i,paymentData:{deviceSessionId:r,shouldSetAsDefaultInstrument:a,shouldSaveInstrument:o,formattedPayload:{tokenized_bank_account:{issuer:s,masked_account_number:d.substr(-4),token:e}}}}})}preparePaymentDataForVaultedInstrument(e,t){return Y(this,void 0,void 0,function*(){const{methodId:i,paymentData:n={}}=t;if(!H(n)||!q(n))throw new R([\"payment.paymentData\"]);const{deviceData:r}=yield this.braintreeSdk.getDataCollectorOrThrow(),{instrumentId:o,shouldSetAsDefaultInstrument:a}=n;return{methodId:i,paymentData:Object.assign({deviceSessionId:r,instrumentId:o,shouldSetAsDefaultInstrument:a},e&&{nonce:e})}})}getBankDetails(e){const t=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),i=e.ownershipType.toLowerCase(),n=e.accountType.toLowerCase();return Object.assign(Object.assign({accountNumber:e.accountNumber,routingNumber:e.routingNumber,ownershipType:i},\"personal\"===i?{firstName:e.firstName,lastName:e.lastName}:{businessName:e.businessName}),{accountType:n,billingAddress:{streetAddress:t.address1,extendedAddress:t.address2,locality:t.city,region:t.stateOrProvinceCode,postalCode:t.postalCode}})}getUsBankAccountOrThrow(){if(!this.usBankAccount)throw new D(C.PaymentNotInitialized);return this.usBankAccount}handleBraintreeError(e){if(!M(e))throw e;throw new $(e.message)}}const K=L(t=>new J(t,(t=>{const i=new F(t),n=new z(e(),window,i);return new B(n)})(t)),[{id:\"braintreeach\"}]);class X extends p{constructor(e,t){super(t||\"Unable to proceed because the payment form contains invalid data.\"),this.details=e,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}class Q extends p{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}class Z{constructor(e){const t=new Promise((e,t)=>{this.cancel=t});this.promise=Promise.race([e,t])}}let ee=null;const te=[\"buttons\",\"messages\"];var ie,ne,re,oe,ae,se;!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(ie||(ie={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(ne||(ne={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\",e.WHITE=\"white\"}(re||(re={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(oe||(oe={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(ae||(ae={})),function(e){e.CART=\"cart\",e.HOME=\"homepage\",e.PAYMENT=\"payment\",e.PRODUCT=\"product\"}(se||(se={}));var de=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class le{constructor(e,t,i){this.braintreeScriptLoader=e,this.braintreeHostWindow=t,this.overlay=i,this.dataCollectors={}}initialize(e,t){this.clientToken=e,this.threeDSecureOptions=t}getBraintreeFastlane(e,t,i){return de(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"axoEnv\",\"sandbox\"),window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\")),!this.braintreeHostWindow.braintreeFastlane){const t=this.getClientTokenOrThrow(),n=yield this.getClient(),r=yield this.getSessionId(e),o=yield this.braintreeScriptLoader.loadFastlane(),a={root:{backgroundColorPrimary:\"transparent\"}};this.braintreeHostWindow.braintreeFastlane=yield o.create({authorization:t,client:n,deviceData:r,styles:i||a})}return this.braintreeHostWindow.braintreeFastlane})}getClient(){return de(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=t.create({authorization:e})}return this.client})}getPaypal(){return this.braintreePaypal||(this.braintreePaypal=Promise.all([this.getClient(),this.braintreeScriptLoader.loadPaypal()]).then(([e,t])=>t.create({client:e}))),this.braintreePaypal}paypal(e){var{shouldSaveInstrument:t}=e,i=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i}(e,[\"shouldSaveInstrument\"]);const n=l();return this.getPaypal().then(e=>{var r;return n&&(null===(r=this.overlay)||void 0===r||r.show({onClick:()=>e.focusWindow()})),e.tokenize(Object.assign({enableShippingAddress:!0,flow:t?\"vault\":\"checkout\",useraction:\"commit\"},i))}).then(e=>{var t;return null===(t=this.overlay)||void 0===t||t.remove(),e}).catch(e=>{var t;throw null===(t=this.overlay)||void 0===t||t.remove(),e})}getPaypalCheckout(e,t,i){return de(this,void 0,void 0,function*(){const n=yield this.getClient(),r=yield this.braintreeScriptLoader.loadPaypalCheckout(),o={client:n};return this.paypalCheckout=yield r.create(o,(n,r)=>{var o;if(n)return i(n);const a=Object.assign(Object.assign({currency:e.currency},e.isCreditEnabled&&{\"enable-funding\":\"paylater\"}),{components:te.toString(),intent:e.intent,commit:null===(o=e.commit)||void 0===o||o});this.braintreeHostWindow.paypal?t(r):function(e,t){return ee||(ee=new Promise((i,n)=>{e.loadPayPalSDK(t,t=>{t?(ee=null,n(t)):i(e)})})),ee}(r,a).then(()=>t(r))}),this.paypalCheckout})}getDataCollector(e){return de(this,void 0,void 0,function*(){const t=(null==e?void 0:e.paypal)?\"paypal\":\"default\";let i=this.dataCollectors[t];if(!i){try{const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadDataCollector(),r=Object.assign({client:t,kount:!0},e);i=yield n.create(r)}catch(e){if(!M(e)||\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"!==e.code)throw e;i={deviceData:void 0,teardown:()=>Promise.resolve()}}this.dataCollectors[t]=i}return i})}getBraintreeEnv(e=!1){return e?h.Sandbox:h.Production}mapToBraintreeShippingAddressOverride(e){return{recipientName:`${e.firstName} ${e.lastName}`,line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,postalCode:e.postalCode,countryCode:e.countryCode,phone:e.phone}}mapToLegacyShippingAddress(e){const{email:t,phone:i,shippingAddress:n}=e,r=(null==n?void 0:n.recipientName)||\"\",[o,a]=r.split(\" \");return{email:t,first_name:o||\"\",last_name:a||\"\",phone_number:i,address_line_1:null==n?void 0:n.line1,address_line_2:null==n?void 0:n.line2,city:null==n?void 0:n.city,state:null==n?void 0:n.state,country_code:null==n?void 0:n.countryCode,postal_code:null==n?void 0:n.postalCode}}mapToLegacyBillingAddress(e){const{billingAddress:t,email:i,firstName:n,lastName:r,phone:o,shippingAddress:a}=e,s=t||a;return{email:i,first_name:n,last_name:r,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}removeElement(e){const t=e&&document.getElementById(e);t&&t.remove()}getSessionId(e){return de(this,void 0,void 0,function*(){const{deviceData:t}=yield this.getDataCollector({riskCorrelationId:e});return t})}teardown(){return de(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollectors.default),yield this.teardownModule(this.dataCollectors.paypal),this.dataCollectors={},yield this.teardownModule(this.paypalCheckout),this.paypalCheckout=void 0})}get3DS(){return de(this,void 0,void 0,function*(){return this.threeDS||(this.threeDS=Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]).then(([e,t])=>t.create({client:e,version:2}))),this.threeDS})}getVenmoCheckout(e){return de(this,void 0,void 0,function*(){if(!this.venmoCheckout){const t=yield this.getClient(),i=yield this.braintreeScriptLoader.loadVenmoCheckout(),n=Object.assign({client:t,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},e||{});this.venmoCheckout=yield new Promise((e,t)=>{i.create(n,(i,n)=>i?t(i):n.isBrowserSupported()?void e(n):t(new N))})}return this.venmoCheckout})}verifyCard(e,t,i){return de(this,void 0,void 0,function*(){const n=yield this.tokenizeCard(e,t);return this.challenge3DSVerification(n,i)})}tokenizeCard(e,t){return de(this,void 0,void 0,function*(){const{paymentData:n}=e;if(!function(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;return\"object\"==typeof t.ccExpiry&&null!==t.ccExpiry&&\"string\"==typeof t.ccNumber&&\"string\"==typeof t.ccName}(n))throw new R([\"payment.paymentData\"]);const r=this.getErrorsRequiredFields(n);if(!i(r))throw new X(r);const o=this.mapToCreditCard(n,t),a=yield this.getClient(),{creditCards:s}=yield a.request(o);return{nonce:s[0].nonce,bin:s[0].details.bin}})}challenge3DSVerification(e,t){return de(this,void 0,void 0,function*(){const i=yield this.get3DS();return this.present3DSChallenge(i,t,e)})}teardownModule(e){return e?e.teardown():Promise.resolve()}getClientTokenOrThrow(){if(!this.clientToken)throw new D(C.PaymentNotInitialized);return this.clientToken}getErrorsRequiredFields(e){const{ccNumber:t,ccExpiry:i}=e,n={};return t||(n.ccNumber=[{message:\"Credit card number is required\",type:\"required\"}]),i||(n.ccExpiry=[{message:\"Expiration date is required\",type:\"required\"}]),n}mapToCreditCard(e,t){return{data:{creditCard:{cardholderName:e.ccName,number:e.ccNumber,cvv:e.ccCvv,expirationDate:`${e.ccExpiry.month}/${e.ccExpiry.year}`,options:{validate:!1},billingAddress:t&&{countryCodeAlpha2:t.countryCode,locality:t.city,countryName:t.country,postalCode:t.postalCode,streetAddress:t.address2?`${t.address1} ${t.address2}`:t.address1}}},endpoint:\"payment_methods/credit_cards\",method:\"post\"}}present3DSChallenge(e,t,i){const{nonce:n,bin:r}=i;if(!this.threeDSecureOptions||!n)throw new D(C.PaymentNotInitialized);const{addFrame:o,removeFrame:a,challengeRequested:s=!0,additionalInformation:d}=this.threeDSecureOptions,l=()=>de(this,void 0,void 0,function*(){const t=yield e.cancelVerifyCard();return u.cancel(new Q),t}),c=t.toFixed(2),u=new Z(e.verifyCard({addFrame:(e,t)=>{o&&o(e,t,l)},amount:Number(c),bin:r,challengeRequested:s,nonce:n,removeFrame:a,onLookupComplete:(e,t)=>{t()},collectDeviceData:!0,additionalInformation:d}));return u.promise}}class ce{constructor(e){this.paymentIntegrationService=e,this.braintreeHostWindow=window}render(e,t,i){const n=t&&document.getElementById(t);if(this.braintreeHostWindow.paypal&&n){const r=this.paymentIntegrationService.getState(),o=r.getCartOrThrow(),a=r.getBillingAddressOrThrow(),s=r.getPaymentMethodOrThrow(e);if(!s.initializationData)return;const{paypalBNPLConfiguration:d=[]}=s.initializationData,l=i===se.PAYMENT?\"checkout\":i,c=d&&d.find(({id:e})=>e===l);if(!c||!c.status)return;i===se.CART&&(n.removeAttribute(\"data-pp-style-logo-type\"),n.removeAttribute(\"data-pp-style-logo-position\"),n.removeAttribute(\"data-pp-style-text-color\"),n.removeAttribute(\"data-pp-style-text-size\")),this.braintreeHostWindow.paypal.Messages({amount:o.cartAmount,buyerCountry:a.countryCode,placement:i,style:this.getPaypalMessagesStylesFromBNPLConfig(c)}).render(`#${t}`)}}getPaypalMessagesStylesFromBNPLConfig({styles:e}){const t={};return e.color&&(t.color=e.color),e.layout&&(t.layout=e.layout),(e[\"logo-type\"]||e[\"logo-position\"])&&(t.logo={},e[\"logo-type\"]&&(t.logo.type=e[\"logo-type\"]),e[\"logo-position\"]&&(t.logo.position=e[\"logo-position\"])),e.ratio&&(t.ratio=e.ratio),(e[\"text-color\"]||e[\"text-size\"])&&(t.text={},e[\"text-color\"]&&(t.text.color=e[\"text-color\"]),e[\"text-size\"]&&(t.text.size=+e[\"text-size\"])),t}}class ue{constructor(e){const{element:t,closeElement:i,mainElement:n}=this._createElements(e);this._element=t,this._closeElement=i,this._mainElement=n}show(e){this._mainElement.parentElement||(this._registerClick(e),document.body.appendChild(this._mainElement),setTimeout(()=>this._element.style.opacity=\"1\"))}remove(){this._mainElement.parentElement&&(this._unregisterClick&&this._unregisterClick(),this._removeAfterTransition(),setTimeout(()=>this._element.style.opacity=\"0\"))}_createElements(e){const t=document.createElement(\"div\"),{background:i=\"rgba(0, 0, 0, 0.8)\",id:n=\"checkoutOverlay\",transitionDuration:r=400,hasCloseButton:o=!1,innerHtml:a=null}=e||{};let s,d,l,c,u=t;if(n&&(t.id=n),a){const e=document.createElement(\"div\");c=`${n}--overlayText`,e.className=c,e.appendChild(a),t.appendChild(e)}return o&&(l=`${n}--close`,s=document.createElement(\"div\"),s.className=l,d=`${n}--layout`,u=document.createElement(\"div\"),u.className=d,u.appendChild(t),u.appendChild(s)),u.appendChild(function(e){const{id:t,background:i,transitionDuration:n,classLayout:r,classOverlayText:o,classClose:a}=e,s=document.createElement(\"style\"),d=r?`, .${r}`:\"\";return s.id=`${t}--styles`,s.type=\"text/css\",s.innerText=`\\n        #${t}${d} {\\n            display: block;\\n            height: 100%;\\n            width: 100%;\\n            left: 0;\\n            top: 0;\\n            position: fixed;\\n            z-index: 2147483647;\\n        }\\n        #${t} {\\n            transition: opacity ${n}ms ease-out;\\n            background: ${i};\\n            opacity: 0;\\n        }\\n    `,o&&(s.innerText+=`\\n             #${t} {\\n                display: flex;\\n                align-items: center;\\n                justify-content: center;\\n             }\\n             #${t} .${o} {\\n                color: white;\\n                max-width: 330px;\\n                font-size: 1.2em;\\n                text-align: center;\\n             }\\n        `),a&&(s.innerText+=`\\n            #${t} {\\n                opacity: 1;\\n            }\\n            .${r} .${a} {\\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            .${r} .${a}::after, .${r} .${a}::before {\\n                position: absolute;\\n                left: 8px;\\n                content: '';\\n                height: 16px;\\n                width: 2px;\\n                background-color: #fff;\\n            }\\n            .${r} .${a}::after {\\n                transform: rotate(-45deg);\\n            }\\n            .${r} .${a}::before {\\n                transform: rotate(45deg);\\n            }\\n        `),s}({id:n,background:i,transitionDuration:r,classLayout:d,classOverlayText:c,classClose:l})),{element:t,closeElement:s,mainElement:u}}_addEventListener(e,t){e&&t&&e.addEventListener(\"click\",t)}_removeEventListener(e,t){e&&t&&e.removeEventListener(\"click\",t)}_registerClick(e){if(this._unregisterClick&&this._unregisterClick(),e){const{onClick:t,onClickClose:i}=e;this._addEventListener(this._element,t),this._addEventListener(this._closeElement,i),this._unregisterClick=()=>{this._removeEventListener(this._element,t),this._removeEventListener(this._closeElement,i),this._unregisterClick=void 0}}}_removeAfterTransition(){const e=t=>{\"opacity\"===t.propertyName&&(this._mainElement.parentElement&&this._mainElement.remove(),this._element.removeEventListener(\"transitionend\",e))};this._element.addEventListener(\"transitionend\",e)}}const he={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},ye=\"embedded-checkout-loading-indicator-rotation\";class me{constructor(e){this.styles=Object.assign(Object.assign({},he),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${ye} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(i=>{e.style.setProperty(i,t[i])})}defineAnimation(){var e;if(document.getElementById(ye))return;const t=document.createElement(\"style\");t.id=ye,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${ye} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}const pe={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"};function ge(e){return\"object\"==typeof e&&null!==e&&\"name\"in e&&\"BraintreeError\"===e.name}function ve(e){return{recipientName:`${e.firstName} ${e.lastName}`,line1:e.address1,line2:e.address2,city:e.city,state:e.stateOrProvinceCode,postalCode:e.postalCode,countryCode:e.countryCode,phone:e.phone}}var fe=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class be{constructor(e,t,i,n){this.paymentIntegrationService=e,this.braintreeIntegrationService=t,this.braintreeMessages=i,this.loadingIndicator=n,this.braintreeHostWindow=window}initialize(e){return fe(this,void 0,void 0,function*(){const{braintree:t,methodId:i}=e;if((null==t?void 0:t.containerId)&&(this.braintreeButtonOptions=t),this.paymentMethod&&this.paymentMethod.nonce||(this.paymentMethod=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i)),this.paymentMethod.clientToken&&(null==t?void 0:t.bannerContainerId))return yield this.loadPaypal(),this.loadPaypalCheckoutInstance(t);if(this.paymentMethod.clientToken)return this.loadPaypal();const n=yield this.paymentIntegrationService.loadPaymentMethod(i);if(this.paymentMethod=n.getPaymentMethodOrThrow(i),null==t?void 0:t.bannerContainerId)return this.loadPaypalCheckoutInstance(t);if(!this.paymentMethod.clientToken)throw new U(j.MissingPaymentMethod);return this.loadPaypal()})}execute(e,t){var i;return fe(this,void 0,void 0,function*(){const{payment:n}=e,r=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i}(e,[\"payment\"]);if(!n)throw new R([\"payment\"]);const{onError:o}=this.braintreeButtonOptions||{};try{const e=yield this.preparePaymentData(n,r.useStoreCredit);yield this.paymentIntegrationService.submitOrder(r,t),yield this.paymentIntegrationService.submitPayment(e)}catch(e){this.isProviderError(e)&&(yield this.loadPaypal(),null===(i=this.paypalButtonRender)||void 0===i||i.close(),yield this.loadPaypalCheckoutInstance(this.braintreeButtonOptions),yield new Promise((e,t)=>{o&&\"function\"==typeof o&&o(new Error(\"INSTRUMENT_DECLINED\")),t()})),this.handleError(e)}})}finalize(){return Promise.reject(new W)}deinitialize(){var e;return this.braintreeTokenizePayload=void 0,null===(e=this.paypalButtonRender)||void 0===e||e.close(),this.braintreeIntegrationService.teardown()}preparePaymentData(e,t){var i;return fe(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),r=n.getOutstandingBalance(t),o=n.getStoreConfig();if(!r)throw new U(j.MissingCheckout);if(!o)throw new U(j.MissingCheckoutConfig);if(!this.paymentMethod)throw new D(C.PaymentNotInitialized);const{currency:a,storeProfile:{storeLanguage:s}}=o,{nonce:d,config:{isVaultingEnabled:l}}=this.paymentMethod,{methodId:c,paymentData:u={}}=e,h=(null===(i=this.braintreeTokenizePayload)||void 0===i?void 0:i.nonce)||d;if(h){const t=yield this.paymentIntegrationService.loadPaymentMethod(c);return this.paymentMethod=t.getPaymentMethod(c),Object.assign(Object.assign({},e),{paymentData:this.formattedPayload(h)})}if(H(u)||(y=u,Boolean(y.instrumentId)&&!Object.prototype.hasOwnProperty.call(y,\"ccNumber\")&&!Object.prototype.hasOwnProperty.call(y,\"ccCvv\"))){if(!l)throw new V(\"Vaulting is disabled but a vaulted instrument was being used for this transaction\");return Promise.resolve(e)}var y;if(!q(u))throw new U(j.MissingPayment);const{shouldSaveInstrument:m,shouldSetAsDefaultInstrument:p}=u;if(m&&!l)throw new V(\"Vaulting is disabled but shouldSaveInstrument is set to true\");const g=n.getShippingAddress(),v=g?ve(g):void 0;return Promise.all([this.braintreeIntegrationService.paypal({amount:r,locale:s,currency:a.code,offerCredit:\"braintreepaypalcredit\"===this.paymentMethod.id,shippingAddressOverride:v,shouldSaveInstrument:m||!1,shippingAddressEditable:!1}),this.braintreeIntegrationService.getSessionId()]).then(([{nonce:t,details:i}={},n])=>Object.assign(Object.assign({},e),{paymentData:this.formattedPayload(t,i&&i.email,n,m,p)}))})}formattedPayload(e,t,i,n,r){return{formattedPayload:{vault_payment_instrument:n||null,set_as_default_stored_instrument:r||null,device_info:i||null,paypal_account:{token:e,email:t||null}}}}loadPaypalCheckoutInstance(e){return fe(this,void 0,void 0,function*(){const{clientToken:t,initializationData:i,id:n}=this.paymentMethod||{};if(!t)throw new U(j.MissingPaymentMethod);try{this.braintreeIntegrationService.initialize(t);const r={currency:this.paymentIntegrationService.getState().getCartOrThrow().currency.code,intent:null==i?void 0:i.intent,isCreditEnabled:null==i?void 0:i.isCreditEnabled},o=\"braintreepaypalcredit\"===n||!(null==i?void 0:i.isCreditEnabled);yield this.braintreeIntegrationService.getPaypalCheckout(r,t=>{o&&n&&(null==e?void 0:e.bannerContainerId)&&this.renderPayPalMessages(n,e.bannerContainerId),this.renderPayPalButton(t,e)},this.handleError)}catch(e){this.handleError(e)}})}renderPayPalMessages(e,t){this.braintreeMessages.render(e,t,se.PAYMENT)}renderPayPalButton(e,t){const{onPaymentError:i,submitForm:n,onRenderButton:r,containerId:o,onError:a}=t||{};if(!o)return;const s=this.getSmartButtonContainerId(o);if(!document.getElementById(s))throw new V(`Unable to initialize payment because element with id ${o} does not exist.`);if(!this.paymentMethod)throw new D(C.PaymentNotInitialized);this.loadingIndicatorContainer=o.split(\"#\")[1];const{id:d,config:{testMode:l}}=this.paymentMethod,{paypal:c}=this.braintreeHostWindow,u=null==c?void 0:c.FUNDING.PAYPAL;c&&u?(this.paypalButtonRender=c.Buttons({env:l?\"sandbox\":\"production\",commit:!1,fundingSource:u,onClick:()=>{this.toggleLoadingIndicator(!0)},createOrder:()=>this.setupPayment(e,d,i),onApprove:t=>fe(this,void 0,void 0,function*(){this.braintreeTokenizePayload=yield this.tokenizePaymentOrThrow(t,e),n&&\"function\"==typeof n&&n()}),onCancel:()=>{this.toggleLoadingIndicator(!1)},onError:e=>{this.toggleLoadingIndicator(!1),null==a||a(e)}}),r&&\"function\"==typeof r&&r(),this.paypalButtonRender.isEligible()&&this.paypalButtonRender.render(`${o}`)):this.removeElement(o.split(\"#\")[1])}setupPayment(e,t,i){return fe(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState();try{const i=n.getCustomer(),r=n.getPaymentMethodOrThrow(t),o=n.getCheckoutOrThrow().outstandingBalance,a=n.getStoreConfigOrThrow().currency.code,s=n.getShippingAddress()||(null==i?void 0:i.addresses[0]),d=s?ve(s):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:d,amount:o,currency:a,offerCredit:!1,intent:r.initializationData.intent})}catch(e){throw i&&(ge(e)||e instanceof p)&&i(e),e}})}tokenizePaymentOrThrow(e,t,i){return fe(this,void 0,void 0,function*(){try{return yield t.tokenizePayment(e)}catch(e){throw i&&(ge(e)||e instanceof p)&&i(e),e}})}loadPaypal(){return fe(this,void 0,void 0,function*(){const{clientToken:e,initializationData:t}=this.paymentMethod||{};if(!e||!t)throw new U(j.MissingPaymentMethod);try{this.braintreeIntegrationService.initialize(e),yield this.braintreeIntegrationService.getPaypal()}catch(e){this.handleError(e)}return Promise.resolve()})}handleError(e){if(!ge(e))throw e;if(\"PAYPAL_POPUP_CLOSED\"===e.code)throw new Q(e.message);throw new $(e.message)}isProviderError(e){var t,i,n;return!!function(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e}(e)&&\"2046\"===(null===(n=null===(i=((null===(t=null==e?void 0:e.errors)||void 0===t?void 0:t.filter(e=>e.provider_error))||[])[0])||void 0===i?void 0:i.provider_error)||void 0===n?void 0:n.code)}removeElement(e){const t=e&&document.getElementById(e);t&&t.remove()}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}getSmartButtonContainerId(e){var t;return null!==(t=e.split(\"#\")[1])&&void 0!==t?t:e}}const we=L(t=>{const i=window,n=new ue,r=new F(t),o=new le(new z(e(),i,r),i,n),a=new ce(t);return new be(t,o,a,new me({containerStyles:pe}))},[{id:\"braintreepaypal\"},{id:\"braintreepaypalcredit\"}]);var Ce;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(Ce||(Ce={}));const Se=Ce,Pe={\"X-Checkout-SDK-Version\":\"1.916.1\"};class Ie{constructor(e){this.requestSender=e}getOrderStatus(e=\"braintreelocalmethods\",t){return i=this,n=void 0,o=function*(){const i=`/api/storefront/initialization/${e}`,n=Object.assign({\"X-API-INTERNAL\":\"This API endpoint is for internal use only and may change in the future\",\"Content-Type\":Se.Json},Pe);return(yield this.requestSender.get(i,Object.assign({headers:n},t))).body},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof r?i:new r(function(e){e(i)})).then(a,s)}d((o=o.apply(i,n||[])).next())});var i,n,r,o}}const Oe={body:{},headers:{},status:0};class ke extends p{constructor(e,{message:t,errors:i}={}){const{body:n,headers:r,status:o}=e||Oe;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=n,this.headers=r,this.status=o,this.errors=i||[]}}class Ee extends ke{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class Te extends ke{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}var Ae=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class ze{constructor(e,t,i,n,r=3e3,a=3e5){this.paymentIntegrationService=e,this.braintreeSdk=t,this.braintreeRequestSender=i,this.loadingIndicator=n,this.pollingInterval=r,this.maxPollingIntervalTime=a,this.isLPMsUpdateExperimentEnabled=!1,this.pollingTimer=0,this.stopPolling=o,this.isPollingEnabled=!1}initialize(e){return Ae(this,void 0,void 0,function*(){const{gatewayId:t,methodId:i,braintreelocalmethods:n}=e;if(this.gatewayId=t,!i)throw new V('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new V('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!n)throw new V('Unable to initialize payment because \"options.braintreelocalmethods\" argument is not provided.');this.braintreelocalmethods=n,this.loadingIndicatorContainer=n.container.split(\"#\")[1],yield this.paymentIntegrationService.loadPaymentMethod(t);const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(t),{clientToken:a,config:s,initializationData:d}=o,l=r.getStoreConfigOrThrow().checkoutSettings.features;if(this.isPollingEnabled=x(l,\"PAYPAL-5258.braintree_local_methods_polling\"),this.isLPMsUpdateExperimentEnabled=x(l,\"PAYPAL-4853.add_new_payment_flow_for_braintree_lpms\"),!a||!d||!s.merchantId)throw new U(j.MissingPaymentMethod);try{this.braintreeSdk.initialize(a),this.isNonInstantPaymentMethod(i)||(this.braintreeLocalPayment=yield this.braintreeSdk.getBraintreeLocalPayment(s.merchantId))}catch(e){this.handleError(e)}})}finalize(){return Promise.reject(new W)}deinitialize(){return Ae(this,void 0,void 0,function*(){return this.toggleLoadingIndicator(!1),Promise.resolve()})}execute(e,t){return Ae(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i}(e,[\"payment\"]);if(!i)throw new R([\"payment\"]);const{methodId:r}=i;this.toggleLoadingIndicator(!0),this.isNonInstantPaymentMethod(r)?yield this.executeWithNotInstantLPM(r):yield this.executeWithInstantLPM(r,n,t)})}executeWithNotInstantLPM(e){return Ae(this,void 0,void 0,function*(){try{const t=yield this.getLPMsBasicPaymentData();yield this.paymentIntegrationService.submitOrder(),yield this.paymentIntegrationService.submitPayment({methodId:e,paymentData:Object.assign(Object.assign({},t),{formattedPayload:{method:e}})})}catch(e){if(this.isBraintreeRedirectError(e)){const t=e.body.additional_action_required.data.redirect_url;return new Promise((e,i)=>{window.location.replace(t),this.toggleLoadingIndicator(!1),i()})}return this.handleError(e),Promise.reject(e)}})}executeWithInstantLPM(e,t,i){return Ae(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment)throw new Ee;yield new Promise((n,r)=>{var o;null===(o=this.braintreeLocalPayment)||void 0===o||o.startPayment(this.getInstantLPMConfig(e,t,i),this.getInstantLPMCallback(n,r,e,t,i))})})}getLPMsBasicPaymentData(){return Ae(this,void 0,void 0,function*(){const{deviceData:e}=yield this.braintreeSdk.getDataCollectorOrThrow();return{deviceSessionId:e}})}getInstantLPMConfig(e,t,i){const n=this.paymentIntegrationService.getState(),r=n.getCartOrThrow(),o=n.getBillingAddressOrThrow(),{firstName:a,lastName:s,countryCode:d}=o,{currency:l,email:c,lineItems:u}=r,h=u.physicalItems.length>0,y=n.getCheckoutOrThrow().outstandingBalance,m=n.getStoreConfigOrThrow().links.checkoutLink;return{paymentType:e,amount:y,fallback:{url:m,buttonText:\"Complete Payment\"},currencyCode:l.code,shippingAddressRequired:h,email:c,givenName:a,surname:s,address:{countryCode:d},onPaymentStart:(n,r)=>Ae(this,void 0,void 0,function*(){if(!this.isLPMsUpdateExperimentEnabled)return this.orderId=n.paymentId,void r();const o=yield this.getLPMsBasicPaymentData(),a=Object.assign(Object.assign({},o),{formattedPayload:{method:e,[`${e}_account`]:{order_id:n.paymentId}}});try{yield this.paymentIntegrationService.submitOrder(t,i),yield this.paymentIntegrationService.submitPayment({methodId:e,paymentData:a})}catch(t){if(this.isBraintreeOrderSavedResponse(t)&&t.body.additional_action_required.data.order_id_saved_successfully)return r(),this.isPollingEnabled?new Promise((t,i)=>{this.initializePollingMechanism(e,t,i,this.gatewayId)}):void 0;throw t}})}}getInstantLPMCallback(e,t,i,n,r){const o=this.paymentIntegrationService.getState().getCartOrThrow();return(a,s)=>Ae(this,void 0,void 0,function*(){if(a)return\"LOCAL_PAYMENT_WINDOW_CLOSED\"===a.code?(this.toggleLoadingIndicator(!1),this.resetPollingMechanism(),t()):(this.isPollingEnabled&&this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t(new Ee));const d=yield this.getLPMsBasicPaymentData(),l=Object.assign(Object.assign({},d),{formattedPayload:{method:i,[`${i}_account`]:Object.assign({email:o.email,token:s.nonce},this.isLPMsUpdateExperimentEnabled?{}:{order_id:this.orderId})}});try{return this.isLPMsUpdateExperimentEnabled||(yield this.paymentIntegrationService.submitOrder(n,r)),yield this.paymentIntegrationService.submitPayment({methodId:i,paymentData:l}),e(void 0)}catch(e){return this.handleError(e),t(e)}})}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}handleError(e){const{onError:t}=this.braintreelocalmethods||{};this.isPollingEnabled&&this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}isNonInstantPaymentMethod(e){return e.toUpperCase()in I}isBraintreeRedirectError(e){var t;if(\"object\"!=typeof e||null===e)return!1;const{body:i}=e;return!!i&&!!(null===(t=i.additional_action_required)||void 0===t?void 0:t.data.redirect_url)}isBraintreeOrderSavedResponse(e){var t;if(\"object\"!=typeof e||null===e)return!1;const{body:i}=e;return!!i&&(null===(t=i.additional_action_required)||void 0===t?void 0:t.data.hasOwnProperty(\"order_id_saved_successfully\"))}initializePollingMechanism(e,t,i,n){return Ae(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const i=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(i),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.braintreeRequestSender.getOrderStatus(n,{params:{useMetadata:!1}}),o=r.status===P.Pending,a=r.status===P.Completed,s=r.status===P.Failed;if(a)return this.deinitializePollingMechanism(),t();if(s)return i();if(!a&&o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,i,n);yield this.reinitializeStrategy({methodId:e,gatewayId:n,braintreelocalmethods:this.braintreelocalmethods}),this.handleError(new Te)}catch(e){i()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}reinitializeStrategy(e){return Ae(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}}const Ne=L(t=>{const i=window,n=new F(t),r=new B(new z(e(),i,n)),o=c(),a=new Ie(o);return new ze(t,r,a,new me({styles:{backgroundColor:\"black\"}}))},[{gateway:\"braintreelocalmethods\"}]);function De(e){return\"string\"!=typeof e}function Me(e,t){if(t||e)return function(e){var t,i;const n={},r=s(e.root,De),o=s(e.input,De),a=s(e.toggle,De),d=s(null===(t=e.text)||void 0===t?void 0:t.body,De),l=s(null===(i=e.text)||void 0===i?void 0:i.caption,De),c=e.branding;return Object.keys(r).length&&(n.root=r),Object.keys(o).length&&(n.input=o),Object.keys(a).length&&(n.toggle=a),Object.keys(d).length&&(n.text={},n.text.body=d),Object.keys(l).length&&(n.text=Object.assign({},n.text),n.text.caption=l),c&&(n.branding=c),n}(function(e,t){var i,n,r,o,a,s,d,l,c,u,h,y,m,p,g,v,f,b,w,C,S,P;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(y=null==t?void 0:t.input)||void 0===y?void 0:y.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(p=null==t?void 0:t.toggle)||void 0===p?void 0:p.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(v=null===(g=null==t?void 0:t.text)||void 0===g?void 0:g.body)||void 0===v?void 0:v.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(b=null===(f=null==t?void 0:t.text)||void 0===f?void 0:f.body)||void 0===b?void 0:b.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(C=null===(w=null==t?void 0:t.text)||void 0===w?void 0:w.caption)||void 0===C?void 0:C.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(P=null===(S=null==t?void 0:t.text)||void 0===S?void 0:S.caption)||void 0===P?void 0:P.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}function _e(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}var Be,xe=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class Fe{constructor(e,t,i){this.paymentIntegrationService=e,this.braintreeFastlaneUtils=t,this.braintreeSdk=i}initialize(e){var t;return xe(this,void 0,void 0,function*(){const{methodId:i,braintreefastlane:n}=e;if(!i)throw new V('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new V('Unable to initialize payment because \"options.braintreefastlane\" argument is not provided.');if(!n.onInit||\"function\"!=typeof n.onInit)throw new V('Unable to initialize payment because \"options.braintreefastlane.onInit\" argument is not provided or it is not a function.');if(!n.onChange||\"function\"!=typeof n.onChange)throw new V('Unable to initialize payment because \"options.braintreefastlane.onChange\" argument is not provided or it is not a function.');yield this.paymentIntegrationService.loadPaymentMethod(i);const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(i),{initializationData:a,clientToken:s}=o||{},{isFastlaneStylingEnabled:d}=a||{},l=x(r.getStoreConfigOrThrow().checkoutSettings.features,\"PROJECT-7080.braintree_fastlane_three_ds\");this.is3DSEnabled=o.config.is3dsEnabled,s&&l&&this.braintreeSdk.initialize(s);const c=Me(d?null===(t=o.initializationData)||void 0===t?void 0:t.fastlaneStyles:void 0,n.styles);yield this.braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow(i,c),this.shouldRunAuthenticationFlow()&&(yield this.braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow()),yield this.initializeCardComponent(),this.onError=n.onError,n.onInit(e=>this.renderBraintreeCardComponent(e)),n.onChange(()=>this.handleBraintreeStoredInstrumentChange(i))})}execute(e,t){return xe(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i}(e,[\"payment\"]);if(!i)throw new R([\"payment\"]);yield this.paymentIntegrationService.submitOrder(n,t);const r=yield this.preparePaymentPayload(i.methodId);yield this.paymentIntegrationService.submitPayment(r),this.braintreeFastlaneUtils.removeSessionIdFromCookies()})}finalize(){return Promise.reject(new W)}deinitialize(){return xe(this,void 0,void 0,function*(){return this.braintreeCardComponent=void 0,Promise.resolve()})}initializeCardComponent(){return xe(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState(),{phone:t,firstName:i,lastName:n}=e.getBillingAddressOrThrow(),r=`${i} ${n}`,o={styles:{},fields:Object.assign({cardholderName:{prefill:r,enabled:!0}},t&&{phoneNumber:{prefill:t}})},a=this.braintreeFastlaneUtils.getBraintreeFastlaneComponentOrThrow();this.braintreeCardComponent=yield a(o)})}renderBraintreeCardComponent(e){const t=this.getBraintreeCardComponentOrThrow();if(!e)throw new V('Unable to initialize payment because \"container\" argument is not provided.');t.render(e)}preparePaymentPayload(e){var t,i;return xe(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),r=n.getBillingAddressOrThrow(),o=`${r.firstName} ${r.lastName}`,a=this.getPayPalInstruments()[0],s=yield this.braintreeFastlaneUtils.getDeviceSessionId(),d=x(n.getStoreConfigOrThrow().checkoutSettings.features,\"PROJECT-7080.braintree_fastlane_three_ds\");if(a){const t=this.is3DSEnabled&&d?yield this.get3DS(a.bigpayToken,(null==a?void 0:a.iin)||\"\"):void 0;return{methodId:e,paymentData:{deviceSessionId:s,formattedPayload:{paypal_fastlane_token:{token:t||a.bigpayToken}}}}}const{getPaymentToken:l}=this.getBraintreeCardComponentOrThrow(),c=yield l({name:{fullName:o},billingAddress:this.mapToPayPalAddress(r)}),u=(null===(i=null===(t=c.paymentSource.card)||void 0===t?void 0:t.binDetails)||void 0===i?void 0:i.bin)||\"\",h=this.is3DSEnabled&&d?yield this.get3DS(c.id,u):void 0;return{methodId:e,paymentData:{deviceSessionId:s,nonce:h||c.id}}})}get3DS(e,t){return xe(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),n=yield this.braintreeSdk.getBraintreeThreeDS(),r=i.getOrderOrThrow();return new Promise((i,o)=>{n.verifyCard({amount:null==r?void 0:r.orderAmount,nonce:e,bin:t,onLookupComplete:(e,t)=>{n.on(\"customer-canceled\",()=>{\"function\"==typeof this.onError&&this.onError(new Q),o(new Q)}),t()}},(e,t)=>(e&&\"THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT\"===e.code&&(\"function\"==typeof this.onError&&this.onError(new Q),o(new Q)),i(t.nonce)))})})}mapToPayPalAddress(e){return{streetAddress:(null==e?void 0:e.address1)||\"\",locality:(null==e?void 0:e.city)||\"\",region:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCodeAlpha2:(null==e?void 0:e.countryCode)||\"\"}}shouldRunAuthenticationFlow(){const e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),i=e.getCustomerOrThrow(),n=e.getPaymentProviderCustomer(),r=_e(n)?n:{},o=this.braintreeFastlaneUtils.getSessionIdFromCookies();return!(!i.isGuest||(null==r?void 0:r.authenticationState)===O.CANCELED||(null==r?void 0:r.authenticationState)||o!==t.id)}getBraintreeCardComponentOrThrow(){if(!this.braintreeCardComponent)throw new g;return this.braintreeCardComponent}getPayPalInstruments(){const e=this.paymentIntegrationService.getState().getPaymentProviderCustomerOrThrow();return(_e(e)?e:{}).instruments||[]}handleBraintreeStoredInstrumentChange(e){return xe(this,void 0,void 0,function*(){const t=this.braintreeFastlaneUtils.getBraintreeFastlaneOrThrow(),{selectionChanged:i,selectedCard:n}=yield t.profile.showCardSelector();if(i){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomer(),i=_e(t)?t:{},r=this.braintreeFastlaneUtils.mapPayPalToBcInstrument(e,[n]);if(r&&r.length>0)return yield this.paymentIntegrationService.updatePaymentProviderCustomer(Object.assign(Object.assign({},i),{instruments:[...r]})),r[0]}})}}!function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(Be||(Be={}));class Le{static get(e){const t=`${encodeURIComponent(`${e}`)}=`,i=document.cookie;let n=null;const r=i.indexOf(t);if(r>-1){let e=i.indexOf(\";\",r);-1===e&&(e=i.length),n=decodeURIComponent(i.substring(r+t.length,e))}return n}static set(e,t,i={secure:!0}){let n=`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;const{expires:r,path:o,domain:a,secure:s}=i;if(r)n+=`; expires=${r.toUTCString()}`;else{const e=new Date,t=60;e.setTime(e.getTime()+60*t*1e3),n+=`; expires=${e.toUTCString()}`}o&&(n+=`; path=${o}`),a&&(n+=`; domain=${a}`),s&&(n+=\"; secure\"),document.cookie=n}static remove(e,t){Le.set(e,\"\",Object.assign({expires:new Date(0)},t))}}var Ve=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class je{constructor(e,t){this.paymentIntegrationService=e,this.braintreeIntegrationService=t}getDeviceSessionId(){return Ve(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getCart();return this.braintreeIntegrationService.getSessionId(null==e?void 0:e.id)})}initializeBraintreeFastlaneOrThrow(e,t){return Ve(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),n=i.getCart(),{clientToken:r,config:o}=i.getPaymentMethodOrThrow(e);if(!r)throw new U(j.MissingPaymentMethod);this.methodId=e,this.braintreeIntegrationService.initialize(r),this.braintreeFastlane=yield this.braintreeIntegrationService.getBraintreeFastlane(null==n?void 0:n.id,o.testMode,t)})}getBraintreeFastlaneOrThrow(){if(!this.braintreeFastlane)throw new g;return this.braintreeFastlane}getBraintreeFastlaneComponentOrThrow(){return this.getBraintreeFastlaneOrThrow().FastlaneCardComponent}runPayPalAuthenticationFlowOrThrow(e,t){var i;return Ve(this,void 0,void 0,function*(){try{const n=this.getMethodIdOrThrow(),r=this.getBraintreeFastlaneOrThrow(),{lookupCustomerByEmail:o,triggerAuthenticationFlow:a}=r.identity,s=this.paymentIntegrationService.getState(),d=s.getCartOrThrow(),l=s.getCustomer(),c=s.getBillingAddress(),{isFastlaneShippingOptionAutoSelectEnabled:u}=s.getPaymentMethodOrThrow(n).initializationData||{},h=e||(null==l?void 0:l.email)||(null==c?void 0:c.email)||\"\",{customerContextId:y}=yield o(h);if(!y)return yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:O.UNRECOGNIZED,addresses:[],instruments:[]}),void this.saveSessionIdToCookies(d.id);const{authenticationState:m,profileData:p}=yield a(y),g=(null===(i=null==p?void 0:p.shippingAddress)||void 0===i?void 0:i.phoneNumber)||\"\";if(m===O.CANCELED)return yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:m,addresses:[],instruments:[]}),void this.removeSessionIdFromCookies();const v=this.mapPayPalToBcAddress([p.shippingAddress],[g])||[],f=this.getPayPalBillingAddresses(p),b=f?this.mapPayPalToBcAddress([f],[g]):[],w=p.card?this.mapPayPalToBcInstrument(n,[p.card]):[],C=this.mergeShippingAndBillingAddresses(v,b);if(this.saveSessionIdToCookies(d.id),yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:m,addresses:C,instruments:w}),b.length>0&&d.lineItems.physicalItems.length>0&&(yield this.paymentIntegrationService.updateBillingAddress(b[0])),b.length>0&&d.lineItems.digitalItems.length>0&&0===d.lineItems.physicalItems.length){const{firstName:e,lastName:t}=C[0],i=Object.assign(Object.assign({},b[0]),{firstName:e,lastName:t});yield this.paymentIntegrationService.updateBillingAddress(i)}v.length>0&&d.lineItems.physicalItems.length>0&&(yield this.paymentIntegrationService.updateShippingAddress(v[0]),t&&u&&(yield this.setShippingOption()))}catch(e){}})}getSessionIdFromCookies(){return Le.get(\"bc-fastlane-sessionId\")||\"\"}saveSessionIdToCookies(e){const t=new Date;t.setDate(t.getDate()+14),Le.set(\"bc-fastlane-sessionId\",e,{expires:t,secure:!0})}removeSessionIdFromCookies(){Le.remove(\"bc-fastlane-sessionId\")}mapPayPalToBcInstrument(e,t){if(t)return t.map(t=>{const{id:i,paymentSource:n}=t,{brand:r,expiry:o,lastDigits:a,binDetails:s}=n.card,[d,l]=o.split(\"-\");return{bigpayToken:i,brand:r,defaultInstrument:!1,expiryMonth:l,expiryYear:d,iin:(null==s?void 0:s.bin)||\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,type:\"card\",untrustedShippingCardVerificationMode:Be.PAN}})}mapPayPalToBcAddress(e,t){if(!e)return[];const i=this.paymentIntegrationService.getState().getCountries()||[],n=e=>{const t=i.find(t=>t.code===e);return(null==t?void 0:t.name)||\"\"};return e.map(e=>({id:Date.now(),type:\"paypal-address\",firstName:e.firstName||\"\",lastName:e.lastName||\"\",company:e.company||\"\",address1:e.streetAddress,address2:e.extendedAddress||\"\",city:e.locality,stateOrProvince:e.region,stateOrProvinceCode:e.region,country:n(e.countryCodeAlpha2),countryCode:e.countryCodeAlpha2,postalCode:e.postalCode,phone:t&&t[0]||\"\",customFields:[]}))}getPayPalBillingAddresses(e){const{card:t,name:i}=e||{};if(!t)return;const{firstName:r,lastName:o}=t.paymentSource.card.billingAddress,{firstName:a,lastName:s}=i||{},{shippingAddress:d}=e||{},l=Object.assign(Object.assign({},t.paymentSource.card.billingAddress),{firstName:r||a,lastName:o||s});return d&&n(this.normalizeAddress(l),this.normalizeAddress(d))?d:l}normalizeAddress(e){return a(e,[\"id\"])}mergeShippingAndBillingAddresses(e,t){const i=t.filter(t=>!e.some(e=>n(this.normalizeAddress(e),this.normalizeAddress(t))));return[...e,...i]}getMethodIdOrThrow(){if(!this.methodId)throw new V('Unable to proceed because \"methodId\" argument is not provided.');return this.methodId}setShippingOption(){var e;return Ve(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getConsignments()||[],i=(null===(e=t[0])||void 0===e?void 0:e.availableShippingOptions)||[],n=i.find(e=>e.isRecommended);if(n||i.length){const e=n||i[0];yield this.paymentIntegrationService.selectShippingOption(e.id)}})}}const Ue=L(t=>{const i=window,n=new F(t),r=new le(new z(e(),i,n),i),o=new je(t,r),a=new z(e(),i,n),s=new B(a);return new Fe(t,o,s)},[{id:\"braintreeacceleratedcheckout\"}]);var Re=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class He{constructor(e,t,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=i}initialize(e){return Re(this,void 0,void 0,function*(){const{braintreevisacheckout:t,methodId:i}=e;if(!t)throw new V('Unable to initialize payment because \"options.braintreevisacheckout\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(i);const n=this.paymentIntegrationService.getState();this.paymentMethod=n.getPaymentMethodOrThrow(i);const r=n.getCheckoutOrThrow(),a=n.getStoreConfigOrThrow(),{clientToken:s,config:d}=this.paymentMethod||{};if(!s)throw new U(j.MissingPaymentMethod);const{onError:l=o,onPaymentSelect:c=o}=t;this.braintreeSdk.initialize(s);const u=yield this.braintreeSdk.getBraintreeVisaCheckout(),h=yield this.braintreeSdk.getVisaCheckoutSdk(null==d?void 0:d.testMode),y=u.createInitOptions({settings:{locale:a.storeProfile.storeLanguage,shipping:{collectShipping:!1}},paymentRequest:{currencyCode:a.currency.code,subtotal:String(r.subtotal)}});yield h.init(y),h.on(\"payment.success\",e=>this.tokenizePayment(u,e).then(()=>Promise.all([this.paymentIntegrationService.loadCheckout(),this.paymentIntegrationService.loadPaymentMethod(i)])).then(()=>c()).catch(e=>l(e))),h.on(\"payment.error\",(e,t)=>l(t))})}execute(e,t){var i,n;return Re(this,void 0,void 0,function*(){const{payment:r}=e,o=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i}(e,[\"payment\"]);if(!r)throw new V('Unable to submit payment because \"payload.payment\" argument is not provided.');if(!(null===(n=null===(i=this.paymentMethod)||void 0===i?void 0:i.initializationData)||void 0===n?void 0:n.nonce))throw new U(j.MissingPaymentMethod);const{nonce:a}=this.paymentMethod.initializationData;try{yield this.paymentIntegrationService.submitOrder(o,t),yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:{nonce:a}}))}catch(e){this.handleError(e)}})}finalize(){return Promise.reject(new W)}deinitialize(){return Re(this,void 0,void 0,function*(){yield this.braintreeSdk.deinitialize()})}tokenizePayment(e,t){return Re(this,void 0,void 0,function*(){return Promise.all([e.tokenize(t),this.braintreeSdk.getDataCollectorOrThrow()]).then(([e,t])=>{const i=this.paymentIntegrationService.getState(),n=i.getShippingAddress(),r=i.getBillingAddress(),{shippingAddress:o=this.mapToVisaCheckoutAddress(n),billingAddress:a=this.mapToVisaCheckoutAddress(r)}=e;return this.postForm(Object.assign(Object.assign({},e),{shippingAddress:o,billingAddress:a}),t)})})}mapToVisaCheckoutAddress(e){return e?{firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phone,streetAddress:e.address1,extendedAddress:e.address2,locality:e.city,region:e.stateOrProvinceCode,countryCode:e.countryCode,postalCode:e.postalCode}:{}}postForm(e,t){const{userData:i,billingAddress:n,shippingAddress:r,details:o}=e,{userEmail:a}=i,{deviceData:s}=t;return this.formPoster.postForm(\"/checkout.php\",{payment_type:e.type,nonce:e.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,n)),shipping_address:JSON.stringify(this.getAddress(a,r))})}getAddress(e,t={}){return{email:e,first_name:t.firstName,last_name:t.lastName,phone_number:t.phoneNumber,address_line_1:t.streetAddress,address_line_2:t.extendedAddress,city:t.locality,state:t.region,country_code:t.countryCode,postal_code:t.postalCode}}handleError(e){if(e instanceof Error&&\"BraintreeError\"===e.name)throw new $(e.message);throw e}}const We=L(t=>{const i=window,n=new F(t),r=new B(new z(e(),i,n));return new He(t,u(),r)},[{id:\"braintreevisacheckout\"}]);var qe=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class $e{constructor(e,t){this.paymentIntegrationService=e,this.braintreeIntegrationService=t}initialize(e){return qe(this,void 0,void 0,function*(){const{methodId:t}=e;yield this.paymentIntegrationService.loadPaymentMethod(t);const i=this.paymentIntegrationService.getState();this.venmoOptions=e.braintreevenmo;const n=i.getPaymentMethodOrThrow(t);yield this.initializeBraintreeVenmo(n)})}execute(e){return qe(this,void 0,void 0,function*(){const{payment:t}=e,i=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i}(e,[\"payment\"]);if(!t)throw new R([\"payment\"]);try{const e=yield this.preparePaymentData(t);yield this.paymentIntegrationService.submitOrder(i),yield this.paymentIntegrationService.submitPayment(e)}catch(e){this.handleError(e)}})}finalize(){return Promise.reject(new W)}deinitialize(){return qe(this,void 0,void 0,function*(){return yield this.braintreeIntegrationService.teardown(),Promise.resolve()})}handleError(e){if(!M(e))throw e;if(\"PAYPAL_POPUP_CLOSED\"===e.code)throw new Q(e.message);throw new $(e.message)}initializeBraintreeVenmo(e){var t;return qe(this,void 0,void 0,function*(){const{clientToken:i}=e;if(!i)throw new U(j.MissingPaymentMethod);const n=x(this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features,\"PAYPAL-5406.braintree_venmo_web_fallback_support\");try{this.braintreeIntegrationService.initialize(i),this.braintreeVenmoCheckout=yield this.braintreeIntegrationService.getVenmoCheckout(Object.assign(Object.assign({},void 0!==(null===(t=this.venmoOptions)||void 0===t?void 0:t.allowDesktop)?{allowDesktop:this.venmoOptions.allowDesktop}:{}),n?{mobileWebFallBack:n}:{}))}catch(e){this.handleError(e)}})}preparePaymentData(e){return qe(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),{nonce:i}=t.getPaymentMethodOrThrow(e.methodId);if(i)return Object.assign(Object.assign({},e),{paymentData:this.formattedPayload(i)});const n=yield this.braintreeVenmoTokenize(),r=yield this.braintreeIntegrationService.getSessionId();return Object.assign(Object.assign({},e),{paymentData:this.formattedPayload(n.nonce,n.details.email,r)})})}formattedPayload(e,t,i){return{formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:i||null,paypal_account:{token:e,email:t||null}}}}braintreeVenmoTokenize(){return new Promise((e,t)=>{var i;null===(i=this.braintreeVenmoCheckout)||void 0===i||i.tokenize((i,n)=>{if(i)return t(i);e(n)})})}}const Ge=L(t=>{const i=window,n=e(),r=new F(t),o=new z(n,i,r),a=new le(o,i);return new $e(t,a)},[{id:\"braintreevenmo\"}]);var Ye=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class Je{constructor(e,t,i){this.paymentIntegrationService=e,this.braintreeIntegrationService=t,this.braintreeHostedForm=i}initialize(e){return Ye(this,void 0,void 0,function*(){const{methodId:t,gatewayId:i,braintree:n}=e;yield this.paymentIntegrationService.loadPaymentMethod(t);const r=this.paymentIntegrationService.getState();this.paymentMethod=r.getPaymentMethodOrThrow(t);const{clientToken:o}=this.paymentMethod;if(!o)throw new U(j.MissingPaymentMethod);this.threeDSecure=null==n?void 0:n.threeDSecure,this.onPaymentError=null==n?void 0:n.onPaymentError;try{this.braintreeIntegrationService.initialize(o,this.threeDSecure),this.isHostedPaymentFormEnabled(t,i)&&(null==n?void 0:n.form)&&(yield this.braintreeHostedForm.initialize(n.form,n.unsupportedCardBrands,o),this.isHostedFormInitialized=this.braintreeHostedForm.isInitialized()),this.is3dsEnabled=this.paymentMethod.config.is3dsEnabled,this.deviceSessionId=yield this.braintreeIntegrationService.getSessionId(),this.shouldInitializeBraintreeFastlane()&&(yield this.initializeBraintreeFastlaneOrThrow(t))}catch(e){return this.handleError(e,t)}})}execute(e){return Ye(this,void 0,void 0,function*(){const{payment:t}=e,i=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i}(e,[\"payment\"]);if(!t)throw new R([\"payment\"]);this.isHostedFormInitialized&&this.braintreeHostedForm.validate(),yield this.paymentIntegrationService.submitOrder(i);const n=this.paymentIntegrationService.getState(),r=n.getBillingAddressOrThrow(),o=n.getOrderOrThrow().orderAmount;try{const e=this.isHostedFormInitialized?yield this.prepareHostedPaymentData(t,r,o):yield this.preparePaymentData(t,r,o);yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},t),{paymentData:e}))}catch(e){return this.processAdditionalAction(e,t,o)}})}finalize(){return Promise.reject(new W)}deinitialize(){return Ye(this,void 0,void 0,function*(){return this.isHostedFormInitialized=!1,yield Promise.all([this.braintreeIntegrationService.teardown(),this.braintreeHostedForm.deinitialize()]),Promise.resolve()})}handleError(e,t){var i;if(ge(e)){if(!(t&&this.paymentIntegrationService.getState().isPaymentMethodInitialized({methodId:t})||\"HOSTED_FIELDS_INVALID_FIELD_SELECTOR\"!==e.code))return;if(e.code.startsWith(\"THREEDS_\"))return null===(i=this.onPaymentError)||void 0===i||i.call(this,new $(\"THREEDS_VERIFICATION_FAILED\")),Promise.reject();throw new $(e.message)}throw e}preparePaymentData(e,t,i){return Ye(this,void 0,void 0,function*(){const{paymentData:n}=e,r={deviceSessionId:this.deviceSessionId};if(this.isSubmittingWithStoredCard(e))return Object.assign(Object.assign({},r),n);const{shouldSaveInstrument:o=!1,shouldSetAsDefaultInstrument:a=!1}=q(n)?n:{},{nonce:s}=this.shouldPerform3DSVerification(e)?yield this.braintreeIntegrationService.verifyCard(e,t,i):yield this.braintreeIntegrationService.tokenizeCard(e,t);return Object.assign(Object.assign({},r),{nonce:s,shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a})})}prepareHostedPaymentData(e,t,i){return Ye(this,void 0,void 0,function*(){const{paymentData:n}=e,r={deviceSessionId:this.deviceSessionId};if(this.isSubmittingWithStoredCard(e)){const{nonce:e}=yield this.braintreeHostedForm.tokenizeForStoredCardVerification();return Object.assign(Object.assign(Object.assign({},r),n),{nonce:e})}const{shouldSaveInstrument:o=!1,shouldSetAsDefaultInstrument:a=!1}=q(n)?n:{},{nonce:s}=this.shouldPerform3DSVerification(e)?yield this.verifyCardWithHostedForm(t,i):yield this.braintreeHostedForm.tokenize(t);return Object.assign(Object.assign({},r),{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a,nonce:s})})}prepareAdditionalActionPaymentData(e,t){const{paymentData:i}=e,n={deviceSessionId:this.deviceSessionId,nonce:t},{shouldSaveInstrument:r=!1,shouldSetAsDefaultInstrument:o=!1}=q(i)?i:{};return this.isSubmittingWithStoredCard(e)&&(r||o)?Object.assign(Object.assign({},i),n):Object.assign({},n)}verifyCardWithHostedForm(e,t){return Ye(this,void 0,void 0,function*(){const i=yield this.braintreeHostedForm.tokenize(e);return this.braintreeIntegrationService.challenge3DSVerification(i,t)})}processAdditionalAction(e,t,i){return Ye(this,void 0,void 0,function*(){if(!(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)||!d(e.body.errors,{code:\"three_d_secure_required\"}))return this.handleError(e);try{const{payer_auth_request:n}=function(e){return\"object\"==typeof e&&null!==e&&\"name\"in e&&\"body\"in e&&\"status\"in e.body&&\"three_ds_result\"in e.body&&\"payer_auth_request\"in e.body.three_ds_result&&\"errors\"in e.body}(e)&&e.body.three_ds_result||{},{paymentData:r}=t,o=this.paymentIntegrationService.getState();if(!r||!H(r))throw new R([\"instrumentId\"]);const a=o.getCardInstrumentOrThrow(r.instrumentId),{nonce:s}=yield this.braintreeIntegrationService.challenge3DSVerification({nonce:n||\"\",bin:a.iin},i),d=this.prepareAdditionalActionPaymentData(t,s);yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},t),{paymentData:d}))}catch(e){return this.handleError(e)}})}isHostedPaymentFormEnabled(e,t){return!!e&&!0===this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t).config.isHostedFormEnabled}isSubmittingWithStoredCard(e){return!(!e.paymentData||!H(e.paymentData))}shouldPerform3DSVerification(e){return!(!this.is3dsEnabled||this.isSubmittingWithStoredCard(e))}shouldInitializeBraintreeFastlane(){var e;const t=this.paymentIntegrationService.getState().getPaymentProviderCustomerOrThrow(),i=_e(t)?t:{};return(null===(e=this.paymentMethod)||void 0===e?void 0:e.initializationData.isAcceleratedCheckoutEnabled)&&!(null==i?void 0:i.authenticationState)}initializeBraintreeFastlaneOrThrow(e){return Ye(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),i=t.getCartOrThrow(),n=t.getPaymentMethodOrThrow(e),{clientToken:r,config:o}=n;if(!r)throw new U(j.MissingPaymentMethod);this.braintreeIntegrationService.initialize(r,this.threeDSecure),yield this.braintreeIntegrationService.getBraintreeFastlane(i.id,o.testMode)})}}function Ke(e){return\"cardNumber\"in e}function Xe(e){if(!M(e))return!1;const{details:t}=e;return void 0===t||\"object\"==typeof t&&null!==t&&void 0===t.invalidFieldKeys||(i=t,Array.isArray(i)&&i.every(e=>\"string\"==typeof e));var i}var Qe,Ze=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};!function(e){e[e.CreditCard=0]=\"CreditCard\",e[e.StoredCardVerification=1]=\"StoredCardVerification\"}(Qe||(Qe={}));class et{constructor(e,t){this.braintreeScriptLoader=e,this.braintreeSDKVersionManager=t,this.isInitializedHostedForm=!1,this.handleBlur=e=>{var t,i;null===(i=null===(t=this.formOptions)||void 0===t?void 0:t.onBlur)||void 0===i||i.call(t,{fieldType:this.mapFieldType(e.emittedBy),errors:this.mapErrors(e.fields)})},this.handleFocus=e=>{var t,i;null===(i=null===(t=this.formOptions)||void 0===t?void 0:t.onFocus)||void 0===i||i.call(t,{fieldType:this.mapFieldType(e.emittedBy)})},this.handleCardTypeChange=e=>{var t,i;const n=1===e.cards.length?e.cards[0].type.replace(/^master-card$/,\"mastercard\"):void 0;null===(i=null===(t=this.formOptions)||void 0===t?void 0:t.onCardTypeChange)||void 0===i||i.call(t,{cardType:n})},this.handleInputSubmitRequest=e=>{var t,i;null===(i=null===(t=this.formOptions)||void 0===t?void 0:t.onEnter)||void 0===i||i.call(t,{fieldType:this.mapFieldType(e.emittedBy)})},this.handleValidityChange=e=>{var t,i;null===(i=null===(t=this.formOptions)||void 0===t?void 0:t.onValidate)||void 0===i||i.call(t,{isValid:this.isValidForm(e),errors:this.mapValidationErrors(e.fields)})}}initialize(e,t,n){var r,o,a,s,d;return Ze(this,void 0,void 0,function*(){this.clientToken=n,this.formOptions=e,this.type=Ke(e.fields)?Qe.CreditCard:Qe.StoredCardVerification;const l=this.mapFieldOptions(e.fields,t);i(l)?this.isInitializedHostedForm=!1:(this.cardFields=yield this.createHostedFields({fields:l,styles:e.styles&&this.mapStyleOptions(e.styles)}),null===(r=this.cardFields)||void 0===r||r.on(\"blur\",this.handleBlur),null===(o=this.cardFields)||void 0===o||o.on(\"focus\",this.handleFocus),null===(a=this.cardFields)||void 0===a||a.on(\"cardTypeChange\",this.handleCardTypeChange),null===(s=this.cardFields)||void 0===s||s.on(\"validityChange\",this.handleValidityChange),null===(d=this.cardFields)||void 0===d||d.on(\"inputSubmitRequest\",this.handleInputSubmitRequest),this.isInitializedHostedForm=!0)})}isInitialized(){return!!this.isInitializedHostedForm}deinitialize(){var e;return Ze(this,void 0,void 0,function*(){this.isInitializedHostedForm&&(this.isInitializedHostedForm=!1,yield null===(e=this.cardFields)||void 0===e?void 0:e.teardown())})}validate(){if(!this.cardFields)throw new D(C.PaymentNotInitialized);const e=this.cardFields.getState();if(!this.isValidForm(e)){this.handleValidityChange(e);const t=this.mapValidationErrors(e.fields);throw new X(t)}}tokenize(e){var t,i,n,o,a;return Ze(this,void 0,void 0,function*(){if(!this.cardFields)throw new D(C.PaymentNotInitialized);try{const o=yield this.cardFields.tokenize(s({billingAddress:e&&this.mapBillingAddress(e)},r));return null===(i=null===(t=this.formOptions)||void 0===t?void 0:t.onValidate)||void 0===i||i.call(t,{isValid:!0,errors:{}}),{nonce:o.nonce,bin:null===(n=o.details)||void 0===n?void 0:n.bin}}catch(e){if(Xe(e)){const t=this.mapTokenizeError(e);if(t)throw null===(a=null===(o=this.formOptions)||void 0===o?void 0:o.onValidate)||void 0===a||a.call(o,{isValid:!1,errors:t}),new X(t)}throw e}})}tokenizeForStoredCardVerification(){var e,t,i,n,r;return Ze(this,void 0,void 0,function*(){if(!this.cardFields)throw new D(C.PaymentNotInitialized);try{const n=yield this.cardFields.tokenize();return null===(t=null===(e=this.formOptions)||void 0===e?void 0:e.onValidate)||void 0===t||t.call(e,{isValid:!0,errors:{}}),{nonce:n.nonce,bin:null===(i=n.details)||void 0===i?void 0:i.bin}}catch(e){if(Xe(e)){const t=this.mapTokenizeError(e,!0);if(t)throw null===(r=null===(n=this.formOptions)||void 0===n?void 0:n.onValidate)||void 0===r||r.call(n,{isValid:!1,errors:t}),new X(t)}throw e}})}createHostedFields(e){return Ze(this,void 0,void 0,function*(){const t=yield this.getClient(),i=yield this.braintreeScriptLoader.loadHostedFields(),n=this.braintreeSDKVersionManager.getSDKVersion()===v?Object.assign(Object.assign({},e),{preventCursorJumps:!0}):e;return i.create(Object.assign(Object.assign({},n),{client:t}))})}getClient(){return Ze(this,void 0,void 0,function*(){if(!this.clientToken)throw new D(C.PaymentNotInitialized);if(!this.client){const e=yield this.braintreeScriptLoader.loadClient();this.client=e.create({authorization:this.clientToken})}return this.client})}mapBillingAddress(e){return{countryName:e.country,postalCode:e.postalCode,streetAddress:e.address2?`${e.address1} ${e.address2}`:e.address1}}mapFieldOptions(e,t){if(Ke(e)){const i={};return null==t||t.forEach(e=>{(e=>Object.values(T).includes(e))(e)&&(i[e]=!1)}),s({number:Object.assign({container:`#${e.cardNumber.containerId}`,placeholder:e.cardNumber.placeholder,internalLabel:e.cardNumber.accessibilityLabel},Object.keys(i).length>0?{supportedCardBrands:i}:{}),expirationDate:{container:`#${e.cardExpiry.containerId}`,placeholder:e.cardExpiry.placeholder,internalLabel:e.cardExpiry.accessibilityLabel},cvv:e.cardCode&&{container:`#${e.cardCode.containerId}`,placeholder:e.cardCode.placeholder,internalLabel:e.cardCode.accessibilityLabel},cardholderName:{container:`#${e.cardName.containerId}`,placeholder:e.cardName.placeholder,internalLabel:e.cardName.accessibilityLabel}},r)}return s({number:e.cardNumberVerification&&{container:`#${e.cardNumberVerification.containerId}`,placeholder:e.cardNumberVerification.placeholder},cvv:e.cardCodeVerification&&{container:`#${e.cardCodeVerification.containerId}`,placeholder:e.cardCodeVerification.placeholder}},r)}mapStyleOptions(e){const t=(e={})=>s({color:e.color,\"font-family\":e.fontFamily,\"font-size\":e.fontSize,\"font-weight\":e.fontWeight},r);return{input:t(e.default),\".invalid\":t(e.error),\":focus\":t(e.focus)}}mapFieldType(e){switch(e){case\"number\":return this.type===Qe.StoredCardVerification?m.CardNumberVerification:m.CardNumber;case\"expirationDate\":return m.CardExpiry;case\"cvv\":return this.type===Qe.StoredCardVerification?m.CardCodeVerification:m.CardCode;case\"cardholderName\":return m.CardName;default:throw new Error(\"Unexpected field type\")}}mapErrors(e){const t={};if(e)for(const[i,n]of Object.entries(e))if(n&&this.isValidParam(i)){const{isValid:e,isEmpty:r,isPotentiallyValid:o}=n;t[i]={isValid:e,isEmpty:r,isPotentiallyValid:o}}return t}mapValidationErrors(e){return Object.keys(e).reduce((t,i)=>{var n;return Object.assign(Object.assign({},t),{[this.mapFieldType(i)]:(null===(n=e[i])||void 0===n?void 0:n.isValid)?void 0:[this.createInvalidError(this.mapFieldType(i))]})},{})}mapTokenizeError(e,t=!1){var i,n;if(\"HOSTED_FIELDS_FIELDS_EMPTY\"===e.code){const e=[this.createRequiredError(this.mapFieldType(\"cvv\"))];return t?{[this.mapFieldType(\"cvv\")]:e}:{[this.mapFieldType(\"cvv\")]:e,[this.mapFieldType(\"expirationDate\")]:[this.createRequiredError(this.mapFieldType(\"expirationDate\"))],[this.mapFieldType(\"number\")]:[this.createRequiredError(this.mapFieldType(\"number\"))],[this.mapFieldType(\"cardholderName\")]:[this.createRequiredError(this.mapFieldType(\"cardholderName\"))]}}return null===(n=null===(i=e.details)||void 0===i?void 0:i.invalidFieldKeys)||void 0===n?void 0:n.reduce((e,t)=>{const i=this.mapFieldType(t);return Object.assign(Object.assign({},e),{[i]:[this.createInvalidError(i)]})},{})}createRequiredError(e){var t;return{fieldType:e,message:null!==(t={[m.CardCode]:\"CVV is required\",[m.CardCodeVerification]:\"CVV is required\",[m.CardNumber]:\"Credit card number is required\",[m.CardNumberVerification]:\"Credit card number is required\",[m.CardExpiry]:\"Expiration date is required\",[m.CardName]:\"Full name is required\"}[e])&&void 0!==t?t:\"Field is required\",type:\"required\"}}createInvalidError(e){var t,i,n,r;const o={[m.CardCode]:{message:\"Invalid card code\",type:\"invalid_card_code\"},[m.CardCodeVerification]:{message:\"Invalid card code\",type:\"invalid_card_code\"},[m.CardNumber]:{message:\"Invalid card number\",type:\"invalid_card_number\"},[m.CardNumberVerification]:{message:\"Invalid card number\",type:\"invalid_card_number\"},[m.CardExpiry]:{message:\"Invalid card expiry\",type:\"invalid_card_expiry\"},[m.CardName]:{message:\"Invalid card name\",type:\"invalid_card_name\"}};return{fieldType:e,message:null!==(i=null===(t=o[e])||void 0===t?void 0:t.message)&&void 0!==i?i:\"Invalid field\",type:null!==(r=null===(n=o[e])||void 0===n?void 0:n.type)&&void 0!==r?r:\"invalid\"}}isValidForm(e){return Object.keys(e.fields).every(t=>{var i;return null===(i=e.fields[t])||void 0===i?void 0:i.isValid})}isValidParam(e){return[\"number\",\"cvv\",\"expirationDate\",\"postalCode\",\"cardholderName\",\"cardType\"].includes(e)}}const tt=L(t=>{const i=window,n=new F(t),r=new z(e(),i,n),o=new le(r,i),a=new et(r,n);return new Je(t,o,a)},[{id:\"braintree\"}]);var it=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class nt{constructor(e,t,i,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=i,this.braintreeHostWindow=n}initialize(e){return it(this,void 0,void 0,function*(){const{braintreepaypal:t,methodId:i}=e,{container:n,onError:r}=t||{};if(!i)throw new V('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new V('Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.');if(!n)throw new V('Unable to initialize payment because \"options.braintreepaypal.container\" argument is not provided.');let o,a=this.paymentIntegrationService.getState();try{if(o=a.getPaymentMethodOrThrow(i),!o.clientToken)throw new U(j.MissingPaymentToken)}catch(e){a=yield this.paymentIntegrationService.loadPaymentMethod(i),o=a.getPaymentMethodOrThrow(i)}const{clientToken:s,config:d,initializationData:l}=o,{paymentButtonStyles:c}=l||{},{checkoutTopButtonStyles:u}=c||{};if(!s||!l)throw new U(j.MissingPaymentMethod);const h={currency:a.getCartOrThrow().currency.code,intent:l.intent,isCreditEnabled:l.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(h,e=>{this.renderPayPalButton(e,t,i,Boolean(d.testMode),u)},e=>this.handleError(e,n,r))})}deinitialize(){return it(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}signIn(e,t){return it(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return it(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderPayPalButton(e,t,i,n,r){const{container:a,onClick:s=o}=t,{paypal:d}=this.braintreeHostWindow,l=null==d?void 0:d.FUNDING.PAYPAL;if(d&&l){const o=d.Buttons({env:this.braintreeIntegrationService.getBraintreeEnv(n),fundingSource:l,style:Object.assign(Object.assign({},r),{height:40}),createOrder:()=>this.setupPayment(e,t,i),onApprove:n=>this.tokenizePayment(n,e,i,t),onClick:s});o.isEligible()&&o.render(`#${a}`)}else this.braintreeIntegrationService.removeElement(a)}setupPayment(e,t,i){var n;return it(this,void 0,void 0,function*(){try{yield this.paymentIntegrationService.loadDefaultCheckout();const t=this.paymentIntegrationService.getState(),r=t.getCheckoutOrThrow().outstandingBalance,o=t.getCartOrThrow().currency.code,a=t.getCustomer(),s=t.getPaymentMethodOrThrow(i),d=null==a?void 0:a.addresses[0],l=d?this.braintreeIntegrationService.mapToBraintreeShippingAddressOverride(d):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:l,amount:r,currency:o,offerCredit:!1,intent:null===(n=s.initializationData)||void 0===n?void 0:n.intent})}catch(e){const{container:i,onError:n}=t;this.handleError(e,i,n)}})}tokenizePayment(e,t,i,n){return it(this,void 0,void 0,function*(){try{const{deviceData:n}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),r=yield t.tokenizePayment(e),{details:o,nonce:a}=r,s=this.braintreeIntegrationService.mapToLegacyBillingAddress(o),d=this.braintreeIntegrationService.mapToLegacyShippingAddress(o);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:i,action:\"set_external_checkout\",nonce:a,device_data:n,billing_address:JSON.stringify(s),shipping_address:JSON.stringify(d)}),r}catch(e){const{container:t,onError:i}=n;this.handleError(e,t,i)}})}handleError(e,t,i){if(this.braintreeIntegrationService.removeElement(t),!i||!M(e))throw e;i(e)}}const rt=L(t=>{const i=window,n=new F(t),r=new le(new z(e(),i,n),i);return new nt(t,u(),r,i)},[{id:\"braintreepaypal\"}]);var ot=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class at{constructor(e,t,i,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=i,this.braintreeHostWindow=n}initialize(e){return ot(this,void 0,void 0,function*(){const{braintreepaypalcredit:t,methodId:i}=e,{container:n,onError:r}=t||{};if(!i)throw new V('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new V('Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.');if(!n)throw new V('Unable to initialize payment because \"options.braintreepaypalcredit.container\" argument is not provided.');let o,a=this.paymentIntegrationService.getState();try{if(o=a.getPaymentMethodOrThrow(i),!o.clientToken)throw new U(j.MissingPaymentToken)}catch(e){a=yield this.paymentIntegrationService.loadPaymentMethod(i),o=a.getPaymentMethodOrThrow(i)}const{clientToken:s,config:d,initializationData:l}=o,{paymentButtonStyles:c}=l||{},{checkoutTopButtonStyles:u}=c||{};if(!s||!l)throw new U(j.MissingPaymentMethod);const h={currency:a.getCartOrThrow().currency.code,intent:l.intent,isCreditEnabled:l.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(h,e=>{this.renderPayPalButton(e,t,i,Boolean(d.testMode),Object.assign(Object.assign({},u),{height:40}))},e=>this.handleError(e,n,r))})}deinitialize(){return ot(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}signIn(e,t){return ot(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return ot(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderPayPalButton(e,t,i,n,r){const{container:a,onClick:s=o}=t,{paypal:d}=this.braintreeHostWindow;let l=!1;d&&[d.FUNDING.PAYLATER,d.FUNDING.CREDIT].forEach(o=>{if(!l){const c=d.Buttons({env:n?\"sandbox\":\"production\",fundingSource:o,style:r,createOrder:()=>this.setupPayment(e,t,i),onApprove:n=>this.tokenizePayment(n,e,i,t),onClick:s});c.isEligible()&&(c.render(`#${a}`),l=!0)}}),d&&l||this.braintreeIntegrationService.removeElement(a)}setupPayment(e,t,i){var n;return ot(this,void 0,void 0,function*(){try{yield this.paymentIntegrationService.loadDefaultCheckout();const t=this.paymentIntegrationService.getState(),r=t.getCheckoutOrThrow().outstandingBalance,o=t.getCartOrThrow().currency.code,a=t.getCustomer(),s=t.getPaymentMethodOrThrow(i),d=null==a?void 0:a.addresses[0],l=d?this.braintreeIntegrationService.mapToBraintreeShippingAddressOverride(d):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:l,amount:r,currency:o,offerCredit:!0,intent:null===(n=s.initializationData)||void 0===n?void 0:n.intent})}catch(e){const{container:i,onError:n}=t;this.handleError(e,i,n)}})}tokenizePayment(e,t,i,n){return ot(this,void 0,void 0,function*(){try{const{deviceData:n}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),r=yield t.tokenizePayment(e),{details:o,nonce:a}=r,s=this.braintreeIntegrationService.mapToLegacyBillingAddress(o),d=this.braintreeIntegrationService.mapToLegacyShippingAddress(o);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:i,action:\"set_external_checkout\",nonce:a,device_data:n,billing_address:JSON.stringify(s),shipping_address:JSON.stringify(d)}),r}catch(e){const{container:t,onError:i}=n;this.handleError(e,t,i)}})}handleError(e,t,i){if(this.braintreeIntegrationService.removeElement(t),!i||!M(e))throw e;i(e)}}const st=L(t=>{const i=window,n=new F(t),r=new le(new z(e(),i,n),i);return new at(t,u(),r,i)},[{id:\"braintreepaypalcredit\"}]);var dt=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class lt{constructor(e,t){this.paymentIntegrationService=e,this.braintreeFastlaneUtils=t,this.isAcceleratedCheckoutEnabled=!1}initialize({methodId:e,braintreefastlane:t}){var i;return dt(this,void 0,void 0,function*(){if(!e)throw new V('Unable to proceed because \"methodId\" argument is not provided.');const n=yield this.getValidPaymentMethodOrThrow(e),{isAcceleratedCheckoutEnabled:r,isFastlaneStylingEnabled:o}=n.initializationData||{},a=o?null===(i=n.initializationData)||void 0===i?void 0:i.fastlaneStyles:void 0;this.isAcceleratedCheckoutEnabled=!!r;try{if(this.isAcceleratedCheckoutEnabled){const e=Me(a,null==t?void 0:t.styles);yield this.braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow(n.id,e)}}catch(e){}return Promise.resolve()})}deinitialize(){return dt(this,void 0,void 0,function*(){return Promise.resolve()})}signIn(e,t){return dt(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return dt(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){return dt(this,void 0,void 0,function*(){const{checkoutPaymentMethodExecuted:t,continueWithCheckoutCallback:i}=e||{};if(\"function\"!=typeof i)throw new V('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');const n=this.paymentIntegrationService.getState().getCustomerOrThrow();if(this.isAcceleratedCheckoutEnabled&&n.isGuest){const e=yield this.shouldRunAuthenticationFlow();t&&\"function\"==typeof t&&t(),e&&(yield this.braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow(void 0,!0))}i()})}shouldRunAuthenticationFlow(){var e;return dt(this,void 0,void 0,function*(){const t=\"braintreeacceleratedcheckout\";try{yield this.paymentIntegrationService.loadPaymentMethod(t);const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t);return(null===(e=i.initializationData)||void 0===e?void 0:e.shouldRunAcceleratedCheckout)||!1}catch(e){return!1}})}getValidPaymentMethodOrThrow(e){return dt(this,void 0,void 0,function*(){let t=e;try{yield this.paymentIntegrationService.loadPaymentMethod(t)}catch(i){t=\"braintree\"===e?\"braintreeacceleratedcheckout\":\"braintree\",yield this.paymentIntegrationService.loadPaymentMethod(t)}return this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t)})}}const ct=L(t=>{const i=window,n=new F(t),r=new le(new z(e(),i,n),i),o=new je(t,r);return new lt(t,o)},[{id:\"braintreeacceleratedcheckout\"},{id:\"braintree\"}]);class ut extends p{constructor(e){super(e||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var ht=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class yt{constructor(e,t,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=i,this.buttonClassName=\"visa-checkout-wrapper\",this.onError=o}initialize(e){return ht(this,void 0,void 0,function*(){const{braintreevisacheckout:t,methodId:i}=e;if(!i)throw new V('Unable to proceed because \"methodId\" argument is not provided.');if(!t)throw new V('Unable to proceed because \"options.braintreevisacheckout\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(i);const n=this.paymentIntegrationService.getState(),r=n.getCheckoutOrThrow(),{clientToken:a,config:s}=n.getPaymentMethodOrThrow(i),d=n.getStoreConfigOrThrow();if(!a)throw new U(j.MissingPaymentMethod);this.braintreeSdk.initialize(a);const l=yield this.braintreeSdk.getBraintreeVisaCheckout(),c=yield this.braintreeSdk.getVisaCheckoutSdk(s.testMode),{container:u,onError:h}=t;this.onError=h||o;const y=l.createInitOptions({paymentRequest:{currencyCode:d.currency.code,subtotal:String(r.subtotal)},settings:{locale:d.storeProfile.storeLanguage,shipping:{collectShipping:!0}}}),m=this.createSignInButton(u,this.buttonClassName);yield c.init(y),c.on(\"payment.success\",e=>this.tokenizePayment(l,e).then(()=>this.paymentIntegrationService.loadCheckout()).catch(e=>this.handleError(e))),c.on(\"payment.error\",(e,t)=>this.handleError(t)),m.style.visibility=\"visible\"})}deinitialize(){return ht(this,void 0,void 0,function*(){yield this.braintreeSdk.deinitialize()})}signIn(){throw new ut('In order to sign in via VisaCheckout, the shopper must click on \"Visa Checkout\" button.')}signOut(e){return ht(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}tokenizePayment(e,t){return ht(this,void 0,void 0,function*(){return Promise.all([e.tokenize(t),this.braintreeSdk.getDataCollectorOrThrow()]).then(([e,t])=>{const i=this.paymentIntegrationService.getState(),n=i.getShippingAddress(),r=i.getBillingAddress(),{shippingAddress:o=this.mapToVisaCheckoutAddress(n),billingAddress:a=this.mapToVisaCheckoutAddress(r)}=e;return this.postForm(Object.assign(Object.assign({},e),{shippingAddress:o,billingAddress:a}),t)})})}postForm(e,t){const{userData:i,billingAddress:n,shippingAddress:r,details:o}=e,{userEmail:a}=i,{deviceData:s}=t;return this.formPoster.postForm(\"/checkout.php\",{payment_type:e.type,nonce:e.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,n)),shipping_address:JSON.stringify(this.getAddress(a,r))})}mapToVisaCheckoutAddress(e){return e?{firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phone,streetAddress:e.address1,extendedAddress:e.address2,locality:e.city,region:e.stateOrProvinceCode,countryCode:e.countryCode,postalCode:e.postalCode}:{}}getAddress(e,t={}){return{email:e,first_name:t.firstName,last_name:t.lastName,phone_number:t.phoneNumber,address_line_1:t.streetAddress,address_line_2:t.extendedAddress,city:t.locality,state:t.region,country_code:t.countryCode,postal_code:t.postalCode}}createSignInButton(e,t){const i=document.querySelector(`#${e}`);if(!i)throw new Error(\"Unable to proceed because the provided container ID is not valid.\");return this.insertVisaCheckoutButton(i,t)}insertVisaCheckoutButton(e,t){const i=document.createElement(\"div\");return i.style.display=\"flex\",i.style.flexDirection=\"column\",i.style.visibility=\"hidden\",i.style.width=\"max-content\",i.className=t,i.innerHTML='\\n            <img\\n                alt=\"Visa Checkout\"\\n                class=\"v-button\"\\n                role=\"button\"\\n                src=\"https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178\"\\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>',e.appendChild(i),i}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const mt=L(t=>{const i=window,n=new F(t),r=new B(new z(e(),i,n));return new yt(t,u(),r)},[{id:\"braintreevisacheckout\"}]);class pt extends p{constructor(e){super(e||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}function gt(e){const{color:t,fundingicons:i,height:n=40,layout:o,shape:a,size:d,tagline:l}=e||{},c={color:t,fundingicons:i,height:vt(n),layout:o,shape:a||\"rect\",size:d,tagline:l};return s(c,r)}function vt(e){const t=Number(e);return!t||Number.isNaN(t)?40:t>55?55:t<25?25:t}var ft=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class bt{constructor(e,t,i,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=i,this.braintreeHostWindow=n}initialize(e){return ft(this,void 0,void 0,function*(){const{braintreepaypal:t,containerId:i,methodId:n}=e;if(!n)throw new V('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new V('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new V('Unable to initialize payment because \"options.braintreepaypal\" argument is not provided.');let r,o=this.paymentIntegrationService.getState();if(t.buyNowInitializeOptions){if(!t.currencyCode)throw new V('Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.');r=t.currencyCode}else yield this.paymentIntegrationService.loadDefaultCheckout(),o=this.paymentIntegrationService.getState(),r=o.getCartOrThrow().currency.code;const a=o.getPaymentMethodOrThrow(n),{clientToken:s,config:d,initializationData:l}=a;if(!s||!l)throw new U(j.MissingPaymentMethod);const c={currency:r,intent:l.intent,isCreditEnabled:l.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(c,e=>{this.renderPayPalButton(e,t,i,n,!!d.testMode)},e=>this.handleError(e,i,t.onError))})}deinitialize(){return ft(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}renderPayPalButton(e,t,i,n,r){const{style:o,shouldProcessPayment:a,onAuthorizeError:s,onEligibilityFailure:d}=t,{paypal:l}=this.braintreeHostWindow;if(l){const c=l.Buttons({env:r?\"sandbox\":\"production\",fundingSource:l.FUNDING.PAYPAL,style:gt(o),createOrder:()=>this.setupPayment(e,t,n),onApprove:t=>this.tokenizePayment(t,e,n,a,s)});c.isEligible()?c.render(`#${i}`):d&&\"function\"==typeof d&&d()}else this.braintreeIntegrationService.removeElement(i)}setupPayment(e,t,i){var n;return ft(this,void 0,void 0,function*(){const{onPaymentError:r,shippingAddress:o,buyNowInitializeOptions:a}=t;try{const r=\"function\"==typeof(null==a?void 0:a.getBuyNowCartRequestBody)?yield this.createBuyNowCart(a.getBuyNowCartRequestBody()):void 0;this.buyNowCartId=null==r?void 0:r.id;const s=this.paymentIntegrationService.getState(),d=s.getCustomer(),l=s.getPaymentMethodOrThrow(i),c=r?r.cartAmount:s.getCartOrThrow().cartAmount,u=r?t.currencyCode:s.getCartOrThrow().currency.code,h=o||(null==d?void 0:d.addresses[0]),y=h?ve(h):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:y,amount:c,currency:u,offerCredit:!1,intent:null===(n=l.initializationData)||void 0===n?void 0:n.intent})}catch(e){throw r&&(M(e)||e instanceof p)&&r(e),e}})}tokenizePayment(e,t,i,n,r){return ft(this,void 0,void 0,function*(){try{const{deviceData:r}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),o=yield t.tokenizePayment(e),{details:a,nonce:s}=o,d=this.braintreeIntegrationService.mapToLegacyBillingAddress(a),l=this.braintreeIntegrationService.mapToLegacyShippingAddress(a);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",provider:i,action:n?\"process_payment\":\"set_external_checkout\",nonce:s,device_data:r,billing_address:JSON.stringify(d),shipping_address:JSON.stringify(l)},this.buyNowCartId&&{cart_id:this.buyNowCartId})),o}catch(e){throw r&&(M(e)||e instanceof p)&&r(e),e}})}createBuyNowCart(e){return ft(this,void 0,void 0,function*(){if(!e)throw new U(j.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(e)}catch(e){throw new pt}})}handleError(e,t,i){if(this.braintreeIntegrationService.removeElement(t),!i||!M(e))throw e;i(e)}}const wt=L(t=>{const i=window,n=new F(t),r=new le(new z(e(),i,n),i);return new bt(t,u(),r,i)},[{id:\"braintreepaypal\"}]);var Ct=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class St{constructor(e,t,i,n){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeIntegrationService=i,this.braintreeHostWindow=n}initialize(e){return Ct(this,void 0,void 0,function*(){const{braintreepaypalcredit:t,containerId:i,methodId:n}=e;if(!n)throw new V('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new V('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new V('Unable to initialize payment because \"options.braintreepaypalcredit\" argument is not provided.');let r,o=this.paymentIntegrationService.getState();if(t.buyNowInitializeOptions){if(!t.currencyCode)throw new V('Unable to initialize payment because \"options.braintreepaypalcredit.currencyCode\" argument is not provided.');r=t.currencyCode}else yield this.paymentIntegrationService.loadDefaultCheckout(),o=this.paymentIntegrationService.getState(),r=o.getCartOrThrow().currency.code;const a=o.getPaymentMethodOrThrow(n),{clientToken:s,config:d,initializationData:l}=a;if(!s||!l)throw new U(j.MissingPaymentMethod);const c={currency:r,intent:l.intent,isCreditEnabled:l.isCreditEnabled,commit:!1};this.braintreeIntegrationService.initialize(s),yield this.braintreeIntegrationService.getPaypalCheckout(c,e=>{this.renderPayPalButton(e,t,i,n,!!d.testMode)},e=>this.handleError(e,i,t.onError))})}deinitialize(){return Ct(this,void 0,void 0,function*(){yield this.braintreeIntegrationService.teardown()})}renderPayPalButton(e,t,i,n,r){const{style:o,shouldProcessPayment:a,onAuthorizeError:s,onEligibilityFailure:d}=t,{paypal:l}=this.braintreeHostWindow;let c=!1;l&&[l.FUNDING.PAYLATER,l.FUNDING.CREDIT].forEach(u=>{const h=u===l.FUNDING.CREDIT?Object.assign({label:oe.CREDIT},gt(o)):gt(o);if(!c){const o=l.Buttons({env:r?\"sandbox\":\"production\",fundingSource:u,style:h,createOrder:()=>this.setupPayment(e,t,n),onApprove:t=>this.tokenizePayment(t,e,n,a,s)});o.isEligible()?(o.render(`#${i}`),c=!0):l.FUNDING.CREDIT&&d&&\"function\"==typeof d&&d()}}),l&&c||this.braintreeIntegrationService.removeElement(i)}setupPayment(e,t,i){var n;return Ct(this,void 0,void 0,function*(){const{onPaymentError:r,shippingAddress:o,buyNowInitializeOptions:a}=t;try{const r=\"function\"==typeof(null==a?void 0:a.getBuyNowCartRequestBody)?yield this.createBuyNowCart(a.getBuyNowCartRequestBody()):void 0;this.buyNowCartId=null==r?void 0:r.id;const s=this.paymentIntegrationService.getState(),d=s.getCustomer(),l=s.getPaymentMethodOrThrow(i),c=r?r.cartAmount:s.getCartOrThrow().cartAmount,u=r?t.currencyCode:s.getCartOrThrow().currency.code,h=o||(null==d?void 0:d.addresses[0]),y=h?ve(h):void 0;return yield e.createPayment({flow:\"checkout\",enableShippingAddress:!0,shippingAddressEditable:!1,shippingAddressOverride:y,amount:c,currency:u,offerCredit:!0,intent:null===(n=l.initializationData)||void 0===n?void 0:n.intent})}catch(e){throw r&&(M(e)||e instanceof p)&&r(e),e}})}tokenizePayment(e,t,i,n,r){return Ct(this,void 0,void 0,function*(){try{const{deviceData:r}=yield this.braintreeIntegrationService.getDataCollector({paypal:!0}),o=yield t.tokenizePayment(e),{details:a,nonce:s}=o,d=this.braintreeIntegrationService.mapToLegacyBillingAddress(a),l=this.braintreeIntegrationService.mapToLegacyShippingAddress(a);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",provider:i,action:n?\"process_payment\":\"set_external_checkout\",nonce:s,device_data:r,billing_address:JSON.stringify(d),shipping_address:JSON.stringify(l)},this.buyNowCartId&&{cart_id:this.buyNowCartId})),o}catch(e){throw r&&(M(e)||e instanceof p)&&r(e),e}})}createBuyNowCart(e){return Ct(this,void 0,void 0,function*(){if(!e)throw new U(j.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(e)}catch(e){throw new pt}})}handleError(e,t,i){if(this.braintreeIntegrationService.removeElement(t),!i||!M(e))throw e;i(e)}}const Pt=L(t=>{const i=window,n=new F(t),r=new le(new z(e(),i,n),i);return new St(t,u(),r,i)},[{id:\"braintreepaypalcredit\"}]);var It=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class Ot{constructor(e,t,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=i}initialize(e){return It(this,void 0,void 0,function*(){const{containerId:t,methodId:i}=e;if(!i)throw new V('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new V('Unable to initialize payment because \"options.containerId\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(i);const n=this.paymentIntegrationService.getState(),{clientToken:r,initializationData:o,config:a}=n.getPaymentMethodOrThrow(i);if(!r||!o)throw new U(j.MissingPaymentMethod);this.braintreeSdk.initialize(r);const s=yield this.braintreeSdk.getBraintreeVisaCheckout(),{currency:{code:d},cartAmount:l}=n.getCartOrThrow(),c=yield this.braintreeSdk.getVisaCheckoutSdk(a.testMode),u=s.createInitOptions({paymentRequest:{currencyCode:d,subtotal:String(l)},settings:{shipping:{collectShipping:!0}}});this.createSignInButton(t),yield c.init(u),c.on(\"payment.success\",e=>It(this,void 0,void 0,function*(){yield this.paymentSuccess(s,e)}))})}deinitialize(){return Promise.resolve()}paymentSuccess(e,t){return It(this,void 0,void 0,function*(){return Promise.all([e.tokenize(t),this.braintreeSdk.getDataCollectorOrThrow()]).then(([e,t])=>{const i=this.paymentIntegrationService.getState(),n=i.getShippingAddress(),r=i.getBillingAddress(),{shippingAddress:o=this.toVisaCheckoutAddress(n),billingAddress:a=this.toVisaCheckoutAddress(r)}=e;return this.postForm(Object.assign(Object.assign({},e),{shippingAddress:o,billingAddress:a}),t)})})}postForm(e,t){const{userData:i,billingAddress:n,shippingAddress:r,details:o}=e,{userEmail:a}=i,{deviceData:s}=t;return this.formPoster.postForm(\"/checkout.php\",{payment_type:e.type,nonce:e.nonce,provider:\"braintreevisacheckout\",action:\"set_external_checkout\",device_data:s,card_information:JSON.stringify({type:o.cardType,number:o.lastTwo}),billing_address:JSON.stringify(this.getAddress(a,n)),shipping_address:JSON.stringify(this.getAddress(a,r))})}toVisaCheckoutAddress(e){return e?{firstName:e.firstName,lastName:e.lastName,phoneNumber:e.phone,streetAddress:e.address1,extendedAddress:e.address2,locality:e.city,region:e.stateOrProvinceCode,countryCode:e.countryCode,postalCode:e.postalCode}:{}}getAddress(e,t={}){return{email:e,first_name:t.firstName,last_name:t.lastName,phone_number:t.phoneNumber,address_line_1:t.streetAddress,address_line_2:t.extendedAddress,city:t.locality,state:t.region,country_code:t.countryCode,postal_code:t.postalCode}}createSignInButton(e){const t=document.querySelector(`#${e}`);if(!t)throw new Error(\"Need a container to place the button\");return this.insertVisaCheckoutButton(t)}insertVisaCheckoutButton(e){const t=document.createElement(\"div\");return t.style.display=\"flex\",t.style.flexDirection=\"column\",t.style.alignItems=\"flex-end\",t.innerHTML='\\n            <img\\n                alt=\"Visa Checkout\"\\n                class=\"v-button\"\\n                role=\"button\"\\n                src=\"https://secure.checkout.visa.com/wallet-services-web/xo/button.png?acceptCanadianVisaDebit=false&cobrand=true&height=34&width=178\"\\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>',e.appendChild(t),t}}const kt=L(t=>{const i=window,n=new F(t),r=new B(new z(e(),i,n));return new Ot(t,u(),r)},[{id:\"braintreevisacheckout\"}]);function Et(e){const{billingAddress:t,email:i,firstName:n,lastName:r,phone:o,shippingAddress:a}=e,s=t||a;return{email:i,first_name:n,last_name:r,phone_number:o,address_line_1:null==s?void 0:s.line1,address_line_2:null==s?void 0:s.line2,city:null==s?void 0:s.city,state:null==s?void 0:s.state,country_code:null==s?void 0:s.countryCode,postal_code:null==s?void 0:s.postalCode}}function Tt(e){const{email:t,phone:i,shippingAddress:n}=e,r=(null==n?void 0:n.recipientName)||\"\",[o,a]=r.split(\" \");return{email:t,first_name:o||\"\",last_name:a||\"\",phone_number:i,address_line_1:null==n?void 0:n.line1,address_line_2:null==n?void 0:n.line2,city:null==n?void 0:n.city,state:null==n?void 0:n.state,country_code:null==n?void 0:n.countryCode,postal_code:null==n?void 0:n.postalCode}}var At=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};const zt=e=>{const{color:t,height:i}=e;return{backgroundColor:(n=t||\"\",n===re.WHITE?\"#FFFFFF\":\"#3D95CE\"),backgroundPosition:\"50% 50%\",backgroundSize:\"80px auto\",backgroundImage:`url(\"/app/assets/img/payment-providers/venmo-logo-${t===re.WHITE?re.BLUE:re.WHITE}.svg\")`,backgroundRepeat:\"no-repeat\",borderRadius:\"4px\",cursor:\"pointer\",transition:\"0.2s ease\",minHeight:`${i||40}px`,minWidth:\"150px\",height:\"100%\",width:\"100%\",border:t===re.WHITE?\"1px solid black\":\"none\"};var n};class Nt{constructor(e,t,i){this.paymentIntegrationService=e,this.formPoster=t,this.braintreeSdk=i,this.onError=o}initialize(e){return At(this,void 0,void 0,function*(){const{braintreevenmo:t,containerId:i,methodId:n}=e;if(!n)throw new V('Unable to initialize payment because \"options.methodId\" argument is not provided.');const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n),{clientToken:o,initializationData:a}=r,{paymentButtonStyles:s}=a,{cartButtonStyles:d}=s||{},l=(null==t?void 0:t.style)||d;if(!o||!a)throw new U(j.MissingPaymentMethod);if(!i)throw new V('Unable to initialize payment because \"options.containerId\" argument is not provided.');yield this.paymentIntegrationService.loadDefaultCheckout(),this.onError=(null==t?void 0:t.onError)||this.handleError,this.braintreeSdk.initialize(o);try{const e=yield this.braintreeSdk.getVenmoCheckoutOrThrow();this.renderVenmoButton(e,i,null==t?void 0:t.buyNowInitializeOptions,l)}catch(e){(ge(e)||function(e){return e instanceof N}(e))&&this.handleInitializationVenmoError(e,i)}})}deinitialize(){return At(this,void 0,void 0,function*(){return yield this.braintreeSdk.deinitialize(),Promise.resolve()})}handleError(e){throw new Error(e.message)}createBuyNowCart(e){return At(this,void 0,void 0,function*(){if(\"function\"==typeof(null==e?void 0:e.getBuyNowCartRequestBody)){const t=null==e?void 0:e.getBuyNowCartRequestBody();if(!t)throw new U(j.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new pt}}})}handleInitializationVenmoError(e,t){return this.removeVenmoContainer(t),this.onError(e)}removeVenmoContainer(e){const t=document.getElementById(e);t&&t.remove()}renderVenmoButton(e,t,i,n){const r=document.getElementById(t),{color:o}=n||{};if(!r)throw new V(\"Unable to create wallet button without valid container ID.\");r.setAttribute(\"aria-label\",\"Venmo\"),Object.assign(r.style,zt(n||{})),r.addEventListener(\"click\",()=>At(this,void 0,void 0,function*(){r.setAttribute(\"disabled\",\"true\");const t=yield this.createBuyNowCart(i);e.tokenize&&e.tokenize((e,i)=>At(this,void 0,void 0,function*(){r.removeAttribute(\"disabled\"),e&&this.onError(e),yield this.handlePostForm(i,null==t?void 0:t.id)}))})),o===re.BLUE&&(r.addEventListener(\"mouseenter\",()=>{r.style.backgroundColor=\"#0a7fc2\"}),r.addEventListener(\"mouseleave\",()=>{r.style.backgroundColor=zt(n||{}).backgroundColor}))}handlePostForm(e,t){return At(this,void 0,void 0,function*(){const{deviceData:i}=yield this.braintreeSdk.getDataCollectorOrThrow(),{nonce:n,details:r}=e;this.formPoster.postForm(\"/checkout.php\",Object.assign({nonce:n,provider:\"braintreevenmo\",payment_type:\"paypal\",device_data:i,action:\"set_external_checkout\",billing_address:JSON.stringify(Et(r)),shipping_address:JSON.stringify(Tt(r))},t&&{cart_id:t}))})}}const Dt=L(t=>{const i=window,n=e(),r=new F(t),o=new z(n,i,r),a=new B(o);return new Nt(t,u(),a)},[{id:\"braintreevenmo\"}]);export{K as createBraintreeAchPaymentStrategy,tt as createBraintreeCreditCardPaymentStrategy,ct as createBraintreeFastlaneCustomerStrategy,Ue as createBraintreeFastlanePaymentStrategy,Ne as createBraintreeLocalMethodsPaymentStrategy,wt as createBraintreePaypalButtonStrategy,Pt as createBraintreePaypalCreditButtonStrategy,st as createBraintreePaypalCreditCustomerStrategy,rt as createBraintreePaypalCustomerStrategy,we as createBraintreePaypalPaymentStrategy,Dt as createBraintreeVenmoButtonStrategy,Ge as createBraintreeVenmoPaymentStrategy,kt as createBraintreeVisaCheckoutButtonStrategy,mt as createBraintreeVisaCheckoutCustomerStrategy,We as createBraintreeVisaCheckoutPaymentStrategy};\n//# sourceMappingURL=braintree.js.map"
  },
  {
    "path": "dist/esm/integrations/cba-mpgs.js",
    "content": "import{getScriptLoader as e}from\"@bigcommerce/script-loader\";import{isNil as t,noop as i,some as n,values as s}from\"lodash\";var r;class a extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class o extends a{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class c extends a{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class d extends o{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(r||(r={}));class u extends a{constructor(e){super(function(e){switch(e){case r.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case r.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case r.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case r.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var l,h=function(e,t,i,n){return new(i||(i=Promise))(function(s,r){function a(e){try{c(n.next(e))}catch(e){r(e)}}function o(e){try{c(n.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,o)}c((n=n.apply(e,t||[])).next())})},m=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var s=0;for(n=Object.getOwnPropertySymbols(e);s<n.length;s++)t.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(e,n[s])&&(i[n[s]]=e[n[s]])}return i};class p{constructor(e){this._paymentIntegrationService=e}execute(e,t){var i,n;return this._isHostedPaymentFormEnabled(null===(i=e.payment)||void 0===i?void 0:i.methodId,null===(n=e.payment)||void 0===n?void 0:n.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve();const t=e&&e.creditCard&&e.creditCard.form,i=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:n=\"\"}={}}=i.getStoreConfigOrThrow();if(!t)throw new o;const s=this._paymentIntegrationService.createHostedForm(n,t);return s.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=s,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new c)}_executeWithoutHostedForm(e,t){return h(this,void 0,void 0,function*(){const{payment:i}=e,n=m(e,[\"payment\"]),s=i&&i.paymentData;if(!i||!s)throw new d([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(n,t),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},i),{paymentData:s}))})}_executeWithHostedForm(e,t){return h(this,void 0,void 0,function*(){const{payment:i}=e,n=m(e,[\"payment\"]),s=this._hostedForm;if(!s)throw new u(r.PaymentNotInitialized);if(!i||!i.methodId)throw new d([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(n,t),yield s.validate().then(()=>s.submit(i))})}_isHostedPaymentFormEnabled(e,t){return!!e&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(e){return!s(e&&e.creditCard&&e.creditCard.form.fields).every(t)}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(l||(l={}));class y extends a{constructor(e){super(function(e){switch(e){case l.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case l.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case l.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case l.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case l.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case l.MissingCheckoutConfig:case l.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case l.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case l.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case l.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case l.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case l.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case l.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class g extends a{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}const b={body:{},headers:{},status:0};class f extends a{constructor(e,{message:t,errors:i}={}){const{body:n,headers:s,status:r}=e||b;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=n,this.headers=s,this.status=r,this.errors=i||[]}}var v;!function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(v||(v={}));const I=v;var w=function(e,t,i,n){return new(i||(i=Promise))(function(s,r){function a(e){try{c(n.next(e))}catch(e){r(e)}}function o(e){try{c(n.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,o)}c((n=n.apply(e,t||[])).next())})};class P extends p{constructor(e,t){super(e),this.paymentIntegrationService=e,this.cbaMGPSScriptLoader=t,this.sessionId=\"\"}initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return w(this,void 0,void 0,function*(){yield t.initialize.call(this,e);const{methodId:i}=e;yield this.paymentIntegrationService.loadPaymentMethod(i);const n=this.paymentIntegrationService.getState(),s=n.getPaymentMethodOrThrow(i);if(!function(e){return\"object\"==typeof e&&null!==e&&\"initializationData\"in e&&\"object\"==typeof e.initializationData&&null!==e.initializationData&&\"merchantId\"in e.initializationData&&\"string\"==typeof e.initializationData.merchantId&&(\"boolean\"==typeof e.initializationData.isTestModeFlagEnabled||void 0===e.initializationData.isTestModeFlagEnabled)}(s))throw new y(l.MissingPaymentMethod);const{clientToken:a,initializationData:{isTestModeFlagEnabled:o=!1,merchantId:c},config:{is3dsEnabled:d}}=s;if(d){if(this.threeDSjs=yield this.cbaMGPSScriptLoader.load(o),!this.threeDSjs)throw new u(r.PaymentNotInitialized);if(!a||!c)throw new y(l.MissingPaymentMethod);if(this.sessionId=a,this.locale=n.getLocale(),!this.locale)throw new y(l.MissingCart);yield this.threeDSjs.configure({merchantId:c,sessionId:this.sessionId,callback:()=>{var e;if(null===(e=this.threeDSjs)||void 0===e?void 0:e.isConfigured())return this.paymentIntegrationService.getState();throw new g(\"Failed to configure 3DS API.\")},configuration:{userLanguage:this.locale,wsVersion:62}})}return Promise.resolve()})}execute(e,t){const i=Object.create(null,{execute:{get:()=>super.execute}});return w(this,void 0,void 0,function*(){const{payment:s}=e,r=s&&s.paymentData;if(!s||!r)throw new d([\"payment.paymentData\"]);const a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(s.methodId),{is3dsEnabled:o}=a.config;if(o){const t=Object.assign(Object.assign({},r),{threeDSecure:{token:this.sessionId}});e.payment&&(e.payment.paymentData=t)}return i.execute.call(this,e,t).catch(e=>{if(!o||!(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)||!n(e.body.errors,{code:\"three_d_secure_required\"}))return Promise.reject(e);const t=this.paymentIntegrationService.getState(),i=t.getOrder(),{storeProfile:{storeId:s}}=t.getStoreConfigOrThrow();if(!i||!this.sessionId)throw new y(l.MissingCheckout);const r=`${s}_${i.orderId}`;if(\"object\"!=typeof(a=e.body)||null===a||!(\"three_ds_result\"in a)||\"object\"!=typeof a.three_ds_result||null===a.three_ds_result||!(\"token\"in a.three_ds_result)||\"string\"!=typeof a.three_ds_result.token)throw new f;var a;const{three_ds_result:{token:c}}=e.body;return c?this.initiateAuthentication(r,c):Promise.reject(e)})})}finalize(e){return w(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState();return t.getOrder()&&t.getPaymentStatus()===I.FINALIZE?(yield this.paymentIntegrationService.finalizeOrder(e),Promise.resolve()):Promise.reject(new c)})}deinitialize(){return this.threeDSjs=void 0,this.sessionId=\"\",super.deinitialize()}initiateAuthentication(e,t){return w(this,void 0,void 0,function*(){const i=yield new Promise((i,n)=>{if(!this.threeDSjs)throw new u(r.PaymentNotInitialized);this.threeDSjs.initiateAuthentication(e,t,e=>{const t=e.error;return t?n(new g(t.msg)):this.threeDSjs&&\"PROCEED\"===e.gatewayRecommendation?i(e.restApiResponse):n(new g)})});if(i.transaction&&\"AUTHENTICATION_AVAILABLE\"===i.transaction.authenticationStatus)return this.authenticatePayer(e,t);throw new g})}authenticatePayer(e,t,n=1){return w(this,void 0,void 0,function*(){return new Promise((s,a)=>{if(!this.threeDSjs)return a(new u(r.PaymentNotInitialized));this.threeDSjs.authenticatePayer(e,t,s=>w(this,void 0,void 0,function*(){const r=s.error;return r?r.cause&&\"SERVER_BUSY\"===r.cause&&n<5?(yield new Promise(e=>setTimeout(e,3e3)),this.authenticatePayer(e,t,++n)):a(new g):new Promise(i)}),{fullScreenRedirect:!0})})})}}class M extends a{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class S{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e){return t=this,i=void 0,s=function*(){if(yield this._scriptLoader.loadScript(`//${e?\"test\":\"ap\"}-gateway.mastercard.com/static/threeDS/1.3.0/three-ds.min.js`),!this._window.ThreeDS)throw new M;return this._window.ThreeDS},new((n=void 0)||(n=Promise))(function(e,r){function a(e){try{c(s.next(e))}catch(e){r(e)}}function o(e){try{c(s.throw(e))}catch(e){r(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof n?i:new n(function(e){e(i)})).then(a,o)}c((s=s.apply(t,i||[])).next())});var t,i,n,s}}const _=(z=t=>new P(t,new S(e())),O=[{id:\"cba_mpgs\"}],Object.assign(z,{resolveIds:O}));var z,O;export{_ as createCBAMPGSPaymentStrategy};\n//# sourceMappingURL=cba-mpgs.js.map"
  },
  {
    "path": "dist/esm/integrations/checkoutcom-custom.js",
    "content": "import{isNil as e,some as t,values as n}from\"lodash\";import{createFormPoster as r}from\"@bigcommerce/form-poster\";var o,i={};function a(e,t){return Object.assign(e,{resolveIds:t})}i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);class c extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class s extends c{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class d extends s{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class u extends c{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(o||(o={}));class m extends c{constructor(e){super(function(e){switch(e){case o.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case o.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case o.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case o.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var y,l=function(e,t,n,r){return new(n||(n=Promise))(function(o,i){function a(e){try{s(r.next(e))}catch(e){i(e)}}function c(e){try{s(r.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,c)}s((r=r.apply(e,t||[])).next())})},p=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};class h{constructor(e){this._paymentIntegrationService=e}execute(e,t){var n,r;return this._isHostedPaymentFormEnabled(null===(n=e.payment)||void 0===n?void 0:n.methodId,null===(r=e.payment)||void 0===r?void 0:r.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve();const t=e&&e.creditCard&&e.creditCard.form,n=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:r=\"\"}={}}=n.getStoreConfigOrThrow();if(!t)throw new s;const o=this._paymentIntegrationService.createHostedForm(r,t);return o.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=o,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new u)}_executeWithoutHostedForm(e,t){return l(this,void 0,void 0,function*(){const{payment:n}=e,r=p(e,[\"payment\"]),o=n&&n.paymentData;if(!n||!o)throw new d([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(r,t),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:o}))})}_executeWithHostedForm(e,t){return l(this,void 0,void 0,function*(){const{payment:n}=e,r=p(e,[\"payment\"]),i=this._hostedForm;if(!i)throw new m(o.PaymentNotInitialized);if(!n||!n.methodId)throw new d([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(r,t),yield i.validate().then(()=>i.submit(n))})}_isHostedPaymentFormEnabled(e,t){return!!e&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(t){return!n(t&&t.creditCard&&t.creditCard.form.fields).every(e)}}!function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(y||(y={}));const f=y,b=e=>\"object\"==typeof e&&null!==e&&\"body\"in e;var v;!function(e){e.OffsiteRedirect=\"offsite_redirect\"}(v||(v={}));class O extends h{constructor(e){super(e),this.paymentIntegrationService=e}finalize(e){const t=this.paymentIntegrationService.getState();return t.getOrder()&&t.getPaymentStatus()===f.FINALIZE&&this.paymentIntegrationService.finalizeOrder(e),Promise.reject(new u)}_executeWithHostedForm(e,t){return n=this,r=void 0,a=function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}(e,[\"payment\"]),i=this._hostedForm;if(!i)throw new m(o.PaymentNotInitialized);if(!n||!n.methodId)throw new d([\"payment.methodId\"]);try{yield i.validate(),yield this.paymentIntegrationService.submitOrder(r,t),yield i.submit(n)}catch(e){return this._processResponse(e)}this.paymentIntegrationService.loadCurrentOrder()},new((i=void 0)||(i=Promise))(function(e,t){function o(e){try{s(a.next(e))}catch(e){t(e)}}function c(e){try{s(a.throw(e))}catch(e){t(e)}}function s(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(o,c)}s((a=a.apply(n,r||[])).next())});var n,r,i,a}_processResponse(e){if(!b(e))return Promise.reject(e);const t=e.body.additional_action_required;return t&&t.type===v.OffsiteRedirect?this._performRedirect(t):Promise.reject(e)}_performRedirect(e){return new Promise(()=>{window.location.replace(e.data.redirect_url)})}}class g extends O{_executeWithoutHostedForm(e,t){return n=this,r=void 0,i=function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}(e,[\"payment\"]),o=n&&n.paymentData;if(!n||!o)throw new d([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(r,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:Object.assign(Object.assign({},o),{formattedPayload:this._createFormattedPayload(n.methodId,o)})}))}catch(e){return this._processResponse(e)}},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{s(i.next(e))}catch(e){t(e)}}function c(e){try{s(i.throw(e))}catch(e){t(e)}}function s(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o(function(e){e(n)})).then(a,c)}s((i=i.apply(n,r||[])).next())});var n,r,o,i}_createFormattedPayload(e,t){if(\"fawry\"===e&&\"customerMobile\"in t&&\"customerEmail\"in t){const e=t;return{customerMobile:e.customerMobile,customerEmail:e.customerEmail}}}}const w=a(e=>new g(e),[{gateway:\"checkoutcom\",id:\"fawry\"}]);function P(e){return b(e)&&t(e.body.errors,{code:\"three_d_secure_required\"})}var I=function(e,t,n,r){return new(n||(n=Promise))(function(o,i){function a(e){try{s(r.next(e))}catch(e){i(e)}}function c(e){try{s(r.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,c)}s((r=r.apply(e,t||[])).next())})},_=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};class S extends h{constructor(e,t){super(e),this.paymentIntegrationService=e,this.formPoster=t}finalize(e){const t=this.paymentIntegrationService.getState();return t.getOrder()&&t.getPaymentStatus()===f.FINALIZE&&this.paymentIntegrationService.finalizeOrder(e),Promise.reject(new u)}_executeWithoutHostedForm(e,t){return I(this,void 0,void 0,function*(){const{payment:n}=e,r=_(e,[\"payment\"]),o=n&&n.paymentData;if(!n||!o)throw new d([\"payment.paymentData\"]);yield this.paymentIntegrationService.submitOrder(r,t);try{yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:o}))}catch(e){return P(e)?this._handleThreeDSecure(e):Promise.reject(e)}})}_executeWithHostedForm(e,t){return I(this,void 0,void 0,function*(){const{payment:n}=e,r=_(e,[\"payment\"]),i=this._hostedForm;if(!i)throw new m(o.PaymentNotInitialized);if(!n||!n.methodId)throw new d([\"payment.methodId\"]);try{yield i.validate(),yield this.paymentIntegrationService.submitOrder(r,t),yield i.submit(n)}catch(e){return P(e)?this._handleThreeDSecure(e):Promise.reject(e)}this.paymentIntegrationService.loadCurrentOrder()})}_handleThreeDSecure(e){const{acs_url:t,payer_auth_request:n,callback_url:r,merchant_data:o}=e.body.three_ds_result;return new Promise(()=>this.formPoster.postForm(t,{PaReq:n||null,TermUrl:r||null,MD:o||null}))}}const j=a(e=>new S(e,r()),[{gateway:\"checkoutcom\",id:\"credit_card\"},{gateway:\"checkoutcom\",id:\"card\"}]);class x extends O{_executeWithoutHostedForm(e,t){return n=this,r=void 0,i=function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}(e,[\"payment\"]),o=null==n?void 0:n.paymentData;if(!n||!o)throw new d([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(r,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:Object.assign(Object.assign({},o),{formattedPayload:this._createFormattedPayload(n.methodId,o)})}))}catch(e){return this._processResponse(e)}},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{s(i.next(e))}catch(e){t(e)}}function c(e){try{s(i.throw(e))}catch(e){t(e)}}function s(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o(function(e){e(n)})).then(a,c)}s((i=i.apply(n,r||[])).next())});var n,r,o,i}_createFormattedPayload(e,t){const n={iban:\"\",bic:\"\"};if(\"sepa\"===e&&document&&\"iban\"in t&&\"bic\"in t){const{iban:e,bic:r}=t;n.iban=e,n.bic=r}return n}}const F=a(e=>new x(e),[{gateway:\"checkoutcom\",id:\"sepa\"}]);class z extends O{_executeWithoutHostedForm(e,t){return n=this,r=void 0,i=function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}(e,[\"payment\"]),o=null==n?void 0:n.paymentData;if(!n||!o)throw new d([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(r,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:Object.assign(Object.assign({},o),{formattedPayload:this._createFormattedPayload(n.methodId,o)})}))}catch(e){return this._processResponse(e)}},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{s(i.next(e))}catch(e){t(e)}}function c(e){try{s(i.throw(e))}catch(e){t(e)}}function s(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o(function(e){e(n)})).then(a,c)}s((i=i.apply(n,r||[])).next())});var n,r,o,i}_createFormattedPayload(e,t){if(\"ideal\"===e&&\"bic\"in t)return{bic:t.bic}}}const E=a(e=>new z(e),[{gateway:\"checkoutcom\",id:\"ideal\"}]);const D=[\"boleto\",\"oxxo\",\"qpay\",\"ideal\"];class N extends O{_executeWithoutHostedForm(e,t){return n=this,r=void 0,i=function*(){const{payment:n}=e,r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}(e,[\"payment\"]),o=null==n?void 0:n.paymentData;if(!n||!o)throw new d([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(r,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:Object.assign(Object.assign({},o),{formattedPayload:this._createFormattedPayload(n.methodId,o)})}))}catch(e){return this._processResponse(e)}},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{s(i.next(e))}catch(e){t(e)}}function c(e){try{s(i.throw(e))}catch(e){t(e)}}function s(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o(function(e){e(n)})).then(a,c)}s((i=i.apply(n,r||[])).next())});var n,r,o,i}_createFormattedPayload(e,t){const n={ccDocument:\"\"},r=\"ccDocument\"in t?t.ccDocument:\"\";return-1!==D.indexOf(e)&&r&&(n.ccDocument=r),n}}const C=a(e=>new N(e),[{gateway:\"checkoutcom\"}]);export{C as createCheckoutComAPMPaymentStrategy,j as createCheckoutComCreditCardPaymentStrategy,w as createCheckoutComFawryPaymentStrategy,E as createCheckoutComIdealPaymentStrategy,F as createCheckoutComSepaPaymentStrategy};\n//# sourceMappingURL=checkoutcom-custom.js.map"
  },
  {
    "path": "dist/esm/integrations/clearpay.js",
    "content": "import{getScriptLoader as e}from\"@bigcommerce/script-loader\";import{noop as t}from\"lodash\";var i;class n extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class a extends n{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class r extends a{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(i||(i={}));class s extends n{constructor(e){super(function(e){switch(e){case i.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case i.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case i.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case i.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case i.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case i.MissingCheckoutConfig:case i.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case i.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case i.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case i.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case i.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case i.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case i.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class o extends n{constructor(e){super(e||\"The current order could not be finalized successfully\"),this.name=\"OrderFinalizationNotCompletedError\",this.type=\"order_finalization_not_completed\"}}var c;!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(c||(c={}));class d extends n{constructor(e){super(function(e){switch(e){case c.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case c.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case c.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case c.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const u={body:{},headers:{},status:0};class l extends n{constructor(e,{message:t,errors:i}={}){const{body:n,headers:a,status:r}=e||u;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=n,this.headers=a,this.status=r,this.errors=i||[]}}var p=function(e,t,i,n){return new(i||(i=Promise))(function(a,r){function s(e){try{c(n.next(e))}catch(e){r(e)}}function o(e){try{c(n.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?a(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,o)}c((n=n.apply(e,t||[])).next())})};class h{constructor(e,t){this._paymentIntegrationService=e,this._clearpayScriptLoader=t}initialize(e){return p(this,void 0,void 0,function*(){const{getPaymentMethodOrThrow:t}=this._paymentIntegrationService.getState(),i=t(e.methodId,e.gatewayId),n=this._paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features;this._clearpaySdk=yield this._clearpayScriptLoader.load(i,n)})}deinitialize(){return this._clearpaySdk=void 0,Promise.resolve()}execute(e,i){return p(this,void 0,void 0,function*(){const{gatewayId:n,methodId:s}=e.payment||{};if(!n||!s)throw new r([\"payment.gatewayId\",\"payment.methodId\"]);const o=this._paymentIntegrationService.getState(),{isStoreCreditApplied:c}=o.getCheckoutOrThrow();yield this._paymentIntegrationService.applyStoreCredit(c),yield this._paymentIntegrationService.validateCheckout(o.getCheckout(),i);const{countryCode:d}=o.getBillingAddressOrThrow();if(!this._isCountrySupported(d))throw new a(\"Unable to proceed because billing country is not supported.\");return yield this._loadPaymentMethod(n,s,i),yield this._redirectToClearpay(d,this._paymentIntegrationService.getState().getPaymentMethod(s,n)),new Promise(t)})}finalize(e){var t,n,a;return p(this,void 0,void 0,function*(){const r=this._paymentIntegrationService.getState(),c=r.getPaymentId(),d=r.getContextConfig();if(!c)throw new s(i.MissingCheckout);if(!d||!d.payment.token)throw new s(i.MissingCheckoutConfig);const u={methodId:c.providerId,paymentData:{nonce:d.payment.token}};yield this._paymentIntegrationService.submitOrder({},e);try{yield this._paymentIntegrationService.submitPayment(u)}catch(e){if(yield this._paymentIntegrationService.forgetCheckout(c.providerId),yield this._paymentIntegrationService.loadPaymentMethods(),(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e))throw new o(null===(a=null===(n=null===(t=e.body)||void 0===t?void 0:t.errors)||void 0===n?void 0:n[0])||void 0===a?void 0:a.message)}})}_redirectToClearpay(e,t){return p(this,void 0,void 0,function*(){if(!this._clearpaySdk||!t||!t.clientToken)throw new d(c.PaymentNotInitialized);return this._clearpaySdk.initialize({countryCode:e}),this._clearpaySdk.redirect({token:t.clientToken}),Promise.resolve()})}_isCountrySupported(e){return\"GB\"===e}_loadPaymentMethod(e,t,i){var n;return p(this,void 0,void 0,function*(){try{return yield this._paymentIntegrationService.loadPaymentMethod(e,Object.assign(Object.assign({},i),{params:Object.assign(Object.assign({},null==i?void 0:i.params),{method:t})}))}catch(e){if(e instanceof l&&422===(null===(n=e.body)||void 0===n?void 0:n.status))throw new a(\"Clearpay can't process your payment for this order, please try another payment method\");throw e}})}}class y extends n{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class g{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e,t={}){return i=this,n=void 0,r=function*(){if(yield this._scriptLoader.loadScript(this._getScriptUrl(e.config.testMode,t)),!this._window.AfterPay)throw new y;return this._window.AfterPay},new((a=void 0)||(a=Promise))(function(e,t){function s(e){try{c(r.next(e))}catch(e){t(e)}}function o(e){try{c(r.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof a?i:new a(function(e){e(i)})).then(s,o)}c((r=r.apply(i,n||[])).next())});var i,n,a,r}_getScriptUrl(e,t={}){const i=function(e,t,i=!0){var n;return null!==(n=e[\"PI-4555.clearpay_add_https_to_prod_script\"])&&void 0!==n?n:i}(t,0,!1);return e?i?\"https://portal.sandbox.clearpay.co.uk/afterpay-async.js\":\"//portal.sandbox.clearpay.co.uk/afterpay-async.js\":i?\"https://portal.clearpay.co.uk/afterpay-async.js\":\"//portal.clearpay.co.uk/afterpay-async.js\"}}const m=(b=t=>new h(t,new g(e())),v=[{gateway:\"clearpay\"},{id:\"clearpay\"}],Object.assign(b,{resolveIds:v}));var b,v;export{m as createClearpayPaymentStrategy};\n//# sourceMappingURL=clearpay.js.map"
  },
  {
    "path": "dist/esm/integrations/credit-card.js",
    "content": "import{isNil as e,values as t}from\"lodash\";var i;class n extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class r extends n{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class o extends n{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class a extends r{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(i||(i={}));class s extends n{constructor(e){super(function(e){switch(e){case i.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case i.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case i.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case i.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var d=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})},c=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i};class l{constructor(e){this._paymentIntegrationService=e}execute(e,t){var i,n;return this._isHostedPaymentFormEnabled(null===(i=e.payment)||void 0===i?void 0:i.methodId,null===(n=e.payment)||void 0===n?void 0:n.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve();const t=e&&e.creditCard&&e.creditCard.form,i=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:n=\"\"}={}}=i.getStoreConfigOrThrow();if(!t)throw new r;const o=this._paymentIntegrationService.createHostedForm(n,t);return o.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=o,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new o)}_executeWithoutHostedForm(e,t){return d(this,void 0,void 0,function*(){const{payment:i}=e,n=c(e,[\"payment\"]),r=i&&i.paymentData;if(!i||!r)throw new a([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(n,t),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},i),{paymentData:r}))})}_executeWithHostedForm(e,t){return d(this,void 0,void 0,function*(){const{payment:n}=e,r=c(e,[\"payment\"]),o=this._hostedForm;if(!o)throw new s(i.PaymentNotInitialized);if(!n||!n.methodId)throw new a([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(r,t),yield o.validate().then(()=>o.submit(n))})}_isHostedPaymentFormEnabled(e,t){return!!e&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(i){return!t(i&&i.creditCard&&i.creditCard.form.fields).every(e)}}const u=(h=e=>new l(e),m=[{default:!0}],Object.assign(h,{resolveIds:m}));var h,m;export{u as createCreditCardPaymentStrategy};\n//# sourceMappingURL=credit-card.js.map"
  },
  {
    "path": "dist/esm/integrations/cybersource.js",
    "content": "import{getScriptLoader as e}from\"@bigcommerce/script-loader\";import{includes as t,isNil as n,merge as i,noop as r,some as o,values as a}from\"lodash\";var s={};function c(e){return Boolean(e.instrumentId)}s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);const d=e=>\"object\"==typeof e&&null!==e&&\"body\"in e;var u,l,h=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class m{constructor(e,t){this._paymentIntegrationService=e,this._cardinalClient=t}prepare(e){return h(this,void 0,void 0,function*(){yield this._cardinalClient.load(e.id,e.config.testMode),yield this._cardinalClient.configure(yield this._getClientToken(e))})}start(e,t,n,r){return h(this,void 0,void 0,function*(){const{getCardInstrument:a,getPaymentMethodOrThrow:s}=this._paymentIntegrationService.getState(),{payment:{methodId:u=\"\",paymentData:l={}}={}}=t,h=c(l)&&a(l.instrumentId),m=h?h.iin:r&&r.getBin();m&&(yield this._cardinalClient.runBinProcess(m));try{return yield e(i(t,{payment:{paymentData:{threeDSecure:{token:s(u).clientToken}}}}),n)}catch(e){if(!d(e)||!o(e.body.errors,{code:\"three_d_secure_required\"}))throw e;const n=yield this._cardinalClient.getThreeDSecureData(e.body.three_ds_result,this._getOrderData());if(!r)return void(yield this._paymentIntegrationService.submitPayment(i(t.payment,{paymentData:{threeDSecure:n}})));yield r.submit(i(t.payment,{paymentData:{threeDSecure:n}}))}})}_getClientToken(e){return h(this,void 0,void 0,function*(){return e.clientToken?e.clientToken:(yield this._paymentIntegrationService.loadPaymentMethod(e.id),this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e.id).clientToken||\"\")})}_getOrderData(){const e=this._paymentIntegrationService.getState(),t=e.getBillingAddressOrThrow(),n=e.getShippingAddress(),i=e.getCheckoutOrThrow(),r=e.getOrderOrThrow();return{billingAddress:t,shippingAddress:n,currencyCode:i.cart.currency.code,id:r.orderId.toString(),amount:i.cart.cartAmount}}}class p extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(u||(u={}));class y extends p{constructor(e){super(function(e){switch(e){case u.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case u.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case u.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case u.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case u.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case u.MissingCheckoutConfig:case u.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case u.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case u.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case u.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case u.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case u.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case u.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class g extends p{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(l||(l={}));class f extends p{constructor(e){super(function(e){switch(e){case l.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case l.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case l.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case l.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const b=[100004,1010,1011,1020];var _,v,C,w,S,P,I;!function(e){e.SetupCompleted=\"payments.setupComplete\",e.Validated=\"payments.validated\"}(_||(_={})),function(e){e.Init=\"init\",e.Complete=\"complete\",e.Confirm=\"confirm\"}(v||(v={})),function(e){e.Success=\"SUCCESS\",e.NoAction=\"NOACTION\",e.Failure=\"FAILURE\",e.Error=\"ERROR\"}(C||(C={})),function(e){e.CCA=\"CCA\",e.Paypal=\"Paypal\",e.Wallet=\"Wallet\",e.VisaCheckout=\"VisaCheckout\",e.ApplePay=\"ApplePay\",e.DiscoverWallet=\"DiscoverWallet\"}(w||(w={})),function(e){e.BinProcess=\"bin.process\"}(S||(S={})),function(e){e.CCA=\"cca\"}(P||(P={})),function(e){e.Yes=\"Y\",e.No=\"N\"}(I||(I={}));class M{constructor(e){this._scriptLoader=e,this._provider=\"\",this._testMode=!1,this._configurationToken=\"\"}load(e,t=!1){return this._provider=e,this._testMode=t,this._sdk||(this._sdk=this._scriptLoader.load(e,t)),this._sdk.then(r)}configure(e){if(this._configurationToken){if(this._configurationToken===e)return Promise.resolve();this._sdk=this._scriptLoader.load(`${this._provider}.${Date.now()}`,this._testMode)}return this._getClientSDK().then(n=>new Promise((i,r)=>{n.on(_.SetupCompleted,()=>{n.off(_.SetupCompleted),n.off(_.Validated),this._configurationToken=e,i()}),n.on(_.Validated,e=>{n.off(_.SetupCompleted),n.off(_.Validated),e.ActionCode===C.Error&&(t(b,e.ErrorNumber)&&r(new y(u.MissingPaymentMethod)),r(new g(e.ErrorDescription)))}),n.setup(v.Init,{jwt:e})}))}runBinProcess(e){return this._getClientSDK().then(t=>t.trigger(S.BinProcess,e).catch(r)).then(e=>{if(!e||!e.Status)throw new f(l.PaymentNotInitialized)})}getThreeDSecureData(e,t){return this._getClientSDK().then(n=>new Promise((i,r)=>{n.on(_.Validated,(e,t)=>{if(n.off(_.Validated),!t)return r(new g(e.ErrorDescription?e.ErrorDescription:\"An error was encountered while processing the transaction.\"));if(!e.ActionCode)return i({token:t});switch(e.ActionCode){case C.Success:return i({token:t});case C.NoAction:return e.ErrorNumber>0?r(new g(e.ErrorDescription)):e.Payment&&e.Payment.ExtendedData&&e.Payment.ExtendedData.SignatureVerification===I.Yes?i({token:t}):r(new g(\"Transaction signature could not be validated.\"));case C.Failure:return r(new g(\"User failed authentication or an error was encountered while processing the transaction.\"));case C.Error:return r(new g(e.ErrorDescription))}});const o={AcsUrl:e.acs_url,Payload:e.merchant_data},a=this._mapToPartialOrder(t,e.payer_auth_request);n.continue(P.CCA,o,a)}))}_mapToPartialOrder(e,t){const n={BillingAddress:this._mapToCardinalAddress(e.billingAddress)};return e.paymentData&&(n.Account=this._mapToCardinalAccount(e.paymentData)),e.billingAddress.email&&(n.Email1=e.billingAddress.email),e.shippingAddress&&(n.ShippingAddress=this._mapToCardinalAddress(e.shippingAddress)),{Consumer:n,OrderDetails:{OrderNumber:e.id,Amount:e.amount,CurrencyCode:e.currencyCode,OrderChannel:\"S\",TransactionId:t}}}_mapToCardinalAccount(e){return{AccountNumber:Number(e.ccNumber),ExpirationMonth:Number(e.ccExpiry.month),ExpirationYear:Number(e.ccExpiry.year),NameOnAccount:e.ccName,CardCode:Number(e.ccCvv)}}_mapToCardinalAddress(e){const t={FirstName:e.firstName,LastName:e.lastName,Address1:e.address1,City:e.city,State:e.stateOrProvince,PostalCode:e.postalCode,CountryCode:e.countryCode};return e.address2&&(t.Address2=e.address2),e.phone&&(t.Phone1=e.phone),t}_getClientSDK(){if(!this._sdk)throw new f(l.PaymentNotInitialized);return this._sdk}}class O extends p{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class A{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e,t){const n=t?\"https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js\":\"https://static.client.cardinaltrusted.com/songbird/v2.0.0/songbird.js\";return this._scriptLoader.loadScript(`${n}?v=${e}`).then(()=>{if(!this._window.Cardinal)throw new O;return this._window.Cardinal})}}function x(e,t){return Object.assign(e,{resolveIds:t})}class k extends p{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class D extends p{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class E extends k{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}var N=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})},T=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n};class z{constructor(e){this._paymentIntegrationService=e}execute(e,t){var n,i;return this._isHostedPaymentFormEnabled(null===(n=e.payment)||void 0===n?void 0:n.methodId,null===(i=e.payment)||void 0===i?void 0:i.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve();const t=e&&e.creditCard&&e.creditCard.form,n=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:i=\"\"}={}}=n.getStoreConfigOrThrow();if(!t)throw new k;const r=this._paymentIntegrationService.createHostedForm(i,t);return r.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=r,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new D)}_executeWithoutHostedForm(e,t){return N(this,void 0,void 0,function*(){const{payment:n}=e,i=T(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new E([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:r}))})}_executeWithHostedForm(e,t){return N(this,void 0,void 0,function*(){const{payment:n}=e,i=T(e,[\"payment\"]),r=this._hostedForm;if(!r)throw new f(l.PaymentNotInitialized);if(!n||!n.methodId)throw new E([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(i,t),yield r.validate().then(()=>r.submit(n))})}_isHostedPaymentFormEnabled(e,t){return!!e&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(e){return!a(e&&e.creditCard&&e.creditCard.form.fields).every(n)}}var F=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class U extends z{constructor(e,t){super(e),this._threeDSecureFlow=t}initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return F(this,void 0,void 0,function*(){yield t.initialize.call(this,e);const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),i=n(e.methodId);i.config.is3dsEnabled&&(yield this._threeDSecureFlow.prepare(i))})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return F(this,void 0,void 0,function*(){const{payment:{methodId:i=\"\"}={}}=e,{getPaymentMethodOrThrow:r}=this._paymentIntegrationService.getState();return r(i).config.is3dsEnabled?this._threeDSecureFlow.start(n.execute.bind(this),e,t,this._hostedForm):n.execute.call(this,e,t)})}}const j=x(t=>new U(t,new m(t,new M(new A(e())))),[{id:\"cybersource\"}]);var B=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class H{constructor(e,t){this._paymentIntegrationService=e,this._cardinalClient=t}prepare(e){return B(this,void 0,void 0,function*(){yield this._cardinalClient.load(e.id,e.config.testMode)})}start(e,t,n,i){var r,a,s,c;return B(this,void 0,void 0,function*(){const{getCardInstrument:u}=this._paymentIntegrationService.getState(),{payment:l={methodId:\"\"}}=t,{paymentData:h={}}=l;try{return yield e(t,n)}catch(e){if(d(e)&&\"additional_action_required\"===(null===(r=e.body)||void 0===r?void 0:r.status)){const t=null===(s=null===(a=e.body.additional_action_required)||void 0===a?void 0:a.data)||void 0===s?void 0:s.token,n=null===(c=e.body.three_ds_result)||void 0===c?void 0:c.payer_auth_request;yield this._cardinalClient.configure(t);const r=this._getBin(h,u,i);r&&(yield this._cardinalClient.runBinProcess(r));try{return yield this._submitPayment(l,{xid:n},i)}catch(e){if(d(e)&&o(e.body.errors,{code:\"three_d_secure_required\"})){const t=e.body.three_ds_result,n=null==t?void 0:t.payer_auth_request;return yield this._cardinalClient.getThreeDSecureData(t,this._getOrderData()),this._submitPayment(l,{token:n},i)}throw e}}throw e}})}_getOrderData(){const e=this._paymentIntegrationService.getState(),t=e.getBillingAddressOrThrow(),n=e.getShippingAddress(),{cart:{currency:{code:i},cartAmount:r}}=e.getCheckoutOrThrow();return{billingAddress:t,shippingAddress:n,currencyCode:i,id:e.getOrderOrThrow().orderId.toString(),amount:r}}_submitPayment(e,t,n){return B(this,void 0,void 0,function*(){const r=i({},e,{paymentData:{threeDSecure:t}});n||(yield this._paymentIntegrationService.submitPayment(r)),yield null==n?void 0:n.submit(r)})}_getBin(e,t,n){const i=c(e)&&t(e.instrumentId),r=function(e){const t=e;return!c(t)&&\"string\"==typeof t.ccName&&\"string\"==typeof t.ccNumber&&\"object\"==typeof t.ccExpiry&&\"string\"==typeof t.ccExpiry.month&&\"string\"==typeof t.ccExpiry.year}(e)&&e.ccNumber,o=n?n.getBin():r;return(i?i.iin:o)||\"\"}}var q=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{c(i.next(e))}catch(e){o(e)}}function s(e){try{c(i.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class R extends z{constructor(e,t){super(e),this._threeDSecureFlow=t}initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return q(this,void 0,void 0,function*(){yield t.initialize.call(this,e);const{getPaymentMethodOrThrow:n}=this._paymentIntegrationService.getState(),i=n(e.methodId);i.config.is3dsEnabled&&(yield this._threeDSecureFlow.prepare(i))})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return q(this,void 0,void 0,function*(){const{payment:{methodId:i=\"\"}={}}=e,{getPaymentMethodOrThrow:r}=this._paymentIntegrationService.getState();return r(i).config.is3dsEnabled?this._threeDSecureFlow.start(n.execute.bind(this),e,t,this._hostedForm):n.execute.call(this,e,t)})}}const V=x(t=>new R(t,new H(t,new M(new A(e())))),[{id:\"cybersourcev2\"},{id:\"bnz\"}]);export{j as createCyberSourcePaymentStrategy,V as createCyberSourceV2PaymentStrategy};\n//# sourceMappingURL=cybersource.js.map"
  },
  {
    "path": "dist/esm/integrations/google-pay.js",
    "content": "import{createFormPoster as e}from\"@bigcommerce/form-poster\";import{createRequestSender as t}from\"@bigcommerce/request-sender\";import{getScriptLoader as n,getStylesheetLoader as i}from\"@bigcommerce/script-loader\";import{find as o,includes as r,isArray as a,isObject as s,round as c,some as d}from\"lodash\";class l extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class h extends l{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var u;class y{constructor(e,t,n=window){this._scriptLoader=e,this._stylesheetLoader=t,this._window=n}load(e){var t,n,i,o,r,a;return i=this,o=void 0,a=function*(){if(yield Promise.all([this._stylesheetLoader.loadStylesheet(`https://checkoutshopper-${null!==(t=e.environment)&&void 0!==t?t:\"\"}.adyen.com/checkoutshopper/sdk/3.10.1/adyen.css`,{prepend:!1,attributes:{integrity:\"sha384-8ofgICZZ/k5cC5N7xegqFZOA73H9RQ7H13439JfAZW8Gj3qjuKL2isaTD3GMIhDE\",crossorigin:\"anonymous\"}}),this._scriptLoader.loadScript(`https://checkoutshopper-${null!==(n=e.environment)&&void 0!==n?n:\"\"}.adyen.com/checkoutshopper/sdk/3.10.1/adyen.js`,{async:!0,attributes:{integrity:\"sha384-wG2z9zSQo61EIvyXmiFCo+zB3y0ZB4hsrXVcANmpP8HLthjoQJQPBh7tZKJSV8jA\",crossorigin:\"anonymous\"}})]),!this._window.AdyenCheckout)throw new h;return new this._window.AdyenCheckout(e)},new((r=void 0)||(r=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof r?i:new r(function(e){e(i)})).then(n,s)}c((a=a.apply(i,o||[])).next())})}}function g(e,t){return Object.assign(e,{resolveIds:t})}function p(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e&&Array.isArray(e.errors)&&\"code\"in e.errors[0]&&\"string\"==typeof e.errors[0].code&&\"provider_data\"in e&&\"object\"==typeof e.provider_data}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(u||(u={}));class _ extends l{constructor(e){super(function(e){switch(e){case u.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case u.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case u.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case u.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case u.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case u.MissingCheckoutConfig:case u.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case u.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case u.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case u.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case u.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case u.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case u.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function m(){const{navigator:e}=window;let t;return t=e.language?e.language:e.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof e.javaEnabled&&e.javaEnabled(),language:t,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}const f=e=>\"object\"==typeof e&&null!==e&&\"body\"in e;class P extends l{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}var w;!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(w||(w={}));class v extends l{constructor(e){super(function(e){switch(e){case w.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case w.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case w.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case w.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class C extends l{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}function S(e,t,n){if(\"function\"!=typeof n.value)return n;let i=n.value;return{get(){const e=i.bind(this);return Object.defineProperty(this,t,Object.assign(Object.assign({},n),{value:e})),e},set(e){i=e}}}class b{constructor(e){if(!e)throw new Error(\"Currency settings missing\");const{decimalPlaces:t,symbolLocation:n,symbol:i,thousandsSeparator:o,decimalSeparator:r}=e;if(\"string\"!=typeof n||\"string\"!=typeof i||\"string\"!=typeof o||\"string\"!=typeof r||\"string\"!=typeof t)throw new C(\"Invalid currency settings provided\");this._decimalPlaces=parseInt(t,10),this._symbolLocation=n,this._symbol=i,this._thousandsSeparator=o,this._decimalSeparator=r}format(e){if(\"number\"!=typeof e)throw new C(\"Invalid amount provided\");const t=this._formatNumber(e),n=this._formatCurrency(t);return e<0?`-${n}`:n}_formatNumber(e){const t=Math.abs(e),[n,i=\"\"]=this._toFixed(t,this._decimalPlaces).split(\".\"),o=n.replace(/\\B(?=(\\d{3})+(?!\\d))/g,this._thousandsSeparator);return this._decimalPlaces<1?o:[o,i].join(this._decimalSeparator)}_formatCurrency(e){return\"left\"===this._symbolLocation.toLowerCase()?`${this._symbol}${e}`:`${e}${this._symbol}`}_toFixed(e,t){return(+`${Math.round(+`${e}e${t}`)}e${-t}`).toFixed(t)}}let I=class{constructor(e){this._storeConfig=e,this._customerFormatter=new b(this._storeConfig.shopperCurrency),this._storeFormatter=new b(this._storeConfig.currency)}toCustomerCurrency(e){const t=this._storeConfig.shopperCurrency.exchangeRate;return this._customerFormatter.format(e*t)}toStoreCurrency(e){return this._storeFormatter.format(e)}};I=function(e,t,n,i){var o,r=arguments.length,a=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(r<3?o(a):r>3?o(t,n,a):o(t,n))||a);return r>3&&a&&Object.defineProperty(t,n,a),a}([function(e,t,n){return t&&n?S(0,t,n):function(e){const t=class extends e{};return Object.getOwnPropertyNames(e.prototype).forEach(n=>{const i=Object.getOwnPropertyDescriptor(e.prototype,n);i&&\"constructor\"!==n&&Object.defineProperty(t.prototype,n,S(e.prototype,n,i))}),t}(e)}],I);const O=I;function A(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}function T(){if(\"undefined\"==typeof window)return!1;if(function(e){return\"ReactNativeWebView\"in e}(window))return!0;const e=navigator.userAgent||navigator.vendor||(function(e){return\"opera\"in e}(window)?window.opera:\"\"),t=/android.+; wv/i.test(e),n=/iPhone|iPod|iPad/i.test(e)&&/AppleWebKit/i.test(e)&&!/Safari/i.test(e);return t||n}function M(e,t,n=!0){var i;return null!==(i=e[t])&&void 0!==i?i:n}var E,k,N,D,z,G,R,B,L;function x(e){return e in G}!function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(E||(E={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(k||(k={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(N||(N={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(D||(D={})),function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(z||(z={})),function(e){e.AMEX=\"AMEX\",e.DISCOVER=\"DISCOVER\",e.INTERAC=\"INTERAC\",e.JCB=\"JCB\",e.MC=\"MASTERCARD\",e.VISA=\"VISA\"}(G||(G={})),function(e){e.OFFER=\"OFFER\",e.PAYMENT_AUTHORIZATION=\"PAYMENT_AUTHORIZATION\",e.SHIPPING_ADDRESS=\"SHIPPING_ADDRESS\",e.SHIPPING_OPTION=\"SHIPPING_OPTION\"}(R||(R={})),function(e){e.OFFER_INVALID=\"OFFER_INVALID\",e.PAYMENT_DATA_INVALID=\"PAYMENT_DATA_INVALID\",e.SHIPPING_ADDRESS_INVALID=\"SHIPPING_ADDRESS_INVALID\",e.SHIPPING_ADDRESS_UNSERVICEABLE=\"SHIPPING_ADDRESS_UNSERVICEABLE\",e.SHIPPING_OPTION_INVALID=\"SHIPPING_OPTION_INVALID\",e.OTHER_ERROR=\"OTHER_ERROR\"}(B||(B={})),function(e){e.INITIALIZE=\"INITIALIZE\",e.SHIPPING_OPTION=\"SHIPPING_OPTION\",e.SHIPPING_ADDRESS=\"SHIPPING_ADDRESS\",e.OFFER=\"OFFER\"}(L||(L={}));var j=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class F{constructor(e,t){this._gatewayIdentifier=e,this._paymentIntegrationService=t,this._isBuyNowFlow=!1,this._shouldRequestShipping=!0,this._isWebViewExperimentOn=null}mapToShippingAddressRequestBody({shippingAddress:e}){if(!e)return;const{company:t=\"\",phone:n=\"\"}=this._paymentIntegrationService.getState().getShippingAddress()||{};return this._mapToAddressRequestBody(e,t,n)}mapToBillingAddressRequestBody(e){const{billingAddress:t}=e.paymentMethodData.info;if(!t)return;const{company:n=\"\",phone:i=\"\",email:o,customFields:r=[]}=this._paymentIntegrationService.getState().getBillingAddress()||{};return Object.assign(Object.assign({},this._mapToAddressRequestBody(t,n,i,r)),{email:o||e.email})}mapToExternalCheckoutData(e){var t;const{paymentMethodData:{tokenizationData:{token:n},info:{cardNetwork:i,cardDetails:o}}}=e;if(!n)throw new _(u.MissingPaymentToken);return Promise.resolve(Object.assign({nonce:n,card_information:{type:i,number:o}},this._isBuyNowFlow&&{cart_id:null===(t=this._paymentIntegrationService.getState().getCart())||void 0===t?void 0:t.id}))}getRequiredData(){var e;return j(this,void 0,void 0,function*(){const t={emailRequired:!0};if(!this._isShippingAddressRequired())return t;const n=yield this._paymentIntegrationService.loadShippingCountries(),i=null===(e=n.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code);return Object.assign(Object.assign({},t),{shippingAddressRequired:!0,shippingAddressParameters:Object.assign({phoneNumberRequired:!0},i&&{allowedCountryCodes:i}),shippingOptionRequired:!0})})}getCallbackIntents(){return this._isShippingAddressRequired()?[R.OFFER,R.SHIPPING_ADDRESS,R.SHIPPING_OPTION]:[R.OFFER]}getCallbackTriggers(){return{availableTriggers:[L.INITIALIZE,L.SHIPPING_ADDRESS,L.SHIPPING_OPTION,L.OFFER],initializationTrigger:[L.INITIALIZE],addressChangeTriggers:[L.INITIALIZE,L.SHIPPING_ADDRESS],shippingOptionsChangeTriggers:[L.SHIPPING_OPTION],offerChangeTriggers:[L.OFFER]}}getNonce(e){var t;const n=null===(t=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e).initializationData)||void 0===t?void 0:t.nonce;if(!n)throw new _(u.MissingPaymentToken);return Promise.resolve(n)}extraPaymentData(){return Promise.resolve(void 0)}getMerchantInfo(){const{googleMerchantName:e,googleMerchantId:t,platformToken:n}=this.getGooglePayInitializationData();return{merchantName:e,merchantId:t,authJwt:n}}getTransactionInfo(){let e;const{getCartOrThrow:t}=this._paymentIntegrationService.getState();e=this._isBuyNowFlow?this._getCurrencyCodeOrThrow():t().currency.code;const n=this.getGooglePayInitializationData().storeCountry;if(this.isWebViewWithRestrictions()){const t=this.getTotalPrice();return Object.assign(Object.assign({},n&&{countryCode:n}),{currencyCode:e,totalPrice:t,totalPriceStatus:z.ESTIMATED})}return Object.assign(Object.assign({},n&&{countryCode:n}),{currencyCode:e,totalPriceStatus:z.ESTIMATED,totalPrice:\"0\"})}isWebViewWithRestrictions(){return null!==this._isWebViewExperimentOn?this._isWebViewExperimentOn&&T():T()}setIsWebViewExperimentOn(e){this._isWebViewExperimentOn=e}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData().gatewayMerchantId;if(!e)throw new C(\"Unable to proceed, gatewayMerchantId is missing.\");return{gateway:this._gatewayIdentifier,gatewayMerchantId:e}}getCardParameters(){return{allowedAuthMethods:[\"PAN_ONLY\",\"CRYPTOGRAM_3DS\"],allowedCardNetworks:this.getPaymentMethod().supportedCards.filter(x).map(e=>G[e]),billingAddressRequired:!0,billingAddressParameters:{format:\"FULL\",phoneNumberRequired:!0}}}initialize(e,t,n){return this._getPaymentMethodFn=e,this._isBuyNowFlow=Boolean(t),this._currencyCode=n,this._isBuyNowFlow&&this._getCurrencyCodeOrThrow(),Promise.resolve()}handleShippingAddressChange(e){var t,n,i,o;return j(this,void 0,void 0,function*(){e&&(e.name=e.name||\"\",e.address1=e.address1||\"\");const r=this.mapToShippingAddressRequestBody({shippingAddress:e});r&&(yield this._paymentIntegrationService.updateShippingAddress(r));const a=this._paymentIntegrationService.getState(),s=a.getConsignments();if(!(null==s?void 0:s[0]))return;const c=s[0],d=a.getStoreConfigOrThrow();this._currencyService||(this._currencyService=new O(d));const l=(c.availableShippingOptions||[]).map(this._getGooglePayShippingOption.bind(this)),h=null===(t=c.availableShippingOptions)||void 0===t?void 0:t.find(e=>e.isRecommended);if(l.length){const e=(null===(n=c.selectedShippingOption)||void 0===n?void 0:n.id)||(null==h?void 0:h.id)||(null===(i=l[0])||void 0===i?void 0:i.id);return!(null===(o=c.selectedShippingOption)||void 0===o?void 0:o.id)&&l[0]&&(yield this.handleShippingOptionChange((null==h?void 0:h.id)||l[0].id)),{defaultSelectedOptionId:e,shippingOptions:l}}})}handleShippingOptionChange(e){return j(this,void 0,void 0,function*(){if(\"shipping_option_unselected\"!==e)return this._paymentIntegrationService.selectShippingOption(e)})}getTotalPrice(){const{getCheckoutOrThrow:e,getCartOrThrow:t,getStoreConfigOrThrow:n}=this._paymentIntegrationService.getState(),{decimalPlaces:i}=t().currency,o=M(n().checkoutSettings.features,\"PI-5075.google_pay_round_total_price_to_max_2_decimal_places\")?Math.min(i,2):i;return c(e().outstandingBalance,o).toFixed(o)}handleCoupons(e){return j(this,void 0,void 0,function*(){const{redemptionCodes:t=[]}=e,{offers:n}=this.getAppliedCoupons()||{};let i;return yield t.reduce((e,t)=>j(this,void 0,void 0,function*(){if(yield e,(n||[]).some(({redemptionCode:e})=>e===t))return;const o=yield this.applyCoupon(t);o&&(i=o)}),Promise.resolve()),yield(n||[]).reduce((e,n)=>j(this,void 0,void 0,function*(){yield e,t.includes(n.redemptionCode)||(yield this._paymentIntegrationService.removeCoupon(n.redemptionCode))}),Promise.resolve()),{newOfferInfo:this.getAppliedCoupons(),error:i}})}getAppliedCoupons(){const e=this._paymentIntegrationService.getState(),{coupons:t}=e.getCheckout()||{};return{offers:(t||[]).map(e=>{const{displayName:t,code:n}=e;return{redemptionCode:n,description:t}})}}applyCoupon(e){return j(this,void 0,void 0,function*(){let t;try{yield this._paymentIntegrationService.applyCoupon(e)}catch(e){return e instanceof Error&&(t={reason:B.OFFER_INVALID,message:e.message,intent:L.OFFER}),t}})}setShouldRequestShipping(e){this._shouldRequestShipping=e}getGooglePayInitializationData(){return A(this.getPaymentMethod().initializationData,()=>new C(\"Missing initialization data.\"))}getPaymentMethod(){return A(this._getPaymentMethodFn,()=>new v(w.PaymentNotInitialized))()}getGatewayIdentifier(){return this._gatewayIdentifier}setGatewayIdentifier(e){this._gatewayIdentifier=e||this.getGatewayIdentifier()}_isShippingAddressRequired(){const{getCartOrThrow:e,getStoreConfigOrThrow:t,getShippingAddress:n}=this._paymentIntegrationService.getState(),i=t();let o;return o=M(i.checkoutSettings.features,\"PI-4290.google_pay_require_shipping_address\")?this._shouldRequestShipping:void 0===n(),o&&(r=e(),a=i,!!r&&(!!r.lineItems.physicalItems.some(e=>e.isShippingRequired)||!(!a||!r.lineItems.customItems)&&r.lineItems.customItems.length>0));var r,a}_mapToAddressRequestBody(e,t,n,i){const{name:o,address1:r,address2:a,address3:s,locality:c,administrativeArea:d,countryCode:l,postalCode:h,phoneNumber:u}=e,[y,g]=this._getFirstAndLastName(o);return{firstName:y,lastName:g,company:t,address1:r,address2:`${a} ${s}`.trim(),city:c||d,stateOrProvince:d,stateOrProvinceCode:d,countryCode:l,postalCode:h,phone:u||n,customFields:i||[]}}_getFirstAndLastName(e){const t=e.split(\" \");return 1===t.length?[e,\"\"]:[t.slice(0,-1).join(\" \"),t[t.length-1]]}_getCurrencyCodeOrThrow(){return A(this._currencyCode,()=>new C('Unable to initialize payment because \"options.currencyCode\" argument is not provided.'))}_getGooglePayShippingOption({id:e,cost:t,description:n,additionalDescription:i}){var o;return{id:e,label:`${(null===(o=this._currencyService)||void 0===o?void 0:o.toCustomerCurrency(t))||t} ${n}`,description:i}}}var U=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class V extends F{constructor(e,t){super(\"adyen\",e),this._scriptLoader=t,this._service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return U(this,void 0,void 0,function*(){yield i.initialize.call(this,e,t,n);const o=i.getPaymentMethod.call(this),r=this._service.getState().getStoreConfig();if(!r)throw new _(u.MissingCheckoutConfig);return this._adyenClient=yield this._scriptLoader.load({environment:o.config.testMode?\"test\":\"live\",locale:r.storeProfile.storeLanguage}),Promise.resolve()})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});return U(this,void 0,void 0,function*(){const n=yield t.getNonce.call(this,e),i=t.getPaymentMethod.call(this);return JSON.stringify({type:i.method,googlePayToken:n,browser_info:m()})})}processAdditionalAction(e){return U(this,void 0,void 0,function*(){if(!f(e)||!p(e.body))throw e;const t=yield this._handleAction(e.body.provider_data);try{return yield this._service.submitPayment(t)}catch(e){return this.processAdditionalAction(e)}})}_handleAction(e){return new Promise((t,n)=>{const i=JSON.parse(e.action);this._getAdyenClient().createFromAction(i,{onAdditionalDetails:e=>{const n={methodId:i.paymentMethodType,paymentData:{nonce:JSON.stringify(e.data)}};t(n)},size:\"05\",onError:e=>n(e)}).mount(\"body\"),n(new P)})}_getAdyenClient(){if(!this._adyenClient)throw new v(w.PaymentNotInitialized);return this._adyenClient}}const W={\"X-Checkout-SDK-Version\":\"1.916.1\"};class H extends l{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}var q=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class K{constructor(e,t,n,i){this._scriptLoader=e,this._gateway=t,this._requestSender=n,this._formPoster=i,this._baseRequest={apiVersion:2,apiVersionMinor:0}}initialize(e,t,n,i){return q(this,void 0,void 0,function*(){this._paymentsClient=yield this._scriptLoader.getGooglePaymentsClient(e().config.testMode,t),yield this._gateway.initialize(e,n,i),this._buildButtonPayloads()})}initializeWidget(){return q(this,void 0,void 0,function*(){yield this._buildWidgetPayloads(),yield this._determineReadinessToPay(),this._prefetchGooglePaymentData()})}getNonce(e){return this._gateway.getNonce(e)}extraPaymentData(){return q(this,void 0,void 0,function*(){return this._gateway.extraPaymentData()})}addPaymentButton(e,t){const n=document.querySelector(`#${e}`);if(!n)return;const i=this._getPaymentsClient().createButton(Object.assign(Object.assign({},t),{allowedPaymentMethods:[this._getBaseCardPaymentMethod()]}));return n.appendChild(i)}showPaymentSheet(){return q(this,void 0,void 0,function*(){const e=this._getPaymentDataRequest();return this._getPaymentsClient().loadPaymentData(e)})}setExternalCheckoutXhr(e,t){return q(this,void 0,void 0,function*(){return this._setExternalCheckout(e,t)})}setExternalCheckoutForm(e,t,n){return q(this,void 0,void 0,function*(){return this._setExternalCheckout(e,t,!0,n)})}mapToBillingAddressRequestBody(e){return this._gateway.mapToBillingAddressRequestBody(e)}mapToShippingAddressRequestBody(e){return this._gateway.mapToShippingAddressRequestBody(e)}processAdditionalAction(e,t){return\"processAdditionalAction\"in this._gateway?this._gateway.processAdditionalAction(e,t):Promise.reject(e)}signOut(e){return q(this,void 0,void 0,function*(){yield this._requestSender.get(`/remote-checkout/${e}/signout`)})}getCallbackTriggers(){return this._gateway.getCallbackTriggers()}setShouldRequestShipping(e){return this._gateway.setShouldRequestShipping(e)}handleShippingAddressChange(e){return q(this,void 0,void 0,function*(){return this._gateway.handleShippingAddressChange(e)})}handleShippingOptionChange(e){return q(this,void 0,void 0,function*(){yield this._gateway.handleShippingOptionChange(e)})}handleCoupons(e){return q(this,void 0,void 0,function*(){return this._gateway.handleCoupons(e)})}getTotalPrice(){return this._gateway.getTotalPrice()}_setExternalCheckout(e,t,n=!1,i){return q(this,void 0,void 0,function*(){const o=\"/checkout.php\",r=Object.assign({action:\"set_external_checkout\",provider:e},yield this._gateway.mapToExternalCheckoutData(t));if(n)return new Promise(e=>{this._formPoster.postForm(i?`${i}/checkout`:o,Object.assign(Object.assign({},r),{card_information:JSON.stringify(r.card_information)}),e)});yield this._requestSender.post(o,{headers:Object.assign({Accept:\"text/html\",\"Content-Type\":\"application/x-www-form-urlencoded\"},W),body:r})})}isWebViewWithRestrictions(){return this._gateway.isWebViewWithRestrictions()}setIsWebViewExperimentOn(e){return this._gateway.setIsWebViewExperimentOn(e)}_prefetchGooglePaymentData(){const e=this._getPaymentDataRequest();e.transactionInfo=this._gateway.getTransactionInfo(),this._getPaymentsClient().prefetchPaymentData(e)}_determineReadinessToPay(){return q(this,void 0,void 0,function*(){try{const{result:e}=yield this._getPaymentsClient().isReadyToPay(this._getIsReadyToPayRequest());if(!1===e)throw new H(\"Google Pay is not supported by the current device and browser, please try another payment method.\")}catch(e){if(e instanceof H)throw e;throw new H}})}_buildButtonPayloads(){this._baseCardPaymentMethod={type:\"CARD\",parameters:this._gateway.getCardParameters()}}_buildWidgetPayloads(){return q(this,void 0,void 0,function*(){const e=this._getBaseCardPaymentMethod();this._cardPaymentMethod=Object.assign(Object.assign({},e),{tokenizationSpecification:{type:\"PAYMENT_GATEWAY\",parameters:yield this._gateway.getPaymentGatewayParameters()}});const t=this._gateway.isWebViewWithRestrictions()?{shippingOptionRequired:!1}:{callbackIntents:this._gateway.getCallbackIntents(),offerInfo:this._gateway.getAppliedCoupons()};this._paymentDataRequest=Object.assign(Object.assign(Object.assign(Object.assign({},this._baseRequest),{allowedPaymentMethods:[this._cardPaymentMethod],transactionInfo:this._gateway.getTransactionInfo(),merchantInfo:this._gateway.getMerchantInfo()}),yield this._gateway.getRequiredData()),t),this._isReadyToPayRequest=Object.assign(Object.assign({},this._baseRequest),{allowedPaymentMethods:[e]})})}_getBaseCardPaymentMethod(){return this._getOrThrow(this._baseCardPaymentMethod)}_getPaymentDataRequest(){return this._getOrThrow(this._paymentDataRequest)}_getIsReadyToPayRequest(){return this._getOrThrow(this._isReadyToPayRequest)}_getPaymentsClient(){return this._getOrThrow(this._paymentsClient)}_getOrThrow(e){return A(e,()=>new v(w.PaymentNotInitialized))}}class Y extends C{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class Z extends l{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}const J={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},Q={position:\"fixed\",\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},X=\"embedded-checkout-loading-indicator-rotation\";class ${constructor(e){this.styles=Object.assign(Object.assign({},J),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${X} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(n=>{e.style.setProperty(n,t[n])})}defineAnimation(){var e;if(document.getElementById(X))return;const t=document.createElement(\"style\");t.id=X,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${X} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}function ee(e){return\"object\"==typeof e&&null!==e&&\"statusCode\"in e}var te;function ne(e){return Object.values(te).includes(e)}!function(e){e.ADYEN_V2=\"googlepayadyenv2\",e.ADYEN_V3=\"googlepayadyenv3\",e.AUTHORIZE_NET=\"googlepayauthorizenet\",e.BNZ=\"googlepaybnz\",e.BRAINTREE=\"googlepaybraintree\",e.PAYPAL_COMMERCE=\"googlepaypaypalcommerce\",e.BIGCOMMERCE_PAYMENTS=\"googlepay_bigcommerce_payments\",e.CHECKOUT_COM=\"googlepaycheckoutcom\",e.CYBERSOURCE_V2=\"googlepaycybersourcev2\",e.ORBITAL=\"googlepayorbital\",e.STRIPE=\"googlepaystripe\",e.STRIPE_UPE=\"googlepaystripeupe\",e.STRIPE_OCS=\"googlepaystripeocs\",e.WORLDPAY_ACCESS=\"googlepayworldpayaccess\",e.TD_ONLINE_MART=\"googlepaytdonlinemart\"}(te||(te={}));var ie=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class oe{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t,this._isDeinitializationBlocked=!1,this._isContainerMode=!1,this._loadingIndicator=new $({containerStyles:Q})}initialize(e){var t,n;return ie(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId)||!ne(e.methodId))throw new C('Unable to proceed because \"methodId\" is not a valid key.');this._methodId=e.methodId;const i=e[this._getMethodId()];if(!(null==i?void 0:i.walletButton)&&!(null==i?void 0:i.container))throw new C(\"Unable to proceed without valid options.\");const{walletButton:o,loadingContainerId:r,container:a,buttonColor:s,buttonSizeMode:c,buttonType:d,onInit:l}=i,h=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(i=Object.getOwnPropertySymbols(e);o<i.length;o++)t.indexOf(i[o])<0&&Object.prototype.propertyIsEnumerable.call(e,i[o])&&(n[i[o]]=e[i[o]])}return n}(i,[\"walletButton\",\"loadingContainerId\",\"container\",\"buttonColor\",\"buttonSizeMode\",\"buttonType\",\"onInit\"]);this._loadingIndicatorContainer=r,yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodId());const u=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(this._getMethodId());if(this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(t=u.initializationData)||void 0===t?void 0:t.isWebViewExperimentOn)),yield this._googlePayPaymentProcessor.initialize(()=>u,this._getGooglePayClientOptions(null===(n=u.initializationData)||void 0===n?void 0:n.storeCountry)),a){this._isContainerMode=!0;const e=()=>this._addPaymentButtonToContainer(i);l?l(e):e()}else this._addPaymentButton(o,h)})}execute({payment:e}){return ie(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new Y([\"payment\"]);yield this._paymentIntegrationService.submitOrder();const t=yield this._googlePayPaymentProcessor.getNonce(e.methodId),n=yield this._googlePayPaymentProcessor.extraPaymentData();try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:Object.assign({nonce:t},n)}))}catch(t){yield this._googlePayPaymentProcessor.processAdditionalAction(t,e.methodId)}})}finalize(){return Promise.reject(new Z)}deinitialize(){var e,t;return this._isDeinitializationBlocked||(this._isContainerMode?null===(e=this._paymentButton)||void 0===e||e.remove():this._clickListener&&(null===(t=this._paymentButton)||void 0===t||t.removeEventListener(\"click\",this._clickListener)),this._paymentButton=void 0,this._clickListener=void 0,this._methodId=void 0,this._isContainerMode=!1),Promise.resolve()}_addPaymentButton(e,t){if(this._paymentButton)return;const n=document.getElementById(e);if(!n)throw new C(\"Unable to proceed without a walletButton.\");this._paymentButton=n,this._clickListener=this._handleClick(t),this._paymentButton.addEventListener(\"click\",this._clickListener)}_addPaymentButtonToContainer(e){if(this._paymentButton)return;const{container:t,buttonColor:n,buttonSizeMode:i,buttonType:o,onError:r}=e;if(!t)throw new C(\"Unable to proceed: container ID is not valid.\");const a=this._googlePayPaymentProcessor.addPaymentButton(t,{buttonColor:null!=n?n:\"default\",buttonSizeMode:null!=i?i:\"fill\",buttonType:null!=o?o:\"pay\",onClick:this._handleContainerButtonClick(r)});if(!a)throw new C(`Unable to proceed: container element \"#${t}\" not found in the DOM.`);this._paymentButton=a}_handleContainerButtonClick(e){return t=>ie(this,void 0,void 0,function*(){t.preventDefault(),yield this._runGooglePayWidgetInteractionWithErrorHandling(e,()=>ie(this,void 0,void 0,function*(){this._googlePayPaymentProcessor.setShouldRequestShipping(!1),yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheetAndPay()}))})}_handleClick({onPaymentSelect:e,onError:t}){return n=>ie(this,void 0,void 0,function*(){n.preventDefault(),yield this._runGooglePayWidgetInteractionWithErrorHandling(t,()=>ie(this,void 0,void 0,function*(){this._googlePayPaymentProcessor.setShouldRequestShipping(!1),yield this._googlePayPaymentProcessor.initializeWidget(),this._isDirectPayOnClickEnabled()?yield this._interactWithPaymentSheetAndPay():yield this._interactWithPaymentSheet()})),null==e||e()})}_interactWithPaymentSheetAndPay(){return ie(this,void 0,void 0,function*(){const e=yield this._googlePayPaymentProcessor.showPaymentSheet();this._toggleBlockDeinitialization(!0),this._toggleLoadingIndicator(!0);const t=this._getMethodId(),n=this._paymentIntegrationService.getState(),{features:i}=n.getStoreConfigOrThrow().checkoutSettings,o=M(i,\"PI-5031.google_pay_dont_override_address\"),r=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(e);r&&!o&&(yield this._paymentIntegrationService.updateBillingAddress(r)),yield this._googlePayPaymentProcessor.setExternalCheckoutXhr(t,e),yield this._paymentIntegrationService.loadCheckout(),yield this._paymentIntegrationService.loadPaymentMethod(t);const a=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(t);yield this._googlePayPaymentProcessor.initialize(()=>a),yield this.execute({useStoreCredit:!1,payment:{methodId:t}}),this._completeCheckoutFlow()})}_completeCheckoutFlow(){window.location.replace(\"/checkout/order-confirmation\"),this._toggleLoadingIndicator(!1),this._toggleBlockDeinitialization(!1)}_interactWithPaymentSheet(){return ie(this,void 0,void 0,function*(){const e=yield this._googlePayPaymentProcessor.showPaymentSheet(),t=this._paymentIntegrationService.getState(),{features:n}=t.getStoreConfigOrThrow().checkoutSettings,i=M(n,\"PI-5031.google_pay_dont_override_address\");this._toggleBlockDeinitialization(!0),this._toggleLoadingIndicator(!0);const o=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(e);o&&!i&&(yield this._paymentIntegrationService.updateBillingAddress(o)),yield this._googlePayPaymentProcessor.setExternalCheckoutXhr(this._getMethodId(),e),yield this._paymentIntegrationService.loadCheckout(),yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodId()),this._toggleLoadingIndicator(!1),this._toggleBlockDeinitialization(!1)})}_getMethodId(){return A(this._methodId,()=>new v(w.PaymentNotInitialized))}_getIsSignedInOrThrow(){return ie(this,void 0,void 0,function*(){try{return!!(yield this._googlePayPaymentProcessor.getNonce(this._getMethodId()))}catch(e){if(e instanceof _&&e.subtype===u.MissingPaymentToken)return!1;throw e}})}_handleOfferTrigger(e){return ie(this,void 0,void 0,function*(){let t=!1,n=\"Sign in to Google Pay first to apply or remove promo codes.\";try{t=yield this._getIsSignedInOrThrow()}catch(e){e instanceof _&&(n=e.message)}if(t){const{newOfferInfo:t,error:n}=yield this._googlePayPaymentProcessor.handleCoupons(e);return{newOfferInfo:t,error:n}}return{error:{reason:B.OFFER_INVALID,message:n,intent:L.OFFER}}})}_getGooglePayClientOptions(e){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:t,offerData:n})=>ie(this,void 0,void 0,function*(){if(t!==L.INITIALIZE&&t!==L.OFFER)return;const{offerChangeTriggers:i}=this._googlePayPaymentProcessor.getCallbackTriggers(),{newOfferInfo:o,error:r}=i.includes(t)?yield this._handleOfferTrigger(n):{},a=r;yield this._paymentIntegrationService.loadCheckout();const{code:s}=this._paymentIntegrationService.getState().getCartOrThrow().currency,c=this._googlePayPaymentProcessor.getTotalPrice();return Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},e&&{countryCode:e}),{currencyCode:s,totalPriceStatus:z.FINAL,totalPrice:c})},o&&{newOfferInfo:o}),a&&{error:a})})}}}_runGooglePayWidgetInteractionWithErrorHandling(e,t){return ie(this,void 0,void 0,function*(){try{yield t()}catch(t){let n=t;if(this._toggleLoadingIndicator(!1),ee(t)){if(\"CANCELED\"===t.statusCode)throw new P;n=new H(JSON.stringify(t))}throw null==e||e(new H(\"An error occurred while requesting your Google Pay payment details.\")),n}finally{this._toggleBlockDeinitialization(!1)}})}_isDirectPayOnClickEnabled(){const{features:e}=this._paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings;return M(e,\"PI-5111.google_pay_direct_pay_on_click\")}_toggleBlockDeinitialization(e){this._isDeinitializationBlocked=e}_toggleLoadingIndicator(e){e&&this._loadingIndicatorContainer?this._loadingIndicator.show(this._loadingIndicatorContainer):this._loadingIndicator.hide()}}class re{constructor(e){this._scriptLoader=e,this._window=window}getGooglePaymentsClient(e=!1,t){return n=this,i=void 0,r=function*(){if(yield this._scriptLoader.loadScript(\"https://pay.google.com/gp/p/js/pay.js\"),!this._window.google)throw new h;return void 0===this._paymentsClient&&(this._paymentsClient=new this._window.google.payments.api.PaymentsClient(Object.assign({environment:e?\"TEST\":\"PRODUCTION\"},null!=t?t:{}))),this._paymentsClient},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{c(r.next(e))}catch(e){t(e)}}function s(e){try{c(r.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o(function(e){e(n)})).then(a,s)}c((r=r.apply(n,i||[])).next())});var n,i,o,r}}function ae(){return new re(n())}const se=g(o=>new oe(o,new K(ae(),new V(o,new y(n(),i())),t(),e())),[{id:\"googlepayadyenv2\"}]);class ce{constructor(e,t,n=window){this._scriptLoader=e,this._stylesheetLoader=t,this._window=n}load(e){var t,n,i,o,r,a;return i=this,o=void 0,a=function*(){if(yield Promise.all([this._stylesheetLoader.loadStylesheet(`https://checkoutshopper-${null!==(t=e.environment)&&void 0!==t?t:\"\"}.adyen.com/checkoutshopper/sdk/5.71.1/adyen.css`,{prepend:!1,attributes:{integrity:\"sha384-5MvB4RnzvviA3VBT4KYABZ4HXNZG5LRqREEgd41xt/pf/QvKmsj2O9GuNuywRXx9\",crossorigin:\"anonymous\"}}),this._scriptLoader.loadScript(`https://checkoutshopper-${null!==(n=e.environment)&&void 0!==n?n:\"\"}.adyen.com/checkoutshopper/sdk/5.71.1/adyen.js`,{async:!0,attributes:{integrity:\"sha384-yvY2yFNR4WqIjPqP9MzjI+gJimmaJnAvj4rLHKvgJbgFD5fMuf8zIJrFJOW8Lhhf\",crossorigin:\"anonymous\"}})]),!this._window.AdyenCheckout)throw new h;return yield this._window.AdyenCheckout(e)},new((r=void 0)||(r=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var i;t.done?e(t.value):(i=t.value,i instanceof r?i:new r(function(e){e(i)})).then(n,s)}c((a=a.apply(i,o||[])).next())})}}var de=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class le extends F{constructor(e,t){super(\"adyen\",e),this._scriptLoader=t,this._service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return de(this,void 0,void 0,function*(){yield i.initialize.call(this,e,t,n);const o=i.getPaymentMethod.call(this),r=this._service.getState().getStoreConfig();if(!r)throw new _(u.MissingCheckoutConfig);return this._adyenClient=yield this._scriptLoader.load({environment:o.config.testMode?\"test\":\"live\",locale:r.storeProfile.storeLanguage}),Promise.resolve()})}processAdditionalAction(e){return de(this,void 0,void 0,function*(){if(!f(e)||!p(e.body))throw e;const t=yield this._handleAction(e.body.provider_data);try{return yield this._service.submitPayment(t)}catch(e){return this.processAdditionalAction(e)}})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});return de(this,void 0,void 0,function*(){const n=yield t.getNonce.call(this,e),i=t.getPaymentMethod.call(this);return JSON.stringify({type:i.method,googlePayToken:n,browser_info:m()})})}_handleAction(e){return new Promise((t,n)=>{const i=JSON.parse(e.action);this._getAdyenClient().createFromAction(i,{onAdditionalDetails:e=>{const n={methodId:i.paymentMethodType,paymentData:{nonce:JSON.stringify(e.data)}};t(n)},size:\"05\",onError:e=>n(e)}).mount(\"body\"),n(new P)})}_getAdyenClient(){if(!this._adyenClient)throw new v(w.PaymentNotInitialized);return this._adyenClient}}const he=g(o=>new oe(o,new K(ae(),new le(o,new ce(n(),i())),t(),e())),[{id:\"googlepayadyenv3\"}]);class ue extends F{constructor(e){super(\"authorizenet\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,r=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{c(r.next(e))}catch(e){t(e)}}function s(e){try{c(r.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o(function(e){e(n)})).then(a,s)}c((r=r.apply(n,i||[])).next())});var n,i,o,r}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();return function(e){if(!function(e){return\"paymentGatewayId\"in e}(e))throw new _(u.MissingPaymentMethod)}(e),{gateway:this.getGatewayIdentifier(),gatewayMerchantId:e.paymentGatewayId}}}const ye=g(n=>new oe(n,new K(ae(),new ue(n),t(),e())),[{id:\"googlepayauthorizenet\"}]);var ge;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(ge||(ge={}));const pe=ge;function _e(e){if(!function(e){return\"checkoutcomkey\"in e}(e))throw new _(u.MissingPaymentMethod)}var me=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class fe extends F{constructor(e,t){super(\"checkoutltd\",e),this._requestSender=t}processAdditionalAction(e){return new Promise((t,n)=>{if(f(e)&&function(e){var t;if(\"object\"!=typeof e||null===e)return!1;const n=e;return\"string\"==typeof(null===(t=n.three_ds_result)||void 0===t?void 0:t.acs_url)&&\"string\"==typeof n.three_ds_result.code}(e.body)&&\"three_d_secure_required\"===e.body.three_ds_result.code)return window.location.assign(e.body.three_ds_result.acs_url);n(e)})}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return me(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let i;try{i=JSON.parse(n.nonce)}catch(e){throw new C(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"protocolVersion\"in e&&\"signature\"in e&&\"signedMessage\"in e}(e))throw new _(u.MissingPaymentToken)}(i),n.nonce=yield this._tokenize(i),n})}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();return _e(e),{gateway:this.getGatewayIdentifier(),gatewayMerchantId:e.checkoutcomkey}}_tokenize(e){return me(this,void 0,void 0,function*(){const t=this.getPaymentMethod().config.testMode?\"https://api.sandbox.checkout.com/tokens\":\"https://api.checkout.com/tokens\",n=this.getGooglePayInitializationData();_e(n);const{body:i}=yield this._requestSender.post(t,{credentials:!1,body:{type:\"googlepay\",token_data:e},headers:{Authorization:n.checkoutcomkey,\"Content-Type\":pe.Json,\"X-XSRF-TOKEN\":null}});return i.token})}}const Pe=g(n=>{const i=t();return new oe(n,new K(ae(),new fe(n,i),i,e()))},[{id:\"googlepaycheckoutcom\"}]);class we extends F{constructor(e){super(\"cybersource\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,r=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{c(r.next(e))}catch(e){t(e)}}function s(e){try{c(r.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o(function(e){e(n)})).then(a,s)}c((r=r.apply(n,i||[])).next())});var n,i,o,r}}const ve=g(n=>new oe(n,new K(ae(),new we(n),t(),e())),[{id:\"googlepaycybersourcev2\"},{id:\"googlepaybnz\"}]);class Ce extends F{constructor(e){super(\"chase\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,r=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{c(r.next(e))}catch(e){t(e)}}function s(e){try{c(r.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o(function(e){e(n)})).then(a,s)}c((r=r.apply(n,i||[])).next())});var n,i,o,r}}const Se=g(n=>new oe(n,new K(ae(),new Ce(n),t(),e())),[{id:\"googlepayorbital\"}]);var be,Ie,Oe,Ae,Te,Me,Ee,ke,Ne,De,ze,Ge;!function(e){e.SHIPPING=\"shipping\",e.BILLING=\"billing\"}(be||(be={})),function(e){e.SPLIT=\"split\",e.FULL=\"full\",e.ORGANIZATION=\"organization\"}(Ie||(Ie={})),function(e){e.Open=\"open\",e.Expired=\"expired\",e.Complete=\"complete\"}(Oe||(Oe={})),function(e){e.Paid=\"paid\",e.UnPaid=\"unpaid\",e.NoPaymentRequired=\"no_payment_required\"}(Ae||(Ae={})),function(e){e.SUCCESS=\"success\",e.ERROR=\"error\"}(Te||(Te={})),function(e){e.CreditCard=\"card\",e.ACH=\"us_bank_account\",e.Link=\"link\",e.EPS=\"eps\",e.GRABPAY=\"grabpay\",e.BANCONTACT=\"bancontact\",e.IDEAL=\"ideal\",e.ALIPAY=\"alipay\",e.KLARNA=\"klarna\",e.OCS=\"optimized_checkout\",e.CHECKOUT_SESSION=\"checkout_session\"}(Me||(Me={})),function(e){e.NEVER=\"never\",e.AUTO=\"auto\",e.ALWAYS=\"always\",e.PAYMENT=\"payment\",e.IF_REQUIRED=\"if_required\"}(Ee||(Ee={})),function(e){e.V3=\"v3\",e.ACACIA=\"acacia\",e.BASIL=\"basil\",e.CLOVER=\"clover\"}(ke||(ke={})),function(e){e.PAYMENT=\"payment\",e.AUTHENTICATION=\"linkAuthentication\",e.SHIPPING=\"address\",e.EXPRESS_CHECKOUT=\"expressCheckout\"}(Ne||(Ne={})),function(e){e.REQUIRES_PAYMENT_METHOD=\"requires_payment_method\",e.REQUIRES_CONFIRMATION=\"requires_confirmation\",e.REQUIRES_ACTION=\"requires_action\",e.PROCESSING=\"processing\",e.SUCCEEDED=\"succeeded\",e.CANCELED=\"canceled\"}(De||(De={})),function(e){e.CLICK=\"click\",e.CHANGE=\"change\",e.READY=\"ready\",e.SHIPPING_ADDRESS_CHANGE=\"shippingaddresschange\",e.SHIPPING_RATE_CHANGE=\"shippingratechange\",e.CONFIRM=\"confirm\",e.CANCEL=\"cancel\",e.LOADER_START=\"loaderstart\"}(ze||(ze={})),function(e){e.ON_SESSION=\"on_session\",e.OFF_SESSION=\"off_session\"}(Ge||(Ge={}));var Re=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Be{constructor(e,t=window){this.scriptLoader=e,this.stripeWindow=t}getStripeClient(e,t,n,i,o){return Re(this,void 0,void 0,function*(){if(this.stripeWindow.bcStripeClient)return this.stripeWindow.bcStripeClient;const r=yield this.load(n),{stripePublishableKey:a,stripeConnectedAccount:s}=e,c=r(a,Object.assign(Object.assign(Object.assign(Object.assign({},s?{stripeAccount:s}:{}),t?{locale:t}:{}),i?{betas:i}:{}),o?{apiVersion:o}:{}));return Object.assign(this.stripeWindow,{bcStripeClient:c}),c})}getElements(e,t){return Re(this,void 0,void 0,function*(){let n=this.stripeWindow.bcStripeElements;return n?yield this.updateStripeElements(t):(n=e.elements(t),Object.assign(this.stripeWindow,{bcStripeElements:n})),n})}updateStripeElements(e){return Re(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeElements;t&&(t.update(e),yield t.fetchUpdates())})}getStripeCheckout(e,t){return Re(this,void 0,void 0,function*(){let n=yield this.getStoredStripeCheckout(t);return n||(n=yield e.initCheckout(t),Object.assign(this.stripeWindow,{bcStripeCheckout:n})),n})}load(e){return Re(this,void 0,void 0,function*(){if(!this.stripeWindow.Stripe&&(yield this.scriptLoader.loadScript(this.getScriptUrl(e)),!this.stripeWindow.Stripe))throw new h;return this.stripeWindow.Stripe})}getScriptUrl(e){return e&&e!==ke.V3?`https://js.stripe.com/${e}/stripe.js`:\"https://js.stripe.com/v3/\"}getStoredStripeCheckout(e){return Re(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeCheckout;if(t)try{const{actions:n,error:i}=yield t.loadActions();if(i||!n)return void this.logErrorToConsole(i);const o=yield n.getSession(),r=e.clientSecret.split(\"_secret_\")[0];if(o.id===r)return t}catch(e){return void this.logErrorToConsole(e)}})}logErrorToConsole(e){e?console.error(e):console.error(\"No stripe checkout actions available on loadActions().\")}}const Le={body:{},headers:{},status:0};class xe extends l{constructor(e,{message:t,errors:n}={}){const{body:i,headers:o,status:r}=e||Le;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=o,this.status=r,this.errors=n||[]}}const je=[\"payment_element_beta_2\",\"alipay_pm_beta_1\",\"link_default_integration_beta_1\",\"shipping_address_element_beta_1\",\"address_element_beta_1\"];function Fe(e){if(!function(e){return\"stripeConnectedAccount\"in e&&\"stripePublishableKey\"in e&&\"stripeVersion\"in e}(e))throw new _(u.MissingPaymentMethod)}var Ue=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Ve extends F{constructor(e,t){super(\"stripe\",e),this.paymentIntegrationService=e,this.scriptLoader=t}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return Ue(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let i;try{i=JSON.parse(n.nonce)}catch(e){throw new C(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"id\"in e}(e))throw new _(u.MissingPaymentToken)}(i),n.nonce=i.id,n})}getPaymentGatewayParameters(){const e=this.getGooglePayInitializationData();Fe(e);const{stripeVersion:t,stripePublishableKey:n,stripeConnectedAccount:i}=e;return{gateway:this.getGatewayIdentifier(),\"stripe:version\":t,\"stripe:publishableKey\":`${n}/${i}`}}processAdditionalAction(e,t){var n;return Ue(this,void 0,void 0,function*(){if(!t)throw new Y([\"payment\"]);if(!f(e)||(\"object\"!=typeof(i=e.body)||null===i||!(\"three_ds_result\"in i)||!(\"errors\"in i)))throw e;var i;if(d(e.body.errors,{code:\"three_d_secure_required\"})){const i=this.getGooglePayInitializationData();Fe(i),this.stripeUPEClient=yield this.loadStripeJs(i,t);const o=e.body.three_ds_result.token;let r,a=!1;try{r=yield this.stripeUPEClient.confirmCardPayment(o)}catch(e){try{r=yield this.stripeUPEClient.retrievePaymentIntent(o)}catch(e){a=!0}}if(null==r?void 0:r.error){if(this._throwDisplayableStripeError(r.error),this._isCancellationError(r.error))throw new P;throw new H}if(!(null==r?void 0:r.paymentIntent)&&!a)throw new xe;return this.paymentIntegrationService.submitPayment({methodId:t,paymentData:{nonce:(null===(n=null==r?void 0:r.paymentIntent)||void 0===n?void 0:n.id)||o}})}throw e})}loadStripeJs(e,t){return Ue(this,void 0,void 0,function*(){if(this.stripeUPEClient)return this.stripeUPEClient;const n=this.paymentIntegrationService.getState().getCartLocale();return\"googlepaystripeocs\"===t&&e.useNewStripeJsVersion?this.scriptLoader.getStripeClient(e,n,ke.CLOVER):this.scriptLoader.getStripeClient(e,n,ke.V3,je,\"2020-03-02;alipay_beta=v1;link_beta=v1\")})}_isCancellationError(e){var t,n;return e&&-1!==(null===(n=null===(t=e.payment_intent.last_payment_error)||void 0===t?void 0:t.message)||void 0===n?void 0:n.indexOf(\"canceled\"))}_throwDisplayableStripeError(e){if(r([\"card_error\",\"invalid_request_error\",\"validation_error\"],e.type))throw new Error(e.message)}}const We=g(i=>new oe(i,new K(ae(),new Ve(i,new Be(n())),t(),e())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeupe\"},{id:\"googlepaystripeocs\"}]);class He extends F{constructor(e){super(\"worldpay\",e)}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return n=this,i=void 0,r=function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{c(r.next(e))}catch(e){t(e)}}function s(e){try{c(r.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o(function(e){e(n)})).then(a,s)}c((r=r.apply(n,i||[])).next())});var n,i,o,r}}const qe=g(n=>new oe(n,new K(ae(),new He(n),t(),e())),[{id:\"googlepayworldpayaccess\"}]),Ke=\"3.128.0\",Ye=\"3.123.2\",Ze=\"3.106.0\";class Je{constructor(e){this.paymentIntegrationService=e,this.braintreeWindow=window}getSDKVersion(){const e=this.paymentIntegrationService.getState().getStoreConfig(),t=(null==e?void 0:e.checkoutSettings.features)||{};return this.getPreloadedSDKVersion()||(M(t,\"PAYPAL-5809.braintree_hosted_fields_fix_version\")?Ke:M(t,\"PAYPAL-5636.update_braintree_sdk_version\")?Ye:Ze)}getPreloadedSDKVersion(){const e=this.braintreeWindow.braintree;if(e){const t=o(Object.values(e),e=>!!e.VERSION);return null==t?void 0:t.VERSION}}}class Qe extends l{constructor(e){super(e||\"Unsupported browser error\"),this.name=\"UnsupportedBrowserError\",this.type=\"unsupported_browser\"}}var Xe,$e,et,tt,nt,it,ot;!function(e){e.ESTIMATED=\"ESTIMATED\",e.FINAL=\"FINAL\",e.NOT_CURRENTLY_KNOWN=\"NOT_CURRENTLY_KNOWN\"}(Xe||(Xe={})),function(e){e.Completed=\"COMPLETED\",e.Pending=\"PENDING\",e.Failed=\"FAILED\"}($e||($e={})),function(e){e.TRUSTLY=\"trustly\"}(et||(et={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"cancelled\",e.UNRECOGNIZED=\"unrecognized\"}(tt||(tt={})),function(e){e.Customer=\"CUSTOMER\",e.Merchant=\"MERCHANT\",e.Network=\"NETWORK\",e.Internal=\"INTERNAL\",e.Unknown=\"UNKNOWN\"}(nt||(nt={})),function(e){e.KountNotEnabled=\"DATA_COLLECTOR_KOUNT_NOT_ENABLED\"}(it||(it={})),function(e){e.Visa=\"visa\",e.Mastercard=\"mastercard\",e.AmericanExpress=\"american-express\",e.DinersClub=\"diners-club\",e.Discover=\"discover\",e.Jcb=\"jcb\",e.UnionPay=\"union-pay\",e.Maestro=\"maestro\",e.Elo=\"elo\",e.Mir=\"mir\",e.Hiper=\"hiper\",e.Hipercard=\"hipercard\"}(ot||(ot={}));var rt,at,st,ct=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class dt{constructor(e){this.braintreeScriptLoader=e}initialize(e){this.setClientToken(e)}deinitialize(){return ct(this,void 0,void 0,function*(){yield this.teardownModule(this.dataCollector),this.dataCollector=void 0})}getClient(){return ct(this,void 0,void 0,function*(){if(!this.client){const e=this.getClientTokenOrThrow(),t=yield this.braintreeScriptLoader.loadClient();this.client=yield t.create({authorization:e})}return this.client})}getDataCollectorOrThrow(e){return ct(this,void 0,void 0,function*(){const t={deviceData:void 0,teardown:()=>Promise.resolve()};if(!this.dataCollector)try{const t=yield this.getClient(),n=yield this.braintreeScriptLoader.loadDataCollector(),i=Object.assign({client:t,kount:!0},e);this.dataCollector=yield n.create(i)}catch(e){if(function(e){return Boolean(\"object\"==typeof e&&null!==e&&(\"type\"in e||\"message\"in e||\"code\"in e))}(e)&&e.code===it.KountNotEnabled)return t;throw e}return this.dataCollector})}getBraintreeGooglePayment(){return ct(this,void 0,void 0,function*(){if(!this.googlePayment){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadGooglePayment()]);this.googlePayment=yield t.create({client:e})}return this.googlePayment})}getBraintreeThreeDS(){return ct(this,void 0,void 0,function*(){if(!this.threeDS){const[e,t]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.load3DS()]);this.threeDS=yield t.create({client:e,version:2})}return this.threeDS})}getBraintreeLocalPayment(e){return ct(this,void 0,void 0,function*(){if(!this.braintreeLocalPayment){const[t,n]=yield Promise.all([this.getClient(),this.braintreeScriptLoader.loadLocalPayment()]);this.braintreeLocalPayment=yield new Promise((i,o)=>{n.create({client:t,merchantAccountId:e},(e,t)=>{e&&o(e),i(t)})})}return this.braintreeLocalPayment})}getUsBankAccount(){return ct(this,void 0,void 0,function*(){if(!this.usBankAccount){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadUsBankAccount();this.usBankAccount=yield t.create({client:e})}return this.usBankAccount})}getBraintreeVisaCheckout(){return this.visaCheckout||(this.visaCheckout=Promise.all([this.getClient(),this.braintreeScriptLoader.loadVisaCheckout()]).then(([e,t])=>t.create({client:e}))),this.visaCheckout}getVisaCheckoutSdk(e){return ct(this,void 0,void 0,function*(){return this.visaCheckoutSDK||(this.visaCheckoutSDK=yield this.braintreeScriptLoader.loadVisaCheckoutSdk(e)),this.visaCheckoutSDK})}getVenmoCheckoutOrThrow(){return ct(this,void 0,void 0,function*(){if(!this.braintreeVenmo){const e=yield this.getClient(),t=yield this.braintreeScriptLoader.loadVenmoCheckout(),n={client:e,allowDesktop:!0,paymentMethodUsage:\"multi_use\"},i=yield t.create(n);if(!i.isBrowserSupported())throw new Qe;this.braintreeVenmo=i}return this.braintreeVenmo})}setClientToken(e){this.clientToken=e}getClientTokenOrThrow(){if(!this.clientToken)throw new v(w.PaymentNotInitialized);return this.clientToken}teardownModule(e){return e?e.teardown():Promise.resolve()}}!function(e){e.Sandbox=\"sandbox\",e.Production=\"production\"}(rt||(rt={})),function(e){e.Client=\"client\",e.DataCollector=\"dataCollector\",e.Fastlane=\"fastlane\",e.GooglePayment=\"googlePayment\",e.HostedFields=\"hostedFields\",e.LocalPayment=\"localPayment\",e.Paypal=\"paypal\",e.PaypalCheckout=\"paypalCheckout\",e.ThreeDSecure=\"threeDSecure\",e.UsBankAccount=\"usBankAccount\",e.Venmo=\"venmo\",e.VisaCheckout=\"visaCheckout\"}(at||(at={})),function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\"}(st||(st={}));const lt={[Ze]:{[at.Client]:\"sha384-26BXDNnJI23JYRyFBj4xe4sVNrUSSiSSu11kxVXNM/vEPONm4LuL00w6ZaTgQewt\",[at.PaypalCheckout]:\"sha384-B+vzbZwnQtzWBthpkT4TXKUibO65tyeK7eCxSvpblgprTep2+IAXB2Cxxjrn710O\",[at.Paypal]:\"sha384-uyAGL1/3+XJAHnGoNy4eCoXdzJ4f7Ilzp+6w9PNnEjs6DCCz9WMyJjMN1gzc78U+\",[at.LocalPayment]:\"sha384-LIvOEMkIVEwVuYBdVOQc1AC5YbGGlwyfUheS0ACK218D2STuVYQlZ4FyEPowAEfT\",[at.DataCollector]:\"sha384-1bo9JDz+Kscthc085cCKWur8CLwUoBpoNyxsDi7932mCl0zFq3A5mv+FQLw9GHpV\",[at.UsBankAccount]:\"sha384-xmHBVaU+w74V+OebD3AaPONFxHUGMf+QRs8G/JxVPXNNP7MDa2jL0ICWHIe2tTfJ\",[at.GooglePayment]:\"sha384-WKDJl8mqoP82qZpMGH6AbZxnvXnSW8ILV4M64CyMLiugGMwu7LyP89wjCkHqsiBe\",[at.ThreeDSecure]:\"sha384-VQUlpGHzsGvs5XeiGFip7EXRsvoHWEXDVmgCacfbyieZI9mdBOqq3NSoyo28OCOB\",[at.VisaCheckout]:\"sha384-yx7mADfzTN0T43Q6rlH49LIg1EJ0iUZgBp/EczX9LXsUGkySgxrD+nWHQRBkyfoT\",[at.Venmo]:\"sha384-QX4rPjoj1ZDhuG0aSyKs56lEKDqTMTcjYxUHY1SzO5VZDsqIE2NTkqot7KNSCyov\",[at.HostedFields]:\"sha384-VvYBACfSu0Cr/J32uKmxG7AXcNOJE1AzIIL3kbikyS7YKp5fz5Is+NzNP/lyauNy\",[at.Fastlane]:\"sha384-9oGsZMRZwpGtDEDYa/dFt76dECqj1xAni9gIKgc3KfMIiRnR73nEeeUDLiBzxhFa\"},[Ye]:{[at.Client]:\"sha384-o+nbQGcwNNxIBeXeu3+XmbSq+Cg8R3EN3N0l5hXCgMMU2RGY0t1z0LroSEIAbfAO\",[at.PaypalCheckout]:\"sha384-WrfbWPBS4mH86GAoycPSgiH8hQ8KH7A67C93Hjhunv/xhNk2YpBn3wbFA4Fhg9U/\",[at.Paypal]:\"sha384-VF389nvvrRUgDsTXMxTYORDtVegB9IQa3Cxr//DyJnLYnz8/X8VCzEvck2c+Megt\",[at.LocalPayment]:\"sha384-tZKx2rEQbfmZpoPSY5VPmJEhaq4X75dLvwHMs3VE9U+C8lPyw+hWTIL1+GPvWCIH\",[at.DataCollector]:\"sha384-E6k3wOpP7syCDDwaRDLF06942Y00NkbwJvWi2OQXwwKzGwG5fd3E7RFUvCCecfvO\",[at.UsBankAccount]:\"sha384-258FON8LZGG0W9Qaz4Jij83pZHu30YnKjJA7gNulLBh6CclkucgF+tHDQuYFRYfW\",[at.GooglePayment]:\"sha384-taJ2p/0+n0VH328POAoBiuEbL3tnHUTE9S42hK1V+Txs3X+QYjZOyKW35JgHRFfO\",[at.ThreeDSecure]:\"sha384-+NSZH4Zj3sO5bdWvPKhU5N16QDxeueTVTnUVeleeESkhLSaz4Ob1hh/5myecc9Ym\",[at.VisaCheckout]:\"sha384-66DiBjghxk1OmBj8aksN8gbQ+CwoQcx1vPfiXUN08g1iQVM+BwewF0p7toM3i7SS\",[at.Venmo]:\"sha384-B5UwY42kE4RoLoWbQ7YpqosUlUad2/DlGWiw0HhoZbSPk30CQAaSA10ohyLDTkDU\",[at.HostedFields]:\"sha384-Aw9EesSaUeWxe36PqEHiOyOyOq8M6CIb1gw7/yHNVPRzGtFXXcd2OQ8qXrIlOj2P\",[at.Fastlane]:\"sha384-rhBL1hpZ71JqG+2TsT0Dih47mbjx8cjJCpeZjk9tw3df1gFMKfCTmMyZunhr7H4Y\"},[Ke]:{[at.Client]:\"sha384-0WNxksIpRP+fYZiIdr12g6DBUQfLDzYCQJZtR/C8KkcwSGhPHfcFp3tTaGcMyFTq\",[at.PaypalCheckout]:\"sha384-lWM1jk4BOxoDNV6Kop7tVNvQgINlmEVz0c/OwM+HNHK3QC8xqwd54Ovrt2QRDTjh\",[at.Paypal]:\"sha384-fXUmVxC2EMZBDXZ7eTHSTL/LFBrHej/MSXT/vTBXvra4lzgLNGvREAp+x0GYObuH\",[at.LocalPayment]:\"sha384-pha1xGuGSkmZH5x9aqHvRaO4xLea7rmQ/79PFj9zxNzxuFcOWZg7gOP7FibygOEC\",[at.DataCollector]:\"sha384-Q6PI2F9eekWbAxhroybl+aEcvqhdowN/EQlGwBUyJOzPFn9982u9xl6SU6XfGKzc\",[at.UsBankAccount]:\"sha384-W3RLQSKJL1tQ3+Y7mP6tmkamtZ8bV4Yw/XxL9Jj5JtXHraD8loMF8hAIG5m2zK7F\",[at.GooglePayment]:\"sha384-TITQMsFWA3elDNGP2mWz2oKBo4qjt+TlqzovcaPoeBiAh/wPBi6nae50ADdgU1/i\",[at.ThreeDSecure]:\"sha384-YiycYN89ZlL/Evcaq4y1ajW1mhd7JYfZBDuOwHtIn4/Jnm20GL+/XCM+zYAwWD8D\",[at.VisaCheckout]:\"sha384-/OdaTv9qrkKzjObtUe6yzfDhHozFW/+uXlrSl736sOZRJpjGQETvpYXqMFFg69xv\",[at.Venmo]:\"sha384-dA+ojdW9vbJS4JavcXyOs9d5uZHJg5dNtYupoPSH2zsXIiYDVS5amLb/u8qmQ6oz\",[at.HostedFields]:\"sha384-31ZkS58+iaWsW06ftW52zzVZFp43WPd7pNYRiddYynSNg6Oh7WGbSFGorAUH6T1z\",[at.Fastlane]:\"sha384-jlbrwNvL3HvLAUCtLSmrnQ2GH1udCUrRS/bVmReAS5fuIVvcW8Pko/Gkg82tlgtr\"}};var ht=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class ut{constructor(e,t,n){this.scriptLoader=e,this.braintreeHostWindow=t,this.braintreeSDKVersionManager=n}loadClient(){return ht(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(at.Client,\"client.min.js\")})}loadFastlane(){return ht(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(at.Fastlane,\"fastlane.min.js\")})}loadPaypalCheckout(){return ht(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(at.PaypalCheckout,\"paypal-checkout.min.js\")})}loadPaypal(){return ht(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(at.Paypal,\"paypal.min.js\")})}loadLocalPayment(){return ht(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(at.LocalPayment,\"local-payment.min.js\")})}loadDataCollector(){return ht(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(at.DataCollector,\"data-collector.min.js\")})}loadUsBankAccount(){return ht(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(at.UsBankAccount,\"us-bank-account.min.js\")})}loadGooglePayment(){return ht(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(at.GooglePayment,\"google-payment.min.js\")})}load3DS(){return ht(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(at.ThreeDSecure,\"three-d-secure.min.js\")})}loadVisaCheckout(){return this.loadBraintreeModuleOrThrow(at.VisaCheckout,\"visa-checkout.min.js\")}loadVenmoCheckout(){return this.loadBraintreeModuleOrThrow(at.Venmo,\"venmo.min.js\")}loadHostedFields(){return ht(this,void 0,void 0,function*(){return this.loadBraintreeModuleOrThrow(at.HostedFields,\"hosted-fields.min.js\")})}loadVisaCheckoutSdk(e){return ht(this,void 0,void 0,function*(){if(this.braintreeHostWindow.V)return this.braintreeHostWindow.V;const t=e?\"sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm\":\"sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6\";return this.scriptLoader.loadScript(`//${e?\"sandbox-\":\"\"}assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,{async:!0,attributes:{integrity:t,crossorigin:\"anonymous\"}}).then(()=>{if(!this.braintreeHostWindow.V)throw new h;return this.braintreeHostWindow.V})})}loadBraintreeModuleOrThrow(e,t){return ht(this,void 0,void 0,function*(){let n=this.getBraintreeModule(e);if(n)return n;const i=this.braintreeSDKVersionManager.getSDKVersion(),o=`//js.braintreegateway.com/web/${i}/js/${t}`,r=i in lt?this.getIntegrityValuesByModuleName(e,i):void 0;if(yield this.scriptLoader.loadScript(o,r?{async:!0,attributes:{integrity:r,crossorigin:\"anonymous\"}}:void 0),n=this.getBraintreeModule(e),!n)throw new h;return n})}getBraintreeModule(e){var t;return null===(t=this.braintreeHostWindow.braintree)||void 0===t?void 0:t[e]}getIntegrityValuesByModuleName(e,t){const n=lt[t][e];if(!n)throw new Error(\"Unexpected fileName value\");return n}}class yt{constructor(e){const t=new Promise((e,t)=>{this.cancel=t});this.promise=Promise.race([e,t])}}var gt=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class pt extends F{constructor(e,t){super(\"braintree\",e),this._braintreeSdk=t,this._methodId=te.BRAINTREE,this._service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});return gt(this,void 0,void 0,function*(){yield i.initialize.call(this,e,t,n);let o=i.getPaymentMethod.call(this);if(o.clientToken||(o=(yield this._service.loadPaymentMethod(this._methodId)).getPaymentMethodOrThrow(this._methodId)),!o.clientToken||!o.initializationData)throw new _(u.MissingPaymentMethod);return this._braintreeSdk.initialize(o.clientToken),this._braintreeGooglePayment=yield this._braintreeSdk.getBraintreeGooglePayment(),Promise.resolve()})}getNonce(e){const t=Object.create(null,{getNonce:{get:()=>super.getNonce},getPaymentMethod:{get:()=>super.getPaymentMethod}});var n;return gt(this,void 0,void 0,function*(){const i=yield t.getNonce.call(this,e),{clientToken:o,initializationData:r}=t.getPaymentMethod.call(this);if(!o||!r||!(null===(n=r.card_information)||void 0===n?void 0:n.bin))throw new _(u.MissingPaymentMethod);const{isThreeDSecureEnabled:a,card_information:{bin:s,isNetworkTokenized:c}}=r;if(a&&!c){const e=yield this._braintreeSdk.getBraintreeThreeDS(),{orderAmount:t}=this._service.getState().getOrderOrThrow();return(yield this._braintreePresent3DSChallenge(e,t,i,s)).nonce}return i})}extraPaymentData(){return gt(this,void 0,void 0,function*(){return{deviceSessionId:yield this._getBraintreeDeviceData()}})}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return gt(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);let i;try{i=JSON.parse(n.nonce)}catch(e){throw new C(\"Unable to parse response from Google Pay.\")}return function(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"androidPayCards\"in e}(e))throw new _(u.MissingPaymentToken)}(i),n.nonce=i.androidPayCards[0].nonce,n.card_information.bin=i.androidPayCards[0].details.bin,n.card_information.isNetworkTokenized=i.androidPayCards[0].details.isNetworkTokenized,n})}getCardParameters(){return super.getCardParameters()}getPaymentGatewayParameters(){const e=Object.create(null,{getMerchantInfo:{get:()=>super.getMerchantInfo},getTransactionInfo:{get:()=>super.getTransactionInfo},getRequiredData:{get:()=>super.getRequiredData}});return gt(this,void 0,void 0,function*(){return this.getBraintreeGooglePayment().createPaymentDataRequest(Object.assign({merchantInfo:e.getMerchantInfo.call(this),transactionInfo:e.getTransactionInfo.call(this),cardRequirements:{billingAddressRequired:!0,billingAddressFormat:\"FULL\"}},yield e.getRequiredData.call(this))).paymentMethodTokenizationParameters.parameters})}getBraintreeGooglePayment(){if(!this._braintreeGooglePayment)throw new _(u.MissingPaymentMethod);return this._braintreeGooglePayment}_getBraintreeDeviceData(){return gt(this,void 0,void 0,function*(){const{deviceData:e}=yield this._braintreeSdk.getDataCollectorOrThrow();return e})}_braintreePresent3DSChallenge(e,t,n,i){return new yt(e.verifyCard({amount:t,bin:i,nonce:n,onLookupComplete:(e,t)=>{t()}})).promise}}const _t=g(i=>{const o=t(),r=window,a=new Je(i),s=new dt(new ut(n(),r,a));return new oe(i,new K(ae(),new pt(i,s),o,e()))},[{id:\"googlepaybraintree\"}]),mt=[\"ar_BH\",\"ar_DZ\",\"ar_EG\",\"ar_JO\",\"ar_KW\",\"ar_MA\",\"ar_OM\",\"ar_QA\",\"ar_SA\",\"ar_TN\",\"ar_YE\",\"ar_AE\",\"bg_BG\",\"cs_CZ\",\"da_DK\",\"da_FO\",\"da_GL\",\"de_AT\",\"de_CH\",\"de_DE\",\"de_LU\",\"el_GR\",\"en_AD\",\"en_AE\",\"en_AG\",\"en_AI\",\"en_AL\",\"en_AM\",\"en_AN\",\"en_AO\",\"en_AT\",\"en_AU\",\"en_AW\",\"en_AZ\",\"en_BB\",\"en_BE\",\"en_BH\",\"en_BJ\",\"en_BM\",\"en_BN\",\"en_BS\",\"en_BT\",\"en_BW\",\"en_BY\",\"en_BZ\",\"en_C2\",\"en_CA\",\"en_CD\",\"en_CG\",\"en_CH\",\"en_CI\",\"en_CK\",\"en_CL\",\"en_CM\",\"en_CN\",\"en_CO\",\"en_CR\",\"en_CV\",\"en_CY\",\"en_CZ\",\"en_DE\",\"en_DJ\",\"en_DK\",\"en_DM\",\"en_DO\",\"en_DZ\",\"en_EC\",\"en_EE\",\"en_EG\",\"en_ER\",\"en_ES\",\"en_ET\",\"en_FI\",\"en_FJ\",\"en_FK\",\"en_FM\",\"en_FO\",\"en_FR\",\"en_GA\",\"en_GB\",\"en_GD\",\"en_GE\",\"en_GF\",\"en_GI\",\"en_GL\",\"en_GM\",\"en_GN\",\"en_GP\",\"en_GR\",\"en_GT\",\"en_GW\",\"en_GY\",\"en_HK\",\"en_HN\",\"en_HR\",\"en_HU\",\"en_ID\",\"en_IE\",\"en_IL\",\"en_IN\",\"en_IS\",\"en_IT\",\"en_JM\",\"en_JO\",\"en_JP\",\"en_KE\",\"en_KG\",\"en_KH\",\"en_KI\",\"en_KM\",\"en_KN\",\"en_KR\",\"en_KW\",\"en_KY\",\"en_KZ\",\"en_LA\",\"en_LC\",\"en_LI\",\"en_LK\",\"en_LS\",\"en_LT\",\"en_LU\",\"en_LV\",\"en_MA\",\"en_MC\",\"en_MD\",\"en_ME\",\"en_MG\",\"en_MH\",\"en_MK\",\"en_ML\",\"en_MN\",\"en_MQ\",\"en_MR\",\"en_MS\",\"en_MT\",\"en_MU\",\"en_MV\",\"en_MW\",\"en_MY\",\"en_MZ\",\"en_NA\",\"en_NC\",\"en_NE\",\"en_NF\",\"en_NG\",\"en_NI\",\"en_NL\",\"en_NO\",\"en_NP\",\"en_NR\",\"en_NU\",\"en_NZ\",\"en_OM\",\"en_PA\",\"en_PE\",\"en_PF\",\"en_PG\",\"en_PH\",\"en_PL\",\"en_PM\",\"en_PN\",\"en_PT\",\"en_PW\",\"en_PY\",\"en_QA\",\"en_RE\",\"en_RO\",\"en_RS\",\"en_RU\",\"en_RW\",\"en_SA\",\"en_SB\",\"en_SC\",\"en_SE\",\"en_SG\",\"en_SH\",\"en_SI\",\"en_SJ\",\"en_SK\",\"en_SL\",\"en_SM\",\"en_SN\",\"en_SO\",\"en_SR\",\"en_ST\",\"en_SV\",\"en_SZ\",\"en_TC\",\"en_TD\",\"en_TG\",\"en_TH\",\"en_TJ\",\"en_TM\",\"en_TN\",\"en_TO\",\"en_TR\",\"en_TT\",\"en_TV\",\"en_TW\",\"en_TZ\",\"en_UA\",\"en_UG\",\"en_US\",\"en_UY\",\"en_VA\",\"en_VC\",\"en_VE\",\"en_VG\",\"en_VN\",\"en_VU\",\"en_WF\",\"en_WS\",\"en_YE\",\"en_YT\",\"en_ZA\",\"en_ZM\",\"en_ZW\",\"es_AD\",\"es_AI\",\"es_AO\",\"es_AR\",\"es_AW\",\"es_BB\",\"es_BJ\",\"es_BM\",\"es_BO\",\"es_BS\",\"es_BZ\",\"es_CD\",\"es_CG\",\"es_CK\",\"es_CL\",\"es_CO\",\"es_CR\",\"es_CV\",\"es_DJ\",\"es_DM\",\"es_DO\",\"es_DZ\",\"es_EC\",\"es_EG\",\"es_ER\",\"es_ES\",\"es_ET\",\"es_FJ\",\"es_FK\",\"es_FO\",\"es_GA\",\"es_GD\",\"es_GE\",\"es_GI\",\"es_GL\",\"es_GM\",\"es_GN\",\"es_GT\",\"es_GW\",\"es_GY\",\"es_HN\",\"es_IE\",\"es_JM\",\"es_JO\",\"es_KE\",\"es_KG\",\"es_KI\",\"es_KM\",\"es_KN\",\"es_KW\",\"es_KY\",\"es_KZ\",\"es_LC\",\"es_LI\",\"es_LS\",\"es_LU\",\"es_MA\",\"es_MG\",\"es_MH\",\"es_ML\",\"es_MR\",\"es_MS\",\"es_MU\",\"es_MW\",\"es_MX\",\"es_MZ\",\"es_NA\",\"es_NC\",\"es_NE\",\"es_NF\",\"es_NI\",\"es_NR\",\"es_NU\",\"es_NZ\",\"es_OM\",\"es_PA\",\"es_PE\",\"es_PF\",\"es_PG\",\"es_PM\",\"es_PN\",\"es_PW\",\"es_PY\",\"es_QA\",\"es_RS\",\"es_RW\",\"es_SA\",\"es_SB\",\"es_SC\",\"es_SH\",\"es_SJ\",\"es_SL\",\"es_SM\",\"es_SN\",\"es_SO\",\"es_SR\",\"es_ST\",\"es_SV\",\"es_SZ\",\"es_TC\",\"es_TD\",\"es_TG\",\"es_TJ\",\"es_TM\",\"es_TN\",\"es_TT\",\"es_TV\",\"es_UA\",\"es_UG\",\"es_US\",\"es_UY\",\"es_VA\",\"es_VC\",\"es_VE\",\"es_VG\",\"es_VU\",\"es_WF\",\"es_YE\",\"es_ZM\",\"et_EE\",\"fi_FI\",\"fr_AD\",\"fr_AE\",\"fr_AI\",\"fr_AM\",\"fr_AO\",\"fr_AW\",\"fr_AZ\",\"fr_BB\",\"fr_BE\",\"fr_BF\",\"fr_BI\",\"fr_BJ\",\"fr_BM\",\"fr_BS\",\"fr_BZ\",\"fr_CA\",\"fr_CD\",\"fr_CG\",\"fr_CH\",\"fr_CI\",\"fr_CK\",\"fr_CM\",\"fr_CV\",\"fr_DJ\",\"fr_DM\",\"fr_DO\",\"fr_DZ\",\"fr_EC\",\"fr_ER\",\"fr_ET\",\"fr_FJ\",\"fr_FK\",\"fr_FO\",\"fr_FR\",\"fr_GA\",\"fr_GD\",\"fr_GE\",\"fr_GF\",\"fr_GI\",\"fr_GL\",\"fr_GM\",\"fr_GN\",\"fr_GP\",\"fr_GT\",\"fr_GW\",\"fr_GY\",\"fr_HN\",\"fr_IE\",\"fr_JM\",\"fr_JO\",\"fr_KE\",\"fr_KG\",\"fr_KI\",\"fr_KM\",\"fr_KN\",\"fr_KW\",\"fr_KY\",\"fr_KZ\",\"fr_LC\",\"fr_LI\",\"fr_LS\",\"fr_LU\",\"fr_MA\",\"fr_MC\",\"fr_MG\",\"fr_MH\",\"fr_ML\",\"fr_MQ\",\"fr_MR\",\"fr_MS\",\"fr_MU\",\"fr_MW\",\"fr_MZ\",\"fr_NA\",\"fr_NC\",\"fr_NE\",\"fr_NF\",\"fr_NI\",\"fr_NR\",\"fr_NU\",\"fr_NZ\",\"fr_OM\",\"fr_PA\",\"fr_PE\",\"fr_PF\",\"fr_PG\",\"fr_PM\",\"fr_PN\",\"fr_PW\",\"fr_QA\",\"fr_RE\",\"fr_RS\",\"fr_RW\",\"fr_SA\",\"fr_SB\",\"fr_SC\",\"fr_SH\",\"fr_SJ\",\"fr_SL\",\"fr_SM\",\"fr_SN\",\"fr_SO\",\"fr_SR\",\"fr_ST\",\"fr_SV\",\"fr_SZ\",\"fr_TC\",\"fr_TD\",\"fr_TG\",\"fr_TJ\",\"fr_TM\",\"fr_TN\",\"fr_TT\",\"fr_TV\",\"fr_UA\",\"fr_UG\",\"fr_US\",\"fr_UY\",\"fr_VA\",\"fr_VC\",\"fr_VE\",\"fr_VG\",\"fr_VU\",\"fr_WF\",\"fr_YE\",\"fr_YT\",\"fr_ZA\",\"fr_ZM\",\"he_IL\",\"hu_HU\",\"id_ID\",\"it_IT\",\"ja_JP\",\"ko_KR\",\"lv_LV\",\"lt_LT\",\"ms_BN\",\"ms_MY\",\"nl_BE\",\"nl_NL\",\"pl_PL\",\"pt_BR\",\"pt_PT\",\"ro_RO\",\"ru_EE\",\"ru_LT\",\"ru_LV\",\"ru_RU\",\"ru_UA\",\"si_LK\",\"sk_SK\",\"sl_SI\",\"sq_AL\",\"sv_SE\",\"tl_PH\",\"th_TH\",\"tr_TR\",\"vi_VN\",\"zh_C2\",\"zh_CN\",\"zh_HK\",\"zh_TW\",\"zh_AD\",\"zh_AE\",\"zh_AI\",\"zh_AO\",\"zh_AW\",\"zh_BB\",\"zh_BH\",\"zh_BJ\",\"zh_BM\",\"zh_BS\",\"zh_BZ\",\"zh_CD\",\"zh_CG\",\"zh_CK\",\"zh_CL\",\"zh_CO\",\"zh_CV\",\"zh_DJ\",\"zh_DM\",\"zh_DO\",\"zh_DZ\",\"zh_EC\",\"zh_EG\",\"zh_ER\",\"zh_ET\",\"zh_FJ\",\"zh_FK\",\"zh_FO\",\"zh_GA\",\"zh_GD\",\"zh_GE\",\"zh_GI\",\"zh_GL\",\"zh_GM\",\"zh_GN\",\"zh_GT\",\"zh_GW\",\"zh_GY\",\"zh_HN\",\"zh_IE\",\"zh_JM\",\"zh_JO\",\"zh_KE\",\"zh_KG\",\"zh_KI\",\"zh_KM\",\"zh_KN\",\"zh_KW\",\"zh_KY\",\"zh_KZ\",\"zh_LC\",\"zh_LI\",\"zh_LS\",\"zh_LT\",\"zh_LU\",\"zh_MA\",\"zh_MG\",\"zh_MH\",\"zh_ML\",\"zh_MR\",\"zh_MS\",\"zh_MU\",\"zh_MW\",\"zh_MZ\",\"zh_NA\",\"zh_NC\",\"zh_NE\",\"zh_NF\",\"zh_NI\",\"zh_NR\",\"zh_NU\",\"zh_NZ\",\"zh_OM\",\"zh_PA\",\"zh_PE\",\"zh_PF\",\"zh_PG\",\"zh_PM\",\"zh_PN\",\"zh_PW\",\"zh_QA\",\"zh_RS\",\"zh_RW\",\"zh_SA\",\"zh_SB\",\"zh_SC\",\"zh_SH\",\"zh_SJ\",\"zh_SL\",\"zh_SM\",\"zh_SN\",\"zh_SO\",\"zh_SR\",\"zh_ST\",\"zh_SV\",\"zh_SZ\",\"zh_TC\",\"zh_TD\",\"zh_TG\",\"zh_TJ\",\"zh_TM\",\"zh_TN\",\"zh_TT\",\"zh_TV\",\"zh_UA\",\"zh_UG\",\"zh_US\",\"zh_UY\",\"zh_VA\",\"zh_VC\",\"zh_VE\",\"zh_VG\",\"zh_VU\",\"zh_WF\",\"zh_YE\",\"zh_ZA\",\"zh_ZM\"];function ft(e){if(!e)return;let t;if(e.includes(\"-\")){const[n,i]=e.split(\"-\");t=`${n}_${i.toUpperCase()}`}else t=`${e}_${e.toUpperCase()}`;return mt.includes(t)?t:void 0}var Pt=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class wt{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n,i){return Pt(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const o=this.getPayPalFastlaneSdkConfiguration(e,t,n,i);if(yield this.loadPayPalSdk(o),!this.window.paypalFastlaneSdk)throw new h}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i,o){return Pt(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||o){const o=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i);yield this.loadPayPalSdk(o)}if(!this.window.paypalGooglePay)throw new h;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return Pt(this,void 0,void 0,function*(){if(!this.window.paypalApms){const i=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.paypalApms)throw new h}return this.window.paypalApms})}getPayPalMessages(e,t,n){return Pt(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const i=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.paypalMessages)throw new h;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return Pt(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),o=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(o,{async:!0,attributes:i})})}getPayPalFastlaneSdkConfiguration(e,t,n,i){const{clientToken:o,initializationData:r}=e;if(!r||!r.clientId)throw new _(u.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:c,attributionId:d}=r,l=ft(i);return{options:Object.assign({\"client-id\":s,\"merchant-id\":c,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t,intent:a},l&&{locale:l}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":d,\"data-sdk-client-token\":o}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i=!0){const{clientToken:o,initializationData:r}=e;if(!r||!r.clientId)throw new _(u.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:c,buyerCountry:d,attributionId:l,isHostedCheckoutEnabled:h,isDeveloperModeApplicable:y}=r,g=h||i,p=ft(n);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":c,commit:g,components:[\"googlepay\"],currency:t,intent:a},y&&{\"buyer-country\":d}),p&&{locale:p}),attributes:{\"data-partner-attribution-id\":l,\"data-client-token\":o,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new _(u.MissingPaymentMethod);const{intent:o,clientId:r,merchantId:a,buyerCountry:s,attributionId:c,isDeveloperModeApplicable:d,availableAlternativePaymentMethods:l=[],enabledAlternativePaymentMethods:h=[]}=i,y=h,g=l.filter(e=>!h.includes(e)),p=ft(n);return{options:Object.assign(Object.assign({\"client-id\":r,\"merchant-id\":a,\"enable-funding\":y.length>0?y:void 0,\"disable-funding\":g.length>0?g:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:o},d&&{\"buyer-country\":s}),p&&{locale:p}),attributes:{\"data-partner-attribution-id\":c,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new _(u.MissingPaymentMethod);const{clientId:o,merchantId:r,attributionId:a,isDeveloperModeApplicable:s,buyerCountry:c}=i,d=ft(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":r,components:[\"messages\"],currency:t},s&&{\"buyer-country\":c}),d&&{locale:d}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":a}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}function vt(e){if(!function(e){return!!e.initializationData&&\"attributionId\"in e.initializationData&&\"isVenmoEnabled\"in e.initializationData&&\"isGooglePayEnabled\"in e.initializationData&&\"isPayPalCreditAvailable\"in e.initializationData}(e))throw new _(u.MissingPaymentMethod)}var Ct=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class St extends F{constructor(e,t){super(\"paypalsb\",e),this.payPalCommerceSdk=t,this.service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});var o,r,a,s,c;return Ct(this,void 0,void 0,function*(){const d=this.service.getState(),l=null!==(r=null===(o=d.getStoreConfig())||void 0===o?void 0:o.currency.code)&&void 0!==r?r:n;if(!l)throw new _(u.MissingPaymentMethod);yield i.initialize.call(this,e,t,l);const h=i.getPaymentMethod.call(this);if(!h.initializationData)throw new _(u.MissingPaymentMethod);vt(h);const y=yield this.payPalCommerceSdk.getPayPalGooglePaySdk(h,l,d.getLocale());this.googlepayConfig=yield y.Googlepay().config();const{allowedPaymentMethods:g}=this.googlepayConfig;this.setGatewayIdentifier(null===(c=null===(s=null===(a=g[0])||void 0===a?void 0:a.tokenizationSpecification)||void 0===s?void 0:s.parameters)||void 0===c?void 0:c.gateway)})}getPaymentGatewayParameters(){if(this.googlepayConfig){const{allowedPaymentMethods:e}=this.googlepayConfig,{gatewayMerchantId:t}=e[0].tokenizationSpecification.parameters;return{gateway:this.getGatewayIdentifier(),gatewayMerchantId:t}}return{gateway:this.getGatewayIdentifier()}}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return Ct(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n})}}const bt=\"This API endpoint is for internal use only and may change in the future\";var It,Ot;!function(e){e.Approved=\"APPROVED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\"}(It||(It={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Ot||(Ot={}));var At=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Tt extends oe{constructor(e,t,n,i){super(e,t),this._payPalCommerceSdk=n,this._requestSender=i}execute({payment:e}){return At(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new Y([\"payment\"]);const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow().id,{initializationData:i}=t.getPaymentMethodOrThrow(this._getMethodId()),{orderId:o}=yield this.getOrderId(n),{card_information:r}=i||{},a=yield this._googlePayPaymentProcessor.getNonce(e.methodId),s={tokenizationData:{type:\"PAYMENT_GATEWAY\",token:atob(a)},info:{cardNetwork:(null==r?void 0:r.type)||\"\",cardDetails:(null==r?void 0:r.number)||\"\"},type:\"CARD\"};yield this.confirmOrder(o,s),yield this._paymentIntegrationService.submitOrder();try{const t={formattedPayload:{method_id:e.methodId,paypal_account:{order_id:o}}};yield this._paymentIntegrationService.submitPayment({methodId:e.methodId,paymentData:t})}catch(e){yield this._googlePayPaymentProcessor.processAdditionalAction(e)}})}confirmOrder(e,t){return At(this,void 0,void 0,function*(){const n=this._paymentIntegrationService.getState(),i=n.getPaymentMethodOrThrow(this._getMethodId());if(!i.initializationData)throw new _(u.MissingPaymentMethod);const o=n.getCartOrThrow().currency.code,r=yield this._payPalCommerceSdk.getPayPalGooglePaySdk(i,o,n.getLocale(),!0),{status:a}=yield r.Googlepay().confirmOrder({orderId:e,paymentMethodData:t});if(a===It.PayerActionRequired)return yield r.Googlepay().initiatePayerAction({orderId:e}),Promise.resolve();if(a!==It.Approved)throw new C(\"Payment is not approved.\");return Promise.resolve()})}getOrderId(e){return At(this,void 0,void 0,function*(){const t={cartId:e,shouldSaveInstrument:!1},{body:n}=yield this._requestSender.post(\"/api/storefront/payments/googlepaypaypalcommercecheckout\",{headers:Object.assign({\"X-API-INTERNAL\":bt,\"Content-Type\":pe.Json},W),body:t});return n})}}const Mt=g(i=>{const o=new wt(n());return new Tt(i,new K(ae(),new St(i,o),t(),e()),o,t())},[{id:\"googlepaypaypalcommerce\"}]);var Et=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class kt{constructor(e){this.scriptLoader=e,this.window=window}getPayPalFastlaneSdk(e,t,n){return Et(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsFastlaneSdk){const i=this.getPayPalFastlaneSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.bigCommercePaymentsFastlaneSdk)throw new h}return this.window.bigCommercePaymentsFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i){return Et(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsGooglePay||i){const i=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.bigCommercePaymentsGooglePay)throw new h;return this.window.bigCommercePaymentsGooglePay})}getPayPalApmsSdk(e,t){return Et(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsApms){const n=this.getPayPalApmSdkConfiguration(e,t);if(yield this.loadPayPalSdk(n),!this.window.bigCommercePaymentsApms)throw new h}return this.window.bigCommercePaymentsApms})}getPayPalMessages(e,t){return Et(this,void 0,void 0,function*(){if(!this.window.bigCommercePaymentsMessages){const n=this.getPayPalSdkMessagesConfiguration(e,t);yield this.loadPayPalSdk(n)}if(!this.window.bigCommercePaymentsMessages)throw new h;return this.window.bigCommercePaymentsMessages})}loadPayPalSdk({options:e,attributes:t}){return Et(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),o=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(o,{async:!0,attributes:i})})}getPayPalFastlaneSdkConfiguration(e,t,n){const{clientToken:i,initializationData:o}=e;if(!o||!o.clientId)throw new _(u.MissingPaymentMethod);const{intent:r,clientId:a,merchantId:s,attributionId:c}=o;return{options:{\"client-id\":a,\"merchant-id\":s,commit:!0,components:[\"fastlane\",\"three-domain-secure\"],currency:t,intent:r},attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"bigCommercePaymentsFastlaneSdk\",\"data-partner-attribution-id\":c,\"data-sdk-client-token\":i}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n=!0){const{clientToken:i,initializationData:o}=e;if(!o||!o.clientId)throw new _(u.MissingPaymentMethod);const{intent:r,clientId:a,merchantId:s,buyerCountry:c,attributionId:d,isHostedCheckoutEnabled:l,isDeveloperModeApplicable:h}=o,y=l||n;return{options:Object.assign({\"client-id\":a,\"merchant-id\":s,commit:y,components:[\"googlepay\"],currency:t,intent:r},h&&{\"buyer-country\":c}),attributes:{\"data-partner-attribution-id\":d,\"data-client-token\":i,\"data-namespace\":\"bigCommercePaymentsGooglePay\"}}}getPayPalApmSdkConfiguration(e,t){const{initializationData:n}=e;if(!n||!n.clientId)throw new _(u.MissingPaymentMethod);const{intent:i,clientId:o,merchantId:r,buyerCountry:a,attributionId:s,isDeveloperModeApplicable:c,availableAlternativePaymentMethods:d=[],enabledAlternativePaymentMethods:l=[]}=n,h=this.filterFundingOptions(l),y=this.filterFundingOptions(d.filter(e=>!l.includes(e)));return{options:Object.assign({\"client-id\":o,\"merchant-id\":r,\"enable-funding\":h.length>0?h:void 0,\"disable-funding\":y.length>0?y:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:i},c&&{\"buyer-country\":a}),attributes:{\"data-partner-attribution-id\":s,\"data-namespace\":\"bigCommercePaymentsApms\"}}}getPayPalSdkMessagesConfiguration(e,t){const{initializationData:n}=e;if(!n||!n.clientId)throw new _(u.MissingPaymentMethod);const{clientId:i,merchantId:o,attributionId:r,isDeveloperModeApplicable:a,buyerCountry:s}=n;return{options:Object.assign({\"client-id\":i,\"merchant-id\":o,components:[\"messages\"],currency:t},a&&{\"buyer-country\":s}),attributes:{\"data-namespace\":\"bigCommercePaymentsMessages\",\"data-partner-attribution-id\":r}}}filterFundingOptions(e){const t=[\"klarna\",\"afterpay\"];return e?e.filter(e=>!t.includes(e)):[]}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}var Nt,Dt,zt=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Gt extends F{constructor(e,t){super(\"googlepay_bigcommerce_payments\",e),this.payPalSdkHelper=t,this.service=e}initialize(e,t,n){const i=Object.create(null,{initialize:{get:()=>super.initialize},getPaymentMethod:{get:()=>super.getPaymentMethod}});var o,r,a,s,c;return zt(this,void 0,void 0,function*(){const d=null!==(r=null===(o=this.service.getState().getStoreConfig())||void 0===o?void 0:o.currency.code)&&void 0!==r?r:n;if(!d)throw new _(u.MissingPaymentMethod);yield i.initialize.call(this,e,t,d);const l=i.getPaymentMethod.call(this);if(!l.initializationData)throw new _(u.MissingPaymentMethod);vt(l);const h=yield this.payPalSdkHelper.getPayPalGooglePaySdk(l,d);this.googlepayConfig=yield h.Googlepay().config();const{allowedPaymentMethods:y}=this.googlepayConfig;this.setGatewayIdentifier(null===(c=null===(s=null===(a=y[0])||void 0===a?void 0:a.tokenizationSpecification)||void 0===s?void 0:s.parameters)||void 0===c?void 0:c.gateway)})}getPaymentGatewayParameters(){if(this.googlepayConfig){const{allowedPaymentMethods:e}=this.googlepayConfig,{gatewayMerchantId:t}=e[0].tokenizationSpecification.parameters;return{gateway:this.getGatewayIdentifier(),gatewayMerchantId:t}}return{gateway:this.getGatewayIdentifier()}}mapToExternalCheckoutData(e){const t=Object.create(null,{mapToExternalCheckoutData:{get:()=>super.mapToExternalCheckoutData}});return zt(this,void 0,void 0,function*(){const n=yield t.mapToExternalCheckoutData.call(this,e);return n.nonce=btoa(n.nonce),n})}}!function(e){e.Approved=\"APPROVED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\"}(Nt||(Nt={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(Dt||(Dt={}));var Rt=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Bt extends oe{constructor(e,t,n,i){super(e,t),this._payPalSdkHelper=n,this._requestSender=i}execute({payment:e}){return Rt(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId))throw new Y([\"payment\"]);const t=this._paymentIntegrationService.getState(),n=t.getCartOrThrow().id,{initializationData:i}=t.getPaymentMethodOrThrow(this._getMethodId()),{orderId:o}=yield this.getOrderId(n),{card_information:r}=i||{},a=yield this._googlePayPaymentProcessor.getNonce(e.methodId),s={tokenizationData:{type:\"PAYMENT_GATEWAY\",token:atob(a)},info:{cardNetwork:(null==r?void 0:r.type)||\"\",cardDetails:(null==r?void 0:r.number)||\"\"},type:\"CARD\"};yield this.confirmOrder(o,s),yield this._paymentIntegrationService.submitOrder();try{const t={formattedPayload:{method_id:e.methodId,paypal_account:{order_id:o}}};yield this._paymentIntegrationService.submitPayment({methodId:e.methodId,paymentData:t})}catch(e){yield this._googlePayPaymentProcessor.processAdditionalAction(e)}})}confirmOrder(e,t){return Rt(this,void 0,void 0,function*(){const n=this._paymentIntegrationService.getState(),i=n.getPaymentMethodOrThrow(this._getMethodId());if(!i.initializationData)throw new _(u.MissingPaymentMethod);const o=n.getCartOrThrow().currency.code,r=yield this._payPalSdkHelper.getPayPalGooglePaySdk(i,o,!0),{status:a}=yield r.Googlepay().confirmOrder({orderId:e,paymentMethodData:t});if(a===Nt.PayerActionRequired)return yield r.Googlepay().initiatePayerAction({orderId:e}),Promise.resolve();if(a!==Nt.Approved)throw new C(\"Payment is not approved.\");return Promise.resolve()})}getOrderId(e){return Rt(this,void 0,void 0,function*(){const t={cartId:e,shouldSaveInstrument:!1},{body:n}=yield this._requestSender.post(\"/api/storefront/payments/googlepay_bigcommerce_paymentscheckout\",{headers:Object.assign({\"X-API-INTERNAL\":bt,\"Content-Type\":pe.Json},W),body:t});return n})}}const Lt=g(i=>{const o=new kt(n());return new Bt(i,new K(ae(),new Gt(i,o),t(),e()),o,t())},[{id:\"googlepay_bigcommerce_payments\"}]);var xt=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class jt extends F{constructor(e,t){super(\"worldlinena\",e),this.formPoster=t}extraPaymentData(){return xt(this,void 0,void 0,function*(){return Promise.resolve({browser_info:m()})})}processAdditionalAction(e){return xt(this,void 0,void 0,function*(){if(!function(e){return f(e)&&(t=e.body,s(t)&&\"object\"==typeof t&&\"errors\"in t&&\"three_ds_result\"in t&&a(t.errors)&&d(t.errors,{code:\"three_d_secure_required\"}));var t}(e))throw e;const{three_ds_result:t}=e.body,{acs_url:n,payer_auth_request:i,merchant_data:o}=t||{};if(!n||!i||!o)throw new Y([\"formUrl\",\"threeDSSessionData\",\"creq\"]);return new Promise(e=>{this.formPoster.postForm(n,{threeDSSessionData:i,creq:o},e,\"_top\")})})}}const Ft=g(n=>new oe(n,new K(ae(),new jt(n,e()),t(),e())),[{id:\"googlepaytdonlinemart\"}]);class Ut extends l{constructor(e){super(e||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var Vt=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class Wt{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t}initialize(e){var t,n;return Vt(this,void 0,void 0,function*(){if(!(null==e?void 0:e.methodId)||!ne(e.methodId))throw new C('Unable to proceed because \"methodId\" is not a valid key.');this._methodId=e.methodId;const i=e[this._getMethodId()];if(!i)throw new C(\"Unable to proceed without valid options.\");let o,r=this._paymentIntegrationService.getState();try{o=r.getPaymentMethodOrThrow(this._getMethodId())}catch(e){r=yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodId()),o=r.getPaymentMethodOrThrow(this._getMethodId())}try{this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(t=o.initializationData)||void 0===t?void 0:t.isWebViewExperimentOn)),yield this._googlePayPaymentProcessor.initialize(()=>o,this._getGooglePayClientOptions(null===(n=o.initializationData)||void 0===n?void 0:n.storeCountry))}catch(e){return}this._addPaymentButton(i)})}signIn(){return Promise.reject(new Ut('In order to sign in via Google Pay, the shopper must click on \"Google Pay\" button.'))}signOut(){var e;return Vt(this,void 0,void 0,function*(){const t=null===(e=this._paymentIntegrationService.getState().getPaymentId())||void 0===e?void 0:e.providerId;t&&(yield this._googlePayPaymentProcessor.signOut(t))})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}deinitialize(){var e;return null===(e=this._paymentButton)||void 0===e||e.remove(),this._paymentButton=void 0,this._methodId=void 0,Promise.resolve()}_getGooglePayClientOptions(e){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:t,shippingAddress:n,shippingOptionData:i,offerData:o})=>Vt(this,void 0,void 0,function*(){const{availableTriggers:r,addressChangeTriggers:a,shippingOptionsChangeTriggers:s,offerChangeTriggers:c}=this._googlePayPaymentProcessor.getCallbackTriggers();if(!r.includes(t))return;const d=a.includes(t)?yield this._googlePayPaymentProcessor.handleShippingAddressChange(n):void 0;s.includes(t)&&(yield this._googlePayPaymentProcessor.handleShippingOptionChange(i.id));const{newOfferInfo:l,error:h}=c.includes(t)?yield this._googlePayPaymentProcessor.handleCoupons(o):{},u=h;yield this._paymentIntegrationService.loadCheckout();const y=this._googlePayPaymentProcessor.getTotalPrice(),{code:g}=this._paymentIntegrationService.getState().getCartOrThrow().currency;return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},e&&{countryCode:e}),{currencyCode:g,totalPriceStatus:z.FINAL,totalPrice:y})},d&&{newShippingOptionParameters:d}),l&&{newOfferInfo:l}),u&&{error:u})})}}}_addPaymentButton({container:e,buttonColor:t,buttonType:n,onClick:i,onError:o}){var r;this._paymentButton=null!==(r=this._paymentButton)&&void 0!==r?r:this._googlePayPaymentProcessor.addPaymentButton(e,{buttonColor:null!=t?t:\"default\",buttonType:null!=n?n:\"plain\",onClick:this._handleClick(o,i)})}_handleClick(e,t){return n=>Vt(this,void 0,void 0,function*(){n.preventDefault(),t&&\"function\"==typeof t&&t();try{yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheet()}catch(t){let n=t;if(ee(t)){if(\"CANCELED\"===t.statusCode)throw new P;n=new H(JSON.stringify(t))}throw null==e||e(new H(\"An error occurred while requesting your Google Pay payment details.\")),n}})}_interactWithPaymentSheet(){return Vt(this,void 0,void 0,function*(){const e=yield this._googlePayPaymentProcessor.showPaymentSheet(),t=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(e),n=this._googlePayPaymentProcessor.mapToShippingAddressRequestBody(e),i=\"/embedded-checkout\"===window.location.pathname?this._paymentIntegrationService.getState().getStoreConfigOrThrow().links.siteLink:void 0;t&&(yield this._paymentIntegrationService.updateBillingAddress(t)),n&&(yield this._paymentIntegrationService.updateShippingAddress(n)),yield this._googlePayPaymentProcessor.setExternalCheckoutForm(this._getMethodId(),e,i)})}_getMethodId(){return A(this._methodId,()=>new v(w.PaymentNotInitialized))}}const Ht=g(n=>{const i=t();return new Wt(n,new K(ae(),new F(\"adyen\",n),i,e()))},[{id:\"googlepayadyenv2\"}]),qt=g(n=>{const i=t();return new Wt(n,new K(ae(),new F(\"adyen\",n),i,e()))},[{id:\"googlepayadyenv3\"}]),Kt=g(n=>new Wt(n,new K(ae(),new ue(n),t(),e())),[{id:\"googlepayauthorizenet\"}]),Yt=g(n=>{const i=t();return new Wt(n,new K(ae(),new fe(n,i),i,e()))},[{id:\"googlepaycheckoutcom\"}]),Zt=g(n=>new Wt(n,new K(ae(),new we(n),t(),e())),[{id:\"googlepaycybersourcev2\"}]),Jt=g(n=>new Wt(n,new K(ae(),new we(n),t(),e())),[{id:\"googlepaybnz\"}]),Qt=g(n=>new Wt(n,new K(ae(),new Ce(n),t(),e())),[{id:\"googlepayorbital\"}]),Xt=g(i=>new Wt(i,new K(ae(),new Ve(i,new Be(n())),t(),e())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeocs\"}]),$t=g(i=>new Wt(i,new K(ae(),new Ve(i,new Be(n())),t(),e())),[{id:\"googlepaystripeupe\"}]),en=g(n=>new Wt(n,new K(ae(),new He(n),t(),e())),[{id:\"googlepayworldpayaccess\"}]),tn=g(i=>{const o=t(),r=window,a=new Je(i),s=new dt(new ut(n(),r,a));return new Wt(i,new K(ae(),new pt(i,s),o,e()))},[{id:\"googlepaybraintree\"}]),nn=g(i=>new Wt(i,new K(ae(),new St(i,new wt(n())),t(),e())),[{id:\"googlepaypaypalcommerce\"}]),on=g(i=>new Wt(i,new K(ae(),new Gt(i,new kt(n())),t(),e())),[{id:\"googlepay_bigcommerce_payments\"}]),rn=g(n=>new Wt(n,new K(ae(),new jt(n,e()),t(),e())),[{id:\"googlepaytdonlinemart\"}]);class an extends l{constructor(e){super(e||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}var sn=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{c(i.next(e))}catch(e){r(e)}}function s(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}c((i=i.apply(e,t||[])).next())})};class cn{constructor(e,t){this._paymentIntegrationService=e,this._googlePayPaymentProcessor=t}initialize(e){var t,n,i;return sn(this,void 0,void 0,function*(){if(!e.methodId||!ne(e.methodId))throw new C('Unable to proceed because \"methodId\" is not a valid key.');if(this._methodId=e.methodId,!e.containerId)throw new C('Unable to proceed because \"containerId\" is not a valid key.');const o=e[this._getMethodOrThrow()];if(!o)throw new C(\"Unable to proceed without valid options.\");const{buyNowInitializeOptions:r,currencyCode:a,buttonColor:s,buttonType:c,onError:d}=o;let l,h=this._paymentIntegrationService.getState();try{l=h.getPaymentMethodOrThrow(this._getMethodOrThrow())}catch(e){h=yield this._paymentIntegrationService.loadPaymentMethod(this._getMethodOrThrow()),l=h.getPaymentMethodOrThrow(this._getMethodOrThrow())}if(this._countryCode=null===(t=l.initializationData)||void 0===t?void 0:t.storeCountry,this._googlePayPaymentProcessor.setIsWebViewExperimentOn(!!(null===(n=l.initializationData)||void 0===n?void 0:n.isWebViewExperimentOn)),r){if(!a)throw new C('Unable to initialize payment because \"options.currencyCode\" argument is not provided.');this._currencyCode=a,this._buyNowInitializeOptions=r,yield this._googlePayPaymentProcessor.initialize(()=>l,this._getGooglePayClientOptions(),!!r,a)}else yield this._paymentIntegrationService.loadDefaultCheckout(),yield this._googlePayPaymentProcessor.initialize(()=>l,this._getGooglePayClientOptions());this._paymentButton=null!==(i=this._paymentButton)&&void 0!==i?i:this._googlePayPaymentProcessor.addPaymentButton(e.containerId,{buttonColor:null!=s?s:\"default\",buttonType:null!=c?c:\"plain\",onClick:this._handleClick(d)})})}deinitialize(){var e;return null===(e=this._paymentButton)||void 0===e||e.remove(),this._paymentButton=void 0,this._methodId=void 0,Promise.resolve()}_handleClick(e){return t=>sn(this,void 0,void 0,function*(){t.preventDefault();try{this._buyNowInitializeOptions?yield this._createBuyNowCartOrThrow(this._buyNowInitializeOptions):yield this._paymentIntegrationService.loadDefaultCheckout(),yield this._googlePayPaymentProcessor.initializeWidget(),yield this._interactWithPaymentSheet()}catch(t){let n=t;if(ee(t)){if(\"CANCELED\"===t.statusCode)throw new P;n=new H(JSON.stringify(t))}throw null==e||e(new H(\"An error occurred while requesting your Google Pay payment details.\")),n}})}_interactWithPaymentSheet(){var e;return sn(this,void 0,void 0,function*(){const t=yield this._googlePayPaymentProcessor.showPaymentSheet(),n=this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(t),i=this._googlePayPaymentProcessor.mapToShippingAddressRequestBody(t),o=\"/embedded-checkout\"===window.location.pathname?this._paymentIntegrationService.getState().getStoreConfigOrThrow().links.siteLink:void 0;n&&(yield this._paymentIntegrationService.updateBillingAddress(n)),i&&!(null===(e=this._buyNowCart)||void 0===e?void 0:e.lineItems.digitalItems.length)&&(yield this._paymentIntegrationService.updateShippingAddress(i)),yield this._googlePayPaymentProcessor.setExternalCheckoutForm(this._getMethodOrThrow(),t,o)})}_getGooglePayClientOptions(){return this._googlePayPaymentProcessor.isWebViewWithRestrictions()?{}:{paymentDataCallbacks:{onPaymentDataChanged:({callbackTrigger:e,shippingAddress:t,shippingOptionData:n,offerData:i})=>sn(this,void 0,void 0,function*(){const{availableTriggers:o,addressChangeTriggers:r,shippingOptionsChangeTriggers:a,offerChangeTriggers:s}=this._googlePayPaymentProcessor.getCallbackTriggers();if(!o.includes(e))return;const c=r.includes(e)?yield this._googlePayPaymentProcessor.handleShippingAddressChange(t):void 0;a.includes(e)&&(yield this._googlePayPaymentProcessor.handleShippingOptionChange(n.id));const{newOfferInfo:d,error:l}=s.includes(e)?yield this._googlePayPaymentProcessor.handleCoupons(i):{},h=l;return this._buyNowInitializeOptions?this._getBuyNowTransactionInfo(c,d,h):this._getTransactionInfo(c,d,h)})}}}_createBuyNowCartOrThrow(e){return sn(this,void 0,void 0,function*(){if(\"function\"==typeof(null==e?void 0:e.getBuyNowCartRequestBody)){const t=e.getBuyNowCartRequestBody();try{this._buyNowCart=yield this._paymentIntegrationService.createBuyNowCart(t),yield this._paymentIntegrationService.loadCheckout(this._buyNowCart.id)}catch(e){if(\"string\"==typeof e)throw new an(e);throw e}}})}_getBuyNowTransactionInfo(e,t,n){if(!this._buyNowCart)return;const{cartAmount:i}=this._buyNowCart,o=this._googlePayPaymentProcessor.getTotalPrice();return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},this._countryCode&&{countryCode:this._countryCode}),{currencyCode:this._getCurrencyCodeOrThrow(),totalPrice:o||String(i),totalPriceStatus:z.FINAL})},e&&{newShippingOptionParameters:e}),t&&{newOfferInfo:t}),n&&{error:n})}_getTransactionInfo(e,t,n){return sn(this,void 0,void 0,function*(){yield this._paymentIntegrationService.loadCheckout();const i=this._googlePayPaymentProcessor.getTotalPrice(),{code:o}=this._paymentIntegrationService.getState().getCartOrThrow().currency;return Object.assign(Object.assign(Object.assign({newTransactionInfo:Object.assign(Object.assign({},this._countryCode&&{countryCode:this._countryCode}),{currencyCode:o,totalPriceStatus:z.FINAL,totalPrice:i})},e&&{newShippingOptionParameters:e}),t&&{newOfferInfo:t}),n&&{error:n})})}_getMethodOrThrow(){return A(this._methodId,()=>new v(w.PaymentNotInitialized))}_getCurrencyCodeOrThrow(){return A(this._currencyCode,()=>new C('Unable to initialize payment because \"options.currencyCode\" argument is not provided.'))}}const dn=g(i=>{const o=t(),r=window,a=new Je(i),s=new dt(new ut(n(),r,a));return new cn(i,new K(ae(),new pt(i,s),o,e()))},[{id:\"googlepaybraintree\"}]),ln=g(i=>new cn(i,new K(ae(),new St(i,new wt(n())),t(),e())),[{id:\"googlepaypaypalcommerce\"}]),hn=g(i=>new cn(i,new K(ae(),new Gt(i,new kt(n())),t(),e())),[{id:\"googlepay_bigcommerce_payments\"}]),un=g(n=>{const i=t();return new cn(n,new K(ae(),new F(\"adyen\",n),i,e()))},[{id:\"googlepayadyenv2\"}]),yn=g(n=>{const i=t();return new cn(n,new K(ae(),new F(\"adyen\",n),i,e()))},[{id:\"googlepayadyenv3\"}]),gn=g(n=>new cn(n,new K(ae(),new ue(n),t(),e())),[{id:\"googlepayauthorizenet\"}]),pn=g(n=>{const i=t();return new cn(n,new K(ae(),new fe(n,i),i,e()))},[{id:\"googlepaycheckoutcom\"}]),_n=g(n=>new cn(n,new K(ae(),new we(n),t(),e())),[{id:\"googlepaycybersourcev2\"},{id:\"googlepaybnz\"}]),mn=g(n=>new cn(n,new K(ae(),new Ce(n),t(),e())),[{id:\"googlepayorbital\"}]),fn=g(i=>new cn(i,new K(ae(),new Ve(i,new Be(n())),t(),e())),[{id:\"googlepaystripe\"},{id:\"googlepaystripeupe\"},{id:\"googlepaystripeocs\"}]),Pn=g(n=>new cn(n,new K(ae(),new He(n),t(),e())),[{id:\"googlepayworldpayaccess\"}]),wn=g(n=>new cn(n,new K(ae(),new jt(n,e()),t(),e())),[{id:\"googlepaytdonlinemart\"}]);export{un as createGooglePayAdyenV2ButtonStrategy,Ht as createGooglePayAdyenV2CustomerStrategy,se as createGooglePayAdyenV2PaymentStrategy,yn as createGooglePayAdyenV3ButtonStrategy,qt as createGooglePayAdyenV3CustomerStrategy,he as createGooglePayAdyenV3PaymentStrategy,gn as createGooglePayAuthorizeDotNetButtonStrategy,Kt as createGooglePayAuthorizeDotNetCustomerStrategy,ye as createGooglePayAuthorizeNetPaymentStrategy,hn as createGooglePayBigCommercePaymentsButtonStrategy,on as createGooglePayBigCommercePaymentsCustomerStrategy,Lt as createGooglePayBigCommercePaymentsPaymentStrategy,Jt as createGooglePayBnzCustomerStrategy,dn as createGooglePayBraintreeButtonStrategy,tn as createGooglePayBraintreeCustomerStrategy,_t as createGooglePayBraintreePaymentStrategy,pn as createGooglePayCheckoutComButtonStrategy,Yt as createGooglePayCheckoutComCustomerStrategy,Pe as createGooglePayCheckoutComPaymentStrategy,_n as createGooglePayCybersourceButtonStrategy,Zt as createGooglePayCybersourceCustomerStrategy,ve as createGooglePayCybersourcePaymentStrategy,mn as createGooglePayOrbitalButtonStrategy,Qt as createGooglePayOrbitalCustomerStrategy,Se as createGooglePayOrbitalPaymentStrategy,Mt as createGooglePayPPCPPaymentStrategy,ln as createGooglePayPayPalCommerceButtonStrategy,nn as createGooglePayPayPalCommerceCustomerStrategy,fn as createGooglePayStripeButtonStrategy,Xt as createGooglePayStripeCustomerStrategy,We as createGooglePayStripePaymentStrategy,$t as createGooglePayStripeUpeCustomerStrategy,wn as createGooglePayTdOnlineMartButtonStrategy,rn as createGooglePayTdOnlineMartCustomerStrategy,Ft as createGooglePayTdOnlineMartPaymentStrategy,Pn as createGooglePayWorldpayAccessButtonStrategy,en as createGooglePayWorldpayAccessCustomerStrategy,qe as createGooglePayWorldpayAccessPaymentStrategy};\n//# sourceMappingURL=google-pay.js.map"
  },
  {
    "path": "dist/esm/integrations/humm.js",
    "content": "import{createFormPoster as e}from\"@bigcommerce/form-poster\";class t extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class r extends t{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class o extends r{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class n extends t{constructor(e,t,r){super(r||\"Payment cannot be processed for this order, please select another payment method\"),this.type=\"custom_provider_execute_error\",this.name=t,this.subtype=e}}class i extends t{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class s{constructor(e,t){this.paymentIntegrationService=e,this.formPoster=t}execute(e,t){var r,i,s,a,c;return i=this,s=void 0,c=function*(){const{payment:i}=e,s=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(e,o[n])&&(r[o[n]]=e[o[n]])}return r}(e,[\"payment\"]);if(!(null==i?void 0:i.methodId))throw new o([\"payment.methodId\"]);yield this.paymentIntegrationService.loadPaymentMethod(i.methodId,t);const a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i.methodId);if(!(null===(r=a.initializationData)||void 0===r?void 0:r.processable))throw new n(\"payment.humm_not_processable_error\",\"hummNotProcessableError\");yield this.paymentIntegrationService.submitOrder(s,t);try{yield this.paymentIntegrationService.submitPayment({methodId:i.methodId})}catch(e){return this.isOffsiteRedirectResponse(e)?this.handleOffsiteRedirectResponse(e):Promise.reject(e)}},new((a=void 0)||(a=Promise))(function(e,t){function r(e){try{n(c.next(e))}catch(e){t(e)}}function o(e){try{n(c.throw(e))}catch(e){t(e)}}function n(t){var n;t.done?e(t.value):(n=t.value,n instanceof a?n:new a(function(e){e(n)})).then(r,o)}n((c=c.apply(i,s||[])).next())})}finalize(){return Promise.reject(new i)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}handleOffsiteRedirectResponse(e){const t=e.body.additional_action_required.data.redirect_url,r=e.body.provider_data;return new Promise(e=>{this.formPoster.postForm(t,JSON.parse(r),e)})}isOffsiteRedirectResponse(e){if(\"object\"!=typeof e||null===e)return!1;const t=e;if(!t.body)return!1;const r=t.body;return\"additional_action_required\"===r.status&&!!r.additional_action_required&&\"offsite_redirect\"===r.additional_action_required.type&&\"string\"==typeof r.provider_data}}const a=(c=t=>new s(t,e()),d=[{id:\"humm\"}],Object.assign(c,{resolveIds:d}));var c,d;export{a as createHummPaymentStrategy};\n//# sourceMappingURL=humm.js.map"
  },
  {
    "path": "dist/esm/integrations/klarna.js",
    "content": "import{getScriptLoader as e}from\"@bigcommerce/script-loader\";import{includes as t}from\"lodash\";import{createRequestSender as n}from\"@bigcommerce/request-sender\";var i,a,r={};function o(e,t){return Object.assign(e,{resolveIds:t})}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);class s extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class d extends s{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class c extends s{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(i||(i={}));class l extends s{constructor(e){super(function(e){switch(e){case i.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case i.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case i.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case i.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case i.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case i.MissingCheckoutConfig:case i.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case i.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case i.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case i.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case i.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case i.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case i.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(a||(a={}));class u extends s{constructor(e){super(function(e){switch(e){case a.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case a.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case a.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case a.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class h extends s{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}const p={body:{},headers:{},status:0};class m extends s{constructor(e,{message:t,errors:n}={}){const{body:i,headers:a,status:r}=e||p;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=a,this.status=r,this.errors=n||[]}}class y extends m{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}const g=[\"AT\",\"BE\",\"CA\",\"CH\",\"CZ\",\"DE\",\"DK\",\"ES\",\"FI\",\"FR\",\"GB\",\"GR\",\"IE\",\"IT\",\"NL\",\"NO\",\"NZ\",\"PL\",\"PT\",\"SE\"],b=[\"AU\"];var v=function(e,t,n,i){return new(n||(n=Promise))(function(a,r){function o(e){try{d(i.next(e))}catch(e){r(e)}}function s(e){try{d(i.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(o,s)}d((i=i.apply(e,t||[])).next())})};class f{constructor(e,t){this.paymentIntegrationService=e,this.klarnaScriptLoader=t}initialize(e){return v(this,void 0,void 0,function*(){this.klarnaCredit=yield this.klarnaScriptLoader.load(),this.unsubscribe=this.paymentIntegrationService.subscribe(t=>{t.isPaymentMethodInitialized({methodId:e.methodId,gatewayId:e.gatewayId})&&this.loadWidget(e)},e=>{const t=e.getCheckout();return t&&t.outstandingBalance},e=>{const t=e.getCheckout();return t&&t.coupons}),yield this.loadWidget(e)})}deinitialize(){return this.unsubscribe&&this.unsubscribe(),Promise.resolve()}execute(e,t){return v(this,void 0,void 0,function*(){if(!e.payment)throw new d('Unable to proceed because \"payload.payment\" argument is not provided.');const n=e.payment,{paymentData:i}=n,a=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var a=0;for(i=Object.getOwnPropertySymbols(e);a<i.length;a++)t.indexOf(i[a])<0&&Object.prototype.propertyIsEnumerable.call(e,i[a])&&(n[i[a]]=e[i[a]])}return n}(n,[\"paymentData\"]),{authorization_token:r}=yield this.authorize();yield this.paymentIntegrationService.initializePayment(a.methodId,{authorizationToken:r}),yield this.paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:a,useStoreCredit:e.useStoreCredit}),t)})}finalize(){return Promise.reject(new c)}loadWidget(e){return v(this,void 0,void 0,function*(){if(!e.klarna)throw new d('Unable to load widget because \"options.klarna\" argument is not provided.');const{methodId:t,klarna:{container:n,onLoad:r}}=e;return yield this.paymentIntegrationService.loadPaymentMethod(t),new Promise(e=>{const o=this.paymentIntegrationService.getState().getPaymentMethod(t);if(!o)throw new l(i.MissingPaymentMethod);if(!this.klarnaCredit||!o.clientToken)throw new u(a.PaymentNotInitialized);this.klarnaCredit.init({client_token:o.clientToken}),this.klarnaCredit.load({container:n},t=>{r&&r(t),e(t)})})})}getUpdateSessionData(e,n){if(!t([...g,...b],e.countryCode))return{};const i={billing_address:this.mapToKlarnaAddress(e,e.email)};return n&&(i.shipping_address=this.mapToKlarnaAddress(n,e.email)),i}needsStateCode(e){return t(b,e)}mapToKlarnaAddress(e,t){const n={street_address:e.address1,city:e.city,country:e.countryCode,given_name:e.firstName,family_name:e.lastName,postal_code:e.postalCode,region:this.needsStateCode(e.countryCode)?e.stateOrProvinceCode:e.stateOrProvince,email:t};return e.address2&&(n.street_address2=e.address2),e.phone&&(n.phone=e.phone),n}authorize(){return new Promise((e,t)=>{const n=this.paymentIntegrationService.getState(),r=n.getBillingAddress(),o=n.getShippingAddress();if(!r)throw new l(i.MissingBillingAddress);if(!this.klarnaCredit)throw new u(a.PaymentNotInitialized);const s=this.getUpdateSessionData(r,o);this.klarnaCredit.authorize(s,n=>n.approved?e(n):n.show_form?t(new h):void t(new y))})}}class w extends s{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class P{constructor(e,t=window){this.scriptLoader=e,this.klarnaWindow=t}load(){var e,t,n,i,a,r;return n=this,i=void 0,r=function*(){if((null===(e=this.klarnaWindow.Klarna)||void 0===e?void 0:e.Credit)||(yield this.scriptLoader.loadScript(\"//credit.klarnacdn.net/lib/v1/api.js\")),!(null===(t=this.klarnaWindow.Klarna)||void 0===t?void 0:t.Credit))throw new w;return this.klarnaWindow.Klarna.Credit},new((a=void 0)||(a=Promise))(function(e,t){function o(e){try{d(r.next(e))}catch(e){t(e)}}function s(e){try{d(r.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof a?n:new a(function(e){e(n)})).then(o,s)}d((r=r.apply(n,i||[])).next())})}}const k=o(t=>new f(t,new P(e())),[{id:\"klarna\"}]);var I=function(e,t,n,i){return new(n||(n=Promise))(function(a,r){function o(e){try{d(i.next(e))}catch(e){r(e)}}function s(e){try{d(i.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(o,s)}d((i=i.apply(e,t||[])).next())})};class S{constructor(e,t,n){this.paymentIntegrationService=e,this.klarnav2ScriptLoader=t,this.klarnav2TokenUpdater=n}initialize(e){return I(this,void 0,void 0,function*(){this.klarnaPayments=yield this.klarnav2ScriptLoader.load(),this.unsubscribe=this.paymentIntegrationService.subscribe(t=>{t.isPaymentMethodInitialized({methodId:e.methodId,gatewayId:e.gatewayId})&&this.loadPaymentsWidget(e)},e=>{const t=e.getCheckout();return t&&t.outstandingBalance},e=>{const t=e.getCheckout();return t&&t.coupons}),yield this.loadPaymentsWidget(e)})}deinitialize(){return this.unsubscribe&&this.unsubscribe(),Promise.resolve()}execute(e,t){return I(this,void 0,void 0,function*(){if(!e.payment)throw new d('Unable to proceed because \"payload.payment\" argument is not provided.');const n=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var a=0;for(i=Object.getOwnPropertySymbols(e);a<i.length;a++)t.indexOf(i[a])<0&&Object.prototype.propertyIsEnumerable.call(e,i[a])&&(n[i[a]]=e[i[a]])}return n}(e.payment,[]),{gatewayId:i,methodId:a}=n;if(!i)throw new d('Unable to proceed because \"payload.payment.gatewayId\" argument is not provided.');const r=this.paymentIntegrationService.getState(),{id:o}=r.getCartOrThrow(),{clientToken:s,initializationData:c}=r.getPaymentMethodOrThrow(a),{klarnaMultipleRadioButton:l}=c||{};yield this.klarnav2TokenUpdater.klarnaOrderInitialization(o,s);const u=this.isKlarnaMultipleRadioButtonEnabled(l,i,a),{authorization_token:h}=yield this.authorizeOrThrow(u,a);yield this.paymentIntegrationService.initializePayment(i,{authorizationToken:h}),yield this.paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:n,useStoreCredit:e.useStoreCredit}),t)})}finalize(){return Promise.reject(new c)}loadPaymentsWidget(e){return I(this,void 0,void 0,function*(){if(!e.klarnav2)throw new d('Unable to load widget because \"options.klarnav2\" argument is not provided.');const{methodId:t,gatewayId:n,klarnav2:{container:r,onLoad:o}}=e;if(!n)throw new d('Unable to proceed because \"payload.payment.gatewayId\" argument is not provided.');const s=this.paymentIntegrationService.getState(),c={params:s.getCartOrThrow().id};return yield this.klarnav2TokenUpdater.updateClientToken(n,{params:c}).catch(()=>{throw new l(i.MissingPaymentMethod)}),new Promise(e=>{const i=s.getPaymentMethodOrThrow(t),{klarnaMultipleRadioButton:d}=i.initializationData||{};if(!this.klarnaPayments||!i.clientToken)throw new u(a.PaymentNotInitialized);this.klarnaPayments.init({client_token:i.clientToken}),this.klarnaPayments.load({container:r,payment_method_category:this.isKlarnaMultipleRadioButtonEnabled(d,n,t)},t=>{o&&o(t),e(t)})})})}getUpdateSessionData(e,n,i){if(!t([...g,...b],n.countryCode))return{};const a={billing_address:this.mapToKlarnaAddress(e,n,n.email)};return i&&(a.shipping_address=this.mapToKlarnaAddress(e,i,n.email)),a}needsStateCode(e){return t(b,e)}isKlarnaMultipleRadioButtonEnabled(e,t,n){return e?n:t}mapToKlarnaAddress(e,t,n){const i=this.paymentIntegrationService.getState(),{checkoutSettings:a}=i.getStoreConfigOrThrow(),r=i.getPaymentMethodOrThrow(e),{enableBillie:o}=r.initializationData||{},s={street_address:t.address1,city:t.city,country:t.countryCode,given_name:t.firstName,family_name:t.lastName,postal_code:t.postalCode,region:this.needsStateCode(t.countryCode)?t.stateOrProvinceCode:t.stateOrProvince,email:n};return t.address2&&(s.street_address2=t.address2),t.phone&&(s.phone=t.phone),t.company&&o&&function(e,t,n=!0){var i;return null!==(i=e[\"PI-3915.b2b_payment_session_for_klarna\"])&&void 0!==i?i:n}(a.features)&&(s.organization_name=t.company),s}authorizeOrThrow(e,t){return I(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const n=this.paymentIntegrationService.getState(),i=n.getBillingAddressOrThrow(),r=n.getShippingAddress(),o=this.getUpdateSessionData(t,i,r);return new Promise((t,n)=>{if(!this.klarnaPayments)return n(new u(a.PaymentNotInitialized));this.klarnaPayments.authorize({payment_method_category:e},o,e=>e.approved?t(e):e.show_form?n(new h):void n(new y))})})}}var M;class C{constructor(e,t=window){this.scriptLoader=e,this.klarnaWindow=t}load(){var e,t,n,i,a,r;return n=this,i=void 0,r=function*(){if((null===(e=this.klarnaWindow.Klarna)||void 0===e?void 0:e.Payments)||(yield this.scriptLoader.loadScript(\"https://x.klarnacdn.net/kp/lib/v1/api.js\")),!(null===(t=this.klarnaWindow.Klarna)||void 0===t?void 0:t.Payments))throw new w;return this.klarnaWindow.Klarna.Payments},new((a=void 0)||(a=Promise))(function(e,t){function o(e){try{d(r.next(e))}catch(e){t(e)}}function s(e){try{d(r.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof a?n:new a(function(e){e(n)})).then(o,s)}d((r=r.apply(n,i||[])).next())})}}!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(M||(M={}));const O=M,z=\"This API endpoint is for internal use only and may change in the future\",_={\"X-Checkout-SDK-Version\":\"1.916.1\"};class T{constructor(e){this.requestSender=e}updateClientToken(e,{timeout:t,params:n}={}){const i=`/api/storefront/payments/${e}`;return this.requestSender.get(i,{timeout:t,headers:Object.assign({Accept:O.JsonV1,\"X-API-INTERNAL\":z},_),params:n})}klarnaOrderInitialization(e,t){return n=this,i=void 0,r=function*(){const n={headers:Object.assign({Accept:O.JsonV1,\"X-API-INTERNAL\":z},_),body:{cartId:e,clientToken:t}};yield this.requestSender.put(\"/api/storefront/initialization/klarna\",n)},new((a=void 0)||(a=Promise))(function(e,t){function o(e){try{d(r.next(e))}catch(e){t(e)}}function s(e){try{d(r.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof a?n:new a(function(e){e(n)})).then(o,s)}d((r=r.apply(n,i||[])).next())});var n,i,a,r}}const U=o(t=>{const{getHost:i}=t.getState(),a=n({host:i()});return new S(t,new C(e()),new T(a))},[{gateway:\"klarna\"}]);export{k as createKlarnaPaymentStrategy,U as createKlarnaV2PaymentStrategy};\n//# sourceMappingURL=klarna.js.map"
  },
  {
    "path": "dist/esm/integrations/legacy.js",
    "content": "class e extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class t extends e{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class r{constructor(e){this._paymentIntegrationService=e}execute(e,t){return r=this,n=void 0,i=function*(){return yield this._paymentIntegrationService.submitOrder(e,t),Promise.resolve()},new((o=void 0)||(o=Promise))(function(e,t){function a(e){try{c(i.next(e))}catch(e){t(e)}}function s(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o(function(e){e(r)})).then(a,s)}c((i=i.apply(r,n||[])).next())});var r,n,o,i}finalize(){return Promise.reject(new t)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const n=(o=e=>new r(e),i=[{id:\"testgateway\"}],Object.assign(o,{resolveIds:i}));var o,i;export{n as createLegacyPaymentStrategy};\n//# sourceMappingURL=legacy.js.map"
  },
  {
    "path": "dist/esm/integrations/mollie.js",
    "content": "import{getScriptLoader as e}from\"@bigcommerce/script-loader\";import{each as t,some as i}from\"lodash\";var n,o;class s extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class a extends s{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(n||(n={}));class r extends s{constructor(e){super(function(e){switch(e){case n.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case n.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case n.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case n.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case n.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case n.MissingCheckoutConfig:case n.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case n.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case n.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case n.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case n.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case n.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case n.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class d extends a{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}function l(){const{navigator:e}=window;let t;return t=e.language?e.language:e.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof e.javaEnabled&&e.javaEnabled(),language:t,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(o||(o={}));class c extends s{constructor(e){super(function(e){switch(e){case o.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case o.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case o.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case o.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var u,m=function(e,t,i,n){return new(i||(i=Promise))(function(o,s){function a(e){try{d(n.next(e))}catch(e){s(e)}}function r(e){try{d(n.throw(e))}catch(e){s(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,r)}d((n=n.apply(e,t||[])).next())})};!function(e){e.CREDIT_CARD=\"credit_card\"}(u||(u={}));const h=[\"klarnapaylater\",\"klarnasliceit\"];class p{constructor(e,t){this.mollieScriptLoader=e,this.paymentIntegrationService=t}initialize(e){return m(this,void 0,void 0,function*(){const{mollie:i,methodId:o,gatewayId:s}=e;if(!i)throw new a('Unable to initialize payment because \"options.mollie\" argument is not provided.');if(!o||!s)throw new a('Unable to initialize payment because \"methodId\" and/or \"gatewayId\" argument is not provided.');const d=document.querySelectorAll(\".mollie-components-controller\");t(d,e=>e.remove());const l=this.paymentIntegrationService.getState(),c=l.getStoreConfigOrThrow();this.initializeOptions=i;const u=l.getPaymentMethodOrThrow(o,s),{config:{merchantId:m,testMode:h}}=u;if(this.locale=l.getLocale(),!m)throw new r(n.MissingPaymentMethod);return this.isCreditCard(o)&&i.form&&this.shouldShowTSVHostedForm(o,s)?this.hostedForm=yield this.mountCardVerificationfields(i.form):this.isCreditCard(o)&&(this.mollieClient=yield this.loadMollieJs(m,c.storeProfile.storeLanguage,h),this.mountElements()),this.unsubscribe=()=>{if(this.paymentIntegrationService.getState().isPaymentMethodInitialized({methodId:e.methodId,gatewayId:e.gatewayId})){const e=document.getElementById(`${s}-${o}-paragraph`);e&&e.remove(),i.disableButton(!1),this.loadPaymentMethodsAllowed(i,o,s)}},this.unsubscribe(),this.loadPaymentMethodsAllowed(i,o,s),Promise.resolve()})}execute(e,t){return m(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(i[n[o]]=e[n[o]])}return i}(e,[\"payment\"]),o=null==i?void 0:i.paymentData;if(!i||!i.gatewayId||!o)throw new d([\"payment\",\"gatewayId\",\"paymentData\"]);try{return yield this.paymentIntegrationService.submitOrder(n,t),Boolean(o.instrumentId)?yield this.executeWithVaulted(i):this.isCreditCard(i.methodId)?yield this.executeWithCC(i):yield this.executeWithAPM(i)}catch(e){yield this.processAdditionalAction(e)}})}finalize(){return Promise.resolve()}deinitialize(e){if(this.unsubscribe&&this.unsubscribe(),this.hostedForm&&this.hostedForm.detach(),e&&e.methodId&&e.gatewayId&&!this.hostedForm){const t=document.getElementById(`${e.gatewayId}-${e.methodId}`);t&&t.remove()}else e&&e.methodId&&this.isCreditCard(e.methodId)&&this.cardHolderElement&&this.cardNumberElement&&this.verificationCodeElement&&this.expiryDateElement&&(this.cardHolderElement.unmount(),this.cardHolderElement=void 0,this.cardNumberElement.unmount(),this.cardNumberElement=void 0,this.verificationCodeElement.unmount(),this.verificationCodeElement=void 0,this.expiryDateElement.unmount(),this.expiryDateElement=void 0);return this.mollieClient=void 0,Promise.resolve()}executeWithCC(e){return m(this,void 0,void 0,function*(){const t=e.paymentData,{shouldSaveInstrument:i=!1,shouldSetAsDefaultInstrument:n=!1}=\"object\"!=typeof(o=t)||null===o||void 0!==o.shouldSaveInstrument&&\"boolean\"!=typeof o.shouldSaveInstrument||void 0!==o.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof o.shouldSetAsDefaultInstrument?{}:t;var o;const{token:s,error:a}=yield this.getMollieClient().createToken();if(a)return Promise.reject(a);const r={credit_card_token:{token:s},vault_payment_instrument:i,set_as_default_stored_instrument:n,browser_info:l(),shopper_locale:this.getShopperLocale()};yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:{formattedPayload:r}}))})}executeWithVaulted(e){return m(this,void 0,void 0,function*(){if(this.isHostedPaymentFormEnabled(e.methodId,e.gatewayId)){const t=this.hostedForm;if(!t)throw new c(o.PaymentNotInitialized);yield t.validate(),yield t.submit(e),yield this.paymentIntegrationService.loadCurrentOrder()}else yield this.paymentIntegrationService.submitPayment(e)})}executeWithAPM(e){return m(this,void 0,void 0,function*(){const t=e.paymentData,i=t&&\"issuer\"in t?t.issuer:\"\";yield this.paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:Object.assign(Object.assign({},t),{formattedPayload:{issuer:i,shopper_locale:this.getShopperLocale()}})}))})}isCreditCard(e){return e===u.CREDIT_CARD}shouldShowTSVHostedForm(e,t){return this.isHostedPaymentFormEnabled(e,t)&&this.isHostedFieldAvailable()}mountCardVerificationfields(e){return new Promise((t,i)=>m(this,void 0,void 0,function*(){try{const i=this.paymentIntegrationService.getState().getStoreConfig(),o=null==i?void 0:i.paymentSettings.bigpayBaseUrl;if(!o)throw new r(n.MissingCheckoutConfig);const s=this.paymentIntegrationService.createHostedForm(o,e);yield s.attach(),t(s)}catch(e){i(e)}}))}isHostedPaymentFormEnabled(e,t){const{getPaymentMethodOrThrow:i}=this.paymentIntegrationService.getState();return!0===i(e,t).config.isHostedFormEnabled}isHostedFieldAvailable(){var e;return!!(null===(e=this.getInitializeOptions().form)||void 0===e?void 0:e.fields)}processAdditionalAction(e){if(!(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e))return Promise.reject(e);if(i(e.body.errors,{code:\"additional_action_required\"})){const{additional_action_required:{data:{redirect_url:t}}}=e.body;return new Promise(()=>window.location.replace(t))}return Promise.reject(e)}getInitializeOptions(){if(!this.initializeOptions)throw new c(o.PaymentNotInitialized);return this.initializeOptions}loadMollieJs(e,t,i=!1){return this.mollieClient?Promise.resolve(this.mollieClient):this.mollieScriptLoader.load(e,t,i)}getMollieClient(){if(!this.mollieClient)throw new c(o.PaymentNotInitialized);return this.mollieClient}getShopperLocale(){if(!this.locale)throw new c(o.PaymentNotInitialized);return this.locale}mountElements(){const{containerId:e,cardNumberId:t,cardCvcId:i,cardExpiryId:n,cardHolderId:o,styles:s}=this.getInitializeOptions();let a;e&&(a=document.getElementById(e)),setTimeout(()=>{if(!e||\"none\"!==(null==a?void 0:a.style.display)){const e=this.getMollieClient();this.cardHolderElement=e.createComponent(\"cardHolder\",{styles:s}),this.cardHolderElement.mount(`#${o}`),this.cardNumberElement=e.createComponent(\"cardNumber\",{styles:s}),this.cardNumberElement.mount(`#${t}`),this.verificationCodeElement=e.createComponent(\"verificationCode\",{styles:s}),this.verificationCodeElement.mount(`#${i}`),this.expiryDateElement=e.createComponent(\"expiryDate\",{styles:s}),this.expiryDateElement.mount(`#${n}`)}},0)}loadPaymentMethodsAllowed(e,t,i){var n;if(h.includes(t)){const o=null===(n=this.paymentIntegrationService.getState().getCartOrThrow().lineItems)||void 0===n?void 0:n.digitalItems;if(o&&o.length>0){const{containerId:n}=this.getInitializeOptions();if(n){const o=document.getElementById(n);if(o){const n=document.createElement(\"p\");n.setAttribute(\"id\",`${i}-${t}-paragraph`),e.unsupportedMethodMessage&&(n.innerText=e.unsupportedMethodMessage,o.appendChild(n),e.disableButton(!0))}}}}}}class g extends s{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class y{constructor(e,t=window){this.scriptLoader=e,this.mollieHostWindow=t}load(e,t,i){return n=this,o=void 0,a=function*(){if(yield this.scriptLoader.loadScript(\"https://js.mollie.com/v1/mollie.js\"),!function(e){return\"Mollie\"in e}(this.mollieHostWindow))throw new g;return this.mollieHostWindow.Mollie(e,{locale:t,testmode:i})},new((s=void 0)||(s=Promise))(function(e,t){function i(e){try{d(a.next(e))}catch(e){t(e)}}function r(e){try{d(a.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof s?n:new s(function(e){e(n)})).then(i,r)}d((a=a.apply(n,o||[])).next())});var n,o,s,a}}const b=(f=t=>new p(new y(e()),t),v=[{gateway:\"mollie\"},{gateway:\"mollie\",id:\"applepay\"}],Object.assign(f,{resolveIds:v}));var f,v;export{b as createMolliePaymentStrategy};\n//# sourceMappingURL=mollie.js.map"
  },
  {
    "path": "dist/esm/integrations/moneris.js",
    "content": "import{isEmpty as e,map as t,omitBy as i}from\"lodash\";var n,s;class o extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class r extends o{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(n||(n={}));class a extends o{constructor(e){super(function(e){switch(e){case n.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case n.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case n.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case n.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case n.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case n.MissingCheckoutConfig:case n.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case n.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case n.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case n.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case n.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case n.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case n.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class d extends r{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class c extends o{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(s||(s={}));class l extends o{constructor(e){super(function(e){switch(e){case s.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case s.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case s.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case s.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var u=function(e,t,i,n){return new(i||(i=Promise))(function(s,o){function r(e){try{d(n.next(e))}catch(e){o(e)}}function a(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(r,a)}d((n=n.apply(e,t||[])).next())})};const m=\"moneris-payment-iframe\";class h{constructor(e){this.paymentIntegrationService=e}initialize(e){return u(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),{moneris:i,methodId:s}=e;if(!s)throw new r('Unable to initialize payment because \"methodId\" argument is not provided.');if(!i)throw new r('Unable to initialize payment because \"options.moneris\" argument is not provided.');this.initializeOptions=i;const{config:o,initializationData:d}=t.getPaymentMethodOrThrow(s);if(!(null==d?void 0:d.profileId))throw new a(n.MissingPaymentMethod);return i.form&&this.shouldShowTSVHostedForm(s)&&(this.hostedForm=yield this.mountCardVerificationfields(i.form)),this.iframe||(this.iframe=this.createIframe(i.containerId,d,!!o.testMode)),Promise.resolve()})}execute(e,t){return u(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var s=0;for(n=Object.getOwnPropertySymbols(e);s<n.length;s++)t.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(e,n[s])&&(i[n[s]]=e[n[s]])}return i}(e,[\"payment\"]);if(!i)throw new d([\"payment\"]);const{isStoreCreditApplied:s}=this.paymentIntegrationService.getState().getCheckoutOrThrow();var o;if(s&&(yield this.paymentIntegrationService.applyStoreCredit(s)),yield this.paymentIntegrationService.submitOrder(n,t),!i.paymentData||(o=i.paymentData,!Boolean(o.instrumentId)))return this.executeWithCC(i);yield this.executeWithVaulted(i)})}finalize(){return Promise.reject(new c)}deinitialize(){return this.hostedForm&&this.hostedForm.detach(),this.windowEventListener&&(window.removeEventListener(\"message\",this.windowEventListener),this.windowEventListener=void 0),this.iframe&&this.iframe.parentNode&&(this.iframe.parentNode.removeChild(this.iframe),this.iframe=void 0),Promise.resolve()}executeWithCC(e){return u(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId).config.testMode,i=e.paymentData||{},n=\"object\"!=typeof(o=i)||null===o||void 0!==o.shouldSaveInstrument&&\"boolean\"!=typeof o.shouldSaveInstrument||void 0!==o.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof o.shouldSetAsDefaultInstrument?{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1}:i;var o;const{shouldSaveInstrument:r,shouldSetAsDefaultInstrument:a}=n,d=yield new Promise((e,i)=>{if(!this.iframe)throw new l(s.PaymentNotInitialized);const n=this.iframe.contentWindow;if(null===n)throw new l(s.PaymentNotInitialized);n.postMessage(\"tokenize\",this.monerisURL(!!t)),this.windowEventListener=n=>{if(\"string\"==typeof n.data&&n.origin===`https://${t?\"esqa\":\"www3\"}.moneris.com`)try{e(this.handleMonerisResponse(n))}catch(e){i(e)}},window.addEventListener(\"message\",this.windowEventListener)});void 0!==d&&(yield this.paymentIntegrationService.submitPayment({methodId:e.methodId,paymentData:{nonce:d,shouldSaveInstrument:r,shouldSetAsDefaultInstrument:a}}))})}executeWithVaulted(e){return u(this,void 0,void 0,function*(){if(this.hostedForm){const t=this.hostedForm;return yield t.validate(),yield t.submit(e),this.paymentIntegrationService.loadCurrentOrder()}return this.paymentIntegrationService.submitPayment(e)})}shouldShowTSVHostedForm(e){return this.isHostedPaymentFormEnabled(e)&&this.isHostedFieldAvailable()}isHostedPaymentFormEnabled(e){const t=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e);return Boolean(t.config.isHostedFormEnabled)}isHostedFieldAvailable(){var t;const n=this.getInitializeOptions(),s=i(null===(t=n.form)||void 0===t?void 0:t.fields,e);return!e(s)}getInitializeOptions(){if(!this.initializeOptions)throw new l(s.PaymentNotInitialized);return this.initializeOptions}mountCardVerificationfields(e){var t;return u(this,void 0,void 0,function*(){const i=null===(t=this.paymentIntegrationService.getState().getStoreConfig())||void 0===t?void 0:t.paymentSettings.bigpayBaseUrl;if(!i)throw new a(n.MissingCheckoutConfig);const s=this.paymentIntegrationService.createHostedForm(i,e);return yield s.attach(),s})}createIframe(e,i,n,s){const o=document.getElementById(e);if(!o)throw new r(\"Unable to create iframe without valid container ID.\");const a=document.createElement(\"iframe\"),d={id:i.profileId,pmmsg:!0,display_labels:1,enable_exp:1,enable_cvd:1,css_body:(null==s?void 0:s.cssBody)||\"font-family: Arial, Helvetica,sans-serif;background: transparent;\",css_textbox:(null==s?void 0:s.cssTextbox)||\"border-radius:4px;border: 2px solid rgb(00,00,00);width: 100%;font-weight: 600;padding: 8px 8px;outline: 0;\",css_textbox_pan:(null==s?void 0:s.cssTextboxCardNumber)||\"width: 240px;\",css_textbox_exp:(null==s?void 0:s.cssTextboxExpiryDate)||\"margin-bottom: 0;width: calc(30% - 12px);\",css_textbox_cvd:(null==s?void 0:s.cssTextboxCVV)||\"margin-bottom: 0;width: calc(30% - 12px);\",css_input_label:(null==s?void 0:s.cssInputLabel)||\"font-size: 10px;position: relative;top: 8px;left: 6px;background: rgb(255,255,255);padding: 3px 2px;color: rgb(66,66,66);font-weight: 600;z-index: 2;\",pan_label:i.creditCardLabel||\"Credit Card Number\",exp_label:i.expiryDateLabel||\"Expiration\",cvd_label:i.cvdLabel||\"CVD\"},c=t(d,(e,t)=>`${t}=${e}`).join(\"&\");return a.width=\"100%\",a.height=\"100%\",a.name=m,a.id=m,a.style.border=\"none\",a.src=`${this.monerisURL(n)}?${c}`,a.allow=\"payment\",o.appendChild(a),a}handleMonerisResponse(e){const t=JSON.parse(e.data);if(\"001\"!==t.responseCode[0])throw new Error(t.errorMessage);return t.dataKey}monerisURL(e){return`https://${e?\"esqa\":\"www3\"}.moneris.com/HPPtoken/index.php`}}const p=(g=e=>new h(e),b=[{id:\"moneris\"}],Object.assign(g,{resolveIds:b}));var g,b;export{p as createMonerisPaymentStrategy};\n//# sourceMappingURL=moneris.js.map"
  },
  {
    "path": "dist/esm/integrations/no-payment.js",
    "content": "import{omit as e}from\"lodash\";class t extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class r extends t{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class n{constructor(e){this._paymentIntegrationService=e}execute(t,r){return n=this,o=void 0,a=function*(){yield this._paymentIntegrationService.submitOrder(e(t,\"payment\"),r)},new((i=void 0)||(i=Promise))(function(e,t){function r(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(r,s)}c((a=a.apply(n,o||[])).next())});var n,o,i,a}finalize(){return Promise.reject(new r)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const o=(i=e=>new n(e),a=[{id:\"nopaymentdatarequired\"}],Object.assign(i,{resolveIds:a}));var i,a;export{o as createNoPaymentStrategy};\n//# sourceMappingURL=no-payment.js.map"
  },
  {
    "path": "dist/esm/integrations/offline.js",
    "content": "class e extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class t extends e{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class r{constructor(e){this._paymentIntegrationService=e}execute(e,t){return r=this,n=void 0,i=function*(){return yield this._paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:e.payment?{methodId:e.payment.methodId}:void 0}),t),Promise.resolve()},new((o=void 0)||(o=Promise))(function(e,t){function s(e){try{c(i.next(e))}catch(e){t(e)}}function a(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o(function(e){e(r)})).then(s,a)}c((i=i.apply(r,n||[])).next())});var r,n,o,i}finalize(){return Promise.reject(new t)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}}const n=(o=e=>new r(e),i=[{type:\"PAYMENT_TYPE_OFFLINE\"}],Object.assign(o,{resolveIds:i}));var o,i;export{n as createOfflinePaymentStrategy};\n//# sourceMappingURL=offline.js.map"
  },
  {
    "path": "dist/esm/integrations/offsite.js",
    "content": "var e,t={};function r(e){return!(\"object\"!=typeof e||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument)}t.d=(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},t.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);class n extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class o extends n{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class a extends o{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}!function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(e||(e={}));const i=e;class s extends n{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}var u=function(e,t,r,n){return new(r||(r=Promise))(function(o,a){function i(e){try{u(n.next(e))}catch(e){a(e)}}function s(e){try{u(n.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(i,s)}u((n=n.apply(e,t||[])).next())})};class d{constructor(e){this._paymentIntegrationService=e}execute(e,t){return u(this,void 0,void 0,function*(){const{payment:n}=e,o=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(e,[\"payment\"]),i=this._shouldSubmitFullPayload(n)?e:o,s=n&&n.paymentData,u=s&&Boolean(s.instrumentId)&&s.instrumentId||void 0,d=s&&r(s)&&s.shouldSaveInstrument||void 0,c=s&&r(s)&&s.shouldSetAsDefaultInstrument||void 0;if(!n)throw new a([\"payment\"]);const{methodId:l,gatewayId:y}=n;yield this._paymentIntegrationService.submitOrder(i,t),yield this._paymentIntegrationService.initializeOffsitePayment({methodId:l,gatewayId:y,instrumentId:u,shouldSaveInstrument:d,shouldSetAsDefaultInstrument:c})})}finalize(e){return u(this,void 0,void 0,function*(){const t=this._paymentIntegrationService.getState(),r=t.getOrder(),n=t.getPaymentStatus();if(!r||n!==i.ACKNOWLEDGE&&n!==i.FINALIZE)return Promise.reject(new s);yield this._paymentIntegrationService.finalizeOrder(e)})}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_shouldSubmitFullPayload(e){return!!e&&(\"adyen\"===e.gatewayId||\"barclaycard\"===e.gatewayId)}}const c=(l=e=>new d(e),y=[{type:\"PAYMENT_TYPE_HOSTED\"}],Object.assign(l,{resolveIds:y}));var l,y;export{c as createOffsitePaymentStrategy};\n//# sourceMappingURL=offsite.js.map"
  },
  {
    "path": "dist/esm/integrations/paypal-commerce.js",
    "content": "import{getScriptLoader as e}from\"@bigcommerce/script-loader\";import{createFormPoster as t}from\"@bigcommerce/form-poster\";import{createRequestSender as n}from\"@bigcommerce/request-sender\";import{isEqual as i,isNil as r,noop as o,omit as a,omitBy as s}from\"lodash\";var d,l={};function c(e,t){return Object.assign(e,{resolveIds:t})}l.d=(e,t)=>{for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);class u extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class p extends u{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(d||(d={}));class h extends u{constructor(e){super(function(e){switch(e){case d.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case d.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case d.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case d.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case d.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case d.MissingCheckoutConfig:case d.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case d.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case d.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case d.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case d.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case d.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case d.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}const y={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},m=[\"ar_BH\",\"ar_DZ\",\"ar_EG\",\"ar_JO\",\"ar_KW\",\"ar_MA\",\"ar_OM\",\"ar_QA\",\"ar_SA\",\"ar_TN\",\"ar_YE\",\"ar_AE\",\"bg_BG\",\"cs_CZ\",\"da_DK\",\"da_FO\",\"da_GL\",\"de_AT\",\"de_CH\",\"de_DE\",\"de_LU\",\"el_GR\",\"en_AD\",\"en_AE\",\"en_AG\",\"en_AI\",\"en_AL\",\"en_AM\",\"en_AN\",\"en_AO\",\"en_AT\",\"en_AU\",\"en_AW\",\"en_AZ\",\"en_BB\",\"en_BE\",\"en_BH\",\"en_BJ\",\"en_BM\",\"en_BN\",\"en_BS\",\"en_BT\",\"en_BW\",\"en_BY\",\"en_BZ\",\"en_C2\",\"en_CA\",\"en_CD\",\"en_CG\",\"en_CH\",\"en_CI\",\"en_CK\",\"en_CL\",\"en_CM\",\"en_CN\",\"en_CO\",\"en_CR\",\"en_CV\",\"en_CY\",\"en_CZ\",\"en_DE\",\"en_DJ\",\"en_DK\",\"en_DM\",\"en_DO\",\"en_DZ\",\"en_EC\",\"en_EE\",\"en_EG\",\"en_ER\",\"en_ES\",\"en_ET\",\"en_FI\",\"en_FJ\",\"en_FK\",\"en_FM\",\"en_FO\",\"en_FR\",\"en_GA\",\"en_GB\",\"en_GD\",\"en_GE\",\"en_GF\",\"en_GI\",\"en_GL\",\"en_GM\",\"en_GN\",\"en_GP\",\"en_GR\",\"en_GT\",\"en_GW\",\"en_GY\",\"en_HK\",\"en_HN\",\"en_HR\",\"en_HU\",\"en_ID\",\"en_IE\",\"en_IL\",\"en_IN\",\"en_IS\",\"en_IT\",\"en_JM\",\"en_JO\",\"en_JP\",\"en_KE\",\"en_KG\",\"en_KH\",\"en_KI\",\"en_KM\",\"en_KN\",\"en_KR\",\"en_KW\",\"en_KY\",\"en_KZ\",\"en_LA\",\"en_LC\",\"en_LI\",\"en_LK\",\"en_LS\",\"en_LT\",\"en_LU\",\"en_LV\",\"en_MA\",\"en_MC\",\"en_MD\",\"en_ME\",\"en_MG\",\"en_MH\",\"en_MK\",\"en_ML\",\"en_MN\",\"en_MQ\",\"en_MR\",\"en_MS\",\"en_MT\",\"en_MU\",\"en_MV\",\"en_MW\",\"en_MY\",\"en_MZ\",\"en_NA\",\"en_NC\",\"en_NE\",\"en_NF\",\"en_NG\",\"en_NI\",\"en_NL\",\"en_NO\",\"en_NP\",\"en_NR\",\"en_NU\",\"en_NZ\",\"en_OM\",\"en_PA\",\"en_PE\",\"en_PF\",\"en_PG\",\"en_PH\",\"en_PL\",\"en_PM\",\"en_PN\",\"en_PT\",\"en_PW\",\"en_PY\",\"en_QA\",\"en_RE\",\"en_RO\",\"en_RS\",\"en_RU\",\"en_RW\",\"en_SA\",\"en_SB\",\"en_SC\",\"en_SE\",\"en_SG\",\"en_SH\",\"en_SI\",\"en_SJ\",\"en_SK\",\"en_SL\",\"en_SM\",\"en_SN\",\"en_SO\",\"en_SR\",\"en_ST\",\"en_SV\",\"en_SZ\",\"en_TC\",\"en_TD\",\"en_TG\",\"en_TH\",\"en_TJ\",\"en_TM\",\"en_TN\",\"en_TO\",\"en_TR\",\"en_TT\",\"en_TV\",\"en_TW\",\"en_TZ\",\"en_UA\",\"en_UG\",\"en_US\",\"en_UY\",\"en_VA\",\"en_VC\",\"en_VE\",\"en_VG\",\"en_VN\",\"en_VU\",\"en_WF\",\"en_WS\",\"en_YE\",\"en_YT\",\"en_ZA\",\"en_ZM\",\"en_ZW\",\"es_AD\",\"es_AI\",\"es_AO\",\"es_AR\",\"es_AW\",\"es_BB\",\"es_BJ\",\"es_BM\",\"es_BO\",\"es_BS\",\"es_BZ\",\"es_CD\",\"es_CG\",\"es_CK\",\"es_CL\",\"es_CO\",\"es_CR\",\"es_CV\",\"es_DJ\",\"es_DM\",\"es_DO\",\"es_DZ\",\"es_EC\",\"es_EG\",\"es_ER\",\"es_ES\",\"es_ET\",\"es_FJ\",\"es_FK\",\"es_FO\",\"es_GA\",\"es_GD\",\"es_GE\",\"es_GI\",\"es_GL\",\"es_GM\",\"es_GN\",\"es_GT\",\"es_GW\",\"es_GY\",\"es_HN\",\"es_IE\",\"es_JM\",\"es_JO\",\"es_KE\",\"es_KG\",\"es_KI\",\"es_KM\",\"es_KN\",\"es_KW\",\"es_KY\",\"es_KZ\",\"es_LC\",\"es_LI\",\"es_LS\",\"es_LU\",\"es_MA\",\"es_MG\",\"es_MH\",\"es_ML\",\"es_MR\",\"es_MS\",\"es_MU\",\"es_MW\",\"es_MX\",\"es_MZ\",\"es_NA\",\"es_NC\",\"es_NE\",\"es_NF\",\"es_NI\",\"es_NR\",\"es_NU\",\"es_NZ\",\"es_OM\",\"es_PA\",\"es_PE\",\"es_PF\",\"es_PG\",\"es_PM\",\"es_PN\",\"es_PW\",\"es_PY\",\"es_QA\",\"es_RS\",\"es_RW\",\"es_SA\",\"es_SB\",\"es_SC\",\"es_SH\",\"es_SJ\",\"es_SL\",\"es_SM\",\"es_SN\",\"es_SO\",\"es_SR\",\"es_ST\",\"es_SV\",\"es_SZ\",\"es_TC\",\"es_TD\",\"es_TG\",\"es_TJ\",\"es_TM\",\"es_TN\",\"es_TT\",\"es_TV\",\"es_UA\",\"es_UG\",\"es_US\",\"es_UY\",\"es_VA\",\"es_VC\",\"es_VE\",\"es_VG\",\"es_VU\",\"es_WF\",\"es_YE\",\"es_ZM\",\"et_EE\",\"fi_FI\",\"fr_AD\",\"fr_AE\",\"fr_AI\",\"fr_AM\",\"fr_AO\",\"fr_AW\",\"fr_AZ\",\"fr_BB\",\"fr_BE\",\"fr_BF\",\"fr_BI\",\"fr_BJ\",\"fr_BM\",\"fr_BS\",\"fr_BZ\",\"fr_CA\",\"fr_CD\",\"fr_CG\",\"fr_CH\",\"fr_CI\",\"fr_CK\",\"fr_CM\",\"fr_CV\",\"fr_DJ\",\"fr_DM\",\"fr_DO\",\"fr_DZ\",\"fr_EC\",\"fr_ER\",\"fr_ET\",\"fr_FJ\",\"fr_FK\",\"fr_FO\",\"fr_FR\",\"fr_GA\",\"fr_GD\",\"fr_GE\",\"fr_GF\",\"fr_GI\",\"fr_GL\",\"fr_GM\",\"fr_GN\",\"fr_GP\",\"fr_GT\",\"fr_GW\",\"fr_GY\",\"fr_HN\",\"fr_IE\",\"fr_JM\",\"fr_JO\",\"fr_KE\",\"fr_KG\",\"fr_KI\",\"fr_KM\",\"fr_KN\",\"fr_KW\",\"fr_KY\",\"fr_KZ\",\"fr_LC\",\"fr_LI\",\"fr_LS\",\"fr_LU\",\"fr_MA\",\"fr_MC\",\"fr_MG\",\"fr_MH\",\"fr_ML\",\"fr_MQ\",\"fr_MR\",\"fr_MS\",\"fr_MU\",\"fr_MW\",\"fr_MZ\",\"fr_NA\",\"fr_NC\",\"fr_NE\",\"fr_NF\",\"fr_NI\",\"fr_NR\",\"fr_NU\",\"fr_NZ\",\"fr_OM\",\"fr_PA\",\"fr_PE\",\"fr_PF\",\"fr_PG\",\"fr_PM\",\"fr_PN\",\"fr_PW\",\"fr_QA\",\"fr_RE\",\"fr_RS\",\"fr_RW\",\"fr_SA\",\"fr_SB\",\"fr_SC\",\"fr_SH\",\"fr_SJ\",\"fr_SL\",\"fr_SM\",\"fr_SN\",\"fr_SO\",\"fr_SR\",\"fr_ST\",\"fr_SV\",\"fr_SZ\",\"fr_TC\",\"fr_TD\",\"fr_TG\",\"fr_TJ\",\"fr_TM\",\"fr_TN\",\"fr_TT\",\"fr_TV\",\"fr_UA\",\"fr_UG\",\"fr_US\",\"fr_UY\",\"fr_VA\",\"fr_VC\",\"fr_VE\",\"fr_VG\",\"fr_VU\",\"fr_WF\",\"fr_YE\",\"fr_YT\",\"fr_ZA\",\"fr_ZM\",\"he_IL\",\"hu_HU\",\"id_ID\",\"it_IT\",\"ja_JP\",\"ko_KR\",\"lv_LV\",\"lt_LT\",\"ms_BN\",\"ms_MY\",\"nl_BE\",\"nl_NL\",\"pl_PL\",\"pt_BR\",\"pt_PT\",\"ro_RO\",\"ru_EE\",\"ru_LT\",\"ru_LV\",\"ru_RU\",\"ru_UA\",\"si_LK\",\"sk_SK\",\"sl_SI\",\"sq_AL\",\"sv_SE\",\"tl_PH\",\"th_TH\",\"tr_TR\",\"vi_VN\",\"zh_C2\",\"zh_CN\",\"zh_HK\",\"zh_TW\",\"zh_AD\",\"zh_AE\",\"zh_AI\",\"zh_AO\",\"zh_AW\",\"zh_BB\",\"zh_BH\",\"zh_BJ\",\"zh_BM\",\"zh_BS\",\"zh_BZ\",\"zh_CD\",\"zh_CG\",\"zh_CK\",\"zh_CL\",\"zh_CO\",\"zh_CV\",\"zh_DJ\",\"zh_DM\",\"zh_DO\",\"zh_DZ\",\"zh_EC\",\"zh_EG\",\"zh_ER\",\"zh_ET\",\"zh_FJ\",\"zh_FK\",\"zh_FO\",\"zh_GA\",\"zh_GD\",\"zh_GE\",\"zh_GI\",\"zh_GL\",\"zh_GM\",\"zh_GN\",\"zh_GT\",\"zh_GW\",\"zh_GY\",\"zh_HN\",\"zh_IE\",\"zh_JM\",\"zh_JO\",\"zh_KE\",\"zh_KG\",\"zh_KI\",\"zh_KM\",\"zh_KN\",\"zh_KW\",\"zh_KY\",\"zh_KZ\",\"zh_LC\",\"zh_LI\",\"zh_LS\",\"zh_LT\",\"zh_LU\",\"zh_MA\",\"zh_MG\",\"zh_MH\",\"zh_ML\",\"zh_MR\",\"zh_MS\",\"zh_MU\",\"zh_MW\",\"zh_MZ\",\"zh_NA\",\"zh_NC\",\"zh_NE\",\"zh_NF\",\"zh_NI\",\"zh_NR\",\"zh_NU\",\"zh_NZ\",\"zh_OM\",\"zh_PA\",\"zh_PE\",\"zh_PF\",\"zh_PG\",\"zh_PM\",\"zh_PN\",\"zh_PW\",\"zh_QA\",\"zh_RS\",\"zh_RW\",\"zh_SA\",\"zh_SB\",\"zh_SC\",\"zh_SH\",\"zh_SJ\",\"zh_SL\",\"zh_SM\",\"zh_SN\",\"zh_SO\",\"zh_SR\",\"zh_ST\",\"zh_SV\",\"zh_SZ\",\"zh_TC\",\"zh_TD\",\"zh_TG\",\"zh_TJ\",\"zh_TM\",\"zh_TN\",\"zh_TT\",\"zh_TV\",\"zh_UA\",\"zh_UG\",\"zh_US\",\"zh_UY\",\"zh_VA\",\"zh_VC\",\"zh_VE\",\"zh_VG\",\"zh_VU\",\"zh_WF\",\"zh_YE\",\"zh_ZA\",\"zh_ZM\"];function g(e){if(!e)return;let t;if(e.includes(\"-\")){const[n,i]=e.split(\"-\");t=`${n}_${i.toUpperCase()}`}else t=`${e}_${e.toUpperCase()}`;return m.includes(t)?t:void 0}var v=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class f{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,i,r){return v(this,void 0,void 0,function*(){if(!this.window.paypal||r){const r=this.getPayPalSdkScriptConfigOrThrow(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypal)throw new p}return this.window.paypal})}getPayPalFastlaneSdk(e,t,n,i){return v(this,void 0,void 0,function*(){if(!this.window.paypalFastlaneSdk){const r=this.getPayPalFastlaneSdkConfiguration(e,t,n,i);if(yield this.loadPayPalSdk(r),!this.window.paypalFastlaneSdk)throw new p}return this.window.paypalFastlaneSdk})}getPayPalGooglePaySdk(e,t,n,i,r){return v(this,void 0,void 0,function*(){if(!this.window.paypalGooglePay||r){const r=this.getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i);yield this.loadPayPalSdk(r)}if(!this.window.paypalGooglePay)throw new p;return this.window.paypalGooglePay})}getPayPalApmsSdk(e,t,n){return v(this,void 0,void 0,function*(){if(!this.window.paypalApms){const i=this.getPayPalApmSdkConfiguration(e,t,n);if(yield this.loadPayPalSdk(i),!this.window.paypalApms)throw new p}return this.window.paypalApms})}getPayPalMessages(e,t,n){return v(this,void 0,void 0,function*(){if(!this.window.paypalMessages){const i=this.getPayPalSdkMessagesConfiguration(e,t,n);yield this.loadPayPalSdk(i)}if(!this.window.paypalMessages)throw new p;return this.window.paypalMessages})}loadPayPalSdk({options:e,attributes:t}){return v(this,void 0,void 0,function*(){const n=this.transformConfig(e),i=this.transformConfig(t),r=`https://www.paypal.com/sdk/js?${new URLSearchParams(n).toString()}`;yield this.scriptLoader.loadScript(r,{async:!0,attributes:i})})}getPayPalSdkScriptConfigOrThrow(e,t,n,i=!0){const{id:r,clientToken:o,initializationData:a}=e;if(!a||!a.clientId)throw new h(d.MissingPaymentMethod);const{intent:s,clientId:l,merchantId:c,buyerCountry:u,attributionId:p,isVenmoEnabled:y,isHostedCheckoutEnabled:m,isPayPalCreditAvailable:v,isDeveloperModeApplicable:f,availableAlternativePaymentMethods:S=[],enabledAlternativePaymentMethods:I=[],isGooglePayEnabled:_}=a,P=m||i,b=\"paypalcommercecreditcards\"===r||\"bigcommerce_payments_creditcards\"===r,C=b?[\"card\"]:[],w=v?[\"credit\",\"paylater\"]:[],O=y?[\"venmo\"]:[],z=_?[\"googlepay\"]:[],A=i?[\"card-fields\"]:[],E=[...b?[]:[\"card\"],...v?[]:[\"credit\",\"paylater\"],...y?[]:[\"venmo\"],...S.filter(e=>!I.includes(e))],T=[...C,...w,...O,...I],k=g(n);return{options:Object.assign(Object.assign({\"client-id\":l,\"merchant-id\":c,\"enable-funding\":T.length>0?T:void 0,\"disable-funding\":E.length>0?E:void 0,commit:P,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...z,...A],currency:t,intent:s},f&&{\"buyer-country\":u}),k&&{locale:k}),attributes:{\"data-partner-attribution-id\":p,\"data-client-token\":o}}}getPayPalFastlaneSdkConfiguration(e,t,n,i){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new h(d.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:l,attributionId:c}=o,u=g(i);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":l,commit:!0,components:[\"fastlane\",\"buttons\",\"payment-fields\",\"hosted-fields\",\"three-domain-secure\"],currency:t},u&&{locale:u}),{intent:a}),attributes:{\"data-client-metadata-id\":n.replace(/-/g,\"\"),\"data-namespace\":\"paypalFastlaneSdk\",\"data-partner-attribution-id\":c,\"data-sdk-client-token\":r}}}getPayPalGooglePaySdkScriptConfigOrThrow(e,t,n,i=!0){const{clientToken:r,initializationData:o}=e;if(!o||!o.clientId)throw new h(d.MissingPaymentMethod);const{intent:a,clientId:s,merchantId:l,buyerCountry:c,attributionId:u,isHostedCheckoutEnabled:p,isDeveloperModeApplicable:y}=o,m=p||i,v=g(n);return{options:Object.assign(Object.assign({\"client-id\":s,\"merchant-id\":l,commit:m,components:[\"googlepay\"],currency:t,intent:a},y&&{\"buyer-country\":c}),v&&{locale:v}),attributes:{\"data-partner-attribution-id\":u,\"data-client-token\":r,\"data-namespace\":\"paypalGooglePay\"}}}getPayPalApmSdkConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new h(d.MissingPaymentMethod);const{intent:r,clientId:o,merchantId:a,buyerCountry:s,attributionId:l,isDeveloperModeApplicable:c,availableAlternativePaymentMethods:u=[],enabledAlternativePaymentMethods:p=[]}=i,y=p,m=u.filter(e=>!p.includes(e)),v=g(n);return{options:Object.assign(Object.assign({\"client-id\":o,\"merchant-id\":a,\"enable-funding\":y.length>0?y:void 0,\"disable-funding\":m.length>0?m:void 0,commit:!0,components:[\"buttons\",\"payment-fields\"],currency:t,intent:r},c&&{\"buyer-country\":s}),v&&{locale:v}),attributes:{\"data-partner-attribution-id\":l,\"data-namespace\":\"paypalApms\"}}}getPayPalSdkMessagesConfiguration(e,t,n){const{initializationData:i}=e;if(!i||!i.clientId)throw new h(d.MissingPaymentMethod);const{clientId:r,merchantId:o,attributionId:a,isDeveloperModeApplicable:s,buyerCountry:l}=i,c=g(n);return{options:Object.assign(Object.assign({\"client-id\":r,\"merchant-id\":o,components:[\"messages\"],currency:t},s&&{\"buyer-country\":l}),c&&{locale:c}),attributes:{\"data-namespace\":\"paypalMessages\",\"data-partner-attribution-id\":a}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}function S(){return new f(e())}class I extends u{constructor(e){super(e||\"An unexpected error has occurred during buy now cart creation process. Please try again later.\"),this.name=\"BuyNowCartCreationError\",this.type=\"buy_now_cart_creation_error\"}}const _={body:{},headers:{},status:0};class P extends u{constructor(e,{message:t,errors:n}={}){const{body:i,headers:r,status:o}=e||_;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=i,this.headers=r,this.status=o,this.errors=n||[]}}var b,C,w,O,z,A,E,T,k,M,N;!function(e){e.BuyNow=\"BUY_NOW\"}(b||(b={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(C||(C={})),function(e){e.Always=\"SCA_ALWAYS\"}(w||(w={})),function(e){e.Succeeded=\"succeeded\",e.Cancelled=\"cancelled\",e.Errored=\"errored\"}(O||(O={})),function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(z||(z={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(A||(A={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(E||(E={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(T||(T={})),function(e){e.SUCCEEDED=\"succeeded\",e.FAILED=\"failed\",e.CANCELED=\"canceled\",e.UNRECOGNIZED=\"unrecognized\"}(k||(k={})),function(e){e.OXXO=\"oxxo\"}(M||(M={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(N||(N={}));var F=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class B{constructor(e,t,n,i){this.formPoster=e,this.paymentIntegrationService=t,this.paypalRequestSender=n,this.paypalSdkLoader=i}loadPayPalSdk(e,t,n,i){return F(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e),s=r.getLocale();return this.paypalSdk=yield this.paypalSdkLoader.getPayPalSDK(a,o,s,n,i),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new p;return this.paypalSdk}createBuyNowCartOrThrow(e){return F(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new h(d.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new I}})}createOrder(e,t){return F(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i}=yield this.paypalRequestSender.createOrder(e,Object.assign({cartId:n},t));return i})}createOrderCardFields(e,t){return F(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i,setupToken:r}=yield this.paypalRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:i},r?{setupToken:r}:{})})}updateOrder(e,t,n,i){return F(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=r.getCartOrThrow();let a;i||(a=r.getConsignmentsOrThrow()[0]);try{yield this.paypalRequestSender.updateOrder(e,Object.assign(Object.assign({availableShippingOptions:i?[]:null==a?void 0:a.availableShippingOptions,cartId:o.id,selectedShippingOption:i?null:null==a?void 0:a.selectedShippingOption},t?{methodId:t}:{}),n?{orderId:n}:{}))}catch(e){throw new P}})}getOrderStatus(e,t){return F(this,void 0,void 0,function*(){try{const{status:n}=yield this.paypalRequestSender.getOrderStatus(e,t);return n}catch(e){throw new P}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new h(d.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===b.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return F(this,void 0,void 0,function*(){const i={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:i},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],i=n.find(e=>e.isRecommended),r=(e?n.find(t=>t.id===e):n.find(e=>{if(t.selectedShippingOption){const n=t.selectedShippingOption.id;return e.id===n}return!1}))||i||n[0];if(!r)throw new Error(\"Your order can't be shipped to this address\");return r}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:i,name:{full_name:r}}=n[0].shipping,[o,...a]=r.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:i.address_line_1,address2:i.address_line_2,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})}getValidButtonStyle(e={}){const{color:t,height:n,label:i,shape:o}=e,a={color:t&&E[t]?t:void 0,height:this.getValidHeight(n),label:i&&A[i]?i:void 0,shape:o&&T[o]?o:void 0};return s(a,r)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}const D=\"This API endpoint is for internal use only and may change in the future\";var U;!function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"}(U||(U={}));const x=U,j={\"X-Checkout-SDK-Version\":\"1.916.1\"};var L=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class V{constructor(e){this.requestSender=e}createOrder(e,t){return L(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":D,\"Content-Type\":x.Json},j);return(yield this.requestSender.post(n,{headers:r,body:i})).body})}updateOrder(e,t){return L(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":D,\"Content-Type\":x.Json},j);return(yield this.requestSender.put(n,{headers:r,body:i})).body})}getOrderStatus(e,t){return L(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":D,\"Content-Type\":x.Json},j);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body})}}const R=e=>{const{getHost:i}=e.getState();return new B(t(),e,new V(n({host:i()})),S())},G={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},K=\"embedded-checkout-loading-indicator-rotation\";class H{constructor(e){this.styles=Object.assign(Object.assign({},G),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${K} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(n=>{e.style.setProperty(n,t[n])})}defineAnimation(){var e;if(document.getElementById(K))return;const t=document.createElement(\"style\");t.id=K,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${K} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}class $ extends u{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class q extends ${constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class Y extends P{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class W extends u{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}function Z(e){return!(\"object\"!=typeof e||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument)}function J(e){return Boolean(e.instrumentId)}const X=function({styles:e}){const t={};return e.color&&(t.color=e.color),e.layout&&(t.layout=e.layout),(e[\"logo-type\"]||e[\"logo-position\"])&&(t.logo={},e[\"logo-type\"]&&(t.logo.type=e[\"logo-type\"]),e[\"logo-position\"]&&(t.logo.position=e[\"logo-position\"])),e.ratio&&(t.ratio=e.ratio),(e[\"text-color\"]||e[\"text-size\"])&&(t.text={},e[\"text-color\"]&&(t.text.color=e[\"text-color\"]),e[\"text-size\"]&&(t.text.size=+e[\"text-size\"])),t};function Q(e){return\"object\"==typeof e&&null!==e&&\"bigpayToken\"in e&&\"defaultInstrument\"in e&&\"provider\"in e&&\"trustedShippingAddress\"in e&&\"method\"in e&&\"type\"in e}var ee=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class te{constructor(e,t,n,i){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.payPalSdkScriptLoader=n,this.loadingIndicator=i}initialize(e){var t;return ee(this,void 0,void 0,function*(){const{methodId:n,paypalcommerce:i}=e||{};if(this.paypalcommerce=i,!n)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new $('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(n);const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(n),{container:a,bannerContainerId:s}=i,{orderId:d,paypalBNPLConfiguration:l=[],isPayPalCreditAvailable:c}=o.initializationData||{};if(void 0!==s){if(!document.getElementById(s))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=null==l?void 0:l.find(({id:e})=>\"checkout\"===e);if(c||!(null==e?void 0:e.status))return;const t=yield this.payPalSdkScriptLoader.getPayPalMessages(o,r.getCartOrThrow().currency.code,r.getLocale());return t&&\"function\"==typeof(null==t?void 0:t.Messages)?this.renderMessages(t,s,e):void console.error(\"[BC PayPalCommerce PayLater]: banner could not be rendered, due to issues with loading PayPal SDK\")}d?this.orderId=null===(t=o.initializationData)||void 0===t?void 0:t.orderId:(this.loadingIndicatorContainer=null==a?void 0:a.split(\"#\")[1],yield this.paypalIntegrationService.loadPayPalSdk(n),i.onInit&&\"function\"==typeof i.onInit&&i.onInit(()=>this.renderButton(n,i)),(void 0===i.shouldRenderPayPalButtonOnInitialization||i.shouldRenderPayPalButtonOnInitialization)&&this.renderButton(n,i))})}execute(e,t){var n,i;return ee(this,void 0,void 0,function*(){const{payment:r}=e,o=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{onError:a}=this.paypalcommerce||{};if(!r)throw new q([\"payment\"]);const{methodId:s,paymentData:d}=r;if(this.isPayPalVaultedInstrumentPaymentData(d)&&!this.orderId&&(this.orderId=yield this.createOrder()),!this.orderId)throw new Y;const l=this.isPayPalVaultedInstrumentPaymentData(d)?this.prepareVaultedInstrumentPaymentPayload(s,this.orderId,d):this.preparePaymentPayload(s,this.orderId,d);try{yield this.paymentIntegrationService.submitOrder(o,t),yield this.paymentIntegrationService.submitPayment(l)}catch(e){if(function(e){var t;return(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)&&\"offsite_redirect\"===(null===(t=e.body.additional_action_required)||void 0===t?void 0:t.type)}(e)){const t=null===(i=null===(n=e.body.additional_action_required)||void 0===n?void 0:n.data)||void 0===i?void 0:i.redirect_url;return new Promise(()=>window.location.replace(t))}return this.isProviderError(e)&&(yield this.paypalIntegrationService.loadPayPalSdk(r.methodId),yield new Promise((e,t)=>{var n;this.paypalcommerce&&(null===(n=this.paypalButton)||void 0===n||n.close(),this.renderButton(r.methodId,this.paypalcommerce),this.handleError(new Error(\"INSTRUMENT_DECLINED\"),a)),t()})),this.handleError(e,a),Promise.reject()}})}finalize(){return Promise.reject(new W)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}prepareVaultedInstrumentPaymentPayload(e,t,n){const{instrumentId:i,shouldSetAsDefaultInstrument:r}=n,o=!this.isTrustedVaultingFlow(n);return o?{methodId:e,paymentData:{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t}}}}:{methodId:e,paymentData:{instrumentId:i,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t},bigpay_token:{token:i}}}}}preparePaymentPayload(e,t,n){const{shouldSaveInstrument:i=!1,shouldSetAsDefaultInstrument:r=!1}=Z(n)?n:{};return{methodId:e,paymentData:{shouldSaveInstrument:i,shouldSetAsDefaultInstrument:r,formattedPayload:{paypal_account:{order_id:t}}}}}renderButton(e,t){const n=this.paypalIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:d,onValidate:l,submitForm:c}=t;if(!a)throw new $('Unable to initialize payment because \"container\" argument is not provided.');const u=this.getSmartButtonContainerId(a);if(!document.getElementById(u))throw new $(`Unable to initialize payment because element with id ${u} does not exist.`);const p={fundingSource:n.FUNDING.PAYPAL,style:this.paypalIntegrationService.getValidButtonStyle(o),createOrder:()=>this.createOrder(),onClick:(e,t)=>this.handleClick(t,l),onApprove:e=>this.handleApprove(e,c),onError:e=>this.handleError(e,s),onCancel:()=>this.toggleLoadingIndicator(!1)};this.paypalButton=n.Buttons(p),this.paypalButton.isEligible()&&(d&&\"function\"==typeof d&&d(),this.paypalButton.render(a))}handleClick(e,t){return ee(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;return null==t?void 0:t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,null==t||t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createOrder(){return ee(this,void 0,void 0,function*(){const e=this.getFieldsValues();return this.paypalIntegrationService.createOrder(\"paypalcommercecheckout\",{shouldSaveInstrument:(null==e?void 0:e.shouldSaveInstrument)||!1})})}getFieldsValues(){const{getFieldsValues:e}=this.paypalcommerce||{};return\"function\"==typeof e?e():void 0}isTrustedVaultingFlow(e){if(e&&J(e)){const t=this.paymentIntegrationService.getState().getInstruments(),n=null==t?void 0:t.find(t=>Q(t)&&t.bigpayToken===e.instrumentId);return!(Q(n)&&!n.trustedShippingAddress)}return!1}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isPayPalVaultedInstrumentPaymentData(e){return!!e&&J(e)&&Z(e)}renderMessages(e,t,n){const i={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:X(n)};e.Messages(i).render(`#${t}`)}isProviderError(e){var t,n,i;return!!function(e){return\"object\"==typeof e&&null!==e&&\"errors\"in e}(e)&&\"INSTRUMENT_DECLINED\"===(null===(i=null===(n=((null===(t=null==e?void 0:e.errors)||void 0===t?void 0:t.filter(e=>e.provider_error))||[])[0])||void 0===n?void 0:n.provider_error)||void 0===i?void 0:i.code)}getSmartButtonContainerId(e){var t;return null!==(t=e.split(\"#\")[1])&&void 0!==t?t:e}}const ne=c(t=>new te(t,R(t),new f(e()),new H({containerStyles:y})),[{id:\"paypalcommerce\"}]);class ie extends u{constructor(e){super(e||\"Not implemented.\"),this.name=\"NotImplementedError\",this.type=\"not_implemented\"}}var re=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class oe{constructor(e,t,n,i){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.loadingIndicator=n,this.payPalSdkScriptLoader=i}initialize(e){return re(this,void 0,void 0,function*(){const{methodId:t,paypalcommerce:n,paypalcommercecredit:i}=e||{},r=i||n;if(!t)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new $('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(t);const o=this.paymentIntegrationService.getState(),a=o.getPaymentMethodOrThrow(t),{paypalBNPLConfiguration:s=[],orderId:d}=a.initializationData||{},{bannerContainerId:l,container:c}=r;if(void 0!==l){if(!document.getElementById(l))return void console.error(\"Unable to create banner without valid banner container ID.\");const e=s&&s.find(({id:e})=>\"checkout\"===e);if(!(null==e?void 0:e.status))return;const t=yield this.payPalSdkScriptLoader.getPayPalMessages(a,o.getCartOrThrow().currency.code,o.getLocale());return this.renderMessages(t,l,e)}d?this.orderId=d:(yield this.paypalIntegrationService.loadPayPalSdk(t),this.loadingIndicatorContainer=null==c?void 0:c.split(\"#\")[1],this.renderButton(t,r))})}execute(e,t){return re(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new q([\"payment\"]);if(!this.orderId)throw new Y;yield this.paymentIntegrationService.submitOrder(i,t),yield this.paypalIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new W)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){if(!(null==t?void 0:t.container))throw new $('Unable to initialize payment because \"container\" argument is not provided.');const n=this.paypalIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:d,onValidate:l,submitForm:c}=t,u=[n.FUNDING.PAYLATER,n.FUNDING.CREDIT];let p=!1;u.forEach(e=>{if(p)return;const t={fundingSource:e,style:this.paypalIntegrationService.getValidButtonStyle(o),createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercecreditcheckout\"),onClick:(e,t)=>this.handleClick(t,l),onApprove:e=>this.handleApprove(e,c),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.paypalButton=n.Buttons(t),this.paypalButton.isEligible()||e!==n.FUNDING.PAYLATER){if(!this.paypalButton.isEligible()&&e===n.FUNDING.CREDIT)throw new ie(`PayPal ${e} is not available for your region. Please use PayPal Checkout instead.`);d&&\"function\"==typeof d&&d(),this.paypalButton.render(a),p=!0}})}handleClick(e,t){return re(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;if(t&&\"function\"==typeof t)return t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,t&&\"function\"==typeof t&&t()}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}renderMessages(e,t,n){const i={amount:this.paymentIntegrationService.getState().getCheckoutOrThrow().outstandingBalance,placement:\"payment\",style:X(n)};e.Messages(i).render(`#${t}`)}}const ae=c(e=>new oe(e,R(e),new H({containerStyles:y}),S()),[{id:\"paypalcommercecredit\"}]);var se=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class de{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.loadingIndicator=n}initialize(e){var t,n;return se(this,void 0,void 0,function*(){const{methodId:i,paypalcommerce:r,paypalcommercevenmo:o}=e||{},a=o||r;if(!i)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!a)throw new $('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');yield this.paymentIntegrationService.loadPaymentMethod(i);const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i);(null===(t=s.initializationData)||void 0===t?void 0:t.orderId)?this.orderId=null===(n=s.initializationData)||void 0===n?void 0:n.orderId:(yield this.paypalIntegrationService.loadPayPalSdk(i),this.loadingIndicatorContainer=a.container.split(\"#\")[1],this.renderButton(i,a))})}execute(e,t){return se(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new q([\"payment\"]);if(!this.orderId)throw new Y;yield this.paymentIntegrationService.submitOrder(i,t),yield this.paypalIntegrationService.submitPayment(n.methodId,this.orderId)})}finalize(){return Promise.reject(new W)}deinitialize(){var e;return this.orderId=void 0,null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}renderButton(e,t){const n=this.paypalIntegrationService.getPayPalSdkOrThrow(),i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:r}=i.initializationData||{},{checkoutPaymentButtonStyles:o}=r||{},{container:a,onError:s,onRenderButton:d,onValidate:l,submitForm:c}=t,u={fundingSource:n.FUNDING.VENMO,style:this.paypalIntegrationService.getValidButtonStyle(o),createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercevenmocheckout\"),onClick:(e,t)=>this.handleClick(t,l),onApprove:e=>this.handleApprove(e,c),onCancel:()=>this.toggleLoadingIndicator(!1),onError:e=>this.handleError(e,s)};if(this.paypalButton=n.Buttons(u),!this.paypalButton.isEligible())throw new ie(\"PayPal Venmo is not available for your region. Please use PayPal Checkout instead.\");d&&\"function\"==typeof d&&d(),this.paypalButton.render(a)}handleClick(e,t){return se(this,void 0,void 0,function*(){const{resolve:n,reject:i}=e;return t(()=>(this.toggleLoadingIndicator(!0),n()),i)})}handleApprove({orderID:e},t){this.orderId=e,t(),this.toggleLoadingIndicator(!1)}handleError(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const le=c(e=>new de(e,R(e),new H({styles:{backgroundColor:\"black\"}})),[{id:\"paypalcommercevenmo\"}]),ce={\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"};class ue extends P{constructor(e){super(e,{message:\"The request has timed out or aborted.\"}),this.name=\"TimeoutError\",this.type=\"timeout\"}}var pe,he,ye,me,ge,ve,fe;!function(e){e.Possible=\"POSSIBLE\",e.No=\"NO\",e.Unknown=\"UNKNOWN\",e.Yes=\"YES\"}(pe||(pe={})),function(e){e.AUTHORIZE=\"authorize\",e.CAPTURE=\"capture\"}(he||(he={})),function(e){e.paypal=\"paypal\",e.checkout=\"checkout\",e.buynow=\"buynow\",e.pay=\"pay\",e.installment=\"installment\"}(ye||(ye={})),function(e){e.gold=\"gold\",e.blue=\"blue\",e.silver=\"silver\",e.black=\"black\",e.white=\"white\"}(me||(me={})),function(e){e.pill=\"pill\",e.rect=\"rect\"}(ge||(ge={})),function(e){e.OXXO=\"oxxo\",e.IDEAL=\"ideal\"}(ve||(ve={})),function(e){e.Approved=\"APPROVED\",e.Created=\"CREATED\",e.PayerActionRequired=\"PAYER_ACTION_REQUIRED\",e.PollingStop=\"POLLING_STOP\",e.PollingError=\"POLLING_ERROR\"}(fe||(fe={}));var Se=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Ie{constructor(e,t,n,i,r=3e3,a=3e5){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t,this.paypalSdkScriptLoader=n,this.loadingIndicator=i,this.pollingInterval=r,this.maxPollingIntervalTime=a,this.pollingTimer=0,this.stopPolling=o,this.isOrderApprovedProcessing=!1}initialize(e){return Se(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,paypalcommerce:i,paypalcommercealternativemethods:r}=e,o=r||i;if(this.paypalcommercealternativemethods=r,!n)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new $('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!o)throw new $('Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument is not provided.');const a=this.paymentIntegrationService.getState(),s=a.getPaymentMethodOrThrow(n,t),{orderId:d,shouldRenderFields:l}=s.initializationData||{},c=a.getStoreConfigOrThrow().checkoutSettings.features;this.isOrderApprovedProcessing=function(e,t,n=!0){var i;return null!==(i=e[\"PAYPAL-5431.order_approved_processing\"])&&void 0!==i?i:n}(c,0,!1),d?this.orderId=d:(this.paypalApms=yield this.paypalSdkScriptLoader.getPayPalApmsSdk(s,a.getCartOrThrow().currency.code,a.getLocale()),this.loadingIndicatorContainer=o.container.split(\"#\")[1],this.renderButton(n,t,o),l&&this.renderFields(n,o))})}execute(e,t){return Se(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new q([\"payment\"]);const{methodId:r,gatewayId:o}=n;if(!this.orderId)throw new Y;this.isOrderApprovedProcessing||\"ideal\"!==r||(yield new Promise((e,t)=>{this.initializePollingMechanism(r,e,t,o)})),this.isNonInstantPaymentMethod(r)&&(r!==ve.IDEAL||this.isOrderApprovedProcessing)||(yield this.paymentIntegrationService.submitOrder(i,t)),yield this.paypalCommerceIntegrationService.submitPayment(r,this.orderId,o)})}finalize(){return Promise.reject(new W)}deinitialize(){var e;return this.orderId=void 0,this.isOrderApprovedProcessing||this.resetPollingMechanism(),null===(e=this.paypalButton)||void 0===e||e.close(),Promise.resolve()}initializePollingMechanism(e,t,n,i){return Se(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.paypalCommerceIntegrationService.getOrderStatus(null!=i?i:\"paypalcommerce\"),o=r===fe.Approved,a=r===fe.PollingError;if(o)return this.deinitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,i);yield this.reinitializeStrategy({methodId:e,gatewayId:i,paypalcommercealternativemethods:this.paypalcommercealternativemethods}),this.handleError(new ue)}catch(e){n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}reinitializeStrategy(e){return Se(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}handleError(e){const{onError:t}=this.paypalcommercealternativemethods||{};this.isOrderApprovedProcessing||this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderButton(e,t,n){const i=this.getPaypalAmpsSdkOrThrow(),r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t),{buttonStyle:o}=r.initializationData||{},{container:a,onError:s,onRenderButton:d,submitForm:l}=n,c={fundingSource:e,style:this.paypalCommerceIntegrationService.getValidButtonStyle(o),onInit:(e,t)=>n.onInitButton(t),createOrder:()=>this.onCreateOrder(e,t,n),onApprove:e=>this.handleApprove(e,l),onCancel:()=>{this.toggleLoadingIndicator(!1),this.deinitializePollingMechanism()},onError:e=>{this.deinitializePollingMechanism(),this.handleFailure(e,s)},onClick:(e,t)=>Se(this,void 0,void 0,function*(){return n.onValidate(t.resolve,t.reject)})};this.paypalButton=i.Buttons(c),this.paypalButton.isEligible()&&(d&&\"function\"==typeof d&&d(),this.paypalButton.render(a))}onCreateOrder(e,t,n){var i;return Se(this,void 0,void 0,function*(){const{onValidate:r}=n;yield r(()=>(this.toggleLoadingIndicator(!0),()=>Promise.resolve()),o);const a=yield this.paypalCommerceIntegrationService.createOrder(\"paypalcommercealternativemethodscheckout\");if(this.isNonInstantPaymentMethod(e)&&(e===ve.IDEAL&&this.isOrderApprovedProcessing||e===ve.OXXO)){const n={useStoreCredit:!1},r={params:{methodId:e,gatewayId:t}};if(yield this.paymentIntegrationService.submitOrder(n,r),e===ve.IDEAL){const t=this.paymentIntegrationService.getState(),n=null===(i=t.getOrder())||void 0===i?void 0:i.orderId;yield this.paypalCommerceIntegrationService.updateOrder(\"paypalcommercealternativemethods\",e,n)}yield this.paypalCommerceIntegrationService.submitPayment(e,a,t)}return a})}handleApprove({orderID:e},t){this.orderId=e,t()}handleFailure(e,t){this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}renderFields(e,t){const n=this.getPaypalAmpsSdkOrThrow(),i=this.paymentIntegrationService.getState(),{firstName:r,lastName:o,email:a}=i.getBillingAddressOrThrow(),{apmFieldsContainer:s,apmFieldsStyles:d}=t;if(!s)throw new $('Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument should contain \"apmFieldsContainer\".');const l=document.querySelector(s);l&&(l.innerHTML=\"\");const c={fundingSource:e,style:d||{},fields:{name:{value:`${r} ${o}`},email:{value:a}}};n.PaymentFields(c).render(s)}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}isNonInstantPaymentMethod(e){return e.toUpperCase()in ve}getPaypalAmpsSdkOrThrow(){if(!this.paypalApms)throw new p;return this.paypalApms}}const _e=c(e=>new Ie(e,R(e),S(),new H({containerStyles:ce})),[{gateway:\"paypalcommercealternativemethods\"}]);var Pe;!function(e){e.CVV=\"cvv\",e.PAN=\"pan\"}(Pe||(Pe={}));class be{static get(e){const t=`${encodeURIComponent(`${e}`)}=`,n=document.cookie;let i=null;const r=n.indexOf(t);if(r>-1){let e=n.indexOf(\";\",r);-1===e&&(e=n.length),i=decodeURIComponent(n.substring(r+t.length,e))}return i}static set(e,t,n={secure:!0}){let i=`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;const{expires:r,path:o,domain:a,secure:s}=n;if(r)i+=`; expires=${r.toUTCString()}`;else{const e=new Date,t=60;e.setTime(e.getTime()+60*t*1e3),i+=`; expires=${e.toUTCString()}`}o&&(i+=`; path=${o}`),a&&(i+=`; domain=${a}`),s&&(i+=\"; secure\"),document.cookie=i}static remove(e,t){be.set(e,\"\",Object.assign({expires:new Date(0)},t))}}var Ce,we=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Oe{constructor(){this.window=window}initializePayPalFastlane(e,t,n){return we(this,void 0,void 0,function*(){if(t&&(window.localStorage.setItem(\"fastlaneEnv\",\"sandbox\"),window.localStorage.setItem(\"axoEnv\",\"sandbox\")),!this.window.paypalFastlane){const t={root:{backgroundColorPrimary:\"transparent\"}};this.window.paypalFastlane=yield e.Fastlane({styles:n||t})}return this.window.paypalFastlane})}getPayPalFastlaneOrThrow(){if(!this.window.paypalFastlane)throw new p;return this.window.paypalFastlane}lookupCustomerOrThrow(e){return we(this,void 0,void 0,function*(){return this.getPayPalFastlaneOrThrow().identity.lookupCustomerByEmail(e)})}triggerAuthenticationFlowOrThrow(e){return we(this,void 0,void 0,function*(){return e?this.getPayPalFastlaneOrThrow().identity.triggerAuthenticationFlow(e):{}})}updateStorageSessionId(e){const t=new Date;t.setDate(t.getDate()+14);const n={expires:t,secure:!0};be.set(\"bc-fastlane-sessionId\",e,n)}removeStorageSessionId(){be.remove(\"bc-fastlane-sessionId\")}getStorageSessionId(){return be.get(\"bc-fastlane-sessionId\")||\"\"}mapPayPalFastlaneProfileToBcCustomerData(e,t){var n,i,r;const{authenticationState:o,profileData:a}=t,s=null===(r=null===(i=null===(n=null==a?void 0:a.card)||void 0===n?void 0:n.paymentSource)||void 0===i?void 0:i.card)||void 0===r?void 0:r.billingAddress,d=null==a?void 0:a.shippingAddress,l=null==a?void 0:a.name,c=null==a?void 0:a.card,u=d?this.mapPayPalToBcAddress(d.address,d.name,d.phoneNumber):void 0,p=s&&l?this.mapPayPalToBcAddress(s,l,null==d?void 0:d.phoneNumber):void 0,h=c?this.mapPayPalToBcInstrument(e,c):[],y=this.filterAddresses([u,p]);return{authenticationState:o||k.UNRECOGNIZED,addresses:y,billingAddress:p,shippingAddress:u,instruments:h}}mapPayPalToBcInstrument(e,t){const{id:n,paymentSource:i}=t,{brand:r,expiry:o,lastDigits:a}=i.card,[s,d]=o.split(\"-\");return[{bigpayToken:n,brand:r,defaultInstrument:!1,expiryMonth:d,expiryYear:s,iin:\"\",last4:a,method:e,provider:e,trustedShippingAddress:!1,untrustedShippingCardVerificationMode:Pe.PAN,type:\"card\"}]}mapBcToPayPalAddress(e){return{company:(null==e?void 0:e.company)||\"\",addressLine1:(null==e?void 0:e.address1)||\"\",addressLine2:(null==e?void 0:e.address2)||\"\",adminArea1:(null==e?void 0:e.stateOrProvinceCode)||(null==e?void 0:e.stateOrProvince)||\"\",adminArea2:(null==e?void 0:e.city)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\"}}mapPayPalToBcAddress(e,t,n,i){const[r,o]=t.fullName.split(\" \"),a=(null==n?void 0:n.nationalNumber)||\"\",s=(null==n?void 0:n.countryCode)||\"\";return{id:Date.now(),type:\"paypal-address\",firstName:t.firstName||r||\"\",lastName:t.lastName||o||\"\",company:e.company||\"\",address1:e.addressLine1,address2:e.addressLine2||\"\",city:e.adminArea2,stateOrProvince:e.adminArea1,stateOrProvinceCode:e.adminArea1,country:e.countryCode||\"\",countryCode:e.countryCode||\"\",postalCode:e.postalCode,phone:s+a,customFields:i||[]}}filterAddresses(e){return e.reduce((e,t)=>t?e.some(e=>this.isEqualAddresses(e,t))?e:[...e,t]:e,[])}isEqualAddresses(e,t){return i(this.normalizeAddress(e),this.normalizeAddress(t))}normalizeAddress(e){return a(e,[\"id\",\"phone\"])}}function ze(){return new Oe}!function(e){e.CardCode=\"cardCode\",e.CardCodeVerification=\"cardCodeVerification\",e.CardExpiry=\"cardExpiry\",e.CardName=\"cardName\",e.CardNumber=\"cardNumber\",e.CardNumberVerification=\"cardNumberVerification\",e.CardExpiryVerification=\"cardExpiryVerification\"}(Ce||(Ce={}));const Ae=Ce;function Ee(e){return Ae.CardNumber in e&&Ae.CardName in e&&Ae.CardExpiry in e}function Te(e){return Ae.CardNumberVerification in e&&Ae.CardCodeVerification in e&&Ae.CardExpiryVerification in e}class ke extends u{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}var Me;!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(Me||(Me={}));class Ne extends u{constructor(e){super(function(e){switch(e){case Me.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case Me.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case Me.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case Me.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class Fe extends u{constructor(e,t){super(t||\"Unable to proceed because the payment form contains invalid data.\"),this.details=e,this.name=\"PaymentInvalidFormError\",this.type=\"payment_invalid_form\"}}var Be=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class De{constructor(e,t,n,i){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalSdkScriptLoader=n,this.paypalFastlaneUtils=i}initialize(e){return Be(this,void 0,void 0,function*(){const{methodId:t,paypalcommercecreditcards:n,paypalcommerce:i}=e,r=n||i,{form:o,onCreditCardFieldsRenderingError:a,onLoadComplete:s}=r||{};if(!t)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!o)throw new $('Unable to proceed because \"options.paypalcommercecreditcards.form\" argument is not provided.');this.hostedFormOptions=o,this.isCreditCardForm=Ee(o.fields),this.isCreditCardVaultedForm=Te(o.fields)&&!this.hasUndefinedValues(),yield this.paymentIntegrationService.loadPaymentMethod(t),yield this.paypalIntegrationService.loadPayPalSdk(t,void 0,!0,!0),(this.isCreditCardForm||this.isCreditCardVaultedForm)&&(yield this.initializeFields(o,a)),null==s||s(),this.shouldInitializePayPalFastlane(t)&&(yield this.initializePayPalFastlaneOrThrow(t))})}execute(e,t){return Be(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{methodId:r,paymentData:o}=n||{};if(!n||!r)throw new q([\"payment\"]);if(this.executionPaymentData=o,this.isCreditCardForm||this.isCreditCardVaultedForm)yield this.validateHostedFormOrThrow(),yield this.submitHostedForm();else{const{orderId:e}=yield this.paypalIntegrationService.createOrderCardFields(\"paypalcommercecreditcardscheckout\",this.getInstrumentParams());this.returnedOrderId=e}const a=this.preparePaymentPayload(r,o,this.returnedOrderId,this.returnedVaultedToken);yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment(a)})}finalize(){return Promise.reject(new W)}deinitialize(){var e,t,n,i;return Be(this,void 0,void 0,function*(){return yield null===(e=this.cvvField)||void 0===e?void 0:e.close(),yield null===(t=this.expiryField)||void 0===t?void 0:t.close(),yield null===(n=this.numberField)||void 0===n?void 0:n.close(),yield null===(i=this.nameField)||void 0===i?void 0:i.close(),Promise.resolve()})}preparePaymentPayload(e,t,n,i){const{shouldSaveInstrument:o=!1,shouldSetAsDefaultInstrument:a=!1}=Z(t)?t:{},d=t&&J(t)?t.instrumentId:void 0,l=s({verification_nonce:i,token:d},r);return{methodId:e,paymentData:{shouldSaveInstrument:o,shouldSetAsDefaultInstrument:a,instrumentId:d,formattedPayload:Object.assign(Object.assign({},i||d?{bigpay_token:l}:{}),n?{card_with_order:{order_id:n}}:{})}}}initializeFields(e,t){return Be(this,void 0,void 0,function*(){const{fields:n,styles:i}=e,r=this.paypalIntegrationService.getPayPalSdkOrThrow(),o=this.getExecuteCallback(n),a=Object.assign({style:this.getInputStyles(i),onApprove:({orderID:e,vaultSetupToken:t,liabilityShift:n})=>{if(n===pe.No||n===pe.Unknown)throw new Error;return this.handleApprove({orderID:e,vaultSetupToken:t})},onError:()=>{throw new ke},inputEvents:{onChange:t=>this.onChangeHandler(e,t),onFocus:t=>this.onFocusHandler(e,t),onBlur:t=>this.onBlurHandler(e,t),onInputSubmitRequest:t=>this.onInputSubmitRequest(e,t)}},o);if(this.cardFields=yield r.CardFields(a),!this.cardFields.isEligible())throw new Ne(Me.PaymentNotInitialized);try{this.stylizeInputContainers(n),Ee(n)&&(yield this.renderFields(n)),Te(n)&&(yield this.renderVaultedFields(n))}catch(e){\"function\"==typeof t&&t(e)}})}getExecuteCallback(e){return Te(e)?this.createVaultSetupTokenCallback():this.createOrderCallback()}createVaultSetupTokenCallback(){return{createVaultSetupToken:()=>Be(this,void 0,void 0,function*(){const{setupToken:e}=(yield this.paypalIntegrationService.createOrderCardFields(\"paypalcommercecreditcardscheckout\",Object.assign(Object.assign({},this.getInstrumentParams()),{setupToken:!0})))||{};return e})}}createOrderCallback(){return{createOrder:()=>Be(this,void 0,void 0,function*(){const{orderId:e}=(yield this.paypalIntegrationService.createOrderCardFields(\"paypalcommercecreditcardscheckout\",this.getInstrumentParams()))||{};return e})}}handleApprove({orderID:e,vaultSetupToken:t}){e&&(this.returnedOrderId=e),t&&(this.returnedVaultedToken=t)}renderFields(e){var t,n,i,r;return Be(this,void 0,void 0,function*(){const o=this.getCardFieldsOrThrow();(null===(t=e.cardCode)||void 0===t?void 0:t.containerId)&&(this.cvvField=o.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCode.containerId}`)),(null===(n=e.cardExpiry)||void 0===n?void 0:n.containerId)&&(this.expiryField=o.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiry.containerId}`)),(null===(i=e.cardName)||void 0===i?void 0:i.containerId)&&(this.nameField=o.NameField({placeholder:\"\"}),yield this.nameField.render(`#${e.cardName.containerId}`)),(null===(r=e.cardNumber)||void 0===r?void 0:r.containerId)&&(this.numberField=o.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumber.containerId}`))})}renderVaultedFields(e){var t,n,i;return Be(this,void 0,void 0,function*(){const r=this.getCardFieldsOrThrow();(null===(t=e.cardCodeVerification)||void 0===t?void 0:t.containerId)&&(this.cvvField=r.CVVField({placeholder:\"\"}),yield this.cvvField.render(`#${e.cardCodeVerification.containerId}`)),(null===(n=e.cardExpiryVerification)||void 0===n?void 0:n.containerId)&&(this.expiryField=r.ExpiryField(),yield this.expiryField.render(`#${e.cardExpiryVerification.containerId}`)),(null===(i=e.cardNumberVerification)||void 0===i?void 0:i.containerId)&&(this.numberField=r.NumberField({placeholder:\"\"}),yield this.numberField.render(`#${e.cardNumberVerification.containerId}`))})}getInstrumentParams(){if(!this.executionPaymentData)return{};if(Z(this.executionPaymentData)){const{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}=this.executionPaymentData;return{shouldSaveInstrument:e,shouldSetAsDefaultInstrument:t}}if(J(this.executionPaymentData)){const{instrumentId:e}=this.executionPaymentData;return{instrumentId:e}}return{}}getFieldTypeByEmittedField({emittedBy:e}){return{fieldType:this.mapFieldType(e)}}submitHostedForm(){return Be(this,void 0,void 0,function*(){const e=this.getCardFieldsOrThrow(),t=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),n={billingAddress:{company:t.company,addressLine1:t.address1,addressLine2:t.address2,adminArea1:t.stateOrProvinceCode,adminArea2:t.city,postalCode:t.postalCode,countryCode:t.countryCode}};try{this.isCreditCardVaultedForm?yield e.submit():yield e.submit(n)}catch(e){throw new ke(\"Failed authentication. Please try to authorize again.\")}})}validateHostedFormOrThrow(){var e,t;return Be(this,void 0,void 0,function*(){const n=this.getCardFieldsOrThrow(),i=yield n.getState().then(e=>e),r=this.getValidityData(i);if(!r.isValid)throw null===(t=null===(e=this.hostedFormOptions)||void 0===e?void 0:e.onValidate)||void 0===t||t.call(e,r),new Fe(this.mapValidationErrors(r.errors))})}getValidityData({fields:e}){const t=Object.assign({},e);delete t.cardNameField;const n=Object.keys(t);return{isValid:n.every(e=>{var n;return null===(n=t[e])||void 0===n?void 0:n.isValid}),errors:n.reduce((e,n)=>{var i;const r=this.mapFieldType(n);return Object.assign(Object.assign({},e),{[r]:(null===(i=t[n])||void 0===i?void 0:i.isValid)?void 0:[this.getInvalidErrorByFieldType(r)]})},{})}}getInvalidErrorByFieldType(e){switch(e){case Ae.CardCode:case Ae.CardCodeVerification:return{fieldType:e,message:\"Invalid card code\",type:\"invalid_card_code\"};case Ae.CardNumber:case Ae.CardNumberVerification:return{fieldType:e,message:\"Invalid card number\",type:\"invalid_card_number\"};case Ae.CardExpiry:case Ae.CardExpiryVerification:return{fieldType:e,message:\"Invalid card expiry\",type:\"invalid_card_expiry\"};default:return{fieldType:e,message:\"Invalid field\",type:\"invalid\"}}}mapValidationErrors(e={}){const t={};return Object.keys(e).forEach(n=>{var i,r;t[n]=[{message:(null===(r=null===(i=e[n])||void 0===i?void 0:i[0])||void 0===r?void 0:r.message)||\"\",type:n}]}),t}mapFieldType(e){switch(e){case\"name\":return Ae.CardName;case\"cardNumberField\":case\"number\":return this.isCreditCardForm?Ae.CardNumber:Ae.CardNumberVerification;case\"cardExpiryField\":case\"expiry\":return this.isCreditCardForm?Ae.CardExpiry:Ae.CardExpiryVerification;case\"cardCvvField\":case\"cvv\":return this.isCreditCardForm?Ae.CardCode:Ae.CardCodeVerification;default:throw new Error(\"Unexpected field type\")}}getCardFieldsOrThrow(){if(!this.cardFields)throw new Ne(Me.PaymentNotInitialized);return this.cardFields}getInputStyles(e){var t,n,i;const r={\"font-size\":(null===(t=null==e?void 0:e.default)||void 0===t?void 0:t.fontSize)||\"1rem\",\"font-family\":(null===(n=null==e?void 0:e.default)||void 0===n?void 0:n.fontFamily)||\"Montserrat, Arial, Helvetica, sans-serif\",\"font-weight\":(null===(i=null==e?void 0:e.default)||void 0===i?void 0:i.fontWeight)||\"400\",outline:\"none\",padding:\"9px 13px\"},o=Object.assign(Object.assign({},r),{color:\"#333333\"});return{input:o,\".invalid\":Object.assign(Object.assign({},r),{color:\"red\"}),\".valid\":o,\":focus\":o}}stylizeInputContainers(e){Object.values(e||{}).forEach(e=>{const t=document.getElementById(`${(null==e?void 0:e.containerId)||\"\"}`);t&&(t.style.padding=\"0px\",t.style.boxShadow=\"none\",t.style.border=\"none\",t.style.background=\"transparent\",t.style.marginBottom=\"10px\",t.style.marginLeft=\"-5px\")})}hasUndefinedValues(){return!this.hostedFormOptions||Object.values(this.hostedFormOptions.fields).some(e=>void 0===e)}onChangeHandler(e,t){var n;null===(n=null==e?void 0:e.onValidate)||void 0===n||n.call(e,this.getValidityData(t))}onFocusHandler(e,t){var n;null===(n=null==e?void 0:e.onFocus)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onBlurHandler(e,t){var n;null===(n=null==e?void 0:e.onBlur)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}onInputSubmitRequest(e,t){var n;null===(n=null==e?void 0:e.onEnter)||void 0===n||n.call(e,this.getFieldTypeByEmittedField(t))}shouldInitializePayPalFastlane(e){var t,n;const i=this.paymentIntegrationService.getState(),r=i.getPaymentMethodOrThrow(e),o=i.getPaymentProviderCustomer(),a=(s=o)&&(\"authenticationState\"in s||\"addresses\"in s||\"instruments\"in s)?o:{};var s;return(null===(t=null==r?void 0:r.initializationData)||void 0===t?void 0:t.isAcceleratedCheckoutEnabled)&&(null===(n=null==r?void 0:r.initializationData)||void 0===n?void 0:n.isPayPalCommerceAnalyticsV2Enabled)&&!(null==a?void 0:a.authenticationState)}initializePayPalFastlaneOrThrow(e){return Be(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getPaymentMethodOrThrow(e),{initializationData:r}=i;if(!(null==r?void 0:r.connectClientToken))return;const o=yield this.paypalSdkScriptLoader.getPayPalFastlaneSdk(i,n.currency.code,n.id,t.getLocale());yield this.paypalFastlaneUtils.initializePayPalFastlane(o,!!(null==r?void 0:r.isDeveloperModeApplicable))}catch(e){}})}}const Ue=c(e=>new De(e,R(e),S(),ze()),[{id:\"paypalcommercecreditcards\"}]);var xe=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class je{constructor(e,t,n,i=3e3,r=3e5){this.paymentIntegrationService=e,this.paypalCommerceService=t,this.loadingIndicator=n,this.pollingInterval=i,this.maxPollingIntervalTime=r,this.pollingTimer=0,this.stopPolling=o}initialize(e){return xe(this,void 0,void 0,function*(){const{gatewayId:t,methodId:n,paypalcommerceratepay:i}=e;if(!n)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new $('Unable to initialize payment because \"options.gatewayId\" argument is not provided.');if(!i)throw new $('Unable to initialize payment because \"options.paypalcommerceratepay\" argument is not provided.');const{legalTextContainer:r,container:o,loadingContainerId:a}=i;if(!o)throw new $('Unable to initialize payment because \"options.container\" argument is not provided.');if(!r)throw new $('Unable to initialize payment because \"options.legalTextContainer\" argument is not provided.');if(!a)throw new $('Unable to initialize payment because \"options.loadingContainerId\" argument is not provided.');this.loadingIndicatorContainer=a;const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,t),{merchantId:d}=s.initializationData||{};if(!d)throw new $(\"Unable to initialize payment because merchantId argument is not provided.\");this.paypalcommerceratepay=i,yield this.paypalCommerceService.loadPayPalSdk(n),this.createFraudNetScript(d,n,t),this.loadFraudnetConfig(),this.renderLegalText(r,o)})}execute(e,t){return xe(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]),{getFieldsValues:r}=this.paypalcommerceratepay||{};if(!n)throw new q([\"payment\"]);if(!r||\"function\"!=typeof r)throw new $('Unable to initialize payment because \"options.getFieldsValues\" argument is not provided.');this.toggleLoadingIndicator(!0);try{const e=yield this.paypalCommerceService.createOrder(\"paypalcommercealternativemethodscheckout\",{metadataId:this.guid}),{ratepayBirthDate:o,ratepayPhoneNumber:a,ratepayPhoneCountryCode:s}=r(),d={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:n.methodId,rate_pay:{birth_date:this.normalizeDate(o),phone:{national_number:a,country_code:s.split(\"+\")[1]}},paypal_account:{order_id:e}}};return yield this.paymentIntegrationService.submitOrder(i,t),yield this.paymentIntegrationService.submitPayment({methodId:n.methodId,paymentData:d}),yield new Promise((e,t)=>{this.initializePollingMechanism(n.methodId,e,t,n.gatewayId)})}catch(e){return this.handleError(e),new Promise((e,t)=>t())}})}finalize(){return Promise.reject(new W)}deinitialize(){const{legalTextContainer:e}=this.paypalcommerceratepay||{},t=document.querySelectorAll('[data-id=\"fraudnetScript\"]')[0],n=document.querySelectorAll('[data-id=\"fraudnetConfig\"]')[0];if(this.deinitializePollingMechanism(),t.remove(),n.remove(),e){const t=document.getElementById(e);null==t||t.remove()}return Promise.resolve()}normalizeDate(e){const t=this.formatDate(e.getDate()),n=this.formatDate(e.getMonth()+1);return`${e.getFullYear()}-${n}-${t}`}formatDate(e){return`${e<10?0:\"\"}${e}`}renderLegalText(e,t){const n=e,i=t.split(\"#\")[1],r=document.getElementById(i),o=null==r?void 0:r.parentNode,a=document.createElement(\"div\");a.style.marginBottom=\"20px\",a.setAttribute(\"id\",n),null==o||o.prepend(a);const s=this.paypalCommerceService.getPayPalSdkOrThrow(),d=s.Legal({fundingSource:s.Legal.FUNDING.PAY_UPON_INVOICE});if(!document.getElementById(n))throw new $('Unable to initialize payment because \"legalTextContainerElement\" argument is not found.');d.render(`#${n}`)}handleError(e){const{onError:t}=this.paypalcommerceratepay||{};this.resetPollingMechanism(),this.toggleLoadingIndicator(!1),t&&\"function\"==typeof t&&t(e)}createFraudNetScript(e,t,n){const i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,n),{testMode:r}=i.config,o=document.createElement(\"script\");o.setAttribute(\"type\",\"application/json\"),o.setAttribute(\"fncls\",\"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\"),o.setAttribute(\"data-id\",\"fraudnetScript\"),this.guid=this.generateGUID();const a={f:this.guid,s:`${e}_checkout-page`,sandbox:r};o.innerHTML=JSON.stringify(a),document.body.appendChild(o)}generateGUID(){let e=\"\";for(let t=0;t<32;t+=1)e+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"[Math.floor(62*Math.random())];return e}loadFraudnetConfig(){const e=document.createElement(\"script\");e.setAttribute(\"data-id\",\"fraudnetConfig\"),e.src=\"https://c.paypal.com/da/r/fb.js\",document.body.appendChild(e)}reinitializeStrategy(e){return xe(this,void 0,void 0,function*(){yield this.deinitialize(),yield this.initialize(e)})}initializePollingMechanism(e,t,n,i){return xe(this,void 0,void 0,function*(){yield new Promise((e,t)=>{const n=setTimeout(e,this.pollingInterval);this.stopPolling=()=>(clearTimeout(n),this.toggleLoadingIndicator(!1),t())});try{this.pollingTimer+=this.pollingInterval;const r=yield this.paypalCommerceService.getOrderStatus(\"paypalcommercealternativemethods\",{params:{useMetadata:!0}}),o=r===N.PollingStop,a=r===N.PollingError;if(o)return this.deinitializePollingMechanism(),t();if(a)return n();if(!o&&this.pollingTimer<this.maxPollingIntervalTime)return yield this.initializePollingMechanism(e,t,n,i);yield this.reinitializeStrategy({methodId:e,gatewayId:i,paypalcommerceratepay:this.paypalcommerceratepay}),this.handleError(new ue)}catch(e){this.handleError(e),n()}})}deinitializePollingMechanism(){this.stopPolling(),this.pollingTimer=0}resetPollingMechanism(){this.deinitializePollingMechanism()}toggleLoadingIndicator(e){e&&this.loadingIndicatorContainer?this.loadingIndicator.show(this.loadingIndicatorContainer):this.loadingIndicator.hide()}}const Le=c(e=>new je(e,R(e),new H({containerStyles:Object.assign(Object.assign({},y),{position:\"fixed\"})})),[{gateway:\"paypalcommercealternativemethods\",id:\"ratepay\"}]);var Ve=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Re{constructor(e){this.requestSender=e}createOrder(e,t){return Ve(this,void 0,void 0,function*(){const n=`/api/storefront/payment/${e}`,i=t,r=Object.assign({\"X-API-INTERNAL\":D,\"Content-Type\":x.Json},j);return(yield this.requestSender.post(n,{headers:r,body:i})).body})}updateOrder(e){return Ve(this,void 0,void 0,function*(){const t=e,n=Object.assign({\"X-API-INTERNAL\":D,\"Content-Type\":x.Json},j);return(yield this.requestSender.put(\"/api/storefront/initialization/paypalcommerce\",{headers:n,body:t})).body})}getOrderStatus(e=\"paypalcommerce\",t){return Ve(this,void 0,void 0,function*(){const n=`/api/storefront/initialization/${e}`,i=Object.assign({\"X-API-INTERNAL\":D,\"Content-Type\":x.Json},j);return(yield this.requestSender.get(n,Object.assign({headers:i},t))).body})}}function Ge(e){return\"string\"!=typeof e}function Ke(e,t){if(t||e)return function(e){var t,n;const i={},r=s(e.root,Ge),o=s(e.input,Ge),a=s(e.toggle,Ge),d=s(null===(t=e.text)||void 0===t?void 0:t.body,Ge),l=s(null===(n=e.text)||void 0===n?void 0:n.caption,Ge),c=e.branding;return Object.keys(r).length&&(i.root=r),Object.keys(o).length&&(i.input=o),Object.keys(a).length&&(i.toggle=a),Object.keys(d).length&&(i.text={},i.text.body=d),Object.keys(l).length&&(i.text=Object.assign({},i.text),i.text.caption=l),c&&(i.branding=c),i}(function(e,t){var n,i,r,o,a,s,d,l,c,u,p,h,y,m,g,v,f,S,I,_,P,b;return{root:{backgroundColorPrimary:(null==e?void 0:e.fastlaneRootSettingsBackgroundColor)||(null===(n=null==t?void 0:t.root)||void 0===n?void 0:n.backgroundColorPrimary),errorColor:(null==e?void 0:e.fastlaneRootSettingsErrorColor)||(null===(i=null==t?void 0:t.root)||void 0===i?void 0:i.errorColor),fontFamily:(null==e?void 0:e.fastlaneRootSettingsFontFamily)||(null===(r=null==t?void 0:t.root)||void 0===r?void 0:r.fontFamily),fontSizeBase:(null==e?void 0:e.fastlaneRootSettingsFontSize)||(null===(o=null==t?void 0:t.root)||void 0===o?void 0:o.fontSizeBase),padding:(null==e?void 0:e.fastlaneRootSettingsPadding)||(null===(a=null==t?void 0:t.root)||void 0===a?void 0:a.padding),primaryColor:(null==e?void 0:e.fastlaneRootSettingsPrimaryColor)||(null===(s=null==t?void 0:t.root)||void 0===s?void 0:s.primaryColor)},input:{borderRadius:(null==e?void 0:e.fastlaneInputSettingsBorderRadius)||(null===(d=null==t?void 0:t.input)||void 0===d?void 0:d.borderRadius),borderColor:(null==e?void 0:e.fastlaneInputSettingsBorderColor)||(null===(l=null==t?void 0:t.input)||void 0===l?void 0:l.borderColor),focusBorderColor:(null==e?void 0:e.fastlaneInputSettingsFocusBorderBase)||(null===(c=null==t?void 0:t.input)||void 0===c?void 0:c.focusBorderColor),backgroundColor:(null==e?void 0:e.fastlaneInputSettingsBackgroundColor)||(null===(u=null==t?void 0:t.input)||void 0===u?void 0:u.backgroundColor),borderWidth:(null==e?void 0:e.fastlaneInputSettingsBorderWidth)||(null===(p=null==t?void 0:t.input)||void 0===p?void 0:p.borderWidth),textColorBase:(null==e?void 0:e.fastlaneInputSettingsTextColorBase)||(null===(h=null==t?void 0:t.input)||void 0===h?void 0:h.textColorBase)},toggle:{colorPrimary:(null==e?void 0:e.fastlaneToggleSettingsColorPrimary)||(null===(y=null==t?void 0:t.toggle)||void 0===y?void 0:y.colorPrimary),colorSecondary:(null==e?void 0:e.fastlaneToggleSettingsColorSecondary)||(null===(m=null==t?void 0:t.toggle)||void 0===m?void 0:m.colorSecondary)},text:{body:{color:(null==e?void 0:e.fastlaneTextBodySettingsColor)||(null===(v=null===(g=null==t?void 0:t.text)||void 0===g?void 0:g.body)||void 0===v?void 0:v.color),fontSize:(null==e?void 0:e.fastlaneTextBodySettingsFontSize)||(null===(S=null===(f=null==t?void 0:t.text)||void 0===f?void 0:f.body)||void 0===S?void 0:S.fontSize)},caption:{color:(null==e?void 0:e.fastlaneTextCaptionSettingsColor)||(null===(_=null===(I=null==t?void 0:t.text)||void 0===I?void 0:I.caption)||void 0===_?void 0:_.color),fontSize:(null==e?void 0:e.fastlaneTextCaptionSettingsFontSize)||(null===(b=null===(P=null==t?void 0:t.text)||void 0===P?void 0:P.caption)||void 0===b?void 0:b.fontSize)}},branding:(null==e?void 0:e.fastlaneBrandingSettings)||(null==t?void 0:t.branding)}}(e,t))}function He(e){return!!e&&(\"authenticationState\"in e||\"addresses\"in e||\"instruments\"in e)}var $e=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class qe{constructor(e,t,n,i){this.paymentIntegrationService=e,this.paypalCommerceRequestSender=t,this.paypalSdkScriptLoader=n,this.paypalFastlaneUtils=i}initialize(e){var t,n;return $e(this,void 0,void 0,function*(){const{methodId:i,paypalcommercefastlane:r}=e;if(this.methodId=i,this.paypalcommercefastlane=r,!i)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!r)throw new $('Unable to initialize payment because \"options.paypalcommercefastlane\" argument is not provided.');if(!r.onInit||\"function\"!=typeof r.onInit)throw new $('Unable to initialize payment because \"options.paypalcommercefastlane.onInit\" argument is not provided or it is not a function.');if(!r.onChange||\"function\"!=typeof r.onChange)throw new $('Unable to initialize payment because \"options.paypalcommercefastlane.onChange\" argument is not provided or it is not a function.');yield this.paymentIntegrationService.loadPaymentMethod(i);const o=this.paymentIntegrationService.getState(),a=o.getCartOrThrow(),s=o.getPaymentMethodOrThrow(i),{isDeveloperModeApplicable:d,isFastlaneStylingEnabled:l}=s.initializationData||{};this.threeDSVerificationMethod=null===(t=s.initializationData)||void 0===t?void 0:t.threeDSVerificationMethod,this.paypalFastlaneSdk=yield this.paypalSdkScriptLoader.getPayPalFastlaneSdk(s,a.currency.code,a.id,o.getLocale());const c=Ke(l?null===(n=null==s?void 0:s.initializationData)||void 0===n?void 0:n.fastlaneStyles:{},null==r?void 0:r.styles);yield this.paypalFastlaneUtils.initializePayPalFastlane(this.paypalFastlaneSdk,!!d,c),this.shouldRunAuthenticationFlow()&&(yield this.runPayPalAuthenticationFlowOrThrow(i)),yield this.initializePayPalPaymentComponent(),r.onInit(e=>this.renderPayPalPaymentComponent(e)),r.onChange(()=>this.handlePayPalStoredInstrumentChange(i))})}execute(e,t){return $e(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new q([\"payment\"]);const{paymentData:r,methodId:o}=n,a=r&&J(r);try{yield this.paymentIntegrationService.submitOrder(i,t);const e=a?yield this.prepareVaultedInstrumentPaymentPayload(o,r):yield this.preparePaymentPayload(o,r);yield this.paymentIntegrationService.submitPayment(e),this.paypalFastlaneUtils.removeStorageSessionId()}catch(e){if(function(e){return\"object\"==typeof e&&null!==e&&\"message\"in e&&\"response\"in e&&\"body\"in e.response&&\"name\"in e.response.body}(e)&&\"INVALID_REQUEST\"===e.response.body.name){const e={translationKey:\"payment.errors.invalid_request_error\"};return this.handleError(e),Promise.reject()}if(e instanceof Error&&\"FastlaneError\"!==e.name)throw e;return Promise.reject()}})}finalize(){return Promise.reject(new W)}deinitialize(){return $e(this,void 0,void 0,function*(){return Promise.resolve()})}shouldRunAuthenticationFlow(){const e=this.paymentIntegrationService.getState(),t=e.getCartOrThrow(),n=e.getCustomerOrThrow(),i=e.getPaymentProviderCustomer(),r=He(i)?i:{},o=this.paypalFastlaneUtils.getStorageSessionId();return!(!n.isGuest||(null==r?void 0:r.authenticationState)===k.CANCELED||(null==r?void 0:r.authenticationState)||o!==t.id)}runPayPalAuthenticationFlowOrThrow(e){return $e(this,void 0,void 0,function*(){try{const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getCustomer(),r=t.getBillingAddress(),o=(null==i?void 0:i.email)||(null==r?void 0:r.email)||\"\",{customerContextId:a}=yield this.paypalFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(a),{authenticationState:d,addresses:l,instruments:c}=this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,s);yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:d,addresses:l,instruments:c}),s.authenticationState===k.CANCELED?this.paypalFastlaneUtils.removeStorageSessionId():this.paypalFastlaneUtils.updateStorageSessionId(n.id)}catch(e){}})}initializePayPalPaymentComponent(){return $e(this,void 0,void 0,function*(){const e=this.paymentIntegrationService.getState().getBillingAddressOrThrow(),t=e.phone,n=`${e.firstName} ${e.lastName}`.trim(),i=this.paypalFastlaneUtils.getPayPalFastlaneOrThrow(),r={fields:Object.assign({cardholderName:{prefill:n,enabled:!0}},t&&{phoneNumber:{prefill:t}})};this.paypalComponentMethods=yield i.FastlaneCardComponent(r)})}renderPayPalPaymentComponent(e){const t=this.getPayPalComponentMethodsOrThrow();if(!e)throw new $('Unable to render card component because \"container\" argument is not provided.');t.render(e)}getPayPalComponentMethodsOrThrow(){if(!this.paypalComponentMethods)throw new p;return this.paypalComponentMethods}prepareVaultedInstrumentPaymentPayload(e,t){return $e(this,void 0,void 0,function*(){const{instrumentId:n}=t,i=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e).config.is3dsEnabled?yield this.get3DSNonce(n):n;return yield this.createOrder(i),{methodId:e,paymentData:{formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:i}}}}})}preparePaymentPayload(e,t){return $e(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getBillingAddressOrThrow(),r=n.getPaymentMethodOrThrow(e),o=`${i.firstName} ${i.lastName}`.trim(),{getPaymentToken:a}=this.getPayPalComponentMethodsOrThrow(),{id:s}=yield a({name:{fullName:o},billingAddress:this.paypalFastlaneUtils.mapBcToPayPalAddress(i)}),d=r.config.is3dsEnabled?yield this.get3DSNonce(s):s;yield this.createOrder(d);const{shouldSaveInstrument:l=!1,shouldSetAsDefaultInstrument:c=!1}=Z(t)?t:{};return{methodId:e,paymentData:Object.assign(Object.assign({},t),{shouldSaveInstrument:l,shouldSetAsDefaultInstrument:c,formattedPayload:{paypal_fastlane_token:{order_id:this.orderId,token:d}}})}})}createOrder(e){return $e(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getCartOrThrow().id;if(this.methodId){const{orderId:n}=yield this.paypalCommerceRequestSender.createOrder(this.methodId,{cartId:t,fastlaneToken:e});this.orderId=n}})}get3DSNonce(e){var t;return $e(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState(),i=n.getCartOrThrow(),r=n.getOrderOrThrow(),o=n.getStoreConfigOrThrow().links.checkoutLink,a=null===(t=this.paypalFastlaneSdk)||void 0===t?void 0:t.ThreeDomainSecureClient;if(!a)throw new p;const s={amount:r.orderAmount.toFixed(2),currency:i.currency.code,nonce:e,threeDSRequested:this.threeDSVerificationMethod===w.Always,transactionContext:{experience_context:{locale:\"en-US\",return_url:o,cancel_url:o}}},d=yield a.isEligible(s);if(this.threeDSVerificationMethod===w.Always&&!d)throw new Y;if(d){const{liabilityShift:e,authenticationState:t,nonce:n}=yield a.show();if(e===pe.No||e===pe.Unknown||t===O.Errored||t===O.Cancelled)throw new Y;if(t===O.Succeeded&&[pe.Yes,pe.Possible].includes(e))return n;throw new Y}return e})}handlePayPalStoredInstrumentChange(e){return $e(this,void 0,void 0,function*(){const t=this.paypalFastlaneUtils.getPayPalFastlaneOrThrow(),{selectionChanged:n,selectedCard:i}=yield t.profile.showCardSelector();if(n){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomer(),n=He(t)?t:{},r=this.paypalFastlaneUtils.mapPayPalToBcInstrument(e,i)[0];return yield this.paymentIntegrationService.updatePaymentProviderCustomer(Object.assign(Object.assign({},n),{instruments:[r]})),r}})}handleError(e){var t;(null===(t=this.paypalcommercefastlane)||void 0===t?void 0:t.onError)&&\"function\"==typeof this.paypalcommercefastlane.onError&&this.paypalcommercefastlane.onError(e)}}const Ye=c(e=>{const{getHost:t}=e.getState();return new qe(e,new Re(n({host:t()})),S(),ze())},[{id:\"paypalcommerceacceleratedcheckout\"}]);var We=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};const Ze=class{constructor(e,t){this.paymentIntegrationService=e,this.paypalIntegrationService=t}createPayPalButton(e,t,n,i){const{style:r,fundingSource:o,isHostedCheckoutEnabled:a,isServerSideShippingCallbacksEnabled:s,onClick:d,onCancel:l,onPaymentComplete:c,onError:u}=n;this.onError=u;const p=this.paypalIntegrationService.getPayPalSdkOrThrow();if(!Object.values(p.FUNDING).includes(o))throw new $('Unable to initialize PayPal button because \"fundingSource\" argument is not valid funding source.');const h=Object.assign(Object.assign({},!s&&{onShippingAddressChange:t=>this.onShippingAddressChange(t,e),onShippingOptionsChange:t=>this.onShippingOptionsChange(t,e)}),{onApprove:(n,i)=>this.onHostedCheckoutApprove(n,i,t,e,c,s)});return p.Buttons(Object.assign(Object.assign(Object.assign({fundingSource:o,style:this.paypalIntegrationService.getValidButtonStyle(r),createOrder:()=>We(this,void 0,void 0,function*(){if(i){const e=yield this.paypalIntegrationService.createBuyNowCartOrThrow(i);yield this.paymentIntegrationService.loadCheckout(e.id)}return this.paypalIntegrationService.createOrder(e)}),onApprove:({orderID:e})=>this.paypalIntegrationService.tokenizePayment(t,e)},d?{onClick:d}:{}),l?{onCancel:l}:{}),a&&h))}onHostedCheckoutApprove(e,t,n,i,r,o){return We(this,void 0,void 0,function*(){if(!e.orderID)throw new h(d.MissingOrderId);const a=this.paymentIntegrationService.getState().getCartOrThrow();try{const s=a.lineItems.physicalItems.length>0;if(!o){const e=yield t.order.get(),n=this.paypalIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),s){const t=this.paypalIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}s&&(yield this.paypalIntegrationService.updateOrder(i,void 0,void 0,o)),o&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalIntegrationService.submitPayment(n,e.orderID),r&&\"function\"==typeof r&&r()}catch(e){this.handleError(e)}})}onShippingAddressChange(e,t){return We(this,void 0,void 0,function*(){const n=this.paypalIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(n),yield this.paymentIntegrationService.updateShippingAddress(n);const e=this.paypalIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalIntegrationService.updateOrder(t)}catch(e){this.handleError(e)}})}onShippingOptionsChange(e,t){return We(this,void 0,void 0,function*(){const n=this.paypalIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(n.id),yield this.paypalIntegrationService.updateOrder(t)}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}};var Je=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class Xe{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalButtonCreationService=n}initialize(e){return Je(this,void 0,void 0,function*(){const{paypalcommerce:t,methodId:n}=e;if(!n)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new $('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');if(!t.container)throw new $('Unable to initialize payment because \"options.paypalcommerce.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new $('Unable to initialize payment because \"options.paypalcommerce.onClick\" argument is not a function.');this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.paypalIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return Je(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()})}signOut(e){return Je(this,void 0,void 0,function*(){return yield this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:i,onComplete:r,onError:o}=t,a=this.paypalIntegrationService.getPayPalSdkOrThrow(),s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:d,paymentButtonStyles:l,isServerSideShippingCallbacksEnabled:c}=s.initializationData||{},{checkoutTopButtonStyles:u}=l||{},p=Object.assign(Object.assign(Object.assign({fundingSource:a.FUNDING.PAYPAL,isServerSideShippingCallbacksEnabled:c,isHostedCheckoutEnabled:d,style:Object.assign(Object.assign({},u),{height:40})},i&&{onClick:()=>i()}),d&&r&&{onPaymentComplete:()=>r()}),{onError:o}),h=this.paypalButtonCreationService.createPayPalButton(\"paypalcommerce\",e,p);h.isEligible()?h.render(`#${n}`):this.paypalIntegrationService.removeElement(n)}}const Qe=c(e=>{const t=R(e),n=new Ze(e,t);return new Xe(e,t,n)},[{id:\"paypalcommerce\"}]);var et=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class tt{constructor(e,t,n,i){this.formPoster=e,this.paymentIntegrationService=t,this.paypalCommerceRequestSender=n,this.paypalCommerceScriptLoader=i}loadPayPalSdk(e,t,n,i){return et(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=t||r.getCartOrThrow().currency.code,a=r.getPaymentMethodOrThrow(e);return this.paypalSdk=yield this.paypalCommerceScriptLoader.getPayPalSDK(a,o,r.getLocale(),n,i),this.paypalSdk})}getPayPalSdkOrThrow(){if(!this.paypalSdk)throw new p;return this.paypalSdk}createBuyNowCartOrThrow(e){return et(this,void 0,void 0,function*(){const t=e.getBuyNowCartRequestBody();if(!t)throw new h(d.MissingCart);try{return yield this.paymentIntegrationService.createBuyNowCart(t)}catch(e){throw new I}})}createOrder(e,t){return et(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i}=yield this.paypalCommerceRequestSender.createOrder(e,Object.assign({cartId:n},t));return i})}createOrderCardFields(e,t){return et(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getCartOrThrow().id,{orderId:i,setupToken:r}=yield this.paypalCommerceRequestSender.createOrder(e,Object.assign({cartId:n},t));return Object.assign({orderId:i},r?{setupToken:r}:{})})}updateOrder(e){return et(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow(),i=t.getConsignmentsOrThrow()[0];try{yield this.paypalCommerceRequestSender.updateOrder({availableShippingOptions:e?[]:i.availableShippingOptions,cartId:n.id,selectedShippingOption:e?null:i.selectedShippingOption})}catch(e){throw new P}})}getOrderStatus(e,t){return et(this,void 0,void 0,function*(){try{const{status:n}=yield this.paypalCommerceRequestSender.getOrderStatus(e,t);return n}catch(e){throw new P}})}tokenizePayment(e,t){const n=this.paymentIntegrationService.getState().getCartOrThrow();if(!t)throw new h(d.MissingOrderId);return this.formPoster.postForm(\"/checkout.php\",Object.assign({payment_type:\"paypal\",action:\"set_external_checkout\",provider:e,order_id:t},n.source===b.BuyNow&&{cart_id:n.id}))}submitPayment(e,t,n){return et(this,void 0,void 0,function*(){const i={formattedPayload:{vault_payment_instrument:null,set_as_default_stored_instrument:null,device_info:null,method_id:e,paypal_account:{order_id:t}}};yield this.paymentIntegrationService.submitPayment(Object.assign({methodId:e,paymentData:i},n?{gatewayId:n}:{}))})}getShippingOptionOrThrow(e){const t=this.paymentIntegrationService.getState().getConsignmentsOrThrow()[0],n=t.availableShippingOptions||[],i=n.find(e=>e.isRecommended),r=(e?n.find(t=>t.id===e):n.find(e=>{var n;return e.id===(null===(n=t.selectedShippingOption)||void 0===n?void 0:n.id)}))||i||n[0];if(!r)throw new Error(\"Your order can't be shipped to this address\");return r}getAddress(e){return{firstName:(null==e?void 0:e.firstName)||\"\",lastName:(null==e?void 0:e.lastName)||\"\",email:(null==e?void 0:e.email)||\"\",phone:(null==e?void 0:e.phone)||\"\",company:\"\",address1:(null==e?void 0:e.address1)||\"\",address2:(null==e?void 0:e.address2)||\"\",city:(null==e?void 0:e.city)||\"\",countryCode:(null==e?void 0:e.countryCode)||\"\",postalCode:(null==e?void 0:e.postalCode)||\"\",stateOrProvince:\"\",stateOrProvinceCode:(null==e?void 0:e.stateOrProvinceCode)||\"\",customFields:[]}}getBillingAddressFromOrderDetails({payer:e}){var t,n;return this.getAddress({firstName:e.name.given_name,lastName:e.name.surname,email:e.email_address,address1:e.address.address_line_1,address2:e.address.address_line_2,city:e.address.admin_area_2,countryCode:e.address.country_code,postalCode:e.address.postal_code,stateOrProvinceCode:e.address.admin_area_1,phone:null===(n=null===(t=e.phone)||void 0===t?void 0:t.phone_number)||void 0===n?void 0:n.national_number})}getShippingAddressFromOrderDetails(e){const{payer:t,purchase_units:n}=e,{address:i,name:{full_name:r}}=n[0].shipping,[o,...a]=r.split(\" \");return this.getAddress({firstName:o,lastName:a.join(\" \"),email:t.email_address,address1:i.address_line_1,address2:i.address_line_2,city:i.admin_area_2,countryCode:i.country_code,postalCode:i.postal_code,stateOrProvinceCode:i.admin_area_1})}getValidButtonStyle(e){const{color:t,height:n,label:i,shape:o}=e||{},a={color:t&&me[t]?t:void 0,height:this.getValidHeight(n),label:i&&ye[i]?i:void 0,shape:o&&ge[o]?o:void 0};return s(a,r)}getValidHeight(e){return e&&\"number\"==typeof e?e>55?55:e<25?25:e:40}removeElement(e){const t=e&&document.getElementById(e);t&&(t.style.display=\"none\")}}var nt=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class it{constructor(e){this.scriptLoader=e,this.window=window}getPayPalSDK(e,t,n,i,r){return nt(this,void 0,void 0,function*(){const o=this.getPayPalSdkScriptConfigOrThrow(e,t,n,i);return this.loadPayPalSDK(o,r)})}loadPayPalSDK(e,t=!1){return nt(this,void 0,void 0,function*(){if(!this.window.paypal||t){const t=this.transformConfig(e.options),n=this.transformConfig(e.attributes),i=`https://www.paypal.com/sdk/js?${new URLSearchParams(t).toString()}`;yield this.scriptLoader.loadScript(i,{async:!0,attributes:n})}if(!this.window.paypal)throw new p;return this.window.paypal})}getPayPalSdkScriptConfigOrThrow(e,t,n,i=!0){const{id:r,clientToken:o,initializationData:a}=e;if(!(null==a?void 0:a.clientId))throw new h(d.MissingPaymentMethod);const{intent:s,clientId:l,merchantId:c,buyerCountry:u,attributionId:p,isVenmoEnabled:y,isHostedCheckoutEnabled:m,isPayPalCreditAvailable:v,isDeveloperModeApplicable:f,availableAlternativePaymentMethods:S=[],enabledAlternativePaymentMethods:I=[],isGooglePayEnabled:_}=a,P=m||i,b=\"paypalcommercecreditcards\"===r,C=b?[\"card\"]:[],w=v?[\"credit\",\"paylater\"]:[],O=y?[\"venmo\"]:[],z=_?[\"googlepay\"]:[],A=i?[\"card-fields\"]:[],E=[...b?[]:[\"card\"],...v?[]:[\"credit\",\"paylater\"],...y?[]:[\"venmo\"],...S.filter(e=>!I.includes(e))],T=[...C,...w,...O,...I],k=g(n);return{options:Object.assign(Object.assign({\"client-id\":l,\"merchant-id\":c,\"enable-funding\":T.length>0?T:void 0,\"disable-funding\":E.length>0?E:void 0,commit:P,components:[\"buttons\",\"hosted-fields\",\"payment-fields\",\"legal\",...z,...A],currency:t,intent:s},f&&{\"buyer-country\":u}),k&&{locale:k}),attributes:{\"data-partner-attribution-id\":p,\"data-client-token\":o}}}transformConfig(e){let t={};return Object.keys(e).forEach(n=>{const i=e[n];null==i||\"\"===i||Array.isArray(i)&&0===i.length||(t=Object.assign(Object.assign({},t),{[n]:Array.isArray(i)?i.join(\",\"):i}))}),t}}const rt=i=>{const{getHost:r}=i.getState();return new tt(t(),i,new Re(n({host:r()})),new it(e()))};var ot=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class at{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t,this.onError=o}initialize(e){return ot(this,void 0,void 0,function*(){const{paypalcommercecredit:t,methodId:n}=e;if(!n)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new $('Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.');if(!t.container)throw new $('Unable to initialize payment because \"options.paypalcommercecredit.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new $('Unable to initialize payment because \"options.paypalcommercecredit.onClick\" argument is not a function.');this.onError=t.onError||o,this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.paypalCommerceIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return ot(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return ot(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onComplete:i,onClick:r}=t,o=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),a=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{isHostedCheckoutEnabled:s,paymentButtonStyles:d,isServerSideShippingCallbacksEnabled:l}=a.initializationData||{},{checkoutTopButtonStyles:c}=d||{},u=Object.assign({createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercecredit\"),onApprove:({orderID:t})=>this.paypalCommerceIntegrationService.tokenizePayment(e,t)},r&&{onClick:()=>r()}),p=Object.assign(Object.assign({},!l&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(t,n)=>this.onHostedCheckoutApprove(t,n,e,i,l)}),h=[o.FUNDING.PAYLATER,o.FUNDING.CREDIT];let y=!1;h.forEach(e=>{if(!y){const t=Object.assign(Object.assign({fundingSource:e,style:this.paypalCommerceIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},c),{height:40}))},u),s&&p),i=o.Buttons(t);i.isEligible()&&(i.render(`#${n}`),y=!0)}}),y||this.paypalCommerceIntegrationService.removeElement(n)}onHostedCheckoutApprove(e,t,n,i,r){return ot(this,void 0,void 0,function*(){if(!e.orderID)throw new h(d.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!r){const e=yield t.order.get(),n=this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}a&&(yield this.paypalCommerceIntegrationService.updateOrder(r)),r&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalCommerceIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i()}catch(e){this.handleError(e)}})}onShippingAddressChange(e){return ot(this,void 0,void 0,function*(){const t=this.paypalCommerceIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.paypalCommerceIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalCommerceIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}onShippingOptionsChange(e){return ot(this,void 0,void 0,function*(){const t=this.paypalCommerceIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.paypalCommerceIntegrationService.updateOrder()}catch(e){this.handleError(e)}})}handleError(e){if(\"function\"!=typeof this.onError)throw e;this.onError(e)}}const st=c(e=>new at(e,rt(e)),[{id:\"paypalcommercecredit\"}]);var dt=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class lt{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}initialize(e){return dt(this,void 0,void 0,function*(){const{paypalcommercevenmo:t,methodId:n}=e;if(!n)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!t)throw new $('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');if(!t.container)throw new $('Unable to initialize payment because \"options.paypalcommercevenmo.container\" argument is not provided.');if(t.onClick&&\"function\"!=typeof t.onClick)throw new $('Unable to initialize payment because \"options.paypalcommercevenmo.onClick\" argument is not a function.');this.paymentIntegrationService.getState().getPaymentMethod(n)||(yield this.paymentIntegrationService.loadPaymentMethod(n));const i=yield this.paypalCommerceIntegrationService.loadPayPalSdk(n);i&&i.Buttons&&\"function\"==typeof i.Buttons?this.renderButton(n,t):console.error(\"[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK\")})}deinitialize(){return Promise.resolve()}signIn(e,t){return dt(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t)})}signOut(e){return dt(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}renderButton(e,t){const{container:n,onClick:i}=t,r=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{paymentButtonStyles:a}=o.initializationData||{},{checkoutTopButtonStyles:s}=a||{},d=Object.assign({fundingSource:r.FUNDING.VENMO,style:this.paypalCommerceIntegrationService.getValidButtonStyle(Object.assign(Object.assign({},s),{height:40})),createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercevenmo\"),onApprove:({orderID:t})=>this.paypalCommerceIntegrationService.tokenizePayment(e,t)},i&&{onClick:()=>i()}),l=r.Buttons(d);l.isEligible()?l.render(`#${n}`):this.paypalCommerceIntegrationService.removeElement(n)}}const ct=c(e=>new lt(e,rt(e)),[{id:\"paypalcommercevenmo\"}]);var ut=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class pt{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalSdkScriptLoader=t,this.paypalFastlaneUtils=n}initialize(e){var t;return ut(this,void 0,void 0,function*(){const{methodId:n,paypalcommercefastlane:i}=e;if(!n)throw new $('Unable to proceed because \"methodId\" argument is not provided.');try{yield this.paymentIntegrationService.loadPaymentMethod(n);const e=this.paymentIntegrationService.getState(),r=e.getCartOrThrow(),o=e.getPaymentMethodOrThrow(n),a=!!(null===(t=o.initializationData)||void 0===t?void 0:t.isDeveloperModeApplicable),s=yield this.paypalSdkScriptLoader.getPayPalFastlaneSdk(o,r.currency.code,r.id,e.getLocale());yield this.paypalFastlaneUtils.initializePayPalFastlane(s,a,this.getFastlaneStyles(n,i))}catch(e){}return Promise.resolve()})}deinitialize(){return ut(this,void 0,void 0,function*(){return Promise.resolve()})}signIn(e,t){return ut(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signInCustomer(e,t),yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:void 0,addresses:void 0,instruments:void 0}),this.paypalFastlaneUtils.removeStorageSessionId()})}signOut(e){return ut(this,void 0,void 0,function*(){yield this.paymentIntegrationService.signOutCustomer(e)})}executePaymentMethodCheckout(e){return ut(this,void 0,void 0,function*(){const{checkoutPaymentMethodExecuted:t,continueWithCheckoutCallback:n,methodId:i}=e||{};if(!i)throw new $('Unable to proceed because \"methodId\" argument is not provided.');if(\"function\"!=typeof n)throw new $('Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.');if(this.paymentIntegrationService.getState().getCustomerOrThrow().isGuest){t&&\"function\"==typeof t&&t();try{yield this.runPayPalAuthenticationFlowOrThrow(i)}catch(e){}}n()})}runPayPalAuthenticationFlowOrThrow(e){return ut(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState(),n=t.getCartOrThrow().id,i=t.getCustomer(),r=t.getBillingAddress(),o=(null==i?void 0:i.email)||(null==r?void 0:r.email)||\"\",{customerContextId:a}=yield this.paypalFastlaneUtils.lookupCustomerOrThrow(o),s=yield this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(a),d=s.authenticationState===k.CANCELED;yield this.updateCustomerDataState(e,s),d?this.paypalFastlaneUtils.removeStorageSessionId():this.paypalFastlaneUtils.updateStorageSessionId(n)})}updateCustomerDataState(e,t){var n;return ut(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState().getCartOrThrow(),{authenticationState:r,addresses:o,billingAddress:a,shippingAddress:s,instruments:d}=this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(e,t);if(yield this.paymentIntegrationService.updatePaymentProviderCustomer({authenticationState:r,addresses:o,instruments:d}),a&&(yield this.paymentIntegrationService.updateBillingAddress(a)),s&&i.lineItems.physicalItems.length>0){const t=yield this.paymentIntegrationService.updateShippingAddress(s),i=t.getPaymentMethodOrThrow(e),{isFastlaneShippingOptionAutoSelectEnabled:r}=i.initializationData||{},o=t.getConsignments()||[],a=(null===(n=o[0])||void 0===n?void 0:n.availableShippingOptions)||[],d=a[0],l=a.find(e=>e.isRecommended);if((l||d)&&r){const e=(null==l?void 0:l.id)||d.id;yield this.paymentIntegrationService.selectShippingOption(e)}}})}getFastlaneStyles(e,t){const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e),{fastlaneStyles:i,isFastlaneStylingEnabled:r}=n.initializationData||{};return Ke(r?i:{},null==t?void 0:t.styles)}}const ht=c(e=>new pt(e,S(),ze()),[{id:\"paypalcommerceacceleratedcheckout\"},{id:\"paypalcommercecreditcards\"}]);class yt{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalIntegrationService=t,this.paypalButtonCreationService=n}initialize(e){var t,n,i,r,o;return n=this,i=void 0,o=function*(){const{paypalcommerce:n,containerId:i,methodId:r}=e,o=Boolean(null==n?void 0:n.buyNowInitializeOptions);if(!r)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!i)throw new $('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!n)throw new $('Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.');if(o&&!n.currencyCode)throw new $('Unable to initialize payment because \"options.paypalcommerce.currencyCode\" argument is not provided.');if(o&&\"function\"!=typeof(null===(t=n.buyNowInitializeOptions)||void 0===t?void 0:t.getBuyNowCartRequestBody))throw new $('Unable to initialize payment because \"options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');o||(yield this.paymentIntegrationService.loadDefaultCheckout());const a=o?n.currencyCode:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.paypalIntegrationService.loadPayPalSdk(r,a,!1),this.renderButton(i,r,n)},new((r=void 0)||(r=Promise))(function(e,t){function a(e){try{d(o.next(e))}catch(e){t(e)}}function s(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r(function(e){e(n)})).then(a,s)}d((o=o.apply(n,i||[])).next())})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.paypalIntegrationService.getPayPalSdkOrThrow(),d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:l,isServerSideShippingCallbacksEnabled:c}=d.initializationData||{},u={onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},p=Object.assign(Object.assign({fundingSource:s.FUNDING.PAYPAL,style:this.paypalIntegrationService.getValidButtonStyle(r),isServerSideShippingCallbacksEnabled:c,isHostedCheckoutEnabled:l},i&&u),l&&o&&{onPaymentComplete:()=>o()}),h=this.paypalButtonCreationService.createPayPalButton(\"paypalcommerce\",t,p,i);h.isEligible()?h.render(`#${e}`):a&&\"function\"==typeof a?a():this.paypalIntegrationService.removeElement(e)}}const mt=c(e=>{const t=R(e),n=new Ze(e,t);return new yt(e,t,n)},[{id:\"paypalcommerce\"}]);var gt=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class vt{constructor(e,t){this.paymentIntegrationService=e,this.paypalIntegrationService=t}initialize(e){return gt(this,void 0,void 0,function*(){const{paypalcommercecredit:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new $('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new $('Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.');if(a&&!o)throw new $('Unable to initialize payment because \"options.paypalcommercecredit.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new $('Unable to initialize payment because \"options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=this.paymentIntegrationService.getState(),d=a?o:s.getCartOrThrow().currency.code;yield this.paypalIntegrationService.loadPayPalSdk(i,d,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onComplete:o,onEligibilityFailure:a}=n,s=this.paypalIntegrationService.getPayPalSdkOrThrow(),d=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),{isHostedCheckoutEnabled:l,isServerSideShippingCallbacksEnabled:c}=d.initializationData||{},u={createOrder:()=>this.paypalIntegrationService.createOrder(\"paypalcommercecredit\"),onApprove:({orderID:e})=>this.paypalIntegrationService.tokenizePayment(t,e)},p={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},h=Object.assign(Object.assign({},!c&&{onShippingAddressChange:e=>this.onShippingAddressChange(e),onShippingOptionsChange:e=>this.onShippingOptionsChange(e)}),{onApprove:(e,n)=>this.onHostedCheckoutApprove(e,n,t,o,c)}),y=[s.FUNDING.PAYLATER,s.FUNDING.CREDIT];let m=!1;y.forEach(t=>{if(!m){const n=Object.assign(Object.assign(Object.assign({fundingSource:t,style:this.paypalIntegrationService.getValidButtonStyle(r)},u),i&&p),l&&h),o=s.Buttons(n);o.isEligible()?(o.render(`#${e}`),m=!0):a&&\"function\"==typeof a&&a()}}),m||this.paypalIntegrationService.removeElement(e)}handleClick(e){return gt(this,void 0,void 0,function*(){if(e){const t=yield this.paypalIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}onHostedCheckoutApprove(e,t,n,i,r){return gt(this,void 0,void 0,function*(){if(!e.orderID)throw new h(d.MissingOrderId);const o=this.paymentIntegrationService.getState().getCartOrThrow();try{const a=o.lineItems.physicalItems.length>0;if(!r){const e=yield t.order.get(),n=this.paypalIntegrationService.getBillingAddressFromOrderDetails(e);if(yield this.paymentIntegrationService.updateBillingAddress(n),a){const t=this.paypalIntegrationService.getShippingAddressFromOrderDetails(e);yield this.paymentIntegrationService.updateShippingAddress(t)}}return a&&(yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\",void 0,void 0,r)),r&&(yield this.paymentIntegrationService.loadCheckout()),yield this.paymentIntegrationService.submitOrder({},{params:{methodId:n}}),yield this.paypalIntegrationService.submitPayment(n,e.orderID),i&&\"function\"==typeof i&&i(),!0}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingAddressChange(e){return gt(this,void 0,void 0,function*(){const t=this.paypalIntegrationService.getAddress({city:e.shippingAddress.city,countryCode:e.shippingAddress.countryCode,postalCode:e.shippingAddress.postalCode,stateOrProvinceCode:e.shippingAddress.state});try{yield this.paymentIntegrationService.updateBillingAddress(t),yield this.paymentIntegrationService.updateShippingAddress(t);const e=this.paypalIntegrationService.getShippingOptionOrThrow();yield this.paymentIntegrationService.selectShippingOption(e.id),yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\")}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}onShippingOptionsChange(e){return gt(this,void 0,void 0,function*(){const t=this.paypalIntegrationService.getShippingOptionOrThrow(e.selectedShippingOption.id);try{yield this.paymentIntegrationService.selectShippingOption(t.id),yield this.paypalIntegrationService.updateOrder(\"paypalcommerce\")}catch(e){if(\"string\"==typeof e)throw new Error(e);throw e}})}}const ft=c(e=>new vt(e,R(e)),[{id:\"paypalcommercecredit\"}]);var St=function(e,t,n,i){return new(n||(n=Promise))(function(r,o){function a(e){try{d(i.next(e))}catch(e){o(e)}}function s(e){try{d(i.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};class It{constructor(e,t){this.paymentIntegrationService=e,this.paypalCommerceIntegrationService=t}initialize(e){return St(this,void 0,void 0,function*(){const{paypalcommercevenmo:t,containerId:n,methodId:i}=e,{buyNowInitializeOptions:r,currencyCode:o}=t||{},a=!!r;if(!i)throw new $('Unable to initialize payment because \"options.methodId\" argument is not provided.');if(!n)throw new $('Unable to initialize payment because \"options.containerId\" argument is not provided.');if(!t)throw new $('Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.');if(a&&!o)throw new $('Unable to initialize payment because \"options.paypalcommercevenmo.currencyCode\" argument is not provided.');if(a&&\"function\"!=typeof(null==r?void 0:r.getBuyNowCartRequestBody))throw new $('Unable to initialize payment because \"options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.');a||(yield this.paymentIntegrationService.loadDefaultCheckout());const s=a?o:this.paymentIntegrationService.getState().getCartOrThrow().currency.code;yield this.paypalCommerceIntegrationService.loadPayPalSdk(i,s,!1),this.renderButton(n,i,t)})}deinitialize(){return Promise.resolve()}renderButton(e,t,n){const{buyNowInitializeOptions:i,style:r,onEligibilityFailure:o}=n,a=this.paypalCommerceIntegrationService.getPayPalSdkOrThrow(),s=a.FUNDING.VENMO,d={createOrder:()=>this.paypalCommerceIntegrationService.createOrder(\"paypalcommercevenmo\"),onApprove:({orderID:e})=>this.paypalCommerceIntegrationService.tokenizePayment(t,e)},l={onClick:()=>this.handleClick(i),onCancel:()=>this.paymentIntegrationService.loadDefaultCheckout()},c=Object.assign(Object.assign({fundingSource:s,style:this.getValidVenmoButtonStyles(r)},d),i&&l),u=a.Buttons(c);u.isEligible()?u.render(`#${e}`):o&&\"function\"==typeof o?o():this.paypalCommerceIntegrationService.removeElement(e)}getValidVenmoButtonStyles(e){const t=this.paypalCommerceIntegrationService.getValidButtonStyle(e);return t.color===me.gold?Object.assign(Object.assign({},t),{color:void 0}):t}handleClick(e){return St(this,void 0,void 0,function*(){if(e){const t=yield this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(e);yield this.paymentIntegrationService.loadCheckout(t.id)}})}}const _t=c(e=>new It(e,rt(e)),[{id:\"paypalcommercevenmo\"}]);export{_e as createPayPalCommerceAlternativeMethodsPaymentStrategy,mt as createPayPalCommerceButtonStrategy,ft as createPayPalCommerceCreditButtonStrategy,Ue as createPayPalCommerceCreditCardsPaymentStrategy,st as createPayPalCommerceCreditCustomerStrategy,ae as createPayPalCommerceCreditPaymentStrategy,Qe as createPayPalCommerceCustomerStrategy,ht as createPayPalCommerceFastlaneCustomerStrategy,Ye as createPayPalCommerceFastlanePaymentStrategy,ne as createPayPalCommercePaymentStrategy,Le as createPayPalCommerceRatePayPaymentStrategy,_t as createPayPalCommerceVenmoButtonStrategy,ct as createPayPalCommerceVenmoCustomerStrategy,le as createPayPalCommerceVenmoPaymentStrategy};\n//# sourceMappingURL=paypal-commerce.js.map"
  },
  {
    "path": "dist/esm/integrations/paypal-express.js",
    "content": "import{getScriptLoader as e}from\"@bigcommerce/script-loader\";import{noop as t}from\"lodash\";import{createFormPoster as n}from\"@bigcommerce/form-poster\";var i,a,r,s,o,c,d,l,u={};function p(e,t){return Object.assign(e,{resolveIds:t})}u.d=(e,t)=>{for(var n in t)u.o(t,n)&&!u.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},u.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);class h extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(i||(i={}));class y extends h{constructor(e){super(function(e){switch(e){case i.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case i.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case i.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case i.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case i.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case i.MissingCheckoutConfig:case i.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case i.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case i.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case i.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case i.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case i.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case i.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(a||(a={}));class m extends h{constructor(e){super(function(e){switch(e){case a.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case a.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case a.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case a.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}class g extends h{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(e){e.HORIZONTAL=\"horizontal\",e.VERTICAL=\"vertical\"}(r||(r={})),function(e){e.SMALL=\"small\",e.MEDIUM=\"medium\",e.LARGE=\"large\",e.RESPONSIVE=\"responsive\"}(s||(s={})),function(e){e.GOLD=\"gold\",e.BLUE=\"blue\",e.SIlVER=\"silver\",e.BLACK=\"black\"}(o||(o={})),function(e){e.CHECKOUT=\"checkout\",e.PAY=\"pay\",e.BUYNOW=\"buynow\",e.PAYPAL=\"paypal\",e.CREDIT=\"credit\"}(c||(c={})),function(e){e.PILL=\"pill\",e.RECT=\"rect\"}(d||(d={})),function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(l||(l={}));var f=function(e,t,n,i){return new(n||(n=Promise))(function(a,r){function s(e){try{c(i.next(e))}catch(e){r(e)}}function o(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,o)}c((i=i.apply(e,t||[])).next())})};class I{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t,this.useRedirectFlow=!1,this.window=window}initialize(e){return f(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState();this.paymentMethod=t.getPaymentMethodOrThrow(e.methodId),this.useRedirectFlow=!0===(e.paypalexpress&&e.paypalexpress.useRedirectFlow);const n=this.paymentMethod.config.merchantId;if(!this.isInContextEnabled()||!n)throw new y(i.MissingPaymentMethod);const a=yield this.scriptLoader.loadPaypalSDK();this.paypalSdk=a,this.paypalSdk.checkout.setup(n,{button:\"paypal-button\",environment:this.paymentMethod.config.testMode?\"sandbox\":\"production\"})})}deinitialize(){return this.isInContextEnabled()&&this.paypalSdk&&(this.paypalSdk.checkout.closeFlow(),this.paypalSdk=void 0),Promise.resolve()}execute(e,n){return f(this,void 0,void 0,function*(){let i,r;const s=this.paypalSdk;if(!this.isAcknowledgedOrFinalized()){if(!this.isInContextEnabled()||this.useRedirectFlow)return i=yield this.paymentIntegrationService.submitOrder(e,n),r=i.getPaymentRedirectUrl(),r&&this.window.top&&(this.window.top.location.href=r),new Promise(t);if(!s)throw new m(a.PaymentNotInitialized);s.checkout.initXO();try{i=yield this.paymentIntegrationService.submitOrder(e,n)}catch(e){return s.checkout.closeFlow(),Promise.reject(e)}return r=i.getPaymentRedirectUrl(),r&&s.checkout.startFlow(r),new Promise(t)}yield this.paymentIntegrationService.submitOrder(e,n)})}finalize(e){return f(this,void 0,void 0,function*(){return this.paymentIntegrationService.getState().getOrder()&&this.isAcknowledgedOrFinalized()?(yield this.paymentIntegrationService.finalizeOrder(e),Promise.resolve()):Promise.reject(new g)})}isAcknowledgedOrFinalized(){const e=this.paymentIntegrationService.getState();return e.getPaymentStatus()===l.ACKNOWLEDGE||e.getPaymentStatus()===l.FINALIZE}isInContextEnabled(){return!(!this.paymentMethod||!this.paymentMethod.config.merchantId)}}class b extends h{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class w{constructor(e){this.scriptLoader=e,this.window=window}loadPaypalSDK(e=\"\"){return t=this,n=void 0,a=function*(){const t=Object.assign({async:!0,attributes:{\"data-merchant-id\":e}},e&&{attributes:{\"data-merchant-id\":e}});if(yield this.scriptLoader.loadScript(\"//www.paypalobjects.com/api/checkout.min.js\",t),!this.window.paypal)throw new b;return this.window.paypal},new((i=void 0)||(i=Promise))(function(e,r){function s(e){try{c(a.next(e))}catch(e){r(e)}}function o(e){try{c(a.throw(e))}catch(e){r(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(s,o)}c((a=a.apply(t,n||[])).next())});var t,n,i,a}}const P=p(t=>new I(t,new w(e())),[{id:\"paypalexpress\",type:\"PAYMENT_TYPE_HOSTED\"},{id:\"paypalexpresscredit\",type:\"PAYMENT_TYPE_HOSTED\"}]);class M extends h{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}const v={\"X-Checkout-SDK-Version\":\"1.916.1\"};var S=function(e,t,n,i){return new(n||(n=Promise))(function(a,r){function s(e){try{c(i.next(e))}catch(e){r(e)}}function o(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,o)}c((i=i.apply(e,t||[])).next())})};class E{constructor(e,t,n){this.paymentIntegrationService=e,this.paypalExpressScriptLoader=t,this.formPoster=n}initialize(e){return S(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);if(!e.paypal)throw new M;if(!t.config.merchantId)throw new y(i.MissingPaymentMethod);const n=yield this.paypalExpressScriptLoader.loadPaypalSDK(t.config.merchantId);this.renderButton(e,n)})}deinitialize(){return Promise.resolve()}renderButton(e,t){const{containerId:n,methodId:a,paypal:r}=e,{allowCredit:s,clientId:o,onPaymentError:c,shouldProcessPayment:d,style:l}=r,u=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);if(!u.config.merchantId)throw new y(i.MissingPaymentMethod);const p=u.config.merchantId,h=u.config.testMode?\"sandbox\":\"production\",m={[h]:o},g=t.FUNDING.CREDIT||\"credit\",f=s?[g]:[],I=s?[]:[g];return t.Button.render({env:h,client:m,commit:d,funding:{allowed:f,disallowed:I},style:this.getStyle(l),payment:(e,t)=>this.setupPayment(p,t,c),onAuthorize:(e,t)=>this.tokenizePayment(e,a,t,d)},n)}getStyle(e){const{color:t,fundingicons:n,label:i,layout:a,shape:r,size:o,tagline:c}=e||{};return{color:t,fundingicons:n,label:i,layout:a,shape:r||d.RECT,size:\"small\"===o?s.RESPONSIVE:o,tagline:c}}setupPayment(e,t,n){return S(this,void 0,void 0,function*(){if(!t)throw new m(a.CheckoutButtonNotInitialized);try{const n=yield this.paymentIntegrationService.loadDefaultCheckout(),{id:i}=n.getCartOrThrow(),a=n.getHost()||\"\";return(yield t.request.post(`${a}/api/storefront/payment/paypalexpress`,{merchantId:e,cartId:i},{headers:Object.assign({\"X-API-INTERNAL\":\"This API endpoint is for internal use only and may change in the future\"},v)})).id}catch(e){throw n&&e instanceof h&&n(e),e}})}tokenizePayment(e,t,n,r){return S(this,void 0,void 0,function*(){if(!n)throw new m(a.CheckoutButtonNotInitialized);if(!e.paymentID||!e.payerID)throw new y(i.MissingPayment);const s=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t),o=yield n.payment.get(e.paymentID);return this.formPoster.postForm(\"/checkout.php\",{payment_type:\"paypal\",provider:s.id,action:r?\"process_payment\":\"set_external_checkout\",paymentId:e.paymentID,payerId:e.payerID,payerInfo:JSON.stringify(o.payer.payer_info)})})}}const C=p(t=>new E(t,new w(e()),n()),[{id:\"paypalexpress\"}]);export{C as createPaypalExpressButtonStrategy,P as createPaypalExpressPaymentStrategy};\n//# sourceMappingURL=paypal-express.js.map"
  },
  {
    "path": "dist/esm/integrations/paypal-pro.js",
    "content": "import{getScriptLoader as e}from\"@bigcommerce/script-loader\";import{includes as t,isNil as n,merge as i,noop as r,some as a,values as s}from\"lodash\";var o,d,c=function(e,t,n,i){return new(n||(n=Promise))(function(r,a){function s(e){try{d(i.next(e))}catch(e){a(e)}}function o(e){try{d(i.throw(e))}catch(e){a(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,o)}d((i=i.apply(e,t||[])).next())})};class u{constructor(e,t){this._paymentIntegrationService=e,this._cardinalClient=t}prepare(e){return c(this,void 0,void 0,function*(){yield this._cardinalClient.load(e.id,e.config.testMode),yield this._cardinalClient.configure(yield this._getClientToken(e))})}start(e,t,n,r){return c(this,void 0,void 0,function*(){const{getCardInstrument:s,getPaymentMethodOrThrow:o}=this._paymentIntegrationService.getState(),{payment:{methodId:d=\"\",paymentData:c={}}={}}=t,u=function(e){return Boolean(e.instrumentId)}(c)&&s(c.instrumentId),l=u?u.iin:r&&r.getBin();l&&(yield this._cardinalClient.runBinProcess(l));try{return yield e(i(t,{payment:{paymentData:{threeDSecure:{token:o(d).clientToken}}}}),n)}catch(e){if(!(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)||!a(e.body.errors,{code:\"three_d_secure_required\"}))throw e;const n=yield this._cardinalClient.getThreeDSecureData(e.body.three_ds_result,this._getOrderData());if(!r)return void(yield this._paymentIntegrationService.submitPayment(i(t.payment,{paymentData:{threeDSecure:n}})));yield r.submit(i(t.payment,{paymentData:{threeDSecure:n}}))}})}_getClientToken(e){return c(this,void 0,void 0,function*(){return e.clientToken?e.clientToken:(yield this._paymentIntegrationService.loadPaymentMethod(e.id),this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e.id).clientToken||\"\")})}_getOrderData(){const e=this._paymentIntegrationService.getState(),t=e.getBillingAddressOrThrow(),n=e.getShippingAddress(),i=e.getCheckoutOrThrow(),r=e.getOrderOrThrow();return{billingAddress:t,shippingAddress:n,currencyCode:i.cart.currency.code,id:r.orderId.toString(),amount:i.cart.cartAmount}}}class l extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(o||(o={}));class h extends l{constructor(e){super(function(e){switch(e){case o.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case o.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case o.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case o.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case o.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case o.MissingCheckoutConfig:case o.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case o.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case o.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case o.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case o.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case o.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case o.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class m extends l{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(d||(d={}));class p extends l{constructor(e){super(function(e){switch(e){case d.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case d.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case d.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case d.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const g=[100004,1010,1011,1020];var y,b,f,v,_,C,I;!function(e){e.SetupCompleted=\"payments.setupComplete\",e.Validated=\"payments.validated\"}(y||(y={})),function(e){e.Init=\"init\",e.Complete=\"complete\",e.Confirm=\"confirm\"}(b||(b={})),function(e){e.Success=\"SUCCESS\",e.NoAction=\"NOACTION\",e.Failure=\"FAILURE\",e.Error=\"ERROR\"}(f||(f={})),function(e){e.CCA=\"CCA\",e.Paypal=\"Paypal\",e.Wallet=\"Wallet\",e.VisaCheckout=\"VisaCheckout\",e.ApplePay=\"ApplePay\",e.DiscoverWallet=\"DiscoverWallet\"}(v||(v={})),function(e){e.BinProcess=\"bin.process\"}(_||(_={})),function(e){e.CCA=\"cca\"}(C||(C={})),function(e){e.Yes=\"Y\",e.No=\"N\"}(I||(I={}));class P{constructor(e){this._scriptLoader=e,this._provider=\"\",this._testMode=!1,this._configurationToken=\"\"}load(e,t=!1){return this._provider=e,this._testMode=t,this._sdk||(this._sdk=this._scriptLoader.load(e,t)),this._sdk.then(r)}configure(e){if(this._configurationToken){if(this._configurationToken===e)return Promise.resolve();this._sdk=this._scriptLoader.load(`${this._provider}.${Date.now()}`,this._testMode)}return this._getClientSDK().then(n=>new Promise((i,r)=>{n.on(y.SetupCompleted,()=>{n.off(y.SetupCompleted),n.off(y.Validated),this._configurationToken=e,i()}),n.on(y.Validated,e=>{n.off(y.SetupCompleted),n.off(y.Validated),e.ActionCode===f.Error&&(t(g,e.ErrorNumber)&&r(new h(o.MissingPaymentMethod)),r(new m(e.ErrorDescription)))}),n.setup(b.Init,{jwt:e})}))}runBinProcess(e){return this._getClientSDK().then(t=>t.trigger(_.BinProcess,e).catch(r)).then(e=>{if(!e||!e.Status)throw new p(d.PaymentNotInitialized)})}getThreeDSecureData(e,t){return this._getClientSDK().then(n=>new Promise((i,r)=>{n.on(y.Validated,(e,t)=>{if(n.off(y.Validated),!t)return r(new m(e.ErrorDescription?e.ErrorDescription:\"An error was encountered while processing the transaction.\"));if(!e.ActionCode)return i({token:t});switch(e.ActionCode){case f.Success:return i({token:t});case f.NoAction:return e.ErrorNumber>0?r(new m(e.ErrorDescription)):e.Payment&&e.Payment.ExtendedData&&e.Payment.ExtendedData.SignatureVerification===I.Yes?i({token:t}):r(new m(\"Transaction signature could not be validated.\"));case f.Failure:return r(new m(\"User failed authentication or an error was encountered while processing the transaction.\"));case f.Error:return r(new m(e.ErrorDescription))}});const a={AcsUrl:e.acs_url,Payload:e.merchant_data},s=this._mapToPartialOrder(t,e.payer_auth_request);n.continue(C.CCA,a,s)}))}_mapToPartialOrder(e,t){const n={BillingAddress:this._mapToCardinalAddress(e.billingAddress)};return e.paymentData&&(n.Account=this._mapToCardinalAccount(e.paymentData)),e.billingAddress.email&&(n.Email1=e.billingAddress.email),e.shippingAddress&&(n.ShippingAddress=this._mapToCardinalAddress(e.shippingAddress)),{Consumer:n,OrderDetails:{OrderNumber:e.id,Amount:e.amount,CurrencyCode:e.currencyCode,OrderChannel:\"S\",TransactionId:t}}}_mapToCardinalAccount(e){return{AccountNumber:Number(e.ccNumber),ExpirationMonth:Number(e.ccExpiry.month),ExpirationYear:Number(e.ccExpiry.year),NameOnAccount:e.ccName,CardCode:Number(e.ccCvv)}}_mapToCardinalAddress(e){const t={FirstName:e.firstName,LastName:e.lastName,Address1:e.address1,City:e.city,State:e.stateOrProvince,PostalCode:e.postalCode,CountryCode:e.countryCode};return e.address2&&(t.Address2=e.address2),e.phone&&(t.Phone1=e.phone),t}_getClientSDK(){if(!this._sdk)throw new p(d.PaymentNotInitialized);return this._sdk}}class w extends l{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class S{constructor(e,t=window){this._scriptLoader=e,this._window=t}load(e,t){const n=t?\"https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js\":\"https://static.client.cardinaltrusted.com/songbird/v2.0.0/songbird.js\";return this._scriptLoader.loadScript(`${n}?v=${e}`).then(()=>{if(!this._window.Cardinal)throw new w;return this._window.Cardinal})}}class M extends l{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class O extends l{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class A extends M{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}var E,N=function(e,t,n,i){return new(n||(n=Promise))(function(r,a){function s(e){try{d(i.next(e))}catch(e){a(e)}}function o(e){try{d(i.throw(e))}catch(e){a(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,o)}d((i=i.apply(e,t||[])).next())})},k=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n};class D{constructor(e){this._paymentIntegrationService=e}execute(e,t){var n,i;return this._isHostedPaymentFormEnabled(null===(n=e.payment)||void 0===n?void 0:n.methodId,null===(i=e.payment)||void 0===i?void 0:i.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve();const t=e&&e.creditCard&&e.creditCard.form,n=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:i=\"\"}={}}=n.getStoreConfigOrThrow();if(!t)throw new M;const r=this._paymentIntegrationService.createHostedForm(i,t);return r.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=r,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new O)}_executeWithoutHostedForm(e,t){return N(this,void 0,void 0,function*(){const{payment:n}=e,i=k(e,[\"payment\"]),r=n&&n.paymentData;if(!n||!r)throw new A([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:r}))})}_executeWithHostedForm(e,t){return N(this,void 0,void 0,function*(){const{payment:n}=e,i=k(e,[\"payment\"]),r=this._hostedForm;if(!r)throw new p(d.PaymentNotInitialized);if(!n||!n.methodId)throw new A([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(i,t),yield r.validate().then(()=>r.submit(n))})}_isHostedPaymentFormEnabled(e,t){return!!e&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(e){return!s(e&&e.creditCard&&e.creditCard.form.fields).every(n)}}!function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(E||(E={}));const T=E;var x=function(e,t,n,i){return new(n||(n=Promise))(function(r,a){function s(e){try{d(i.next(e))}catch(e){a(e)}}function o(e){try{d(i.throw(e))}catch(e){a(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,o)}d((i=i.apply(e,t||[])).next())})};class z extends D{constructor(e,t){super(e),this.paymentIntegrationService=e,this.threeDSecureFlow=t}initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return x(this,void 0,void 0,function*(){yield t.initialize.call(this,e);const n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e.methodId);n.config.is3dsEnabled&&(yield this.threeDSecureFlow.prepare(n))})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return x(this,void 0,void 0,function*(){const{payment:{methodId:i=\"\"}={}}=e,r=this.paymentIntegrationService.getState();return r.getPaymentStatus()===T.ACKNOWLEDGE?(yield this.paymentIntegrationService.submitOrder(Object.assign(Object.assign({},e),{payment:{methodId:i}}),t),Promise.resolve()):r.getPaymentMethodOrThrow(i).config.is3dsEnabled?this.threeDSecureFlow.start(n.execute.bind(this),e,t,this._hostedForm):n.execute.call(this,e,t)})}}const F=(U=t=>new z(t,new u(t,new P(new S(e())))),j=[{id:\"paypal\"}],Object.assign(U,{resolveIds:j}));var U,j;export{F as createPayPalProPaymentStrategy};\n//# sourceMappingURL=paypal-pro.js.map"
  },
  {
    "path": "dist/esm/integrations/sagepay.js",
    "content": "import{createFormPoster as e}from\"@bigcommerce/form-poster\";import{isNil as t,some as i,values as n}from\"lodash\";var r;class s extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class a extends s{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class o extends s{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class d extends a{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(r||(r={}));class c extends s{constructor(e){super(function(e){switch(e){case r.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case r.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case r.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case r.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var u,l=function(e,t,i,n){return new(i||(i=Promise))(function(r,s){function a(e){try{d(n.next(e))}catch(e){s(e)}}function o(e){try{d(n.throw(e))}catch(e){s(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,o)}d((n=n.apply(e,t||[])).next())})},m=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i};class h{constructor(e){this._paymentIntegrationService=e}execute(e,t){var i,n;return this._isHostedPaymentFormEnabled(null===(i=e.payment)||void 0===i?void 0:i.methodId,null===(n=e.payment)||void 0===n?void 0:n.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve();const t=e&&e.creditCard&&e.creditCard.form,i=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:n=\"\"}={}}=i.getStoreConfigOrThrow();if(!t)throw new a;const r=this._paymentIntegrationService.createHostedForm(n,t);return r.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=r,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new o)}_executeWithoutHostedForm(e,t){return l(this,void 0,void 0,function*(){const{payment:i}=e,n=m(e,[\"payment\"]),r=i&&i.paymentData;if(!i||!r)throw new d([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(n,t),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},i),{paymentData:r}))})}_executeWithHostedForm(e,t){return l(this,void 0,void 0,function*(){const{payment:i}=e,n=m(e,[\"payment\"]),s=this._hostedForm;if(!s)throw new c(r.PaymentNotInitialized);if(!i||!i.methodId)throw new d([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(n,t),yield s.validate().then(()=>s.submit(i))})}_isHostedPaymentFormEnabled(e,t){return!!e&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(e){return!n(e&&e.creditCard&&e.creditCard.form.fields).every(t)}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(u||(u={}));class g extends s{constructor(e){super(function(e){switch(e){case u.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case u.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case u.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case u.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case u.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case u.MissingCheckoutConfig:case u.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case u.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case u.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case u.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case u.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case u.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case u.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}function p(){const{navigator:e}=window;let t;return t=e.language?e.language:e.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof e.javaEnabled&&e.javaEnabled(),language:t,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}var y;!function(e){e.ACKNOWLEDGE=\"ACKNOWLEDGE\",e.FINALIZE=\"FINALIZE\",e.INITIALIZE=\"INITIALIZE\"}(y||(y={}));const b=y;class f extends h{constructor(e,t){super(e),this.paymentIntegrationService=e,this._formPoster=t}execute(e,t){const{payment:n}=e;if(!n)throw new c(r.PaymentNotInitialized);const{paymentData:s}=n;if(!s)throw new g(u.MissingPayment);if(this._isThreeDSTwoExperimentOn()){const t=Object.assign(Object.assign({},s),{browser_info:p()});e.payment&&(e.payment.paymentData=t)}return super.execute(e,t).catch(e=>(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)&&i(e.body.errors,{code:\"three_d_secure_required\"})?new Promise(()=>{let t;t=this._isThreeDSTwoExperimentOn()&&!e.body.three_ds_result.merchant_data?{creq:e.body.three_ds_result.payer_auth_request}:{PaReq:e.body.three_ds_result.payer_auth_request,TermUrl:e.body.three_ds_result.callback_url,MD:e.body.three_ds_result.merchant_data},this._formPoster.postForm(e.body.three_ds_result.acs_url,t,void 0,\"_top\")}):Promise.reject(e))}finalize(e){const t=this.paymentIntegrationService.getState();return t.getOrder()&&t.getPaymentStatus()===b.FINALIZE&&this.paymentIntegrationService.finalizeOrder(e),super.finalize()}_isThreeDSTwoExperimentOn(){return!0===this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings.features[\"INT-4994.Opayo_3DS2\"]}}const _=(v=t=>new f(t,e()),I=[{id:\"sagepay\"}],Object.assign(v,{resolveIds:I}));var v,I;export{_ as createSagePayPaymentStrategy};\n//# sourceMappingURL=sagepay.js.map"
  },
  {
    "path": "dist/esm/integrations/sezzle.js",
    "content": "import{createFormPoster as e}from\"@bigcommerce/form-poster\";class t extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class r extends t{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class n extends r{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class i extends t{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class o{constructor(e,t){this._formPoster=e,this._paymentIntegrationService=t}execute(e,t){return r=this,i=void 0,a=function*(){const{payment:r}=e,i=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]])}return r}(e,[\"payment\"]),o=r&&r.paymentData;if(!r||!o)throw new n([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t);try{yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},r),{paymentData:o}))}catch(e){if(!(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)||\"object\"!=typeof(a=e.body)||null===a||!(\"additional_action_required\"in a)||!this._isAdditionalActionRequired(e.body))return Promise.reject(e);const{body:{additional_action_required:{data:{redirect_url:t}}}}=e;return new Promise(()=>{this.redirectUrl(t)})}var a},new((o=void 0)||(o=Promise))(function(e,t){function n(e){try{c(a.next(e))}catch(e){t(e)}}function s(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof o?r:new o(function(e){e(r)})).then(n,s)}c((a=a.apply(r,i||[])).next())});var r,i,o,a}finalize(){return Promise.reject(new i)}initialize(){return Promise.resolve()}deinitialize(){return Promise.resolve()}redirectUrl(e){return this._formPoster.postForm(e,{})}_isAdditionalActionRequired(e){const{additional_action_required:t,status:r}=e;return\"additional_action_required\"===r&&t&&\"offsite_redirect\"===t.type}}class a extends o{redirectUrl(e){window.location.replace(e)}}const s=(c=t=>new a(e(),t),d=[{id:\"sezzle\"}],Object.assign(c,{resolveIds:d}));var c,d;export{s as createSezzlePaymentStrategy};\n//# sourceMappingURL=sezzle.js.map"
  },
  {
    "path": "dist/esm/integrations/squarev2.js",
    "content": "import{getScriptLoader as e}from\"@bigcommerce/script-loader\";import{fromEvent as t,merge as i}from\"rxjs\";import{distinctUntilChanged as n,map as r}from\"rxjs/operators\";var o,a;class s extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class d extends s{constructor(e,t,i){super(i||\"Payment cannot be processed for this order, please select another payment method\"),this.type=\"custom_provider_execute_error\",this.name=t,this.subtype=e}}function c(e,t){if(null==e)throw t?t():new Error(\"An unexpected error has occurred.\");return e}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(o||(o={}));class u extends s{constructor(e){super(function(e){switch(e){case o.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case o.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case o.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case o.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}!function(e){e.CHARGE=\"CHARGE\",e.STORE=\"STORE\"}(a||(a={}));var l=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class h{constructor(e,t){this._scriptLoader=e,this._paymentIntegrationService=t}initialize({testMode:e,applicationId:t,locationId:i}){return l(this,void 0,void 0,function*(){const n=yield this._scriptLoader.load(e);this._payments=n.payments(t,i)})}deinitialize(){return l(this,void 0,void 0,function*(){this._formValidationSubscription&&this._formValidationSubscription.unsubscribe(),this._card&&(yield this._card.destroy()),this._formValidationSubscription=void 0,this._card=void 0,this._payments=void 0})}initializeCard({containerId:e,style:t,onValidationChange:i}){return l(this,void 0,void 0,function*(){const{postalCode:n}=this._paymentIntegrationService.getState().getBillingAddress()||{};this._card=yield this._getPayments().card(),yield this._card.attach(`#${e}`);try{yield this._card.configure({postalCode:n,style:t})}catch(e){}i&&(this._formValidationSubscription=this._subscribeToFormValidation(this._card,i))})}tokenize(){return l(this,void 0,void 0,function*(){const e=yield this._getCard().tokenize();if(\"OK\"!==e.status||!e.token){let t=`Tokenization failed with status: ${e.status}`;throw\"errors\"in e&&e.errors&&(t+=` and errors: ${JSON.stringify(e.errors)}`),new d(\"payment.errors.card_error\",\"SquareV2TokenizationError\",t)}return e.token})}verifyBuyer(e,t){return l(this,void 0,void 0,function*(){return t===a.CHARGE?this._chargeVerifyBuyer(e):this._storeVerifyBuyer(e)})}_getPayments(){return c(this._payments,()=>new u(o.PaymentNotInitialized))}_subscribeToFormValidation(e,o){const a=[\"cardNumber\",\"cvv\"],s=new Set(a),d=[\"focusClassAdded\",\"focusClassRemoved\",\"errorClassAdded\",\"errorClassRemoved\",\"cardBrandChanged\",\"postalCodeChanged\"].map(i=>t(e,i));return i(...d).pipe(r(e=>{const{detail:{field:t,currentState:{isCompletelyValid:i}}}=e;return a.includes(t)&&s[i?\"delete\":\"add\"](t),0===s.size}),n()).subscribe(o)}_getCard(){return c(this._card,()=>new u(o.PaymentNotInitialized))}_mapToSquareBillingContact({firstName:e,lastName:t,address1:i,address2:n,city:r,stateOrProvinceCode:o,postalCode:a,countryCode:s,email:d,phone:c}){return{givenName:e,familyName:t,addressLines:[i,n],city:r,state:o,postalCode:a,countryCode:s,email:d,phone:c}}_chargeVerifyBuyer(e){return l(this,void 0,void 0,function*(){const{getCheckoutOrThrow:t,getBillingAddressOrThrow:i}=this._paymentIntegrationService.getState(),{outstandingBalance:n,cart:r}=t(),o={amount:n.toString(),billingContact:this._mapToSquareBillingContact(i()),currencyCode:r.currency.code,intent:a.CHARGE},s=yield this._getPayments().verifyBuyer(e,o);return s?s.token:\"\"})}_storeVerifyBuyer(e){return l(this,void 0,void 0,function*(){const{getBillingAddressOrThrow:t}=this._paymentIntegrationService.getState(),i={billingContact:this._mapToSquareBillingContact(t()),intent:a.STORE},n=yield this._getPayments().verifyBuyer(e,i);return n?n.token:\"\"})}}class y extends s{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}const m={body:{},headers:{},status:0};class p extends s{constructor(e,{message:t,errors:i}={}){const{body:n,headers:r,status:o}=e||m;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=n,this.headers=r,this.status=o,this.errors=i||[]}}class f extends p{constructor(e){super(e,{message:\"There is a problem processing your payment. Please try again later.\"}),this.name=\"PaymentMethodInvalidError\",this.type=\"payment_method_invalid\"}}class v extends y{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}class _ extends s{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}var g=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function a(e){try{d(n.next(e))}catch(e){o(e)}}function s(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,s)}d((n=n.apply(e,t||[])).next())})};class b{constructor(e,t){this._paymentIntegrationService=e,this._squareV2PaymentProcessor=t}initialize(e){var t;return g(this,void 0,void 0,function*(){if(!(null===(t=null==e?void 0:e.squarev2)||void 0===t?void 0:t.containerId))throw new y('Unable to proceed because \"containerId\" argument is not provided.');const{methodId:i,squarev2:n}=e,{config:{testMode:r},initializationData:o}=this._paymentIntegrationService.getState().getPaymentMethodOrThrow(i),{applicationId:a,locationId:s}=o||{};if(!a)throw new f;yield this._squareV2PaymentProcessor.initialize({applicationId:a,locationId:s,testMode:r}),yield this._squareV2PaymentProcessor.initializeCard(n)})}execute({payment:e}){return g(this,void 0,void 0,function*(){if(!e)throw new v([\"payment\"]);const{methodId:t,paymentData:i}=e,{shouldSaveInstrument:n,shouldSetAsDefaultInstrument:r}=\"object\"!=typeof(o=i)||null===o||void 0!==o.shouldSaveInstrument&&\"boolean\"!=typeof o.shouldSaveInstrument||void 0!==o.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof o.shouldSetAsDefaultInstrument?{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1}:i;var o;yield this._paymentIntegrationService.submitOrder();const a=i&&function(e){return Boolean(e.instrumentId)}(i)?yield this._getVaultedInstrumentPayload(t,i):yield this._getCardPayload(t,n);yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},e),{paymentData:{formattedPayload:Object.assign(Object.assign({},a),{vault_payment_instrument:n||!1,set_as_default_stored_instrument:r||!1})}}))})}finalize(){return Promise.reject(new _)}deinitialize(){return this._squareV2PaymentProcessor.deinitialize()}shouldVerify(){const{features:e}=this._paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings;return e[\"PROJECT-3828.add_3ds_support_on_squarev2\"]}_getCardPayload(e,t){return g(this,void 0,void 0,function*(){const{getPaymentMethodOrThrow:i}=this._paymentIntegrationService.getState(),{initializationData:n}=i(e),r=yield this._squareV2PaymentProcessor.tokenize();if(n&&\"isSquareV2ApiV2Enabled\"in n?!n.isSquareV2ApiV2Enabled:!this.shouldVerify())return{credit_card_token:{token:r}};let o={nonce:r,token:yield this._squareV2PaymentProcessor.verifyBuyer(r,a.CHARGE)};if(t){const e=yield this._squareV2PaymentProcessor.tokenize();o=Object.assign(Object.assign({},o),{store_card_nonce:e,store_card_token:yield this._squareV2PaymentProcessor.verifyBuyer(e,a.STORE)})}return{credit_card_token:{token:JSON.stringify(o)}}})}_getVaultedInstrumentPayload(e,t){return g(this,void 0,void 0,function*(){const{getPaymentMethodOrThrow:i}=this._paymentIntegrationService.getState(),{initializationData:n}=i(e),{instrumentId:r}=t,o=(n&&\"isSquareV2ApiV2Enabled\"in n?n.isSquareV2ApiV2Enabled:this.shouldVerify())?yield this._squareV2PaymentProcessor.verifyBuyer(yield this._getSquareCardIdOrThrow(e,r),a.CHARGE):void 0;return{bigpay_token:Object.assign({token:r},o&&{three_d_secure:{token:o}})}})}_getSquareCardIdOrThrow(e,t){return g(this,void 0,void 0,function*(){const i=yield this._paymentIntegrationService.loadPaymentMethod(e,{params:{method:e,bigpayToken:t}}),{initializationData:n}=i.getPaymentMethodOrThrow(e),{cardId:r}=n||{};if(!r)throw new v([\"cardId\"]);return r})}}class S extends s{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}var I;!function(e){e.LIVE=\"https://web.squarecdn.com/v1/square.js\",e.SANDBOX=\"https://sandbox.web.squarecdn.com/v1/square.js\"}(I||(I={}));class P{constructor(e){this._scriptLoader=e}load(e=!1){return t=this,i=void 0,r=function*(){return yield this._scriptLoader.loadScript(e?I.SANDBOX:I.LIVE),function(e){if(!function(e){return\"Square\"in e}(e))throw new S}(window),window.Square},new((n=void 0)||(n=Promise))(function(e,o){function a(e){try{d(r.next(e))}catch(e){o(e)}}function s(e){try{d(r.throw(e))}catch(e){o(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof n?i:new n(function(e){e(i)})).then(a,s)}d((r=r.apply(t,i||[])).next())});var t,i,n,r}}const w=(z=t=>new b(t,new h(new P(e()),t)),C=[{id:\"squarev2\"}],Object.assign(z,{resolveIds:C}));var z,C;export{w as createSquareV2PaymentStrategy};\n//# sourceMappingURL=squarev2.js.map"
  },
  {
    "path": "dist/esm/integrations/stripe.js",
    "content": "import{getScriptLoader as e}from\"@bigcommerce/script-loader\";import{includes as t,isEmpty as i,merge as n,omitBy as r,round as o,some as s}from\"lodash\";var a,d,l={};function c(e,t){return Object.assign(e,{resolveIds:t})}l.d=(e,t)=>{for(var i in t)l.o(t,i)&&!l.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);class h extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class u extends h{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class p extends u{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}function m(e){return!(\"object\"!=typeof e||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument)}function y(e){return Boolean(e.instrumentId)}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(a||(a={}));class g extends h{constructor(e){super(function(e){switch(e){case a.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case a.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case a.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case a.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case a.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case a.MissingCheckoutConfig:case a.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case a.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case a.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case a.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case a.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case a.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case a.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class v extends h{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(d||(d={}));class S extends h{constructor(e){super(function(e){switch(e){case d.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case d.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case d.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case d.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}const _=e=>\"object\"==typeof e&&null!==e&&\"body\"in e;class f extends h{constructor(e){super(e||\"Payment process was cancelled.\"),this.name=\"PaymentMethodCancelledError\",this.type=\"payment_cancelled\"}}function C(e){return null!==e&&\"object\"==typeof e&&\"cardNumberElementOptions\"in e&&\"cardCvcElementOptions\"in e&&\"cardExpiryElementOptions\"in e&&void 0!==e.cardNumberElementOptions&&void 0!==e.cardCvcElementOptions&&void 0!==e.cardExpiryElementOptions}var I,E,P,b;!function(e){e.Solid=\"solid\",e.Default=\"default\"}(I||(I={})),function(e){e.Alipay=\"alipay\",e.CardCvc=\"cardCvc\",e.CardExpiry=\"cardExpiry\",e.CardNumber=\"cardNumber\",e.CreditCard=\"card\",e.IDEAL=\"idealBank\",e.Sepa=\"iban\"}(E||(E={})),function(e){e.Alipay=\"alipay\",e.CreditCard=\"card\",e.IDEAL=\"ideal\",e.Sepa=\"sepa_debit\"}(P||(P={})),function(e){e.AuthFailure=\"auth_failure\"}(b||(b={}));class w extends h{constructor(e){super(e===b.AuthFailure?\"User did not authenticate\":\"There was an error while processing your payment. Please try again or contact us.\"),this.type=\"stripev3_error\",this.subtype=e}}var A=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function s(e){try{d(n.next(e))}catch(e){o(e)}}function a(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,a)}d((n=n.apply(e,t||[])).next())})};const O=[E.Alipay,E.IDEAL];class k{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t}initialize(e){return A(this,void 0,void 0,function*(){const{stripev3:t,methodId:i,gatewayId:n}=e;if(!n)throw new u('Unable to initialize payment because \"gatewayId\" argument is not provided.');this.initializeOptions=t,this.isDeinitialize=!1;const r=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i),{initializationData:{stripePublishableKey:o,stripeConnectedAccount:s,useIndividualCardFields:a,allowRedisplayForStoredInstruments:d}}=r;this._allowRedisplayForStoredInstruments=d;const l=this.getInitializeOptions().form;this.useIndividualCardFields=a,this.stripeV3Client=yield this.loadStripeJs(o,s),this.isCreditCard(i)&&this.shouldShowTSVHostedForm(i,n)&&l?this.hostedForm=yield this.mountCardVerificationFields(l):this.stripeElement=yield this.mountCardFields(i)})}execute(e,i){var n,r;return A(this,void 0,void 0,function*(){const{payment:o}=e,s=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i}(e,[\"payment\"]);let d,l;if(!o||!o.paymentData)throw new p([\"payment.paymentData\"]);const{paymentData:c,gatewayId:h,methodId:u}=o,{shouldSaveInstrument:v,shouldSetAsDefaultInstrument:S}=m(c)?c:{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1},_=t(O,u),{isStoreCreditApplied:f}=this.paymentIntegrationService.getState().getCheckoutOrThrow();f&&(yield this.paymentIntegrationService.applyStoreCredit(f));try{_&&(yield this.paymentIntegrationService.submitOrder(s,i)),h&&(yield this.paymentIntegrationService.loadPaymentMethod(h,{params:{method:u}}));const e=this.paymentIntegrationService.getState();if(y(c)){yield this.paymentIntegrationService.submitOrder(s,i);const{instrumentId:t}=c,n=e.getPaymentMethodOrThrow(o.methodId).clientToken;if(!n)throw new g(a.MissingPaymentMethod);return yield this.executeWithVaulted(o,t,S,n)}const t=e.getPaymentMethodOrThrow(u),p=yield this.confirmStripePayment(t),{clientToken:m,method:f}=t,{id:C}=null!==(r=null!==(n=p.paymentIntent)&&void 0!==n?n:p.paymentMethod)&&void 0!==r?r:{id:\"\"};l=p.error,d={credit_card_token:{token:C},vault_payment_instrument:v,confirm:!1,set_as_default_stored_instrument:S},f===E.CreditCard&&(d.client_token=m),_||(yield this.paymentIntegrationService.submitOrder(s,i));const I=this.buildPaymentPayload(u,d,S);yield this.paymentIntegrationService.submitPayment(I)}catch(e){yield this.processAdditionalAction(this.handleEmptyPaymentIntentError(e,l),u,v,S)}})}finalize(){return Promise.reject(new v)}deinitialize(){return this.hostedForm&&this.hostedForm.detach(),this.isDeinitialize=!0,this.unmountElement(),Promise.resolve()}buildPaymentPayload(e,t,i){return{methodId:e,paymentData:i?{formattedPayload:Object.assign(Object.assign({},t),{set_as_default_stored_instrument:i})}:{formattedPayload:t}}}isCancellationError(e){var t,i;return e&&-1!==(null===(i=null===(t=e.payment_intent.last_payment_error)||void 0===t?void 0:t.message)||void 0===i?void 0:i.indexOf(\"canceled\"))}isAuthError(e){return\"payment_intent_authentication_failure\"===(null==e?void 0:e.code)}isCreditCard(e){return e===P.CreditCard}isHostedFieldAvailable(){var e;const t=this.getInitializeOptions(),n=r(null===(e=t.form)||void 0===e?void 0:e.fields,i);return!i(n)}isHostedPaymentFormEnabled(e,t){const{getPaymentMethodOrThrow:i}=this.paymentIntegrationService.getState(),n=i(e,t);return Boolean(n.config.isHostedFormEnabled)}confirmStripePayment(e){return A(this,void 0,void 0,function*(){const{clientToken:t,method:i,returnUrl:n}=e;if(!t)throw new g(a.MissingPaymentMethod);switch(i){case E.Alipay:return this.getStripeJs().confirmAlipayPayment(t,{return_url:n},{handleActions:!1});case E.IDEAL:{const e=this.mapStripePaymentData(P.IDEAL,n);return this.getStripeJs().confirmIdealPayment(t,e,{handleActions:!1})}case E.Sepa:{const e=this.mapStripePaymentData(P.Sepa);return this.getStripeJs().confirmSepaDebitPayment(t,e)}default:{const e=this.useIndividualCardFields?this.getStripeCardElements()[0]:this.getStripeElement(),t=this.mapStripeBillingDetails(this.paymentIntegrationService.getState().getBillingAddress(),this.paymentIntegrationService.getState().getCustomer()),i=this._allowRedisplayForStoredInstruments;return this.getStripeJs().createPaymentMethod(Object.assign({type:P.CreditCard,card:e,billing_details:t},i?{allow_redisplay:\"always\"}:{}))}}})}executeWithVaulted(e,t,i,n){var r;return A(this,void 0,void 0,function*(){const o={bigpay_token:{token:t},confirm:!0,client_token:n,set_as_default_stored_instrument:i};if(this.isHostedPaymentFormEnabled(e.methodId,e.gatewayId)&&this.hostedForm){const t=this.hostedForm;return e.paymentData&&y(e.paymentData)&&(e.paymentData=Object.assign(Object.assign({},e.paymentData),{instrumentId:JSON.stringify({token:(null===(r=e.paymentData)||void 0===r?void 0:r.instrumentId)||\"\",client_token:n})})),yield t.validate(),yield t.submit(e),this.paymentIntegrationService.loadCurrentOrder()}const s=this.buildPaymentPayload(e.methodId,o,i);return this.paymentIntegrationService.submitPayment(s)})}getInitializeOptions(){if(!this.initializeOptions)throw new S(d.PaymentNotInitialized);return this.initializeOptions}getStripeCardElements(){if(!this.stripeCardElements)throw new S(d.PaymentNotInitialized);return this.stripeCardElements}getStripeElement(){if(!this.stripeElement)throw new S(d.PaymentNotInitialized);return this.stripeElement}getStripeJs(){if(!this.stripeV3Client)throw new S(d.PaymentNotInitialized);return this.stripeV3Client}handleEmptyPaymentIntentError(e,t){return _(e)&&s(e.body.errors,{code:\"required_field\"})&&t?new Error(t.message):e}loadStripeJs(e,t){return A(this,void 0,void 0,function*(){return this.stripeV3Client?Promise.resolve(this.stripeV3Client):this.scriptLoader.load(e,t,this.paymentIntegrationService.getState().getLocale())})}mapStripeAddress(e){if(e){const{city:t,countryCode:i,address1:n,address2:r,postalCode:o,stateOrProvinceCode:s}=e;return{city:t,country:i,line1:n,line2:r,postal_code:o,state:s}}return{line1:\"\"}}mapStripeBillingDetails(e,t){const{firstName:i,lastName:n}=e||t||{firstName:\"Guest\",lastName:\"\"},r=`${i} ${n}`.trim(),{options:o}=this.getInitializeOptions();if(this.useIndividualCardFields&&C(o)){const{zipCodeElementOptions:t}=o;if(t){const i=document.getElementById(t.containerId)?document.getElementById(t.containerId).value:\"\";i&&e&&(e=Object.assign(Object.assign({},e),{postalCode:i}))}}const s={address:this.mapStripeAddress(e)};if(t&&t.addresses[0]&&function(e){return\"object\"==typeof e&&null!==e&&\"id\"in e&&void 0!==e.id}(t.addresses[0])){const e=t.addresses[0],{email:i}=t,{phone:n}=e;return n?Object.assign(Object.assign({},s),{email:i,name:r,phone:n}):Object.assign(Object.assign({},s),{email:i,name:r})}if(e){const{email:t,phone:i}=e;return i?Object.assign(Object.assign({},s),{email:t,name:r,phone:i}):Object.assign(Object.assign({},s),{email:t,name:r})}return Object.assign(Object.assign({},s),{name:r})}mapStripePaymentData(e,t){const i=this.paymentIntegrationService.getState().getCustomer(),n=this.paymentIntegrationService.getState().getBillingAddress(),r={payment_method:{[e]:this.getStripeElement(),billing_details:this.mapStripeBillingDetails(n,i)}};return e===P.IDEAL?Object.assign(Object.assign({},r),{return_url:t}):r}mountCardFields(e){const{options:t,containerId:i}=this.getInitializeOptions();let n;return new Promise((r,o)=>{switch(this.stripeElements||(this.stripeElements=this.getStripeJs().elements()),e){case E.CreditCard:if(this.useIndividualCardFields&&C(t)){const{cardNumberElementOptions:e,cardExpiryElementOptions:i,cardCvcElementOptions:r}=t,s=this.stripeElements.getElement(E.CardNumber)||this.stripeElements.create(E.CardNumber,e),a=this.stripeElements.getElement(E.CardExpiry)||this.stripeElements.create(E.CardExpiry,i),d=this.stripeElements.getElement(E.CardCvc)||this.stripeElements.create(E.CardCvc,r);this.stripeCardElements=[s,a,d],n=this.stripeCardElements[0];try{s.mount(`#${e.containerId}`),a.mount(`#${i.containerId}`),d.mount(`#${r.containerId}`)}catch(e){this.isDeinitialize||o(new u(\"Unable to mount Stripe component without valid container ID.\"))}}else{n=this.stripeElements.getElement(e)||this.stripeElements.create(e,t);try{n.mount(`#${i}`)}catch(e){this.isDeinitialize||o(new u(\"Unable to mount Stripe component without valid container ID.\"))}}break;case E.IDEAL:case E.Sepa:n=this.stripeElements.getElement(e)||this.stripeElements.create(e,t);try{n.mount(`#${i}`)}catch(e){this.isDeinitialize||o(new u(\"Unable to mount Stripe component without valid container ID.\"))}case E.Alipay:}r(n)})}mountCardVerificationFields(e){return A(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getStoreConfig();if(!t)throw new g(a.MissingCheckoutConfig);const i=t.paymentSettings.bigpayBaseUrl,n=this.paymentIntegrationService.createHostedForm(i,e);return yield n.attach(),n})}processAdditionalAction(e,t,i=!1,n=!1){return A(this,void 0,void 0,function*(){if(!_(e))throw e;const r=s(e.body.errors,{code:\"additional_action_required\"}),o=s(e.body.errors,{code:\"three_d_secure_required\"});if(r){const t=e.body.additional_action_required;if(t&&\"redirect_to_url\"===t.type)return new Promise(()=>{t.data.redirect_url&&window.location.replace(t.data.redirect_url)})}if(o){const r=e.body.three_ds_result.token,o=!1;let s,a=!1;try{s=yield this.getStripeJs().confirmCardPayment(r)}catch(e){a=!0}if(null==s?void 0:s.error){if(this.isCancellationError(s.error))throw new f;if(this.isAuthError(s.error))throw new w(b.AuthFailure);throw new Error(s.error.message)}const d={credit_card_token:{token:this.getPaymentToken(null==s?void 0:s.paymentIntent,r,a)},vault_payment_instrument:i,confirm:o},l=this.buildPaymentPayload(t,d,n);try{return yield this.paymentIntegrationService.submitPayment(l)}catch(e){throw this.handleEmptyPaymentIntentError(e,null==s?void 0:s.error)}}throw e})}getPaymentToken(e,t,i){return!e||i?t:e.id}shouldShowTSVHostedForm(e,t){return this.isHostedFieldAvailable()&&this.isHostedPaymentFormEnabled(e,t)}unmountElement(){this.stripeElement&&(this.stripeElement.unmount(),this.stripeElement=void 0)}}class M extends h{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class T{constructor(e,t=window){this.scriptLoader=e,this.stripeWindow=t}load(e,t,i){return this.scriptLoader.loadScript(\"https://js.stripe.com/v3/\").then(()=>{if(!this.stripeWindow.Stripe)throw new M;return this.stripeWindow.Stripe(e,{stripeAccount:t,locale:i,betas:[\"payment_intent_beta_3\",\"alipay_pm_beta_1\"],apiVersion:\"2020-03-02;alipay_beta=v1\"})})}}const N=c(t=>new k(t,new T(e())),[{gateway:\"stripev3\"}]);var D,R,z,L,U,x,V,j,B,F,H,G;!function(e){e.SHIPPING=\"shipping\",e.BILLING=\"billing\"}(D||(D={})),function(e){e.SPLIT=\"split\",e.FULL=\"full\",e.ORGANIZATION=\"organization\"}(R||(R={})),function(e){e.Open=\"open\",e.Expired=\"expired\",e.Complete=\"complete\"}(z||(z={})),function(e){e.Paid=\"paid\",e.UnPaid=\"unpaid\",e.NoPaymentRequired=\"no_payment_required\"}(L||(L={})),function(e){e.SUCCESS=\"success\",e.ERROR=\"error\"}(U||(U={})),function(e){e.CreditCard=\"card\",e.ACH=\"us_bank_account\",e.Link=\"link\",e.EPS=\"eps\",e.GRABPAY=\"grabpay\",e.BANCONTACT=\"bancontact\",e.IDEAL=\"ideal\",e.ALIPAY=\"alipay\",e.KLARNA=\"klarna\",e.OCS=\"optimized_checkout\",e.CHECKOUT_SESSION=\"checkout_session\"}(x||(x={})),function(e){e.NEVER=\"never\",e.AUTO=\"auto\",e.ALWAYS=\"always\",e.PAYMENT=\"payment\",e.IF_REQUIRED=\"if_required\"}(V||(V={})),function(e){e.V3=\"v3\",e.ACACIA=\"acacia\",e.BASIL=\"basil\",e.CLOVER=\"clover\"}(j||(j={})),function(e){e.PAYMENT=\"payment\",e.AUTHENTICATION=\"linkAuthentication\",e.SHIPPING=\"address\",e.EXPRESS_CHECKOUT=\"expressCheckout\"}(B||(B={})),function(e){e.REQUIRES_PAYMENT_METHOD=\"requires_payment_method\",e.REQUIRES_CONFIRMATION=\"requires_confirmation\",e.REQUIRES_ACTION=\"requires_action\",e.PROCESSING=\"processing\",e.SUCCEEDED=\"succeeded\",e.CANCELED=\"canceled\"}(F||(F={})),function(e){e.CLICK=\"click\",e.CHANGE=\"change\",e.READY=\"ready\",e.SHIPPING_ADDRESS_CHANGE=\"shippingaddresschange\",e.SHIPPING_RATE_CHANGE=\"shippingratechange\",e.CONFIRM=\"confirm\",e.CANCEL=\"cancel\",e.LOADER_START=\"loaderstart\"}(H||(H={})),function(e){e.ON_SESSION=\"on_session\",e.OFF_SESSION=\"off_session\"}(G||(G={}));var q=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function s(e){try{d(n.next(e))}catch(e){o(e)}}function a(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,a)}d((n=n.apply(e,t||[])).next())})};class W{constructor(e,t=window){this.scriptLoader=e,this.stripeWindow=t}getStripeClient(e,t,i,n,r){return q(this,void 0,void 0,function*(){if(this.stripeWindow.bcStripeClient)return this.stripeWindow.bcStripeClient;const o=yield this.load(i),{stripePublishableKey:s,stripeConnectedAccount:a}=e,d=o(s,Object.assign(Object.assign(Object.assign(Object.assign({},a?{stripeAccount:a}:{}),t?{locale:t}:{}),n?{betas:n}:{}),r?{apiVersion:r}:{}));return Object.assign(this.stripeWindow,{bcStripeClient:d}),d})}getElements(e,t){return q(this,void 0,void 0,function*(){let i=this.stripeWindow.bcStripeElements;return i?yield this.updateStripeElements(t):(i=e.elements(t),Object.assign(this.stripeWindow,{bcStripeElements:i})),i})}updateStripeElements(e){return q(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeElements;t&&(t.update(e),yield t.fetchUpdates())})}getStripeCheckout(e,t){return q(this,void 0,void 0,function*(){let i=yield this.getStoredStripeCheckout(t);return i||(i=yield e.initCheckout(t),Object.assign(this.stripeWindow,{bcStripeCheckout:i})),i})}load(e){return q(this,void 0,void 0,function*(){if(!this.stripeWindow.Stripe&&(yield this.scriptLoader.loadScript(this.getScriptUrl(e)),!this.stripeWindow.Stripe))throw new M;return this.stripeWindow.Stripe})}getScriptUrl(e){return e&&e!==j.V3?`https://js.stripe.com/${e}/stripe.js`:\"https://js.stripe.com/v3/\"}getStoredStripeCheckout(e){return q(this,void 0,void 0,function*(){const t=this.stripeWindow.bcStripeCheckout;if(t)try{const{actions:i,error:n}=yield t.loadActions();if(n||!i)return void this.logErrorToConsole(n);const r=yield i.getSession(),o=e.clientSecret.split(\"_secret_\")[0];if(r.id===o)return t}catch(e){return void this.logErrorToConsole(e)}})}logErrorToConsole(e){e?console.error(e):console.error(\"No stripe checkout actions available on loadActions().\")}}class K extends h{constructor(e){super(e||\"Unable to proceed because the client library of a payment method has thrown an unexpected error.\"),this.name=\"PaymentMethodFailedError\",this.type=\"payment_method_client_invalid\"}}var $=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function s(e){try{d(n.next(e))}catch(e){o(e)}}function a(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,a)}d((n=n.apply(e,t||[])).next())})};class Y{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t,this.isMounted=!1}deinitialize(){var e;null===(e=this.checkoutEventsUnsubscribe)||void 0===e||e.call(this),this.isMounted=!1}initCheckoutEventsSubscription(e,t,i,n){this.checkoutEventsUnsubscribe=this.paymentIntegrationService.subscribe(()=>$(this,void 0,void 0,function*(){var r;const o=null==n?void 0:n.getElement(B.PAYMENT);if(o){try{yield this.updateStripePaymentIntent(e,t)}catch(e){return this.isMounted&&(o.unmount(),this.isMounted=!1),void(e instanceof Error&&(null===(r=i.onError)||void 0===r||r.call(i,e)))}this.isMounted||(yield null==n?void 0:n.fetchUpdates(),this.mountElement(o,i.containerId))}}),e=>{var t;return null===(t=e.getCheckout())||void 0===t?void 0:t.outstandingBalance},e=>{var t;return null===(t=e.getCheckout())||void 0===t?void 0:t.coupons})}mountElement(e,t){document.getElementById(t)&&(e.mount(`#${t}`),this.isMounted=!0)}mapAppearanceVariables(e){return{colorPrimary:e.fieldInnerShadow,colorBackground:e.fieldBackground,colorText:e.labelText,colorDanger:e.fieldErrorText,colorTextSecondary:e.labelText,colorTextPlaceholder:e.fieldPlaceholderText,colorIcon:e.fieldPlaceholderText}}mapInputAppearanceRules(e){return{borderColor:e.fieldBorder,color:e.fieldText,boxShadow:e.fieldInnerShadow}}throwStripeError(e){if(\"object\"==typeof(t=e)&&null!==t&&\"type\"in t&&(this.throwDisplayableStripeError(e),this.isCancellationError(e)))throw new f;var t;throw new K}throwDisplayableStripeError(e){if(t([\"card_error\",\"invalid_request_error\",\"validation_error\"],e.type))throw new Error(e.message)}isCancellationError(e){var t;const i=null===(t=null==e?void 0:e.payment_intent.last_payment_error)||void 0===t?void 0:t.message;return!!i&&-1!==i.indexOf(\"canceled\")}throwPaymentConfirmationProceedMessage(){throw new K(\"We've received your order and are processing your payment. Once the payment is verified, your order will be completed. We will send you an email when it's completed. Please note, this process may take a few minutes depending on the processing times of your chosen method.\")}isPaymentCompleted(e,t){return $(this,void 0,void 0,function*(){const i=this.paymentIntegrationService.getState(),n=i.getPaymentMethodOrThrow(e),{features:r}=i.getStoreConfigOrThrow().checkoutSettings;if(!n.clientToken||!t||!r[\"PI-626.Block_unnecessary_payment_confirmation_for_StripeUPE\"])return!1;const{paymentIntent:o}=yield t.retrievePaymentIntent(n.clientToken);return(null==o?void 0:o.status)===F.SUCCEEDED})}mapStripePaymentData(e,t,i=!1){const n=this.paymentIntegrationService.getState().getBillingAddress(),{firstName:r=\"\",lastName:o=\"\",email:s=\"\"}=n||{},l=this.mapStripeAddress(n);if(!e)throw new S(d.PaymentNotInitialized);if(!(s&&l&&l.city&&l.country&&r&&o))throw new g(a.MissingBillingAddress);return{elements:e,redirect:V.IF_REQUIRED,confirmParams:Object.assign({payment_method_data:Object.assign(Object.assign({},i?{allow_redisplay:\"always\"}:{}),{billing_details:{email:s,address:l,name:this.getShopperFullName(n)}})},t&&{return_url:t})}}isAdditionalActionError(e){return s(e,{code:\"additional_action_required\"})}isRedirectAction(e){const{type:t,data:{redirect_url:i}}=e;return\"redirect_to_url\"===t&&!!i}isOnPageAdditionalAction(e){const{type:t,data:{token:i}}=e;return\"additional_action_requires_payment_method\"===t&&!!i}updateStripePaymentIntent(e,t){return $(this,void 0,void 0,function*(){const i=yield this.paymentIntegrationService.loadPaymentMethod(e,{params:{method:t}}),{clientToken:n}=i.getPaymentMethodOrThrow(t);n&&this.scriptLoader.updateStripeElements({clientSecret:n})})}getStripeJsVersion(e){return e.useNewStripeJsVersion?j.CLOVER:j.V3}mapStripeAddress(e){if(e){const{city:t,address1:i,address2:n,countryCode:r,postalCode:o,stateOrProvinceCode:s}=e;return Object.assign({city:t,country:r,postal_code:o,line1:i,line2:n},s?{state:s}:{})}throw new g(a.MissingBillingAddress)}getShopperFullName(e){const{firstName:t=\"\",lastName:i=\"\"}=e||{};return`${t} ${i}`.trim()}verifyCheckoutSpamProtection(){return $(this,void 0,void 0,function*(){const{shouldExecuteSpamCheck:e}=this.paymentIntegrationService.getState().getCheckoutOrThrow();e&&(yield this.paymentIntegrationService.verifyCheckoutSpamProtection())})}}const J={body:{},headers:{},status:0};class Z extends h{constructor(e,{message:t,errors:i}={}){const{body:n,headers:r,status:o}=e||J;super(t||\"An unexpected error has occurred.\"),this.name=\"RequestError\",this.type=\"request\",this.body=n,this.headers=r,this.status=o,this.errors=i||[]}}function Q(e){return\"object\"==typeof e&&null!==e&&\"initializationData\"in e&&void 0!==e.initializationData&&null!==e.initializationData&&\"object\"==typeof e.initializationData&&\"stripePublishableKey\"in e.initializationData&&\"stripeConnectedAccount\"in e.initializationData&&\"shopperLanguage\"in e.initializationData&&void 0!==e.initializationData.stripePublishableKey&&void 0!==e.initializationData.stripeConnectedAccount&&void 0!==e.initializationData.shopperLanguage}const X={ar:[\"ar\"],bg:[\"bg\"],cs:[\"cs\"],da:[\"da\"],de:[\"de\"],el:[\"el\"],en:[\"en\",\"en-GB\"],es:[\"es\",\"es-419\"],et:[\"et\"],fi:[\"fi\"],fil:[\"fil\"],fr:[\"fr\",\"fr-CA\"],he:[\"he\"],hr:[\"hr\"],hu:[\"hu\"],id:[\"id\"],it:[\"it\"],ja:[\"ja\"],ko:[\"ko\"],lt:[\"lt\"],lv:[\"lv\"],ms:[\"ms\"],mt:[\"mt\"],nb:[\"nb\"],nl:[\"nl\"],pl:[\"pl\"],pt:[\"pt\",\"pt-BR\"],ro:[\"ro\"],ru:[\"ru\"],sk:[\"sk\"],sl:[\"sl\"],sv:[\"sv\"],th:[\"th\"],tr:[\"tr\"],vi:[\"vi\"],zh:[\"zh\",\"zh-HK\",\"zh-TW\"]};function ee(e){const[t,i]=e.replace(/_/g,\"-\").toLowerCase().split(\"-\"),n=X[t];if(!n)return\"auto\";const r=i?`${t}-${i.toUpperCase()}`:t;return n.indexOf(r)>-1?r:n[0]}const te=[\"payment_element_beta_2\",\"alipay_pm_beta_1\",\"link_default_integration_beta_1\",\"shipping_address_element_beta_1\",\"address_element_beta_1\"],ie=\"2020-03-02;alipay_beta=v1;link_beta=v1\";function ne(e){return\"stripeLinkAuthenticationState\"in e}var re=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function s(e){try{d(n.next(e))}catch(e){o(e)}}function a(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,a)}d((n=n.apply(e,t||[])).next())})};class oe{constructor(e,t,i){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=i}initialize(e){return re(this,void 0,void 0,function*(){const{stripeupe:t,methodId:i,gatewayId:n}=e;if(!(null==t?void 0:t.containerId))throw new S(d.PaymentNotInitialized);if(!n)throw new u('Unable to initialize payment because \"gatewayId\" argument is not provided.');return this._loadStripeElement(t,n,i).catch(e=>{var i;return null===(i=t.onError)||void 0===i?void 0:i.call(t,e)}),this.stripeIntegrationService.initCheckoutEventsSubscription(n,i,t,this._stripeElements),Promise.resolve()})}execute(e,t){return re(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i}(e,[\"payment\"]);if(!i||!i.paymentData)throw new p([\"payment.paymentData\"]);if(!this._stripeUPEClient)throw new S(d.PaymentNotInitialized);const{paymentData:r,methodId:o,gatewayId:s}=i,{shouldSaveInstrument:a=!1,shouldSetAsDefaultInstrument:l=!1}=m(r)?r:{},c=this.paymentIntegrationService.getState(),{isStoreCreditApplied:h}=c.getCheckoutOrThrow(),u=c.getPaymentProviderCustomerOrThrow(),g=(ne(u)?u:{}).stripeLinkAuthenticationState;if(h&&(yield this.paymentIntegrationService.applyStoreCredit(h)),s){yield this.stripeIntegrationService.updateStripePaymentIntent(s,o);const{email:e}=c.getCustomerOrThrow();if(void 0!==g&&!e){const e=c.getBillingAddressOrThrow();yield this.paymentIntegrationService.updateBillingAddress(e)}}if(yield this.paymentIntegrationService.submitOrder(n,t),y(r)){const{instrumentId:e}=r;return void(yield this._executeWithVaulted(i.methodId,e,l))}yield this._executeWithStripeConfirmation(i.methodId,i.gatewayId,!g&&a,l)})}finalize(){return Promise.reject(new v)}deinitialize(){var e,t;return null===(t=null===(e=this._stripeElements)||void 0===e?void 0:e.getElement(B.PAYMENT))||void 0===t||t.unmount(),this.stripeIntegrationService.deinitialize(),this._stripeElements=void 0,this._stripeUPEClient=void 0,Promise.resolve()}_executeWithStripeConfirmation(e,t,i,n){return re(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),{clientToken:o}=r.getPaymentMethodOrThrow(e),s=this._getPaymentPayload(e,o||\"\",i,n);try{yield this.paymentIntegrationService.submitPayment(s)}catch(r){yield this._processAdditionalActionWithStripeConfirmation(r,e,t,i,n)}})}_executeWithVaulted(e,t,i){var n;return re(this,void 0,void 0,function*(){const r=this.paymentIntegrationService.getState(),o=r.getPaymentMethodOrThrow(e),s=null===(n=r.getCart())||void 0===n?void 0:n.id;try{const n={methodId:e,paymentData:{formattedPayload:{cart_id:s,bigpay_token:{token:t},confirm:!1,client_token:o.clientToken,set_as_default_stored_instrument:i}}};return yield this.paymentIntegrationService.submitPayment(n)}catch(t){return this._processVaultedAdditionalAction(t,e,i)}})}_loadStripeElement(e,t,i){return re(this,void 0,void 0,function*(){const{containerId:n,style:r,render:o,initStripeElementUpdateTrigger:s}=e,d=yield this.paymentIntegrationService.loadPaymentMethod(t,{params:{method:i}}),l=d.getPaymentMethodOrThrow(i);if(!Q(l))throw new g(a.MissingPaymentMethod);const{clientToken:c,initializationData:h}=l,{shopperLanguage:u,allowRedisplayForStoredInstruments:p=!1,enableLink:m}=h;if(this._allowRedisplayForStoredInstruments=p,!c)throw new g(a.MissingPaymentMethod);let y;if(this._stripeUPEClient=yield this._loadStripeJs(h),this._isStripeElementUpdateEnabled=\"function\"==typeof s,r){const e=r;y={variables:this.stripeIntegrationService.mapAppearanceVariables(r),rules:{\".Input\":this.stripeIntegrationService.mapInputAppearanceRules(e)}}}this._stripeElements=yield this.scriptLoader.getElements(this._stripeUPEClient,{clientSecret:c,locale:ee(u),appearance:y});const{getBillingAddress:v,getShippingAddress:S}=d,{postalCode:_}=S()||v()||{},f=this._stripeElements.getElement(B.PAYMENT)||this._stripeElements.create(B.PAYMENT,Object.assign({fields:{billingDetails:{email:V.NEVER,address:{country:V.NEVER,city:V.NEVER,postalCode:_?V.NEVER:V.AUTO}}},wallets:{applePay:V.NEVER,googlePay:V.NEVER,link:m?V.AUTO:V.NEVER}},this._getStripeElementTerms()));this.stripeIntegrationService.mountElement(f,n),f.on(H.READY,()=>{o()}),f.on(H.CHANGE,e=>{(null==e?void 0:e.value)&&\"type\"in e.value&&this._updateStripeLinkStateByElementType(e.value.type)}),this._isStripeElementUpdateEnabled&&(null==s||s(this._updateStripeElement.bind(this)))})}_processAdditionalActionWithStripeConfirmation(e,t,i,r=!1,o=!1){return re(this,void 0,void 0,function*(){if(!_(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this._stripeUPEClient||!this._stripeElements)throw new S(d.PaymentNotInitialized);const{data:s}=e.body.additional_action_required,{token:a}=s,{paymentIntent:l,error:c}=yield this._confirmStripePaymentOrThrow(t,s),h=this._getPaymentPayload(t,(null==l?void 0:l.id)||a,r,o);if(c||!l){const{initializationData:e}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,i),{sendSecondPaymentRequestOnStripeError:r}=e||{};if(r)try{const e=n({},h,{paymentData:{formattedPayload:{client_side_error:!0}}});yield this.paymentIntegrationService.submitPayment(e)}catch(e){}this.stripeIntegrationService.throwStripeError(c)}try{yield this.paymentIntegrationService.submitPayment(h)}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}})}_confirmStripePaymentOrThrow(e,t){return re(this,void 0,void 0,function*(){if(!this._stripeUPEClient)throw new S(d.PaymentNotInitialized);const{token:i,redirect_url:n}=t,r=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,n,!!this._allowRedisplayForStoredInstruments);return(yield this.stripeIntegrationService.isPaymentCompleted(e,this._stripeUPEClient))?this._stripeUPEClient.retrievePaymentIntent(i||\"\"):this._stripeUPEClient.confirmPayment(r)})}_processVaultedAdditionalAction(e,t,i=!1){var n;return re(this,void 0,void 0,function*(){if(!t||!_(e)||!s(e.body.errors,{code:\"three_d_secure_required\"}))throw e;if(!this._stripeUPEClient||!this._stripeElements)throw new S(d.PaymentNotInitialized);const r=e.body.three_ds_result.token;let o,a=!1;try{o=yield this._stripeUPEClient.confirmCardPayment(r)}catch(e){try{o=yield this._stripeUPEClient.retrievePaymentIntent(r)}catch(e){a=!0}}if((null==o?void 0:o.error)&&this.stripeIntegrationService.throwStripeError(o.error),!(null==o?void 0:o.paymentIntent)&&!a)throw new Z;const l=this._getPaymentPayload(t,a?r:null===(n=null==o?void 0:o.paymentIntent)||void 0===n?void 0:n.id,!1,i);return this.paymentIntegrationService.submitPayment(l)})}_loadStripeJs(e){return re(this,void 0,void 0,function*(){if(this._stripeUPEClient)return this._stripeUPEClient;const t=this.paymentIntegrationService.getState();return this.scriptLoader.getStripeClient(e,t.getCartLocale(),j.V3,te,ie)})}_getPaymentPayload(e,t,i=!1,n=!1){var r;return{methodId:e,paymentData:{formattedPayload:{cart_id:(null===(r=this.paymentIntegrationService.getState().getCart())||void 0===r?void 0:r.id)||\"\",credit_card_token:{token:t},confirm:!1,vault_payment_instrument:i,set_as_default_stored_instrument:n}}}}_updateStripeElement({shouldShowTerms:e}){var t;const i=null===(t=this._stripeElements)||void 0===t?void 0:t.getElement(B.PAYMENT);null==i||i.update(Object.assign({},this._getStripeElementTerms(e)))}_getStripeElementTerms(e){let t=V.AUTO;return this._isStripeElementUpdateEnabled&&(t=e?V.AUTO:V.NEVER),{terms:{card:t}}}_updateStripeLinkStateByElementType(e){const t=this.paymentIntegrationService.getState().getPaymentProviderCustomerOrThrow(),i=e===x.Link;!ne(t)&&i&&this.paymentIntegrationService.updatePaymentProviderCustomer({stripeLinkAuthenticationState:i})}}const se=c(t=>{const i=new W(e());return new oe(t,i,new Y(t,i))},[{gateway:\"stripeupe\"},{gateway:\"stripeupe\",id:\"klarna\"}]),ae=e=>\"object\"==typeof e&&null!==e&&\"value\"in e&&\"collapsed\"in e;var de=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function s(e){try{d(n.next(e))}catch(e){o(e)}}function a(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,a)}d((n=n.apply(e,t||[])).next())})};class le{constructor(e,t,i){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=i}initialize(e){var t;return de(this,void 0,void 0,function*(){const{stripeocs:i,methodId:n,gatewayId:r}=e;if(!(null==i?void 0:i.containerId))throw new S(d.PaymentNotInitialized);if(!r)throw new u('Unable to initialize payment because \"gatewayId\" argument is not provided.');try{yield this._initializeStripeElement(i,r,n)}catch(e){e instanceof Error&&(null===(t=i.onError)||void 0===t||t.call(i,e))}this.stripeIntegrationService.initCheckoutEventsSubscription(r,n,i,this.stripeElements)})}execute(e,t){return de(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i}(e,[\"payment\"]),{methodId:r,gatewayId:o}=i||{};if(!this.stripeClient)throw new S(d.PaymentNotInitialized);if(!o||!r)throw new u('Unable to initialize payment because \"gatewayId\" or \"methodId\" argument is not provided.');const{isStoreCreditApplied:s}=this.paymentIntegrationService.getState().getCheckoutOrThrow();s&&(yield this.paymentIntegrationService.applyStoreCredit(s)),yield this.stripeIntegrationService.updateStripePaymentIntent(o,r),yield this.paymentIntegrationService.submitOrder(n,t);const{clientToken:a}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(r,o),l=this._getPaymentPayload(r,a||\"\");try{yield this.paymentIntegrationService.submitPayment(l)}catch(e){yield this._processAdditionalAction(e,r,o)}})}finalize(){return Promise.reject(new v)}deinitialize(){var e;const t=null===(e=this.stripeElements)||void 0===e?void 0:e.getElement(B.PAYMENT);return null==t||t.unmount(),null==t||t.destroy(),this.stripeIntegrationService.deinitialize(),this.stripeElements=void 0,this.stripeClient=void 0,Promise.resolve()}_initializeStripeElement(e,t,i){return de(this,void 0,void 0,function*(){let n=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i,t);if((null==n?void 0:n.clientToken)||(n=(yield this.paymentIntegrationService.loadPaymentMethod(t,{params:{method:i}})).getPaymentMethodOrThrow(i,t)),!Q(n))throw new g(a.MissingPaymentMethod);const{clientToken:r,initializationData:o}=n,{customerSessionToken:s,enableLink:d}=o;if(!r)throw new g(a.MissingPaymentMethod);this.stripeClient=yield this._loadStripeJs(o);const{appearance:l,containerId:c,fonts:h,layout:u,render:p,paymentMethodSelect:m,handleClosePaymentMethod:y,togglePreloader:v}=e;this.stripeElements=yield this.scriptLoader.getElements(this.stripeClient,{clientSecret:r,customerSessionClientSecret:s,appearance:l,fonts:h});const{getBillingAddress:S,getShippingAddress:_}=this.paymentIntegrationService.getState(),f=S(),{postalCode:C}=_()||f||{},I=this.stripeElements.getElement(B.PAYMENT)||this.stripeElements.create(B.PAYMENT,{fields:{billingDetails:{email:V.NEVER,address:{country:V.NEVER,city:V.NEVER,postalCode:C?V.NEVER:V.AUTO}}},wallets:{applePay:V.NEVER,googlePay:V.NEVER,link:d?V.AUTO:V.NEVER},layout:u,savePaymentMethod:{maxVisiblePaymentMethods:20},defaultValues:{billingDetails:{email:(null==f?void 0:f.email)||\"\"}}});this.stripeIntegrationService.mountElement(I,c),I.on(H.LOADER_START,()=>{null==v||v(!1)}),I.on(H.READY,()=>{p()}),I.on(H.CHANGE,e=>{this._onStripeElementChange(e,t,i,m)}),null==y||y(this._collapseStripeElement.bind(this))})}_loadStripeJs(e){return de(this,void 0,void 0,function*(){if(this.stripeClient)return this.stripeClient;const t=this.paymentIntegrationService.getState(),i=this.stripeIntegrationService.getStripeJsVersion(e);return this.scriptLoader.getStripeClient(e,t.getCartLocale(),i)})}_collapseStripeElement(){var e;const t=null===(e=this.stripeElements)||void 0===e?void 0:e.getElement(B.PAYMENT);null==t||t.collapse()}_getPaymentPayload(e,t,i){var n;const r=(null===(n=this.paymentIntegrationService.getState().getCart())||void 0===n?void 0:n.id)||\"\",{card:o,us_bank_account:s}=i||{},a=this._shouldSaveInstrument(o)||this._shouldSaveInstrument(s),d=this._getTokenizedOptions(t,i);return{methodId:e,paymentData:{formattedPayload:Object.assign({cart_id:r,confirm:!1,method:this.selectedMethodId,vault_payment_instrument:a},d)}}}_processAdditionalAction(e,t,i){return de(this,void 0,void 0,function*(){if(!_(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this.stripeClient||!this.stripeElements)throw new S(d.PaymentNotInitialized);const{data:r}=e.body.additional_action_required,{token:o}=r,{paymentIntent:s,error:a}=yield this._confirmStripePaymentOrThrow(t,r),{client_secret:l,payment_method_options:c}=s||{},h=this._getPaymentPayload(t,l||o,c);if(a||!s){const{initializationData:e}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(t,i),{sendSecondPaymentRequestOnStripeError:r}=e||{};if(r)try{const e=n({},h,{paymentData:{formattedPayload:{client_side_error:!0}}});yield this.paymentIntegrationService.submitPayment(e)}catch(e){}this.stripeIntegrationService.throwStripeError(a)}try{return yield this.paymentIntegrationService.submitPayment(h)}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}})}_confirmStripePaymentOrThrow(e,t){return de(this,void 0,void 0,function*(){if(!this.stripeClient)throw new S(d.PaymentNotInitialized);const{token:i,redirect_url:n}=t,r=this.stripeIntegrationService.mapStripePaymentData(this.stripeElements,n);return(yield this.stripeIntegrationService.isPaymentCompleted(e,this.stripeClient))?this.stripeClient.retrievePaymentIntent(i||\"\"):this.stripeClient.confirmPayment(r)})}_onStripeElementChange(e,t,i,n){ae(e)&&!e.collapsed&&(this.selectedMethodId=e.value.type,null==n||n(`${t}-${i}`))}_shouldSaveInstrument(e){const t=null==e?void 0:e.setup_future_usage;return t===G.ON_SESSION||t===G.OFF_SESSION}_getTokenizedOptions(e,t){return this._shouldSaveInstrument(null==t?void 0:t.us_bank_account)?{tokenized_ach:{token:e}}:{credit_card_token:{token:e}}}}const ce=c(t=>{const i=new W(e());return new le(t,i,new Y(t,i))},[{gateway:\"stripeocs\",id:\"optimized_checkout\"}]);var he=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function s(e){try{d(n.next(e))}catch(e){o(e)}}function a(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,a)}d((n=n.apply(e,t||[])).next())})};class ue{constructor(e,t,i){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=i}initialize(e){var t;return he(this,void 0,void 0,function*(){const{stripeocs:i,methodId:n,gatewayId:r}=e;if(!(null==i?void 0:i.containerId)||!r)throw new S(d.PaymentNotInitialized);let o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,r);(null==o?void 0:o.clientToken)||(yield this.paymentIntegrationService.loadPaymentMethod(r,{params:{method:n}}),o=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(n,r));try{yield this._initStripeCheckoutSession(i,o),yield this._updateStripeShopperData(),this._initializePaymentElement(i,o),this._initializeAdaptivePricingElement(i,o)}catch(e){e instanceof Error&&(null===(t=i.onError)||void 0===t||t.call(i,e))}})}execute(e,t){return he(this,void 0,void 0,function*(){const{payment:i}=e,n=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(n=Object.getOwnPropertySymbols(e);r<n.length;r++)t.indexOf(n[r])<0&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(i[n[r]]=e[n[r]])}return i}(e,[\"payment\"]),{methodId:r,gatewayId:o}=i||{};if(!this.stripeClient)throw new S(d.PaymentNotInitialized);if(!o||!r)throw new u('Unable to initialize payment because \"gatewayId\" or \"methodId\" argument is not provided.');const s=this.paymentIntegrationService.getState(),{isStoreCreditApplied:a}=s.getCheckoutOrThrow();a&&(yield this.paymentIntegrationService.applyStoreCredit(a)),yield this._updateCheckoutSessionData(o,r),yield this.paymentIntegrationService.submitOrder(n,t);const{clientToken:l}=s.getPaymentMethodOrThrow(r,o),c=this._getPaymentPayload(r,l||\"\");try{yield this.paymentIntegrationService.submitPayment(c)}catch(e){yield this._processAdditionalAction(e,o,r)}})}finalize(){return Promise.reject(new v)}deinitialize(){var e,t;const i=null===(e=this.stripeCheckout)||void 0===e?void 0:e.getPaymentElement(),n=null===(t=this.stripeCheckout)||void 0===t?void 0:t.getCurrencySelectorElement();return null==i||i.unmount(),null==i||i.destroy(),null==n||n.unmount(),null==n||n.destroy(),this.stripeCheckout=void 0,this.stripeClient=void 0,this.selectedMethodId=void 0,Promise.resolve()}_initStripeCheckoutSession(e,t){return he(this,void 0,void 0,function*(){const{clientToken:i,initializationData:n}=t;if(!i||!n)throw new g(a.MissingPaymentMethod);this.stripeClient=yield this._loadStripeJs(n);const{appearance:r,fonts:o}=e;this.stripeCheckout=yield this.scriptLoader.getStripeCheckout(this.stripeClient,{clientSecret:i,elementsOptions:{appearance:r,fonts:o},adaptivePricing:{allowed:!!(null==n?void 0:n.adaptivePricingEnabled)}})})}_initializePaymentElement(e,t){const{initializationData:i,id:n,gateway:r}=t,{enableLink:o}=i||{},{containerId:s,layout:a,render:l,paymentMethodSelect:c,handleClosePaymentMethod:h,togglePreloader:u}=e,p=this._getStripeElement({fields:{billingDetails:{email:V.NEVER,name:V.NEVER,address:V.NEVER}},wallets:{applePay:V.NEVER,googlePay:V.NEVER,link:o?V.AUTO:V.NEVER},layout:a});if(!p||!r)throw new S(d.PaymentNotInitialized);this.stripeIntegrationService.mountElement(p,s),p.on(H.LOADER_START,()=>{null==u||u(!1)}),p.on(H.READY,()=>{l()}),p.on(H.CHANGE,e=>{this._onStripeElementChange(e,r,n,c)}),null==h||h(this._collapseStripeElement.bind(this))}_loadStripeJs(e){return he(this,void 0,void 0,function*(){if(this.stripeClient)return this.stripeClient;const t=this.paymentIntegrationService.getState();return this.scriptLoader.getStripeClient(e,t.getCartLocale(),j.CLOVER)})}_getStripeActionsOrThrow(){return he(this,void 0,void 0,function*(){if(!this.stripeCheckout)throw new S(d.PaymentNotInitialized);const{actions:e,error:t}=yield this.stripeCheckout.loadActions();if(!e||t)throw new K(null==t?void 0:t.message);return e})}_getStripeElement(e){var t,i;return(null===(t=this.stripeCheckout)||void 0===t?void 0:t.getPaymentElement())||(null===(i=this.stripeCheckout)||void 0===i?void 0:i.createPaymentElement(e))}_onStripeElementChange(e,t,i,n){ae(e)&&!e.collapsed&&(this.selectedMethodId=e.value.type,null==n||n(`${t}-${i}`))}_collapseStripeElement(){var e;const t=null===(e=this.stripeCheckout)||void 0===e?void 0:e.getPaymentElement();null==t||t.collapse()}_updateCheckoutSessionData(e,t){return he(this,void 0,void 0,function*(){yield this._updateStripeShopperData(),yield this.paymentIntegrationService.loadPaymentMethod(e,{params:{method:t}})})}_getPaymentPayload(e,t,i){var n;const r=(null===(n=this.paymentIntegrationService.getState().getCart())||void 0===n?void 0:n.id)||\"\",o=this._getTokenizedOptions(t,i);return{methodId:e,paymentData:{formattedPayload:Object.assign({cart_id:r,confirm:!1,method:this.selectedMethodId,vault_payment_instrument:!!i},o)}}}_processAdditionalAction(e,t,i){var r;return he(this,void 0,void 0,function*(){if(!_(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;const{data:o}=(null===(r=e.body)||void 0===r?void 0:r.additional_action_required)||{},{token:s}=o||{},a=yield this._getStripeSavedPaymentMethodsOrThrow(),{session:d,error:l}=yield this._confirmStripePayment(o),c=yield this._getStripeSavedPaymentMethodsOrThrow(d),{id:h,status:u}=d||{},p=this._getNewVaultedStripeInstrument(a,c),m=this._getPaymentPayload(i,h||s,p),{initializationData:y}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(i,t),{sendSecondPaymentRequestOnStripeError:g}=y||{};if(l||!d){if(g)try{const e=n({},m,{paymentData:{formattedPayload:{client_side_error:!0}}});yield this.paymentIntegrationService.submitPayment(e)}catch(e){}throw new K(null==l?void 0:l.message)}try{return yield this.paymentIntegrationService.submitPayment(m)}catch(e){throw(null==u?void 0:u.paymentStatus)===L.Paid&&this.stripeIntegrationService.throwPaymentConfirmationProceedMessage(),e}})}_confirmStripePayment(e){return he(this,void 0,void 0,function*(){const{redirect_url:t}=e||{};if(!this.stripeCheckout)throw new S(d.PaymentNotInitialized);return(yield this._getStripeActionsOrThrow()).confirm({redirect:V.IF_REQUIRED,returnUrl:t})})}_updateStripeShopperData(){return he(this,void 0,void 0,function*(){const e=yield this._getStripeActionsOrThrow();yield this._updateStripeEmail(e),yield this._updateStripeShippingAddress(e),yield this._updateStripeBillingAddress(e)})}_updateStripeEmail(e){return he(this,void 0,void 0,function*(){if((yield e.getSession()).email)return;const{getBillingAddress:t}=this.paymentIntegrationService.getState(),i=t();yield e.updateEmail((null==i?void 0:i.email)||\"\")})}_updateStripeShippingAddress(e){return he(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getShippingAddress();t&&(yield e.updateShippingAddress({name:this.stripeIntegrationService.getShopperFullName(t),address:this.stripeIntegrationService.mapStripeAddress(t)}))})}_updateStripeBillingAddress(e){return he(this,void 0,void 0,function*(){const t=this.paymentIntegrationService.getState().getBillingAddress();t&&(yield e.updateBillingAddress({name:this.stripeIntegrationService.getShopperFullName(t),address:this.stripeIntegrationService.mapStripeAddress(t)}))})}_getStripeSavedPaymentMethodsOrThrow(e){return he(this,void 0,void 0,function*(){if(null==e?void 0:e.savedPaymentMethods)return e.savedPaymentMethods;const t=yield this._getStripeActionsOrThrow(),{savedPaymentMethods:i}=yield t.getSession();return i||[]})}_getNewVaultedStripeInstrument(e,t){return t.find(t=>!e.some(e=>e.id===t.id))}_getTokenizedOptions(e,t){return(null==t?void 0:t.type)===x.ACH?{tokenized_ach:{token:e}}:{credit_card_token:{token:e}}}_initializeAdaptivePricingElement(e,t){const{initializationData:i}=t,{currencySelectorContainerId:n}=e;if(!(null==i?void 0:i.adaptivePricingEnabled))return;if(!n)throw new S(d.PaymentNotInitialized);const r=this._getCurrencySelectorElement();r&&(r.mount(`#${n}`),this._initAdaptivePricingEvents(r))}_getCurrencySelectorElement(){var e,t;return(null===(e=this.stripeCheckout)||void 0===e?void 0:e.getCurrencySelectorElement())||(null===(t=this.stripeCheckout)||void 0===t?void 0:t.createCurrencySelectorElement())}_initAdaptivePricingEvents(e){e.on(H.CHANGE,e=>he(this,void 0,void 0,function*(){if(!e.value||!(\"currency\"in e.value))return;const{currency:t}=this.paymentIntegrationService.getState().getCartOrThrow(),i=t.code.toLowerCase(),n=e.value.currency.toLowerCase();yield this.paymentIntegrationService.updatePaymentProviderCustomer({isCustomerCurrencySelected:i!==n,customerCurrency:n})}))}}const pe=c(t=>{const i=new W(e());return new ue(t,i,new Y(t,i))},[{gateway:\"stripeocs\",id:\"checkout_session\"}]);class me{constructor(e,t){this.paymentIntegrationService=e,this.scriptLoader=t}initialize(e){var t,i,n,r,o;return i=this,n=void 0,o=function*(){let i;if(!e.stripeupe)throw new u('Unable to proceed because \"options\" argument is not provided.');const{container:n,gatewayId:r,methodId:o,onEmailChange:s,getStyles:d,isLoading:l}=e.stripeupe;Object.entries(e.stripeupe).forEach(([e,t])=>{if(!t)throw new u(`Unable to proceed because \"${e}\" argument is not provided.`)}),yield this.paymentIntegrationService.loadPaymentMethod(r,{params:{method:o}});const c=this.paymentIntegrationService.getState(),h=c.getPaymentMethodOrThrow(o,r),{clientToken:p}=h;if(!Q(h)||!p)throw new g(a.MissingPaymentToken);const{email:m}=c.getCustomerOrThrow(),y=c.getPaymentProviderCustomerOrThrow(),v=(ne(y)?y:{}).stripeLinkAuthenticationState;if(!m){let e;const r=\"function\"==typeof d&&d();e=r?{variables:{colorPrimary:r.fieldInnerShadow,colorBackground:r.fieldBackground,colorText:r.labelText,colorDanger:r.fieldErrorText,colorTextSecondary:r.labelText,colorTextPlaceholder:r.fieldPlaceholderText},rules:{\".Input\":{borderColor:r.fieldBorder,color:r.fieldText,boxShadow:r.fieldInnerShadow}}}:{},i=yield this.scriptLoader.getStripeClient(h.initializationData,c.getCartLocale(),j.V3,te,ie),this._stripeElements=yield this.scriptLoader.getElements(i,{clientSecret:p,appearance:e});const{getBillingAddress:o,getConsignments:u}=this.paymentIntegrationService.getState(),m=u(),y=null===(t=null==m?void 0:m[0])||void 0===t?void 0:t.id,{email:S}=o()||{},_=S?{defaultValues:{mode:D.SHIPPING,email:S}}:{},f=this._stripeElements.getElement(B.AUTHENTICATION)||this._stripeElements.create(B.AUTHENTICATION,_);f.on(H.CHANGE,e=>{if(!(\"authenticated\"in e))throw new g(a.MissingCustomer);this.paymentIntegrationService.updatePaymentProviderCustomer({stripeLinkAuthenticationState:e.authenticated}),e.complete?s(e.authenticated,e.value.email):s(!1,\"\"),l&&l(!1),void 0===v&&e.authenticated&&y&&this.paymentIntegrationService.deleteConsignment(y)}),f.mount(`#${n}`)}},new((r=void 0)||(r=Promise))(function(e,t){function s(e){try{d(o.next(e))}catch(e){t(e)}}function a(e){try{d(o.throw(e))}catch(e){t(e)}}function d(t){var i;t.done?e(t.value):(i=t.value,i instanceof r?i:new r(function(e){e(i)})).then(s,a)}d((o=o.apply(i,n||[])).next())})}deinitialize(){var e,t;return null===(t=null===(e=this._stripeElements)||void 0===e?void 0:e.getElement(B.AUTHENTICATION))||void 0===t||t.unmount(),Promise.resolve()}signIn(e,t){return this.paymentIntegrationService.signInCustomer(e,t),Promise.resolve()}signOut(e){return this.paymentIntegrationService.signOutCustomer(e),Promise.resolve()}executePaymentMethodCheckout(e){var t;return null===(t=null==e?void 0:e.continueWithCheckoutCallback)||void 0===t||t.call(e),Promise.resolve()}}const ye=c(t=>new me(t,new W(e())),[{id:\"stripeupe\"}]),ge={size:70,color:\"#d9d9d9\",backgroundColor:\"#ffffff\"},ve={position:\"fixed\",\"background-color\":\"rgba(0, 0, 0, 0.4)\",\"z-index\":\"1000\"},Se=\"embedded-checkout-loading-indicator-rotation\";class _e{constructor(e){this.styles=Object.assign(Object.assign({},ge),e&&e.styles),this.containerStyles=Object.assign({},e&&e.containerStyles),this.defineAnimation(),this.container=this.buildContainer(),this.indicator=this.buildIndicator(),this.container.appendChild(this.indicator)}show(e){if(e){const t=document.getElementById(e);if(!t)throw new Error(\"Unable to attach the loading indicator because the parent ID is not valid.\");t.appendChild(this.container)}this.container.style.visibility=\"visible\",this.container.style.opacity=\"1\"}hide(){const e=()=>{this.container.style.visibility=\"hidden\",this.container.removeEventListener(\"transitionend\",e)};this.container.addEventListener(\"transitionend\",e),this.container.style.opacity=\"0\"}buildContainer(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.bottom=\"0\",e.style.left=\"0\",e.style.height=\"100%\",e.style.width=\"100%\",e.style.position=\"absolute\",e.style.right=\"0\",e.style.top=\"0\",e.style.transition=\"all 250ms ease-out\",e.style.opacity=\"0\",this.setStyleAttribute(e,this.containerStyles),e}buildIndicator(){const e=document.createElement(\"div\");return e.style.display=\"block\",e.style.width=`${this.styles.size}px`,e.style.height=`${this.styles.size}px`,e.style.borderRadius=`${this.styles.size}px`,e.style.border=\"solid 1px\",e.style.borderColor=`${this.styles.backgroundColor} ${this.styles.backgroundColor} ${this.styles.color} ${this.styles.color}`,e.style.margin=\"0 auto\",e.style.position=\"absolute\",e.style.left=\"0\",e.style.right=\"0\",e.style.top=\"50%\",e.style.transform=\"translateY(-50%) rotate(0deg)\",e.style.transformStyle=\"preserve-3d\",e.style.animation=`${Se} 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83)`,e}setStyleAttribute(e,t){Object.keys(t).forEach(i=>{e.style.setProperty(i,t[i])})}defineAnimation(){var e;if(document.getElementById(Se))return;const t=document.createElement(\"style\");t.id=Se,null===(e=document.head)||void 0===e||e.appendChild(t),t.sheet instanceof CSSStyleSheet&&t.sheet.insertRule(`\\n                @keyframes ${Se} {\\n                    0% { transform: translateY(-50%) rotate(0deg); }\\n                    100% { transform: translateY(-50%) rotate(360deg); }\\n                }\\n            `,0)}}class fe{constructor(e){this._decimalPlaces=e}toInteger(e){return Math.round(e*Math.pow(10,this._decimalPlaces))}}const Ce=[\"AC\",\"AD\",\"AE\",\"AF\",\"AG\",\"AI\",\"AL\",\"AM\",\"AO\",\"AQ\",\"AR\",\"AT\",\"AU\",\"AW\",\"AX\",\"AZ\",\"BA\",\"BB\",\"BD\",\"BE\",\"BF\",\"BG\",\"BH\",\"BI\",\"BJ\",\"BL\",\"BM\",\"BN\",\"BO\",\"BQ\",\"BR\",\"BS\",\"BT\",\"BV\",\"BW\",\"BY\",\"BZ\",\"CA\",\"CD\",\"CF\",\"CG\",\"CH\",\"CI\",\"CK\",\"CL\",\"CM\",\"CN\",\"CO\",\"CR\",\"CV\",\"CW\",\"CY\",\"CZ\",\"DE\",\"DJ\",\"DK\",\"DM\",\"DO\",\"DZ\",\"EC\",\"EE\",\"EG\",\"EH\",\"ER\",\"ES\",\"ET\",\"FI\",\"FJ\",\"FK\",\"FO\",\"FR\",\"GA\",\"GB\",\"GD\",\"GE\",\"GF\",\"GG\",\"GH\",\"GI\",\"GL\",\"GM\",\"GN\",\"GP\",\"GQ\",\"GR\",\"GS\",\"GT\",\"GU\",\"GW\",\"GY\",\"HK\",\"HN\",\"HR\",\"HT\",\"HU\",\"ID\",\"IE\",\"IL\",\"IM\",\"IN\",\"IO\",\"IQ\",\"IS\",\"IT\",\"JE\",\"JM\",\"JO\",\"JP\",\"KE\",\"KG\",\"KH\",\"KI\",\"KM\",\"KN\",\"KR\",\"KW\",\"KY\",\"KZ\",\"LA\",\"LB\",\"LC\",\"LI\",\"LK\",\"LR\",\"LS\",\"LT\",\"LU\",\"LV\",\"LY\",\"MA\",\"MC\",\"MD\",\"ME\",\"MF\",\"MG\",\"MK\",\"ML\",\"MM\",\"MN\",\"MO\",\"MQ\",\"MR\",\"MS\",\"MT\",\"MU\",\"MV\",\"MW\",\"MX\",\"MY\",\"MZ\",\"NA\",\"NC\",\"NE\",\"NG\",\"NI\",\"NL\",\"NO\",\"NP\",\"NR\",\"NU\",\"NZ\",\"OM\",\"PA\",\"PE\",\"PF\",\"PG\",\"PH\",\"PK\",\"PL\",\"PM\",\"PN\",\"PR\",\"PS\",\"PT\",\"PY\",\"QA\",\"RE\",\"RO\",\"RS\",\"RU\",\"RW\",\"SA\",\"SB\",\"SC\",\"SD\",\"SE\",\"SG\",\"SH\",\"SI\",\"SJ\",\"SK\",\"SL\",\"SM\",\"SN\",\"SO\",\"SR\",\"SS\",\"ST\",\"SV\",\"SX\",\"SZ\",\"TA\",\"TC\",\"TD\",\"TF\",\"TG\",\"TH\",\"TJ\",\"TK\",\"TL\",\"TM\",\"TN\",\"TO\",\"TR\",\"TT\",\"TV\",\"TW\",\"TZ\",\"UA\",\"UG\",\"US\",\"UY\",\"UZ\",\"VA\",\"VC\",\"VE\",\"VG\",\"VN\",\"VU\",\"WF\",\"WS\",\"XK\",\"YE\",\"YT\",\"ZA\",\"ZM\",\"ZW\",\"ZZ\"];var Ie=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function s(e){try{d(n.next(e))}catch(e){o(e)}}function a(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,a)}d((n=n.apply(e,t||[])).next())})};class Ee{constructor(e,t,i,n){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=i,this.loadingIndicator=n}initialize(e){return Ie(this,void 0,void 0,function*(){const{stripeocs:t}=e||{};if(!t)throw new u('Unable to proceed because \"options\" argument is not provided.');const{gatewayId:i,container:n}=t;if(!n||!i)throw new S(d.PaymentNotInitialized);const r=this._getMethodId(i),o=yield this.paymentIntegrationService.loadPaymentMethod(i,{params:{method:r}}),s=o.getPaymentMethodOrThrow(r,i),{loadingContainerId:l,buttonHeight:c,onComplete:h}=t;if(this._loadingIndicatorContainer=l,this._onComplete=h,!Q(s))throw new g(a.MissingPaymentMethod);const{initializationData:p}=s,{captureMethod:m}=p,y=this.stripeIntegrationService.getStripeJsVersion(p);this._captureMethod=m,this._stripeClient=yield this.scriptLoader.getStripeClient(p,o.getCartLocale(),y),yield this._mountExpressCheckoutElement(n,this._stripeClient,c),this._initializeEvents(r)})}signIn(){return Promise.resolve()}signOut(){return Promise.resolve()}executePaymentMethodCheckout(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_mountExpressCheckoutElement(e,t,i=40){return Ie(this,void 0,void 0,function*(){const n=this._shouldRequireShippingAddress(),r=Object.assign(Object.assign(Object.assign({shippingAddressRequired:n},n?{allowedShippingCountries:yield this._getAvailableCountries()}:{}),n?{shippingRates:[{id:\"_\",amount:0,displayName:\"Pending rates\"}]}:{}),{billingAddressRequired:!0,emailRequired:!0,phoneNumberRequired:!0,paymentMethods:{link:V.AUTO,applePay:V.NEVER,googlePay:V.NEVER,amazonPay:V.NEVER,paypal:V.NEVER,klarna:V.NEVER},buttonHeight:i}),{cartAmount:o}=this.paymentIntegrationService.getState().getCartOrThrow(),s=Object.assign({mode:\"payment\",amount:this._toCents(o),currency:this._getCurrency()},this._captureMethod?{captureMethod:this._captureMethod}:{});return this._stripeElements=t.elements(s),this._linkV2Element=this._stripeElements.create(B.EXPRESS_CHECKOUT,r),this._linkV2Element.mount(`#${e}`),this._linkV2Element})}_initializeEvents(e){this._linkV2Element&&(this._shouldRequireShippingAddress()&&(this._linkV2Element.on(H.SHIPPING_ADDRESS_CHANGE,e=>Ie(this,void 0,void 0,function*(){return this._onShippingAddressChange(e)})),this._linkV2Element.on(H.SHIPPING_RATE_CHANGE,e=>Ie(this,void 0,void 0,function*(){return this._onShippingRateChange(e)}))),this._linkV2Element.on(H.CONFIRM,t=>Ie(this,void 0,void 0,function*(){return this._onConfirm(t,e)})),this._linkV2Element.on(H.CANCEL,this._onCancel))}_onShippingAddressChange(e){return Ie(this,void 0,void 0,function*(){if(!(\"address\"in e))return;const t=e.address,i={firstName:\"\",lastName:\"\",phone:\"\",company:\"\",address1:\"\",address2:\"\",city:(null==t?void 0:t.city)||\"\",countryCode:(null==t?void 0:t.country)||\"\",postalCode:(null==t?void 0:t.postal_code)||\"\",stateOrProvince:(null==t?void 0:t.state)||\"\",stateOrProvinceCode:(null==t?void 0:t.state)||\"\",customFields:[]};yield this.paymentIntegrationService.updateShippingAddress(i);const n=yield this._getAvailableShippingOptions();yield this._updateDisplayedPrice(),(null==n?void 0:n.length)?e.resolve({shippingRates:n}):e.reject()})}_onCancel(){throw new f}_onShippingRateChange(e){return Ie(this,void 0,void 0,function*(){if(\"shippingRate\"in e){const{shippingRate:t}=e;yield this._handleShippingOptionChange(null==t?void 0:t.id),yield this._updateDisplayedPrice(),e.resolve({})}})}_onConfirm(e,t){return Ie(this,void 0,void 0,function*(){if(\"billingDetails\"in e&&\"shippingAddress\"in e&&this._stripeClient&&this._stripeElements){yield this.stripeIntegrationService.verifyCheckoutSpamProtection(),yield this._updateShippingAndBillingAddress(e),yield this.paymentIntegrationService.submitOrder();const i=this._getPaymentPayload(t);try{yield this.paymentIntegrationService.submitPayment(i)}catch(e){yield this._processAdditionalAction(e,t)}}return Promise.resolve()})}_updateShippingAndBillingAddress(e){var t,i,n,r,o,s,a,d;return Ie(this,void 0,void 0,function*(){const l=this._shouldRequireShippingAddress(),c=(null===(i=null===(t=e.shippingAddress)||void 0===t?void 0:t.name)||void 0===i?void 0:i.split(\" \")[0])||(null===(r=null===(n=e.billingDetails)||void 0===n?void 0:n.name)||void 0===r?void 0:r.split(\" \")[0])||\"\",h=(null===(s=null===(o=e.shippingAddress)||void 0===o?void 0:o.name)||void 0===s?void 0:s.split(\" \")[1])||(null===(d=null===(a=e.billingDetails)||void 0===a?void 0:a.name)||void 0===d?void 0:d.split(\" \")[1])||\"\";if(l){const t=this._mapShippingAddress(e.shippingAddress,e.billingDetails,c,h);yield this.paymentIntegrationService.updateShippingAddress(t)}const u=this._mapBillingAddress(e.shippingAddress,e.billingDetails,c,h);yield this.paymentIntegrationService.updateBillingAddress(u)})}_mapShippingAddress(e,t,i,n){var r,o,s,a,d,l,c;return{firstName:i,lastName:n,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==e?void 0:e.address)||void 0===r?void 0:r.line1)||\"\",address2:(null===(o=null==e?void 0:e.address)||void 0===o?void 0:o.line2)||\"\",city:(null===(s=null==e?void 0:e.address)||void 0===s?void 0:s.city)||\"\",countryCode:(null===(a=null==e?void 0:e.address)||void 0===a?void 0:a.country)||\"\",postalCode:(null===(d=null==e?void 0:e.address)||void 0===d?void 0:d.postal_code)||\"\",stateOrProvince:(null===(l=null==e?void 0:e.address)||void 0===l?void 0:l.state)||\"\",stateOrProvinceCode:(null===(c=null==e?void 0:e.address)||void 0===c?void 0:c.state)||\"\",customFields:[]}}_mapBillingAddress(e,t,i,n){var r,o,s,a,d,l;return{email:(null==t?void 0:t.email)||\"\",firstName:i,lastName:n,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==t?void 0:t.address)||void 0===r?void 0:r.line1)||\"\",address2:\"\",city:(null===(o=null==t?void 0:t.address)||void 0===o?void 0:o.city)||\"\",countryCode:(null===(s=null==t?void 0:t.address)||void 0===s?void 0:s.country)||\"\",postalCode:(null===(a=null==t?void 0:t.address)||void 0===a?void 0:a.postal_code)||\"\",stateOrProvince:(null===(d=null==t?void 0:t.address)||void 0===d?void 0:d.state)||\"\",stateOrProvinceCode:(null===(l=null==e?void 0:e.address)||void 0===l?void 0:l.state)||\"\",customFields:[]}}_processAdditionalAction(e,t){return Ie(this,void 0,void 0,function*(){if(!_(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this._stripeClient||!this._stripeElements)throw new S(d.PaymentNotInitialized);const{data:i}=e.body.additional_action_required,{token:n}=i,{paymentIntent:r}=yield this._confirmStripePaymentOrThrow(i,t),o=this._getPaymentPayload(t,(null==r?void 0:r.id)||n);try{this._toggleLoadingIndicator(!0),yield this.paymentIntegrationService.submitPayment(o),yield this._completeCheckoutFlow()}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}finally{this._toggleLoadingIndicator(!1)}})}_confirmStripePaymentOrThrow(e,t){var i,n,r;return Ie(this,void 0,void 0,function*(){const{token:o,redirect_url:s}=e,a=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,s);let d;try{const e=(yield this.stripeIntegrationService.isPaymentCompleted(t,this._stripeClient))?yield null===(r=this._stripeClient)||void 0===r?void 0:r.retrievePaymentIntent(o||\"\"):yield null===(i=this._stripeClient)||void 0===i?void 0:i.confirmPayment({elements:a.elements,clientSecret:o,redirect:V.IF_REQUIRED,confirmParams:{return_url:null===(n=a.confirmParams)||void 0===n?void 0:n.return_url}});if(d=null==e?void 0:e.error,d||!(null==e?void 0:e.paymentIntent))throw new K;return e}catch(e){return this.stripeIntegrationService.throwStripeError(d)}})}_completeCheckoutFlow(){return Ie(this,void 0,void 0,function*(){return\"function\"==typeof this._onComplete?this._onComplete():(window.location.replace(\"/order-confirmation\"),Promise.resolve())})}_getPaymentPayload(e,t){var i;const n=(null===(i=this.paymentIntegrationService.getState().getCart())||void 0===i?void 0:i.id)||\"\";return{methodId:e,paymentData:{formattedPayload:Object.assign(Object.assign({cart_id:n},t?{credit_card_token:{token:t}}:{}),{confirm:!1,method:x.Link})}}}_shouldRequireShippingAddress(){const{getCartOrThrow:e}=this.paymentIntegrationService.getState(),{lineItems:t}=e();return!!t.physicalItems.length}_updateDisplayedPrice(){return Ie(this,void 0,void 0,function*(){this._stripeElements&&this._stripeElements.update({currency:this._getCurrency(),mode:\"payment\",amount:yield this._getTotalPrice()})})}_getCurrency(){if(!this._currencyCode){const{code:e}=this.paymentIntegrationService.getState().getCartOrThrow().currency;this._currencyCode=e.toLowerCase()}return this._currencyCode}_getTotalPrice(){return Ie(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const{getCheckoutOrThrow:e,getCartOrThrow:t}=this.paymentIntegrationService.getState(),{decimalPlaces:i}=t().currency,n=o(e().outstandingBalance,i).toFixed(i);return this._toCents(+n)})}_getAvailableCountries(){var e;return Ie(this,void 0,void 0,function*(){const t=yield this.paymentIntegrationService.loadShippingCountries();return((null===(e=t.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code))||[]).filter(e=>Ce.includes(e))})}_getAvailableShippingOptions(){var e,t,i;return Ie(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getConsignments();if(!(null==n?void 0:n[0]))return;const r=n[0],o=(r.availableShippingOptions||[]).map(this._getStripeShippingOption.bind(this)),s=null===(e=r.availableShippingOptions)||void 0===e?void 0:e.find(e=>e.isRecommended),a=null===(t=r.selectedShippingOption)||void 0===t?void 0:t.id,d=null==s?void 0:s.id;return a?o.sort(e=>e.id===a?-1:0):d?(o.sort(e=>e.id===d?-1:0),yield this._handleShippingOptionChange(d)):yield this._handleShippingOptionChange(null===(i=o[0])||void 0===i?void 0:i.id),o.slice(0,9)})}_getStripeShippingOption({id:e,cost:t,description:i}){return{id:e,displayName:i,amount:this._toCents(t)}}_handleShippingOptionChange(e){return Ie(this,void 0,void 0,function*(){if(e&&\"shipping_option_unselected\"!==e)return this.paymentIntegrationService.selectShippingOption(e)})}_getAmountTransformer(){if(this._amountTransformer)return this._amountTransformer;const{getCart:e}=this.paymentIntegrationService.getState(),{currency:t}=e()||{};return t?new fe(t.decimalPlaces):void 0}_toCents(e){const t=Math.round(100*e),i=this._getAmountTransformer();return i?i.toInteger(e):t}_toggleLoadingIndicator(e){e&&this._loadingIndicatorContainer?this.loadingIndicator.show(this._loadingIndicatorContainer):this.loadingIndicator.hide()}_getMethodId(e){const{initializationData:{checkoutSessionEnabled:t}={}}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e);return t?x.CHECKOUT_SESSION:x.OCS}}const Pe=c(t=>{const i=new W(e()),n=new _e({containerStyles:ve});return new Ee(t,i,new Y(t,i),n)},[{id:\"stripeocs\"}]);var be=function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function s(e){try{d(n.next(e))}catch(e){o(e)}}function a(e){try{d(n.throw(e))}catch(e){o(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,a)}d((n=n.apply(e,t||[])).next())})};class we{constructor(e,t,i,n){this.paymentIntegrationService=e,this.scriptLoader=t,this.stripeIntegrationService=i,this.loadingIndicator=n}initialize(e){return be(this,void 0,void 0,function*(){const{stripeocs:t,containerId:i}=e||{};if(!t||!i)throw new S(d.PaymentNotInitialized);const{gatewayId:n}=t;if(!n)throw new g(a.MissingPaymentMethod);const r=this._getMethodId(n),o=yield this.paymentIntegrationService.loadPaymentMethod(n,{params:{method:r}}),s=o.getPaymentMethodOrThrow(r,n),{loadingContainerId:l,buttonHeight:c,onComplete:h}=t;if(this._loadingIndicatorContainer=l,this._onComplete=h,!Q(s))throw new g(a.MissingPaymentMethod);const{initializationData:u}=s,{captureMethod:p}=u,m=this.stripeIntegrationService.getStripeJsVersion(u);this._captureMethod=p,this._stripeClient=yield this.scriptLoader.getStripeClient(u,o.getCartLocale(),m),yield this.paymentIntegrationService.loadDefaultCheckout(),yield this._mountExpressCheckoutElement(i,this._stripeClient,c),this._initializeEvents(r)})}signIn(){return Promise.resolve()}signOut(){return Promise.resolve()}executePaymentMethodCheckout(){return Promise.resolve()}deinitialize(){return Promise.resolve()}_mountExpressCheckoutElement(e,t,i=40){return be(this,void 0,void 0,function*(){const n=this._shouldRequireShippingAddress(),r=Object.assign(Object.assign(Object.assign({shippingAddressRequired:n},n?{allowedShippingCountries:yield this._getAvailableCountries()}:{}),n?{shippingRates:[{id:\"_\",amount:0,displayName:\"Pending rates\"}]}:{}),{billingAddressRequired:!0,emailRequired:!0,phoneNumberRequired:!0,paymentMethods:{link:V.AUTO,applePay:V.NEVER,googlePay:V.NEVER,amazonPay:V.NEVER,paypal:V.NEVER,klarna:V.NEVER},buttonHeight:i}),{cartAmount:o=1}=this.paymentIntegrationService.getState().getCart()||{},s=Object.assign({mode:\"payment\",amount:this._toCents(o),currency:this._getCurrency()},this._captureMethod?{captureMethod:this._captureMethod}:{});this._stripeElements=t.elements(s),this._linkV2Element=this._stripeElements.create(B.EXPRESS_CHECKOUT,r),this._linkV2Element.mount(`#${e}`)})}_initializeEvents(e){this._linkV2Element&&(this._shouldRequireShippingAddress()&&(this._linkV2Element.on(H.SHIPPING_ADDRESS_CHANGE,e=>be(this,void 0,void 0,function*(){return this._onShippingAddressChange(e)})),this._linkV2Element.on(H.SHIPPING_RATE_CHANGE,e=>be(this,void 0,void 0,function*(){return this._onShippingRateChange(e)}))),this._linkV2Element.on(H.CONFIRM,t=>be(this,void 0,void 0,function*(){return this._onConfirm(t,e)})),this._linkV2Element.on(H.CANCEL,this._onCancel))}_onShippingAddressChange(e){return be(this,void 0,void 0,function*(){if(!(\"address\"in e))return;const t=e.address,i={firstName:\"\",lastName:\"\",phone:\"\",company:\"\",address1:\"\",address2:\"\",city:(null==t?void 0:t.city)||\"\",countryCode:(null==t?void 0:t.country)||\"\",postalCode:(null==t?void 0:t.postal_code)||\"\",stateOrProvince:(null==t?void 0:t.state)||\"\",stateOrProvinceCode:(null==t?void 0:t.state)||\"\",customFields:[]};yield this.paymentIntegrationService.updateShippingAddress(i);const n=yield this._getAvailableShippingOptions();yield this._updateDisplayedPrice(),(null==n?void 0:n.length)?e.resolve({shippingRates:n}):e.reject()})}_onCancel(){throw new f}_onShippingRateChange(e){return be(this,void 0,void 0,function*(){if(\"shippingRate\"in e){const{shippingRate:t}=e;yield this._handleShippingOptionChange(null==t?void 0:t.id),yield this._updateDisplayedPrice(),e.resolve({})}})}_onConfirm(e,t){return be(this,void 0,void 0,function*(){if(\"billingDetails\"in e&&\"shippingAddress\"in e&&this._stripeClient&&this._stripeElements){yield this.stripeIntegrationService.verifyCheckoutSpamProtection(),yield this._updateShippingAndBillingAddress(e),yield this.paymentIntegrationService.submitOrder();const i=this._getPaymentPayload(t);try{yield this.paymentIntegrationService.submitPayment(i)}catch(e){yield this._processAdditionalAction(e,t)}}return Promise.resolve()})}_updateShippingAndBillingAddress(e){var t,i,n,r,o,s,a,d;return be(this,void 0,void 0,function*(){const l=this._shouldRequireShippingAddress(),c=(null===(i=null===(t=e.shippingAddress)||void 0===t?void 0:t.name)||void 0===i?void 0:i.split(\" \")[0])||(null===(r=null===(n=e.billingDetails)||void 0===n?void 0:n.name)||void 0===r?void 0:r.split(\" \")[0])||\"\",h=(null===(s=null===(o=e.shippingAddress)||void 0===o?void 0:o.name)||void 0===s?void 0:s.split(\" \")[1])||(null===(d=null===(a=e.billingDetails)||void 0===a?void 0:a.name)||void 0===d?void 0:d.split(\" \")[1])||\"\";if(l){const t=this._mapShippingAddress(e.shippingAddress,e.billingDetails,c,h);yield this.paymentIntegrationService.updateShippingAddress(t)}const u=this._mapBillingAddress(e.shippingAddress,e.billingDetails,c,h);yield this.paymentIntegrationService.updateBillingAddress(u)})}_mapShippingAddress(e,t,i,n){var r,o,s,a,d,l,c;return{firstName:i,lastName:n,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==e?void 0:e.address)||void 0===r?void 0:r.line1)||\"\",address2:(null===(o=null==e?void 0:e.address)||void 0===o?void 0:o.line2)||\"\",city:(null===(s=null==e?void 0:e.address)||void 0===s?void 0:s.city)||\"\",countryCode:(null===(a=null==e?void 0:e.address)||void 0===a?void 0:a.country)||\"\",postalCode:(null===(d=null==e?void 0:e.address)||void 0===d?void 0:d.postal_code)||\"\",stateOrProvince:(null===(l=null==e?void 0:e.address)||void 0===l?void 0:l.state)||\"\",stateOrProvinceCode:(null===(c=null==e?void 0:e.address)||void 0===c?void 0:c.state)||\"\",customFields:[]}}_mapBillingAddress(e,t,i,n){var r,o,s,a,d,l;return{email:(null==t?void 0:t.email)||\"\",firstName:i,lastName:n,phone:(null==t?void 0:t.phone)||\"\",company:\"\",address1:(null===(r=null==t?void 0:t.address)||void 0===r?void 0:r.line1)||\"\",address2:\"\",city:(null===(o=null==t?void 0:t.address)||void 0===o?void 0:o.city)||\"\",countryCode:(null===(s=null==t?void 0:t.address)||void 0===s?void 0:s.country)||\"\",postalCode:(null===(a=null==t?void 0:t.address)||void 0===a?void 0:a.postal_code)||\"\",stateOrProvince:(null===(d=null==t?void 0:t.address)||void 0===d?void 0:d.state)||\"\",stateOrProvinceCode:(null===(l=null==e?void 0:e.address)||void 0===l?void 0:l.state)||\"\",customFields:[]}}_processAdditionalAction(e,t){return be(this,void 0,void 0,function*(){if(!_(e)||!this.stripeIntegrationService.isAdditionalActionError(e.body.errors))throw e;if(!this._stripeClient||!this._stripeElements)throw new S(d.PaymentNotInitialized);const{data:i}=e.body.additional_action_required,{token:n}=i,{paymentIntent:r}=yield this._confirmStripePaymentOrThrow(i,t),o=this._getPaymentPayload(t,(null==r?void 0:r.id)||n);try{this._toggleLoadingIndicator(!0),yield this.paymentIntegrationService.submitPayment(o),yield this._completeCheckoutFlow()}catch(e){this.stripeIntegrationService.throwPaymentConfirmationProceedMessage()}finally{this._toggleLoadingIndicator(!1)}})}_confirmStripePaymentOrThrow(e,t){var i,n,r;return be(this,void 0,void 0,function*(){const{token:o,redirect_url:s}=e,a=this.stripeIntegrationService.mapStripePaymentData(this._stripeElements,s);let d;try{const e=(yield this.stripeIntegrationService.isPaymentCompleted(t,this._stripeClient))?yield null===(r=this._stripeClient)||void 0===r?void 0:r.retrievePaymentIntent(o||\"\"):yield null===(i=this._stripeClient)||void 0===i?void 0:i.confirmPayment({elements:a.elements,clientSecret:o,redirect:V.IF_REQUIRED,confirmParams:{return_url:null===(n=a.confirmParams)||void 0===n?void 0:n.return_url}});if(d=null==e?void 0:e.error,d||!(null==e?void 0:e.paymentIntent))throw new K;return e}catch(e){return this.stripeIntegrationService.throwStripeError(d)}})}_completeCheckoutFlow(){return be(this,void 0,void 0,function*(){return\"function\"==typeof this._onComplete?this._onComplete():(window.location.replace(\"/checkout/order-confirmation\"),Promise.resolve())})}_getPaymentPayload(e,t){var i;const n=(null===(i=this.paymentIntegrationService.getState().getCart())||void 0===i?void 0:i.id)||\"\";return{methodId:e,paymentData:{formattedPayload:Object.assign(Object.assign({cart_id:n},t?{credit_card_token:{token:t}}:{}),{confirm:!1,method:x.Link})}}}_shouldRequireShippingAddress(){const{getCart:e}=this.paymentIntegrationService.getState(),{lineItems:t}=e()||{};return!!(null==t?void 0:t.physicalItems.length)}_updateDisplayedPrice(){return be(this,void 0,void 0,function*(){this._stripeElements&&this._stripeElements.update({currency:this._getCurrency(),mode:\"payment\",amount:yield this._getTotalPrice()})})}_getCurrency(){var e;if(!this._currencyCode){const t=null===(e=this.paymentIntegrationService.getState().getCart())||void 0===e?void 0:e.currency;t&&(this._currencyCode=t.code.toLowerCase())}return this._currencyCode}_getTotalPrice(){var e;return be(this,void 0,void 0,function*(){yield this.paymentIntegrationService.loadCheckout();const{getCheckoutOrThrow:t,getCart:i}=this.paymentIntegrationService.getState(),{decimalPlaces:n}=(null===(e=i())||void 0===e?void 0:e.currency)||{},r=o(t().outstandingBalance,n).toFixed(n);return this._toCents(+r)})}_getAvailableCountries(){var e;return be(this,void 0,void 0,function*(){const t=yield this.paymentIntegrationService.loadShippingCountries();return((null===(e=t.getShippingCountries())||void 0===e?void 0:e.map(e=>e.code))||[]).filter(e=>Ce.includes(e))})}_getAvailableShippingOptions(){var e,t,i;return be(this,void 0,void 0,function*(){const n=this.paymentIntegrationService.getState().getConsignments();if(!(null==n?void 0:n[0]))return;const r=n[0],o=(r.availableShippingOptions||[]).map(this._getStripeShippingOption.bind(this)),s=null===(e=r.availableShippingOptions)||void 0===e?void 0:e.find(e=>e.isRecommended),a=null===(t=r.selectedShippingOption)||void 0===t?void 0:t.id,d=null==s?void 0:s.id;return a?o.sort(e=>e.id===a?-1:0):d?(o.sort(e=>e.id===d?-1:0),yield this._handleShippingOptionChange(d)):yield this._handleShippingOptionChange(null===(i=o[0])||void 0===i?void 0:i.id),o.slice(0,9)})}_getStripeShippingOption({id:e,cost:t,description:i}){return{id:e,displayName:i,amount:this._toCents(t)}}_handleShippingOptionChange(e){return be(this,void 0,void 0,function*(){if(e&&\"shipping_option_unselected\"!==e)return this.paymentIntegrationService.selectShippingOption(e)})}_getAmountTransformer(){if(this._amountTransformer)return this._amountTransformer;const{getCart:e}=this.paymentIntegrationService.getState(),{currency:t}=e()||{};return t?new fe(t.decimalPlaces):void 0}_toCents(e){const t=Math.round(100*e),i=this._getAmountTransformer();return i?i.toInteger(e):t}_toggleLoadingIndicator(e){e&&this._loadingIndicatorContainer?this.loadingIndicator.show(this._loadingIndicatorContainer):this.loadingIndicator.hide()}_getMethodId(e){const{initializationData:{checkoutSessionEnabled:t}={}}=this.paymentIntegrationService.getState().getPaymentMethodOrThrow(e);return t?x.CHECKOUT_SESSION:x.OCS}}const Ae=c(t=>{const i=new W(e()),n=new _e({containerStyles:ve});return new we(t,i,new Y(t,i),n)},[{id:\"stripeocs\"}]);export{Ae as createLinkV2ButtonStrategy,pe as createStripeCSPaymentStrategy,Pe as createStripeLinkV2CustomerStrategy,ce as createStripeOCSPaymentStrategy,ye as createStripeUPECustomerStrategy,se as createStripeUPEPaymentStrategy,N as createStripeV3PaymentStrategy};\n//# sourceMappingURL=stripe.js.map"
  },
  {
    "path": "dist/esm/integrations/td-bank.js",
    "content": "import{createFormPoster as e}from\"@bigcommerce/form-poster\";import{getScriptLoader as t}from\"@bigcommerce/script-loader\";import{isArray as n,isObject as i,some as r}from\"lodash\";var s,o;class a extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class d extends a{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class c extends d{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(s||(s={}));class u extends a{constructor(e){super(function(e){switch(e){case s.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case s.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case s.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case s.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case s.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case s.MissingCheckoutConfig:case s.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case s.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case s.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case s.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case s.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case s.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case s.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class l extends a{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}function h(e){return!(\"object\"!=typeof e||null===e||void 0!==e.shouldSaveInstrument&&\"boolean\"!=typeof e.shouldSaveInstrument||void 0!==e.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof e.shouldSetAsDefaultInstrument)}function m(){const{navigator:e}=window;let t;return t=e.language?e.language:e.userLanguage,{color_depth:window.screen.colorDepth||24,java_enabled:\"function\"==typeof e.javaEnabled&&e.javaEnabled(),language:t,screen_height:window.screen.height,screen_width:window.screen.width,time_zone_offset:(new Date).getTimezoneOffset().toString()}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(o||(o={}));class p extends a{constructor(e){super(function(e){switch(e){case o.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case o.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case o.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case o.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}function g(e){return\"object\"==typeof e&&null!==e&&\"bigpayToken\"in e&&\"defaultInstrument\"in e&&\"provider\"in e&&\"trustedShippingAddress\"in e&&\"method\"in e&&\"type\"in e}var y;!function(e){e.CARD_NUMBER=\"card-number\",e.CVV=\"cvv\",e.EXPIRY=\"expiry\"}(y||(y={}));var b=function(e,t,n,i){return new(n||(n=Promise))(function(r,s){function o(e){try{d(i.next(e))}catch(e){s(e)}}function a(e){try{d(i.throw(e))}catch(e){s(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(o,a)}d((i=i.apply(e,t||[])).next())})};class f{constructor(e,t,n){this.paymentIntegrationService=e,this.tdOnlineMartScriptLoader=t,this.formPoster=n,this.tdInputs=[{id:\"ccNumber\",fieldType:y.CARD_NUMBER},{id:\"ccCvv\",fieldType:y.CVV},{id:\"ccExpiry\",fieldType:y.EXPIRY}]}initialize(e){return b(this,void 0,void 0,function*(){const{methodId:t}=e;if(!t)throw new d('Unable to initialize payment because \"options.methodId\" argument is not provided.');this.tdOnlineMartClient=yield this.loadTDOnlineMartJs(),this.mountHostedFields(t)})}execute(e,t){return b(this,void 0,void 0,function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new c([\"payment\"]);if(!n.methodId)throw new u(s.MissingPaymentMethod);const r=yield this.getPaymentPayloadOrThrow(n);yield this.paymentIntegrationService.submitOrder(i,t);try{yield this.paymentIntegrationService.submitPayment(r)}catch(e){yield this.processWithAdditionalAction(e)}})}finalize(){return Promise.reject(new l)}deinitialize(){return this.tdOnlineMartClient=void 0,this.tdInputs.forEach(({inputElement:e})=>{null==e||e.unmount()}),Promise.resolve()}getPaymentPayloadOrThrow(e){return b(this,void 0,void 0,function*(){const{methodId:t,paymentData:n}=e,{shouldSaveInstrument:i=!1,shouldSetAsDefaultInstrument:r=!1}=h(n)?n:{},s={browser_info:m(),shouldSaveInstrument:i,shouldSetAsDefaultInstrument:r};if(h(n)&&Boolean(n.instrumentId)&&n.instrumentId){const e=!!this.paymentIntegrationService.getState().getCartOrThrow().lineItems.digitalItems.length,i=!this.isTrustedVaultingInstrument(n.instrumentId)||e;return{methodId:t,paymentData:Object.assign(Object.assign(Object.assign({},s),{instrumentId:n.instrumentId}),i?{nonce:n.instrumentId}:{})}}let o;try{o=yield this.getTokenOrThrow()}catch(e){this.throwTokenizationError(e)}return{methodId:t,paymentData:Object.assign(Object.assign({},s),{nonce:o})}})}mountHostedFields(e){const t=this.getHostedFieldsOptions(),n=this.getTDOnlineMartClientOrThrow();this.tdInputs.forEach(i=>{const r=`${e}-${i.id}`;document.getElementById(r)&&(i.inputElement=n.create(i.fieldType,t),i.inputElement.mount(`#${r}`))})}loadTDOnlineMartJs(){return b(this,void 0,void 0,function*(){return this.tdOnlineMartClient?this.tdOnlineMartClient:this.tdOnlineMartScriptLoader.load()})}getTokenOrThrow(){return new Promise((e,t)=>{this.getTDOnlineMartClientOrThrow().createToken(n=>{const{error:i,token:r}=n;if(i||!r)return t(i);e(r)})})}getTDOnlineMartClientOrThrow(){if(!this.tdOnlineMartClient)throw new p(o.PaymentNotInitialized);return this.tdOnlineMartClient}processWithAdditionalAction(e){return b(this,void 0,void 0,function*(){if(!function(e){return(e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)&&(t=e.body,i(t)&&\"object\"==typeof t&&\"errors\"in t&&\"three_ds_result\"in t&&n(t.errors)&&r(t.errors,{code:\"three_d_secure_required\"}));var t}(e))throw e;const{three_ds_result:t}=e.body,{acs_url:s,payer_auth_request:o,merchant_data:a}=t||{};if(!s||!o||!a)throw new c([\"formUrl\",\"threeDSSessionData\",\"creq\"]);return new Promise(e=>{this.formPoster.postForm(s,{threeDSSessionData:o,creq:a},e,\"_top\")})})}throwTokenizationError(e){if(!function(e){return\"object\"==typeof e&&null!==e&&\"field\"in e&&\"type\"in e&&\"message\"in e}(e))throw new u(s.MissingPaymentToken);throw new Error(e.message)}getHostedFieldsOptions(){return{style:{error:{color:\"#d14343\"}},classes:{error:\"form-input--error\"}}}isTrustedVaultingInstrument(e){const t=this.paymentIntegrationService.getState().getInstruments(),n=null==t?void 0:t.find(t=>g(t)&&t.bigpayToken===e);return!(g(n)&&!n.trustedShippingAddress)}}class M extends a{constructor(e){super(e||\"Unable to proceed because the client library of a payment method is not loaded or ready to be used.\"),this.name=\"PaymentMethodClientUnavailableError\",this.type=\"payment_method_client_unavailable\"}}class v{constructor(e,t=window){this.scriptLoader=e,this.tdOnlineMartWindow=t}load(){return e=this,t=void 0,i=function*(){if(this.tdOnlineMartWindow.customcheckout||(yield this.scriptLoader.loadScript(\"https://libs.na.bambora.com/customcheckout/1/customcheckout.js\")),!this.tdOnlineMartWindow.customcheckout)throw new M;return this.tdOnlineMartWindow.customcheckout()},new((n=void 0)||(n=Promise))(function(r,s){function o(e){try{d(i.next(e))}catch(e){s(e)}}function a(e){try{d(i.throw(e))}catch(e){s(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(o,a)}d((i=i.apply(e,t||[])).next())});var e,t,n,i}}const I=(w=n=>new f(n,new v(t()),e()),O=[{id:\"tdonlinemart\"}],Object.assign(w,{resolveIds:O}));var w,O;export{I as createTDOnlineMartPaymentStrategy};\n//# sourceMappingURL=td-bank.js.map"
  },
  {
    "path": "dist/esm/integrations/worldpayaccess.js",
    "content": "import{isNil as e,merge as t,some as n,values as i}from\"lodash\";var o,r={};function a(e,t){return Object.assign(e,{resolveIds:t})}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);class s extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class d extends s{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class c extends s{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class u extends d{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}!function(e){e[e.CheckoutButtonNotInitialized=0]=\"CheckoutButtonNotInitialized\",e[e.CustomerNotInitialized=1]=\"CustomerNotInitialized\",e[e.PaymentNotInitialized=2]=\"PaymentNotInitialized\",e[e.ShippingNotInitialized=3]=\"ShippingNotInitialized\",e[e.SpamProtectionNotInitialized=4]=\"SpamProtectionNotInitialized\"}(o||(o={}));class l extends s{constructor(e){super(function(e){switch(e){case o.CustomerNotInitialized:return\"Unable to proceed because the customer step of checkout has not been initialized.\";case o.PaymentNotInitialized:return\"Unable to proceed because the payment step of checkout has not been initialized.\";case o.ShippingNotInitialized:return\"Unable to proceed because the shipping step of checkout has not been initialized.\";case o.SpamProtectionNotInitialized:return\"Unable to proceed because the checkout spam protection has not been initialized.\";default:return\"Unable to proceed because the required component has not been initialized.\"}}(e)),this.subtype=e,this.name=\"NotInitializedError\",this.type=\"not_initialized\"}}var m=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{d(i.next(e))}catch(e){r(e)}}function s(e){try{d(i.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})},h=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(i=Object.getOwnPropertySymbols(e);o<i.length;o++)t.indexOf(i[o])<0&&Object.prototype.propertyIsEnumerable.call(e,i[o])&&(n[i[o]]=e[i[o]])}return n};class p{constructor(e){this._paymentIntegrationService=e}execute(e,t){var n,i;return this._isHostedPaymentFormEnabled(null===(n=e.payment)||void 0===n?void 0:n.methodId,null===(i=e.payment)||void 0===i?void 0:i.gatewayId)&&this._shouldRenderHostedForm?this._executeWithHostedForm(e,t):this._executeWithoutHostedForm(e,t)}initialize(e){if(!this._isHostedPaymentFormEnabled(null==e?void 0:e.methodId,null==e?void 0:e.gatewayId)||!this._isHostedFieldAvailable(e))return this._shouldRenderHostedForm=!1,Promise.resolve();const t=e&&e.creditCard&&e.creditCard.form,n=this._paymentIntegrationService.getState(),{paymentSettings:{bigpayBaseUrl:i=\"\"}={}}=n.getStoreConfigOrThrow();if(!t)throw new d;const o=this._paymentIntegrationService.createHostedForm(i,t);return o.attach().then(()=>(this._shouldRenderHostedForm=!0,this._hostedForm=o,Promise.resolve()))}deinitialize(){return this._hostedForm&&this._hostedForm.detach(),Promise.resolve()}finalize(){return Promise.reject(new c)}_executeWithoutHostedForm(e,t){return m(this,void 0,void 0,function*(){const{payment:n}=e,i=h(e,[\"payment\"]),o=n&&n.paymentData;if(!n||!o)throw new u([\"payment.paymentData\"]);yield this._paymentIntegrationService.submitOrder(i,t),yield this._paymentIntegrationService.submitPayment(Object.assign(Object.assign({},n),{paymentData:o}))})}_executeWithHostedForm(e,t){return m(this,void 0,void 0,function*(){const{payment:n}=e,i=h(e,[\"payment\"]),r=this._hostedForm;if(!r)throw new l(o.PaymentNotInitialized);if(!n||!n.methodId)throw new u([\"payment.methodId\"]);yield this._paymentIntegrationService.submitOrder(i,t),yield r.validate().then(()=>r.submit(n))})}_isHostedPaymentFormEnabled(e,t){return!!e&&!0===this._paymentIntegrationService.getState().getPaymentMethodOrThrow(e,t).config.isHostedFormEnabled}_isHostedFieldAvailable(t){return!i(t&&t.creditCard&&t.creditCard.form.fields).every(e)}}const y=e=>\"object\"==typeof e&&null!==e&&\"body\"in e;var f=function(e,t,n,i){return new(n||(n=Promise))(function(o,r){function a(e){try{d(i.next(e))}catch(e){r(e)}}function s(e){try{d(i.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,s)}d((i=i.apply(e,t||[])).next())})};const v=\"Payment cannot continue\";let _;class b extends p{initialize(e){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return f(this,void 0,void 0,function*(){if(this._initializeOptions=e&&e.worldpay,!this._initializeOptions)throw new l(o.PaymentNotInitialized);return t.initialize.call(this,e)})}execute(e,t){const n=Object.create(null,{execute:{get:()=>super.execute}});return f(this,void 0,void 0,function*(){const{payment:i}=e;if(_=this._submitAdditionalAction(),!i)throw new u([\"payment\"]);try{return yield n.execute.call(this,e,t)}catch(e){return this._processAdditionalAction(e,i)}})}_processAdditionalAction(e,i){return f(this,void 0,void 0,function*(){return y(e)&&n(e.body.errors,{code:\"additional_action_required\"})?new Promise((r,a)=>{const s=e=>f(this,void 0,void 0,function*(){if(-1===e.origin.indexOf(\"cardinalcommerce.com\"))return;if(\"string\"!=typeof e.data||!this._isValidJsonWithSessionId(e.data))return a(new Error(v));window.removeEventListener(\"message\",s),d.remove();const c=JSON.parse(e.data),u=t({},i,{paymentData:{threeDSecure:{token:c.SessionId}}});try{r(yield _(u))}catch(e){if(!y(e)||!n(e.body.errors,{code:\"three_d_secure_required\"}))return a(e);if(!this._initializeOptions)return a(new l(o.PaymentNotInitialized));const{onLoad:t}=this._initializeOptions,i=this._createIframe(e.body.three_ds_result);try{t(i,()=>a(new Error(\"Payment was cancelled\")))}catch(e){a(new Error(v))}}});let d;window.addEventListener(\"message\",s);try{d=this._createHiddenIframe(e.body)}catch(e){throw window.removeEventListener(\"message\",s),new Error(v)}}):Promise.reject(e)})}_createHiddenIframe(e){const t=document.createElement(\"iframe\");if(document.body.appendChild(t),!t.contentWindow)throw new Error;t.id=\"worldpay_hosted_hidden_payment_page\",t.height=\"0px\",t.width=\"0px\";const n=document.createElement(\"form\"),i=\"collectionForm\";n.id=i,n.name=\"devicedata\",n.method=\"post\";const o=e.additional_action_required.data.redirect_url;n.action=o;const r=document.createElement(\"input\");r.name=\"Bin\",r.type=\"hidden\",r.value=e.provider_data.source_id,n.appendChild(r);const a=document.createElement(\"input\");a.name=\"JWT\",a.type=\"hidden\",a.value=e.provider_data.data,n.appendChild(a);const s=document.createElement(\"button\");s.type=\"submit\",s.id=\"btnsubmit\",n.appendChild(s),navigator.userAgent.match(\"Firefox\")?t.srcdoc=n.outerHTML:t.contentWindow.document.body.appendChild(n);const d=document.createElement(\"script\");return d.innerHTML=`\\n            document.getElementById('${i}').submit();\\n        `,t.contentWindow.document.body.appendChild(d),t}_createIframe(e){const t=document.createElement(\"form\");t.id=\"challengeForm\",t.method=\"POST\",t.action=e.acs_url;const n=document.createElement(\"input\");n.name=\"JWT\",n.type=\"hidden\",n.value=e.payer_auth_request,t.appendChild(n);const i=document.createElement(\"input\");i.name=\"MD\",i.type=\"hidden\",i.value=`merchantSessionId=${e.merchant_data}`,t.appendChild(i);const o=document.createElement(\"script\");o.type=\"text/javascript\",o.innerHTML=\"window.onload = function() { document.getElementById('challengeForm').submit(); }\";const r=document.createElement(\"iframe\");return r.name=\"worldpay_hosted_payment_page\",r.height=\"400\",r.width=\"100%\",r.srcdoc=`${t.outerHTML} ${o.outerHTML}`,r}_submitAdditionalAction(){if(this._shouldRenderHostedForm){if(!this._hostedForm)throw new l(o.PaymentNotInitialized);const e=this._hostedForm;return t=>f(this,void 0,void 0,function*(){yield e.submit(t)})}return e=>f(this,void 0,void 0,function*(){yield this._paymentIntegrationService.submitPayment(e)})}_isValidJsonWithSessionId(e){try{const t=JSON.parse(e);return!(!t.SessionId||!t.Status)}catch(e){return!1}}}const w=a(e=>new b(e),[{gateway:\"worldpayaccess\",id:\"credit_card\"},{id:\"worldpayaccess\"}]);class g{constructor(e){this._paymentIntegrationService=e}execute({payment:e}){return t=this,n=void 0,o=function*(){if(!e)throw new u([\"payment\"]);yield this._paymentIntegrationService.submitOrder();try{yield this._paymentIntegrationService.submitPayment(this._buildOpenBankingSubmitPayment(e))}catch(e){if(this._isWorldpayAccessRedirectResponse(e)){const t=e.body.additional_action_required.data.redirect_url;return new Promise(()=>window.location.replace(t))}return Promise.reject(e)}},new((i=void 0)||(i=Promise))(function(e,r){function a(e){try{d(o.next(e))}catch(e){r(e)}}function s(e){try{d(o.throw(e))}catch(e){r(e)}}function d(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(a,s)}d((o=o.apply(t,n||[])).next())});var t,n,i,o}initialize(){return Promise.resolve()}finalize(){return Promise.reject(new c)}deinitialize(){return Promise.resolve()}_buildOpenBankingSubmitPayment(e){const{shouldSaveInstrument:t,shouldSetAsDefaultInstrument:n}=\"object\"!=typeof(i=e.paymentData)||null===i||void 0!==i.shouldSaveInstrument&&\"boolean\"!=typeof i.shouldSaveInstrument||void 0!==i.shouldSetAsDefaultInstrument&&\"boolean\"!=typeof i.shouldSetAsDefaultInstrument?{shouldSaveInstrument:!1,shouldSetAsDefaultInstrument:!1}:e.paymentData;var i;return Object.assign(Object.assign({},e),{paymentData:{formattedPayload:{open_banking:{},vault_payment_instrument:t||!1,set_as_default_stored_instrument:n||!1}}})}_isWorldpayAccessRedirectResponse(e){var t,n;if(\"object\"!=typeof e||null===e)return!1;const i=e;if(!i.body)return!1;const o=i.body;return\"additional_action_required\"===o.status&&!!(null===(n=null===(t=o.additional_action_required)||void 0===t?void 0:t.data)||void 0===n?void 0:n.redirect_url)}}const I=a(e=>new g(e),[{id:\"open_banking\",gateway:\"worldpayaccess\"}]);export{I as createWorldpayAccessOpenBankingPaymentStrategy,w as createWorldpayAccessPaymentStrategy};\n//# sourceMappingURL=worldpayaccess.js.map"
  },
  {
    "path": "dist/esm/integrations/zip.js",
    "content": "import{createRequestSender as e}from\"@bigcommerce/request-sender\";var t;(function(e){e.Json=\"application/json\",e.JsonV1=\"application/vnd.bc.v1+json\"})(t||(t={}));const n=t,i={\"X-Checkout-SDK-Version\":\"1.916.1\"};var r;class s{constructor(e){this._requestSender=e}saveExternalId(e,t){return r=this,s=void 0,o=function*(){const r=`/api/storefront/payment/${e}/save-external-id`,s={headers:Object.assign({Accept:n.JsonV1,\"X-API-INTERNAL\":\"This API endpoint is for internal use only and may change in the future\"},i),body:{externalId:t,provider:e}};yield this._requestSender.post(r,s)},new((a=void 0)||(a=Promise))(function(e,t){function n(e){try{c(o.next(e))}catch(e){t(e)}}function i(e){try{c(o.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof a?r:new a(function(e){e(r)})).then(n,i)}c((o=o.apply(r,s||[])).next())});var r,s,a,o}}class a extends Error{constructor(e){var t;super(e||\"An unexpected error has occurred.\"),this.name=\"StandardError\",this.type=\"standard\",t=new.target.prototype,Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,new.target):this.stack=new Error(this.message).stack}}class o extends a{constructor(e){super(e||\"Invalid arguments have been provided.\"),this.name=\"InvalidArgumentError\",this.type=\"invalid_argument\"}}class c extends o{constructor(e){let t=\"Unable to submit payment for the order because the payload is invalid.\";e&&(t=`${t} Make sure the following fields are provided correctly: ${e.join(\", \")}.`),super(t),this.name=\"PaymentArgumentInvalidError\"}}!function(e){e[e.MissingBillingAddress=0]=\"MissingBillingAddress\",e[e.MissingCart=1]=\"MissingCart\",e[e.MissingCheckout=2]=\"MissingCheckout\",e[e.MissingConsignments=3]=\"MissingConsignments\",e[e.MissingCustomer=4]=\"MissingCustomer\",e[e.MissingCheckoutConfig=5]=\"MissingCheckoutConfig\",e[e.MissingOrder=6]=\"MissingOrder\",e[e.MissingOrderConfig=7]=\"MissingOrderConfig\",e[e.MissingOrderId=8]=\"MissingOrderId\",e[e.MissingPayment=9]=\"MissingPayment\",e[e.MissingPaymentId=10]=\"MissingPaymentId\",e[e.MissingPaymentInstrument=11]=\"MissingPaymentInstrument\",e[e.MissingPaymentMethod=12]=\"MissingPaymentMethod\",e[e.MissingPaymentRedirectUrl=13]=\"MissingPaymentRedirectUrl\",e[e.MissingPaymentStatus=14]=\"MissingPaymentStatus\",e[e.MissingPaymentToken=15]=\"MissingPaymentToken\",e[e.MissingShippingAddress=16]=\"MissingShippingAddress\"}(r||(r={}));class d extends a{constructor(e){super(function(e){switch(e){case r.MissingBillingAddress:return\"Unable to proceed because billing address data is unavailable.\";case r.MissingCart:return\"Unable to proceed because cart data is unavailable.\";case r.MissingConsignments:return\"Unable to proceed because consignments data is unavailable.\";case r.MissingCheckout:return\"Unable to proceed because checkout data is unavailable.\";case r.MissingCustomer:return\"Unable to proceed because customer data is unavailable.\";case r.MissingCheckoutConfig:case r.MissingOrderConfig:return\"Unable to proceed because configuration data is unavailable.\";case r.MissingOrder:return\"Unable to proceed because order data is unavailable.\";case r.MissingOrderId:return\"Unable to proceed because order ID is unavailable or not generated yet.\";case r.MissingPayment:return\"Unable to proceed because payment data is unavailable.\";case r.MissingPaymentToken:return\"Unable to proceed because the token required to submit a payment is missing.\";case r.MissingPaymentMethod:return\"Unable to proceed because payment method data is unavailable or not properly configured.\";case r.MissingShippingAddress:return\"Unable to proceed because shipping address data is unavailable.\";default:return\"Unable to proceed because the required data is unavailable.\"}}(e)),this.subtype=e,this.name=\"MissingDataError\",this.type=\"missing_data\"}}class u extends a{constructor(){super(\"The current order does not need to be finalized at this stage.\"),this.name=\"OrderFinalizationNotRequiredError\",this.type=\"order_finalization_not_required\"}}class l{constructor(e,t){this.paymentIntegrationService=e,this.storefrontPaymentRequestSender=t}initialize(){return Promise.resolve()}execute(e,t){return n=this,i=void 0,a=function*(){const{payment:n}=e,i=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]])}return n}(e,[\"payment\"]);if(!n)throw new c([\"payment\"]);const{methodId:s}=n,{getPaymentMethodOrThrow:a}=yield this.paymentIntegrationService.loadPaymentMethod(s,t),{clientToken:o,initializationData:u}=a(s),l=null==u?void 0:u.redirectUrl;if(!o||!l)throw new d(r.MissingPaymentMethod);const{id:g}=JSON.parse(o);if(!g)throw new d(r.MissingPaymentToken);const{isStoreCreditApplied:p}=this.paymentIntegrationService.getState().getCheckoutOrThrow();yield this.paymentIntegrationService.applyStoreCredit(p),yield this.paymentIntegrationService.initializePayment(s,{useStoreCredit:p}),yield this.paymentIntegrationService.submitOrder(i,t),yield this._prepareForReferredRegistration(s,g);try{yield this.paymentIntegrationService.submitPayment({methodId:s,paymentData:{nonce:g}})}catch(e){if((e=>\"object\"==typeof e&&null!==e&&\"body\"in e)(e)&&\"additional_action_required\"===e.body.status)return new Promise(()=>window.location.replace(l));throw e}},new((s=void 0)||(s=Promise))(function(e,t){function r(e){try{c(a.next(e))}catch(e){t(e)}}function o(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof s?n:new s(function(e){e(n)})).then(r,o)}c((a=a.apply(n,i||[])).next())});var n,i,s,a}finalize(){return Promise.reject(new u)}deinitialize(){return Promise.resolve()}_prepareForReferredRegistration(e,t){return this.storefrontPaymentRequestSender.saveExternalId(e,t)}}const g=(p=t=>{const{getHost:n}=t.getState(),i=e({host:n()}),r=new s(i);return new l(t,r)},y=[{id:\"zip\"},{id:\"quadpay\"}],Object.assign(p,{resolveIds:y}));var p,y;export{g as createZipPaymentStrategy};\n//# sourceMappingURL=zip.js.map"
  },
  {
    "path": "dist/esm/internal-mappers.js",
    "content": "import{filter as t,find as e,keyBy as n,noop as i,reduce as o,some as a}from\"lodash\";import{default as r}from\"shallowequal\";var s={};function c(t,e){let n;return function(t){return void 0!==t.id}(t)?n=t.id:e&&e.length&&(n=e[0].id),{id:n,firstName:t.firstName,lastName:t.lastName,company:t.company,addressLine1:t.address1,addressLine2:t.address2,city:t.city,province:t.stateOrProvince,provinceCode:t.stateOrProvinceCode,postCode:t.postalCode,country:t.country,countryCode:t.countryCode,phone:t.phone,customFields:t.customFields}}s.d=(t,e)=>{for(var n in e)s.o(e,n)&&!s.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);class u{constructor(t){this._decimalPlaces=t}toInteger(t){return Math.round(t*Math.pow(10,this._decimalPlaces))}}const d=[\"per_item_discount\",\"percentage_discount\",\"per_total_discount\",\"shipping_discount\",\"free_shipping\"];function p(t){return{code:t.code,discount:t.displayName,discountType:d.indexOf(t.couponType)}}function m(t){return{code:t.code,discountedAmount:t.used,remainingBalance:t.remaining,giftCertificate:{balance:t.balance,code:t.code,purchaseDate:t.purchaseDate}}}function l(t){const e=[];return(t||[]).forEach(t=>{(t.banners||[]).forEach(t=>{e.push({placeholders:[],discountType:null,message:\"\",messageHtml:t.text})})}),e}function g(t,e,n,i=\"id\"){const o=new u(n);return{id:t[i],imageUrl:t.imageUrl,amount:t.extendedListPrice,amountAfterDiscount:t.extendedSalePrice,discount:t.discountAmount,integerAmount:o.toInteger(t.extendedListPrice),integerAmountAfterDiscount:o.toInteger(t.extendedSalePrice),integerDiscount:o.toInteger(t.discountAmount),integerUnitPrice:o.toInteger(t.listPrice),integerUnitPriceAfterDiscount:o.toInteger(t.salePrice),downloadsPageUrl:t.downloadPageUrl,name:t.name,quantity:t.quantity,brand:t.brand,sku:t.sku,categoryNames:t.categoryNames,variantId:t.variantId,productId:t.productId,attributes:(t.options||[]).map(t=>({name:t.name,value:t.value})),addedByPromotion:t.addedByPromotion,type:e}}function h(t,e,n=\"id\"){return Object.keys(t).reduce((i,o)=>[...i,...t[o].map(t=>\"giftCertificates\"===o?function(t,e){const n=new u(e);return{id:t.id,imageUrl:\"\",name:t.name,amount:t.amount,amountAfterDiscount:t.amount,discount:0,integerAmount:n.toInteger(t.amount),integerAmountAfterDiscount:n.toInteger(t.amount),integerUnitPrice:n.toInteger(t.amount),integerUnitPriceAfterDiscount:n.toInteger(t.amount),integerDiscount:0,quantity:1,sender:t.sender,recipient:t.recipient,type:\"ItemGiftCertificateEntity\",attributes:[],variantId:null}}(t,e):g(t,function(t){switch(t){case\"physicalItems\":return\"ItemPhysicalEntity\";case\"digitalItems\":return\"ItemDigitalEntity\";case\"giftCertificates\":return\"ItemGiftCertificateEntity\";default:return\"\"}}(o),e,n))],[])}function f(t){const e=t.cart.currency.decimalPlaces,i=new u(e);return{id:t.cart.id,items:h(t.cart.lineItems,e),currency:t.cart.currency.code,coupon:{discountedAmount:o(t.cart.coupons,(t,e)=>t+e.discountedAmount,0),coupons:t.cart.coupons.map(p)},discount:{amount:t.cart.discountAmount,integerAmount:i.toInteger(t.cart.discountAmount)},discountNotifications:l(t.promotions),giftCertificate:{totalDiscountedAmount:o(t.giftCertificates,(t,e)=>t+e.used,0),appliedGiftCertificates:n(t.giftCertificates.map(m),\"code\")},shipping:{amount:t.shippingCostTotal,integerAmount:i.toInteger(t.shippingCostTotal),amountBeforeDiscount:t.shippingCostBeforeDiscount,integerAmountBeforeDiscount:i.toInteger(t.shippingCostBeforeDiscount),required:a(t.cart.lineItems.physicalItems,t=>t.isShippingRequired)},subtotal:{amount:t.subtotal,integerAmount:i.toInteger(t.subtotal)},storeCredit:{amount:t.customer?t.customer.storeCredit:0},taxSubtotal:{amount:t.taxTotal,integerAmount:i.toInteger(t.taxTotal)},taxes:t.taxes,taxTotal:{amount:t.taxTotal,integerAmount:i.toInteger(t.taxTotal)},handling:{amount:t.handlingCostTotal,integerAmount:i.toInteger(t.handlingCostTotal)},grandTotal:{amount:t.grandTotal,integerAmount:i.toInteger(t.grandTotal)}}}function y(t,e){const n=t.firstName||e.firstName||\"\",i=t.lastName||e.lastName||\"\";return{addresses:(t.addresses||[]).map(t=>c(t)),customerId:t.id,isGuest:t.isGuest,storeCredit:t.storeCredit,email:t.email||e.email||\"\",firstName:n,lastName:i,name:t.fullName||[n,i].join(\" \"),customerGroupName:t.customerGroup&&t.customerGroup.name}}function I(t,e={}){const n=t.currency.decimalPlaces,i=new u(n);return{id:t.orderId,items:h(t.lineItems,t.currency.decimalPlaces,\"productId\"),orderId:t.orderId,currency:t.currency.code,customerCanBeCreated:t.customerCanBeCreated,payment:b(t.payments,e.payment),subtotal:{amount:t.baseAmount,integerAmount:i.toInteger(t.baseAmount)},coupon:{discountedAmount:o(t.coupons,(t,e)=>t+e.discountedAmount,0),coupons:t.coupons.map(p)},discount:{amount:t.discountAmount,integerAmount:i.toInteger(t.discountAmount)},token:e.orderToken,callbackUrl:e.callbackUrl,discountNotifications:[],giftCertificate:C(t.payments),socialData:v(t),status:t.status,hasDigitalItems:t.hasDigitalItems,isDownloadable:t.isDownloadable,isComplete:t.isComplete,shipping:{amount:t.shippingCostTotal,integerAmount:i.toInteger(t.shippingCostTotal),amountBeforeDiscount:t.shippingCostBeforeDiscount,integerAmountBeforeDiscount:i.toInteger(t.shippingCostBeforeDiscount)},storeCredit:{amount:A(t.payments)},taxes:t.taxes,taxTotal:{amount:t.taxTotal,integerAmount:i.toInteger(t.taxTotal)},handling:{amount:t.handlingCostTotal,integerAmount:i.toInteger(t.handlingCostTotal)},grandTotal:{amount:t.orderAmount,integerAmount:t.orderAmountAsInteger}}}function A(t){const n=e(t,{providerId:\"storecredit\"});return n?n.amount:0}function C(e){const i=t(e,{providerId:\"giftcertificate\"});return{totalDiscountedAmount:o(i,(t,e)=>e.amount+t,0),appliedGiftCertificates:n(i.map(t=>({code:t.detail.code,discountedAmount:t.amount,remainingBalance:t.detail.remaining,giftCertificate:{balance:t.amount+t.detail.remaining,code:t.detail.code,purchaseDate:\"\"}})),\"code\")}}function b(t,n={}){const i=e(t,_);return i?{id:i.providerId,status:(o=i.detail.step,`PAYMENT_STATUS_${o}`),helpText:i.detail.instructions,returnUrl:n.returnUrl}:{};var o}function _(t){return\"giftcertificate\"!==t.providerId&&\"storecredit\"!==t.providerId}function v(t){const n={};return[...t.lineItems.physicalItems,...t.lineItems.digitalItems].forEach(t=>{var i;n[t.id]=(i=t,[\"fb\",\"tw\",\"gp\"].reduce((t,n)=>{const o=i.socialMedia&&e(i.socialMedia,t=>t.code===n);return o?(t[n]={name:i.name,description:i.name,image:i.imageUrl,url:o.link,shareText:o.text,sharingLink:o.link,channelName:o.channel,channelCode:o.code},t):t},{}))}),n}function x(t,e){const n=t.consignments&&t.consignments[0];return{orderComment:t.customerMessage,shippingOption:n&&n.selectedShippingOption?n.selectedShippingOption.id:void 0,billingAddress:t.billingAddress?c(t.billingAddress):{},shippingAddress:e&&c(e,t.consignments)}}function M(t,e){return{description:t.description,module:t.type,price:t.cost,id:t.id,selected:e,isRecommended:t.isRecommended,imageUrl:t.imageUrl,transitTime:t.transitTime}}function T(t){return t.reduce((t,e)=>{let n;return e.availableShippingOptions&&e.availableShippingOptions.length?n=e.availableShippingOptions:e.selectedShippingOption&&(n=[e.selectedShippingOption]),Object.assign(Object.assign({},t),{[e.id]:(n||[]).map(t=>{const n=e.selectedShippingOption&&e.selectedShippingOption.id;return M(t,t.id===n)})})},{})}function D(t){return Object.prototype.hasOwnProperty.call(t,\"cacheKey\")}class P{constructor(t){this._lastId=0,this._map={maps:[]},this._usedMaps=[],this._options=Object.assign({maxSize:0,isEqual:r,onExpire:i},t)}getKey(...t){const e=this._resolveMap(...t),{index:n,parentMap:i}=e;let{map:o}=e;return o&&o.cacheKey?o.usedCount++:o=this._generateMap(i,t.slice(n)),this._removeLeastUsedMap(o),o.cacheKey}getUsedCount(...t){const{map:e}=this._resolveMap(...t);return e?e.usedCount:0}_resolveMap(...t){let e=0,n=this._map;for(;n.maps.length;){let i=!1;for(let o=0;o<n.maps.length;o++){const a=n.maps[o];if(this._options.isEqual(a.value,t[e])){if(n.maps.unshift(...n.maps.splice(o,1)),(0===t.length||e===t.length-1)&&D(a))return{index:e,map:a,parentMap:n};i=!0,n=a,e++;break}}if(!i)break}return{index:e,parentMap:n}}_generateMap(t,e){let n,i=0,o=t;do{n={maps:[],parentMap:o,usedCount:1,value:e[i]},o.maps.unshift(n),o=n,i++}while(i<e.length);const a=n;return a.cacheKey=\"\"+ ++this._lastId,a}_removeLeastUsedMap(t){if(!this._options.maxSize)return;const e=this._usedMaps.indexOf(t);if(this._usedMaps.splice(-1===e?0:e,-1===e?0:1,t),this._usedMaps.length<=this._options.maxSize)return;const n=this._usedMaps.pop();n&&(this._removeMap(n),this._options.onExpire(n.cacheKey))}_removeMap(t){t.parentMap&&(t.parentMap.maps.splice(t.parentMap.maps.indexOf(t),1),function(t){return Object.prototype.hasOwnProperty.call(t,\"parentMap\")}(t.parentMap)||this._removeMap(t.parentMap))}}export{P as CacheKeyResolver,c as mapToInternalAddress,f as mapToInternalCart,p as mapToInternalCoupon,y as mapToInternalCustomer,m as mapToInternalGiftCertificate,g as mapToInternalLineItem,h as mapToInternalLineItems,I as mapToInternalOrder,x as mapToInternalQuote,M as mapToInternalShippingOption,T as mapToInternalShippingOptions};\n//# sourceMappingURL=internal-mappers.js.map"
  },
  {
    "path": "dist/hosted-form-v2-iframe-content.d.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\r\nimport { Response } from '@bigcommerce/request-sender';\r\n\r\ndeclare interface HostedFieldAttachEvent {\r\n    type: HostedFieldEventType.AttachRequested;\r\n    payload: {\r\n        accessibilityLabel?: string;\r\n        fontUrls?: string[];\r\n        placeholder?: string;\r\n        styles?: HostedFieldStylesMap;\r\n        origin?: string;\r\n        type: HostedFieldType;\r\n    };\r\n}\r\n\r\ndeclare interface HostedFieldEventMap {\r\n    [HostedFieldEventType.AttachRequested]: HostedFieldAttachEvent;\r\n    [HostedFieldEventType.SubmitManualOrderRequested]: HostedFieldSubmitManualOrderRequestEvent;\r\n    [HostedFieldEventType.ValidateRequested]: HostedFieldValidateRequestEvent;\r\n    [HostedFieldEventType.StoredCardRequested]: HostedFieldStoredCardRequestEvent;\r\n}\r\n\r\ndeclare enum HostedFieldEventType {\r\n    AttachRequested = \"HOSTED_FIELD:ATTACH_REQUESTED\",\r\n    SubmitRequested = \"HOSTED_FIELD:SUBMITTED_REQUESTED\",\r\n    SubmitManualOrderRequested = \"HOSTED_FIELD:SUBMIT_MANUAL_ORDER_REQUESTED\",\r\n    ValidateRequested = \"HOSTED_FIELD:VALIDATE_REQUESTED\",\r\n    StoredCardRequested = \"HOSTED_FIELD:STORED_CARD_REQUESTED\"\r\n}\r\n\r\ndeclare interface HostedFieldStoredCardRequestEvent {\r\n    type: HostedFieldEventType.StoredCardRequested;\r\n    payload: {\r\n        data: StoredCardHostedFormData;\r\n        fields: StoredCardHostedFormInstrumentFields;\r\n    };\r\n}\r\n\r\ndeclare type HostedFieldStyles = HostedInputStyles;\r\n\r\ndeclare interface HostedFieldStylesMap {\r\n    default?: HostedFieldStyles;\r\n    error?: HostedFieldStyles;\r\n    focus?: HostedFieldStyles;\r\n}\r\n\r\ndeclare interface HostedFieldSubmitManualOrderRequestEvent {\r\n    type: HostedFieldEventType.SubmitManualOrderRequested;\r\n    payload: {\r\n        data: HostedFormManualOrderData;\r\n    };\r\n}\r\n\r\ndeclare enum HostedFieldType {\r\n    CardCode = \"cardCode\",\r\n    CardExpiry = \"cardExpiry\",\r\n    CardName = \"cardName\",\r\n    CardNumber = \"cardNumber\",\r\n    Note = \"note\",\r\n    Hidden = \"hidden\"\r\n}\r\n\r\ndeclare interface HostedFieldValidateRequestEvent {\r\n    type: HostedFieldEventType.ValidateRequested;\r\n}\r\n\r\ndeclare interface HostedFormErrorData {\r\n    isEmpty: boolean;\r\n    isPotentiallyValid: boolean;\r\n    isValid: boolean;\r\n}\r\n\r\ndeclare type HostedFormErrorDataKeys = 'number' | 'expirationDate' | 'expirationMonth' | 'expirationYear' | 'cvv' | 'postalCode';\r\n\r\ndeclare type HostedFormErrorsData = Partial<Record<HostedFormErrorDataKeys, HostedFormErrorData>>;\r\n\r\ndeclare interface HostedFormManualOrderData {\r\n    paymentMethodId: string;\r\n    paymentSessionToken: string;\r\n}\r\n\r\ndeclare class HostedInput {\r\n    protected _type: HostedFieldType;\r\n    protected _form: HTMLFormElement;\r\n    protected _placeholder: string;\r\n    protected _accessibilityLabel: string;\r\n    protected _autocomplete: string;\r\n    protected _styles: HostedInputStylesMap;\r\n    protected _fontUrls: string[];\r\n    protected _eventListener: IframeEventListener<HostedFieldEventMap>;\r\n    protected _eventPoster: IframeEventPoster<HostedInputEvent>;\r\n    protected _inputAggregator: HostedInputAggregator;\r\n    protected _inputValidator: HostedInputValidator;\r\n    protected _manualOrderPaymentHandler: HostedInputManualOrderPaymentHandler;\r\n    protected _storedCardHandler: HostedInputStoredCardHandler;\r\n    protected _input: HTMLInputElement;\r\n    protected _previousValue?: string;\r\n    private _fontLinks?;\r\n    private _isTouched;\r\n    getType(): HostedFieldType;\r\n    getValue(): string;\r\n    setValue(value: string): void;\r\n    isTouched(): boolean;\r\n    attach(): void;\r\n    detach(): void;\r\n    protected _formatValue(value: string): void;\r\n    protected _notifyChange(_value: string): void;\r\n    private _configureInput;\r\n    private _applyStyles;\r\n    private _loadFonts;\r\n    private _unloadFonts;\r\n    private _validateForm;\r\n    private _processChange;\r\n    private _handleInput;\r\n    private _handleBlur;\r\n    private _handleFocus;\r\n    private _handleValidate;\r\n    private _handleSubmit;\r\n    private _forceFocusToInput;\r\n}\r\n\r\ndeclare class HostedInputAggregator {\r\n    private _parentWindow;\r\n    constructor(_parentWindow: Window);\r\n    getInputs(filter?: (field: HostedInput) => boolean): HostedInput[];\r\n    getInputValues(filter?: (field: HostedInput) => boolean): HostedInputValues;\r\n}\r\n\r\ndeclare interface HostedInputAttachErrorEvent {\r\n    type: HostedInputEventType.AttachFailed;\r\n    payload: {\r\n        error: HostedInputInitializeErrorData;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputAttachSuccessEvent {\r\n    type: HostedInputEventType.AttachSucceeded;\r\n}\r\n\r\ndeclare interface HostedInputBinChangeEvent {\r\n    type: HostedInputEventType.BinChanged;\r\n    payload: {\r\n        bin?: string;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputBlurEvent {\r\n    type: HostedInputEventType.Blurred;\r\n    payload: {\r\n        fieldType: HostedFieldType;\r\n        errors?: HostedFormErrorsData;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputCardTypeChangeEvent {\r\n    type: HostedInputEventType.CardTypeChanged;\r\n    payload: {\r\n        cardType?: string;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputChangeEvent {\r\n    type: HostedInputEventType.Changed;\r\n    payload: {\r\n        fieldType: HostedFieldType;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputEnterEvent {\r\n    type: HostedInputEventType.Entered;\r\n    payload: {\r\n        fieldType: HostedFieldType;\r\n    };\r\n}\r\n\r\ndeclare type HostedInputEvent = HostedInputAttachSuccessEvent | HostedInputAttachErrorEvent | HostedInputBinChangeEvent | HostedInputBlurEvent | HostedInputChangeEvent | HostedInputCardTypeChangeEvent | HostedInputEnterEvent | HostedInputFocusEvent | HostedInputSubmitManualOrderSuccessEvent | HostedInputSubmitManualOrderErrorEvent | HostedInputValidateEvent | HostedInputStoredCardSucceededEvent | HostedInputStoredCardErrorEvent;\r\n\r\ndeclare enum HostedInputEventType {\r\n    AttachSucceeded = \"HOSTED_INPUT:ATTACH_SUCCEEDED\",\r\n    AttachFailed = \"HOSTED_INPUT:ATTACH_FAILED\",\r\n    BinChanged = \"HOSTED_INPUT:BIN_CHANGED\",\r\n    Blurred = \"HOSTED_INPUT:BLURRED\",\r\n    Changed = \"HOSTED_INPUT:CHANGED\",\r\n    CardTypeChanged = \"HOSTED_INPUT:CARD_TYPE_CHANGED\",\r\n    Entered = \"HOSTED_INPUT:ENTERED\",\r\n    Focused = \"HOSTED_INPUT:FOCUSED\",\r\n    SubmitSucceeded = \"HOSTED_INPUT:SUBMIT_SUCCEEDED\",\r\n    SubmitFailed = \"HOSTED_INPUT:SUBMIT_FAILED\",\r\n    SubmitManualOrderSucceeded = \"HOSTED_INPUT:SUBMIT_MANUAL_ORDER_SUCCEEDED\",\r\n    SubmitManualOrderFailed = \"HOSTED_INPUT:SUBMIT_MANUAL_ORDER_FAILED\",\r\n    Validated = \"HOSTED_INPUT:VALIDATED\",\r\n    StoredCardSucceeded = \"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",\r\n    StoredCardFailed = \"HOSTED_INPUT:STORED_CARD_FAILED\"\r\n}\r\n\r\ndeclare interface HostedInputFocusEvent {\r\n    type: HostedInputEventType.Focused;\r\n    payload: {\r\n        fieldType: HostedFieldType;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputInitializeErrorData {\r\n    message: string;\r\n    redirectUrl: string;\r\n}\r\n\r\ndeclare class HostedInputManualOrderPaymentHandler {\r\n    private _inputAggregator;\r\n    private _inputValidator;\r\n    private _inputStorage;\r\n    private _eventPoster;\r\n    private _manualOrderPaymentRequestSender;\r\n    constructor(_inputAggregator: HostedInputAggregator, _inputValidator: HostedInputValidator, _inputStorage: HostedInputStorage, _eventPoster: IframeEventPoster<HostedInputEvent>, _manualOrderPaymentRequestSender: ManualOrderPaymentRequestSender);\r\n    handle: (event: HostedFieldSubmitManualOrderRequestEvent) => Promise<void>;\r\n    private _isPaymentErrorResponse;\r\n    private _isErrorResponse;\r\n}\r\n\r\ndeclare interface HostedInputOptions {\r\n    containerId: string;\r\n    nonce?: string;\r\n    origin: string;\r\n    parentOrigin: string;\r\n    paymentOrigin: string;\r\n}\r\n\r\ndeclare class HostedInputStorage {\r\n    private _nonce?;\r\n    setNonce(nonce: string): void;\r\n    getNonce(): string | undefined;\r\n}\r\n\r\ndeclare interface HostedInputStoredCardErrorEvent {\r\n    type: HostedInputEventType.StoredCardFailed;\r\n    payload?: {\r\n        errors?: string[];\r\n        error?: PaymentErrorData;\r\n        response?: Response<PaymentErrorResponseBody>;\r\n    };\r\n}\r\n\r\ndeclare class HostedInputStoredCardHandler {\r\n    private _inputAggregator;\r\n    private _inputValidator;\r\n    private _eventPoster;\r\n    private _storedCardRequestSender;\r\n    constructor(_inputAggregator: HostedInputAggregator, _inputValidator: HostedInputValidator, _eventPoster: IframeEventPoster<HostedInputEvent>, _storedCardRequestSender: StorefrontStoredCardRequestSender);\r\n    handle: (event: HostedFieldStoredCardRequestEvent) => Promise<void>;\r\n}\r\n\r\ndeclare interface HostedInputStoredCardSucceededEvent {\r\n    type: HostedInputEventType.StoredCardSucceeded;\r\n}\r\n\r\ndeclare type HostedInputStyles = Partial<Pick<CSSStyleDeclaration, 'color' | 'fontFamily' | 'fontSize' | 'fontWeight'>>;\r\n\r\ndeclare interface HostedInputStylesMap {\r\n    default?: HostedInputStyles;\r\n    error?: HostedInputStyles;\r\n    focus?: HostedInputStyles;\r\n}\r\n\r\ndeclare interface HostedInputSubmitManualOrderErrorEvent {\r\n    type: HostedInputEventType.SubmitManualOrderFailed;\r\n    payload: {\r\n        error: PaymentErrorData;\r\n        response?: Response<PaymentErrorResponseBody>;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputSubmitManualOrderSuccessEvent {\r\n    type: HostedInputEventType.SubmitManualOrderSucceeded;\r\n    payload: {\r\n        response: Response<unknown>;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputValidateErrorData {\r\n    fieldType: string;\r\n    message: string;\r\n    type: string;\r\n}\r\n\r\ndeclare interface HostedInputValidateErrorDataMap {\r\n    [HostedFieldType.CardCode]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.CardExpiry]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.CardName]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.CardNumber]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.Note]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.Hidden]?: HostedInputValidateErrorData[];\r\n}\r\n\r\ndeclare interface HostedInputValidateEvent {\r\n    type: HostedInputEventType.Validated;\r\n    payload: HostedInputValidateResults;\r\n}\r\n\r\ndeclare interface HostedInputValidateResults {\r\n    errors: HostedInputValidateErrorDataMap;\r\n    isValid: boolean;\r\n}\r\n\r\ndeclare class HostedInputValidator {\r\n    private readonly _completeSchema;\r\n    constructor();\r\n    validate(values: HostedInputValues): Promise<HostedInputValidateResults>;\r\n    private _configureCardValidator;\r\n    private _getCardCodeSchema;\r\n    private _getCardExpirySchema;\r\n    private _getCardNameSchema;\r\n    private _getNoteSchema;\r\n    private _getCardNumberSchema;\r\n    private _isValidationErrorType;\r\n}\r\n\r\ndeclare interface HostedInputValues {\r\n    [HostedFieldType.CardCode]?: string;\r\n    [HostedFieldType.CardExpiry]?: string;\r\n    [HostedFieldType.CardName]?: string;\r\n    [HostedFieldType.CardNumber]?: string;\r\n    [HostedFieldType.Note]?: string;\r\n}\r\n\r\ndeclare interface IframeEvent<TType = string, TPayload = any> {\r\n    type: TType;\r\n    payload?: TPayload;\r\n}\r\n\r\ndeclare class IframeEventListener<TEventMap extends IframeEventMap<keyof TEventMap>, TContext = undefined> {\r\n    private _isListening;\r\n    private _listeners;\r\n    private _sourceOrigins;\r\n    constructor(sourceOrigin: string);\r\n    listen(): void;\r\n    stopListen(): void;\r\n    addListener<TType extends keyof TEventMap>(type: TType, listener: (event: TEventMap[TType], context?: TContext) => void): void;\r\n    removeListener<TType extends keyof TEventMap>(type: TType, listener: (event: TEventMap[TType], context?: TContext) => void): void;\r\n    trigger<TType extends keyof TEventMap>(event: TEventMap[TType], context?: TContext): void;\r\n    private _handleMessage;\r\n}\r\n\r\ndeclare type IframeEventMap<TType extends string | number | symbol = string> = {\r\n    [key in TType]: IframeEvent<TType>;\r\n};\r\n\r\ndeclare interface IframeEventPostOptions<TSuccessEvent extends IframeEvent, TErrorEvent extends IframeEvent> {\r\n    errorType?: TErrorEvent['type'];\r\n    successType?: TSuccessEvent['type'];\r\n}\r\n\r\ndeclare class IframeEventPoster<TEvent, TContext = undefined> {\r\n    private _targetWindow?;\r\n    private _context?;\r\n    private _targetOrigin;\r\n    constructor(targetOrigin: string, _targetWindow?: Window | undefined, _context?: TContext | undefined);\r\n    post(event: TEvent): void;\r\n    post<TSuccessEvent extends IframeEvent = IframeEvent, TErrorEvent extends IframeEvent = IframeEvent>(event: TEvent, options: IframeEventPostOptions<TSuccessEvent, TErrorEvent>): Promise<TSuccessEvent>;\r\n    setTarget(window: Window): void;\r\n    setContext(context: TContext): void;\r\n}\r\n\r\ndeclare class ManualOrderPaymentRequestSender {\r\n    private _requestSender;\r\n    private _paymentOrigin;\r\n    constructor(_requestSender: RequestSender, _paymentOrigin: string);\r\n    submitPayment(requestInitializationData: HostedFormManualOrderData, instrumentFormData: HostedInputValues, nonce?: string): Promise<Response<unknown>>;\r\n}\r\n\r\ndeclare interface PaymentErrorData {\r\n    code: string;\r\n    message?: string;\r\n}\r\n\r\ndeclare interface PaymentErrorResponseBody {\r\n    status: string;\r\n    errors: PaymentErrorData[];\r\n}\r\n\r\ndeclare interface StoredCardHostedFormBillingAddress {\r\n    address1: string;\r\n    address2?: string;\r\n    city: string;\r\n    postalCode: string;\r\n    countryCode: string;\r\n    company?: string;\r\n    firstName: string;\r\n    lastName: string;\r\n    email: string;\r\n    phone?: string;\r\n    stateOrProvinceCode?: string;\r\n}\r\n\r\ndeclare interface StoredCardHostedFormData {\r\n    currencyCode: string;\r\n    paymentsUrl: string;\r\n    providerId: string;\r\n    shopperId: string;\r\n    storeHash: string;\r\n    vaultToken: string;\r\n}\r\n\r\ndeclare interface StoredCardHostedFormInstrumentFields extends StoredCardHostedFormBillingAddress {\r\n    defaultInstrument: boolean;\r\n}\r\n\r\ndeclare interface StoredCardHostedFormInstrumentForm {\r\n    billingAddress: StoredCardHostedFormBillingAddress;\r\n    instrument: StoredCardHostedFormPaymentInstrument;\r\n    defaultInstrument: boolean;\r\n}\r\n\r\ndeclare interface StoredCardHostedFormPaymentInstrument {\r\n    type: string;\r\n    cardholderName: string;\r\n    number: string;\r\n    expiryMonth: number;\r\n    expiryYear: number;\r\n    verificationValue: string;\r\n}\r\n\r\ndeclare class StorefrontStoredCardRequestSender {\r\n    private _requestSender;\r\n    constructor(_requestSender: RequestSender);\r\n    submitPaymentInstrument(requestInitializationData: StoredCardHostedFormData, storeInstrumentFormData: StoredCardHostedFormInstrumentForm): Promise<void>;\r\n}\r\n\r\nexport declare function initializeHostedInput(options: HostedInputOptions): Promise<HostedInput>;\r\n\r\nexport declare function notifyInitializeError(error: HostedInputInitializeErrorData): void;\r\n"
  },
  {
    "path": "dist/hosted-form-v2-iframe-host.d.ts",
    "content": "import { Checkout } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { Config } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { HostedCreditCardInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { HostedVaultedInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { Order } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { OrderMeta } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { OrderPaymentRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentAdditionalAction } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInstrumentMeta } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentMethodMeta } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { Response } from '@bigcommerce/request-sender';\r\n\r\ndeclare class DetachmentObserver {\r\n    private _mutationObserver;\r\n    constructor(_mutationObserver: MutationObserverFactory);\r\n    ensurePresence<T>(targets: Node[], promise: Promise<T>): Promise<T>;\r\n}\r\n\r\ndeclare interface HostedCardFieldOptions {\r\n    accessibilityLabel?: string;\r\n    containerId: string;\r\n    placeholder?: string;\r\n}\r\n\r\ndeclare interface HostedCardFieldOptionsMap {\r\n    [HostedFieldType.CardCode]?: HostedCardFieldOptions;\r\n    [HostedFieldType.CardExpiry]?: HostedCardFieldOptions;\r\n    [HostedFieldType.CardName]?: HostedCardFieldOptions;\r\n    [HostedFieldType.CardNumber]?: HostedCardFieldOptions;\r\n    [HostedFieldType.Note]?: HostedCardFieldOptions;\r\n    [HostedFieldType.Hidden]?: HostedCardFieldOptions;\r\n}\r\n\r\ndeclare class HostedField {\r\n    private _type;\r\n    private _containerId;\r\n    private _placeholder;\r\n    private _accessibilityLabel;\r\n    private _styles;\r\n    private _eventPoster;\r\n    private _eventListener;\r\n    private _detachmentObserver;\r\n    private _orderId?;\r\n    private _iframe;\r\n    constructor(_type: HostedFieldType, _containerId: string, _placeholder: string, _accessibilityLabel: string, _styles: HostedFieldStylesMap, _eventPoster: IframeEventPoster<HostedFieldEvent>, _eventListener: IframeEventListener<HostedInputEventMap>, _detachmentObserver: DetachmentObserver, _orderId?: number | undefined);\r\n    private getFrameSrc;\r\n    getType(): HostedFieldType;\r\n    attach(): Promise<void>;\r\n    detach(): void;\r\n    submitForm(fields: HostedFieldType[], data: HostedFormOrderData): Promise<HostedInputSubmitSuccessEvent>;\r\n    submitManualOrderForm(data: HostedFormManualOrderData): Promise<HostedInputSubmitManualOrderSuccessEvent>;\r\n    submitStoredCardForm(fields: StoredCardHostedFormInstrumentFields, data: StoredCardHostedFormData): Promise<HostedInputStoredCardSucceededEvent>;\r\n    validateForm(): Promise<void>;\r\n    private _getFontUrls;\r\n    private _isSubmitManualOrderErrorEvent;\r\n    private _isSubmitErrorEvent;\r\n}\r\n\r\ndeclare interface HostedFieldAttachEvent {\r\n    type: HostedFieldEventType.AttachRequested;\r\n    payload: {\r\n        accessibilityLabel?: string;\r\n        fontUrls?: string[];\r\n        placeholder?: string;\r\n        styles?: HostedFieldStylesMap;\r\n        origin?: string;\r\n        type: HostedFieldType;\r\n    };\r\n}\r\n\r\ndeclare type HostedFieldBlurEventData = HostedInputBlurEvent['payload'];\r\n\r\ndeclare type HostedFieldCardTypeChangeEventData = HostedInputCardTypeChangeEvent['payload'];\r\n\r\ndeclare type HostedFieldEnterEventData = HostedInputEnterEvent['payload'];\r\n\r\ndeclare type HostedFieldEvent = HostedFieldAttachEvent | HostedFieldSubmitRequestEvent | HostedFieldSubmitManualOrderRequestEvent | HostedFieldValidateRequestEvent | HostedFieldStoredCardRequestEvent;\r\n\r\ndeclare enum HostedFieldEventType {\r\n    AttachRequested = \"HOSTED_FIELD:ATTACH_REQUESTED\",\r\n    SubmitRequested = \"HOSTED_FIELD:SUBMITTED_REQUESTED\",\r\n    SubmitManualOrderRequested = \"HOSTED_FIELD:SUBMIT_MANUAL_ORDER_REQUESTED\",\r\n    ValidateRequested = \"HOSTED_FIELD:VALIDATE_REQUESTED\",\r\n    StoredCardRequested = \"HOSTED_FIELD:STORED_CARD_REQUESTED\"\r\n}\r\n\r\ndeclare type HostedFieldFocusEventData = HostedInputFocusEvent['payload'];\r\n\r\ndeclare interface HostedFieldStoredCardRequestEvent {\r\n    type: HostedFieldEventType.StoredCardRequested;\r\n    payload: {\r\n        data: StoredCardHostedFormData;\r\n        fields: StoredCardHostedFormInstrumentFields;\r\n    };\r\n}\r\n\r\ndeclare type HostedFieldStyles = HostedInputStyles;\r\n\r\ndeclare interface HostedFieldStylesMap {\r\n    default?: HostedFieldStyles;\r\n    error?: HostedFieldStyles;\r\n    focus?: HostedFieldStyles;\r\n}\r\n\r\ndeclare interface HostedFieldSubmitManualOrderRequestEvent {\r\n    type: HostedFieldEventType.SubmitManualOrderRequested;\r\n    payload: {\r\n        data: HostedFormManualOrderData;\r\n    };\r\n}\r\n\r\ndeclare interface HostedFieldSubmitRequestEvent {\r\n    type: HostedFieldEventType.SubmitRequested;\r\n    payload: {\r\n        data: HostedFormOrderData;\r\n        fields: HostedFieldType[];\r\n    };\r\n}\r\n\r\ndeclare enum HostedFieldType {\r\n    CardCode = \"cardCode\",\r\n    CardExpiry = \"cardExpiry\",\r\n    CardName = \"cardName\",\r\n    CardNumber = \"cardNumber\",\r\n    Note = \"note\",\r\n    Hidden = \"hidden\"\r\n}\r\n\r\ndeclare type HostedFieldValidateEventData = HostedInputValidateEvent['payload'];\r\n\r\ndeclare interface HostedFieldValidateRequestEvent {\r\n    type: HostedFieldEventType.ValidateRequested;\r\n}\r\n\r\ndeclare class HostedForm implements HostedFormInterface {\r\n    private _fields;\r\n    private _eventListener;\r\n    private _eventCallbacks;\r\n    private _bin?;\r\n    private _cardType?;\r\n    constructor(_fields: HostedField[], _eventListener: IframeEventListener<HostedInputEventMap>, _eventCallbacks: HostedFormEventCallbacks);\r\n    getBin(): string | undefined;\r\n    getCardType(): string | undefined;\r\n    attach(): Promise<void>;\r\n    detach(): void;\r\n    submitManualOrderPayment(payload: {\r\n        data: HostedFormManualOrderData;\r\n    }): Promise<HostedInputSubmitManualOrderSuccessEvent | void>;\r\n    submitStoredCard(payload: {\r\n        fields: StoredCardHostedFormInstrumentFields;\r\n        data: StoredCardHostedFormData;\r\n    }): Promise<HostedInputStoredCardSucceededEvent | void>;\r\n    submit(payload: OrderPaymentRequestBody, paymentIntegrationService: PaymentIntegrationService, payloadTransformer: HostedFormOrderDataTransformer, additionalActionData?: PaymentAdditionalAction): Promise<HostedInputSubmitSuccessEvent>;\r\n    validate(): Promise<void>;\r\n    private _getFirstField;\r\n    private _handleEnter;\r\n}\r\n\r\ndeclare interface HostedFormErrorData {\r\n    isEmpty: boolean;\r\n    isPotentiallyValid: boolean;\r\n    isValid: boolean;\r\n}\r\n\r\ndeclare type HostedFormErrorDataKeys = 'number' | 'expirationDate' | 'expirationMonth' | 'expirationYear' | 'cvv' | 'postalCode';\r\n\r\ndeclare type HostedFormErrorsData = Partial<Record<HostedFormErrorDataKeys, HostedFormErrorData>>;\r\n\r\ndeclare type HostedFormEventCallbacks = Pick<HostedFormOptions, 'onBlur' | 'onCardTypeChange' | 'onFocus' | 'onEnter' | 'onValidate'>;\r\n\r\ndeclare class HostedFormFactory {\r\n    create(host: string, options: HostedFormOptions): HostedForm;\r\n}\r\n\r\ndeclare interface HostedFormInterface {\r\n    attach(): Promise<void>;\r\n    detach(): void;\r\n    getBin(): string | undefined;\r\n    validate(): Promise<void>;\r\n    getCardType(): string | undefined;\r\n}\r\n\r\ndeclare interface HostedFormManualOrderData {\r\n    paymentMethodId: string;\r\n    paymentSessionToken: string;\r\n}\r\n\r\ndeclare interface HostedFormOptions {\r\n    fields: HostedCardFieldOptionsMap;\r\n    orderId?: number;\r\n    styles?: HostedFieldStylesMap;\r\n    onBlur?(data: HostedFieldBlurEventData): void;\r\n    onCardTypeChange?(data: HostedFieldCardTypeChangeEventData): void;\r\n    onEnter?(data: HostedFieldEnterEventData): void;\r\n    onFocus?(data: HostedFieldFocusEventData): void;\r\n    onValidate?(data: HostedFieldValidateEventData): void;\r\n}\r\n\r\ndeclare interface HostedFormOrderData {\r\n    additionalAction?: PaymentAdditionalAction;\r\n    authToken: string;\r\n    checkout?: Checkout;\r\n    config?: Config;\r\n    order?: Order;\r\n    orderMeta?: OrderMeta;\r\n    payment?: (HostedCreditCardInstrument | HostedVaultedInstrument) & PaymentInstrumentMeta;\r\n    paymentMethod?: PaymentMethod;\r\n    paymentMethodMeta?: PaymentMethodMeta;\r\n}\r\n\r\ndeclare class HostedFormOrderDataTransformer {\r\n    private paymentIntegrationService;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService);\r\n    transform(payload: OrderPaymentRequestBody, additionalAction?: PaymentAdditionalAction): HostedFormOrderData;\r\n}\r\n\r\ndeclare class HostedFormService {\r\n    protected _host: string;\r\n    protected _hostedFormFactory: HostedFormFactory;\r\n    protected _hostedForm?: HostedForm;\r\n    constructor(_host: string, _hostedFormFactory: HostedFormFactory);\r\n    initialize(options: HostedFormOptions): Promise<void>;\r\n    deinitialize(): void;\r\n    submitManualOrderPayment(data: HostedFormManualOrderData): Promise<HostedInputSubmitManualOrderSuccessEvent | void>;\r\n}\r\n\r\ndeclare interface HostedInputAttachErrorEvent {\r\n    type: HostedInputEventType.AttachFailed;\r\n    payload: {\r\n        error: HostedInputInitializeErrorData;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputAttachSuccessEvent {\r\n    type: HostedInputEventType.AttachSucceeded;\r\n}\r\n\r\ndeclare interface HostedInputBinChangeEvent {\r\n    type: HostedInputEventType.BinChanged;\r\n    payload: {\r\n        bin?: string;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputBlurEvent {\r\n    type: HostedInputEventType.Blurred;\r\n    payload: {\r\n        fieldType: HostedFieldType;\r\n        errors?: HostedFormErrorsData;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputCardTypeChangeEvent {\r\n    type: HostedInputEventType.CardTypeChanged;\r\n    payload: {\r\n        cardType?: string;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputChangeEvent {\r\n    type: HostedInputEventType.Changed;\r\n    payload: {\r\n        fieldType: HostedFieldType;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputEnterEvent {\r\n    type: HostedInputEventType.Entered;\r\n    payload: {\r\n        fieldType: HostedFieldType;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputEventMap {\r\n    [HostedInputEventType.AttachSucceeded]: HostedInputAttachSuccessEvent;\r\n    [HostedInputEventType.AttachFailed]: HostedInputAttachErrorEvent;\r\n    [HostedInputEventType.BinChanged]: HostedInputBinChangeEvent;\r\n    [HostedInputEventType.Blurred]: HostedInputBlurEvent;\r\n    [HostedInputEventType.Changed]: HostedInputChangeEvent;\r\n    [HostedInputEventType.CardTypeChanged]: HostedInputCardTypeChangeEvent;\r\n    [HostedInputEventType.Entered]: HostedInputEnterEvent;\r\n    [HostedInputEventType.Focused]: HostedInputFocusEvent;\r\n    [HostedInputEventType.SubmitManualOrderSucceeded]: HostedInputSubmitManualOrderSuccessEvent;\r\n    [HostedInputEventType.SubmitManualOrderFailed]: HostedInputSubmitManualOrderErrorEvent;\r\n    [HostedInputEventType.Validated]: HostedInputValidateEvent;\r\n    [HostedInputEventType.StoredCardFailed]: HostedInputStoredCardErrorEvent;\r\n    [HostedInputEventType.StoredCardSucceeded]: HostedInputStoredCardSucceededEvent;\r\n}\r\n\r\ndeclare enum HostedInputEventType {\r\n    AttachSucceeded = \"HOSTED_INPUT:ATTACH_SUCCEEDED\",\r\n    AttachFailed = \"HOSTED_INPUT:ATTACH_FAILED\",\r\n    BinChanged = \"HOSTED_INPUT:BIN_CHANGED\",\r\n    Blurred = \"HOSTED_INPUT:BLURRED\",\r\n    Changed = \"HOSTED_INPUT:CHANGED\",\r\n    CardTypeChanged = \"HOSTED_INPUT:CARD_TYPE_CHANGED\",\r\n    Entered = \"HOSTED_INPUT:ENTERED\",\r\n    Focused = \"HOSTED_INPUT:FOCUSED\",\r\n    SubmitSucceeded = \"HOSTED_INPUT:SUBMIT_SUCCEEDED\",\r\n    SubmitFailed = \"HOSTED_INPUT:SUBMIT_FAILED\",\r\n    SubmitManualOrderSucceeded = \"HOSTED_INPUT:SUBMIT_MANUAL_ORDER_SUCCEEDED\",\r\n    SubmitManualOrderFailed = \"HOSTED_INPUT:SUBMIT_MANUAL_ORDER_FAILED\",\r\n    Validated = \"HOSTED_INPUT:VALIDATED\",\r\n    StoredCardSucceeded = \"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",\r\n    StoredCardFailed = \"HOSTED_INPUT:STORED_CARD_FAILED\"\r\n}\r\n\r\ndeclare interface HostedInputFocusEvent {\r\n    type: HostedInputEventType.Focused;\r\n    payload: {\r\n        fieldType: HostedFieldType;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputInitializeErrorData {\r\n    message: string;\r\n    redirectUrl: string;\r\n}\r\n\r\ndeclare interface HostedInputStoredCardErrorEvent {\r\n    type: HostedInputEventType.StoredCardFailed;\r\n    payload?: {\r\n        errors?: string[];\r\n        error?: PaymentErrorData;\r\n        response?: Response<PaymentErrorResponseBody>;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputStoredCardSucceededEvent {\r\n    type: HostedInputEventType.StoredCardSucceeded;\r\n}\r\n\r\ndeclare type HostedInputStyles = Partial<Pick<CSSStyleDeclaration, 'color' | 'fontFamily' | 'fontSize' | 'fontWeight'>>;\r\n\r\ndeclare interface HostedInputSubmitManualOrderErrorEvent {\r\n    type: HostedInputEventType.SubmitManualOrderFailed;\r\n    payload: {\r\n        error: PaymentErrorData;\r\n        response?: Response<PaymentErrorResponseBody>;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputSubmitManualOrderSuccessEvent {\r\n    type: HostedInputEventType.SubmitManualOrderSucceeded;\r\n    payload: {\r\n        response: Response<unknown>;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputSubmitSuccessEvent {\r\n    type: HostedInputEventType.SubmitSucceeded;\r\n    payload: {\r\n        response: Response<unknown>;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputValidateErrorData {\r\n    fieldType: string;\r\n    message: string;\r\n    type: string;\r\n}\r\n\r\ndeclare interface HostedInputValidateErrorDataMap {\r\n    [HostedFieldType.CardCode]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.CardExpiry]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.CardName]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.CardNumber]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.Note]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.Hidden]?: HostedInputValidateErrorData[];\r\n}\r\n\r\ndeclare interface HostedInputValidateEvent {\r\n    type: HostedInputEventType.Validated;\r\n    payload: HostedInputValidateResults;\r\n}\r\n\r\ndeclare interface HostedInputValidateResults {\r\n    errors: HostedInputValidateErrorDataMap;\r\n    isValid: boolean;\r\n}\r\n\r\ndeclare interface IframeEvent<TType = string, TPayload = any> {\r\n    type: TType;\r\n    payload?: TPayload;\r\n}\r\n\r\ndeclare class IframeEventListener<TEventMap extends IframeEventMap<keyof TEventMap>, TContext = undefined> {\r\n    private _isListening;\r\n    private _listeners;\r\n    private _sourceOrigins;\r\n    constructor(sourceOrigin: string);\r\n    listen(): void;\r\n    stopListen(): void;\r\n    addListener<TType extends keyof TEventMap>(type: TType, listener: (event: TEventMap[TType], context?: TContext) => void): void;\r\n    removeListener<TType extends keyof TEventMap>(type: TType, listener: (event: TEventMap[TType], context?: TContext) => void): void;\r\n    trigger<TType extends keyof TEventMap>(event: TEventMap[TType], context?: TContext): void;\r\n    private _handleMessage;\r\n}\r\n\r\ndeclare type IframeEventMap<TType extends string | number | symbol = string> = {\r\n    [key in TType]: IframeEvent<TType>;\r\n};\r\n\r\ndeclare interface IframeEventPostOptions<TSuccessEvent extends IframeEvent, TErrorEvent extends IframeEvent> {\r\n    errorType?: TErrorEvent['type'];\r\n    successType?: TSuccessEvent['type'];\r\n}\r\n\r\ndeclare class IframeEventPoster<TEvent, TContext = undefined> {\r\n    private _targetWindow?;\r\n    private _context?;\r\n    private _targetOrigin;\r\n    constructor(targetOrigin: string, _targetWindow?: Window | undefined, _context?: TContext | undefined);\r\n    post(event: TEvent): void;\r\n    post<TSuccessEvent extends IframeEvent = IframeEvent, TErrorEvent extends IframeEvent = IframeEvent>(event: TEvent, options: IframeEventPostOptions<TSuccessEvent, TErrorEvent>): Promise<TSuccessEvent>;\r\n    setTarget(window: Window): void;\r\n    setContext(context: TContext): void;\r\n}\r\n\r\ndeclare interface MutationObeserverCreator {\r\n    prototype: MutationObserver;\r\n    new (callback: MutationCallback): MutationObserver;\r\n}\r\n\r\ndeclare class MutationObserverFactory {\r\n    private _window;\r\n    constructor(_window?: MutationObserverWindow);\r\n    create(callback: MutationCallback): MutationObserver;\r\n}\r\n\r\ndeclare interface MutationObserverWindow extends Window {\r\n    MutationObserver: MutationObeserverCreator;\r\n}\r\n\r\ndeclare interface PaymentErrorData {\r\n    code: string;\r\n    message?: string;\r\n}\r\n\r\ndeclare interface PaymentErrorResponseBody {\r\n    status: string;\r\n    errors: PaymentErrorData[];\r\n}\r\n\r\ndeclare interface StoredCardHostedFormBillingAddress {\r\n    address1: string;\r\n    address2?: string;\r\n    city: string;\r\n    postalCode: string;\r\n    countryCode: string;\r\n    company?: string;\r\n    firstName: string;\r\n    lastName: string;\r\n    email: string;\r\n    phone?: string;\r\n    stateOrProvinceCode?: string;\r\n}\r\n\r\ndeclare interface StoredCardHostedFormData {\r\n    currencyCode: string;\r\n    paymentsUrl: string;\r\n    providerId: string;\r\n    shopperId: string;\r\n    storeHash: string;\r\n    vaultToken: string;\r\n}\r\n\r\ndeclare interface StoredCardHostedFormInstrumentFields extends StoredCardHostedFormBillingAddress {\r\n    defaultInstrument: boolean;\r\n}\r\n\r\ndeclare class StoredCardHostedFormService {\r\n    protected _host: string;\r\n    protected _hostedFormFactory: HostedFormFactory;\r\n    protected _hostedForm?: HostedForm;\r\n    constructor(_host: string, _hostedFormFactory: HostedFormFactory);\r\n    submitStoredCard(fields: StoredCardHostedFormInstrumentFields, data: StoredCardHostedFormData): Promise<void>;\r\n    initialize(options: HostedFormOptions): Promise<void>;\r\n    deinitialize(): void;\r\n}\r\n\r\n/**\r\n * Creates an instance of `HostedFormService`.\r\n *\r\n *\r\n * @param host - Host url string parameter.\r\n * @returns An instance of `HostedFormService`.\r\n */\r\nexport declare function createHostedFormService(host: string): HostedFormService;\r\n\r\n/**\r\n * Creates an instance of `StoredCardHostedFormService`.\r\n *\r\n *\r\n * @param host - Host url string parameter.\r\n * @returns An instance of `StoredCardHostedFormService`.\r\n */\r\nexport declare function createStoredCardHostedFormService(host: string): StoredCardHostedFormService;\r\n"
  },
  {
    "path": "dist/types/checkout-button.d.ts",
    "content": "import { Address } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { AmazonPayV2ButtonConfig } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\r\nimport { AmazonPayV2ButtonParameters } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\r\nimport { BraintreeError } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BuyNowCartRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaypalStyleOptions as PaypalStyleOptions_2 } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { StandardError as StandardError_2 } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { Timeout } from '@bigcommerce/request-sender';\r\nimport { createTimeout } from '@bigcommerce/request-sender';\r\n\r\n/**\r\n * The required config to render the AmazonPayV2 button.\r\n */\r\ndeclare type AmazonPayV2ButtonInitializeOptions = AmazonPayV2ButtonParameters | WithBuyNowFeature;\r\n\r\n/**\r\n * A set of options that are required to initialize ApplePay in cart.\r\n *\r\n * When ApplePay is initialized, an ApplePay button will be inserted into the\r\n * DOM. When a customer clicks on it, it will trigger Apple sheet.\r\n */\r\ndeclare interface ApplePayButtonInitializeOptions {\r\n    /**\r\n     * This option indicates if product requires shipping\r\n     */\r\n    requiresShipping?: boolean;\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: {\r\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n    };\r\n    /**\r\n     * A callback that gets called when a payment is successfully completed.\r\n     */\r\n    onPaymentAuthorize(): void;\r\n}\r\n\r\ndeclare interface BaseCheckoutButtonInitializeOptions extends CheckoutButtonOptions {\r\n    [key: string]: unknown;\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted.\r\n     */\r\n    containerId: string;\r\n    /**\r\n     * The option that is required to load payment method configuration for provided currency code in Buy Now flow.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that are required to facilitate PayPal. They can be omitted\r\n     * unless you need to support Paypal.\r\n     */\r\n    paypal?: PaypalButtonInitializeOptions;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize BigCommercePaymentsButtonStrategy in cart or product details page.\r\n *\r\n * When BigCommercePayments is initialized, an BigCommercePayments PayPal button will be inserted into the\r\n * DOM. When a customer clicks on it, it will trigger PayPal flow.\r\n */\r\ndeclare interface BigCommercePaymentsButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsPayLaterButtonInitializeOptions {\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsVenmoButtonInitializeOptions {\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface BoltButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: BoltBuyNowInitializeOptions;\r\n    style?: BoltButtonStyleOptions;\r\n}\r\n\r\ndeclare interface BoltButtonStyleOptions {\r\n    shape?: StyleButtonShape_2;\r\n    size?: StyleButtonSize;\r\n}\r\n\r\ndeclare interface BoltBuyNowInitializeOptions {\r\n    storefrontApiToken?: string;\r\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\r\n}\r\n\r\ndeclare interface BraintreePaypalButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: {\r\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n    };\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: Pick<PaypalStyleOptions_2, 'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons' | 'height'>;\r\n    /**\r\n     * Address to be used for shipping.\r\n     * If not provided, it will use the first saved address from the active customer.\r\n     */\r\n    shippingAddress?: Address | null;\r\n    /**\r\n     * A callback that gets called if unable to authorize and tokenize payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onAuthorizeError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     * A callback that gets called if unable to submit payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onPaymentError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     * A callback that gets called on any error instead of submit payment or authorization errors.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when Braintree SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface BraintreePaypalCreditButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: {\r\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n    };\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: Pick<PaypalStyleOptions_2, 'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons' | 'height'>;\r\n    /**\r\n     * Address to be used for shipping.\r\n     * If not provided, it will use the first saved address from the active customer.\r\n     */\r\n    shippingAddress?: Address | null;\r\n    /**\r\n     * A callback that gets called if unable to authorize and tokenize payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onAuthorizeError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     * A callback that gets called if unable to submit payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onPaymentError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     * A callback that gets called on any error instead of submit payment or authorization errors.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when Braintree SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare class CheckoutButtonErrorSelector {\r\n    private _checkoutButton;\r\n    getInitializeButtonError(methodId?: CheckoutButtonMethodType): Error | undefined;\r\n    getDeinitializeButtonError(methodId?: CheckoutButtonMethodType): Error | undefined;\r\n}\r\n\r\ndeclare type CheckoutButtonInitializeOptions = BaseCheckoutButtonInitializeOptions & WithAmazonPayV2ButtonInitializeOptions & WithApplePayButtonInitializeOptions & WithBigCommercePaymentsButtonInitializeOptions & WithBigCommercePaymentsPayLaterButtonInitializeOptions & WithBigCommercePaymentsVenmoButtonInitializeOptions & WithBoltButtonInitializeOptions & WithBraintreePaypalButtonInitializeOptions & WithBraintreePaypalCreditButtonInitializeOptions & WithGooglePayButtonInitializeOptions & WithPayPalCommerceButtonInitializeOptions & WithPayPalCommerceCreditButtonInitializeOptions & WithPayPalCommerceVenmoButtonInitializeOptions;\r\n\r\ndeclare class CheckoutButtonInitializer {\r\n    private _store;\r\n    private _buttonStrategyActionCreator;\r\n    private _state;\r\n    /**\r\n     * Returns a snapshot of the current state.\r\n     *\r\n     * The method returns a new instance every time there is a change in the\r\n     * state. You can query the state by calling any of its getter methods.\r\n     *\r\n     * ```js\r\n     * const state = service.getState();\r\n     *\r\n     * console.log(state.errors.getInitializeButtonError());\r\n     * console.log(state.statuses.isInitializingButton());\r\n     * ```\r\n     *\r\n     * @returns The current customer's checkout state\r\n     */\r\n    getState(): CheckoutButtonSelectors;\r\n    /**\r\n     * Subscribes to any changes to the current state.\r\n     *\r\n     * The method registers a callback function and executes it every time there\r\n     * is a change in the current state.\r\n     *\r\n     * ```js\r\n     * service.subscribe(state => {\r\n     *     console.log(state.statuses.isInitializingButton());\r\n     * });\r\n     * ```\r\n     *\r\n     * The method can be configured to notify subscribers only regarding\r\n     * relevant changes, by providing a filter function.\r\n     *\r\n     * ```js\r\n     * const filter = state => state.errors.getInitializeButtonError();\r\n     *\r\n     * // Only trigger the subscriber when the cart changes.\r\n     * service.subscribe(state => {\r\n     *     console.log(state.errors.getInitializeButtonError())\r\n     * }, filter);\r\n     * ```\r\n     *\r\n     * @param subscriber - The function to subscribe to state changes.\r\n     * @param filters - One or more functions to filter out irrelevant state\r\n     * changes. If more than one function is provided, the subscriber will only\r\n     * be triggered if all conditions are met.\r\n     * @returns A function, if called, will unsubscribe the subscriber.\r\n     */\r\n    subscribe(subscriber: (state: CheckoutButtonSelectors) => void, ...filters: Array<(state: CheckoutButtonSelectors) => any>): () => void;\r\n    /**\r\n     * Initializes the checkout button of a payment method.\r\n     *\r\n     * When the checkout button is initialized, it will be inserted into the DOM,\r\n     * ready to be interacted with by the customer.\r\n     *\r\n     * ```js\r\n     * initializer.initializeButton({\r\n     *     methodId: 'braintreepaypal',\r\n     *     containerId: 'checkoutButton',\r\n     *     braintreepaypal: {\r\n     *     },\r\n     * });\r\n     * ```\r\n     *\r\n     * @param options - Options for initializing the checkout button.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    initializeButton(options: CheckoutButtonInitializeOptions): Promise<CheckoutButtonSelectors>;\r\n    /**\r\n     * De-initializes the checkout button by performing any necessary clean-ups.\r\n     *\r\n     * ```js\r\n     * await service.deinitializeButton({\r\n     *     methodId: 'braintreepaypal',\r\n     * });\r\n     * ```\r\n     *\r\n     * @param options - Options for deinitializing the checkout button.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    deinitializeButton(options: CheckoutButtonOptions): Promise<CheckoutButtonSelectors>;\r\n}\r\n\r\ndeclare interface CheckoutButtonInitializerOptions {\r\n    host?: string;\r\n    locale?: string;\r\n}\r\n\r\ndeclare enum CheckoutButtonMethodType {\r\n    APPLEPAY = \"applepay\",\r\n    AMAZON_PAY_V2 = \"amazonpay\",\r\n    BRAINTREE_PAYPAL = \"braintreepaypal\",\r\n    BRAINTREE_VENMO = \"braintreevenmo\",\r\n    BRAINTREE_PAYPAL_CREDIT = \"braintreepaypalcredit\",\r\n    GOOGLEPAY_ADYENV2 = \"googlepayadyenv2\",\r\n    GOOGLEPAY_ADYENV3 = \"googlepayadyenv3\",\r\n    GOOGLEPAY_AUTHORIZENET = \"googlepayauthorizenet\",\r\n    GOOGLEPAY_BNZ = \"googlepaybnz\",\r\n    GOOGLEPAY_BRAINTREE = \"googlepaybraintree\",\r\n    GOOGLEPAY_CHECKOUTCOM = \"googlepaycheckoutcom\",\r\n    GOOGLEPAY_CYBERSOURCEV2 = \"googlepaycybersourcev2\",\r\n    GOOGLEPAY_ORBITAL = \"googlepayorbital\",\r\n    GOOGLEPAY_STRIPE = \"googlepaystripe\",\r\n    GOOGLEPAY_STRIPEUPE = \"googlepaystripeupe\",\r\n    GOOGLEPAY_WORLDPAYACCESS = \"googlepayworldpayaccess\",\r\n    PAYPALEXPRESS = \"paypalexpress\"\r\n}\r\n\r\n/**\r\n * The set of options for configuring the checkout button.\r\n */\r\ndeclare interface CheckoutButtonOptions extends RequestOptions {\r\n    /**\r\n     * The identifier of the payment method.\r\n     */\r\n    methodId: CheckoutButtonMethodType;\r\n}\r\n\r\ndeclare interface CheckoutButtonSelectors {\r\n    errors: CheckoutButtonErrorSelector;\r\n    statuses: CheckoutButtonStatusSelector;\r\n}\r\n\r\ndeclare class CheckoutButtonStatusSelector {\r\n    private _checkoutButton;\r\n    isInitializingButton(methodId?: CheckoutButtonMethodType): boolean;\r\n    isDeinitializingButton(methodId?: CheckoutButtonMethodType): boolean;\r\n}\r\n\r\ndeclare interface CustomError extends Error {\r\n    message: string;\r\n    type: string;\r\n    subtype?: string;\r\n}\r\n\r\ndeclare type GooglePayButtonColor = 'default' | 'black' | 'white';\r\n\r\ndeclare interface GooglePayButtonInitializeOptions {\r\n    /**\r\n     * All Google Pay payment buttons exist in two styles: dark (default) and light.\r\n     * To provide contrast, use dark buttons on light backgrounds and light buttons on dark or colorful backgrounds.\r\n     */\r\n    buttonColor?: GooglePayButtonColor;\r\n    /**\r\n     * Variant buttons:\r\n     * book: The \"Book with Google Pay\" payment button.\r\n     * buy: The \"Buy with Google Pay\" payment button.\r\n     * checkout: The \"Checkout with Google Pay\" payment button.\r\n     * donate: The \"Donate with Google Pay\" payment button.\r\n     * order: The \"Order with Google Pay\" payment button.\r\n     * pay: The \"Pay with Google Pay\" payment button.\r\n     * plain: The Google Pay payment button without the additional text (default).\r\n     * subscribe: The \"Subscribe with Google Pay\" payment button.\r\n     *\r\n     * Note: \"long\" and \"short\" button types have been renamed to \"buy\" and \"plain\", but are still valid button types\r\n     * for backwards compatability.\r\n     */\r\n    buttonType?: GooglePayButtonType;\r\n}\r\n\r\ndeclare type GooglePayButtonType = 'book' | 'buy' | 'checkout' | 'donate' | 'order' | 'pay' | 'plain' | 'subscribe' | 'long' | 'short';\r\n\r\n/**\r\n * The recognized keys to pass the initialization options for Google Pay.\r\n */\r\ndeclare enum GooglePayKey {\r\n    ADYEN_V2 = \"googlepayadyenv2\",\r\n    ADYEN_V3 = \"googlepayadyenv3\",\r\n    AUTHORIZE_NET = \"googlepayauthorizenet\",\r\n    BNZ = \"googlepaybnz\",\r\n    BRAINTREE = \"googlepaybraintree\",\r\n    PAYPAL_COMMERCE = \"googlepaypaypalcommerce\",\r\n    BIGCOMMERCE_PAYMENTS = \"googlepay_bigcommerce_payments\",\r\n    CHECKOUT_COM = \"googlepaycheckoutcom\",\r\n    CYBERSOURCE_V2 = \"googlepaycybersourcev2\",\r\n    ORBITAL = \"googlepayorbital\",\r\n    STRIPE = \"googlepaystripe\",\r\n    STRIPE_UPE = \"googlepaystripeupe\",\r\n    STRIPE_OCS = \"googlepaystripeocs\",\r\n    WORLDPAY_ACCESS = \"googlepayworldpayaccess\",\r\n    TD_ONLINE_MART = \"googlepaytdonlinemart\"\r\n}\r\n\r\ndeclare interface PayPalButtonStyleOptions {\r\n    color?: StyleButtonColor;\r\n    shape?: StyleButtonShape;\r\n    height?: number;\r\n    label?: StyleButtonLabel;\r\n}\r\n\r\ndeclare interface PayPalButtonStyleOptions_2 {\r\n    color?: StyleButtonColor_2;\r\n    shape?: StyleButtonShape_3;\r\n    height?: number;\r\n    label?: StyleButtonLabel_2;\r\n}\r\n\r\n/**\r\n *\r\n * BigCommerce Payments BuyNow\r\n *\r\n */\r\ndeclare interface PayPalBuyNowInitializeOptions {\r\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\r\n}\r\n\r\n/**\r\n *\r\n * PayPal Commerce BuyNow\r\n *\r\n */\r\ndeclare interface PayPalBuyNowInitializeOptions_2 {\r\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize PayPalCommerce in cart or product details page.\r\n *\r\n * When PayPalCommerce is initialized, an PayPalCommerce button will be inserted into the\r\n * DOM. When a customer clicks on it, it will trigger Apple sheet.\r\n */\r\ndeclare interface PayPalCommerceButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions_2;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions_2;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface PayPalCommerceCreditButtonInitializeOptions {\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions_2;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions_2;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface PayPalCommerceVenmoButtonInitializeOptions {\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions_2;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions_2;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface PaypalButtonInitializeOptions {\r\n    /**\r\n     * The Client ID of the Paypal App\r\n     */\r\n    clientId: string;\r\n    /**\r\n     * Whether or not to show a credit button.\r\n     */\r\n    allowCredit?: boolean;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: Pick<PaypalStyleOptions, 'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons'>;\r\n    /**\r\n     * A callback that gets called if unable to authorize and tokenize payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onAuthorizeError?(error: StandardError): void;\r\n    /**\r\n     * A callback that gets called if unable to submit payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onPaymentError?(error: StandardError): void;\r\n}\r\n\r\ndeclare enum PaypalButtonStyleColorOption {\r\n    GOLD = \"gold\",\r\n    BLUE = \"blue\",\r\n    SIlVER = \"silver\",\r\n    BLACK = \"black\",\r\n    WHITE = \"white\"\r\n}\r\n\r\ndeclare enum PaypalButtonStyleLabelOption {\r\n    CHECKOUT = \"checkout\",\r\n    PAY = \"pay\",\r\n    BUYNOW = \"buynow\",\r\n    PAYPAL = \"paypal\",\r\n    CREDIT = \"credit\"\r\n}\r\n\r\ndeclare enum PaypalButtonStyleLayoutOption {\r\n    HORIZONTAL = \"horizontal\",\r\n    VERTICAL = \"vertical\"\r\n}\r\n\r\ndeclare enum PaypalButtonStyleShapeOption {\r\n    PILL = \"pill\",\r\n    RECT = \"rect\"\r\n}\r\n\r\ndeclare enum PaypalButtonStyleSizeOption {\r\n    SMALL = \"small\",\r\n    MEDIUM = \"medium\",\r\n    LARGE = \"large\",\r\n    RESPONSIVE = \"responsive\"\r\n}\r\n\r\ndeclare interface PaypalStyleOptions {\r\n    layout?: PaypalButtonStyleLayoutOption;\r\n    size?: PaypalButtonStyleSizeOption;\r\n    color?: PaypalButtonStyleColorOption;\r\n    label?: PaypalButtonStyleLabelOption;\r\n    shape?: PaypalButtonStyleShapeOption;\r\n    tagline?: boolean;\r\n    fundingicons?: boolean;\r\n    height?: number;\r\n}\r\n\r\n/**\r\n * A set of options for configuring an asynchronous request.\r\n */\r\ndeclare interface RequestOptions<TParams = object> {\r\n    /**\r\n     * Provide this option if you want to cancel or time out the request. If the\r\n     * timeout object completes before the request, the request will be\r\n     * cancelled.\r\n     */\r\n    timeout?: Timeout;\r\n    /**\r\n     * The parameters of the request, if required.\r\n     */\r\n    params?: TParams;\r\n    /**\r\n     * The version of the checkout, used for optimistic concurrency control.\r\n     */\r\n    version?: number;\r\n}\r\n\r\n/**\r\n * This error type should not be constructed directly. It is a base class for\r\n * all custom errors thrown in this library.\r\n */\r\ndeclare abstract class StandardError extends Error implements CustomError {\r\n    name: string;\r\n    type: string;\r\n    constructor(message?: string);\r\n}\r\n\r\ndeclare enum StyleButtonColor {\r\n    gold = \"gold\",\r\n    blue = \"blue\",\r\n    silver = \"silver\",\r\n    black = \"black\",\r\n    white = \"white\"\r\n}\r\n\r\ndeclare enum StyleButtonColor_2 {\r\n    gold = \"gold\",\r\n    blue = \"blue\",\r\n    silver = \"silver\",\r\n    black = \"black\",\r\n    white = \"white\"\r\n}\r\n\r\ndeclare enum StyleButtonLabel {\r\n    paypal = \"paypal\",\r\n    checkout = \"checkout\",\r\n    buynow = \"buynow\",\r\n    pay = \"pay\",\r\n    installment = \"installment\"\r\n}\r\n\r\ndeclare enum StyleButtonLabel_2 {\r\n    paypal = \"paypal\",\r\n    checkout = \"checkout\",\r\n    buynow = \"buynow\",\r\n    pay = \"pay\",\r\n    installment = \"installment\"\r\n}\r\n\r\ndeclare enum StyleButtonShape {\r\n    pill = \"pill\",\r\n    rect = \"rect\"\r\n}\r\n\r\ndeclare enum StyleButtonShape_2 {\r\n    Pill = \"pill\",\r\n    Rect = \"rect\"\r\n}\r\n\r\ndeclare enum StyleButtonShape_3 {\r\n    pill = \"pill\",\r\n    rect = \"rect\"\r\n}\r\n\r\ndeclare enum StyleButtonSize {\r\n    Small = \"small\",\r\n    Medium = \"medium\",\r\n    Large = \"large\"\r\n}\r\n\r\ndeclare interface WithAmazonPayV2ButtonInitializeOptions {\r\n    amazonpay?: AmazonPayV2ButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithApplePayButtonInitializeOptions {\r\n    applepay?: ApplePayButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsButtonInitializeOptions {\r\n    bigcommerce_payments?: BigCommercePaymentsButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsPayLaterButtonInitializeOptions {\r\n    bigcommerce_payments_paylater?: BigCommercePaymentsPayLaterButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsVenmoButtonInitializeOptions {\r\n    bigcommerce_payments_venmo?: BigCommercePaymentsVenmoButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBoltButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Bolt payment\r\n     * method. They can be omitted unless you need to support Bolt.\r\n     */\r\n    bolt?: BoltButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreePaypalButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Braintree PayPal wallet button on Product and Cart page.\r\n     */\r\n    braintreepaypal?: BraintreePaypalButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreePaypalCreditButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Braintree PayPal Credit wallet button on Product and Cart page.\r\n     */\r\n    braintreepaypalcredit?: BraintreePaypalCreditButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBuyNowFeature extends AmazonPayV2ButtonConfig {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: {\r\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n    };\r\n}\r\n\r\n/**\r\n * The options that are required to initialize the GooglePay payment method.\r\n * They can be omitted unless you need to support GooglePay.\r\n */\r\ndeclare type WithGooglePayButtonInitializeOptions = {\r\n    [k in GooglePayKey]?: GooglePayButtonInitializeOptions;\r\n};\r\n\r\ndeclare interface WithPayPalCommerceButtonInitializeOptions {\r\n    paypalcommerce?: PayPalCommerceButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceCreditButtonInitializeOptions {\r\n    paypalcommercecredit?: PayPalCommerceCreditButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceVenmoButtonInitializeOptions {\r\n    paypalcommercevenmo?: PayPalCommerceVenmoButtonInitializeOptions;\r\n}\r\n\r\n/**\r\n * Creates an instance of `CheckoutButtonInitializer`.\r\n *\r\n * @remarks\r\n * ```js\r\n * const initializer = createCheckoutButtonInitializer();\r\n *\r\n * initializer.initializeButton({\r\n *     methodId: 'braintreepaypal',\r\n *     braintreepaypal: {\r\n *         container: '#checkoutButton',\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * @alpha\r\n * Please note that `CheckoutButtonInitializer` is currently in an early stage\r\n * of development. Therefore the API is unstable and not ready for public\r\n * consumption.\r\n *\r\n * @param options - A set of construction options.\r\n * @returns an instance of `CheckoutButtonInitializer`.\r\n */\r\nexport declare function createCheckoutButtonInitializer(options?: CheckoutButtonInitializerOptions): CheckoutButtonInitializer;\r\n"
  },
  {
    "path": "dist/types/checkout-sdk.d.ts",
    "content": "/// <reference types=\"applepayjs\" />\r\n/// <reference types=\"grecaptcha\" />\r\n/// <reference types=\"lodash\" />\r\nimport { Address as Address_2 } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { AmazonPayV2ButtonConfig } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\r\nimport { AmazonPayV2ButtonParameters } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\r\nimport { BraintreeError } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeFastlaneStylesOption } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeFormOptions } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeThreeDSecureOptions } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BuyNowCartRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CardClassSelectors } from '@square/web-payments-sdk-types';\r\nimport { CardInstrument as CardInstrument_2 } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CartSource } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CreditCardPaymentInitializeOptions } from '@bigcommerce/checkout-sdk/credit-card-integration';\r\nimport { Currency as Currency_2 } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerAddress as CustomerAddress_2 } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { HostedForm as HostedFormInterface } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { HostedFormOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { HostedInstrument as HostedInstrument_2 } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { LoadingIndicatorStyles } from '@bigcommerce/checkout-sdk/ui';\r\nimport { Observable } from 'rxjs';\r\nimport { Omit as Omit_2 } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PayPalFastlaneStylesOption } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\r\nimport { PayPalFastlaneStylesOption as PayPalFastlaneStylesOption_2 } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\r\nimport { PayPalFastlaneStylesOption as PayPalFastlaneStylesOption_3 } from '@bigcommerce/checkout-sdk/paypal-utils';\r\nimport { PaymentErrorData } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentProviderCustomer as PaymentProviderCustomerType } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaypalStyleOptions as PaypalStyleOptions_2 } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { ReadableDataStore } from '@bigcommerce/data-store';\r\nimport { RequestOptions as RequestOptions_2 } from '@bigcommerce/request-sender';\r\nimport { Response } from '@bigcommerce/request-sender';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\nimport { StandardError as StandardError_2 } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { StripeAppearanceOptions } from '@bigcommerce/checkout-sdk/stripe-utils';\r\nimport { StripeAppearanceValues } from '@bigcommerce/checkout-sdk/stripe-utils';\r\nimport { StripeCustomFont } from '@bigcommerce/checkout-sdk/stripe-utils';\r\nimport { StripeElementUpdateOptions } from '@bigcommerce/checkout-sdk/stripe-utils';\r\nimport { StripeEventType } from '@bigcommerce/checkout-sdk/stripe-utils';\r\nimport { StripePaymentInitializeOptions } from '@bigcommerce/checkout-sdk/stripe-utils';\r\nimport { Timeout } from '@bigcommerce/request-sender';\r\nimport { WithAccountCreation } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { WithBankAccountInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { WithEcpInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { WithPayByBankInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { WithSepaInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { createTimeout } from '@bigcommerce/request-sender';\r\n\r\ndeclare type AccountInstrument = PayPalInstrument | BankInstrument | AchInstrument;\r\n\r\ndeclare interface AchInstrument extends BaseAccountInstrument {\r\n    issuer: string;\r\n    accountNumber: string;\r\n    type: 'bank';\r\n    method: 'ach' | 'ecp';\r\n}\r\n\r\ndeclare interface Address extends AddressRequestBody {\r\n    country: string;\r\n    shouldSaveAddress?: boolean;\r\n}\r\n\r\ndeclare interface AddressExtraFieldValue {\r\n    fieldId: string;\r\n    fieldValue: string | number;\r\n}\r\n\r\ndeclare type AddressKey = keyof Address;\r\n\r\ndeclare interface AddressRequestBody {\r\n    firstName: string;\r\n    lastName: string;\r\n    company: string;\r\n    address1: string;\r\n    address2: string;\r\n    city: string;\r\n    stateOrProvince: string;\r\n    stateOrProvinceCode: string;\r\n    countryCode: string;\r\n    postalCode: string;\r\n    phone: string;\r\n    customFields: Array<{\r\n        fieldId: string;\r\n        fieldValue: string | number | string[];\r\n    }>;\r\n    extraFields?: AddressExtraFieldValue[];\r\n}\r\n\r\ndeclare interface AdyenAdditionalActionCallbacks {\r\n    /**\r\n     * A callback that gets called before adyen component is loaded\r\n     */\r\n    onBeforeLoad?(shopperInteraction?: boolean): void;\r\n    /**\r\n     * A callback that gets called when adyen component is loaded\r\n     */\r\n    onLoad?(cancel?: () => void): void;\r\n    /**\r\n     * A callback that gets called when adyen component verification\r\n     * is completed\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     * A callback that gets called when an action, for example a QR code or 3D Secure 2 authentication screen, is shown to the shopper\r\n     */\r\n    onActionHandled?(): void;\r\n}\r\n\r\ndeclare interface AdyenAdditionalActionOptions extends AdyenAdditionalActionCallbacks {\r\n    /**\r\n     * The location to insert the additional action component.\r\n     */\r\n    containerId: string;\r\n    /**\r\n     * Specify Three3DS2Challenge Widget Size\r\n     *\r\n     * Values\r\n     * '01' = 250px x 400px\r\n     * '02' = 390px x 400px\r\n     * '03' = 500px x 600px\r\n     * '04' = 600px x 400px\r\n     * '05' = 100% x 100%\r\n     */\r\n    widgetSize?: string;\r\n}\r\n\r\ndeclare interface AdyenBaseCardComponentOptions {\r\n    /**\r\n     * Array of card brands that will be recognized by the component.\r\n     *\r\n     */\r\n    brands?: string[];\r\n    /**\r\n     * Set a style object to customize the input fields. See Styling Secured Fields\r\n     * for a list of supported properties.\r\n     */\r\n    styles?: StyleOptions;\r\n    showBrandsUnderCardNumber?: boolean;\r\n}\r\n\r\ndeclare enum AdyenCardFields {\r\n    CardNumber = \"encryptedCardNumber\",\r\n    SecurityCode = \"encryptedSecurityCode\",\r\n    ExpiryDate = \"encryptedExpiryDate\"\r\n}\r\n\r\ndeclare interface AdyenComponent {\r\n    componentRef?: {\r\n        showValidation(): void;\r\n    };\r\n    props?: {\r\n        type?: string;\r\n    };\r\n    state?: AdyenComponentState;\r\n    mount(containerId: string): HTMLElement;\r\n    unmount(): void;\r\n    submit(): void;\r\n}\r\n\r\ndeclare type AdyenComponentEventState = CardState | BoletoState | WechatState;\r\n\r\ndeclare interface AdyenComponentEvents {\r\n    /**\r\n     * Called when the shopper enters data in the card input fields.\r\n     * Here you have the option to override your main Adyen Checkout configuration.\r\n     */\r\n    onChange?(state: AdyenComponentEventState, component: AdyenComponent): void;\r\n    /**\r\n     * Called when the shopper selects the Pay button and payment details are valid.\r\n     */\r\n    onSubmit?(state: AdyenComponentEventState, component: AdyenComponent): void;\r\n    /**\r\n     * Called in case of an invalid card number, invalid expiry date, or\r\n     *  incomplete field. Called again when errors are cleared.\r\n     */\r\n    onError?(state: AdyenValidationState, component: AdyenComponent): void;\r\n    onFieldValid?(state: AdyenValidationState, component: AdyenComponent): void;\r\n}\r\n\r\ndeclare interface AdyenComponentState {\r\n    data?: CardStateData | IdealStateData | SepaStateData;\r\n    issuer?: string;\r\n    isValid?: boolean;\r\n    valid?: {\r\n        [key: string]: boolean;\r\n    };\r\n    errors?: CardStateErrors;\r\n}\r\n\r\ndeclare interface AdyenCreditCardComponentOptions extends AdyenBaseCardComponentOptions, AdyenComponentEvents {\r\n    /**\r\n     * Set an object containing the details array for type: scheme from\r\n     * the /paymentMethods response.\r\n     */\r\n    details?: InputDetail[];\r\n    /**\r\n     * Set to true to show the checkbox to save card details for the next payment.\r\n     */\r\n    enableStoreDetails?: boolean;\r\n    /**\r\n     * Set to true to request the name of the card holder.\r\n     */\r\n    hasHolderName?: boolean;\r\n    /**\r\n     * Set to true to require the card holder name.\r\n     */\r\n    holderNameRequired?: boolean;\r\n    /**\r\n     * Information to prefill fields.\r\n     */\r\n    data?: AdyenPlaceholderData;\r\n    /**\r\n     * Defaults to ['mc','visa','amex']. Configure supported card types to\r\n     * facilitate brand recognition used in the Secured Fields onBrand callback.\r\n     * See list of available card types. If a shopper enters a card type not\r\n     * specified in the GroupTypes configuration, the onBrand callback will not be invoked.\r\n     */\r\n    groupTypes?: string[];\r\n    /**\r\n     * Specify the sample values you want to appear for card detail input fields.\r\n     */\r\n    placeholders?: CreditCardPlaceHolder | SepaPlaceHolder;\r\n}\r\n\r\ndeclare interface AdyenIdealComponentOptions extends AdyenBaseCardComponentOptions, AdyenComponentEvents {\r\n    /**\r\n     * Optional. Set to **false** to remove the bank logos from the iDEAL form.\r\n     */\r\n    showImage?: boolean;\r\n}\r\n\r\ndeclare interface AdyenPaymentMethodState {\r\n    type: string;\r\n}\r\n\r\ndeclare interface AdyenPlaceholderData {\r\n    firstName?: string;\r\n    lastName?: string;\r\n    holderName?: string;\r\n    prefillCardHolderName?: boolean;\r\n    billingAddress?: {\r\n        street: string;\r\n        houseNumberOrName: string;\r\n        postalCode: string;\r\n        city: string;\r\n        stateOrProvince: string;\r\n        country: string;\r\n    };\r\n}\r\n\r\ndeclare interface AdyenThreeDS2Options extends AdyenAdditionalActionCallbacks {\r\n    /**\r\n     * Specify Three3DS2Challenge Widget Size\r\n     *\r\n     * Values\r\n     * '01' = 250px x 400px\r\n     * '02' = 390px x 400px\r\n     * '03' = 500px x 600px\r\n     * '04' = 600px x 400px\r\n     * '05' = 100% x 100%\r\n     */\r\n    widgetSize?: string;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the AdyenV2 payment method.\r\n *\r\n * Once AdyenV2 payment is initialized, credit card form fields, provided by the\r\n * payment provider as IFrames, will be inserted into the current page. These\r\n * options provide a location and styling for each of the form fields.\r\n *\r\n * ```html\r\n * <!-- This is where the credit card component will be inserted -->\r\n * <div id=\"container\"></div>\r\n *\r\n * <!-- This is where the secondary components (i.e.: 3DS) will be inserted -->\r\n * <div id=\"additional-action-container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'adyenv2',\r\n *     adyenv2: {\r\n *         containerId: 'container',\r\n *         additionalActionOptions: {\r\n *             containerId: 'additional-action-container',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Additional options can be passed in to customize the components and register\r\n * event callbacks.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'adyenv2',\r\n *     adyenv2: {\r\n *         containerId: 'container',\r\n *         additionalActionOptions: {\r\n *             containerId: 'additional-action-container',\r\n *             onBeforeLoad(shopperInteraction) {\r\n *                 console.log(shopperInteraction);\r\n *             },\r\n *             onLoad(cancel) {\r\n *                 console.log(cancel);\r\n *             },\r\n *             onComplete() {\r\n *                 console.log('Completed');\r\n *             },\r\n *         },\r\n *         options: {\r\n *             scheme: {\r\n *                 hasHolderName: true,\r\n *             },\r\n *             bcmc: {\r\n *                 hasHolderName: true,\r\n *             },\r\n *             ideal: {\r\n *                 showImage: true,\r\n *             },\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface AdyenV2PaymentInitializeOptions {\r\n    /**\r\n     * The location to insert the Adyen component.\r\n     */\r\n    containerId: string;\r\n    /**\r\n     * @deprecated The location to insert the Adyen 3DS V2 component.\r\n     * Use additionalActionOptions instead as this property will be removed in the future\r\n     */\r\n    threeDS2ContainerId: string;\r\n    /**\r\n     * The location to insert the Adyen custom card component\r\n     */\r\n    cardVerificationContainerId?: string;\r\n    /**\r\n     * True if the Adyen component has some Vaulted instrument\r\n     */\r\n    hasVaultedInstruments?: boolean;\r\n    /**\r\n     * @deprecated\r\n     * Use additionalActionOptions instead as this property will be removed in the future\r\n     */\r\n    threeDS2Options?: AdyenThreeDS2Options;\r\n    /**\r\n     * A set of options that are required to initialize additional payment actions.\r\n     */\r\n    additionalActionOptions: AdyenAdditionalActionOptions;\r\n    /**\r\n     * Optional. Overwriting the default options\r\n     */\r\n    options?: Omit_2<AdyenCreditCardComponentOptions, 'onChange'> | AdyenIdealComponentOptions;\r\n    shouldShowNumberField?: boolean;\r\n    validateCardFields(validateState: AdyenValidationState): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Adyenv3 payment method.\r\n *\r\n * Once Adyenv3 payment is initialized, credit card form fields, provided by the\r\n * payment provider as IFrames, will be inserted into the current page. These\r\n * options provide a location and styling for each of the form fields.\r\n *\r\n * ```html\r\n * <!-- This is where the credit card component will be inserted -->\r\n * <div id=\"container\"></div>\r\n *\r\n * <!-- This is where the secondary components (i.e.: 3DS) will be inserted -->\r\n * <div id=\"additional-action-container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'adyenv3',\r\n *     adyenv3: {\r\n *         containerId: 'container',\r\n *         additionalActionOptions: {\r\n *             containerId: 'additional-action-container',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Additional options can be passed in to customize the components and register\r\n * event callbacks.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'adyenv3',\r\n *     adyenv3: {\r\n *         containerId: 'container',\r\n *         additionalActionOptions: {\r\n *             containerId: 'additional-action-container',\r\n *             onBeforeLoad(shopperInteraction) {\r\n *                 console.log(shopperInteraction);\r\n *             },\r\n *             onLoad(cancel) {\r\n *                 console.log(cancel);\r\n *             },\r\n *             onComplete() {\r\n *                 console.log('Completed');\r\n *             },\r\n *             onActionHandled() {\r\n *                 console.log('ActionHandled');\r\n *             },\r\n *         },\r\n *         options: {\r\n *             scheme: {\r\n *                 hasHolderName: true,\r\n *             },\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface AdyenV3PaymentInitializeOptions {\r\n    /**\r\n     * The location to insert the Adyen component.\r\n     */\r\n    containerId: string;\r\n    /**\r\n     * The location to insert the Adyen custom card component\r\n     */\r\n    cardVerificationContainerId?: string;\r\n    /**\r\n     * True if the Adyen component has some Vaulted instrument\r\n     */\r\n    hasVaultedInstruments?: boolean;\r\n    /**\r\n     * A set of options that are required to initialize additional payment actions.\r\n     */\r\n    additionalActionOptions: AdyenAdditionalActionOptions;\r\n    /**\r\n     * Optional. Overwriting the default options\r\n     */\r\n    options?: Omit_2<AdyenCreditCardComponentOptions, 'onChange'>;\r\n    shouldShowNumberField?: boolean;\r\n    validateCardFields(validateState: AdyenValidationState): void;\r\n}\r\n\r\ndeclare interface AdyenValidationState {\r\n    valid: boolean;\r\n    fieldType?: AdyenCardFields;\r\n    endDigits?: string;\r\n    encryptedFieldName?: string;\r\n    i18n?: string;\r\n    error?: string;\r\n    errorKey?: string;\r\n}\r\n\r\ndeclare interface AmazonPayRemoteCheckout {\r\n    referenceId?: string;\r\n    billing?: {\r\n        address?: InternalAddress | false;\r\n    };\r\n    shipping?: {\r\n        address?: InternalAddress | false;\r\n    };\r\n    settings?: {\r\n        billing: string;\r\n        billingMessage: string;\r\n        customer: string;\r\n        payment: string;\r\n        provider: string;\r\n        shipping: string;\r\n    };\r\n}\r\n\r\n/**\r\n * The required config to render the AmazonPayV2 button.\r\n */\r\ndeclare type AmazonPayV2ButtonInitializeOptions = AmazonPayV2ButtonParameters | WithBuyNowFeature;\r\n\r\n/**\r\n * A set of options that are required to initialize the customer step of\r\n * checkout in order to support AmazonPayV2.\r\n *\r\n * When AmazonPayV2 is initialized, a sign-in button will be inserted into the\r\n * DOM. When the customer clicks on it, they will be redirected to Amazon to\r\n * sign in.\r\n *\r\n * ```html\r\n * <!-- This is where the Amazon Pay button will be inserted -->\r\n * <div id=\"signInButton\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializeCustomer({\r\n *     methodId: 'amazonpay',\r\n *     amazonpay: {\r\n *         container: 'signInButton',\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface AmazonPayV2CustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the sign-in button should insert into.\r\n     */\r\n    container: string;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the payment step of\r\n * checkout in order to support AmazonPayV2.\r\n *\r\n * When AmazonPayV2 is initialized, a change payment button will be bound.\r\n * When the customer clicks on it, they will be redirected to Amazon to\r\n * select a different payment method.\r\n *\r\n * ```html\r\n * <!-- This is the change payment button that will be bound -->\r\n * <button id=\"edit-button\">Change card</button>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'amazonpay',\r\n *     amazonpay: {\r\n *         editButtonId: 'edit-button',\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface AmazonPayV2PaymentInitializeOptions {\r\n    /**\r\n     * This editButtonId is used to set an event listener, provide an element ID\r\n     * if you want users to be able to select a different payment method by\r\n     * clicking on a button. It should be an HTML element.\r\n     */\r\n    editButtonId?: string;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the shipping step of\r\n * checkout in order to support AmazonPayV2.\r\n *\r\n * When AmazonPayV2 is initialized, a change shipping button will be bound.\r\n * When the customer clicks on it, they will be redirected to Amazon to\r\n * select a different shipping address.\r\n *\r\n * ```html\r\n * <!-- This is the change shipping button that will be bound -->\r\n * <button id=\"edit-button\">Change shipping</button>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializeShipping({\r\n *     methodId: 'amazonpay',\r\n *     amazonpay: {\r\n *         editAddressButtonId: 'edit-button',\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface AmazonPayV2ShippingInitializeOptions {\r\n    /**\r\n     * This editAddressButtonId is used to set an event listener, provide an\r\n     * element ID if you want users to be able to select a different shipping\r\n     * address by clicking on a button. It should be an HTML element.\r\n     */\r\n    editAddressButtonId?: string;\r\n}\r\n\r\ndeclare type AnalyticStepType = 'customer' | 'shipping' | 'billing' | 'payment';\r\n\r\n/**\r\n * A set of options that are required to initialize ApplePay in cart.\r\n *\r\n * When ApplePay is initialized, an ApplePay button will be inserted into the\r\n * DOM. When a customer clicks on it, it will trigger Apple sheet.\r\n */\r\ndeclare interface ApplePayButtonInitializeOptions {\r\n    /**\r\n     * This option indicates if product requires shipping\r\n     */\r\n    requiresShipping?: boolean;\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: {\r\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n    };\r\n    /**\r\n     * A callback that gets called when a payment is successfully completed.\r\n     */\r\n    onPaymentAuthorize(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the customer step of\r\n * checkout in order to support ApplePay.\r\n *\r\n * When ApplePay is initialized, a sign-in button will be inserted into the\r\n * DOM. When the customer clicks on it, it will trigger apple sheet\r\n */\r\ndeclare interface ApplePayCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the sign-in button should insert into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * Shipping label to be passed to apple sheet.\r\n     */\r\n    shippingLabel?: string;\r\n    /**\r\n     * Sub total label to be passed to apple sheet.\r\n     */\r\n    subtotalLabel?: string;\r\n    /**\r\n     * A callback that gets called when a payment is successfully completed.\r\n     */\r\n    onPaymentAuthorize(): void;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when wallet button clicked\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Applepay payment method with:\r\n *\r\n * 1) ApplePay:\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'applepay',\r\n *     applepay: {\r\n *         shippingLabel: 'Shipping',\r\n *         subtotalLabel: 'Sub total',\r\n *     }\r\n * });\r\n * ```\r\n */\r\ndeclare interface ApplePayPaymentInitializeOptions {\r\n    /**\r\n     * Shipping label to be passed to apple sheet.\r\n     */\r\n    shippingLabel?: string;\r\n    /**\r\n     * Store credit label to be passed to apple sheet.\r\n     */\r\n    storeCreditLabel?: string;\r\n    /**\r\n     * Sub total label to be passed to apple sheet.\r\n     */\r\n    subtotalLabel?: string;\r\n}\r\n\r\ndeclare interface B2BApiSettings {\r\n    clientId: string;\r\n    baseUrl: string;\r\n}\r\n\r\ndeclare interface B2BTokenSelector {\r\n    getToken(): string | undefined;\r\n    getLoadError(): Error | undefined;\r\n    isLoading(): boolean;\r\n}\r\n\r\ndeclare interface BankInstrument extends BaseAccountInstrument {\r\n    accountNumber: string;\r\n    issuer: string;\r\n    iban: string;\r\n    method: string;\r\n    type: 'bank';\r\n}\r\n\r\ndeclare interface Banner {\r\n    type: string;\r\n    text: string;\r\n}\r\n\r\ndeclare interface BaseAccountInstrument extends BaseInstrument {\r\n    method: string;\r\n    type: 'account' | 'bank';\r\n}\r\n\r\ndeclare interface BaseCheckoutButtonInitializeOptions extends CheckoutButtonOptions {\r\n    [key: string]: unknown;\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted.\r\n     */\r\n    containerId: string;\r\n    /**\r\n     * The option that is required to load payment method configuration for provided currency code in Buy Now flow.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that are required to facilitate PayPal. They can be omitted\r\n     * unless you need to support Paypal.\r\n     */\r\n    paypal?: PaypalButtonInitializeOptions;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the customer step of the\r\n * current checkout flow.\r\n *\r\n * Some payment methods have specific requirements for setting the customer\r\n * details for checkout. For example, Amazon Pay requires the customer to sign in\r\n * using their sign-in button. As a result, you may need to provide additional\r\n * information in order to initialize the customer step of checkout.\r\n */\r\ndeclare interface BaseCustomerInitializeOptions extends CustomerRequestOptions {\r\n    [key: string]: unknown;\r\n    /**\r\n     * @alpha\r\n     */\r\n    integrations?: Array<CustomerStrategyFactory<CustomerStrategy>>;\r\n}\r\n\r\ndeclare interface BaseElementOptions {\r\n    /**\r\n     * Customize the appearance of an element using CSS properties passed in a [Style](https://stripe.com/docs/js/appendix/style) object,\r\n     * which consists of CSS properties nested under objects for each variant.\r\n     */\r\n    style?: StripeElementStyle;\r\n    /**\r\n     * Set custom class names on the container DOM element when the Stripe element is in a particular state.\r\n     */\r\n    classes?: StripeElementClasses;\r\n    /**\r\n     * Applies a disabled state to the Element such that user input is not accepted. Default is false.\r\n     */\r\n    disabled?: boolean;\r\n}\r\n\r\ndeclare interface BaseIndividualElementOptions extends BaseElementOptions {\r\n    containerId: string;\r\n}\r\n\r\ndeclare interface BaseInstrument {\r\n    bigpayToken: string;\r\n    defaultInstrument: boolean;\r\n    provider: string;\r\n    trustedShippingAddress: boolean;\r\n    method: string;\r\n    type: string;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the payment step of the\r\n * current checkout flow.\r\n */\r\ndeclare interface BasePaymentInitializeOptions extends PaymentRequestOptions {\r\n    /**\r\n     * @alpha\r\n     */\r\n    integrations?: Array<PaymentStrategyFactory<PaymentStrategy>>;\r\n    /**\r\n     * @alpha\r\n     * Please note that this option is currently in an early stage of\r\n     * development. Therefore the API is unstable and not ready for public\r\n     * consumption.\r\n     */\r\n    creditCard?: CreditCardPaymentInitializeOptions;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments payment\r\n * method for presenting its PayPal button.\r\n *\r\n *\r\n * Also, BCP (also known as BigCommercePayments) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the APM button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * <!-- This is where the alternative payment methods fields will be inserted.  -->\r\n * <div id=\"apm-fields-container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     gatewayId: 'bigcommerce_payments_apms',\r\n *     methodId: 'sepa',\r\n *     bigcommerce_payments_apms: {\r\n *         container: '#container',\r\n *         apmFieldsContainer: '#apm-fields-container',\r\n *         apmFieldsStyles: {\r\n *             base: {\r\n *                 backgroundColor: 'transparent',\r\n *             },\r\n *             input: {\r\n *                 backgroundColor: 'white',\r\n *                 fontSize: '1rem',\r\n *                 color: '#333',\r\n *                 borderColor: '#d9d9d9',\r\n *                 borderRadius: '4px',\r\n *                 borderWidth: '1px',\r\n *                 padding: '1rem',\r\n *             },\r\n *             invalid: {\r\n *                 color: '#ed6a6a',\r\n *             },\r\n *             active: {\r\n *                 color: '#4496f6',\r\n *             },\r\n *         },\r\n *         clientId: 'YOUR_CLIENT_ID',\r\n * // Callback for submitting payment form that gets called when a buyer approves payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'bigcommerce_payments_apms', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * The CSS selector of a container where the alternative payment methods fields widget should be inserted into.\r\n     * It's necessary to specify this parameter when using Alternative Payment Methods.\r\n     * Without it alternative payment methods will not work.\r\n     */\r\n    apmFieldsContainer?: string;\r\n    /**\r\n     * Object with styles to customize alternative payment methods fields.\r\n     */\r\n    apmFieldsStyles?: BigCommercePaymentsFieldsStyleOptions;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error | unknown): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm(): void;\r\n    /**\r\n     * A callback that gets called\r\n     * when Smart Payment Button is initialized.\r\n     */\r\n    onInitButton(actions: InitCallbackActions): Promise<void>;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize BigCommercePaymentsButtonStrategy in cart or product details page.\r\n *\r\n * When BigCommercePayments is initialized, an BigCommercePayments PayPal button will be inserted into the\r\n * DOM. When a customer clicks on it, it will trigger PayPal flow.\r\n */\r\ndeclare interface BigCommercePaymentsButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments Credit Card payment\r\n * method for presenting its credit card form.\r\n *\r\n * ```html\r\n * <!-- These containers are where the hosted (iframed) credit card fields will be inserted -->\r\n * <div id=\"card-number\"></div>\r\n * <div id=\"card-name\"></div>\r\n * <div id=\"card-expiry\"></div>\r\n * <div id=\"card-code\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bigcommerce_payments_creditcards',\r\n *     bigcommerce_payments_creditcards: {\r\n *         form: {\r\n *             fields: {\r\n *                 cardNumber: { containerId: 'card-number' },\r\n *                 cardName: { containerId: 'card-name' },\r\n *                 cardExpiry: { containerId: 'card-expiry' },\r\n *                 cardCode: { containerId: 'card-code' },\r\n *             },\r\n *         },\r\n *         onCreditCardFieldsRenderingError: (error) => handleError(error),\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Additional options can be passed in to customize the fields and register\r\n * event callbacks.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bigcommerce_payments_creditcards',\r\n *     bigcommerce_payments_creditcards: {\r\n *         form: {\r\n *             fields: {\r\n *                 cardNumber: { containerId: 'card-number', placeholder: 'Number of card' },\r\n *                 cardName: { containerId: 'card-name', placeholder: 'Name of card' },\r\n *                 cardExpiry: { containerId: 'card-expiry', placeholder: 'Expiry of card' },\r\n *                 cardCode: { containerId: 'card-code', placeholder: 'Code of card' },\r\n *             },\r\n *             styles: {\r\n *                 default: {\r\n *                     color: '#000',\r\n *                 },\r\n *                 error: {\r\n *                     color: '#f00',\r\n *                 },\r\n *                 focus: {\r\n *                     color: '#0f0',\r\n *                 },\r\n *             },\r\n *             onBlur({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onFocus({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onEnter({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onCardTypeChange({ cardType }) {\r\n *                 console.log(cardType);\r\n *             },\r\n *             onValidate({ errors, isValid }) {\r\n *                 console.log(errors);\r\n *                 console.log(isValid);\r\n *             },\r\n *         },\r\n *         onCreditCardFieldsRenderingError: (error) => handleError(error),\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsCreditCardsPaymentInitializeOptions {\r\n    /**\r\n     * The form is data for Credit Card Form\r\n     */\r\n    form: HostedFormOptions;\r\n    /**\r\n     * The callback that gets called when there is an issue with rendering credit card fields\r\n     */\r\n    onCreditCardFieldsRenderingError?: (error: unknown) => void;\r\n    /**\r\n     * The callback that gets called when PayPal SDK load complete\r\n     */\r\n    onLoadComplete?: () => void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the customer step of\r\n * checkout to support BigCommercePayments.\r\n */\r\ndeclare interface BigCommercePaymentsCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     * A callback that gets called when paypal button clicked.\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are optional to initialize the BigCommercePayments Fastlane customer strategy\r\n * that are responsible for BigCommercePayments Fastlane components styling and initialization\r\n *\r\n * ```js\r\n * service.initializeCustomer({\r\n *     methodId: 'bigcommerce_payments_fastlane',\r\n *     bigcommerce_payments_fastlane: {\r\n *         styles: {\r\n *              root: {\r\n *                  backgroundColorPrimary: 'transparent',\r\n *                  errorColor: '#C40B0B',\r\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n *              },\r\n *              input: {\r\n *                  borderRadius: '0.25rem',\r\n *                  borderColor: '#9E9E9E',\r\n *                  focusBorderColor: '#4496F6',\r\n *              },\r\n *              toggle: {\r\n *                  colorPrimary: '#0F005E',\r\n *                  colorSecondary: '#ffffff',\r\n *              },\r\n *              text: {\r\n *                  body: {\r\n *                      color: '#222222',\r\n *                      fontSize: '1rem',\r\n *                  },\r\n *                  caption: {\r\n *                      color: '#515151',\r\n *                      fontSize: '0.875rem',\r\n *                  },\r\n *              },\r\n *              branding: 'light',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsFastlaneCustomerInitializeOptions {\r\n    /**\r\n     * Is a stylisation options for customizing BigCommercePayments Fastlane components\r\n     *\r\n     * Note: the styles for all BigCommercePayments Fastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter which strategy was initialised first\r\n     */\r\n    styles?: PayPalFastlaneStylesOption;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments Fastlane payment\r\n * method for presenting on the page.\r\n *\r\n *\r\n * Also, BigCommercePayments requires specific options to initialize BigCommercePayments Fastlane Card Component\r\n * ```html\r\n * <!-- This is where the BigCommercePayments Fastlane Card Component will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bigcommerce_payments_fastlane',\r\n *     bigcommerce_payments_fastlane: {\r\n *         onInit: (renderPayPalCardComponent) => renderPayPalCardComponent('#container-id'),\r\n *         onChange: (showPayPalCardSelector) => showPayPalCardSelector(),\r\n *         styles: {\r\n *              root: {\r\n *                  backgroundColorPrimary: 'transparent',\r\n *                  errorColor: '#C40B0B',\r\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n *              },\r\n *              input: {\r\n *                  borderRadius: '0.25rem',\r\n *                  borderColor: '#9E9E9E',\r\n *                  focusBorderColor: '#4496F6',\r\n *              },\r\n *              toggle: {\r\n *                  colorPrimary: '#0F005E',\r\n *                  colorSecondary: '#ffffff',\r\n *              },\r\n *              text: {\r\n *                  body: {\r\n *                      color: '#222222',\r\n *                      fontSize: '1rem',\r\n *                  },\r\n *                  caption: {\r\n *                      color: '#515151',\r\n *                      fontSize: '0.875rem',\r\n *                  },\r\n *              },\r\n *              branding: 'light',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsFastlanePaymentInitializeOptions {\r\n    /**\r\n     * Is a callback that takes the CSS selector of a container\r\n     * where the BigCommercePayments Fastlane form should be inserted into.\r\n     */\r\n    onInit?: (renderPayPalCardComponent: (container: string) => void) => void;\r\n    /**\r\n     * Is a callback that shows fastlane stored instruments\r\n     * when get triggered\r\n     */\r\n    onChange?: (showPayPalCardSelector: () => Promise<CardInstrument_2 | undefined>) => void;\r\n    /**\r\n     * Callback that handles errors\r\n     */\r\n    onError?: (error: unknown) => void;\r\n    /**\r\n     * Is a stylisation options for customizing BigCommercePayments Fastlane components\r\n     *\r\n     * Note: the styles for all BigCommercePaymentsFastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter what strategy was initialised first\r\n     */\r\n    styles?: PayPalFastlaneStylesOption;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the shipping step of\r\n * checkout in order to support BigCommercePayments  Fastlane.\r\n */\r\ndeclare interface BigCommercePaymentsFastlaneShippingInitializeOptions {\r\n    /**\r\n     * Is a stylisation options for customizing BigCommercePayments Fastlane components\r\n     *\r\n     * Note: the styles for all BigCommercePayments Fastlane strategies should be the same,\r\n     * because they will be provided to fastlane library only for the first strategy initialization\r\n     * no matter what strategy was initialised first\r\n     */\r\n    styles?: PayPalFastlaneStylesOption;\r\n    /**\r\n     * Is a callback that shows BigCommercePayments Fastlane popup with customer addresses\r\n     * when get triggered\r\n     */\r\n    onPayPalFastlaneAddressChange?: (showPayPalFastlaneAddressSelector: () => Promise<CustomerAddress_2 | undefined>) => void;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsFieldsStyleOptions {\r\n    variables?: {\r\n        fontFamily?: string;\r\n        fontSizeBase?: string;\r\n        fontSizeSm?: string;\r\n        fontSizeM?: string;\r\n        fontSizeLg?: string;\r\n        textColor?: string;\r\n        colorTextPlaceholder?: string;\r\n        colorBackground?: string;\r\n        colorInfo?: string;\r\n        colorDanger?: string;\r\n        borderRadius?: string;\r\n        borderColor?: string;\r\n        borderWidth?: string;\r\n        borderFocusColor?: string;\r\n        spacingUnit?: string;\r\n    };\r\n    rules?: {\r\n        [key: string]: any;\r\n    };\r\n}\r\n\r\ndeclare interface BigCommercePaymentsPayLaterButtonInitializeOptions {\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsPayLaterCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     * A callback that gets called when paypal button clicked.\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments PayLater payment\r\n * method for presenting its BigCommercePayments PayLater button.\r\n *\r\n *\r\n * Also, BigCommercePayments requires specific options to initialize the BigCommercePayments Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the BigCommercePayments PayLater button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bigcommerce_payments_paylater',\r\n *     bigcommerce_payments_paylater: {\r\n *         container: '#container',\r\n * // Callback for submitting payment form that gets called when a buyer approves BigCommercePayments payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'bigcommerce_payments_paylater', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular BigCommercePayments method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsPayLaterPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container?: string;\r\n    /**\r\n     * The location to insert the Pay Later Messages.\r\n     */\r\n    bannerContainerId?: string;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate?(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved BigCommercePayments account.\r\n     */\r\n    submitForm?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments payment\r\n * method for presenting its PayPal button.\r\n *\r\n * Please note that the minimum version of checkout-sdk is 1.100\r\n *\r\n * Also, BigCommercePayments requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the BigCommercePayments PayPal button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bigcommerce_payments',\r\n *     bigcommerce_payments: {\r\n *         container: '#container',\r\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'bigcommerce_payments', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container?: string;\r\n    /**\r\n     * The location to insert the Pay Later Messages.\r\n     */\r\n    bannerContainerId?: string;\r\n    /**\r\n     * If there is no need to initialize the Smart Payment Button, simply pass false as the option value.\r\n     * The default value is true\r\n     */\r\n    shouldRenderPayPalButtonOnInitialization?: boolean;\r\n    /**\r\n     * A callback for getting form fields values.\r\n     */\r\n    getFieldsValues?(): HostedInstrument_2;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: unknown): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when strategy is in the process of initialization before rendering Smart Payment Button.\r\n     *\r\n     * @param callback - A function, that calls the method to render the Smart Payment Button.\r\n     */\r\n    onInit?(callback: () => void): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate?(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approves PayPal payment.\r\n     */\r\n    submitForm?(): void;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsRatePayPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * The CSS selector of a container where the legal text should be inserted into.\r\n     */\r\n    legalTextContainer: string;\r\n    /**\r\n     * The CSS selector of a container where loading indicator should be rendered\r\n     */\r\n    loadingContainerId: string;\r\n    /**\r\n     * A callback that gets form values\r\n     */\r\n    getFieldsValues?(): {\r\n        ratepayBirthDate: BirthDate;\r\n        ratepayPhoneNumber: string;\r\n        ratepayPhoneCountryCode: string;\r\n    };\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: unknown): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments payment\r\n * method making payment with Klarna.\r\n *\r\n *\r\n * Also, BCP (also known as BigCommercePayments) requires specific options to initialize the PayPal Klarna flow\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     gatewayId: 'bigcommerce_payments_apms',\r\n *     methodId: 'klarna',\r\n *     bigcommerce_payments_apms: {\r\n * // Callback for handling error that occurs when a buyer approves payment\r\n *         onError: (error) => {\r\n *         // Example function\r\n *             this.handleError(\r\n *                {\r\n *                   payment: { methodId: 'bigcommerce_payments_apms', }\r\n *               }\r\n *            );\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions {\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error | unknown): void;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsVenmoButtonInitializeOptions {\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsVenmoCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when Venmo button clicked.\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments Venmo payment\r\n * method for presenting its Venmo button.\r\n *\r\n *\r\n * Also, BigCommercePayments requires specific options to initialize the Venmo Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the Venmo button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bigcommerce_payments_venmo',\r\n *     bigcommerce_payments_venmo: {\r\n *         container: '#container',\r\n * // Callback for submitting payment form that gets called when a buyer approves payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'bigcommerce_payments_venmo', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsVenmoPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm(): void;\r\n}\r\n\r\ndeclare interface BillingAddress extends Address {\r\n    id: string;\r\n    email?: string;\r\n}\r\n\r\ndeclare interface BillingAddressRequestBody extends AddressRequestBody {\r\n    email?: string;\r\n}\r\n\r\ndeclare interface BillingAddressSelector {\r\n    getBillingAddress(): BillingAddress | undefined;\r\n    getBillingAddressOrThrow(): BillingAddress;\r\n    getUpdateError(): Error | undefined;\r\n    getContinueAsGuestError(): Error | undefined;\r\n    getLoadError(): Error | undefined;\r\n    isUpdating(): boolean;\r\n    isContinuingAsGuest(): boolean;\r\n    isLoading(): boolean;\r\n}\r\n\r\ndeclare interface BirthDate {\r\n    getFullYear(): number;\r\n    getDate(): number;\r\n    getMonth(): number;\r\n}\r\n\r\ndeclare interface BirthDate_2 {\r\n    getFullYear(): number;\r\n    getDate(): number;\r\n    getMonth(): number;\r\n}\r\n\r\ndeclare interface BlockElementStyles extends InlineElementStyles {\r\n    backgroundColor?: string;\r\n    boxShadow?: string;\r\n    borderColor?: string;\r\n    borderWidth?: string;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BlueSnap V2 payment\r\n * method.\r\n *\r\n * The payment step is done through a web page via an iframe provided by the\r\n * strategy.\r\n *\r\n * ```html\r\n * <!-- This is where the BlueSnap iframe will be inserted. It can be an in-page container or a modal -->\r\n * <div id=\"container\"></div>\r\n *\r\n * <!-- This is a cancellation button -->\r\n * <button type=\"button\" id=\"cancel-button\"></button>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bluesnapDirect',\r\n *     bluesnapDirect: {\r\n *         onLoad: (iframe) => {\r\n *             document.getElementById('container')\r\n *                 .appendChild(iframe);\r\n *\r\n *             document.getElementById('cancel-button')\r\n *                 .addEventListener('click', () => {\r\n *                     document.getElementById('container').innerHTML = '';\r\n *                 });\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BlueSnapDirectAPMInitializeOptions {\r\n    /**\r\n     * A set of CSS properties to apply to the iframe.\r\n     */\r\n    style?: BlueSnapDirectStyleProps;\r\n    /**\r\n     * A callback that gets called when the iframe is ready to be added to the\r\n     * current page. It is responsible for determining where the iframe should\r\n     * be inserted in the DOM.\r\n     *\r\n     * @param iframe - The iframe element containing the payment web page\r\n     * provided by the strategy.\r\n     * @param cancel - A function, when called, will cancel the payment\r\n     * process and remove the iframe.\r\n     */\r\n    onLoad(iframe: HTMLIFrameElement, cancel: () => void): void;\r\n}\r\n\r\ndeclare interface BlueSnapDirectStyleProps {\r\n    border?: string;\r\n    height?: string;\r\n    width?: string;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BlueSnap V2 payment\r\n * method.\r\n *\r\n * The payment step is done through a web page via an iframe provided by the\r\n * strategy.\r\n *\r\n * ```html\r\n * <!-- This is where the BlueSnap iframe will be inserted. It can be an in-page container or a modal -->\r\n * <div id=\"container\"></div>\r\n *\r\n * <!-- This is a cancellation button -->\r\n * <button type=\"button\" id=\"cancel-button\"></button>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bluesnapv2',\r\n *     bluesnapv2: {\r\n *         onLoad: (iframe) => {\r\n *             document.getElementById('container')\r\n *                 .appendChild(iframe);\r\n *\r\n *             document.getElementById('cancel-button')\r\n *                 .addEventListener('click', () => {\r\n *                     document.getElementById('container').innerHTML = '';\r\n *                 });\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BlueSnapV2PaymentInitializeOptions {\r\n    /**\r\n     * A set of CSS properties to apply to the iframe.\r\n     */\r\n    style?: BlueSnapV2StyleProps;\r\n    /**\r\n     * A callback that gets called when the iframe is ready to be added to the\r\n     * current page. It is responsible for determining where the iframe should\r\n     * be inserted in the DOM.\r\n     *\r\n     * @param iframe - The iframe element containing the payment web page\r\n     * provided by the strategy.\r\n     * @param cancel - A function, when called, will cancel the payment\r\n     * process and remove the iframe.\r\n     */\r\n    onLoad(iframe: HTMLIFrameElement, cancel: () => void): void;\r\n}\r\n\r\ndeclare interface BlueSnapV2StyleProps {\r\n    border?: string;\r\n    height?: string;\r\n    width?: string;\r\n}\r\n\r\ndeclare interface BodlEventsPayload {\r\n    [key: string]: unknown;\r\n}\r\n\r\ndeclare interface BodlService {\r\n    checkoutBegin(): void;\r\n    orderPurchased(): void;\r\n    stepCompleted(step?: string): void;\r\n    customerEmailEntry(email?: string): void;\r\n    customerSuggestionInit(payload?: BodlEventsPayload): void;\r\n    customerSuggestionExecute(): void;\r\n    customerPaymentMethodExecuted(payload?: BodlEventsPayload): void;\r\n    showShippingMethods(): void;\r\n    selectedPaymentMethod(methodName?: string): void;\r\n    clickPayButton(payload?: BodlEventsPayload): void;\r\n    paymentRejected(): void;\r\n    paymentComplete(): void;\r\n    exitCheckout(): void;\r\n}\r\n\r\ndeclare interface BodyStyles {\r\n    backgroundColor?: string;\r\n}\r\n\r\ndeclare interface BoletoDataPaymentMethodState {\r\n    paymentMethod: AdyenPaymentMethodState;\r\n    shopperName?: {\r\n        firstName?: string;\r\n        lastName?: string;\r\n    };\r\n    socialSecurityNumber?: string;\r\n}\r\n\r\ndeclare interface BoletoState {\r\n    data: BoletoDataPaymentMethodState;\r\n}\r\n\r\ndeclare interface BoltButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: BoltBuyNowInitializeOptions;\r\n    style?: BoltButtonStyleOptions;\r\n}\r\n\r\ndeclare interface BoltButtonStyleOptions {\r\n    shape?: StyleButtonShape_2;\r\n    size?: StyleButtonSize;\r\n}\r\n\r\ndeclare interface BoltBuyNowInitializeOptions {\r\n    storefrontApiToken?: string;\r\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the customer step of\r\n * checkout to support Bolt.\r\n */\r\ndeclare interface BoltCustomerInitializeOptions {\r\n    /**\r\n     * A callback that gets called on initialize the strategy\r\n     *\r\n     * @param hasBoltAccount - The hasBoltAccount variable handle the result of checking user account availability on Bolt.\r\n     * @param email - Email address which was used for checking user account availability on Bolt.\r\n     */\r\n    onInit?(hasBoltAccount: boolean, email?: string): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Bolt payment method with:\r\n *\r\n * 1) Bolt Full Checkout:\r\n *\r\n * If the customer chooses to pay with Bolt, he will be asked to\r\n * enter his payment details via Bolt Full Checkout.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bolt',\r\n * });\r\n * ```\r\n *\r\n * 2) Bolt Client:\r\n *\r\n * If the customer chooses to pay with Bolt in payment section of Checkout page,\r\n * the Bolt Payment Modal will be shown, and the customer will be asked\r\n * to enter payment details via Bolt Modal\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bolt',\r\n *     bolt: {\r\n *         useBigCommerceCheckout: true,\r\n *     }\r\n * });\r\n * ```\r\n *\r\n * 3) Bolt Embedded:\r\n *\r\n * A set of options that are required to initialize the Bolt payment method\r\n * for presenting its credit card form.\r\n *\r\n * ```html\r\n * <!-- These containers are where the hosted (iframed) credit card field will be inserted -->\r\n * <div id=\"bolt-embedded\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bolt',\r\n *     bolt: {\r\n *         useBigCommerceCheckout: true,\r\n *         containerId: 'boltEmbeddedContainerId',\r\n *     }\r\n * });\r\n * ```\r\n */\r\ndeclare interface BoltPaymentInitializeOptions {\r\n    useBigCommerceCheckout: boolean;\r\n    /**\r\n     * The CSS selector of a container where the Bolt Embedded payment field should be inserted into.\r\n     */\r\n    containerId?: string;\r\n    /**\r\n     * A callback that gets called when the customer selects Bolt as payment option.\r\n     */\r\n    onPaymentSelect?(hasBoltAccount: boolean): void;\r\n}\r\n\r\ndeclare interface BraintreeAchInitializeOptions {\r\n    /**\r\n     * A callback that returns text that should be displayed to the customer in UI for proof of authorization\r\n     */\r\n    getMandateText: () => string;\r\n}\r\n\r\ndeclare interface BraintreeAnalyticTrackerService {\r\n    customerPaymentMethodExecuted(): void;\r\n    paymentComplete(): void;\r\n    selectedPaymentMethod(methodId: string): void;\r\n    walletButtonClick(methodId: string): void;\r\n}\r\n\r\ndeclare interface BraintreeCreditCardPaymentInitializeOptions {\r\n    /**\r\n     * A list of card brands that are not supported by the merchant.\r\n     *\r\n     * List of supported brands by braintree can be found here: https://braintree.github.io/braintree-web/current/module-braintree-web_hosted-fields.html#~field\r\n     * search for `supportedCardBrands` property.\r\n     *\r\n     * List of credit cards brands:\r\n     * 'visa',\r\n     * 'mastercard',\r\n     * 'american-express',\r\n     * 'diners-club',\r\n     * 'discover',\r\n     * 'jcb',\r\n     * 'union-pay',\r\n     * 'maestro',\r\n     * 'elo',\r\n     * 'mir',\r\n     * 'hiper',\r\n     * 'hipercard'\r\n     *\r\n     * */\r\n    unsupportedCardBrands?: string[];\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    containerId?: string;\r\n    threeDSecure?: BraintreeThreeDSecureOptions;\r\n    /**\r\n     * @alpha\r\n     * Please note that this option is currently in an early stage of\r\n     * development. Therefore the API is unstable and not ready for public\r\n     * consumption.\r\n     */\r\n    form?: BraintreeFormOptions;\r\n    /**\r\n     * The location to insert the Pay Later Messages.\r\n     */\r\n    bannerContainerId?: string;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm?(): void;\r\n    /**\r\n     * A callback that gets called if unable to submit payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onPaymentError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: unknown): void;\r\n}\r\n\r\n/**\r\n * A set of options that are optional to initialize the Braintree Fastlane customer strategy\r\n * that are responsible for Braintree Fastlane components styling and initialization\r\n *\r\n * ```js\r\n * service.initializeCustomer({\r\n *     methodId: 'braintreeacceleratedcheckout', // 'braintree' only for A/B testing\r\n *     braintreefastlane: {\r\n *         styles: {\r\n *              root: {\r\n *                  backgroundColorPrimary: 'transparent',\r\n *                  errorColor: '#C40B0B',\r\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n *              },\r\n *              input: {\r\n *                  borderRadius: '0.25rem',\r\n *                  borderColor: '#9E9E9E',\r\n *                  focusBorderColor: '#4496F6',\r\n *              },\r\n *              toggle: {\r\n *                  colorPrimary: '#0F005E',\r\n *                  colorSecondary: '#ffffff',\r\n *              },\r\n *              text: {\r\n *                  body: {\r\n *                      color: '#222222',\r\n *                      fontSize: '1rem',\r\n *                  },\r\n *                  caption: {\r\n *                      color: '#515151',\r\n *                      fontSize: '0.875rem',\r\n *                  },\r\n *              },\r\n *              branding: 'light',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BraintreeFastlaneCustomerInitializeOptions {\r\n    /**\r\n     * Is a stylisation options for customizing PayPal Fastlane components\r\n     *\r\n     * Note: the styles for all Braintree Fastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter what strategy was initialised first\r\n     */\r\n    styles?: BraintreeFastlaneStylesOption;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Braintree Fastlane payment\r\n * method for presenting on the page.\r\n *\r\n *\r\n * Also, Braintree requires specific options to initialize Braintree Fastlane Credit Card Component\r\n * ```html\r\n * <!-- This is where the Braintree Credit Card Component will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'braintreeacceleratedcheckout',\r\n *     braintreefastlane: {\r\n *         onInit: (renderPayPalComponentMethod) => renderPayPalComponentMethod('#container-id'),\r\n *         onChange: (showPayPalCardSelector) => showPayPalCardSelector(),\r\n *         styles: {\r\n *              root: {\r\n *                  backgroundColorPrimary: 'transparent',\r\n *                  errorColor: '#C40B0B',\r\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n *              },\r\n *              input: {\r\n *                  borderRadius: '0.25rem',\r\n *                  borderColor: '#9E9E9E',\r\n *                  focusBorderColor: '#4496F6',\r\n *              },\r\n *              toggle: {\r\n *                  colorPrimary: '#0F005E',\r\n *                  colorSecondary: '#ffffff',\r\n *              },\r\n *              text: {\r\n *                  body: {\r\n *                      color: '#222222',\r\n *                      fontSize: '1rem',\r\n *                  },\r\n *                  caption: {\r\n *                      color: '#515151',\r\n *                      fontSize: '0.875rem',\r\n *                  },\r\n *              },\r\n *              branding: 'light',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BraintreeFastlanePaymentInitializeOptions {\r\n    /**\r\n     * Is a callback that takes the CSS selector of a container\r\n     * where the Braintree Fastlane form should be inserted into.\r\n     */\r\n    onInit?: (renderPayPalComponentMethod: (container: string) => void) => void;\r\n    /**\r\n     * Is a callback that shows Braintree stored instruments\r\n     * when get triggered\r\n     */\r\n    onChange?: (showPayPalCardSelector: () => Promise<CardInstrument_2 | undefined>) => void;\r\n    /**\r\n     * Is a stylisation options for customizing Braintree Fastlane components\r\n     *\r\n     * Note: the styles for all Braintree Fastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter what strategy was initialised first\r\n     */\r\n    styles?: BraintreeFastlaneStylesOption;\r\n    onError?: (error: Error) => void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the shipping step of\r\n * checkout in order to support Braintree Fastlane.\r\n */\r\ndeclare interface BraintreeFastlaneShippingInitializeOptions {\r\n    /**\r\n     * Is a stylisation options for customizing PayPal Fastlane components\r\n     *\r\n     * Note: the styles for all Braintree Fastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter what strategy was initialised first\r\n     */\r\n    styles?: BraintreeFastlaneStylesOption;\r\n    /**\r\n     * Is a callback that shows Braintree Fastlane popup with customer addresses\r\n     * when get triggered\r\n     */\r\n    onPayPalFastlaneAddressChange?: (showBraintreeFastlaneAddressSelector: () => Promise<CustomerAddress_2 | undefined>) => void;\r\n}\r\n\r\ndeclare interface BraintreeLocalMethodsPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * Text that will be displayed on lpm button\r\n     */\r\n    buttonText: string;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm?(): void;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError(error: unknown): void;\r\n}\r\n\r\ndeclare interface BraintreePaypalButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: {\r\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n    };\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: Pick<PaypalStyleOptions_2, 'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons' | 'height'>;\r\n    /**\r\n     * Address to be used for shipping.\r\n     * If not provided, it will use the first saved address from the active customer.\r\n     */\r\n    shippingAddress?: Address_2 | null;\r\n    /**\r\n     * A callback that gets called if unable to authorize and tokenize payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onAuthorizeError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     * A callback that gets called if unable to submit payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onPaymentError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     * A callback that gets called on any error instead of submit payment or authorization errors.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when Braintree SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface BraintreePaypalCreditButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: {\r\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n    };\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: Pick<PaypalStyleOptions_2, 'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons' | 'height'>;\r\n    /**\r\n     * Address to be used for shipping.\r\n     * If not provided, it will use the first saved address from the active customer.\r\n     */\r\n    shippingAddress?: Address_2 | null;\r\n    /**\r\n     * A callback that gets called if unable to authorize and tokenize payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onAuthorizeError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     * A callback that gets called if unable to submit payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onPaymentError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     * A callback that gets called on any error instead of submit payment or authorization errors.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when Braintree SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface BraintreePaypalCreditCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    buttonHeight?: number;\r\n    /**\r\n     * A callback that gets called on any error instead of submit payment or authorization errors.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     * A callback that gets called when wallet button clicked\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\ndeclare interface BraintreePaypalCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    buttonHeight?: number;\r\n    /**\r\n     * A callback that gets called on any error instead of submit payment or authorization errors.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: BraintreeError | StandardError_2): void;\r\n    /**\r\n     * A callback that gets called when wallet button clicked\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\ndeclare interface BrowserInfo {\r\n    color_depth: number;\r\n    java_enabled: boolean;\r\n    language: string;\r\n    screen_height: number;\r\n    screen_width: number;\r\n    time_zone_offset: string;\r\n}\r\n\r\ndeclare interface ButtonStyles extends BlockElementStyles {\r\n    active?: BlockElementStyles;\r\n    focus?: BlockElementStyles;\r\n    hover?: BlockElementStyles;\r\n    disabled?: BlockElementStyles;\r\n}\r\n\r\ndeclare interface Capabilities {\r\n    userJourney: {\r\n        disableEditCart: boolean;\r\n        disableStoreCredit: boolean;\r\n        hasCompanyAddressBook: boolean;\r\n        hasAddressExtraFields: boolean;\r\n        hasOrderExtraFields: boolean;\r\n        requiresB2BToken: boolean;\r\n    };\r\n    customer: {\r\n        superAdminCompanySelector: boolean;\r\n    };\r\n    shipping: {\r\n        restrictManualAddressEntry: boolean;\r\n        prefillCompanyAddress: boolean;\r\n        hideSaveToAddressBookCheck: boolean;\r\n        hideBillingSameAsShippingCheck: boolean;\r\n    };\r\n    billing: {\r\n        restrictManualAddressEntry: boolean;\r\n        hideSaveToAddressBookCheck: boolean;\r\n    };\r\n    payment: {\r\n        paymentMethodFiltering: boolean;\r\n        b2bPaymentMethodFilter: boolean;\r\n        poPaymentMethod: boolean;\r\n        poConfig: {\r\n            label: string;\r\n            required: boolean;\r\n            creditLimit: number;\r\n            currency: string;\r\n        } | null;\r\n        additionalPaymentNotes: boolean;\r\n        additionalField: {\r\n            label: string;\r\n            required: boolean;\r\n        } | null;\r\n        excludeOfflineForInvoice: boolean;\r\n        excludePPSDK: boolean;\r\n    };\r\n    orderConfirmation: {\r\n        orderSummary: boolean;\r\n        persistB2BMetadata: boolean;\r\n        storeQuoteId: boolean;\r\n        storeInvoiceReference: boolean;\r\n        invoiceRedirect: boolean;\r\n    };\r\n}\r\n\r\ndeclare interface CardCvcElementOptions extends BaseIndividualElementOptions {\r\n    placeholder?: string;\r\n}\r\n\r\ndeclare interface CardDataPaymentMethodState {\r\n    paymentMethod: CardPaymentMethodState;\r\n    installments?: {\r\n        value: number;\r\n        plan?: 'string';\r\n    };\r\n}\r\n\r\ndeclare interface CardElementOptions extends BaseElementOptions {\r\n    /**\r\n     * A pre-filled set of values to include in the input (e.g., {postalCode: '94110'}).\r\n     * Note that sensitive card information (card number, CVC, and expiration date)\r\n     * cannot be pre-filled\r\n     */\r\n    value?: string;\r\n    /**\r\n     * Hide the postal code field. Default is false. If you are already collecting a\r\n     * full billing address or postal code elsewhere, set this to true.\r\n     */\r\n    hidePostalCode?: boolean;\r\n    /**\r\n     * Appearance of the icon in the Element.\r\n     */\r\n    iconStyle?: IconStyle;\r\n    hideIcon?: boolean;\r\n}\r\n\r\ndeclare interface CardExpiryElementOptions extends BaseIndividualElementOptions {\r\n    placeholder?: string;\r\n}\r\n\r\ndeclare interface CardInstrument extends BaseInstrument {\r\n    brand: string;\r\n    expiryMonth: string;\r\n    expiryYear: string;\r\n    iin: string;\r\n    last4: string;\r\n    type: 'card';\r\n    untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType;\r\n}\r\n\r\ndeclare interface CardNumberElementOptions extends BaseIndividualElementOptions {\r\n    placeholder?: string;\r\n    showIcon?: boolean;\r\n    /**\r\n     * Appearance of the icon in the Element. Either `solid` or `default`\r\n     */\r\n    iconStyle?: IconStyle;\r\n}\r\n\r\ndeclare interface CardPaymentMethodState extends AdyenPaymentMethodState {\r\n    encryptedCardNumber: string;\r\n    encryptedExpiryMonth: string;\r\n    encryptedExpiryYear: string;\r\n    encryptedSecurityCode: string;\r\n    holderName: string;\r\n}\r\n\r\ndeclare interface CardState {\r\n    data: CardDataPaymentMethodState;\r\n    isValid?: boolean;\r\n    valid?: {\r\n        [key: string]: boolean;\r\n    };\r\n    errors?: CardStateErrors;\r\n}\r\n\r\ndeclare interface CardStateData {\r\n    encryptedCardNumber: string;\r\n    encryptedExpiryMonth: string;\r\n    encryptedExpiryYear: string;\r\n    encryptedSecurityCode: string;\r\n    holderName: string;\r\n}\r\n\r\ndeclare interface CardStateErrors {\r\n    [key: string]: string;\r\n}\r\n\r\ndeclare interface CardingProtectionActionData {\r\n    human_verification_token?: string;\r\n}\r\n\r\ndeclare interface Cart {\r\n    id: string;\r\n    customerId: number;\r\n    companyId: number | null;\r\n    currency: Currency;\r\n    email: string;\r\n    isTaxIncluded: boolean;\r\n    baseAmount: number;\r\n    /**\r\n     * This is the total amount of discount applied on line_items.\r\n     */\r\n    discountAmount: number;\r\n    cartAmount: number;\r\n    /**\r\n     * This is an array of all applied coupons.\r\n     */\r\n    coupons: Coupon[];\r\n    /**\r\n     * This is the total amount of discount applied on cart including coupons and line_items discounts.\r\n     */\r\n    discounts: Discount[];\r\n    lineItems: LineItemMap;\r\n    createdTime: string;\r\n    updatedTime: string;\r\n    source?: CartSource;\r\n    locale: string;\r\n}\r\n\r\ndeclare class CartChangedError extends StandardError {\r\n    /**\r\n     * @alpha\r\n     * Please note that this option is currently in an early stage of\r\n     * development. Therefore the API is unstable and not ready for public\r\n     * consumption.\r\n     */\r\n    data: {\r\n        previous: ComparableCheckout;\r\n        updated: ComparableCheckout;\r\n    };\r\n    constructor(previous: ComparableCheckout, updated: ComparableCheckout);\r\n}\r\n\r\n/**\r\n * This error is thrown when the server detects inconsistency in cart data since it is last requested,\r\n * for example, product prices or eligible discounts have changed.\r\n */\r\ndeclare class CartConsistencyError extends StandardError {\r\n    constructor(message?: string);\r\n}\r\n\r\ndeclare interface CartSelector {\r\n    getCart(): Cart | undefined;\r\n    getCartOrThrow(): Cart;\r\n    getLoadError(): Error | undefined;\r\n    isLoading(): boolean;\r\n    getLocale(): string | undefined;\r\n}\r\n\r\n/**\r\n * This error is thrown when at least one cart item changed stock position (e.g. moved to a different warehouse)\r\n * and the server returns type `cart_stock_positions_changed`.\r\n */\r\ndeclare class CartStockPositionsChangedError extends StandardError {\r\n    changedItemIds: string[];\r\n    constructor(changedItemIds: string[], message?: string);\r\n}\r\n\r\ndeclare interface CheckableInputStyles extends InputStyles {\r\n    error?: InputStyles;\r\n    checked?: BlockElementStyles;\r\n}\r\n\r\ndeclare interface ChecklistStyles extends BlockElementStyles {\r\n    hover?: BlockElementStyles;\r\n    checked?: BlockElementStyles;\r\n}\r\n\r\ndeclare interface Checkout {\r\n    id: string;\r\n    billingAddress?: BillingAddress;\r\n    cart: Cart;\r\n    customer: Customer;\r\n    customerMessage: string;\r\n    consignments: Consignment[];\r\n    taxes: Tax[];\r\n    discounts: Discount[];\r\n    displayDiscountTotal: number;\r\n    isStoreCreditApplied: boolean;\r\n    coupons: Coupon[];\r\n    orderId?: number;\r\n    giftWrappingCostTotal: number;\r\n    comparisonShippingCost: number;\r\n    shippingCostTotal: number;\r\n    shippingCostBeforeDiscount: number;\r\n    /**\r\n     * Whether the current checkout must execute spam protection\r\n     * before placing the order.\r\n     *\r\n     * Note: You need to enable Google ReCAPTCHA bot protection in your Checkout Settings.\r\n     */\r\n    shouldExecuteSpamCheck: boolean;\r\n    handlingCostTotal: number;\r\n    taxTotal: number;\r\n    subtotal: number;\r\n    grandTotal: number;\r\n    outstandingBalance: number;\r\n    orderBasedAutoDiscountTotal: number;\r\n    manualDiscountTotal: number;\r\n    hasOrderLevelAutoDiscountMaxLimitReached?: boolean;\r\n    giftCertificates: GiftCertificate[];\r\n    promotions?: Promotion[];\r\n    balanceDue: number;\r\n    createdTime: string;\r\n    updatedTime: string;\r\n    payments?: CheckoutPayment[];\r\n    channelId: number;\r\n    fees: Fee[];\r\n    totalDiscount: number;\r\n    version: number;\r\n}\r\n\r\ndeclare interface CheckoutButtonDataState {\r\n    initializedContainers: {\r\n        [key: string]: boolean;\r\n    };\r\n}\r\n\r\ndeclare class CheckoutButtonErrorSelector {\r\n    private _checkoutButton;\r\n    getInitializeButtonError(methodId?: CheckoutButtonMethodType): Error | undefined;\r\n    getDeinitializeButtonError(methodId?: CheckoutButtonMethodType): Error | undefined;\r\n}\r\n\r\ndeclare interface CheckoutButtonErrorsState {\r\n    initializeError?: Error;\r\n    deinitializeError?: Error;\r\n}\r\n\r\ndeclare type CheckoutButtonInitializeOptions = BaseCheckoutButtonInitializeOptions & WithAmazonPayV2ButtonInitializeOptions & WithApplePayButtonInitializeOptions & WithBigCommercePaymentsButtonInitializeOptions & WithBigCommercePaymentsPayLaterButtonInitializeOptions & WithBigCommercePaymentsVenmoButtonInitializeOptions & WithBoltButtonInitializeOptions & WithBraintreePaypalButtonInitializeOptions & WithBraintreePaypalCreditButtonInitializeOptions & WithGooglePayButtonInitializeOptions & WithPayPalCommerceButtonInitializeOptions & WithPayPalCommerceCreditButtonInitializeOptions & WithPayPalCommerceVenmoButtonInitializeOptions;\r\n\r\ndeclare class CheckoutButtonInitializer {\r\n    private _store;\r\n    private _buttonStrategyActionCreator;\r\n    private _state;\r\n    /**\r\n     * Returns a snapshot of the current state.\r\n     *\r\n     * The method returns a new instance every time there is a change in the\r\n     * state. You can query the state by calling any of its getter methods.\r\n     *\r\n     * ```js\r\n     * const state = service.getState();\r\n     *\r\n     * console.log(state.errors.getInitializeButtonError());\r\n     * console.log(state.statuses.isInitializingButton());\r\n     * ```\r\n     *\r\n     * @returns The current customer's checkout state\r\n     */\r\n    getState(): CheckoutButtonSelectors;\r\n    /**\r\n     * Subscribes to any changes to the current state.\r\n     *\r\n     * The method registers a callback function and executes it every time there\r\n     * is a change in the current state.\r\n     *\r\n     * ```js\r\n     * service.subscribe(state => {\r\n     *     console.log(state.statuses.isInitializingButton());\r\n     * });\r\n     * ```\r\n     *\r\n     * The method can be configured to notify subscribers only regarding\r\n     * relevant changes, by providing a filter function.\r\n     *\r\n     * ```js\r\n     * const filter = state => state.errors.getInitializeButtonError();\r\n     *\r\n     * // Only trigger the subscriber when the cart changes.\r\n     * service.subscribe(state => {\r\n     *     console.log(state.errors.getInitializeButtonError())\r\n     * }, filter);\r\n     * ```\r\n     *\r\n     * @param subscriber - The function to subscribe to state changes.\r\n     * @param filters - One or more functions to filter out irrelevant state\r\n     * changes. If more than one function is provided, the subscriber will only\r\n     * be triggered if all conditions are met.\r\n     * @returns A function, if called, will unsubscribe the subscriber.\r\n     */\r\n    subscribe(subscriber: (state: CheckoutButtonSelectors) => void, ...filters: Array<(state: CheckoutButtonSelectors) => any>): () => void;\r\n    /**\r\n     * Initializes the checkout button of a payment method.\r\n     *\r\n     * When the checkout button is initialized, it will be inserted into the DOM,\r\n     * ready to be interacted with by the customer.\r\n     *\r\n     * ```js\r\n     * initializer.initializeButton({\r\n     *     methodId: 'braintreepaypal',\r\n     *     containerId: 'checkoutButton',\r\n     *     braintreepaypal: {\r\n     *     },\r\n     * });\r\n     * ```\r\n     *\r\n     * @param options - Options for initializing the checkout button.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    initializeButton(options: CheckoutButtonInitializeOptions): Promise<CheckoutButtonSelectors>;\r\n    /**\r\n     * De-initializes the checkout button by performing any necessary clean-ups.\r\n     *\r\n     * ```js\r\n     * await service.deinitializeButton({\r\n     *     methodId: 'braintreepaypal',\r\n     * });\r\n     * ```\r\n     *\r\n     * @param options - Options for deinitializing the checkout button.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    deinitializeButton(options: CheckoutButtonOptions): Promise<CheckoutButtonSelectors>;\r\n}\r\n\r\ndeclare interface CheckoutButtonInitializerOptions {\r\n    host?: string;\r\n    locale?: string;\r\n}\r\n\r\ndeclare enum CheckoutButtonMethodType {\r\n    APPLEPAY = \"applepay\",\r\n    AMAZON_PAY_V2 = \"amazonpay\",\r\n    BRAINTREE_PAYPAL = \"braintreepaypal\",\r\n    BRAINTREE_VENMO = \"braintreevenmo\",\r\n    BRAINTREE_PAYPAL_CREDIT = \"braintreepaypalcredit\",\r\n    GOOGLEPAY_ADYENV2 = \"googlepayadyenv2\",\r\n    GOOGLEPAY_ADYENV3 = \"googlepayadyenv3\",\r\n    GOOGLEPAY_AUTHORIZENET = \"googlepayauthorizenet\",\r\n    GOOGLEPAY_BNZ = \"googlepaybnz\",\r\n    GOOGLEPAY_BRAINTREE = \"googlepaybraintree\",\r\n    GOOGLEPAY_CHECKOUTCOM = \"googlepaycheckoutcom\",\r\n    GOOGLEPAY_CYBERSOURCEV2 = \"googlepaycybersourcev2\",\r\n    GOOGLEPAY_ORBITAL = \"googlepayorbital\",\r\n    GOOGLEPAY_STRIPE = \"googlepaystripe\",\r\n    GOOGLEPAY_STRIPEUPE = \"googlepaystripeupe\",\r\n    GOOGLEPAY_WORLDPAYACCESS = \"googlepayworldpayaccess\",\r\n    PAYPALEXPRESS = \"paypalexpress\"\r\n}\r\n\r\n/**\r\n * The set of options for configuring the checkout button.\r\n */\r\ndeclare interface CheckoutButtonOptions extends RequestOptions {\r\n    /**\r\n     * The identifier of the payment method.\r\n     */\r\n    methodId: CheckoutButtonMethodType;\r\n}\r\n\r\ndeclare interface CheckoutButtonSelector {\r\n    getState(): CheckoutButtonState;\r\n    isInitializing(methodId?: CheckoutButtonMethodType): boolean;\r\n    isInitialized(methodId: CheckoutButtonMethodType, containerId?: string): boolean;\r\n    isDeinitializing(methodId?: CheckoutButtonMethodType): boolean;\r\n    getInitializeError(methodId?: CheckoutButtonMethodType): Error | undefined;\r\n    getDeinitializeError(methodId?: CheckoutButtonMethodType): Error | undefined;\r\n}\r\n\r\ndeclare interface CheckoutButtonSelectors {\r\n    errors: CheckoutButtonErrorSelector;\r\n    statuses: CheckoutButtonStatusSelector;\r\n}\r\n\r\ndeclare interface CheckoutButtonState {\r\n    data: {\r\n        [key in CheckoutButtonMethodType]?: CheckoutButtonDataState | undefined;\r\n    };\r\n    errors: {\r\n        [key in CheckoutButtonMethodType]?: CheckoutButtonErrorsState | undefined;\r\n    };\r\n    statuses: {\r\n        [key in CheckoutButtonMethodType]?: CheckoutButtonStatusesState | undefined;\r\n    };\r\n}\r\n\r\ndeclare class CheckoutButtonStatusSelector {\r\n    private _checkoutButton;\r\n    isInitializingButton(methodId?: CheckoutButtonMethodType): boolean;\r\n    isDeinitializingButton(methodId?: CheckoutButtonMethodType): boolean;\r\n}\r\n\r\ndeclare interface CheckoutButtonStatusesState {\r\n    isInitializing?: boolean;\r\n    isDeinitializing?: boolean;\r\n}\r\n\r\ndeclare type CheckoutIncludeParam = {\r\n    [key in CheckoutIncludes]?: boolean;\r\n};\r\n\r\ndeclare enum CheckoutIncludes {\r\n    AvailableShippingOptions = \"consignments.availableShippingOptions\",\r\n    PhysicalItemsCategoryNames = \"cart.lineItems.physicalItems.categoryNames\",\r\n    DigitalItemsCategoryNames = \"cart.lineItems.digitalItems.categoryNames\"\r\n}\r\n\r\ndeclare interface CheckoutInitialState {\r\n    config?: Config;\r\n    formFields?: FormFields;\r\n    checkout?: Checkout;\r\n    extensions?: Extension[];\r\n    extraFields?: ExtraFields;\r\n    b2bApiSettings?: B2BApiSettings;\r\n}\r\n\r\ndeclare interface CheckoutParams {\r\n    include?: CheckoutIncludes[] | CheckoutIncludeParam;\r\n}\r\n\r\ndeclare interface CheckoutPayment {\r\n    detail: {\r\n        step: string;\r\n    };\r\n    providerId: string;\r\n    providerType: string;\r\n    gatewayId?: string;\r\n}\r\n\r\ndeclare interface CheckoutPaymentMethodExecutedOptions {\r\n    hasBoltAccount?: boolean;\r\n}\r\n\r\ndeclare interface CheckoutRequestBody {\r\n    customerMessage: string;\r\n}\r\n\r\ndeclare interface CheckoutSelector {\r\n    getCheckout(): Checkout | undefined;\r\n    getCheckoutOrThrow(): Checkout;\r\n    getOutstandingBalance(useStoreCredit?: boolean): number | undefined;\r\n    getLoadError(): Error | undefined;\r\n    getUpdateError(): Error | undefined;\r\n    isExecutingSpamCheck(): boolean;\r\n    isLoading(): boolean;\r\n    isUpdating(): boolean;\r\n}\r\n\r\ndeclare interface CheckoutSelectors {\r\n    data: CheckoutStoreSelector;\r\n    errors: CheckoutStoreErrorSelector;\r\n    statuses: CheckoutStoreStatusSelector;\r\n}\r\n\r\n/**\r\n * Responsible for completing the checkout process for the current customer.\r\n *\r\n * This object can be used to collect all information that is required for\r\n * checkout, such as shipping and billing information. It can also be used to\r\n * retrieve the current checkout state and subscribe to its changes.\r\n */\r\ndeclare class CheckoutService {\r\n    private _store;\r\n    private _storeProjection;\r\n    private _extensionMessenger;\r\n    private _extensionEventBroadcaster;\r\n    private _b2bTokenActionCreator;\r\n    private _billingAddressActionCreator;\r\n    private _checkoutActionCreator;\r\n    private _configActionCreator;\r\n    private _customerActionCreator;\r\n    private _consignmentActionCreator;\r\n    private _countryActionCreator;\r\n    private _couponActionCreator;\r\n    private _customerStrategyActionCreator;\r\n    private _errorActionCreator;\r\n    private _giftCertificateActionCreator;\r\n    private _instrumentActionCreator;\r\n    private _orderActionCreator;\r\n    private _paymentMethodActionCreator;\r\n    private _paymentStrategyActionCreator;\r\n    private _pickupOptionActionCreator;\r\n    private _shippingCountryActionCreator;\r\n    private _shippingStrategyActionCreator;\r\n    private _signInEmailActionCreator;\r\n    private _spamProtectionActionCreator;\r\n    private _storeCreditActionCreator;\r\n    private _subscriptionsActionCreator;\r\n    private _formFieldsActionCreator;\r\n    private _extensionActionCreator;\r\n    private _workerExtensionMessenger;\r\n    private _errorTransformer;\r\n    /**\r\n     * Returns a snapshot of the current checkout state.\r\n     *\r\n     * The method returns a new instance every time there is a change in the\r\n     * checkout state. You can query the state by calling any of its getter\r\n     * methods.\r\n     *\r\n     * ```js\r\n     * const state = service.getState();\r\n     *\r\n     * console.log(state.data.getOrder());\r\n     * console.log(state.errors.getSubmitOrderError());\r\n     * console.log(state.statuses.isSubmittingOrder());\r\n     * ```\r\n     *\r\n     * @returns The current customer's checkout state\r\n     */\r\n    getState(): CheckoutSelectors;\r\n    /**\r\n     * Notifies all subscribers with the current state.\r\n     *\r\n     * When this method gets called, the subscribers get called regardless if\r\n     * they have any filters applied.\r\n     */\r\n    notifyState(): void;\r\n    /**\r\n     * Subscribes to any changes to the current state.\r\n     *\r\n     * The method registers a callback function and executes it every time there\r\n     * is a change in the checkout state.\r\n     *\r\n     * ```js\r\n     * service.subscribe(state => {\r\n     *     console.log(state.data.getCart());\r\n     * });\r\n     * ```\r\n     *\r\n     * The method can be configured to notify subscribers only regarding\r\n     * relevant changes, by providing a filter function.\r\n     *\r\n     * ```js\r\n     * const filter = state => state.data.getCart();\r\n     *\r\n     * // Only trigger the subscriber when the cart changes.\r\n     * service.subscribe(state => {\r\n     *     console.log(state.data.getCart())\r\n     * }, filter);\r\n     * ```\r\n     *\r\n     * @param subscriber - The function to subscribe to state changes.\r\n     * @param filters - One or more functions to filter out irrelevant state\r\n     * changes. If more than one function is provided, the subscriber will only\r\n     * be triggered if all conditions are met.\r\n     * @returns A function, if called, will unsubscribe the subscriber.\r\n     */\r\n    subscribe(subscriber: (state: CheckoutSelectors) => void, ...filters: Array<(state: CheckoutSelectors) => any>): () => void;\r\n    /**\r\n     * Hydrates the checkout service with an initial state.\r\n     *\r\n     * The initial state can contain various checkout data such as cart items,\r\n     * customer information, and other relevant state.\r\n     *\r\n     * ```js\r\n     * const initialState = {\r\n     *     // ... initial checkout state data\r\n     * };\r\n     *\r\n     * const state = await service.hydrateInitialState(initialState);\r\n     *\r\n     * console.log(state.data.getCheckout());\r\n     * ```\r\n     *\r\n     * @alpha\r\n     * @param state - The initial state data to hydrate the checkout service with.\r\n     * @returns A promise that resolves to the current state after hydration.\r\n     */\r\n    hydrateInitialState(state: CheckoutInitialState): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Loads the current checkout.\r\n     *\r\n     * This method can only be called if there is an active checkout. Also, it\r\n     * can only retrieve data that belongs to the current customer. When it is\r\n     * successfully executed, you can retrieve the data by calling\r\n     * `CheckoutStoreSelector#getCheckout`.\r\n     *\r\n     * ```js\r\n     * const state = await service.loadCheckout('0cfd6c06-57c3-4e29-8d7a-de55cc8a9052');\r\n     *\r\n     * console.log(state.data.getCheckout());\r\n     * ```\r\n     *\r\n     * @param id - The identifier of the checkout to load, or the default checkout if not provided.\r\n     * @param options - Options for loading the current checkout.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    loadCheckout(id?: string, options?: RequestOptions<CheckoutParams>): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Updates specific properties of the current checkout.\r\n     *\r\n     * ```js\r\n     * const state = await service.updateCheckout(checkout);\r\n     *\r\n     * console.log(state.data.getCheckout());\r\n     * ```\r\n     *\r\n     * @param payload - The checkout properties to be updated.\r\n     * @param options - Options for loading the current checkout.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    updateCheckout(payload: CheckoutRequestBody, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Loads an order by an id.\r\n     *\r\n     * The method can only retrieve an order if the order belongs to the current\r\n     * customer. If it is successfully executed, the data can be retrieved by\r\n     * calling `CheckoutStoreSelector#getOrder`.\r\n     *\r\n     * ```js\r\n     * const state = await service.loadOrder(123);\r\n     *\r\n     * console.log(state.data.getOrder());\r\n     * ```\r\n     *\r\n     * @param orderId - The identifier of the order to load.\r\n     * @param options - Options for loading the order.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    loadOrder(orderId: number, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Submits an order, thereby completing a checkout process.\r\n     *\r\n     * Before you can submit an order, you must initialize the payment method\r\n     * chosen by the customer by calling `CheckoutService#initializePayment`.\r\n     *\r\n     * ```js\r\n     * await service.initializePayment({ methodId: 'braintree' });\r\n     * await service.submitOrder({\r\n     *     payment: {\r\n     *         methodId: 'braintree',\r\n     *         paymentData: {\r\n     *             ccExpiry: { month: 10, year: 20 },\r\n     *             ccName: 'BigCommerce',\r\n     *             ccNumber: '4111111111111111',\r\n     *             ccCvv: 123,\r\n     *         },\r\n     *     },\r\n     * });\r\n     * ```\r\n     *\r\n     * You are not required to include `paymentData` if the order does not\r\n     * require additional payment details. For example, the customer has already\r\n     * entered their payment details on the cart page using one of the hosted\r\n     * payment methods, such as PayPal. Or the customer has applied a gift\r\n     * certificate that exceeds the grand total amount.\r\n     *\r\n     * If the order is submitted successfully, you can retrieve the newly\r\n     * created order by calling `CheckoutStoreSelector#getOrder`.\r\n     *\r\n     * ```js\r\n     * const state = await service.submitOrder(payload);\r\n     *\r\n     * console.log(state.data.getOrder());\r\n     * ```\r\n     *\r\n     * @param payload - The request payload to submit for the current order.\r\n     * @param options - Options for submitting the current order.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    submitOrder(payload: OrderRequestBody, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Finalizes the submission process for an order.\r\n     *\r\n     * This method is only required for certain hosted payment methods that\r\n     * require a customer to enter their credit card details on their website.\r\n     * You need to call this method once the customer has redirected back to\r\n     * checkout in order to complete the checkout process.\r\n     *\r\n     * If the method is called before order finalization is required or for a\r\n     * payment method that does not require order finalization, an error will be\r\n     * thrown. Conversely, if the method is called successfully, you should\r\n     * immediately redirect the customer to the order confirmation page.\r\n     *\r\n     * ```js\r\n     * try {\r\n     *     await service.finalizeOrderIfNeeded();\r\n     *\r\n     *     window.location.assign('/order-confirmation');\r\n     * } catch (error) {\r\n     *     if (error.type !== 'order_finalization_not_required') {\r\n     *         throw error;\r\n     *     }\r\n     * }\r\n     * ```\r\n     *\r\n     * @param options - Options for finalizing the current order.\r\n     * @returns A promise that resolves to the current state.\r\n     * @throws `OrderFinalizationNotRequiredError` error if order finalization\r\n     * is not required for the current order at the time of execution.\r\n     */\r\n    finalizeOrderIfNeeded(options?: OrderFinalizeOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Loads a list of payment methods available for checkout.\r\n     *\r\n     * If a customer enters their payment details before navigating to the\r\n     * checkout page (i.e.: using PayPal checkout button on the cart page), only\r\n     * one payment method will be available for the customer - the selected\r\n     * payment method. Otherwise, by default, all payment methods configured by\r\n     * the merchant will be available for the customer.\r\n     *\r\n     * Once the method is executed successfully, you can call\r\n     * `CheckoutStoreSelector#getPaymentMethods` to retrieve the list of payment\r\n     * methods.\r\n     *\r\n     * ```js\r\n     * const state = service.loadPaymentMethods();\r\n     *\r\n     * console.log(state.data.getPaymentMethods());\r\n     * ```\r\n     *\r\n     * @param options - Options for loading the payment methods that are\r\n     * available to the current customer.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    loadPaymentMethods(options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Loads a list of payment methods for given ids.\r\n     *\r\n     *\r\n     * Once the method is executed successfully, you can call\r\n     * `CheckoutStoreSelector#getPaymentMethods` to retrieve the list of payment\r\n     * methods.\r\n     *\r\n     * ```js\r\n     * const state = service.loadPaymentMethodsById(['applepay']);\r\n     *\r\n     * console.log(state.data.getPaymentMethodOrThrow('applepay'));\r\n     * ```\r\n     *\r\n     * @param methodIds - The identifier for the payment methods to load.\r\n     * @param options - Options for loading the payment methods that are\r\n     * available to the current customer.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    loadPaymentMethodByIds(methodIds: string[], options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Initializes the payment step of a checkout process.\r\n     *\r\n     * Before a payment method can accept payment details, it must first be\r\n     * initialized. Some payment methods require you to provide additional\r\n     * initialization options. For example, you can provide an element ID for\r\n     * Amazon Pay if you want users to be able to select a different payment\r\n     * method by clicking on the element.\r\n     *\r\n     * ```js\r\n     * await service.initializePayment({\r\n     *     methodId: 'amazonpay',\r\n     *     amazonpay: {\r\n     *         editButtonId: 'edit-button',\r\n     *     },\r\n     * });\r\n     * ```\r\n     *\r\n     * @param options - Options for initializing the payment step of checkout.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    initializePayment(options: PaymentInitializeOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * De-initializes the payment step of a checkout process.\r\n     *\r\n     * The method should be called once you no longer require a payment method\r\n     * to be initialized. It can perform any necessary clean-up behind the\r\n     * scene, i.e.: remove DOM nodes or event handlers that are attached as a\r\n     * result of payment initialization.\r\n     *\r\n     * ```js\r\n     * await service.deinitializePayment({\r\n     *     methodId: 'amazonpay',\r\n     * });\r\n     * ```\r\n     *\r\n     * @param options - Options for deinitializing the payment step of checkout.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    deinitializePayment(options: PaymentRequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Loads a list of countries available for billing.\r\n     *\r\n     * Once you make a successful request, you will be able to retrieve the list\r\n     * of countries by calling `CheckoutStoreSelector#getBillingCountries`.\r\n     *\r\n     * ```js\r\n     * const state = await service.loadBillingCountries();\r\n     *\r\n     * console.log(state.data.getBillingCountries());\r\n     * ```\r\n     *\r\n     * @param options - Options for loading the available billing countries.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    loadBillingCountries(options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Loads a list of countries available for shipping.\r\n     *\r\n     * The list is determined based on the shipping zones configured by a\r\n     * merchant. Once you make a successful call, you will be able to retrieve\r\n     * the list of available shipping countries by calling\r\n     * `CheckoutStoreSelector#getShippingCountries`.\r\n     *\r\n     * ```js\r\n     * const state = await service.loadShippingCountries();\r\n     *\r\n     * console.log(state.data.getShippingCountries());\r\n     * ```\r\n     *\r\n     * @param options - Options for loading the available shipping countries.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    loadShippingCountries(options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Loads a list of pickup options for a given criteria.\r\n     *\r\n     * ```js\r\n     * const consignmentId = '1';\r\n     * const searchArea = {\r\n     *     radius: {\r\n     *         value: 1.4,\r\n     *         unit: 'KM'\r\n     *     },\r\n     *     coordinates: {\r\n     *         latitude: 1.4,\r\n     *         longitude: 0\r\n     *     },\r\n     * };\r\n     * const state = await service.loadPickupOptions({ consignmentId, searchArea });\r\n     *\r\n     * console.log(state.data.getPickupOptions(consignmentId, searchArea));\r\n     * ```\r\n     *\r\n     * @alpha\r\n     * @param query - Options for loading the available shipping countries.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    loadPickupOptions(query: PickupOptionRequestBody): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Loads a set of form fields that should be presented to customers in order\r\n     * to capture their billing address.\r\n     *\r\n     * Once the method has been executed successfully, you can call\r\n     * `CheckoutStoreSelector#getBillingAddressFields` to retrieve the set of\r\n     * form fields.\r\n     *\r\n     * ```js\r\n     * const state = service.loadBillingAddressFields();\r\n     *\r\n     * console.log(state.data.getBillingAddressFields('US'));\r\n     * ```\r\n     *\r\n     * @param options - Options for loading the billing address form fields.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    loadBillingAddressFields(options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Loads a set of form fields that should be presented to customers in order\r\n     * to capture their shipping address.\r\n     *\r\n     * Once the method has been executed successfully, you can call\r\n     * `CheckoutStoreSelector#getShippingAddressFields` to retrieve the set of\r\n     * form fields.\r\n     *\r\n     * ```js\r\n     * const state = service.loadShippingAddressFields();\r\n     *\r\n     * console.log(state.data.getShippingAddressFields('US'));\r\n     * ```\r\n     *\r\n     * @param options - Options for loading the shipping address form fields.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    loadShippingAddressFields(options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Initializes the sign-in step of a checkout process.\r\n     *\r\n     * Some payment methods, such as Amazon Pay, have their own sign-in flow. In\r\n     * order to support them, this method must be called.\r\n     *\r\n     * ```js\r\n     * await service.initializeCustomer({\r\n     *     methodId: 'amazonpay',\r\n     *     amazonpay: {\r\n     *         container: 'signInButton',\r\n     *     },\r\n     * });\r\n     * ```\r\n     *\r\n     * @param options - Options for initializing the customer step of checkout.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    initializeCustomer(options?: CustomerInitializeOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * De-initializes the sign-in step of a checkout process.\r\n     *\r\n     * It should be called once you no longer want to prompt customers to sign\r\n     * in. It can perform any necessary clean-up behind the scene, i.e.: remove\r\n     * DOM nodes or event handlers that are attached as a result of customer\r\n     * initialization.\r\n     *\r\n     * ```js\r\n     * await service.deinitializeCustomer({\r\n     *     methodId: 'amazonpay',\r\n     * });\r\n     * ```\r\n     *\r\n     * @param options - Options for deinitializing the customer step of checkout.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    deinitializeCustomer(options?: CustomerRequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Sends a email that contains a single-use sign-in link. When a valid links is clicked,\r\n     * signs in the customer without requiring any password, redirecting them to the account page if no redirectUrl is provided.\r\n     *\r\n     *\r\n     * ```js\r\n     * checkoutService.sendSignInEmail({ email: 'foo@bar.com', redirectUrl: 'checkout' });\r\n     * ```\r\n     *\r\n     * @param signInEmailRequest - The sign-in email request values.\r\n     * @param options - Options for the send email request.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    sendSignInEmail(signInEmailRequest: SignInEmailRequestBody, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Retrieves a B2B authentication token for the current customer.\r\n     *\r\n     * The token can be used to authenticate requests to B2B REST and GraphQL\r\n     * endpoints. The customer must be signed in for this method to succeed.\r\n     * The B2B base URL and client ID are read from the checkout settings config.\r\n     *\r\n     * ```js\r\n     * const state = await service.getB2BToken();\r\n     *\r\n     * console.log(state.data.getB2BToken());\r\n     * ```\r\n     *\r\n     * @param options - Options for the request.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    getB2BToken(options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Creates a customer account.\r\n     *\r\n     * @remarks\r\n     * ```js\r\n     * checkoutService.createCustomerAccount({\r\n     *   email: 'foo@bar.com',\r\n     *   firstName: 'Foo',\r\n     *   lastName: 'Bar',\r\n     *   password: 'password',\r\n     *   acceptsMarketingEmails: true,\r\n     *   customFields: [],\r\n     * });\r\n     * ```\r\n     * Please note that `createCustomerAccount` is currently in an early stage\r\n     * of development. Therefore the API is unstable and not ready for public\r\n     * consumption.\r\n     *\r\n     * @alpha\r\n     * @param customerAccount - The customer account data.\r\n     * @param options - Options for creating customer account.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    createCustomerAccount(customerAccount: CustomerAccountRequestBody, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Creates a customer account address.\r\n     *\r\n     * @remarks\r\n     * ```js\r\n     * checkoutService.createCustomerAddress({\r\n     *   firstName: 'Foo',\r\n     *   lastName: 'Bar',\r\n     *   address1: '55 Market St',\r\n     *   stateOrProvinceCode: 'CA',\r\n     *   countryCode: 'US',\r\n     *   postalCode: '90110',\r\n     *   customFields: [],\r\n     * });\r\n     * ```\r\n     * Please note that `createCustomerAccountAddress` is currently in an early stage\r\n     * of development. Therefore the API is unstable and not ready for public\r\n     * consumption.\r\n     *\r\n     * @alpha\r\n     * @param customerAddress - The customer account data.\r\n     * @param options - Options for creating customer account.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    createCustomerAddress(customerAddress: CustomerAddressRequestBody, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Updates the subscriptions associated to an email.\r\n     *\r\n     * @param subscriptions - The email and associated subscriptions to update.\r\n     * @param options - Options for continuing as a guest.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    updateSubscriptions(subscriptions: Subscriptions, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Continues to check out as a guest.\r\n     *\r\n     * If your Checkout Settings allow it, your customers could continue the checkout as guests (without signing in).\r\n     * If you have enabled the checkout setting \"Prompt existing accounts to sign in\", this information is\r\n     * exposed as part of the [Customer](../interfaces/customer.md) object.\r\n     *\r\n     * Once they provide their email address, it will be stored as\r\n     * part of their [billing address](../interfaces/billingaddress.md).\r\n     *\r\n     * @param credentials - The guest credentials to use, with optional subscriptions.\r\n     * @param options - Options for continuing as a guest.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    continueAsGuest(credentials: GuestCredentials, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Signs into a customer's registered account.\r\n     *\r\n     * Once the customer is signed in successfully, the checkout state will be\r\n     * populated with information associated with the customer, such as their\r\n     * saved addresses. You can call `CheckoutStoreSelector#getCustomer` to\r\n     * retrieve the data.\r\n     *\r\n     * ```js\r\n     * const state = await service.signInCustomer({\r\n     *     email: 'foo@bar.com',\r\n     *     password: 'password123',\r\n     * });\r\n     *\r\n     * console.log(state.data.getCustomer());\r\n     * ```\r\n     *\r\n     * @param credentials - The credentials to be used for signing in the customer.\r\n     * @param options - Options for signing in the customer.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    signInCustomer(credentials: CustomerCredentials, options?: CustomerRequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Signs out the current customer if they are previously signed in.\r\n     *\r\n     * Once the customer is successfully signed out, the checkout state will be\r\n     * reset automatically.\r\n     *\r\n     * ```js\r\n     * const state = await service.signOutCustomer();\r\n     *\r\n     * // The returned object should not contain information about the previously signed-in customer.\r\n     * console.log(state.data.getCustomer());\r\n     * ```\r\n     *\r\n     * When a store has \"Allow customers to access their cart across multiple devices\" enabled, signing out\r\n     * will remove the cart/checkout data from the current session. An error with type=\"checkout_not_available\" will be thrown.\r\n     *\r\n     * ```js\r\n     * try {\r\n     *   await service.signOutCustomer();\r\n     * } catch (error) {\r\n     *   if (error.type === 'checkout_not_available') {\r\n     *     window.top.location.assign('/');\r\n     *   }\r\n     * }\r\n     * ```\r\n     *\r\n     * @param options - Options for signing out the customer.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    signOutCustomer(options?: CustomerRequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Executes custom checkout of the priority payment method.\r\n     *\r\n     * Some payment methods, such as Bolt, can use their own checkout\r\n     * with autofilled customers data, to make checkout passing process\r\n     * easier and faster for customers with Bolt account.\r\n     *\r\n     * ```js\r\n     * await service.executePaymentMethodCheckout({\r\n     *     methodId: 'bolt',\r\n     *     fallback: () => {},\r\n     * });\r\n     * ```\r\n     *\r\n     * @param options - Options for executing payment method checkout.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Loads a list of shipping options available for checkout.\r\n     *\r\n     * Available shipping options can only be determined once a customer\r\n     * provides their shipping address. If the method is executed successfully,\r\n     * `CheckoutStoreSelector#getShippingOptions` can be called to retrieve the\r\n     * list of shipping options.\r\n     *\r\n     * ```js\r\n     * const state = await service.loadShippingOptions();\r\n     *\r\n     * console.log(state.data.getShippingOptions());\r\n     * ```\r\n     *\r\n     * @param options - Options for loading the available shipping options.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    loadShippingOptions(options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Initializes the shipping step of a checkout process.\r\n     *\r\n     * Some payment methods, such as Amazon Pay, can provide shipping\r\n     * information to be used for checkout. In order to support them, this\r\n     * method must be called.\r\n     *\r\n     * ```js\r\n     * await service.initializeShipping({\r\n     *     methodId: 'amazonpay',\r\n     *     amazonpay: {\r\n     *         editAddressButtonId: 'changeAddressButton',\r\n     *     },\r\n     * });\r\n     * ```\r\n     *\r\n     * @param options - Options for initializing the shipping step of checkout.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    initializeShipping(options?: ShippingInitializeOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * De-initializes the shipping step of a checkout process.\r\n     *\r\n     * It should be called once you no longer need to collect shipping details.\r\n     * It can perform any necessary clean-up behind the scene, i.e.: remove DOM\r\n     * nodes or event handlers that are attached as a result of shipping\r\n     * initialization.\r\n     *\r\n     * ```js\r\n     * await service.deinitializeShipping({\r\n     *     methodId: 'amazonpay',\r\n     * });\r\n     * ```\r\n     *\r\n     * @param options - Options for deinitializing the shipping step of checkout.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    deinitializeShipping(options?: ShippingRequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Selects a shipping option for the current address.\r\n     *\r\n     * If a shipping option has an additional cost, the quote for the current\r\n     * order will be adjusted once the option is selected.\r\n     *\r\n     * ```js\r\n     * const state = await service.selectShippingOption('address-id', 'shipping-option-id');\r\n     *\r\n     * console.log(state.data.getSelectedShippingOption());\r\n     * ```\r\n     *\r\n     * @param shippingOptionId - The identifier of the shipping option to\r\n     * select.\r\n     * @param options - Options for selecting the shipping option.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    selectShippingOption(shippingOptionId: string, options?: ShippingRequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Updates the shipping address for the current checkout.\r\n     *\r\n     * When a customer updates their shipping address for an order, they will\r\n     * see an updated list of shipping options and the cost for each option,\r\n     * unless no options are available. If the update is successful, you can\r\n     * call `CheckoutStoreSelector#getShippingAddress` to retrieve the address.\r\n     *\r\n     * If the shipping address changes and the selected shipping option becomes\r\n     * unavailable for the updated address, the shipping option will be\r\n     * deselected.\r\n     *\r\n     * You can submit an address that is partially complete. The address does\r\n     * not get validated until you submit the order.\r\n     *\r\n     * ```js\r\n     * const state = await service.updateShippingAddress(address);\r\n     *\r\n     * console.log(state.data.getShippingAddress());\r\n     * ```\r\n     *\r\n     * @param address - The address to be used for shipping.\r\n     * @param options - Options for updating the shipping address.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    updateShippingAddress(address: Partial<AddressRequestBody>, options?: ShippingRequestOptions<CheckoutParams>): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Creates consignments given a list.\r\n     *\r\n     * Note: this is used when items need to be shipped to multiple addresses,\r\n     * for single shipping address, use `CheckoutService#updateShippingAddress`.\r\n     *\r\n     * When consignments are created, an updated list of shipping options will\r\n     * become available for each consignment, unless no options are available.\r\n     * If the update is successful, you can call\r\n     * `CheckoutStoreSelector#getConsignments` to retrieve the updated list of\r\n     * consignments.'\r\n     *\r\n     * Beware that if a consignment includes all line items from another\r\n     * consignment, that consignment will be deleted as a valid consignment must\r\n     * include at least one valid line item.\r\n     *\r\n     * You can submit an address that is partially complete. The address does\r\n     * not get validated until you submit the order.\r\n     *\r\n     * ```js\r\n     * const state = await service.createConsignments(consignments);\r\n     *\r\n     * console.log(state.data.getConsignments());\r\n     * ```\r\n     *\r\n     * @param consignments - The list of consignments to be created.\r\n     * @param options - Options for updating the shipping address.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    createConsignments(consignments: ConsignmentsRequestBody, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Deletes a consignment\r\n     *\r\n     * ```js\r\n     * const state = await service.deleteConsignment('55c96cda6f04c');\r\n     *\r\n     * console.log(state.data.getConsignments());\r\n     * ```\r\n     *\r\n     * @param consignmentId - The ID of the consignment to be deleted\r\n     * @param options - Options for the consignment delete request\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    deleteConsignment(consignmentId: string, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Updates a specific consignment.\r\n     *\r\n     * Note: this is used when items need to be shipped to multiple addresses,\r\n     * for single shipping address, use `CheckoutService#selectShippingOption`.\r\n     *\r\n     * When a shipping address for a consignment is updated, an updated list of\r\n     * shipping options will become available for the consignment, unless no\r\n     * options are available. If the update is successful, you can call\r\n     * `CheckoutStoreSelector#getConsignments` to retrieve updated list of\r\n     * consignments.\r\n     *\r\n     * Beware that if the updated consignment includes all line items from another\r\n     * consignment, that consignment will be deleted as a valid consignment must\r\n     * include at least one valid line item.\r\n     *\r\n     * If the shipping address changes and the selected shipping option becomes\r\n     * unavailable for the updated address, the shipping option will be\r\n     * deselected.\r\n     *\r\n     * You can submit an address that is partially complete. The address does\r\n     * not get validated until you submit the order.\r\n     *\r\n     * ```js\r\n     * const state = await service.updateConsignment(consignment);\r\n     *\r\n     * console.log(state.data.getConsignments());\r\n     * ```\r\n     *\r\n     * @param consignment - The consignment data that will be used.\r\n     * @param options - Options for updating the shipping address.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    updateConsignment(consignment: ConsignmentUpdateRequestBody, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Convenience method that assigns items to be shipped to a specific address.\r\n     *\r\n     * Note: this method finds an existing consignment that matches the provided address\r\n     * and assigns the provided items. If no consignment matches the address, a new one\r\n     * will be created.\r\n     *\r\n     * @param consignment - The consignment data that will be used.\r\n     * @param options - Options for the request\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    assignItemsToAddress(consignment: ConsignmentAssignmentRequestBody, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Convenience method that unassigns items from a specific shipping address.\r\n     *\r\n     * Note: this method finds an existing consignment that matches the provided address\r\n     * and unassigns the specified items. If the consignment ends up with no line items\r\n     * after the unassignment, it will be deleted.\r\n     *\r\n     * @param consignment - The consignment data that will be used.\r\n     * @param options - Options for the request\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    unassignItemsToAddress(consignment: ConsignmentAssignmentRequestBody, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Selects a shipping option for a given consignment.\r\n     *\r\n     * Note: this is used when items need to be shipped to multiple addresses,\r\n     * for single shipping address, use `CheckoutService#updateShippingAddress`.\r\n     *\r\n     * If a shipping option has an additional cost, the quote for the current\r\n     * order will be adjusted once the option is selected.\r\n     *\r\n     * ```js\r\n     * const state = await service.selectConsignmentShippingOption(consignmentId, optionId);\r\n     *\r\n     * console.log(state.data.getConsignments());\r\n     * ```\r\n     *\r\n     * @param consignmentId - The identified of the consignment to be updated.\r\n     * @param shippingOptionId - The identifier of the shipping option to\r\n     * select.\r\n     * @param options - Options for selecting the shipping option.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    selectConsignmentShippingOption(consignmentId: string, shippingOptionId: string, options?: ShippingRequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Updates the billing address for the current checkout.\r\n     *\r\n     * A customer must provide their billing address before they can proceed to\r\n     * pay for their order.\r\n     *\r\n     * You can submit an address that is partially complete. The address does\r\n     * not get validated until you submit the order.\r\n     *\r\n     * ```js\r\n     * const state = await service.updateBillingAddress(address);\r\n     *\r\n     * console.log(state.data.getBillingAddress());\r\n     * ```\r\n     *\r\n     * @param address - The address to be used for billing.\r\n     * @param options - Options for updating the billing address.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    updateBillingAddress(address: Partial<BillingAddressRequestBody>, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Applies or removes customer's store credit code to the current checkout.\r\n     *\r\n     * Once the store credit gets applied, the outstanding balance will be adjusted accordingly.\r\n     *\r\n     * ```js\r\n     * const state = await service.applyStoreCredit(true);\r\n     *\r\n     * console.log(state.data.getCheckout().outstandingBalance);\r\n     * ```\r\n     *\r\n     * @param options - Options for applying store credit.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    applyStoreCredit(useStoreCredit: boolean, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Applies a coupon code to the current checkout.\r\n     *\r\n     * Once the coupon code gets applied, the quote for the current checkout will\r\n     * be adjusted accordingly. The same coupon code cannot be applied more than\r\n     * once.\r\n     *\r\n     * ```js\r\n     * await service.applyCoupon('COUPON');\r\n     * ```\r\n     *\r\n     * @param code - The coupon code to apply to the current checkout.\r\n     * @param options - Options for applying the coupon code.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    applyCoupon(code: string, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Removes a coupon code from the current checkout.\r\n     *\r\n     * Once the coupon code gets removed, the quote for the current checkout will\r\n     * be adjusted accordingly.\r\n     *\r\n     * ```js\r\n     * await service.removeCoupon('COUPON');\r\n     * ```\r\n     *\r\n     * @param code - The coupon code to remove from the current checkout.\r\n     * @param options - Options for removing the coupon code.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    removeCoupon(code: string, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Applies a gift certificate to the current checkout.\r\n     *\r\n     * Once the gift certificate gets applied, the quote for the current\r\n     * checkout will be adjusted accordingly.\r\n     *\r\n     * ```js\r\n     * await service.applyGiftCertificate('GIFT_CERTIFICATE');\r\n     * ```\r\n     *\r\n     * @param code - The gift certificate to apply to the current checkout.\r\n     * @param options - Options for applying the gift certificate.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    applyGiftCertificate(code: string, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Removes a gift certificate from an order.\r\n     *\r\n     * Once the gift certificate gets removed, the quote for the current\r\n     * checkout will be adjusted accordingly.\r\n     *\r\n     * ```js\r\n     * await service.removeGiftCertificate('GIFT_CERTIFICATE');\r\n     * ```\r\n     *\r\n     * @param code - The gift certificate to remove from the current checkout.\r\n     * @param options - Options for removing the gift certificate.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    removeGiftCertificate(code: string, options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Loads a list of payment instruments associated with a customer.\r\n     *\r\n     * Once the method has been called successfully, you can retrieve the list\r\n     * of payment instruments by calling `CheckoutStoreSelector#getInstruments`.\r\n     * If the customer does not have any payment instruments on record, i.e.:\r\n     * credit card, you will get an empty list instead.\r\n     *\r\n     * ```js\r\n     * const state = service.loadInstruments();\r\n     *\r\n     * console.log(state.data.getInstruments());\r\n     * ```\r\n     *\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    loadInstruments(): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Deletes a payment instrument by an id.\r\n     *\r\n     * Once an instrument gets removed, it can no longer be retrieved using\r\n     * `CheckoutStoreSelector#getInstruments`.\r\n     *\r\n     * ```js\r\n     * const state = service.deleteInstrument('123');\r\n     *\r\n     * console.log(state.data.getInstruments());\r\n     * ```\r\n     *\r\n     * @param instrumentId - The identifier of the payment instrument to delete.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    deleteInstrument(instrumentId: string): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Clear errors that have been collected from previous calls.\r\n     *\r\n     * ```js\r\n     * const state = await service.clearError(error);\r\n     *\r\n     * console.log(state.errors.getError());\r\n     * ```\r\n     *\r\n     * @param error - Specific error object to clear\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    clearError(error: Error): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Initializes the spam protection for order creation.\r\n     *\r\n     * Note: Use `CheckoutService#executeSpamCheck` instead.\r\n     * You do not need to call this method before calling\r\n     * `CheckoutService#executeSpamCheck`.\r\n     *\r\n     * With spam protection enabled, the customer has to be verified as\r\n     * a human. The order creation will fail if spam protection\r\n     * is enabled but verification fails.\r\n     *\r\n     * ```js\r\n     * await service.initializeSpamProtection();\r\n     * ```\r\n     *\r\n     * @param options - Options for initializing spam protection.\r\n     * @returns A promise that resolves to the current state.\r\n     * @deprecated - Use CheckoutService#executeSpamCheck instead.\r\n     */\r\n    initializeSpamProtection(options: SpamProtectionOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Verifies whether the current checkout is created by a human.\r\n     *\r\n     * Note: this method will do the initialization, therefore you do not\r\n     * need to call `CheckoutService#initializeSpamProtection`\r\n     * before calling this method.\r\n     *\r\n     * With spam protection enabled, the customer has to be verified as\r\n     * a human. The order creation will fail if spam protection\r\n     * is enabled but verification fails. You should call this method before\r\n     * `submitOrder` method is called (i.e.: when the shopper\r\n     * first gets to the payment step).\r\n     *\r\n     * **Note**: You need to enable Google ReCAPTCHA bot protection in your Checkout Settings.\r\n     *\r\n     * ```js\r\n     * await service.executeSpamCheck();\r\n     * ```\r\n     *\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    executeSpamCheck(): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Loads a list of extensions available for checkout.\r\n     *\r\n     * ```js\r\n     * const state = await service.loadExtensions();\r\n     *\r\n     * console.log(state.data.getExtensions());\r\n     * ```\r\n     *\r\n     * @alpha\r\n     * @param options - Options for loading the extensions that are\r\n     * available to the current customer.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    loadExtensions(options?: RequestOptions): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Renders an extension for a checkout extension region.\r\n     * Currently, only one extension is allowed per region.\r\n     *\r\n     * @alpha\r\n     * @param container - The ID of a container which the extension should be inserted.\r\n     * @param region - The name of an area where the extension should be presented.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    renderExtension(container: string, region: ExtensionRegion): Promise<CheckoutSelectors>;\r\n    /**\r\n     * Clear cache for a checkout extension when removing it from UI.\r\n     * This function should be used whenver an extension is removed from the UI.\r\n     *\r\n     * @alpha\r\n     * @param region - The name of an area where the extension should be presented.\r\n     */\r\n    clearExtensionCache(region: ExtensionRegion): void;\r\n    /**\r\n     * Posts a message to a checkout extension.\r\n     *\r\n     * @alpha\r\n     * @param extensionId - The ID of an extension to post the event to.\r\n     * @param message - The message to post to an extension.\r\n     */\r\n    postMessageToExtension(extensionId: string, message: ExtensionMessage): void;\r\n    /**\r\n     * Manages the command handler for an extension.\r\n     *\r\n     * @alpha\r\n     * @param extensionId - The ID of the extension sending the command.\r\n     * @param command - The command to be handled.\r\n     * @param handler - The handler function for the extension command.\r\n     * @returns A function that, when called, will deregister the command handler.\r\n     */\r\n    handleExtensionCommand<T extends keyof ExtensionCommandMap>(extensionId: string, command: T, handler: (command: ExtensionCommandMap[T]) => Promise<void> | void): () => void;\r\n    /**\r\n     * Manages the query handler for an extension.\r\n     *\r\n     * @alpha\r\n     * @param extensionId - The ID of the extension sending the query.\r\n     * @param query - The query to be handled.\r\n     * @param handler - The handler function for the extension query.\r\n     * @returns A function that, when called, will deregister the query handler.\r\n     */\r\n    handleExtensionQuery<T extends keyof ExtensionQueryMap>(extensionId: string, query: T, handler: (command: ExtensionQueryMap[T]) => Promise<void> | void): () => void;\r\n    /**\r\n     * Dispatches an action through the data store and returns the current state\r\n     * once the action is dispatched.\r\n     *\r\n     * @param action - The action to dispatch.\r\n     * @returns A promise that resolves to the current state.\r\n     */\r\n    private _dispatch;\r\n}\r\n\r\ndeclare interface CheckoutServiceOptions {\r\n    locale?: string;\r\n    host?: string;\r\n    shouldWarnMutation?: boolean;\r\n    externalSource?: string;\r\n    errorLogger?: ErrorLogger;\r\n}\r\n\r\ndeclare interface CheckoutSettings {\r\n    capabilities?: Capabilities;\r\n    features: {\r\n        [featureName: string]: boolean;\r\n    };\r\n    checkoutBillingSameAsShippingEnabled: boolean;\r\n    checkoutUserExperienceSettings: UserExperienceSettings;\r\n    enableOrderComments: boolean;\r\n    enableTermsAndConditions: boolean;\r\n    googleMapsApiKey: string;\r\n    googleRecaptchaSitekey: string;\r\n    isAccountCreationEnabled: boolean;\r\n    isStorefrontSpamProtectionEnabled: boolean;\r\n    guestCheckoutEnabled: boolean;\r\n    hasMultiShippingEnabled: boolean;\r\n    isAnalyticsEnabled: boolean;\r\n    isCardVaultingEnabled: boolean;\r\n    isCouponCodeCollapsed: boolean;\r\n    isExpressPrivacyPolicy: boolean;\r\n    isSignInEmailEnabled: boolean;\r\n    isPaymentRequestEnabled: boolean;\r\n    isPaymentRequestCanMakePaymentEnabled: boolean;\r\n    isSpamProtectionEnabled: boolean;\r\n    isTrustedShippingAddressEnabled: boolean;\r\n    orderTermsAndConditions: string;\r\n    orderTermsAndConditionsLocation: string;\r\n    orderTermsAndConditionsLink: string;\r\n    orderTermsAndConditionsType: string;\r\n    privacyPolicyUrl: string;\r\n    providerWithCustomCheckout: string | null;\r\n    shippingQuoteFailedMessage: string;\r\n    realtimeShippingProviders: string[];\r\n    requiresMarketingConsent: boolean;\r\n    remoteCheckoutProviders: any[];\r\n    shouldRedirectToStorefrontForAuth: boolean;\r\n}\r\n\r\n/**\r\n * Responsible for getting the error of any asynchronous checkout action, if\r\n * there is any.\r\n *\r\n * This object has a set of getters that would return an error if an action is\r\n * not executed successfully. For example, if you are unable to submit an order,\r\n * you can use this object to retrieve the reason for the failure.\r\n */\r\ndeclare interface CheckoutStoreErrorSelector {\r\n    getError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to load the current checkout.\r\n     *\r\n     * @returns The error object if unable to load, otherwise undefined.\r\n     */\r\n    getLoadCheckoutError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to update the current checkout.\r\n     *\r\n     * @returns The error object if unable to update, otherwise undefined.\r\n     */\r\n    getUpdateCheckoutError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to submit the current order.\r\n     *\r\n     * @returns The error object if unable to submit, otherwise undefined.\r\n     */\r\n    getSubmitOrderError(): Error | CartChangedError | CartConsistencyError | CartStockPositionsChangedError | undefined;\r\n    /**\r\n     * Returns an error if unable to finalize the current order.\r\n     *\r\n     * @returns The error object if unable to finalize, otherwise undefined.\r\n     */\r\n    getFinalizeOrderError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to load the current order.\r\n     *\r\n     * @returns The error object if unable to load, otherwise undefined.\r\n     */\r\n    getLoadOrderError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to load the current cart.\r\n     *\r\n     * @returns The error object if unable to load, otherwise undefined.\r\n     */\r\n    getLoadCartError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to load billing countries.\r\n     *\r\n     * @returns The error object if unable to load, otherwise undefined.\r\n     */\r\n    getLoadBillingCountriesError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to load shipping countries.\r\n     *\r\n     * @returns The error object if unable to load, otherwise undefined.\r\n     */\r\n    getLoadShippingCountriesError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to load payment methods.\r\n     *\r\n     * @returns The error object if unable to load, otherwise undefined.\r\n     */\r\n    getLoadPaymentMethodsError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to load a specific payment method.\r\n     *\r\n     * @param methodId - The identifier of the payment method to load.\r\n     * @returns The error object if unable to load, otherwise undefined.\r\n     */\r\n    getLoadPaymentMethodError(methodId?: string): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to initialize a specific payment method.\r\n     *\r\n     * @param methodId - The identifier of the payment method to initialize.\r\n     * @returns The error object if unable to initialize, otherwise undefined.\r\n     */\r\n    getInitializePaymentError(methodId?: string): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to sign in.\r\n     *\r\n     * @returns The error object if unable to sign in, otherwise undefined.\r\n     */\r\n    getSignInError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to sign out.\r\n     *\r\n     * @returns The error object if unable to sign out, otherwise undefined.\r\n     */\r\n    getSignOutError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to initialize the customer step of a checkout\r\n     * process.\r\n     *\r\n     * @param methodId - The identifer of the initialization method to execute.\r\n     * @returns The error object if unable to initialize, otherwise undefined.\r\n     */\r\n    getInitializeCustomerError(methodId?: string): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to load shipping options.\r\n     *\r\n     * @returns The error object if unable to load, otherwise undefined.\r\n     */\r\n    getLoadShippingOptionsError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to select a shipping option.\r\n     *\r\n     * A consignment ID should be provided when checking for an error for a\r\n     * specific consignment, otherwise it will check for all available consignments.\r\n     *\r\n     * @param consignmentId - The identifier of the consignment to be checked.\r\n     * @returns The error object if unable to select, otherwise undefined.\r\n     */\r\n    getSelectShippingOptionError(consignmentId?: string): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to continue as guest.\r\n     *\r\n     * The call could fail in scenarios where guest checkout is not allowed, for example, when existing accounts are required to sign-in.\r\n     *\r\n     * In the background, this call tries to set the billing address email using the Storefront API. You could access the Storefront API response status code using `getContinueAsGuestError` error selector.\r\n     *\r\n     * ```js\r\n     * console.log(state.errors.getContinueAsGuestError());\r\n     * console.log(state.errors.getContinueAsGuestError().status);\r\n     * ```\r\n     *\r\n     * For more information about status codes, check [Checkout Storefront API - Add Checkout Billing Address](https://developer.bigcommerce.com/api-reference/cart-checkout/storefront-checkout-api/checkout-billing-address/checkoutsbillingaddressbycheckoutidpost).\r\n     *\r\n     * @returns The error object if unable to continue, otherwise undefined.\r\n     */\r\n    getContinueAsGuestError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to update billing address.\r\n     *\r\n     * @returns The error object if unable to update, otherwise undefined.\r\n     */\r\n    getUpdateBillingAddressError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to update subscriptions.\r\n     *\r\n     * @returns The error object if unable to update, otherwise undefined.\r\n     */\r\n    getUpdateSubscriptionsError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to update shipping address.\r\n     *\r\n     * @returns The error object if unable to update, otherwise undefined.\r\n     */\r\n    getUpdateShippingAddressError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to delete a consignment.\r\n     *\r\n     * A consignment ID should be provided when checking for an error for a\r\n     * specific consignment, otherwise it will check for all available consignments.\r\n     *\r\n     * @param consignmentId - The identifier of the consignment to be checked.\r\n     * @returns The error object if unable to delete, otherwise undefined.\r\n     */\r\n    getDeleteConsignmentError(consignmentId?: string): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to update a consignment.\r\n     *\r\n     * A consignment ID should be provided when checking for an error for a\r\n     * specific consignment, otherwise it will check for all available consignments.\r\n     *\r\n     * @param consignmentId - The identifier of the consignment to be checked.\r\n     * @returns The error object if unable to update, otherwise undefined.\r\n     */\r\n    getUpdateConsignmentError(consignmentId?: string): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to create consignments.\r\n     *\r\n     * @returns The error object if unable to create, otherwise undefined.\r\n     */\r\n    getCreateConsignmentsError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to initialize the shipping step of a checkout\r\n     * process.\r\n     *\r\n     * @param methodId - The identifer of the initialization method to execute.\r\n     * @returns The error object if unable to initialize, otherwise undefined.\r\n     */\r\n    getInitializeShippingError(methodId?: string): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to apply store credit.\r\n     *\r\n     * @returns The error object if unable to apply, otherwise undefined.\r\n     */\r\n    getApplyStoreCreditError(): RequestError | undefined;\r\n    /**\r\n     * Returns an error if unable to apply a coupon code.\r\n     *\r\n     * @returns The error object if unable to apply, otherwise undefined.\r\n     */\r\n    getApplyCouponError(): RequestError | undefined;\r\n    /**\r\n     * Returns an error if unable to remove a coupon code.\r\n     *\r\n     * @returns The error object if unable to remove, otherwise undefined.\r\n     */\r\n    getRemoveCouponError(): RequestError | undefined;\r\n    /**\r\n     * Returns an error if unable to apply a gift certificate.\r\n     *\r\n     * @returns The error object if unable to apply, otherwise undefined.\r\n     */\r\n    getApplyGiftCertificateError(): RequestError | undefined;\r\n    /**\r\n     * Returns an error if unable to remove a gift certificate.\r\n     *\r\n     * @returns The error object if unable to remove, otherwise undefined.\r\n     */\r\n    getRemoveGiftCertificateError(): RequestError | undefined;\r\n    /**\r\n     * Returns an error if unable to load payment instruments.\r\n     *\r\n     * @returns The error object if unable to load, otherwise undefined.\r\n     */\r\n    getLoadInstrumentsError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to delete a payment instrument.\r\n     *\r\n     * @param instrumentId - The identifier of the payment instrument to delete.\r\n     * @returns The error object if unable to delete, otherwise undefined.\r\n     */\r\n    getDeleteInstrumentError(instrumentId?: string): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to load the checkout configuration of a store.\r\n     *\r\n     * @returns The error object if unable to load, otherwise undefined.\r\n     */\r\n    getLoadConfigError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to send sign-in email.\r\n     *\r\n     * @returns The error object if unable to send email, otherwise undefined.\r\n     */\r\n    getSignInEmailError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to load the B2B token.\r\n     *\r\n     * @returns The error object if unable to load the B2B token, otherwise undefined.\r\n     */\r\n    getLoadB2BTokenError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to create customer account.\r\n     *\r\n     * @returns The error object if unable to create account, otherwise undefined.\r\n     */\r\n    getCreateCustomerAccountError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to create customer address.\r\n     *\r\n     * @returns The error object if unable to create address, otherwise undefined.\r\n     */\r\n    getCreateCustomerAddressError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to fetch pickup options.\r\n     *\r\n     * @returns The error object if unable to fetch pickup options, otherwise undefined.\r\n     */\r\n    getPickupOptionsError(): Error | undefined;\r\n    /**\r\n     * Returns an error if unable to fetch extensions.\r\n     *\r\n     * @alpha\r\n     * @returns The error object if unable to fetch extensions, otherwise undefined.\r\n     */\r\n    getLoadExtensionsError(): Error | undefined;\r\n}\r\n\r\n/**\r\n * Responsible for getting the state of the current checkout.\r\n *\r\n * This object has a set of methods that allow you to get a specific piece of\r\n * checkout information, such as shipping and billing details.\r\n */\r\ndeclare interface CheckoutStoreSelector {\r\n    /**\r\n     * Gets the current checkout.\r\n     *\r\n     * @returns The current checkout if it is loaded, otherwise undefined.\r\n     */\r\n    getCheckout(): Checkout | undefined;\r\n    /**\r\n     * Gets the current order.\r\n     *\r\n     * @returns The current order if it is loaded, otherwise undefined.\r\n     */\r\n    getOrder(): Order | undefined;\r\n    /**\r\n     * Gets the checkout configuration of a store.\r\n     *\r\n     * @returns The configuration object if it is loaded, otherwise undefined.\r\n     */\r\n    getConfig(): StoreConfig | undefined;\r\n    /**\r\n     * Gets the sign-in email.\r\n     *\r\n     * @returns The sign-in email object if sent, otherwise undefined\r\n     */\r\n    getSignInEmail(): SignInEmail | undefined;\r\n    /**\r\n     * Gets the B2B authentication token for the current customer.\r\n     *\r\n     * @returns The B2B token string if it has been loaded, otherwise undefined.\r\n     */\r\n    getB2BToken(): string | undefined;\r\n    /**\r\n     * Gets the shipping address of the current checkout.\r\n     *\r\n     * If the address is partially complete, it may not have shipping options\r\n     * associated with it.\r\n     *\r\n     * @returns The shipping address object if it is loaded, otherwise\r\n     * undefined.\r\n     */\r\n    getShippingAddress(): Address | undefined;\r\n    /**\r\n     * Gets a list of shipping options available for the shipping address.\r\n     *\r\n     * If there is no shipping address assigned to the current checkout, the\r\n     * list of shipping options will be empty.\r\n     *\r\n     * @returns The list of shipping options if any, otherwise undefined.\r\n     */\r\n    getShippingOptions(): ShippingOption[] | undefined;\r\n    /**\r\n     * Gets a list of consignments.\r\n     *\r\n     * If there are no consignments created for to the current checkout, the\r\n     * list will be empty.\r\n     *\r\n     * @returns The list of consignments if any, otherwise undefined.\r\n     */\r\n    getConsignments(): Consignment[] | undefined;\r\n    /**\r\n     * Gets the selected shipping option for the current checkout.\r\n     *\r\n     * @returns The shipping option object if there is a selected option,\r\n     * otherwise undefined.\r\n     */\r\n    getSelectedShippingOption(): ShippingOption | undefined;\r\n    /**\r\n     * Gets a list of countries available for shipping.\r\n     *\r\n     * @returns The list of countries if it is loaded, otherwise undefined.\r\n     */\r\n    getShippingCountries(): Country[] | undefined;\r\n    /**\r\n     * Gets the billing address of an order.\r\n     *\r\n     * @returns The billing address object if it is loaded, otherwise undefined.\r\n     */\r\n    getBillingAddress(): BillingAddress | undefined;\r\n    /**\r\n     * Gets a list of countries available for billing.\r\n     *\r\n     * @returns The list of countries if it is loaded, otherwise undefined.\r\n     */\r\n    getBillingCountries(): Country[] | undefined;\r\n    /**\r\n     * Gets a list of payment methods available for checkout.\r\n     *\r\n     * @returns The list of payment methods if it is loaded, otherwise undefined.\r\n     */\r\n    getPaymentMethods(): PaymentMethod[] | undefined;\r\n    /**\r\n     * Gets a payment method by an id.\r\n     *\r\n     * The method returns undefined if unable to find a payment method with the\r\n     * specified id, either because it is not available for the customer, or it\r\n     * is not loaded.\r\n     *\r\n     * @param methodId - The identifier of the payment method.\r\n     * @param gatewayId - The identifier of a payment provider providing the\r\n     * payment method.\r\n     * @returns The payment method object if loaded and available, otherwise,\r\n     * undefined.\r\n     */\r\n    getPaymentMethod(methodId: string, gatewayId?: string): PaymentMethod | undefined;\r\n    /**\r\n     * Gets the payment method that is selected for checkout.\r\n     *\r\n     * @returns The payment method object if there is a selected method;\r\n     * undefined if otherwise.\r\n     */\r\n    getSelectedPaymentMethod(): PaymentMethod | undefined;\r\n    /**\r\n     * Gets the available flash messages.\r\n     *\r\n     * Flash messages contain messages set by the server,\r\n     * e.g: when trying to sign in using an invalid email link.\r\n     *\r\n     * @param type - The type of flash messages to be returned. Optional\r\n     * @returns The flash messages if available, otherwise undefined.\r\n     */\r\n    getFlashMessages(type?: FlashMessageType): FlashMessage[] | undefined;\r\n    /**\r\n     * Gets the current cart.\r\n     *\r\n     * @returns The current cart object if it is loaded, otherwise undefined.\r\n     */\r\n    getCart(): Cart | undefined;\r\n    /**\r\n     * Gets a list of coupons that are applied to the current checkout.\r\n     *\r\n     * @returns The list of applied coupons if there is any, otherwise undefined.\r\n     */\r\n    getCoupons(): Coupon[] | undefined;\r\n    /**\r\n     * Gets a list of gift certificates that are applied to the current checkout.\r\n     *\r\n     * @returns The list of applied gift certificates if there is any, otherwise undefined.\r\n     */\r\n    getGiftCertificates(): GiftCertificate[] | undefined;\r\n    /**\r\n     * Gets the current customer.\r\n     *\r\n     * @returns The current customer object if it is loaded, otherwise\r\n     * undefined.\r\n     */\r\n    getCustomer(): Customer | undefined;\r\n    /**\r\n     * Checks if payment data is required or not.\r\n     *\r\n     * If payment data is required, customers should be prompted to enter their\r\n     * payment details.\r\n     *\r\n     * ```js\r\n     * if (state.checkout.isPaymentDataRequired()) {\r\n     *     // Render payment form\r\n     * } else {\r\n     *     // Render \"Payment is not required for this order\" message\r\n     * }\r\n     * ```\r\n     *\r\n     * @param useStoreCredit - If true, check whether payment data is required\r\n     * with store credit applied; otherwise, check without store credit.\r\n     * @returns True if payment data is required, otherwise false.\r\n     */\r\n    isPaymentDataRequired(useStoreCredit?: boolean): boolean;\r\n    /**\r\n     * Checks if payment data is submitted or not.\r\n     *\r\n     * If payment data is already submitted using a payment method, customers\r\n     * should not be prompted to enter their payment details again.\r\n     *\r\n     * @param methodId - The identifier of the payment method.\r\n     * @param gatewayId - The identifier of a payment provider providing the\r\n     * payment method.\r\n     * @returns True if payment data is submitted, otherwise false.\r\n     */\r\n    isPaymentDataSubmitted(methodId: string, gatewayId?: string): boolean;\r\n    /**\r\n     * Gets a list of payment instruments associated with the current customer.\r\n     *\r\n     * @returns The list of payment instruments if it is loaded, otherwise undefined.\r\n     */\r\n    getInstruments(): Instrument[] | undefined;\r\n    getInstruments(paymentMethod: PaymentMethod): PaymentInstrument[] | undefined;\r\n    /**\r\n     * Gets a set of form fields that should be presented in order to create a customer.\r\n     *\r\n     * @returns The set of customer account form fields if it is loaded,\r\n     * otherwise undefined.\r\n     */\r\n    getCustomerAccountFields(): FormField[];\r\n    /**\r\n     * Gets a set of form fields that should be presented to customers in order\r\n     * to capture their billing address for a specific country.\r\n     *\r\n     * @param countryCode - A 2-letter country code (ISO 3166-1 alpha-2).\r\n     * @returns The set of billing address form fields if it is loaded,\r\n     * otherwise undefined.\r\n     */\r\n    getBillingAddressFields(countryCode: string): FormField[];\r\n    /**\r\n     * Gets a set of form fields that should be presented to customers in order\r\n     * to capture their shipping address for a specific country.\r\n     *\r\n     * @param countryCode - A 2-letter country code (ISO 3166-1 alpha-2).\r\n     * @returns The set of shipping address form fields if it is loaded,\r\n     * otherwise undefined.\r\n     */\r\n    getShippingAddressFields(countryCode: string): FormField[];\r\n    /**\r\n     * Gets address extra fields.\r\n     *\r\n     * @returns The list of extra fields if available, otherwise an empty array.\r\n     */\r\n    getAddressExtraFields(): FormField[];\r\n    /**\r\n     * Gets order extra fields.\r\n     *\r\n     * @returns The list of extra fields if available, otherwise an empty array.\r\n     */\r\n    getOrderExtraFields(): FormField[];\r\n    /**\r\n     * Gets a list of pickup options for specified parameters.\r\n     *\r\n     * @param consignmentId - Id of consignment.\r\n     * @param searchArea - An object containing of radius and co-ordinates.\r\n     * @returns The set of shipping address form fields if it is loaded,\r\n     * otherwise undefined.\r\n     */\r\n    getPickupOptions(consignmentId: string, searchArea: SearchArea): PickupOptionResult[] | undefined;\r\n    /**\r\n     * Gets user experience settings.\r\n     *\r\n     * @returns The object of user experience settings if it is loaded, otherwise undefined.\r\n     */\r\n    getUserExperienceSettings(): UserExperienceSettings | undefined;\r\n    /**\r\n     * Gets a list of extensions available for checkout.\r\n     *\r\n     * @alpha\r\n     * @returns The list of extensions if it is loaded, otherwise undefined.\r\n     */\r\n    getExtensions(): Extension[] | undefined;\r\n    /**\r\n     * Gets payment provider customers data.\r\n     *\r\n     * @alpha\r\n     * @returns The object with payment provider customer data\r\n     */\r\n    getPaymentProviderCustomer(): PaymentProviderCustomer | undefined;\r\n    /**\r\n     * Gets the extension associated with a given region.\r\n     *\r\n     * @alpha\r\n     * @param region - A checkout extension region.\r\n     * @returns The extension corresponding to the specified region, otherwise undefined.\r\n     */\r\n    getExtensionByRegion(region: ExtensionRegion): Extension | undefined;\r\n}\r\n\r\n/**\r\n * Responsible for checking the statuses of various asynchronous actions related\r\n * to checkout.\r\n *\r\n * This object has a set of getters that return true if an action is in\r\n * progress. For example, you can check whether a customer is submitting an\r\n * order and waiting for the request to complete.\r\n */\r\ndeclare interface CheckoutStoreStatusSelector {\r\n    /**\r\n     * Checks whether any checkout action is pending.\r\n     *\r\n     * @returns True if there is a pending action, otherwise false.\r\n     */\r\n    isPending(): boolean;\r\n    /**\r\n     * Checks whether the current checkout is loading.\r\n     *\r\n     * @returns True if the current checkout is loading, otherwise false.\r\n     */\r\n    isLoadingCheckout(): boolean;\r\n    /**\r\n     * Checks whether the current checkout is being updated.\r\n     *\r\n     * @returns True if the current checkout is being updated, otherwise false.\r\n     */\r\n    isUpdatingCheckout(): boolean;\r\n    /**\r\n     * Checks whether spam check is executing.\r\n     *\r\n     * @returns True if the current checkout is being updated, otherwise false.\r\n     */\r\n    isExecutingSpamCheck(): boolean;\r\n    /**\r\n     * Checks whether the current order is submitting.\r\n     *\r\n     * @returns True if the current order is submitting, otherwise false.\r\n     */\r\n    isSubmittingOrder(): boolean;\r\n    /**\r\n     * Checks whether the current order is finalizing.\r\n     *\r\n     * @returns True if the current order is finalizing, otherwise false.\r\n     */\r\n    isFinalizingOrder(): boolean;\r\n    /**\r\n     * Checks whether the current order is loading.\r\n     *\r\n     * @returns True if the current order is loading, otherwise false.\r\n     */\r\n    isLoadingOrder(): boolean;\r\n    /**\r\n     * Checks whether the current cart is loading.\r\n     *\r\n     * @returns True if the current cart is loading, otherwise false.\r\n     */\r\n    isLoadingCart(): boolean;\r\n    /**\r\n     * Checks whether billing countries are loading.\r\n     *\r\n     * @returns True if billing countries are loading, otherwise false.\r\n     */\r\n    isLoadingBillingCountries(): boolean;\r\n    /**\r\n     * Checks whether shipping countries are loading.\r\n     *\r\n     * @returns True if shipping countries are loading, otherwise false.\r\n     */\r\n    isLoadingShippingCountries(): boolean;\r\n    /**\r\n     * Checks whether payment methods are loading.\r\n     *\r\n     * @returns True if payment methods are loading, otherwise false.\r\n     */\r\n    isLoadingPaymentMethods(): boolean;\r\n    /**\r\n     * Checks whether a specific or any payment method is loading.\r\n     *\r\n     * The method returns true if no ID is provided and at least one payment\r\n     * method is loading.\r\n     *\r\n     * @param methodId - The identifier of the payment method to check.\r\n     * @returns True if the payment method is loading, otherwise false.\r\n     */\r\n    isLoadingPaymentMethod(methodId?: string): boolean;\r\n    /**\r\n     * Checks whether a specific or any payment method is initializing.\r\n     *\r\n     * The method returns true if no ID is provided and at least one payment\r\n     * method is initializing.\r\n     *\r\n     * @param methodId - The identifier of the payment method to check.\r\n     * @returns True if the payment method is initializing, otherwise false.\r\n     */\r\n    isInitializingPayment(methodId?: string): boolean;\r\n    /**\r\n     * Checks whether the current customer is signing in.\r\n     *\r\n     * If an ID is provided, the method also checks whether the customer is\r\n     * signing in using a specific customer method with the same ID.\r\n     *\r\n     * @param methodId - The identifier of the method used for signing in the\r\n     * current customer.\r\n     * @returns True if the customer is signing in, otherwise false.\r\n     */\r\n    isSigningIn(methodId?: string): boolean;\r\n    /**\r\n     * Checks whether the current customer is signing out.\r\n     *\r\n     * If an ID is provided, the method also checks whether the customer is\r\n     * signing out using a specific customer method with the same ID.\r\n     *\r\n     * @param methodId - The identifier of the method used for signing out the\r\n     * current customer.\r\n     * @returns True if the customer is signing out, otherwise false.\r\n     */\r\n    isSigningOut(methodId?: string): boolean;\r\n    /**\r\n     * Checks whether the customer step is initializing.\r\n     *\r\n     * If an ID is provided, the method also checks whether the customer step is\r\n     * initializing using a specific customer method with the same ID.\r\n     *\r\n     * @param methodId - The identifier of the method used for initializing the\r\n     * customer step of checkout.\r\n     * @returns True if the customer step is initializing, otherwise false.\r\n     */\r\n    isInitializingCustomer(methodId?: string): boolean;\r\n    /**\r\n     * Checks whether a wallet button is initialized.\r\n     *\r\n     * @param methodId - The identifier of the payment method to check.\r\n     * @returns True if the wallet button method is initialized, otherwise false.\r\n     */\r\n    isInitializedCustomer(methodId?: string): boolean;\r\n    /**\r\n     * Checks whether the current customer is executing payment method checkout.\r\n     *\r\n     * If an ID is provided, the method also checks whether the customer is\r\n     * executing payment method checkout using a specific customer method with the same ID.\r\n     *\r\n     * @param methodId - The identifier of the method used for continuing the\r\n     * current customer.\r\n     * @returns True if the customer is executing payment method checkout, otherwise false.\r\n     */\r\n    isExecutingPaymentMethodCheckout(methodId?: string): boolean;\r\n    /**\r\n     * Checks whether shipping options are loading.\r\n     *\r\n     * @returns True if shipping options are loading, otherwise false.\r\n     */\r\n    isLoadingShippingOptions(): boolean;\r\n    /**\r\n     * Checks whether a shipping option is being selected.\r\n     *\r\n     * A consignment ID should be provided when checking if a shipping option\r\n     * is being selected for a specific consignment, otherwise it will check\r\n     * for all consignments.\r\n     *\r\n     * @param consignmentId - The identifier of the consignment to be checked.\r\n     * @returns True if selecting a shipping option, otherwise false.\r\n     */\r\n    isSelectingShippingOption(consignmentId?: string): boolean;\r\n    /**\r\n     * Checks whether the billing address is being updated.\r\n     *\r\n     * @returns True if updating their billing address, otherwise false.\r\n     */\r\n    isUpdatingBillingAddress(): boolean;\r\n    /**\r\n     * Checks whether the shopper is continuing out as a guest.\r\n     *\r\n     * @returns True if continuing as guest, otherwise false.\r\n     */\r\n    isContinuingAsGuest(): boolean;\r\n    /**\r\n     * Checks the shipping address is being updated.\r\n     *\r\n     * @returns True if updating their shipping address, otherwise false.\r\n     */\r\n    isUpdatingShippingAddress(): boolean;\r\n    /**\r\n     * Checks whether a given/any consignment is being updated.\r\n     *\r\n     * A consignment ID should be provided when checking for a specific consignment,\r\n     * otherwise it will check for any consignment.\r\n     *\r\n     * @param consignmentId - The identifier of the consignment to be checked.\r\n     * @returns True if updating consignment(s), otherwise false.\r\n     */\r\n    isUpdatingConsignment(consignmentId?: string): boolean;\r\n    /**\r\n     * Checks whether a given/any consignment is being deleted.\r\n     *\r\n     * A consignment ID should be provided when checking for a specific consignment,\r\n     * otherwise it will check for any consignment.\r\n     *\r\n     * @param consignmentId - The identifier of the consignment to be checked.\r\n     * @returns True if deleting consignment(s), otherwise false.\r\n     */\r\n    isDeletingConsignment(consignmentId?: string): boolean;\r\n    /**\r\n     * Checks whether a given/any consignment is being updated.\r\n     *\r\n     * A consignment ID should be provided when checking for a specific consignment,\r\n     * otherwise it will check for any consignment.\r\n     *\r\n     * @returns True if creating consignments, otherwise false.\r\n     */\r\n    isCreatingConsignments(): boolean;\r\n    /**\r\n     * Checks whether the shipping step of a checkout process is initializing.\r\n     *\r\n     * If an identifier is provided, the method also checks whether the shipping\r\n     * step is initializing using a specific shipping method with the same\r\n     * identifier.\r\n     *\r\n     * @param methodId - The identifer of the initialization method to check.\r\n     * @returns True if the shipping step is initializing, otherwise false.\r\n     */\r\n    isInitializingShipping(methodId?: string): boolean;\r\n    /**\r\n     * Checks whether the current customer is applying a coupon code.\r\n     *\r\n     * @returns True if applying a coupon code, otherwise false.\r\n     */\r\n    isApplyingCoupon(): boolean;\r\n    /**\r\n     * Checks whether the current customer is applying store credit.\r\n     *\r\n     * @returns True if applying store credit, otherwise false.\r\n     */\r\n    isApplyingStoreCredit(): boolean;\r\n    /**\r\n     * Checks whether the current customer is removing a coupon code.\r\n     *\r\n     * @returns True if removing a coupon code, otherwise false.\r\n     */\r\n    isRemovingCoupon(): boolean;\r\n    /**\r\n     * Checks whether a sign-in email is being sent.\r\n     *\r\n     * @returns True if sending a sign-in email, otherwise false\r\n     */\r\n    isSendingSignInEmail(): boolean;\r\n    /**\r\n     * Checks whether a B2B token is being loaded.\r\n     *\r\n     * @returns True if a B2B token is being loaded, otherwise false.\r\n     */\r\n    isLoadingB2BToken(): boolean;\r\n    /**\r\n     * Checks whether the current customer is applying a gift certificate.\r\n     *\r\n     * @returns True if applying a gift certificate, otherwise false.\r\n     */\r\n    isApplyingGiftCertificate(): boolean;\r\n    /**\r\n     * Checks whether the current customer is removing a gift certificate.\r\n     *\r\n     * @returns True if removing a gift certificate, otherwise false.\r\n     */\r\n    isRemovingGiftCertificate(): boolean;\r\n    /**\r\n     * Checks whether the current customer's payment instruments are loading.\r\n     *\r\n     * @returns True if payment instruments are loading, otherwise false.\r\n     */\r\n    isLoadingInstruments(): boolean;\r\n    /**\r\n     * Checks whether the current customer is deleting a payment instrument.\r\n     *\r\n     * @returns True if deleting a payment instrument, otherwise false.\r\n     */\r\n    isDeletingInstrument(instrumentId?: string): boolean;\r\n    /**\r\n     * Checks whether the checkout configuration of a store is loading.\r\n     *\r\n     * @returns True if the configuration is loading, otherwise false.\r\n     */\r\n    isLoadingConfig(): boolean;\r\n    /**\r\n     * Checks whether the customer step of a checkout is in a pending state.\r\n     *\r\n     * The customer step is considered to be pending if it is in the process of\r\n     * initializing, signing in, signing out, and/or interacting with a customer\r\n     * widget.\r\n     *\r\n     * @returns True if the customer step is pending, otherwise false.\r\n     */\r\n    isCustomerStepPending(): boolean;\r\n    /**\r\n     * Checks whether the shipping step of a checkout is in a pending state.\r\n     *\r\n     * The shipping step is considered to be pending if it is in the process of\r\n     * initializing, updating address, selecting a shipping option, and/or\r\n     * interacting with a shipping widget.\r\n     *\r\n     * @returns True if the shipping step is pending, otherwise false.\r\n     */\r\n    isShippingStepPending(): boolean;\r\n    /**\r\n     * Checks whether the payment step of a checkout is in a pending state.\r\n     *\r\n     * The payment step is considered to be pending if it is in the process of\r\n     * initializing, submitting an order, finalizing an order, and/or\r\n     * interacting with a payment widget.\r\n     *\r\n     * @returns True if the payment step is pending, otherwise false.\r\n     */\r\n    isPaymentStepPending(): boolean;\r\n    /**\r\n     * Checks whether the subscriptions are being updated.\r\n     *\r\n     * @returns True if updating subscriptions, otherwise false.\r\n     */\r\n    isUpdatingSubscriptions(): boolean;\r\n    /**\r\n     * Checks whether a customer account is being created\r\n     *\r\n     * @returns True if creating, otherwise false.\r\n     */\r\n    isCreatingCustomerAccount(): boolean;\r\n    /**\r\n     * Checks whether a customer address is being created\r\n     *\r\n     * @returns True if creating, otherwise false.\r\n     */\r\n    isCreatingCustomerAddress(): boolean;\r\n    /**\r\n     * Checks whether pickup options are loading.\r\n     *\r\n     * @returns True if pickup options are loading, otherwise false.\r\n     */\r\n    isLoadingPickupOptions(): boolean;\r\n}\r\n\r\ndeclare type ComparableCheckout = Pick<Checkout, 'outstandingBalance' | 'coupons' | 'giftCertificates'> & {\r\n    cart: Partial<Cart>;\r\n};\r\n\r\ndeclare interface Config {\r\n    context: ContextConfig;\r\n    customization: CustomizationConfig;\r\n    storeConfig: StoreConfig;\r\n}\r\n\r\ndeclare interface ConfigSelector {\r\n    getConfig(): Config | undefined;\r\n    getFlashMessages(type?: FlashMessageType): FlashMessage[] | undefined;\r\n    getStoreConfig(): StoreConfig | undefined;\r\n    getStoreConfigOrThrow(): StoreConfig;\r\n    getContextConfig(): ContextConfig | undefined;\r\n    getExternalSource(): string | undefined;\r\n    getHost(): string | undefined;\r\n    getLocale(): string | undefined;\r\n    getVariantIdentificationToken(): string | undefined;\r\n    getLoadError(): Error | undefined;\r\n    isLoading(): boolean;\r\n}\r\n\r\ndeclare interface Consignment {\r\n    id: string;\r\n    address: Address;\r\n    shippingAddress: Address;\r\n    discounts: ConsignmentDiscount[];\r\n    handlingCost: number;\r\n    shippingCost: number;\r\n    availableShippingOptions?: ShippingOption[];\r\n    selectedShippingOption?: ShippingOption;\r\n    selectedPickupOption?: ConsignmentPickupOption;\r\n    lineItemIds: string[];\r\n    comparisonShippingCost: number;\r\n    shippingCostBeforeDiscount: number;\r\n}\r\n\r\ndeclare interface ConsignmentAssignmentBaseRequestBodyWithAddress {\r\n    address: AddressRequestBody;\r\n    lineItems: ConsignmentLineItem[];\r\n    pickupOption?: ConsignmentPickupOption;\r\n}\r\n\r\ndeclare interface ConsignmentAssignmentBaseRequestBodyWithShippingAddress {\r\n    shippingAddress: AddressRequestBody;\r\n    lineItems: ConsignmentLineItem[];\r\n    pickupOption?: ConsignmentPickupOption;\r\n}\r\n\r\ndeclare type ConsignmentAssignmentRequestBody = ConsignmentAssignmentBaseRequestBodyWithShippingAddress | ConsignmentAssignmentBaseRequestBodyWithAddress;\r\n\r\ndeclare type ConsignmentAutomaticDiscount = ConsignmentDiscountBase<'AUTOMATIC'>;\r\n\r\ndeclare interface ConsignmentCouponDiscount extends ConsignmentDiscountBase<'COUPON'> {\r\n    couponId: number;\r\n    couponCode: string;\r\n}\r\n\r\ndeclare interface ConsignmentCreateRequestBody {\r\n    address?: AddressRequestBody;\r\n    shippingAddress?: AddressRequestBody;\r\n    lineItems: ConsignmentLineItem[];\r\n    pickupOption?: ConsignmentPickupOption;\r\n}\r\n\r\ndeclare type ConsignmentDiscount = ConsignmentAutomaticDiscount | ConsignmentCouponDiscount;\r\n\r\ndeclare interface ConsignmentDiscountBase<T> {\r\n    id: number;\r\n    amount: number;\r\n    type: T;\r\n}\r\n\r\ndeclare interface ConsignmentLineItem {\r\n    itemId: string | number;\r\n    quantity: number;\r\n}\r\n\r\ndeclare interface ConsignmentPickupOption {\r\n    pickupMethodId: number;\r\n}\r\n\r\ndeclare interface ConsignmentSelector {\r\n    getConsignments(): Consignment[] | undefined;\r\n    getConsignmentsOrThrow(): Consignment[];\r\n    getConsignmentById(id: string): Consignment | undefined;\r\n    getConsignmentByAddress(address: AddressRequestBody): Consignment | undefined;\r\n    getShippingOption(): ShippingOption | undefined;\r\n    getLoadError(): Error | undefined;\r\n    getCreateError(): Error | undefined;\r\n    getLoadShippingOptionsError(): Error | undefined;\r\n    getUnassignedItems(): PhysicalItem[];\r\n    getUpdateError(consignmentId?: string): Error | undefined;\r\n    getDeleteError(consignmentId?: string): Error | undefined;\r\n    getItemAssignmentError(address: AddressRequestBody): Error | undefined;\r\n    getUpdateShippingOptionError(consignmentId?: string): Error | undefined;\r\n    isLoading(): boolean;\r\n    isLoadingShippingOptions(): boolean;\r\n    isCreating(): boolean;\r\n    isUpdating(consignmentId?: string): boolean;\r\n    isDeleting(consignmentId?: string): boolean;\r\n    isAssigningItems(address: AddressRequestBody): boolean;\r\n    isUpdatingShippingOption(consignmentId?: string): boolean;\r\n}\r\n\r\ndeclare interface ConsignmentUpdateRequestBody {\r\n    id: string;\r\n    address?: AddressRequestBody;\r\n    shippingAddress?: AddressRequestBody;\r\n    lineItems?: ConsignmentLineItem[];\r\n    pickupOption?: ConsignmentPickupOption;\r\n    shippingOptionId?: string;\r\n}\r\n\r\ndeclare interface ConsignmentsChangedEvent {\r\n    type: ExtensionEventType.ConsignmentsChanged;\r\n    payload: {\r\n        consignments: Consignment[];\r\n        previousConsignments: Consignment[];\r\n    };\r\n}\r\n\r\ndeclare type ConsignmentsRequestBody = ConsignmentCreateRequestBody[];\r\n\r\ndeclare interface ContextConfig {\r\n    checkoutId?: string;\r\n    geoCountryCode: string;\r\n    flashMessages: FlashMessage[];\r\n    payment: {\r\n        formId?: string;\r\n        token?: string;\r\n    };\r\n}\r\n\r\ndeclare interface Coordinates {\r\n    latitude: number;\r\n    longitude: number;\r\n}\r\n\r\ndeclare interface Country {\r\n    code: string;\r\n    name: string;\r\n    hasPostalCodes: boolean;\r\n    subdivisions: Region[];\r\n    requiresState: boolean;\r\n}\r\n\r\ndeclare interface CountrySelector {\r\n    getCountries(): Country[] | undefined;\r\n    getLoadError(): Error | undefined;\r\n    isLoading(): boolean;\r\n}\r\n\r\ndeclare interface Coupon {\r\n    id: string;\r\n    displayName: string;\r\n    code: string;\r\n    couponType: string;\r\n    discountedAmount: number;\r\n    hasMaxLimitReached?: boolean;\r\n}\r\n\r\ndeclare interface CouponSelector {\r\n    getCoupons(): Coupon[] | undefined;\r\n    getRemoveError(): RequestError | undefined;\r\n    getApplyError(): RequestError | undefined;\r\n    isApplying(): boolean;\r\n    isRemoving(): boolean;\r\n}\r\n\r\ndeclare interface CreditCardInstrument {\r\n    ccCustomerCode?: string;\r\n    ccExpiry: {\r\n        month: string;\r\n        year: string;\r\n    };\r\n    ccName: string;\r\n    ccNumber: string;\r\n    ccCvv?: string;\r\n    shouldSaveInstrument?: boolean;\r\n    shouldSetAsDefaultInstrument?: boolean;\r\n    extraData?: any;\r\n    threeDSecure?: ThreeDSecure | ThreeDSecureToken;\r\n    browser_info?: BrowserInfo;\r\n}\r\n\r\n/**\r\n * A set of options to initialize credit card payment methods, unless those\r\n * methods require provider-specific configuration. If the initialization is\r\n * successful, hosted (iframed) credit card fields will be inserted into the the\r\n * containers specified in the options.\r\n *\r\n * ```html\r\n * <!-- These containers are where the hosted (iframed) credit card fields will be inserted -->\r\n * <div id=\"card-number\"></div>\r\n * <div id=\"card-name\"></div>\r\n * <div id=\"card-expiry\"></div>\r\n * <div id=\"card-code\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'authorizenet',\r\n *     creditCard: {\r\n *         form: {\r\n *             fields: {\r\n *                 cardNumber: { containerId: 'card-number' },\r\n *                 cardName: { containerId: 'card-name' },\r\n *                 cardExpiry: { containerId: 'card-expiry' },\r\n *                 cardCode: { containerId: 'card-code' },\r\n *             },\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Additional options can be passed in to customize the fields and register\r\n * event callbacks.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'authorizenet',\r\n *     creditCard: {\r\n *         form: {\r\n *             fields: {\r\n *                 cardNumber: { containerId: 'card-number' },\r\n *                 cardName: { containerId: 'card-name' },\r\n *                 cardExpiry: { containerId: 'card-expiry' },\r\n *                 cardCode: { containerId: 'card-code' },\r\n *             },\r\n *             styles: {\r\n *                 default: {\r\n *                     color: '#000',\r\n *                     fontFamily: 'Arial',\r\n *                 },\r\n *                 error: {\r\n *                     color: '#f00',\r\n *                 },\r\n *                 focus: {\r\n *                     color: '#0f0',\r\n *                 },\r\n *             },\r\n *             onBlur({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onFocus({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onEnter({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onCardTypeChange({ cardType }) {\r\n *                 console.log(cardType);\r\n *             },\r\n *             onValidate({ errors, isValid }) {\r\n *                 console.log(errors);\r\n *                 console.log(isValid);\r\n *             },\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface CreditCardPaymentInitializeOptions_2 {\r\n    form: HostedFormOptions;\r\n    bigpayToken?: string;\r\n}\r\n\r\ndeclare interface CreditCardPlaceHolder {\r\n    encryptedCardNumber?: string;\r\n    encryptedExpiryDate?: string;\r\n    encryptedSecurityCode: string;\r\n}\r\n\r\ndeclare interface CssProperties {\r\n    background?: string;\r\n    caretColor?: string;\r\n    color?: string;\r\n    display?: string;\r\n    font?: string;\r\n    fontFamily?: string;\r\n    fontSize?: string;\r\n    fontSizeAdjust?: string;\r\n    fontSmoothing?: string;\r\n    fontStretch?: string;\r\n    fontStyle?: string;\r\n    fontVariant?: string;\r\n    fontVariantAlternates?: string;\r\n    fontVariantCaps?: string;\r\n    fontVariantEastAsian?: string;\r\n    fontVariantLigatures?: string;\r\n    fontVariantNumeric?: string;\r\n    fontWeight?: string;\r\n    letterSpacing?: string;\r\n    lineHeight?: string;\r\n    mozOsxFontSmoothing?: string;\r\n    mozTransition?: string;\r\n    outline?: string;\r\n    opacity?: string | number;\r\n    padding?: string;\r\n    textAlign?: string;\r\n    textShadow?: string;\r\n    transition?: string;\r\n    webkitFontSmoothing?: string;\r\n    webkitTransition?: string;\r\n}\r\n\r\ndeclare interface Currency {\r\n    name: string;\r\n    code: string;\r\n    symbol: string;\r\n    decimalPlaces: number;\r\n}\r\n\r\n/**\r\n * Responsible for formatting and converting currencies.\r\n */\r\ndeclare class CurrencyService {\r\n    private _storeConfig;\r\n    private _customerFormatter;\r\n    private _storeFormatter;\r\n    toCustomerCurrency(amount: number): string;\r\n    toStoreCurrency(amount: number): string;\r\n}\r\n\r\ndeclare interface CustomError extends Error {\r\n    message: string;\r\n    type: string;\r\n    subtype?: string;\r\n}\r\n\r\ndeclare interface CustomItem {\r\n    id: string;\r\n    listPrice: number;\r\n    extendedListPrice: number;\r\n    name: string;\r\n    quantity: number;\r\n    sku: string;\r\n}\r\n\r\ndeclare interface Customer {\r\n    id: number;\r\n    addresses: CustomerAddress[];\r\n    storeCredit: number;\r\n    /**\r\n     * The email address of the signed in customer.\r\n     */\r\n    email: string;\r\n    firstName: string;\r\n    fullName: string;\r\n    isGuest: boolean;\r\n    lastName: string;\r\n    /**\r\n     * Indicates whether the customer should be prompted to sign-in.\r\n     *\r\n     * Note: You need to enable \"Prompt existing accounts to sign in\" in your Checkout Settings.\r\n     */\r\n    shouldEncourageSignIn: boolean;\r\n    customerGroup?: CustomerGroup;\r\n}\r\n\r\ndeclare interface CustomerAccountRequestBody {\r\n    firstName: string;\r\n    lastName: string;\r\n    email: string;\r\n    password: string;\r\n    acceptsMarketingEmails?: boolean;\r\n    customFields?: Array<{\r\n        fieldId: string;\r\n        fieldValue: string | number | string[];\r\n    }>;\r\n}\r\n\r\ndeclare interface CustomerAddress extends Address {\r\n    id: number;\r\n    type: string;\r\n}\r\n\r\ndeclare type CustomerAddressRequestBody = AddressRequestBody;\r\n\r\ndeclare interface CustomerCredentials {\r\n    email: string;\r\n    password: string;\r\n    cartId?: string;\r\n}\r\n\r\ndeclare interface CustomerGroup {\r\n    id: number;\r\n    name: string;\r\n}\r\n\r\ndeclare type CustomerInitializeOptions = BaseCustomerInitializeOptions & WithAmazonPayV2CustomerInitializeOptions & WithApplePayCustomerInitializeOptions & WithBigCommercePaymentsCustomerInitializeOptions & WithBigCommercePaymentsFastlaneCustomerInitializeOptions & WithBigCommercePaymentsPayLaterCustomerInitializeOptions & WithBigCommercePaymentsVenmoCustomerInitializeOptions & WithBoltCustomerInitializeOptions & WithBraintreePaypalCustomerInitializeOptions & WithBraintreePaypalCreditCustomerInitializeOptions & WithBraintreeFastlaneCustomerInitializeOptions & WithGooglePayCustomerInitializeOptions & WithPayPalCommerceCustomerInitializeOptions & WithPayPalCommerceCreditCustomerInitializeOptions & WithPayPalCommerceVenmoCustomerInitializeOptions & WithPayPalCommerceFastlaneCustomerInitializeOptions & WithStripeUPECustomerInitializeOptions;\r\n\r\ndeclare interface CustomerPasswordRequirements {\r\n    alpha: string;\r\n    numeric: string;\r\n    minlength: number;\r\n    description: string;\r\n}\r\n\r\n/**\r\n * A set of options for configuring any requests related to the customer step of\r\n * the current checkout flow.\r\n *\r\n * Some payment methods have their own sign-in or sign-out flow. Therefore, you\r\n * need to indicate the method you want to use if you need to trigger a specific\r\n * flow for signing in or out a customer. Otherwise, these options are not required.\r\n */\r\ndeclare interface CustomerRequestOptions extends RequestOptions {\r\n    methodId?: string;\r\n}\r\n\r\ndeclare interface CustomerSelector {\r\n    getCustomer(): Customer | undefined;\r\n    getCustomerOrThrow(): Customer;\r\n    getCreateAccountError(): Error | undefined;\r\n    isCreatingCustomerAccount(): boolean;\r\n    getCreateAddressError(): Error | undefined;\r\n    isCreatingCustomerAddress(): boolean;\r\n}\r\n\r\ndeclare interface CustomerStrategySelector {\r\n    getSignInError(methodId?: string): Error | undefined;\r\n    getSignOutError(methodId?: string): Error | undefined;\r\n    getExecutePaymentMethodCheckoutError(methodId?: string): Error | undefined;\r\n    getInitializeError(methodId?: string): Error | undefined;\r\n    getWidgetInteractionError(methodId?: string): Error | undefined;\r\n    isSigningIn(methodId?: string): boolean;\r\n    isSigningOut(methodId?: string): boolean;\r\n    isExecutingPaymentMethodCheckout(methodId?: string): boolean;\r\n    isInitializing(methodId?: string): boolean;\r\n    isInitialized(methodId: string): boolean;\r\n    isWidgetInteracting(methodId?: string): boolean;\r\n}\r\n\r\ndeclare interface CustomizationConfig {\r\n    languageData: any[];\r\n}\r\n\r\ndeclare class DetachmentObserver {\r\n    private _mutationObserver;\r\n    constructor(_mutationObserver: MutationObserverFactory);\r\n    ensurePresence<T>(targets: Node[], promise: Promise<T>): Promise<T>;\r\n}\r\n\r\ndeclare interface DigitalItem extends LineItem {\r\n    downloadFileUrls: string[];\r\n    downloadPageUrl: string;\r\n    downloadSize: string;\r\n}\r\n\r\ndeclare interface Discount {\r\n    id: string;\r\n    discountedAmount: number;\r\n}\r\n\r\ndeclare interface DisplaySettings {\r\n    hidePriceFromGuests: boolean;\r\n}\r\n\r\ndeclare class EmbeddedCheckout {\r\n    private _iframeCreator;\r\n    private _messageListener;\r\n    private _messagePoster;\r\n    private _loadingIndicator;\r\n    private _requestSender;\r\n    private _storage;\r\n    private _location;\r\n    private _options;\r\n    private _iframe?;\r\n    private _isAttached;\r\n    attach(): Promise<this>;\r\n    detach(): void;\r\n    private _configureStyles;\r\n    private _attemptLogin;\r\n    /**\r\n     * This workaround is required for certain browsers (namely Safari) that\r\n     * prevent session cookies to be set for a third party website unless the\r\n     * user has recently visited such website. Therefore, before we attempt to\r\n     * login or set an active cart in the session, we need to first redirect the\r\n     * user to the domain of Embedded Checkout.\r\n     */\r\n    private _allowCookie;\r\n    private _retryAllowCookie;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutCompleteEvent {\r\n    type: EmbeddedCheckoutEventType.CheckoutComplete;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutError {\r\n    message: string;\r\n    type?: string;\r\n    subtype?: string;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutErrorEvent {\r\n    type: EmbeddedCheckoutEventType.CheckoutError;\r\n    payload: EmbeddedCheckoutError;\r\n}\r\n\r\ndeclare enum EmbeddedCheckoutEventType {\r\n    CheckoutComplete = \"CHECKOUT_COMPLETE\",\r\n    CheckoutError = \"CHECKOUT_ERROR\",\r\n    CheckoutLoaded = \"CHECKOUT_LOADED\",\r\n    FrameError = \"FRAME_ERROR\",\r\n    FrameLoaded = \"FRAME_LOADED\",\r\n    SignedOut = \"SIGNED_OUT\"\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutFrameErrorEvent {\r\n    type: EmbeddedCheckoutEventType.FrameError;\r\n    payload: EmbeddedCheckoutError;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutFrameLoadedEvent {\r\n    type: EmbeddedCheckoutEventType.FrameLoaded;\r\n    payload?: EmbeddedContentOptions;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutLoadedEvent {\r\n    type: EmbeddedCheckoutEventType.CheckoutLoaded;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutMessenger {\r\n    postComplete(): void;\r\n    postError(payload: Error | CustomError): void;\r\n    postFrameError(payload: Error | CustomError): void;\r\n    postFrameLoaded(payload?: EmbeddedContentOptions): void;\r\n    postLoaded(): void;\r\n    postSignedOut(): void;\r\n    receiveStyles(handler: (styles: EmbeddedCheckoutStyles) => void): void;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutMessengerOptions {\r\n    parentOrigin: string;\r\n    parentWindow?: Window;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutOptions {\r\n    containerId: string;\r\n    url: string;\r\n    styles?: EmbeddedCheckoutStyles;\r\n    onComplete?(event: EmbeddedCheckoutCompleteEvent): void;\r\n    onError?(event: EmbeddedCheckoutErrorEvent): void;\r\n    onFrameError?(event: EmbeddedCheckoutFrameErrorEvent): void;\r\n    onFrameLoad?(event: EmbeddedCheckoutFrameLoadedEvent): void;\r\n    onLoad?(event: EmbeddedCheckoutLoadedEvent): void;\r\n    onSignOut?(event: EmbeddedCheckoutSignedOutEvent): void;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutSignedOutEvent {\r\n    type: EmbeddedCheckoutEventType.SignedOut;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutStyles {\r\n    body?: BodyStyles;\r\n    text?: InlineElementStyles;\r\n    heading?: BlockElementStyles;\r\n    secondaryHeading?: BlockElementStyles;\r\n    link?: LinkStyles;\r\n    secondaryText?: InlineElementStyles;\r\n    button?: ButtonStyles;\r\n    secondaryButton?: ButtonStyles;\r\n    input?: TextInputStyles;\r\n    select?: InputStyles;\r\n    radio?: CheckableInputStyles;\r\n    checkbox?: CheckableInputStyles;\r\n    label?: LabelStyles;\r\n    checklist?: ChecklistStyles;\r\n    discountBanner?: BlockElementStyles;\r\n    loadingBanner?: BlockElementStyles;\r\n    loadingIndicator?: LoadingIndicatorStyles;\r\n    orderSummary?: BlockElementStyles;\r\n    step?: StepStyles;\r\n}\r\n\r\ndeclare interface EmbeddedContentOptions {\r\n    contentId?: string;\r\n}\r\n\r\ndeclare interface ErrorLogger {\r\n    log(error: Error): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to pass the customer step of the\r\n * current checkout flow.\r\n *\r\n * Some payment methods have specific suggestion for customer to pass\r\n * the customer step. For example, Bolt suggests the customer to use\r\n * their custom checkout with prefilled form values. As a result, you\r\n * may need to provide additional information, error handler or callback\r\n * to execution method.\r\n *\r\n */\r\ndeclare interface ExecutePaymentMethodCheckoutOptions extends CustomerRequestOptions {\r\n    checkoutPaymentMethodExecuted?(data?: CheckoutPaymentMethodExecutedOptions): void;\r\n    continueWithCheckoutCallback?(): void;\r\n}\r\n\r\ndeclare interface Extension {\r\n    id: string;\r\n    name: string;\r\n    region: ExtensionRegion;\r\n    url: string;\r\n    type: ExtensionType;\r\n}\r\n\r\ndeclare interface ExtensionCommandMap {\r\n    [ExtensionCommandType.ReloadCheckout]: ReloadCheckoutCommand;\r\n    [ExtensionCommandType.ShowLoadingIndicator]: ShowLoadingIndicatorCommand;\r\n    [ExtensionCommandType.SetIframeStyle]: SetIframeStyleCommand;\r\n    [ExtensionCommandType.ReRenderShippingForm]: ReRenderShippingForm;\r\n    [ExtensionCommandType.ReRenderShippingStep]: ReRenderShippingStep;\r\n}\r\n\r\nexport declare enum ExtensionCommandType {\r\n    ReloadCheckout = \"EXTENSION:RELOAD_CHECKOUT\",\r\n    ShowLoadingIndicator = \"EXTENSION:SHOW_LOADING_INDICATOR\",\r\n    SetIframeStyle = \"EXTENSION:SET_IFRAME_STYLE\",\r\n    ReRenderShippingForm = \"EXTENSION:RE_RENDER_SHIPPING_FORM\",\r\n    ReRenderShippingStep = \"EXTENSION:RE_RENDER_SHIPPING_STEP\"\r\n}\r\n\r\ndeclare type ExtensionEvent = ConsignmentsChangedEvent;\r\n\r\ndeclare enum ExtensionEventType {\r\n    ConsignmentsChanged = \"EXTENSION:CONSIGNMENTS_CHANGED\"\r\n}\r\n\r\ndeclare type ExtensionMessage = ExtensionEvent | GetConsignmentsMessage;\r\n\r\ndeclare const enum ExtensionMessageType {\r\n    GetConsignments = \"EXTENSION:GET_CONSIGNMENTS\"\r\n}\r\n\r\nexport declare interface ExtensionQueryMap {\r\n    [ExtensionQueryType.GetConsignments]: GetConsignmentsQuery;\r\n}\r\n\r\nexport declare enum ExtensionQueryType {\r\n    GetConsignments = \"EXTENSION:GET_CONSIGNMENTS\"\r\n}\r\n\r\ndeclare const enum ExtensionRegion {\r\n    ShippingShippingAddressFormBefore = \"shipping.shippingAddressForm.before\",\r\n    ShippingShippingAddressFormAfter = \"shipping.shippingAddressForm.after\",\r\n    ShippingSelectedShippingMethod = \"shipping.selectedShippingMethod\",\r\n    PaymentPaymentMethodListBefore = \"payment.paymentMethodList.before\",\r\n    SummaryAfter = \"summary.after\",\r\n    SummaryLastItemAfter = \"summary.lastItem.after\",\r\n    GlobalWebWorker = \"global\"\r\n}\r\n\r\ndeclare interface ExtensionSelector {\r\n    getExtensions(): Extension[] | undefined;\r\n    getExtensionByRegion(region: ExtensionRegion): Extension | undefined;\r\n    getLoadError(): Error | undefined;\r\n    isLoading(): boolean;\r\n}\r\n\r\ndeclare const enum ExtensionType {\r\n    Iframe = \"iframe\",\r\n    Worker = \"worker\"\r\n}\r\n\r\ndeclare interface ExtraField {\r\n    id: string;\r\n    name: string;\r\n    visibleToStorefront: boolean;\r\n    isRequired: boolean;\r\n    type: ExtraFieldType;\r\n    config: ExtraFieldConfig;\r\n}\r\n\r\ndeclare interface ExtraFieldConfig {\r\n    defaultValue?: string | number;\r\n    maxLength?: number;\r\n    numberOfRows?: number;\r\n    maxValue?: number;\r\n    options?: string[];\r\n}\r\n\r\ndeclare type ExtraFieldType = 'text' | 'multiline_text' | 'number' | 'dropdown';\r\n\r\ndeclare interface ExtraFields {\r\n    address: ExtraField[];\r\n    order: ExtraField[];\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the shipping step of\r\n * checkout in order to support Fastlane (PayPal Commerce, BigCommerce Payments, or Braintree).\r\n *\r\n * This is a unified interface that can be used across all Fastlane implementations\r\n * to simplify initialization and avoid provider-specific checks.\r\n */\r\ndeclare interface FastlaneShippingInitializeOptions {\r\n    /**\r\n     * Styling options for customizing Fastlane components\r\n     *\r\n     * Note: the styles for all Fastlane strategies should be the same,\r\n     * because they will be provided to the Fastlane library only for the first strategy initialization\r\n     * no matter what strategy was initialized first\r\n     */\r\n    styles?: FastlaneStylesOption;\r\n    /**\r\n     * A callback that shows the Fastlane popup with customer addresses\r\n     * when triggered\r\n     */\r\n    onPayPalFastlaneAddressChange?: (showFastlaneAddressSelector: () => Promise<CustomerAddress_2 | undefined>) => void;\r\n}\r\n\r\n/**\r\n * A union type that covers all possible Fastlane styling options from different providers\r\n */\r\ndeclare type FastlaneStylesOption = PayPalFastlaneStylesOption | BraintreeFastlaneStylesOption;\r\n\r\ndeclare interface Fee {\r\n    id: string;\r\n    type: string;\r\n    name: string;\r\n    displayName: string;\r\n    cost: number;\r\n    source: string;\r\n}\r\n\r\ndeclare interface FlashMessage {\r\n    type: FlashMessageType;\r\n    message: string;\r\n    title?: string;\r\n}\r\n\r\ndeclare type FlashMessageType = 'error' | 'info' | 'warning' | 'success';\r\n\r\ndeclare interface FormField {\r\n    name: string | AddressKey;\r\n    custom: boolean;\r\n    id: string;\r\n    label: string;\r\n    required: boolean;\r\n    default?: string;\r\n    fieldType?: FormFieldFieldType;\r\n    hidden?: boolean;\r\n    inputDateFormat?: string;\r\n    itemtype?: string;\r\n    max?: string | number;\r\n    maxLength?: number;\r\n    min?: string | number;\r\n    options?: FormFieldOptions;\r\n    requirements?: CustomerPasswordRequirements;\r\n    secret?: boolean;\r\n    type?: FormFieldType;\r\n}\r\n\r\ndeclare type FormFieldFieldType = 'checkbox' | 'date' | 'text' | 'dropdown' | 'password' | 'radio' | 'multiline';\r\n\r\ndeclare interface FormFieldItem {\r\n    value: string;\r\n    label: string;\r\n}\r\n\r\ndeclare interface FormFieldOptions {\r\n    helperLabel?: string;\r\n    items?: FormFieldItem[];\r\n    rows?: number;\r\n}\r\n\r\ndeclare type FormFieldType = 'array' | 'date' | 'integer' | 'string';\r\n\r\ndeclare interface FormFields {\r\n    customerAccount: FormField[];\r\n    shippingAddress: FormField[];\r\n    billingAddress: FormField[];\r\n}\r\n\r\ndeclare interface FormSelector {\r\n    getShippingAddressFields(countries: Country[] | undefined, countryCode: string): FormField[];\r\n    getBillingAddressFields(countries: Country[] | undefined, countryCode: string): FormField[];\r\n    getCustomerAccountFields(): FormField[];\r\n    getAddressExtraFields(): FormField[];\r\n    getOrderExtraFields(): FormField[];\r\n    getLoadError(): Error | undefined;\r\n    isLoading(): boolean;\r\n}\r\n\r\ndeclare interface GatewayOrderPayment extends OrderPayment {\r\n    detail: {\r\n        step: string;\r\n        instructions: string;\r\n    };\r\n    mandate?: {\r\n        id: string;\r\n        url?: string;\r\n        mandateText?: {\r\n            [key: string]: string;\r\n        };\r\n    };\r\n}\r\n\r\ndeclare interface GetConsignmentsMessage {\r\n    type: ExtensionMessageType.GetConsignments;\r\n    payload: {\r\n        consignments: Consignment[];\r\n    };\r\n}\r\n\r\ndeclare interface GetConsignmentsQuery {\r\n    type: ExtensionQueryType.GetConsignments;\r\n    payload?: {\r\n        useCache?: boolean;\r\n    };\r\n}\r\n\r\ndeclare interface GiftCertificate {\r\n    balance: number;\r\n    remaining: number;\r\n    used: number;\r\n    code: string;\r\n    purchaseDate: string;\r\n}\r\n\r\ndeclare interface GiftCertificateItem {\r\n    id: string | number;\r\n    name: string;\r\n    theme: string;\r\n    amount: number;\r\n    taxable: boolean;\r\n    sender: {\r\n        name: string;\r\n        email: string;\r\n    };\r\n    recipient: {\r\n        name: string;\r\n        email: string;\r\n    };\r\n    message: string;\r\n}\r\n\r\ndeclare interface GiftCertificateOrderPayment extends OrderPayment {\r\n    detail: {\r\n        code: string;\r\n        remaining: number;\r\n    };\r\n}\r\n\r\ndeclare interface GiftCertificateSelector {\r\n    getGiftCertificates(): GiftCertificate[] | undefined;\r\n    getRemoveError(): RequestError<StorefrontErrorResponseBody> | undefined;\r\n    getApplyError(): RequestError<StorefrontErrorResponseBody> | undefined;\r\n    isApplying(): boolean;\r\n    isRemoving(): boolean;\r\n}\r\n\r\ndeclare type GooglePayButtonColor = 'default' | 'black' | 'white';\r\n\r\ndeclare interface GooglePayButtonInitializeOptions {\r\n    /**\r\n     * All Google Pay payment buttons exist in two styles: dark (default) and light.\r\n     * To provide contrast, use dark buttons on light backgrounds and light buttons on dark or colorful backgrounds.\r\n     */\r\n    buttonColor?: GooglePayButtonColor;\r\n    /**\r\n     * Variant buttons:\r\n     * book: The \"Book with Google Pay\" payment button.\r\n     * buy: The \"Buy with Google Pay\" payment button.\r\n     * checkout: The \"Checkout with Google Pay\" payment button.\r\n     * donate: The \"Donate with Google Pay\" payment button.\r\n     * order: The \"Order with Google Pay\" payment button.\r\n     * pay: The \"Pay with Google Pay\" payment button.\r\n     * plain: The Google Pay payment button without the additional text (default).\r\n     * subscribe: The \"Subscribe with Google Pay\" payment button.\r\n     *\r\n     * Note: \"long\" and \"short\" button types have been renamed to \"buy\" and \"plain\", but are still valid button types\r\n     * for backwards compatability.\r\n     */\r\n    buttonType?: GooglePayButtonType;\r\n}\r\n\r\ndeclare type GooglePayButtonSizeMode = 'static' | 'fill';\r\n\r\ndeclare type GooglePayButtonType = 'book' | 'buy' | 'checkout' | 'donate' | 'order' | 'pay' | 'plain' | 'subscribe' | 'long' | 'short';\r\n\r\ndeclare interface GooglePayCustomerInitializeOptions {\r\n    /**\r\n     * This container is used to set an event listener, provide an element ID if you want users to be able to launch\r\n     * the GooglePay wallet modal by clicking on a button. It should be an HTML element.\r\n     */\r\n    container: string;\r\n    /**\r\n     * All Google Pay payment buttons exist in two styles: dark (default) and light.\r\n     * To provide contrast, use dark buttons on light backgrounds and light buttons on dark or colorful backgrounds.\r\n     */\r\n    buttonColor?: GooglePayButtonColor;\r\n    /**\r\n     * Variant buttons:\r\n     * book: The \"Book with Google Pay\" payment button.\r\n     * buy: The \"Buy with Google Pay\" payment button.\r\n     * checkout: The \"Checkout with Google Pay\" payment button.\r\n     * donate: The \"Donate with Google Pay\" payment button.\r\n     * order: The \"Order with Google Pay\" payment button.\r\n     * pay: The \"Pay with Google Pay\" payment button.\r\n     * plain: The Google Pay payment button without the additional text (default).\r\n     * subscribe: The \"Subscribe with Google Pay\" payment button.\r\n     *\r\n     * Note: \"long\" and \"short\" button types have been renamed to \"buy\" and \"plain\", but are still valid button types\r\n     * for backwards compatability.\r\n     */\r\n    buttonType?: GooglePayButtonType;\r\n    /**\r\n     * A callback that gets called when GooglePay fails to initialize or\r\n     * selects a payment option.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * Callback that get called on wallet button click\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\n/**\r\n * The recognized keys to pass the initialization options for Google Pay.\r\n */\r\ndeclare enum GooglePayKey {\r\n    ADYEN_V2 = \"googlepayadyenv2\",\r\n    ADYEN_V3 = \"googlepayadyenv3\",\r\n    AUTHORIZE_NET = \"googlepayauthorizenet\",\r\n    BNZ = \"googlepaybnz\",\r\n    BRAINTREE = \"googlepaybraintree\",\r\n    PAYPAL_COMMERCE = \"googlepaypaypalcommerce\",\r\n    BIGCOMMERCE_PAYMENTS = \"googlepay_bigcommerce_payments\",\r\n    CHECKOUT_COM = \"googlepaycheckoutcom\",\r\n    CYBERSOURCE_V2 = \"googlepaycybersourcev2\",\r\n    ORBITAL = \"googlepayorbital\",\r\n    STRIPE = \"googlepaystripe\",\r\n    STRIPE_UPE = \"googlepaystripeupe\",\r\n    STRIPE_OCS = \"googlepaystripeocs\",\r\n    WORLDPAY_ACCESS = \"googlepayworldpayaccess\",\r\n    TD_ONLINE_MART = \"googlepaytdonlinemart\"\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the GooglePay payment method\r\n *\r\n * If the customer chooses to pay with GooglePay, they will be asked to\r\n * enter their payment details via a modal. You can hook into events emitted by\r\n * the modal by providing the callbacks listed below.\r\n *\r\n * ```html\r\n * <!-- This is where the GooglePay button will be inserted -->\r\n * <div id=\"wallet-button\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     // Using GooglePay provided by Braintree as an example\r\n *     methodId: 'googlepaybraintree',\r\n *     googlepaybraintree: {\r\n *         walletButton: 'wallet-button'\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Additional event callbacks can be registered.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'googlepaybraintree',\r\n *     googlepaybraintree: {\r\n *         walletButton: 'wallet-button',\r\n *         onError(error) {\r\n *             console.log(error);\r\n *         },\r\n *         onPaymentSelect() {\r\n *             console.log('Selected');\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Alternatively, a container-based Google Pay button can be rendered directly\r\n * in the payment step (replacing the Place Order button):\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'googlepaybraintree',\r\n *     googlepaybraintree: {\r\n *         container: 'checkout-payment-continue',\r\n *         onInit(renderButton) {\r\n *             // Hide Place Order, then render the button once container is in DOM\r\n *             renderButton();\r\n *         },\r\n *         onError(error) {\r\n *             console.log(error);\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface GooglePayPaymentInitializeOptions {\r\n    /**\r\n     * A container for loading spinner.\r\n     */\r\n    loadingContainerId?: string;\r\n    /**\r\n     * This walletButton is used to set an event listener, provide an element ID if you want\r\n     * users to be able to launch the GooglePay wallet modal by clicking on a button.\r\n     * It should be an HTML element.\r\n     */\r\n    walletButton?: string;\r\n    /**\r\n     * The ID of the container element where the Google Pay button will be rendered.\r\n     * When provided, a branded Google Pay button is created inside this container.\r\n     * Clicking the button opens the Google Pay payment sheet and, on success, submits\r\n     * the order and redirects to the order confirmation page directly — no separate\r\n     * \"Place Order\" step is needed.\r\n     */\r\n    container?: string;\r\n    /**\r\n     * The color of the Google Pay button rendered into `container`.\r\n     * Defaults to `'default'`.\r\n     */\r\n    buttonColor?: GooglePayButtonColor;\r\n    /**\r\n     * The size mode of the Google Pay button rendered into `container`.\r\n     * Defaults to `'fill'`.\r\n     */\r\n    buttonSizeMode?: GooglePayButtonSizeMode;\r\n    /**\r\n     * The type/label of the Google Pay button rendered into `container`.\r\n     * Defaults to `'pay'`.\r\n     */\r\n    buttonType?: GooglePayButtonType;\r\n    /**\r\n     * Called after the Google Pay processor is fully initialized, with a\r\n     * `renderButton` function that — when invoked — creates the Google Pay\r\n     * button inside `container`.  Use this callback to control timing: hide\r\n     * the Place Order button first, then call `renderButton()` once the\r\n     * container element is present in the DOM.\r\n     *\r\n     * Only used when `container` is provided.\r\n     */\r\n    onInit?(renderButton: () => void): void;\r\n    /**\r\n     * A callback that gets called when GooglePay fails to initialize or\r\n     * selects a payment option.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * A callback that gets called when the customer selects a payment option.\r\n     */\r\n    onPaymentSelect?(): void;\r\n}\r\n\r\ndeclare class GoogleRecaptcha {\r\n    private googleRecaptchaScriptLoader;\r\n    private mutationObserverFactory;\r\n    private _event$?;\r\n    private _recaptcha?;\r\n    private _memoized;\r\n    private _widgetId?;\r\n    constructor(googleRecaptchaScriptLoader: GoogleRecaptchaScriptLoader, mutationObserverFactory: MutationObserverFactory);\r\n    load(containerId: string, sitekey: string): Promise<void>;\r\n    reset(containerId: string): void;\r\n    execute(): Observable<RecaptchaResult>;\r\n    private _watchRecaptchaChallengeWindow;\r\n}\r\n\r\ndeclare class GoogleRecaptchaScriptLoader {\r\n    private _scriptLoader;\r\n    private _window;\r\n    private _loadPromise?;\r\n    constructor(_scriptLoader: ScriptLoader, _window?: GoogleRecaptchaWindow);\r\n    load(): Promise<ReCaptchaV2.ReCaptcha | undefined>;\r\n    private _loadScript;\r\n}\r\n\r\ndeclare interface GoogleRecaptchaWindow extends Window {\r\n    grecaptcha?: ReCaptchaV2.ReCaptcha;\r\n    initRecaptcha?(): void;\r\n}\r\n\r\ndeclare type GuestCredentials = Partial<Subscriptions> & {\r\n    id?: string;\r\n    email: string;\r\n};\r\n\r\ndeclare interface HostedCardFieldOptions {\r\n    accessibilityLabel?: string;\r\n    containerId: string;\r\n    placeholder?: string;\r\n}\r\n\r\ndeclare interface HostedCardFieldOptionsMap {\r\n    [HostedFieldType.CardCode]?: HostedCardFieldOptions;\r\n    [HostedFieldType.CardExpiry]: HostedCardFieldOptions;\r\n    [HostedFieldType.CardName]: HostedCardFieldOptions;\r\n    [HostedFieldType.CardNumber]: HostedCardFieldOptions;\r\n}\r\n\r\ndeclare type HostedCreditCardInstrument = Omit<CreditCardInstrument, 'ccExpiry' | 'ccName' | 'ccNumber' | 'ccCvv'>;\r\n\r\ndeclare class HostedField {\r\n    private _type;\r\n    private _containerId;\r\n    private _placeholder;\r\n    private _accessibilityLabel;\r\n    private _styles;\r\n    private _eventPoster;\r\n    private _eventListener;\r\n    private _detachmentObserver;\r\n    private _checkoutId?;\r\n    private _cardInstrument?;\r\n    private _iframe;\r\n    constructor(_type: HostedFieldType, _containerId: string, _placeholder: string, _accessibilityLabel: string, _styles: HostedFieldStylesMap, _eventPoster: IframeEventPoster<HostedFieldEvent>, _eventListener: IframeEventListener<HostedInputEventMap>, _detachmentObserver: DetachmentObserver, _checkoutId?: string | undefined, _cardInstrument?: CardInstrument | undefined);\r\n    getType(): HostedFieldType;\r\n    attach(): Promise<void>;\r\n    detach(): void;\r\n    submitForm(fields: HostedFieldType[], data: HostedFormOrderData): Promise<HostedInputSubmitSuccessEvent>;\r\n    submitStoredCardForm(fields: StoredCardHostedFormInstrumentFields, data: StoredCardHostedFormData): Promise<HostedInputStoredCardSucceededEvent>;\r\n    validateForm(): Promise<void>;\r\n    private _getFontUrls;\r\n    private _isSubmitErrorEvent;\r\n}\r\n\r\ndeclare interface HostedFieldAttachEvent {\r\n    type: HostedFieldEventType.AttachRequested;\r\n    payload: {\r\n        accessibilityLabel?: string;\r\n        cardInstrument?: CardInstrument;\r\n        fontUrls?: string[];\r\n        placeholder?: string;\r\n        styles?: HostedFieldStylesMap;\r\n        origin?: string;\r\n        type: HostedFieldType;\r\n    };\r\n}\r\n\r\ndeclare type HostedFieldBlurEventData = HostedInputBlurEvent['payload'];\r\n\r\ndeclare type HostedFieldCardTypeChangeEventData = HostedInputCardTypeChangeEvent['payload'];\r\n\r\ndeclare type HostedFieldEnterEventData = HostedInputEnterEvent['payload'];\r\n\r\ndeclare type HostedFieldEvent = HostedFieldAttachEvent | HostedFieldSubmitRequestEvent | HostedFieldValidateRequestEvent | HostedFieldStoredCardRequestEvent;\r\n\r\ndeclare enum HostedFieldEventType {\r\n    AttachRequested = \"HOSTED_FIELD:ATTACH_REQUESTED\",\r\n    SubmitRequested = \"HOSTED_FIELD:SUBMITTED_REQUESTED\",\r\n    ValidateRequested = \"HOSTED_FIELD:VALIDATE_REQUESTED\",\r\n    StoredCardRequested = \"HOSTED_FIELD:STORED_CARD_REQUESTED\"\r\n}\r\n\r\ndeclare type HostedFieldFocusEventData = HostedInputFocusEvent['payload'];\r\n\r\ndeclare type HostedFieldOptionsMap = HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap;\r\n\r\ndeclare interface HostedFieldStoredCardRequestEvent {\r\n    type: HostedFieldEventType.StoredCardRequested;\r\n    payload: {\r\n        data: StoredCardHostedFormData;\r\n        fields: StoredCardHostedFormInstrumentFields;\r\n    };\r\n}\r\n\r\ndeclare type HostedFieldStyles = HostedInputStyles;\r\n\r\ndeclare interface HostedFieldStylesMap {\r\n    default?: HostedFieldStyles;\r\n    error?: HostedFieldStyles;\r\n    focus?: HostedFieldStyles;\r\n}\r\n\r\ndeclare interface HostedFieldSubmitRequestEvent {\r\n    type: HostedFieldEventType.SubmitRequested;\r\n    payload: {\r\n        data: HostedFormOrderData;\r\n        fields: HostedFieldType[];\r\n    };\r\n}\r\n\r\ndeclare enum HostedFieldType {\r\n    CardCode = \"cardCode\",\r\n    CardCodeVerification = \"cardCodeVerification\",\r\n    CardExpiry = \"cardExpiry\",\r\n    CardName = \"cardName\",\r\n    CardNumber = \"cardNumber\",\r\n    CardNumberVerification = \"cardNumberVerification\"\r\n}\r\n\r\ndeclare type HostedFieldValidateEventData = HostedInputValidateEvent['payload'];\r\n\r\ndeclare interface HostedFieldValidateRequestEvent {\r\n    type: HostedFieldEventType.ValidateRequested;\r\n}\r\n\r\ndeclare class HostedForm implements HostedFormInterface {\r\n    private _fields;\r\n    private _eventListener;\r\n    private _payloadTransformer;\r\n    private _eventCallbacks;\r\n    private _paymentHumanVerificationHandler;\r\n    private _bin?;\r\n    private _cardType?;\r\n    constructor(_fields: HostedField[], _eventListener: IframeEventListener<HostedInputEventMap>, _payloadTransformer: HostedFormOrderDataTransformer, _eventCallbacks: HostedFormEventCallbacks, _paymentHumanVerificationHandler: PaymentHumanVerificationHandler);\r\n    getBin(): string | undefined;\r\n    getCardType(): string | undefined;\r\n    attach(): Promise<void>;\r\n    detach(): void;\r\n    submit(payload: OrderPaymentRequestBody, additionalActionData?: PaymentAdditionalAction): Promise<HostedInputSubmitSuccessEvent>;\r\n    submitStoredCard(payload: {\r\n        fields: StoredCardHostedFormInstrumentFields;\r\n        data: StoredCardHostedFormData;\r\n    }): Promise<HostedInputStoredCardSucceededEvent | void>;\r\n    validate(): Promise<void>;\r\n    private _getFirstField;\r\n    private _handleEnter;\r\n}\r\n\r\ndeclare interface HostedFormErrorData {\r\n    isEmpty: boolean;\r\n    isPotentiallyValid: boolean;\r\n    isValid: boolean;\r\n}\r\n\r\ndeclare type HostedFormErrorDataKeys = 'number' | 'expirationDate' | 'expirationMonth' | 'expirationYear' | 'cvv' | 'postalCode';\r\n\r\ndeclare type HostedFormErrorsData = Partial<Record<HostedFormErrorDataKeys, HostedFormErrorData>>;\r\n\r\ndeclare type HostedFormEventCallbacks = Pick<LegacyHostedFormOptions, 'onBlur' | 'onCardTypeChange' | 'onFocus' | 'onEnter' | 'onValidate'>;\r\n\r\ndeclare class HostedFormFactory {\r\n    private _store;\r\n    constructor(_store: ReadableCheckoutStore);\r\n    create(host: string, options: LegacyHostedFormOptions, checkoutId?: string): HostedForm;\r\n    private _getCardInstrument;\r\n}\r\n\r\ndeclare interface HostedFormOrderData {\r\n    additionalAction?: PaymentAdditionalAction;\r\n    authToken: string;\r\n    checkout?: Checkout;\r\n    config?: Config;\r\n    order?: Order;\r\n    orderMeta?: OrderMeta;\r\n    payment?: (HostedCreditCardInstrument | HostedVaultedInstrument) & PaymentInstrumentMeta;\r\n    paymentMethod?: PaymentMethod;\r\n    paymentMethodMeta?: PaymentMethodMeta;\r\n}\r\n\r\ndeclare class HostedFormOrderDataTransformer {\r\n    private _store;\r\n    constructor(_store: ReadableCheckoutStore);\r\n    transform(payload: OrderPaymentRequestBody, additionalAction?: PaymentAdditionalAction): HostedFormOrderData;\r\n}\r\n\r\ndeclare interface HostedInputAttachErrorEvent {\r\n    type: HostedInputEventType.AttachFailed;\r\n    payload: {\r\n        error: HostedInputInitializeErrorData;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputAttachSuccessEvent {\r\n    type: HostedInputEventType.AttachSucceeded;\r\n}\r\n\r\ndeclare interface HostedInputBinChangeEvent {\r\n    type: HostedInputEventType.BinChanged;\r\n    payload: {\r\n        bin?: string;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputBlurEvent {\r\n    type: HostedInputEventType.Blurred;\r\n    payload: {\r\n        fieldType: HostedFieldType;\r\n        errors?: HostedFormErrorsData;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputCardTypeChangeEvent {\r\n    type: HostedInputEventType.CardTypeChanged;\r\n    payload: {\r\n        cardType?: string;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputChangeEvent {\r\n    type: HostedInputEventType.Changed;\r\n    payload: {\r\n        fieldType: HostedFieldType;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputEnterEvent {\r\n    type: HostedInputEventType.Entered;\r\n    payload: {\r\n        fieldType: HostedFieldType;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputEventMap {\r\n    [HostedInputEventType.AttachSucceeded]: HostedInputAttachSuccessEvent;\r\n    [HostedInputEventType.AttachFailed]: HostedInputAttachErrorEvent;\r\n    [HostedInputEventType.BinChanged]: HostedInputBinChangeEvent;\r\n    [HostedInputEventType.Blurred]: HostedInputBlurEvent;\r\n    [HostedInputEventType.Changed]: HostedInputChangeEvent;\r\n    [HostedInputEventType.CardTypeChanged]: HostedInputCardTypeChangeEvent;\r\n    [HostedInputEventType.Entered]: HostedInputEnterEvent;\r\n    [HostedInputEventType.Focused]: HostedInputFocusEvent;\r\n    [HostedInputEventType.SubmitSucceeded]: HostedInputSubmitSuccessEvent;\r\n    [HostedInputEventType.SubmitFailed]: HostedInputSubmitErrorEvent;\r\n    [HostedInputEventType.Validated]: HostedInputValidateEvent;\r\n    [HostedInputEventType.StoredCardFailed]: HostedInputStoredCardErrorEvent;\r\n    [HostedInputEventType.StoredCardSucceeded]: HostedInputStoredCardSucceededEvent;\r\n}\r\n\r\ndeclare enum HostedInputEventType {\r\n    AttachSucceeded = \"HOSTED_INPUT:ATTACH_SUCCEEDED\",\r\n    AttachFailed = \"HOSTED_INPUT:ATTACH_FAILED\",\r\n    BinChanged = \"HOSTED_INPUT:BIN_CHANGED\",\r\n    Blurred = \"HOSTED_INPUT:BLURRED\",\r\n    Changed = \"HOSTED_INPUT:CHANGED\",\r\n    CardTypeChanged = \"HOSTED_INPUT:CARD_TYPE_CHANGED\",\r\n    Entered = \"HOSTED_INPUT:ENTERED\",\r\n    Focused = \"HOSTED_INPUT:FOCUSED\",\r\n    SubmitSucceeded = \"HOSTED_INPUT:SUBMIT_SUCCEEDED\",\r\n    SubmitFailed = \"HOSTED_INPUT:SUBMIT_FAILED\",\r\n    Validated = \"HOSTED_INPUT:VALIDATED\",\r\n    StoredCardSucceeded = \"HOSTED_INPUT:STORED_CARD_SUCCEEDED\",\r\n    StoredCardFailed = \"HOSTED_INPUT:STORED_CARD_FAILED\"\r\n}\r\n\r\ndeclare interface HostedInputFocusEvent {\r\n    type: HostedInputEventType.Focused;\r\n    payload: {\r\n        fieldType: HostedFieldType;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputInitializeErrorData {\r\n    message: string;\r\n    redirectUrl: string;\r\n}\r\n\r\ndeclare interface HostedInputStoredCardErrorEvent {\r\n    type: HostedInputEventType.StoredCardFailed;\r\n    payload?: {\r\n        errors?: string[];\r\n        error?: PaymentErrorData;\r\n        response?: Response<PaymentErrorResponseBody>;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputStoredCardSucceededEvent {\r\n    type: HostedInputEventType.StoredCardSucceeded;\r\n}\r\n\r\ndeclare type HostedInputStyles = Partial<Pick<CSSStyleDeclaration, 'color' | 'fontFamily' | 'fontSize' | 'fontWeight'>>;\r\n\r\ndeclare interface HostedInputSubmitErrorEvent {\r\n    type: HostedInputEventType.SubmitFailed;\r\n    payload: {\r\n        error: PaymentErrorData;\r\n        response?: Response<PaymentErrorResponseBody>;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputSubmitSuccessEvent {\r\n    type: HostedInputEventType.SubmitSucceeded;\r\n    payload: {\r\n        response: Response<unknown>;\r\n    };\r\n}\r\n\r\ndeclare interface HostedInputValidateErrorData {\r\n    fieldType: string;\r\n    message: string;\r\n    type: string;\r\n}\r\n\r\ndeclare interface HostedInputValidateErrorDataMap {\r\n    [HostedFieldType.CardCode]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.CardCodeVerification]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.CardExpiry]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.CardName]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.CardNumber]?: HostedInputValidateErrorData[];\r\n    [HostedFieldType.CardNumberVerification]?: HostedInputValidateErrorData[];\r\n}\r\n\r\ndeclare interface HostedInputValidateEvent {\r\n    type: HostedInputEventType.Validated;\r\n    payload: HostedInputValidateResults;\r\n}\r\n\r\ndeclare interface HostedInputValidateResults {\r\n    errors: HostedInputValidateErrorDataMap;\r\n    isValid: boolean;\r\n}\r\n\r\ndeclare interface HostedInstrument {\r\n    shouldSaveInstrument?: boolean;\r\n    shouldSetAsDefaultInstrument?: boolean;\r\n}\r\n\r\ndeclare interface HostedStoredCardFieldOptions extends HostedCardFieldOptions {\r\n    instrumentId: string;\r\n}\r\n\r\ndeclare interface HostedStoredCardFieldOptionsMap {\r\n    [HostedFieldType.CardCodeVerification]?: HostedStoredCardFieldOptions;\r\n    [HostedFieldType.CardNumberVerification]?: HostedStoredCardFieldOptions;\r\n}\r\n\r\ndeclare type HostedVaultedInstrument = Omit<VaultedInstrument, 'ccNumber' | 'ccCvv'>;\r\n\r\ndeclare interface IbanElementOptions extends BaseElementOptions {\r\n    /**\r\n     * Specify the list of countries or country-groups whose IBANs you want to allow.\r\n     * Must be ['SEPA'].\r\n     */\r\n    supportedCountries?: string[];\r\n    /**\r\n     * Customize the country and format of the placeholder IBAN. Default is DE.\r\n     */\r\n    placeholderCountry?: string;\r\n    /**\r\n     * Appearance of the icon in the Element.\r\n     */\r\n    iconStyle?: IconStyle;\r\n}\r\n\r\ndeclare enum IconStyle {\r\n    Solid = \"solid\",\r\n    Default = \"default\"\r\n}\r\n\r\ndeclare interface IdealElementOptions extends BaseElementOptions {\r\n    value?: string;\r\n    /**\r\n     * Hides the icon in the Element. Default is false.\r\n     */\r\n    hideIcon?: boolean;\r\n}\r\n\r\ndeclare interface IdealStateData {\r\n    issuer: string;\r\n}\r\n\r\ndeclare interface IframeEvent<TType = string, TPayload = any> {\r\n    type: TType;\r\n    payload?: TPayload;\r\n}\r\n\r\ndeclare class IframeEventListener<TEventMap extends IframeEventMap<keyof TEventMap>, TContext = undefined> {\r\n    private _isListening;\r\n    private _listeners;\r\n    private _sourceOrigins;\r\n    constructor(sourceOrigin: string);\r\n    listen(): void;\r\n    stopListen(): void;\r\n    addListener<TType extends keyof TEventMap>(type: TType, listener: (event: TEventMap[TType], context?: TContext) => void): void;\r\n    removeListener<TType extends keyof TEventMap>(type: TType, listener: (event: TEventMap[TType], context?: TContext) => void): void;\r\n    trigger<TType extends keyof TEventMap>(event: TEventMap[TType], context?: TContext): void;\r\n    private _handleMessage;\r\n}\r\n\r\ndeclare type IframeEventMap<TType extends string | number | symbol = string> = {\r\n    [key in TType]: IframeEvent<TType>;\r\n};\r\n\r\ndeclare interface IframeEventPostOptions<TSuccessEvent extends IframeEvent, TErrorEvent extends IframeEvent> {\r\n    errorType?: TErrorEvent['type'];\r\n    successType?: TSuccessEvent['type'];\r\n}\r\n\r\ndeclare class IframeEventPoster<TEvent, TContext = undefined> {\r\n    private _targetWindow?;\r\n    private _context?;\r\n    private _targetOrigin;\r\n    constructor(targetOrigin: string, _targetWindow?: Window | undefined, _context?: TContext | undefined);\r\n    post(event: TEvent): void;\r\n    post<TSuccessEvent extends IframeEvent = IframeEvent, TErrorEvent extends IframeEvent = IframeEvent>(event: TEvent, options: IframeEventPostOptions<TSuccessEvent, TErrorEvent>): Promise<TSuccessEvent>;\r\n    setTarget(window: Window): void;\r\n    setContext(context: TContext): void;\r\n}\r\n\r\ndeclare interface IndividualCardElementOptions {\r\n    cardCvcElementOptions: CardCvcElementOptions;\r\n    cardExpiryElementOptions: CardExpiryElementOptions;\r\n    cardNumberElementOptions: CardNumberElementOptions;\r\n    zipCodeElementOptions?: ZipCodeElementOptions;\r\n}\r\n\r\ndeclare interface InitCallbackActions {\r\n    disable(): void;\r\n    enable(): void;\r\n}\r\n\r\ndeclare interface InitCallbackActions_2 {\r\n    disable(): void;\r\n    enable(): void;\r\n}\r\n\r\ndeclare interface InitiaizedQuery {\r\n    methodId: string;\r\n    gatewayId?: string;\r\n}\r\n\r\ndeclare interface InitializationStrategy extends Partial<UnknownObject> {\r\n    type: string;\r\n}\r\n\r\ndeclare interface InlineElementStyles {\r\n    color?: string;\r\n    fontFamily?: string;\r\n    fontWeight?: string;\r\n    letterSpacing?: string;\r\n    lineHeight?: string;\r\n}\r\n\r\ndeclare interface InputDetail {\r\n    /**\r\n     * Configuration parameters for the required input.\r\n     */\r\n    configuration?: object;\r\n    /**\r\n     * Input details can also be provided recursively.\r\n     */\r\n    details?: SubInputDetail[];\r\n    /**\r\n     * In case of a select, the URL from which to query the items.\r\n     */\r\n    itemSearchUrl?: string;\r\n    /**\r\n     * In case of a select, the items to choose from.\r\n     */\r\n    items?: Item_2[];\r\n    /**\r\n     * The value to provide in the result.\r\n     */\r\n    key?: string;\r\n    /**\r\n     * True if this input value is optional.\r\n     */\r\n    optional?: boolean;\r\n    /**\r\n     * The type of the required input.\r\n     */\r\n    type?: string;\r\n    /**\r\n     * The value can be pre-filled, if available.\r\n     */\r\n    value?: string;\r\n}\r\n\r\ndeclare interface InputStyles extends BlockElementStyles {\r\n    active?: BlockElementStyles;\r\n    error?: InputStyles;\r\n    focus?: BlockElementStyles;\r\n    hover?: BlockElementStyles;\r\n    disabled?: BlockElementStyles;\r\n}\r\n\r\ndeclare type Instrument = CardInstrument;\r\n\r\ndeclare type InstrumentMeta = VaultAccessToken;\r\n\r\ndeclare interface InstrumentSelector {\r\n    getCardInstrument(instrumentId: string): CardInstrument | undefined;\r\n    getCardInstrumentOrThrow(instrumentId: string): CardInstrument;\r\n    getInstruments(): PaymentInstrument[] | undefined;\r\n    getInstrumentsByPaymentMethod(paymentMethod: PaymentMethod): PaymentInstrument[] | undefined;\r\n    getInstrumentsMeta(): InstrumentMeta | undefined;\r\n    getLoadError(): Error | undefined;\r\n    getDeleteError(instrumentId?: string): Error | undefined;\r\n    isLoading(): boolean;\r\n    isDeleting(instrumentId?: string): boolean;\r\n}\r\n\r\ndeclare interface InternalAddress<T = string> {\r\n    id?: T;\r\n    firstName: string;\r\n    lastName: string;\r\n    company: string;\r\n    addressLine1: string;\r\n    addressLine2: string;\r\n    city: string;\r\n    province: string;\r\n    provinceCode: string;\r\n    postCode: string;\r\n    country: string;\r\n    countryCode: string;\r\n    phone: string;\r\n    customFields: Array<{\r\n        fieldId: string;\r\n        fieldValue: string | number | string[];\r\n    }>;\r\n    type?: string;\r\n}\r\n\r\ndeclare interface InternalCheckoutSelectors {\r\n    b2bToken: B2BTokenSelector;\r\n    billingAddress: BillingAddressSelector;\r\n    cart: CartSelector;\r\n    checkout: CheckoutSelector;\r\n    checkoutButton: CheckoutButtonSelector;\r\n    config: ConfigSelector;\r\n    consignments: ConsignmentSelector;\r\n    countries: CountrySelector;\r\n    coupons: CouponSelector;\r\n    customer: CustomerSelector;\r\n    customerStrategies: CustomerStrategySelector;\r\n    extensions: ExtensionSelector;\r\n    form: FormSelector;\r\n    giftCertificates: GiftCertificateSelector;\r\n    instruments: InstrumentSelector;\r\n    order: OrderSelector;\r\n    orderBillingAddress: OrderBillingAddressSelector;\r\n    payment: PaymentSelector;\r\n    paymentMethods: PaymentMethodSelector;\r\n    paymentStrategies: PaymentStrategySelector;\r\n    paymentProviderCustomer: PaymentProviderCustomerSelector;\r\n    pickupOptions: PickupOptionSelector;\r\n    remoteCheckout: RemoteCheckoutSelector;\r\n    shippingAddress: ShippingAddressSelector;\r\n    shippingCountries: ShippingCountrySelector;\r\n    shippingStrategies: ShippingStrategySelector;\r\n    signInEmail: SignInEmailSelector;\r\n    subscriptions: SubscriptionsSelector;\r\n    storeCredit: StoreCreditSelector;\r\n}\r\n\r\ndeclare interface InternalOrderMeta {\r\n    deviceFingerprint?: string;\r\n}\r\n\r\ndeclare interface InternalOrderPayment {\r\n    id?: string;\r\n    gateway?: string;\r\n    redirectUrl?: string;\r\n    returnUrl?: string;\r\n    status?: string;\r\n    helpText?: string;\r\n}\r\n\r\ndeclare interface InventorySettings {\r\n    showQuantityOnBackorder: boolean;\r\n    showBackorderMessage: boolean;\r\n    showQuantityOnHand: boolean;\r\n    showDefaultShippingExpectationPrompt: boolean;\r\n    showBackorderAvailabilityPrompt: boolean;\r\n    backorderAvailabilityPrompt: string | null;\r\n    defaultShippingExpectationPrompt: string | null;\r\n    shouldDisplayBackorderMessagesOnStorefront: boolean;\r\n}\r\n\r\ndeclare interface Item {\r\n    variantId: number;\r\n    quantity: number;\r\n}\r\n\r\ndeclare interface Item_2 {\r\n    /**\r\n     * The value to provide in the result.\r\n     */\r\n    id?: string;\r\n    /**\r\n     * The display name.\r\n     */\r\n    name?: string;\r\n}\r\n\r\ndeclare interface LabelStyles extends InlineElementStyles {\r\n    error?: InlineElementStyles;\r\n}\r\n\r\ndeclare interface LanguageConfig {\r\n    defaultTranslations: Translations;\r\n    defaultLocale?: string;\r\n    fallbackTranslations?: Translations;\r\n    fallbackLocale?: string;\r\n    locale: string;\r\n    locales: Locales;\r\n    translations: Translations;\r\n}\r\n\r\n/**\r\n * Responsible for getting language strings.\r\n *\r\n * This object can be used to retrieve language strings that are most\r\n * appropriate for a given locale.\r\n *\r\n * The language strings provided to the object should follow [ICU\r\n * MessageFormat](http://userguide.icu-project.org/formatparse/messages) syntax.\r\n */\r\ndeclare class LanguageService {\r\n    private _logger;\r\n    private _locale;\r\n    private _locales;\r\n    private _translations;\r\n    private _formatters;\r\n    /**\r\n     * Remaps a set of language strings with a different set of keys.\r\n     *\r\n     * ```js\r\n     * service.mapKeys({\r\n     *     'new_key': 'existing_key',\r\n     * });\r\n     *\r\n     * console.log(service.translate('new_key'));\r\n     * ```\r\n     *\r\n     * @param maps - The set of language strings.\r\n     */\r\n    mapKeys(maps: {\r\n        [key: string]: string;\r\n    }): void;\r\n    /**\r\n     * Gets the preferred locale of the current customer.\r\n     *\r\n     * @returns The preferred locale code.\r\n     */\r\n    getLocale(): string;\r\n    /**\r\n     * Gets a language string by a key.\r\n     *\r\n     * ```js\r\n     * service.translate('language_key');\r\n     * ```\r\n     *\r\n     * If the language string contains a placeholder, you can replace it by\r\n     * providing a second argument.\r\n     *\r\n     * ```js\r\n     * service.translate('language_key', { placeholder: 'Hello' });\r\n     * ```\r\n     *\r\n     * @param key - The language key.\r\n     * @param data - Data for replacing placeholders in the language string.\r\n     * @returns The translated language string.\r\n     */\r\n    translate(key: string, data?: TranslationData): string;\r\n    private _transformConfig;\r\n    private _flattenObject;\r\n    private _transformData;\r\n    private _hasTranslations;\r\n    private _isFormatError;\r\n    private _escapeSpecialCharacters;\r\n}\r\n\r\ndeclare interface LegacyHostedFormOptions {\r\n    fields: HostedFieldOptionsMap;\r\n    styles?: HostedFieldStylesMap;\r\n    onBlur?(data: HostedFieldBlurEventData): void;\r\n    onCardTypeChange?(data: HostedFieldCardTypeChangeEventData): void;\r\n    onEnter?(data: HostedFieldEnterEventData): void;\r\n    onFocus?(data: HostedFieldFocusEventData): void;\r\n    onValidate?(data: HostedFieldValidateEventData): void;\r\n}\r\n\r\ndeclare interface LineItem {\r\n    id: string | number;\r\n    variantId: number;\r\n    productId: number;\r\n    sku: string;\r\n    name: string;\r\n    url: string;\r\n    quantity: number;\r\n    brand: string;\r\n    categoryNames?: string[];\r\n    categories?: LineItemCategory[][];\r\n    isTaxable: boolean;\r\n    imageUrl: string;\r\n    discounts: Array<{\r\n        name: string;\r\n        discountedAmount: number;\r\n    }>;\r\n    discountAmount: number;\r\n    couponAmount: number;\r\n    listPrice: number;\r\n    salePrice: number;\r\n    retailPrice: number;\r\n    comparisonPrice: number;\r\n    extendedListPrice: number;\r\n    extendedSalePrice: number;\r\n    extendedComparisonPrice: number;\r\n    socialMedia?: LineItemSocialData[];\r\n    options?: LineItemOption[];\r\n    addedByPromotion: boolean;\r\n    parentId?: string | null;\r\n    quantityBackordered?: number;\r\n    backorderMessage?: string | null;\r\n    stockPosition?: StockPosition;\r\n}\r\n\r\ndeclare interface LineItemCategory {\r\n    name: string;\r\n}\r\n\r\ndeclare interface LineItemMap {\r\n    physicalItems: PhysicalItem[];\r\n    digitalItems: DigitalItem[];\r\n    customItems?: CustomItem[];\r\n    giftCertificates: GiftCertificateItem[];\r\n}\r\n\r\ndeclare interface LineItemOption {\r\n    name: string;\r\n    nameId: number;\r\n    value: string;\r\n    valueId: number | null;\r\n}\r\n\r\ndeclare interface LineItemSocialData {\r\n    channel: string;\r\n    code: string;\r\n    text: string;\r\n    link: string;\r\n}\r\n\r\ndeclare interface LinkStyles extends InlineElementStyles {\r\n    active?: InlineElementStyles;\r\n    focus?: InlineElementStyles;\r\n    hover?: InlineElementStyles;\r\n}\r\n\r\ndeclare interface Locales {\r\n    [key: string]: string;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Mollie payment method.\r\n *\r\n * Once Mollie payment is initialized, credit card form fields are provided by the\r\n * payment provider as IFrames, these will be inserted into the current page. These\r\n * options provide a location and styling for each of the form fields.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *      methodId: 'mollie',\r\n *      mollie: {\r\n *          containerId: 'container',\r\n *          cardNumberId: '',\r\n *          cardHolderId: '',\r\n *          cardCvcId: '',\r\n *          cardExpiryId: '',\r\n *          styles : {\r\n *              base: {\r\n *                  color: '#fff'\r\n *              }\r\n *          }\r\n *      }\r\n * });\r\n * ```\r\n */\r\ndeclare interface MolliePaymentInitializeOptions {\r\n    /**\r\n     * ContainerId is use in Mollie for determined either its showing or not the\r\n     * container, because when Mollie has Vaulted Instruments it gets hide,\r\n     * and shows an error because can't mount Provider Components\r\n     */\r\n    containerId?: string;\r\n    /**\r\n     * The location to insert Mollie Component\r\n     */\r\n    cardNumberId: string;\r\n    /**\r\n     * The location to insert Mollie Component\r\n     */\r\n    cardHolderId: string;\r\n    /**\r\n     * The location to insert Mollie Component\r\n     */\r\n    cardCvcId: string;\r\n    /**\r\n     * The location to insert Mollie Component\r\n     */\r\n    cardExpiryId: string;\r\n    /**\r\n     * A set of styles required for the mollie components\r\n     */\r\n    styles: object;\r\n    /**\r\n     * Hosted Form Validation Options\r\n     */\r\n    form?: HostedFormOptions;\r\n    unsupportedMethodMessage?: string;\r\n    disableButton(disabled: boolean): void;\r\n}\r\n\r\ndeclare interface MutationObeserverCreator {\r\n    prototype: MutationObserver;\r\n    new (callback: MutationCallback): MutationObserver;\r\n}\r\n\r\ndeclare class MutationObserverFactory {\r\n    private _window;\r\n    constructor(_window?: MutationObserverWindow);\r\n    create(callback: MutationCallback): MutationObserver;\r\n}\r\n\r\ndeclare interface MutationObserverWindow extends Window {\r\n    MutationObserver: MutationObeserverCreator;\r\n}\r\n\r\ndeclare interface NonceInstrument {\r\n    nonce: string;\r\n    shouldSaveInstrument?: boolean;\r\n    shouldSetAsDefaultInstrument?: boolean;\r\n    deviceSessionId?: string;\r\n    tokenType?: string;\r\n}\r\n\r\ndeclare type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;\r\n\r\ndeclare interface Option {\r\n    pickupMethod: PickupMethod;\r\n    itemQuantities: Item;\r\n}\r\n\r\ndeclare interface Order {\r\n    baseAmount: number;\r\n    billingAddress: OrderBillingAddress;\r\n    cartId: string;\r\n    coupons: Coupon[];\r\n    consignments: OrderConsignment;\r\n    currency: Currency_2;\r\n    customerCanBeCreated: boolean;\r\n    customerId: number;\r\n    customerMessage: string;\r\n    discountAmount: number;\r\n    displayDiscountTotal: number;\r\n    handlingCostTotal: number;\r\n    hasDigitalItems: boolean;\r\n    isComplete: boolean;\r\n    isDownloadable: boolean;\r\n    isTaxIncluded: boolean;\r\n    lineItems: LineItemMap;\r\n    orderAmount: number;\r\n    orderAmountAsInteger: number;\r\n    orderBasedAutoDiscountTotal: number;\r\n    orderId: number;\r\n    manualDiscountTotal: number;\r\n    productAutoDiscountedSubtotal: number;\r\n    payments?: OrderPayments;\r\n    giftWrappingCostTotal: number;\r\n    comparisonShippingCost: number;\r\n    shippingCostTotal: number;\r\n    shippingCostBeforeDiscount: number;\r\n    status: string;\r\n    taxes: Tax[];\r\n    taxTotal: number;\r\n    totalDiscount: number;\r\n    channelId: number;\r\n    fees: OrderFee[];\r\n}\r\n\r\ndeclare interface OrderBillingAddress extends Address {\r\n    email?: string;\r\n}\r\n\r\ndeclare interface OrderBillingAddressSelector {\r\n    getOrderBillingAddress(): OrderBillingAddress | undefined;\r\n}\r\n\r\ndeclare interface OrderConsignment {\r\n    shipping: OrderShippingConsignment[];\r\n}\r\n\r\ndeclare interface OrderFee {\r\n    id: number;\r\n    type: string;\r\n    customerDisplayName: string;\r\n    cost: number;\r\n    source: string;\r\n}\r\n\r\ndeclare interface OrderFinalizeOptions extends RequestOptions {\r\n    /**\r\n     * @alpha\r\n     */\r\n    integrations?: Array<PaymentStrategyFactory<PaymentStrategy>>;\r\n}\r\n\r\ndeclare type OrderMeta = OrderMetaState;\r\n\r\ndeclare interface OrderMetaState extends InternalOrderMeta {\r\n    token?: string;\r\n    orderToken?: string;\r\n    callbackUrl?: string;\r\n    payment?: InternalOrderPayment;\r\n}\r\n\r\ndeclare interface OrderPayment {\r\n    providerId: string;\r\n    gatewayId?: string;\r\n    methodId?: string;\r\n    paymentId?: string;\r\n    description: string;\r\n    amount: number;\r\n}\r\n\r\ndeclare type OrderPaymentInstrument = WithBankAccountInstrument | WithEcpInstrument | WithSepaInstrument | WithPayByBankInstrument | WithIdealInstrument | CreditCardInstrument | HostedInstrument | HostedCreditCardInstrument | HostedVaultedInstrument | NonceInstrument | VaultedInstrument | (CreditCardInstrument & WithDocumentInstrument) | (CreditCardInstrument & WithCheckoutcomFawryInstrument) | (CreditCardInstrument & WithCheckoutcomSEPAInstrument) | (CreditCardInstrument & WithIdealInstrument) | (HostedInstrument & WithMollieIssuerInstrument) | WithAccountCreation;\r\n\r\n/**\r\n * An object that contains the payment information required for submitting an\r\n * order.\r\n */\r\ndeclare interface OrderPaymentRequestBody {\r\n    /**\r\n     * The identifier of the payment method that is chosen for the order.\r\n     */\r\n    methodId: string;\r\n    /**\r\n     * The identifier of the payment provider that is chosen for the order.\r\n     */\r\n    gatewayId?: string;\r\n    /**\r\n     * An object that contains the details of a credit card, vaulted payment\r\n     * instrument or nonce instrument.\r\n     */\r\n    paymentData?: OrderPaymentInstrument;\r\n}\r\n\r\ndeclare type OrderPayments = Array<GatewayOrderPayment | GiftCertificateOrderPayment>;\r\n\r\n/**\r\n * An object that contains the information required for submitting an order.\r\n */\r\ndeclare interface OrderRequestBody {\r\n    /**\r\n     * An object that contains the payment details of a customer. In some cases,\r\n     * you can omit this object if the order does not require further payment.\r\n     * For example, the customer is able to use their store credit to pay for\r\n     * the entire order. Or they have already submitted their payment details\r\n     * using PayPal.\r\n     */\r\n    payment?: OrderPaymentRequestBody;\r\n    /**\r\n     * If true, apply the store credit of the customer to the order. It only\r\n     * works if the customer has previously signed in.\r\n     */\r\n    useStoreCredit?: boolean;\r\n}\r\n\r\ndeclare interface OrderSelector {\r\n    getOrder(): Order | undefined;\r\n    getOrderOrThrow(): Order;\r\n    getOrderMeta(): OrderMetaState | undefined;\r\n    getLoadError(): Error | undefined;\r\n    getPaymentId(methodId: string): string | undefined;\r\n    isLoading(): boolean;\r\n}\r\n\r\ndeclare interface OrderShippingConsignment {\r\n    lineItems: Array<{\r\n        id: number;\r\n    }>;\r\n    shippingAddressId: number;\r\n    firstName: string;\r\n    lastName: string;\r\n    company: string;\r\n    address1: string;\r\n    address2: string;\r\n    city: string;\r\n    stateOrProvince: string;\r\n    postalCode: string;\r\n    country: string;\r\n    countryCode: string;\r\n    email: string;\r\n    phone: string;\r\n    itemsTotal: number;\r\n    itemsShipped: number;\r\n    shippingMethod: string;\r\n    baseCost: number;\r\n    costExTax: number;\r\n    costIncTax: number;\r\n    costTax: number;\r\n    costTaxClassId: number;\r\n    baseHandlingCost: number;\r\n    handlingCostExTax: number;\r\n    handlingCostIncTax: number;\r\n    handlingCostTax: number;\r\n    handlingCostTaxClassId: number;\r\n    shippingZoneId: number;\r\n    shippingZoneName: string;\r\n    customFields: Array<{\r\n        name: string;\r\n        value: string | null;\r\n    }>;\r\n    discounts: OrderShippingConsignmentDiscount[];\r\n}\r\n\r\ndeclare interface OrderShippingConsignmentDiscount {\r\n    id: number;\r\n    amount: number;\r\n    code: string | null;\r\n}\r\n\r\ndeclare interface PasswordRequirements {\r\n    alpha: string;\r\n    numeric: string;\r\n    minlength: number;\r\n    error: string;\r\n}\r\n\r\ndeclare interface PayPalButtonStyleOptions {\r\n    color?: StyleButtonColor;\r\n    shape?: StyleButtonShape;\r\n    height?: number;\r\n    label?: StyleButtonLabel;\r\n}\r\n\r\ndeclare interface PayPalButtonStyleOptions_2 {\r\n    color?: StyleButtonColor_2;\r\n    shape?: StyleButtonShape_3;\r\n    height?: number;\r\n    label?: StyleButtonLabel_2;\r\n}\r\n\r\n/**\r\n *\r\n * BigCommerce Payments BuyNow\r\n *\r\n */\r\ndeclare interface PayPalBuyNowInitializeOptions {\r\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\r\n}\r\n\r\n/**\r\n *\r\n * PayPal Commerce BuyNow\r\n *\r\n */\r\ndeclare interface PayPalBuyNowInitializeOptions_2 {\r\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPal Commerce payment\r\n * method for presenting its PayPal button.\r\n *\r\n * Please note that the minimum version of checkout-sdk is 1.100\r\n *\r\n * Also, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the PayPal button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * <!-- This is where the PayPal alternative payment methods fields will be inserted.  -->\r\n * <div id=\"apm-fields-container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     gatewayId: 'paypalcommercealternativemethods',\r\n *     methodId: 'sepa',\r\n *     paypalcommercealternativemethods: {\r\n *         container: '#container',\r\n *         apmFieldsContainer: '#apm-fields-container',\r\n *         apmFieldsStyles: {\r\n *             base: {\r\n *                 backgroundColor: 'transparent',\r\n *             },\r\n *             input: {\r\n *                 backgroundColor: 'white',\r\n *                 fontSize: '1rem',\r\n *                 color: '#333',\r\n *                 borderColor: '#d9d9d9',\r\n *                 borderRadius: '4px',\r\n *                 borderWidth: '1px',\r\n *                 padding: '1rem',\r\n *             },\r\n *             invalid: {\r\n *                 color: '#ed6a6a',\r\n *             },\r\n *             active: {\r\n *                 color: '#4496f6',\r\n *             },\r\n *         },\r\n *         clientId: 'YOUR_CLIENT_ID',\r\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'paypalcommercealternativemethods', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommerceAlternativeMethodsPaymentOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * The CSS selector of a container where the alternative payment methods fields widget should be inserted into.\r\n     * It's necessary to specify this parameter when using Alternative Payment Methods.\r\n     * Without it alternative payment methods will not work.\r\n     */\r\n    apmFieldsContainer?: string;\r\n    /**\r\n     * Object with styles to customize alternative payment methods fields.\r\n     */\r\n    apmFieldsStyles?: PayPalCommerceFieldsStyleOptions;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error | unknown): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm(): void;\r\n    /**\r\n     * A callback that gets called\r\n     * when Smart Payment Button is initialized.\r\n     */\r\n    onInitButton(actions: InitCallbackActions_2): Promise<void>;\r\n}\r\n\r\ndeclare interface PayPalCommerceAnalyticTrackerService {\r\n    customerPaymentMethodExecuted(): void;\r\n    paymentComplete(): void;\r\n    selectedPaymentMethod(methodId: string): void;\r\n    walletButtonClick(methodId: string): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize PayPalCommerce in cart or product details page.\r\n *\r\n * When PayPalCommerce is initialized, an PayPalCommerce button will be inserted into the\r\n * DOM. When a customer clicks on it, it will trigger Apple sheet.\r\n */\r\ndeclare interface PayPalCommerceButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions_2;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions_2;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface PayPalCommerceCreditButtonInitializeOptions {\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions_2;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions_2;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPal Commerce payment\r\n * method for presenting its credit card form.\r\n *\r\n * ```html\r\n * <!-- These containers are where the hosted (iframed) credit card fields will be inserted -->\r\n * <div id=\"card-number\"></div>\r\n * <div id=\"card-name\"></div>\r\n * <div id=\"card-expiry\"></div>\r\n * <div id=\"card-code\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalcommercecreditcard',\r\n *     paypalcommercecreditcard: {\r\n *         form: {\r\n *             fields: {\r\n *                 cardNumber: { containerId: 'card-number' },\r\n *                 cardName: { containerId: 'card-name' },\r\n *                 cardExpiry: { containerId: 'card-expiry' },\r\n *                 cardCode: { containerId: 'card-code' },\r\n *             },\r\n *         },\r\n *         onCreditCardFieldsRenderingError: (error) => handleError(error),\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Additional options can be passed in to customize the fields and register\r\n * event callbacks.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalcommercecreditcard',\r\n *     paypalcommercecreditcard: {\r\n *         form: {\r\n *             fields: {\r\n *                 cardNumber: { containerId: 'card-number', placeholder: 'Number of card' },\r\n *                 cardName: { containerId: 'card-name', placeholder: 'Name of card' },\r\n *                 cardExpiry: { containerId: 'card-expiry', placeholder: 'Expiry of card' },\r\n *                 cardCode: { containerId: 'card-code', placeholder: 'Code of card' },\r\n *             },\r\n *             styles: {\r\n *                 default: {\r\n *                     color: '#000',\r\n *                 },\r\n *                 error: {\r\n *                     color: '#f00',\r\n *                 },\r\n *                 focus: {\r\n *                     color: '#0f0',\r\n *                 },\r\n *             },\r\n *             onBlur({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onFocus({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onEnter({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onCardTypeChange({ cardType }) {\r\n *                 console.log(cardType);\r\n *             },\r\n *             onValidate({ errors, isValid }) {\r\n *                 console.log(errors);\r\n *                 console.log(isValid);\r\n *             },\r\n *         },\r\n *         onCreditCardFieldsRenderingError: (error) => handleError(error),\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommerceCreditCardsPaymentInitializeOptions {\r\n    /**\r\n     * The form is data for Credit Card Form\r\n     */\r\n    form: HostedFormOptions;\r\n    /**\r\n     * The callback that gets called when there is an issue with rendering credit card fields\r\n     */\r\n    onCreditCardFieldsRenderingError?: (error: unknown) => void;\r\n    /**\r\n     * The callback that gets called when PayPal SDK load complete\r\n     */\r\n    onLoadComplete?: () => void;\r\n}\r\n\r\ndeclare interface PayPalCommerceCreditCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     * A callback that gets called when paypal button clicked.\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPal Commerce payment\r\n * method for presenting its PayPal button.\r\n *\r\n * Please note that the minimum version of checkout-sdk is 1.100\r\n *\r\n * Also, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the PayPal button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalcommercecredit',\r\n *     paypalcommercecredit: {\r\n *         container: '#container',\r\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'paypalcommercecredit', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommerceCreditPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container?: string;\r\n    /**\r\n     * The location to insert the Pay Later Messages.\r\n     */\r\n    bannerContainerId?: string;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate?(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the customer step of\r\n * checkout to support PayPalCommerce.\r\n */\r\ndeclare interface PayPalCommerceCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     * A callback that gets called when paypal button clicked.\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are optional to initialize the PayPalCommerce Fastlane customer strategy\r\n * that are responsible for PayPalCommerce Fastlane components styling and initialization\r\n *\r\n * ```js\r\n * service.initializeCustomer({\r\n *     methodId: 'paypalcommerceacceleratedcheckout', // PayPalCommerce Fastlane has 'paypalcommerceacceleratedcheckout' method id\r\n *     paypalcommercefastlane: {\r\n *         styles: {\r\n *              root: {\r\n *                  backgroundColorPrimary: 'transparent',\r\n *                  errorColor: '#C40B0B',\r\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n *              },\r\n *              input: {\r\n *                  borderRadius: '0.25rem',\r\n *                  borderColor: '#9E9E9E',\r\n *                  focusBorderColor: '#4496F6',\r\n *              },\r\n *              toggle: {\r\n *                  colorPrimary: '#0F005E',\r\n *                  colorSecondary: '#ffffff',\r\n *              },\r\n *              text: {\r\n *                  body: {\r\n *                      color: '#222222',\r\n *                      fontSize: '1rem',\r\n *                  },\r\n *                  caption: {\r\n *                      color: '#515151',\r\n *                      fontSize: '0.875rem',\r\n *                  },\r\n *              },\r\n *              branding: 'light',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommerceFastlaneCustomerInitializeOptions {\r\n    /**\r\n     * Is a stylisation options for customizing PayPal Fastlane components\r\n     *\r\n     * Note: the styles for all PayPalCommerce Fastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter which strategy was initialised first\r\n     */\r\n    styles?: PayPalFastlaneStylesOption_2;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPalCommerce Accelerated Checkout payment\r\n * method for presenting on the page.\r\n *\r\n *\r\n * Also, PayPalCommerce requires specific options to initialize PayPal Fastlane Card Component\r\n * ```html\r\n * <!-- This is where the PayPal Fastlane Card Component will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalcommerceacceleratedcheckout', // PayPal Fastlane has 'paypalcommerceacceleratedcheckout' method id\r\n *     paypalcommercefastlane: {\r\n *         onInit: (renderPayPalCardComponent) => renderPayPalCardComponent('#container-id'),\r\n *         onChange: (showPayPalCardSelector) => showPayPalCardSelector(),\r\n *         styles: {\r\n *              root: {\r\n *                  backgroundColorPrimary: 'transparent',\r\n *                  errorColor: '#C40B0B',\r\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n *              },\r\n *              input: {\r\n *                  borderRadius: '0.25rem',\r\n *                  borderColor: '#9E9E9E',\r\n *                  focusBorderColor: '#4496F6',\r\n *              },\r\n *              toggle: {\r\n *                  colorPrimary: '#0F005E',\r\n *                  colorSecondary: '#ffffff',\r\n *              },\r\n *              text: {\r\n *                  body: {\r\n *                      color: '#222222',\r\n *                      fontSize: '1rem',\r\n *                  },\r\n *                  caption: {\r\n *                      color: '#515151',\r\n *                      fontSize: '0.875rem',\r\n *                  },\r\n *              },\r\n *              branding: 'light',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommerceFastlanePaymentInitializeOptions {\r\n    /**\r\n     * Is a callback that takes the CSS selector of a container\r\n     * where the PayPal Fastlane form should be inserted into.\r\n     */\r\n    onInit?: (renderPayPalCardComponent: (container: string) => void) => void;\r\n    /**\r\n     * Is a callback that shows PayPal stored instruments\r\n     * when get triggered\r\n     */\r\n    onChange?: (showPayPalCardSelector: () => Promise<CardInstrument_2 | undefined>) => void;\r\n    /**\r\n     * Callback that handles errors\r\n     */\r\n    onError?: (error: unknown) => void;\r\n    /**\r\n     * Is a stylisation options for customizing PayPal Fastlane components\r\n     *\r\n     * Note: the styles for all PayPalCommerceFastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter what strategy was initialised first\r\n     */\r\n    styles?: PayPalFastlaneStylesOption_2;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the shipping step of\r\n * checkout in order to support PayPal Commerce Fastlane.\r\n */\r\ndeclare interface PayPalCommerceFastlaneShippingInitializeOptions {\r\n    /**\r\n     * Is a stylisation options for customizing PayPal Fastlane components\r\n     *\r\n     * Note: the styles for all PayPal Commerce Fastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter what strategy was initialised first\r\n     */\r\n    styles?: PayPalFastlaneStylesOption_3;\r\n    /**\r\n     * Is a callback that shows PayPal Fastlane popup with customer addresses\r\n     * when get triggered\r\n     */\r\n    onPayPalFastlaneAddressChange?: (showPayPalFastlaneAddressSelector: () => Promise<CustomerAddress_2 | undefined>) => void;\r\n}\r\n\r\ndeclare interface PayPalCommerceFieldsStyleOptions {\r\n    variables?: {\r\n        fontFamily?: string;\r\n        fontSizeBase?: string;\r\n        fontSizeSm?: string;\r\n        fontSizeM?: string;\r\n        fontSizeLg?: string;\r\n        textColor?: string;\r\n        colorTextPlaceholder?: string;\r\n        colorBackground?: string;\r\n        colorInfo?: string;\r\n        colorDanger?: string;\r\n        borderRadius?: string;\r\n        borderColor?: string;\r\n        borderWidth?: string;\r\n        borderFocusColor?: string;\r\n        spacingUnit?: string;\r\n    };\r\n    rules?: {\r\n        [key: string]: any;\r\n    };\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPal Commerce payment\r\n * method for presenting its PayPal button.\r\n *\r\n * Please note that the minimum version of checkout-sdk is 1.100\r\n *\r\n * Also, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the PayPal button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalcommerce',\r\n *     paypalcommerce: {\r\n *         container: '#container',\r\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'paypalcommerce', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommercePaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container?: string;\r\n    /**\r\n     * The location to insert the Pay Later Messages.\r\n     */\r\n    bannerContainerId?: string;\r\n    /**\r\n     * If there is no need to initialize the Smart Payment Button, simply pass false as the option value.\r\n     * The default value is true\r\n     */\r\n    shouldRenderPayPalButtonOnInitialization?: boolean;\r\n    /**\r\n     * A callback for getting form fields values.\r\n     */\r\n    getFieldsValues?(): HostedInstrument_2;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: unknown): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when strategy is in the process of initialization before rendering Smart Payment Button.\r\n     *\r\n     * @param callback - A function, that calls the method to render the Smart Payment Button.\r\n     */\r\n    onInit?(callback: () => void): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate?(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm?(): void;\r\n}\r\n\r\ndeclare interface PayPalCommerceVenmoButtonInitializeOptions {\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions_2;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions_2;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare interface PayPalCommerceVenmoCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when paypal button clicked.\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPal Commerce payment\r\n * method for presenting its PayPal button.\r\n *\r\n * Please note that the minimum version of checkout-sdk is 1.100\r\n *\r\n * Also, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the PayPal button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalcommercevenmo',\r\n *     paypalcommercevenmo: {\r\n *         container: '#container',\r\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'paypalcommercevenmo', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommerceVenmoPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm(): void;\r\n}\r\n\r\ndeclare interface PayPalInstrument extends BaseAccountInstrument {\r\n    externalId: string;\r\n    method: 'paypal';\r\n}\r\n\r\ndeclare interface PaymentAdditionalAction {\r\n    type: string;\r\n    data: CardingProtectionActionData;\r\n}\r\n\r\ndeclare class PaymentHumanVerificationHandler {\r\n    private _googleRecaptcha;\r\n    constructor(_googleRecaptcha: GoogleRecaptcha);\r\n    handle(error: any): Promise<PaymentAdditionalAction>;\r\n    handle(id: string, key: string): Promise<PaymentAdditionalAction>;\r\n    private handleWithPaymentHumanVerificationRequestError;\r\n    private handleWithRecaptchaSitekey;\r\n    private _performRecaptcha;\r\n    private _initialize;\r\n    private _isPaymentHumanVerificationRequest;\r\n}\r\n\r\ndeclare type PaymentInitializeOptions = BasePaymentInitializeOptions & WithAdyenV3PaymentInitializeOptions & WithAdyenV2PaymentInitializeOptions & WithAmazonPayV2PaymentInitializeOptions & WithApplePayPaymentInitializeOptions & WithBigCommercePaymentsPaymentInitializeOptions & WithBigCommercePaymentsFastlanePaymentInitializeOptions & WithBigCommercePaymentsPayLaterPaymentInitializeOptions & WithBigCommercePaymentsRatePayPaymentInitializeOptions & WithBigCommercePaymentsCreditCardsPaymentInitializeOptions & WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions & WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions & WithBigCommercePaymentsVenmoPaymentInitializeOptions & WithBlueSnapDirectAPMPaymentInitializeOptions & WithBlueSnapV2PaymentInitializeOptions & WithBoltPaymentInitializeOptions & WithBraintreeAchPaymentInitializeOptions & WithBraintreeLocalMethodsPaymentInitializeOptions & WithBraintreeFastlanePaymentInitializeOptions & WithBraintreeCreditCardPaymentInitializeOptions & WithCreditCardPaymentInitializeOptions & WithGooglePayPaymentInitializeOptions & WithMolliePaymentInitializeOptions & WithPayPalCommercePaymentInitializeOptions & WithPayPalCommerceCreditPaymentInitializeOptions & WithPayPalCommerceVenmoPaymentInitializeOptions & WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions & WithPayPalCommerceCreditCardsPaymentInitializeOptions & WithPayPalCommerceRatePayPaymentInitializeOptions & WithPayPalCommerceFastlanePaymentInitializeOptions & WithPaypalExpressPaymentInitializeOptions & WithSquareV2PaymentInitializeOptions & WithStripeV3PaymentInitializeOptions & WithStripeUPEPaymentInitializeOptions & WithStripeOCSPaymentInitializeOptions & WithWorldpayAccessPaymentInitializeOptions;\r\n\r\ndeclare type PaymentInstrument = CardInstrument | AccountInstrument;\r\n\r\ndeclare interface PaymentInstrumentMeta {\r\n    deviceSessionId?: string;\r\n}\r\n\r\ndeclare interface PaymentMethod<T = any> {\r\n    id: string;\r\n    config: PaymentMethodConfig;\r\n    method: string;\r\n    supportedCards: string[];\r\n    type: string;\r\n    clientToken?: string;\r\n    gateway?: string;\r\n    logoUrl?: string;\r\n    nonce?: string;\r\n    initializationData?: T;\r\n    returnUrl?: string;\r\n    initializationStrategy?: InitializationStrategy;\r\n    skipRedirectConfirmationAlert: boolean;\r\n}\r\n\r\ndeclare interface PaymentMethodConfig {\r\n    cardCode?: boolean;\r\n    displayName?: string;\r\n    enablePaypal?: boolean;\r\n    hasDefaultStoredInstrument?: boolean;\r\n    helpText?: string;\r\n    is3dsEnabled?: boolean;\r\n    isHostedFormEnabled?: boolean;\r\n    isVaultingCvvEnabled?: boolean;\r\n    isVaultingEnabled?: boolean;\r\n    isVisaCheckoutEnabled?: boolean;\r\n    logo?: string;\r\n    merchantId?: string;\r\n    redirectUrl?: string;\r\n    requireCustomerCode?: boolean;\r\n    returnUrl?: string;\r\n    showCardHolderName?: boolean;\r\n    testMode?: boolean;\r\n}\r\n\r\ndeclare interface PaymentMethodMeta {\r\n    deviceSessionId: string;\r\n    sessionHash: string;\r\n}\r\n\r\ndeclare interface PaymentMethodSelector {\r\n    getPaymentMethods(): PaymentMethod[] | undefined;\r\n    getPaymentMethodsMeta(): PaymentMethodMeta | undefined;\r\n    getPaymentMethod(methodId: string, gatewayId?: string): PaymentMethod | undefined;\r\n    getPaymentMethodOrThrow(methodId: string, gatewayId?: string): PaymentMethod;\r\n    getLoadError(): Error | undefined;\r\n    getLoadMethodError(methodId?: string): Error | undefined;\r\n    isLoading(): boolean;\r\n    isLoadingMethod(methodId?: string): boolean;\r\n}\r\n\r\ndeclare type PaymentProviderCustomer = PaymentProviderCustomerType;\r\n\r\ndeclare interface PaymentProviderCustomerSelector {\r\n    getPaymentProviderCustomer(): PaymentProviderCustomer | undefined;\r\n    getPaymentProviderCustomerOrThrow(): PaymentProviderCustomer;\r\n}\r\n\r\n/**\r\n * The set of options for configuring any requests related to the payment step of\r\n * the current checkout flow.\r\n */\r\ndeclare interface PaymentRequestOptions extends RequestOptions {\r\n    /**\r\n     * The identifier of the payment method.\r\n     */\r\n    methodId: string;\r\n    /**\r\n     * The identifier of the payment provider providing the payment method. This\r\n     * option is only required if the provider offers multiple payment options.\r\n     * i.e.: Adyen and Klarna.\r\n     */\r\n    gatewayId?: string;\r\n}\r\n\r\ndeclare interface PaymentSelector {\r\n    getPaymentId(): {\r\n        providerId: string;\r\n        gatewayId?: string;\r\n    } | undefined;\r\n    getPaymentIdOrThrow(): {\r\n        providerId: string;\r\n        gatewayId?: string;\r\n    };\r\n    getPaymentStatus(): string | undefined;\r\n    getPaymentStatusOrThrow(): string;\r\n    getPaymentToken(): string | undefined;\r\n    getPaymentTokenOrThrow(): string;\r\n    getPaymentRedirectUrl(): string | undefined;\r\n    getPaymentRedirectUrlOrThrow(): string;\r\n    isPaymentDataRequired(useStoreCredit?: boolean): boolean;\r\n    isPaymentDataSubmitted(paymentMethod?: PaymentMethod): boolean;\r\n}\r\n\r\ndeclare interface PaymentSettings {\r\n    bigpayBaseUrl: string;\r\n    clientSidePaymentProviders: string[];\r\n}\r\n\r\ndeclare interface PaymentStrategySelector {\r\n    getInitializeError(methodId?: string): Error | undefined;\r\n    getExecuteError(methodId?: string): Error | undefined;\r\n    getFinalizeError(methodId?: string): Error | undefined;\r\n    getWidgetInteractingError(methodId?: string): Error | undefined;\r\n    isInitializing(methodId?: string): boolean;\r\n    isInitialized(query: InitiaizedQuery): boolean;\r\n    isExecuting(methodId?: string): boolean;\r\n    isFinalizing(methodId?: string): boolean;\r\n    isWidgetInteracting(methodId?: string): boolean;\r\n}\r\n\r\ndeclare interface PaypalButtonInitializeOptions {\r\n    /**\r\n     * The Client ID of the Paypal App\r\n     */\r\n    clientId: string;\r\n    /**\r\n     * Whether or not to show a credit button.\r\n     */\r\n    allowCredit?: boolean;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: Pick<PaypalStyleOptions, 'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons'>;\r\n    /**\r\n     * A callback that gets called if unable to authorize and tokenize payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onAuthorizeError?(error: StandardError): void;\r\n    /**\r\n     * A callback that gets called if unable to submit payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onPaymentError?(error: StandardError): void;\r\n}\r\n\r\ndeclare enum PaypalButtonStyleColorOption {\r\n    GOLD = \"gold\",\r\n    BLUE = \"blue\",\r\n    SIlVER = \"silver\",\r\n    BLACK = \"black\",\r\n    WHITE = \"white\"\r\n}\r\n\r\ndeclare enum PaypalButtonStyleLabelOption {\r\n    CHECKOUT = \"checkout\",\r\n    PAY = \"pay\",\r\n    BUYNOW = \"buynow\",\r\n    PAYPAL = \"paypal\",\r\n    CREDIT = \"credit\"\r\n}\r\n\r\ndeclare enum PaypalButtonStyleLayoutOption {\r\n    HORIZONTAL = \"horizontal\",\r\n    VERTICAL = \"vertical\"\r\n}\r\n\r\ndeclare enum PaypalButtonStyleShapeOption {\r\n    PILL = \"pill\",\r\n    RECT = \"rect\"\r\n}\r\n\r\ndeclare enum PaypalButtonStyleSizeOption {\r\n    SMALL = \"small\",\r\n    MEDIUM = \"medium\",\r\n    LARGE = \"large\",\r\n    RESPONSIVE = \"responsive\"\r\n}\r\n\r\ndeclare interface PaypalCommerceRatePay {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * The CSS selector of a container where the legal text should be inserted into.\r\n     */\r\n    legalTextContainer: string;\r\n    /**\r\n     * The CSS selector of a container where loading indicator should be rendered\r\n     */\r\n    loadingContainerId: string;\r\n    /**\r\n     * A callback that gets form values\r\n     */\r\n    getFieldsValues?(): {\r\n        ratepayBirthDate: BirthDate_2;\r\n        ratepayPhoneNumber: string;\r\n        ratepayPhoneCountryCode: string;\r\n    };\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: unknown): void;\r\n}\r\n\r\ndeclare interface PaypalStyleOptions {\r\n    layout?: PaypalButtonStyleLayoutOption;\r\n    size?: PaypalButtonStyleSizeOption;\r\n    color?: PaypalButtonStyleColorOption;\r\n    label?: PaypalButtonStyleLabelOption;\r\n    shape?: PaypalButtonStyleShapeOption;\r\n    tagline?: boolean;\r\n    fundingicons?: boolean;\r\n    height?: number;\r\n}\r\n\r\ndeclare interface PhysicalItem extends LineItem {\r\n    isShippingRequired: boolean;\r\n    giftWrapping?: {\r\n        name: string;\r\n        message: string;\r\n        amount: number;\r\n    };\r\n}\r\n\r\ndeclare interface PickupMethod {\r\n    id: number;\r\n    locationId: number;\r\n    displayName: string;\r\n    collectionInstructions: string;\r\n    collectionTimeDescription: string;\r\n}\r\n\r\ndeclare interface PickupOptionRequestBody {\r\n    searchArea: SearchArea;\r\n    consignmentId: string;\r\n}\r\n\r\ndeclare interface PickupOptionResult {\r\n    options: Option[];\r\n}\r\n\r\ndeclare interface PickupOptionSelector {\r\n    getPickupOptions(consignmentId: string, searchArea: SearchArea): PickupOptionResult[] | undefined;\r\n    getLoadError(): Error | undefined;\r\n    isLoading(): boolean;\r\n}\r\n\r\ndeclare interface Promotion {\r\n    banners: Banner[];\r\n}\r\n\r\ndeclare interface Radius {\r\n    value: number;\r\n    unit: RadiusUnit;\r\n}\r\n\r\ndeclare enum RadiusUnit {\r\n    KM = \"KM\",\r\n    MI = \"MI\"\r\n}\r\n\r\ndeclare interface ReRenderShippingForm {\r\n    type: ExtensionCommandType.ReRenderShippingForm;\r\n}\r\n\r\ndeclare interface ReRenderShippingStep {\r\n    type: ExtensionCommandType.ReRenderShippingStep;\r\n}\r\n\r\ndeclare type ReadableCheckoutStore = ReadableDataStore<InternalCheckoutSelectors>;\r\n\r\ndeclare interface RecaptchaResult {\r\n    error?: Error;\r\n    token?: string;\r\n}\r\n\r\ndeclare interface Region {\r\n    code: string;\r\n    name: string;\r\n}\r\n\r\ndeclare interface ReloadCheckoutCommand {\r\n    type: ExtensionCommandType.ReloadCheckout;\r\n}\r\n\r\ndeclare interface RemoteCheckoutSelector {\r\n    getCheckout<TMethodId extends keyof RemoteCheckoutStateData>(methodId: TMethodId): RemoteCheckoutStateData[TMethodId] | undefined;\r\n}\r\n\r\ndeclare interface RemoteCheckoutStateData {\r\n    amazon?: AmazonPayRemoteCheckout;\r\n}\r\n\r\n/**\r\n * Throw this error if we are unable to make a request to the server. It wraps\r\n * any server response into a JS error object.\r\n */\r\ndeclare class RequestError<TBody = any> extends StandardError {\r\n    body: TBody | object;\r\n    headers: {\r\n        [key: string]: any;\r\n    };\r\n    errors: Array<{\r\n        code: string;\r\n        message?: string;\r\n    }>;\r\n    status: number;\r\n    constructor(response?: Response<TBody | object>, { message, errors, }?: {\r\n        message?: string;\r\n        errors?: Array<{\r\n            code: string;\r\n            message?: string;\r\n        }>;\r\n    });\r\n}\r\n\r\n/**\r\n * A set of options for configuring an asynchronous request.\r\n */\r\ndeclare interface RequestOptions<TParams = object> {\r\n    /**\r\n     * Provide this option if you want to cancel or time out the request. If the\r\n     * timeout object completes before the request, the request will be\r\n     * cancelled.\r\n     */\r\n    timeout?: Timeout;\r\n    /**\r\n     * The parameters of the request, if required.\r\n     */\r\n    params?: TParams;\r\n    /**\r\n     * The version of the checkout, used for optimistic concurrency control.\r\n     */\r\n    version?: number;\r\n}\r\n\r\ndeclare interface SearchArea {\r\n    radius: Radius;\r\n    coordinates: Coordinates;\r\n}\r\n\r\ndeclare interface SepaPlaceHolder {\r\n    ownerName?: string;\r\n    ibanNumber?: string;\r\n}\r\n\r\ndeclare interface SepaStateData {\r\n    ownerName: string;\r\n    ibanNumber: string;\r\n}\r\n\r\ndeclare interface SetIframeStyleCommand {\r\n    type: ExtensionCommandType.SetIframeStyle;\r\n    payload: {\r\n        style: {\r\n            [key: string]: string | number | null;\r\n        };\r\n    };\r\n}\r\n\r\ndeclare interface ShippingAddressSelector {\r\n    getShippingAddress(): Address | undefined;\r\n    getShippingAddressOrThrow(): Address;\r\n    getShippingAddresses(): Address[];\r\n    getShippingAddressesOrThrow(): Address[];\r\n}\r\n\r\ndeclare interface ShippingCountrySelector {\r\n    getShippingCountries(): Country[] | undefined;\r\n    getLoadError(): Error | undefined;\r\n    isLoading(): boolean;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the shipping step of the\r\n * current checkout flow.\r\n *\r\n * Some payment methods have specific requirements for setting the shipping\r\n * details for checkout. For example, Amazon Pay requires the customer to enter\r\n * their shipping address using their address book widget. As a result, you may\r\n * need to provide additional information in order to initialize the shipping\r\n * step of checkout.\r\n */\r\ndeclare interface ShippingInitializeOptions<T = object> extends ShippingRequestOptions<T> {\r\n    /**\r\n     * The options that are required to initialize the shipping step of checkout\r\n     * when using AmazonPayV2.\r\n     */\r\n    amazonpay?: AmazonPayV2ShippingInitializeOptions;\r\n    /**\r\n     * The options that are required to initialize the shipping step of checkout\r\n     * when using Stripe Upe Link.\r\n     */\r\n    stripeupe?: StripeUPEShippingInitializeOptions;\r\n    /**\r\n     * The options that are required to initialize the shipping step of checkout\r\n     * when using Braintree Fastlane.\r\n     */\r\n    braintreefastlane?: BraintreeFastlaneShippingInitializeOptions;\r\n    /**\r\n     * The options that are required to initialize the shipping step of checkout\r\n     * when using PayPal Commerce Fastlane.\r\n     */\r\n    paypalcommercefastlane?: PayPalCommerceFastlaneShippingInitializeOptions;\r\n    /**\r\n     * The options that are required to initialize the shipping step of checkout\r\n     * when using BigCommercePayments Fastlane.\r\n     */\r\n    bigcommerce_payments_fastlane?: BigCommercePaymentsFastlaneShippingInitializeOptions;\r\n    /**\r\n     * The options that are required to initialize the shipping step of checkout\r\n     * when using Fastlane (PayPal Commerce, BigCommerce Payments, or Braintree).\r\n     *\r\n     * This is a unified option that works across all Fastlane implementations,\r\n     * simplifying integration and avoiding provider-specific checks.\r\n     */\r\n    fastlane?: FastlaneShippingInitializeOptions;\r\n}\r\n\r\ndeclare interface ShippingOption {\r\n    additionalDescription: string;\r\n    description: string;\r\n    id: string;\r\n    isRecommended: boolean;\r\n    imageUrl: string;\r\n    cost: number;\r\n    costAfterDiscount: number;\r\n    transitTime: string;\r\n    type: string;\r\n}\r\n\r\n/**\r\n * A set of options for configuring any requests related to the shipping step of\r\n * the current checkout flow.\r\n *\r\n * Some payment methods have their own shipping configuration flow. Therefore,\r\n * you need to specify the method you intend to use if you want to trigger a\r\n * specific flow for setting the shipping address or option. Otherwise, these\r\n * options are not required.\r\n */\r\ndeclare interface ShippingRequestOptions<T = object> extends RequestOptions<T> {\r\n    methodId?: string;\r\n}\r\n\r\ndeclare interface ShippingStrategySelector {\r\n    getUpdateAddressError(methodId?: string): Error | undefined;\r\n    getSelectOptionError(methodId?: string): Error | undefined;\r\n    getInitializeError(methodId?: string): Error | undefined;\r\n    getWidgetInteractionError(methodId?: string): Error | undefined;\r\n    isUpdatingAddress(methodId?: string): boolean;\r\n    isSelectingOption(methodId?: string): boolean;\r\n    isInitializing(methodId?: string): boolean;\r\n    isInitialized(methodId: string): boolean;\r\n    isWidgetInteracting(methodId?: string): boolean;\r\n}\r\n\r\ndeclare interface ShopperConfig {\r\n    defaultNewsletterSignup: boolean;\r\n    passwordRequirements: PasswordRequirements;\r\n    showNewsletterSignup: boolean;\r\n}\r\n\r\ndeclare interface ShopperCurrency extends StoreCurrency {\r\n    exchangeRate: number;\r\n    isTransactional: boolean;\r\n}\r\n\r\ndeclare interface ShowLoadingIndicatorCommand {\r\n    type: ExtensionCommandType.ShowLoadingIndicator;\r\n    payload: {\r\n        show: boolean;\r\n    };\r\n}\r\n\r\ndeclare interface SignInEmail {\r\n    sent_email: string;\r\n    expiry: number;\r\n}\r\n\r\ndeclare interface SignInEmailRequestBody {\r\n    email: string;\r\n    redirectUrl?: string;\r\n}\r\n\r\ndeclare interface SignInEmailSelector {\r\n    getEmail(): SignInEmail | undefined;\r\n    getSendError(): Error | undefined;\r\n    isSending(): boolean;\r\n}\r\n\r\n/**\r\n * The set of options for configuring any requests related to spam protection.\r\n */\r\ndeclare interface SpamProtectionOptions extends RequestOptions_2 {\r\n    /**\r\n     * The container ID where the spam protection should be rendered.\r\n     */\r\n    containerId: string;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Square payment method.\r\n *\r\n * Once Square payment is initialized, an iframed payment element will be\r\n * inserted into the current page. These options provide a location, styling,\r\n * and a callback function that advises when it's safe to pay.\r\n *\r\n * @example\r\n *\r\n * ```html\r\n * <!-- These container is where the hosted (iframed) payment method element will be inserted -->\r\n * <div id=\"card-payment\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'squarev2',\r\n *     squarev2: {\r\n *         containerId: 'card-payment',\r\n *         style: {\r\n *             input: {\r\n *                 backgroundColor: '#F7F8F9',\r\n *                 color: '#373F4A',\r\n *                 fontFamily: 'Helvetica Neue',\r\n *                 fontSize: '16px',\r\n *                 fontWeight: 'normal'\r\n *             }\r\n *         },\r\n *         onValidationChange: (isReadyToPay: boolean) => {\r\n *             if (isReadyToPay) {\r\n *                 // Show or hide some component or message...\r\n *             }\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface SquareV2PaymentInitializeOptions {\r\n    /**\r\n     * The ID of a container which the payment widget should insert into.\r\n     */\r\n    containerId: string;\r\n    /**\r\n     * A map of .css classes and values that customize the style of the\r\n     * input fields from the card element.\r\n     *\r\n     * For more information about applying custom styles to the card form, see\r\n     * the available [CardClassSelectors](https://developer.squareup.com/reference/sdks/web/payments/objects/CardClassSelectors)\r\n     * for styling.\r\n     */\r\n    style?: CardClassSelectors;\r\n    /**\r\n     * A callback that gets called when the validity of the\r\n     * payment component changes.\r\n     */\r\n    onValidationChange?: (isReadyToPay: boolean) => void;\r\n}\r\n\r\n/**\r\n * This error type should not be constructed directly. It is a base class for\r\n * all custom errors thrown in this library.\r\n */\r\ndeclare abstract class StandardError extends Error implements CustomError {\r\n    name: string;\r\n    type: string;\r\n    constructor(message?: string);\r\n}\r\n\r\ndeclare interface StepStyles extends BlockElementStyles {\r\n    icon?: BlockElementStyles;\r\n}\r\n\r\ndeclare interface StepTracker {\r\n    trackOrderComplete(): void;\r\n    trackCheckoutStarted(): void;\r\n    trackStepViewed(step: string): void;\r\n    trackStepCompleted(step: string): void;\r\n}\r\n\r\ndeclare interface StepTrackerConfig {\r\n    checkoutSteps?: AnalyticStepType[];\r\n}\r\n\r\ndeclare interface StockPosition {\r\n    quantityOnHand: number;\r\n    quantityBackordered: number;\r\n    quantityOutOfStock: number;\r\n    backorderMessage: string | null;\r\n}\r\n\r\ndeclare interface StoreConfig {\r\n    cdnPath: string;\r\n    checkoutSettings: CheckoutSettings;\r\n    b2bApiSettings?: B2BApiSettings;\r\n    currency: StoreCurrency;\r\n    displayDateFormat: string;\r\n    displaySettings: DisplaySettings;\r\n    inputDateFormat: string;\r\n    /**\r\n     * @deprecated Please use instead the data selectors\r\n     * @remarks\r\n     * ```js\r\n     * const data = CheckoutService.getState().data;\r\n     * const shippingAddressFields = data.getShippingAddressFields('US');\r\n     * const billingAddressFields = data.getBillingAddressFields('US');\r\n     * const customerAccountFields = data.getCustomerAccountFields();\r\n     * ```\r\n     */\r\n    formFields: FormFields;\r\n    links: StoreLinks;\r\n    paymentSettings: PaymentSettings;\r\n    shopperConfig: ShopperConfig;\r\n    storeProfile: StoreProfile;\r\n    imageDirectory: string;\r\n    isAngularDebuggingEnabled: boolean;\r\n    shopperCurrency: ShopperCurrency;\r\n    inventorySettings?: InventorySettings;\r\n}\r\n\r\ndeclare interface StoreCreditSelector {\r\n    getApplyError(): RequestError | undefined;\r\n    isApplying(): boolean;\r\n}\r\n\r\ndeclare interface StoreCurrency {\r\n    code: string;\r\n    decimalPlaces: string;\r\n    decimalSeparator: string;\r\n    isTransactional: boolean;\r\n    symbolLocation: string;\r\n    symbol: string;\r\n    thousandsSeparator: string;\r\n}\r\n\r\ndeclare interface StoreLinks {\r\n    baseUrl?: string | null;\r\n    cartLink: string;\r\n    checkoutLink: string;\r\n    createAccountLink: string;\r\n    forgotPasswordLink: string;\r\n    loginLink: string;\r\n    logoutLink: string;\r\n    siteLink: string;\r\n    orderConfirmationLink: string;\r\n}\r\n\r\ndeclare interface StoreProfile {\r\n    orderEmail: string;\r\n    shopPath: string;\r\n    storeCountry: string;\r\n    storeCountryCode: string;\r\n    storeHash: string;\r\n    storeId: string;\r\n    storeName: string;\r\n    storePhoneNumber: string;\r\n    storeLanguage: string;\r\n}\r\n\r\ndeclare interface StoredCardHostedFormBillingAddress {\r\n    address1: string;\r\n    address2?: string;\r\n    city: string;\r\n    postalCode: string;\r\n    countryCode: string;\r\n    company?: string;\r\n    firstName: string;\r\n    lastName: string;\r\n    email: string;\r\n    phone?: string;\r\n    stateOrProvinceCode?: string;\r\n}\r\n\r\ndeclare interface StoredCardHostedFormData {\r\n    currencyCode: string;\r\n    paymentsUrl: string;\r\n    providerId: string;\r\n    shopperId: string;\r\n    storeHash: string;\r\n    vaultToken: string;\r\n}\r\n\r\ndeclare interface StoredCardHostedFormInstrumentFields extends StoredCardHostedFormBillingAddress {\r\n    defaultInstrument: boolean;\r\n}\r\n\r\ndeclare class StoredCardHostedFormService {\r\n    protected _host: string;\r\n    protected _hostedFormFactory: HostedFormFactory;\r\n    protected _hostedForm?: HostedForm;\r\n    constructor(_host: string, _hostedFormFactory: HostedFormFactory);\r\n    submitStoredCard(fields: StoredCardHostedFormInstrumentFields, data: StoredCardHostedFormData): Promise<void>;\r\n    initialize(options: LegacyHostedFormOptions): Promise<void>;\r\n    deinitialize(): void;\r\n}\r\n\r\n/**\r\n * CSS properties supported by Stripe.js.\r\n */\r\ndeclare interface StripeElementCSSProperties {\r\n    /**\r\n     * The [background-color](https://developer.mozilla.org/en-US/docs/Web/CSS/background-color) CSS property.\r\n     *\r\n     * This property works best with the `::selection` pseudo-class.\r\n     * In other cases, consider setting the background color on the element's container instaed.\r\n     */\r\n    backgroundColor?: string;\r\n    /**\r\n     * The [color](https://developer.mozilla.org/en-US/docs/Web/CSS/color) CSS property.\r\n     */\r\n    color?: string;\r\n    /**\r\n     * The [font-family](https://developer.mozilla.org/en-US/docs/Web/CSS/font-family) CSS property.\r\n     */\r\n    fontFamily?: string;\r\n    /**\r\n     * The [font-size](https://developer.mozilla.org/en-US/docs/Web/CSS/font-size) CSS property.\r\n     */\r\n    fontSize?: string;\r\n    /**\r\n     * The [font-smoothing](https://developer.mozilla.org/en-US/docs/Web/CSS/font-smoothing) CSS property.\r\n     */\r\n    fontSmoothing?: string;\r\n    /**\r\n     * The [font-style](https://developer.mozilla.org/en-US/docs/Web/CSS/font-style) CSS property.\r\n     */\r\n    fontStyle?: string;\r\n    /**\r\n     * The [font-variant](https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant) CSS property.\r\n     */\r\n    fontVariant?: string;\r\n    /**\r\n     * The [font-weight](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight) CSS property.\r\n     */\r\n    fontWeight?: string;\r\n    /**\r\n     * A custom property, used to set the color of the icons that are rendered in an element.\r\n     */\r\n    iconColor?: string;\r\n    /**\r\n     * The [line-height](https://developer.mozilla.org/en-US/docs/Web/CSS/line-height) CSS property.\r\n     *\r\n     * To avoid cursors being rendered inconsistently across browsers, consider using a padding on the element's container instead.\r\n     */\r\n    lineHeight?: string;\r\n    /**\r\n     * The [letter-spacing](https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing) CSS property.\r\n     */\r\n    letterSpacing?: string;\r\n    /**\r\n     * The [text-align](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align) CSS property.\r\n     *\r\n     * Available for the `cardNumber`, `cardExpiry`, and `cardCvc` elements.\r\n     */\r\n    textAlign?: string;\r\n    /**\r\n     * The [padding](https://developer.mozilla.org/en-US/docs/Web/CSS/padding) CSS property.\r\n     *\r\n     * Available for the `idealBank` element.\r\n     * Accepts integer `px` values.\r\n     */\r\n    padding?: string;\r\n    /**\r\n     * The [text-decoration](https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration) CSS property.\r\n     */\r\n    textDecoration?: string;\r\n    /**\r\n     * The [text-shadow](https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow) CSS property.\r\n     */\r\n    textShadow?: string;\r\n    /**\r\n     * The [text-transform](https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform) CSS property.\r\n     */\r\n    textTransform?: string;\r\n}\r\n\r\ndeclare interface StripeElementClasses {\r\n    /**\r\n     * The base class applied to the container. Defaults to StripeElement.\r\n     */\r\n    base?: string;\r\n    /**\r\n     * The class name to apply when the Element is complete. Defaults to StripeElement--complete.\r\n     */\r\n    complete?: string;\r\n    /**\r\n     * The class name to apply when the Element is empty. Defaults to StripeElement--empty.\r\n     */\r\n    empty?: string;\r\n    /**\r\n     * The class name to apply when the Element is focused. Defaults to StripeElement--focus.\r\n     */\r\n    focus?: string;\r\n    /**\r\n     * The class name to apply when the Element is invalid. Defaults to StripeElement--invalid.\r\n     */\r\n    invalid?: string;\r\n    /**\r\n     * The class name to apply when the Element has its value autofilled by the browser\r\n     * (only on Chrome and Safari). Defaults to StripeElement--webkit-autofill.\r\n     */\r\n    webkitAutoFill?: string;\r\n}\r\n\r\ndeclare type StripeElementOptions = CardElementOptions | CardExpiryElementOptions | CardNumberElementOptions | CardCvcElementOptions | IdealElementOptions | IbanElementOptions | ZipCodeElementOptions;\r\n\r\ndeclare interface StripeElementStyle {\r\n    /**\r\n     * Base variant—all other variants inherit from these styles.\r\n     */\r\n    base?: StripeElementStyleVariant;\r\n    /**\r\n     * Applied when the element has valid input.\r\n     */\r\n    complete?: StripeElementStyleVariant;\r\n    /**\r\n     * Applied when the element has no customer input.\r\n     */\r\n    empty?: StripeElementStyleVariant;\r\n    /**\r\n     * Applied when the element has invalid input.\r\n     */\r\n    invalid?: StripeElementStyleVariant;\r\n}\r\n\r\ndeclare interface StripeElementStyleVariant extends StripeElementCSSProperties {\r\n    ':hover'?: StripeElementCSSProperties;\r\n    ':focus'?: StripeElementCSSProperties;\r\n    '::placeholder'?: StripeElementCSSProperties;\r\n    '::selection'?: StripeElementCSSProperties;\r\n    ':-webkit-autofill'?: StripeElementCSSProperties;\r\n    /**\r\n     * Available for all elements except the `paymentRequestButton` element\r\n     */\r\n    ':disabled'?: StripeElementCSSProperties;\r\n    /**\r\n     * Available for the `cardNumber`, `cardExpiry`, and `cardCvc` elements.\r\n     */\r\n    '::-ms-clear'?: StripeElementCSSProperties & {\r\n        display: string;\r\n    };\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Stripe payment method.\r\n *\r\n * Once Stripe payment is initialized, credit card form fields, provided by the\r\n * payment provider as iframes, will be inserted into the current page. These\r\n * options provide a location and styling for each of the form fields.\r\n *\r\n * ```html\r\n * <!-- This is where the credit card component will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     gateway: 'stripeocs',\r\n *     id: 'optimized_checkout',\r\n *     stripeocs {\r\n *         containerId: 'container',\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface StripeOCSPaymentInitializeOptions extends StripePaymentInitializeOptions {\r\n    /**\r\n     * The location to insert the credit card number form field.\r\n     */\r\n    containerId: string;\r\n    /**\r\n     * The location to insert the currency selector form field.\r\n     */\r\n    currencySelectorContainerId?: string;\r\n    /**\r\n     * Checkout styles from store theme\r\n     */\r\n    style?: Record<string, StripeAppearanceValues>;\r\n    /**\r\n     * Stripe OCS layout options\r\n     */\r\n    layout?: Record<string, string | number | boolean>;\r\n    /**\r\n     * Stripe OCS appearance options for styling the accordion.\r\n     */\r\n    appearance?: StripeAppearanceOptions;\r\n    /**\r\n     * Stripe OCS fonts options for styling the accordion.\r\n     */\r\n    fonts?: StripeCustomFont[];\r\n    onError?(error?: Error): void;\r\n    render(): void;\r\n    paymentMethodSelect?(id: string): void;\r\n    handleClosePaymentMethod?(collapseElement: () => void): void;\r\n    togglePreloader?(showLoader: boolean): void;\r\n}\r\n\r\ndeclare interface StripeUPECustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the stripe iframe should be inserted.\r\n     */\r\n    container: string;\r\n    /**\r\n     * The identifier of the payment method.\r\n     */\r\n    methodId: string;\r\n    /**\r\n     * The identifier of the payment provider providing the payment method. This\r\n     * option is only required if the provider offers multiple payment options.\r\n     * i.e.: Stripeupe and Klarna.\r\n     */\r\n    gatewayId: string;\r\n    /**\r\n     * A callback that gets called whenever the Stripe Link Authentication Element's value changes.\r\n     *\r\n     * @param authenticated - if the email is authenticated on Stripe.\r\n     * @param email - The new value of the email.\r\n     */\r\n    onEmailChange(authenticated: boolean, email: string): void;\r\n    /**\r\n     * A callback that gets called when Stripe Link Authentication Element is Loaded.\r\n     */\r\n    isLoading(mounted: boolean): void;\r\n    /**\r\n     * get styles from store theme\r\n     */\r\n    getStyles?(): {\r\n        [key: string]: string;\r\n    } | undefined;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Stripe payment method.\r\n *\r\n * Once Stripe payment is initialized, credit card form fields, provided by the\r\n * payment provider as iframes, will be inserted into the current page. These\r\n * options provide a location and styling for each of the form fields.\r\n *\r\n * ```html\r\n * <!-- This is where the credit card component will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'stripeupe',\r\n *     stripeupe {\r\n *         containerId: 'container',\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface StripeUPEPaymentInitializeOptions extends StripePaymentInitializeOptions {\r\n    /**\r\n     * The location to insert the credit card number form field.\r\n     */\r\n    containerId: string;\r\n    /**\r\n     * Checkout styles from store theme\r\n     */\r\n    style?: Record<string, StripeAppearanceValues>;\r\n    onError?(error?: Error): void;\r\n    render(): void;\r\n    initStripeElementUpdateTrigger?(updateTriggerFn: (payload: StripeElementUpdateOptions) => void): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the shipping step of\r\n * checkout in order to support StripeUpe.\r\n *\r\n * When StripeUpe is initialized, an iframe will be inserted into the DOM. The\r\n * iframe has a list of shipping addresses for the customer to choose from.\r\n */\r\ndeclare interface StripeUPEShippingInitializeOptions {\r\n    /**\r\n     * Available countries configured on BC shipping setup.\r\n     */\r\n    availableCountries: string;\r\n    /**\r\n     * The ID of a container which the stripe iframe should be inserted.\r\n     */\r\n    container?: string;\r\n    /**\r\n     * The identifier of the payment method.\r\n     */\r\n    methodId: string;\r\n    /**\r\n     * The identifier of the payment provider providing the payment method. This\r\n     * option is only required if the provider offers multiple payment options.\r\n     * i.e.: Stripeupe and Klarna.\r\n     */\r\n    gatewayId: string;\r\n    /**\r\n     * A callback that gets called whenever the Stripe Link Shipping Element's object is completed.\r\n     */\r\n    onChangeShipping(shipping: StripeEventType): void;\r\n    /**\r\n     * get styles from store theme\r\n     */\r\n    getStyles?(): {\r\n        [key: string]: string;\r\n    };\r\n    /**\r\n     * get the state code needed for shipping stripe element\r\n     *\r\n     * @param country\r\n     * @param state\r\n     */\r\n    getStripeState(country: string, state: string, isStripeStateMappingDisabledForES?: boolean): string;\r\n    /**\r\n     * Set the Stripe experiments to be used in checkout-js components;\r\n     * Stripe specific experiments broadcasts to SDK from payment provider configs request.\r\n     *\r\n     * @param experiments\r\n     * @returns void\r\n     */\r\n    setStripeExperiments?(experiments: Record<string, boolean>): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Stripe payment method.\r\n *\r\n * Once Stripe payment is initialized, credit card form fields, provided by the\r\n * payment provider as iframes, will be inserted into the current page. These\r\n * options provide a location and styling for each of the form fields.\r\n *\r\n * ```html\r\n * <!-- This is where the credit card component will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'stripev3',\r\n *     stripev3: {\r\n *         containerId: 'container',\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Additional options can be passed in to customize the fields.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'stripev3',\r\n *     stripev3: {\r\n *         containerId: 'container',\r\n *         options: {\r\n *             card: {\r\n *                 classes: { base: 'form-input' },\r\n *             },\r\n *             iban: {\r\n *                 classes: { base: 'form-input' },\r\n *                 supportedCountries: ['SEPA'],\r\n *             },\r\n *             idealBank: {\r\n *                 classes: { base: 'form-input' },\r\n *             },\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface StripeV3PaymentInitializeOptions {\r\n    /**\r\n     * The location to insert the credit card number form field.\r\n     */\r\n    containerId: string;\r\n    options?: StripeElementOptions | IndividualCardElementOptions;\r\n    /**\r\n     * Hosted Form Validation Options\r\n     */\r\n    form?: HostedFormOptions;\r\n}\r\n\r\ndeclare enum StyleButtonColor {\r\n    gold = \"gold\",\r\n    blue = \"blue\",\r\n    silver = \"silver\",\r\n    black = \"black\",\r\n    white = \"white\"\r\n}\r\n\r\ndeclare enum StyleButtonColor_2 {\r\n    gold = \"gold\",\r\n    blue = \"blue\",\r\n    silver = \"silver\",\r\n    black = \"black\",\r\n    white = \"white\"\r\n}\r\n\r\ndeclare enum StyleButtonLabel {\r\n    paypal = \"paypal\",\r\n    checkout = \"checkout\",\r\n    buynow = \"buynow\",\r\n    pay = \"pay\",\r\n    installment = \"installment\"\r\n}\r\n\r\ndeclare enum StyleButtonLabel_2 {\r\n    paypal = \"paypal\",\r\n    checkout = \"checkout\",\r\n    buynow = \"buynow\",\r\n    pay = \"pay\",\r\n    installment = \"installment\"\r\n}\r\n\r\ndeclare enum StyleButtonShape {\r\n    pill = \"pill\",\r\n    rect = \"rect\"\r\n}\r\n\r\ndeclare enum StyleButtonShape_2 {\r\n    Pill = \"pill\",\r\n    Rect = \"rect\"\r\n}\r\n\r\ndeclare enum StyleButtonShape_3 {\r\n    pill = \"pill\",\r\n    rect = \"rect\"\r\n}\r\n\r\ndeclare enum StyleButtonSize {\r\n    Small = \"small\",\r\n    Medium = \"medium\",\r\n    Large = \"large\"\r\n}\r\n\r\ndeclare interface StyleOptions {\r\n    /**\r\n     * Base styling applied to the iframe. All styling extends from this style.\r\n     */\r\n    base?: CssProperties;\r\n    /**\r\n     * Styling applied when a field fails validation.\r\n     */\r\n    error?: CssProperties;\r\n    /**\r\n     * Styling applied to the field's placeholder values.\r\n     */\r\n    placeholder?: CssProperties;\r\n    /**\r\n     * Styling applied once a field passes validation.\r\n     */\r\n    validated?: CssProperties;\r\n}\r\n\r\ndeclare interface SubInputDetail {\r\n    /**\r\n     * Configuration parameters for the required input.\r\n     */\r\n    configuration?: object;\r\n    /**\r\n     * In case of a select, the items to choose from.\r\n     */\r\n    items?: Item_2[];\r\n    /**\r\n     * The value to provide in the result.\r\n     */\r\n    key?: string;\r\n    /**\r\n     * True if this input is optional to provide.\r\n     */\r\n    optional?: boolean;\r\n    /**\r\n     * The type of the required input.\r\n     */\r\n    type?: string;\r\n    /**\r\n     * The value can be pre-filled, if available.\r\n     */\r\n    value?: string;\r\n}\r\n\r\ndeclare interface Subscriptions {\r\n    email: string;\r\n    acceptsMarketingNewsletter: boolean;\r\n    acceptsAbandonedCartEmails: boolean;\r\n}\r\n\r\ndeclare interface SubscriptionsSelector {\r\n    getUpdateError(): Error | undefined;\r\n    isUpdating(): boolean;\r\n}\r\n\r\ndeclare interface Tax {\r\n    name: string;\r\n    amount: number;\r\n}\r\n\r\ndeclare interface TextInputStyles extends InputStyles {\r\n    placeholder?: InlineElementStyles;\r\n}\r\n\r\ndeclare interface ThreeDSecure {\r\n    version: string;\r\n    status: string;\r\n    vendor: string;\r\n    cavv: string;\r\n    eci: string;\r\n    xid: string;\r\n}\r\n\r\ndeclare interface ThreeDSecureToken {\r\n    token: string;\r\n}\r\n\r\ndeclare interface TranslationData {\r\n    [key: string]: string | number;\r\n}\r\n\r\ndeclare interface Translations {\r\n    [key: string]: string | Translations;\r\n}\r\n\r\ndeclare interface UnknownObject {\r\n    [key: string]: unknown;\r\n}\r\n\r\ndeclare enum UntrustedShippingCardVerificationType {\r\n    CVV = \"cvv\",\r\n    PAN = \"pan\"\r\n}\r\n\r\ndeclare interface UserExperienceSettings {\r\n    checkoutV2Theme: boolean;\r\n    walletButtonsOnTop: boolean;\r\n    floatingLabelEnabled: boolean;\r\n}\r\n\r\ndeclare interface VaultAccessToken {\r\n    vaultAccessToken: string;\r\n    vaultAccessExpiry: number;\r\n}\r\n\r\ndeclare interface VaultedInstrument {\r\n    instrumentId: string;\r\n    ccCvv?: string;\r\n    ccNumber?: string;\r\n}\r\n\r\ndeclare interface WechatDataPaymentMethodState {\r\n    paymentMethod: AdyenPaymentMethodState;\r\n}\r\n\r\ndeclare interface WechatState {\r\n    data: WechatDataPaymentMethodState;\r\n}\r\n\r\ndeclare interface WithAdyenV2PaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Apple Pay payment\r\n     * method. They can be omitted unless you need to support Apple Pay.\r\n     */\r\n    adyenv2?: AdyenV2PaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithAdyenV3PaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Apple Pay payment\r\n     * method. They can be omitted unless you need to support Apple Pay.\r\n     */\r\n    adyenv3?: AdyenV3PaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithAmazonPayV2ButtonInitializeOptions {\r\n    amazonpay?: AmazonPayV2ButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithAmazonPayV2CustomerInitializeOptions {\r\n    amazonpay?: AmazonPayV2CustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithAmazonPayV2PaymentInitializeOptions {\r\n    amazonpay?: AmazonPayV2PaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithApplePayButtonInitializeOptions {\r\n    applepay?: ApplePayButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithApplePayCustomerInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using ApplePay.\r\n     */\r\n    applepay?: ApplePayCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithApplePayPaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Apple Pay payment\r\n     * method. They can be omitted unless you need to support Apple Pay.\r\n     */\r\n    applepay?: ApplePayPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions {\r\n    bigcommerce_payments_apms?: BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsButtonInitializeOptions {\r\n    bigcommerce_payments?: BigCommercePaymentsButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsCreditCardsPaymentInitializeOptions {\r\n    bigcommerce_payments_creditcards?: BigCommercePaymentsCreditCardsPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsCustomerInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using BigCommercePayments.\r\n     */\r\n    bigcommerce_payments?: BigCommercePaymentsCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsFastlaneCustomerInitializeOptions {\r\n    bigcommerce_payments_fastlane?: BigCommercePaymentsFastlaneCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsFastlanePaymentInitializeOptions {\r\n    bigcommerce_payments_fastlane?: BigCommercePaymentsFastlanePaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsPayLaterButtonInitializeOptions {\r\n    bigcommerce_payments_paylater?: BigCommercePaymentsPayLaterButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsPayLaterCustomerInitializeOptions {\r\n    bigcommerce_payments_paylater?: BigCommercePaymentsPayLaterCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsPayLaterPaymentInitializeOptions {\r\n    bigcommerce_payments_paylater?: BigCommercePaymentsPayLaterPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsPaymentInitializeOptions {\r\n    bigcommerce_payments?: BigCommercePaymentsPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsRatePayPaymentInitializeOptions {\r\n    bigcommerce_payments_ratepay?: BigCommercePaymentsRatePayPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions {\r\n    bigcommerce_payments_apms?: BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsVenmoButtonInitializeOptions {\r\n    bigcommerce_payments_venmo?: BigCommercePaymentsVenmoButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsVenmoCustomerInitializeOptions {\r\n    bigcommerce_payments_venmo?: BigCommercePaymentsVenmoCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsVenmoPaymentInitializeOptions {\r\n    bigcommerce_payments_venmo?: BigCommercePaymentsVenmoPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBlueSnapDirectAPMPaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Apple Pay payment\r\n     * method. They can be omitted unless you need to support Apple Pay.\r\n     */\r\n    bluesnapdirect?: BlueSnapDirectAPMInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBlueSnapV2PaymentInitializeOptions {\r\n    bluesnapv2?: BlueSnapV2PaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBoltButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Bolt payment\r\n     * method. They can be omitted unless you need to support Bolt.\r\n     */\r\n    bolt?: BoltButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBoltCustomerInitializeOptions {\r\n    bolt?: BoltCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBoltPaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Bolt payment\r\n     * method. They can be omitted unless you need to support Bolt.\r\n     */\r\n    bolt?: BoltPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeAchPaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Braintree ACH payment\r\n     * method. They can be omitted unless you need to support Apple Pay.\r\n     */\r\n    braintreeach?: BraintreeAchInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeCreditCardPaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Braintree PayPal wallet button on Product and Cart page.\r\n     */\r\n    braintree?: BraintreeCreditCardPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeFastlaneCustomerInitializeOptions {\r\n    braintreefastlane?: BraintreeFastlaneCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeFastlanePaymentInitializeOptions {\r\n    braintreefastlane?: BraintreeFastlanePaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeLocalMethodsPaymentInitializeOptions {\r\n    braintreelocalmethods?: BraintreeLocalMethodsPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreePaypalButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Braintree PayPal wallet button on Product and Cart page.\r\n     */\r\n    braintreepaypal?: BraintreePaypalButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreePaypalCreditButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Braintree PayPal Credit wallet button on Product and Cart page.\r\n     */\r\n    braintreepaypalcredit?: BraintreePaypalCreditButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreePaypalCreditCustomerInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using Braintree PayPal.\r\n     */\r\n    braintreepaypalcredit?: BraintreePaypalCreditCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreePaypalCustomerInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using Braintree PayPal.\r\n     */\r\n    braintreepaypal?: BraintreePaypalCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBuyNowFeature extends AmazonPayV2ButtonConfig {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: {\r\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n    };\r\n}\r\n\r\ndeclare interface WithCheckoutcomFawryInstrument {\r\n    customerMobile: string;\r\n    customerEmail: string;\r\n}\r\n\r\ndeclare interface WithCheckoutcomSEPAInstrument {\r\n    iban: string;\r\n    bic: string;\r\n}\r\n\r\ndeclare interface WithCreditCardPaymentInitializeOptions {\r\n    creditCard?: CreditCardPaymentInitializeOptions_2;\r\n}\r\n\r\ndeclare interface WithDocumentInstrument {\r\n    ccDocument: string;\r\n}\r\n\r\n/**\r\n * The options that are required to initialize the GooglePay payment method.\r\n * They can be omitted unless you need to support GooglePay.\r\n */\r\ndeclare type WithGooglePayButtonInitializeOptions = {\r\n    [k in GooglePayKey]?: GooglePayButtonInitializeOptions;\r\n};\r\n\r\n/**\r\n * The options that are required to initialize the GooglePay payment method.\r\n * They can be omitted unless you need to support GooglePay.\r\n */\r\ndeclare type WithGooglePayCustomerInitializeOptions = {\r\n    [k in GooglePayKey]?: GooglePayCustomerInitializeOptions;\r\n};\r\n\r\n/**\r\n * The options that are required to initialize the GooglePay payment method.\r\n * They can be omitted unless you need to support GooglePay.\r\n */\r\ndeclare type WithGooglePayPaymentInitializeOptions = {\r\n    [k in GooglePayKey]?: GooglePayPaymentInitializeOptions;\r\n};\r\n\r\ndeclare interface WithIdealInstrument {\r\n    bic: string;\r\n}\r\n\r\ndeclare interface WithMollieIssuerInstrument {\r\n    issuer: string;\r\n    shopper_locale: string;\r\n}\r\n\r\ndeclare interface WithMolliePaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Mollie payment\r\n     * method. They can be omitted unless you need to support Mollie.\r\n     */\r\n    mollie?: MolliePaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions {\r\n    paypalcommerce?: PayPalCommerceAlternativeMethodsPaymentOptions;\r\n    paypalcommercealternativemethods?: PayPalCommerceAlternativeMethodsPaymentOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceButtonInitializeOptions {\r\n    paypalcommerce?: PayPalCommerceButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceCreditButtonInitializeOptions {\r\n    paypalcommercecredit?: PayPalCommerceCreditButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceCreditCardsPaymentInitializeOptions {\r\n    paypalcommercecreditcards?: PayPalCommerceCreditCardsPaymentInitializeOptions;\r\n    paypalcommerce?: PayPalCommerceCreditCardsPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceCreditCustomerInitializeOptions {\r\n    paypalcommercecredit?: PayPalCommerceCreditCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceCreditPaymentInitializeOptions {\r\n    paypalcommerce?: PayPalCommerceCreditPaymentInitializeOptions;\r\n    paypalcommercecredit?: PayPalCommerceCreditPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceCustomerInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using PayPalCommerce.\r\n     */\r\n    paypalcommerce?: PayPalCommerceCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceFastlaneCustomerInitializeOptions {\r\n    paypalcommercefastlane?: PayPalCommerceFastlaneCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceFastlanePaymentInitializeOptions {\r\n    paypalcommercefastlane?: PayPalCommerceFastlanePaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommercePaymentInitializeOptions {\r\n    paypalcommerce?: PayPalCommercePaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceRatePayPaymentInitializeOptions {\r\n    paypalcommerceratepay?: PaypalCommerceRatePay;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceVenmoButtonInitializeOptions {\r\n    paypalcommercevenmo?: PayPalCommerceVenmoButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceVenmoCustomerInitializeOptions {\r\n    paypalcommercevenmo?: PayPalCommerceVenmoCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceVenmoPaymentInitializeOptions {\r\n    paypalcommerce?: PayPalCommerceVenmoPaymentInitializeOptions;\r\n    paypalcommercevenmo?: PayPalCommerceVenmoPaymentInitializeOptions;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPal Express payment\r\n * method.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalexpress',\r\n * });\r\n * ```\r\n *\r\n * An additional flag can be passed in to always start the payment flow through\r\n * a redirect rather than a popup.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalexpress',\r\n *     paypalexpress: {\r\n *         useRedirectFlow: true,\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface WithPaypalExpressPaymentInitializeOptions {\r\n    paypalexpress?: {\r\n        useRedirectFlow?: boolean;\r\n    };\r\n}\r\n\r\ndeclare interface WithSquareV2PaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Square payment method.\r\n     * They can be omitted unless you need to support Square.\r\n     */\r\n    squarev2?: SquareV2PaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithStripeOCSPaymentInitializeOptions {\r\n    stripeocs?: StripeOCSPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithStripeUPECustomerInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using StripeUPE.\r\n     */\r\n    stripeupe?: StripeUPECustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithStripeUPEPaymentInitializeOptions {\r\n    stripeupe?: StripeUPEPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithStripeV3PaymentInitializeOptions {\r\n    stripev3?: StripeV3PaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithWorldpayAccessPaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Apple Pay payment\r\n     * method. They can be omitted unless you need to support Apple Pay.\r\n     */\r\n    worldpay?: WorldpayAccessPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WorldpayAccessPaymentInitializeOptions {\r\n    /**\r\n     * A callback that gets called when the iframe is ready to be added to the\r\n     * current page. It is responsible for determining where the iframe should\r\n     * be inserted in the DOM.\r\n     *\r\n     * @param iframe - The iframe element containing the payment web page\r\n     * provided by the strategy.\r\n     * @param cancel - A function, when called, will cancel the payment\r\n     * process and remove the iframe.\r\n     */\r\n    onLoad(iframe: HTMLIFrameElement, cancel: () => void): void;\r\n}\r\n\r\ndeclare interface ZipCodeElementOptions {\r\n    containerId: string;\r\n}\r\n\r\n/**\r\n * Creates an instance of `BodlService`.\r\n *\r\n * @remarks\r\n *\r\n * ```js\r\n * const bodlService = BodlService();\r\n * bodlService.checkoutBegin();\r\n *\r\n * ```\r\n *\r\n * @param subscribe - The callback function, what get a subscriber as a property, that subscribes to state changes.\r\n * @returns an instance of `BodlService`.\r\n */\r\nexport declare function createBodlService(subscribe: (subscriber: (state: CheckoutSelectors) => void) => void): BodlService;\r\n\r\n/**\r\n * Creates an instance of `BraintreeAnalyticTrackerService`.\r\n *\r\n * @remarks\r\n * ```js\r\n * const checkoutService = createCheckoutService();\r\n * await checkoutService.loadCheckout();\r\n * const braintreeAnalyticTracker = createBraintreeAnalyticTracker(checkoutService);\r\n *\r\n * braintreeAnalyticTracker.customerPaymentMethodExecuted();\r\n * braintreeAnalyticTracker.paymentComplete();\r\n * braintreeAnalyticTracker.selectedPaymentMethod('applepay');\r\n * braintreeAnalyticTracker.walletButtonClick('paypal');\r\n * ```\r\n *\r\n * @returns an instance of `BraintreeAnalyticTrackerService`.\r\n */\r\nexport declare function createBraintreeAnalyticTracker(checkoutService: CheckoutService): BraintreeAnalyticTrackerService;\r\n\r\n/**\r\n * Creates an instance of `CheckoutButtonInitializer`.\r\n *\r\n * @remarks\r\n * ```js\r\n * const initializer = createCheckoutButtonInitializer();\r\n *\r\n * initializer.initializeButton({\r\n *     methodId: 'braintreepaypal',\r\n *     braintreepaypal: {\r\n *         container: '#checkoutButton',\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * @alpha\r\n * Please note that `CheckoutButtonInitializer` is currently in an early stage\r\n * of development. Therefore the API is unstable and not ready for public\r\n * consumption.\r\n *\r\n * @param options - A set of construction options.\r\n * @returns an instance of `CheckoutButtonInitializer`.\r\n */\r\nexport declare function createCheckoutButtonInitializer(options?: CheckoutButtonInitializerOptions): CheckoutButtonInitializer;\r\n\r\n/**\r\n * Creates an instance of `CheckoutService`.\r\n *\r\n * @remarks\r\n * ```js\r\n * const service = createCheckoutService();\r\n *\r\n * service.subscribe(state => {\r\n *     console.log(state);\r\n * });\r\n *\r\n * service.loadCheckout();\r\n * ```\r\n *\r\n * @param options - A set of construction options.\r\n * @returns an instance of `CheckoutService`.\r\n */\r\nexport declare function createCheckoutService(options?: CheckoutServiceOptions): CheckoutService;\r\n\r\n/**\r\n * Creates an instance of `CurrencyService`.\r\n *\r\n * @remarks\r\n * ```js\r\n * const { data } = checkoutService.getState();\r\n * const config = data.getConfig();\r\n * const checkout = data.getCheckout();\r\n * const currencyService = createCurrencyService(config);\r\n *\r\n * currencyService.toStoreCurrency(checkout.grandTotal);\r\n * currencyService.toCustomerCurrency(checkout.grandTotal);\r\n * ```\r\n *\r\n * @param config - The config object containing the currency configuration\r\n * @returns an instance of `CurrencyService`.\r\n */\r\nexport declare function createCurrencyService(config: StoreConfig): CurrencyService;\r\n\r\n/**\r\n * Create an instance of `EmbeddedCheckoutMessenger`.\r\n *\r\n * @remarks\r\n * The object is responsible for posting messages to the parent window from the\r\n * iframe when certain events have occurred. For example, when the checkout\r\n * form is first loaded, you should notify the parent window about it.\r\n *\r\n * The iframe can only be embedded in domains that are allowed by the store.\r\n *\r\n * ```ts\r\n * const messenger = createEmbeddedCheckoutMessenger({\r\n *     parentOrigin: 'https://some/website',\r\n * });\r\n *\r\n * messenger.postFrameLoaded();\r\n * ```\r\n *\r\n * @alpha\r\n * Please note that this feature is currently in an early stage of development.\r\n * Therefore the API is unstable and not ready for public consumption.\r\n *\r\n * @param options - Options for creating `EmbeddedCheckoutMessenger`\r\n * @returns - An instance of `EmbeddedCheckoutMessenger`\r\n */\r\nexport declare function createEmbeddedCheckoutMessenger(options: EmbeddedCheckoutMessengerOptions): EmbeddedCheckoutMessenger;\r\n\r\n/**\r\n * Creates an instance of `LanguageService`.\r\n *\r\n * @remarks\r\n * ```js\r\n * const language = {{{langJson 'optimized_checkout'}}}; // `langJson` is a Handlebars helper provided by BigCommerce's Stencil template engine.\r\n * const service = createLanguageService(language);\r\n *\r\n * console.log(service.translate('address.city_label'));\r\n * ```\r\n *\r\n * @param config - A configuration object.\r\n * @returns An instance of `LanguageService`.\r\n */\r\nexport declare function createLanguageService(config?: Partial<LanguageConfig>): LanguageService;\r\n\r\n/**\r\n * Creates an instance of `PayPalCommerceAnalyticTrackerService`.\r\n *\r\n * @remarks\r\n * ```js\r\n * const checkoutService = createCheckoutService();\r\n * await checkoutService.loadCheckout();\r\n * const paypalCommerceAnalyticTracker = createPayPalCommerceAnalyticTracker(checkoutService);\r\n *\r\n * paypalCommerceAnalyticTracker.customerPaymentMethodExecuted();\r\n * paypalCommerceAnalyticTracker.paymentComplete();\r\n * paypalCommerceAnalyticTracker.selectedPaymentMethod('applepay');\r\n * paypalCommerceAnalyticTracker.walletButtonClick('paypal');\r\n * ```\r\n *\r\n * @returns an instance of `PayPalCommerceAnalyticTrackerService`.\r\n */\r\nexport declare function createPayPalCommerceAnalyticTracker(checkoutService: CheckoutService): PayPalCommerceAnalyticTrackerService;\r\n\r\n/**\r\n * Creates an instance of `StepTracker`.\r\n *\r\n * @remarks\r\n * ```js\r\n * const checkoutService = createCheckoutService();\r\n * await checkoutService.loadCheckout();\r\n * const stepTracker = createStepTracker(checkoutService);\r\n *\r\n * stepTracker.trackCheckoutStarted();\r\n * ```\r\n *\r\n * @param CheckoutService - An instance of CheckoutService\r\n * @param StepTrackerConfig - A step tracker config object\r\n * @returns an instance of `StepTracker`.\r\n */\r\nexport declare function createStepTracker(checkoutService: CheckoutService, stepTrackerConfig?: StepTrackerConfig): StepTracker;\r\n\r\n/**\r\n * Creates an instance of `StoredCardHostedFormService`.\r\n *\r\n *\r\n * @param host - Host url string parameter.\r\n * @returns An instance of `StoredCardHostedFormService`.\r\n */\r\nexport declare function createStoredCardHostedFormService(host: string): StoredCardHostedFormService;\r\n\r\n/**\r\n * Embed the checkout form in an iframe.\r\n *\r\n * @remarks\r\n * Once the iframe is embedded, it will automatically resize according to the\r\n * size of the checkout form. It will also notify the parent window when certain\r\n * events have occurred. i.e.: when the form is loaded and ready to be used.\r\n *\r\n * ```js\r\n * embedCheckout({\r\n *     url: 'https://checkout/url',\r\n *     containerId: 'container-id',\r\n * });\r\n * ```\r\n *\r\n * @param options - Options for embedding the checkout form.\r\n * @returns A promise that resolves to an instance of `EmbeddedCheckout`.\r\n */\r\nexport declare function embedCheckout(options: EmbeddedCheckoutOptions): Promise<EmbeddedCheckout>;\r\n\r\nexport declare function isExtraField(field: FormField): boolean;\r\n"
  },
  {
    "path": "dist/types/embedded-checkout.d.ts",
    "content": "import { LoadingIndicatorStyles } from '@bigcommerce/checkout-sdk/ui';\r\n\r\ndeclare interface BlockElementStyles extends InlineElementStyles {\r\n    backgroundColor?: string;\r\n    boxShadow?: string;\r\n    borderColor?: string;\r\n    borderWidth?: string;\r\n}\r\n\r\ndeclare interface BodyStyles {\r\n    backgroundColor?: string;\r\n}\r\n\r\ndeclare interface ButtonStyles extends BlockElementStyles {\r\n    active?: BlockElementStyles;\r\n    focus?: BlockElementStyles;\r\n    hover?: BlockElementStyles;\r\n    disabled?: BlockElementStyles;\r\n}\r\n\r\ndeclare interface CheckableInputStyles extends InputStyles {\r\n    error?: InputStyles;\r\n    checked?: BlockElementStyles;\r\n}\r\n\r\ndeclare interface ChecklistStyles extends BlockElementStyles {\r\n    hover?: BlockElementStyles;\r\n    checked?: BlockElementStyles;\r\n}\r\n\r\ndeclare interface CustomError extends Error {\r\n    message: string;\r\n    type: string;\r\n    subtype?: string;\r\n}\r\n\r\ndeclare class EmbeddedCheckout {\r\n    private _iframeCreator;\r\n    private _messageListener;\r\n    private _messagePoster;\r\n    private _loadingIndicator;\r\n    private _requestSender;\r\n    private _storage;\r\n    private _location;\r\n    private _options;\r\n    private _iframe?;\r\n    private _isAttached;\r\n    attach(): Promise<this>;\r\n    detach(): void;\r\n    private _configureStyles;\r\n    private _attemptLogin;\r\n    /**\r\n     * This workaround is required for certain browsers (namely Safari) that\r\n     * prevent session cookies to be set for a third party website unless the\r\n     * user has recently visited such website. Therefore, before we attempt to\r\n     * login or set an active cart in the session, we need to first redirect the\r\n     * user to the domain of Embedded Checkout.\r\n     */\r\n    private _allowCookie;\r\n    private _retryAllowCookie;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutCompleteEvent {\r\n    type: EmbeddedCheckoutEventType.CheckoutComplete;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutError {\r\n    message: string;\r\n    type?: string;\r\n    subtype?: string;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutErrorEvent {\r\n    type: EmbeddedCheckoutEventType.CheckoutError;\r\n    payload: EmbeddedCheckoutError;\r\n}\r\n\r\ndeclare enum EmbeddedCheckoutEventType {\r\n    CheckoutComplete = \"CHECKOUT_COMPLETE\",\r\n    CheckoutError = \"CHECKOUT_ERROR\",\r\n    CheckoutLoaded = \"CHECKOUT_LOADED\",\r\n    FrameError = \"FRAME_ERROR\",\r\n    FrameLoaded = \"FRAME_LOADED\",\r\n    SignedOut = \"SIGNED_OUT\"\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutFrameErrorEvent {\r\n    type: EmbeddedCheckoutEventType.FrameError;\r\n    payload: EmbeddedCheckoutError;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutFrameLoadedEvent {\r\n    type: EmbeddedCheckoutEventType.FrameLoaded;\r\n    payload?: EmbeddedContentOptions;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutLoadedEvent {\r\n    type: EmbeddedCheckoutEventType.CheckoutLoaded;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutMessenger {\r\n    postComplete(): void;\r\n    postError(payload: Error | CustomError): void;\r\n    postFrameError(payload: Error | CustomError): void;\r\n    postFrameLoaded(payload?: EmbeddedContentOptions): void;\r\n    postLoaded(): void;\r\n    postSignedOut(): void;\r\n    receiveStyles(handler: (styles: EmbeddedCheckoutStyles) => void): void;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutMessengerOptions {\r\n    parentOrigin: string;\r\n    parentWindow?: Window;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutOptions {\r\n    containerId: string;\r\n    url: string;\r\n    styles?: EmbeddedCheckoutStyles;\r\n    onComplete?(event: EmbeddedCheckoutCompleteEvent): void;\r\n    onError?(event: EmbeddedCheckoutErrorEvent): void;\r\n    onFrameError?(event: EmbeddedCheckoutFrameErrorEvent): void;\r\n    onFrameLoad?(event: EmbeddedCheckoutFrameLoadedEvent): void;\r\n    onLoad?(event: EmbeddedCheckoutLoadedEvent): void;\r\n    onSignOut?(event: EmbeddedCheckoutSignedOutEvent): void;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutSignedOutEvent {\r\n    type: EmbeddedCheckoutEventType.SignedOut;\r\n}\r\n\r\ndeclare interface EmbeddedCheckoutStyles {\r\n    body?: BodyStyles;\r\n    text?: InlineElementStyles;\r\n    heading?: BlockElementStyles;\r\n    secondaryHeading?: BlockElementStyles;\r\n    link?: LinkStyles;\r\n    secondaryText?: InlineElementStyles;\r\n    button?: ButtonStyles;\r\n    secondaryButton?: ButtonStyles;\r\n    input?: TextInputStyles;\r\n    select?: InputStyles;\r\n    radio?: CheckableInputStyles;\r\n    checkbox?: CheckableInputStyles;\r\n    label?: LabelStyles;\r\n    checklist?: ChecklistStyles;\r\n    discountBanner?: BlockElementStyles;\r\n    loadingBanner?: BlockElementStyles;\r\n    loadingIndicator?: LoadingIndicatorStyles;\r\n    orderSummary?: BlockElementStyles;\r\n    step?: StepStyles;\r\n}\r\n\r\ndeclare interface EmbeddedContentOptions {\r\n    contentId?: string;\r\n}\r\n\r\ndeclare interface InlineElementStyles {\r\n    color?: string;\r\n    fontFamily?: string;\r\n    fontWeight?: string;\r\n    letterSpacing?: string;\r\n    lineHeight?: string;\r\n}\r\n\r\ndeclare interface InputStyles extends BlockElementStyles {\r\n    active?: BlockElementStyles;\r\n    error?: InputStyles;\r\n    focus?: BlockElementStyles;\r\n    hover?: BlockElementStyles;\r\n    disabled?: BlockElementStyles;\r\n}\r\n\r\ndeclare interface LabelStyles extends InlineElementStyles {\r\n    error?: InlineElementStyles;\r\n}\r\n\r\ndeclare interface LinkStyles extends InlineElementStyles {\r\n    active?: InlineElementStyles;\r\n    focus?: InlineElementStyles;\r\n    hover?: InlineElementStyles;\r\n}\r\n\r\ndeclare interface StepStyles extends BlockElementStyles {\r\n    icon?: BlockElementStyles;\r\n}\r\n\r\ndeclare interface TextInputStyles extends InputStyles {\r\n    placeholder?: InlineElementStyles;\r\n}\r\n\r\n/**\r\n * Create an instance of `EmbeddedCheckoutMessenger`.\r\n *\r\n * @remarks\r\n * The object is responsible for posting messages to the parent window from the\r\n * iframe when certain events have occurred. For example, when the checkout\r\n * form is first loaded, you should notify the parent window about it.\r\n *\r\n * The iframe can only be embedded in domains that are allowed by the store.\r\n *\r\n * ```ts\r\n * const messenger = createEmbeddedCheckoutMessenger({\r\n *     parentOrigin: 'https://some/website',\r\n * });\r\n *\r\n * messenger.postFrameLoaded();\r\n * ```\r\n *\r\n * @alpha\r\n * Please note that this feature is currently in an early stage of development.\r\n * Therefore the API is unstable and not ready for public consumption.\r\n *\r\n * @param options - Options for creating `EmbeddedCheckoutMessenger`\r\n * @returns - An instance of `EmbeddedCheckoutMessenger`\r\n */\r\nexport declare function createEmbeddedCheckoutMessenger(options: EmbeddedCheckoutMessengerOptions): EmbeddedCheckoutMessenger;\r\n\r\n/**\r\n * Embed the checkout form in an iframe.\r\n *\r\n * @remarks\r\n * Once the iframe is embedded, it will automatically resize according to the\r\n * size of the checkout form. It will also notify the parent window when certain\r\n * events have occurred. i.e.: when the form is loaded and ready to be used.\r\n *\r\n * ```js\r\n * embedCheckout({\r\n *     url: 'https://checkout/url',\r\n *     containerId: 'container-id',\r\n * });\r\n * ```\r\n *\r\n * @param options - Options for embedding the checkout form.\r\n * @returns A promise that resolves to an instance of `EmbeddedCheckout`.\r\n */\r\nexport declare function embedCheckout(options: EmbeddedCheckoutOptions): Promise<EmbeddedCheckout>;\r\n"
  },
  {
    "path": "dist/types/integrations/adyen.d.ts",
    "content": "import { AdyenV2ScriptLoader } from '@bigcommerce/checkout-sdk/adyen-utils';\r\nimport { AdyenV3ScriptLoader } from '@bigcommerce/checkout-sdk/adyen-utils';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { WithAdyenV2PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/adyen-utils';\r\nimport { WithAdyenV3PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/adyen-utils';\r\n\r\ndeclare class AdyenV2PaymentStrategy implements PaymentStrategy {\r\n    private _paymentIntegrationService;\r\n    private _scriptLoader;\r\n    private _adyenClient?;\r\n    private _cardVerificationComponent?;\r\n    private _componentState?;\r\n    private _paymentComponent?;\r\n    private _paymentInitializeOptions?;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService, _scriptLoader: AdyenV2ScriptLoader);\r\n    initialize(options: PaymentInitializeOptions & WithAdyenV2PaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _getAdyenClient;\r\n    private _getPaymentInitializeOptions;\r\n    private _getThreeDS2ChallengeWidgetSize;\r\n    private _handleAction;\r\n    private _mapAdyenPlaceholderData;\r\n    private _mountCardVerificationComponent;\r\n    private _mountPaymentComponent;\r\n    private _processAdditionalAction;\r\n    private _updateComponentState;\r\n    private _validateCardData;\r\n    private _mapCardErrors;\r\n}\r\n\r\ndeclare class Adyenv3PaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private scriptLoader;\r\n    private static readonly mountContainerMaxWaitMs;\r\n    private static readonly mountContainerPollIntervalMs;\r\n    private adyenClient?;\r\n    private cardVerificationComponent?;\r\n    private componentState?;\r\n    private paymentComponent?;\r\n    private paymentInitializeOptions?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, scriptLoader: AdyenV3ScriptLoader);\r\n    initialize(options: PaymentInitializeOptions & WithAdyenV3PaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _updateComponentState;\r\n    private _getLocale;\r\n    private _getAdyenClient;\r\n    private _getPaymentInitializeOptions;\r\n    private _handleAction;\r\n    private _mapAdyenPlaceholderData;\r\n    private _mountCardVerificationComponent;\r\n    private _mountPaymentComponent;\r\n    private _isOneyPaymentMethod;\r\n    private _processAdditionalAction;\r\n    private _validateCardData;\r\n    private _mapCardErrors;\r\n    private _mountElement;\r\n    private _waitForMountContainer;\r\n}\r\n\r\nexport declare const createAdyenV2PaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<AdyenV2PaymentStrategy>, {\r\n    gateway: string;\r\n}>;\r\n\r\nexport declare const createAdyenV3PaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<Adyenv3PaymentStrategy>, {\r\n    gateway: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/affirm.d.ts",
    "content": "import { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare interface Affirm {\r\n    checkout: AffirmCheckout;\r\n    ui: {\r\n        error: {\r\n            on(event: string, callback: () => void): void;\r\n        };\r\n        ready(callback: () => void): void;\r\n    };\r\n}\r\n\r\ndeclare interface AffirmAddress {\r\n    name: {\r\n        first: string;\r\n        last: string;\r\n        full?: string;\r\n    };\r\n    address: {\r\n        line1: string;\r\n        line2?: string;\r\n        city: string;\r\n        state: string;\r\n        zipcode: string;\r\n        country?: string;\r\n    };\r\n    phone_number?: string;\r\n    email?: string;\r\n}\r\n\r\ndeclare interface AffirmCallback {\r\n    onFail(onFail: AffirmFailResponse): void;\r\n    onSuccess(success: AffirmSuccessResponse): void;\r\n}\r\n\r\ndeclare interface AffirmCheckout {\r\n    (options: AffirmRequestData): void;\r\n    open(modalOptions: AffirmCallback): void;\r\n    init(): void;\r\n}\r\n\r\ndeclare interface AffirmDiscount {\r\n    [key: string]: {\r\n        discount_amount: number;\r\n        discount_display_name: string;\r\n    };\r\n}\r\n\r\ndeclare interface AffirmFailResponse {\r\n    reason: string;\r\n}\r\n\r\ndeclare interface AffirmHostWindow extends Window {\r\n    affirm?: Affirm;\r\n}\r\n\r\ndeclare interface AffirmItem {\r\n    display_name: string;\r\n    sku: string;\r\n    unit_price: number;\r\n    qty: number;\r\n    item_image_url: string;\r\n    item_url: string;\r\n    categories?: string[][];\r\n}\r\n\r\ndeclare class AffirmPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private affirmScriptLoader;\r\n    private affirm?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, affirmScriptLoader: AffirmScriptLoader);\r\n    initialize(options: PaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    private initializeAffirmCheckout;\r\n    private getCheckoutInformation;\r\n    private getShippingType;\r\n    private getBillingAddress;\r\n    private getShippingAddress;\r\n    private getItems;\r\n    private getDiscounts;\r\n    private getCategories;\r\n}\r\n\r\ndeclare interface AffirmRequestData {\r\n    merchant: {\r\n        user_confirmation_url: string;\r\n        user_cancel_url: string;\r\n        user_confirmation_url_action?: string;\r\n        name?: string;\r\n    };\r\n    shipping: AffirmAddress;\r\n    billing?: AffirmAddress;\r\n    items: AffirmItem[];\r\n    discounts: AffirmDiscount;\r\n    metadata: {\r\n        shipping_type: string;\r\n        entity_name?: string;\r\n        webhook_session_id?: string;\r\n        mode?: string;\r\n        platform_type: string;\r\n        platform_version: string;\r\n        platform_affirm: string;\r\n    };\r\n    order_id?: string;\r\n    shipping_amount: number;\r\n    tax_amount: number;\r\n    total: number;\r\n}\r\n\r\ndeclare class AffirmScriptLoader {\r\n    affirmWindow: AffirmHostWindow;\r\n    constructor(affirmWindow?: AffirmHostWindow);\r\n    load(apikey?: string, testMode?: boolean): Promise<Affirm>;\r\n}\r\n\r\ndeclare interface AffirmSuccessResponse {\r\n    checkout_token: string;\r\n    created: string;\r\n}\r\n\r\nexport declare const createAffirmPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<AffirmPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/afterpay.d.ts",
    "content": "import { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\n\r\ndeclare interface AfterpayDisplayOptions {\r\n    token: string;\r\n}\r\n\r\ndeclare interface AfterpayInitializeOptions {\r\n    countryCode: string;\r\n}\r\n\r\ndeclare class AfterpayPaymentStrategy implements PaymentStrategy {\r\n    private _paymentIntegrationService;\r\n    private _afterpayScriptLoader;\r\n    private _afterpaySdk?;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService, _afterpayScriptLoader: AfterpayScriptLoader);\r\n    initialize(options: PaymentInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(options: PaymentRequestOptions): Promise<void>;\r\n    private _redirectToAfterpay;\r\n    private _mapCurrencyToISO2;\r\n    private _loadPaymentMethod;\r\n}\r\n\r\n/** Class responsible for loading the Afterpay SDK */\r\ndeclare class AfterpayScriptLoader {\r\n    private _scriptLoader;\r\n    constructor(_scriptLoader: ScriptLoader);\r\n    /**\r\n     * Loads the appropriate Afterpay SDK depending on the payment method data.\r\n     *\r\n     * @param {PaymentMethod} method the payment method data\r\n     */\r\n    load(method: PaymentMethod, countryCode: string, withHttps?: boolean): Promise<AfterpaySdk>;\r\n    private _getScriptURI;\r\n}\r\n\r\ndeclare interface AfterpaySdk {\r\n    initialize(options: AfterpayInitializeOptions): void;\r\n    redirect(options: AfterpayDisplayOptions): void;\r\n}\r\n\r\nexport declare const createAfterpayPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<AfterpayPaymentStrategy>, {\r\n    gateway: string;\r\n    id?: undefined;\r\n} | {\r\n    id: string;\r\n    gateway?: undefined;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/amazon-pay.d.ts",
    "content": "import { AmazonPayV2ButtonConfig } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\r\nimport { AmazonPayV2ButtonParameters } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\r\nimport { AmazonPayV2PaymentProcessor } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\r\nimport { BuyNowCartRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ExecutePaymentMethodCheckoutOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { RequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { RequestSender } from '@bigcommerce/request-sender';\r\nimport { Response } from '@bigcommerce/request-sender';\r\n\r\n/**\r\n * The required config to render the AmazonPayV2 button.\r\n */\r\ndeclare type AmazonPayV2ButtonInitializeOptions = AmazonPayV2ButtonParameters | WithBuyNowFeature;\r\n\r\ndeclare class AmazonPayV2ButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private amazonPayV2PaymentProcessor;\r\n    private amazonPayV2ConfigRequestSender;\r\n    private _buyNowInitializeOptions;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor, amazonPayV2ConfigRequestSender: AmazonPayV2RequestSender);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithAmazonPayV2ButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _createBuyNowCartOrThrow;\r\n    private _createCheckoutConfig;\r\n    private _getCheckoutCreationRequestConfig;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the customer step of\r\n * checkout in order to support AmazonPayV2.\r\n *\r\n * When AmazonPayV2 is initialized, a sign-in button will be inserted into the\r\n * DOM. When the customer clicks on it, they will be redirected to Amazon to\r\n * sign in.\r\n *\r\n * ```html\r\n * <!-- This is where the Amazon Pay button will be inserted -->\r\n * <div id=\"signInButton\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializeCustomer({\r\n *     methodId: 'amazonpay',\r\n *     amazonpay: {\r\n *         container: 'signInButton',\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface AmazonPayV2CustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the sign-in button should insert into.\r\n     */\r\n    container: string;\r\n}\r\n\r\ndeclare class AmazonPayV2CustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private amazonPayV2PaymentProcessor;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor);\r\n    initialize(options: CustomerInitializeOptions & WithAmazonPayV2CustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the payment step of\r\n * checkout in order to support AmazonPayV2.\r\n *\r\n * When AmazonPayV2 is initialized, a change payment button will be bound.\r\n * When the customer clicks on it, they will be redirected to Amazon to\r\n * select a different payment method.\r\n *\r\n * ```html\r\n * <!-- This is the change payment button that will be bound -->\r\n * <button id=\"edit-button\">Change card</button>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'amazonpay',\r\n *     amazonpay: {\r\n *         editButtonId: 'edit-button',\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface AmazonPayV2PaymentInitializeOptions {\r\n    /**\r\n     * This editButtonId is used to set an event listener, provide an element ID\r\n     * if you want users to be able to select a different payment method by\r\n     * clicking on a button. It should be an HTML element.\r\n     */\r\n    editButtonId?: string;\r\n}\r\n\r\ndeclare class AmazonPayV2PaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private amazonPayV2PaymentProcessor;\r\n    private _amazonPayButton?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor);\r\n    initialize(options: PaymentInitializeOptions & WithAmazonPayV2PaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _bindEditButton;\r\n    private _isModalFlow;\r\n    private _showLoadingSpinner;\r\n    private _createContainer;\r\n    private _getAmazonPayButton;\r\n    private _isOneTimeTransaction;\r\n    private _isReadyToPay;\r\n}\r\n\r\ndeclare class AmazonPayV2RequestSender {\r\n    private _requestSender;\r\n    constructor(_requestSender: RequestSender);\r\n    createCheckoutConfig(cartId: string): Promise<Response<CheckoutConfig>>;\r\n}\r\n\r\ndeclare interface CheckoutConfig {\r\n    payload: string;\r\n    signature: string;\r\n    public_key: string;\r\n}\r\n\r\ndeclare interface WithAmazonPayV2ButtonInitializeOptions {\r\n    amazonpay?: AmazonPayV2ButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithAmazonPayV2CustomerInitializeOptions {\r\n    amazonpay?: AmazonPayV2CustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithAmazonPayV2PaymentInitializeOptions {\r\n    amazonpay?: AmazonPayV2PaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBuyNowFeature extends AmazonPayV2ButtonConfig {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: {\r\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n    };\r\n}\r\n\r\nexport declare const createAmazonPayV2ButtonStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<AmazonPayV2ButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createAmazonPayV2CustomerStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<AmazonPayV2CustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createAmazonPayV2PaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<AmazonPayV2PaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/apple-pay.d.ts",
    "content": "/// <reference types=\"applepayjs\" />\r\nimport { BraintreeSdk } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BuyNowCartRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ExecutePaymentMethodCheckoutOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { RequestSender } from '@bigcommerce/request-sender';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\n\r\n/**\r\n * A set of options that are required to initialize ApplePay in cart.\r\n *\r\n * When ApplePay is initialized, an ApplePay button will be inserted into the\r\n * DOM. When a customer clicks on it, it will trigger Apple sheet.\r\n */\r\ndeclare interface ApplePayButtonInitializeOptions {\r\n    /**\r\n     * This option indicates if product requires shipping\r\n     */\r\n    requiresShipping?: boolean;\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: {\r\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n    };\r\n    /**\r\n     * A callback that gets called when a payment is successfully completed.\r\n     */\r\n    onPaymentAuthorize(): void;\r\n}\r\n\r\ndeclare class ApplePayButtonStrategy implements CheckoutButtonStrategy {\r\n    private _requestSender;\r\n    private _paymentIntegrationService;\r\n    private _sessionFactory;\r\n    private _braintreeSdk;\r\n    private _applePayScriptLoader;\r\n    private _paymentMethod?;\r\n    private _applePayButton?;\r\n    private _requiresShipping?;\r\n    private _buyNowInitializeOptions?;\r\n    private _onAuthorizeCallback;\r\n    private _subTotalLabel;\r\n    private _shippingLabel;\r\n    constructor(_requestSender: RequestSender, _paymentIntegrationService: PaymentIntegrationService, _sessionFactory: ApplePaySessionFactory, _braintreeSdk: BraintreeSdk, _applePayScriptLoader: ApplePayScriptLoader);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithApplePayButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _createButton;\r\n    private _createApplePayButtonElement;\r\n    private _handleWalletButtonClick;\r\n    private _getRequestWithEmptyTotal;\r\n    private _getBaseRequest;\r\n    private _handleApplePayEvents;\r\n    private _createBuyNowCart;\r\n    private _handlePaymentMethodSelected;\r\n    private _handleShippingContactSelected;\r\n    private _handleShippingMethodSelected;\r\n    private _getUpdatedLineItems;\r\n    private _updateShippingOption;\r\n    private _onValidateMerchant;\r\n    private _onPaymentAuthorized;\r\n    private _transformContactToAddress;\r\n    private _getBraintreeDeviceData;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the customer step of\r\n * checkout in order to support ApplePay.\r\n *\r\n * When ApplePay is initialized, a sign-in button will be inserted into the\r\n * DOM. When the customer clicks on it, it will trigger apple sheet\r\n */\r\ndeclare interface ApplePayCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the sign-in button should insert into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * Shipping label to be passed to apple sheet.\r\n     */\r\n    shippingLabel?: string;\r\n    /**\r\n     * Sub total label to be passed to apple sheet.\r\n     */\r\n    subtotalLabel?: string;\r\n    /**\r\n     * A callback that gets called when a payment is successfully completed.\r\n     */\r\n    onPaymentAuthorize(): void;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when wallet button clicked\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\ndeclare class ApplePayCustomerStrategy implements CustomerStrategy {\r\n    private _requestSender;\r\n    private _paymentIntegrationService;\r\n    private _sessionFactory;\r\n    private _braintreeSdk;\r\n    private _applePayScriptLoader;\r\n    private _paymentMethod?;\r\n    private _applePayButton?;\r\n    private _onAuthorizeCallback;\r\n    private _onError;\r\n    private _onClick;\r\n    private _subTotalLabel;\r\n    private _shippingLabel;\r\n    private _hasApplePaySession;\r\n    constructor(_requestSender: RequestSender, _paymentIntegrationService: PaymentIntegrationService, _sessionFactory: ApplePaySessionFactory, _braintreeSdk: BraintreeSdk, _applePayScriptLoader: ApplePayScriptLoader);\r\n    initialize(options: CustomerInitializeOptions & WithApplePayCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(): Promise<void>;\r\n    signOut(): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    private _createButton;\r\n    private _createApplePayButtonElement;\r\n    private _handleWalletButtonClick;\r\n    private _getBaseRequest;\r\n    private _handleApplePayEvents;\r\n    private _handleShippingContactSelected;\r\n    private _handleShippingMethodSelected;\r\n    private _getUpdatedLineItems;\r\n    private _updateShippingOption;\r\n    private _onValidateMerchant;\r\n    private _onPaymentAuthorized;\r\n    private _transformContactToAddress;\r\n    private _getBraintreeDeviceData;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Applepay payment method with:\r\n *\r\n * 1) ApplePay:\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'applepay',\r\n *     applepay: {\r\n *         shippingLabel: 'Shipping',\r\n *         subtotalLabel: 'Sub total',\r\n *     }\r\n * });\r\n * ```\r\n */\r\ndeclare interface ApplePayPaymentInitializeOptions {\r\n    /**\r\n     * Shipping label to be passed to apple sheet.\r\n     */\r\n    shippingLabel?: string;\r\n    /**\r\n     * Store credit label to be passed to apple sheet.\r\n     */\r\n    storeCreditLabel?: string;\r\n    /**\r\n     * Sub total label to be passed to apple sheet.\r\n     */\r\n    subtotalLabel?: string;\r\n}\r\n\r\ndeclare class ApplePayPaymentStrategy implements PaymentStrategy {\r\n    private _requestSender;\r\n    private _paymentIntegrationService;\r\n    private _sessionFactory;\r\n    private _braintreeSdk;\r\n    private _applePayScriptLoader;\r\n    private _shippingLabel;\r\n    private _subTotalLabel;\r\n    private _storeCreditLabel;\r\n    constructor(_requestSender: RequestSender, _paymentIntegrationService: PaymentIntegrationService, _sessionFactory: ApplePaySessionFactory, _braintreeSdk: BraintreeSdk, _applePayScriptLoader: ApplePayScriptLoader);\r\n    initialize(options?: PaymentInitializeOptions & WithApplePayPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _getBaseRequest;\r\n    private _handleApplePayEvents;\r\n    private _onValidateMerchant;\r\n    private _onPaymentAuthorized;\r\n    private _getBraintreeDeviceData;\r\n}\r\n\r\ndeclare class ApplePayScriptLoader {\r\n    private scriptLoader;\r\n    private sdkVersion;\r\n    constructor(scriptLoader: ScriptLoader);\r\n    loadSdk(): Promise<void>;\r\n}\r\n\r\ndeclare class ApplePaySessionFactory {\r\n    create(request: ApplePayJS.ApplePayPaymentRequest): ApplePaySession;\r\n}\r\n\r\ndeclare interface WithApplePayButtonInitializeOptions {\r\n    applepay?: ApplePayButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithApplePayCustomerInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using ApplePay.\r\n     */\r\n    applepay?: ApplePayCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithApplePayPaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Apple Pay payment\r\n     * method. They can be omitted unless you need to support Apple Pay.\r\n     */\r\n    applepay?: ApplePayPaymentInitializeOptions;\r\n}\r\n\r\nexport declare const createApplePayButtonStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<ApplePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createApplePayCustomerStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<ApplePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createApplePayPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<ApplePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/bigcommerce-payments.d.ts",
    "content": "import { BigCommercePaymentsFastlaneUtils } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\r\nimport { BillingAddressRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { BuyNowCartRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CardInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { Cart } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerCredentials } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ExecutePaymentMethodCheckoutOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { FormPoster } from '@bigcommerce/form-poster';\r\nimport { HostedFormOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { HostedInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PayPalBNPLConfigurationItem } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\r\nimport { PayPalFastlaneStylesOption } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\r\nimport { PayPalSdkHelper } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { RequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { RequestSender } from '@bigcommerce/request-sender';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\nimport { ShippingOption } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { VaultedInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare interface AllowedPaymentMethods {\r\n    type: string;\r\n    parameters: {\r\n        allowedAuthMethods: string[];\r\n        allowedCardNetworks: string[];\r\n        billingAddressRequired: boolean;\r\n        assuranceDetailsRequired: boolean;\r\n        billingAddressParameters: {\r\n            format: string;\r\n        };\r\n    };\r\n    tokenizationSpecification: {\r\n        type: string;\r\n        parameters: {\r\n            gateway: string;\r\n            gatewayMerchantId: string;\r\n        };\r\n    };\r\n}\r\n\r\ndeclare interface ApproveCallbackActions {\r\n    order: {\r\n        get: () => Promise<PayPalOrderDetails>;\r\n    };\r\n}\r\n\r\ndeclare interface ApproveCallbackPayload {\r\n    orderID?: string;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments payment\r\n * method for presenting its PayPal button.\r\n *\r\n *\r\n * Also, BCP (also known as BigCommercePayments) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the APM button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * <!-- This is where the alternative payment methods fields will be inserted.  -->\r\n * <div id=\"apm-fields-container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     gatewayId: 'bigcommerce_payments_apms',\r\n *     methodId: 'sepa',\r\n *     bigcommerce_payments_apms: {\r\n *         container: '#container',\r\n *         apmFieldsContainer: '#apm-fields-container',\r\n *         apmFieldsStyles: {\r\n *             base: {\r\n *                 backgroundColor: 'transparent',\r\n *             },\r\n *             input: {\r\n *                 backgroundColor: 'white',\r\n *                 fontSize: '1rem',\r\n *                 color: '#333',\r\n *                 borderColor: '#d9d9d9',\r\n *                 borderRadius: '4px',\r\n *                 borderWidth: '1px',\r\n *                 padding: '1rem',\r\n *             },\r\n *             invalid: {\r\n *                 color: '#ed6a6a',\r\n *             },\r\n *             active: {\r\n *                 color: '#4496f6',\r\n *             },\r\n *         },\r\n *         clientId: 'YOUR_CLIENT_ID',\r\n * // Callback for submitting payment form that gets called when a buyer approves payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'bigcommerce_payments_apms', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * The CSS selector of a container where the alternative payment methods fields widget should be inserted into.\r\n     * It's necessary to specify this parameter when using Alternative Payment Methods.\r\n     * Without it alternative payment methods will not work.\r\n     */\r\n    apmFieldsContainer?: string;\r\n    /**\r\n     * Object with styles to customize alternative payment methods fields.\r\n     */\r\n    apmFieldsStyles?: BigCommercePaymentsFieldsStyleOptions;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error | unknown): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm(): void;\r\n    /**\r\n     * A callback that gets called\r\n     * when Smart Payment Button is initialized.\r\n     */\r\n    onInitButton(actions: InitCallbackActions): Promise<void>;\r\n}\r\n\r\ndeclare class BigCommercePaymentsAlternativeMethodsPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    private bigCommercePaymentsSdkHelper;\r\n    private loadingIndicator;\r\n    private pollingInterval;\r\n    private maxPollingIntervalTime;\r\n    private loadingIndicatorContainer?;\r\n    private orderId?;\r\n    private bigCommercePaymentsButton?;\r\n    private paypalApms?;\r\n    private pollingTimer;\r\n    private stopPolling;\r\n    private isPollingEnabled;\r\n    private bigCommercePaymentsAlternativeMethods?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService, bigCommercePaymentsSdkHelper: PayPalSdkHelper, loadingIndicator: LoadingIndicator, pollingInterval?: number, maxPollingIntervalTime?: number);\r\n    initialize(options: PaymentInitializeOptions & WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    /**\r\n     *\r\n     * Polling mechanism\r\n     *\r\n     *\r\n     * */\r\n    private initializePollingMechanism;\r\n    private deInitializePollingMechanism;\r\n    private resetPollingMechanism;\r\n    private reinitializeStrategy;\r\n    private handleError;\r\n    /**\r\n     *\r\n     * Button methods/callbacks\r\n     *\r\n     * */\r\n    private renderButton;\r\n    private onCreateOrder;\r\n    private handleApprove;\r\n    private handleFailure;\r\n    /**\r\n     *\r\n     * Fields methods\r\n     *\r\n     * */\r\n    private renderFields;\r\n    /**\r\n     *\r\n     * Loading Indicator methods\r\n     *\r\n     * */\r\n    private toggleLoadingIndicator;\r\n    /**\r\n     *\r\n     * Utils\r\n     *\r\n     * */\r\n    private isNonInstantPaymentMethod;\r\n    private getPaypalAmpsSdkOrThrow;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize BigCommercePaymentsButtonStrategy in cart or product details page.\r\n *\r\n * When BigCommercePayments is initialized, an BigCommercePayments PayPal button will be inserted into the\r\n * DOM. When a customer clicks on it, it will trigger PayPal flow.\r\n */\r\ndeclare interface BigCommercePaymentsButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare class BigCommercePaymentsButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithBigCommercePaymentsButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private renderButton;\r\n    private handleClick;\r\n    private onHostedCheckoutApprove;\r\n    private onShippingAddressChange;\r\n    private onShippingOptionsChange;\r\n}\r\n\r\n/**\r\n *\r\n * BigCommerce Payments Buttons\r\n *\r\n */\r\ndeclare interface BigCommercePaymentsButtons {\r\n    render(id: string): void;\r\n    close(): void;\r\n    isEligible(): boolean;\r\n    hasReturned?(): boolean;\r\n    resume?(): void;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsButtonsOptions {\r\n    experience?: string;\r\n    style?: PayPalButtonStyleOptions;\r\n    fundingSource: string;\r\n    createOrder(): Promise<string>;\r\n    onApprove(data: ApproveCallbackPayload, actions: ApproveCallbackActions): Promise<boolean | void> | void;\r\n    onInit?(data: InitCallbackPayload, actions: InitCallbackActions): Promise<void>;\r\n    onComplete?(data: CompleteCallbackDataPayload): Promise<void>;\r\n    onClick?(data: ClickCallbackPayload, actions: ClickCallbackActions): Promise<void> | void;\r\n    onError?(error: Error): void;\r\n    onCancel?(): void;\r\n    onShippingAddressChange?(data: ShippingAddressChangeCallbackPayload): Promise<void>;\r\n    onShippingOptionsChange?(data: ShippingOptionChangeCallbackPayload): Promise<void>;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsCardFields {\r\n    isEligible(): boolean;\r\n    CVVField(config?: BigCommercePaymentsFieldsInitializationData): BigCommercePaymentsFields;\r\n    ExpiryField(config?: BigCommercePaymentsFieldsInitializationData): BigCommercePaymentsFields;\r\n    NameField(config?: BigCommercePaymentsFieldsInitializationData): BigCommercePaymentsFields;\r\n    NumberField(config?: BigCommercePaymentsFieldsInitializationData): BigCommercePaymentsFields;\r\n    submit(config?: BigCommercePaymentsCardFieldsSubmitConfig): Promise<void>;\r\n    getState(): Promise<BigCommercePaymentsCardFieldsState>;\r\n}\r\n\r\ndeclare type BigCommercePaymentsCardFieldsCard = BigCommercePaymentsHostedFieldsCard;\r\n\r\n/**\r\n *\r\n * BigCommerce Payments SDK\r\n *\r\n */\r\ndeclare interface BigCommercePaymentsCardFieldsConfig {\r\n    inputEvents: {\r\n        onChange(data: BigCommercePaymentsCardFieldsState): void;\r\n        onFocus(data: BigCommercePaymentsCardFieldsState): void;\r\n        onBlur(data: BigCommercePaymentsCardFieldsState): void;\r\n        onInputSubmitRequest(data: BigCommercePaymentsCardFieldsState): void;\r\n    };\r\n    createVaultSetupToken?: (data: BigCommercePaymentsCardFieldsState) => void;\r\n    createOrder?: () => Promise<string>;\r\n    style: BigCommercePaymentsHostedFieldsRenderOptions['styles'];\r\n    onApprove(data: BigCommercePaymentsCardFieldsOnApproveData): void;\r\n    onError(): void;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsCardFieldsFieldData {\r\n    isFocused: boolean;\r\n    isEmpty: boolean;\r\n    isValid: boolean;\r\n    isPotentiallyValid: boolean;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsCardFieldsOnApproveData {\r\n    vaultSetupToken?: string;\r\n    orderID: string;\r\n    liabilityShift?: LiabilityShiftEnum;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsCardFieldsState {\r\n    cards: BigCommercePaymentsCardFieldsCard[];\r\n    emittedBy: string;\r\n    isFormValid: boolean;\r\n    errors: string[];\r\n    fields: {\r\n        cardCvvField: BigCommercePaymentsCardFieldsFieldData;\r\n        cardNumberField: BigCommercePaymentsCardFieldsFieldData;\r\n        cardNameField?: BigCommercePaymentsCardFieldsFieldData;\r\n        cardExpiryField: BigCommercePaymentsCardFieldsFieldData;\r\n    };\r\n}\r\n\r\ndeclare interface BigCommercePaymentsCardFieldsSubmitConfig {\r\n    billingAddress: {\r\n        company?: string;\r\n        addressLine1: string;\r\n        addressLine2?: string;\r\n        adminArea1: string;\r\n        adminArea2: string;\r\n        postalCode: string;\r\n        countryCode?: string;\r\n    };\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments Credit Card payment\r\n * method for presenting its credit card form.\r\n *\r\n * ```html\r\n * <!-- These containers are where the hosted (iframed) credit card fields will be inserted -->\r\n * <div id=\"card-number\"></div>\r\n * <div id=\"card-name\"></div>\r\n * <div id=\"card-expiry\"></div>\r\n * <div id=\"card-code\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bigcommerce_payments_creditcards',\r\n *     bigcommerce_payments_creditcards: {\r\n *         form: {\r\n *             fields: {\r\n *                 cardNumber: { containerId: 'card-number' },\r\n *                 cardName: { containerId: 'card-name' },\r\n *                 cardExpiry: { containerId: 'card-expiry' },\r\n *                 cardCode: { containerId: 'card-code' },\r\n *             },\r\n *         },\r\n *         onCreditCardFieldsRenderingError: (error) => handleError(error),\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Additional options can be passed in to customize the fields and register\r\n * event callbacks.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bigcommerce_payments_creditcards',\r\n *     bigcommerce_payments_creditcards: {\r\n *         form: {\r\n *             fields: {\r\n *                 cardNumber: { containerId: 'card-number', placeholder: 'Number of card' },\r\n *                 cardName: { containerId: 'card-name', placeholder: 'Name of card' },\r\n *                 cardExpiry: { containerId: 'card-expiry', placeholder: 'Expiry of card' },\r\n *                 cardCode: { containerId: 'card-code', placeholder: 'Code of card' },\r\n *             },\r\n *             styles: {\r\n *                 default: {\r\n *                     color: '#000',\r\n *                 },\r\n *                 error: {\r\n *                     color: '#f00',\r\n *                 },\r\n *                 focus: {\r\n *                     color: '#0f0',\r\n *                 },\r\n *             },\r\n *             onBlur({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onFocus({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onEnter({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onCardTypeChange({ cardType }) {\r\n *                 console.log(cardType);\r\n *             },\r\n *             onValidate({ errors, isValid }) {\r\n *                 console.log(errors);\r\n *                 console.log(isValid);\r\n *             },\r\n *         },\r\n *         onCreditCardFieldsRenderingError: (error) => handleError(error),\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsCreditCardsPaymentInitializeOptions {\r\n    /**\r\n     * The form is data for Credit Card Form\r\n     */\r\n    form: HostedFormOptions;\r\n    /**\r\n     * The callback that gets called when there is an issue with rendering credit card fields\r\n     */\r\n    onCreditCardFieldsRenderingError?: (error: unknown) => void;\r\n    /**\r\n     * The callback that gets called when PayPal SDK load complete\r\n     */\r\n    onLoadComplete?: () => void;\r\n}\r\n\r\ndeclare class BigCommercePaymentsCreditCardsPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    private bigCommercePaymentsSdk;\r\n    private bigCommercePaymentsFastlaneUtils;\r\n    private executionPaymentData?;\r\n    private isCreditCardForm?;\r\n    private isCreditCardVaultedForm?;\r\n    private cardFields?;\r\n    private cvvField?;\r\n    private expiryField?;\r\n    private numberField?;\r\n    private nameField?;\r\n    private hostedFormOptions?;\r\n    private returnedOrderId?;\r\n    private returnedVaultedToken?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService, bigCommercePaymentsSdk: PayPalSdkHelper, bigCommercePaymentsFastlaneUtils: BigCommercePaymentsFastlaneUtils);\r\n    initialize(options: PaymentInitializeOptions & WithBigCommercePaymentsCreditCardsPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    /**\r\n     *\r\n     * Submit Payment Payload preparing method\r\n     *\r\n     * `vaultedToken` is used when we pay with vaulted instrument (with trusted shipping address and untrusted)\r\n     * `setupToken` is used when we pay with vaulted instrument (untrusted shipping address)\r\n     * `orderId` is used in every case (basic card payment, trusted shipping address and untrusted)\r\n     */\r\n    private preparePaymentPayload;\r\n    /**\r\n     *\r\n     * Card fields initialize\r\n     *\r\n     */\r\n    private initializeFields;\r\n    /**\r\n     *\r\n     * Get execute callback method\r\n     * Depends on shipping address is trusted or not we should pass to PP\r\n     * `createVaultSetupToken` callback if address is untrusted or\r\n     * `createOrder` if address is trusted\r\n     *\r\n     */\r\n    private getExecuteCallback;\r\n    private createVaultSetupTokenCallback;\r\n    private createOrderCallback;\r\n    /**\r\n     *\r\n     * onApprove method\r\n     * When submitting a form with a `submitHostedForm` method if there is no error\r\n     * then onApprove callback is triggered and depends on the flow\r\n     * we will receive an `orderID` if it's basic paying and `vaultSetupToken` if we are paying\r\n     * with vaulted instrument and shipping address is untrusted\r\n     *\r\n     */\r\n    private handleApprove;\r\n    /**\r\n     *\r\n     * Rendering Card Fields methods\r\n     *\r\n     */\r\n    private renderFields;\r\n    private renderVaultedFields;\r\n    /**\r\n     *\r\n     * Instrument params method\r\n     *\r\n     */\r\n    private getInstrumentParams;\r\n    private getFieldTypeByEmittedField;\r\n    /**\r\n     *\r\n     * Form submit method\r\n     * Triggers a form submit\r\n     *\r\n     * */\r\n    private submitHostedForm;\r\n    /**\r\n     *\r\n     * Validation and errors\r\n     *\r\n     */\r\n    private validateHostedFormOrThrow;\r\n    private getValidityData;\r\n    private getInvalidErrorByFieldType;\r\n    private mapValidationErrors;\r\n    /**\r\n     *\r\n     * Fields mappers\r\n     *\r\n     */\r\n    private mapFieldType;\r\n    /**\r\n     *\r\n     * Utils\r\n     *\r\n     */\r\n    private getCardFieldsOrThrow;\r\n    private getInputStyles;\r\n    private stylizeInputContainers;\r\n    private hasUndefinedValues;\r\n    /**\r\n     *\r\n     * Input events methods\r\n     *\r\n     */\r\n    private onChangeHandler;\r\n    private onFocusHandler;\r\n    private onBlurHandler;\r\n    private onInputSubmitRequest;\r\n    /**\r\n     *\r\n     * BigCommercePayments Accelerated checkout related methods\r\n     *\r\n     */\r\n    private shouldInitializePayPalFastlane;\r\n    private initializePayPalFastlaneOrThrow;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the customer step of\r\n * checkout to support BigCommercePayments.\r\n */\r\ndeclare interface BigCommercePaymentsCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     * A callback that gets called when paypal button clicked.\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\ndeclare class BigCommercePaymentsCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    private onError;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService);\r\n    initialize(options: CustomerInitializeOptions & WithBigCommercePaymentsCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    private renderButton;\r\n    private onHostedCheckoutApprove;\r\n    private onShippingAddressChange;\r\n    private onShippingOptionsChange;\r\n    private handleError;\r\n}\r\n\r\n/**\r\n * A set of options that are optional to initialize the BigCommercePayments Fastlane customer strategy\r\n * that are responsible for BigCommercePayments Fastlane components styling and initialization\r\n *\r\n * ```js\r\n * service.initializeCustomer({\r\n *     methodId: 'bigcommerce_payments_fastlane',\r\n *     bigcommerce_payments_fastlane: {\r\n *         styles: {\r\n *              root: {\r\n *                  backgroundColorPrimary: 'transparent',\r\n *                  errorColor: '#C40B0B',\r\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n *              },\r\n *              input: {\r\n *                  borderRadius: '0.25rem',\r\n *                  borderColor: '#9E9E9E',\r\n *                  focusBorderColor: '#4496F6',\r\n *              },\r\n *              toggle: {\r\n *                  colorPrimary: '#0F005E',\r\n *                  colorSecondary: '#ffffff',\r\n *              },\r\n *              text: {\r\n *                  body: {\r\n *                      color: '#222222',\r\n *                      fontSize: '1rem',\r\n *                  },\r\n *                  caption: {\r\n *                      color: '#515151',\r\n *                      fontSize: '0.875rem',\r\n *                  },\r\n *              },\r\n *              branding: 'light',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsFastlaneCustomerInitializeOptions {\r\n    /**\r\n     * Is a stylisation options for customizing BigCommercePayments Fastlane components\r\n     *\r\n     * Note: the styles for all BigCommercePayments Fastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter which strategy was initialised first\r\n     */\r\n    styles?: PayPalFastlaneStylesOption;\r\n}\r\n\r\ndeclare class BigCommercePaymentsFastlaneCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsSdk;\r\n    private bigCommercePaymentsFastlaneUtils;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsSdk: PayPalSdkHelper, bigCommercePaymentsFastlaneUtils: BigCommercePaymentsFastlaneUtils);\r\n    initialize(options: CustomerInitializeOptions & WithBigCommercePaymentsFastlaneCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    /**\r\n     *\r\n     * Authentication flow methods\r\n     *\r\n     */\r\n    private runPayPalAuthenticationFlowOrThrow;\r\n    private updateCustomerDataState;\r\n    /**\r\n     *\r\n     * Fastlane styling methods\r\n     *\r\n     */\r\n    private getFastlaneStyles;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments Fastlane payment\r\n * method for presenting on the page.\r\n *\r\n *\r\n * Also, BigCommercePayments requires specific options to initialize BigCommercePayments Fastlane Card Component\r\n * ```html\r\n * <!-- This is where the BigCommercePayments Fastlane Card Component will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bigcommerce_payments_fastlane',\r\n *     bigcommerce_payments_fastlane: {\r\n *         onInit: (renderPayPalCardComponent) => renderPayPalCardComponent('#container-id'),\r\n *         onChange: (showPayPalCardSelector) => showPayPalCardSelector(),\r\n *         styles: {\r\n *              root: {\r\n *                  backgroundColorPrimary: 'transparent',\r\n *                  errorColor: '#C40B0B',\r\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n *              },\r\n *              input: {\r\n *                  borderRadius: '0.25rem',\r\n *                  borderColor: '#9E9E9E',\r\n *                  focusBorderColor: '#4496F6',\r\n *              },\r\n *              toggle: {\r\n *                  colorPrimary: '#0F005E',\r\n *                  colorSecondary: '#ffffff',\r\n *              },\r\n *              text: {\r\n *                  body: {\r\n *                      color: '#222222',\r\n *                      fontSize: '1rem',\r\n *                  },\r\n *                  caption: {\r\n *                      color: '#515151',\r\n *                      fontSize: '0.875rem',\r\n *                  },\r\n *              },\r\n *              branding: 'light',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsFastlanePaymentInitializeOptions {\r\n    /**\r\n     * Is a callback that takes the CSS selector of a container\r\n     * where the BigCommercePayments Fastlane form should be inserted into.\r\n     */\r\n    onInit?: (renderPayPalCardComponent: (container: string) => void) => void;\r\n    /**\r\n     * Is a callback that shows fastlane stored instruments\r\n     * when get triggered\r\n     */\r\n    onChange?: (showPayPalCardSelector: () => Promise<CardInstrument | undefined>) => void;\r\n    /**\r\n     * Callback that handles errors\r\n     */\r\n    onError?: (error: unknown) => void;\r\n    /**\r\n     * Is a stylisation options for customizing BigCommercePayments Fastlane components\r\n     *\r\n     * Note: the styles for all BigCommercePaymentsFastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter what strategy was initialised first\r\n     */\r\n    styles?: PayPalFastlaneStylesOption;\r\n}\r\n\r\ndeclare class BigCommercePaymentsFastlanePaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsRequestSender;\r\n    private bigCommercePaymentsSdk;\r\n    private bigCommercePaymentsFastlaneUtils;\r\n    private paypalComponentMethods?;\r\n    private threeDSVerificationMethod?;\r\n    private paypalFastlaneSdk?;\r\n    private bigcommerce_payments_fastlane?;\r\n    private methodId?;\r\n    private orderId?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsRequestSender: BigCommercePaymentsRequestSender, bigCommercePaymentsSdk: PayPalSdkHelper, bigCommercePaymentsFastlaneUtils: BigCommercePaymentsFastlaneUtils);\r\n    /**\r\n     *\r\n     * Default methods\r\n     *\r\n     * */\r\n    initialize(options: PaymentInitializeOptions & WithBigCommercePaymentsFastlanePaymentInitializeOptions): Promise<void>;\r\n    execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    /**\r\n     *\r\n     * Authentication flow methods\r\n     *\r\n     */\r\n    private shouldRunAuthenticationFlow;\r\n    private runPayPalAuthenticationFlowOrThrow;\r\n    /**\r\n     *\r\n     * BigCommercePayments Fastlane Card Component rendering method\r\n     *\r\n     */\r\n    private initializePayPalPaymentComponent;\r\n    private renderPayPalPaymentComponent;\r\n    private getPayPalComponentMethodsOrThrow;\r\n    /**\r\n     *\r\n     * Payment Payload preparation methods\r\n     *\r\n     */\r\n    private prepareVaultedInstrumentPaymentPayload;\r\n    private preparePaymentPayload;\r\n    private createOrder;\r\n    /**\r\n     *\r\n     * 3DSecure methods\r\n     *\r\n     * */\r\n    private get3DSNonce;\r\n    /**\r\n     *\r\n     * BigCommercePayments Fastlane instrument change\r\n     *\r\n     */\r\n    private handlePayPalStoredInstrumentChange;\r\n    /**\r\n     *\r\n     * Bigcommerce Payments Fastlane experiments handling\r\n     *\r\n     */\r\n    private isBigcommercePaymentsFastlaneThreeDSAvailable;\r\n    private handleError;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsFields {\r\n    render(container: HTMLElement | string): Promise<void>;\r\n    clear(): void;\r\n    removeClass(className: string): Promise<void>;\r\n    close(): Promise<void>;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsFieldsInitializationData {\r\n    placeholder?: string;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsFieldsStyleOptions {\r\n    variables?: {\r\n        fontFamily?: string;\r\n        fontSizeBase?: string;\r\n        fontSizeSm?: string;\r\n        fontSizeM?: string;\r\n        fontSizeLg?: string;\r\n        textColor?: string;\r\n        colorTextPlaceholder?: string;\r\n        colorBackground?: string;\r\n        colorInfo?: string;\r\n        colorDanger?: string;\r\n        borderRadius?: string;\r\n        borderColor?: string;\r\n        borderWidth?: string;\r\n        borderFocusColor?: string;\r\n        spacingUnit?: string;\r\n    };\r\n    rules?: {\r\n        [key: string]: any;\r\n    };\r\n}\r\n\r\ndeclare interface BigCommercePaymentsHostedFieldOption {\r\n    selector: string;\r\n    placeholder?: string;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsHostedFields {\r\n    submit(options?: BigCommercePaymentsHostedFieldsSubmitOptions): Promise<BigCommercePaymentsHostedFieldsApprove>;\r\n    getState(): BigCommercePaymentsHostedFieldsState;\r\n    on(eventName: string, callback: (event: BigCommercePaymentsHostedFieldsState) => void): void;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsHostedFieldsApprove {\r\n    orderId: string;\r\n    liabilityShift?: 'POSSIBLE' | 'NO' | 'UNKNOWN';\r\n}\r\n\r\ndeclare interface BigCommercePaymentsHostedFieldsCard {\r\n    type: string;\r\n    niceType: string;\r\n    code: {\r\n        name: string;\r\n        size: number;\r\n    };\r\n}\r\n\r\ndeclare interface BigCommercePaymentsHostedFieldsFieldData {\r\n    container: HTMLElement;\r\n    isFocused: boolean;\r\n    isEmpty: boolean;\r\n    isPotentiallyValid: boolean;\r\n    isValid: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * BigCommerce Payments Hosted Fields\r\n *\r\n */\r\ndeclare interface BigCommercePaymentsHostedFieldsRenderOptions {\r\n    fields?: {\r\n        number?: BigCommercePaymentsHostedFieldOption;\r\n        cvv?: BigCommercePaymentsHostedFieldOption;\r\n        expirationDate?: BigCommercePaymentsHostedFieldOption;\r\n    };\r\n    paymentsSDK?: boolean;\r\n    styles?: {\r\n        input?: {\r\n            [key: string]: string;\r\n        };\r\n        '.invalid'?: {\r\n            [key: string]: string;\r\n        };\r\n        '.valid'?: {\r\n            [key: string]: string;\r\n        };\r\n        ':focus'?: {\r\n            [key: string]: string;\r\n        };\r\n    };\r\n    createOrder(): Promise<string>;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsHostedFieldsState {\r\n    cards: BigCommercePaymentsHostedFieldsCard[];\r\n    emittedBy: string;\r\n    fields: {\r\n        number?: BigCommercePaymentsHostedFieldsFieldData;\r\n        expirationDate?: BigCommercePaymentsHostedFieldsFieldData;\r\n        expirationMonth?: BigCommercePaymentsHostedFieldsFieldData;\r\n        expirationYear?: BigCommercePaymentsHostedFieldsFieldData;\r\n        cvv?: BigCommercePaymentsHostedFieldsFieldData;\r\n        postalCode?: BigCommercePaymentsHostedFieldsFieldData;\r\n    };\r\n}\r\n\r\ndeclare interface BigCommercePaymentsHostedFieldsSubmitOptions {\r\n    contingencies?: Array<'3D_SECURE'>;\r\n    cardholderName?: string;\r\n}\r\n\r\n/**\r\n *\r\n * BigCommerce Payments Initialization Data\r\n *\r\n */\r\ndeclare interface BigCommercePaymentsInitializationData {\r\n    attributionId?: string;\r\n    availableAlternativePaymentMethods: FundingType[];\r\n    buttonStyle?: PayPalButtonStyleOptions;\r\n    buyerCountry?: string;\r\n    clientId: string;\r\n    clientToken?: string;\r\n    enabledAlternativePaymentMethods: FundingType[];\r\n    isDeveloperModeApplicable?: boolean;\r\n    intent?: BigCommercePaymentsIntent;\r\n    isAcceleratedCheckoutEnabled?: boolean;\r\n    isHostedCheckoutEnabled?: boolean;\r\n    isPayPalCreditAvailable?: boolean;\r\n    isVenmoEnabled?: boolean;\r\n    isGooglePayEnabled?: boolean;\r\n    merchantId?: string;\r\n    orderId?: string;\r\n    shouldRenderFields?: boolean;\r\n    shouldRunAcceleratedCheckout?: boolean;\r\n    paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\r\n    isServerSideShippingCallbacksEnabled?: boolean;\r\n    paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[];\r\n}\r\n\r\ndeclare class BigCommercePaymentsIntegrationService {\r\n    private formPoster;\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsRequestSender;\r\n    private bigCommercePaymentsScriptLoader;\r\n    private paypalSdk?;\r\n    constructor(formPoster: FormPoster, paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsRequestSender: BigCommercePaymentsRequestSender, bigCommercePaymentsScriptLoader: BigCommercePaymentsScriptLoader);\r\n    /**\r\n     *\r\n     * PayPalSDK methods\r\n     *\r\n     */\r\n    loadPayPalSdk(methodId: string, providedCurrencyCode?: string, initializesOnCheckoutPage?: boolean, forceLoad?: boolean): Promise<PayPalSDK | undefined>;\r\n    getPayPalSdkOrThrow(): PayPalSDK;\r\n    /**\r\n     *\r\n     * Buy Now cart creation methods\r\n     *\r\n     */\r\n    createBuyNowCartOrThrow(buyNowInitializeOptions: PayPalBuyNowInitializeOptions): Promise<Cart>;\r\n    /**\r\n     *\r\n     * Order methods\r\n     *\r\n     */\r\n    createOrder(providerId: string, requestBody?: Partial<PayPalCreateOrderRequestBody>): Promise<string>;\r\n    createOrderCardFields(providerId: string, requestBody?: Partial<PayPalCreateOrderRequestBody>): Promise<PayPalCreateOrderCardFieldsResponse>;\r\n    updateOrder(isServerSideShippingCallbacksEnabled?: boolean): Promise<void>;\r\n    getOrderStatus(methodId?: string, options?: RequestOptions): Promise<PayPalOrderStatus>;\r\n    /**\r\n     *\r\n     * Payment submitting and tokenizing methods\r\n     *\r\n     */\r\n    tokenizePayment(methodId: string, orderId?: string): void;\r\n    submitPayment(methodId: string, orderId: string, gatewayId?: string): Promise<void>;\r\n    /**\r\n     *\r\n     * Shipping options methods\r\n     *\r\n     */\r\n    getShippingOptionOrThrow(selectedShippingOptionId?: string): ShippingOption;\r\n    /**\r\n     *\r\n     * Address transforming methods\r\n     *\r\n     */\r\n    getAddress(address?: Partial<BillingAddressRequestBody>): BillingAddressRequestBody;\r\n    getBillingAddressFromOrderDetails({ payer }: PayPalOrderDetails): BillingAddressRequestBody;\r\n    getShippingAddressFromOrderDetails(orderDetails: PayPalOrderDetails): BillingAddressRequestBody;\r\n    /**\r\n     *\r\n     * Buttons style methods\r\n     *\r\n     */\r\n    getValidButtonStyle(style?: PayPalButtonStyleOptions): PayPalButtonStyleOptions;\r\n    getValidHeight(height?: number): number;\r\n    /**\r\n     *\r\n     * Utils methods\r\n     *\r\n     */\r\n    removeElement(elementId?: string): void;\r\n}\r\n\r\ndeclare enum BigCommercePaymentsIntent {\r\n    AUTHORIZE = \"authorize\",\r\n    CAPTURE = \"capture\"\r\n}\r\n\r\n/**\r\n *\r\n * BigCommercePayments Messages\r\n */\r\ndeclare interface BigCommercePaymentsMessages {\r\n    render(id: string): void;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsMessagesOptions {\r\n    amount: number;\r\n    placement: string;\r\n    style?: BigCommercePaymentsMessagesStyleOptions;\r\n    fundingSource?: string;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsMessagesStyleOptions {\r\n    layout?: string;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsPayLaterButtonInitializeOptions {\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare class BigCommercePaymentsPayLaterButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithBigCommercePaymentsPayLaterButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private renderButton;\r\n    private handleClick;\r\n    private onHostedCheckoutApprove;\r\n    private onShippingAddressChange;\r\n    private onShippingOptionsChange;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsPayLaterCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     * A callback that gets called when paypal button clicked.\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\ndeclare class BigCommercePaymentsPayLaterCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    private onError;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService);\r\n    initialize(options: CustomerInitializeOptions & WithBigCommercePaymentsPayLaterCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    private renderButton;\r\n    private onHostedCheckoutApprove;\r\n    private onShippingAddressChange;\r\n    private onShippingOptionsChange;\r\n    private handleError;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments PayLater payment\r\n * method for presenting its BigCommercePayments PayLater button.\r\n *\r\n *\r\n * Also, BigCommercePayments requires specific options to initialize the BigCommercePayments Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the BigCommercePayments PayLater button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bigcommerce_payments_paylater',\r\n *     bigcommerce_payments_paylater: {\r\n *         container: '#container',\r\n * // Callback for submitting payment form that gets called when a buyer approves BigCommercePayments payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'bigcommerce_payments_paylater', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular BigCommercePayments method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsPayLaterPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container?: string;\r\n    /**\r\n     * The location to insert the Pay Later Messages.\r\n     */\r\n    bannerContainerId?: string;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate?(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved BigCommercePayments account.\r\n     */\r\n    submitForm?(): void;\r\n}\r\n\r\ndeclare class BigCommercePaymentsPayLaterPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    private loadingIndicator;\r\n    private paypalSdkHelper;\r\n    private loadingIndicatorContainer?;\r\n    private orderId?;\r\n    private bigCommercePaymentsButtons?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService, loadingIndicator: LoadingIndicator, paypalSdkHelper: PayPalSdkHelper);\r\n    initialize(options?: PaymentInitializeOptions & WithBigCommercePaymentsPayLaterPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    /**\r\n     *\r\n     * Button methods/callbacks\r\n     *\r\n     * */\r\n    private renderButton;\r\n    private handleClick;\r\n    private handleApprove;\r\n    private handleError;\r\n    /**\r\n     *\r\n     * Loading Indicator methods\r\n     *\r\n     * */\r\n    private toggleLoadingIndicator;\r\n    /**\r\n     *\r\n     * Render Pay Later Messages\r\n     *\r\n     * */\r\n    private renderMessages;\r\n}\r\n\r\n/**\r\n *\r\n * BigCommerce Payments Payment fields\r\n *\r\n */\r\ndeclare interface BigCommercePaymentsPaymentFields {\r\n    render(id: string): void;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsPaymentFieldsOptions {\r\n    style?: BigCommercePaymentsFieldsStyleOptions;\r\n    fundingSource: string;\r\n    fields: {\r\n        name?: {\r\n            value?: string;\r\n        };\r\n        email?: {\r\n            value?: string;\r\n        };\r\n    };\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments payment\r\n * method for presenting its PayPal button.\r\n *\r\n * Please note that the minimum version of checkout-sdk is 1.100\r\n *\r\n * Also, BigCommercePayments requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the BigCommercePayments PayPal button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bigcommerce_payments',\r\n *     bigcommerce_payments: {\r\n *         container: '#container',\r\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'bigcommerce_payments', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container?: string;\r\n    /**\r\n     * The location to insert the Pay Later Messages.\r\n     */\r\n    bannerContainerId?: string;\r\n    /**\r\n     * If there is no need to initialize the Smart Payment Button, simply pass false as the option value.\r\n     * The default value is true\r\n     */\r\n    shouldRenderPayPalButtonOnInitialization?: boolean;\r\n    /**\r\n     * A callback for getting form fields values.\r\n     */\r\n    getFieldsValues?(): HostedInstrument;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: unknown): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when strategy is in the process of initialization before rendering Smart Payment Button.\r\n     *\r\n     * @param callback - A function, that calls the method to render the Smart Payment Button.\r\n     */\r\n    onInit?(callback: () => void): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate?(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approves PayPal payment.\r\n     */\r\n    submitForm?(): void;\r\n}\r\n\r\ndeclare class BigCommercePaymentsPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    private paypalSdkHelper;\r\n    private loadingIndicator;\r\n    private loadingIndicatorContainer?;\r\n    private orderId?;\r\n    private paypalButton?;\r\n    private bigcommerce_payments?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService, paypalSdkHelper: PayPalSdkHelper, loadingIndicator: LoadingIndicator);\r\n    initialize(options?: PaymentInitializeOptions & WithBigCommercePaymentsPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private prepareVaultedInstrumentPaymentPayload;\r\n    private preparePaymentPayload;\r\n    /**\r\n     *\r\n     * Button methods/callbacks\r\n     *\r\n     * */\r\n    private renderButton;\r\n    private handleClick;\r\n    private handleApprove;\r\n    private handleError;\r\n    private createOrder;\r\n    /**\r\n     *\r\n     * Vaulting flow methods\r\n     *\r\n     * */\r\n    private getFieldsValues;\r\n    private isTrustedVaultingFlow;\r\n    /**\r\n     *\r\n     * Loading Indicator methods\r\n     *\r\n     * */\r\n    private toggleLoadingIndicator;\r\n    /**\r\n     *\r\n     * Guards\r\n     *\r\n     */\r\n    private isPayPalVaultedInstrumentPaymentData;\r\n    /**\r\n     *\r\n     * Render Pay Later Messages\r\n     *\r\n     * */\r\n    private renderMessages;\r\n    private isProviderError;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsRatePayPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * The CSS selector of a container where the legal text should be inserted into.\r\n     */\r\n    legalTextContainer: string;\r\n    /**\r\n     * The CSS selector of a container where loading indicator should be rendered\r\n     */\r\n    loadingContainerId: string;\r\n    /**\r\n     * A callback that gets form values\r\n     */\r\n    getFieldsValues?(): {\r\n        ratepayBirthDate: BirthDate;\r\n        ratepayPhoneNumber: string;\r\n        ratepayPhoneCountryCode: string;\r\n    };\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: unknown): void;\r\n}\r\n\r\ndeclare class BigCommercePaymentsRatePayPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    private loadingIndicator;\r\n    private pollingInterval;\r\n    private maxPollingIntervalTime;\r\n    private guid?;\r\n    private bigcommerce_payments_ratepay?;\r\n    private loadingIndicatorContainer?;\r\n    private pollingTimer;\r\n    private stopPolling;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService, loadingIndicator: LoadingIndicator, pollingInterval?: number, maxPollingIntervalTime?: number);\r\n    initialize(options: PaymentInitializeOptions & WithBigCommercePaymentsRatePayPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private normalizeDate;\r\n    private formatDate;\r\n    private renderLegalText;\r\n    private handleError;\r\n    private createFraudNetScript;\r\n    private generateGUID;\r\n    private loadFraudnetConfig;\r\n    private reinitializeStrategy;\r\n    /**\r\n     *\r\n     * Polling mechanism\r\n     *\r\n     *\r\n     * */\r\n    private initializePollingMechanism;\r\n    private deinitializePollingMechanism;\r\n    private resetPollingMechanism;\r\n    /**\r\n     *\r\n     * Loading Indicator methods\r\n     *\r\n     * */\r\n    private toggleLoadingIndicator;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments payment\r\n * method making payment with Klarna.\r\n *\r\n *\r\n * Also, BCP (also known as BigCommercePayments) requires specific options to initialize the PayPal Klarna flow\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     gatewayId: 'bigcommerce_payments_apms',\r\n *     methodId: 'klarna',\r\n *     bigcommerce_payments_apms: {\r\n * // Callback for handling error that occurs when a buyer approves payment\r\n *         onError: (error) => {\r\n *         // Example function\r\n *             this.handleError(\r\n *                {\r\n *                   payment: { methodId: 'bigcommerce_payments_apms', }\r\n *               }\r\n *            );\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions {\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error | unknown): void;\r\n}\r\n\r\ndeclare class BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    private bigCommercePaymentsAlternativeMethods?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService);\r\n    initialize(options: PaymentInitializeOptions & WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private handleError;\r\n}\r\n\r\ndeclare class BigCommercePaymentsRequestSender {\r\n    private requestSender;\r\n    constructor(requestSender: RequestSender);\r\n    createOrder(providerId: string, requestBody: Partial<PayPalCreateOrderRequestBody>): Promise<PayPalOrderData>;\r\n    updateOrder(requestBody: PayPalUpdateOrderRequestBody): Promise<PayPalUpdateOrderResponse>;\r\n    getOrderStatus(methodId?: string, options?: RequestOptions): Promise<PayPalOrderStatusData>;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsSDKFunding {\r\n    CARD: string;\r\n    PAYPAL: string;\r\n    CREDIT: string;\r\n    PAYLATER: string;\r\n    OXXO: string;\r\n    SEPA: string;\r\n    VENMO: string;\r\n}\r\n\r\ndeclare class BigCommercePaymentsScriptLoader {\r\n    private scriptLoader;\r\n    private window;\r\n    constructor(scriptLoader: ScriptLoader);\r\n    getPayPalSDK(paymentMethod: PaymentMethod<BigCommercePaymentsInitializationData>, currencyCode: string, initializesOnCheckoutPage?: boolean, forceLoad?: boolean): Promise<PayPalSDK>;\r\n    private loadPayPalSDK;\r\n    private getPayPalSdkScriptConfigOrThrow;\r\n    private filterFundingOptions;\r\n    private transformConfig;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsVenmoButtonInitializeOptions {\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare class BigCommercePaymentsVenmoButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithBigCommercePaymentsVenmoButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private renderButton;\r\n    private getValidVenmoButtonStyles;\r\n    private handleClick;\r\n}\r\n\r\ndeclare interface BigCommercePaymentsVenmoCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when Venmo button clicked.\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\ndeclare class BigCommercePaymentsVenmoCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService);\r\n    initialize(options: CustomerInitializeOptions & WithBigCommercePaymentsVenmoCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    private renderButton;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BigCommercePayments Venmo payment\r\n * method for presenting its Venmo button.\r\n *\r\n *\r\n * Also, BigCommercePayments requires specific options to initialize the Venmo Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the Venmo button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bigcommerce_payments_venmo',\r\n *     bigcommerce_payments_venmo: {\r\n *         container: '#container',\r\n * // Callback for submitting payment form that gets called when a buyer approves payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'bigcommerce_payments_venmo', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BigCommercePaymentsVenmoPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm(): void;\r\n}\r\n\r\ndeclare class BigCommercePaymentsVenmoPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private bigCommercePaymentsIntegrationService;\r\n    private loadingIndicator;\r\n    private loadingIndicatorContainer?;\r\n    private orderId?;\r\n    private paypalButton?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService, loadingIndicator: LoadingIndicator);\r\n    initialize(options?: PaymentInitializeOptions & WithBigCommercePaymentsVenmoPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    /**\r\n     *\r\n     * Button methods/callbacks\r\n     *\r\n     * */\r\n    private renderButton;\r\n    private handleClick;\r\n    private handleApprove;\r\n    private handleError;\r\n    /**\r\n     *\r\n     * Loading Indicator methods\r\n     *\r\n     * */\r\n    private toggleLoadingIndicator;\r\n}\r\n\r\ndeclare interface BirthDate {\r\n    getFullYear(): number;\r\n    getDate(): number;\r\n    getMonth(): number;\r\n}\r\n\r\ndeclare interface ClickCallbackActions {\r\n    reject(): void;\r\n    resolve(): void;\r\n}\r\n\r\ndeclare interface ClickCallbackPayload {\r\n    fundingSource: string;\r\n}\r\n\r\ndeclare interface CompleteCallbackDataPayload {\r\n    intent: string;\r\n    orderID: string;\r\n}\r\n\r\ndeclare interface ConfirmOrderData {\r\n    tokenizationData: {\r\n        type: string;\r\n        token: string;\r\n    };\r\n    info: {\r\n        cardNetwork: string;\r\n        cardDetails: string;\r\n    };\r\n    type: string;\r\n}\r\n\r\n/**\r\n *\r\n * BigCommerce Payments Funding sources\r\n *\r\n */\r\ndeclare type FundingType = string;\r\n\r\ndeclare interface GooglePayConfig {\r\n    allowedPaymentMethods: AllowedPaymentMethods[];\r\n    apiVersion: number;\r\n    apiVersionMinor: number;\r\n    countryCode: string;\r\n    isEligible: boolean;\r\n    merchantInfo: {\r\n        merchantId: string;\r\n        merchantOrigin: string;\r\n    };\r\n}\r\n\r\ndeclare interface InitCallbackActions {\r\n    disable(): void;\r\n    enable(): void;\r\n}\r\n\r\ndeclare interface InitCallbackPayload {\r\n    correlationID: string;\r\n}\r\n\r\ndeclare interface LegalFunding {\r\n    FUNDING: {\r\n        PAY_UPON_INVOICE: string;\r\n    };\r\n}\r\n\r\ndeclare enum LiabilityShiftEnum {\r\n    Possible = \"POSSIBLE\",\r\n    No = \"NO\",\r\n    Unknown = \"UNKNOWN\",\r\n    Yes = \"YES\"\r\n}\r\n\r\ndeclare interface PayPalAddress {\r\n    city: string;\r\n    countryCode: string;\r\n    postalCode: string;\r\n    state: string;\r\n}\r\n\r\ndeclare interface PayPalButtonStyleOptions {\r\n    color?: StyleButtonColor;\r\n    shape?: StyleButtonShape;\r\n    height?: number;\r\n    label?: StyleButtonLabel;\r\n}\r\n\r\n/**\r\n *\r\n * BigCommerce Payments BuyNow\r\n *\r\n */\r\ndeclare interface PayPalBuyNowInitializeOptions {\r\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\r\n}\r\n\r\ndeclare interface PayPalCreateOrderCardFieldsResponse {\r\n    orderId: string;\r\n    setupToken?: string;\r\n}\r\n\r\ndeclare interface PayPalCreateOrderRequestBody extends HostedInstrument, VaultedInstrument {\r\n    cartId: string;\r\n    metadataId?: string;\r\n    setupToken?: boolean;\r\n    fastlaneToken?: string;\r\n    methodId?: string;\r\n    gatewayId?: string;\r\n}\r\n\r\ndeclare type PayPalLegal = (params: {\r\n    fundingSource: string;\r\n}) => {\r\n    render(container: string): void;\r\n};\r\n\r\ndeclare interface PayPalOrderAddress {\r\n    address_line_1: string;\r\n    address_line_2: string;\r\n    admin_area_2: string;\r\n    admin_area_1?: string;\r\n    postal_code: string;\r\n    country_code: string;\r\n}\r\n\r\ndeclare interface PayPalOrderData {\r\n    orderId: string;\r\n    setupToken?: string;\r\n    approveUrl: string;\r\n}\r\n\r\ndeclare interface PayPalOrderDetails {\r\n    payer: {\r\n        name: {\r\n            given_name: string;\r\n            surname: string;\r\n        };\r\n        email_address: string;\r\n        address: PayPalOrderAddress;\r\n        phone?: {\r\n            phone_number: {\r\n                national_number: string;\r\n            };\r\n        };\r\n    };\r\n    purchase_units: Array<{\r\n        shipping: {\r\n            address: PayPalOrderAddress;\r\n            name: {\r\n                full_name: string;\r\n            };\r\n        };\r\n    }>;\r\n}\r\n\r\ndeclare enum PayPalOrderStatus {\r\n    Approved = \"APPROVED\",\r\n    Created = \"CREATED\",\r\n    PayerActionRequired = \"PAYER_ACTION_REQUIRED\",\r\n    PollingStop = \"POLLING_STOP\",\r\n    PollingError = \"POLLING_ERROR\"\r\n}\r\n\r\ndeclare interface PayPalOrderStatusData {\r\n    status: PayPalOrderStatus;\r\n}\r\n\r\ndeclare interface PayPalSDK {\r\n    CardFields: (data: BigCommercePaymentsCardFieldsConfig) => Promise<BigCommercePaymentsCardFields>;\r\n    Googlepay: () => {\r\n        config: () => Promise<GooglePayConfig>;\r\n        confirmOrder: (arg0: {\r\n            orderId: string;\r\n            paymentMethodData: ConfirmOrderData;\r\n        }) => Promise<{\r\n            status: string;\r\n        }>;\r\n        initiatePayerAction: () => void;\r\n    };\r\n    FUNDING: BigCommercePaymentsSDKFunding;\r\n    HostedFields: {\r\n        isEligible(): boolean;\r\n        render(data: BigCommercePaymentsHostedFieldsRenderOptions): Promise<BigCommercePaymentsHostedFields>;\r\n    };\r\n    Legal: PayPalLegal & LegalFunding;\r\n    Buttons(options: BigCommercePaymentsButtonsOptions): BigCommercePaymentsButtons;\r\n    PaymentFields(options: BigCommercePaymentsPaymentFieldsOptions): BigCommercePaymentsPaymentFields;\r\n    Messages(options: BigCommercePaymentsMessagesOptions): BigCommercePaymentsMessages;\r\n}\r\n\r\ndeclare interface PayPalSelectedShippingOption {\r\n    amount: {\r\n        currency_code: string;\r\n        value: string;\r\n    };\r\n    id: string;\r\n    label: string;\r\n    selected: boolean;\r\n    type: string;\r\n}\r\n\r\ndeclare interface PayPalUpdateOrderRequestBody {\r\n    availableShippingOptions?: ShippingOption[];\r\n    cartId: string;\r\n    selectedShippingOption?: ShippingOption | null;\r\n}\r\n\r\ndeclare interface PayPalUpdateOrderResponse {\r\n    statusCode: number;\r\n}\r\n\r\ndeclare interface ShippingAddressChangeCallbackPayload {\r\n    orderId: string;\r\n    shippingAddress: PayPalAddress;\r\n}\r\n\r\ndeclare interface ShippingOptionChangeCallbackPayload {\r\n    orderId: string;\r\n    selectedShippingOption: PayPalSelectedShippingOption;\r\n}\r\n\r\ndeclare enum StyleButtonColor {\r\n    gold = \"gold\",\r\n    blue = \"blue\",\r\n    silver = \"silver\",\r\n    black = \"black\",\r\n    white = \"white\"\r\n}\r\n\r\ndeclare enum StyleButtonLabel {\r\n    paypal = \"paypal\",\r\n    checkout = \"checkout\",\r\n    buynow = \"buynow\",\r\n    pay = \"pay\",\r\n    installment = \"installment\"\r\n}\r\n\r\ndeclare enum StyleButtonShape {\r\n    pill = \"pill\",\r\n    rect = \"rect\"\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions {\r\n    bigcommerce_payments_apms?: BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsButtonInitializeOptions {\r\n    bigcommerce_payments?: BigCommercePaymentsButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsCreditCardsPaymentInitializeOptions {\r\n    bigcommerce_payments_creditcards?: BigCommercePaymentsCreditCardsPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsCustomerInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using BigCommercePayments.\r\n     */\r\n    bigcommerce_payments?: BigCommercePaymentsCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsFastlaneCustomerInitializeOptions {\r\n    bigcommerce_payments_fastlane?: BigCommercePaymentsFastlaneCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsFastlanePaymentInitializeOptions {\r\n    bigcommerce_payments_fastlane?: BigCommercePaymentsFastlanePaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsPayLaterButtonInitializeOptions {\r\n    bigcommerce_payments_paylater?: BigCommercePaymentsPayLaterButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsPayLaterCustomerInitializeOptions {\r\n    bigcommerce_payments_paylater?: BigCommercePaymentsPayLaterCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsPayLaterPaymentInitializeOptions {\r\n    bigcommerce_payments_paylater?: BigCommercePaymentsPayLaterPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsPaymentInitializeOptions {\r\n    bigcommerce_payments?: BigCommercePaymentsPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsRatePayPaymentInitializeOptions {\r\n    bigcommerce_payments_ratepay?: BigCommercePaymentsRatePayPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions {\r\n    bigcommerce_payments_apms?: BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsVenmoButtonInitializeOptions {\r\n    bigcommerce_payments_venmo?: BigCommercePaymentsVenmoButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsVenmoCustomerInitializeOptions {\r\n    bigcommerce_payments_venmo?: BigCommercePaymentsVenmoCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBigCommercePaymentsVenmoPaymentInitializeOptions {\r\n    bigcommerce_payments_venmo?: BigCommercePaymentsVenmoPaymentInitializeOptions;\r\n}\r\n\r\nexport declare const createBigCommercePaymentsAlternativeMethodsPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BigCommercePaymentsAlternativeMethodsPaymentStrategy>, {\r\n    gateway: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<BigCommercePaymentsButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsCreditCardsPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BigCommercePaymentsCreditCardsPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<BigCommercePaymentsCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsFastlaneCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<BigCommercePaymentsFastlaneCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsFastlanePaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BigCommercePaymentsFastlanePaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsPayLaterButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<BigCommercePaymentsPayLaterButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsPayLaterCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<BigCommercePaymentsPayLaterCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsPayLaterPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BigCommercePaymentsPayLaterPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BigCommercePaymentsPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsRatePayPayPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BigCommercePaymentsRatePayPaymentStrategy>, {\r\n    gateway: string;\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy>, {\r\n    gateway: string;\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsVenmoButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<BigCommercePaymentsVenmoButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsVenmoCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<BigCommercePaymentsVenmoCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBigCommercePaymentsVenmoPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BigCommercePaymentsVenmoPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/bluesnap-direct.d.ts",
    "content": "import { CreditCardPaymentInitializeOptions } from '@bigcommerce/checkout-sdk/credit-card-integration';\r\nimport { HostedFieldOptionsMap } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { HostedInputValidateResults } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\nimport { WithCreditCardPaymentInitializeOptions } from '@bigcommerce/checkout-sdk/credit-card-integration';\r\n\r\ndeclare class BlueSnapDirect3ds {\r\n    private _blueSnapSdk?;\r\n    initialize(blueSnapSdk: BlueSnapDirectSdk): void;\r\n    initialize3ds(token: string, cardData: BlueSnapDirectPreviouslyUsedCard): Promise<string>;\r\n    private _getBlueSnapSdk;\r\n}\r\n\r\ndeclare interface BlueSnapDirect3dsCallbackResponse {\r\n    code: string;\r\n    cardData: BlueSnapDirectCallbackCardData;\r\n    threeDSecure: {\r\n        authResult: string;\r\n        threeDSecureReferenceId: string;\r\n    };\r\n}\r\n\r\ndeclare class BlueSnapDirectAPMPaymentStrategy implements PaymentStrategy {\r\n    private _paymentIntegrationService;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService);\r\n    execute(payload: OrderRequestBody): Promise<void>;\r\n    initialize(): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _formatePaymentPayload;\r\n    private _isBlueSnapDirectRedirectResponse;\r\n}\r\n\r\ndeclare interface BlueSnapDirectCallback {\r\n    statusCode: string;\r\n    transactionFraudInfo: {\r\n        fraudSessionId: string;\r\n    };\r\n}\r\n\r\ndeclare interface BlueSnapDirectCallbackCardData extends BlueSnapDirectCardData {\r\n    cardCategory: string;\r\n    exp: string;\r\n}\r\n\r\ndeclare interface BlueSnapDirectCallbackData extends BlueSnapDirectCallback {\r\n    cardData: BlueSnapDirectCallbackCardData;\r\n}\r\n\r\ndeclare interface BlueSnapDirectCallbackError extends BlueSnapDirectCallback {\r\n    error: BlueSnapDirectSubmitError[];\r\n}\r\n\r\ndeclare type BlueSnapDirectCallbackResults = BlueSnapDirectCallbackData | BlueSnapDirectCallbackError;\r\n\r\ndeclare interface BlueSnapDirectCardData {\r\n    binCategory: string;\r\n    cardSubType: string;\r\n    ccBin: string;\r\n    ccType: string;\r\n    isRegulatedCard: string;\r\n    issuingCountry: string;\r\n    last4Digits: string;\r\n}\r\n\r\ndeclare type BlueSnapDirectCardTypeValues = keyof typeof BlueSnapDirectCardType;\r\n\r\ndeclare class BlueSnapDirectCreditCardPaymentStrategy implements PaymentStrategy {\r\n    private _scriptLoader;\r\n    private _paymentIntegrationService;\r\n    private _blueSnapDirectHostedForm;\r\n    private _blueSnapDirect3ds;\r\n    private _paymentFieldsToken?;\r\n    private _shouldUseHostedFields?;\r\n    private _blueSnapSdk?;\r\n    constructor(_scriptLoader: BlueSnapDirectScriptLoader, _paymentIntegrationService: PaymentIntegrationService, _blueSnapDirectHostedForm: BlueSnapDirectHostedForm, _blueSnapDirect3ds: BlueSnapDirect3ds);\r\n    initialize(options: PaymentInitializeOptions & WithCreditCardPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _getBlueSnapDirectThreeDSecureData;\r\n    private _getPaymentFieldsToken;\r\n}\r\n\r\ndeclare enum BlueSnapDirectErrorCode {\r\n    CC_NOT_SUPORTED = \"22013\",\r\n    ERROR_403 = \"403\",\r\n    ERROR_404 = \"404\",\r\n    ERROR_500 = \"500\",\r\n    INVALID_OR_EMPTY = \"10\",\r\n    SESSION_EXPIRED = \"400\",\r\n    THREE_DS_AUTH_FAILED = \"14101\",\r\n    THREE_DS_CLIENT_ERROR = \"14103\",\r\n    THREE_DS_MISSING_FIELDS = \"14102\",\r\n    THREE_DS_NOT_ENABLED = \"14100\",\r\n    TOKEN_EXPIRED = \"14040\",\r\n    TOKEN_NOT_ASSOCIATED = \"14042\",\r\n    TOKEN_NOT_FOUND = \"14041\"\r\n}\r\n\r\ndeclare enum BlueSnapDirectErrorDescription {\r\n    EMPTY = \"empty\",\r\n    INVALID = \"invalid\",\r\n    THREE_DS_NOT_ENABLED = \"3D Secure is not enabled\"\r\n}\r\n\r\ndeclare enum BlueSnapDirectEventOrigin {\r\n    ON_BLUR = \"onBlur\",\r\n    ON_SUBMIT = \"onSubmit\"\r\n}\r\n\r\ndeclare interface BlueSnapDirectHostWindow extends Window {\r\n    bluesnap?: BlueSnapDirectSdk;\r\n}\r\n\r\ndeclare enum BlueSnapDirectHostedFieldTagId {\r\n    CardCode = \"cvv\",\r\n    CardExpiry = \"exp\",\r\n    CardName = \"noc\",\r\n    CardNumber = \"ccn\"\r\n}\r\n\r\ndeclare class BlueSnapDirectHostedForm {\r\n    private _nameOnCardInput;\r\n    private _hostedInputValidator;\r\n    private _blueSnapSdk?;\r\n    private _onValidate;\r\n    constructor(_nameOnCardInput: BluesnapDirectNameOnCardInput, _hostedInputValidator: BlueSnapHostedInputValidator);\r\n    initialize(blueSnapSdk: BlueSnapDirectSdk, fields?: HostedFieldOptionsMap): void;\r\n    attach(paymentFieldsToken: string, { form: { fields, ...callbacksAndStyles } }: CreditCardPaymentInitializeOptions, enable3DS?: boolean): Promise<void>;\r\n    validate(): this;\r\n    submit(threeDSecureData?: BlueSnapDirectThreeDSecureData, shouldSendName?: boolean): Promise<BlueSnapDirectCallbackCardData & WithBlueSnapDirectCardHolderName>;\r\n    detach(): void;\r\n    private _isBlueSnapDirectCallbackError;\r\n    private _getHostedPaymentFieldsOptions;\r\n    private _mapStyles;\r\n    private _handleError;\r\n    private _usetUiEventCallback;\r\n    private _getBlueSnapSdk;\r\n    private _setCustomBlueSnapAttributes;\r\n    private _setCustomStoredCardsBlueSnapAttributes;\r\n}\r\n\r\ndeclare interface BlueSnapDirectHostedPaymentFieldsOptions {\r\n    token: string;\r\n    onFieldEventHandler?: {\r\n        setupComplete?: () => void;\r\n        threeDsChallengeExecuted?: () => void;\r\n        onFocus?: (tagId: BlueSnapDirectHostedFieldTagId) => void;\r\n        onBlur?: (tagId: BlueSnapDirectHostedFieldTagId) => void;\r\n        onError?: (tagId: BlueSnapDirectHostedFieldTagId | undefined, errorCode: BlueSnapDirectErrorCode, errorDescription: BlueSnapDirectErrorDescription | undefined, eventOrigin: BlueSnapDirectEventOrigin | undefined) => void;\r\n        onType?: (tagId: BlueSnapDirectHostedFieldTagId, cardType: BlueSnapDirectCardTypeValues, cardData: BlueSnapDirectCardData | undefined) => void;\r\n        onEnter?: (tagId: BlueSnapDirectHostedFieldTagId) => void;\r\n        onValid?: (tagId: BlueSnapDirectHostedFieldTagId) => void;\r\n    };\r\n    ccnPlaceHolder?: string;\r\n    cvvPlaceHolder?: string;\r\n    expPlaceHolder?: string;\r\n    style?: BlueSnapDirectStyle;\r\n    '3DS'?: boolean;\r\n}\r\n\r\ndeclare type BlueSnapDirectInputValidationErrorDescription = Extract<BlueSnapDirectErrorDescription, BlueSnapDirectErrorDescription.EMPTY | BlueSnapDirectErrorDescription.INVALID>;\r\n\r\ndeclare interface BlueSnapDirectPreviouslyUsedCard {\r\n    last4Digits?: string;\r\n    ccType?: string;\r\n    amount: number;\r\n    currency: string;\r\n    billingFirstName?: string;\r\n    billingLastName?: string;\r\n    billingCountry?: string;\r\n    billingState?: string;\r\n    billingCity?: string;\r\n    billingAddress?: string;\r\n    billingZip?: string;\r\n    shippingFirstName?: string;\r\n    shippingLastName?: string;\r\n    shippingCountry?: string;\r\n    shippingState?: string;\r\n    shippingCity?: string;\r\n    shippingAddress?: string;\r\n    shippingZip?: string;\r\n    email?: string;\r\n    phone?: string;\r\n}\r\n\r\ndeclare class BlueSnapDirectScriptLoader {\r\n    private _scriptLoader;\r\n    private _window;\r\n    constructor(_scriptLoader: ScriptLoader, _window?: BlueSnapDirectHostWindow);\r\n    load(testMode?: boolean): Promise<BlueSnapDirectSdk>;\r\n}\r\n\r\ndeclare interface BlueSnapDirectSdk {\r\n    hostedPaymentFieldsCreate(options: BlueSnapDirectHostedPaymentFieldsOptions): void;\r\n    hostedPaymentFieldsSubmitData(callback: (results: BlueSnapDirectCallbackResults) => void, threeDSecureData?: BlueSnapDirectThreeDSecureData): void;\r\n    threeDsPaymentsSetup(token: string, callback: (reponse: BlueSnapDirect3dsCallbackResponse) => void): void;\r\n    threeDsPaymentsSubmitData(cardData: BlueSnapDirectPreviouslyUsedCard): void;\r\n}\r\n\r\ndeclare interface BlueSnapDirectStyle {\r\n    '.invalid'?: BlueSnapDirectStyleDeclaration;\r\n    ':focus'?: BlueSnapDirectStyleDeclaration;\r\n    input?: BlueSnapDirectStyleDeclaration;\r\n}\r\n\r\ndeclare interface BlueSnapDirectStyleDeclaration {\r\n    [k: string]: string;\r\n}\r\n\r\ndeclare interface BlueSnapDirectSubmitError {\r\n    errorCode: string;\r\n    errorDescription: string;\r\n    eventType: string;\r\n    tagId: string;\r\n}\r\n\r\ndeclare interface BlueSnapDirectThreeDSecureData {\r\n    amount: number;\r\n    currency: string;\r\n    billingFirstName?: string;\r\n    billingLastName?: string;\r\n    billingCountry?: string;\r\n    billingState?: string;\r\n    billingCity?: string;\r\n    billingAddress?: string;\r\n    billingZip?: string;\r\n    shippingFirstName?: string;\r\n    shippingLastName?: string;\r\n    shippingCountry?: string;\r\n    shippingState?: string;\r\n    shippingCity?: string;\r\n    shippingAddress?: string;\r\n    shippingZip?: string;\r\n    email?: string;\r\n    phone?: string;\r\n}\r\n\r\ndeclare class BlueSnapHostedInputValidator {\r\n    private _errors;\r\n    initialize(): void;\r\n    initializeValidationFields(): void;\r\n    validate(error?: {\r\n        tagId: BlueSnapDirectHostedFieldTagId;\r\n        errorDescription?: BlueSnapDirectInputValidationErrorDescription;\r\n    }): HostedInputValidateResults;\r\n    private _updateErrors;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the BlueSnap V2 payment\r\n * method.\r\n *\r\n * The payment step is done through a web page via an iframe provided by the\r\n * strategy.\r\n *\r\n * ```html\r\n * <!-- This is where the BlueSnap iframe will be inserted. It can be an in-page container or a modal -->\r\n * <div id=\"container\"></div>\r\n *\r\n * <!-- This is a cancellation button -->\r\n * <button type=\"button\" id=\"cancel-button\"></button>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bluesnapv2',\r\n *     bluesnapv2: {\r\n *         onLoad: (iframe) => {\r\n *             document.getElementById('container')\r\n *                 .appendChild(iframe);\r\n *\r\n *             document.getElementById('cancel-button')\r\n *                 .addEventListener('click', () => {\r\n *                     document.getElementById('container').innerHTML = '';\r\n *                 });\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BlueSnapV2PaymentInitializeOptions {\r\n    /**\r\n     * A set of CSS properties to apply to the iframe.\r\n     */\r\n    style?: BlueSnapV2StyleProps;\r\n    /**\r\n     * A callback that gets called when the iframe is ready to be added to the\r\n     * current page. It is responsible for determining where the iframe should\r\n     * be inserted in the DOM.\r\n     *\r\n     * @param iframe - The iframe element containing the payment web page\r\n     * provided by the strategy.\r\n     * @param cancel - A function, when called, will cancel the payment\r\n     * process and remove the iframe.\r\n     */\r\n    onLoad(iframe: HTMLIFrameElement, cancel: () => void): void;\r\n}\r\n\r\ndeclare class BlueSnapV2PaymentStrategy implements PaymentStrategy {\r\n    private _paymentIntegrationService;\r\n    private _initializeOptions?;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService);\r\n    execute(orderRequest: OrderRequestBody, options?: PaymentInitializeOptions & WithBlueSnapV2PaymentInitializeOptions): Promise<void>;\r\n    finalize(options?: PaymentRequestOptions): Promise<void>;\r\n    initialize(options?: PaymentInitializeOptions & WithBlueSnapV2PaymentInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _createIframe;\r\n}\r\n\r\ndeclare interface BlueSnapV2StyleProps {\r\n    border?: string;\r\n    height?: string;\r\n    width?: string;\r\n}\r\n\r\ndeclare class BluesnapDirectNameOnCardInput {\r\n    private _input?;\r\n    private _style?;\r\n    attach({ style, onFieldEventHandler: { onFocus, onBlur, onValid, onError, onEnter }, }: BlueSnapDirectHostedPaymentFieldsOptions, accessibilityLabel?: string, placeholder?: string): void;\r\n    getValue(): string;\r\n    detach(): void;\r\n    private _handleFocus;\r\n    private _handleBlur;\r\n    private _handleEnter;\r\n    private _applyStyles;\r\n    private _configureInput;\r\n    private _getInput;\r\n    private _create;\r\n}\r\n\r\ndeclare interface WithBlueSnapDirectCardHolderName {\r\n    cardHolderName?: string;\r\n}\r\n\r\ndeclare interface WithBlueSnapV2PaymentInitializeOptions {\r\n    bluesnapv2?: BlueSnapV2PaymentInitializeOptions;\r\n}\r\n\r\nexport declare const createBlueSnapDirectAPMPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BlueSnapDirectAPMPaymentStrategy>, {\r\n    gateway: string;\r\n}>;\r\n\r\nexport declare const createBlueSnapDirectCreditCardPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BlueSnapDirectCreditCardPaymentStrategy>, {\r\n    id: string;\r\n    gateway: string;\r\n}>;\r\n\r\nexport declare const createBlueSnapV2PaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BlueSnapV2PaymentStrategy>, {\r\n    gateway: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/bolt.d.ts",
    "content": "import { AnalyticsExtraItemsManager } from '@bigcommerce/checkout-sdk/analytics';\r\nimport { BuyNowCartRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerCredentials } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ExecutePaymentMethodCheckoutOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { RequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\n\r\ndeclare interface BoltAuthorization {\r\n    status: string;\r\n    reason: string;\r\n}\r\n\r\ndeclare interface BoltButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: BoltBuyNowInitializeOptions;\r\n    style?: BoltButtonStyleOptions;\r\n}\r\n\r\ndeclare class BoltButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private boltScriptLoader;\r\n    boltHostWindow: BoltHostWindow;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, boltScriptLoader: BoltScriptLoader, boltHostWindow?: BoltHostWindow);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithBoltButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private renderButton;\r\n    private addButtonContainer;\r\n    private getBoltObjectData;\r\n    private getButtonHeight;\r\n    private getButtonBorderRadius;\r\n}\r\n\r\ndeclare interface BoltButtonStyleOptions {\r\n    shape?: StyleButtonShape;\r\n    size?: StyleButtonSize;\r\n}\r\n\r\ndeclare interface BoltBuyNowInitializeOptions {\r\n    storefrontApiToken?: string;\r\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\r\n}\r\n\r\ndeclare interface BoltCallbacks {\r\n    check?(): boolean;\r\n    onCheckoutStart?(): void;\r\n    onPaymentSubmit?(): void;\r\n    success(transaction: BoltTransaction, callback: () => void): void;\r\n    close?(): void;\r\n}\r\n\r\ndeclare interface BoltCart {\r\n    orderToken: string;\r\n}\r\n\r\ndeclare interface BoltCheckout {\r\n    configure(cart: BoltCart, hints: Record<string, never>, callbacks?: BoltCallbacks): BoltClient;\r\n    hasBoltAccount(email: string): Promise<boolean>;\r\n    getTransactionReference(): Promise<string | undefined>;\r\n    openCheckout(email: string, callbacks?: BoltOpenCheckoutCallbacks): Promise<void>;\r\n    setClientCustomCallbacks(callbacks: BoltCallbacks): void;\r\n    setOrderId(orderId: number): Promise<void>;\r\n}\r\n\r\ndeclare interface BoltClient {\r\n    open(): void;\r\n}\r\n\r\ndeclare interface BoltConnect {\r\n    setupProductPageCheckout?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the customer step of\r\n * checkout to support Bolt.\r\n */\r\ndeclare interface BoltCustomerInitializeOptions {\r\n    /**\r\n     * A callback that gets called on initialize the strategy\r\n     *\r\n     * @param hasBoltAccount - The hasBoltAccount variable handle the result of checking user account availability on Bolt.\r\n     * @param email - Email address which was used for checking user account availability on Bolt.\r\n     */\r\n    onInit?(hasBoltAccount: boolean, email?: string): void;\r\n}\r\n\r\ndeclare class BoltCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private boltScriptLoader;\r\n    private boltHostWindow;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, boltScriptLoader: BoltScriptLoader);\r\n    initialize(options: CustomerInitializeOptions & WithBoltCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    private openBoltCheckoutModalOrThrow;\r\n    private getBoltClientOrThrow;\r\n    private hasBoltAccount;\r\n    private getCustomerEmail;\r\n}\r\n\r\ndeclare enum BoltDeveloperMode {\r\n    SandboxMode = \"bolt_sandbox\",\r\n    StagingMode = \"bolt_staging\",\r\n    DevelopmentMode = \"bolt_development\"\r\n}\r\n\r\ndeclare interface BoltDeveloperModeParams {\r\n    developerMode: BoltDeveloperMode;\r\n    developerDomain: string;\r\n}\r\n\r\ndeclare interface BoltEmbedded {\r\n    create(name: string, options?: BoltEmbeddedOptions): BoltEmbededField;\r\n}\r\n\r\ndeclare interface BoltEmbeddedOptions {\r\n    styles: {\r\n        backgroundColor: string;\r\n    };\r\n    renderSeparateFields?: boolean;\r\n}\r\n\r\ndeclare interface BoltEmbeddedTokenize {\r\n    bin: string;\r\n    expiration: string;\r\n    last4: string;\r\n    postal_code?: string;\r\n    token: string;\r\n    token_type: string;\r\n}\r\n\r\ndeclare interface BoltEmbededField {\r\n    mount(element: string): void;\r\n    unmount(): void;\r\n    tokenize(): Promise<BoltEmbeddedTokenize | Error>;\r\n}\r\n\r\ndeclare interface BoltHostWindow extends Window {\r\n    BoltCheckout?: BoltCheckout;\r\n    BoltConnect?: BoltConnect;\r\n    Bolt?(publicKey: string): BoltEmbedded;\r\n}\r\n\r\ndeclare interface BoltOpenCheckoutCallbacks {\r\n    close?(): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Bolt payment method with:\r\n *\r\n * 1) Bolt Full Checkout:\r\n *\r\n * If the customer chooses to pay with Bolt, he will be asked to\r\n * enter his payment details via Bolt Full Checkout.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bolt',\r\n * });\r\n * ```\r\n *\r\n * 2) Bolt Client:\r\n *\r\n * If the customer chooses to pay with Bolt in payment section of Checkout page,\r\n * the Bolt Payment Modal will be shown, and the customer will be asked\r\n * to enter payment details via Bolt Modal\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bolt',\r\n *     bolt: {\r\n *         useBigCommerceCheckout: true,\r\n *     }\r\n * });\r\n * ```\r\n *\r\n * 3) Bolt Embedded:\r\n *\r\n * A set of options that are required to initialize the Bolt payment method\r\n * for presenting its credit card form.\r\n *\r\n * ```html\r\n * <!-- These containers are where the hosted (iframed) credit card field will be inserted -->\r\n * <div id=\"bolt-embedded\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'bolt',\r\n *     bolt: {\r\n *         useBigCommerceCheckout: true,\r\n *         containerId: 'boltEmbeddedContainerId',\r\n *     }\r\n * });\r\n * ```\r\n */\r\ndeclare interface BoltPaymentInitializeOptions {\r\n    useBigCommerceCheckout: boolean;\r\n    /**\r\n     * The CSS selector of a container where the Bolt Embedded payment field should be inserted into.\r\n     */\r\n    containerId?: string;\r\n    /**\r\n     * A callback that gets called when the customer selects Bolt as payment option.\r\n     */\r\n    onPaymentSelect?(hasBoltAccount: boolean): void;\r\n}\r\n\r\ndeclare class BoltPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private boltScriptLoader;\r\n    private analyticsExtraItemsManager;\r\n    private boltClient?;\r\n    private boltEmbedded?;\r\n    private embeddedField?;\r\n    private useBoltClient;\r\n    private useBoltEmbedded;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, boltScriptLoader: BoltScriptLoader, analyticsExtraItemsManager: AnalyticsExtraItemsManager);\r\n    initialize(options: PaymentInitializeOptions & WithBoltPaymentInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    private getBoltClientPaymentPayload;\r\n    private getBoltEmbeddedPaymentPayload;\r\n    private getBoltFullCheckoutPaymentPayload;\r\n    private getBoltClientOrThrow;\r\n    private getBoltEmbeddedOrThrow;\r\n    private hasBoltAccount;\r\n    private setBoltOrderId;\r\n    private mountBoltEmbeddedField;\r\n    private validateTokenizeResultOrThrow;\r\n    private setExtraItemsForAnalytics;\r\n}\r\n\r\ndeclare class BoltScriptLoader {\r\n    private scriptLoader;\r\n    boltHostWindow: BoltHostWindow;\r\n    constructor(scriptLoader: ScriptLoader, boltHostWindow?: BoltHostWindow);\r\n    loadBoltClient(publishableKey?: string, testMode?: boolean, developerModeParams?: BoltDeveloperModeParams, cartId?: string, storefrontApiToken?: string): Promise<BoltCheckout>;\r\n    loadBoltEmbedded(publishableKey: string, testMode?: boolean, developerModeParams?: BoltDeveloperModeParams): Promise<BoltEmbedded>;\r\n    getDomainURL(testMode: boolean, developerModeParams?: BoltDeveloperModeParams): string;\r\n    private getScriptOptions;\r\n}\r\n\r\ndeclare interface BoltTransaction {\r\n    id: string;\r\n    type: string;\r\n    processor: string;\r\n    date: number;\r\n    reference: string;\r\n    status: string;\r\n    authorization: BoltAuthorization;\r\n}\r\n\r\ndeclare enum StyleButtonShape {\r\n    Pill = \"pill\",\r\n    Rect = \"rect\"\r\n}\r\n\r\ndeclare enum StyleButtonSize {\r\n    Small = \"small\",\r\n    Medium = \"medium\",\r\n    Large = \"large\"\r\n}\r\n\r\ndeclare interface WithBoltButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Bolt payment\r\n     * method. They can be omitted unless you need to support Bolt.\r\n     */\r\n    bolt?: BoltButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBoltCustomerInitializeOptions {\r\n    bolt?: BoltCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBoltPaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Bolt payment\r\n     * method. They can be omitted unless you need to support Bolt.\r\n     */\r\n    bolt?: BoltPaymentInitializeOptions;\r\n}\r\n\r\nexport declare const createBoltButtonStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<BoltButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBoltCustomerStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<BoltCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBoltPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BoltPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/braintree.d.ts",
    "content": "import { Address } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { BraintreeClient } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeError } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeFastlane } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeFastlaneStylesOption } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeFastlaneVaultedInstrument } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeFormOptions } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeHostWindow } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeHostedFields } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeHostedFieldsCreatorConfig } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeIntegrationService } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeMessages } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeOrderStatusData } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeSDKVersionManager } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeScriptLoader } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeSdk } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BraintreeThreeDSecureOptions } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { BuyNowCartRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CardInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerCredentials } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ExecutePaymentMethodCheckoutOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { FormPoster } from '@bigcommerce/form-poster';\r\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaypalStyleOptions } from '@bigcommerce/checkout-sdk/braintree-utils';\r\nimport { RequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { RequestSender } from '@bigcommerce/request-sender';\r\nimport { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { TokenizationPayload } from '@bigcommerce/checkout-sdk/braintree-utils';\r\n\r\ndeclare interface BraintreeAchInitializeOptions {\r\n    /**\r\n     * A callback that returns text that should be displayed to the customer in UI for proof of authorization\r\n     */\r\n    getMandateText: () => string;\r\n}\r\n\r\ndeclare class BraintreeAchPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private braintreeSdk;\r\n    private usBankAccount?;\r\n    private getMandateText?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, braintreeSdk: BraintreeSdk);\r\n    initialize(options: PaymentInitializeOptions & WithBraintreeAchPaymentInitializeOptions): Promise<void>;\r\n    execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private tokenizePayment;\r\n    private tokenizePaymentForVaultedInstrument;\r\n    private preparePaymentData;\r\n    private preparePaymentDataForVaultedInstrument;\r\n    private getBankDetails;\r\n    private getUsBankAccountOrThrow;\r\n    private handleBraintreeError;\r\n}\r\n\r\ndeclare interface BraintreeCreditCardPaymentInitializeOptions {\r\n    /**\r\n     * A list of card brands that are not supported by the merchant.\r\n     *\r\n     * List of supported brands by braintree can be found here: https://braintree.github.io/braintree-web/current/module-braintree-web_hosted-fields.html#~field\r\n     * search for `supportedCardBrands` property.\r\n     *\r\n     * List of credit cards brands:\r\n     * 'visa',\r\n     * 'mastercard',\r\n     * 'american-express',\r\n     * 'diners-club',\r\n     * 'discover',\r\n     * 'jcb',\r\n     * 'union-pay',\r\n     * 'maestro',\r\n     * 'elo',\r\n     * 'mir',\r\n     * 'hiper',\r\n     * 'hipercard'\r\n     *\r\n     * */\r\n    unsupportedCardBrands?: string[];\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    containerId?: string;\r\n    threeDSecure?: BraintreeThreeDSecureOptions;\r\n    /**\r\n     * @alpha\r\n     * Please note that this option is currently in an early stage of\r\n     * development. Therefore the API is unstable and not ready for public\r\n     * consumption.\r\n     */\r\n    form?: BraintreeFormOptions;\r\n    /**\r\n     * The location to insert the Pay Later Messages.\r\n     */\r\n    bannerContainerId?: string;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm?(): void;\r\n    /**\r\n     * A callback that gets called if unable to submit payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onPaymentError?(error: BraintreeError | StandardError): void;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: unknown): void;\r\n}\r\n\r\ndeclare class BraintreeCreditCardPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private braintreeIntegrationService;\r\n    private braintreeHostedForm;\r\n    private is3dsEnabled?;\r\n    private isHostedFormInitialized?;\r\n    private deviceSessionId?;\r\n    private paymentMethod?;\r\n    private threeDSecure?;\r\n    private onPaymentError?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, braintreeIntegrationService: BraintreeIntegrationService, braintreeHostedForm: BraintreeHostedForm);\r\n    initialize(options: PaymentInitializeOptions & WithBraintreeCreditCardPaymentInitializeOptions): Promise<void>;\r\n    execute(orderRequest: OrderRequestBody): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private handleError;\r\n    private preparePaymentData;\r\n    private prepareHostedPaymentData;\r\n    private prepareAdditionalActionPaymentData;\r\n    private verifyCardWithHostedForm;\r\n    private processAdditionalAction;\r\n    private isHostedPaymentFormEnabled;\r\n    private isSubmittingWithStoredCard;\r\n    private shouldPerform3DSVerification;\r\n    private shouldInitializeBraintreeFastlane;\r\n    private initializeBraintreeFastlaneOrThrow;\r\n}\r\n\r\n/**\r\n * A set of options that are optional to initialize the Braintree Fastlane customer strategy\r\n * that are responsible for Braintree Fastlane components styling and initialization\r\n *\r\n * ```js\r\n * service.initializeCustomer({\r\n *     methodId: 'braintreeacceleratedcheckout', // 'braintree' only for A/B testing\r\n *     braintreefastlane: {\r\n *         styles: {\r\n *              root: {\r\n *                  backgroundColorPrimary: 'transparent',\r\n *                  errorColor: '#C40B0B',\r\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n *              },\r\n *              input: {\r\n *                  borderRadius: '0.25rem',\r\n *                  borderColor: '#9E9E9E',\r\n *                  focusBorderColor: '#4496F6',\r\n *              },\r\n *              toggle: {\r\n *                  colorPrimary: '#0F005E',\r\n *                  colorSecondary: '#ffffff',\r\n *              },\r\n *              text: {\r\n *                  body: {\r\n *                      color: '#222222',\r\n *                      fontSize: '1rem',\r\n *                  },\r\n *                  caption: {\r\n *                      color: '#515151',\r\n *                      fontSize: '0.875rem',\r\n *                  },\r\n *              },\r\n *              branding: 'light',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BraintreeFastlaneCustomerInitializeOptions {\r\n    /**\r\n     * Is a stylisation options for customizing PayPal Fastlane components\r\n     *\r\n     * Note: the styles for all Braintree Fastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter what strategy was initialised first\r\n     */\r\n    styles?: BraintreeFastlaneStylesOption;\r\n}\r\n\r\ndeclare class BraintreeFastlaneCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private braintreeFastlaneUtils;\r\n    private isAcceleratedCheckoutEnabled;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, braintreeFastlaneUtils: BraintreeFastlaneUtils);\r\n    initialize({ methodId, braintreefastlane, }: CustomerInitializeOptions & WithBraintreeFastlaneCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    private shouldRunAuthenticationFlow;\r\n    private getValidPaymentMethodOrThrow;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Braintree Fastlane payment\r\n * method for presenting on the page.\r\n *\r\n *\r\n * Also, Braintree requires specific options to initialize Braintree Fastlane Credit Card Component\r\n * ```html\r\n * <!-- This is where the Braintree Credit Card Component will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'braintreeacceleratedcheckout',\r\n *     braintreefastlane: {\r\n *         onInit: (renderPayPalComponentMethod) => renderPayPalComponentMethod('#container-id'),\r\n *         onChange: (showPayPalCardSelector) => showPayPalCardSelector(),\r\n *         styles: {\r\n *              root: {\r\n *                  backgroundColorPrimary: 'transparent',\r\n *                  errorColor: '#C40B0B',\r\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n *              },\r\n *              input: {\r\n *                  borderRadius: '0.25rem',\r\n *                  borderColor: '#9E9E9E',\r\n *                  focusBorderColor: '#4496F6',\r\n *              },\r\n *              toggle: {\r\n *                  colorPrimary: '#0F005E',\r\n *                  colorSecondary: '#ffffff',\r\n *              },\r\n *              text: {\r\n *                  body: {\r\n *                      color: '#222222',\r\n *                      fontSize: '1rem',\r\n *                  },\r\n *                  caption: {\r\n *                      color: '#515151',\r\n *                      fontSize: '0.875rem',\r\n *                  },\r\n *              },\r\n *              branding: 'light',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface BraintreeFastlanePaymentInitializeOptions {\r\n    /**\r\n     * Is a callback that takes the CSS selector of a container\r\n     * where the Braintree Fastlane form should be inserted into.\r\n     */\r\n    onInit?: (renderPayPalComponentMethod: (container: string) => void) => void;\r\n    /**\r\n     * Is a callback that shows Braintree stored instruments\r\n     * when get triggered\r\n     */\r\n    onChange?: (showPayPalCardSelector: () => Promise<CardInstrument | undefined>) => void;\r\n    /**\r\n     * Is a stylisation options for customizing Braintree Fastlane components\r\n     *\r\n     * Note: the styles for all Braintree Fastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter what strategy was initialised first\r\n     */\r\n    styles?: BraintreeFastlaneStylesOption;\r\n    onError?: (error: Error) => void;\r\n}\r\n\r\ndeclare class BraintreeFastlanePaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private braintreeFastlaneUtils;\r\n    private braintreeSdk;\r\n    private braintreeCardComponent?;\r\n    private is3DSEnabled?;\r\n    private onError?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, braintreeFastlaneUtils: BraintreeFastlaneUtils, braintreeSdk: BraintreeSdk);\r\n    /**\r\n     *\r\n     * Default methods\r\n     *\r\n     */\r\n    initialize(options: PaymentInitializeOptions & WithBraintreeFastlanePaymentInitializeOptions): Promise<void>;\r\n    execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    /**\r\n     *\r\n     * Braintree Fastlane Component rendering method\r\n     *\r\n     */\r\n    private initializeCardComponent;\r\n    private renderBraintreeCardComponent;\r\n    /**\r\n     *\r\n     * Payment Payload preparation methods\r\n     *\r\n     */\r\n    private preparePaymentPayload;\r\n    /**\r\n     * 3DS\r\n     */\r\n    private get3DS;\r\n    /**\r\n     *\r\n     * Mapper methods\r\n     *\r\n     */\r\n    private mapToPayPalAddress;\r\n    /**\r\n     *\r\n     * Other methods\r\n     *\r\n     */\r\n    private shouldRunAuthenticationFlow;\r\n    private getBraintreeCardComponentOrThrow;\r\n    private getPayPalInstruments;\r\n    /**\r\n     *\r\n     * Braintree Fastlane instrument change\r\n     *\r\n     */\r\n    private handleBraintreeStoredInstrumentChange;\r\n}\r\n\r\ndeclare class BraintreeFastlaneUtils {\r\n    private paymentIntegrationService;\r\n    private braintreeIntegrationService;\r\n    private braintreeFastlane?;\r\n    private methodId?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, braintreeIntegrationService: BraintreeIntegrationService);\r\n    getDeviceSessionId(): Promise<string | undefined>;\r\n    /**\r\n     *\r\n     * Initialization method\r\n     *\r\n     */\r\n    initializeBraintreeFastlaneOrThrow(methodId: string, styles?: BraintreeFastlaneStylesOption): Promise<void>;\r\n    getBraintreeFastlaneOrThrow(): BraintreeFastlane;\r\n    getBraintreeFastlaneComponentOrThrow(): BraintreeFastlane['FastlaneCardComponent'];\r\n    /**\r\n     *\r\n     * Authentication methods\r\n     *\r\n     * */\r\n    runPayPalAuthenticationFlowOrThrow(email?: string, shouldSetShippingOption?: boolean): Promise<void>;\r\n    /**\r\n     *\r\n     * Session id management\r\n     *\r\n     */\r\n    getSessionIdFromCookies(): string;\r\n    saveSessionIdToCookies(sessionId: string): void;\r\n    removeSessionIdFromCookies(): void;\r\n    /**\r\n     *\r\n     * PayPal to BC data mappers\r\n     *\r\n     * */\r\n    mapPayPalToBcInstrument(methodId: string, instruments?: BraintreeFastlaneVaultedInstrument[]): CardInstrument[] | undefined;\r\n    private mapPayPalToBcAddress;\r\n    /**\r\n     *\r\n     * Get PayPal billing addresses from stored braintree instruments info\r\n     *\r\n     * */\r\n    private getPayPalBillingAddresses;\r\n    private normalizeAddress;\r\n    private mergeShippingAndBillingAddresses;\r\n    /**\r\n     *\r\n     * Other\r\n     *\r\n     * */\r\n    private getMethodIdOrThrow;\r\n    private setShippingOption;\r\n}\r\n\r\ndeclare class BraintreeHostedForm {\r\n    private braintreeScriptLoader;\r\n    private braintreeSDKVersionManager;\r\n    private cardFields?;\r\n    private formOptions?;\r\n    private type?;\r\n    private client?;\r\n    private clientToken?;\r\n    private isInitializedHostedForm;\r\n    constructor(braintreeScriptLoader: BraintreeScriptLoader, braintreeSDKVersionManager: BraintreeSDKVersionManager);\r\n    initialize(options: BraintreeFormOptions, unsupportedCardBrands?: string[], clientToken?: string): Promise<void>;\r\n    isInitialized(): boolean;\r\n    deinitialize(): Promise<void>;\r\n    validate(): void;\r\n    tokenize(billingAddress: Address): Promise<TokenizationPayload>;\r\n    tokenizeForStoredCardVerification(): Promise<TokenizationPayload>;\r\n    createHostedFields(options: Pick<BraintreeHostedFieldsCreatorConfig, 'fields' | 'styles'>): Promise<BraintreeHostedFields>;\r\n    getClient(): Promise<BraintreeClient>;\r\n    private mapBillingAddress;\r\n    private mapFieldOptions;\r\n    private mapStyleOptions;\r\n    private mapFieldType;\r\n    private mapErrors;\r\n    private mapValidationErrors;\r\n    private mapTokenizeError;\r\n    private createRequiredError;\r\n    private createInvalidError;\r\n    private handleBlur;\r\n    private handleFocus;\r\n    private handleCardTypeChange;\r\n    private handleInputSubmitRequest;\r\n    private handleValidityChange;\r\n    private isValidForm;\r\n    private isValidParam;\r\n}\r\n\r\ndeclare interface BraintreeLocalMethodsPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * Text that will be displayed on lpm button\r\n     */\r\n    buttonText: string;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm?(): void;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError(error: unknown): void;\r\n}\r\n\r\ndeclare class BraintreeLocalMethodsPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private braintreeSdk;\r\n    private braintreeRequestSender;\r\n    private loadingIndicator;\r\n    private pollingInterval;\r\n    private maxPollingIntervalTime;\r\n    private braintreelocalmethods?;\r\n    private braintreeLocalPayment?;\r\n    private loadingIndicatorContainer?;\r\n    private orderId?;\r\n    private gatewayId?;\r\n    private isLPMsUpdateExperimentEnabled;\r\n    private pollingTimer;\r\n    private stopPolling;\r\n    private isPollingEnabled;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, braintreeSdk: BraintreeSdk, braintreeRequestSender: BraintreeRequestSender, loadingIndicator: LoadingIndicator, pollingInterval?: number, maxPollingIntervalTime?: number);\r\n    initialize(options: PaymentInitializeOptions & WithBraintreeLocalMethodsPaymentInitializeOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    private executeWithNotInstantLPM;\r\n    private executeWithInstantLPM;\r\n    private getLPMsBasicPaymentData;\r\n    private getInstantLPMConfig;\r\n    private getInstantLPMCallback;\r\n    /**\r\n     *\r\n     * Loading Indicator methods\r\n     *\r\n     * */\r\n    private toggleLoadingIndicator;\r\n    private handleError;\r\n    /**\r\n     *\r\n     * Utils\r\n     *\r\n     * */\r\n    private isNonInstantPaymentMethod;\r\n    private isBraintreeRedirectError;\r\n    private isBraintreeOrderSavedResponse;\r\n    /**\r\n     *\r\n     * Polling mechanism\r\n     *\r\n     *\r\n     * */\r\n    private initializePollingMechanism;\r\n    private deinitializePollingMechanism;\r\n    private resetPollingMechanism;\r\n    private reinitializeStrategy;\r\n}\r\n\r\ndeclare interface BraintreePaypalButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: {\r\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n    };\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: Pick<PaypalStyleOptions, 'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons' | 'height'>;\r\n    /**\r\n     * Address to be used for shipping.\r\n     * If not provided, it will use the first saved address from the active customer.\r\n     */\r\n    shippingAddress?: Address | null;\r\n    /**\r\n     * A callback that gets called if unable to authorize and tokenize payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onAuthorizeError?(error: BraintreeError | StandardError): void;\r\n    /**\r\n     * A callback that gets called if unable to submit payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onPaymentError?(error: BraintreeError | StandardError): void;\r\n    /**\r\n     * A callback that gets called on any error instead of submit payment or authorization errors.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: BraintreeError | StandardError): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when Braintree SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare class BraintreePaypalButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private formPoster;\r\n    private braintreeIntegrationService;\r\n    private braintreeHostWindow;\r\n    private buyNowCartId;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, formPoster: FormPoster, braintreeIntegrationService: BraintreeIntegrationService, braintreeHostWindow: BraintreeHostWindow);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithBraintreePaypalButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private renderPayPalButton;\r\n    private setupPayment;\r\n    private tokenizePayment;\r\n    private createBuyNowCart;\r\n    private handleError;\r\n}\r\n\r\ndeclare interface BraintreePaypalCreditButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: {\r\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n    };\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: Pick<PaypalStyleOptions, 'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons' | 'height'>;\r\n    /**\r\n     * Address to be used for shipping.\r\n     * If not provided, it will use the first saved address from the active customer.\r\n     */\r\n    shippingAddress?: Address | null;\r\n    /**\r\n     * A callback that gets called if unable to authorize and tokenize payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onAuthorizeError?(error: BraintreeError | StandardError): void;\r\n    /**\r\n     * A callback that gets called if unable to submit payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onPaymentError?(error: BraintreeError | StandardError): void;\r\n    /**\r\n     * A callback that gets called on any error instead of submit payment or authorization errors.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: BraintreeError | StandardError): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when Braintree SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare class BraintreePaypalCreditButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private formPoster;\r\n    private braintreeIntegrationService;\r\n    private braintreeHostWindow;\r\n    private buyNowCartId;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, formPoster: FormPoster, braintreeIntegrationService: BraintreeIntegrationService, braintreeHostWindow: BraintreeHostWindow);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithBraintreePaypalCreditButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private renderPayPalButton;\r\n    private setupPayment;\r\n    private tokenizePayment;\r\n    private createBuyNowCart;\r\n    private handleError;\r\n}\r\n\r\ndeclare interface BraintreePaypalCreditCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    buttonHeight?: number;\r\n    /**\r\n     * A callback that gets called on any error instead of submit payment or authorization errors.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: BraintreeError | StandardError): void;\r\n    /**\r\n     * A callback that gets called when wallet button clicked\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\ndeclare class BraintreePaypalCreditCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private formPoster;\r\n    private braintreeIntegrationService;\r\n    private braintreeHostWindow;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, formPoster: FormPoster, braintreeIntegrationService: BraintreeIntegrationService, braintreeHostWindow: BraintreeHostWindow);\r\n    initialize(options: CustomerInitializeOptions & WithBraintreePaypalCreditCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    private renderPayPalButton;\r\n    private setupPayment;\r\n    private tokenizePayment;\r\n    private handleError;\r\n}\r\n\r\ndeclare interface BraintreePaypalCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    buttonHeight?: number;\r\n    /**\r\n     * A callback that gets called on any error instead of submit payment or authorization errors.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: BraintreeError | StandardError): void;\r\n    /**\r\n     * A callback that gets called when wallet button clicked\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\ndeclare class BraintreePaypalCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private formPoster;\r\n    private braintreeIntegrationService;\r\n    private braintreeHostWindow;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, formPoster: FormPoster, braintreeIntegrationService: BraintreeIntegrationService, braintreeHostWindow: BraintreeHostWindow);\r\n    initialize(options: CustomerInitializeOptions & WithBraintreePaypalCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    private renderPayPalButton;\r\n    private setupPayment;\r\n    private tokenizePayment;\r\n    private handleError;\r\n}\r\n\r\ndeclare interface BraintreePaypalPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    containerId?: string;\r\n    threeDSecure?: BraintreeThreeDSecureOptions;\r\n    /**\r\n     * @alpha\r\n     * Please note that this option is currently in an early stage of\r\n     * development. Therefore the API is unstable and not ready for public\r\n     * consumption.\r\n     */\r\n    form?: BraintreeFormOptions;\r\n    /**\r\n     * The location to insert the Pay Later Messages.\r\n     */\r\n    bannerContainerId?: string;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm?(): void;\r\n    /**\r\n     * A callback that gets called if unable to submit payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onPaymentError?(error: BraintreeError | StandardError): void;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: unknown): void;\r\n}\r\n\r\ndeclare class BraintreePaypalPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private braintreeIntegrationService;\r\n    private braintreeMessages;\r\n    private loadingIndicator;\r\n    private paymentMethod?;\r\n    private braintreeHostWindow;\r\n    private braintreeButtonOptions?;\r\n    private braintreeTokenizePayload?;\r\n    private paypalButtonRender?;\r\n    private loadingIndicatorContainer?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, braintreeIntegrationService: BraintreeIntegrationService, braintreeMessages: BraintreeMessages, loadingIndicator: LoadingIndicator);\r\n    initialize(options: PaymentInitializeOptions & WithBraintreePaypalPaymentInitializeOptions): Promise<void>;\r\n    execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private preparePaymentData;\r\n    private formattedPayload;\r\n    private loadPaypalCheckoutInstance;\r\n    private renderPayPalMessages;\r\n    private renderPayPalButton;\r\n    private setupPayment;\r\n    private tokenizePaymentOrThrow;\r\n    private loadPaypal;\r\n    private handleError;\r\n    private isProviderError;\r\n    private removeElement;\r\n    /**\r\n     *\r\n     * Loading Indicator methods\r\n     *\r\n     * */\r\n    private toggleLoadingIndicator;\r\n    private getSmartButtonContainerId;\r\n}\r\n\r\ndeclare class BraintreeRequestSender {\r\n    private requestSender;\r\n    constructor(requestSender: RequestSender);\r\n    getOrderStatus(methodId?: string, options?: RequestOptions): Promise<BraintreeOrderStatusData>;\r\n}\r\n\r\ndeclare interface BraintreeVenmoButtonInitializeOptions {\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: BuyNowInitializeOptions;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: Pick<PaypalStyleOptions, 'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons' | 'height'>;\r\n    /**\r\n     * A callback that gets called on any error.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: BraintreeError | StandardError): void;\r\n}\r\n\r\ndeclare class BraintreeVenmoButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private formPoster;\r\n    private braintreeSdk;\r\n    private onError;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, formPoster: FormPoster, braintreeSdk: BraintreeSdk);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithBraintreeVenmoInitializeOptions_2): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private handleError;\r\n    private createBuyNowCart;\r\n    private handleInitializationVenmoError;\r\n    private removeVenmoContainer;\r\n    private renderVenmoButton;\r\n    private handlePostForm;\r\n}\r\n\r\ndeclare class BraintreeVenmoPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private braintreeIntegrationService;\r\n    private braintreeVenmoCheckout?;\r\n    private venmoOptions?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, braintreeIntegrationService: BraintreeIntegrationService);\r\n    initialize(options: PaymentInitializeOptions & WithBraintreeVenmoInitializeOptions): Promise<void>;\r\n    execute(orderRequest: OrderRequestBody): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private handleError;\r\n    private initializeBraintreeVenmo;\r\n    private preparePaymentData;\r\n    private formattedPayload;\r\n    private braintreeVenmoTokenize;\r\n}\r\n\r\ndeclare interface BraintreeVenmoPaymentStrategyInitializeOptions {\r\n    /**\r\n     * An option that can provide different payment authorization methods, for more information use the following link: https://developer.paypal.com/braintree/docs/guides/venmo/client-side/javascript/v3/#desktop-qr-code\r\n     * If no value is specified, it will be true\r\n     */\r\n    allowDesktop?: boolean;\r\n}\r\n\r\ndeclare class BraintreeVisaCheckoutButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private formPoster;\r\n    private braintreeSdk;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, formPoster: FormPoster, braintreeSdk: BraintreeSdk);\r\n    initialize(options: CheckoutButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private paymentSuccess;\r\n    private postForm;\r\n    private toVisaCheckoutAddress;\r\n    private getAddress;\r\n    private createSignInButton;\r\n    private insertVisaCheckoutButton;\r\n}\r\n\r\ndeclare interface BraintreeVisaCheckoutCustomerInitializeOptions {\r\n    container: string;\r\n    /**\r\n     * A callback that gets called when Visa Checkout fails to initialize or\r\n     * selects a payment option.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: Error): void;\r\n}\r\n\r\ndeclare class BraintreeVisaCheckoutCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private formPoster;\r\n    private braintreeSdk;\r\n    private buttonClassName;\r\n    private onError;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, formPoster: FormPoster, braintreeSdk: BraintreeSdk);\r\n    initialize(options: CustomerInitializeOptions & WithBraintreeVisaCheckoutCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    private tokenizePayment;\r\n    private postForm;\r\n    private mapToVisaCheckoutAddress;\r\n    private getAddress;\r\n    private createSignInButton;\r\n    private insertVisaCheckoutButton;\r\n    private handleError;\r\n}\r\n\r\ndeclare interface BraintreeVisaCheckoutPaymentInitializeOptions {\r\n    /**\r\n     * A callback that gets called when Visa Checkout fails to initialize or\r\n     * selects a payment option.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * A callback that gets called when the customer selects a payment option.\r\n     */\r\n    onPaymentSelect?(): void;\r\n}\r\n\r\ndeclare class BraintreeVisaCheckoutPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private formPoster;\r\n    private braintreeSdk;\r\n    private paymentMethod?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, formPoster: FormPoster, braintreeSdk: BraintreeSdk);\r\n    initialize(options: PaymentInitializeOptions & WithBraintreeVisaCheckoutPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<any>;\r\n    deinitialize(): Promise<void>;\r\n    private tokenizePayment;\r\n    private mapToVisaCheckoutAddress;\r\n    private postForm;\r\n    private getAddress;\r\n    private handleError;\r\n}\r\n\r\ndeclare interface BuyNowInitializeOptions {\r\n    getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\r\n}\r\n\r\ndeclare interface WithBraintreeAchPaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Braintree ACH payment\r\n     * method. They can be omitted unless you need to support Apple Pay.\r\n     */\r\n    braintreeach?: BraintreeAchInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeCreditCardPaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Braintree PayPal wallet button on Product and Cart page.\r\n     */\r\n    braintree?: BraintreeCreditCardPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeFastlaneCustomerInitializeOptions {\r\n    braintreefastlane?: BraintreeFastlaneCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeFastlanePaymentInitializeOptions {\r\n    braintreefastlane?: BraintreeFastlanePaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeLocalMethodsPaymentInitializeOptions {\r\n    braintreelocalmethods?: BraintreeLocalMethodsPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreePaypalButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Braintree PayPal wallet button on Product and Cart page.\r\n     */\r\n    braintreepaypal?: BraintreePaypalButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreePaypalCreditButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Braintree PayPal Credit wallet button on Product and Cart page.\r\n     */\r\n    braintreepaypalcredit?: BraintreePaypalCreditButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreePaypalCreditCustomerInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using Braintree PayPal.\r\n     */\r\n    braintreepaypalcredit?: BraintreePaypalCreditCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreePaypalCustomerInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using Braintree PayPal.\r\n     */\r\n    braintreepaypal?: BraintreePaypalCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreePaypalPaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using Braintree PayPal.\r\n     */\r\n    braintree?: BraintreePaypalPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeVenmoInitializeOptions {\r\n    /**\r\n     * The options that are required to facilitate Braintree Venmo. They can be\r\n     * omitted unless you need to support Braintree Venmo.\r\n     */\r\n    braintreevenmo?: BraintreeVenmoPaymentStrategyInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeVenmoInitializeOptions_2 {\r\n    /**\r\n     * The options that are required to facilitate Braintree Venmo. They can be\r\n     * omitted unless you need to support Braintree Venmo.\r\n     */\r\n    braintreevenmo?: BraintreeVenmoButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeVisaCheckoutCustomerInitializeOptions {\r\n    braintreevisacheckout?: BraintreeVisaCheckoutCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithBraintreeVisaCheckoutPaymentInitializeOptions {\r\n    braintreevisacheckout?: BraintreeVisaCheckoutPaymentInitializeOptions;\r\n}\r\n\r\nexport declare const createBraintreeAchPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BraintreeAchPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreeCreditCardPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BraintreeCreditCardPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreeFastlaneCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<BraintreeFastlaneCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreeFastlanePaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BraintreeFastlanePaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreeLocalMethodsPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BraintreeLocalMethodsPaymentStrategy>, {\r\n    gateway: string;\r\n}>;\r\n\r\nexport declare const createBraintreePaypalButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<BraintreePaypalButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreePaypalCreditButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<BraintreePaypalCreditButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreePaypalCreditCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<BraintreePaypalCreditCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreePaypalCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<BraintreePaypalCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreePaypalPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BraintreePaypalPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreeVenmoButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<BraintreeVenmoButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreeVenmoPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<BraintreeVenmoPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreeVisaCheckoutButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<BraintreeVisaCheckoutButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreeVisaCheckoutCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<BraintreeVisaCheckoutCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createBraintreeVisaCheckoutPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<BraintreeVisaCheckoutPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/cba-mpgs.d.ts",
    "content": "import { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\n\r\ndeclare interface AuthenticatePayerOptionalParams {\r\n    fullScreenRedirect: boolean;\r\n}\r\n\r\ndeclare interface CBAMPGSHostWindow extends Window {\r\n    ThreeDS?: ThreeDSjs;\r\n}\r\n\r\ndeclare class CBAMPGSPaymentStrategy extends CreditCardPaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private cbaMGPSScriptLoader;\r\n    private threeDSjs?;\r\n    private sessionId;\r\n    private locale?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, cbaMGPSScriptLoader: CBAMPGSScriptLoader);\r\n    initialize(options: PaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(options?: PaymentRequestOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private initiateAuthentication;\r\n    private authenticatePayer;\r\n}\r\n\r\ndeclare class CBAMPGSScriptLoader {\r\n    private _scriptLoader;\r\n    private _window;\r\n    constructor(_scriptLoader: ScriptLoader, _window?: CBAMPGSHostWindow);\r\n    load(testMode?: boolean): Promise<ThreeDSjs>;\r\n}\r\n\r\ndeclare interface RestApiResponse {\r\n    transaction: {\r\n        authenticationStatus: string;\r\n    };\r\n}\r\n\r\ndeclare interface ThreeDSAPIConfiguration {\r\n    userLanguage: string;\r\n    wsVersion: number;\r\n}\r\n\r\ndeclare interface ThreeDSAuthenticationError {\r\n    code: string;\r\n    msg: string;\r\n    cause?: string;\r\n}\r\n\r\ndeclare interface ThreeDSAuthenticationResponse {\r\n    error?: ThreeDSAuthenticationError;\r\n    restApiResponse: RestApiResponse;\r\n    gatewayRecommendation: string;\r\n}\r\n\r\ndeclare interface ThreeDSConfiguration {\r\n    merchantId: string;\r\n    sessionId: string;\r\n    configuration: ThreeDSAPIConfiguration;\r\n    callback(): void;\r\n}\r\n\r\ndeclare interface ThreeDSjs {\r\n    configure(config: ThreeDSConfiguration): Promise<void>;\r\n    isConfigured(): boolean;\r\n    initiateAuthentication(orderId: string, transactionId: string, callback: (data: ThreeDSAuthenticationResponse) => void): void;\r\n    authenticatePayer(orderId: string, transactionId: string, callback: (data: ThreeDSAuthenticationResponse) => void, optionalParams?: AuthenticatePayerOptionalParams): void;\r\n}\r\n\r\nexport declare const createCBAMPGSPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<CBAMPGSPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/checkoutcom-custom.d.ts",
    "content": "import { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\r\nimport { FormPoster } from '@bigcommerce/form-poster';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare class CheckoutComCreditCardPaymentStrategy extends CreditCardPaymentStrategy {\r\n    private paymentIntegrationService;\r\n    protected formPoster: FormPoster;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, formPoster: FormPoster);\r\n    finalize(options?: PaymentRequestOptions): Promise<void>;\r\n    protected _executeWithoutHostedForm(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    protected _executeWithHostedForm(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    private _handleThreeDSecure;\r\n}\r\n\r\ndeclare class CheckoutComCustomPaymentStrategy extends CreditCardPaymentStrategy {\r\n    protected paymentIntegrationService: PaymentIntegrationService;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService);\r\n    finalize(options?: PaymentRequestOptions): Promise<void>;\r\n    protected _executeWithHostedForm(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    protected _processResponse(error: unknown): Promise<void>;\r\n    private _performRedirect;\r\n}\r\n\r\ndeclare class CheckoutComFawryPaymentStrategy extends CheckoutComCustomPaymentStrategy {\r\n    protected _executeWithoutHostedForm(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    private _createFormattedPayload;\r\n}\r\n\r\ndeclare class CheckoutComSEPAPaymentStrategy extends CheckoutComCustomPaymentStrategy {\r\n    protected _executeWithoutHostedForm(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    private _createFormattedPayload;\r\n}\r\n\r\ndeclare class CheckoutComiDealPaymentStrategy extends CheckoutComCustomPaymentStrategy {\r\n    protected _executeWithoutHostedForm(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    private _createFormattedPayload;\r\n}\r\n\r\nexport declare const createCheckoutComAPMPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<CheckoutComCustomPaymentStrategy>, {\r\n    gateway: string;\r\n}>;\r\n\r\nexport declare const createCheckoutComCreditCardPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<CheckoutComCreditCardPaymentStrategy>, {\r\n    gateway: string;\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createCheckoutComFawryPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<CheckoutComFawryPaymentStrategy>, {\r\n    gateway: string;\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createCheckoutComIdealPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<CheckoutComiDealPaymentStrategy>, {\r\n    gateway: string;\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createCheckoutComSepaPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<CheckoutComSEPAPaymentStrategy>, {\r\n    gateway: string;\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/clearpay.d.ts",
    "content": "import { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\n\r\ndeclare interface ClearpayDisplayOptions {\r\n    token: string;\r\n}\r\n\r\ndeclare interface ClearpayInitializeOptions {\r\n    countryCode: string;\r\n}\r\n\r\ndeclare class ClearpayPaymentStrategy implements PaymentStrategy {\r\n    private _paymentIntegrationService;\r\n    private _clearpayScriptLoader;\r\n    private _clearpaySdk?;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService, _clearpayScriptLoader: ClearpayScriptLoader);\r\n    initialize(options: PaymentInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(options: PaymentRequestOptions): Promise<void>;\r\n    private _redirectToClearpay;\r\n    private _isCountrySupported;\r\n    private _loadPaymentMethod;\r\n}\r\n\r\ndeclare class ClearpayScriptLoader {\r\n    private _scriptLoader;\r\n    _window: ClearpayWindow;\r\n    constructor(_scriptLoader: ScriptLoader, _window?: ClearpayWindow);\r\n    load(method: PaymentMethod, features?: {}): Promise<ClearpaySdk>;\r\n    private _getScriptUrl;\r\n}\r\n\r\ndeclare interface ClearpaySdk {\r\n    initialize(options: ClearpayInitializeOptions): void;\r\n    redirect(options: ClearpayDisplayOptions): void;\r\n}\r\n\r\ndeclare interface ClearpayWindow extends Window {\r\n    AfterPay?: ClearpaySdk;\r\n}\r\n\r\nexport declare const createClearpayPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<ClearpayPaymentStrategy>, {\r\n    gateway: string;\r\n    id?: undefined;\r\n} | {\r\n    id: string;\r\n    gateway?: undefined;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/credit-card.d.ts",
    "content": "import { HostedForm } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { HostedFormOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\n/**\r\n * A set of options to initialize credit card payment methods, unless those\r\n * methods require provider-specific configuration. If the initialization is\r\n * successful, hosted (iframed) credit card fields will be inserted into the the\r\n * containers specified in the options.\r\n *\r\n * ```html\r\n * <!-- These containers are where the hosted (iframed) credit card fields will be inserted -->\r\n * <div id=\"card-number\"></div>\r\n * <div id=\"card-name\"></div>\r\n * <div id=\"card-expiry\"></div>\r\n * <div id=\"card-code\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'authorizenet',\r\n *     creditCard: {\r\n *         form: {\r\n *             fields: {\r\n *                 cardNumber: { containerId: 'card-number' },\r\n *                 cardName: { containerId: 'card-name' },\r\n *                 cardExpiry: { containerId: 'card-expiry' },\r\n *                 cardCode: { containerId: 'card-code' },\r\n *             },\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Additional options can be passed in to customize the fields and register\r\n * event callbacks.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'authorizenet',\r\n *     creditCard: {\r\n *         form: {\r\n *             fields: {\r\n *                 cardNumber: { containerId: 'card-number' },\r\n *                 cardName: { containerId: 'card-name' },\r\n *                 cardExpiry: { containerId: 'card-expiry' },\r\n *                 cardCode: { containerId: 'card-code' },\r\n *             },\r\n *             styles: {\r\n *                 default: {\r\n *                     color: '#000',\r\n *                     fontFamily: 'Arial',\r\n *                 },\r\n *                 error: {\r\n *                     color: '#f00',\r\n *                 },\r\n *                 focus: {\r\n *                     color: '#0f0',\r\n *                 },\r\n *             },\r\n *             onBlur({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onFocus({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onEnter({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onCardTypeChange({ cardType }) {\r\n *                 console.log(cardType);\r\n *             },\r\n *             onValidate({ errors, isValid }) {\r\n *                 console.log(errors);\r\n *                 console.log(isValid);\r\n *             },\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface CreditCardPaymentInitializeOptions {\r\n    form: HostedFormOptions;\r\n    bigpayToken?: string;\r\n}\r\n\r\ndeclare class CreditCardPaymentStrategy implements PaymentStrategy {\r\n    protected _paymentIntegrationService: PaymentIntegrationService;\r\n    protected _hostedForm?: HostedForm;\r\n    protected _shouldRenderHostedForm?: boolean;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService);\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    initialize(options?: PaymentInitializeOptions & WithCreditCardPaymentInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    protected _executeWithoutHostedForm(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    protected _executeWithHostedForm(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    protected _isHostedPaymentFormEnabled(methodId?: string, gatewayId?: string): boolean;\r\n    private _isHostedFieldAvailable;\r\n}\r\n\r\ndeclare interface WithCreditCardPaymentInitializeOptions {\r\n    creditCard?: CreditCardPaymentInitializeOptions;\r\n}\r\n\r\nexport declare const createCreditCardPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<CreditCardPaymentStrategy>, {\r\n    default: boolean;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/cybersource.d.ts",
    "content": "import { CardinalThreeDSecureFlow } from '@bigcommerce/checkout-sdk/cardinal-integration';\r\nimport { CardinalThreeDSecureFlowV2 } from '@bigcommerce/checkout-sdk/cardinal-integration';\r\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare class CyberSourcePaymentStrategy extends CreditCardPaymentStrategy {\r\n    private _threeDSecureFlow;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService, _threeDSecureFlow: CardinalThreeDSecureFlow);\r\n    initialize(options: PaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n}\r\n\r\ndeclare class CyberSourceV2PaymentStrategy extends CreditCardPaymentStrategy {\r\n    private _threeDSecureFlow;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService, _threeDSecureFlow: CardinalThreeDSecureFlowV2);\r\n    initialize(options: PaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n}\r\n\r\nexport declare const createCyberSourcePaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<CyberSourcePaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createCyberSourceV2PaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<CyberSourceV2PaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/google-pay.d.ts",
    "content": "import { AddressRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { BigCommercePaymentsIntent } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\r\nimport { BillingAddressRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { BrowserInfo } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { BuyNowCartRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ExecutePaymentMethodCheckoutOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { FormPoster } from '@bigcommerce/form-poster';\r\nimport { Omit } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { RequestSender } from '@bigcommerce/request-sender';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\n\r\ndeclare enum CallbackIntentsType {\r\n    OFFER = \"OFFER\",\r\n    PAYMENT_AUTHORIZATION = \"PAYMENT_AUTHORIZATION\",\r\n    SHIPPING_ADDRESS = \"SHIPPING_ADDRESS\",\r\n    SHIPPING_OPTION = \"SHIPPING_OPTION\"\r\n}\r\n\r\ndeclare enum CallbackTriggerType {\r\n    INITIALIZE = \"INITIALIZE\",\r\n    SHIPPING_OPTION = \"SHIPPING_OPTION\",\r\n    SHIPPING_ADDRESS = \"SHIPPING_ADDRESS\",\r\n    OFFER = \"OFFER\"\r\n}\r\n\r\ndeclare enum ErrorReasonType {\r\n    OFFER_INVALID = \"OFFER_INVALID\",\r\n    PAYMENT_DATA_INVALID = \"PAYMENT_DATA_INVALID\",\r\n    SHIPPING_ADDRESS_INVALID = \"SHIPPING_ADDRESS_INVALID\",\r\n    SHIPPING_ADDRESS_UNSERVICEABLE = \"SHIPPING_ADDRESS_UNSERVICEABLE\",\r\n    SHIPPING_OPTION_INVALID = \"SHIPPING_OPTION_INVALID\",\r\n    OTHER_ERROR = \"OTHER_ERROR\"\r\n}\r\n\r\ndeclare interface ExtraPaymentData {\r\n    deviceSessionId?: string;\r\n    browser_info?: BrowserInfo;\r\n}\r\n\r\ndeclare type FundingType = string[];\r\n\r\ndeclare interface GooglePayAdyenV2InitializationData extends GooglePayBaseInitializationData {\r\n    originKey?: string;\r\n    clientKey?: string;\r\n    environment?: string;\r\n    prefillCardHolderName?: boolean;\r\n    paymentMethodsResponse: object;\r\n}\r\n\r\ndeclare interface GooglePayAdyenV3InitializationData extends GooglePayBaseInitializationData {\r\n    clientKey: string;\r\n    environment?: string;\r\n    prefillCardHolderName?: boolean;\r\n    paymentMethodsResponse: object;\r\n}\r\n\r\ndeclare type GooglePayAuthMethod = 'PAN_ONLY' | 'CRYPTOGRAM_3DS';\r\n\r\ndeclare interface GooglePayAuthorizeNetInitializationData extends GooglePayBaseInitializationData {\r\n    paymentGatewayId: string;\r\n}\r\n\r\ndeclare interface GooglePayBaseCardPaymentMethod extends GooglePayPaymentMethod<GooglePayCardParameters> {\r\n    type: 'CARD';\r\n    parameters: GooglePayCardParameters;\r\n}\r\n\r\ndeclare interface GooglePayBaseInitializationData {\r\n    card_information?: {\r\n        type: string;\r\n        number: string;\r\n        bin?: string;\r\n        isNetworkTokenized?: boolean;\r\n    };\r\n    gateway: string;\r\n    gatewayMerchantId?: string;\r\n    googleMerchantId: string;\r\n    googleMerchantName: string;\r\n    isThreeDSecureEnabled: boolean;\r\n    nonce?: string;\r\n    platformToken: string;\r\n    storeCountry?: string;\r\n    isWebViewExperimentOn?: boolean;\r\n}\r\n\r\ndeclare interface GooglePayBigCommercePaymentsInitializationData extends GooglePayBaseInitializationData {\r\n    merchantId?: string;\r\n    clientId: string;\r\n    attributionId?: string;\r\n    availableAlternativePaymentMethods: FundingType;\r\n    buttonStyle?: PayPalButtonStyleOptions;\r\n    buyerCountry?: string;\r\n    clientToken?: string;\r\n    enabledAlternativePaymentMethods: FundingType;\r\n    isDeveloperModeApplicable?: boolean;\r\n    intent?: BigCommercePaymentsIntent;\r\n    isHostedCheckoutEnabled?: boolean;\r\n    isPayPalCreditAvailable?: boolean;\r\n    isVenmoEnabled?: boolean;\r\n    isGooglePayEnabled?: boolean;\r\n    orderId?: string;\r\n    shouldRenderFields?: boolean;\r\n    paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\r\n}\r\n\r\ndeclare interface GooglePayBraintreeGatewayParameters extends GooglePayGatewayBaseParameters {\r\n    'braintree:apiVersion'?: string;\r\n    'braintree:authorizationFingerprint'?: string;\r\n    'braintree:merchantId'?: string;\r\n    'braintree:sdkVersion'?: string;\r\n}\r\n\r\ndeclare type GooglePayButtonColor = 'default' | 'black' | 'white';\r\n\r\ndeclare interface GooglePayButtonInitializeOptions {\r\n    /**\r\n     * The color of the GooglePay button that will be inserted.\r\n     *  black (default): a black button suitable for use on white or light backgrounds.\r\n     *  white: a white button suitable for use on colorful backgrounds.\r\n     */\r\n    buttonColor?: GooglePayButtonColor;\r\n    /**\r\n     * The size of the GooglePay button that will be inserted.\r\n     *  long: \"Buy with Google Pay\" button (default). A translated button label may appear\r\n     *         if a language specified in the viewer's browser matches an available language.\r\n     *  short: Google Pay payment button without the \"Buy with\" text.\r\n     */\r\n    buttonType?: GooglePayButtonType;\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: GooglePayBuyNowInitializeOptions;\r\n    /**\r\n     * The option that is required to load payment method configuration for provided currency code in Buy Now flow.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A callback that gets called when GooglePay fails to initialize or\r\n     * selects a payment option.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: Error): void;\r\n}\r\n\r\ndeclare interface GooglePayButtonOptions {\r\n    onClick: (event: MouseEvent) => Promise<void>;\r\n    allowedPaymentMethods: [GooglePayBaseCardPaymentMethod];\r\n    buttonColor?: GooglePayButtonColor;\r\n    buttonSizeMode?: GooglePayButtonSizeMode;\r\n    buttonType?: GooglePayButtonType;\r\n}\r\n\r\ndeclare type GooglePayButtonSizeMode = 'static' | 'fill';\r\n\r\ndeclare class GooglePayButtonStrategy implements CheckoutButtonStrategy {\r\n    private _paymentIntegrationService;\r\n    private _googlePayPaymentProcessor;\r\n    private _paymentButton?;\r\n    private _methodId?;\r\n    private _buyNowCart?;\r\n    private _currencyCode?;\r\n    private _buyNowInitializeOptions?;\r\n    private _countryCode?;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService, _googlePayPaymentProcessor: GooglePayPaymentProcessor);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithGooglePayButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _handleClick;\r\n    private _interactWithPaymentSheet;\r\n    private _getGooglePayClientOptions;\r\n    private _createBuyNowCartOrThrow;\r\n    private _getBuyNowTransactionInfo;\r\n    private _getTransactionInfo;\r\n    private _getMethodOrThrow;\r\n    private _getCurrencyCodeOrThrow;\r\n}\r\n\r\ndeclare type GooglePayButtonType = 'book' | 'buy' | 'checkout' | 'donate' | 'order' | 'pay' | 'plain' | 'subscribe' | 'long' | 'short';\r\n\r\ndeclare interface GooglePayBuyNowInitializeOptions {\r\n    getBuyNowCartRequestBody?(): BuyNowCartRequestBody;\r\n}\r\n\r\ndeclare interface GooglePayCardData extends GooglePayPaymentMethodData<GooglePayCardInfo> {\r\n    type: 'CARD';\r\n}\r\n\r\ndeclare interface GooglePayCardDataResponse extends GooglePayPaymentDataResponse<GooglePayCardInfo> {\r\n    paymentMethodData: GooglePayCardData;\r\n}\r\n\r\ndeclare interface GooglePayCardInfo {\r\n    cardNetwork: GooglePayCardNetwork;\r\n    cardDetails: string;\r\n    billingAddress?: GooglePayFullBillingAddress;\r\n}\r\n\r\ndeclare enum GooglePayCardNetwork {\r\n    AMEX = \"AMEX\",\r\n    DISCOVER = \"DISCOVER\",\r\n    INTERAC = \"INTERAC\",\r\n    JCB = \"JCB\",\r\n    MC = \"MASTERCARD\",\r\n    VISA = \"VISA\"\r\n}\r\n\r\ndeclare interface GooglePayCardParameters {\r\n    allowedAuthMethods: GooglePayAuthMethod[];\r\n    allowedCardNetworks: GooglePayCardNetwork[];\r\n    billingAddressRequired?: boolean;\r\n    billingAddressParameters?: {\r\n        format?: 'MIN' | 'FULL';\r\n        phoneNumberRequired?: boolean;\r\n    };\r\n}\r\n\r\ndeclare interface GooglePayCardPaymentMethod extends GooglePayBaseCardPaymentMethod {\r\n    tokenizationSpecification: {\r\n        type: 'PAYMENT_GATEWAY';\r\n        parameters: GooglePayGatewayParameters;\r\n    };\r\n}\r\n\r\ndeclare interface GooglePayCheckoutComInitializationData extends GooglePayBaseInitializationData {\r\n    checkoutcomkey: string;\r\n}\r\n\r\ndeclare interface GooglePayCustomerInitializeOptions {\r\n    /**\r\n     * This container is used to set an event listener, provide an element ID if you want users to be able to launch\r\n     * the GooglePay wallet modal by clicking on a button. It should be an HTML element.\r\n     */\r\n    container: string;\r\n    /**\r\n     * All Google Pay payment buttons exist in two styles: dark (default) and light.\r\n     * To provide contrast, use dark buttons on light backgrounds and light buttons on dark or colorful backgrounds.\r\n     */\r\n    buttonColor?: GooglePayButtonColor;\r\n    /**\r\n     * Variant buttons:\r\n     * book: The \"Book with Google Pay\" payment button.\r\n     * buy: The \"Buy with Google Pay\" payment button.\r\n     * checkout: The \"Checkout with Google Pay\" payment button.\r\n     * donate: The \"Donate with Google Pay\" payment button.\r\n     * order: The \"Order with Google Pay\" payment button.\r\n     * pay: The \"Pay with Google Pay\" payment button.\r\n     * plain: The Google Pay payment button without the additional text (default).\r\n     * subscribe: The \"Subscribe with Google Pay\" payment button.\r\n     *\r\n     * Note: \"long\" and \"short\" button types have been renamed to \"buy\" and \"plain\", but are still valid button types\r\n     * for backwards compatability.\r\n     */\r\n    buttonType?: GooglePayButtonType;\r\n    /**\r\n     * A callback that gets called when GooglePay fails to initialize or\r\n     * selects a payment option.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * Callback that get called on wallet button click\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\ndeclare class GooglePayCustomerStrategy implements CustomerStrategy {\r\n    private _paymentIntegrationService;\r\n    private _googlePayPaymentProcessor;\r\n    private _paymentButton?;\r\n    private _methodId?;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService, _googlePayPaymentProcessor: GooglePayPaymentProcessor);\r\n    initialize(options?: CustomerInitializeOptions & WithGooglePayCustomerInitializeOptions): Promise<void>;\r\n    signIn(): Promise<void>;\r\n    signOut(): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _getGooglePayClientOptions;\r\n    private _addPaymentButton;\r\n    private _handleClick;\r\n    private _interactWithPaymentSheet;\r\n    private _getMethodId;\r\n}\r\n\r\ndeclare interface GooglePayError {\r\n    message: string;\r\n    reason: ErrorReasonType;\r\n    intent: CallbackTriggerType;\r\n}\r\n\r\ndeclare interface GooglePayFullBillingAddress extends GooglePayMinBillingAddress {\r\n    address1: string;\r\n    address2: string;\r\n    address3: string;\r\n    locality: string;\r\n    administrativeArea: string;\r\n    sortingCode: string;\r\n}\r\n\r\ndeclare class GooglePayGateway {\r\n    private _gatewayIdentifier;\r\n    private _paymentIntegrationService;\r\n    private _getPaymentMethodFn?;\r\n    private _isBuyNowFlow;\r\n    private _shouldRequestShipping;\r\n    private _currencyCode?;\r\n    private _currencyService?;\r\n    private _isWebViewExperimentOn;\r\n    constructor(_gatewayIdentifier: string, _paymentIntegrationService: PaymentIntegrationService);\r\n    mapToShippingAddressRequestBody({ shippingAddress, }: GooglePayCardDataResponse): AddressRequestBody | undefined;\r\n    mapToBillingAddressRequestBody(response: GooglePayCardDataResponse): BillingAddressRequestBody | undefined;\r\n    mapToExternalCheckoutData(response: GooglePayCardDataResponse): Promise<GooglePaySetExternalCheckoutData>;\r\n    getRequiredData(): Promise<GooglePayRequiredPaymentData>;\r\n    getCallbackIntents(): CallbackIntentsType[];\r\n    getCallbackTriggers(): {\r\n        [key: string]: CallbackTriggerType[];\r\n    };\r\n    getNonce(methodId: string): Promise<string>;\r\n    extraPaymentData(): Promise<undefined | ExtraPaymentData>;\r\n    getMerchantInfo(): GooglePayMerchantInfo;\r\n    getTransactionInfo(): GooglePayTransactionInfo;\r\n    isWebViewWithRestrictions(): boolean;\r\n    setIsWebViewExperimentOn(isWebViewExperimentOn: boolean): void;\r\n    getPaymentGatewayParameters(): Promise<GooglePayGatewayParameters> | GooglePayGatewayParameters;\r\n    getCardParameters(): GooglePayCardParameters;\r\n    initialize(getPaymentMethod: () => PaymentMethod<GooglePayInitializationData>, isBuyNowFlow?: boolean, currencyCode?: string): Promise<void>;\r\n    handleShippingAddressChange(shippingAddress?: GooglePayFullBillingAddress): Promise<ShippingOptionParameters | undefined>;\r\n    handleShippingOptionChange(optionId: string): Promise<import(\"@bigcommerce/checkout-sdk/payment-integration-api\").PaymentIntegrationSelectors | undefined>;\r\n    getTotalPrice(): string;\r\n    handleCoupons(offerData: IntermediatePaymentData['offerData']): Promise<HandleCouponsOut>;\r\n    getAppliedCoupons(): GooglePayPaymentDataRequest['offerInfo'];\r\n    applyCoupon(code: string): Promise<GooglePayError | void>;\r\n    setShouldRequestShipping(isRequired: boolean): void;\r\n    protected getGooglePayInitializationData(): GooglePayInitializationData;\r\n    protected getPaymentMethod(): PaymentMethod<GooglePayInitializationData>;\r\n    protected getGatewayIdentifier(): string;\r\n    protected setGatewayIdentifier(gateway?: string): void;\r\n    private _isShippingAddressRequired;\r\n    private _mapToAddressRequestBody;\r\n    private _getFirstAndLastName;\r\n    private _getCurrencyCodeOrThrow;\r\n    private _getGooglePayShippingOption;\r\n}\r\n\r\ndeclare interface GooglePayGatewayBaseParameters {\r\n    gateway: string;\r\n}\r\n\r\ndeclare interface GooglePayGatewayBaseRequest {\r\n    apiVersion: 2;\r\n    apiVersionMinor: 0;\r\n}\r\n\r\ndeclare type GooglePayGatewayBaseResponse = GooglePayGatewayBaseRequest;\r\n\r\ndeclare type GooglePayGatewayParameters = GooglePayRegularGatewayParameters | GooglePayStripeGatewayParameters | GooglePayBraintreeGatewayParameters;\r\n\r\ndeclare type GooglePayInitializationData = GooglePayBaseInitializationData | GooglePayAdyenV2InitializationData | GooglePayAdyenV3InitializationData | GooglePayAuthorizeNetInitializationData | GooglePayStripeInitializationData | GooglePayCheckoutComInitializationData | GooglePayPayPalCommerceInitializationData | GooglePayBigCommercePaymentsInitializationData;\r\n\r\ndeclare interface GooglePayIsReadyToPayRequest extends GooglePayGatewayBaseRequest {\r\n    allowedPaymentMethods: [GooglePayBaseCardPaymentMethod];\r\n}\r\n\r\ndeclare interface GooglePayIsReadyToPayResponse {\r\n    result: boolean;\r\n}\r\n\r\n/**\r\n * The recognized keys to pass the initialization options for Google Pay.\r\n */\r\ndeclare enum GooglePayKey {\r\n    ADYEN_V2 = \"googlepayadyenv2\",\r\n    ADYEN_V3 = \"googlepayadyenv3\",\r\n    AUTHORIZE_NET = \"googlepayauthorizenet\",\r\n    BNZ = \"googlepaybnz\",\r\n    BRAINTREE = \"googlepaybraintree\",\r\n    PAYPAL_COMMERCE = \"googlepaypaypalcommerce\",\r\n    BIGCOMMERCE_PAYMENTS = \"googlepay_bigcommerce_payments\",\r\n    CHECKOUT_COM = \"googlepaycheckoutcom\",\r\n    CYBERSOURCE_V2 = \"googlepaycybersourcev2\",\r\n    ORBITAL = \"googlepayorbital\",\r\n    STRIPE = \"googlepaystripe\",\r\n    STRIPE_UPE = \"googlepaystripeupe\",\r\n    STRIPE_OCS = \"googlepaystripeocs\",\r\n    WORLDPAY_ACCESS = \"googlepayworldpayaccess\",\r\n    TD_ONLINE_MART = \"googlepaytdonlinemart\"\r\n}\r\n\r\ndeclare interface GooglePayMerchantInfo {\r\n    merchantName: string;\r\n    merchantId: string;\r\n    authJwt: string;\r\n}\r\n\r\ndeclare interface GooglePayMinBillingAddress {\r\n    name: string;\r\n    postalCode: string;\r\n    countryCode: string;\r\n    phoneNumber?: string;\r\n}\r\n\r\ndeclare interface GooglePayPayPalCommerceInitializationData extends GooglePayBaseInitializationData {\r\n    merchantId?: string;\r\n    clientId: string;\r\n    attributionId?: string;\r\n    availableAlternativePaymentMethods: FundingType;\r\n    buttonStyle?: PayPalButtonStyleOptions;\r\n    buyerCountry?: string;\r\n    clientToken?: string;\r\n    enabledAlternativePaymentMethods: FundingType;\r\n    isDeveloperModeApplicable?: boolean;\r\n    intent?: PayPalCommerceIntent;\r\n    isHostedCheckoutEnabled?: boolean;\r\n    isPayPalCreditAvailable?: boolean;\r\n    isVenmoEnabled?: boolean;\r\n    isGooglePayEnabled?: boolean;\r\n    orderId?: string;\r\n    shouldRenderFields?: boolean;\r\n    paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\r\n}\r\n\r\ndeclare interface GooglePayPaymentDataRequest extends GooglePayGatewayBaseRequest {\r\n    allowedPaymentMethods: [GooglePayCardPaymentMethod];\r\n    transactionInfo: GooglePayTransactionInfo;\r\n    merchantInfo: GooglePayMerchantInfo;\r\n    emailRequired?: boolean;\r\n    shippingAddressRequired?: boolean;\r\n    shippingAddressParameters?: {\r\n        allowedCountryCodes?: string[];\r\n        phoneNumberRequired?: boolean;\r\n    };\r\n    offerInfo?: Offers;\r\n    shippingOptionRequired?: boolean;\r\n    callbackIntents?: CallbackIntentsType[];\r\n}\r\n\r\ndeclare interface GooglePayPaymentDataResponse<T> extends GooglePayGatewayBaseResponse {\r\n    paymentMethodData: GooglePayPaymentMethodData<T>;\r\n    shippingAddress?: GooglePayFullBillingAddress;\r\n    email?: string;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the GooglePay payment method\r\n *\r\n * If the customer chooses to pay with GooglePay, they will be asked to\r\n * enter their payment details via a modal. You can hook into events emitted by\r\n * the modal by providing the callbacks listed below.\r\n *\r\n * ```html\r\n * <!-- This is where the GooglePay button will be inserted -->\r\n * <div id=\"wallet-button\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     // Using GooglePay provided by Braintree as an example\r\n *     methodId: 'googlepaybraintree',\r\n *     googlepaybraintree: {\r\n *         walletButton: 'wallet-button'\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Additional event callbacks can be registered.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'googlepaybraintree',\r\n *     googlepaybraintree: {\r\n *         walletButton: 'wallet-button',\r\n *         onError(error) {\r\n *             console.log(error);\r\n *         },\r\n *         onPaymentSelect() {\r\n *             console.log('Selected');\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Alternatively, a container-based Google Pay button can be rendered directly\r\n * in the payment step (replacing the Place Order button):\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'googlepaybraintree',\r\n *     googlepaybraintree: {\r\n *         container: 'checkout-payment-continue',\r\n *         onInit(renderButton) {\r\n *             // Hide Place Order, then render the button once container is in DOM\r\n *             renderButton();\r\n *         },\r\n *         onError(error) {\r\n *             console.log(error);\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface GooglePayPaymentInitializeOptions {\r\n    /**\r\n     * A container for loading spinner.\r\n     */\r\n    loadingContainerId?: string;\r\n    /**\r\n     * This walletButton is used to set an event listener, provide an element ID if you want\r\n     * users to be able to launch the GooglePay wallet modal by clicking on a button.\r\n     * It should be an HTML element.\r\n     */\r\n    walletButton?: string;\r\n    /**\r\n     * The ID of the container element where the Google Pay button will be rendered.\r\n     * When provided, a branded Google Pay button is created inside this container.\r\n     * Clicking the button opens the Google Pay payment sheet and, on success, submits\r\n     * the order and redirects to the order confirmation page directly — no separate\r\n     * \"Place Order\" step is needed.\r\n     */\r\n    container?: string;\r\n    /**\r\n     * The color of the Google Pay button rendered into `container`.\r\n     * Defaults to `'default'`.\r\n     */\r\n    buttonColor?: GooglePayButtonColor;\r\n    /**\r\n     * The size mode of the Google Pay button rendered into `container`.\r\n     * Defaults to `'fill'`.\r\n     */\r\n    buttonSizeMode?: GooglePayButtonSizeMode;\r\n    /**\r\n     * The type/label of the Google Pay button rendered into `container`.\r\n     * Defaults to `'pay'`.\r\n     */\r\n    buttonType?: GooglePayButtonType;\r\n    /**\r\n     * Called after the Google Pay processor is fully initialized, with a\r\n     * `renderButton` function that — when invoked — creates the Google Pay\r\n     * button inside `container`.  Use this callback to control timing: hide\r\n     * the Place Order button first, then call `renderButton()` once the\r\n     * container element is present in the DOM.\r\n     *\r\n     * Only used when `container` is provided.\r\n     */\r\n    onInit?(renderButton: () => void): void;\r\n    /**\r\n     * A callback that gets called when GooglePay fails to initialize or\r\n     * selects a payment option.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * A callback that gets called when the customer selects a payment option.\r\n     */\r\n    onPaymentSelect?(): void;\r\n}\r\n\r\ndeclare interface GooglePayPaymentMethod<T> {\r\n    type: string;\r\n    parameters: T;\r\n}\r\n\r\ndeclare interface GooglePayPaymentMethodData<T> {\r\n    description: string;\r\n    tokenizationData: {\r\n        type: 'PAYMENT_GATEWAY';\r\n        token: string;\r\n    };\r\n    type: string;\r\n    info: T;\r\n}\r\n\r\ndeclare interface GooglePayPaymentOptions {\r\n    paymentDataCallbacks?: {\r\n        onPaymentDataChanged(intermediatePaymentData: IntermediatePaymentData): onPaymentDataChangedOut;\r\n    };\r\n}\r\n\r\ndeclare class GooglePayPaymentProcessor {\r\n    private _scriptLoader;\r\n    private _gateway;\r\n    private _requestSender;\r\n    private _formPoster;\r\n    private _paymentsClient?;\r\n    private _baseRequest;\r\n    private _baseCardPaymentMethod?;\r\n    private _cardPaymentMethod?;\r\n    private _paymentDataRequest?;\r\n    private _isReadyToPayRequest?;\r\n    constructor(_scriptLoader: GooglePayScriptLoader, _gateway: GooglePayGateway, _requestSender: RequestSender, _formPoster: FormPoster);\r\n    initialize(getPaymentMethod: () => PaymentMethod<GooglePayInitializationData>, googlePayPaymentOptions?: GooglePayPaymentOptions, isBuyNowFlow?: boolean, currencyCode?: string): Promise<void>;\r\n    initializeWidget(): Promise<void>;\r\n    getNonce(methodId: string): Promise<string>;\r\n    extraPaymentData(): Promise<import(\"./types\").ExtraPaymentData | undefined>;\r\n    addPaymentButton(containerId: string, options: Omit<GooglePayButtonOptions, 'allowedPaymentMethods'>): HTMLElement | undefined;\r\n    showPaymentSheet(): Promise<GooglePayCardDataResponse>;\r\n    setExternalCheckoutXhr(provider: string, response: GooglePayCardDataResponse): Promise<void>;\r\n    setExternalCheckoutForm(provider: string, response: GooglePayCardDataResponse, siteLink?: string): Promise<void>;\r\n    mapToBillingAddressRequestBody(response: GooglePayCardDataResponse): BillingAddressRequestBody | undefined;\r\n    mapToShippingAddressRequestBody(response: GooglePayCardDataResponse): AddressRequestBody | undefined;\r\n    processAdditionalAction(error: unknown, methodId?: string): Promise<void>;\r\n    signOut(providerId: string): Promise<void>;\r\n    getCallbackTriggers(): {\r\n        [key: string]: import(\"./types\").CallbackTriggerType[];\r\n    };\r\n    setShouldRequestShipping(isRequired: boolean): void;\r\n    handleShippingAddressChange(shippingAddress: GooglePayFullBillingAddress): Promise<ShippingOptionParameters | undefined>;\r\n    handleShippingOptionChange(optionId: string): Promise<void>;\r\n    handleCoupons(offerData: IntermediatePaymentData['offerData']): Promise<HandleCouponsOut>;\r\n    getTotalPrice(): string;\r\n    _setExternalCheckout(provider: string, response: GooglePayCardDataResponse, useFormPoster?: boolean, siteLink?: string): Promise<void>;\r\n    isWebViewWithRestrictions(): boolean;\r\n    setIsWebViewExperimentOn(isWebViewExperimentOn: boolean): void;\r\n    private _prefetchGooglePaymentData;\r\n    private _determineReadinessToPay;\r\n    private _buildButtonPayloads;\r\n    private _buildWidgetPayloads;\r\n    private _getBaseCardPaymentMethod;\r\n    private _getPaymentDataRequest;\r\n    private _getIsReadyToPayRequest;\r\n    private _getPaymentsClient;\r\n    private _getOrThrow;\r\n}\r\n\r\ndeclare class GooglePayPaymentStrategy implements PaymentStrategy {\r\n    protected _paymentIntegrationService: PaymentIntegrationService;\r\n    protected _googlePayPaymentProcessor: GooglePayPaymentProcessor;\r\n    private _loadingIndicator;\r\n    private _loadingIndicatorContainer?;\r\n    private _paymentButton?;\r\n    private _clickListener?;\r\n    private _methodId?;\r\n    private _isDeinitializationBlocked;\r\n    private _isContainerMode;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService, _googlePayPaymentProcessor: GooglePayPaymentProcessor);\r\n    initialize(options?: PaymentInitializeOptions & WithGooglePayPaymentInitializeOptions): Promise<void>;\r\n    execute({ payment }: OrderRequestBody): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    protected _addPaymentButton(walletButton: string, callbacks: Omit<GooglePayPaymentInitializeOptions, 'walletButton'>): void;\r\n    protected _addPaymentButtonToContainer(googlePayOptions: GooglePayPaymentInitializeOptions): void;\r\n    protected _handleContainerButtonClick(onError: GooglePayPaymentInitializeOptions['onError']): (event: MouseEvent) => Promise<void>;\r\n    protected _handleClick({ onPaymentSelect, onError, }: Omit<GooglePayPaymentInitializeOptions, 'walletButton'>): (event: MouseEvent) => unknown;\r\n    protected _interactWithPaymentSheetAndPay(): Promise<void>;\r\n    protected _completeCheckoutFlow(): void;\r\n    protected _interactWithPaymentSheet(): Promise<void>;\r\n    protected _getMethodId(): keyof WithGooglePayPaymentInitializeOptions;\r\n    protected _getIsSignedInOrThrow(): Promise<boolean>;\r\n    protected _handleOfferTrigger(offerData: IntermediatePaymentData['offerData']): Promise<Partial<HandleCouponsOut>>;\r\n    protected _getGooglePayClientOptions(countryCode?: string): GooglePayPaymentOptions;\r\n    private _runGooglePayWidgetInteractionWithErrorHandling;\r\n    private _isDirectPayOnClickEnabled;\r\n    private _toggleBlockDeinitialization;\r\n    private _toggleLoadingIndicator;\r\n}\r\n\r\ndeclare interface GooglePayRegularGatewayParameters extends GooglePayGatewayBaseParameters {\r\n    gatewayMerchantId: string;\r\n}\r\n\r\ndeclare type GooglePayRequiredPaymentData = Pick<GooglePayPaymentDataRequest, 'emailRequired' | 'shippingAddressRequired' | 'shippingAddressParameters' | 'shippingOptionRequired'>;\r\n\r\ndeclare class GooglePayScriptLoader {\r\n    private _scriptLoader;\r\n    private _paymentsClient?;\r\n    private _window;\r\n    constructor(_scriptLoader: ScriptLoader);\r\n    getGooglePaymentsClient(testMode?: boolean, options?: GooglePayPaymentOptions): Promise<GooglePaymentsClient>;\r\n}\r\n\r\ndeclare interface GooglePaySetExternalCheckoutData {\r\n    nonce: string;\r\n    card_information: {\r\n        type: string;\r\n        number: string;\r\n        bin?: string;\r\n        isNetworkTokenized?: boolean;\r\n    };\r\n    cart_id?: string;\r\n}\r\n\r\ndeclare interface GooglePayStripeGatewayParameters extends GooglePayGatewayBaseParameters {\r\n    'stripe:version'?: string;\r\n    'stripe:publishableKey'?: string;\r\n}\r\n\r\ndeclare interface GooglePayStripeInitializationData extends GooglePayBaseInitializationData {\r\n    stripeConnectedAccount: string;\r\n    stripePublishableKey: string;\r\n    stripeVersion: string;\r\n    shopperLanguage: string;\r\n    useNewStripeJsVersion?: boolean;\r\n}\r\n\r\ndeclare interface GooglePayTransactionInfo {\r\n    /** [!] Required for EEA countries */\r\n    countryCode?: string;\r\n    currencyCode: string;\r\n    totalPriceStatus: TotalPriceStatusType;\r\n    totalPrice: string;\r\n}\r\n\r\ndeclare interface GooglePaymentsClient {\r\n    isReadyToPay(request: GooglePayIsReadyToPayRequest): Promise<GooglePayIsReadyToPayResponse>;\r\n    createButton(options: GooglePayButtonOptions): HTMLElement;\r\n    loadPaymentData(request: GooglePayPaymentDataRequest): Promise<GooglePayCardDataResponse>;\r\n    prefetchPaymentData(request: GooglePayPaymentDataRequest): void;\r\n}\r\n\r\ndeclare interface GoogleShippingOption {\r\n    id: string;\r\n    label?: string;\r\n}\r\n\r\ndeclare interface HandleCouponsOut {\r\n    newOfferInfo: GooglePayPaymentDataRequest['offerInfo'];\r\n    error?: GooglePayError;\r\n}\r\n\r\ndeclare interface IntermediatePaymentData {\r\n    callbackTrigger: CallbackTriggerType;\r\n    shippingAddress: GooglePayFullBillingAddress;\r\n    shippingOptionData: GoogleShippingOption;\r\n    offerData: {\r\n        redemptionCodes: string[];\r\n    };\r\n}\r\n\r\ndeclare interface NewOfferInfo {\r\n    newOfferInfo?: Offers;\r\n}\r\n\r\ndeclare interface NewShippingOptionParameters {\r\n    newShippingOptionParameters?: ShippingOptionParameters;\r\n}\r\n\r\ndeclare interface NewTransactionInfo {\r\n    newTransactionInfo: {\r\n        currencyCode: string;\r\n        totalPrice: string;\r\n        totalPriceStatus: TotalPriceStatusType;\r\n    };\r\n}\r\n\r\ndeclare interface OfferInfoItem {\r\n    redemptionCode: string;\r\n    description: string;\r\n}\r\n\r\ndeclare interface Offers {\r\n    offers: OfferInfoItem[];\r\n}\r\n\r\ndeclare interface PayPalButtonStyleOptions {\r\n    color?: StyleButtonColor;\r\n    shape?: StyleButtonShape;\r\n    height?: number;\r\n    label?: StyleButtonLabel;\r\n}\r\n\r\ndeclare enum PayPalCommerceIntent {\r\n    AUTHORIZE = \"authorize\",\r\n    CAPTURE = \"capture\"\r\n}\r\n\r\ndeclare interface ShippingOptionParameters {\r\n    defaultSelectedOptionId?: string;\r\n    shippingOptions?: GoogleShippingOption[];\r\n}\r\n\r\ndeclare enum StyleButtonColor {\r\n    gold = \"gold\",\r\n    blue = \"blue\",\r\n    silver = \"silver\",\r\n    black = \"black\",\r\n    white = \"white\"\r\n}\r\n\r\ndeclare enum StyleButtonLabel {\r\n    paypal = \"paypal\",\r\n    checkout = \"checkout\",\r\n    buynow = \"buynow\",\r\n    pay = \"pay\",\r\n    installment = \"installment\"\r\n}\r\n\r\ndeclare enum StyleButtonShape {\r\n    pill = \"pill\",\r\n    rect = \"rect\"\r\n}\r\n\r\ndeclare enum TotalPriceStatusType {\r\n    ESTIMATED = \"ESTIMATED\",\r\n    FINAL = \"FINAL\",\r\n    NOT_CURRENTLY_KNOWN = \"NOT_CURRENTLY_KNOWN\"\r\n}\r\n\r\n/**\r\n * The options that are required to initialize the GooglePay payment method.\r\n * They can be omitted unless you need to support GooglePay.\r\n */\r\ndeclare type WithGooglePayButtonInitializeOptions = {\r\n    [k in GooglePayKey]?: GooglePayButtonInitializeOptions;\r\n};\r\n\r\n/**\r\n * The options that are required to initialize the GooglePay payment method.\r\n * They can be omitted unless you need to support GooglePay.\r\n */\r\ndeclare type WithGooglePayCustomerInitializeOptions = {\r\n    [k in GooglePayKey]?: GooglePayCustomerInitializeOptions;\r\n};\r\n\r\n/**\r\n * The options that are required to initialize the GooglePay payment method.\r\n * They can be omitted unless you need to support GooglePay.\r\n */\r\ndeclare type WithGooglePayPaymentInitializeOptions = {\r\n    [k in GooglePayKey]?: GooglePayPaymentInitializeOptions;\r\n};\r\n\r\nexport declare const createGooglePayAdyenV2ButtonStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<GooglePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayAdyenV2CustomerStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayAdyenV2PaymentStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<GooglePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayAdyenV3ButtonStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<GooglePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayAdyenV3CustomerStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayAdyenV3PaymentStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<GooglePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayAuthorizeDotNetButtonStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<GooglePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayAuthorizeDotNetCustomerStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayAuthorizeNetPaymentStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<GooglePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayBigCommercePaymentsButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<GooglePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayBigCommercePaymentsCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayBigCommercePaymentsPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<GooglePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayBnzCustomerStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayBraintreeButtonStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<GooglePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayBraintreeCustomerStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayBraintreePaymentStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<GooglePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayCheckoutComButtonStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<GooglePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayCheckoutComCustomerStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayCheckoutComPaymentStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<GooglePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayCybersourceButtonStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<GooglePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayCybersourceCustomerStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayCybersourcePaymentStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<GooglePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayOrbitalButtonStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<GooglePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayOrbitalCustomerStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayOrbitalPaymentStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<GooglePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayPPCPPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<GooglePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayPayPalCommerceButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<GooglePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayPayPalCommerceCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayStripeButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<GooglePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayStripeCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayStripePaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<GooglePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayStripeUpeCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayTdOnlineMartButtonStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<GooglePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayTdOnlineMartCustomerStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayTdOnlineMartPaymentStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<GooglePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayWorldpayAccessButtonStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<GooglePayButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayWorldpayAccessCustomerStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<GooglePayCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createGooglePayWorldpayAccessPaymentStrategy: import(\"../../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<GooglePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\ndeclare type onPaymentDataChangedOut = Promise<(NewTransactionInfo & NewShippingOptionParameters & NewOfferInfo & {\r\n    error?: GooglePayError;\r\n}) | void>;\r\n"
  },
  {
    "path": "dist/types/integrations/humm.d.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare class HummPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private formPoster;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, formPoster: FormPoster);\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    initialize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private handleOffsiteRedirectResponse;\r\n    private isOffsiteRedirectResponse;\r\n}\r\n\r\nexport declare const createHummPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<HummPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/klarna.d.ts",
    "content": "import { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { RequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { RequestSender } from '@bigcommerce/request-sender';\r\nimport { Response } from '@bigcommerce/request-sender';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\n\r\ndeclare interface KlarnaAddress {\r\n    street_address: string;\r\n    street_address2?: string;\r\n    city: string;\r\n    country: string;\r\n    given_name: string;\r\n    family_name: string;\r\n    phone?: string;\r\n    postal_code: string;\r\n    region: string;\r\n    email?: string;\r\n}\r\n\r\ndeclare interface KlarnaAddress_2 {\r\n    street_address: string;\r\n    street_address2?: string;\r\n    city: string;\r\n    country: string;\r\n    given_name: string;\r\n    family_name: string;\r\n    phone?: string;\r\n    postal_code: string;\r\n    region: string;\r\n    email?: string;\r\n    organization_name?: string;\r\n}\r\n\r\ndeclare interface KlarnaAuthorizationResponse {\r\n    authorization_token: string;\r\n    approved: boolean;\r\n    show_form: boolean;\r\n    error?: {\r\n        invalid_fields: string[];\r\n    };\r\n}\r\n\r\ndeclare interface KlarnaAuthorizationResponse_2 {\r\n    authorization_token?: string;\r\n    approved: boolean;\r\n    show_form?: boolean;\r\n    error?: {\r\n        invalid_fields: string[];\r\n    };\r\n}\r\n\r\ndeclare interface KlarnaAuthorizeOptions {\r\n    instance_id?: string;\r\n    payment_method_category: string;\r\n}\r\n\r\ndeclare interface KlarnaCredit {\r\n    authorize(data: KlarnaUpdateSessionParams, callback: (res: KlarnaAuthorizationResponse) => void): void;\r\n    init(params: KlarnaInitParams): void;\r\n    load(params: KlarnaLoadParams, callback: (res: KlarnaLoadResponse) => void): void;\r\n}\r\n\r\ndeclare interface KlarnaInitParams {\r\n    client_token: string;\r\n}\r\n\r\ndeclare interface KlarnaInitParams_2 {\r\n    client_token: string;\r\n}\r\n\r\ndeclare interface KlarnaLoadParams {\r\n    container: string;\r\n    payment_method_category?: string;\r\n    payment_method_categories?: string;\r\n    instance_id?: string;\r\n    preferred_payment_method?: string;\r\n}\r\n\r\ndeclare interface KlarnaLoadParams_2 {\r\n    container: string;\r\n    payment_method_category?: string;\r\n    payment_method_categories?: string;\r\n    instance_id?: string;\r\n    preferred_payment_method?: string;\r\n}\r\n\r\ndeclare interface KlarnaLoadResponse {\r\n    show_form: boolean;\r\n    error?: {\r\n        invalid_fields: string[];\r\n    };\r\n}\r\n\r\ndeclare interface KlarnaLoadResponse_2 {\r\n    show_form: boolean;\r\n    error?: {\r\n        invalid_fields: string[];\r\n    };\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Klarna payment method.\r\n *\r\n * When Klarna is initialized, a widget will be inserted into the DOM. The\r\n * widget has a list of payment options for the customer to choose from.\r\n *\r\n * ```html\r\n * <!-- This is where the widget will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'klarna',\r\n *     klarna: {\r\n *         container: 'container'\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * An additional event callback can be registered.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'klarnav2',\r\n *     klarnav2: {\r\n *         container: 'container',\r\n *         onLoad(response) {\r\n *             console.log(response);\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface KlarnaPaymentInitializeOptions {\r\n    /**\r\n     * The ID of a container which the payment widget should insert into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called when the widget is loaded and ready to be\r\n     * interacted with.\r\n     *\r\n     * @param response - The result of the initialization. It indicates whether\r\n     * or not the widget is loaded successfully.\r\n     */\r\n    onLoad?(response: KlarnaLoadResponse): void;\r\n}\r\n\r\ndeclare class KlarnaPaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private klarnaScriptLoader;\r\n    private klarnaCredit?;\r\n    private unsubscribe?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, klarnaScriptLoader: KlarnaScriptLoader);\r\n    initialize(options: PaymentInitializeOptions & WithKlarnaPaymentInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    private loadWidget;\r\n    private getUpdateSessionData;\r\n    private needsStateCode;\r\n    private mapToKlarnaAddress;\r\n    private authorize;\r\n}\r\n\r\ndeclare interface KlarnaPayments {\r\n    authorize(options: KlarnaAuthorizeOptions, data: KlarnaUpdateSessionParams_2, callback: (res: KlarnaAuthorizationResponse_2) => void): void;\r\n    init(params: KlarnaInitParams_2): void;\r\n    load(params: KlarnaLoadParams_2, callback: (res: KlarnaLoadResponse_2) => void): void;\r\n}\r\n\r\ndeclare class KlarnaScriptLoader {\r\n    private scriptLoader;\r\n    private klarnaWindow;\r\n    constructor(scriptLoader: ScriptLoader, klarnaWindow?: KlarnaWindow);\r\n    load(): Promise<KlarnaCredit>;\r\n}\r\n\r\ndeclare type KlarnaUpdateSessionParams = Partial<{\r\n    billing_address: KlarnaAddress;\r\n    shipping_address: KlarnaAddress;\r\n}>;\r\n\r\ndeclare type KlarnaUpdateSessionParams_2 = Partial<{\r\n    billing_address: KlarnaAddress_2;\r\n    shipping_address: KlarnaAddress_2;\r\n}>;\r\n\r\n/**\r\n * A set of options that are required to initialize the KlarnaV2 payment method.\r\n *\r\n * When KlarnaV2 is initialized, a list of payment options will be displayed for the customer to choose from.\r\n * Each one with its own widget.\r\n *\r\n * ```html\r\n * <!-- This is where the widget will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'klarnav2',\r\n *     klarnav2: {\r\n *         container: 'container'\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * An additional event callback can be registered.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'klarnav2',\r\n *     klarnav2: {\r\n *         container: 'container',\r\n *         onLoad(response) {\r\n *             console.log(response);\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface KlarnaV2PaymentInitializeOptions {\r\n    /**\r\n     * The ID of a container which the payment widget should insert into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called when the widget is loaded and ready to be\r\n     * interacted with.\r\n     *\r\n     * @param response - The result of the initialization. It indicates whether\r\n     * or not the widget is loaded successfully.\r\n     */\r\n    onLoad?(response: KlarnaLoadResponse_2): void;\r\n}\r\n\r\ndeclare class KlarnaV2PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private klarnav2ScriptLoader;\r\n    private klarnav2TokenUpdater;\r\n    private klarnaPayments?;\r\n    private unsubscribe?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, klarnav2ScriptLoader: KlarnaV2ScriptLoader, klarnav2TokenUpdater: KlarnaV2TokenUpdater);\r\n    initialize(options: PaymentInitializeOptions & WithKlarnaV2PaymentInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    private loadPaymentsWidget;\r\n    private getUpdateSessionData;\r\n    private needsStateCode;\r\n    private isKlarnaMultipleRadioButtonEnabled;\r\n    private mapToKlarnaAddress;\r\n    private authorizeOrThrow;\r\n}\r\n\r\ndeclare class KlarnaV2ScriptLoader {\r\n    private scriptLoader;\r\n    private klarnaWindow;\r\n    constructor(scriptLoader: ScriptLoader, klarnaWindow?: KlarnaV2Window);\r\n    load(): Promise<KlarnaPayments>;\r\n}\r\n\r\ndeclare class KlarnaV2TokenUpdater {\r\n    private requestSender;\r\n    constructor(requestSender: RequestSender);\r\n    updateClientToken(gatewayId: string, { timeout, params }?: RequestOptions): Promise<Response<PaymentMethod>>;\r\n    klarnaOrderInitialization(cartId: string, clientToken: string | undefined): Promise<void>;\r\n}\r\n\r\ndeclare interface KlarnaV2Window extends Window {\r\n    Klarna?: {\r\n        Payments: KlarnaPayments;\r\n    };\r\n}\r\n\r\ndeclare interface KlarnaWindow extends Window {\r\n    Klarna?: {\r\n        Credit: KlarnaCredit;\r\n    };\r\n}\r\n\r\ndeclare interface WithKlarnaPaymentInitializeOptions {\r\n    klarna?: KlarnaPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithKlarnaV2PaymentInitializeOptions {\r\n    klarnav2?: KlarnaV2PaymentInitializeOptions;\r\n}\r\n\r\nexport declare const createKlarnaPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<KlarnaPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createKlarnaV2PaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<KlarnaV2PaymentStrategy>, {\r\n    gateway: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/legacy.d.ts",
    "content": "import { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare class LegacyPaymentStrategy implements PaymentStrategy {\r\n    private _paymentIntegrationService;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService);\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    initialize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n}\r\n\r\nexport declare const createLegacyPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<LegacyPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/mollie.d.ts",
    "content": "import { HostedFormOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { OrderPaymentRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\n\r\ndeclare interface MollieClient {\r\n    createComponent(type: string, options?: object): MollieElement;\r\n    createToken(): Promise<MollieToken>;\r\n}\r\n\r\ndeclare interface MollieElement {\r\n    /**\r\n     * The `element.mount` method attaches your element to the DOM.\r\n     */\r\n    mount(domElement: string | HTMLElement): void;\r\n    /**\r\n     * Unmounts the element from the DOM.\r\n     * Call `element.mount` to re-attach it to the DOM.\r\n     */\r\n    unmount(): void;\r\n    /**\r\n     * Components can listen to several events.\r\n     * The callback receives an object with all the related information.\r\n     * blur | focus | change\r\n     */\r\n    addEventListener(event: 'blur' | 'focus' | 'change', callback: (event: Event) => void): void;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Mollie payment method.\r\n *\r\n * Once Mollie payment is initialized, credit card form fields are provided by the\r\n * payment provider as IFrames, these will be inserted into the current page. These\r\n * options provide a location and styling for each of the form fields.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *      methodId: 'mollie',\r\n *      mollie: {\r\n *          containerId: 'container',\r\n *          cardNumberId: '',\r\n *          cardHolderId: '',\r\n *          cardCvcId: '',\r\n *          cardExpiryId: '',\r\n *          styles : {\r\n *              base: {\r\n *                  color: '#fff'\r\n *              }\r\n *          }\r\n *      }\r\n * });\r\n * ```\r\n */\r\ndeclare interface MolliePaymentInitializeOptions {\r\n    /**\r\n     * ContainerId is use in Mollie for determined either its showing or not the\r\n     * container, because when Mollie has Vaulted Instruments it gets hide,\r\n     * and shows an error because can't mount Provider Components\r\n     */\r\n    containerId?: string;\r\n    /**\r\n     * The location to insert Mollie Component\r\n     */\r\n    cardNumberId: string;\r\n    /**\r\n     * The location to insert Mollie Component\r\n     */\r\n    cardHolderId: string;\r\n    /**\r\n     * The location to insert Mollie Component\r\n     */\r\n    cardCvcId: string;\r\n    /**\r\n     * The location to insert Mollie Component\r\n     */\r\n    cardExpiryId: string;\r\n    /**\r\n     * A set of styles required for the mollie components\r\n     */\r\n    styles: object;\r\n    /**\r\n     * Hosted Form Validation Options\r\n     */\r\n    form?: HostedFormOptions;\r\n    unsupportedMethodMessage?: string;\r\n    disableButton(disabled: boolean): void;\r\n}\r\n\r\ndeclare class MolliePaymentStrategy implements PaymentStrategy {\r\n    private mollieScriptLoader;\r\n    private paymentIntegrationService;\r\n    private initializeOptions?;\r\n    private mollieClient?;\r\n    private cardHolderElement?;\r\n    private cardNumberElement?;\r\n    private verificationCodeElement?;\r\n    private expiryDateElement?;\r\n    private locale?;\r\n    private hostedForm?;\r\n    private unsubscribe?;\r\n    constructor(mollieScriptLoader: MollieScriptLoader, paymentIntegrationService: PaymentIntegrationService);\r\n    initialize(options: PaymentInitializeOptions & WithMolliePaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(options?: PaymentRequestOptions): Promise<void>;\r\n    protected executeWithCC(payment: OrderPaymentRequestBody): Promise<void>;\r\n    protected executeWithVaulted(payment: OrderPaymentRequestBody): Promise<void>;\r\n    protected executeWithAPM(payment: OrderPaymentRequestBody): Promise<void>;\r\n    private isCreditCard;\r\n    private shouldShowTSVHostedForm;\r\n    private mountCardVerificationfields;\r\n    private isHostedPaymentFormEnabled;\r\n    private isHostedFieldAvailable;\r\n    private processAdditionalAction;\r\n    private getInitializeOptions;\r\n    private loadMollieJs;\r\n    private getMollieClient;\r\n    private getShopperLocale;\r\n    /**\r\n     * ContainerId is use in Mollie for determined either its showing or not the\r\n     * container, because when Mollie has Vaulted Instruments it gets hide,\r\n     * and shows an error because can't mount Provider Components\r\n     *\r\n     * We had to add a settimeout because Mollie sets de tab index after mounting\r\n     * each component, but without a setTimeOut Mollie is not able to find the\r\n     * components as they are hidden so we need to wait until they are shown\r\n     */\r\n    private mountElements;\r\n    private loadPaymentMethodsAllowed;\r\n}\r\n\r\ndeclare class MollieScriptLoader {\r\n    private scriptLoader;\r\n    private mollieHostWindow;\r\n    constructor(scriptLoader: ScriptLoader, mollieHostWindow?: Window);\r\n    load(merchantId: string, locale: string, testmode: boolean): Promise<MollieClient>;\r\n}\r\n\r\ndeclare interface MollieToken {\r\n    token: string;\r\n    error?: object;\r\n}\r\n\r\ndeclare interface WithMolliePaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Mollie payment\r\n     * method. They can be omitted unless you need to support Mollie.\r\n     */\r\n    mollie?: MolliePaymentInitializeOptions;\r\n}\r\n\r\nexport declare const createMolliePaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<MolliePaymentStrategy>, {\r\n    gateway: string;\r\n    id?: undefined;\r\n} | {\r\n    gateway: string;\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/moneris.d.ts",
    "content": "import { HostedFormOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\n/**\r\n * A set of options that are required to initialize the Moneris payment method.\r\n *\r\n * Once Moneris payment is initialized, a credit card payment form is provided by the\r\n * payment provider as an IFrame, it will be inserted into the current page. These\r\n * options provide a location and styling for the payment form.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *      methodId: 'moneris',\r\n *      moneris: {\r\n *          containerId: 'container',\r\n *          style : {\r\n *              cssBody: 'background:white;';\r\n *              cssTextbox: 'border-width:2px;';\r\n *              cssTextboxCardNumber: 'width:140px;';\r\n *              cssTextboxExpiryDate: 'width:40px;';\r\n *              cssTextboxCVV: 'width:40px';\r\n *          }\r\n *      }\r\n * });\r\n * ```\r\n */\r\ndeclare interface MonerisPaymentInitializeOptions {\r\n    /**\r\n     * The ID of a container where the Moneris iframe component should be mounted\r\n     */\r\n    containerId: string;\r\n    /**\r\n     * The styling props to apply to the iframe component\r\n     */\r\n    style?: MonerisStylingProps;\r\n    /**\r\n     * Hosted Form Validation Options\r\n     */\r\n    form?: HostedFormOptions;\r\n}\r\n\r\ndeclare class MonerisPaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private iframe?;\r\n    private initializeOptions?;\r\n    private windowEventListener?;\r\n    private hostedForm?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService);\r\n    initialize(options: PaymentInitializeOptions & WithMonerisPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentInitializeOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private executeWithCC;\r\n    private executeWithVaulted;\r\n    private shouldShowTSVHostedForm;\r\n    private isHostedPaymentFormEnabled;\r\n    private isHostedFieldAvailable;\r\n    private getInitializeOptions;\r\n    private mountCardVerificationfields;\r\n    private createIframe;\r\n    private handleMonerisResponse;\r\n    private monerisURL;\r\n}\r\n\r\n/**\r\n * A set of stringified CSS to apply to Moneris' IFrame fields.\r\n * CSS attributes should be converted to string.\r\n * Please note that ClassNames are not supported.\r\n *\r\n * IE:\r\n * ```js\r\n * {\r\n *      cssBody: 'background:white;';\r\n *      cssTextbox: 'border-width:2px;';\r\n *      cssTextboxCardNumber: 'width:140px;';\r\n *      cssTextboxExpiryDate: 'width:40px;';\r\n *      cssTextboxCVV: 'width:40px;';\r\n * }\r\n * ```\r\n *\r\n * When using several attributes use semicolon to separate each one.\r\n * IE: 'background:white;width:40px;'\r\n */\r\ndeclare interface MonerisStylingProps {\r\n    /**\r\n     * Stringified CSS to apply to the body of the IFrame.\r\n     */\r\n    cssBody?: string;\r\n    /**\r\n     * Stringified CSS to apply to each of input fields.\r\n     */\r\n    cssTextbox?: string;\r\n    /**\r\n     * Stringified CSS to apply to the card's number field.\r\n     */\r\n    cssTextboxCardNumber?: string;\r\n    /**\r\n     * Stringified CSS to apply to the card's expiry field.\r\n     */\r\n    cssTextboxExpiryDate?: string;\r\n    /**\r\n     * Stringified CSS to apply to the card's CVV field.\r\n     */\r\n    cssTextboxCVV?: string;\r\n    /**\r\n     * Stringified CSS to apply to input labels\r\n     */\r\n    cssInputLabel?: string;\r\n}\r\n\r\ndeclare interface WithMonerisPaymentInitializeOptions {\r\n    moneris?: MonerisPaymentInitializeOptions;\r\n}\r\n\r\nexport declare const createMonerisPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<MonerisPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/no-payment.d.ts",
    "content": "import { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare class NoPaymentDataRequiredPaymentStrategy implements PaymentStrategy {\r\n    private _paymentIntegrationService;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService);\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    initialize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n}\r\n\r\nexport declare const createNoPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<NoPaymentDataRequiredPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/offline.d.ts",
    "content": "import { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare class OfflinePaymentStrategy implements PaymentStrategy {\r\n    private _paymentIntegrationService;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService);\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    initialize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n}\r\n\r\nexport declare const createOfflinePaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<OfflinePaymentStrategy>, {\r\n    type: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/offsite.d.ts",
    "content": "import { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare class OffsitePaymentStrategy implements PaymentStrategy {\r\n    private _paymentIntegrationService;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService);\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(options?: PaymentRequestOptions): Promise<void>;\r\n    initialize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _shouldSubmitFullPayload;\r\n}\r\n\r\nexport declare const createOffsitePaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<OffsitePaymentStrategy>, {\r\n    type: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/paypal-commerce.d.ts",
    "content": "import { BillingAddressRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { BuyNowCartRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CardInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { Cart } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerCredentials } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ExecutePaymentMethodCheckoutOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { FormPoster } from '@bigcommerce/form-poster';\r\nimport { HostedFormOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { HostedInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PayPalFastlaneStylesOption } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\r\nimport { PayPalFastlaneUtils } from '@bigcommerce/checkout-sdk/paypal-utils';\r\nimport { PayPalIntegrationService } from '@bigcommerce/checkout-sdk/paypal-utils';\r\nimport { PayPalSdkScriptLoader } from '@bigcommerce/checkout-sdk/paypal-utils';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaypalButtonCreationService } from '@bigcommerce/checkout-sdk/paypal-utils';\r\nimport { RequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { RequestSender } from '@bigcommerce/request-sender';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\nimport { ShippingOption } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { VaultedInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare interface AllowedPaymentMethods {\r\n    type: string;\r\n    parameters: {\r\n        allowedAuthMethods: string[];\r\n        allowedCardNetworks: string[];\r\n        billingAddressRequired: boolean;\r\n        assuranceDetailsRequired: boolean;\r\n        billingAddressParameters: {\r\n            format: string;\r\n        };\r\n    };\r\n    tokenizationSpecification: {\r\n        type: string;\r\n        parameters: {\r\n            gateway: string;\r\n            gatewayMerchantId: string;\r\n        };\r\n    };\r\n}\r\n\r\ndeclare interface ApproveCallbackActions {\r\n    order: {\r\n        get: () => Promise<PayPalOrderDetails>;\r\n    };\r\n}\r\n\r\ndeclare interface ApproveCallbackPayload {\r\n    orderID?: string;\r\n}\r\n\r\ndeclare interface BirthDate {\r\n    getFullYear(): number;\r\n    getDate(): number;\r\n    getMonth(): number;\r\n}\r\n\r\ndeclare interface ClickCallbackActions {\r\n    reject(): void;\r\n    resolve(): void;\r\n}\r\n\r\ndeclare interface ClickCallbackPayload {\r\n    fundingSource: string;\r\n}\r\n\r\ndeclare interface CompleteCallbackDataPayload {\r\n    intent: string;\r\n    orderID: string;\r\n}\r\n\r\ndeclare interface ConfirmOrderData {\r\n    tokenizationData: {\r\n        type: string;\r\n        token: string;\r\n    };\r\n    info: {\r\n        cardNetwork: string;\r\n        cardDetails: string;\r\n    };\r\n    type: string;\r\n}\r\n\r\n/**\r\n *\r\n * PayPal Commerce Funding sources\r\n *\r\n */\r\ndeclare type FundingType = string[];\r\n\r\ndeclare interface GooglePayConfig {\r\n    allowedPaymentMethods: AllowedPaymentMethods[];\r\n    apiVersion: number;\r\n    apiVersionMinor: number;\r\n    countryCode: string;\r\n    isEligible: boolean;\r\n    merchantInfo: {\r\n        merchantId: string;\r\n        merchantOrigin: string;\r\n    };\r\n}\r\n\r\ndeclare interface InitCallbackActions {\r\n    disable(): void;\r\n    enable(): void;\r\n}\r\n\r\ndeclare interface InitCallbackPayload {\r\n    correlationID: string;\r\n}\r\n\r\ndeclare interface LegalFunding {\r\n    FUNDING: {\r\n        PAY_UPON_INVOICE: string;\r\n    };\r\n}\r\n\r\ndeclare enum LiabilityShiftEnum {\r\n    Possible = \"POSSIBLE\",\r\n    No = \"NO\",\r\n    Unknown = \"UNKNOWN\",\r\n    Yes = \"YES\"\r\n}\r\n\r\ndeclare interface PayPalAddress {\r\n    city: string;\r\n    countryCode: string;\r\n    postalCode: string;\r\n    state: string;\r\n}\r\n\r\ndeclare interface PayPalBNPLConfigurationItem {\r\n    id: string;\r\n    name: string;\r\n    status: boolean;\r\n    styles: Record<string, string>;\r\n}\r\n\r\ndeclare interface PayPalButtonStyleOptions {\r\n    color?: StyleButtonColor;\r\n    shape?: StyleButtonShape;\r\n    height?: number;\r\n    label?: StyleButtonLabel;\r\n}\r\n\r\n/**\r\n *\r\n * PayPal Commerce BuyNow\r\n *\r\n */\r\ndeclare interface PayPalBuyNowInitializeOptions {\r\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPal Commerce payment\r\n * method for presenting its PayPal button.\r\n *\r\n * Please note that the minimum version of checkout-sdk is 1.100\r\n *\r\n * Also, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the PayPal button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * <!-- This is where the PayPal alternative payment methods fields will be inserted.  -->\r\n * <div id=\"apm-fields-container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     gatewayId: 'paypalcommercealternativemethods',\r\n *     methodId: 'sepa',\r\n *     paypalcommercealternativemethods: {\r\n *         container: '#container',\r\n *         apmFieldsContainer: '#apm-fields-container',\r\n *         apmFieldsStyles: {\r\n *             base: {\r\n *                 backgroundColor: 'transparent',\r\n *             },\r\n *             input: {\r\n *                 backgroundColor: 'white',\r\n *                 fontSize: '1rem',\r\n *                 color: '#333',\r\n *                 borderColor: '#d9d9d9',\r\n *                 borderRadius: '4px',\r\n *                 borderWidth: '1px',\r\n *                 padding: '1rem',\r\n *             },\r\n *             invalid: {\r\n *                 color: '#ed6a6a',\r\n *             },\r\n *             active: {\r\n *                 color: '#4496f6',\r\n *             },\r\n *         },\r\n *         clientId: 'YOUR_CLIENT_ID',\r\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'paypalcommercealternativemethods', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommerceAlternativeMethodsPaymentOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * The CSS selector of a container where the alternative payment methods fields widget should be inserted into.\r\n     * It's necessary to specify this parameter when using Alternative Payment Methods.\r\n     * Without it alternative payment methods will not work.\r\n     */\r\n    apmFieldsContainer?: string;\r\n    /**\r\n     * Object with styles to customize alternative payment methods fields.\r\n     */\r\n    apmFieldsStyles?: PayPalCommerceFieldsStyleOptions;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error | unknown): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm(): void;\r\n    /**\r\n     * A callback that gets called\r\n     * when Smart Payment Button is initialized.\r\n     */\r\n    onInitButton(actions: InitCallbackActions): Promise<void>;\r\n}\r\n\r\ndeclare class PayPalCommerceAlternativeMethodsPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalCommerceIntegrationService;\r\n    private paypalSdkScriptLoader;\r\n    private loadingIndicator;\r\n    private pollingInterval;\r\n    private maxPollingIntervalTime;\r\n    private loadingIndicatorContainer?;\r\n    private orderId?;\r\n    private paypalButton?;\r\n    private paypalApms?;\r\n    private pollingTimer;\r\n    private stopPolling;\r\n    private isOrderApprovedProcessing;\r\n    private paypalcommercealternativemethods?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalCommerceIntegrationService: PayPalIntegrationService, paypalSdkScriptLoader: PayPalSdkScriptLoader, loadingIndicator: LoadingIndicator, pollingInterval?: number, maxPollingIntervalTime?: number);\r\n    initialize(options: PaymentInitializeOptions & WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    /**\r\n     *\r\n     * Polling mechanism\r\n     *\r\n     *\r\n     * */\r\n    private initializePollingMechanism;\r\n    private deinitializePollingMechanism;\r\n    private resetPollingMechanism;\r\n    private reinitializeStrategy;\r\n    private handleError;\r\n    /**\r\n     *\r\n     * Button methods/callbacks\r\n     *\r\n     * */\r\n    private renderButton;\r\n    private onCreateOrder;\r\n    private handleApprove;\r\n    private handleFailure;\r\n    /**\r\n     *\r\n     * Fields methods\r\n     *\r\n     * */\r\n    private renderFields;\r\n    /**\r\n     *\r\n     * Loading Indicator methods\r\n     *\r\n     * */\r\n    private toggleLoadingIndicator;\r\n    /**\r\n     *\r\n     * Utils\r\n     *\r\n     * */\r\n    private isNonInstantPaymentMethod;\r\n    private getPaypalAmpsSdkOrThrow;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize PayPalCommerce in cart or product details page.\r\n *\r\n * When PayPalCommerce is initialized, an PayPalCommerce button will be inserted into the\r\n * DOM. When a customer clicks on it, it will trigger Apple sheet.\r\n */\r\ndeclare interface PayPalCommerceButtonInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare class PayPalCommerceButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalIntegrationService;\r\n    private paypalButtonCreationService;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalIntegrationService: PayPalIntegrationService, paypalButtonCreationService: PaypalButtonCreationService);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithPayPalCommerceButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private renderButton;\r\n}\r\n\r\n/**\r\n *\r\n * PayPal Commerce Buttons\r\n *\r\n */\r\ndeclare interface PayPalCommerceButtons {\r\n    render(id: string): void;\r\n    close(): void;\r\n    isEligible(): boolean;\r\n    hasReturned?(): boolean;\r\n    resume?(): void;\r\n}\r\n\r\ndeclare interface PayPalCommerceButtonsOptions {\r\n    experience?: string;\r\n    style?: PayPalButtonStyleOptions;\r\n    fundingSource: string;\r\n    createOrder(): Promise<string>;\r\n    onApprove(data: ApproveCallbackPayload, actions: ApproveCallbackActions): Promise<boolean | void> | void;\r\n    onInit?(data: InitCallbackPayload, actions: InitCallbackActions): Promise<void>;\r\n    onComplete?(data: CompleteCallbackDataPayload): Promise<void>;\r\n    onClick?(data: ClickCallbackPayload, actions: ClickCallbackActions): Promise<void> | void;\r\n    onError?(error: Error): void;\r\n    onCancel?(): void;\r\n    onShippingAddressChange?(data: ShippingAddressChangeCallbackPayload): Promise<void>;\r\n    onShippingOptionsChange?(data: ShippingOptionChangeCallbackPayload): Promise<void>;\r\n}\r\n\r\ndeclare interface PayPalCommerceCardFields {\r\n    isEligible(): boolean;\r\n    CVVField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\r\n    ExpiryField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\r\n    NameField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\r\n    NumberField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\r\n    submit(config?: PayPalCommerceCardFieldsSubmitConfig): Promise<void>;\r\n    getState(): Promise<PayPalCommerceCardFieldsState>;\r\n}\r\n\r\ndeclare type PayPalCommerceCardFieldsCard = PayPalCommerceHostedFieldsCard;\r\n\r\n/**\r\n *\r\n * PayPal Commerce SDK\r\n *\r\n */\r\ndeclare interface PayPalCommerceCardFieldsConfig {\r\n    inputEvents: {\r\n        onChange(data: PayPalCommerceCardFieldsState): void;\r\n        onFocus(data: PayPalCommerceCardFieldsState): void;\r\n        onBlur(data: PayPalCommerceCardFieldsState): void;\r\n        onInputSubmitRequest(data: PayPalCommerceCardFieldsState): void;\r\n    };\r\n    createVaultSetupToken?: (data: PayPalCommerceCardFieldsState) => void;\r\n    createOrder?: () => Promise<string>;\r\n    style: PayPalCommerceHostedFieldsRenderOptions['styles'];\r\n    onApprove(data: PayPalCommerceCardFieldsOnApproveData): void;\r\n    onError(): void;\r\n}\r\n\r\ndeclare interface PayPalCommerceCardFieldsFieldData {\r\n    isFocused: boolean;\r\n    isEmpty: boolean;\r\n    isValid: boolean;\r\n    isPotentiallyValid: boolean;\r\n}\r\n\r\ndeclare interface PayPalCommerceCardFieldsOnApproveData {\r\n    vaultSetupToken?: string;\r\n    orderID: string;\r\n    liabilityShift?: LiabilityShiftEnum;\r\n}\r\n\r\ndeclare interface PayPalCommerceCardFieldsState {\r\n    cards: PayPalCommerceCardFieldsCard[];\r\n    emittedBy: string;\r\n    isFormValid: boolean;\r\n    errors: string[];\r\n    fields: {\r\n        cardCvvField: PayPalCommerceCardFieldsFieldData;\r\n        cardNumberField: PayPalCommerceCardFieldsFieldData;\r\n        cardNameField?: PayPalCommerceCardFieldsFieldData;\r\n        cardExpiryField: PayPalCommerceCardFieldsFieldData;\r\n    };\r\n}\r\n\r\ndeclare interface PayPalCommerceCardFieldsSubmitConfig {\r\n    billingAddress: {\r\n        company?: string;\r\n        addressLine1: string;\r\n        addressLine2?: string;\r\n        adminArea1: string;\r\n        adminArea2: string;\r\n        postalCode: string;\r\n        countryCode?: string;\r\n    };\r\n}\r\n\r\ndeclare interface PayPalCommerceCreditButtonInitializeOptions {\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that are required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare class PayPalCommerceCreditButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalIntegrationService;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalIntegrationService: PayPalIntegrationService);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithPayPalCommerceCreditButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private renderButton;\r\n    private handleClick;\r\n    private onHostedCheckoutApprove;\r\n    private onShippingAddressChange;\r\n    private onShippingOptionsChange;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPal Commerce payment\r\n * method for presenting its credit card form.\r\n *\r\n * ```html\r\n * <!-- These containers are where the hosted (iframed) credit card fields will be inserted -->\r\n * <div id=\"card-number\"></div>\r\n * <div id=\"card-name\"></div>\r\n * <div id=\"card-expiry\"></div>\r\n * <div id=\"card-code\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalcommercecreditcard',\r\n *     paypalcommercecreditcard: {\r\n *         form: {\r\n *             fields: {\r\n *                 cardNumber: { containerId: 'card-number' },\r\n *                 cardName: { containerId: 'card-name' },\r\n *                 cardExpiry: { containerId: 'card-expiry' },\r\n *                 cardCode: { containerId: 'card-code' },\r\n *             },\r\n *         },\r\n *         onCreditCardFieldsRenderingError: (error) => handleError(error),\r\n *     },\r\n * });\r\n * ```\r\n *\r\n * Additional options can be passed in to customize the fields and register\r\n * event callbacks.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalcommercecreditcard',\r\n *     paypalcommercecreditcard: {\r\n *         form: {\r\n *             fields: {\r\n *                 cardNumber: { containerId: 'card-number', placeholder: 'Number of card' },\r\n *                 cardName: { containerId: 'card-name', placeholder: 'Name of card' },\r\n *                 cardExpiry: { containerId: 'card-expiry', placeholder: 'Expiry of card' },\r\n *                 cardCode: { containerId: 'card-code', placeholder: 'Code of card' },\r\n *             },\r\n *             styles: {\r\n *                 default: {\r\n *                     color: '#000',\r\n *                 },\r\n *                 error: {\r\n *                     color: '#f00',\r\n *                 },\r\n *                 focus: {\r\n *                     color: '#0f0',\r\n *                 },\r\n *             },\r\n *             onBlur({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onFocus({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onEnter({ fieldType }) {\r\n *                 console.log(fieldType);\r\n *             },\r\n *             onCardTypeChange({ cardType }) {\r\n *                 console.log(cardType);\r\n *             },\r\n *             onValidate({ errors, isValid }) {\r\n *                 console.log(errors);\r\n *                 console.log(isValid);\r\n *             },\r\n *         },\r\n *         onCreditCardFieldsRenderingError: (error) => handleError(error),\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommerceCreditCardsPaymentInitializeOptions {\r\n    /**\r\n     * The form is data for Credit Card Form\r\n     */\r\n    form: HostedFormOptions;\r\n    /**\r\n     * The callback that gets called when there is an issue with rendering credit card fields\r\n     */\r\n    onCreditCardFieldsRenderingError?: (error: unknown) => void;\r\n    /**\r\n     * The callback that gets called when PayPal SDK load complete\r\n     */\r\n    onLoadComplete?: () => void;\r\n}\r\n\r\ndeclare class PayPalCommerceCreditCardsPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalIntegrationService;\r\n    private paypalSdkScriptLoader;\r\n    private paypalFastlaneUtils;\r\n    private executionPaymentData?;\r\n    private isCreditCardForm?;\r\n    private isCreditCardVaultedForm?;\r\n    private cardFields?;\r\n    private cvvField?;\r\n    private expiryField?;\r\n    private numberField?;\r\n    private nameField?;\r\n    private hostedFormOptions?;\r\n    private returnedOrderId?;\r\n    private returnedVaultedToken?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalIntegrationService: PayPalIntegrationService, paypalSdkScriptLoader: PayPalSdkScriptLoader, paypalFastlaneUtils: PayPalFastlaneUtils);\r\n    initialize(options: PaymentInitializeOptions & WithPayPalCommerceCreditCardsPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    /**\r\n     *\r\n     * Submit Payment Payload preparing method\r\n     *\r\n     * `vaultedToken` is used when we pay with vaulted instrument (with trusted shipping address and untrusted)\r\n     * `setupToken` is used when we pay with vaulted instrument (untrusted shipping address)\r\n     * `orderId` is used in every case (basic card payment, trusted shipping address and untrusted)\r\n     */\r\n    private preparePaymentPayload;\r\n    /**\r\n     *\r\n     * Card fields initialize\r\n     *\r\n     */\r\n    private initializeFields;\r\n    /**\r\n     *\r\n     * Get execute callback method\r\n     * Depends on shipping address is trusted or not we should pass to PP\r\n     * `createVaultSetupToken` callback if address is untrusted or\r\n     * `createOrder` if address is trusted\r\n     *\r\n     */\r\n    private getExecuteCallback;\r\n    private createVaultSetupTokenCallback;\r\n    private createOrderCallback;\r\n    /**\r\n     *\r\n     * onApprove method\r\n     * When submitting a form with a `submitHostedForm` method if there is no error\r\n     * then onApprove callback is triggered and depends on the flow\r\n     * we will receive an `orderID` if it's basic paying and `vaultSetupToken` if we are paying\r\n     * with vaulted instrument and shipping address is untrusted\r\n     *\r\n     */\r\n    private handleApprove;\r\n    /**\r\n     *\r\n     * Rendering Card Fields methods\r\n     *\r\n     */\r\n    private renderFields;\r\n    private renderVaultedFields;\r\n    /**\r\n     *\r\n     * Instrument params method\r\n     *\r\n     */\r\n    private getInstrumentParams;\r\n    private getFieldTypeByEmittedField;\r\n    /**\r\n     *\r\n     * Form submit method\r\n     * Triggers a form submit\r\n     * */\r\n    private submitHostedForm;\r\n    /**\r\n     *\r\n     * Validation and errors\r\n     *\r\n     */\r\n    private validateHostedFormOrThrow;\r\n    private getValidityData;\r\n    private getInvalidErrorByFieldType;\r\n    private mapValidationErrors;\r\n    /**\r\n     *\r\n     * Fields mappers\r\n     *\r\n     */\r\n    private mapFieldType;\r\n    /**\r\n     *\r\n     * Utils\r\n     *\r\n     */\r\n    private getCardFieldsOrThrow;\r\n    private getInputStyles;\r\n    private stylizeInputContainers;\r\n    private hasUndefinedValues;\r\n    /**\r\n     *\r\n     * Input events methods\r\n     *\r\n     */\r\n    private onChangeHandler;\r\n    private onFocusHandler;\r\n    private onBlurHandler;\r\n    private onInputSubmitRequest;\r\n    /**\r\n     *\r\n     * PayPal Commerce Accelerated checkout related methods\r\n     *\r\n     */\r\n    private shouldInitializePayPalFastlane;\r\n    private initializePayPalFastlaneOrThrow;\r\n}\r\n\r\ndeclare interface PayPalCommerceCreditCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     * A callback that gets called when paypal button clicked.\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\ndeclare class PayPalCommerceCreditCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalCommerceIntegrationService;\r\n    private onError;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalCommerceIntegrationService: PayPalCommerceIntegrationService);\r\n    initialize(options: CustomerInitializeOptions & WithPayPalCommerceCreditCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    private renderButton;\r\n    private onHostedCheckoutApprove;\r\n    private onShippingAddressChange;\r\n    private onShippingOptionsChange;\r\n    private handleError;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPal Commerce payment\r\n * method for presenting its PayPal button.\r\n *\r\n * Please note that the minimum version of checkout-sdk is 1.100\r\n *\r\n * Also, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the PayPal button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalcommercecredit',\r\n *     paypalcommercecredit: {\r\n *         container: '#container',\r\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'paypalcommercecredit', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommerceCreditPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container?: string;\r\n    /**\r\n     * The location to insert the Pay Later Messages.\r\n     */\r\n    bannerContainerId?: string;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate?(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm?(): void;\r\n}\r\n\r\ndeclare class PayPalCommerceCreditPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalIntegrationService;\r\n    private loadingIndicator;\r\n    private payPalSdkScriptLoader;\r\n    private loadingIndicatorContainer?;\r\n    private orderId?;\r\n    private paypalButton?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalIntegrationService: PayPalIntegrationService, loadingIndicator: LoadingIndicator, payPalSdkScriptLoader: PayPalSdkScriptLoader);\r\n    initialize(options?: PaymentInitializeOptions & WithPayPalCommerceCreditPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    /**\r\n     *\r\n     * Button methods/callbacks\r\n     *\r\n     * */\r\n    private renderButton;\r\n    private handleClick;\r\n    private handleApprove;\r\n    private handleError;\r\n    /**\r\n     *\r\n     * Loading Indicator methods\r\n     *\r\n     * */\r\n    private toggleLoadingIndicator;\r\n    /**\r\n     *\r\n     * Render Pay Later Messages\r\n     *\r\n     * */\r\n    private renderMessages;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the customer step of\r\n * checkout to support PayPalCommerce.\r\n */\r\ndeclare interface PayPalCommerceCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when payment complete on paypal side.\r\n     */\r\n    onComplete?(): void;\r\n    /**\r\n     * A callback that gets called when paypal button clicked.\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\ndeclare class PayPalCommerceCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalIntegrationService;\r\n    private paypalButtonCreationService;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalIntegrationService: PayPalIntegrationService, paypalButtonCreationService: PaypalButtonCreationService);\r\n    initialize(options: CustomerInitializeOptions & WithPayPalCommerceCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    private renderButton;\r\n}\r\n\r\n/**\r\n * A set of options that are optional to initialize the PayPalCommerce Fastlane customer strategy\r\n * that are responsible for PayPalCommerce Fastlane components styling and initialization\r\n *\r\n * ```js\r\n * service.initializeCustomer({\r\n *     methodId: 'paypalcommerceacceleratedcheckout', // PayPalCommerce Fastlane has 'paypalcommerceacceleratedcheckout' method id\r\n *     paypalcommercefastlane: {\r\n *         styles: {\r\n *              root: {\r\n *                  backgroundColorPrimary: 'transparent',\r\n *                  errorColor: '#C40B0B',\r\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n *              },\r\n *              input: {\r\n *                  borderRadius: '0.25rem',\r\n *                  borderColor: '#9E9E9E',\r\n *                  focusBorderColor: '#4496F6',\r\n *              },\r\n *              toggle: {\r\n *                  colorPrimary: '#0F005E',\r\n *                  colorSecondary: '#ffffff',\r\n *              },\r\n *              text: {\r\n *                  body: {\r\n *                      color: '#222222',\r\n *                      fontSize: '1rem',\r\n *                  },\r\n *                  caption: {\r\n *                      color: '#515151',\r\n *                      fontSize: '0.875rem',\r\n *                  },\r\n *              },\r\n *              branding: 'light',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommerceFastlaneCustomerInitializeOptions {\r\n    /**\r\n     * Is a stylisation options for customizing PayPal Fastlane components\r\n     *\r\n     * Note: the styles for all PayPalCommerce Fastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter which strategy was initialised first\r\n     */\r\n    styles?: PayPalFastlaneStylesOption;\r\n}\r\n\r\ndeclare class PayPalCommerceFastlaneCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalSdkScriptLoader;\r\n    private paypalFastlaneUtils;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalSdkScriptLoader: PayPalSdkScriptLoader, paypalFastlaneUtils: PayPalFastlaneUtils);\r\n    initialize(options: CustomerInitializeOptions & WithPayPalCommerceFastlaneCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    /**\r\n     *\r\n     * Authentication flow methods\r\n     *\r\n     */\r\n    private runPayPalAuthenticationFlowOrThrow;\r\n    private updateCustomerDataState;\r\n    /**\r\n     *\r\n     * Fastlane styling methods\r\n     *\r\n     */\r\n    private getFastlaneStyles;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPalCommerce Accelerated Checkout payment\r\n * method for presenting on the page.\r\n *\r\n *\r\n * Also, PayPalCommerce requires specific options to initialize PayPal Fastlane Card Component\r\n * ```html\r\n * <!-- This is where the PayPal Fastlane Card Component will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalcommerceacceleratedcheckout', // PayPal Fastlane has 'paypalcommerceacceleratedcheckout' method id\r\n *     paypalcommercefastlane: {\r\n *         onInit: (renderPayPalCardComponent) => renderPayPalCardComponent('#container-id'),\r\n *         onChange: (showPayPalCardSelector) => showPayPalCardSelector(),\r\n *         styles: {\r\n *              root: {\r\n *                  backgroundColorPrimary: 'transparent',\r\n *                  errorColor: '#C40B0B',\r\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n *              },\r\n *              input: {\r\n *                  borderRadius: '0.25rem',\r\n *                  borderColor: '#9E9E9E',\r\n *                  focusBorderColor: '#4496F6',\r\n *              },\r\n *              toggle: {\r\n *                  colorPrimary: '#0F005E',\r\n *                  colorSecondary: '#ffffff',\r\n *              },\r\n *              text: {\r\n *                  body: {\r\n *                      color: '#222222',\r\n *                      fontSize: '1rem',\r\n *                  },\r\n *                  caption: {\r\n *                      color: '#515151',\r\n *                      fontSize: '0.875rem',\r\n *                  },\r\n *              },\r\n *              branding: 'light',\r\n *         },\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommerceFastlanePaymentInitializeOptions {\r\n    /**\r\n     * Is a callback that takes the CSS selector of a container\r\n     * where the PayPal Fastlane form should be inserted into.\r\n     */\r\n    onInit?: (renderPayPalCardComponent: (container: string) => void) => void;\r\n    /**\r\n     * Is a callback that shows PayPal stored instruments\r\n     * when get triggered\r\n     */\r\n    onChange?: (showPayPalCardSelector: () => Promise<CardInstrument | undefined>) => void;\r\n    /**\r\n     * Callback that handles errors\r\n     */\r\n    onError?: (error: unknown) => void;\r\n    /**\r\n     * Is a stylisation options for customizing PayPal Fastlane components\r\n     *\r\n     * Note: the styles for all PayPalCommerceFastlane strategies should be the same,\r\n     * because they will be provided to PayPal library only for the first strategy initialization\r\n     * no matter what strategy was initialised first\r\n     */\r\n    styles?: PayPalFastlaneStylesOption;\r\n}\r\n\r\ndeclare interface PayPalCommerceFields {\r\n    render(container: HTMLElement | string): Promise<void>;\r\n    clear(): void;\r\n    removeClass(className: string): Promise<void>;\r\n    close(): Promise<void>;\r\n}\r\n\r\ndeclare interface PayPalCommerceFieldsInitializationData {\r\n    placeholder?: string;\r\n}\r\n\r\ndeclare interface PayPalCommerceFieldsStyleOptions {\r\n    variables?: {\r\n        fontFamily?: string;\r\n        fontSizeBase?: string;\r\n        fontSizeSm?: string;\r\n        fontSizeM?: string;\r\n        fontSizeLg?: string;\r\n        textColor?: string;\r\n        colorTextPlaceholder?: string;\r\n        colorBackground?: string;\r\n        colorInfo?: string;\r\n        colorDanger?: string;\r\n        borderRadius?: string;\r\n        borderColor?: string;\r\n        borderWidth?: string;\r\n        borderFocusColor?: string;\r\n        spacingUnit?: string;\r\n    };\r\n    rules?: {\r\n        [key: string]: any;\r\n    };\r\n}\r\n\r\ndeclare interface PayPalCommerceHostedFieldOption {\r\n    selector: string;\r\n    placeholder?: string;\r\n}\r\n\r\ndeclare interface PayPalCommerceHostedFields {\r\n    submit(options?: PayPalCommerceHostedFieldsSubmitOptions): Promise<PayPalCommerceHostedFieldsApprove>;\r\n    getState(): PayPalCommerceHostedFieldsState;\r\n    on(eventName: string, callback: (event: PayPalCommerceHostedFieldsState) => void): void;\r\n}\r\n\r\ndeclare interface PayPalCommerceHostedFieldsApprove {\r\n    orderId: string;\r\n    liabilityShift?: 'POSSIBLE' | 'NO' | 'UNKNOWN';\r\n}\r\n\r\ndeclare interface PayPalCommerceHostedFieldsCard {\r\n    type: string;\r\n    niceType: string;\r\n    code: {\r\n        name: string;\r\n        size: number;\r\n    };\r\n}\r\n\r\ndeclare interface PayPalCommerceHostedFieldsFieldData {\r\n    container: HTMLElement;\r\n    isFocused: boolean;\r\n    isEmpty: boolean;\r\n    isPotentiallyValid: boolean;\r\n    isValid: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * PayPal Commerce Hosted Fields\r\n *\r\n */\r\ndeclare interface PayPalCommerceHostedFieldsRenderOptions {\r\n    fields?: {\r\n        number?: PayPalCommerceHostedFieldOption;\r\n        cvv?: PayPalCommerceHostedFieldOption;\r\n        expirationDate?: PayPalCommerceHostedFieldOption;\r\n    };\r\n    paymentsSDK?: boolean;\r\n    styles?: {\r\n        input?: {\r\n            [key: string]: string;\r\n        };\r\n        '.invalid'?: {\r\n            [key: string]: string;\r\n        };\r\n        '.valid'?: {\r\n            [key: string]: string;\r\n        };\r\n        ':focus'?: {\r\n            [key: string]: string;\r\n        };\r\n    };\r\n    createOrder(): Promise<string>;\r\n}\r\n\r\ndeclare interface PayPalCommerceHostedFieldsState {\r\n    cards: PayPalCommerceHostedFieldsCard[];\r\n    emittedBy: string;\r\n    fields: {\r\n        number?: PayPalCommerceHostedFieldsFieldData;\r\n        expirationDate?: PayPalCommerceHostedFieldsFieldData;\r\n        expirationMonth?: PayPalCommerceHostedFieldsFieldData;\r\n        expirationYear?: PayPalCommerceHostedFieldsFieldData;\r\n        cvv?: PayPalCommerceHostedFieldsFieldData;\r\n        postalCode?: PayPalCommerceHostedFieldsFieldData;\r\n    };\r\n}\r\n\r\ndeclare interface PayPalCommerceHostedFieldsSubmitOptions {\r\n    contingencies?: Array<'3D_SECURE'>;\r\n    cardholderName?: string;\r\n}\r\n\r\n/**\r\n *\r\n * PayPal Commerce Initialization Data\r\n *\r\n */\r\ndeclare interface PayPalCommerceInitializationData {\r\n    attributionId?: string;\r\n    availableAlternativePaymentMethods: FundingType;\r\n    buttonStyle?: PayPalButtonStyleOptions;\r\n    buyerCountry?: string;\r\n    clientId: string;\r\n    clientToken?: string;\r\n    enabledAlternativePaymentMethods: FundingType;\r\n    isDeveloperModeApplicable?: boolean;\r\n    intent?: PayPalCommerceIntent;\r\n    isAcceleratedCheckoutEnabled?: boolean;\r\n    isHostedCheckoutEnabled?: boolean;\r\n    isPayPalCreditAvailable?: boolean;\r\n    isVenmoEnabled?: boolean;\r\n    isGooglePayEnabled?: boolean;\r\n    merchantId?: string;\r\n    orderId?: string;\r\n    shouldRenderFields?: boolean;\r\n    shouldRunAcceleratedCheckout?: boolean;\r\n    paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\r\n    paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[];\r\n    isServerSideShippingCallbacksEnabled?: boolean;\r\n}\r\n\r\ndeclare class PayPalCommerceIntegrationService {\r\n    private formPoster;\r\n    private paymentIntegrationService;\r\n    private paypalCommerceRequestSender;\r\n    private paypalCommerceScriptLoader;\r\n    private paypalSdk?;\r\n    constructor(formPoster: FormPoster, paymentIntegrationService: PaymentIntegrationService, paypalCommerceRequestSender: PayPalCommerceRequestSender, paypalCommerceScriptLoader: PayPalCommerceScriptLoader);\r\n    /**\r\n     *\r\n     * PayPalSDK methods\r\n     *\r\n     */\r\n    loadPayPalSdk(methodId: string, providedCurrencyCode?: string, initializesOnCheckoutPage?: boolean, forceLoad?: boolean): Promise<PayPalSDK | undefined>;\r\n    getPayPalSdkOrThrow(): PayPalSDK;\r\n    /**\r\n     *\r\n     * Buy Now cart creation methods\r\n     *\r\n     */\r\n    createBuyNowCartOrThrow(buyNowInitializeOptions: PayPalBuyNowInitializeOptions): Promise<Cart>;\r\n    /**\r\n     *\r\n     * Order methods\r\n     *\r\n     */\r\n    createOrder(providerId: string, requestBody?: Partial<PayPalCreateOrderRequestBody>): Promise<string>;\r\n    createOrderCardFields(providerId: string, requestBody?: Partial<PayPalCreateOrderRequestBody>): Promise<PayPalCreateOrderCardFieldsResponse>;\r\n    updateOrder(isServerSideShippingCallbacksEnabled?: boolean): Promise<void>;\r\n    getOrderStatus(methodId?: string, options?: RequestOptions): Promise<PayPalOrderStatus>;\r\n    /**\r\n     *\r\n     * Payment submitting and tokenizing methods\r\n     *\r\n     */\r\n    tokenizePayment(methodId: string, orderId?: string): void;\r\n    submitPayment(methodId: string, orderId: string, gatewayId?: string): Promise<void>;\r\n    /**\r\n     *\r\n     * Shipping options methods\r\n     *\r\n     */\r\n    getShippingOptionOrThrow(selectedShippingOptionId?: string): ShippingOption;\r\n    /**\r\n     *\r\n     * Address transforming methods\r\n     *\r\n     */\r\n    getAddress(address?: Partial<BillingAddressRequestBody>): BillingAddressRequestBody;\r\n    getBillingAddressFromOrderDetails({ payer }: PayPalOrderDetails): BillingAddressRequestBody;\r\n    getShippingAddressFromOrderDetails(orderDetails: PayPalOrderDetails): BillingAddressRequestBody;\r\n    /**\r\n     *\r\n     * Buttons style methods\r\n     *\r\n     */\r\n    getValidButtonStyle(style?: PayPalButtonStyleOptions): PayPalButtonStyleOptions;\r\n    getValidHeight(height?: number): number;\r\n    /**\r\n     *\r\n     * Utils methods\r\n     *\r\n     */\r\n    removeElement(elementId?: string): void;\r\n}\r\n\r\ndeclare enum PayPalCommerceIntent {\r\n    AUTHORIZE = \"authorize\",\r\n    CAPTURE = \"capture\"\r\n}\r\n\r\n/**\r\n *\r\n * PayPalCommerce Messages\r\n */\r\ndeclare interface PayPalCommerceMessages {\r\n    render(id: string): void;\r\n}\r\n\r\ndeclare interface PayPalCommerceMessagesOptions {\r\n    amount: number;\r\n    placement: string;\r\n    style?: PayPalCommerceMessagesStyleOptions;\r\n    fundingSource?: string;\r\n}\r\n\r\ndeclare interface PayPalCommerceMessagesStyleOptions {\r\n    layout?: string;\r\n}\r\n\r\n/**\r\n *\r\n * PayPal Commerce Payment fields\r\n *\r\n */\r\ndeclare interface PayPalCommercePaymentFields {\r\n    render(id: string): void;\r\n}\r\n\r\ndeclare interface PayPalCommercePaymentFieldsOptions {\r\n    style?: PayPalCommerceFieldsStyleOptions;\r\n    fundingSource: string;\r\n    fields: {\r\n        name?: {\r\n            value?: string;\r\n        };\r\n        email?: {\r\n            value?: string;\r\n        };\r\n    };\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPal Commerce payment\r\n * method for presenting its PayPal button.\r\n *\r\n * Please note that the minimum version of checkout-sdk is 1.100\r\n *\r\n * Also, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the PayPal button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalcommerce',\r\n *     paypalcommerce: {\r\n *         container: '#container',\r\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'paypalcommerce', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommercePaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container?: string;\r\n    /**\r\n     * The location to insert the Pay Later Messages.\r\n     */\r\n    bannerContainerId?: string;\r\n    /**\r\n     * If there is no need to initialize the Smart Payment Button, simply pass false as the option value.\r\n     * The default value is true\r\n     */\r\n    shouldRenderPayPalButtonOnInitialization?: boolean;\r\n    /**\r\n     * A callback for getting form fields values.\r\n     */\r\n    getFieldsValues?(): HostedInstrument;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: unknown): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when strategy is in the process of initialization before rendering Smart Payment Button.\r\n     *\r\n     * @param callback - A function, that calls the method to render the Smart Payment Button.\r\n     */\r\n    onInit?(callback: () => void): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate?(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm?(): void;\r\n}\r\n\r\ndeclare class PayPalCommercePaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalIntegrationService;\r\n    private payPalSdkScriptLoader;\r\n    private loadingIndicator;\r\n    private loadingIndicatorContainer?;\r\n    private orderId?;\r\n    private paypalButton?;\r\n    private paypalcommerce?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalIntegrationService: PayPalIntegrationService, payPalSdkScriptLoader: PayPalSdkScriptLoader, loadingIndicator: LoadingIndicator);\r\n    initialize(options?: PaymentInitializeOptions & WithPayPalCommercePaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private prepareVaultedInstrumentPaymentPayload;\r\n    private preparePaymentPayload;\r\n    /**\r\n     *\r\n     * Button methods/callbacks\r\n     *\r\n     * */\r\n    private renderButton;\r\n    private handleClick;\r\n    private handleApprove;\r\n    private handleError;\r\n    private createOrder;\r\n    /**\r\n     *\r\n     * Vaulting flow methods\r\n     *\r\n     * */\r\n    private getFieldsValues;\r\n    private isTrustedVaultingFlow;\r\n    /**\r\n     *\r\n     * Loading Indicator methods\r\n     *\r\n     * */\r\n    private toggleLoadingIndicator;\r\n    /**\r\n     *\r\n     * Guards\r\n     *\r\n     */\r\n    private isPayPalVaultedInstrumentPaymentData;\r\n    /**\r\n     *\r\n     * Render Pay Later Messages\r\n     *\r\n     * */\r\n    private renderMessages;\r\n    /**\r\n     *\r\n     * Error handling\r\n     *\r\n     */\r\n    private isProviderError;\r\n    private getSmartButtonContainerId;\r\n}\r\n\r\ndeclare class PayPalCommerceRequestSender {\r\n    private requestSender;\r\n    constructor(requestSender: RequestSender);\r\n    createOrder(providerId: string, requestBody: Partial<PayPalCreateOrderRequestBody>): Promise<PayPalOrderData>;\r\n    updateOrder(requestBody: PayPalUpdateOrderRequestBody): Promise<PayPalUpdateOrderResponse>;\r\n    getOrderStatus(methodId?: string, options?: RequestOptions): Promise<PayPalOrderStatusData>;\r\n}\r\n\r\ndeclare interface PayPalCommerceSDKFunding {\r\n    CARD: string;\r\n    PAYPAL: string;\r\n    CREDIT: string;\r\n    PAYLATER: string;\r\n    OXXO: string;\r\n    SEPA: string;\r\n    VENMO: string;\r\n}\r\n\r\ndeclare class PayPalCommerceScriptLoader {\r\n    private scriptLoader;\r\n    private window;\r\n    constructor(scriptLoader: ScriptLoader);\r\n    getPayPalSDK(paymentMethod: PaymentMethod<PayPalCommerceInitializationData>, currencyCode: string, storeLanguage: string | undefined, initializesOnCheckoutPage?: boolean, forceLoad?: boolean): Promise<PayPalSDK>;\r\n    private loadPayPalSDK;\r\n    private getPayPalSdkScriptConfigOrThrow;\r\n    private transformConfig;\r\n}\r\n\r\ndeclare interface PayPalCommerceVenmoButtonInitializeOptions {\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: PayPalButtonStyleOptions;\r\n    /**\r\n     * The option that used to initialize a PayPal script with provided currency code.\r\n     */\r\n    currencyCode?: string;\r\n    /**\r\n     * The options that required to initialize Buy Now functionality.\r\n     */\r\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\r\n    /**\r\n     *\r\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\r\n     *\r\n     */\r\n    onEligibilityFailure?(): void;\r\n}\r\n\r\ndeclare class PayPalCommerceVenmoButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalCommerceIntegrationService;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalCommerceIntegrationService: PayPalCommerceIntegrationService);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithPayPalCommerceVenmoButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private renderButton;\r\n    private getValidVenmoButtonStyles;\r\n    private handleClick;\r\n}\r\n\r\ndeclare interface PayPalCommerceVenmoCustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the checkout button should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback that gets called if unable to initialize the widget or select\r\n     * one of the address options provided by the widget.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onError?(error?: Error): void;\r\n    /**\r\n     * A callback that gets called when paypal button clicked.\r\n     */\r\n    onClick?(): void;\r\n}\r\n\r\ndeclare class PayPalCommerceVenmoCustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalCommerceIntegrationService;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalCommerceIntegrationService: PayPalCommerceIntegrationService);\r\n    initialize(options: CustomerInitializeOptions & WithPayPalCommerceVenmoCustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n    private renderButton;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPal Commerce payment\r\n * method for presenting its PayPal button.\r\n *\r\n * Please note that the minimum version of checkout-sdk is 1.100\r\n *\r\n * Also, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n * ```html\r\n * <!-- This is where the PayPal button will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalcommercevenmo',\r\n *     paypalcommercevenmo: {\r\n *         container: '#container',\r\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n *         submitForm: () => {\r\n *         // Example function\r\n *             this.submitOrder(\r\n *                {\r\n *                   payment: { methodId: 'paypalcommercevenmo', }\r\n *               }\r\n *            );\r\n *         },\r\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n *         onValidate: (resolve, reject) => {\r\n *         // Example function\r\n *             const isValid = this.validatePaymentForm();\r\n *             if (isValid) {\r\n *                 return resolve();\r\n *             }\r\n *             return reject();\r\n *         },\r\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n *         onRenderButton: () => {\r\n *         // Example function\r\n *             this.hidePaymentSubmitButton();\r\n *         }\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface PayPalCommerceVenmoPaymentInitializeOptions {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: Error): void;\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback that gets called when a buyer click on Smart Payment Button\r\n     * and should validate payment form.\r\n     *\r\n     * @param resolve - A function, that gets called if form is valid.\r\n     * @param reject - A function, that gets called if form is not valid.\r\n     *\r\n     * @returns reject() or resolve()\r\n     */\r\n    onValidate(resolve: () => void, reject: () => void): Promise<void>;\r\n    /**\r\n     * A callback for submitting payment form that gets called\r\n     * when buyer approved PayPal account.\r\n     */\r\n    submitForm(): void;\r\n}\r\n\r\ndeclare class PayPalCommerceVenmoPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalIntegrationService;\r\n    private loadingIndicator;\r\n    private loadingIndicatorContainer?;\r\n    private orderId?;\r\n    private paypalButton?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalIntegrationService: PayPalIntegrationService, loadingIndicator: LoadingIndicator);\r\n    initialize(options?: PaymentInitializeOptions & WithPayPalCommerceVenmoPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    /**\r\n     *\r\n     * Button methods/callbacks\r\n     *\r\n     * */\r\n    private renderButton;\r\n    private handleClick;\r\n    private handleApprove;\r\n    private handleError;\r\n    /**\r\n     *\r\n     * Loading Indicator methods\r\n     *\r\n     * */\r\n    private toggleLoadingIndicator;\r\n}\r\n\r\ndeclare interface PayPalCreateOrderCardFieldsResponse {\r\n    orderId: string;\r\n    setupToken?: string;\r\n}\r\n\r\ndeclare interface PayPalCreateOrderRequestBody extends HostedInstrument, VaultedInstrument {\r\n    cartId: string;\r\n    metadataId?: string;\r\n    setupToken?: boolean;\r\n    fastlaneToken?: string;\r\n}\r\n\r\ndeclare type PayPalLegal = (params: {\r\n    fundingSource: string;\r\n}) => {\r\n    render(container: string): void;\r\n};\r\n\r\ndeclare interface PayPalOrderAddress {\r\n    address_line_1: string;\r\n    address_line_2: string;\r\n    admin_area_2: string;\r\n    admin_area_1?: string;\r\n    postal_code: string;\r\n    country_code: string;\r\n}\r\n\r\ndeclare interface PayPalOrderData {\r\n    orderId: string;\r\n    setupToken?: string;\r\n    approveUrl: string;\r\n    fastlaneToken?: string;\r\n}\r\n\r\ndeclare interface PayPalOrderDetails {\r\n    payer: {\r\n        name: {\r\n            given_name: string;\r\n            surname: string;\r\n        };\r\n        email_address: string;\r\n        address: PayPalOrderAddress;\r\n        phone?: {\r\n            phone_number: {\r\n                national_number: string;\r\n            };\r\n        };\r\n    };\r\n    purchase_units: Array<{\r\n        shipping: {\r\n            address: PayPalOrderAddress;\r\n            name: {\r\n                full_name: string;\r\n            };\r\n        };\r\n    }>;\r\n}\r\n\r\ndeclare enum PayPalOrderStatus {\r\n    Approved = \"APPROVED\",\r\n    Created = \"CREATED\",\r\n    PayerActionRequired = \"PAYER_ACTION_REQUIRED\",\r\n    PollingStop = \"POLLING_STOP\",\r\n    PollingError = \"POLLING_ERROR\"\r\n}\r\n\r\ndeclare interface PayPalOrderStatusData {\r\n    status: PayPalOrderStatus;\r\n}\r\n\r\ndeclare interface PayPalSDK {\r\n    CardFields: (data: PayPalCommerceCardFieldsConfig) => Promise<PayPalCommerceCardFields>;\r\n    Googlepay: () => {\r\n        config: () => Promise<GooglePayConfig>;\r\n        confirmOrder: (arg0: {\r\n            orderId: string;\r\n            paymentMethodData: ConfirmOrderData;\r\n        }) => Promise<{\r\n            status: string;\r\n        }>;\r\n        initiatePayerAction: () => void;\r\n    };\r\n    FUNDING: PayPalCommerceSDKFunding;\r\n    HostedFields: {\r\n        isEligible(): boolean;\r\n        render(data: PayPalCommerceHostedFieldsRenderOptions): Promise<PayPalCommerceHostedFields>;\r\n    };\r\n    Legal: PayPalLegal & LegalFunding;\r\n    Buttons(options: PayPalCommerceButtonsOptions): PayPalCommerceButtons;\r\n    PaymentFields(options: PayPalCommercePaymentFieldsOptions): PayPalCommercePaymentFields;\r\n    Messages(options: PayPalCommerceMessagesOptions): PayPalCommerceMessages;\r\n}\r\n\r\ndeclare interface PayPalSelectedShippingOption {\r\n    amount: {\r\n        currency_code: string;\r\n        value: string;\r\n    };\r\n    id: string;\r\n    label: string;\r\n    selected: boolean;\r\n    type: string;\r\n}\r\n\r\ndeclare interface PayPalUpdateOrderRequestBody {\r\n    availableShippingOptions?: ShippingOption[];\r\n    cartId: string;\r\n    selectedShippingOption?: ShippingOption | null;\r\n}\r\n\r\ndeclare interface PayPalUpdateOrderResponse {\r\n    statusCode: number;\r\n}\r\n\r\ndeclare class PaypalCommerceFastlanePaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalCommerceRequestSender;\r\n    private paypalSdkScriptLoader;\r\n    private paypalFastlaneUtils;\r\n    private paypalComponentMethods?;\r\n    private paypalFastlaneSdk?;\r\n    private threeDSVerificationMethod?;\r\n    private paypalcommercefastlane?;\r\n    private orderId?;\r\n    private methodId?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalCommerceRequestSender: PayPalCommerceRequestSender, paypalSdkScriptLoader: PayPalSdkScriptLoader, paypalFastlaneUtils: PayPalFastlaneUtils);\r\n    /**\r\n     *\r\n     * Default methods\r\n     *\r\n     * */\r\n    initialize(options: PaymentInitializeOptions & WithPayPalCommerceFastlanePaymentInitializeOptions): Promise<void>;\r\n    execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    /**\r\n     *\r\n     * Authentication flow methods\r\n     *\r\n     */\r\n    private shouldRunAuthenticationFlow;\r\n    private runPayPalAuthenticationFlowOrThrow;\r\n    /**\r\n     *\r\n     * PayPal Fastlane Card Component rendering method\r\n     *\r\n     */\r\n    private initializePayPalPaymentComponent;\r\n    private renderPayPalPaymentComponent;\r\n    private getPayPalComponentMethodsOrThrow;\r\n    /**\r\n     *\r\n     * Payment Payload preparation methods\r\n     *\r\n     */\r\n    private prepareVaultedInstrumentPaymentPayload;\r\n    private preparePaymentPayload;\r\n    private createOrder;\r\n    /**\r\n     *\r\n     * 3DSecure methods\r\n     *\r\n     * */\r\n    private get3DSNonce;\r\n    /**\r\n     *\r\n     * PayPal Fastlane instrument change\r\n     *\r\n     */\r\n    private handlePayPalStoredInstrumentChange;\r\n    private handleError;\r\n}\r\n\r\ndeclare interface PaypalCommerceRatePay {\r\n    /**\r\n     * The CSS selector of a container where the payment widget should be inserted into.\r\n     */\r\n    container: string;\r\n    /**\r\n     * The CSS selector of a container where the legal text should be inserted into.\r\n     */\r\n    legalTextContainer: string;\r\n    /**\r\n     * The CSS selector of a container where loading indicator should be rendered\r\n     */\r\n    loadingContainerId: string;\r\n    /**\r\n     * A callback that gets form values\r\n     */\r\n    getFieldsValues?(): {\r\n        ratepayBirthDate: BirthDate;\r\n        ratepayPhoneNumber: string;\r\n        ratepayPhoneCountryCode: string;\r\n    };\r\n    /**\r\n     * A callback right before render Smart Payment Button that gets called when\r\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\r\n     */\r\n    onRenderButton?(): void;\r\n    /**\r\n     * A callback for displaying error popup. This callback requires error object as parameter.\r\n     */\r\n    onError?(error: unknown): void;\r\n}\r\n\r\ndeclare class PaypalCommerceRatepayPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalCommerceService;\r\n    private loadingIndicator;\r\n    private pollingInterval;\r\n    private maxPollingIntervalTime;\r\n    private guid?;\r\n    private paypalcommerceratepay?;\r\n    private loadingIndicatorContainer?;\r\n    private pollingTimer;\r\n    private stopPolling;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalCommerceService: PayPalIntegrationService, loadingIndicator: LoadingIndicator, pollingInterval?: number, maxPollingIntervalTime?: number);\r\n    initialize(options: PaymentInitializeOptions & WithPayPalCommerceRatePayPaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private normalizeDate;\r\n    private formatDate;\r\n    private renderLegalText;\r\n    private handleError;\r\n    private createFraudNetScript;\r\n    private generateGUID;\r\n    private loadFraudnetConfig;\r\n    private reinitializeStrategy;\r\n    /**\r\n     *\r\n     * Polling mechanism\r\n     *\r\n     *\r\n     * */\r\n    private initializePollingMechanism;\r\n    private deinitializePollingMechanism;\r\n    private resetPollingMechanism;\r\n    /**\r\n     *\r\n     * Loading Indicator methods\r\n     *\r\n     * */\r\n    private toggleLoadingIndicator;\r\n}\r\n\r\ndeclare interface ShippingAddressChangeCallbackPayload {\r\n    orderId: string;\r\n    shippingAddress: PayPalAddress;\r\n}\r\n\r\ndeclare interface ShippingOptionChangeCallbackPayload {\r\n    orderId: string;\r\n    selectedShippingOption: PayPalSelectedShippingOption;\r\n}\r\n\r\ndeclare enum StyleButtonColor {\r\n    gold = \"gold\",\r\n    blue = \"blue\",\r\n    silver = \"silver\",\r\n    black = \"black\",\r\n    white = \"white\"\r\n}\r\n\r\ndeclare enum StyleButtonLabel {\r\n    paypal = \"paypal\",\r\n    checkout = \"checkout\",\r\n    buynow = \"buynow\",\r\n    pay = \"pay\",\r\n    installment = \"installment\"\r\n}\r\n\r\ndeclare enum StyleButtonShape {\r\n    pill = \"pill\",\r\n    rect = \"rect\"\r\n}\r\n\r\ndeclare interface WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions {\r\n    paypalcommerce?: PayPalCommerceAlternativeMethodsPaymentOptions;\r\n    paypalcommercealternativemethods?: PayPalCommerceAlternativeMethodsPaymentOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceButtonInitializeOptions {\r\n    paypalcommerce?: PayPalCommerceButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceCreditButtonInitializeOptions {\r\n    paypalcommercecredit?: PayPalCommerceCreditButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceCreditCardsPaymentInitializeOptions {\r\n    paypalcommercecreditcards?: PayPalCommerceCreditCardsPaymentInitializeOptions;\r\n    paypalcommerce?: PayPalCommerceCreditCardsPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceCreditCustomerInitializeOptions {\r\n    paypalcommercecredit?: PayPalCommerceCreditCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceCreditPaymentInitializeOptions {\r\n    paypalcommerce?: PayPalCommerceCreditPaymentInitializeOptions;\r\n    paypalcommercecredit?: PayPalCommerceCreditPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceCustomerInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using PayPalCommerce.\r\n     */\r\n    paypalcommerce?: PayPalCommerceCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceFastlaneCustomerInitializeOptions {\r\n    paypalcommercefastlane?: PayPalCommerceFastlaneCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceFastlanePaymentInitializeOptions {\r\n    paypalcommercefastlane?: PayPalCommerceFastlanePaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommercePaymentInitializeOptions {\r\n    paypalcommerce?: PayPalCommercePaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceRatePayPaymentInitializeOptions {\r\n    paypalcommerceratepay?: PaypalCommerceRatePay;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceVenmoButtonInitializeOptions {\r\n    paypalcommercevenmo?: PayPalCommerceVenmoButtonInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceVenmoCustomerInitializeOptions {\r\n    paypalcommercevenmo?: PayPalCommerceVenmoCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithPayPalCommerceVenmoPaymentInitializeOptions {\r\n    paypalcommerce?: PayPalCommerceVenmoPaymentInitializeOptions;\r\n    paypalcommercevenmo?: PayPalCommerceVenmoPaymentInitializeOptions;\r\n}\r\n\r\nexport declare const createPayPalCommerceAlternativeMethodsPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<PayPalCommerceAlternativeMethodsPaymentStrategy>, {\r\n    gateway: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommerceButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<PayPalCommerceButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommerceCreditButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<PayPalCommerceCreditButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommerceCreditCardsPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<PayPalCommerceCreditCardsPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommerceCreditCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<PayPalCommerceCreditCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommerceCreditPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<PayPalCommerceCreditPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommerceCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<PayPalCommerceCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommerceFastlaneCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<PayPalCommerceFastlaneCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommerceFastlanePaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<PaypalCommerceFastlanePaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommercePaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<PayPalCommercePaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommerceRatePayPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<PaypalCommerceRatepayPaymentStrategy>, {\r\n    gateway: string;\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommerceVenmoButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<PayPalCommerceVenmoButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommerceVenmoCustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<PayPalCommerceVenmoCustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPayPalCommerceVenmoPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<PayPalCommerceVenmoPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/paypal-express.d.ts",
    "content": "import { CheckoutButtonInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { FormPoster } from '@bigcommerce/form-poster';\r\nimport { Omit } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\nimport { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare interface MessagingOptions {\r\n    amount: number;\r\n    placement: string;\r\n}\r\n\r\ndeclare interface MessagingRender {\r\n    render(container: string): void;\r\n}\r\n\r\ndeclare interface PaypalActions {\r\n    payment: PaypalPaymentActions;\r\n    request: PaypalRequestActions;\r\n}\r\n\r\ndeclare interface PaypalAddress {\r\n    line1: string;\r\n    line2?: string;\r\n    city?: string;\r\n    country_code: string;\r\n    postal_code?: string;\r\n    state?: string;\r\n    phone?: string;\r\n    type?: string;\r\n}\r\n\r\ndeclare interface PaypalAmount {\r\n    currency: string;\r\n    total: string;\r\n}\r\n\r\ndeclare interface PaypalAuthorizeData {\r\n    payerId: string;\r\n    paymentId?: string;\r\n    billingToken?: string;\r\n    payerID?: string;\r\n    paymentID?: string;\r\n}\r\n\r\ndeclare interface PaypalButton {\r\n    render(options: PaypalButtonOptions, container: string): void;\r\n}\r\n\r\ndeclare interface PaypalButtonOptions {\r\n    env?: string;\r\n    commit?: boolean;\r\n    style?: PaypalStyleOptions;\r\n    funding?: PaypalFundingType;\r\n    fundingSource?: string;\r\n    client?: PaypalClientToken;\r\n    payment?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<any>;\r\n    onAuthorize?(data: PaypalAuthorizeData, actions?: PaypalActions): Promise<any>;\r\n    createOrder?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<any>;\r\n    onApprove?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<any>;\r\n}\r\n\r\ndeclare interface PaypalButtonRender {\r\n    render(container: string): void;\r\n    isEligible(): boolean;\r\n}\r\n\r\ndeclare class PaypalButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private paypalExpressScriptLoader;\r\n    private formPoster;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, paypalExpressScriptLoader: PaypalScriptLoader, formPoster: FormPoster);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithPaypalExpressButtonInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private renderButton;\r\n    private getStyle;\r\n    private setupPayment;\r\n    private tokenizePayment;\r\n}\r\n\r\ndeclare enum PaypalButtonStyleColorOption {\r\n    GOLD = \"gold\",\r\n    BLUE = \"blue\",\r\n    SIlVER = \"silver\",\r\n    BLACK = \"black\"\r\n}\r\n\r\ndeclare enum PaypalButtonStyleLabelOption {\r\n    CHECKOUT = \"checkout\",\r\n    PAY = \"pay\",\r\n    BUYNOW = \"buynow\",\r\n    PAYPAL = \"paypal\",\r\n    CREDIT = \"credit\"\r\n}\r\n\r\ndeclare enum PaypalButtonStyleLayoutOption {\r\n    HORIZONTAL = \"horizontal\",\r\n    VERTICAL = \"vertical\"\r\n}\r\n\r\ndeclare enum PaypalButtonStyleShapeOption {\r\n    PILL = \"pill\",\r\n    RECT = \"rect\"\r\n}\r\n\r\ndeclare enum PaypalButtonStyleSizeOption {\r\n    SMALL = \"small\",\r\n    MEDIUM = \"medium\",\r\n    LARGE = \"large\",\r\n    RESPONSIVE = \"responsive\"\r\n}\r\n\r\ndeclare interface PaypalClientToken {\r\n    production?: string;\r\n    sandbox?: string;\r\n}\r\n\r\ndeclare interface PaypalExpressButtonInitializeOptions {\r\n    /**\r\n     * The Client ID of the Paypal App\r\n     */\r\n    clientId: string;\r\n    /**\r\n     * Whether or not to show a credit button.\r\n     */\r\n    allowCredit?: boolean;\r\n    /**\r\n     * A set of styling options for the checkout button.\r\n     */\r\n    style?: Omit<PaypalStyleOptions, 'height'>;\r\n    /**\r\n     * A callback that gets called if unable to authorize and tokenize payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onAuthorizeError?(error: StandardError): void;\r\n    /**\r\n     * A callback that gets called if unable to submit payment.\r\n     *\r\n     * @param error - The error object describing the failure.\r\n     */\r\n    onPaymentError?(error: StandardError): void;\r\n}\r\n\r\ndeclare interface PaypalExpressCheckout {\r\n    initXO(): void;\r\n    startFlow(url: string): void;\r\n    closeFlow(): void;\r\n    setup(merchantId: string, options: PaypalExpressCheckoutOptions): void;\r\n}\r\n\r\ndeclare interface PaypalExpressCheckoutOptions {\r\n    button: string;\r\n    environment: string;\r\n}\r\n\r\ndeclare class PaypalExpressPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private scriptLoader;\r\n    private paypalSdk?;\r\n    private paymentMethod?;\r\n    private useRedirectFlow;\r\n    private window;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, scriptLoader: PaypalScriptLoader);\r\n    initialize(options: PaymentInitializeOptions & WithPaypalExpressPaymentInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<undefined>;\r\n    finalize(options?: PaymentRequestOptions): Promise<void>;\r\n    private isAcknowledgedOrFinalized;\r\n    private isInContextEnabled;\r\n}\r\n\r\ndeclare interface PaypalFundingType {\r\n    allowed?: string[];\r\n    disallowed?: string[];\r\n}\r\n\r\ndeclare interface PaypalFundingTypeList {\r\n    CARD?: string;\r\n    CREDIT?: string;\r\n    PAYPAL?: string;\r\n    PAYLATER?: string;\r\n}\r\n\r\ndeclare interface PaypalItem {\r\n    sku?: string;\r\n    name?: string;\r\n    description?: string;\r\n    quantity: string;\r\n    price: string;\r\n    currency: string;\r\n    tax?: string;\r\n}\r\n\r\ndeclare interface PaypalItemList {\r\n    items?: PaypalItem[];\r\n    shipping_address?: PaypalAddress;\r\n}\r\n\r\ndeclare interface PaypalPayee {\r\n    email?: string;\r\n    merchant_id?: string;\r\n}\r\n\r\ndeclare interface PaypalPayer {\r\n    payer_info: object;\r\n}\r\n\r\ndeclare interface PaypalPaymentActions {\r\n    get(id: string): Promise<PaypalPaymentPayload>;\r\n}\r\n\r\ndeclare interface PaypalPaymentPayload {\r\n    payment: PaypalPaymentPayload;\r\n    payer: PaypalPayer;\r\n    transactions?: PaypalTransaction[];\r\n}\r\n\r\ndeclare interface PaypalRequestActions {\r\n    post(url: string, payload?: object, options?: object): Promise<{\r\n        id: string;\r\n    }>;\r\n}\r\n\r\ndeclare interface PaypalSDK {\r\n    Button: PaypalButton;\r\n    checkout: PaypalExpressCheckout;\r\n    FUNDING: PaypalFundingTypeList;\r\n    Messages(options: MessagingOptions): MessagingRender;\r\n    Buttons(options: PaypalButtonOptions): PaypalButtonRender;\r\n}\r\n\r\ndeclare class PaypalScriptLoader {\r\n    private scriptLoader;\r\n    private window;\r\n    constructor(scriptLoader: ScriptLoader);\r\n    loadPaypalSDK(merchantId?: string): Promise<PaypalSDK>;\r\n}\r\n\r\ndeclare interface PaypalStyleOptions {\r\n    layout?: PaypalButtonStyleLayoutOption;\r\n    size?: PaypalButtonStyleSizeOption;\r\n    color?: PaypalButtonStyleColorOption;\r\n    label?: PaypalButtonStyleLabelOption;\r\n    shape?: PaypalButtonStyleShapeOption;\r\n    tagline?: boolean;\r\n    fundingicons?: boolean;\r\n    height?: number;\r\n}\r\n\r\ndeclare interface PaypalTransaction {\r\n    amount?: PaypalAmount;\r\n    payee?: PaypalPayee;\r\n    description?: string;\r\n    note_to_payee?: string;\r\n    item_list?: PaypalItemList;\r\n}\r\n\r\ndeclare interface WithPaypalExpressButtonInitializeOptions {\r\n    paypal: PaypalExpressButtonInitializeOptions;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the PayPal Express payment\r\n * method.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalexpress',\r\n * });\r\n * ```\r\n *\r\n * An additional flag can be passed in to always start the payment flow through\r\n * a redirect rather than a popup.\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'paypalexpress',\r\n *     paypalexpress: {\r\n *         useRedirectFlow: true,\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface WithPaypalExpressPaymentInitializeOptions {\r\n    paypalexpress?: {\r\n        useRedirectFlow?: boolean;\r\n    };\r\n}\r\n\r\nexport declare const createPaypalExpressButtonStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<PaypalButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createPaypalExpressPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<PaypalExpressPaymentStrategy>, {\r\n    id: string;\r\n    type: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/paypal-pro.d.ts",
    "content": "import { CardinalThreeDSecureFlow } from '@bigcommerce/checkout-sdk/cardinal-integration';\r\nimport { CheckoutButtonStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare class PaypalProPaymentStrategy extends CreditCardPaymentStrategy {\r\n    protected paymentIntegrationService: PaymentIntegrationService;\r\n    private threeDSecureFlow;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, threeDSecureFlow: CardinalThreeDSecureFlow);\r\n    initialize(options: PaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n}\r\n\r\nexport declare const createPayPalProPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<PaypalProPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/sagepay.d.ts",
    "content": "import { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\r\nimport { FormPoster } from '@bigcommerce/form-poster';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare class SagePayPaymentStrategy extends CreditCardPaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private _formPoster;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, _formPoster: FormPoster);\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(options?: PaymentRequestOptions): Promise<void>;\r\n    private _isThreeDSTwoExperimentOn;\r\n}\r\n\r\nexport declare const createSagePayPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<SagePayPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/sezzle.d.ts",
    "content": "import { ExternalPaymentStrategy } from '@bigcommerce/checkout-sdk/external-integration';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare class SezzlePaymentStrategy extends ExternalPaymentStrategy {\r\n    protected redirectUrl(url: string): void;\r\n}\r\n\r\nexport declare const createSezzlePaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<SezzlePaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/squarev2.d.ts",
    "content": "import { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\nexport declare const createSquareV2PaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<PaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/stripe.d.ts",
    "content": "import { CheckoutButtonInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CheckoutButtonStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerCredentials } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { CustomerStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ExecutePaymentMethodCheckoutOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { RequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { StripeAppearanceOptions } from '@bigcommerce/checkout-sdk/stripe-utils';\r\nimport { StripeAppearanceValues } from '@bigcommerce/checkout-sdk/stripe-utils';\r\nimport { StripeCustomFont } from '@bigcommerce/checkout-sdk/stripe-utils';\r\nimport { StripeElementUpdateOptions } from '@bigcommerce/checkout-sdk/stripe-utils';\r\nimport { StripeIntegrationService } from '@bigcommerce/checkout-sdk/stripe-utils';\r\nimport { StripePaymentInitializeOptions } from '@bigcommerce/checkout-sdk/stripe-utils';\r\nimport { StripeScriptLoader } from '@bigcommerce/checkout-sdk/stripe-utils';\r\n\r\ndeclare class StripeCSPaymentStrategy implements PaymentStrategy {\r\n    private readonly paymentIntegrationService;\r\n    private readonly scriptLoader;\r\n    private readonly stripeIntegrationService;\r\n    private stripeClient?;\r\n    private stripeCheckout?;\r\n    private selectedMethodId?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, scriptLoader: StripeScriptLoader, stripeIntegrationService: StripeIntegrationService);\r\n    initialize(options: PaymentInitializeOptions & WithStripeOCSPaymentInitializeOptions): Promise<void>;\r\n    execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _initStripeCheckoutSession;\r\n    private _initializePaymentElement;\r\n    private _loadStripeJs;\r\n    private _getStripeActionsOrThrow;\r\n    private _getStripeElement;\r\n    private _onStripeElementChange;\r\n    private _collapseStripeElement;\r\n    private _updateCheckoutSessionData;\r\n    private _getPaymentPayload;\r\n    private _processAdditionalAction;\r\n    private _confirmStripePayment;\r\n    private _updateStripeShopperData;\r\n    private _updateStripeEmail;\r\n    private _updateStripeShippingAddress;\r\n    private _updateStripeBillingAddress;\r\n    private _getStripeSavedPaymentMethodsOrThrow;\r\n    private _getNewVaultedStripeInstrument;\r\n    private _getTokenizedOptions;\r\n    private _initializeAdaptivePricingElement;\r\n    private _getCurrencySelectorElement;\r\n    private _initAdaptivePricingEvents;\r\n}\r\n\r\ndeclare class StripeLinkV2ButtonStrategy implements CheckoutButtonStrategy {\r\n    private paymentIntegrationService;\r\n    private scriptLoader;\r\n    private stripeIntegrationService;\r\n    private loadingIndicator;\r\n    private _stripeClient?;\r\n    private _stripeElements?;\r\n    private _linkV2Element?;\r\n    private _amountTransformer?;\r\n    private _onComplete?;\r\n    private _loadingIndicatorContainer?;\r\n    private _currencyCode?;\r\n    private _captureMethod?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, scriptLoader: StripeScriptLoader, stripeIntegrationService: StripeIntegrationService, loadingIndicator: LoadingIndicator);\r\n    initialize(options: CheckoutButtonInitializeOptions & WithStripeOCSCustomerInitializeOptions): Promise<void>;\r\n    signIn(): Promise<void>;\r\n    signOut(): Promise<void>;\r\n    executePaymentMethodCheckout(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _mountExpressCheckoutElement;\r\n    /** Events * */\r\n    private _initializeEvents;\r\n    private _onShippingAddressChange;\r\n    private _onCancel;\r\n    private _onShippingRateChange;\r\n    /** Confirm methods * */\r\n    private _onConfirm;\r\n    private _updateShippingAndBillingAddress;\r\n    private _mapShippingAddress;\r\n    private _mapBillingAddress;\r\n    private _processAdditionalAction;\r\n    private _confirmStripePaymentOrThrow;\r\n    private _completeCheckoutFlow;\r\n    private _getPaymentPayload;\r\n    /** Utils * */\r\n    private _shouldRequireShippingAddress;\r\n    private _updateDisplayedPrice;\r\n    private _getCurrency;\r\n    private _getTotalPrice;\r\n    private _getAvailableCountries;\r\n    private _getAvailableShippingOptions;\r\n    private _getStripeShippingOption;\r\n    private _handleShippingOptionChange;\r\n    private _getAmountTransformer;\r\n    private _toCents;\r\n    private _toggleLoadingIndicator;\r\n    private _getMethodId;\r\n}\r\n\r\ndeclare class StripeLinkV2CustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private scriptLoader;\r\n    private stripeIntegrationService;\r\n    private loadingIndicator;\r\n    private _stripeClient?;\r\n    private _stripeElements?;\r\n    private _linkV2Element?;\r\n    private _amountTransformer?;\r\n    private _onComplete?;\r\n    private _loadingIndicatorContainer?;\r\n    private _captureMethod?;\r\n    private _currencyCode?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, scriptLoader: StripeScriptLoader, stripeIntegrationService: StripeIntegrationService, loadingIndicator: LoadingIndicator);\r\n    initialize(options: CustomerInitializeOptions & WithStripeOCSCustomerInitializeOptions): Promise<void>;\r\n    signIn(): Promise<void>;\r\n    signOut(): Promise<void>;\r\n    executePaymentMethodCheckout(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _mountExpressCheckoutElement;\r\n    /** Events * */\r\n    private _initializeEvents;\r\n    private _onShippingAddressChange;\r\n    private _onCancel;\r\n    private _onShippingRateChange;\r\n    /** Confirm methods * */\r\n    private _onConfirm;\r\n    private _updateShippingAndBillingAddress;\r\n    private _mapShippingAddress;\r\n    private _mapBillingAddress;\r\n    private _processAdditionalAction;\r\n    private _confirmStripePaymentOrThrow;\r\n    private _completeCheckoutFlow;\r\n    private _getPaymentPayload;\r\n    /** Utils * */\r\n    private _shouldRequireShippingAddress;\r\n    private _updateDisplayedPrice;\r\n    private _getCurrency;\r\n    private _getTotalPrice;\r\n    private _getAvailableCountries;\r\n    private _getAvailableShippingOptions;\r\n    private _getStripeShippingOption;\r\n    private _handleShippingOptionChange;\r\n    private _getAmountTransformer;\r\n    private _toCents;\r\n    private _toggleLoadingIndicator;\r\n    private _getMethodId;\r\n}\r\n\r\ndeclare interface StripeOCSCustomerInitializeOptions {\r\n    buttonHeight?: number;\r\n    /**\r\n     * The ID of a container which the stripe iframe should be inserted.\r\n     */\r\n    container: string;\r\n    /**\r\n     * The identifier of the payment method.\r\n     */\r\n    methodId: string;\r\n    gatewayId: string;\r\n    onComplete?: (orderId?: number) => Promise<never>;\r\n    loadingContainerId?: string;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Stripe payment method.\r\n *\r\n * Once Stripe payment is initialized, credit card form fields, provided by the\r\n * payment provider as iframes, will be inserted into the current page. These\r\n * options provide a location and styling for each of the form fields.\r\n *\r\n * ```html\r\n * <!-- This is where the credit card component will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     gateway: 'stripeocs',\r\n *     id: 'optimized_checkout',\r\n *     stripeocs {\r\n *         containerId: 'container',\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface StripeOCSPaymentInitializeOptions extends StripePaymentInitializeOptions {\r\n    /**\r\n     * The location to insert the credit card number form field.\r\n     */\r\n    containerId: string;\r\n    /**\r\n     * The location to insert the currency selector form field.\r\n     */\r\n    currencySelectorContainerId?: string;\r\n    /**\r\n     * Checkout styles from store theme\r\n     */\r\n    style?: Record<string, StripeAppearanceValues>;\r\n    /**\r\n     * Stripe OCS layout options\r\n     */\r\n    layout?: Record<string, string | number | boolean>;\r\n    /**\r\n     * Stripe OCS appearance options for styling the accordion.\r\n     */\r\n    appearance?: StripeAppearanceOptions;\r\n    /**\r\n     * Stripe OCS fonts options for styling the accordion.\r\n     */\r\n    fonts?: StripeCustomFont[];\r\n    onError?(error?: Error): void;\r\n    render(): void;\r\n    paymentMethodSelect?(id: string): void;\r\n    handleClosePaymentMethod?(collapseElement: () => void): void;\r\n    togglePreloader?(showLoader: boolean): void;\r\n}\r\n\r\ndeclare class StripeOCSPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private scriptLoader;\r\n    private stripeIntegrationService;\r\n    private stripeClient?;\r\n    private stripeElements?;\r\n    private selectedMethodId?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, scriptLoader: StripeScriptLoader, stripeIntegrationService: StripeIntegrationService);\r\n    initialize(options: PaymentInitializeOptions & WithStripeOCSPaymentInitializeOptions): Promise<void>;\r\n    execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _initializeStripeElement;\r\n    private _loadStripeJs;\r\n    private _collapseStripeElement;\r\n    private _getPaymentPayload;\r\n    private _processAdditionalAction;\r\n    private _confirmStripePaymentOrThrow;\r\n    private _onStripeElementChange;\r\n    private _shouldSaveInstrument;\r\n    private _getTokenizedOptions;\r\n}\r\n\r\ndeclare interface StripeUPECustomerInitializeOptions {\r\n    /**\r\n     * The ID of a container which the stripe iframe should be inserted.\r\n     */\r\n    container: string;\r\n    /**\r\n     * The identifier of the payment method.\r\n     */\r\n    methodId: string;\r\n    /**\r\n     * The identifier of the payment provider providing the payment method. This\r\n     * option is only required if the provider offers multiple payment options.\r\n     * i.e.: Stripeupe and Klarna.\r\n     */\r\n    gatewayId: string;\r\n    /**\r\n     * A callback that gets called whenever the Stripe Link Authentication Element's value changes.\r\n     *\r\n     * @param authenticated - if the email is authenticated on Stripe.\r\n     * @param email - The new value of the email.\r\n     */\r\n    onEmailChange(authenticated: boolean, email: string): void;\r\n    /**\r\n     * A callback that gets called when Stripe Link Authentication Element is Loaded.\r\n     */\r\n    isLoading(mounted: boolean): void;\r\n    /**\r\n     * get styles from store theme\r\n     */\r\n    getStyles?(): {\r\n        [key: string]: string;\r\n    } | undefined;\r\n}\r\n\r\ndeclare class StripeUPECustomerStrategy implements CustomerStrategy {\r\n    private paymentIntegrationService;\r\n    private scriptLoader;\r\n    private _stripeElements?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, scriptLoader: StripeScriptLoader);\r\n    initialize(options: CustomerInitializeOptions & WithStripeUPECustomerInitializeOptions): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void>;\r\n    signOut(options?: RequestOptions): Promise<void>;\r\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\r\n}\r\n\r\n/**\r\n * A set of options that are required to initialize the Stripe payment method.\r\n *\r\n * Once Stripe payment is initialized, credit card form fields, provided by the\r\n * payment provider as iframes, will be inserted into the current page. These\r\n * options provide a location and styling for each of the form fields.\r\n *\r\n * ```html\r\n * <!-- This is where the credit card component will be inserted -->\r\n * <div id=\"container\"></div>\r\n * ```\r\n *\r\n * ```js\r\n * service.initializePayment({\r\n *     methodId: 'stripeupe',\r\n *     stripeupe {\r\n *         containerId: 'container',\r\n *     },\r\n * });\r\n * ```\r\n */\r\ndeclare interface StripeUPEPaymentInitializeOptions extends StripePaymentInitializeOptions {\r\n    /**\r\n     * The location to insert the credit card number form field.\r\n     */\r\n    containerId: string;\r\n    /**\r\n     * Checkout styles from store theme\r\n     */\r\n    style?: Record<string, StripeAppearanceValues>;\r\n    onError?(error?: Error): void;\r\n    render(): void;\r\n    initStripeElementUpdateTrigger?(updateTriggerFn: (payload: StripeElementUpdateOptions) => void): void;\r\n}\r\n\r\ndeclare class StripeUPEPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private scriptLoader;\r\n    private stripeIntegrationService;\r\n    private _stripeUPEClient?;\r\n    private _stripeElements?;\r\n    private _isStripeElementUpdateEnabled?;\r\n    private _allowRedisplayForStoredInstruments?;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, scriptLoader: StripeScriptLoader, stripeIntegrationService: StripeIntegrationService);\r\n    initialize(options: PaymentInitializeOptions & WithStripeUPEPaymentInitializeOptions): Promise<void>;\r\n    execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _executeWithStripeConfirmation;\r\n    private _executeWithVaulted;\r\n    private _loadStripeElement;\r\n    private _processAdditionalActionWithStripeConfirmation;\r\n    private _confirmStripePaymentOrThrow;\r\n    private _processVaultedAdditionalAction;\r\n    private _loadStripeJs;\r\n    private _getPaymentPayload;\r\n    private _updateStripeElement;\r\n    private _getStripeElementTerms;\r\n    private _updateStripeLinkStateByElementType;\r\n}\r\n\r\ndeclare interface WithStripeOCSCustomerInitializeOptions {\r\n    stripeocs?: StripeOCSCustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithStripeOCSPaymentInitializeOptions {\r\n    stripeocs?: StripeOCSPaymentInitializeOptions;\r\n}\r\n\r\ndeclare interface WithStripeUPECustomerInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the customer step of checkout\r\n     * when using StripeUPE.\r\n     */\r\n    stripeupe?: StripeUPECustomerInitializeOptions;\r\n}\r\n\r\ndeclare interface WithStripeUPEPaymentInitializeOptions {\r\n    stripeupe?: StripeUPEPaymentInitializeOptions;\r\n}\r\n\r\nexport declare const createLinkV2ButtonStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CheckoutButtonStrategyFactory<StripeLinkV2ButtonStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createStripeCSPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<StripeCSPaymentStrategy>, {\r\n    gateway: string;\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createStripeLinkV2CustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<StripeLinkV2CustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createStripeOCSPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<StripeOCSPaymentStrategy>, {\r\n    gateway: string;\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createStripeUPECustomerStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<CustomerStrategyFactory<StripeUPECustomerStrategy>, {\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createStripeUPEPaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<StripeUPEPaymentStrategy>, {\r\n    gateway: string;\r\n    id?: undefined;\r\n} | {\r\n    gateway: string;\r\n    id: string;\r\n}>;\r\n\r\nexport declare const createStripeV3PaymentStrategy: import(\"../../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<any>, {\r\n    gateway: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/td-bank.d.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { ScriptLoader } from '@bigcommerce/script-loader';\r\n\r\ndeclare interface Classes {\r\n    base?: string;\r\n    complete?: string;\r\n    empty?: string;\r\n    focus?: string;\r\n    error?: string;\r\n}\r\n\r\ndeclare interface CreateTokenError {\r\n    field: string;\r\n    type: string;\r\n    message: string;\r\n}\r\n\r\ndeclare interface CreateTokenResponse {\r\n    code: string;\r\n    error?: CreateTokenError;\r\n    token?: string;\r\n    last4?: string;\r\n    expiryMonth?: string;\r\n    expiryYear?: string;\r\n}\r\n\r\ndeclare interface CssStyles {\r\n    color?: string;\r\n    fontFamily?: string;\r\n    fontSize?: string;\r\n    fontStyle?: string;\r\n    fontWeight?: string;\r\n    textDecoration?: string;\r\n    padding?: string;\r\n    paddingLeft?: string;\r\n    paddingTop?: string;\r\n    paddingRight?: string;\r\n    paddingBottom?: string;\r\n}\r\n\r\ndeclare interface FieldOptions {\r\n    placeholder?: string;\r\n    style?: Styles;\r\n    classes?: Classes;\r\n    brands?: string[];\r\n}\r\n\r\ndeclare enum FieldType {\r\n    CARD_NUMBER = \"card-number\",\r\n    CVV = \"cvv\",\r\n    EXPIRY = \"expiry\"\r\n}\r\n\r\ndeclare interface Styles {\r\n    base?: CssStyles;\r\n    complete?: CssStyles;\r\n    empty?: CssStyles;\r\n    error?: CssStyles;\r\n}\r\n\r\ndeclare interface TDCustomCheckoutSDK {\r\n    create(fieldType: FieldType, options?: FieldOptions): TdOnlineMartElement;\r\n    createToken(callback: (result: CreateTokenResponse) => void): void;\r\n}\r\n\r\ndeclare class TDOnlineMartPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private tdOnlineMartScriptLoader;\r\n    private formPoster;\r\n    private tdOnlineMartClient?;\r\n    private tdInputs;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, tdOnlineMartScriptLoader: TDOnlineMartScriptLoader, formPoster: FormPoster);\r\n    initialize(options: PaymentInitializeOptions): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private getPaymentPayloadOrThrow;\r\n    private mountHostedFields;\r\n    private loadTDOnlineMartJs;\r\n    private getTokenOrThrow;\r\n    private getTDOnlineMartClientOrThrow;\r\n    private processWithAdditionalAction;\r\n    private throwTokenizationError;\r\n    private getHostedFieldsOptions;\r\n    private isTrustedVaultingInstrument;\r\n}\r\n\r\ndeclare class TDOnlineMartScriptLoader {\r\n    private scriptLoader;\r\n    private tdOnlineMartWindow;\r\n    constructor(scriptLoader: ScriptLoader, tdOnlineMartWindow?: TdOnlineMartHostWindow);\r\n    load(): Promise<TDCustomCheckoutSDK>;\r\n}\r\n\r\ndeclare interface TdOnlineMartElement {\r\n    mount(cssSelector: string): void;\r\n    unmount(): void;\r\n}\r\n\r\ndeclare interface TdOnlineMartHostWindow extends Window {\r\n    customcheckout?(): TDCustomCheckoutSDK;\r\n}\r\n\r\nexport declare const createTDOnlineMartPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<TDOnlineMartPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/worldpayaccess.d.ts",
    "content": "import { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\r\nimport { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare interface WithWorldpayAccessPaymentInitializeOptions {\r\n    /**\r\n     * The options that are required to initialize the Apple Pay payment\r\n     * method. They can be omitted unless you need to support Apple Pay.\r\n     */\r\n    worldpay?: WorldpayAccessPaymentInitializeOptions;\r\n}\r\n\r\ndeclare class WorldpayAccessOpenBankingPaymentStrategy implements PaymentStrategy {\r\n    private _paymentIntegrationService;\r\n    constructor(_paymentIntegrationService: PaymentIntegrationService);\r\n    execute({ payment }: OrderRequestBody): Promise<void>;\r\n    initialize(): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _buildOpenBankingSubmitPayment;\r\n    private _isWorldpayAccessRedirectResponse;\r\n}\r\n\r\ndeclare interface WorldpayAccessPaymentInitializeOptions {\r\n    /**\r\n     * A callback that gets called when the iframe is ready to be added to the\r\n     * current page. It is responsible for determining where the iframe should\r\n     * be inserted in the DOM.\r\n     *\r\n     * @param iframe - The iframe element containing the payment web page\r\n     * provided by the strategy.\r\n     * @param cancel - A function, when called, will cancel the payment\r\n     * process and remove the iframe.\r\n     */\r\n    onLoad(iframe: HTMLIFrameElement, cancel: () => void): void;\r\n}\r\n\r\ndeclare class WorldpayAccessPaymentStrategy extends CreditCardPaymentStrategy {\r\n    private _initializeOptions?;\r\n    initialize(options?: PaymentInitializeOptions & WithWorldpayAccessPaymentInitializeOptions): Promise<void>;\r\n    execute(orderRequest: OrderRequestBody, options?: PaymentInitializeOptions): Promise<void>;\r\n    private _processAdditionalAction;\r\n    private _createHiddenIframe;\r\n    private _createIframe;\r\n    private _submitAdditionalAction;\r\n    private _isValidJsonWithSessionId;\r\n}\r\n\r\nexport declare const createWorldpayAccessOpenBankingPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<WorldpayAccessOpenBankingPaymentStrategy>, {\r\n    id: string;\r\n    gateway: string;\r\n}>;\r\n\r\nexport declare const createWorldpayAccessPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<WorldpayAccessPaymentStrategy>, {\r\n    gateway: string;\r\n    id: string;\r\n} | {\r\n    id: string;\r\n    gateway?: undefined;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/integrations/zip.d.ts",
    "content": "import { OrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentRequestOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategy } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { PaymentStrategyFactory } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { StorefrontPaymentRequestSender } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare class ZipPaymentStrategy implements PaymentStrategy {\r\n    private paymentIntegrationService;\r\n    private storefrontPaymentRequestSender;\r\n    constructor(paymentIntegrationService: PaymentIntegrationService, storefrontPaymentRequestSender: StorefrontPaymentRequestSender);\r\n    initialize(): Promise<void>;\r\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\r\n    finalize(): Promise<void>;\r\n    deinitialize(): Promise<void>;\r\n    private _prepareForReferredRegistration;\r\n}\r\n\r\nexport declare const createZipPaymentStrategy: import(\"../../payment-integration-api/src/resolvable-module\").default<PaymentStrategyFactory<ZipPaymentStrategy>, {\r\n    id: string;\r\n}>;\r\n"
  },
  {
    "path": "dist/types/internal-mappers.d.ts",
    "content": "import { CartSource } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\nimport { Currency as Currency_2 } from '@bigcommerce/checkout-sdk/payment-integration-api';\r\n\r\ndeclare interface Address extends AddressRequestBody {\r\n    country: string;\r\n    shouldSaveAddress?: boolean;\r\n}\r\n\r\ndeclare interface AddressExtraFieldValue {\r\n    fieldId: string;\r\n    fieldValue: string | number;\r\n}\r\n\r\ndeclare interface AddressRequestBody {\r\n    firstName: string;\r\n    lastName: string;\r\n    company: string;\r\n    address1: string;\r\n    address2: string;\r\n    city: string;\r\n    stateOrProvince: string;\r\n    stateOrProvinceCode: string;\r\n    countryCode: string;\r\n    postalCode: string;\r\n    phone: string;\r\n    customFields: Array<{\r\n        fieldId: string;\r\n        fieldValue: string | number | string[];\r\n    }>;\r\n    extraFields?: AddressExtraFieldValue[];\r\n}\r\n\r\ndeclare interface Banner {\r\n    type: string;\r\n    text: string;\r\n}\r\n\r\ndeclare interface BillingAddress extends Address {\r\n    id: string;\r\n    email?: string;\r\n}\r\n\r\nexport declare class CacheKeyResolver {\r\n    private _lastId;\r\n    private _map;\r\n    private _usedMaps;\r\n    private _options;\r\n    constructor(options?: CacheKeyResolverOptions);\r\n    getKey(...args: any[]): string;\r\n    getUsedCount(...args: any[]): number;\r\n    private _resolveMap;\r\n    private _generateMap;\r\n    private _removeLeastUsedMap;\r\n    private _removeMap;\r\n}\r\n\r\ndeclare interface CacheKeyResolverOptions {\r\n    maxSize?: number;\r\n    onExpire?(key: string): void;\r\n    isEqual?(valueA: any, valueB: any): boolean;\r\n}\r\n\r\ndeclare interface Cart {\r\n    id: string;\r\n    customerId: number;\r\n    companyId: number | null;\r\n    currency: Currency;\r\n    email: string;\r\n    isTaxIncluded: boolean;\r\n    baseAmount: number;\r\n    /**\r\n     * This is the total amount of discount applied on line_items.\r\n     */\r\n    discountAmount: number;\r\n    cartAmount: number;\r\n    /**\r\n     * This is an array of all applied coupons.\r\n     */\r\n    coupons: Coupon[];\r\n    /**\r\n     * This is the total amount of discount applied on cart including coupons and line_items discounts.\r\n     */\r\n    discounts: Discount[];\r\n    lineItems: LineItemMap;\r\n    createdTime: string;\r\n    updatedTime: string;\r\n    source?: CartSource;\r\n    locale: string;\r\n}\r\n\r\ndeclare interface Checkout {\r\n    id: string;\r\n    billingAddress?: BillingAddress;\r\n    cart: Cart;\r\n    customer: Customer;\r\n    customerMessage: string;\r\n    consignments: Consignment[];\r\n    taxes: Tax[];\r\n    discounts: Discount[];\r\n    displayDiscountTotal: number;\r\n    isStoreCreditApplied: boolean;\r\n    coupons: Coupon[];\r\n    orderId?: number;\r\n    giftWrappingCostTotal: number;\r\n    comparisonShippingCost: number;\r\n    shippingCostTotal: number;\r\n    shippingCostBeforeDiscount: number;\r\n    /**\r\n     * Whether the current checkout must execute spam protection\r\n     * before placing the order.\r\n     *\r\n     * Note: You need to enable Google ReCAPTCHA bot protection in your Checkout Settings.\r\n     */\r\n    shouldExecuteSpamCheck: boolean;\r\n    handlingCostTotal: number;\r\n    taxTotal: number;\r\n    subtotal: number;\r\n    grandTotal: number;\r\n    outstandingBalance: number;\r\n    orderBasedAutoDiscountTotal: number;\r\n    manualDiscountTotal: number;\r\n    hasOrderLevelAutoDiscountMaxLimitReached?: boolean;\r\n    giftCertificates: GiftCertificate[];\r\n    promotions?: Promotion[];\r\n    balanceDue: number;\r\n    createdTime: string;\r\n    updatedTime: string;\r\n    payments?: CheckoutPayment[];\r\n    channelId: number;\r\n    fees: Fee[];\r\n    totalDiscount: number;\r\n    version: number;\r\n}\r\n\r\ndeclare interface CheckoutPayment {\r\n    detail: {\r\n        step: string;\r\n    };\r\n    providerId: string;\r\n    providerType: string;\r\n    gatewayId?: string;\r\n}\r\n\r\ndeclare interface Consignment {\r\n    id: string;\r\n    address: Address;\r\n    shippingAddress: Address;\r\n    discounts: ConsignmentDiscount[];\r\n    handlingCost: number;\r\n    shippingCost: number;\r\n    availableShippingOptions?: ShippingOption[];\r\n    selectedShippingOption?: ShippingOption;\r\n    selectedPickupOption?: ConsignmentPickupOption;\r\n    lineItemIds: string[];\r\n    comparisonShippingCost: number;\r\n    shippingCostBeforeDiscount: number;\r\n}\r\n\r\ndeclare type ConsignmentAutomaticDiscount = ConsignmentDiscountBase<'AUTOMATIC'>;\r\n\r\ndeclare interface ConsignmentCouponDiscount extends ConsignmentDiscountBase<'COUPON'> {\r\n    couponId: number;\r\n    couponCode: string;\r\n}\r\n\r\ndeclare type ConsignmentDiscount = ConsignmentAutomaticDiscount | ConsignmentCouponDiscount;\r\n\r\ndeclare interface ConsignmentDiscountBase<T> {\r\n    id: number;\r\n    amount: number;\r\n    type: T;\r\n}\r\n\r\ndeclare interface ConsignmentPickupOption {\r\n    pickupMethodId: number;\r\n}\r\n\r\ndeclare interface Coupon {\r\n    id: string;\r\n    displayName: string;\r\n    code: string;\r\n    couponType: string;\r\n    discountedAmount: number;\r\n    hasMaxLimitReached?: boolean;\r\n}\r\n\r\ndeclare interface Currency {\r\n    name: string;\r\n    code: string;\r\n    symbol: string;\r\n    decimalPlaces: number;\r\n}\r\n\r\ndeclare interface CustomItem {\r\n    id: string;\r\n    listPrice: number;\r\n    extendedListPrice: number;\r\n    name: string;\r\n    quantity: number;\r\n    sku: string;\r\n}\r\n\r\ndeclare interface Customer {\r\n    id: number;\r\n    addresses: CustomerAddress[];\r\n    storeCredit: number;\r\n    /**\r\n     * The email address of the signed in customer.\r\n     */\r\n    email: string;\r\n    firstName: string;\r\n    fullName: string;\r\n    isGuest: boolean;\r\n    lastName: string;\r\n    /**\r\n     * Indicates whether the customer should be prompted to sign-in.\r\n     *\r\n     * Note: You need to enable \"Prompt existing accounts to sign in\" in your Checkout Settings.\r\n     */\r\n    shouldEncourageSignIn: boolean;\r\n    customerGroup?: CustomerGroup;\r\n}\r\n\r\ndeclare interface CustomerAddress extends Address {\r\n    id: number;\r\n    type: string;\r\n}\r\n\r\ndeclare interface CustomerGroup {\r\n    id: number;\r\n    name: string;\r\n}\r\n\r\ndeclare interface DigitalItem extends LineItem {\r\n    downloadFileUrls: string[];\r\n    downloadPageUrl: string;\r\n    downloadSize: string;\r\n}\r\n\r\ndeclare interface Discount {\r\n    id: string;\r\n    discountedAmount: number;\r\n}\r\n\r\ndeclare interface DiscountNotification {\r\n    message: string;\r\n    messageHtml: string;\r\n    discountType: string | null;\r\n    placeholders: string[];\r\n}\r\n\r\ndeclare interface Fee {\r\n    id: string;\r\n    type: string;\r\n    name: string;\r\n    displayName: string;\r\n    cost: number;\r\n    source: string;\r\n}\r\n\r\ndeclare interface GatewayOrderPayment extends OrderPayment {\r\n    detail: {\r\n        step: string;\r\n        instructions: string;\r\n    };\r\n    mandate?: {\r\n        id: string;\r\n        url?: string;\r\n        mandateText?: {\r\n            [key: string]: string;\r\n        };\r\n    };\r\n}\r\n\r\ndeclare interface GiftCertificate {\r\n    balance: number;\r\n    remaining: number;\r\n    used: number;\r\n    code: string;\r\n    purchaseDate: string;\r\n}\r\n\r\ndeclare interface GiftCertificateItem {\r\n    id: string | number;\r\n    name: string;\r\n    theme: string;\r\n    amount: number;\r\n    taxable: boolean;\r\n    sender: {\r\n        name: string;\r\n        email: string;\r\n    };\r\n    recipient: {\r\n        name: string;\r\n        email: string;\r\n    };\r\n    message: string;\r\n}\r\n\r\ndeclare interface GiftCertificateOrderPayment extends OrderPayment {\r\n    detail: {\r\n        code: string;\r\n        remaining: number;\r\n    };\r\n}\r\n\r\ndeclare interface InternalAddress<T = string> {\r\n    id?: T;\r\n    firstName: string;\r\n    lastName: string;\r\n    company: string;\r\n    addressLine1: string;\r\n    addressLine2: string;\r\n    city: string;\r\n    province: string;\r\n    provinceCode: string;\r\n    postCode: string;\r\n    country: string;\r\n    countryCode: string;\r\n    phone: string;\r\n    customFields: Array<{\r\n        fieldId: string;\r\n        fieldValue: string | number | string[];\r\n    }>;\r\n    type?: string;\r\n}\r\n\r\ndeclare interface InternalCart {\r\n    id: string;\r\n    items: InternalLineItem[];\r\n    currency: string;\r\n    subtotal: {\r\n        amount: number;\r\n        integerAmount: number;\r\n    };\r\n    coupon: {\r\n        discountedAmount: number;\r\n        coupons: InternalCoupon[];\r\n    };\r\n    discount: {\r\n        amount: number;\r\n        integerAmount: number;\r\n    };\r\n    discountNotifications: DiscountNotification[];\r\n    giftCertificate: {\r\n        totalDiscountedAmount: number;\r\n        appliedGiftCertificates: {\r\n            [code: string]: InternalGiftCertificate;\r\n        };\r\n    };\r\n    shipping: {\r\n        amount: number;\r\n        integerAmount: number;\r\n        amountBeforeDiscount: number;\r\n        integerAmountBeforeDiscount: number;\r\n        required: boolean;\r\n    };\r\n    storeCredit: {\r\n        amount: number;\r\n    };\r\n    taxSubtotal: {\r\n        amount: number;\r\n        integerAmount: number;\r\n    };\r\n    taxes: Array<{\r\n        name: string;\r\n        amount: number;\r\n    }>;\r\n    taxTotal: {\r\n        amount: number;\r\n        integerAmount: number;\r\n    };\r\n    handling: {\r\n        amount: number;\r\n        integerAmount: number;\r\n    };\r\n    grandTotal: {\r\n        amount: number;\r\n        integerAmount: number;\r\n    };\r\n}\r\n\r\ndeclare interface InternalCoupon {\r\n    code: string;\r\n    discount: string;\r\n    discountType: number;\r\n}\r\n\r\ndeclare interface InternalCustomer {\r\n    addresses: Array<InternalAddress<number>>;\r\n    customerId: number;\r\n    isGuest: boolean;\r\n    storeCredit: number;\r\n    email: string;\r\n    firstName: string;\r\n    lastName: string;\r\n    name: string;\r\n    remote?: {\r\n        provider: string;\r\n        billing?: string;\r\n        billingMessage?: string;\r\n        customer?: string;\r\n        payment?: string;\r\n        shipping?: string;\r\n        customerMessage?: string;\r\n        useStoreCredit?: boolean;\r\n    };\r\n    customerGroupId?: number;\r\n    customerGroupName?: string;\r\n    phoneNumber?: string;\r\n}\r\n\r\ndeclare interface InternalGiftCertificate {\r\n    code: string;\r\n    discountedAmount: number;\r\n    remainingBalance: number;\r\n    giftCertificate?: {\r\n        balance: number;\r\n        code: string;\r\n        purchaseDate: string;\r\n    };\r\n}\r\n\r\ndeclare interface InternalGiftCertificateList {\r\n    totalDiscountedAmount: number;\r\n    appliedGiftCertificates: {\r\n        [code: string]: InternalGiftCertificate;\r\n    };\r\n}\r\n\r\ndeclare interface InternalLineItem {\r\n    amount: number;\r\n    amountAfterDiscount: number;\r\n    attributes: Array<{\r\n        name: string;\r\n        value: string;\r\n    }>;\r\n    discount: number;\r\n    integerAmount: number;\r\n    downloadsPageUrl?: string;\r\n    integerAmountAfterDiscount: number;\r\n    integerDiscount: number;\r\n    integerUnitPrice: number;\r\n    integerUnitPriceAfterDiscount: number;\r\n    id: string | number;\r\n    imageUrl: string;\r\n    name?: string;\r\n    quantity: number;\r\n    brand?: string;\r\n    sku?: string;\r\n    categoryNames?: string[];\r\n    type: string;\r\n    variantId: number | null;\r\n    productId?: number;\r\n    addedByPromotion?: boolean;\r\n    sender?: {\r\n        name: string;\r\n        email: string;\r\n    };\r\n    recipient?: {\r\n        name: string;\r\n        email: string;\r\n    };\r\n}\r\n\r\ndeclare interface InternalOrder {\r\n    id: number;\r\n    orderId: number;\r\n    items: InternalLineItem[];\r\n    currency: string;\r\n    customerCanBeCreated: boolean;\r\n    subtotal: {\r\n        amount: number;\r\n        integerAmount: number;\r\n    };\r\n    coupon: {\r\n        discountedAmount: number;\r\n        coupons: InternalCoupon[];\r\n    };\r\n    discount: {\r\n        amount: number;\r\n        integerAmount: number;\r\n    };\r\n    discountNotifications: DiscountNotification[];\r\n    giftCertificate: InternalGiftCertificateList;\r\n    shipping: {\r\n        amount: number;\r\n        integerAmount: number;\r\n        amountBeforeDiscount: number;\r\n        integerAmountBeforeDiscount: number;\r\n    };\r\n    status: string;\r\n    storeCredit: {\r\n        amount: number;\r\n    };\r\n    taxes: Array<{\r\n        name: string;\r\n        amount: number;\r\n    }>;\r\n    taxTotal: {\r\n        amount: number;\r\n        integerAmount: number;\r\n    };\r\n    handling: {\r\n        amount: number;\r\n        integerAmount: number;\r\n    };\r\n    grandTotal: {\r\n        amount: number;\r\n        integerAmount: number;\r\n    };\r\n    token?: string;\r\n    payment: InternalOrderPayment;\r\n    socialData?: {\r\n        [itemId: string]: InternalSocialDataList;\r\n    };\r\n    hasDigitalItems: boolean;\r\n    isDownloadable: boolean;\r\n    isComplete: boolean;\r\n    callbackUrl?: string;\r\n}\r\n\r\ndeclare interface InternalOrderMeta {\r\n    deviceFingerprint?: string;\r\n}\r\n\r\ndeclare interface InternalOrderPayment {\r\n    id?: string;\r\n    gateway?: string;\r\n    redirectUrl?: string;\r\n    returnUrl?: string;\r\n    status?: string;\r\n    helpText?: string;\r\n}\r\n\r\ndeclare interface InternalQuote {\r\n    orderComment: string;\r\n    shippingOption?: string;\r\n    billingAddress: InternalAddress;\r\n    shippingAddress?: InternalAddress;\r\n}\r\n\r\ndeclare interface InternalShippingOption {\r\n    description: string;\r\n    module: string;\r\n    price: number;\r\n    id: string;\r\n    selected: boolean;\r\n    isRecommended: boolean;\r\n    imageUrl: string;\r\n    transitTime: string;\r\n}\r\n\r\ndeclare interface InternalShippingOptionList {\r\n    [key: string]: InternalShippingOption[];\r\n}\r\n\r\ndeclare interface InternalSocialDataItem {\r\n    name: string;\r\n    description: string;\r\n    image: string;\r\n    url: string;\r\n    shareText: string;\r\n    sharingLink: string;\r\n    channelName: string;\r\n    channelCode: string;\r\n}\r\n\r\ndeclare interface InternalSocialDataList {\r\n    [key: string]: InternalSocialDataItem;\r\n}\r\n\r\ndeclare interface LineItem {\r\n    id: string | number;\r\n    variantId: number;\r\n    productId: number;\r\n    sku: string;\r\n    name: string;\r\n    url: string;\r\n    quantity: number;\r\n    brand: string;\r\n    categoryNames?: string[];\r\n    categories?: LineItemCategory[][];\r\n    isTaxable: boolean;\r\n    imageUrl: string;\r\n    discounts: Array<{\r\n        name: string;\r\n        discountedAmount: number;\r\n    }>;\r\n    discountAmount: number;\r\n    couponAmount: number;\r\n    listPrice: number;\r\n    salePrice: number;\r\n    retailPrice: number;\r\n    comparisonPrice: number;\r\n    extendedListPrice: number;\r\n    extendedSalePrice: number;\r\n    extendedComparisonPrice: number;\r\n    socialMedia?: LineItemSocialData[];\r\n    options?: LineItemOption[];\r\n    addedByPromotion: boolean;\r\n    parentId?: string | null;\r\n    quantityBackordered?: number;\r\n    backorderMessage?: string | null;\r\n    stockPosition?: StockPosition;\r\n}\r\n\r\ndeclare interface LineItemCategory {\r\n    name: string;\r\n}\r\n\r\ndeclare interface LineItemMap {\r\n    physicalItems: PhysicalItem[];\r\n    digitalItems: DigitalItem[];\r\n    customItems?: CustomItem[];\r\n    giftCertificates: GiftCertificateItem[];\r\n}\r\n\r\ndeclare interface LineItemOption {\r\n    name: string;\r\n    nameId: number;\r\n    value: string;\r\n    valueId: number | null;\r\n}\r\n\r\ndeclare interface LineItemSocialData {\r\n    channel: string;\r\n    code: string;\r\n    text: string;\r\n    link: string;\r\n}\r\n\r\ndeclare interface Order {\r\n    baseAmount: number;\r\n    billingAddress: OrderBillingAddress;\r\n    cartId: string;\r\n    coupons: Coupon[];\r\n    consignments: OrderConsignment;\r\n    currency: Currency_2;\r\n    customerCanBeCreated: boolean;\r\n    customerId: number;\r\n    customerMessage: string;\r\n    discountAmount: number;\r\n    displayDiscountTotal: number;\r\n    handlingCostTotal: number;\r\n    hasDigitalItems: boolean;\r\n    isComplete: boolean;\r\n    isDownloadable: boolean;\r\n    isTaxIncluded: boolean;\r\n    lineItems: LineItemMap;\r\n    orderAmount: number;\r\n    orderAmountAsInteger: number;\r\n    orderBasedAutoDiscountTotal: number;\r\n    orderId: number;\r\n    manualDiscountTotal: number;\r\n    productAutoDiscountedSubtotal: number;\r\n    payments?: OrderPayments;\r\n    giftWrappingCostTotal: number;\r\n    comparisonShippingCost: number;\r\n    shippingCostTotal: number;\r\n    shippingCostBeforeDiscount: number;\r\n    status: string;\r\n    taxes: Tax[];\r\n    taxTotal: number;\r\n    totalDiscount: number;\r\n    channelId: number;\r\n    fees: OrderFee[];\r\n}\r\n\r\ndeclare interface OrderBillingAddress extends Address {\r\n    email?: string;\r\n}\r\n\r\ndeclare interface OrderConsignment {\r\n    shipping: OrderShippingConsignment[];\r\n}\r\n\r\ndeclare interface OrderFee {\r\n    id: number;\r\n    type: string;\r\n    customerDisplayName: string;\r\n    cost: number;\r\n    source: string;\r\n}\r\n\r\ndeclare interface OrderMetaState extends InternalOrderMeta {\r\n    token?: string;\r\n    orderToken?: string;\r\n    callbackUrl?: string;\r\n    payment?: InternalOrderPayment;\r\n}\r\n\r\ndeclare interface OrderPayment {\r\n    providerId: string;\r\n    gatewayId?: string;\r\n    methodId?: string;\r\n    paymentId?: string;\r\n    description: string;\r\n    amount: number;\r\n}\r\n\r\ndeclare type OrderPayments = Array<GatewayOrderPayment | GiftCertificateOrderPayment>;\r\n\r\ndeclare interface OrderShippingConsignment {\r\n    lineItems: Array<{\r\n        id: number;\r\n    }>;\r\n    shippingAddressId: number;\r\n    firstName: string;\r\n    lastName: string;\r\n    company: string;\r\n    address1: string;\r\n    address2: string;\r\n    city: string;\r\n    stateOrProvince: string;\r\n    postalCode: string;\r\n    country: string;\r\n    countryCode: string;\r\n    email: string;\r\n    phone: string;\r\n    itemsTotal: number;\r\n    itemsShipped: number;\r\n    shippingMethod: string;\r\n    baseCost: number;\r\n    costExTax: number;\r\n    costIncTax: number;\r\n    costTax: number;\r\n    costTaxClassId: number;\r\n    baseHandlingCost: number;\r\n    handlingCostExTax: number;\r\n    handlingCostIncTax: number;\r\n    handlingCostTax: number;\r\n    handlingCostTaxClassId: number;\r\n    shippingZoneId: number;\r\n    shippingZoneName: string;\r\n    customFields: Array<{\r\n        name: string;\r\n        value: string | null;\r\n    }>;\r\n    discounts: OrderShippingConsignmentDiscount[];\r\n}\r\n\r\ndeclare interface OrderShippingConsignmentDiscount {\r\n    id: number;\r\n    amount: number;\r\n    code: string | null;\r\n}\r\n\r\ndeclare interface PhysicalItem extends LineItem {\r\n    isShippingRequired: boolean;\r\n    giftWrapping?: {\r\n        name: string;\r\n        message: string;\r\n        amount: number;\r\n    };\r\n}\r\n\r\ndeclare interface Promotion {\r\n    banners: Banner[];\r\n}\r\n\r\ndeclare interface ShippingOption {\r\n    additionalDescription: string;\r\n    description: string;\r\n    id: string;\r\n    isRecommended: boolean;\r\n    imageUrl: string;\r\n    cost: number;\r\n    costAfterDiscount: number;\r\n    transitTime: string;\r\n    type: string;\r\n}\r\n\r\ndeclare interface StockPosition {\r\n    quantityOnHand: number;\r\n    quantityBackordered: number;\r\n    quantityOutOfStock: number;\r\n    backorderMessage: string | null;\r\n}\r\n\r\ndeclare interface Tax {\r\n    name: string;\r\n    amount: number;\r\n}\r\n\r\n/**\r\n * @deprecated This mapper is only for internal use only. It is required during\r\n * the transition period as we are moving to adopt the new storefront API object\r\n * schema.\r\n */\r\nexport declare function mapToInternalAddress(address: Address | BillingAddress, consignments?: Consignment[]): InternalAddress<any>;\r\n\r\n/**\r\n * @deprecated This mapper is only for internal use only. It is required during\r\n * the transition period as we are moving to adopt the new storefront API object\r\n * schema.\r\n */\r\nexport declare function mapToInternalCart(checkout: Checkout): InternalCart;\r\n\r\n/**\r\n * @deprecated This mapper is only for internal use only. It is required during\r\n * the transition period as we are moving to adopt the new storefront API object\r\n * schema.\r\n */\r\nexport declare function mapToInternalCoupon(coupon: Coupon): InternalCoupon;\r\n\r\n/**\r\n * @deprecated This mapper is only for internal use only. It is required during\r\n * the transition period as we are moving to adopt the new storefront API object\r\n * schema.\r\n */\r\nexport declare function mapToInternalCustomer(customer: Customer, billingAddress: OrderBillingAddress): InternalCustomer;\r\n\r\n/**\r\n * @deprecated This mapper is only for internal use only. It is required during\r\n * the transition period as we are moving to adopt the new storefront API object\r\n * schema.\r\n */\r\nexport declare function mapToInternalGiftCertificate(giftCertificate: GiftCertificate): InternalGiftCertificate;\r\n\r\n/**\r\n * @deprecated This mapper is only for internal use only. It is required during\r\n * the transition period as we are moving to adopt the new storefront API object\r\n * schema.\r\n */\r\nexport declare function mapToInternalLineItem(item: LineItem, type: string, decimalPlaces: number, idKey?: keyof LineItem): InternalLineItem;\r\n\r\n/**\r\n * @deprecated This mapper is only for internal use only. It is required during\r\n * the transition period as we are moving to adopt the new storefront API object\r\n * schema.\r\n */\r\nexport declare function mapToInternalLineItems(itemMap: LineItemMap, decimalPlaces: number, idKey?: keyof LineItem): InternalLineItem[];\r\n\r\n/**\r\n * @deprecated This mapper is only for internal use only. It is required during\r\n * the transition period as we are moving to adopt the new storefront API object\r\n * schema.\r\n */\r\nexport declare function mapToInternalOrder(order: Order, orderMeta?: OrderMetaState): InternalOrder;\r\n\r\n/**\r\n * @deprecated This mapper is only for internal use only. It is required during\r\n * the transition period as we are moving to adopt the new storefront API object\r\n * schema.\r\n */\r\nexport declare function mapToInternalQuote(checkout: Checkout, shippingAddress?: Address): InternalQuote;\r\n\r\n/**\r\n * @deprecated This mapper is only for internal use only. It is required during\r\n * the transition period as we are moving to adopt the new storefront API object\r\n * schema.\r\n */\r\nexport declare function mapToInternalShippingOption(option: ShippingOption, isSelected: boolean): InternalShippingOption;\r\n\r\n/**\r\n * @deprecated This mapper is only for internal use only. It is required during\r\n * the transition period as we are moving to adopt the new storefront API object\r\n * schema.\r\n */\r\nexport declare function mapToInternalShippingOptions(consignments: Consignment[]): InternalShippingOptionList;\r\n"
  },
  {
    "path": "docs/.nojekyll",
    "content": "TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false."
  },
  {
    "path": "docs/README.md",
    "content": "@bigcommerce/checkout-sdk\n\n# @bigcommerce/checkout-sdk\n\n## Table of contents\n\n### Enumerations\n\n- [AdyenCardFields](enums/AdyenCardFields.md)\n- [CheckoutButtonMethodType](enums/CheckoutButtonMethodType.md)\n- [CheckoutIncludes](enums/CheckoutIncludes.md)\n- [EmbeddedCheckoutEventType](enums/EmbeddedCheckoutEventType.md)\n- [ExtensionCommandType](enums/ExtensionCommandType.md)\n- [ExtensionEventType](enums/ExtensionEventType.md)\n- [ExtensionMessageType](enums/ExtensionMessageType.md)\n- [ExtensionQueryType](enums/ExtensionQueryType.md)\n- [ExtensionRegion](enums/ExtensionRegion.md)\n- [ExtensionType](enums/ExtensionType.md)\n- [GooglePayKey](enums/GooglePayKey.md)\n- [HostedFieldEventType](enums/HostedFieldEventType.md)\n- [HostedFieldType](enums/HostedFieldType.md)\n- [HostedInputEventType](enums/HostedInputEventType.md)\n- [IconStyle](enums/IconStyle.md)\n- [PaypalButtonStyleColorOption](enums/PaypalButtonStyleColorOption.md)\n- [PaypalButtonStyleLabelOption](enums/PaypalButtonStyleLabelOption.md)\n- [PaypalButtonStyleLayoutOption](enums/PaypalButtonStyleLayoutOption.md)\n- [PaypalButtonStyleShapeOption](enums/PaypalButtonStyleShapeOption.md)\n- [PaypalButtonStyleSizeOption](enums/PaypalButtonStyleSizeOption.md)\n- [RadiusUnit](enums/RadiusUnit.md)\n- [StyleButtonColor](enums/StyleButtonColor.md)\n- [StyleButtonColor\\_2](enums/StyleButtonColor_2.md)\n- [StyleButtonLabel](enums/StyleButtonLabel.md)\n- [StyleButtonLabel\\_2](enums/StyleButtonLabel_2.md)\n- [StyleButtonShape](enums/StyleButtonShape.md)\n- [StyleButtonShape\\_2](enums/StyleButtonShape_2.md)\n- [StyleButtonShape\\_3](enums/StyleButtonShape_3.md)\n- [StyleButtonSize](enums/StyleButtonSize.md)\n- [UntrustedShippingCardVerificationType](enums/UntrustedShippingCardVerificationType.md)\n\n### Classes\n\n- [CartChangedError](classes/CartChangedError.md)\n- [CartConsistencyError](classes/CartConsistencyError.md)\n- [CartStockPositionsChangedError](classes/CartStockPositionsChangedError.md)\n- [CheckoutButtonErrorSelector](classes/CheckoutButtonErrorSelector.md)\n- [CheckoutButtonInitializer](classes/CheckoutButtonInitializer.md)\n- [CheckoutButtonStatusSelector](classes/CheckoutButtonStatusSelector.md)\n- [CheckoutService](classes/CheckoutService.md)\n- [CurrencyService](classes/CurrencyService.md)\n- [DetachmentObserver](classes/DetachmentObserver.md)\n- [EmbeddedCheckout](classes/EmbeddedCheckout.md)\n- [GoogleRecaptcha](classes/GoogleRecaptcha.md)\n- [GoogleRecaptchaScriptLoader](classes/GoogleRecaptchaScriptLoader.md)\n- [HostedField](classes/HostedField.md)\n- [HostedForm](classes/HostedForm.md)\n- [HostedFormFactory](classes/HostedFormFactory.md)\n- [HostedFormOrderDataTransformer](classes/HostedFormOrderDataTransformer.md)\n- [IframeEventListener](classes/IframeEventListener.md)\n- [IframeEventPoster](classes/IframeEventPoster.md)\n- [LanguageService](classes/LanguageService.md)\n- [MutationObserverFactory](classes/MutationObserverFactory.md)\n- [PaymentHumanVerificationHandler](classes/PaymentHumanVerificationHandler.md)\n- [RequestError](classes/RequestError.md)\n- [StandardError](classes/StandardError.md)\n- [StoredCardHostedFormService](classes/StoredCardHostedFormService.md)\n\n### Interfaces\n\n- [AchInstrument](interfaces/AchInstrument.md)\n- [Address](interfaces/Address.md)\n- [AddressExtraFieldValue](interfaces/AddressExtraFieldValue.md)\n- [AddressRequestBody](interfaces/AddressRequestBody.md)\n- [AdyenAdditionalActionCallbacks](interfaces/AdyenAdditionalActionCallbacks.md)\n- [AdyenAdditionalActionOptions](interfaces/AdyenAdditionalActionOptions.md)\n- [AdyenBaseCardComponentOptions](interfaces/AdyenBaseCardComponentOptions.md)\n- [AdyenComponent](interfaces/AdyenComponent.md)\n- [AdyenComponentEvents](interfaces/AdyenComponentEvents.md)\n- [AdyenComponentState](interfaces/AdyenComponentState.md)\n- [AdyenCreditCardComponentOptions](interfaces/AdyenCreditCardComponentOptions.md)\n- [AdyenIdealComponentOptions](interfaces/AdyenIdealComponentOptions.md)\n- [AdyenPaymentMethodState](interfaces/AdyenPaymentMethodState.md)\n- [AdyenPlaceholderData](interfaces/AdyenPlaceholderData.md)\n- [AdyenThreeDS2Options](interfaces/AdyenThreeDS2Options.md)\n- [AdyenV2PaymentInitializeOptions](interfaces/AdyenV2PaymentInitializeOptions.md)\n- [AdyenV3PaymentInitializeOptions](interfaces/AdyenV3PaymentInitializeOptions.md)\n- [AdyenValidationState](interfaces/AdyenValidationState.md)\n- [AmazonPayRemoteCheckout](interfaces/AmazonPayRemoteCheckout.md)\n- [AmazonPayV2CustomerInitializeOptions](interfaces/AmazonPayV2CustomerInitializeOptions.md)\n- [AmazonPayV2PaymentInitializeOptions](interfaces/AmazonPayV2PaymentInitializeOptions.md)\n- [AmazonPayV2ShippingInitializeOptions](interfaces/AmazonPayV2ShippingInitializeOptions.md)\n- [ApplePayButtonInitializeOptions](interfaces/ApplePayButtonInitializeOptions.md)\n- [ApplePayCustomerInitializeOptions](interfaces/ApplePayCustomerInitializeOptions.md)\n- [ApplePayPaymentInitializeOptions](interfaces/ApplePayPaymentInitializeOptions.md)\n- [B2BApiSettings](interfaces/B2BApiSettings.md)\n- [B2BTokenSelector](interfaces/B2BTokenSelector.md)\n- [BankInstrument](interfaces/BankInstrument.md)\n- [Banner](interfaces/Banner.md)\n- [BaseAccountInstrument](interfaces/BaseAccountInstrument.md)\n- [BaseCheckoutButtonInitializeOptions](interfaces/BaseCheckoutButtonInitializeOptions.md)\n- [BaseCustomerInitializeOptions](interfaces/BaseCustomerInitializeOptions.md)\n- [BaseElementOptions](interfaces/BaseElementOptions.md)\n- [BaseIndividualElementOptions](interfaces/BaseIndividualElementOptions.md)\n- [BaseInstrument](interfaces/BaseInstrument.md)\n- [BasePaymentInitializeOptions](interfaces/BasePaymentInitializeOptions.md)\n- [BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions](interfaces/BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md)\n- [BigCommercePaymentsButtonInitializeOptions](interfaces/BigCommercePaymentsButtonInitializeOptions.md)\n- [BigCommercePaymentsCreditCardsPaymentInitializeOptions](interfaces/BigCommercePaymentsCreditCardsPaymentInitializeOptions.md)\n- [BigCommercePaymentsCustomerInitializeOptions](interfaces/BigCommercePaymentsCustomerInitializeOptions.md)\n- [BigCommercePaymentsFastlaneCustomerInitializeOptions](interfaces/BigCommercePaymentsFastlaneCustomerInitializeOptions.md)\n- [BigCommercePaymentsFastlanePaymentInitializeOptions](interfaces/BigCommercePaymentsFastlanePaymentInitializeOptions.md)\n- [BigCommercePaymentsFastlaneShippingInitializeOptions](interfaces/BigCommercePaymentsFastlaneShippingInitializeOptions.md)\n- [BigCommercePaymentsFieldsStyleOptions](interfaces/BigCommercePaymentsFieldsStyleOptions.md)\n- [BigCommercePaymentsPayLaterButtonInitializeOptions](interfaces/BigCommercePaymentsPayLaterButtonInitializeOptions.md)\n- [BigCommercePaymentsPayLaterCustomerInitializeOptions](interfaces/BigCommercePaymentsPayLaterCustomerInitializeOptions.md)\n- [BigCommercePaymentsPayLaterPaymentInitializeOptions](interfaces/BigCommercePaymentsPayLaterPaymentInitializeOptions.md)\n- [BigCommercePaymentsPaymentInitializeOptions](interfaces/BigCommercePaymentsPaymentInitializeOptions.md)\n- [BigCommercePaymentsRatePayPaymentInitializeOptions](interfaces/BigCommercePaymentsRatePayPaymentInitializeOptions.md)\n- [BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions](interfaces/BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions.md)\n- [BigCommercePaymentsVenmoButtonInitializeOptions](interfaces/BigCommercePaymentsVenmoButtonInitializeOptions.md)\n- [BigCommercePaymentsVenmoCustomerInitializeOptions](interfaces/BigCommercePaymentsVenmoCustomerInitializeOptions.md)\n- [BigCommercePaymentsVenmoPaymentInitializeOptions](interfaces/BigCommercePaymentsVenmoPaymentInitializeOptions.md)\n- [BillingAddress](interfaces/BillingAddress.md)\n- [BillingAddressRequestBody](interfaces/BillingAddressRequestBody.md)\n- [BillingAddressSelector](interfaces/BillingAddressSelector.md)\n- [BirthDate](interfaces/BirthDate.md)\n- [BirthDate\\_2](interfaces/BirthDate_2.md)\n- [BlockElementStyles](interfaces/BlockElementStyles.md)\n- [BlueSnapDirectAPMInitializeOptions](interfaces/BlueSnapDirectAPMInitializeOptions.md)\n- [BlueSnapDirectStyleProps](interfaces/BlueSnapDirectStyleProps.md)\n- [BlueSnapV2PaymentInitializeOptions](interfaces/BlueSnapV2PaymentInitializeOptions.md)\n- [BlueSnapV2StyleProps](interfaces/BlueSnapV2StyleProps.md)\n- [BodlEventsPayload](interfaces/BodlEventsPayload.md)\n- [BodlService](interfaces/BodlService.md)\n- [BodyStyles](interfaces/BodyStyles.md)\n- [BoletoDataPaymentMethodState](interfaces/BoletoDataPaymentMethodState.md)\n- [BoletoState](interfaces/BoletoState.md)\n- [BoltButtonInitializeOptions](interfaces/BoltButtonInitializeOptions.md)\n- [BoltButtonStyleOptions](interfaces/BoltButtonStyleOptions.md)\n- [BoltBuyNowInitializeOptions](interfaces/BoltBuyNowInitializeOptions.md)\n- [BoltCustomerInitializeOptions](interfaces/BoltCustomerInitializeOptions.md)\n- [BoltPaymentInitializeOptions](interfaces/BoltPaymentInitializeOptions.md)\n- [BraintreeAchInitializeOptions](interfaces/BraintreeAchInitializeOptions.md)\n- [BraintreeAnalyticTrackerService](interfaces/BraintreeAnalyticTrackerService.md)\n- [BraintreeCreditCardPaymentInitializeOptions](interfaces/BraintreeCreditCardPaymentInitializeOptions.md)\n- [BraintreeFastlaneCustomerInitializeOptions](interfaces/BraintreeFastlaneCustomerInitializeOptions.md)\n- [BraintreeFastlanePaymentInitializeOptions](interfaces/BraintreeFastlanePaymentInitializeOptions.md)\n- [BraintreeFastlaneShippingInitializeOptions](interfaces/BraintreeFastlaneShippingInitializeOptions.md)\n- [BraintreeLocalMethodsPaymentInitializeOptions](interfaces/BraintreeLocalMethodsPaymentInitializeOptions.md)\n- [BraintreePaypalButtonInitializeOptions](interfaces/BraintreePaypalButtonInitializeOptions.md)\n- [BraintreePaypalCreditButtonInitializeOptions](interfaces/BraintreePaypalCreditButtonInitializeOptions.md)\n- [BraintreePaypalCreditCustomerInitializeOptions](interfaces/BraintreePaypalCreditCustomerInitializeOptions.md)\n- [BraintreePaypalCustomerInitializeOptions](interfaces/BraintreePaypalCustomerInitializeOptions.md)\n- [BrowserInfo](interfaces/BrowserInfo.md)\n- [ButtonStyles](interfaces/ButtonStyles.md)\n- [Capabilities](interfaces/Capabilities.md)\n- [CardCvcElementOptions](interfaces/CardCvcElementOptions.md)\n- [CardDataPaymentMethodState](interfaces/CardDataPaymentMethodState.md)\n- [CardElementOptions](interfaces/CardElementOptions.md)\n- [CardExpiryElementOptions](interfaces/CardExpiryElementOptions.md)\n- [CardInstrument](interfaces/CardInstrument.md)\n- [CardNumberElementOptions](interfaces/CardNumberElementOptions.md)\n- [CardPaymentMethodState](interfaces/CardPaymentMethodState.md)\n- [CardState](interfaces/CardState.md)\n- [CardStateData](interfaces/CardStateData.md)\n- [CardStateErrors](interfaces/CardStateErrors.md)\n- [CardingProtectionActionData](interfaces/CardingProtectionActionData.md)\n- [Cart](interfaces/Cart.md)\n- [CartSelector](interfaces/CartSelector.md)\n- [CheckableInputStyles](interfaces/CheckableInputStyles.md)\n- [ChecklistStyles](interfaces/ChecklistStyles.md)\n- [Checkout](interfaces/Checkout.md)\n- [CheckoutButtonDataState](interfaces/CheckoutButtonDataState.md)\n- [CheckoutButtonErrorsState](interfaces/CheckoutButtonErrorsState.md)\n- [CheckoutButtonInitializerOptions](interfaces/CheckoutButtonInitializerOptions.md)\n- [CheckoutButtonOptions](interfaces/CheckoutButtonOptions.md)\n- [CheckoutButtonSelector](interfaces/CheckoutButtonSelector.md)\n- [CheckoutButtonSelectors](interfaces/CheckoutButtonSelectors.md)\n- [CheckoutButtonState](interfaces/CheckoutButtonState.md)\n- [CheckoutButtonStatusesState](interfaces/CheckoutButtonStatusesState.md)\n- [CheckoutInitialState](interfaces/CheckoutInitialState.md)\n- [CheckoutParams](interfaces/CheckoutParams.md)\n- [CheckoutPayment](interfaces/CheckoutPayment.md)\n- [CheckoutPaymentMethodExecutedOptions](interfaces/CheckoutPaymentMethodExecutedOptions.md)\n- [CheckoutRequestBody](interfaces/CheckoutRequestBody.md)\n- [CheckoutSelector](interfaces/CheckoutSelector.md)\n- [CheckoutSelectors](interfaces/CheckoutSelectors.md)\n- [CheckoutServiceOptions](interfaces/CheckoutServiceOptions.md)\n- [CheckoutSettings](interfaces/CheckoutSettings.md)\n- [CheckoutStoreErrorSelector](interfaces/CheckoutStoreErrorSelector.md)\n- [CheckoutStoreSelector](interfaces/CheckoutStoreSelector.md)\n- [CheckoutStoreStatusSelector](interfaces/CheckoutStoreStatusSelector.md)\n- [Config](interfaces/Config.md)\n- [ConfigSelector](interfaces/ConfigSelector.md)\n- [Consignment](interfaces/Consignment.md)\n- [ConsignmentAssignmentBaseRequestBodyWithAddress](interfaces/ConsignmentAssignmentBaseRequestBodyWithAddress.md)\n- [ConsignmentAssignmentBaseRequestBodyWithShippingAddress](interfaces/ConsignmentAssignmentBaseRequestBodyWithShippingAddress.md)\n- [ConsignmentCouponDiscount](interfaces/ConsignmentCouponDiscount.md)\n- [ConsignmentCreateRequestBody](interfaces/ConsignmentCreateRequestBody.md)\n- [ConsignmentDiscountBase](interfaces/ConsignmentDiscountBase.md)\n- [ConsignmentLineItem](interfaces/ConsignmentLineItem.md)\n- [ConsignmentPickupOption](interfaces/ConsignmentPickupOption.md)\n- [ConsignmentSelector](interfaces/ConsignmentSelector.md)\n- [ConsignmentUpdateRequestBody](interfaces/ConsignmentUpdateRequestBody.md)\n- [ConsignmentsChangedEvent](interfaces/ConsignmentsChangedEvent.md)\n- [ContextConfig](interfaces/ContextConfig.md)\n- [Coordinates](interfaces/Coordinates.md)\n- [Country](interfaces/Country.md)\n- [CountrySelector](interfaces/CountrySelector.md)\n- [Coupon](interfaces/Coupon.md)\n- [CouponSelector](interfaces/CouponSelector.md)\n- [CreditCardInstrument](interfaces/CreditCardInstrument.md)\n- [CreditCardPaymentInitializeOptions\\_2](interfaces/CreditCardPaymentInitializeOptions_2.md)\n- [CreditCardPlaceHolder](interfaces/CreditCardPlaceHolder.md)\n- [CssProperties](interfaces/CssProperties.md)\n- [Currency](interfaces/Currency.md)\n- [CustomError](interfaces/CustomError.md)\n- [CustomItem](interfaces/CustomItem.md)\n- [Customer](interfaces/Customer.md)\n- [CustomerAccountRequestBody](interfaces/CustomerAccountRequestBody.md)\n- [CustomerAddress](interfaces/CustomerAddress.md)\n- [CustomerCredentials](interfaces/CustomerCredentials.md)\n- [CustomerGroup](interfaces/CustomerGroup.md)\n- [CustomerPasswordRequirements](interfaces/CustomerPasswordRequirements.md)\n- [CustomerRequestOptions](interfaces/CustomerRequestOptions.md)\n- [CustomerSelector](interfaces/CustomerSelector.md)\n- [CustomerStrategySelector](interfaces/CustomerStrategySelector.md)\n- [CustomizationConfig](interfaces/CustomizationConfig.md)\n- [DigitalItem](interfaces/DigitalItem.md)\n- [Discount](interfaces/Discount.md)\n- [DisplaySettings](interfaces/DisplaySettings.md)\n- [EmbeddedCheckoutCompleteEvent](interfaces/EmbeddedCheckoutCompleteEvent.md)\n- [EmbeddedCheckoutError](interfaces/EmbeddedCheckoutError.md)\n- [EmbeddedCheckoutErrorEvent](interfaces/EmbeddedCheckoutErrorEvent.md)\n- [EmbeddedCheckoutFrameErrorEvent](interfaces/EmbeddedCheckoutFrameErrorEvent.md)\n- [EmbeddedCheckoutFrameLoadedEvent](interfaces/EmbeddedCheckoutFrameLoadedEvent.md)\n- [EmbeddedCheckoutLoadedEvent](interfaces/EmbeddedCheckoutLoadedEvent.md)\n- [EmbeddedCheckoutMessenger](interfaces/EmbeddedCheckoutMessenger.md)\n- [EmbeddedCheckoutMessengerOptions](interfaces/EmbeddedCheckoutMessengerOptions.md)\n- [EmbeddedCheckoutOptions](interfaces/EmbeddedCheckoutOptions.md)\n- [EmbeddedCheckoutSignedOutEvent](interfaces/EmbeddedCheckoutSignedOutEvent.md)\n- [EmbeddedCheckoutStyles](interfaces/EmbeddedCheckoutStyles.md)\n- [EmbeddedContentOptions](interfaces/EmbeddedContentOptions.md)\n- [ErrorLogger](interfaces/ErrorLogger.md)\n- [ExecutePaymentMethodCheckoutOptions](interfaces/ExecutePaymentMethodCheckoutOptions.md)\n- [Extension](interfaces/Extension.md)\n- [ExtensionCommandMap](interfaces/ExtensionCommandMap.md)\n- [ExtensionQueryMap](interfaces/ExtensionQueryMap.md)\n- [ExtensionSelector](interfaces/ExtensionSelector.md)\n- [ExtraField](interfaces/ExtraField.md)\n- [ExtraFieldConfig](interfaces/ExtraFieldConfig.md)\n- [ExtraFields](interfaces/ExtraFields.md)\n- [FastlaneShippingInitializeOptions](interfaces/FastlaneShippingInitializeOptions.md)\n- [Fee](interfaces/Fee.md)\n- [FlashMessage](interfaces/FlashMessage.md)\n- [FormField](interfaces/FormField.md)\n- [FormFieldItem](interfaces/FormFieldItem.md)\n- [FormFieldOptions](interfaces/FormFieldOptions.md)\n- [FormFields](interfaces/FormFields.md)\n- [FormSelector](interfaces/FormSelector.md)\n- [GatewayOrderPayment](interfaces/GatewayOrderPayment.md)\n- [GetConsignmentsMessage](interfaces/GetConsignmentsMessage.md)\n- [GetConsignmentsQuery](interfaces/GetConsignmentsQuery.md)\n- [GiftCertificate](interfaces/GiftCertificate.md)\n- [GiftCertificateItem](interfaces/GiftCertificateItem.md)\n- [GiftCertificateOrderPayment](interfaces/GiftCertificateOrderPayment.md)\n- [GiftCertificateSelector](interfaces/GiftCertificateSelector.md)\n- [GooglePayButtonInitializeOptions](interfaces/GooglePayButtonInitializeOptions.md)\n- [GooglePayCustomerInitializeOptions](interfaces/GooglePayCustomerInitializeOptions.md)\n- [GooglePayPaymentInitializeOptions](interfaces/GooglePayPaymentInitializeOptions.md)\n- [GoogleRecaptchaWindow](interfaces/GoogleRecaptchaWindow.md)\n- [HostedCardFieldOptions](interfaces/HostedCardFieldOptions.md)\n- [HostedCardFieldOptionsMap](interfaces/HostedCardFieldOptionsMap.md)\n- [HostedFieldAttachEvent](interfaces/HostedFieldAttachEvent.md)\n- [HostedFieldStoredCardRequestEvent](interfaces/HostedFieldStoredCardRequestEvent.md)\n- [HostedFieldStylesMap](interfaces/HostedFieldStylesMap.md)\n- [HostedFieldSubmitRequestEvent](interfaces/HostedFieldSubmitRequestEvent.md)\n- [HostedFieldValidateRequestEvent](interfaces/HostedFieldValidateRequestEvent.md)\n- [HostedFormErrorData](interfaces/HostedFormErrorData.md)\n- [HostedFormOrderData](interfaces/HostedFormOrderData.md)\n- [HostedInputAttachErrorEvent](interfaces/HostedInputAttachErrorEvent.md)\n- [HostedInputAttachSuccessEvent](interfaces/HostedInputAttachSuccessEvent.md)\n- [HostedInputBinChangeEvent](interfaces/HostedInputBinChangeEvent.md)\n- [HostedInputBlurEvent](interfaces/HostedInputBlurEvent.md)\n- [HostedInputCardTypeChangeEvent](interfaces/HostedInputCardTypeChangeEvent.md)\n- [HostedInputChangeEvent](interfaces/HostedInputChangeEvent.md)\n- [HostedInputEnterEvent](interfaces/HostedInputEnterEvent.md)\n- [HostedInputEventMap](interfaces/HostedInputEventMap.md)\n- [HostedInputFocusEvent](interfaces/HostedInputFocusEvent.md)\n- [HostedInputInitializeErrorData](interfaces/HostedInputInitializeErrorData.md)\n- [HostedInputStoredCardErrorEvent](interfaces/HostedInputStoredCardErrorEvent.md)\n- [HostedInputStoredCardSucceededEvent](interfaces/HostedInputStoredCardSucceededEvent.md)\n- [HostedInputSubmitErrorEvent](interfaces/HostedInputSubmitErrorEvent.md)\n- [HostedInputSubmitSuccessEvent](interfaces/HostedInputSubmitSuccessEvent.md)\n- [HostedInputValidateErrorData](interfaces/HostedInputValidateErrorData.md)\n- [HostedInputValidateErrorDataMap](interfaces/HostedInputValidateErrorDataMap.md)\n- [HostedInputValidateEvent](interfaces/HostedInputValidateEvent.md)\n- [HostedInputValidateResults](interfaces/HostedInputValidateResults.md)\n- [HostedInstrument](interfaces/HostedInstrument.md)\n- [HostedStoredCardFieldOptions](interfaces/HostedStoredCardFieldOptions.md)\n- [HostedStoredCardFieldOptionsMap](interfaces/HostedStoredCardFieldOptionsMap.md)\n- [IbanElementOptions](interfaces/IbanElementOptions.md)\n- [IdealElementOptions](interfaces/IdealElementOptions.md)\n- [IdealStateData](interfaces/IdealStateData.md)\n- [IframeEvent](interfaces/IframeEvent.md)\n- [IframeEventPostOptions](interfaces/IframeEventPostOptions.md)\n- [IndividualCardElementOptions](interfaces/IndividualCardElementOptions.md)\n- [InitCallbackActions](interfaces/InitCallbackActions.md)\n- [InitCallbackActions\\_2](interfaces/InitCallbackActions_2.md)\n- [InitiaizedQuery](interfaces/InitiaizedQuery.md)\n- [InitializationStrategy](interfaces/InitializationStrategy.md)\n- [InlineElementStyles](interfaces/InlineElementStyles.md)\n- [InputDetail](interfaces/InputDetail.md)\n- [InputStyles](interfaces/InputStyles.md)\n- [InstrumentSelector](interfaces/InstrumentSelector.md)\n- [InternalAddress](interfaces/InternalAddress.md)\n- [InternalCheckoutSelectors](interfaces/InternalCheckoutSelectors.md)\n- [InternalOrderMeta](interfaces/InternalOrderMeta.md)\n- [InternalOrderPayment](interfaces/InternalOrderPayment.md)\n- [InventorySettings](interfaces/InventorySettings.md)\n- [Item](interfaces/Item.md)\n- [Item\\_2](interfaces/Item_2.md)\n- [LabelStyles](interfaces/LabelStyles.md)\n- [LanguageConfig](interfaces/LanguageConfig.md)\n- [LegacyHostedFormOptions](interfaces/LegacyHostedFormOptions.md)\n- [LineItem](interfaces/LineItem.md)\n- [LineItemCategory](interfaces/LineItemCategory.md)\n- [LineItemMap](interfaces/LineItemMap.md)\n- [LineItemOption](interfaces/LineItemOption.md)\n- [LineItemSocialData](interfaces/LineItemSocialData.md)\n- [LinkStyles](interfaces/LinkStyles.md)\n- [Locales](interfaces/Locales.md)\n- [MolliePaymentInitializeOptions](interfaces/MolliePaymentInitializeOptions.md)\n- [MutationObeserverCreator](interfaces/MutationObeserverCreator.md)\n- [MutationObserverWindow](interfaces/MutationObserverWindow.md)\n- [NonceInstrument](interfaces/NonceInstrument.md)\n- [Option](interfaces/Option.md)\n- [Order](interfaces/Order.md)\n- [OrderBillingAddress](interfaces/OrderBillingAddress.md)\n- [OrderBillingAddressSelector](interfaces/OrderBillingAddressSelector.md)\n- [OrderConsignment](interfaces/OrderConsignment.md)\n- [OrderFee](interfaces/OrderFee.md)\n- [OrderFinalizeOptions](interfaces/OrderFinalizeOptions.md)\n- [OrderMetaState](interfaces/OrderMetaState.md)\n- [OrderPayment](interfaces/OrderPayment.md)\n- [OrderPaymentRequestBody](interfaces/OrderPaymentRequestBody.md)\n- [OrderRequestBody](interfaces/OrderRequestBody.md)\n- [OrderSelector](interfaces/OrderSelector.md)\n- [OrderShippingConsignment](interfaces/OrderShippingConsignment.md)\n- [OrderShippingConsignmentDiscount](interfaces/OrderShippingConsignmentDiscount.md)\n- [PasswordRequirements](interfaces/PasswordRequirements.md)\n- [PayPalButtonStyleOptions](interfaces/PayPalButtonStyleOptions.md)\n- [PayPalButtonStyleOptions\\_2](interfaces/PayPalButtonStyleOptions_2.md)\n- [PayPalBuyNowInitializeOptions](interfaces/PayPalBuyNowInitializeOptions.md)\n- [PayPalBuyNowInitializeOptions\\_2](interfaces/PayPalBuyNowInitializeOptions_2.md)\n- [PayPalCommerceAlternativeMethodsPaymentOptions](interfaces/PayPalCommerceAlternativeMethodsPaymentOptions.md)\n- [PayPalCommerceAnalyticTrackerService](interfaces/PayPalCommerceAnalyticTrackerService.md)\n- [PayPalCommerceButtonInitializeOptions](interfaces/PayPalCommerceButtonInitializeOptions.md)\n- [PayPalCommerceCreditButtonInitializeOptions](interfaces/PayPalCommerceCreditButtonInitializeOptions.md)\n- [PayPalCommerceCreditCardsPaymentInitializeOptions](interfaces/PayPalCommerceCreditCardsPaymentInitializeOptions.md)\n- [PayPalCommerceCreditCustomerInitializeOptions](interfaces/PayPalCommerceCreditCustomerInitializeOptions.md)\n- [PayPalCommerceCreditPaymentInitializeOptions](interfaces/PayPalCommerceCreditPaymentInitializeOptions.md)\n- [PayPalCommerceCustomerInitializeOptions](interfaces/PayPalCommerceCustomerInitializeOptions.md)\n- [PayPalCommerceFastlaneCustomerInitializeOptions](interfaces/PayPalCommerceFastlaneCustomerInitializeOptions.md)\n- [PayPalCommerceFastlanePaymentInitializeOptions](interfaces/PayPalCommerceFastlanePaymentInitializeOptions.md)\n- [PayPalCommerceFastlaneShippingInitializeOptions](interfaces/PayPalCommerceFastlaneShippingInitializeOptions.md)\n- [PayPalCommerceFieldsStyleOptions](interfaces/PayPalCommerceFieldsStyleOptions.md)\n- [PayPalCommercePaymentInitializeOptions](interfaces/PayPalCommercePaymentInitializeOptions.md)\n- [PayPalCommerceVenmoButtonInitializeOptions](interfaces/PayPalCommerceVenmoButtonInitializeOptions.md)\n- [PayPalCommerceVenmoCustomerInitializeOptions](interfaces/PayPalCommerceVenmoCustomerInitializeOptions.md)\n- [PayPalCommerceVenmoPaymentInitializeOptions](interfaces/PayPalCommerceVenmoPaymentInitializeOptions.md)\n- [PayPalInstrument](interfaces/PayPalInstrument.md)\n- [PaymentAdditionalAction](interfaces/PaymentAdditionalAction.md)\n- [PaymentInstrumentMeta](interfaces/PaymentInstrumentMeta.md)\n- [PaymentMethod](interfaces/PaymentMethod.md)\n- [PaymentMethodConfig](interfaces/PaymentMethodConfig.md)\n- [PaymentMethodMeta](interfaces/PaymentMethodMeta.md)\n- [PaymentMethodSelector](interfaces/PaymentMethodSelector.md)\n- [PaymentProviderCustomerSelector](interfaces/PaymentProviderCustomerSelector.md)\n- [PaymentRequestOptions](interfaces/PaymentRequestOptions.md)\n- [PaymentSelector](interfaces/PaymentSelector.md)\n- [PaymentSettings](interfaces/PaymentSettings.md)\n- [PaymentStrategySelector](interfaces/PaymentStrategySelector.md)\n- [PaypalButtonInitializeOptions](interfaces/PaypalButtonInitializeOptions.md)\n- [PaypalCommerceRatePay](interfaces/PaypalCommerceRatePay.md)\n- [PaypalStyleOptions](interfaces/PaypalStyleOptions.md)\n- [PhysicalItem](interfaces/PhysicalItem.md)\n- [PickupMethod](interfaces/PickupMethod.md)\n- [PickupOptionRequestBody](interfaces/PickupOptionRequestBody.md)\n- [PickupOptionResult](interfaces/PickupOptionResult.md)\n- [PickupOptionSelector](interfaces/PickupOptionSelector.md)\n- [Promotion](interfaces/Promotion.md)\n- [Radius](interfaces/Radius.md)\n- [ReRenderShippingForm](interfaces/ReRenderShippingForm.md)\n- [ReRenderShippingStep](interfaces/ReRenderShippingStep.md)\n- [RecaptchaResult](interfaces/RecaptchaResult.md)\n- [Region](interfaces/Region.md)\n- [ReloadCheckoutCommand](interfaces/ReloadCheckoutCommand.md)\n- [RemoteCheckoutSelector](interfaces/RemoteCheckoutSelector.md)\n- [RemoteCheckoutStateData](interfaces/RemoteCheckoutStateData.md)\n- [RequestOptions](interfaces/RequestOptions.md)\n- [SearchArea](interfaces/SearchArea.md)\n- [SepaPlaceHolder](interfaces/SepaPlaceHolder.md)\n- [SepaStateData](interfaces/SepaStateData.md)\n- [SetIframeStyleCommand](interfaces/SetIframeStyleCommand.md)\n- [ShippingAddressSelector](interfaces/ShippingAddressSelector.md)\n- [ShippingCountrySelector](interfaces/ShippingCountrySelector.md)\n- [ShippingInitializeOptions](interfaces/ShippingInitializeOptions.md)\n- [ShippingOption](interfaces/ShippingOption.md)\n- [ShippingRequestOptions](interfaces/ShippingRequestOptions.md)\n- [ShippingStrategySelector](interfaces/ShippingStrategySelector.md)\n- [ShopperConfig](interfaces/ShopperConfig.md)\n- [ShopperCurrency](interfaces/ShopperCurrency.md)\n- [ShowLoadingIndicatorCommand](interfaces/ShowLoadingIndicatorCommand.md)\n- [SignInEmail](interfaces/SignInEmail.md)\n- [SignInEmailRequestBody](interfaces/SignInEmailRequestBody.md)\n- [SignInEmailSelector](interfaces/SignInEmailSelector.md)\n- [SpamProtectionOptions](interfaces/SpamProtectionOptions.md)\n- [SquareV2PaymentInitializeOptions](interfaces/SquareV2PaymentInitializeOptions.md)\n- [StepStyles](interfaces/StepStyles.md)\n- [StepTracker](interfaces/StepTracker.md)\n- [StepTrackerConfig](interfaces/StepTrackerConfig.md)\n- [StockPosition](interfaces/StockPosition.md)\n- [StoreConfig](interfaces/StoreConfig.md)\n- [StoreCreditSelector](interfaces/StoreCreditSelector.md)\n- [StoreCurrency](interfaces/StoreCurrency.md)\n- [StoreLinks](interfaces/StoreLinks.md)\n- [StoreProfile](interfaces/StoreProfile.md)\n- [StoredCardHostedFormBillingAddress](interfaces/StoredCardHostedFormBillingAddress.md)\n- [StoredCardHostedFormData](interfaces/StoredCardHostedFormData.md)\n- [StoredCardHostedFormInstrumentFields](interfaces/StoredCardHostedFormInstrumentFields.md)\n- [StripeElementCSSProperties](interfaces/StripeElementCSSProperties.md)\n- [StripeElementClasses](interfaces/StripeElementClasses.md)\n- [StripeElementStyle](interfaces/StripeElementStyle.md)\n- [StripeElementStyleVariant](interfaces/StripeElementStyleVariant.md)\n- [StripeOCSPaymentInitializeOptions](interfaces/StripeOCSPaymentInitializeOptions.md)\n- [StripeUPECustomerInitializeOptions](interfaces/StripeUPECustomerInitializeOptions.md)\n- [StripeUPEPaymentInitializeOptions](interfaces/StripeUPEPaymentInitializeOptions.md)\n- [StripeUPEShippingInitializeOptions](interfaces/StripeUPEShippingInitializeOptions.md)\n- [StripeV3PaymentInitializeOptions](interfaces/StripeV3PaymentInitializeOptions.md)\n- [StyleOptions](interfaces/StyleOptions.md)\n- [SubInputDetail](interfaces/SubInputDetail.md)\n- [Subscriptions](interfaces/Subscriptions.md)\n- [SubscriptionsSelector](interfaces/SubscriptionsSelector.md)\n- [Tax](interfaces/Tax.md)\n- [TextInputStyles](interfaces/TextInputStyles.md)\n- [ThreeDSecure](interfaces/ThreeDSecure.md)\n- [ThreeDSecureToken](interfaces/ThreeDSecureToken.md)\n- [TranslationData](interfaces/TranslationData.md)\n- [Translations](interfaces/Translations.md)\n- [UnknownObject](interfaces/UnknownObject.md)\n- [UserExperienceSettings](interfaces/UserExperienceSettings.md)\n- [VaultAccessToken](interfaces/VaultAccessToken.md)\n- [VaultedInstrument](interfaces/VaultedInstrument.md)\n- [WechatDataPaymentMethodState](interfaces/WechatDataPaymentMethodState.md)\n- [WechatState](interfaces/WechatState.md)\n- [WithAdyenV2PaymentInitializeOptions](interfaces/WithAdyenV2PaymentInitializeOptions.md)\n- [WithAdyenV3PaymentInitializeOptions](interfaces/WithAdyenV3PaymentInitializeOptions.md)\n- [WithAmazonPayV2ButtonInitializeOptions](interfaces/WithAmazonPayV2ButtonInitializeOptions.md)\n- [WithAmazonPayV2CustomerInitializeOptions](interfaces/WithAmazonPayV2CustomerInitializeOptions.md)\n- [WithAmazonPayV2PaymentInitializeOptions](interfaces/WithAmazonPayV2PaymentInitializeOptions.md)\n- [WithApplePayButtonInitializeOptions](interfaces/WithApplePayButtonInitializeOptions.md)\n- [WithApplePayCustomerInitializeOptions](interfaces/WithApplePayCustomerInitializeOptions.md)\n- [WithApplePayPaymentInitializeOptions](interfaces/WithApplePayPaymentInitializeOptions.md)\n- [WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions](interfaces/WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md)\n- [WithBigCommercePaymentsButtonInitializeOptions](interfaces/WithBigCommercePaymentsButtonInitializeOptions.md)\n- [WithBigCommercePaymentsCreditCardsPaymentInitializeOptions](interfaces/WithBigCommercePaymentsCreditCardsPaymentInitializeOptions.md)\n- [WithBigCommercePaymentsCustomerInitializeOptions](interfaces/WithBigCommercePaymentsCustomerInitializeOptions.md)\n- [WithBigCommercePaymentsFastlaneCustomerInitializeOptions](interfaces/WithBigCommercePaymentsFastlaneCustomerInitializeOptions.md)\n- [WithBigCommercePaymentsFastlanePaymentInitializeOptions](interfaces/WithBigCommercePaymentsFastlanePaymentInitializeOptions.md)\n- [WithBigCommercePaymentsPayLaterButtonInitializeOptions](interfaces/WithBigCommercePaymentsPayLaterButtonInitializeOptions.md)\n- [WithBigCommercePaymentsPayLaterCustomerInitializeOptions](interfaces/WithBigCommercePaymentsPayLaterCustomerInitializeOptions.md)\n- [WithBigCommercePaymentsPayLaterPaymentInitializeOptions](interfaces/WithBigCommercePaymentsPayLaterPaymentInitializeOptions.md)\n- [WithBigCommercePaymentsPaymentInitializeOptions](interfaces/WithBigCommercePaymentsPaymentInitializeOptions.md)\n- [WithBigCommercePaymentsRatePayPaymentInitializeOptions](interfaces/WithBigCommercePaymentsRatePayPaymentInitializeOptions.md)\n- [WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions](interfaces/WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions.md)\n- [WithBigCommercePaymentsVenmoButtonInitializeOptions](interfaces/WithBigCommercePaymentsVenmoButtonInitializeOptions.md)\n- [WithBigCommercePaymentsVenmoCustomerInitializeOptions](interfaces/WithBigCommercePaymentsVenmoCustomerInitializeOptions.md)\n- [WithBigCommercePaymentsVenmoPaymentInitializeOptions](interfaces/WithBigCommercePaymentsVenmoPaymentInitializeOptions.md)\n- [WithBlueSnapDirectAPMPaymentInitializeOptions](interfaces/WithBlueSnapDirectAPMPaymentInitializeOptions.md)\n- [WithBlueSnapV2PaymentInitializeOptions](interfaces/WithBlueSnapV2PaymentInitializeOptions.md)\n- [WithBoltButtonInitializeOptions](interfaces/WithBoltButtonInitializeOptions.md)\n- [WithBoltCustomerInitializeOptions](interfaces/WithBoltCustomerInitializeOptions.md)\n- [WithBoltPaymentInitializeOptions](interfaces/WithBoltPaymentInitializeOptions.md)\n- [WithBraintreeAchPaymentInitializeOptions](interfaces/WithBraintreeAchPaymentInitializeOptions.md)\n- [WithBraintreeCreditCardPaymentInitializeOptions](interfaces/WithBraintreeCreditCardPaymentInitializeOptions.md)\n- [WithBraintreeFastlaneCustomerInitializeOptions](interfaces/WithBraintreeFastlaneCustomerInitializeOptions.md)\n- [WithBraintreeFastlanePaymentInitializeOptions](interfaces/WithBraintreeFastlanePaymentInitializeOptions.md)\n- [WithBraintreeLocalMethodsPaymentInitializeOptions](interfaces/WithBraintreeLocalMethodsPaymentInitializeOptions.md)\n- [WithBraintreePaypalButtonInitializeOptions](interfaces/WithBraintreePaypalButtonInitializeOptions.md)\n- [WithBraintreePaypalCreditButtonInitializeOptions](interfaces/WithBraintreePaypalCreditButtonInitializeOptions.md)\n- [WithBraintreePaypalCreditCustomerInitializeOptions](interfaces/WithBraintreePaypalCreditCustomerInitializeOptions.md)\n- [WithBraintreePaypalCustomerInitializeOptions](interfaces/WithBraintreePaypalCustomerInitializeOptions.md)\n- [WithBuyNowFeature](interfaces/WithBuyNowFeature.md)\n- [WithCheckoutcomFawryInstrument](interfaces/WithCheckoutcomFawryInstrument.md)\n- [WithCheckoutcomSEPAInstrument](interfaces/WithCheckoutcomSEPAInstrument.md)\n- [WithCreditCardPaymentInitializeOptions](interfaces/WithCreditCardPaymentInitializeOptions.md)\n- [WithDocumentInstrument](interfaces/WithDocumentInstrument.md)\n- [WithIdealInstrument](interfaces/WithIdealInstrument.md)\n- [WithMollieIssuerInstrument](interfaces/WithMollieIssuerInstrument.md)\n- [WithMolliePaymentInitializeOptions](interfaces/WithMolliePaymentInitializeOptions.md)\n- [WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions](interfaces/WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions.md)\n- [WithPayPalCommerceButtonInitializeOptions](interfaces/WithPayPalCommerceButtonInitializeOptions.md)\n- [WithPayPalCommerceCreditButtonInitializeOptions](interfaces/WithPayPalCommerceCreditButtonInitializeOptions.md)\n- [WithPayPalCommerceCreditCardsPaymentInitializeOptions](interfaces/WithPayPalCommerceCreditCardsPaymentInitializeOptions.md)\n- [WithPayPalCommerceCreditCustomerInitializeOptions](interfaces/WithPayPalCommerceCreditCustomerInitializeOptions.md)\n- [WithPayPalCommerceCreditPaymentInitializeOptions](interfaces/WithPayPalCommerceCreditPaymentInitializeOptions.md)\n- [WithPayPalCommerceCustomerInitializeOptions](interfaces/WithPayPalCommerceCustomerInitializeOptions.md)\n- [WithPayPalCommerceFastlaneCustomerInitializeOptions](interfaces/WithPayPalCommerceFastlaneCustomerInitializeOptions.md)\n- [WithPayPalCommerceFastlanePaymentInitializeOptions](interfaces/WithPayPalCommerceFastlanePaymentInitializeOptions.md)\n- [WithPayPalCommercePaymentInitializeOptions](interfaces/WithPayPalCommercePaymentInitializeOptions.md)\n- [WithPayPalCommerceRatePayPaymentInitializeOptions](interfaces/WithPayPalCommerceRatePayPaymentInitializeOptions.md)\n- [WithPayPalCommerceVenmoButtonInitializeOptions](interfaces/WithPayPalCommerceVenmoButtonInitializeOptions.md)\n- [WithPayPalCommerceVenmoCustomerInitializeOptions](interfaces/WithPayPalCommerceVenmoCustomerInitializeOptions.md)\n- [WithPayPalCommerceVenmoPaymentInitializeOptions](interfaces/WithPayPalCommerceVenmoPaymentInitializeOptions.md)\n- [WithPaypalExpressPaymentInitializeOptions](interfaces/WithPaypalExpressPaymentInitializeOptions.md)\n- [WithSquareV2PaymentInitializeOptions](interfaces/WithSquareV2PaymentInitializeOptions.md)\n- [WithStripeOCSPaymentInitializeOptions](interfaces/WithStripeOCSPaymentInitializeOptions.md)\n- [WithStripeUPECustomerInitializeOptions](interfaces/WithStripeUPECustomerInitializeOptions.md)\n- [WithStripeUPEPaymentInitializeOptions](interfaces/WithStripeUPEPaymentInitializeOptions.md)\n- [WithStripeV3PaymentInitializeOptions](interfaces/WithStripeV3PaymentInitializeOptions.md)\n- [WithWorldpayAccessPaymentInitializeOptions](interfaces/WithWorldpayAccessPaymentInitializeOptions.md)\n- [WorldpayAccessPaymentInitializeOptions](interfaces/WorldpayAccessPaymentInitializeOptions.md)\n- [ZipCodeElementOptions](interfaces/ZipCodeElementOptions.md)\n\n### Type Aliases\n\n- [AccountInstrument](README.md#accountinstrument)\n- [AddressKey](README.md#addresskey)\n- [AdyenComponentEventState](README.md#adyencomponenteventstate)\n- [AmazonPayV2ButtonInitializeOptions](README.md#amazonpayv2buttoninitializeoptions)\n- [AnalyticStepType](README.md#analyticsteptype)\n- [CheckoutButtonInitializeOptions](README.md#checkoutbuttoninitializeoptions)\n- [CheckoutIncludeParam](README.md#checkoutincludeparam)\n- [ComparableCheckout](README.md#comparablecheckout)\n- [ConsignmentAssignmentRequestBody](README.md#consignmentassignmentrequestbody)\n- [ConsignmentAutomaticDiscount](README.md#consignmentautomaticdiscount)\n- [ConsignmentDiscount](README.md#consignmentdiscount)\n- [ConsignmentsRequestBody](README.md#consignmentsrequestbody)\n- [CustomerAddressRequestBody](README.md#customeraddressrequestbody)\n- [CustomerInitializeOptions](README.md#customerinitializeoptions)\n- [ExtensionEvent](README.md#extensionevent)\n- [ExtensionMessage](README.md#extensionmessage)\n- [ExtraFieldType](README.md#extrafieldtype)\n- [FastlaneStylesOption](README.md#fastlanestylesoption)\n- [FlashMessageType](README.md#flashmessagetype)\n- [FormFieldFieldType](README.md#formfieldfieldtype)\n- [FormFieldType](README.md#formfieldtype)\n- [GooglePayButtonColor](README.md#googlepaybuttoncolor)\n- [GooglePayButtonSizeMode](README.md#googlepaybuttonsizemode)\n- [GooglePayButtonType](README.md#googlepaybuttontype)\n- [GuestCredentials](README.md#guestcredentials)\n- [HostedCreditCardInstrument](README.md#hostedcreditcardinstrument)\n- [HostedFieldBlurEventData](README.md#hostedfieldblureventdata)\n- [HostedFieldCardTypeChangeEventData](README.md#hostedfieldcardtypechangeeventdata)\n- [HostedFieldEnterEventData](README.md#hostedfieldentereventdata)\n- [HostedFieldEvent](README.md#hostedfieldevent)\n- [HostedFieldFocusEventData](README.md#hostedfieldfocuseventdata)\n- [HostedFieldOptionsMap](README.md#hostedfieldoptionsmap)\n- [HostedFieldStyles](README.md#hostedfieldstyles)\n- [HostedFieldValidateEventData](README.md#hostedfieldvalidateeventdata)\n- [HostedFormErrorDataKeys](README.md#hostedformerrordatakeys)\n- [HostedFormErrorsData](README.md#hostedformerrorsdata)\n- [HostedFormEventCallbacks](README.md#hostedformeventcallbacks)\n- [HostedInputStyles](README.md#hostedinputstyles)\n- [HostedVaultedInstrument](README.md#hostedvaultedinstrument)\n- [IframeEventMap](README.md#iframeeventmap)\n- [Instrument](README.md#instrument)\n- [InstrumentMeta](README.md#instrumentmeta)\n- [Omit](README.md#omit)\n- [OrderMeta](README.md#ordermeta)\n- [OrderPaymentInstrument](README.md#orderpaymentinstrument)\n- [OrderPayments](README.md#orderpayments)\n- [PaymentInitializeOptions](README.md#paymentinitializeoptions)\n- [PaymentInstrument](README.md#paymentinstrument)\n- [PaymentProviderCustomer](README.md#paymentprovidercustomer)\n- [ReadableCheckoutStore](README.md#readablecheckoutstore)\n- [StripeElementOptions](README.md#stripeelementoptions)\n- [WithGooglePayButtonInitializeOptions](README.md#withgooglepaybuttoninitializeoptions)\n- [WithGooglePayCustomerInitializeOptions](README.md#withgooglepaycustomerinitializeoptions)\n- [WithGooglePayPaymentInitializeOptions](README.md#withgooglepaypaymentinitializeoptions)\n\n### Functions\n\n- [createBodlService](README.md#createbodlservice)\n- [createBraintreeAnalyticTracker](README.md#createbraintreeanalytictracker)\n- [createCheckoutButtonInitializer](README.md#createcheckoutbuttoninitializer)\n- [createCheckoutService](README.md#createcheckoutservice)\n- [createCurrencyService](README.md#createcurrencyservice)\n- [createEmbeddedCheckoutMessenger](README.md#createembeddedcheckoutmessenger)\n- [createLanguageService](README.md#createlanguageservice)\n- [createPayPalCommerceAnalyticTracker](README.md#createpaypalcommerceanalytictracker)\n- [createStepTracker](README.md#createsteptracker)\n- [createStoredCardHostedFormService](README.md#createstoredcardhostedformservice)\n- [embedCheckout](README.md#embedcheckout)\n- [isExtraField](README.md#isextrafield)\n\n## Type Aliases\n\n### AccountInstrument\n\nƬ **AccountInstrument**: [`PayPalInstrument`](interfaces/PayPalInstrument.md) \\| [`BankInstrument`](interfaces/BankInstrument.md) \\| [`AchInstrument`](interfaces/AchInstrument.md)\n\n___\n\n### AddressKey\n\nƬ **AddressKey**: keyof [`Address`](interfaces/Address.md)\n\n___\n\n### AdyenComponentEventState\n\nƬ **AdyenComponentEventState**: [`CardState`](interfaces/CardState.md) \\| [`BoletoState`](interfaces/BoletoState.md) \\| [`WechatState`](interfaces/WechatState.md)\n\n___\n\n### AmazonPayV2ButtonInitializeOptions\n\nƬ **AmazonPayV2ButtonInitializeOptions**: `AmazonPayV2ButtonParameters` \\| [`WithBuyNowFeature`](interfaces/WithBuyNowFeature.md)\n\nThe required config to render the AmazonPayV2 button.\n\n___\n\n### AnalyticStepType\n\nƬ **AnalyticStepType**: ``\"customer\"`` \\| ``\"shipping\"`` \\| ``\"billing\"`` \\| ``\"payment\"``\n\n___\n\n### CheckoutButtonInitializeOptions\n\nƬ **CheckoutButtonInitializeOptions**: [`BaseCheckoutButtonInitializeOptions`](interfaces/BaseCheckoutButtonInitializeOptions.md) & [`WithAmazonPayV2ButtonInitializeOptions`](interfaces/WithAmazonPayV2ButtonInitializeOptions.md) & [`WithApplePayButtonInitializeOptions`](interfaces/WithApplePayButtonInitializeOptions.md) & [`WithBigCommercePaymentsButtonInitializeOptions`](interfaces/WithBigCommercePaymentsButtonInitializeOptions.md) & [`WithBigCommercePaymentsPayLaterButtonInitializeOptions`](interfaces/WithBigCommercePaymentsPayLaterButtonInitializeOptions.md) & [`WithBigCommercePaymentsVenmoButtonInitializeOptions`](interfaces/WithBigCommercePaymentsVenmoButtonInitializeOptions.md) & [`WithBoltButtonInitializeOptions`](interfaces/WithBoltButtonInitializeOptions.md) & [`WithBraintreePaypalButtonInitializeOptions`](interfaces/WithBraintreePaypalButtonInitializeOptions.md) & [`WithBraintreePaypalCreditButtonInitializeOptions`](interfaces/WithBraintreePaypalCreditButtonInitializeOptions.md) & [`WithGooglePayButtonInitializeOptions`](README.md#withgooglepaybuttoninitializeoptions) & [`WithPayPalCommerceButtonInitializeOptions`](interfaces/WithPayPalCommerceButtonInitializeOptions.md) & [`WithPayPalCommerceCreditButtonInitializeOptions`](interfaces/WithPayPalCommerceCreditButtonInitializeOptions.md) & [`WithPayPalCommerceVenmoButtonInitializeOptions`](interfaces/WithPayPalCommerceVenmoButtonInitializeOptions.md)\n\n___\n\n### CheckoutIncludeParam\n\nƬ **CheckoutIncludeParam**: \\{ [key in CheckoutIncludes]?: boolean }\n\n___\n\n### ComparableCheckout\n\nƬ **ComparableCheckout**: `Pick`\\<[`Checkout`](interfaces/Checkout.md), ``\"outstandingBalance\"`` \\| ``\"coupons\"`` \\| ``\"giftCertificates\"``\\> & \\{ `cart`: `Partial`\\<[`Cart`](interfaces/Cart.md)\\>  }\n\n___\n\n### ConsignmentAssignmentRequestBody\n\nƬ **ConsignmentAssignmentRequestBody**: [`ConsignmentAssignmentBaseRequestBodyWithShippingAddress`](interfaces/ConsignmentAssignmentBaseRequestBodyWithShippingAddress.md) \\| [`ConsignmentAssignmentBaseRequestBodyWithAddress`](interfaces/ConsignmentAssignmentBaseRequestBodyWithAddress.md)\n\n___\n\n### ConsignmentAutomaticDiscount\n\nƬ **ConsignmentAutomaticDiscount**: [`ConsignmentDiscountBase`](interfaces/ConsignmentDiscountBase.md)\\<``\"AUTOMATIC\"``\\>\n\n___\n\n### ConsignmentDiscount\n\nƬ **ConsignmentDiscount**: [`ConsignmentAutomaticDiscount`](README.md#consignmentautomaticdiscount) \\| [`ConsignmentCouponDiscount`](interfaces/ConsignmentCouponDiscount.md)\n\n___\n\n### ConsignmentsRequestBody\n\nƬ **ConsignmentsRequestBody**: [`ConsignmentCreateRequestBody`](interfaces/ConsignmentCreateRequestBody.md)[]\n\n___\n\n### CustomerAddressRequestBody\n\nƬ **CustomerAddressRequestBody**: [`AddressRequestBody`](interfaces/AddressRequestBody.md)\n\n___\n\n### CustomerInitializeOptions\n\nƬ **CustomerInitializeOptions**: [`BaseCustomerInitializeOptions`](interfaces/BaseCustomerInitializeOptions.md) & [`WithAmazonPayV2CustomerInitializeOptions`](interfaces/WithAmazonPayV2CustomerInitializeOptions.md) & [`WithApplePayCustomerInitializeOptions`](interfaces/WithApplePayCustomerInitializeOptions.md) & [`WithBigCommercePaymentsCustomerInitializeOptions`](interfaces/WithBigCommercePaymentsCustomerInitializeOptions.md) & [`WithBigCommercePaymentsFastlaneCustomerInitializeOptions`](interfaces/WithBigCommercePaymentsFastlaneCustomerInitializeOptions.md) & [`WithBigCommercePaymentsPayLaterCustomerInitializeOptions`](interfaces/WithBigCommercePaymentsPayLaterCustomerInitializeOptions.md) & [`WithBigCommercePaymentsVenmoCustomerInitializeOptions`](interfaces/WithBigCommercePaymentsVenmoCustomerInitializeOptions.md) & [`WithBoltCustomerInitializeOptions`](interfaces/WithBoltCustomerInitializeOptions.md) & [`WithBraintreePaypalCustomerInitializeOptions`](interfaces/WithBraintreePaypalCustomerInitializeOptions.md) & [`WithBraintreePaypalCreditCustomerInitializeOptions`](interfaces/WithBraintreePaypalCreditCustomerInitializeOptions.md) & [`WithBraintreeFastlaneCustomerInitializeOptions`](interfaces/WithBraintreeFastlaneCustomerInitializeOptions.md) & [`WithGooglePayCustomerInitializeOptions`](README.md#withgooglepaycustomerinitializeoptions) & [`WithPayPalCommerceCustomerInitializeOptions`](interfaces/WithPayPalCommerceCustomerInitializeOptions.md) & [`WithPayPalCommerceCreditCustomerInitializeOptions`](interfaces/WithPayPalCommerceCreditCustomerInitializeOptions.md) & [`WithPayPalCommerceVenmoCustomerInitializeOptions`](interfaces/WithPayPalCommerceVenmoCustomerInitializeOptions.md) & [`WithPayPalCommerceFastlaneCustomerInitializeOptions`](interfaces/WithPayPalCommerceFastlaneCustomerInitializeOptions.md) & [`WithStripeUPECustomerInitializeOptions`](interfaces/WithStripeUPECustomerInitializeOptions.md)\n\n___\n\n### ExtensionEvent\n\nƬ **ExtensionEvent**: [`ConsignmentsChangedEvent`](interfaces/ConsignmentsChangedEvent.md)\n\n___\n\n### ExtensionMessage\n\nƬ **ExtensionMessage**: [`ExtensionEvent`](README.md#extensionevent) \\| [`GetConsignmentsMessage`](interfaces/GetConsignmentsMessage.md)\n\n___\n\n### ExtraFieldType\n\nƬ **ExtraFieldType**: ``\"text\"`` \\| ``\"multiline_text\"`` \\| ``\"number\"`` \\| ``\"dropdown\"``\n\n___\n\n### FastlaneStylesOption\n\nƬ **FastlaneStylesOption**: `PayPalFastlaneStylesOption` \\| `BraintreeFastlaneStylesOption`\n\nA union type that covers all possible Fastlane styling options from different providers\n\n___\n\n### FlashMessageType\n\nƬ **FlashMessageType**: ``\"error\"`` \\| ``\"info\"`` \\| ``\"warning\"`` \\| ``\"success\"``\n\n___\n\n### FormFieldFieldType\n\nƬ **FormFieldFieldType**: ``\"checkbox\"`` \\| ``\"date\"`` \\| ``\"text\"`` \\| ``\"dropdown\"`` \\| ``\"password\"`` \\| ``\"radio\"`` \\| ``\"multiline\"``\n\n___\n\n### FormFieldType\n\nƬ **FormFieldType**: ``\"array\"`` \\| ``\"date\"`` \\| ``\"integer\"`` \\| ``\"string\"``\n\n___\n\n### GooglePayButtonColor\n\nƬ **GooglePayButtonColor**: ``\"default\"`` \\| ``\"black\"`` \\| ``\"white\"``\n\n___\n\n### GooglePayButtonSizeMode\n\nƬ **GooglePayButtonSizeMode**: ``\"static\"`` \\| ``\"fill\"``\n\n___\n\n### GooglePayButtonType\n\nƬ **GooglePayButtonType**: ``\"book\"`` \\| ``\"buy\"`` \\| ``\"checkout\"`` \\| ``\"donate\"`` \\| ``\"order\"`` \\| ``\"pay\"`` \\| ``\"plain\"`` \\| ``\"subscribe\"`` \\| ``\"long\"`` \\| ``\"short\"``\n\n___\n\n### GuestCredentials\n\nƬ **GuestCredentials**: `Partial`\\<[`Subscriptions`](interfaces/Subscriptions.md)\\> & \\{ `email`: `string` ; `id?`: `string`  }\n\n___\n\n### HostedCreditCardInstrument\n\nƬ **HostedCreditCardInstrument**: [`Omit`](README.md#omit)\\<[`CreditCardInstrument`](interfaces/CreditCardInstrument.md), ``\"ccExpiry\"`` \\| ``\"ccName\"`` \\| ``\"ccNumber\"`` \\| ``\"ccCvv\"``\\>\n\n___\n\n### HostedFieldBlurEventData\n\nƬ **HostedFieldBlurEventData**: [`HostedInputBlurEvent`](interfaces/HostedInputBlurEvent.md)[``\"payload\"``]\n\n___\n\n### HostedFieldCardTypeChangeEventData\n\nƬ **HostedFieldCardTypeChangeEventData**: [`HostedInputCardTypeChangeEvent`](interfaces/HostedInputCardTypeChangeEvent.md)[``\"payload\"``]\n\n___\n\n### HostedFieldEnterEventData\n\nƬ **HostedFieldEnterEventData**: [`HostedInputEnterEvent`](interfaces/HostedInputEnterEvent.md)[``\"payload\"``]\n\n___\n\n### HostedFieldEvent\n\nƬ **HostedFieldEvent**: [`HostedFieldAttachEvent`](interfaces/HostedFieldAttachEvent.md) \\| [`HostedFieldSubmitRequestEvent`](interfaces/HostedFieldSubmitRequestEvent.md) \\| [`HostedFieldValidateRequestEvent`](interfaces/HostedFieldValidateRequestEvent.md) \\| [`HostedFieldStoredCardRequestEvent`](interfaces/HostedFieldStoredCardRequestEvent.md)\n\n___\n\n### HostedFieldFocusEventData\n\nƬ **HostedFieldFocusEventData**: [`HostedInputFocusEvent`](interfaces/HostedInputFocusEvent.md)[``\"payload\"``]\n\n___\n\n### HostedFieldOptionsMap\n\nƬ **HostedFieldOptionsMap**: [`HostedCardFieldOptionsMap`](interfaces/HostedCardFieldOptionsMap.md) \\| [`HostedStoredCardFieldOptionsMap`](interfaces/HostedStoredCardFieldOptionsMap.md)\n\n___\n\n### HostedFieldStyles\n\nƬ **HostedFieldStyles**: [`HostedInputStyles`](README.md#hostedinputstyles)\n\n___\n\n### HostedFieldValidateEventData\n\nƬ **HostedFieldValidateEventData**: [`HostedInputValidateEvent`](interfaces/HostedInputValidateEvent.md)[``\"payload\"``]\n\n___\n\n### HostedFormErrorDataKeys\n\nƬ **HostedFormErrorDataKeys**: ``\"number\"`` \\| ``\"expirationDate\"`` \\| ``\"expirationMonth\"`` \\| ``\"expirationYear\"`` \\| ``\"cvv\"`` \\| ``\"postalCode\"``\n\n___\n\n### HostedFormErrorsData\n\nƬ **HostedFormErrorsData**: `Partial`\\<`Record`\\<[`HostedFormErrorDataKeys`](README.md#hostedformerrordatakeys), [`HostedFormErrorData`](interfaces/HostedFormErrorData.md)\\>\\>\n\n___\n\n### HostedFormEventCallbacks\n\nƬ **HostedFormEventCallbacks**: `Pick`\\<[`LegacyHostedFormOptions`](interfaces/LegacyHostedFormOptions.md), ``\"onBlur\"`` \\| ``\"onCardTypeChange\"`` \\| ``\"onFocus\"`` \\| ``\"onEnter\"`` \\| ``\"onValidate\"``\\>\n\n___\n\n### HostedInputStyles\n\nƬ **HostedInputStyles**: `Partial`\\<`Pick`\\<`CSSStyleDeclaration`, ``\"color\"`` \\| ``\"fontFamily\"`` \\| ``\"fontSize\"`` \\| ``\"fontWeight\"``\\>\\>\n\n___\n\n### HostedVaultedInstrument\n\nƬ **HostedVaultedInstrument**: [`Omit`](README.md#omit)\\<[`VaultedInstrument`](interfaces/VaultedInstrument.md), ``\"ccNumber\"`` \\| ``\"ccCvv\"``\\>\n\n___\n\n### IframeEventMap\n\nƬ **IframeEventMap**\\<`TType`\\>: \\{ [key in TType]: IframeEvent\\<TType\\> }\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TType` | extends `string` \\| `number` \\| `symbol` = `string` |\n\n___\n\n### Instrument\n\nƬ **Instrument**: [`CardInstrument`](interfaces/CardInstrument.md)\n\n___\n\n### InstrumentMeta\n\nƬ **InstrumentMeta**: [`VaultAccessToken`](interfaces/VaultAccessToken.md)\n\n___\n\n### Omit\n\nƬ **Omit**\\<`T`, `K`\\>: `Pick`\\<`T`, `Exclude`\\<keyof `T`, `K`\\>\\>\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `T` | `T` |\n| `K` | extends keyof `T` |\n\n___\n\n### OrderMeta\n\nƬ **OrderMeta**: [`OrderMetaState`](interfaces/OrderMetaState.md)\n\n___\n\n### OrderPaymentInstrument\n\nƬ **OrderPaymentInstrument**: `WithBankAccountInstrument` \\| `WithEcpInstrument` \\| `WithSepaInstrument` \\| `WithPayByBankInstrument` \\| [`WithIdealInstrument`](interfaces/WithIdealInstrument.md) \\| [`CreditCardInstrument`](interfaces/CreditCardInstrument.md) \\| [`HostedInstrument`](interfaces/HostedInstrument.md) \\| [`HostedCreditCardInstrument`](README.md#hostedcreditcardinstrument) \\| [`HostedVaultedInstrument`](README.md#hostedvaultedinstrument) \\| [`NonceInstrument`](interfaces/NonceInstrument.md) \\| [`VaultedInstrument`](interfaces/VaultedInstrument.md) \\| [`CreditCardInstrument`](interfaces/CreditCardInstrument.md) & [`WithDocumentInstrument`](interfaces/WithDocumentInstrument.md) \\| [`CreditCardInstrument`](interfaces/CreditCardInstrument.md) & [`WithCheckoutcomFawryInstrument`](interfaces/WithCheckoutcomFawryInstrument.md) \\| [`CreditCardInstrument`](interfaces/CreditCardInstrument.md) & [`WithCheckoutcomSEPAInstrument`](interfaces/WithCheckoutcomSEPAInstrument.md) \\| [`CreditCardInstrument`](interfaces/CreditCardInstrument.md) & [`WithIdealInstrument`](interfaces/WithIdealInstrument.md) \\| [`HostedInstrument`](interfaces/HostedInstrument.md) & [`WithMollieIssuerInstrument`](interfaces/WithMollieIssuerInstrument.md) \\| `WithAccountCreation`\n\n___\n\n### OrderPayments\n\nƬ **OrderPayments**: ([`GatewayOrderPayment`](interfaces/GatewayOrderPayment.md) \\| [`GiftCertificateOrderPayment`](interfaces/GiftCertificateOrderPayment.md))[]\n\n___\n\n### PaymentInitializeOptions\n\nƬ **PaymentInitializeOptions**: [`BasePaymentInitializeOptions`](interfaces/BasePaymentInitializeOptions.md) & [`WithAdyenV3PaymentInitializeOptions`](interfaces/WithAdyenV3PaymentInitializeOptions.md) & [`WithAdyenV2PaymentInitializeOptions`](interfaces/WithAdyenV2PaymentInitializeOptions.md) & [`WithAmazonPayV2PaymentInitializeOptions`](interfaces/WithAmazonPayV2PaymentInitializeOptions.md) & [`WithApplePayPaymentInitializeOptions`](interfaces/WithApplePayPaymentInitializeOptions.md) & [`WithBigCommercePaymentsPaymentInitializeOptions`](interfaces/WithBigCommercePaymentsPaymentInitializeOptions.md) & [`WithBigCommercePaymentsFastlanePaymentInitializeOptions`](interfaces/WithBigCommercePaymentsFastlanePaymentInitializeOptions.md) & [`WithBigCommercePaymentsPayLaterPaymentInitializeOptions`](interfaces/WithBigCommercePaymentsPayLaterPaymentInitializeOptions.md) & [`WithBigCommercePaymentsRatePayPaymentInitializeOptions`](interfaces/WithBigCommercePaymentsRatePayPaymentInitializeOptions.md) & [`WithBigCommercePaymentsCreditCardsPaymentInitializeOptions`](interfaces/WithBigCommercePaymentsCreditCardsPaymentInitializeOptions.md) & [`WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions`](interfaces/WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md) & [`WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions`](interfaces/WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions.md) & [`WithBigCommercePaymentsVenmoPaymentInitializeOptions`](interfaces/WithBigCommercePaymentsVenmoPaymentInitializeOptions.md) & [`WithBlueSnapDirectAPMPaymentInitializeOptions`](interfaces/WithBlueSnapDirectAPMPaymentInitializeOptions.md) & [`WithBlueSnapV2PaymentInitializeOptions`](interfaces/WithBlueSnapV2PaymentInitializeOptions.md) & [`WithBoltPaymentInitializeOptions`](interfaces/WithBoltPaymentInitializeOptions.md) & [`WithBraintreeAchPaymentInitializeOptions`](interfaces/WithBraintreeAchPaymentInitializeOptions.md) & [`WithBraintreeLocalMethodsPaymentInitializeOptions`](interfaces/WithBraintreeLocalMethodsPaymentInitializeOptions.md) & [`WithBraintreeFastlanePaymentInitializeOptions`](interfaces/WithBraintreeFastlanePaymentInitializeOptions.md) & [`WithBraintreeCreditCardPaymentInitializeOptions`](interfaces/WithBraintreeCreditCardPaymentInitializeOptions.md) & [`WithCreditCardPaymentInitializeOptions`](interfaces/WithCreditCardPaymentInitializeOptions.md) & [`WithGooglePayPaymentInitializeOptions`](README.md#withgooglepaypaymentinitializeoptions) & [`WithMolliePaymentInitializeOptions`](interfaces/WithMolliePaymentInitializeOptions.md) & [`WithPayPalCommercePaymentInitializeOptions`](interfaces/WithPayPalCommercePaymentInitializeOptions.md) & [`WithPayPalCommerceCreditPaymentInitializeOptions`](interfaces/WithPayPalCommerceCreditPaymentInitializeOptions.md) & [`WithPayPalCommerceVenmoPaymentInitializeOptions`](interfaces/WithPayPalCommerceVenmoPaymentInitializeOptions.md) & [`WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions`](interfaces/WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions.md) & [`WithPayPalCommerceCreditCardsPaymentInitializeOptions`](interfaces/WithPayPalCommerceCreditCardsPaymentInitializeOptions.md) & [`WithPayPalCommerceRatePayPaymentInitializeOptions`](interfaces/WithPayPalCommerceRatePayPaymentInitializeOptions.md) & [`WithPayPalCommerceFastlanePaymentInitializeOptions`](interfaces/WithPayPalCommerceFastlanePaymentInitializeOptions.md) & [`WithPaypalExpressPaymentInitializeOptions`](interfaces/WithPaypalExpressPaymentInitializeOptions.md) & [`WithSquareV2PaymentInitializeOptions`](interfaces/WithSquareV2PaymentInitializeOptions.md) & [`WithStripeV3PaymentInitializeOptions`](interfaces/WithStripeV3PaymentInitializeOptions.md) & [`WithStripeUPEPaymentInitializeOptions`](interfaces/WithStripeUPEPaymentInitializeOptions.md) & [`WithStripeOCSPaymentInitializeOptions`](interfaces/WithStripeOCSPaymentInitializeOptions.md) & [`WithWorldpayAccessPaymentInitializeOptions`](interfaces/WithWorldpayAccessPaymentInitializeOptions.md)\n\n___\n\n### PaymentInstrument\n\nƬ **PaymentInstrument**: [`CardInstrument`](interfaces/CardInstrument.md) \\| [`AccountInstrument`](README.md#accountinstrument)\n\n___\n\n### PaymentProviderCustomer\n\nƬ **PaymentProviderCustomer**: `PaymentProviderCustomerType`\n\n___\n\n### ReadableCheckoutStore\n\nƬ **ReadableCheckoutStore**: `ReadableDataStore`\\<[`InternalCheckoutSelectors`](interfaces/InternalCheckoutSelectors.md)\\>\n\n___\n\n### StripeElementOptions\n\nƬ **StripeElementOptions**: [`CardElementOptions`](interfaces/CardElementOptions.md) \\| [`CardExpiryElementOptions`](interfaces/CardExpiryElementOptions.md) \\| [`CardNumberElementOptions`](interfaces/CardNumberElementOptions.md) \\| [`CardCvcElementOptions`](interfaces/CardCvcElementOptions.md) \\| [`IdealElementOptions`](interfaces/IdealElementOptions.md) \\| [`IbanElementOptions`](interfaces/IbanElementOptions.md) \\| [`ZipCodeElementOptions`](interfaces/ZipCodeElementOptions.md)\n\n___\n\n### WithGooglePayButtonInitializeOptions\n\nƬ **WithGooglePayButtonInitializeOptions**: \\{ [k in GooglePayKey]?: GooglePayButtonInitializeOptions }\n\nThe options that are required to initialize the GooglePay payment method.\r\nThey can be omitted unless you need to support GooglePay.\n\n___\n\n### WithGooglePayCustomerInitializeOptions\n\nƬ **WithGooglePayCustomerInitializeOptions**: \\{ [k in GooglePayKey]?: GooglePayCustomerInitializeOptions }\n\nThe options that are required to initialize the GooglePay payment method.\r\nThey can be omitted unless you need to support GooglePay.\n\n___\n\n### WithGooglePayPaymentInitializeOptions\n\nƬ **WithGooglePayPaymentInitializeOptions**: \\{ [k in GooglePayKey]?: GooglePayPaymentInitializeOptions }\n\nThe options that are required to initialize the GooglePay payment method.\r\nThey can be omitted unless you need to support GooglePay.\n\n## Functions\n\n### createBodlService\n\n▸ **createBodlService**(`subscribe`): [`BodlService`](interfaces/BodlService.md)\n\nCreates an instance of `BodlService`.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `subscribe` | (`subscriber`: (`state`: [`CheckoutSelectors`](interfaces/CheckoutSelectors.md)) => `void`) => `void` | The callback function, what get a subscriber as a property, that subscribes to state changes. |\n\n#### Returns\n\n[`BodlService`](interfaces/BodlService.md)\n\nan instance of `BodlService`.\n\n**`Remarks`**\n\n```js\r\nconst bodlService = BodlService();\r\nbodlService.checkoutBegin();\n\n```\n\n___\n\n### createBraintreeAnalyticTracker\n\n▸ **createBraintreeAnalyticTracker**(`checkoutService`): [`BraintreeAnalyticTrackerService`](interfaces/BraintreeAnalyticTrackerService.md)\n\nCreates an instance of `BraintreeAnalyticTrackerService`.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `checkoutService` | [`CheckoutService`](classes/CheckoutService.md) |\n\n#### Returns\n\n[`BraintreeAnalyticTrackerService`](interfaces/BraintreeAnalyticTrackerService.md)\n\nan instance of `BraintreeAnalyticTrackerService`.\n\n**`Remarks`**\n\n```js\r\nconst checkoutService = createCheckoutService();\r\nawait checkoutService.loadCheckout();\r\nconst braintreeAnalyticTracker = createBraintreeAnalyticTracker(checkoutService);\n\nbraintreeAnalyticTracker.customerPaymentMethodExecuted();\r\nbraintreeAnalyticTracker.paymentComplete();\r\nbraintreeAnalyticTracker.selectedPaymentMethod('applepay');\r\nbraintreeAnalyticTracker.walletButtonClick('paypal');\r\n```\n\n___\n\n### createCheckoutButtonInitializer\n\n▸ **createCheckoutButtonInitializer**(`options?`): [`CheckoutButtonInitializer`](classes/CheckoutButtonInitializer.md)\n\nCreates an instance of `CheckoutButtonInitializer`.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`CheckoutButtonInitializerOptions`](interfaces/CheckoutButtonInitializerOptions.md) | A set of construction options. |\n\n#### Returns\n\n[`CheckoutButtonInitializer`](classes/CheckoutButtonInitializer.md)\n\nan instance of `CheckoutButtonInitializer`.\n\n**`Remarks`**\n\n```js\r\nconst initializer = createCheckoutButtonInitializer();\n\ninitializer.initializeButton({\r\n    methodId: 'braintreepaypal',\r\n    braintreepaypal: {\r\n        container: '#checkoutButton',\r\n    },\r\n});\r\n```\n\nPlease note that `CheckoutButtonInitializer` is currently in an early stage\r\nof development. Therefore the API is unstable and not ready for public\r\nconsumption.\n\n___\n\n### createCheckoutService\n\n▸ **createCheckoutService**(`options?`): [`CheckoutService`](classes/CheckoutService.md)\n\nCreates an instance of `CheckoutService`.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`CheckoutServiceOptions`](interfaces/CheckoutServiceOptions.md) | A set of construction options. |\n\n#### Returns\n\n[`CheckoutService`](classes/CheckoutService.md)\n\nan instance of `CheckoutService`.\n\n**`Remarks`**\n\n```js\r\nconst service = createCheckoutService();\n\nservice.subscribe(state => {\r\n    console.log(state);\r\n});\n\nservice.loadCheckout();\r\n```\n\n___\n\n### createCurrencyService\n\n▸ **createCurrencyService**(`config`): [`CurrencyService`](classes/CurrencyService.md)\n\nCreates an instance of `CurrencyService`.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `config` | [`StoreConfig`](interfaces/StoreConfig.md) | The config object containing the currency configuration |\n\n#### Returns\n\n[`CurrencyService`](classes/CurrencyService.md)\n\nan instance of `CurrencyService`.\n\n**`Remarks`**\n\n```js\r\nconst { data } = checkoutService.getState();\r\nconst config = data.getConfig();\r\nconst checkout = data.getCheckout();\r\nconst currencyService = createCurrencyService(config);\n\ncurrencyService.toStoreCurrency(checkout.grandTotal);\r\ncurrencyService.toCustomerCurrency(checkout.grandTotal);\r\n```\n\n___\n\n### createEmbeddedCheckoutMessenger\n\n▸ **createEmbeddedCheckoutMessenger**(`options`): [`EmbeddedCheckoutMessenger`](interfaces/EmbeddedCheckoutMessenger.md)\n\nCreate an instance of `EmbeddedCheckoutMessenger`.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options` | [`EmbeddedCheckoutMessengerOptions`](interfaces/EmbeddedCheckoutMessengerOptions.md) | Options for creating `EmbeddedCheckoutMessenger` |\n\n#### Returns\n\n[`EmbeddedCheckoutMessenger`](interfaces/EmbeddedCheckoutMessenger.md)\n\n- An instance of `EmbeddedCheckoutMessenger`\n\n**`Remarks`**\n\nThe object is responsible for posting messages to the parent window from the\r\niframe when certain events have occurred. For example, when the checkout\r\nform is first loaded, you should notify the parent window about it.\n\nThe iframe can only be embedded in domains that are allowed by the store.\n\n```ts\r\nconst messenger = createEmbeddedCheckoutMessenger({\r\n    parentOrigin: 'https://some/website',\r\n});\n\nmessenger.postFrameLoaded();\r\n```\n\nPlease note that this feature is currently in an early stage of development.\r\nTherefore the API is unstable and not ready for public consumption.\n\n___\n\n### createLanguageService\n\n▸ **createLanguageService**(`config?`): [`LanguageService`](classes/LanguageService.md)\n\nCreates an instance of `LanguageService`.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `config?` | `Partial`\\<[`LanguageConfig`](interfaces/LanguageConfig.md)\\> | A configuration object. |\n\n#### Returns\n\n[`LanguageService`](classes/LanguageService.md)\n\nAn instance of `LanguageService`.\n\n**`Remarks`**\n\n```js\r\nconst language = {{{langJson 'optimized_checkout'}}}; // `langJson` is a Handlebars helper provided by BigCommerce's Stencil template engine.\r\nconst service = createLanguageService(language);\n\nconsole.log(service.translate('address.city_label'));\r\n```\n\n___\n\n### createPayPalCommerceAnalyticTracker\n\n▸ **createPayPalCommerceAnalyticTracker**(`checkoutService`): [`PayPalCommerceAnalyticTrackerService`](interfaces/PayPalCommerceAnalyticTrackerService.md)\n\nCreates an instance of `PayPalCommerceAnalyticTrackerService`.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `checkoutService` | [`CheckoutService`](classes/CheckoutService.md) |\n\n#### Returns\n\n[`PayPalCommerceAnalyticTrackerService`](interfaces/PayPalCommerceAnalyticTrackerService.md)\n\nan instance of `PayPalCommerceAnalyticTrackerService`.\n\n**`Remarks`**\n\n```js\r\nconst checkoutService = createCheckoutService();\r\nawait checkoutService.loadCheckout();\r\nconst paypalCommerceAnalyticTracker = createPayPalCommerceAnalyticTracker(checkoutService);\n\npaypalCommerceAnalyticTracker.customerPaymentMethodExecuted();\r\npaypalCommerceAnalyticTracker.paymentComplete();\r\npaypalCommerceAnalyticTracker.selectedPaymentMethod('applepay');\r\npaypalCommerceAnalyticTracker.walletButtonClick('paypal');\r\n```\n\n___\n\n### createStepTracker\n\n▸ **createStepTracker**(`checkoutService`, `stepTrackerConfig?`): [`StepTracker`](interfaces/StepTracker.md)\n\nCreates an instance of `StepTracker`.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `checkoutService` | [`CheckoutService`](classes/CheckoutService.md) |\n| `stepTrackerConfig?` | [`StepTrackerConfig`](interfaces/StepTrackerConfig.md) |\n\n#### Returns\n\n[`StepTracker`](interfaces/StepTracker.md)\n\nan instance of `StepTracker`.\n\n**`Remarks`**\n\n```js\r\nconst checkoutService = createCheckoutService();\r\nawait checkoutService.loadCheckout();\r\nconst stepTracker = createStepTracker(checkoutService);\n\nstepTracker.trackCheckoutStarted();\r\n```\n\n___\n\n### createStoredCardHostedFormService\n\n▸ **createStoredCardHostedFormService**(`host`): [`StoredCardHostedFormService`](classes/StoredCardHostedFormService.md)\n\nCreates an instance of `StoredCardHostedFormService`.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `host` | `string` | Host url string parameter. |\n\n#### Returns\n\n[`StoredCardHostedFormService`](classes/StoredCardHostedFormService.md)\n\nAn instance of `StoredCardHostedFormService`.\n\n___\n\n### embedCheckout\n\n▸ **embedCheckout**(`options`): `Promise`\\<[`EmbeddedCheckout`](classes/EmbeddedCheckout.md)\\>\n\nEmbed the checkout form in an iframe.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options` | [`EmbeddedCheckoutOptions`](interfaces/EmbeddedCheckoutOptions.md) | Options for embedding the checkout form. |\n\n#### Returns\n\n`Promise`\\<[`EmbeddedCheckout`](classes/EmbeddedCheckout.md)\\>\n\nA promise that resolves to an instance of `EmbeddedCheckout`.\n\n**`Remarks`**\n\nOnce the iframe is embedded, it will automatically resize according to the\r\nsize of the checkout form. It will also notify the parent window when certain\r\nevents have occurred. i.e.: when the form is loaded and ready to be used.\n\n```js\r\nembedCheckout({\r\n    url: 'https://checkout/url',\r\n    containerId: 'container-id',\r\n});\r\n```\n\n___\n\n### isExtraField\n\n▸ **isExtraField**(`field`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `field` | [`FormField`](interfaces/FormField.md) |\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/classes/CartChangedError.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CartChangedError\n\n# Class: CartChangedError\n\nThis error type should not be constructed directly. It is a base class for\r\nall custom errors thrown in this library.\n\n## Hierarchy\n\n- [`StandardError`](StandardError.md)\n\n  ↳ **`CartChangedError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](CartChangedError.md#constructor)\n\n### Properties\n\n- [data](CartChangedError.md#data)\n- [name](CartChangedError.md#name)\n- [type](CartChangedError.md#type)\n\n## Constructors\n\n### constructor\n\n• **new CartChangedError**(`previous`, `updated`): [`CartChangedError`](CartChangedError.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `previous` | [`ComparableCheckout`](../README.md#comparablecheckout) |\n| `updated` | [`ComparableCheckout`](../README.md#comparablecheckout) |\n\n#### Returns\n\n[`CartChangedError`](CartChangedError.md)\n\n#### Overrides\n\n[StandardError](StandardError.md).[constructor](StandardError.md#constructor)\n\n## Properties\n\n### data\n\n• **data**: `Object`\n\nPlease note that this option is currently in an early stage of\r\ndevelopment. Therefore the API is unstable and not ready for public\r\nconsumption.\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `previous` | [`ComparableCheckout`](../README.md#comparablecheckout) |\n| `updated` | [`ComparableCheckout`](../README.md#comparablecheckout) |\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\n[StandardError](StandardError.md).[name](StandardError.md#name)\n\n___\n\n### type\n\n• **type**: `string`\n\n#### Inherited from\n\n[StandardError](StandardError.md).[type](StandardError.md#type)\n"
  },
  {
    "path": "docs/classes/CartConsistencyError.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CartConsistencyError\n\n# Class: CartConsistencyError\n\nThis error is thrown when the server detects inconsistency in cart data since it is last requested,\r\nfor example, product prices or eligible discounts have changed.\n\n## Hierarchy\n\n- [`StandardError`](StandardError.md)\n\n  ↳ **`CartConsistencyError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](CartConsistencyError.md#constructor)\n\n### Properties\n\n- [name](CartConsistencyError.md#name)\n- [type](CartConsistencyError.md#type)\n\n## Constructors\n\n### constructor\n\n• **new CartConsistencyError**(`message?`): [`CartConsistencyError`](CartConsistencyError.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `message?` | `string` |\n\n#### Returns\n\n[`CartConsistencyError`](CartConsistencyError.md)\n\n#### Overrides\n\n[StandardError](StandardError.md).[constructor](StandardError.md#constructor)\n\n## Properties\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\n[StandardError](StandardError.md).[name](StandardError.md#name)\n\n___\n\n### type\n\n• **type**: `string`\n\n#### Inherited from\n\n[StandardError](StandardError.md).[type](StandardError.md#type)\n"
  },
  {
    "path": "docs/classes/CartStockPositionsChangedError.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CartStockPositionsChangedError\n\n# Class: CartStockPositionsChangedError\n\nThis error is thrown when at least one cart item changed stock position (e.g. moved to a different warehouse)\r\nand the server returns type `cart_stock_positions_changed`.\n\n## Hierarchy\n\n- [`StandardError`](StandardError.md)\n\n  ↳ **`CartStockPositionsChangedError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](CartStockPositionsChangedError.md#constructor)\n\n### Properties\n\n- [changedItemIds](CartStockPositionsChangedError.md#changeditemids)\n- [name](CartStockPositionsChangedError.md#name)\n- [type](CartStockPositionsChangedError.md#type)\n\n## Constructors\n\n### constructor\n\n• **new CartStockPositionsChangedError**(`changedItemIds`, `message?`): [`CartStockPositionsChangedError`](CartStockPositionsChangedError.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `changedItemIds` | `string`[] |\n| `message?` | `string` |\n\n#### Returns\n\n[`CartStockPositionsChangedError`](CartStockPositionsChangedError.md)\n\n#### Overrides\n\n[StandardError](StandardError.md).[constructor](StandardError.md#constructor)\n\n## Properties\n\n### changedItemIds\n\n• **changedItemIds**: `string`[]\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\n[StandardError](StandardError.md).[name](StandardError.md#name)\n\n___\n\n### type\n\n• **type**: `string`\n\n#### Inherited from\n\n[StandardError](StandardError.md).[type](StandardError.md#type)\n"
  },
  {
    "path": "docs/classes/CheckoutButtonErrorSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutButtonErrorSelector\n\n# Class: CheckoutButtonErrorSelector\n\n## Table of contents\n\n### Constructors\n\n- [constructor](CheckoutButtonErrorSelector.md#constructor)\n\n### Methods\n\n- [getDeinitializeButtonError](CheckoutButtonErrorSelector.md#getdeinitializebuttonerror)\n- [getInitializeButtonError](CheckoutButtonErrorSelector.md#getinitializebuttonerror)\n\n## Constructors\n\n### constructor\n\n• **new CheckoutButtonErrorSelector**(): [`CheckoutButtonErrorSelector`](CheckoutButtonErrorSelector.md)\n\n#### Returns\n\n[`CheckoutButtonErrorSelector`](CheckoutButtonErrorSelector.md)\n\n## Methods\n\n### getDeinitializeButtonError\n\n▸ **getDeinitializeButtonError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | [`CheckoutButtonMethodType`](../enums/CheckoutButtonMethodType.md) |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getInitializeButtonError\n\n▸ **getInitializeButtonError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | [`CheckoutButtonMethodType`](../enums/CheckoutButtonMethodType.md) |\n\n#### Returns\n\n`undefined` \\| `Error`\n"
  },
  {
    "path": "docs/classes/CheckoutButtonInitializer.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutButtonInitializer\n\n# Class: CheckoutButtonInitializer\n\n## Table of contents\n\n### Constructors\n\n- [constructor](CheckoutButtonInitializer.md#constructor)\n\n### Methods\n\n- [deinitializeButton](CheckoutButtonInitializer.md#deinitializebutton)\n- [getState](CheckoutButtonInitializer.md#getstate)\n- [initializeButton](CheckoutButtonInitializer.md#initializebutton)\n- [subscribe](CheckoutButtonInitializer.md#subscribe)\n\n## Constructors\n\n### constructor\n\n• **new CheckoutButtonInitializer**(): [`CheckoutButtonInitializer`](CheckoutButtonInitializer.md)\n\n#### Returns\n\n[`CheckoutButtonInitializer`](CheckoutButtonInitializer.md)\n\n## Methods\n\n### deinitializeButton\n\n▸ **deinitializeButton**(`options`): `Promise`\\<[`CheckoutButtonSelectors`](../interfaces/CheckoutButtonSelectors.md)\\>\n\nDe-initializes the checkout button by performing any necessary clean-ups.\n\n```js\r\nawait service.deinitializeButton({\r\n    methodId: 'braintreepaypal',\r\n});\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options` | [`CheckoutButtonOptions`](../interfaces/CheckoutButtonOptions.md) | Options for deinitializing the checkout button. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutButtonSelectors`](../interfaces/CheckoutButtonSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### getState\n\n▸ **getState**(): [`CheckoutButtonSelectors`](../interfaces/CheckoutButtonSelectors.md)\n\nReturns a snapshot of the current state.\n\nThe method returns a new instance every time there is a change in the\r\nstate. You can query the state by calling any of its getter methods.\n\n```js\r\nconst state = service.getState();\n\nconsole.log(state.errors.getInitializeButtonError());\r\nconsole.log(state.statuses.isInitializingButton());\r\n```\n\n#### Returns\n\n[`CheckoutButtonSelectors`](../interfaces/CheckoutButtonSelectors.md)\n\nThe current customer's checkout state\n\n___\n\n### initializeButton\n\n▸ **initializeButton**(`options`): `Promise`\\<[`CheckoutButtonSelectors`](../interfaces/CheckoutButtonSelectors.md)\\>\n\nInitializes the checkout button of a payment method.\n\nWhen the checkout button is initialized, it will be inserted into the DOM,\r\nready to be interacted with by the customer.\n\n```js\r\ninitializer.initializeButton({\r\n    methodId: 'braintreepaypal',\r\n    containerId: 'checkoutButton',\r\n    braintreepaypal: {\r\n    },\r\n});\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options` | [`CheckoutButtonInitializeOptions`](../README.md#checkoutbuttoninitializeoptions) | Options for initializing the checkout button. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutButtonSelectors`](../interfaces/CheckoutButtonSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### subscribe\n\n▸ **subscribe**(`subscriber`, `...filters`): () => `void`\n\nSubscribes to any changes to the current state.\n\nThe method registers a callback function and executes it every time there\r\nis a change in the current state.\n\n```js\r\nservice.subscribe(state => {\r\n    console.log(state.statuses.isInitializingButton());\r\n});\r\n```\n\nThe method can be configured to notify subscribers only regarding\r\nrelevant changes, by providing a filter function.\n\n```js\r\nconst filter = state => state.errors.getInitializeButtonError();\n\n// Only trigger the subscriber when the cart changes.\r\nservice.subscribe(state => {\r\n    console.log(state.errors.getInitializeButtonError())\r\n}, filter);\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `subscriber` | (`state`: [`CheckoutButtonSelectors`](../interfaces/CheckoutButtonSelectors.md)) => `void` | The function to subscribe to state changes. |\n| `...filters` | (`state`: [`CheckoutButtonSelectors`](../interfaces/CheckoutButtonSelectors.md)) => `any`[] | One or more functions to filter out irrelevant state changes. If more than one function is provided, the subscriber will only be triggered if all conditions are met. |\n\n#### Returns\n\n`fn`\n\nA function, if called, will unsubscribe the subscriber.\n\n▸ (): `void`\n\n##### Returns\n\n`void`\n"
  },
  {
    "path": "docs/classes/CheckoutButtonStatusSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutButtonStatusSelector\n\n# Class: CheckoutButtonStatusSelector\n\n## Table of contents\n\n### Constructors\n\n- [constructor](CheckoutButtonStatusSelector.md#constructor)\n\n### Methods\n\n- [isDeinitializingButton](CheckoutButtonStatusSelector.md#isdeinitializingbutton)\n- [isInitializingButton](CheckoutButtonStatusSelector.md#isinitializingbutton)\n\n## Constructors\n\n### constructor\n\n• **new CheckoutButtonStatusSelector**(): [`CheckoutButtonStatusSelector`](CheckoutButtonStatusSelector.md)\n\n#### Returns\n\n[`CheckoutButtonStatusSelector`](CheckoutButtonStatusSelector.md)\n\n## Methods\n\n### isDeinitializingButton\n\n▸ **isDeinitializingButton**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | [`CheckoutButtonMethodType`](../enums/CheckoutButtonMethodType.md) |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isInitializingButton\n\n▸ **isInitializingButton**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | [`CheckoutButtonMethodType`](../enums/CheckoutButtonMethodType.md) |\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/classes/CheckoutService.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutService\n\n# Class: CheckoutService\n\nResponsible for completing the checkout process for the current customer.\n\nThis object can be used to collect all information that is required for\r\ncheckout, such as shipping and billing information. It can also be used to\r\nretrieve the current checkout state and subscribe to its changes.\n\n## Table of contents\n\n### Constructors\n\n- [constructor](CheckoutService.md#constructor)\n\n### Methods\n\n- [applyCoupon](CheckoutService.md#applycoupon)\n- [applyGiftCertificate](CheckoutService.md#applygiftcertificate)\n- [applyStoreCredit](CheckoutService.md#applystorecredit)\n- [assignItemsToAddress](CheckoutService.md#assignitemstoaddress)\n- [clearError](CheckoutService.md#clearerror)\n- [clearExtensionCache](CheckoutService.md#clearextensioncache)\n- [continueAsGuest](CheckoutService.md#continueasguest)\n- [createConsignments](CheckoutService.md#createconsignments)\n- [createCustomerAccount](CheckoutService.md#createcustomeraccount)\n- [createCustomerAddress](CheckoutService.md#createcustomeraddress)\n- [deinitializeCustomer](CheckoutService.md#deinitializecustomer)\n- [deinitializePayment](CheckoutService.md#deinitializepayment)\n- [deinitializeShipping](CheckoutService.md#deinitializeshipping)\n- [deleteConsignment](CheckoutService.md#deleteconsignment)\n- [deleteInstrument](CheckoutService.md#deleteinstrument)\n- [executePaymentMethodCheckout](CheckoutService.md#executepaymentmethodcheckout)\n- [executeSpamCheck](CheckoutService.md#executespamcheck)\n- [finalizeOrderIfNeeded](CheckoutService.md#finalizeorderifneeded)\n- [getB2BToken](CheckoutService.md#getb2btoken)\n- [getState](CheckoutService.md#getstate)\n- [handleExtensionCommand](CheckoutService.md#handleextensioncommand)\n- [handleExtensionQuery](CheckoutService.md#handleextensionquery)\n- [hydrateInitialState](CheckoutService.md#hydrateinitialstate)\n- [initializeCustomer](CheckoutService.md#initializecustomer)\n- [initializePayment](CheckoutService.md#initializepayment)\n- [initializeShipping](CheckoutService.md#initializeshipping)\n- [initializeSpamProtection](CheckoutService.md#initializespamprotection)\n- [loadBillingAddressFields](CheckoutService.md#loadbillingaddressfields)\n- [loadBillingCountries](CheckoutService.md#loadbillingcountries)\n- [loadCheckout](CheckoutService.md#loadcheckout)\n- [loadExtensions](CheckoutService.md#loadextensions)\n- [loadInstruments](CheckoutService.md#loadinstruments)\n- [loadOrder](CheckoutService.md#loadorder)\n- [loadPaymentMethodByIds](CheckoutService.md#loadpaymentmethodbyids)\n- [loadPaymentMethods](CheckoutService.md#loadpaymentmethods)\n- [loadPickupOptions](CheckoutService.md#loadpickupoptions)\n- [loadShippingAddressFields](CheckoutService.md#loadshippingaddressfields)\n- [loadShippingCountries](CheckoutService.md#loadshippingcountries)\n- [loadShippingOptions](CheckoutService.md#loadshippingoptions)\n- [notifyState](CheckoutService.md#notifystate)\n- [postMessageToExtension](CheckoutService.md#postmessagetoextension)\n- [removeCoupon](CheckoutService.md#removecoupon)\n- [removeGiftCertificate](CheckoutService.md#removegiftcertificate)\n- [renderExtension](CheckoutService.md#renderextension)\n- [selectConsignmentShippingOption](CheckoutService.md#selectconsignmentshippingoption)\n- [selectShippingOption](CheckoutService.md#selectshippingoption)\n- [sendSignInEmail](CheckoutService.md#sendsigninemail)\n- [signInCustomer](CheckoutService.md#signincustomer)\n- [signOutCustomer](CheckoutService.md#signoutcustomer)\n- [submitOrder](CheckoutService.md#submitorder)\n- [subscribe](CheckoutService.md#subscribe)\n- [unassignItemsToAddress](CheckoutService.md#unassignitemstoaddress)\n- [updateBillingAddress](CheckoutService.md#updatebillingaddress)\n- [updateCheckout](CheckoutService.md#updatecheckout)\n- [updateConsignment](CheckoutService.md#updateconsignment)\n- [updateShippingAddress](CheckoutService.md#updateshippingaddress)\n- [updateSubscriptions](CheckoutService.md#updatesubscriptions)\n\n## Constructors\n\n### constructor\n\n• **new CheckoutService**(): [`CheckoutService`](CheckoutService.md)\n\n#### Returns\n\n[`CheckoutService`](CheckoutService.md)\n\n## Methods\n\n### applyCoupon\n\n▸ **applyCoupon**(`code`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nApplies a coupon code to the current checkout.\n\nOnce the coupon code gets applied, the quote for the current checkout will\r\nbe adjusted accordingly. The same coupon code cannot be applied more than\r\nonce.\n\n```js\r\nawait service.applyCoupon('COUPON');\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `code` | `string` | The coupon code to apply to the current checkout. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for applying the coupon code. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### applyGiftCertificate\n\n▸ **applyGiftCertificate**(`code`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nApplies a gift certificate to the current checkout.\n\nOnce the gift certificate gets applied, the quote for the current\r\ncheckout will be adjusted accordingly.\n\n```js\r\nawait service.applyGiftCertificate('GIFT_CERTIFICATE');\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `code` | `string` | The gift certificate to apply to the current checkout. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for applying the gift certificate. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### applyStoreCredit\n\n▸ **applyStoreCredit**(`useStoreCredit`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nApplies or removes customer's store credit code to the current checkout.\n\nOnce the store credit gets applied, the outstanding balance will be adjusted accordingly.\n\n```js\r\nconst state = await service.applyStoreCredit(true);\n\nconsole.log(state.data.getCheckout().outstandingBalance);\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `useStoreCredit` | `boolean` | - |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for applying store credit. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### assignItemsToAddress\n\n▸ **assignItemsToAddress**(`consignment`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nConvenience method that assigns items to be shipped to a specific address.\n\nNote: this method finds an existing consignment that matches the provided address\r\nand assigns the provided items. If no consignment matches the address, a new one\r\nwill be created.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignment` | [`ConsignmentAssignmentRequestBody`](../README.md#consignmentassignmentrequestbody) | The consignment data that will be used. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for the request |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### clearError\n\n▸ **clearError**(`error`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nClear errors that have been collected from previous calls.\n\n```js\r\nconst state = await service.clearError(error);\n\nconsole.log(state.errors.getError());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | `Error` | Specific error object to clear |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### clearExtensionCache\n\n▸ **clearExtensionCache**(`region`): `void`\n\nClear cache for a checkout extension when removing it from UI.\r\nThis function should be used whenver an extension is removed from the UI.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `region` | [`ExtensionRegion`](../enums/ExtensionRegion.md) | The name of an area where the extension should be presented. |\n\n#### Returns\n\n`void`\n\n___\n\n### continueAsGuest\n\n▸ **continueAsGuest**(`credentials`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nContinues to check out as a guest.\n\nIf your Checkout Settings allow it, your customers could continue the checkout as guests (without signing in).\r\nIf you have enabled the checkout setting \"Prompt existing accounts to sign in\", this information is\r\nexposed as part of the [Customer](../interfaces/customer.md) object.\n\nOnce they provide their email address, it will be stored as\r\npart of their [billing address](../interfaces/billingaddress.md).\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `credentials` | [`GuestCredentials`](../README.md#guestcredentials) | The guest credentials to use, with optional subscriptions. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for continuing as a guest. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### createConsignments\n\n▸ **createConsignments**(`consignments`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nCreates consignments given a list.\n\nNote: this is used when items need to be shipped to multiple addresses,\r\nfor single shipping address, use `CheckoutService#updateShippingAddress`.\n\nWhen consignments are created, an updated list of shipping options will\r\nbecome available for each consignment, unless no options are available.\r\nIf the update is successful, you can call\r\n`CheckoutStoreSelector#getConsignments` to retrieve the updated list of\r\nconsignments.'\n\nBeware that if a consignment includes all line items from another\r\nconsignment, that consignment will be deleted as a valid consignment must\r\ninclude at least one valid line item.\n\nYou can submit an address that is partially complete. The address does\r\nnot get validated until you submit the order.\n\n```js\r\nconst state = await service.createConsignments(consignments);\n\nconsole.log(state.data.getConsignments());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignments` | [`ConsignmentsRequestBody`](../README.md#consignmentsrequestbody) | The list of consignments to be created. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for updating the shipping address. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### createCustomerAccount\n\n▸ **createCustomerAccount**(`customerAccount`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nCreates a customer account.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `customerAccount` | [`CustomerAccountRequestBody`](../interfaces/CustomerAccountRequestBody.md) | The customer account data. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for creating customer account. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n**`Remarks`**\n\n```js\r\ncheckoutService.createCustomerAccount({\r\n  email: 'foo@bar.com',\r\n  firstName: 'Foo',\r\n  lastName: 'Bar',\r\n  password: 'password',\r\n  acceptsMarketingEmails: true,\r\n  customFields: [],\r\n});\r\n```\r\nPlease note that `createCustomerAccount` is currently in an early stage\r\nof development. Therefore the API is unstable and not ready for public\r\nconsumption.\n\n___\n\n### createCustomerAddress\n\n▸ **createCustomerAddress**(`customerAddress`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nCreates a customer account address.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `customerAddress` | [`AddressRequestBody`](../interfaces/AddressRequestBody.md) | The customer account data. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for creating customer account. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n**`Remarks`**\n\n```js\r\ncheckoutService.createCustomerAddress({\r\n  firstName: 'Foo',\r\n  lastName: 'Bar',\r\n  address1: '55 Market St',\r\n  stateOrProvinceCode: 'CA',\r\n  countryCode: 'US',\r\n  postalCode: '90110',\r\n  customFields: [],\r\n});\r\n```\r\nPlease note that `createCustomerAccountAddress` is currently in an early stage\r\nof development. Therefore the API is unstable and not ready for public\r\nconsumption.\n\n___\n\n### deinitializeCustomer\n\n▸ **deinitializeCustomer**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nDe-initializes the sign-in step of a checkout process.\n\nIt should be called once you no longer want to prompt customers to sign\r\nin. It can perform any necessary clean-up behind the scene, i.e.: remove\r\nDOM nodes or event handlers that are attached as a result of customer\r\ninitialization.\n\n```js\r\nawait service.deinitializeCustomer({\r\n    methodId: 'amazonpay',\r\n});\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`CustomerRequestOptions`](../interfaces/CustomerRequestOptions.md) | Options for deinitializing the customer step of checkout. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### deinitializePayment\n\n▸ **deinitializePayment**(`options`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nDe-initializes the payment step of a checkout process.\n\nThe method should be called once you no longer require a payment method\r\nto be initialized. It can perform any necessary clean-up behind the\r\nscene, i.e.: remove DOM nodes or event handlers that are attached as a\r\nresult of payment initialization.\n\n```js\r\nawait service.deinitializePayment({\r\n    methodId: 'amazonpay',\r\n});\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options` | [`PaymentRequestOptions`](../interfaces/PaymentRequestOptions.md) | Options for deinitializing the payment step of checkout. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### deinitializeShipping\n\n▸ **deinitializeShipping**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nDe-initializes the shipping step of a checkout process.\n\nIt should be called once you no longer need to collect shipping details.\r\nIt can perform any necessary clean-up behind the scene, i.e.: remove DOM\r\nnodes or event handlers that are attached as a result of shipping\r\ninitialization.\n\n```js\r\nawait service.deinitializeShipping({\r\n    methodId: 'amazonpay',\r\n});\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`ShippingRequestOptions`](../interfaces/ShippingRequestOptions.md)\\<`object`\\> | Options for deinitializing the shipping step of checkout. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### deleteConsignment\n\n▸ **deleteConsignment**(`consignmentId`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nDeletes a consignment\n\n```js\r\nconst state = await service.deleteConsignment('55c96cda6f04c');\n\nconsole.log(state.data.getConsignments());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignmentId` | `string` | The ID of the consignment to be deleted |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for the consignment delete request |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### deleteInstrument\n\n▸ **deleteInstrument**(`instrumentId`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nDeletes a payment instrument by an id.\n\nOnce an instrument gets removed, it can no longer be retrieved using\r\n`CheckoutStoreSelector#getInstruments`.\n\n```js\r\nconst state = service.deleteInstrument('123');\n\nconsole.log(state.data.getInstruments());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `instrumentId` | `string` | The identifier of the payment instrument to delete. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### executePaymentMethodCheckout\n\n▸ **executePaymentMethodCheckout**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nExecutes custom checkout of the priority payment method.\n\nSome payment methods, such as Bolt, can use their own checkout\r\nwith autofilled customers data, to make checkout passing process\r\neasier and faster for customers with Bolt account.\n\n```js\r\nawait service.executePaymentMethodCheckout({\r\n    methodId: 'bolt',\r\n    fallback: () => {},\r\n});\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`ExecutePaymentMethodCheckoutOptions`](../interfaces/ExecutePaymentMethodCheckoutOptions.md) | Options for executing payment method checkout. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### executeSpamCheck\n\n▸ **executeSpamCheck**(): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nVerifies whether the current checkout is created by a human.\n\nNote: this method will do the initialization, therefore you do not\r\nneed to call `CheckoutService#initializeSpamProtection`\r\nbefore calling this method.\n\nWith spam protection enabled, the customer has to be verified as\r\na human. The order creation will fail if spam protection\r\nis enabled but verification fails. You should call this method before\r\n`submitOrder` method is called (i.e.: when the shopper\r\nfirst gets to the payment step).\n\n**Note**: You need to enable Google ReCAPTCHA bot protection in your Checkout Settings.\n\n```js\r\nawait service.executeSpamCheck();\r\n```\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### finalizeOrderIfNeeded\n\n▸ **finalizeOrderIfNeeded**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nFinalizes the submission process for an order.\n\nThis method is only required for certain hosted payment methods that\r\nrequire a customer to enter their credit card details on their website.\r\nYou need to call this method once the customer has redirected back to\r\ncheckout in order to complete the checkout process.\n\nIf the method is called before order finalization is required or for a\r\npayment method that does not require order finalization, an error will be\r\nthrown. Conversely, if the method is called successfully, you should\r\nimmediately redirect the customer to the order confirmation page.\n\n```js\r\ntry {\r\n    await service.finalizeOrderIfNeeded();\n\n    window.location.assign('/order-confirmation');\r\n} catch (error) {\r\n    if (error.type !== 'order_finalization_not_required') {\r\n        throw error;\r\n    }\r\n}\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`OrderFinalizeOptions`](../interfaces/OrderFinalizeOptions.md) | Options for finalizing the current order. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n**`Throws`**\n\n`OrderFinalizationNotRequiredError` error if order finalization\r\nis not required for the current order at the time of execution.\n\n___\n\n### getB2BToken\n\n▸ **getB2BToken**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nRetrieves a B2B authentication token for the current customer.\n\nThe token can be used to authenticate requests to B2B REST and GraphQL\r\nendpoints. The customer must be signed in for this method to succeed.\r\nThe B2B base URL and client ID are read from the checkout settings config.\n\n```js\r\nconst state = await service.getB2BToken();\n\nconsole.log(state.data.getB2BToken());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for the request. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### getState\n\n▸ **getState**(): [`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\n\nReturns a snapshot of the current checkout state.\n\nThe method returns a new instance every time there is a change in the\r\ncheckout state. You can query the state by calling any of its getter\r\nmethods.\n\n```js\r\nconst state = service.getState();\n\nconsole.log(state.data.getOrder());\r\nconsole.log(state.errors.getSubmitOrderError());\r\nconsole.log(state.statuses.isSubmittingOrder());\r\n```\n\n#### Returns\n\n[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\n\nThe current customer's checkout state\n\n___\n\n### handleExtensionCommand\n\n▸ **handleExtensionCommand**\\<`T`\\>(`extensionId`, `command`, `handler`): () => `void`\n\nManages the command handler for an extension.\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `T` | extends keyof [`ExtensionCommandMap`](../interfaces/ExtensionCommandMap.md) |\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `extensionId` | `string` | The ID of the extension sending the command. |\n| `command` | `T` | The command to be handled. |\n| `handler` | (`command`: [`ExtensionCommandMap`](../interfaces/ExtensionCommandMap.md)[`T`]) => `void` \\| `Promise`\\<`void`\\> | The handler function for the extension command. |\n\n#### Returns\n\n`fn`\n\nA function that, when called, will deregister the command handler.\n\n▸ (): `void`\n\n##### Returns\n\n`void`\n\n___\n\n### handleExtensionQuery\n\n▸ **handleExtensionQuery**\\<`T`\\>(`extensionId`, `query`, `handler`): () => `void`\n\nManages the query handler for an extension.\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `T` | extends [`GetConsignments`](../enums/ExtensionQueryType.md#getconsignments) |\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `extensionId` | `string` | The ID of the extension sending the query. |\n| `query` | `T` | The query to be handled. |\n| `handler` | (`command`: [`ExtensionQueryMap`](../interfaces/ExtensionQueryMap.md)[`T`]) => `void` \\| `Promise`\\<`void`\\> | The handler function for the extension query. |\n\n#### Returns\n\n`fn`\n\nA function that, when called, will deregister the query handler.\n\n▸ (): `void`\n\n##### Returns\n\n`void`\n\n___\n\n### hydrateInitialState\n\n▸ **hydrateInitialState**(`state`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nHydrates the checkout service with an initial state.\n\nThe initial state can contain various checkout data such as cart items,\r\ncustomer information, and other relevant state.\n\n```js\r\nconst initialState = {\r\n    // ... initial checkout state data\r\n};\n\nconst state = await service.hydrateInitialState(initialState);\n\nconsole.log(state.data.getCheckout());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `state` | [`CheckoutInitialState`](../interfaces/CheckoutInitialState.md) | The initial state data to hydrate the checkout service with. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state after hydration.\n\n___\n\n### initializeCustomer\n\n▸ **initializeCustomer**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nInitializes the sign-in step of a checkout process.\n\nSome payment methods, such as Amazon Pay, have their own sign-in flow. In\r\norder to support them, this method must be called.\n\n```js\r\nawait service.initializeCustomer({\r\n    methodId: 'amazonpay',\r\n    amazonpay: {\r\n        container: 'signInButton',\r\n    },\r\n});\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`CustomerInitializeOptions`](../README.md#customerinitializeoptions) | Options for initializing the customer step of checkout. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### initializePayment\n\n▸ **initializePayment**(`options`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nInitializes the payment step of a checkout process.\n\nBefore a payment method can accept payment details, it must first be\r\ninitialized. Some payment methods require you to provide additional\r\ninitialization options. For example, you can provide an element ID for\r\nAmazon Pay if you want users to be able to select a different payment\r\nmethod by clicking on the element.\n\n```js\r\nawait service.initializePayment({\r\n    methodId: 'amazonpay',\r\n    amazonpay: {\r\n        editButtonId: 'edit-button',\r\n    },\r\n});\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options` | [`PaymentInitializeOptions`](../README.md#paymentinitializeoptions) | Options for initializing the payment step of checkout. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### initializeShipping\n\n▸ **initializeShipping**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nInitializes the shipping step of a checkout process.\n\nSome payment methods, such as Amazon Pay, can provide shipping\r\ninformation to be used for checkout. In order to support them, this\r\nmethod must be called.\n\n```js\r\nawait service.initializeShipping({\r\n    methodId: 'amazonpay',\r\n    amazonpay: {\r\n        editAddressButtonId: 'changeAddressButton',\r\n    },\r\n});\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`ShippingInitializeOptions`](../interfaces/ShippingInitializeOptions.md)\\<`object`\\> | Options for initializing the shipping step of checkout. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### initializeSpamProtection\n\n▸ **initializeSpamProtection**(`options`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nInitializes the spam protection for order creation.\n\nNote: Use `CheckoutService#executeSpamCheck` instead.\r\nYou do not need to call this method before calling\r\n`CheckoutService#executeSpamCheck`.\n\nWith spam protection enabled, the customer has to be verified as\r\na human. The order creation will fail if spam protection\r\nis enabled but verification fails.\n\n```js\r\nawait service.initializeSpamProtection();\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options` | [`SpamProtectionOptions`](../interfaces/SpamProtectionOptions.md) | Options for initializing spam protection. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n**`Deprecated`**\n\n- Use CheckoutService#executeSpamCheck instead.\n\n___\n\n### loadBillingAddressFields\n\n▸ **loadBillingAddressFields**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nLoads a set of form fields that should be presented to customers in order\r\nto capture their billing address.\n\nOnce the method has been executed successfully, you can call\r\n`CheckoutStoreSelector#getBillingAddressFields` to retrieve the set of\r\nform fields.\n\n```js\r\nconst state = service.loadBillingAddressFields();\n\nconsole.log(state.data.getBillingAddressFields('US'));\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for loading the billing address form fields. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### loadBillingCountries\n\n▸ **loadBillingCountries**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nLoads a list of countries available for billing.\n\nOnce you make a successful request, you will be able to retrieve the list\r\nof countries by calling `CheckoutStoreSelector#getBillingCountries`.\n\n```js\r\nconst state = await service.loadBillingCountries();\n\nconsole.log(state.data.getBillingCountries());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for loading the available billing countries. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### loadCheckout\n\n▸ **loadCheckout**(`id?`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nLoads the current checkout.\n\nThis method can only be called if there is an active checkout. Also, it\r\ncan only retrieve data that belongs to the current customer. When it is\r\nsuccessfully executed, you can retrieve the data by calling\r\n`CheckoutStoreSelector#getCheckout`.\n\n```js\r\nconst state = await service.loadCheckout('0cfd6c06-57c3-4e29-8d7a-de55cc8a9052');\n\nconsole.log(state.data.getCheckout());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `id?` | `string` | The identifier of the checkout to load, or the default checkout if not provided. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<[`CheckoutParams`](../interfaces/CheckoutParams.md)\\> | Options for loading the current checkout. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### loadExtensions\n\n▸ **loadExtensions**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nLoads a list of extensions available for checkout.\n\n```js\r\nconst state = await service.loadExtensions();\n\nconsole.log(state.data.getExtensions());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for loading the extensions that are available to the current customer. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### loadInstruments\n\n▸ **loadInstruments**(): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nLoads a list of payment instruments associated with a customer.\n\nOnce the method has been called successfully, you can retrieve the list\r\nof payment instruments by calling `CheckoutStoreSelector#getInstruments`.\r\nIf the customer does not have any payment instruments on record, i.e.:\r\ncredit card, you will get an empty list instead.\n\n```js\r\nconst state = service.loadInstruments();\n\nconsole.log(state.data.getInstruments());\r\n```\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### loadOrder\n\n▸ **loadOrder**(`orderId`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nLoads an order by an id.\n\nThe method can only retrieve an order if the order belongs to the current\r\ncustomer. If it is successfully executed, the data can be retrieved by\r\ncalling `CheckoutStoreSelector#getOrder`.\n\n```js\r\nconst state = await service.loadOrder(123);\n\nconsole.log(state.data.getOrder());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `orderId` | `number` | The identifier of the order to load. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for loading the order. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### loadPaymentMethodByIds\n\n▸ **loadPaymentMethodByIds**(`methodIds`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nLoads a list of payment methods for given ids.\n\nOnce the method is executed successfully, you can call\r\n`CheckoutStoreSelector#getPaymentMethods` to retrieve the list of payment\r\nmethods.\n\n```js\r\nconst state = service.loadPaymentMethodsById(['applepay']);\n\nconsole.log(state.data.getPaymentMethodOrThrow('applepay'));\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodIds` | `string`[] | The identifier for the payment methods to load. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for loading the payment methods that are available to the current customer. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### loadPaymentMethods\n\n▸ **loadPaymentMethods**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nLoads a list of payment methods available for checkout.\n\nIf a customer enters their payment details before navigating to the\r\ncheckout page (i.e.: using PayPal checkout button on the cart page), only\r\none payment method will be available for the customer - the selected\r\npayment method. Otherwise, by default, all payment methods configured by\r\nthe merchant will be available for the customer.\n\nOnce the method is executed successfully, you can call\r\n`CheckoutStoreSelector#getPaymentMethods` to retrieve the list of payment\r\nmethods.\n\n```js\r\nconst state = service.loadPaymentMethods();\n\nconsole.log(state.data.getPaymentMethods());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for loading the payment methods that are available to the current customer. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### loadPickupOptions\n\n▸ **loadPickupOptions**(`query`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nLoads a list of pickup options for a given criteria.\n\n```js\r\nconst consignmentId = '1';\r\nconst searchArea = {\r\n    radius: {\r\n        value: 1.4,\r\n        unit: 'KM'\r\n    },\r\n    coordinates: {\r\n        latitude: 1.4,\r\n        longitude: 0\r\n    },\r\n};\r\nconst state = await service.loadPickupOptions({ consignmentId, searchArea });\n\nconsole.log(state.data.getPickupOptions(consignmentId, searchArea));\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `query` | [`PickupOptionRequestBody`](../interfaces/PickupOptionRequestBody.md) | Options for loading the available shipping countries. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### loadShippingAddressFields\n\n▸ **loadShippingAddressFields**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nLoads a set of form fields that should be presented to customers in order\r\nto capture their shipping address.\n\nOnce the method has been executed successfully, you can call\r\n`CheckoutStoreSelector#getShippingAddressFields` to retrieve the set of\r\nform fields.\n\n```js\r\nconst state = service.loadShippingAddressFields();\n\nconsole.log(state.data.getShippingAddressFields('US'));\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for loading the shipping address form fields. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### loadShippingCountries\n\n▸ **loadShippingCountries**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nLoads a list of countries available for shipping.\n\nThe list is determined based on the shipping zones configured by a\r\nmerchant. Once you make a successful call, you will be able to retrieve\r\nthe list of available shipping countries by calling\r\n`CheckoutStoreSelector#getShippingCountries`.\n\n```js\r\nconst state = await service.loadShippingCountries();\n\nconsole.log(state.data.getShippingCountries());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for loading the available shipping countries. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### loadShippingOptions\n\n▸ **loadShippingOptions**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nLoads a list of shipping options available for checkout.\n\nAvailable shipping options can only be determined once a customer\r\nprovides their shipping address. If the method is executed successfully,\r\n`CheckoutStoreSelector#getShippingOptions` can be called to retrieve the\r\nlist of shipping options.\n\n```js\r\nconst state = await service.loadShippingOptions();\n\nconsole.log(state.data.getShippingOptions());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for loading the available shipping options. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### notifyState\n\n▸ **notifyState**(): `void`\n\nNotifies all subscribers with the current state.\n\nWhen this method gets called, the subscribers get called regardless if\r\nthey have any filters applied.\n\n#### Returns\n\n`void`\n\n___\n\n### postMessageToExtension\n\n▸ **postMessageToExtension**(`extensionId`, `message`): `void`\n\nPosts a message to a checkout extension.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `extensionId` | `string` | The ID of an extension to post the event to. |\n| `message` | [`ExtensionMessage`](../README.md#extensionmessage) | The message to post to an extension. |\n\n#### Returns\n\n`void`\n\n___\n\n### removeCoupon\n\n▸ **removeCoupon**(`code`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nRemoves a coupon code from the current checkout.\n\nOnce the coupon code gets removed, the quote for the current checkout will\r\nbe adjusted accordingly.\n\n```js\r\nawait service.removeCoupon('COUPON');\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `code` | `string` | The coupon code to remove from the current checkout. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for removing the coupon code. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### removeGiftCertificate\n\n▸ **removeGiftCertificate**(`code`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nRemoves a gift certificate from an order.\n\nOnce the gift certificate gets removed, the quote for the current\r\ncheckout will be adjusted accordingly.\n\n```js\r\nawait service.removeGiftCertificate('GIFT_CERTIFICATE');\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `code` | `string` | The gift certificate to remove from the current checkout. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for removing the gift certificate. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### renderExtension\n\n▸ **renderExtension**(`container`, `region`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nRenders an extension for a checkout extension region.\r\nCurrently, only one extension is allowed per region.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `container` | `string` | The ID of a container which the extension should be inserted. |\n| `region` | [`ExtensionRegion`](../enums/ExtensionRegion.md) | The name of an area where the extension should be presented. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### selectConsignmentShippingOption\n\n▸ **selectConsignmentShippingOption**(`consignmentId`, `shippingOptionId`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nSelects a shipping option for a given consignment.\n\nNote: this is used when items need to be shipped to multiple addresses,\r\nfor single shipping address, use `CheckoutService#updateShippingAddress`.\n\nIf a shipping option has an additional cost, the quote for the current\r\norder will be adjusted once the option is selected.\n\n```js\r\nconst state = await service.selectConsignmentShippingOption(consignmentId, optionId);\n\nconsole.log(state.data.getConsignments());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignmentId` | `string` | The identified of the consignment to be updated. |\n| `shippingOptionId` | `string` | The identifier of the shipping option to select. |\n| `options?` | [`ShippingRequestOptions`](../interfaces/ShippingRequestOptions.md)\\<`object`\\> | Options for selecting the shipping option. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### selectShippingOption\n\n▸ **selectShippingOption**(`shippingOptionId`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nSelects a shipping option for the current address.\n\nIf a shipping option has an additional cost, the quote for the current\r\norder will be adjusted once the option is selected.\n\n```js\r\nconst state = await service.selectShippingOption('address-id', 'shipping-option-id');\n\nconsole.log(state.data.getSelectedShippingOption());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `shippingOptionId` | `string` | The identifier of the shipping option to select. |\n| `options?` | [`ShippingRequestOptions`](../interfaces/ShippingRequestOptions.md)\\<`object`\\> | Options for selecting the shipping option. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### sendSignInEmail\n\n▸ **sendSignInEmail**(`signInEmailRequest`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nSends a email that contains a single-use sign-in link. When a valid links is clicked,\r\nsigns in the customer without requiring any password, redirecting them to the account page if no redirectUrl is provided.\n\n```js\r\ncheckoutService.sendSignInEmail({ email: 'foo@bar.com', redirectUrl: 'checkout' });\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `signInEmailRequest` | [`SignInEmailRequestBody`](../interfaces/SignInEmailRequestBody.md) | The sign-in email request values. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for the send email request. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### signInCustomer\n\n▸ **signInCustomer**(`credentials`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nSigns into a customer's registered account.\n\nOnce the customer is signed in successfully, the checkout state will be\r\npopulated with information associated with the customer, such as their\r\nsaved addresses. You can call `CheckoutStoreSelector#getCustomer` to\r\nretrieve the data.\n\n```js\r\nconst state = await service.signInCustomer({\r\n    email: 'foo@bar.com',\r\n    password: 'password123',\r\n});\n\nconsole.log(state.data.getCustomer());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `credentials` | [`CustomerCredentials`](../interfaces/CustomerCredentials.md) | The credentials to be used for signing in the customer. |\n| `options?` | [`CustomerRequestOptions`](../interfaces/CustomerRequestOptions.md) | Options for signing in the customer. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### signOutCustomer\n\n▸ **signOutCustomer**(`options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nSigns out the current customer if they are previously signed in.\n\nOnce the customer is successfully signed out, the checkout state will be\r\nreset automatically.\n\n```js\r\nconst state = await service.signOutCustomer();\n\n// The returned object should not contain information about the previously signed-in customer.\r\nconsole.log(state.data.getCustomer());\r\n```\n\nWhen a store has \"Allow customers to access their cart across multiple devices\" enabled, signing out\r\nwill remove the cart/checkout data from the current session. An error with type=\"checkout_not_available\" will be thrown.\n\n```js\r\ntry {\r\n  await service.signOutCustomer();\r\n} catch (error) {\r\n  if (error.type === 'checkout_not_available') {\r\n    window.top.location.assign('/');\r\n  }\r\n}\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `options?` | [`CustomerRequestOptions`](../interfaces/CustomerRequestOptions.md) | Options for signing out the customer. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### submitOrder\n\n▸ **submitOrder**(`payload`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nSubmits an order, thereby completing a checkout process.\n\nBefore you can submit an order, you must initialize the payment method\r\nchosen by the customer by calling `CheckoutService#initializePayment`.\n\n```js\r\nawait service.initializePayment({ methodId: 'braintree' });\r\nawait service.submitOrder({\r\n    payment: {\r\n        methodId: 'braintree',\r\n        paymentData: {\r\n            ccExpiry: { month: 10, year: 20 },\r\n            ccName: 'BigCommerce',\r\n            ccNumber: '4111111111111111',\r\n            ccCvv: 123,\r\n        },\r\n    },\r\n});\r\n```\n\nYou are not required to include `paymentData` if the order does not\r\nrequire additional payment details. For example, the customer has already\r\nentered their payment details on the cart page using one of the hosted\r\npayment methods, such as PayPal. Or the customer has applied a gift\r\ncertificate that exceeds the grand total amount.\n\nIf the order is submitted successfully, you can retrieve the newly\r\ncreated order by calling `CheckoutStoreSelector#getOrder`.\n\n```js\r\nconst state = await service.submitOrder(payload);\n\nconsole.log(state.data.getOrder());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `payload` | [`OrderRequestBody`](../interfaces/OrderRequestBody.md) | The request payload to submit for the current order. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for submitting the current order. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### subscribe\n\n▸ **subscribe**(`subscriber`, `...filters`): () => `void`\n\nSubscribes to any changes to the current state.\n\nThe method registers a callback function and executes it every time there\r\nis a change in the checkout state.\n\n```js\r\nservice.subscribe(state => {\r\n    console.log(state.data.getCart());\r\n});\r\n```\n\nThe method can be configured to notify subscribers only regarding\r\nrelevant changes, by providing a filter function.\n\n```js\r\nconst filter = state => state.data.getCart();\n\n// Only trigger the subscriber when the cart changes.\r\nservice.subscribe(state => {\r\n    console.log(state.data.getCart())\r\n}, filter);\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `subscriber` | (`state`: [`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)) => `void` | The function to subscribe to state changes. |\n| `...filters` | (`state`: [`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)) => `any`[] | One or more functions to filter out irrelevant state changes. If more than one function is provided, the subscriber will only be triggered if all conditions are met. |\n\n#### Returns\n\n`fn`\n\nA function, if called, will unsubscribe the subscriber.\n\n▸ (): `void`\n\n##### Returns\n\n`void`\n\n___\n\n### unassignItemsToAddress\n\n▸ **unassignItemsToAddress**(`consignment`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nConvenience method that unassigns items from a specific shipping address.\n\nNote: this method finds an existing consignment that matches the provided address\r\nand unassigns the specified items. If the consignment ends up with no line items\r\nafter the unassignment, it will be deleted.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignment` | [`ConsignmentAssignmentRequestBody`](../README.md#consignmentassignmentrequestbody) | The consignment data that will be used. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for the request |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### updateBillingAddress\n\n▸ **updateBillingAddress**(`address`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nUpdates the billing address for the current checkout.\n\nA customer must provide their billing address before they can proceed to\r\npay for their order.\n\nYou can submit an address that is partially complete. The address does\r\nnot get validated until you submit the order.\n\n```js\r\nconst state = await service.updateBillingAddress(address);\n\nconsole.log(state.data.getBillingAddress());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `address` | `Partial`\\<[`BillingAddressRequestBody`](../interfaces/BillingAddressRequestBody.md)\\> | The address to be used for billing. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for updating the billing address. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### updateCheckout\n\n▸ **updateCheckout**(`payload`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nUpdates specific properties of the current checkout.\n\n```js\r\nconst state = await service.updateCheckout(checkout);\n\nconsole.log(state.data.getCheckout());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `payload` | [`CheckoutRequestBody`](../interfaces/CheckoutRequestBody.md) | The checkout properties to be updated. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for loading the current checkout. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### updateConsignment\n\n▸ **updateConsignment**(`consignment`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nUpdates a specific consignment.\n\nNote: this is used when items need to be shipped to multiple addresses,\r\nfor single shipping address, use `CheckoutService#selectShippingOption`.\n\nWhen a shipping address for a consignment is updated, an updated list of\r\nshipping options will become available for the consignment, unless no\r\noptions are available. If the update is successful, you can call\r\n`CheckoutStoreSelector#getConsignments` to retrieve updated list of\r\nconsignments.\n\nBeware that if the updated consignment includes all line items from another\r\nconsignment, that consignment will be deleted as a valid consignment must\r\ninclude at least one valid line item.\n\nIf the shipping address changes and the selected shipping option becomes\r\nunavailable for the updated address, the shipping option will be\r\ndeselected.\n\nYou can submit an address that is partially complete. The address does\r\nnot get validated until you submit the order.\n\n```js\r\nconst state = await service.updateConsignment(consignment);\n\nconsole.log(state.data.getConsignments());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignment` | [`ConsignmentUpdateRequestBody`](../interfaces/ConsignmentUpdateRequestBody.md) | The consignment data that will be used. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for updating the shipping address. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### updateShippingAddress\n\n▸ **updateShippingAddress**(`address`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nUpdates the shipping address for the current checkout.\n\nWhen a customer updates their shipping address for an order, they will\r\nsee an updated list of shipping options and the cost for each option,\r\nunless no options are available. If the update is successful, you can\r\ncall `CheckoutStoreSelector#getShippingAddress` to retrieve the address.\n\nIf the shipping address changes and the selected shipping option becomes\r\nunavailable for the updated address, the shipping option will be\r\ndeselected.\n\nYou can submit an address that is partially complete. The address does\r\nnot get validated until you submit the order.\n\n```js\r\nconst state = await service.updateShippingAddress(address);\n\nconsole.log(state.data.getShippingAddress());\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `address` | `Partial`\\<[`AddressRequestBody`](../interfaces/AddressRequestBody.md)\\> | The address to be used for shipping. |\n| `options?` | [`ShippingRequestOptions`](../interfaces/ShippingRequestOptions.md)\\<[`CheckoutParams`](../interfaces/CheckoutParams.md)\\> | Options for updating the shipping address. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n\n___\n\n### updateSubscriptions\n\n▸ **updateSubscriptions**(`subscriptions`, `options?`): `Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nUpdates the subscriptions associated to an email.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `subscriptions` | [`Subscriptions`](../interfaces/Subscriptions.md) | The email and associated subscriptions to update. |\n| `options?` | [`RequestOptions`](../interfaces/RequestOptions.md)\\<`object`\\> | Options for continuing as a guest. |\n\n#### Returns\n\n`Promise`\\<[`CheckoutSelectors`](../interfaces/CheckoutSelectors.md)\\>\n\nA promise that resolves to the current state.\n"
  },
  {
    "path": "docs/classes/CurrencyService.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CurrencyService\n\n# Class: CurrencyService\n\nResponsible for formatting and converting currencies.\n\n## Table of contents\n\n### Constructors\n\n- [constructor](CurrencyService.md#constructor)\n\n### Methods\n\n- [toCustomerCurrency](CurrencyService.md#tocustomercurrency)\n- [toStoreCurrency](CurrencyService.md#tostorecurrency)\n\n## Constructors\n\n### constructor\n\n• **new CurrencyService**(): [`CurrencyService`](CurrencyService.md)\n\n#### Returns\n\n[`CurrencyService`](CurrencyService.md)\n\n## Methods\n\n### toCustomerCurrency\n\n▸ **toCustomerCurrency**(`amount`): `string`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `amount` | `number` |\n\n#### Returns\n\n`string`\n\n___\n\n### toStoreCurrency\n\n▸ **toStoreCurrency**(`amount`): `string`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `amount` | `number` |\n\n#### Returns\n\n`string`\n"
  },
  {
    "path": "docs/classes/DetachmentObserver.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / DetachmentObserver\n\n# Class: DetachmentObserver\n\n## Table of contents\n\n### Constructors\n\n- [constructor](DetachmentObserver.md#constructor)\n\n### Methods\n\n- [ensurePresence](DetachmentObserver.md#ensurepresence)\n\n## Constructors\n\n### constructor\n\n• **new DetachmentObserver**(`_mutationObserver`): [`DetachmentObserver`](DetachmentObserver.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `_mutationObserver` | [`MutationObserverFactory`](MutationObserverFactory.md) |\n\n#### Returns\n\n[`DetachmentObserver`](DetachmentObserver.md)\n\n## Methods\n\n### ensurePresence\n\n▸ **ensurePresence**\\<`T`\\>(`targets`, `promise`): `Promise`\\<`T`\\>\n\n#### Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targets` | `Node`[] |\n| `promise` | `Promise`\\<`T`\\> |\n\n#### Returns\n\n`Promise`\\<`T`\\>\n"
  },
  {
    "path": "docs/classes/EmbeddedCheckout.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckout\n\n# Class: EmbeddedCheckout\n\n## Table of contents\n\n### Constructors\n\n- [constructor](EmbeddedCheckout.md#constructor)\n\n### Methods\n\n- [attach](EmbeddedCheckout.md#attach)\n- [detach](EmbeddedCheckout.md#detach)\n\n## Constructors\n\n### constructor\n\n• **new EmbeddedCheckout**(): [`EmbeddedCheckout`](EmbeddedCheckout.md)\n\n#### Returns\n\n[`EmbeddedCheckout`](EmbeddedCheckout.md)\n\n## Methods\n\n### attach\n\n▸ **attach**(): `Promise`\\<[`EmbeddedCheckout`](EmbeddedCheckout.md)\\>\n\n#### Returns\n\n`Promise`\\<[`EmbeddedCheckout`](EmbeddedCheckout.md)\\>\n\n___\n\n### detach\n\n▸ **detach**(): `void`\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/classes/GoogleRecaptcha.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GoogleRecaptcha\n\n# Class: GoogleRecaptcha\n\n## Table of contents\n\n### Constructors\n\n- [constructor](GoogleRecaptcha.md#constructor)\n\n### Methods\n\n- [execute](GoogleRecaptcha.md#execute)\n- [load](GoogleRecaptcha.md#load)\n- [reset](GoogleRecaptcha.md#reset)\n\n## Constructors\n\n### constructor\n\n• **new GoogleRecaptcha**(`googleRecaptchaScriptLoader`, `mutationObserverFactory`): [`GoogleRecaptcha`](GoogleRecaptcha.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `googleRecaptchaScriptLoader` | [`GoogleRecaptchaScriptLoader`](GoogleRecaptchaScriptLoader.md) |\n| `mutationObserverFactory` | [`MutationObserverFactory`](MutationObserverFactory.md) |\n\n#### Returns\n\n[`GoogleRecaptcha`](GoogleRecaptcha.md)\n\n## Methods\n\n### execute\n\n▸ **execute**(): `Observable`\\<[`RecaptchaResult`](../interfaces/RecaptchaResult.md)\\>\n\n#### Returns\n\n`Observable`\\<[`RecaptchaResult`](../interfaces/RecaptchaResult.md)\\>\n\n___\n\n### load\n\n▸ **load**(`containerId`, `sitekey`): `Promise`\\<`void`\\>\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `containerId` | `string` |\n| `sitekey` | `string` |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\n___\n\n### reset\n\n▸ **reset**(`containerId`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `containerId` | `string` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/classes/GoogleRecaptchaScriptLoader.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GoogleRecaptchaScriptLoader\n\n# Class: GoogleRecaptchaScriptLoader\n\n## Table of contents\n\n### Constructors\n\n- [constructor](GoogleRecaptchaScriptLoader.md#constructor)\n\n### Methods\n\n- [load](GoogleRecaptchaScriptLoader.md#load)\n\n## Constructors\n\n### constructor\n\n• **new GoogleRecaptchaScriptLoader**(`_scriptLoader`, `_window?`): [`GoogleRecaptchaScriptLoader`](GoogleRecaptchaScriptLoader.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `_scriptLoader` | `default` |\n| `_window?` | [`GoogleRecaptchaWindow`](../interfaces/GoogleRecaptchaWindow.md) |\n\n#### Returns\n\n[`GoogleRecaptchaScriptLoader`](GoogleRecaptchaScriptLoader.md)\n\n## Methods\n\n### load\n\n▸ **load**(): `Promise`\\<`undefined` \\| `ReCaptcha`\\>\n\n#### Returns\n\n`Promise`\\<`undefined` \\| `ReCaptcha`\\>\n"
  },
  {
    "path": "docs/classes/HostedField.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedField\n\n# Class: HostedField\n\n## Table of contents\n\n### Constructors\n\n- [constructor](HostedField.md#constructor)\n\n### Methods\n\n- [attach](HostedField.md#attach)\n- [detach](HostedField.md#detach)\n- [getType](HostedField.md#gettype)\n- [submitForm](HostedField.md#submitform)\n- [submitStoredCardForm](HostedField.md#submitstoredcardform)\n- [validateForm](HostedField.md#validateform)\n\n## Constructors\n\n### constructor\n\n• **new HostedField**(`_type`, `_containerId`, `_placeholder`, `_accessibilityLabel`, `_styles`, `_eventPoster`, `_eventListener`, `_detachmentObserver`, `_checkoutId?`, `_cardInstrument?`): [`HostedField`](HostedField.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `_type` | [`HostedFieldType`](../enums/HostedFieldType.md) |\n| `_containerId` | `string` |\n| `_placeholder` | `string` |\n| `_accessibilityLabel` | `string` |\n| `_styles` | [`HostedFieldStylesMap`](../interfaces/HostedFieldStylesMap.md) |\n| `_eventPoster` | [`IframeEventPoster`](IframeEventPoster.md)\\<[`HostedFieldEvent`](../README.md#hostedfieldevent), `undefined`\\> |\n| `_eventListener` | [`IframeEventListener`](IframeEventListener.md)\\<[`HostedInputEventMap`](../interfaces/HostedInputEventMap.md), `undefined`\\> |\n| `_detachmentObserver` | [`DetachmentObserver`](DetachmentObserver.md) |\n| `_checkoutId?` | `string` |\n| `_cardInstrument?` | [`CardInstrument`](../interfaces/CardInstrument.md) |\n\n#### Returns\n\n[`HostedField`](HostedField.md)\n\n## Methods\n\n### attach\n\n▸ **attach**(): `Promise`\\<`void`\\>\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\n___\n\n### detach\n\n▸ **detach**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### getType\n\n▸ **getType**(): [`HostedFieldType`](../enums/HostedFieldType.md)\n\n#### Returns\n\n[`HostedFieldType`](../enums/HostedFieldType.md)\n\n___\n\n### submitForm\n\n▸ **submitForm**(`fields`, `data`): `Promise`\\<[`HostedInputSubmitSuccessEvent`](../interfaces/HostedInputSubmitSuccessEvent.md)\\>\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `fields` | [`HostedFieldType`](../enums/HostedFieldType.md)[] |\n| `data` | [`HostedFormOrderData`](../interfaces/HostedFormOrderData.md) |\n\n#### Returns\n\n`Promise`\\<[`HostedInputSubmitSuccessEvent`](../interfaces/HostedInputSubmitSuccessEvent.md)\\>\n\n___\n\n### submitStoredCardForm\n\n▸ **submitStoredCardForm**(`fields`, `data`): `Promise`\\<[`HostedInputStoredCardSucceededEvent`](../interfaces/HostedInputStoredCardSucceededEvent.md)\\>\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `fields` | [`StoredCardHostedFormInstrumentFields`](../interfaces/StoredCardHostedFormInstrumentFields.md) |\n| `data` | [`StoredCardHostedFormData`](../interfaces/StoredCardHostedFormData.md) |\n\n#### Returns\n\n`Promise`\\<[`HostedInputStoredCardSucceededEvent`](../interfaces/HostedInputStoredCardSucceededEvent.md)\\>\n\n___\n\n### validateForm\n\n▸ **validateForm**(): `Promise`\\<`void`\\>\n\n#### Returns\n\n`Promise`\\<`void`\\>\n"
  },
  {
    "path": "docs/classes/HostedForm.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedForm\n\n# Class: HostedForm\n\n## Implements\n\n- `HostedForm`\n\n## Table of contents\n\n### Constructors\n\n- [constructor](HostedForm.md#constructor)\n\n### Methods\n\n- [attach](HostedForm.md#attach)\n- [detach](HostedForm.md#detach)\n- [getBin](HostedForm.md#getbin)\n- [getCardType](HostedForm.md#getcardtype)\n- [submit](HostedForm.md#submit)\n- [submitStoredCard](HostedForm.md#submitstoredcard)\n- [validate](HostedForm.md#validate)\n\n## Constructors\n\n### constructor\n\n• **new HostedForm**(`_fields`, `_eventListener`, `_payloadTransformer`, `_eventCallbacks`, `_paymentHumanVerificationHandler`): [`HostedForm`](HostedForm.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `_fields` | [`HostedField`](HostedField.md)[] |\n| `_eventListener` | [`IframeEventListener`](IframeEventListener.md)\\<[`HostedInputEventMap`](../interfaces/HostedInputEventMap.md), `undefined`\\> |\n| `_payloadTransformer` | [`HostedFormOrderDataTransformer`](HostedFormOrderDataTransformer.md) |\n| `_eventCallbacks` | [`HostedFormEventCallbacks`](../README.md#hostedformeventcallbacks) |\n| `_paymentHumanVerificationHandler` | [`PaymentHumanVerificationHandler`](PaymentHumanVerificationHandler.md) |\n\n#### Returns\n\n[`HostedForm`](HostedForm.md)\n\n## Methods\n\n### attach\n\n▸ **attach**(): `Promise`\\<`void`\\>\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\n#### Implementation of\n\nHostedFormInterface.attach\n\n___\n\n### detach\n\n▸ **detach**(): `void`\n\n#### Returns\n\n`void`\n\n#### Implementation of\n\nHostedFormInterface.detach\n\n___\n\n### getBin\n\n▸ **getBin**(): `undefined` \\| `string`\n\n#### Returns\n\n`undefined` \\| `string`\n\n#### Implementation of\n\nHostedFormInterface.getBin\n\n___\n\n### getCardType\n\n▸ **getCardType**(): `undefined` \\| `string`\n\n#### Returns\n\n`undefined` \\| `string`\n\n#### Implementation of\n\nHostedFormInterface.getCardType\n\n___\n\n### submit\n\n▸ **submit**(`payload`, `additionalActionData?`): `Promise`\\<[`HostedInputSubmitSuccessEvent`](../interfaces/HostedInputSubmitSuccessEvent.md)\\>\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `payload` | [`OrderPaymentRequestBody`](../interfaces/OrderPaymentRequestBody.md) |\n| `additionalActionData?` | [`PaymentAdditionalAction`](../interfaces/PaymentAdditionalAction.md) |\n\n#### Returns\n\n`Promise`\\<[`HostedInputSubmitSuccessEvent`](../interfaces/HostedInputSubmitSuccessEvent.md)\\>\n\n#### Implementation of\n\nHostedFormInterface.submit\n\n___\n\n### submitStoredCard\n\n▸ **submitStoredCard**(`payload`): `Promise`\\<`void` \\| [`HostedInputStoredCardSucceededEvent`](../interfaces/HostedInputStoredCardSucceededEvent.md)\\>\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `payload` | `Object` |\n| `payload.data` | [`StoredCardHostedFormData`](../interfaces/StoredCardHostedFormData.md) |\n| `payload.fields` | [`StoredCardHostedFormInstrumentFields`](../interfaces/StoredCardHostedFormInstrumentFields.md) |\n\n#### Returns\n\n`Promise`\\<`void` \\| [`HostedInputStoredCardSucceededEvent`](../interfaces/HostedInputStoredCardSucceededEvent.md)\\>\n\n___\n\n### validate\n\n▸ **validate**(): `Promise`\\<`void`\\>\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\n#### Implementation of\n\nHostedFormInterface.validate\n"
  },
  {
    "path": "docs/classes/HostedFormFactory.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedFormFactory\n\n# Class: HostedFormFactory\n\n## Table of contents\n\n### Constructors\n\n- [constructor](HostedFormFactory.md#constructor)\n\n### Methods\n\n- [create](HostedFormFactory.md#create)\n\n## Constructors\n\n### constructor\n\n• **new HostedFormFactory**(`_store`): [`HostedFormFactory`](HostedFormFactory.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `_store` | [`ReadableCheckoutStore`](../README.md#readablecheckoutstore) |\n\n#### Returns\n\n[`HostedFormFactory`](HostedFormFactory.md)\n\n## Methods\n\n### create\n\n▸ **create**(`host`, `options`, `checkoutId?`): [`HostedForm`](HostedForm.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `host` | `string` |\n| `options` | [`LegacyHostedFormOptions`](../interfaces/LegacyHostedFormOptions.md) |\n| `checkoutId?` | `string` |\n\n#### Returns\n\n[`HostedForm`](HostedForm.md)\n"
  },
  {
    "path": "docs/classes/HostedFormOrderDataTransformer.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedFormOrderDataTransformer\n\n# Class: HostedFormOrderDataTransformer\n\n## Table of contents\n\n### Constructors\n\n- [constructor](HostedFormOrderDataTransformer.md#constructor)\n\n### Methods\n\n- [transform](HostedFormOrderDataTransformer.md#transform)\n\n## Constructors\n\n### constructor\n\n• **new HostedFormOrderDataTransformer**(`_store`): [`HostedFormOrderDataTransformer`](HostedFormOrderDataTransformer.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `_store` | [`ReadableCheckoutStore`](../README.md#readablecheckoutstore) |\n\n#### Returns\n\n[`HostedFormOrderDataTransformer`](HostedFormOrderDataTransformer.md)\n\n## Methods\n\n### transform\n\n▸ **transform**(`payload`, `additionalAction?`): [`HostedFormOrderData`](../interfaces/HostedFormOrderData.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `payload` | [`OrderPaymentRequestBody`](../interfaces/OrderPaymentRequestBody.md) |\n| `additionalAction?` | [`PaymentAdditionalAction`](../interfaces/PaymentAdditionalAction.md) |\n\n#### Returns\n\n[`HostedFormOrderData`](../interfaces/HostedFormOrderData.md)\n"
  },
  {
    "path": "docs/classes/IframeEventListener.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / IframeEventListener\n\n# Class: IframeEventListener\\<TEventMap, TContext\\>\n\n## Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TEventMap` | extends [`IframeEventMap`](../README.md#iframeeventmap)\\<keyof `TEventMap`\\> |\n| `TContext` | `undefined` |\n\n## Table of contents\n\n### Constructors\n\n- [constructor](IframeEventListener.md#constructor)\n\n### Methods\n\n- [addListener](IframeEventListener.md#addlistener)\n- [listen](IframeEventListener.md#listen)\n- [removeListener](IframeEventListener.md#removelistener)\n- [stopListen](IframeEventListener.md#stoplisten)\n- [trigger](IframeEventListener.md#trigger)\n\n## Constructors\n\n### constructor\n\n• **new IframeEventListener**\\<`TEventMap`, `TContext`\\>(`sourceOrigin`): [`IframeEventListener`](IframeEventListener.md)\\<`TEventMap`, `TContext`\\>\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TEventMap` | extends [`IframeEventMap`](../README.md#iframeeventmap)\\<keyof `TEventMap`\\> |\n| `TContext` | `undefined` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `sourceOrigin` | `string` |\n\n#### Returns\n\n[`IframeEventListener`](IframeEventListener.md)\\<`TEventMap`, `TContext`\\>\n\n## Methods\n\n### addListener\n\n▸ **addListener**\\<`TType`\\>(`type`, `listener`): `void`\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TType` | extends `string` \\| `number` \\| `symbol` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `type` | `TType` |\n| `listener` | (`event`: `TEventMap`[`TType`], `context?`: `TContext`) => `void` |\n\n#### Returns\n\n`void`\n\n___\n\n### listen\n\n▸ **listen**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### removeListener\n\n▸ **removeListener**\\<`TType`\\>(`type`, `listener`): `void`\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TType` | extends `string` \\| `number` \\| `symbol` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `type` | `TType` |\n| `listener` | (`event`: `TEventMap`[`TType`], `context?`: `TContext`) => `void` |\n\n#### Returns\n\n`void`\n\n___\n\n### stopListen\n\n▸ **stopListen**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### trigger\n\n▸ **trigger**\\<`TType`\\>(`event`, `context?`): `void`\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TType` | extends `string` \\| `number` \\| `symbol` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `event` | `TEventMap`[`TType`] |\n| `context?` | `TContext` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/classes/IframeEventPoster.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / IframeEventPoster\n\n# Class: IframeEventPoster\\<TEvent, TContext\\>\n\n## Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TEvent` | `TEvent` |\n| `TContext` | `undefined` |\n\n## Table of contents\n\n### Constructors\n\n- [constructor](IframeEventPoster.md#constructor)\n\n### Methods\n\n- [post](IframeEventPoster.md#post)\n- [setContext](IframeEventPoster.md#setcontext)\n- [setTarget](IframeEventPoster.md#settarget)\n\n## Constructors\n\n### constructor\n\n• **new IframeEventPoster**\\<`TEvent`, `TContext`\\>(`targetOrigin`, `_targetWindow?`, `_context?`): [`IframeEventPoster`](IframeEventPoster.md)\\<`TEvent`, `TContext`\\>\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TEvent` | `TEvent` |\n| `TContext` | `undefined` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `targetOrigin` | `string` |\n| `_targetWindow?` | `Window` |\n| `_context?` | `TContext` |\n\n#### Returns\n\n[`IframeEventPoster`](IframeEventPoster.md)\\<`TEvent`, `TContext`\\>\n\n## Methods\n\n### post\n\n▸ **post**(`event`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `event` | `TEvent` |\n\n#### Returns\n\n`void`\n\n▸ **post**\\<`TSuccessEvent`, `TErrorEvent`\\>(`event`, `options`): `Promise`\\<`TSuccessEvent`\\>\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TSuccessEvent` | extends [`IframeEvent`](../interfaces/IframeEvent.md)\\<`string`, `any`, `TSuccessEvent`\\> = [`IframeEvent`](../interfaces/IframeEvent.md)\\<`string`, `any`\\> |\n| `TErrorEvent` | extends [`IframeEvent`](../interfaces/IframeEvent.md)\\<`string`, `any`, `TErrorEvent`\\> = [`IframeEvent`](../interfaces/IframeEvent.md)\\<`string`, `any`\\> |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `event` | `TEvent` |\n| `options` | [`IframeEventPostOptions`](../interfaces/IframeEventPostOptions.md)\\<`TSuccessEvent`, `TErrorEvent`\\> |\n\n#### Returns\n\n`Promise`\\<`TSuccessEvent`\\>\n\n___\n\n### setContext\n\n▸ **setContext**(`context`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `context` | `TContext` |\n\n#### Returns\n\n`void`\n\n___\n\n### setTarget\n\n▸ **setTarget**(`window`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `window` | `Window` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/classes/LanguageService.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / LanguageService\n\n# Class: LanguageService\n\nResponsible for getting language strings.\n\nThis object can be used to retrieve language strings that are most\r\nappropriate for a given locale.\n\nThe language strings provided to the object should follow [ICU\r\nMessageFormat](http://userguide.icu-project.org/formatparse/messages) syntax.\n\n## Table of contents\n\n### Constructors\n\n- [constructor](LanguageService.md#constructor)\n\n### Methods\n\n- [getLocale](LanguageService.md#getlocale)\n- [mapKeys](LanguageService.md#mapkeys)\n- [translate](LanguageService.md#translate)\n\n## Constructors\n\n### constructor\n\n• **new LanguageService**(): [`LanguageService`](LanguageService.md)\n\n#### Returns\n\n[`LanguageService`](LanguageService.md)\n\n## Methods\n\n### getLocale\n\n▸ **getLocale**(): `string`\n\nGets the preferred locale of the current customer.\n\n#### Returns\n\n`string`\n\nThe preferred locale code.\n\n___\n\n### mapKeys\n\n▸ **mapKeys**(`maps`): `void`\n\nRemaps a set of language strings with a different set of keys.\n\n```js\r\nservice.mapKeys({\r\n    'new_key': 'existing_key',\r\n});\n\nconsole.log(service.translate('new_key'));\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `maps` | `Object` | The set of language strings. |\n\n#### Returns\n\n`void`\n\n___\n\n### translate\n\n▸ **translate**(`key`, `data?`): `string`\n\nGets a language string by a key.\n\n```js\r\nservice.translate('language_key');\r\n```\n\nIf the language string contains a placeholder, you can replace it by\r\nproviding a second argument.\n\n```js\r\nservice.translate('language_key', { placeholder: 'Hello' });\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `key` | `string` | The language key. |\n| `data?` | [`TranslationData`](../interfaces/TranslationData.md) | Data for replacing placeholders in the language string. |\n\n#### Returns\n\n`string`\n\nThe translated language string.\n"
  },
  {
    "path": "docs/classes/MutationObserverFactory.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / MutationObserverFactory\n\n# Class: MutationObserverFactory\n\n## Table of contents\n\n### Constructors\n\n- [constructor](MutationObserverFactory.md#constructor)\n\n### Methods\n\n- [create](MutationObserverFactory.md#create)\n\n## Constructors\n\n### constructor\n\n• **new MutationObserverFactory**(`_window?`): [`MutationObserverFactory`](MutationObserverFactory.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `_window?` | [`MutationObserverWindow`](../interfaces/MutationObserverWindow.md) |\n\n#### Returns\n\n[`MutationObserverFactory`](MutationObserverFactory.md)\n\n## Methods\n\n### create\n\n▸ **create**(`callback`): `MutationObserver`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `callback` | `MutationCallback` |\n\n#### Returns\n\n`MutationObserver`\n"
  },
  {
    "path": "docs/classes/PaymentHumanVerificationHandler.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaymentHumanVerificationHandler\n\n# Class: PaymentHumanVerificationHandler\n\n## Table of contents\n\n### Constructors\n\n- [constructor](PaymentHumanVerificationHandler.md#constructor)\n\n### Methods\n\n- [handle](PaymentHumanVerificationHandler.md#handle)\n\n## Constructors\n\n### constructor\n\n• **new PaymentHumanVerificationHandler**(`_googleRecaptcha`): [`PaymentHumanVerificationHandler`](PaymentHumanVerificationHandler.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `_googleRecaptcha` | [`GoogleRecaptcha`](GoogleRecaptcha.md) |\n\n#### Returns\n\n[`PaymentHumanVerificationHandler`](PaymentHumanVerificationHandler.md)\n\n## Methods\n\n### handle\n\n▸ **handle**(`error`): `Promise`\\<[`PaymentAdditionalAction`](../interfaces/PaymentAdditionalAction.md)\\>\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `any` |\n\n#### Returns\n\n`Promise`\\<[`PaymentAdditionalAction`](../interfaces/PaymentAdditionalAction.md)\\>\n\n▸ **handle**(`id`, `key`): `Promise`\\<[`PaymentAdditionalAction`](../interfaces/PaymentAdditionalAction.md)\\>\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `id` | `string` |\n| `key` | `string` |\n\n#### Returns\n\n`Promise`\\<[`PaymentAdditionalAction`](../interfaces/PaymentAdditionalAction.md)\\>\n"
  },
  {
    "path": "docs/classes/RequestError.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / RequestError\n\n# Class: RequestError\\<TBody\\>\n\nThrow this error if we are unable to make a request to the server. It wraps\r\nany server response into a JS error object.\n\n## Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TBody` | `any` |\n\n## Hierarchy\n\n- [`StandardError`](StandardError.md)\n\n  ↳ **`RequestError`**\n\n## Table of contents\n\n### Constructors\n\n- [constructor](RequestError.md#constructor)\n\n### Properties\n\n- [body](RequestError.md#body)\n- [errors](RequestError.md#errors)\n- [headers](RequestError.md#headers)\n- [name](RequestError.md#name)\n- [status](RequestError.md#status)\n- [type](RequestError.md#type)\n\n## Constructors\n\n### constructor\n\n• **new RequestError**\\<`TBody`\\>(`response?`, `«destructured»?`): [`RequestError`](RequestError.md)\\<`TBody`\\>\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TBody` | `any` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `response?` | `default`\\<`object` \\| `TBody`\\> |\n| `«destructured»` | `Object` |\n| › `errors?` | \\{ `code`: `string` ; `message?`: `string`  }[] |\n| › `message?` | `string` |\n\n#### Returns\n\n[`RequestError`](RequestError.md)\\<`TBody`\\>\n\n#### Overrides\n\n[StandardError](StandardError.md).[constructor](StandardError.md#constructor)\n\n## Properties\n\n### body\n\n• **body**: `object` \\| `TBody`\n\n___\n\n### errors\n\n• **errors**: \\{ `code`: `string` ; `message?`: `string`  }[]\n\n___\n\n### headers\n\n• **headers**: `Object`\n\n#### Index signature\n\n▪ [key: `string`]: `any`\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\n[StandardError](StandardError.md).[name](StandardError.md#name)\n\n___\n\n### status\n\n• **status**: `number`\n\n___\n\n### type\n\n• **type**: `string`\n\n#### Inherited from\n\n[StandardError](StandardError.md).[type](StandardError.md#type)\n"
  },
  {
    "path": "docs/classes/StandardError.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StandardError\n\n# Class: StandardError\n\nThis error type should not be constructed directly. It is a base class for\r\nall custom errors thrown in this library.\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`StandardError`**\n\n  ↳↳ [`CartChangedError`](CartChangedError.md)\n\n  ↳↳ [`CartConsistencyError`](CartConsistencyError.md)\n\n  ↳↳ [`CartStockPositionsChangedError`](CartStockPositionsChangedError.md)\n\n  ↳↳ [`RequestError`](RequestError.md)\n\n## Implements\n\n- [`CustomError`](../interfaces/CustomError.md)\n\n## Table of contents\n\n### Constructors\n\n- [constructor](StandardError.md#constructor)\n\n### Properties\n\n- [name](StandardError.md#name)\n- [type](StandardError.md#type)\n\n## Constructors\n\n### constructor\n\n• **new StandardError**(`message?`): [`StandardError`](StandardError.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `message?` | `string` |\n\n#### Returns\n\n[`StandardError`](StandardError.md)\n\n#### Overrides\n\nError.constructor\n\n## Properties\n\n### name\n\n• **name**: `string`\n\n#### Implementation of\n\nCustomError.name\n\n#### Overrides\n\nError.name\n\n___\n\n### type\n\n• **type**: `string`\n\n#### Implementation of\n\n[CustomError](../interfaces/CustomError.md).[type](../interfaces/CustomError.md#type)\n"
  },
  {
    "path": "docs/classes/StoredCardHostedFormService.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StoredCardHostedFormService\n\n# Class: StoredCardHostedFormService\n\n## Table of contents\n\n### Constructors\n\n- [constructor](StoredCardHostedFormService.md#constructor)\n\n### Methods\n\n- [deinitialize](StoredCardHostedFormService.md#deinitialize)\n- [initialize](StoredCardHostedFormService.md#initialize)\n- [submitStoredCard](StoredCardHostedFormService.md#submitstoredcard)\n\n## Constructors\n\n### constructor\n\n• **new StoredCardHostedFormService**(`_host`, `_hostedFormFactory`): [`StoredCardHostedFormService`](StoredCardHostedFormService.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `_host` | `string` |\n| `_hostedFormFactory` | [`HostedFormFactory`](HostedFormFactory.md) |\n\n#### Returns\n\n[`StoredCardHostedFormService`](StoredCardHostedFormService.md)\n\n## Methods\n\n### deinitialize\n\n▸ **deinitialize**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### initialize\n\n▸ **initialize**(`options`): `Promise`\\<`void`\\>\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `options` | [`LegacyHostedFormOptions`](../interfaces/LegacyHostedFormOptions.md) |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\n___\n\n### submitStoredCard\n\n▸ **submitStoredCard**(`fields`, `data`): `Promise`\\<`void`\\>\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `fields` | [`StoredCardHostedFormInstrumentFields`](../interfaces/StoredCardHostedFormInstrumentFields.md) |\n| `data` | [`StoredCardHostedFormData`](../interfaces/StoredCardHostedFormData.md) |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n"
  },
  {
    "path": "docs/enums/AdyenCardFields.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenCardFields\n\n# Enumeration: AdyenCardFields\n\n## Table of contents\n\n### Enumeration Members\n\n- [CardNumber](AdyenCardFields.md#cardnumber)\n- [ExpiryDate](AdyenCardFields.md#expirydate)\n- [SecurityCode](AdyenCardFields.md#securitycode)\n\n## Enumeration Members\n\n### CardNumber\n\n• **CardNumber** = ``\"encryptedCardNumber\"``\n\n___\n\n### ExpiryDate\n\n• **ExpiryDate** = ``\"encryptedExpiryDate\"``\n\n___\n\n### SecurityCode\n\n• **SecurityCode** = ``\"encryptedSecurityCode\"``\n"
  },
  {
    "path": "docs/enums/CheckoutButtonMethodType.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutButtonMethodType\n\n# Enumeration: CheckoutButtonMethodType\n\n## Table of contents\n\n### Enumeration Members\n\n- [AMAZON\\_PAY\\_V2](CheckoutButtonMethodType.md#amazon_pay_v2)\n- [APPLEPAY](CheckoutButtonMethodType.md#applepay)\n- [BRAINTREE\\_PAYPAL](CheckoutButtonMethodType.md#braintree_paypal)\n- [BRAINTREE\\_PAYPAL\\_CREDIT](CheckoutButtonMethodType.md#braintree_paypal_credit)\n- [BRAINTREE\\_VENMO](CheckoutButtonMethodType.md#braintree_venmo)\n- [GOOGLEPAY\\_ADYENV2](CheckoutButtonMethodType.md#googlepay_adyenv2)\n- [GOOGLEPAY\\_ADYENV3](CheckoutButtonMethodType.md#googlepay_adyenv3)\n- [GOOGLEPAY\\_AUTHORIZENET](CheckoutButtonMethodType.md#googlepay_authorizenet)\n- [GOOGLEPAY\\_BNZ](CheckoutButtonMethodType.md#googlepay_bnz)\n- [GOOGLEPAY\\_BRAINTREE](CheckoutButtonMethodType.md#googlepay_braintree)\n- [GOOGLEPAY\\_CHECKOUTCOM](CheckoutButtonMethodType.md#googlepay_checkoutcom)\n- [GOOGLEPAY\\_CYBERSOURCEV2](CheckoutButtonMethodType.md#googlepay_cybersourcev2)\n- [GOOGLEPAY\\_ORBITAL](CheckoutButtonMethodType.md#googlepay_orbital)\n- [GOOGLEPAY\\_STRIPE](CheckoutButtonMethodType.md#googlepay_stripe)\n- [GOOGLEPAY\\_STRIPEUPE](CheckoutButtonMethodType.md#googlepay_stripeupe)\n- [GOOGLEPAY\\_WORLDPAYACCESS](CheckoutButtonMethodType.md#googlepay_worldpayaccess)\n- [PAYPALEXPRESS](CheckoutButtonMethodType.md#paypalexpress)\n\n## Enumeration Members\n\n### AMAZON\\_PAY\\_V2\n\n• **AMAZON\\_PAY\\_V2** = ``\"amazonpay\"``\n\n___\n\n### APPLEPAY\n\n• **APPLEPAY** = ``\"applepay\"``\n\n___\n\n### BRAINTREE\\_PAYPAL\n\n• **BRAINTREE\\_PAYPAL** = ``\"braintreepaypal\"``\n\n___\n\n### BRAINTREE\\_PAYPAL\\_CREDIT\n\n• **BRAINTREE\\_PAYPAL\\_CREDIT** = ``\"braintreepaypalcredit\"``\n\n___\n\n### BRAINTREE\\_VENMO\n\n• **BRAINTREE\\_VENMO** = ``\"braintreevenmo\"``\n\n___\n\n### GOOGLEPAY\\_ADYENV2\n\n• **GOOGLEPAY\\_ADYENV2** = ``\"googlepayadyenv2\"``\n\n___\n\n### GOOGLEPAY\\_ADYENV3\n\n• **GOOGLEPAY\\_ADYENV3** = ``\"googlepayadyenv3\"``\n\n___\n\n### GOOGLEPAY\\_AUTHORIZENET\n\n• **GOOGLEPAY\\_AUTHORIZENET** = ``\"googlepayauthorizenet\"``\n\n___\n\n### GOOGLEPAY\\_BNZ\n\n• **GOOGLEPAY\\_BNZ** = ``\"googlepaybnz\"``\n\n___\n\n### GOOGLEPAY\\_BRAINTREE\n\n• **GOOGLEPAY\\_BRAINTREE** = ``\"googlepaybraintree\"``\n\n___\n\n### GOOGLEPAY\\_CHECKOUTCOM\n\n• **GOOGLEPAY\\_CHECKOUTCOM** = ``\"googlepaycheckoutcom\"``\n\n___\n\n### GOOGLEPAY\\_CYBERSOURCEV2\n\n• **GOOGLEPAY\\_CYBERSOURCEV2** = ``\"googlepaycybersourcev2\"``\n\n___\n\n### GOOGLEPAY\\_ORBITAL\n\n• **GOOGLEPAY\\_ORBITAL** = ``\"googlepayorbital\"``\n\n___\n\n### GOOGLEPAY\\_STRIPE\n\n• **GOOGLEPAY\\_STRIPE** = ``\"googlepaystripe\"``\n\n___\n\n### GOOGLEPAY\\_STRIPEUPE\n\n• **GOOGLEPAY\\_STRIPEUPE** = ``\"googlepaystripeupe\"``\n\n___\n\n### GOOGLEPAY\\_WORLDPAYACCESS\n\n• **GOOGLEPAY\\_WORLDPAYACCESS** = ``\"googlepayworldpayaccess\"``\n\n___\n\n### PAYPALEXPRESS\n\n• **PAYPALEXPRESS** = ``\"paypalexpress\"``\n"
  },
  {
    "path": "docs/enums/CheckoutIncludes.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutIncludes\n\n# Enumeration: CheckoutIncludes\n\n## Table of contents\n\n### Enumeration Members\n\n- [AvailableShippingOptions](CheckoutIncludes.md#availableshippingoptions)\n- [DigitalItemsCategoryNames](CheckoutIncludes.md#digitalitemscategorynames)\n- [PhysicalItemsCategoryNames](CheckoutIncludes.md#physicalitemscategorynames)\n\n## Enumeration Members\n\n### AvailableShippingOptions\n\n• **AvailableShippingOptions** = ``\"consignments.availableShippingOptions\"``\n\n___\n\n### DigitalItemsCategoryNames\n\n• **DigitalItemsCategoryNames** = ``\"cart.lineItems.digitalItems.categoryNames\"``\n\n___\n\n### PhysicalItemsCategoryNames\n\n• **PhysicalItemsCategoryNames** = ``\"cart.lineItems.physicalItems.categoryNames\"``\n"
  },
  {
    "path": "docs/enums/EmbeddedCheckoutEventType.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckoutEventType\n\n# Enumeration: EmbeddedCheckoutEventType\n\n## Table of contents\n\n### Enumeration Members\n\n- [CheckoutComplete](EmbeddedCheckoutEventType.md#checkoutcomplete)\n- [CheckoutError](EmbeddedCheckoutEventType.md#checkouterror)\n- [CheckoutLoaded](EmbeddedCheckoutEventType.md#checkoutloaded)\n- [FrameError](EmbeddedCheckoutEventType.md#frameerror)\n- [FrameLoaded](EmbeddedCheckoutEventType.md#frameloaded)\n- [SignedOut](EmbeddedCheckoutEventType.md#signedout)\n\n## Enumeration Members\n\n### CheckoutComplete\n\n• **CheckoutComplete** = ``\"CHECKOUT_COMPLETE\"``\n\n___\n\n### CheckoutError\n\n• **CheckoutError** = ``\"CHECKOUT_ERROR\"``\n\n___\n\n### CheckoutLoaded\n\n• **CheckoutLoaded** = ``\"CHECKOUT_LOADED\"``\n\n___\n\n### FrameError\n\n• **FrameError** = ``\"FRAME_ERROR\"``\n\n___\n\n### FrameLoaded\n\n• **FrameLoaded** = ``\"FRAME_LOADED\"``\n\n___\n\n### SignedOut\n\n• **SignedOut** = ``\"SIGNED_OUT\"``\n"
  },
  {
    "path": "docs/enums/ExtensionCommandType.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExtensionCommandType\n\n# Enumeration: ExtensionCommandType\n\n## Table of contents\n\n### Enumeration Members\n\n- [ReRenderShippingForm](ExtensionCommandType.md#rerendershippingform)\n- [ReRenderShippingStep](ExtensionCommandType.md#rerendershippingstep)\n- [ReloadCheckout](ExtensionCommandType.md#reloadcheckout)\n- [SetIframeStyle](ExtensionCommandType.md#setiframestyle)\n- [ShowLoadingIndicator](ExtensionCommandType.md#showloadingindicator)\n\n## Enumeration Members\n\n### ReRenderShippingForm\n\n• **ReRenderShippingForm** = ``\"EXTENSION:RE_RENDER_SHIPPING_FORM\"``\n\n___\n\n### ReRenderShippingStep\n\n• **ReRenderShippingStep** = ``\"EXTENSION:RE_RENDER_SHIPPING_STEP\"``\n\n___\n\n### ReloadCheckout\n\n• **ReloadCheckout** = ``\"EXTENSION:RELOAD_CHECKOUT\"``\n\n___\n\n### SetIframeStyle\n\n• **SetIframeStyle** = ``\"EXTENSION:SET_IFRAME_STYLE\"``\n\n___\n\n### ShowLoadingIndicator\n\n• **ShowLoadingIndicator** = ``\"EXTENSION:SHOW_LOADING_INDICATOR\"``\n"
  },
  {
    "path": "docs/enums/ExtensionEventType.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExtensionEventType\n\n# Enumeration: ExtensionEventType\n\n## Table of contents\n\n### Enumeration Members\n\n- [ConsignmentsChanged](ExtensionEventType.md#consignmentschanged)\n\n## Enumeration Members\n\n### ConsignmentsChanged\n\n• **ConsignmentsChanged** = ``\"EXTENSION:CONSIGNMENTS_CHANGED\"``\n"
  },
  {
    "path": "docs/enums/ExtensionMessageType.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExtensionMessageType\n\n# Enumeration: ExtensionMessageType\n\n## Table of contents\n\n### Enumeration Members\n\n- [GetConsignments](ExtensionMessageType.md#getconsignments)\n\n## Enumeration Members\n\n### GetConsignments\n\n• **GetConsignments** = ``\"EXTENSION:GET_CONSIGNMENTS\"``\n"
  },
  {
    "path": "docs/enums/ExtensionQueryType.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExtensionQueryType\n\n# Enumeration: ExtensionQueryType\n\n## Table of contents\n\n### Enumeration Members\n\n- [GetConsignments](ExtensionQueryType.md#getconsignments)\n\n## Enumeration Members\n\n### GetConsignments\n\n• **GetConsignments** = ``\"EXTENSION:GET_CONSIGNMENTS\"``\n"
  },
  {
    "path": "docs/enums/ExtensionRegion.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExtensionRegion\n\n# Enumeration: ExtensionRegion\n\n## Table of contents\n\n### Enumeration Members\n\n- [GlobalWebWorker](ExtensionRegion.md#globalwebworker)\n- [PaymentPaymentMethodListBefore](ExtensionRegion.md#paymentpaymentmethodlistbefore)\n- [ShippingSelectedShippingMethod](ExtensionRegion.md#shippingselectedshippingmethod)\n- [ShippingShippingAddressFormAfter](ExtensionRegion.md#shippingshippingaddressformafter)\n- [ShippingShippingAddressFormBefore](ExtensionRegion.md#shippingshippingaddressformbefore)\n- [SummaryAfter](ExtensionRegion.md#summaryafter)\n- [SummaryLastItemAfter](ExtensionRegion.md#summarylastitemafter)\n\n## Enumeration Members\n\n### GlobalWebWorker\n\n• **GlobalWebWorker** = ``\"global\"``\n\n___\n\n### PaymentPaymentMethodListBefore\n\n• **PaymentPaymentMethodListBefore** = ``\"payment.paymentMethodList.before\"``\n\n___\n\n### ShippingSelectedShippingMethod\n\n• **ShippingSelectedShippingMethod** = ``\"shipping.selectedShippingMethod\"``\n\n___\n\n### ShippingShippingAddressFormAfter\n\n• **ShippingShippingAddressFormAfter** = ``\"shipping.shippingAddressForm.after\"``\n\n___\n\n### ShippingShippingAddressFormBefore\n\n• **ShippingShippingAddressFormBefore** = ``\"shipping.shippingAddressForm.before\"``\n\n___\n\n### SummaryAfter\n\n• **SummaryAfter** = ``\"summary.after\"``\n\n___\n\n### SummaryLastItemAfter\n\n• **SummaryLastItemAfter** = ``\"summary.lastItem.after\"``\n"
  },
  {
    "path": "docs/enums/ExtensionType.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExtensionType\n\n# Enumeration: ExtensionType\n\n## Table of contents\n\n### Enumeration Members\n\n- [Iframe](ExtensionType.md#iframe)\n- [Worker](ExtensionType.md#worker)\n\n## Enumeration Members\n\n### Iframe\n\n• **Iframe** = ``\"iframe\"``\n\n___\n\n### Worker\n\n• **Worker** = ``\"worker\"``\n"
  },
  {
    "path": "docs/enums/GooglePayKey.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GooglePayKey\n\n# Enumeration: GooglePayKey\n\nThe recognized keys to pass the initialization options for Google Pay.\n\n## Table of contents\n\n### Enumeration Members\n\n- [ADYEN\\_V2](GooglePayKey.md#adyen_v2)\n- [ADYEN\\_V3](GooglePayKey.md#adyen_v3)\n- [AUTHORIZE\\_NET](GooglePayKey.md#authorize_net)\n- [BIGCOMMERCE\\_PAYMENTS](GooglePayKey.md#bigcommerce_payments)\n- [BNZ](GooglePayKey.md#bnz)\n- [BRAINTREE](GooglePayKey.md#braintree)\n- [CHECKOUT\\_COM](GooglePayKey.md#checkout_com)\n- [CYBERSOURCE\\_V2](GooglePayKey.md#cybersource_v2)\n- [ORBITAL](GooglePayKey.md#orbital)\n- [PAYPAL\\_COMMERCE](GooglePayKey.md#paypal_commerce)\n- [STRIPE](GooglePayKey.md#stripe)\n- [STRIPE\\_OCS](GooglePayKey.md#stripe_ocs)\n- [STRIPE\\_UPE](GooglePayKey.md#stripe_upe)\n- [TD\\_ONLINE\\_MART](GooglePayKey.md#td_online_mart)\n- [WORLDPAY\\_ACCESS](GooglePayKey.md#worldpay_access)\n\n## Enumeration Members\n\n### ADYEN\\_V2\n\n• **ADYEN\\_V2** = ``\"googlepayadyenv2\"``\n\n___\n\n### ADYEN\\_V3\n\n• **ADYEN\\_V3** = ``\"googlepayadyenv3\"``\n\n___\n\n### AUTHORIZE\\_NET\n\n• **AUTHORIZE\\_NET** = ``\"googlepayauthorizenet\"``\n\n___\n\n### BIGCOMMERCE\\_PAYMENTS\n\n• **BIGCOMMERCE\\_PAYMENTS** = ``\"googlepay_bigcommerce_payments\"``\n\n___\n\n### BNZ\n\n• **BNZ** = ``\"googlepaybnz\"``\n\n___\n\n### BRAINTREE\n\n• **BRAINTREE** = ``\"googlepaybraintree\"``\n\n___\n\n### CHECKOUT\\_COM\n\n• **CHECKOUT\\_COM** = ``\"googlepaycheckoutcom\"``\n\n___\n\n### CYBERSOURCE\\_V2\n\n• **CYBERSOURCE\\_V2** = ``\"googlepaycybersourcev2\"``\n\n___\n\n### ORBITAL\n\n• **ORBITAL** = ``\"googlepayorbital\"``\n\n___\n\n### PAYPAL\\_COMMERCE\n\n• **PAYPAL\\_COMMERCE** = ``\"googlepaypaypalcommerce\"``\n\n___\n\n### STRIPE\n\n• **STRIPE** = ``\"googlepaystripe\"``\n\n___\n\n### STRIPE\\_OCS\n\n• **STRIPE\\_OCS** = ``\"googlepaystripeocs\"``\n\n___\n\n### STRIPE\\_UPE\n\n• **STRIPE\\_UPE** = ``\"googlepaystripeupe\"``\n\n___\n\n### TD\\_ONLINE\\_MART\n\n• **TD\\_ONLINE\\_MART** = ``\"googlepaytdonlinemart\"``\n\n___\n\n### WORLDPAY\\_ACCESS\n\n• **WORLDPAY\\_ACCESS** = ``\"googlepayworldpayaccess\"``\n"
  },
  {
    "path": "docs/enums/HostedFieldEventType.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedFieldEventType\n\n# Enumeration: HostedFieldEventType\n\n## Table of contents\n\n### Enumeration Members\n\n- [AttachRequested](HostedFieldEventType.md#attachrequested)\n- [StoredCardRequested](HostedFieldEventType.md#storedcardrequested)\n- [SubmitRequested](HostedFieldEventType.md#submitrequested)\n- [ValidateRequested](HostedFieldEventType.md#validaterequested)\n\n## Enumeration Members\n\n### AttachRequested\n\n• **AttachRequested** = ``\"HOSTED_FIELD:ATTACH_REQUESTED\"``\n\n___\n\n### StoredCardRequested\n\n• **StoredCardRequested** = ``\"HOSTED_FIELD:STORED_CARD_REQUESTED\"``\n\n___\n\n### SubmitRequested\n\n• **SubmitRequested** = ``\"HOSTED_FIELD:SUBMITTED_REQUESTED\"``\n\n___\n\n### ValidateRequested\n\n• **ValidateRequested** = ``\"HOSTED_FIELD:VALIDATE_REQUESTED\"``\n"
  },
  {
    "path": "docs/enums/HostedFieldType.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedFieldType\n\n# Enumeration: HostedFieldType\n\n## Table of contents\n\n### Enumeration Members\n\n- [CardCode](HostedFieldType.md#cardcode)\n- [CardCodeVerification](HostedFieldType.md#cardcodeverification)\n- [CardExpiry](HostedFieldType.md#cardexpiry)\n- [CardName](HostedFieldType.md#cardname)\n- [CardNumber](HostedFieldType.md#cardnumber)\n- [CardNumberVerification](HostedFieldType.md#cardnumberverification)\n\n## Enumeration Members\n\n### CardCode\n\n• **CardCode** = ``\"cardCode\"``\n\n___\n\n### CardCodeVerification\n\n• **CardCodeVerification** = ``\"cardCodeVerification\"``\n\n___\n\n### CardExpiry\n\n• **CardExpiry** = ``\"cardExpiry\"``\n\n___\n\n### CardName\n\n• **CardName** = ``\"cardName\"``\n\n___\n\n### CardNumber\n\n• **CardNumber** = ``\"cardNumber\"``\n\n___\n\n### CardNumberVerification\n\n• **CardNumberVerification** = ``\"cardNumberVerification\"``\n"
  },
  {
    "path": "docs/enums/HostedInputEventType.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputEventType\n\n# Enumeration: HostedInputEventType\n\n## Table of contents\n\n### Enumeration Members\n\n- [AttachFailed](HostedInputEventType.md#attachfailed)\n- [AttachSucceeded](HostedInputEventType.md#attachsucceeded)\n- [BinChanged](HostedInputEventType.md#binchanged)\n- [Blurred](HostedInputEventType.md#blurred)\n- [CardTypeChanged](HostedInputEventType.md#cardtypechanged)\n- [Changed](HostedInputEventType.md#changed)\n- [Entered](HostedInputEventType.md#entered)\n- [Focused](HostedInputEventType.md#focused)\n- [StoredCardFailed](HostedInputEventType.md#storedcardfailed)\n- [StoredCardSucceeded](HostedInputEventType.md#storedcardsucceeded)\n- [SubmitFailed](HostedInputEventType.md#submitfailed)\n- [SubmitSucceeded](HostedInputEventType.md#submitsucceeded)\n- [Validated](HostedInputEventType.md#validated)\n\n## Enumeration Members\n\n### AttachFailed\n\n• **AttachFailed** = ``\"HOSTED_INPUT:ATTACH_FAILED\"``\n\n___\n\n### AttachSucceeded\n\n• **AttachSucceeded** = ``\"HOSTED_INPUT:ATTACH_SUCCEEDED\"``\n\n___\n\n### BinChanged\n\n• **BinChanged** = ``\"HOSTED_INPUT:BIN_CHANGED\"``\n\n___\n\n### Blurred\n\n• **Blurred** = ``\"HOSTED_INPUT:BLURRED\"``\n\n___\n\n### CardTypeChanged\n\n• **CardTypeChanged** = ``\"HOSTED_INPUT:CARD_TYPE_CHANGED\"``\n\n___\n\n### Changed\n\n• **Changed** = ``\"HOSTED_INPUT:CHANGED\"``\n\n___\n\n### Entered\n\n• **Entered** = ``\"HOSTED_INPUT:ENTERED\"``\n\n___\n\n### Focused\n\n• **Focused** = ``\"HOSTED_INPUT:FOCUSED\"``\n\n___\n\n### StoredCardFailed\n\n• **StoredCardFailed** = ``\"HOSTED_INPUT:STORED_CARD_FAILED\"``\n\n___\n\n### StoredCardSucceeded\n\n• **StoredCardSucceeded** = ``\"HOSTED_INPUT:STORED_CARD_SUCCEEDED\"``\n\n___\n\n### SubmitFailed\n\n• **SubmitFailed** = ``\"HOSTED_INPUT:SUBMIT_FAILED\"``\n\n___\n\n### SubmitSucceeded\n\n• **SubmitSucceeded** = ``\"HOSTED_INPUT:SUBMIT_SUCCEEDED\"``\n\n___\n\n### Validated\n\n• **Validated** = ``\"HOSTED_INPUT:VALIDATED\"``\n"
  },
  {
    "path": "docs/enums/IconStyle.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / IconStyle\n\n# Enumeration: IconStyle\n\n## Table of contents\n\n### Enumeration Members\n\n- [Default](IconStyle.md#default)\n- [Solid](IconStyle.md#solid)\n\n## Enumeration Members\n\n### Default\n\n• **Default** = ``\"default\"``\n\n___\n\n### Solid\n\n• **Solid** = ``\"solid\"``\n"
  },
  {
    "path": "docs/enums/PaypalButtonStyleColorOption.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaypalButtonStyleColorOption\n\n# Enumeration: PaypalButtonStyleColorOption\n\n## Table of contents\n\n### Enumeration Members\n\n- [BLACK](PaypalButtonStyleColorOption.md#black)\n- [BLUE](PaypalButtonStyleColorOption.md#blue)\n- [GOLD](PaypalButtonStyleColorOption.md#gold)\n- [SIlVER](PaypalButtonStyleColorOption.md#silver)\n- [WHITE](PaypalButtonStyleColorOption.md#white)\n\n## Enumeration Members\n\n### BLACK\n\n• **BLACK** = ``\"black\"``\n\n___\n\n### BLUE\n\n• **BLUE** = ``\"blue\"``\n\n___\n\n### GOLD\n\n• **GOLD** = ``\"gold\"``\n\n___\n\n### SIlVER\n\n• **SIlVER** = ``\"silver\"``\n\n___\n\n### WHITE\n\n• **WHITE** = ``\"white\"``\n"
  },
  {
    "path": "docs/enums/PaypalButtonStyleLabelOption.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaypalButtonStyleLabelOption\n\n# Enumeration: PaypalButtonStyleLabelOption\n\n## Table of contents\n\n### Enumeration Members\n\n- [BUYNOW](PaypalButtonStyleLabelOption.md#buynow)\n- [CHECKOUT](PaypalButtonStyleLabelOption.md#checkout)\n- [CREDIT](PaypalButtonStyleLabelOption.md#credit)\n- [PAY](PaypalButtonStyleLabelOption.md#pay)\n- [PAYPAL](PaypalButtonStyleLabelOption.md#paypal)\n\n## Enumeration Members\n\n### BUYNOW\n\n• **BUYNOW** = ``\"buynow\"``\n\n___\n\n### CHECKOUT\n\n• **CHECKOUT** = ``\"checkout\"``\n\n___\n\n### CREDIT\n\n• **CREDIT** = ``\"credit\"``\n\n___\n\n### PAY\n\n• **PAY** = ``\"pay\"``\n\n___\n\n### PAYPAL\n\n• **PAYPAL** = ``\"paypal\"``\n"
  },
  {
    "path": "docs/enums/PaypalButtonStyleLayoutOption.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaypalButtonStyleLayoutOption\n\n# Enumeration: PaypalButtonStyleLayoutOption\n\n## Table of contents\n\n### Enumeration Members\n\n- [HORIZONTAL](PaypalButtonStyleLayoutOption.md#horizontal)\n- [VERTICAL](PaypalButtonStyleLayoutOption.md#vertical)\n\n## Enumeration Members\n\n### HORIZONTAL\n\n• **HORIZONTAL** = ``\"horizontal\"``\n\n___\n\n### VERTICAL\n\n• **VERTICAL** = ``\"vertical\"``\n"
  },
  {
    "path": "docs/enums/PaypalButtonStyleShapeOption.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaypalButtonStyleShapeOption\n\n# Enumeration: PaypalButtonStyleShapeOption\n\n## Table of contents\n\n### Enumeration Members\n\n- [PILL](PaypalButtonStyleShapeOption.md#pill)\n- [RECT](PaypalButtonStyleShapeOption.md#rect)\n\n## Enumeration Members\n\n### PILL\n\n• **PILL** = ``\"pill\"``\n\n___\n\n### RECT\n\n• **RECT** = ``\"rect\"``\n"
  },
  {
    "path": "docs/enums/PaypalButtonStyleSizeOption.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaypalButtonStyleSizeOption\n\n# Enumeration: PaypalButtonStyleSizeOption\n\n## Table of contents\n\n### Enumeration Members\n\n- [LARGE](PaypalButtonStyleSizeOption.md#large)\n- [MEDIUM](PaypalButtonStyleSizeOption.md#medium)\n- [RESPONSIVE](PaypalButtonStyleSizeOption.md#responsive)\n- [SMALL](PaypalButtonStyleSizeOption.md#small)\n\n## Enumeration Members\n\n### LARGE\n\n• **LARGE** = ``\"large\"``\n\n___\n\n### MEDIUM\n\n• **MEDIUM** = ``\"medium\"``\n\n___\n\n### RESPONSIVE\n\n• **RESPONSIVE** = ``\"responsive\"``\n\n___\n\n### SMALL\n\n• **SMALL** = ``\"small\"``\n"
  },
  {
    "path": "docs/enums/RadiusUnit.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / RadiusUnit\n\n# Enumeration: RadiusUnit\n\n## Table of contents\n\n### Enumeration Members\n\n- [KM](RadiusUnit.md#km)\n- [MI](RadiusUnit.md#mi)\n\n## Enumeration Members\n\n### KM\n\n• **KM** = ``\"KM\"``\n\n___\n\n### MI\n\n• **MI** = ``\"MI\"``\n"
  },
  {
    "path": "docs/enums/StyleButtonColor.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StyleButtonColor\n\n# Enumeration: StyleButtonColor\n\n## Table of contents\n\n### Enumeration Members\n\n- [black](StyleButtonColor.md#black)\n- [blue](StyleButtonColor.md#blue)\n- [gold](StyleButtonColor.md#gold)\n- [silver](StyleButtonColor.md#silver)\n- [white](StyleButtonColor.md#white)\n\n## Enumeration Members\n\n### black\n\n• **black** = ``\"black\"``\n\n___\n\n### blue\n\n• **blue** = ``\"blue\"``\n\n___\n\n### gold\n\n• **gold** = ``\"gold\"``\n\n___\n\n### silver\n\n• **silver** = ``\"silver\"``\n\n___\n\n### white\n\n• **white** = ``\"white\"``\n"
  },
  {
    "path": "docs/enums/StyleButtonColor_2.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StyleButtonColor\\_2\n\n# Enumeration: StyleButtonColor\\_2\n\n## Table of contents\n\n### Enumeration Members\n\n- [black](StyleButtonColor_2.md#black)\n- [blue](StyleButtonColor_2.md#blue)\n- [gold](StyleButtonColor_2.md#gold)\n- [silver](StyleButtonColor_2.md#silver)\n- [white](StyleButtonColor_2.md#white)\n\n## Enumeration Members\n\n### black\n\n• **black** = ``\"black\"``\n\n___\n\n### blue\n\n• **blue** = ``\"blue\"``\n\n___\n\n### gold\n\n• **gold** = ``\"gold\"``\n\n___\n\n### silver\n\n• **silver** = ``\"silver\"``\n\n___\n\n### white\n\n• **white** = ``\"white\"``\n"
  },
  {
    "path": "docs/enums/StyleButtonLabel.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StyleButtonLabel\n\n# Enumeration: StyleButtonLabel\n\n## Table of contents\n\n### Enumeration Members\n\n- [buynow](StyleButtonLabel.md#buynow)\n- [checkout](StyleButtonLabel.md#checkout)\n- [installment](StyleButtonLabel.md#installment)\n- [pay](StyleButtonLabel.md#pay)\n- [paypal](StyleButtonLabel.md#paypal)\n\n## Enumeration Members\n\n### buynow\n\n• **buynow** = ``\"buynow\"``\n\n___\n\n### checkout\n\n• **checkout** = ``\"checkout\"``\n\n___\n\n### installment\n\n• **installment** = ``\"installment\"``\n\n___\n\n### pay\n\n• **pay** = ``\"pay\"``\n\n___\n\n### paypal\n\n• **paypal** = ``\"paypal\"``\n"
  },
  {
    "path": "docs/enums/StyleButtonLabel_2.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StyleButtonLabel\\_2\n\n# Enumeration: StyleButtonLabel\\_2\n\n## Table of contents\n\n### Enumeration Members\n\n- [buynow](StyleButtonLabel_2.md#buynow)\n- [checkout](StyleButtonLabel_2.md#checkout)\n- [installment](StyleButtonLabel_2.md#installment)\n- [pay](StyleButtonLabel_2.md#pay)\n- [paypal](StyleButtonLabel_2.md#paypal)\n\n## Enumeration Members\n\n### buynow\n\n• **buynow** = ``\"buynow\"``\n\n___\n\n### checkout\n\n• **checkout** = ``\"checkout\"``\n\n___\n\n### installment\n\n• **installment** = ``\"installment\"``\n\n___\n\n### pay\n\n• **pay** = ``\"pay\"``\n\n___\n\n### paypal\n\n• **paypal** = ``\"paypal\"``\n"
  },
  {
    "path": "docs/enums/StyleButtonShape.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StyleButtonShape\n\n# Enumeration: StyleButtonShape\n\n## Table of contents\n\n### Enumeration Members\n\n- [pill](StyleButtonShape.md#pill)\n- [rect](StyleButtonShape.md#rect)\n\n## Enumeration Members\n\n### pill\n\n• **pill** = ``\"pill\"``\n\n___\n\n### rect\n\n• **rect** = ``\"rect\"``\n"
  },
  {
    "path": "docs/enums/StyleButtonShape_2.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StyleButtonShape\\_2\n\n# Enumeration: StyleButtonShape\\_2\n\n## Table of contents\n\n### Enumeration Members\n\n- [Pill](StyleButtonShape_2.md#pill)\n- [Rect](StyleButtonShape_2.md#rect)\n\n## Enumeration Members\n\n### Pill\n\n• **Pill** = ``\"pill\"``\n\n___\n\n### Rect\n\n• **Rect** = ``\"rect\"``\n"
  },
  {
    "path": "docs/enums/StyleButtonShape_3.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StyleButtonShape\\_3\n\n# Enumeration: StyleButtonShape\\_3\n\n## Table of contents\n\n### Enumeration Members\n\n- [pill](StyleButtonShape_3.md#pill)\n- [rect](StyleButtonShape_3.md#rect)\n\n## Enumeration Members\n\n### pill\n\n• **pill** = ``\"pill\"``\n\n___\n\n### rect\n\n• **rect** = ``\"rect\"``\n"
  },
  {
    "path": "docs/enums/StyleButtonSize.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StyleButtonSize\n\n# Enumeration: StyleButtonSize\n\n## Table of contents\n\n### Enumeration Members\n\n- [Large](StyleButtonSize.md#large)\n- [Medium](StyleButtonSize.md#medium)\n- [Small](StyleButtonSize.md#small)\n\n## Enumeration Members\n\n### Large\n\n• **Large** = ``\"large\"``\n\n___\n\n### Medium\n\n• **Medium** = ``\"medium\"``\n\n___\n\n### Small\n\n• **Small** = ``\"small\"``\n"
  },
  {
    "path": "docs/enums/UntrustedShippingCardVerificationType.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / UntrustedShippingCardVerificationType\n\n# Enumeration: UntrustedShippingCardVerificationType\n\n## Table of contents\n\n### Enumeration Members\n\n- [CVV](UntrustedShippingCardVerificationType.md#cvv)\n- [PAN](UntrustedShippingCardVerificationType.md#pan)\n\n## Enumeration Members\n\n### CVV\n\n• **CVV** = ``\"cvv\"``\n\n___\n\n### PAN\n\n• **PAN** = ``\"pan\"``\n"
  },
  {
    "path": "docs/interfaces/AchInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AchInstrument\n\n# Interface: AchInstrument\n\n## Hierarchy\n\n- [`BaseAccountInstrument`](BaseAccountInstrument.md)\n\n  ↳ **`AchInstrument`**\n\n## Table of contents\n\n### Properties\n\n- [accountNumber](AchInstrument.md#accountnumber)\n- [bigpayToken](AchInstrument.md#bigpaytoken)\n- [defaultInstrument](AchInstrument.md#defaultinstrument)\n- [issuer](AchInstrument.md#issuer)\n- [method](AchInstrument.md#method)\n- [provider](AchInstrument.md#provider)\n- [trustedShippingAddress](AchInstrument.md#trustedshippingaddress)\n- [type](AchInstrument.md#type)\n\n## Properties\n\n### accountNumber\n\n• **accountNumber**: `string`\n\n___\n\n### bigpayToken\n\n• **bigpayToken**: `string`\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[bigpayToken](BaseAccountInstrument.md#bigpaytoken)\n\n___\n\n### defaultInstrument\n\n• **defaultInstrument**: `boolean`\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[defaultInstrument](BaseAccountInstrument.md#defaultinstrument)\n\n___\n\n### issuer\n\n• **issuer**: `string`\n\n___\n\n### method\n\n• **method**: ``\"ach\"`` \\| ``\"ecp\"``\n\n#### Overrides\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[method](BaseAccountInstrument.md#method)\n\n___\n\n### provider\n\n• **provider**: `string`\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[provider](BaseAccountInstrument.md#provider)\n\n___\n\n### trustedShippingAddress\n\n• **trustedShippingAddress**: `boolean`\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[trustedShippingAddress](BaseAccountInstrument.md#trustedshippingaddress)\n\n___\n\n### type\n\n• **type**: ``\"bank\"``\n\n#### Overrides\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[type](BaseAccountInstrument.md#type)\n"
  },
  {
    "path": "docs/interfaces/Address.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Address\n\n# Interface: Address\n\n## Hierarchy\n\n- [`AddressRequestBody`](AddressRequestBody.md)\n\n  ↳ **`Address`**\n\n  ↳↳ [`BillingAddress`](BillingAddress.md)\n\n  ↳↳ [`CustomerAddress`](CustomerAddress.md)\n\n  ↳↳ [`OrderBillingAddress`](OrderBillingAddress.md)\n\n## Table of contents\n\n### Properties\n\n- [address1](Address.md#address1)\n- [address2](Address.md#address2)\n- [city](Address.md#city)\n- [company](Address.md#company)\n- [country](Address.md#country)\n- [countryCode](Address.md#countrycode)\n- [customFields](Address.md#customfields)\n- [extraFields](Address.md#extrafields)\n- [firstName](Address.md#firstname)\n- [lastName](Address.md#lastname)\n- [phone](Address.md#phone)\n- [postalCode](Address.md#postalcode)\n- [shouldSaveAddress](Address.md#shouldsaveaddress)\n- [stateOrProvince](Address.md#stateorprovince)\n- [stateOrProvinceCode](Address.md#stateorprovincecode)\n\n## Properties\n\n### address1\n\n• **address1**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[address1](AddressRequestBody.md#address1)\n\n___\n\n### address2\n\n• **address2**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[address2](AddressRequestBody.md#address2)\n\n___\n\n### city\n\n• **city**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[city](AddressRequestBody.md#city)\n\n___\n\n### company\n\n• **company**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[company](AddressRequestBody.md#company)\n\n___\n\n### country\n\n• **country**: `string`\n\n___\n\n### countryCode\n\n• **countryCode**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[countryCode](AddressRequestBody.md#countrycode)\n\n___\n\n### customFields\n\n• **customFields**: \\{ `fieldId`: `string` ; `fieldValue`: `string` \\| `number` \\| `string`[]  }[]\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[customFields](AddressRequestBody.md#customfields)\n\n___\n\n### extraFields\n\n• `Optional` **extraFields**: [`AddressExtraFieldValue`](AddressExtraFieldValue.md)[]\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[extraFields](AddressRequestBody.md#extrafields)\n\n___\n\n### firstName\n\n• **firstName**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[firstName](AddressRequestBody.md#firstname)\n\n___\n\n### lastName\n\n• **lastName**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[lastName](AddressRequestBody.md#lastname)\n\n___\n\n### phone\n\n• **phone**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[phone](AddressRequestBody.md#phone)\n\n___\n\n### postalCode\n\n• **postalCode**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[postalCode](AddressRequestBody.md#postalcode)\n\n___\n\n### shouldSaveAddress\n\n• `Optional` **shouldSaveAddress**: `boolean`\n\n___\n\n### stateOrProvince\n\n• **stateOrProvince**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[stateOrProvince](AddressRequestBody.md#stateorprovince)\n\n___\n\n### stateOrProvinceCode\n\n• **stateOrProvinceCode**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[stateOrProvinceCode](AddressRequestBody.md#stateorprovincecode)\n"
  },
  {
    "path": "docs/interfaces/AddressExtraFieldValue.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AddressExtraFieldValue\n\n# Interface: AddressExtraFieldValue\n\n## Table of contents\n\n### Properties\n\n- [fieldId](AddressExtraFieldValue.md#fieldid)\n- [fieldValue](AddressExtraFieldValue.md#fieldvalue)\n\n## Properties\n\n### fieldId\n\n• **fieldId**: `string`\n\n___\n\n### fieldValue\n\n• **fieldValue**: `string` \\| `number`\n"
  },
  {
    "path": "docs/interfaces/AddressRequestBody.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AddressRequestBody\n\n# Interface: AddressRequestBody\n\n## Hierarchy\n\n- **`AddressRequestBody`**\n\n  ↳ [`Address`](Address.md)\n\n  ↳ [`BillingAddressRequestBody`](BillingAddressRequestBody.md)\n\n## Table of contents\n\n### Properties\n\n- [address1](AddressRequestBody.md#address1)\n- [address2](AddressRequestBody.md#address2)\n- [city](AddressRequestBody.md#city)\n- [company](AddressRequestBody.md#company)\n- [countryCode](AddressRequestBody.md#countrycode)\n- [customFields](AddressRequestBody.md#customfields)\n- [extraFields](AddressRequestBody.md#extrafields)\n- [firstName](AddressRequestBody.md#firstname)\n- [lastName](AddressRequestBody.md#lastname)\n- [phone](AddressRequestBody.md#phone)\n- [postalCode](AddressRequestBody.md#postalcode)\n- [stateOrProvince](AddressRequestBody.md#stateorprovince)\n- [stateOrProvinceCode](AddressRequestBody.md#stateorprovincecode)\n\n## Properties\n\n### address1\n\n• **address1**: `string`\n\n___\n\n### address2\n\n• **address2**: `string`\n\n___\n\n### city\n\n• **city**: `string`\n\n___\n\n### company\n\n• **company**: `string`\n\n___\n\n### countryCode\n\n• **countryCode**: `string`\n\n___\n\n### customFields\n\n• **customFields**: \\{ `fieldId`: `string` ; `fieldValue`: `string` \\| `number` \\| `string`[]  }[]\n\n___\n\n### extraFields\n\n• `Optional` **extraFields**: [`AddressExtraFieldValue`](AddressExtraFieldValue.md)[]\n\n___\n\n### firstName\n\n• **firstName**: `string`\n\n___\n\n### lastName\n\n• **lastName**: `string`\n\n___\n\n### phone\n\n• **phone**: `string`\n\n___\n\n### postalCode\n\n• **postalCode**: `string`\n\n___\n\n### stateOrProvince\n\n• **stateOrProvince**: `string`\n\n___\n\n### stateOrProvinceCode\n\n• **stateOrProvinceCode**: `string`\n"
  },
  {
    "path": "docs/interfaces/AdyenAdditionalActionCallbacks.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenAdditionalActionCallbacks\n\n# Interface: AdyenAdditionalActionCallbacks\n\n## Hierarchy\n\n- **`AdyenAdditionalActionCallbacks`**\n\n  ↳ [`AdyenAdditionalActionOptions`](AdyenAdditionalActionOptions.md)\n\n  ↳ [`AdyenThreeDS2Options`](AdyenThreeDS2Options.md)\n\n## Table of contents\n\n### Methods\n\n- [onActionHandled](AdyenAdditionalActionCallbacks.md#onactionhandled)\n- [onBeforeLoad](AdyenAdditionalActionCallbacks.md#onbeforeload)\n- [onComplete](AdyenAdditionalActionCallbacks.md#oncomplete)\n- [onLoad](AdyenAdditionalActionCallbacks.md#onload)\n\n## Methods\n\n### onActionHandled\n\n▸ **onActionHandled**(): `void`\n\nA callback that gets called when an action, for example a QR code or 3D Secure 2 authentication screen, is shown to the shopper\n\n#### Returns\n\n`void`\n\n___\n\n### onBeforeLoad\n\n▸ **onBeforeLoad**(`shopperInteraction?`): `void`\n\nA callback that gets called before adyen component is loaded\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `shopperInteraction?` | `boolean` |\n\n#### Returns\n\n`void`\n\n___\n\n### onComplete\n\n▸ **onComplete**(): `void`\n\nA callback that gets called when adyen component verification\r\nis completed\n\n#### Returns\n\n`void`\n\n___\n\n### onLoad\n\n▸ **onLoad**(`cancel?`): `void`\n\nA callback that gets called when adyen component is loaded\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `cancel?` | () => `void` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/AdyenAdditionalActionOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenAdditionalActionOptions\n\n# Interface: AdyenAdditionalActionOptions\n\n## Hierarchy\n\n- [`AdyenAdditionalActionCallbacks`](AdyenAdditionalActionCallbacks.md)\n\n  ↳ **`AdyenAdditionalActionOptions`**\n\n## Table of contents\n\n### Properties\n\n- [containerId](AdyenAdditionalActionOptions.md#containerid)\n- [widgetSize](AdyenAdditionalActionOptions.md#widgetsize)\n\n### Methods\n\n- [onActionHandled](AdyenAdditionalActionOptions.md#onactionhandled)\n- [onBeforeLoad](AdyenAdditionalActionOptions.md#onbeforeload)\n- [onComplete](AdyenAdditionalActionOptions.md#oncomplete)\n- [onLoad](AdyenAdditionalActionOptions.md#onload)\n\n## Properties\n\n### containerId\n\n• **containerId**: `string`\n\nThe location to insert the additional action component.\n\n___\n\n### widgetSize\n\n• `Optional` **widgetSize**: `string`\n\nSpecify Three3DS2Challenge Widget Size\n\nValues\r\n'01' = 250px x 400px\r\n'02' = 390px x 400px\r\n'03' = 500px x 600px\r\n'04' = 600px x 400px\r\n'05' = 100% x 100%\n\n## Methods\n\n### onActionHandled\n\n▸ **onActionHandled**(): `void`\n\nA callback that gets called when an action, for example a QR code or 3D Secure 2 authentication screen, is shown to the shopper\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenAdditionalActionCallbacks](AdyenAdditionalActionCallbacks.md).[onActionHandled](AdyenAdditionalActionCallbacks.md#onactionhandled)\n\n___\n\n### onBeforeLoad\n\n▸ **onBeforeLoad**(`shopperInteraction?`): `void`\n\nA callback that gets called before adyen component is loaded\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `shopperInteraction?` | `boolean` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenAdditionalActionCallbacks](AdyenAdditionalActionCallbacks.md).[onBeforeLoad](AdyenAdditionalActionCallbacks.md#onbeforeload)\n\n___\n\n### onComplete\n\n▸ **onComplete**(): `void`\n\nA callback that gets called when adyen component verification\r\nis completed\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenAdditionalActionCallbacks](AdyenAdditionalActionCallbacks.md).[onComplete](AdyenAdditionalActionCallbacks.md#oncomplete)\n\n___\n\n### onLoad\n\n▸ **onLoad**(`cancel?`): `void`\n\nA callback that gets called when adyen component is loaded\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `cancel?` | () => `void` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenAdditionalActionCallbacks](AdyenAdditionalActionCallbacks.md).[onLoad](AdyenAdditionalActionCallbacks.md#onload)\n"
  },
  {
    "path": "docs/interfaces/AdyenBaseCardComponentOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenBaseCardComponentOptions\n\n# Interface: AdyenBaseCardComponentOptions\n\n## Hierarchy\n\n- **`AdyenBaseCardComponentOptions`**\n\n  ↳ [`AdyenCreditCardComponentOptions`](AdyenCreditCardComponentOptions.md)\n\n  ↳ [`AdyenIdealComponentOptions`](AdyenIdealComponentOptions.md)\n\n## Table of contents\n\n### Properties\n\n- [brands](AdyenBaseCardComponentOptions.md#brands)\n- [showBrandsUnderCardNumber](AdyenBaseCardComponentOptions.md#showbrandsundercardnumber)\n- [styles](AdyenBaseCardComponentOptions.md#styles)\n\n## Properties\n\n### brands\n\n• `Optional` **brands**: `string`[]\n\nArray of card brands that will be recognized by the component.\n\n___\n\n### showBrandsUnderCardNumber\n\n• `Optional` **showBrandsUnderCardNumber**: `boolean`\n\n___\n\n### styles\n\n• `Optional` **styles**: [`StyleOptions`](StyleOptions.md)\n\nSet a style object to customize the input fields. See Styling Secured Fields\r\nfor a list of supported properties.\n"
  },
  {
    "path": "docs/interfaces/AdyenComponent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenComponent\n\n# Interface: AdyenComponent\n\n## Table of contents\n\n### Properties\n\n- [componentRef](AdyenComponent.md#componentref)\n- [props](AdyenComponent.md#props)\n- [state](AdyenComponent.md#state)\n\n### Methods\n\n- [mount](AdyenComponent.md#mount)\n- [submit](AdyenComponent.md#submit)\n- [unmount](AdyenComponent.md#unmount)\n\n## Properties\n\n### componentRef\n\n• `Optional` **componentRef**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `showValidation` | () => `void` |\n\n___\n\n### props\n\n• `Optional` **props**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `type?` | `string` |\n\n___\n\n### state\n\n• `Optional` **state**: [`AdyenComponentState`](AdyenComponentState.md)\n\n## Methods\n\n### mount\n\n▸ **mount**(`containerId`): `HTMLElement`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `containerId` | `string` |\n\n#### Returns\n\n`HTMLElement`\n\n___\n\n### submit\n\n▸ **submit**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### unmount\n\n▸ **unmount**(): `void`\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/AdyenComponentEvents.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenComponentEvents\n\n# Interface: AdyenComponentEvents\n\n## Hierarchy\n\n- **`AdyenComponentEvents`**\n\n  ↳ [`AdyenCreditCardComponentOptions`](AdyenCreditCardComponentOptions.md)\n\n  ↳ [`AdyenIdealComponentOptions`](AdyenIdealComponentOptions.md)\n\n## Table of contents\n\n### Methods\n\n- [onChange](AdyenComponentEvents.md#onchange)\n- [onError](AdyenComponentEvents.md#onerror)\n- [onFieldValid](AdyenComponentEvents.md#onfieldvalid)\n- [onSubmit](AdyenComponentEvents.md#onsubmit)\n\n## Methods\n\n### onChange\n\n▸ **onChange**(`state`, `component`): `void`\n\nCalled when the shopper enters data in the card input fields.\r\nHere you have the option to override your main Adyen Checkout configuration.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AdyenComponentEventState`](../README.md#adyencomponenteventstate) |\n| `component` | [`AdyenComponent`](AdyenComponent.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`state`, `component`): `void`\n\nCalled in case of an invalid card number, invalid expiry date, or\r\n incomplete field. Called again when errors are cleared.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AdyenValidationState`](AdyenValidationState.md) |\n| `component` | [`AdyenComponent`](AdyenComponent.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### onFieldValid\n\n▸ **onFieldValid**(`state`, `component`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AdyenValidationState`](AdyenValidationState.md) |\n| `component` | [`AdyenComponent`](AdyenComponent.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### onSubmit\n\n▸ **onSubmit**(`state`, `component`): `void`\n\nCalled when the shopper selects the Pay button and payment details are valid.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AdyenComponentEventState`](../README.md#adyencomponenteventstate) |\n| `component` | [`AdyenComponent`](AdyenComponent.md) |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/AdyenComponentState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenComponentState\n\n# Interface: AdyenComponentState\n\n## Table of contents\n\n### Properties\n\n- [data](AdyenComponentState.md#data)\n- [errors](AdyenComponentState.md#errors)\n- [isValid](AdyenComponentState.md#isvalid)\n- [issuer](AdyenComponentState.md#issuer)\n- [valid](AdyenComponentState.md#valid)\n\n## Properties\n\n### data\n\n• `Optional` **data**: [`CardStateData`](CardStateData.md) \\| [`IdealStateData`](IdealStateData.md) \\| [`SepaStateData`](SepaStateData.md)\n\n___\n\n### errors\n\n• `Optional` **errors**: [`CardStateErrors`](CardStateErrors.md)\n\n___\n\n### isValid\n\n• `Optional` **isValid**: `boolean`\n\n___\n\n### issuer\n\n• `Optional` **issuer**: `string`\n\n___\n\n### valid\n\n• `Optional` **valid**: `Object`\n\n#### Index signature\n\n▪ [key: `string`]: `boolean`\n"
  },
  {
    "path": "docs/interfaces/AdyenCreditCardComponentOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenCreditCardComponentOptions\n\n# Interface: AdyenCreditCardComponentOptions\n\n## Hierarchy\n\n- [`AdyenBaseCardComponentOptions`](AdyenBaseCardComponentOptions.md)\n\n- [`AdyenComponentEvents`](AdyenComponentEvents.md)\n\n  ↳ **`AdyenCreditCardComponentOptions`**\n\n## Table of contents\n\n### Properties\n\n- [brands](AdyenCreditCardComponentOptions.md#brands)\n- [data](AdyenCreditCardComponentOptions.md#data)\n- [details](AdyenCreditCardComponentOptions.md#details)\n- [enableStoreDetails](AdyenCreditCardComponentOptions.md#enablestoredetails)\n- [groupTypes](AdyenCreditCardComponentOptions.md#grouptypes)\n- [hasHolderName](AdyenCreditCardComponentOptions.md#hasholdername)\n- [holderNameRequired](AdyenCreditCardComponentOptions.md#holdernamerequired)\n- [placeholders](AdyenCreditCardComponentOptions.md#placeholders)\n- [showBrandsUnderCardNumber](AdyenCreditCardComponentOptions.md#showbrandsundercardnumber)\n- [styles](AdyenCreditCardComponentOptions.md#styles)\n\n### Methods\n\n- [onChange](AdyenCreditCardComponentOptions.md#onchange)\n- [onError](AdyenCreditCardComponentOptions.md#onerror)\n- [onFieldValid](AdyenCreditCardComponentOptions.md#onfieldvalid)\n- [onSubmit](AdyenCreditCardComponentOptions.md#onsubmit)\n\n## Properties\n\n### brands\n\n• `Optional` **brands**: `string`[]\n\nArray of card brands that will be recognized by the component.\n\n#### Inherited from\n\n[AdyenBaseCardComponentOptions](AdyenBaseCardComponentOptions.md).[brands](AdyenBaseCardComponentOptions.md#brands)\n\n___\n\n### data\n\n• `Optional` **data**: [`AdyenPlaceholderData`](AdyenPlaceholderData.md)\n\nInformation to prefill fields.\n\n___\n\n### details\n\n• `Optional` **details**: [`InputDetail`](InputDetail.md)[]\n\nSet an object containing the details array for type: scheme from\r\nthe /paymentMethods response.\n\n___\n\n### enableStoreDetails\n\n• `Optional` **enableStoreDetails**: `boolean`\n\nSet to true to show the checkbox to save card details for the next payment.\n\n___\n\n### groupTypes\n\n• `Optional` **groupTypes**: `string`[]\n\nDefaults to ['mc','visa','amex']. Configure supported card types to\r\nfacilitate brand recognition used in the Secured Fields onBrand callback.\r\nSee list of available card types. If a shopper enters a card type not\r\nspecified in the GroupTypes configuration, the onBrand callback will not be invoked.\n\n___\n\n### hasHolderName\n\n• `Optional` **hasHolderName**: `boolean`\n\nSet to true to request the name of the card holder.\n\n___\n\n### holderNameRequired\n\n• `Optional` **holderNameRequired**: `boolean`\n\nSet to true to require the card holder name.\n\n___\n\n### placeholders\n\n• `Optional` **placeholders**: [`CreditCardPlaceHolder`](CreditCardPlaceHolder.md) \\| [`SepaPlaceHolder`](SepaPlaceHolder.md)\n\nSpecify the sample values you want to appear for card detail input fields.\n\n___\n\n### showBrandsUnderCardNumber\n\n• `Optional` **showBrandsUnderCardNumber**: `boolean`\n\n#### Inherited from\n\n[AdyenBaseCardComponentOptions](AdyenBaseCardComponentOptions.md).[showBrandsUnderCardNumber](AdyenBaseCardComponentOptions.md#showbrandsundercardnumber)\n\n___\n\n### styles\n\n• `Optional` **styles**: [`StyleOptions`](StyleOptions.md)\n\nSet a style object to customize the input fields. See Styling Secured Fields\r\nfor a list of supported properties.\n\n#### Inherited from\n\n[AdyenBaseCardComponentOptions](AdyenBaseCardComponentOptions.md).[styles](AdyenBaseCardComponentOptions.md#styles)\n\n## Methods\n\n### onChange\n\n▸ **onChange**(`state`, `component`): `void`\n\nCalled when the shopper enters data in the card input fields.\r\nHere you have the option to override your main Adyen Checkout configuration.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AdyenComponentEventState`](../README.md#adyencomponenteventstate) |\n| `component` | [`AdyenComponent`](AdyenComponent.md) |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenComponentEvents](AdyenComponentEvents.md).[onChange](AdyenComponentEvents.md#onchange)\n\n___\n\n### onError\n\n▸ **onError**(`state`, `component`): `void`\n\nCalled in case of an invalid card number, invalid expiry date, or\r\n incomplete field. Called again when errors are cleared.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AdyenValidationState`](AdyenValidationState.md) |\n| `component` | [`AdyenComponent`](AdyenComponent.md) |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenComponentEvents](AdyenComponentEvents.md).[onError](AdyenComponentEvents.md#onerror)\n\n___\n\n### onFieldValid\n\n▸ **onFieldValid**(`state`, `component`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AdyenValidationState`](AdyenValidationState.md) |\n| `component` | [`AdyenComponent`](AdyenComponent.md) |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenComponentEvents](AdyenComponentEvents.md).[onFieldValid](AdyenComponentEvents.md#onfieldvalid)\n\n___\n\n### onSubmit\n\n▸ **onSubmit**(`state`, `component`): `void`\n\nCalled when the shopper selects the Pay button and payment details are valid.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AdyenComponentEventState`](../README.md#adyencomponenteventstate) |\n| `component` | [`AdyenComponent`](AdyenComponent.md) |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenComponentEvents](AdyenComponentEvents.md).[onSubmit](AdyenComponentEvents.md#onsubmit)\n"
  },
  {
    "path": "docs/interfaces/AdyenIdealComponentOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenIdealComponentOptions\n\n# Interface: AdyenIdealComponentOptions\n\n## Hierarchy\n\n- [`AdyenBaseCardComponentOptions`](AdyenBaseCardComponentOptions.md)\n\n- [`AdyenComponentEvents`](AdyenComponentEvents.md)\n\n  ↳ **`AdyenIdealComponentOptions`**\n\n## Table of contents\n\n### Properties\n\n- [brands](AdyenIdealComponentOptions.md#brands)\n- [showBrandsUnderCardNumber](AdyenIdealComponentOptions.md#showbrandsundercardnumber)\n- [showImage](AdyenIdealComponentOptions.md#showimage)\n- [styles](AdyenIdealComponentOptions.md#styles)\n\n### Methods\n\n- [onChange](AdyenIdealComponentOptions.md#onchange)\n- [onError](AdyenIdealComponentOptions.md#onerror)\n- [onFieldValid](AdyenIdealComponentOptions.md#onfieldvalid)\n- [onSubmit](AdyenIdealComponentOptions.md#onsubmit)\n\n## Properties\n\n### brands\n\n• `Optional` **brands**: `string`[]\n\nArray of card brands that will be recognized by the component.\n\n#### Inherited from\n\n[AdyenBaseCardComponentOptions](AdyenBaseCardComponentOptions.md).[brands](AdyenBaseCardComponentOptions.md#brands)\n\n___\n\n### showBrandsUnderCardNumber\n\n• `Optional` **showBrandsUnderCardNumber**: `boolean`\n\n#### Inherited from\n\n[AdyenBaseCardComponentOptions](AdyenBaseCardComponentOptions.md).[showBrandsUnderCardNumber](AdyenBaseCardComponentOptions.md#showbrandsundercardnumber)\n\n___\n\n### showImage\n\n• `Optional` **showImage**: `boolean`\n\nOptional. Set to **false** to remove the bank logos from the iDEAL form.\n\n___\n\n### styles\n\n• `Optional` **styles**: [`StyleOptions`](StyleOptions.md)\n\nSet a style object to customize the input fields. See Styling Secured Fields\r\nfor a list of supported properties.\n\n#### Inherited from\n\n[AdyenBaseCardComponentOptions](AdyenBaseCardComponentOptions.md).[styles](AdyenBaseCardComponentOptions.md#styles)\n\n## Methods\n\n### onChange\n\n▸ **onChange**(`state`, `component`): `void`\n\nCalled when the shopper enters data in the card input fields.\r\nHere you have the option to override your main Adyen Checkout configuration.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AdyenComponentEventState`](../README.md#adyencomponenteventstate) |\n| `component` | [`AdyenComponent`](AdyenComponent.md) |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenComponentEvents](AdyenComponentEvents.md).[onChange](AdyenComponentEvents.md#onchange)\n\n___\n\n### onError\n\n▸ **onError**(`state`, `component`): `void`\n\nCalled in case of an invalid card number, invalid expiry date, or\r\n incomplete field. Called again when errors are cleared.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AdyenValidationState`](AdyenValidationState.md) |\n| `component` | [`AdyenComponent`](AdyenComponent.md) |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenComponentEvents](AdyenComponentEvents.md).[onError](AdyenComponentEvents.md#onerror)\n\n___\n\n### onFieldValid\n\n▸ **onFieldValid**(`state`, `component`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AdyenValidationState`](AdyenValidationState.md) |\n| `component` | [`AdyenComponent`](AdyenComponent.md) |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenComponentEvents](AdyenComponentEvents.md).[onFieldValid](AdyenComponentEvents.md#onfieldvalid)\n\n___\n\n### onSubmit\n\n▸ **onSubmit**(`state`, `component`): `void`\n\nCalled when the shopper selects the Pay button and payment details are valid.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `state` | [`AdyenComponentEventState`](../README.md#adyencomponenteventstate) |\n| `component` | [`AdyenComponent`](AdyenComponent.md) |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenComponentEvents](AdyenComponentEvents.md).[onSubmit](AdyenComponentEvents.md#onsubmit)\n"
  },
  {
    "path": "docs/interfaces/AdyenPaymentMethodState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenPaymentMethodState\n\n# Interface: AdyenPaymentMethodState\n\n## Hierarchy\n\n- **`AdyenPaymentMethodState`**\n\n  ↳ [`CardPaymentMethodState`](CardPaymentMethodState.md)\n\n## Table of contents\n\n### Properties\n\n- [type](AdyenPaymentMethodState.md#type)\n\n## Properties\n\n### type\n\n• **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/AdyenPlaceholderData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenPlaceholderData\n\n# Interface: AdyenPlaceholderData\n\n## Table of contents\n\n### Properties\n\n- [billingAddress](AdyenPlaceholderData.md#billingaddress)\n- [firstName](AdyenPlaceholderData.md#firstname)\n- [holderName](AdyenPlaceholderData.md#holdername)\n- [lastName](AdyenPlaceholderData.md#lastname)\n- [prefillCardHolderName](AdyenPlaceholderData.md#prefillcardholdername)\n\n## Properties\n\n### billingAddress\n\n• `Optional` **billingAddress**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `city` | `string` |\n| `country` | `string` |\n| `houseNumberOrName` | `string` |\n| `postalCode` | `string` |\n| `stateOrProvince` | `string` |\n| `street` | `string` |\n\n___\n\n### firstName\n\n• `Optional` **firstName**: `string`\n\n___\n\n### holderName\n\n• `Optional` **holderName**: `string`\n\n___\n\n### lastName\n\n• `Optional` **lastName**: `string`\n\n___\n\n### prefillCardHolderName\n\n• `Optional` **prefillCardHolderName**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/AdyenThreeDS2Options.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenThreeDS2Options\n\n# Interface: AdyenThreeDS2Options\n\n## Hierarchy\n\n- [`AdyenAdditionalActionCallbacks`](AdyenAdditionalActionCallbacks.md)\n\n  ↳ **`AdyenThreeDS2Options`**\n\n## Table of contents\n\n### Properties\n\n- [widgetSize](AdyenThreeDS2Options.md#widgetsize)\n\n### Methods\n\n- [onActionHandled](AdyenThreeDS2Options.md#onactionhandled)\n- [onBeforeLoad](AdyenThreeDS2Options.md#onbeforeload)\n- [onComplete](AdyenThreeDS2Options.md#oncomplete)\n- [onLoad](AdyenThreeDS2Options.md#onload)\n\n## Properties\n\n### widgetSize\n\n• `Optional` **widgetSize**: `string`\n\nSpecify Three3DS2Challenge Widget Size\n\nValues\r\n'01' = 250px x 400px\r\n'02' = 390px x 400px\r\n'03' = 500px x 600px\r\n'04' = 600px x 400px\r\n'05' = 100% x 100%\n\n## Methods\n\n### onActionHandled\n\n▸ **onActionHandled**(): `void`\n\nA callback that gets called when an action, for example a QR code or 3D Secure 2 authentication screen, is shown to the shopper\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenAdditionalActionCallbacks](AdyenAdditionalActionCallbacks.md).[onActionHandled](AdyenAdditionalActionCallbacks.md#onactionhandled)\n\n___\n\n### onBeforeLoad\n\n▸ **onBeforeLoad**(`shopperInteraction?`): `void`\n\nA callback that gets called before adyen component is loaded\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `shopperInteraction?` | `boolean` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenAdditionalActionCallbacks](AdyenAdditionalActionCallbacks.md).[onBeforeLoad](AdyenAdditionalActionCallbacks.md#onbeforeload)\n\n___\n\n### onComplete\n\n▸ **onComplete**(): `void`\n\nA callback that gets called when adyen component verification\r\nis completed\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenAdditionalActionCallbacks](AdyenAdditionalActionCallbacks.md).[onComplete](AdyenAdditionalActionCallbacks.md#oncomplete)\n\n___\n\n### onLoad\n\n▸ **onLoad**(`cancel?`): `void`\n\nA callback that gets called when adyen component is loaded\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `cancel?` | () => `void` |\n\n#### Returns\n\n`void`\n\n#### Inherited from\n\n[AdyenAdditionalActionCallbacks](AdyenAdditionalActionCallbacks.md).[onLoad](AdyenAdditionalActionCallbacks.md#onload)\n"
  },
  {
    "path": "docs/interfaces/AdyenV2PaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenV2PaymentInitializeOptions\n\n# Interface: AdyenV2PaymentInitializeOptions\n\nA set of options that are required to initialize the AdyenV2 payment method.\n\nOnce AdyenV2 payment is initialized, credit card form fields, provided by the\r\npayment provider as IFrames, will be inserted into the current page. These\r\noptions provide a location and styling for each of the form fields.\n\n```html\r\n<!-- This is where the credit card component will be inserted -->\r\n<div id=\"container\"></div>\n\n<!-- This is where the secondary components (i.e.: 3DS) will be inserted -->\r\n<div id=\"additional-action-container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'adyenv2',\r\n    adyenv2: {\r\n        containerId: 'container',\r\n        additionalActionOptions: {\r\n            containerId: 'additional-action-container',\r\n        },\r\n    },\r\n});\r\n```\n\nAdditional options can be passed in to customize the components and register\r\nevent callbacks.\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'adyenv2',\r\n    adyenv2: {\r\n        containerId: 'container',\r\n        additionalActionOptions: {\r\n            containerId: 'additional-action-container',\r\n            onBeforeLoad(shopperInteraction) {\r\n                console.log(shopperInteraction);\r\n            },\r\n            onLoad(cancel) {\r\n                console.log(cancel);\r\n            },\r\n            onComplete() {\r\n                console.log('Completed');\r\n            },\r\n        },\r\n        options: {\r\n            scheme: {\r\n                hasHolderName: true,\r\n            },\r\n            bcmc: {\r\n                hasHolderName: true,\r\n            },\r\n            ideal: {\r\n                showImage: true,\r\n            },\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [additionalActionOptions](AdyenV2PaymentInitializeOptions.md#additionalactionoptions)\n- [cardVerificationContainerId](AdyenV2PaymentInitializeOptions.md#cardverificationcontainerid)\n- [containerId](AdyenV2PaymentInitializeOptions.md#containerid)\n- [hasVaultedInstruments](AdyenV2PaymentInitializeOptions.md#hasvaultedinstruments)\n- [options](AdyenV2PaymentInitializeOptions.md#options)\n- [shouldShowNumberField](AdyenV2PaymentInitializeOptions.md#shouldshownumberfield)\n- [threeDS2ContainerId](AdyenV2PaymentInitializeOptions.md#threeds2containerid)\n- [threeDS2Options](AdyenV2PaymentInitializeOptions.md#threeds2options)\n\n### Methods\n\n- [validateCardFields](AdyenV2PaymentInitializeOptions.md#validatecardfields)\n\n## Properties\n\n### additionalActionOptions\n\n• **additionalActionOptions**: [`AdyenAdditionalActionOptions`](AdyenAdditionalActionOptions.md)\n\nA set of options that are required to initialize additional payment actions.\n\n___\n\n### cardVerificationContainerId\n\n• `Optional` **cardVerificationContainerId**: `string`\n\nThe location to insert the Adyen custom card component\n\n___\n\n### containerId\n\n• **containerId**: `string`\n\nThe location to insert the Adyen component.\n\n___\n\n### hasVaultedInstruments\n\n• `Optional` **hasVaultedInstruments**: `boolean`\n\nTrue if the Adyen component has some Vaulted instrument\n\n___\n\n### options\n\n• `Optional` **options**: [`AdyenIdealComponentOptions`](AdyenIdealComponentOptions.md) \\| `Omit`\\<[`AdyenCreditCardComponentOptions`](AdyenCreditCardComponentOptions.md), ``\"onChange\"``\\>\n\nOptional. Overwriting the default options\n\n___\n\n### shouldShowNumberField\n\n• `Optional` **shouldShowNumberField**: `boolean`\n\n___\n\n### threeDS2ContainerId\n\n• **threeDS2ContainerId**: `string`\n\n**`Deprecated`**\n\nThe location to insert the Adyen 3DS V2 component.\r\nUse additionalActionOptions instead as this property will be removed in the future\n\n___\n\n### threeDS2Options\n\n• `Optional` **threeDS2Options**: [`AdyenThreeDS2Options`](AdyenThreeDS2Options.md)\n\n**`Deprecated`**\n\nUse additionalActionOptions instead as this property will be removed in the future\n\n## Methods\n\n### validateCardFields\n\n▸ **validateCardFields**(`validateState`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `validateState` | [`AdyenValidationState`](AdyenValidationState.md) |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/AdyenV3PaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenV3PaymentInitializeOptions\n\n# Interface: AdyenV3PaymentInitializeOptions\n\nA set of options that are required to initialize the Adyenv3 payment method.\n\nOnce Adyenv3 payment is initialized, credit card form fields, provided by the\r\npayment provider as IFrames, will be inserted into the current page. These\r\noptions provide a location and styling for each of the form fields.\n\n```html\r\n<!-- This is where the credit card component will be inserted -->\r\n<div id=\"container\"></div>\n\n<!-- This is where the secondary components (i.e.: 3DS) will be inserted -->\r\n<div id=\"additional-action-container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'adyenv3',\r\n    adyenv3: {\r\n        containerId: 'container',\r\n        additionalActionOptions: {\r\n            containerId: 'additional-action-container',\r\n        },\r\n    },\r\n});\r\n```\n\nAdditional options can be passed in to customize the components and register\r\nevent callbacks.\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'adyenv3',\r\n    adyenv3: {\r\n        containerId: 'container',\r\n        additionalActionOptions: {\r\n            containerId: 'additional-action-container',\r\n            onBeforeLoad(shopperInteraction) {\r\n                console.log(shopperInteraction);\r\n            },\r\n            onLoad(cancel) {\r\n                console.log(cancel);\r\n            },\r\n            onComplete() {\r\n                console.log('Completed');\r\n            },\r\n            onActionHandled() {\r\n                console.log('ActionHandled');\r\n            },\r\n        },\r\n        options: {\r\n            scheme: {\r\n                hasHolderName: true,\r\n            },\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [additionalActionOptions](AdyenV3PaymentInitializeOptions.md#additionalactionoptions)\n- [cardVerificationContainerId](AdyenV3PaymentInitializeOptions.md#cardverificationcontainerid)\n- [containerId](AdyenV3PaymentInitializeOptions.md#containerid)\n- [hasVaultedInstruments](AdyenV3PaymentInitializeOptions.md#hasvaultedinstruments)\n- [options](AdyenV3PaymentInitializeOptions.md#options)\n- [shouldShowNumberField](AdyenV3PaymentInitializeOptions.md#shouldshownumberfield)\n\n### Methods\n\n- [validateCardFields](AdyenV3PaymentInitializeOptions.md#validatecardfields)\n\n## Properties\n\n### additionalActionOptions\n\n• **additionalActionOptions**: [`AdyenAdditionalActionOptions`](AdyenAdditionalActionOptions.md)\n\nA set of options that are required to initialize additional payment actions.\n\n___\n\n### cardVerificationContainerId\n\n• `Optional` **cardVerificationContainerId**: `string`\n\nThe location to insert the Adyen custom card component\n\n___\n\n### containerId\n\n• **containerId**: `string`\n\nThe location to insert the Adyen component.\n\n___\n\n### hasVaultedInstruments\n\n• `Optional` **hasVaultedInstruments**: `boolean`\n\nTrue if the Adyen component has some Vaulted instrument\n\n___\n\n### options\n\n• `Optional` **options**: `Omit`\\<[`AdyenCreditCardComponentOptions`](AdyenCreditCardComponentOptions.md), ``\"onChange\"``\\>\n\nOptional. Overwriting the default options\n\n___\n\n### shouldShowNumberField\n\n• `Optional` **shouldShowNumberField**: `boolean`\n\n## Methods\n\n### validateCardFields\n\n▸ **validateCardFields**(`validateState`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `validateState` | [`AdyenValidationState`](AdyenValidationState.md) |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/AdyenValidationState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AdyenValidationState\n\n# Interface: AdyenValidationState\n\n## Table of contents\n\n### Properties\n\n- [encryptedFieldName](AdyenValidationState.md#encryptedfieldname)\n- [endDigits](AdyenValidationState.md#enddigits)\n- [error](AdyenValidationState.md#error)\n- [errorKey](AdyenValidationState.md#errorkey)\n- [fieldType](AdyenValidationState.md#fieldtype)\n- [i18n](AdyenValidationState.md#i18n)\n- [valid](AdyenValidationState.md#valid)\n\n## Properties\n\n### encryptedFieldName\n\n• `Optional` **encryptedFieldName**: `string`\n\n___\n\n### endDigits\n\n• `Optional` **endDigits**: `string`\n\n___\n\n### error\n\n• `Optional` **error**: `string`\n\n___\n\n### errorKey\n\n• `Optional` **errorKey**: `string`\n\n___\n\n### fieldType\n\n• `Optional` **fieldType**: [`AdyenCardFields`](../enums/AdyenCardFields.md)\n\n___\n\n### i18n\n\n• `Optional` **i18n**: `string`\n\n___\n\n### valid\n\n• **valid**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/AmazonPayRemoteCheckout.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AmazonPayRemoteCheckout\n\n# Interface: AmazonPayRemoteCheckout\n\n## Table of contents\n\n### Properties\n\n- [billing](AmazonPayRemoteCheckout.md#billing)\n- [referenceId](AmazonPayRemoteCheckout.md#referenceid)\n- [settings](AmazonPayRemoteCheckout.md#settings)\n- [shipping](AmazonPayRemoteCheckout.md#shipping)\n\n## Properties\n\n### billing\n\n• `Optional` **billing**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `address?` | ``false`` \\| [`InternalAddress`](InternalAddress.md)\\<`string`\\> |\n\n___\n\n### referenceId\n\n• `Optional` **referenceId**: `string`\n\n___\n\n### settings\n\n• `Optional` **settings**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `billing` | `string` |\n| `billingMessage` | `string` |\n| `customer` | `string` |\n| `payment` | `string` |\n| `provider` | `string` |\n| `shipping` | `string` |\n\n___\n\n### shipping\n\n• `Optional` **shipping**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `address?` | ``false`` \\| [`InternalAddress`](InternalAddress.md)\\<`string`\\> |\n"
  },
  {
    "path": "docs/interfaces/AmazonPayV2CustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AmazonPayV2CustomerInitializeOptions\n\n# Interface: AmazonPayV2CustomerInitializeOptions\n\nA set of options that are required to initialize the customer step of\r\ncheckout in order to support AmazonPayV2.\n\nWhen AmazonPayV2 is initialized, a sign-in button will be inserted into the\r\nDOM. When the customer clicks on it, they will be redirected to Amazon to\r\nsign in.\n\n```html\r\n<!-- This is where the Amazon Pay button will be inserted -->\r\n<div id=\"signInButton\"></div>\r\n```\n\n```js\r\nservice.initializeCustomer({\r\n    methodId: 'amazonpay',\r\n    amazonpay: {\r\n        container: 'signInButton',\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [container](AmazonPayV2CustomerInitializeOptions.md#container)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe ID of a container which the sign-in button should insert into.\n"
  },
  {
    "path": "docs/interfaces/AmazonPayV2PaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AmazonPayV2PaymentInitializeOptions\n\n# Interface: AmazonPayV2PaymentInitializeOptions\n\nA set of options that are required to initialize the payment step of\r\ncheckout in order to support AmazonPayV2.\n\nWhen AmazonPayV2 is initialized, a change payment button will be bound.\r\nWhen the customer clicks on it, they will be redirected to Amazon to\r\nselect a different payment method.\n\n```html\r\n<!-- This is the change payment button that will be bound -->\r\n<button id=\"edit-button\">Change card</button>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'amazonpay',\r\n    amazonpay: {\r\n        editButtonId: 'edit-button',\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [editButtonId](AmazonPayV2PaymentInitializeOptions.md#editbuttonid)\n\n## Properties\n\n### editButtonId\n\n• `Optional` **editButtonId**: `string`\n\nThis editButtonId is used to set an event listener, provide an element ID\r\nif you want users to be able to select a different payment method by\r\nclicking on a button. It should be an HTML element.\n"
  },
  {
    "path": "docs/interfaces/AmazonPayV2ShippingInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / AmazonPayV2ShippingInitializeOptions\n\n# Interface: AmazonPayV2ShippingInitializeOptions\n\nA set of options that are required to initialize the shipping step of\r\ncheckout in order to support AmazonPayV2.\n\nWhen AmazonPayV2 is initialized, a change shipping button will be bound.\r\nWhen the customer clicks on it, they will be redirected to Amazon to\r\nselect a different shipping address.\n\n```html\r\n<!-- This is the change shipping button that will be bound -->\r\n<button id=\"edit-button\">Change shipping</button>\r\n```\n\n```js\r\nservice.initializeShipping({\r\n    methodId: 'amazonpay',\r\n    amazonpay: {\r\n        editAddressButtonId: 'edit-button',\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [editAddressButtonId](AmazonPayV2ShippingInitializeOptions.md#editaddressbuttonid)\n\n## Properties\n\n### editAddressButtonId\n\n• `Optional` **editAddressButtonId**: `string`\n\nThis editAddressButtonId is used to set an event listener, provide an\r\nelement ID if you want users to be able to select a different shipping\r\naddress by clicking on a button. It should be an HTML element.\n"
  },
  {
    "path": "docs/interfaces/ApplePayButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ApplePayButtonInitializeOptions\n\n# Interface: ApplePayButtonInitializeOptions\n\nA set of options that are required to initialize ApplePay in cart.\n\nWhen ApplePay is initialized, an ApplePay button will be inserted into the\r\nDOM. When a customer clicks on it, it will trigger Apple sheet.\n\n## Table of contents\n\n### Properties\n\n- [buyNowInitializeOptions](ApplePayButtonInitializeOptions.md#buynowinitializeoptions)\n- [requiresShipping](ApplePayButtonInitializeOptions.md#requiresshipping)\n\n### Methods\n\n- [onPaymentAuthorize](ApplePayButtonInitializeOptions.md#onpaymentauthorize)\n\n## Properties\n\n### buyNowInitializeOptions\n\n• `Optional` **buyNowInitializeOptions**: `Object`\n\nThe options that are required to initialize Buy Now functionality.\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `getBuyNowCartRequestBody?` | () => `void` \\| `default` |\n\n___\n\n### requiresShipping\n\n• `Optional` **requiresShipping**: `boolean`\n\nThis option indicates if product requires shipping\n\n## Methods\n\n### onPaymentAuthorize\n\n▸ **onPaymentAuthorize**(): `void`\n\nA callback that gets called when a payment is successfully completed.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/ApplePayCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ApplePayCustomerInitializeOptions\n\n# Interface: ApplePayCustomerInitializeOptions\n\nA set of options that are required to initialize the customer step of\r\ncheckout in order to support ApplePay.\n\nWhen ApplePay is initialized, a sign-in button will be inserted into the\r\nDOM. When the customer clicks on it, it will trigger apple sheet\n\n## Table of contents\n\n### Properties\n\n- [container](ApplePayCustomerInitializeOptions.md#container)\n- [shippingLabel](ApplePayCustomerInitializeOptions.md#shippinglabel)\n- [subtotalLabel](ApplePayCustomerInitializeOptions.md#subtotallabel)\n\n### Methods\n\n- [onClick](ApplePayCustomerInitializeOptions.md#onclick)\n- [onError](ApplePayCustomerInitializeOptions.md#onerror)\n- [onPaymentAuthorize](ApplePayCustomerInitializeOptions.md#onpaymentauthorize)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe ID of a container which the sign-in button should insert into.\n\n___\n\n### shippingLabel\n\n• `Optional` **shippingLabel**: `string`\n\nShipping label to be passed to apple sheet.\n\n___\n\n### subtotalLabel\n\n• `Optional` **subtotalLabel**: `string`\n\nSub total label to be passed to apple sheet.\n\n## Methods\n\n### onClick\n\n▸ **onClick**(): `void`\n\nA callback that gets called when wallet button clicked\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error?`): `void`\n\nA callback that gets called if unable to initialize the widget or select\r\none of the address options provided by the widget.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error?` | `Error` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n\n___\n\n### onPaymentAuthorize\n\n▸ **onPaymentAuthorize**(): `void`\n\nA callback that gets called when a payment is successfully completed.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/ApplePayPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ApplePayPaymentInitializeOptions\n\n# Interface: ApplePayPaymentInitializeOptions\n\nA set of options that are required to initialize the Applepay payment method with:\n\n1) ApplePay:\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'applepay',\r\n    applepay: {\r\n        shippingLabel: 'Shipping',\r\n        subtotalLabel: 'Sub total',\r\n    }\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [shippingLabel](ApplePayPaymentInitializeOptions.md#shippinglabel)\n- [storeCreditLabel](ApplePayPaymentInitializeOptions.md#storecreditlabel)\n- [subtotalLabel](ApplePayPaymentInitializeOptions.md#subtotallabel)\n\n## Properties\n\n### shippingLabel\n\n• `Optional` **shippingLabel**: `string`\n\nShipping label to be passed to apple sheet.\n\n___\n\n### storeCreditLabel\n\n• `Optional` **storeCreditLabel**: `string`\n\nStore credit label to be passed to apple sheet.\n\n___\n\n### subtotalLabel\n\n• `Optional` **subtotalLabel**: `string`\n\nSub total label to be passed to apple sheet.\n"
  },
  {
    "path": "docs/interfaces/B2BApiSettings.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / B2BApiSettings\n\n# Interface: B2BApiSettings\n\n## Table of contents\n\n### Properties\n\n- [baseUrl](B2BApiSettings.md#baseurl)\n- [clientId](B2BApiSettings.md#clientid)\n\n## Properties\n\n### baseUrl\n\n• **baseUrl**: `string`\n\n___\n\n### clientId\n\n• **clientId**: `string`\n"
  },
  {
    "path": "docs/interfaces/B2BTokenSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / B2BTokenSelector\n\n# Interface: B2BTokenSelector\n\n## Table of contents\n\n### Methods\n\n- [getLoadError](B2BTokenSelector.md#getloaderror)\n- [getToken](B2BTokenSelector.md#gettoken)\n- [isLoading](B2BTokenSelector.md#isloading)\n\n## Methods\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getToken\n\n▸ **getToken**(): `undefined` \\| `string`\n\n#### Returns\n\n`undefined` \\| `string`\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/BankInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BankInstrument\n\n# Interface: BankInstrument\n\n## Hierarchy\n\n- [`BaseAccountInstrument`](BaseAccountInstrument.md)\n\n  ↳ **`BankInstrument`**\n\n## Table of contents\n\n### Properties\n\n- [accountNumber](BankInstrument.md#accountnumber)\n- [bigpayToken](BankInstrument.md#bigpaytoken)\n- [defaultInstrument](BankInstrument.md#defaultinstrument)\n- [iban](BankInstrument.md#iban)\n- [issuer](BankInstrument.md#issuer)\n- [method](BankInstrument.md#method)\n- [provider](BankInstrument.md#provider)\n- [trustedShippingAddress](BankInstrument.md#trustedshippingaddress)\n- [type](BankInstrument.md#type)\n\n## Properties\n\n### accountNumber\n\n• **accountNumber**: `string`\n\n___\n\n### bigpayToken\n\n• **bigpayToken**: `string`\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[bigpayToken](BaseAccountInstrument.md#bigpaytoken)\n\n___\n\n### defaultInstrument\n\n• **defaultInstrument**: `boolean`\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[defaultInstrument](BaseAccountInstrument.md#defaultinstrument)\n\n___\n\n### iban\n\n• **iban**: `string`\n\n___\n\n### issuer\n\n• **issuer**: `string`\n\n___\n\n### method\n\n• **method**: `string`\n\n#### Overrides\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[method](BaseAccountInstrument.md#method)\n\n___\n\n### provider\n\n• **provider**: `string`\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[provider](BaseAccountInstrument.md#provider)\n\n___\n\n### trustedShippingAddress\n\n• **trustedShippingAddress**: `boolean`\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[trustedShippingAddress](BaseAccountInstrument.md#trustedshippingaddress)\n\n___\n\n### type\n\n• **type**: ``\"bank\"``\n\n#### Overrides\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[type](BaseAccountInstrument.md#type)\n"
  },
  {
    "path": "docs/interfaces/Banner.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Banner\n\n# Interface: Banner\n\n## Table of contents\n\n### Properties\n\n- [text](Banner.md#text)\n- [type](Banner.md#type)\n\n## Properties\n\n### text\n\n• **text**: `string`\n\n___\n\n### type\n\n• **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/BaseAccountInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BaseAccountInstrument\n\n# Interface: BaseAccountInstrument\n\n## Hierarchy\n\n- [`BaseInstrument`](BaseInstrument.md)\n\n  ↳ **`BaseAccountInstrument`**\n\n  ↳↳ [`AchInstrument`](AchInstrument.md)\n\n  ↳↳ [`BankInstrument`](BankInstrument.md)\n\n  ↳↳ [`PayPalInstrument`](PayPalInstrument.md)\n\n## Table of contents\n\n### Properties\n\n- [bigpayToken](BaseAccountInstrument.md#bigpaytoken)\n- [defaultInstrument](BaseAccountInstrument.md#defaultinstrument)\n- [method](BaseAccountInstrument.md#method)\n- [provider](BaseAccountInstrument.md#provider)\n- [trustedShippingAddress](BaseAccountInstrument.md#trustedshippingaddress)\n- [type](BaseAccountInstrument.md#type)\n\n## Properties\n\n### bigpayToken\n\n• **bigpayToken**: `string`\n\n#### Inherited from\n\n[BaseInstrument](BaseInstrument.md).[bigpayToken](BaseInstrument.md#bigpaytoken)\n\n___\n\n### defaultInstrument\n\n• **defaultInstrument**: `boolean`\n\n#### Inherited from\n\n[BaseInstrument](BaseInstrument.md).[defaultInstrument](BaseInstrument.md#defaultinstrument)\n\n___\n\n### method\n\n• **method**: `string`\n\n#### Overrides\n\n[BaseInstrument](BaseInstrument.md).[method](BaseInstrument.md#method)\n\n___\n\n### provider\n\n• **provider**: `string`\n\n#### Inherited from\n\n[BaseInstrument](BaseInstrument.md).[provider](BaseInstrument.md#provider)\n\n___\n\n### trustedShippingAddress\n\n• **trustedShippingAddress**: `boolean`\n\n#### Inherited from\n\n[BaseInstrument](BaseInstrument.md).[trustedShippingAddress](BaseInstrument.md#trustedshippingaddress)\n\n___\n\n### type\n\n• **type**: ``\"account\"`` \\| ``\"bank\"``\n\n#### Overrides\n\n[BaseInstrument](BaseInstrument.md).[type](BaseInstrument.md#type)\n"
  },
  {
    "path": "docs/interfaces/BaseCheckoutButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BaseCheckoutButtonInitializeOptions\n\n# Interface: BaseCheckoutButtonInitializeOptions\n\nThe set of options for configuring the checkout button.\n\n## Hierarchy\n\n- [`CheckoutButtonOptions`](CheckoutButtonOptions.md)\n\n  ↳ **`BaseCheckoutButtonInitializeOptions`**\n\n## Indexable\n\n▪ [key: `string`]: `unknown`\n\n## Table of contents\n\n### Properties\n\n- [containerId](BaseCheckoutButtonInitializeOptions.md#containerid)\n- [currencyCode](BaseCheckoutButtonInitializeOptions.md#currencycode)\n- [methodId](BaseCheckoutButtonInitializeOptions.md#methodid)\n- [params](BaseCheckoutButtonInitializeOptions.md#params)\n- [paypal](BaseCheckoutButtonInitializeOptions.md#paypal)\n- [timeout](BaseCheckoutButtonInitializeOptions.md#timeout)\n- [version](BaseCheckoutButtonInitializeOptions.md#version)\n\n## Properties\n\n### containerId\n\n• **containerId**: `string`\n\nThe ID of a container which the checkout button should be inserted.\n\n___\n\n### currencyCode\n\n• `Optional` **currencyCode**: `string`\n\nThe option that is required to load payment method configuration for provided currency code in Buy Now flow.\n\n___\n\n### methodId\n\n• **methodId**: [`CheckoutButtonMethodType`](../enums/CheckoutButtonMethodType.md)\n\nThe identifier of the payment method.\n\n#### Inherited from\n\n[CheckoutButtonOptions](CheckoutButtonOptions.md).[methodId](CheckoutButtonOptions.md#methodid)\n\n___\n\n### params\n\n• `Optional` **params**: `object`\n\nThe parameters of the request, if required.\n\n#### Inherited from\n\n[CheckoutButtonOptions](CheckoutButtonOptions.md).[params](CheckoutButtonOptions.md#params)\n\n___\n\n### paypal\n\n• `Optional` **paypal**: [`PaypalButtonInitializeOptions`](PaypalButtonInitializeOptions.md)\n\nThe options that are required to facilitate PayPal. They can be omitted\r\nunless you need to support Paypal.\n\n___\n\n### timeout\n\n• `Optional` **timeout**: `default`\n\nProvide this option if you want to cancel or time out the request. If the\r\ntimeout object completes before the request, the request will be\r\ncancelled.\n\n#### Inherited from\n\n[CheckoutButtonOptions](CheckoutButtonOptions.md).[timeout](CheckoutButtonOptions.md#timeout)\n\n___\n\n### version\n\n• `Optional` **version**: `number`\n\nThe version of the checkout, used for optimistic concurrency control.\n\n#### Inherited from\n\n[CheckoutButtonOptions](CheckoutButtonOptions.md).[version](CheckoutButtonOptions.md#version)\n"
  },
  {
    "path": "docs/interfaces/BaseCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BaseCustomerInitializeOptions\n\n# Interface: BaseCustomerInitializeOptions\n\nA set of options that are required to initialize the customer step of the\r\ncurrent checkout flow.\n\nSome payment methods have specific requirements for setting the customer\r\ndetails for checkout. For example, Amazon Pay requires the customer to sign in\r\nusing their sign-in button. As a result, you may need to provide additional\r\ninformation in order to initialize the customer step of checkout.\n\n## Hierarchy\n\n- [`CustomerRequestOptions`](CustomerRequestOptions.md)\n\n  ↳ **`BaseCustomerInitializeOptions`**\n\n## Indexable\n\n▪ [key: `string`]: `unknown`\n\n## Table of contents\n\n### Properties\n\n- [integrations](BaseCustomerInitializeOptions.md#integrations)\n- [methodId](BaseCustomerInitializeOptions.md#methodid)\n- [params](BaseCustomerInitializeOptions.md#params)\n- [timeout](BaseCustomerInitializeOptions.md#timeout)\n- [version](BaseCustomerInitializeOptions.md#version)\n\n## Properties\n\n### integrations\n\n• `Optional` **integrations**: `CustomerStrategyFactory`\\<`default`\\>[]\n\n___\n\n### methodId\n\n• `Optional` **methodId**: `string`\n\n#### Inherited from\n\n[CustomerRequestOptions](CustomerRequestOptions.md).[methodId](CustomerRequestOptions.md#methodid)\n\n___\n\n### params\n\n• `Optional` **params**: `object`\n\nThe parameters of the request, if required.\n\n#### Inherited from\n\n[CustomerRequestOptions](CustomerRequestOptions.md).[params](CustomerRequestOptions.md#params)\n\n___\n\n### timeout\n\n• `Optional` **timeout**: `default`\n\nProvide this option if you want to cancel or time out the request. If the\r\ntimeout object completes before the request, the request will be\r\ncancelled.\n\n#### Inherited from\n\n[CustomerRequestOptions](CustomerRequestOptions.md).[timeout](CustomerRequestOptions.md#timeout)\n\n___\n\n### version\n\n• `Optional` **version**: `number`\n\nThe version of the checkout, used for optimistic concurrency control.\n\n#### Inherited from\n\n[CustomerRequestOptions](CustomerRequestOptions.md).[version](CustomerRequestOptions.md#version)\n"
  },
  {
    "path": "docs/interfaces/BaseElementOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BaseElementOptions\n\n# Interface: BaseElementOptions\n\n## Hierarchy\n\n- **`BaseElementOptions`**\n\n  ↳ [`BaseIndividualElementOptions`](BaseIndividualElementOptions.md)\n\n  ↳ [`CardElementOptions`](CardElementOptions.md)\n\n  ↳ [`IbanElementOptions`](IbanElementOptions.md)\n\n  ↳ [`IdealElementOptions`](IdealElementOptions.md)\n\n## Table of contents\n\n### Properties\n\n- [classes](BaseElementOptions.md#classes)\n- [disabled](BaseElementOptions.md#disabled)\n- [style](BaseElementOptions.md#style)\n\n## Properties\n\n### classes\n\n• `Optional` **classes**: [`StripeElementClasses`](StripeElementClasses.md)\n\nSet custom class names on the container DOM element when the Stripe element is in a particular state.\n\n___\n\n### disabled\n\n• `Optional` **disabled**: `boolean`\n\nApplies a disabled state to the Element such that user input is not accepted. Default is false.\n\n___\n\n### style\n\n• `Optional` **style**: [`StripeElementStyle`](StripeElementStyle.md)\n\nCustomize the appearance of an element using CSS properties passed in a [Style](https://stripe.com/docs/js/appendix/style) object,\r\nwhich consists of CSS properties nested under objects for each variant.\n"
  },
  {
    "path": "docs/interfaces/BaseIndividualElementOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BaseIndividualElementOptions\n\n# Interface: BaseIndividualElementOptions\n\n## Hierarchy\n\n- [`BaseElementOptions`](BaseElementOptions.md)\n\n  ↳ **`BaseIndividualElementOptions`**\n\n  ↳↳ [`CardCvcElementOptions`](CardCvcElementOptions.md)\n\n  ↳↳ [`CardExpiryElementOptions`](CardExpiryElementOptions.md)\n\n  ↳↳ [`CardNumberElementOptions`](CardNumberElementOptions.md)\n\n## Table of contents\n\n### Properties\n\n- [classes](BaseIndividualElementOptions.md#classes)\n- [containerId](BaseIndividualElementOptions.md#containerid)\n- [disabled](BaseIndividualElementOptions.md#disabled)\n- [style](BaseIndividualElementOptions.md#style)\n\n## Properties\n\n### classes\n\n• `Optional` **classes**: [`StripeElementClasses`](StripeElementClasses.md)\n\nSet custom class names on the container DOM element when the Stripe element is in a particular state.\n\n#### Inherited from\n\n[BaseElementOptions](BaseElementOptions.md).[classes](BaseElementOptions.md#classes)\n\n___\n\n### containerId\n\n• **containerId**: `string`\n\n___\n\n### disabled\n\n• `Optional` **disabled**: `boolean`\n\nApplies a disabled state to the Element such that user input is not accepted. Default is false.\n\n#### Inherited from\n\n[BaseElementOptions](BaseElementOptions.md).[disabled](BaseElementOptions.md#disabled)\n\n___\n\n### style\n\n• `Optional` **style**: [`StripeElementStyle`](StripeElementStyle.md)\n\nCustomize the appearance of an element using CSS properties passed in a [Style](https://stripe.com/docs/js/appendix/style) object,\r\nwhich consists of CSS properties nested under objects for each variant.\n\n#### Inherited from\n\n[BaseElementOptions](BaseElementOptions.md).[style](BaseElementOptions.md#style)\n"
  },
  {
    "path": "docs/interfaces/BaseInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BaseInstrument\n\n# Interface: BaseInstrument\n\n## Hierarchy\n\n- **`BaseInstrument`**\n\n  ↳ [`BaseAccountInstrument`](BaseAccountInstrument.md)\n\n  ↳ [`CardInstrument`](CardInstrument.md)\n\n## Table of contents\n\n### Properties\n\n- [bigpayToken](BaseInstrument.md#bigpaytoken)\n- [defaultInstrument](BaseInstrument.md#defaultinstrument)\n- [method](BaseInstrument.md#method)\n- [provider](BaseInstrument.md#provider)\n- [trustedShippingAddress](BaseInstrument.md#trustedshippingaddress)\n- [type](BaseInstrument.md#type)\n\n## Properties\n\n### bigpayToken\n\n• **bigpayToken**: `string`\n\n___\n\n### defaultInstrument\n\n• **defaultInstrument**: `boolean`\n\n___\n\n### method\n\n• **method**: `string`\n\n___\n\n### provider\n\n• **provider**: `string`\n\n___\n\n### trustedShippingAddress\n\n• **trustedShippingAddress**: `boolean`\n\n___\n\n### type\n\n• **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/BasePaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BasePaymentInitializeOptions\n\n# Interface: BasePaymentInitializeOptions\n\nA set of options that are required to initialize the payment step of the\r\ncurrent checkout flow.\n\n## Hierarchy\n\n- [`PaymentRequestOptions`](PaymentRequestOptions.md)\n\n  ↳ **`BasePaymentInitializeOptions`**\n\n## Table of contents\n\n### Properties\n\n- [creditCard](BasePaymentInitializeOptions.md#creditcard)\n- [gatewayId](BasePaymentInitializeOptions.md#gatewayid)\n- [integrations](BasePaymentInitializeOptions.md#integrations)\n- [methodId](BasePaymentInitializeOptions.md#methodid)\n- [params](BasePaymentInitializeOptions.md#params)\n- [timeout](BasePaymentInitializeOptions.md#timeout)\n- [version](BasePaymentInitializeOptions.md#version)\n\n## Properties\n\n### creditCard\n\n• `Optional` **creditCard**: `CreditCardPaymentInitializeOptions`\n\nPlease note that this option is currently in an early stage of\r\ndevelopment. Therefore the API is unstable and not ready for public\r\nconsumption.\n\n___\n\n### gatewayId\n\n• `Optional` **gatewayId**: `string`\n\nThe identifier of the payment provider providing the payment method. This\r\noption is only required if the provider offers multiple payment options.\r\ni.e.: Adyen and Klarna.\n\n#### Inherited from\n\n[PaymentRequestOptions](PaymentRequestOptions.md).[gatewayId](PaymentRequestOptions.md#gatewayid)\n\n___\n\n### integrations\n\n• `Optional` **integrations**: `PaymentStrategyFactory`\\<`default`\\>[]\n\n___\n\n### methodId\n\n• **methodId**: `string`\n\nThe identifier of the payment method.\n\n#### Inherited from\n\n[PaymentRequestOptions](PaymentRequestOptions.md).[methodId](PaymentRequestOptions.md#methodid)\n\n___\n\n### params\n\n• `Optional` **params**: `object`\n\nThe parameters of the request, if required.\n\n#### Inherited from\n\n[PaymentRequestOptions](PaymentRequestOptions.md).[params](PaymentRequestOptions.md#params)\n\n___\n\n### timeout\n\n• `Optional` **timeout**: `default`\n\nProvide this option if you want to cancel or time out the request. If the\r\ntimeout object completes before the request, the request will be\r\ncancelled.\n\n#### Inherited from\n\n[PaymentRequestOptions](PaymentRequestOptions.md).[timeout](PaymentRequestOptions.md#timeout)\n\n___\n\n### version\n\n• `Optional` **version**: `number`\n\nThe version of the checkout, used for optimistic concurrency control.\n\n#### Inherited from\n\n[PaymentRequestOptions](PaymentRequestOptions.md).[version](PaymentRequestOptions.md#version)\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions\n\n# Interface: BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions\n\nA set of options that are required to initialize the BigCommercePayments payment\r\nmethod for presenting its PayPal button.\n\nAlso, BCP (also known as BigCommercePayments) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n```html\r\n<!-- This is where the APM button will be inserted -->\r\n<div id=\"container\"></div>\r\n<!-- This is where the alternative payment methods fields will be inserted.  -->\r\n<div id=\"apm-fields-container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    gatewayId: 'bigcommerce_payments_apms',\r\n    methodId: 'sepa',\r\n    bigcommerce_payments_apms: {\r\n        container: '#container',\r\n        apmFieldsContainer: '#apm-fields-container',\r\n        apmFieldsStyles: {\r\n            base: {\r\n                backgroundColor: 'transparent',\r\n            },\r\n            input: {\r\n                backgroundColor: 'white',\r\n                fontSize: '1rem',\r\n                color: '#333',\r\n                borderColor: '#d9d9d9',\r\n                borderRadius: '4px',\r\n                borderWidth: '1px',\r\n                padding: '1rem',\r\n            },\r\n            invalid: {\r\n                color: '#ed6a6a',\r\n            },\r\n            active: {\r\n                color: '#4496f6',\r\n            },\r\n        },\r\n        clientId: 'YOUR_CLIENT_ID',\r\n// Callback for submitting payment form that gets called when a buyer approves payment\r\n        submitForm: () => {\r\n        // Example function\r\n            this.submitOrder(\r\n               {\r\n                  payment: { methodId: 'bigcommerce_payments_apms', }\r\n              }\r\n           );\r\n        },\r\n// Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n        onValidate: (resolve, reject) => {\r\n        // Example function\r\n            const isValid = this.validatePaymentForm();\r\n            if (isValid) {\r\n                return resolve();\r\n            }\r\n            return reject();\r\n        },\r\n// Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n        onRenderButton: () => {\r\n        // Example function\r\n            this.hidePaymentSubmitButton();\r\n        }\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [apmFieldsContainer](BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md#apmfieldscontainer)\n- [apmFieldsStyles](BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md#apmfieldsstyles)\n- [container](BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md#container)\n\n### Methods\n\n- [onError](BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md#onerror)\n- [onInitButton](BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md#oninitbutton)\n- [onRenderButton](BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md#onrenderbutton)\n- [onValidate](BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md#onvalidate)\n- [submitForm](BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md#submitform)\n\n## Properties\n\n### apmFieldsContainer\n\n• `Optional` **apmFieldsContainer**: `string`\n\nThe CSS selector of a container where the alternative payment methods fields widget should be inserted into.\r\nIt's necessary to specify this parameter when using Alternative Payment Methods.\r\nWithout it alternative payment methods will not work.\n\n___\n\n### apmFieldsStyles\n\n• `Optional` **apmFieldsStyles**: [`BigCommercePaymentsFieldsStyleOptions`](BigCommercePaymentsFieldsStyleOptions.md)\n\nObject with styles to customize alternative payment methods fields.\n\n___\n\n### container\n\n• **container**: `string`\n\nThe CSS selector of a container where the payment widget should be inserted into.\n\n## Methods\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n#### Returns\n\n`void`\n\n___\n\n### onInitButton\n\n▸ **onInitButton**(`actions`): `Promise`\\<`void`\\>\n\nA callback that gets called\r\nwhen Smart Payment Button is initialized.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `actions` | [`InitCallbackActions`](InitCallbackActions.md) |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\n___\n\n### onRenderButton\n\n▸ **onRenderButton**(): `void`\n\nA callback right before render Smart Payment Button that gets called when\r\nSmart Payment Button is eligible. This callback can be used to hide the standard submit button.\n\n#### Returns\n\n`void`\n\n___\n\n### onValidate\n\n▸ **onValidate**(`resolve`, `reject`): `Promise`\\<`void`\\>\n\nA callback that gets called when a buyer click on Smart Payment Button\r\nand should validate payment form.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `resolve` | () => `void` | A function, that gets called if form is valid. |\n| `reject` | () => `void` | A function, that gets called if form is not valid. |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\nreject() or resolve()\n\n___\n\n### submitForm\n\n▸ **submitForm**(): `void`\n\nA callback for submitting payment form that gets called\r\nwhen buyer approved PayPal account.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsButtonInitializeOptions\n\n# Interface: BigCommercePaymentsButtonInitializeOptions\n\nA set of options that are required to initialize BigCommercePaymentsButtonStrategy in cart or product details page.\n\nWhen BigCommercePayments is initialized, an BigCommercePayments PayPal button will be inserted into the\r\nDOM. When a customer clicks on it, it will trigger PayPal flow.\n\n## Table of contents\n\n### Properties\n\n- [buyNowInitializeOptions](BigCommercePaymentsButtonInitializeOptions.md#buynowinitializeoptions)\n- [currencyCode](BigCommercePaymentsButtonInitializeOptions.md#currencycode)\n- [style](BigCommercePaymentsButtonInitializeOptions.md#style)\n\n### Methods\n\n- [onComplete](BigCommercePaymentsButtonInitializeOptions.md#oncomplete)\n- [onEligibilityFailure](BigCommercePaymentsButtonInitializeOptions.md#oneligibilityfailure)\n\n## Properties\n\n### buyNowInitializeOptions\n\n• `Optional` **buyNowInitializeOptions**: [`PayPalBuyNowInitializeOptions`](PayPalBuyNowInitializeOptions.md)\n\nThe options that are required to initialize Buy Now functionality.\n\n___\n\n### currencyCode\n\n• `Optional` **currencyCode**: `string`\n\nThe option that used to initialize a PayPal script with provided currency code.\n\n___\n\n### style\n\n• `Optional` **style**: [`PayPalButtonStyleOptions`](PayPalButtonStyleOptions.md)\n\nA set of styling options for the checkout button.\n\n## Methods\n\n### onComplete\n\n▸ **onComplete**(): `void`\n\nA callback that gets called when payment complete on paypal side.\n\n#### Returns\n\n`void`\n\n___\n\n### onEligibilityFailure\n\n▸ **onEligibilityFailure**(): `void`\n\nA callback that gets called when PayPal SDK restricts to render PayPal component.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsCreditCardsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsCreditCardsPaymentInitializeOptions\n\n# Interface: BigCommercePaymentsCreditCardsPaymentInitializeOptions\n\nA set of options that are required to initialize the BigCommercePayments Credit Card payment\r\nmethod for presenting its credit card form.\n\n```html\r\n<!-- These containers are where the hosted (iframed) credit card fields will be inserted -->\r\n<div id=\"card-number\"></div>\r\n<div id=\"card-name\"></div>\r\n<div id=\"card-expiry\"></div>\r\n<div id=\"card-code\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'bigcommerce_payments_creditcards',\r\n    bigcommerce_payments_creditcards: {\r\n        form: {\r\n            fields: {\r\n                cardNumber: { containerId: 'card-number' },\r\n                cardName: { containerId: 'card-name' },\r\n                cardExpiry: { containerId: 'card-expiry' },\r\n                cardCode: { containerId: 'card-code' },\r\n            },\r\n        },\r\n        onCreditCardFieldsRenderingError: (error) => handleError(error),\r\n    },\r\n});\r\n```\n\nAdditional options can be passed in to customize the fields and register\r\nevent callbacks.\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'bigcommerce_payments_creditcards',\r\n    bigcommerce_payments_creditcards: {\r\n        form: {\r\n            fields: {\r\n                cardNumber: { containerId: 'card-number', placeholder: 'Number of card' },\r\n                cardName: { containerId: 'card-name', placeholder: 'Name of card' },\r\n                cardExpiry: { containerId: 'card-expiry', placeholder: 'Expiry of card' },\r\n                cardCode: { containerId: 'card-code', placeholder: 'Code of card' },\r\n            },\r\n            styles: {\r\n                default: {\r\n                    color: '#000',\r\n                },\r\n                error: {\r\n                    color: '#f00',\r\n                },\r\n                focus: {\r\n                    color: '#0f0',\r\n                },\r\n            },\r\n            onBlur({ fieldType }) {\r\n                console.log(fieldType);\r\n            },\r\n            onFocus({ fieldType }) {\r\n                console.log(fieldType);\r\n            },\r\n            onEnter({ fieldType }) {\r\n                console.log(fieldType);\r\n            },\r\n            onCardTypeChange({ cardType }) {\r\n                console.log(cardType);\r\n            },\r\n            onValidate({ errors, isValid }) {\r\n                console.log(errors);\r\n                console.log(isValid);\r\n            },\r\n        },\r\n        onCreditCardFieldsRenderingError: (error) => handleError(error),\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [form](BigCommercePaymentsCreditCardsPaymentInitializeOptions.md#form)\n- [onCreditCardFieldsRenderingError](BigCommercePaymentsCreditCardsPaymentInitializeOptions.md#oncreditcardfieldsrenderingerror)\n- [onLoadComplete](BigCommercePaymentsCreditCardsPaymentInitializeOptions.md#onloadcomplete)\n\n## Properties\n\n### form\n\n• **form**: `default`\n\nThe form is data for Credit Card Form\n\n___\n\n### onCreditCardFieldsRenderingError\n\n• `Optional` **onCreditCardFieldsRenderingError**: (`error`: `unknown`) => `void`\n\nThe callback that gets called when there is an issue with rendering credit card fields\n\n#### Type declaration\n\n▸ (`error`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n##### Returns\n\n`void`\n\n___\n\n### onLoadComplete\n\n• `Optional` **onLoadComplete**: () => `void`\n\nThe callback that gets called when PayPal SDK load complete\n\n#### Type declaration\n\n▸ (): `void`\n\n##### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsCustomerInitializeOptions\n\n# Interface: BigCommercePaymentsCustomerInitializeOptions\n\nA set of options that are required to initialize the customer step of\r\ncheckout to support BigCommercePayments.\n\n## Table of contents\n\n### Properties\n\n- [container](BigCommercePaymentsCustomerInitializeOptions.md#container)\n\n### Methods\n\n- [onClick](BigCommercePaymentsCustomerInitializeOptions.md#onclick)\n- [onComplete](BigCommercePaymentsCustomerInitializeOptions.md#oncomplete)\n- [onError](BigCommercePaymentsCustomerInitializeOptions.md#onerror)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe ID of a container which the checkout button should be inserted into.\n\n## Methods\n\n### onClick\n\n▸ **onClick**(): `void`\n\nA callback that gets called when paypal button clicked.\n\n#### Returns\n\n`void`\n\n___\n\n### onComplete\n\n▸ **onComplete**(): `void`\n\nA callback that gets called when payment complete on paypal side.\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error?`): `void`\n\nA callback that gets called if unable to initialize the widget or select\r\none of the address options provided by the widget.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error?` | `Error` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsFastlaneCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsFastlaneCustomerInitializeOptions\n\n# Interface: BigCommercePaymentsFastlaneCustomerInitializeOptions\n\nA set of options that are optional to initialize the BigCommercePayments Fastlane customer strategy\r\nthat are responsible for BigCommercePayments Fastlane components styling and initialization\n\n```js\r\nservice.initializeCustomer({\r\n    methodId: 'bigcommerce_payments_fastlane',\r\n    bigcommerce_payments_fastlane: {\r\n        styles: {\r\n             root: {\r\n                 backgroundColorPrimary: 'transparent',\r\n                 errorColor: '#C40B0B',\r\n                 fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n             },\r\n             input: {\r\n                 borderRadius: '0.25rem',\r\n                 borderColor: '#9E9E9E',\r\n                 focusBorderColor: '#4496F6',\r\n             },\r\n             toggle: {\r\n                 colorPrimary: '#0F005E',\r\n                 colorSecondary: '#ffffff',\r\n             },\r\n             text: {\r\n                 body: {\r\n                     color: '#222222',\r\n                     fontSize: '1rem',\r\n                 },\r\n                 caption: {\r\n                     color: '#515151',\r\n                     fontSize: '0.875rem',\r\n                 },\r\n             },\r\n             branding: 'light',\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [styles](BigCommercePaymentsFastlaneCustomerInitializeOptions.md#styles)\n\n## Properties\n\n### styles\n\n• `Optional` **styles**: `PayPalFastlaneStylesOption`\n\nIs a stylisation options for customizing BigCommercePayments Fastlane components\n\nNote: the styles for all BigCommercePayments Fastlane strategies should be the same,\r\nbecause they will be provided to PayPal library only for the first strategy initialization\r\nno matter which strategy was initialised first\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsFastlanePaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsFastlanePaymentInitializeOptions\n\n# Interface: BigCommercePaymentsFastlanePaymentInitializeOptions\n\nA set of options that are required to initialize the BigCommercePayments Fastlane payment\r\nmethod for presenting on the page.\n\nAlso, BigCommercePayments requires specific options to initialize BigCommercePayments Fastlane Card Component\r\n```html\r\n<!-- This is where the BigCommercePayments Fastlane Card Component will be inserted -->\r\n<div id=\"container\"></div>\r\n```\r\n```js\r\nservice.initializePayment({\r\n    methodId: 'bigcommerce_payments_fastlane',\r\n    bigcommerce_payments_fastlane: {\r\n        onInit: (renderPayPalCardComponent) => renderPayPalCardComponent('#container-id'),\r\n        onChange: (showPayPalCardSelector) => showPayPalCardSelector(),\r\n        styles: {\r\n             root: {\r\n                 backgroundColorPrimary: 'transparent',\r\n                 errorColor: '#C40B0B',\r\n                 fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n             },\r\n             input: {\r\n                 borderRadius: '0.25rem',\r\n                 borderColor: '#9E9E9E',\r\n                 focusBorderColor: '#4496F6',\r\n             },\r\n             toggle: {\r\n                 colorPrimary: '#0F005E',\r\n                 colorSecondary: '#ffffff',\r\n             },\r\n             text: {\r\n                 body: {\r\n                     color: '#222222',\r\n                     fontSize: '1rem',\r\n                 },\r\n                 caption: {\r\n                     color: '#515151',\r\n                     fontSize: '0.875rem',\r\n                 },\r\n             },\r\n             branding: 'light',\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [onChange](BigCommercePaymentsFastlanePaymentInitializeOptions.md#onchange)\n- [onError](BigCommercePaymentsFastlanePaymentInitializeOptions.md#onerror)\n- [onInit](BigCommercePaymentsFastlanePaymentInitializeOptions.md#oninit)\n- [styles](BigCommercePaymentsFastlanePaymentInitializeOptions.md#styles)\n\n## Properties\n\n### onChange\n\n• `Optional` **onChange**: (`showPayPalCardSelector`: () => `Promise`\\<`undefined` \\| `CardInstrument`\\>) => `void`\n\nIs a callback that shows fastlane stored instruments\r\nwhen get triggered\n\n#### Type declaration\n\n▸ (`showPayPalCardSelector`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `showPayPalCardSelector` | () => `Promise`\\<`undefined` \\| `CardInstrument`\\> |\n\n##### Returns\n\n`void`\n\n___\n\n### onError\n\n• `Optional` **onError**: (`error`: `unknown`) => `void`\n\nCallback that handles errors\n\n#### Type declaration\n\n▸ (`error`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n##### Returns\n\n`void`\n\n___\n\n### onInit\n\n• `Optional` **onInit**: (`renderPayPalCardComponent`: (`container`: `string`) => `void`) => `void`\n\nIs a callback that takes the CSS selector of a container\r\nwhere the BigCommercePayments Fastlane form should be inserted into.\n\n#### Type declaration\n\n▸ (`renderPayPalCardComponent`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `renderPayPalCardComponent` | (`container`: `string`) => `void` |\n\n##### Returns\n\n`void`\n\n___\n\n### styles\n\n• `Optional` **styles**: `PayPalFastlaneStylesOption`\n\nIs a stylisation options for customizing BigCommercePayments Fastlane components\n\nNote: the styles for all BigCommercePaymentsFastlane strategies should be the same,\r\nbecause they will be provided to PayPal library only for the first strategy initialization\r\nno matter what strategy was initialised first\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsFastlaneShippingInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsFastlaneShippingInitializeOptions\n\n# Interface: BigCommercePaymentsFastlaneShippingInitializeOptions\n\nA set of options that are required to initialize the shipping step of\r\ncheckout in order to support BigCommercePayments  Fastlane.\n\n## Table of contents\n\n### Properties\n\n- [onPayPalFastlaneAddressChange](BigCommercePaymentsFastlaneShippingInitializeOptions.md#onpaypalfastlaneaddresschange)\n- [styles](BigCommercePaymentsFastlaneShippingInitializeOptions.md#styles)\n\n## Properties\n\n### onPayPalFastlaneAddressChange\n\n• `Optional` **onPayPalFastlaneAddressChange**: (`showPayPalFastlaneAddressSelector`: () => `Promise`\\<`undefined` \\| `CustomerAddress`\\>) => `void`\n\nIs a callback that shows BigCommercePayments Fastlane popup with customer addresses\r\nwhen get triggered\n\n#### Type declaration\n\n▸ (`showPayPalFastlaneAddressSelector`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `showPayPalFastlaneAddressSelector` | () => `Promise`\\<`undefined` \\| `CustomerAddress`\\> |\n\n##### Returns\n\n`void`\n\n___\n\n### styles\n\n• `Optional` **styles**: `PayPalFastlaneStylesOption`\n\nIs a stylisation options for customizing BigCommercePayments Fastlane components\n\nNote: the styles for all BigCommercePayments Fastlane strategies should be the same,\r\nbecause they will be provided to fastlane library only for the first strategy initialization\r\nno matter what strategy was initialised first\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsFieldsStyleOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsFieldsStyleOptions\n\n# Interface: BigCommercePaymentsFieldsStyleOptions\n\n## Table of contents\n\n### Properties\n\n- [rules](BigCommercePaymentsFieldsStyleOptions.md#rules)\n- [variables](BigCommercePaymentsFieldsStyleOptions.md#variables)\n\n## Properties\n\n### rules\n\n• `Optional` **rules**: `Object`\n\n#### Index signature\n\n▪ [key: `string`]: `any`\n\n___\n\n### variables\n\n• `Optional` **variables**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `borderColor?` | `string` |\n| `borderFocusColor?` | `string` |\n| `borderRadius?` | `string` |\n| `borderWidth?` | `string` |\n| `colorBackground?` | `string` |\n| `colorDanger?` | `string` |\n| `colorInfo?` | `string` |\n| `colorTextPlaceholder?` | `string` |\n| `fontFamily?` | `string` |\n| `fontSizeBase?` | `string` |\n| `fontSizeLg?` | `string` |\n| `fontSizeM?` | `string` |\n| `fontSizeSm?` | `string` |\n| `spacingUnit?` | `string` |\n| `textColor?` | `string` |\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsPayLaterButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsPayLaterButtonInitializeOptions\n\n# Interface: BigCommercePaymentsPayLaterButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [buyNowInitializeOptions](BigCommercePaymentsPayLaterButtonInitializeOptions.md#buynowinitializeoptions)\n- [currencyCode](BigCommercePaymentsPayLaterButtonInitializeOptions.md#currencycode)\n- [style](BigCommercePaymentsPayLaterButtonInitializeOptions.md#style)\n\n### Methods\n\n- [onComplete](BigCommercePaymentsPayLaterButtonInitializeOptions.md#oncomplete)\n- [onEligibilityFailure](BigCommercePaymentsPayLaterButtonInitializeOptions.md#oneligibilityfailure)\n\n## Properties\n\n### buyNowInitializeOptions\n\n• `Optional` **buyNowInitializeOptions**: [`PayPalBuyNowInitializeOptions`](PayPalBuyNowInitializeOptions.md)\n\nThe options that are required to initialize Buy Now functionality.\n\n___\n\n### currencyCode\n\n• `Optional` **currencyCode**: `string`\n\nThe option that used to initialize a PayPal script with provided currency code.\n\n___\n\n### style\n\n• `Optional` **style**: [`PayPalButtonStyleOptions`](PayPalButtonStyleOptions.md)\n\nA set of styling options for the checkout button.\n\n## Methods\n\n### onComplete\n\n▸ **onComplete**(): `void`\n\nA callback that gets called when payment complete on paypal side.\n\n#### Returns\n\n`void`\n\n___\n\n### onEligibilityFailure\n\n▸ **onEligibilityFailure**(): `void`\n\nA callback that gets called when PayPal SDK restricts to render PayPal component.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsPayLaterCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsPayLaterCustomerInitializeOptions\n\n# Interface: BigCommercePaymentsPayLaterCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [container](BigCommercePaymentsPayLaterCustomerInitializeOptions.md#container)\n\n### Methods\n\n- [onClick](BigCommercePaymentsPayLaterCustomerInitializeOptions.md#onclick)\n- [onComplete](BigCommercePaymentsPayLaterCustomerInitializeOptions.md#oncomplete)\n- [onError](BigCommercePaymentsPayLaterCustomerInitializeOptions.md#onerror)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe ID of a container which the checkout button should be inserted into.\n\n## Methods\n\n### onClick\n\n▸ **onClick**(): `void`\n\nA callback that gets called when paypal button clicked.\n\n#### Returns\n\n`void`\n\n___\n\n### onComplete\n\n▸ **onComplete**(): `void`\n\nA callback that gets called when payment complete on paypal side.\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error?`): `void`\n\nA callback that gets called if unable to initialize the widget or select\r\none of the address options provided by the widget.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error?` | `Error` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsPayLaterPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsPayLaterPaymentInitializeOptions\n\n# Interface: BigCommercePaymentsPayLaterPaymentInitializeOptions\n\nA set of options that are required to initialize the BigCommercePayments PayLater payment\r\nmethod for presenting its BigCommercePayments PayLater button.\n\nAlso, BigCommercePayments requires specific options to initialize the BigCommercePayments Smart Payment Button on checkout page that substitutes a standard submit button\r\n```html\r\n<!-- This is where the BigCommercePayments PayLater button will be inserted -->\r\n<div id=\"container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'bigcommerce_payments_paylater',\r\n    bigcommerce_payments_paylater: {\r\n        container: '#container',\r\n// Callback for submitting payment form that gets called when a buyer approves BigCommercePayments payment\r\n        submitForm: () => {\r\n        // Example function\r\n            this.submitOrder(\r\n               {\r\n                  payment: { methodId: 'bigcommerce_payments_paylater', }\r\n              }\r\n           );\r\n        },\r\n// Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n        onValidate: (resolve, reject) => {\r\n        // Example function\r\n            const isValid = this.validatePaymentForm();\r\n            if (isValid) {\r\n                return resolve();\r\n            }\r\n            return reject();\r\n        },\r\n// Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular BigCommercePayments method. This callback can be used to hide the standard submit button.\r\n        onRenderButton: () => {\r\n        // Example function\r\n            this.hidePaymentSubmitButton();\r\n        }\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [bannerContainerId](BigCommercePaymentsPayLaterPaymentInitializeOptions.md#bannercontainerid)\n- [container](BigCommercePaymentsPayLaterPaymentInitializeOptions.md#container)\n\n### Methods\n\n- [onError](BigCommercePaymentsPayLaterPaymentInitializeOptions.md#onerror)\n- [onRenderButton](BigCommercePaymentsPayLaterPaymentInitializeOptions.md#onrenderbutton)\n- [onValidate](BigCommercePaymentsPayLaterPaymentInitializeOptions.md#onvalidate)\n- [submitForm](BigCommercePaymentsPayLaterPaymentInitializeOptions.md#submitform)\n\n## Properties\n\n### bannerContainerId\n\n• `Optional` **bannerContainerId**: `string`\n\nThe location to insert the Pay Later Messages.\n\n___\n\n### container\n\n• `Optional` **container**: `string`\n\nThe CSS selector of a container where the payment widget should be inserted into.\n\n## Methods\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `Error` |\n\n#### Returns\n\n`void`\n\n___\n\n### onRenderButton\n\n▸ **onRenderButton**(): `void`\n\nA callback right before render Smart Payment Button that gets called when\r\nSmart Payment Button is eligible. This callback can be used to hide the standard submit button.\n\n#### Returns\n\n`void`\n\n___\n\n### onValidate\n\n▸ **onValidate**(`resolve`, `reject`): `Promise`\\<`void`\\>\n\nA callback that gets called when a buyer click on Smart Payment Button\r\nand should validate payment form.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `resolve` | () => `void` | A function, that gets called if form is valid. |\n| `reject` | () => `void` | A function, that gets called if form is not valid. |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\nreject() or resolve()\n\n___\n\n### submitForm\n\n▸ **submitForm**(): `void`\n\nA callback for submitting payment form that gets called\r\nwhen buyer approved BigCommercePayments account.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsPaymentInitializeOptions\n\n# Interface: BigCommercePaymentsPaymentInitializeOptions\n\nA set of options that are required to initialize the BigCommercePayments payment\r\nmethod for presenting its PayPal button.\n\nPlease note that the minimum version of checkout-sdk is 1.100\n\nAlso, BigCommercePayments requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n```html\r\n<!-- This is where the BigCommercePayments PayPal button will be inserted -->\r\n<div id=\"container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'bigcommerce_payments',\r\n    bigcommerce_payments: {\r\n        container: '#container',\r\n// Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n        submitForm: () => {\r\n        // Example function\r\n            this.submitOrder(\r\n               {\r\n                  payment: { methodId: 'bigcommerce_payments', }\r\n              }\r\n           );\r\n        },\r\n// Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n        onValidate: (resolve, reject) => {\r\n        // Example function\r\n            const isValid = this.validatePaymentForm();\r\n            if (isValid) {\r\n                return resolve();\r\n            }\r\n            return reject();\r\n        },\r\n// Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n        onRenderButton: () => {\r\n        // Example function\r\n            this.hidePaymentSubmitButton();\r\n        }\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [bannerContainerId](BigCommercePaymentsPaymentInitializeOptions.md#bannercontainerid)\n- [container](BigCommercePaymentsPaymentInitializeOptions.md#container)\n- [shouldRenderPayPalButtonOnInitialization](BigCommercePaymentsPaymentInitializeOptions.md#shouldrenderpaypalbuttononinitialization)\n\n### Methods\n\n- [getFieldsValues](BigCommercePaymentsPaymentInitializeOptions.md#getfieldsvalues)\n- [onError](BigCommercePaymentsPaymentInitializeOptions.md#onerror)\n- [onInit](BigCommercePaymentsPaymentInitializeOptions.md#oninit)\n- [onRenderButton](BigCommercePaymentsPaymentInitializeOptions.md#onrenderbutton)\n- [onValidate](BigCommercePaymentsPaymentInitializeOptions.md#onvalidate)\n- [submitForm](BigCommercePaymentsPaymentInitializeOptions.md#submitform)\n\n## Properties\n\n### bannerContainerId\n\n• `Optional` **bannerContainerId**: `string`\n\nThe location to insert the Pay Later Messages.\n\n___\n\n### container\n\n• `Optional` **container**: `string`\n\nThe CSS selector of a container where the payment widget should be inserted into.\n\n___\n\n### shouldRenderPayPalButtonOnInitialization\n\n• `Optional` **shouldRenderPayPalButtonOnInitialization**: `boolean`\n\nIf there is no need to initialize the Smart Payment Button, simply pass false as the option value.\r\nThe default value is true\n\n## Methods\n\n### getFieldsValues\n\n▸ **getFieldsValues**(): `HostedInstrument`\n\nA callback for getting form fields values.\n\n#### Returns\n\n`HostedInstrument`\n\n___\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n#### Returns\n\n`void`\n\n___\n\n### onInit\n\n▸ **onInit**(`callback`): `void`\n\nA callback that gets called when strategy is in the process of initialization before rendering Smart Payment Button.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `callback` | () => `void` | A function, that calls the method to render the Smart Payment Button. |\n\n#### Returns\n\n`void`\n\n___\n\n### onRenderButton\n\n▸ **onRenderButton**(): `void`\n\nA callback right before render Smart Payment Button that gets called when\r\nSmart Payment Button is eligible. This callback can be used to hide the standard submit button.\n\n#### Returns\n\n`void`\n\n___\n\n### onValidate\n\n▸ **onValidate**(`resolve`, `reject`): `Promise`\\<`void`\\>\n\nA callback that gets called when a buyer click on Smart Payment Button\r\nand should validate payment form.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `resolve` | () => `void` | A function, that gets called if form is valid. |\n| `reject` | () => `void` | A function, that gets called if form is not valid. |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\nreject() or resolve()\n\n___\n\n### submitForm\n\n▸ **submitForm**(): `void`\n\nA callback for submitting payment form that gets called\r\nwhen buyer approves PayPal payment.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsRatePayPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsRatePayPaymentInitializeOptions\n\n# Interface: BigCommercePaymentsRatePayPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [container](BigCommercePaymentsRatePayPaymentInitializeOptions.md#container)\n- [legalTextContainer](BigCommercePaymentsRatePayPaymentInitializeOptions.md#legaltextcontainer)\n- [loadingContainerId](BigCommercePaymentsRatePayPaymentInitializeOptions.md#loadingcontainerid)\n\n### Methods\n\n- [getFieldsValues](BigCommercePaymentsRatePayPaymentInitializeOptions.md#getfieldsvalues)\n- [onError](BigCommercePaymentsRatePayPaymentInitializeOptions.md#onerror)\n- [onRenderButton](BigCommercePaymentsRatePayPaymentInitializeOptions.md#onrenderbutton)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe CSS selector of a container where the payment widget should be inserted into.\n\n___\n\n### legalTextContainer\n\n• **legalTextContainer**: `string`\n\nThe CSS selector of a container where the legal text should be inserted into.\n\n___\n\n### loadingContainerId\n\n• **loadingContainerId**: `string`\n\nThe CSS selector of a container where loading indicator should be rendered\n\n## Methods\n\n### getFieldsValues\n\n▸ **getFieldsValues**(): `Object`\n\nA callback that gets form values\n\n#### Returns\n\n`Object`\n\n| Name | Type |\n| :------ | :------ |\n| `ratepayBirthDate` | [`BirthDate`](BirthDate.md) |\n| `ratepayPhoneCountryCode` | `string` |\n| `ratepayPhoneNumber` | `string` |\n\n___\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n#### Returns\n\n`void`\n\n___\n\n### onRenderButton\n\n▸ **onRenderButton**(): `void`\n\nA callback right before render Smart Payment Button that gets called when\r\nSmart Payment Button is eligible. This callback can be used to hide the standard submit button.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions\n\n# Interface: BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions\n\nA set of options that are required to initialize the BigCommercePayments payment\r\nmethod making payment with Klarna.\n\nAlso, BCP (also known as BigCommercePayments) requires specific options to initialize the PayPal Klarna flow\n\n```js\r\nservice.initializePayment({\r\n    gatewayId: 'bigcommerce_payments_apms',\r\n    methodId: 'klarna',\r\n    bigcommerce_payments_apms: {\r\n// Callback for handling error that occurs when a buyer approves payment\r\n        onError: (error) => {\r\n        // Example function\r\n            this.handleError(\r\n               {\r\n                  payment: { methodId: 'bigcommerce_payments_apms', }\r\n              }\r\n           );\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Methods\n\n- [onError](BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions.md#onerror)\n\n## Methods\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsVenmoButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsVenmoButtonInitializeOptions\n\n# Interface: BigCommercePaymentsVenmoButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [buyNowInitializeOptions](BigCommercePaymentsVenmoButtonInitializeOptions.md#buynowinitializeoptions)\n- [currencyCode](BigCommercePaymentsVenmoButtonInitializeOptions.md#currencycode)\n- [style](BigCommercePaymentsVenmoButtonInitializeOptions.md#style)\n\n### Methods\n\n- [onEligibilityFailure](BigCommercePaymentsVenmoButtonInitializeOptions.md#oneligibilityfailure)\n\n## Properties\n\n### buyNowInitializeOptions\n\n• `Optional` **buyNowInitializeOptions**: [`PayPalBuyNowInitializeOptions`](PayPalBuyNowInitializeOptions.md)\n\nThe options that required to initialize Buy Now functionality.\n\n___\n\n### currencyCode\n\n• `Optional` **currencyCode**: `string`\n\nThe option that used to initialize a PayPal script with provided currency code.\n\n___\n\n### style\n\n• `Optional` **style**: [`PayPalButtonStyleOptions`](PayPalButtonStyleOptions.md)\n\nA set of styling options for the checkout button.\n\n## Methods\n\n### onEligibilityFailure\n\n▸ **onEligibilityFailure**(): `void`\n\nA callback that gets called when PayPal SDK restricts to render PayPal component.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsVenmoCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsVenmoCustomerInitializeOptions\n\n# Interface: BigCommercePaymentsVenmoCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [container](BigCommercePaymentsVenmoCustomerInitializeOptions.md#container)\n\n### Methods\n\n- [onClick](BigCommercePaymentsVenmoCustomerInitializeOptions.md#onclick)\n- [onError](BigCommercePaymentsVenmoCustomerInitializeOptions.md#onerror)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe ID of a container which the checkout button should be inserted into.\n\n## Methods\n\n### onClick\n\n▸ **onClick**(): `void`\n\nA callback that gets called when Venmo button clicked.\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error?`): `void`\n\nA callback that gets called if unable to initialize the widget or select\r\none of the address options provided by the widget.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error?` | `Error` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BigCommercePaymentsVenmoPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BigCommercePaymentsVenmoPaymentInitializeOptions\n\n# Interface: BigCommercePaymentsVenmoPaymentInitializeOptions\n\nA set of options that are required to initialize the BigCommercePayments Venmo payment\r\nmethod for presenting its Venmo button.\n\nAlso, BigCommercePayments requires specific options to initialize the Venmo Button on checkout page that substitutes a standard submit button\r\n```html\r\n<!-- This is where the Venmo button will be inserted -->\r\n<div id=\"container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'bigcommerce_payments_venmo',\r\n    bigcommerce_payments_venmo: {\r\n        container: '#container',\r\n// Callback for submitting payment form that gets called when a buyer approves payment\r\n        submitForm: () => {\r\n        // Example function\r\n            this.submitOrder(\r\n               {\r\n                  payment: { methodId: 'bigcommerce_payments_venmo', }\r\n              }\r\n           );\r\n        },\r\n// Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n        onValidate: (resolve, reject) => {\r\n        // Example function\r\n            const isValid = this.validatePaymentForm();\r\n            if (isValid) {\r\n                return resolve();\r\n            }\r\n            return reject();\r\n        },\r\n// Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n        onRenderButton: () => {\r\n        // Example function\r\n            this.hidePaymentSubmitButton();\r\n        }\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [container](BigCommercePaymentsVenmoPaymentInitializeOptions.md#container)\n\n### Methods\n\n- [onError](BigCommercePaymentsVenmoPaymentInitializeOptions.md#onerror)\n- [onRenderButton](BigCommercePaymentsVenmoPaymentInitializeOptions.md#onrenderbutton)\n- [onValidate](BigCommercePaymentsVenmoPaymentInitializeOptions.md#onvalidate)\n- [submitForm](BigCommercePaymentsVenmoPaymentInitializeOptions.md#submitform)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe CSS selector of a container where the payment widget should be inserted into.\n\n## Methods\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `Error` |\n\n#### Returns\n\n`void`\n\n___\n\n### onRenderButton\n\n▸ **onRenderButton**(): `void`\n\nA callback right before render Smart Payment Button that gets called when\r\nSmart Payment Button is eligible. This callback can be used to hide the standard submit button.\n\n#### Returns\n\n`void`\n\n___\n\n### onValidate\n\n▸ **onValidate**(`resolve`, `reject`): `Promise`\\<`void`\\>\n\nA callback that gets called when a buyer click on Smart Payment Button\r\nand should validate payment form.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `resolve` | () => `void` | A function, that gets called if form is valid. |\n| `reject` | () => `void` | A function, that gets called if form is not valid. |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\nreject() or resolve()\n\n___\n\n### submitForm\n\n▸ **submitForm**(): `void`\n\nA callback for submitting payment form that gets called\r\nwhen buyer approved PayPal account.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BillingAddress.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BillingAddress\n\n# Interface: BillingAddress\n\n## Hierarchy\n\n- [`Address`](Address.md)\n\n  ↳ **`BillingAddress`**\n\n## Table of contents\n\n### Properties\n\n- [address1](BillingAddress.md#address1)\n- [address2](BillingAddress.md#address2)\n- [city](BillingAddress.md#city)\n- [company](BillingAddress.md#company)\n- [country](BillingAddress.md#country)\n- [countryCode](BillingAddress.md#countrycode)\n- [customFields](BillingAddress.md#customfields)\n- [email](BillingAddress.md#email)\n- [extraFields](BillingAddress.md#extrafields)\n- [firstName](BillingAddress.md#firstname)\n- [id](BillingAddress.md#id)\n- [lastName](BillingAddress.md#lastname)\n- [phone](BillingAddress.md#phone)\n- [postalCode](BillingAddress.md#postalcode)\n- [shouldSaveAddress](BillingAddress.md#shouldsaveaddress)\n- [stateOrProvince](BillingAddress.md#stateorprovince)\n- [stateOrProvinceCode](BillingAddress.md#stateorprovincecode)\n\n## Properties\n\n### address1\n\n• **address1**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[address1](Address.md#address1)\n\n___\n\n### address2\n\n• **address2**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[address2](Address.md#address2)\n\n___\n\n### city\n\n• **city**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[city](Address.md#city)\n\n___\n\n### company\n\n• **company**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[company](Address.md#company)\n\n___\n\n### country\n\n• **country**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[country](Address.md#country)\n\n___\n\n### countryCode\n\n• **countryCode**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[countryCode](Address.md#countrycode)\n\n___\n\n### customFields\n\n• **customFields**: \\{ `fieldId`: `string` ; `fieldValue`: `string` \\| `number` \\| `string`[]  }[]\n\n#### Inherited from\n\n[Address](Address.md).[customFields](Address.md#customfields)\n\n___\n\n### email\n\n• `Optional` **email**: `string`\n\n___\n\n### extraFields\n\n• `Optional` **extraFields**: [`AddressExtraFieldValue`](AddressExtraFieldValue.md)[]\n\n#### Inherited from\n\n[Address](Address.md).[extraFields](Address.md#extrafields)\n\n___\n\n### firstName\n\n• **firstName**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[firstName](Address.md#firstname)\n\n___\n\n### id\n\n• **id**: `string`\n\n___\n\n### lastName\n\n• **lastName**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[lastName](Address.md#lastname)\n\n___\n\n### phone\n\n• **phone**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[phone](Address.md#phone)\n\n___\n\n### postalCode\n\n• **postalCode**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[postalCode](Address.md#postalcode)\n\n___\n\n### shouldSaveAddress\n\n• `Optional` **shouldSaveAddress**: `boolean`\n\n#### Inherited from\n\n[Address](Address.md).[shouldSaveAddress](Address.md#shouldsaveaddress)\n\n___\n\n### stateOrProvince\n\n• **stateOrProvince**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[stateOrProvince](Address.md#stateorprovince)\n\n___\n\n### stateOrProvinceCode\n\n• **stateOrProvinceCode**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[stateOrProvinceCode](Address.md#stateorprovincecode)\n"
  },
  {
    "path": "docs/interfaces/BillingAddressRequestBody.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BillingAddressRequestBody\n\n# Interface: BillingAddressRequestBody\n\n## Hierarchy\n\n- [`AddressRequestBody`](AddressRequestBody.md)\n\n  ↳ **`BillingAddressRequestBody`**\n\n## Table of contents\n\n### Properties\n\n- [address1](BillingAddressRequestBody.md#address1)\n- [address2](BillingAddressRequestBody.md#address2)\n- [city](BillingAddressRequestBody.md#city)\n- [company](BillingAddressRequestBody.md#company)\n- [countryCode](BillingAddressRequestBody.md#countrycode)\n- [customFields](BillingAddressRequestBody.md#customfields)\n- [email](BillingAddressRequestBody.md#email)\n- [extraFields](BillingAddressRequestBody.md#extrafields)\n- [firstName](BillingAddressRequestBody.md#firstname)\n- [lastName](BillingAddressRequestBody.md#lastname)\n- [phone](BillingAddressRequestBody.md#phone)\n- [postalCode](BillingAddressRequestBody.md#postalcode)\n- [stateOrProvince](BillingAddressRequestBody.md#stateorprovince)\n- [stateOrProvinceCode](BillingAddressRequestBody.md#stateorprovincecode)\n\n## Properties\n\n### address1\n\n• **address1**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[address1](AddressRequestBody.md#address1)\n\n___\n\n### address2\n\n• **address2**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[address2](AddressRequestBody.md#address2)\n\n___\n\n### city\n\n• **city**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[city](AddressRequestBody.md#city)\n\n___\n\n### company\n\n• **company**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[company](AddressRequestBody.md#company)\n\n___\n\n### countryCode\n\n• **countryCode**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[countryCode](AddressRequestBody.md#countrycode)\n\n___\n\n### customFields\n\n• **customFields**: \\{ `fieldId`: `string` ; `fieldValue`: `string` \\| `number` \\| `string`[]  }[]\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[customFields](AddressRequestBody.md#customfields)\n\n___\n\n### email\n\n• `Optional` **email**: `string`\n\n___\n\n### extraFields\n\n• `Optional` **extraFields**: [`AddressExtraFieldValue`](AddressExtraFieldValue.md)[]\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[extraFields](AddressRequestBody.md#extrafields)\n\n___\n\n### firstName\n\n• **firstName**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[firstName](AddressRequestBody.md#firstname)\n\n___\n\n### lastName\n\n• **lastName**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[lastName](AddressRequestBody.md#lastname)\n\n___\n\n### phone\n\n• **phone**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[phone](AddressRequestBody.md#phone)\n\n___\n\n### postalCode\n\n• **postalCode**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[postalCode](AddressRequestBody.md#postalcode)\n\n___\n\n### stateOrProvince\n\n• **stateOrProvince**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[stateOrProvince](AddressRequestBody.md#stateorprovince)\n\n___\n\n### stateOrProvinceCode\n\n• **stateOrProvinceCode**: `string`\n\n#### Inherited from\n\n[AddressRequestBody](AddressRequestBody.md).[stateOrProvinceCode](AddressRequestBody.md#stateorprovincecode)\n"
  },
  {
    "path": "docs/interfaces/BillingAddressSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BillingAddressSelector\n\n# Interface: BillingAddressSelector\n\n## Table of contents\n\n### Methods\n\n- [getBillingAddress](BillingAddressSelector.md#getbillingaddress)\n- [getBillingAddressOrThrow](BillingAddressSelector.md#getbillingaddressorthrow)\n- [getContinueAsGuestError](BillingAddressSelector.md#getcontinueasguesterror)\n- [getLoadError](BillingAddressSelector.md#getloaderror)\n- [getUpdateError](BillingAddressSelector.md#getupdateerror)\n- [isContinuingAsGuest](BillingAddressSelector.md#iscontinuingasguest)\n- [isLoading](BillingAddressSelector.md#isloading)\n- [isUpdating](BillingAddressSelector.md#isupdating)\n\n## Methods\n\n### getBillingAddress\n\n▸ **getBillingAddress**(): `undefined` \\| [`BillingAddress`](BillingAddress.md)\n\n#### Returns\n\n`undefined` \\| [`BillingAddress`](BillingAddress.md)\n\n___\n\n### getBillingAddressOrThrow\n\n▸ **getBillingAddressOrThrow**(): [`BillingAddress`](BillingAddress.md)\n\n#### Returns\n\n[`BillingAddress`](BillingAddress.md)\n\n___\n\n### getContinueAsGuestError\n\n▸ **getContinueAsGuestError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getUpdateError\n\n▸ **getUpdateError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### isContinuingAsGuest\n\n▸ **isContinuingAsGuest**(): `boolean`\n\n#### Returns\n\n`boolean`\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n\n___\n\n### isUpdating\n\n▸ **isUpdating**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/BirthDate.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BirthDate\n\n# Interface: BirthDate\n\n## Table of contents\n\n### Methods\n\n- [getDate](BirthDate.md#getdate)\n- [getFullYear](BirthDate.md#getfullyear)\n- [getMonth](BirthDate.md#getmonth)\n\n## Methods\n\n### getDate\n\n▸ **getDate**(): `number`\n\n#### Returns\n\n`number`\n\n___\n\n### getFullYear\n\n▸ **getFullYear**(): `number`\n\n#### Returns\n\n`number`\n\n___\n\n### getMonth\n\n▸ **getMonth**(): `number`\n\n#### Returns\n\n`number`\n"
  },
  {
    "path": "docs/interfaces/BirthDate_2.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BirthDate\\_2\n\n# Interface: BirthDate\\_2\n\n## Table of contents\n\n### Methods\n\n- [getDate](BirthDate_2.md#getdate)\n- [getFullYear](BirthDate_2.md#getfullyear)\n- [getMonth](BirthDate_2.md#getmonth)\n\n## Methods\n\n### getDate\n\n▸ **getDate**(): `number`\n\n#### Returns\n\n`number`\n\n___\n\n### getFullYear\n\n▸ **getFullYear**(): `number`\n\n#### Returns\n\n`number`\n\n___\n\n### getMonth\n\n▸ **getMonth**(): `number`\n\n#### Returns\n\n`number`\n"
  },
  {
    "path": "docs/interfaces/BlockElementStyles.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BlockElementStyles\n\n# Interface: BlockElementStyles\n\n## Hierarchy\n\n- [`InlineElementStyles`](InlineElementStyles.md)\n\n  ↳ **`BlockElementStyles`**\n\n  ↳↳ [`ButtonStyles`](ButtonStyles.md)\n\n  ↳↳ [`ChecklistStyles`](ChecklistStyles.md)\n\n  ↳↳ [`InputStyles`](InputStyles.md)\n\n  ↳↳ [`StepStyles`](StepStyles.md)\n\n## Table of contents\n\n### Properties\n\n- [backgroundColor](BlockElementStyles.md#backgroundcolor)\n- [borderColor](BlockElementStyles.md#bordercolor)\n- [borderWidth](BlockElementStyles.md#borderwidth)\n- [boxShadow](BlockElementStyles.md#boxshadow)\n- [color](BlockElementStyles.md#color)\n- [fontFamily](BlockElementStyles.md#fontfamily)\n- [fontWeight](BlockElementStyles.md#fontweight)\n- [letterSpacing](BlockElementStyles.md#letterspacing)\n- [lineHeight](BlockElementStyles.md#lineheight)\n\n## Properties\n\n### backgroundColor\n\n• `Optional` **backgroundColor**: `string`\n\n___\n\n### borderColor\n\n• `Optional` **borderColor**: `string`\n\n___\n\n### borderWidth\n\n• `Optional` **borderWidth**: `string`\n\n___\n\n### boxShadow\n\n• `Optional` **boxShadow**: `string`\n\n___\n\n### color\n\n• `Optional` **color**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[color](InlineElementStyles.md#color)\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[fontFamily](InlineElementStyles.md#fontfamily)\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[fontWeight](InlineElementStyles.md#fontweight)\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[letterSpacing](InlineElementStyles.md#letterspacing)\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[lineHeight](InlineElementStyles.md#lineheight)\n"
  },
  {
    "path": "docs/interfaces/BlueSnapDirectAPMInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BlueSnapDirectAPMInitializeOptions\n\n# Interface: BlueSnapDirectAPMInitializeOptions\n\nA set of options that are required to initialize the BlueSnap V2 payment\r\nmethod.\n\nThe payment step is done through a web page via an iframe provided by the\r\nstrategy.\n\n```html\r\n<!-- This is where the BlueSnap iframe will be inserted. It can be an in-page container or a modal -->\r\n<div id=\"container\"></div>\n\n<!-- This is a cancellation button -->\r\n<button type=\"button\" id=\"cancel-button\"></button>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'bluesnapDirect',\r\n    bluesnapDirect: {\r\n        onLoad: (iframe) => {\r\n            document.getElementById('container')\r\n                .appendChild(iframe);\n\n            document.getElementById('cancel-button')\r\n                .addEventListener('click', () => {\r\n                    document.getElementById('container').innerHTML = '';\r\n                });\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [style](BlueSnapDirectAPMInitializeOptions.md#style)\n\n### Methods\n\n- [onLoad](BlueSnapDirectAPMInitializeOptions.md#onload)\n\n## Properties\n\n### style\n\n• `Optional` **style**: [`BlueSnapDirectStyleProps`](BlueSnapDirectStyleProps.md)\n\nA set of CSS properties to apply to the iframe.\n\n## Methods\n\n### onLoad\n\n▸ **onLoad**(`iframe`, `cancel`): `void`\n\nA callback that gets called when the iframe is ready to be added to the\r\ncurrent page. It is responsible for determining where the iframe should\r\nbe inserted in the DOM.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `iframe` | `HTMLIFrameElement` | The iframe element containing the payment web page provided by the strategy. |\n| `cancel` | () => `void` | A function, when called, will cancel the payment process and remove the iframe. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BlueSnapDirectStyleProps.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BlueSnapDirectStyleProps\n\n# Interface: BlueSnapDirectStyleProps\n\n## Table of contents\n\n### Properties\n\n- [border](BlueSnapDirectStyleProps.md#border)\n- [height](BlueSnapDirectStyleProps.md#height)\n- [width](BlueSnapDirectStyleProps.md#width)\n\n## Properties\n\n### border\n\n• `Optional` **border**: `string`\n\n___\n\n### height\n\n• `Optional` **height**: `string`\n\n___\n\n### width\n\n• `Optional` **width**: `string`\n"
  },
  {
    "path": "docs/interfaces/BlueSnapV2PaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BlueSnapV2PaymentInitializeOptions\n\n# Interface: BlueSnapV2PaymentInitializeOptions\n\nA set of options that are required to initialize the BlueSnap V2 payment\r\nmethod.\n\nThe payment step is done through a web page via an iframe provided by the\r\nstrategy.\n\n```html\r\n<!-- This is where the BlueSnap iframe will be inserted. It can be an in-page container or a modal -->\r\n<div id=\"container\"></div>\n\n<!-- This is a cancellation button -->\r\n<button type=\"button\" id=\"cancel-button\"></button>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'bluesnapv2',\r\n    bluesnapv2: {\r\n        onLoad: (iframe) => {\r\n            document.getElementById('container')\r\n                .appendChild(iframe);\n\n            document.getElementById('cancel-button')\r\n                .addEventListener('click', () => {\r\n                    document.getElementById('container').innerHTML = '';\r\n                });\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [style](BlueSnapV2PaymentInitializeOptions.md#style)\n\n### Methods\n\n- [onLoad](BlueSnapV2PaymentInitializeOptions.md#onload)\n\n## Properties\n\n### style\n\n• `Optional` **style**: [`BlueSnapV2StyleProps`](BlueSnapV2StyleProps.md)\n\nA set of CSS properties to apply to the iframe.\n\n## Methods\n\n### onLoad\n\n▸ **onLoad**(`iframe`, `cancel`): `void`\n\nA callback that gets called when the iframe is ready to be added to the\r\ncurrent page. It is responsible for determining where the iframe should\r\nbe inserted in the DOM.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `iframe` | `HTMLIFrameElement` | The iframe element containing the payment web page provided by the strategy. |\n| `cancel` | () => `void` | A function, when called, will cancel the payment process and remove the iframe. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BlueSnapV2StyleProps.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BlueSnapV2StyleProps\n\n# Interface: BlueSnapV2StyleProps\n\n## Table of contents\n\n### Properties\n\n- [border](BlueSnapV2StyleProps.md#border)\n- [height](BlueSnapV2StyleProps.md#height)\n- [width](BlueSnapV2StyleProps.md#width)\n\n## Properties\n\n### border\n\n• `Optional` **border**: `string`\n\n___\n\n### height\n\n• `Optional` **height**: `string`\n\n___\n\n### width\n\n• `Optional` **width**: `string`\n"
  },
  {
    "path": "docs/interfaces/BodlEventsPayload.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BodlEventsPayload\n\n# Interface: BodlEventsPayload\n\n## Indexable\n\n▪ [key: `string`]: `unknown`\n"
  },
  {
    "path": "docs/interfaces/BodlService.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BodlService\n\n# Interface: BodlService\n\n## Table of contents\n\n### Methods\n\n- [checkoutBegin](BodlService.md#checkoutbegin)\n- [clickPayButton](BodlService.md#clickpaybutton)\n- [customerEmailEntry](BodlService.md#customeremailentry)\n- [customerPaymentMethodExecuted](BodlService.md#customerpaymentmethodexecuted)\n- [customerSuggestionExecute](BodlService.md#customersuggestionexecute)\n- [customerSuggestionInit](BodlService.md#customersuggestioninit)\n- [exitCheckout](BodlService.md#exitcheckout)\n- [orderPurchased](BodlService.md#orderpurchased)\n- [paymentComplete](BodlService.md#paymentcomplete)\n- [paymentRejected](BodlService.md#paymentrejected)\n- [selectedPaymentMethod](BodlService.md#selectedpaymentmethod)\n- [showShippingMethods](BodlService.md#showshippingmethods)\n- [stepCompleted](BodlService.md#stepcompleted)\n\n## Methods\n\n### checkoutBegin\n\n▸ **checkoutBegin**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### clickPayButton\n\n▸ **clickPayButton**(`payload?`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `payload?` | [`BodlEventsPayload`](BodlEventsPayload.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### customerEmailEntry\n\n▸ **customerEmailEntry**(`email?`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `email?` | `string` |\n\n#### Returns\n\n`void`\n\n___\n\n### customerPaymentMethodExecuted\n\n▸ **customerPaymentMethodExecuted**(`payload?`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `payload?` | [`BodlEventsPayload`](BodlEventsPayload.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### customerSuggestionExecute\n\n▸ **customerSuggestionExecute**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### customerSuggestionInit\n\n▸ **customerSuggestionInit**(`payload?`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `payload?` | [`BodlEventsPayload`](BodlEventsPayload.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### exitCheckout\n\n▸ **exitCheckout**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### orderPurchased\n\n▸ **orderPurchased**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### paymentComplete\n\n▸ **paymentComplete**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### paymentRejected\n\n▸ **paymentRejected**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### selectedPaymentMethod\n\n▸ **selectedPaymentMethod**(`methodName?`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodName?` | `string` |\n\n#### Returns\n\n`void`\n\n___\n\n### showShippingMethods\n\n▸ **showShippingMethods**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### stepCompleted\n\n▸ **stepCompleted**(`step?`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `step?` | `string` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BodyStyles.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BodyStyles\n\n# Interface: BodyStyles\n\n## Table of contents\n\n### Properties\n\n- [backgroundColor](BodyStyles.md#backgroundcolor)\n\n## Properties\n\n### backgroundColor\n\n• `Optional` **backgroundColor**: `string`\n"
  },
  {
    "path": "docs/interfaces/BoletoDataPaymentMethodState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BoletoDataPaymentMethodState\n\n# Interface: BoletoDataPaymentMethodState\n\n## Table of contents\n\n### Properties\n\n- [paymentMethod](BoletoDataPaymentMethodState.md#paymentmethod)\n- [shopperName](BoletoDataPaymentMethodState.md#shoppername)\n- [socialSecurityNumber](BoletoDataPaymentMethodState.md#socialsecuritynumber)\n\n## Properties\n\n### paymentMethod\n\n• **paymentMethod**: [`AdyenPaymentMethodState`](AdyenPaymentMethodState.md)\n\n___\n\n### shopperName\n\n• `Optional` **shopperName**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `firstName?` | `string` |\n| `lastName?` | `string` |\n\n___\n\n### socialSecurityNumber\n\n• `Optional` **socialSecurityNumber**: `string`\n"
  },
  {
    "path": "docs/interfaces/BoletoState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BoletoState\n\n# Interface: BoletoState\n\n## Table of contents\n\n### Properties\n\n- [data](BoletoState.md#data)\n\n## Properties\n\n### data\n\n• **data**: [`BoletoDataPaymentMethodState`](BoletoDataPaymentMethodState.md)\n"
  },
  {
    "path": "docs/interfaces/BoltButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BoltButtonInitializeOptions\n\n# Interface: BoltButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [buyNowInitializeOptions](BoltButtonInitializeOptions.md#buynowinitializeoptions)\n- [style](BoltButtonInitializeOptions.md#style)\n\n## Properties\n\n### buyNowInitializeOptions\n\n• `Optional` **buyNowInitializeOptions**: [`BoltBuyNowInitializeOptions`](BoltBuyNowInitializeOptions.md)\n\nThe options that are required to initialize Buy Now functionality.\n\n___\n\n### style\n\n• `Optional` **style**: [`BoltButtonStyleOptions`](BoltButtonStyleOptions.md)\n"
  },
  {
    "path": "docs/interfaces/BoltButtonStyleOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BoltButtonStyleOptions\n\n# Interface: BoltButtonStyleOptions\n\n## Table of contents\n\n### Properties\n\n- [shape](BoltButtonStyleOptions.md#shape)\n- [size](BoltButtonStyleOptions.md#size)\n\n## Properties\n\n### shape\n\n• `Optional` **shape**: [`StyleButtonShape_2`](../enums/StyleButtonShape_2.md)\n\n___\n\n### size\n\n• `Optional` **size**: [`StyleButtonSize`](../enums/StyleButtonSize.md)\n"
  },
  {
    "path": "docs/interfaces/BoltBuyNowInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BoltBuyNowInitializeOptions\n\n# Interface: BoltBuyNowInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [storefrontApiToken](BoltBuyNowInitializeOptions.md#storefrontapitoken)\n\n### Methods\n\n- [getBuyNowCartRequestBody](BoltBuyNowInitializeOptions.md#getbuynowcartrequestbody)\n\n## Properties\n\n### storefrontApiToken\n\n• `Optional` **storefrontApiToken**: `string`\n\n## Methods\n\n### getBuyNowCartRequestBody\n\n▸ **getBuyNowCartRequestBody**(): `default`\n\n#### Returns\n\n`default`\n"
  },
  {
    "path": "docs/interfaces/BoltCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BoltCustomerInitializeOptions\n\n# Interface: BoltCustomerInitializeOptions\n\nA set of options that are required to initialize the customer step of\r\ncheckout to support Bolt.\n\n## Table of contents\n\n### Methods\n\n- [onInit](BoltCustomerInitializeOptions.md#oninit)\n\n## Methods\n\n### onInit\n\n▸ **onInit**(`hasBoltAccount`, `email?`): `void`\n\nA callback that gets called on initialize the strategy\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `hasBoltAccount` | `boolean` | The hasBoltAccount variable handle the result of checking user account availability on Bolt. |\n| `email?` | `string` | Email address which was used for checking user account availability on Bolt. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BoltPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BoltPaymentInitializeOptions\n\n# Interface: BoltPaymentInitializeOptions\n\nA set of options that are required to initialize the Bolt payment method with:\n\n1) Bolt Full Checkout:\n\nIf the customer chooses to pay with Bolt, he will be asked to\r\nenter his payment details via Bolt Full Checkout.\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'bolt',\r\n});\r\n```\n\n2) Bolt Client:\n\nIf the customer chooses to pay with Bolt in payment section of Checkout page,\r\nthe Bolt Payment Modal will be shown, and the customer will be asked\r\nto enter payment details via Bolt Modal\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'bolt',\r\n    bolt: {\r\n        useBigCommerceCheckout: true,\r\n    }\r\n});\r\n```\n\n3) Bolt Embedded:\n\nA set of options that are required to initialize the Bolt payment method\r\nfor presenting its credit card form.\n\n```html\r\n<!-- These containers are where the hosted (iframed) credit card field will be inserted -->\r\n<div id=\"bolt-embedded\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'bolt',\r\n    bolt: {\r\n        useBigCommerceCheckout: true,\r\n        containerId: 'boltEmbeddedContainerId',\r\n    }\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [containerId](BoltPaymentInitializeOptions.md#containerid)\n- [useBigCommerceCheckout](BoltPaymentInitializeOptions.md#usebigcommercecheckout)\n\n### Methods\n\n- [onPaymentSelect](BoltPaymentInitializeOptions.md#onpaymentselect)\n\n## Properties\n\n### containerId\n\n• `Optional` **containerId**: `string`\n\nThe CSS selector of a container where the Bolt Embedded payment field should be inserted into.\n\n___\n\n### useBigCommerceCheckout\n\n• **useBigCommerceCheckout**: `boolean`\n\n## Methods\n\n### onPaymentSelect\n\n▸ **onPaymentSelect**(`hasBoltAccount`): `void`\n\nA callback that gets called when the customer selects Bolt as payment option.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `hasBoltAccount` | `boolean` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BraintreeAchInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BraintreeAchInitializeOptions\n\n# Interface: BraintreeAchInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [getMandateText](BraintreeAchInitializeOptions.md#getmandatetext)\n\n## Properties\n\n### getMandateText\n\n• **getMandateText**: () => `string`\n\nA callback that returns text that should be displayed to the customer in UI for proof of authorization\n\n#### Type declaration\n\n▸ (): `string`\n\n##### Returns\n\n`string`\n"
  },
  {
    "path": "docs/interfaces/BraintreeAnalyticTrackerService.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BraintreeAnalyticTrackerService\n\n# Interface: BraintreeAnalyticTrackerService\n\n## Table of contents\n\n### Methods\n\n- [customerPaymentMethodExecuted](BraintreeAnalyticTrackerService.md#customerpaymentmethodexecuted)\n- [paymentComplete](BraintreeAnalyticTrackerService.md#paymentcomplete)\n- [selectedPaymentMethod](BraintreeAnalyticTrackerService.md#selectedpaymentmethod)\n- [walletButtonClick](BraintreeAnalyticTrackerService.md#walletbuttonclick)\n\n## Methods\n\n### customerPaymentMethodExecuted\n\n▸ **customerPaymentMethodExecuted**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### paymentComplete\n\n▸ **paymentComplete**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### selectedPaymentMethod\n\n▸ **selectedPaymentMethod**(`methodId`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId` | `string` |\n\n#### Returns\n\n`void`\n\n___\n\n### walletButtonClick\n\n▸ **walletButtonClick**(`methodId`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId` | `string` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BraintreeCreditCardPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BraintreeCreditCardPaymentInitializeOptions\n\n# Interface: BraintreeCreditCardPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bannerContainerId](BraintreeCreditCardPaymentInitializeOptions.md#bannercontainerid)\n- [containerId](BraintreeCreditCardPaymentInitializeOptions.md#containerid)\n- [form](BraintreeCreditCardPaymentInitializeOptions.md#form)\n- [threeDSecure](BraintreeCreditCardPaymentInitializeOptions.md#threedsecure)\n- [unsupportedCardBrands](BraintreeCreditCardPaymentInitializeOptions.md#unsupportedcardbrands)\n\n### Methods\n\n- [onError](BraintreeCreditCardPaymentInitializeOptions.md#onerror)\n- [onPaymentError](BraintreeCreditCardPaymentInitializeOptions.md#onpaymenterror)\n- [onRenderButton](BraintreeCreditCardPaymentInitializeOptions.md#onrenderbutton)\n- [submitForm](BraintreeCreditCardPaymentInitializeOptions.md#submitform)\n\n## Properties\n\n### bannerContainerId\n\n• `Optional` **bannerContainerId**: `string`\n\nThe location to insert the Pay Later Messages.\n\n___\n\n### containerId\n\n• `Optional` **containerId**: `string`\n\nThe CSS selector of a container where the payment widget should be inserted into.\n\n___\n\n### form\n\n• `Optional` **form**: `BraintreeFormOptions`\n\nPlease note that this option is currently in an early stage of\r\ndevelopment. Therefore the API is unstable and not ready for public\r\nconsumption.\n\n___\n\n### threeDSecure\n\n• `Optional` **threeDSecure**: `BraintreeThreeDSecureOptions`\n\n___\n\n### unsupportedCardBrands\n\n• `Optional` **unsupportedCardBrands**: `string`[]\n\nA list of card brands that are not supported by the merchant.\n\nList of supported brands by braintree can be found here: https://braintree.github.io/braintree-web/current/module-braintree-web_hosted-fields.html#~field\r\nsearch for `supportedCardBrands` property.\n\nList of credit cards brands:\r\n'visa',\r\n'mastercard',\r\n'american-express',\r\n'diners-club',\r\n'discover',\r\n'jcb',\r\n'union-pay',\r\n'maestro',\r\n'elo',\r\n'mir',\r\n'hiper',\r\n'hipercard'\n\n## Methods\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n#### Returns\n\n`void`\n\n___\n\n### onPaymentError\n\n▸ **onPaymentError**(`error`): `void`\n\nA callback that gets called if unable to submit payment.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | `default` \\| `BraintreeError` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n\n___\n\n### onRenderButton\n\n▸ **onRenderButton**(): `void`\n\nA callback right before render Smart Payment Button that gets called when\r\nSmart Payment Button is eligible. This callback can be used to hide the standard submit button.\n\n#### Returns\n\n`void`\n\n___\n\n### submitForm\n\n▸ **submitForm**(): `void`\n\nA callback for submitting payment form that gets called\r\nwhen buyer approved PayPal account.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BraintreeFastlaneCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BraintreeFastlaneCustomerInitializeOptions\n\n# Interface: BraintreeFastlaneCustomerInitializeOptions\n\nA set of options that are optional to initialize the Braintree Fastlane customer strategy\r\nthat are responsible for Braintree Fastlane components styling and initialization\n\n```js\r\nservice.initializeCustomer({\r\n    methodId: 'braintreeacceleratedcheckout', // 'braintree' only for A/B testing\r\n    braintreefastlane: {\r\n        styles: {\r\n             root: {\r\n                 backgroundColorPrimary: 'transparent',\r\n                 errorColor: '#C40B0B',\r\n                 fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n             },\r\n             input: {\r\n                 borderRadius: '0.25rem',\r\n                 borderColor: '#9E9E9E',\r\n                 focusBorderColor: '#4496F6',\r\n             },\r\n             toggle: {\r\n                 colorPrimary: '#0F005E',\r\n                 colorSecondary: '#ffffff',\r\n             },\r\n             text: {\r\n                 body: {\r\n                     color: '#222222',\r\n                     fontSize: '1rem',\r\n                 },\r\n                 caption: {\r\n                     color: '#515151',\r\n                     fontSize: '0.875rem',\r\n                 },\r\n             },\r\n             branding: 'light',\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [styles](BraintreeFastlaneCustomerInitializeOptions.md#styles)\n\n## Properties\n\n### styles\n\n• `Optional` **styles**: `BraintreeFastlaneStylesOption`\n\nIs a stylisation options for customizing PayPal Fastlane components\n\nNote: the styles for all Braintree Fastlane strategies should be the same,\r\nbecause they will be provided to PayPal library only for the first strategy initialization\r\nno matter what strategy was initialised first\n"
  },
  {
    "path": "docs/interfaces/BraintreeFastlanePaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BraintreeFastlanePaymentInitializeOptions\n\n# Interface: BraintreeFastlanePaymentInitializeOptions\n\nA set of options that are required to initialize the Braintree Fastlane payment\r\nmethod for presenting on the page.\n\nAlso, Braintree requires specific options to initialize Braintree Fastlane Credit Card Component\r\n```html\r\n<!-- This is where the Braintree Credit Card Component will be inserted -->\r\n<div id=\"container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'braintreeacceleratedcheckout',\r\n    braintreefastlane: {\r\n        onInit: (renderPayPalComponentMethod) => renderPayPalComponentMethod('#container-id'),\r\n        onChange: (showPayPalCardSelector) => showPayPalCardSelector(),\r\n        styles: {\r\n             root: {\r\n                 backgroundColorPrimary: 'transparent',\r\n                 errorColor: '#C40B0B',\r\n                 fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n             },\r\n             input: {\r\n                 borderRadius: '0.25rem',\r\n                 borderColor: '#9E9E9E',\r\n                 focusBorderColor: '#4496F6',\r\n             },\r\n             toggle: {\r\n                 colorPrimary: '#0F005E',\r\n                 colorSecondary: '#ffffff',\r\n             },\r\n             text: {\r\n                 body: {\r\n                     color: '#222222',\r\n                     fontSize: '1rem',\r\n                 },\r\n                 caption: {\r\n                     color: '#515151',\r\n                     fontSize: '0.875rem',\r\n                 },\r\n             },\r\n             branding: 'light',\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [onChange](BraintreeFastlanePaymentInitializeOptions.md#onchange)\n- [onError](BraintreeFastlanePaymentInitializeOptions.md#onerror)\n- [onInit](BraintreeFastlanePaymentInitializeOptions.md#oninit)\n- [styles](BraintreeFastlanePaymentInitializeOptions.md#styles)\n\n## Properties\n\n### onChange\n\n• `Optional` **onChange**: (`showPayPalCardSelector`: () => `Promise`\\<`undefined` \\| `CardInstrument`\\>) => `void`\n\nIs a callback that shows Braintree stored instruments\r\nwhen get triggered\n\n#### Type declaration\n\n▸ (`showPayPalCardSelector`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `showPayPalCardSelector` | () => `Promise`\\<`undefined` \\| `CardInstrument`\\> |\n\n##### Returns\n\n`void`\n\n___\n\n### onError\n\n• `Optional` **onError**: (`error`: `Error`) => `void`\n\n#### Type declaration\n\n▸ (`error`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `Error` |\n\n##### Returns\n\n`void`\n\n___\n\n### onInit\n\n• `Optional` **onInit**: (`renderPayPalComponentMethod`: (`container`: `string`) => `void`) => `void`\n\nIs a callback that takes the CSS selector of a container\r\nwhere the Braintree Fastlane form should be inserted into.\n\n#### Type declaration\n\n▸ (`renderPayPalComponentMethod`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `renderPayPalComponentMethod` | (`container`: `string`) => `void` |\n\n##### Returns\n\n`void`\n\n___\n\n### styles\n\n• `Optional` **styles**: `BraintreeFastlaneStylesOption`\n\nIs a stylisation options for customizing Braintree Fastlane components\n\nNote: the styles for all Braintree Fastlane strategies should be the same,\r\nbecause they will be provided to PayPal library only for the first strategy initialization\r\nno matter what strategy was initialised first\n"
  },
  {
    "path": "docs/interfaces/BraintreeFastlaneShippingInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BraintreeFastlaneShippingInitializeOptions\n\n# Interface: BraintreeFastlaneShippingInitializeOptions\n\nA set of options that are required to initialize the shipping step of\r\ncheckout in order to support Braintree Fastlane.\n\n## Table of contents\n\n### Properties\n\n- [onPayPalFastlaneAddressChange](BraintreeFastlaneShippingInitializeOptions.md#onpaypalfastlaneaddresschange)\n- [styles](BraintreeFastlaneShippingInitializeOptions.md#styles)\n\n## Properties\n\n### onPayPalFastlaneAddressChange\n\n• `Optional` **onPayPalFastlaneAddressChange**: (`showBraintreeFastlaneAddressSelector`: () => `Promise`\\<`undefined` \\| `CustomerAddress`\\>) => `void`\n\nIs a callback that shows Braintree Fastlane popup with customer addresses\r\nwhen get triggered\n\n#### Type declaration\n\n▸ (`showBraintreeFastlaneAddressSelector`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `showBraintreeFastlaneAddressSelector` | () => `Promise`\\<`undefined` \\| `CustomerAddress`\\> |\n\n##### Returns\n\n`void`\n\n___\n\n### styles\n\n• `Optional` **styles**: `BraintreeFastlaneStylesOption`\n\nIs a stylisation options for customizing PayPal Fastlane components\n\nNote: the styles for all Braintree Fastlane strategies should be the same,\r\nbecause they will be provided to PayPal library only for the first strategy initialization\r\nno matter what strategy was initialised first\n"
  },
  {
    "path": "docs/interfaces/BraintreeLocalMethodsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BraintreeLocalMethodsPaymentInitializeOptions\n\n# Interface: BraintreeLocalMethodsPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [buttonText](BraintreeLocalMethodsPaymentInitializeOptions.md#buttontext)\n- [container](BraintreeLocalMethodsPaymentInitializeOptions.md#container)\n\n### Methods\n\n- [onError](BraintreeLocalMethodsPaymentInitializeOptions.md#onerror)\n- [onRenderButton](BraintreeLocalMethodsPaymentInitializeOptions.md#onrenderbutton)\n- [submitForm](BraintreeLocalMethodsPaymentInitializeOptions.md#submitform)\n\n## Properties\n\n### buttonText\n\n• **buttonText**: `string`\n\nText that will be displayed on lpm button\n\n___\n\n### container\n\n• **container**: `string`\n\nThe CSS selector of a container where the payment widget should be inserted into.\n\n## Methods\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n#### Returns\n\n`void`\n\n___\n\n### onRenderButton\n\n▸ **onRenderButton**(): `void`\n\nA callback right before render Smart Payment Button that gets called when\r\nThis callback can be used to hide the standard submit button.\n\n#### Returns\n\n`void`\n\n___\n\n### submitForm\n\n▸ **submitForm**(): `void`\n\nA callback for submitting payment form that gets called\r\nwhen buyer approved PayPal account.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BraintreePaypalButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BraintreePaypalButtonInitializeOptions\n\n# Interface: BraintreePaypalButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [buyNowInitializeOptions](BraintreePaypalButtonInitializeOptions.md#buynowinitializeoptions)\n- [currencyCode](BraintreePaypalButtonInitializeOptions.md#currencycode)\n- [shippingAddress](BraintreePaypalButtonInitializeOptions.md#shippingaddress)\n- [style](BraintreePaypalButtonInitializeOptions.md#style)\n\n### Methods\n\n- [onAuthorizeError](BraintreePaypalButtonInitializeOptions.md#onauthorizeerror)\n- [onEligibilityFailure](BraintreePaypalButtonInitializeOptions.md#oneligibilityfailure)\n- [onError](BraintreePaypalButtonInitializeOptions.md#onerror)\n- [onPaymentError](BraintreePaypalButtonInitializeOptions.md#onpaymenterror)\n\n## Properties\n\n### buyNowInitializeOptions\n\n• `Optional` **buyNowInitializeOptions**: `Object`\n\nThe options that are required to initialize Buy Now functionality.\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `getBuyNowCartRequestBody?` | () => `void` \\| `default` |\n\n___\n\n### currencyCode\n\n• `Optional` **currencyCode**: `string`\n\nThe option that used to initialize a PayPal script with provided currency code.\n\n___\n\n### shippingAddress\n\n• `Optional` **shippingAddress**: ``null`` \\| `default`\n\nAddress to be used for shipping.\r\nIf not provided, it will use the first saved address from the active customer.\n\n___\n\n### style\n\n• `Optional` **style**: `Pick`\\<`PaypalStyleOptions`, ``\"color\"`` \\| ``\"height\"`` \\| ``\"label\"`` \\| ``\"layout\"`` \\| ``\"shape\"`` \\| ``\"size\"`` \\| ``\"fundingicons\"`` \\| ``\"tagline\"``\\>\n\nA set of styling options for the checkout button.\n\n## Methods\n\n### onAuthorizeError\n\n▸ **onAuthorizeError**(`error`): `void`\n\nA callback that gets called if unable to authorize and tokenize payment.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | `default` \\| `BraintreeError` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n\n___\n\n### onEligibilityFailure\n\n▸ **onEligibilityFailure**(): `void`\n\nA callback that gets called when Braintree SDK restricts to render PayPal component.\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback that gets called on any error instead of submit payment or authorization errors.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | `default` \\| `BraintreeError` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n\n___\n\n### onPaymentError\n\n▸ **onPaymentError**(`error`): `void`\n\nA callback that gets called if unable to submit payment.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | `default` \\| `BraintreeError` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BraintreePaypalCreditButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BraintreePaypalCreditButtonInitializeOptions\n\n# Interface: BraintreePaypalCreditButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [buyNowInitializeOptions](BraintreePaypalCreditButtonInitializeOptions.md#buynowinitializeoptions)\n- [currencyCode](BraintreePaypalCreditButtonInitializeOptions.md#currencycode)\n- [shippingAddress](BraintreePaypalCreditButtonInitializeOptions.md#shippingaddress)\n- [style](BraintreePaypalCreditButtonInitializeOptions.md#style)\n\n### Methods\n\n- [onAuthorizeError](BraintreePaypalCreditButtonInitializeOptions.md#onauthorizeerror)\n- [onEligibilityFailure](BraintreePaypalCreditButtonInitializeOptions.md#oneligibilityfailure)\n- [onError](BraintreePaypalCreditButtonInitializeOptions.md#onerror)\n- [onPaymentError](BraintreePaypalCreditButtonInitializeOptions.md#onpaymenterror)\n\n## Properties\n\n### buyNowInitializeOptions\n\n• `Optional` **buyNowInitializeOptions**: `Object`\n\nThe options that are required to initialize Buy Now functionality.\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `getBuyNowCartRequestBody?` | () => `void` \\| `default` |\n\n___\n\n### currencyCode\n\n• `Optional` **currencyCode**: `string`\n\nThe option that used to initialize a PayPal script with provided currency code.\n\n___\n\n### shippingAddress\n\n• `Optional` **shippingAddress**: ``null`` \\| `default`\n\nAddress to be used for shipping.\r\nIf not provided, it will use the first saved address from the active customer.\n\n___\n\n### style\n\n• `Optional` **style**: `Pick`\\<`PaypalStyleOptions`, ``\"color\"`` \\| ``\"height\"`` \\| ``\"label\"`` \\| ``\"layout\"`` \\| ``\"shape\"`` \\| ``\"size\"`` \\| ``\"fundingicons\"`` \\| ``\"tagline\"``\\>\n\nA set of styling options for the checkout button.\n\n## Methods\n\n### onAuthorizeError\n\n▸ **onAuthorizeError**(`error`): `void`\n\nA callback that gets called if unable to authorize and tokenize payment.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | `default` \\| `BraintreeError` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n\n___\n\n### onEligibilityFailure\n\n▸ **onEligibilityFailure**(): `void`\n\nA callback that gets called when Braintree SDK restricts to render PayPal component.\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback that gets called on any error instead of submit payment or authorization errors.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | `default` \\| `BraintreeError` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n\n___\n\n### onPaymentError\n\n▸ **onPaymentError**(`error`): `void`\n\nA callback that gets called if unable to submit payment.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | `default` \\| `BraintreeError` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BraintreePaypalCreditCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BraintreePaypalCreditCustomerInitializeOptions\n\n# Interface: BraintreePaypalCreditCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [buttonHeight](BraintreePaypalCreditCustomerInitializeOptions.md#buttonheight)\n- [container](BraintreePaypalCreditCustomerInitializeOptions.md#container)\n\n### Methods\n\n- [onClick](BraintreePaypalCreditCustomerInitializeOptions.md#onclick)\n- [onError](BraintreePaypalCreditCustomerInitializeOptions.md#onerror)\n\n## Properties\n\n### buttonHeight\n\n• `Optional` **buttonHeight**: `number`\n\n___\n\n### container\n\n• **container**: `string`\n\nThe ID of a container which the checkout button should be inserted into.\n\n## Methods\n\n### onClick\n\n▸ **onClick**(): `void`\n\nA callback that gets called when wallet button clicked\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback that gets called on any error instead of submit payment or authorization errors.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | `default` \\| `BraintreeError` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BraintreePaypalCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BraintreePaypalCustomerInitializeOptions\n\n# Interface: BraintreePaypalCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [buttonHeight](BraintreePaypalCustomerInitializeOptions.md#buttonheight)\n- [container](BraintreePaypalCustomerInitializeOptions.md#container)\n\n### Methods\n\n- [onClick](BraintreePaypalCustomerInitializeOptions.md#onclick)\n- [onError](BraintreePaypalCustomerInitializeOptions.md#onerror)\n\n## Properties\n\n### buttonHeight\n\n• `Optional` **buttonHeight**: `number`\n\n___\n\n### container\n\n• **container**: `string`\n\nThe ID of a container which the checkout button should be inserted into.\n\n## Methods\n\n### onClick\n\n▸ **onClick**(): `void`\n\nA callback that gets called when wallet button clicked\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback that gets called on any error instead of submit payment or authorization errors.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | `default` \\| `BraintreeError` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/BrowserInfo.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / BrowserInfo\n\n# Interface: BrowserInfo\n\n## Table of contents\n\n### Properties\n\n- [color\\_depth](BrowserInfo.md#color_depth)\n- [java\\_enabled](BrowserInfo.md#java_enabled)\n- [language](BrowserInfo.md#language)\n- [screen\\_height](BrowserInfo.md#screen_height)\n- [screen\\_width](BrowserInfo.md#screen_width)\n- [time\\_zone\\_offset](BrowserInfo.md#time_zone_offset)\n\n## Properties\n\n### color\\_depth\n\n• **color\\_depth**: `number`\n\n___\n\n### java\\_enabled\n\n• **java\\_enabled**: `boolean`\n\n___\n\n### language\n\n• **language**: `string`\n\n___\n\n### screen\\_height\n\n• **screen\\_height**: `number`\n\n___\n\n### screen\\_width\n\n• **screen\\_width**: `number`\n\n___\n\n### time\\_zone\\_offset\n\n• **time\\_zone\\_offset**: `string`\n"
  },
  {
    "path": "docs/interfaces/ButtonStyles.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ButtonStyles\n\n# Interface: ButtonStyles\n\n## Hierarchy\n\n- [`BlockElementStyles`](BlockElementStyles.md)\n\n  ↳ **`ButtonStyles`**\n\n## Table of contents\n\n### Properties\n\n- [active](ButtonStyles.md#active)\n- [backgroundColor](ButtonStyles.md#backgroundcolor)\n- [borderColor](ButtonStyles.md#bordercolor)\n- [borderWidth](ButtonStyles.md#borderwidth)\n- [boxShadow](ButtonStyles.md#boxshadow)\n- [color](ButtonStyles.md#color)\n- [disabled](ButtonStyles.md#disabled)\n- [focus](ButtonStyles.md#focus)\n- [fontFamily](ButtonStyles.md#fontfamily)\n- [fontWeight](ButtonStyles.md#fontweight)\n- [hover](ButtonStyles.md#hover)\n- [letterSpacing](ButtonStyles.md#letterspacing)\n- [lineHeight](ButtonStyles.md#lineheight)\n\n## Properties\n\n### active\n\n• `Optional` **active**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### backgroundColor\n\n• `Optional` **backgroundColor**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[backgroundColor](BlockElementStyles.md#backgroundcolor)\n\n___\n\n### borderColor\n\n• `Optional` **borderColor**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[borderColor](BlockElementStyles.md#bordercolor)\n\n___\n\n### borderWidth\n\n• `Optional` **borderWidth**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[borderWidth](BlockElementStyles.md#borderwidth)\n\n___\n\n### boxShadow\n\n• `Optional` **boxShadow**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[boxShadow](BlockElementStyles.md#boxshadow)\n\n___\n\n### color\n\n• `Optional` **color**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[color](BlockElementStyles.md#color)\n\n___\n\n### disabled\n\n• `Optional` **disabled**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### focus\n\n• `Optional` **focus**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[fontFamily](BlockElementStyles.md#fontfamily)\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[fontWeight](BlockElementStyles.md#fontweight)\n\n___\n\n### hover\n\n• `Optional` **hover**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[letterSpacing](BlockElementStyles.md#letterspacing)\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[lineHeight](BlockElementStyles.md#lineheight)\n"
  },
  {
    "path": "docs/interfaces/Capabilities.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Capabilities\n\n# Interface: Capabilities\n\n## Table of contents\n\n### Properties\n\n- [billing](Capabilities.md#billing)\n- [customer](Capabilities.md#customer)\n- [orderConfirmation](Capabilities.md#orderconfirmation)\n- [payment](Capabilities.md#payment)\n- [shipping](Capabilities.md#shipping)\n- [userJourney](Capabilities.md#userjourney)\n\n## Properties\n\n### billing\n\n• **billing**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `hideSaveToAddressBookCheck` | `boolean` |\n| `restrictManualAddressEntry` | `boolean` |\n\n___\n\n### customer\n\n• **customer**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `superAdminCompanySelector` | `boolean` |\n\n___\n\n### orderConfirmation\n\n• **orderConfirmation**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `invoiceRedirect` | `boolean` |\n| `orderSummary` | `boolean` |\n| `persistB2BMetadata` | `boolean` |\n| `storeInvoiceReference` | `boolean` |\n| `storeQuoteId` | `boolean` |\n\n___\n\n### payment\n\n• **payment**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `additionalField` | ``null`` \\| \\{ `label`: `string` ; `required`: `boolean`  } |\n| `additionalPaymentNotes` | `boolean` |\n| `b2bPaymentMethodFilter` | `boolean` |\n| `excludeOfflineForInvoice` | `boolean` |\n| `excludePPSDK` | `boolean` |\n| `paymentMethodFiltering` | `boolean` |\n| `poConfig` | ``null`` \\| \\{ `creditLimit`: `number` ; `currency`: `string` ; `label`: `string` ; `required`: `boolean`  } |\n| `poPaymentMethod` | `boolean` |\n\n___\n\n### shipping\n\n• **shipping**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `hideBillingSameAsShippingCheck` | `boolean` |\n| `hideSaveToAddressBookCheck` | `boolean` |\n| `prefillCompanyAddress` | `boolean` |\n| `restrictManualAddressEntry` | `boolean` |\n\n___\n\n### userJourney\n\n• **userJourney**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `disableEditCart` | `boolean` |\n| `disableStoreCredit` | `boolean` |\n| `hasAddressExtraFields` | `boolean` |\n| `hasCompanyAddressBook` | `boolean` |\n| `hasOrderExtraFields` | `boolean` |\n| `requiresB2BToken` | `boolean` |\n"
  },
  {
    "path": "docs/interfaces/CardCvcElementOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CardCvcElementOptions\n\n# Interface: CardCvcElementOptions\n\n## Hierarchy\n\n- [`BaseIndividualElementOptions`](BaseIndividualElementOptions.md)\n\n  ↳ **`CardCvcElementOptions`**\n\n## Table of contents\n\n### Properties\n\n- [classes](CardCvcElementOptions.md#classes)\n- [containerId](CardCvcElementOptions.md#containerid)\n- [disabled](CardCvcElementOptions.md#disabled)\n- [placeholder](CardCvcElementOptions.md#placeholder)\n- [style](CardCvcElementOptions.md#style)\n\n## Properties\n\n### classes\n\n• `Optional` **classes**: [`StripeElementClasses`](StripeElementClasses.md)\n\nSet custom class names on the container DOM element when the Stripe element is in a particular state.\n\n#### Inherited from\n\n[BaseIndividualElementOptions](BaseIndividualElementOptions.md).[classes](BaseIndividualElementOptions.md#classes)\n\n___\n\n### containerId\n\n• **containerId**: `string`\n\n#### Inherited from\n\n[BaseIndividualElementOptions](BaseIndividualElementOptions.md).[containerId](BaseIndividualElementOptions.md#containerid)\n\n___\n\n### disabled\n\n• `Optional` **disabled**: `boolean`\n\nApplies a disabled state to the Element such that user input is not accepted. Default is false.\n\n#### Inherited from\n\n[BaseIndividualElementOptions](BaseIndividualElementOptions.md).[disabled](BaseIndividualElementOptions.md#disabled)\n\n___\n\n### placeholder\n\n• `Optional` **placeholder**: `string`\n\n___\n\n### style\n\n• `Optional` **style**: [`StripeElementStyle`](StripeElementStyle.md)\n\nCustomize the appearance of an element using CSS properties passed in a [Style](https://stripe.com/docs/js/appendix/style) object,\r\nwhich consists of CSS properties nested under objects for each variant.\n\n#### Inherited from\n\n[BaseIndividualElementOptions](BaseIndividualElementOptions.md).[style](BaseIndividualElementOptions.md#style)\n"
  },
  {
    "path": "docs/interfaces/CardDataPaymentMethodState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CardDataPaymentMethodState\n\n# Interface: CardDataPaymentMethodState\n\n## Table of contents\n\n### Properties\n\n- [installments](CardDataPaymentMethodState.md#installments)\n- [paymentMethod](CardDataPaymentMethodState.md#paymentmethod)\n\n## Properties\n\n### installments\n\n• `Optional` **installments**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `plan?` | ``\"string\"`` |\n| `value` | `number` |\n\n___\n\n### paymentMethod\n\n• **paymentMethod**: [`CardPaymentMethodState`](CardPaymentMethodState.md)\n"
  },
  {
    "path": "docs/interfaces/CardElementOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CardElementOptions\n\n# Interface: CardElementOptions\n\n## Hierarchy\n\n- [`BaseElementOptions`](BaseElementOptions.md)\n\n  ↳ **`CardElementOptions`**\n\n## Table of contents\n\n### Properties\n\n- [classes](CardElementOptions.md#classes)\n- [disabled](CardElementOptions.md#disabled)\n- [hideIcon](CardElementOptions.md#hideicon)\n- [hidePostalCode](CardElementOptions.md#hidepostalcode)\n- [iconStyle](CardElementOptions.md#iconstyle)\n- [style](CardElementOptions.md#style)\n- [value](CardElementOptions.md#value)\n\n## Properties\n\n### classes\n\n• `Optional` **classes**: [`StripeElementClasses`](StripeElementClasses.md)\n\nSet custom class names on the container DOM element when the Stripe element is in a particular state.\n\n#### Inherited from\n\n[BaseElementOptions](BaseElementOptions.md).[classes](BaseElementOptions.md#classes)\n\n___\n\n### disabled\n\n• `Optional` **disabled**: `boolean`\n\nApplies a disabled state to the Element such that user input is not accepted. Default is false.\n\n#### Inherited from\n\n[BaseElementOptions](BaseElementOptions.md).[disabled](BaseElementOptions.md#disabled)\n\n___\n\n### hideIcon\n\n• `Optional` **hideIcon**: `boolean`\n\n___\n\n### hidePostalCode\n\n• `Optional` **hidePostalCode**: `boolean`\n\nHide the postal code field. Default is false. If you are already collecting a\r\nfull billing address or postal code elsewhere, set this to true.\n\n___\n\n### iconStyle\n\n• `Optional` **iconStyle**: [`IconStyle`](../enums/IconStyle.md)\n\nAppearance of the icon in the Element.\n\n___\n\n### style\n\n• `Optional` **style**: [`StripeElementStyle`](StripeElementStyle.md)\n\nCustomize the appearance of an element using CSS properties passed in a [Style](https://stripe.com/docs/js/appendix/style) object,\r\nwhich consists of CSS properties nested under objects for each variant.\n\n#### Inherited from\n\n[BaseElementOptions](BaseElementOptions.md).[style](BaseElementOptions.md#style)\n\n___\n\n### value\n\n• `Optional` **value**: `string`\n\nA pre-filled set of values to include in the input (e.g., {postalCode: '94110'}).\r\nNote that sensitive card information (card number, CVC, and expiration date)\r\ncannot be pre-filled\n"
  },
  {
    "path": "docs/interfaces/CardExpiryElementOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CardExpiryElementOptions\n\n# Interface: CardExpiryElementOptions\n\n## Hierarchy\n\n- [`BaseIndividualElementOptions`](BaseIndividualElementOptions.md)\n\n  ↳ **`CardExpiryElementOptions`**\n\n## Table of contents\n\n### Properties\n\n- [classes](CardExpiryElementOptions.md#classes)\n- [containerId](CardExpiryElementOptions.md#containerid)\n- [disabled](CardExpiryElementOptions.md#disabled)\n- [placeholder](CardExpiryElementOptions.md#placeholder)\n- [style](CardExpiryElementOptions.md#style)\n\n## Properties\n\n### classes\n\n• `Optional` **classes**: [`StripeElementClasses`](StripeElementClasses.md)\n\nSet custom class names on the container DOM element when the Stripe element is in a particular state.\n\n#### Inherited from\n\n[BaseIndividualElementOptions](BaseIndividualElementOptions.md).[classes](BaseIndividualElementOptions.md#classes)\n\n___\n\n### containerId\n\n• **containerId**: `string`\n\n#### Inherited from\n\n[BaseIndividualElementOptions](BaseIndividualElementOptions.md).[containerId](BaseIndividualElementOptions.md#containerid)\n\n___\n\n### disabled\n\n• `Optional` **disabled**: `boolean`\n\nApplies a disabled state to the Element such that user input is not accepted. Default is false.\n\n#### Inherited from\n\n[BaseIndividualElementOptions](BaseIndividualElementOptions.md).[disabled](BaseIndividualElementOptions.md#disabled)\n\n___\n\n### placeholder\n\n• `Optional` **placeholder**: `string`\n\n___\n\n### style\n\n• `Optional` **style**: [`StripeElementStyle`](StripeElementStyle.md)\n\nCustomize the appearance of an element using CSS properties passed in a [Style](https://stripe.com/docs/js/appendix/style) object,\r\nwhich consists of CSS properties nested under objects for each variant.\n\n#### Inherited from\n\n[BaseIndividualElementOptions](BaseIndividualElementOptions.md).[style](BaseIndividualElementOptions.md#style)\n"
  },
  {
    "path": "docs/interfaces/CardInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CardInstrument\n\n# Interface: CardInstrument\n\n## Hierarchy\n\n- [`BaseInstrument`](BaseInstrument.md)\n\n  ↳ **`CardInstrument`**\n\n## Table of contents\n\n### Properties\n\n- [bigpayToken](CardInstrument.md#bigpaytoken)\n- [brand](CardInstrument.md#brand)\n- [defaultInstrument](CardInstrument.md#defaultinstrument)\n- [expiryMonth](CardInstrument.md#expirymonth)\n- [expiryYear](CardInstrument.md#expiryyear)\n- [iin](CardInstrument.md#iin)\n- [last4](CardInstrument.md#last4)\n- [method](CardInstrument.md#method)\n- [provider](CardInstrument.md#provider)\n- [trustedShippingAddress](CardInstrument.md#trustedshippingaddress)\n- [type](CardInstrument.md#type)\n- [untrustedShippingCardVerificationMode](CardInstrument.md#untrustedshippingcardverificationmode)\n\n## Properties\n\n### bigpayToken\n\n• **bigpayToken**: `string`\n\n#### Inherited from\n\n[BaseInstrument](BaseInstrument.md).[bigpayToken](BaseInstrument.md#bigpaytoken)\n\n___\n\n### brand\n\n• **brand**: `string`\n\n___\n\n### defaultInstrument\n\n• **defaultInstrument**: `boolean`\n\n#### Inherited from\n\n[BaseInstrument](BaseInstrument.md).[defaultInstrument](BaseInstrument.md#defaultinstrument)\n\n___\n\n### expiryMonth\n\n• **expiryMonth**: `string`\n\n___\n\n### expiryYear\n\n• **expiryYear**: `string`\n\n___\n\n### iin\n\n• **iin**: `string`\n\n___\n\n### last4\n\n• **last4**: `string`\n\n___\n\n### method\n\n• **method**: `string`\n\n#### Inherited from\n\n[BaseInstrument](BaseInstrument.md).[method](BaseInstrument.md#method)\n\n___\n\n### provider\n\n• **provider**: `string`\n\n#### Inherited from\n\n[BaseInstrument](BaseInstrument.md).[provider](BaseInstrument.md#provider)\n\n___\n\n### trustedShippingAddress\n\n• **trustedShippingAddress**: `boolean`\n\n#### Inherited from\n\n[BaseInstrument](BaseInstrument.md).[trustedShippingAddress](BaseInstrument.md#trustedshippingaddress)\n\n___\n\n### type\n\n• **type**: ``\"card\"``\n\n#### Overrides\n\n[BaseInstrument](BaseInstrument.md).[type](BaseInstrument.md#type)\n\n___\n\n### untrustedShippingCardVerificationMode\n\n• **untrustedShippingCardVerificationMode**: [`UntrustedShippingCardVerificationType`](../enums/UntrustedShippingCardVerificationType.md)\n"
  },
  {
    "path": "docs/interfaces/CardNumberElementOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CardNumberElementOptions\n\n# Interface: CardNumberElementOptions\n\n## Hierarchy\n\n- [`BaseIndividualElementOptions`](BaseIndividualElementOptions.md)\n\n  ↳ **`CardNumberElementOptions`**\n\n## Table of contents\n\n### Properties\n\n- [classes](CardNumberElementOptions.md#classes)\n- [containerId](CardNumberElementOptions.md#containerid)\n- [disabled](CardNumberElementOptions.md#disabled)\n- [iconStyle](CardNumberElementOptions.md#iconstyle)\n- [placeholder](CardNumberElementOptions.md#placeholder)\n- [showIcon](CardNumberElementOptions.md#showicon)\n- [style](CardNumberElementOptions.md#style)\n\n## Properties\n\n### classes\n\n• `Optional` **classes**: [`StripeElementClasses`](StripeElementClasses.md)\n\nSet custom class names on the container DOM element when the Stripe element is in a particular state.\n\n#### Inherited from\n\n[BaseIndividualElementOptions](BaseIndividualElementOptions.md).[classes](BaseIndividualElementOptions.md#classes)\n\n___\n\n### containerId\n\n• **containerId**: `string`\n\n#### Inherited from\n\n[BaseIndividualElementOptions](BaseIndividualElementOptions.md).[containerId](BaseIndividualElementOptions.md#containerid)\n\n___\n\n### disabled\n\n• `Optional` **disabled**: `boolean`\n\nApplies a disabled state to the Element such that user input is not accepted. Default is false.\n\n#### Inherited from\n\n[BaseIndividualElementOptions](BaseIndividualElementOptions.md).[disabled](BaseIndividualElementOptions.md#disabled)\n\n___\n\n### iconStyle\n\n• `Optional` **iconStyle**: [`IconStyle`](../enums/IconStyle.md)\n\nAppearance of the icon in the Element. Either `solid` or `default`\n\n___\n\n### placeholder\n\n• `Optional` **placeholder**: `string`\n\n___\n\n### showIcon\n\n• `Optional` **showIcon**: `boolean`\n\n___\n\n### style\n\n• `Optional` **style**: [`StripeElementStyle`](StripeElementStyle.md)\n\nCustomize the appearance of an element using CSS properties passed in a [Style](https://stripe.com/docs/js/appendix/style) object,\r\nwhich consists of CSS properties nested under objects for each variant.\n\n#### Inherited from\n\n[BaseIndividualElementOptions](BaseIndividualElementOptions.md).[style](BaseIndividualElementOptions.md#style)\n"
  },
  {
    "path": "docs/interfaces/CardPaymentMethodState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CardPaymentMethodState\n\n# Interface: CardPaymentMethodState\n\n## Hierarchy\n\n- [`AdyenPaymentMethodState`](AdyenPaymentMethodState.md)\n\n  ↳ **`CardPaymentMethodState`**\n\n## Table of contents\n\n### Properties\n\n- [encryptedCardNumber](CardPaymentMethodState.md#encryptedcardnumber)\n- [encryptedExpiryMonth](CardPaymentMethodState.md#encryptedexpirymonth)\n- [encryptedExpiryYear](CardPaymentMethodState.md#encryptedexpiryyear)\n- [encryptedSecurityCode](CardPaymentMethodState.md#encryptedsecuritycode)\n- [holderName](CardPaymentMethodState.md#holdername)\n- [type](CardPaymentMethodState.md#type)\n\n## Properties\n\n### encryptedCardNumber\n\n• **encryptedCardNumber**: `string`\n\n___\n\n### encryptedExpiryMonth\n\n• **encryptedExpiryMonth**: `string`\n\n___\n\n### encryptedExpiryYear\n\n• **encryptedExpiryYear**: `string`\n\n___\n\n### encryptedSecurityCode\n\n• **encryptedSecurityCode**: `string`\n\n___\n\n### holderName\n\n• **holderName**: `string`\n\n___\n\n### type\n\n• **type**: `string`\n\n#### Inherited from\n\n[AdyenPaymentMethodState](AdyenPaymentMethodState.md).[type](AdyenPaymentMethodState.md#type)\n"
  },
  {
    "path": "docs/interfaces/CardState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CardState\n\n# Interface: CardState\n\n## Table of contents\n\n### Properties\n\n- [data](CardState.md#data)\n- [errors](CardState.md#errors)\n- [isValid](CardState.md#isvalid)\n- [valid](CardState.md#valid)\n\n## Properties\n\n### data\n\n• **data**: [`CardDataPaymentMethodState`](CardDataPaymentMethodState.md)\n\n___\n\n### errors\n\n• `Optional` **errors**: [`CardStateErrors`](CardStateErrors.md)\n\n___\n\n### isValid\n\n• `Optional` **isValid**: `boolean`\n\n___\n\n### valid\n\n• `Optional` **valid**: `Object`\n\n#### Index signature\n\n▪ [key: `string`]: `boolean`\n"
  },
  {
    "path": "docs/interfaces/CardStateData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CardStateData\n\n# Interface: CardStateData\n\n## Table of contents\n\n### Properties\n\n- [encryptedCardNumber](CardStateData.md#encryptedcardnumber)\n- [encryptedExpiryMonth](CardStateData.md#encryptedexpirymonth)\n- [encryptedExpiryYear](CardStateData.md#encryptedexpiryyear)\n- [encryptedSecurityCode](CardStateData.md#encryptedsecuritycode)\n- [holderName](CardStateData.md#holdername)\n\n## Properties\n\n### encryptedCardNumber\n\n• **encryptedCardNumber**: `string`\n\n___\n\n### encryptedExpiryMonth\n\n• **encryptedExpiryMonth**: `string`\n\n___\n\n### encryptedExpiryYear\n\n• **encryptedExpiryYear**: `string`\n\n___\n\n### encryptedSecurityCode\n\n• **encryptedSecurityCode**: `string`\n\n___\n\n### holderName\n\n• **holderName**: `string`\n"
  },
  {
    "path": "docs/interfaces/CardStateErrors.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CardStateErrors\n\n# Interface: CardStateErrors\n\n## Indexable\n\n▪ [key: `string`]: `string`\n"
  },
  {
    "path": "docs/interfaces/CardingProtectionActionData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CardingProtectionActionData\n\n# Interface: CardingProtectionActionData\n\n## Table of contents\n\n### Properties\n\n- [human\\_verification\\_token](CardingProtectionActionData.md#human_verification_token)\n\n## Properties\n\n### human\\_verification\\_token\n\n• `Optional` **human\\_verification\\_token**: `string`\n"
  },
  {
    "path": "docs/interfaces/Cart.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Cart\n\n# Interface: Cart\n\n## Table of contents\n\n### Properties\n\n- [baseAmount](Cart.md#baseamount)\n- [cartAmount](Cart.md#cartamount)\n- [companyId](Cart.md#companyid)\n- [coupons](Cart.md#coupons)\n- [createdTime](Cart.md#createdtime)\n- [currency](Cart.md#currency)\n- [customerId](Cart.md#customerid)\n- [discountAmount](Cart.md#discountamount)\n- [discounts](Cart.md#discounts)\n- [email](Cart.md#email)\n- [id](Cart.md#id)\n- [isTaxIncluded](Cart.md#istaxincluded)\n- [lineItems](Cart.md#lineitems)\n- [locale](Cart.md#locale)\n- [source](Cart.md#source)\n- [updatedTime](Cart.md#updatedtime)\n\n## Properties\n\n### baseAmount\n\n• **baseAmount**: `number`\n\n___\n\n### cartAmount\n\n• **cartAmount**: `number`\n\n___\n\n### companyId\n\n• **companyId**: ``null`` \\| `number`\n\n___\n\n### coupons\n\n• **coupons**: [`Coupon`](Coupon.md)[]\n\nThis is an array of all applied coupons.\n\n___\n\n### createdTime\n\n• **createdTime**: `string`\n\n___\n\n### currency\n\n• **currency**: [`Currency`](Currency.md)\n\n___\n\n### customerId\n\n• **customerId**: `number`\n\n___\n\n### discountAmount\n\n• **discountAmount**: `number`\n\nThis is the total amount of discount applied on line_items.\n\n___\n\n### discounts\n\n• **discounts**: [`Discount`](Discount.md)[]\n\nThis is the total amount of discount applied on cart including coupons and line_items discounts.\n\n___\n\n### email\n\n• **email**: `string`\n\n___\n\n### id\n\n• **id**: `string`\n\n___\n\n### isTaxIncluded\n\n• **isTaxIncluded**: `boolean`\n\n___\n\n### lineItems\n\n• **lineItems**: [`LineItemMap`](LineItemMap.md)\n\n___\n\n### locale\n\n• **locale**: `string`\n\n___\n\n### source\n\n• `Optional` **source**: `BuyNow`\n\n___\n\n### updatedTime\n\n• **updatedTime**: `string`\n"
  },
  {
    "path": "docs/interfaces/CartSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CartSelector\n\n# Interface: CartSelector\n\n## Table of contents\n\n### Methods\n\n- [getCart](CartSelector.md#getcart)\n- [getCartOrThrow](CartSelector.md#getcartorthrow)\n- [getLoadError](CartSelector.md#getloaderror)\n- [getLocale](CartSelector.md#getlocale)\n- [isLoading](CartSelector.md#isloading)\n\n## Methods\n\n### getCart\n\n▸ **getCart**(): `undefined` \\| [`Cart`](Cart.md)\n\n#### Returns\n\n`undefined` \\| [`Cart`](Cart.md)\n\n___\n\n### getCartOrThrow\n\n▸ **getCartOrThrow**(): [`Cart`](Cart.md)\n\n#### Returns\n\n[`Cart`](Cart.md)\n\n___\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getLocale\n\n▸ **getLocale**(): `undefined` \\| `string`\n\n#### Returns\n\n`undefined` \\| `string`\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/CheckableInputStyles.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckableInputStyles\n\n# Interface: CheckableInputStyles\n\n## Hierarchy\n\n- [`InputStyles`](InputStyles.md)\n\n  ↳ **`CheckableInputStyles`**\n\n## Table of contents\n\n### Properties\n\n- [active](CheckableInputStyles.md#active)\n- [backgroundColor](CheckableInputStyles.md#backgroundcolor)\n- [borderColor](CheckableInputStyles.md#bordercolor)\n- [borderWidth](CheckableInputStyles.md#borderwidth)\n- [boxShadow](CheckableInputStyles.md#boxshadow)\n- [checked](CheckableInputStyles.md#checked)\n- [color](CheckableInputStyles.md#color)\n- [disabled](CheckableInputStyles.md#disabled)\n- [error](CheckableInputStyles.md#error)\n- [focus](CheckableInputStyles.md#focus)\n- [fontFamily](CheckableInputStyles.md#fontfamily)\n- [fontWeight](CheckableInputStyles.md#fontweight)\n- [hover](CheckableInputStyles.md#hover)\n- [letterSpacing](CheckableInputStyles.md#letterspacing)\n- [lineHeight](CheckableInputStyles.md#lineheight)\n\n## Properties\n\n### active\n\n• `Optional` **active**: [`BlockElementStyles`](BlockElementStyles.md)\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[active](InputStyles.md#active)\n\n___\n\n### backgroundColor\n\n• `Optional` **backgroundColor**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[backgroundColor](InputStyles.md#backgroundcolor)\n\n___\n\n### borderColor\n\n• `Optional` **borderColor**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[borderColor](InputStyles.md#bordercolor)\n\n___\n\n### borderWidth\n\n• `Optional` **borderWidth**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[borderWidth](InputStyles.md#borderwidth)\n\n___\n\n### boxShadow\n\n• `Optional` **boxShadow**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[boxShadow](InputStyles.md#boxshadow)\n\n___\n\n### checked\n\n• `Optional` **checked**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### color\n\n• `Optional` **color**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[color](InputStyles.md#color)\n\n___\n\n### disabled\n\n• `Optional` **disabled**: [`BlockElementStyles`](BlockElementStyles.md)\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[disabled](InputStyles.md#disabled)\n\n___\n\n### error\n\n• `Optional` **error**: [`InputStyles`](InputStyles.md)\n\n#### Overrides\n\n[InputStyles](InputStyles.md).[error](InputStyles.md#error)\n\n___\n\n### focus\n\n• `Optional` **focus**: [`BlockElementStyles`](BlockElementStyles.md)\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[focus](InputStyles.md#focus)\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[fontFamily](InputStyles.md#fontfamily)\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[fontWeight](InputStyles.md#fontweight)\n\n___\n\n### hover\n\n• `Optional` **hover**: [`BlockElementStyles`](BlockElementStyles.md)\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[hover](InputStyles.md#hover)\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[letterSpacing](InputStyles.md#letterspacing)\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[lineHeight](InputStyles.md#lineheight)\n"
  },
  {
    "path": "docs/interfaces/ChecklistStyles.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ChecklistStyles\n\n# Interface: ChecklistStyles\n\n## Hierarchy\n\n- [`BlockElementStyles`](BlockElementStyles.md)\n\n  ↳ **`ChecklistStyles`**\n\n## Table of contents\n\n### Properties\n\n- [backgroundColor](ChecklistStyles.md#backgroundcolor)\n- [borderColor](ChecklistStyles.md#bordercolor)\n- [borderWidth](ChecklistStyles.md#borderwidth)\n- [boxShadow](ChecklistStyles.md#boxshadow)\n- [checked](ChecklistStyles.md#checked)\n- [color](ChecklistStyles.md#color)\n- [fontFamily](ChecklistStyles.md#fontfamily)\n- [fontWeight](ChecklistStyles.md#fontweight)\n- [hover](ChecklistStyles.md#hover)\n- [letterSpacing](ChecklistStyles.md#letterspacing)\n- [lineHeight](ChecklistStyles.md#lineheight)\n\n## Properties\n\n### backgroundColor\n\n• `Optional` **backgroundColor**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[backgroundColor](BlockElementStyles.md#backgroundcolor)\n\n___\n\n### borderColor\n\n• `Optional` **borderColor**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[borderColor](BlockElementStyles.md#bordercolor)\n\n___\n\n### borderWidth\n\n• `Optional` **borderWidth**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[borderWidth](BlockElementStyles.md#borderwidth)\n\n___\n\n### boxShadow\n\n• `Optional` **boxShadow**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[boxShadow](BlockElementStyles.md#boxshadow)\n\n___\n\n### checked\n\n• `Optional` **checked**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### color\n\n• `Optional` **color**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[color](BlockElementStyles.md#color)\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[fontFamily](BlockElementStyles.md#fontfamily)\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[fontWeight](BlockElementStyles.md#fontweight)\n\n___\n\n### hover\n\n• `Optional` **hover**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[letterSpacing](BlockElementStyles.md#letterspacing)\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[lineHeight](BlockElementStyles.md#lineheight)\n"
  },
  {
    "path": "docs/interfaces/Checkout.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Checkout\n\n# Interface: Checkout\n\n## Table of contents\n\n### Properties\n\n- [balanceDue](Checkout.md#balancedue)\n- [billingAddress](Checkout.md#billingaddress)\n- [cart](Checkout.md#cart)\n- [channelId](Checkout.md#channelid)\n- [comparisonShippingCost](Checkout.md#comparisonshippingcost)\n- [consignments](Checkout.md#consignments)\n- [coupons](Checkout.md#coupons)\n- [createdTime](Checkout.md#createdtime)\n- [customer](Checkout.md#customer)\n- [customerMessage](Checkout.md#customermessage)\n- [discounts](Checkout.md#discounts)\n- [displayDiscountTotal](Checkout.md#displaydiscounttotal)\n- [fees](Checkout.md#fees)\n- [giftCertificates](Checkout.md#giftcertificates)\n- [giftWrappingCostTotal](Checkout.md#giftwrappingcosttotal)\n- [grandTotal](Checkout.md#grandtotal)\n- [handlingCostTotal](Checkout.md#handlingcosttotal)\n- [hasOrderLevelAutoDiscountMaxLimitReached](Checkout.md#hasorderlevelautodiscountmaxlimitreached)\n- [id](Checkout.md#id)\n- [isStoreCreditApplied](Checkout.md#isstorecreditapplied)\n- [manualDiscountTotal](Checkout.md#manualdiscounttotal)\n- [orderBasedAutoDiscountTotal](Checkout.md#orderbasedautodiscounttotal)\n- [orderId](Checkout.md#orderid)\n- [outstandingBalance](Checkout.md#outstandingbalance)\n- [payments](Checkout.md#payments)\n- [promotions](Checkout.md#promotions)\n- [shippingCostBeforeDiscount](Checkout.md#shippingcostbeforediscount)\n- [shippingCostTotal](Checkout.md#shippingcosttotal)\n- [shouldExecuteSpamCheck](Checkout.md#shouldexecutespamcheck)\n- [subtotal](Checkout.md#subtotal)\n- [taxTotal](Checkout.md#taxtotal)\n- [taxes](Checkout.md#taxes)\n- [totalDiscount](Checkout.md#totaldiscount)\n- [updatedTime](Checkout.md#updatedtime)\n- [version](Checkout.md#version)\n\n## Properties\n\n### balanceDue\n\n• **balanceDue**: `number`\n\n___\n\n### billingAddress\n\n• `Optional` **billingAddress**: [`BillingAddress`](BillingAddress.md)\n\n___\n\n### cart\n\n• **cart**: [`Cart`](Cart.md)\n\n___\n\n### channelId\n\n• **channelId**: `number`\n\n___\n\n### comparisonShippingCost\n\n• **comparisonShippingCost**: `number`\n\n___\n\n### consignments\n\n• **consignments**: [`Consignment`](Consignment.md)[]\n\n___\n\n### coupons\n\n• **coupons**: [`Coupon`](Coupon.md)[]\n\n___\n\n### createdTime\n\n• **createdTime**: `string`\n\n___\n\n### customer\n\n• **customer**: [`Customer`](Customer.md)\n\n___\n\n### customerMessage\n\n• **customerMessage**: `string`\n\n___\n\n### discounts\n\n• **discounts**: [`Discount`](Discount.md)[]\n\n___\n\n### displayDiscountTotal\n\n• **displayDiscountTotal**: `number`\n\n___\n\n### fees\n\n• **fees**: [`Fee`](Fee.md)[]\n\n___\n\n### giftCertificates\n\n• **giftCertificates**: [`GiftCertificate`](GiftCertificate.md)[]\n\n___\n\n### giftWrappingCostTotal\n\n• **giftWrappingCostTotal**: `number`\n\n___\n\n### grandTotal\n\n• **grandTotal**: `number`\n\n___\n\n### handlingCostTotal\n\n• **handlingCostTotal**: `number`\n\n___\n\n### hasOrderLevelAutoDiscountMaxLimitReached\n\n• `Optional` **hasOrderLevelAutoDiscountMaxLimitReached**: `boolean`\n\n___\n\n### id\n\n• **id**: `string`\n\n___\n\n### isStoreCreditApplied\n\n• **isStoreCreditApplied**: `boolean`\n\n___\n\n### manualDiscountTotal\n\n• **manualDiscountTotal**: `number`\n\n___\n\n### orderBasedAutoDiscountTotal\n\n• **orderBasedAutoDiscountTotal**: `number`\n\n___\n\n### orderId\n\n• `Optional` **orderId**: `number`\n\n___\n\n### outstandingBalance\n\n• **outstandingBalance**: `number`\n\n___\n\n### payments\n\n• `Optional` **payments**: [`CheckoutPayment`](CheckoutPayment.md)[]\n\n___\n\n### promotions\n\n• `Optional` **promotions**: [`Promotion`](Promotion.md)[]\n\n___\n\n### shippingCostBeforeDiscount\n\n• **shippingCostBeforeDiscount**: `number`\n\n___\n\n### shippingCostTotal\n\n• **shippingCostTotal**: `number`\n\n___\n\n### shouldExecuteSpamCheck\n\n• **shouldExecuteSpamCheck**: `boolean`\n\nWhether the current checkout must execute spam protection\r\nbefore placing the order.\n\nNote: You need to enable Google ReCAPTCHA bot protection in your Checkout Settings.\n\n___\n\n### subtotal\n\n• **subtotal**: `number`\n\n___\n\n### taxTotal\n\n• **taxTotal**: `number`\n\n___\n\n### taxes\n\n• **taxes**: [`Tax`](Tax.md)[]\n\n___\n\n### totalDiscount\n\n• **totalDiscount**: `number`\n\n___\n\n### updatedTime\n\n• **updatedTime**: `string`\n\n___\n\n### version\n\n• **version**: `number`\n"
  },
  {
    "path": "docs/interfaces/CheckoutButtonDataState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutButtonDataState\n\n# Interface: CheckoutButtonDataState\n\n## Table of contents\n\n### Properties\n\n- [initializedContainers](CheckoutButtonDataState.md#initializedcontainers)\n\n## Properties\n\n### initializedContainers\n\n• **initializedContainers**: `Object`\n\n#### Index signature\n\n▪ [key: `string`]: `boolean`\n"
  },
  {
    "path": "docs/interfaces/CheckoutButtonErrorsState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutButtonErrorsState\n\n# Interface: CheckoutButtonErrorsState\n\n## Table of contents\n\n### Properties\n\n- [deinitializeError](CheckoutButtonErrorsState.md#deinitializeerror)\n- [initializeError](CheckoutButtonErrorsState.md#initializeerror)\n\n## Properties\n\n### deinitializeError\n\n• `Optional` **deinitializeError**: `Error`\n\n___\n\n### initializeError\n\n• `Optional` **initializeError**: `Error`\n"
  },
  {
    "path": "docs/interfaces/CheckoutButtonInitializerOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutButtonInitializerOptions\n\n# Interface: CheckoutButtonInitializerOptions\n\n## Table of contents\n\n### Properties\n\n- [host](CheckoutButtonInitializerOptions.md#host)\n- [locale](CheckoutButtonInitializerOptions.md#locale)\n\n## Properties\n\n### host\n\n• `Optional` **host**: `string`\n\n___\n\n### locale\n\n• `Optional` **locale**: `string`\n"
  },
  {
    "path": "docs/interfaces/CheckoutButtonOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutButtonOptions\n\n# Interface: CheckoutButtonOptions\n\nThe set of options for configuring the checkout button.\n\n## Hierarchy\n\n- [`RequestOptions`](RequestOptions.md)\n\n  ↳ **`CheckoutButtonOptions`**\n\n  ↳↳ [`BaseCheckoutButtonInitializeOptions`](BaseCheckoutButtonInitializeOptions.md)\n\n## Table of contents\n\n### Properties\n\n- [methodId](CheckoutButtonOptions.md#methodid)\n- [params](CheckoutButtonOptions.md#params)\n- [timeout](CheckoutButtonOptions.md#timeout)\n- [version](CheckoutButtonOptions.md#version)\n\n## Properties\n\n### methodId\n\n• **methodId**: [`CheckoutButtonMethodType`](../enums/CheckoutButtonMethodType.md)\n\nThe identifier of the payment method.\n\n___\n\n### params\n\n• `Optional` **params**: `object`\n\nThe parameters of the request, if required.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[params](RequestOptions.md#params)\n\n___\n\n### timeout\n\n• `Optional` **timeout**: `default`\n\nProvide this option if you want to cancel or time out the request. If the\r\ntimeout object completes before the request, the request will be\r\ncancelled.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[timeout](RequestOptions.md#timeout)\n\n___\n\n### version\n\n• `Optional` **version**: `number`\n\nThe version of the checkout, used for optimistic concurrency control.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[version](RequestOptions.md#version)\n"
  },
  {
    "path": "docs/interfaces/CheckoutButtonSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutButtonSelector\n\n# Interface: CheckoutButtonSelector\n\n## Table of contents\n\n### Methods\n\n- [getDeinitializeError](CheckoutButtonSelector.md#getdeinitializeerror)\n- [getInitializeError](CheckoutButtonSelector.md#getinitializeerror)\n- [getState](CheckoutButtonSelector.md#getstate)\n- [isDeinitializing](CheckoutButtonSelector.md#isdeinitializing)\n- [isInitialized](CheckoutButtonSelector.md#isinitialized)\n- [isInitializing](CheckoutButtonSelector.md#isinitializing)\n\n## Methods\n\n### getDeinitializeError\n\n▸ **getDeinitializeError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | [`CheckoutButtonMethodType`](../enums/CheckoutButtonMethodType.md) |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getInitializeError\n\n▸ **getInitializeError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | [`CheckoutButtonMethodType`](../enums/CheckoutButtonMethodType.md) |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getState\n\n▸ **getState**(): [`CheckoutButtonState`](CheckoutButtonState.md)\n\n#### Returns\n\n[`CheckoutButtonState`](CheckoutButtonState.md)\n\n___\n\n### isDeinitializing\n\n▸ **isDeinitializing**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | [`CheckoutButtonMethodType`](../enums/CheckoutButtonMethodType.md) |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isInitialized\n\n▸ **isInitialized**(`methodId`, `containerId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId` | [`CheckoutButtonMethodType`](../enums/CheckoutButtonMethodType.md) |\n| `containerId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isInitializing\n\n▸ **isInitializing**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | [`CheckoutButtonMethodType`](../enums/CheckoutButtonMethodType.md) |\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/CheckoutButtonSelectors.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutButtonSelectors\n\n# Interface: CheckoutButtonSelectors\n\n## Table of contents\n\n### Properties\n\n- [errors](CheckoutButtonSelectors.md#errors)\n- [statuses](CheckoutButtonSelectors.md#statuses)\n\n## Properties\n\n### errors\n\n• **errors**: [`CheckoutButtonErrorSelector`](../classes/CheckoutButtonErrorSelector.md)\n\n___\n\n### statuses\n\n• **statuses**: [`CheckoutButtonStatusSelector`](../classes/CheckoutButtonStatusSelector.md)\n"
  },
  {
    "path": "docs/interfaces/CheckoutButtonState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutButtonState\n\n# Interface: CheckoutButtonState\n\n## Table of contents\n\n### Properties\n\n- [data](CheckoutButtonState.md#data)\n- [errors](CheckoutButtonState.md#errors)\n- [statuses](CheckoutButtonState.md#statuses)\n\n## Properties\n\n### data\n\n• **data**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `amazonpay` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `applepay` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `braintreepaypal` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `braintreepaypalcredit` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `braintreevenmo` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `googlepayadyenv2` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `googlepayadyenv3` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `googlepayauthorizenet` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `googlepaybnz` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `googlepaybraintree` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `googlepaycheckoutcom` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `googlepaycybersourcev2` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `googlepayorbital` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `googlepaystripe` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `googlepaystripeupe` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `googlepayworldpayaccess` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n| `paypalexpress` | `undefined` \\| [`CheckoutButtonDataState`](CheckoutButtonDataState.md) |\n\n___\n\n### errors\n\n• **errors**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `amazonpay` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `applepay` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `braintreepaypal` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `braintreepaypalcredit` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `braintreevenmo` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `googlepayadyenv2` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `googlepayadyenv3` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `googlepayauthorizenet` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `googlepaybnz` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `googlepaybraintree` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `googlepaycheckoutcom` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `googlepaycybersourcev2` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `googlepayorbital` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `googlepaystripe` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `googlepaystripeupe` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `googlepayworldpayaccess` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n| `paypalexpress` | `undefined` \\| [`CheckoutButtonErrorsState`](CheckoutButtonErrorsState.md) |\n\n___\n\n### statuses\n\n• **statuses**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `amazonpay` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `applepay` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `braintreepaypal` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `braintreepaypalcredit` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `braintreevenmo` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `googlepayadyenv2` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `googlepayadyenv3` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `googlepayauthorizenet` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `googlepaybnz` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `googlepaybraintree` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `googlepaycheckoutcom` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `googlepaycybersourcev2` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `googlepayorbital` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `googlepaystripe` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `googlepaystripeupe` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `googlepayworldpayaccess` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n| `paypalexpress` | `undefined` \\| [`CheckoutButtonStatusesState`](CheckoutButtonStatusesState.md) |\n"
  },
  {
    "path": "docs/interfaces/CheckoutButtonStatusesState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutButtonStatusesState\n\n# Interface: CheckoutButtonStatusesState\n\n## Table of contents\n\n### Properties\n\n- [isDeinitializing](CheckoutButtonStatusesState.md#isdeinitializing)\n- [isInitializing](CheckoutButtonStatusesState.md#isinitializing)\n\n## Properties\n\n### isDeinitializing\n\n• `Optional` **isDeinitializing**: `boolean`\n\n___\n\n### isInitializing\n\n• `Optional` **isInitializing**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/CheckoutInitialState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutInitialState\n\n# Interface: CheckoutInitialState\n\n## Table of contents\n\n### Properties\n\n- [b2bApiSettings](CheckoutInitialState.md#b2bapisettings)\n- [checkout](CheckoutInitialState.md#checkout)\n- [config](CheckoutInitialState.md#config)\n- [extensions](CheckoutInitialState.md#extensions)\n- [extraFields](CheckoutInitialState.md#extrafields)\n- [formFields](CheckoutInitialState.md#formfields)\n\n## Properties\n\n### b2bApiSettings\n\n• `Optional` **b2bApiSettings**: [`B2BApiSettings`](B2BApiSettings.md)\n\n___\n\n### checkout\n\n• `Optional` **checkout**: [`Checkout`](Checkout.md)\n\n___\n\n### config\n\n• `Optional` **config**: [`Config`](Config.md)\n\n___\n\n### extensions\n\n• `Optional` **extensions**: [`Extension`](Extension.md)[]\n\n___\n\n### extraFields\n\n• `Optional` **extraFields**: [`ExtraFields`](ExtraFields.md)\n\n___\n\n### formFields\n\n• `Optional` **formFields**: [`FormFields`](FormFields.md)\n"
  },
  {
    "path": "docs/interfaces/CheckoutParams.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutParams\n\n# Interface: CheckoutParams\n\n## Table of contents\n\n### Properties\n\n- [include](CheckoutParams.md#include)\n\n## Properties\n\n### include\n\n• `Optional` **include**: [`CheckoutIncludes`](../enums/CheckoutIncludes.md)[] \\| [`CheckoutIncludeParam`](../README.md#checkoutincludeparam)\n"
  },
  {
    "path": "docs/interfaces/CheckoutPayment.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutPayment\n\n# Interface: CheckoutPayment\n\n## Table of contents\n\n### Properties\n\n- [detail](CheckoutPayment.md#detail)\n- [gatewayId](CheckoutPayment.md#gatewayid)\n- [providerId](CheckoutPayment.md#providerid)\n- [providerType](CheckoutPayment.md#providertype)\n\n## Properties\n\n### detail\n\n• **detail**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `step` | `string` |\n\n___\n\n### gatewayId\n\n• `Optional` **gatewayId**: `string`\n\n___\n\n### providerId\n\n• **providerId**: `string`\n\n___\n\n### providerType\n\n• **providerType**: `string`\n"
  },
  {
    "path": "docs/interfaces/CheckoutPaymentMethodExecutedOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutPaymentMethodExecutedOptions\n\n# Interface: CheckoutPaymentMethodExecutedOptions\n\n## Table of contents\n\n### Properties\n\n- [hasBoltAccount](CheckoutPaymentMethodExecutedOptions.md#hasboltaccount)\n\n## Properties\n\n### hasBoltAccount\n\n• `Optional` **hasBoltAccount**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/CheckoutRequestBody.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutRequestBody\n\n# Interface: CheckoutRequestBody\n\n## Table of contents\n\n### Properties\n\n- [customerMessage](CheckoutRequestBody.md#customermessage)\n\n## Properties\n\n### customerMessage\n\n• **customerMessage**: `string`\n"
  },
  {
    "path": "docs/interfaces/CheckoutSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutSelector\n\n# Interface: CheckoutSelector\n\n## Table of contents\n\n### Methods\n\n- [getCheckout](CheckoutSelector.md#getcheckout)\n- [getCheckoutOrThrow](CheckoutSelector.md#getcheckoutorthrow)\n- [getLoadError](CheckoutSelector.md#getloaderror)\n- [getOutstandingBalance](CheckoutSelector.md#getoutstandingbalance)\n- [getUpdateError](CheckoutSelector.md#getupdateerror)\n- [isExecutingSpamCheck](CheckoutSelector.md#isexecutingspamcheck)\n- [isLoading](CheckoutSelector.md#isloading)\n- [isUpdating](CheckoutSelector.md#isupdating)\n\n## Methods\n\n### getCheckout\n\n▸ **getCheckout**(): `undefined` \\| [`Checkout`](Checkout.md)\n\n#### Returns\n\n`undefined` \\| [`Checkout`](Checkout.md)\n\n___\n\n### getCheckoutOrThrow\n\n▸ **getCheckoutOrThrow**(): [`Checkout`](Checkout.md)\n\n#### Returns\n\n[`Checkout`](Checkout.md)\n\n___\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getOutstandingBalance\n\n▸ **getOutstandingBalance**(`useStoreCredit?`): `undefined` \\| `number`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `useStoreCredit?` | `boolean` |\n\n#### Returns\n\n`undefined` \\| `number`\n\n___\n\n### getUpdateError\n\n▸ **getUpdateError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### isExecutingSpamCheck\n\n▸ **isExecutingSpamCheck**(): `boolean`\n\n#### Returns\n\n`boolean`\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n\n___\n\n### isUpdating\n\n▸ **isUpdating**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/CheckoutSelectors.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutSelectors\n\n# Interface: CheckoutSelectors\n\n## Table of contents\n\n### Properties\n\n- [data](CheckoutSelectors.md#data)\n- [errors](CheckoutSelectors.md#errors)\n- [statuses](CheckoutSelectors.md#statuses)\n\n## Properties\n\n### data\n\n• **data**: [`CheckoutStoreSelector`](CheckoutStoreSelector.md)\n\n___\n\n### errors\n\n• **errors**: [`CheckoutStoreErrorSelector`](CheckoutStoreErrorSelector.md)\n\n___\n\n### statuses\n\n• **statuses**: [`CheckoutStoreStatusSelector`](CheckoutStoreStatusSelector.md)\n"
  },
  {
    "path": "docs/interfaces/CheckoutServiceOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutServiceOptions\n\n# Interface: CheckoutServiceOptions\n\n## Table of contents\n\n### Properties\n\n- [errorLogger](CheckoutServiceOptions.md#errorlogger)\n- [externalSource](CheckoutServiceOptions.md#externalsource)\n- [host](CheckoutServiceOptions.md#host)\n- [locale](CheckoutServiceOptions.md#locale)\n- [shouldWarnMutation](CheckoutServiceOptions.md#shouldwarnmutation)\n\n## Properties\n\n### errorLogger\n\n• `Optional` **errorLogger**: [`ErrorLogger`](ErrorLogger.md)\n\n___\n\n### externalSource\n\n• `Optional` **externalSource**: `string`\n\n___\n\n### host\n\n• `Optional` **host**: `string`\n\n___\n\n### locale\n\n• `Optional` **locale**: `string`\n\n___\n\n### shouldWarnMutation\n\n• `Optional` **shouldWarnMutation**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/CheckoutSettings.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutSettings\n\n# Interface: CheckoutSettings\n\n## Table of contents\n\n### Properties\n\n- [capabilities](CheckoutSettings.md#capabilities)\n- [checkoutBillingSameAsShippingEnabled](CheckoutSettings.md#checkoutbillingsameasshippingenabled)\n- [checkoutUserExperienceSettings](CheckoutSettings.md#checkoutuserexperiencesettings)\n- [enableOrderComments](CheckoutSettings.md#enableordercomments)\n- [enableTermsAndConditions](CheckoutSettings.md#enabletermsandconditions)\n- [features](CheckoutSettings.md#features)\n- [googleMapsApiKey](CheckoutSettings.md#googlemapsapikey)\n- [googleRecaptchaSitekey](CheckoutSettings.md#googlerecaptchasitekey)\n- [guestCheckoutEnabled](CheckoutSettings.md#guestcheckoutenabled)\n- [hasMultiShippingEnabled](CheckoutSettings.md#hasmultishippingenabled)\n- [isAccountCreationEnabled](CheckoutSettings.md#isaccountcreationenabled)\n- [isAnalyticsEnabled](CheckoutSettings.md#isanalyticsenabled)\n- [isCardVaultingEnabled](CheckoutSettings.md#iscardvaultingenabled)\n- [isCouponCodeCollapsed](CheckoutSettings.md#iscouponcodecollapsed)\n- [isExpressPrivacyPolicy](CheckoutSettings.md#isexpressprivacypolicy)\n- [isPaymentRequestCanMakePaymentEnabled](CheckoutSettings.md#ispaymentrequestcanmakepaymentenabled)\n- [isPaymentRequestEnabled](CheckoutSettings.md#ispaymentrequestenabled)\n- [isSignInEmailEnabled](CheckoutSettings.md#issigninemailenabled)\n- [isSpamProtectionEnabled](CheckoutSettings.md#isspamprotectionenabled)\n- [isStorefrontSpamProtectionEnabled](CheckoutSettings.md#isstorefrontspamprotectionenabled)\n- [isTrustedShippingAddressEnabled](CheckoutSettings.md#istrustedshippingaddressenabled)\n- [orderTermsAndConditions](CheckoutSettings.md#ordertermsandconditions)\n- [orderTermsAndConditionsLink](CheckoutSettings.md#ordertermsandconditionslink)\n- [orderTermsAndConditionsLocation](CheckoutSettings.md#ordertermsandconditionslocation)\n- [orderTermsAndConditionsType](CheckoutSettings.md#ordertermsandconditionstype)\n- [privacyPolicyUrl](CheckoutSettings.md#privacypolicyurl)\n- [providerWithCustomCheckout](CheckoutSettings.md#providerwithcustomcheckout)\n- [realtimeShippingProviders](CheckoutSettings.md#realtimeshippingproviders)\n- [remoteCheckoutProviders](CheckoutSettings.md#remotecheckoutproviders)\n- [requiresMarketingConsent](CheckoutSettings.md#requiresmarketingconsent)\n- [shippingQuoteFailedMessage](CheckoutSettings.md#shippingquotefailedmessage)\n- [shouldRedirectToStorefrontForAuth](CheckoutSettings.md#shouldredirecttostorefrontforauth)\n\n## Properties\n\n### capabilities\n\n• `Optional` **capabilities**: [`Capabilities`](Capabilities.md)\n\n___\n\n### checkoutBillingSameAsShippingEnabled\n\n• **checkoutBillingSameAsShippingEnabled**: `boolean`\n\n___\n\n### checkoutUserExperienceSettings\n\n• **checkoutUserExperienceSettings**: [`UserExperienceSettings`](UserExperienceSettings.md)\n\n___\n\n### enableOrderComments\n\n• **enableOrderComments**: `boolean`\n\n___\n\n### enableTermsAndConditions\n\n• **enableTermsAndConditions**: `boolean`\n\n___\n\n### features\n\n• **features**: `Object`\n\n#### Index signature\n\n▪ [featureName: `string`]: `boolean`\n\n___\n\n### googleMapsApiKey\n\n• **googleMapsApiKey**: `string`\n\n___\n\n### googleRecaptchaSitekey\n\n• **googleRecaptchaSitekey**: `string`\n\n___\n\n### guestCheckoutEnabled\n\n• **guestCheckoutEnabled**: `boolean`\n\n___\n\n### hasMultiShippingEnabled\n\n• **hasMultiShippingEnabled**: `boolean`\n\n___\n\n### isAccountCreationEnabled\n\n• **isAccountCreationEnabled**: `boolean`\n\n___\n\n### isAnalyticsEnabled\n\n• **isAnalyticsEnabled**: `boolean`\n\n___\n\n### isCardVaultingEnabled\n\n• **isCardVaultingEnabled**: `boolean`\n\n___\n\n### isCouponCodeCollapsed\n\n• **isCouponCodeCollapsed**: `boolean`\n\n___\n\n### isExpressPrivacyPolicy\n\n• **isExpressPrivacyPolicy**: `boolean`\n\n___\n\n### isPaymentRequestCanMakePaymentEnabled\n\n• **isPaymentRequestCanMakePaymentEnabled**: `boolean`\n\n___\n\n### isPaymentRequestEnabled\n\n• **isPaymentRequestEnabled**: `boolean`\n\n___\n\n### isSignInEmailEnabled\n\n• **isSignInEmailEnabled**: `boolean`\n\n___\n\n### isSpamProtectionEnabled\n\n• **isSpamProtectionEnabled**: `boolean`\n\n___\n\n### isStorefrontSpamProtectionEnabled\n\n• **isStorefrontSpamProtectionEnabled**: `boolean`\n\n___\n\n### isTrustedShippingAddressEnabled\n\n• **isTrustedShippingAddressEnabled**: `boolean`\n\n___\n\n### orderTermsAndConditions\n\n• **orderTermsAndConditions**: `string`\n\n___\n\n### orderTermsAndConditionsLink\n\n• **orderTermsAndConditionsLink**: `string`\n\n___\n\n### orderTermsAndConditionsLocation\n\n• **orderTermsAndConditionsLocation**: `string`\n\n___\n\n### orderTermsAndConditionsType\n\n• **orderTermsAndConditionsType**: `string`\n\n___\n\n### privacyPolicyUrl\n\n• **privacyPolicyUrl**: `string`\n\n___\n\n### providerWithCustomCheckout\n\n• **providerWithCustomCheckout**: ``null`` \\| `string`\n\n___\n\n### realtimeShippingProviders\n\n• **realtimeShippingProviders**: `string`[]\n\n___\n\n### remoteCheckoutProviders\n\n• **remoteCheckoutProviders**: `any`[]\n\n___\n\n### requiresMarketingConsent\n\n• **requiresMarketingConsent**: `boolean`\n\n___\n\n### shippingQuoteFailedMessage\n\n• **shippingQuoteFailedMessage**: `string`\n\n___\n\n### shouldRedirectToStorefrontForAuth\n\n• **shouldRedirectToStorefrontForAuth**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/CheckoutStoreErrorSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutStoreErrorSelector\n\n# Interface: CheckoutStoreErrorSelector\n\nResponsible for getting the error of any asynchronous checkout action, if\r\nthere is any.\n\nThis object has a set of getters that would return an error if an action is\r\nnot executed successfully. For example, if you are unable to submit an order,\r\nyou can use this object to retrieve the reason for the failure.\n\n## Table of contents\n\n### Methods\n\n- [getApplyCouponError](CheckoutStoreErrorSelector.md#getapplycouponerror)\n- [getApplyGiftCertificateError](CheckoutStoreErrorSelector.md#getapplygiftcertificateerror)\n- [getApplyStoreCreditError](CheckoutStoreErrorSelector.md#getapplystorecrediterror)\n- [getContinueAsGuestError](CheckoutStoreErrorSelector.md#getcontinueasguesterror)\n- [getCreateConsignmentsError](CheckoutStoreErrorSelector.md#getcreateconsignmentserror)\n- [getCreateCustomerAccountError](CheckoutStoreErrorSelector.md#getcreatecustomeraccounterror)\n- [getCreateCustomerAddressError](CheckoutStoreErrorSelector.md#getcreatecustomeraddresserror)\n- [getDeleteConsignmentError](CheckoutStoreErrorSelector.md#getdeleteconsignmenterror)\n- [getDeleteInstrumentError](CheckoutStoreErrorSelector.md#getdeleteinstrumenterror)\n- [getError](CheckoutStoreErrorSelector.md#geterror)\n- [getFinalizeOrderError](CheckoutStoreErrorSelector.md#getfinalizeordererror)\n- [getInitializeCustomerError](CheckoutStoreErrorSelector.md#getinitializecustomererror)\n- [getInitializePaymentError](CheckoutStoreErrorSelector.md#getinitializepaymenterror)\n- [getInitializeShippingError](CheckoutStoreErrorSelector.md#getinitializeshippingerror)\n- [getLoadB2BTokenError](CheckoutStoreErrorSelector.md#getloadb2btokenerror)\n- [getLoadBillingCountriesError](CheckoutStoreErrorSelector.md#getloadbillingcountrieserror)\n- [getLoadCartError](CheckoutStoreErrorSelector.md#getloadcarterror)\n- [getLoadCheckoutError](CheckoutStoreErrorSelector.md#getloadcheckouterror)\n- [getLoadConfigError](CheckoutStoreErrorSelector.md#getloadconfigerror)\n- [getLoadExtensionsError](CheckoutStoreErrorSelector.md#getloadextensionserror)\n- [getLoadInstrumentsError](CheckoutStoreErrorSelector.md#getloadinstrumentserror)\n- [getLoadOrderError](CheckoutStoreErrorSelector.md#getloadordererror)\n- [getLoadPaymentMethodError](CheckoutStoreErrorSelector.md#getloadpaymentmethoderror)\n- [getLoadPaymentMethodsError](CheckoutStoreErrorSelector.md#getloadpaymentmethodserror)\n- [getLoadShippingCountriesError](CheckoutStoreErrorSelector.md#getloadshippingcountrieserror)\n- [getLoadShippingOptionsError](CheckoutStoreErrorSelector.md#getloadshippingoptionserror)\n- [getPickupOptionsError](CheckoutStoreErrorSelector.md#getpickupoptionserror)\n- [getRemoveCouponError](CheckoutStoreErrorSelector.md#getremovecouponerror)\n- [getRemoveGiftCertificateError](CheckoutStoreErrorSelector.md#getremovegiftcertificateerror)\n- [getSelectShippingOptionError](CheckoutStoreErrorSelector.md#getselectshippingoptionerror)\n- [getSignInEmailError](CheckoutStoreErrorSelector.md#getsigninemailerror)\n- [getSignInError](CheckoutStoreErrorSelector.md#getsigninerror)\n- [getSignOutError](CheckoutStoreErrorSelector.md#getsignouterror)\n- [getSubmitOrderError](CheckoutStoreErrorSelector.md#getsubmitordererror)\n- [getUpdateBillingAddressError](CheckoutStoreErrorSelector.md#getupdatebillingaddresserror)\n- [getUpdateCheckoutError](CheckoutStoreErrorSelector.md#getupdatecheckouterror)\n- [getUpdateConsignmentError](CheckoutStoreErrorSelector.md#getupdateconsignmenterror)\n- [getUpdateShippingAddressError](CheckoutStoreErrorSelector.md#getupdateshippingaddresserror)\n- [getUpdateSubscriptionsError](CheckoutStoreErrorSelector.md#getupdatesubscriptionserror)\n\n## Methods\n\n### getApplyCouponError\n\n▸ **getApplyCouponError**(): `undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\nReturns an error if unable to apply a coupon code.\n\n#### Returns\n\n`undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\nThe error object if unable to apply, otherwise undefined.\n\n___\n\n### getApplyGiftCertificateError\n\n▸ **getApplyGiftCertificateError**(): `undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\nReturns an error if unable to apply a gift certificate.\n\n#### Returns\n\n`undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\nThe error object if unable to apply, otherwise undefined.\n\n___\n\n### getApplyStoreCreditError\n\n▸ **getApplyStoreCreditError**(): `undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\nReturns an error if unable to apply store credit.\n\n#### Returns\n\n`undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\nThe error object if unable to apply, otherwise undefined.\n\n___\n\n### getContinueAsGuestError\n\n▸ **getContinueAsGuestError**(): `undefined` \\| `Error`\n\nReturns an error if unable to continue as guest.\n\nThe call could fail in scenarios where guest checkout is not allowed, for example, when existing accounts are required to sign-in.\n\nIn the background, this call tries to set the billing address email using the Storefront API. You could access the Storefront API response status code using `getContinueAsGuestError` error selector.\n\n```js\r\nconsole.log(state.errors.getContinueAsGuestError());\r\nconsole.log(state.errors.getContinueAsGuestError().status);\r\n```\n\nFor more information about status codes, check [Checkout Storefront API - Add Checkout Billing Address](https://developer.bigcommerce.com/api-reference/cart-checkout/storefront-checkout-api/checkout-billing-address/checkoutsbillingaddressbycheckoutidpost).\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to continue, otherwise undefined.\n\n___\n\n### getCreateConsignmentsError\n\n▸ **getCreateConsignmentsError**(): `undefined` \\| `Error`\n\nReturns an error if unable to create consignments.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to create, otherwise undefined.\n\n___\n\n### getCreateCustomerAccountError\n\n▸ **getCreateCustomerAccountError**(): `undefined` \\| `Error`\n\nReturns an error if unable to create customer account.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to create account, otherwise undefined.\n\n___\n\n### getCreateCustomerAddressError\n\n▸ **getCreateCustomerAddressError**(): `undefined` \\| `Error`\n\nReturns an error if unable to create customer address.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to create address, otherwise undefined.\n\n___\n\n### getDeleteConsignmentError\n\n▸ **getDeleteConsignmentError**(`consignmentId?`): `undefined` \\| `Error`\n\nReturns an error if unable to delete a consignment.\n\nA consignment ID should be provided when checking for an error for a\r\nspecific consignment, otherwise it will check for all available consignments.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignmentId?` | `string` | The identifier of the consignment to be checked. |\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to delete, otherwise undefined.\n\n___\n\n### getDeleteInstrumentError\n\n▸ **getDeleteInstrumentError**(`instrumentId?`): `undefined` \\| `Error`\n\nReturns an error if unable to delete a payment instrument.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `instrumentId?` | `string` | The identifier of the payment instrument to delete. |\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to delete, otherwise undefined.\n\n___\n\n### getError\n\n▸ **getError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getFinalizeOrderError\n\n▸ **getFinalizeOrderError**(): `undefined` \\| `Error`\n\nReturns an error if unable to finalize the current order.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to finalize, otherwise undefined.\n\n___\n\n### getInitializeCustomerError\n\n▸ **getInitializeCustomerError**(`methodId?`): `undefined` \\| `Error`\n\nReturns an error if unable to initialize the customer step of a checkout\r\nprocess.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId?` | `string` | The identifer of the initialization method to execute. |\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to initialize, otherwise undefined.\n\n___\n\n### getInitializePaymentError\n\n▸ **getInitializePaymentError**(`methodId?`): `undefined` \\| `Error`\n\nReturns an error if unable to initialize a specific payment method.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId?` | `string` | The identifier of the payment method to initialize. |\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to initialize, otherwise undefined.\n\n___\n\n### getInitializeShippingError\n\n▸ **getInitializeShippingError**(`methodId?`): `undefined` \\| `Error`\n\nReturns an error if unable to initialize the shipping step of a checkout\r\nprocess.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId?` | `string` | The identifer of the initialization method to execute. |\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to initialize, otherwise undefined.\n\n___\n\n### getLoadB2BTokenError\n\n▸ **getLoadB2BTokenError**(): `undefined` \\| `Error`\n\nReturns an error if unable to load the B2B token.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to load the B2B token, otherwise undefined.\n\n___\n\n### getLoadBillingCountriesError\n\n▸ **getLoadBillingCountriesError**(): `undefined` \\| `Error`\n\nReturns an error if unable to load billing countries.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to load, otherwise undefined.\n\n___\n\n### getLoadCartError\n\n▸ **getLoadCartError**(): `undefined` \\| `Error`\n\nReturns an error if unable to load the current cart.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to load, otherwise undefined.\n\n___\n\n### getLoadCheckoutError\n\n▸ **getLoadCheckoutError**(): `undefined` \\| `Error`\n\nReturns an error if unable to load the current checkout.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to load, otherwise undefined.\n\n___\n\n### getLoadConfigError\n\n▸ **getLoadConfigError**(): `undefined` \\| `Error`\n\nReturns an error if unable to load the checkout configuration of a store.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to load, otherwise undefined.\n\n___\n\n### getLoadExtensionsError\n\n▸ **getLoadExtensionsError**(): `undefined` \\| `Error`\n\nReturns an error if unable to fetch extensions.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to fetch extensions, otherwise undefined.\n\n___\n\n### getLoadInstrumentsError\n\n▸ **getLoadInstrumentsError**(): `undefined` \\| `Error`\n\nReturns an error if unable to load payment instruments.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to load, otherwise undefined.\n\n___\n\n### getLoadOrderError\n\n▸ **getLoadOrderError**(): `undefined` \\| `Error`\n\nReturns an error if unable to load the current order.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to load, otherwise undefined.\n\n___\n\n### getLoadPaymentMethodError\n\n▸ **getLoadPaymentMethodError**(`methodId?`): `undefined` \\| `Error`\n\nReturns an error if unable to load a specific payment method.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId?` | `string` | The identifier of the payment method to load. |\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to load, otherwise undefined.\n\n___\n\n### getLoadPaymentMethodsError\n\n▸ **getLoadPaymentMethodsError**(): `undefined` \\| `Error`\n\nReturns an error if unable to load payment methods.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to load, otherwise undefined.\n\n___\n\n### getLoadShippingCountriesError\n\n▸ **getLoadShippingCountriesError**(): `undefined` \\| `Error`\n\nReturns an error if unable to load shipping countries.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to load, otherwise undefined.\n\n___\n\n### getLoadShippingOptionsError\n\n▸ **getLoadShippingOptionsError**(): `undefined` \\| `Error`\n\nReturns an error if unable to load shipping options.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to load, otherwise undefined.\n\n___\n\n### getPickupOptionsError\n\n▸ **getPickupOptionsError**(): `undefined` \\| `Error`\n\nReturns an error if unable to fetch pickup options.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to fetch pickup options, otherwise undefined.\n\n___\n\n### getRemoveCouponError\n\n▸ **getRemoveCouponError**(): `undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\nReturns an error if unable to remove a coupon code.\n\n#### Returns\n\n`undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\nThe error object if unable to remove, otherwise undefined.\n\n___\n\n### getRemoveGiftCertificateError\n\n▸ **getRemoveGiftCertificateError**(): `undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\nReturns an error if unable to remove a gift certificate.\n\n#### Returns\n\n`undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\nThe error object if unable to remove, otherwise undefined.\n\n___\n\n### getSelectShippingOptionError\n\n▸ **getSelectShippingOptionError**(`consignmentId?`): `undefined` \\| `Error`\n\nReturns an error if unable to select a shipping option.\n\nA consignment ID should be provided when checking for an error for a\r\nspecific consignment, otherwise it will check for all available consignments.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignmentId?` | `string` | The identifier of the consignment to be checked. |\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to select, otherwise undefined.\n\n___\n\n### getSignInEmailError\n\n▸ **getSignInEmailError**(): `undefined` \\| `Error`\n\nReturns an error if unable to send sign-in email.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to send email, otherwise undefined.\n\n___\n\n### getSignInError\n\n▸ **getSignInError**(): `undefined` \\| `Error`\n\nReturns an error if unable to sign in.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to sign in, otherwise undefined.\n\n___\n\n### getSignOutError\n\n▸ **getSignOutError**(): `undefined` \\| `Error`\n\nReturns an error if unable to sign out.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to sign out, otherwise undefined.\n\n___\n\n### getSubmitOrderError\n\n▸ **getSubmitOrderError**(): `undefined` \\| `Error` \\| [`CartChangedError`](../classes/CartChangedError.md) \\| [`CartConsistencyError`](../classes/CartConsistencyError.md) \\| [`CartStockPositionsChangedError`](../classes/CartStockPositionsChangedError.md)\n\nReturns an error if unable to submit the current order.\n\n#### Returns\n\n`undefined` \\| `Error` \\| [`CartChangedError`](../classes/CartChangedError.md) \\| [`CartConsistencyError`](../classes/CartConsistencyError.md) \\| [`CartStockPositionsChangedError`](../classes/CartStockPositionsChangedError.md)\n\nThe error object if unable to submit, otherwise undefined.\n\n___\n\n### getUpdateBillingAddressError\n\n▸ **getUpdateBillingAddressError**(): `undefined` \\| `Error`\n\nReturns an error if unable to update billing address.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to update, otherwise undefined.\n\n___\n\n### getUpdateCheckoutError\n\n▸ **getUpdateCheckoutError**(): `undefined` \\| `Error`\n\nReturns an error if unable to update the current checkout.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to update, otherwise undefined.\n\n___\n\n### getUpdateConsignmentError\n\n▸ **getUpdateConsignmentError**(`consignmentId?`): `undefined` \\| `Error`\n\nReturns an error if unable to update a consignment.\n\nA consignment ID should be provided when checking for an error for a\r\nspecific consignment, otherwise it will check for all available consignments.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignmentId?` | `string` | The identifier of the consignment to be checked. |\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to update, otherwise undefined.\n\n___\n\n### getUpdateShippingAddressError\n\n▸ **getUpdateShippingAddressError**(): `undefined` \\| `Error`\n\nReturns an error if unable to update shipping address.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to update, otherwise undefined.\n\n___\n\n### getUpdateSubscriptionsError\n\n▸ **getUpdateSubscriptionsError**(): `undefined` \\| `Error`\n\nReturns an error if unable to update subscriptions.\n\n#### Returns\n\n`undefined` \\| `Error`\n\nThe error object if unable to update, otherwise undefined.\n"
  },
  {
    "path": "docs/interfaces/CheckoutStoreSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutStoreSelector\n\n# Interface: CheckoutStoreSelector\n\nResponsible for getting the state of the current checkout.\n\nThis object has a set of methods that allow you to get a specific piece of\r\ncheckout information, such as shipping and billing details.\n\n## Table of contents\n\n### Methods\n\n- [getAddressExtraFields](CheckoutStoreSelector.md#getaddressextrafields)\n- [getB2BToken](CheckoutStoreSelector.md#getb2btoken)\n- [getBillingAddress](CheckoutStoreSelector.md#getbillingaddress)\n- [getBillingAddressFields](CheckoutStoreSelector.md#getbillingaddressfields)\n- [getBillingCountries](CheckoutStoreSelector.md#getbillingcountries)\n- [getCart](CheckoutStoreSelector.md#getcart)\n- [getCheckout](CheckoutStoreSelector.md#getcheckout)\n- [getConfig](CheckoutStoreSelector.md#getconfig)\n- [getConsignments](CheckoutStoreSelector.md#getconsignments)\n- [getCoupons](CheckoutStoreSelector.md#getcoupons)\n- [getCustomer](CheckoutStoreSelector.md#getcustomer)\n- [getCustomerAccountFields](CheckoutStoreSelector.md#getcustomeraccountfields)\n- [getExtensionByRegion](CheckoutStoreSelector.md#getextensionbyregion)\n- [getExtensions](CheckoutStoreSelector.md#getextensions)\n- [getFlashMessages](CheckoutStoreSelector.md#getflashmessages)\n- [getGiftCertificates](CheckoutStoreSelector.md#getgiftcertificates)\n- [getInstruments](CheckoutStoreSelector.md#getinstruments)\n- [getOrder](CheckoutStoreSelector.md#getorder)\n- [getOrderExtraFields](CheckoutStoreSelector.md#getorderextrafields)\n- [getPaymentMethod](CheckoutStoreSelector.md#getpaymentmethod)\n- [getPaymentMethods](CheckoutStoreSelector.md#getpaymentmethods)\n- [getPaymentProviderCustomer](CheckoutStoreSelector.md#getpaymentprovidercustomer)\n- [getPickupOptions](CheckoutStoreSelector.md#getpickupoptions)\n- [getSelectedPaymentMethod](CheckoutStoreSelector.md#getselectedpaymentmethod)\n- [getSelectedShippingOption](CheckoutStoreSelector.md#getselectedshippingoption)\n- [getShippingAddress](CheckoutStoreSelector.md#getshippingaddress)\n- [getShippingAddressFields](CheckoutStoreSelector.md#getshippingaddressfields)\n- [getShippingCountries](CheckoutStoreSelector.md#getshippingcountries)\n- [getShippingOptions](CheckoutStoreSelector.md#getshippingoptions)\n- [getSignInEmail](CheckoutStoreSelector.md#getsigninemail)\n- [getUserExperienceSettings](CheckoutStoreSelector.md#getuserexperiencesettings)\n- [isPaymentDataRequired](CheckoutStoreSelector.md#ispaymentdatarequired)\n- [isPaymentDataSubmitted](CheckoutStoreSelector.md#ispaymentdatasubmitted)\n\n## Methods\n\n### getAddressExtraFields\n\n▸ **getAddressExtraFields**(): [`FormField`](FormField.md)[]\n\nGets address extra fields.\n\n#### Returns\n\n[`FormField`](FormField.md)[]\n\nThe list of extra fields if available, otherwise an empty array.\n\n___\n\n### getB2BToken\n\n▸ **getB2BToken**(): `undefined` \\| `string`\n\nGets the B2B authentication token for the current customer.\n\n#### Returns\n\n`undefined` \\| `string`\n\nThe B2B token string if it has been loaded, otherwise undefined.\n\n___\n\n### getBillingAddress\n\n▸ **getBillingAddress**(): `undefined` \\| [`BillingAddress`](BillingAddress.md)\n\nGets the billing address of an order.\n\n#### Returns\n\n`undefined` \\| [`BillingAddress`](BillingAddress.md)\n\nThe billing address object if it is loaded, otherwise undefined.\n\n___\n\n### getBillingAddressFields\n\n▸ **getBillingAddressFields**(`countryCode`): [`FormField`](FormField.md)[]\n\nGets a set of form fields that should be presented to customers in order\r\nto capture their billing address for a specific country.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `countryCode` | `string` | A 2-letter country code (ISO 3166-1 alpha-2). |\n\n#### Returns\n\n[`FormField`](FormField.md)[]\n\nThe set of billing address form fields if it is loaded,\r\notherwise undefined.\n\n___\n\n### getBillingCountries\n\n▸ **getBillingCountries**(): `undefined` \\| [`Country`](Country.md)[]\n\nGets a list of countries available for billing.\n\n#### Returns\n\n`undefined` \\| [`Country`](Country.md)[]\n\nThe list of countries if it is loaded, otherwise undefined.\n\n___\n\n### getCart\n\n▸ **getCart**(): `undefined` \\| [`Cart`](Cart.md)\n\nGets the current cart.\n\n#### Returns\n\n`undefined` \\| [`Cart`](Cart.md)\n\nThe current cart object if it is loaded, otherwise undefined.\n\n___\n\n### getCheckout\n\n▸ **getCheckout**(): `undefined` \\| [`Checkout`](Checkout.md)\n\nGets the current checkout.\n\n#### Returns\n\n`undefined` \\| [`Checkout`](Checkout.md)\n\nThe current checkout if it is loaded, otherwise undefined.\n\n___\n\n### getConfig\n\n▸ **getConfig**(): `undefined` \\| [`StoreConfig`](StoreConfig.md)\n\nGets the checkout configuration of a store.\n\n#### Returns\n\n`undefined` \\| [`StoreConfig`](StoreConfig.md)\n\nThe configuration object if it is loaded, otherwise undefined.\n\n___\n\n### getConsignments\n\n▸ **getConsignments**(): `undefined` \\| [`Consignment`](Consignment.md)[]\n\nGets a list of consignments.\n\nIf there are no consignments created for to the current checkout, the\r\nlist will be empty.\n\n#### Returns\n\n`undefined` \\| [`Consignment`](Consignment.md)[]\n\nThe list of consignments if any, otherwise undefined.\n\n___\n\n### getCoupons\n\n▸ **getCoupons**(): `undefined` \\| [`Coupon`](Coupon.md)[]\n\nGets a list of coupons that are applied to the current checkout.\n\n#### Returns\n\n`undefined` \\| [`Coupon`](Coupon.md)[]\n\nThe list of applied coupons if there is any, otherwise undefined.\n\n___\n\n### getCustomer\n\n▸ **getCustomer**(): `undefined` \\| [`Customer`](Customer.md)\n\nGets the current customer.\n\n#### Returns\n\n`undefined` \\| [`Customer`](Customer.md)\n\nThe current customer object if it is loaded, otherwise\r\nundefined.\n\n___\n\n### getCustomerAccountFields\n\n▸ **getCustomerAccountFields**(): [`FormField`](FormField.md)[]\n\nGets a set of form fields that should be presented in order to create a customer.\n\n#### Returns\n\n[`FormField`](FormField.md)[]\n\nThe set of customer account form fields if it is loaded,\r\notherwise undefined.\n\n___\n\n### getExtensionByRegion\n\n▸ **getExtensionByRegion**(`region`): `undefined` \\| [`Extension`](Extension.md)\n\nGets the extension associated with a given region.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `region` | [`ExtensionRegion`](../enums/ExtensionRegion.md) | A checkout extension region. |\n\n#### Returns\n\n`undefined` \\| [`Extension`](Extension.md)\n\nThe extension corresponding to the specified region, otherwise undefined.\n\n___\n\n### getExtensions\n\n▸ **getExtensions**(): `undefined` \\| [`Extension`](Extension.md)[]\n\nGets a list of extensions available for checkout.\n\n#### Returns\n\n`undefined` \\| [`Extension`](Extension.md)[]\n\nThe list of extensions if it is loaded, otherwise undefined.\n\n___\n\n### getFlashMessages\n\n▸ **getFlashMessages**(`type?`): `undefined` \\| [`FlashMessage`](FlashMessage.md)[]\n\nGets the available flash messages.\n\nFlash messages contain messages set by the server,\r\ne.g: when trying to sign in using an invalid email link.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `type?` | [`FlashMessageType`](../README.md#flashmessagetype) | The type of flash messages to be returned. Optional |\n\n#### Returns\n\n`undefined` \\| [`FlashMessage`](FlashMessage.md)[]\n\nThe flash messages if available, otherwise undefined.\n\n___\n\n### getGiftCertificates\n\n▸ **getGiftCertificates**(): `undefined` \\| [`GiftCertificate`](GiftCertificate.md)[]\n\nGets a list of gift certificates that are applied to the current checkout.\n\n#### Returns\n\n`undefined` \\| [`GiftCertificate`](GiftCertificate.md)[]\n\nThe list of applied gift certificates if there is any, otherwise undefined.\n\n___\n\n### getInstruments\n\n▸ **getInstruments**(): `undefined` \\| [`CardInstrument`](CardInstrument.md)[]\n\nGets a list of payment instruments associated with the current customer.\n\n#### Returns\n\n`undefined` \\| [`CardInstrument`](CardInstrument.md)[]\n\nThe list of payment instruments if it is loaded, otherwise undefined.\n\n▸ **getInstruments**(`paymentMethod`): `undefined` \\| [`PaymentInstrument`](../README.md#paymentinstrument)[]\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `paymentMethod` | [`PaymentMethod`](PaymentMethod.md)\\<`any`\\> |\n\n#### Returns\n\n`undefined` \\| [`PaymentInstrument`](../README.md#paymentinstrument)[]\n\n___\n\n### getOrder\n\n▸ **getOrder**(): `undefined` \\| [`Order`](Order.md)\n\nGets the current order.\n\n#### Returns\n\n`undefined` \\| [`Order`](Order.md)\n\nThe current order if it is loaded, otherwise undefined.\n\n___\n\n### getOrderExtraFields\n\n▸ **getOrderExtraFields**(): [`FormField`](FormField.md)[]\n\nGets order extra fields.\n\n#### Returns\n\n[`FormField`](FormField.md)[]\n\nThe list of extra fields if available, otherwise an empty array.\n\n___\n\n### getPaymentMethod\n\n▸ **getPaymentMethod**(`methodId`, `gatewayId?`): `undefined` \\| [`PaymentMethod`](PaymentMethod.md)\\<`any`\\>\n\nGets a payment method by an id.\n\nThe method returns undefined if unable to find a payment method with the\r\nspecified id, either because it is not available for the customer, or it\r\nis not loaded.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId` | `string` | The identifier of the payment method. |\n| `gatewayId?` | `string` | The identifier of a payment provider providing the payment method. |\n\n#### Returns\n\n`undefined` \\| [`PaymentMethod`](PaymentMethod.md)\\<`any`\\>\n\nThe payment method object if loaded and available, otherwise,\r\nundefined.\n\n___\n\n### getPaymentMethods\n\n▸ **getPaymentMethods**(): `undefined` \\| [`PaymentMethod`](PaymentMethod.md)\\<`any`\\>[]\n\nGets a list of payment methods available for checkout.\n\n#### Returns\n\n`undefined` \\| [`PaymentMethod`](PaymentMethod.md)\\<`any`\\>[]\n\nThe list of payment methods if it is loaded, otherwise undefined.\n\n___\n\n### getPaymentProviderCustomer\n\n▸ **getPaymentProviderCustomer**(): `undefined` \\| `PaymentProviderCustomer`\n\nGets payment provider customers data.\n\n#### Returns\n\n`undefined` \\| `PaymentProviderCustomer`\n\nThe object with payment provider customer data\n\n___\n\n### getPickupOptions\n\n▸ **getPickupOptions**(`consignmentId`, `searchArea`): `undefined` \\| [`PickupOptionResult`](PickupOptionResult.md)[]\n\nGets a list of pickup options for specified parameters.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignmentId` | `string` | Id of consignment. |\n| `searchArea` | [`SearchArea`](SearchArea.md) | An object containing of radius and co-ordinates. |\n\n#### Returns\n\n`undefined` \\| [`PickupOptionResult`](PickupOptionResult.md)[]\n\nThe set of shipping address form fields if it is loaded,\r\notherwise undefined.\n\n___\n\n### getSelectedPaymentMethod\n\n▸ **getSelectedPaymentMethod**(): `undefined` \\| [`PaymentMethod`](PaymentMethod.md)\\<`any`\\>\n\nGets the payment method that is selected for checkout.\n\n#### Returns\n\n`undefined` \\| [`PaymentMethod`](PaymentMethod.md)\\<`any`\\>\n\nThe payment method object if there is a selected method;\r\nundefined if otherwise.\n\n___\n\n### getSelectedShippingOption\n\n▸ **getSelectedShippingOption**(): `undefined` \\| [`ShippingOption`](ShippingOption.md)\n\nGets the selected shipping option for the current checkout.\n\n#### Returns\n\n`undefined` \\| [`ShippingOption`](ShippingOption.md)\n\nThe shipping option object if there is a selected option,\r\notherwise undefined.\n\n___\n\n### getShippingAddress\n\n▸ **getShippingAddress**(): `undefined` \\| [`Address`](Address.md)\n\nGets the shipping address of the current checkout.\n\nIf the address is partially complete, it may not have shipping options\r\nassociated with it.\n\n#### Returns\n\n`undefined` \\| [`Address`](Address.md)\n\nThe shipping address object if it is loaded, otherwise\r\nundefined.\n\n___\n\n### getShippingAddressFields\n\n▸ **getShippingAddressFields**(`countryCode`): [`FormField`](FormField.md)[]\n\nGets a set of form fields that should be presented to customers in order\r\nto capture their shipping address for a specific country.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `countryCode` | `string` | A 2-letter country code (ISO 3166-1 alpha-2). |\n\n#### Returns\n\n[`FormField`](FormField.md)[]\n\nThe set of shipping address form fields if it is loaded,\r\notherwise undefined.\n\n___\n\n### getShippingCountries\n\n▸ **getShippingCountries**(): `undefined` \\| [`Country`](Country.md)[]\n\nGets a list of countries available for shipping.\n\n#### Returns\n\n`undefined` \\| [`Country`](Country.md)[]\n\nThe list of countries if it is loaded, otherwise undefined.\n\n___\n\n### getShippingOptions\n\n▸ **getShippingOptions**(): `undefined` \\| [`ShippingOption`](ShippingOption.md)[]\n\nGets a list of shipping options available for the shipping address.\n\nIf there is no shipping address assigned to the current checkout, the\r\nlist of shipping options will be empty.\n\n#### Returns\n\n`undefined` \\| [`ShippingOption`](ShippingOption.md)[]\n\nThe list of shipping options if any, otherwise undefined.\n\n___\n\n### getSignInEmail\n\n▸ **getSignInEmail**(): `undefined` \\| [`SignInEmail`](SignInEmail.md)\n\nGets the sign-in email.\n\n#### Returns\n\n`undefined` \\| [`SignInEmail`](SignInEmail.md)\n\nThe sign-in email object if sent, otherwise undefined\n\n___\n\n### getUserExperienceSettings\n\n▸ **getUserExperienceSettings**(): `undefined` \\| [`UserExperienceSettings`](UserExperienceSettings.md)\n\nGets user experience settings.\n\n#### Returns\n\n`undefined` \\| [`UserExperienceSettings`](UserExperienceSettings.md)\n\nThe object of user experience settings if it is loaded, otherwise undefined.\n\n___\n\n### isPaymentDataRequired\n\n▸ **isPaymentDataRequired**(`useStoreCredit?`): `boolean`\n\nChecks if payment data is required or not.\n\nIf payment data is required, customers should be prompted to enter their\r\npayment details.\n\n```js\r\nif (state.checkout.isPaymentDataRequired()) {\r\n    // Render payment form\r\n} else {\r\n    // Render \"Payment is not required for this order\" message\r\n}\r\n```\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `useStoreCredit?` | `boolean` | If true, check whether payment data is required with store credit applied; otherwise, check without store credit. |\n\n#### Returns\n\n`boolean`\n\nTrue if payment data is required, otherwise false.\n\n___\n\n### isPaymentDataSubmitted\n\n▸ **isPaymentDataSubmitted**(`methodId`, `gatewayId?`): `boolean`\n\nChecks if payment data is submitted or not.\n\nIf payment data is already submitted using a payment method, customers\r\nshould not be prompted to enter their payment details again.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId` | `string` | The identifier of the payment method. |\n| `gatewayId?` | `string` | The identifier of a payment provider providing the payment method. |\n\n#### Returns\n\n`boolean`\n\nTrue if payment data is submitted, otherwise false.\n"
  },
  {
    "path": "docs/interfaces/CheckoutStoreStatusSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CheckoutStoreStatusSelector\n\n# Interface: CheckoutStoreStatusSelector\n\nResponsible for checking the statuses of various asynchronous actions related\r\nto checkout.\n\nThis object has a set of getters that return true if an action is in\r\nprogress. For example, you can check whether a customer is submitting an\r\norder and waiting for the request to complete.\n\n## Table of contents\n\n### Methods\n\n- [isApplyingCoupon](CheckoutStoreStatusSelector.md#isapplyingcoupon)\n- [isApplyingGiftCertificate](CheckoutStoreStatusSelector.md#isapplyinggiftcertificate)\n- [isApplyingStoreCredit](CheckoutStoreStatusSelector.md#isapplyingstorecredit)\n- [isContinuingAsGuest](CheckoutStoreStatusSelector.md#iscontinuingasguest)\n- [isCreatingConsignments](CheckoutStoreStatusSelector.md#iscreatingconsignments)\n- [isCreatingCustomerAccount](CheckoutStoreStatusSelector.md#iscreatingcustomeraccount)\n- [isCreatingCustomerAddress](CheckoutStoreStatusSelector.md#iscreatingcustomeraddress)\n- [isCustomerStepPending](CheckoutStoreStatusSelector.md#iscustomersteppending)\n- [isDeletingConsignment](CheckoutStoreStatusSelector.md#isdeletingconsignment)\n- [isDeletingInstrument](CheckoutStoreStatusSelector.md#isdeletinginstrument)\n- [isExecutingPaymentMethodCheckout](CheckoutStoreStatusSelector.md#isexecutingpaymentmethodcheckout)\n- [isExecutingSpamCheck](CheckoutStoreStatusSelector.md#isexecutingspamcheck)\n- [isFinalizingOrder](CheckoutStoreStatusSelector.md#isfinalizingorder)\n- [isInitializedCustomer](CheckoutStoreStatusSelector.md#isinitializedcustomer)\n- [isInitializingCustomer](CheckoutStoreStatusSelector.md#isinitializingcustomer)\n- [isInitializingPayment](CheckoutStoreStatusSelector.md#isinitializingpayment)\n- [isInitializingShipping](CheckoutStoreStatusSelector.md#isinitializingshipping)\n- [isLoadingB2BToken](CheckoutStoreStatusSelector.md#isloadingb2btoken)\n- [isLoadingBillingCountries](CheckoutStoreStatusSelector.md#isloadingbillingcountries)\n- [isLoadingCart](CheckoutStoreStatusSelector.md#isloadingcart)\n- [isLoadingCheckout](CheckoutStoreStatusSelector.md#isloadingcheckout)\n- [isLoadingConfig](CheckoutStoreStatusSelector.md#isloadingconfig)\n- [isLoadingInstruments](CheckoutStoreStatusSelector.md#isloadinginstruments)\n- [isLoadingOrder](CheckoutStoreStatusSelector.md#isloadingorder)\n- [isLoadingPaymentMethod](CheckoutStoreStatusSelector.md#isloadingpaymentmethod)\n- [isLoadingPaymentMethods](CheckoutStoreStatusSelector.md#isloadingpaymentmethods)\n- [isLoadingPickupOptions](CheckoutStoreStatusSelector.md#isloadingpickupoptions)\n- [isLoadingShippingCountries](CheckoutStoreStatusSelector.md#isloadingshippingcountries)\n- [isLoadingShippingOptions](CheckoutStoreStatusSelector.md#isloadingshippingoptions)\n- [isPaymentStepPending](CheckoutStoreStatusSelector.md#ispaymentsteppending)\n- [isPending](CheckoutStoreStatusSelector.md#ispending)\n- [isRemovingCoupon](CheckoutStoreStatusSelector.md#isremovingcoupon)\n- [isRemovingGiftCertificate](CheckoutStoreStatusSelector.md#isremovinggiftcertificate)\n- [isSelectingShippingOption](CheckoutStoreStatusSelector.md#isselectingshippingoption)\n- [isSendingSignInEmail](CheckoutStoreStatusSelector.md#issendingsigninemail)\n- [isShippingStepPending](CheckoutStoreStatusSelector.md#isshippingsteppending)\n- [isSigningIn](CheckoutStoreStatusSelector.md#issigningin)\n- [isSigningOut](CheckoutStoreStatusSelector.md#issigningout)\n- [isSubmittingOrder](CheckoutStoreStatusSelector.md#issubmittingorder)\n- [isUpdatingBillingAddress](CheckoutStoreStatusSelector.md#isupdatingbillingaddress)\n- [isUpdatingCheckout](CheckoutStoreStatusSelector.md#isupdatingcheckout)\n- [isUpdatingConsignment](CheckoutStoreStatusSelector.md#isupdatingconsignment)\n- [isUpdatingShippingAddress](CheckoutStoreStatusSelector.md#isupdatingshippingaddress)\n- [isUpdatingSubscriptions](CheckoutStoreStatusSelector.md#isupdatingsubscriptions)\n\n## Methods\n\n### isApplyingCoupon\n\n▸ **isApplyingCoupon**(): `boolean`\n\nChecks whether the current customer is applying a coupon code.\n\n#### Returns\n\n`boolean`\n\nTrue if applying a coupon code, otherwise false.\n\n___\n\n### isApplyingGiftCertificate\n\n▸ **isApplyingGiftCertificate**(): `boolean`\n\nChecks whether the current customer is applying a gift certificate.\n\n#### Returns\n\n`boolean`\n\nTrue if applying a gift certificate, otherwise false.\n\n___\n\n### isApplyingStoreCredit\n\n▸ **isApplyingStoreCredit**(): `boolean`\n\nChecks whether the current customer is applying store credit.\n\n#### Returns\n\n`boolean`\n\nTrue if applying store credit, otherwise false.\n\n___\n\n### isContinuingAsGuest\n\n▸ **isContinuingAsGuest**(): `boolean`\n\nChecks whether the shopper is continuing out as a guest.\n\n#### Returns\n\n`boolean`\n\nTrue if continuing as guest, otherwise false.\n\n___\n\n### isCreatingConsignments\n\n▸ **isCreatingConsignments**(): `boolean`\n\nChecks whether a given/any consignment is being updated.\n\nA consignment ID should be provided when checking for a specific consignment,\r\notherwise it will check for any consignment.\n\n#### Returns\n\n`boolean`\n\nTrue if creating consignments, otherwise false.\n\n___\n\n### isCreatingCustomerAccount\n\n▸ **isCreatingCustomerAccount**(): `boolean`\n\nChecks whether a customer account is being created\n\n#### Returns\n\n`boolean`\n\nTrue if creating, otherwise false.\n\n___\n\n### isCreatingCustomerAddress\n\n▸ **isCreatingCustomerAddress**(): `boolean`\n\nChecks whether a customer address is being created\n\n#### Returns\n\n`boolean`\n\nTrue if creating, otherwise false.\n\n___\n\n### isCustomerStepPending\n\n▸ **isCustomerStepPending**(): `boolean`\n\nChecks whether the customer step of a checkout is in a pending state.\n\nThe customer step is considered to be pending if it is in the process of\r\ninitializing, signing in, signing out, and/or interacting with a customer\r\nwidget.\n\n#### Returns\n\n`boolean`\n\nTrue if the customer step is pending, otherwise false.\n\n___\n\n### isDeletingConsignment\n\n▸ **isDeletingConsignment**(`consignmentId?`): `boolean`\n\nChecks whether a given/any consignment is being deleted.\n\nA consignment ID should be provided when checking for a specific consignment,\r\notherwise it will check for any consignment.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignmentId?` | `string` | The identifier of the consignment to be checked. |\n\n#### Returns\n\n`boolean`\n\nTrue if deleting consignment(s), otherwise false.\n\n___\n\n### isDeletingInstrument\n\n▸ **isDeletingInstrument**(`instrumentId?`): `boolean`\n\nChecks whether the current customer is deleting a payment instrument.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `instrumentId?` | `string` |\n\n#### Returns\n\n`boolean`\n\nTrue if deleting a payment instrument, otherwise false.\n\n___\n\n### isExecutingPaymentMethodCheckout\n\n▸ **isExecutingPaymentMethodCheckout**(`methodId?`): `boolean`\n\nChecks whether the current customer is executing payment method checkout.\n\nIf an ID is provided, the method also checks whether the customer is\r\nexecuting payment method checkout using a specific customer method with the same ID.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId?` | `string` | The identifier of the method used for continuing the current customer. |\n\n#### Returns\n\n`boolean`\n\nTrue if the customer is executing payment method checkout, otherwise false.\n\n___\n\n### isExecutingSpamCheck\n\n▸ **isExecutingSpamCheck**(): `boolean`\n\nChecks whether spam check is executing.\n\n#### Returns\n\n`boolean`\n\nTrue if the current checkout is being updated, otherwise false.\n\n___\n\n### isFinalizingOrder\n\n▸ **isFinalizingOrder**(): `boolean`\n\nChecks whether the current order is finalizing.\n\n#### Returns\n\n`boolean`\n\nTrue if the current order is finalizing, otherwise false.\n\n___\n\n### isInitializedCustomer\n\n▸ **isInitializedCustomer**(`methodId?`): `boolean`\n\nChecks whether a wallet button is initialized.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId?` | `string` | The identifier of the payment method to check. |\n\n#### Returns\n\n`boolean`\n\nTrue if the wallet button method is initialized, otherwise false.\n\n___\n\n### isInitializingCustomer\n\n▸ **isInitializingCustomer**(`methodId?`): `boolean`\n\nChecks whether the customer step is initializing.\n\nIf an ID is provided, the method also checks whether the customer step is\r\ninitializing using a specific customer method with the same ID.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId?` | `string` | The identifier of the method used for initializing the customer step of checkout. |\n\n#### Returns\n\n`boolean`\n\nTrue if the customer step is initializing, otherwise false.\n\n___\n\n### isInitializingPayment\n\n▸ **isInitializingPayment**(`methodId?`): `boolean`\n\nChecks whether a specific or any payment method is initializing.\n\nThe method returns true if no ID is provided and at least one payment\r\nmethod is initializing.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId?` | `string` | The identifier of the payment method to check. |\n\n#### Returns\n\n`boolean`\n\nTrue if the payment method is initializing, otherwise false.\n\n___\n\n### isInitializingShipping\n\n▸ **isInitializingShipping**(`methodId?`): `boolean`\n\nChecks whether the shipping step of a checkout process is initializing.\n\nIf an identifier is provided, the method also checks whether the shipping\r\nstep is initializing using a specific shipping method with the same\r\nidentifier.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId?` | `string` | The identifer of the initialization method to check. |\n\n#### Returns\n\n`boolean`\n\nTrue if the shipping step is initializing, otherwise false.\n\n___\n\n### isLoadingB2BToken\n\n▸ **isLoadingB2BToken**(): `boolean`\n\nChecks whether a B2B token is being loaded.\n\n#### Returns\n\n`boolean`\n\nTrue if a B2B token is being loaded, otherwise false.\n\n___\n\n### isLoadingBillingCountries\n\n▸ **isLoadingBillingCountries**(): `boolean`\n\nChecks whether billing countries are loading.\n\n#### Returns\n\n`boolean`\n\nTrue if billing countries are loading, otherwise false.\n\n___\n\n### isLoadingCart\n\n▸ **isLoadingCart**(): `boolean`\n\nChecks whether the current cart is loading.\n\n#### Returns\n\n`boolean`\n\nTrue if the current cart is loading, otherwise false.\n\n___\n\n### isLoadingCheckout\n\n▸ **isLoadingCheckout**(): `boolean`\n\nChecks whether the current checkout is loading.\n\n#### Returns\n\n`boolean`\n\nTrue if the current checkout is loading, otherwise false.\n\n___\n\n### isLoadingConfig\n\n▸ **isLoadingConfig**(): `boolean`\n\nChecks whether the checkout configuration of a store is loading.\n\n#### Returns\n\n`boolean`\n\nTrue if the configuration is loading, otherwise false.\n\n___\n\n### isLoadingInstruments\n\n▸ **isLoadingInstruments**(): `boolean`\n\nChecks whether the current customer's payment instruments are loading.\n\n#### Returns\n\n`boolean`\n\nTrue if payment instruments are loading, otherwise false.\n\n___\n\n### isLoadingOrder\n\n▸ **isLoadingOrder**(): `boolean`\n\nChecks whether the current order is loading.\n\n#### Returns\n\n`boolean`\n\nTrue if the current order is loading, otherwise false.\n\n___\n\n### isLoadingPaymentMethod\n\n▸ **isLoadingPaymentMethod**(`methodId?`): `boolean`\n\nChecks whether a specific or any payment method is loading.\n\nThe method returns true if no ID is provided and at least one payment\r\nmethod is loading.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId?` | `string` | The identifier of the payment method to check. |\n\n#### Returns\n\n`boolean`\n\nTrue if the payment method is loading, otherwise false.\n\n___\n\n### isLoadingPaymentMethods\n\n▸ **isLoadingPaymentMethods**(): `boolean`\n\nChecks whether payment methods are loading.\n\n#### Returns\n\n`boolean`\n\nTrue if payment methods are loading, otherwise false.\n\n___\n\n### isLoadingPickupOptions\n\n▸ **isLoadingPickupOptions**(): `boolean`\n\nChecks whether pickup options are loading.\n\n#### Returns\n\n`boolean`\n\nTrue if pickup options are loading, otherwise false.\n\n___\n\n### isLoadingShippingCountries\n\n▸ **isLoadingShippingCountries**(): `boolean`\n\nChecks whether shipping countries are loading.\n\n#### Returns\n\n`boolean`\n\nTrue if shipping countries are loading, otherwise false.\n\n___\n\n### isLoadingShippingOptions\n\n▸ **isLoadingShippingOptions**(): `boolean`\n\nChecks whether shipping options are loading.\n\n#### Returns\n\n`boolean`\n\nTrue if shipping options are loading, otherwise false.\n\n___\n\n### isPaymentStepPending\n\n▸ **isPaymentStepPending**(): `boolean`\n\nChecks whether the payment step of a checkout is in a pending state.\n\nThe payment step is considered to be pending if it is in the process of\r\ninitializing, submitting an order, finalizing an order, and/or\r\ninteracting with a payment widget.\n\n#### Returns\n\n`boolean`\n\nTrue if the payment step is pending, otherwise false.\n\n___\n\n### isPending\n\n▸ **isPending**(): `boolean`\n\nChecks whether any checkout action is pending.\n\n#### Returns\n\n`boolean`\n\nTrue if there is a pending action, otherwise false.\n\n___\n\n### isRemovingCoupon\n\n▸ **isRemovingCoupon**(): `boolean`\n\nChecks whether the current customer is removing a coupon code.\n\n#### Returns\n\n`boolean`\n\nTrue if removing a coupon code, otherwise false.\n\n___\n\n### isRemovingGiftCertificate\n\n▸ **isRemovingGiftCertificate**(): `boolean`\n\nChecks whether the current customer is removing a gift certificate.\n\n#### Returns\n\n`boolean`\n\nTrue if removing a gift certificate, otherwise false.\n\n___\n\n### isSelectingShippingOption\n\n▸ **isSelectingShippingOption**(`consignmentId?`): `boolean`\n\nChecks whether a shipping option is being selected.\n\nA consignment ID should be provided when checking if a shipping option\r\nis being selected for a specific consignment, otherwise it will check\r\nfor all consignments.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignmentId?` | `string` | The identifier of the consignment to be checked. |\n\n#### Returns\n\n`boolean`\n\nTrue if selecting a shipping option, otherwise false.\n\n___\n\n### isSendingSignInEmail\n\n▸ **isSendingSignInEmail**(): `boolean`\n\nChecks whether a sign-in email is being sent.\n\n#### Returns\n\n`boolean`\n\nTrue if sending a sign-in email, otherwise false\n\n___\n\n### isShippingStepPending\n\n▸ **isShippingStepPending**(): `boolean`\n\nChecks whether the shipping step of a checkout is in a pending state.\n\nThe shipping step is considered to be pending if it is in the process of\r\ninitializing, updating address, selecting a shipping option, and/or\r\ninteracting with a shipping widget.\n\n#### Returns\n\n`boolean`\n\nTrue if the shipping step is pending, otherwise false.\n\n___\n\n### isSigningIn\n\n▸ **isSigningIn**(`methodId?`): `boolean`\n\nChecks whether the current customer is signing in.\n\nIf an ID is provided, the method also checks whether the customer is\r\nsigning in using a specific customer method with the same ID.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId?` | `string` | The identifier of the method used for signing in the current customer. |\n\n#### Returns\n\n`boolean`\n\nTrue if the customer is signing in, otherwise false.\n\n___\n\n### isSigningOut\n\n▸ **isSigningOut**(`methodId?`): `boolean`\n\nChecks whether the current customer is signing out.\n\nIf an ID is provided, the method also checks whether the customer is\r\nsigning out using a specific customer method with the same ID.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `methodId?` | `string` | The identifier of the method used for signing out the current customer. |\n\n#### Returns\n\n`boolean`\n\nTrue if the customer is signing out, otherwise false.\n\n___\n\n### isSubmittingOrder\n\n▸ **isSubmittingOrder**(): `boolean`\n\nChecks whether the current order is submitting.\n\n#### Returns\n\n`boolean`\n\nTrue if the current order is submitting, otherwise false.\n\n___\n\n### isUpdatingBillingAddress\n\n▸ **isUpdatingBillingAddress**(): `boolean`\n\nChecks whether the billing address is being updated.\n\n#### Returns\n\n`boolean`\n\nTrue if updating their billing address, otherwise false.\n\n___\n\n### isUpdatingCheckout\n\n▸ **isUpdatingCheckout**(): `boolean`\n\nChecks whether the current checkout is being updated.\n\n#### Returns\n\n`boolean`\n\nTrue if the current checkout is being updated, otherwise false.\n\n___\n\n### isUpdatingConsignment\n\n▸ **isUpdatingConsignment**(`consignmentId?`): `boolean`\n\nChecks whether a given/any consignment is being updated.\n\nA consignment ID should be provided when checking for a specific consignment,\r\notherwise it will check for any consignment.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `consignmentId?` | `string` | The identifier of the consignment to be checked. |\n\n#### Returns\n\n`boolean`\n\nTrue if updating consignment(s), otherwise false.\n\n___\n\n### isUpdatingShippingAddress\n\n▸ **isUpdatingShippingAddress**(): `boolean`\n\nChecks the shipping address is being updated.\n\n#### Returns\n\n`boolean`\n\nTrue if updating their shipping address, otherwise false.\n\n___\n\n### isUpdatingSubscriptions\n\n▸ **isUpdatingSubscriptions**(): `boolean`\n\nChecks whether the subscriptions are being updated.\n\n#### Returns\n\n`boolean`\n\nTrue if updating subscriptions, otherwise false.\n"
  },
  {
    "path": "docs/interfaces/Config.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Config\n\n# Interface: Config\n\n## Table of contents\n\n### Properties\n\n- [context](Config.md#context)\n- [customization](Config.md#customization)\n- [storeConfig](Config.md#storeconfig)\n\n## Properties\n\n### context\n\n• **context**: [`ContextConfig`](ContextConfig.md)\n\n___\n\n### customization\n\n• **customization**: [`CustomizationConfig`](CustomizationConfig.md)\n\n___\n\n### storeConfig\n\n• **storeConfig**: [`StoreConfig`](StoreConfig.md)\n"
  },
  {
    "path": "docs/interfaces/ConfigSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ConfigSelector\n\n# Interface: ConfigSelector\n\n## Table of contents\n\n### Methods\n\n- [getConfig](ConfigSelector.md#getconfig)\n- [getContextConfig](ConfigSelector.md#getcontextconfig)\n- [getExternalSource](ConfigSelector.md#getexternalsource)\n- [getFlashMessages](ConfigSelector.md#getflashmessages)\n- [getHost](ConfigSelector.md#gethost)\n- [getLoadError](ConfigSelector.md#getloaderror)\n- [getLocale](ConfigSelector.md#getlocale)\n- [getStoreConfig](ConfigSelector.md#getstoreconfig)\n- [getStoreConfigOrThrow](ConfigSelector.md#getstoreconfigorthrow)\n- [getVariantIdentificationToken](ConfigSelector.md#getvariantidentificationtoken)\n- [isLoading](ConfigSelector.md#isloading)\n\n## Methods\n\n### getConfig\n\n▸ **getConfig**(): `undefined` \\| [`Config`](Config.md)\n\n#### Returns\n\n`undefined` \\| [`Config`](Config.md)\n\n___\n\n### getContextConfig\n\n▸ **getContextConfig**(): `undefined` \\| [`ContextConfig`](ContextConfig.md)\n\n#### Returns\n\n`undefined` \\| [`ContextConfig`](ContextConfig.md)\n\n___\n\n### getExternalSource\n\n▸ **getExternalSource**(): `undefined` \\| `string`\n\n#### Returns\n\n`undefined` \\| `string`\n\n___\n\n### getFlashMessages\n\n▸ **getFlashMessages**(`type?`): `undefined` \\| [`FlashMessage`](FlashMessage.md)[]\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `type?` | [`FlashMessageType`](../README.md#flashmessagetype) |\n\n#### Returns\n\n`undefined` \\| [`FlashMessage`](FlashMessage.md)[]\n\n___\n\n### getHost\n\n▸ **getHost**(): `undefined` \\| `string`\n\n#### Returns\n\n`undefined` \\| `string`\n\n___\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getLocale\n\n▸ **getLocale**(): `undefined` \\| `string`\n\n#### Returns\n\n`undefined` \\| `string`\n\n___\n\n### getStoreConfig\n\n▸ **getStoreConfig**(): `undefined` \\| [`StoreConfig`](StoreConfig.md)\n\n#### Returns\n\n`undefined` \\| [`StoreConfig`](StoreConfig.md)\n\n___\n\n### getStoreConfigOrThrow\n\n▸ **getStoreConfigOrThrow**(): [`StoreConfig`](StoreConfig.md)\n\n#### Returns\n\n[`StoreConfig`](StoreConfig.md)\n\n___\n\n### getVariantIdentificationToken\n\n▸ **getVariantIdentificationToken**(): `undefined` \\| `string`\n\n#### Returns\n\n`undefined` \\| `string`\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/Consignment.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Consignment\n\n# Interface: Consignment\n\n## Table of contents\n\n### Properties\n\n- [address](Consignment.md#address)\n- [availableShippingOptions](Consignment.md#availableshippingoptions)\n- [comparisonShippingCost](Consignment.md#comparisonshippingcost)\n- [discounts](Consignment.md#discounts)\n- [handlingCost](Consignment.md#handlingcost)\n- [id](Consignment.md#id)\n- [lineItemIds](Consignment.md#lineitemids)\n- [selectedPickupOption](Consignment.md#selectedpickupoption)\n- [selectedShippingOption](Consignment.md#selectedshippingoption)\n- [shippingAddress](Consignment.md#shippingaddress)\n- [shippingCost](Consignment.md#shippingcost)\n- [shippingCostBeforeDiscount](Consignment.md#shippingcostbeforediscount)\n\n## Properties\n\n### address\n\n• **address**: [`Address`](Address.md)\n\n___\n\n### availableShippingOptions\n\n• `Optional` **availableShippingOptions**: [`ShippingOption`](ShippingOption.md)[]\n\n___\n\n### comparisonShippingCost\n\n• **comparisonShippingCost**: `number`\n\n___\n\n### discounts\n\n• **discounts**: [`ConsignmentDiscount`](../README.md#consignmentdiscount)[]\n\n___\n\n### handlingCost\n\n• **handlingCost**: `number`\n\n___\n\n### id\n\n• **id**: `string`\n\n___\n\n### lineItemIds\n\n• **lineItemIds**: `string`[]\n\n___\n\n### selectedPickupOption\n\n• `Optional` **selectedPickupOption**: [`ConsignmentPickupOption`](ConsignmentPickupOption.md)\n\n___\n\n### selectedShippingOption\n\n• `Optional` **selectedShippingOption**: [`ShippingOption`](ShippingOption.md)\n\n___\n\n### shippingAddress\n\n• **shippingAddress**: [`Address`](Address.md)\n\n___\n\n### shippingCost\n\n• **shippingCost**: `number`\n\n___\n\n### shippingCostBeforeDiscount\n\n• **shippingCostBeforeDiscount**: `number`\n"
  },
  {
    "path": "docs/interfaces/ConsignmentAssignmentBaseRequestBodyWithAddress.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ConsignmentAssignmentBaseRequestBodyWithAddress\n\n# Interface: ConsignmentAssignmentBaseRequestBodyWithAddress\n\n## Table of contents\n\n### Properties\n\n- [address](ConsignmentAssignmentBaseRequestBodyWithAddress.md#address)\n- [lineItems](ConsignmentAssignmentBaseRequestBodyWithAddress.md#lineitems)\n- [pickupOption](ConsignmentAssignmentBaseRequestBodyWithAddress.md#pickupoption)\n\n## Properties\n\n### address\n\n• **address**: [`AddressRequestBody`](AddressRequestBody.md)\n\n___\n\n### lineItems\n\n• **lineItems**: [`ConsignmentLineItem`](ConsignmentLineItem.md)[]\n\n___\n\n### pickupOption\n\n• `Optional` **pickupOption**: [`ConsignmentPickupOption`](ConsignmentPickupOption.md)\n"
  },
  {
    "path": "docs/interfaces/ConsignmentAssignmentBaseRequestBodyWithShippingAddress.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ConsignmentAssignmentBaseRequestBodyWithShippingAddress\n\n# Interface: ConsignmentAssignmentBaseRequestBodyWithShippingAddress\n\n## Table of contents\n\n### Properties\n\n- [lineItems](ConsignmentAssignmentBaseRequestBodyWithShippingAddress.md#lineitems)\n- [pickupOption](ConsignmentAssignmentBaseRequestBodyWithShippingAddress.md#pickupoption)\n- [shippingAddress](ConsignmentAssignmentBaseRequestBodyWithShippingAddress.md#shippingaddress)\n\n## Properties\n\n### lineItems\n\n• **lineItems**: [`ConsignmentLineItem`](ConsignmentLineItem.md)[]\n\n___\n\n### pickupOption\n\n• `Optional` **pickupOption**: [`ConsignmentPickupOption`](ConsignmentPickupOption.md)\n\n___\n\n### shippingAddress\n\n• **shippingAddress**: [`AddressRequestBody`](AddressRequestBody.md)\n"
  },
  {
    "path": "docs/interfaces/ConsignmentCouponDiscount.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ConsignmentCouponDiscount\n\n# Interface: ConsignmentCouponDiscount\n\n## Hierarchy\n\n- [`ConsignmentDiscountBase`](ConsignmentDiscountBase.md)\\<``\"COUPON\"``\\>\n\n  ↳ **`ConsignmentCouponDiscount`**\n\n## Table of contents\n\n### Properties\n\n- [amount](ConsignmentCouponDiscount.md#amount)\n- [couponCode](ConsignmentCouponDiscount.md#couponcode)\n- [couponId](ConsignmentCouponDiscount.md#couponid)\n- [id](ConsignmentCouponDiscount.md#id)\n- [type](ConsignmentCouponDiscount.md#type)\n\n## Properties\n\n### amount\n\n• **amount**: `number`\n\n#### Inherited from\n\n[ConsignmentDiscountBase](ConsignmentDiscountBase.md).[amount](ConsignmentDiscountBase.md#amount)\n\n___\n\n### couponCode\n\n• **couponCode**: `string`\n\n___\n\n### couponId\n\n• **couponId**: `number`\n\n___\n\n### id\n\n• **id**: `number`\n\n#### Inherited from\n\n[ConsignmentDiscountBase](ConsignmentDiscountBase.md).[id](ConsignmentDiscountBase.md#id)\n\n___\n\n### type\n\n• **type**: ``\"COUPON\"``\n\n#### Inherited from\n\n[ConsignmentDiscountBase](ConsignmentDiscountBase.md).[type](ConsignmentDiscountBase.md#type)\n"
  },
  {
    "path": "docs/interfaces/ConsignmentCreateRequestBody.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ConsignmentCreateRequestBody\n\n# Interface: ConsignmentCreateRequestBody\n\n## Table of contents\n\n### Properties\n\n- [address](ConsignmentCreateRequestBody.md#address)\n- [lineItems](ConsignmentCreateRequestBody.md#lineitems)\n- [pickupOption](ConsignmentCreateRequestBody.md#pickupoption)\n- [shippingAddress](ConsignmentCreateRequestBody.md#shippingaddress)\n\n## Properties\n\n### address\n\n• `Optional` **address**: [`AddressRequestBody`](AddressRequestBody.md)\n\n___\n\n### lineItems\n\n• **lineItems**: [`ConsignmentLineItem`](ConsignmentLineItem.md)[]\n\n___\n\n### pickupOption\n\n• `Optional` **pickupOption**: [`ConsignmentPickupOption`](ConsignmentPickupOption.md)\n\n___\n\n### shippingAddress\n\n• `Optional` **shippingAddress**: [`AddressRequestBody`](AddressRequestBody.md)\n"
  },
  {
    "path": "docs/interfaces/ConsignmentDiscountBase.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ConsignmentDiscountBase\n\n# Interface: ConsignmentDiscountBase\\<T\\>\n\n## Type parameters\n\n| Name |\n| :------ |\n| `T` |\n\n## Hierarchy\n\n- **`ConsignmentDiscountBase`**\n\n  ↳ [`ConsignmentCouponDiscount`](ConsignmentCouponDiscount.md)\n\n## Table of contents\n\n### Properties\n\n- [amount](ConsignmentDiscountBase.md#amount)\n- [id](ConsignmentDiscountBase.md#id)\n- [type](ConsignmentDiscountBase.md#type)\n\n## Properties\n\n### amount\n\n• **amount**: `number`\n\n___\n\n### id\n\n• **id**: `number`\n\n___\n\n### type\n\n• **type**: `T`\n"
  },
  {
    "path": "docs/interfaces/ConsignmentLineItem.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ConsignmentLineItem\n\n# Interface: ConsignmentLineItem\n\n## Table of contents\n\n### Properties\n\n- [itemId](ConsignmentLineItem.md#itemid)\n- [quantity](ConsignmentLineItem.md#quantity)\n\n## Properties\n\n### itemId\n\n• **itemId**: `string` \\| `number`\n\n___\n\n### quantity\n\n• **quantity**: `number`\n"
  },
  {
    "path": "docs/interfaces/ConsignmentPickupOption.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ConsignmentPickupOption\n\n# Interface: ConsignmentPickupOption\n\n## Table of contents\n\n### Properties\n\n- [pickupMethodId](ConsignmentPickupOption.md#pickupmethodid)\n\n## Properties\n\n### pickupMethodId\n\n• **pickupMethodId**: `number`\n"
  },
  {
    "path": "docs/interfaces/ConsignmentSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ConsignmentSelector\n\n# Interface: ConsignmentSelector\n\n## Table of contents\n\n### Methods\n\n- [getConsignmentByAddress](ConsignmentSelector.md#getconsignmentbyaddress)\n- [getConsignmentById](ConsignmentSelector.md#getconsignmentbyid)\n- [getConsignments](ConsignmentSelector.md#getconsignments)\n- [getConsignmentsOrThrow](ConsignmentSelector.md#getconsignmentsorthrow)\n- [getCreateError](ConsignmentSelector.md#getcreateerror)\n- [getDeleteError](ConsignmentSelector.md#getdeleteerror)\n- [getItemAssignmentError](ConsignmentSelector.md#getitemassignmenterror)\n- [getLoadError](ConsignmentSelector.md#getloaderror)\n- [getLoadShippingOptionsError](ConsignmentSelector.md#getloadshippingoptionserror)\n- [getShippingOption](ConsignmentSelector.md#getshippingoption)\n- [getUnassignedItems](ConsignmentSelector.md#getunassigneditems)\n- [getUpdateError](ConsignmentSelector.md#getupdateerror)\n- [getUpdateShippingOptionError](ConsignmentSelector.md#getupdateshippingoptionerror)\n- [isAssigningItems](ConsignmentSelector.md#isassigningitems)\n- [isCreating](ConsignmentSelector.md#iscreating)\n- [isDeleting](ConsignmentSelector.md#isdeleting)\n- [isLoading](ConsignmentSelector.md#isloading)\n- [isLoadingShippingOptions](ConsignmentSelector.md#isloadingshippingoptions)\n- [isUpdating](ConsignmentSelector.md#isupdating)\n- [isUpdatingShippingOption](ConsignmentSelector.md#isupdatingshippingoption)\n\n## Methods\n\n### getConsignmentByAddress\n\n▸ **getConsignmentByAddress**(`address`): `undefined` \\| [`Consignment`](Consignment.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `address` | [`AddressRequestBody`](AddressRequestBody.md) |\n\n#### Returns\n\n`undefined` \\| [`Consignment`](Consignment.md)\n\n___\n\n### getConsignmentById\n\n▸ **getConsignmentById**(`id`): `undefined` \\| [`Consignment`](Consignment.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `id` | `string` |\n\n#### Returns\n\n`undefined` \\| [`Consignment`](Consignment.md)\n\n___\n\n### getConsignments\n\n▸ **getConsignments**(): `undefined` \\| [`Consignment`](Consignment.md)[]\n\n#### Returns\n\n`undefined` \\| [`Consignment`](Consignment.md)[]\n\n___\n\n### getConsignmentsOrThrow\n\n▸ **getConsignmentsOrThrow**(): [`Consignment`](Consignment.md)[]\n\n#### Returns\n\n[`Consignment`](Consignment.md)[]\n\n___\n\n### getCreateError\n\n▸ **getCreateError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getDeleteError\n\n▸ **getDeleteError**(`consignmentId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `consignmentId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getItemAssignmentError\n\n▸ **getItemAssignmentError**(`address`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `address` | [`AddressRequestBody`](AddressRequestBody.md) |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getLoadShippingOptionsError\n\n▸ **getLoadShippingOptionsError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getShippingOption\n\n▸ **getShippingOption**(): `undefined` \\| [`ShippingOption`](ShippingOption.md)\n\n#### Returns\n\n`undefined` \\| [`ShippingOption`](ShippingOption.md)\n\n___\n\n### getUnassignedItems\n\n▸ **getUnassignedItems**(): [`PhysicalItem`](PhysicalItem.md)[]\n\n#### Returns\n\n[`PhysicalItem`](PhysicalItem.md)[]\n\n___\n\n### getUpdateError\n\n▸ **getUpdateError**(`consignmentId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `consignmentId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getUpdateShippingOptionError\n\n▸ **getUpdateShippingOptionError**(`consignmentId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `consignmentId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### isAssigningItems\n\n▸ **isAssigningItems**(`address`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `address` | [`AddressRequestBody`](AddressRequestBody.md) |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isCreating\n\n▸ **isCreating**(): `boolean`\n\n#### Returns\n\n`boolean`\n\n___\n\n### isDeleting\n\n▸ **isDeleting**(`consignmentId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `consignmentId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n\n___\n\n### isLoadingShippingOptions\n\n▸ **isLoadingShippingOptions**(): `boolean`\n\n#### Returns\n\n`boolean`\n\n___\n\n### isUpdating\n\n▸ **isUpdating**(`consignmentId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `consignmentId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isUpdatingShippingOption\n\n▸ **isUpdatingShippingOption**(`consignmentId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `consignmentId?` | `string` |\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/ConsignmentUpdateRequestBody.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ConsignmentUpdateRequestBody\n\n# Interface: ConsignmentUpdateRequestBody\n\n## Table of contents\n\n### Properties\n\n- [address](ConsignmentUpdateRequestBody.md#address)\n- [id](ConsignmentUpdateRequestBody.md#id)\n- [lineItems](ConsignmentUpdateRequestBody.md#lineitems)\n- [pickupOption](ConsignmentUpdateRequestBody.md#pickupoption)\n- [shippingAddress](ConsignmentUpdateRequestBody.md#shippingaddress)\n- [shippingOptionId](ConsignmentUpdateRequestBody.md#shippingoptionid)\n\n## Properties\n\n### address\n\n• `Optional` **address**: [`AddressRequestBody`](AddressRequestBody.md)\n\n___\n\n### id\n\n• **id**: `string`\n\n___\n\n### lineItems\n\n• `Optional` **lineItems**: [`ConsignmentLineItem`](ConsignmentLineItem.md)[]\n\n___\n\n### pickupOption\n\n• `Optional` **pickupOption**: [`ConsignmentPickupOption`](ConsignmentPickupOption.md)\n\n___\n\n### shippingAddress\n\n• `Optional` **shippingAddress**: [`AddressRequestBody`](AddressRequestBody.md)\n\n___\n\n### shippingOptionId\n\n• `Optional` **shippingOptionId**: `string`\n"
  },
  {
    "path": "docs/interfaces/ConsignmentsChangedEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ConsignmentsChangedEvent\n\n# Interface: ConsignmentsChangedEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](ConsignmentsChangedEvent.md#payload)\n- [type](ConsignmentsChangedEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `consignments` | [`Consignment`](Consignment.md)[] |\n| `previousConsignments` | [`Consignment`](Consignment.md)[] |\n\n___\n\n### type\n\n• **type**: [`ConsignmentsChanged`](../enums/ExtensionEventType.md#consignmentschanged)\n"
  },
  {
    "path": "docs/interfaces/ContextConfig.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ContextConfig\n\n# Interface: ContextConfig\n\n## Table of contents\n\n### Properties\n\n- [checkoutId](ContextConfig.md#checkoutid)\n- [flashMessages](ContextConfig.md#flashmessages)\n- [geoCountryCode](ContextConfig.md#geocountrycode)\n- [payment](ContextConfig.md#payment)\n\n## Properties\n\n### checkoutId\n\n• `Optional` **checkoutId**: `string`\n\n___\n\n### flashMessages\n\n• **flashMessages**: [`FlashMessage`](FlashMessage.md)[]\n\n___\n\n### geoCountryCode\n\n• **geoCountryCode**: `string`\n\n___\n\n### payment\n\n• **payment**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `formId?` | `string` |\n| `token?` | `string` |\n"
  },
  {
    "path": "docs/interfaces/Coordinates.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Coordinates\n\n# Interface: Coordinates\n\n## Table of contents\n\n### Properties\n\n- [latitude](Coordinates.md#latitude)\n- [longitude](Coordinates.md#longitude)\n\n## Properties\n\n### latitude\n\n• **latitude**: `number`\n\n___\n\n### longitude\n\n• **longitude**: `number`\n"
  },
  {
    "path": "docs/interfaces/Country.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Country\n\n# Interface: Country\n\n## Table of contents\n\n### Properties\n\n- [code](Country.md#code)\n- [hasPostalCodes](Country.md#haspostalcodes)\n- [name](Country.md#name)\n- [requiresState](Country.md#requiresstate)\n- [subdivisions](Country.md#subdivisions)\n\n## Properties\n\n### code\n\n• **code**: `string`\n\n___\n\n### hasPostalCodes\n\n• **hasPostalCodes**: `boolean`\n\n___\n\n### name\n\n• **name**: `string`\n\n___\n\n### requiresState\n\n• **requiresState**: `boolean`\n\n___\n\n### subdivisions\n\n• **subdivisions**: [`Region`](Region.md)[]\n"
  },
  {
    "path": "docs/interfaces/CountrySelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CountrySelector\n\n# Interface: CountrySelector\n\n## Table of contents\n\n### Methods\n\n- [getCountries](CountrySelector.md#getcountries)\n- [getLoadError](CountrySelector.md#getloaderror)\n- [isLoading](CountrySelector.md#isloading)\n\n## Methods\n\n### getCountries\n\n▸ **getCountries**(): `undefined` \\| [`Country`](Country.md)[]\n\n#### Returns\n\n`undefined` \\| [`Country`](Country.md)[]\n\n___\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/Coupon.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Coupon\n\n# Interface: Coupon\n\n## Table of contents\n\n### Properties\n\n- [code](Coupon.md#code)\n- [couponType](Coupon.md#coupontype)\n- [discountedAmount](Coupon.md#discountedamount)\n- [displayName](Coupon.md#displayname)\n- [hasMaxLimitReached](Coupon.md#hasmaxlimitreached)\n- [id](Coupon.md#id)\n\n## Properties\n\n### code\n\n• **code**: `string`\n\n___\n\n### couponType\n\n• **couponType**: `string`\n\n___\n\n### discountedAmount\n\n• **discountedAmount**: `number`\n\n___\n\n### displayName\n\n• **displayName**: `string`\n\n___\n\n### hasMaxLimitReached\n\n• `Optional` **hasMaxLimitReached**: `boolean`\n\n___\n\n### id\n\n• **id**: `string`\n"
  },
  {
    "path": "docs/interfaces/CouponSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CouponSelector\n\n# Interface: CouponSelector\n\n## Table of contents\n\n### Methods\n\n- [getApplyError](CouponSelector.md#getapplyerror)\n- [getCoupons](CouponSelector.md#getcoupons)\n- [getRemoveError](CouponSelector.md#getremoveerror)\n- [isApplying](CouponSelector.md#isapplying)\n- [isRemoving](CouponSelector.md#isremoving)\n\n## Methods\n\n### getApplyError\n\n▸ **getApplyError**(): `undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\n#### Returns\n\n`undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\n___\n\n### getCoupons\n\n▸ **getCoupons**(): `undefined` \\| [`Coupon`](Coupon.md)[]\n\n#### Returns\n\n`undefined` \\| [`Coupon`](Coupon.md)[]\n\n___\n\n### getRemoveError\n\n▸ **getRemoveError**(): `undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\n#### Returns\n\n`undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\n___\n\n### isApplying\n\n▸ **isApplying**(): `boolean`\n\n#### Returns\n\n`boolean`\n\n___\n\n### isRemoving\n\n▸ **isRemoving**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/CreditCardInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CreditCardInstrument\n\n# Interface: CreditCardInstrument\n\n## Table of contents\n\n### Properties\n\n- [browser\\_info](CreditCardInstrument.md#browser_info)\n- [ccCustomerCode](CreditCardInstrument.md#cccustomercode)\n- [ccCvv](CreditCardInstrument.md#cccvv)\n- [ccExpiry](CreditCardInstrument.md#ccexpiry)\n- [ccName](CreditCardInstrument.md#ccname)\n- [ccNumber](CreditCardInstrument.md#ccnumber)\n- [extraData](CreditCardInstrument.md#extradata)\n- [shouldSaveInstrument](CreditCardInstrument.md#shouldsaveinstrument)\n- [shouldSetAsDefaultInstrument](CreditCardInstrument.md#shouldsetasdefaultinstrument)\n- [threeDSecure](CreditCardInstrument.md#threedsecure)\n\n## Properties\n\n### browser\\_info\n\n• `Optional` **browser\\_info**: [`BrowserInfo`](BrowserInfo.md)\n\n___\n\n### ccCustomerCode\n\n• `Optional` **ccCustomerCode**: `string`\n\n___\n\n### ccCvv\n\n• `Optional` **ccCvv**: `string`\n\n___\n\n### ccExpiry\n\n• **ccExpiry**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `month` | `string` |\n| `year` | `string` |\n\n___\n\n### ccName\n\n• **ccName**: `string`\n\n___\n\n### ccNumber\n\n• **ccNumber**: `string`\n\n___\n\n### extraData\n\n• `Optional` **extraData**: `any`\n\n___\n\n### shouldSaveInstrument\n\n• `Optional` **shouldSaveInstrument**: `boolean`\n\n___\n\n### shouldSetAsDefaultInstrument\n\n• `Optional` **shouldSetAsDefaultInstrument**: `boolean`\n\n___\n\n### threeDSecure\n\n• `Optional` **threeDSecure**: [`ThreeDSecure`](ThreeDSecure.md) \\| [`ThreeDSecureToken`](ThreeDSecureToken.md)\n"
  },
  {
    "path": "docs/interfaces/CreditCardPaymentInitializeOptions_2.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CreditCardPaymentInitializeOptions\\_2\n\n# Interface: CreditCardPaymentInitializeOptions\\_2\n\nA set of options to initialize credit card payment methods, unless those\r\nmethods require provider-specific configuration. If the initialization is\r\nsuccessful, hosted (iframed) credit card fields will be inserted into the the\r\ncontainers specified in the options.\n\n```html\r\n<!-- These containers are where the hosted (iframed) credit card fields will be inserted -->\r\n<div id=\"card-number\"></div>\r\n<div id=\"card-name\"></div>\r\n<div id=\"card-expiry\"></div>\r\n<div id=\"card-code\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'authorizenet',\r\n    creditCard: {\r\n        form: {\r\n            fields: {\r\n                cardNumber: { containerId: 'card-number' },\r\n                cardName: { containerId: 'card-name' },\r\n                cardExpiry: { containerId: 'card-expiry' },\r\n                cardCode: { containerId: 'card-code' },\r\n            },\r\n        },\r\n    },\r\n});\r\n```\n\nAdditional options can be passed in to customize the fields and register\r\nevent callbacks.\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'authorizenet',\r\n    creditCard: {\r\n        form: {\r\n            fields: {\r\n                cardNumber: { containerId: 'card-number' },\r\n                cardName: { containerId: 'card-name' },\r\n                cardExpiry: { containerId: 'card-expiry' },\r\n                cardCode: { containerId: 'card-code' },\r\n            },\r\n            styles: {\r\n                default: {\r\n                    color: '#000',\r\n                    fontFamily: 'Arial',\r\n                },\r\n                error: {\r\n                    color: '#f00',\r\n                },\r\n                focus: {\r\n                    color: '#0f0',\r\n                },\r\n            },\r\n            onBlur({ fieldType }) {\r\n                console.log(fieldType);\r\n            },\r\n            onFocus({ fieldType }) {\r\n                console.log(fieldType);\r\n            },\r\n            onEnter({ fieldType }) {\r\n                console.log(fieldType);\r\n            },\r\n            onCardTypeChange({ cardType }) {\r\n                console.log(cardType);\r\n            },\r\n            onValidate({ errors, isValid }) {\r\n                console.log(errors);\r\n                console.log(isValid);\r\n            },\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [bigpayToken](CreditCardPaymentInitializeOptions_2.md#bigpaytoken)\n- [form](CreditCardPaymentInitializeOptions_2.md#form)\n\n## Properties\n\n### bigpayToken\n\n• `Optional` **bigpayToken**: `string`\n\n___\n\n### form\n\n• **form**: `default`\n"
  },
  {
    "path": "docs/interfaces/CreditCardPlaceHolder.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CreditCardPlaceHolder\n\n# Interface: CreditCardPlaceHolder\n\n## Table of contents\n\n### Properties\n\n- [encryptedCardNumber](CreditCardPlaceHolder.md#encryptedcardnumber)\n- [encryptedExpiryDate](CreditCardPlaceHolder.md#encryptedexpirydate)\n- [encryptedSecurityCode](CreditCardPlaceHolder.md#encryptedsecuritycode)\n\n## Properties\n\n### encryptedCardNumber\n\n• `Optional` **encryptedCardNumber**: `string`\n\n___\n\n### encryptedExpiryDate\n\n• `Optional` **encryptedExpiryDate**: `string`\n\n___\n\n### encryptedSecurityCode\n\n• **encryptedSecurityCode**: `string`\n"
  },
  {
    "path": "docs/interfaces/CssProperties.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CssProperties\n\n# Interface: CssProperties\n\n## Table of contents\n\n### Properties\n\n- [background](CssProperties.md#background)\n- [caretColor](CssProperties.md#caretcolor)\n- [color](CssProperties.md#color)\n- [display](CssProperties.md#display)\n- [font](CssProperties.md#font)\n- [fontFamily](CssProperties.md#fontfamily)\n- [fontSize](CssProperties.md#fontsize)\n- [fontSizeAdjust](CssProperties.md#fontsizeadjust)\n- [fontSmoothing](CssProperties.md#fontsmoothing)\n- [fontStretch](CssProperties.md#fontstretch)\n- [fontStyle](CssProperties.md#fontstyle)\n- [fontVariant](CssProperties.md#fontvariant)\n- [fontVariantAlternates](CssProperties.md#fontvariantalternates)\n- [fontVariantCaps](CssProperties.md#fontvariantcaps)\n- [fontVariantEastAsian](CssProperties.md#fontvarianteastasian)\n- [fontVariantLigatures](CssProperties.md#fontvariantligatures)\n- [fontVariantNumeric](CssProperties.md#fontvariantnumeric)\n- [fontWeight](CssProperties.md#fontweight)\n- [letterSpacing](CssProperties.md#letterspacing)\n- [lineHeight](CssProperties.md#lineheight)\n- [mozOsxFontSmoothing](CssProperties.md#mozosxfontsmoothing)\n- [mozTransition](CssProperties.md#moztransition)\n- [opacity](CssProperties.md#opacity)\n- [outline](CssProperties.md#outline)\n- [padding](CssProperties.md#padding)\n- [textAlign](CssProperties.md#textalign)\n- [textShadow](CssProperties.md#textshadow)\n- [transition](CssProperties.md#transition)\n- [webkitFontSmoothing](CssProperties.md#webkitfontsmoothing)\n- [webkitTransition](CssProperties.md#webkittransition)\n\n## Properties\n\n### background\n\n• `Optional` **background**: `string`\n\n___\n\n### caretColor\n\n• `Optional` **caretColor**: `string`\n\n___\n\n### color\n\n• `Optional` **color**: `string`\n\n___\n\n### display\n\n• `Optional` **display**: `string`\n\n___\n\n### font\n\n• `Optional` **font**: `string`\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\n___\n\n### fontSize\n\n• `Optional` **fontSize**: `string`\n\n___\n\n### fontSizeAdjust\n\n• `Optional` **fontSizeAdjust**: `string`\n\n___\n\n### fontSmoothing\n\n• `Optional` **fontSmoothing**: `string`\n\n___\n\n### fontStretch\n\n• `Optional` **fontStretch**: `string`\n\n___\n\n### fontStyle\n\n• `Optional` **fontStyle**: `string`\n\n___\n\n### fontVariant\n\n• `Optional` **fontVariant**: `string`\n\n___\n\n### fontVariantAlternates\n\n• `Optional` **fontVariantAlternates**: `string`\n\n___\n\n### fontVariantCaps\n\n• `Optional` **fontVariantCaps**: `string`\n\n___\n\n### fontVariantEastAsian\n\n• `Optional` **fontVariantEastAsian**: `string`\n\n___\n\n### fontVariantLigatures\n\n• `Optional` **fontVariantLigatures**: `string`\n\n___\n\n### fontVariantNumeric\n\n• `Optional` **fontVariantNumeric**: `string`\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n\n___\n\n### mozOsxFontSmoothing\n\n• `Optional` **mozOsxFontSmoothing**: `string`\n\n___\n\n### mozTransition\n\n• `Optional` **mozTransition**: `string`\n\n___\n\n### opacity\n\n• `Optional` **opacity**: `string` \\| `number`\n\n___\n\n### outline\n\n• `Optional` **outline**: `string`\n\n___\n\n### padding\n\n• `Optional` **padding**: `string`\n\n___\n\n### textAlign\n\n• `Optional` **textAlign**: `string`\n\n___\n\n### textShadow\n\n• `Optional` **textShadow**: `string`\n\n___\n\n### transition\n\n• `Optional` **transition**: `string`\n\n___\n\n### webkitFontSmoothing\n\n• `Optional` **webkitFontSmoothing**: `string`\n\n___\n\n### webkitTransition\n\n• `Optional` **webkitTransition**: `string`\n"
  },
  {
    "path": "docs/interfaces/Currency.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Currency\n\n# Interface: Currency\n\n## Table of contents\n\n### Properties\n\n- [code](Currency.md#code)\n- [decimalPlaces](Currency.md#decimalplaces)\n- [name](Currency.md#name)\n- [symbol](Currency.md#symbol)\n\n## Properties\n\n### code\n\n• **code**: `string`\n\n___\n\n### decimalPlaces\n\n• **decimalPlaces**: `number`\n\n___\n\n### name\n\n• **name**: `string`\n\n___\n\n### symbol\n\n• **symbol**: `string`\n"
  },
  {
    "path": "docs/interfaces/CustomError.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CustomError\n\n# Interface: CustomError\n\n## Hierarchy\n\n- `Error`\n\n  ↳ **`CustomError`**\n\n## Implemented by\n\n- [`StandardError`](../classes/StandardError.md)\n\n## Table of contents\n\n### Properties\n\n- [message](CustomError.md#message)\n- [subtype](CustomError.md#subtype)\n- [type](CustomError.md#type)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n#### Overrides\n\nError.message\n\n___\n\n### subtype\n\n• `Optional` **subtype**: `string`\n\n___\n\n### type\n\n• **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/CustomItem.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CustomItem\n\n# Interface: CustomItem\n\n## Table of contents\n\n### Properties\n\n- [extendedListPrice](CustomItem.md#extendedlistprice)\n- [id](CustomItem.md#id)\n- [listPrice](CustomItem.md#listprice)\n- [name](CustomItem.md#name)\n- [quantity](CustomItem.md#quantity)\n- [sku](CustomItem.md#sku)\n\n## Properties\n\n### extendedListPrice\n\n• **extendedListPrice**: `number`\n\n___\n\n### id\n\n• **id**: `string`\n\n___\n\n### listPrice\n\n• **listPrice**: `number`\n\n___\n\n### name\n\n• **name**: `string`\n\n___\n\n### quantity\n\n• **quantity**: `number`\n\n___\n\n### sku\n\n• **sku**: `string`\n"
  },
  {
    "path": "docs/interfaces/Customer.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Customer\n\n# Interface: Customer\n\n## Table of contents\n\n### Properties\n\n- [addresses](Customer.md#addresses)\n- [customerGroup](Customer.md#customergroup)\n- [email](Customer.md#email)\n- [firstName](Customer.md#firstname)\n- [fullName](Customer.md#fullname)\n- [id](Customer.md#id)\n- [isGuest](Customer.md#isguest)\n- [lastName](Customer.md#lastname)\n- [shouldEncourageSignIn](Customer.md#shouldencouragesignin)\n- [storeCredit](Customer.md#storecredit)\n\n## Properties\n\n### addresses\n\n• **addresses**: [`CustomerAddress`](CustomerAddress.md)[]\n\n___\n\n### customerGroup\n\n• `Optional` **customerGroup**: [`CustomerGroup`](CustomerGroup.md)\n\n___\n\n### email\n\n• **email**: `string`\n\nThe email address of the signed in customer.\n\n___\n\n### firstName\n\n• **firstName**: `string`\n\n___\n\n### fullName\n\n• **fullName**: `string`\n\n___\n\n### id\n\n• **id**: `number`\n\n___\n\n### isGuest\n\n• **isGuest**: `boolean`\n\n___\n\n### lastName\n\n• **lastName**: `string`\n\n___\n\n### shouldEncourageSignIn\n\n• **shouldEncourageSignIn**: `boolean`\n\nIndicates whether the customer should be prompted to sign-in.\n\nNote: You need to enable \"Prompt existing accounts to sign in\" in your Checkout Settings.\n\n___\n\n### storeCredit\n\n• **storeCredit**: `number`\n"
  },
  {
    "path": "docs/interfaces/CustomerAccountRequestBody.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CustomerAccountRequestBody\n\n# Interface: CustomerAccountRequestBody\n\n## Table of contents\n\n### Properties\n\n- [acceptsMarketingEmails](CustomerAccountRequestBody.md#acceptsmarketingemails)\n- [customFields](CustomerAccountRequestBody.md#customfields)\n- [email](CustomerAccountRequestBody.md#email)\n- [firstName](CustomerAccountRequestBody.md#firstname)\n- [lastName](CustomerAccountRequestBody.md#lastname)\n- [password](CustomerAccountRequestBody.md#password)\n\n## Properties\n\n### acceptsMarketingEmails\n\n• `Optional` **acceptsMarketingEmails**: `boolean`\n\n___\n\n### customFields\n\n• `Optional` **customFields**: \\{ `fieldId`: `string` ; `fieldValue`: `string` \\| `number` \\| `string`[]  }[]\n\n___\n\n### email\n\n• **email**: `string`\n\n___\n\n### firstName\n\n• **firstName**: `string`\n\n___\n\n### lastName\n\n• **lastName**: `string`\n\n___\n\n### password\n\n• **password**: `string`\n"
  },
  {
    "path": "docs/interfaces/CustomerAddress.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CustomerAddress\n\n# Interface: CustomerAddress\n\n## Hierarchy\n\n- [`Address`](Address.md)\n\n  ↳ **`CustomerAddress`**\n\n## Table of contents\n\n### Properties\n\n- [address1](CustomerAddress.md#address1)\n- [address2](CustomerAddress.md#address2)\n- [city](CustomerAddress.md#city)\n- [company](CustomerAddress.md#company)\n- [country](CustomerAddress.md#country)\n- [countryCode](CustomerAddress.md#countrycode)\n- [customFields](CustomerAddress.md#customfields)\n- [extraFields](CustomerAddress.md#extrafields)\n- [firstName](CustomerAddress.md#firstname)\n- [id](CustomerAddress.md#id)\n- [lastName](CustomerAddress.md#lastname)\n- [phone](CustomerAddress.md#phone)\n- [postalCode](CustomerAddress.md#postalcode)\n- [shouldSaveAddress](CustomerAddress.md#shouldsaveaddress)\n- [stateOrProvince](CustomerAddress.md#stateorprovince)\n- [stateOrProvinceCode](CustomerAddress.md#stateorprovincecode)\n- [type](CustomerAddress.md#type)\n\n## Properties\n\n### address1\n\n• **address1**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[address1](Address.md#address1)\n\n___\n\n### address2\n\n• **address2**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[address2](Address.md#address2)\n\n___\n\n### city\n\n• **city**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[city](Address.md#city)\n\n___\n\n### company\n\n• **company**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[company](Address.md#company)\n\n___\n\n### country\n\n• **country**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[country](Address.md#country)\n\n___\n\n### countryCode\n\n• **countryCode**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[countryCode](Address.md#countrycode)\n\n___\n\n### customFields\n\n• **customFields**: \\{ `fieldId`: `string` ; `fieldValue`: `string` \\| `number` \\| `string`[]  }[]\n\n#### Inherited from\n\n[Address](Address.md).[customFields](Address.md#customfields)\n\n___\n\n### extraFields\n\n• `Optional` **extraFields**: [`AddressExtraFieldValue`](AddressExtraFieldValue.md)[]\n\n#### Inherited from\n\n[Address](Address.md).[extraFields](Address.md#extrafields)\n\n___\n\n### firstName\n\n• **firstName**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[firstName](Address.md#firstname)\n\n___\n\n### id\n\n• **id**: `number`\n\n___\n\n### lastName\n\n• **lastName**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[lastName](Address.md#lastname)\n\n___\n\n### phone\n\n• **phone**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[phone](Address.md#phone)\n\n___\n\n### postalCode\n\n• **postalCode**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[postalCode](Address.md#postalcode)\n\n___\n\n### shouldSaveAddress\n\n• `Optional` **shouldSaveAddress**: `boolean`\n\n#### Inherited from\n\n[Address](Address.md).[shouldSaveAddress](Address.md#shouldsaveaddress)\n\n___\n\n### stateOrProvince\n\n• **stateOrProvince**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[stateOrProvince](Address.md#stateorprovince)\n\n___\n\n### stateOrProvinceCode\n\n• **stateOrProvinceCode**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[stateOrProvinceCode](Address.md#stateorprovincecode)\n\n___\n\n### type\n\n• **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/CustomerCredentials.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CustomerCredentials\n\n# Interface: CustomerCredentials\n\n## Table of contents\n\n### Properties\n\n- [cartId](CustomerCredentials.md#cartid)\n- [email](CustomerCredentials.md#email)\n- [password](CustomerCredentials.md#password)\n\n## Properties\n\n### cartId\n\n• `Optional` **cartId**: `string`\n\n___\n\n### email\n\n• **email**: `string`\n\n___\n\n### password\n\n• **password**: `string`\n"
  },
  {
    "path": "docs/interfaces/CustomerGroup.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CustomerGroup\n\n# Interface: CustomerGroup\n\n## Table of contents\n\n### Properties\n\n- [id](CustomerGroup.md#id)\n- [name](CustomerGroup.md#name)\n\n## Properties\n\n### id\n\n• **id**: `number`\n\n___\n\n### name\n\n• **name**: `string`\n"
  },
  {
    "path": "docs/interfaces/CustomerPasswordRequirements.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CustomerPasswordRequirements\n\n# Interface: CustomerPasswordRequirements\n\n## Table of contents\n\n### Properties\n\n- [alpha](CustomerPasswordRequirements.md#alpha)\n- [description](CustomerPasswordRequirements.md#description)\n- [minlength](CustomerPasswordRequirements.md#minlength)\n- [numeric](CustomerPasswordRequirements.md#numeric)\n\n## Properties\n\n### alpha\n\n• **alpha**: `string`\n\n___\n\n### description\n\n• **description**: `string`\n\n___\n\n### minlength\n\n• **minlength**: `number`\n\n___\n\n### numeric\n\n• **numeric**: `string`\n"
  },
  {
    "path": "docs/interfaces/CustomerRequestOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CustomerRequestOptions\n\n# Interface: CustomerRequestOptions\n\nA set of options for configuring any requests related to the customer step of\r\nthe current checkout flow.\n\nSome payment methods have their own sign-in or sign-out flow. Therefore, you\r\nneed to indicate the method you want to use if you need to trigger a specific\r\nflow for signing in or out a customer. Otherwise, these options are not required.\n\n## Hierarchy\n\n- [`RequestOptions`](RequestOptions.md)\n\n  ↳ **`CustomerRequestOptions`**\n\n  ↳↳ [`BaseCustomerInitializeOptions`](BaseCustomerInitializeOptions.md)\n\n  ↳↳ [`ExecutePaymentMethodCheckoutOptions`](ExecutePaymentMethodCheckoutOptions.md)\n\n## Table of contents\n\n### Properties\n\n- [methodId](CustomerRequestOptions.md#methodid)\n- [params](CustomerRequestOptions.md#params)\n- [timeout](CustomerRequestOptions.md#timeout)\n- [version](CustomerRequestOptions.md#version)\n\n## Properties\n\n### methodId\n\n• `Optional` **methodId**: `string`\n\n___\n\n### params\n\n• `Optional` **params**: `object`\n\nThe parameters of the request, if required.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[params](RequestOptions.md#params)\n\n___\n\n### timeout\n\n• `Optional` **timeout**: `default`\n\nProvide this option if you want to cancel or time out the request. If the\r\ntimeout object completes before the request, the request will be\r\ncancelled.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[timeout](RequestOptions.md#timeout)\n\n___\n\n### version\n\n• `Optional` **version**: `number`\n\nThe version of the checkout, used for optimistic concurrency control.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[version](RequestOptions.md#version)\n"
  },
  {
    "path": "docs/interfaces/CustomerSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CustomerSelector\n\n# Interface: CustomerSelector\n\n## Table of contents\n\n### Methods\n\n- [getCreateAccountError](CustomerSelector.md#getcreateaccounterror)\n- [getCreateAddressError](CustomerSelector.md#getcreateaddresserror)\n- [getCustomer](CustomerSelector.md#getcustomer)\n- [getCustomerOrThrow](CustomerSelector.md#getcustomerorthrow)\n- [isCreatingCustomerAccount](CustomerSelector.md#iscreatingcustomeraccount)\n- [isCreatingCustomerAddress](CustomerSelector.md#iscreatingcustomeraddress)\n\n## Methods\n\n### getCreateAccountError\n\n▸ **getCreateAccountError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getCreateAddressError\n\n▸ **getCreateAddressError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getCustomer\n\n▸ **getCustomer**(): `undefined` \\| [`Customer`](Customer.md)\n\n#### Returns\n\n`undefined` \\| [`Customer`](Customer.md)\n\n___\n\n### getCustomerOrThrow\n\n▸ **getCustomerOrThrow**(): [`Customer`](Customer.md)\n\n#### Returns\n\n[`Customer`](Customer.md)\n\n___\n\n### isCreatingCustomerAccount\n\n▸ **isCreatingCustomerAccount**(): `boolean`\n\n#### Returns\n\n`boolean`\n\n___\n\n### isCreatingCustomerAddress\n\n▸ **isCreatingCustomerAddress**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/CustomerStrategySelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CustomerStrategySelector\n\n# Interface: CustomerStrategySelector\n\n## Table of contents\n\n### Methods\n\n- [getExecutePaymentMethodCheckoutError](CustomerStrategySelector.md#getexecutepaymentmethodcheckouterror)\n- [getInitializeError](CustomerStrategySelector.md#getinitializeerror)\n- [getSignInError](CustomerStrategySelector.md#getsigninerror)\n- [getSignOutError](CustomerStrategySelector.md#getsignouterror)\n- [getWidgetInteractionError](CustomerStrategySelector.md#getwidgetinteractionerror)\n- [isExecutingPaymentMethodCheckout](CustomerStrategySelector.md#isexecutingpaymentmethodcheckout)\n- [isInitialized](CustomerStrategySelector.md#isinitialized)\n- [isInitializing](CustomerStrategySelector.md#isinitializing)\n- [isSigningIn](CustomerStrategySelector.md#issigningin)\n- [isSigningOut](CustomerStrategySelector.md#issigningout)\n- [isWidgetInteracting](CustomerStrategySelector.md#iswidgetinteracting)\n\n## Methods\n\n### getExecutePaymentMethodCheckoutError\n\n▸ **getExecutePaymentMethodCheckoutError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getInitializeError\n\n▸ **getInitializeError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getSignInError\n\n▸ **getSignInError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getSignOutError\n\n▸ **getSignOutError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getWidgetInteractionError\n\n▸ **getWidgetInteractionError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### isExecutingPaymentMethodCheckout\n\n▸ **isExecutingPaymentMethodCheckout**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isInitialized\n\n▸ **isInitialized**(`methodId`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isInitializing\n\n▸ **isInitializing**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isSigningIn\n\n▸ **isSigningIn**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isSigningOut\n\n▸ **isSigningOut**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isWidgetInteracting\n\n▸ **isWidgetInteracting**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/CustomizationConfig.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / CustomizationConfig\n\n# Interface: CustomizationConfig\n\n## Table of contents\n\n### Properties\n\n- [languageData](CustomizationConfig.md#languagedata)\n\n## Properties\n\n### languageData\n\n• **languageData**: `any`[]\n"
  },
  {
    "path": "docs/interfaces/DigitalItem.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / DigitalItem\n\n# Interface: DigitalItem\n\n## Hierarchy\n\n- [`LineItem`](LineItem.md)\n\n  ↳ **`DigitalItem`**\n\n## Table of contents\n\n### Properties\n\n- [addedByPromotion](DigitalItem.md#addedbypromotion)\n- [backorderMessage](DigitalItem.md#backordermessage)\n- [brand](DigitalItem.md#brand)\n- [categories](DigitalItem.md#categories)\n- [categoryNames](DigitalItem.md#categorynames)\n- [comparisonPrice](DigitalItem.md#comparisonprice)\n- [couponAmount](DigitalItem.md#couponamount)\n- [discountAmount](DigitalItem.md#discountamount)\n- [discounts](DigitalItem.md#discounts)\n- [downloadFileUrls](DigitalItem.md#downloadfileurls)\n- [downloadPageUrl](DigitalItem.md#downloadpageurl)\n- [downloadSize](DigitalItem.md#downloadsize)\n- [extendedComparisonPrice](DigitalItem.md#extendedcomparisonprice)\n- [extendedListPrice](DigitalItem.md#extendedlistprice)\n- [extendedSalePrice](DigitalItem.md#extendedsaleprice)\n- [id](DigitalItem.md#id)\n- [imageUrl](DigitalItem.md#imageurl)\n- [isTaxable](DigitalItem.md#istaxable)\n- [listPrice](DigitalItem.md#listprice)\n- [name](DigitalItem.md#name)\n- [options](DigitalItem.md#options)\n- [parentId](DigitalItem.md#parentid)\n- [productId](DigitalItem.md#productid)\n- [quantity](DigitalItem.md#quantity)\n- [quantityBackordered](DigitalItem.md#quantitybackordered)\n- [retailPrice](DigitalItem.md#retailprice)\n- [salePrice](DigitalItem.md#saleprice)\n- [sku](DigitalItem.md#sku)\n- [socialMedia](DigitalItem.md#socialmedia)\n- [stockPosition](DigitalItem.md#stockposition)\n- [url](DigitalItem.md#url)\n- [variantId](DigitalItem.md#variantid)\n\n## Properties\n\n### addedByPromotion\n\n• **addedByPromotion**: `boolean`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[addedByPromotion](LineItem.md#addedbypromotion)\n\n___\n\n### backorderMessage\n\n• `Optional` **backorderMessage**: ``null`` \\| `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[backorderMessage](LineItem.md#backordermessage)\n\n___\n\n### brand\n\n• **brand**: `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[brand](LineItem.md#brand)\n\n___\n\n### categories\n\n• `Optional` **categories**: [`LineItemCategory`](LineItemCategory.md)[][]\n\n#### Inherited from\n\n[LineItem](LineItem.md).[categories](LineItem.md#categories)\n\n___\n\n### categoryNames\n\n• `Optional` **categoryNames**: `string`[]\n\n#### Inherited from\n\n[LineItem](LineItem.md).[categoryNames](LineItem.md#categorynames)\n\n___\n\n### comparisonPrice\n\n• **comparisonPrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[comparisonPrice](LineItem.md#comparisonprice)\n\n___\n\n### couponAmount\n\n• **couponAmount**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[couponAmount](LineItem.md#couponamount)\n\n___\n\n### discountAmount\n\n• **discountAmount**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[discountAmount](LineItem.md#discountamount)\n\n___\n\n### discounts\n\n• **discounts**: \\{ `discountedAmount`: `number` ; `name`: `string`  }[]\n\n#### Inherited from\n\n[LineItem](LineItem.md).[discounts](LineItem.md#discounts)\n\n___\n\n### downloadFileUrls\n\n• **downloadFileUrls**: `string`[]\n\n___\n\n### downloadPageUrl\n\n• **downloadPageUrl**: `string`\n\n___\n\n### downloadSize\n\n• **downloadSize**: `string`\n\n___\n\n### extendedComparisonPrice\n\n• **extendedComparisonPrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[extendedComparisonPrice](LineItem.md#extendedcomparisonprice)\n\n___\n\n### extendedListPrice\n\n• **extendedListPrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[extendedListPrice](LineItem.md#extendedlistprice)\n\n___\n\n### extendedSalePrice\n\n• **extendedSalePrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[extendedSalePrice](LineItem.md#extendedsaleprice)\n\n___\n\n### id\n\n• **id**: `string` \\| `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[id](LineItem.md#id)\n\n___\n\n### imageUrl\n\n• **imageUrl**: `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[imageUrl](LineItem.md#imageurl)\n\n___\n\n### isTaxable\n\n• **isTaxable**: `boolean`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[isTaxable](LineItem.md#istaxable)\n\n___\n\n### listPrice\n\n• **listPrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[listPrice](LineItem.md#listprice)\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[name](LineItem.md#name)\n\n___\n\n### options\n\n• `Optional` **options**: [`LineItemOption`](LineItemOption.md)[]\n\n#### Inherited from\n\n[LineItem](LineItem.md).[options](LineItem.md#options)\n\n___\n\n### parentId\n\n• `Optional` **parentId**: ``null`` \\| `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[parentId](LineItem.md#parentid)\n\n___\n\n### productId\n\n• **productId**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[productId](LineItem.md#productid)\n\n___\n\n### quantity\n\n• **quantity**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[quantity](LineItem.md#quantity)\n\n___\n\n### quantityBackordered\n\n• `Optional` **quantityBackordered**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[quantityBackordered](LineItem.md#quantitybackordered)\n\n___\n\n### retailPrice\n\n• **retailPrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[retailPrice](LineItem.md#retailprice)\n\n___\n\n### salePrice\n\n• **salePrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[salePrice](LineItem.md#saleprice)\n\n___\n\n### sku\n\n• **sku**: `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[sku](LineItem.md#sku)\n\n___\n\n### socialMedia\n\n• `Optional` **socialMedia**: [`LineItemSocialData`](LineItemSocialData.md)[]\n\n#### Inherited from\n\n[LineItem](LineItem.md).[socialMedia](LineItem.md#socialmedia)\n\n___\n\n### stockPosition\n\n• `Optional` **stockPosition**: [`StockPosition`](StockPosition.md)\n\n#### Inherited from\n\n[LineItem](LineItem.md).[stockPosition](LineItem.md#stockposition)\n\n___\n\n### url\n\n• **url**: `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[url](LineItem.md#url)\n\n___\n\n### variantId\n\n• **variantId**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[variantId](LineItem.md#variantid)\n"
  },
  {
    "path": "docs/interfaces/Discount.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Discount\n\n# Interface: Discount\n\n## Table of contents\n\n### Properties\n\n- [discountedAmount](Discount.md#discountedamount)\n- [id](Discount.md#id)\n\n## Properties\n\n### discountedAmount\n\n• **discountedAmount**: `number`\n\n___\n\n### id\n\n• **id**: `string`\n"
  },
  {
    "path": "docs/interfaces/DisplaySettings.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / DisplaySettings\n\n# Interface: DisplaySettings\n\n## Table of contents\n\n### Properties\n\n- [hidePriceFromGuests](DisplaySettings.md#hidepricefromguests)\n\n## Properties\n\n### hidePriceFromGuests\n\n• **hidePriceFromGuests**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/EmbeddedCheckoutCompleteEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckoutCompleteEvent\n\n# Interface: EmbeddedCheckoutCompleteEvent\n\n## Table of contents\n\n### Properties\n\n- [type](EmbeddedCheckoutCompleteEvent.md#type)\n\n## Properties\n\n### type\n\n• **type**: [`CheckoutComplete`](../enums/EmbeddedCheckoutEventType.md#checkoutcomplete)\n"
  },
  {
    "path": "docs/interfaces/EmbeddedCheckoutError.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckoutError\n\n# Interface: EmbeddedCheckoutError\n\n## Table of contents\n\n### Properties\n\n- [message](EmbeddedCheckoutError.md#message)\n- [subtype](EmbeddedCheckoutError.md#subtype)\n- [type](EmbeddedCheckoutError.md#type)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n___\n\n### subtype\n\n• `Optional` **subtype**: `string`\n\n___\n\n### type\n\n• `Optional` **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/EmbeddedCheckoutErrorEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckoutErrorEvent\n\n# Interface: EmbeddedCheckoutErrorEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](EmbeddedCheckoutErrorEvent.md#payload)\n- [type](EmbeddedCheckoutErrorEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: [`EmbeddedCheckoutError`](EmbeddedCheckoutError.md)\n\n___\n\n### type\n\n• **type**: [`CheckoutError`](../enums/EmbeddedCheckoutEventType.md#checkouterror)\n"
  },
  {
    "path": "docs/interfaces/EmbeddedCheckoutFrameErrorEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckoutFrameErrorEvent\n\n# Interface: EmbeddedCheckoutFrameErrorEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](EmbeddedCheckoutFrameErrorEvent.md#payload)\n- [type](EmbeddedCheckoutFrameErrorEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: [`EmbeddedCheckoutError`](EmbeddedCheckoutError.md)\n\n___\n\n### type\n\n• **type**: [`FrameError`](../enums/EmbeddedCheckoutEventType.md#frameerror)\n"
  },
  {
    "path": "docs/interfaces/EmbeddedCheckoutFrameLoadedEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckoutFrameLoadedEvent\n\n# Interface: EmbeddedCheckoutFrameLoadedEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](EmbeddedCheckoutFrameLoadedEvent.md#payload)\n- [type](EmbeddedCheckoutFrameLoadedEvent.md#type)\n\n## Properties\n\n### payload\n\n• `Optional` **payload**: [`EmbeddedContentOptions`](EmbeddedContentOptions.md)\n\n___\n\n### type\n\n• **type**: [`FrameLoaded`](../enums/EmbeddedCheckoutEventType.md#frameloaded)\n"
  },
  {
    "path": "docs/interfaces/EmbeddedCheckoutLoadedEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckoutLoadedEvent\n\n# Interface: EmbeddedCheckoutLoadedEvent\n\n## Table of contents\n\n### Properties\n\n- [type](EmbeddedCheckoutLoadedEvent.md#type)\n\n## Properties\n\n### type\n\n• **type**: [`CheckoutLoaded`](../enums/EmbeddedCheckoutEventType.md#checkoutloaded)\n"
  },
  {
    "path": "docs/interfaces/EmbeddedCheckoutMessenger.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckoutMessenger\n\n# Interface: EmbeddedCheckoutMessenger\n\n## Table of contents\n\n### Methods\n\n- [postComplete](EmbeddedCheckoutMessenger.md#postcomplete)\n- [postError](EmbeddedCheckoutMessenger.md#posterror)\n- [postFrameError](EmbeddedCheckoutMessenger.md#postframeerror)\n- [postFrameLoaded](EmbeddedCheckoutMessenger.md#postframeloaded)\n- [postLoaded](EmbeddedCheckoutMessenger.md#postloaded)\n- [postSignedOut](EmbeddedCheckoutMessenger.md#postsignedout)\n- [receiveStyles](EmbeddedCheckoutMessenger.md#receivestyles)\n\n## Methods\n\n### postComplete\n\n▸ **postComplete**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### postError\n\n▸ **postError**(`payload`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `payload` | `Error` \\| [`CustomError`](CustomError.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### postFrameError\n\n▸ **postFrameError**(`payload`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `payload` | `Error` \\| [`CustomError`](CustomError.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### postFrameLoaded\n\n▸ **postFrameLoaded**(`payload?`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `payload?` | [`EmbeddedContentOptions`](EmbeddedContentOptions.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### postLoaded\n\n▸ **postLoaded**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### postSignedOut\n\n▸ **postSignedOut**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### receiveStyles\n\n▸ **receiveStyles**(`handler`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `handler` | (`styles`: [`EmbeddedCheckoutStyles`](EmbeddedCheckoutStyles.md)) => `void` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/EmbeddedCheckoutMessengerOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckoutMessengerOptions\n\n# Interface: EmbeddedCheckoutMessengerOptions\n\n## Table of contents\n\n### Properties\n\n- [parentOrigin](EmbeddedCheckoutMessengerOptions.md#parentorigin)\n- [parentWindow](EmbeddedCheckoutMessengerOptions.md#parentwindow)\n\n## Properties\n\n### parentOrigin\n\n• **parentOrigin**: `string`\n\n___\n\n### parentWindow\n\n• `Optional` **parentWindow**: `Window`\n"
  },
  {
    "path": "docs/interfaces/EmbeddedCheckoutOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckoutOptions\n\n# Interface: EmbeddedCheckoutOptions\n\n## Table of contents\n\n### Properties\n\n- [containerId](EmbeddedCheckoutOptions.md#containerid)\n- [styles](EmbeddedCheckoutOptions.md#styles)\n- [url](EmbeddedCheckoutOptions.md#url)\n\n### Methods\n\n- [onComplete](EmbeddedCheckoutOptions.md#oncomplete)\n- [onError](EmbeddedCheckoutOptions.md#onerror)\n- [onFrameError](EmbeddedCheckoutOptions.md#onframeerror)\n- [onFrameLoad](EmbeddedCheckoutOptions.md#onframeload)\n- [onLoad](EmbeddedCheckoutOptions.md#onload)\n- [onSignOut](EmbeddedCheckoutOptions.md#onsignout)\n\n## Properties\n\n### containerId\n\n• **containerId**: `string`\n\n___\n\n### styles\n\n• `Optional` **styles**: [`EmbeddedCheckoutStyles`](EmbeddedCheckoutStyles.md)\n\n___\n\n### url\n\n• **url**: `string`\n\n## Methods\n\n### onComplete\n\n▸ **onComplete**(`event`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `event` | [`EmbeddedCheckoutCompleteEvent`](EmbeddedCheckoutCompleteEvent.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`event`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `event` | [`EmbeddedCheckoutErrorEvent`](EmbeddedCheckoutErrorEvent.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### onFrameError\n\n▸ **onFrameError**(`event`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `event` | [`EmbeddedCheckoutFrameErrorEvent`](EmbeddedCheckoutFrameErrorEvent.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### onFrameLoad\n\n▸ **onFrameLoad**(`event`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `event` | [`EmbeddedCheckoutFrameLoadedEvent`](EmbeddedCheckoutFrameLoadedEvent.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### onLoad\n\n▸ **onLoad**(`event`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `event` | [`EmbeddedCheckoutLoadedEvent`](EmbeddedCheckoutLoadedEvent.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### onSignOut\n\n▸ **onSignOut**(`event`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `event` | [`EmbeddedCheckoutSignedOutEvent`](EmbeddedCheckoutSignedOutEvent.md) |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/EmbeddedCheckoutSignedOutEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckoutSignedOutEvent\n\n# Interface: EmbeddedCheckoutSignedOutEvent\n\n## Table of contents\n\n### Properties\n\n- [type](EmbeddedCheckoutSignedOutEvent.md#type)\n\n## Properties\n\n### type\n\n• **type**: [`SignedOut`](../enums/EmbeddedCheckoutEventType.md#signedout)\n"
  },
  {
    "path": "docs/interfaces/EmbeddedCheckoutStyles.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedCheckoutStyles\n\n# Interface: EmbeddedCheckoutStyles\n\n## Table of contents\n\n### Properties\n\n- [body](EmbeddedCheckoutStyles.md#body)\n- [button](EmbeddedCheckoutStyles.md#button)\n- [checkbox](EmbeddedCheckoutStyles.md#checkbox)\n- [checklist](EmbeddedCheckoutStyles.md#checklist)\n- [discountBanner](EmbeddedCheckoutStyles.md#discountbanner)\n- [heading](EmbeddedCheckoutStyles.md#heading)\n- [input](EmbeddedCheckoutStyles.md#input)\n- [label](EmbeddedCheckoutStyles.md#label)\n- [link](EmbeddedCheckoutStyles.md#link)\n- [loadingBanner](EmbeddedCheckoutStyles.md#loadingbanner)\n- [loadingIndicator](EmbeddedCheckoutStyles.md#loadingindicator)\n- [orderSummary](EmbeddedCheckoutStyles.md#ordersummary)\n- [radio](EmbeddedCheckoutStyles.md#radio)\n- [secondaryButton](EmbeddedCheckoutStyles.md#secondarybutton)\n- [secondaryHeading](EmbeddedCheckoutStyles.md#secondaryheading)\n- [secondaryText](EmbeddedCheckoutStyles.md#secondarytext)\n- [select](EmbeddedCheckoutStyles.md#select)\n- [step](EmbeddedCheckoutStyles.md#step)\n- [text](EmbeddedCheckoutStyles.md#text)\n\n## Properties\n\n### body\n\n• `Optional` **body**: [`BodyStyles`](BodyStyles.md)\n\n___\n\n### button\n\n• `Optional` **button**: [`ButtonStyles`](ButtonStyles.md)\n\n___\n\n### checkbox\n\n• `Optional` **checkbox**: [`CheckableInputStyles`](CheckableInputStyles.md)\n\n___\n\n### checklist\n\n• `Optional` **checklist**: [`ChecklistStyles`](ChecklistStyles.md)\n\n___\n\n### discountBanner\n\n• `Optional` **discountBanner**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### heading\n\n• `Optional` **heading**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### input\n\n• `Optional` **input**: [`TextInputStyles`](TextInputStyles.md)\n\n___\n\n### label\n\n• `Optional` **label**: [`LabelStyles`](LabelStyles.md)\n\n___\n\n### link\n\n• `Optional` **link**: [`LinkStyles`](LinkStyles.md)\n\n___\n\n### loadingBanner\n\n• `Optional` **loadingBanner**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### loadingIndicator\n\n• `Optional` **loadingIndicator**: `LoadingIndicatorStyles`\n\n___\n\n### orderSummary\n\n• `Optional` **orderSummary**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### radio\n\n• `Optional` **radio**: [`CheckableInputStyles`](CheckableInputStyles.md)\n\n___\n\n### secondaryButton\n\n• `Optional` **secondaryButton**: [`ButtonStyles`](ButtonStyles.md)\n\n___\n\n### secondaryHeading\n\n• `Optional` **secondaryHeading**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### secondaryText\n\n• `Optional` **secondaryText**: [`InlineElementStyles`](InlineElementStyles.md)\n\n___\n\n### select\n\n• `Optional` **select**: [`InputStyles`](InputStyles.md)\n\n___\n\n### step\n\n• `Optional` **step**: [`StepStyles`](StepStyles.md)\n\n___\n\n### text\n\n• `Optional` **text**: [`InlineElementStyles`](InlineElementStyles.md)\n"
  },
  {
    "path": "docs/interfaces/EmbeddedContentOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / EmbeddedContentOptions\n\n# Interface: EmbeddedContentOptions\n\n## Table of contents\n\n### Properties\n\n- [contentId](EmbeddedContentOptions.md#contentid)\n\n## Properties\n\n### contentId\n\n• `Optional` **contentId**: `string`\n"
  },
  {
    "path": "docs/interfaces/ErrorLogger.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ErrorLogger\n\n# Interface: ErrorLogger\n\n## Table of contents\n\n### Methods\n\n- [log](ErrorLogger.md#log)\n\n## Methods\n\n### log\n\n▸ **log**(`error`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `Error` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/ExecutePaymentMethodCheckoutOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExecutePaymentMethodCheckoutOptions\n\n# Interface: ExecutePaymentMethodCheckoutOptions\n\nA set of options that are required to pass the customer step of the\r\ncurrent checkout flow.\n\nSome payment methods have specific suggestion for customer to pass\r\nthe customer step. For example, Bolt suggests the customer to use\r\ntheir custom checkout with prefilled form values. As a result, you\r\nmay need to provide additional information, error handler or callback\r\nto execution method.\n\n## Hierarchy\n\n- [`CustomerRequestOptions`](CustomerRequestOptions.md)\n\n  ↳ **`ExecutePaymentMethodCheckoutOptions`**\n\n## Table of contents\n\n### Properties\n\n- [methodId](ExecutePaymentMethodCheckoutOptions.md#methodid)\n- [params](ExecutePaymentMethodCheckoutOptions.md#params)\n- [timeout](ExecutePaymentMethodCheckoutOptions.md#timeout)\n- [version](ExecutePaymentMethodCheckoutOptions.md#version)\n\n### Methods\n\n- [checkoutPaymentMethodExecuted](ExecutePaymentMethodCheckoutOptions.md#checkoutpaymentmethodexecuted)\n- [continueWithCheckoutCallback](ExecutePaymentMethodCheckoutOptions.md#continuewithcheckoutcallback)\n\n## Properties\n\n### methodId\n\n• `Optional` **methodId**: `string`\n\n#### Inherited from\n\n[CustomerRequestOptions](CustomerRequestOptions.md).[methodId](CustomerRequestOptions.md#methodid)\n\n___\n\n### params\n\n• `Optional` **params**: `object`\n\nThe parameters of the request, if required.\n\n#### Inherited from\n\n[CustomerRequestOptions](CustomerRequestOptions.md).[params](CustomerRequestOptions.md#params)\n\n___\n\n### timeout\n\n• `Optional` **timeout**: `default`\n\nProvide this option if you want to cancel or time out the request. If the\r\ntimeout object completes before the request, the request will be\r\ncancelled.\n\n#### Inherited from\n\n[CustomerRequestOptions](CustomerRequestOptions.md).[timeout](CustomerRequestOptions.md#timeout)\n\n___\n\n### version\n\n• `Optional` **version**: `number`\n\nThe version of the checkout, used for optimistic concurrency control.\n\n#### Inherited from\n\n[CustomerRequestOptions](CustomerRequestOptions.md).[version](CustomerRequestOptions.md#version)\n\n## Methods\n\n### checkoutPaymentMethodExecuted\n\n▸ **checkoutPaymentMethodExecuted**(`data?`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `data?` | [`CheckoutPaymentMethodExecutedOptions`](CheckoutPaymentMethodExecutedOptions.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### continueWithCheckoutCallback\n\n▸ **continueWithCheckoutCallback**(): `void`\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/Extension.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Extension\n\n# Interface: Extension\n\n## Table of contents\n\n### Properties\n\n- [id](Extension.md#id)\n- [name](Extension.md#name)\n- [region](Extension.md#region)\n- [type](Extension.md#type)\n- [url](Extension.md#url)\n\n## Properties\n\n### id\n\n• **id**: `string`\n\n___\n\n### name\n\n• **name**: `string`\n\n___\n\n### region\n\n• **region**: [`ExtensionRegion`](../enums/ExtensionRegion.md)\n\n___\n\n### type\n\n• **type**: [`ExtensionType`](../enums/ExtensionType.md)\n\n___\n\n### url\n\n• **url**: `string`\n"
  },
  {
    "path": "docs/interfaces/ExtensionCommandMap.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExtensionCommandMap\n\n# Interface: ExtensionCommandMap\n\n## Table of contents\n\n### Properties\n\n- [EXTENSION:RELOAD\\_CHECKOUT](ExtensionCommandMap.md#extension:reload_checkout)\n- [EXTENSION:RE\\_RENDER\\_SHIPPING\\_FORM](ExtensionCommandMap.md#extension:re_render_shipping_form)\n- [EXTENSION:RE\\_RENDER\\_SHIPPING\\_STEP](ExtensionCommandMap.md#extension:re_render_shipping_step)\n- [EXTENSION:SET\\_IFRAME\\_STYLE](ExtensionCommandMap.md#extension:set_iframe_style)\n- [EXTENSION:SHOW\\_LOADING\\_INDICATOR](ExtensionCommandMap.md#extension:show_loading_indicator)\n\n## Properties\n\n### EXTENSION:RELOAD\\_CHECKOUT\n\n• **EXTENSION:RELOAD\\_CHECKOUT**: [`ReloadCheckoutCommand`](ReloadCheckoutCommand.md)\n\n___\n\n### EXTENSION:RE\\_RENDER\\_SHIPPING\\_FORM\n\n• **EXTENSION:RE\\_RENDER\\_SHIPPING\\_FORM**: [`ReRenderShippingForm`](ReRenderShippingForm.md)\n\n___\n\n### EXTENSION:RE\\_RENDER\\_SHIPPING\\_STEP\n\n• **EXTENSION:RE\\_RENDER\\_SHIPPING\\_STEP**: [`ReRenderShippingStep`](ReRenderShippingStep.md)\n\n___\n\n### EXTENSION:SET\\_IFRAME\\_STYLE\n\n• **EXTENSION:SET\\_IFRAME\\_STYLE**: [`SetIframeStyleCommand`](SetIframeStyleCommand.md)\n\n___\n\n### EXTENSION:SHOW\\_LOADING\\_INDICATOR\n\n• **EXTENSION:SHOW\\_LOADING\\_INDICATOR**: [`ShowLoadingIndicatorCommand`](ShowLoadingIndicatorCommand.md)\n"
  },
  {
    "path": "docs/interfaces/ExtensionQueryMap.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExtensionQueryMap\n\n# Interface: ExtensionQueryMap\n\n## Table of contents\n\n### Properties\n\n- [EXTENSION:GET\\_CONSIGNMENTS](ExtensionQueryMap.md#extension:get_consignments)\n\n## Properties\n\n### EXTENSION:GET\\_CONSIGNMENTS\n\n• **EXTENSION:GET\\_CONSIGNMENTS**: [`GetConsignmentsQuery`](GetConsignmentsQuery.md)\n"
  },
  {
    "path": "docs/interfaces/ExtensionSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExtensionSelector\n\n# Interface: ExtensionSelector\n\n## Table of contents\n\n### Methods\n\n- [getExtensionByRegion](ExtensionSelector.md#getextensionbyregion)\n- [getExtensions](ExtensionSelector.md#getextensions)\n- [getLoadError](ExtensionSelector.md#getloaderror)\n- [isLoading](ExtensionSelector.md#isloading)\n\n## Methods\n\n### getExtensionByRegion\n\n▸ **getExtensionByRegion**(`region`): `undefined` \\| [`Extension`](Extension.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `region` | [`ExtensionRegion`](../enums/ExtensionRegion.md) |\n\n#### Returns\n\n`undefined` \\| [`Extension`](Extension.md)\n\n___\n\n### getExtensions\n\n▸ **getExtensions**(): `undefined` \\| [`Extension`](Extension.md)[]\n\n#### Returns\n\n`undefined` \\| [`Extension`](Extension.md)[]\n\n___\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/ExtraField.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExtraField\n\n# Interface: ExtraField\n\n## Table of contents\n\n### Properties\n\n- [config](ExtraField.md#config)\n- [id](ExtraField.md#id)\n- [isRequired](ExtraField.md#isrequired)\n- [name](ExtraField.md#name)\n- [type](ExtraField.md#type)\n- [visibleToStorefront](ExtraField.md#visibletostorefront)\n\n## Properties\n\n### config\n\n• **config**: [`ExtraFieldConfig`](ExtraFieldConfig.md)\n\n___\n\n### id\n\n• **id**: `string`\n\n___\n\n### isRequired\n\n• **isRequired**: `boolean`\n\n___\n\n### name\n\n• **name**: `string`\n\n___\n\n### type\n\n• **type**: [`ExtraFieldType`](../README.md#extrafieldtype)\n\n___\n\n### visibleToStorefront\n\n• **visibleToStorefront**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/ExtraFieldConfig.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExtraFieldConfig\n\n# Interface: ExtraFieldConfig\n\n## Table of contents\n\n### Properties\n\n- [defaultValue](ExtraFieldConfig.md#defaultvalue)\n- [maxLength](ExtraFieldConfig.md#maxlength)\n- [maxValue](ExtraFieldConfig.md#maxvalue)\n- [numberOfRows](ExtraFieldConfig.md#numberofrows)\n- [options](ExtraFieldConfig.md#options)\n\n## Properties\n\n### defaultValue\n\n• `Optional` **defaultValue**: `string` \\| `number`\n\n___\n\n### maxLength\n\n• `Optional` **maxLength**: `number`\n\n___\n\n### maxValue\n\n• `Optional` **maxValue**: `number`\n\n___\n\n### numberOfRows\n\n• `Optional` **numberOfRows**: `number`\n\n___\n\n### options\n\n• `Optional` **options**: `string`[]\n"
  },
  {
    "path": "docs/interfaces/ExtraFields.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ExtraFields\n\n# Interface: ExtraFields\n\n## Table of contents\n\n### Properties\n\n- [address](ExtraFields.md#address)\n- [order](ExtraFields.md#order)\n\n## Properties\n\n### address\n\n• **address**: [`ExtraField`](ExtraField.md)[]\n\n___\n\n### order\n\n• **order**: [`ExtraField`](ExtraField.md)[]\n"
  },
  {
    "path": "docs/interfaces/FastlaneShippingInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / FastlaneShippingInitializeOptions\n\n# Interface: FastlaneShippingInitializeOptions\n\nA set of options that are required to initialize the shipping step of\r\ncheckout in order to support Fastlane (PayPal Commerce, BigCommerce Payments, or Braintree).\n\nThis is a unified interface that can be used across all Fastlane implementations\r\nto simplify initialization and avoid provider-specific checks.\n\n## Table of contents\n\n### Properties\n\n- [onPayPalFastlaneAddressChange](FastlaneShippingInitializeOptions.md#onpaypalfastlaneaddresschange)\n- [styles](FastlaneShippingInitializeOptions.md#styles)\n\n## Properties\n\n### onPayPalFastlaneAddressChange\n\n• `Optional` **onPayPalFastlaneAddressChange**: (`showFastlaneAddressSelector`: () => `Promise`\\<`undefined` \\| `CustomerAddress`\\>) => `void`\n\nA callback that shows the Fastlane popup with customer addresses\r\nwhen triggered\n\n#### Type declaration\n\n▸ (`showFastlaneAddressSelector`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `showFastlaneAddressSelector` | () => `Promise`\\<`undefined` \\| `CustomerAddress`\\> |\n\n##### Returns\n\n`void`\n\n___\n\n### styles\n\n• `Optional` **styles**: [`FastlaneStylesOption`](../README.md#fastlanestylesoption)\n\nStyling options for customizing Fastlane components\n\nNote: the styles for all Fastlane strategies should be the same,\r\nbecause they will be provided to the Fastlane library only for the first strategy initialization\r\nno matter what strategy was initialized first\n"
  },
  {
    "path": "docs/interfaces/Fee.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Fee\n\n# Interface: Fee\n\n## Table of contents\n\n### Properties\n\n- [cost](Fee.md#cost)\n- [displayName](Fee.md#displayname)\n- [id](Fee.md#id)\n- [name](Fee.md#name)\n- [source](Fee.md#source)\n- [type](Fee.md#type)\n\n## Properties\n\n### cost\n\n• **cost**: `number`\n\n___\n\n### displayName\n\n• **displayName**: `string`\n\n___\n\n### id\n\n• **id**: `string`\n\n___\n\n### name\n\n• **name**: `string`\n\n___\n\n### source\n\n• **source**: `string`\n\n___\n\n### type\n\n• **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/FlashMessage.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / FlashMessage\n\n# Interface: FlashMessage\n\n## Table of contents\n\n### Properties\n\n- [message](FlashMessage.md#message)\n- [title](FlashMessage.md#title)\n- [type](FlashMessage.md#type)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n___\n\n### title\n\n• `Optional` **title**: `string`\n\n___\n\n### type\n\n• **type**: [`FlashMessageType`](../README.md#flashmessagetype)\n"
  },
  {
    "path": "docs/interfaces/FormField.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / FormField\n\n# Interface: FormField\n\n## Table of contents\n\n### Properties\n\n- [custom](FormField.md#custom)\n- [default](FormField.md#default)\n- [fieldType](FormField.md#fieldtype)\n- [hidden](FormField.md#hidden)\n- [id](FormField.md#id)\n- [inputDateFormat](FormField.md#inputdateformat)\n- [itemtype](FormField.md#itemtype)\n- [label](FormField.md#label)\n- [max](FormField.md#max)\n- [maxLength](FormField.md#maxlength)\n- [min](FormField.md#min)\n- [name](FormField.md#name)\n- [options](FormField.md#options)\n- [required](FormField.md#required)\n- [requirements](FormField.md#requirements)\n- [secret](FormField.md#secret)\n- [type](FormField.md#type)\n\n## Properties\n\n### custom\n\n• **custom**: `boolean`\n\n___\n\n### default\n\n• `Optional` **default**: `string`\n\n___\n\n### fieldType\n\n• `Optional` **fieldType**: [`FormFieldFieldType`](../README.md#formfieldfieldtype)\n\n___\n\n### hidden\n\n• `Optional` **hidden**: `boolean`\n\n___\n\n### id\n\n• **id**: `string`\n\n___\n\n### inputDateFormat\n\n• `Optional` **inputDateFormat**: `string`\n\n___\n\n### itemtype\n\n• `Optional` **itemtype**: `string`\n\n___\n\n### label\n\n• **label**: `string`\n\n___\n\n### max\n\n• `Optional` **max**: `string` \\| `number`\n\n___\n\n### maxLength\n\n• `Optional` **maxLength**: `number`\n\n___\n\n### min\n\n• `Optional` **min**: `string` \\| `number`\n\n___\n\n### name\n\n• **name**: `string`\n\n___\n\n### options\n\n• `Optional` **options**: [`FormFieldOptions`](FormFieldOptions.md)\n\n___\n\n### required\n\n• **required**: `boolean`\n\n___\n\n### requirements\n\n• `Optional` **requirements**: [`CustomerPasswordRequirements`](CustomerPasswordRequirements.md)\n\n___\n\n### secret\n\n• `Optional` **secret**: `boolean`\n\n___\n\n### type\n\n• `Optional` **type**: [`FormFieldType`](../README.md#formfieldtype)\n"
  },
  {
    "path": "docs/interfaces/FormFieldItem.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / FormFieldItem\n\n# Interface: FormFieldItem\n\n## Table of contents\n\n### Properties\n\n- [label](FormFieldItem.md#label)\n- [value](FormFieldItem.md#value)\n\n## Properties\n\n### label\n\n• **label**: `string`\n\n___\n\n### value\n\n• **value**: `string`\n"
  },
  {
    "path": "docs/interfaces/FormFieldOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / FormFieldOptions\n\n# Interface: FormFieldOptions\n\n## Table of contents\n\n### Properties\n\n- [helperLabel](FormFieldOptions.md#helperlabel)\n- [items](FormFieldOptions.md#items)\n- [rows](FormFieldOptions.md#rows)\n\n## Properties\n\n### helperLabel\n\n• `Optional` **helperLabel**: `string`\n\n___\n\n### items\n\n• `Optional` **items**: [`FormFieldItem`](FormFieldItem.md)[]\n\n___\n\n### rows\n\n• `Optional` **rows**: `number`\n"
  },
  {
    "path": "docs/interfaces/FormFields.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / FormFields\n\n# Interface: FormFields\n\n## Table of contents\n\n### Properties\n\n- [billingAddress](FormFields.md#billingaddress)\n- [customerAccount](FormFields.md#customeraccount)\n- [shippingAddress](FormFields.md#shippingaddress)\n\n## Properties\n\n### billingAddress\n\n• **billingAddress**: [`FormField`](FormField.md)[]\n\n___\n\n### customerAccount\n\n• **customerAccount**: [`FormField`](FormField.md)[]\n\n___\n\n### shippingAddress\n\n• **shippingAddress**: [`FormField`](FormField.md)[]\n"
  },
  {
    "path": "docs/interfaces/FormSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / FormSelector\n\n# Interface: FormSelector\n\n## Table of contents\n\n### Methods\n\n- [getAddressExtraFields](FormSelector.md#getaddressextrafields)\n- [getBillingAddressFields](FormSelector.md#getbillingaddressfields)\n- [getCustomerAccountFields](FormSelector.md#getcustomeraccountfields)\n- [getLoadError](FormSelector.md#getloaderror)\n- [getOrderExtraFields](FormSelector.md#getorderextrafields)\n- [getShippingAddressFields](FormSelector.md#getshippingaddressfields)\n- [isLoading](FormSelector.md#isloading)\n\n## Methods\n\n### getAddressExtraFields\n\n▸ **getAddressExtraFields**(): [`FormField`](FormField.md)[]\n\n#### Returns\n\n[`FormField`](FormField.md)[]\n\n___\n\n### getBillingAddressFields\n\n▸ **getBillingAddressFields**(`countries`, `countryCode`): [`FormField`](FormField.md)[]\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `countries` | `undefined` \\| [`Country`](Country.md)[] |\n| `countryCode` | `string` |\n\n#### Returns\n\n[`FormField`](FormField.md)[]\n\n___\n\n### getCustomerAccountFields\n\n▸ **getCustomerAccountFields**(): [`FormField`](FormField.md)[]\n\n#### Returns\n\n[`FormField`](FormField.md)[]\n\n___\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getOrderExtraFields\n\n▸ **getOrderExtraFields**(): [`FormField`](FormField.md)[]\n\n#### Returns\n\n[`FormField`](FormField.md)[]\n\n___\n\n### getShippingAddressFields\n\n▸ **getShippingAddressFields**(`countries`, `countryCode`): [`FormField`](FormField.md)[]\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `countries` | `undefined` \\| [`Country`](Country.md)[] |\n| `countryCode` | `string` |\n\n#### Returns\n\n[`FormField`](FormField.md)[]\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/GatewayOrderPayment.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GatewayOrderPayment\n\n# Interface: GatewayOrderPayment\n\n## Hierarchy\n\n- [`OrderPayment`](OrderPayment.md)\n\n  ↳ **`GatewayOrderPayment`**\n\n## Table of contents\n\n### Properties\n\n- [amount](GatewayOrderPayment.md#amount)\n- [description](GatewayOrderPayment.md#description)\n- [detail](GatewayOrderPayment.md#detail)\n- [gatewayId](GatewayOrderPayment.md#gatewayid)\n- [mandate](GatewayOrderPayment.md#mandate)\n- [methodId](GatewayOrderPayment.md#methodid)\n- [paymentId](GatewayOrderPayment.md#paymentid)\n- [providerId](GatewayOrderPayment.md#providerid)\n\n## Properties\n\n### amount\n\n• **amount**: `number`\n\n#### Inherited from\n\n[OrderPayment](OrderPayment.md).[amount](OrderPayment.md#amount)\n\n___\n\n### description\n\n• **description**: `string`\n\n#### Inherited from\n\n[OrderPayment](OrderPayment.md).[description](OrderPayment.md#description)\n\n___\n\n### detail\n\n• **detail**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `instructions` | `string` |\n| `step` | `string` |\n\n___\n\n### gatewayId\n\n• `Optional` **gatewayId**: `string`\n\n#### Inherited from\n\n[OrderPayment](OrderPayment.md).[gatewayId](OrderPayment.md#gatewayid)\n\n___\n\n### mandate\n\n• `Optional` **mandate**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `id` | `string` |\n| `mandateText?` | \\{ `[key: string]`: `string`;  } |\n| `url?` | `string` |\n\n___\n\n### methodId\n\n• `Optional` **methodId**: `string`\n\n#### Inherited from\n\n[OrderPayment](OrderPayment.md).[methodId](OrderPayment.md#methodid)\n\n___\n\n### paymentId\n\n• `Optional` **paymentId**: `string`\n\n#### Inherited from\n\n[OrderPayment](OrderPayment.md).[paymentId](OrderPayment.md#paymentid)\n\n___\n\n### providerId\n\n• **providerId**: `string`\n\n#### Inherited from\n\n[OrderPayment](OrderPayment.md).[providerId](OrderPayment.md#providerid)\n"
  },
  {
    "path": "docs/interfaces/GetConsignmentsMessage.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GetConsignmentsMessage\n\n# Interface: GetConsignmentsMessage\n\n## Table of contents\n\n### Properties\n\n- [payload](GetConsignmentsMessage.md#payload)\n- [type](GetConsignmentsMessage.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `consignments` | [`Consignment`](Consignment.md)[] |\n\n___\n\n### type\n\n• **type**: [`GetConsignments`](../enums/ExtensionMessageType.md#getconsignments)\n"
  },
  {
    "path": "docs/interfaces/GetConsignmentsQuery.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GetConsignmentsQuery\n\n# Interface: GetConsignmentsQuery\n\n## Table of contents\n\n### Properties\n\n- [payload](GetConsignmentsQuery.md#payload)\n- [type](GetConsignmentsQuery.md#type)\n\n## Properties\n\n### payload\n\n• `Optional` **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `useCache?` | `boolean` |\n\n___\n\n### type\n\n• **type**: [`GetConsignments`](../enums/ExtensionQueryType.md#getconsignments)\n"
  },
  {
    "path": "docs/interfaces/GiftCertificate.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GiftCertificate\n\n# Interface: GiftCertificate\n\n## Table of contents\n\n### Properties\n\n- [balance](GiftCertificate.md#balance)\n- [code](GiftCertificate.md#code)\n- [purchaseDate](GiftCertificate.md#purchasedate)\n- [remaining](GiftCertificate.md#remaining)\n- [used](GiftCertificate.md#used)\n\n## Properties\n\n### balance\n\n• **balance**: `number`\n\n___\n\n### code\n\n• **code**: `string`\n\n___\n\n### purchaseDate\n\n• **purchaseDate**: `string`\n\n___\n\n### remaining\n\n• **remaining**: `number`\n\n___\n\n### used\n\n• **used**: `number`\n"
  },
  {
    "path": "docs/interfaces/GiftCertificateItem.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GiftCertificateItem\n\n# Interface: GiftCertificateItem\n\n## Table of contents\n\n### Properties\n\n- [amount](GiftCertificateItem.md#amount)\n- [id](GiftCertificateItem.md#id)\n- [message](GiftCertificateItem.md#message)\n- [name](GiftCertificateItem.md#name)\n- [recipient](GiftCertificateItem.md#recipient)\n- [sender](GiftCertificateItem.md#sender)\n- [taxable](GiftCertificateItem.md#taxable)\n- [theme](GiftCertificateItem.md#theme)\n\n## Properties\n\n### amount\n\n• **amount**: `number`\n\n___\n\n### id\n\n• **id**: `string` \\| `number`\n\n___\n\n### message\n\n• **message**: `string`\n\n___\n\n### name\n\n• **name**: `string`\n\n___\n\n### recipient\n\n• **recipient**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `email` | `string` |\n| `name` | `string` |\n\n___\n\n### sender\n\n• **sender**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `email` | `string` |\n| `name` | `string` |\n\n___\n\n### taxable\n\n• **taxable**: `boolean`\n\n___\n\n### theme\n\n• **theme**: `string`\n"
  },
  {
    "path": "docs/interfaces/GiftCertificateOrderPayment.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GiftCertificateOrderPayment\n\n# Interface: GiftCertificateOrderPayment\n\n## Hierarchy\n\n- [`OrderPayment`](OrderPayment.md)\n\n  ↳ **`GiftCertificateOrderPayment`**\n\n## Table of contents\n\n### Properties\n\n- [amount](GiftCertificateOrderPayment.md#amount)\n- [description](GiftCertificateOrderPayment.md#description)\n- [detail](GiftCertificateOrderPayment.md#detail)\n- [gatewayId](GiftCertificateOrderPayment.md#gatewayid)\n- [methodId](GiftCertificateOrderPayment.md#methodid)\n- [paymentId](GiftCertificateOrderPayment.md#paymentid)\n- [providerId](GiftCertificateOrderPayment.md#providerid)\n\n## Properties\n\n### amount\n\n• **amount**: `number`\n\n#### Inherited from\n\n[OrderPayment](OrderPayment.md).[amount](OrderPayment.md#amount)\n\n___\n\n### description\n\n• **description**: `string`\n\n#### Inherited from\n\n[OrderPayment](OrderPayment.md).[description](OrderPayment.md#description)\n\n___\n\n### detail\n\n• **detail**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `code` | `string` |\n| `remaining` | `number` |\n\n___\n\n### gatewayId\n\n• `Optional` **gatewayId**: `string`\n\n#### Inherited from\n\n[OrderPayment](OrderPayment.md).[gatewayId](OrderPayment.md#gatewayid)\n\n___\n\n### methodId\n\n• `Optional` **methodId**: `string`\n\n#### Inherited from\n\n[OrderPayment](OrderPayment.md).[methodId](OrderPayment.md#methodid)\n\n___\n\n### paymentId\n\n• `Optional` **paymentId**: `string`\n\n#### Inherited from\n\n[OrderPayment](OrderPayment.md).[paymentId](OrderPayment.md#paymentid)\n\n___\n\n### providerId\n\n• **providerId**: `string`\n\n#### Inherited from\n\n[OrderPayment](OrderPayment.md).[providerId](OrderPayment.md#providerid)\n"
  },
  {
    "path": "docs/interfaces/GiftCertificateSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GiftCertificateSelector\n\n# Interface: GiftCertificateSelector\n\n## Table of contents\n\n### Methods\n\n- [getApplyError](GiftCertificateSelector.md#getapplyerror)\n- [getGiftCertificates](GiftCertificateSelector.md#getgiftcertificates)\n- [getRemoveError](GiftCertificateSelector.md#getremoveerror)\n- [isApplying](GiftCertificateSelector.md#isapplying)\n- [isRemoving](GiftCertificateSelector.md#isremoving)\n\n## Methods\n\n### getApplyError\n\n▸ **getApplyError**(): `undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`StorefrontErrorResponseBody`\\>\n\n#### Returns\n\n`undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`StorefrontErrorResponseBody`\\>\n\n___\n\n### getGiftCertificates\n\n▸ **getGiftCertificates**(): `undefined` \\| [`GiftCertificate`](GiftCertificate.md)[]\n\n#### Returns\n\n`undefined` \\| [`GiftCertificate`](GiftCertificate.md)[]\n\n___\n\n### getRemoveError\n\n▸ **getRemoveError**(): `undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`StorefrontErrorResponseBody`\\>\n\n#### Returns\n\n`undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`StorefrontErrorResponseBody`\\>\n\n___\n\n### isApplying\n\n▸ **isApplying**(): `boolean`\n\n#### Returns\n\n`boolean`\n\n___\n\n### isRemoving\n\n▸ **isRemoving**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/GooglePayButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GooglePayButtonInitializeOptions\n\n# Interface: GooglePayButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [buttonColor](GooglePayButtonInitializeOptions.md#buttoncolor)\n- [buttonType](GooglePayButtonInitializeOptions.md#buttontype)\n\n## Properties\n\n### buttonColor\n\n• `Optional` **buttonColor**: [`GooglePayButtonColor`](../README.md#googlepaybuttoncolor)\n\nAll Google Pay payment buttons exist in two styles: dark (default) and light.\r\nTo provide contrast, use dark buttons on light backgrounds and light buttons on dark or colorful backgrounds.\n\n___\n\n### buttonType\n\n• `Optional` **buttonType**: [`GooglePayButtonType`](../README.md#googlepaybuttontype)\n\nVariant buttons:\r\nbook: The \"Book with Google Pay\" payment button.\r\nbuy: The \"Buy with Google Pay\" payment button.\r\ncheckout: The \"Checkout with Google Pay\" payment button.\r\ndonate: The \"Donate with Google Pay\" payment button.\r\norder: The \"Order with Google Pay\" payment button.\r\npay: The \"Pay with Google Pay\" payment button.\r\nplain: The Google Pay payment button without the additional text (default).\r\nsubscribe: The \"Subscribe with Google Pay\" payment button.\n\nNote: \"long\" and \"short\" button types have been renamed to \"buy\" and \"plain\", but are still valid button types\r\nfor backwards compatability.\n"
  },
  {
    "path": "docs/interfaces/GooglePayCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GooglePayCustomerInitializeOptions\n\n# Interface: GooglePayCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [buttonColor](GooglePayCustomerInitializeOptions.md#buttoncolor)\n- [buttonType](GooglePayCustomerInitializeOptions.md#buttontype)\n- [container](GooglePayCustomerInitializeOptions.md#container)\n\n### Methods\n\n- [onClick](GooglePayCustomerInitializeOptions.md#onclick)\n- [onError](GooglePayCustomerInitializeOptions.md#onerror)\n\n## Properties\n\n### buttonColor\n\n• `Optional` **buttonColor**: [`GooglePayButtonColor`](../README.md#googlepaybuttoncolor)\n\nAll Google Pay payment buttons exist in two styles: dark (default) and light.\r\nTo provide contrast, use dark buttons on light backgrounds and light buttons on dark or colorful backgrounds.\n\n___\n\n### buttonType\n\n• `Optional` **buttonType**: [`GooglePayButtonType`](../README.md#googlepaybuttontype)\n\nVariant buttons:\r\nbook: The \"Book with Google Pay\" payment button.\r\nbuy: The \"Buy with Google Pay\" payment button.\r\ncheckout: The \"Checkout with Google Pay\" payment button.\r\ndonate: The \"Donate with Google Pay\" payment button.\r\norder: The \"Order with Google Pay\" payment button.\r\npay: The \"Pay with Google Pay\" payment button.\r\nplain: The Google Pay payment button without the additional text (default).\r\nsubscribe: The \"Subscribe with Google Pay\" payment button.\n\nNote: \"long\" and \"short\" button types have been renamed to \"buy\" and \"plain\", but are still valid button types\r\nfor backwards compatability.\n\n___\n\n### container\n\n• **container**: `string`\n\nThis container is used to set an event listener, provide an element ID if you want users to be able to launch\r\nthe GooglePay wallet modal by clicking on a button. It should be an HTML element.\n\n## Methods\n\n### onClick\n\n▸ **onClick**(): `void`\n\nCallback that get called on wallet button click\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback that gets called when GooglePay fails to initialize or\r\nselects a payment option.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | `Error` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/GooglePayPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GooglePayPaymentInitializeOptions\n\n# Interface: GooglePayPaymentInitializeOptions\n\nA set of options that are required to initialize the GooglePay payment method\n\nIf the customer chooses to pay with GooglePay, they will be asked to\r\nenter their payment details via a modal. You can hook into events emitted by\r\nthe modal by providing the callbacks listed below.\n\n```html\r\n<!-- This is where the GooglePay button will be inserted -->\r\n<div id=\"wallet-button\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    // Using GooglePay provided by Braintree as an example\r\n    methodId: 'googlepaybraintree',\r\n    googlepaybraintree: {\r\n        walletButton: 'wallet-button'\r\n    },\r\n});\r\n```\n\nAdditional event callbacks can be registered.\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'googlepaybraintree',\r\n    googlepaybraintree: {\r\n        walletButton: 'wallet-button',\r\n        onError(error) {\r\n            console.log(error);\r\n        },\r\n        onPaymentSelect() {\r\n            console.log('Selected');\r\n        },\r\n    },\r\n});\r\n```\n\nAlternatively, a container-based Google Pay button can be rendered directly\r\nin the payment step (replacing the Place Order button):\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'googlepaybraintree',\r\n    googlepaybraintree: {\r\n        container: 'checkout-payment-continue',\r\n        onInit(renderButton) {\r\n            // Hide Place Order, then render the button once container is in DOM\r\n            renderButton();\r\n        },\r\n        onError(error) {\r\n            console.log(error);\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [buttonColor](GooglePayPaymentInitializeOptions.md#buttoncolor)\n- [buttonSizeMode](GooglePayPaymentInitializeOptions.md#buttonsizemode)\n- [buttonType](GooglePayPaymentInitializeOptions.md#buttontype)\n- [container](GooglePayPaymentInitializeOptions.md#container)\n- [loadingContainerId](GooglePayPaymentInitializeOptions.md#loadingcontainerid)\n- [walletButton](GooglePayPaymentInitializeOptions.md#walletbutton)\n\n### Methods\n\n- [onError](GooglePayPaymentInitializeOptions.md#onerror)\n- [onInit](GooglePayPaymentInitializeOptions.md#oninit)\n- [onPaymentSelect](GooglePayPaymentInitializeOptions.md#onpaymentselect)\n\n## Properties\n\n### buttonColor\n\n• `Optional` **buttonColor**: [`GooglePayButtonColor`](../README.md#googlepaybuttoncolor)\n\nThe color of the Google Pay button rendered into `container`.\r\nDefaults to `'default'`.\n\n___\n\n### buttonSizeMode\n\n• `Optional` **buttonSizeMode**: [`GooglePayButtonSizeMode`](../README.md#googlepaybuttonsizemode)\n\nThe size mode of the Google Pay button rendered into `container`.\r\nDefaults to `'fill'`.\n\n___\n\n### buttonType\n\n• `Optional` **buttonType**: [`GooglePayButtonType`](../README.md#googlepaybuttontype)\n\nThe type/label of the Google Pay button rendered into `container`.\r\nDefaults to `'pay'`.\n\n___\n\n### container\n\n• `Optional` **container**: `string`\n\nThe ID of the container element where the Google Pay button will be rendered.\r\nWhen provided, a branded Google Pay button is created inside this container.\r\nClicking the button opens the Google Pay payment sheet and, on success, submits\r\nthe order and redirects to the order confirmation page directly — no separate\r\n\"Place Order\" step is needed.\n\n___\n\n### loadingContainerId\n\n• `Optional` **loadingContainerId**: `string`\n\nA container for loading spinner.\n\n___\n\n### walletButton\n\n• `Optional` **walletButton**: `string`\n\nThis walletButton is used to set an event listener, provide an element ID if you want\r\nusers to be able to launch the GooglePay wallet modal by clicking on a button.\r\nIt should be an HTML element.\n\n## Methods\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback that gets called when GooglePay fails to initialize or\r\nselects a payment option.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | `Error` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n\n___\n\n### onInit\n\n▸ **onInit**(`renderButton`): `void`\n\nCalled after the Google Pay processor is fully initialized, with a\r\n`renderButton` function that — when invoked — creates the Google Pay\r\nbutton inside `container`.  Use this callback to control timing: hide\r\nthe Place Order button first, then call `renderButton()` once the\r\ncontainer element is present in the DOM.\n\nOnly used when `container` is provided.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `renderButton` | () => `void` |\n\n#### Returns\n\n`void`\n\n___\n\n### onPaymentSelect\n\n▸ **onPaymentSelect**(): `void`\n\nA callback that gets called when the customer selects a payment option.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/GoogleRecaptchaWindow.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / GoogleRecaptchaWindow\n\n# Interface: GoogleRecaptchaWindow\n\n## Hierarchy\n\n- `Window`\n\n  ↳ **`GoogleRecaptchaWindow`**\n\n## Table of contents\n\n### Properties\n\n- [grecaptcha](GoogleRecaptchaWindow.md#grecaptcha)\n\n### Methods\n\n- [initRecaptcha](GoogleRecaptchaWindow.md#initrecaptcha)\n\n## Properties\n\n### grecaptcha\n\n• `Optional` **grecaptcha**: `ReCaptcha`\n\n## Methods\n\n### initRecaptcha\n\n▸ **initRecaptcha**(): `void`\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/HostedCardFieldOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedCardFieldOptions\n\n# Interface: HostedCardFieldOptions\n\n## Hierarchy\n\n- **`HostedCardFieldOptions`**\n\n  ↳ [`HostedStoredCardFieldOptions`](HostedStoredCardFieldOptions.md)\n\n## Table of contents\n\n### Properties\n\n- [accessibilityLabel](HostedCardFieldOptions.md#accessibilitylabel)\n- [containerId](HostedCardFieldOptions.md#containerid)\n- [placeholder](HostedCardFieldOptions.md#placeholder)\n\n## Properties\n\n### accessibilityLabel\n\n• `Optional` **accessibilityLabel**: `string`\n\n___\n\n### containerId\n\n• **containerId**: `string`\n\n___\n\n### placeholder\n\n• `Optional` **placeholder**: `string`\n"
  },
  {
    "path": "docs/interfaces/HostedCardFieldOptionsMap.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedCardFieldOptionsMap\n\n# Interface: HostedCardFieldOptionsMap\n\n## Table of contents\n\n### Properties\n\n- [cardCode](HostedCardFieldOptionsMap.md#cardcode)\n- [cardExpiry](HostedCardFieldOptionsMap.md#cardexpiry)\n- [cardName](HostedCardFieldOptionsMap.md#cardname)\n- [cardNumber](HostedCardFieldOptionsMap.md#cardnumber)\n\n## Properties\n\n### cardCode\n\n• `Optional` **cardCode**: [`HostedCardFieldOptions`](HostedCardFieldOptions.md)\n\n___\n\n### cardExpiry\n\n• **cardExpiry**: [`HostedCardFieldOptions`](HostedCardFieldOptions.md)\n\n___\n\n### cardName\n\n• **cardName**: [`HostedCardFieldOptions`](HostedCardFieldOptions.md)\n\n___\n\n### cardNumber\n\n• **cardNumber**: [`HostedCardFieldOptions`](HostedCardFieldOptions.md)\n"
  },
  {
    "path": "docs/interfaces/HostedFieldAttachEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedFieldAttachEvent\n\n# Interface: HostedFieldAttachEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedFieldAttachEvent.md#payload)\n- [type](HostedFieldAttachEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `accessibilityLabel?` | `string` |\n| `cardInstrument?` | [`CardInstrument`](CardInstrument.md) |\n| `fontUrls?` | `string`[] |\n| `origin?` | `string` |\n| `placeholder?` | `string` |\n| `styles?` | [`HostedFieldStylesMap`](HostedFieldStylesMap.md) |\n| `type` | [`HostedFieldType`](../enums/HostedFieldType.md) |\n\n___\n\n### type\n\n• **type**: [`AttachRequested`](../enums/HostedFieldEventType.md#attachrequested)\n"
  },
  {
    "path": "docs/interfaces/HostedFieldStoredCardRequestEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedFieldStoredCardRequestEvent\n\n# Interface: HostedFieldStoredCardRequestEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedFieldStoredCardRequestEvent.md#payload)\n- [type](HostedFieldStoredCardRequestEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `data` | [`StoredCardHostedFormData`](StoredCardHostedFormData.md) |\n| `fields` | [`StoredCardHostedFormInstrumentFields`](StoredCardHostedFormInstrumentFields.md) |\n\n___\n\n### type\n\n• **type**: [`StoredCardRequested`](../enums/HostedFieldEventType.md#storedcardrequested)\n"
  },
  {
    "path": "docs/interfaces/HostedFieldStylesMap.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedFieldStylesMap\n\n# Interface: HostedFieldStylesMap\n\n## Table of contents\n\n### Properties\n\n- [default](HostedFieldStylesMap.md#default)\n- [error](HostedFieldStylesMap.md#error)\n- [focus](HostedFieldStylesMap.md#focus)\n\n## Properties\n\n### default\n\n• `Optional` **default**: `Partial`\\<`Pick`\\<`CSSStyleDeclaration`, ``\"color\"`` \\| ``\"fontFamily\"`` \\| ``\"fontSize\"`` \\| ``\"fontWeight\"``\\>\\>\n\n___\n\n### error\n\n• `Optional` **error**: `Partial`\\<`Pick`\\<`CSSStyleDeclaration`, ``\"color\"`` \\| ``\"fontFamily\"`` \\| ``\"fontSize\"`` \\| ``\"fontWeight\"``\\>\\>\n\n___\n\n### focus\n\n• `Optional` **focus**: `Partial`\\<`Pick`\\<`CSSStyleDeclaration`, ``\"color\"`` \\| ``\"fontFamily\"`` \\| ``\"fontSize\"`` \\| ``\"fontWeight\"``\\>\\>\n"
  },
  {
    "path": "docs/interfaces/HostedFieldSubmitRequestEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedFieldSubmitRequestEvent\n\n# Interface: HostedFieldSubmitRequestEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedFieldSubmitRequestEvent.md#payload)\n- [type](HostedFieldSubmitRequestEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `data` | [`HostedFormOrderData`](HostedFormOrderData.md) |\n| `fields` | [`HostedFieldType`](../enums/HostedFieldType.md)[] |\n\n___\n\n### type\n\n• **type**: [`SubmitRequested`](../enums/HostedFieldEventType.md#submitrequested)\n"
  },
  {
    "path": "docs/interfaces/HostedFieldValidateRequestEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedFieldValidateRequestEvent\n\n# Interface: HostedFieldValidateRequestEvent\n\n## Table of contents\n\n### Properties\n\n- [type](HostedFieldValidateRequestEvent.md#type)\n\n## Properties\n\n### type\n\n• **type**: [`ValidateRequested`](../enums/HostedFieldEventType.md#validaterequested)\n"
  },
  {
    "path": "docs/interfaces/HostedFormErrorData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedFormErrorData\n\n# Interface: HostedFormErrorData\n\n## Table of contents\n\n### Properties\n\n- [isEmpty](HostedFormErrorData.md#isempty)\n- [isPotentiallyValid](HostedFormErrorData.md#ispotentiallyvalid)\n- [isValid](HostedFormErrorData.md#isvalid)\n\n## Properties\n\n### isEmpty\n\n• **isEmpty**: `boolean`\n\n___\n\n### isPotentiallyValid\n\n• **isPotentiallyValid**: `boolean`\n\n___\n\n### isValid\n\n• **isValid**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/HostedFormOrderData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedFormOrderData\n\n# Interface: HostedFormOrderData\n\n## Table of contents\n\n### Properties\n\n- [additionalAction](HostedFormOrderData.md#additionalaction)\n- [authToken](HostedFormOrderData.md#authtoken)\n- [checkout](HostedFormOrderData.md#checkout)\n- [config](HostedFormOrderData.md#config)\n- [order](HostedFormOrderData.md#order)\n- [orderMeta](HostedFormOrderData.md#ordermeta)\n- [payment](HostedFormOrderData.md#payment)\n- [paymentMethod](HostedFormOrderData.md#paymentmethod)\n- [paymentMethodMeta](HostedFormOrderData.md#paymentmethodmeta)\n\n## Properties\n\n### additionalAction\n\n• `Optional` **additionalAction**: [`PaymentAdditionalAction`](PaymentAdditionalAction.md)\n\n___\n\n### authToken\n\n• **authToken**: `string`\n\n___\n\n### checkout\n\n• `Optional` **checkout**: [`Checkout`](Checkout.md)\n\n___\n\n### config\n\n• `Optional` **config**: [`Config`](Config.md)\n\n___\n\n### order\n\n• `Optional` **order**: [`Order`](Order.md)\n\n___\n\n### orderMeta\n\n• `Optional` **orderMeta**: [`OrderMetaState`](OrderMetaState.md)\n\n___\n\n### payment\n\n• `Optional` **payment**: (HostedCreditCardInstrument \\| HostedVaultedInstrument) & PaymentInstrumentMeta\n\n___\n\n### paymentMethod\n\n• `Optional` **paymentMethod**: [`PaymentMethod`](PaymentMethod.md)\\<`any`\\>\n\n___\n\n### paymentMethodMeta\n\n• `Optional` **paymentMethodMeta**: [`PaymentMethodMeta`](PaymentMethodMeta.md)\n"
  },
  {
    "path": "docs/interfaces/HostedInputAttachErrorEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputAttachErrorEvent\n\n# Interface: HostedInputAttachErrorEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedInputAttachErrorEvent.md#payload)\n- [type](HostedInputAttachErrorEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `error` | [`HostedInputInitializeErrorData`](HostedInputInitializeErrorData.md) |\n\n___\n\n### type\n\n• **type**: [`AttachFailed`](../enums/HostedInputEventType.md#attachfailed)\n"
  },
  {
    "path": "docs/interfaces/HostedInputAttachSuccessEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputAttachSuccessEvent\n\n# Interface: HostedInputAttachSuccessEvent\n\n## Table of contents\n\n### Properties\n\n- [type](HostedInputAttachSuccessEvent.md#type)\n\n## Properties\n\n### type\n\n• **type**: [`AttachSucceeded`](../enums/HostedInputEventType.md#attachsucceeded)\n"
  },
  {
    "path": "docs/interfaces/HostedInputBinChangeEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputBinChangeEvent\n\n# Interface: HostedInputBinChangeEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedInputBinChangeEvent.md#payload)\n- [type](HostedInputBinChangeEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `bin?` | `string` |\n\n___\n\n### type\n\n• **type**: [`BinChanged`](../enums/HostedInputEventType.md#binchanged)\n"
  },
  {
    "path": "docs/interfaces/HostedInputBlurEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputBlurEvent\n\n# Interface: HostedInputBlurEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedInputBlurEvent.md#payload)\n- [type](HostedInputBlurEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `errors?` | `Partial`\\<`Record`\\<[`HostedFormErrorDataKeys`](../README.md#hostedformerrordatakeys), [`HostedFormErrorData`](HostedFormErrorData.md)\\>\\> |\n| `fieldType` | [`HostedFieldType`](../enums/HostedFieldType.md) |\n\n___\n\n### type\n\n• **type**: [`Blurred`](../enums/HostedInputEventType.md#blurred)\n"
  },
  {
    "path": "docs/interfaces/HostedInputCardTypeChangeEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputCardTypeChangeEvent\n\n# Interface: HostedInputCardTypeChangeEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedInputCardTypeChangeEvent.md#payload)\n- [type](HostedInputCardTypeChangeEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `cardType?` | `string` |\n\n___\n\n### type\n\n• **type**: [`CardTypeChanged`](../enums/HostedInputEventType.md#cardtypechanged)\n"
  },
  {
    "path": "docs/interfaces/HostedInputChangeEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputChangeEvent\n\n# Interface: HostedInputChangeEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedInputChangeEvent.md#payload)\n- [type](HostedInputChangeEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `fieldType` | [`HostedFieldType`](../enums/HostedFieldType.md) |\n\n___\n\n### type\n\n• **type**: [`Changed`](../enums/HostedInputEventType.md#changed)\n"
  },
  {
    "path": "docs/interfaces/HostedInputEnterEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputEnterEvent\n\n# Interface: HostedInputEnterEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedInputEnterEvent.md#payload)\n- [type](HostedInputEnterEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `fieldType` | [`HostedFieldType`](../enums/HostedFieldType.md) |\n\n___\n\n### type\n\n• **type**: [`Entered`](../enums/HostedInputEventType.md#entered)\n"
  },
  {
    "path": "docs/interfaces/HostedInputEventMap.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputEventMap\n\n# Interface: HostedInputEventMap\n\n## Table of contents\n\n### Properties\n\n- [HOSTED\\_INPUT:ATTACH\\_FAILED](HostedInputEventMap.md#hosted_input:attach_failed)\n- [HOSTED\\_INPUT:ATTACH\\_SUCCEEDED](HostedInputEventMap.md#hosted_input:attach_succeeded)\n- [HOSTED\\_INPUT:BIN\\_CHANGED](HostedInputEventMap.md#hosted_input:bin_changed)\n- [HOSTED\\_INPUT:BLURRED](HostedInputEventMap.md#hosted_input:blurred)\n- [HOSTED\\_INPUT:CARD\\_TYPE\\_CHANGED](HostedInputEventMap.md#hosted_input:card_type_changed)\n- [HOSTED\\_INPUT:CHANGED](HostedInputEventMap.md#hosted_input:changed)\n- [HOSTED\\_INPUT:ENTERED](HostedInputEventMap.md#hosted_input:entered)\n- [HOSTED\\_INPUT:FOCUSED](HostedInputEventMap.md#hosted_input:focused)\n- [HOSTED\\_INPUT:STORED\\_CARD\\_FAILED](HostedInputEventMap.md#hosted_input:stored_card_failed)\n- [HOSTED\\_INPUT:STORED\\_CARD\\_SUCCEEDED](HostedInputEventMap.md#hosted_input:stored_card_succeeded)\n- [HOSTED\\_INPUT:SUBMIT\\_FAILED](HostedInputEventMap.md#hosted_input:submit_failed)\n- [HOSTED\\_INPUT:SUBMIT\\_SUCCEEDED](HostedInputEventMap.md#hosted_input:submit_succeeded)\n- [HOSTED\\_INPUT:VALIDATED](HostedInputEventMap.md#hosted_input:validated)\n\n## Properties\n\n### HOSTED\\_INPUT:ATTACH\\_FAILED\n\n• **HOSTED\\_INPUT:ATTACH\\_FAILED**: [`HostedInputAttachErrorEvent`](HostedInputAttachErrorEvent.md)\n\n___\n\n### HOSTED\\_INPUT:ATTACH\\_SUCCEEDED\n\n• **HOSTED\\_INPUT:ATTACH\\_SUCCEEDED**: [`HostedInputAttachSuccessEvent`](HostedInputAttachSuccessEvent.md)\n\n___\n\n### HOSTED\\_INPUT:BIN\\_CHANGED\n\n• **HOSTED\\_INPUT:BIN\\_CHANGED**: [`HostedInputBinChangeEvent`](HostedInputBinChangeEvent.md)\n\n___\n\n### HOSTED\\_INPUT:BLURRED\n\n• **HOSTED\\_INPUT:BLURRED**: [`HostedInputBlurEvent`](HostedInputBlurEvent.md)\n\n___\n\n### HOSTED\\_INPUT:CARD\\_TYPE\\_CHANGED\n\n• **HOSTED\\_INPUT:CARD\\_TYPE\\_CHANGED**: [`HostedInputCardTypeChangeEvent`](HostedInputCardTypeChangeEvent.md)\n\n___\n\n### HOSTED\\_INPUT:CHANGED\n\n• **HOSTED\\_INPUT:CHANGED**: [`HostedInputChangeEvent`](HostedInputChangeEvent.md)\n\n___\n\n### HOSTED\\_INPUT:ENTERED\n\n• **HOSTED\\_INPUT:ENTERED**: [`HostedInputEnterEvent`](HostedInputEnterEvent.md)\n\n___\n\n### HOSTED\\_INPUT:FOCUSED\n\n• **HOSTED\\_INPUT:FOCUSED**: [`HostedInputFocusEvent`](HostedInputFocusEvent.md)\n\n___\n\n### HOSTED\\_INPUT:STORED\\_CARD\\_FAILED\n\n• **HOSTED\\_INPUT:STORED\\_CARD\\_FAILED**: [`HostedInputStoredCardErrorEvent`](HostedInputStoredCardErrorEvent.md)\n\n___\n\n### HOSTED\\_INPUT:STORED\\_CARD\\_SUCCEEDED\n\n• **HOSTED\\_INPUT:STORED\\_CARD\\_SUCCEEDED**: [`HostedInputStoredCardSucceededEvent`](HostedInputStoredCardSucceededEvent.md)\n\n___\n\n### HOSTED\\_INPUT:SUBMIT\\_FAILED\n\n• **HOSTED\\_INPUT:SUBMIT\\_FAILED**: [`HostedInputSubmitErrorEvent`](HostedInputSubmitErrorEvent.md)\n\n___\n\n### HOSTED\\_INPUT:SUBMIT\\_SUCCEEDED\n\n• **HOSTED\\_INPUT:SUBMIT\\_SUCCEEDED**: [`HostedInputSubmitSuccessEvent`](HostedInputSubmitSuccessEvent.md)\n\n___\n\n### HOSTED\\_INPUT:VALIDATED\n\n• **HOSTED\\_INPUT:VALIDATED**: [`HostedInputValidateEvent`](HostedInputValidateEvent.md)\n"
  },
  {
    "path": "docs/interfaces/HostedInputFocusEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputFocusEvent\n\n# Interface: HostedInputFocusEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedInputFocusEvent.md#payload)\n- [type](HostedInputFocusEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `fieldType` | [`HostedFieldType`](../enums/HostedFieldType.md) |\n\n___\n\n### type\n\n• **type**: [`Focused`](../enums/HostedInputEventType.md#focused)\n"
  },
  {
    "path": "docs/interfaces/HostedInputInitializeErrorData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputInitializeErrorData\n\n# Interface: HostedInputInitializeErrorData\n\n## Table of contents\n\n### Properties\n\n- [message](HostedInputInitializeErrorData.md#message)\n- [redirectUrl](HostedInputInitializeErrorData.md#redirecturl)\n\n## Properties\n\n### message\n\n• **message**: `string`\n\n___\n\n### redirectUrl\n\n• **redirectUrl**: `string`\n"
  },
  {
    "path": "docs/interfaces/HostedInputStoredCardErrorEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputStoredCardErrorEvent\n\n# Interface: HostedInputStoredCardErrorEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedInputStoredCardErrorEvent.md#payload)\n- [type](HostedInputStoredCardErrorEvent.md#type)\n\n## Properties\n\n### payload\n\n• `Optional` **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `error?` | `PaymentErrorData` |\n| `errors?` | `string`[] |\n| `response?` | `default`\\<`PaymentErrorResponseBody`\\> |\n\n___\n\n### type\n\n• **type**: [`StoredCardFailed`](../enums/HostedInputEventType.md#storedcardfailed)\n"
  },
  {
    "path": "docs/interfaces/HostedInputStoredCardSucceededEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputStoredCardSucceededEvent\n\n# Interface: HostedInputStoredCardSucceededEvent\n\n## Table of contents\n\n### Properties\n\n- [type](HostedInputStoredCardSucceededEvent.md#type)\n\n## Properties\n\n### type\n\n• **type**: [`StoredCardSucceeded`](../enums/HostedInputEventType.md#storedcardsucceeded)\n"
  },
  {
    "path": "docs/interfaces/HostedInputSubmitErrorEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputSubmitErrorEvent\n\n# Interface: HostedInputSubmitErrorEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedInputSubmitErrorEvent.md#payload)\n- [type](HostedInputSubmitErrorEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `PaymentErrorData` |\n| `response?` | `default`\\<`PaymentErrorResponseBody`\\> |\n\n___\n\n### type\n\n• **type**: [`SubmitFailed`](../enums/HostedInputEventType.md#submitfailed)\n"
  },
  {
    "path": "docs/interfaces/HostedInputSubmitSuccessEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputSubmitSuccessEvent\n\n# Interface: HostedInputSubmitSuccessEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedInputSubmitSuccessEvent.md#payload)\n- [type](HostedInputSubmitSuccessEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `response` | `default`\\<`unknown`\\> |\n\n___\n\n### type\n\n• **type**: [`SubmitSucceeded`](../enums/HostedInputEventType.md#submitsucceeded)\n"
  },
  {
    "path": "docs/interfaces/HostedInputValidateErrorData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputValidateErrorData\n\n# Interface: HostedInputValidateErrorData\n\n## Table of contents\n\n### Properties\n\n- [fieldType](HostedInputValidateErrorData.md#fieldtype)\n- [message](HostedInputValidateErrorData.md#message)\n- [type](HostedInputValidateErrorData.md#type)\n\n## Properties\n\n### fieldType\n\n• **fieldType**: `string`\n\n___\n\n### message\n\n• **message**: `string`\n\n___\n\n### type\n\n• **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/HostedInputValidateErrorDataMap.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputValidateErrorDataMap\n\n# Interface: HostedInputValidateErrorDataMap\n\n## Table of contents\n\n### Properties\n\n- [cardCode](HostedInputValidateErrorDataMap.md#cardcode)\n- [cardCodeVerification](HostedInputValidateErrorDataMap.md#cardcodeverification)\n- [cardExpiry](HostedInputValidateErrorDataMap.md#cardexpiry)\n- [cardName](HostedInputValidateErrorDataMap.md#cardname)\n- [cardNumber](HostedInputValidateErrorDataMap.md#cardnumber)\n- [cardNumberVerification](HostedInputValidateErrorDataMap.md#cardnumberverification)\n\n## Properties\n\n### cardCode\n\n• `Optional` **cardCode**: [`HostedInputValidateErrorData`](HostedInputValidateErrorData.md)[]\n\n___\n\n### cardCodeVerification\n\n• `Optional` **cardCodeVerification**: [`HostedInputValidateErrorData`](HostedInputValidateErrorData.md)[]\n\n___\n\n### cardExpiry\n\n• `Optional` **cardExpiry**: [`HostedInputValidateErrorData`](HostedInputValidateErrorData.md)[]\n\n___\n\n### cardName\n\n• `Optional` **cardName**: [`HostedInputValidateErrorData`](HostedInputValidateErrorData.md)[]\n\n___\n\n### cardNumber\n\n• `Optional` **cardNumber**: [`HostedInputValidateErrorData`](HostedInputValidateErrorData.md)[]\n\n___\n\n### cardNumberVerification\n\n• `Optional` **cardNumberVerification**: [`HostedInputValidateErrorData`](HostedInputValidateErrorData.md)[]\n"
  },
  {
    "path": "docs/interfaces/HostedInputValidateEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputValidateEvent\n\n# Interface: HostedInputValidateEvent\n\n## Table of contents\n\n### Properties\n\n- [payload](HostedInputValidateEvent.md#payload)\n- [type](HostedInputValidateEvent.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: [`HostedInputValidateResults`](HostedInputValidateResults.md)\n\n___\n\n### type\n\n• **type**: [`Validated`](../enums/HostedInputEventType.md#validated)\n"
  },
  {
    "path": "docs/interfaces/HostedInputValidateResults.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInputValidateResults\n\n# Interface: HostedInputValidateResults\n\n## Table of contents\n\n### Properties\n\n- [errors](HostedInputValidateResults.md#errors)\n- [isValid](HostedInputValidateResults.md#isvalid)\n\n## Properties\n\n### errors\n\n• **errors**: [`HostedInputValidateErrorDataMap`](HostedInputValidateErrorDataMap.md)\n\n___\n\n### isValid\n\n• **isValid**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/HostedInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedInstrument\n\n# Interface: HostedInstrument\n\n## Table of contents\n\n### Properties\n\n- [shouldSaveInstrument](HostedInstrument.md#shouldsaveinstrument)\n- [shouldSetAsDefaultInstrument](HostedInstrument.md#shouldsetasdefaultinstrument)\n\n## Properties\n\n### shouldSaveInstrument\n\n• `Optional` **shouldSaveInstrument**: `boolean`\n\n___\n\n### shouldSetAsDefaultInstrument\n\n• `Optional` **shouldSetAsDefaultInstrument**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/HostedStoredCardFieldOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedStoredCardFieldOptions\n\n# Interface: HostedStoredCardFieldOptions\n\n## Hierarchy\n\n- [`HostedCardFieldOptions`](HostedCardFieldOptions.md)\n\n  ↳ **`HostedStoredCardFieldOptions`**\n\n## Table of contents\n\n### Properties\n\n- [accessibilityLabel](HostedStoredCardFieldOptions.md#accessibilitylabel)\n- [containerId](HostedStoredCardFieldOptions.md#containerid)\n- [instrumentId](HostedStoredCardFieldOptions.md#instrumentid)\n- [placeholder](HostedStoredCardFieldOptions.md#placeholder)\n\n## Properties\n\n### accessibilityLabel\n\n• `Optional` **accessibilityLabel**: `string`\n\n#### Inherited from\n\n[HostedCardFieldOptions](HostedCardFieldOptions.md).[accessibilityLabel](HostedCardFieldOptions.md#accessibilitylabel)\n\n___\n\n### containerId\n\n• **containerId**: `string`\n\n#### Inherited from\n\n[HostedCardFieldOptions](HostedCardFieldOptions.md).[containerId](HostedCardFieldOptions.md#containerid)\n\n___\n\n### instrumentId\n\n• **instrumentId**: `string`\n\n___\n\n### placeholder\n\n• `Optional` **placeholder**: `string`\n\n#### Inherited from\n\n[HostedCardFieldOptions](HostedCardFieldOptions.md).[placeholder](HostedCardFieldOptions.md#placeholder)\n"
  },
  {
    "path": "docs/interfaces/HostedStoredCardFieldOptionsMap.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / HostedStoredCardFieldOptionsMap\n\n# Interface: HostedStoredCardFieldOptionsMap\n\n## Table of contents\n\n### Properties\n\n- [cardCodeVerification](HostedStoredCardFieldOptionsMap.md#cardcodeverification)\n- [cardNumberVerification](HostedStoredCardFieldOptionsMap.md#cardnumberverification)\n\n## Properties\n\n### cardCodeVerification\n\n• `Optional` **cardCodeVerification**: [`HostedStoredCardFieldOptions`](HostedStoredCardFieldOptions.md)\n\n___\n\n### cardNumberVerification\n\n• `Optional` **cardNumberVerification**: [`HostedStoredCardFieldOptions`](HostedStoredCardFieldOptions.md)\n"
  },
  {
    "path": "docs/interfaces/IbanElementOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / IbanElementOptions\n\n# Interface: IbanElementOptions\n\n## Hierarchy\n\n- [`BaseElementOptions`](BaseElementOptions.md)\n\n  ↳ **`IbanElementOptions`**\n\n## Table of contents\n\n### Properties\n\n- [classes](IbanElementOptions.md#classes)\n- [disabled](IbanElementOptions.md#disabled)\n- [iconStyle](IbanElementOptions.md#iconstyle)\n- [placeholderCountry](IbanElementOptions.md#placeholdercountry)\n- [style](IbanElementOptions.md#style)\n- [supportedCountries](IbanElementOptions.md#supportedcountries)\n\n## Properties\n\n### classes\n\n• `Optional` **classes**: [`StripeElementClasses`](StripeElementClasses.md)\n\nSet custom class names on the container DOM element when the Stripe element is in a particular state.\n\n#### Inherited from\n\n[BaseElementOptions](BaseElementOptions.md).[classes](BaseElementOptions.md#classes)\n\n___\n\n### disabled\n\n• `Optional` **disabled**: `boolean`\n\nApplies a disabled state to the Element such that user input is not accepted. Default is false.\n\n#### Inherited from\n\n[BaseElementOptions](BaseElementOptions.md).[disabled](BaseElementOptions.md#disabled)\n\n___\n\n### iconStyle\n\n• `Optional` **iconStyle**: [`IconStyle`](../enums/IconStyle.md)\n\nAppearance of the icon in the Element.\n\n___\n\n### placeholderCountry\n\n• `Optional` **placeholderCountry**: `string`\n\nCustomize the country and format of the placeholder IBAN. Default is DE.\n\n___\n\n### style\n\n• `Optional` **style**: [`StripeElementStyle`](StripeElementStyle.md)\n\nCustomize the appearance of an element using CSS properties passed in a [Style](https://stripe.com/docs/js/appendix/style) object,\r\nwhich consists of CSS properties nested under objects for each variant.\n\n#### Inherited from\n\n[BaseElementOptions](BaseElementOptions.md).[style](BaseElementOptions.md#style)\n\n___\n\n### supportedCountries\n\n• `Optional` **supportedCountries**: `string`[]\n\nSpecify the list of countries or country-groups whose IBANs you want to allow.\r\nMust be ['SEPA'].\n"
  },
  {
    "path": "docs/interfaces/IdealElementOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / IdealElementOptions\n\n# Interface: IdealElementOptions\n\n## Hierarchy\n\n- [`BaseElementOptions`](BaseElementOptions.md)\n\n  ↳ **`IdealElementOptions`**\n\n## Table of contents\n\n### Properties\n\n- [classes](IdealElementOptions.md#classes)\n- [disabled](IdealElementOptions.md#disabled)\n- [hideIcon](IdealElementOptions.md#hideicon)\n- [style](IdealElementOptions.md#style)\n- [value](IdealElementOptions.md#value)\n\n## Properties\n\n### classes\n\n• `Optional` **classes**: [`StripeElementClasses`](StripeElementClasses.md)\n\nSet custom class names on the container DOM element when the Stripe element is in a particular state.\n\n#### Inherited from\n\n[BaseElementOptions](BaseElementOptions.md).[classes](BaseElementOptions.md#classes)\n\n___\n\n### disabled\n\n• `Optional` **disabled**: `boolean`\n\nApplies a disabled state to the Element such that user input is not accepted. Default is false.\n\n#### Inherited from\n\n[BaseElementOptions](BaseElementOptions.md).[disabled](BaseElementOptions.md#disabled)\n\n___\n\n### hideIcon\n\n• `Optional` **hideIcon**: `boolean`\n\nHides the icon in the Element. Default is false.\n\n___\n\n### style\n\n• `Optional` **style**: [`StripeElementStyle`](StripeElementStyle.md)\n\nCustomize the appearance of an element using CSS properties passed in a [Style](https://stripe.com/docs/js/appendix/style) object,\r\nwhich consists of CSS properties nested under objects for each variant.\n\n#### Inherited from\n\n[BaseElementOptions](BaseElementOptions.md).[style](BaseElementOptions.md#style)\n\n___\n\n### value\n\n• `Optional` **value**: `string`\n"
  },
  {
    "path": "docs/interfaces/IdealStateData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / IdealStateData\n\n# Interface: IdealStateData\n\n## Table of contents\n\n### Properties\n\n- [issuer](IdealStateData.md#issuer)\n\n## Properties\n\n### issuer\n\n• **issuer**: `string`\n"
  },
  {
    "path": "docs/interfaces/IframeEvent.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / IframeEvent\n\n# Interface: IframeEvent\\<TType, TPayload\\>\n\n## Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TType` | `string` |\n| `TPayload` | `any` |\n\n## Table of contents\n\n### Properties\n\n- [payload](IframeEvent.md#payload)\n- [type](IframeEvent.md#type)\n\n## Properties\n\n### payload\n\n• `Optional` **payload**: `TPayload`\n\n___\n\n### type\n\n• **type**: `TType`\n"
  },
  {
    "path": "docs/interfaces/IframeEventPostOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / IframeEventPostOptions\n\n# Interface: IframeEventPostOptions\\<TSuccessEvent, TErrorEvent\\>\n\n## Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TSuccessEvent` | extends [`IframeEvent`](IframeEvent.md) |\n| `TErrorEvent` | extends [`IframeEvent`](IframeEvent.md) |\n\n## Table of contents\n\n### Properties\n\n- [errorType](IframeEventPostOptions.md#errortype)\n- [successType](IframeEventPostOptions.md#successtype)\n\n## Properties\n\n### errorType\n\n• `Optional` **errorType**: `TErrorEvent`[``\"type\"``]\n\n___\n\n### successType\n\n• `Optional` **successType**: `TSuccessEvent`[``\"type\"``]\n"
  },
  {
    "path": "docs/interfaces/IndividualCardElementOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / IndividualCardElementOptions\n\n# Interface: IndividualCardElementOptions\n\n## Table of contents\n\n### Properties\n\n- [cardCvcElementOptions](IndividualCardElementOptions.md#cardcvcelementoptions)\n- [cardExpiryElementOptions](IndividualCardElementOptions.md#cardexpiryelementoptions)\n- [cardNumberElementOptions](IndividualCardElementOptions.md#cardnumberelementoptions)\n- [zipCodeElementOptions](IndividualCardElementOptions.md#zipcodeelementoptions)\n\n## Properties\n\n### cardCvcElementOptions\n\n• **cardCvcElementOptions**: [`CardCvcElementOptions`](CardCvcElementOptions.md)\n\n___\n\n### cardExpiryElementOptions\n\n• **cardExpiryElementOptions**: [`CardExpiryElementOptions`](CardExpiryElementOptions.md)\n\n___\n\n### cardNumberElementOptions\n\n• **cardNumberElementOptions**: [`CardNumberElementOptions`](CardNumberElementOptions.md)\n\n___\n\n### zipCodeElementOptions\n\n• `Optional` **zipCodeElementOptions**: [`ZipCodeElementOptions`](ZipCodeElementOptions.md)\n"
  },
  {
    "path": "docs/interfaces/InitCallbackActions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InitCallbackActions\n\n# Interface: InitCallbackActions\n\n## Table of contents\n\n### Methods\n\n- [disable](InitCallbackActions.md#disable)\n- [enable](InitCallbackActions.md#enable)\n\n## Methods\n\n### disable\n\n▸ **disable**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### enable\n\n▸ **enable**(): `void`\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/InitCallbackActions_2.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InitCallbackActions\\_2\n\n# Interface: InitCallbackActions\\_2\n\n## Table of contents\n\n### Methods\n\n- [disable](InitCallbackActions_2.md#disable)\n- [enable](InitCallbackActions_2.md#enable)\n\n## Methods\n\n### disable\n\n▸ **disable**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### enable\n\n▸ **enable**(): `void`\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/InitiaizedQuery.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InitiaizedQuery\n\n# Interface: InitiaizedQuery\n\n## Table of contents\n\n### Properties\n\n- [gatewayId](InitiaizedQuery.md#gatewayid)\n- [methodId](InitiaizedQuery.md#methodid)\n\n## Properties\n\n### gatewayId\n\n• `Optional` **gatewayId**: `string`\n\n___\n\n### methodId\n\n• **methodId**: `string`\n"
  },
  {
    "path": "docs/interfaces/InitializationStrategy.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InitializationStrategy\n\n# Interface: InitializationStrategy\n\n## Hierarchy\n\n- `Partial`\\<[`UnknownObject`](UnknownObject.md)\\>\n\n  ↳ **`InitializationStrategy`**\n\n## Table of contents\n\n### Properties\n\n- [type](InitializationStrategy.md#type)\n\n## Properties\n\n### type\n\n• **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/InlineElementStyles.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InlineElementStyles\n\n# Interface: InlineElementStyles\n\n## Hierarchy\n\n- **`InlineElementStyles`**\n\n  ↳ [`BlockElementStyles`](BlockElementStyles.md)\n\n  ↳ [`LabelStyles`](LabelStyles.md)\n\n  ↳ [`LinkStyles`](LinkStyles.md)\n\n## Table of contents\n\n### Properties\n\n- [color](InlineElementStyles.md#color)\n- [fontFamily](InlineElementStyles.md#fontfamily)\n- [fontWeight](InlineElementStyles.md#fontweight)\n- [letterSpacing](InlineElementStyles.md#letterspacing)\n- [lineHeight](InlineElementStyles.md#lineheight)\n\n## Properties\n\n### color\n\n• `Optional` **color**: `string`\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n"
  },
  {
    "path": "docs/interfaces/InputDetail.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InputDetail\n\n# Interface: InputDetail\n\n## Table of contents\n\n### Properties\n\n- [configuration](InputDetail.md#configuration)\n- [details](InputDetail.md#details)\n- [itemSearchUrl](InputDetail.md#itemsearchurl)\n- [items](InputDetail.md#items)\n- [key](InputDetail.md#key)\n- [optional](InputDetail.md#optional)\n- [type](InputDetail.md#type)\n- [value](InputDetail.md#value)\n\n## Properties\n\n### configuration\n\n• `Optional` **configuration**: `object`\n\nConfiguration parameters for the required input.\n\n___\n\n### details\n\n• `Optional` **details**: [`SubInputDetail`](SubInputDetail.md)[]\n\nInput details can also be provided recursively.\n\n___\n\n### itemSearchUrl\n\n• `Optional` **itemSearchUrl**: `string`\n\nIn case of a select, the URL from which to query the items.\n\n___\n\n### items\n\n• `Optional` **items**: [`Item_2`](Item_2.md)[]\n\nIn case of a select, the items to choose from.\n\n___\n\n### key\n\n• `Optional` **key**: `string`\n\nThe value to provide in the result.\n\n___\n\n### optional\n\n• `Optional` **optional**: `boolean`\n\nTrue if this input value is optional.\n\n___\n\n### type\n\n• `Optional` **type**: `string`\n\nThe type of the required input.\n\n___\n\n### value\n\n• `Optional` **value**: `string`\n\nThe value can be pre-filled, if available.\n"
  },
  {
    "path": "docs/interfaces/InputStyles.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InputStyles\n\n# Interface: InputStyles\n\n## Hierarchy\n\n- [`BlockElementStyles`](BlockElementStyles.md)\n\n  ↳ **`InputStyles`**\n\n  ↳↳ [`CheckableInputStyles`](CheckableInputStyles.md)\n\n  ↳↳ [`TextInputStyles`](TextInputStyles.md)\n\n## Table of contents\n\n### Properties\n\n- [active](InputStyles.md#active)\n- [backgroundColor](InputStyles.md#backgroundcolor)\n- [borderColor](InputStyles.md#bordercolor)\n- [borderWidth](InputStyles.md#borderwidth)\n- [boxShadow](InputStyles.md#boxshadow)\n- [color](InputStyles.md#color)\n- [disabled](InputStyles.md#disabled)\n- [error](InputStyles.md#error)\n- [focus](InputStyles.md#focus)\n- [fontFamily](InputStyles.md#fontfamily)\n- [fontWeight](InputStyles.md#fontweight)\n- [hover](InputStyles.md#hover)\n- [letterSpacing](InputStyles.md#letterspacing)\n- [lineHeight](InputStyles.md#lineheight)\n\n## Properties\n\n### active\n\n• `Optional` **active**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### backgroundColor\n\n• `Optional` **backgroundColor**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[backgroundColor](BlockElementStyles.md#backgroundcolor)\n\n___\n\n### borderColor\n\n• `Optional` **borderColor**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[borderColor](BlockElementStyles.md#bordercolor)\n\n___\n\n### borderWidth\n\n• `Optional` **borderWidth**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[borderWidth](BlockElementStyles.md#borderwidth)\n\n___\n\n### boxShadow\n\n• `Optional` **boxShadow**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[boxShadow](BlockElementStyles.md#boxshadow)\n\n___\n\n### color\n\n• `Optional` **color**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[color](BlockElementStyles.md#color)\n\n___\n\n### disabled\n\n• `Optional` **disabled**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### error\n\n• `Optional` **error**: [`InputStyles`](InputStyles.md)\n\n___\n\n### focus\n\n• `Optional` **focus**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[fontFamily](BlockElementStyles.md#fontfamily)\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[fontWeight](BlockElementStyles.md#fontweight)\n\n___\n\n### hover\n\n• `Optional` **hover**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[letterSpacing](BlockElementStyles.md#letterspacing)\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[lineHeight](BlockElementStyles.md#lineheight)\n"
  },
  {
    "path": "docs/interfaces/InstrumentSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InstrumentSelector\n\n# Interface: InstrumentSelector\n\n## Table of contents\n\n### Methods\n\n- [getCardInstrument](InstrumentSelector.md#getcardinstrument)\n- [getCardInstrumentOrThrow](InstrumentSelector.md#getcardinstrumentorthrow)\n- [getDeleteError](InstrumentSelector.md#getdeleteerror)\n- [getInstruments](InstrumentSelector.md#getinstruments)\n- [getInstrumentsByPaymentMethod](InstrumentSelector.md#getinstrumentsbypaymentmethod)\n- [getInstrumentsMeta](InstrumentSelector.md#getinstrumentsmeta)\n- [getLoadError](InstrumentSelector.md#getloaderror)\n- [isDeleting](InstrumentSelector.md#isdeleting)\n- [isLoading](InstrumentSelector.md#isloading)\n\n## Methods\n\n### getCardInstrument\n\n▸ **getCardInstrument**(`instrumentId`): `undefined` \\| [`CardInstrument`](CardInstrument.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `instrumentId` | `string` |\n\n#### Returns\n\n`undefined` \\| [`CardInstrument`](CardInstrument.md)\n\n___\n\n### getCardInstrumentOrThrow\n\n▸ **getCardInstrumentOrThrow**(`instrumentId`): [`CardInstrument`](CardInstrument.md)\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `instrumentId` | `string` |\n\n#### Returns\n\n[`CardInstrument`](CardInstrument.md)\n\n___\n\n### getDeleteError\n\n▸ **getDeleteError**(`instrumentId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `instrumentId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getInstruments\n\n▸ **getInstruments**(): `undefined` \\| [`PaymentInstrument`](../README.md#paymentinstrument)[]\n\n#### Returns\n\n`undefined` \\| [`PaymentInstrument`](../README.md#paymentinstrument)[]\n\n___\n\n### getInstrumentsByPaymentMethod\n\n▸ **getInstrumentsByPaymentMethod**(`paymentMethod`): `undefined` \\| [`PaymentInstrument`](../README.md#paymentinstrument)[]\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `paymentMethod` | [`PaymentMethod`](PaymentMethod.md)\\<`any`\\> |\n\n#### Returns\n\n`undefined` \\| [`PaymentInstrument`](../README.md#paymentinstrument)[]\n\n___\n\n### getInstrumentsMeta\n\n▸ **getInstrumentsMeta**(): `undefined` \\| [`VaultAccessToken`](VaultAccessToken.md)\n\n#### Returns\n\n`undefined` \\| [`VaultAccessToken`](VaultAccessToken.md)\n\n___\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### isDeleting\n\n▸ **isDeleting**(`instrumentId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `instrumentId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/InternalAddress.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InternalAddress\n\n# Interface: InternalAddress\\<T\\>\n\n## Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `T` | `string` |\n\n## Table of contents\n\n### Properties\n\n- [addressLine1](InternalAddress.md#addressline1)\n- [addressLine2](InternalAddress.md#addressline2)\n- [city](InternalAddress.md#city)\n- [company](InternalAddress.md#company)\n- [country](InternalAddress.md#country)\n- [countryCode](InternalAddress.md#countrycode)\n- [customFields](InternalAddress.md#customfields)\n- [firstName](InternalAddress.md#firstname)\n- [id](InternalAddress.md#id)\n- [lastName](InternalAddress.md#lastname)\n- [phone](InternalAddress.md#phone)\n- [postCode](InternalAddress.md#postcode)\n- [province](InternalAddress.md#province)\n- [provinceCode](InternalAddress.md#provincecode)\n- [type](InternalAddress.md#type)\n\n## Properties\n\n### addressLine1\n\n• **addressLine1**: `string`\n\n___\n\n### addressLine2\n\n• **addressLine2**: `string`\n\n___\n\n### city\n\n• **city**: `string`\n\n___\n\n### company\n\n• **company**: `string`\n\n___\n\n### country\n\n• **country**: `string`\n\n___\n\n### countryCode\n\n• **countryCode**: `string`\n\n___\n\n### customFields\n\n• **customFields**: \\{ `fieldId`: `string` ; `fieldValue`: `string` \\| `number` \\| `string`[]  }[]\n\n___\n\n### firstName\n\n• **firstName**: `string`\n\n___\n\n### id\n\n• `Optional` **id**: `T`\n\n___\n\n### lastName\n\n• **lastName**: `string`\n\n___\n\n### phone\n\n• **phone**: `string`\n\n___\n\n### postCode\n\n• **postCode**: `string`\n\n___\n\n### province\n\n• **province**: `string`\n\n___\n\n### provinceCode\n\n• **provinceCode**: `string`\n\n___\n\n### type\n\n• `Optional` **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/InternalCheckoutSelectors.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InternalCheckoutSelectors\n\n# Interface: InternalCheckoutSelectors\n\n## Table of contents\n\n### Properties\n\n- [b2bToken](InternalCheckoutSelectors.md#b2btoken)\n- [billingAddress](InternalCheckoutSelectors.md#billingaddress)\n- [cart](InternalCheckoutSelectors.md#cart)\n- [checkout](InternalCheckoutSelectors.md#checkout)\n- [checkoutButton](InternalCheckoutSelectors.md#checkoutbutton)\n- [config](InternalCheckoutSelectors.md#config)\n- [consignments](InternalCheckoutSelectors.md#consignments)\n- [countries](InternalCheckoutSelectors.md#countries)\n- [coupons](InternalCheckoutSelectors.md#coupons)\n- [customer](InternalCheckoutSelectors.md#customer)\n- [customerStrategies](InternalCheckoutSelectors.md#customerstrategies)\n- [extensions](InternalCheckoutSelectors.md#extensions)\n- [form](InternalCheckoutSelectors.md#form)\n- [giftCertificates](InternalCheckoutSelectors.md#giftcertificates)\n- [instruments](InternalCheckoutSelectors.md#instruments)\n- [order](InternalCheckoutSelectors.md#order)\n- [orderBillingAddress](InternalCheckoutSelectors.md#orderbillingaddress)\n- [payment](InternalCheckoutSelectors.md#payment)\n- [paymentMethods](InternalCheckoutSelectors.md#paymentmethods)\n- [paymentProviderCustomer](InternalCheckoutSelectors.md#paymentprovidercustomer)\n- [paymentStrategies](InternalCheckoutSelectors.md#paymentstrategies)\n- [pickupOptions](InternalCheckoutSelectors.md#pickupoptions)\n- [remoteCheckout](InternalCheckoutSelectors.md#remotecheckout)\n- [shippingAddress](InternalCheckoutSelectors.md#shippingaddress)\n- [shippingCountries](InternalCheckoutSelectors.md#shippingcountries)\n- [shippingStrategies](InternalCheckoutSelectors.md#shippingstrategies)\n- [signInEmail](InternalCheckoutSelectors.md#signinemail)\n- [storeCredit](InternalCheckoutSelectors.md#storecredit)\n- [subscriptions](InternalCheckoutSelectors.md#subscriptions)\n\n## Properties\n\n### b2bToken\n\n• **b2bToken**: [`B2BTokenSelector`](B2BTokenSelector.md)\n\n___\n\n### billingAddress\n\n• **billingAddress**: [`BillingAddressSelector`](BillingAddressSelector.md)\n\n___\n\n### cart\n\n• **cart**: [`CartSelector`](CartSelector.md)\n\n___\n\n### checkout\n\n• **checkout**: [`CheckoutSelector`](CheckoutSelector.md)\n\n___\n\n### checkoutButton\n\n• **checkoutButton**: [`CheckoutButtonSelector`](CheckoutButtonSelector.md)\n\n___\n\n### config\n\n• **config**: [`ConfigSelector`](ConfigSelector.md)\n\n___\n\n### consignments\n\n• **consignments**: [`ConsignmentSelector`](ConsignmentSelector.md)\n\n___\n\n### countries\n\n• **countries**: [`CountrySelector`](CountrySelector.md)\n\n___\n\n### coupons\n\n• **coupons**: [`CouponSelector`](CouponSelector.md)\n\n___\n\n### customer\n\n• **customer**: [`CustomerSelector`](CustomerSelector.md)\n\n___\n\n### customerStrategies\n\n• **customerStrategies**: [`CustomerStrategySelector`](CustomerStrategySelector.md)\n\n___\n\n### extensions\n\n• **extensions**: [`ExtensionSelector`](ExtensionSelector.md)\n\n___\n\n### form\n\n• **form**: [`FormSelector`](FormSelector.md)\n\n___\n\n### giftCertificates\n\n• **giftCertificates**: [`GiftCertificateSelector`](GiftCertificateSelector.md)\n\n___\n\n### instruments\n\n• **instruments**: [`InstrumentSelector`](InstrumentSelector.md)\n\n___\n\n### order\n\n• **order**: [`OrderSelector`](OrderSelector.md)\n\n___\n\n### orderBillingAddress\n\n• **orderBillingAddress**: [`OrderBillingAddressSelector`](OrderBillingAddressSelector.md)\n\n___\n\n### payment\n\n• **payment**: [`PaymentSelector`](PaymentSelector.md)\n\n___\n\n### paymentMethods\n\n• **paymentMethods**: [`PaymentMethodSelector`](PaymentMethodSelector.md)\n\n___\n\n### paymentProviderCustomer\n\n• **paymentProviderCustomer**: [`PaymentProviderCustomerSelector`](PaymentProviderCustomerSelector.md)\n\n___\n\n### paymentStrategies\n\n• **paymentStrategies**: [`PaymentStrategySelector`](PaymentStrategySelector.md)\n\n___\n\n### pickupOptions\n\n• **pickupOptions**: [`PickupOptionSelector`](PickupOptionSelector.md)\n\n___\n\n### remoteCheckout\n\n• **remoteCheckout**: [`RemoteCheckoutSelector`](RemoteCheckoutSelector.md)\n\n___\n\n### shippingAddress\n\n• **shippingAddress**: [`ShippingAddressSelector`](ShippingAddressSelector.md)\n\n___\n\n### shippingCountries\n\n• **shippingCountries**: [`ShippingCountrySelector`](ShippingCountrySelector.md)\n\n___\n\n### shippingStrategies\n\n• **shippingStrategies**: [`ShippingStrategySelector`](ShippingStrategySelector.md)\n\n___\n\n### signInEmail\n\n• **signInEmail**: [`SignInEmailSelector`](SignInEmailSelector.md)\n\n___\n\n### storeCredit\n\n• **storeCredit**: [`StoreCreditSelector`](StoreCreditSelector.md)\n\n___\n\n### subscriptions\n\n• **subscriptions**: [`SubscriptionsSelector`](SubscriptionsSelector.md)\n"
  },
  {
    "path": "docs/interfaces/InternalOrderMeta.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InternalOrderMeta\n\n# Interface: InternalOrderMeta\n\n## Hierarchy\n\n- **`InternalOrderMeta`**\n\n  ↳ [`OrderMetaState`](OrderMetaState.md)\n\n## Table of contents\n\n### Properties\n\n- [deviceFingerprint](InternalOrderMeta.md#devicefingerprint)\n\n## Properties\n\n### deviceFingerprint\n\n• `Optional` **deviceFingerprint**: `string`\n"
  },
  {
    "path": "docs/interfaces/InternalOrderPayment.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InternalOrderPayment\n\n# Interface: InternalOrderPayment\n\n## Table of contents\n\n### Properties\n\n- [gateway](InternalOrderPayment.md#gateway)\n- [helpText](InternalOrderPayment.md#helptext)\n- [id](InternalOrderPayment.md#id)\n- [redirectUrl](InternalOrderPayment.md#redirecturl)\n- [returnUrl](InternalOrderPayment.md#returnurl)\n- [status](InternalOrderPayment.md#status)\n\n## Properties\n\n### gateway\n\n• `Optional` **gateway**: `string`\n\n___\n\n### helpText\n\n• `Optional` **helpText**: `string`\n\n___\n\n### id\n\n• `Optional` **id**: `string`\n\n___\n\n### redirectUrl\n\n• `Optional` **redirectUrl**: `string`\n\n___\n\n### returnUrl\n\n• `Optional` **returnUrl**: `string`\n\n___\n\n### status\n\n• `Optional` **status**: `string`\n"
  },
  {
    "path": "docs/interfaces/InventorySettings.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / InventorySettings\n\n# Interface: InventorySettings\n\n## Table of contents\n\n### Properties\n\n- [backorderAvailabilityPrompt](InventorySettings.md#backorderavailabilityprompt)\n- [defaultShippingExpectationPrompt](InventorySettings.md#defaultshippingexpectationprompt)\n- [shouldDisplayBackorderMessagesOnStorefront](InventorySettings.md#shoulddisplaybackordermessagesonstorefront)\n- [showBackorderAvailabilityPrompt](InventorySettings.md#showbackorderavailabilityprompt)\n- [showBackorderMessage](InventorySettings.md#showbackordermessage)\n- [showDefaultShippingExpectationPrompt](InventorySettings.md#showdefaultshippingexpectationprompt)\n- [showQuantityOnBackorder](InventorySettings.md#showquantityonbackorder)\n- [showQuantityOnHand](InventorySettings.md#showquantityonhand)\n\n## Properties\n\n### backorderAvailabilityPrompt\n\n• **backorderAvailabilityPrompt**: ``null`` \\| `string`\n\n___\n\n### defaultShippingExpectationPrompt\n\n• **defaultShippingExpectationPrompt**: ``null`` \\| `string`\n\n___\n\n### shouldDisplayBackorderMessagesOnStorefront\n\n• **shouldDisplayBackorderMessagesOnStorefront**: `boolean`\n\n___\n\n### showBackorderAvailabilityPrompt\n\n• **showBackorderAvailabilityPrompt**: `boolean`\n\n___\n\n### showBackorderMessage\n\n• **showBackorderMessage**: `boolean`\n\n___\n\n### showDefaultShippingExpectationPrompt\n\n• **showDefaultShippingExpectationPrompt**: `boolean`\n\n___\n\n### showQuantityOnBackorder\n\n• **showQuantityOnBackorder**: `boolean`\n\n___\n\n### showQuantityOnHand\n\n• **showQuantityOnHand**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/Item.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Item\n\n# Interface: Item\n\n## Table of contents\n\n### Properties\n\n- [quantity](Item.md#quantity)\n- [variantId](Item.md#variantid)\n\n## Properties\n\n### quantity\n\n• **quantity**: `number`\n\n___\n\n### variantId\n\n• **variantId**: `number`\n"
  },
  {
    "path": "docs/interfaces/Item_2.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Item\\_2\n\n# Interface: Item\\_2\n\n## Table of contents\n\n### Properties\n\n- [id](Item_2.md#id)\n- [name](Item_2.md#name)\n\n## Properties\n\n### id\n\n• `Optional` **id**: `string`\n\nThe value to provide in the result.\n\n___\n\n### name\n\n• `Optional` **name**: `string`\n\nThe display name.\n"
  },
  {
    "path": "docs/interfaces/LabelStyles.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / LabelStyles\n\n# Interface: LabelStyles\n\n## Hierarchy\n\n- [`InlineElementStyles`](InlineElementStyles.md)\n\n  ↳ **`LabelStyles`**\n\n## Table of contents\n\n### Properties\n\n- [color](LabelStyles.md#color)\n- [error](LabelStyles.md#error)\n- [fontFamily](LabelStyles.md#fontfamily)\n- [fontWeight](LabelStyles.md#fontweight)\n- [letterSpacing](LabelStyles.md#letterspacing)\n- [lineHeight](LabelStyles.md#lineheight)\n\n## Properties\n\n### color\n\n• `Optional` **color**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[color](InlineElementStyles.md#color)\n\n___\n\n### error\n\n• `Optional` **error**: [`InlineElementStyles`](InlineElementStyles.md)\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[fontFamily](InlineElementStyles.md#fontfamily)\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[fontWeight](InlineElementStyles.md#fontweight)\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[letterSpacing](InlineElementStyles.md#letterspacing)\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[lineHeight](InlineElementStyles.md#lineheight)\n"
  },
  {
    "path": "docs/interfaces/LanguageConfig.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / LanguageConfig\n\n# Interface: LanguageConfig\n\n## Table of contents\n\n### Properties\n\n- [defaultLocale](LanguageConfig.md#defaultlocale)\n- [defaultTranslations](LanguageConfig.md#defaulttranslations)\n- [fallbackLocale](LanguageConfig.md#fallbacklocale)\n- [fallbackTranslations](LanguageConfig.md#fallbacktranslations)\n- [locale](LanguageConfig.md#locale)\n- [locales](LanguageConfig.md#locales)\n- [translations](LanguageConfig.md#translations)\n\n## Properties\n\n### defaultLocale\n\n• `Optional` **defaultLocale**: `string`\n\n___\n\n### defaultTranslations\n\n• **defaultTranslations**: [`Translations`](Translations.md)\n\n___\n\n### fallbackLocale\n\n• `Optional` **fallbackLocale**: `string`\n\n___\n\n### fallbackTranslations\n\n• `Optional` **fallbackTranslations**: [`Translations`](Translations.md)\n\n___\n\n### locale\n\n• **locale**: `string`\n\n___\n\n### locales\n\n• **locales**: [`Locales`](Locales.md)\n\n___\n\n### translations\n\n• **translations**: [`Translations`](Translations.md)\n"
  },
  {
    "path": "docs/interfaces/LegacyHostedFormOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / LegacyHostedFormOptions\n\n# Interface: LegacyHostedFormOptions\n\n## Table of contents\n\n### Properties\n\n- [fields](LegacyHostedFormOptions.md#fields)\n- [styles](LegacyHostedFormOptions.md#styles)\n\n### Methods\n\n- [onBlur](LegacyHostedFormOptions.md#onblur)\n- [onCardTypeChange](LegacyHostedFormOptions.md#oncardtypechange)\n- [onEnter](LegacyHostedFormOptions.md#onenter)\n- [onFocus](LegacyHostedFormOptions.md#onfocus)\n- [onValidate](LegacyHostedFormOptions.md#onvalidate)\n\n## Properties\n\n### fields\n\n• **fields**: [`HostedFieldOptionsMap`](../README.md#hostedfieldoptionsmap)\n\n___\n\n### styles\n\n• `Optional` **styles**: [`HostedFieldStylesMap`](HostedFieldStylesMap.md)\n\n## Methods\n\n### onBlur\n\n▸ **onBlur**(`data`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `data` | `Object` |\n| `data.errors?` | `Partial`\\<`Record`\\<[`HostedFormErrorDataKeys`](../README.md#hostedformerrordatakeys), [`HostedFormErrorData`](HostedFormErrorData.md)\\>\\> |\n| `data.fieldType` | [`HostedFieldType`](../enums/HostedFieldType.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### onCardTypeChange\n\n▸ **onCardTypeChange**(`data`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `data` | `Object` |\n| `data.cardType?` | `string` |\n\n#### Returns\n\n`void`\n\n___\n\n### onEnter\n\n▸ **onEnter**(`data`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `data` | `Object` |\n| `data.fieldType` | [`HostedFieldType`](../enums/HostedFieldType.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### onFocus\n\n▸ **onFocus**(`data`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `data` | `Object` |\n| `data.fieldType` | [`HostedFieldType`](../enums/HostedFieldType.md) |\n\n#### Returns\n\n`void`\n\n___\n\n### onValidate\n\n▸ **onValidate**(`data`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `data` | [`HostedInputValidateResults`](HostedInputValidateResults.md) |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/LineItem.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / LineItem\n\n# Interface: LineItem\n\n## Hierarchy\n\n- **`LineItem`**\n\n  ↳ [`DigitalItem`](DigitalItem.md)\n\n  ↳ [`PhysicalItem`](PhysicalItem.md)\n\n## Table of contents\n\n### Properties\n\n- [addedByPromotion](LineItem.md#addedbypromotion)\n- [backorderMessage](LineItem.md#backordermessage)\n- [brand](LineItem.md#brand)\n- [categories](LineItem.md#categories)\n- [categoryNames](LineItem.md#categorynames)\n- [comparisonPrice](LineItem.md#comparisonprice)\n- [couponAmount](LineItem.md#couponamount)\n- [discountAmount](LineItem.md#discountamount)\n- [discounts](LineItem.md#discounts)\n- [extendedComparisonPrice](LineItem.md#extendedcomparisonprice)\n- [extendedListPrice](LineItem.md#extendedlistprice)\n- [extendedSalePrice](LineItem.md#extendedsaleprice)\n- [id](LineItem.md#id)\n- [imageUrl](LineItem.md#imageurl)\n- [isTaxable](LineItem.md#istaxable)\n- [listPrice](LineItem.md#listprice)\n- [name](LineItem.md#name)\n- [options](LineItem.md#options)\n- [parentId](LineItem.md#parentid)\n- [productId](LineItem.md#productid)\n- [quantity](LineItem.md#quantity)\n- [quantityBackordered](LineItem.md#quantitybackordered)\n- [retailPrice](LineItem.md#retailprice)\n- [salePrice](LineItem.md#saleprice)\n- [sku](LineItem.md#sku)\n- [socialMedia](LineItem.md#socialmedia)\n- [stockPosition](LineItem.md#stockposition)\n- [url](LineItem.md#url)\n- [variantId](LineItem.md#variantid)\n\n## Properties\n\n### addedByPromotion\n\n• **addedByPromotion**: `boolean`\n\n___\n\n### backorderMessage\n\n• `Optional` **backorderMessage**: ``null`` \\| `string`\n\n___\n\n### brand\n\n• **brand**: `string`\n\n___\n\n### categories\n\n• `Optional` **categories**: [`LineItemCategory`](LineItemCategory.md)[][]\n\n___\n\n### categoryNames\n\n• `Optional` **categoryNames**: `string`[]\n\n___\n\n### comparisonPrice\n\n• **comparisonPrice**: `number`\n\n___\n\n### couponAmount\n\n• **couponAmount**: `number`\n\n___\n\n### discountAmount\n\n• **discountAmount**: `number`\n\n___\n\n### discounts\n\n• **discounts**: \\{ `discountedAmount`: `number` ; `name`: `string`  }[]\n\n___\n\n### extendedComparisonPrice\n\n• **extendedComparisonPrice**: `number`\n\n___\n\n### extendedListPrice\n\n• **extendedListPrice**: `number`\n\n___\n\n### extendedSalePrice\n\n• **extendedSalePrice**: `number`\n\n___\n\n### id\n\n• **id**: `string` \\| `number`\n\n___\n\n### imageUrl\n\n• **imageUrl**: `string`\n\n___\n\n### isTaxable\n\n• **isTaxable**: `boolean`\n\n___\n\n### listPrice\n\n• **listPrice**: `number`\n\n___\n\n### name\n\n• **name**: `string`\n\n___\n\n### options\n\n• `Optional` **options**: [`LineItemOption`](LineItemOption.md)[]\n\n___\n\n### parentId\n\n• `Optional` **parentId**: ``null`` \\| `string`\n\n___\n\n### productId\n\n• **productId**: `number`\n\n___\n\n### quantity\n\n• **quantity**: `number`\n\n___\n\n### quantityBackordered\n\n• `Optional` **quantityBackordered**: `number`\n\n___\n\n### retailPrice\n\n• **retailPrice**: `number`\n\n___\n\n### salePrice\n\n• **salePrice**: `number`\n\n___\n\n### sku\n\n• **sku**: `string`\n\n___\n\n### socialMedia\n\n• `Optional` **socialMedia**: [`LineItemSocialData`](LineItemSocialData.md)[]\n\n___\n\n### stockPosition\n\n• `Optional` **stockPosition**: [`StockPosition`](StockPosition.md)\n\n___\n\n### url\n\n• **url**: `string`\n\n___\n\n### variantId\n\n• **variantId**: `number`\n"
  },
  {
    "path": "docs/interfaces/LineItemCategory.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / LineItemCategory\n\n# Interface: LineItemCategory\n\n## Table of contents\n\n### Properties\n\n- [name](LineItemCategory.md#name)\n\n## Properties\n\n### name\n\n• **name**: `string`\n"
  },
  {
    "path": "docs/interfaces/LineItemMap.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / LineItemMap\n\n# Interface: LineItemMap\n\n## Table of contents\n\n### Properties\n\n- [customItems](LineItemMap.md#customitems)\n- [digitalItems](LineItemMap.md#digitalitems)\n- [giftCertificates](LineItemMap.md#giftcertificates)\n- [physicalItems](LineItemMap.md#physicalitems)\n\n## Properties\n\n### customItems\n\n• `Optional` **customItems**: [`CustomItem`](CustomItem.md)[]\n\n___\n\n### digitalItems\n\n• **digitalItems**: [`DigitalItem`](DigitalItem.md)[]\n\n___\n\n### giftCertificates\n\n• **giftCertificates**: [`GiftCertificateItem`](GiftCertificateItem.md)[]\n\n___\n\n### physicalItems\n\n• **physicalItems**: [`PhysicalItem`](PhysicalItem.md)[]\n"
  },
  {
    "path": "docs/interfaces/LineItemOption.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / LineItemOption\n\n# Interface: LineItemOption\n\n## Table of contents\n\n### Properties\n\n- [name](LineItemOption.md#name)\n- [nameId](LineItemOption.md#nameid)\n- [value](LineItemOption.md#value)\n- [valueId](LineItemOption.md#valueid)\n\n## Properties\n\n### name\n\n• **name**: `string`\n\n___\n\n### nameId\n\n• **nameId**: `number`\n\n___\n\n### value\n\n• **value**: `string`\n\n___\n\n### valueId\n\n• **valueId**: ``null`` \\| `number`\n"
  },
  {
    "path": "docs/interfaces/LineItemSocialData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / LineItemSocialData\n\n# Interface: LineItemSocialData\n\n## Table of contents\n\n### Properties\n\n- [channel](LineItemSocialData.md#channel)\n- [code](LineItemSocialData.md#code)\n- [link](LineItemSocialData.md#link)\n- [text](LineItemSocialData.md#text)\n\n## Properties\n\n### channel\n\n• **channel**: `string`\n\n___\n\n### code\n\n• **code**: `string`\n\n___\n\n### link\n\n• **link**: `string`\n\n___\n\n### text\n\n• **text**: `string`\n"
  },
  {
    "path": "docs/interfaces/LinkStyles.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / LinkStyles\n\n# Interface: LinkStyles\n\n## Hierarchy\n\n- [`InlineElementStyles`](InlineElementStyles.md)\n\n  ↳ **`LinkStyles`**\n\n## Table of contents\n\n### Properties\n\n- [active](LinkStyles.md#active)\n- [color](LinkStyles.md#color)\n- [focus](LinkStyles.md#focus)\n- [fontFamily](LinkStyles.md#fontfamily)\n- [fontWeight](LinkStyles.md#fontweight)\n- [hover](LinkStyles.md#hover)\n- [letterSpacing](LinkStyles.md#letterspacing)\n- [lineHeight](LinkStyles.md#lineheight)\n\n## Properties\n\n### active\n\n• `Optional` **active**: [`InlineElementStyles`](InlineElementStyles.md)\n\n___\n\n### color\n\n• `Optional` **color**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[color](InlineElementStyles.md#color)\n\n___\n\n### focus\n\n• `Optional` **focus**: [`InlineElementStyles`](InlineElementStyles.md)\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[fontFamily](InlineElementStyles.md#fontfamily)\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[fontWeight](InlineElementStyles.md#fontweight)\n\n___\n\n### hover\n\n• `Optional` **hover**: [`InlineElementStyles`](InlineElementStyles.md)\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[letterSpacing](InlineElementStyles.md#letterspacing)\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n\n#### Inherited from\n\n[InlineElementStyles](InlineElementStyles.md).[lineHeight](InlineElementStyles.md#lineheight)\n"
  },
  {
    "path": "docs/interfaces/Locales.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Locales\n\n# Interface: Locales\n\n## Indexable\n\n▪ [key: `string`]: `string`\n"
  },
  {
    "path": "docs/interfaces/MolliePaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / MolliePaymentInitializeOptions\n\n# Interface: MolliePaymentInitializeOptions\n\nA set of options that are required to initialize the Mollie payment method.\n\nOnce Mollie payment is initialized, credit card form fields are provided by the\r\npayment provider as IFrames, these will be inserted into the current page. These\r\noptions provide a location and styling for each of the form fields.\n\n```js\r\nservice.initializePayment({\r\n     methodId: 'mollie',\r\n     mollie: {\r\n         containerId: 'container',\r\n         cardNumberId: '',\r\n         cardHolderId: '',\r\n         cardCvcId: '',\r\n         cardExpiryId: '',\r\n         styles : {\r\n             base: {\r\n                 color: '#fff'\r\n             }\r\n         }\r\n     }\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [cardCvcId](MolliePaymentInitializeOptions.md#cardcvcid)\n- [cardExpiryId](MolliePaymentInitializeOptions.md#cardexpiryid)\n- [cardHolderId](MolliePaymentInitializeOptions.md#cardholderid)\n- [cardNumberId](MolliePaymentInitializeOptions.md#cardnumberid)\n- [containerId](MolliePaymentInitializeOptions.md#containerid)\n- [form](MolliePaymentInitializeOptions.md#form)\n- [styles](MolliePaymentInitializeOptions.md#styles)\n- [unsupportedMethodMessage](MolliePaymentInitializeOptions.md#unsupportedmethodmessage)\n\n### Methods\n\n- [disableButton](MolliePaymentInitializeOptions.md#disablebutton)\n\n## Properties\n\n### cardCvcId\n\n• **cardCvcId**: `string`\n\nThe location to insert Mollie Component\n\n___\n\n### cardExpiryId\n\n• **cardExpiryId**: `string`\n\nThe location to insert Mollie Component\n\n___\n\n### cardHolderId\n\n• **cardHolderId**: `string`\n\nThe location to insert Mollie Component\n\n___\n\n### cardNumberId\n\n• **cardNumberId**: `string`\n\nThe location to insert Mollie Component\n\n___\n\n### containerId\n\n• `Optional` **containerId**: `string`\n\nContainerId is use in Mollie for determined either its showing or not the\r\ncontainer, because when Mollie has Vaulted Instruments it gets hide,\r\nand shows an error because can't mount Provider Components\n\n___\n\n### form\n\n• `Optional` **form**: `default`\n\nHosted Form Validation Options\n\n___\n\n### styles\n\n• **styles**: `object`\n\nA set of styles required for the mollie components\n\n___\n\n### unsupportedMethodMessage\n\n• `Optional` **unsupportedMethodMessage**: `string`\n\n## Methods\n\n### disableButton\n\n▸ **disableButton**(`disabled`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `disabled` | `boolean` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/MutationObeserverCreator.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / MutationObeserverCreator\n\n# Interface: MutationObeserverCreator\n\n## Table of contents\n\n### Constructors\n\n- [constructor](MutationObeserverCreator.md#constructor)\n\n### Properties\n\n- [prototype](MutationObeserverCreator.md#prototype)\n\n## Constructors\n\n### constructor\n\n• **new MutationObeserverCreator**(`callback`): `MutationObserver`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `callback` | `MutationCallback` |\n\n#### Returns\n\n`MutationObserver`\n\n## Properties\n\n### prototype\n\n• **prototype**: `MutationObserver`\n"
  },
  {
    "path": "docs/interfaces/MutationObserverWindow.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / MutationObserverWindow\n\n# Interface: MutationObserverWindow\n\n## Hierarchy\n\n- `Window`\n\n  ↳ **`MutationObserverWindow`**\n\n## Table of contents\n\n### Properties\n\n- [MutationObserver](MutationObserverWindow.md#mutationobserver)\n\n## Properties\n\n### MutationObserver\n\n• **MutationObserver**: [`MutationObeserverCreator`](MutationObeserverCreator.md)\n"
  },
  {
    "path": "docs/interfaces/NonceInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / NonceInstrument\n\n# Interface: NonceInstrument\n\n## Table of contents\n\n### Properties\n\n- [deviceSessionId](NonceInstrument.md#devicesessionid)\n- [nonce](NonceInstrument.md#nonce)\n- [shouldSaveInstrument](NonceInstrument.md#shouldsaveinstrument)\n- [shouldSetAsDefaultInstrument](NonceInstrument.md#shouldsetasdefaultinstrument)\n- [tokenType](NonceInstrument.md#tokentype)\n\n## Properties\n\n### deviceSessionId\n\n• `Optional` **deviceSessionId**: `string`\n\n___\n\n### nonce\n\n• **nonce**: `string`\n\n___\n\n### shouldSaveInstrument\n\n• `Optional` **shouldSaveInstrument**: `boolean`\n\n___\n\n### shouldSetAsDefaultInstrument\n\n• `Optional` **shouldSetAsDefaultInstrument**: `boolean`\n\n___\n\n### tokenType\n\n• `Optional` **tokenType**: `string`\n"
  },
  {
    "path": "docs/interfaces/Option.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Option\n\n# Interface: Option\n\n## Table of contents\n\n### Properties\n\n- [itemQuantities](Option.md#itemquantities)\n- [pickupMethod](Option.md#pickupmethod)\n\n## Properties\n\n### itemQuantities\n\n• **itemQuantities**: [`Item`](Item.md)\n\n___\n\n### pickupMethod\n\n• **pickupMethod**: [`PickupMethod`](PickupMethod.md)\n"
  },
  {
    "path": "docs/interfaces/Order.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Order\n\n# Interface: Order\n\n## Table of contents\n\n### Properties\n\n- [baseAmount](Order.md#baseamount)\n- [billingAddress](Order.md#billingaddress)\n- [cartId](Order.md#cartid)\n- [channelId](Order.md#channelid)\n- [comparisonShippingCost](Order.md#comparisonshippingcost)\n- [consignments](Order.md#consignments)\n- [coupons](Order.md#coupons)\n- [currency](Order.md#currency)\n- [customerCanBeCreated](Order.md#customercanbecreated)\n- [customerId](Order.md#customerid)\n- [customerMessage](Order.md#customermessage)\n- [discountAmount](Order.md#discountamount)\n- [displayDiscountTotal](Order.md#displaydiscounttotal)\n- [fees](Order.md#fees)\n- [giftWrappingCostTotal](Order.md#giftwrappingcosttotal)\n- [handlingCostTotal](Order.md#handlingcosttotal)\n- [hasDigitalItems](Order.md#hasdigitalitems)\n- [isComplete](Order.md#iscomplete)\n- [isDownloadable](Order.md#isdownloadable)\n- [isTaxIncluded](Order.md#istaxincluded)\n- [lineItems](Order.md#lineitems)\n- [manualDiscountTotal](Order.md#manualdiscounttotal)\n- [orderAmount](Order.md#orderamount)\n- [orderAmountAsInteger](Order.md#orderamountasinteger)\n- [orderBasedAutoDiscountTotal](Order.md#orderbasedautodiscounttotal)\n- [orderId](Order.md#orderid)\n- [payments](Order.md#payments)\n- [productAutoDiscountedSubtotal](Order.md#productautodiscountedsubtotal)\n- [shippingCostBeforeDiscount](Order.md#shippingcostbeforediscount)\n- [shippingCostTotal](Order.md#shippingcosttotal)\n- [status](Order.md#status)\n- [taxTotal](Order.md#taxtotal)\n- [taxes](Order.md#taxes)\n- [totalDiscount](Order.md#totaldiscount)\n\n## Properties\n\n### baseAmount\n\n• **baseAmount**: `number`\n\n___\n\n### billingAddress\n\n• **billingAddress**: [`OrderBillingAddress`](OrderBillingAddress.md)\n\n___\n\n### cartId\n\n• **cartId**: `string`\n\n___\n\n### channelId\n\n• **channelId**: `number`\n\n___\n\n### comparisonShippingCost\n\n• **comparisonShippingCost**: `number`\n\n___\n\n### consignments\n\n• **consignments**: [`OrderConsignment`](OrderConsignment.md)\n\n___\n\n### coupons\n\n• **coupons**: [`Coupon`](Coupon.md)[]\n\n___\n\n### currency\n\n• **currency**: `default`\n\n___\n\n### customerCanBeCreated\n\n• **customerCanBeCreated**: `boolean`\n\n___\n\n### customerId\n\n• **customerId**: `number`\n\n___\n\n### customerMessage\n\n• **customerMessage**: `string`\n\n___\n\n### discountAmount\n\n• **discountAmount**: `number`\n\n___\n\n### displayDiscountTotal\n\n• **displayDiscountTotal**: `number`\n\n___\n\n### fees\n\n• **fees**: [`OrderFee`](OrderFee.md)[]\n\n___\n\n### giftWrappingCostTotal\n\n• **giftWrappingCostTotal**: `number`\n\n___\n\n### handlingCostTotal\n\n• **handlingCostTotal**: `number`\n\n___\n\n### hasDigitalItems\n\n• **hasDigitalItems**: `boolean`\n\n___\n\n### isComplete\n\n• **isComplete**: `boolean`\n\n___\n\n### isDownloadable\n\n• **isDownloadable**: `boolean`\n\n___\n\n### isTaxIncluded\n\n• **isTaxIncluded**: `boolean`\n\n___\n\n### lineItems\n\n• **lineItems**: [`LineItemMap`](LineItemMap.md)\n\n___\n\n### manualDiscountTotal\n\n• **manualDiscountTotal**: `number`\n\n___\n\n### orderAmount\n\n• **orderAmount**: `number`\n\n___\n\n### orderAmountAsInteger\n\n• **orderAmountAsInteger**: `number`\n\n___\n\n### orderBasedAutoDiscountTotal\n\n• **orderBasedAutoDiscountTotal**: `number`\n\n___\n\n### orderId\n\n• **orderId**: `number`\n\n___\n\n### payments\n\n• `Optional` **payments**: [`OrderPayments`](../README.md#orderpayments)\n\n___\n\n### productAutoDiscountedSubtotal\n\n• **productAutoDiscountedSubtotal**: `number`\n\n___\n\n### shippingCostBeforeDiscount\n\n• **shippingCostBeforeDiscount**: `number`\n\n___\n\n### shippingCostTotal\n\n• **shippingCostTotal**: `number`\n\n___\n\n### status\n\n• **status**: `string`\n\n___\n\n### taxTotal\n\n• **taxTotal**: `number`\n\n___\n\n### taxes\n\n• **taxes**: [`Tax`](Tax.md)[]\n\n___\n\n### totalDiscount\n\n• **totalDiscount**: `number`\n"
  },
  {
    "path": "docs/interfaces/OrderBillingAddress.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / OrderBillingAddress\n\n# Interface: OrderBillingAddress\n\n## Hierarchy\n\n- [`Address`](Address.md)\n\n  ↳ **`OrderBillingAddress`**\n\n## Table of contents\n\n### Properties\n\n- [address1](OrderBillingAddress.md#address1)\n- [address2](OrderBillingAddress.md#address2)\n- [city](OrderBillingAddress.md#city)\n- [company](OrderBillingAddress.md#company)\n- [country](OrderBillingAddress.md#country)\n- [countryCode](OrderBillingAddress.md#countrycode)\n- [customFields](OrderBillingAddress.md#customfields)\n- [email](OrderBillingAddress.md#email)\n- [extraFields](OrderBillingAddress.md#extrafields)\n- [firstName](OrderBillingAddress.md#firstname)\n- [lastName](OrderBillingAddress.md#lastname)\n- [phone](OrderBillingAddress.md#phone)\n- [postalCode](OrderBillingAddress.md#postalcode)\n- [shouldSaveAddress](OrderBillingAddress.md#shouldsaveaddress)\n- [stateOrProvince](OrderBillingAddress.md#stateorprovince)\n- [stateOrProvinceCode](OrderBillingAddress.md#stateorprovincecode)\n\n## Properties\n\n### address1\n\n• **address1**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[address1](Address.md#address1)\n\n___\n\n### address2\n\n• **address2**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[address2](Address.md#address2)\n\n___\n\n### city\n\n• **city**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[city](Address.md#city)\n\n___\n\n### company\n\n• **company**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[company](Address.md#company)\n\n___\n\n### country\n\n• **country**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[country](Address.md#country)\n\n___\n\n### countryCode\n\n• **countryCode**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[countryCode](Address.md#countrycode)\n\n___\n\n### customFields\n\n• **customFields**: \\{ `fieldId`: `string` ; `fieldValue`: `string` \\| `number` \\| `string`[]  }[]\n\n#### Inherited from\n\n[Address](Address.md).[customFields](Address.md#customfields)\n\n___\n\n### email\n\n• `Optional` **email**: `string`\n\n___\n\n### extraFields\n\n• `Optional` **extraFields**: [`AddressExtraFieldValue`](AddressExtraFieldValue.md)[]\n\n#### Inherited from\n\n[Address](Address.md).[extraFields](Address.md#extrafields)\n\n___\n\n### firstName\n\n• **firstName**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[firstName](Address.md#firstname)\n\n___\n\n### lastName\n\n• **lastName**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[lastName](Address.md#lastname)\n\n___\n\n### phone\n\n• **phone**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[phone](Address.md#phone)\n\n___\n\n### postalCode\n\n• **postalCode**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[postalCode](Address.md#postalcode)\n\n___\n\n### shouldSaveAddress\n\n• `Optional` **shouldSaveAddress**: `boolean`\n\n#### Inherited from\n\n[Address](Address.md).[shouldSaveAddress](Address.md#shouldsaveaddress)\n\n___\n\n### stateOrProvince\n\n• **stateOrProvince**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[stateOrProvince](Address.md#stateorprovince)\n\n___\n\n### stateOrProvinceCode\n\n• **stateOrProvinceCode**: `string`\n\n#### Inherited from\n\n[Address](Address.md).[stateOrProvinceCode](Address.md#stateorprovincecode)\n"
  },
  {
    "path": "docs/interfaces/OrderBillingAddressSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / OrderBillingAddressSelector\n\n# Interface: OrderBillingAddressSelector\n\n## Table of contents\n\n### Methods\n\n- [getOrderBillingAddress](OrderBillingAddressSelector.md#getorderbillingaddress)\n\n## Methods\n\n### getOrderBillingAddress\n\n▸ **getOrderBillingAddress**(): `undefined` \\| [`OrderBillingAddress`](OrderBillingAddress.md)\n\n#### Returns\n\n`undefined` \\| [`OrderBillingAddress`](OrderBillingAddress.md)\n"
  },
  {
    "path": "docs/interfaces/OrderConsignment.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / OrderConsignment\n\n# Interface: OrderConsignment\n\n## Table of contents\n\n### Properties\n\n- [shipping](OrderConsignment.md#shipping)\n\n## Properties\n\n### shipping\n\n• **shipping**: [`OrderShippingConsignment`](OrderShippingConsignment.md)[]\n"
  },
  {
    "path": "docs/interfaces/OrderFee.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / OrderFee\n\n# Interface: OrderFee\n\n## Table of contents\n\n### Properties\n\n- [cost](OrderFee.md#cost)\n- [customerDisplayName](OrderFee.md#customerdisplayname)\n- [id](OrderFee.md#id)\n- [source](OrderFee.md#source)\n- [type](OrderFee.md#type)\n\n## Properties\n\n### cost\n\n• **cost**: `number`\n\n___\n\n### customerDisplayName\n\n• **customerDisplayName**: `string`\n\n___\n\n### id\n\n• **id**: `number`\n\n___\n\n### source\n\n• **source**: `string`\n\n___\n\n### type\n\n• **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/OrderFinalizeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / OrderFinalizeOptions\n\n# Interface: OrderFinalizeOptions\n\nA set of options for configuring an asynchronous request.\n\n## Hierarchy\n\n- [`RequestOptions`](RequestOptions.md)\n\n  ↳ **`OrderFinalizeOptions`**\n\n## Table of contents\n\n### Properties\n\n- [integrations](OrderFinalizeOptions.md#integrations)\n- [params](OrderFinalizeOptions.md#params)\n- [timeout](OrderFinalizeOptions.md#timeout)\n- [version](OrderFinalizeOptions.md#version)\n\n## Properties\n\n### integrations\n\n• `Optional` **integrations**: `PaymentStrategyFactory`\\<`default`\\>[]\n\n___\n\n### params\n\n• `Optional` **params**: `object`\n\nThe parameters of the request, if required.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[params](RequestOptions.md#params)\n\n___\n\n### timeout\n\n• `Optional` **timeout**: `default`\n\nProvide this option if you want to cancel or time out the request. If the\r\ntimeout object completes before the request, the request will be\r\ncancelled.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[timeout](RequestOptions.md#timeout)\n\n___\n\n### version\n\n• `Optional` **version**: `number`\n\nThe version of the checkout, used for optimistic concurrency control.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[version](RequestOptions.md#version)\n"
  },
  {
    "path": "docs/interfaces/OrderMetaState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / OrderMetaState\n\n# Interface: OrderMetaState\n\n## Hierarchy\n\n- [`InternalOrderMeta`](InternalOrderMeta.md)\n\n  ↳ **`OrderMetaState`**\n\n## Table of contents\n\n### Properties\n\n- [callbackUrl](OrderMetaState.md#callbackurl)\n- [deviceFingerprint](OrderMetaState.md#devicefingerprint)\n- [orderToken](OrderMetaState.md#ordertoken)\n- [payment](OrderMetaState.md#payment)\n- [token](OrderMetaState.md#token)\n\n## Properties\n\n### callbackUrl\n\n• `Optional` **callbackUrl**: `string`\n\n___\n\n### deviceFingerprint\n\n• `Optional` **deviceFingerprint**: `string`\n\n#### Inherited from\n\n[InternalOrderMeta](InternalOrderMeta.md).[deviceFingerprint](InternalOrderMeta.md#devicefingerprint)\n\n___\n\n### orderToken\n\n• `Optional` **orderToken**: `string`\n\n___\n\n### payment\n\n• `Optional` **payment**: [`InternalOrderPayment`](InternalOrderPayment.md)\n\n___\n\n### token\n\n• `Optional` **token**: `string`\n"
  },
  {
    "path": "docs/interfaces/OrderPayment.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / OrderPayment\n\n# Interface: OrderPayment\n\n## Hierarchy\n\n- **`OrderPayment`**\n\n  ↳ [`GatewayOrderPayment`](GatewayOrderPayment.md)\n\n  ↳ [`GiftCertificateOrderPayment`](GiftCertificateOrderPayment.md)\n\n## Table of contents\n\n### Properties\n\n- [amount](OrderPayment.md#amount)\n- [description](OrderPayment.md#description)\n- [gatewayId](OrderPayment.md#gatewayid)\n- [methodId](OrderPayment.md#methodid)\n- [paymentId](OrderPayment.md#paymentid)\n- [providerId](OrderPayment.md#providerid)\n\n## Properties\n\n### amount\n\n• **amount**: `number`\n\n___\n\n### description\n\n• **description**: `string`\n\n___\n\n### gatewayId\n\n• `Optional` **gatewayId**: `string`\n\n___\n\n### methodId\n\n• `Optional` **methodId**: `string`\n\n___\n\n### paymentId\n\n• `Optional` **paymentId**: `string`\n\n___\n\n### providerId\n\n• **providerId**: `string`\n"
  },
  {
    "path": "docs/interfaces/OrderPaymentRequestBody.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / OrderPaymentRequestBody\n\n# Interface: OrderPaymentRequestBody\n\nAn object that contains the payment information required for submitting an\r\norder.\n\n## Table of contents\n\n### Properties\n\n- [gatewayId](OrderPaymentRequestBody.md#gatewayid)\n- [methodId](OrderPaymentRequestBody.md#methodid)\n- [paymentData](OrderPaymentRequestBody.md#paymentdata)\n\n## Properties\n\n### gatewayId\n\n• `Optional` **gatewayId**: `string`\n\nThe identifier of the payment provider that is chosen for the order.\n\n___\n\n### methodId\n\n• **methodId**: `string`\n\nThe identifier of the payment method that is chosen for the order.\n\n___\n\n### paymentData\n\n• `Optional` **paymentData**: [`OrderPaymentInstrument`](../README.md#orderpaymentinstrument)\n\nAn object that contains the details of a credit card, vaulted payment\r\ninstrument or nonce instrument.\n"
  },
  {
    "path": "docs/interfaces/OrderRequestBody.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / OrderRequestBody\n\n# Interface: OrderRequestBody\n\nAn object that contains the information required for submitting an order.\n\n## Table of contents\n\n### Properties\n\n- [payment](OrderRequestBody.md#payment)\n- [useStoreCredit](OrderRequestBody.md#usestorecredit)\n\n## Properties\n\n### payment\n\n• `Optional` **payment**: [`OrderPaymentRequestBody`](OrderPaymentRequestBody.md)\n\nAn object that contains the payment details of a customer. In some cases,\r\nyou can omit this object if the order does not require further payment.\r\nFor example, the customer is able to use their store credit to pay for\r\nthe entire order. Or they have already submitted their payment details\r\nusing PayPal.\n\n___\n\n### useStoreCredit\n\n• `Optional` **useStoreCredit**: `boolean`\n\nIf true, apply the store credit of the customer to the order. It only\r\nworks if the customer has previously signed in.\n"
  },
  {
    "path": "docs/interfaces/OrderSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / OrderSelector\n\n# Interface: OrderSelector\n\n## Table of contents\n\n### Methods\n\n- [getLoadError](OrderSelector.md#getloaderror)\n- [getOrder](OrderSelector.md#getorder)\n- [getOrderMeta](OrderSelector.md#getordermeta)\n- [getOrderOrThrow](OrderSelector.md#getorderorthrow)\n- [getPaymentId](OrderSelector.md#getpaymentid)\n- [isLoading](OrderSelector.md#isloading)\n\n## Methods\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getOrder\n\n▸ **getOrder**(): `undefined` \\| [`Order`](Order.md)\n\n#### Returns\n\n`undefined` \\| [`Order`](Order.md)\n\n___\n\n### getOrderMeta\n\n▸ **getOrderMeta**(): `undefined` \\| [`OrderMetaState`](OrderMetaState.md)\n\n#### Returns\n\n`undefined` \\| [`OrderMetaState`](OrderMetaState.md)\n\n___\n\n### getOrderOrThrow\n\n▸ **getOrderOrThrow**(): [`Order`](Order.md)\n\n#### Returns\n\n[`Order`](Order.md)\n\n___\n\n### getPaymentId\n\n▸ **getPaymentId**(`methodId`): `undefined` \\| `string`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId` | `string` |\n\n#### Returns\n\n`undefined` \\| `string`\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/OrderShippingConsignment.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / OrderShippingConsignment\n\n# Interface: OrderShippingConsignment\n\n## Table of contents\n\n### Properties\n\n- [address1](OrderShippingConsignment.md#address1)\n- [address2](OrderShippingConsignment.md#address2)\n- [baseCost](OrderShippingConsignment.md#basecost)\n- [baseHandlingCost](OrderShippingConsignment.md#basehandlingcost)\n- [city](OrderShippingConsignment.md#city)\n- [company](OrderShippingConsignment.md#company)\n- [costExTax](OrderShippingConsignment.md#costextax)\n- [costIncTax](OrderShippingConsignment.md#costinctax)\n- [costTax](OrderShippingConsignment.md#costtax)\n- [costTaxClassId](OrderShippingConsignment.md#costtaxclassid)\n- [country](OrderShippingConsignment.md#country)\n- [countryCode](OrderShippingConsignment.md#countrycode)\n- [customFields](OrderShippingConsignment.md#customfields)\n- [discounts](OrderShippingConsignment.md#discounts)\n- [email](OrderShippingConsignment.md#email)\n- [firstName](OrderShippingConsignment.md#firstname)\n- [handlingCostExTax](OrderShippingConsignment.md#handlingcostextax)\n- [handlingCostIncTax](OrderShippingConsignment.md#handlingcostinctax)\n- [handlingCostTax](OrderShippingConsignment.md#handlingcosttax)\n- [handlingCostTaxClassId](OrderShippingConsignment.md#handlingcosttaxclassid)\n- [itemsShipped](OrderShippingConsignment.md#itemsshipped)\n- [itemsTotal](OrderShippingConsignment.md#itemstotal)\n- [lastName](OrderShippingConsignment.md#lastname)\n- [lineItems](OrderShippingConsignment.md#lineitems)\n- [phone](OrderShippingConsignment.md#phone)\n- [postalCode](OrderShippingConsignment.md#postalcode)\n- [shippingAddressId](OrderShippingConsignment.md#shippingaddressid)\n- [shippingMethod](OrderShippingConsignment.md#shippingmethod)\n- [shippingZoneId](OrderShippingConsignment.md#shippingzoneid)\n- [shippingZoneName](OrderShippingConsignment.md#shippingzonename)\n- [stateOrProvince](OrderShippingConsignment.md#stateorprovince)\n\n## Properties\n\n### address1\n\n• **address1**: `string`\n\n___\n\n### address2\n\n• **address2**: `string`\n\n___\n\n### baseCost\n\n• **baseCost**: `number`\n\n___\n\n### baseHandlingCost\n\n• **baseHandlingCost**: `number`\n\n___\n\n### city\n\n• **city**: `string`\n\n___\n\n### company\n\n• **company**: `string`\n\n___\n\n### costExTax\n\n• **costExTax**: `number`\n\n___\n\n### costIncTax\n\n• **costIncTax**: `number`\n\n___\n\n### costTax\n\n• **costTax**: `number`\n\n___\n\n### costTaxClassId\n\n• **costTaxClassId**: `number`\n\n___\n\n### country\n\n• **country**: `string`\n\n___\n\n### countryCode\n\n• **countryCode**: `string`\n\n___\n\n### customFields\n\n• **customFields**: \\{ `name`: `string` ; `value`: ``null`` \\| `string`  }[]\n\n___\n\n### discounts\n\n• **discounts**: [`OrderShippingConsignmentDiscount`](OrderShippingConsignmentDiscount.md)[]\n\n___\n\n### email\n\n• **email**: `string`\n\n___\n\n### firstName\n\n• **firstName**: `string`\n\n___\n\n### handlingCostExTax\n\n• **handlingCostExTax**: `number`\n\n___\n\n### handlingCostIncTax\n\n• **handlingCostIncTax**: `number`\n\n___\n\n### handlingCostTax\n\n• **handlingCostTax**: `number`\n\n___\n\n### handlingCostTaxClassId\n\n• **handlingCostTaxClassId**: `number`\n\n___\n\n### itemsShipped\n\n• **itemsShipped**: `number`\n\n___\n\n### itemsTotal\n\n• **itemsTotal**: `number`\n\n___\n\n### lastName\n\n• **lastName**: `string`\n\n___\n\n### lineItems\n\n• **lineItems**: \\{ `id`: `number`  }[]\n\n___\n\n### phone\n\n• **phone**: `string`\n\n___\n\n### postalCode\n\n• **postalCode**: `string`\n\n___\n\n### shippingAddressId\n\n• **shippingAddressId**: `number`\n\n___\n\n### shippingMethod\n\n• **shippingMethod**: `string`\n\n___\n\n### shippingZoneId\n\n• **shippingZoneId**: `number`\n\n___\n\n### shippingZoneName\n\n• **shippingZoneName**: `string`\n\n___\n\n### stateOrProvince\n\n• **stateOrProvince**: `string`\n"
  },
  {
    "path": "docs/interfaces/OrderShippingConsignmentDiscount.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / OrderShippingConsignmentDiscount\n\n# Interface: OrderShippingConsignmentDiscount\n\n## Table of contents\n\n### Properties\n\n- [amount](OrderShippingConsignmentDiscount.md#amount)\n- [code](OrderShippingConsignmentDiscount.md#code)\n- [id](OrderShippingConsignmentDiscount.md#id)\n\n## Properties\n\n### amount\n\n• **amount**: `number`\n\n___\n\n### code\n\n• **code**: ``null`` \\| `string`\n\n___\n\n### id\n\n• **id**: `number`\n"
  },
  {
    "path": "docs/interfaces/PasswordRequirements.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PasswordRequirements\n\n# Interface: PasswordRequirements\n\n## Table of contents\n\n### Properties\n\n- [alpha](PasswordRequirements.md#alpha)\n- [error](PasswordRequirements.md#error)\n- [minlength](PasswordRequirements.md#minlength)\n- [numeric](PasswordRequirements.md#numeric)\n\n## Properties\n\n### alpha\n\n• **alpha**: `string`\n\n___\n\n### error\n\n• **error**: `string`\n\n___\n\n### minlength\n\n• **minlength**: `number`\n\n___\n\n### numeric\n\n• **numeric**: `string`\n"
  },
  {
    "path": "docs/interfaces/PayPalButtonStyleOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalButtonStyleOptions\n\n# Interface: PayPalButtonStyleOptions\n\n## Table of contents\n\n### Properties\n\n- [color](PayPalButtonStyleOptions.md#color)\n- [height](PayPalButtonStyleOptions.md#height)\n- [label](PayPalButtonStyleOptions.md#label)\n- [shape](PayPalButtonStyleOptions.md#shape)\n\n## Properties\n\n### color\n\n• `Optional` **color**: [`StyleButtonColor`](../enums/StyleButtonColor.md)\n\n___\n\n### height\n\n• `Optional` **height**: `number`\n\n___\n\n### label\n\n• `Optional` **label**: [`StyleButtonLabel`](../enums/StyleButtonLabel.md)\n\n___\n\n### shape\n\n• `Optional` **shape**: [`StyleButtonShape`](../enums/StyleButtonShape.md)\n"
  },
  {
    "path": "docs/interfaces/PayPalButtonStyleOptions_2.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalButtonStyleOptions\\_2\n\n# Interface: PayPalButtonStyleOptions\\_2\n\n## Table of contents\n\n### Properties\n\n- [color](PayPalButtonStyleOptions_2.md#color)\n- [height](PayPalButtonStyleOptions_2.md#height)\n- [label](PayPalButtonStyleOptions_2.md#label)\n- [shape](PayPalButtonStyleOptions_2.md#shape)\n\n## Properties\n\n### color\n\n• `Optional` **color**: [`StyleButtonColor_2`](../enums/StyleButtonColor_2.md)\n\n___\n\n### height\n\n• `Optional` **height**: `number`\n\n___\n\n### label\n\n• `Optional` **label**: [`StyleButtonLabel_2`](../enums/StyleButtonLabel_2.md)\n\n___\n\n### shape\n\n• `Optional` **shape**: [`StyleButtonShape_3`](../enums/StyleButtonShape_3.md)\n"
  },
  {
    "path": "docs/interfaces/PayPalBuyNowInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalBuyNowInitializeOptions\n\n# Interface: PayPalBuyNowInitializeOptions\n\nBigCommerce Payments BuyNow\n\n## Table of contents\n\n### Methods\n\n- [getBuyNowCartRequestBody](PayPalBuyNowInitializeOptions.md#getbuynowcartrequestbody)\n\n## Methods\n\n### getBuyNowCartRequestBody\n\n▸ **getBuyNowCartRequestBody**(): `default`\n\n#### Returns\n\n`default`\n"
  },
  {
    "path": "docs/interfaces/PayPalBuyNowInitializeOptions_2.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalBuyNowInitializeOptions\\_2\n\n# Interface: PayPalBuyNowInitializeOptions\\_2\n\nPayPal Commerce BuyNow\n\n## Table of contents\n\n### Methods\n\n- [getBuyNowCartRequestBody](PayPalBuyNowInitializeOptions_2.md#getbuynowcartrequestbody)\n\n## Methods\n\n### getBuyNowCartRequestBody\n\n▸ **getBuyNowCartRequestBody**(): `default`\n\n#### Returns\n\n`default`\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceAlternativeMethodsPaymentOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceAlternativeMethodsPaymentOptions\n\n# Interface: PayPalCommerceAlternativeMethodsPaymentOptions\n\nA set of options that are required to initialize the PayPal Commerce payment\r\nmethod for presenting its PayPal button.\n\nPlease note that the minimum version of checkout-sdk is 1.100\n\nAlso, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n```html\r\n<!-- This is where the PayPal button will be inserted -->\r\n<div id=\"container\"></div>\r\n<!-- This is where the PayPal alternative payment methods fields will be inserted.  -->\r\n<div id=\"apm-fields-container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    gatewayId: 'paypalcommercealternativemethods',\r\n    methodId: 'sepa',\r\n    paypalcommercealternativemethods: {\r\n        container: '#container',\r\n        apmFieldsContainer: '#apm-fields-container',\r\n        apmFieldsStyles: {\r\n            base: {\r\n                backgroundColor: 'transparent',\r\n            },\r\n            input: {\r\n                backgroundColor: 'white',\r\n                fontSize: '1rem',\r\n                color: '#333',\r\n                borderColor: '#d9d9d9',\r\n                borderRadius: '4px',\r\n                borderWidth: '1px',\r\n                padding: '1rem',\r\n            },\r\n            invalid: {\r\n                color: '#ed6a6a',\r\n            },\r\n            active: {\r\n                color: '#4496f6',\r\n            },\r\n        },\r\n        clientId: 'YOUR_CLIENT_ID',\r\n// Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n        submitForm: () => {\r\n        // Example function\r\n            this.submitOrder(\r\n               {\r\n                  payment: { methodId: 'paypalcommercealternativemethods', }\r\n              }\r\n           );\r\n        },\r\n// Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n        onValidate: (resolve, reject) => {\r\n        // Example function\r\n            const isValid = this.validatePaymentForm();\r\n            if (isValid) {\r\n                return resolve();\r\n            }\r\n            return reject();\r\n        },\r\n// Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n        onRenderButton: () => {\r\n        // Example function\r\n            this.hidePaymentSubmitButton();\r\n        }\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [apmFieldsContainer](PayPalCommerceAlternativeMethodsPaymentOptions.md#apmfieldscontainer)\n- [apmFieldsStyles](PayPalCommerceAlternativeMethodsPaymentOptions.md#apmfieldsstyles)\n- [container](PayPalCommerceAlternativeMethodsPaymentOptions.md#container)\n\n### Methods\n\n- [onError](PayPalCommerceAlternativeMethodsPaymentOptions.md#onerror)\n- [onInitButton](PayPalCommerceAlternativeMethodsPaymentOptions.md#oninitbutton)\n- [onRenderButton](PayPalCommerceAlternativeMethodsPaymentOptions.md#onrenderbutton)\n- [onValidate](PayPalCommerceAlternativeMethodsPaymentOptions.md#onvalidate)\n- [submitForm](PayPalCommerceAlternativeMethodsPaymentOptions.md#submitform)\n\n## Properties\n\n### apmFieldsContainer\n\n• `Optional` **apmFieldsContainer**: `string`\n\nThe CSS selector of a container where the alternative payment methods fields widget should be inserted into.\r\nIt's necessary to specify this parameter when using Alternative Payment Methods.\r\nWithout it alternative payment methods will not work.\n\n___\n\n### apmFieldsStyles\n\n• `Optional` **apmFieldsStyles**: [`PayPalCommerceFieldsStyleOptions`](PayPalCommerceFieldsStyleOptions.md)\n\nObject with styles to customize alternative payment methods fields.\n\n___\n\n### container\n\n• **container**: `string`\n\nThe CSS selector of a container where the payment widget should be inserted into.\n\n## Methods\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n#### Returns\n\n`void`\n\n___\n\n### onInitButton\n\n▸ **onInitButton**(`actions`): `Promise`\\<`void`\\>\n\nA callback that gets called\r\nwhen Smart Payment Button is initialized.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `actions` | [`InitCallbackActions_2`](InitCallbackActions_2.md) |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\n___\n\n### onRenderButton\n\n▸ **onRenderButton**(): `void`\n\nA callback right before render Smart Payment Button that gets called when\r\nSmart Payment Button is eligible. This callback can be used to hide the standard submit button.\n\n#### Returns\n\n`void`\n\n___\n\n### onValidate\n\n▸ **onValidate**(`resolve`, `reject`): `Promise`\\<`void`\\>\n\nA callback that gets called when a buyer click on Smart Payment Button\r\nand should validate payment form.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `resolve` | () => `void` | A function, that gets called if form is valid. |\n| `reject` | () => `void` | A function, that gets called if form is not valid. |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\nreject() or resolve()\n\n___\n\n### submitForm\n\n▸ **submitForm**(): `void`\n\nA callback for submitting payment form that gets called\r\nwhen buyer approved PayPal account.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceAnalyticTrackerService.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceAnalyticTrackerService\n\n# Interface: PayPalCommerceAnalyticTrackerService\n\n## Table of contents\n\n### Methods\n\n- [customerPaymentMethodExecuted](PayPalCommerceAnalyticTrackerService.md#customerpaymentmethodexecuted)\n- [paymentComplete](PayPalCommerceAnalyticTrackerService.md#paymentcomplete)\n- [selectedPaymentMethod](PayPalCommerceAnalyticTrackerService.md#selectedpaymentmethod)\n- [walletButtonClick](PayPalCommerceAnalyticTrackerService.md#walletbuttonclick)\n\n## Methods\n\n### customerPaymentMethodExecuted\n\n▸ **customerPaymentMethodExecuted**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### paymentComplete\n\n▸ **paymentComplete**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### selectedPaymentMethod\n\n▸ **selectedPaymentMethod**(`methodId`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId` | `string` |\n\n#### Returns\n\n`void`\n\n___\n\n### walletButtonClick\n\n▸ **walletButtonClick**(`methodId`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId` | `string` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceButtonInitializeOptions\n\n# Interface: PayPalCommerceButtonInitializeOptions\n\nA set of options that are required to initialize PayPalCommerce in cart or product details page.\n\nWhen PayPalCommerce is initialized, an PayPalCommerce button will be inserted into the\r\nDOM. When a customer clicks on it, it will trigger Apple sheet.\n\n## Table of contents\n\n### Properties\n\n- [buyNowInitializeOptions](PayPalCommerceButtonInitializeOptions.md#buynowinitializeoptions)\n- [currencyCode](PayPalCommerceButtonInitializeOptions.md#currencycode)\n- [style](PayPalCommerceButtonInitializeOptions.md#style)\n\n### Methods\n\n- [onComplete](PayPalCommerceButtonInitializeOptions.md#oncomplete)\n- [onEligibilityFailure](PayPalCommerceButtonInitializeOptions.md#oneligibilityfailure)\n\n## Properties\n\n### buyNowInitializeOptions\n\n• `Optional` **buyNowInitializeOptions**: [`PayPalBuyNowInitializeOptions_2`](PayPalBuyNowInitializeOptions_2.md)\n\nThe options that are required to initialize Buy Now functionality.\n\n___\n\n### currencyCode\n\n• `Optional` **currencyCode**: `string`\n\nThe option that used to initialize a PayPal script with provided currency code.\n\n___\n\n### style\n\n• `Optional` **style**: [`PayPalButtonStyleOptions_2`](PayPalButtonStyleOptions_2.md)\n\nA set of styling options for the checkout button.\n\n## Methods\n\n### onComplete\n\n▸ **onComplete**(): `void`\n\nA callback that gets called when payment complete on paypal side.\n\n#### Returns\n\n`void`\n\n___\n\n### onEligibilityFailure\n\n▸ **onEligibilityFailure**(): `void`\n\nA callback that gets called when PayPal SDK restricts to render PayPal component.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceCreditButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceCreditButtonInitializeOptions\n\n# Interface: PayPalCommerceCreditButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [buyNowInitializeOptions](PayPalCommerceCreditButtonInitializeOptions.md#buynowinitializeoptions)\n- [currencyCode](PayPalCommerceCreditButtonInitializeOptions.md#currencycode)\n- [style](PayPalCommerceCreditButtonInitializeOptions.md#style)\n\n### Methods\n\n- [onComplete](PayPalCommerceCreditButtonInitializeOptions.md#oncomplete)\n- [onEligibilityFailure](PayPalCommerceCreditButtonInitializeOptions.md#oneligibilityfailure)\n\n## Properties\n\n### buyNowInitializeOptions\n\n• `Optional` **buyNowInitializeOptions**: [`PayPalBuyNowInitializeOptions_2`](PayPalBuyNowInitializeOptions_2.md)\n\nThe options that are required to initialize Buy Now functionality.\n\n___\n\n### currencyCode\n\n• `Optional` **currencyCode**: `string`\n\nThe option that used to initialize a PayPal script with provided currency code.\n\n___\n\n### style\n\n• `Optional` **style**: [`PayPalButtonStyleOptions_2`](PayPalButtonStyleOptions_2.md)\n\nA set of styling options for the checkout button.\n\n## Methods\n\n### onComplete\n\n▸ **onComplete**(): `void`\n\nA callback that gets called when payment complete on paypal side.\n\n#### Returns\n\n`void`\n\n___\n\n### onEligibilityFailure\n\n▸ **onEligibilityFailure**(): `void`\n\nA callback that gets called when PayPal SDK restricts to render PayPal component.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceCreditCardsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceCreditCardsPaymentInitializeOptions\n\n# Interface: PayPalCommerceCreditCardsPaymentInitializeOptions\n\nA set of options that are required to initialize the PayPal Commerce payment\r\nmethod for presenting its credit card form.\n\n```html\r\n<!-- These containers are where the hosted (iframed) credit card fields will be inserted -->\r\n<div id=\"card-number\"></div>\r\n<div id=\"card-name\"></div>\r\n<div id=\"card-expiry\"></div>\r\n<div id=\"card-code\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'paypalcommercecreditcard',\r\n    paypalcommercecreditcard: {\r\n        form: {\r\n            fields: {\r\n                cardNumber: { containerId: 'card-number' },\r\n                cardName: { containerId: 'card-name' },\r\n                cardExpiry: { containerId: 'card-expiry' },\r\n                cardCode: { containerId: 'card-code' },\r\n            },\r\n        },\r\n        onCreditCardFieldsRenderingError: (error) => handleError(error),\r\n    },\r\n});\r\n```\n\nAdditional options can be passed in to customize the fields and register\r\nevent callbacks.\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'paypalcommercecreditcard',\r\n    paypalcommercecreditcard: {\r\n        form: {\r\n            fields: {\r\n                cardNumber: { containerId: 'card-number', placeholder: 'Number of card' },\r\n                cardName: { containerId: 'card-name', placeholder: 'Name of card' },\r\n                cardExpiry: { containerId: 'card-expiry', placeholder: 'Expiry of card' },\r\n                cardCode: { containerId: 'card-code', placeholder: 'Code of card' },\r\n            },\r\n            styles: {\r\n                default: {\r\n                    color: '#000',\r\n                },\r\n                error: {\r\n                    color: '#f00',\r\n                },\r\n                focus: {\r\n                    color: '#0f0',\r\n                },\r\n            },\r\n            onBlur({ fieldType }) {\r\n                console.log(fieldType);\r\n            },\r\n            onFocus({ fieldType }) {\r\n                console.log(fieldType);\r\n            },\r\n            onEnter({ fieldType }) {\r\n                console.log(fieldType);\r\n            },\r\n            onCardTypeChange({ cardType }) {\r\n                console.log(cardType);\r\n            },\r\n            onValidate({ errors, isValid }) {\r\n                console.log(errors);\r\n                console.log(isValid);\r\n            },\r\n        },\r\n        onCreditCardFieldsRenderingError: (error) => handleError(error),\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [form](PayPalCommerceCreditCardsPaymentInitializeOptions.md#form)\n- [onCreditCardFieldsRenderingError](PayPalCommerceCreditCardsPaymentInitializeOptions.md#oncreditcardfieldsrenderingerror)\n- [onLoadComplete](PayPalCommerceCreditCardsPaymentInitializeOptions.md#onloadcomplete)\n\n## Properties\n\n### form\n\n• **form**: `default`\n\nThe form is data for Credit Card Form\n\n___\n\n### onCreditCardFieldsRenderingError\n\n• `Optional` **onCreditCardFieldsRenderingError**: (`error`: `unknown`) => `void`\n\nThe callback that gets called when there is an issue with rendering credit card fields\n\n#### Type declaration\n\n▸ (`error`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n##### Returns\n\n`void`\n\n___\n\n### onLoadComplete\n\n• `Optional` **onLoadComplete**: () => `void`\n\nThe callback that gets called when PayPal SDK load complete\n\n#### Type declaration\n\n▸ (): `void`\n\n##### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceCreditCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceCreditCustomerInitializeOptions\n\n# Interface: PayPalCommerceCreditCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [container](PayPalCommerceCreditCustomerInitializeOptions.md#container)\n\n### Methods\n\n- [onClick](PayPalCommerceCreditCustomerInitializeOptions.md#onclick)\n- [onComplete](PayPalCommerceCreditCustomerInitializeOptions.md#oncomplete)\n- [onError](PayPalCommerceCreditCustomerInitializeOptions.md#onerror)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe ID of a container which the checkout button should be inserted into.\n\n## Methods\n\n### onClick\n\n▸ **onClick**(): `void`\n\nA callback that gets called when paypal button clicked.\n\n#### Returns\n\n`void`\n\n___\n\n### onComplete\n\n▸ **onComplete**(): `void`\n\nA callback that gets called when payment complete on paypal side.\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error?`): `void`\n\nA callback that gets called if unable to initialize the widget or select\r\none of the address options provided by the widget.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error?` | `Error` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceCreditPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceCreditPaymentInitializeOptions\n\n# Interface: PayPalCommerceCreditPaymentInitializeOptions\n\nA set of options that are required to initialize the PayPal Commerce payment\r\nmethod for presenting its PayPal button.\n\nPlease note that the minimum version of checkout-sdk is 1.100\n\nAlso, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n```html\r\n<!-- This is where the PayPal button will be inserted -->\r\n<div id=\"container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'paypalcommercecredit',\r\n    paypalcommercecredit: {\r\n        container: '#container',\r\n// Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n        submitForm: () => {\r\n        // Example function\r\n            this.submitOrder(\r\n               {\r\n                  payment: { methodId: 'paypalcommercecredit', }\r\n              }\r\n           );\r\n        },\r\n// Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n        onValidate: (resolve, reject) => {\r\n        // Example function\r\n            const isValid = this.validatePaymentForm();\r\n            if (isValid) {\r\n                return resolve();\r\n            }\r\n            return reject();\r\n        },\r\n// Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n        onRenderButton: () => {\r\n        // Example function\r\n            this.hidePaymentSubmitButton();\r\n        }\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [bannerContainerId](PayPalCommerceCreditPaymentInitializeOptions.md#bannercontainerid)\n- [container](PayPalCommerceCreditPaymentInitializeOptions.md#container)\n\n### Methods\n\n- [onError](PayPalCommerceCreditPaymentInitializeOptions.md#onerror)\n- [onRenderButton](PayPalCommerceCreditPaymentInitializeOptions.md#onrenderbutton)\n- [onValidate](PayPalCommerceCreditPaymentInitializeOptions.md#onvalidate)\n- [submitForm](PayPalCommerceCreditPaymentInitializeOptions.md#submitform)\n\n## Properties\n\n### bannerContainerId\n\n• `Optional` **bannerContainerId**: `string`\n\nThe location to insert the Pay Later Messages.\n\n___\n\n### container\n\n• `Optional` **container**: `string`\n\nThe CSS selector of a container where the payment widget should be inserted into.\n\n## Methods\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `Error` |\n\n#### Returns\n\n`void`\n\n___\n\n### onRenderButton\n\n▸ **onRenderButton**(): `void`\n\nA callback right before render Smart Payment Button that gets called when\r\nSmart Payment Button is eligible. This callback can be used to hide the standard submit button.\n\n#### Returns\n\n`void`\n\n___\n\n### onValidate\n\n▸ **onValidate**(`resolve`, `reject`): `Promise`\\<`void`\\>\n\nA callback that gets called when a buyer click on Smart Payment Button\r\nand should validate payment form.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `resolve` | () => `void` | A function, that gets called if form is valid. |\n| `reject` | () => `void` | A function, that gets called if form is not valid. |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\nreject() or resolve()\n\n___\n\n### submitForm\n\n▸ **submitForm**(): `void`\n\nA callback for submitting payment form that gets called\r\nwhen buyer approved PayPal account.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceCustomerInitializeOptions\n\n# Interface: PayPalCommerceCustomerInitializeOptions\n\nA set of options that are required to initialize the customer step of\r\ncheckout to support PayPalCommerce.\n\n## Table of contents\n\n### Properties\n\n- [container](PayPalCommerceCustomerInitializeOptions.md#container)\n\n### Methods\n\n- [onClick](PayPalCommerceCustomerInitializeOptions.md#onclick)\n- [onComplete](PayPalCommerceCustomerInitializeOptions.md#oncomplete)\n- [onError](PayPalCommerceCustomerInitializeOptions.md#onerror)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe ID of a container which the checkout button should be inserted into.\n\n## Methods\n\n### onClick\n\n▸ **onClick**(): `void`\n\nA callback that gets called when paypal button clicked.\n\n#### Returns\n\n`void`\n\n___\n\n### onComplete\n\n▸ **onComplete**(): `void`\n\nA callback that gets called when payment complete on paypal side.\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error?`): `void`\n\nA callback that gets called if unable to initialize the widget or select\r\none of the address options provided by the widget.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error?` | `Error` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceFastlaneCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceFastlaneCustomerInitializeOptions\n\n# Interface: PayPalCommerceFastlaneCustomerInitializeOptions\n\nA set of options that are optional to initialize the PayPalCommerce Fastlane customer strategy\r\nthat are responsible for PayPalCommerce Fastlane components styling and initialization\n\n```js\r\nservice.initializeCustomer({\r\n    methodId: 'paypalcommerceacceleratedcheckout', // PayPalCommerce Fastlane has 'paypalcommerceacceleratedcheckout' method id\r\n    paypalcommercefastlane: {\r\n        styles: {\r\n             root: {\r\n                 backgroundColorPrimary: 'transparent',\r\n                 errorColor: '#C40B0B',\r\n                 fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n             },\r\n             input: {\r\n                 borderRadius: '0.25rem',\r\n                 borderColor: '#9E9E9E',\r\n                 focusBorderColor: '#4496F6',\r\n             },\r\n             toggle: {\r\n                 colorPrimary: '#0F005E',\r\n                 colorSecondary: '#ffffff',\r\n             },\r\n             text: {\r\n                 body: {\r\n                     color: '#222222',\r\n                     fontSize: '1rem',\r\n                 },\r\n                 caption: {\r\n                     color: '#515151',\r\n                     fontSize: '0.875rem',\r\n                 },\r\n             },\r\n             branding: 'light',\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [styles](PayPalCommerceFastlaneCustomerInitializeOptions.md#styles)\n\n## Properties\n\n### styles\n\n• `Optional` **styles**: `PayPalFastlaneStylesOption`\n\nIs a stylisation options for customizing PayPal Fastlane components\n\nNote: the styles for all PayPalCommerce Fastlane strategies should be the same,\r\nbecause they will be provided to PayPal library only for the first strategy initialization\r\nno matter which strategy was initialised first\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceFastlanePaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceFastlanePaymentInitializeOptions\n\n# Interface: PayPalCommerceFastlanePaymentInitializeOptions\n\nA set of options that are required to initialize the PayPalCommerce Accelerated Checkout payment\r\nmethod for presenting on the page.\n\nAlso, PayPalCommerce requires specific options to initialize PayPal Fastlane Card Component\r\n```html\r\n<!-- This is where the PayPal Fastlane Card Component will be inserted -->\r\n<div id=\"container\"></div>\r\n```\r\n```js\r\nservice.initializePayment({\r\n    methodId: 'paypalcommerceacceleratedcheckout', // PayPal Fastlane has 'paypalcommerceacceleratedcheckout' method id\r\n    paypalcommercefastlane: {\r\n        onInit: (renderPayPalCardComponent) => renderPayPalCardComponent('#container-id'),\r\n        onChange: (showPayPalCardSelector) => showPayPalCardSelector(),\r\n        styles: {\r\n             root: {\r\n                 backgroundColorPrimary: 'transparent',\r\n                 errorColor: '#C40B0B',\r\n                 fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\r\n             },\r\n             input: {\r\n                 borderRadius: '0.25rem',\r\n                 borderColor: '#9E9E9E',\r\n                 focusBorderColor: '#4496F6',\r\n             },\r\n             toggle: {\r\n                 colorPrimary: '#0F005E',\r\n                 colorSecondary: '#ffffff',\r\n             },\r\n             text: {\r\n                 body: {\r\n                     color: '#222222',\r\n                     fontSize: '1rem',\r\n                 },\r\n                 caption: {\r\n                     color: '#515151',\r\n                     fontSize: '0.875rem',\r\n                 },\r\n             },\r\n             branding: 'light',\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [onChange](PayPalCommerceFastlanePaymentInitializeOptions.md#onchange)\n- [onError](PayPalCommerceFastlanePaymentInitializeOptions.md#onerror)\n- [onInit](PayPalCommerceFastlanePaymentInitializeOptions.md#oninit)\n- [styles](PayPalCommerceFastlanePaymentInitializeOptions.md#styles)\n\n## Properties\n\n### onChange\n\n• `Optional` **onChange**: (`showPayPalCardSelector`: () => `Promise`\\<`undefined` \\| `CardInstrument`\\>) => `void`\n\nIs a callback that shows PayPal stored instruments\r\nwhen get triggered\n\n#### Type declaration\n\n▸ (`showPayPalCardSelector`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `showPayPalCardSelector` | () => `Promise`\\<`undefined` \\| `CardInstrument`\\> |\n\n##### Returns\n\n`void`\n\n___\n\n### onError\n\n• `Optional` **onError**: (`error`: `unknown`) => `void`\n\nCallback that handles errors\n\n#### Type declaration\n\n▸ (`error`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n##### Returns\n\n`void`\n\n___\n\n### onInit\n\n• `Optional` **onInit**: (`renderPayPalCardComponent`: (`container`: `string`) => `void`) => `void`\n\nIs a callback that takes the CSS selector of a container\r\nwhere the PayPal Fastlane form should be inserted into.\n\n#### Type declaration\n\n▸ (`renderPayPalCardComponent`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `renderPayPalCardComponent` | (`container`: `string`) => `void` |\n\n##### Returns\n\n`void`\n\n___\n\n### styles\n\n• `Optional` **styles**: `PayPalFastlaneStylesOption`\n\nIs a stylisation options for customizing PayPal Fastlane components\n\nNote: the styles for all PayPalCommerceFastlane strategies should be the same,\r\nbecause they will be provided to PayPal library only for the first strategy initialization\r\nno matter what strategy was initialised first\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceFastlaneShippingInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceFastlaneShippingInitializeOptions\n\n# Interface: PayPalCommerceFastlaneShippingInitializeOptions\n\nA set of options that are required to initialize the shipping step of\r\ncheckout in order to support PayPal Commerce Fastlane.\n\n## Table of contents\n\n### Properties\n\n- [onPayPalFastlaneAddressChange](PayPalCommerceFastlaneShippingInitializeOptions.md#onpaypalfastlaneaddresschange)\n- [styles](PayPalCommerceFastlaneShippingInitializeOptions.md#styles)\n\n## Properties\n\n### onPayPalFastlaneAddressChange\n\n• `Optional` **onPayPalFastlaneAddressChange**: (`showPayPalFastlaneAddressSelector`: () => `Promise`\\<`undefined` \\| `CustomerAddress`\\>) => `void`\n\nIs a callback that shows PayPal Fastlane popup with customer addresses\r\nwhen get triggered\n\n#### Type declaration\n\n▸ (`showPayPalFastlaneAddressSelector`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `showPayPalFastlaneAddressSelector` | () => `Promise`\\<`undefined` \\| `CustomerAddress`\\> |\n\n##### Returns\n\n`void`\n\n___\n\n### styles\n\n• `Optional` **styles**: `PayPalFastlaneStylesOption`\n\nIs a stylisation options for customizing PayPal Fastlane components\n\nNote: the styles for all PayPal Commerce Fastlane strategies should be the same,\r\nbecause they will be provided to PayPal library only for the first strategy initialization\r\nno matter what strategy was initialised first\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceFieldsStyleOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceFieldsStyleOptions\n\n# Interface: PayPalCommerceFieldsStyleOptions\n\n## Table of contents\n\n### Properties\n\n- [rules](PayPalCommerceFieldsStyleOptions.md#rules)\n- [variables](PayPalCommerceFieldsStyleOptions.md#variables)\n\n## Properties\n\n### rules\n\n• `Optional` **rules**: `Object`\n\n#### Index signature\n\n▪ [key: `string`]: `any`\n\n___\n\n### variables\n\n• `Optional` **variables**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `borderColor?` | `string` |\n| `borderFocusColor?` | `string` |\n| `borderRadius?` | `string` |\n| `borderWidth?` | `string` |\n| `colorBackground?` | `string` |\n| `colorDanger?` | `string` |\n| `colorInfo?` | `string` |\n| `colorTextPlaceholder?` | `string` |\n| `fontFamily?` | `string` |\n| `fontSizeBase?` | `string` |\n| `fontSizeLg?` | `string` |\n| `fontSizeM?` | `string` |\n| `fontSizeSm?` | `string` |\n| `spacingUnit?` | `string` |\n| `textColor?` | `string` |\n"
  },
  {
    "path": "docs/interfaces/PayPalCommercePaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommercePaymentInitializeOptions\n\n# Interface: PayPalCommercePaymentInitializeOptions\n\nA set of options that are required to initialize the PayPal Commerce payment\r\nmethod for presenting its PayPal button.\n\nPlease note that the minimum version of checkout-sdk is 1.100\n\nAlso, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n```html\r\n<!-- This is where the PayPal button will be inserted -->\r\n<div id=\"container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'paypalcommerce',\r\n    paypalcommerce: {\r\n        container: '#container',\r\n// Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n        submitForm: () => {\r\n        // Example function\r\n            this.submitOrder(\r\n               {\r\n                  payment: { methodId: 'paypalcommerce', }\r\n              }\r\n           );\r\n        },\r\n// Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n        onValidate: (resolve, reject) => {\r\n        // Example function\r\n            const isValid = this.validatePaymentForm();\r\n            if (isValid) {\r\n                return resolve();\r\n            }\r\n            return reject();\r\n        },\r\n// Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n        onRenderButton: () => {\r\n        // Example function\r\n            this.hidePaymentSubmitButton();\r\n        }\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [bannerContainerId](PayPalCommercePaymentInitializeOptions.md#bannercontainerid)\n- [container](PayPalCommercePaymentInitializeOptions.md#container)\n- [shouldRenderPayPalButtonOnInitialization](PayPalCommercePaymentInitializeOptions.md#shouldrenderpaypalbuttononinitialization)\n\n### Methods\n\n- [getFieldsValues](PayPalCommercePaymentInitializeOptions.md#getfieldsvalues)\n- [onError](PayPalCommercePaymentInitializeOptions.md#onerror)\n- [onInit](PayPalCommercePaymentInitializeOptions.md#oninit)\n- [onRenderButton](PayPalCommercePaymentInitializeOptions.md#onrenderbutton)\n- [onValidate](PayPalCommercePaymentInitializeOptions.md#onvalidate)\n- [submitForm](PayPalCommercePaymentInitializeOptions.md#submitform)\n\n## Properties\n\n### bannerContainerId\n\n• `Optional` **bannerContainerId**: `string`\n\nThe location to insert the Pay Later Messages.\n\n___\n\n### container\n\n• `Optional` **container**: `string`\n\nThe CSS selector of a container where the payment widget should be inserted into.\n\n___\n\n### shouldRenderPayPalButtonOnInitialization\n\n• `Optional` **shouldRenderPayPalButtonOnInitialization**: `boolean`\n\nIf there is no need to initialize the Smart Payment Button, simply pass false as the option value.\r\nThe default value is true\n\n## Methods\n\n### getFieldsValues\n\n▸ **getFieldsValues**(): `HostedInstrument`\n\nA callback for getting form fields values.\n\n#### Returns\n\n`HostedInstrument`\n\n___\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n#### Returns\n\n`void`\n\n___\n\n### onInit\n\n▸ **onInit**(`callback`): `void`\n\nA callback that gets called when strategy is in the process of initialization before rendering Smart Payment Button.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `callback` | () => `void` | A function, that calls the method to render the Smart Payment Button. |\n\n#### Returns\n\n`void`\n\n___\n\n### onRenderButton\n\n▸ **onRenderButton**(): `void`\n\nA callback right before render Smart Payment Button that gets called when\r\nSmart Payment Button is eligible. This callback can be used to hide the standard submit button.\n\n#### Returns\n\n`void`\n\n___\n\n### onValidate\n\n▸ **onValidate**(`resolve`, `reject`): `Promise`\\<`void`\\>\n\nA callback that gets called when a buyer click on Smart Payment Button\r\nand should validate payment form.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `resolve` | () => `void` | A function, that gets called if form is valid. |\n| `reject` | () => `void` | A function, that gets called if form is not valid. |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\nreject() or resolve()\n\n___\n\n### submitForm\n\n▸ **submitForm**(): `void`\n\nA callback for submitting payment form that gets called\r\nwhen buyer approved PayPal account.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceVenmoButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceVenmoButtonInitializeOptions\n\n# Interface: PayPalCommerceVenmoButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [buyNowInitializeOptions](PayPalCommerceVenmoButtonInitializeOptions.md#buynowinitializeoptions)\n- [currencyCode](PayPalCommerceVenmoButtonInitializeOptions.md#currencycode)\n- [style](PayPalCommerceVenmoButtonInitializeOptions.md#style)\n\n### Methods\n\n- [onEligibilityFailure](PayPalCommerceVenmoButtonInitializeOptions.md#oneligibilityfailure)\n\n## Properties\n\n### buyNowInitializeOptions\n\n• `Optional` **buyNowInitializeOptions**: [`PayPalBuyNowInitializeOptions_2`](PayPalBuyNowInitializeOptions_2.md)\n\nThe options that required to initialize Buy Now functionality.\n\n___\n\n### currencyCode\n\n• `Optional` **currencyCode**: `string`\n\nThe option that used to initialize a PayPal script with provided currency code.\n\n___\n\n### style\n\n• `Optional` **style**: [`PayPalButtonStyleOptions_2`](PayPalButtonStyleOptions_2.md)\n\nA set of styling options for the checkout button.\n\n## Methods\n\n### onEligibilityFailure\n\n▸ **onEligibilityFailure**(): `void`\n\nA callback that gets called when PayPal SDK restricts to render PayPal component.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceVenmoCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceVenmoCustomerInitializeOptions\n\n# Interface: PayPalCommerceVenmoCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [container](PayPalCommerceVenmoCustomerInitializeOptions.md#container)\n\n### Methods\n\n- [onClick](PayPalCommerceVenmoCustomerInitializeOptions.md#onclick)\n- [onError](PayPalCommerceVenmoCustomerInitializeOptions.md#onerror)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe ID of a container which the checkout button should be inserted into.\n\n## Methods\n\n### onClick\n\n▸ **onClick**(): `void`\n\nA callback that gets called when paypal button clicked.\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error?`): `void`\n\nA callback that gets called if unable to initialize the widget or select\r\none of the address options provided by the widget.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error?` | `Error` | The error object describing the failure. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PayPalCommerceVenmoPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalCommerceVenmoPaymentInitializeOptions\n\n# Interface: PayPalCommerceVenmoPaymentInitializeOptions\n\nA set of options that are required to initialize the PayPal Commerce payment\r\nmethod for presenting its PayPal button.\n\nPlease note that the minimum version of checkout-sdk is 1.100\n\nAlso, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\r\n```html\r\n<!-- This is where the PayPal button will be inserted -->\r\n<div id=\"container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'paypalcommercevenmo',\r\n    paypalcommercevenmo: {\r\n        container: '#container',\r\n// Callback for submitting payment form that gets called when a buyer approves PayPal payment\r\n        submitForm: () => {\r\n        // Example function\r\n            this.submitOrder(\r\n               {\r\n                  payment: { methodId: 'paypalcommercevenmo', }\r\n              }\r\n           );\r\n        },\r\n// Callback is used to define the state of the payment form, validate if it is applicable for submit.\r\n        onValidate: (resolve, reject) => {\r\n        // Example function\r\n            const isValid = this.validatePaymentForm();\r\n            if (isValid) {\r\n                return resolve();\r\n            }\r\n            return reject();\r\n        },\r\n// Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\r\n        onRenderButton: () => {\r\n        // Example function\r\n            this.hidePaymentSubmitButton();\r\n        }\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [container](PayPalCommerceVenmoPaymentInitializeOptions.md#container)\n\n### Methods\n\n- [onError](PayPalCommerceVenmoPaymentInitializeOptions.md#onerror)\n- [onRenderButton](PayPalCommerceVenmoPaymentInitializeOptions.md#onrenderbutton)\n- [onValidate](PayPalCommerceVenmoPaymentInitializeOptions.md#onvalidate)\n- [submitForm](PayPalCommerceVenmoPaymentInitializeOptions.md#submitform)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe CSS selector of a container where the payment widget should be inserted into.\n\n## Methods\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `Error` |\n\n#### Returns\n\n`void`\n\n___\n\n### onRenderButton\n\n▸ **onRenderButton**(): `void`\n\nA callback right before render Smart Payment Button that gets called when\r\nSmart Payment Button is eligible. This callback can be used to hide the standard submit button.\n\n#### Returns\n\n`void`\n\n___\n\n### onValidate\n\n▸ **onValidate**(`resolve`, `reject`): `Promise`\\<`void`\\>\n\nA callback that gets called when a buyer click on Smart Payment Button\r\nand should validate payment form.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `resolve` | () => `void` | A function, that gets called if form is valid. |\n| `reject` | () => `void` | A function, that gets called if form is not valid. |\n\n#### Returns\n\n`Promise`\\<`void`\\>\n\nreject() or resolve()\n\n___\n\n### submitForm\n\n▸ **submitForm**(): `void`\n\nA callback for submitting payment form that gets called\r\nwhen buyer approved PayPal account.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PayPalInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PayPalInstrument\n\n# Interface: PayPalInstrument\n\n## Hierarchy\n\n- [`BaseAccountInstrument`](BaseAccountInstrument.md)\n\n  ↳ **`PayPalInstrument`**\n\n## Table of contents\n\n### Properties\n\n- [bigpayToken](PayPalInstrument.md#bigpaytoken)\n- [defaultInstrument](PayPalInstrument.md#defaultinstrument)\n- [externalId](PayPalInstrument.md#externalid)\n- [method](PayPalInstrument.md#method)\n- [provider](PayPalInstrument.md#provider)\n- [trustedShippingAddress](PayPalInstrument.md#trustedshippingaddress)\n- [type](PayPalInstrument.md#type)\n\n## Properties\n\n### bigpayToken\n\n• **bigpayToken**: `string`\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[bigpayToken](BaseAccountInstrument.md#bigpaytoken)\n\n___\n\n### defaultInstrument\n\n• **defaultInstrument**: `boolean`\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[defaultInstrument](BaseAccountInstrument.md#defaultinstrument)\n\n___\n\n### externalId\n\n• **externalId**: `string`\n\n___\n\n### method\n\n• **method**: ``\"paypal\"``\n\n#### Overrides\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[method](BaseAccountInstrument.md#method)\n\n___\n\n### provider\n\n• **provider**: `string`\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[provider](BaseAccountInstrument.md#provider)\n\n___\n\n### trustedShippingAddress\n\n• **trustedShippingAddress**: `boolean`\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[trustedShippingAddress](BaseAccountInstrument.md#trustedshippingaddress)\n\n___\n\n### type\n\n• **type**: ``\"account\"`` \\| ``\"bank\"``\n\n#### Inherited from\n\n[BaseAccountInstrument](BaseAccountInstrument.md).[type](BaseAccountInstrument.md#type)\n"
  },
  {
    "path": "docs/interfaces/PaymentAdditionalAction.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaymentAdditionalAction\n\n# Interface: PaymentAdditionalAction\n\n## Table of contents\n\n### Properties\n\n- [data](PaymentAdditionalAction.md#data)\n- [type](PaymentAdditionalAction.md#type)\n\n## Properties\n\n### data\n\n• **data**: [`CardingProtectionActionData`](CardingProtectionActionData.md)\n\n___\n\n### type\n\n• **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/PaymentInstrumentMeta.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaymentInstrumentMeta\n\n# Interface: PaymentInstrumentMeta\n\n## Table of contents\n\n### Properties\n\n- [deviceSessionId](PaymentInstrumentMeta.md#devicesessionid)\n\n## Properties\n\n### deviceSessionId\n\n• `Optional` **deviceSessionId**: `string`\n"
  },
  {
    "path": "docs/interfaces/PaymentMethod.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaymentMethod\n\n# Interface: PaymentMethod\\<T\\>\n\n## Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `T` | `any` |\n\n## Table of contents\n\n### Properties\n\n- [clientToken](PaymentMethod.md#clienttoken)\n- [config](PaymentMethod.md#config)\n- [gateway](PaymentMethod.md#gateway)\n- [id](PaymentMethod.md#id)\n- [initializationData](PaymentMethod.md#initializationdata)\n- [initializationStrategy](PaymentMethod.md#initializationstrategy)\n- [logoUrl](PaymentMethod.md#logourl)\n- [method](PaymentMethod.md#method)\n- [nonce](PaymentMethod.md#nonce)\n- [returnUrl](PaymentMethod.md#returnurl)\n- [skipRedirectConfirmationAlert](PaymentMethod.md#skipredirectconfirmationalert)\n- [supportedCards](PaymentMethod.md#supportedcards)\n- [type](PaymentMethod.md#type)\n\n## Properties\n\n### clientToken\n\n• `Optional` **clientToken**: `string`\n\n___\n\n### config\n\n• **config**: [`PaymentMethodConfig`](PaymentMethodConfig.md)\n\n___\n\n### gateway\n\n• `Optional` **gateway**: `string`\n\n___\n\n### id\n\n• **id**: `string`\n\n___\n\n### initializationData\n\n• `Optional` **initializationData**: `T`\n\n___\n\n### initializationStrategy\n\n• `Optional` **initializationStrategy**: [`InitializationStrategy`](InitializationStrategy.md)\n\n___\n\n### logoUrl\n\n• `Optional` **logoUrl**: `string`\n\n___\n\n### method\n\n• **method**: `string`\n\n___\n\n### nonce\n\n• `Optional` **nonce**: `string`\n\n___\n\n### returnUrl\n\n• `Optional` **returnUrl**: `string`\n\n___\n\n### skipRedirectConfirmationAlert\n\n• **skipRedirectConfirmationAlert**: `boolean`\n\n___\n\n### supportedCards\n\n• **supportedCards**: `string`[]\n\n___\n\n### type\n\n• **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/PaymentMethodConfig.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaymentMethodConfig\n\n# Interface: PaymentMethodConfig\n\n## Table of contents\n\n### Properties\n\n- [cardCode](PaymentMethodConfig.md#cardcode)\n- [displayName](PaymentMethodConfig.md#displayname)\n- [enablePaypal](PaymentMethodConfig.md#enablepaypal)\n- [hasDefaultStoredInstrument](PaymentMethodConfig.md#hasdefaultstoredinstrument)\n- [helpText](PaymentMethodConfig.md#helptext)\n- [is3dsEnabled](PaymentMethodConfig.md#is3dsenabled)\n- [isHostedFormEnabled](PaymentMethodConfig.md#ishostedformenabled)\n- [isVaultingCvvEnabled](PaymentMethodConfig.md#isvaultingcvvenabled)\n- [isVaultingEnabled](PaymentMethodConfig.md#isvaultingenabled)\n- [isVisaCheckoutEnabled](PaymentMethodConfig.md#isvisacheckoutenabled)\n- [logo](PaymentMethodConfig.md#logo)\n- [merchantId](PaymentMethodConfig.md#merchantid)\n- [redirectUrl](PaymentMethodConfig.md#redirecturl)\n- [requireCustomerCode](PaymentMethodConfig.md#requirecustomercode)\n- [returnUrl](PaymentMethodConfig.md#returnurl)\n- [showCardHolderName](PaymentMethodConfig.md#showcardholdername)\n- [testMode](PaymentMethodConfig.md#testmode)\n\n## Properties\n\n### cardCode\n\n• `Optional` **cardCode**: `boolean`\n\n___\n\n### displayName\n\n• `Optional` **displayName**: `string`\n\n___\n\n### enablePaypal\n\n• `Optional` **enablePaypal**: `boolean`\n\n___\n\n### hasDefaultStoredInstrument\n\n• `Optional` **hasDefaultStoredInstrument**: `boolean`\n\n___\n\n### helpText\n\n• `Optional` **helpText**: `string`\n\n___\n\n### is3dsEnabled\n\n• `Optional` **is3dsEnabled**: `boolean`\n\n___\n\n### isHostedFormEnabled\n\n• `Optional` **isHostedFormEnabled**: `boolean`\n\n___\n\n### isVaultingCvvEnabled\n\n• `Optional` **isVaultingCvvEnabled**: `boolean`\n\n___\n\n### isVaultingEnabled\n\n• `Optional` **isVaultingEnabled**: `boolean`\n\n___\n\n### isVisaCheckoutEnabled\n\n• `Optional` **isVisaCheckoutEnabled**: `boolean`\n\n___\n\n### logo\n\n• `Optional` **logo**: `string`\n\n___\n\n### merchantId\n\n• `Optional` **merchantId**: `string`\n\n___\n\n### redirectUrl\n\n• `Optional` **redirectUrl**: `string`\n\n___\n\n### requireCustomerCode\n\n• `Optional` **requireCustomerCode**: `boolean`\n\n___\n\n### returnUrl\n\n• `Optional` **returnUrl**: `string`\n\n___\n\n### showCardHolderName\n\n• `Optional` **showCardHolderName**: `boolean`\n\n___\n\n### testMode\n\n• `Optional` **testMode**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/PaymentMethodMeta.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaymentMethodMeta\n\n# Interface: PaymentMethodMeta\n\n## Table of contents\n\n### Properties\n\n- [deviceSessionId](PaymentMethodMeta.md#devicesessionid)\n- [sessionHash](PaymentMethodMeta.md#sessionhash)\n\n## Properties\n\n### deviceSessionId\n\n• **deviceSessionId**: `string`\n\n___\n\n### sessionHash\n\n• **sessionHash**: `string`\n"
  },
  {
    "path": "docs/interfaces/PaymentMethodSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaymentMethodSelector\n\n# Interface: PaymentMethodSelector\n\n## Table of contents\n\n### Methods\n\n- [getLoadError](PaymentMethodSelector.md#getloaderror)\n- [getLoadMethodError](PaymentMethodSelector.md#getloadmethoderror)\n- [getPaymentMethod](PaymentMethodSelector.md#getpaymentmethod)\n- [getPaymentMethodOrThrow](PaymentMethodSelector.md#getpaymentmethodorthrow)\n- [getPaymentMethods](PaymentMethodSelector.md#getpaymentmethods)\n- [getPaymentMethodsMeta](PaymentMethodSelector.md#getpaymentmethodsmeta)\n- [isLoading](PaymentMethodSelector.md#isloading)\n- [isLoadingMethod](PaymentMethodSelector.md#isloadingmethod)\n\n## Methods\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getLoadMethodError\n\n▸ **getLoadMethodError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getPaymentMethod\n\n▸ **getPaymentMethod**(`methodId`, `gatewayId?`): `undefined` \\| [`PaymentMethod`](PaymentMethod.md)\\<`any`\\>\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId` | `string` |\n| `gatewayId?` | `string` |\n\n#### Returns\n\n`undefined` \\| [`PaymentMethod`](PaymentMethod.md)\\<`any`\\>\n\n___\n\n### getPaymentMethodOrThrow\n\n▸ **getPaymentMethodOrThrow**(`methodId`, `gatewayId?`): [`PaymentMethod`](PaymentMethod.md)\\<`any`\\>\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId` | `string` |\n| `gatewayId?` | `string` |\n\n#### Returns\n\n[`PaymentMethod`](PaymentMethod.md)\\<`any`\\>\n\n___\n\n### getPaymentMethods\n\n▸ **getPaymentMethods**(): `undefined` \\| [`PaymentMethod`](PaymentMethod.md)\\<`any`\\>[]\n\n#### Returns\n\n`undefined` \\| [`PaymentMethod`](PaymentMethod.md)\\<`any`\\>[]\n\n___\n\n### getPaymentMethodsMeta\n\n▸ **getPaymentMethodsMeta**(): `undefined` \\| [`PaymentMethodMeta`](PaymentMethodMeta.md)\n\n#### Returns\n\n`undefined` \\| [`PaymentMethodMeta`](PaymentMethodMeta.md)\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n\n___\n\n### isLoadingMethod\n\n▸ **isLoadingMethod**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/PaymentProviderCustomerSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaymentProviderCustomerSelector\n\n# Interface: PaymentProviderCustomerSelector\n\n## Table of contents\n\n### Methods\n\n- [getPaymentProviderCustomer](PaymentProviderCustomerSelector.md#getpaymentprovidercustomer)\n- [getPaymentProviderCustomerOrThrow](PaymentProviderCustomerSelector.md#getpaymentprovidercustomerorthrow)\n\n## Methods\n\n### getPaymentProviderCustomer\n\n▸ **getPaymentProviderCustomer**(): `undefined` \\| `PaymentProviderCustomer`\n\n#### Returns\n\n`undefined` \\| `PaymentProviderCustomer`\n\n___\n\n### getPaymentProviderCustomerOrThrow\n\n▸ **getPaymentProviderCustomerOrThrow**(): `PaymentProviderCustomer`\n\n#### Returns\n\n`PaymentProviderCustomer`\n"
  },
  {
    "path": "docs/interfaces/PaymentRequestOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaymentRequestOptions\n\n# Interface: PaymentRequestOptions\n\nThe set of options for configuring any requests related to the payment step of\r\nthe current checkout flow.\n\n## Hierarchy\n\n- [`RequestOptions`](RequestOptions.md)\n\n  ↳ **`PaymentRequestOptions`**\n\n  ↳↳ [`BasePaymentInitializeOptions`](BasePaymentInitializeOptions.md)\n\n## Table of contents\n\n### Properties\n\n- [gatewayId](PaymentRequestOptions.md#gatewayid)\n- [methodId](PaymentRequestOptions.md#methodid)\n- [params](PaymentRequestOptions.md#params)\n- [timeout](PaymentRequestOptions.md#timeout)\n- [version](PaymentRequestOptions.md#version)\n\n## Properties\n\n### gatewayId\n\n• `Optional` **gatewayId**: `string`\n\nThe identifier of the payment provider providing the payment method. This\r\noption is only required if the provider offers multiple payment options.\r\ni.e.: Adyen and Klarna.\n\n___\n\n### methodId\n\n• **methodId**: `string`\n\nThe identifier of the payment method.\n\n___\n\n### params\n\n• `Optional` **params**: `object`\n\nThe parameters of the request, if required.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[params](RequestOptions.md#params)\n\n___\n\n### timeout\n\n• `Optional` **timeout**: `default`\n\nProvide this option if you want to cancel or time out the request. If the\r\ntimeout object completes before the request, the request will be\r\ncancelled.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[timeout](RequestOptions.md#timeout)\n\n___\n\n### version\n\n• `Optional` **version**: `number`\n\nThe version of the checkout, used for optimistic concurrency control.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[version](RequestOptions.md#version)\n"
  },
  {
    "path": "docs/interfaces/PaymentSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaymentSelector\n\n# Interface: PaymentSelector\n\n## Table of contents\n\n### Methods\n\n- [getPaymentId](PaymentSelector.md#getpaymentid)\n- [getPaymentIdOrThrow](PaymentSelector.md#getpaymentidorthrow)\n- [getPaymentRedirectUrl](PaymentSelector.md#getpaymentredirecturl)\n- [getPaymentRedirectUrlOrThrow](PaymentSelector.md#getpaymentredirecturlorthrow)\n- [getPaymentStatus](PaymentSelector.md#getpaymentstatus)\n- [getPaymentStatusOrThrow](PaymentSelector.md#getpaymentstatusorthrow)\n- [getPaymentToken](PaymentSelector.md#getpaymenttoken)\n- [getPaymentTokenOrThrow](PaymentSelector.md#getpaymenttokenorthrow)\n- [isPaymentDataRequired](PaymentSelector.md#ispaymentdatarequired)\n- [isPaymentDataSubmitted](PaymentSelector.md#ispaymentdatasubmitted)\n\n## Methods\n\n### getPaymentId\n\n▸ **getPaymentId**(): `undefined` \\| \\{ `gatewayId?`: `string` ; `providerId`: `string`  }\n\n#### Returns\n\n`undefined` \\| \\{ `gatewayId?`: `string` ; `providerId`: `string`  }\n\n___\n\n### getPaymentIdOrThrow\n\n▸ **getPaymentIdOrThrow**(): `Object`\n\n#### Returns\n\n`Object`\n\n| Name | Type |\n| :------ | :------ |\n| `gatewayId?` | `string` |\n| `providerId` | `string` |\n\n___\n\n### getPaymentRedirectUrl\n\n▸ **getPaymentRedirectUrl**(): `undefined` \\| `string`\n\n#### Returns\n\n`undefined` \\| `string`\n\n___\n\n### getPaymentRedirectUrlOrThrow\n\n▸ **getPaymentRedirectUrlOrThrow**(): `string`\n\n#### Returns\n\n`string`\n\n___\n\n### getPaymentStatus\n\n▸ **getPaymentStatus**(): `undefined` \\| `string`\n\n#### Returns\n\n`undefined` \\| `string`\n\n___\n\n### getPaymentStatusOrThrow\n\n▸ **getPaymentStatusOrThrow**(): `string`\n\n#### Returns\n\n`string`\n\n___\n\n### getPaymentToken\n\n▸ **getPaymentToken**(): `undefined` \\| `string`\n\n#### Returns\n\n`undefined` \\| `string`\n\n___\n\n### getPaymentTokenOrThrow\n\n▸ **getPaymentTokenOrThrow**(): `string`\n\n#### Returns\n\n`string`\n\n___\n\n### isPaymentDataRequired\n\n▸ **isPaymentDataRequired**(`useStoreCredit?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `useStoreCredit?` | `boolean` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isPaymentDataSubmitted\n\n▸ **isPaymentDataSubmitted**(`paymentMethod?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `paymentMethod?` | [`PaymentMethod`](PaymentMethod.md)\\<`any`\\> |\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/PaymentSettings.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaymentSettings\n\n# Interface: PaymentSettings\n\n## Table of contents\n\n### Properties\n\n- [bigpayBaseUrl](PaymentSettings.md#bigpaybaseurl)\n- [clientSidePaymentProviders](PaymentSettings.md#clientsidepaymentproviders)\n\n## Properties\n\n### bigpayBaseUrl\n\n• **bigpayBaseUrl**: `string`\n\n___\n\n### clientSidePaymentProviders\n\n• **clientSidePaymentProviders**: `string`[]\n"
  },
  {
    "path": "docs/interfaces/PaymentStrategySelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaymentStrategySelector\n\n# Interface: PaymentStrategySelector\n\n## Table of contents\n\n### Methods\n\n- [getExecuteError](PaymentStrategySelector.md#getexecuteerror)\n- [getFinalizeError](PaymentStrategySelector.md#getfinalizeerror)\n- [getInitializeError](PaymentStrategySelector.md#getinitializeerror)\n- [getWidgetInteractingError](PaymentStrategySelector.md#getwidgetinteractingerror)\n- [isExecuting](PaymentStrategySelector.md#isexecuting)\n- [isFinalizing](PaymentStrategySelector.md#isfinalizing)\n- [isInitialized](PaymentStrategySelector.md#isinitialized)\n- [isInitializing](PaymentStrategySelector.md#isinitializing)\n- [isWidgetInteracting](PaymentStrategySelector.md#iswidgetinteracting)\n\n## Methods\n\n### getExecuteError\n\n▸ **getExecuteError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getFinalizeError\n\n▸ **getFinalizeError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getInitializeError\n\n▸ **getInitializeError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getWidgetInteractingError\n\n▸ **getWidgetInteractingError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### isExecuting\n\n▸ **isExecuting**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isFinalizing\n\n▸ **isFinalizing**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isInitialized\n\n▸ **isInitialized**(`query`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `query` | [`InitiaizedQuery`](InitiaizedQuery.md) |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isInitializing\n\n▸ **isInitializing**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isWidgetInteracting\n\n▸ **isWidgetInteracting**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/PaypalButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaypalButtonInitializeOptions\n\n# Interface: PaypalButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [allowCredit](PaypalButtonInitializeOptions.md#allowcredit)\n- [clientId](PaypalButtonInitializeOptions.md#clientid)\n- [style](PaypalButtonInitializeOptions.md#style)\n\n### Methods\n\n- [onAuthorizeError](PaypalButtonInitializeOptions.md#onauthorizeerror)\n- [onPaymentError](PaypalButtonInitializeOptions.md#onpaymenterror)\n\n## Properties\n\n### allowCredit\n\n• `Optional` **allowCredit**: `boolean`\n\nWhether or not to show a credit button.\n\n___\n\n### clientId\n\n• **clientId**: `string`\n\nThe Client ID of the Paypal App\n\n___\n\n### style\n\n• `Optional` **style**: `Pick`\\<[`PaypalStyleOptions`](PaypalStyleOptions.md), ``\"color\"`` \\| ``\"label\"`` \\| ``\"layout\"`` \\| ``\"shape\"`` \\| ``\"size\"`` \\| ``\"fundingicons\"`` \\| ``\"tagline\"``\\>\n\nA set of styling options for the checkout button.\n\n## Methods\n\n### onAuthorizeError\n\n▸ **onAuthorizeError**(`error`): `void`\n\nA callback that gets called if unable to authorize and tokenize payment.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | [`StandardError`](../classes/StandardError.md) | The error object describing the failure. |\n\n#### Returns\n\n`void`\n\n___\n\n### onPaymentError\n\n▸ **onPaymentError**(`error`): `void`\n\nA callback that gets called if unable to submit payment.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `error` | [`StandardError`](../classes/StandardError.md) | The error object describing the failure. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PaypalCommerceRatePay.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaypalCommerceRatePay\n\n# Interface: PaypalCommerceRatePay\n\n## Table of contents\n\n### Properties\n\n- [container](PaypalCommerceRatePay.md#container)\n- [legalTextContainer](PaypalCommerceRatePay.md#legaltextcontainer)\n- [loadingContainerId](PaypalCommerceRatePay.md#loadingcontainerid)\n\n### Methods\n\n- [getFieldsValues](PaypalCommerceRatePay.md#getfieldsvalues)\n- [onError](PaypalCommerceRatePay.md#onerror)\n- [onRenderButton](PaypalCommerceRatePay.md#onrenderbutton)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe CSS selector of a container where the payment widget should be inserted into.\n\n___\n\n### legalTextContainer\n\n• **legalTextContainer**: `string`\n\nThe CSS selector of a container where the legal text should be inserted into.\n\n___\n\n### loadingContainerId\n\n• **loadingContainerId**: `string`\n\nThe CSS selector of a container where loading indicator should be rendered\n\n## Methods\n\n### getFieldsValues\n\n▸ **getFieldsValues**(): `Object`\n\nA callback that gets form values\n\n#### Returns\n\n`Object`\n\n| Name | Type |\n| :------ | :------ |\n| `ratepayBirthDate` | [`BirthDate_2`](BirthDate_2.md) |\n| `ratepayPhoneCountryCode` | `string` |\n| `ratepayPhoneNumber` | `string` |\n\n___\n\n### onError\n\n▸ **onError**(`error`): `void`\n\nA callback for displaying error popup. This callback requires error object as parameter.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error` | `unknown` |\n\n#### Returns\n\n`void`\n\n___\n\n### onRenderButton\n\n▸ **onRenderButton**(): `void`\n\nA callback right before render Smart Payment Button that gets called when\r\nSmart Payment Button is eligible. This callback can be used to hide the standard submit button.\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/PaypalStyleOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PaypalStyleOptions\n\n# Interface: PaypalStyleOptions\n\n## Table of contents\n\n### Properties\n\n- [color](PaypalStyleOptions.md#color)\n- [fundingicons](PaypalStyleOptions.md#fundingicons)\n- [height](PaypalStyleOptions.md#height)\n- [label](PaypalStyleOptions.md#label)\n- [layout](PaypalStyleOptions.md#layout)\n- [shape](PaypalStyleOptions.md#shape)\n- [size](PaypalStyleOptions.md#size)\n- [tagline](PaypalStyleOptions.md#tagline)\n\n## Properties\n\n### color\n\n• `Optional` **color**: [`PaypalButtonStyleColorOption`](../enums/PaypalButtonStyleColorOption.md)\n\n___\n\n### fundingicons\n\n• `Optional` **fundingicons**: `boolean`\n\n___\n\n### height\n\n• `Optional` **height**: `number`\n\n___\n\n### label\n\n• `Optional` **label**: [`PaypalButtonStyleLabelOption`](../enums/PaypalButtonStyleLabelOption.md)\n\n___\n\n### layout\n\n• `Optional` **layout**: [`PaypalButtonStyleLayoutOption`](../enums/PaypalButtonStyleLayoutOption.md)\n\n___\n\n### shape\n\n• `Optional` **shape**: [`PaypalButtonStyleShapeOption`](../enums/PaypalButtonStyleShapeOption.md)\n\n___\n\n### size\n\n• `Optional` **size**: [`PaypalButtonStyleSizeOption`](../enums/PaypalButtonStyleSizeOption.md)\n\n___\n\n### tagline\n\n• `Optional` **tagline**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/PhysicalItem.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PhysicalItem\n\n# Interface: PhysicalItem\n\n## Hierarchy\n\n- [`LineItem`](LineItem.md)\n\n  ↳ **`PhysicalItem`**\n\n## Table of contents\n\n### Properties\n\n- [addedByPromotion](PhysicalItem.md#addedbypromotion)\n- [backorderMessage](PhysicalItem.md#backordermessage)\n- [brand](PhysicalItem.md#brand)\n- [categories](PhysicalItem.md#categories)\n- [categoryNames](PhysicalItem.md#categorynames)\n- [comparisonPrice](PhysicalItem.md#comparisonprice)\n- [couponAmount](PhysicalItem.md#couponamount)\n- [discountAmount](PhysicalItem.md#discountamount)\n- [discounts](PhysicalItem.md#discounts)\n- [extendedComparisonPrice](PhysicalItem.md#extendedcomparisonprice)\n- [extendedListPrice](PhysicalItem.md#extendedlistprice)\n- [extendedSalePrice](PhysicalItem.md#extendedsaleprice)\n- [giftWrapping](PhysicalItem.md#giftwrapping)\n- [id](PhysicalItem.md#id)\n- [imageUrl](PhysicalItem.md#imageurl)\n- [isShippingRequired](PhysicalItem.md#isshippingrequired)\n- [isTaxable](PhysicalItem.md#istaxable)\n- [listPrice](PhysicalItem.md#listprice)\n- [name](PhysicalItem.md#name)\n- [options](PhysicalItem.md#options)\n- [parentId](PhysicalItem.md#parentid)\n- [productId](PhysicalItem.md#productid)\n- [quantity](PhysicalItem.md#quantity)\n- [quantityBackordered](PhysicalItem.md#quantitybackordered)\n- [retailPrice](PhysicalItem.md#retailprice)\n- [salePrice](PhysicalItem.md#saleprice)\n- [sku](PhysicalItem.md#sku)\n- [socialMedia](PhysicalItem.md#socialmedia)\n- [stockPosition](PhysicalItem.md#stockposition)\n- [url](PhysicalItem.md#url)\n- [variantId](PhysicalItem.md#variantid)\n\n## Properties\n\n### addedByPromotion\n\n• **addedByPromotion**: `boolean`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[addedByPromotion](LineItem.md#addedbypromotion)\n\n___\n\n### backorderMessage\n\n• `Optional` **backorderMessage**: ``null`` \\| `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[backorderMessage](LineItem.md#backordermessage)\n\n___\n\n### brand\n\n• **brand**: `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[brand](LineItem.md#brand)\n\n___\n\n### categories\n\n• `Optional` **categories**: [`LineItemCategory`](LineItemCategory.md)[][]\n\n#### Inherited from\n\n[LineItem](LineItem.md).[categories](LineItem.md#categories)\n\n___\n\n### categoryNames\n\n• `Optional` **categoryNames**: `string`[]\n\n#### Inherited from\n\n[LineItem](LineItem.md).[categoryNames](LineItem.md#categorynames)\n\n___\n\n### comparisonPrice\n\n• **comparisonPrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[comparisonPrice](LineItem.md#comparisonprice)\n\n___\n\n### couponAmount\n\n• **couponAmount**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[couponAmount](LineItem.md#couponamount)\n\n___\n\n### discountAmount\n\n• **discountAmount**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[discountAmount](LineItem.md#discountamount)\n\n___\n\n### discounts\n\n• **discounts**: \\{ `discountedAmount`: `number` ; `name`: `string`  }[]\n\n#### Inherited from\n\n[LineItem](LineItem.md).[discounts](LineItem.md#discounts)\n\n___\n\n### extendedComparisonPrice\n\n• **extendedComparisonPrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[extendedComparisonPrice](LineItem.md#extendedcomparisonprice)\n\n___\n\n### extendedListPrice\n\n• **extendedListPrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[extendedListPrice](LineItem.md#extendedlistprice)\n\n___\n\n### extendedSalePrice\n\n• **extendedSalePrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[extendedSalePrice](LineItem.md#extendedsaleprice)\n\n___\n\n### giftWrapping\n\n• `Optional` **giftWrapping**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `amount` | `number` |\n| `message` | `string` |\n| `name` | `string` |\n\n___\n\n### id\n\n• **id**: `string` \\| `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[id](LineItem.md#id)\n\n___\n\n### imageUrl\n\n• **imageUrl**: `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[imageUrl](LineItem.md#imageurl)\n\n___\n\n### isShippingRequired\n\n• **isShippingRequired**: `boolean`\n\n___\n\n### isTaxable\n\n• **isTaxable**: `boolean`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[isTaxable](LineItem.md#istaxable)\n\n___\n\n### listPrice\n\n• **listPrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[listPrice](LineItem.md#listprice)\n\n___\n\n### name\n\n• **name**: `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[name](LineItem.md#name)\n\n___\n\n### options\n\n• `Optional` **options**: [`LineItemOption`](LineItemOption.md)[]\n\n#### Inherited from\n\n[LineItem](LineItem.md).[options](LineItem.md#options)\n\n___\n\n### parentId\n\n• `Optional` **parentId**: ``null`` \\| `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[parentId](LineItem.md#parentid)\n\n___\n\n### productId\n\n• **productId**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[productId](LineItem.md#productid)\n\n___\n\n### quantity\n\n• **quantity**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[quantity](LineItem.md#quantity)\n\n___\n\n### quantityBackordered\n\n• `Optional` **quantityBackordered**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[quantityBackordered](LineItem.md#quantitybackordered)\n\n___\n\n### retailPrice\n\n• **retailPrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[retailPrice](LineItem.md#retailprice)\n\n___\n\n### salePrice\n\n• **salePrice**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[salePrice](LineItem.md#saleprice)\n\n___\n\n### sku\n\n• **sku**: `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[sku](LineItem.md#sku)\n\n___\n\n### socialMedia\n\n• `Optional` **socialMedia**: [`LineItemSocialData`](LineItemSocialData.md)[]\n\n#### Inherited from\n\n[LineItem](LineItem.md).[socialMedia](LineItem.md#socialmedia)\n\n___\n\n### stockPosition\n\n• `Optional` **stockPosition**: [`StockPosition`](StockPosition.md)\n\n#### Inherited from\n\n[LineItem](LineItem.md).[stockPosition](LineItem.md#stockposition)\n\n___\n\n### url\n\n• **url**: `string`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[url](LineItem.md#url)\n\n___\n\n### variantId\n\n• **variantId**: `number`\n\n#### Inherited from\n\n[LineItem](LineItem.md).[variantId](LineItem.md#variantid)\n"
  },
  {
    "path": "docs/interfaces/PickupMethod.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PickupMethod\n\n# Interface: PickupMethod\n\n## Table of contents\n\n### Properties\n\n- [collectionInstructions](PickupMethod.md#collectioninstructions)\n- [collectionTimeDescription](PickupMethod.md#collectiontimedescription)\n- [displayName](PickupMethod.md#displayname)\n- [id](PickupMethod.md#id)\n- [locationId](PickupMethod.md#locationid)\n\n## Properties\n\n### collectionInstructions\n\n• **collectionInstructions**: `string`\n\n___\n\n### collectionTimeDescription\n\n• **collectionTimeDescription**: `string`\n\n___\n\n### displayName\n\n• **displayName**: `string`\n\n___\n\n### id\n\n• **id**: `number`\n\n___\n\n### locationId\n\n• **locationId**: `number`\n"
  },
  {
    "path": "docs/interfaces/PickupOptionRequestBody.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PickupOptionRequestBody\n\n# Interface: PickupOptionRequestBody\n\n## Table of contents\n\n### Properties\n\n- [consignmentId](PickupOptionRequestBody.md#consignmentid)\n- [searchArea](PickupOptionRequestBody.md#searcharea)\n\n## Properties\n\n### consignmentId\n\n• **consignmentId**: `string`\n\n___\n\n### searchArea\n\n• **searchArea**: [`SearchArea`](SearchArea.md)\n"
  },
  {
    "path": "docs/interfaces/PickupOptionResult.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PickupOptionResult\n\n# Interface: PickupOptionResult\n\n## Table of contents\n\n### Properties\n\n- [options](PickupOptionResult.md#options)\n\n## Properties\n\n### options\n\n• **options**: [`Option`](Option.md)[]\n"
  },
  {
    "path": "docs/interfaces/PickupOptionSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / PickupOptionSelector\n\n# Interface: PickupOptionSelector\n\n## Table of contents\n\n### Methods\n\n- [getLoadError](PickupOptionSelector.md#getloaderror)\n- [getPickupOptions](PickupOptionSelector.md#getpickupoptions)\n- [isLoading](PickupOptionSelector.md#isloading)\n\n## Methods\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getPickupOptions\n\n▸ **getPickupOptions**(`consignmentId`, `searchArea`): `undefined` \\| [`PickupOptionResult`](PickupOptionResult.md)[]\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `consignmentId` | `string` |\n| `searchArea` | [`SearchArea`](SearchArea.md) |\n\n#### Returns\n\n`undefined` \\| [`PickupOptionResult`](PickupOptionResult.md)[]\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/Promotion.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Promotion\n\n# Interface: Promotion\n\n## Table of contents\n\n### Properties\n\n- [banners](Promotion.md#banners)\n\n## Properties\n\n### banners\n\n• **banners**: [`Banner`](Banner.md)[]\n"
  },
  {
    "path": "docs/interfaces/Radius.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Radius\n\n# Interface: Radius\n\n## Table of contents\n\n### Properties\n\n- [unit](Radius.md#unit)\n- [value](Radius.md#value)\n\n## Properties\n\n### unit\n\n• **unit**: [`RadiusUnit`](../enums/RadiusUnit.md)\n\n___\n\n### value\n\n• **value**: `number`\n"
  },
  {
    "path": "docs/interfaces/ReRenderShippingForm.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ReRenderShippingForm\n\n# Interface: ReRenderShippingForm\n\n## Table of contents\n\n### Properties\n\n- [type](ReRenderShippingForm.md#type)\n\n## Properties\n\n### type\n\n• **type**: [`ReRenderShippingForm`](../enums/ExtensionCommandType.md#rerendershippingform)\n"
  },
  {
    "path": "docs/interfaces/ReRenderShippingStep.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ReRenderShippingStep\n\n# Interface: ReRenderShippingStep\n\n## Table of contents\n\n### Properties\n\n- [type](ReRenderShippingStep.md#type)\n\n## Properties\n\n### type\n\n• **type**: [`ReRenderShippingStep`](../enums/ExtensionCommandType.md#rerendershippingstep)\n"
  },
  {
    "path": "docs/interfaces/RecaptchaResult.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / RecaptchaResult\n\n# Interface: RecaptchaResult\n\n## Table of contents\n\n### Properties\n\n- [error](RecaptchaResult.md#error)\n- [token](RecaptchaResult.md#token)\n\n## Properties\n\n### error\n\n• `Optional` **error**: `Error`\n\n___\n\n### token\n\n• `Optional` **token**: `string`\n"
  },
  {
    "path": "docs/interfaces/Region.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Region\n\n# Interface: Region\n\n## Table of contents\n\n### Properties\n\n- [code](Region.md#code)\n- [name](Region.md#name)\n\n## Properties\n\n### code\n\n• **code**: `string`\n\n___\n\n### name\n\n• **name**: `string`\n"
  },
  {
    "path": "docs/interfaces/ReloadCheckoutCommand.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ReloadCheckoutCommand\n\n# Interface: ReloadCheckoutCommand\n\n## Table of contents\n\n### Properties\n\n- [type](ReloadCheckoutCommand.md#type)\n\n## Properties\n\n### type\n\n• **type**: [`ReloadCheckout`](../enums/ExtensionCommandType.md#reloadcheckout)\n"
  },
  {
    "path": "docs/interfaces/RemoteCheckoutSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / RemoteCheckoutSelector\n\n# Interface: RemoteCheckoutSelector\n\n## Table of contents\n\n### Methods\n\n- [getCheckout](RemoteCheckoutSelector.md#getcheckout)\n\n## Methods\n\n### getCheckout\n\n▸ **getCheckout**\\<`TMethodId`\\>(`methodId`): `undefined` \\| [`RemoteCheckoutStateData`](RemoteCheckoutStateData.md)[`TMethodId`]\n\n#### Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TMethodId` | extends ``\"amazon\"`` |\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId` | `TMethodId` |\n\n#### Returns\n\n`undefined` \\| [`RemoteCheckoutStateData`](RemoteCheckoutStateData.md)[`TMethodId`]\n"
  },
  {
    "path": "docs/interfaces/RemoteCheckoutStateData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / RemoteCheckoutStateData\n\n# Interface: RemoteCheckoutStateData\n\n## Table of contents\n\n### Properties\n\n- [amazon](RemoteCheckoutStateData.md#amazon)\n\n## Properties\n\n### amazon\n\n• `Optional` **amazon**: [`AmazonPayRemoteCheckout`](AmazonPayRemoteCheckout.md)\n"
  },
  {
    "path": "docs/interfaces/RequestOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / RequestOptions\n\n# Interface: RequestOptions\\<TParams\\>\n\nA set of options for configuring an asynchronous request.\n\n## Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `TParams` | `object` |\n\n## Hierarchy\n\n- **`RequestOptions`**\n\n  ↳ [`CheckoutButtonOptions`](CheckoutButtonOptions.md)\n\n  ↳ [`CustomerRequestOptions`](CustomerRequestOptions.md)\n\n  ↳ [`OrderFinalizeOptions`](OrderFinalizeOptions.md)\n\n  ↳ [`PaymentRequestOptions`](PaymentRequestOptions.md)\n\n  ↳ [`ShippingRequestOptions`](ShippingRequestOptions.md)\n\n## Table of contents\n\n### Properties\n\n- [params](RequestOptions.md#params)\n- [timeout](RequestOptions.md#timeout)\n- [version](RequestOptions.md#version)\n\n## Properties\n\n### params\n\n• `Optional` **params**: `TParams`\n\nThe parameters of the request, if required.\n\n___\n\n### timeout\n\n• `Optional` **timeout**: `default`\n\nProvide this option if you want to cancel or time out the request. If the\r\ntimeout object completes before the request, the request will be\r\ncancelled.\n\n___\n\n### version\n\n• `Optional` **version**: `number`\n\nThe version of the checkout, used for optimistic concurrency control.\n"
  },
  {
    "path": "docs/interfaces/SearchArea.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / SearchArea\n\n# Interface: SearchArea\n\n## Table of contents\n\n### Properties\n\n- [coordinates](SearchArea.md#coordinates)\n- [radius](SearchArea.md#radius)\n\n## Properties\n\n### coordinates\n\n• **coordinates**: [`Coordinates`](Coordinates.md)\n\n___\n\n### radius\n\n• **radius**: [`Radius`](Radius.md)\n"
  },
  {
    "path": "docs/interfaces/SepaPlaceHolder.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / SepaPlaceHolder\n\n# Interface: SepaPlaceHolder\n\n## Table of contents\n\n### Properties\n\n- [ibanNumber](SepaPlaceHolder.md#ibannumber)\n- [ownerName](SepaPlaceHolder.md#ownername)\n\n## Properties\n\n### ibanNumber\n\n• `Optional` **ibanNumber**: `string`\n\n___\n\n### ownerName\n\n• `Optional` **ownerName**: `string`\n"
  },
  {
    "path": "docs/interfaces/SepaStateData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / SepaStateData\n\n# Interface: SepaStateData\n\n## Table of contents\n\n### Properties\n\n- [ibanNumber](SepaStateData.md#ibannumber)\n- [ownerName](SepaStateData.md#ownername)\n\n## Properties\n\n### ibanNumber\n\n• **ibanNumber**: `string`\n\n___\n\n### ownerName\n\n• **ownerName**: `string`\n"
  },
  {
    "path": "docs/interfaces/SetIframeStyleCommand.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / SetIframeStyleCommand\n\n# Interface: SetIframeStyleCommand\n\n## Table of contents\n\n### Properties\n\n- [payload](SetIframeStyleCommand.md#payload)\n- [type](SetIframeStyleCommand.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `style` | \\{ `[key: string]`: `string` \\| `number` \\| ``null``;  } |\n\n___\n\n### type\n\n• **type**: [`SetIframeStyle`](../enums/ExtensionCommandType.md#setiframestyle)\n"
  },
  {
    "path": "docs/interfaces/ShippingAddressSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ShippingAddressSelector\n\n# Interface: ShippingAddressSelector\n\n## Table of contents\n\n### Methods\n\n- [getShippingAddress](ShippingAddressSelector.md#getshippingaddress)\n- [getShippingAddressOrThrow](ShippingAddressSelector.md#getshippingaddressorthrow)\n- [getShippingAddresses](ShippingAddressSelector.md#getshippingaddresses)\n- [getShippingAddressesOrThrow](ShippingAddressSelector.md#getshippingaddressesorthrow)\n\n## Methods\n\n### getShippingAddress\n\n▸ **getShippingAddress**(): `undefined` \\| [`Address`](Address.md)\n\n#### Returns\n\n`undefined` \\| [`Address`](Address.md)\n\n___\n\n### getShippingAddressOrThrow\n\n▸ **getShippingAddressOrThrow**(): [`Address`](Address.md)\n\n#### Returns\n\n[`Address`](Address.md)\n\n___\n\n### getShippingAddresses\n\n▸ **getShippingAddresses**(): [`Address`](Address.md)[]\n\n#### Returns\n\n[`Address`](Address.md)[]\n\n___\n\n### getShippingAddressesOrThrow\n\n▸ **getShippingAddressesOrThrow**(): [`Address`](Address.md)[]\n\n#### Returns\n\n[`Address`](Address.md)[]\n"
  },
  {
    "path": "docs/interfaces/ShippingCountrySelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ShippingCountrySelector\n\n# Interface: ShippingCountrySelector\n\n## Table of contents\n\n### Methods\n\n- [getLoadError](ShippingCountrySelector.md#getloaderror)\n- [getShippingCountries](ShippingCountrySelector.md#getshippingcountries)\n- [isLoading](ShippingCountrySelector.md#isloading)\n\n## Methods\n\n### getLoadError\n\n▸ **getLoadError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getShippingCountries\n\n▸ **getShippingCountries**(): `undefined` \\| [`Country`](Country.md)[]\n\n#### Returns\n\n`undefined` \\| [`Country`](Country.md)[]\n\n___\n\n### isLoading\n\n▸ **isLoading**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/ShippingInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ShippingInitializeOptions\n\n# Interface: ShippingInitializeOptions\\<T\\>\n\nA set of options that are required to initialize the shipping step of the\r\ncurrent checkout flow.\n\nSome payment methods have specific requirements for setting the shipping\r\ndetails for checkout. For example, Amazon Pay requires the customer to enter\r\ntheir shipping address using their address book widget. As a result, you may\r\nneed to provide additional information in order to initialize the shipping\r\nstep of checkout.\n\n## Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `T` | `object` |\n\n## Hierarchy\n\n- [`ShippingRequestOptions`](ShippingRequestOptions.md)\\<`T`\\>\n\n  ↳ **`ShippingInitializeOptions`**\n\n## Table of contents\n\n### Properties\n\n- [amazonpay](ShippingInitializeOptions.md#amazonpay)\n- [bigcommerce\\_payments\\_fastlane](ShippingInitializeOptions.md#bigcommerce_payments_fastlane)\n- [braintreefastlane](ShippingInitializeOptions.md#braintreefastlane)\n- [fastlane](ShippingInitializeOptions.md#fastlane)\n- [methodId](ShippingInitializeOptions.md#methodid)\n- [params](ShippingInitializeOptions.md#params)\n- [paypalcommercefastlane](ShippingInitializeOptions.md#paypalcommercefastlane)\n- [stripeupe](ShippingInitializeOptions.md#stripeupe)\n- [timeout](ShippingInitializeOptions.md#timeout)\n- [version](ShippingInitializeOptions.md#version)\n\n## Properties\n\n### amazonpay\n\n• `Optional` **amazonpay**: [`AmazonPayV2ShippingInitializeOptions`](AmazonPayV2ShippingInitializeOptions.md)\n\nThe options that are required to initialize the shipping step of checkout\r\nwhen using AmazonPayV2.\n\n___\n\n### bigcommerce\\_payments\\_fastlane\n\n• `Optional` **bigcommerce\\_payments\\_fastlane**: [`BigCommercePaymentsFastlaneShippingInitializeOptions`](BigCommercePaymentsFastlaneShippingInitializeOptions.md)\n\nThe options that are required to initialize the shipping step of checkout\r\nwhen using BigCommercePayments Fastlane.\n\n___\n\n### braintreefastlane\n\n• `Optional` **braintreefastlane**: [`BraintreeFastlaneShippingInitializeOptions`](BraintreeFastlaneShippingInitializeOptions.md)\n\nThe options that are required to initialize the shipping step of checkout\r\nwhen using Braintree Fastlane.\n\n___\n\n### fastlane\n\n• `Optional` **fastlane**: [`FastlaneShippingInitializeOptions`](FastlaneShippingInitializeOptions.md)\n\nThe options that are required to initialize the shipping step of checkout\r\nwhen using Fastlane (PayPal Commerce, BigCommerce Payments, or Braintree).\n\nThis is a unified option that works across all Fastlane implementations,\r\nsimplifying integration and avoiding provider-specific checks.\n\n___\n\n### methodId\n\n• `Optional` **methodId**: `string`\n\n#### Inherited from\n\n[ShippingRequestOptions](ShippingRequestOptions.md).[methodId](ShippingRequestOptions.md#methodid)\n\n___\n\n### params\n\n• `Optional` **params**: `T`\n\nThe parameters of the request, if required.\n\n#### Inherited from\n\n[ShippingRequestOptions](ShippingRequestOptions.md).[params](ShippingRequestOptions.md#params)\n\n___\n\n### paypalcommercefastlane\n\n• `Optional` **paypalcommercefastlane**: [`PayPalCommerceFastlaneShippingInitializeOptions`](PayPalCommerceFastlaneShippingInitializeOptions.md)\n\nThe options that are required to initialize the shipping step of checkout\r\nwhen using PayPal Commerce Fastlane.\n\n___\n\n### stripeupe\n\n• `Optional` **stripeupe**: [`StripeUPEShippingInitializeOptions`](StripeUPEShippingInitializeOptions.md)\n\nThe options that are required to initialize the shipping step of checkout\r\nwhen using Stripe Upe Link.\n\n___\n\n### timeout\n\n• `Optional` **timeout**: `default`\n\nProvide this option if you want to cancel or time out the request. If the\r\ntimeout object completes before the request, the request will be\r\ncancelled.\n\n#### Inherited from\n\n[ShippingRequestOptions](ShippingRequestOptions.md).[timeout](ShippingRequestOptions.md#timeout)\n\n___\n\n### version\n\n• `Optional` **version**: `number`\n\nThe version of the checkout, used for optimistic concurrency control.\n\n#### Inherited from\n\n[ShippingRequestOptions](ShippingRequestOptions.md).[version](ShippingRequestOptions.md#version)\n"
  },
  {
    "path": "docs/interfaces/ShippingOption.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ShippingOption\n\n# Interface: ShippingOption\n\n## Table of contents\n\n### Properties\n\n- [additionalDescription](ShippingOption.md#additionaldescription)\n- [cost](ShippingOption.md#cost)\n- [costAfterDiscount](ShippingOption.md#costafterdiscount)\n- [description](ShippingOption.md#description)\n- [id](ShippingOption.md#id)\n- [imageUrl](ShippingOption.md#imageurl)\n- [isRecommended](ShippingOption.md#isrecommended)\n- [transitTime](ShippingOption.md#transittime)\n- [type](ShippingOption.md#type)\n\n## Properties\n\n### additionalDescription\n\n• **additionalDescription**: `string`\n\n___\n\n### cost\n\n• **cost**: `number`\n\n___\n\n### costAfterDiscount\n\n• **costAfterDiscount**: `number`\n\n___\n\n### description\n\n• **description**: `string`\n\n___\n\n### id\n\n• **id**: `string`\n\n___\n\n### imageUrl\n\n• **imageUrl**: `string`\n\n___\n\n### isRecommended\n\n• **isRecommended**: `boolean`\n\n___\n\n### transitTime\n\n• **transitTime**: `string`\n\n___\n\n### type\n\n• **type**: `string`\n"
  },
  {
    "path": "docs/interfaces/ShippingRequestOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ShippingRequestOptions\n\n# Interface: ShippingRequestOptions\\<T\\>\n\nA set of options for configuring any requests related to the shipping step of\r\nthe current checkout flow.\n\nSome payment methods have their own shipping configuration flow. Therefore,\r\nyou need to specify the method you intend to use if you want to trigger a\r\nspecific flow for setting the shipping address or option. Otherwise, these\r\noptions are not required.\n\n## Type parameters\n\n| Name | Type |\n| :------ | :------ |\n| `T` | `object` |\n\n## Hierarchy\n\n- [`RequestOptions`](RequestOptions.md)\\<`T`\\>\n\n  ↳ **`ShippingRequestOptions`**\n\n  ↳↳ [`ShippingInitializeOptions`](ShippingInitializeOptions.md)\n\n## Table of contents\n\n### Properties\n\n- [methodId](ShippingRequestOptions.md#methodid)\n- [params](ShippingRequestOptions.md#params)\n- [timeout](ShippingRequestOptions.md#timeout)\n- [version](ShippingRequestOptions.md#version)\n\n## Properties\n\n### methodId\n\n• `Optional` **methodId**: `string`\n\n___\n\n### params\n\n• `Optional` **params**: `T`\n\nThe parameters of the request, if required.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[params](RequestOptions.md#params)\n\n___\n\n### timeout\n\n• `Optional` **timeout**: `default`\n\nProvide this option if you want to cancel or time out the request. If the\r\ntimeout object completes before the request, the request will be\r\ncancelled.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[timeout](RequestOptions.md#timeout)\n\n___\n\n### version\n\n• `Optional` **version**: `number`\n\nThe version of the checkout, used for optimistic concurrency control.\n\n#### Inherited from\n\n[RequestOptions](RequestOptions.md).[version](RequestOptions.md#version)\n"
  },
  {
    "path": "docs/interfaces/ShippingStrategySelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ShippingStrategySelector\n\n# Interface: ShippingStrategySelector\n\n## Table of contents\n\n### Methods\n\n- [getInitializeError](ShippingStrategySelector.md#getinitializeerror)\n- [getSelectOptionError](ShippingStrategySelector.md#getselectoptionerror)\n- [getUpdateAddressError](ShippingStrategySelector.md#getupdateaddresserror)\n- [getWidgetInteractionError](ShippingStrategySelector.md#getwidgetinteractionerror)\n- [isInitialized](ShippingStrategySelector.md#isinitialized)\n- [isInitializing](ShippingStrategySelector.md#isinitializing)\n- [isSelectingOption](ShippingStrategySelector.md#isselectingoption)\n- [isUpdatingAddress](ShippingStrategySelector.md#isupdatingaddress)\n- [isWidgetInteracting](ShippingStrategySelector.md#iswidgetinteracting)\n\n## Methods\n\n### getInitializeError\n\n▸ **getInitializeError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getSelectOptionError\n\n▸ **getSelectOptionError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getUpdateAddressError\n\n▸ **getUpdateAddressError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### getWidgetInteractionError\n\n▸ **getWidgetInteractionError**(`methodId?`): `undefined` \\| `Error`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### isInitialized\n\n▸ **isInitialized**(`methodId`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isInitializing\n\n▸ **isInitializing**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isSelectingOption\n\n▸ **isSelectingOption**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isUpdatingAddress\n\n▸ **isUpdatingAddress**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n\n___\n\n### isWidgetInteracting\n\n▸ **isWidgetInteracting**(`methodId?`): `boolean`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `methodId?` | `string` |\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/ShopperConfig.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ShopperConfig\n\n# Interface: ShopperConfig\n\n## Table of contents\n\n### Properties\n\n- [defaultNewsletterSignup](ShopperConfig.md#defaultnewslettersignup)\n- [passwordRequirements](ShopperConfig.md#passwordrequirements)\n- [showNewsletterSignup](ShopperConfig.md#shownewslettersignup)\n\n## Properties\n\n### defaultNewsletterSignup\n\n• **defaultNewsletterSignup**: `boolean`\n\n___\n\n### passwordRequirements\n\n• **passwordRequirements**: [`PasswordRequirements`](PasswordRequirements.md)\n\n___\n\n### showNewsletterSignup\n\n• **showNewsletterSignup**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/ShopperCurrency.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ShopperCurrency\n\n# Interface: ShopperCurrency\n\n## Hierarchy\n\n- [`StoreCurrency`](StoreCurrency.md)\n\n  ↳ **`ShopperCurrency`**\n\n## Table of contents\n\n### Properties\n\n- [code](ShopperCurrency.md#code)\n- [decimalPlaces](ShopperCurrency.md#decimalplaces)\n- [decimalSeparator](ShopperCurrency.md#decimalseparator)\n- [exchangeRate](ShopperCurrency.md#exchangerate)\n- [isTransactional](ShopperCurrency.md#istransactional)\n- [symbol](ShopperCurrency.md#symbol)\n- [symbolLocation](ShopperCurrency.md#symbollocation)\n- [thousandsSeparator](ShopperCurrency.md#thousandsseparator)\n\n## Properties\n\n### code\n\n• **code**: `string`\n\n#### Inherited from\n\n[StoreCurrency](StoreCurrency.md).[code](StoreCurrency.md#code)\n\n___\n\n### decimalPlaces\n\n• **decimalPlaces**: `string`\n\n#### Inherited from\n\n[StoreCurrency](StoreCurrency.md).[decimalPlaces](StoreCurrency.md#decimalplaces)\n\n___\n\n### decimalSeparator\n\n• **decimalSeparator**: `string`\n\n#### Inherited from\n\n[StoreCurrency](StoreCurrency.md).[decimalSeparator](StoreCurrency.md#decimalseparator)\n\n___\n\n### exchangeRate\n\n• **exchangeRate**: `number`\n\n___\n\n### isTransactional\n\n• **isTransactional**: `boolean`\n\n#### Overrides\n\n[StoreCurrency](StoreCurrency.md).[isTransactional](StoreCurrency.md#istransactional)\n\n___\n\n### symbol\n\n• **symbol**: `string`\n\n#### Inherited from\n\n[StoreCurrency](StoreCurrency.md).[symbol](StoreCurrency.md#symbol)\n\n___\n\n### symbolLocation\n\n• **symbolLocation**: `string`\n\n#### Inherited from\n\n[StoreCurrency](StoreCurrency.md).[symbolLocation](StoreCurrency.md#symbollocation)\n\n___\n\n### thousandsSeparator\n\n• **thousandsSeparator**: `string`\n\n#### Inherited from\n\n[StoreCurrency](StoreCurrency.md).[thousandsSeparator](StoreCurrency.md#thousandsseparator)\n"
  },
  {
    "path": "docs/interfaces/ShowLoadingIndicatorCommand.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ShowLoadingIndicatorCommand\n\n# Interface: ShowLoadingIndicatorCommand\n\n## Table of contents\n\n### Properties\n\n- [payload](ShowLoadingIndicatorCommand.md#payload)\n- [type](ShowLoadingIndicatorCommand.md#type)\n\n## Properties\n\n### payload\n\n• **payload**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `show` | `boolean` |\n\n___\n\n### type\n\n• **type**: [`ShowLoadingIndicator`](../enums/ExtensionCommandType.md#showloadingindicator)\n"
  },
  {
    "path": "docs/interfaces/SignInEmail.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / SignInEmail\n\n# Interface: SignInEmail\n\n## Table of contents\n\n### Properties\n\n- [expiry](SignInEmail.md#expiry)\n- [sent\\_email](SignInEmail.md#sent_email)\n\n## Properties\n\n### expiry\n\n• **expiry**: `number`\n\n___\n\n### sent\\_email\n\n• **sent\\_email**: `string`\n"
  },
  {
    "path": "docs/interfaces/SignInEmailRequestBody.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / SignInEmailRequestBody\n\n# Interface: SignInEmailRequestBody\n\n## Table of contents\n\n### Properties\n\n- [email](SignInEmailRequestBody.md#email)\n- [redirectUrl](SignInEmailRequestBody.md#redirecturl)\n\n## Properties\n\n### email\n\n• **email**: `string`\n\n___\n\n### redirectUrl\n\n• `Optional` **redirectUrl**: `string`\n"
  },
  {
    "path": "docs/interfaces/SignInEmailSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / SignInEmailSelector\n\n# Interface: SignInEmailSelector\n\n## Table of contents\n\n### Methods\n\n- [getEmail](SignInEmailSelector.md#getemail)\n- [getSendError](SignInEmailSelector.md#getsenderror)\n- [isSending](SignInEmailSelector.md#issending)\n\n## Methods\n\n### getEmail\n\n▸ **getEmail**(): `undefined` \\| [`SignInEmail`](SignInEmail.md)\n\n#### Returns\n\n`undefined` \\| [`SignInEmail`](SignInEmail.md)\n\n___\n\n### getSendError\n\n▸ **getSendError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### isSending\n\n▸ **isSending**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/SpamProtectionOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / SpamProtectionOptions\n\n# Interface: SpamProtectionOptions\n\nThe set of options for configuring any requests related to spam protection.\n\n## Hierarchy\n\n- `default`\n\n  ↳ **`SpamProtectionOptions`**\n\n## Table of contents\n\n### Properties\n\n- [containerId](SpamProtectionOptions.md#containerid)\n\n## Properties\n\n### containerId\n\n• **containerId**: `string`\n\nThe container ID where the spam protection should be rendered.\n"
  },
  {
    "path": "docs/interfaces/SquareV2PaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / SquareV2PaymentInitializeOptions\n\n# Interface: SquareV2PaymentInitializeOptions\n\nA set of options that are required to initialize the Square payment method.\n\nOnce Square payment is initialized, an iframed payment element will be\r\ninserted into the current page. These options provide a location, styling,\r\nand a callback function that advises when it's safe to pay.\n\n**`Example`**\n\n```html\r\n<!-- These container is where the hosted (iframed) payment method element will be inserted -->\r\n<div id=\"card-payment\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'squarev2',\r\n    squarev2: {\r\n        containerId: 'card-payment',\r\n        style: {\r\n            input: {\r\n                backgroundColor: '#F7F8F9',\r\n                color: '#373F4A',\r\n                fontFamily: 'Helvetica Neue',\r\n                fontSize: '16px',\r\n                fontWeight: 'normal'\r\n            }\r\n        },\r\n        onValidationChange: (isReadyToPay: boolean) => {\r\n            if (isReadyToPay) {\r\n                // Show or hide some component or message...\r\n            }\r\n        }\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [containerId](SquareV2PaymentInitializeOptions.md#containerid)\n- [onValidationChange](SquareV2PaymentInitializeOptions.md#onvalidationchange)\n- [style](SquareV2PaymentInitializeOptions.md#style)\n\n## Properties\n\n### containerId\n\n• **containerId**: `string`\n\nThe ID of a container which the payment widget should insert into.\n\n___\n\n### onValidationChange\n\n• `Optional` **onValidationChange**: (`isReadyToPay`: `boolean`) => `void`\n\nA callback that gets called when the validity of the\r\npayment component changes.\n\n#### Type declaration\n\n▸ (`isReadyToPay`): `void`\n\n##### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `isReadyToPay` | `boolean` |\n\n##### Returns\n\n`void`\n\n___\n\n### style\n\n• `Optional` **style**: `CardClassSelectors`\n\nA map of .css classes and values that customize the style of the\r\ninput fields from the card element.\n\nFor more information about applying custom styles to the card form, see\r\nthe available [CardClassSelectors](https://developer.squareup.com/reference/sdks/web/payments/objects/CardClassSelectors)\r\nfor styling.\n"
  },
  {
    "path": "docs/interfaces/StepStyles.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StepStyles\n\n# Interface: StepStyles\n\n## Hierarchy\n\n- [`BlockElementStyles`](BlockElementStyles.md)\n\n  ↳ **`StepStyles`**\n\n## Table of contents\n\n### Properties\n\n- [backgroundColor](StepStyles.md#backgroundcolor)\n- [borderColor](StepStyles.md#bordercolor)\n- [borderWidth](StepStyles.md#borderwidth)\n- [boxShadow](StepStyles.md#boxshadow)\n- [color](StepStyles.md#color)\n- [fontFamily](StepStyles.md#fontfamily)\n- [fontWeight](StepStyles.md#fontweight)\n- [icon](StepStyles.md#icon)\n- [letterSpacing](StepStyles.md#letterspacing)\n- [lineHeight](StepStyles.md#lineheight)\n\n## Properties\n\n### backgroundColor\n\n• `Optional` **backgroundColor**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[backgroundColor](BlockElementStyles.md#backgroundcolor)\n\n___\n\n### borderColor\n\n• `Optional` **borderColor**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[borderColor](BlockElementStyles.md#bordercolor)\n\n___\n\n### borderWidth\n\n• `Optional` **borderWidth**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[borderWidth](BlockElementStyles.md#borderwidth)\n\n___\n\n### boxShadow\n\n• `Optional` **boxShadow**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[boxShadow](BlockElementStyles.md#boxshadow)\n\n___\n\n### color\n\n• `Optional` **color**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[color](BlockElementStyles.md#color)\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[fontFamily](BlockElementStyles.md#fontfamily)\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[fontWeight](BlockElementStyles.md#fontweight)\n\n___\n\n### icon\n\n• `Optional` **icon**: [`BlockElementStyles`](BlockElementStyles.md)\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[letterSpacing](BlockElementStyles.md#letterspacing)\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n\n#### Inherited from\n\n[BlockElementStyles](BlockElementStyles.md).[lineHeight](BlockElementStyles.md#lineheight)\n"
  },
  {
    "path": "docs/interfaces/StepTracker.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StepTracker\n\n# Interface: StepTracker\n\n## Table of contents\n\n### Methods\n\n- [trackCheckoutStarted](StepTracker.md#trackcheckoutstarted)\n- [trackOrderComplete](StepTracker.md#trackordercomplete)\n- [trackStepCompleted](StepTracker.md#trackstepcompleted)\n- [trackStepViewed](StepTracker.md#trackstepviewed)\n\n## Methods\n\n### trackCheckoutStarted\n\n▸ **trackCheckoutStarted**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### trackOrderComplete\n\n▸ **trackOrderComplete**(): `void`\n\n#### Returns\n\n`void`\n\n___\n\n### trackStepCompleted\n\n▸ **trackStepCompleted**(`step`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `step` | `string` |\n\n#### Returns\n\n`void`\n\n___\n\n### trackStepViewed\n\n▸ **trackStepViewed**(`step`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `step` | `string` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/StepTrackerConfig.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StepTrackerConfig\n\n# Interface: StepTrackerConfig\n\n## Table of contents\n\n### Properties\n\n- [checkoutSteps](StepTrackerConfig.md#checkoutsteps)\n\n## Properties\n\n### checkoutSteps\n\n• `Optional` **checkoutSteps**: [`AnalyticStepType`](../README.md#analyticsteptype)[]\n"
  },
  {
    "path": "docs/interfaces/StockPosition.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StockPosition\n\n# Interface: StockPosition\n\n## Table of contents\n\n### Properties\n\n- [backorderMessage](StockPosition.md#backordermessage)\n- [quantityBackordered](StockPosition.md#quantitybackordered)\n- [quantityOnHand](StockPosition.md#quantityonhand)\n- [quantityOutOfStock](StockPosition.md#quantityoutofstock)\n\n## Properties\n\n### backorderMessage\n\n• **backorderMessage**: ``null`` \\| `string`\n\n___\n\n### quantityBackordered\n\n• **quantityBackordered**: `number`\n\n___\n\n### quantityOnHand\n\n• **quantityOnHand**: `number`\n\n___\n\n### quantityOutOfStock\n\n• **quantityOutOfStock**: `number`\n"
  },
  {
    "path": "docs/interfaces/StoreConfig.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StoreConfig\n\n# Interface: StoreConfig\n\n## Table of contents\n\n### Properties\n\n- [b2bApiSettings](StoreConfig.md#b2bapisettings)\n- [cdnPath](StoreConfig.md#cdnpath)\n- [checkoutSettings](StoreConfig.md#checkoutsettings)\n- [currency](StoreConfig.md#currency)\n- [displayDateFormat](StoreConfig.md#displaydateformat)\n- [displaySettings](StoreConfig.md#displaysettings)\n- [formFields](StoreConfig.md#formfields)\n- [imageDirectory](StoreConfig.md#imagedirectory)\n- [inputDateFormat](StoreConfig.md#inputdateformat)\n- [inventorySettings](StoreConfig.md#inventorysettings)\n- [isAngularDebuggingEnabled](StoreConfig.md#isangulardebuggingenabled)\n- [links](StoreConfig.md#links)\n- [paymentSettings](StoreConfig.md#paymentsettings)\n- [shopperConfig](StoreConfig.md#shopperconfig)\n- [shopperCurrency](StoreConfig.md#shoppercurrency)\n- [storeProfile](StoreConfig.md#storeprofile)\n\n## Properties\n\n### b2bApiSettings\n\n• `Optional` **b2bApiSettings**: [`B2BApiSettings`](B2BApiSettings.md)\n\n___\n\n### cdnPath\n\n• **cdnPath**: `string`\n\n___\n\n### checkoutSettings\n\n• **checkoutSettings**: [`CheckoutSettings`](CheckoutSettings.md)\n\n___\n\n### currency\n\n• **currency**: [`StoreCurrency`](StoreCurrency.md)\n\n___\n\n### displayDateFormat\n\n• **displayDateFormat**: `string`\n\n___\n\n### displaySettings\n\n• **displaySettings**: [`DisplaySettings`](DisplaySettings.md)\n\n___\n\n### formFields\n\n• **formFields**: [`FormFields`](FormFields.md)\n\n**`Deprecated`**\n\nPlease use instead the data selectors\n\n**`Remarks`**\n\n```js\r\nconst data = CheckoutService.getState().data;\r\nconst shippingAddressFields = data.getShippingAddressFields('US');\r\nconst billingAddressFields = data.getBillingAddressFields('US');\r\nconst customerAccountFields = data.getCustomerAccountFields();\r\n```\n\n___\n\n### imageDirectory\n\n• **imageDirectory**: `string`\n\n___\n\n### inputDateFormat\n\n• **inputDateFormat**: `string`\n\n___\n\n### inventorySettings\n\n• `Optional` **inventorySettings**: [`InventorySettings`](InventorySettings.md)\n\n___\n\n### isAngularDebuggingEnabled\n\n• **isAngularDebuggingEnabled**: `boolean`\n\n___\n\n### links\n\n• **links**: [`StoreLinks`](StoreLinks.md)\n\n___\n\n### paymentSettings\n\n• **paymentSettings**: [`PaymentSettings`](PaymentSettings.md)\n\n___\n\n### shopperConfig\n\n• **shopperConfig**: [`ShopperConfig`](ShopperConfig.md)\n\n___\n\n### shopperCurrency\n\n• **shopperCurrency**: [`ShopperCurrency`](ShopperCurrency.md)\n\n___\n\n### storeProfile\n\n• **storeProfile**: [`StoreProfile`](StoreProfile.md)\n"
  },
  {
    "path": "docs/interfaces/StoreCreditSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StoreCreditSelector\n\n# Interface: StoreCreditSelector\n\n## Table of contents\n\n### Methods\n\n- [getApplyError](StoreCreditSelector.md#getapplyerror)\n- [isApplying](StoreCreditSelector.md#isapplying)\n\n## Methods\n\n### getApplyError\n\n▸ **getApplyError**(): `undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\n#### Returns\n\n`undefined` \\| [`RequestError`](../classes/RequestError.md)\\<`any`\\>\n\n___\n\n### isApplying\n\n▸ **isApplying**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/StoreCurrency.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StoreCurrency\n\n# Interface: StoreCurrency\n\n## Hierarchy\n\n- **`StoreCurrency`**\n\n  ↳ [`ShopperCurrency`](ShopperCurrency.md)\n\n## Table of contents\n\n### Properties\n\n- [code](StoreCurrency.md#code)\n- [decimalPlaces](StoreCurrency.md#decimalplaces)\n- [decimalSeparator](StoreCurrency.md#decimalseparator)\n- [isTransactional](StoreCurrency.md#istransactional)\n- [symbol](StoreCurrency.md#symbol)\n- [symbolLocation](StoreCurrency.md#symbollocation)\n- [thousandsSeparator](StoreCurrency.md#thousandsseparator)\n\n## Properties\n\n### code\n\n• **code**: `string`\n\n___\n\n### decimalPlaces\n\n• **decimalPlaces**: `string`\n\n___\n\n### decimalSeparator\n\n• **decimalSeparator**: `string`\n\n___\n\n### isTransactional\n\n• **isTransactional**: `boolean`\n\n___\n\n### symbol\n\n• **symbol**: `string`\n\n___\n\n### symbolLocation\n\n• **symbolLocation**: `string`\n\n___\n\n### thousandsSeparator\n\n• **thousandsSeparator**: `string`\n"
  },
  {
    "path": "docs/interfaces/StoreLinks.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StoreLinks\n\n# Interface: StoreLinks\n\n## Table of contents\n\n### Properties\n\n- [baseUrl](StoreLinks.md#baseurl)\n- [cartLink](StoreLinks.md#cartlink)\n- [checkoutLink](StoreLinks.md#checkoutlink)\n- [createAccountLink](StoreLinks.md#createaccountlink)\n- [forgotPasswordLink](StoreLinks.md#forgotpasswordlink)\n- [loginLink](StoreLinks.md#loginlink)\n- [logoutLink](StoreLinks.md#logoutlink)\n- [orderConfirmationLink](StoreLinks.md#orderconfirmationlink)\n- [siteLink](StoreLinks.md#sitelink)\n\n## Properties\n\n### baseUrl\n\n• `Optional` **baseUrl**: ``null`` \\| `string`\n\n___\n\n### cartLink\n\n• **cartLink**: `string`\n\n___\n\n### checkoutLink\n\n• **checkoutLink**: `string`\n\n___\n\n### createAccountLink\n\n• **createAccountLink**: `string`\n\n___\n\n### forgotPasswordLink\n\n• **forgotPasswordLink**: `string`\n\n___\n\n### loginLink\n\n• **loginLink**: `string`\n\n___\n\n### logoutLink\n\n• **logoutLink**: `string`\n\n___\n\n### orderConfirmationLink\n\n• **orderConfirmationLink**: `string`\n\n___\n\n### siteLink\n\n• **siteLink**: `string`\n"
  },
  {
    "path": "docs/interfaces/StoreProfile.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StoreProfile\n\n# Interface: StoreProfile\n\n## Table of contents\n\n### Properties\n\n- [orderEmail](StoreProfile.md#orderemail)\n- [shopPath](StoreProfile.md#shoppath)\n- [storeCountry](StoreProfile.md#storecountry)\n- [storeCountryCode](StoreProfile.md#storecountrycode)\n- [storeHash](StoreProfile.md#storehash)\n- [storeId](StoreProfile.md#storeid)\n- [storeLanguage](StoreProfile.md#storelanguage)\n- [storeName](StoreProfile.md#storename)\n- [storePhoneNumber](StoreProfile.md#storephonenumber)\n\n## Properties\n\n### orderEmail\n\n• **orderEmail**: `string`\n\n___\n\n### shopPath\n\n• **shopPath**: `string`\n\n___\n\n### storeCountry\n\n• **storeCountry**: `string`\n\n___\n\n### storeCountryCode\n\n• **storeCountryCode**: `string`\n\n___\n\n### storeHash\n\n• **storeHash**: `string`\n\n___\n\n### storeId\n\n• **storeId**: `string`\n\n___\n\n### storeLanguage\n\n• **storeLanguage**: `string`\n\n___\n\n### storeName\n\n• **storeName**: `string`\n\n___\n\n### storePhoneNumber\n\n• **storePhoneNumber**: `string`\n"
  },
  {
    "path": "docs/interfaces/StoredCardHostedFormBillingAddress.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StoredCardHostedFormBillingAddress\n\n# Interface: StoredCardHostedFormBillingAddress\n\n## Hierarchy\n\n- **`StoredCardHostedFormBillingAddress`**\n\n  ↳ [`StoredCardHostedFormInstrumentFields`](StoredCardHostedFormInstrumentFields.md)\n\n## Table of contents\n\n### Properties\n\n- [address1](StoredCardHostedFormBillingAddress.md#address1)\n- [address2](StoredCardHostedFormBillingAddress.md#address2)\n- [city](StoredCardHostedFormBillingAddress.md#city)\n- [company](StoredCardHostedFormBillingAddress.md#company)\n- [countryCode](StoredCardHostedFormBillingAddress.md#countrycode)\n- [email](StoredCardHostedFormBillingAddress.md#email)\n- [firstName](StoredCardHostedFormBillingAddress.md#firstname)\n- [lastName](StoredCardHostedFormBillingAddress.md#lastname)\n- [phone](StoredCardHostedFormBillingAddress.md#phone)\n- [postalCode](StoredCardHostedFormBillingAddress.md#postalcode)\n- [stateOrProvinceCode](StoredCardHostedFormBillingAddress.md#stateorprovincecode)\n\n## Properties\n\n### address1\n\n• **address1**: `string`\n\n___\n\n### address2\n\n• `Optional` **address2**: `string`\n\n___\n\n### city\n\n• **city**: `string`\n\n___\n\n### company\n\n• `Optional` **company**: `string`\n\n___\n\n### countryCode\n\n• **countryCode**: `string`\n\n___\n\n### email\n\n• **email**: `string`\n\n___\n\n### firstName\n\n• **firstName**: `string`\n\n___\n\n### lastName\n\n• **lastName**: `string`\n\n___\n\n### phone\n\n• `Optional` **phone**: `string`\n\n___\n\n### postalCode\n\n• **postalCode**: `string`\n\n___\n\n### stateOrProvinceCode\n\n• `Optional` **stateOrProvinceCode**: `string`\n"
  },
  {
    "path": "docs/interfaces/StoredCardHostedFormData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StoredCardHostedFormData\n\n# Interface: StoredCardHostedFormData\n\n## Table of contents\n\n### Properties\n\n- [currencyCode](StoredCardHostedFormData.md#currencycode)\n- [paymentsUrl](StoredCardHostedFormData.md#paymentsurl)\n- [providerId](StoredCardHostedFormData.md#providerid)\n- [shopperId](StoredCardHostedFormData.md#shopperid)\n- [storeHash](StoredCardHostedFormData.md#storehash)\n- [vaultToken](StoredCardHostedFormData.md#vaulttoken)\n\n## Properties\n\n### currencyCode\n\n• **currencyCode**: `string`\n\n___\n\n### paymentsUrl\n\n• **paymentsUrl**: `string`\n\n___\n\n### providerId\n\n• **providerId**: `string`\n\n___\n\n### shopperId\n\n• **shopperId**: `string`\n\n___\n\n### storeHash\n\n• **storeHash**: `string`\n\n___\n\n### vaultToken\n\n• **vaultToken**: `string`\n"
  },
  {
    "path": "docs/interfaces/StoredCardHostedFormInstrumentFields.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StoredCardHostedFormInstrumentFields\n\n# Interface: StoredCardHostedFormInstrumentFields\n\n## Hierarchy\n\n- [`StoredCardHostedFormBillingAddress`](StoredCardHostedFormBillingAddress.md)\n\n  ↳ **`StoredCardHostedFormInstrumentFields`**\n\n## Table of contents\n\n### Properties\n\n- [address1](StoredCardHostedFormInstrumentFields.md#address1)\n- [address2](StoredCardHostedFormInstrumentFields.md#address2)\n- [city](StoredCardHostedFormInstrumentFields.md#city)\n- [company](StoredCardHostedFormInstrumentFields.md#company)\n- [countryCode](StoredCardHostedFormInstrumentFields.md#countrycode)\n- [defaultInstrument](StoredCardHostedFormInstrumentFields.md#defaultinstrument)\n- [email](StoredCardHostedFormInstrumentFields.md#email)\n- [firstName](StoredCardHostedFormInstrumentFields.md#firstname)\n- [lastName](StoredCardHostedFormInstrumentFields.md#lastname)\n- [phone](StoredCardHostedFormInstrumentFields.md#phone)\n- [postalCode](StoredCardHostedFormInstrumentFields.md#postalcode)\n- [stateOrProvinceCode](StoredCardHostedFormInstrumentFields.md#stateorprovincecode)\n\n## Properties\n\n### address1\n\n• **address1**: `string`\n\n#### Inherited from\n\n[StoredCardHostedFormBillingAddress](StoredCardHostedFormBillingAddress.md).[address1](StoredCardHostedFormBillingAddress.md#address1)\n\n___\n\n### address2\n\n• `Optional` **address2**: `string`\n\n#### Inherited from\n\n[StoredCardHostedFormBillingAddress](StoredCardHostedFormBillingAddress.md).[address2](StoredCardHostedFormBillingAddress.md#address2)\n\n___\n\n### city\n\n• **city**: `string`\n\n#### Inherited from\n\n[StoredCardHostedFormBillingAddress](StoredCardHostedFormBillingAddress.md).[city](StoredCardHostedFormBillingAddress.md#city)\n\n___\n\n### company\n\n• `Optional` **company**: `string`\n\n#### Inherited from\n\n[StoredCardHostedFormBillingAddress](StoredCardHostedFormBillingAddress.md).[company](StoredCardHostedFormBillingAddress.md#company)\n\n___\n\n### countryCode\n\n• **countryCode**: `string`\n\n#### Inherited from\n\n[StoredCardHostedFormBillingAddress](StoredCardHostedFormBillingAddress.md).[countryCode](StoredCardHostedFormBillingAddress.md#countrycode)\n\n___\n\n### defaultInstrument\n\n• **defaultInstrument**: `boolean`\n\n___\n\n### email\n\n• **email**: `string`\n\n#### Inherited from\n\n[StoredCardHostedFormBillingAddress](StoredCardHostedFormBillingAddress.md).[email](StoredCardHostedFormBillingAddress.md#email)\n\n___\n\n### firstName\n\n• **firstName**: `string`\n\n#### Inherited from\n\n[StoredCardHostedFormBillingAddress](StoredCardHostedFormBillingAddress.md).[firstName](StoredCardHostedFormBillingAddress.md#firstname)\n\n___\n\n### lastName\n\n• **lastName**: `string`\n\n#### Inherited from\n\n[StoredCardHostedFormBillingAddress](StoredCardHostedFormBillingAddress.md).[lastName](StoredCardHostedFormBillingAddress.md#lastname)\n\n___\n\n### phone\n\n• `Optional` **phone**: `string`\n\n#### Inherited from\n\n[StoredCardHostedFormBillingAddress](StoredCardHostedFormBillingAddress.md).[phone](StoredCardHostedFormBillingAddress.md#phone)\n\n___\n\n### postalCode\n\n• **postalCode**: `string`\n\n#### Inherited from\n\n[StoredCardHostedFormBillingAddress](StoredCardHostedFormBillingAddress.md).[postalCode](StoredCardHostedFormBillingAddress.md#postalcode)\n\n___\n\n### stateOrProvinceCode\n\n• `Optional` **stateOrProvinceCode**: `string`\n\n#### Inherited from\n\n[StoredCardHostedFormBillingAddress](StoredCardHostedFormBillingAddress.md).[stateOrProvinceCode](StoredCardHostedFormBillingAddress.md#stateorprovincecode)\n"
  },
  {
    "path": "docs/interfaces/StripeElementCSSProperties.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StripeElementCSSProperties\n\n# Interface: StripeElementCSSProperties\n\nCSS properties supported by Stripe.js.\n\n## Hierarchy\n\n- **`StripeElementCSSProperties`**\n\n  ↳ [`StripeElementStyleVariant`](StripeElementStyleVariant.md)\n\n## Table of contents\n\n### Properties\n\n- [backgroundColor](StripeElementCSSProperties.md#backgroundcolor)\n- [color](StripeElementCSSProperties.md#color)\n- [fontFamily](StripeElementCSSProperties.md#fontfamily)\n- [fontSize](StripeElementCSSProperties.md#fontsize)\n- [fontSmoothing](StripeElementCSSProperties.md#fontsmoothing)\n- [fontStyle](StripeElementCSSProperties.md#fontstyle)\n- [fontVariant](StripeElementCSSProperties.md#fontvariant)\n- [fontWeight](StripeElementCSSProperties.md#fontweight)\n- [iconColor](StripeElementCSSProperties.md#iconcolor)\n- [letterSpacing](StripeElementCSSProperties.md#letterspacing)\n- [lineHeight](StripeElementCSSProperties.md#lineheight)\n- [padding](StripeElementCSSProperties.md#padding)\n- [textAlign](StripeElementCSSProperties.md#textalign)\n- [textDecoration](StripeElementCSSProperties.md#textdecoration)\n- [textShadow](StripeElementCSSProperties.md#textshadow)\n- [textTransform](StripeElementCSSProperties.md#texttransform)\n\n## Properties\n\n### backgroundColor\n\n• `Optional` **backgroundColor**: `string`\n\nThe [background-color](https://developer.mozilla.org/en-US/docs/Web/CSS/background-color) CSS property.\n\nThis property works best with the `::selection` pseudo-class.\r\nIn other cases, consider setting the background color on the element's container instaed.\n\n___\n\n### color\n\n• `Optional` **color**: `string`\n\nThe [color](https://developer.mozilla.org/en-US/docs/Web/CSS/color) CSS property.\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\nThe [font-family](https://developer.mozilla.org/en-US/docs/Web/CSS/font-family) CSS property.\n\n___\n\n### fontSize\n\n• `Optional` **fontSize**: `string`\n\nThe [font-size](https://developer.mozilla.org/en-US/docs/Web/CSS/font-size) CSS property.\n\n___\n\n### fontSmoothing\n\n• `Optional` **fontSmoothing**: `string`\n\nThe [font-smoothing](https://developer.mozilla.org/en-US/docs/Web/CSS/font-smoothing) CSS property.\n\n___\n\n### fontStyle\n\n• `Optional` **fontStyle**: `string`\n\nThe [font-style](https://developer.mozilla.org/en-US/docs/Web/CSS/font-style) CSS property.\n\n___\n\n### fontVariant\n\n• `Optional` **fontVariant**: `string`\n\nThe [font-variant](https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant) CSS property.\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\nThe [font-weight](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight) CSS property.\n\n___\n\n### iconColor\n\n• `Optional` **iconColor**: `string`\n\nA custom property, used to set the color of the icons that are rendered in an element.\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\nThe [letter-spacing](https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing) CSS property.\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n\nThe [line-height](https://developer.mozilla.org/en-US/docs/Web/CSS/line-height) CSS property.\n\nTo avoid cursors being rendered inconsistently across browsers, consider using a padding on the element's container instead.\n\n___\n\n### padding\n\n• `Optional` **padding**: `string`\n\nThe [padding](https://developer.mozilla.org/en-US/docs/Web/CSS/padding) CSS property.\n\nAvailable for the `idealBank` element.\r\nAccepts integer `px` values.\n\n___\n\n### textAlign\n\n• `Optional` **textAlign**: `string`\n\nThe [text-align](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align) CSS property.\n\nAvailable for the `cardNumber`, `cardExpiry`, and `cardCvc` elements.\n\n___\n\n### textDecoration\n\n• `Optional` **textDecoration**: `string`\n\nThe [text-decoration](https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration) CSS property.\n\n___\n\n### textShadow\n\n• `Optional` **textShadow**: `string`\n\nThe [text-shadow](https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow) CSS property.\n\n___\n\n### textTransform\n\n• `Optional` **textTransform**: `string`\n\nThe [text-transform](https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform) CSS property.\n"
  },
  {
    "path": "docs/interfaces/StripeElementClasses.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StripeElementClasses\n\n# Interface: StripeElementClasses\n\n## Table of contents\n\n### Properties\n\n- [base](StripeElementClasses.md#base)\n- [complete](StripeElementClasses.md#complete)\n- [empty](StripeElementClasses.md#empty)\n- [focus](StripeElementClasses.md#focus)\n- [invalid](StripeElementClasses.md#invalid)\n- [webkitAutoFill](StripeElementClasses.md#webkitautofill)\n\n## Properties\n\n### base\n\n• `Optional` **base**: `string`\n\nThe base class applied to the container. Defaults to StripeElement.\n\n___\n\n### complete\n\n• `Optional` **complete**: `string`\n\nThe class name to apply when the Element is complete. Defaults to StripeElement--complete.\n\n___\n\n### empty\n\n• `Optional` **empty**: `string`\n\nThe class name to apply when the Element is empty. Defaults to StripeElement--empty.\n\n___\n\n### focus\n\n• `Optional` **focus**: `string`\n\nThe class name to apply when the Element is focused. Defaults to StripeElement--focus.\n\n___\n\n### invalid\n\n• `Optional` **invalid**: `string`\n\nThe class name to apply when the Element is invalid. Defaults to StripeElement--invalid.\n\n___\n\n### webkitAutoFill\n\n• `Optional` **webkitAutoFill**: `string`\n\nThe class name to apply when the Element has its value autofilled by the browser\r\n(only on Chrome and Safari). Defaults to StripeElement--webkit-autofill.\n"
  },
  {
    "path": "docs/interfaces/StripeElementStyle.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StripeElementStyle\n\n# Interface: StripeElementStyle\n\n## Table of contents\n\n### Properties\n\n- [base](StripeElementStyle.md#base)\n- [complete](StripeElementStyle.md#complete)\n- [empty](StripeElementStyle.md#empty)\n- [invalid](StripeElementStyle.md#invalid)\n\n## Properties\n\n### base\n\n• `Optional` **base**: [`StripeElementStyleVariant`](StripeElementStyleVariant.md)\n\nBase variant—all other variants inherit from these styles.\n\n___\n\n### complete\n\n• `Optional` **complete**: [`StripeElementStyleVariant`](StripeElementStyleVariant.md)\n\nApplied when the element has valid input.\n\n___\n\n### empty\n\n• `Optional` **empty**: [`StripeElementStyleVariant`](StripeElementStyleVariant.md)\n\nApplied when the element has no customer input.\n\n___\n\n### invalid\n\n• `Optional` **invalid**: [`StripeElementStyleVariant`](StripeElementStyleVariant.md)\n\nApplied when the element has invalid input.\n"
  },
  {
    "path": "docs/interfaces/StripeElementStyleVariant.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StripeElementStyleVariant\n\n# Interface: StripeElementStyleVariant\n\nCSS properties supported by Stripe.js.\n\n## Hierarchy\n\n- [`StripeElementCSSProperties`](StripeElementCSSProperties.md)\n\n  ↳ **`StripeElementStyleVariant`**\n\n## Table of contents\n\n### Properties\n\n- [:-webkit-autofill](StripeElementStyleVariant.md#:-webkit-autofill)\n- [::-ms-clear](StripeElementStyleVariant.md#::-ms-clear)\n- [::placeholder](StripeElementStyleVariant.md#::placeholder)\n- [::selection](StripeElementStyleVariant.md#::selection)\n- [:disabled](StripeElementStyleVariant.md#:disabled)\n- [:focus](StripeElementStyleVariant.md#:focus)\n- [:hover](StripeElementStyleVariant.md#:hover)\n- [backgroundColor](StripeElementStyleVariant.md#backgroundcolor)\n- [color](StripeElementStyleVariant.md#color)\n- [fontFamily](StripeElementStyleVariant.md#fontfamily)\n- [fontSize](StripeElementStyleVariant.md#fontsize)\n- [fontSmoothing](StripeElementStyleVariant.md#fontsmoothing)\n- [fontStyle](StripeElementStyleVariant.md#fontstyle)\n- [fontVariant](StripeElementStyleVariant.md#fontvariant)\n- [fontWeight](StripeElementStyleVariant.md#fontweight)\n- [iconColor](StripeElementStyleVariant.md#iconcolor)\n- [letterSpacing](StripeElementStyleVariant.md#letterspacing)\n- [lineHeight](StripeElementStyleVariant.md#lineheight)\n- [padding](StripeElementStyleVariant.md#padding)\n- [textAlign](StripeElementStyleVariant.md#textalign)\n- [textDecoration](StripeElementStyleVariant.md#textdecoration)\n- [textShadow](StripeElementStyleVariant.md#textshadow)\n- [textTransform](StripeElementStyleVariant.md#texttransform)\n\n## Properties\n\n### :-webkit-autofill\n\n• `Optional` **:-webkit-autofill**: [`StripeElementCSSProperties`](StripeElementCSSProperties.md)\n\n___\n\n### ::-ms-clear\n\n• `Optional` **::-ms-clear**: [`StripeElementCSSProperties`](StripeElementCSSProperties.md) & \\{ `display`: `string`  }\n\nAvailable for the `cardNumber`, `cardExpiry`, and `cardCvc` elements.\n\n___\n\n### ::placeholder\n\n• `Optional` **::placeholder**: [`StripeElementCSSProperties`](StripeElementCSSProperties.md)\n\n___\n\n### ::selection\n\n• `Optional` **::selection**: [`StripeElementCSSProperties`](StripeElementCSSProperties.md)\n\n___\n\n### :disabled\n\n• `Optional` **:disabled**: [`StripeElementCSSProperties`](StripeElementCSSProperties.md)\n\nAvailable for all elements except the `paymentRequestButton` element\n\n___\n\n### :focus\n\n• `Optional` **:focus**: [`StripeElementCSSProperties`](StripeElementCSSProperties.md)\n\n___\n\n### :hover\n\n• `Optional` **:hover**: [`StripeElementCSSProperties`](StripeElementCSSProperties.md)\n\n___\n\n### backgroundColor\n\n• `Optional` **backgroundColor**: `string`\n\nThe [background-color](https://developer.mozilla.org/en-US/docs/Web/CSS/background-color) CSS property.\n\nThis property works best with the `::selection` pseudo-class.\r\nIn other cases, consider setting the background color on the element's container instaed.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[backgroundColor](StripeElementCSSProperties.md#backgroundcolor)\n\n___\n\n### color\n\n• `Optional` **color**: `string`\n\nThe [color](https://developer.mozilla.org/en-US/docs/Web/CSS/color) CSS property.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[color](StripeElementCSSProperties.md#color)\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\nThe [font-family](https://developer.mozilla.org/en-US/docs/Web/CSS/font-family) CSS property.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[fontFamily](StripeElementCSSProperties.md#fontfamily)\n\n___\n\n### fontSize\n\n• `Optional` **fontSize**: `string`\n\nThe [font-size](https://developer.mozilla.org/en-US/docs/Web/CSS/font-size) CSS property.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[fontSize](StripeElementCSSProperties.md#fontsize)\n\n___\n\n### fontSmoothing\n\n• `Optional` **fontSmoothing**: `string`\n\nThe [font-smoothing](https://developer.mozilla.org/en-US/docs/Web/CSS/font-smoothing) CSS property.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[fontSmoothing](StripeElementCSSProperties.md#fontsmoothing)\n\n___\n\n### fontStyle\n\n• `Optional` **fontStyle**: `string`\n\nThe [font-style](https://developer.mozilla.org/en-US/docs/Web/CSS/font-style) CSS property.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[fontStyle](StripeElementCSSProperties.md#fontstyle)\n\n___\n\n### fontVariant\n\n• `Optional` **fontVariant**: `string`\n\nThe [font-variant](https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant) CSS property.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[fontVariant](StripeElementCSSProperties.md#fontvariant)\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\nThe [font-weight](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight) CSS property.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[fontWeight](StripeElementCSSProperties.md#fontweight)\n\n___\n\n### iconColor\n\n• `Optional` **iconColor**: `string`\n\nA custom property, used to set the color of the icons that are rendered in an element.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[iconColor](StripeElementCSSProperties.md#iconcolor)\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\nThe [letter-spacing](https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing) CSS property.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[letterSpacing](StripeElementCSSProperties.md#letterspacing)\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n\nThe [line-height](https://developer.mozilla.org/en-US/docs/Web/CSS/line-height) CSS property.\n\nTo avoid cursors being rendered inconsistently across browsers, consider using a padding on the element's container instead.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[lineHeight](StripeElementCSSProperties.md#lineheight)\n\n___\n\n### padding\n\n• `Optional` **padding**: `string`\n\nThe [padding](https://developer.mozilla.org/en-US/docs/Web/CSS/padding) CSS property.\n\nAvailable for the `idealBank` element.\r\nAccepts integer `px` values.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[padding](StripeElementCSSProperties.md#padding)\n\n___\n\n### textAlign\n\n• `Optional` **textAlign**: `string`\n\nThe [text-align](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align) CSS property.\n\nAvailable for the `cardNumber`, `cardExpiry`, and `cardCvc` elements.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[textAlign](StripeElementCSSProperties.md#textalign)\n\n___\n\n### textDecoration\n\n• `Optional` **textDecoration**: `string`\n\nThe [text-decoration](https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration) CSS property.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[textDecoration](StripeElementCSSProperties.md#textdecoration)\n\n___\n\n### textShadow\n\n• `Optional` **textShadow**: `string`\n\nThe [text-shadow](https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow) CSS property.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[textShadow](StripeElementCSSProperties.md#textshadow)\n\n___\n\n### textTransform\n\n• `Optional` **textTransform**: `string`\n\nThe [text-transform](https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform) CSS property.\n\n#### Inherited from\n\n[StripeElementCSSProperties](StripeElementCSSProperties.md).[textTransform](StripeElementCSSProperties.md#texttransform)\n"
  },
  {
    "path": "docs/interfaces/StripeOCSPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StripeOCSPaymentInitializeOptions\n\n# Interface: StripeOCSPaymentInitializeOptions\n\nA set of options that are required to initialize the Stripe payment method.\n\nOnce Stripe payment is initialized, credit card form fields, provided by the\r\npayment provider as iframes, will be inserted into the current page. These\r\noptions provide a location and styling for each of the form fields.\n\n```html\r\n<!-- This is where the credit card component will be inserted -->\r\n<div id=\"container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    gateway: 'stripeocs',\r\n    id: 'optimized_checkout',\r\n    stripeocs {\r\n        containerId: 'container',\r\n    },\r\n});\r\n```\n\n## Hierarchy\n\n- `default`\n\n  ↳ **`StripeOCSPaymentInitializeOptions`**\n\n## Table of contents\n\n### Properties\n\n- [appearance](StripeOCSPaymentInitializeOptions.md#appearance)\n- [containerId](StripeOCSPaymentInitializeOptions.md#containerid)\n- [currencySelectorContainerId](StripeOCSPaymentInitializeOptions.md#currencyselectorcontainerid)\n- [fonts](StripeOCSPaymentInitializeOptions.md#fonts)\n- [layout](StripeOCSPaymentInitializeOptions.md#layout)\n- [style](StripeOCSPaymentInitializeOptions.md#style)\n\n### Methods\n\n- [handleClosePaymentMethod](StripeOCSPaymentInitializeOptions.md#handleclosepaymentmethod)\n- [onError](StripeOCSPaymentInitializeOptions.md#onerror)\n- [paymentMethodSelect](StripeOCSPaymentInitializeOptions.md#paymentmethodselect)\n- [render](StripeOCSPaymentInitializeOptions.md#render)\n- [togglePreloader](StripeOCSPaymentInitializeOptions.md#togglepreloader)\n\n## Properties\n\n### appearance\n\n• `Optional` **appearance**: `StripeAppearanceOptions`\n\nStripe OCS appearance options for styling the accordion.\n\n___\n\n### containerId\n\n• **containerId**: `string`\n\nThe location to insert the credit card number form field.\n\n#### Overrides\n\nStripePaymentInitializeOptions.containerId\n\n___\n\n### currencySelectorContainerId\n\n• `Optional` **currencySelectorContainerId**: `string`\n\nThe location to insert the currency selector form field.\n\n___\n\n### fonts\n\n• `Optional` **fonts**: `StripeCustomFont`[]\n\nStripe OCS fonts options for styling the accordion.\n\n___\n\n### layout\n\n• `Optional` **layout**: `Record`\\<`string`, `string` \\| `number` \\| `boolean`\\>\n\nStripe OCS layout options\n\n___\n\n### style\n\n• `Optional` **style**: `Record`\\<`string`, `StripeAppearanceValues`\\>\n\nCheckout styles from store theme\n\n#### Overrides\n\nStripePaymentInitializeOptions.style\n\n## Methods\n\n### handleClosePaymentMethod\n\n▸ **handleClosePaymentMethod**(`collapseElement`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `collapseElement` | () => `void` |\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error?`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error?` | `Error` |\n\n#### Returns\n\n`void`\n\n#### Overrides\n\nStripePaymentInitializeOptions.onError\n\n___\n\n### paymentMethodSelect\n\n▸ **paymentMethodSelect**(`id`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `id` | `string` |\n\n#### Returns\n\n`void`\n\n___\n\n### render\n\n▸ **render**(): `void`\n\n#### Returns\n\n`void`\n\n#### Overrides\n\nStripePaymentInitializeOptions.render\n\n___\n\n### togglePreloader\n\n▸ **togglePreloader**(`showLoader`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `showLoader` | `boolean` |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/StripeUPECustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StripeUPECustomerInitializeOptions\n\n# Interface: StripeUPECustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [container](StripeUPECustomerInitializeOptions.md#container)\n- [gatewayId](StripeUPECustomerInitializeOptions.md#gatewayid)\n- [methodId](StripeUPECustomerInitializeOptions.md#methodid)\n\n### Methods\n\n- [getStyles](StripeUPECustomerInitializeOptions.md#getstyles)\n- [isLoading](StripeUPECustomerInitializeOptions.md#isloading)\n- [onEmailChange](StripeUPECustomerInitializeOptions.md#onemailchange)\n\n## Properties\n\n### container\n\n• **container**: `string`\n\nThe ID of a container which the stripe iframe should be inserted.\n\n___\n\n### gatewayId\n\n• **gatewayId**: `string`\n\nThe identifier of the payment provider providing the payment method. This\r\noption is only required if the provider offers multiple payment options.\r\ni.e.: Stripeupe and Klarna.\n\n___\n\n### methodId\n\n• **methodId**: `string`\n\nThe identifier of the payment method.\n\n## Methods\n\n### getStyles\n\n▸ **getStyles**(): `undefined` \\| \\{ `[key: string]`: `string`;  }\n\nget styles from store theme\n\n#### Returns\n\n`undefined` \\| \\{ `[key: string]`: `string`;  }\n\n___\n\n### isLoading\n\n▸ **isLoading**(`mounted`): `void`\n\nA callback that gets called when Stripe Link Authentication Element is Loaded.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `mounted` | `boolean` |\n\n#### Returns\n\n`void`\n\n___\n\n### onEmailChange\n\n▸ **onEmailChange**(`authenticated`, `email`): `void`\n\nA callback that gets called whenever the Stripe Link Authentication Element's value changes.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `authenticated` | `boolean` | if the email is authenticated on Stripe. |\n| `email` | `string` | The new value of the email. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/StripeUPEPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StripeUPEPaymentInitializeOptions\n\n# Interface: StripeUPEPaymentInitializeOptions\n\nA set of options that are required to initialize the Stripe payment method.\n\nOnce Stripe payment is initialized, credit card form fields, provided by the\r\npayment provider as iframes, will be inserted into the current page. These\r\noptions provide a location and styling for each of the form fields.\n\n```html\r\n<!-- This is where the credit card component will be inserted -->\r\n<div id=\"container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'stripeupe',\r\n    stripeupe {\r\n        containerId: 'container',\r\n    },\r\n});\r\n```\n\n## Hierarchy\n\n- `default`\n\n  ↳ **`StripeUPEPaymentInitializeOptions`**\n\n## Table of contents\n\n### Properties\n\n- [containerId](StripeUPEPaymentInitializeOptions.md#containerid)\n- [style](StripeUPEPaymentInitializeOptions.md#style)\n\n### Methods\n\n- [initStripeElementUpdateTrigger](StripeUPEPaymentInitializeOptions.md#initstripeelementupdatetrigger)\n- [onError](StripeUPEPaymentInitializeOptions.md#onerror)\n- [render](StripeUPEPaymentInitializeOptions.md#render)\n\n## Properties\n\n### containerId\n\n• **containerId**: `string`\n\nThe location to insert the credit card number form field.\n\n#### Overrides\n\nStripePaymentInitializeOptions.containerId\n\n___\n\n### style\n\n• `Optional` **style**: `Record`\\<`string`, `StripeAppearanceValues`\\>\n\nCheckout styles from store theme\n\n#### Overrides\n\nStripePaymentInitializeOptions.style\n\n## Methods\n\n### initStripeElementUpdateTrigger\n\n▸ **initStripeElementUpdateTrigger**(`updateTriggerFn`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `updateTriggerFn` | (`payload`: `StripeElementUpdateOptions`) => `void` |\n\n#### Returns\n\n`void`\n\n___\n\n### onError\n\n▸ **onError**(`error?`): `void`\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `error?` | `Error` |\n\n#### Returns\n\n`void`\n\n#### Overrides\n\nStripePaymentInitializeOptions.onError\n\n___\n\n### render\n\n▸ **render**(): `void`\n\n#### Returns\n\n`void`\n\n#### Overrides\n\nStripePaymentInitializeOptions.render\n"
  },
  {
    "path": "docs/interfaces/StripeUPEShippingInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StripeUPEShippingInitializeOptions\n\n# Interface: StripeUPEShippingInitializeOptions\n\nA set of options that are required to initialize the shipping step of\r\ncheckout in order to support StripeUpe.\n\nWhen StripeUpe is initialized, an iframe will be inserted into the DOM. The\r\niframe has a list of shipping addresses for the customer to choose from.\n\n## Table of contents\n\n### Properties\n\n- [availableCountries](StripeUPEShippingInitializeOptions.md#availablecountries)\n- [container](StripeUPEShippingInitializeOptions.md#container)\n- [gatewayId](StripeUPEShippingInitializeOptions.md#gatewayid)\n- [methodId](StripeUPEShippingInitializeOptions.md#methodid)\n\n### Methods\n\n- [getStripeState](StripeUPEShippingInitializeOptions.md#getstripestate)\n- [getStyles](StripeUPEShippingInitializeOptions.md#getstyles)\n- [onChangeShipping](StripeUPEShippingInitializeOptions.md#onchangeshipping)\n- [setStripeExperiments](StripeUPEShippingInitializeOptions.md#setstripeexperiments)\n\n## Properties\n\n### availableCountries\n\n• **availableCountries**: `string`\n\nAvailable countries configured on BC shipping setup.\n\n___\n\n### container\n\n• `Optional` **container**: `string`\n\nThe ID of a container which the stripe iframe should be inserted.\n\n___\n\n### gatewayId\n\n• **gatewayId**: `string`\n\nThe identifier of the payment provider providing the payment method. This\r\noption is only required if the provider offers multiple payment options.\r\ni.e.: Stripeupe and Klarna.\n\n___\n\n### methodId\n\n• **methodId**: `string`\n\nThe identifier of the payment method.\n\n## Methods\n\n### getStripeState\n\n▸ **getStripeState**(`country`, `state`, `isStripeStateMappingDisabledForES?`): `string`\n\nget the state code needed for shipping stripe element\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `country` | `string` |\n| `state` | `string` |\n| `isStripeStateMappingDisabledForES?` | `boolean` |\n\n#### Returns\n\n`string`\n\n___\n\n### getStyles\n\n▸ **getStyles**(): `Object`\n\nget styles from store theme\n\n#### Returns\n\n`Object`\n\n___\n\n### onChangeShipping\n\n▸ **onChangeShipping**(`shipping`): `void`\n\nA callback that gets called whenever the Stripe Link Shipping Element's object is completed.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `shipping` | `StripeEventType` |\n\n#### Returns\n\n`void`\n\n___\n\n### setStripeExperiments\n\n▸ **setStripeExperiments**(`experiments`): `void`\n\nSet the Stripe experiments to be used in checkout-js components;\r\nStripe specific experiments broadcasts to SDK from payment provider configs request.\n\n#### Parameters\n\n| Name | Type |\n| :------ | :------ |\n| `experiments` | `Record`\\<`string`, `boolean`\\> |\n\n#### Returns\n\n`void`\n\nvoid\n"
  },
  {
    "path": "docs/interfaces/StripeV3PaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StripeV3PaymentInitializeOptions\n\n# Interface: StripeV3PaymentInitializeOptions\n\nA set of options that are required to initialize the Stripe payment method.\n\nOnce Stripe payment is initialized, credit card form fields, provided by the\r\npayment provider as iframes, will be inserted into the current page. These\r\noptions provide a location and styling for each of the form fields.\n\n```html\r\n<!-- This is where the credit card component will be inserted -->\r\n<div id=\"container\"></div>\r\n```\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'stripev3',\r\n    stripev3: {\r\n        containerId: 'container',\r\n    },\r\n});\r\n```\n\nAdditional options can be passed in to customize the fields.\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'stripev3',\r\n    stripev3: {\r\n        containerId: 'container',\r\n        options: {\r\n            card: {\r\n                classes: { base: 'form-input' },\r\n            },\r\n            iban: {\r\n                classes: { base: 'form-input' },\r\n                supportedCountries: ['SEPA'],\r\n            },\r\n            idealBank: {\r\n                classes: { base: 'form-input' },\r\n            },\r\n        },\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [containerId](StripeV3PaymentInitializeOptions.md#containerid)\n- [form](StripeV3PaymentInitializeOptions.md#form)\n- [options](StripeV3PaymentInitializeOptions.md#options)\n\n## Properties\n\n### containerId\n\n• **containerId**: `string`\n\nThe location to insert the credit card number form field.\n\n___\n\n### form\n\n• `Optional` **form**: `default`\n\nHosted Form Validation Options\n\n___\n\n### options\n\n• `Optional` **options**: [`IndividualCardElementOptions`](IndividualCardElementOptions.md) \\| [`StripeElementOptions`](../README.md#stripeelementoptions)\n"
  },
  {
    "path": "docs/interfaces/StyleOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / StyleOptions\n\n# Interface: StyleOptions\n\n## Table of contents\n\n### Properties\n\n- [base](StyleOptions.md#base)\n- [error](StyleOptions.md#error)\n- [placeholder](StyleOptions.md#placeholder)\n- [validated](StyleOptions.md#validated)\n\n## Properties\n\n### base\n\n• `Optional` **base**: [`CssProperties`](CssProperties.md)\n\nBase styling applied to the iframe. All styling extends from this style.\n\n___\n\n### error\n\n• `Optional` **error**: [`CssProperties`](CssProperties.md)\n\nStyling applied when a field fails validation.\n\n___\n\n### placeholder\n\n• `Optional` **placeholder**: [`CssProperties`](CssProperties.md)\n\nStyling applied to the field's placeholder values.\n\n___\n\n### validated\n\n• `Optional` **validated**: [`CssProperties`](CssProperties.md)\n\nStyling applied once a field passes validation.\n"
  },
  {
    "path": "docs/interfaces/SubInputDetail.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / SubInputDetail\n\n# Interface: SubInputDetail\n\n## Table of contents\n\n### Properties\n\n- [configuration](SubInputDetail.md#configuration)\n- [items](SubInputDetail.md#items)\n- [key](SubInputDetail.md#key)\n- [optional](SubInputDetail.md#optional)\n- [type](SubInputDetail.md#type)\n- [value](SubInputDetail.md#value)\n\n## Properties\n\n### configuration\n\n• `Optional` **configuration**: `object`\n\nConfiguration parameters for the required input.\n\n___\n\n### items\n\n• `Optional` **items**: [`Item_2`](Item_2.md)[]\n\nIn case of a select, the items to choose from.\n\n___\n\n### key\n\n• `Optional` **key**: `string`\n\nThe value to provide in the result.\n\n___\n\n### optional\n\n• `Optional` **optional**: `boolean`\n\nTrue if this input is optional to provide.\n\n___\n\n### type\n\n• `Optional` **type**: `string`\n\nThe type of the required input.\n\n___\n\n### value\n\n• `Optional` **value**: `string`\n\nThe value can be pre-filled, if available.\n"
  },
  {
    "path": "docs/interfaces/Subscriptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Subscriptions\n\n# Interface: Subscriptions\n\n## Table of contents\n\n### Properties\n\n- [acceptsAbandonedCartEmails](Subscriptions.md#acceptsabandonedcartemails)\n- [acceptsMarketingNewsletter](Subscriptions.md#acceptsmarketingnewsletter)\n- [email](Subscriptions.md#email)\n\n## Properties\n\n### acceptsAbandonedCartEmails\n\n• **acceptsAbandonedCartEmails**: `boolean`\n\n___\n\n### acceptsMarketingNewsletter\n\n• **acceptsMarketingNewsletter**: `boolean`\n\n___\n\n### email\n\n• **email**: `string`\n"
  },
  {
    "path": "docs/interfaces/SubscriptionsSelector.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / SubscriptionsSelector\n\n# Interface: SubscriptionsSelector\n\n## Table of contents\n\n### Methods\n\n- [getUpdateError](SubscriptionsSelector.md#getupdateerror)\n- [isUpdating](SubscriptionsSelector.md#isupdating)\n\n## Methods\n\n### getUpdateError\n\n▸ **getUpdateError**(): `undefined` \\| `Error`\n\n#### Returns\n\n`undefined` \\| `Error`\n\n___\n\n### isUpdating\n\n▸ **isUpdating**(): `boolean`\n\n#### Returns\n\n`boolean`\n"
  },
  {
    "path": "docs/interfaces/Tax.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Tax\n\n# Interface: Tax\n\n## Table of contents\n\n### Properties\n\n- [amount](Tax.md#amount)\n- [name](Tax.md#name)\n\n## Properties\n\n### amount\n\n• **amount**: `number`\n\n___\n\n### name\n\n• **name**: `string`\n"
  },
  {
    "path": "docs/interfaces/TextInputStyles.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / TextInputStyles\n\n# Interface: TextInputStyles\n\n## Hierarchy\n\n- [`InputStyles`](InputStyles.md)\n\n  ↳ **`TextInputStyles`**\n\n## Table of contents\n\n### Properties\n\n- [active](TextInputStyles.md#active)\n- [backgroundColor](TextInputStyles.md#backgroundcolor)\n- [borderColor](TextInputStyles.md#bordercolor)\n- [borderWidth](TextInputStyles.md#borderwidth)\n- [boxShadow](TextInputStyles.md#boxshadow)\n- [color](TextInputStyles.md#color)\n- [disabled](TextInputStyles.md#disabled)\n- [error](TextInputStyles.md#error)\n- [focus](TextInputStyles.md#focus)\n- [fontFamily](TextInputStyles.md#fontfamily)\n- [fontWeight](TextInputStyles.md#fontweight)\n- [hover](TextInputStyles.md#hover)\n- [letterSpacing](TextInputStyles.md#letterspacing)\n- [lineHeight](TextInputStyles.md#lineheight)\n- [placeholder](TextInputStyles.md#placeholder)\n\n## Properties\n\n### active\n\n• `Optional` **active**: [`BlockElementStyles`](BlockElementStyles.md)\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[active](InputStyles.md#active)\n\n___\n\n### backgroundColor\n\n• `Optional` **backgroundColor**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[backgroundColor](InputStyles.md#backgroundcolor)\n\n___\n\n### borderColor\n\n• `Optional` **borderColor**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[borderColor](InputStyles.md#bordercolor)\n\n___\n\n### borderWidth\n\n• `Optional` **borderWidth**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[borderWidth](InputStyles.md#borderwidth)\n\n___\n\n### boxShadow\n\n• `Optional` **boxShadow**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[boxShadow](InputStyles.md#boxshadow)\n\n___\n\n### color\n\n• `Optional` **color**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[color](InputStyles.md#color)\n\n___\n\n### disabled\n\n• `Optional` **disabled**: [`BlockElementStyles`](BlockElementStyles.md)\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[disabled](InputStyles.md#disabled)\n\n___\n\n### error\n\n• `Optional` **error**: [`InputStyles`](InputStyles.md)\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[error](InputStyles.md#error)\n\n___\n\n### focus\n\n• `Optional` **focus**: [`BlockElementStyles`](BlockElementStyles.md)\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[focus](InputStyles.md#focus)\n\n___\n\n### fontFamily\n\n• `Optional` **fontFamily**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[fontFamily](InputStyles.md#fontfamily)\n\n___\n\n### fontWeight\n\n• `Optional` **fontWeight**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[fontWeight](InputStyles.md#fontweight)\n\n___\n\n### hover\n\n• `Optional` **hover**: [`BlockElementStyles`](BlockElementStyles.md)\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[hover](InputStyles.md#hover)\n\n___\n\n### letterSpacing\n\n• `Optional` **letterSpacing**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[letterSpacing](InputStyles.md#letterspacing)\n\n___\n\n### lineHeight\n\n• `Optional` **lineHeight**: `string`\n\n#### Inherited from\n\n[InputStyles](InputStyles.md).[lineHeight](InputStyles.md#lineheight)\n\n___\n\n### placeholder\n\n• `Optional` **placeholder**: [`InlineElementStyles`](InlineElementStyles.md)\n"
  },
  {
    "path": "docs/interfaces/ThreeDSecure.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ThreeDSecure\n\n# Interface: ThreeDSecure\n\n## Table of contents\n\n### Properties\n\n- [cavv](ThreeDSecure.md#cavv)\n- [eci](ThreeDSecure.md#eci)\n- [status](ThreeDSecure.md#status)\n- [vendor](ThreeDSecure.md#vendor)\n- [version](ThreeDSecure.md#version)\n- [xid](ThreeDSecure.md#xid)\n\n## Properties\n\n### cavv\n\n• **cavv**: `string`\n\n___\n\n### eci\n\n• **eci**: `string`\n\n___\n\n### status\n\n• **status**: `string`\n\n___\n\n### vendor\n\n• **vendor**: `string`\n\n___\n\n### version\n\n• **version**: `string`\n\n___\n\n### xid\n\n• **xid**: `string`\n"
  },
  {
    "path": "docs/interfaces/ThreeDSecureToken.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ThreeDSecureToken\n\n# Interface: ThreeDSecureToken\n\n## Table of contents\n\n### Properties\n\n- [token](ThreeDSecureToken.md#token)\n\n## Properties\n\n### token\n\n• **token**: `string`\n"
  },
  {
    "path": "docs/interfaces/TranslationData.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / TranslationData\n\n# Interface: TranslationData\n\n## Indexable\n\n▪ [key: `string`]: `string` \\| `number`\n"
  },
  {
    "path": "docs/interfaces/Translations.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / Translations\n\n# Interface: Translations\n\n## Indexable\n\n▪ [key: `string`]: `string` \\| [`Translations`](Translations.md)\n"
  },
  {
    "path": "docs/interfaces/UnknownObject.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / UnknownObject\n\n# Interface: UnknownObject\n\n## Indexable\n\n▪ [key: `string`]: `unknown`\n"
  },
  {
    "path": "docs/interfaces/UserExperienceSettings.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / UserExperienceSettings\n\n# Interface: UserExperienceSettings\n\n## Table of contents\n\n### Properties\n\n- [checkoutV2Theme](UserExperienceSettings.md#checkoutv2theme)\n- [floatingLabelEnabled](UserExperienceSettings.md#floatinglabelenabled)\n- [walletButtonsOnTop](UserExperienceSettings.md#walletbuttonsontop)\n\n## Properties\n\n### checkoutV2Theme\n\n• **checkoutV2Theme**: `boolean`\n\n___\n\n### floatingLabelEnabled\n\n• **floatingLabelEnabled**: `boolean`\n\n___\n\n### walletButtonsOnTop\n\n• **walletButtonsOnTop**: `boolean`\n"
  },
  {
    "path": "docs/interfaces/VaultAccessToken.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / VaultAccessToken\n\n# Interface: VaultAccessToken\n\n## Table of contents\n\n### Properties\n\n- [vaultAccessExpiry](VaultAccessToken.md#vaultaccessexpiry)\n- [vaultAccessToken](VaultAccessToken.md#vaultaccesstoken)\n\n## Properties\n\n### vaultAccessExpiry\n\n• **vaultAccessExpiry**: `number`\n\n___\n\n### vaultAccessToken\n\n• **vaultAccessToken**: `string`\n"
  },
  {
    "path": "docs/interfaces/VaultedInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / VaultedInstrument\n\n# Interface: VaultedInstrument\n\n## Table of contents\n\n### Properties\n\n- [ccCvv](VaultedInstrument.md#cccvv)\n- [ccNumber](VaultedInstrument.md#ccnumber)\n- [instrumentId](VaultedInstrument.md#instrumentid)\n\n## Properties\n\n### ccCvv\n\n• `Optional` **ccCvv**: `string`\n\n___\n\n### ccNumber\n\n• `Optional` **ccNumber**: `string`\n\n___\n\n### instrumentId\n\n• **instrumentId**: `string`\n"
  },
  {
    "path": "docs/interfaces/WechatDataPaymentMethodState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WechatDataPaymentMethodState\n\n# Interface: WechatDataPaymentMethodState\n\n## Table of contents\n\n### Properties\n\n- [paymentMethod](WechatDataPaymentMethodState.md#paymentmethod)\n\n## Properties\n\n### paymentMethod\n\n• **paymentMethod**: [`AdyenPaymentMethodState`](AdyenPaymentMethodState.md)\n"
  },
  {
    "path": "docs/interfaces/WechatState.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WechatState\n\n# Interface: WechatState\n\n## Table of contents\n\n### Properties\n\n- [data](WechatState.md#data)\n\n## Properties\n\n### data\n\n• **data**: [`WechatDataPaymentMethodState`](WechatDataPaymentMethodState.md)\n"
  },
  {
    "path": "docs/interfaces/WithAdyenV2PaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithAdyenV2PaymentInitializeOptions\n\n# Interface: WithAdyenV2PaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [adyenv2](WithAdyenV2PaymentInitializeOptions.md#adyenv2)\n\n## Properties\n\n### adyenv2\n\n• `Optional` **adyenv2**: [`AdyenV2PaymentInitializeOptions`](AdyenV2PaymentInitializeOptions.md)\n\nThe options that are required to initialize the Apple Pay payment\r\nmethod. They can be omitted unless you need to support Apple Pay.\n"
  },
  {
    "path": "docs/interfaces/WithAdyenV3PaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithAdyenV3PaymentInitializeOptions\n\n# Interface: WithAdyenV3PaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [adyenv3](WithAdyenV3PaymentInitializeOptions.md#adyenv3)\n\n## Properties\n\n### adyenv3\n\n• `Optional` **adyenv3**: [`AdyenV3PaymentInitializeOptions`](AdyenV3PaymentInitializeOptions.md)\n\nThe options that are required to initialize the Apple Pay payment\r\nmethod. They can be omitted unless you need to support Apple Pay.\n"
  },
  {
    "path": "docs/interfaces/WithAmazonPayV2ButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithAmazonPayV2ButtonInitializeOptions\n\n# Interface: WithAmazonPayV2ButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [amazonpay](WithAmazonPayV2ButtonInitializeOptions.md#amazonpay)\n\n## Properties\n\n### amazonpay\n\n• `Optional` **amazonpay**: [`AmazonPayV2ButtonInitializeOptions`](../README.md#amazonpayv2buttoninitializeoptions)\n"
  },
  {
    "path": "docs/interfaces/WithAmazonPayV2CustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithAmazonPayV2CustomerInitializeOptions\n\n# Interface: WithAmazonPayV2CustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [amazonpay](WithAmazonPayV2CustomerInitializeOptions.md#amazonpay)\n\n## Properties\n\n### amazonpay\n\n• `Optional` **amazonpay**: [`AmazonPayV2CustomerInitializeOptions`](AmazonPayV2CustomerInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithAmazonPayV2PaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithAmazonPayV2PaymentInitializeOptions\n\n# Interface: WithAmazonPayV2PaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [amazonpay](WithAmazonPayV2PaymentInitializeOptions.md#amazonpay)\n\n## Properties\n\n### amazonpay\n\n• `Optional` **amazonpay**: [`AmazonPayV2PaymentInitializeOptions`](AmazonPayV2PaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithApplePayButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithApplePayButtonInitializeOptions\n\n# Interface: WithApplePayButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [applepay](WithApplePayButtonInitializeOptions.md#applepay)\n\n## Properties\n\n### applepay\n\n• `Optional` **applepay**: [`ApplePayButtonInitializeOptions`](ApplePayButtonInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithApplePayCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithApplePayCustomerInitializeOptions\n\n# Interface: WithApplePayCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [applepay](WithApplePayCustomerInitializeOptions.md#applepay)\n\n## Properties\n\n### applepay\n\n• `Optional` **applepay**: [`ApplePayCustomerInitializeOptions`](ApplePayCustomerInitializeOptions.md)\n\nThe options that are required to initialize the customer step of checkout\r\nwhen using ApplePay.\n"
  },
  {
    "path": "docs/interfaces/WithApplePayPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithApplePayPaymentInitializeOptions\n\n# Interface: WithApplePayPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [applepay](WithApplePayPaymentInitializeOptions.md#applepay)\n\n## Properties\n\n### applepay\n\n• `Optional` **applepay**: [`ApplePayPaymentInitializeOptions`](ApplePayPaymentInitializeOptions.md)\n\nThe options that are required to initialize the Apple Pay payment\r\nmethod. They can be omitted unless you need to support Apple Pay.\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions\n\n# Interface: WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments\\_apms](WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md#bigcommerce_payments_apms)\n\n## Properties\n\n### bigcommerce\\_payments\\_apms\n\n• `Optional` **bigcommerce\\_payments\\_apms**: [`BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions`](BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsButtonInitializeOptions\n\n# Interface: WithBigCommercePaymentsButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments](WithBigCommercePaymentsButtonInitializeOptions.md#bigcommerce_payments)\n\n## Properties\n\n### bigcommerce\\_payments\n\n• `Optional` **bigcommerce\\_payments**: [`BigCommercePaymentsButtonInitializeOptions`](BigCommercePaymentsButtonInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsCreditCardsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsCreditCardsPaymentInitializeOptions\n\n# Interface: WithBigCommercePaymentsCreditCardsPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments\\_creditcards](WithBigCommercePaymentsCreditCardsPaymentInitializeOptions.md#bigcommerce_payments_creditcards)\n\n## Properties\n\n### bigcommerce\\_payments\\_creditcards\n\n• `Optional` **bigcommerce\\_payments\\_creditcards**: [`BigCommercePaymentsCreditCardsPaymentInitializeOptions`](BigCommercePaymentsCreditCardsPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsCustomerInitializeOptions\n\n# Interface: WithBigCommercePaymentsCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments](WithBigCommercePaymentsCustomerInitializeOptions.md#bigcommerce_payments)\n\n## Properties\n\n### bigcommerce\\_payments\n\n• `Optional` **bigcommerce\\_payments**: [`BigCommercePaymentsCustomerInitializeOptions`](BigCommercePaymentsCustomerInitializeOptions.md)\n\nThe options that are required to initialize the customer step of checkout\r\nwhen using BigCommercePayments.\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsFastlaneCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsFastlaneCustomerInitializeOptions\n\n# Interface: WithBigCommercePaymentsFastlaneCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments\\_fastlane](WithBigCommercePaymentsFastlaneCustomerInitializeOptions.md#bigcommerce_payments_fastlane)\n\n## Properties\n\n### bigcommerce\\_payments\\_fastlane\n\n• `Optional` **bigcommerce\\_payments\\_fastlane**: [`BigCommercePaymentsFastlaneCustomerInitializeOptions`](BigCommercePaymentsFastlaneCustomerInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsFastlanePaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsFastlanePaymentInitializeOptions\n\n# Interface: WithBigCommercePaymentsFastlanePaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments\\_fastlane](WithBigCommercePaymentsFastlanePaymentInitializeOptions.md#bigcommerce_payments_fastlane)\n\n## Properties\n\n### bigcommerce\\_payments\\_fastlane\n\n• `Optional` **bigcommerce\\_payments\\_fastlane**: [`BigCommercePaymentsFastlanePaymentInitializeOptions`](BigCommercePaymentsFastlanePaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsPayLaterButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsPayLaterButtonInitializeOptions\n\n# Interface: WithBigCommercePaymentsPayLaterButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments\\_paylater](WithBigCommercePaymentsPayLaterButtonInitializeOptions.md#bigcommerce_payments_paylater)\n\n## Properties\n\n### bigcommerce\\_payments\\_paylater\n\n• `Optional` **bigcommerce\\_payments\\_paylater**: [`BigCommercePaymentsPayLaterButtonInitializeOptions`](BigCommercePaymentsPayLaterButtonInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsPayLaterCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsPayLaterCustomerInitializeOptions\n\n# Interface: WithBigCommercePaymentsPayLaterCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments\\_paylater](WithBigCommercePaymentsPayLaterCustomerInitializeOptions.md#bigcommerce_payments_paylater)\n\n## Properties\n\n### bigcommerce\\_payments\\_paylater\n\n• `Optional` **bigcommerce\\_payments\\_paylater**: [`BigCommercePaymentsPayLaterCustomerInitializeOptions`](BigCommercePaymentsPayLaterCustomerInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsPayLaterPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsPayLaterPaymentInitializeOptions\n\n# Interface: WithBigCommercePaymentsPayLaterPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments\\_paylater](WithBigCommercePaymentsPayLaterPaymentInitializeOptions.md#bigcommerce_payments_paylater)\n\n## Properties\n\n### bigcommerce\\_payments\\_paylater\n\n• `Optional` **bigcommerce\\_payments\\_paylater**: [`BigCommercePaymentsPayLaterPaymentInitializeOptions`](BigCommercePaymentsPayLaterPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsPaymentInitializeOptions\n\n# Interface: WithBigCommercePaymentsPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments](WithBigCommercePaymentsPaymentInitializeOptions.md#bigcommerce_payments)\n\n## Properties\n\n### bigcommerce\\_payments\n\n• `Optional` **bigcommerce\\_payments**: [`BigCommercePaymentsPaymentInitializeOptions`](BigCommercePaymentsPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsRatePayPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsRatePayPaymentInitializeOptions\n\n# Interface: WithBigCommercePaymentsRatePayPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments\\_ratepay](WithBigCommercePaymentsRatePayPaymentInitializeOptions.md#bigcommerce_payments_ratepay)\n\n## Properties\n\n### bigcommerce\\_payments\\_ratepay\n\n• `Optional` **bigcommerce\\_payments\\_ratepay**: [`BigCommercePaymentsRatePayPaymentInitializeOptions`](BigCommercePaymentsRatePayPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions\n\n# Interface: WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments\\_apms](WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions.md#bigcommerce_payments_apms)\n\n## Properties\n\n### bigcommerce\\_payments\\_apms\n\n• `Optional` **bigcommerce\\_payments\\_apms**: [`BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions`](BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsVenmoButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsVenmoButtonInitializeOptions\n\n# Interface: WithBigCommercePaymentsVenmoButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments\\_venmo](WithBigCommercePaymentsVenmoButtonInitializeOptions.md#bigcommerce_payments_venmo)\n\n## Properties\n\n### bigcommerce\\_payments\\_venmo\n\n• `Optional` **bigcommerce\\_payments\\_venmo**: [`BigCommercePaymentsVenmoButtonInitializeOptions`](BigCommercePaymentsVenmoButtonInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsVenmoCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsVenmoCustomerInitializeOptions\n\n# Interface: WithBigCommercePaymentsVenmoCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments\\_venmo](WithBigCommercePaymentsVenmoCustomerInitializeOptions.md#bigcommerce_payments_venmo)\n\n## Properties\n\n### bigcommerce\\_payments\\_venmo\n\n• `Optional` **bigcommerce\\_payments\\_venmo**: [`BigCommercePaymentsVenmoCustomerInitializeOptions`](BigCommercePaymentsVenmoCustomerInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBigCommercePaymentsVenmoPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBigCommercePaymentsVenmoPaymentInitializeOptions\n\n# Interface: WithBigCommercePaymentsVenmoPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bigcommerce\\_payments\\_venmo](WithBigCommercePaymentsVenmoPaymentInitializeOptions.md#bigcommerce_payments_venmo)\n\n## Properties\n\n### bigcommerce\\_payments\\_venmo\n\n• `Optional` **bigcommerce\\_payments\\_venmo**: [`BigCommercePaymentsVenmoPaymentInitializeOptions`](BigCommercePaymentsVenmoPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBlueSnapDirectAPMPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBlueSnapDirectAPMPaymentInitializeOptions\n\n# Interface: WithBlueSnapDirectAPMPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bluesnapdirect](WithBlueSnapDirectAPMPaymentInitializeOptions.md#bluesnapdirect)\n\n## Properties\n\n### bluesnapdirect\n\n• `Optional` **bluesnapdirect**: [`BlueSnapDirectAPMInitializeOptions`](BlueSnapDirectAPMInitializeOptions.md)\n\nThe options that are required to initialize the Apple Pay payment\r\nmethod. They can be omitted unless you need to support Apple Pay.\n"
  },
  {
    "path": "docs/interfaces/WithBlueSnapV2PaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBlueSnapV2PaymentInitializeOptions\n\n# Interface: WithBlueSnapV2PaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bluesnapv2](WithBlueSnapV2PaymentInitializeOptions.md#bluesnapv2)\n\n## Properties\n\n### bluesnapv2\n\n• `Optional` **bluesnapv2**: [`BlueSnapV2PaymentInitializeOptions`](BlueSnapV2PaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBoltButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBoltButtonInitializeOptions\n\n# Interface: WithBoltButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bolt](WithBoltButtonInitializeOptions.md#bolt)\n\n## Properties\n\n### bolt\n\n• `Optional` **bolt**: [`BoltButtonInitializeOptions`](BoltButtonInitializeOptions.md)\n\nThe options that are required to initialize the Bolt payment\r\nmethod. They can be omitted unless you need to support Bolt.\n"
  },
  {
    "path": "docs/interfaces/WithBoltCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBoltCustomerInitializeOptions\n\n# Interface: WithBoltCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bolt](WithBoltCustomerInitializeOptions.md#bolt)\n\n## Properties\n\n### bolt\n\n• `Optional` **bolt**: [`BoltCustomerInitializeOptions`](BoltCustomerInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBoltPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBoltPaymentInitializeOptions\n\n# Interface: WithBoltPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [bolt](WithBoltPaymentInitializeOptions.md#bolt)\n\n## Properties\n\n### bolt\n\n• `Optional` **bolt**: [`BoltPaymentInitializeOptions`](BoltPaymentInitializeOptions.md)\n\nThe options that are required to initialize the Bolt payment\r\nmethod. They can be omitted unless you need to support Bolt.\n"
  },
  {
    "path": "docs/interfaces/WithBraintreeAchPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBraintreeAchPaymentInitializeOptions\n\n# Interface: WithBraintreeAchPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [braintreeach](WithBraintreeAchPaymentInitializeOptions.md#braintreeach)\n\n## Properties\n\n### braintreeach\n\n• `Optional` **braintreeach**: [`BraintreeAchInitializeOptions`](BraintreeAchInitializeOptions.md)\n\nThe options that are required to initialize the Braintree ACH payment\r\nmethod. They can be omitted unless you need to support Apple Pay.\n"
  },
  {
    "path": "docs/interfaces/WithBraintreeCreditCardPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBraintreeCreditCardPaymentInitializeOptions\n\n# Interface: WithBraintreeCreditCardPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [braintree](WithBraintreeCreditCardPaymentInitializeOptions.md#braintree)\n\n## Properties\n\n### braintree\n\n• `Optional` **braintree**: [`BraintreeCreditCardPaymentInitializeOptions`](BraintreeCreditCardPaymentInitializeOptions.md)\n\nThe options that are required to initialize Braintree PayPal wallet button on Product and Cart page.\n"
  },
  {
    "path": "docs/interfaces/WithBraintreeFastlaneCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBraintreeFastlaneCustomerInitializeOptions\n\n# Interface: WithBraintreeFastlaneCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [braintreefastlane](WithBraintreeFastlaneCustomerInitializeOptions.md#braintreefastlane)\n\n## Properties\n\n### braintreefastlane\n\n• `Optional` **braintreefastlane**: [`BraintreeFastlaneCustomerInitializeOptions`](BraintreeFastlaneCustomerInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBraintreeFastlanePaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBraintreeFastlanePaymentInitializeOptions\n\n# Interface: WithBraintreeFastlanePaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [braintreefastlane](WithBraintreeFastlanePaymentInitializeOptions.md#braintreefastlane)\n\n## Properties\n\n### braintreefastlane\n\n• `Optional` **braintreefastlane**: [`BraintreeFastlanePaymentInitializeOptions`](BraintreeFastlanePaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBraintreeLocalMethodsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBraintreeLocalMethodsPaymentInitializeOptions\n\n# Interface: WithBraintreeLocalMethodsPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [braintreelocalmethods](WithBraintreeLocalMethodsPaymentInitializeOptions.md#braintreelocalmethods)\n\n## Properties\n\n### braintreelocalmethods\n\n• `Optional` **braintreelocalmethods**: [`BraintreeLocalMethodsPaymentInitializeOptions`](BraintreeLocalMethodsPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithBraintreePaypalButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBraintreePaypalButtonInitializeOptions\n\n# Interface: WithBraintreePaypalButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [braintreepaypal](WithBraintreePaypalButtonInitializeOptions.md#braintreepaypal)\n\n## Properties\n\n### braintreepaypal\n\n• `Optional` **braintreepaypal**: [`BraintreePaypalButtonInitializeOptions`](BraintreePaypalButtonInitializeOptions.md)\n\nThe options that are required to initialize Braintree PayPal wallet button on Product and Cart page.\n"
  },
  {
    "path": "docs/interfaces/WithBraintreePaypalCreditButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBraintreePaypalCreditButtonInitializeOptions\n\n# Interface: WithBraintreePaypalCreditButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [braintreepaypalcredit](WithBraintreePaypalCreditButtonInitializeOptions.md#braintreepaypalcredit)\n\n## Properties\n\n### braintreepaypalcredit\n\n• `Optional` **braintreepaypalcredit**: [`BraintreePaypalCreditButtonInitializeOptions`](BraintreePaypalCreditButtonInitializeOptions.md)\n\nThe options that are required to initialize Braintree PayPal Credit wallet button on Product and Cart page.\n"
  },
  {
    "path": "docs/interfaces/WithBraintreePaypalCreditCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBraintreePaypalCreditCustomerInitializeOptions\n\n# Interface: WithBraintreePaypalCreditCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [braintreepaypalcredit](WithBraintreePaypalCreditCustomerInitializeOptions.md#braintreepaypalcredit)\n\n## Properties\n\n### braintreepaypalcredit\n\n• `Optional` **braintreepaypalcredit**: [`BraintreePaypalCreditCustomerInitializeOptions`](BraintreePaypalCreditCustomerInitializeOptions.md)\n\nThe options that are required to initialize the customer step of checkout\r\nwhen using Braintree PayPal.\n"
  },
  {
    "path": "docs/interfaces/WithBraintreePaypalCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBraintreePaypalCustomerInitializeOptions\n\n# Interface: WithBraintreePaypalCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [braintreepaypal](WithBraintreePaypalCustomerInitializeOptions.md#braintreepaypal)\n\n## Properties\n\n### braintreepaypal\n\n• `Optional` **braintreepaypal**: [`BraintreePaypalCustomerInitializeOptions`](BraintreePaypalCustomerInitializeOptions.md)\n\nThe options that are required to initialize the customer step of checkout\r\nwhen using Braintree PayPal.\n"
  },
  {
    "path": "docs/interfaces/WithBuyNowFeature.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithBuyNowFeature\n\n# Interface: WithBuyNowFeature\n\n## Hierarchy\n\n- `AmazonPayV2ButtonConfig`\n\n  ↳ **`WithBuyNowFeature`**\n\n## Table of contents\n\n### Properties\n\n- [buttonColor](WithBuyNowFeature.md#buttoncolor)\n- [buyNowInitializeOptions](WithBuyNowFeature.md#buynowinitializeoptions)\n- [checkoutLanguage](WithBuyNowFeature.md#checkoutlanguage)\n- [design](WithBuyNowFeature.md#design)\n- [ledgerCurrency](WithBuyNowFeature.md#ledgercurrency)\n- [merchantId](WithBuyNowFeature.md#merchantid)\n- [placement](WithBuyNowFeature.md#placement)\n- [productType](WithBuyNowFeature.md#producttype)\n- [sandbox](WithBuyNowFeature.md#sandbox)\n\n## Properties\n\n### buttonColor\n\n• `Optional` **buttonColor**: `AmazonPayV2ButtonColor`\n\nColor of the Amazon Pay button.\n\n#### Inherited from\n\nAmazonPayV2ButtonConfig.buttonColor\n\n___\n\n### buyNowInitializeOptions\n\n• `Optional` **buyNowInitializeOptions**: `Object`\n\nThe options that are required to initialize Buy Now functionality.\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `getBuyNowCartRequestBody?` | () => `void` \\| `default` |\n\n___\n\n### checkoutLanguage\n\n• `Optional` **checkoutLanguage**: `AmazonPayV2CheckoutLanguage`\n\nLanguage used to render the button and text on Amazon Pay hosted pages.\n\n#### Inherited from\n\nAmazonPayV2ButtonConfig.checkoutLanguage\n\n___\n\n### design\n\n• `Optional` **design**: `C0001`\n\nSets Amazon Pay button design.\n\n#### Inherited from\n\nAmazonPayV2ButtonConfig.design\n\n___\n\n### ledgerCurrency\n\n• **ledgerCurrency**: `AmazonPayV2LedgerCurrency`\n\nLedger currency provided during registration for the given merchant identifier.\n\n#### Inherited from\n\nAmazonPayV2ButtonConfig.ledgerCurrency\n\n___\n\n### merchantId\n\n• **merchantId**: `string`\n\nAmazon Pay merchant account identifier.\n\n#### Inherited from\n\nAmazonPayV2ButtonConfig.merchantId\n\n___\n\n### placement\n\n• **placement**: `AmazonPayV2Placement`\n\nPlacement of the Amazon Pay button on your website.\n\n#### Inherited from\n\nAmazonPayV2ButtonConfig.placement\n\n___\n\n### productType\n\n• `Optional` **productType**: `AmazonPayV2PayOptions`\n\nProduct type selected for checkout. Default is 'PayAndShip'.\n\n#### Inherited from\n\nAmazonPayV2ButtonConfig.productType\n\n___\n\n### sandbox\n\n• `Optional` **sandbox**: `boolean`\n\nSets button to Sandbox environment. You do not have to set this parameter\nif your `publicKeyId` has an environment prefix. Default is false.\n\n#### Inherited from\n\nAmazonPayV2ButtonConfig.sandbox\n"
  },
  {
    "path": "docs/interfaces/WithCheckoutcomFawryInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithCheckoutcomFawryInstrument\n\n# Interface: WithCheckoutcomFawryInstrument\n\n## Table of contents\n\n### Properties\n\n- [customerEmail](WithCheckoutcomFawryInstrument.md#customeremail)\n- [customerMobile](WithCheckoutcomFawryInstrument.md#customermobile)\n\n## Properties\n\n### customerEmail\n\n• **customerEmail**: `string`\n\n___\n\n### customerMobile\n\n• **customerMobile**: `string`\n"
  },
  {
    "path": "docs/interfaces/WithCheckoutcomSEPAInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithCheckoutcomSEPAInstrument\n\n# Interface: WithCheckoutcomSEPAInstrument\n\n## Table of contents\n\n### Properties\n\n- [bic](WithCheckoutcomSEPAInstrument.md#bic)\n- [iban](WithCheckoutcomSEPAInstrument.md#iban)\n\n## Properties\n\n### bic\n\n• **bic**: `string`\n\n___\n\n### iban\n\n• **iban**: `string`\n"
  },
  {
    "path": "docs/interfaces/WithCreditCardPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithCreditCardPaymentInitializeOptions\n\n# Interface: WithCreditCardPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [creditCard](WithCreditCardPaymentInitializeOptions.md#creditcard)\n\n## Properties\n\n### creditCard\n\n• `Optional` **creditCard**: [`CreditCardPaymentInitializeOptions_2`](CreditCardPaymentInitializeOptions_2.md)\n"
  },
  {
    "path": "docs/interfaces/WithDocumentInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithDocumentInstrument\n\n# Interface: WithDocumentInstrument\n\n## Table of contents\n\n### Properties\n\n- [ccDocument](WithDocumentInstrument.md#ccdocument)\n\n## Properties\n\n### ccDocument\n\n• **ccDocument**: `string`\n"
  },
  {
    "path": "docs/interfaces/WithIdealInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithIdealInstrument\n\n# Interface: WithIdealInstrument\n\n## Table of contents\n\n### Properties\n\n- [bic](WithIdealInstrument.md#bic)\n\n## Properties\n\n### bic\n\n• **bic**: `string`\n"
  },
  {
    "path": "docs/interfaces/WithMollieIssuerInstrument.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithMollieIssuerInstrument\n\n# Interface: WithMollieIssuerInstrument\n\n## Table of contents\n\n### Properties\n\n- [issuer](WithMollieIssuerInstrument.md#issuer)\n- [shopper\\_locale](WithMollieIssuerInstrument.md#shopper_locale)\n\n## Properties\n\n### issuer\n\n• **issuer**: `string`\n\n___\n\n### shopper\\_locale\n\n• **shopper\\_locale**: `string`\n"
  },
  {
    "path": "docs/interfaces/WithMolliePaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithMolliePaymentInitializeOptions\n\n# Interface: WithMolliePaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [mollie](WithMolliePaymentInitializeOptions.md#mollie)\n\n## Properties\n\n### mollie\n\n• `Optional` **mollie**: [`MolliePaymentInitializeOptions`](MolliePaymentInitializeOptions.md)\n\nThe options that are required to initialize the Mollie payment\r\nmethod. They can be omitted unless you need to support Mollie.\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions\n\n# Interface: WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommerce](WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions.md#paypalcommerce)\n- [paypalcommercealternativemethods](WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions.md#paypalcommercealternativemethods)\n\n## Properties\n\n### paypalcommerce\n\n• `Optional` **paypalcommerce**: [`PayPalCommerceAlternativeMethodsPaymentOptions`](PayPalCommerceAlternativeMethodsPaymentOptions.md)\n\n___\n\n### paypalcommercealternativemethods\n\n• `Optional` **paypalcommercealternativemethods**: [`PayPalCommerceAlternativeMethodsPaymentOptions`](PayPalCommerceAlternativeMethodsPaymentOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceButtonInitializeOptions\n\n# Interface: WithPayPalCommerceButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommerce](WithPayPalCommerceButtonInitializeOptions.md#paypalcommerce)\n\n## Properties\n\n### paypalcommerce\n\n• `Optional` **paypalcommerce**: [`PayPalCommerceButtonInitializeOptions`](PayPalCommerceButtonInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceCreditButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceCreditButtonInitializeOptions\n\n# Interface: WithPayPalCommerceCreditButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommercecredit](WithPayPalCommerceCreditButtonInitializeOptions.md#paypalcommercecredit)\n\n## Properties\n\n### paypalcommercecredit\n\n• `Optional` **paypalcommercecredit**: [`PayPalCommerceCreditButtonInitializeOptions`](PayPalCommerceCreditButtonInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceCreditCardsPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceCreditCardsPaymentInitializeOptions\n\n# Interface: WithPayPalCommerceCreditCardsPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommerce](WithPayPalCommerceCreditCardsPaymentInitializeOptions.md#paypalcommerce)\n- [paypalcommercecreditcards](WithPayPalCommerceCreditCardsPaymentInitializeOptions.md#paypalcommercecreditcards)\n\n## Properties\n\n### paypalcommerce\n\n• `Optional` **paypalcommerce**: [`PayPalCommerceCreditCardsPaymentInitializeOptions`](PayPalCommerceCreditCardsPaymentInitializeOptions.md)\n\n___\n\n### paypalcommercecreditcards\n\n• `Optional` **paypalcommercecreditcards**: [`PayPalCommerceCreditCardsPaymentInitializeOptions`](PayPalCommerceCreditCardsPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceCreditCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceCreditCustomerInitializeOptions\n\n# Interface: WithPayPalCommerceCreditCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommercecredit](WithPayPalCommerceCreditCustomerInitializeOptions.md#paypalcommercecredit)\n\n## Properties\n\n### paypalcommercecredit\n\n• `Optional` **paypalcommercecredit**: [`PayPalCommerceCreditCustomerInitializeOptions`](PayPalCommerceCreditCustomerInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceCreditPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceCreditPaymentInitializeOptions\n\n# Interface: WithPayPalCommerceCreditPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommerce](WithPayPalCommerceCreditPaymentInitializeOptions.md#paypalcommerce)\n- [paypalcommercecredit](WithPayPalCommerceCreditPaymentInitializeOptions.md#paypalcommercecredit)\n\n## Properties\n\n### paypalcommerce\n\n• `Optional` **paypalcommerce**: [`PayPalCommerceCreditPaymentInitializeOptions`](PayPalCommerceCreditPaymentInitializeOptions.md)\n\n___\n\n### paypalcommercecredit\n\n• `Optional` **paypalcommercecredit**: [`PayPalCommerceCreditPaymentInitializeOptions`](PayPalCommerceCreditPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceCustomerInitializeOptions\n\n# Interface: WithPayPalCommerceCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommerce](WithPayPalCommerceCustomerInitializeOptions.md#paypalcommerce)\n\n## Properties\n\n### paypalcommerce\n\n• `Optional` **paypalcommerce**: [`PayPalCommerceCustomerInitializeOptions`](PayPalCommerceCustomerInitializeOptions.md)\n\nThe options that are required to initialize the customer step of checkout\r\nwhen using PayPalCommerce.\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceFastlaneCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceFastlaneCustomerInitializeOptions\n\n# Interface: WithPayPalCommerceFastlaneCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommercefastlane](WithPayPalCommerceFastlaneCustomerInitializeOptions.md#paypalcommercefastlane)\n\n## Properties\n\n### paypalcommercefastlane\n\n• `Optional` **paypalcommercefastlane**: [`PayPalCommerceFastlaneCustomerInitializeOptions`](PayPalCommerceFastlaneCustomerInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceFastlanePaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceFastlanePaymentInitializeOptions\n\n# Interface: WithPayPalCommerceFastlanePaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommercefastlane](WithPayPalCommerceFastlanePaymentInitializeOptions.md#paypalcommercefastlane)\n\n## Properties\n\n### paypalcommercefastlane\n\n• `Optional` **paypalcommercefastlane**: [`PayPalCommerceFastlanePaymentInitializeOptions`](PayPalCommerceFastlanePaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommercePaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommercePaymentInitializeOptions\n\n# Interface: WithPayPalCommercePaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommerce](WithPayPalCommercePaymentInitializeOptions.md#paypalcommerce)\n\n## Properties\n\n### paypalcommerce\n\n• `Optional` **paypalcommerce**: [`PayPalCommercePaymentInitializeOptions`](PayPalCommercePaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceRatePayPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceRatePayPaymentInitializeOptions\n\n# Interface: WithPayPalCommerceRatePayPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommerceratepay](WithPayPalCommerceRatePayPaymentInitializeOptions.md#paypalcommerceratepay)\n\n## Properties\n\n### paypalcommerceratepay\n\n• `Optional` **paypalcommerceratepay**: [`PaypalCommerceRatePay`](PaypalCommerceRatePay.md)\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceVenmoButtonInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceVenmoButtonInitializeOptions\n\n# Interface: WithPayPalCommerceVenmoButtonInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommercevenmo](WithPayPalCommerceVenmoButtonInitializeOptions.md#paypalcommercevenmo)\n\n## Properties\n\n### paypalcommercevenmo\n\n• `Optional` **paypalcommercevenmo**: [`PayPalCommerceVenmoButtonInitializeOptions`](PayPalCommerceVenmoButtonInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceVenmoCustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceVenmoCustomerInitializeOptions\n\n# Interface: WithPayPalCommerceVenmoCustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommercevenmo](WithPayPalCommerceVenmoCustomerInitializeOptions.md#paypalcommercevenmo)\n\n## Properties\n\n### paypalcommercevenmo\n\n• `Optional` **paypalcommercevenmo**: [`PayPalCommerceVenmoCustomerInitializeOptions`](PayPalCommerceVenmoCustomerInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithPayPalCommerceVenmoPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPayPalCommerceVenmoPaymentInitializeOptions\n\n# Interface: WithPayPalCommerceVenmoPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [paypalcommerce](WithPayPalCommerceVenmoPaymentInitializeOptions.md#paypalcommerce)\n- [paypalcommercevenmo](WithPayPalCommerceVenmoPaymentInitializeOptions.md#paypalcommercevenmo)\n\n## Properties\n\n### paypalcommerce\n\n• `Optional` **paypalcommerce**: [`PayPalCommerceVenmoPaymentInitializeOptions`](PayPalCommerceVenmoPaymentInitializeOptions.md)\n\n___\n\n### paypalcommercevenmo\n\n• `Optional` **paypalcommercevenmo**: [`PayPalCommerceVenmoPaymentInitializeOptions`](PayPalCommerceVenmoPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithPaypalExpressPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithPaypalExpressPaymentInitializeOptions\n\n# Interface: WithPaypalExpressPaymentInitializeOptions\n\nA set of options that are required to initialize the PayPal Express payment\r\nmethod.\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'paypalexpress',\r\n});\r\n```\n\nAn additional flag can be passed in to always start the payment flow through\r\na redirect rather than a popup.\n\n```js\r\nservice.initializePayment({\r\n    methodId: 'paypalexpress',\r\n    paypalexpress: {\r\n        useRedirectFlow: true,\r\n    },\r\n});\r\n```\n\n## Table of contents\n\n### Properties\n\n- [paypalexpress](WithPaypalExpressPaymentInitializeOptions.md#paypalexpress)\n\n## Properties\n\n### paypalexpress\n\n• `Optional` **paypalexpress**: `Object`\n\n#### Type declaration\n\n| Name | Type |\n| :------ | :------ |\n| `useRedirectFlow?` | `boolean` |\n"
  },
  {
    "path": "docs/interfaces/WithSquareV2PaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithSquareV2PaymentInitializeOptions\n\n# Interface: WithSquareV2PaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [squarev2](WithSquareV2PaymentInitializeOptions.md#squarev2)\n\n## Properties\n\n### squarev2\n\n• `Optional` **squarev2**: [`SquareV2PaymentInitializeOptions`](SquareV2PaymentInitializeOptions.md)\n\nThe options that are required to initialize the Square payment method.\r\nThey can be omitted unless you need to support Square.\n"
  },
  {
    "path": "docs/interfaces/WithStripeOCSPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithStripeOCSPaymentInitializeOptions\n\n# Interface: WithStripeOCSPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [stripeocs](WithStripeOCSPaymentInitializeOptions.md#stripeocs)\n\n## Properties\n\n### stripeocs\n\n• `Optional` **stripeocs**: [`StripeOCSPaymentInitializeOptions`](StripeOCSPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithStripeUPECustomerInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithStripeUPECustomerInitializeOptions\n\n# Interface: WithStripeUPECustomerInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [stripeupe](WithStripeUPECustomerInitializeOptions.md#stripeupe)\n\n## Properties\n\n### stripeupe\n\n• `Optional` **stripeupe**: [`StripeUPECustomerInitializeOptions`](StripeUPECustomerInitializeOptions.md)\n\nThe options that are required to initialize the customer step of checkout\r\nwhen using StripeUPE.\n"
  },
  {
    "path": "docs/interfaces/WithStripeUPEPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithStripeUPEPaymentInitializeOptions\n\n# Interface: WithStripeUPEPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [stripeupe](WithStripeUPEPaymentInitializeOptions.md#stripeupe)\n\n## Properties\n\n### stripeupe\n\n• `Optional` **stripeupe**: [`StripeUPEPaymentInitializeOptions`](StripeUPEPaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithStripeV3PaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithStripeV3PaymentInitializeOptions\n\n# Interface: WithStripeV3PaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [stripev3](WithStripeV3PaymentInitializeOptions.md#stripev3)\n\n## Properties\n\n### stripev3\n\n• `Optional` **stripev3**: [`StripeV3PaymentInitializeOptions`](StripeV3PaymentInitializeOptions.md)\n"
  },
  {
    "path": "docs/interfaces/WithWorldpayAccessPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WithWorldpayAccessPaymentInitializeOptions\n\n# Interface: WithWorldpayAccessPaymentInitializeOptions\n\n## Table of contents\n\n### Properties\n\n- [worldpay](WithWorldpayAccessPaymentInitializeOptions.md#worldpay)\n\n## Properties\n\n### worldpay\n\n• `Optional` **worldpay**: [`WorldpayAccessPaymentInitializeOptions`](WorldpayAccessPaymentInitializeOptions.md)\n\nThe options that are required to initialize the Apple Pay payment\r\nmethod. They can be omitted unless you need to support Apple Pay.\n"
  },
  {
    "path": "docs/interfaces/WorldpayAccessPaymentInitializeOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / WorldpayAccessPaymentInitializeOptions\n\n# Interface: WorldpayAccessPaymentInitializeOptions\n\n## Table of contents\n\n### Methods\n\n- [onLoad](WorldpayAccessPaymentInitializeOptions.md#onload)\n\n## Methods\n\n### onLoad\n\n▸ **onLoad**(`iframe`, `cancel`): `void`\n\nA callback that gets called when the iframe is ready to be added to the\r\ncurrent page. It is responsible for determining where the iframe should\r\nbe inserted in the DOM.\n\n#### Parameters\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `iframe` | `HTMLIFrameElement` | The iframe element containing the payment web page provided by the strategy. |\n| `cancel` | () => `void` | A function, when called, will cancel the payment process and remove the iframe. |\n\n#### Returns\n\n`void`\n"
  },
  {
    "path": "docs/interfaces/ZipCodeElementOptions.md",
    "content": "[@bigcommerce/checkout-sdk](../README.md) / ZipCodeElementOptions\n\n# Interface: ZipCodeElementOptions\n\n## Table of contents\n\n### Properties\n\n- [containerId](ZipCodeElementOptions.md#containerid)\n\n## Properties\n\n### containerId\n\n• **containerId**: `string`\n"
  },
  {
    "path": "jest-setup.js",
    "content": "global.LIBRARY_VERSION = '1.0.0';\n\nbeforeEach(() => {\n    expect.hasAssertions();\n});\n\n// https://github.com/facebook/jest/issues/10784\nprocess.on('unhandledRejection', (reason) => {\n    console.log(reason);\n});\n"
  },
  {
    "path": "jest.config.js",
    "content": "const { getJestProjects } = require('@nx/jest');\n\nmodule.exports = {\n    projects: getJestProjects()\n};\n"
  },
  {
    "path": "jest.preset.js",
    "content": "const nxPreset = require('@nx/jest/preset');\nconst { pathsToModuleNameMapper } = require('ts-jest/utils');\nconst { compilerOptions } = require('./tsconfig.base.json');\n\nmodule.exports = {\n    ...nxPreset,\n    moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/../../' }),\n    coverageThreshold: {\n        global: {\n            branches: 80,\n            functions: 80,\n            lines: 80,\n            statements: 80,\n        },\n    },\n    reporters: ['default', 'jest-junit'],\n    transform: {\n        '^.+\\\\.[tj]s$': 'ts-jest',\n    },\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],\n    collectCoverageFrom: ['src/**/*.{js,ts}', '!src/**/*.mock.ts'],\n};\n"
  },
  {
    "path": "nx.json",
    "content": "{\n    \"$schema\": \"./node_modules/nx/schemas/nx-schema.json\",\n    \"targetDefaults\": {\n        \"build\": {\n            \"cache\": true\n        },\n        \"build-watch\": {\n            \"cache\": true\n        },\n        \"lint\": {\n            \"cache\": true\n        },\n        \"test\": {\n            \"cache\": true\n        }\n    },\n    \"parallel\": 5,\n    \"defaultBase\": \"master\"\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"@bigcommerce/checkout-sdk\",\n  \"version\": \"1.916.1\",\n  \"description\": \"BigCommerce Checkout JavaScript SDK\",\n  \"license\": \"MIT\",\n  \"main\": \"dist/cjs/checkout-sdk.js\",\n  \"module\": \"dist/esm/checkout-sdk.js\",\n  \"typings\": \"dist/types/checkout-sdk.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/types/checkout-sdk.d.ts\",\n      \"import\": \"./dist/esm/checkout-sdk.js\",\n      \"require\": \"./dist/cjs/checkout-sdk.js\"\n    },\n    \"./essential\": {\n      \"types\": \"./dist/types/checkout-sdk.d.ts\",\n      \"import\": \"./dist/esm/checkout-sdk-essential.js\",\n      \"require\": \"./dist/cjs/checkout-sdk-essential.js\"\n    },\n    \"./integrations/*\": {\n      \"types\": \"./dist/types/integrations/*.d.ts\",\n      \"import\": \"./dist/esm/integrations/*.js\",\n      \"require\": \"./dist/cjs/integrations/*.js\"\n    }\n  },\n  \"files\": [\n    \"dist/\",\n    \"docs/\"\n  ],\n  \"sideEffects\": false,\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/bigcommerce/checkout-sdk-js.git\"\n  },\n  \"author\": \"BigCommerce\",\n  \"bugs\": {\n    \"url\": \"https://github.com/bigcommerce/checkout-sdk-js/issues\"\n  },\n  \"engines\": {\n    \"node\": \"22\",\n    \"npm\": \"10\"\n  },\n  \"prettier\": \"@bigcommerce/eslint-config/prettier\",\n  \"homepage\": \"https://github.com/bigcommerce/checkout-sdk-js\",\n  \"scripts\": {\n    \"prepare\": \"check-node-version --node '>=22' --npm '>=10'\",\n    \"build\": \"npm run bundle && npm run bundle-dts\",\n    \"build:link\": \"rm -rf dist && npx nx run core:build --skip-nx-cache && npm run bundle-dts\",\n    \"prebuild-cdn\": \"rm -rf dist-cdn\",\n    \"build-cdn\": \"npx nx run core:build-cdn\",\n    \"prebundle\": \"rm -rf dist\",\n    \"bundle\": \"npx nx run core:build\",\n    \"bundle:analyze\": \"npx nx run core:build-analyze\",\n    \"bundle:watch\": \"export WATCH=true; npx nx run core:build-watch\",\n    \"bundle-dts\": \"npx nx run core:build-dts\",\n    \"docs\": \"npx nx run core:docs\",\n    \"generate\": \"npx nx run core:generate\",\n    \"lint\": \"npx nx run-many --target=lint --parallel=5 --all --verbose\",\n    \"release\": \"echo 'Please do not release locally, use CircleCi'\",\n    \"release:version\": \"git add dist docs && standard-version -a\",\n    \"release:alpha\": \"export PRERELEASE=alpha; npm run lint && npm test && npm run build && npm run release:version\",\n    \"test\": \"jest --config packages/core/jest.config.js\",\n    \"test:coverage\": \"npx nx run-many --all --target=test --parallel=5 -- --coverage\",\n    \"test:series\": \"npx nx run-many --all --target=test --parallel=5 -- --runInBand\",\n    \"test:core\": \"npx nx run core:test -- --coverage --runInBand\",\n    \"test:others\": \"npx nx run-many --all --target=test --exclude core --parallel=5 -- --runInBand\",\n    \"test:watch\": \"npx nx run-many --all --target=test --parallel -- --watch\"\n  },\n  \"jest-junit\": {\n    \"addFileAttribute\": \"true\"\n  },\n  \"dependencies\": {\n    \"@bigcommerce/bigpay-client\": \"^5.28.1\",\n    \"@bigcommerce/data-store\": \"^1.0.3\",\n    \"@bigcommerce/form-poster\": \"^1.5.0\",\n    \"@bigcommerce/memoize\": \"^1.0.0\",\n    \"@bigcommerce/request-sender\": \"^1.2.4\",\n    \"@bigcommerce/script-loader\": \"^2.2.2\",\n    \"@braintree/browser-detection\": \"^1.16.0\",\n    \"@types/card-validator\": \"^4.1.0\",\n    \"@types/iframe-resizer\": \"^3.5.13\",\n    \"@types/reselect\": \"^2.2.0\",\n    \"@types/shallowequal\": \"^1.1.5\",\n    \"card-validator\": \"^6.2.0\",\n    \"core-js\": \"^3.31.0\",\n    \"current-script-polyfill\": \"^1.0.0\",\n    \"iframe-resizer\": \"^3.6.6\",\n    \"intl-messageformat\": \"^10.5.14\",\n    \"local-storage-fallback\": \"^4.1.2\",\n    \"lodash\": \"^4.17.15\",\n    \"messageformat\": \"^2.3.0\",\n    \"query-string\": \"^7.1.1\",\n    \"reselect\": \"^4.1.8\",\n    \"rxjs\": \"^6.6.7\",\n    \"shallowequal\": \"^1.1.0\",\n    \"tslib\": \"^2.4.0\",\n    \"yup\": \"^1.2.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.6.2\",\n    \"@babel/preset-env\": \"^7.6.2\",\n    \"@bigcommerce/eslint-config\": \"^2.13.1\",\n    \"@microsoft/api-extractor\": \"^6.3.0\",\n    \"@nx/devkit\": \"19.8.9\",\n    \"@nx/eslint\": \"19.8.9\",\n    \"@nx/eslint-plugin\": \"19.8.9\",\n    \"@nx/jest\": \"19.8.9\",\n    \"@nx/js\": \"19.8.9\",\n    \"@nx/plugin\": \"19.8.9\",\n    \"@nx/workspace\": \"19.8.9\",\n    \"@square/web-payments-sdk-types\": \"^1.44.1\",\n    \"@types/applepayjs\": \"^3.0.2\",\n    \"@types/glob\": \"^7.2.0\",\n    \"@types/grecaptcha\": \"^2.0.36\",\n    \"@types/jest\": \"^24.0.17\",\n    \"@types/lodash\": \"4.14.185\",\n    \"@types/node\": \"^14.18.18\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.0.0\",\n    \"@typescript-eslint/parser\": \"^8.0.0\",\n    \"babel-loader\": \"^8.0.6\",\n    \"check-node-version\": \"^3.2.0\",\n    \"conventional-recommended-bump\": \"^6.0.5\",\n    \"eslint\": \"^8.16.0\",\n    \"eslint-config-prettier\": \"9.1.0\",\n    \"eslint-plugin-import\": \"^2.26.0\",\n    \"eslint-plugin-prettier\": \"^4.2.1\",\n    \"eslint-plugin-react\": \"^7.30.1\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"jest\": \"^26.6.3\",\n    \"jest-junit\": \"^15.0.0\",\n    \"nx\": \"19.8.9\",\n    \"prettier\": \"^2.6.2\",\n    \"regenerator-runtime\": \"^0.13.3\",\n    \"request\": \"^2.83.0\",\n    \"semver\": \"^7.1.1\",\n    \"source-map-loader\": \"^0.2.4\",\n    \"standard-version\": \"^9.5.0\",\n    \"ts-jest\": \"^26.5.6\",\n    \"ts-loader\": \"^9.2.9\",\n    \"typedoc\": \"^0.25.0\",\n    \"typedoc-plugin-markdown\": \"^3.11.0\",\n    \"typescript\": \"^4.7.2\",\n    \"webpack\": \"^5.101.3\",\n    \"webpack-assets-manifest\": \"^5.1.0\",\n    \"webpack-bundle-analyzer\": \"^4.5.0\",\n    \"webpack-cli\": \"^4.9.2\",\n    \"webpack-node-externals\": \"^3.0.0\"\n  },\n  \"optionalDependencies\": {\n    \"@swc/core-linux-x64-gnu\": \"^1.5.29\"\n  },\n  \"standard-version\": {\n    \"scripts\": {\n      \"prebump\": \"./scripts/standard-version/prebump.js\"\n    }\n  }\n}\n"
  },
  {
    "path": "packages/.gitkeep",
    "content": ""
  },
  {
    "path": "packages/adyen-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"jest/valid-expect\": \"off\",\n                \"jest/no-if\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"jest/no-test-return-statement\": \"off\",\n                \"@typescript-eslint/no-shadow\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/adyen-integration/README.md",
    "content": "# adyen-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test adyen-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint adyen-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/adyen-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'adyen-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/adyen-integration',\n};\n"
  },
  {
    "path": "packages/adyen-integration/project.json",
    "content": "{\n    \"name\": \"adyen-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/adyen-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/adyen-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/adyen-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/adyen-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/adyen-integration/src/adyenv2/adyenv2-payment-strategy.spec.ts",
    "content": "import { createScriptLoader, createStylesheetLoader } from '@bigcommerce/script-loader';\n\nimport {\n    AdyenAdditionalActionState,\n    AdyenComponent,\n    AdyenComponentEventState,\n    AdyenComponentType,\n    AdyenError,\n    AdyenPaymentMethodType,\n    adyenV2Mock,\n    AdyenV2ScriptLoader,\n    ResultCode,\n    WithAdyenV2PaymentInitializeOptions,\n} from '@bigcommerce/checkout-sdk/adyen-utils';\nimport {\n    InvalidArgumentError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentInvalidFormError,\n    PaymentMethodCancelledError,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCreditCardInstrument,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport AdyenV2PaymentStrategy from './adyenv2-payment-strategy';\n\nconst {\n    getAdditionalActionError,\n    getAdyenClient,\n    getAdyenError,\n    getComponentCCEventState,\n    getFailingComponent,\n    getInitializeOptions,\n    getInitializeOptionsWithNoCallbacks,\n    getInitializeOptionsWithUndefinedWidgetSize,\n    getOrderRequestBody,\n    getOrderRequestBodyWithoutPayment,\n    getOrderRequestBodyWithVaultedInstrument,\n    getUnknownError,\n    getAdyenV2,\n} = adyenV2Mock;\n\ndescribe('AdyenV2PaymentStrategy', () => {\n    let adyenV2ScriptLoader: AdyenV2ScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let strategy: AdyenV2PaymentStrategy;\n\n    beforeEach(() => {\n        const scriptLoader = createScriptLoader();\n        const stylesheetLoader = createStylesheetLoader();\n\n        adyenV2ScriptLoader = new AdyenV2ScriptLoader(scriptLoader, stylesheetLoader);\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new AdyenV2PaymentStrategy(paymentIntegrationService, adyenV2ScriptLoader);\n    });\n\n    describe('#Initializes & Executes', () => {\n        let options: PaymentInitializeOptions & WithAdyenV2PaymentInitializeOptions;\n        const adyenCheckout = getAdyenClient();\n        let paymentComponent: AdyenComponent;\n        let cardVerificationComponent: AdyenComponent;\n\n        beforeEach(() => {\n            let handleOnChange: (\n                componentState: AdyenComponentEventState,\n                component: AdyenComponent,\n            ) => unknown;\n\n            options = getInitializeOptions();\n\n            paymentComponent = {\n                mount: jest.fn(() => {\n                    handleOnChange(getComponentCCEventState(), paymentComponent);\n\n                    return document.createElement('div');\n                }),\n                unmount: jest.fn(),\n                submit: jest.fn(),\n            };\n\n            cardVerificationComponent = {\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                submit: jest.fn(),\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getAdyenV2());\n\n            jest.spyOn(adyenV2ScriptLoader, 'load').mockReturnValue(Promise.resolve(adyenCheckout));\n\n            jest.spyOn(adyenCheckout, 'create').mockImplementation(\n                jest.fn((_method, options) => {\n                    if (options && options.onChange) {\n                        handleOnChange = options.onChange;\n                    }\n\n                    return _method === AdyenComponentType.SecuredFields\n                        ? cardVerificationComponent\n                        : paymentComponent;\n                }),\n            );\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        describe('#initialize()', () => {\n            it('does not create adyen card verification component', async () => {\n                if (options.adyenv2) {\n                    options.adyenv2.cardVerificationContainerId = undefined;\n                }\n\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(1);\n            });\n\n            it('does not load adyen V2 if initialization options are not provided', () => {\n                options.adyenv2 = undefined;\n\n                const response = strategy.initialize(options);\n\n                return expect(response).rejects.toThrow(InvalidArgumentError);\n            });\n\n            it('fails mounting scheme payment component', async () => {\n                paymentComponent = getFailingComponent();\n\n                await expect(strategy.initialize(options)).rejects.toThrow(NotInitializedError);\n            });\n\n            it('fails mounting card verification component', async () => {\n                cardVerificationComponent = getFailingComponent();\n\n                await expect(strategy.initialize(options)).rejects.toThrow(NotInitializedError);\n            });\n\n            it('does not call adyenCheckout.create when initializing AliPay', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getAdyenV2(AdyenPaymentMethodType.AliPay));\n\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).not.toHaveBeenCalled();\n            });\n\n            it('does not call adyenCheckout.create when initializing Klarna', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getAdyenV2(AdyenPaymentMethodType.Klarna));\n\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).not.toHaveBeenCalled();\n            });\n\n            it('does not call adyenCheckout.create when initializing KlarnaAccount', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getAdyenV2(AdyenPaymentMethodType.KlarnaAccount));\n\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).not.toHaveBeenCalled();\n            });\n\n            it('does not call adyenCheckout.create when initializing KlarnaPayNow', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getAdyenV2(AdyenPaymentMethodType.KlarnaPayNow));\n\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).not.toHaveBeenCalled();\n            });\n\n            it('does not call adyenCheckout.create when initializing GiroPay', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getAdyenV2(AdyenPaymentMethodType.GiroPay));\n\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('#execute', () => {\n            const identifyShopperError = getAdditionalActionError(ResultCode.IdentifyShopper);\n            const challengeShopperError = getAdditionalActionError(ResultCode.ChallengeShopper);\n            let additionalActionComponent: AdyenComponent;\n\n            beforeEach(() => {\n                let handleOnAdditionalDetails: (\n                    additionalActionState: AdyenAdditionalActionState,\n                ) => unknown;\n\n                additionalActionComponent = {\n                    mount: jest.fn(() => {\n                        handleOnAdditionalDetails({\n                            data: {\n                                resultCode: ResultCode.ChallengeShopper,\n                                action: 'adyenAction',\n                            },\n                            isValid: true,\n                        });\n\n                        return document.createElement('div');\n                    }),\n                    unmount: jest.fn(),\n                    submit: jest.fn(),\n                };\n\n                jest.spyOn(adyenCheckout, 'createFromAction').mockImplementation(\n                    jest.fn((_type, options) => {\n                        if (options && options.onAdditionalDetails) {\n                            const { onAdditionalDetails } = options;\n\n                            handleOnAdditionalDetails = onAdditionalDetails;\n                        }\n\n                        return additionalActionComponent;\n                    }),\n                );\n            });\n\n            it('throws an error when payment is not present', async () => {\n                await expect(strategy.execute(getOrderRequestBodyWithoutPayment())).rejects.toThrow(\n                    PaymentArgumentInvalidError,\n                );\n            });\n\n            it('does not submit payment when trying to pay with invalid component state', async () => {\n                const adyenInvalidPaymentComponent = {\n                    mount: jest.fn(),\n                    unmount: jest.fn(),\n                    submit: jest.fn(),\n                };\n\n                jest.spyOn(adyenCheckout, 'create').mockReturnValue(adyenInvalidPaymentComponent);\n\n                await strategy.initialize(options);\n\n                await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                    NotInitializedError,\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(0);\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n            });\n\n            it('show fields validation if payment type with issuer field only', async () => {\n                const adyenInvalidPaymentComponent = {\n                    mount: jest.fn(),\n                    unmount: jest.fn(),\n                    submit: jest.fn(),\n                    componentRef: {\n                        showValidation: jest.fn(),\n                    },\n                    state: {\n                        issuer: undefined,\n                    },\n                    props: {\n                        type: 'ideal',\n                    },\n                };\n\n                jest.spyOn(adyenCheckout, 'create').mockReturnValueOnce(\n                    adyenInvalidPaymentComponent,\n                );\n\n                await strategy.initialize(options);\n\n                await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                    PaymentInvalidFormError,\n                );\n\n                expect(\n                    adyenInvalidPaymentComponent.componentRef.showValidation,\n                ).toHaveBeenCalledTimes(1);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(0);\n            });\n\n            it('throws an error when card fields invalid', async () => {\n                const adyenInvalidPaymentComponent = {\n                    mount: jest.fn(),\n                    unmount: jest.fn(),\n                    submit: jest.fn(),\n                    componentRef: {\n                        showValidation: jest.fn(),\n                    },\n                    state: {\n                        isValid: false,\n                        data: {\n                            encryptedCardNumber: 'ENCRYPTED_CARD_NUMBER',\n                            encryptedExpiryMonth: 'ENCRYPTED_EXPIRY_MONTH',\n                            encryptedExpiryYear: 'ENCRYPTED_EXPIRY_YEAR',\n                            encryptedSecurityCode: 'ENCRYPTED_CVV',\n                            holderName: 'ENCRYPTED_CVV',\n                        },\n                    },\n                    props: {\n                        type: 'card',\n                    },\n                };\n\n                jest.spyOn(adyenCheckout, 'create').mockReturnValueOnce(\n                    adyenInvalidPaymentComponent,\n                );\n\n                await strategy.initialize(options);\n\n                await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                    PaymentInvalidFormError,\n                );\n                expect(\n                    adyenInvalidPaymentComponent.componentRef.showValidation,\n                ).toHaveBeenCalledTimes(1);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(0);\n            });\n\n            it('throws an error when card fields empty with SEPA', async () => {\n                const adyenInvalidPaymentComponent = {\n                    mount: jest.fn(),\n                    unmount: jest.fn(),\n                    submit: jest.fn(),\n                    componentRef: {\n                        showValidation: jest.fn(),\n                    },\n                    state: {\n                        data: { ownerName: '  ', ibanNumber: 'NL13 TEST 0123 4567 89' },\n                    },\n                    props: {\n                        type: 'sepadirectdebit',\n                    },\n                };\n\n                jest.spyOn(adyenCheckout, 'create').mockReturnValueOnce(\n                    adyenInvalidPaymentComponent,\n                );\n\n                await strategy.initialize(options);\n\n                await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                    PaymentInvalidFormError,\n                );\n                expect(\n                    adyenInvalidPaymentComponent.componentRef.showValidation,\n                ).toHaveBeenCalledTimes(1);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(0);\n            });\n\n            it('calls submitPayment when paying with vaulted instrument', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n                await strategy.initialize(options);\n                await strategy.execute(getOrderRequestBodyWithVaultedInstrument());\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'scheme',\n                        paymentData: {\n                            formattedPayload: expect.objectContaining({\n                                bigpay_token: {\n                                    credit_card_number_confirmation: 'ENCRYPTED_CARD_NUMBER',\n                                    token: '123',\n                                    verification_value: 'ENCRYPTED_CVV',\n                                    expiry_month: 'ENCRYPTED_EXPIRY_MONTH',\n                                    expiry_year: 'ENCRYPTED_EXPIRY_YEAR',\n                                },\n                                origin: 'http://localhost',\n                                browser_info: {\n                                    color_depth: 24,\n                                    java_enabled: false,\n                                    language: 'en-US',\n                                    screen_height: 0,\n                                    screen_width: 0,\n                                    time_zone_offset: expect.anything(),\n                                },\n                            }),\n                        },\n                    }),\n                );\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n            });\n\n            it('calls submitPayment, passing a set as default flag, when paying with a vaulted instrument that should be defaulted', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n\n                await strategy.initialize(options);\n                await strategy.execute({\n                    useStoreCredit: false,\n                    payment: {\n                        methodId: 'scheme',\n                        paymentData: { instrumentId: '123', shouldSetAsDefaultInstrument: true },\n                    },\n                });\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                set_as_default_stored_instrument: true,\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('calls submitPayment, passing a vault flag, when paying with an instrument that should be vaulted', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n\n                await strategy.initialize(options);\n                await strategy.execute({\n                    payment: {\n                        methodId: 'scheme',\n                        paymentData: {\n                            ...getCreditCardInstrument(),\n                            shouldSaveInstrument: true,\n                        },\n                    },\n                });\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                vault_payment_instrument: true,\n                                set_as_default_stored_instrument: null,\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('calls submitPayment, passing both a vault and set as default flag, when paying with an instrument that should be vaulted and defaulted', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n\n                await strategy.initialize(options);\n                await strategy.execute({\n                    payment: {\n                        methodId: 'scheme',\n                        paymentData: {\n                            ...getCreditCardInstrument(),\n                            shouldSaveInstrument: true,\n                            shouldSetAsDefaultInstrument: true,\n                        },\n                    },\n                });\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                vault_payment_instrument: true,\n                                set_as_default_stored_instrument: true,\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('prefills holderName with billingAddress data if prefillCardHolderName is true', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...getAdyenV2(),\n                    initializationData: {\n                        ...getAdyenV2().initializationData,\n                        prefillCardHolderName: true,\n                    },\n                });\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).toHaveBeenNthCalledWith(\n                    1,\n                    'scheme',\n                    expect.objectContaining({\n                        data: {\n                            billingAddress: {\n                                city: 'Some City',\n                                country: 'US',\n                                houseNumberOrName: '',\n                                postalCode: '95555',\n                                stateOrProvince: 'CA',\n                                street: '12345 Testing Way',\n                            },\n                            holderName: 'Test Tester',\n                        },\n                    }),\n                );\n            });\n\n            it('does not prefill holderName with billingAddress data if prefillCardHolderName is false', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...getAdyenV2(),\n                    initializationData: {\n                        ...getAdyenV2().initializationData,\n                        prefillCardHolderName: false,\n                    },\n                });\n\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).toHaveBeenNthCalledWith(\n                    1,\n                    'scheme',\n                    expect.objectContaining({\n                        data: {\n                            billingAddress: {\n                                city: 'Some City',\n                                country: 'US',\n                                houseNumberOrName: '',\n                                postalCode: '95555',\n                                stateOrProvince: 'CA',\n                                street: '12345 Testing Way',\n                            },\n                            holderName: '',\n                        },\n                    }),\n                );\n            });\n\n            it('additional action component fires back onError', async () => {\n                const adyenError = getAdyenError();\n                let handleOnError: (error: AdyenError) => unknown;\n\n                const additionalActionComponentWithError: AdyenComponent = {\n                    mount: jest.fn(() => {\n                        handleOnError(adyenError);\n\n                        return document.createElement('div');\n                    }),\n                    unmount: jest.fn(),\n                    submit: jest.fn(),\n                };\n\n                jest.spyOn(adyenCheckout, 'createFromAction').mockImplementation(\n                    jest.fn((_type, options) => {\n                        if (options) {\n                            const { onError } = options;\n\n                            handleOnError = onError;\n                        }\n\n                        return additionalActionComponentWithError;\n                    }),\n                );\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                    Promise.reject(identifyShopperError),\n                );\n\n                await strategy.initialize(options);\n\n                await expect(strategy.execute(getOrderRequestBody())).rejects.toMatchObject(\n                    adyenError,\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n            });\n\n            it('returns 3DS2 ChallengeShopper flow with default widget size', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment')\n                    .mockReturnValueOnce(Promise.reject(challengeShopperError))\n                    .mockImplementationOnce(jest.fn());\n\n                options = getInitializeOptionsWithUndefinedWidgetSize();\n\n                await strategy.initialize(options);\n                await strategy.execute(getOrderRequestBody());\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n            });\n\n            it('calls submit payment with SEPA component', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getAdyenV2(AdyenPaymentMethodType.SEPA));\n\n                await strategy.initialize(options);\n                await strategy.execute(getOrderRequestBody(AdyenPaymentMethodType.SEPA));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(1);\n            });\n\n            it('calls submit payment with ACH component and a correct payload', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...getAdyenV2(AdyenPaymentMethodType.ACH),\n                    initializationData: {\n                        ...getAdyenV2().initializationData,\n                        prefillCardHolderName: true,\n                    },\n                });\n\n                await strategy.initialize(options);\n                await strategy.execute(getOrderRequestBody(AdyenPaymentMethodType.ACH));\n\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(1);\n                expect(adyenCheckout.create).toHaveBeenCalledWith('ach', {\n                    hasHolderName: expect.any(Boolean),\n                    styles: expect.any(Object),\n                    placeholders: expect.any(Object),\n                    onChange: expect.any(Function),\n                    data: {\n                        billingAddress: {\n                            street: '12345 Testing Way',\n                            houseNumberOrName: '',\n                            postalCode: '95555',\n                            city: 'Some City',\n                            stateOrProvince: 'CA',\n                            country: 'US',\n                        },\n                        holderName: 'Test Tester',\n                    },\n                });\n            });\n\n            it('calls submitPayment when paying with vaulted account', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getAdyenV2(AdyenPaymentMethodType.GiroPay));\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n\n                options = getInitializeOptions(true);\n\n                await strategy.initialize(options);\n                await strategy.execute(\n                    getOrderRequestBodyWithVaultedInstrument(AdyenPaymentMethodType.GiroPay),\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'giropay',\n                        paymentData: {\n                            formattedPayload: expect.objectContaining({\n                                bigpay_token: {\n                                    token: '123',\n                                },\n                                origin: 'http://localhost',\n                                browser_info: {\n                                    color_depth: 24,\n                                    java_enabled: false,\n                                    language: 'en-US',\n                                    screen_height: 0,\n                                    screen_width: 0,\n                                    time_zone_offset: expect.anything(),\n                                },\n                            }),\n                        },\n                    }),\n                );\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(0);\n            });\n\n            it('calls submitPayment, passing a set as default flag, when paying with vaulted account that should be defaulted', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getAdyenV2(AdyenPaymentMethodType.GiroPay));\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n\n                options = getInitializeOptions(true);\n\n                await strategy.initialize(options);\n                await strategy.execute({\n                    useStoreCredit: false,\n                    payment: {\n                        methodId: 'giropay',\n                        paymentData: { instrumentId: '123', shouldSetAsDefaultInstrument: true },\n                    },\n                });\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                set_as_default_stored_instrument: true,\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('returns 3DS2 ChallengeShopper flow with no callbacks', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment')\n                    .mockReturnValueOnce(Promise.reject(challengeShopperError))\n                    .mockImplementationOnce(jest.fn());\n\n                options = getInitializeOptionsWithNoCallbacks();\n                await strategy.initialize(options);\n                await strategy.execute(getOrderRequestBody());\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n            });\n\n            it('unmounts additional component when payment fails with challengeShopperError', async () => {\n                additionalActionComponent = {\n                    mount: jest.fn(),\n                    unmount: jest.fn(),\n                    submit: jest.fn(),\n                };\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                    Promise.reject(challengeShopperError),\n                );\n\n                const newOptions = {\n                    methodId: 'adyenv2',\n                    adyenv2: {\n                        containerId: 'adyen-scheme-component-field',\n                        cardVerificationContainerId: 'adyen-custom-card-component-field',\n                        threeDS2ContainerId: 'adyen-scheme-3ds-component-field',\n                        options: {\n                            hasHolderName: true,\n                            styles: {},\n                            placeholders: {},\n                        },\n                        threeDS2Options: {\n                            widgetSize: '05',\n                            onBeforeLoad: jest.fn(),\n                            onComplete: jest.fn(),\n                            onLoad: jest.fn(),\n                        },\n                        additionalActionOptions: {\n                            containerId: 'adyen-scheme-additional-action-component-field',\n                            onBeforeLoad: jest.fn(),\n                            onComplete: jest.fn(),\n                            onLoad: jest.fn((func) => {\n                                func('Cancel');\n                            }),\n                        },\n                        validateCardFields: jest.fn(),\n                    },\n                };\n\n                await strategy.initialize(newOptions);\n\n                await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                    PaymentMethodCancelledError,\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                expect(additionalActionComponent.unmount).toHaveBeenCalledTimes(1);\n            });\n\n            describe('submitPayment fails with identifyShopperError', () => {\n                beforeEach(async () => {\n                    await strategy.initialize(options);\n                });\n\n                it('calls submitPayment when additional action completes', async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment')\n                        .mockReturnValueOnce(Promise.reject(identifyShopperError))\n                        .mockImplementationOnce(jest.fn());\n\n                    await strategy.execute(getOrderRequestBody());\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n                });\n\n                it('returns UNKNOWN_ERROR when submitPayment fails', async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment')\n                        .mockReturnValueOnce(Promise.reject(identifyShopperError))\n                        .mockReturnValueOnce(Promise.reject(getUnknownError()))\n                        .mockImplementation(jest.fn());\n\n                    await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                        RequestError,\n                    );\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n                });\n\n                describe('submitPayment fails with challengeShopperError', () => {\n                    it('calls submitPayment when additional action completes', async () => {\n                        jest.spyOn(paymentIntegrationService, 'submitPayment')\n                            .mockReturnValueOnce(Promise.reject(identifyShopperError))\n                            .mockReturnValueOnce(Promise.reject(challengeShopperError))\n                            .mockImplementationOnce(jest.fn());\n\n                        await strategy.execute(getOrderRequestBody());\n\n                        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(3);\n                        expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                        expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(2);\n                    });\n\n                    it('returns UNKNOWN_ERROR when submitPayment fails', async () => {\n                        jest.spyOn(paymentIntegrationService, 'submitPayment')\n                            .mockReturnValueOnce(Promise.reject(identifyShopperError))\n                            .mockReturnValueOnce(Promise.reject(challengeShopperError))\n                            .mockReturnValue(Promise.reject(getUnknownError()));\n\n                        await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                            RequestError,\n                        );\n\n                        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(3);\n                        expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                        expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(2);\n                    });\n                });\n            });\n\n            describe('submitPayment fails with challengeShopperError', () => {\n                beforeEach(async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                        Promise.reject(challengeShopperError),\n                    );\n\n                    await strategy.initialize(options);\n                });\n\n                it('calls submitPayment when additional action completes', async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                        jest.fn(),\n                    );\n\n                    await strategy.execute(getOrderRequestBody());\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n                });\n\n                it('returns UNKNOWN_ERROR when submitPayment fails', async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment')\n                        .mockReturnValueOnce(Promise.reject(getUnknownError()))\n                        .mockImplementationOnce(jest.fn());\n\n                    await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                        RequestError,\n                    );\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n                });\n            });\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws an error to inform that order finalization is not required', () => {\n            const promise = strategy.finalize();\n\n            return expect(promise).rejects.toBeInstanceOf(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize', () => {\n        beforeEach(() => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getAdyenV2());\n        });\n\n        it('deinitialize adyen payment strategy', async () => {\n            const adyenClient = getAdyenClient();\n            const adyenComponent = adyenClient.create('scheme', {});\n\n            jest.spyOn(adyenV2ScriptLoader, 'load').mockReturnValue(Promise.resolve(adyenClient));\n            jest.spyOn(adyenClient, 'create').mockReturnValue(adyenComponent);\n\n            await strategy.initialize(getInitializeOptions());\n\n            const promise = strategy.deinitialize();\n\n            expect(adyenComponent.unmount).toHaveBeenCalled();\n\n            return expect(promise).resolves.toBeUndefined();\n        });\n\n        it('does not unmount when adyen component is not available', () => {\n            const promise = strategy.deinitialize();\n\n            return expect(promise).resolves.toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/adyen-integration/src/adyenv2/adyenv2-payment-strategy.ts",
    "content": "import { some } from 'lodash';\n\nimport {\n    AdyenAction,\n    AdyenAdditionalAction,\n    AdyenAdditionalActionState,\n    AdyenClient,\n    AdyenComponent,\n    AdyenComponentEventState,\n    AdyenComponentType,\n    AdyenError,\n    AdyenPaymentMethodType,\n    AdyenPlaceholderData,\n    AdyenV2ActionType,\n    AdyenV2PaymentInitializeOptions,\n    AdyenV2PaymentMethodInitializationData,\n    AdyenV2ScriptLoader,\n    CardStateErrors,\n    isAccountState,\n    isCardState,\n    WithAdyenV2PaymentInitializeOptions,\n} from '@bigcommerce/checkout-sdk/adyen-utils';\nimport {\n    BillingAddress,\n    getBrowserInfo,\n    HostedInstrument,\n    InvalidArgumentError,\n    isRequestError,\n    isVaultedInstrument,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentInvalidFormError,\n    PaymentInvalidFormErrorDetails,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class AdyenV2PaymentStrategy implements PaymentStrategy {\n    private _adyenClient?: AdyenClient;\n    private _cardVerificationComponent?: AdyenComponent;\n    private _componentState?: AdyenComponentEventState;\n    private _paymentComponent?: AdyenComponent;\n    private _paymentInitializeOptions?: AdyenV2PaymentInitializeOptions;\n\n    constructor(\n        private _paymentIntegrationService: PaymentIntegrationService,\n        private _scriptLoader: AdyenV2ScriptLoader,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithAdyenV2PaymentInitializeOptions,\n    ): Promise<void> {\n        const { adyenv2 } = options;\n\n        if (!adyenv2) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.adyenv2\" argument is not provided.',\n            );\n        }\n\n        this._paymentInitializeOptions = adyenv2;\n\n        const paymentMethod = this._paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow<AdyenV2PaymentMethodInitializationData>(options.methodId);\n        const { originKey, clientKey, environment, paymentMethodsResponse } =\n            paymentMethod.initializationData || {};\n        const clientSideAuthentication = {\n            key: '',\n            value: '',\n        };\n\n        if (originKey) {\n            clientSideAuthentication.key = 'originKey';\n            clientSideAuthentication.value = originKey;\n        } else {\n            clientSideAuthentication.key = 'clientKey';\n            clientSideAuthentication.value = clientKey || '';\n        }\n\n        this._adyenClient = await this._scriptLoader.load({\n            environment,\n            locale: this._paymentIntegrationService.getState().getLocale(),\n            [clientSideAuthentication.key]: clientSideAuthentication.value,\n            paymentMethodsResponse,\n            translations: {\n                es: { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n                'es-AR': { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n                'es-ES': { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n                'es-MX': { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n                'es-CL': { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n                'es-CO': { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n                'es-PE': { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n            },\n        });\n\n        this._paymentComponent = await this._mountPaymentComponent(paymentMethod);\n\n        if (\n            paymentMethod.method === AdyenPaymentMethodType.CreditCard ||\n            paymentMethod.method === AdyenPaymentMethodType.Bancontact\n        ) {\n            this._cardVerificationComponent = await this._mountCardVerificationComponent();\n        }\n\n        return Promise.resolve();\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n        const paymentData = payment && payment.paymentData;\n        const shouldSaveInstrument =\n            paymentData && (paymentData as HostedInstrument).shouldSaveInstrument;\n        const shouldSetAsDefaultInstrument =\n            paymentData && (paymentData as HostedInstrument).shouldSetAsDefaultInstrument;\n\n        if (!payment) {\n            return Promise.reject(new PaymentArgumentInvalidError(['payment']));\n        }\n\n        this._validateCardData();\n\n        await this._paymentIntegrationService.submitOrder(order, options);\n\n        const componentState = this._componentState;\n\n        if (!componentState) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        if (paymentData && isVaultedInstrument(paymentData)) {\n            let bigpayToken = {};\n\n            if (isCardState(componentState)) {\n                const {\n                    encryptedCardNumber,\n                    encryptedSecurityCode,\n                    encryptedExpiryMonth,\n                    encryptedExpiryYear,\n                } = componentState.data.paymentMethod;\n\n                bigpayToken = {\n                    credit_card_number_confirmation: encryptedCardNumber,\n                    expiry_month: encryptedExpiryMonth,\n                    expiry_year: encryptedExpiryYear,\n                    verification_value: encryptedSecurityCode,\n                };\n            }\n\n            if (isCardState(componentState) || isAccountState(componentState)) {\n                try {\n                    await this._paymentIntegrationService.submitPayment({\n                        ...payment,\n                        paymentData: {\n                            formattedPayload: {\n                                bigpay_token: {\n                                    ...bigpayToken,\n                                    token: paymentData.instrumentId,\n                                },\n                                origin: window.location.origin,\n                                browser_info: getBrowserInfo(),\n                                set_as_default_stored_instrument:\n                                    shouldSetAsDefaultInstrument || null,\n                            },\n                        },\n                    });\n\n                    return;\n                } catch (error) {\n                    await this._processAdditionalAction(\n                        error,\n                        shouldSaveInstrument,\n                        shouldSetAsDefaultInstrument,\n                    );\n\n                    return;\n                }\n            }\n        }\n\n        try {\n            await this._paymentIntegrationService.submitPayment({\n                methodId: payment.methodId,\n                paymentData: {\n                    formattedPayload: {\n                        credit_card_token: {\n                            token: JSON.stringify({\n                                ...componentState.data.paymentMethod,\n                                origin: window.location.origin,\n                            }),\n                        },\n                        browser_info: getBrowserInfo(),\n                        vault_payment_instrument: shouldSaveInstrument || null,\n                        set_as_default_stored_instrument: shouldSetAsDefaultInstrument || null,\n                    },\n                },\n            });\n        } catch (error) {\n            await this._processAdditionalAction(\n                error,\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n            );\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this._componentState = undefined;\n\n        if (this._paymentComponent) {\n            this._paymentComponent.unmount();\n            this._paymentComponent = undefined;\n        }\n\n        if (this._cardVerificationComponent) {\n            this._cardVerificationComponent.unmount();\n            this._cardVerificationComponent = undefined;\n        }\n\n        return Promise.resolve();\n    }\n\n    private _getAdyenClient(): AdyenClient {\n        if (!this._adyenClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this._adyenClient;\n    }\n\n    private _getPaymentInitializeOptions(): AdyenV2PaymentInitializeOptions {\n        if (!this._paymentInitializeOptions) {\n            throw new InvalidArgumentError(\n                '\"options.adyenv2\" argument was not provided during initialization.',\n            );\n        }\n\n        return this._paymentInitializeOptions;\n    }\n\n    private _getThreeDS2ChallengeWidgetSize(): string {\n        const { additionalActionOptions, threeDS2Options } = this._getPaymentInitializeOptions();\n        const widgetSize = additionalActionOptions.widgetSize || threeDS2Options?.widgetSize;\n\n        if (!widgetSize) {\n            return '05';\n        }\n\n        return widgetSize;\n    }\n\n    private _handleAction(additionalAction: AdyenAdditionalAction): Promise<Payment> {\n        return new Promise((resolve, reject) => {\n            const { threeDS2ContainerId, additionalActionOptions } =\n                this._getPaymentInitializeOptions();\n            const { onBeforeLoad, containerId, onLoad, onComplete } = additionalActionOptions;\n            const adyenAction: AdyenAction = JSON.parse(additionalAction.action);\n\n            const additionalActionComponent = this._getAdyenClient().createFromAction(adyenAction, {\n                onAdditionalDetails: (additionalActionState: AdyenAdditionalActionState) => {\n                    const paymentPayload = {\n                        methodId: adyenAction.paymentMethodType,\n                        paymentData: {\n                            nonce: JSON.stringify(additionalActionState.data),\n                        },\n                    };\n\n                    if (onComplete) {\n                        onComplete();\n                    }\n\n                    resolve(paymentPayload);\n                },\n                size: this._getThreeDS2ChallengeWidgetSize(),\n                onError: (error: AdyenError) => reject(error),\n            });\n\n            if (onBeforeLoad) {\n                onBeforeLoad(\n                    adyenAction.type === AdyenV2ActionType.ThreeDS2Challenge ||\n                        adyenAction.type === AdyenV2ActionType.QRCode,\n                );\n            }\n\n            additionalActionComponent.mount(`#${containerId || threeDS2ContainerId}`);\n\n            if (onLoad) {\n                onLoad(() => {\n                    reject(new PaymentMethodCancelledError());\n                    additionalActionComponent.unmount();\n                });\n            }\n        });\n    }\n\n    private _mapAdyenPlaceholderData(\n        billingAddress?: BillingAddress,\n        prefillCardHolderName?: boolean,\n    ): AdyenPlaceholderData {\n        if (!billingAddress) {\n            return {};\n        }\n\n        const {\n            firstName,\n            lastName,\n            address1: street,\n            address2: houseNumberOrName,\n            postalCode,\n            city,\n            stateOrProvinceCode: stateOrProvince,\n            countryCode: country,\n        } = billingAddress;\n\n        return {\n            holderName: prefillCardHolderName ? `${firstName} ${lastName}` : '',\n            billingAddress: {\n                street,\n                houseNumberOrName,\n                postalCode,\n                city,\n                stateOrProvince,\n                country,\n            },\n        };\n    }\n\n    private _mountCardVerificationComponent(): Promise<AdyenComponent> {\n        const adyenv2 = this._getPaymentInitializeOptions();\n        const adyenClient = this._getAdyenClient();\n        let cardVerificationComponent: AdyenComponent;\n\n        return new Promise((resolve, reject) => {\n            if (adyenv2.cardVerificationContainerId) {\n                cardVerificationComponent = adyenClient.create(AdyenComponentType.SecuredFields, {\n                    ...adyenv2.options,\n                    styles: {\n                        ...adyenv2.options?.styles,\n                        placeholder: {\n                            color: 'transparent',\n                            caretColor: '#000',\n                            ...adyenv2.options?.styles?.placeholder,\n                        },\n                    },\n                    onChange: (componentState) => this._updateComponentState(componentState),\n                    onError: (validateState) => adyenv2.validateCardFields(validateState),\n                    onFieldValid: (validateState) => adyenv2.validateCardFields(validateState),\n                });\n\n                try {\n                    cardVerificationComponent.mount(`#${adyenv2.cardVerificationContainerId}`);\n                } catch (error) {\n                    reject(new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized));\n                }\n            }\n\n            resolve(cardVerificationComponent);\n        });\n    }\n\n    private _mountPaymentComponent(paymentMethod: PaymentMethod): Promise<AdyenComponent> {\n        let paymentComponent: AdyenComponent;\n        const adyenv2 = this._getPaymentInitializeOptions();\n        const adyenClient = this._getAdyenClient();\n\n        return new Promise((resolve, reject) => {\n            switch (paymentMethod.method) {\n                case AdyenPaymentMethodType.CreditCard:\n                case AdyenPaymentMethodType.ACH:\n                case AdyenPaymentMethodType.Bancontact: {\n                    const billingAddress = this._paymentIntegrationService\n                        .getState()\n                        .getBillingAddress();\n                    const { prefillCardHolderName } = paymentMethod.initializationData;\n\n                    paymentComponent = adyenClient.create(paymentMethod.method, {\n                        ...adyenv2.options,\n                        onChange: (componentState) => this._updateComponentState(componentState),\n                        data: this._mapAdyenPlaceholderData(billingAddress, prefillCardHolderName),\n                    });\n\n                    try {\n                        paymentComponent.mount(`#${adyenv2.containerId}`);\n                    } catch (error) {\n                        reject(\n                            new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n                        );\n                    }\n\n                    break;\n                }\n\n                case AdyenPaymentMethodType.IDEAL:\n                case AdyenPaymentMethodType.SEPA:\n                    if (!adyenv2.hasVaultedInstruments) {\n                        paymentComponent = adyenClient.create(paymentMethod.method, {\n                            ...adyenv2.options,\n                            onChange: (componentState) =>\n                                this._updateComponentState(componentState),\n                        });\n\n                        try {\n                            paymentComponent.mount(`#${adyenv2.containerId}`);\n                        } catch (error) {\n                            reject(\n                                new NotInitializedError(\n                                    NotInitializedErrorType.PaymentNotInitialized,\n                                ),\n                            );\n                        }\n                    } else {\n                        this._updateComponentState({\n                            data: {\n                                paymentMethod: {\n                                    type: paymentMethod.method,\n                                },\n                            },\n                        });\n                    }\n\n                    break;\n\n                case AdyenPaymentMethodType.AliPay:\n                case AdyenPaymentMethodType.GiroPay:\n                case AdyenPaymentMethodType.Sofort:\n                case AdyenPaymentMethodType.Klarna:\n                case AdyenPaymentMethodType.KlarnaPayNow:\n                case AdyenPaymentMethodType.KlarnaAccount:\n                case AdyenPaymentMethodType.Vipps:\n                case AdyenPaymentMethodType.WeChatPayQR:\n                    this._updateComponentState({\n                        data: {\n                            paymentMethod: {\n                                type: paymentMethod.method,\n                            },\n                        },\n                    });\n            }\n\n            resolve(paymentComponent);\n        });\n    }\n\n    private async _processAdditionalAction(\n        error: unknown,\n        shouldSaveInstrument?: boolean,\n        shouldSetAsDefaultInstrument?: boolean,\n    ): Promise<PaymentIntegrationSelectors | void> {\n        if (\n            !isRequestError(error) ||\n            !some(error.body.errors, { code: 'additional_action_required' })\n        ) {\n            throw error;\n        }\n\n        const payment = await this._handleAction(error.body.provider_data);\n\n        try {\n            await this._paymentIntegrationService.submitPayment({\n                ...payment,\n                paymentData: {\n                    ...payment.paymentData,\n                    shouldSaveInstrument,\n                    shouldSetAsDefaultInstrument,\n                },\n            });\n        } catch (paymentError) {\n            return this._processAdditionalAction(\n                paymentError,\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n            );\n        }\n    }\n\n    private _updateComponentState(componentState: AdyenComponentEventState) {\n        this._componentState = componentState;\n    }\n\n    private _validateCardData(): void {\n        const adyenv2 = this._getPaymentInitializeOptions();\n        const cardComponent = adyenv2.hasVaultedInstruments\n            ? this._cardVerificationComponent\n            : this._paymentComponent;\n        const isEmptyString = (value: string) => value.toString().trim().length === 0;\n\n        if (!cardComponent?.componentRef?.showValidation || !cardComponent.state) {\n            return;\n        }\n\n        cardComponent.componentRef.showValidation();\n\n        /**\n         * For some reason adyen sdk doesn't return isValid for payment methods with select field in form(iDeal for example)\n         * so we need to check state issuer field\n         */\n        if (\n            Object.keys(cardComponent.state).length === 0 ||\n            (!cardComponent.state.isValid && !cardComponent.state.issuer) ||\n            // prevent empty sepa fields from being sent\n            (cardComponent.props?.type === 'sepadirectdebit' &&\n                cardComponent.state.data &&\n                Object.values(cardComponent.state.data).some(isEmptyString))\n        ) {\n            throw new PaymentInvalidFormError(this._mapCardErrors(cardComponent.state.errors));\n        }\n    }\n\n    private _mapCardErrors(cardStateErrors: CardStateErrors = {}): PaymentInvalidFormErrorDetails {\n        const errors: PaymentInvalidFormErrorDetails = {};\n\n        Object.keys(cardStateErrors).forEach((key) => {\n            errors[key] = [\n                {\n                    message: cardStateErrors[key],\n                    type: key,\n                },\n            ];\n        });\n\n        return errors;\n    }\n}\n"
  },
  {
    "path": "packages/adyen-integration/src/adyenv2/create-adyenv2-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport AdyenV2PaymentStrategy from './adyenv2-payment-strategy';\nimport createAdyenV2PaymentStrategy from './create-adyenv2-payment-strategy';\n\ndescribe('createAdyenV2PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates adyenv2 payment strategy', () => {\n        const strategy = createAdyenV2PaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(AdyenV2PaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/adyen-integration/src/adyenv2/create-adyenv2-payment-strategy.ts",
    "content": "import { getScriptLoader, getStylesheetLoader } from '@bigcommerce/script-loader';\n\nimport { AdyenV2ScriptLoader } from '@bigcommerce/checkout-sdk/adyen-utils';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport AdyenV2PaymentStrategy from './adyenv2-payment-strategy';\n\nconst createAdyenV2PaymentStrategy: PaymentStrategyFactory<AdyenV2PaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new AdyenV2PaymentStrategy(\n        paymentIntegrationService,\n        new AdyenV2ScriptLoader(getScriptLoader(), getStylesheetLoader()),\n    );\n};\n\nexport default toResolvableModule(createAdyenV2PaymentStrategy, [{ gateway: 'adyenv2' }]);\n"
  },
  {
    "path": "packages/adyen-integration/src/adyenv3/adyenv3-payment-strategy.spec.ts",
    "content": "import { createScriptLoader, createStylesheetLoader } from '@bigcommerce/script-loader';\n\nimport {\n    ActionHandledReturnObject,\n    AdyenAdditionalActionState,\n    AdyenComponent,\n    AdyenComponentEventState,\n    AdyenComponentType,\n    AdyenError,\n    AdyenPaymentMethodType,\n    adyenV3Mock,\n    AdyenV3ScriptLoader,\n    ResultCode,\n    WithAdyenV3PaymentInitializeOptions,\n} from '@bigcommerce/checkout-sdk/adyen-utils';\nimport {\n    InvalidArgumentError,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentInvalidFormError,\n    PaymentMethodCancelledError,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCreditCardInstrument,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport AdyenV3PaymentStrategy from './adyenv3-payment-strategy';\n\nconst {\n    getAdditionalActionError,\n    getAdyenClient,\n    getAdyenError,\n    getBoletoComponentState,\n    getComponentCCEventState,\n    getInitializeOptions,\n    getInitializeOptionsWithNoCallbacks,\n    getInitializeOptionsWithUndefinedWidgetSize,\n    getOrderRequestBody,\n    getOrderRequestBodyWithoutPayment,\n    getOrderRequestBodyWithVaultedInstrument,\n    getUnknownError,\n    getAdyenV3,\n} = adyenV3Mock;\n\ndescribe('AdyenV3PaymentStrategy', () => {\n    let adyenV3ScriptLoader: AdyenV3ScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let strategy: AdyenV3PaymentStrategy;\n\n    beforeEach(() => {\n        const scriptLoader = createScriptLoader();\n        const stylesheetLoader = createStylesheetLoader();\n\n        adyenV3ScriptLoader = new AdyenV3ScriptLoader(scriptLoader, stylesheetLoader);\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new AdyenV3PaymentStrategy(paymentIntegrationService, adyenV3ScriptLoader);\n\n        const mockElement = document.createElement('div');\n\n        jest.spyOn(document, 'getElementById').mockReturnValue(mockElement);\n    });\n\n    describe('#Initializes & Executes', () => {\n        let options: PaymentInitializeOptions & WithAdyenV3PaymentInitializeOptions;\n        const adyenCheckout = getAdyenClient();\n        let paymentComponent: AdyenComponent;\n        let cardVerificationComponent: AdyenComponent;\n\n        beforeEach(() => {\n            let handleOnChange: (\n                componentState: AdyenComponentEventState,\n                component: AdyenComponent,\n            ) => unknown;\n\n            options = getInitializeOptions();\n\n            paymentComponent = {\n                mount: jest.fn(() => {\n                    handleOnChange(getComponentCCEventState(), paymentComponent);\n\n                    return document.createElement('div');\n                }),\n                unmount: jest.fn(),\n                submit: jest.fn(),\n            };\n\n            cardVerificationComponent = {\n                mount: jest.fn(() => {\n                    handleOnChange(getComponentCCEventState(), cardVerificationComponent);\n\n                    return document.createElement('div');\n                }),\n                unmount: jest.fn(),\n                submit: jest.fn(),\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getAdyenV3());\n\n            jest.spyOn(adyenV3ScriptLoader, 'load').mockReturnValue(Promise.resolve(adyenCheckout));\n\n            jest.spyOn(adyenCheckout, 'create').mockImplementation(\n                jest.fn((_method, options) => {\n                    if (options && options.onChange) {\n                        const { onChange } = options;\n\n                        handleOnChange = onChange;\n                    }\n\n                    return _method === AdyenComponentType.SecuredFields\n                        ? cardVerificationComponent\n                        : paymentComponent;\n                }),\n            );\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        describe('#initialize()', () => {\n            it('does not create adyen card verification component', async () => {\n                if (options.adyenv3) {\n                    options.adyenv3.cardVerificationContainerId = undefined;\n                }\n\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(1);\n            });\n\n            it('does not load adyen V3 if initialization options are not provided', () => {\n                options.adyenv3 = undefined;\n\n                const response = strategy.initialize(options);\n\n                return expect(response).rejects.toThrow(InvalidArgumentError);\n            });\n\n            it('fails mounting scheme payment component', async () => {\n                const mountPaymentSpy = jest\n                    .spyOn(AdyenV3PaymentStrategy.prototype as any, '_mountPaymentComponent')\n                    .mockImplementation(() =>\n                        Promise.reject(\n                            new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n                        ),\n                    );\n\n                await expect(strategy.initialize(options)).rejects.toThrow(NotInitializedError);\n\n                mountPaymentSpy.mockRestore();\n            });\n\n            it('fails mounting card verification component', async () => {\n                const mountVerificationSpy = jest\n                    .spyOn(\n                        AdyenV3PaymentStrategy.prototype as any,\n                        '_mountCardVerificationComponent',\n                    )\n                    .mockImplementation(() =>\n                        Promise.reject(\n                            new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n                        ),\n                    );\n\n                await expect(strategy.initialize(options)).rejects.toThrow(NotInitializedError);\n\n                mountVerificationSpy.mockRestore();\n            });\n\n            it('fails mounting payment element if container not exist', async () => {\n                jest.spyOn(document, 'getElementById').mockReturnValue(null);\n\n                const mountPaymentSpy = jest\n                    .spyOn(AdyenV3PaymentStrategy.prototype as any, '_mountPaymentComponent')\n                    .mockImplementation(() =>\n                        Promise.reject(\n                            new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n                        ),\n                    );\n\n                await expect(strategy.initialize(options)).rejects.toThrow(NotInitializedError);\n\n                mountPaymentSpy.mockRestore();\n            });\n\n            it('set ES locale for es locales', () => {\n                jest.spyOn(paymentIntegrationService.getState(), 'getLocale').mockReturnValue(\n                    'es-419',\n                );\n\n                expect(strategy.initialize(options));\n                expect(adyenV3ScriptLoader.load).toHaveBeenCalledWith(\n                    expect.objectContaining({ locale: 'es' }),\n                );\n            });\n\n            it('set correct locale', () => {\n                jest.spyOn(paymentIntegrationService.getState(), 'getLocale').mockReturnValue(\n                    'en_US',\n                );\n\n                expect(strategy.initialize(options));\n                expect(adyenV3ScriptLoader.load).toHaveBeenCalledWith(\n                    expect.objectContaining({ locale: 'en_US' }),\n                );\n            });\n\n            it('does not hide shopper input fields for non-Oney payment methods', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getAdyenV3('boletobancario'));\n\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).toHaveBeenCalledWith(\n                    'boletobancario',\n                    expect.not.objectContaining({\n                        visibility: expect.anything(),\n                    }),\n                );\n            });\n\n            it('hides shopper input fields for Oney payment methods', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getAdyenV3('facilypay_3x'));\n\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).toHaveBeenCalledWith(\n                    'facilypay_3x',\n                    expect.objectContaining({\n                        visibility: {\n                            personalDetails: 'hidden',\n                            billingAddress: 'hidden',\n                            deliveryAddress: 'hidden',\n                        },\n                    }),\n                );\n            });\n        });\n\n        describe('#execute', () => {\n            const identifyShopperError = getAdditionalActionError(ResultCode.IdentifyShopper);\n            const challengeShopperError = getAdditionalActionError(ResultCode.ChallengeShopper);\n            let additionalActionComponent: AdyenComponent;\n\n            beforeEach(() => {\n                let handleOnAdditionalDetails: (\n                    additionalActionState: AdyenAdditionalActionState,\n                ) => unknown;\n\n                additionalActionComponent = {\n                    mount: jest.fn(() => {\n                        handleOnAdditionalDetails({\n                            data: {\n                                resultCode: ResultCode.ChallengeShopper,\n                                action: 'adyenAction',\n                            },\n                            isValid: true,\n                        });\n\n                        return document.createElement('div');\n                    }),\n                    unmount: jest.fn(),\n                    submit: jest.fn(),\n                };\n\n                jest.spyOn(adyenCheckout, 'createFromAction').mockImplementation(\n                    jest.fn((_type, options) => {\n                        if (options && options.onAdditionalDetails) {\n                            const { onAdditionalDetails } = options;\n\n                            handleOnAdditionalDetails = onAdditionalDetails;\n                        }\n\n                        return additionalActionComponent;\n                    }),\n                );\n            });\n\n            it('throws an error when payment is not present', () => {\n                expect(strategy.execute(getOrderRequestBodyWithoutPayment())).rejects.toThrow(\n                    PaymentArgumentInvalidError,\n                );\n            });\n\n            it('throws an error when card fields invalid', async () => {\n                const adyenInvalidPaymentComponent = {\n                    mount: jest.fn(),\n                    unmount: jest.fn(),\n                    submit: jest.fn(),\n                    componentRef: {\n                        showValidation: jest.fn(),\n                    },\n                    state: {\n                        isValid: false,\n                    },\n                    props: {\n                        type: 'card',\n                    },\n                };\n\n                jest.spyOn(adyenCheckout, 'create').mockReturnValue(adyenInvalidPaymentComponent);\n\n                await strategy.initialize(options);\n\n                await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                    PaymentInvalidFormError,\n                );\n                expect(\n                    adyenInvalidPaymentComponent.componentRef.showValidation,\n                ).toHaveBeenCalledTimes(1);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(0);\n            });\n\n            it('calls submitPayment when paying with vaulted instrument', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n\n                await strategy.initialize(options);\n                await strategy.execute(getOrderRequestBodyWithVaultedInstrument());\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'scheme',\n                        paymentData: {\n                            formattedPayload: expect.objectContaining({\n                                bigpay_token: {\n                                    token: '123',\n                                    credit_card_number_confirmation: 'ENCRYPTED_CARD_NUMBER',\n                                    verification_value: 'ENCRYPTED_CVV',\n                                    expiry_month: 'ENCRYPTED_EXPIRY_MONTH',\n                                    expiry_year: 'ENCRYPTED_EXPIRY_YEAR',\n                                },\n                                origin: 'http://localhost',\n                                browser_info: {\n                                    color_depth: 24,\n                                    java_enabled: false,\n                                    language: 'en-US',\n                                    screen_height: 0,\n                                    screen_width: 0,\n                                    time_zone_offset: expect.anything(),\n                                },\n                            }),\n                        },\n                    }),\n                );\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n            });\n\n            it('calls submitPayment, passing a set as default flag, when paying with a vaulted instrument that should be defaulted', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n\n                await strategy.initialize(options);\n                await strategy.execute({\n                    useStoreCredit: false,\n                    payment: {\n                        methodId: 'scheme',\n                        paymentData: { instrumentId: '123', shouldSetAsDefaultInstrument: true },\n                    },\n                });\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                set_as_default_stored_instrument: true,\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('calls submitPayment, passing a vault flag, when paying with an instrument that should be vaulted', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n\n                await strategy.initialize(options);\n                await strategy.execute({\n                    payment: {\n                        methodId: 'scheme',\n                        paymentData: {\n                            ...getCreditCardInstrument(),\n                            shouldSaveInstrument: true,\n                        },\n                    },\n                });\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                vault_payment_instrument: true,\n                                set_as_default_stored_instrument: null,\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('calls submitPayment, passing Boleto data to paymentData', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n                jest.spyOn(adyenCheckout, 'create').mockImplementation(\n                    jest.fn((_method, options) => {\n                        if (options && options.onChange) {\n                            const { onChange } = options;\n\n                            const handleOnChange = onChange;\n\n                            paymentComponent = {\n                                mount: jest.fn(() => {\n                                    handleOnChange(getBoletoComponentState(), paymentComponent);\n\n                                    return document.createElement('div');\n                                }),\n                                unmount: jest.fn(),\n                                submit: jest.fn(),\n                            };\n                        }\n\n                        return paymentComponent;\n                    }),\n                );\n                await strategy.initialize(options);\n                await strategy.execute({\n                    payment: {\n                        methodId: 'boletobancario',\n                        paymentData: {\n                            shouldSaveInstrument: true,\n                        },\n                    },\n                });\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                credit_card_token: {\n                                    token: JSON.stringify({\n                                        socialSecurityNumber:\n                                            getBoletoComponentState().data.socialSecurityNumber,\n                                        ...getBoletoComponentState().data.shopperName,\n                                        type: 'boletobancario',\n                                        origin: window.location.origin,\n                                    }),\n                                },\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('calls submitPayment, with Card Installments', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n                jest.spyOn(adyenCheckout, 'create').mockImplementation(\n                    jest.fn((_method, options) => {\n                        if (options && options.onChange) {\n                            const { onChange } = options;\n                            const handleOnChange = onChange;\n\n                            const componentState = getComponentCCEventState();\n\n                            paymentComponent = {\n                                mount: jest.fn(() => {\n                                    handleOnChange(componentState, paymentComponent);\n\n                                    return document.createElement('div');\n                                }),\n                                unmount: jest.fn(),\n                                submit: jest.fn(),\n                            };\n                        }\n\n                        return paymentComponent;\n                    }),\n                );\n                await strategy.initialize(options);\n                await strategy.execute({\n                    payment: {\n                        methodId: 'scheme',\n                        paymentData: {\n                            ...getCreditCardInstrument(),\n                            shouldSaveInstrument: true,\n                        },\n                    },\n                });\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                installments: {\n                                    value: 10,\n                                    plan: 'regular',\n                                },\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('calls submitPayment, passing both a vault and set as default flag, when paying with an instrument that should be vaulted and defaulted', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n\n                await strategy.initialize(options);\n                await strategy.execute({\n                    payment: {\n                        methodId: 'scheme',\n                        paymentData: {\n                            ...getCreditCardInstrument(),\n                            shouldSaveInstrument: true,\n                            shouldSetAsDefaultInstrument: true,\n                        },\n                    },\n                });\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                vault_payment_instrument: true,\n                                set_as_default_stored_instrument: true,\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('additional action component fires back onError', async () => {\n                const adyenError = getAdyenError();\n                let handleOnError: (error: AdyenError) => unknown;\n\n                const additionalActionComponentWithError: AdyenComponent = {\n                    mount: jest.fn(() => {\n                        handleOnError(adyenError);\n\n                        return document.createElement('div');\n                    }),\n                    unmount: jest.fn(),\n                    submit: jest.fn(),\n                };\n\n                jest.spyOn(adyenCheckout, 'createFromAction').mockImplementation(\n                    jest.fn((_type, options) => {\n                        if (options) {\n                            const { onError } = options;\n\n                            handleOnError = onError;\n                        }\n\n                        return additionalActionComponentWithError;\n                    }),\n                );\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                    Promise.reject(identifyShopperError),\n                );\n\n                await strategy.initialize(options);\n\n                await expect(strategy.execute(getOrderRequestBody())).rejects.toMatchObject(\n                    adyenError,\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n            });\n\n            it('should call submitPayment with payment instrument data when setting a vaulted card as default and additional action is completed', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment')\n                    .mockReturnValueOnce(Promise.reject(challengeShopperError))\n                    .mockImplementationOnce(jest.fn());\n\n                options = getInitializeOptionsWithUndefinedWidgetSize();\n\n                await strategy.initialize(options);\n                await strategy.execute({\n                    useStoreCredit: false,\n                    payment: {\n                        methodId: 'scheme',\n                        paymentData: { instrumentId: '123', shouldSetAsDefaultInstrument: true },\n                    },\n                });\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                    2,\n                    expect.objectContaining({\n                        methodId: 'scheme',\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                bigpay_token: {\n                                    credit_card_number_confirmation: 'ENCRYPTED_CARD_NUMBER',\n                                    expiry_month: 'ENCRYPTED_EXPIRY_MONTH',\n                                    expiry_year: 'ENCRYPTED_EXPIRY_YEAR',\n                                    token: '123',\n                                    verification_value: 'ENCRYPTED_CVV',\n                                },\n                            }),\n                            instrumentId: '123',\n                            nonce: '{\"resultCode\":\"ChallengeShopper\",\"action\":\"adyenAction\"}',\n                            shouldSaveInstrument: undefined,\n                            shouldSetAsDefaultInstrument: true,\n                        }),\n                    }),\n                );\n            });\n\n            it('returns 3DS2 ChallengeShopper flow with default widget size', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment')\n                    .mockReturnValueOnce(Promise.reject(challengeShopperError))\n                    .mockImplementationOnce(jest.fn());\n\n                options = getInitializeOptionsWithUndefinedWidgetSize();\n\n                await strategy.initialize(options);\n                await strategy.execute(getOrderRequestBody());\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n            });\n\n            it('calls submitPayment, passing a set as default flag, when paying with vaulted account that should be defaulted', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getAdyenV3(AdyenPaymentMethodType.GiroPay));\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    jest.fn(),\n                );\n\n                options = getInitializeOptions(true);\n\n                await strategy.initialize(options);\n                await strategy.execute({\n                    useStoreCredit: false,\n                    payment: {\n                        methodId: 'giropay',\n                        paymentData: { instrumentId: '123', shouldSetAsDefaultInstrument: true },\n                    },\n                });\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                set_as_default_stored_instrument: true,\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('returns 3DS2 ChallengeShopper flow with no callbacks', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment')\n                    .mockReturnValueOnce(Promise.reject(challengeShopperError))\n                    .mockImplementationOnce(jest.fn());\n\n                options = getInitializeOptionsWithNoCallbacks();\n                await strategy.initialize(options);\n                await strategy.execute(getOrderRequestBody());\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n            });\n\n            it('unmounts additional component when payment fails with challengeShopperError', async () => {\n                additionalActionComponent = {\n                    mount: jest.fn(),\n                    unmount: jest.fn(),\n                    submit: jest.fn(),\n                };\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                    Promise.reject(challengeShopperError),\n                );\n\n                const newOptions = {\n                    methodId: 'adyenv3',\n                    adyenv3: {\n                        containerId: 'adyen-scheme-component-field',\n                        cardVerificationContainerId: 'adyen-custom-card-component-field',\n                        threeDS2ContainerId: 'adyen-scheme-3ds-component-field',\n                        options: {\n                            hasHolderName: true,\n                            styles: {},\n                            placeholders: {},\n                        },\n                        additionalActionOptions: {\n                            containerId: 'adyen-scheme-additional-action-component-field',\n                            onBeforeLoad: jest.fn(),\n                            onComplete: jest.fn(),\n                            onLoad: jest.fn((func) => {\n                                func('Cancel');\n                            }),\n                            widgetSize: '05',\n                        },\n                        validateCardFields: jest.fn(),\n                    },\n                };\n\n                await strategy.initialize(newOptions);\n\n                await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                    PaymentMethodCancelledError,\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                expect(additionalActionComponent.unmount).toHaveBeenCalledTimes(1);\n            });\n\n            it('prefills holderName with billingAddress data if prefillCardHolderName is true', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...getAdyenV3(),\n                    initializationData: {\n                        ...getAdyenV3().initializationData,\n                        prefillCardHolderName: true,\n                    },\n                });\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).toHaveBeenNthCalledWith(\n                    1,\n                    'scheme',\n                    expect.objectContaining({\n                        data: {\n                            billingAddress: {\n                                city: 'Some City',\n                                country: 'US',\n                                houseNumberOrName: '',\n                                postalCode: '95555',\n                                stateOrProvince: 'CA',\n                                street: '12345 Testing Way',\n                            },\n                            holderName: 'Test Tester',\n                            firstName: 'Test',\n                            lastName: 'Tester',\n                        },\n                    }),\n                );\n            });\n\n            it('does not prefill holderName with billingAddress data if prefillCardHolderName is false', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...getAdyenV3(),\n                    initializationData: {\n                        ...getAdyenV3().initializationData,\n                        prefillCardHolderName: false,\n                    },\n                });\n\n                await strategy.initialize(options);\n\n                expect(adyenCheckout.create).toHaveBeenNthCalledWith(\n                    1,\n                    'scheme',\n                    expect.objectContaining({\n                        data: {\n                            billingAddress: {\n                                city: 'Some City',\n                                country: 'US',\n                                houseNumberOrName: '',\n                                postalCode: '95555',\n                                stateOrProvince: 'CA',\n                                street: '12345 Testing Way',\n                            },\n                            holderName: '',\n                            firstName: '',\n                            lastName: '',\n                        },\n                    }),\n                );\n            });\n\n            describe('submitPayment fails with identifyShopperError', () => {\n                const onActionHandled = jest.fn();\n                let handleOnAdditionalDetails: (\n                    additionalActionState: AdyenAdditionalActionState,\n                ) => unknown;\n\n                let handleOnActionHandled: (rtnObj: ActionHandledReturnObject) => unknown;\n\n                beforeEach(async () => {\n                    await strategy.initialize(getInitializeOptions(false, onActionHandled));\n\n                    additionalActionComponent = {\n                        mount: jest.fn(() => {\n                            handleOnActionHandled({\n                                componentType: '3DS2Fingerprint',\n                                actionDescription: 'actionDescription',\n                            });\n                            handleOnAdditionalDetails({\n                                data: {\n                                    resultCode: ResultCode.IdentifyShopper,\n                                    action: 'adyenAction',\n                                },\n                                isValid: true,\n                            });\n\n                            return document.createElement('div');\n                        }),\n                        unmount: jest.fn(),\n                        submit: jest.fn(),\n                    };\n\n                    jest.spyOn(adyenCheckout, 'createFromAction').mockImplementation(\n                        jest.fn((_type, options) => {\n                            if (options && options.onAdditionalDetails && options.onActionHandled) {\n                                const { onAdditionalDetails, onActionHandled } = options;\n\n                                handleOnActionHandled = onActionHandled;\n                                handleOnAdditionalDetails = onAdditionalDetails;\n                            }\n\n                            return additionalActionComponent;\n                        }),\n                    );\n                });\n\n                it('calls submitPayment when additional action completes', async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment')\n                        .mockReturnValueOnce(Promise.reject(identifyShopperError))\n                        .mockImplementationOnce(jest.fn());\n\n                    await strategy.execute(getOrderRequestBody());\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n                });\n\n                it(\"doesn't trigger onActionHandled for the 3DS2Fingerprint componentType\", async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment')\n                        .mockReturnValueOnce(Promise.reject(identifyShopperError))\n                        .mockImplementationOnce(jest.fn());\n\n                    await strategy.execute(getOrderRequestBody());\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n                    expect(onActionHandled).not.toHaveBeenCalled();\n                });\n\n                it('returns UNKNOWN_ERROR when submitPayment fails', async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment')\n                        .mockReturnValueOnce(Promise.reject(identifyShopperError))\n                        .mockReturnValueOnce(Promise.reject(getUnknownError()))\n                        .mockImplementation(jest.fn());\n\n                    await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                        RequestError,\n                    );\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n                });\n\n                describe('submitPayment fails with challengeShopperError', () => {\n                    it('calls submitPayment when additional action completes', async () => {\n                        jest.spyOn(paymentIntegrationService, 'submitPayment')\n                            .mockReturnValueOnce(Promise.reject(identifyShopperError))\n                            .mockReturnValueOnce(Promise.reject(challengeShopperError))\n                            .mockImplementation(jest.fn());\n\n                        await strategy.execute(getOrderRequestBody());\n\n                        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(3);\n                        expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                        expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(2);\n                    });\n\n                    it('triggers onActionHandled for the non-3DS2Fingerprint componentType', async () => {\n                        additionalActionComponent = {\n                            ...additionalActionComponent,\n                            mount: jest.fn(() => {\n                                handleOnActionHandled({\n                                    componentType: '3DS2Challenge',\n                                    actionDescription: 'actionDescription',\n                                });\n                                handleOnAdditionalDetails({\n                                    data: {\n                                        resultCode: ResultCode.ChallengeShopper,\n                                        action: 'adyenAction',\n                                    },\n                                    isValid: true,\n                                });\n\n                                return document.createElement('div');\n                            }),\n                        };\n                        jest.spyOn(paymentIntegrationService, 'submitPayment')\n                            .mockReturnValueOnce(Promise.reject(identifyShopperError))\n                            .mockImplementationOnce(jest.fn());\n\n                        await strategy.execute(getOrderRequestBody());\n\n                        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                        expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                        expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n                        expect(onActionHandled).toHaveBeenCalled();\n                    });\n\n                    it('returns UNKNOWN_ERROR when submitPayment fails', async () => {\n                        jest.spyOn(paymentIntegrationService, 'submitPayment')\n                            .mockReturnValueOnce(Promise.reject(identifyShopperError))\n                            .mockReturnValueOnce(Promise.reject(challengeShopperError))\n                            .mockReturnValue(Promise.reject(getUnknownError()));\n\n                        await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                            RequestError,\n                        );\n\n                        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(3);\n                        expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                        expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(2);\n                    });\n                });\n            });\n\n            describe('submitPayment fails with challengeShopperError', () => {\n                beforeEach(async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                        Promise.reject(challengeShopperError),\n                    );\n\n                    await strategy.initialize(options);\n                });\n\n                it('calls submitPayment when additional action completes', async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                        jest.fn(),\n                    );\n\n                    await strategy.execute(getOrderRequestBody());\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n                });\n\n                it('returns UNKNOWN_ERROR when submitPayment fails', async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment')\n                        .mockReturnValueOnce(Promise.reject(getUnknownError()))\n                        .mockImplementationOnce(jest.fn());\n\n                    await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(\n                        RequestError,\n                    );\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.create).toHaveBeenCalledTimes(2);\n                    expect(adyenCheckout.createFromAction).toHaveBeenCalledTimes(1);\n                });\n            });\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws an error to inform that order finalization is not required', () => {\n            const promise = strategy.finalize();\n\n            return expect(promise).rejects.toBeInstanceOf(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize', () => {\n        beforeEach(() => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getAdyenV3());\n        });\n\n        it('deinitialize adyen payment strategy', async () => {\n            const adyenClient = getAdyenClient();\n            const adyenComponent = adyenClient.create('scheme', {});\n\n            jest.spyOn(adyenV3ScriptLoader, 'load').mockReturnValue(Promise.resolve(adyenClient));\n            jest.spyOn(adyenClient, 'create').mockReturnValue(adyenComponent);\n\n            await strategy.initialize(getInitializeOptions());\n\n            const promise = strategy.deinitialize();\n\n            expect(adyenComponent.unmount).toHaveBeenCalled();\n\n            return expect(promise).resolves.toBeUndefined();\n        });\n\n        it('does not unmount when adyen component is not available', () => {\n            const promise = strategy.deinitialize();\n\n            return expect(promise).resolves.toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/adyen-integration/src/adyenv3/adyenv3-payment-strategy.ts",
    "content": "import { some } from 'lodash';\n\nimport {\n    AdyenAction,\n    AdyenAdditionalAction,\n    AdyenAdditionalActionState,\n    AdyenClient,\n    AdyenComponent,\n    AdyenComponentEventState,\n    AdyenComponentType,\n    AdyenError,\n    AdyenPaymentMethodType,\n    AdyenPlaceholderData,\n    AdyenV3ActionType,\n    AdyenV3PaymentInitializeOptions,\n    AdyenV3PaymentMethodInitializationData,\n    AdyenV3ScriptLoader,\n    CardStateErrors,\n    isBoletoState,\n    isCardState,\n    WithAdyenV3PaymentInitializeOptions,\n} from '@bigcommerce/checkout-sdk/adyen-utils';\nimport {\n    BillingAddress,\n    getBrowserInfo,\n    InvalidArgumentError,\n    isHostedInstrumentLike,\n    isRequestError,\n    isVaultedInstrument,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentInvalidFormError,\n    PaymentInvalidFormErrorDetails,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class Adyenv3PaymentStrategy implements PaymentStrategy {\n    private static readonly mountContainerMaxWaitMs = 5000;\n    private static readonly mountContainerPollIntervalMs = 50;\n\n    private adyenClient?: AdyenClient;\n    private cardVerificationComponent?: AdyenComponent;\n    private componentState?: AdyenComponentEventState;\n    private paymentComponent?: AdyenComponent;\n    private paymentInitializeOptions?: AdyenV3PaymentInitializeOptions;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private scriptLoader: AdyenV3ScriptLoader,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithAdyenV3PaymentInitializeOptions,\n    ): Promise<void> {\n        const { adyenv3 } = options;\n\n        if (!adyenv3) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.adyenv3\" argument is not provided.',\n            );\n        }\n\n        this.paymentInitializeOptions = adyenv3;\n\n        const paymentMethod = this.paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow<AdyenV3PaymentMethodInitializationData>(options.methodId);\n        const { environment, clientKey, paymentMethodsResponse, installmentOptions } =\n            paymentMethod.initializationData || {};\n\n        this.adyenClient = await this.scriptLoader.load({\n            paymentMethodsConfiguration: {\n                klarna: {\n                    useKlarnaWidget: true,\n                },\n                klarna_account: {\n                    useKlarnaWidget: true,\n                },\n                klarna_paynow: {\n                    useKlarnaWidget: true,\n                },\n                ...(installmentOptions\n                    ? {\n                          card: {\n                              installmentOptions: {\n                                  showInstallmentAmounts: true,\n                                  ...installmentOptions,\n                              },\n                          },\n                      }\n                    : {}),\n            },\n            environment,\n            locale: this._getLocale(),\n            clientKey,\n            paymentMethodsResponse,\n            showPayButton: false,\n            translations: {\n                es: { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n                'es-AR': { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n                'es-ES': { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n                'es-MX': { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n                'es-CL': { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n                'es-CO': { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n                'es-PE': { 'creditCard.expiryDateField.title': 'Fecha de caducidad' },\n            },\n        });\n\n        this.paymentComponent = await this._mountPaymentComponent(paymentMethod);\n\n        if (\n            paymentMethod.method === AdyenPaymentMethodType.CreditCard ||\n            paymentMethod.method === AdyenPaymentMethodType.Bancontact\n        ) {\n            this.cardVerificationComponent = await this._mountCardVerificationComponent();\n        }\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 paymentData = payment.paymentData;\n\n        const { shouldSaveInstrument, shouldSetAsDefaultInstrument } = isHostedInstrumentLike(\n            paymentData,\n        )\n            ? paymentData\n            : { shouldSaveInstrument: false, shouldSetAsDefaultInstrument: false };\n\n        this._validateCardData();\n\n        if (\n            payment.methodId === 'klarna' ||\n            payment.methodId === 'klarna_account' ||\n            payment.methodId === 'klarna_paynow'\n        ) {\n            this.paymentComponent?.submit();\n        }\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n\n        const componentState = this.componentState || {\n            data: { paymentMethod: { type: payment.methodId } },\n        };\n\n        if (paymentData && isVaultedInstrument(paymentData)) {\n            let bigpayToken = {};\n\n            if (isCardState(componentState)) {\n                const {\n                    encryptedCardNumber,\n                    encryptedSecurityCode,\n                    encryptedExpiryMonth,\n                    encryptedExpiryYear,\n                } = componentState.data.paymentMethod;\n\n                bigpayToken = {\n                    credit_card_number_confirmation: encryptedCardNumber,\n                    expiry_month: encryptedExpiryMonth,\n                    expiry_year: encryptedExpiryYear,\n                    verification_value: encryptedSecurityCode,\n                };\n            }\n\n            try {\n                await this.paymentIntegrationService.submitPayment({\n                    ...payment,\n                    paymentData: {\n                        formattedPayload: {\n                            bigpay_token: {\n                                ...bigpayToken,\n                                token: paymentData.instrumentId,\n                            },\n                            origin: window.location.origin,\n                            browser_info: getBrowserInfo(),\n                            set_as_default_stored_instrument: shouldSetAsDefaultInstrument || null,\n                        },\n                    },\n                });\n\n                return;\n            } catch (error) {\n                await this._processAdditionalAction(\n                    error,\n                    shouldSaveInstrument,\n                    shouldSetAsDefaultInstrument,\n                    paymentData.instrumentId,\n                    bigpayToken,\n                );\n\n                return;\n            }\n        }\n\n        let paymentToken = JSON.stringify({\n            ...componentState.data.paymentMethod,\n            type: payment.methodId,\n            origin: window.location.origin,\n        });\n\n        if (payment.methodId === 'boletobancario' && isBoletoState(componentState)) {\n            paymentToken = JSON.stringify({\n                socialSecurityNumber: componentState.data.socialSecurityNumber,\n                ...componentState.data.shopperName,\n                type: payment.methodId,\n                origin: window.location.origin,\n            });\n        }\n\n        try {\n            await this.paymentIntegrationService.submitPayment({\n                methodId: payment.methodId,\n                paymentData: {\n                    formattedPayload: {\n                        credit_card_token: {\n                            token: paymentToken,\n                        },\n                        ...(isCardState(componentState) && componentState.data.installments\n                            ? {\n                                  installments: {\n                                      value: componentState.data.installments.value,\n                                      plan: componentState.data.installments.plan || 'regular',\n                                  },\n                              }\n                            : {}),\n                        browser_info: getBrowserInfo(),\n                        vault_payment_instrument: shouldSaveInstrument || null,\n                        set_as_default_stored_instrument: shouldSetAsDefaultInstrument || null,\n                    },\n                },\n            });\n        } catch (error) {\n            await this._processAdditionalAction(\n                error,\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n            );\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this.componentState = undefined;\n\n        if (this.paymentComponent) {\n            this.paymentComponent.unmount();\n            this.paymentComponent = undefined;\n        }\n\n        if (this.cardVerificationComponent) {\n            this.cardVerificationComponent.unmount();\n            this.cardVerificationComponent = undefined;\n        }\n\n        return Promise.resolve();\n    }\n\n    private _updateComponentState(componentState: AdyenComponentEventState) {\n        this.componentState = componentState;\n    }\n\n    private _getLocale(): string | undefined {\n        const locale = this.paymentIntegrationService.getState().getLocale();\n\n        if (locale && locale.substring(0, 2) === 'es') {\n            return 'es';\n        }\n\n        return locale;\n    }\n\n    private _getAdyenClient(): AdyenClient {\n        if (!this.adyenClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.adyenClient;\n    }\n\n    private _getPaymentInitializeOptions(): AdyenV3PaymentInitializeOptions {\n        if (!this.paymentInitializeOptions) {\n            throw new InvalidArgumentError(\n                '\"options.adyenv3\" argument was not provided during initialization.',\n            );\n        }\n\n        return this.paymentInitializeOptions;\n    }\n\n    private _handleAction(additionalAction: AdyenAdditionalAction): Promise<Payment> {\n        return new Promise((resolve, reject) => {\n            const { additionalActionOptions } = this._getPaymentInitializeOptions();\n            const { onBeforeLoad, containerId, onLoad, onComplete, widgetSize, onActionHandled } =\n                additionalActionOptions;\n            const adyenAction: AdyenAction = JSON.parse(additionalAction.action);\n\n            const additionalActionComponent = this._getAdyenClient().createFromAction(adyenAction, {\n                onActionHandled: (additionalActionState) => {\n                    if (\n                        onActionHandled &&\n                        typeof onActionHandled === 'function' &&\n                        additionalActionState.componentType !== '3DS2Fingerprint'\n                    ) {\n                        onActionHandled();\n                    }\n                },\n                onAdditionalDetails: (additionalActionState: AdyenAdditionalActionState) => {\n                    const paymentPayload = {\n                        methodId: adyenAction.paymentMethodType,\n                        paymentData: {\n                            nonce: JSON.stringify(additionalActionState.data),\n                        },\n                    };\n\n                    if (onComplete && typeof onComplete === 'function') {\n                        onComplete();\n                    }\n\n                    resolve(paymentPayload);\n                },\n                challengeWindowSize: widgetSize || '05',\n                onError: (error: AdyenError) => reject(error),\n            });\n\n            if (onBeforeLoad && typeof onBeforeLoad === 'function') {\n                onBeforeLoad(\n                    adyenAction.type === AdyenV3ActionType.ThreeDS2 ||\n                        adyenAction.type === AdyenV3ActionType.QRCode ||\n                        adyenAction.type === AdyenV3ActionType.Sdk,\n                );\n            }\n\n            void this._mountElement(additionalActionComponent, containerId)\n                .then(() => {\n                    if (onLoad && typeof onLoad === 'function') {\n                        onLoad(() => {\n                            reject(new PaymentMethodCancelledError());\n                            additionalActionComponent.unmount();\n                        });\n                    }\n                })\n                .catch(reject);\n        });\n    }\n\n    private _mapAdyenPlaceholderData(\n        billingAddress?: BillingAddress,\n        prefillCardHolderName?: boolean,\n    ): AdyenPlaceholderData {\n        if (!billingAddress) {\n            return {};\n        }\n\n        const {\n            firstName,\n            lastName,\n            address1: street,\n            address2: houseNumberOrName,\n            postalCode,\n            city,\n            stateOrProvinceCode: stateOrProvince,\n            countryCode: country,\n        } = billingAddress;\n\n        return {\n            holderName: prefillCardHolderName ? `${firstName} ${lastName}` : '',\n            firstName: prefillCardHolderName ? firstName : '',\n            lastName: prefillCardHolderName ? lastName : '',\n            billingAddress: {\n                street,\n                houseNumberOrName,\n                postalCode,\n                city,\n                stateOrProvince,\n                country,\n            },\n        };\n    }\n\n    private async _mountCardVerificationComponent(): Promise<AdyenComponent | undefined> {\n        const adyenv3 = this._getPaymentInitializeOptions();\n        const adyenClient = this._getAdyenClient();\n\n        if (!adyenv3.cardVerificationContainerId) {\n            return undefined;\n        }\n\n        const cardVerificationComponent = adyenClient.create(AdyenComponentType.SecuredFields, {\n            ...adyenv3.options,\n            styles: {\n                ...adyenv3.options?.styles,\n                placeholder: {\n                    color: 'transparent',\n                    caretColor: '#000',\n                    ...adyenv3.options?.styles?.placeholder,\n                },\n            },\n            onChange: (componentState) => this._updateComponentState(componentState),\n            onError: (validateState) => adyenv3.validateCardFields(validateState),\n            onFieldValid: (validateState) => adyenv3.validateCardFields(validateState),\n        });\n\n        try {\n            await this._mountElement(\n                cardVerificationComponent,\n                adyenv3.cardVerificationContainerId,\n            );\n        } catch {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return cardVerificationComponent;\n    }\n\n    private async _mountPaymentComponent(paymentMethod: PaymentMethod): Promise<AdyenComponent> {\n        const adyenv3 = this._getPaymentInitializeOptions();\n        const adyenClient = this._getAdyenClient();\n        const billingAddress = this.paymentIntegrationService.getState().getBillingAddress();\n        const { prefillCardHolderName } = paymentMethod.initializationData;\n\n        const paymentComponent = adyenClient.create(paymentMethod.method, {\n            ...(this._isOneyPaymentMethod(paymentMethod.method)\n                ? {\n                      visibility: {\n                          personalDetails: 'hidden',\n                          billingAddress: 'hidden',\n                          deliveryAddress: 'hidden',\n                      },\n                  }\n                : {}),\n            ...adyenv3.options,\n            showBrandsUnderCardNumber: false,\n            billingAddressRequired: false,\n            showEmailAddress: false,\n            onChange: (componentState) => this._updateComponentState(componentState),\n            onSubmit: (componentState) => this._updateComponentState(componentState),\n            ...(billingAddress\n                ? { data: this._mapAdyenPlaceholderData(billingAddress, prefillCardHolderName) }\n                : {}),\n        });\n\n        try {\n            await this._mountElement(paymentComponent, adyenv3.containerId);\n        } catch {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return paymentComponent;\n    }\n\n    private _isOneyPaymentMethod(method: string): boolean {\n        return method.startsWith('facilypay');\n    }\n\n    private async _processAdditionalAction(\n        error: unknown,\n        shouldSaveInstrument?: boolean,\n        shouldSetAsDefaultInstrument?: boolean,\n        paymentToken?: string,\n        bigpayToken?: Record<string, unknown>,\n    ): Promise<PaymentIntegrationSelectors | void> {\n        if (\n            !isRequestError(error) ||\n            !some(error.body.errors, { code: 'additional_action_required' })\n        ) {\n            throw error;\n        }\n\n        const payment = await this._handleAction(error.body.provider_data);\n\n        try {\n            const basePaymentData = {\n                ...payment.paymentData,\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n            };\n\n            const tokenData =\n                shouldSetAsDefaultInstrument && !shouldSaveInstrument\n                    ? {\n                          instrumentId: paymentToken,\n                          formattedPayload: {\n                              bigpay_token: {\n                                  ...bigpayToken,\n                                  token: paymentToken,\n                              },\n                          },\n                      }\n                    : {};\n\n            await this.paymentIntegrationService.submitPayment({\n                ...payment,\n                paymentData: {\n                    ...basePaymentData,\n                    ...tokenData,\n                },\n            });\n        } catch (paymentError) {\n            return this._processAdditionalAction(\n                paymentError,\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n                paymentToken,\n                bigpayToken,\n            );\n        }\n    }\n\n    private _validateCardData(): void {\n        const adyenv3 = this._getPaymentInitializeOptions();\n        const cardComponent = adyenv3.hasVaultedInstruments\n            ? this.cardVerificationComponent\n            : this.paymentComponent;\n\n        if (!cardComponent?.componentRef?.showValidation || !cardComponent.state) {\n            return;\n        }\n\n        cardComponent.componentRef.showValidation();\n\n        if (Object.keys(cardComponent.state).length === 0 || !cardComponent.state.isValid) {\n            throw new PaymentInvalidFormError(this._mapCardErrors(cardComponent.state.errors));\n        }\n    }\n\n    private _mapCardErrors(cardStateErrors: CardStateErrors = {}): PaymentInvalidFormErrorDetails {\n        const errors: PaymentInvalidFormErrorDetails = {};\n\n        Object.keys(cardStateErrors).forEach((key) => {\n            errors[key] = [\n                {\n                    message: cardStateErrors[key],\n                    type: key,\n                },\n            ];\n        });\n\n        return errors;\n    }\n\n    private async _mountElement(\n        adyenComponent: AdyenComponent,\n        containerId: string,\n    ): Promise<void> {\n        await this._waitForMountContainer(containerId);\n\n        try {\n            adyenComponent.mount(`#${containerId}`);\n        } catch {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n    }\n\n    private async _waitForMountContainer(containerId: string): Promise<void> {\n        const maxAttempts = Math.ceil(\n            Adyenv3PaymentStrategy.mountContainerMaxWaitMs /\n                Adyenv3PaymentStrategy.mountContainerPollIntervalMs,\n        );\n        const pollIntervalMs = Adyenv3PaymentStrategy.mountContainerPollIntervalMs;\n\n        let step = 0;\n\n        const poll = async (): Promise<void> => {\n            if (step === maxAttempts) {\n                throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n            }\n\n            if (document.getElementById(containerId)) {\n                return;\n            }\n\n            await new Promise<void>((resolve) => {\n                setTimeout(resolve, pollIntervalMs);\n            });\n\n            step += 1;\n            await poll();\n        };\n\n        await poll();\n    }\n}\n"
  },
  {
    "path": "packages/adyen-integration/src/adyenv3/create-adyenv3-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport AdyenV3PaymentStrategy from './adyenv3-payment-strategy';\nimport createAdyenV3PaymentStrategy from './create-adyenv3-payment-strategy';\n\ndescribe('createAdyenV3PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates adyenv3 payment strategy', () => {\n        const strategy = createAdyenV3PaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(AdyenV3PaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/adyen-integration/src/adyenv3/create-adyenv3-payment-strategy.ts",
    "content": "import { getScriptLoader, getStylesheetLoader } from '@bigcommerce/script-loader';\n\nimport { AdyenV3ScriptLoader } from '@bigcommerce/checkout-sdk/adyen-utils';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport AdyenV3PaymentStrategy from './adyenv3-payment-strategy';\n\nconst createAdyenV3PaymentStrategy: PaymentStrategyFactory<AdyenV3PaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new AdyenV3PaymentStrategy(\n        paymentIntegrationService,\n        new AdyenV3ScriptLoader(getScriptLoader(), getStylesheetLoader()),\n    );\n};\n\nexport default toResolvableModule(createAdyenV3PaymentStrategy, [{ gateway: 'adyenv3' }]);\n"
  },
  {
    "path": "packages/adyen-integration/src/index.ts",
    "content": "export { default as createAdyenV2PaymentStrategy } from './adyenv2/create-adyenv2-payment-strategy';\nexport { default as createAdyenV3PaymentStrategy } from './adyenv3/create-adyenv3-payment-strategy';\n"
  },
  {
    "path": "packages/adyen-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/adyen-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/adyen-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/adyen-utils/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"jest/valid-expect\": \"off\",\n                \"jest/no-if\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"jest/no-test-return-statement\": \"off\",\n                \"@typescript-eslint/no-shadow\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/adyen-utils/README.md",
    "content": "# adyen-utils\n\nThis package contains the utils for the Adyen provider integration.\nAdyen utils library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test adyen-utils` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint adyen-utils` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/adyen-utils/jest.config.js",
    "content": "module.exports = {\n    displayName: 'adyen-utils',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/adyen-utils',\n    coveragePathIgnorePatterns: ['<rootDir>/src/index.ts'],\n};\n"
  },
  {
    "path": "packages/adyen-utils/project.json",
    "content": "{\n    \"name\": \"adyen-utils\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/adyen-utils/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/adyen-utils/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/adyen-utils\"],\n            \"options\": {\n                \"jestConfig\": \"packages/adyen-utils/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/adyen-utils/src/adyenv2/adyenv2-initialize-options.ts",
    "content": "import { Omit } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    AdyenAdditionalActionOptions,\n    AdyenCreditCardComponentOptions,\n    AdyenIdealComponentOptions,\n    AdyenThreeDS2Options,\n    AdyenValidationState,\n} from '../types';\n\n/**\n * A set of options that are required to initialize the AdyenV2 payment method.\n *\n * Once AdyenV2 payment is initialized, credit card form fields, provided by the\n * payment provider as IFrames, will be inserted into the current page. These\n * options provide a location and styling for each of the form fields.\n *\n * ```html\n * <!-- This is where the credit card component will be inserted -->\n * <div id=\"container\"></div>\n *\n * <!-- This is where the secondary components (i.e.: 3DS) will be inserted -->\n * <div id=\"additional-action-container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'adyenv2',\n *     adyenv2: {\n *         containerId: 'container',\n *         additionalActionOptions: {\n *             containerId: 'additional-action-container',\n *         },\n *     },\n * });\n * ```\n *\n * Additional options can be passed in to customize the components and register\n * event callbacks.\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'adyenv2',\n *     adyenv2: {\n *         containerId: 'container',\n *         additionalActionOptions: {\n *             containerId: 'additional-action-container',\n *             onBeforeLoad(shopperInteraction) {\n *                 console.log(shopperInteraction);\n *             },\n *             onLoad(cancel) {\n *                 console.log(cancel);\n *             },\n *             onComplete() {\n *                 console.log('Completed');\n *             },\n *         },\n *         options: {\n *             scheme: {\n *                 hasHolderName: true,\n *             },\n *             bcmc: {\n *                 hasHolderName: true,\n *             },\n *             ideal: {\n *                 showImage: true,\n *             },\n *         },\n *     },\n * });\n * ```\n */\nexport default interface AdyenV2PaymentInitializeOptions {\n    /**\n     * The location to insert the Adyen component.\n     */\n    containerId: string;\n\n    /**\n     * @deprecated The location to insert the Adyen 3DS V2 component.\n     * Use additionalActionOptions instead as this property will be removed in the future\n     */\n    threeDS2ContainerId: string;\n\n    /**\n     * The location to insert the Adyen custom card component\n     */\n    cardVerificationContainerId?: string;\n\n    /**\n     * True if the Adyen component has some Vaulted instrument\n     */\n    hasVaultedInstruments?: boolean;\n\n    /**\n     * @deprecated\n     * Use additionalActionOptions instead as this property will be removed in the future\n     */\n    threeDS2Options?: AdyenThreeDS2Options;\n\n    /**\n     * A set of options that are required to initialize additional payment actions.\n     */\n    additionalActionOptions: AdyenAdditionalActionOptions;\n\n    /**\n     * Optional. Overwriting the default options\n     */\n    options?: Omit<AdyenCreditCardComponentOptions, 'onChange'> | AdyenIdealComponentOptions;\n\n    shouldShowNumberField?: boolean;\n\n    validateCardFields(validateState: AdyenValidationState): void;\n}\n\nexport interface WithAdyenV2PaymentInitializeOptions {\n    /**\n     * The options that are required to initialize the Apple Pay payment\n     * method. They can be omitted unless you need to support Apple Pay.\n     */\n    adyenv2?: AdyenV2PaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/adyen-utils/src/adyenv2/adyenv2-script-loader.spec.ts",
    "content": "import { ScriptLoader, StylesheetLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { AdyenV2HostWindow } from '../types';\n\nimport AdyenV2ScriptLoader from './adyenv2-script-loader';\nimport { getAdyenClient, getAdyenConfiguration } from './adyenv2.mock';\n\ndescribe('AdyenV2ScriptLoader', () => {\n    let adyenV2ScriptLoader: AdyenV2ScriptLoader;\n    let scriptLoader: ScriptLoader;\n    let stylesheetLoader: StylesheetLoader;\n    let mockWindow: AdyenV2HostWindow;\n\n    beforeEach(() => {\n        mockWindow = {} as AdyenV2HostWindow;\n        scriptLoader = {} as ScriptLoader;\n        stylesheetLoader = {} as StylesheetLoader;\n        adyenV2ScriptLoader = new AdyenV2ScriptLoader(scriptLoader, stylesheetLoader, mockWindow);\n    });\n\n    describe('#load()', () => {\n        const adyenClient = getAdyenClient();\n        const configuration = getAdyenConfiguration();\n        const jsUrl = 'https://checkoutshopper-test.adyen.com/checkoutshopper/sdk/3.10.1/adyen.js';\n        const cssUrl =\n            'https://checkoutshopper-test.adyen.com/checkoutshopper/sdk/3.10.1/adyen.css';\n        const cssOptions = {\n            prepend: false,\n            attributes: {\n                integrity:\n                    'sha384-8ofgICZZ/k5cC5N7xegqFZOA73H9RQ7H13439JfAZW8Gj3qjuKL2isaTD3GMIhDE',\n                crossorigin: 'anonymous',\n            },\n        };\n        const jsOptions = {\n            async: true,\n            attributes: {\n                integrity:\n                    'sha384-wG2z9zSQo61EIvyXmiFCo+zB3y0ZB4hsrXVcANmpP8HLthjoQJQPBh7tZKJSV8jA',\n                crossorigin: 'anonymous',\n            },\n        };\n\n        beforeEach(() => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.AdyenCheckout = jest.fn(() => adyenClient);\n\n                return Promise.resolve();\n            });\n\n            stylesheetLoader.loadStylesheet = jest.fn(() => Promise.resolve());\n        });\n\n        afterEach(() => {\n            jest.restoreAllMocks();\n        });\n\n        it('loads the JS and CSS', async () => {\n            await adyenV2ScriptLoader.load(configuration);\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(jsUrl, jsOptions);\n            expect(stylesheetLoader.loadStylesheet).toHaveBeenCalledWith(cssUrl, cssOptions);\n        });\n\n        it('returns the JS from the window', async () => {\n            const adyenJs = await adyenV2ScriptLoader.load(configuration);\n\n            expect(adyenJs).toBe(adyenClient);\n        });\n\n        it('throws an error when window is not set', async () => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.AdyenCheckout = undefined;\n\n                return Promise.resolve();\n            });\n\n            try {\n                await adyenV2ScriptLoader.load(configuration);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/adyen-utils/src/adyenv2/adyenv2-script-loader.ts",
    "content": "import { ScriptLoader, StylesheetLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { AdyenClient, AdyenConfiguration, AdyenV2HostWindow } from '../types';\n\nexport default class AdyenV2ScriptLoader {\n    constructor(\n        private _scriptLoader: ScriptLoader,\n        private _stylesheetLoader: StylesheetLoader,\n        private _window: AdyenV2HostWindow = window,\n    ) {}\n\n    async load(configuration: AdyenConfiguration): Promise<AdyenClient> {\n        await Promise.all([\n            this._stylesheetLoader.loadStylesheet(\n                `https://checkoutshopper-${\n                    configuration.environment ?? ''\n                }.adyen.com/checkoutshopper/sdk/3.10.1/adyen.css`,\n                {\n                    prepend: false,\n                    attributes: {\n                        integrity:\n                            'sha384-8ofgICZZ/k5cC5N7xegqFZOA73H9RQ7H13439JfAZW8Gj3qjuKL2isaTD3GMIhDE',\n                        crossorigin: 'anonymous',\n                    },\n                },\n            ),\n            this._scriptLoader.loadScript(\n                `https://checkoutshopper-${\n                    configuration.environment ?? ''\n                }.adyen.com/checkoutshopper/sdk/3.10.1/adyen.js`,\n                {\n                    async: true,\n                    attributes: {\n                        integrity:\n                            'sha384-wG2z9zSQo61EIvyXmiFCo+zB3y0ZB4hsrXVcANmpP8HLthjoQJQPBh7tZKJSV8jA',\n                        crossorigin: 'anonymous',\n                    },\n                },\n            ),\n        ]);\n\n        if (!this._window.AdyenCheckout) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return new this._window.AdyenCheckout(configuration);\n    }\n}\n"
  },
  {
    "path": "packages/adyen-utils/src/adyenv2/adyenv2.mock.ts",
    "content": "import {\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    Payment,\n    PaymentInitializeOptions,\n    PaymentMethod,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCreditCardInstrument,\n    getErrorPaymentResponseBody,\n    getResponse,\n    getVaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { WithAdyenV2PaymentInitializeOptions } from '../adyenv2/adyenv2-initialize-options';\nimport {\n    AdyenAdditionalActionErrorResponse,\n    AdyenClient,\n    AdyenComponent,\n    AdyenComponentEventState,\n    AdyenConfiguration,\n    AdyenError,\n    AdyenPaymentMethodType,\n    ResultCode,\n} from '../types';\n\nfunction getAdditionalActionErrorResponse(\n    resultCode: ResultCode,\n): AdyenAdditionalActionErrorResponse {\n    return {\n        provider_data: {\n            resultCode,\n            action: '{\"paymentData\":\"ADYEN_PAYMENT_DATA\",\"paymentMethodType\":\"scheme\",\"token\":\"TOKEN\",\"type\":\"threeDS2Fingerprint\"}',\n        },\n        errors: [\n            {\n                code: 'additional_action_required',\n            },\n        ],\n    };\n}\n\nfunction getPayment(paymentMethodType: AdyenPaymentMethodType): Payment {\n    return {\n        methodId: paymentMethodType,\n        paymentData: getCreditCardInstrument(),\n    };\n}\n\nfunction getUnknownErrorResponse(): any {\n    return {\n        errors: [\n            {\n                code: 'unknown_error',\n            },\n        ],\n    };\n}\n\nfunction getVaultedPayment(paymentMethodType: AdyenPaymentMethodType): Payment {\n    return {\n        methodId: paymentMethodType,\n        paymentData: getVaultedInstrument(),\n    };\n}\n\nexport function getAdditionalActionError(resultCode: ResultCode): RequestError {\n    return new RequestError(\n        getResponse({\n            ...getErrorPaymentResponseBody(),\n            ...getAdditionalActionErrorResponse(resultCode),\n        }),\n    );\n}\n\nexport function getAdyenClient(): AdyenClient {\n    return {\n        create: jest.fn(() => {\n            return {\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                submit: jest.fn(),\n            };\n        }),\n\n        createFromAction: jest.fn(() => {\n            return {\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                submit: jest.fn(),\n            };\n        }),\n    };\n}\n\nexport function getAdyenConfiguration(useOriginKey = true): AdyenConfiguration {\n    return useOriginKey\n        ? {\n              environment: 'test',\n              originKey: 'YOUR_ORIGIN_KEY',\n          }\n        : {\n              environment: 'test',\n              clientKey: 'YOUR_CLIENT_KEY',\n          };\n}\n\nexport function getAdyenError(): AdyenError {\n    return {\n        errorCode: 'CODE',\n        message: 'MESSAGE',\n    };\n}\n\nexport function getComponentCCEventState(isValid = true): AdyenComponentEventState {\n    return {\n        data: {\n            paymentMethod: {\n                encryptedCardNumber: 'ENCRYPTED_CARD_NUMBER',\n                encryptedExpiryMonth: 'ENCRYPTED_EXPIRY_MONTH',\n                encryptedExpiryYear: 'ENCRYPTED_EXPIRY_YEAR',\n                encryptedSecurityCode: 'ENCRYPTED_CVV',\n                type: AdyenPaymentMethodType.CreditCard,\n            },\n        },\n        isValid,\n    };\n}\n\nexport function getFailingComponent(): AdyenComponent {\n    return {\n        mount: jest.fn(() => {\n            throw new Error();\n        }),\n        unmount: jest.fn(),\n        submit: jest.fn(),\n    };\n}\n\nexport function getInitializeOptions(\n    hasVaultedInstruments = false,\n): PaymentInitializeOptions & WithAdyenV2PaymentInitializeOptions {\n    return {\n        methodId: 'adyenv2',\n        adyenv2: {\n            containerId: 'adyen-scheme-component-field',\n            cardVerificationContainerId: 'adyen-custom-card-component-field',\n            threeDS2ContainerId: 'adyen-scheme-3ds-component-field',\n            hasVaultedInstruments,\n            options: {\n                hasHolderName: true,\n                styles: {},\n                placeholders: {},\n            },\n            threeDS2Options: {\n                widgetSize: '05',\n                onBeforeLoad: jest.fn(),\n                onComplete: jest.fn(),\n                onLoad: jest.fn(),\n            },\n            additionalActionOptions: {\n                containerId: 'adyen-scheme-additional-action-component-field',\n                onBeforeLoad: jest.fn(),\n                onComplete: jest.fn(),\n                onLoad: jest.fn(),\n            },\n            validateCardFields: jest.fn(),\n        },\n    };\n}\n\nexport function getInitializeOptionsWithNoCallbacks(): PaymentInitializeOptions &\n    WithAdyenV2PaymentInitializeOptions {\n    return {\n        methodId: 'adyenv2',\n        adyenv2: {\n            containerId: 'adyen-scheme-component-field',\n            cardVerificationContainerId: 'adyen-custom-card-component-field',\n            threeDS2ContainerId: 'adyen-scheme-3ds-component-field',\n            options: {\n                hasHolderName: true,\n                styles: {},\n                placeholders: {},\n            },\n            threeDS2Options: {\n                widgetSize: '05',\n            },\n            additionalActionOptions: {\n                containerId: 'adyen-scheme-additional-action-component-field',\n            },\n            validateCardFields: jest.fn(),\n        },\n    };\n}\n\nexport function getInitializeOptionsWithUndefinedWidgetSize(): PaymentInitializeOptions &\n    WithAdyenV2PaymentInitializeOptions {\n    return {\n        methodId: 'adyenv2',\n        adyenv2: {\n            containerId: 'adyen-scheme-component-field',\n            cardVerificationContainerId: 'adyen-custom-card-component-field',\n            threeDS2ContainerId: 'adyen-scheme-3ds-component-field',\n            options: {\n                hasHolderName: true,\n                styles: {},\n                placeholders: {},\n            },\n            threeDS2Options: {\n                onBeforeLoad: jest.fn(),\n                onComplete: jest.fn(),\n                onLoad: jest.fn(),\n            },\n            additionalActionOptions: {\n                containerId: 'adyen-scheme-additional-action-component-field',\n                onBeforeLoad: jest.fn(),\n                onComplete: jest.fn(),\n                onLoad: jest.fn(),\n            },\n            validateCardFields: jest.fn(),\n        },\n    };\n}\n\nexport function getOrderRequestBody(\n    paymentMethodType: AdyenPaymentMethodType = AdyenPaymentMethodType.CreditCard,\n): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: getPayment(paymentMethodType) as OrderPaymentRequestBody,\n    };\n}\n\nexport function getOrderRequestBodyWithVaultedInstrument(\n    paymentMethodType: AdyenPaymentMethodType = AdyenPaymentMethodType.CreditCard,\n): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: getVaultedPayment(paymentMethodType) as OrderPaymentRequestBody,\n    };\n}\n\nexport function getOrderRequestBodyWithoutPayment(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: undefined,\n    };\n}\n\nexport function getUnknownError(): RequestError {\n    return new RequestError(\n        getResponse({\n            ...getUnknownErrorResponse(),\n            ...getErrorPaymentResponseBody(),\n        }),\n    );\n}\n\nexport function getAdyenV2(method = 'scheme'): PaymentMethod {\n    return {\n        id: 'adyenv2',\n        logoUrl: '',\n        method,\n        supportedCards: [],\n        config: {\n            displayName: 'Adyen',\n            merchantId: 'YOUR_MERCHANT_ID',\n            testMode: true,\n        },\n        initializationData: {\n            originKey: 'YOUR_ORIGIN_KEY',\n            clientKey: 'YOUR_CLIENT_KEY',\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n"
  },
  {
    "path": "packages/adyen-utils/src/adyenv3/adyenv3-initialize-options.ts",
    "content": "import { Omit } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    AdyenAdditionalActionOptions,\n    AdyenCreditCardComponentOptions,\n    AdyenValidationState,\n} from '../types';\n\n/**\n * A set of options that are required to initialize the Adyenv3 payment method.\n *\n * Once Adyenv3 payment is initialized, credit card form fields, provided by the\n * payment provider as IFrames, will be inserted into the current page. These\n * options provide a location and styling for each of the form fields.\n *\n * ```html\n * <!-- This is where the credit card component will be inserted -->\n * <div id=\"container\"></div>\n *\n * <!-- This is where the secondary components (i.e.: 3DS) will be inserted -->\n * <div id=\"additional-action-container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'adyenv3',\n *     adyenv3: {\n *         containerId: 'container',\n *         additionalActionOptions: {\n *             containerId: 'additional-action-container',\n *         },\n *     },\n * });\n * ```\n *\n * Additional options can be passed in to customize the components and register\n * event callbacks.\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'adyenv3',\n *     adyenv3: {\n *         containerId: 'container',\n *         additionalActionOptions: {\n *             containerId: 'additional-action-container',\n *             onBeforeLoad(shopperInteraction) {\n *                 console.log(shopperInteraction);\n *             },\n *             onLoad(cancel) {\n *                 console.log(cancel);\n *             },\n *             onComplete() {\n *                 console.log('Completed');\n *             },\n *             onActionHandled() {\n *                 console.log('ActionHandled');\n *             },\n *         },\n *         options: {\n *             scheme: {\n *                 hasHolderName: true,\n *             },\n *         },\n *     },\n * });\n * ```\n */\nexport default interface AdyenV3PaymentInitializeOptions {\n    /**\n     * The location to insert the Adyen component.\n     */\n    containerId: string;\n\n    /**\n     * The location to insert the Adyen custom card component\n     */\n    cardVerificationContainerId?: string;\n\n    /**\n     * True if the Adyen component has some Vaulted instrument\n     */\n    hasVaultedInstruments?: boolean;\n\n    /**\n     * A set of options that are required to initialize additional payment actions.\n     */\n    additionalActionOptions: AdyenAdditionalActionOptions;\n\n    /**\n     * Optional. Overwriting the default options\n     */\n    options?: Omit<AdyenCreditCardComponentOptions, 'onChange'>;\n\n    shouldShowNumberField?: boolean;\n\n    validateCardFields(validateState: AdyenValidationState): void;\n}\n\nexport interface WithAdyenV3PaymentInitializeOptions {\n    /**\n     * The options that are required to initialize the Apple Pay payment\n     * method. They can be omitted unless you need to support Apple Pay.\n     */\n    adyenv3?: AdyenV3PaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/adyen-utils/src/adyenv3/adyenv3-script-loader.spec.ts",
    "content": "import { ScriptLoader, StylesheetLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { AdyenV3HostWindow } from '../types';\n\nimport AdyenV3ScriptLoader from './adyenv3-script-loader';\nimport { getAdyenClient, getAdyenConfiguration } from './adyenv3.mock';\n\ndescribe('AdyenV3ScriptLoader', () => {\n    let adyenV3ScriptLoader: AdyenV3ScriptLoader;\n    let scriptLoader: ScriptLoader;\n    let stylesheetLoader: StylesheetLoader;\n    let mockWindow: AdyenV3HostWindow;\n\n    beforeEach(() => {\n        mockWindow = {} as AdyenV3HostWindow;\n        scriptLoader = {} as ScriptLoader;\n        stylesheetLoader = {} as StylesheetLoader;\n        adyenV3ScriptLoader = new AdyenV3ScriptLoader(scriptLoader, stylesheetLoader, mockWindow);\n    });\n\n    describe('#load()', () => {\n        const adyenClient = getAdyenClient();\n        const configuration = getAdyenConfiguration();\n        const configurationWithClientKey = getAdyenConfiguration();\n        const jsUrl = 'https://checkoutshopper-test.adyen.com/checkoutshopper/sdk/5.71.1/adyen.js';\n        const cssUrl =\n            'https://checkoutshopper-test.adyen.com/checkoutshopper/sdk/5.71.1/adyen.css';\n        const cssOptions = {\n            prepend: false,\n            attributes: {\n                integrity:\n                    'sha384-5MvB4RnzvviA3VBT4KYABZ4HXNZG5LRqREEgd41xt/pf/QvKmsj2O9GuNuywRXx9',\n                crossorigin: 'anonymous',\n            },\n        };\n        const jsOptions = {\n            async: true,\n            attributes: {\n                integrity:\n                    'sha384-yvY2yFNR4WqIjPqP9MzjI+gJimmaJnAvj4rLHKvgJbgFD5fMuf8zIJrFJOW8Lhhf',\n                crossorigin: 'anonymous',\n            },\n        };\n\n        beforeEach(() => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.AdyenCheckout = jest.fn(() => Promise.resolve(adyenClient));\n\n                return Promise.resolve();\n            });\n\n            stylesheetLoader.loadStylesheet = jest.fn(() => Promise.resolve());\n        });\n\n        afterEach(() => {\n            jest.restoreAllMocks();\n        });\n\n        it('loads the JS and CSS', async () => {\n            await adyenV3ScriptLoader.load(configuration);\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(jsUrl, jsOptions);\n            expect(stylesheetLoader.loadStylesheet).toHaveBeenCalledWith(cssUrl, cssOptions);\n        });\n\n        it('returns the JS from the window using originKey', async () => {\n            const adyenJs = await adyenV3ScriptLoader.load(configuration);\n\n            expect(adyenJs).toBe(adyenClient);\n        });\n\n        it('returns the JS from the window using clientKey', async () => {\n            const adyenJs = await adyenV3ScriptLoader.load(configurationWithClientKey);\n\n            expect(adyenJs).toBe(adyenClient);\n        });\n\n        it('throws an error when window is not set', async () => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.AdyenCheckout = undefined;\n\n                return Promise.resolve();\n            });\n\n            try {\n                await adyenV3ScriptLoader.load(configuration);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/adyen-utils/src/adyenv3/adyenv3-script-loader.ts",
    "content": "import { ScriptLoader, StylesheetLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { AdyenClient, AdyenConfiguration, AdyenV3HostWindow } from '../types';\n\nexport default class AdyenV3ScriptLoader {\n    constructor(\n        private _scriptLoader: ScriptLoader,\n        private _stylesheetLoader: StylesheetLoader,\n        private _window: AdyenV3HostWindow = window,\n    ) {}\n\n    async load(configuration: AdyenConfiguration): Promise<AdyenClient> {\n        await Promise.all([\n            this._stylesheetLoader.loadStylesheet(\n                `https://checkoutshopper-${\n                    configuration.environment ?? ''\n                }.adyen.com/checkoutshopper/sdk/5.71.1/adyen.css`,\n                {\n                    prepend: false,\n                    attributes: {\n                        integrity:\n                            'sha384-5MvB4RnzvviA3VBT4KYABZ4HXNZG5LRqREEgd41xt/pf/QvKmsj2O9GuNuywRXx9',\n                        crossorigin: 'anonymous',\n                    },\n                },\n            ),\n            this._scriptLoader.loadScript(\n                `https://checkoutshopper-${\n                    configuration.environment ?? ''\n                }.adyen.com/checkoutshopper/sdk/5.71.1/adyen.js`,\n                {\n                    async: true,\n                    attributes: {\n                        integrity:\n                            'sha384-yvY2yFNR4WqIjPqP9MzjI+gJimmaJnAvj4rLHKvgJbgFD5fMuf8zIJrFJOW8Lhhf',\n                        crossorigin: 'anonymous',\n                    },\n                },\n            ),\n        ]);\n\n        if (!this._window.AdyenCheckout) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        const checkout = await this._window.AdyenCheckout(configuration);\n\n        return checkout;\n    }\n}\n"
  },
  {
    "path": "packages/adyen-utils/src/adyenv3/adyenv3.mock.ts",
    "content": "import {\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    Payment,\n    PaymentInitializeOptions,\n    PaymentMethod,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCreditCardInstrument,\n    getErrorPaymentResponseBody,\n    getResponse,\n    getVaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { WithAdyenV3PaymentInitializeOptions } from '../adyenv3/adyenv3-initialize-options';\nimport {\n    AdyenAdditionalActionErrorResponse,\n    AdyenClient,\n    AdyenComponent,\n    AdyenComponentEventState,\n    AdyenConfiguration,\n    AdyenError,\n    AdyenPaymentMethodType,\n    BoletoState,\n    ResultCode,\n} from '../types';\n\nfunction getAdditionalActionErrorResponse(\n    resultCode: ResultCode,\n): AdyenAdditionalActionErrorResponse {\n    return {\n        provider_data: {\n            resultCode,\n            action: '{\"paymentData\":\"ADYEN_PAYMENT_DATA\",\"paymentMethodType\":\"scheme\",\"token\":\"TOKEN\",\"type\":\"threeDS2\"}',\n        },\n        errors: [\n            {\n                code: 'additional_action_required',\n            },\n        ],\n    };\n}\n\nfunction getPayment(paymentMethodType: AdyenPaymentMethodType): Payment {\n    return {\n        methodId: paymentMethodType,\n        paymentData: getCreditCardInstrument(),\n    };\n}\n\nfunction getUnknownErrorResponse(): any {\n    return {\n        errors: [\n            {\n                code: 'unknown_error',\n            },\n        ],\n    };\n}\n\nfunction getVaultedPayment(paymentMethodType: AdyenPaymentMethodType): Payment {\n    return {\n        methodId: paymentMethodType,\n        paymentData: getVaultedInstrument(),\n    };\n}\n\nexport function getAdditionalActionError(resultCode: ResultCode): RequestError {\n    return new RequestError(\n        getResponse({\n            ...getErrorPaymentResponseBody(),\n            ...getAdditionalActionErrorResponse(resultCode),\n        }),\n    );\n}\n\nexport function getAdyenClient(): AdyenClient {\n    return {\n        create: jest.fn(() => {\n            return {\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                submit: jest.fn(),\n            };\n        }),\n\n        createFromAction: jest.fn(() => {\n            return {\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                submit: jest.fn(),\n            };\n        }),\n    };\n}\n\nexport function getAdyenConfiguration(): AdyenConfiguration {\n    return {\n        environment: 'test',\n        clientKey: 'YOUR_CLIENT_KEY',\n    };\n}\n\nexport function getAdyenError(): AdyenError {\n    return {\n        errorCode: 'CODE',\n        message: 'MESSAGE',\n    };\n}\n\nexport function getComponentCCEventState(isValid = true): AdyenComponentEventState {\n    return {\n        data: {\n            paymentMethod: {\n                encryptedCardNumber: 'ENCRYPTED_CARD_NUMBER',\n                encryptedExpiryMonth: 'ENCRYPTED_EXPIRY_MONTH',\n                encryptedExpiryYear: 'ENCRYPTED_EXPIRY_YEAR',\n                encryptedSecurityCode: 'ENCRYPTED_CVV',\n                holderName: 'John Smith',\n                type: AdyenPaymentMethodType.CreditCard,\n            },\n            installments: {\n                value: 10,\n            },\n        },\n        isValid,\n    };\n}\n\nexport function getAccountComponentState(): AdyenComponentEventState {\n    return {\n        data: {\n            paymentMethod: {\n                type: AdyenPaymentMethodType.SEPA,\n            },\n        },\n    };\n}\n\nexport function getBoletoComponentState(): BoletoState {\n    return {\n        data: {\n            paymentMethod: {\n                type: 'boleto',\n            },\n            shopperName: {\n                firstName: 'Test',\n                lastName: 'Tester',\n            },\n            socialSecurityNumber: '123123123',\n        },\n    };\n}\n\nexport function getFailingComponent(): AdyenComponent {\n    return {\n        mount: jest.fn(() => {\n            throw new Error();\n        }),\n        unmount: jest.fn(),\n        submit: jest.fn(),\n    };\n}\n\nexport function getInitializeOptions(\n    hasVaultedInstruments = false,\n    onActionHandled = jest.fn(),\n): PaymentInitializeOptions & WithAdyenV3PaymentInitializeOptions {\n    return {\n        methodId: 'adyenv3',\n        adyenv3: {\n            containerId: 'adyen-scheme-component-field',\n            cardVerificationContainerId: 'adyen-custom-card-component-field',\n            hasVaultedInstruments,\n            options: {\n                hasHolderName: true,\n                styles: {},\n                placeholders: {},\n            },\n            additionalActionOptions: {\n                containerId: 'adyen-scheme-additional-action-component-field',\n                onActionHandled,\n                onBeforeLoad: jest.fn(),\n                onComplete: jest.fn(),\n                onLoad: jest.fn(),\n                widgetSize: '05',\n            },\n            validateCardFields: jest.fn(),\n        },\n    };\n}\n\nexport function getInitializeOptionsWithNoCallbacks(): PaymentInitializeOptions &\n    WithAdyenV3PaymentInitializeOptions {\n    return {\n        methodId: 'adyenv3',\n        adyenv3: {\n            containerId: 'adyen-scheme-component-field',\n            cardVerificationContainerId: 'adyen-custom-card-component-field',\n            options: {\n                hasHolderName: true,\n                styles: {},\n                placeholders: {},\n            },\n            additionalActionOptions: {\n                containerId: 'adyen-scheme-additional-action-component-field',\n                widgetSize: '05',\n            },\n            validateCardFields: jest.fn(),\n        },\n    };\n}\n\nexport function getInitializeOptionsWithUndefinedWidgetSize(): PaymentInitializeOptions &\n    WithAdyenV3PaymentInitializeOptions {\n    return {\n        methodId: 'adyenv3',\n        adyenv3: {\n            containerId: 'adyen-scheme-component-field',\n            cardVerificationContainerId: 'adyen-custom-card-component-field',\n            options: {\n                hasHolderName: true,\n                styles: {},\n                placeholders: {},\n            },\n            additionalActionOptions: {\n                containerId: 'adyen-scheme-additional-action-component-field',\n                onBeforeLoad: jest.fn(),\n                onComplete: jest.fn(),\n                onLoad: jest.fn(),\n            },\n            validateCardFields: jest.fn(),\n        },\n    };\n}\n\nexport function getOrderRequestBody(\n    paymentMethodType: AdyenPaymentMethodType = AdyenPaymentMethodType.CreditCard,\n): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: getPayment(paymentMethodType) as OrderPaymentRequestBody,\n    };\n}\n\nexport function getOrderRequestBodyWithVaultedInstrument(\n    paymentMethodType: AdyenPaymentMethodType = AdyenPaymentMethodType.CreditCard,\n): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: getVaultedPayment(paymentMethodType) as OrderPaymentRequestBody,\n    };\n}\n\nexport function getOrderRequestBodyWithoutPayment(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: undefined,\n    };\n}\n\nexport function getUnknownError(): RequestError {\n    return new RequestError(\n        getResponse({\n            ...getUnknownErrorResponse(),\n            ...getErrorPaymentResponseBody(),\n        }),\n    );\n}\n\nexport function getAdyenV3(method = 'scheme'): PaymentMethod {\n    return {\n        id: 'adyenv3',\n        logoUrl: '',\n        method,\n        supportedCards: [],\n        config: {\n            displayName: 'Adyen',\n            merchantId: 'YOUR_MERCHANT_ID',\n            testMode: true,\n        },\n        initializationData: {\n            originKey: 'YOUR_ORIGIN_KEY',\n            clientKey: 'YOUR_CLIENT_KEY',\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n"
  },
  {
    "path": "packages/adyen-utils/src/index.ts",
    "content": "import * as adyenV2Mock from './adyenv2/adyenv2.mock';\nimport * as adyenV3Mock from './adyenv3/adyenv3.mock';\n\nexport { default as AdyenV2ScriptLoader } from './adyenv2/adyenv2-script-loader';\nexport { default as AdyenV3ScriptLoader } from './adyenv3/adyenv3-script-loader';\nexport * from './types';\nexport { adyenV2Mock, adyenV3Mock };\nexport { WithAdyenV3PaymentInitializeOptions } from './adyenv3/adyenv3-initialize-options';\nexport { default as AdyenV3PaymentInitializeOptions } from './adyenv3/adyenv3-initialize-options';\nexport { WithAdyenV2PaymentInitializeOptions } from './adyenv2/adyenv2-initialize-options';\nexport { default as AdyenV2PaymentInitializeOptions } from './adyenv2/adyenv2-initialize-options';\nexport { default as isAccountState } from './utils/is-account-state';\nexport { default as isCardState } from './utils/is-card-state';\nexport { default as isBoletoState } from './utils/is-boleto-state';\nexport { default as isAdditionalActionRequiredErrorResponse } from './utils/is-additional-action-error-response';\n"
  },
  {
    "path": "packages/adyen-utils/src/types.ts",
    "content": "export enum AdyenV3ActionType {\n    /*\n     * The payment qualifies for 3D Secure 2, and will go through either the frictionless\n     * or the challenge flow.\n     * */\n    ThreeDS2Fingerprint = 'threeDS2Fingerprint',\n\n    /*\n     * The payment qualifies for 3D Secure 2, and the issuer is initiating a challenge flow.\n     * */\n    ThreeDS2 = 'threeDS2',\n\n    /*\n     * We will initiate a 3D Secure 1 fallback, because the issuer does not support 3D Secure 2.\n     * */\n    Redirect = 'redirect',\n\n    /*\n     * The Component presents the QR code and calls the onAdditionalDetails event.\n     * */\n    QRCode = 'qrCode',\n\n    /*\n     * The Component displays the voucher which the shopper uses to complete the payment.\n     * */\n    Voucher = 'voucher',\n\n    /*\n     * The Component displays the widget which the shopper uses to complete the payment.\n     * */\n    Sdk = 'sdk',\n}\n\nexport enum AdyenV2ActionType {\n    /*\n     * The payment qualifies for 3D Secure 2, and will go through either the frictionless\n     * or the challenge flow.\n     * */\n    ThreeDS2Fingerprint = 'threeDS2Fingerprint',\n\n    /*\n     * The payment qualifies for 3D Secure 2, and the issuer is initiating a challenge flow.\n     * */\n    ThreeDS2Challenge = 'threeDS2Challenge',\n\n    /*\n     * We will initiate a 3D Secure 1 fallback, because the issuer does not support 3D Secure 2.\n     * */\n    Redirect = 'redirect',\n\n    /*\n     * The Component presents the QR code and calls the onAdditionalDetails event.\n     * */\n    QRCode = 'qrCode',\n\n    /*\n     * The Component displays the voucher which the shopper uses to complete the payment.\n     * */\n    Voucher = 'voucher',\n}\n\nexport enum AdyenComponentType {\n    SecuredFields = 'securedfields',\n}\n\nexport enum AdyenPaymentMethodType {\n    ACH = 'ach',\n    AliPay = 'alipay',\n    Bancontact = 'bcmc',\n    CreditCard = 'scheme',\n    Klarna = 'klarna',\n    KlarnaPayNow = 'klarna_paynow',\n    KlarnaAccount = 'klarna_account',\n    IDEAL = 'ideal',\n    GiroPay = 'giropay',\n    GooglePay = 'paywithgoogle',\n    SEPA = 'sepadirectdebit',\n    Sofort = 'directEbanking',\n    Vipps = 'vipps',\n    WeChatPayQR = 'wechatpayQR',\n}\n\nexport enum HTTPMethod {\n    POST = 'POST',\n}\n\nexport enum ResultCode {\n    ChallengeShopper = 'ChallengeShopper',\n    Error = 'Error',\n    IdentifyShopper = 'IdentifyShopper',\n}\n\ninterface AdyenPaymentMethodState {\n    type: string;\n}\n\ninterface WechatDataPaymentMethodState {\n    paymentMethod: AdyenPaymentMethodState;\n}\n\ninterface BoletoDataPaymentMethodState {\n    paymentMethod: AdyenPaymentMethodState;\n    shopperName?: {\n        firstName?: string;\n        lastName?: string;\n    };\n    socialSecurityNumber?: string;\n}\n\ninterface CardPaymentMethodState extends AdyenPaymentMethodState {\n    encryptedCardNumber: string;\n    encryptedExpiryMonth: string;\n    encryptedExpiryYear: string;\n    encryptedSecurityCode: string;\n    holderName: string;\n}\n\nexport interface AdyenV2Action {\n    method: HTTPMethod;\n\n    /**\n     * Value that you need to submit in your /payments/details request when handling\n     * the redirect.\n     */\n    paymentData: string;\n\n    paymentMethodType: AdyenPaymentMethodType;\n\n    /*\n     * The Component performs additional front-end actions depending on the action.type.\n     * Your next steps depend on the type of action that the Component performs.\n     */\n    type: AdyenV2ActionType;\n\n    /**\n     * The HTTP request method that you should use. After the shopper completes the payment,\n     * they will be redirected back to your returnURL using the same method.\n     */\n    url: string;\n}\n\nexport interface AdyenV3Action {\n    method: HTTPMethod;\n\n    /**\n     * Value that you need to submit in your /payments/details request when handling\n     * the redirect.\n     */\n    paymentData: string;\n\n    paymentMethodType: AdyenPaymentMethodType;\n\n    /*\n     * The Component performs additional front-end actions depending on the action.type.\n     * Your next steps depend on the type of action that the Component performs.\n     */\n    type: AdyenV3ActionType;\n\n    /**\n     * The HTTP request method that you should use. After the shopper completes the payment,\n     * they will be redirected back to your returnURL using the same method.\n     */\n    url: string;\n}\n\nexport type AdyenAction = AdyenV2Action | AdyenV3Action;\n\nexport interface AdyenAdditionalAction {\n    resultCode: ResultCode;\n    action: string;\n}\n\nexport interface AdyenAdditionalActionCallbacks {\n    /**\n     * A callback that gets called before adyen component is loaded\n     */\n    onBeforeLoad?(shopperInteraction?: boolean): void;\n\n    /**\n     * A callback that gets called when adyen component is loaded\n     */\n    onLoad?(cancel?: () => void): void;\n\n    /**\n     * A callback that gets called when adyen component verification\n     * is completed\n     */\n    onComplete?(): void;\n\n    /**\n     * A callback that gets called when an action, for example a QR code or 3D Secure 2 authentication screen, is shown to the shopper\n     */\n    onActionHandled?(): void;\n}\n\nexport interface AdyenAdditionalActionErrorResponse {\n    provider_data: AdyenAdditionalAction;\n    errors: [{ code: string }];\n}\n\nexport interface AdyenAdditionalActionOptions extends AdyenAdditionalActionCallbacks {\n    /**\n     * The location to insert the additional action component.\n     */\n    containerId: string;\n\n    /**\n     * Specify Three3DS2Challenge Widget Size\n     *\n     * Values\n     * '01' = 250px x 400px\n     * '02' = 390px x 400px\n     * '03' = 500px x 600px\n     * '04' = 600px x 400px\n     * '05' = 100% x 100%\n     */\n    widgetSize?: string;\n}\n\nexport interface AdyenAdditionalActionState {\n    data: AdyenAdditionalAction;\n    isValid?: boolean;\n}\n\nexport interface AdyenBaseCardComponentOptions {\n    /**\n     * Array of card brands that will be recognized by the component.\n     *\n     */\n    brands?: string[];\n\n    /**\n     * Set a style object to customize the input fields. See Styling Secured Fields\n     * for a list of supported properties.\n     */\n    styles?: StyleOptions;\n\n    showBrandsUnderCardNumber?: boolean;\n}\n\nexport interface AdyenComponentEvents {\n    /**\n     * Called when the shopper enters data in the card input fields.\n     * Here you have the option to override your main Adyen Checkout configuration.\n     */\n    onChange?(state: AdyenComponentEventState, component: AdyenComponent): void;\n\n    /**\n     * Called when the shopper selects the Pay button and payment details are valid.\n     */\n    onSubmit?(state: AdyenComponentEventState, component: AdyenComponent): void;\n\n    /**\n     * Called in case of an invalid card number, invalid expiry date, or\n     *  incomplete field. Called again when errors are cleared.\n     */\n    onError?(state: AdyenValidationState, component: AdyenComponent): void;\n\n    onFieldValid?(state: AdyenValidationState, component: AdyenComponent): void;\n}\n\nexport interface AdyenClient {\n    create(type: string, componentOptions?: AdyenComponentOptions): AdyenComponent;\n\n    createFromAction(\n        action: AdyenV2Action | AdyenV3Action,\n        componentOptions?:\n            | ThreeDS2DeviceFingerprintComponentOptions\n            | AdyenV3ThreeDS2ChallengeComponentOptions\n            | AdyenV2ThreeDS2ChallengeComponentOptions,\n    ): AdyenComponent;\n}\n\nexport interface AdyenComponent {\n    componentRef?: {\n        showValidation(): void;\n    };\n    props?: {\n        type?: string;\n    };\n    state?: AdyenComponentState;\n    mount(containerId: string): HTMLElement;\n    unmount(): void;\n    submit(): void;\n}\n\nexport interface AdyenConfiguration {\n    /*\n     * Use test, and then change this to live when you're ready to accept live payments.\n     */\n    environment?: string;\n\n    /*\n     * The shopper's locale. This is used to set the language rendered in the Components.\n     */\n    locale?: string;\n\n    /*\n     * The Origin Key of your website.\n     */\n    originKey?: string;\n\n    /*\n     * The Client Key of your Adyen account.\n     */\n    clientKey?: string;\n\n    /*\n     * Supported from Components version 3.0.0 and later. The full paymentMethods response,\n     * returned in step 1. We recommend that you pass this on the AdyenCheckout instance.\n     * Otherwise, you need to pass the specific payment method details separately for each\n     * Component.\n     */\n    paymentMethodsResponse?: PaymentMethodsResponse;\n\n    /**\n     * Configuration for specific payment methods.\n     */\n    paymentMethodsConfiguration?: {\n        klarna: {\n            useKlarnaWidget: boolean;\n        };\n        klarna_account: {\n            useKlarnaWidget: boolean;\n        };\n        klarna_paynow: {\n            useKlarnaWidget: boolean;\n        };\n        card?: {\n            installmentOptions?: {\n                card?: {\n                    values: number[];\n                    plans?: string[];\n                };\n                visa?: {\n                    values: number[];\n                    plans?: string[];\n                };\n                mc?: {\n                    values: number[];\n                    plans?: string[];\n                };\n                diners?: {\n                    values: number[];\n                    plans?: string[];\n                };\n                jcb?: {\n                    values: number[];\n                    plans?: string[];\n                };\n                showInstallmentAmounts?: boolean;\n            };\n        };\n    };\n\n    showPayButton?: boolean;\n\n    /**\n     * If your shoppers use a language that isn't supported by the Components, you can create your own localization.\n     * To create a localization:\n     * Add a translations object to your payment page, specifying:\n     * The localization you want to create.\n     * An object containing the fields that are used in the Components, as well as the text you want displayed for each field.\n     *\n     * \"en\": {\n     *  \"paymentMethods.moreMethodsButton\": \"More payment methods\",\n     *  \"payButton\": \"Pay\",\n     *  \"storeDetails\": \"Save for my next payment\",\n     *   ...\n     * }\n     */\n    translations?: {\n        [index: string]: {\n            [index: string]: string;\n        };\n    };\n\n    /*\n     * Specify the function that you created, for example, handleOnChange. If you wish\n     * to override this function, you can also define an onChange event on the Component\n     * level.\n     */\n    onChange?(state: AdyenComponentEventState, component?: AdyenComponent): void;\n\n    onAdditionalDetails?(state: AdyenComponentEventState, component?: AdyenComponent): void;\n}\n\nexport interface AdyenPlaceholderData {\n    firstName?: string;\n    lastName?: string;\n    holderName?: string;\n    prefillCardHolderName?: boolean;\n    billingAddress?: {\n        street: string;\n        houseNumberOrName: string;\n        postalCode: string;\n        city: string;\n        stateOrProvince: string;\n        country: string;\n    };\n}\n\nexport interface AdyenCreditCardComponentOptions\n    extends AdyenBaseCardComponentOptions,\n        AdyenComponentEvents {\n    /**\n     * Set an object containing the details array for type: scheme from\n     * the /paymentMethods response.\n     */\n    details?: InputDetail[];\n\n    /**\n     * Set to true to show the checkbox to save card details for the next payment.\n     */\n    enableStoreDetails?: boolean;\n\n    /**\n     * Set to true to request the name of the card holder.\n     */\n    hasHolderName?: boolean;\n\n    /**\n     * Set to true to require the card holder name.\n     */\n    holderNameRequired?: boolean;\n\n    /**\n     * Information to prefill fields.\n     */\n    data?: AdyenPlaceholderData;\n\n    /**\n     * Defaults to ['mc','visa','amex']. Configure supported card types to\n     * facilitate brand recognition used in the Secured Fields onBrand callback.\n     * See list of available card types. If a shopper enters a card type not\n     * specified in the GroupTypes configuration, the onBrand callback will not be invoked.\n     */\n    groupTypes?: string[];\n\n    /**\n     * Specify the sample values you want to appear for card detail input fields.\n     */\n    placeholders?: CreditCardPlaceHolder | SepaPlaceHolder;\n}\n\nexport interface AdyenCustomCardComponentOptions\n    extends AdyenBaseCardComponentOptions,\n        AdyenComponentEvents {\n    /**\n     * Specify aria attributes for the input fields for web accessibility.\n     */\n    ariaLabels?: CustomCardAriaLabels;\n\n    /**\n     * Automatically shift the focus from date field to the CVC field.\n     */\n    autofocus?: boolean;\n}\n\ntype AdyenClientConstructor = (configuration: AdyenConfiguration) => Promise<AdyenClient>;\n\nexport interface AdyenError {\n    errorCode: string;\n    message: string;\n}\n\nexport interface AdyenV3HostWindow extends Window {\n    AdyenCheckout?: AdyenClientConstructor;\n}\n\nexport interface AdyenV2HostWindow extends Window {\n    AdyenCheckout?: new (configuration: AdyenConfiguration) => AdyenClient;\n}\n\nexport interface AdyenIdealComponentOptions\n    extends AdyenBaseCardComponentOptions,\n        AdyenComponentEvents {\n    /**\n     * Optional. Set to **false** to remove the bank logos from the iDEAL form.\n     */\n    showImage?: boolean;\n}\n\nexport type AdyenComponentFieldVisibility = 'hidden' | 'readOnly' | 'editable';\n\nexport interface AdyenOpenInvoiceComponentVisibility {\n    personalDetails?: AdyenComponentFieldVisibility;\n    billingAddress?: AdyenComponentFieldVisibility;\n    deliveryAddress?: AdyenComponentFieldVisibility;\n}\n\nexport interface AdyenBoletoComponentOptions extends AdyenComponentEvents {\n    personalDetailsRequired?: boolean;\n    billingAddressRequired?: boolean;\n    showEmailAddress?: boolean;\n    visibility?: AdyenOpenInvoiceComponentVisibility;\n}\n\nexport interface AdyenStoredPaymentMethod {\n    /**\n     * The brand of the card.\n     */\n    brand?: string;\n\n    /**\n     * The month the card expires.\n     */\n    expiryMonth?: string;\n\n    /**\n     * The year the card expires.\n     */\n    expiryYear?: string;\n\n    /**\n     * The unique payment method code.\n     */\n    holderName?: string;\n\n    /**\n     * A unique identifier of this stored payment method.\n     */\n    id?: string;\n\n    /**\n     * The last four digits of the PAN.\n     */\n    lastFour?: string;\n\n    /**\n     * The display name of the stored payment method.\n     */\n    name: string;\n\n    /**\n     * The shopper’s email address.\n     */\n    shopperEmail?: string;\n\n    /**\n     * The supported shopper interactions for this stored payment method.\n     */\n    supportedShopperInteractions?: string[];\n\n    /**\n     * The type of payment method.\n     */\n    type?: string;\n}\n\nexport interface AdyenThreeDS2Options extends AdyenAdditionalActionCallbacks {\n    /**\n     * Specify Three3DS2Challenge Widget Size\n     *\n     * Values\n     * '01' = 250px x 400px\n     * '02' = 390px x 400px\n     * '03' = 500px x 600px\n     * '04' = 600px x 400px\n     * '05' = 100% x 100%\n     */\n    widgetSize?: string;\n}\n\nexport interface Bank {\n    /**\n     * The bank account number (without separators).\n     */\n    bankAccountNumber?: string;\n\n    /**\n     * The bank city.\n     */\n    bankCity?: string;\n\n    /**\n     * The location id of the bank. The field value is nil in most cases.\n     */\n    bankLocationId?: string;\n\n    /**\n     * The name of the bank.\n     */\n    bankName?: string;\n\n    /**\n     * The Business Identifier Code (BIC) is the SWIFT address assigned to\n     * a bank. The field value is nil in most cases.\n     */\n    bic?: string;\n\n    /**\n     * Country code where the bank is located.\n     * A valid value is an ISO two-character country code (e.g. 'NL').\n     */\n    countryCode?: string;\n\n    /**\n     * The International Bank Account Number (IBAN).\n     */\n    iban?: string;\n\n    /**\n     * The name of the bank account holder. If you submit a name with non-Latin\n     * characters, we automatically replace some of them with corresponding Latin\n     * characters to meet the FATF recommendations. For example:\n     * χ12 is converted to ch12.\n     * üA is converted to euA.\n     * Peter Møller is converted to Peter Mller, because banks don't accept 'ø'.\n     * After replacement, the ownerName must have at least three alphanumeric characters\n     * (A-Z, a-z, 0-9), and at least one of them must be a valid Latin character\n     * (A-Z, a-z). For example:\n     * John17 - allowed.\n     * J17 - allowed.\n     * 171 - not allowed.\n     * John-7 - allowed.\n     */\n    ownerName?: string;\n\n    /**\n     * The bank account holder's tax ID.\n     */\n    taxId?: string;\n}\n\nexport interface Card {\n    /**\n     * The card verification code (1-20 characters). Depending on the card brand, it\n     * is known also as:\n     * CVV2/CVC2 – length: 3 digits\n     * CID – length: 4 digits\n     */\n    cvc?: string;\n\n    /**\n     * The card expiry month. Format: 2 digits, zero-padded for single digits. For example:\n     * 03 = March\n     * 11 = November\n     * Required\n     */\n    expiryMonth: string;\n\n    /**\n     * The card expiry year. Format: 4 digits. For example: 2020\n     * Required\n     */\n    expiryYear: string;\n\n    /**\n     * The name of the cardholder, as printed on the card.\n     * Required\n     */\n    holderName: string;\n\n    /**\n     * The issue number of the card (for some UK debit cards only).\n     */\n    issueNumber?: string;\n\n    /**\n     * The card number (4-19 characters). Do not use any separators. When this value is\n     * returned in a response, only the last 4 digits of the card number are returned.\n     * Required\n     */\n    number: string;\n\n    /**\n     * The month component of the start date (for some UK debit cards only).\n     */\n    startNumber?: string;\n\n    /**\n     * The year component of the start date (for some UK debit cards only).\n     */\n    startYear?: string;\n}\n\nexport interface CardState {\n    data: CardDataPaymentMethodState;\n    isValid?: boolean;\n    valid?: { [key: string]: boolean };\n    errors?: CardStateErrors;\n}\n\ninterface IdealStateData {\n    issuer: string;\n}\n\ninterface SepaStateData {\n    ownerName: string;\n    ibanNumber: string;\n}\n\ninterface CardStateData {\n    encryptedCardNumber: string;\n    encryptedExpiryMonth: string;\n    encryptedExpiryYear: string;\n    encryptedSecurityCode: string;\n    holderName: string;\n}\n\nexport interface AdyenComponentState {\n    data?: CardStateData | IdealStateData | SepaStateData;\n    issuer?: string;\n    isValid?: boolean;\n    valid?: { [key: string]: boolean };\n    errors?: CardStateErrors;\n}\n\ninterface CardDataPaymentMethodState {\n    paymentMethod: CardPaymentMethodState;\n    installments?: { value: number; plan?: 'string' };\n}\n\nexport interface CardStateErrors {\n    [key: string]: string;\n}\n\nexport interface WechatState {\n    data: WechatDataPaymentMethodState;\n}\n\nexport interface BoletoState {\n    data: BoletoDataPaymentMethodState;\n}\n\nexport interface CreditCardPlaceHolder {\n    encryptedCardNumber?: string;\n    encryptedExpiryDate?: string;\n    encryptedSecurityCode: string;\n}\n\ninterface AccountDataPaymentMethodState {\n    paymentMethod: AdyenPaymentMethodState;\n}\n\nexport interface AccountState {\n    data: AccountDataPaymentMethodState;\n}\n\nexport interface CssProperties {\n    background?: string;\n    caretColor?: string;\n    color?: string;\n    display?: string;\n    font?: string;\n    fontFamily?: string;\n    fontSize?: string;\n    fontSizeAdjust?: string;\n    fontSmoothing?: string;\n    fontStretch?: string;\n    fontStyle?: string;\n    fontVariant?: string;\n    fontVariantAlternates?: string;\n    fontVariantCaps?: string;\n    fontVariantEastAsian?: string;\n    fontVariantLigatures?: string;\n    fontVariantNumeric?: string;\n    fontWeight?: string;\n    letterSpacing?: string;\n    lineHeight?: string;\n    mozOsxFontSmoothing?: string;\n    mozTransition?: string;\n    outline?: string;\n    opacity?: string | number;\n    padding?: string;\n    textAlign?: string;\n    textShadow?: string;\n    transition?: string;\n    webkitFontSmoothing?: string;\n    webkitTransition?: string;\n}\n\nexport interface CustomCardAriaLabel {\n    label?: string;\n    iframeTitle?: string;\n}\n\nexport interface CustomCardAriaLabels {\n    lang?: string;\n    encryptedCardNumber?: CustomCardAriaLabel;\n    encryptedExpiryDate?: CustomCardAriaLabel;\n    encryptedSecurityCode?: CustomCardAriaLabel;\n}\n\nexport interface Group {\n    /**\n     * The name of the group.\n     */\n    name?: string;\n\n    /**\n     * Echo data to be used if the payment method is displayed as part of this group.\n     */\n    paymentMethodData?: string;\n\n    /**\n     * The unique code of the group.\n     */\n    type?: string;\n}\n\nexport interface InputDetail {\n    /**\n     * Configuration parameters for the required input.\n     */\n    configuration?: object;\n\n    /**\n     * Input details can also be provided recursively.\n     */\n    details?: SubInputDetail[];\n\n    /**\n     * In case of a select, the URL from which to query the items.\n     */\n    itemSearchUrl?: string;\n\n    /**\n     * In case of a select, the items to choose from.\n     */\n    items?: Item[];\n\n    /**\n     * The value to provide in the result.\n     */\n    key?: string;\n\n    /**\n     * True if this input value is optional.\n     */\n    optional?: boolean;\n\n    /**\n     * The type of the required input.\n     */\n    type?: string;\n\n    /**\n     * The value can be pre-filled, if available.\n     */\n    value?: string;\n}\n\nexport interface Item {\n    /**\n     * The value to provide in the result.\n     */\n    id?: string;\n\n    /**\n     * The display name.\n     */\n    name?: string;\n}\n\nexport interface PaymentMethod {\n    /**\n     * List of possible brands. For example: visa, mc.\n     */\n    brands?: string[];\n\n    /**\n     * The configuration of the payment method.\n     */\n    configuration?: object;\n\n    /**\n     * All input details to be provided to complete the payment with this payment\n     * method.\n     */\n    details?: InputDetail[];\n\n    /**\n     * The group where this payment method belongs to.\n     */\n    group?: Group;\n\n    /**\n     * The displayable name of this payment method.\n     */\n    name?: string;\n\n    /**\n     * Echo data required to send in next calls.\n     */\n    paymentMethodData?: string;\n\n    /**\n     * Indicates whether this payment method supports tokenization or not.\n     */\n    supportsRecurring?: boolean;\n\n    /**\n     * The unique payment method code.\n     */\n    type?: string;\n}\n\nexport interface PaymentMethodGroup {\n    /**\n     * The type to submit for any payment method in this group.\n     */\n    groupType?: string;\n\n    /**\n     * The human-readable name of this group.\n     */\n    name?: string;\n\n    /**\n     * The types of payment methods that belong in this group.\n     */\n    types?: string[];\n}\n\nexport interface PaymentMethodsResponse {\n    /**\n     * Groups of payment methods.\n     */\n    groups?: PaymentMethodGroup[];\n\n    /**\n     * Detailed list of one-click payment methods.\n     */\n    oneClickPaymentMethods?: RecurringDetail;\n\n    /**\n     * Detailed list of payment methods required to generate payment forms.\n     */\n    paymentMethods?: PaymentMethod[];\n\n    /**\n     * List of all stored payment methods.\n     */\n    storedPaymentMethods?: AdyenStoredPaymentMethod[];\n}\n\nexport interface RecurringDetail extends PaymentMethod {\n    /**\n     * The reference that uniquely identifies the recurring detail.\n     */\n    recurringDetailReference?: string;\n\n    /**\n     * Contains information on previously stored payment details.\n     */\n    storedDetails?: StoredDetails;\n}\n\nexport interface SepaPlaceHolder {\n    ownerName?: string;\n    ibanNumber?: string;\n}\n\nexport interface StoredDetails {\n    /**\n     * The stored bank account.\n     */\n    bank?: Bank;\n\n    /**\n     * The stored card information.\n     */\n    card?: Card;\n\n    /**\n     * The email associated with stored payment details.\n     */\n    emailAddress?: string;\n}\n\nexport interface StyleOptions {\n    /**\n     * Base styling applied to the iframe. All styling extends from this style.\n     */\n    base?: CssProperties;\n\n    /**\n     * Styling applied when a field fails validation.\n     */\n    error?: CssProperties;\n\n    /**\n     * Styling applied to the field's placeholder values.\n     */\n    placeholder?: CssProperties;\n\n    /**\n     * Styling applied once a field passes validation.\n     */\n    validated?: CssProperties;\n}\n\nexport interface SubInputDetail {\n    /**\n     * Configuration parameters for the required input.\n     */\n    configuration?: object;\n\n    /**\n     * In case of a select, the items to choose from.\n     */\n    items?: Item[];\n\n    /**\n     * The value to provide in the result.\n     */\n    key?: string;\n\n    /**\n     * True if this input is optional to provide.\n     */\n    optional?: boolean;\n\n    /**\n     * The type of the required input.\n     */\n    type?: string;\n\n    /**\n     * The value can be pre-filled, if available.\n     */\n    value?: string;\n}\n\nexport interface AdyenV3ThreeDS2ChallengeComponentOptions {\n    challengeWindowSize?: string;\n    onAdditionalDetails?(state: AdyenAdditionalActionState, component?: AdyenComponent): void;\n    onActionHandled?(rtnObj: ActionHandledReturnObject): void;\n    onError(error: AdyenError): void;\n}\n\nexport interface AdyenV2ThreeDS2ChallengeComponentOptions {\n    size?: string;\n    onAdditionalDetails?(state: AdyenAdditionalActionState, component?: AdyenComponent): void;\n    onActionHandled?(rtnObj: ActionHandledReturnObject): void;\n    onError(error: AdyenError): void;\n}\n\nexport interface ActionHandledReturnObject {\n    componentType: string;\n    actionDescription: string;\n}\n\nexport interface ThreeDS2DeviceFingerprintComponentOptions {\n    onActionHandled?(rtnObj: ActionHandledReturnObject): void;\n    onAdditionalDetails?(state: AdyenAdditionalActionState, component?: AdyenComponent): void;\n    onError(error: AdyenError): void;\n}\n\nexport interface AdyenValidationState {\n    valid: boolean;\n    fieldType?: AdyenCardFields;\n    endDigits?: string;\n    encryptedFieldName?: string;\n    i18n?: string;\n    error?: string;\n    errorKey?: string;\n}\n\nexport enum AdyenCardFields {\n    CardNumber = 'encryptedCardNumber',\n    SecurityCode = 'encryptedSecurityCode',\n    ExpiryDate = 'encryptedExpiryDate',\n}\n\nexport type AdyenComponentEventState = CardState | BoletoState | WechatState;\n\nexport type AdyenComponentOptions =\n    | AdyenCreditCardComponentOptions\n    | AdyenIdealComponentOptions\n    | AdyenBoletoComponentOptions\n    | AdyenCustomCardComponentOptions;\n\nexport interface AdyenV3PaymentMethodInitializationData {\n    clientKey?: string;\n    environment?: string;\n    paymentMethodsResponse?: PaymentMethodsResponse;\n    prefillCardHolderName?: boolean;\n    installmentOptions?: null | {\n        card?: {\n            values: number[];\n            plans?: string[];\n        };\n        visa?: {\n            values: number[];\n            plans?: string[];\n        };\n        mc?: {\n            values: number[];\n            plans?: string[];\n        };\n        diners?: {\n            values: number[];\n            plans?: string[];\n        };\n        jcb?: {\n            values: number[];\n            plans?: string[];\n        };\n    };\n}\n\nexport interface AdyenV2PaymentMethodInitializationData {\n    originKey?: string;\n    clientKey?: string;\n    environment?: string;\n    paymentMethodsResponse?: PaymentMethodsResponse;\n    prefillCardHolderName?: boolean;\n}\n"
  },
  {
    "path": "packages/adyen-utils/src/utils/is-account-state.spec.ts",
    "content": "import { getAccountComponentState, getBoletoComponentState } from '../adyenv3/adyenv3.mock';\n\nimport isAccountState from './is-account-state';\n\ndescribe('isAccountState', () => {\n    it('state is isAccountState', () => {\n        expect(isAccountState(getAccountComponentState())).toBe(true);\n    });\n\n    it('state is not isAccountState', () => {\n        expect(isAccountState(getBoletoComponentState())).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/adyen-utils/src/utils/is-account-state.ts",
    "content": "import { AccountState, AdyenComponentEventState } from '../types';\n\nexport default function isAccountState(param: AdyenComponentEventState): param is AccountState {\n    const bankSupported = ['ideal', 'sepadirectdebit', 'directEbanking', 'giropay'];\n\n    return bankSupported.indexOf((param as AccountState).data.paymentMethod.type) !== -1;\n}\n"
  },
  {
    "path": "packages/adyen-utils/src/utils/is-additional-action-error-response.spec.ts",
    "content": "import { getAdditionalActionError } from '../adyenv3/adyenv3.mock';\nimport { ResultCode } from '../types';\n\nimport isAdditionalActionRequiredErrorResponse from './is-additional-action-error-response';\n\ndescribe('isAdditionalActionRequiredErrorResponse', () => {\n    const challengeShopperErrorBody = getAdditionalActionError(ResultCode.ChallengeShopper).body;\n\n    it('state is isAdditionalActionRequiredErrorResponse', () => {\n        expect(isAdditionalActionRequiredErrorResponse(challengeShopperErrorBody)).toBe(true);\n    });\n\n    it('state is not isAdditionalActionRequiredErrorResponse', () => {\n        expect(\n            isAdditionalActionRequiredErrorResponse({\n                ...challengeShopperErrorBody,\n                errors: {},\n            }),\n        ).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/adyen-utils/src/utils/is-additional-action-error-response.ts",
    "content": "import { AdyenAdditionalActionErrorResponse } from '../types';\n\nexport default function isAdditionalActionRequiredErrorResponse(\n    param: unknown,\n): param is AdyenAdditionalActionErrorResponse {\n    return (\n        typeof param === 'object' &&\n        param !== null &&\n        'errors' in (param as AdyenAdditionalActionErrorResponse) &&\n        Array.isArray((param as AdyenAdditionalActionErrorResponse).errors) &&\n        'code' in (param as AdyenAdditionalActionErrorResponse).errors[0] &&\n        typeof (param as AdyenAdditionalActionErrorResponse).errors[0].code === 'string' &&\n        'provider_data' in param &&\n        typeof (param as AdyenAdditionalActionErrorResponse).provider_data === 'object'\n    );\n}\n"
  },
  {
    "path": "packages/adyen-utils/src/utils/is-boleto-state.spec.ts",
    "content": "import { getAccountComponentState, getBoletoComponentState } from '../adyenv3/adyenv3.mock';\n\nimport isBoletoState from './is-boleto-state';\n\ndescribe('isBoletoState', () => {\n    it('state is isBoletoState', () => {\n        expect(isBoletoState(getBoletoComponentState())).toBe(true);\n    });\n\n    it('state is not isBoletoState', () => {\n        expect(isBoletoState(getAccountComponentState())).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/adyen-utils/src/utils/is-boleto-state.ts",
    "content": "import { AdyenComponentEventState, BoletoState } from '../types';\n\nexport default function isBoletoState(param: AdyenComponentEventState): param is BoletoState {\n    return (\n        (typeof param === 'object' && typeof (param as BoletoState).data.socialSecurityNumber) ===\n            'string' &&\n        typeof (param as BoletoState).data.shopperName?.firstName === 'string' &&\n        typeof (param as BoletoState).data.shopperName?.lastName === 'string'\n    );\n}\n"
  },
  {
    "path": "packages/adyen-utils/src/utils/is-card-state.spec.ts",
    "content": "import { getBoletoComponentState, getComponentCCEventState } from '../adyenv3/adyenv3.mock';\n\nimport isCardState from './is-card-state';\n\ndescribe('isCardState', () => {\n    it('state is isCardState', () => {\n        expect(isCardState(getComponentCCEventState())).toBe(true);\n    });\n\n    it('state is not isCardState', () => {\n        expect(isCardState(getBoletoComponentState())).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/adyen-utils/src/utils/is-card-state.ts",
    "content": "import { AdyenComponentEventState, CardState } from '../types';\n\nexport default function isCardState(param: AdyenComponentEventState): param is CardState {\n    return (\n        (typeof param === 'object' &&\n            typeof (param as CardState).data.paymentMethod.encryptedSecurityCode === 'string') ||\n        typeof (param as CardState).data.paymentMethod.encryptedExpiryMonth === 'string'\n    );\n}\n"
  },
  {
    "path": "packages/adyen-utils/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/adyen-utils/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/adyen-utils/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/affirm-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/affirm-integration/README.md",
    "content": "# affirm-integration\n\nThis package contains the integration layer for the [Affirm](https://www.affirm.com/) provider.\nThis library was generated with [Nx](https://nx.dev).\n\n# Affirm\n\nFor additional information on Affirm API, please refer to [Affirm API documentation](https://docs.affirm.com/payments/docs/payments-overview).\n\n## Running unit tests\n\nThis package uses [Jest](https://jestjs.io) for testing.\n\nRun `nx test affirm-integration` to execute all the unit tests for this package.\n\nRun `nx test affirm-integration --testFile=\"<FILE_NAME>\"` to execute unit tests for a single file.\n\n## Running lint\n\nRun `nx lint affirm-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/affirm-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'affirm-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/affirm-integration',\n};\n"
  },
  {
    "path": "packages/affirm-integration/project.json",
    "content": "{\n    \"name\": \"affirm-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/affirm-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/affirm-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/affirm-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/affirm-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/affirm-integration/src/affirm-payment-strategy.spec.ts",
    "content": "import { merge } from 'lodash';\n\nimport {\n    MissingDataError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n    PaymentMethodInvalidError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { Affirm } from './affirm';\nimport AffirmPaymentStrategy from './affirm-payment-strategy';\nimport AffirmScriptLoader from './affirm-script-loader';\nimport { getAffirm, getAffirmScriptMock } from './affirm.mock';\n\ndescribe('AffirmPaymentStrategy', () => {\n    let affirm: Affirm;\n    let payload: OrderRequestBody;\n    let paymentMethod: PaymentMethod;\n    let strategy: AffirmPaymentStrategy;\n    let affirmScriptLoader: AffirmScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n    const affirmCheckoutMock = jest.fn();\n\n    beforeEach(() => {\n        affirm = getAffirmScriptMock(affirmCheckoutMock);\n        affirm.checkout.open = jest.fn();\n        affirm.ui.error.on = jest.fn();\n        paymentMethod = getAffirm();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        affirmScriptLoader = new AffirmScriptLoader();\n        strategy = new AffirmPaymentStrategy(paymentIntegrationService, affirmScriptLoader);\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n\n        jest.spyOn(affirmScriptLoader, 'load').mockResolvedValue(affirm);\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockImplementation(\n            () => getBillingAddress(),\n        );\n\n        payload = merge({}, getOrderRequestBody(), {\n            payment: {\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            },\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if client token is missing', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                clientToken: undefined,\n            });\n\n            await expect(strategy.initialize({ methodId: paymentMethod.id })).rejects.toThrow(\n                MissingDataError,\n            );\n        });\n\n        it('loads affirm script from snippet with testMode equals to true', async () => {\n            paymentMethod.config.testMode = true;\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            expect(affirmScriptLoader.load).toHaveBeenCalledWith(paymentMethod.clientToken, true);\n        });\n\n        it('loads affirm script from snippet with testMode equals to false', async () => {\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            expect(affirmScriptLoader.load).toHaveBeenCalledWith(paymentMethod.clientToken, false);\n        });\n    });\n\n    describe('#execute()', () => {\n        beforeEach(() => {\n            jest.spyOn(affirm.checkout, 'open').mockImplementation(({ onSuccess }) => {\n                onSuccess({\n                    checkout_token: '1234',\n                    created: '1234',\n                });\n            });\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('creates order, checkout and payment', async () => {\n            const options = {\n                methodId: 'affirm',\n                gatewayId: undefined,\n                timeout: undefined,\n                params: {\n                    include: [\n                        'lineItems.physicalItems.categories',\n                        'lineItems.digitalItems.categories',\n                    ],\n                },\n            };\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            await strategy.execute(payload, options);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                { useStoreCredit: false },\n                options,\n            );\n            expect(affirmCheckoutMock).toHaveBeenCalled();\n            expect(affirm.checkout.open).toHaveBeenCalled();\n            expect(affirm.ui.error.on).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: paymentMethod.id,\n                paymentData: { nonce: '1234' },\n            });\n        });\n\n        it('initializes the Affirm checkout call with the correct payload', async () => {\n            const checkoutPayload = {\n                billing: {\n                    address: {\n                        city: 'Some City',\n                        country: 'US',\n                        line1: '12345 Testing Way',\n                        line2: '',\n                        state: 'CA',\n                        zipcode: '95555',\n                    },\n                    email: 'test@bigcommerce.com',\n                    name: {\n                        first: 'Test',\n                        full: 'Test Tester',\n                        last: 'Tester',\n                    },\n                    phone_number: '555-555-5555',\n                },\n                discounts: {\n                    '279F507D817E3E7': {\n                        discount_amount: 500,\n                        discount_display_name: '$5.00 off the shipping total',\n                    },\n                    DISCOUNTED_AMOUNT: {\n                        discount_amount: 1000,\n                        discount_display_name: 'discount',\n                    },\n                    savebig2015: {\n                        discount_amount: 500,\n                        discount_display_name: '20% off each item',\n                    },\n                },\n                items: [\n                    {\n                        categories: [['Cat 1'], ['Furniture', 'Bed']],\n                        display_name: 'Canvas Laundry Cart',\n                        item_image_url: '/images/canvas-laundry-cart.jpg',\n                        item_url: '/canvas-laundry-cart/',\n                        qty: 1,\n                        sku: 'CLC',\n                        unit_price: 19000,\n                    },\n                    {\n                        display_name: '$100 Gift Certificate',\n                        item_image_url: '',\n                        item_url: '',\n                        qty: 1,\n                        sku: '',\n                        unit_price: 10000,\n                    },\n                ],\n                merchant: {\n                    user_cancel_url: 'https://store-k1drp8k8.bcapp.dev/checkout',\n                    user_confirmation_url: 'https://store-k1drp8k8.bcapp.dev/checkout',\n                    user_confirmation_url_action: 'POST',\n                },\n                metadata: {\n                    mode: 'modal',\n                    platform_affirm: '',\n                    platform_type: 'BigCommerce',\n                    platform_version: '',\n                    shipping_type: 'shipping_flatrate',\n                },\n                order_id: '295',\n                shipping: {\n                    address: {\n                        city: 'Some City',\n                        country: 'US',\n                        line1: '12345 Testing Way',\n                        line2: '',\n                        state: 'CA',\n                        zipcode: '95555',\n                    },\n                    name: {\n                        first: 'Test',\n                        full: 'Test Tester',\n                        last: 'Tester',\n                    },\n                    phone_number: '555-555-5555',\n                },\n                shipping_amount: 1500,\n                tax_amount: 300,\n                total: 19000,\n            };\n\n            const options = { methodId: 'affirm', gatewayId: undefined };\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            await strategy.execute(payload, options);\n\n            expect(affirmCheckoutMock).toHaveBeenCalledWith(checkoutPayload);\n        });\n\n        it('does not create affirm object if shippingAddress does not exist', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n                undefined,\n            );\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.getState().getShippingAddress).toHaveBeenCalled();\n        });\n\n        it('returns cancel error on affirm if users cancel flow', async () => {\n            jest.spyOn(affirm.checkout, 'open').mockImplementation(({ onFail }) => {\n                onFail({\n                    reason: 'canceled',\n                });\n            });\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentMethodCancelledError);\n        });\n\n        it('returns invalid error on affirm if payment method was invalid', async () => {\n            jest.spyOn(affirm.checkout, 'open').mockImplementation(({ onFail }) => {\n                onFail({\n                    reason: 'not canceled',\n                });\n            });\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentMethodInvalidError);\n        });\n\n        it('throw NotInitializedError if Affirm script is not initialized', async () => {\n            await expect(strategy.execute(payload)).rejects.toThrow(NotInitializedError);\n        });\n\n        it('does not create order/payment if methodId is not passed', async () => {\n            payload.payment = undefined;\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                // eslint-disable-next-line jest/no-conditional-expect\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('does not create affirm object if billingAddress does not exist', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n                undefined,\n            );\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            await expect(strategy.execute(payload)).rejects.toThrow(MissingDataError);\n        });\n\n        it('initializes the Affirm checkout call with the correct payload even when shipping address is undefined, it takes it from billing address', async () => {\n            const checkoutPayload = {\n                billing: {\n                    address: {\n                        city: 'Some City',\n                        country: 'US',\n                        line1: '12345 Testing Way',\n                        line2: '',\n                        state: 'CA',\n                        zipcode: '95555',\n                    },\n                    email: 'test@bigcommerce.com',\n                    name: {\n                        first: 'Test',\n                        full: 'Test Tester',\n                        last: 'Tester',\n                    },\n                    phone_number: '555-555-5555',\n                },\n                discounts: {\n                    '279F507D817E3E7': {\n                        discount_amount: 500,\n                        discount_display_name: '$5.00 off the shipping total',\n                    },\n                    DISCOUNTED_AMOUNT: {\n                        discount_amount: 1000,\n                        discount_display_name: 'discount',\n                    },\n                    savebig2015: {\n                        discount_amount: 500,\n                        discount_display_name: '20% off each item',\n                    },\n                },\n                items: [\n                    {\n                        categories: [['Cat 1'], ['Furniture', 'Bed']],\n                        display_name: 'Canvas Laundry Cart',\n                        item_image_url: '/images/canvas-laundry-cart.jpg',\n                        item_url: '/canvas-laundry-cart/',\n                        qty: 1,\n                        sku: 'CLC',\n                        unit_price: 19000,\n                    },\n                    {\n                        display_name: '$100 Gift Certificate',\n                        item_image_url: '',\n                        item_url: '',\n                        qty: 1,\n                        sku: '',\n                        unit_price: 10000,\n                    },\n                ],\n                merchant: {\n                    user_cancel_url: 'https://store-k1drp8k8.bcapp.dev/checkout',\n                    user_confirmation_url: 'https://store-k1drp8k8.bcapp.dev/checkout',\n                    user_confirmation_url_action: 'POST',\n                },\n                metadata: {\n                    mode: 'modal',\n                    platform_affirm: '',\n                    platform_type: 'BigCommerce',\n                    platform_version: '',\n                    shipping_type: 'shipping_flatrate',\n                },\n                order_id: '295',\n                shipping: {\n                    address: {\n                        city: 'Some City',\n                        country: 'US',\n                        line1: '12345 Testing Way',\n                        line2: '',\n                        state: 'CA',\n                        zipcode: '95555',\n                    },\n                    email: 'test@bigcommerce.com',\n                    name: {\n                        first: 'Test',\n                        full: 'Test Tester',\n                        last: 'Tester',\n                    },\n                    phone_number: '555-555-5555',\n                },\n                shipping_amount: 1500,\n                tax_amount: 300,\n                total: 19000,\n            };\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n                undefined,\n            );\n\n            const options = { methodId: 'affirm', gatewayId: undefined };\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            await strategy.execute(payload, options);\n\n            expect(affirmCheckoutMock).toHaveBeenCalledWith(checkoutPayload);\n        });\n\n        it('execute checkout on Affirm script without shipping_type', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignments').mockReturnValue(\n                undefined,\n            );\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            await strategy.execute(payload);\n\n            expect(affirmCheckoutMock).toHaveBeenCalled();\n        });\n\n        it('does not create affirm object if config does not exist', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValue(\n                undefined,\n            );\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            await expect(strategy.execute(payload)).rejects.toThrow(MissingDataError);\n        });\n\n        it('does not create affirm object if order does not exist', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getOrder').mockReturnValue(undefined);\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            await expect(strategy.execute(payload)).rejects.toThrow(MissingDataError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n\n        it('deinitializes when Affirm script exist', async () => {\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/affirm-integration/src/affirm-payment-strategy.ts",
    "content": "import {\n    AmountTransformer,\n    Consignment,\n    itemsRequireShipping,\n    LineItemCategory,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    Order,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    Affirm,\n    AffirmAddress,\n    AffirmDiscount,\n    AffirmFailResponse,\n    AffirmItem,\n    AffirmRequestData,\n    AffirmSuccessResponse,\n} from './affirm';\nimport AffirmScriptLoader from './affirm-script-loader';\n\nexport default class AffirmPaymentStrategy implements PaymentStrategy {\n    private affirm?: Affirm;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private affirmScriptLoader: AffirmScriptLoader,\n    ) {}\n\n    async initialize(options: PaymentInitializeOptions): Promise<void> {\n        await this.paymentIntegrationService.loadPaymentMethod(options.methodId);\n\n        const state = this.paymentIntegrationService.getState();\n\n        const {\n            clientToken,\n            config: { testMode },\n        } = state.getPaymentMethodOrThrow(options.methodId);\n\n        if (!clientToken) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        this.affirm = await this.affirmScriptLoader.load(clientToken, testMode);\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const methodId = payload.payment?.methodId;\n        const { useStoreCredit } = payload;\n\n        if (!this.affirm) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        if (!methodId) {\n            throw new PaymentArgumentInvalidError(['payment.methodId']);\n        }\n\n        await this.paymentIntegrationService.submitOrder({ useStoreCredit }, options);\n\n        const affirmCheckout = await this.initializeAffirmCheckout();\n\n        const paymentPayload = {\n            methodId,\n            paymentData: { nonce: affirmCheckout.checkout_token },\n        };\n\n        await this.paymentIntegrationService.submitPayment(paymentPayload);\n    }\n\n    deinitialize(): Promise<void> {\n        if (this.affirm) {\n            this.affirm = undefined;\n        }\n\n        return Promise.resolve();\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    private initializeAffirmCheckout(): Promise<AffirmSuccessResponse> {\n        this.affirm?.checkout(this.getCheckoutInformation());\n\n        return new Promise((resolve, reject) => {\n            this.affirm?.checkout.open({\n                onFail: (failObject: AffirmFailResponse) => {\n                    if (failObject.reason === 'canceled') {\n                        reject(new PaymentMethodCancelledError());\n                    } else {\n                        reject(new PaymentMethodInvalidError());\n                    }\n                },\n                onSuccess: (successObject) => {\n                    resolve(successObject);\n                },\n            });\n            this.affirm?.ui.error.on('close', () => {\n                reject(new PaymentMethodCancelledError());\n            });\n        });\n    }\n\n    private getCheckoutInformation(): AffirmRequestData {\n        const state = this.paymentIntegrationService.getState();\n        const config = state.getStoreConfig();\n        const consignments = state.getConsignments();\n        const order = state.getOrder();\n        const cart = state.getCart();\n\n        if (!config) {\n            throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n        }\n\n        if (!order) {\n            throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n        }\n\n        const amountTransformer = new AmountTransformer(order.currency.decimalPlaces);\n        const billingAddress = this.getBillingAddress();\n\n        const retrievedShippingAddress = this.getShippingAddress();\n        const shippingAddress =\n            itemsRequireShipping(cart, config) && retrievedShippingAddress\n                ? retrievedShippingAddress\n                : billingAddress;\n\n        return {\n            merchant: {\n                user_confirmation_url: config.links.checkoutLink,\n                user_cancel_url: config.links.checkoutLink,\n                user_confirmation_url_action: 'POST',\n            },\n            shipping: shippingAddress,\n            billing: billingAddress,\n            items: this.getItems(amountTransformer, order),\n            metadata: {\n                shipping_type: this.getShippingType(consignments),\n                mode: 'modal',\n                platform_type: 'BigCommerce',\n                platform_version: '',\n                platform_affirm: '',\n            },\n            discounts: this.getDiscounts(amountTransformer, order),\n            order_id: order.orderId ? order.orderId.toString() : '',\n            shipping_amount: amountTransformer.toInteger(order.shippingCostTotal),\n            tax_amount: amountTransformer.toInteger(order.taxTotal),\n            total: amountTransformer.toInteger(order.orderAmount),\n        };\n    }\n\n    private getShippingType(consignments?: Consignment[]): string {\n        if (!consignments) {\n            return '';\n        }\n\n        const consignment = consignments[0];\n\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        return consignment?.selectedShippingOption ? consignment.selectedShippingOption.type : '';\n    }\n\n    private getBillingAddress(): AffirmAddress {\n        const state = this.paymentIntegrationService.getState();\n        const billingAddress = state.getBillingAddress();\n\n        if (!billingAddress) {\n            throw new MissingDataError(MissingDataErrorType.MissingBillingAddress);\n        }\n\n        const billingInformation = {\n            name: {\n                first: billingAddress.firstName,\n                last: billingAddress.lastName,\n                full: `${billingAddress.firstName} ${billingAddress.lastName}`,\n            },\n            address: {\n                line1: billingAddress.address1,\n                line2: billingAddress.address2,\n                city: billingAddress.city,\n                state: billingAddress.stateOrProvinceCode,\n                zipcode: billingAddress.postalCode,\n                country: billingAddress.countryCode,\n            },\n            phone_number: billingAddress.phone,\n            email: billingAddress.email,\n        };\n\n        return billingInformation;\n    }\n\n    private getShippingAddress(): AffirmAddress | undefined {\n        const state = this.paymentIntegrationService.getState();\n        const shippingAddress = state.getShippingAddress();\n\n        if (!shippingAddress) {\n            return;\n        }\n\n        const shippingInformation = {\n            name: {\n                first: shippingAddress.firstName,\n                last: shippingAddress.lastName,\n                full: `${shippingAddress.firstName} ${shippingAddress.lastName}`,\n            },\n            address: {\n                line1: shippingAddress.address1,\n                line2: shippingAddress.address2,\n                city: shippingAddress.city,\n                state: shippingAddress.stateOrProvinceCode,\n                zipcode: shippingAddress.postalCode,\n                country: shippingAddress.countryCode,\n            },\n            phone_number: shippingAddress.phone,\n        };\n\n        return shippingInformation;\n    }\n\n    private getItems(amountTransformer: AmountTransformer, order: Order): AffirmItem[] {\n        const items: AffirmItem[] = [];\n\n        order.lineItems.physicalItems.forEach((item) => {\n            items.push({\n                display_name: item.name,\n                sku: item.sku,\n                unit_price: amountTransformer.toInteger(item.salePrice),\n                qty: item.quantity,\n                item_image_url: item.imageUrl,\n                item_url: item.url,\n                categories: this.getCategories(item.categories),\n            });\n        });\n\n        order.lineItems.digitalItems.forEach((item) => {\n            items.push({\n                display_name: item.name,\n                sku: item.sku,\n                unit_price: amountTransformer.toInteger(item.salePrice),\n                qty: item.quantity,\n                item_image_url: item.imageUrl,\n                item_url: item.url,\n                categories: this.getCategories(item.categories),\n            });\n        });\n\n        order.lineItems.giftCertificates.forEach((item) => {\n            items.push({\n                display_name: item.name,\n                sku: '',\n                unit_price: amountTransformer.toInteger(item.amount),\n                qty: 1,\n                item_image_url: '',\n                item_url: '',\n            });\n        });\n\n        if (order.lineItems.customItems) {\n            order.lineItems.customItems.forEach((item) => {\n                items.push({\n                    display_name: item.name,\n                    sku: item.sku,\n                    unit_price: amountTransformer.toInteger(item.listPrice),\n                    qty: item.quantity,\n                    item_image_url: '',\n                    item_url: '',\n                });\n            });\n        }\n\n        return items;\n    }\n\n    private getDiscounts(amountTransformer: AmountTransformer, order: Order): AffirmDiscount {\n        const discounts: AffirmDiscount = {};\n\n        order.coupons.forEach((line) => {\n            if (line.discountedAmount > 0) {\n                discounts[line.code] = {\n                    discount_amount: amountTransformer.toInteger(line.discountedAmount),\n                    discount_display_name: line.displayName,\n                };\n            }\n        });\n\n        if (order.discountAmount > 0) {\n            discounts.DISCOUNTED_AMOUNT = {\n                discount_amount: amountTransformer.toInteger(order.discountAmount),\n                discount_display_name: 'discount',\n            };\n        }\n\n        return discounts;\n    }\n\n    private getCategories(categories?: LineItemCategory[][]): string[][] {\n        if (!categories) {\n            return [[]];\n        }\n\n        return categories.map((categoryTree) => categoryTree.map((category) => category.name));\n    }\n}\n"
  },
  {
    "path": "packages/affirm-integration/src/affirm-script-loader.spec.ts",
    "content": "import { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Affirm, AffirmHostWindow } from './affirm';\nimport AffirmScriptLoader from './affirm-script-loader';\nimport { getAffirmScriptMock } from './affirm.mock';\nimport loadAffirmJS from './affirmJs';\n\njest.mock('./affirmJs');\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\nconst affirmJsMock = loadAffirmJS as jest.Mock<void>;\n\ndescribe('AffirmScriptLoader', () => {\n    let affirmScriptLoader: AffirmScriptLoader;\n    let affirmWindow: AffirmHostWindow;\n\n    beforeEach(() => {\n        // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n        affirmWindow = {} as AffirmHostWindow;\n        affirmScriptLoader = new AffirmScriptLoader(affirmWindow);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#load()', () => {\n        let affirmScript: Affirm;\n\n        beforeEach(() => {\n            affirmScript = getAffirmScriptMock(jest.fn());\n            affirmJsMock.mockImplementation(() => {\n                affirmWindow.affirm = affirmScript;\n            });\n        });\n\n        it('loads the Script with testMode equals to false', async () => {\n            await affirmScriptLoader.load('apiKeyTest', false);\n\n            expect(loadAffirmJS).toHaveBeenCalledWith(\n                'apiKeyTest',\n                '//cdn1.affirm.com/js/v2/affirm.js',\n            );\n        });\n\n        it('loads the Script with testMode equals to true', async () => {\n            await affirmScriptLoader.load('apiKeyTest', true);\n\n            expect(loadAffirmJS).toHaveBeenCalledWith(\n                'apiKeyTest',\n                '//cdn1-sandbox.affirm.com/js/v2/affirm.js',\n            );\n        });\n\n        it('returns the Script from the window', async () => {\n            expect(await affirmScriptLoader.load()).toBe(affirmScript);\n        });\n\n        it('throws error when window is not set', async () => {\n            affirmJsMock.mockImplementation(() => {\n                affirmWindow.affirm = undefined;\n            });\n\n            try {\n                await affirmScriptLoader.load();\n            } catch (error) {\n                // eslint-disable-next-line jest/no-conditional-expect\n                expect(error).toBeInstanceOf(StandardError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/affirm-integration/src/affirm-script-loader.ts",
    "content": "import { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Affirm, AFFIRM_SCRIPTS, AffirmHostWindow } from './affirm';\nimport loadAffirmJS from './affirmJs';\n\nexport default class AffirmScriptLoader {\n    constructor(public affirmWindow: AffirmHostWindow = window) {}\n\n    load(apikey = '', testMode?: boolean): Promise<Affirm> {\n        const scriptURI = testMode ? AFFIRM_SCRIPTS.SANDBOX : AFFIRM_SCRIPTS.PROD;\n\n        loadAffirmJS(apikey, scriptURI);\n\n        if (!this.affirmWindow.affirm) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return Promise.resolve(this.affirmWindow.affirm);\n    }\n}\n"
  },
  {
    "path": "packages/affirm-integration/src/affirm.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Affirm, AffirmRequestData } from './affirm';\n\nexport function getAffirmScriptMock(checkoutMock: jest.Mock): Affirm {\n    const checkout = (options: AffirmRequestData) => {\n        checkoutMock(options);\n    };\n\n    checkout.open = jest.fn();\n    checkout.init = jest.fn();\n\n    return {\n        checkout,\n        ui: {\n            ready: jest.fn(),\n            error: {\n                on: jest.fn(),\n            },\n        },\n    };\n}\n\nexport function getAffirm(): PaymentMethod {\n    return {\n        id: 'affirm',\n        logoUrl: '',\n        method: 'affirm',\n        supportedCards: [],\n        config: {\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'foo',\n    };\n}\n"
  },
  {
    "path": "packages/affirm-integration/src/affirm.ts",
    "content": "export interface Affirm {\n    checkout: AffirmCheckout;\n    ui: {\n        error: {\n            on(event: string, callback: () => void): void;\n        };\n        ready(callback: () => void): void;\n    };\n}\n\nexport interface AffirmCheckout {\n    (options: AffirmRequestData): void;\n    open(modalOptions: AffirmCallback): void;\n    init(): void;\n}\n\ninterface AffirmCallback {\n    onFail(onFail: AffirmFailResponse): void;\n    onSuccess(success: AffirmSuccessResponse): void;\n}\n\nexport interface AffirmHostWindow extends Window {\n    affirm?: Affirm;\n}\n\nexport interface AffirmSuccessResponse {\n    checkout_token: string;\n    created: string;\n}\n\nexport interface AffirmFailResponse {\n    reason: string;\n}\n\nexport interface AffirmRequestData {\n    merchant: {\n        user_confirmation_url: string;\n        user_cancel_url: string;\n        user_confirmation_url_action?: string;\n        name?: string;\n    };\n    shipping: AffirmAddress;\n    billing?: AffirmAddress;\n    items: AffirmItem[];\n    discounts: AffirmDiscount;\n    metadata: {\n        shipping_type: string;\n        entity_name?: string;\n        webhook_session_id?: string;\n        mode?: string;\n        platform_type: string;\n        platform_version: string;\n        platform_affirm: string;\n    };\n    order_id?: string;\n    shipping_amount: number;\n    tax_amount: number;\n    total: number;\n}\n\nexport interface AffirmItem {\n    display_name: string;\n    sku: string;\n    unit_price: number;\n    qty: number;\n    item_image_url: string;\n    item_url: string;\n    categories?: string[][];\n}\n\nexport interface AffirmDiscount {\n    [key: string]: {\n        discount_amount: number;\n        discount_display_name: string;\n    };\n}\n\nexport interface AffirmAddress {\n    name: {\n        first: string;\n        last: string;\n        full?: string;\n    };\n    address: {\n        line1: string;\n        line2?: string;\n        city: string;\n        state: string;\n        zipcode: string;\n        country?: string;\n    };\n    phone_number?: string;\n    email?: string;\n}\n\nexport enum AFFIRM_SCRIPTS {\n    PROD = '//cdn1.affirm.com/js/v2/affirm.js',\n    SANDBOX = '//cdn1-sandbox.affirm.com/js/v2/affirm.js',\n}\n"
  },
  {
    "path": "packages/affirm-integration/src/affirmJs.ts",
    "content": "/* istanbul ignore file */\n\n/* eslint-disable prefer-rest-params */\n/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable no-plusplus */\n/* eslint-disable @typescript-eslint/consistent-type-assertions */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-shadow */\n/* eslint-disable no-underscore-dangle */\n/**\n * Used this approach as Affirm uses snipped for initializing. Please refer to Affirm documentation in: https://docs.affirm.com/Integrate_Affirm/Direct_API#1._Add_Affirm.js\n */\nimport { Affirm, AffirmHostWindow } from './affirm';\n\ninterface AffirmConfig {\n    public_api_key: string;\n    script: string;\n}\n\nexport default function loadAffirmJS(apiKey: string, scriptURL: string) {\n    const _AFFIRM_CONFIG: AffirmConfig = {\n        public_api_key: apiKey,\n        script: scriptURL,\n    };\n\n    (function foo(\n        m: AffirmHostWindow | any,\n        g: AffirmConfig,\n        n: 'affirm',\n        d: 'checkout',\n        a: 'ui',\n        e: 'script',\n        h: 'ready',\n        c: 'jsReady',\n    ) {\n        const b = m[n] || {};\n        const k = document.createElement(e);\n        const p = document.getElementsByTagName(e)[0];\n        const l = function bar(a: Affirm | any, b: keyof Affirm, c: string) {\n            return function baz() {\n                a[b]._.push([c, arguments]);\n            };\n        };\n\n        b[d] = l(b, d, 'set');\n\n        const f = b[d];\n\n        b[a] = {};\n        b[a]._ = [];\n        f._ = [];\n        b._ = [];\n        b[a][h] = l(b, a, h);\n\n        b[c] = function qux() {\n            b._.push([h, arguments]);\n        };\n\n        let a1 = 0;\n\n        for (\n            const c1 = 'set add save post open empty reset on off trigger ready setProduct'.split(\n                ' ',\n            );\n            a1 < c1.length;\n            a1++\n        ) {\n            f[c1[a1]] = l(b, d, c1[a1]);\n        }\n\n        let a2 = 0;\n\n        for (const c2 = ['get', 'token', 'url', 'items']; a2 < c2.length; a2++) {\n            f[c2[a2]] = function foobar() {};\n        }\n\n        k.async = !0;\n        k.src = g[e];\n\n        if (p.parentNode) {\n            p.parentNode.insertBefore(k, p);\n        }\n\n        delete (g as Partial<AffirmConfig>)[e];\n        f(g);\n        m[n] = b;\n    })(window, _AFFIRM_CONFIG, 'affirm', 'checkout', 'ui', 'script', 'ready', 'jsReady');\n}\n"
  },
  {
    "path": "packages/affirm-integration/src/create-affirm-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport AffirmPaymentStrategy from './affirm-payment-strategy';\nimport createAffirmPaymentStrategy from './create-affirm-payment-strategy';\n\ndescribe('createAffirmPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates affirm payment strategy', () => {\n        const strategy = createAffirmPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(AffirmPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/affirm-integration/src/create-affirm-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport AffirmPaymentStrategy from './affirm-payment-strategy';\nimport AffirmScriptLoader from './affirm-script-loader';\n\nconst createAffirmPaymentStrategy: PaymentStrategyFactory<AffirmPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new AffirmPaymentStrategy(paymentIntegrationService, new AffirmScriptLoader());\n};\n\nexport default toResolvableModule(createAffirmPaymentStrategy, [{ id: 'affirm' }]);\n"
  },
  {
    "path": "packages/affirm-integration/src/index.ts",
    "content": "export { default as createAffirmPaymentStrategy } from './create-affirm-payment-strategy';\n"
  },
  {
    "path": "packages/affirm-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true\n    }\n}\n"
  },
  {
    "path": "packages/affirm-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/affirm-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.mock.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/afterpay-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/afterpay-integration/README.md",
    "content": "# afterpay-integration\n\nThis package contains the integration layer for the [Afterpay](https://www.afterpay.com/) provider.\nThis library was generated with [Nx](https://nx.dev).\n\n# Afterpay\n\nFor additional information on Afterpay API, please refer to [Afterpay API documentation](https://developers.afterpay.com/docs/api/welcome/getting-started).\n\n## Running unit tests\n\nThis package uses [Jest](https://jestjs.io) for testing.\n\nRun `nx test afterpay-integration` to execute all the unit tests for this package.\n\nRun `nx test afterpay-integration --testFile=\"<FILE_NAME>\"` to execute unit tests for a single file.\n\n## Running lint\n\nRun `nx lint afterpay-integration` to execute the lint via [ESLint](https://eslint.org/)\n"
  },
  {
    "path": "packages/afterpay-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'afterpay-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/afterpay-integration',\n};\n"
  },
  {
    "path": "packages/afterpay-integration/project.json",
    "content": "{\n    \"name\": \"afterpay-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/afterpay-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/afterpay-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/afterpay-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/afterpay-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/afterpay-integration/src/afterpay-payment-strategy.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\nimport { merge } from 'lodash';\n\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    NotInitializedError,\n    OrderFinalizationNotCompletedError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    getConfig,\n    getErrorPaymentResponseBody,\n    getOrderRequestBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport AfterpayPaymentStrategy from './afterpay-payment-strategy';\nimport AfterpayScriptLoader from './afterpay-script-loader';\nimport { getAfterpay } from './afterpay.mock';\n\ndescribe('AfterpayPaymentStrategy', () => {\n    let payload: OrderRequestBody;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let scriptLoader: AfterpayScriptLoader;\n    let strategy: AfterpayPaymentStrategy;\n    const storeConfig = getConfig().storeConfig;\n    const withHttpsExperimentName = 'PI-4789.afterpay_script_use_https';\n\n    const afterpaySdk = {\n        initialize: jest.fn(),\n        redirect: jest.fn(),\n    };\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        scriptLoader = new AfterpayScriptLoader(createScriptLoader());\n        strategy = new AfterpayPaymentStrategy(paymentIntegrationService, scriptLoader);\n\n        paymentMethod = getAfterpay();\n\n        payload = merge({}, getOrderRequestBody(), {\n            payment: {\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            },\n        });\n\n        payload = merge({}, getOrderRequestBody(), {\n            payment: {\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            },\n        });\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n        jest.spyOn(scriptLoader, 'load').mockReturnValue(Promise.resolve(afterpaySdk));\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue({\n            ...storeConfig,\n            checkoutSettings: {\n                ...storeConfig.checkoutSettings,\n                features: {\n                    ...storeConfig.checkoutSettings.features,\n                    [withHttpsExperimentName]: true,\n                },\n            },\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if payment method is not provided', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n                undefined,\n            );\n\n            await expect(\n                strategy.initialize({\n                    methodId: paymentMethod.id,\n                    gatewayId: paymentMethod.gateway,\n                }),\n            ).rejects.toThrow(MissingDataError);\n        });\n\n        it('loads script when initializing strategy', async () => {\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            expect(scriptLoader.load).toHaveBeenCalledWith(paymentMethod, 'US', true);\n        });\n\n        it('loads script when initializing strategy with NO https', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        [withHttpsExperimentName]: false,\n                    },\n                },\n            });\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            expect(scriptLoader.load).toHaveBeenCalledWith(paymentMethod, 'US', false);\n        });\n\n        it('loads script when initializing strategy with NZD', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCart').mockReturnValue({\n                ...getCart(),\n                currency: { code: 'NZD', name: 'NZD', symbol: 'NZD', decimalPlaces: 1 },\n            });\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            expect(scriptLoader.load).toHaveBeenCalledWith(paymentMethod, 'NZ', true);\n        });\n    });\n\n    describe('#execute()', () => {\n        const successHandler = jest.fn();\n\n        beforeEach(async () => {\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCart').mockReturnValue({\n                ...getCart(),\n                currency: { ...getCart().currency, code: 'USD' },\n            });\n        });\n\n        it('throws error if unable to execute due to missing payment data', async () => {\n            await expect(strategy.execute({})).rejects.toThrow(PaymentArgumentInvalidError);\n        });\n\n        it('throws error if unable to execute due to missing gateway or method id', async () => {\n            await expect(strategy.execute({ payment: { methodId: '' } })).rejects.toThrow(\n                PaymentArgumentInvalidError,\n            );\n        });\n\n        it('redirects to Afterpay', async () => {\n            // eslint-disable-next-line @typescript-eslint/no-floating-promises\n            strategy.execute(payload).then(successHandler);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(afterpaySdk.initialize).toHaveBeenCalledWith({ countryCode: 'US' });\n            expect(afterpaySdk.redirect).toHaveBeenCalledWith({ token: paymentMethod.clientToken });\n        });\n\n        it('applies store credit usage', async () => {\n            // eslint-disable-next-line @typescript-eslint/no-floating-promises\n            strategy.execute(payload).then(successHandler);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.applyStoreCredit).toHaveBeenCalledWith(false);\n        });\n\n        it('does not resolve if execution is successful', () => {\n            expect(successHandler).not.toHaveBeenCalled();\n        });\n\n        it('rejects with error if execution is unsuccessful', async () => {\n            const errorHandler = jest.fn();\n\n            strategy.execute(payload).catch(errorHandler);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(errorHandler).not.toHaveBeenCalled();\n        });\n\n        it('throws error if trying to execute before initialization', async () => {\n            await strategy.deinitialize();\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                // eslint-disable-next-line jest/no-conditional-expect\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('loads payment client token', async () => {\n            // eslint-disable-next-line @typescript-eslint/no-floating-promises\n            strategy.execute(payload).then(successHandler);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                paymentMethod.gateway,\n                { params: { method: paymentMethod.id } },\n            );\n        });\n\n        it('throws InvalidArgumentError if loadPaymentMethod fails', async () => {\n            const errorResponse = {\n                body: {\n                    detail: 'Something went wrong',\n                    errors: ['Bad Request'],\n                    status: 422,\n                    title: 'Error',\n                },\n                status: 422,\n                statusText: 'Bad Request',\n                headers: {\n                    'content-type': 'application/json',\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockImplementation(() => {\n                throw new RequestError(errorResponse);\n            });\n\n            await expect(strategy.execute(payload)).rejects.toThrow(InvalidArgumentError);\n        });\n    });\n\n    describe('#finalize()', () => {\n        const nonce = 'bar';\n\n        beforeEach(() => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getContextConfig').mockReturnValue({\n                checkoutId: '6a6071cc-82ba-45aa-adb0-ebec42d6ff6f',\n                flashMessages: [],\n                geoCountryCode: 'AU',\n                payment: {\n                    formId: 'dc030783-6129-4ee3-8e06-6f4270df1527',\n                    token: nonce,\n                },\n            });\n        });\n\n        it('submits the order and the payment', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentId').mockReturnValue({\n                providerId: 'PAY_BY_INSTALLMENT',\n            });\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n            await strategy.finalize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                {},\n                { methodId: paymentMethod.id, gatewayId: paymentMethod.gateway },\n            );\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: paymentMethod.id,\n                paymentData: { nonce },\n            });\n\n            expect(paymentIntegrationService.forgetCheckout).not.toHaveBeenCalled();\n        });\n\n        it('throws error if unable to finalize order due to missing payment data', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentId').mockReturnValue(\n                undefined,\n            );\n\n            await expect(\n                strategy.finalize({ methodId: paymentMethod.id, gatewayId: paymentMethod.gateway }),\n            ).rejects.toThrow(MissingDataError);\n        });\n\n        it('throws error if unable to finalize order due to missing context config data', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getContextConfig').mockReturnValue({\n                checkoutId: '6a6071cc-82ba-45aa-adb0-ebec42d6ff6f',\n                flashMessages: [],\n                geoCountryCode: 'AU',\n                payment: {\n                    formId: 'dc030783-6129-4ee3-8e06-6f4270df1527',\n                },\n            });\n\n            await expect(\n                strategy.finalize({ methodId: paymentMethod.id, gatewayId: paymentMethod.gateway }),\n            ).rejects.toThrow(MissingDataError);\n        });\n\n        it('throws OrderFinalizationNotCompleted error if unable to finalize order', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentId').mockReturnValue({\n                providerId: 'PAY_BY_INSTALLMENT',\n            });\n\n            const errorResponse = getResponse(getErrorPaymentResponseBody());\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw new RequestError(errorResponse);\n            });\n\n            jest.spyOn(paymentIntegrationService, 'forgetCheckout').mockResolvedValue(\n                paymentIntegrationService.getState(),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            await expect(\n                strategy.finalize({ methodId: paymentMethod.id, gatewayId: paymentMethod.gateway }),\n            ).rejects.toThrow(OrderFinalizationNotCompletedError);\n\n            expect(paymentIntegrationService.forgetCheckout).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/afterpay-integration/src/afterpay-payment-strategy.ts",
    "content": "import {\n    InvalidArgumentError,\n    isRequestError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotCompletedError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    RequestError,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport AfterpayScriptLoader from './afterpay-script-loader';\nimport AfterpaySdk from './afterpay-sdk';\n\nexport default class AfterpayPaymentStrategy implements PaymentStrategy {\n    private _afterpaySdk?: AfterpaySdk;\n\n    constructor(\n        private _paymentIntegrationService: PaymentIntegrationService,\n        private _afterpayScriptLoader: AfterpayScriptLoader,\n    ) {}\n\n    async initialize(options: PaymentInitializeOptions): Promise<void> {\n        const state = this._paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethod(options.methodId, options.gatewayId);\n        const currencyCode = state.getCart()?.currency.code || '';\n        const countryCode = this._mapCurrencyToISO2(currencyCode);\n        const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n        const withHttpsExperimentName = 'PI-4789.afterpay_script_use_https';\n        const withHttps = isExperimentEnabled(features, withHttpsExperimentName, false);\n\n        if (!paymentMethod) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        this._afterpaySdk = await this._afterpayScriptLoader.load(\n            paymentMethod,\n            countryCode,\n            withHttps,\n        );\n    }\n\n    deinitialize(): Promise<void> {\n        if (this._afterpaySdk) {\n            this._afterpaySdk = undefined;\n        }\n\n        return Promise.resolve();\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        if (!payload.payment) {\n            throw new PaymentArgumentInvalidError(['payment.gatewayId', 'payment.methodId']);\n        }\n\n        const { gatewayId, methodId } = payload.payment;\n\n        if (!gatewayId || !methodId) {\n            throw new PaymentArgumentInvalidError(['payment.gatewayId', 'payment.methodId']);\n        }\n\n        const { useStoreCredit } = payload;\n\n        if (useStoreCredit !== undefined) {\n            await this._paymentIntegrationService.applyStoreCredit(useStoreCredit);\n        }\n\n        await this._loadPaymentMethod(gatewayId, methodId, options);\n\n        const state = this._paymentIntegrationService.getState();\n\n        await this._paymentIntegrationService.validateCheckout(state.getCheckout(), options);\n\n        const currencyCode = state.getCart()?.currency.code || '';\n        const countryCode = this._mapCurrencyToISO2(currencyCode);\n\n        this._redirectToAfterpay(countryCode, state.getPaymentMethod(methodId, gatewayId));\n\n        // Afterpay will handle the rest of the flow so return a promise that doesn't really resolve\n        // eslint-disable-next-line @typescript-eslint/no-empty-function\n        return new Promise<never>(() => {});\n    }\n\n    async finalize(options: PaymentRequestOptions): Promise<void> {\n        const state = this._paymentIntegrationService.getState();\n        const payment = state.getPaymentId();\n        const config = state.getContextConfig();\n\n        if (!payment) {\n            throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n        }\n\n        if (!config?.payment.token) {\n            throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n        }\n\n        const paymentPayload = {\n            methodId: payment.providerId,\n            paymentData: { nonce: config.payment.token },\n        };\n\n        await this._paymentIntegrationService.submitOrder({}, options);\n\n        try {\n            await this._paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error) {\n            await this._paymentIntegrationService.forgetCheckout(payment.providerId);\n            await this._paymentIntegrationService.loadPaymentMethods();\n\n            if (isRequestError(error)) {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access\n                throw new OrderFinalizationNotCompletedError(error.body?.errors?.[0]?.message);\n            }\n        }\n    }\n\n    private _redirectToAfterpay(countryCode: string, paymentMethod?: PaymentMethod): void {\n        if (!this._afterpaySdk || !paymentMethod?.clientToken) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        this._afterpaySdk.initialize({ countryCode });\n        this._afterpaySdk.redirect({ token: paymentMethod.clientToken });\n    }\n\n    private _mapCurrencyToISO2(currencyCode: string): string {\n        const countryByCurrency: { [key: string]: string } = {\n            AUD: 'AU',\n            NZD: 'NZ',\n            CAD: 'CA',\n            USD: 'US',\n        };\n\n        return countryByCurrency[currencyCode] || 'AU';\n    }\n\n    private async _loadPaymentMethod(\n        gatewayId: string,\n        methodId: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        try {\n            return await this._paymentIntegrationService.loadPaymentMethod(gatewayId, {\n                ...options,\n                params: { ...options?.params, method: methodId },\n            });\n        } catch (error) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (error instanceof RequestError && error.body?.status === 422) {\n                throw new InvalidArgumentError(\n                    \"Afterpay can't process your payment for this order, please try another payment method\",\n                );\n            }\n\n            throw error;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/afterpay-integration/src/afterpay-script-loader.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\nimport { merge } from 'lodash';\n\nimport AfterpayScriptLoader from './afterpay-script-loader';\nimport { getAfterpay } from './afterpay.mock';\nimport * as isAfterpayWindow from './is-afterpay-window';\n\ndescribe('AfterpayScriptLoader', () => {\n    const scriptLoader = createScriptLoader();\n    const afterpayScriptLoader = new AfterpayScriptLoader(scriptLoader);\n\n    beforeEach(() => {\n        jest.spyOn(isAfterpayWindow, 'default').mockReturnValue(true);\n\n        jest.spyOn(scriptLoader, 'loadScript').mockReturnValue(Promise.resolve());\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('loads widget script for AU & NZ', async () => {\n        const method = getAfterpay();\n\n        await afterpayScriptLoader.load(method, 'AU');\n\n        expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n            '//portal.afterpay.com/afterpay-async.js',\n        );\n\n        await afterpayScriptLoader.load(method, 'NZ', false);\n\n        expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n            '//portal.afterpay.com/afterpay-async.js',\n        );\n    });\n\n    it('loads sandbox widget script if in test mode for AU & NZ', async () => {\n        const method = merge({}, getAfterpay(), { config: { testMode: true } });\n\n        await afterpayScriptLoader.load(method, 'AU', false);\n\n        expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n            '//portal.sandbox.afterpay.com/afterpay.js',\n        );\n\n        await afterpayScriptLoader.load(method, 'NZ');\n\n        expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n            '//portal.sandbox.afterpay.com/afterpay.js',\n        );\n    });\n\n    it('loads widget script for US', async () => {\n        const method = getAfterpay();\n\n        await afterpayScriptLoader.load(method, 'US', false);\n\n        expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n            '//portal.afterpay.com/afterpay-async.js',\n        );\n    });\n\n    it('loads sandbox widget script if in test mode for US', async () => {\n        const method = merge({}, getAfterpay(), { config: { testMode: true } });\n\n        await afterpayScriptLoader.load(method, 'US', false);\n\n        expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n            '//portal.sandbox.afterpay.com/afterpay.js',\n        );\n    });\n\n    it('loads widget script with HTTPS for AU & NZ', async () => {\n        const method = getAfterpay();\n\n        await afterpayScriptLoader.load(method, 'AU', true);\n\n        expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n            'https://portal.afterpay.com/afterpay-async.js',\n        );\n\n        await afterpayScriptLoader.load(method, 'NZ');\n\n        expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n            'https://portal.afterpay.com/afterpay-async.js',\n        );\n    });\n\n    it('loads sandbox widget script with HTTPS if in test mode for AU & NZ', async () => {\n        const method = merge({}, getAfterpay(), { config: { testMode: true } });\n\n        await afterpayScriptLoader.load(method, 'AU', true);\n\n        expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n            'https://portal.sandbox.afterpay.com/afterpay.js',\n        );\n\n        await afterpayScriptLoader.load(method, 'NZ');\n\n        expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n            'https://portal.sandbox.afterpay.com/afterpay.js',\n        );\n    });\n\n    it('loads widget script with HTTPS for US', async () => {\n        const method = getAfterpay();\n\n        await afterpayScriptLoader.load(method, 'US', true);\n\n        expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n            'https://portal.afterpay.com/afterpay-async.js',\n        );\n    });\n\n    it('loads sandbox widget script with HTTPS if in test mode for US', async () => {\n        const method = merge({}, getAfterpay(), { config: { testMode: true } });\n\n        await afterpayScriptLoader.load(method, 'US', true);\n\n        expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n            'https://portal.sandbox.afterpay.com/afterpay.js',\n        );\n    });\n});\n"
  },
  {
    "path": "packages/afterpay-integration/src/afterpay-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport AfterpaySdk from './afterpay-sdk';\nimport isAfterpayWindow from './is-afterpay-window';\n\nenum SCRIPTS_DEFAULT {\n    PROD = '//portal.afterpay.com/afterpay-async.js',\n    SANDBOX = '//portal.sandbox.afterpay.com/afterpay.js',\n    HTTPS_PROD = 'https://portal.afterpay.com/afterpay-async.js',\n    HTTPS_SANDBOX = 'https://portal.sandbox.afterpay.com/afterpay.js',\n}\n\nenum SCRIPTS_US {\n    PROD = '//portal.afterpay.com/afterpay-async.js',\n    SANDBOX = '//portal.sandbox.afterpay.com/afterpay.js',\n    HTTPS_PROD = 'https://portal.afterpay.com/afterpay-async.js',\n    HTTPS_SANDBOX = 'https://portal.sandbox.afterpay.com/afterpay.js',\n}\n\n/** Class responsible for loading the Afterpay SDK */\nexport default class AfterpayScriptLoader {\n    constructor(private _scriptLoader: ScriptLoader) {}\n\n    /**\n     * Loads the appropriate Afterpay SDK depending on the payment method data.\n     *\n     * @param {PaymentMethod} method the payment method data\n     */\n    async load(\n        method: PaymentMethod,\n        countryCode: string,\n        withHttps = false,\n    ): Promise<AfterpaySdk> {\n        const testMode = method.config.testMode || false;\n        const scriptURI = this._getScriptURI(countryCode, testMode, withHttps);\n\n        return this._scriptLoader.loadScript(scriptURI).then(() => {\n            if (!isAfterpayWindow(window)) {\n                throw new PaymentMethodClientUnavailableError();\n            }\n\n            return window.AfterPay;\n        });\n    }\n\n    private _getScriptURI(countryCode: string, testMode: boolean, withHttps = false): string {\n        if (countryCode === 'US') {\n            if (withHttps) {\n                return testMode ? SCRIPTS_US.HTTPS_SANDBOX : SCRIPTS_US.HTTPS_PROD;\n            }\n\n            return testMode ? SCRIPTS_US.SANDBOX : SCRIPTS_US.PROD;\n        }\n\n        if (withHttps) {\n            return testMode ? SCRIPTS_DEFAULT.HTTPS_SANDBOX : SCRIPTS_DEFAULT.HTTPS_PROD;\n        }\n\n        return testMode ? SCRIPTS_DEFAULT.SANDBOX : SCRIPTS_DEFAULT.PROD;\n    }\n}\n"
  },
  {
    "path": "packages/afterpay-integration/src/afterpay-sdk.ts",
    "content": "export default interface AfterpaySdk {\n    initialize(options: AfterpayInitializeOptions): void;\n    redirect(options: AfterpayDisplayOptions): void;\n}\n\nexport interface AfterpayDisplayOptions {\n    token: string;\n}\n\nexport interface AfterpayInitializeOptions {\n    countryCode: string;\n}\n"
  },
  {
    "path": "packages/afterpay-integration/src/afterpay-window.ts",
    "content": "import AfterpaySdk from './afterpay-sdk';\n\nexport default interface AfterpayWindow extends Window {\n    AfterPay: AfterpaySdk;\n}\n"
  },
  {
    "path": "packages/afterpay-integration/src/afterpay.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getAfterpay(): PaymentMethod {\n    return {\n        id: 'PAY_BY_INSTALLMENT',\n        gateway: 'afterpay',\n        logoUrl: '',\n        method: 'multi-option',\n        supportedCards: [],\n        config: {\n            displayName: 'Pay over time',\n            merchantId: '33133',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'foo',\n    };\n}\n"
  },
  {
    "path": "packages/afterpay-integration/src/create-afterpay-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport AfterpayPaymentStrategy from './afterpay-payment-strategy';\nimport createAfterpayPaymentStrategy from './create-afterpay-payment-strategy';\n\ndescribe('createAfterpayPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates afterpay payment strategy', () => {\n        const strategy = createAfterpayPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(AfterpayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/afterpay-integration/src/create-afterpay-payment-strategy.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport AfterpayPaymentStrategy from './afterpay-payment-strategy';\nimport AfterpayScriptLoader from './afterpay-script-loader';\n\nconst createAfterpayPaymentStrategy: PaymentStrategyFactory<AfterpayPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new AfterpayPaymentStrategy(\n        paymentIntegrationService,\n        new AfterpayScriptLoader(createScriptLoader()),\n    );\n};\n\nexport default toResolvableModule(createAfterpayPaymentStrategy, [\n    { gateway: 'afterpay' },\n    { id: 'afterpay' },\n]);\n"
  },
  {
    "path": "packages/afterpay-integration/src/index.ts",
    "content": "export { default as createAfterpayPaymentStrategy } from './create-afterpay-payment-strategy';\n"
  },
  {
    "path": "packages/afterpay-integration/src/is-afterpay-window.ts",
    "content": "import AfterpayWindow from './afterpay-window';\n\nexport default function isAfterpayWindow(window: Window): window is AfterpayWindow {\n    return 'AfterPay' in window;\n}\n"
  },
  {
    "path": "packages/afterpay-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true\n    }\n}\n"
  },
  {
    "path": "packages/afterpay-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/afterpay-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/README.md",
    "content": "# amazon-pay-integration\n\nThis package contains the integration layer for the [AmazonPay](https://developer.amazon.com/docs/amazon-pay/intro.html) provider.\n\n## Running unit tests\n\nRun `nx test amazon-pay-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint amazon-pay-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/amazon-pay-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'amazon-pay-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/amazon-pay',\n    coveragePathIgnorePatterns: ['<rootDir>/src/index.ts'],\n};\n"
  },
  {
    "path": "packages/amazon-pay-integration/project.json",
    "content": "{\n    \"name\": \"amazon-pay-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/amazon-pay-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/amazon-pay-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/amazon-pay-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/amazon-pay-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/amazon-pay-v2-button-options.ts",
    "content": "import {\n    AmazonPayV2ButtonConfig,\n    AmazonPayV2ButtonParameters,\n} from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport { BuyNowCartRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport interface WithBuyNowFeature extends AmazonPayV2ButtonConfig {\n    /**\n     * The options that are required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: {\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\n    };\n}\n\n/**\n * The required config to render the AmazonPayV2 button.\n */\nexport type AmazonPayV2ButtonInitializeOptions = AmazonPayV2ButtonParameters | WithBuyNowFeature;\n\nexport interface WithAmazonPayV2ButtonInitializeOptions {\n    amazonpay?: AmazonPayV2ButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/amazon-pay-v2-button-strategy.spec.ts",
    "content": "import {\n    AmazonPayV2ButtonColor,\n    AmazonPayV2PaymentProcessor,\n    AmazonPayV2Placement,\n    getAmazonPayV2,\n    getAmazonPayV2PaymentProcessorMock,\n} from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport {\n    CartSource,\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport AmazonPayV2ButtonStrategy from './amazon-pay-v2-button-strategy';\nimport AmazonPayV2RequestSender from './amazon-pay-v2-request-sender';\nimport AmazonPayV2ConfigCreationError from './errors/amazon-pay-v2-config-creation-error';\nimport { getAmazonPayV2CheckoutButtonOptions, Mode } from './mock/amazon-pay-v2-button.mock';\nimport { getAmazonPayV2RequestSenderMock } from './mock/amazon-pay-v2-config-request-sender.mock';\n\ndescribe('AmazonPayV2ButtonStrategy', () => {\n    let checkoutButtonOptions: CheckoutButtonInitializeOptions;\n    let amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let strategy: AmazonPayV2ButtonStrategy;\n    let amazonPayV2RequestSender: AmazonPayV2RequestSender;\n\n    beforeEach(() => {\n        const cart = getCart();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        amazonPayV2PaymentProcessor =\n            getAmazonPayV2PaymentProcessorMock() as unknown as AmazonPayV2PaymentProcessor;\n        amazonPayV2RequestSender =\n            getAmazonPayV2RequestSenderMock() as unknown as AmazonPayV2RequestSender;\n        checkoutButtonOptions = getAmazonPayV2CheckoutButtonOptions();\n\n        const buyNowCartMock = {\n            ...cart,\n            id: '999',\n            source: CartSource.BuyNow,\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getAmazonPayV2(),\n        );\n        jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n            Promise.resolve(buyNowCartMock),\n        );\n        jest.spyOn(\n            amazonPayV2PaymentProcessor,\n            'prepareCheckoutWithCreationRequestConfig',\n        ).mockImplementation(jest.fn());\n\n        strategy = new AmazonPayV2ButtonStrategy(\n            paymentIntegrationService,\n            amazonPayV2PaymentProcessor,\n            amazonPayV2RequestSender,\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize', () => {\n        it('should initialize the processor', async () => {\n            await strategy.initialize(checkoutButtonOptions);\n\n            expect(amazonPayV2PaymentProcessor.initialize).toHaveBeenCalledWith(getAmazonPayV2());\n        });\n\n        it('should initialize with Buy Now Flow', async () => {\n            checkoutButtonOptions = getAmazonPayV2CheckoutButtonOptions(Mode.BuyNowFlow);\n            await strategy.initialize(checkoutButtonOptions);\n\n            expect(amazonPayV2PaymentProcessor.initialize).toHaveBeenCalledWith(getAmazonPayV2());\n            expect(paymentIntegrationService.loadDefaultCheckout).not.toHaveBeenCalled();\n            expect(\n                amazonPayV2PaymentProcessor.prepareCheckoutWithCreationRequestConfig,\n            ).toHaveBeenCalled();\n        });\n\n        it('loads the checkout if AmazonPayV2ButtonInitializeOptions is not provided', async () => {\n            checkoutButtonOptions = getAmazonPayV2CheckoutButtonOptions(Mode.UndefinedAmazonPay);\n\n            await strategy.initialize(checkoutButtonOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n\n        it('does not load the checkout if AmazonPayV2ButtonInitializeOptions is provided', async () => {\n            await strategy.initialize(checkoutButtonOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).not.toHaveBeenCalled();\n        });\n\n        it('should render the button', async () => {\n            await strategy.initialize(checkoutButtonOptions);\n\n            expect(amazonPayV2PaymentProcessor.renderAmazonPayButton).toHaveBeenCalledWith({\n                buttonColor: AmazonPayV2ButtonColor.Gold,\n                checkoutState: paymentIntegrationService.getState(),\n                containerId: 'amazonpayCheckoutButton',\n                methodId: 'amazonpay',\n                options: checkoutButtonOptions.amazonpay,\n                placement: AmazonPayV2Placement.Cart,\n            });\n        });\n\n        describe('should fail...', () => {\n            test('if methodId is not provided', async () => {\n                checkoutButtonOptions = getAmazonPayV2CheckoutButtonOptions(Mode.UndefinedMethodId);\n\n                const initialize = strategy.initialize(checkoutButtonOptions);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('if containerId is not provided', async () => {\n                checkoutButtonOptions = getAmazonPayV2CheckoutButtonOptions(\n                    Mode.UndefinedContainer,\n                );\n\n                const initialize = strategy.initialize(checkoutButtonOptions);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('if there is no payment method data', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockImplementation(() => {\n                    throw new PaymentArgumentInvalidError();\n                });\n\n                const initialize = strategy.initialize(checkoutButtonOptions);\n\n                await expect(initialize).rejects.toThrow(PaymentArgumentInvalidError);\n            });\n\n            it('if initialize with Buy Now Flow but createBuyNowCart throw error', async () => {\n                checkoutButtonOptions = getAmazonPayV2CheckoutButtonOptions(Mode.BuyNowFlow);\n\n                jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockRejectedValue(\n                    undefined,\n                );\n\n                await strategy.initialize(checkoutButtonOptions);\n\n                expect(amazonPayV2RequestSender.createCheckoutConfig).not.toHaveBeenCalled();\n            });\n\n            it('if initialize with Buy Now Flow but createCheckoutConfig throw error', async () => {\n                let callbackResult;\n\n                checkoutButtonOptions = getAmazonPayV2CheckoutButtonOptions(Mode.BuyNowFlow);\n\n                jest.spyOn(\n                    amazonPayV2PaymentProcessor,\n                    'prepareCheckoutWithCreationRequestConfig',\n                ).mockImplementation((callback: () => Promise<unknown>) => {\n                    callbackResult = callback();\n                });\n                jest.spyOn(amazonPayV2RequestSender, 'createCheckoutConfig').mockRejectedValue(\n                    undefined,\n                );\n\n                try {\n                    await strategy.initialize(checkoutButtonOptions);\n                    await new Promise((resolve) => process.nextTick(resolve));\n                } catch (err: unknown) {\n                    callbackResult = err;\n                } finally {\n                    await expect(callbackResult).rejects.toThrow(AmazonPayV2ConfigCreationError);\n                }\n            });\n        });\n    });\n\n    describe('#deinitialize', () => {\n        it('succesfully deinitializes the strategy', async () => {\n            await strategy.deinitialize();\n\n            expect(amazonPayV2PaymentProcessor.deinitialize).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/amazon-pay-v2-button-strategy.ts",
    "content": "import {\n    AmazonPayV2CheckoutSessionConfig,\n    AmazonPayV2InitializeOptions,\n    AmazonPayV2PaymentProcessor,\n    AmazonPayV2PayOptions,\n    AmazonPayV2Placement,\n} from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport {\n    BuyNowCartCreationError,\n    CheckoutButtonInitializeOptions,\n    CheckoutButtonStrategy,\n    getShippableItemsCount,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    WithAmazonPayV2ButtonInitializeOptions,\n    WithBuyNowFeature,\n} from './amazon-pay-v2-button-options';\nimport AmazonPayV2RequestSender from './amazon-pay-v2-request-sender';\nimport AmazonPayV2ConfigCreationError from './errors/amazon-pay-v2-config-creation-error';\nimport { isWithBuyNowFeatures } from './isWithBuyNowFeatures';\n\nexport default class AmazonPayV2ButtonStrategy implements CheckoutButtonStrategy {\n    private _buyNowInitializeOptions: WithBuyNowFeature['buyNowInitializeOptions'];\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor,\n        private amazonPayV2ConfigRequestSender: AmazonPayV2RequestSender,\n    ) {}\n\n    async initialize(\n        options: CheckoutButtonInitializeOptions & WithAmazonPayV2ButtonInitializeOptions,\n    ): Promise<void> {\n        const { methodId, containerId, amazonpay } = options;\n        const { buttonColor } = amazonpay || {};\n\n        if (!methodId || !containerId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.',\n            );\n        }\n\n        const { getPaymentMethodOrThrow } = this.paymentIntegrationService.getState();\n\n        const paymentMethod = getPaymentMethodOrThrow<AmazonPayV2InitializeOptions>(methodId);\n        const { initializationData } = paymentMethod;\n\n        await this.amazonPayV2PaymentProcessor.initialize(paymentMethod);\n\n        if (!amazonpay) {\n            await this.paymentIntegrationService.loadDefaultCheckout();\n        }\n\n        const initializeAmazonButtonOptions = isWithBuyNowFeatures(amazonpay)\n            ? undefined\n            : amazonpay;\n\n        if (\n            isWithBuyNowFeatures(amazonpay) &&\n            typeof amazonpay.buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function'\n        ) {\n            this._buyNowInitializeOptions = amazonpay.buyNowInitializeOptions;\n            this.amazonPayV2PaymentProcessor.updateBuyNowFlowFlag(true);\n        }\n\n        this.amazonPayV2PaymentProcessor.renderAmazonPayButton({\n            checkoutState: this.paymentIntegrationService.getState(),\n            containerId,\n            methodId,\n            options: initializeAmazonButtonOptions,\n            placement: AmazonPayV2Placement.Cart,\n            buttonColor,\n            isButtonMicroTextDisabled: initializationData?.isButtonMicroTextDisabled,\n        });\n\n        if (this._buyNowInitializeOptions) {\n            this.amazonPayV2PaymentProcessor.prepareCheckoutWithCreationRequestConfig(\n                this._getCheckoutCreationRequestConfig.bind(this),\n            );\n        }\n    }\n\n    deinitialize(): Promise<void> {\n        return this.amazonPayV2PaymentProcessor.deinitialize();\n    }\n\n    private async _createBuyNowCartOrThrow() {\n        const buyNowCartRequestBody = this._buyNowInitializeOptions?.getBuyNowCartRequestBody?.();\n\n        if (!buyNowCartRequestBody) {\n            throw new MissingDataError(MissingDataErrorType.MissingCart);\n        }\n\n        try {\n            const buyNowCart = await this.paymentIntegrationService.createBuyNowCart(\n                buyNowCartRequestBody,\n            );\n\n            return buyNowCart;\n        } catch (error) {\n            throw new BuyNowCartCreationError();\n        }\n    }\n\n    private async _createCheckoutConfig(\n        id: string,\n    ): Promise<Required<AmazonPayV2CheckoutSessionConfig>> {\n        try {\n            const {\n                body: { payload, public_key, ...rest },\n            } = await this.amazonPayV2ConfigRequestSender.createCheckoutConfig(id);\n\n            return {\n                payloadJSON: payload,\n                publicKeyId: public_key,\n                ...rest,\n            };\n        } catch (error) {\n            throw new AmazonPayV2ConfigCreationError();\n        }\n    }\n\n    private async _getCheckoutCreationRequestConfig() {\n        const buyNowCart = await this._createBuyNowCartOrThrow();\n        const estimatedOrderAmount = {\n            amount: String(buyNowCart.baseAmount),\n            currencyCode: buyNowCart.currency.code,\n        };\n        const createCheckoutSessionConfig = await this._createCheckoutConfig(buyNowCart.id);\n\n        return {\n            createCheckoutSessionConfig,\n            estimatedOrderAmount,\n            productType:\n                getShippableItemsCount(buyNowCart) === 0\n                    ? AmazonPayV2PayOptions.PayOnly\n                    : AmazonPayV2PayOptions.PayAndShip,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/amazon-pay-v2-customer-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the customer step of\n * checkout in order to support AmazonPayV2.\n *\n * When AmazonPayV2 is initialized, a sign-in button will be inserted into the\n * DOM. When the customer clicks on it, they will be redirected to Amazon to\n * sign in.\n *\n * ```html\n * <!-- This is where the Amazon Pay button will be inserted -->\n * <div id=\"signInButton\"></div>\n * ```\n *\n * ```js\n * service.initializeCustomer({\n *     methodId: 'amazonpay',\n *     amazonpay: {\n *         container: 'signInButton',\n *     },\n * });\n * ```\n */\nexport default interface AmazonPayV2CustomerInitializeOptions {\n    /**\n     * The ID of a container which the sign-in button should insert into.\n     */\n    container: string;\n}\n\nexport interface WithAmazonPayV2CustomerInitializeOptions {\n    amazonpay?: AmazonPayV2CustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/amazon-pay-v2-customer-strategy.spec.ts",
    "content": "import {\n    AmazonPayV2PaymentProcessor,\n    AmazonPayV2Placement,\n    getAmazonPayV2,\n    getAmazonPayV2PaymentProcessorMock,\n} from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport {\n    CustomerInitializeOptions,\n    InvalidArgumentError,\n    NotImplementedError,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { WithAmazonPayV2CustomerInitializeOptions } from './amazon-pay-v2-customer-initialize-options';\nimport AmazonPayV2CustomerStrategy from './amazon-pay-v2-customer-strategy';\nimport { getAmazonPayV2CustomerInitializeOptions, Mode } from './mock/amazon-pay-v2-customer.mock';\n\ndescribe('AmazonPayV2CustomerStrategy', () => {\n    let customerInitializeOptions: CustomerInitializeOptions &\n        WithAmazonPayV2CustomerInitializeOptions;\n    let amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor;\n    let strategy: AmazonPayV2CustomerStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethodMock: PaymentMethod;\n\n    beforeEach(() => {\n        customerInitializeOptions = getAmazonPayV2CustomerInitializeOptions();\n        amazonPayV2PaymentProcessor =\n            getAmazonPayV2PaymentProcessorMock() as unknown as AmazonPayV2PaymentProcessor;\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paymentMethodMock = getAmazonPayV2();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n\n        strategy = new AmazonPayV2CustomerStrategy(\n            paymentIntegrationService,\n            amazonPayV2PaymentProcessor,\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize', () => {\n        it('should initialize the processor', async () => {\n            await strategy.initialize(customerInitializeOptions);\n\n            expect(amazonPayV2PaymentProcessor.initialize).toHaveBeenCalledWith(getAmazonPayV2());\n        });\n\n        it('should render the button', async () => {\n            await strategy.initialize(customerInitializeOptions);\n\n            expect(amazonPayV2PaymentProcessor.renderAmazonPayButton).toHaveBeenCalledWith({\n                checkoutState: paymentIntegrationService.getState(),\n                containerId: 'amazonpayCheckoutButton',\n                methodId: 'amazonpay',\n                placement: AmazonPayV2Placement.Checkout,\n            });\n        });\n\n        describe('should fail...', () => {\n            test('if methodId is not provided', async () => {\n                customerInitializeOptions = getAmazonPayV2CustomerInitializeOptions(\n                    Mode.UndefinedMethodId,\n                );\n\n                const initialize = strategy.initialize(customerInitializeOptions);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('if containerId is not provided', async () => {\n                customerInitializeOptions = getAmazonPayV2CustomerInitializeOptions(\n                    Mode.Incomplete,\n                );\n\n                const initialize = strategy.initialize(customerInitializeOptions);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('if there is no payment method data', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockImplementation(() => {\n                    throw new PaymentArgumentInvalidError();\n                });\n\n                strategy = new AmazonPayV2CustomerStrategy(\n                    paymentIntegrationService,\n                    amazonPayV2PaymentProcessor,\n                );\n\n                const initialize = strategy.initialize(customerInitializeOptions);\n\n                await expect(initialize).rejects.toThrow(PaymentArgumentInvalidError);\n            });\n        });\n    });\n\n    describe('#deinitialize', () => {\n        it('succesfully deinitializes the strategy', async () => {\n            await strategy.deinitialize();\n\n            expect(amazonPayV2PaymentProcessor.deinitialize).toHaveBeenCalled();\n        });\n    });\n\n    describe('#signIn', () => {\n        it('throws error if trying to sign in programmatically', async () => {\n            await strategy.initialize(customerInitializeOptions);\n\n            expect(strategy.signIn).toThrow(NotImplementedError);\n        });\n    });\n\n    describe('#signOut', () => {\n        beforeEach(async () => {\n            await strategy.initialize(customerInitializeOptions);\n        });\n\n        it('signs out from Amazon and remote checkout provider', async () => {\n            const signOutMock = jest.spyOn(amazonPayV2PaymentProcessor, 'signout');\n            const remoteCheckoutSignOutMock = jest.spyOn(\n                paymentIntegrationService,\n                'remoteCheckoutSignOut',\n            );\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentId').mockReturnValueOnce({\n                providerId: 'amazonpay',\n            });\n            remoteCheckoutSignOutMock.mockImplementation(jest.fn());\n\n            await strategy.signOut({\n                methodId: 'amazonpay',\n            } as RequestOptions);\n\n            expect(signOutMock).toHaveBeenCalledTimes(1);\n            expect(remoteCheckoutSignOutMock).toHaveBeenCalledTimes(1);\n        });\n\n        it('does nothing if already signed out from remote checkout provider', async () => {\n            const signOutMock = jest.spyOn(amazonPayV2PaymentProcessor, 'signout');\n            const remoteCheckoutSignOutMock = jest.spyOn(\n                paymentIntegrationService,\n                'remoteCheckoutSignOut',\n            );\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentId').mockReturnValueOnce(\n                undefined,\n            );\n            remoteCheckoutSignOutMock.mockImplementation(jest.fn());\n\n            await strategy.signOut({\n                methodId: 'amazonpay',\n            } as RequestOptions);\n\n            expect(signOutMock).not.toHaveBeenCalled();\n            expect(remoteCheckoutSignOutMock).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout', () => {\n        it('runs continue callback automatically on execute payment method checkout', async () => {\n            const mockCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({\n                continueWithCheckoutCallback: mockCallback,\n            });\n\n            expect(mockCallback.mock.calls).toHaveLength(1);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/amazon-pay-v2-customer-strategy.ts",
    "content": "import {\n    AmazonPayV2InitializeOptions,\n    AmazonPayV2PaymentProcessor,\n    AmazonPayV2Placement,\n} from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport {\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    ExecutePaymentMethodCheckoutOptions,\n    InvalidArgumentError,\n    NotImplementedError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithAmazonPayV2CustomerInitializeOptions } from './amazon-pay-v2-customer-initialize-options';\n\nexport default class AmazonPayV2CustomerStrategy implements CustomerStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions & WithAmazonPayV2CustomerInitializeOptions,\n    ): Promise<void> {\n        const { methodId, amazonpay } = options;\n\n        if (!methodId || !amazonpay?.container) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" or \"containerId\" argument is not provided.',\n            );\n        }\n\n        let paymentMethod: PaymentMethod<AmazonPayV2InitializeOptions>;\n\n        try {\n            paymentMethod = this.paymentIntegrationService\n                .getState()\n                .getPaymentMethodOrThrow(methodId);\n        } catch (_e) {\n            await this.paymentIntegrationService.loadPaymentMethod(methodId);\n            paymentMethod = this.paymentIntegrationService\n                .getState()\n                .getPaymentMethodOrThrow(methodId);\n        }\n\n        await this.amazonPayV2PaymentProcessor.initialize(paymentMethod);\n\n        this.amazonPayV2PaymentProcessor.renderAmazonPayButton({\n            checkoutState: this.paymentIntegrationService.getState(),\n            containerId: amazonpay.container,\n            methodId,\n            placement: AmazonPayV2Placement.Checkout,\n        });\n    }\n\n    async deinitialize(): Promise<void> {\n        await this.amazonPayV2PaymentProcessor.deinitialize();\n    }\n\n    signIn(): Promise<void> {\n        throw new NotImplementedError(\n            'In order to sign in via Amazon, the shopper must click on \"Amazon Pay\" button.',\n        );\n    }\n\n    async signOut(options?: RequestOptions): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const payment = state.getPaymentId();\n\n        if (!payment) {\n            return;\n        }\n\n        await this.amazonPayV2PaymentProcessor.signout();\n        await this.paymentIntegrationService.remoteCheckoutSignOut(payment.providerId, options);\n    }\n\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n        options?.continueWithCheckoutCallback?.();\n\n        return Promise.resolve();\n    }\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/amazon-pay-v2-payment-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the payment step of\n * checkout in order to support AmazonPayV2.\n *\n * When AmazonPayV2 is initialized, a change payment button will be bound.\n * When the customer clicks on it, they will be redirected to Amazon to\n * select a different payment method.\n *\n * ```html\n * <!-- This is the change payment button that will be bound -->\n * <button id=\"edit-button\">Change card</button>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'amazonpay',\n *     amazonpay: {\n *         editButtonId: 'edit-button',\n *     },\n * });\n * ```\n */\nexport default interface AmazonPayV2PaymentInitializeOptions {\n    /**\n     * This editButtonId is used to set an event listener, provide an element ID\n     * if you want users to be able to select a different payment method by\n     * clicking on a button. It should be an HTML element.\n     */\n    editButtonId?: string;\n}\n\nexport interface WithAmazonPayV2PaymentInitializeOptions {\n    amazonpay?: AmazonPayV2PaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/amazon-pay-v2-payment-strategy.spec.ts",
    "content": "import {\n    AmazonPayV2NewButtonParams,\n    AmazonPayV2PaymentProcessor,\n    AmazonPayV2Placement,\n    getAmazonPayV2,\n    getAmazonPayV2PaymentProcessorMock,\n    getAmazonPayV2Ph4ButtonParamsMock,\n} from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport {\n    InvalidArgumentError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    RequestError,\n    StoreConfig,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    getErrorPaymentResponseBody,\n    getOrderRequestBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport AmazonPayV2PaymentInitializeOptions, {\n    WithAmazonPayV2PaymentInitializeOptions,\n} from './amazon-pay-v2-payment-initialize-options';\nimport AmazonPayV2PaymentStrategy from './amazon-pay-v2-payment-strategy';\n\ndescribe('AmazonPayV2PaymentStrategy', () => {\n    let amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor;\n    let editMethodButton: HTMLDivElement;\n    let amazonPayButton: HTMLDivElement;\n    let paymentMethodMock: PaymentMethod;\n    let strategy: AmazonPayV2PaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let storeConfigMock: StoreConfig;\n\n    beforeEach(() => {\n        amazonPayV2PaymentProcessor =\n            getAmazonPayV2PaymentProcessorMock() as unknown as AmazonPayV2PaymentProcessor;\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paymentMethodMock = getAmazonPayV2();\n        storeConfigMock = getConfig().storeConfig;\n        paymentIntegrationService.widgetInteraction = jest.fn();\n        storeConfigMock.checkoutSettings.features = {\n            'PROJECT-3483.amazon_pay_ph4': false,\n            'INT-6399.amazon_pay_apb': false,\n        };\n\n        editMethodButton = document.createElement('div');\n        editMethodButton.setAttribute('id', 'editButtonId');\n        document.body.appendChild(editMethodButton);\n\n        amazonPayButton = document.createElement('div');\n\n        jest.spyOn(amazonPayButton, 'click');\n\n        jest.spyOn(amazonPayV2PaymentProcessor, 'renderAmazonPayButton').mockReturnValue(\n            amazonPayButton,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfigMock,\n        );\n\n        strategy = new AmazonPayV2PaymentStrategy(\n            paymentIntegrationService,\n            amazonPayV2PaymentProcessor,\n        );\n    });\n\n    afterEach(() => {\n        if (editMethodButton.parentElement === document.body) {\n            document.body.removeChild(editMethodButton);\n        } else {\n            const shippingButton = document.getElementById('editButtonId');\n\n            if (shippingButton) {\n                document.body.removeChild(shippingButton);\n            }\n        }\n    });\n\n    describe('#initialize', () => {\n        let amazonpayv2InitializeOptions: AmazonPayV2PaymentInitializeOptions;\n        let initializeOptions: PaymentInitializeOptions & WithAmazonPayV2PaymentInitializeOptions;\n        const paymentToken = 'abc123';\n        const changeMethodId = 'editButtonId';\n\n        beforeEach(() => {\n            amazonpayv2InitializeOptions = { editButtonId: changeMethodId };\n            initializeOptions = { methodId: 'amazonpay', amazonpay: amazonpayv2InitializeOptions };\n        });\n\n        it('should initialize the processor', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(amazonPayV2PaymentProcessor.initialize).toHaveBeenCalledWith(paymentMethodMock);\n        });\n\n        it('should bind edit method button if paymentToken and editButtonId are present', async () => {\n            paymentMethodMock.initializationData.paymentToken = paymentToken;\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            await strategy.initialize(initializeOptions);\n\n            expect(amazonPayV2PaymentProcessor.bindButton).toHaveBeenCalledWith(\n                changeMethodId,\n                paymentToken,\n                'changePayment',\n            );\n        });\n\n        it('should not bind edit method button if paymentToken is not present', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(amazonPayV2PaymentProcessor.bindButton).not.toHaveBeenCalled();\n        });\n\n        it('should not bind edit method button if paymentToken is present but editButtonId is not', async () => {\n            paymentMethodMock.initializationData.paymentToken = paymentToken;\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            if (initializeOptions.amazonpay) {\n                delete initializeOptions.amazonpay.editButtonId;\n            }\n\n            await strategy.initialize(initializeOptions);\n\n            expect(amazonPayV2PaymentProcessor.bindButton).not.toHaveBeenCalled();\n        });\n\n        it('creates a signin button if paymentToken is not present on initializationData', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(amazonPayV2PaymentProcessor.bindButton).not.toHaveBeenCalled();\n            expect(amazonPayV2PaymentProcessor.renderAmazonPayButton).toHaveBeenCalledWith({\n                checkoutState: paymentIntegrationService.getState(),\n                containerId: 'AmazonPayButton',\n                decoupleCheckoutInitiation: false,\n                methodId: 'amazonpay',\n                placement: AmazonPayV2Placement.Checkout,\n            });\n        });\n\n        it('creates an additional payment button for one-time transactions', async () => {\n            storeConfigMock = getConfig().storeConfig;\n\n            storeConfigMock.checkoutSettings.features = {\n                'PROJECT-3483.amazon_pay_ph4': true,\n                'INT-6399.amazon_pay_apb': true,\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue(storeConfigMock);\n\n            await strategy.initialize(initializeOptions);\n\n            expect(amazonPayV2PaymentProcessor.bindButton).not.toHaveBeenCalled();\n            expect(amazonPayV2PaymentProcessor.renderAmazonPayButton).toHaveBeenCalledWith({\n                checkoutState: paymentIntegrationService.getState(),\n                containerId: 'AmazonPayButton',\n                decoupleCheckoutInitiation: true,\n                methodId: 'amazonpay',\n                placement: AmazonPayV2Placement.Checkout,\n            });\n        });\n\n        it('dispatches widgetInteraction when clicking previously binded edit method button if region not US', async () => {\n            paymentMethodMock.initializationData.paymentToken = paymentToken;\n            paymentMethodMock.initializationData.region = 'uk';\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            await strategy.initialize(initializeOptions);\n\n            const editButton = document.getElementById(changeMethodId);\n\n            if (editButton) {\n                editButton.click();\n            }\n\n            expect(paymentIntegrationService.widgetInteraction).toHaveBeenCalled();\n        });\n\n        it('avoid dispatching widgetInteraction when clicking previously binded edit method button if region US', async () => {\n            paymentMethodMock.initializationData.paymentToken = paymentToken;\n            paymentMethodMock.initializationData.region = 'us';\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            await strategy.initialize(initializeOptions);\n\n            const editButton = document.getElementById(changeMethodId);\n\n            if (editButton) {\n                editButton.click();\n            }\n\n            expect(paymentIntegrationService.widgetInteraction).not.toHaveBeenCalled();\n        });\n\n        it('does not bind edit method button if button do not exist', async () => {\n            document.body.removeChild(editMethodButton);\n            paymentMethodMock.initializationData.paymentToken = paymentToken;\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            await strategy.initialize(initializeOptions);\n\n            expect(amazonPayV2PaymentProcessor.bindButton).not.toHaveBeenCalled();\n            expect(amazonPayV2PaymentProcessor.renderAmazonPayButton).not.toHaveBeenCalled();\n\n            document.body.appendChild(editMethodButton);\n        });\n\n        describe('should fail if...', () => {\n            test('methodId is not provided', async () => {\n                initializeOptions.methodId = '';\n\n                await expect(strategy.initialize(initializeOptions)).rejects.toThrow(\n                    InvalidArgumentError,\n                );\n\n                expect(amazonPayV2PaymentProcessor.initialize).not.toHaveBeenCalled();\n            });\n\n            test(\"payment button wasn't rendered is not provided\", async () => {\n                jest.spyOn(amazonPayV2PaymentProcessor, 'renderAmazonPayButton').mockReturnValue(\n                    undefined,\n                );\n\n                await expect(strategy.initialize(initializeOptions)).rejects.toThrow(\n                    'Unable to render the Amazon Pay button to an invalid HTML container element.',\n                );\n            });\n        });\n    });\n\n    describe('#execute', () => {\n        let amazonpayv2InitializeOptions: AmazonPayV2PaymentInitializeOptions;\n        let initializeOptions: PaymentInitializeOptions;\n        let orderRequestBody: OrderRequestBody;\n        const paymentToken = 'abc123';\n\n        beforeEach(async () => {\n            amazonpayv2InitializeOptions = { editButtonId: 'editButtonId' };\n            initializeOptions = { methodId: 'amazonpay', amazonpay: amazonpayv2InitializeOptions };\n            orderRequestBody = {\n                ...getOrderRequestBody(),\n                payment: {\n                    methodId: 'amazonpay',\n                },\n            };\n\n            await strategy.initialize(initializeOptions);\n        });\n\n        it('executes the strategy successfully if paymentToken is found on intializationData', async () => {\n            paymentMethodMock.initializationData.paymentToken = paymentToken;\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            await strategy.execute(orderRequestBody, initializeOptions);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                orderRequestBody,\n                initializeOptions,\n            );\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: 'amazonpay',\n                paymentData: { nonce: 'abc123' },\n            });\n        });\n\n        it('executes the strategy successfully if it is a one-time transaction', async () => {\n            storeConfigMock = getConfig().storeConfig;\n\n            storeConfigMock.checkoutSettings.features = {\n                'PROJECT-3483.amazon_pay_ph4': true,\n                'INT-6399.amazon_pay_apb': true,\n            };\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue(storeConfigMock);\n\n            await strategy.execute(orderRequestBody, initializeOptions);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                orderRequestBody,\n                initializeOptions,\n            );\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: 'amazonpay',\n                paymentData: { nonce: 'apb' },\n            });\n        });\n\n        it('redirects to Amazon url', async () => {\n            paymentMethodMock.initializationData.paymentToken = paymentToken;\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            const paymentFailedErrorAction = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    status: 'additional_action_required',\n                    additional_action_required: {\n                        data: {\n                            redirect_url: 'http://some-url',\n                        },\n                    },\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(\n                paymentFailedErrorAction,\n            );\n\n            Object.defineProperty(window, 'location', {\n                value: {\n                    assign: jest.fn(),\n                },\n            });\n\n            void strategy.execute(orderRequestBody, initializeOptions);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(window.location.assign).toHaveBeenCalledWith('http://some-url');\n            expect(amazonPayButton.click).not.toHaveBeenCalled();\n\n            jest.clearAllMocks();\n        });\n\n        it('should invoke Amazon Pay Pre-Order page', async () => {\n            storeConfigMock = getConfig().storeConfig;\n\n            storeConfigMock.checkoutSettings.features = {\n                'PROJECT-3483.amazon_pay_ph4': true,\n                'INT-6399.amazon_pay_apb': true,\n            };\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue(storeConfigMock);\n\n            const { publicKeyId, createCheckoutSessionConfig } =\n                getAmazonPayV2Ph4ButtonParamsMock() as AmazonPayV2NewButtonParams;\n            const expectedConfig = {\n                publicKeyId,\n                ...createCheckoutSessionConfig,\n            };\n            const paymentFailedErrorAction = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    status: 'additional_action_required',\n                    additional_action_required: {\n                        data: {\n                            redirect_url: JSON.stringify(expectedConfig),\n                        },\n                    },\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(\n                paymentFailedErrorAction,\n            );\n\n            void strategy.execute(orderRequestBody, initializeOptions);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(amazonPayV2PaymentProcessor.prepareCheckout).toHaveBeenNthCalledWith(\n                1,\n                expectedConfig,\n            );\n            expect(amazonPayButton.click).toHaveBeenCalled();\n        });\n\n        describe('should fail if...', () => {\n            test('payment argument is invalid', async () => {\n                orderRequestBody.payment = undefined;\n\n                await expect(strategy.execute(orderRequestBody, initializeOptions)).rejects.toThrow(\n                    PaymentArgumentInvalidError,\n                );\n            });\n\n            test('payment method is not found', async () => {\n                orderRequestBody.payment = { methodId: '' };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockImplementation(() => {\n                    throw new PaymentArgumentInvalidError();\n                });\n\n                await expect(strategy.execute(orderRequestBody, initializeOptions)).rejects.toThrow(\n                    PaymentArgumentInvalidError,\n                );\n            });\n\n            test('buttonContainer has not yet been initialized', async () => {\n                await strategy.deinitialize();\n\n                await expect(strategy.execute(orderRequestBody, initializeOptions)).rejects.toThrow(\n                    NotInitializedError,\n                );\n            });\n\n            test('submitPayment throws an error different than additional_action_required', async () => {\n                paymentMethodMock.initializationData.paymentToken = paymentToken;\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodMock);\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(\n                    new RequestError(getResponse(getErrorPaymentResponseBody())),\n                );\n\n                Object.defineProperty(window, 'location', {\n                    value: {\n                        assign: jest.fn(),\n                    },\n                });\n\n                await expect(strategy.execute(orderRequestBody, initializeOptions)).rejects.toThrow(\n                    RequestError,\n                );\n\n                expect(window.location.assign).not.toHaveBeenCalled();\n                expect(amazonPayV2PaymentProcessor.prepareCheckout).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('#finalize', () => {\n        it('throws an error to inform that order finalization is not required', async () => {\n            const promise = strategy.finalize();\n\n            await expect(promise).rejects.toBeInstanceOf(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize', () => {\n        let amazonpayv2InitializeOptions: AmazonPayV2PaymentInitializeOptions;\n        let initializeOptions: PaymentInitializeOptions;\n\n        beforeEach(async () => {\n            amazonpayv2InitializeOptions = { editButtonId: 'editButtonId' };\n            initializeOptions = { methodId: 'amazonpay', amazonpay: amazonpayv2InitializeOptions };\n            await strategy.initialize(initializeOptions);\n        });\n\n        it('should deinitialize the processor', async () => {\n            await strategy.deinitialize();\n\n            expect(amazonPayV2PaymentProcessor.deinitialize).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/amazon-pay-v2-payment-strategy.ts",
    "content": "import { noop } from 'lodash';\n\nimport {\n    AmazonPayV2ChangeActionType,\n    AmazonPayV2CheckoutSessionConfig,\n    AmazonPayV2InitializeOptions,\n    AmazonPayV2PaymentProcessor,\n    AmazonPayV2Placement,\n    isAmazonPayAdditionalActionErrorBody,\n} from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport {\n    CheckoutSettings,\n    guard,\n    InvalidArgumentError,\n    isRequestError,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    StoreProfile,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithAmazonPayV2PaymentInitializeOptions } from './amazon-pay-v2-payment-initialize-options';\n\nexport default class AmazonPayV2PaymentStrategy implements PaymentStrategy {\n    private _amazonPayButton?: HTMLDivElement;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithAmazonPayV2PaymentInitializeOptions,\n    ): Promise<void> {\n        const { methodId, amazonpay } = options;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" argument is not provided.',\n            );\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const { features } = state.getStoreConfigOrThrow().checkoutSettings;\n        const paymentMethod = state.getPaymentMethodOrThrow<AmazonPayV2InitializeOptions>(methodId);\n        const initializationData = paymentMethod.initializationData || {};\n        const { paymentToken = '', region = '', isButtonMicroTextDisabled } = initializationData;\n\n        await this.amazonPayV2PaymentProcessor.initialize(paymentMethod);\n\n        if (this._isReadyToPay(paymentToken)) {\n            if (amazonpay?.editButtonId) {\n                this._bindEditButton(\n                    amazonpay.editButtonId,\n                    paymentToken,\n                    'changePayment',\n                    this._isModalFlow(region),\n                );\n            }\n        } else {\n            const { id: containerId } = this._createContainer();\n\n            this._amazonPayButton = this.amazonPayV2PaymentProcessor.renderAmazonPayButton({\n                checkoutState: state,\n                containerId,\n                decoupleCheckoutInitiation: this._isOneTimeTransaction(\n                    features,\n                    region.toUpperCase(),\n                ),\n                methodId,\n                placement: AmazonPayV2Placement.Checkout,\n                isButtonMicroTextDisabled,\n            });\n\n            if (!this._amazonPayButton) {\n                throw new InvalidArgumentError(\n                    'Unable to render the Amazon Pay button to an invalid HTML container element.',\n                );\n            }\n        }\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment } = payload;\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const { methodId } = payment;\n        const state = this.paymentIntegrationService.getState();\n        const { features } = state.getStoreConfigOrThrow().checkoutSettings;\n        const paymentMethod = state.getPaymentMethodOrThrow<AmazonPayV2InitializeOptions>(methodId);\n        const initializationData = paymentMethod.initializationData || {};\n        const { paymentToken = '', region = '' } = initializationData;\n\n        if (\n            this._isReadyToPay(paymentToken) ||\n            this._isOneTimeTransaction(features, region.toUpperCase())\n        ) {\n            const paymentPayload = {\n                methodId,\n                paymentData: { nonce: paymentToken || 'apb' },\n            };\n\n            await this.paymentIntegrationService.submitOrder(payload, options);\n\n            try {\n                await this.paymentIntegrationService.submitPayment(paymentPayload);\n\n                return;\n            } catch (error) {\n                if (!isRequestError(error) || !isAmazonPayAdditionalActionErrorBody(error.body)) {\n                    throw error;\n                }\n\n                const { additional_action_required: additionalAction } = error.body;\n                const { redirect_url } = additionalAction.data;\n\n                if (paymentToken) {\n                    return new Promise(() => window.location.assign(redirect_url));\n                }\n\n                this.amazonPayV2PaymentProcessor.prepareCheckout(\n                    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n                    JSON.parse(redirect_url) as Required<AmazonPayV2CheckoutSessionConfig>,\n                );\n            }\n        }\n\n        this._getAmazonPayButton().click();\n\n        // Focus of parent window used to try and detect the user cancelling the Amazon log in modal\n        // Should be refactored if/when Amazon add a modal close hook to their SDK\n        if (this._isModalFlow(region)) {\n            return new Promise((_, reject) => {\n                const onFocus = () => {\n                    window.removeEventListener('focus', onFocus);\n                    reject(\n                        new PaymentMethodCancelledError(\n                            'Shopper needs to login to Amazonpay to continue',\n                        ),\n                    );\n                };\n\n                window.addEventListener('focus', onFocus);\n            });\n        }\n\n        return new Promise<never>(noop);\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    async deinitialize(): Promise<void> {\n        await this.amazonPayV2PaymentProcessor.deinitialize();\n\n        this._amazonPayButton = undefined;\n    }\n\n    private _bindEditButton(\n        buttonId: string,\n        sessionId: string,\n        changeAction: AmazonPayV2ChangeActionType,\n        isModalFlow: boolean,\n    ): void {\n        const button = document.getElementById(buttonId);\n\n        if (!button || !button.parentNode) {\n            return;\n        }\n\n        if (!isModalFlow) {\n            const clone = button.cloneNode(true);\n\n            button.parentNode.replaceChild(clone, button);\n\n            clone.addEventListener('click', () => {\n                void this._showLoadingSpinner();\n            });\n        }\n\n        this.amazonPayV2PaymentProcessor.bindButton(buttonId, sessionId, changeAction);\n    }\n\n    private _isModalFlow(region: string) {\n        return region === 'us';\n    }\n\n    private async _showLoadingSpinner(): Promise<void> {\n        await this.paymentIntegrationService.widgetInteraction(() => new Promise(noop));\n    }\n\n    private _createContainer(): HTMLElement {\n        let container = document.getElementById('AmazonPayButton');\n\n        if (container) {\n            return container;\n        }\n\n        container = document.createElement('div');\n        container.id = 'AmazonPayButton';\n        container.style.display = 'none';\n\n        return document.body.appendChild(container);\n    }\n\n    private _getAmazonPayButton() {\n        return guard(\n            this._amazonPayButton,\n            () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n        );\n    }\n\n    private _isOneTimeTransaction(\n        features: CheckoutSettings['features'],\n        storeCountryCode: StoreProfile['storeCountryCode'],\n    ): boolean {\n        return (\n            this.amazonPayV2PaymentProcessor.isPh4Enabled(features, storeCountryCode) &&\n            features['INT-6399.amazon_pay_apb']\n        );\n    }\n\n    private _isReadyToPay(paymentToken?: string): boolean {\n        return !!paymentToken;\n    }\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/amazon-pay-v2-request-sender.spec.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport AmazonPayV2RequestSender from './amazon-pay-v2-request-sender';\n\ndescribe('AmazonPayV2RequestSender', () => {\n    let requestSenderMock: RequestSender;\n    let amazonPayV2RequestSender: AmazonPayV2RequestSender;\n\n    beforeEach(() => {\n        requestSenderMock = {\n            post: jest.fn(),\n        } as unknown as RequestSender;\n\n        amazonPayV2RequestSender = new AmazonPayV2RequestSender(requestSenderMock);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('createCheckoutConfig', async () => {\n        await amazonPayV2RequestSender.createCheckoutConfig('cartId');\n\n        expect(requestSenderMock.post).toHaveBeenCalledWith('/api/storefront/payment/amazonpay', {\n            body: { cartId: 'cartId' },\n            headers: {\n                'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                'Content-Type': ContentType.Json,\n                ...SDK_VERSION_HEADERS,\n            },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/amazon-pay-v2-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport interface CheckoutConfig {\n    payload: string;\n    signature: string;\n    public_key: string;\n}\n\nexport default class AmazonPayV2RequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    createCheckoutConfig(cartId: string): Promise<Response<CheckoutConfig>> {\n        const body = { cartId };\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender.post('/api/storefront/payment/amazonpay', { headers, body });\n    }\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/create-amazon-pay-v2-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport AmazonPayV2ButtonStrategy from './amazon-pay-v2-button-strategy';\nimport createAmazonPayV2ButtonStrategy from './create-amazon-pay-v2-button-strategy';\n\ndescribe('createAmazonPayV2PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates AmazonPayV2 payment strategy', () => {\n        const strategy = createAmazonPayV2ButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(AmazonPayV2ButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/create-amazon-pay-v2-button-strategy.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { createAmazonPayV2PaymentProcessor } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport AmazonPayV2ButtonStrategy from './amazon-pay-v2-button-strategy';\nimport AmazonPayV2RequestSender from './amazon-pay-v2-request-sender';\n\nconst createAmazonPayV2ButtonStrategy: CheckoutButtonStrategyFactory<AmazonPayV2ButtonStrategy> = (\n    paymentIntegrationService,\n) => {\n    const requestSender = createRequestSender();\n    const amazonPayV2RequestSender = new AmazonPayV2RequestSender(requestSender);\n    const amazonPayV2PaymentProcessor = createAmazonPayV2PaymentProcessor();\n\n    return new AmazonPayV2ButtonStrategy(\n        paymentIntegrationService,\n        amazonPayV2PaymentProcessor,\n        amazonPayV2RequestSender,\n    );\n};\n\nexport default toResolvableModule(createAmazonPayV2ButtonStrategy, [{ id: 'amazonpay' }]);\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/create-amazon-pay-v2-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport AmazonPayV2CustomerStrategy from './amazon-pay-v2-customer-strategy';\nimport createAmazonPayV2CustomerStrategy from './create-amazon-pay-v2-customer-strategy';\n\ndescribe('createAmazonPayV2PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates AmazonPayV2 payment strategy', () => {\n        const strategy = createAmazonPayV2CustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(AmazonPayV2CustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/create-amazon-pay-v2-customer-strategy.ts",
    "content": "import { createAmazonPayV2PaymentProcessor } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport AmazonPayV2CustomerStrategy from './amazon-pay-v2-customer-strategy';\n\nconst createAmazonPayV2CustomerStrategy: CustomerStrategyFactory<AmazonPayV2CustomerStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new AmazonPayV2CustomerStrategy(\n        paymentIntegrationService,\n        createAmazonPayV2PaymentProcessor(),\n    );\n};\n\nexport default toResolvableModule(createAmazonPayV2CustomerStrategy, [{ id: 'amazonpay' }]);\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/create-amazon-pay-v2-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport AmazonPayV2PaymentStrategy from './amazon-pay-v2-payment-strategy';\nimport createAmazonPayV2PaymentStrategy from './create-amazon-pay-v2-payment-strategy';\n\ndescribe('createAmazonPayV2PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates AmazonPayV2 payment strategy', () => {\n        const strategy = createAmazonPayV2PaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(AmazonPayV2PaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/create-amazon-pay-v2-payment-strategy.ts",
    "content": "import { createAmazonPayV2PaymentProcessor } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport AmazonPayV2PaymentStrategy from './amazon-pay-v2-payment-strategy';\n\nconst createAmazonPayV2PaymentStrategy: PaymentStrategyFactory<AmazonPayV2PaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new AmazonPayV2PaymentStrategy(\n        paymentIntegrationService,\n        createAmazonPayV2PaymentProcessor(),\n    );\n};\n\nexport default toResolvableModule(createAmazonPayV2PaymentStrategy, [{ id: 'amazonpay' }]);\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/errors/amazon-pay-v2-config-creation-error.spec.ts",
    "content": "import { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport AmazonPayV2ConfigCreationError from './amazon-pay-v2-config-creation-error';\n\ndescribe('AmazonPayV2ConfigCreationError', () => {\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('should throw default error message', () => {\n        const error = new AmazonPayV2ConfigCreationError();\n\n        expect(error).toBeInstanceOf(StandardError);\n        expect(error.message).toBe(\n            'An unexpected error has occurred during config creation process. Please try again later.',\n        );\n        expect(error.name).toBe('AmazonPayV2ConfigCreationError');\n        expect(error.type).toBe('amazon_pay_v2_config_creation_error');\n    });\n\n    it('should throw custom error message', () => {\n        const error = new AmazonPayV2ConfigCreationError('Custom error message');\n\n        expect(error.message).toBe('Custom error message');\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/errors/amazon-pay-v2-config-creation-error.ts",
    "content": "import { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class AmazonPayV2ConfigCreationError extends StandardError {\n    constructor(message?: string) {\n        super(\n            message ||\n                'An unexpected error has occurred during config creation process. Please try again later.',\n        );\n\n        this.name = 'AmazonPayV2ConfigCreationError';\n        this.type = 'amazon_pay_v2_config_creation_error';\n    }\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/index.ts",
    "content": "export { WithAmazonPayV2ButtonInitializeOptions } from './amazon-pay-v2-button-options';\nexport { default as createAmazonPayV2ButtonStrategy } from './create-amazon-pay-v2-button-strategy';\n\nexport { WithAmazonPayV2CustomerInitializeOptions } from './amazon-pay-v2-customer-initialize-options';\nexport { default as createAmazonPayV2CustomerStrategy } from './create-amazon-pay-v2-customer-strategy';\n\nexport { WithAmazonPayV2PaymentInitializeOptions } from './amazon-pay-v2-payment-initialize-options';\nexport { default as createAmazonPayV2PaymentStrategy } from './create-amazon-pay-v2-payment-strategy';\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/isWithBuyNowFeatures.spec.ts",
    "content": "import { isWithBuyNowFeatures } from './isWithBuyNowFeatures';\n\ndescribe('isWithBuyNowFeatures', () => {\n    it('should return true if options is WithBuyNowFeature', () => {\n        const options = {\n            buyNowInitializeOptions: {\n                currencyCode: 'USD',\n            },\n        };\n\n        expect(isWithBuyNowFeatures(options)).toBe(true);\n    });\n\n    it('should return false if options is not WithBuyNowFeature', () => {\n        const options = {};\n\n        expect(isWithBuyNowFeatures(options)).toBe(false);\n    });\n\n    it('should return false if options is not an object', () => {\n        const options = 'string';\n\n        expect(isWithBuyNowFeatures(options)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/isWithBuyNowFeatures.ts",
    "content": "import { WithBuyNowFeature } from './amazon-pay-v2-button-options';\n\nexport function isWithBuyNowFeatures(options: unknown): options is WithBuyNowFeature {\n    if (!(options instanceof Object)) {\n        return false;\n    }\n\n    return 'buyNowInitializeOptions' in options;\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/mock/amazon-pay-v2-button.mock.ts",
    "content": "import {\n    AmazonPayV2LedgerCurrency,\n    AmazonPayV2Placement,\n    getAmazonPayV2ButtonParamsMock,\n} from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport {\n    BuyNowCartRequestBody,\n    CartSource,\n    CheckoutButtonInitializeOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport enum Mode {\n    Full,\n    BuyNowFlow,\n    UndefinedContainer,\n    InvalidContainer,\n    UndefinedMethodId,\n    UndefinedAmazonPay,\n}\n\nconst buyNowCartRequestBody: BuyNowCartRequestBody = {\n    source: CartSource.BuyNow,\n    lineItems: [\n        {\n            productId: 1,\n            quantity: 2,\n            optionSelections: {\n                optionId: 11,\n                optionValue: 11,\n            },\n        },\n    ],\n};\n\nexport function getAmazonPayV2CheckoutButtonOptions(\n    mode: Mode = Mode.Full,\n): CheckoutButtonInitializeOptions {\n    const methodId = { methodId: 'amazonpay' };\n    const containerId = 'amazonpayCheckoutButton';\n    const undefinedContainerId = { containerId: '' };\n    const invalidContainerId = { containerId: 'invalid_container' };\n    const amazonPayV2Options = { containerId, amazonpay: getAmazonPayV2ButtonParamsMock() };\n\n    const amazonPayV2BuyNowOptions = {\n        buyNowInitializeOptions: {\n            getBuyNowCartRequestBody: jest.fn().mockReturnValue(buyNowCartRequestBody),\n        },\n    };\n\n    switch (mode) {\n        case Mode.UndefinedContainer:\n            return { ...methodId, ...undefinedContainerId };\n\n        case Mode.InvalidContainer:\n            return { ...methodId, ...invalidContainerId };\n\n        case Mode.Full:\n            return { ...methodId, ...amazonPayV2Options };\n\n        case Mode.UndefinedMethodId:\n            // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n            return { ...amazonPayV2Options } as unknown as CheckoutButtonInitializeOptions;\n\n        case Mode.UndefinedAmazonPay:\n            return { ...getAmazonPayV2CheckoutButtonOptions(Mode.Full), amazonpay: undefined };\n\n        case Mode.BuyNowFlow:\n            return {\n                ...methodId,\n                containerId,\n                amazonpay: {\n                    ...amazonPayV2BuyNowOptions,\n                    merchantId: '',\n                    placement: AmazonPayV2Placement.Checkout,\n                    ledgerCurrency: AmazonPayV2LedgerCurrency.USD,\n                },\n            };\n\n        default:\n            return { ...methodId, containerId };\n    }\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/mock/amazon-pay-v2-config-request-sender.mock.ts",
    "content": "import { CheckoutConfig } from '../amazon-pay-v2-request-sender';\n\nexport function getAmazonPayV2RequestSenderMock() {\n    return {\n        createCheckoutConfig: jest.fn(() => Promise.resolve({ body: getCheckoutRequestConfig() })),\n    };\n}\n\nexport function getCheckoutRequestConfig(): CheckoutConfig {\n    return {\n        payload: 'payload',\n        signature: 'signature',\n        public_key: 'public_key',\n    };\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/src/mock/amazon-pay-v2-customer.mock.ts",
    "content": "import { CustomerInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport enum Mode {\n    Full,\n    UndefinedMethodId,\n    InvalidContainer,\n    Incomplete,\n}\n\nexport function getAmazonPayV2CustomerInitializeOptions(\n    mode: Mode = Mode.Full,\n): CustomerInitializeOptions {\n    const optionsWithMethodId = { methodId: 'amazonpay' };\n    const optionsWithUndefinedMethodId = { methodId: undefined };\n    const optionsWithContainer = { container: 'amazonpayCheckoutButton' };\n    const optionsWithInvalidContainer = { container: 'invalid_container' };\n    const amazonPayV2 = { amazonpay: optionsWithContainer };\n    const amazonPayV2WithInvalidContainer = { amazonpay: optionsWithInvalidContainer };\n\n    switch (mode) {\n        case Mode.Incomplete:\n            return { ...optionsWithMethodId };\n\n        case Mode.UndefinedMethodId:\n            return { ...optionsWithUndefinedMethodId, ...amazonPayV2 };\n\n        case Mode.InvalidContainer:\n            return { ...optionsWithMethodId, ...amazonPayV2WithInvalidContainer };\n\n        default:\n            return { ...optionsWithMethodId, ...amazonPayV2 };\n    }\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/amazon-pay-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/amazon-pay-utils/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {}\n        },\n        {\n            \"files\": [\"*.spec.ts\", \"*.spec.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/amazon-pay-utils/README.md",
    "content": "# amazon-pay-utils\n\nPackage with shared utils for AmazonPay integration [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test amazon-pay-utils` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint amazon-pay-utils` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/amazon-pay-utils/jest.config.js",
    "content": "module.exports = {\n    displayName: 'amazon-pay-utils',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/amazon-pay-utils',\n    coveragePathIgnorePatterns: ['<rootDir>/src/index.ts'],\n};\n"
  },
  {
    "path": "packages/amazon-pay-utils/project.json",
    "content": "{\n    \"name\": \"amazon-pay-utils\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/amazon-pay-utils/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/amazon-pay-utils/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/amazon-pay-utils\"],\n            \"options\": {\n                \"jestConfig\": \"packages/amazon-pay-utils/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/amazon-pay-v2-payment-processor.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    PaymentIntegrationSelectors,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    getCheckout,\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    AmazonPayV2Button,\n    AmazonPayV2ButtonParameters,\n    AmazonPayV2ButtonParams,\n    AmazonPayV2CheckoutSessionConfig,\n    AmazonPayV2InitializeOptions,\n    AmazonPayV2NewButtonParams,\n    AmazonPayV2PayOptions,\n    AmazonPayV2Placement,\n    AmazonPayV2Price,\n    AmazonPayV2SDK,\n    InternalCheckoutSelectors,\n} from './amazon-pay-v2';\nimport AmazonPayV2PaymentProcessor from './amazon-pay-v2-payment-processor';\nimport AmazonPayV2ScriptLoader from './amazon-pay-v2-script-loader';\nimport {\n    getAmazonPayBaseButtonParamsMock,\n    getAmazonPayV2,\n    getAmazonPayV2ButtonParamsMock,\n    getAmazonPayV2Ph4ButtonParamsMock,\n    getAmazonPayV2SDKMock,\n    getPaymentMethodMockUndefinedLedgerCurrency,\n    getPaymentMethodMockUndefinedMerchant,\n} from './mocks/amazon-pay-v2.mock';\n\ndescribe('AmazonPayV2PaymentProcessor', () => {\n    let amazonPayV2ScriptLoader: AmazonPayV2ScriptLoader;\n    let processor: AmazonPayV2PaymentProcessor;\n    let amazonPayV2SDKMock: AmazonPayV2SDK;\n    let amazonPayV2Mock: PaymentMethod<AmazonPayV2InitializeOptions>;\n\n    beforeEach(() => {\n        amazonPayV2ScriptLoader = new AmazonPayV2ScriptLoader(createScriptLoader());\n\n        processor = new AmazonPayV2PaymentProcessor(amazonPayV2ScriptLoader);\n\n        amazonPayV2SDKMock = getAmazonPayV2SDKMock();\n\n        jest.spyOn(amazonPayV2ScriptLoader, 'load').mockResolvedValue(amazonPayV2SDKMock);\n\n        jest.spyOn(document, 'createElement');\n\n        amazonPayV2Mock = getAmazonPayV2();\n    });\n\n    afterEach(() => {\n        jest.spyOn(document, 'createElement').mockRestore();\n    });\n\n    it('creates an instance of AmazonPayV2PaymentProcessor', () => {\n        expect(processor).toBeInstanceOf(AmazonPayV2PaymentProcessor);\n    });\n\n    describe('#initialize', () => {\n        it('initializes processor successfully', async () => {\n            await processor.initialize(amazonPayV2Mock);\n\n            expect(amazonPayV2ScriptLoader.load).toHaveBeenCalledWith(amazonPayV2Mock);\n            expect(document.createElement).toHaveBeenCalledTimes(1);\n        });\n\n        it('should reuse already created container', async () => {\n            await processor.initialize(amazonPayV2Mock);\n            await processor.initialize(amazonPayV2Mock);\n\n            expect(document.createElement).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#deinitialize', () => {\n        it('deinitializes processor successfully', async () => {\n            await processor.initialize(amazonPayV2Mock);\n\n            const deinitialize = processor.deinitialize();\n\n            await expect(deinitialize).resolves.toBeUndefined();\n        });\n\n        it('should remove the button parent container from the DOM', async () => {\n            const grandparentContainer = document.createElement('div');\n            const parentContainer = grandparentContainer.appendChild(document.createElement('div'));\n\n            jest.spyOn(document, 'createElement').mockReturnValueOnce(parentContainer);\n\n            await processor.initialize(amazonPayV2Mock);\n            await processor.deinitialize();\n\n            expect(grandparentContainer.contains(parentContainer)).toBe(false);\n        });\n    });\n\n    describe('#bindButton', () => {\n        const sessionId = 'ACB123';\n        const buttonName = 'bindableButton';\n\n        it('bind the button successfully', async () => {\n            const bindOptions = {\n                amazonCheckoutSessionId: sessionId,\n                changeAction: 'changePayment',\n            };\n\n            await processor.initialize(amazonPayV2Mock);\n            processor.bindButton(buttonName, sessionId, 'changePayment');\n\n            expect(amazonPayV2SDKMock.Pay.bindChangeAction).toHaveBeenCalledWith(\n                `#${buttonName}`,\n                bindOptions,\n            );\n        });\n\n        it('throws an error when amazonPayV2SDK is not initialized', () => {\n            const bindButton = () => processor.bindButton(buttonName, sessionId, 'changePayment');\n\n            expect(bindButton).toThrow(NotInitializedError);\n        });\n    });\n\n    describe('#signOut', () => {\n        it('signs out succesfully', async () => {\n            await processor.initialize(amazonPayV2Mock);\n\n            await processor.signout();\n\n            expect(amazonPayV2SDKMock.Pay.signout).toHaveBeenCalled();\n        });\n    });\n\n    describe('#createButton', () => {\n        const containerId = 'amazonpay-container';\n        let amazonPayV2ButtonParams: AmazonPayV2ButtonParameters;\n\n        beforeEach(() => {\n            amazonPayV2ButtonParams = getAmazonPayV2ButtonParamsMock();\n        });\n\n        it('should render the Amazon Pay button to an HTML container element', async () => {\n            await processor.initialize(amazonPayV2Mock);\n\n            processor.createButton(containerId, amazonPayV2ButtonParams);\n\n            expect(amazonPayV2SDKMock.Pay.renderButton).toHaveBeenCalledWith(\n                `#${containerId}`,\n                amazonPayV2ButtonParams,\n            );\n        });\n\n        it('should render the Amazon Pay button to an HTML container element without microtext', async () => {\n            await processor.initialize(amazonPayV2Mock);\n            amazonPayV2ButtonParams = getAmazonPayV2ButtonParamsMock(true);\n\n            processor.createButton(containerId, amazonPayV2ButtonParams);\n\n            expect(amazonPayV2SDKMock.Pay.renderButton).toHaveBeenCalledWith(\n                `#${containerId}`,\n                amazonPayV2ButtonParams,\n            );\n        });\n\n        it('throws an error when amazonPayV2SDK is not initialized', () => {\n            const createButton = () => processor.createButton(containerId, amazonPayV2ButtonParams);\n\n            expect(createButton).toThrow(NotInitializedError);\n        });\n    });\n\n    describe('#prepareCheckout', () => {\n        const containerId = 'amazonpay-container';\n        let amazonPayV2ButtonParams: Required<AmazonPayV2NewButtonParams>;\n        let createCheckoutSessionConfig: Required<AmazonPayV2CheckoutSessionConfig>;\n\n        beforeEach(() => {\n            amazonPayV2ButtonParams =\n                getAmazonPayV2Ph4ButtonParamsMock() as Required<AmazonPayV2NewButtonParams>;\n\n            const { publicKeyId, createCheckoutSessionConfig: signedPayload } =\n                amazonPayV2ButtonParams;\n\n            createCheckoutSessionConfig = {\n                publicKeyId,\n                ...signedPayload,\n            };\n        });\n\n        describe('should initiate checkout successfully:', () => {\n            beforeEach(async () => {\n                await processor.initialize(amazonPayV2Mock);\n                processor.createButton(containerId, amazonPayV2ButtonParams);\n            });\n\n            test('onClick is called to define custom actions', () => {\n                processor.prepareCheckout(createCheckoutSessionConfig);\n\n                const amazonPayV2Button: AmazonPayV2Button = (\n                    amazonPayV2SDKMock.Pay.renderButton as jest.Mock\n                ).mock.results[0].value;\n\n                expect(amazonPayV2Button.onClick).toHaveBeenCalledTimes(1);\n            });\n\n            test('config does not include publicKeyId because it has an environment prefix', () => {\n                const expectedConfig = {\n                    createCheckoutSessionConfig:\n                        amazonPayV2ButtonParams.createCheckoutSessionConfig,\n                };\n\n                processor.prepareCheckout(createCheckoutSessionConfig);\n\n                const amazonPayV2Button: AmazonPayV2Button = (\n                    amazonPayV2SDKMock.Pay.renderButton as jest.Mock\n                ).mock.results[0].value;\n                // eslint-disable-next-line  @typescript-eslint/no-unsafe-member-access\n                const customActions = (amazonPayV2Button.onClick as jest.Mock).mock.calls[0][0];\n\n                customActions();\n\n                expect(amazonPayV2Button.initCheckout).toHaveBeenNthCalledWith(1, expectedConfig);\n            });\n\n            test('config includes publicKeyId because it does not have an environment prefix', () => {\n                const expectedConfig = {\n                    createCheckoutSessionConfig,\n                };\n\n                createCheckoutSessionConfig.publicKeyId = 'foo';\n                processor.prepareCheckout(createCheckoutSessionConfig);\n\n                const amazonPayV2Button: AmazonPayV2Button = (\n                    amazonPayV2SDKMock.Pay.renderButton as jest.Mock\n                ).mock.results[0].value;\n                // eslint-disable-next-line  @typescript-eslint/no-unsafe-member-access\n                const customActions = (amazonPayV2Button.onClick as jest.Mock).mock.calls[0][0];\n\n                customActions();\n\n                expect(amazonPayV2Button.initCheckout).toHaveBeenNthCalledWith(1, expectedConfig);\n            });\n        });\n\n        it('throws an error when amazonPayV2Button is not initialized', () => {\n            const prepareCheckout = () => processor.prepareCheckout(createCheckoutSessionConfig);\n\n            expect(prepareCheckout).toThrow(NotInitializedError);\n        });\n    });\n\n    describe('#prepareCheckoutWithCreationRequestConfig', () => {\n        const containerId = 'amazonpay-container';\n        let amazonPayV2ButtonParams: Required<AmazonPayV2NewButtonParams>;\n        let createCheckoutSessionConfig: Required<AmazonPayV2CheckoutSessionConfig>;\n        let estimatedOrderAmount: AmazonPayV2Price;\n        let productType: AmazonPayV2PayOptions;\n\n        beforeEach(() => {\n            amazonPayV2ButtonParams =\n                getAmazonPayV2Ph4ButtonParamsMock() as Required<AmazonPayV2NewButtonParams>;\n\n            const { publicKeyId, createCheckoutSessionConfig: signedPayload } =\n                amazonPayV2ButtonParams;\n\n            createCheckoutSessionConfig = {\n                publicKeyId,\n                ...signedPayload,\n            };\n\n            estimatedOrderAmount = amazonPayV2ButtonParams.estimatedOrderAmount;\n            productType = amazonPayV2ButtonParams.productType;\n        });\n\n        describe('should initiate checkout successfully:', () => {\n            beforeEach(async () => {\n                await processor.initialize(amazonPayV2Mock);\n                processor.createButton(containerId, amazonPayV2ButtonParams);\n            });\n\n            test('onClick is called to define custom actions', () => {\n                processor.prepareCheckoutWithCreationRequestConfig(() =>\n                    Promise.resolve({\n                        createCheckoutSessionConfig,\n                        estimatedOrderAmount,\n                        productType,\n                    }),\n                );\n\n                const amazonPayV2Button: AmazonPayV2Button = (\n                    amazonPayV2SDKMock.Pay.renderButton as jest.Mock\n                ).mock.results[0].value;\n\n                expect(amazonPayV2Button.onClick).toHaveBeenCalledTimes(1);\n            });\n\n            test('config does not include publicKeyId because it has an environment prefix', async () => {\n                const expectedConfig = {\n                    createCheckoutSessionConfig:\n                        amazonPayV2ButtonParams.createCheckoutSessionConfig,\n                    estimatedOrderAmount,\n                    productType,\n                };\n\n                processor.prepareCheckoutWithCreationRequestConfig(() => {\n                    return Promise.resolve({\n                        createCheckoutSessionConfig,\n                        estimatedOrderAmount,\n                        productType,\n                    });\n                });\n\n                const amazonPayV2Button: AmazonPayV2Button = (\n                    amazonPayV2SDKMock.Pay.renderButton as jest.Mock\n                ).mock.results[0].value;\n                // eslint-disable-next-line  @typescript-eslint/no-unsafe-member-access\n                const customActions = (amazonPayV2Button.onClick as jest.Mock).mock.calls[0][0];\n\n                await customActions();\n\n                expect(amazonPayV2Button.initCheckout).toHaveBeenNthCalledWith(1, expectedConfig);\n            });\n\n            test('config includes publicKeyId because it does not have an environment prefix', async () => {\n                const expectedConfig = {\n                    createCheckoutSessionConfig,\n                    estimatedOrderAmount,\n                    productType,\n                };\n\n                createCheckoutSessionConfig.publicKeyId = 'foo';\n                processor.prepareCheckoutWithCreationRequestConfig(() =>\n                    Promise.resolve(expectedConfig),\n                );\n\n                const amazonPayV2Button: AmazonPayV2Button = (\n                    amazonPayV2SDKMock.Pay.renderButton as jest.Mock\n                ).mock.results[0].value;\n                // eslint-disable-next-line  @typescript-eslint/no-unsafe-member-access\n                const customActions = (amazonPayV2Button.onClick as jest.Mock).mock.calls[0][0];\n\n                await customActions();\n\n                expect(amazonPayV2Button.initCheckout).toHaveBeenNthCalledWith(1, expectedConfig);\n            });\n        });\n    });\n\n    describe('#renderAmazonPayButton', () => {\n        const CONTAINER_ID = 'container_passed_by_the_client';\n        let checkoutState: InternalCheckoutSelectors;\n\n        const getCheckoutStateMock = () => {\n            return {\n                cart: { getCart: jest.fn(() => getCart()) },\n                checkout: { getCheckout: jest.fn(() => getCheckout()) },\n                config: { getStoreConfigOrThrow: jest.fn(() => getConfig().storeConfig) },\n                paymentMethods: { getPaymentMethodOrThrow: jest.fn(() => getAmazonPayV2()) },\n            } as InternalCheckoutSelectors;\n        };\n\n        const stateMock = new PaymentIntegrationServiceMock().getState();\n        const getPaymentIntegrationSelectorsMock = () =>\n            ({\n                ...stateMock,\n                getCart: jest.fn(() => getCart()),\n                getCheckout: jest.fn(() => getCheckout()),\n                getStoreConfigOrThrow: jest.fn(() => getConfig().storeConfig),\n                getPaymentMethodOrThrow: jest.fn(() => getAmazonPayV2()),\n            } as PaymentIntegrationSelectors);\n\n        const renderAmazonPayButton = (\n            containerId = CONTAINER_ID,\n            decoupleCheckoutInitiation = false,\n            checkoutStateMock?: InternalCheckoutSelectors | PaymentIntegrationSelectors,\n        ) =>\n            processor.renderAmazonPayButton({\n                checkoutState: checkoutStateMock || checkoutState,\n                containerId,\n                decoupleCheckoutInitiation,\n                methodId: 'amazonpay',\n                placement: AmazonPayV2Placement.Checkout,\n            });\n        const expectedContainerId = expect.stringMatching(\n            /^#amazonpay_button_parent_container_[0-9a-f]{4}$/,\n        );\n\n        beforeAll(() => {\n            const container = document.createElement('div');\n\n            container.id = CONTAINER_ID;\n            document.body.appendChild(container);\n        });\n\n        beforeEach(() => {\n            checkoutState = getCheckoutStateMock();\n        });\n\n        it('should return the buttonParentContainer', async () => {\n            const parentContainer = document.createElement('div');\n\n            jest.spyOn(document, 'createElement').mockReturnValueOnce(parentContainer);\n\n            await processor.initialize(amazonPayV2Mock);\n\n            const amazonPayButton = renderAmazonPayButton(CONTAINER_ID, false);\n\n            expect(amazonPayButton).toBe(parentContainer);\n        });\n\n        it('should return the buttonParentContainer with Payment integration service', async () => {\n            const parentContainer = document.createElement('div');\n            const checkoutStateMock = getPaymentIntegrationSelectorsMock();\n\n            jest.spyOn(document, 'createElement').mockReturnValueOnce(parentContainer);\n\n            await processor.initialize(amazonPayV2Mock);\n\n            const amazonPayButton = renderAmazonPayButton(CONTAINER_ID, false, checkoutStateMock);\n\n            expect(amazonPayButton).toBe(parentContainer);\n        });\n\n        it('should render an Amazon Pay button and validate if cart contains physical items', async () => {\n            const expectedOptions = getAmazonPayV2ButtonParamsMock() as AmazonPayV2ButtonParams;\n\n            expectedOptions.createCheckoutSession.url = `${\n                getConfig().storeConfig.storeProfile.shopPath\n            }/remote-checkout/amazonpay/payment-session`;\n            expectedOptions.productType = AmazonPayV2PayOptions.PayOnly;\n\n            const cartMock = getCart();\n\n            cartMock.lineItems.physicalItems = [];\n\n            jest.spyOn(checkoutState.cart, 'getCart').mockReturnValueOnce(cartMock);\n\n            await processor.initialize(amazonPayV2Mock);\n            renderAmazonPayButton();\n\n            expect(amazonPayV2SDKMock.Pay.renderButton).toHaveBeenCalledWith(\n                expectedContainerId,\n                expectedOptions,\n            );\n        });\n\n        describe('should use the new button params from API Version 2:', () => {\n            beforeEach(() => {\n                const storeConfigMock = getConfig().storeConfig;\n\n                storeConfigMock.checkoutSettings.features = {\n                    'PROJECT-3483.amazon_pay_ph4': true,\n                };\n\n                jest.spyOn(checkoutState.config, 'getStoreConfigOrThrow').mockReturnValueOnce(\n                    storeConfigMock,\n                );\n            });\n\n            test('should return the correct basic amazon config for Buy Now flow', async () => {\n                const expectedOptions =\n                    getAmazonPayBaseButtonParamsMock() as AmazonPayV2ButtonParams;\n\n                const storeConfigMock = getConfig().storeConfig;\n\n                jest.spyOn(checkoutState.config, 'getStoreConfigOrThrow').mockReturnValueOnce(\n                    storeConfigMock,\n                );\n\n                await processor.initialize(amazonPayV2Mock);\n                processor.updateBuyNowFlowFlag(true);\n                renderAmazonPayButton();\n\n                expect(amazonPayV2SDKMock.Pay.renderButton).toHaveBeenCalledWith(\n                    expectedContainerId,\n                    expectedOptions,\n                );\n            });\n\n            test('publicKeyId has an environment prefix', async () => {\n                const expectedOptions = getAmazonPayV2Ph4ButtonParamsMock();\n\n                await processor.initialize(amazonPayV2Mock);\n                renderAmazonPayButton();\n\n                expect(amazonPayV2SDKMock.Pay.renderButton).toHaveBeenCalledWith(\n                    expectedContainerId,\n                    expectedOptions,\n                );\n            });\n\n            test('publicKeyId does not have an environment prefix', async () => {\n                const expectedOptions =\n                    getAmazonPayV2Ph4ButtonParamsMock() as AmazonPayV2NewButtonParams;\n                const createCheckoutSessionConfig =\n                    expectedOptions.createCheckoutSessionConfig as Required<AmazonPayV2NewButtonParams>['createCheckoutSessionConfig'];\n\n                delete expectedOptions.publicKeyId;\n                expectedOptions.sandbox = true;\n                expectedOptions.createCheckoutSessionConfig = {\n                    ...createCheckoutSessionConfig,\n                    publicKeyId: 'foo',\n                };\n\n                amazonPayV2Mock = getAmazonPayV2();\n\n                amazonPayV2Mock.initializationData = {\n                    ...amazonPayV2Mock.initializationData,\n                    publicKeyId: 'foo',\n                };\n\n                jest.spyOn(\n                    checkoutState.paymentMethods,\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValueOnce(amazonPayV2Mock);\n\n                await processor.initialize(amazonPayV2Mock);\n                renderAmazonPayButton();\n\n                expect(amazonPayV2SDKMock.Pay.renderButton).toHaveBeenCalledWith(\n                    expectedContainerId,\n                    expectedOptions,\n                );\n            });\n\n            test('estimatedOrderAmount is not set if there is no total', async () => {\n                const expectedOptions =\n                    getAmazonPayV2Ph4ButtonParamsMock() as AmazonPayV2NewButtonParams;\n\n                delete expectedOptions.estimatedOrderAmount;\n\n                jest.spyOn(checkoutState.checkout, 'getCheckout').mockReturnValueOnce(undefined);\n\n                await processor.initialize(amazonPayV2Mock);\n                renderAmazonPayButton();\n\n                expect(amazonPayV2SDKMock.Pay.renderButton).toHaveBeenCalledWith(\n                    expectedContainerId,\n                    expectedOptions,\n                );\n            });\n\n            test('estimatedOrderAmount is not set if there is no currency code', async () => {\n                const expectedOptions =\n                    getAmazonPayV2Ph4ButtonParamsMock() as AmazonPayV2NewButtonParams;\n\n                delete expectedOptions.estimatedOrderAmount;\n\n                jest.spyOn(checkoutState.cart, 'getCart').mockReturnValueOnce(undefined);\n\n                await processor.initialize(amazonPayV2Mock);\n                renderAmazonPayButton();\n\n                expect(amazonPayV2SDKMock.Pay.renderButton).toHaveBeenCalledWith(\n                    expectedContainerId,\n                    expectedOptions,\n                );\n            });\n\n            test('createCheckoutSessionConfig is not set if decoupleCheckoutInitiation is true', async () => {\n                const expectedOptions =\n                    getAmazonPayV2Ph4ButtonParamsMock() as AmazonPayV2NewButtonParams;\n\n                delete expectedOptions.createCheckoutSessionConfig;\n\n                await processor.initialize(amazonPayV2Mock);\n                renderAmazonPayButton(CONTAINER_ID, true);\n\n                expect(amazonPayV2SDKMock.Pay.renderButton).toHaveBeenCalledWith(\n                    expectedContainerId,\n                    expectedOptions,\n                );\n            });\n        });\n\n        describe('should fail...', () => {\n            test('if an invalid containerId is provided', async () => {\n                const renderResult = renderAmazonPayButton('bar');\n\n                await processor.initialize(amazonPayV2Mock);\n\n                expect(renderResult).toBeUndefined();\n\n                expect(amazonPayV2SDKMock.Pay.renderButton).not.toHaveBeenCalled();\n            });\n\n            test('if buttonParentContainer is not initialized', () => {\n                expect(renderAmazonPayButton).toThrow(NotInitializedError);\n            });\n\n            test('if there is no payment methods data', async () => {\n                jest.spyOn(\n                    checkoutState.paymentMethods,\n                    'getPaymentMethodOrThrow',\n                ).mockImplementation(() => {\n                    throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n                });\n\n                await processor.initialize(amazonPayV2Mock);\n\n                expect(renderAmazonPayButton).toThrow(MissingDataError);\n                expect(amazonPayV2SDKMock.Pay.renderButton).not.toHaveBeenCalled();\n            });\n\n            test('if there is no store config data', async () => {\n                jest.spyOn(checkoutState.config, 'getStoreConfigOrThrow').mockImplementation(() => {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n                });\n\n                await processor.initialize(amazonPayV2Mock);\n\n                expect(renderAmazonPayButton).toThrow(MissingDataError);\n                expect(amazonPayV2SDKMock.Pay.renderButton).not.toHaveBeenCalled();\n            });\n\n            test('if merchantId is undefined', async () => {\n                jest.spyOn(checkoutState.paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n                    getPaymentMethodMockUndefinedMerchant(),\n                );\n\n                await processor.initialize(amazonPayV2Mock);\n\n                expect(renderAmazonPayButton).toThrow(MissingDataError);\n                expect(amazonPayV2SDKMock.Pay.renderButton).not.toHaveBeenCalled();\n            });\n\n            test('if ledgerCurrency is undefined', async () => {\n                jest.spyOn(checkoutState.paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n                    getPaymentMethodMockUndefinedLedgerCurrency(),\n                );\n\n                await processor.initialize(amazonPayV2Mock);\n\n                expect(renderAmazonPayButton).toThrow(MissingDataError);\n                expect(amazonPayV2SDKMock.Pay.renderButton).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('#isPh4Enabled', () => {\n        describe('should return TRUE if...', () => {\n            test('3483.PH4 is ON, 6885.PH4_US_OLY is OFF, and country is US', () => {\n                const features = {\n                    'PROJECT-3483.amazon_pay_ph4': true,\n                };\n\n                const isPh4Enabled = processor.isPh4Enabled(features, 'US');\n\n                expect(isPh4Enabled).toBe(true);\n            });\n\n            test('3483.PH4 is ON, 6885.PH4_US_OLY is OFF, and country is not US', () => {\n                const features = {\n                    'PROJECT-3483.amazon_pay_ph4': true,\n                };\n\n                const isPh4Enabled = processor.isPh4Enabled(features, 'FOO');\n\n                expect(isPh4Enabled).toBe(true);\n            });\n\n            test('3483.PH4 is ON, 6885.PH4_US_OLY is ON, and country is US', () => {\n                const features = {\n                    'PROJECT-3483.amazon_pay_ph4': true,\n                    'INT-6885.amazon_pay_ph4_us_only': true,\n                };\n\n                const isPh4Enabled = processor.isPh4Enabled(features, 'US');\n\n                expect(isPh4Enabled).toBe(true);\n            });\n        });\n\n        describe('should return FALSE if...', () => {\n            test('3483.PH4 is OFF, 6885.PH4_US_OLY is OFF, and country is US', () => {\n                const features = {\n                    'PROJECT-3483.amazon_pay_ph4': false,\n                    'INT-6885.amazon_pay_ph4_us_only': false,\n                };\n\n                const isPh4Enabled = processor.isPh4Enabled(features, 'US');\n\n                expect(isPh4Enabled).toBe(false);\n            });\n\n            test('3483.PH4 is OFF, 6885.PH4_US_OLY is OFF, and country is not US', () => {\n                const features = {\n                    'PROJECT-3483.amazon_pay_ph4': false,\n                    'INT-6885.amazon_pay_ph4_us_only': false,\n                };\n\n                const isPh4Enabled = processor.isPh4Enabled(features, 'FOO');\n\n                expect(isPh4Enabled).toBe(false);\n            });\n\n            test('3483.PH4 is OFF, 6885.PH4_US_OLY is ON, and country is US', () => {\n                const features = {\n                    'PROJECT-3483.amazon_pay_ph4': false,\n                    'INT-6885.amazon_pay_ph4_us_only': true,\n                };\n\n                const isPh4Enabled = processor.isPh4Enabled(features, 'US');\n\n                expect(isPh4Enabled).toBe(false);\n            });\n\n            test('3483.PH4 is OFF, 6885.PH4_US_OLY is ON, and country is not US', () => {\n                const features = {\n                    'PROJECT-3483.amazon_pay_ph4': false,\n                    'INT-6885.amazon_pay_ph4_us_only': true,\n                };\n\n                const isPh4Enabled = processor.isPh4Enabled(features, 'FOO');\n\n                expect(isPh4Enabled).toBe(false);\n            });\n\n            test('3483.PH4 is ON, 6885.PH4_US_OLY is ON, and country is not US', () => {\n                const features = {\n                    'PROJECT-3483.amazon_pay_ph4': true,\n                    'INT-6885.amazon_pay_ph4_us_only': true,\n                };\n\n                const isPh4Enabled = processor.isPh4Enabled(features, 'FOO');\n\n                expect(isPh4Enabled).toBe(false);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/amazon-pay-v2-payment-processor.ts",
    "content": "import {\n    CheckoutSettings,\n    getShippableItemsCount,\n    guard,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    PaymentIntegrationSelectors,\n    PaymentMethod,\n    StoreProfile,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    AmazonPayV2Button,\n    AmazonPayV2ButtonColor,\n    AmazonPayV2ButtonConfig,\n    AmazonPayV2ButtonDesign,\n    AmazonPayV2ButtonParameters,\n    AmazonPayV2ButtonRenderingOptions,\n    AmazonPayV2ChangeActionType,\n    AmazonPayV2CheckoutSessionConfig,\n    AmazonPayV2InitializeOptions,\n    AmazonPayV2NewButtonParams,\n    AmazonPayV2PayOptions,\n    AmazonPayV2Placement,\n    AmazonPayV2Price,\n    AmazonPayV2SDK,\n    InternalCheckoutSelectors,\n    RequestConfig,\n} from './amazon-pay-v2';\nimport AmazonPayV2ScriptLoader from './amazon-pay-v2-script-loader';\nimport { isInternalCheckoutSelectors } from './isInternalCheckoutSelectors';\n\nexport default class AmazonPayV2PaymentProcessor {\n    private amazonPayV2SDK?: AmazonPayV2SDK;\n    private buttonParentContainer?: HTMLDivElement;\n    private amazonPayV2Button?: AmazonPayV2Button;\n    private isBuyNowFlow?: boolean;\n\n    constructor(private amazonPayV2ScriptLoader: AmazonPayV2ScriptLoader) {}\n\n    async initialize(paymentMethod: PaymentMethod<AmazonPayV2InitializeOptions>): Promise<void> {\n        this.amazonPayV2SDK = await this.amazonPayV2ScriptLoader.load(paymentMethod);\n        this.buttonParentContainer =\n            this.buttonParentContainer || this.createAmazonPayButtonParentContainer();\n    }\n\n    deinitialize(): Promise<void> {\n        this.amazonPayV2Button = undefined;\n        this.buttonParentContainer?.remove();\n        this.buttonParentContainer = undefined;\n        this.amazonPayV2SDK = undefined;\n\n        return Promise.resolve();\n    }\n\n    bindButton(\n        buttonId: string,\n        sessionId: string,\n        changeAction: AmazonPayV2ChangeActionType,\n    ): void {\n        this.getAmazonPayV2SDK().Pay.bindChangeAction(`#${buttonId}`, {\n            amazonCheckoutSessionId: sessionId,\n            changeAction,\n        });\n    }\n\n    createButton(containerId: string, options: AmazonPayV2ButtonParameters): void {\n        this.amazonPayV2Button = this.getAmazonPayV2SDK().Pay.renderButton(\n            `#${containerId}`,\n            options,\n        );\n    }\n\n    prepareCheckout(createCheckoutSessionConfig: Required<AmazonPayV2CheckoutSessionConfig>) {\n        const requestConfig = this.prepareRequestConfig(createCheckoutSessionConfig);\n\n        this.getAmazonPayV2Button().onClick(() => {\n            this.getAmazonPayV2Button().initCheckout(requestConfig);\n        });\n    }\n\n    prepareCheckoutWithCreationRequestConfig(\n        createCheckoutConfig: () => Promise<\n            | {\n                  createCheckoutSessionConfig: Required<AmazonPayV2CheckoutSessionConfig>;\n                  estimatedOrderAmount: AmazonPayV2Price;\n                  productType: AmazonPayV2PayOptions;\n              }\n            | undefined\n        >,\n    ) {\n        this.getAmazonPayV2Button().onClick(async () => {\n            const config = await createCheckoutConfig();\n\n            if (config) {\n                const requestConfig = this.prepareRequestConfig(\n                    config.createCheckoutSessionConfig,\n                    config.estimatedOrderAmount,\n                    config.productType,\n                );\n\n                this.getAmazonPayV2Button().initCheckout(requestConfig);\n            }\n        });\n    }\n\n    async signout(): Promise<void> {\n        if (this.amazonPayV2SDK) {\n            this.amazonPayV2SDK.Pay.signout();\n        }\n\n        return Promise.resolve();\n    }\n\n    renderAmazonPayButton({\n        buttonColor,\n        checkoutState,\n        containerId,\n        decoupleCheckoutInitiation = false,\n        methodId,\n        options,\n        placement,\n        isButtonMicroTextDisabled = false,\n    }: AmazonPayV2ButtonRenderingOptions): HTMLDivElement | undefined {\n        const container = document.querySelector<HTMLElement>(`#${containerId}`);\n\n        if (!container) {\n            return;\n        }\n\n        const { id: parentContainerId } = container.appendChild(this.getButtonParentContainer());\n\n        if (options && isButtonMicroTextDisabled) {\n            options.design = AmazonPayV2ButtonDesign.C0001;\n        }\n\n        const amazonPayV2ButtonOptions =\n            options ??\n            this.getAmazonPayV2ButtonOptions(\n                checkoutState,\n                methodId,\n                placement,\n                decoupleCheckoutInitiation,\n                buttonColor,\n            );\n\n        this.createButton(parentContainerId, amazonPayV2ButtonOptions);\n\n        return this.getButtonParentContainer();\n    }\n\n    updateBuyNowFlowFlag(isBuyNowFlow?: boolean) {\n        this.isBuyNowFlow = Boolean(isBuyNowFlow);\n    }\n\n    /**\n     * @internal\n     */\n    isPh4Enabled(\n        features: CheckoutSettings['features'],\n        storeCountryCode: StoreProfile['storeCountryCode'],\n    ): boolean {\n        const isPh4Enabled = !!features['PROJECT-3483.amazon_pay_ph4'];\n        const isPh4UsOnly = !!features['INT-6885.amazon_pay_ph4_us_only'];\n\n        if (isPh4Enabled && isPh4UsOnly) {\n            return storeCountryCode === 'US';\n        }\n\n        return isPh4Enabled;\n    }\n\n    private prepareRequestConfig(\n        createCheckoutSessionConfig: Required<AmazonPayV2CheckoutSessionConfig>,\n        estimatedOrderAmount?: AmazonPayV2Price,\n        productType?: AmazonPayV2PayOptions,\n    ): RequestConfig {\n        const { publicKeyId, ...signedPayload } = createCheckoutSessionConfig;\n\n        return {\n            createCheckoutSessionConfig: this.isEnvironmentSpecific(publicKeyId)\n                ? signedPayload\n                : createCheckoutSessionConfig,\n            ...(estimatedOrderAmount && { estimatedOrderAmount }),\n            ...(productType && { productType }),\n        };\n    }\n\n    private createAmazonPayButtonParentContainer(): HTMLDivElement {\n        const uid = Math.random().toString(16).substr(-4);\n        const parentContainer = document.createElement('div');\n\n        parentContainer.id = `amazonpay_button_parent_container_${uid}`;\n\n        return parentContainer;\n    }\n\n    private getAmazonPayV2ButtonOptions(\n        checkoutState: InternalCheckoutSelectors | PaymentIntegrationSelectors,\n        methodId: string,\n        placement: AmazonPayV2Placement,\n        decoupleCheckoutInitiation = false,\n        buttonColor = AmazonPayV2ButtonColor.Gold,\n    ): AmazonPayV2ButtonParameters {\n        const { getCart, getCheckout, getStoreConfigOrThrow, getPaymentMethodOrThrow } =\n            this.getCheckoutState(checkoutState);\n        const {\n            config: { merchantId, testMode },\n            initializationData,\n        } = getPaymentMethodOrThrow<AmazonPayV2InitializeOptions>(methodId);\n\n        if (!initializationData) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            checkoutLanguage,\n            checkoutSessionMethod,\n            createCheckoutSessionConfig,\n            extractAmazonCheckoutSessionId,\n            ledgerCurrency,\n            publicKeyId = '',\n            isButtonMicroTextDisabled,\n        } = initializationData;\n\n        if (!merchantId || !ledgerCurrency) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const buttonBaseConfig: AmazonPayV2ButtonConfig = {\n            merchantId,\n            ledgerCurrency,\n            checkoutLanguage,\n            placement,\n            buttonColor,\n            ...(isButtonMicroTextDisabled ? { design: AmazonPayV2ButtonDesign.C0001 } : {}),\n        };\n\n        if (this.isBuyNowFlow) {\n            return {\n                ...buttonBaseConfig,\n                sandbox: !!testMode,\n            };\n        }\n\n        const cart = getCart();\n\n        buttonBaseConfig.productType =\n            cart && getShippableItemsCount(cart) === 0\n                ? AmazonPayV2PayOptions.PayOnly\n                : AmazonPayV2PayOptions.PayAndShip;\n\n        const {\n            checkoutSettings: { features },\n            storeProfile: { shopPath, storeCountryCode },\n        } = getStoreConfigOrThrow();\n\n        if (this.isPh4Enabled(features, storeCountryCode)) {\n            if (!createCheckoutSessionConfig) {\n                throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n            }\n\n            const amount = getCheckout()?.outstandingBalance.toString();\n            const currencyCode = cart?.currency.code;\n            const buttonOptions: AmazonPayV2NewButtonParams = { ...buttonBaseConfig };\n            let tmpConfig: AmazonPayV2CheckoutSessionConfig;\n\n            if (this.isEnvironmentSpecific(publicKeyId)) {\n                buttonOptions.publicKeyId = publicKeyId;\n                tmpConfig = createCheckoutSessionConfig;\n            } else {\n                buttonOptions.sandbox = !!testMode;\n                tmpConfig = { ...createCheckoutSessionConfig, publicKeyId };\n            }\n\n            if (!decoupleCheckoutInitiation) {\n                buttonOptions.createCheckoutSessionConfig = tmpConfig;\n            }\n\n            if (amount && currencyCode) {\n                buttonOptions.estimatedOrderAmount = { amount, currencyCode };\n            }\n\n            return buttonOptions;\n        }\n\n        const createCheckoutSession = {\n            method: checkoutSessionMethod,\n            url: `${shopPath}/remote-checkout/${methodId}/payment-session`,\n            extractAmazonCheckoutSessionId,\n        };\n\n        return {\n            ...buttonBaseConfig,\n            createCheckoutSession,\n            sandbox: !!testMode,\n        };\n    }\n\n    private isEnvironmentSpecific(publicKeyId: string): boolean {\n        return /^(SANDBOX|LIVE)/.test(publicKeyId);\n    }\n\n    private getAmazonPayV2SDK(): AmazonPayV2SDK {\n        return this.getOrThrow(this.amazonPayV2SDK);\n    }\n\n    private getButtonParentContainer(): HTMLDivElement {\n        return this.getOrThrow(this.buttonParentContainer);\n    }\n\n    private getAmazonPayV2Button(): AmazonPayV2Button {\n        return this.getOrThrow(this.amazonPayV2Button);\n    }\n\n    private getOrThrow<T>(value?: T): T {\n        return guard(\n            value,\n            () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n        );\n    }\n\n    // INFO: need this mapping while we have strategies in core and in integration package at the same time\n    private getCheckoutState(\n        checkoutState: InternalCheckoutSelectors | PaymentIntegrationSelectors,\n    ): Pick<\n        PaymentIntegrationSelectors,\n        'getCart' | 'getCheckout' | 'getStoreConfigOrThrow' | 'getPaymentMethodOrThrow'\n    > {\n        if (isInternalCheckoutSelectors(checkoutState)) {\n            return {\n                getCart: checkoutState.cart.getCart,\n                getCheckout: checkoutState.checkout.getCheckout,\n                getStoreConfigOrThrow: checkoutState.config.getStoreConfigOrThrow,\n                getPaymentMethodOrThrow: <T>(methodId: string) =>\n                    checkoutState.paymentMethods.getPaymentMethodOrThrow<T>(methodId),\n            };\n        }\n\n        return checkoutState;\n    }\n}\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/amazon-pay-v2-script-loader.spec.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { AmazonPayV2HostWindow, AmazonPayV2SDK } from './amazon-pay-v2';\nimport AmazonPayV2ScriptLoader from './amazon-pay-v2-script-loader';\nimport {\n    getAmazonPayV2SDKMock,\n    getAmazonPayV2 as getPaymentMethodMock,\n} from './mocks/amazon-pay-v2.mock';\n\ndescribe('AmazonPayV2ScriptLoader', () => {\n    let amazonPayV2ScriptLoader: AmazonPayV2ScriptLoader;\n    let scriptLoader: ScriptLoader;\n    let mockWindow: AmazonPayV2HostWindow;\n\n    beforeEach(() => {\n        mockWindow = {} as AmazonPayV2HostWindow;\n        scriptLoader = {} as ScriptLoader;\n        amazonPayV2ScriptLoader = new AmazonPayV2ScriptLoader(scriptLoader, mockWindow);\n    });\n\n    describe('#load()', () => {\n        let amazonPayV2SDK: AmazonPayV2SDK;\n\n        beforeEach(() => {\n            amazonPayV2SDK = getAmazonPayV2SDKMock();\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.amazon = amazonPayV2SDK;\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads the USA SDK if no initialization data is passed on Payment Method', async () => {\n            const paymentMethodMock = {\n                ...getPaymentMethodMock(),\n                initializationData: undefined,\n            };\n\n            await amazonPayV2ScriptLoader.load(paymentMethodMock);\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                'https://static-na.payments-amazon.com/checkout.js',\n            );\n        });\n\n        it('loads the USA SDK if no region is passed on Payment Method', async () => {\n            await amazonPayV2ScriptLoader.load(getPaymentMethodMock('us'));\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                'https://static-na.payments-amazon.com/checkout.js',\n            );\n        });\n\n        it('loads the USA SDK if US region is passed on Payment Method', async () => {\n            await amazonPayV2ScriptLoader.load(getPaymentMethodMock('us'));\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                'https://static-na.payments-amazon.com/checkout.js',\n            );\n        });\n\n        it('loads the Europe SDK if EU region is passed on Payment Method', async () => {\n            await amazonPayV2ScriptLoader.load(getPaymentMethodMock('de'));\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                'https://static-eu.payments-amazon.com/checkout.js',\n            );\n        });\n\n        it('loads the Japan SDK if JP region is passed on Payment Method', async () => {\n            await amazonPayV2ScriptLoader.load(getPaymentMethodMock('jp'));\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                'https://static-fe.payments-amazon.com/checkout.js',\n            );\n        });\n\n        it('returns the SDK from the window', async () => {\n            const sdk = await amazonPayV2ScriptLoader.load(getPaymentMethodMock());\n\n            expect(sdk).toBe(amazonPayV2SDK);\n        });\n\n        it('throws an error when window is not set', async () => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.amazon = undefined;\n\n                return Promise.resolve();\n            });\n\n            await expect(amazonPayV2ScriptLoader.load(getPaymentMethodMock())).rejects.toThrow(\n                PaymentMethodClientUnavailableError,\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/amazon-pay-v2-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    AmazonPayV2HostWindow,\n    AmazonPayV2InitializeOptions,\n    amazonPayV2Regions,\n    AmazonPayV2SDK,\n} from './amazon-pay-v2';\n\nexport default class AmazonPayV2ScriptLoader {\n    constructor(\n        private scriptLoader: ScriptLoader,\n        private windowWithAmazonPay: AmazonPayV2HostWindow = window,\n    ) {}\n\n    async load(method: PaymentMethod<AmazonPayV2InitializeOptions>): Promise<AmazonPayV2SDK> {\n        const { initializationData } = method;\n        const region = initializationData?.region || 'us';\n\n        const amazonPayV2Region = amazonPayV2Regions[region];\n\n        await this.scriptLoader.loadScript(\n            `https://static-${amazonPayV2Region}.payments-amazon.com/checkout.js`,\n        );\n\n        if (!this.windowWithAmazonPay.amazon) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.windowWithAmazonPay.amazon;\n    }\n}\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/amazon-pay-v2.ts",
    "content": "import {\n    Cart,\n    Checkout,\n    PaymentIntegrationSelectors,\n    PaymentMethod,\n    StoreConfig,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport type EnvironmentType = 'PRODUCTION' | 'TEST';\n\nexport interface AmazonPayV2Options {\n    environment: EnvironmentType;\n}\n\nexport interface AmazonPayV2SDK {\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    Pay: AmazonPayV2Client;\n}\n\nexport interface RequestConfig {\n    createCheckoutSessionConfig: AmazonPayV2CheckoutSessionConfig;\n    estimatedOrderAmount?: AmazonPayV2Price;\n    productType?: AmazonPayV2PayOptions;\n}\n\nexport interface AmazonPayV2Button {\n    /**\n     * Allows you to define custom actions.\n     */\n    onClick: (callback: () => void | Promise<void>) => void;\n\n    /**\n     * Initiates the Amazon Pay checkout.\n     */\n    initCheckout(requestConfig: RequestConfig): void;\n}\n\nexport type AmazonPayV2ButtonParameters = AmazonPayV2ButtonParams | AmazonPayV2NewButtonParams;\n\nexport interface AmazonPayV2Client {\n    /**\n     * Render the Amazon Pay button to a HTML container element.\n     *\n     * @param containerId - HTML element id.\n     * @param params - Button rendering params.\n     */\n    renderButton(containerId: string, params: AmazonPayV2ButtonParameters): AmazonPayV2Button;\n\n    /**\n     * Bind click events to HTML elements, so that when the element is clicked, the buyer can select a different shipping address or payment method.\n     *\n     * @param buttonId - HTML element id.\n     * @param options - Element binding options.\n     */\n    bindChangeAction(buttonId: string, options: AmazonPayV2ChangeActionOptions): void;\n\n    /**\n     * Allow buyers to sign out from their Amazon account.\n     */\n    signout(): void;\n}\n\nexport interface AmazonPayV2HostWindow extends Window {\n    amazon?: AmazonPayV2SDK;\n}\n\nexport interface AmazonPayV2ButtonConfig {\n    /**\n     * Amazon Pay merchant account identifier.\n     */\n    merchantId: string;\n\n    /**\n     * Placement of the Amazon Pay button on your website.\n     */\n    placement: AmazonPayV2Placement;\n\n    /**\n     * Ledger currency provided during registration for the given merchant identifier.\n     */\n    ledgerCurrency: AmazonPayV2LedgerCurrency;\n\n    /**\n     * Product type selected for checkout. Default is 'PayAndShip'.\n     */\n    productType?: AmazonPayV2PayOptions;\n\n    /**\n     * Color of the Amazon Pay button.\n     */\n    buttonColor?: AmazonPayV2ButtonColor;\n\n    /**\n     * Language used to render the button and text on Amazon Pay hosted pages.\n     */\n    checkoutLanguage?: AmazonPayV2CheckoutLanguage;\n\n    /**\n     * Sets button to Sandbox environment. You do not have to set this parameter\n     * if your `publicKeyId` has an environment prefix. Default is false.\n     */\n    sandbox?: boolean;\n\n    /**\n     * Sets Amazon Pay button design.\n     */\n    design?: AmazonPayV2ButtonDesign;\n}\n\nexport interface AmazonPayV2ButtonParams extends AmazonPayV2ButtonConfig {\n    /**\n     * Configuration for calling the endpoint to Create Checkout Session.\n     */\n    createCheckoutSession: AmazonPayV2CheckoutSession;\n}\n\nexport interface AmazonPayV2NewButtonParams extends AmazonPayV2ButtonConfig {\n    /**\n     * Credential provided by Amazon Pay. You must also set the `sandbox`\n     * parameter if your `publicKeyId` does not have an environment prefix.\n     */\n    publicKeyId?: string;\n\n    /**\n     * It does not have to match the final order amount if the buyer updates\n     * their order after starting checkout. Amazon Pay will use this value to\n     * assess transaction risk and prevent buyers from selecting payment methods\n     * that can't be used to process the order.\n     */\n    estimatedOrderAmount?: AmazonPayV2Price;\n\n    /**\n     * Create Checkout Session configuration.\n     */\n    createCheckoutSessionConfig?: AmazonPayV2CheckoutSessionConfig;\n}\n\nexport interface AmazonPayV2CheckoutSession {\n    /**\n     * Endpoint URL to Create Checkout Session.\n     */\n    url: string;\n\n    /**\n     * HTTP request method. Default is 'POST'.\n     */\n    method?: 'GET' | 'POST';\n\n    /**\n     * Checkout Session ID parameter in the response. Default is 'checkoutSessionId'.\n     */\n    extractAmazonCheckoutSessionId?: string;\n}\n\nexport interface AmazonPayV2CheckoutSessionConfig {\n    /**\n     * A payload that Amazon Pay will use to create a Checkout Session object.\n     */\n    payloadJSON: string;\n\n    /**\n     * Payload's signature.\n     */\n    signature: string;\n\n    /**\n     * Credential provided by Amazon Pay. You do not have to set this parameter\n     * if your `publicKeyId` has an environment prefix.\n     */\n    publicKeyId?: string;\n}\n\nexport interface AmazonPayV2Price {\n    /**\n     * Transaction amount.\n     */\n    amount: string;\n\n    /**\n     * Transaction currency code in ISO 4217 format. Example: USD.\n     */\n    currencyCode: string;\n}\n\nexport type AmazonPayV2ChangeActionType = 'changeAddress' | 'changePayment';\n\nexport interface AmazonPayV2ChangeActionOptions {\n    /**\n     * Amazon Pay Checkout Session identifier.\n     */\n    amazonCheckoutSessionId: string;\n\n    /**\n     * Update requested by the buyer.\n     */\n    changeAction: AmazonPayV2ChangeActionType;\n}\n\nexport const amazonPayV2Regions: { [key: string]: string } = {\n    de: 'eu',\n    jp: 'fe',\n    uk: 'eu',\n    us: 'na',\n};\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum AmazonPayV2CheckoutLanguage {\n    en_US = 'en_US',\n    en_GB = 'en_GB',\n    de_DE = 'de_DE',\n    fr_FR = 'fr_FR',\n    it_IT = 'it_IT',\n    es_ES = 'es_ES',\n    ja_JP = 'ja_JP',\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/no-shadow */\nexport enum AmazonPayV2Placement {\n    /** Initial or main page. */\n    Home = 'Home',\n\n    /** Product details page. */\n    Product = 'Product',\n\n    /** Cart review page before buyer starts checkout. */\n    Cart = 'Cart',\n\n    /** Any page after buyer starts checkout. */\n    Checkout = 'Checkout',\n\n    /** Any page that doesn't fit the previous descriptions. */\n    Other = 'Other',\n}\n/* eslint-enable @typescript-eslint/no-shadow */\n\nexport enum AmazonPayV2LedgerCurrency {\n    USD = 'USD',\n    EUR = 'EUR',\n    GBP = 'GBP',\n    JPY = 'JPY',\n}\n\nexport enum AmazonPayV2PayOptions {\n    /** Select this product type if you need the buyer's shipping details. */\n    PayAndShip = 'PayAndShip',\n\n    /** Select this product type if you do not need the buyer's shipping details. */\n    PayOnly = 'PayOnly',\n}\n\nexport enum AmazonPayV2ButtonColor {\n    Gold = 'Gold',\n    LightGray = 'LightGray',\n    DarkGray = 'DarkGray',\n}\n\nexport enum AmazonPayV2ButtonDesign {\n    C0001 = 'C0001',\n}\n\n// TODO: after migration AmazonPay strategies to integration package\n// <InternalCheckoutSelectors> should be removed\n// and replaced usage with <PaymentIntegrationService>\nexport interface InternalCheckoutSelectors {\n    cart: {\n        getCart: () => Cart | undefined;\n    };\n    checkout: {\n        getCheckout: () => Checkout | undefined;\n    };\n    config: {\n        getStoreConfigOrThrow: () => StoreConfig;\n    };\n    paymentMethods: {\n        getPaymentMethodOrThrow: <T>(methodId: string) => PaymentMethod<T>;\n    };\n}\n\nexport interface AmazonPayV2InitializeOptions {\n    buttonColor?: AmazonPayV2ButtonColor;\n    checkoutLanguage?: AmazonPayV2CheckoutLanguage;\n    checkoutSessionMethod?: 'GET' | 'POST';\n    createCheckoutSessionConfig?: AmazonPayV2CheckoutSessionConfig;\n    extractAmazonCheckoutSessionId?: string;\n    ledgerCurrency?: AmazonPayV2LedgerCurrency;\n    publicKeyId?: string;\n    region?: string;\n    isButtonMicroTextDisabled?: boolean;\n    paymentToken?: string;\n}\n\nexport interface AmazonPayV2ButtonRenderingOptions {\n    checkoutState: InternalCheckoutSelectors | PaymentIntegrationSelectors;\n    containerId: string;\n    decoupleCheckoutInitiation?: boolean;\n    methodId: string;\n    buttonColor?: AmazonPayV2ButtonColor;\n    options?: AmazonPayV2ButtonParameters;\n    placement: AmazonPayV2Placement;\n    isButtonMicroTextDisabled?: boolean;\n}\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport interface AmazonPayAdditionalActionErrorBody {\n    status: string;\n    additional_action_required: {\n        data: {\n            redirect_url: string;\n        };\n    };\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/create-amazon-pay-v2-payment-processor.spec.ts",
    "content": "import AmazonPayV2PaymentProcessor from './amazon-pay-v2-payment-processor';\nimport AmazonPayV2ScriptLoader from './amazon-pay-v2-script-loader';\nimport createAmazonPayV2PaymentProcessor from './create-amazon-pay-v2-payment-processor';\n\njest.mock('./amazon-pay-v2-payment-processor');\n\nbeforeEach(() => {\n    (AmazonPayV2PaymentProcessor as jest.Mock<AmazonPayV2PaymentProcessor>).mockClear();\n});\n\ndescribe('createAmazonPayV2PaymentProcessor()', () => {\n    it('returns an instance of AmazonPayV2PaymentProcessor', () => {\n        const processor = createAmazonPayV2PaymentProcessor();\n\n        expect(processor).toBeInstanceOf(AmazonPayV2PaymentProcessor);\n        expect(AmazonPayV2PaymentProcessor).toHaveBeenNthCalledWith(\n            1,\n            expect.any(AmazonPayV2ScriptLoader),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/create-amazon-pay-v2-payment-processor.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport AmazonPayV2PaymentProcessor from './amazon-pay-v2-payment-processor';\nimport AmazonPayV2ScriptLoader from './amazon-pay-v2-script-loader';\n\nexport default function createAmazonPayV2PaymentProcessor(): AmazonPayV2PaymentProcessor {\n    return new AmazonPayV2PaymentProcessor(new AmazonPayV2ScriptLoader(getScriptLoader()));\n}\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/index.ts",
    "content": "export * from './amazon-pay-v2';\nexport * from './mocks/amazon-pay-v2.mock';\nexport { default as AmazonPayV2ScriptLoader } from './amazon-pay-v2-script-loader';\nexport { default as AmazonPayV2PaymentProcessor } from './amazon-pay-v2-payment-processor';\nexport { default as createAmazonPayV2PaymentProcessor } from './create-amazon-pay-v2-payment-processor';\nexport { isAmazonPayAdditionalActionErrorBody } from './isAmazonPayAdditionalActionError';\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/isAmazonPayAdditionalActionError.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\nimport { isAmazonPayAdditionalActionErrorBody } from './isAmazonPayAdditionalActionError';\n\ndescribe('isAmazonPayAdditionalActionErrorBody', () => {\n    it('Should return false if error not an object', () => {\n        expect(isAmazonPayAdditionalActionErrorBody(undefined)).toBe(false);\n    });\n\n    it('Should return false if error is equal null', () => {\n        expect(isAmazonPayAdditionalActionErrorBody(null)).toBe(false);\n    });\n\n    it('Should return false if no status option in error', () => {\n        const errorBody = {\n            additional_action_required: {},\n        };\n\n        expect(isAmazonPayAdditionalActionErrorBody(errorBody)).toBe(false);\n    });\n\n    it('Should return false if no additional_action_required option in error', () => {\n        const errorBody = {\n            status: 'additional_action_required',\n        };\n\n        expect(isAmazonPayAdditionalActionErrorBody(errorBody)).toBe(false);\n    });\n\n    it('Should return false if error status different from additional_action_required', () => {\n        const errorBody = {\n            status: 'some other status',\n            additional_action_required: {},\n        };\n\n        expect(isAmazonPayAdditionalActionErrorBody(errorBody)).toBe(false);\n    });\n\n    it('Should return false if no data object in additional_action_required', () => {\n        const errorBody = {\n            status: 'additional_action_required',\n            additional_action_required: {},\n        };\n\n        expect(isAmazonPayAdditionalActionErrorBody(errorBody)).toBe(false);\n    });\n\n    it('Should return false if no redirect_url in error', () => {\n        const errorBody = {\n            status: 'additional_action_required',\n            additional_action_required: {\n                data: {},\n            },\n        };\n\n        expect(isAmazonPayAdditionalActionErrorBody(errorBody)).toBe(false);\n    });\n\n    it('Should return false if no redirect_url not a string', () => {\n        const errorBody = {\n            status: 'additional_action_required',\n            additional_action_required: {\n                data: {\n                    redirect_url: {},\n                },\n            },\n        };\n\n        expect(isAmazonPayAdditionalActionErrorBody(errorBody)).toBe(false);\n    });\n\n    it('Should return true if error is additional action required', () => {\n        const errorBody = {\n            status: 'additional_action_required',\n            additional_action_required: {\n                data: {\n                    redirect_url: 'redirect_url',\n                },\n            },\n        };\n\n        expect(isAmazonPayAdditionalActionErrorBody(errorBody)).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/isAmazonPayAdditionalActionError.ts",
    "content": "import { AmazonPayAdditionalActionErrorBody } from './amazon-pay-v2';\n\n/* eslint-disable @typescript-eslint/consistent-type-assertions */\nexport function isAmazonPayAdditionalActionErrorBody(\n    errorBody: unknown,\n): errorBody is AmazonPayAdditionalActionErrorBody {\n    return (\n        typeof errorBody === 'object' &&\n        errorBody !== null &&\n        'status' in errorBody &&\n        'additional_action_required' in errorBody &&\n        (errorBody as AmazonPayAdditionalActionErrorBody).status === 'additional_action_required' &&\n        'data' in (errorBody as AmazonPayAdditionalActionErrorBody).additional_action_required &&\n        'redirect_url' in\n            (errorBody as AmazonPayAdditionalActionErrorBody).additional_action_required.data &&\n        typeof (errorBody as AmazonPayAdditionalActionErrorBody).additional_action_required.data\n            .redirect_url === 'string'\n    );\n}\n/* eslint-enable @typescript-eslint/consistent-type-assertions */\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/isInternalCheckoutSelectors.spec.ts",
    "content": "import { isInternalCheckoutSelectors } from './isInternalCheckoutSelectors';\n\ndescribe('isInternalCheckoutSelectors', () => {\n    const checkoutSelectorsMock: {\n        cart?: unknown;\n        checkout?: unknown;\n        config?: unknown;\n        paymentMethods?: unknown;\n    } = {\n        cart: {},\n        checkout: {},\n        config: {},\n        paymentMethods: {},\n    };\n\n    it('should return false if checkoutSelectors not an object', () => {\n        expect(isInternalCheckoutSelectors(undefined)).toBe(false);\n    });\n\n    it('should return false if checkoutSelectors is null', () => {\n        expect(isInternalCheckoutSelectors(null)).toBe(false);\n    });\n\n    it('should return false if checkoutSelectors not contain cart', () => {\n        const checkoutSelectors = { ...checkoutSelectorsMock };\n\n        delete checkoutSelectors.cart;\n\n        expect(isInternalCheckoutSelectors(checkoutSelectors)).toBe(false);\n    });\n\n    it('should return false if checkoutSelectors not contain checkout', () => {\n        const checkoutSelectors = { ...checkoutSelectorsMock };\n\n        delete checkoutSelectors.checkout;\n\n        expect(isInternalCheckoutSelectors(checkoutSelectors)).toBe(false);\n    });\n\n    it('should return false if checkoutSelectors not contain config', () => {\n        const checkoutSelectors = { ...checkoutSelectorsMock };\n\n        delete checkoutSelectors.config;\n\n        expect(isInternalCheckoutSelectors(checkoutSelectors)).toBe(false);\n    });\n\n    it('should return false if checkoutSelectors not contain paymentMethods', () => {\n        const checkoutSelectors = { ...checkoutSelectorsMock };\n\n        delete checkoutSelectors.paymentMethods;\n\n        expect(isInternalCheckoutSelectors(checkoutSelectors)).toBe(false);\n    });\n\n    it('should return true if checkoutSelectors is InternalCheckoutSelectors', () => {\n        expect(isInternalCheckoutSelectors(checkoutSelectorsMock)).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/isInternalCheckoutSelectors.ts",
    "content": "import { InternalCheckoutSelectors } from './amazon-pay-v2';\n\nexport function isInternalCheckoutSelectors(\n    checkoutSelectors: unknown,\n): checkoutSelectors is InternalCheckoutSelectors {\n    return (\n        typeof checkoutSelectors === 'object' &&\n        checkoutSelectors !== null &&\n        'cart' in checkoutSelectors &&\n        'checkout' in checkoutSelectors &&\n        'config' in checkoutSelectors &&\n        'paymentMethods' in checkoutSelectors\n    );\n}\n"
  },
  {
    "path": "packages/amazon-pay-utils/src/mocks/amazon-pay-v2.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    AmazonPayV2ButtonColor,\n    AmazonPayV2ButtonConfig,\n    AmazonPayV2ButtonDesign,\n    AmazonPayV2ButtonParameters,\n    AmazonPayV2CheckoutLanguage,\n    AmazonPayV2InitializeOptions,\n    AmazonPayV2LedgerCurrency,\n    AmazonPayV2PayOptions,\n    AmazonPayV2Placement,\n    AmazonPayV2SDK,\n} from '../amazon-pay-v2';\n\nexport function getAmazonPayV2SDKMock(): AmazonPayV2SDK {\n    return {\n        // eslint-disable-next-line @typescript-eslint/naming-convention\n        Pay: {\n            renderButton: jest.fn().mockReturnValue({\n                onClick: jest.fn(),\n                initCheckout: jest.fn(),\n            }),\n            bindChangeAction: jest.fn(),\n            signout: jest.fn(),\n        },\n    };\n}\n\nexport function getPaymentMethodMockUndefinedMerchant(): PaymentMethod {\n    const amazonMock = getAmazonPayV2();\n\n    amazonMock.config.merchantId = undefined;\n\n    return amazonMock;\n}\n\nexport function getPaymentMethodMockUndefinedLedgerCurrency(): PaymentMethod {\n    const amazonMock = getAmazonPayV2();\n\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    amazonMock.initializationData!.ledgerCurrency = undefined;\n\n    return amazonMock;\n}\n\nexport function getAmazonPayV2Ph4ButtonParamsMock(): AmazonPayV2ButtonParameters {\n    return {\n        merchantId: 'checkout_amazonpay',\n        publicKeyId: 'SANDBOX-XXXXXXXX',\n        ledgerCurrency: AmazonPayV2LedgerCurrency.USD,\n        checkoutLanguage: AmazonPayV2CheckoutLanguage.en_US,\n        productType: AmazonPayV2PayOptions.PayAndShip,\n        placement: AmazonPayV2Placement.Checkout,\n        buttonColor: AmazonPayV2ButtonColor.Gold,\n        estimatedOrderAmount: {\n            amount: '190',\n            currencyCode: 'USD',\n        },\n        createCheckoutSessionConfig: {\n            payloadJSON: 'payload',\n            signature: 'xxxx',\n        },\n    };\n}\n\nexport function getAmazonPayBaseButtonParamsMock(): AmazonPayV2ButtonConfig {\n    return {\n        merchantId: 'checkout_amazonpay',\n        ledgerCurrency: AmazonPayV2LedgerCurrency.USD,\n        checkoutLanguage: AmazonPayV2CheckoutLanguage.en_US,\n        placement: AmazonPayV2Placement.Checkout,\n        buttonColor: AmazonPayV2ButtonColor.Gold,\n        sandbox: true,\n    };\n}\n\nexport function getAmazonPayV2ButtonParamsMock(\n    isButtonMicroTextDisabled = false,\n): AmazonPayV2ButtonParameters {\n    return {\n        buttonColor: AmazonPayV2ButtonColor.Gold,\n        checkoutLanguage: AmazonPayV2CheckoutLanguage.en_US,\n        createCheckoutSession: {\n            url: 'https://my-dev-store.store.bcdev/remote-checkout/amazonpay/payment-session',\n            method: 'GET',\n            extractAmazonCheckoutSessionId: 'token',\n        },\n        ledgerCurrency: AmazonPayV2LedgerCurrency.USD,\n        merchantId: 'checkout_amazonpay',\n        placement: AmazonPayV2Placement.Checkout,\n        productType: AmazonPayV2PayOptions.PayAndShip,\n        sandbox: true,\n        ...(isButtonMicroTextDisabled ? { design: AmazonPayV2ButtonDesign.C0001 } : {}),\n    };\n}\n\nexport function getAmazonPayV2(region?: string): PaymentMethod<AmazonPayV2InitializeOptions> {\n    return {\n        config: {\n            displayName: 'AMAZON PAY',\n            helpText: '',\n            isVaultingEnabled: false,\n            merchantId: 'checkout_amazonpay',\n            requireCustomerCode: false,\n            testMode: true,\n        },\n        id: 'amazonpay',\n        initializationData: {\n            buttonColor: AmazonPayV2ButtonColor.Gold,\n            checkoutLanguage: AmazonPayV2CheckoutLanguage.en_US,\n            checkoutSessionMethod: 'GET',\n            createCheckoutSessionConfig: {\n                payloadJSON: 'payload',\n                signature: 'xxxx',\n            },\n            extractAmazonCheckoutSessionId: 'token',\n            ledgerCurrency: AmazonPayV2LedgerCurrency.USD,\n            publicKeyId: 'SANDBOX-XXXXXXXX',\n            region,\n        },\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: ['VISA', 'AMEX', 'MC'],\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getAmazonPayV2PaymentProcessorMock() {\n    return {\n        initialize: jest.fn(() => Promise.resolve()),\n        deinitialize: jest.fn(() => Promise.resolve()),\n        bindButton: jest.fn(),\n        createButton: jest.fn(),\n        prepareCheckout: jest.fn(),\n        prepareCheckoutWithCreationRequestConfig: jest.fn(),\n        signout: jest.fn(() => Promise.resolve()),\n        renderAmazonPayButton: jest.fn(),\n        updateBuyNowFlowFlag: jest.fn(),\n        isPh4Enabled: jest.fn(() => true),\n    };\n}\n"
  },
  {
    "path": "packages/amazon-pay-utils/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true\n    }\n}\n"
  },
  {
    "path": "packages/amazon-pay-utils/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/amazon-pay-utils/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/analytics/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {}\n        },\n        {\n            \"files\": [\"*.spec.ts\", \"*.spec.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/consistent-type-assertions\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/analytics/README.md",
    "content": "# analytics\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test analytics` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint analytics` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/analytics/jest.config.js",
    "content": "module.exports = {\n    displayName: 'analytics',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/analytics',\n};\n"
  },
  {
    "path": "packages/analytics/project.json",
    "content": "{\n    \"name\": \"analytics\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/analytics/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/analytics/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/analytics\"],\n            \"options\": {\n                \"jestConfig\": \"packages/analytics/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/analytics/src/analytics-extra-items-manager.spec.ts",
    "content": "import localStorageFallback from 'local-storage-fallback';\n\nimport { DigitalItem, PhysicalItem } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport AnalyticsExtraItemsManager from './analytics-extra-items-manager';\nimport { ExtraItemsData } from './extra-items-data';\n\ndescribe('AnalyticsExtraItemsManager', () => {\n    it('save extra items data', () => {\n        const resultExtraItemsData: ExtraItemsData = {\n            1: {\n                brand: 'brand1',\n                category: 'category1, category2',\n            },\n            2: {\n                brand: '',\n                category: '',\n            },\n        };\n        const setItemMock = jest.fn((id: string, result: { [key: string]: unknown }) => ({\n            id,\n            result,\n        }));\n        const localStorageFallbackMock = {\n            ...localStorageFallback,\n            setItem: setItemMock,\n        };\n\n        const analyticsExtraItemsManager = new AnalyticsExtraItemsManager(localStorageFallbackMock);\n\n        const resultData = analyticsExtraItemsManager.saveExtraItemsData('dataId', {\n            physicalItems: [\n                {\n                    productId: 1,\n                    brand: 'brand1',\n                    categoryNames: ['category1', 'category2'],\n                },\n            ] as PhysicalItem[],\n            digitalItems: [\n                {\n                    productId: 2,\n                },\n            ] as DigitalItem[],\n            giftCertificates: [],\n        });\n\n        expect(resultData).toEqual(resultExtraItemsData);\n        expect(setItemMock).toHaveBeenCalledWith(\n            'ORDER_ITEMS_dataId',\n            JSON.stringify(resultExtraItemsData),\n        );\n    });\n\n    it('catch error after try save extra items data', () => {\n        const localStorageFallbackMock = {\n            ...localStorageFallback,\n            setItem: jest.fn(() => {\n                throw new Error();\n            }),\n        };\n\n        const analyticsExtraItemsManager = new AnalyticsExtraItemsManager(localStorageFallbackMock);\n\n        const resultData = analyticsExtraItemsManager.saveExtraItemsData('dataId', {\n            physicalItems: [\n                {\n                    productId: 1,\n                    brand: 'brand1',\n                    categoryNames: ['category1', 'category2'],\n                },\n            ] as PhysicalItem[],\n            digitalItems: [\n                {\n                    productId: 2,\n                },\n            ] as DigitalItem[],\n            giftCertificates: [],\n        });\n\n        expect(resultData).toEqual({});\n    });\n\n    it('read extra items data', () => {\n        const getItemMock = jest.fn(\n            () => `{\"product\": {\"brand\": \"brand1\", \"category\": \"category1, category2\"}}`,\n        );\n        const localStorageFallbackMock = {\n            ...localStorageFallback,\n            getItem: getItemMock,\n        };\n\n        const analyticsExtraItemsManager = new AnalyticsExtraItemsManager(localStorageFallbackMock);\n\n        const readResult = analyticsExtraItemsManager.readExtraItemsData('dataId');\n\n        expect(getItemMock).toHaveBeenCalledWith('ORDER_ITEMS_dataId');\n        expect(readResult).toEqual({\n            product: {\n                brand: 'brand1',\n                category: 'category1, category2',\n            },\n        });\n    });\n\n    it('read empty extra items data', () => {\n        const localStorageFallbackMock = {\n            ...localStorageFallback,\n            getItem: jest.fn(() => undefined),\n        };\n\n        const analyticsExtraItemsManager = new AnalyticsExtraItemsManager(localStorageFallbackMock);\n\n        const readResult = analyticsExtraItemsManager.readExtraItemsData('dataId');\n\n        expect(readResult).toBeNull();\n    });\n\n    it('read incorrect items data', () => {\n        const getItemMock = jest.fn(() => '123');\n        const localStorageFallbackMock = {\n            ...localStorageFallback,\n            getItem: getItemMock,\n        };\n\n        const analyticsExtraItemsManager = new AnalyticsExtraItemsManager(localStorageFallbackMock);\n\n        const readResult = analyticsExtraItemsManager.readExtraItemsData('dataId');\n\n        expect(getItemMock).toHaveBeenCalledWith('ORDER_ITEMS_dataId');\n        expect(readResult).toBeNull();\n    });\n\n    it('read items data with missed options fro ExtraItemsData', () => {\n        const getItemMock = jest.fn(() => `{\"product\": {\"brand\": \"brand1\"}}`);\n        const localStorageFallbackMock = {\n            ...localStorageFallback,\n            getItem: getItemMock,\n        };\n\n        const analyticsExtraItemsManager = new AnalyticsExtraItemsManager(localStorageFallbackMock);\n\n        const readResult = analyticsExtraItemsManager.readExtraItemsData('dataId');\n\n        expect(getItemMock).toHaveBeenCalledWith('ORDER_ITEMS_dataId');\n        expect(readResult).toBeNull();\n    });\n\n    it('catch error while read extra items data', () => {\n        const localStorageFallbackMock = {\n            ...localStorageFallback,\n            getItem: jest.fn(() => {\n                throw new Error();\n            }),\n        };\n\n        const analyticsExtraItemsManager = new AnalyticsExtraItemsManager(localStorageFallbackMock);\n\n        const readResult = analyticsExtraItemsManager.readExtraItemsData('dataId');\n\n        expect(readResult).toBeNull();\n    });\n\n    it('clear extra items data', () => {\n        const removeItemMock = jest.fn((id: string) => id);\n        const localStorageFallbackMock = {\n            ...localStorageFallback,\n            removeItem: removeItemMock,\n        };\n\n        const analyticsExtraItemsManager = new AnalyticsExtraItemsManager(localStorageFallbackMock);\n\n        analyticsExtraItemsManager.clearExtraItemData('dataId');\n\n        expect(removeItemMock).toHaveBeenCalledWith('ORDER_ITEMS_dataId');\n    });\n\n    it('clear extra items data by empty id', () => {\n        const removeItemMock = jest.fn((id: string) => id);\n        const localStorageFallbackMock = {\n            ...localStorageFallback,\n            removeItem: removeItemMock,\n        };\n\n        const analyticsExtraItemsManager = new AnalyticsExtraItemsManager(localStorageFallbackMock);\n\n        analyticsExtraItemsManager.clearExtraItemData('');\n\n        expect(removeItemMock).toHaveBeenCalledWith('');\n    });\n});\n"
  },
  {
    "path": "packages/analytics/src/analytics-extra-items-manager.ts",
    "content": "import { isObject } from 'lodash';\n\nimport { LineItemMap } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ExtraItemsData } from './extra-items-data';\n\ntype StorageFallback = Pick<Storage, 'getItem' | 'setItem' | 'removeItem'>;\n\nconst ORDER_ITEMS_STORAGE_KEY = 'ORDER_ITEMS';\n\nfunction isExtraItemsData(itemsData: unknown): itemsData is ExtraItemsData {\n    if (!isObject(itemsData)) {\n        return false;\n    }\n\n    const hasNotExtraItems = Object.values(itemsData).some(\n        (item) => !isObject(item) || !('brand' in item) || !('category' in item),\n    );\n\n    return Boolean(!hasNotExtraItems);\n}\n\nexport default class AnalyticsExtraItemsManager {\n    constructor(private storage: StorageFallback) {}\n\n    saveExtraItemsData(id: string, lineItems: LineItemMap): ExtraItemsData {\n        const data = [...lineItems.physicalItems, ...lineItems.digitalItems].reduce<ExtraItemsData>(\n            (result, item) => {\n                result[item.productId] = {\n                    brand: item.brand ? item.brand : '',\n                    category: item.categoryNames ? item.categoryNames.join(', ') : '',\n                };\n\n                return result;\n            },\n            {},\n        );\n\n        try {\n            this.storage.setItem(this.getStorageKey(id), JSON.stringify(data));\n\n            return data;\n        } catch (err) {\n            return {};\n        }\n    }\n\n    readExtraItemsData(id: string): ExtraItemsData | null {\n        try {\n            const item = this.storage.getItem(this.getStorageKey(id));\n\n            if (!item) {\n                return null;\n            }\n\n            const data: unknown = JSON.parse(item);\n\n            return isExtraItemsData(data) ? data : null;\n        } catch (err) {\n            return null;\n        }\n    }\n\n    clearExtraItemData(id: string): void {\n        try {\n            this.storage.removeItem(this.getStorageKey(id));\n        } catch (err) {\n            // silently ignore the failure\n        }\n    }\n\n    private getStorageKey(id: string): string {\n        return id ? `${ORDER_ITEMS_STORAGE_KEY}_${id}` : '';\n    }\n}\n"
  },
  {
    "path": "packages/analytics/src/analytics-tracker-window.ts",
    "content": "export interface AnalyticsTracker {\n    track(step: string, data: unknown): void;\n}\n\nexport default interface AnalyticsTrackerWindow extends Window {\n    analytics: AnalyticsTracker;\n}\n"
  },
  {
    "path": "packages/analytics/src/extra-items-data.ts",
    "content": "export interface ExtraItemsData {\n    [productId: string]: {\n        brand: string;\n        category: string;\n    };\n}\n"
  },
  {
    "path": "packages/analytics/src/index.ts",
    "content": "export { ExtraItemsData } from './extra-items-data';\nexport { default as AnalyticsExtraItemsManager } from './analytics-extra-items-manager';\nexport { AnalyticsTracker, default as AnalyticsTrackerWindow } from './analytics-tracker-window';\nexport { isAnalyticsTrackerWindow } from './is-analytics-step-tracker-window';\n"
  },
  {
    "path": "packages/analytics/src/is-analytics-step-tracker-window.spec.ts",
    "content": "import AnalyticsTrackerWindow from './analytics-tracker-window';\nimport { isAnalyticsTrackerWindow } from './is-analytics-step-tracker-window';\n\ndescribe('isAnalyticsTrackerWindow', () => {\n    it('window has analytics option', () => {\n        expect(isAnalyticsTrackerWindow({ analytics: {} } as AnalyticsTrackerWindow)).toBe(true);\n    });\n\n    it('window does not have analytics option', () => {\n        expect(isAnalyticsTrackerWindow({} as Window)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/analytics/src/is-analytics-step-tracker-window.ts",
    "content": "import AnalyticsTrackerWindow from './analytics-tracker-window';\n\nexport function isAnalyticsTrackerWindow(window: Window): window is AnalyticsTrackerWindow {\n    return Boolean(window.hasOwnProperty('analytics'));\n}\n"
  },
  {
    "path": "packages/analytics/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"references\": [\n        {\n          \"path\": \"./tsconfig.spec.json\"\n        }\n      ]\n}\n"
  },
  {
    "path": "packages/analytics/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.spec.tsx\"\n    ]\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-misused-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/restrict-template-expressions\": \"off\",\n                \"@typescript-eslint/require-await\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"jest/valid-expect\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/README.md",
    "content": "# apple-pay-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test apple-pay-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint apple-pay-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/apple-pay-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'apple-pay',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/apple-pay-integration',\n};\n"
  },
  {
    "path": "packages/apple-pay-integration/project.json",
    "content": "{\n    \"name\": \"apple-pay-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/apple-pay-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/apple-pay-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/apple-pay-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/apple-pay-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-button-initialize-options.ts",
    "content": "import { BuyNowCartRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * A set of options that are required to initialize ApplePay in cart.\n *\n * When ApplePay is initialized, an ApplePay button will be inserted into the\n * DOM. When a customer clicks on it, it will trigger Apple sheet.\n */\nexport default interface ApplePayButtonInitializeOptions {\n    /**\n     * This option indicates if product requires shipping\n     */\n    requiresShipping?: boolean;\n\n    /**\n     * The options that are required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: {\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\n    };\n\n    /**\n     * A callback that gets called when a payment is successfully completed.\n     */\n    onPaymentAuthorize(): void;\n}\n\nexport interface WithApplePayButtonInitializeOptions {\n    applepay?: ApplePayButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-button-method-type.ts",
    "content": "enum ApplePayButtonMethodType {\n    APPLEPAY = 'applepay',\n}\n\nexport default ApplePayButtonMethodType;\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-button-strategy.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BraintreeScriptLoader,\n    BraintreeSdk,\n    BraintreeSDKVersionManager,\n    getDataCollectorMock,\n    getDeviceDataMock,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    CartSource,\n    InvalidArgumentError,\n    MissingDataError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getCheckout,\n    getConfig,\n    getConsignment,\n    getResponse,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport ApplePayButtonInitializeOptions from './apple-pay-button-initialize-options';\nimport ApplePayButtonMethodType from './apple-pay-button-method-type';\nimport ApplePayButtonStrategy, { ButtonStyleOption } from './apple-pay-button-strategy';\nimport ApplePayScriptLoader from './apple-pay-script-loader';\nimport ApplePaySessionFactory from './apple-pay-session-factory';\nimport {\n    getApplePayButtonInitializationOptions,\n    getApplePayButtonInitializationOptionsWithBuyNow,\n} from './mocks/apple-pay-button.mock';\nimport { getApplePay } from './mocks/apple-pay-method.mock';\nimport { MockApplePaySession } from './mocks/apple-pay-payment.mock';\nimport { getContactAddress } from './mocks/apple-pay-wallet-button-mock';\n\ndescribe('ApplePayButtonStrategy', () => {\n    let container: HTMLDivElement;\n    let requestSender: RequestSender;\n    let applePayFactory: ApplePaySessionFactory;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let strategy: ApplePayButtonStrategy;\n    let applePaySession: MockApplePaySession;\n    let braintreeSdk: BraintreeSdk;\n    let applePayScriptLoader: ApplePayScriptLoader;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    beforeEach(() => {\n        applePaySession = new MockApplePaySession();\n\n        Object.defineProperty(window, 'ApplePaySession', {\n            writable: true,\n            value: MockApplePaySession,\n        });\n        applePayFactory = new ApplePaySessionFactory();\n        requestSender = createRequestSender();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeSdk = new BraintreeSdk(\n            new BraintreeScriptLoader(getScriptLoader(), window, braintreeSDKVersionManager),\n        );\n        applePayScriptLoader = new ApplePayScriptLoader(getScriptLoader());\n\n        jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(getResponse({})));\n        jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(getResponse({})));\n        jest.spyOn(applePayScriptLoader, 'loadSdk').mockReturnValue(Promise.resolve());\n\n        jest.spyOn(applePayFactory, 'create').mockReturnValue(applePaySession);\n\n        strategy = new ApplePayButtonStrategy(\n            requestSender,\n            paymentIntegrationService,\n            applePayFactory,\n            braintreeSdk,\n            applePayScriptLoader,\n        );\n\n        container = document.createElement('div');\n        container.setAttribute('id', 'applePayCheckoutButton');\n        document.body.appendChild(container);\n    });\n\n    afterEach(() => {\n        document.body.removeChild(container);\n    });\n\n    describe('#initialize()', () => {\n        beforeEach(() => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getApplePay());\n\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n                paymentIntegrationService.getState(),\n            );\n        });\n\n        it('load Apple Pay SDK', async () => {\n            const checkoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n\n            await strategy.initialize(checkoutButtonInitializeOptions);\n\n            expect(paymentIntegrationService.verifyCheckoutSpamProtection).toHaveBeenCalled();\n\n            expect(applePayScriptLoader.loadSdk).toHaveBeenCalled();\n        });\n\n        it('creates the button', async () => {\n            const checkoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n            let children = container.children;\n\n            expect(children).toHaveLength(0);\n\n            await strategy.initialize(checkoutButtonInitializeOptions);\n            children = container.children;\n\n            expect(paymentIntegrationService.verifyCheckoutSpamProtection).toHaveBeenCalled();\n\n            expect(children).toHaveLength(1);\n        });\n\n        it('doesnt call verifyCheckoutSpamProtection if cart undefined', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCart').mockReturnValue(undefined);\n            paymentIntegrationService.verifyCheckoutSpamProtection = jest.fn();\n\n            const checkoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n\n            await strategy.initialize(checkoutButtonInitializeOptions);\n\n            expect(paymentIntegrationService.verifyCheckoutSpamProtection).toHaveBeenCalledTimes(0);\n        });\n\n        it('throws error when payment data is empty', async () => {\n            await expect(\n                strategy.initialize({\n                    containerId: '',\n                    methodId: ApplePayButtonMethodType.APPLEPAY,\n                    params: {},\n                }),\n            ).rejects.toThrow(MissingDataError);\n        });\n\n        it('throws error when params object is empty', async () => {\n            await expect(\n                strategy.initialize({\n                    containerId: '',\n                    params: {},\n                    methodId: ApplePayButtonMethodType.APPLEPAY,\n                }),\n            ).rejects.toThrow(MissingDataError);\n        });\n\n        it('throws error when ApplePay object is empty', async () => {\n            const options = {\n                methodId: 'applepay',\n                containerId: 'applepay',\n                applepay: {} as ApplePayButtonInitializeOptions,\n            };\n\n            await expect(strategy.initialize(options)).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('throws error when ApplePay payment sheet is cancelled', async () => {\n            const CheckoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    expect(applePaySession.begin).toHaveBeenCalled();\n\n                    await applePaySession.oncancel();\n\n                    expect(requestSender.get).toHaveBeenCalled();\n                    expect(paymentIntegrationService.loadCheckout).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('validates merchant successfully', async () => {\n            const CheckoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const validateEvent = {\n                        validationURL: 'test',\n                    } as ApplePayJS.ApplePayValidateMerchantEvent;\n\n                    await applePaySession.onvalidatemerchant(validateEvent);\n\n                    expect(requestSender.post).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('throws error if merchant validation fails', async () => {\n            jest.spyOn(requestSender, 'post').mockRejectedValue(false);\n\n            const CheckoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const validateEvent = {\n                        validationURL: 'test',\n                    } as ApplePayJS.ApplePayValidateMerchantEvent;\n\n                    try {\n                        await applePaySession.onvalidatemerchant(validateEvent);\n                    } catch (error) {\n                        expect(error).toBeInstanceOf(Error);\n                    }\n                }\n            }\n        });\n\n        it('gets shipping contact selected successfully', async () => {\n            const CheckoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingContact: getContactAddress(),\n                    } as ApplePayJS.ApplePayShippingContactSelectedEvent;\n\n                    await applePaySession.onshippingcontactselected(event);\n\n                    expect(applePaySession.completeShippingContactSelection).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('throws error if call to update address fails', async () => {\n            jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockReturnValue(\n                Promise.reject(paymentIntegrationService.getState()),\n            );\n\n            const CheckoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingContact: getContactAddress(),\n                    } as ApplePayJS.ApplePayShippingContactSelectedEvent;\n\n                    try {\n                        await applePaySession.onshippingcontactselected(event);\n                    } catch (error) {\n                        expect(error).toBeInstanceOf(Error);\n                    }\n                }\n            }\n        });\n\n        it('gets shipping method selected successfully', async () => {\n            const CheckoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingMethod: {\n                            label: 'test',\n                            detail: 'test2',\n                            amount: '10',\n                            identifier: '1',\n                        },\n                    } as ApplePayJS.ApplePayShippingMethodSelectedEvent;\n\n                    await applePaySession.onshippingmethodselected(event);\n\n                    expect(applePaySession.completeShippingMethodSelection).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('gets shipping contact selected successfully with a selected shipping option', async () => {\n            jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockReturnValue(\n                Promise.resolve(paymentIntegrationService.getState()),\n            );\n\n            const CheckoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n            const newCheckout = {\n                ...getCheckout(),\n                consignments: [\n                    {\n                        ...getConsignment(),\n                        selectedShippingOption: {\n                            ...getShippingOption(),\n                            description: 'Free Shipping',\n                            additionalDescription: 'Free shipping to your order',\n                            id: '0:61d4bb52f746477e1d4fb411221318c4',\n                        },\n                        availableShippingOptions: [\n                            getShippingOption(),\n                            {\n                                ...getShippingOption(),\n                                description: 'Free Shipping',\n                                additionalDescription: 'Free shipping to your order',\n                                id: '0:61d4bb52f746477e1d4fb411221318c4',\n                            },\n                        ],\n                    },\n                ],\n            };\n            const availableShippingMethods = newCheckout.consignments[0].availableShippingOptions\n                .reverse()\n                .map((option) => ({\n                    label: option.description,\n                    amount: option.cost.toFixed(2),\n                    detail: option.additionalDescription,\n                    identifier: option.id,\n                }));\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n                newCheckout,\n            );\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingContact: getContactAddress(),\n                    } as ApplePayJS.ApplePayShippingContactSelectedEvent;\n\n                    await applePaySession.onshippingcontactselected(event);\n\n                    expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalled();\n                    expect(applePaySession.completeShippingContactSelection).toHaveBeenCalledWith({\n                        newShippingMethods: availableShippingMethods,\n                        newTotal: expect.anything(),\n                        newLineItems: expect.anything(),\n                    });\n                }\n            }\n        });\n\n        it('creates buyNowCart on PDP page on button click for digital product', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n                Promise.resolve(getBuyNowCart()),\n            );\n\n            const CheckoutButtonInitializeOptions =\n                getApplePayButtonInitializationOptionsWithBuyNow();\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    await applePaySession.onpaymentmethodselected();\n\n                    expect(paymentIntegrationService.createBuyNowCart).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('creates buyNowCart on PDP page on button click for physical product', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n                Promise.resolve(getBuyNowCart()),\n            );\n\n            const CheckoutButtonInitializeOptions =\n                getApplePayButtonInitializationOptionsWithBuyNow();\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingContact: getContactAddress(),\n                    } as ApplePayJS.ApplePayShippingContactSelectedEvent;\n\n                    await applePaySession.onpaymentmethodselected();\n                    await applePaySession.onshippingcontactselected(event);\n\n                    expect(paymentIntegrationService.createBuyNowCart).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('creates buyNowCart on PDP page on button click for physical product and execute verifyCheckoutSpamProtection if shouldExecuteSpamCheck is true', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n                Promise.resolve(getBuyNowCart()),\n            );\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue({\n                ...getCheckout(),\n                shouldExecuteSpamCheck: true,\n            });\n\n            const CheckoutButtonInitializeOptions =\n                getApplePayButtonInitializationOptionsWithBuyNow();\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    await applePaySession.onpaymentmethodselected();\n\n                    expect(paymentIntegrationService.createBuyNowCart).toHaveBeenCalled();\n                    expect(\n                        paymentIntegrationService.verifyCheckoutSpamProtection,\n                    ).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('doesnt call applePaySession.onpaymentmethodselected Buy Now flow with for digital item', async () => {\n            applePaySession.onpaymentmethodselected = jest.fn();\n\n            const CheckoutButtonInitializeOptions = {\n                ...getApplePayButtonInitializationOptions(),\n                applepay: {\n                    onPaymentAuthorize: jest.fn(),\n                    buyNowInitializeOptions: {\n                        getBuyNowCartRequestBody: jest.fn().mockReturnValue({\n                            source: CartSource.BuyNow,\n                            lineItems: [\n                                {\n                                    productId: 1,\n                                    quantity: 2,\n                                    optionSelections: {\n                                        optionId: 11,\n                                        optionValue: 11,\n                                    },\n                                },\n                            ],\n                        }),\n                    },\n                    requiresShipping: true,\n                },\n            };\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    expect(applePaySession.onpaymentmethodselected).not.toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('gets shipping options sorted correctly with recommended option first', async () => {\n            jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockReturnValue(\n                Promise.resolve(paymentIntegrationService.getState()),\n            );\n\n            const CheckoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n            const newCheckout = {\n                ...getCheckout(),\n                consignments: [\n                    {\n                        ...getConsignment(),\n                        availableShippingOptions: [\n                            {\n                                ...getShippingOption(),\n                                description: 'Free Shipping',\n                                additionalDescription: 'Free shipping to your order',\n                                isRecommended: false,\n                                id: '0:11111111',\n                            },\n                            {\n                                ...getShippingOption(),\n                                id: '0:22222222',\n                            },\n                        ],\n                    },\n                ],\n            };\n\n            const freeShippingOption = newCheckout.consignments[0].availableShippingOptions[0];\n            const flatFeeShippingOption = newCheckout.consignments[0].availableShippingOptions[1];\n\n            const expectedShippingMethods = [\n                {\n                    label: flatFeeShippingOption.description,\n                    amount: flatFeeShippingOption.cost.toFixed(2),\n                    detail: flatFeeShippingOption.additionalDescription,\n                    identifier: flatFeeShippingOption.id,\n                },\n                {\n                    label: freeShippingOption.description,\n                    amount: freeShippingOption.cost.toFixed(2),\n                    detail: freeShippingOption.additionalDescription,\n                    identifier: freeShippingOption.id,\n                },\n            ];\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n                newCheckout,\n            );\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingContact: getContactAddress(),\n                    } as ApplePayJS.ApplePayShippingContactSelectedEvent;\n\n                    await applePaySession.onshippingcontactselected(event);\n\n                    const actualShippingMethods =\n                        applePaySession.completeShippingContactSelection.mock.calls[0][0]\n                            .newShippingMethods;\n\n                    expect(actualShippingMethods).toEqual(expectedShippingMethods);\n                }\n            }\n        });\n\n        it('gets call to update shipping option in consignment fails', async () => {\n            jest.spyOn(paymentIntegrationService, 'selectShippingOption').mockRejectedValue(false);\n\n            const CheckoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingMethod: {\n                            label: 'test',\n                            detail: 'test2',\n                            amount: '10',\n                            identifier: '1',\n                        },\n                    } as ApplePayJS.ApplePayShippingMethodSelectedEvent;\n\n                    try {\n                        await applePaySession.onshippingmethodselected(event);\n                    } catch (error) {\n                        expect(error).toBeInstanceOf(Error);\n                    }\n                }\n            }\n        });\n\n        it('submits payment when shopper authorises', async () => {\n            const authEvent = {\n                payment: {\n                    billingContact: getContactAddress(),\n                    shippingContact: getContactAddress(),\n                    token: {\n                        paymentData: {},\n                        paymentMethod: {},\n                        transactionIdentifier: {},\n                    },\n                },\n            } as ApplePayJS.ApplePayPaymentAuthorizedEvent;\n            const CheckoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    await applePaySession.onpaymentauthorized(authEvent);\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                    expect(applePaySession.completePayment).toHaveBeenCalled();\n                    expect(\n                        CheckoutButtonInitializeOptions.applepay.onPaymentAuthorize,\n                    ).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('returns an error if autorize payment fails', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(false);\n\n            const authEvent = {\n                payment: {\n                    billingContact: getContactAddress(),\n                    shippingContact: getContactAddress(),\n                    token: {\n                        paymentData: {},\n                        paymentMethod: {},\n                        transactionIdentifier: {},\n                    },\n                },\n            } as ApplePayJS.ApplePayPaymentAuthorizedEvent;\n            const CheckoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    try {\n                        await applePaySession.onpaymentauthorized(authEvent);\n                    } catch (error) {\n                        expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                        expect(applePaySession.completePayment).toHaveBeenCalled();\n                        expect(error).toBeInstanceOf(Error);\n                    }\n                }\n            }\n        });\n\n        describe('button styling', () => {\n            const checkoutButtonInitializeOptions = getApplePayButtonInitializationOptions();\n            const applePayPaymentMethod = getApplePay();\n\n            const mockGetPaymentMethod = (styleOption: ButtonStyleOption) => {\n                applePayPaymentMethod.initializationData.styleOption = styleOption;\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockImplementation(() => applePayPaymentMethod);\n            };\n\n            it('style should be valid', async () => {\n                await strategy.initialize(checkoutButtonInitializeOptions);\n\n                const button = container.firstChild as HTMLElement;\n\n                expect(button.getAttribute('style')).toContain(\n                    '--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;',\n                );\n            });\n\n            it('type should be plain', async () => {\n                await strategy.initialize(checkoutButtonInitializeOptions);\n\n                const button = container.firstChild as HTMLElement;\n\n                expect(button.getAttribute('type')).toContain('plain');\n            });\n\n            it('should be black', async () => {\n                mockGetPaymentMethod(ButtonStyleOption.Black);\n\n                await strategy.initialize(checkoutButtonInitializeOptions);\n\n                const button = container.firstChild as HTMLElement;\n\n                expect(button.getAttribute('buttonstyle')).toContain('black');\n            });\n\n            it('should be white', async () => {\n                mockGetPaymentMethod(ButtonStyleOption.White);\n\n                await strategy.initialize(checkoutButtonInitializeOptions);\n\n                const button = container.firstChild as HTMLElement;\n\n                expect(button.getAttribute('buttonstyle')).toContain('white');\n            });\n\n            it('should be white-outline', async () => {\n                mockGetPaymentMethod(ButtonStyleOption.WhiteBorder);\n\n                await strategy.initialize(checkoutButtonInitializeOptions);\n\n                const button = container.firstChild as HTMLElement;\n\n                expect(button.getAttribute('buttonstyle')).toContain('white-outline');\n            });\n        });\n    });\n\n    describe('#initialize() with braintree gateway', () => {\n        const initializeOptions = getApplePayButtonInitializationOptions();\n\n        const applePayPaymentMethod = getApplePay();\n\n        applePayPaymentMethod.initializationData.gateway = 'braintree';\n        applePayPaymentMethod.clientToken = 'braintree-client-token';\n\n        beforeEach(() => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => applePayPaymentMethod);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValue(\n                getConfig().storeConfig,\n            );\n\n            jest.spyOn(braintreeSdk, 'initialize').mockImplementation(jest.fn());\n            jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockImplementation(() =>\n                Promise.resolve(getDataCollectorMock()),\n            );\n        });\n\n        it('initializes braintree sdk on apple pay strategy initialization', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(braintreeSdk.initialize).toHaveBeenCalled();\n        });\n\n        it('submits payment with provided braintree device data session', async () => {\n            const authEvent = {\n                payment: {\n                    billingContact: getContactAddress(),\n                    shippingContact: getContactAddress(),\n                    token: {\n                        paymentData: {},\n                        paymentMethod: {},\n                        transactionIdentifier: {},\n                    },\n                },\n            } as ApplePayJS.ApplePayPaymentAuthorizedEvent;\n\n            await strategy.initialize(initializeOptions);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            const button = container.firstChild as HTMLElement;\n\n            button.click();\n\n            await applePaySession.onpaymentauthorized(authEvent);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    paymentData: expect.objectContaining({\n                        deviceSessionId: getDeviceDataMock(),\n                    }),\n                }),\n            );\n        });\n\n        it('submits payment with braintree device data session as undefined when braintree respond with an error', async () => {\n            jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockImplementation(() =>\n                Promise.reject(new Error('Braintree Sdk related error')),\n            );\n\n            const authEvent = {\n                payment: {\n                    billingContact: getContactAddress(),\n                    shippingContact: getContactAddress(),\n                    token: {\n                        paymentData: {},\n                        paymentMethod: {},\n                        transactionIdentifier: {},\n                    },\n                },\n            } as ApplePayJS.ApplePayPaymentAuthorizedEvent;\n\n            await strategy.initialize(initializeOptions);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            const button = container.firstChild as HTMLElement;\n\n            button.click();\n\n            await applePaySession.onpaymentauthorized(authEvent);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    paymentData: expect.objectContaining({\n                        deviceSessionId: undefined,\n                    }),\n                }),\n            );\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            await expect(strategy.deinitialize()).resolves.not.toThrow();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-button-strategy.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\nimport { noop } from 'lodash';\n\nimport { BraintreeSdk } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    AddressRequestBody,\n    BuyNowCartCreationError,\n    Cart,\n    Checkout,\n    CheckoutButtonInitializeOptions,\n    CheckoutButtonStrategy,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    Payment,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n    ShippingOption,\n    StoreConfig,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ApplePayGatewayType } from './apple-pay';\nimport ApplePayButtonInitializeOptions, {\n    WithApplePayButtonInitializeOptions,\n} from './apple-pay-button-initialize-options';\nimport ApplePayScriptLoader from './apple-pay-script-loader';\nimport ApplePaySessionFactory from './apple-pay-session-factory';\n\nconst validationEndpoint = (bigPayEndpoint: string) =>\n    `${bigPayEndpoint}/api/public/v1/payments/applepay/validate_merchant`;\n\nenum DefaultLabels {\n    Subtotal = 'Subtotal',\n    Shipping = 'Shipping',\n}\n\nexport enum ButtonStyleOption {\n    Black = 'black',\n    White = 'white',\n    WhiteBorder = 'white-border',\n}\n\nfunction isShippingOptions(options: ShippingOption[] | undefined): options is ShippingOption[] {\n    return options instanceof Array;\n}\n\nconst getButtonStyle = (buttonStyle?: ButtonStyleOption): string => {\n    switch (buttonStyle) {\n        case ButtonStyleOption.White:\n            return 'white';\n\n        case ButtonStyleOption.WhiteBorder:\n            return 'white-outline';\n\n        case ButtonStyleOption.Black:\n        default:\n            return 'black';\n    }\n};\n\nexport default class ApplePayButtonStrategy implements CheckoutButtonStrategy {\n    private _paymentMethod?: PaymentMethod;\n    private _applePayButton?: HTMLElement;\n    private _requiresShipping?: boolean;\n    private _buyNowInitializeOptions?: ApplePayButtonInitializeOptions['buyNowInitializeOptions'];\n    private _onAuthorizeCallback = noop;\n    private _subTotalLabel: string = DefaultLabels.Subtotal;\n    private _shippingLabel: string = DefaultLabels.Shipping;\n\n    constructor(\n        private _requestSender: RequestSender,\n        private _paymentIntegrationService: PaymentIntegrationService,\n        private _sessionFactory: ApplePaySessionFactory,\n        private _braintreeSdk: BraintreeSdk,\n        private _applePayScriptLoader: ApplePayScriptLoader,\n    ) {}\n\n    async initialize(\n        options: CheckoutButtonInitializeOptions & WithApplePayButtonInitializeOptions,\n    ): Promise<void> {\n        const { methodId, containerId, applepay } = options;\n\n        if (!methodId || !applepay) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        await this._applePayScriptLoader.loadSdk();\n\n        const { onPaymentAuthorize, buyNowInitializeOptions, requiresShipping } = applepay;\n\n        this._requiresShipping = requiresShipping;\n\n        this._buyNowInitializeOptions = buyNowInitializeOptions;\n\n        this._onAuthorizeCallback = onPaymentAuthorize;\n\n        if (!buyNowInitializeOptions) {\n            await this._paymentIntegrationService.loadDefaultCheckout();\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 cart = state.getCart();\n\n        if (cart) {\n            await this._paymentIntegrationService.verifyCheckoutSpamProtection();\n        }\n\n        if (\n            this._paymentMethod.initializationData?.gateway === ApplePayGatewayType.BRAINTREE &&\n            this._paymentMethod.clientToken\n        ) {\n            this._braintreeSdk.initialize(this._paymentMethod.clientToken);\n        }\n\n        this._applePayButton = this._createButton(\n            containerId,\n            this._paymentMethod.initializationData?.styleOption,\n        );\n        this._applePayButton.addEventListener('click', this._handleWalletButtonClick.bind(this));\n\n        return Promise.resolve();\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private _createButton(containerId: string, styleOption?: ButtonStyleOption): HTMLElement {\n        const container = document.getElementById(containerId);\n\n        if (!container) {\n            throw new InvalidArgumentError(\n                'Unable to create wallet button without valid container ID.',\n            );\n        }\n\n        const applePayButton = this._createApplePayButtonElement(styleOption);\n\n        container.appendChild(applePayButton);\n\n        return applePayButton;\n    }\n\n    private _createApplePayButtonElement(styleOption?: ButtonStyleOption): HTMLElement {\n        const applePayButton = document.createElement('apple-pay-button');\n\n        applePayButton.setAttribute('buttonstyle', getButtonStyle(styleOption));\n        applePayButton.setAttribute('type', 'plain');\n        applePayButton.setAttribute(\n            'style',\n            '--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;',\n        );\n\n        return applePayButton;\n    }\n\n    private async _handleWalletButtonClick(event: Event) {\n        event.preventDefault();\n\n        if (!this._paymentMethod || !this._paymentMethod.initializationData) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        if (\n            this._buyNowInitializeOptions &&\n            typeof this._buyNowInitializeOptions.getBuyNowCartRequestBody === 'function'\n        ) {\n            const {\n                countryCode,\n                currencyCode,\n                merchantCapabilities,\n                supportedNetworks,\n                storeName,\n            } = this._paymentMethod.initializationData;\n\n            const request = this._getRequestWithEmptyTotal(\n                countryCode,\n                currencyCode,\n                supportedNetworks,\n                merchantCapabilities,\n            );\n\n            if (this._requiresShipping) {\n                request.requiredShippingContactFields?.push('postalAddress');\n            }\n\n            const applePaySession = this._sessionFactory.create(request);\n\n            this._handleApplePayEvents(applePaySession, this._paymentMethod, storeName);\n\n            applePaySession.begin();\n        } else {\n            const state = this._paymentIntegrationService.getState();\n            const cart = state.getCartOrThrow();\n            const config = state.getStoreConfigOrThrow();\n            const checkout = state.getCheckoutOrThrow();\n            const request = this._getBaseRequest(cart, checkout, config, this._paymentMethod);\n            const applePaySession = this._sessionFactory.create(request);\n\n            this._handleApplePayEvents(\n                applePaySession,\n                this._paymentMethod,\n                config.storeProfile.storeName,\n            );\n\n            applePaySession.begin();\n        }\n    }\n\n    private _getRequestWithEmptyTotal(\n        countryCode: string,\n        currencyCode: string,\n        supportedNetworks: string[],\n        merchantCapabilities: ApplePayJS.ApplePayMerchantCapability[],\n    ): ApplePayJS.ApplePayPaymentRequest {\n        return {\n            countryCode,\n            currencyCode,\n            supportedNetworks,\n            merchantCapabilities,\n            total: { label: '', amount: '0', type: 'pending' },\n            requiredBillingContactFields: ['postalAddress'],\n            requiredShippingContactFields: ['email', 'phone'],\n        };\n    }\n\n    private _getBaseRequest(\n        cart: Cart,\n        checkout: Checkout,\n        config: StoreConfig,\n        paymentMethod: PaymentMethod,\n    ): ApplePayJS.ApplePayPaymentRequest {\n        const {\n            storeProfile: { storeCountryCode, storeName },\n        } = config;\n        const {\n            currency: { code, decimalPlaces },\n        } = cart;\n\n        const {\n            initializationData: { merchantCapabilities, supportedNetworks },\n        } = paymentMethod;\n\n        const requiresShipping = cart.lineItems.physicalItems.length > 0;\n        const total: ApplePayJS.ApplePayLineItem = requiresShipping\n            ? {\n                  label: storeName,\n                  amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n                  type: 'pending',\n              }\n            : {\n                  label: storeName,\n                  amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n                  type: 'final',\n              };\n\n        const request: ApplePayJS.ApplePayPaymentRequest = {\n            requiredBillingContactFields: ['postalAddress'],\n            requiredShippingContactFields: ['email', 'phone'],\n            countryCode: storeCountryCode,\n            currencyCode: code,\n            merchantCapabilities,\n            supportedNetworks,\n            lineItems: [],\n            total,\n        };\n\n        if (requiresShipping) {\n            request.requiredShippingContactFields?.push('postalAddress');\n        } else {\n            const lineItems: ApplePayJS.ApplePayLineItem[] = [\n                {\n                    label: this._subTotalLabel,\n                    amount: `${checkout.subtotal.toFixed(decimalPlaces)}`,\n                },\n            ];\n\n            checkout.taxes.forEach((tax) =>\n                lineItems.push({\n                    label: tax.name,\n                    amount: `${tax.amount.toFixed(decimalPlaces)}`,\n                }),\n            );\n\n            request.lineItems = lineItems;\n        }\n\n        return request;\n    }\n\n    private _handleApplePayEvents(\n        applePaySession: ApplePaySession,\n        paymentMethod: PaymentMethod,\n        storeName: string,\n    ) {\n        applePaySession.onvalidatemerchant = async (event) => {\n            try {\n                const { body: merchantSession } = await this._onValidateMerchant(\n                    paymentMethod,\n                    event,\n                );\n\n                applePaySession.completeMerchantValidation(merchantSession);\n            } catch (error) {\n                throw new Error('Merchant validation failed');\n            }\n        };\n\n        if (this._buyNowInitializeOptions && !this._requiresShipping) {\n            applePaySession.onpaymentmethodselected = async () => {\n                await this._createBuyNowCart();\n                this._handlePaymentMethodSelected(applePaySession);\n            };\n        }\n\n        applePaySession.onshippingcontactselected = async (event) => {\n            if (this._buyNowInitializeOptions && this._requiresShipping) {\n                await this._createBuyNowCart();\n            }\n\n            await this._handleShippingContactSelected(applePaySession, storeName, event);\n        };\n\n        applePaySession.onshippingmethodselected = async (event) => {\n            await this._handleShippingMethodSelected(applePaySession, storeName, event);\n        };\n\n        applePaySession.oncancel = async () => {\n            try {\n                const url = `/remote-checkout/${paymentMethod.id}/signout`;\n\n                await this._requestSender.get(url);\n\n                return await this._paymentIntegrationService.loadCheckout();\n            } catch (error) {\n                throw new PaymentMethodCancelledError();\n            }\n        };\n\n        applePaySession.onpaymentauthorized = async (event) =>\n            this._onPaymentAuthorized(event, applePaySession, paymentMethod);\n    }\n\n    private async _createBuyNowCart() {\n        try {\n            const cartRequestBody = this._buyNowInitializeOptions?.getBuyNowCartRequestBody?.();\n\n            if (!cartRequestBody) {\n                throw new MissingDataError(MissingDataErrorType.MissingCart);\n            }\n\n            const buyNowCart = await this._paymentIntegrationService.createBuyNowCart(\n                cartRequestBody,\n            );\n\n            await this._paymentIntegrationService.loadCheckout(buyNowCart.id);\n\n            const state = this._paymentIntegrationService.getState();\n            const { shouldExecuteSpamCheck } = state.getCheckoutOrThrow();\n\n            if (shouldExecuteSpamCheck) {\n                await this._paymentIntegrationService.verifyCheckoutSpamProtection();\n            }\n        } catch (error) {\n            throw new BuyNowCartCreationError();\n        }\n    }\n\n    private _handlePaymentMethodSelected(applePaySession: ApplePaySession) {\n        const state = this._paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        const config = state.getStoreConfigOrThrow();\n        const checkout = state.getCheckoutOrThrow();\n\n        if (!this._paymentMethod || !this._paymentMethod.initializationData) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const request = this._getBaseRequest(cart, checkout, config, this._paymentMethod);\n\n        delete request.total.type;\n\n        applePaySession.completePaymentMethodSelection({\n            newTotal: request.total,\n            newLineItems: request.lineItems,\n        });\n    }\n\n    private async _handleShippingContactSelected(\n        applePaySession: ApplePaySession,\n        storeName: string,\n        event: ApplePayJS.ApplePayShippingContactSelectedEvent,\n    ) {\n        const shippingAddress = this._transformContactToAddress(event.shippingContact);\n\n        try {\n            await this._paymentIntegrationService.updateShippingAddress(shippingAddress);\n        } catch (error) {\n            applePaySession.abort();\n\n            throw new Error('Shipping address update failed');\n        }\n\n        let state = this._paymentIntegrationService.getState();\n        const {\n            currency: { decimalPlaces },\n        } = state.getCartOrThrow();\n        let checkout = state.getCheckoutOrThrow();\n        const selectionShippingOptionId = checkout.consignments[0].selectedShippingOption?.id;\n        const availableOptions = checkout.consignments[0].availableShippingOptions;\n        const selectedOption = availableOptions?.find(({ id }) => id === selectionShippingOptionId);\n        const unselectedOptions = availableOptions?.filter(\n            (option) => option.id !== selectionShippingOptionId,\n        );\n        const shippingOptions: ApplePayJS.ApplePayShippingMethod[] = selectedOption\n            ? [\n                  {\n                      label: selectedOption.description,\n                      amount: `${selectedOption.cost.toFixed(decimalPlaces)}`,\n                      detail: selectedOption.additionalDescription,\n                      identifier: selectedOption.id,\n                  },\n              ]\n            : [];\n\n        if (unselectedOptions) {\n            [\n                ...unselectedOptions.filter((option) => option.isRecommended),\n                ...unselectedOptions.filter((option) => !option.isRecommended),\n            ].forEach((option) =>\n                shippingOptions.push({\n                    label: option.description,\n                    amount: `${option.cost.toFixed(decimalPlaces)}`,\n                    detail: option.additionalDescription,\n                    identifier: option.id,\n                }),\n            );\n        }\n\n        if (!isShippingOptions(availableOptions)) {\n            throw new Error('Shipping options not available.');\n        }\n\n        if (availableOptions.length === 0) {\n            applePaySession.completeShippingContactSelection(\n                ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,\n                [],\n                {\n                    type: 'pending',\n                    label: storeName,\n                    amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n                },\n                [],\n            );\n\n            return;\n        }\n\n        const recommendedOption = availableOptions.find((option) => option.isRecommended);\n\n        const optionId = recommendedOption ? recommendedOption.id : availableOptions[0].id;\n        const selectedOptionId = selectedOption ? selectedOption.id : optionId;\n\n        try {\n            await this._updateShippingOption(selectedOptionId);\n        } catch (error) {\n            throw new Error('Shipping options update failed');\n        }\n\n        state = this._paymentIntegrationService.getState();\n        checkout = state.getCheckoutOrThrow();\n\n        applePaySession.completeShippingContactSelection({\n            newShippingMethods: shippingOptions,\n            newTotal: {\n                type: 'final',\n                label: storeName,\n                amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n            },\n            newLineItems: this._getUpdatedLineItems(checkout, decimalPlaces),\n        });\n    }\n\n    private async _handleShippingMethodSelected(\n        applePaySession: ApplePaySession,\n        storeName: string,\n        event: ApplePayJS.ApplePayShippingMethodSelectedEvent,\n    ) {\n        const {\n            shippingMethod: { identifier: optionId },\n        } = event;\n\n        try {\n            await this._updateShippingOption(optionId);\n        } catch (error) {\n            applePaySession.abort();\n\n            throw new Error('Shipping option selection update failed.');\n        }\n\n        const state = this._paymentIntegrationService.getState();\n        const {\n            currency: { decimalPlaces },\n        } = state.getCartOrThrow();\n        const checkout = state.getCheckoutOrThrow();\n\n        applePaySession.completeShippingMethodSelection({\n            newTotal: {\n                type: 'final',\n                label: storeName,\n                amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n            },\n            newLineItems: this._getUpdatedLineItems(checkout, decimalPlaces),\n        });\n    }\n\n    private _getUpdatedLineItems(\n        checkout: Checkout,\n        decimalPlaces: number,\n    ): ApplePayJS.ApplePayLineItem[] {\n        const lineItems: ApplePayJS.ApplePayLineItem[] = [\n            {\n                label: this._subTotalLabel,\n                amount: `${checkout.subtotal.toFixed(decimalPlaces)}`,\n            },\n        ];\n\n        checkout.taxes.forEach((tax) =>\n            lineItems.push({\n                label: tax.name,\n                amount: `${tax.amount.toFixed(decimalPlaces)}`,\n            }),\n        );\n        lineItems.push({\n            label: this._shippingLabel,\n            amount: `${checkout.shippingCostTotal.toFixed(decimalPlaces)}`,\n        });\n\n        return lineItems;\n    }\n\n    private async _updateShippingOption(optionId: string) {\n        return this._paymentIntegrationService.selectShippingOption(optionId);\n    }\n\n    private async _onValidateMerchant(\n        paymentData: PaymentMethod,\n        event: ApplePayJS.ApplePayValidateMerchantEvent,\n    ) {\n        const body = [\n            `validationUrl=${event.validationURL}`,\n            `merchantIdentifier=${paymentData.initializationData.merchantId}`,\n            `displayName=${paymentData.initializationData.storeName}`,\n            `domainName=${window.location.hostname}`,\n        ].join('&');\n\n        return this._requestSender.post(\n            validationEndpoint(paymentData.initializationData.paymentsUrl),\n            {\n                credentials: false,\n                headers: {\n                    Accept: 'application/json',\n                    'Content-Type': 'application/x-www-form-urlencoded',\n                    'X-XSRF-TOKEN': null,\n                },\n                body,\n            },\n        );\n    }\n\n    private async _onPaymentAuthorized(\n        event: ApplePayJS.ApplePayPaymentAuthorizedEvent,\n        applePaySession: ApplePaySession,\n        paymentMethod: PaymentMethod,\n    ) {\n        const { token, billingContact, shippingContact } = event.payment;\n        const state = this._paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        const requiresShipping = cart.lineItems.physicalItems.length > 0;\n\n        let deviceSessionId: string | undefined;\n\n        if (paymentMethod.initializationData?.gateway === ApplePayGatewayType.BRAINTREE) {\n            deviceSessionId = await this._getBraintreeDeviceData();\n        }\n\n        const payment: Payment = {\n            methodId: paymentMethod.id,\n            paymentData: {\n                deviceSessionId,\n                formattedPayload: {\n                    apple_pay_token: {\n                        payment_data: token.paymentData,\n                        payment_method: token.paymentMethod,\n                        transaction_id: token.transactionIdentifier,\n                    },\n                },\n            },\n        };\n\n        const transformedBillingAddress = this._transformContactToAddress(billingContact);\n        const transformedShippingAddress = this._transformContactToAddress(shippingContact);\n        const emailAddress = shippingContact?.emailAddress;\n        const phone = shippingContact?.phoneNumber || '';\n\n        try {\n            await this._paymentIntegrationService.updateBillingAddress({\n                ...transformedBillingAddress,\n                email: emailAddress,\n                phone,\n            });\n\n            if (requiresShipping) {\n                await this._paymentIntegrationService.updateShippingAddress(\n                    transformedShippingAddress,\n                );\n            }\n\n            await this._paymentIntegrationService.submitOrder({\n                useStoreCredit: false,\n            });\n\n            await this._paymentIntegrationService.submitPayment(payment);\n            applePaySession.completePayment(ApplePaySession.STATUS_SUCCESS);\n\n            return this._onAuthorizeCallback();\n        } catch (error) {\n            applePaySession.completePayment(ApplePaySession.STATUS_FAILURE);\n            throw new Error('Payment cannot complete');\n        }\n    }\n\n    private _transformContactToAddress(\n        contact?: ApplePayJS.ApplePayPaymentContact,\n    ): AddressRequestBody {\n        return {\n            firstName: contact?.givenName || '',\n            lastName: contact?.familyName || '',\n            city: contact?.locality || '',\n            company: '',\n            address1: (contact?.addressLines && contact.addressLines[0]) || '',\n            address2: (contact?.addressLines && contact.addressLines[1]) || '',\n            postalCode: contact?.postalCode || '',\n            countryCode: contact?.countryCode || '',\n            phone: contact?.phoneNumber || '',\n            stateOrProvince: contact?.administrativeArea || '',\n            stateOrProvinceCode: contact?.administrativeArea || '',\n            customFields: [],\n        };\n    }\n\n    private async _getBraintreeDeviceData(): Promise<string | undefined> {\n        try {\n            const { deviceData } = await this._braintreeSdk.getDataCollectorOrThrow();\n\n            return deviceData;\n        } catch (_) {\n            // Don't throw an error to avoid breaking checkout flow\n        }\n    }\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-customer-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the customer step of\n * checkout in order to support ApplePay.\n *\n * When ApplePay is initialized, a sign-in button will be inserted into the\n * DOM. When the customer clicks on it, it will trigger apple sheet\n */\nexport default interface ApplePayCustomerInitializeOptions {\n    /**\n     * The ID of a container which the sign-in button should insert into.\n     */\n    container: string;\n\n    /**\n     * Shipping label to be passed to apple sheet.\n     */\n    shippingLabel?: string;\n\n    /**\n     * Sub total label to be passed to apple sheet.\n     */\n    subtotalLabel?: string;\n\n    /**\n     * A callback that gets called when a payment is successfully completed.\n     */\n    onPaymentAuthorize(): void;\n\n    /**\n     * A callback that gets called if unable to initialize the widget or select\n     * one of the address options provided by the widget.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error?: Error): void;\n\n    /**\n     * A callback that gets called when wallet button clicked\n     */\n    onClick?(): void;\n}\n\nexport interface WithApplePayCustomerInitializeOptions {\n    /**\n     * The options that are required to initialize the customer step of checkout\n     * when using ApplePay.\n     */\n    applepay?: ApplePayCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-customer-strategy.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BraintreeScriptLoader,\n    BraintreeSdk,\n    BraintreeSDKVersionManager,\n    getDataCollectorMock,\n    getDeviceDataMock,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    Consignment,\n    CustomerInitializeOptions,\n    InvalidArgumentError,\n    MissingDataError,\n    PaymentIntegrationService,\n    ShippingOption,\n    StoreConfig,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    getCheckout,\n    getConfig,\n    getConsignment,\n    getResponse,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport ApplePayCustomerStrategy from './apple-pay-customer-strategy';\nimport ApplePayScriptLoader from './apple-pay-script-loader';\nimport ApplePaySessionFactory from './apple-pay-session-factory';\nimport { getApplePay } from './mocks/apple-pay-method.mock';\nimport { MockApplePaySession } from './mocks/apple-pay-payment.mock';\nimport {\n    getApplePayCustomerInitializationOptions,\n    getContactAddress,\n} from './mocks/apple-pay-wallet-button-mock';\n\ndescribe('ApplePayCustomerStrategy', () => {\n    let container: HTMLDivElement;\n    let requestSender: RequestSender;\n    let applePayFactory: ApplePaySessionFactory;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let strategy: ApplePayCustomerStrategy;\n    let applePaySession: MockApplePaySession;\n    let braintreeSdk: BraintreeSdk;\n    let applePayScriptLoader: ApplePayScriptLoader;\n    let storeConfigMock: StoreConfig;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    beforeEach(() => {\n        applePaySession = new MockApplePaySession();\n\n        Object.defineProperty(window, 'ApplePaySession', {\n            writable: true,\n            value: MockApplePaySession,\n        });\n        applePayFactory = new ApplePaySessionFactory();\n        requestSender = createRequestSender();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeSdk = new BraintreeSdk(\n            new BraintreeScriptLoader(getScriptLoader(), window, braintreeSDKVersionManager),\n        );\n        applePayScriptLoader = new ApplePayScriptLoader(getScriptLoader());\n        storeConfigMock = getConfig().storeConfig;\n\n        jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(getResponse({})));\n\n        jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(getResponse({})));\n\n        jest.spyOn(applePayFactory, 'create').mockReturnValue(applePaySession);\n\n        jest.spyOn(applePayScriptLoader, 'loadSdk').mockReturnValue(Promise.resolve());\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfigMock,\n        );\n\n        strategy = new ApplePayCustomerStrategy(\n            requestSender,\n            paymentIntegrationService,\n            applePayFactory,\n            braintreeSdk,\n            applePayScriptLoader,\n        );\n\n        container = document.createElement('div');\n        container.setAttribute('id', 'applePayCheckoutButton');\n        document.body.appendChild(container);\n    });\n\n    afterEach(() => {\n        document.body.removeChild(container);\n    });\n\n    describe('#initialize()', () => {\n        beforeEach(() => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getApplePay());\n        });\n\n        it('load Apple Pay SDK', async () => {\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            expect(applePayScriptLoader.loadSdk).toHaveBeenCalled();\n        });\n\n        it('creates the button', async () => {\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n            let children = container.children;\n\n            expect(children).toHaveLength(0);\n\n            await strategy.initialize(customerInitializeOptions);\n            children = container.children;\n\n            expect(paymentIntegrationService.verifyCheckoutSpamProtection).toHaveBeenCalled();\n            expect(children).toHaveLength(1);\n        });\n\n        it('throws error when payment data is empty', async () => {\n            await expect(strategy.initialize({})).rejects.toThrow(MissingDataError);\n        });\n\n        it('sets up request for digital items', async () => {\n            const cart = getCart();\n\n            cart.lineItems.physicalItems = [];\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                cart,\n            );\n\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n\n                await strategy.initialize(customerInitializeOptions);\n\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    expect(applePaySession.begin).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('does not start another apple pay session if one is in place already', async () => {\n            const cart = getCart();\n\n            cart.lineItems.physicalItems = [];\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                cart,\n            );\n\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n\n                await strategy.initialize(customerInitializeOptions);\n\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                button.click();\n\n                button.click();\n\n                expect(applePaySession.begin).toHaveBeenCalledTimes(1);\n            }\n        });\n\n        it('throws error when applepay object is empty', async () => {\n            const options = {\n                methodId: 'applepay',\n                applepay: {},\n            } as CustomerInitializeOptions;\n\n            await expect(strategy.initialize(options)).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('throws error when Apple Pay payment sheet is cancelled', async () => {\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    expect(applePaySession.begin).toHaveBeenCalled();\n\n                    await applePaySession.oncancel();\n\n                    expect(requestSender.get).toHaveBeenCalled();\n                    expect(paymentIntegrationService.loadCheckout).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('throws payment method cancelled error if loadCheckout fails', async () => {\n            jest.spyOn(requestSender, 'get').mockRejectedValue(false);\n\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    expect(applePaySession.begin).toHaveBeenCalled();\n\n                    try {\n                        await applePaySession.oncancel();\n                    } catch (err) {\n                        expect(customerInitializeOptions.applepay.onError).toHaveBeenCalled();\n                    }\n                }\n            }\n        });\n\n        it('validates merchant successfully', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                getCart(),\n            );\n\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const validateEvent = {\n                        validationURL: 'test',\n                    } as ApplePayJS.ApplePayValidateMerchantEvent;\n\n                    await applePaySession.onvalidatemerchant(validateEvent);\n\n                    expect(requestSender.post).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('triggers onClick callback provided through initialization options', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                getCart(),\n            );\n\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                jest.spyOn(customerInitializeOptions.applepay, 'onClick');\n\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    expect(customerInitializeOptions.applepay.onClick).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('throws error if merchant validation fails', async () => {\n            jest.spyOn(requestSender, 'post').mockRejectedValue(false);\n\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const validateEvent = {\n                        validationURL: 'test',\n                    } as ApplePayJS.ApplePayValidateMerchantEvent;\n\n                    await applePaySession.onvalidatemerchant(validateEvent);\n\n                    expect(customerInitializeOptions.applepay.onError).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('gets shipping contact selected successfully', async () => {\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingContact: getContactAddress(),\n                    } as ApplePayJS.ApplePayShippingContactSelectedEvent;\n\n                    await applePaySession.onshippingcontactselected(event);\n\n                    expect(applePaySession.completeShippingContactSelection).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('gets shipping contact selected successfully with a selected shipping option', async () => {\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n            const newCheckout = {\n                ...getCheckout(),\n                consignments: [\n                    {\n                        ...getConsignment(),\n                        selectedShippingOption: {\n                            ...getShippingOption(),\n                            description: 'Free Shipping',\n                            additionalDescription: 'Free shipping to your order',\n                            id: '0:61d4bb52f746477e1d4fb41127361823',\n                        },\n                        availableShippingOptions: [\n                            getShippingOption(),\n                            {\n                                ...getShippingOption(),\n                                description: 'Free Shipping',\n                                additionalDescription: 'Free shipping to your order',\n                                id: '0:61d4bb52f746477e1d4fb41127361823',\n                            },\n                        ],\n                    },\n                ],\n            };\n            const availableShippingMethods = newCheckout.consignments[0].availableShippingOptions\n                .reverse()\n                .map((option) => ({\n                    label: option.description,\n                    amount: option.cost.toFixed(2),\n                    detail: option.additionalDescription,\n                    identifier: option.id,\n                }));\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n                newCheckout,\n            );\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingContact: getContactAddress(),\n                    } as ApplePayJS.ApplePayShippingContactSelectedEvent;\n\n                    await applePaySession.onshippingcontactselected(event);\n\n                    expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                        '0:61d4bb52f746477e1d4fb41127361823',\n                    );\n                    expect(applePaySession.completeShippingContactSelection).toHaveBeenCalledWith({\n                        newShippingMethods: availableShippingMethods,\n                        newTotal: expect.anything(),\n                        newLineItems: expect.anything(),\n                    });\n                }\n            }\n        });\n\n        it('gets shipping options sorted correctly with recommended option first', async () => {\n            jest.spyOn(paymentIntegrationService, 'updateShippingAddress');\n\n            const CheckoutButtonInitializeOptions = getApplePayCustomerInitializationOptions();\n            const newCheckout = {\n                ...getCheckout(),\n                consignments: [\n                    {\n                        ...getConsignment(),\n                        availableShippingOptions: [\n                            {\n                                ...getShippingOption(),\n                                description: 'Free Shipping',\n                                additionalDescription: 'Free shipping to your order',\n                                isRecommended: false,\n                                id: '0:1111111',\n                            },\n                            {\n                                ...getShippingOption(),\n                                id: '0:22222222',\n                            },\n                        ],\n                    },\n                ],\n            };\n\n            const freeShippingOption = newCheckout.consignments[0].availableShippingOptions[0];\n            const flatFeeShippingOption = newCheckout.consignments[0].availableShippingOptions[1];\n\n            const expectedShippingMethods = [\n                {\n                    label: flatFeeShippingOption.description,\n                    amount: flatFeeShippingOption.cost.toFixed(2),\n                    detail: flatFeeShippingOption.additionalDescription,\n                    identifier: flatFeeShippingOption.id,\n                },\n                {\n                    label: freeShippingOption.description,\n                    amount: freeShippingOption.cost.toFixed(2),\n                    detail: freeShippingOption.additionalDescription,\n                    identifier: freeShippingOption.id,\n                },\n            ];\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n                newCheckout,\n            );\n\n            await strategy.initialize(CheckoutButtonInitializeOptions);\n\n            if (CheckoutButtonInitializeOptions.applepay) {\n                const button = container.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingContact: getContactAddress(),\n                    } as ApplePayJS.ApplePayShippingContactSelectedEvent;\n\n                    await applePaySession.onshippingcontactselected(event);\n\n                    const actualShippingMethods =\n                        applePaySession.completeShippingContactSelection.mock.calls[0][0]\n                            .newShippingMethods;\n\n                    expect(actualShippingMethods).toEqual(expectedShippingMethods);\n                }\n            }\n        });\n\n        it('throws error if call to update address fails', async () => {\n            jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockReturnValue(\n                Promise.reject(paymentIntegrationService.getState()),\n            );\n\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingContact: getContactAddress(),\n                    } as ApplePayJS.ApplePayShippingContactSelectedEvent;\n\n                    await applePaySession.onshippingcontactselected(event);\n\n                    expect(customerInitializeOptions.applepay.onError).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('gets shipping method selected successfully', async () => {\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingMethod: {\n                            label: 'test',\n                            detail: 'test2',\n                            amount: '10',\n                            identifier: '1',\n                        },\n                    } as ApplePayJS.ApplePayShippingMethodSelectedEvent;\n\n                    await applePaySession.onshippingmethodselected(event);\n\n                    expect(applePaySession.completeShippingMethodSelection).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('gets call to update shipping option in consignment fails', async () => {\n            jest.spyOn(paymentIntegrationService, 'selectShippingOption').mockRejectedValue(false);\n\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingMethod: {\n                            label: 'test',\n                            detail: 'test2',\n                            amount: '10',\n                            identifier: '1',\n                        },\n                    } as ApplePayJS.ApplePayShippingMethodSelectedEvent;\n\n                    await applePaySession.onshippingmethodselected(event);\n\n                    expect(customerInitializeOptions.applepay.onError).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('submits payment when shopper authorises', async () => {\n            jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockReturnValue(\n                Promise.resolve(paymentIntegrationService.getState()),\n            );\n\n            const authEvent = {\n                payment: {\n                    billingContact: getContactAddress(),\n                    shippingContact: getContactAddress(),\n                    token: {\n                        paymentData: {},\n                        paymentMethod: {},\n                        transactionIdentifier: {},\n                    },\n                },\n            } as ApplePayJS.ApplePayPaymentAuthorizedEvent;\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n                    await applePaySession.onpaymentauthorized(authEvent);\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                    expect(applePaySession.completePayment).toHaveBeenCalled();\n                    expect(\n                        customerInitializeOptions.applepay.onPaymentAuthorize,\n                    ).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('returns an error if autorize payment fails', async () => {\n            jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockReturnValue(\n                Promise.resolve(paymentIntegrationService.getState()),\n            );\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(false);\n\n            const authEvent = {\n                payment: {\n                    billingContact: getContactAddress(),\n                    shippingContact: getContactAddress(),\n                    token: {\n                        paymentData: {},\n                        paymentMethod: {},\n                        transactionIdentifier: {},\n                    },\n                },\n            } as ApplePayJS.ApplePayPaymentAuthorizedEvent;\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n                    await applePaySession.onpaymentauthorized(authEvent);\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                    expect(applePaySession.completePayment).toHaveBeenCalled();\n                    expect(customerInitializeOptions.applepay.onError).toHaveBeenCalled();\n                }\n            }\n        });\n\n        describe('initialize apple pay with braintree gateway', () => {\n            const initializeOptions = getApplePayCustomerInitializationOptions();\n\n            const applePayPaymentMethod = getApplePay();\n\n            applePayPaymentMethod.initializationData.gateway = 'braintree';\n            applePayPaymentMethod.clientToken = 'braintree-client-token';\n\n            beforeEach(() => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockImplementation(() => applePayPaymentMethod);\n\n                jest.spyOn(braintreeSdk, 'initialize').mockImplementation(jest.fn());\n                jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockImplementation(() =>\n                    Promise.resolve(getDataCollectorMock()),\n                );\n            });\n\n            it('initializes braintree sdk on apple pay strategy initialization', async () => {\n                await strategy.initialize(initializeOptions);\n\n                expect(braintreeSdk.initialize).toHaveBeenCalled();\n            });\n\n            it('submits payment with provided braintree device data session', async () => {\n                const authEvent = {\n                    payment: {\n                        billingContact: getContactAddress(),\n                        shippingContact: getContactAddress(),\n                        token: {\n                            paymentData: {},\n                            paymentMethod: {},\n                            transactionIdentifier: {},\n                        },\n                    },\n                } as ApplePayJS.ApplePayPaymentAuthorizedEvent;\n\n                await strategy.initialize(initializeOptions);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                const button = container.firstChild as HTMLElement;\n\n                button.click();\n\n                await applePaySession.onpaymentauthorized(authEvent);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            deviceSessionId: getDeviceDataMock(),\n                        }),\n                    }),\n                );\n            });\n\n            it('submits payment with braintree device data session as undefined when braintree respond with an error', async () => {\n                jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockImplementation(() =>\n                    Promise.reject(new Error('Braintree Sdk related error')),\n                );\n\n                const authEvent = {\n                    payment: {\n                        billingContact: getContactAddress(),\n                        shippingContact: getContactAddress(),\n                        token: {\n                            paymentData: {},\n                            paymentMethod: {},\n                            transactionIdentifier: {},\n                        },\n                    },\n                } as ApplePayJS.ApplePayPaymentAuthorizedEvent;\n\n                await strategy.initialize(initializeOptions);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                const button = container.firstChild as HTMLElement;\n\n                button.click();\n\n                await applePaySession.onpaymentauthorized(authEvent);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            deviceSessionId: undefined,\n                        }),\n                    }),\n                );\n            });\n        });\n    });\n\n    describe('#intialize edge cases', () => {\n        beforeEach(() => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getApplePay());\n        });\n\n        it('throws error if shipping options are undefined', async () => {\n            const checkout = getCheckout();\n\n            checkout.consignments = [{}] as Consignment[];\n            jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n                checkout,\n            );\n\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingContact: getContactAddress(),\n                    } as ApplePayJS.ApplePayShippingContactSelectedEvent;\n\n                    try {\n                        await applePaySession.onshippingcontactselected(event);\n                    } catch (err) {\n                        expect(err).toBeInstanceOf(Error);\n                    }\n                }\n            }\n        });\n\n        it('fires event if no shipping options are available', async () => {\n            const checkout = getCheckout();\n            const options = [] as ShippingOption[];\n\n            checkout.consignments = [{ availableShippingOptions: options }] as Consignment[];\n            jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n                checkout,\n            );\n\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingContact: getContactAddress(),\n                    } as ApplePayJS.ApplePayShippingContactSelectedEvent;\n\n                    await applePaySession.onshippingcontactselected(event);\n\n                    expect(applePaySession.completeShippingContactSelection).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('throws error if unable to update shipping option', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n                getCheckout(),\n            );\n            jest.spyOn(paymentIntegrationService, 'selectShippingOption').mockRejectedValue(false);\n\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n\n                    const event = {\n                        shippingContact: getContactAddress(),\n                    } as ApplePayJS.ApplePayShippingContactSelectedEvent;\n\n                    await applePaySession.onshippingcontactselected(event);\n\n                    expect(customerInitializeOptions.applepay.onError).toHaveBeenCalled();\n                }\n            }\n        });\n\n        it('submits payment when shopper authorises without phone number', async () => {\n            jest.spyOn(paymentIntegrationService, 'updateShippingAddress');\n\n            const authEvent = {\n                payment: {\n                    billingContact: undefined,\n                    shippingContact: undefined,\n                    token: {\n                        paymentData: {},\n                        paymentMethod: {},\n                        transactionIdentifier: {},\n                    },\n                },\n            } as ApplePayJS.ApplePayPaymentAuthorizedEvent;\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            await strategy.initialize(customerInitializeOptions);\n\n            if (customerInitializeOptions.applepay) {\n                const buttonContainer = document.getElementById(\n                    customerInitializeOptions.applepay.container,\n                );\n                const button = buttonContainer?.firstChild as HTMLElement;\n\n                if (button) {\n                    button.click();\n                    await applePaySession.onpaymentauthorized(authEvent);\n\n                    expect(\n                        paymentIntegrationService.verifyCheckoutSpamProtection,\n                    ).toHaveBeenCalled();\n                    expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                }\n            }\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('throws error if trying to sign in programmatically', () => {\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            strategy.initialize(customerInitializeOptions);\n\n            expect(() => strategy.signIn()).toThrow();\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('throws error if trying to sign out programmatically', () => {\n            const customerInitializeOptions = getApplePayCustomerInitializationOptions();\n\n            strategy.initialize(customerInitializeOptions);\n\n            expect(() => strategy.signOut()).toThrow();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout', () => {\n        it('runs continue callback automatically on execute payment method checkout', async () => {\n            const mockCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({\n                continueWithCheckoutCallback: mockCallback,\n            });\n\n            expect(mockCallback.mock.calls).toHaveLength(1);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-customer-strategy.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\nimport { noop } from 'lodash';\n\nimport { BraintreeSdk } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    AddressRequestBody,\n    Cart,\n    Checkout,\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    ExecutePaymentMethodCheckoutOptions,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotImplementedError,\n    Payment,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n    ShippingOption,\n    StoreConfig,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ApplePayGatewayType } from './apple-pay';\nimport { WithApplePayCustomerInitializeOptions } from './apple-pay-customer-initialize-options';\nimport ApplePayScriptLoader from './apple-pay-script-loader';\nimport ApplePaySessionFactory from './apple-pay-session-factory';\n\nconst validationEndpoint = (bigPayEndpoint: string) =>\n    `${bigPayEndpoint}/api/public/v1/payments/applepay/validate_merchant`;\n\nenum DefaultLabels {\n    Subtotal = 'Subtotal',\n    Shipping = 'Shipping',\n}\n\nfunction isShippingOptions(options: ShippingOption[] | undefined): options is ShippingOption[] {\n    return options instanceof Array;\n}\n\nexport default class ApplePayCustomerStrategy implements CustomerStrategy {\n    private _paymentMethod?: PaymentMethod;\n    private _applePayButton?: HTMLElement;\n    private _onAuthorizeCallback = noop;\n    private _onError = noop;\n    private _onClick = noop;\n    private _subTotalLabel: string = DefaultLabels.Subtotal;\n    private _shippingLabel: string = DefaultLabels.Shipping;\n    private _hasApplePaySession = false;\n\n    constructor(\n        private _requestSender: RequestSender,\n        private _paymentIntegrationService: PaymentIntegrationService,\n        private _sessionFactory: ApplePaySessionFactory,\n        private _braintreeSdk: BraintreeSdk,\n        private _applePayScriptLoader: ApplePayScriptLoader,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions & WithApplePayCustomerInitializeOptions,\n    ): Promise<void> {\n        const { methodId, applepay } = options;\n\n        if (!methodId || !applepay) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            container,\n            shippingLabel,\n            subtotalLabel,\n            onError = noop,\n            onClick = noop,\n            onPaymentAuthorize,\n        } = applepay;\n\n        this._shippingLabel = shippingLabel || DefaultLabels.Shipping;\n        this._subTotalLabel = subtotalLabel || DefaultLabels.Subtotal;\n        this._onAuthorizeCallback = onPaymentAuthorize;\n        this._onError = onError;\n        this._onClick = onClick;\n\n        let state = this._paymentIntegrationService.getState();\n\n        await this._applePayScriptLoader.loadSdk();\n\n        try {\n            this._paymentMethod = state.getPaymentMethodOrThrow(methodId);\n        } catch (_e) {\n            state = await this._paymentIntegrationService.loadPaymentMethod(methodId);\n            this._paymentMethod = state.getPaymentMethodOrThrow(methodId);\n        }\n\n        await this._paymentIntegrationService.verifyCheckoutSpamProtection();\n\n        this._applePayButton = this._createButton(container);\n        this._applePayButton.addEventListener('click', this._handleWalletButtonClick.bind(this));\n\n        if (\n            this._paymentMethod.initializationData?.gateway === ApplePayGatewayType.BRAINTREE &&\n            this._paymentMethod.clientToken\n        ) {\n            this._braintreeSdk.initialize(this._paymentMethod.clientToken);\n        }\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    signIn(): Promise<void> {\n        throw new NotImplementedError(\n            'In order to sign in via Apple, the shopper must click on \"Apple Pay\" button.',\n        );\n    }\n\n    signOut(): Promise<void> {\n        throw new NotImplementedError('Need to do signout via apple.');\n    }\n\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n        options?.continueWithCheckoutCallback?.();\n\n        return Promise.resolve();\n    }\n\n    private _createButton(containerId: string): HTMLElement {\n        const container = document.getElementById(containerId);\n\n        if (!container) {\n            throw new InvalidArgumentError(\n                'Unable to create sign-in button without valid container ID.',\n            );\n        }\n\n        const applePayButton = this._createApplePayButtonElement();\n\n        container.appendChild(applePayButton);\n\n        return applePayButton;\n    }\n\n    private _createApplePayButtonElement(): HTMLElement {\n        const applePayButton = document.createElement('apple-pay-button');\n\n        applePayButton.setAttribute('buttonstyle', 'black');\n        applePayButton.setAttribute('type', 'plain');\n        applePayButton.setAttribute(\n            'style',\n            '--apple-pay-button-width: 100%; --apple-pay-button-height: 40px; --apple-pay-button-border-radius: 4px;',\n        );\n\n        return applePayButton;\n    }\n\n    private _handleWalletButtonClick(event: Event) {\n        event.preventDefault();\n\n        if (this._hasApplePaySession) {\n            return;\n        }\n\n        this._onClick();\n\n        const state = this._paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        const config = state.getStoreConfigOrThrow();\n        const checkout = state.getCheckoutOrThrow();\n\n        if (!this._paymentMethod || !this._paymentMethod.initializationData) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const request = this._getBaseRequest(cart, checkout, config, this._paymentMethod);\n        const applePaySession = this._sessionFactory.create(request);\n\n        this._handleApplePayEvents(applePaySession, this._paymentMethod, config);\n\n        applePaySession.begin();\n        this._hasApplePaySession = true;\n    }\n\n    private _getBaseRequest(\n        cart: Cart,\n        checkout: Checkout,\n        config: StoreConfig,\n        paymentMethod: PaymentMethod,\n    ): ApplePayJS.ApplePayPaymentRequest {\n        const {\n            storeProfile: { storeCountryCode, storeName },\n        } = config;\n        const {\n            currency: { code, decimalPlaces },\n        } = cart;\n\n        const {\n            initializationData: { merchantCapabilities, supportedNetworks },\n        } = paymentMethod;\n\n        const requiresShipping = cart.lineItems.physicalItems.length > 0;\n        const total: ApplePayJS.ApplePayLineItem = requiresShipping\n            ? {\n                  label: storeName,\n                  amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n                  type: 'pending',\n              }\n            : {\n                  label: storeName,\n                  amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n                  type: 'final',\n              };\n\n        const request: ApplePayJS.ApplePayPaymentRequest = {\n            requiredBillingContactFields: ['postalAddress'],\n            requiredShippingContactFields: ['email', 'phone'],\n            countryCode: storeCountryCode,\n            currencyCode: code,\n            merchantCapabilities,\n            supportedNetworks,\n            lineItems: [],\n            total,\n        };\n\n        if (requiresShipping) {\n            request.requiredShippingContactFields?.push('postalAddress');\n        } else {\n            const lineItems: ApplePayJS.ApplePayLineItem[] = [\n                {\n                    label: this._subTotalLabel,\n                    amount: `${checkout.subtotal.toFixed(decimalPlaces)}`,\n                },\n            ];\n\n            checkout.taxes.forEach((tax) =>\n                lineItems.push({\n                    label: tax.name,\n                    amount: `${tax.amount.toFixed(decimalPlaces)}`,\n                }),\n            );\n\n            request.lineItems = lineItems;\n        }\n\n        return request;\n    }\n\n    private _handleApplePayEvents(\n        applePaySession: ApplePaySession,\n        paymentMethod: PaymentMethod,\n        config: StoreConfig,\n    ) {\n        applePaySession.onvalidatemerchant = async (event) => {\n            try {\n                const { body: merchantSession } = await this._onValidateMerchant(\n                    paymentMethod,\n                    event,\n                );\n\n                applePaySession.completeMerchantValidation(merchantSession);\n            } catch (err) {\n                this._onError(err);\n            }\n        };\n\n        applePaySession.onshippingcontactselected = async (event) =>\n            this._handleShippingContactSelected(applePaySession, config, event);\n\n        applePaySession.onshippingmethodselected = async (event) =>\n            this._handleShippingMethodSelected(applePaySession, config, event);\n\n        applePaySession.oncancel = async () => {\n            this._hasApplePaySession = false;\n\n            try {\n                const url = `/remote-checkout/${paymentMethod.id}/signout`;\n\n                await this._requestSender.get(url);\n\n                return await this._paymentIntegrationService.loadCheckout();\n            } catch (error) {\n                return this._onError(new PaymentMethodCancelledError());\n            }\n        };\n\n        applePaySession.onpaymentauthorized = async (event) =>\n            this._onPaymentAuthorized(event, applePaySession, paymentMethod);\n    }\n\n    private async _handleShippingContactSelected(\n        applePaySession: ApplePaySession,\n        config: StoreConfig,\n        event: ApplePayJS.ApplePayShippingContactSelectedEvent,\n    ) {\n        const shippingAddress = this._transformContactToAddress(event.shippingContact);\n\n        try {\n            await this._paymentIntegrationService.updateShippingAddress(shippingAddress);\n        } catch (error) {\n            applePaySession.abort();\n            this._hasApplePaySession = false;\n\n            return this._onError(error);\n        }\n\n        const {\n            storeProfile: { storeName },\n        } = config;\n        let state = this._paymentIntegrationService.getState();\n        const {\n            currency: { decimalPlaces },\n        } = state.getCartOrThrow();\n        let checkout = state.getCheckoutOrThrow();\n        const selectionShippingOptionId = checkout.consignments[0].selectedShippingOption?.id;\n        const availableOptions = checkout.consignments[0].availableShippingOptions;\n        const selectedOption = availableOptions?.find(({ id }) => id === selectionShippingOptionId);\n        const unselectedOptions = availableOptions?.filter(\n            (option) => option.id !== selectionShippingOptionId,\n        );\n        const shippingOptions: ApplePayJS.ApplePayShippingMethod[] = selectedOption\n            ? [\n                  {\n                      label: selectedOption.description,\n                      amount: `${selectedOption.cost.toFixed(decimalPlaces)}`,\n                      detail: selectedOption.additionalDescription,\n                      identifier: selectedOption.id,\n                  },\n              ]\n            : [];\n\n        if (unselectedOptions) {\n            [\n                ...unselectedOptions.filter((option) => option.isRecommended),\n                ...unselectedOptions.filter((option) => !option.isRecommended),\n            ].forEach((option) =>\n                shippingOptions.push({\n                    label: option.description,\n                    amount: `${option.cost.toFixed(decimalPlaces)}`,\n                    detail: option.additionalDescription,\n                    identifier: option.id,\n                }),\n            );\n        }\n\n        if (!isShippingOptions(availableOptions)) {\n            throw new Error('Shipping options not available.');\n        }\n\n        if (availableOptions.length === 0) {\n            applePaySession.completeShippingContactSelection(\n                ApplePaySession.STATUS_INVALID_SHIPPING_POSTAL_ADDRESS,\n                [],\n                {\n                    type: 'pending',\n                    label: storeName,\n                    amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n                },\n                [],\n            );\n\n            return;\n        }\n\n        const recommendedOption = availableOptions.find((option) => option.isRecommended);\n\n        const optionId = recommendedOption ? recommendedOption.id : availableOptions[0].id;\n        const selectedOptionId = selectedOption ? selectedOption.id : optionId;\n\n        try {\n            await this._updateShippingOption(selectedOptionId);\n        } catch (error) {\n            return this._onError(error);\n        }\n\n        state = this._paymentIntegrationService.getState();\n        checkout = state.getCheckoutOrThrow();\n\n        applePaySession.completeShippingContactSelection({\n            newShippingMethods: shippingOptions,\n            newTotal: {\n                type: 'final',\n                label: storeName,\n                amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n            },\n            newLineItems: this._getUpdatedLineItems(checkout, decimalPlaces),\n        });\n    }\n\n    private async _handleShippingMethodSelected(\n        applePaySession: ApplePaySession,\n        config: StoreConfig,\n        event: ApplePayJS.ApplePayShippingMethodSelectedEvent,\n    ) {\n        const {\n            storeProfile: { storeName },\n        } = config;\n        const {\n            shippingMethod: { identifier: optionId },\n        } = event;\n\n        try {\n            await this._updateShippingOption(optionId);\n        } catch (error) {\n            applePaySession.abort();\n            this._hasApplePaySession = false;\n\n            return this._onError(error);\n        }\n\n        const state = this._paymentIntegrationService.getState();\n        const {\n            currency: { decimalPlaces },\n        } = state.getCartOrThrow();\n        const checkout = state.getCheckoutOrThrow();\n\n        applePaySession.completeShippingMethodSelection({\n            newTotal: {\n                type: 'final',\n                label: storeName,\n                amount: `${checkout.grandTotal.toFixed(decimalPlaces)}`,\n            },\n            newLineItems: this._getUpdatedLineItems(checkout, decimalPlaces),\n        });\n    }\n\n    private _getUpdatedLineItems(\n        checkout: Checkout,\n        decimalPlaces: number,\n    ): ApplePayJS.ApplePayLineItem[] {\n        const lineItems: ApplePayJS.ApplePayLineItem[] = [\n            {\n                label: this._subTotalLabel,\n                amount: `${checkout.subtotal.toFixed(decimalPlaces)}`,\n            },\n        ];\n\n        checkout.taxes.forEach((tax) =>\n            lineItems.push({\n                label: tax.name,\n                amount: `${tax.amount.toFixed(decimalPlaces)}`,\n            }),\n        );\n        lineItems.push({\n            label: this._shippingLabel,\n            amount: `${checkout.shippingCostTotal.toFixed(decimalPlaces)}`,\n        });\n\n        return lineItems;\n    }\n\n    private async _updateShippingOption(optionId: string) {\n        return this._paymentIntegrationService.selectShippingOption(optionId);\n    }\n\n    private async _onValidateMerchant(\n        paymentData: PaymentMethod,\n        event: ApplePayJS.ApplePayValidateMerchantEvent,\n    ) {\n        const body = [\n            `validationUrl=${event.validationURL}`,\n            `merchantIdentifier=${paymentData.initializationData.merchantId}`,\n            `displayName=${paymentData.initializationData.storeName}`,\n            `domainName=${window.location.hostname}`,\n        ].join('&');\n\n        return this._requestSender.post(\n            validationEndpoint(paymentData.initializationData.paymentsUrl),\n            {\n                credentials: false,\n                headers: {\n                    Accept: 'application/json',\n                    'Content-Type': 'application/x-www-form-urlencoded',\n                    'X-XSRF-TOKEN': null,\n                },\n                body,\n            },\n        );\n    }\n\n    private async _onPaymentAuthorized(\n        event: ApplePayJS.ApplePayPaymentAuthorizedEvent,\n        applePaySession: ApplePaySession,\n        paymentMethod: PaymentMethod,\n    ) {\n        const { token, billingContact, shippingContact } = event.payment;\n        const state = this._paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        const requiresShipping = cart.lineItems.physicalItems.length > 0;\n\n        let deviceSessionId: string | undefined;\n\n        if (paymentMethod.initializationData?.gateway === ApplePayGatewayType.BRAINTREE) {\n            deviceSessionId = await this._getBraintreeDeviceData();\n        }\n\n        const payment: Payment = {\n            methodId: paymentMethod.id,\n            paymentData: {\n                deviceSessionId,\n                formattedPayload: {\n                    apple_pay_token: {\n                        payment_data: token.paymentData,\n                        payment_method: token.paymentMethod,\n                        transaction_id: token.transactionIdentifier,\n                    },\n                },\n            },\n        };\n\n        const transformedBillingAddress = this._transformContactToAddress(billingContact);\n        const transformedShippingAddress = this._transformContactToAddress(shippingContact);\n        const emailAddress = shippingContact?.emailAddress;\n        const phone = shippingContact?.phoneNumber || '';\n\n        try {\n            await this._paymentIntegrationService.updateBillingAddress({\n                ...transformedBillingAddress,\n                email: emailAddress,\n                phone,\n            });\n\n            if (requiresShipping) {\n                await this._paymentIntegrationService.updateShippingAddress(\n                    transformedShippingAddress,\n                );\n            }\n\n            await this._paymentIntegrationService.submitOrder({\n                useStoreCredit: false,\n            });\n\n            await this._paymentIntegrationService.submitPayment(payment);\n            applePaySession.completePayment(ApplePaySession.STATUS_SUCCESS);\n\n            return this._onAuthorizeCallback();\n        } catch (error) {\n            applePaySession.completePayment(ApplePaySession.STATUS_FAILURE);\n\n            return this._onError(error);\n        }\n    }\n\n    private _transformContactToAddress(\n        contact?: ApplePayJS.ApplePayPaymentContact,\n    ): AddressRequestBody {\n        return {\n            firstName: contact?.givenName || '',\n            lastName: contact?.familyName || '',\n            city: contact?.locality || '',\n            company: '',\n            address1: (contact?.addressLines && contact.addressLines[0]) || '',\n            address2: (contact?.addressLines && contact.addressLines[1]) || '',\n            postalCode: contact?.postalCode || '',\n            countryCode: contact?.countryCode || '',\n            phone: contact?.phoneNumber || '',\n            stateOrProvince: contact?.administrativeArea || '',\n            stateOrProvinceCode: contact?.administrativeArea || '',\n            customFields: [],\n        };\n    }\n\n    private async _getBraintreeDeviceData(): Promise<string | undefined> {\n        try {\n            const { deviceData } = await this._braintreeSdk.getDataCollectorOrThrow();\n\n            return deviceData;\n        } catch (_) {\n            // Don't throw an error to avoid breaking checkout flow\n        }\n    }\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-payment-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the Applepay payment method with:\n *\n * 1) ApplePay:\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'applepay',\n *     applepay: {\n *         shippingLabel: 'Shipping',\n *         subtotalLabel: 'Sub total',\n *     }\n * });\n * ```\n */\nexport default interface ApplePayPaymentInitializeOptions {\n    /**\n     * Shipping label to be passed to apple sheet.\n     */\n    shippingLabel?: string;\n\n    /**\n     * Store credit label to be passed to apple sheet.\n     */\n    storeCreditLabel?: string;\n\n    /**\n     * Sub total label to be passed to apple sheet.\n     */\n    subtotalLabel?: string;\n}\n\nexport interface WithApplePayPaymentInitializeOptions {\n    /**\n     * The options that are required to initialize the Apple Pay payment\n     * method. They can be omitted unless you need to support Apple Pay.\n     */\n    applepay?: ApplePayPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-payment-strategy.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\nimport { merge } from 'lodash';\n\nimport {\n    BraintreeScriptLoader,\n    BraintreeSdk,\n    BraintreeSDKVersionManager,\n    getBraintree,\n    getDataCollectorMock,\n    getDeviceDataMock,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport ApplePayPaymentStrategy from './apple-pay-payment-strategy';\nimport ApplePayScriptLoader from './apple-pay-script-loader';\nimport ApplePaySessionFactory from './apple-pay-session-factory';\nimport { getApplePay } from './mocks/apple-pay-method.mock';\nimport { MockApplePaySession } from './mocks/apple-pay-payment.mock';\n\ndescribe('ApplePayPaymentStrategy', () => {\n    let requestSender: RequestSender;\n    let applePayFactory: ApplePaySessionFactory;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let strategy: ApplePayPaymentStrategy;\n    let paymentMethod: PaymentMethod;\n    let applePaySession: MockApplePaySession;\n    let braintreeSdk: BraintreeSdk;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n    let applePayScriptLoader: ApplePayScriptLoader;\n\n    beforeEach(() => {\n        applePaySession = new MockApplePaySession();\n\n        Object.defineProperty(window, 'ApplePaySession', {\n            writable: true,\n            value: applePaySession,\n        });\n\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeSdk = new BraintreeSdk(\n            new BraintreeScriptLoader(getScriptLoader(), window, braintreeSDKVersionManager),\n        );\n\n        requestSender = createRequestSender();\n        applePayFactory = new ApplePaySessionFactory();\n        paymentMethod = getApplePay();\n        applePayScriptLoader = new ApplePayScriptLoader(getScriptLoader());\n\n        jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(getResponse({})));\n\n        jest.spyOn(applePayFactory, 'create').mockReturnValue(applePaySession);\n\n        jest.spyOn(applePayScriptLoader, 'loadSdk').mockReturnValue(Promise.resolve());\n\n        strategy = new ApplePayPaymentStrategy(\n            requestSender,\n            paymentIntegrationService,\n            applePayFactory,\n            braintreeSdk,\n            applePayScriptLoader,\n        );\n    });\n\n    describe('#initialize()', () => {\n        beforeEach(() => {\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n                paymentIntegrationService.getState(),\n            );\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getApplePay());\n        });\n\n        it('load Apple Pay SDK', async () => {\n            await strategy.initialize({ methodId: 'applepay' });\n\n            expect(applePayScriptLoader.loadSdk).toHaveBeenCalled();\n        });\n\n        it('throws invalid argument error if no method id', async () => {\n            await expect(strategy.initialize()).rejects.toBeInstanceOf(InvalidArgumentError);\n        });\n\n        it('initializes the strategy successfully', async () => {\n            await strategy.initialize({ methodId: 'applepay' });\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalled();\n        });\n\n        it('initializes braintree sdk on apple pay strategy initialization', async () => {\n            const applePayPaymentMethod = getApplePay();\n\n            applePayPaymentMethod.initializationData.gateway = 'braintree';\n            applePayPaymentMethod.clientToken = 'braintree-client-token';\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => applePayPaymentMethod);\n\n            jest.spyOn(braintreeSdk, 'initialize').mockImplementation(jest.fn());\n            jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockImplementation(() =>\n                Promise.resolve(getDataCollectorMock()),\n            );\n\n            await strategy.initialize({ methodId: 'applepay' });\n\n            expect(braintreeSdk.initialize).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute()', () => {\n        beforeEach(() => {\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n                paymentIntegrationService.getState(),\n            );\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getApplePay());\n        });\n\n        it('throws error when payment data is empty', async () => {\n            await expect(strategy.execute({})).rejects.toThrow(PaymentArgumentInvalidError);\n        });\n\n        it('validates merchant', async () => {\n            const payload = merge({}, getOrderRequestBody(), {\n                payment: { methodId: paymentMethod.id },\n            });\n\n            strategy.execute(payload);\n\n            const validateEvent = {\n                validationURL: 'test',\n            } as ApplePayJS.ApplePayValidateMerchantEvent;\n\n            await new Promise((resolve) => process.nextTick(resolve));\n            await applePaySession.onvalidatemerchant(validateEvent);\n\n            expect(applePaySession.begin).toHaveBeenCalled();\n            expect(requestSender.post).toHaveBeenCalled();\n        });\n\n        it('throws error if merchant validation fails', async () => {\n            jest.spyOn(requestSender, 'post').mockRejectedValue(false);\n\n            const payload = merge({}, getOrderRequestBody(), {\n                payment: { methodId: paymentMethod.id },\n            });\n\n            strategy.execute(payload);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            const validateEvent = {\n                validationURL: 'test',\n            } as ApplePayJS.ApplePayValidateMerchantEvent;\n\n            try {\n                await applePaySession.onvalidatemerchant(validateEvent);\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n            }\n        });\n\n        it('throws error when Apple Pay payment sheet is cancelled', async () => {\n            jest.spyOn(requestSender, 'post').mockRejectedValue(false);\n\n            const payload = merge({}, getOrderRequestBody(), {\n                payment: { methodId: paymentMethod.id },\n            });\n            const promise = strategy.execute(payload);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n            applePaySession.oncancel();\n\n            expect(promise).rejects.toThrow(\n                new PaymentMethodCancelledError('Continue with applepay'),\n            );\n        });\n\n        it('submits payment when shopper authorises', async () => {\n            const payload = merge({}, getOrderRequestBody(), {\n                payment: { methodId: paymentMethod.id },\n            });\n            const authEvent = {\n                payment: {\n                    token: {\n                        paymentData: {},\n                        paymentMethod: {},\n                        transactionIdentifier: {},\n                    },\n                },\n            } as ApplePayJS.ApplePayPaymentAuthorizedEvent;\n\n            strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n            await applePaySession.onpaymentauthorized(authEvent);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n            expect(applePaySession.completePayment).toHaveBeenCalled();\n        });\n\n        it('submits payment with provided braintree device data session', async () => {\n            const braintreePaymentMethod = getBraintree();\n\n            const applePayPaymentMethod = getApplePay();\n\n            applePayPaymentMethod.initializationData.gateway = 'braintree';\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => applePayPaymentMethod);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockImplementation(\n                () => braintreePaymentMethod,\n            );\n\n            jest.spyOn(braintreeSdk, 'initialize').mockImplementation(jest.fn());\n            jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockImplementation(() =>\n                Promise.resolve(getDataCollectorMock()),\n            );\n\n            const payload = merge({}, getOrderRequestBody(), {\n                payment: { methodId: paymentMethod.id },\n            });\n\n            const authEvent = {\n                payment: {\n                    billingContact: {},\n                    shippingContact: {},\n                    token: {\n                        paymentData: {},\n                        paymentMethod: {},\n                        transactionIdentifier: {},\n                    },\n                },\n            } as ApplePayJS.ApplePayPaymentAuthorizedEvent;\n\n            await strategy.initialize({ methodId: 'applepay' });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n            await applePaySession.onpaymentauthorized(authEvent);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    paymentData: expect.objectContaining({\n                        deviceSessionId: getDeviceDataMock(),\n                    }),\n                }),\n            );\n        });\n\n        it('submits payment with braintree device data session as undefined when braintree sdk rejects with an error', async () => {\n            const braintreePaymentMethod = getBraintree();\n\n            const applePayPaymentMethod = getApplePay();\n\n            applePayPaymentMethod.initializationData.gateway = 'braintree';\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => applePayPaymentMethod);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockImplementation(\n                () => braintreePaymentMethod,\n            );\n\n            jest.spyOn(braintreeSdk, 'initialize').mockImplementation(jest.fn());\n            jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockImplementation(() =>\n                Promise.reject(new Error('Braintree SDK related error')),\n            );\n\n            const payload = merge({}, getOrderRequestBody(), {\n                payment: { methodId: paymentMethod.id },\n            });\n\n            const authEvent = {\n                payment: {\n                    billingContact: {},\n                    shippingContact: {},\n                    token: {\n                        paymentData: {},\n                        paymentMethod: {},\n                        transactionIdentifier: {},\n                    },\n                },\n            } as ApplePayJS.ApplePayPaymentAuthorizedEvent;\n\n            await strategy.initialize({ methodId: 'applepay' });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n            await applePaySession.onpaymentauthorized(authEvent);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    paymentData: expect.objectContaining({\n                        deviceSessionId: undefined,\n                    }),\n                }),\n            );\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-payment-strategy.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport { BraintreeSdk } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    InvalidArgumentError,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ApplePayGatewayType } from './apple-pay';\nimport { WithApplePayPaymentInitializeOptions } from './apple-pay-payment-initialize-options';\nimport ApplePayScriptLoader from './apple-pay-script-loader';\nimport ApplePaySessionFactory from './apple-pay-session-factory';\n\nconst validationEndpoint = (bigPayEndpoint: string) =>\n    `${bigPayEndpoint}/api/public/v1/payments/applepay/validate_merchant`;\n\ninterface ApplePayPromise {\n    resolve(): void;\n    reject(reason?: Error): void;\n}\n\nenum DefaultLabels {\n    Shipping = 'Shipping',\n    Subtotal = 'Subtotal',\n    StoreCredit = 'Store Credit',\n}\n\nexport default class ApplePayPaymentStrategy implements PaymentStrategy {\n    private _shippingLabel: string = DefaultLabels.Shipping;\n    private _subTotalLabel: string = DefaultLabels.Subtotal;\n    private _storeCreditLabel: string = DefaultLabels.StoreCredit;\n\n    constructor(\n        private _requestSender: RequestSender,\n        private _paymentIntegrationService: PaymentIntegrationService,\n        private _sessionFactory: ApplePaySessionFactory,\n        private _braintreeSdk: BraintreeSdk,\n        private _applePayScriptLoader: ApplePayScriptLoader,\n    ) {}\n\n    async initialize(\n        options?: PaymentInitializeOptions & WithApplePayPaymentInitializeOptions,\n    ): Promise<void> {\n        if (!options?.methodId) {\n            throw new InvalidArgumentError(\n                'Unable to submit payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        const { methodId } = options;\n\n        await this._applePayScriptLoader.loadSdk();\n\n        this._shippingLabel = options.applepay?.shippingLabel || DefaultLabels.Shipping;\n        this._subTotalLabel = options.applepay?.subtotalLabel || DefaultLabels.Subtotal;\n        this._storeCreditLabel = options.applepay?.storeCreditLabel || DefaultLabels.StoreCredit;\n\n        const state = await this._paymentIntegrationService.loadPaymentMethod(methodId);\n\n        const paymentMethod: PaymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n        if (\n            paymentMethod.initializationData?.gateway === ApplePayGatewayType.BRAINTREE &&\n            paymentMethod.clientToken\n        ) {\n            this._braintreeSdk.initialize(paymentMethod.clientToken);\n        }\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment } = payload;\n        const state = this._paymentIntegrationService.getState();\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const { methodId } = payment;\n\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n        const request = this._getBaseRequest(state, paymentMethod);\n        const applePaySession = this._sessionFactory.create(request);\n\n        await this._paymentIntegrationService.submitOrder(\n            {\n                useStoreCredit: payload.useStoreCredit,\n            },\n            options,\n        );\n\n        applePaySession.begin();\n\n        return new Promise((resolve, reject) => {\n            this._handleApplePayEvents(applePaySession, paymentMethod, {\n                resolve,\n                reject,\n            });\n        });\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private _getBaseRequest(\n        state: PaymentIntegrationSelectors,\n        paymentMethod: PaymentMethod,\n    ): ApplePayJS.ApplePayPaymentRequest {\n        const checkout = state.getCheckoutOrThrow();\n        const cart = state.getCartOrThrow();\n        const config = state.getStoreConfigOrThrow();\n\n        const {\n            storeProfile: { storeCountryCode, storeName },\n        } = config;\n        const {\n            currency: { code, decimalPlaces },\n        } = cart;\n        const {\n            initializationData: { merchantCapabilities, supportedNetworks },\n        } = paymentMethod;\n\n        const { grandTotal, isStoreCreditApplied, outstandingBalance } = checkout;\n\n        const lineItems: ApplePayJS.ApplePayLineItem[] = [\n            {\n                label: this._subTotalLabel,\n                amount: `${checkout.subtotal.toFixed(decimalPlaces)}`,\n            },\n        ];\n\n        checkout.taxes.forEach((tax) =>\n            lineItems.push({\n                label: tax.name,\n                amount: `${tax.amount.toFixed(decimalPlaces)}`,\n            }),\n        );\n\n        lineItems.push({\n            label: this._shippingLabel,\n            amount: `${checkout.shippingCostTotal.toFixed(decimalPlaces)}`,\n        });\n\n        if (isStoreCreditApplied) {\n            const { storeCredit } = state.getCustomerOrThrow();\n\n            lineItems.push({\n                label: this._storeCreditLabel,\n                amount: `-${Math.min(grandTotal, storeCredit).toFixed(decimalPlaces)}`,\n            });\n        }\n\n        return {\n            countryCode: storeCountryCode,\n            currencyCode: code,\n            merchantCapabilities,\n            supportedNetworks,\n            lineItems,\n            total: {\n                label: storeName,\n                amount: `${outstandingBalance.toFixed(decimalPlaces)}`,\n                type: 'final',\n            },\n        };\n    }\n\n    private _handleApplePayEvents(\n        applePaySession: ApplePaySession,\n        paymentMethod: PaymentMethod,\n        promise: ApplePayPromise,\n    ) {\n        applePaySession.onvalidatemerchant = async (event) => {\n            try {\n                const { body: merchantSession } = await this._onValidateMerchant(\n                    paymentMethod,\n                    event,\n                );\n\n                applePaySession.completeMerchantValidation(merchantSession);\n            } catch (err) {\n                throw new Error('Merchant validation failed');\n            }\n        };\n\n        applePaySession.oncancel = async () =>\n            promise.reject(new PaymentMethodCancelledError('Continue with applepay'));\n\n        applePaySession.onpaymentauthorized = (event: ApplePayJS.ApplePayPaymentAuthorizedEvent) =>\n            this._onPaymentAuthorized(event, applePaySession, paymentMethod, promise);\n    }\n\n    private async _onValidateMerchant(\n        paymentData: PaymentMethod,\n        event: ApplePayJS.ApplePayValidateMerchantEvent,\n    ) {\n        const body = [\n            `validationUrl=${event.validationURL}`,\n            `merchantIdentifier=${paymentData.initializationData.merchantId}`,\n            `displayName=${paymentData.initializationData.storeName}`,\n            `domainName=${window.location.hostname}`,\n        ].join('&');\n\n        return this._requestSender.post(\n            validationEndpoint(paymentData.initializationData.paymentsUrl),\n            {\n                credentials: false,\n                headers: {\n                    Accept: 'application/json',\n                    'Content-Type': 'application/x-www-form-urlencoded',\n                    'X-XSRF-TOKEN': null,\n                },\n                body,\n            },\n        );\n    }\n\n    private async _onPaymentAuthorized(\n        event: ApplePayJS.ApplePayPaymentAuthorizedEvent,\n        applePaySession: ApplePaySession,\n        paymentMethod: PaymentMethod,\n        promise: ApplePayPromise,\n    ) {\n        const { token } = event.payment;\n\n        let deviceSessionId: string | undefined;\n\n        if (paymentMethod.initializationData?.gateway === ApplePayGatewayType.BRAINTREE) {\n            deviceSessionId = await this._getBraintreeDeviceData();\n        }\n\n        const payment: Payment = {\n            methodId: paymentMethod.id,\n            paymentData: {\n                deviceSessionId,\n                formattedPayload: {\n                    apple_pay_token: {\n                        payment_data: token.paymentData,\n                        payment_method: token.paymentMethod,\n                        transaction_id: token.transactionIdentifier,\n                    },\n                },\n            },\n        };\n\n        try {\n            await this._paymentIntegrationService.submitPayment(payment);\n            applePaySession.completePayment(ApplePaySession.STATUS_SUCCESS);\n\n            return promise.resolve();\n        } catch (error) {\n            applePaySession.completePayment(ApplePaySession.STATUS_FAILURE);\n\n            return promise.reject(\n                new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n            );\n        }\n    }\n\n    private async _getBraintreeDeviceData(): Promise<string | undefined> {\n        try {\n            const { deviceData } = await this._braintreeSdk.getDataCollectorOrThrow();\n\n            return deviceData;\n        } catch (_) {\n            // Don't throw an error to avoid breaking checkout flow\n        }\n    }\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-script-loader.spec.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport ApplePayScriptLoader from './apple-pay-script-loader';\nimport * as isApplePaySdkWindow from './is-apple-pay-sdk-window';\nimport { MockApplePaySession } from './mocks/apple-pay-payment.mock';\n\ndescribe('ApplePayScriptLoader', () => {\n    const scriptLoader = getScriptLoader();\n    const applePayScriptLoader = new ApplePayScriptLoader(scriptLoader);\n    const mockLoadScript = jest.spyOn(scriptLoader, 'loadScript').mockImplementation(() => {\n        Object.defineProperty(window, 'ApplePaySDK', {\n            writable: true,\n            value: {\n                origin: 'https://applepay.cdn-apple.com/jsapi/1.latest',\n                publicPath: 'https://applepay.cdn-apple.com',\n            },\n        });\n\n        Object.defineProperty(window, 'ApplePaySession', {\n            writable: true,\n            value: MockApplePaySession,\n        });\n\n        return Promise.resolve();\n    });\n    const mockIsApplePaySdkWindow = jest.spyOn(isApplePaySdkWindow, 'default');\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('loads Apple Pay SDK when script has not been loaded before', async () => {\n        mockIsApplePaySdkWindow.mockReturnValueOnce(false);\n\n        await applePayScriptLoader.loadSdk();\n\n        expect(mockLoadScript).toHaveBeenCalledWith(\n            'https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js',\n        );\n    });\n\n    it('do not load Apple Pay SDK when script has already been loaded', async () => {\n        mockIsApplePaySdkWindow.mockReturnValue(true);\n\n        expect(mockLoadScript).not.toHaveBeenCalledWith(\n            'https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js',\n        );\n    });\n\n    it('does not load script when ApplePaySDK is available on window', async () => {\n        await applePayScriptLoader.loadSdk();\n\n        expect(mockLoadScript).not.toHaveBeenCalled();\n    });\n});\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { assertApplePayWindow } from './apple-pay-session-factory';\nimport isApplePaySdkWindow from './is-apple-pay-sdk-window';\n\nexport default class ApplePayScriptLoader {\n    private sdkVersion = '1.latest';\n\n    constructor(private scriptLoader: ScriptLoader) {}\n\n    async loadSdk() {\n        if (isApplePaySdkWindow(window)) {\n            return;\n        }\n\n        await this.scriptLoader.loadScript(\n            `https://applepay.cdn-apple.com/jsapi/${this.sdkVersion}/apple-pay-sdk.js`,\n        );\n\n        assertApplePayWindow(window);\n    }\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-session-factory.spec.ts",
    "content": "import ApplePaySessionFactory, { assertApplePayWindow } from './apple-pay-session-factory';\nimport { MockApplePaySession } from './mocks/apple-pay-payment.mock';\n\ndescribe('apple pay session factory', () => {\n    it('throws an error if apple pay window object is not present', () => {\n        try {\n            assertApplePayWindow(window);\n        } catch (err) {\n            expect((err as Error).message).toBe('Apple pay is not supported');\n        }\n    });\n\n    it('calling create method returns an apple pay session', () => {\n        Object.defineProperty(window, 'ApplePaySession', {\n            writable: true,\n            value: MockApplePaySession,\n        });\n\n        const factory = new ApplePaySessionFactory();\n\n        const request = {} as ApplePayJS.ApplePayPaymentRequest;\n        const session = factory.create(request);\n\n        expect(session).toBeInstanceOf(ApplePaySession);\n    });\n});\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-session-factory.ts",
    "content": "import ApplePayWindow from './apple-pay-window';\nimport isApplePayWindow from './is-apple-pay-window';\n\nexport function assertApplePayWindow(window: Window): asserts window is ApplePayWindow {\n    if (!isApplePayWindow(window)) {\n        throw new Error('Apple pay is not supported');\n    }\n}\n\nexport default class ApplePaySessionFactory {\n    create(request: ApplePayJS.ApplePayPaymentRequest): ApplePaySession {\n        assertApplePayWindow(window);\n\n        return new ApplePaySession(1, request);\n    }\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay-window.ts",
    "content": "export default interface ApplePayWindow extends Window {\n    ApplePaySession: ApplePaySession;\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/apple-pay.ts",
    "content": "export enum ApplePayGatewayType {\n    BRAINTREE = 'braintree',\n    BRAINTREE_FASTLANE = 'braintreeacceleratedcheckout',\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/create-apple-pay-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport ApplePayButtonStrategy from './apple-pay-button-strategy';\nimport createApplePayButtonStrategy from './create-apple-pay-button-strategy';\n\ndescribe('createApplePayButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates apple-pay checkout button strategy', () => {\n        const strategy = createApplePayButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(ApplePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/apple-pay-integration/src/create-apple-pay-button-strategy.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\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 ApplePayButtonStrategy from './apple-pay-button-strategy';\nimport ApplePayScriptLoader from './apple-pay-script-loader';\nimport ApplePaySessionFactory from './apple-pay-session-factory';\n\nconst createApplePayButtonStrategy: CheckoutButtonStrategyFactory<ApplePayButtonStrategy> = (\n    paymentIntegrationService,\n) => {\n    const { getHost } = paymentIntegrationService.getState();\n\n    const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n\n    return new ApplePayButtonStrategy(\n        createRequestSender({ host: getHost() }),\n        paymentIntegrationService,\n        new ApplePaySessionFactory(),\n        new BraintreeSdk(\n            new BraintreeScriptLoader(getScriptLoader(), window, braintreeSDKVersionManager),\n        ),\n        new ApplePayScriptLoader(new ScriptLoader()),\n    );\n};\n\nexport default toResolvableModule(createApplePayButtonStrategy, [{ id: 'applepay' }]);\n"
  },
  {
    "path": "packages/apple-pay-integration/src/create-apple-pay-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport ApplePayCustomerStrategy from './apple-pay-customer-strategy';\nimport createApplePayCustomerStrategy from './create-apple-pay-customer-strategy';\n\ndescribe('createApplePayCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates apple-pay customer wallet button strategy', () => {\n        const strategy = createApplePayCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(ApplePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/apple-pay-integration/src/create-apple-pay-customer-strategy.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BraintreeScriptLoader,\n    BraintreeSdk,\n    BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport ApplePayCustomerStrategy from './apple-pay-customer-strategy';\nimport ApplePayScriptLoader from './apple-pay-script-loader';\nimport ApplePaySessionFactory from './apple-pay-session-factory';\n\nconst createApplePayCustomerStrategy: CustomerStrategyFactory<ApplePayCustomerStrategy> = (\n    paymentIntegrationService,\n) => {\n    const { getHost } = paymentIntegrationService.getState();\n\n    const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n\n    return new ApplePayCustomerStrategy(\n        createRequestSender({ host: getHost() }),\n        paymentIntegrationService,\n        new ApplePaySessionFactory(),\n        new BraintreeSdk(\n            new BraintreeScriptLoader(getScriptLoader(), window, braintreeSDKVersionManager),\n        ),\n        new ApplePayScriptLoader(new ScriptLoader()),\n    );\n};\n\nexport default toResolvableModule(createApplePayCustomerStrategy, [{ id: 'applepay' }]);\n"
  },
  {
    "path": "packages/apple-pay-integration/src/create-apple-pay-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport ApplePayPaymentStrategy from './apple-pay-payment-strategy';\nimport createApplePayPaymentStrategy from './create-apple-pay-payment-strategy';\n\ndescribe('createApplePayPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates apple-pay payment strategy', () => {\n        const strategy = createApplePayPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(ApplePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/apple-pay-integration/src/create-apple-pay-payment-strategy.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\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 ApplePayPaymentStrategy from './apple-pay-payment-strategy';\nimport ApplePayScriptLoader from './apple-pay-script-loader';\nimport ApplePaySessionFactory from './apple-pay-session-factory';\n\nconst createApplePayPaymentStrategy: PaymentStrategyFactory<ApplePayPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    const { getHost } = paymentIntegrationService.getState();\n    const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n\n    return new ApplePayPaymentStrategy(\n        createRequestSender({ host: getHost() }),\n        paymentIntegrationService,\n        new ApplePaySessionFactory(),\n        new BraintreeSdk(\n            new BraintreeScriptLoader(getScriptLoader(), window, braintreeSDKVersionManager),\n        ),\n        new ApplePayScriptLoader(new ScriptLoader()),\n    );\n};\n\nexport default toResolvableModule(createApplePayPaymentStrategy, [{ id: 'applepay' }]);\n"
  },
  {
    "path": "packages/apple-pay-integration/src/index.ts",
    "content": "export { default as createApplePayPaymentStrategy } from './create-apple-pay-payment-strategy';\nexport { default as createApplePayCustomerStrategy } from './create-apple-pay-customer-strategy';\nexport { default as createApplePayButtonStrategy } from './create-apple-pay-button-strategy';\nexport { WithApplePayCustomerInitializeOptions } from './apple-pay-customer-initialize-options';\nexport { WithApplePayButtonInitializeOptions } from './apple-pay-button-initialize-options';\nexport { WithApplePayPaymentInitializeOptions } from './apple-pay-payment-initialize-options';\nexport { default as ApplePayButtonMethodType } from './apple-pay-button-method-type';\n"
  },
  {
    "path": "packages/apple-pay-integration/src/is-apple-pay-sdk-window.ts",
    "content": "interface ApplePaySdkWindow extends Window {\n    ApplePaySDK?: {\n        origin: string;\n        publicPath: string;\n        token: string | undefined;\n    };\n}\n\nexport default function isApplePaySdkWindow(window: Window): window is ApplePaySdkWindow {\n    return 'ApplePaySDK' in window;\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/is-apple-pay-window.ts",
    "content": "import ApplePayWindow from './apple-pay-window';\n\nexport default function isApplePayWindow(window: Window): window is ApplePayWindow {\n    return 'ApplePaySession' in window;\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/mocks/apple-pay-button.mock.ts",
    "content": "import { CheckoutButtonInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { getBuyNowCartRequestBody } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { WithApplePayButtonInitializeOptions } from '../apple-pay-button-initialize-options';\nimport ApplePayButtonMethodType from '../apple-pay-button-method-type';\n\nexport function getApplePayButtonInitializationOptions(): CheckoutButtonInitializeOptions &\n    WithApplePayButtonInitializeOptions {\n    return {\n        containerId: 'applePayCheckoutButton',\n        methodId: ApplePayButtonMethodType.APPLEPAY,\n        applepay: {\n            onPaymentAuthorize: jest.fn(),\n        },\n    };\n}\n\nexport function getApplePayButtonInitializationOptionsWithBuyNow(): CheckoutButtonInitializeOptions &\n    WithApplePayButtonInitializeOptions {\n    return {\n        containerId: 'applePayCheckoutButton',\n        methodId: ApplePayButtonMethodType.APPLEPAY,\n        applepay: {\n            onPaymentAuthorize: jest.fn(),\n            buyNowInitializeOptions: {\n                getBuyNowCartRequestBody: jest.fn().mockReturnValue(getBuyNowCartRequestBody()),\n            },\n            requiresShipping: false,\n        },\n    };\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/mocks/apple-pay-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getApplePay(): PaymentMethod {\n    return {\n        id: 'applepay',\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: [],\n        config: {\n            displayName: '',\n            helpText: '',\n            testMode: false,\n            requireCustomerCode: false,\n            isVaultingEnabled: false,\n            hasDefaultStoredInstrument: false,\n            isHostedFormEnabled: false,\n        },\n        type: 'PAYMENT_TYPE_WALLET',\n        initializationStrategy: {\n            type: 'not_applicable',\n        },\n        nonce: undefined,\n        initializationData: {\n            storeName: 'test store',\n            countryCode: 'US',\n            currencyCode: 'USD',\n            supportedNetworks: ['visa', 'masterCard', 'amex', 'discover'],\n            gateway: 'adyenv2',\n            merchantCapabilities: ['supports3DS'],\n            merchantId: 'abc',\n            paymentsUrl: 'https://url',\n        },\n    };\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/mocks/apple-pay-payment.mock.ts",
    "content": "export class MockApplePaySession {\n    static supportsVersion: () => boolean;\n    static canMakePayments: () => boolean;\n\n    addEventListener = jest.fn();\n    dispatchEvent = jest.fn();\n    removeEventListener = jest.fn();\n\n    completePayment = jest.fn();\n\n    begin = jest.fn();\n    oncancel = jest.fn();\n    onpaymentmethodselected = jest.fn();\n\n    completeShippingContactSelection = jest.fn();\n\n    completeShippingMethodSelection = jest.fn();\n    completePaymentMethodSelection = jest.fn();\n\n    abort = jest.fn();\n\n    completeMerchantValidation() {\n        return true;\n    }\n\n    onvalidatemerchant(event: ApplePayJS.ApplePayValidateMerchantEvent) {\n        return event;\n    }\n\n    onpaymentauthorized(event?: ApplePayJS.ApplePayPaymentAuthorizedEvent) {\n        return event;\n    }\n\n    onshippingcontactselected(event?: ApplePayJS.ApplePayShippingContactSelectedEvent) {\n        return event;\n    }\n\n    onshippingmethodselected(event?: ApplePayJS.ApplePayShippingMethodSelectedEvent) {\n        return event;\n    }\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/src/mocks/apple-pay-wallet-button-mock.ts",
    "content": "import { CustomerInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithApplePayCustomerInitializeOptions } from '../apple-pay-customer-initialize-options';\n\nexport function getApplePayCustomerInitializationOptions(): CustomerInitializeOptions &\n    WithApplePayCustomerInitializeOptions {\n    return {\n        methodId: 'applepay',\n        applepay: {\n            container: 'applePayCheckoutButton',\n            shippingLabel: 'Shipping',\n            subtotalLabel: 'Subtotal',\n            onPaymentAuthorize: jest.fn(),\n            onError: jest.fn(),\n            onClick: jest.fn(),\n        },\n    };\n}\n\nexport function getContactAddress() {\n    return {\n        administrativeArea: 'CA',\n        country: 'United States',\n        countryCode: 'US',\n        emailAddress: 'test@test.com',\n        familyName: '',\n        givenName: '',\n        locality: 'San Francisco',\n        phoneticFamilyName: '',\n        phoneticGivenName: '',\n        postalCode: '94114',\n        subAdministrativeArea: '',\n        subLocality: '',\n    };\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/apple-pay-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\n        \"../../.eslintrc.json\"\n    ],\n    \"ignorePatterns\": [\n        \"!**/*\"\n    ],\n    \"overrides\": [\n        {\n            \"files\": [\n                \"*.ts\",\n                \"*.tsx\",\n                \"*.js\",\n                \"*.jsx\"\n            ],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\"\n            }\n        },\n        {\n            \"files\": [\n                \"*.spec.ts\"\n            ],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"jest/valid-expect\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-throw-literal\": \"off\"\n            }\n        },\n        {\n            \"files\": [\n                \"*.mock.ts\"\n            ],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/README.md",
    "content": "# bigcommerce-payments-integration\n\nBigCommerce Payments (also known as BCP) is an all-in-one payment solution that is recommended by BigCommerce for all cohorts of clients.\n\nbigcommerce-payment-integration contains core BCP logic: different strategies for placing order with different PayPal instruments and other logic.\n\n## Running unit tests\n\nRun `npx nx test bigcommerce-payments-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `npx nx lint bigcommerce-payments-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'bigcommerce-payments-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/bigcommerce-payments-integration',\n};\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/project.json",
    "content": "{\n    \"name\": \"bigcommerce-payments-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/bigcommerce-payments-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/bigcommerce-payments-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/bigcommerce-payments-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/bigcommerce-payments-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/bigcommerce-payments-button-initialize-options.ts",
    "content": "import {\n    PayPalButtonStyleOptions,\n    PayPalBuyNowInitializeOptions,\n} from '../bigcommerce-payments-types';\n\n/**\n * A set of options that are required to initialize BigCommercePaymentsButtonStrategy in cart or product details page.\n *\n * When BigCommercePayments is initialized, an BigCommercePayments PayPal button will be inserted into the\n * DOM. When a customer clicks on it, it will trigger PayPal flow.\n */\nexport default interface BigCommercePaymentsButtonInitializeOptions {\n    /**\n     * The options that are required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\n\n    /**\n     * The option that used to initialize a PayPal script with provided currency code.\n     */\n    currencyCode?: string;\n\n    /**\n     * A set of styling options for the checkout button.\n     */\n    style?: PayPalButtonStyleOptions;\n\n    /**\n     * A callback that gets called when payment complete on paypal side.\n     */\n    onComplete?(): void;\n\n    /**\n     *\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\n     *\n     */\n    onEligibilityFailure?(): void;\n}\n\nexport interface WithBigCommercePaymentsButtonInitializeOptions {\n    bigcommerce_payments?: BigCommercePaymentsButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/bigcommerce-payments-button-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    Cart,\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getBuyNowCartRequestBody,\n    getCart,\n    getConsignment,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsHostWindow,\n    PayPalSDK,\n} from '../bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsIntegrationServiceMock,\n    getBigCommercePaymentsOrderDetails,\n    getBigCommercePaymentsPaymentMethod,\n    getBillingAddressFromOrderDetails,\n    getPayPalSDKMock,\n    getShippingAddressFromOrderDetails,\n} from '../mocks';\n\nimport BigCommercePaymentsButtonInitializeOptions from './bigcommerce-payments-button-initialize-options';\nimport BigCommercePaymentsButtonStrategy from './bigcommerce-payments-button-strategy';\n\ndescribe('BigCommercePaymentsButtonStrategy', () => {\n    let buyNowCart: Cart;\n    let cart: Cart;\n    let eventEmitter: EventEmitter;\n    let strategy: BigCommercePaymentsButtonStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalButtonElement: HTMLDivElement;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n    let paypalSdk: PayPalSDK;\n\n    const defaultMethodId = 'bigcommerce_payments';\n    const defaultButtonContainerId = 'bigcommerce-payments-button-mock-id';\n    const paypalOrderId = 'ORDER_ID';\n\n    const buyNowCartRequestBody = getBuyNowCartRequestBody();\n\n    const buyNowBigCommercePaymentsOptions: BigCommercePaymentsButtonInitializeOptions = {\n        buyNowInitializeOptions: {\n            getBuyNowCartRequestBody: jest.fn().mockReturnValue(buyNowCartRequestBody),\n        },\n        currencyCode: 'USD',\n        style: {\n            height: 45,\n        },\n        onComplete: jest.fn(),\n        onEligibilityFailure: jest.fn(),\n    };\n\n    const buyNowInitializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        bigcommerce_payments: buyNowBigCommercePaymentsOptions,\n    };\n\n    const bigCommercePaymentsOptions: BigCommercePaymentsButtonInitializeOptions = {\n        style: {\n            height: 45,\n        },\n        onComplete: jest.fn(),\n        onEligibilityFailure: jest.fn(),\n    };\n\n    const initializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        bigcommerce_payments: bigCommercePaymentsOptions,\n    };\n\n    const paypalShippingAddressPayloadMock = {\n        city: 'New York',\n        countryCode: 'US',\n        postalCode: '07564',\n        state: 'New York',\n    };\n\n    const paypalSelectedShippingOptionPayloadMock = {\n        amount: {\n            currency_code: 'USD',\n            value: '100',\n        },\n        id: '1',\n        label: 'Free shipping',\n        selected: true,\n        type: 'type_shipping',\n    };\n\n    beforeEach(() => {\n        buyNowCart = getBuyNowCart();\n        cart = getCart();\n\n        eventEmitter = new EventEmitter();\n\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n        paymentMethod = getBigCommercePaymentsPaymentMethod();\n        paypalSdk = getPayPalSDKMock();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new BigCommercePaymentsButtonStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n        );\n\n        paypalButtonElement = document.createElement('div');\n        paypalButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(paypalButtonElement);\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService, 'loadDefaultCheckout').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paymentIntegrationService, 'selectShippingOption').mockImplementation(jest.fn());\n\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockReturnValue(\n            Promise.resolve(paypalSdk),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'createBuyNowCartOrThrow',\n        ).mockReturnValue(Promise.resolve(buyNowCart));\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'updateOrder').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'tokenizePayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'submitPayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'removeElement').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'getBillingAddressFromOrderDetails',\n        ).mockReturnValue(getBillingAddressFromOrderDetails());\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'getShippingAddressFromOrderDetails',\n        ).mockReturnValue(getShippingAddressFromOrderDetails());\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'getShippingOptionOrThrow',\n        ).mockReturnValue(getShippingOption());\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: BigCommercePaymentsButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on(\n                    'onClick',\n                    // eslint-disable-next-line @typescript-eslint/no-misused-promises\n                    async (jestSuccessExpectationsCallback, jestFailureExpectationsCallback) => {\n                        try {\n                            if (options.onClick) {\n                                await options.onClick(\n                                    { fundingSource: 'paypal' },\n                                    {\n                                        reject: jest.fn(),\n                                        resolve: jest.fn(),\n                                    },\n                                );\n\n                                if (\n                                    jestSuccessExpectationsCallback &&\n                                    typeof jestSuccessExpectationsCallback === 'function'\n                                ) {\n                                    jestSuccessExpectationsCallback();\n                                }\n                            }\n                        } catch (error) {\n                            if (\n                                jestFailureExpectationsCallback &&\n                                typeof jestFailureExpectationsCallback === 'function'\n                            ) {\n                                jestFailureExpectationsCallback(error);\n                            }\n                        }\n                    },\n                );\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: paypalOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onCancel', () => {\n                    if (options.onCancel) {\n                        options.onCancel();\n                    }\n                });\n\n                eventEmitter.on('onShippingAddressChange', () => {\n                    if (options.onShippingAddressChange) {\n                        options.onShippingAddressChange({\n                            orderId: paypalOrderId,\n                            shippingAddress: paypalShippingAddressPayloadMock,\n                        });\n                    }\n                });\n\n                eventEmitter.on('onShippingOptionsChange', () => {\n                    if (options.onShippingOptionsChange) {\n                        options.onShippingOptionsChange({\n                            orderId: paypalOrderId,\n                            selectedShippingOption: paypalSelectedShippingOptionPayloadMock,\n                        });\n                    }\n                });\n\n                return {\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                    close: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BigCommercePaymentsHostWindow).paypal;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(paypalButtonElement);\n        }\n    });\n\n    it('creates an instance of the BigCommercePaymentsButtonStrategy checkout button strategy', () => {\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsButtonStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if containerId is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments.currencyCode is not provided (for buyNowFlow only)', async () => {\n            const { currencyCode, ...rest } = buyNowBigCommercePaymentsOptions;\n\n            const newInitializationOptions = {\n                ...buyNowInitializationOptions,\n                bigcommerce_payments: rest,\n            };\n\n            try {\n                await strategy.initialize(newInitializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if provided buyNow callback is not a function is not provided (for buyNowFlow only)', async () => {\n            const { buyNowInitializeOptions, ...rest } = buyNowBigCommercePaymentsOptions;\n\n            const newInitializationOptions = {\n                ...buyNowInitializationOptions,\n                bigcommerce_payments: {\n                    ...rest,\n                    buyNowInitializeOptions: {\n                        getBuyNowCartRequestBody: 'string',\n                    },\n                },\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(newInitializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads default checkout', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n\n        it('does not load default checkout for Buy Now flow', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).not.toHaveBeenCalled();\n        });\n\n        it('loads BigCommercePaymentsPayPal sdk script', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n                cart.currency.code,\n                false,\n            );\n        });\n\n        it('loads BigCommercePaymentsPayPal sdk script with provided currency code (Buy Now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n                buyNowBigCommercePaymentsOptions.currencyCode,\n                false,\n            );\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('initializes PayPal button to render (default flow)', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                style: bigCommercePaymentsOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('initializes PayPal button to render (buy now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                style: bigCommercePaymentsOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n                onCancel: expect.any(Function),\n            });\n        });\n\n        it('initializes PayPal button to render (with shipping options feature enabled)', async () => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                style: bigCommercePaymentsOptions.style,\n                createOrder: expect.any(Function),\n                onShippingAddressChange: expect.any(Function),\n                onShippingOptionsChange: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('renders PayPal button if it is eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => true),\n                render: bigCommercePaymentsSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('does not render PayPal button if it is not eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('calls onEligibilityFailure callback when the PayPal button is not eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsOptions.onEligibilityFailure).toHaveBeenCalled();\n        });\n\n        it('removes PayPal button container if the button is not eligible and onEligibilityFailure callback is not provided', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments: {\n                    ...bigCommercePaymentsOptions,\n                    onEligibilityFailure: undefined,\n                },\n            });\n\n            expect(bigCommercePaymentsIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultButtonContainerId,\n            );\n        });\n    });\n\n    describe('#createOrder', () => {\n        it('creates paypal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_payments',\n            );\n        });\n    });\n\n    describe('#handleClick', () => {\n        beforeEach(() => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n                Promise.resolve(buyNowCart),\n            );\n            jest.spyOn(paymentIntegrationService, 'loadCheckout');\n        });\n\n        it('creates buy now cart on button click', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(\n                bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow,\n            ).toHaveBeenCalled();\n        });\n\n        it('loads checkout related to buy now cart on button click', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadCheckout).toHaveBeenCalledWith(buyNowCart.id);\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        describe('default flow', () => {\n            it('tokenizes payment on paypal approve', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(bigCommercePaymentsIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                    defaultMethodId,\n                    paypalOrderId,\n                );\n            });\n        });\n\n        describe('shipping options feature flow', () => {\n            const paypalOrderDetails = getBigCommercePaymentsOrderDetails();\n\n            beforeEach(() => {\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: BigCommercePaymentsButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: paypalOrderId },\n                                    {\n                                        order: {\n                                            get: () => Promise.resolve(paypalOrderDetails),\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                            close: jest.fn(),\n                        };\n                    },\n                );\n\n                const paymentMethodWithShippingOptionsFeature = {\n                    ...paymentMethod,\n                    initializationData: {\n                        ...paymentMethod.initializationData,\n                        isHostedCheckoutEnabled: true,\n                    },\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n            });\n\n            it('takes order details data from paypal', async () => {\n                const getOrderActionMock = jest.fn();\n\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: BigCommercePaymentsButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: paypalOrderId },\n                                    {\n                                        order: {\n                                            get: getOrderActionMock,\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                            close: jest.fn(),\n                        };\n                    },\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(getOrderActionMock).toHaveBeenCalled();\n            });\n\n            it('updates billing address with valid customers data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getBigCommercePaymentsOrderDetails());\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                    getBillingAddressFromOrderDetails(),\n                );\n            });\n\n            it('updates shipping address with valid customers data if physical items are available in the cart', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getBigCommercePaymentsOrderDetails());\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(\n                    getShippingAddressFromOrderDetails(),\n                );\n            });\n\n            it('submits BC order with provided methodId', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    {},\n                    {\n                        params: {\n                            methodId: initializationOptions.methodId,\n                        },\n                    },\n                );\n            });\n\n            it('submits BC payment to update BC order data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(bigCommercePaymentsIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    defaultMethodId,\n                    paypalOrderId,\n                );\n            });\n        });\n    });\n\n    describe('#onShippingAddressChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('updates billing and shipping address with data returned from PayPal', async () => {\n            const address = {\n                firstName: '',\n                lastName: '',\n                email: '',\n                phone: '',\n                company: '',\n                address1: '',\n                address2: '',\n                city: paypalShippingAddressPayloadMock.city,\n                countryCode: paypalShippingAddressPayloadMock.countryCode,\n                postalCode: paypalShippingAddressPayloadMock.postalCode,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalShippingAddressPayloadMock.state,\n                customFields: [],\n            };\n\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'getAddress').mockReturnValue(\n                address,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(address);\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(address);\n        });\n\n        it('selects shipping option after address update', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(\n                bigCommercePaymentsIntegrationService.getShippingOptionOrThrow,\n            ).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order after shipping option selection', async () => {\n            const consignment = getConsignment();\n\n            // INFO: lets imagine that it is a state that we get after consignmentActionCreator.selectShippingOption call\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getConsignmentsOrThrow',\n            ).mockReturnValue([consignment]);\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onShippingOptionsChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('selects shipping option', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(\n                bigCommercePaymentsIntegrationService.getShippingOptionOrThrow,\n            ).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('loads default checkout onCancel callback (buy now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n            eventEmitter.emit('onCancel');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/bigcommerce-payments-button-strategy.ts",
    "content": "import {\n    CheckoutButtonInitializeOptions,\n    CheckoutButtonStrategy,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    ApproveCallbackActions,\n    ApproveCallbackPayload,\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsInitializationData,\n    PayPalBuyNowInitializeOptions,\n    ShippingAddressChangeCallbackPayload,\n    ShippingOptionChangeCallbackPayload,\n} from '../bigcommerce-payments-types';\n\nimport BigCommercePaymentsButtonInitializeOptions, {\n    WithBigCommercePaymentsButtonInitializeOptions,\n} from './bigcommerce-payments-button-initialize-options';\n\nexport default class BigCommercePaymentsButtonStrategy implements CheckoutButtonStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\n    ) {}\n\n    async initialize(\n        options: CheckoutButtonInitializeOptions & WithBigCommercePaymentsButtonInitializeOptions,\n    ): Promise<void> {\n        const { bigcommerce_payments, containerId, methodId } = options;\n\n        const isBuyNowFlow = Boolean(bigcommerce_payments?.buyNowInitializeOptions);\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!containerId) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n            );\n        }\n\n        if (!bigcommerce_payments) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.`,\n            );\n        }\n\n        if (isBuyNowFlow && !bigcommerce_payments.currencyCode) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments.currencyCode\" argument is not provided.`,\n            );\n        }\n\n        if (\n            isBuyNowFlow &&\n            typeof bigcommerce_payments.buyNowInitializeOptions?.getBuyNowCartRequestBody !==\n                'function'\n        ) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n            );\n        }\n\n        if (!isBuyNowFlow) {\n            // Info: default checkout should not be loaded for BuyNow flow,\n            // since there is no checkout session available for that.\n            await this.paymentIntegrationService.loadDefaultCheckout();\n        }\n\n        // Info: we are using provided currency code for buy now cart,\n        // because checkout session is not available before buy now cart creation,\n        // hence application will throw an error on getCartOrThrow method call\n        const currencyCode = isBuyNowFlow\n            ? bigcommerce_payments.currencyCode\n            : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n        await this.bigCommercePaymentsIntegrationService.loadPayPalSdk(\n            methodId,\n            currencyCode,\n            false,\n        );\n\n        this.renderButton(containerId, methodId, bigcommerce_payments);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        containerId: string,\n        methodId: string,\n        bigcommerce_payments: BigCommercePaymentsButtonInitializeOptions,\n    ): void {\n        const { buyNowInitializeOptions, style, onComplete, onEligibilityFailure } =\n            bigcommerce_payments;\n\n        const paypalSdk = this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n        const { isHostedCheckoutEnabled, isServerSideShippingCallbacksEnabled } =\n            paymentMethod.initializationData || {};\n\n        const defaultCallbacks = {\n            createOrder: () =>\n                this.bigCommercePaymentsIntegrationService.createOrder('bigcommerce_payments'),\n            onApprove: ({ orderID }: ApproveCallbackPayload) =>\n                this.bigCommercePaymentsIntegrationService.tokenizePayment(methodId, orderID),\n        };\n\n        const buyNowFlowCallbacks = {\n            onClick: () => this.handleClick(buyNowInitializeOptions),\n            onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n        };\n\n        const hostedCheckoutCallbacks = {\n            ...(!isServerSideShippingCallbacksEnabled && {\n                onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n                    this.onShippingAddressChange(data),\n                onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n                    this.onShippingOptionsChange(data),\n            }),\n            onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n                this.onHostedCheckoutApprove(\n                    data,\n                    actions,\n                    methodId,\n                    onComplete,\n                    isServerSideShippingCallbacksEnabled,\n                ),\n        };\n\n        const buttonRenderOptions: BigCommercePaymentsButtonsOptions = {\n            fundingSource: paypalSdk.FUNDING.PAYPAL,\n            style: this.bigCommercePaymentsIntegrationService.getValidButtonStyle(style),\n            ...defaultCallbacks,\n            ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n            ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n        };\n\n        const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n        if (paypalButton.isEligible()) {\n            paypalButton.render(`#${containerId}`);\n        } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n            onEligibilityFailure();\n        } else {\n            this.bigCommercePaymentsIntegrationService.removeElement(containerId);\n        }\n    }\n\n    private async handleClick(\n        buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n    ): Promise<void> {\n        if (buyNowInitializeOptions) {\n            const buyNowCart =\n                await this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(\n                    buyNowInitializeOptions,\n                );\n\n            await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n        }\n    }\n\n    private async onHostedCheckoutApprove(\n        data: ApproveCallbackPayload,\n        actions: ApproveCallbackActions,\n        methodId: string,\n        onComplete?: () => void,\n        isServerSideShippingCallbacksEnabled?: boolean,\n    ): Promise<boolean> {\n        if (!data.orderID) {\n            throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n\n        try {\n            const hasPhysicalItems = cart.lineItems.physicalItems.length > 0;\n\n            if (!isServerSideShippingCallbacksEnabled) {\n                const orderDetails = await actions.order.get();\n\n                const billingAddress =\n                    this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(\n                        orderDetails,\n                    );\n\n                await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n                if (hasPhysicalItems) {\n                    const shippingAddress =\n                        this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(\n                            orderDetails,\n                        );\n\n                    await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n                }\n            }\n\n            if (hasPhysicalItems) {\n                await this.bigCommercePaymentsIntegrationService.updateOrder(\n                    isServerSideShippingCallbacksEnabled,\n                );\n            }\n\n            if (isServerSideShippingCallbacksEnabled) {\n                await this.paymentIntegrationService.loadCheckout();\n            }\n\n            await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n\n            await this.bigCommercePaymentsIntegrationService.submitPayment(methodId, data.orderID);\n\n            if (onComplete && typeof onComplete === 'function') {\n                onComplete();\n            }\n\n            return true; // FIXME: Do we really need to return true here?\n        } catch (error) {\n            if (typeof error === 'string') {\n                throw new Error(error);\n            }\n\n            throw error;\n        }\n    }\n\n    private async onShippingAddressChange(\n        data: ShippingAddressChangeCallbackPayload,\n    ): Promise<void> {\n        const address = this.bigCommercePaymentsIntegrationService.getAddress({\n            city: data.shippingAddress.city,\n            countryCode: data.shippingAddress.countryCode,\n            postalCode: data.shippingAddress.postalCode,\n            stateOrProvinceCode: data.shippingAddress.state,\n        });\n\n        try {\n            // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n            // on this stage we don't have access to valid customer's address accept shipping data\n            await this.paymentIntegrationService.updateBillingAddress(address);\n            await this.paymentIntegrationService.updateShippingAddress(address);\n\n            const shippingOption =\n                this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();\n\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.bigCommercePaymentsIntegrationService.updateOrder();\n        } catch (error) {\n            if (typeof error === 'string') {\n                throw new Error(error);\n            }\n\n            throw error;\n        }\n    }\n\n    private async onShippingOptionsChange(\n        data: ShippingOptionChangeCallbackPayload,\n    ): Promise<void> {\n        const shippingOption = this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(\n            data.selectedShippingOption.id,\n        );\n\n        try {\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.bigCommercePaymentsIntegrationService.updateOrder();\n        } catch (error) {\n            if (typeof error === 'string') {\n                throw new Error(error);\n            }\n\n            throw error;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/bigcommerce-payments-customer-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the customer step of\n * checkout to support BigCommercePayments.\n */\nexport default interface BigCommercePaymentsCustomerInitializeOptions {\n    /**\n     * The ID of a container which the checkout button should be inserted into.\n     */\n    container: string;\n\n    /**\n     * A callback that gets called if unable to initialize the widget or select\n     * one of the address options provided by the widget.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error?: Error): void;\n\n    /**\n     * A callback that gets called when payment complete on paypal side.\n     */\n    onComplete?(): void;\n\n    /**\n     * A callback that gets called when paypal button clicked.\n     */\n    onClick?(): void;\n}\n\nexport interface WithBigCommercePaymentsCustomerInitializeOptions {\n    /**\n     * The options that are required to initialize the customer step of checkout\n     * when using BigCommercePayments.\n     */\n    bigcommerce_payments?: BigCommercePaymentsCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/bigcommerce-payments-customer-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    CustomerInitializeOptions,\n    DefaultCheckoutButtonHeight,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConsignment,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsHostWindow,\n    PayPalSDK,\n    StyleButtonColor,\n} from '../bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsIntegrationServiceMock,\n    getBigCommercePaymentsOrderDetails,\n    getBigCommercePaymentsPaymentMethod,\n    getBillingAddressFromOrderDetails,\n    getPayPalSDKMock,\n    getShippingAddressFromOrderDetails,\n} from '../mocks';\n\nimport BigCommercePaymentsCustomerInitializeOptions from './bigcommerce-payments-customer-initialize-options';\nimport BigCommercePaymentsCustomerStrategy from './bigcommerce-payments-customer-strategy';\n\ndescribe('BigCommercePaymentsCustomerStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let strategy: BigCommercePaymentsCustomerStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n    let paypalSdk: PayPalSDK;\n\n    const methodId = 'bigcommerce_payments';\n    const defaultContainerId = 'bigcommerce-payments-container-mock-id';\n    const approveDataOrderId = 'ORDER_ID';\n\n    const bigCommercePaymentsOptions: BigCommercePaymentsCustomerInitializeOptions = {\n        container: defaultContainerId,\n        onClick: jest.fn(),\n        onComplete: jest.fn(),\n    };\n\n    const initializationOptions: CustomerInitializeOptions = {\n        methodId,\n        bigcommerce_payments: bigCommercePaymentsOptions,\n    };\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n        paymentMethod = getBigCommercePaymentsPaymentMethod();\n        paypalSdk = getPayPalSDKMock();\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new BigCommercePaymentsCustomerStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paymentIntegrationService, 'selectShippingOption').mockImplementation(jest.fn());\n\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockResolvedValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'updateOrder').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'tokenizePayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'submitPayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'removeElement').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'getBillingAddressFromOrderDetails',\n        ).mockReturnValue(getBillingAddressFromOrderDetails());\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'getShippingAddressFromOrderDetails',\n        ).mockReturnValue(getShippingAddressFromOrderDetails());\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'getShippingOptionOrThrow',\n        ).mockReturnValue(getShippingOption());\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: BigCommercePaymentsButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: approveDataOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onClick', () => {\n                    if (options.onClick) {\n                        options.onClick(\n                            { fundingSource: 'paypal' },\n                            {\n                                resolve: jest.fn(),\n                                reject: jest.fn(),\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onShippingAddressChange', () => {\n                    if (options.onShippingAddressChange) {\n                        options.onShippingAddressChange({\n                            orderId: approveDataOrderId,\n                            shippingAddress: {\n                                city: 'New York',\n                                countryCode: 'US',\n                                postalCode: '07564',\n                                state: 'New York',\n                            },\n                        });\n                    }\n                });\n\n                eventEmitter.on('onShippingOptionsChange', () => {\n                    if (options.onShippingOptionsChange) {\n                        options.onShippingOptionsChange({\n                            orderId: approveDataOrderId,\n                            selectedShippingOption: {\n                                amount: {\n                                    currency_code: 'USD',\n                                    value: '100',\n                                },\n                                id: '1',\n                                label: 'Free shipping',\n                                selected: true,\n                                type: 'type_shipping',\n                            },\n                        });\n                    }\n                });\n\n                return {\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                    close: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BigCommercePaymentsHostWindow).paypal;\n    });\n\n    it('creates an interface of the BigCommercePaymentsCustomerStrategy customer strategy', () => {\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsCustomerStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws an error if methodId is not provided', async () => {\n            const options = {} as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments is not provided', async () => {\n            const options = { methodId } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments.container is not provided', async () => {\n            const options = {\n                methodId,\n                bigcommerce_payments: {\n                    onComplete: jest.fn(),\n                    container: undefined,\n                },\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments.onClick is provided but it is not a function', async () => {\n            const options = {\n                methodId,\n                bigcommerce_payments: {\n                    container: 'container',\n                    onClick: 'test',\n                    onComplete: jest.fn(),\n                },\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads bigcommerce_payments payment method', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n        });\n\n        it('does not load bigcommerce_payments payment method if payment method is already exists', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n                paymentMethod,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk with provided method id', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                methodId,\n            );\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('initializes paypal buttons with default configuration', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: StyleButtonColor.silver,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('initializes paypal buttons with config related to hosted checkout feature', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: StyleButtonColor.silver,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onShippingAddressChange: expect.any(Function),\n                onShippingOptionsChange: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('renders PayPal button if it is eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('does not render PayPal button if it is not eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n            expect(bigCommercePaymentsIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultContainerId,\n            );\n        });\n\n        it('logs an error when PayPalSDK Buttons implementation is not available for some reasons', async () => {\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockReturnValue(\n                Promise.resolve(undefined),\n            );\n\n            const log = jest.fn();\n\n            jest.spyOn(console, 'error').mockImplementation(log);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(log).toHaveBeenCalled();\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates an order', async () => {\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockResolvedValue('');\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_payments',\n            );\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        describe('default flow', () => {\n            it('tokenizes payment on paypal approve', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(bigCommercePaymentsIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                    methodId,\n                    approveDataOrderId,\n                );\n            });\n        });\n\n        describe('shipping options feature flow', () => {\n            const paypalOrderDetails = getBigCommercePaymentsOrderDetails();\n\n            beforeEach(() => {\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: BigCommercePaymentsButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: approveDataOrderId },\n                                    {\n                                        order: {\n                                            get: jest.fn(() => Promise.resolve(paypalOrderDetails)),\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            close: jest.fn(),\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                        };\n                    },\n                );\n\n                const paymentMethodWithShippingOptionsFeature = {\n                    ...paymentMethod,\n                    initializationData: {\n                        ...paymentMethod.initializationData,\n                        isHostedCheckoutEnabled: true,\n                    },\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n            });\n\n            it('takes order details data from paypal', async () => {\n                const getOrderActionMock = jest.fn(() => Promise.resolve(paypalOrderDetails));\n\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: BigCommercePaymentsButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: approveDataOrderId },\n                                    {\n                                        order: {\n                                            get: getOrderActionMock,\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            close: jest.fn(),\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                        };\n                    },\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(getOrderActionMock).toHaveBeenCalled();\n                expect(getOrderActionMock).toHaveReturnedWith(Promise.resolve(paypalOrderDetails));\n            });\n\n            it('updates billing address with valid customers data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getBigCommercePaymentsOrderDetails());\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                    getBillingAddressFromOrderDetails(),\n                );\n            });\n\n            it('updates shipping address with valid customers data if physical items are available in the cart', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getBigCommercePaymentsOrderDetails());\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(\n                    getShippingAddressFromOrderDetails(),\n                );\n            });\n\n            it('submits BC order with provided methodId', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    {},\n                    {\n                        params: {\n                            methodId: initializationOptions.methodId,\n                        },\n                    },\n                );\n            });\n\n            it('submits BC payment to update BC order data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(bigCommercePaymentsIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    methodId,\n                    approveDataOrderId,\n                );\n            });\n        });\n    });\n\n    describe('#onShippingAddressChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('updates billing and shipping address with data returned from PayPal', async () => {\n            const address = {\n                firstName: '',\n                lastName: '',\n                email: '',\n                phone: '',\n                company: '',\n                address1: '',\n                address2: '',\n                city: 'New York',\n                countryCode: 'US',\n                postalCode: '07564',\n                stateOrProvince: '',\n                stateOrProvinceCode: 'New York',\n                customFields: [],\n            };\n\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'getAddress').mockReturnValue(\n                address,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(address);\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(address);\n        });\n\n        it('selects shipping option after address update', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(\n                bigCommercePaymentsIntegrationService.getShippingOptionOrThrow,\n            ).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order after shipping option selection', async () => {\n            const consignment = getConsignment();\n\n            // INFO: lets imagine that it is a state that we get after consignmentActionCreator.selectShippingOption call\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getConsignmentsOrThrow',\n            ).mockReturnValue([consignment]);\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onShippingOptionsChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('selects shipping option', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(\n                bigCommercePaymentsIntegrationService.getShippingOptionOrThrow,\n            ).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('calls default sign in method', async () => {\n            const credentials = {\n                email: 'test@test.com',\n                password: '123',\n            };\n\n            await strategy.signIn(credentials);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                undefined,\n            );\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('calls default sign out method', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout()', () => {\n        it('calls default continue with checkout callback', async () => {\n            const continueWithCheckoutCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({ continueWithCheckoutCallback });\n\n            expect(continueWithCheckoutCallback).toHaveBeenCalled();\n        });\n\n        it('makes nothing if continue with checkout callback is not provided', async () => {\n            const result = await strategy.executePaymentMethodCheckout();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/bigcommerce-payments-customer-strategy.ts",
    "content": "import { noop } from 'lodash';\n\nimport {\n    CustomerCredentials,\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    DefaultCheckoutButtonHeight,\n    ExecutePaymentMethodCheckoutOptions,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    ApproveCallbackActions,\n    ApproveCallbackPayload,\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsInitializationData,\n    ShippingAddressChangeCallbackPayload,\n    ShippingOptionChangeCallbackPayload,\n} from '../bigcommerce-payments-types';\n\nimport BigCommercePaymentsCustomerInitializeOptions, {\n    WithBigCommercePaymentsCustomerInitializeOptions,\n} from './bigcommerce-payments-customer-initialize-options';\n\nexport default class BigCommercePaymentsCustomerStrategy implements CustomerStrategy {\n    private onError = noop;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions & WithBigCommercePaymentsCustomerInitializeOptions,\n    ): Promise<void> {\n        const { bigcommerce_payments, 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 (!bigcommerce_payments) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.',\n            );\n        }\n\n        if (!bigcommerce_payments.container) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments.container\" argument is not provided.',\n            );\n        }\n\n        if (bigcommerce_payments.onClick && typeof bigcommerce_payments.onClick !== 'function') {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments.onClick\" argument is not a function.',\n            );\n        }\n\n        this.onError = bigcommerce_payments.onError || noop;\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethod(methodId);\n\n        if (!paymentMethod) {\n            await this.paymentIntegrationService.loadPaymentMethod(methodId);\n        }\n\n        const paypalSdk = await this.bigCommercePaymentsIntegrationService.loadPayPalSdk(methodId);\n\n        if (!paypalSdk || !paypalSdk.Buttons || typeof paypalSdk.Buttons !== 'function') {\n            // eslint-disable-next-line no-console\n            console.error(\n                '[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK',\n            );\n\n            return;\n        }\n\n        this.renderButton(methodId, bigcommerce_payments);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signInCustomer(credentials, options);\n\n        return Promise.resolve();\n    }\n\n    async signOut(options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signOutCustomer(options);\n\n        return Promise.resolve();\n    }\n\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n        options?.continueWithCheckoutCallback?.();\n\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        methodId: string,\n        bigcommerce_payments: BigCommercePaymentsCustomerInitializeOptions,\n    ): void {\n        const { container, onClick, onComplete } = bigcommerce_payments;\n\n        const paypalSdk = this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n        const {\n            isHostedCheckoutEnabled,\n            paymentButtonStyles,\n            isServerSideShippingCallbacksEnabled,\n        } = paymentMethod.initializationData || {};\n        const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n        const defaultCallbacks = {\n            createOrder: () =>\n                this.bigCommercePaymentsIntegrationService.createOrder('bigcommerce_payments'),\n            onApprove: ({ orderID }: ApproveCallbackPayload) =>\n                this.bigCommercePaymentsIntegrationService.tokenizePayment(methodId, orderID),\n            ...(onClick && { onClick: () => onClick() }),\n        };\n\n        const hostedCheckoutCallbacks = {\n            ...(!isServerSideShippingCallbacksEnabled && {\n                onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n                    this.onShippingAddressChange(data),\n                onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n                    this.onShippingOptionsChange(data),\n            }),\n            onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n                this.onHostedCheckoutApprove(\n                    data,\n                    actions,\n                    methodId,\n                    onComplete,\n                    isServerSideShippingCallbacksEnabled,\n                ),\n        };\n\n        const buttonRenderOptions: BigCommercePaymentsButtonsOptions = {\n            fundingSource: paypalSdk.FUNDING.PAYPAL,\n            style: this.bigCommercePaymentsIntegrationService.getValidButtonStyle({\n                ...checkoutTopButtonStyles,\n                height: DefaultCheckoutButtonHeight,\n            }),\n            ...defaultCallbacks,\n            ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n        };\n\n        const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n        if (paypalButton.isEligible()) {\n            paypalButton.render(`#${container}`);\n        } else {\n            this.bigCommercePaymentsIntegrationService.removeElement(container);\n        }\n    }\n\n    private async onHostedCheckoutApprove(\n        data: ApproveCallbackPayload,\n        actions: ApproveCallbackActions,\n        methodId: string,\n        onComplete?: () => void,\n        isServerSideShippingCallbacksEnabled?: boolean,\n    ): Promise<void> {\n        if (!data.orderID) {\n            throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n        }\n\n        const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n        try {\n            const hasPhysicalItems = cart.lineItems.physicalItems.length > 0;\n\n            if (!isServerSideShippingCallbacksEnabled) {\n                const orderDetails = await actions.order.get();\n\n                const billingAddress =\n                    this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(\n                        orderDetails,\n                    );\n\n                await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n                if (hasPhysicalItems) {\n                    const shippingAddress =\n                        this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(\n                            orderDetails,\n                        );\n\n                    await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n                }\n            }\n\n            if (hasPhysicalItems) {\n                await this.bigCommercePaymentsIntegrationService.updateOrder(\n                    isServerSideShippingCallbacksEnabled,\n                );\n            }\n\n            if (isServerSideShippingCallbacksEnabled) {\n                await this.paymentIntegrationService.loadCheckout();\n            }\n\n            await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n\n            await this.bigCommercePaymentsIntegrationService.submitPayment(methodId, data.orderID);\n\n            if (onComplete && typeof onComplete === 'function') {\n                onComplete();\n            }\n        } catch (error) {\n            this.handleError(error);\n        }\n    }\n\n    private async onShippingAddressChange(\n        data: ShippingAddressChangeCallbackPayload,\n    ): Promise<void> {\n        const address = this.bigCommercePaymentsIntegrationService.getAddress({\n            city: data.shippingAddress.city,\n            countryCode: data.shippingAddress.countryCode,\n            postalCode: data.shippingAddress.postalCode,\n            stateOrProvinceCode: data.shippingAddress.state,\n        });\n\n        try {\n            // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n            // on this stage we don't have access to valid customer's address except shipping data\n            await this.paymentIntegrationService.updateBillingAddress(address);\n            await this.paymentIntegrationService.updateShippingAddress(address);\n\n            const shippingOption =\n                this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();\n\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.bigCommercePaymentsIntegrationService.updateOrder();\n        } catch (error) {\n            this.handleError(error);\n        }\n    }\n\n    private async onShippingOptionsChange(\n        data: ShippingOptionChangeCallbackPayload,\n    ): Promise<void> {\n        const shippingOption = this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(\n            data.selectedShippingOption.id,\n        );\n\n        try {\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.bigCommercePaymentsIntegrationService.updateOrder();\n        } catch (error) {\n            this.handleError(error);\n        }\n    }\n\n    private handleError(error: unknown) {\n        if (typeof this.onError === 'function') {\n            this.onError(error);\n        } else {\n            throw error;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/bigcommerce-payments-payment-initialize-options.ts",
    "content": "import { HostedInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * A set of options that are required to initialize the BigCommercePayments payment\n * method for presenting its PayPal button.\n *\n * Please note that the minimum version of checkout-sdk is 1.100\n *\n * Also, BigCommercePayments requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\n * ```html\n * <!-- This is where the BigCommercePayments PayPal button will be inserted -->\n * <div id=\"container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'bigcommerce_payments',\n *     bigcommerce_payments: {\n *         container: '#container',\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\n *         submitForm: () => {\n *         // Example function\n *             this.submitOrder(\n *                {\n *                   payment: { methodId: 'bigcommerce_payments', }\n *               }\n *            );\n *         },\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\n *         onValidate: (resolve, reject) => {\n *         // Example function\n *             const isValid = this.validatePaymentForm();\n *             if (isValid) {\n *                 return resolve();\n *             }\n *             return reject();\n *         },\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\n *         onRenderButton: () => {\n *         // Example function\n *             this.hidePaymentSubmitButton();\n *         }\n *     },\n * });\n * ```\n */\nexport default interface BigCommercePaymentsPaymentInitializeOptions {\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    container?: string;\n    /**\n     * The location to insert the Pay Later Messages.\n     */\n    bannerContainerId?: string;\n    /**\n     * If there is no need to initialize the Smart Payment Button, simply pass false as the option value.\n     * The default value is true\n     */\n    shouldRenderPayPalButtonOnInitialization?: boolean;\n\n    /**\n     * A callback for getting form fields values.\n     */\n    getFieldsValues?(): HostedInstrument;\n\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: unknown): void;\n\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n\n    /**\n     * A callback that gets called when strategy is in the process of initialization before rendering Smart Payment Button.\n     *\n     * @param callback - A function, that calls the method to render the Smart Payment Button.\n     */\n    onInit?(callback: () => void): void;\n\n    /**\n     * A callback that gets called when a buyer click on Smart Payment Button\n     * and should validate payment form.\n     *\n     * @param resolve - A function, that gets called if form is valid.\n     * @param reject - A function, that gets called if form is not valid.\n     *\n     * @returns reject() or resolve()\n     */\n    onValidate?(resolve: () => void, reject: () => void): Promise<void>;\n\n    /**\n     * A callback for submitting payment form that gets called\n     * when buyer approves PayPal payment.\n     */\n    submitForm?(): void;\n}\n\nexport interface WithBigCommercePaymentsPaymentInitializeOptions {\n    bigcommerce_payments?: BigCommercePaymentsPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/bigcommerce-payments-payment-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    createBigCommercePaymentsSdk,\n    PayPalMessagesSdk,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    AccountInstrument,\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodInvalidError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getInstruments,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsHostWindow,\n    PayPalSDK,\n} from '../bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsIntegrationServiceMock,\n    getBigCommercePaymentsPaymentMethod,\n    getPayPalSDKMock,\n} from '../mocks';\n\nimport BigCommercePaymentsPaymentInitializeOptions, {\n    WithBigCommercePaymentsPaymentInitializeOptions,\n} from './bigcommerce-payments-payment-initialize-options';\nimport BigCommercePaymentsPaymentStrategy from './bigcommerce-payments-payment-strategy';\n\ndescribe('BigCommercePaymentsPaymentStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let loadingIndicator: LoadingIndicator;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n    let paypalSdk: PayPalSDK;\n    let paypalSdkHelper: PayPalSdkHelper;\n    let payPalMessagesSdk: PayPalMessagesSdk;\n    let strategy: BigCommercePaymentsPaymentStrategy;\n\n    const paypalOrderId = 'paypal123';\n\n    const defaultMethodId = 'bigcommerce_payments';\n    const defaultContainerId = '#container';\n    const defaultMessageContainerId = 'bigcommerce-payments-message-mock-id';\n\n    const bigCommercePaymentsOptions: BigCommercePaymentsPaymentInitializeOptions = {\n        container: defaultContainerId,\n        onValidate: jest.fn(),\n        submitForm: jest.fn(),\n    };\n\n    const initializationOptions: PaymentInitializeOptions &\n        WithBigCommercePaymentsPaymentInitializeOptions = {\n        methodId: defaultMethodId,\n        bigcommerce_payments: bigCommercePaymentsOptions,\n    };\n\n    // TODO: create new instrument for bigcommerce_payments in packages/payment-integrations-test-utils/src/test-utils/payments.mock.ts\n    const paymentInstruments = getInstruments();\n    const accountInstrument = {\n        ...(paymentInstruments.find(\n            (instrument) => instrument.provider === 'paypalcommerce', // TODO: refactor packages/payment-integrations-test-utils/src/test-utils/payments.mock.ts\n        ) || {}),\n        provider: 'bigcommerce_payments',\n    };\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        payPalMessagesSdk = {\n            Messages: jest.fn(),\n        };\n\n        paypalSdk = getPayPalSDKMock();\n        paymentMethod = getBigCommercePaymentsPaymentMethod();\n        paymentMethod.id = defaultMethodId;\n        paymentMethod.initializationData.orderId = undefined;\n\n        loadingIndicator = new LoadingIndicator();\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paypalSdkHelper = createBigCommercePaymentsSdk();\n\n        strategy = new BigCommercePaymentsPaymentStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n            paypalSdkHelper,\n            loadingIndicator,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockResolvedValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockResolvedValue('');\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'submitPayment').mockResolvedValue();\n\n        jest.spyOn(loadingIndicator, 'show').mockReturnValue(undefined);\n        jest.spyOn(loadingIndicator, 'hide').mockReturnValue(undefined);\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: BigCommercePaymentsButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on('onClick', () => {\n                    if (options.onClick) {\n                        options.onClick(\n                            { fundingSource: paypalSdk.FUNDING.PAYPAL },\n                            {\n                                reject: jest.fn(),\n                                resolve: jest.fn(),\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: paypalOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onCancel', () => {\n                    if (options.onCancel) {\n                        options.onCancel();\n                    }\n                });\n\n                eventEmitter.on('onError', () => {\n                    if (options.onError) {\n                        options.onError(new Error());\n                    }\n                });\n\n                return {\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                    close: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BigCommercePaymentsHostWindow).paypal;\n    });\n\n    it('creates an instance of the BigCommercePaymentsPaymentStrategy payment strategy', () => {\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsPaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if options.bigcommerce_payments is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not continues strategy initialization if order id is available in initializationData', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n            );\n        });\n    });\n\n    describe('#renderButton()', () => {\n        it('initializes paypal button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                style: {\n                    color: 'black',\n                    height: 55,\n                    label: 'pay',\n                },\n                createOrder: expect.any(Function),\n                onClick: expect.any(Function),\n                onApprove: expect.any(Function),\n                onCancel: expect.any(Function),\n                onError: expect.any(Function),\n            });\n        });\n\n        it('does not render paypal button if it is not eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('does not render paypal button if shouldNotRenderOnInitialization option is true', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments: {\n                    ...bigCommercePaymentsOptions,\n                },\n            });\n\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('renders paypal button if onInit callback is passed', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            const options = {\n                ...initializationOptions,\n                bigcommerce_payments: {\n                    ...bigCommercePaymentsOptions,\n                    onInit: jest.fn().mockImplementation((renderButtonCallback) => {\n                        eventEmitter.on('onInit', () => {\n                            renderButtonCallback();\n                        });\n                    }),\n                },\n            };\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(options);\n\n            eventEmitter.emit('onInit');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('calls the onRenderButton callback if it is provided', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            const options = {\n                ...initializationOptions,\n                bigcommerce_payments: {\n                    ...bigCommercePaymentsOptions,\n                    onRenderButton: jest.fn(),\n                },\n            };\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(options);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(options.bigcommerce_payments.onRenderButton).toHaveBeenCalled();\n        });\n\n        it('renders paypal button if it is eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates paypal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_paymentscheckout',\n                { shouldSaveInstrument: false },\n            );\n        });\n\n        it('creates paypal order with the shouldSaveInstrument gotten from getFieldsValues callback', async () => {\n            const options = {\n                ...initializationOptions,\n                bigcommerce_payments: {\n                    ...bigCommercePaymentsOptions,\n                    getFieldsValues: jest.fn().mockReturnValue({\n                        shouldSaveInstrument: true,\n                    }),\n                },\n            };\n\n            await strategy.initialize(options);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_paymentscheckout',\n                { shouldSaveInstrument: true },\n            );\n        });\n    });\n\n    describe('#onClick button callback', () => {\n        it('calls validation callback with provided params', async () => {\n            const onValidateMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments: {\n                    ...bigCommercePaymentsOptions,\n                    onValidate: onValidateMock,\n                },\n            });\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(onValidateMock).toHaveBeenCalled();\n        });\n\n        it('triggers the indicator through the validation callback call with provided params', async () => {\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments: {\n                    ...bigCommercePaymentsOptions,\n                    onValidate: jest.fn().mockImplementation((onValidationPassed) => {\n                        onValidationPassed();\n                    }),\n                },\n            });\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.show).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        it('submits form', async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments: {\n                    ...bigCommercePaymentsOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n        });\n\n        it(\"doesn't hide loading indicator after form submit\", async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments: {\n                    ...bigCommercePaymentsOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n            expect(loadingIndicator.hide).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onCancel');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onError button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n\n        it('calls onError callback if it is provided', async () => {\n            const onErrorMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments: {\n                    ...bigCommercePaymentsOptions,\n                    onError: onErrorMock,\n                },\n            });\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws an error if payload.payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if orderId is not defined', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodInvalidError);\n            }\n        });\n\n        it('submits order', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('submits payment with provided data', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: payload.payment.methodId,\n                paymentData: {\n                    formattedPayload: {\n                        paypal_account: { order_id: paypalOrderId },\n                    },\n                    shouldSaveInstrument: false,\n                    shouldSetAsDefaultInstrument: false,\n                },\n            });\n        });\n\n        it('submits payment with provided vaulting data', async () => {\n            const { bigpayToken } = accountInstrument as AccountInstrument;\n\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockResolvedValue(\n                paypalOrderId,\n            );\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                    paymentData: {\n                        instrumentId: bigpayToken,\n                        shouldSetAsDefaultInstrument: true,\n                    },\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: payload.payment.methodId,\n                paymentData: {\n                    instrumentId: '45312',\n                    shouldSetAsDefaultInstrument: true,\n                    formattedPayload: {\n                        paypal_account: { order_id: paypalOrderId },\n                        bigpay_token: { token: bigpayToken },\n                    },\n                },\n            });\n        });\n\n        it('loads paypalsdk script if receive INSTRUMENT_DECLINED error', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            const providerError = {\n                status: 'error',\n                three_ds_result: {\n                    acs_url: null,\n                    payer_auth_request: null,\n                    merchant_data: null,\n                    callback_url: null,\n                },\n                errors: [\n                    {\n                        code: 'invalid_request_error',\n                        message:\n                            'Were experiencing difficulty processing your transaction. Please contact us or try again later.',\n                    },\n                    {\n                        code: 'transaction_rejected',\n                        message: 'Payment was declined. Please try again.',\n                        provider_error: {\n                            code: 'INSTRUMENT_DECLINED',\n                        },\n                    },\n                ],\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw providerError;\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            try {\n                await strategy.execute(payload);\n            } catch (_error: unknown) {\n                expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalled();\n            }\n        });\n\n        it('paypalsdk script should not be loaded if the INSTRUMENT_DECLINED error is not received', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw new Error();\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            try {\n                await strategy.execute(payload);\n            } catch (_error: unknown) {\n                expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).not.toHaveBeenCalled();\n            }\n        });\n\n        it('renders paypal spb if receive INSTRUMENT_DECLINED error', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            const providerError = {\n                status: 'error',\n                three_ds_result: {\n                    acs_url: null,\n                    payer_auth_request: null,\n                    merchant_data: null,\n                    callback_url: null,\n                },\n                errors: [\n                    {\n                        code: 'invalid_request_error',\n                        message:\n                            'Were experiencing difficulty processing your transaction. Please contact us or try again later.',\n                    },\n                    {\n                        code: 'transaction_rejected',\n                        message: 'Payment was declined. Please try again.',\n                        provider_error: {\n                            code: 'INSTRUMENT_DECLINED',\n                        },\n                    },\n                ],\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw providerError;\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            try {\n                await strategy.execute(payload);\n            } catch (_error: unknown) {\n                expect(paypalSdk.Buttons).toHaveBeenCalled();\n            }\n        });\n\n        it('close paypal buttons before render new buttons after getting INSTRUMENT_DECLINED error', async () => {\n            const bigCommercePaymentsSdkCloseMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                (options: BigCommercePaymentsButtonsOptions) => {\n                    eventEmitter.on('onApprove', () => {\n                        if (options.onApprove) {\n                            options.onApprove(\n                                { orderID: paypalOrderId },\n                                {\n                                    order: {\n                                        get: jest.fn(),\n                                    },\n                                },\n                            );\n                        }\n                    });\n\n                    return {\n                        isEligible: jest.fn(() => true),\n                        render: jest.fn(),\n                        close: bigCommercePaymentsSdkCloseMock,\n                    };\n                },\n            );\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            const providerError = {\n                status: 'error',\n                three_ds_result: {\n                    acs_url: null,\n                    payer_auth_request: null,\n                    merchant_data: null,\n                    callback_url: null,\n                },\n                errors: [\n                    {\n                        code: 'invalid_request_error',\n                        message:\n                            'Were experiencing difficulty processing your transaction. Please contact us or try again later.',\n                    },\n                    {\n                        code: 'transaction_rejected',\n                        message: 'Payment was declined. Please try again.',\n                        provider_error: {\n                            code: 'INSTRUMENT_DECLINED',\n                        },\n                    },\n                ],\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw providerError;\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            try {\n                await strategy.execute(payload);\n            } catch (_error: unknown) {\n                expect(bigCommercePaymentsSdkCloseMock).toHaveBeenCalled();\n            }\n        });\n\n        it('throws specific error if receive INSTRUMENT_DECLINED error', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            bigCommercePaymentsOptions.onError = jest.fn();\n\n            const providerError = {\n                status: 'error',\n                three_ds_result: {\n                    acs_url: null,\n                    payer_auth_request: null,\n                    merchant_data: null,\n                    callback_url: null,\n                },\n                errors: [\n                    {\n                        code: 'invalid_request_error',\n                        message:\n                            'Were experiencing difficulty processing your transaction. Please contact us or try again later.',\n                    },\n                    {\n                        code: 'transaction_rejected',\n                        message: 'Payment was declined. Please try again.',\n                        provider_error: {\n                            code: 'INSTRUMENT_DECLINED',\n                        },\n                    },\n                ],\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw providerError;\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            try {\n                await strategy.execute(payload);\n            } catch (_error: unknown) {\n                expect(bigCommercePaymentsOptions.onError).toHaveBeenCalledWith(\n                    new Error('INSTRUMENT_DECLINED'),\n                );\n            }\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('closes paypal button component on deinitialize strategy', async () => {\n            const bigCommercePaymentsSdkCloseMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: jest.fn(),\n                close: bigCommercePaymentsSdkCloseMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n            await strategy.deinitialize();\n\n            expect(bigCommercePaymentsSdkCloseMock).toHaveBeenCalled();\n        });\n\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('BigCommercePayments Credit messages logic', () => {\n        const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n        const options: PaymentInitializeOptions & WithBigCommercePaymentsPaymentInitializeOptions =\n            {\n                methodId: defaultMethodId,\n                bigcommerce_payments: {\n                    bannerContainerId: defaultMessageContainerId,\n                },\n            };\n\n        beforeEach(() => {\n            const div = document.createElement('div');\n\n            div.setAttribute('id', defaultMessageContainerId);\n            document.body.appendChild(div);\n\n            jest.spyOn(paypalSdkHelper, 'getPayPalMessages').mockImplementation(() =>\n                Promise.resolve(payPalMessagesSdk),\n            );\n            jest.spyOn(payPalMessagesSdk, 'Messages').mockImplementation(() => ({\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n        });\n\n        afterEach(() => {\n            document.getElementById(defaultMessageContainerId)?.remove();\n        });\n\n        it('does not render PayPal message when paypalBNPLConfiguration is not provided', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: undefined,\n                },\n            });\n\n            await strategy.initialize(options);\n\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('does not render PayPal message when isPayPalCreditAvailable is true', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isPayPalCreditAvailable: true,\n                },\n            });\n\n            await strategy.initialize(options);\n\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('does not render PayPal message if banner is disabled in paypalBNPLConfiguration', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: [\n                        {\n                            id: 'checkout',\n                            status: false,\n                        },\n                    ],\n                },\n            });\n\n            await strategy.initialize(options);\n\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('initializes PayPal Messages component', async () => {\n            await strategy.initialize(options);\n\n            expect(payPalMessagesSdk.Messages).toHaveBeenCalledWith({\n                amount: 190,\n                placement: 'payment',\n                style: {\n                    layout: 'text',\n                    logo: {\n                        type: 'alternative',\n                    },\n                    text: {\n                        color: 'white',\n                        size: 10,\n                    },\n                },\n            });\n        });\n\n        it('does not execute PayPal button initialization logic if bannerContainerId is provided', async () => {\n            await strategy.initialize(options);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).not.toHaveBeenCalledWith(\n                defaultMethodId,\n            );\n        });\n\n        it('show an error if bannerContainerId is provided but does not exist as DOM element', async () => {\n            Object.defineProperty(window, 'console', {\n                value: {\n                    error: jest.fn(),\n                },\n            });\n\n            await strategy.initialize({\n                ...options,\n                bigcommerce_payments: {\n                    ...options.bigcommerce_payments,\n                    bannerContainerId: '',\n                },\n            });\n\n            expect(payPalMessagesSdk.Messages).not.toHaveBeenCalled();\n            expect(window.console.error).toHaveBeenCalledWith(\n                'Unable to create banner without valid banner container ID.',\n            );\n        });\n\n        it('renders PayPal message', async () => {\n            await strategy.initialize(options);\n\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalledWith(\n                `#${defaultMessageContainerId}`,\n            );\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/bigcommerce-payments-payment-strategy.ts",
    "content": "import {\n    getPaypalMessagesStylesFromBNPLConfig,\n    isBigCommercePaymentsProviderError,\n    MessagingOptions,\n    PayPalBNPLConfigurationItem,\n    PayPalMessagesSdk,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    HostedInstrument,\n    InvalidArgumentError,\n    isHostedInstrumentLike,\n    isVaultedInstrument,\n    OrderFinalizationNotRequiredError,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentInstrumentPayload,\n    PaymentIntegrationService,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\nimport { isBaseInstrument } from '@bigcommerce/checkout-sdk/utility';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    ApproveCallbackPayload,\n    BigCommercePaymentsButtons,\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsInitializationData,\n    ClickCallbackActions,\n} from '../bigcommerce-payments-types';\n\nimport BigCommercePaymentsPaymentInitializeOptions, {\n    WithBigCommercePaymentsPaymentInitializeOptions,\n} from './bigcommerce-payments-payment-initialize-options';\n\nexport default class BigCommercePaymentsPaymentStrategy implements PaymentStrategy {\n    private loadingIndicatorContainer?: string;\n    private orderId?: string;\n    private paypalButton?: BigCommercePaymentsButtons;\n    private bigcommerce_payments?: BigCommercePaymentsPaymentInitializeOptions;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\n        private paypalSdkHelper: PayPalSdkHelper,\n        private loadingIndicator: LoadingIndicator,\n    ) {}\n\n    async initialize(\n        options?: PaymentInitializeOptions & WithBigCommercePaymentsPaymentInitializeOptions,\n    ): Promise<void> {\n        const { methodId, bigcommerce_payments } = options || {};\n\n        this.bigcommerce_payments = bigcommerce_payments;\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 (!bigcommerce_payments) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments\" argument is not provided.`,\n            );\n        }\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n\n        const { container, bannerContainerId } = bigcommerce_payments;\n\n        const {\n            orderId,\n            paypalBNPLConfiguration = [],\n            isPayPalCreditAvailable,\n        } = paymentMethod.initializationData || {};\n\n        if (bannerContainerId !== undefined) {\n            if (!document.getElementById(bannerContainerId)) {\n                // eslint-disable-next-line no-console\n                console.error('Unable to create banner without valid banner container ID.');\n\n                return;\n            }\n\n            const bannerConfiguration = paypalBNPLConfiguration?.find(\n                ({ id }) => id === 'checkout',\n            );\n\n            if (isPayPalCreditAvailable || !bannerConfiguration?.status) {\n                return;\n            }\n\n            const paypalMessages = await this.paypalSdkHelper.getPayPalMessages(\n                paymentMethod,\n                state.getCartOrThrow().currency.code,\n            );\n\n            if (!paypalMessages || typeof paypalMessages?.Messages !== 'function') {\n                console.error(\n                    '[BC PayPalCommerce PayLater]: banner could not be rendered, due to issues with loading PayPal SDK',\n                );\n\n                return;\n            }\n\n            return this.renderMessages(paypalMessages, bannerContainerId, bannerConfiguration);\n        }\n\n        // Info:\n        // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n        // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n        // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n        if (orderId) {\n            this.orderId = orderId;\n\n            return;\n        }\n\n        this.loadingIndicatorContainer = container?.split('#')[1];\n\n        await this.bigCommercePaymentsIntegrationService.loadPayPalSdk(methodId);\n\n        if (bigcommerce_payments.onInit && typeof bigcommerce_payments.onInit === 'function') {\n            bigcommerce_payments.onInit(() => this.renderButton(methodId, bigcommerce_payments));\n        }\n\n        if (\n            bigcommerce_payments.shouldRenderPayPalButtonOnInitialization === undefined ||\n            bigcommerce_payments.shouldRenderPayPalButtonOnInitialization\n        ) {\n            this.renderButton(methodId, bigcommerce_payments);\n        }\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n        const { onError } = this.bigcommerce_payments || {};\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const { methodId, paymentData } = payment;\n\n        if (this.isPayPalVaultedInstrumentPaymentData(paymentData) && !this.orderId) {\n            this.orderId = await this.createOrder();\n        }\n\n        if (!this.orderId) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        const paymentPayload = this.isPayPalVaultedInstrumentPaymentData(paymentData)\n            ? this.prepareVaultedInstrumentPaymentPayload(methodId, this.orderId, paymentData)\n            : this.preparePaymentPayload(methodId, this.orderId, paymentData);\n\n        try {\n            await this.paymentIntegrationService.submitOrder(order, options);\n            await this.paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error: unknown) {\n            if (this.isProviderError(error)) {\n                await this.bigCommercePaymentsIntegrationService.loadPayPalSdk(payment.methodId);\n\n                await new Promise((_resolve, reject) => {\n                    if (this.bigcommerce_payments) {\n                        this.paypalButton?.close();\n                        this.renderButton(payment.methodId, this.bigcommerce_payments);\n                        this.handleError(new Error('INSTRUMENT_DECLINED'), onError);\n                    }\n\n                    reject();\n                });\n            }\n\n            this.handleError(error, onError);\n\n            return Promise.reject();\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this.orderId = undefined;\n\n        this.paypalButton?.close();\n\n        return Promise.resolve();\n    }\n\n    private prepareVaultedInstrumentPaymentPayload(\n        methodId: string,\n        paypalOrderId: string,\n        paymentData: VaultedInstrument & HostedInstrument,\n    ): Payment {\n        const { instrumentId, shouldSetAsDefaultInstrument } = paymentData;\n\n        const shouldConfirmInstrument = !this.isTrustedVaultingFlow(paymentData);\n\n        if (shouldConfirmInstrument) {\n            return {\n                methodId,\n                paymentData: {\n                    shouldSaveInstrument: shouldConfirmInstrument,\n                    shouldSetAsDefaultInstrument,\n                    formattedPayload: {\n                        paypal_account: {\n                            order_id: paypalOrderId,\n                        },\n                    },\n                },\n            };\n        }\n\n        return {\n            methodId,\n            paymentData: {\n                instrumentId,\n                shouldSetAsDefaultInstrument,\n                formattedPayload: {\n                    paypal_account: {\n                        order_id: paypalOrderId,\n                    },\n                    bigpay_token: {\n                        token: instrumentId,\n                    },\n                },\n            },\n        };\n    }\n\n    private preparePaymentPayload(\n        methodId: string,\n        paypalOrderId: string,\n        paymentData: OrderPaymentRequestBody['paymentData'],\n    ): Payment {\n        const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n            isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n        return {\n            methodId,\n            paymentData: {\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n                formattedPayload: {\n                    paypal_account: {\n                        order_id: paypalOrderId,\n                    },\n                },\n            },\n        };\n    }\n\n    /**\n     *\n     * Button methods/callbacks\n     *\n     * */\n    private renderButton(\n        methodId: string,\n        bigcommerce_payments: BigCommercePaymentsPaymentInitializeOptions,\n    ): void {\n        const paypalSdk = this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow();\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n        const { paymentButtonStyles } = paymentMethod.initializationData || {};\n        const { checkoutPaymentButtonStyles } = paymentButtonStyles || {};\n        const { container, onError, onRenderButton, onValidate, submitForm } = bigcommerce_payments;\n\n        if (!container) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"container\" argument is not provided.',\n            );\n        }\n\n        const buttonOptions: BigCommercePaymentsButtonsOptions = {\n            fundingSource: paypalSdk.FUNDING.PAYPAL,\n            style: this.bigCommercePaymentsIntegrationService.getValidButtonStyle(\n                checkoutPaymentButtonStyles,\n            ),\n            createOrder: () => this.createOrder(),\n            onClick: (_, actions) => this.handleClick(actions, onValidate),\n            onApprove: (data) => this.handleApprove(data, submitForm),\n            onError: (error) => this.handleError(error, onError),\n            onCancel: () => this.toggleLoadingIndicator(false),\n        };\n\n        this.paypalButton = paypalSdk.Buttons(buttonOptions);\n\n        if (!this.paypalButton.isEligible()) {\n            return;\n        }\n\n        if (onRenderButton && typeof onRenderButton === 'function') {\n            onRenderButton();\n        }\n\n        this.paypalButton.render(container);\n    }\n\n    private async handleClick(\n        actions: ClickCallbackActions,\n        onValidate: BigCommercePaymentsPaymentInitializeOptions['onValidate'],\n    ): Promise<void> {\n        const { resolve, reject } = actions;\n\n        const onValidationPassed = () => {\n            this.toggleLoadingIndicator(true);\n\n            return resolve();\n        };\n\n        await onValidate?.(onValidationPassed, reject);\n    }\n\n    private handleApprove(\n        { orderID }: ApproveCallbackPayload,\n        submitForm: BigCommercePaymentsPaymentInitializeOptions['submitForm'],\n    ): void {\n        this.orderId = orderID;\n\n        submitForm?.();\n    }\n\n    private handleError(\n        error: unknown,\n        onError: BigCommercePaymentsPaymentInitializeOptions['onError'],\n    ): void {\n        this.toggleLoadingIndicator(false);\n\n        if (onError && typeof onError === 'function') {\n            onError(error);\n        }\n    }\n\n    private async createOrder(): Promise<string> {\n        const fieldsValues = this.getFieldsValues();\n\n        return this.bigCommercePaymentsIntegrationService.createOrder(\n            'bigcommerce_paymentscheckout',\n            {\n                shouldSaveInstrument: fieldsValues?.shouldSaveInstrument || false,\n            },\n        );\n    }\n\n    /**\n     *\n     * Vaulting flow methods\n     *\n     * */\n    private getFieldsValues(): HostedInstrument | undefined {\n        const { getFieldsValues } = this.bigcommerce_payments || {};\n\n        return typeof getFieldsValues === 'function' ? getFieldsValues() : undefined;\n    }\n\n    private isTrustedVaultingFlow(paymentData?: PaymentInstrumentPayload): boolean {\n        if (paymentData && isVaultedInstrument(paymentData)) {\n            const state = this.paymentIntegrationService.getState();\n\n            const instruments = state.getInstruments();\n\n            const findInstrument = instruments?.find(\n                (instrument) =>\n                    isBaseInstrument(instrument) &&\n                    instrument.bigpayToken === paymentData.instrumentId,\n            );\n            const trustedShippingAddress = isBaseInstrument(findInstrument)\n                ? findInstrument.trustedShippingAddress\n                : {};\n\n            return !!trustedShippingAddress;\n        }\n\n        return false;\n    }\n\n    /**\n     *\n     * Loading Indicator methods\n     *\n     * */\n    private toggleLoadingIndicator(isLoading: boolean): void {\n        if (isLoading && this.loadingIndicatorContainer) {\n            this.loadingIndicator.show(this.loadingIndicatorContainer);\n        } else {\n            this.loadingIndicator.hide();\n        }\n    }\n\n    /**\n     *\n     * Guards\n     *\n     */\n    private isPayPalVaultedInstrumentPaymentData(\n        paymentData?: PaymentInstrumentPayload,\n    ): paymentData is VaultedInstrument & HostedInstrument {\n        return (\n            !!paymentData && isVaultedInstrument(paymentData) && isHostedInstrumentLike(paymentData)\n        );\n    }\n\n    /**\n     *\n     * Render Pay Later Messages\n     *\n     * */\n    private renderMessages(\n        paypalMessages: PayPalMessagesSdk,\n        bannerContainerId: string,\n        bannerConfiguration: PayPalBNPLConfigurationItem,\n    ): void {\n        const checkout = this.paymentIntegrationService.getState().getCheckoutOrThrow();\n\n        const paypalMessagesOptions: MessagingOptions = {\n            amount: checkout.outstandingBalance,\n            placement: 'payment',\n            style: getPaypalMessagesStylesFromBNPLConfig(bannerConfiguration),\n        };\n\n        paypalMessages.Messages(paypalMessagesOptions).render(`#${bannerContainerId}`);\n    }\n\n    private isProviderError(error: unknown): boolean {\n        if (isBigCommercePaymentsProviderError(error)) {\n            const paypalProviderError = error?.errors?.filter((e) => e.provider_error) || [];\n\n            return paypalProviderError[0]?.provider_error?.code === 'INSTRUMENT_DECLINED';\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/create-bigcommerce-payments-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsButtonStrategy from './bigcommerce-payments-button-strategy';\nimport createBigCommercePaymentsButtonStrategy from './create-bigcommerce-payments-button-strategy';\n\ndescribe('createBigCommercePaymentsButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePaymentsButtonStrategy', () => {\n        const strategy = createBigCommercePaymentsButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/create-bigcommerce-payments-button-strategy.ts",
    "content": "import {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsButtonStrategy from './bigcommerce-payments-button-strategy';\n\nconst createBigCommercePaymentsButtonStrategy: CheckoutButtonStrategyFactory<\n    BigCommercePaymentsButtonStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsButtonStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsButtonStrategy, [\n    { id: 'bigcommerce_payments' },\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/create-bigcommerce-payments-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsCustomerStrategy from './bigcommerce-payments-customer-strategy';\nimport createBigCommercePaymentsCustomerStrategy from './create-bigcommerce-payments-customer-strategy';\n\ndescribe('createBigCommercePaymentsCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePaymentsCustomerStrategy customer strategy', () => {\n        const strategy = createBigCommercePaymentsCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/create-bigcommerce-payments-customer-strategy.ts",
    "content": "import {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsCustomerStrategy from './bigcommerce-payments-customer-strategy';\n\nconst createBigCommercePaymentsCustomerStrategy: CustomerStrategyFactory<\n    BigCommercePaymentsCustomerStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsCustomerStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsCustomerStrategy, [\n    { id: 'bigcommerce_payments' },\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/create-bigcommerce-payments-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsPaymentStrategy from './bigcommerce-payments-payment-strategy';\nimport createBigCommercePaymentsPaymentStrategy from './create-bigcommerce-payments-payment-strategy';\n\ndescribe('createBigCommercePaymentsPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePayments payment strategy', () => {\n        const strategy = createBigCommercePaymentsPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments/create-bigcommerce-payments-payment-strategy.ts",
    "content": "import { createBigCommercePaymentsSdk } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { LOADING_INDICATOR_STYLES } from '../bigcommerce-payments-constants';\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsPaymentStrategy from './bigcommerce-payments-payment-strategy';\n\nconst createBigCommercePaymentsPaymentStrategy: PaymentStrategyFactory<\n    BigCommercePaymentsPaymentStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsPaymentStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n        createBigCommercePaymentsSdk(),\n        new LoadingIndicator({\n            containerStyles: LOADING_INDICATOR_STYLES,\n        }),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsPaymentStrategy, [\n    { id: 'bigcommerce_payments' },\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-alternative-methods/bigcommerce-payments-alternative-methods-payment-initialize-options.ts",
    "content": "import {\n    BigCommercePaymentsFieldsStyleOptions,\n    InitCallbackActions,\n} from '../bigcommerce-payments-types';\n\n/**\n * A set of options that are required to initialize the BigCommercePayments payment\n * method for presenting its PayPal button.\n *\n *\n * Also, BCP (also known as BigCommercePayments) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\n * ```html\n * <!-- This is where the APM button will be inserted -->\n * <div id=\"container\"></div>\n * <!-- This is where the alternative payment methods fields will be inserted.  -->\n * <div id=\"apm-fields-container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     gatewayId: 'bigcommerce_payments_apms',\n *     methodId: 'sepa',\n *     bigcommerce_payments_apms: {\n *         container: '#container',\n *         apmFieldsContainer: '#apm-fields-container',\n *         apmFieldsStyles: {\n *             base: {\n *                 backgroundColor: 'transparent',\n *             },\n *             input: {\n *                 backgroundColor: 'white',\n *                 fontSize: '1rem',\n *                 color: '#333',\n *                 borderColor: '#d9d9d9',\n *                 borderRadius: '4px',\n *                 borderWidth: '1px',\n *                 padding: '1rem',\n *             },\n *             invalid: {\n *                 color: '#ed6a6a',\n *             },\n *             active: {\n *                 color: '#4496f6',\n *             },\n *         },\n *         clientId: 'YOUR_CLIENT_ID',\n * // Callback for submitting payment form that gets called when a buyer approves payment\n *         submitForm: () => {\n *         // Example function\n *             this.submitOrder(\n *                {\n *                   payment: { methodId: 'bigcommerce_payments_apms', }\n *               }\n *            );\n *         },\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\n *         onValidate: (resolve, reject) => {\n *         // Example function\n *             const isValid = this.validatePaymentForm();\n *             if (isValid) {\n *                 return resolve();\n *             }\n *             return reject();\n *         },\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\n *         onRenderButton: () => {\n *         // Example function\n *             this.hidePaymentSubmitButton();\n *         }\n *     },\n * });\n * ```\n */\nexport default interface BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions {\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    container: string;\n\n    /**\n     * The CSS selector of a container where the alternative payment methods fields widget should be inserted into.\n     * It's necessary to specify this parameter when using Alternative Payment Methods.\n     * Without it alternative payment methods will not work.\n     */\n    apmFieldsContainer?: string;\n\n    /**\n     * Object with styles to customize alternative payment methods fields.\n     */\n    apmFieldsStyles?: BigCommercePaymentsFieldsStyleOptions;\n\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: Error | unknown): void;\n\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n\n    /**\n     * A callback that gets called when a buyer click on Smart Payment Button\n     * and should validate payment form.\n     *\n     * @param resolve - A function, that gets called if form is valid.\n     * @param reject - A function, that gets called if form is not valid.\n     *\n     * @returns reject() or resolve()\n     */\n    onValidate(resolve: () => void, reject: () => void): Promise<void>;\n\n    /**\n     * A callback for submitting payment form that gets called\n     * when buyer approved PayPal account.\n     */\n    submitForm(): void;\n\n    /**\n     * A callback that gets called\n     * when Smart Payment Button is initialized.\n     */\n    onInitButton(actions: InitCallbackActions): Promise<void>;\n}\n\nexport interface WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions {\n    bigcommerce_payments_apms?: BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-alternative-methods/bigcommerce-payments-alternative-methods-payment-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    createBigCommercePaymentsSdk,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    BillingAddress,\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodInvalidError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsHostWindow,\n    NonInstantAlternativePaymentMethods,\n    PayPalOrderStatus,\n    PayPalSDK,\n} from '../bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsIntegrationServiceMock,\n    getBigCommercePaymentsPaymentMethod,\n    getPayPalSDKMock,\n} from '../mocks';\n\nimport BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions from './bigcommerce-payments-alternative-methods-payment-initialize-options';\nimport BigCommercePaymentsAlternativeMethodsPaymentStrategy from './bigcommerce-payments-alternative-methods-payment-strategy';\n\n// TODO: CHECKOUT-7766\ndescribe('BigCommercePaymentsAlternativeMethodsPaymentStrategy', () => {\n    let billingAddress: BillingAddress;\n    let eventEmitter: EventEmitter;\n    let loadingIndicator: LoadingIndicator;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n    let paypalSdk: PayPalSDK;\n    let strategy: BigCommercePaymentsAlternativeMethodsPaymentStrategy;\n    let bigCommercePaymentsSdkHelper: PayPalSdkHelper;\n\n    const paypalOrderId = 'paypal123';\n\n    const defaultMethodId = 'sepa';\n    const defaultGatewayId = 'bigcommerce_payments_apms';\n    const defaultContainerId = '#container';\n    const defaultApmFieldsContainerId = '#container';\n\n    const bigCommercePaymentsAlternativeMethodsOptions: BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions =\n        {\n            container: defaultContainerId,\n            apmFieldsContainer: defaultApmFieldsContainerId,\n            onInitButton: jest.fn(),\n            onValidate: jest.fn(),\n            submitForm: jest.fn(),\n        };\n\n    const initializationOptions: PaymentInitializeOptions = {\n        methodId: defaultMethodId,\n        gatewayId: defaultGatewayId,\n        bigcommerce_payments_apms: bigCommercePaymentsAlternativeMethodsOptions,\n    };\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        billingAddress = getBillingAddress();\n        paypalSdk = getPayPalSDKMock();\n        paymentMethod = getBigCommercePaymentsPaymentMethod();\n        paymentMethod.id = defaultGatewayId;\n        paymentMethod.initializationData.orderId = undefined;\n\n        loadingIndicator = new LoadingIndicator();\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        bigCommercePaymentsSdkHelper = createBigCommercePaymentsSdk();\n\n        strategy = new BigCommercePaymentsAlternativeMethodsPaymentStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n            bigCommercePaymentsSdkHelper,\n            loadingIndicator,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getBillingAddressOrThrow',\n        ).mockReturnValue(billingAddress);\n\n        jest.spyOn(bigCommercePaymentsSdkHelper, 'getPayPalApmsSdk').mockResolvedValue(paypalSdk);\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockResolvedValue(\n            paypalOrderId,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'submitPayment').mockResolvedValue();\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getOrderStatus').mockResolvedValue(\n            PayPalOrderStatus.Approved,\n        );\n\n        jest.spyOn(loadingIndicator, 'show').mockReturnValue(undefined);\n        jest.spyOn(loadingIndicator, 'hide').mockReturnValue(undefined);\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: BigCommercePaymentsButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on('onInit', () => {\n                    if (options.onInit) {\n                        options.onInit(\n                            { correlationID: defaultMethodId },\n                            {\n                                disable: jest.fn(),\n                                enable: jest.fn(),\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onClick', () => {\n                    if (options.onClick) {\n                        options.onClick(\n                            { fundingSource: defaultMethodId },\n                            {\n                                reject: jest.fn(),\n                                resolve: jest.fn(),\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: paypalOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onCancel', () => {\n                    if (options.onCancel) {\n                        options.onCancel();\n                    }\n                });\n\n                eventEmitter.on('onError', () => {\n                    if (options.onError) {\n                        options.onError(new Error());\n                    }\n                });\n\n                return {\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                    close: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BigCommercePaymentsHostWindow).paypal;\n    });\n\n    it('creates an instance of the BigCommercePayments Alternative Methods payment strategy', () => {\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsAlternativeMethodsPaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if gatewayId is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if options.bigcommerce_payments_apms or options.bigcommerce_payments is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n                gatewayId: defaultGatewayId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not continues strategy initialization if order id is available in initializationData', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkHelper.getPayPalApmsSdk).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkHelper.getPayPalApmsSdk).toHaveBeenCalledWith(\n                paymentMethod,\n                'USD',\n            );\n        });\n    });\n\n    describe('#renderButton()', () => {\n        it('initializes APM button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: defaultMethodId,\n                style: {\n                    color: 'black',\n                    height: 55,\n                    label: 'pay',\n                },\n                onInit: expect.any(Function),\n                onClick: expect.any(Function),\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onCancel: expect.any(Function),\n                onError: expect.any(Function),\n            });\n        });\n\n        it('does not render paypal button if it is not eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('renders APM button if it is eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_payments_apms',\n            );\n        });\n\n        it('calls validation callback with provided params', async () => {\n            const onValidateMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: NonInstantAlternativePaymentMethods.OXXO,\n                bigcommerce_payments_apms: {\n                    ...bigCommercePaymentsAlternativeMethodsOptions,\n                    onValidate: onValidateMock,\n                },\n            });\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(onValidateMock).toHaveBeenCalled();\n        });\n\n        it('patches the order for non instant payment methods', async () => {\n            const nonInstantMethodId = 'oxxo';\n\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: nonInstantMethodId,\n            });\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_payments_apms',\n            );\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(bigCommercePaymentsIntegrationService.submitPayment).toHaveBeenCalledWith(\n                nonInstantMethodId,\n                paypalOrderId,\n                defaultGatewayId,\n            );\n        });\n    });\n\n    describe('#onClick button callback', () => {\n        it('calls validation callback with provided params', async () => {\n            const onValidateMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: NonInstantAlternativePaymentMethods.OXXO,\n                bigcommerce_payments_apms: {\n                    ...bigCommercePaymentsAlternativeMethodsOptions,\n                    onValidate: onValidateMock,\n                },\n            });\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(onValidateMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onInit button callback', () => {\n        it('calls validation callback with provided params', async () => {\n            const onInitButtonMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: NonInstantAlternativePaymentMethods.OXXO,\n                bigcommerce_payments_apms: {\n                    ...bigCommercePaymentsAlternativeMethodsOptions,\n                    onInitButton: onInitButtonMock,\n                },\n            });\n\n            eventEmitter.emit('onInit');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(onInitButtonMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        it('submits form', async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_apms: {\n                    ...bigCommercePaymentsAlternativeMethodsOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n        });\n\n        it('does not hide loading indicator after form submit', async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_apms: {\n                    ...bigCommercePaymentsAlternativeMethodsOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n            expect(loadingIndicator.hide).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onCancel');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onError button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n\n        it('calls onError callback if it is provided', async () => {\n            const onErrorMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_apms: {\n                    ...bigCommercePaymentsAlternativeMethodsOptions,\n                    onError: onErrorMock,\n                },\n            });\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#renderFields()', () => {\n        it('throws an error if apmFieldsContainer is not provided', async () => {\n            paymentMethod.initializationData.shouldRenderFields = true;\n\n            const options = {\n                methodId: defaultMethodId,\n                gatewayId: defaultGatewayId,\n                bigcommerce_payments_apms: {\n                    ...bigCommercePaymentsAlternativeMethodsOptions,\n                    apmFieldsContainer: undefined,\n                },\n            };\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('renders apm payment fields', async () => {\n            const paymentFieldsRenderMock = jest.fn();\n            const fieldContainer = document.createElement('div');\n\n            fieldContainer.id = defaultApmFieldsContainerId.split('#')[1];\n            document.body.appendChild(fieldContainer);\n\n            jest.spyOn(paypalSdk, 'PaymentFields').mockImplementation(() => ({\n                render: paymentFieldsRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.PaymentFields).toHaveBeenCalledWith({\n                fundingSource: defaultMethodId,\n                style: {},\n                fields: {\n                    name: {\n                        value: `${billingAddress.firstName} ${billingAddress.lastName}`,\n                    },\n                    email: {\n                        value: billingAddress.email,\n                    },\n                },\n            });\n            expect(paymentFieldsRenderMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws an error if payload.payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if orderId is not defined', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                    gatewayId: defaultGatewayId,\n                },\n            };\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodInvalidError);\n            }\n        });\n\n        it('does not submit order for non instant payment methods', async () => {\n            const payload = {\n                payment: {\n                    methodId: NonInstantAlternativePaymentMethods.OXXO,\n                    gatewayId: defaultGatewayId,\n                },\n            };\n\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: NonInstantAlternativePaymentMethods.OXXO,\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n        });\n\n        it('submits order for instant payment methods', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                    gatewayId: defaultGatewayId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('submits payment with provided data', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                    gatewayId: defaultGatewayId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(bigCommercePaymentsIntegrationService.submitPayment).toHaveBeenCalledWith(\n                payload.payment.methodId,\n                paypalOrderId,\n                defaultGatewayId,\n            );\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('closes button component on deinitialize strategy', async () => {\n            const bigCommercePaymentsSdkCloseMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: jest.fn(),\n                close: bigCommercePaymentsSdkCloseMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n            await strategy.deinitialize();\n\n            expect(bigCommercePaymentsSdkCloseMock).toHaveBeenCalled();\n        });\n\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#polling mechanism', () => {\n        beforeEach(() => {\n            const storeConfigMock = {\n                ...getConfig().storeConfig,\n                checkoutSettings: {\n                    ...getConfig().storeConfig.checkoutSettings,\n                    features: {\n                        'PAYPAL-5624.bcp_ideal_polling': true,\n                    },\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.resolve(paymentIntegrationService.getState()),\n            );\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue(storeConfigMock);\n        });\n\n        it('initialize polling mechanism', async () => {\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'getOrderStatus').mockResolvedValue(\n                PayPalOrderStatus.Approved,\n            );\n\n            const payload = {\n                payment: {\n                    methodId: 'ideal',\n                    gatewayId: 'bigcommerce_payments_apms',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await strategy.execute(payload);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.getOrderStatus).toHaveBeenCalled();\n        });\n\n        it('request order status with proper payload', async () => {\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'getOrderStatus').mockResolvedValue(\n                PayPalOrderStatus.Approved,\n            );\n\n            const payload = {\n                payment: {\n                    methodId: 'ideal',\n                    gatewayId: 'bigcommerce_payments_apms',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await strategy.execute(payload);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.getOrderStatus).toHaveBeenCalledWith(\n                'bigcommerce_payments_apms',\n            );\n        });\n\n        it('deinitialize polling mechanism', async () => {\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'getOrderStatus').mockResolvedValue(\n                PayPalOrderStatus.Approved,\n            );\n\n            const payload = {\n                payment: {\n                    methodId: 'ideal',\n                    gatewayId: 'bigcommerce_payments_apms',\n                },\n            };\n\n            jest.spyOn(global, 'clearTimeout');\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await strategy.execute(payload);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.deinitialize();\n\n            expect(clearTimeout).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-alternative-methods/bigcommerce-payments-alternative-methods-payment-strategy.ts",
    "content": "import { noop } from 'lodash';\n\nimport {\n    PayPalApmSdk,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodClientUnavailableError,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    TimeoutError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    ApproveCallbackPayload,\n    BigCommercePaymentsButtons,\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsInitializationData,\n    NonInstantAlternativePaymentMethods,\n    PayPalOrderStatus,\n} from '../bigcommerce-payments-types';\n\nimport BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions, {\n    WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions,\n} from './bigcommerce-payments-alternative-methods-payment-initialize-options';\n\nconst POLLING_INTERVAL = 3000;\nconst MAX_POLLING_TIME = 300000;\n\nexport default class BigCommercePaymentsAlternativeMethodsPaymentStrategy\n    implements PaymentStrategy\n{\n    private loadingIndicatorContainer?: string;\n    private orderId?: string;\n    private bigCommercePaymentsButton?: BigCommercePaymentsButtons;\n    private paypalApms?: PayPalApmSdk;\n    private pollingTimer = 0;\n    private stopPolling = noop;\n    private isPollingEnabled = false;\n    private bigCommercePaymentsAlternativeMethods?: BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\n        private bigCommercePaymentsSdkHelper: PayPalSdkHelper,\n        private loadingIndicator: LoadingIndicator,\n        private pollingInterval: number = POLLING_INTERVAL,\n        private maxPollingIntervalTime: number = MAX_POLLING_TIME,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions &\n            WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions,\n    ): Promise<void> {\n        const { gatewayId, methodId, bigcommerce_payments_apms } = options;\n\n        this.bigCommercePaymentsAlternativeMethods = bigcommerce_payments_apms;\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 (!bigcommerce_payments_apms) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments_apms\" argument is not provided.`,\n            );\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(\n            methodId,\n            gatewayId,\n        );\n        const { orderId, shouldRenderFields } = paymentMethod.initializationData || {};\n\n        const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n\n        this.isPollingEnabled = isExperimentEnabled(features, 'PAYPAL-5624.bcp_ideal_polling');\n\n        // Info:\n        // The APM button and fields should not be rendered when shopper was redirected to Checkout page\n        // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n        // it is available in checkout session. Therefore, it is not necessary to render the button.\n        if (orderId) {\n            this.orderId = orderId;\n\n            return;\n        }\n\n        this.paypalApms = await this.bigCommercePaymentsSdkHelper.getPayPalApmsSdk(\n            paymentMethod,\n            state.getCartOrThrow().currency.code,\n        );\n\n        this.loadingIndicatorContainer = bigcommerce_payments_apms.container.split('#')[1];\n\n        this.renderButton(methodId, gatewayId, bigcommerce_payments_apms);\n\n        if (shouldRenderFields) {\n            this.renderFields(methodId, bigcommerce_payments_apms);\n        }\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const { methodId, gatewayId } = payment;\n\n        if (!this.orderId) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        if (this.isPollingEnabled && methodId === 'ideal') {\n            await new Promise((resolve, reject) => {\n                void this.initializePollingMechanism(methodId, resolve, reject, gatewayId);\n            });\n        }\n\n        if (!this.isNonInstantPaymentMethod(methodId)) {\n            await this.paymentIntegrationService.submitOrder(order, options);\n        }\n\n        await this.bigCommercePaymentsIntegrationService.submitPayment(\n            methodId,\n            this.orderId,\n            gatewayId,\n        );\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this.orderId = undefined;\n\n        if (this.isPollingEnabled) {\n            this.resetPollingMechanism();\n        }\n\n        this.bigCommercePaymentsButton?.close();\n\n        return Promise.resolve();\n    }\n\n    /**\n     *\n     * Polling mechanism\n     *\n     *\n     * */\n    private async initializePollingMechanism(\n        methodId: string,\n        resolvePromise: (value?: unknown) => void,\n        rejectPromise: (value?: unknown) => void,\n        gatewayId?: string,\n    ): Promise<void> {\n        await new Promise<void>((resolve, reject) => {\n            const timeout = setTimeout(resolve, this.pollingInterval);\n\n            this.stopPolling = () => {\n                clearTimeout(timeout);\n                this.toggleLoadingIndicator(false);\n\n                return reject();\n            };\n        });\n\n        try {\n            this.pollingTimer += this.pollingInterval;\n\n            const orderStatus = await this.bigCommercePaymentsIntegrationService.getOrderStatus(\n                gatewayId,\n            );\n\n            const isOrderApproved = orderStatus === PayPalOrderStatus.Approved;\n            const isPollingError = orderStatus === PayPalOrderStatus.PollingError;\n\n            if (isOrderApproved) {\n                this.deInitializePollingMechanism();\n\n                return resolvePromise();\n            }\n\n            if (isPollingError) {\n                return rejectPromise();\n            }\n\n            if (!isOrderApproved && this.pollingTimer < this.maxPollingIntervalTime) {\n                return await this.initializePollingMechanism(\n                    methodId,\n                    resolvePromise,\n                    rejectPromise,\n                    gatewayId,\n                );\n            }\n\n            await this.reinitializeStrategy({\n                methodId,\n                gatewayId,\n                bigCommercePaymentsAlternativeMethods: this.bigCommercePaymentsAlternativeMethods,\n            });\n\n            this.handleError(new TimeoutError());\n        } catch (error) {\n            rejectPromise();\n        }\n    }\n\n    private deInitializePollingMechanism(): void {\n        this.stopPolling();\n        this.pollingTimer = 0;\n    }\n\n    private resetPollingMechanism(): void {\n        this.deInitializePollingMechanism();\n    }\n\n    private async reinitializeStrategy(\n        options: PaymentInitializeOptions &\n            WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions,\n    ) {\n        await this.deinitialize();\n        await this.initialize(options);\n    }\n\n    private handleError(error: unknown) {\n        const { onError } = this.bigCommercePaymentsAlternativeMethods || {};\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     * Button methods/callbacks\n     *\n     * */\n    private renderButton(\n        methodId: string,\n        gatewayId: string,\n        bigcommerce_payments_apms: BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions,\n    ): void {\n        const paypalAmpsSdk = this.getPaypalAmpsSdkOrThrow();\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(\n            methodId,\n            gatewayId,\n        );\n        const { buttonStyle } = paymentMethod.initializationData || {};\n\n        const { container, onError, onRenderButton, submitForm } = bigcommerce_payments_apms;\n\n        const buttonOptions: BigCommercePaymentsButtonsOptions = {\n            fundingSource: methodId,\n            style: this.bigCommercePaymentsIntegrationService.getValidButtonStyle(buttonStyle),\n            onInit: (_, actions) => bigcommerce_payments_apms.onInitButton(actions),\n            createOrder: () => this.onCreateOrder(methodId, gatewayId, bigcommerce_payments_apms),\n            onApprove: (data) => this.handleApprove(data, submitForm),\n            onCancel: () => {\n                this.toggleLoadingIndicator(false);\n                this.deInitializePollingMechanism();\n            },\n            onError: (error) => {\n                this.deInitializePollingMechanism();\n                this.handleFailure(error, onError);\n            },\n            onClick: async (_, actions) =>\n                bigcommerce_payments_apms.onValidate(actions.resolve, actions.reject),\n        };\n\n        this.bigCommercePaymentsButton = paypalAmpsSdk.Buttons(buttonOptions);\n\n        if (!this.bigCommercePaymentsButton.isEligible()) {\n            return;\n        }\n\n        if (onRenderButton && typeof onRenderButton === 'function') {\n            onRenderButton();\n        }\n\n        this.bigCommercePaymentsButton.render(container);\n    }\n\n    private async onCreateOrder(\n        methodId: string,\n        gatewayId: string,\n        bigcommerce_payments_apms: BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions,\n    ): Promise<string> {\n        const { onValidate } = bigcommerce_payments_apms;\n\n        const onValidationPassed = () => {\n            this.toggleLoadingIndicator(true);\n\n            return () => Promise.resolve();\n        };\n\n        await onValidate(onValidationPassed, noop);\n\n        const orderId = await this.bigCommercePaymentsIntegrationService.createOrder(\n            'bigcommerce_payments_apms',\n        );\n\n        if (this.isNonInstantPaymentMethod(methodId)) {\n            const order = { useStoreCredit: false };\n            const options = {\n                params: {\n                    methodId,\n                    gatewayId,\n                },\n            };\n\n            await this.paymentIntegrationService.submitOrder(order, options);\n            await this.bigCommercePaymentsIntegrationService.submitPayment(\n                methodId,\n                orderId,\n                gatewayId,\n            );\n        }\n\n        return orderId;\n    }\n\n    private handleApprove(\n        { orderID }: ApproveCallbackPayload,\n        submitForm: BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions['submitForm'],\n    ): void {\n        this.orderId = orderID;\n\n        submitForm();\n    }\n\n    private handleFailure(\n        error: Error,\n        onError: BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions['onError'],\n    ): void {\n        this.toggleLoadingIndicator(false);\n\n        if (onError && typeof onError === 'function') {\n            onError(error);\n        }\n    }\n\n    /**\n     *\n     * Fields methods\n     *\n     * */\n    private renderFields(\n        methodId: string,\n        bigcommerce_payments_apms: BigCommercePaymentsAlternativeMethodsPaymentInitializeOptions,\n    ): void {\n        const paypalAmpsSdk = this.getPaypalAmpsSdkOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const { firstName, lastName, email } = state.getBillingAddressOrThrow();\n\n        const { apmFieldsContainer, apmFieldsStyles } = bigcommerce_payments_apms;\n\n        if (!apmFieldsContainer) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments_apms\" argument should contain \"apmFieldsContainer\".',\n            );\n        }\n\n        const fieldContainerElement = document.querySelector(apmFieldsContainer);\n\n        if (fieldContainerElement) {\n            fieldContainerElement.innerHTML = '';\n        }\n\n        const fieldsOptions = {\n            fundingSource: methodId,\n            style: apmFieldsStyles || {},\n            fields: {\n                name: {\n                    value: `${firstName} ${lastName}`,\n                },\n                email: {\n                    value: email,\n                },\n            },\n        };\n\n        const paypalPaymentFields = paypalAmpsSdk.PaymentFields(fieldsOptions);\n\n        paypalPaymentFields.render(apmFieldsContainer);\n    }\n\n    /**\n     *\n     * Loading Indicator methods\n     *\n     * */\n    private toggleLoadingIndicator(isLoading: boolean): void {\n        if (isLoading && this.loadingIndicatorContainer) {\n            this.loadingIndicator.show(this.loadingIndicatorContainer);\n        } else {\n            this.loadingIndicator.hide();\n        }\n    }\n\n    /**\n     *\n     * Utils\n     *\n     * */\n    private isNonInstantPaymentMethod(methodId: string): boolean {\n        return methodId.toUpperCase() in NonInstantAlternativePaymentMethods;\n    }\n\n    private getPaypalAmpsSdkOrThrow() {\n        if (!this.paypalApms) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.paypalApms;\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-alternative-methods/create-bigcommerce-payments-alternative-methods-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsAlternativeMethodsPaymentStrategy from './bigcommerce-payments-alternative-methods-payment-strategy';\nimport createBigCommercePaymentsAlternativeMethodsPaymentStrategy from './create-bigcommerce-payments-alternative-methods-payment-strategy';\n\ndescribe('createBigCommercePaymentsAlternativeMethodsPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePayments alternative methods payment strategy', () => {\n        const strategy =\n            createBigCommercePaymentsAlternativeMethodsPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsAlternativeMethodsPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-alternative-methods/create-bigcommerce-payments-alternative-methods-payment-strategy.ts",
    "content": "import { createBigCommercePaymentsSdk } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { LOADING_INDICATOR_STYLES } from '../bigcommerce-payments-constants';\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsAlternativeMethodsPaymentStrategy from './bigcommerce-payments-alternative-methods-payment-strategy';\n\nconst createBigCommercePaymentsAlternativeMethodsPaymentStrategy: PaymentStrategyFactory<\n    BigCommercePaymentsAlternativeMethodsPaymentStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsAlternativeMethodsPaymentStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n        createBigCommercePaymentsSdk(),\n        new LoadingIndicator({\n            containerStyles: LOADING_INDICATOR_STYLES,\n        }),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsAlternativeMethodsPaymentStrategy, [\n    { gateway: 'bigcommerce_payments_apms' },\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-constants.ts",
    "content": "export const LOADING_INDICATOR_STYLES = {\n    'background-color': 'rgba(0, 0, 0, 0.4)',\n    'z-index': '1000',\n};\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-credit-cards/bigcommerce-payments-credit-cards-payment-initialize-options.ts",
    "content": "import { HostedFormOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * A set of options that are required to initialize the BigCommercePayments Credit Card payment\n * method for presenting its credit card form.\n *\n * ```html\n * <!-- These containers are where the hosted (iframed) credit card fields will be inserted -->\n * <div id=\"card-number\"></div>\n * <div id=\"card-name\"></div>\n * <div id=\"card-expiry\"></div>\n * <div id=\"card-code\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'bigcommerce_payments_creditcards',\n *     bigcommerce_payments_creditcards: {\n *         form: {\n *             fields: {\n *                 cardNumber: { containerId: 'card-number' },\n *                 cardName: { containerId: 'card-name' },\n *                 cardExpiry: { containerId: 'card-expiry' },\n *                 cardCode: { containerId: 'card-code' },\n *             },\n *         },\n *         onCreditCardFieldsRenderingError: (error) => handleError(error),\n *     },\n * });\n * ```\n *\n * Additional options can be passed in to customize the fields and register\n * event callbacks.\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'bigcommerce_payments_creditcards',\n *     bigcommerce_payments_creditcards: {\n *         form: {\n *             fields: {\n *                 cardNumber: { containerId: 'card-number', placeholder: 'Number of card' },\n *                 cardName: { containerId: 'card-name', placeholder: 'Name of card' },\n *                 cardExpiry: { containerId: 'card-expiry', placeholder: 'Expiry of card' },\n *                 cardCode: { containerId: 'card-code', placeholder: 'Code of card' },\n *             },\n *             styles: {\n *                 default: {\n *                     color: '#000',\n *                 },\n *                 error: {\n *                     color: '#f00',\n *                 },\n *                 focus: {\n *                     color: '#0f0',\n *                 },\n *             },\n *             onBlur({ fieldType }) {\n *                 console.log(fieldType);\n *             },\n *             onFocus({ fieldType }) {\n *                 console.log(fieldType);\n *             },\n *             onEnter({ fieldType }) {\n *                 console.log(fieldType);\n *             },\n *             onCardTypeChange({ cardType }) {\n *                 console.log(cardType);\n *             },\n *             onValidate({ errors, isValid }) {\n *                 console.log(errors);\n *                 console.log(isValid);\n *             },\n *         },\n *         onCreditCardFieldsRenderingError: (error) => handleError(error),\n *     },\n * });\n * ```\n */\nexport default interface BigCommercePaymentsCreditCardsPaymentInitializeOptions {\n    /**\n     * The form is data for Credit Card Form\n     */\n    form: HostedFormOptions;\n\n    /**\n     * The callback that gets called when there is an issue with rendering credit card fields\n     */\n    onCreditCardFieldsRenderingError?: (error: unknown) => void;\n\n    /**\n     * The callback that gets called when PayPal SDK load complete\n     */\n    onLoadComplete?: () => void;\n}\n\nexport interface WithBigCommercePaymentsCreditCardsPaymentInitializeOptions {\n    bigcommerce_payments_creditcards?: BigCommercePaymentsCreditCardsPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-credit-cards/bigcommerce-payments-credit-cards-payment-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    BigCommercePaymentsFastlaneUtils,\n    createBigCommercePaymentsFastlaneUtils,\n    createBigCommercePaymentsSdk,\n    getPayPalFastlaneSdk,\n    PayPalFastlaneSdk,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    BillingAddress,\n    Cart,\n    HostedFieldType,\n    InvalidArgumentError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentInvalidFormError,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsCardFieldsConfig,\n    BigCommercePaymentsHostWindow,\n    LiabilityShiftEnum,\n    PayPalSDK,\n} from '../bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsIntegrationServiceMock,\n    getBigCommercePaymentsPaymentMethod,\n    getPayPalSDKMock,\n} from '../mocks';\n\nimport BigCommercePaymentsCreditCardsPaymentInitializeOptions, {\n    WithBigCommercePaymentsCreditCardsPaymentInitializeOptions,\n} from './bigcommerce-payments-credit-cards-payment-initialize-options';\nimport BigCommercePaymentsCreditCardsPaymentStrategy from './bigcommerce-payments-credit-cards-payment-strategy';\n\ndescribe('BigCommercePaymentsCreditCardsPaymentStrategy', () => {\n    let billingAddress: BillingAddress;\n    let cart: Cart;\n    let strategy: BigCommercePaymentsCreditCardsPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n    let bigCommercePaymentsSdk: PayPalSdkHelper;\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let bigCommercePaymentsFastlaneUtils: BigCommercePaymentsFastlaneUtils;\n    let paypalSdk: PayPalSDK;\n    let eventEmitter: EventEmitter;\n    const mockRender = jest.fn();\n    const mockClose = jest.fn().mockReturnValue(Promise.resolve());\n    const mockField = {\n        render: mockRender,\n        close: mockClose,\n        clear: jest.fn(),\n        removeClass: jest.fn(),\n    };\n    const hostedFormOrderId = 'hostedFormOrderId';\n    let paypalCardNameFieldElement: HTMLDivElement;\n\n    const methodId = 'bigcommerce_payments_creditcards';\n\n    const paypalCardNameFieldContainerId = 'card-name';\n\n    const cardFieldsOptionsMock = {\n        inputEvents: {\n            onChange: expect.any(Function),\n            onFocus: expect.any(Function),\n            onBlur: expect.any(Function),\n            onInputSubmitRequest: expect.any(Function),\n        },\n        style: {\n            input: {\n                color: '#333333',\n                'font-family': 'bigFont',\n                'font-size': '14px',\n                'font-weight': '400',\n                outline: 'none',\n                padding: '9px 13px',\n            },\n            '.invalid': {\n                color: 'red',\n                'font-family': 'bigFont',\n                'font-size': '14px',\n                'font-weight': '400',\n                outline: 'none',\n                padding: '9px 13px',\n            },\n            '.valid': {\n                color: '#333333',\n                'font-family': 'bigFont',\n                'font-size': '14px',\n                'font-weight': '400',\n                outline: 'none',\n                padding: '9px 13px',\n            },\n            ':focus': {\n                color: '#333333',\n                'font-family': 'bigFont',\n                'font-size': '14px',\n                'font-weight': '400',\n                outline: 'none',\n                padding: '9px 13px',\n            },\n        },\n        createOrder: expect.any(Function),\n        onError: expect.any(Function),\n        onApprove: expect.any(Function),\n    };\n\n    const cardFieldsInstanceMock = {\n        isEligible: jest.fn(() => true),\n        CVVField: () => mockField,\n        ExpiryField: () => mockField,\n        NameField: () => mockField,\n        NumberField: () => mockField,\n        getState: jest\n            .fn()\n            .mockReturnValue(Promise.resolve({ fields: { number: { isValid: true } } })),\n        submit: jest.fn().mockReturnValue(Promise.resolve()),\n    };\n\n    const creditCardFormFields = {\n        [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n        [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n        [HostedFieldType.CardCode]: { containerId: 'card-code' },\n        [HostedFieldType.CardName]: { containerId: paypalCardNameFieldContainerId },\n    };\n\n    const creditCardVaultedForm = {\n        [HostedFieldType.CardNumberVerification]: { containerId: 'card-number' },\n        [HostedFieldType.CardCodeVerification]: { containerId: 'card-code' },\n        [HostedFieldType.CardExpiryVerification]: { containerId: 'card-expiry' },\n    };\n\n    const bigCommercePaymentsCreditCardsOptions: BigCommercePaymentsCreditCardsPaymentInitializeOptions =\n        {\n            form: {\n                fields: creditCardFormFields,\n            },\n            onCreditCardFieldsRenderingError: jest.fn(),\n            onLoadComplete: jest.fn(),\n        };\n\n    const initializationOptions: PaymentInitializeOptions &\n        WithBigCommercePaymentsCreditCardsPaymentInitializeOptions = {\n        methodId,\n        bigcommerce_payments_creditcards: bigCommercePaymentsCreditCardsOptions,\n    };\n\n    const defaultExecutePayload = {\n        payment: {\n            methodId: 'bigcommerce_payments_creditcards',\n            paymentData: {},\n        },\n    };\n\n    beforeEach(() => {\n        cart = getCart();\n        billingAddress = getBillingAddress();\n        eventEmitter = new EventEmitter();\n        paymentMethod = { ...getBigCommercePaymentsPaymentMethod(), id: methodId };\n        paypalSdk = getPayPalSDKMock();\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        bigCommercePaymentsSdk = createBigCommercePaymentsSdk();\n        bigCommercePaymentsFastlaneUtils = createBigCommercePaymentsFastlaneUtils();\n\n        strategy = new BigCommercePaymentsCreditCardsPaymentStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n            bigCommercePaymentsSdk,\n            bigCommercePaymentsFastlaneUtils,\n        );\n\n        paypalCardNameFieldElement = document.createElement('div');\n        paypalCardNameFieldElement.id = paypalCardNameFieldContainerId;\n        document.body.appendChild(paypalCardNameFieldElement);\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getBillingAddressOrThrow',\n        ).mockReturnValue(billingAddress);\n\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockResolvedValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'submitPayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'createOrderCardFields',\n        ).mockResolvedValue({\n            orderId: 'orderId',\n            setupToken: 'setupToken',\n        });\n\n        jest.spyOn(paypalSdk, 'CardFields').mockImplementation(\n            (options: BigCommercePaymentsCardFieldsConfig) => {\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove({ orderID: hostedFormOrderId });\n                    }\n                });\n\n                return Promise.resolve(cardFieldsInstanceMock);\n            },\n        );\n\n        jest.spyOn(bigCommercePaymentsSdk, 'getPayPalFastlaneSdk').mockImplementation(() =>\n            Promise.resolve(paypalFastlaneSdk),\n        );\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'initializePayPalFastlane').mockImplementation(\n            jest.fn(),\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BigCommercePaymentsHostWindow).paypal;\n\n        if (document.getElementById(paypalCardNameFieldContainerId)) {\n            document.body.removeChild(paypalCardNameFieldElement);\n        }\n    });\n\n    it('creates an interface of the BigCommercePayments Credit Cards payment strategy', () => {\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsCreditCardsPaymentStrategy);\n    });\n\n    describe('#initialize', () => {\n        it('throws an error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_creditcards.form option is not provided', async () => {\n            const options = { methodId } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads bigcommerce_payments_creditcards payment method', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n        });\n\n        it('loads paypal sdk', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                methodId,\n                undefined,\n                true,\n                true,\n            );\n        });\n\n        it('calls onLoadComplete', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(\n                initializationOptions.bigcommerce_payments_creditcards?.onLoadComplete,\n            ).toHaveBeenCalled();\n        });\n\n        it('loads paypal fastlane sdk if bigcommerce payments fastlane analytic is enabled', async () => {\n            const mockedPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod,\n                    connectClientToken: 'connectClientToken123',\n                    isAcceleratedCheckoutEnabled: true,\n                    isBigCommercePaymentsAnalyticsV2Enabled: true,\n                    isDeveloperModeApplicable: false,\n                    isFastlaneEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockedPaymentMethod);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdk.getPayPalFastlaneSdk).toHaveBeenCalledWith(\n                mockedPaymentMethod,\n                cart.currency.code,\n                cart.id,\n            );\n\n            expect(bigCommercePaymentsFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n            );\n        });\n    });\n\n    describe('#renderFields', () => {\n        it('throws an error if card field is not eligible', async () => {\n            jest.spyOn(paypalSdk, 'CardFields').mockResolvedValue({\n                ...cardFieldsInstanceMock,\n                isEligible: jest.fn().mockReturnValue(false),\n            });\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('calls a callback from initialization options if there was an issue with form rendering process', async () => {\n            jest.spyOn(paypalSdk, 'CardFields').mockResolvedValue({\n                ...cardFieldsInstanceMock,\n                isEligible: jest.fn().mockReturnValue(true),\n                NumberField: jest.fn().mockReturnValue({\n                    render: jest.fn().mockImplementation(() => {\n                        throw new Error();\n                    }),\n                }),\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(\n                initializationOptions.bigcommerce_payments_creditcards\n                    ?.onCreditCardFieldsRenderingError,\n            ).toHaveBeenCalled();\n        });\n\n        it('renders card fields if they are eligible', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(mockRender).toHaveBeenCalled();\n        });\n\n        it('renders card fields with valid options', async () => {\n            const initializationOptionsWithStyles = {\n                methodId,\n                bigcommerce_payments_creditcards: {\n                    form: {\n                        fields: bigCommercePaymentsCreditCardsOptions.form.fields,\n                        styles: {\n                            default: {\n                                fontFamily: 'bigFont',\n                                fontSize: '14px',\n                                fontWeight: '400',\n                            },\n                            error: {\n                                fontFamily: 'bigFont',\n                                fontSize: '14px',\n                                fontWeight: '400',\n                            },\n                            focus: {\n                                fontFamily: 'bigFont',\n                                fontSize: '14px',\n                                fontWeight: '400',\n                            },\n                        },\n                    },\n                },\n            };\n\n            await strategy.initialize(initializationOptionsWithStyles);\n\n            expect(paypalSdk.CardFields).toHaveBeenCalledWith(cardFieldsOptionsMock);\n        });\n    });\n\n    describe('#execute', () => {\n        it('throws an error if payment object is not provided as execution data', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const payload = {};\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if methodId is not provided as execution payment payload', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const payload = {\n                payment: {\n                    paymentData: {},\n                },\n            } as OrderRequestBody;\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('submits an order', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(defaultExecutePayload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('submits payment without saving vaulting instrument', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(defaultExecutePayload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    shouldSaveInstrument: false,\n                    shouldSetAsDefaultInstrument: false,\n                    formattedPayload: {\n                        card_with_order: {\n                            order_id: hostedFormOrderId,\n                        },\n                    },\n                },\n            });\n        });\n\n        it('submits payment with flag to save vaulted instrument', async () => {\n            await strategy.initialize(initializationOptions);\n            eventEmitter.emit('onApprove');\n            await new Promise((resolve) => process.nextTick(resolve));\n            await strategy.execute({\n                payment: {\n                    methodId: 'bigcommerce_payments_creditcards',\n                    paymentData: {\n                        shouldSaveInstrument: true,\n                        shouldSetAsDefaultInstrument: true,\n                    },\n                },\n            });\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    shouldSaveInstrument: true,\n                    shouldSetAsDefaultInstrument: true,\n                    formattedPayload: {\n                        card_with_order: {\n                            order_id: hostedFormOrderId,\n                        },\n                    },\n                },\n            });\n        });\n\n        it('does not submit order and payment if 3ds failed', async () => {\n            jest.spyOn(paypalSdk, 'CardFields').mockImplementation(\n                (options: BigCommercePaymentsCardFieldsConfig) => {\n                    eventEmitter.on('onApprove', () => {\n                        if (options.onApprove) {\n                            options.onApprove({\n                                orderID: hostedFormOrderId,\n                                liabilityShift: LiabilityShiftEnum.No,\n                            });\n                        }\n                    });\n\n                    return Promise.resolve(cardFieldsInstanceMock);\n                },\n            );\n            await strategy.initialize(initializationOptions);\n\n            try {\n                eventEmitter.emit('onApprove');\n                await new Promise((resolve) => process.nextTick(resolve));\n            } catch (error) {\n                expect(error).toBeDefined();\n            }\n        });\n\n        it('submits payment with vaulted(stored) instrument', async () => {\n            jest.spyOn(paypalSdk, 'CardFields').mockImplementation(\n                (options: BigCommercePaymentsCardFieldsConfig) => {\n                    eventEmitter.on('onApprove', () => {\n                        if (options.onApprove) {\n                            options.onApprove({\n                                orderID: 'orderId',\n                                vaultSetupToken: 'vaultSetupToken',\n                            });\n                        }\n                    });\n\n                    return Promise.resolve(cardFieldsInstanceMock);\n                },\n            );\n\n            const instrumentId = 'bc_instrument_id';\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute({\n                payment: {\n                    methodId: 'bigcommerce_payments_creditcards',\n                    paymentData: {\n                        instrumentId,\n                    },\n                },\n            });\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    shouldSaveInstrument: false,\n                    shouldSetAsDefaultInstrument: false,\n                    instrumentId: 'bc_instrument_id',\n                    formattedPayload: {\n                        bigpay_token: {\n                            verification_nonce: 'vaultSetupToken',\n                            token: 'bc_instrument_id',\n                        },\n                        card_with_order: {\n                            order_id: 'orderId',\n                        },\n                    },\n                },\n            });\n        });\n    });\n\n    describe('#submitHostedForm()', () => {\n        it('throws an error if the hosted form is not valid on form submit', async () => {\n            jest.spyOn(paypalSdk, 'CardFields').mockResolvedValue({\n                ...cardFieldsInstanceMock,\n                getState: jest\n                    .fn()\n                    .mockReturnValue(Promise.resolve({ fields: { number: { isValid: false } } })),\n            });\n            await strategy.initialize(initializationOptions);\n\n            try {\n                await strategy.execute(defaultExecutePayload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentInvalidFormError);\n            }\n        });\n\n        it('submits hosted form with billing address', async () => {\n            const submitMock = jest.fn().mockReturnValue(Promise.resolve());\n\n            jest.spyOn(paypalSdk, 'CardFields').mockResolvedValue({\n                ...cardFieldsInstanceMock,\n                submit: submitMock,\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            await strategy.execute(defaultExecutePayload);\n\n            expect(submitMock).toHaveBeenCalledWith({\n                billingAddress: {\n                    company: billingAddress.company,\n                    addressLine1: billingAddress.address1,\n                    addressLine2: billingAddress.address2,\n                    adminArea1: billingAddress.stateOrProvinceCode,\n                    adminArea2: billingAddress.city,\n                    postalCode: billingAddress.postalCode,\n                    countryCode: billingAddress.countryCode,\n                },\n            });\n        });\n\n        it('submits hosted form without billing address if there is vaulted form', async () => {\n            const optionsWithVaultingForm = {\n                ...initializationOptions,\n                bigcommerce_payments_creditcards: {\n                    ...bigCommercePaymentsCreditCardsOptions,\n                    form: {\n                        fields: creditCardVaultedForm,\n                    },\n                },\n            } as PaymentInitializeOptions;\n\n            const submitMock = jest.fn().mockReturnValue(Promise.resolve());\n\n            jest.spyOn(paypalSdk, 'CardFields').mockResolvedValue({\n                ...cardFieldsInstanceMock,\n                submit: submitMock,\n            });\n\n            await strategy.initialize(optionsWithVaultingForm);\n\n            await strategy.execute(defaultExecutePayload);\n\n            expect(submitMock).toHaveBeenCalledWith();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n            expect(mockClose).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-credit-cards/bigcommerce-payments-credit-cards-payment-strategy.ts",
    "content": "import { isNil, omitBy } from 'lodash';\n\nimport {\n    BigCommercePaymentsFastlaneUtils,\n    BigCommercePaymentsInitializationData,\n    isBigCommercePaymentsFastlaneCustomer,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    HostedCardFieldOptions,\n    HostedCardFieldOptionsMap,\n    HostedFieldBlurEventData,\n    HostedFieldEnterEventData,\n    HostedFieldFocusEventData,\n    HostedFieldStylesMap,\n    HostedFieldType,\n    HostedFieldValidateEventData,\n    HostedFormOptions,\n    HostedInputValidateErrorData,\n    HostedInputValidateErrorDataMap,\n    HostedInstrument,\n    HostedStoredCardFieldOptionsMap,\n    InvalidArgumentError,\n    isCreditCardFormFields,\n    isCreditCardVaultedFormFields,\n    isHostedInstrumentLike,\n    isVaultedInstrument,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentInvalidFormError,\n    PaymentInvalidFormErrorDetails,\n    PaymentMethodFailedError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsCardFields,\n    BigCommercePaymentsCardFieldsConfig,\n    BigCommercePaymentsCardFieldsOnApproveData,\n    BigCommercePaymentsCardFieldsState,\n    BigCommercePaymentsFields,\n    BigCommercePaymentsHostedFieldsRenderOptions,\n    LiabilityShiftEnum,\n} from '../bigcommerce-payments-types';\n\nimport BigCommercePaymentsCreditCardsPaymentInitializeOptions, {\n    WithBigCommercePaymentsCreditCardsPaymentInitializeOptions,\n} from './bigcommerce-payments-credit-cards-payment-initialize-options';\n\nexport default class BigCommercePaymentsCreditCardsPaymentStrategy implements PaymentStrategy {\n    private executionPaymentData?: OrderPaymentRequestBody['paymentData'];\n    private isCreditCardForm?: boolean;\n    private isCreditCardVaultedForm?: boolean;\n\n    private cardFields?: BigCommercePaymentsCardFields;\n    private cvvField?: BigCommercePaymentsFields;\n    private expiryField?: BigCommercePaymentsFields;\n    private numberField?: BigCommercePaymentsFields;\n    private nameField?: BigCommercePaymentsFields;\n\n    private hostedFormOptions?: HostedFormOptions;\n    private returnedOrderId?: string;\n    private returnedVaultedToken?: string;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\n        private bigCommercePaymentsSdk: PayPalSdkHelper,\n        private bigCommercePaymentsFastlaneUtils: BigCommercePaymentsFastlaneUtils,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions &\n            WithBigCommercePaymentsCreditCardsPaymentInitializeOptions,\n    ): Promise<void> {\n        const { methodId, bigcommerce_payments_creditcards } = options;\n        const bigCommercePaymentsInitializationOptions = bigcommerce_payments_creditcards;\n\n        const { form, onCreditCardFieldsRenderingError, onLoadComplete } =\n            bigCommercePaymentsInitializationOptions || {};\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!form) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"options.bigcommerce_payments_creditcards.form\" argument is not provided.',\n            );\n        }\n\n        this.hostedFormOptions = form;\n\n        this.isCreditCardForm = isCreditCardFormFields(form.fields);\n        this.isCreditCardVaultedForm =\n            isCreditCardVaultedFormFields(form.fields) && !this.hasUndefinedValues();\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n        await this.bigCommercePaymentsIntegrationService.loadPayPalSdk(\n            methodId,\n            undefined,\n            true,\n            true,\n        );\n\n        if (this.isCreditCardForm || this.isCreditCardVaultedForm) {\n            await this.initializeFields(form, onCreditCardFieldsRenderingError);\n        }\n\n        onLoadComplete?.();\n\n        if (this.shouldInitializePayPalFastlane(methodId)) {\n            await this.initializePayPalFastlaneOrThrow(methodId);\n        }\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n        const { methodId, paymentData } = payment || {};\n\n        if (!payment || !methodId) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        this.executionPaymentData = paymentData;\n\n        if (this.isCreditCardForm || this.isCreditCardVaultedForm) {\n            await this.validateHostedFormOrThrow();\n            await this.submitHostedForm();\n        } else {\n            // The condition gets triggered when customer pays with vaulted instrument and shipping address is trusted\n            const { orderId } =\n                await this.bigCommercePaymentsIntegrationService.createOrderCardFields(\n                    'bigcommerce_payments_creditcardscheckout',\n                    this.getInstrumentParams(),\n                );\n\n            this.returnedOrderId = orderId;\n        }\n\n        const submitPaymentPayload = this.preparePaymentPayload(\n            methodId,\n            paymentData,\n            this.returnedOrderId,\n            this.returnedVaultedToken,\n        );\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n        await this.paymentIntegrationService.submitPayment(submitPaymentPayload);\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    async deinitialize(): Promise<void> {\n        await this.cvvField?.close();\n        await this.expiryField?.close();\n        await this.numberField?.close();\n        await this.nameField?.close();\n\n        return Promise.resolve();\n    }\n\n    /**\n     *\n     * Submit Payment Payload preparing method\n     *\n     * `vaultedToken` is used when we pay with vaulted instrument (with trusted shipping address and untrusted)\n     * `setupToken` is used when we pay with vaulted instrument (untrusted shipping address)\n     * `orderId` is used in every case (basic card payment, trusted shipping address and untrusted)\n     */\n    private preparePaymentPayload(\n        methodId: string,\n        paymentData: OrderPaymentRequestBody['paymentData'],\n        orderId?: string,\n        nonce?: string,\n    ): Payment {\n        const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n            isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n        const instrumentId =\n            paymentData && isVaultedInstrument(paymentData) ? paymentData.instrumentId : undefined;\n\n        const bigpay_token = omitBy(\n            {\n                verification_nonce: nonce,\n                token: instrumentId,\n            },\n            isNil,\n        );\n\n        return {\n            methodId,\n            paymentData: {\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n                instrumentId,\n                formattedPayload: {\n                    ...(nonce || instrumentId ? { bigpay_token } : {}),\n                    ...(orderId ? { card_with_order: { order_id: orderId } } : {}),\n                },\n            },\n        };\n    }\n\n    /**\n     *\n     * Card fields initialize\n     *\n     */\n    private async initializeFields(\n        formOptions: HostedFormOptions,\n        onCreditCardFieldsRenderingError?: BigCommercePaymentsCreditCardsPaymentInitializeOptions['onCreditCardFieldsRenderingError'],\n    ): Promise<void> {\n        const { fields, styles } = formOptions;\n\n        const paypalSdk = this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow();\n        const executeCallback = this.getExecuteCallback(fields);\n\n        const cardFieldsConfig: BigCommercePaymentsCardFieldsConfig = {\n            style: this.getInputStyles(styles),\n            onApprove: ({\n                orderID,\n                vaultSetupToken,\n                liabilityShift,\n            }: BigCommercePaymentsCardFieldsOnApproveData) => {\n                if (\n                    liabilityShift === LiabilityShiftEnum.No ||\n                    liabilityShift === LiabilityShiftEnum.Unknown\n                ) {\n                    throw new Error();\n                }\n\n                return this.handleApprove({ orderID, vaultSetupToken });\n            },\n            onError: () => {\n                throw new PaymentMethodFailedError();\n            },\n            inputEvents: {\n                onChange: (event) => this.onChangeHandler(formOptions, event),\n                onFocus: (event) => this.onFocusHandler(formOptions, event),\n                onBlur: (event) => this.onBlurHandler(formOptions, event),\n                onInputSubmitRequest: (event) => this.onInputSubmitRequest(formOptions, event),\n            },\n            ...executeCallback,\n        };\n\n        this.cardFields = await paypalSdk.CardFields(cardFieldsConfig);\n\n        if (!this.cardFields.isEligible()) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        try {\n            this.stylizeInputContainers(fields);\n\n            if (isCreditCardFormFields(fields)) {\n                await this.renderFields(fields);\n            }\n\n            if (isCreditCardVaultedFormFields(fields)) {\n                await this.renderVaultedFields(fields);\n            }\n        } catch (error: unknown) {\n            if (typeof onCreditCardFieldsRenderingError === 'function') {\n                onCreditCardFieldsRenderingError(error);\n            }\n        }\n    }\n\n    /**\n     *\n     * Get execute callback method\n     * Depends on shipping address is trusted or not we should pass to PP\n     * `createVaultSetupToken` callback if address is untrusted or\n     * `createOrder` if address is trusted\n     *\n     */\n    private getExecuteCallback(\n        fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n    ) {\n        const isVaultedForm = isCreditCardVaultedFormFields(fields);\n\n        return isVaultedForm ? this.createVaultSetupTokenCallback() : this.createOrderCallback();\n    }\n\n    private createVaultSetupTokenCallback() {\n        return {\n            createVaultSetupToken: async () => {\n                const { setupToken } =\n                    (await this.bigCommercePaymentsIntegrationService.createOrderCardFields(\n                        'bigcommerce_payments_creditcardscheckout',\n                        {\n                            ...this.getInstrumentParams(),\n                            setupToken: true,\n                        },\n                    )) || {};\n\n                return setupToken;\n            },\n        };\n    }\n\n    private createOrderCallback() {\n        return {\n            createOrder: async () => {\n                const { orderId } =\n                    (await this.bigCommercePaymentsIntegrationService.createOrderCardFields(\n                        'bigcommerce_payments_creditcardscheckout',\n                        this.getInstrumentParams(),\n                    )) || {};\n\n                return orderId;\n            },\n        };\n    }\n\n    /**\n     *\n     * onApprove method\n     * When submitting a form with a `submitHostedForm` method if there is no error\n     * then onApprove callback is triggered and depends on the flow\n     * we will receive an `orderID` if it's basic paying and `vaultSetupToken` if we are paying\n     * with vaulted instrument and shipping address is untrusted\n     *\n     */\n    private handleApprove({\n        orderID,\n        vaultSetupToken,\n    }: BigCommercePaymentsCardFieldsOnApproveData) {\n        if (orderID) {\n            this.returnedOrderId = orderID;\n        }\n\n        if (vaultSetupToken) {\n            this.returnedVaultedToken = vaultSetupToken;\n        }\n    }\n\n    /**\n     *\n     * Rendering Card Fields methods\n     *\n     */\n    private async renderFields(fieldsOptions: HostedCardFieldOptionsMap) {\n        const cardFields = this.getCardFieldsOrThrow();\n\n        if (fieldsOptions.cardCode?.containerId) {\n            this.cvvField = cardFields.CVVField({\n                placeholder: '',\n            });\n            await this.cvvField.render(`#${fieldsOptions.cardCode.containerId}`);\n        }\n\n        if (fieldsOptions.cardExpiry?.containerId) {\n            this.expiryField = cardFields.ExpiryField();\n            await this.expiryField.render(`#${fieldsOptions.cardExpiry.containerId}`);\n        }\n\n        if (fieldsOptions.cardName?.containerId) {\n            this.nameField = cardFields.NameField({\n                placeholder: '',\n            });\n            await this.nameField.render(`#${fieldsOptions.cardName.containerId}`);\n        }\n\n        if (fieldsOptions.cardNumber?.containerId) {\n            this.numberField = cardFields.NumberField({\n                placeholder: '',\n            });\n            await this.numberField.render(`#${fieldsOptions.cardNumber.containerId}`);\n        }\n    }\n\n    private async renderVaultedFields(fieldsOptions: HostedStoredCardFieldOptionsMap) {\n        const cardFields = this.getCardFieldsOrThrow();\n\n        if (fieldsOptions.cardCodeVerification?.containerId) {\n            this.cvvField = cardFields.CVVField({\n                placeholder: '',\n            });\n            await this.cvvField.render(`#${fieldsOptions.cardCodeVerification.containerId}`);\n        }\n\n        if (fieldsOptions.cardExpiryVerification?.containerId) {\n            this.expiryField = cardFields.ExpiryField();\n            await this.expiryField.render(`#${fieldsOptions.cardExpiryVerification.containerId}`);\n        }\n\n        if (fieldsOptions.cardNumberVerification?.containerId) {\n            this.numberField = cardFields.NumberField({\n                placeholder: '',\n            });\n            await this.numberField.render(`#${fieldsOptions.cardNumberVerification.containerId}`);\n        }\n    }\n\n    /**\n     *\n     * Instrument params method\n     *\n     */\n    private getInstrumentParams(): HostedInstrument | VaultedInstrument {\n        if (!this.executionPaymentData) {\n            return {};\n        }\n\n        if (isHostedInstrumentLike(this.executionPaymentData)) {\n            const { shouldSaveInstrument, shouldSetAsDefaultInstrument } =\n                this.executionPaymentData;\n\n            return {\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n            };\n        }\n\n        if (isVaultedInstrument(this.executionPaymentData)) {\n            const { instrumentId } = this.executionPaymentData;\n\n            return {\n                instrumentId,\n            };\n        }\n\n        return {};\n    }\n\n    private getFieldTypeByEmittedField({\n        emittedBy,\n    }: BigCommercePaymentsCardFieldsState):\n        | HostedFieldBlurEventData\n        | HostedFieldEnterEventData\n        | HostedFieldFocusEventData {\n        return {\n            fieldType: this.mapFieldType(emittedBy),\n        };\n    }\n\n    /**\n     *\n     * Form submit method\n     * Triggers a form submit\n     *\n     * */\n    private async submitHostedForm() {\n        const cardFields = this.getCardFieldsOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const billingAddress = state.getBillingAddressOrThrow();\n\n        const submitConfig = {\n            billingAddress: {\n                company: billingAddress.company,\n                addressLine1: billingAddress.address1,\n                addressLine2: billingAddress.address2,\n                adminArea1: billingAddress.stateOrProvinceCode,\n                adminArea2: billingAddress.city,\n                postalCode: billingAddress.postalCode,\n                countryCode: billingAddress.countryCode,\n            },\n        };\n\n        try {\n            if (this.isCreditCardVaultedForm) {\n                await cardFields.submit();\n            } else {\n                await cardFields.submit(submitConfig);\n            }\n        } catch (_) {\n            throw new PaymentMethodFailedError(\n                'Failed authentication. Please try to authorize again.',\n            );\n        }\n    }\n\n    /**\n     *\n     * Validation and errors\n     *\n     */\n    private async validateHostedFormOrThrow() {\n        const cardFields = this.getCardFieldsOrThrow();\n        const cardFieldsState = await cardFields.getState().then((data) => data);\n        const validationData = this.getValidityData(cardFieldsState);\n\n        if (validationData.isValid) {\n            return;\n        }\n\n        this.hostedFormOptions?.onValidate?.(validationData);\n\n        throw new PaymentInvalidFormError(this.mapValidationErrors(validationData.errors));\n    }\n\n    private getValidityData({\n        fields,\n    }: BigCommercePaymentsCardFieldsState): HostedFieldValidateEventData {\n        const updatedFields = { ...fields };\n\n        delete updatedFields.cardNameField;\n\n        const fieldsKeys = Object.keys(updatedFields) as Array<\n            keyof BigCommercePaymentsCardFieldsState['fields']\n        >;\n\n        const isValid = fieldsKeys.every((key) => updatedFields[key]?.isValid);\n\n        const errors = fieldsKeys.reduce((fieldsErrors, key) => {\n            const fieldType = this.mapFieldType(key);\n\n            return {\n                ...fieldsErrors,\n                [fieldType]: updatedFields[key]?.isValid\n                    ? undefined\n                    : [this.getInvalidErrorByFieldType(fieldType)],\n            };\n        }, {});\n\n        return { isValid, errors };\n    }\n\n    private getInvalidErrorByFieldType(fieldType: string): HostedInputValidateErrorData {\n        switch (fieldType) {\n            case HostedFieldType.CardCode:\n            case HostedFieldType.CardCodeVerification:\n                return {\n                    fieldType,\n                    message: 'Invalid card code',\n                    type: 'invalid_card_code',\n                };\n\n            case HostedFieldType.CardNumber:\n            case HostedFieldType.CardNumberVerification:\n                return {\n                    fieldType,\n                    message: 'Invalid card number',\n                    type: 'invalid_card_number',\n                };\n\n            case HostedFieldType.CardExpiry:\n            case HostedFieldType.CardExpiryVerification:\n                return {\n                    fieldType,\n                    message: 'Invalid card expiry',\n                    type: 'invalid_card_expiry',\n                };\n\n            default:\n                return {\n                    fieldType,\n                    message: 'Invalid field',\n                    type: 'invalid',\n                };\n        }\n    }\n\n    private mapValidationErrors(\n        validationErrors: HostedInputValidateErrorDataMap = {},\n    ): PaymentInvalidFormErrorDetails {\n        const errors: PaymentInvalidFormErrorDetails = {};\n        const validationErrorsKeys = Object.keys(validationErrors) as Array<\n            keyof HostedInputValidateErrorDataMap\n        >;\n\n        validationErrorsKeys.forEach((key) => {\n            errors[key] = [\n                {\n                    message: validationErrors[key]?.[0]?.message || '',\n                    type: key,\n                },\n            ];\n        });\n\n        return errors;\n    }\n\n    /**\n     *\n     * Fields mappers\n     *\n     */\n    private mapFieldType(type: string): HostedFieldType {\n        switch (type) {\n            case 'name':\n                return HostedFieldType.CardName;\n\n            case 'cardNumberField':\n            case 'number':\n                return this.isCreditCardForm\n                    ? HostedFieldType.CardNumber\n                    : HostedFieldType.CardNumberVerification;\n\n            case 'cardExpiryField':\n            case 'expiry':\n                return this.isCreditCardForm\n                    ? HostedFieldType.CardExpiry\n                    : HostedFieldType.CardExpiryVerification;\n\n            case 'cardCvvField':\n            case 'cvv':\n                return this.isCreditCardForm\n                    ? HostedFieldType.CardCode\n                    : HostedFieldType.CardCodeVerification;\n\n            default:\n                throw new Error('Unexpected field type');\n        }\n    }\n\n    /**\n     *\n     * Utils\n     *\n     */\n    private getCardFieldsOrThrow(): BigCommercePaymentsCardFields {\n        if (!this.cardFields) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.cardFields;\n    }\n\n    private getInputStyles(\n        styles?: HostedFieldStylesMap,\n    ): BigCommercePaymentsHostedFieldsRenderOptions['styles'] {\n        const commonStyles = {\n            'font-size': styles?.default?.fontSize || '1rem',\n            'font-family':\n                styles?.default?.fontFamily || 'Montserrat, Arial, Helvetica, sans-serif',\n            'font-weight': styles?.default?.fontWeight || '400',\n            outline: 'none',\n            padding: '9px 13px',\n        };\n\n        const defaultStyles = { ...commonStyles, color: '#333333' };\n        const errorStyles = { ...commonStyles, color: 'red' };\n\n        return {\n            input: defaultStyles,\n            '.invalid': errorStyles,\n            '.valid': defaultStyles,\n            ':focus': defaultStyles,\n        };\n    }\n\n    private stylizeInputContainers(\n        fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n    ): void {\n        Object.values(fields || {}).forEach((id: HostedCardFieldOptions) => {\n            const element = document.getElementById(`${id?.containerId || ''}`);\n\n            if (element) {\n                element.style.padding = '0px';\n                element.style.boxShadow = 'none';\n                element.style.border = 'none';\n                element.style.background = 'transparent';\n                element.style.marginBottom = '10px';\n                element.style.marginLeft = '-5px';\n            }\n        });\n    }\n\n    private hasUndefinedValues() {\n        if (this.hostedFormOptions) {\n            return Object.values(this.hostedFormOptions.fields).some(\n                (value) => value === undefined,\n            );\n        }\n\n        return true;\n    }\n\n    /**\n     *\n     * Input events methods\n     *\n     */\n    private onChangeHandler(\n        formOptions: HostedFormOptions,\n        event: BigCommercePaymentsCardFieldsState,\n    ): void {\n        formOptions?.onValidate?.(this.getValidityData(event));\n    }\n\n    private onFocusHandler(\n        formOptions: HostedFormOptions,\n        event: BigCommercePaymentsCardFieldsState,\n    ): void {\n        formOptions?.onFocus?.(this.getFieldTypeByEmittedField(event));\n    }\n\n    private onBlurHandler(\n        formOptions: HostedFormOptions,\n        event: BigCommercePaymentsCardFieldsState,\n    ): void {\n        formOptions?.onBlur?.(this.getFieldTypeByEmittedField(event));\n    }\n\n    private onInputSubmitRequest(\n        formOptions: HostedFormOptions,\n        event: BigCommercePaymentsCardFieldsState,\n    ): void {\n        formOptions?.onEnter?.(this.getFieldTypeByEmittedField(event));\n    }\n\n    /**\n     *\n     * BigCommercePayments Accelerated checkout related methods\n     *\n     */\n    // TODO: remove this part when BCP Fastlane A/B testing will be finished\n    private shouldInitializePayPalFastlane(methodId: string) {\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n        const paymentProviderCustomer = state.getPaymentProviderCustomer();\n        const bigCommercePaymentsPaymentProviderCustomer = isBigCommercePaymentsFastlaneCustomer(\n            paymentProviderCustomer,\n        )\n            ? paymentProviderCustomer\n            : {};\n\n        return (\n            paymentMethod?.initializationData?.isAcceleratedCheckoutEnabled &&\n            paymentMethod?.initializationData?.isBigCommercePaymentsAnalyticsV2Enabled &&\n            !bigCommercePaymentsPaymentProviderCustomer?.authenticationState\n        );\n    }\n\n    // TODO: remove this part when BCP Fastlane A/B testing will be finished\n    private async initializePayPalFastlaneOrThrow(methodId: string): Promise<void> {\n        try {\n            const state = this.paymentIntegrationService.getState();\n            const cart = state.getCartOrThrow();\n            const paymentMethod =\n                state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n            const { initializationData } = paymentMethod;\n\n            if (!initializationData?.connectClientToken) {\n                return;\n            }\n\n            const payPalFastlaneSdk = await this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(\n                paymentMethod,\n                cart.currency.code,\n                cart.id,\n            );\n\n            await this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(\n                payPalFastlaneSdk,\n                !!initializationData?.isDeveloperModeApplicable,\n            );\n        } catch (_: unknown) {\n            // We should avoid throwing any error from this flow to do no brake default flow\n            // This flow is optional\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-credit-cards/create-bigcommerce-payments-credit-cards-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsCreditCardsPaymentStrategy from './bigcommerce-payments-credit-cards-payment-strategy';\nimport createBigCommercePaymentsCreditCardsPaymentStrategy from './create-bigcommerce-payments-credit-cards-payment-strategy';\n\ndescribe('createBigCommercePaymentsCreditCardsPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates bigcommerce payments credit cards button strategy', () => {\n        const strategy =\n            createBigCommercePaymentsCreditCardsPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsCreditCardsPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-credit-cards/create-bigcommerce-payments-credit-cards-payment-strategy.ts",
    "content": "import {\n    createBigCommercePaymentsFastlaneUtils,\n    createBigCommercePaymentsSdk,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsCreditCardsPaymentStrategy from './bigcommerce-payments-credit-cards-payment-strategy';\n\nconst createBigCommercePaymentsCreditCardsPaymentStrategy: PaymentStrategyFactory<\n    BigCommercePaymentsCreditCardsPaymentStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsCreditCardsPaymentStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n        createBigCommercePaymentsSdk(),\n        createBigCommercePaymentsFastlaneUtils(),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsCreditCardsPaymentStrategy, [\n    { id: 'bigcommerce_payments_creditcards' },\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-fastlane/bigcommerce-payments-fastlane-customer-initialize-options.ts",
    "content": "import { PayPalFastlaneStylesOption } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\n\n/**\n * A set of options that are optional to initialize the BigCommercePayments Fastlane customer strategy\n * that are responsible for BigCommercePayments Fastlane components styling and initialization\n *\n * ```js\n * service.initializeCustomer({\n *     methodId: 'bigcommerce_payments_fastlane',\n *     bigcommerce_payments_fastlane: {\n *         styles: {\n *              root: {\n *                  backgroundColorPrimary: 'transparent',\n *                  errorColor: '#C40B0B',\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\n *              },\n *              input: {\n *                  borderRadius: '0.25rem',\n *                  borderColor: '#9E9E9E',\n *                  focusBorderColor: '#4496F6',\n *              },\n *              toggle: {\n *                  colorPrimary: '#0F005E',\n *                  colorSecondary: '#ffffff',\n *              },\n *              text: {\n *                  body: {\n *                      color: '#222222',\n *                      fontSize: '1rem',\n *                  },\n *                  caption: {\n *                      color: '#515151',\n *                      fontSize: '0.875rem',\n *                  },\n *              },\n *              branding: 'light',\n *         },\n *     },\n * });\n * ```\n */\nexport default interface BigCommercePaymentsFastlaneCustomerInitializeOptions {\n    /**\n     * Is a stylisation options for customizing BigCommercePayments Fastlane components\n     *\n     * Note: the styles for all BigCommercePayments Fastlane strategies should be the same,\n     * because they will be provided to PayPal library only for the first strategy initialization\n     * no matter which strategy was initialised first\n     */\n    styles?: PayPalFastlaneStylesOption;\n}\n\nexport interface WithBigCommercePaymentsFastlaneCustomerInitializeOptions {\n    bigcommerce_payments_fastlane?: BigCommercePaymentsFastlaneCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-fastlane/bigcommerce-payments-fastlane-customer-strategy.spec.ts",
    "content": "import {\n    BigCommercePaymentsFastlaneUtils,\n    createBigCommercePaymentsFastlaneUtils,\n    createBigCommercePaymentsSdk,\n    getBigCommercePaymentsFastlanePaymentMethod,\n    getPayPalFastlaneSdk,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneSdk,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getConfig,\n    getConsignment,\n    getCustomer,\n    getGuestCustomer,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsFastlaneCustomerStrategy from './bigcommerce-payments-fastlane-customer-strategy';\n\ndescribe('BigCommercePaymentsFastlaneCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let bigCommercePaymentsFastlaneUtils: BigCommercePaymentsFastlaneUtils;\n    let bigCommercePaymentsSdk: PayPalSdkHelper;\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let strategy: BigCommercePaymentsFastlaneCustomerStrategy;\n\n    const cart = getCart();\n    const guestCustomer = getGuestCustomer();\n    const consignments = [getConsignment()];\n    const storeConfig = getConfig().storeConfig;\n\n    const methodId = 'bigcommerce_payments_fastlane';\n    const secondaryMethodId = 'bigcommerce_payments_creditcards';\n    const customerContextIdMock = 'customerId123';\n    const authenticationResultMock = {\n        authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n        profileData: {\n            name: {\n                fullName: 'John Doe',\n                firstName: 'John',\n                lastName: 'Doe',\n            },\n            phoneNumber: {\n                countryCode: '012',\n                nationalNumber: '123123',\n            },\n            shippingAddress: {\n                phoneNumber: {\n                    countryCode: '012',\n                    nationalNumber: '123123',\n                },\n                name: {\n                    fullName: 'John Doe',\n                    firstName: 'John',\n                    lastName: 'Doe',\n                    phoneNumber: '555555555',\n                },\n                address: {\n                    company: 'BigCommerce',\n                    addressLine1: 'addressLine1',\n                    addressLine2: 'addressLine2',\n                    adminArea1: 'addressState',\n                    adminArea2: 'addressCity',\n                    postalCode: '03004',\n                    countryCode: 'US',\n                },\n            },\n            card: {\n                id: 'nonce/token',\n                paymentSource: {\n                    card: {\n                        brand: 'Visa',\n                        expiry: '2030-12',\n                        lastDigits: '1111',\n                        name: 'John Doe',\n                        billingAddress: {\n                            firstName: 'John',\n                            lastName: 'Doe',\n                            company: 'BigCommerce',\n                            addressLine1: 'addressLine1',\n                            addressLine2: 'addressLine2',\n                            locality: 'addressCity',\n                            adminArea1: 'adminArea1',\n                            adminArea2: 'adminArea2',\n                            postalCode: '03004',\n                            phoneNumber: '123123',\n                            countryCodeAlpha2: 'US',\n                        },\n                    },\n                },\n            },\n        },\n    };\n\n    const bcAddressMock = {\n        id: 1,\n        type: 'type',\n        address1: 'addressLine1',\n        address2: 'addressLine2',\n        city: 'addressCity',\n        company: 'BigCommerce',\n        countryCode: 'US',\n        country: 'US',\n        customFields: [],\n        firstName: 'John',\n        lastName: 'Doe',\n        phone: '333333333333',\n        postalCode: '03004',\n        stateOrProvince: 'addressState',\n        stateOrProvinceCode: 'addressState',\n    };\n\n    const card = 'card' as const;\n\n    const bcInstrumentMock = {\n        bigpayToken: 'nonce/token',\n        brand: 'Visa',\n        defaultInstrument: false,\n        expiryMonth: '12',\n        expiryYear: '2030',\n        iin: '',\n        last4: '1111',\n        method: 'bigcommerce_payments_fastlane',\n        provider: 'bigcommerce_payments_fastlane',\n        untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.CVV,\n        trustedShippingAddress: false,\n        type: card,\n    };\n\n    const initializationOptions = {\n        methodId,\n        bigcommerce_payments_fastlane: {\n            styles: {\n                root: {\n                    backgroundColorPrimary: 'white',\n                },\n            },\n        },\n    };\n\n    const executionOptions = {\n        methodId,\n        continueWithCheckoutCallback: jest.fn(),\n        checkoutPaymentMethodExecuted: jest.fn(),\n    };\n\n    beforeEach(() => {\n        paymentMethod = getBigCommercePaymentsFastlanePaymentMethod();\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        bigCommercePaymentsSdk = createBigCommercePaymentsSdk();\n        bigCommercePaymentsFastlaneUtils = createBigCommercePaymentsFastlaneUtils();\n\n        strategy = new BigCommercePaymentsFastlaneCustomerStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsSdk,\n            bigCommercePaymentsFastlaneUtils,\n        );\n\n        const state = paymentIntegrationService.getState();\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod');\n        jest.spyOn(paymentIntegrationService, 'updatePaymentProviderCustomer');\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress');\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress');\n        jest.spyOn(paymentIntegrationService, 'selectShippingOption');\n        jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(paymentMethod);\n        jest.spyOn(state, 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(state, 'getCustomer').mockReturnValue(guestCustomer);\n        jest.spyOn(state, 'getCustomerOrThrow').mockReturnValue(guestCustomer);\n        jest.spyOn(state, 'getConsignments').mockReturnValue(consignments);\n        jest.spyOn(state, 'getBillingAddress').mockReturnValue(getBillingAddress());\n        jest.spyOn(state, 'getStoreConfigOrThrow').mockReturnValue(storeConfig);\n\n        jest.spyOn(bigCommercePaymentsSdk, 'getPayPalFastlaneSdk').mockImplementation(() =>\n            Promise.resolve(paypalFastlaneSdk),\n        );\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'initializePayPalFastlane');\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'updateStorageSessionId');\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'removeStorageSessionId');\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'lookupCustomerOrThrow').mockImplementation(\n            () =>\n                Promise.resolve({\n                    customerContextId: customerContextIdMock,\n                }),\n        );\n        jest.spyOn(\n            bigCommercePaymentsFastlaneUtils,\n            'triggerAuthenticationFlowOrThrow',\n        ).mockImplementation(() => Promise.resolve(authenticationResultMock));\n        jest.spyOn(\n            bigCommercePaymentsFastlaneUtils,\n            'mapPayPalFastlaneProfileToBcCustomerData',\n        ).mockImplementation(() => ({\n            authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n            addresses: [bcAddressMock],\n            billingAddress: bcAddressMock,\n            shippingAddress: bcAddressMock,\n            instruments: [bcInstrumentMock],\n        }));\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        it('throws an error if method id is not provided', async () => {\n            try {\n                await strategy.initialize({ methodId: undefined });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads BigCommercePayments Fastlane payment method', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n        });\n\n        it('loads BigCommercePayments credit cards payment method on trigger strategy for not know control/test group', async () => {\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: secondaryMethodId,\n            });\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                secondaryMethodId,\n            );\n        });\n\n        it('initializes paypal fastlane with correct styles', async () => {\n            const newInitializationOptions = {\n                methodId,\n                bigcommerce_payments_fastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(),\n                    styles: {\n                        root: {\n                            backgroundColorPrimary: 'green',\n                            errorColor: 'orange',\n                        },\n                        input: {\n                            borderRadius: '5px',\n                        },\n                    },\n                },\n            };\n\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    isAcceleratedCheckoutEnabled: true,\n                    shouldRunAcceleratedCheckout: true,\n                    isFastlaneEnabled: true,\n                    isFastlaneStylingEnabled: true,\n                    fastlaneStyles: {\n                        fastlaneRootSettingsBackgroundColor: 'red',\n                        fastlaneBrandingSettings: 'branding',\n                    },\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockPaymentMethod);\n\n            await strategy.initialize(newInitializationOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n                {\n                    root: {\n                        backgroundColorPrimary: 'red',\n                        errorColor: 'orange',\n                    },\n                    input: {\n                        borderRadius: '5px',\n                    },\n                    branding: 'branding',\n                },\n            );\n        });\n\n        it('loads paypal sdk and initialises paypal fastlane in production mode', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdk.getPayPalFastlaneSdk).toHaveBeenCalledWith(\n                paymentMethod,\n                cart.currency.code,\n                cart.id,\n            );\n\n            expect(bigCommercePaymentsFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n                initializationOptions.bigcommerce_payments_fastlane.styles,\n            );\n        });\n\n        it('loads paypal sdk and initialises paypal fastlane in test mode', async () => {\n            paymentMethod.initializationData.isDeveloperModeApplicable = true;\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdk.getPayPalFastlaneSdk).toHaveBeenCalledWith(\n                paymentMethod,\n                cart.currency.code,\n                cart.id,\n            );\n\n            expect(bigCommercePaymentsFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                true,\n                initializationOptions.bigcommerce_payments_fastlane.styles,\n            );\n        });\n\n        it('does not throw anything if there is an error with Fastlane initialization', async () => {\n            paymentMethod.initializationData.isDeveloperModeApplicable = true;\n            paymentMethod.initializationData.isFastlaneEnabled = true;\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            jest.spyOn(bigCommercePaymentsSdk, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                Promise.reject(),\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdk.getPayPalFastlaneSdk).toHaveBeenCalled();\n            expect(\n                bigCommercePaymentsFastlaneUtils.initializePayPalFastlane,\n            ).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('calls default sign in method', async () => {\n            const credentials = {\n                email: 'test@test.com',\n                password: '123',\n            };\n\n            await strategy.signIn(credentials);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                undefined,\n            );\n\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalledWith({\n                authenticationState: undefined,\n                addresses: undefined,\n                instruments: undefined,\n            });\n\n            expect(bigCommercePaymentsFastlaneUtils.removeStorageSessionId).toHaveBeenCalled();\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('calls default sign out method', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout()', () => {\n        it('throws an error if methodId is not provided', async () => {\n            try {\n                await strategy.executePaymentMethodCheckout();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if continueWithCheckoutCallback is not a function or if its not provided', async () => {\n            try {\n                await strategy.executePaymentMethodCheckout({ methodId });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not run authentication flow for store member', async () => {\n            const storeMember = getCustomer();\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue(\n                storeMember,\n            );\n\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow).not.toHaveBeenCalled();\n        });\n\n        it('loads payment method to get related data', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n        });\n\n        it('triggers checkoutPaymentMethodExecuted if it is provided', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(executionOptions.checkoutPaymentMethodExecuted).toHaveBeenCalled();\n        });\n\n        it('does not call checkoutPaymentMethodExecuted if it is not provided', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout({\n                ...executionOptions,\n                checkoutPaymentMethodExecuted: undefined,\n            });\n\n            expect(executionOptions.checkoutPaymentMethodExecuted).not.toHaveBeenCalled();\n        });\n\n        it('runs paypal fastlane authentication flow and updates customers data in checkout state', async () => {\n            const paymentMethodWithShippingAutoselect = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isFastlaneShippingOptionAutoSelectEnabled: true,\n                },\n            };\n            const state = paymentIntegrationService.getState();\n\n            jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockReturnValue(\n                Promise.resolve(paymentIntegrationService.getState()),\n            );\n            jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(\n                paymentMethodWithShippingAutoselect,\n            );\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow).toHaveBeenCalledWith(\n                guestCustomer.email,\n            );\n\n            expect(\n                bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow,\n            ).toHaveBeenCalledWith(customerContextIdMock);\n            expect(\n                bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData,\n            ).toHaveBeenCalledWith(methodId, authenticationResultMock);\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalledWith({\n                authenticationState: authenticationResultMock.authenticationState,\n                addresses: [bcAddressMock],\n                instruments: [bcInstrumentMock],\n            });\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                bcAddressMock,\n            );\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(\n                bcAddressMock,\n            );\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                consignments[0]?.availableShippingOptions\n                    ? consignments[0]?.availableShippingOptions[0].id\n                    : undefined,\n            );\n            expect(bigCommercePaymentsFastlaneUtils.updateStorageSessionId).toHaveBeenCalledWith(\n                cart.id,\n            );\n        });\n\n        it('calls continueWithCheckoutCallback callback in the end of execution flow', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(executionOptions.continueWithCheckoutCallback).toHaveBeenCalled();\n        });\n\n        it('doesnt select shipping option when isFastlaneShippingOptionAutoSelectEnabled is false', async () => {\n            const state = paymentIntegrationService.getState();\n            const paymentMethodWithShippingAutoselect = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isEnableFastlaneShippingOptionAutoSelect: false,\n                },\n            };\n\n            jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(\n                paymentMethodWithShippingAutoselect,\n            );\n\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(paymentIntegrationService.selectShippingOption).not.toHaveBeenCalled();\n        });\n\n        it('automatically selects shipping option when isFastlaneShippingOptionAutoSelectEnabled is true', async () => {\n            const state = paymentIntegrationService.getState();\n            const paymentMethodWithShippingAutoselect = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isFastlaneShippingOptionAutoSelectEnabled: true,\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockReturnValue(\n                Promise.resolve(paymentIntegrationService.getState()),\n            );\n            jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(\n                paymentMethodWithShippingAutoselect,\n            );\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-fastlane/bigcommerce-payments-fastlane-customer-strategy.ts",
    "content": "import {\n    BigCommercePaymentsFastlaneUtils,\n    BigCommercePaymentsInitializationData,\n    getFastlaneStyles,\n    PayPalFastlaneAuthenticationResult,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneStylesOption,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    CustomerCredentials,\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    ExecutePaymentMethodCheckoutOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsFastlaneCustomerInitializeOptions, {\n    WithBigCommercePaymentsFastlaneCustomerInitializeOptions,\n} from './bigcommerce-payments-fastlane-customer-initialize-options';\n\nexport default class BigCommercePaymentsFastlaneCustomerStrategy implements CustomerStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsSdk: PayPalSdkHelper,\n        private bigCommercePaymentsFastlaneUtils: BigCommercePaymentsFastlaneUtils,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions &\n            WithBigCommercePaymentsFastlaneCustomerInitializeOptions,\n    ): Promise<void> {\n        const { methodId, bigcommerce_payments_fastlane } = options;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" argument is not provided.',\n            );\n        }\n\n        try {\n            await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n            const state = this.paymentIntegrationService.getState();\n            const cart = state.getCartOrThrow();\n            const paymentMethod =\n                state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n\n            const isTestModeEnabled = !!paymentMethod.initializationData?.isDeveloperModeApplicable;\n\n            const paypalFastlaneSdk = await this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(\n                paymentMethod,\n                cart.currency.code,\n                cart.id,\n            );\n\n            await this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(\n                paypalFastlaneSdk,\n                isTestModeEnabled,\n                this.getFastlaneStyles(methodId, bigcommerce_payments_fastlane),\n            );\n        } catch (_) {\n            // TODO: add logger to be able to debug issues if there any\n            // Info: Do not throw anything here to avoid blocking customer from passing checkout flow\n        }\n\n        return Promise.resolve();\n    }\n\n    async deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signInCustomer(credentials, options);\n\n        await this.paymentIntegrationService.updatePaymentProviderCustomer({\n            authenticationState: undefined,\n            addresses: undefined,\n            instruments: undefined,\n        });\n\n        this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId();\n    }\n\n    async signOut(options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signOutCustomer(options);\n    }\n\n    async executePaymentMethodCheckout(\n        options?: ExecutePaymentMethodCheckoutOptions,\n    ): Promise<void> {\n        const { checkoutPaymentMethodExecuted, continueWithCheckoutCallback, methodId } =\n            options || {};\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" argument is not provided.',\n            );\n        }\n\n        if (typeof continueWithCheckoutCallback !== 'function') {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.',\n            );\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const customer = state.getCustomerOrThrow();\n\n        if (customer.isGuest) {\n            if (\n                checkoutPaymentMethodExecuted &&\n                typeof checkoutPaymentMethodExecuted === 'function'\n            ) {\n                checkoutPaymentMethodExecuted();\n            }\n\n            try {\n                await this.runPayPalAuthenticationFlowOrThrow(methodId);\n            } catch (_) {\n                // TODO: add logger to be able to debug issues if there any\n                // Info: Do not throw anything here to avoid blocking customer from passing checkout flow\n            }\n        }\n\n        continueWithCheckoutCallback();\n    }\n\n    /**\n     *\n     * Authentication flow methods\n     *\n     */\n    private async runPayPalAuthenticationFlowOrThrow(methodId: string): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const cartId = state.getCartOrThrow().id;\n        const customer = state.getCustomer();\n        const billingAddress = state.getBillingAddress();\n        const customerEmail = customer?.email || billingAddress?.email || '';\n\n        const { customerContextId } =\n            await this.bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow(customerEmail);\n\n        const authenticationResult =\n            await this.bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow(\n                customerContextId,\n            );\n\n        const isAuthenticationFlowCanceled =\n            authenticationResult.authenticationState === PayPalFastlaneAuthenticationState.CANCELED;\n\n        await this.updateCustomerDataState(methodId, authenticationResult);\n\n        if (isAuthenticationFlowCanceled) {\n            this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId();\n        } else {\n            this.bigCommercePaymentsFastlaneUtils.updateStorageSessionId(cartId);\n        }\n    }\n\n    private async updateCustomerDataState(\n        methodId: string,\n        authenticationResult: PayPalFastlaneAuthenticationResult,\n    ): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n\n        const { authenticationState, addresses, billingAddress, shippingAddress, instruments } =\n            this.bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(\n                methodId,\n                authenticationResult,\n            );\n\n        await this.paymentIntegrationService.updatePaymentProviderCustomer({\n            authenticationState,\n            addresses,\n            instruments,\n        });\n\n        if (billingAddress) {\n            await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n        }\n\n        if (shippingAddress && cart.lineItems.physicalItems.length > 0) {\n            const updatedState = await this.paymentIntegrationService.updateShippingAddress(\n                shippingAddress,\n            );\n\n            const paymentMethod =\n                updatedState.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(\n                    methodId,\n                );\n            const { isFastlaneShippingOptionAutoSelectEnabled } =\n                paymentMethod.initializationData || {};\n            const consignments = updatedState.getConsignments() || [];\n            const availableShippingOptions = consignments[0]?.availableShippingOptions || [];\n            const firstShippingOption = availableShippingOptions[0];\n            const recommendedShippingOption = availableShippingOptions.find(\n                (option) => option.isRecommended,\n            );\n\n            if (\n                (recommendedShippingOption || firstShippingOption) &&\n                isFastlaneShippingOptionAutoSelectEnabled\n            ) {\n                const shippingOptionId = recommendedShippingOption?.id || firstShippingOption.id;\n\n                await this.paymentIntegrationService.selectShippingOption(shippingOptionId);\n            }\n        }\n    }\n\n    /**\n     *\n     * Fastlane styling methods\n     *\n     */\n    private getFastlaneStyles(\n        methodId: string,\n        bigcommerce_payments_fastlane:\n            | BigCommercePaymentsFastlaneCustomerInitializeOptions\n            | undefined,\n    ): PayPalFastlaneStylesOption | undefined {\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n\n        const { fastlaneStyles, isFastlaneStylingEnabled } = paymentMethod.initializationData || {};\n\n        return getFastlaneStyles(\n            isFastlaneStylingEnabled ? fastlaneStyles : {},\n            bigcommerce_payments_fastlane?.styles,\n        );\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-fastlane/bigcommerce-payments-fastlane-payment-initialize-options.ts",
    "content": "import { PayPalFastlaneStylesOption } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport { CardInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * A set of options that are required to initialize the BigCommercePayments Fastlane payment\n * method for presenting on the page.\n *\n *\n * Also, BigCommercePayments requires specific options to initialize BigCommercePayments Fastlane Card Component\n * ```html\n * <!-- This is where the BigCommercePayments Fastlane Card Component will be inserted -->\n * <div id=\"container\"></div>\n * ```\n * ```js\n * service.initializePayment({\n *     methodId: 'bigcommerce_payments_fastlane',\n *     bigcommerce_payments_fastlane: {\n *         onInit: (renderPayPalCardComponent) => renderPayPalCardComponent('#container-id'),\n *         onChange: (showPayPalCardSelector) => showPayPalCardSelector(),\n *         styles: {\n *              root: {\n *                  backgroundColorPrimary: 'transparent',\n *                  errorColor: '#C40B0B',\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\n *              },\n *              input: {\n *                  borderRadius: '0.25rem',\n *                  borderColor: '#9E9E9E',\n *                  focusBorderColor: '#4496F6',\n *              },\n *              toggle: {\n *                  colorPrimary: '#0F005E',\n *                  colorSecondary: '#ffffff',\n *              },\n *              text: {\n *                  body: {\n *                      color: '#222222',\n *                      fontSize: '1rem',\n *                  },\n *                  caption: {\n *                      color: '#515151',\n *                      fontSize: '0.875rem',\n *                  },\n *              },\n *              branding: 'light',\n *         },\n *     },\n * });\n * ```\n */\nexport default interface BigCommercePaymentsFastlanePaymentInitializeOptions {\n    /**\n     * Is a callback that takes the CSS selector of a container\n     * where the BigCommercePayments Fastlane form should be inserted into.\n     */\n    onInit?: (renderPayPalCardComponent: (container: string) => void) => void;\n\n    /**\n     * Is a callback that shows fastlane stored instruments\n     * when get triggered\n     */\n    onChange?: (showPayPalCardSelector: () => Promise<CardInstrument | undefined>) => void;\n\n    /**\n     * Callback that handles errors\n     */\n    onError?: (error: unknown) => void;\n\n    /**\n     * Is a stylisation options for customizing BigCommercePayments Fastlane components\n     *\n     * Note: the styles for all BigCommercePaymentsFastlane strategies should be the same,\n     * because they will be provided to PayPal library only for the first strategy initialization\n     * no matter what strategy was initialised first\n     */\n    styles?: PayPalFastlaneStylesOption;\n}\n\nexport interface WithBigCommercePaymentsFastlanePaymentInitializeOptions {\n    bigcommerce_payments_fastlane?: BigCommercePaymentsFastlanePaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-fastlane/bigcommerce-payments-fastlane-payment-strategy.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\nimport { noop } from 'lodash';\n\nimport {\n    BigCommercePaymentsFastlaneUtils,\n    createBigCommercePaymentsFastlaneUtils,\n    createBigCommercePaymentsSdk,\n    getBigCommercePaymentsFastlanePaymentMethod,\n    getPayPalFastlaneAuthenticationResultMock,\n    getPayPalFastlaneSdk,\n    LiabilityShiftEnum,\n    PayPalFastlane,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneSdk,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    CardInstrument,\n    InvalidArgumentError,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodInvalidError,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getConfig,\n    getCustomer,\n    getGuestCustomer,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsRequestSender from '../bigcommerce-payments-request-sender';\n\nimport BigCommercePaymentsFastlanePaymentStrategy from './bigcommerce-payments-fastlane-payment-strategy';\n\ndescribe('BigCommercePaymentsFastlanePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let paypalFastlane: PayPalFastlane;\n    let bigCommercePaymentsRequestSender: BigCommercePaymentsRequestSender;\n    let bigCommercePaymentsSdk: PayPalSdkHelper;\n    let bigCommercePaymentsFastlaneUtils: BigCommercePaymentsFastlaneUtils;\n    let strategy: BigCommercePaymentsFastlanePaymentStrategy;\n\n    const address = getBillingAddress();\n    const cart = getCart();\n    const guestCustomer = getGuestCustomer();\n    const customer = getCustomer();\n    const storeConfig = getConfig().storeConfig;\n\n    const authenticationResultMock = getPayPalFastlaneAuthenticationResultMock();\n    const customerContextId = 'id123';\n    const paypalOrderId = 'paypalOrderId123';\n\n    const methodId = 'bigcommerce_payments_fastlane';\n    const initializationOptions = {\n        methodId,\n        bigcommerce_payments_fastlane: {\n            onInit: jest.fn(),\n            onChange: jest.fn(),\n        },\n    };\n\n    const bcAddressMock = {\n        id: 1,\n        type: 'type',\n        address1: 'addressLine1',\n        address2: 'addressLine2',\n        city: 'addressCity',\n        company: 'BigCommerce',\n        countryCode: 'US',\n        country: 'US',\n        customFields: [],\n        firstName: 'John',\n        lastName: 'Doe',\n        phone: '333333333333',\n        postalCode: '03004',\n        stateOrProvince: 'addressState',\n        stateOrProvinceCode: 'addressState',\n    };\n\n    const card = 'card' as const;\n\n    const bcCardMock = {\n        bigpayToken: 'nonce/token',\n        brand: 'Visa',\n        defaultInstrument: false,\n        expiryMonth: '09',\n        expiryYear: '2031',\n        iin: '',\n        last4: '2233',\n        method: 'bigcommerce_payments_fastlane',\n        provider: 'bigcommerce_payments_fastlane',\n        trustedShippingAddress: false,\n        type: card,\n        untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n    };\n\n    beforeEach(async () => {\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n        paypalFastlane = await paypalFastlaneSdk.Fastlane();\n        paymentMethod = getBigCommercePaymentsFastlanePaymentMethod();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        bigCommercePaymentsRequestSender = new BigCommercePaymentsRequestSender(\n            createRequestSender(),\n        );\n        bigCommercePaymentsSdk = createBigCommercePaymentsSdk();\n        bigCommercePaymentsFastlaneUtils = createBigCommercePaymentsFastlaneUtils();\n\n        strategy = new BigCommercePaymentsFastlanePaymentStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsRequestSender,\n            bigCommercePaymentsSdk,\n            bigCommercePaymentsFastlaneUtils,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod');\n        jest.spyOn(paymentIntegrationService, 'submitOrder');\n        jest.spyOn(paymentIntegrationService, 'submitPayment');\n        jest.spyOn(paymentIntegrationService, 'updatePaymentProviderCustomer');\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue(\n            guestCustomer,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue(\n            guestCustomer,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfig,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n            address,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n            address,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getPaymentProviderCustomer',\n        ).mockReturnValue({});\n\n        jest.spyOn(bigCommercePaymentsSdk, 'getPayPalFastlaneSdk').mockImplementation(() =>\n            Promise.resolve(paypalFastlaneSdk),\n        );\n\n        jest.spyOn(bigCommercePaymentsRequestSender, 'createOrder').mockResolvedValue({\n            orderId: paypalOrderId,\n            approveUrl: 'url.com',\n        });\n\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'getPayPalFastlaneOrThrow').mockReturnValue(\n            paypalFastlane,\n        );\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'initializePayPalFastlane');\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'getStorageSessionId').mockReturnValue(\n            cart.id,\n        );\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'updateStorageSessionId');\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'removeStorageSessionId');\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'lookupCustomerOrThrow').mockResolvedValue({\n            customerContextId,\n        });\n        jest.spyOn(\n            bigCommercePaymentsFastlaneUtils,\n            'triggerAuthenticationFlowOrThrow',\n        ).mockResolvedValue(getPayPalFastlaneAuthenticationResultMock());\n        jest.spyOn(\n            bigCommercePaymentsFastlaneUtils,\n            'mapPayPalFastlaneProfileToBcCustomerData',\n        ).mockReturnValue({\n            authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n            addresses: [],\n            instruments: [],\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        it('throws an error if methodId is not provided', async () => {\n            try {\n                await strategy.initialize({ methodId: '' });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_fastlane is not provided', async () => {\n            try {\n                await strategy.initialize({ methodId });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_fastlane.onInit is not provided or it is not a function', async () => {\n            try {\n                const options = {\n                    methodId,\n                    bigcommerce_payments_fastlane: {},\n                };\n\n                await strategy.initialize(options);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_fastlane.onChange is not provided or it is not a function', async () => {\n            try {\n                const options = {\n                    methodId,\n                    bigcommerce_payments_fastlane: {\n                        onInit: jest.fn(),\n                    },\n                };\n\n                await strategy.initialize(options);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('initializes paypal fastlane with correct styles', async () => {\n            const newInitializationOptions = {\n                methodId,\n                bigcommerce_payments_fastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(),\n                    styles: {\n                        root: {\n                            backgroundColorPrimary: 'green',\n                            errorColor: 'orange',\n                        },\n                        input: {\n                            borderRadius: '5px',\n                        },\n                    },\n                },\n            };\n\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    isAcceleratedCheckoutEnabled: true,\n                    shouldRunAcceleratedCheckout: true,\n                    isFastlaneEnabled: true,\n                    isFastlaneStylingEnabled: true,\n                    fastlaneStyles: {\n                        fastlaneRootSettingsBackgroundColor: 'red',\n                        fastlaneBrandingSettings: 'branding',\n                    },\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockPaymentMethod);\n\n            await strategy.initialize(newInitializationOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n                {\n                    root: {\n                        backgroundColorPrimary: 'red',\n                        errorColor: 'orange',\n                    },\n                    input: {\n                        borderRadius: '5px',\n                    },\n                    branding: 'branding',\n                },\n            );\n        });\n\n        it('loads payment method', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n        });\n\n        it('loads paypal fastlane sdk', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdk.getPayPalFastlaneSdk).toHaveBeenCalledWith(\n                paymentMethod,\n                cart.currency.code,\n                cart.id,\n            );\n        });\n\n        it('initializes paypal fastlane in production mode', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n                {},\n            );\n        });\n\n        it('initializes paypal fastlane in test mode', async () => {\n            paymentMethod.initializationData.isDeveloperModeApplicable = true;\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                true,\n                {},\n            );\n        });\n\n        it('does not trigger lookup method if the customer already authenticated with BigCommercePayments Fastlane', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomer',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [],\n                instruments: [],\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger lookup method for store members', async () => {\n            const storeMember = getCustomer();\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue(\n                storeMember,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger lookup method if authentication flow did not trigger in the same session before page refresh', async () => {\n            jest.spyOn(bigCommercePaymentsFastlaneUtils, 'getStorageSessionId').mockReturnValue(\n                'another_session_id_123',\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow).not.toHaveBeenCalled();\n        });\n\n        it('successfully authenticates customer with BigCommercePayments Fastlane', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow).toHaveBeenCalledWith(\n                customer.email,\n            );\n            expect(\n                bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow,\n            ).toHaveBeenCalledWith(customerContextId);\n            expect(\n                bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData,\n            ).toHaveBeenCalledWith(methodId, authenticationResultMock);\n            expect(bigCommercePaymentsFastlaneUtils.updateStorageSessionId).toHaveBeenCalledWith(\n                cart.id,\n            );\n        });\n\n        it('initialises BigCommercePayments Fastlane card component', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalFastlane.FastlaneCardComponent).toHaveBeenCalledWith({\n                fields: {\n                    cardholderName: {\n                        enabled: true,\n                        prefill: 'Test Tester',\n                    },\n                    phoneNumber: {\n                        prefill: address.phone,\n                    },\n                },\n            });\n        });\n\n        it('provides callback function to be able to use them on ui', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(initializationOptions.bigcommerce_payments_fastlane.onInit).toHaveBeenCalled();\n            expect(initializationOptions.bigcommerce_payments_fastlane.onChange).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute()', () => {\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        const mockedInstrumentId = 'mockInstrumentId123';\n\n        const executeOptions = {\n            payment: {\n                methodId,\n            },\n        };\n\n        const executeOptionsWithVaulting = {\n            payment: {\n                methodId,\n                paymentData: {\n                    instrumentId: mockedInstrumentId,\n                },\n            },\n        };\n\n        it('throws an error if payment option is not provided', async () => {\n            try {\n                await strategy.execute({ payment: undefined });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('successfully places order with credit card flow', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(executeOptions);\n\n            expect(bigCommercePaymentsRequestSender.createOrder).toHaveBeenCalledWith(methodId, {\n                cartId: cart.id,\n                fastlaneToken: 'paypal_fastlane_instrument_id_nonce',\n            });\n\n            const paypalFastlaneComponent = await paypalFastlane.FastlaneCardComponent({});\n\n            expect(paypalFastlaneComponent.getPaymentToken).toHaveBeenCalledWith({\n                billingAddress: {\n                    addressLine1: address.address1,\n                    addressLine2: address.address2,\n                    adminArea1: address.stateOrProvinceCode,\n                    adminArea2: address.city,\n                    company: address.company,\n                    countryCode: address.countryCode,\n                    postalCode: address.postalCode,\n                },\n                name: {\n                    fullName: `${address.firstName} ${address.lastName}`,\n                },\n            });\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith({}, undefined);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    shouldSaveInstrument: false,\n                    shouldSetAsDefaultInstrument: false,\n                    formattedPayload: {\n                        paypal_fastlane_token: {\n                            order_id: paypalOrderId,\n                            token: 'paypal_fastlane_instrument_id_nonce',\n                        },\n                    },\n                },\n            });\n            expect(bigCommercePaymentsFastlaneUtils.removeStorageSessionId).toHaveBeenCalled();\n        });\n\n        it('successfully places order with vaulted instruments flow', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(executeOptionsWithVaulting);\n\n            expect(bigCommercePaymentsRequestSender.createOrder).toHaveBeenCalledWith(methodId, {\n                cartId: cart.id,\n                fastlaneToken: 'mockInstrumentId123',\n            });\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith({}, undefined);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        paypal_fastlane_token: {\n                            order_id: paypalOrderId,\n                            token: mockedInstrumentId,\n                        },\n                    },\n                },\n            });\n            expect(bigCommercePaymentsFastlaneUtils.removeStorageSessionId).toHaveBeenCalled();\n        });\n\n        it('do not create an order if there is an error while receiving a payment order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const paypalFastlaneComponent = await paypalFastlane.FastlaneCardComponent({});\n\n            jest.spyOn(paypalFastlaneComponent, 'getPaymentToken').mockRejectedValue(\n                new Error('input data error'),\n            );\n\n            try {\n                await strategy.execute(executeOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n                expect(bigCommercePaymentsRequestSender.createOrder).not.toHaveBeenCalled();\n            }\n        });\n\n        describe('3D Secure', () => {\n            const paymentMethodMock = (is3dsEnabled = true) => ({\n                ...getBigCommercePaymentsFastlanePaymentMethod(),\n                config: {\n                    is3dsEnabled,\n                },\n            });\n\n            const threeDomainSecureComponentMock = {\n                isEligible: jest.fn().mockReturnValue(Promise.resolve(true)),\n                show: jest.fn(),\n            };\n\n            beforeEach(() => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodMock());\n\n                jest.spyOn(bigCommercePaymentsRequestSender, 'createOrder').mockResolvedValue({\n                    orderId: paypalOrderId,\n                    approveUrl: 'url.com',\n                });\n            });\n\n            it('creates order with fastlaneToken', async () => {\n                const bigCommerceFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        isEligible: jest.fn().mockReturnValue(Promise.resolve(true)),\n                        show: jest.fn().mockResolvedValue({\n                            liabilityShift: LiabilityShiftEnum.Yes,\n                        }),\n                    },\n                };\n\n                jest.spyOn(bigCommercePaymentsSdk, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(bigCommerceFastlaneSdkMock),\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                await strategy.execute(executeOptions);\n\n                expect(bigCommercePaymentsRequestSender.createOrder).toHaveBeenCalledWith(\n                    methodId,\n                    {\n                        cartId: cart.id,\n                        fastlaneToken: 'paypal_fastlane_instrument_id_nonce',\n                    },\n                );\n            });\n\n            it('does not create order if 3ds on and liability shift not YES', async () => {\n                const bigCommerceFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        isEligible: jest.fn().mockReturnValue(Promise.resolve(true)),\n                        show: jest.fn().mockResolvedValue({\n                            liabilityShift: LiabilityShiftEnum.Unknown,\n                        }),\n                    },\n                };\n\n                jest.spyOn(bigCommercePaymentsSdk, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(bigCommerceFastlaneSdkMock),\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                try {\n                    await strategy.execute(executeOptions);\n                } catch (error) {\n                    expect(error).toBeInstanceOf(PaymentMethodInvalidError);\n                    expect(bigCommercePaymentsRequestSender.createOrder).not.toHaveBeenCalled();\n                }\n            });\n\n            it('calls threeDomainSecureComponent isEligible', async () => {\n                const bigCommerceFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        isEligible: jest.fn().mockReturnValue(Promise.resolve(false)),\n                    },\n                };\n\n                jest.spyOn(bigCommercePaymentsSdk, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(bigCommerceFastlaneSdkMock),\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                await strategy.execute(executeOptions);\n\n                expect(\n                    bigCommerceFastlaneSdkMock.ThreeDomainSecureClient.isEligible,\n                ).toHaveBeenCalled();\n            });\n\n            it('prevent 3D Secure Verification when experiment is disabled', async () => {\n                jest.spyOn(bigCommercePaymentsSdk, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve({\n                        ...paypalFastlaneSdk,\n                        ThreeDomainSecureClient: threeDomainSecureComponentMock,\n                    }),\n                );\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getStoreConfigOrThrow',\n                ).mockReturnValue({\n                    ...storeConfig,\n                    checkoutSettings: {\n                        ...storeConfig.checkoutSettings,\n                        features: {\n                            'PROJECT-7080.bcp_fastlane_three_ds': false,\n                        },\n                    },\n                });\n\n                await strategy.initialize(initializationOptions);\n\n                await strategy.execute(executeOptions);\n\n                expect(threeDomainSecureComponentMock.isEligible).not.toHaveBeenCalled();\n                expect(threeDomainSecureComponentMock.show).not.toHaveBeenCalled();\n            });\n\n            it('calls threeDomainSecureComponent show', async () => {\n                const bigCommerceFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        show: jest.fn().mockReturnValue({\n                            liabilityShift: LiabilityShiftEnum.Possible,\n                            authenticationState: 'succeeded',\n                            nonce: 'bigcommerce_payments_fastlane_instrument_id_nonce',\n                        }),\n                    },\n                };\n\n                jest.spyOn(bigCommercePaymentsSdk, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(bigCommerceFastlaneSdkMock),\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                await strategy.execute(executeOptions);\n\n                expect(bigCommerceFastlaneSdkMock.ThreeDomainSecureClient.show).toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'bigcommerce_payments_fastlane',\n                        paymentData: {\n                            formattedPayload: expect.objectContaining({\n                                paypal_fastlane_token: expect.objectContaining({\n                                    token: 'bigcommerce_payments_fastlane_instrument_id_nonce',\n                                    order_id: 'paypalOrderId123',\n                                }),\n                            }),\n                            shouldSaveInstrument: false,\n                            shouldSetAsDefaultInstrument: false,\n                        },\n                    }),\n                );\n            });\n\n            it('throws an error if liabilityShift no or unknown', async () => {\n                const paypalFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        show: jest.fn().mockReturnValue({\n                            liabilityShift: LiabilityShiftEnum.No,\n                            authenticationState: 'success',\n                            nonce: 'paypal_fastlane_instrument_id_nonce_3ds',\n                        }),\n                    },\n                };\n\n                jest.spyOn(bigCommercePaymentsSdk, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(paypalFastlaneSdkMock),\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                try {\n                    await strategy.execute(executeOptions);\n                } catch (error) {\n                    expect(error).toBeInstanceOf(Error);\n                }\n            });\n\n            it('throws an error if authenticationState is errored', async () => {\n                const paypalFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        show: jest.fn().mockReturnValue({\n                            liabilityShift: LiabilityShiftEnum.Possible,\n                            authenticationState: 'errored',\n                            nonce: 'paypal_fastlane_instrument_id_nonce_3ds',\n                        }),\n                    },\n                };\n\n                jest.spyOn(bigCommercePaymentsSdk, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(paypalFastlaneSdkMock),\n                );\n                await strategy.initialize(initializationOptions);\n\n                try {\n                    await strategy.execute(executeOptions);\n                } catch (error) {\n                    expect(error).toBeInstanceOf(Error);\n                }\n            });\n\n            it('creates order with payment token when 3ds is on and isEligible false', async () => {\n                const bigCommerceFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        isEligible: jest.fn().mockReturnValue(Promise.resolve(false)),\n                    },\n                };\n\n                jest.spyOn(bigCommercePaymentsSdk, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(bigCommerceFastlaneSdkMock),\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                await strategy.execute(executeOptions);\n\n                expect(bigCommercePaymentsRequestSender.createOrder).toHaveBeenCalledWith(\n                    methodId,\n                    {\n                        cartId: cart.id,\n                        fastlaneToken: 'paypal_fastlane_instrument_id_nonce',\n                    },\n                );\n            });\n        });\n\n        it('throws specific error when get 422 error on payment request', async () => {\n            const initOptions = {\n                methodId,\n                bigcommerce_payments_fastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(),\n                    onError: jest.fn(),\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue({\n                name: 'Error',\n                message: 'Payment request failed',\n                response: {\n                    status: 422,\n                    name: 'INVALID_REQUEST',\n                },\n            });\n            await strategy.initialize(initOptions);\n\n            try {\n                await strategy.execute(executeOptions);\n            } catch (error: unknown) {\n                expect(initOptions.bigcommerce_payments_fastlane.onError).toHaveBeenCalledWith({\n                    translationKey: 'payment.errors.invalid_request_error',\n                });\n            }\n        });\n    });\n\n    describe('#onInit option callback', () => {\n        it('throws an error if container is not provided', async () => {\n            let onInitCallback = noop;\n\n            const onInitImplementation = (renderComponentCallback: (container: string) => void) => {\n                onInitCallback = renderComponentCallback;\n            };\n\n            await strategy.initialize({\n                methodId,\n                bigcommerce_payments_fastlane: {\n                    onInit: jest.fn(onInitImplementation),\n                    onChange: jest.fn(),\n                },\n            });\n\n            try {\n                onInitCallback();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(Error);\n            }\n        });\n\n        it('renders fastlane credit card component', async () => {\n            const containerId = 'containerIdMock';\n            let onInitCallback: (container: string) => void = noop;\n\n            const onInitImplementation = (renderComponentCallback: (container: string) => void) => {\n                onInitCallback = renderComponentCallback;\n            };\n\n            await strategy.initialize({\n                methodId,\n                bigcommerce_payments_fastlane: {\n                    onInit: jest.fn(onInitImplementation),\n                    onChange: jest.fn(),\n                },\n            });\n\n            onInitCallback(containerId);\n\n            const paypalFastlaneComponent = await paypalFastlane.FastlaneCardComponent({});\n\n            expect(paypalFastlaneComponent.render).toHaveBeenCalledWith(containerId);\n        });\n    });\n\n    describe('#onChange option callback', () => {\n        it('returns selected card instrument', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomer',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [bcAddressMock],\n                instruments: [bcCardMock],\n            });\n\n            jest.spyOn(paypalFastlane.profile, 'showCardSelector').mockResolvedValue({\n                selectionChanged: true,\n                selectedCard: {\n                    id: 'nonce/token',\n                    paymentSource: {\n                        card: {\n                            brand: 'Visa',\n                            expiry: '2030-12',\n                            lastDigits: '1111',\n                            name: 'John Doe',\n                            billingAddress: {\n                                addressLine1: 'addressLine1',\n                                adminArea1: 'adminArea1',\n                                adminArea2: 'adminArea2',\n                                postalCode: '03004',\n                                countryCode: 'US',\n                            },\n                        },\n                    },\n                },\n            });\n\n            let onChangeCallback: () => Promise<CardInstrument | undefined> = () =>\n                Promise.resolve(undefined);\n            const onChangeImplementation = (\n                showPayPalCardSelector: () => Promise<CardInstrument | undefined>,\n            ) => {\n                onChangeCallback = showPayPalCardSelector;\n            };\n\n            await strategy.initialize({\n                methodId,\n                bigcommerce_payments_fastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(onChangeImplementation),\n                },\n            });\n\n            const result = await onChangeCallback();\n\n            const paypalToBcInstrument = {\n                bigpayToken: 'nonce/token',\n                brand: 'Visa',\n                defaultInstrument: false,\n                expiryMonth: '12',\n                expiryYear: '2030',\n                iin: '',\n                last4: '1111',\n                method: 'bigcommerce_payments_fastlane',\n                provider: 'bigcommerce_payments_fastlane',\n                trustedShippingAddress: false,\n                type: 'card',\n                untrustedShippingCardVerificationMode: 'pan',\n            };\n\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalledWith({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [bcAddressMock],\n                instruments: [paypalToBcInstrument],\n            });\n\n            expect(result).toEqual(paypalToBcInstrument);\n        });\n\n        it('returns undefined if the customer selects the same instrument or closes a popup window', async () => {\n            jest.spyOn(paypalFastlane.profile, 'showCardSelector').mockResolvedValue({\n                selectionChanged: false,\n                selectedCard: {\n                    id: 'nonce/token',\n                    paymentSource: {\n                        card: {\n                            brand: 'Visa',\n                            expiry: '2030-12',\n                            lastDigits: '1111',\n                            name: 'John Doe',\n                            billingAddress: {\n                                addressLine1: 'addressLine1',\n                                adminArea1: 'adminArea1',\n                                adminArea2: 'adminArea2',\n                                postalCode: '03004',\n                                countryCode: 'US',\n                            },\n                        },\n                    },\n                },\n            });\n\n            let onChangeCallback: () => Promise<CardInstrument | undefined> = () =>\n                Promise.resolve(undefined);\n            const onChangeImplementation = (\n                showPayPalCardSelector: () => Promise<CardInstrument | undefined>,\n            ) => {\n                onChangeCallback = showPayPalCardSelector;\n            };\n\n            await strategy.initialize({\n                methodId,\n                bigcommerce_payments_fastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(onChangeImplementation),\n                },\n            });\n\n            const result = await onChangeCallback();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-fastlane/bigcommerce-payments-fastlane-payment-strategy.ts",
    "content": "import {\n    BigCommercePaymentsFastlaneUtils,\n    BigCommercePaymentsInitializationData,\n    getFastlaneStyles,\n    isBigcommerceFastlaneRequestError,\n    isPayPalFastlaneCustomer,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneCardComponentMethods,\n    PayPalFastlaneCardComponentOptions,\n    PayPalFastlanePaymentFormattedPayload,\n    PayPalFastlaneSdk,\n    PayPalSdkHelper,\n    TDSecureAuthenticationState,\n    TDSecureVerificationMethod,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    CardInstrument,\n    InvalidArgumentError,\n    isHostedInstrumentLike,\n    isVaultedInstrument,\n    OrderFinalizationNotRequiredError,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodClientUnavailableError,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport BigCommercePaymentsRequestSender from '../bigcommerce-payments-request-sender';\nimport { LiabilityShiftEnum } from '../bigcommerce-payments-types';\n\nimport BigCommercePaymentsFastlanePaymentInitializeOptions, {\n    WithBigCommercePaymentsFastlanePaymentInitializeOptions,\n} from './bigcommerce-payments-fastlane-payment-initialize-options';\n\nexport default class BigCommercePaymentsFastlanePaymentStrategy implements PaymentStrategy {\n    private paypalComponentMethods?: PayPalFastlaneCardComponentMethods;\n    private threeDSVerificationMethod?: string;\n    private paypalFastlaneSdk?: PayPalFastlaneSdk;\n    private bigcommerce_payments_fastlane?: BigCommercePaymentsFastlanePaymentInitializeOptions;\n    private methodId?: string;\n    private orderId?: string;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsRequestSender: BigCommercePaymentsRequestSender,\n        private bigCommercePaymentsSdk: PayPalSdkHelper,\n        private bigCommercePaymentsFastlaneUtils: BigCommercePaymentsFastlaneUtils,\n    ) {}\n\n    /**\n     *\n     * Default methods\n     *\n     * */\n    async initialize(\n        options: PaymentInitializeOptions & WithBigCommercePaymentsFastlanePaymentInitializeOptions,\n    ): Promise<void> {\n        const { methodId, bigcommerce_payments_fastlane } = 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.methodId = methodId;\n\n        if (!bigcommerce_payments_fastlane) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments_fastlane\" argument is not provided.',\n            );\n        }\n\n        this.bigcommerce_payments_fastlane = bigcommerce_payments_fastlane;\n\n        if (\n            !bigcommerce_payments_fastlane.onInit ||\n            typeof bigcommerce_payments_fastlane.onInit !== 'function'\n        ) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments_fastlane.onInit\" argument is not provided or it is not a function.',\n            );\n        }\n\n        if (\n            !bigcommerce_payments_fastlane.onChange ||\n            typeof bigcommerce_payments_fastlane.onChange !== 'function'\n        ) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments_fastlane.onChange\" argument is not provided or it is not a function.',\n            );\n        }\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n        const { isDeveloperModeApplicable, isFastlaneStylingEnabled } =\n            paymentMethod.initializationData || {};\n\n        this.threeDSVerificationMethod =\n            paymentMethod.initializationData?.threeDSVerificationMethod;\n\n        this.paypalFastlaneSdk = await this.bigCommercePaymentsSdk.getPayPalFastlaneSdk(\n            paymentMethod,\n            cart.currency.code,\n            cart.id,\n        );\n\n        const paypalFastlaneStyling = isFastlaneStylingEnabled\n            ? paymentMethod?.initializationData?.fastlaneStyles\n            : {};\n\n        const fastlaneStyles = getFastlaneStyles(\n            paypalFastlaneStyling,\n            bigcommerce_payments_fastlane?.styles,\n        );\n\n        await this.bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(\n            this.paypalFastlaneSdk,\n            !!isDeveloperModeApplicable,\n            fastlaneStyles,\n        );\n\n        if (this.shouldRunAuthenticationFlow()) {\n            await this.runPayPalAuthenticationFlowOrThrow(methodId);\n        }\n\n        await this.initializePayPalPaymentComponent();\n\n        bigcommerce_payments_fastlane.onInit((container: string) =>\n            this.renderPayPalPaymentComponent(container),\n        );\n        bigcommerce_payments_fastlane.onChange(() =>\n            this.handlePayPalStoredInstrumentChange(methodId),\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 { paymentData, methodId } = payment;\n\n        const isVaultedFlow = paymentData && isVaultedInstrument(paymentData);\n\n        try {\n            await this.paymentIntegrationService.submitOrder(order, options);\n\n            const paymentPayload = isVaultedFlow\n                ? await this.prepareVaultedInstrumentPaymentPayload(methodId, paymentData)\n                : await this.preparePaymentPayload(methodId, paymentData);\n\n            await this.paymentIntegrationService.submitPayment<PayPalFastlanePaymentFormattedPayload>(\n                paymentPayload,\n            );\n\n            this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId();\n        } catch (error) {\n            if (\n                isBigcommerceFastlaneRequestError(error) &&\n                error.response.name === 'INVALID_REQUEST'\n            ) {\n                const invalidRequestError = {\n                    translationKey: 'payment.errors.invalid_request_error',\n                };\n\n                this.handleError(invalidRequestError);\n\n                return Promise.reject();\n            }\n\n            if (error instanceof Error && error.name !== 'FastlaneError') {\n                throw error;\n            }\n\n            return Promise.reject();\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    async deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    /**\n     *\n     * Authentication flow methods\n     *\n     */\n    private shouldRunAuthenticationFlow(): boolean {\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        const customer = state.getCustomerOrThrow();\n        const paymentProviderCustomer = state.getPaymentProviderCustomer();\n        const paypalFastlaneCustomer = isPayPalFastlaneCustomer(paymentProviderCustomer)\n            ? paymentProviderCustomer\n            : {};\n\n        const paypalFastlaneSessionId = this.bigCommercePaymentsFastlaneUtils.getStorageSessionId();\n\n        if (\n            !customer.isGuest ||\n            paypalFastlaneCustomer?.authenticationState ===\n                PayPalFastlaneAuthenticationState.CANCELED\n        ) {\n            return false;\n        }\n\n        return !paypalFastlaneCustomer?.authenticationState && paypalFastlaneSessionId === cart.id;\n    }\n\n    private async runPayPalAuthenticationFlowOrThrow(methodId: string): Promise<void> {\n        try {\n            const state = this.paymentIntegrationService.getState();\n            const cart = state.getCartOrThrow();\n            const customer = state.getCustomer();\n            const billingAddress = state.getBillingAddress();\n            const customerEmail = customer?.email || billingAddress?.email || '';\n\n            const { customerContextId } =\n                await this.bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow(customerEmail);\n\n            const authenticationResult =\n                await this.bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow(\n                    customerContextId,\n                );\n\n            const { authenticationState, addresses, instruments } =\n                this.bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(\n                    methodId,\n                    authenticationResult,\n                );\n\n            await this.paymentIntegrationService.updatePaymentProviderCustomer({\n                authenticationState,\n                addresses,\n                instruments,\n            });\n\n            const isAuthenticationFlowCanceled =\n                authenticationResult.authenticationState ===\n                PayPalFastlaneAuthenticationState.CANCELED;\n\n            if (isAuthenticationFlowCanceled) {\n                this.bigCommercePaymentsFastlaneUtils.removeStorageSessionId();\n            } else {\n                this.bigCommercePaymentsFastlaneUtils.updateStorageSessionId(cart.id);\n            }\n        } catch (error) {\n            // Info: Do not throw anything here to avoid blocking customer from passing checkout flow\n        }\n    }\n\n    /**\n     *\n     * BigCommercePayments Fastlane Card Component rendering method\n     *\n     */\n    private async initializePayPalPaymentComponent(): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const billingAddress = state.getBillingAddressOrThrow();\n        const phone = billingAddress.phone;\n        const fullName = `${billingAddress.firstName} ${billingAddress.lastName}`.trim();\n\n        const paypalFastlane = this.bigCommercePaymentsFastlaneUtils.getPayPalFastlaneOrThrow();\n\n        const cardComponentOptions: PayPalFastlaneCardComponentOptions = {\n            fields: {\n                cardholderName: {\n                    prefill: fullName,\n                    enabled: true,\n                },\n                ...(phone && {\n                    phoneNumber: {\n                        prefill: phone,\n                    },\n                }),\n            },\n        };\n\n        this.paypalComponentMethods = await paypalFastlane.FastlaneCardComponent(\n            cardComponentOptions,\n        );\n    }\n\n    private renderPayPalPaymentComponent(container?: string): void {\n        const paypalComponentMethods = this.getPayPalComponentMethodsOrThrow();\n\n        if (!container) {\n            throw new InvalidArgumentError(\n                'Unable to render card component because \"container\" argument is not provided.',\n            );\n        }\n\n        paypalComponentMethods.render(container);\n    }\n\n    private getPayPalComponentMethodsOrThrow(): PayPalFastlaneCardComponentMethods {\n        if (!this.paypalComponentMethods) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.paypalComponentMethods;\n    }\n\n    /**\n     *\n     * Payment Payload preparation methods\n     *\n     */\n    private async prepareVaultedInstrumentPaymentPayload(\n        methodId: string,\n        paymentData: VaultedInstrument,\n    ): Promise<Payment<PayPalFastlanePaymentFormattedPayload>> {\n        const { instrumentId } = paymentData;\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n\n        const is3DSEnabled =\n            this.isBigcommercePaymentsFastlaneThreeDSAvailable() &&\n            paymentMethod.config.is3dsEnabled;\n\n        const nonce = is3DSEnabled ? await this.get3DSNonce(instrumentId) : instrumentId;\n\n        await this.createOrder(nonce);\n\n        return {\n            methodId,\n            paymentData: {\n                formattedPayload: {\n                    paypal_fastlane_token: {\n                        order_id: this.orderId,\n                        token: nonce,\n                    },\n                },\n            },\n        };\n    }\n\n    private async preparePaymentPayload(\n        methodId: string,\n        paymentData: OrderPaymentRequestBody['paymentData'],\n    ): Promise<Payment<PayPalFastlanePaymentFormattedPayload>> {\n        const state = this.paymentIntegrationService.getState();\n        const billingAddress = state.getBillingAddressOrThrow();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n\n        const fullName = `${billingAddress.firstName} ${billingAddress.lastName}`.trim();\n\n        const { getPaymentToken } = this.getPayPalComponentMethodsOrThrow();\n\n        const { id } = await getPaymentToken({\n            name: { fullName },\n            billingAddress:\n                this.bigCommercePaymentsFastlaneUtils.mapBcToPayPalAddress(billingAddress),\n        });\n\n        const is3DSEnabled =\n            this.isBigcommercePaymentsFastlaneThreeDSAvailable() &&\n            paymentMethod.config.is3dsEnabled;\n\n        const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n            isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n        const nonce = is3DSEnabled ? await this.get3DSNonce(id) : id;\n\n        await this.createOrder(nonce);\n\n        return {\n            methodId,\n            paymentData: {\n                ...paymentData,\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n                formattedPayload: {\n                    paypal_fastlane_token: {\n                        order_id: this.orderId,\n                        token: nonce,\n                    },\n                },\n            },\n        };\n    }\n\n    private async createOrder(id: string): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const cartId = state.getCartOrThrow().id;\n\n        if (this.methodId) {\n            const { orderId } = await this.bigCommercePaymentsRequestSender.createOrder(\n                this.methodId,\n                {\n                    cartId,\n                    fastlaneToken: id,\n                },\n            );\n\n            this.orderId = orderId;\n        }\n    }\n\n    /**\n     *\n     * 3DSecure methods\n     *\n     * */\n    private async get3DSNonce(nonce: string): Promise<string> {\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        const order = state.getOrderOrThrow();\n        const checkoutUrl = state.getStoreConfigOrThrow().links.checkoutLink;\n\n        const threeDomainSecureComponent = this.paypalFastlaneSdk?.ThreeDomainSecureClient;\n\n        if (!threeDomainSecureComponent) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        const threeDomainSecureParameters = {\n            amount: order.orderAmount.toFixed(2),\n            currency: cart.currency.code,\n            nonce,\n            threeDSRequested: this.threeDSVerificationMethod === TDSecureVerificationMethod.Always,\n            transactionContext: {\n                experience_context: {\n                    locale: 'en-US',\n                    return_url: checkoutUrl,\n                    cancel_url: checkoutUrl,\n                },\n            },\n        };\n\n        const isThreeDomainSecureEligible = await threeDomainSecureComponent.isEligible(\n            threeDomainSecureParameters,\n        );\n\n        if (\n            this.threeDSVerificationMethod === TDSecureVerificationMethod.Always &&\n            !isThreeDomainSecureEligible\n        ) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        if (isThreeDomainSecureEligible) {\n            const {\n                liabilityShift,\n                authenticationState,\n                nonce: threeDSNonce,\n            } = await threeDomainSecureComponent.show();\n\n            if (\n                liabilityShift === LiabilityShiftEnum.No ||\n                liabilityShift === LiabilityShiftEnum.Unknown ||\n                authenticationState === TDSecureAuthenticationState.Errored ||\n                authenticationState === TDSecureAuthenticationState.Cancelled\n            ) {\n                throw new PaymentMethodInvalidError();\n            }\n\n            if (\n                authenticationState === TDSecureAuthenticationState.Succeeded &&\n                [LiabilityShiftEnum.Yes, LiabilityShiftEnum.Possible].includes(liabilityShift)\n            ) {\n                return threeDSNonce;\n            }\n        }\n\n        return nonce;\n    }\n\n    /**\n     *\n     * BigCommercePayments Fastlane instrument change\n     *\n     */\n    private async handlePayPalStoredInstrumentChange(\n        methodId: string,\n    ): Promise<CardInstrument | undefined> {\n        const paypalAxoSdk = this.bigCommercePaymentsFastlaneUtils.getPayPalFastlaneOrThrow();\n\n        const { selectionChanged, selectedCard } = await paypalAxoSdk.profile.showCardSelector();\n\n        if (selectionChanged) {\n            const state = this.paymentIntegrationService.getState();\n            const paymentProviderCustomer = state.getPaymentProviderCustomer();\n            const paypalFastlaneCustomer = isPayPalFastlaneCustomer(paymentProviderCustomer)\n                ? paymentProviderCustomer\n                : {};\n\n            const selectedInstrument =\n                this.bigCommercePaymentsFastlaneUtils.mapPayPalToBcInstrument(\n                    methodId,\n                    selectedCard,\n                )[0];\n\n            await this.paymentIntegrationService.updatePaymentProviderCustomer({\n                ...paypalFastlaneCustomer,\n                instruments: [selectedInstrument],\n            });\n\n            return selectedInstrument;\n        }\n\n        return undefined;\n    }\n\n    /**\n     *\n     * Bigcommerce Payments Fastlane experiments handling\n     *\n     */\n    private isBigcommercePaymentsFastlaneThreeDSAvailable(): boolean {\n        const state = this.paymentIntegrationService.getState();\n        const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n\n        return isExperimentEnabled(features, 'PROJECT-7080.bcp_fastlane_three_ds');\n    }\n\n    private handleError(error: unknown): void {\n        if (\n            this.bigcommerce_payments_fastlane?.onError &&\n            typeof this.bigcommerce_payments_fastlane.onError === 'function'\n        ) {\n            this.bigcommerce_payments_fastlane.onError(error);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-fastlane/create-bigcommerce-payments-fastlane-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsFastlaneCustomerStrategy from './bigcommerce-payments-fastlane-customer-strategy';\nimport createBigCommercePaymentsFastlaneCustomerStrategy from './create-bigcommerce-payments-fastlane-customer-strategy';\n\ndescribe('createBigCommercePaymentsFastlaneCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePayments fastlane customer strategy', () => {\n        const strategy =\n            createBigCommercePaymentsFastlaneCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsFastlaneCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-fastlane/create-bigcommerce-payments-fastlane-customer-strategy.ts",
    "content": "import {\n    createBigCommercePaymentsFastlaneUtils,\n    createBigCommercePaymentsSdk,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsFastlaneCustomerStrategy from './bigcommerce-payments-fastlane-customer-strategy';\n\nconst createBigCommercePaymentsFastlaneCustomerStrategy: CustomerStrategyFactory<\n    BigCommercePaymentsFastlaneCustomerStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsFastlaneCustomerStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsSdk(),\n        createBigCommercePaymentsFastlaneUtils(),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsFastlaneCustomerStrategy, [\n    { id: 'bigcommerce_payments_fastlane' }, // this method id will be provided for users from test group\n    { id: 'bigcommerce_payments_creditcards' }, // this method id will be provided for users from control group\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-fastlane/create-bigcommerce-payments-fastlane-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsFastlanePaymentStrategy from './bigcommerce-payments-fastlane-payment-strategy';\nimport createBigCommercePaymentsFastlanePaymentStrategy from './create-bigcommerce-payments-fastlane-payment-strategy';\n\ndescribe('createBigCommercePaymentsAcceleratedCheckoutPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePayments accelerated checkout payment strategy', () => {\n        const strategy =\n            createBigCommercePaymentsFastlanePaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsFastlanePaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-fastlane/create-bigcommerce-payments-fastlane-payment-strategy.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    createBigCommercePaymentsFastlaneUtils,\n    createBigCommercePaymentsSdk,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsRequestSender from '../bigcommerce-payments-request-sender';\n\nimport BigCommercePaymentsFastlanePaymentStrategy from './bigcommerce-payments-fastlane-payment-strategy';\n\nconst createBigCommercePaymentsFastlanePaymentStrategy: PaymentStrategyFactory<\n    BigCommercePaymentsFastlanePaymentStrategy\n> = (paymentIntegrationService) => {\n    const { getHost } = paymentIntegrationService.getState();\n\n    return new BigCommercePaymentsFastlanePaymentStrategy(\n        paymentIntegrationService,\n        new BigCommercePaymentsRequestSender(createRequestSender({ host: getHost() })),\n        createBigCommercePaymentsSdk(),\n        createBigCommercePaymentsFastlaneUtils(),\n    );\n};\n\nexport default toResolvableModule(createBigCommercePaymentsFastlanePaymentStrategy, [\n    { id: 'bigcommerce_payments_fastlane' }, // BigCommercePayments Fastlane relates to 'bigcommerce_payments_fastlane' method id\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-integration-service.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BuyNowCartCreationError,\n    Cart,\n    Consignment,\n    MissingDataError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getBuyNowCartRequestBody,\n    getCart,\n    getConsignment,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsIntegrationService from './bigcommerce-payments-integration-service';\nimport BigCommercePaymentsRequestSender from './bigcommerce-payments-request-sender';\nimport BigCommercePaymentsScriptLoader from './bigcommerce-payments-script-loader';\nimport {\n    PayPalOrderStatus,\n    PayPalSDK,\n    StyleButtonColor,\n    StyleButtonLabel,\n    StyleButtonShape,\n} from './bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsOrderDetails,\n    getBigCommercePaymentsPaymentMethod,\n    getBillingAddressFromOrderDetails,\n    getPayPalSDKMock,\n    getShippingAddressFromOrderDetails,\n} from './mocks';\n\ndescribe('BigCommercePaymentsIntegrationService', () => {\n    let buyNowCart: Cart;\n    let cart: Cart;\n    let consignments: Consignment[];\n    let formPoster: FormPoster;\n    let requestSender: RequestSender;\n    let subject: BigCommercePaymentsIntegrationService;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let bigCommercePaymentsRequestSender: BigCommercePaymentsRequestSender;\n    let bigCommercePaymentsScriptLoader: BigCommercePaymentsScriptLoader;\n    let paypalSdk: PayPalSDK;\n\n    const defaultMethodId = 'bigcommerce_payments';\n    const defaultGatewayId = 'bigcommerce_payments_apms';\n    const mockedOrderId = 'order123';\n\n    beforeEach(() => {\n        buyNowCart = getBuyNowCart();\n        cart = getCart();\n        consignments = [getConsignment()];\n\n        paymentMethod = getBigCommercePaymentsPaymentMethod();\n        paypalSdk = getPayPalSDKMock();\n\n        formPoster = createFormPoster();\n        requestSender = createRequestSender();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        bigCommercePaymentsRequestSender = new BigCommercePaymentsRequestSender(requestSender);\n        bigCommercePaymentsScriptLoader = new BigCommercePaymentsScriptLoader(getScriptLoader());\n\n        subject = new BigCommercePaymentsIntegrationService(\n            formPoster,\n            paymentIntegrationService,\n            bigCommercePaymentsRequestSender,\n            bigCommercePaymentsScriptLoader,\n        );\n\n        const state = paymentIntegrationService.getState();\n\n        jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(paymentMethod);\n        jest.spyOn(state, 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(state, 'getConsignmentsOrThrow').mockReturnValue(consignments);\n\n        jest.spyOn(bigCommercePaymentsScriptLoader, 'getPayPalSDK').mockResolvedValue(paypalSdk);\n    });\n\n    it('creates an instance of the BigCommercePaymentsIntegrationService class', () => {\n        expect(subject).toBeInstanceOf(BigCommercePaymentsIntegrationService);\n    });\n\n    describe('#loadPayPalSdk', () => {\n        it('loads paypal sdk', async () => {\n            const output = await subject.loadPayPalSdk(defaultMethodId, undefined, false, false);\n\n            expect(bigCommercePaymentsScriptLoader.getPayPalSDK).toHaveBeenCalledWith(\n                paymentMethod,\n                cart.currency.code,\n                false,\n                false,\n            );\n            expect(output).toBe(paypalSdk);\n        });\n\n        it('loads paypal sdk with provided currency code', async () => {\n            const providedCurrencyCode = 'UAH';\n            const output = await subject.loadPayPalSdk(\n                defaultMethodId,\n                providedCurrencyCode,\n                false,\n                false,\n            );\n\n            expect(bigCommercePaymentsScriptLoader.getPayPalSDK).toHaveBeenCalledWith(\n                paymentMethod,\n                providedCurrencyCode,\n                false,\n                false,\n            );\n            expect(output).toBe(paypalSdk);\n        });\n    });\n\n    describe('#getPayPalSdkOrThrow', () => {\n        it('returns paypal sdk if it was loaded earlier', async () => {\n            await subject.loadPayPalSdk(defaultMethodId, undefined, false);\n\n            const output = subject.getPayPalSdkOrThrow();\n\n            expect(output).toBe(paypalSdk);\n        });\n\n        it('throws an error if paypal sdk is not defined', () => {\n            try {\n                subject.getPayPalSdkOrThrow();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n\n    describe('#createBuyNowCartOrThrow', () => {\n        it('throws an error there is no cart request body by calling callback from buyNowInitializeOptions', async () => {\n            const buyNowInitializeOptionsMock = {\n                getBuyNowCartRequestBody: jest.fn(),\n            };\n\n            try {\n                await subject.createBuyNowCartOrThrow(buyNowInitializeOptionsMock);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('successfully creates buy now cart', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockResolvedValue(buyNowCart);\n\n            const output = await subject.createBuyNowCartOrThrow({\n                getBuyNowCartRequestBody,\n            });\n\n            expect(output).toBe(buyNowCart);\n        });\n\n        it('throws an error if there is something went wrong during buy now cart creation process', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockImplementation(() =>\n                Promise.reject(new Error()),\n            );\n\n            try {\n                await subject.createBuyNowCartOrThrow({\n                    getBuyNowCartRequestBody,\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(BuyNowCartCreationError);\n            }\n        });\n    });\n\n    describe('#createOrder', () => {\n        it('successfully creates paypal order', async () => {\n            jest.spyOn(bigCommercePaymentsRequestSender, 'createOrder').mockResolvedValue({\n                orderId: mockedOrderId,\n                approveUrl: 'url.com',\n            });\n\n            const output = await subject.createOrder(defaultMethodId);\n\n            expect(bigCommercePaymentsRequestSender.createOrder).toHaveBeenCalledWith(\n                defaultMethodId,\n                {\n                    cartId: cart.id,\n                },\n            );\n            expect(output).toBe(mockedOrderId);\n        });\n\n        it('successfully creates paypal order with provided instrument data', async () => {\n            jest.spyOn(bigCommercePaymentsRequestSender, 'createOrder').mockResolvedValue({\n                orderId: mockedOrderId,\n                approveUrl: 'url.com',\n            });\n\n            const vaultedInstrumentData = { instrumentId: 'vaultedInstrumentIdMock' };\n\n            const output = await subject.createOrder(defaultMethodId, vaultedInstrumentData);\n\n            expect(bigCommercePaymentsRequestSender.createOrder).toHaveBeenCalledWith(\n                defaultMethodId,\n                {\n                    cartId: cart.id,\n                    instrumentId: vaultedInstrumentData.instrumentId,\n                },\n            );\n            expect(output).toBe(mockedOrderId);\n        });\n    });\n\n    describe('#updateOrder', () => {\n        it('successfully updates order', async () => {\n            jest.spyOn(bigCommercePaymentsRequestSender, 'updateOrder').mockResolvedValue({\n                statusCode: 200,\n            });\n\n            await subject.updateOrder();\n\n            expect(bigCommercePaymentsRequestSender.updateOrder).toHaveBeenCalledWith({\n                availableShippingOptions: consignments[0].availableShippingOptions,\n                cartId: cart.id,\n                selectedShippingOption: consignments[0].selectedShippingOption,\n            });\n        });\n\n        it('successfully updates order when server side shipping callbacks is on', async () => {\n            jest.spyOn(bigCommercePaymentsRequestSender, 'updateOrder').mockResolvedValue({\n                statusCode: 200,\n            });\n\n            await subject.updateOrder(true);\n\n            expect(bigCommercePaymentsRequestSender.updateOrder).toHaveBeenCalledWith({\n                availableShippingOptions: [],\n                cartId: cart.id,\n                selectedShippingOption: null,\n            });\n        });\n\n        it('throws an error if something went wrong during order update process', async () => {\n            jest.spyOn(bigCommercePaymentsRequestSender, 'updateOrder').mockImplementation(() =>\n                Promise.reject(new Error()),\n            );\n\n            try {\n                await subject.updateOrder();\n            } catch (error) {\n                expect(error).toBeInstanceOf(RequestError);\n            }\n        });\n    });\n\n    describe('#getOrderStatus', () => {\n        it('successfully updates order', async () => {\n            jest.spyOn(bigCommercePaymentsRequestSender, 'getOrderStatus').mockResolvedValue({\n                status: PayPalOrderStatus.Approved,\n            });\n\n            await subject.getOrderStatus();\n\n            expect(bigCommercePaymentsRequestSender.getOrderStatus).toHaveBeenCalled();\n        });\n\n        it('calls getOrderStatus with proper data', async () => {\n            jest.spyOn(bigCommercePaymentsRequestSender, 'getOrderStatus').mockResolvedValue({\n                status: PayPalOrderStatus.Approved,\n            });\n\n            await subject.getOrderStatus('bigcommerce_payments_apms', {\n                params: { useMetaData: true },\n            });\n\n            expect(bigCommercePaymentsRequestSender.getOrderStatus).toHaveBeenCalledWith(\n                'bigcommerce_payments_apms',\n                {\n                    params: {\n                        useMetaData: true,\n                    },\n                },\n            );\n        });\n\n        it('throws an error if something went wrong during requesting order status', async () => {\n            jest.spyOn(bigCommercePaymentsRequestSender, 'getOrderStatus').mockImplementation(() =>\n                Promise.reject(new Error()),\n            );\n\n            try {\n                await subject.getOrderStatus();\n            } catch (error) {\n                expect(error).toBeInstanceOf(RequestError);\n            }\n        });\n    });\n\n    describe('#tokenizePayment', () => {\n        beforeEach(() => {\n            jest.spyOn(formPoster, 'postForm').mockImplementation(jest.fn);\n        });\n\n        it('throws an error if order id is not provided', () => {\n            try {\n                subject.tokenizePayment(defaultMethodId);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('successfully posts the form data', () => {\n            subject.tokenizePayment(defaultMethodId, mockedOrderId);\n\n            expect(formPoster.postForm).toHaveBeenCalledWith('/checkout.php', {\n                payment_type: 'paypal',\n                action: 'set_external_checkout',\n                provider: defaultMethodId,\n                order_id: mockedOrderId,\n            });\n        });\n\n        it('successfully posts the form data with buy now cart id', () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                buyNowCart,\n            );\n\n            subject.tokenizePayment(defaultMethodId, mockedOrderId);\n\n            expect(formPoster.postForm).toHaveBeenCalledWith('/checkout.php', {\n                payment_type: 'paypal',\n                action: 'set_external_checkout',\n                provider: defaultMethodId,\n                order_id: mockedOrderId,\n                cart_id: buyNowCart.id,\n            });\n        });\n    });\n\n    describe('#submitPayment', () => {\n        it('successfully submits payment', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n            const paymentDataMock = {\n                formattedPayload: {\n                    vault_payment_instrument: null,\n                    set_as_default_stored_instrument: null,\n                    device_info: null,\n                    method_id: defaultMethodId,\n                    paypal_account: {\n                        order_id: mockedOrderId,\n                    },\n                },\n            };\n\n            await subject.submitPayment(defaultMethodId, mockedOrderId);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: defaultMethodId,\n                paymentData: paymentDataMock,\n            });\n        });\n\n        it('successfully submits payment with provided gateway', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n            const paymentDataMock = {\n                formattedPayload: {\n                    vault_payment_instrument: null,\n                    set_as_default_stored_instrument: null,\n                    device_info: null,\n                    method_id: defaultMethodId,\n                    paypal_account: {\n                        order_id: mockedOrderId,\n                    },\n                },\n            };\n\n            await subject.submitPayment(defaultMethodId, mockedOrderId, defaultGatewayId);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: defaultMethodId,\n                paymentData: paymentDataMock,\n                gatewayId: defaultGatewayId,\n            });\n        });\n    });\n\n    describe('#getShippingOptionOrThrow', () => {\n        it('returns selected shipping option', () => {\n            const consignment = getConsignment();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getConsignmentsOrThrow',\n            ).mockReturnValue([consignment]);\n\n            const output = subject.getShippingOptionOrThrow(consignment.selectedShippingOption?.id);\n\n            expect(output).toStrictEqual(consignment.selectedShippingOption || {});\n        });\n\n        it('returns recommended shipping option if there is no selected ones', () => {\n            const recommendedShippingOption = {\n                ...getShippingOption(),\n                isRecommended: true,\n            };\n\n            const consignment = {\n                ...getConsignment(),\n                availableShippingOptions: [recommendedShippingOption],\n                selectedShippingOption: {\n                    additionalDescription: 'string',\n                    description: 'string',\n                    id: 'string',\n                    isRecommended: true,\n                    imageUrl: 'string',\n                    cost: 12,\n                    transitTime: 'string',\n                    type: 'string',\n                },\n            };\n\n            const updatedConsignment = {\n                ...consignment,\n                selectedShippingOption: recommendedShippingOption,\n            };\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignmentsOrThrow')\n                .mockReturnValueOnce([consignment])\n                .mockReturnValue([updatedConsignment]);\n\n            const output = subject.getShippingOptionOrThrow();\n\n            expect(output).toBe(recommendedShippingOption);\n        });\n\n        it('returns first available shipping option if there is no recommended or selected options', () => {\n            const firstShippingOption = {\n                ...getShippingOption(),\n                id: '1',\n            };\n\n            const secondShippingOption = {\n                ...getShippingOption(),\n                id: '2',\n            };\n\n            const consignment = {\n                ...getConsignment(),\n                availableShippingOptions: [firstShippingOption, secondShippingOption],\n                selectedShippingOption: {\n                    additionalDescription: 'string',\n                    description: 'string',\n                    id: '111',\n                    isRecommended: true,\n                    imageUrl: 'string',\n                    cost: 12,\n                    transitTime: 'string',\n                    type: 'string',\n                },\n            };\n\n            const updatedConsignment = {\n                ...consignment,\n                selectedShippingOption: firstShippingOption,\n            };\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignmentsOrThrow')\n                .mockReturnValueOnce([consignment])\n                .mockReturnValue([updatedConsignment]);\n\n            const output = subject.getShippingOptionOrThrow();\n\n            expect(output).toBe(firstShippingOption);\n        });\n    });\n\n    describe('#getAddress', () => {\n        it('successfully returns valid address', () => {\n            const paypalOrderDetails = getBigCommercePaymentsOrderDetails();\n            const address = {\n                firstName: paypalOrderDetails.payer.name.given_name,\n                lastName: paypalOrderDetails.payer.name.surname,\n                email: paypalOrderDetails.payer.email_address,\n                phone: '',\n                company: '',\n                address1: paypalOrderDetails.payer.address.address_line_1,\n                address2: '',\n                city: paypalOrderDetails.payer.address.admin_area_2,\n                countryCode: paypalOrderDetails.payer.address.country_code,\n                postalCode: paypalOrderDetails.payer.address.postal_code,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalOrderDetails.payer.address.admin_area_1,\n                customFields: [],\n            };\n\n            const output = subject.getAddress(address);\n\n            expect(output).toStrictEqual({\n                firstName: paypalOrderDetails.payer.name.given_name,\n                lastName: paypalOrderDetails.payer.name.surname,\n                email: paypalOrderDetails.payer.email_address,\n                phone: '',\n                company: '',\n                address1: paypalOrderDetails.payer.address.address_line_1,\n                address2: '',\n                city: paypalOrderDetails.payer.address.admin_area_2,\n                countryCode: paypalOrderDetails.payer.address.country_code,\n                postalCode: paypalOrderDetails.payer.address.postal_code,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalOrderDetails.payer.address.admin_area_1,\n                customFields: [],\n            });\n        });\n\n        it('successfully returns valid address with phone number filled in', () => {\n            const paypalOrderDetails = getBigCommercePaymentsOrderDetails();\n            const address = {\n                firstName: paypalOrderDetails.payer.name.given_name,\n                lastName: paypalOrderDetails.payer.name.surname,\n                email: paypalOrderDetails.payer.email_address,\n                phone: '555',\n                company: '',\n                address1: paypalOrderDetails.payer.address.address_line_1,\n                address2: '',\n                city: paypalOrderDetails.payer.address.admin_area_2,\n                countryCode: paypalOrderDetails.payer.address.country_code,\n                postalCode: paypalOrderDetails.payer.address.postal_code,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalOrderDetails.payer.address.admin_area_1,\n                customFields: [],\n            };\n\n            const output = subject.getAddress(address);\n\n            expect(output).toStrictEqual({\n                firstName: paypalOrderDetails.payer.name.given_name,\n                lastName: paypalOrderDetails.payer.name.surname,\n                email: paypalOrderDetails.payer.email_address,\n                phone: '555',\n                company: '',\n                address1: paypalOrderDetails.payer.address.address_line_1,\n                address2: '',\n                city: paypalOrderDetails.payer.address.admin_area_2,\n                countryCode: paypalOrderDetails.payer.address.country_code,\n                postalCode: paypalOrderDetails.payer.address.postal_code,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalOrderDetails.payer.address.admin_area_1,\n                customFields: [],\n            });\n        });\n    });\n\n    describe('#getBillingAddressFromOrderDetails', () => {\n        it('successfully returns valid billing address from the orderDetails data', () => {\n            const paypalOrderDetails = getBigCommercePaymentsOrderDetails();\n\n            const output = subject.getBillingAddressFromOrderDetails(paypalOrderDetails);\n\n            expect(output).toStrictEqual(getBillingAddressFromOrderDetails());\n        });\n\n        it('successfully returns empty string in phone number', () => {\n            const paypalOrderDetails = {\n                ...getBigCommercePaymentsOrderDetails(),\n                payer: {\n                    ...getBigCommercePaymentsOrderDetails().payer,\n                    phone: {\n                        phone_number: {\n                            national_number: '',\n                        },\n                    },\n                },\n            };\n\n            const output = subject.getBillingAddressFromOrderDetails(paypalOrderDetails);\n\n            expect(output.phone).toBe('');\n        });\n\n        it('successfully returns correct phone number', () => {\n            const paypalOrderDetails = {\n                ...getBigCommercePaymentsOrderDetails(),\n                payer: {\n                    ...getBigCommercePaymentsOrderDetails().payer,\n                    phone: {\n                        phone_number: {\n                            national_number: '555333',\n                        },\n                    },\n                },\n            };\n\n            const output = subject.getBillingAddressFromOrderDetails(paypalOrderDetails);\n\n            expect(output.phone).toBe('555333');\n        });\n    });\n\n    describe('#getShippingAddressFromOrderDetails', () => {\n        it('successfully returns valid shipping address from the orderDetails data', () => {\n            const paypalOrderDetails = getBigCommercePaymentsOrderDetails();\n\n            const output = subject.getShippingAddressFromOrderDetails(paypalOrderDetails);\n\n            expect(output).toStrictEqual(getShippingAddressFromOrderDetails());\n        });\n    });\n\n    describe('#getValidButtonStyle', () => {\n        it('returns valid button style', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: 55,\n                shape: StyleButtonShape.rect,\n            };\n\n            const expects = {\n                ...stylesMock,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns button style without shape if shape is not valid', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: 55,\n                shape: 'ellipse' as StyleButtonShape,\n            };\n\n            const expects = {\n                ...stylesMock,\n                shape: undefined,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns button style without color if color is not valid', () => {\n            const stylesMock = {\n                color: 'red' as StyleButtonColor,\n                height: 55,\n            };\n\n            const expects = {\n                ...stylesMock,\n                color: undefined,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns button style without label if label is not valid', () => {\n            const stylesMock = {\n                height: 55,\n                label: 'label' as StyleButtonLabel,\n            };\n\n            const expects = {\n                ...stylesMock,\n                label: undefined,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns styles with updated height if height value is bigger than expected', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: 110,\n                shape: StyleButtonShape.rect,\n            };\n\n            const expects = {\n                ...stylesMock,\n                height: 55,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns styles with updated height if height value is less than expected', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: 10,\n                shape: StyleButtonShape.rect,\n            };\n\n            const expects = {\n                ...stylesMock,\n                height: 25,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns styles with default height if height value not provided', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: undefined,\n                shape: StyleButtonShape.rect,\n            };\n\n            const expects = {\n                ...stylesMock,\n                height: 40,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n    });\n\n    describe('#removeElement', () => {\n        it('removed element from dom', () => {\n            const bigCommercePaymentsButtonContainerId = 'bigCommercePaymentsButtonContainer';\n\n            const paypalButtonElement = document.createElement('div');\n\n            paypalButtonElement.id = bigCommercePaymentsButtonContainerId;\n\n            document.body.appendChild(paypalButtonElement);\n\n            const element = document.getElementById(bigCommercePaymentsButtonContainerId);\n\n            expect(element).toBeDefined();\n\n            subject.removeElement(bigCommercePaymentsButtonContainerId);\n\n            const computedStyle = getComputedStyle(element as Element);\n\n            expect(computedStyle.getPropertyValue('display')).toBe('none');\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-integration-service.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { isNil, omitBy } from 'lodash';\n\nimport {\n    BillingAddressRequestBody,\n    BuyNowCartCreationError,\n    Cart,\n    CartSource,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n    PaymentMethodClientUnavailableError,\n    RequestError,\n    RequestOptions,\n    ShippingOption,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsRequestSender from './bigcommerce-payments-request-sender';\nimport BigCommercePaymentsScriptLoader from './bigcommerce-payments-script-loader';\nimport {\n    BigCommercePaymentsInitializationData,\n    PayPalButtonStyleOptions,\n    PayPalBuyNowInitializeOptions,\n    PayPalCreateOrderCardFieldsResponse,\n    PayPalCreateOrderRequestBody,\n    PayPalOrderDetails,\n    PayPalOrderStatus,\n    PayPalSDK,\n    StyleButtonColor,\n    StyleButtonLabel,\n    StyleButtonShape,\n} from './bigcommerce-payments-types';\n\nexport default class BigCommercePaymentsIntegrationService {\n    private paypalSdk?: PayPalSDK;\n\n    constructor(\n        private formPoster: FormPoster,\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsRequestSender: BigCommercePaymentsRequestSender,\n        private bigCommercePaymentsScriptLoader: BigCommercePaymentsScriptLoader,\n    ) {}\n\n    /**\n     *\n     * PayPalSDK methods\n     *\n     */\n    async loadPayPalSdk(\n        methodId: string,\n        providedCurrencyCode?: string,\n        initializesOnCheckoutPage?: boolean,\n        forceLoad?: boolean,\n    ): Promise<PayPalSDK | undefined> {\n        const state = this.paymentIntegrationService.getState();\n        const currencyCode = providedCurrencyCode || state.getCartOrThrow().currency.code;\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n\n        this.paypalSdk = await this.bigCommercePaymentsScriptLoader.getPayPalSDK(\n            paymentMethod,\n            currencyCode,\n            initializesOnCheckoutPage,\n            forceLoad,\n        );\n\n        return this.paypalSdk;\n    }\n\n    getPayPalSdkOrThrow(): PayPalSDK {\n        if (!this.paypalSdk) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.paypalSdk;\n    }\n\n    /**\n     *\n     * Buy Now cart creation methods\n     *\n     */\n    async createBuyNowCartOrThrow(\n        buyNowInitializeOptions: PayPalBuyNowInitializeOptions,\n    ): Promise<Cart> {\n        const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n        if (!cartRequestBody) {\n            throw new MissingDataError(MissingDataErrorType.MissingCart);\n        }\n\n        try {\n            return await this.paymentIntegrationService.createBuyNowCart(cartRequestBody);\n        } catch (error) {\n            throw new BuyNowCartCreationError();\n        }\n    }\n\n    /**\n     *\n     * Order methods\n     *\n     */\n    async createOrder(\n        providerId: string,\n        requestBody?: Partial<PayPalCreateOrderRequestBody>,\n    ): Promise<string> {\n        const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n        const { orderId } = await this.bigCommercePaymentsRequestSender.createOrder(providerId, {\n            cartId,\n            ...requestBody,\n        });\n\n        return orderId;\n    }\n\n    async createOrderCardFields(\n        providerId: string,\n        requestBody?: Partial<PayPalCreateOrderRequestBody>,\n    ): Promise<PayPalCreateOrderCardFieldsResponse> {\n        const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n        const { orderId, setupToken } = await this.bigCommercePaymentsRequestSender.createOrder(\n            providerId,\n            {\n                cartId,\n                ...requestBody,\n            },\n        );\n\n        return { orderId, ...(setupToken ? { setupToken } : {}) };\n    }\n\n    async updateOrder(isServerSideShippingCallbacksEnabled?: boolean): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        let consignment;\n\n        if (!isServerSideShippingCallbacksEnabled) {\n            consignment = state.getConsignmentsOrThrow()[0];\n        }\n\n        try {\n            await this.bigCommercePaymentsRequestSender.updateOrder({\n                availableShippingOptions: isServerSideShippingCallbacksEnabled\n                    ? []\n                    : consignment?.availableShippingOptions,\n                cartId: cart.id,\n                selectedShippingOption: isServerSideShippingCallbacksEnabled\n                    ? null\n                    : consignment?.selectedShippingOption,\n            });\n        } catch (_error) {\n            throw new RequestError();\n        }\n    }\n\n    async getOrderStatus(methodId?: string, options?: RequestOptions): Promise<PayPalOrderStatus> {\n        try {\n            const { status } = await this.bigCommercePaymentsRequestSender.getOrderStatus(\n                methodId,\n                options,\n            );\n\n            return status;\n        } catch (_error) {\n            throw new RequestError();\n        }\n    }\n\n    /**\n     *\n     * Payment submitting and tokenizing methods\n     *\n     */\n    tokenizePayment(methodId: string, orderId?: string): void {\n        const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n        if (!orderId) {\n            throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n        }\n\n        return this.formPoster.postForm('/checkout.php', {\n            payment_type: 'paypal',\n            action: 'set_external_checkout',\n            provider: methodId,\n            order_id: orderId,\n            ...(cart.source === CartSource.BuyNow && { cart_id: cart.id }),\n        });\n    }\n\n    async submitPayment(methodId: string, orderId: string, gatewayId?: string): Promise<void> {\n        const paymentData = {\n            formattedPayload: {\n                vault_payment_instrument: null,\n                set_as_default_stored_instrument: null,\n                device_info: null,\n                method_id: methodId,\n                paypal_account: {\n                    order_id: orderId,\n                },\n            },\n        };\n\n        await this.paymentIntegrationService.submitPayment({\n            methodId,\n            paymentData,\n            ...(gatewayId ? { gatewayId } : {}),\n        });\n    }\n\n    /**\n     *\n     * Shipping options methods\n     *\n     */\n    getShippingOptionOrThrow(selectedShippingOptionId?: string): ShippingOption {\n        const state = this.paymentIntegrationService.getState();\n        const consignment = state.getConsignmentsOrThrow()[0];\n\n        const availableShippingOptions = consignment.availableShippingOptions || [];\n\n        const recommendedShippingOption = availableShippingOptions.find(\n            (option) => option.isRecommended,\n        );\n\n        const selectedShippingOption = selectedShippingOptionId\n            ? availableShippingOptions.find((option) => option.id === selectedShippingOptionId)\n            : availableShippingOptions.find(\n                  (option) => option.id === consignment.selectedShippingOption?.id,\n              );\n\n        const shippingOptionToSelect =\n            selectedShippingOption || recommendedShippingOption || availableShippingOptions[0];\n\n        if (!shippingOptionToSelect) {\n            throw new Error(\"Your order can't be shipped to this address\");\n        }\n\n        return shippingOptionToSelect;\n    }\n\n    /**\n     *\n     * Address transforming methods\n     *\n     */\n    getAddress(address?: Partial<BillingAddressRequestBody>): BillingAddressRequestBody {\n        return {\n            firstName: address?.firstName || '',\n            lastName: address?.lastName || '',\n            email: address?.email || '',\n            phone: address?.phone || '',\n            company: '',\n            address1: address?.address1 || '',\n            address2: address?.address2 || '',\n            city: address?.city || '',\n            countryCode: address?.countryCode || '',\n            postalCode: address?.postalCode || '',\n            stateOrProvince: '',\n            stateOrProvinceCode: address?.stateOrProvinceCode || '',\n            customFields: [],\n        };\n    }\n\n    getBillingAddressFromOrderDetails({ payer }: PayPalOrderDetails): BillingAddressRequestBody {\n        return this.getAddress({\n            firstName: payer.name.given_name,\n            lastName: payer.name.surname,\n            email: payer.email_address,\n            address1: payer.address.address_line_1,\n            address2: payer.address.address_line_2,\n            city: payer.address.admin_area_2,\n            countryCode: payer.address.country_code,\n            postalCode: payer.address.postal_code,\n            stateOrProvinceCode: payer.address.admin_area_1,\n            phone: payer.phone?.phone_number?.national_number,\n        });\n    }\n\n    getShippingAddressFromOrderDetails(\n        orderDetails: PayPalOrderDetails,\n    ): BillingAddressRequestBody {\n        const { payer, purchase_units } = orderDetails;\n        const {\n            address,\n            name: { full_name },\n        } = purchase_units[0].shipping;\n\n        const [firstName, ...lastName] = full_name.split(' ');\n\n        return this.getAddress({\n            firstName,\n            lastName: lastName.join(' '),\n            email: payer.email_address,\n            address1: address.address_line_1,\n            address2: address.address_line_2,\n            city: address.admin_area_2,\n            countryCode: address.country_code,\n            postalCode: address.postal_code,\n            stateOrProvinceCode: address.admin_area_1,\n        });\n    }\n\n    /**\n     *\n     * Buttons style methods\n     *\n     */\n    getValidButtonStyle(style?: PayPalButtonStyleOptions): PayPalButtonStyleOptions {\n        const { color, height, label, shape } = style || {};\n\n        const validStyles = {\n            color: color && StyleButtonColor[color] ? color : undefined,\n            height: this.getValidHeight(height),\n            label: label && StyleButtonLabel[label] ? label : undefined,\n            shape: shape && StyleButtonShape[shape] ? shape : undefined,\n        };\n\n        return omitBy(validStyles, isNil);\n    }\n\n    getValidHeight(height?: number): number {\n        const defaultHeight = 40;\n        const minHeight = 25;\n        const maxHeight = 55;\n\n        if (!height || typeof height !== 'number') {\n            return defaultHeight;\n        }\n\n        if (height > maxHeight) {\n            return maxHeight;\n        }\n\n        if (height < minHeight) {\n            return minHeight;\n        }\n\n        return height;\n    }\n\n    /**\n     *\n     * Utils methods\n     *\n     */\n    removeElement(elementId?: string): void {\n        const element = elementId && document.getElementById(elementId);\n\n        if (element) {\n            // For now this is a temporary solution, further removeElement method will be removed\n            element.style.display = 'none';\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/bigcommerce-payments-paylater-button-initialize-options.ts",
    "content": "import {\n    PayPalButtonStyleOptions,\n    PayPalBuyNowInitializeOptions,\n} from '../bigcommerce-payments-types';\n\nexport default interface BigCommercePaymentsPayLaterButtonInitializeOptions {\n    /**\n     * A set of styling options for the checkout button.\n     */\n    style?: PayPalButtonStyleOptions;\n\n    /**\n     * The option that used to initialize a PayPal script with provided currency code.\n     */\n    currencyCode?: string;\n\n    /**\n     * The options that are required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\n\n    /**\n     * A callback that gets called when payment complete on paypal side.\n     */\n    onComplete?(): void;\n\n    /**\n     *\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\n     *\n     */\n    onEligibilityFailure?(): void;\n}\n\nexport interface WithBigCommercePaymentsPayLaterButtonInitializeOptions {\n    bigcommerce_payments_paylater?: BigCommercePaymentsPayLaterButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/bigcommerce-payments-paylater-button-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    Cart,\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getBuyNowCartRequestBody,\n    getCart,\n    getConsignment,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsHostWindow,\n    PayPalSDK,\n} from '../bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsIntegrationServiceMock,\n    getBigCommercePaymentsOrderDetails,\n    getBigCommercePaymentsPaymentMethod,\n    getBillingAddressFromOrderDetails,\n    getPayPalSDKMock,\n    getShippingAddressFromOrderDetails,\n} from '../mocks';\n\nimport BigCommercePaymentsPayLaterButtonInitializeOptions from './bigcommerce-payments-paylater-button-initialize-options';\nimport BigCommercePaymentsPayLaterButtonStrategy from './bigcommerce-payments-paylater-button-strategy';\n\ndescribe('BigCommercePaymentsPayLaterButtonStrategy', () => {\n    let buyNowCart: Cart;\n    let cart: Cart;\n    let eventEmitter: EventEmitter;\n    let strategy: BigCommercePaymentsPayLaterButtonStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalButtonElement: HTMLDivElement;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n    let paypalSdk: PayPalSDK;\n\n    const defaultMethodId = 'bigcommerce_payments_paylater';\n    const defaultButtonContainerId = 'bigcommerce-payments-paylater-button-mock-id';\n    const paypalOrderId = 'ORDER_ID';\n\n    const buyNowCartRequestBody = getBuyNowCartRequestBody();\n\n    const buyNowBigCommercePaymentsPayLaterOptions: BigCommercePaymentsPayLaterButtonInitializeOptions =\n        {\n            buyNowInitializeOptions: {\n                getBuyNowCartRequestBody: jest.fn().mockReturnValue(buyNowCartRequestBody),\n            },\n            currencyCode: 'USD',\n            style: {\n                height: 45,\n            },\n            onComplete: jest.fn(),\n        };\n\n    const buyNowInitializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        bigcommerce_payments_paylater: buyNowBigCommercePaymentsPayLaterOptions,\n    };\n\n    const bigCommercePaymentsPayLaterOptions: BigCommercePaymentsPayLaterButtonInitializeOptions = {\n        style: {\n            height: 45,\n        },\n        onComplete: jest.fn(),\n        onEligibilityFailure: jest.fn(),\n    };\n\n    const initializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        bigcommerce_payments_paylater: bigCommercePaymentsPayLaterOptions,\n    };\n\n    const paypalShippingAddressPayloadMock = {\n        city: 'New York',\n        countryCode: 'US',\n        postalCode: '07564',\n        state: 'New York',\n    };\n\n    const paypalSelectedShippingOptionPayloadMock = {\n        amount: {\n            currency_code: 'USD',\n            value: '100',\n        },\n        id: '1',\n        label: 'Free shipping',\n        selected: true,\n        type: 'type_shipping',\n    };\n\n    beforeEach(() => {\n        buyNowCart = getBuyNowCart();\n        cart = getCart();\n\n        eventEmitter = new EventEmitter();\n\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n        paymentMethod = getBigCommercePaymentsPaymentMethod();\n        paypalSdk = getPayPalSDKMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new BigCommercePaymentsPayLaterButtonStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n        );\n\n        paypalButtonElement = document.createElement('div');\n        paypalButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(paypalButtonElement);\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService, 'loadDefaultCheckout').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paymentIntegrationService, 'selectShippingOption').mockImplementation(jest.fn());\n\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockReturnValue(\n            Promise.resolve(paypalSdk),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'createBuyNowCartOrThrow',\n        ).mockReturnValue(Promise.resolve(buyNowCart));\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'updateOrder').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'tokenizePayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'submitPayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'removeElement').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'getBillingAddressFromOrderDetails',\n        ).mockReturnValue(getBillingAddressFromOrderDetails());\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'getShippingAddressFromOrderDetails',\n        ).mockReturnValue(getShippingAddressFromOrderDetails());\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'getShippingOptionOrThrow',\n        ).mockReturnValue(getShippingOption());\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: BigCommercePaymentsButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on(\n                    'onClick',\n                    // eslint-disable-next-line @typescript-eslint/no-misused-promises\n                    async (jestSuccessExpectationsCallback, jestFailureExpectationsCallback) => {\n                        try {\n                            if (options.onClick) {\n                                await options.onClick(\n                                    { fundingSource: 'paypal' },\n                                    {\n                                        reject: jest.fn(),\n                                        resolve: jest.fn(),\n                                    },\n                                );\n\n                                if (\n                                    jestSuccessExpectationsCallback &&\n                                    typeof jestSuccessExpectationsCallback === 'function'\n                                ) {\n                                    jestSuccessExpectationsCallback();\n                                }\n                            }\n                        } catch (error) {\n                            if (\n                                jestFailureExpectationsCallback &&\n                                typeof jestFailureExpectationsCallback === 'function'\n                            ) {\n                                jestFailureExpectationsCallback(error);\n                            }\n                        }\n                    },\n                );\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: paypalOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onCancel', () => {\n                    if (options.onCancel) {\n                        options.onCancel();\n                    }\n                });\n\n                eventEmitter.on('onShippingAddressChange', () => {\n                    if (options.onShippingAddressChange) {\n                        options.onShippingAddressChange({\n                            orderId: paypalOrderId,\n                            shippingAddress: paypalShippingAddressPayloadMock,\n                        });\n                    }\n                });\n\n                eventEmitter.on('onShippingOptionsChange', () => {\n                    if (options.onShippingOptionsChange) {\n                        options.onShippingOptionsChange({\n                            orderId: paypalOrderId,\n                            selectedShippingOption: paypalSelectedShippingOptionPayloadMock,\n                        });\n                    }\n                });\n\n                return {\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                    close: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BigCommercePaymentsHostWindow).paypal;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(paypalButtonElement);\n        }\n    });\n\n    it('creates an instance of the BigCommercePayments PayLater checkout button strategy', () => {\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsPayLaterButtonStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if containerId is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_paylater is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_paylater.currencyCode is not provided (for buyNowFlow only)', async () => {\n            const { currencyCode, ...rest } = buyNowBigCommercePaymentsPayLaterOptions;\n\n            const newInitializationOptions = {\n                ...buyNowInitializationOptions,\n                bigcommerce_payments_paylater: rest,\n            };\n\n            try {\n                await strategy.initialize(newInitializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if provided buyNow callback is not a function is not provided (for buyNowFlow only)', async () => {\n            const { buyNowInitializeOptions, ...rest } = buyNowBigCommercePaymentsPayLaterOptions;\n\n            const newInitializationOptions = {\n                ...buyNowInitializationOptions,\n                bigcommerce_payments_paylater: {\n                    ...rest,\n                    buyNowInitializeOptions: {\n                        getBuyNowCartRequestBody: 'string',\n                    },\n                },\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(newInitializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads default checkout', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n\n        it('does not load default checkout for Buy Now flow', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk script', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n                cart.currency.code,\n                false,\n            );\n        });\n\n        it('loads paypal sdk script with provided currency code (Buy Now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n                buyNowBigCommercePaymentsPayLaterOptions.currencyCode,\n                false,\n            );\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('initializes PayLater button to render (default flow)', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: bigCommercePaymentsPayLaterOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('initializes PayPal Credit button to render if PayPal PayLater is not eligible', async () => {\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                (options: BigCommercePaymentsButtonsOptions) => {\n                    return {\n                        render: jest.fn(),\n                        isEligible: jest.fn(() => {\n                            return options.fundingSource === paypalSdk.FUNDING.CREDIT;\n                        }),\n                        close: jest.fn(),\n                    };\n                },\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.CREDIT,\n                style: bigCommercePaymentsPayLaterOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('initializes PayLater button to render (buy now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: bigCommercePaymentsPayLaterOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n                onCancel: expect.any(Function),\n            });\n        });\n\n        it('initializes PayLater button to render (with shipping options feature enabled)', async () => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: bigCommercePaymentsPayLaterOptions.style,\n                createOrder: expect.any(Function),\n                onShippingAddressChange: expect.any(Function),\n                onShippingOptionsChange: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('renders PayLater button if it is eligible', async () => {\n            const renderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => true),\n                render: renderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(renderMock).toHaveBeenCalled();\n        });\n\n        it('calls onEligibilityFailure callback when PayLater button is not eligible', async () => {\n            const renderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: renderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsPayLaterOptions.onEligibilityFailure).toHaveBeenCalled();\n            expect(renderMock).not.toHaveBeenCalled();\n        });\n\n        it('removes PayLater button container if the button is not eligible', async () => {\n            const renderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: renderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultButtonContainerId,\n            );\n        });\n    });\n\n    describe('#createOrder', () => {\n        it('creates an order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_payments_paylater',\n            );\n        });\n    });\n\n    describe('#handleClick', () => {\n        beforeEach(() => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n                Promise.resolve(buyNowCart),\n            );\n            jest.spyOn(paymentIntegrationService, 'loadCheckout');\n        });\n\n        it('creates buy now cart on button click', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(\n                bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow,\n            ).toHaveBeenCalled();\n        });\n\n        it('loads checkout related to buy now cart on button click', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadCheckout).toHaveBeenCalledWith(buyNowCart.id);\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        describe('default flow', () => {\n            it('tokenizes payment on paypal approve', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(bigCommercePaymentsIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                    defaultMethodId,\n                    paypalOrderId,\n                );\n            });\n        });\n\n        describe('shipping options feature flow', () => {\n            const paypalOrderDetails = getBigCommercePaymentsOrderDetails();\n\n            beforeEach(() => {\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: BigCommercePaymentsButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: paypalOrderId },\n                                    {\n                                        order: {\n                                            get: () => Promise.resolve(paypalOrderDetails),\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                            close: jest.fn(),\n                        };\n                    },\n                );\n\n                const paymentMethodWithShippingOptionsFeature = {\n                    ...paymentMethod,\n                    initializationData: {\n                        ...paymentMethod.initializationData,\n                        isHostedCheckoutEnabled: true,\n                    },\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n            });\n\n            it('takes order details data from paypal', async () => {\n                const getOrderActionMock = jest.fn();\n\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: BigCommercePaymentsButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: paypalOrderId },\n                                    {\n                                        order: {\n                                            get: getOrderActionMock,\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                            close: jest.fn(),\n                        };\n                    },\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(getOrderActionMock).toHaveBeenCalled();\n            });\n\n            it('updates billing address with valid customers data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getBigCommercePaymentsOrderDetails());\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                    getBillingAddressFromOrderDetails(),\n                );\n            });\n\n            it('updates shipping address with valid customers data if physical items are available in the cart', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getBigCommercePaymentsOrderDetails());\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(\n                    getShippingAddressFromOrderDetails(),\n                );\n            });\n\n            it('submits BC order with provided methodId', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    {},\n                    {\n                        params: {\n                            methodId: initializationOptions.methodId,\n                        },\n                    },\n                );\n            });\n\n            it('submits BC payment to update BC order data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(bigCommercePaymentsIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    defaultMethodId,\n                    paypalOrderId,\n                );\n            });\n        });\n    });\n\n    describe('#onShippingAddressChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('updates billing and shipping address with data returned from PayPal', async () => {\n            const address = {\n                firstName: '',\n                lastName: '',\n                email: '',\n                phone: '',\n                company: '',\n                address1: '',\n                address2: '',\n                city: paypalShippingAddressPayloadMock.city,\n                countryCode: paypalShippingAddressPayloadMock.countryCode,\n                postalCode: paypalShippingAddressPayloadMock.postalCode,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalShippingAddressPayloadMock.state,\n                customFields: [],\n            };\n\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'getAddress').mockReturnValue(\n                address,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(address);\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(address);\n        });\n\n        it('selects shipping option after address update', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(\n                bigCommercePaymentsIntegrationService.getShippingOptionOrThrow,\n            ).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates an order after shipping option selection', async () => {\n            const consignment = getConsignment();\n\n            // INFO: lets imagine that it is a state that we get after consignmentActionCreator.selectShippingOption call\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getConsignmentsOrThrow',\n            ).mockReturnValue([consignment]);\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onShippingOptionsChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('selects shipping option', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(\n                bigCommercePaymentsIntegrationService.getShippingOptionOrThrow,\n            ).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('loads default checkout onCancel callback (buy now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n            eventEmitter.emit('onCancel');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/bigcommerce-payments-paylater-button-strategy.ts",
    "content": "import { BigCommercePaymentsInitializationData } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    CheckoutButtonInitializeOptions,\n    CheckoutButtonStrategy,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    ApproveCallbackActions,\n    ApproveCallbackPayload,\n    BigCommercePaymentsButtonsOptions,\n    PayPalBuyNowInitializeOptions,\n    ShippingAddressChangeCallbackPayload,\n    ShippingOptionChangeCallbackPayload,\n} from '../bigcommerce-payments-types';\n\nimport BigCommercePaymentsPayLaterButtonInitializeOptions, {\n    WithBigCommercePaymentsPayLaterButtonInitializeOptions,\n} from './bigcommerce-payments-paylater-button-initialize-options';\n\nexport default class BigCommercePaymentsPayLaterButtonStrategy implements CheckoutButtonStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\n    ) {}\n\n    async initialize(\n        options: CheckoutButtonInitializeOptions &\n            WithBigCommercePaymentsPayLaterButtonInitializeOptions,\n    ): Promise<void> {\n        const { bigcommerce_payments_paylater, containerId, methodId } = options;\n        const { buyNowInitializeOptions, currencyCode: providedCurrencyCode } =\n            bigcommerce_payments_paylater || {};\n\n        const isBuyNowFlow = !!buyNowInitializeOptions;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!containerId) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n            );\n        }\n\n        if (!bigcommerce_payments_paylater) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.`,\n            );\n        }\n\n        if (isBuyNowFlow && !providedCurrencyCode) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments_paylater.currencyCode\" argument is not provided.`,\n            );\n        }\n\n        if (\n            isBuyNowFlow &&\n            typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n        ) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments_paylater.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n            );\n        }\n\n        if (!isBuyNowFlow) {\n            // Info: default checkout should not be loaded for BuyNow flow,\n            // since there is no checkout session available for that.\n            await this.paymentIntegrationService.loadDefaultCheckout();\n        }\n\n        const state = this.paymentIntegrationService.getState();\n\n        // Info: we are using provided currency code for buy now cart,\n        // because checkout session is not available before buy now cart creation,\n        // hence application will throw an error on getCartOrThrow method call\n        const currencyCode = isBuyNowFlow\n            ? providedCurrencyCode\n            : state.getCartOrThrow().currency.code;\n\n        await this.bigCommercePaymentsIntegrationService.loadPayPalSdk(\n            methodId,\n            currencyCode,\n            false,\n        );\n\n        this.renderButton(containerId, methodId, bigcommerce_payments_paylater);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        containerId: string,\n        methodId: string,\n        bigcommerce_payments_paylater: BigCommercePaymentsPayLaterButtonInitializeOptions,\n    ): void {\n        const { buyNowInitializeOptions, style, onComplete, onEligibilityFailure } =\n            bigcommerce_payments_paylater;\n\n        const bigCommercePaymentsSdk =\n            this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n        const { isHostedCheckoutEnabled } = paymentMethod.initializationData || {};\n\n        const defaultCallbacks = {\n            createOrder: () =>\n                this.bigCommercePaymentsIntegrationService.createOrder(\n                    'bigcommerce_payments_paylater',\n                ),\n            onApprove: ({ orderID }: ApproveCallbackPayload) =>\n                this.bigCommercePaymentsIntegrationService.tokenizePayment(methodId, orderID),\n        };\n\n        const buyNowFlowCallbacks = {\n            onClick: () => this.handleClick(buyNowInitializeOptions),\n            onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n        };\n\n        const hostedCheckoutCallbacks = {\n            onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n                this.onShippingAddressChange(data),\n            onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n                this.onShippingOptionsChange(data),\n            onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n                this.onHostedCheckoutApprove(data, actions, methodId, onComplete),\n        };\n\n        const fundingSources = [\n            bigCommercePaymentsSdk.FUNDING.PAYLATER,\n            bigCommercePaymentsSdk.FUNDING.CREDIT,\n        ];\n        let hasRenderedSmartButton = false;\n\n        fundingSources.forEach((fundingSource) => {\n            if (!hasRenderedSmartButton) {\n                const buttonRenderOptions: BigCommercePaymentsButtonsOptions = {\n                    fundingSource,\n                    style: this.bigCommercePaymentsIntegrationService.getValidButtonStyle(style),\n                    ...defaultCallbacks,\n                    ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n                    ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n                };\n\n                const paypalButton = bigCommercePaymentsSdk.Buttons(buttonRenderOptions);\n\n                if (paypalButton.isEligible()) {\n                    paypalButton.render(`#${containerId}`);\n                    hasRenderedSmartButton = true;\n                } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n                    onEligibilityFailure();\n                }\n            }\n        });\n\n        if (!hasRenderedSmartButton) {\n            this.bigCommercePaymentsIntegrationService.removeElement(containerId);\n        }\n    }\n\n    private async handleClick(\n        buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n    ): Promise<void> {\n        if (buyNowInitializeOptions) {\n            const buyNowCart =\n                await this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(\n                    buyNowInitializeOptions,\n                );\n\n            await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n        }\n    }\n\n    private async onHostedCheckoutApprove(\n        data: ApproveCallbackPayload,\n        actions: ApproveCallbackActions,\n        methodId: string,\n        onComplete?: () => void,\n    ): Promise<boolean> {\n        if (!data.orderID) {\n            throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        const orderDetails = await actions.order.get();\n\n        try {\n            const billingAddress =\n                this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(\n                    orderDetails,\n                );\n\n            await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n            if (cart.lineItems.physicalItems.length > 0) {\n                const shippingAddress =\n                    this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(\n                        orderDetails,\n                    );\n\n                await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n                await this.bigCommercePaymentsIntegrationService.updateOrder();\n            }\n\n            await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n            await this.bigCommercePaymentsIntegrationService.submitPayment(methodId, data.orderID);\n\n            if (onComplete && typeof onComplete === 'function') {\n                onComplete();\n            }\n\n            return true; // FIXME: Do we really need to return true here?\n        } catch (error) {\n            if (typeof error === 'string') {\n                throw new Error(error);\n            }\n\n            throw error;\n        }\n    }\n\n    private async onShippingAddressChange(\n        data: ShippingAddressChangeCallbackPayload,\n    ): Promise<void> {\n        const address = this.bigCommercePaymentsIntegrationService.getAddress({\n            city: data.shippingAddress.city,\n            countryCode: data.shippingAddress.countryCode,\n            postalCode: data.shippingAddress.postalCode,\n            stateOrProvinceCode: data.shippingAddress.state,\n        });\n\n        try {\n            // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n            // on this stage we don't have access to valid customer's address accept shipping data\n            await this.paymentIntegrationService.updateBillingAddress(address);\n            await this.paymentIntegrationService.updateShippingAddress(address);\n\n            const shippingOption =\n                this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();\n\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.bigCommercePaymentsIntegrationService.updateOrder();\n        } catch (error) {\n            if (typeof error === 'string') {\n                throw new Error(error);\n            }\n\n            throw error;\n        }\n    }\n\n    private async onShippingOptionsChange(\n        data: ShippingOptionChangeCallbackPayload,\n    ): Promise<void> {\n        const shippingOption = this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(\n            data.selectedShippingOption.id,\n        );\n\n        try {\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.bigCommercePaymentsIntegrationService.updateOrder();\n        } catch (error) {\n            if (typeof error === 'string') {\n                throw new Error(error);\n            }\n\n            throw error;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/bigcommerce-payments-paylater-customer-initialize-options.ts",
    "content": "export default interface BigCommercePaymentsPayLaterCustomerInitializeOptions {\n    /**\n     * The ID of a container which the checkout button should be inserted into.\n     */\n    container: string;\n\n    /**\n     * A callback that gets called if unable to initialize the widget or select\n     * one of the address options provided by the widget.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error?: Error): void;\n\n    /**\n     * A callback that gets called when payment complete on paypal side.\n     */\n    onComplete?(): void;\n\n    /**\n     * A callback that gets called when paypal button clicked.\n     */\n    onClick?(): void;\n}\n\nexport interface WithBigCommercePaymentsPayLaterCustomerInitializeOptions {\n    bigcommerce_payments_paylater?: BigCommercePaymentsPayLaterCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/bigcommerce-payments-paylater-customer-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    CustomerInitializeOptions,\n    DefaultCheckoutButtonHeight,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConsignment,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsHostWindow,\n    PayPalSDK,\n    StyleButtonColor,\n} from '../bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsIntegrationServiceMock,\n    getBigCommercePaymentsOrderDetails,\n    getBigCommercePaymentsPaymentMethod,\n    getBillingAddressFromOrderDetails,\n    getPayPalSDKMock,\n    getShippingAddressFromOrderDetails,\n} from '../mocks';\n\nimport BigCommercePaymentsPayLaterCustomerInitializeOptions, {\n    WithBigCommercePaymentsPayLaterCustomerInitializeOptions,\n} from './bigcommerce-payments-paylater-customer-initialize-options';\nimport BigCommercePaymentsPayLaterCustomerStrategy from './bigcommerce-payments-paylater-customer-strategy';\n\ndescribe('BigCommercePaymentsPayLaterCustomerStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let strategy: BigCommercePaymentsPayLaterCustomerStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n    let paypalSdk: PayPalSDK;\n\n    const methodId = 'bigcommerce_payments_paylater';\n    const defaultContainerId = 'bigcommerce-payments-paylater-container-mock-id';\n    const approveDataOrderId = 'ORDER_ID';\n\n    const bigCommercePaymentsPayLaterOptions: BigCommercePaymentsPayLaterCustomerInitializeOptions =\n        {\n            container: defaultContainerId,\n            onClick: jest.fn(),\n            onComplete: jest.fn(),\n        };\n\n    const initializationOptions: CustomerInitializeOptions &\n        WithBigCommercePaymentsPayLaterCustomerInitializeOptions = {\n        methodId,\n        bigcommerce_payments_paylater: bigCommercePaymentsPayLaterOptions,\n    };\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        paymentMethod = { ...getBigCommercePaymentsPaymentMethod(), id: methodId };\n        paypalSdk = getPayPalSDKMock();\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new BigCommercePaymentsPayLaterCustomerStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paymentIntegrationService, 'selectShippingOption').mockImplementation(jest.fn());\n\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockResolvedValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'updateOrder').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'tokenizePayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'submitPayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'removeElement').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'getBillingAddressFromOrderDetails',\n        ).mockReturnValue(getBillingAddressFromOrderDetails());\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'getShippingAddressFromOrderDetails',\n        ).mockReturnValue(getShippingAddressFromOrderDetails());\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'getShippingOptionOrThrow',\n        ).mockReturnValue(getShippingOption());\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: BigCommercePaymentsButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: approveDataOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onClick', () => {\n                    if (options.onClick) {\n                        options.onClick(\n                            { fundingSource: 'credit' },\n                            {\n                                resolve: jest.fn(),\n                                reject: jest.fn(),\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onShippingAddressChange', () => {\n                    if (options.onShippingAddressChange) {\n                        options.onShippingAddressChange({\n                            orderId: approveDataOrderId,\n                            shippingAddress: {\n                                city: 'New York',\n                                countryCode: 'US',\n                                postalCode: '07564',\n                                state: 'New York',\n                            },\n                        });\n                    }\n                });\n\n                eventEmitter.on('onShippingOptionsChange', () => {\n                    if (options.onShippingOptionsChange) {\n                        options.onShippingOptionsChange({\n                            orderId: approveDataOrderId,\n                            selectedShippingOption: {\n                                amount: {\n                                    currency_code: 'USD',\n                                    value: '100',\n                                },\n                                id: '1',\n                                label: 'Free shipping',\n                                selected: true,\n                                type: 'type_shipping',\n                            },\n                        });\n                    }\n                });\n\n                return {\n                    close: jest.fn(),\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BigCommercePaymentsHostWindow).paypal;\n    });\n\n    it('creates an interface of the BigCommercePayments PayLater customer strategy', () => {\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsPayLaterCustomerStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws an error if methodId is not provided', async () => {\n            const options = {} as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_paylater is not provided', async () => {\n            const options = { methodId } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_paylater.container is not provided', async () => {\n            const options = {\n                methodId,\n                bigcommerce_payments_paylater: {\n                    onComplete: jest.fn(),\n                    container: undefined,\n                },\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_paylater.onClick is provided but it is not a function', async () => {\n            const options = {\n                methodId,\n                bigcommerce_payments_paylater: {\n                    ...initializationOptions.bigcommerce_payments_paylater,\n                    onClick: 'test',\n                },\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads bigcommerce_payments_paylater payment method', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n        });\n\n        it('does not load bigcommerce_payments_paylater payment method if payment method is already exists', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n                paymentMethod,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk with provided method id', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                methodId,\n            );\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('initializes PayLater button with default configuration', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: StyleButtonColor.silver,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('initializes PayLater buttons with config related to hosted checkout feature', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: StyleButtonColor.silver,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onShippingAddressChange: expect.any(Function),\n                onShippingOptionsChange: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('renders PayLater button if it is eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('renders PayPal Credit button if PayLater button is not eligible', async () => {\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                (options: BigCommercePaymentsButtonsOptions) => {\n                    return {\n                        close: jest.fn(),\n                        render: jest.fn(),\n                        isEligible: jest.fn(() => {\n                            return options.fundingSource === paypalSdk.FUNDING.CREDIT;\n                        }),\n                    };\n                },\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.CREDIT,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: StyleButtonColor.silver,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('does not render wallet button if it is not eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n            expect(bigCommercePaymentsIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultContainerId,\n            );\n        });\n\n        it('logs an error when PayPalSDK Buttons implementation is not available for some reasons', async () => {\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockReturnValue(\n                Promise.resolve(undefined),\n            );\n\n            const log = jest.fn();\n\n            jest.spyOn(console, 'error').mockImplementation(log);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(log).toHaveBeenCalled();\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates an order', async () => {\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockResolvedValue('');\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_payments_paylater',\n            );\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        describe('default flow', () => {\n            it('tokenizes payment on paypal approve', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(bigCommercePaymentsIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                    methodId,\n                    approveDataOrderId,\n                );\n            });\n        });\n\n        describe('shipping options feature flow', () => {\n            const paypalOrderDetails = getBigCommercePaymentsOrderDetails();\n\n            beforeEach(() => {\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: BigCommercePaymentsButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: approveDataOrderId },\n                                    {\n                                        order: {\n                                            get: jest.fn(() => Promise.resolve(paypalOrderDetails)),\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            close: jest.fn(),\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                        };\n                    },\n                );\n\n                const paymentMethodWithShippingOptionsFeature = {\n                    ...paymentMethod,\n                    initializationData: {\n                        ...paymentMethod.initializationData,\n                        isHostedCheckoutEnabled: true,\n                    },\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n            });\n\n            it('takes order details data from paypal', async () => {\n                const getOrderActionMock = jest.fn(() => Promise.resolve(paypalOrderDetails));\n\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: BigCommercePaymentsButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: approveDataOrderId },\n                                    {\n                                        order: {\n                                            get: getOrderActionMock,\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            close: jest.fn(),\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                        };\n                    },\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(getOrderActionMock).toHaveBeenCalled();\n                expect(getOrderActionMock).toHaveReturnedWith(Promise.resolve(paypalOrderDetails));\n            });\n\n            it('updates billing address with valid customers data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getBigCommercePaymentsOrderDetails());\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                    getBillingAddressFromOrderDetails(),\n                );\n            });\n\n            it('updates shipping address with valid customers data if physical items are available in the cart', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getBigCommercePaymentsOrderDetails());\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(\n                    getShippingAddressFromOrderDetails(),\n                );\n            });\n\n            it('submits BC order with provided methodId', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    {},\n                    {\n                        params: {\n                            methodId: initializationOptions.methodId,\n                        },\n                    },\n                );\n            });\n\n            it('submits BC payment to update BC order data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(bigCommercePaymentsIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    methodId,\n                    approveDataOrderId,\n                );\n            });\n        });\n    });\n\n    describe('#onShippingAddressChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('updates billing and shipping address with data returned from PayPal', async () => {\n            const address = {\n                firstName: '',\n                lastName: '',\n                email: '',\n                phone: '',\n                company: '',\n                address1: '',\n                address2: '',\n                city: 'New York',\n                countryCode: 'US',\n                postalCode: '07564',\n                stateOrProvince: '',\n                stateOrProvinceCode: 'New York',\n                customFields: [],\n            };\n\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'getAddress').mockReturnValue(\n                address,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(address);\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(address);\n        });\n\n        it('selects shipping option after address update', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(\n                bigCommercePaymentsIntegrationService.getShippingOptionOrThrow,\n            ).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates an order after shipping option selection', async () => {\n            const consignment = getConsignment();\n\n            // INFO: lets imagine that it is a state that we get after consignmentActionCreator.selectShippingOption call\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getConsignmentsOrThrow',\n            ).mockReturnValue([consignment]);\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onShippingOptionsChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('selects shipping option', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(\n                bigCommercePaymentsIntegrationService.getShippingOptionOrThrow,\n            ).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates an order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onClick button callback', () => {\n        it('triggers onClick option by clicking on the button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsPayLaterOptions.onClick).toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('calls default sign in method', async () => {\n            const credentials = {\n                email: 'test@test.com',\n                password: '123',\n            };\n\n            await strategy.signIn(credentials);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                undefined,\n            );\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('calls default sign out method', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout()', () => {\n        it('calls default continue with checkout callback', async () => {\n            const continueWithCheckoutCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({ continueWithCheckoutCallback });\n\n            expect(continueWithCheckoutCallback).toHaveBeenCalled();\n        });\n\n        it('makes nothing if continue with checkout callback is not provided', async () => {\n            const result = await strategy.executePaymentMethodCheckout();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/bigcommerce-payments-paylater-customer-strategy.ts",
    "content": "import { noop } from 'lodash';\n\nimport {\n    CustomerCredentials,\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    DefaultCheckoutButtonHeight,\n    ExecutePaymentMethodCheckoutOptions,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    ApproveCallbackActions,\n    ApproveCallbackPayload,\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsInitializationData,\n    ShippingAddressChangeCallbackPayload,\n    ShippingOptionChangeCallbackPayload,\n} from '../bigcommerce-payments-types';\n\nimport BigCommercePaymentsPayLaterCustomerInitializeOptions, {\n    WithBigCommercePaymentsPayLaterCustomerInitializeOptions,\n} from './bigcommerce-payments-paylater-customer-initialize-options';\n\nexport default class BigCommercePaymentsPayLaterCustomerStrategy implements CustomerStrategy {\n    private onError = noop;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions &\n            WithBigCommercePaymentsPayLaterCustomerInitializeOptions,\n    ): Promise<void> {\n        const { bigcommerce_payments_paylater, 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 (!bigcommerce_payments_paylater) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.',\n            );\n        }\n\n        if (!bigcommerce_payments_paylater.container) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments_paylater.container\" argument is not provided.',\n            );\n        }\n\n        if (\n            bigcommerce_payments_paylater.onClick &&\n            typeof bigcommerce_payments_paylater.onClick !== 'function'\n        ) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments_paylater.onClick\" argument is not a function.',\n            );\n        }\n\n        this.onError = bigcommerce_payments_paylater.onError || noop;\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethod(methodId);\n\n        if (!paymentMethod) {\n            await this.paymentIntegrationService.loadPaymentMethod(methodId);\n        }\n\n        const paypalSdk = await this.bigCommercePaymentsIntegrationService.loadPayPalSdk(methodId);\n\n        if (!paypalSdk || !paypalSdk.Buttons || typeof paypalSdk.Buttons !== 'function') {\n            // eslint-disable-next-line no-console\n            console.error(\n                '[BC BigCommercePayments PayLater]: button could not be rendered, due to issues with loading PayPal SDK',\n            );\n\n            return;\n        }\n\n        this.renderButton(methodId, bigcommerce_payments_paylater);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signInCustomer(credentials, options);\n    }\n\n    async signOut(options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signOutCustomer(options);\n    }\n\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n        options?.continueWithCheckoutCallback?.();\n\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        methodId: string,\n        bigCommercePaymentsPayLater: BigCommercePaymentsPayLaterCustomerInitializeOptions,\n    ): void {\n        const { container, onComplete, onClick } = bigCommercePaymentsPayLater;\n\n        const paypalSdk = this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n        const { isHostedCheckoutEnabled, paymentButtonStyles } =\n            paymentMethod.initializationData || {};\n        const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n        const defaultCallbacks = {\n            createOrder: () =>\n                this.bigCommercePaymentsIntegrationService.createOrder(\n                    'bigcommerce_payments_paylater',\n                ),\n            onApprove: ({ orderID }: ApproveCallbackPayload) =>\n                this.bigCommercePaymentsIntegrationService.tokenizePayment(methodId, orderID),\n            ...(onClick && { onClick: () => onClick() }),\n        };\n\n        const hostedCheckoutCallbacks = {\n            onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n                this.onShippingAddressChange(data),\n            onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n                this.onShippingOptionsChange(data),\n            onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n                this.onHostedCheckoutApprove(data, actions, methodId, onComplete),\n        };\n\n        const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n        let hasRenderedSmartButton = false;\n\n        fundingSources.forEach((fundingSource) => {\n            if (!hasRenderedSmartButton) {\n                const buttonRenderOptions: BigCommercePaymentsButtonsOptions = {\n                    fundingSource,\n                    style: this.bigCommercePaymentsIntegrationService.getValidButtonStyle({\n                        ...checkoutTopButtonStyles,\n                        height: DefaultCheckoutButtonHeight,\n                    }),\n                    ...defaultCallbacks,\n                    ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n                };\n\n                const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n                if (paypalButton.isEligible()) {\n                    paypalButton.render(`#${container}`);\n                    hasRenderedSmartButton = true;\n                }\n            }\n        });\n\n        if (!hasRenderedSmartButton) {\n            this.bigCommercePaymentsIntegrationService.removeElement(container);\n        }\n    }\n\n    private async onHostedCheckoutApprove(\n        data: ApproveCallbackPayload,\n        actions: ApproveCallbackActions,\n        methodId: string,\n        onComplete?: () => void,\n    ): Promise<void> {\n        if (!data.orderID) {\n            throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n        }\n\n        const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n        const orderDetails = await actions.order.get();\n\n        try {\n            const billingAddress =\n                this.bigCommercePaymentsIntegrationService.getBillingAddressFromOrderDetails(\n                    orderDetails,\n                );\n\n            await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n            if (cart.lineItems.physicalItems.length > 0) {\n                const shippingAddress =\n                    this.bigCommercePaymentsIntegrationService.getShippingAddressFromOrderDetails(\n                        orderDetails,\n                    );\n\n                await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n                await this.bigCommercePaymentsIntegrationService.updateOrder();\n            }\n\n            await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n            await this.bigCommercePaymentsIntegrationService.submitPayment(methodId, data.orderID);\n\n            if (onComplete && typeof onComplete === 'function') {\n                onComplete();\n            }\n        } catch (error) {\n            this.handleError(error);\n        }\n    }\n\n    private async onShippingAddressChange(\n        data: ShippingAddressChangeCallbackPayload,\n    ): Promise<void> {\n        const address = this.bigCommercePaymentsIntegrationService.getAddress({\n            city: data.shippingAddress.city,\n            countryCode: data.shippingAddress.countryCode,\n            postalCode: data.shippingAddress.postalCode,\n            stateOrProvinceCode: data.shippingAddress.state,\n        });\n\n        try {\n            // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n            // on this stage we don't have access to valid customer's address except shipping data\n            await this.paymentIntegrationService.updateBillingAddress(address);\n            await this.paymentIntegrationService.updateShippingAddress(address);\n\n            const shippingOption =\n                this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow();\n\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.bigCommercePaymentsIntegrationService.updateOrder();\n        } catch (error) {\n            this.handleError(error);\n        }\n    }\n\n    private async onShippingOptionsChange(\n        data: ShippingOptionChangeCallbackPayload,\n    ): Promise<void> {\n        const shippingOption = this.bigCommercePaymentsIntegrationService.getShippingOptionOrThrow(\n            data.selectedShippingOption.id,\n        );\n\n        try {\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.bigCommercePaymentsIntegrationService.updateOrder();\n        } catch (error) {\n            this.handleError(error);\n        }\n    }\n\n    private handleError(error: unknown) {\n        if (typeof this.onError === 'function') {\n            this.onError(error);\n        } else {\n            throw error;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/bigcommerce-payments-paylater-payment-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the BigCommercePayments PayLater payment\n * method for presenting its BigCommercePayments PayLater button.\n *\n *\n * Also, BigCommercePayments requires specific options to initialize the BigCommercePayments Smart Payment Button on checkout page that substitutes a standard submit button\n * ```html\n * <!-- This is where the BigCommercePayments PayLater button will be inserted -->\n * <div id=\"container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'bigcommerce_payments_paylater',\n *     bigcommerce_payments_paylater: {\n *         container: '#container',\n * // Callback for submitting payment form that gets called when a buyer approves BigCommercePayments payment\n *         submitForm: () => {\n *         // Example function\n *             this.submitOrder(\n *                {\n *                   payment: { methodId: 'bigcommerce_payments_paylater', }\n *               }\n *            );\n *         },\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\n *         onValidate: (resolve, reject) => {\n *         // Example function\n *             const isValid = this.validatePaymentForm();\n *             if (isValid) {\n *                 return resolve();\n *             }\n *             return reject();\n *         },\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular BigCommercePayments method. This callback can be used to hide the standard submit button.\n *         onRenderButton: () => {\n *         // Example function\n *             this.hidePaymentSubmitButton();\n *         }\n *     },\n * });\n * ```\n */\nexport default interface BigCommercePaymentsPayLaterPaymentInitializeOptions {\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    container?: string;\n\n    /**\n     * The location to insert the Pay Later Messages.\n     */\n    bannerContainerId?: string;\n\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: Error): void;\n\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n\n    /**\n     * A callback that gets called when a buyer click on Smart Payment Button\n     * and should validate payment form.\n     *\n     * @param resolve - A function, that gets called if form is valid.\n     * @param reject - A function, that gets called if form is not valid.\n     *\n     * @returns reject() or resolve()\n     */\n    onValidate?(resolve: () => void, reject: () => void): Promise<void>;\n\n    /**\n     * A callback for submitting payment form that gets called\n     * when buyer approved BigCommercePayments account.\n     */\n    submitForm?(): void;\n}\n\nexport interface WithBigCommercePaymentsPayLaterPaymentInitializeOptions {\n    bigcommerce_payments_paylater?: BigCommercePaymentsPayLaterPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/bigcommerce-payments-paylater-payment-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    createBigCommercePaymentsSdk,\n    PayPalMessagesSdk,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    InvalidArgumentError,\n    NotImplementedError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodInvalidError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsHostWindow,\n    PayPalSDK,\n} from '../bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsIntegrationServiceMock,\n    getBigCommercePaymentsPaymentMethod,\n    getPayPalSDKMock,\n} from '../mocks';\n\nimport BigCommercePaymentsPayLaterPaymentInitializeOptions from './bigcommerce-payments-paylater-payment-initialize-options';\nimport BigCommercePaymentsPayLaterPaymentStrategy from './bigcommerce-payments-paylater-payment-strategy';\n\ndescribe('BigCommercePaymentsPayLaterPaymentStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let loadingIndicator: LoadingIndicator;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n    let paypalSdk: PayPalSDK;\n    let strategy: BigCommercePaymentsPayLaterPaymentStrategy;\n    let paypalSdkHelper: PayPalSdkHelper;\n    let payPalMessagesSdk: PayPalMessagesSdk;\n\n    const paypalOrderId = 'paypal123';\n\n    const defaultMethodId = 'bigcommerce_payments_paylater';\n    const defaultContainerId = '#container';\n    const defaultMessageContainerId = 'bigcommerce-payments-paylater-message-mock-id';\n\n    const bigCommercePaymentsPayLaterOptions: BigCommercePaymentsPayLaterPaymentInitializeOptions =\n        {\n            container: defaultContainerId,\n            onValidate: jest.fn(),\n            submitForm: jest.fn(),\n        };\n\n    const initializationOptions: PaymentInitializeOptions = {\n        methodId: defaultMethodId,\n        bigcommerce_payments_paylater: bigCommercePaymentsPayLaterOptions,\n    };\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        payPalMessagesSdk = {\n            Messages: jest.fn(),\n        };\n\n        paypalSdk = getPayPalSDKMock();\n        paymentMethod = getBigCommercePaymentsPaymentMethod();\n        paymentMethod.id = defaultMethodId;\n        paymentMethod.initializationData.orderId = undefined;\n\n        loadingIndicator = new LoadingIndicator();\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paypalSdkHelper = createBigCommercePaymentsSdk();\n\n        strategy = new BigCommercePaymentsPayLaterPaymentStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n            loadingIndicator,\n            paypalSdkHelper,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockResolvedValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockResolvedValue('');\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'submitPayment').mockResolvedValue();\n\n        jest.spyOn(loadingIndicator, 'show').mockReturnValue(undefined);\n        jest.spyOn(loadingIndicator, 'hide').mockReturnValue(undefined);\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: BigCommercePaymentsButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on('onClick', () => {\n                    if (options.onClick) {\n                        options.onClick(\n                            { fundingSource: defaultMethodId },\n                            {\n                                reject: jest.fn(),\n                                resolve: jest.fn(),\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: paypalOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onCancel', () => {\n                    if (options.onCancel) {\n                        options.onCancel();\n                    }\n                });\n\n                eventEmitter.on('onError', () => {\n                    if (options.onError) {\n                        options.onError(new Error());\n                    }\n                });\n\n                return {\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                    close: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BigCommercePaymentsHostWindow).paypal;\n    });\n\n    it('creates an instance of the BigCommercePayments  payment strategy', () => {\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsPayLaterPaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if options.bigcommerce_payments_paylater is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not continues strategy initialization if order id is available in initializationData', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n            );\n        });\n    });\n\n    describe('#renderButton()', () => {\n        it('renders PayPal PayLater button if it is eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: {\n                    color: 'black',\n                    height: 55,\n                    label: 'pay',\n                },\n                createOrder: expect.any(Function),\n                onClick: expect.any(Function),\n                onApprove: expect.any(Function),\n                onCancel: expect.any(Function),\n                onError: expect.any(Function),\n            });\n\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('renders PayPal Credit button if PayPal PayLater button is not eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                (options: BigCommercePaymentsButtonsOptions) => {\n                    return {\n                        close: jest.fn(),\n                        render: bigCommercePaymentsSdkRenderMock,\n                        isEligible: jest.fn(() => {\n                            return options.fundingSource === paypalSdk.FUNDING.CREDIT;\n                        }),\n                    };\n                },\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            const defaultButtonOptions = {\n                style: {\n                    color: 'black',\n                    height: 55,\n                    label: 'pay',\n                },\n                createOrder: expect.any(Function),\n                onClick: expect.any(Function),\n                onApprove: expect.any(Function),\n                onCancel: expect.any(Function),\n                onError: expect.any(Function),\n            };\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledTimes(2);\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                ...defaultButtonOptions,\n            });\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.CREDIT,\n                ...defaultButtonOptions,\n            });\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalledTimes(1);\n        });\n\n        it('throws an error if both PayPal PayLater and Credit buttons are not eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n                expect(error).toBeInstanceOf(NotImplementedError);\n            }\n        });\n\n        it('throws an error if container is not passed', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            try {\n                await strategy.initialize({\n                    ...initializationOptions,\n                    bigcommerce_payments_paylater: {},\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates paypal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_payments_paylater',\n            );\n        });\n    });\n\n    describe('#onClick button callback', () => {\n        it('calls validation callback with provided params', async () => {\n            const onValidateMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_paylater: {\n                    ...bigCommercePaymentsPayLaterOptions,\n                    onValidate: onValidateMock,\n                },\n            });\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(onValidateMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        it('submits form', async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_paylater: {\n                    ...bigCommercePaymentsPayLaterOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n        });\n\n        it(\"doesn't hide loading indicator after form submit\", async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_paylater: {\n                    ...bigCommercePaymentsPayLaterOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n            expect(loadingIndicator.hide).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onCancel');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onError button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n\n        it('calls onError callback if it is provided', async () => {\n            const onErrorMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_paylater: {\n                    ...bigCommercePaymentsPayLaterOptions,\n                    onError: onErrorMock,\n                },\n            });\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws an error if payload.payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if orderId is not defined', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodInvalidError);\n            }\n        });\n\n        it('submits order', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('submits payment with provided data', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(bigCommercePaymentsIntegrationService.submitPayment).toHaveBeenCalledWith(\n                payload.payment.methodId,\n                paypalOrderId,\n            );\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('closes paypal button component on deinitialize strategy', async () => {\n            const bigCommercePaymentsSdkCloseMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: bigCommercePaymentsSdkCloseMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n            await strategy.deinitialize();\n\n            expect(bigCommercePaymentsSdkCloseMock).toHaveBeenCalled();\n        });\n\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('BigCommercePayments PayLater messages logic', () => {\n        const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n        const options = {\n            methodId: defaultMethodId,\n            bigcommerce_payments_paylater: {\n                bannerContainerId: defaultMessageContainerId,\n            },\n        };\n\n        beforeEach(() => {\n            const div = document.createElement('div');\n\n            div.setAttribute('id', defaultMessageContainerId);\n            document.body.appendChild(div);\n\n            jest.spyOn(paypalSdkHelper, 'getPayPalMessages').mockImplementation(() =>\n                Promise.resolve(payPalMessagesSdk),\n            );\n            jest.spyOn(payPalMessagesSdk, 'Messages').mockImplementation(() => ({\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n        });\n\n        afterEach(() => {\n            document.getElementById(defaultMessageContainerId)?.remove();\n        });\n\n        it('does not render PayPal message if banner is disabled in paypalBNPLConfiguration', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: [\n                        {\n                            id: 'checkout',\n                            status: false,\n                        },\n                    ],\n                },\n            });\n\n            await strategy.initialize(options);\n\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('does not render PayPal message when paypalBNPLConfiguration is not provided', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: undefined,\n                },\n            });\n\n            await strategy.initialize(options);\n\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('initializes PayPal Messages component', async () => {\n            await strategy.initialize(options);\n\n            expect(payPalMessagesSdk.Messages).toHaveBeenCalledWith({\n                amount: 190,\n                placement: 'payment',\n                style: {\n                    layout: 'text',\n                    logo: {\n                        type: 'alternative',\n                    },\n                    text: {\n                        color: 'white',\n                        size: 10,\n                    },\n                },\n            });\n        });\n\n        it('does not execute PayPal button initialization logic if bannerContainerId is provided', async () => {\n            await strategy.initialize(options);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).not.toHaveBeenCalledWith(\n                defaultMethodId,\n            );\n        });\n\n        it('show an error if bannerContainerId is provided but does not exist as DOM element', async () => {\n            Object.defineProperty(window, 'console', {\n                value: {\n                    error: jest.fn(),\n                },\n            });\n\n            await strategy.initialize({\n                ...options,\n                bigcommerce_payments_paylater: {\n                    ...options.bigcommerce_payments_paylater,\n                    bannerContainerId: '',\n                },\n            });\n\n            expect(payPalMessagesSdk.Messages).not.toHaveBeenCalled();\n            expect(window.console.error).toHaveBeenCalledWith(\n                'Unable to create banner without valid banner container ID.',\n            );\n        });\n\n        it('renders PayPal message', async () => {\n            await strategy.initialize(options);\n\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalledWith(\n                `#${defaultMessageContainerId}`,\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/bigcommerce-payments-paylater-payment-strategy.ts",
    "content": "import {\n    BigCommercePaymentsInitializationData,\n    getPaypalMessagesStylesFromBNPLConfig,\n    MessagingOptions,\n    PayPalBNPLConfigurationItem,\n    PayPalMessagesSdk,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    InvalidArgumentError,\n    NotImplementedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    ApproveCallbackPayload,\n    BigCommercePaymentsButtons,\n    BigCommercePaymentsButtonsOptions,\n    ClickCallbackActions,\n} from '../bigcommerce-payments-types';\n\nimport BigCommercePaymentsPayLaterPaymentInitializeOptions, {\n    WithBigCommercePaymentsPayLaterPaymentInitializeOptions,\n} from './bigcommerce-payments-paylater-payment-initialize-options';\n\nexport default class BigCommercePaymentsPayLaterPaymentStrategy implements PaymentStrategy {\n    private loadingIndicatorContainer?: string;\n    private orderId?: string;\n    private bigCommercePaymentsButtons?: BigCommercePaymentsButtons;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\n        private loadingIndicator: LoadingIndicator,\n        private paypalSdkHelper: PayPalSdkHelper,\n    ) {}\n\n    async initialize(\n        options?: PaymentInitializeOptions &\n            WithBigCommercePaymentsPayLaterPaymentInitializeOptions,\n    ): Promise<void> {\n        const { methodId, bigcommerce_payments_paylater } = 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 (!bigcommerce_payments_paylater) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments_paylater\" argument is not provided.`,\n            );\n        }\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n        const { paypalBNPLConfiguration = [], orderId } = paymentMethod.initializationData || {};\n        const { bannerContainerId, container } = bigcommerce_payments_paylater;\n\n        if (bannerContainerId !== undefined) {\n            if (!document.getElementById(bannerContainerId)) {\n                // eslint-disable-next-line no-console\n                console.error('Unable to create banner without valid banner container ID.');\n\n                return;\n            }\n\n            const bannerConfiguration =\n                paypalBNPLConfiguration &&\n                paypalBNPLConfiguration.find(({ id }) => id === 'checkout');\n\n            if (!bannerConfiguration?.status) {\n                return;\n            }\n\n            const paypalMessages = await this.paypalSdkHelper.getPayPalMessages(\n                paymentMethod,\n                state.getCartOrThrow().currency.code,\n            );\n\n            return this.renderMessages(paypalMessages, bannerContainerId, bannerConfiguration);\n        }\n\n        // Info:\n        // The BigCommercePayments button and fields should not be rendered when shopper was redirected to Checkout page\n        // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n        // it is available in checkout session. Therefore, it is not necessary to render BigCommercePayments button.\n        if (orderId) {\n            this.orderId = orderId;\n\n            return;\n        }\n\n        await this.bigCommercePaymentsIntegrationService.loadPayPalSdk(methodId);\n\n        this.loadingIndicatorContainer = container?.split('#')[1];\n\n        this.renderButton(methodId, bigcommerce_payments_paylater);\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        if (!this.orderId) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n        await this.bigCommercePaymentsIntegrationService.submitPayment(\n            payment.methodId,\n            this.orderId,\n        );\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this.orderId = undefined;\n\n        this.bigCommercePaymentsButtons?.close();\n\n        return Promise.resolve();\n    }\n\n    /**\n     *\n     * Button methods/callbacks\n     *\n     * */\n    private renderButton(\n        methodId: string,\n        bigcommerce_payments_paylater: BigCommercePaymentsPayLaterPaymentInitializeOptions,\n    ): void {\n        if (!bigcommerce_payments_paylater?.container) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"container\" argument is not provided.',\n            );\n        }\n\n        const bigCommerceSdk = this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow();\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n        const { paymentButtonStyles } = paymentMethod.initializationData || {};\n        const { checkoutPaymentButtonStyles } = paymentButtonStyles || {};\n\n        const { container, onError, onRenderButton, onValidate, submitForm } =\n            bigcommerce_payments_paylater;\n\n        const fundingSources = [bigCommerceSdk.FUNDING.PAYLATER, bigCommerceSdk.FUNDING.CREDIT];\n        let hasRenderedSmartButton = false;\n\n        fundingSources.forEach((fundingSource) => {\n            if (hasRenderedSmartButton) {\n                return;\n            }\n\n            const buttonOptions: BigCommercePaymentsButtonsOptions = {\n                fundingSource,\n                style: this.bigCommercePaymentsIntegrationService.getValidButtonStyle(\n                    checkoutPaymentButtonStyles,\n                ),\n                createOrder: () =>\n                    this.bigCommercePaymentsIntegrationService.createOrder(\n                        'bigcommerce_payments_paylater',\n                    ),\n                onClick: (_, actions) => this.handleClick(actions, onValidate),\n                onApprove: (data) => this.handleApprove(data, submitForm),\n                onCancel: () => this.toggleLoadingIndicator(false),\n                onError: (error) => this.handleError(error, onError),\n            };\n\n            this.bigCommercePaymentsButtons = bigCommerceSdk.Buttons(buttonOptions);\n\n            if (\n                !this.bigCommercePaymentsButtons.isEligible() &&\n                fundingSource === bigCommerceSdk.FUNDING.PAYLATER\n            ) {\n                return;\n            }\n\n            if (\n                !this.bigCommercePaymentsButtons.isEligible() &&\n                fundingSource === bigCommerceSdk.FUNDING.CREDIT\n            ) {\n                throw new NotImplementedError(\n                    `BigCommercePayments ${fundingSource} is not available for your region. Please use BigCommercePayments Checkout instead.`,\n                );\n            }\n\n            if (onRenderButton && typeof onRenderButton === 'function') {\n                onRenderButton();\n            }\n\n            this.bigCommercePaymentsButtons.render(container);\n            hasRenderedSmartButton = true;\n        });\n    }\n\n    private async handleClick(\n        actions: ClickCallbackActions,\n        onValidate: BigCommercePaymentsPayLaterPaymentInitializeOptions['onValidate'],\n    ): Promise<void> {\n        const { resolve, reject } = actions;\n\n        const onValidationPassed = () => {\n            this.toggleLoadingIndicator(true);\n\n            return resolve();\n        };\n\n        if (onValidate && typeof onValidate === 'function') {\n            await onValidate(onValidationPassed, reject);\n        }\n    }\n\n    private handleApprove(\n        { orderID }: ApproveCallbackPayload,\n        submitForm: BigCommercePaymentsPayLaterPaymentInitializeOptions['submitForm'],\n    ): void {\n        this.orderId = orderID;\n\n        if (submitForm && typeof submitForm === 'function') {\n            submitForm();\n        }\n    }\n\n    private handleError(\n        error: Error,\n        onError: BigCommercePaymentsPayLaterPaymentInitializeOptions['onError'],\n    ): void {\n        this.toggleLoadingIndicator(false);\n\n        if (onError && typeof onError === 'function') {\n            onError(error);\n        }\n    }\n\n    /**\n     *\n     * Loading Indicator methods\n     *\n     * */\n    private toggleLoadingIndicator(isLoading: boolean): void {\n        if (isLoading && this.loadingIndicatorContainer) {\n            this.loadingIndicator.show(this.loadingIndicatorContainer);\n        } else {\n            this.loadingIndicator.hide();\n        }\n    }\n\n    /**\n     *\n     * Render Pay Later Messages\n     *\n     * */\n    private renderMessages(\n        paypalMessages: PayPalMessagesSdk,\n        bannerContainerId: string,\n        bannerConfiguration: PayPalBNPLConfigurationItem,\n    ): void {\n        const checkout = this.paymentIntegrationService.getState().getCheckoutOrThrow();\n\n        const paypalMessagesOptions: MessagingOptions = {\n            amount: checkout.outstandingBalance,\n            placement: 'payment',\n            style: getPaypalMessagesStylesFromBNPLConfig(bannerConfiguration),\n        };\n\n        paypalMessages.Messages(paypalMessagesOptions).render(`#${bannerContainerId}`);\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/create-bigcommerce-payments-paylater-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsPayLaterButtonStrategy from './bigcommerce-payments-paylater-button-strategy';\nimport createBigCommercePaymentsPayLaterButtonStrategy from './create-bigcommerce-payments-paylater-button-strategy';\n\ndescribe('createBigCommercePaymentsPayLaterButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePayments Paylater button strategy', () => {\n        const strategy = createBigCommercePaymentsPayLaterButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsPayLaterButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/create-bigcommerce-payments-paylater-button-strategy.ts",
    "content": "import {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsPayLaterButtonStrategy from './bigcommerce-payments-paylater-button-strategy';\n\nconst createBigCommercePaymentsPayLaterButtonStrategy: CheckoutButtonStrategyFactory<\n    BigCommercePaymentsPayLaterButtonStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsPayLaterButtonStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsPayLaterButtonStrategy, [\n    { id: 'bigcommerce_payments_paylater' },\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/create-bigcommerce-payments-paylater-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsPayLaterCustomerStrategy from './bigcommerce-payments-paylater-customer-strategy';\nimport createBigCommercePaymentsPayLaterCustomerStrategy from './create-bigcommerce-payments-paylater-customer-strategy';\n\ndescribe('createBigCommercePaymentsPayLaterCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePayments Paylater button strategy', () => {\n        const strategy =\n            createBigCommercePaymentsPayLaterCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsPayLaterCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/create-bigcommerce-payments-paylater-customer-strategy.ts",
    "content": "import {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsPayLaterCustomerStrategy from './bigcommerce-payments-paylater-customer-strategy';\n\nconst createBigCommercePaymentsPayLaterCustomerStrategy: CustomerStrategyFactory<\n    BigCommercePaymentsPayLaterCustomerStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsPayLaterCustomerStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsPayLaterCustomerStrategy, [\n    { id: 'bigcommerce_payments_paylater' },\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/create-bigcommerce-payments-paylater-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsPayLaterPaymentStrategy from './bigcommerce-payments-paylater-payment-strategy';\nimport createBigCommercePaymentsPayLaterPaymentStrategy from './create-bigcommerce-payments-paylater-payment-strategy';\n\ndescribe('createBigCommercePaymentsPayLaterPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePayments PayLater payment strategy', () => {\n        const strategy =\n            createBigCommercePaymentsPayLaterPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsPayLaterPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-paylater/create-bigcommerce-payments-paylater-payment-strategy.ts",
    "content": "import { createBigCommercePaymentsSdk } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { LOADING_INDICATOR_STYLES } from '../bigcommerce-payments-constants';\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsPayLaterPaymentStrategy from './bigcommerce-payments-paylater-payment-strategy';\n\nconst createBigCommercePaymentsPayLaterPaymentStrategy: PaymentStrategyFactory<\n    BigCommercePaymentsPayLaterPaymentStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsPayLaterPaymentStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n        new LoadingIndicator({\n            containerStyles: LOADING_INDICATOR_STYLES,\n        }),\n        createBigCommercePaymentsSdk(),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsPayLaterPaymentStrategy, [\n    { id: 'bigcommerce_payments_paylater' },\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-ratepay/bigcommerce-payments-ratepay-initialize-options.ts",
    "content": "import { BirthDate } from '../bigcommerce-payments-types';\n\nexport interface BigCommercePaymentsRatePayPaymentInitializeOptions {\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    container: string;\n\n    /**\n     * The CSS selector of a container where the legal text should be inserted into.\n     */\n    legalTextContainer: string;\n\n    /**\n     * The CSS selector of a container where loading indicator should be rendered\n     */\n    loadingContainerId: string;\n    /**\n     * A callback that gets form values\n     */\n    getFieldsValues?(): {\n        ratepayBirthDate: BirthDate;\n        ratepayPhoneNumber: string;\n        ratepayPhoneCountryCode: string;\n    };\n\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: unknown): void;\n}\n\nexport interface WithBigCommercePaymentsRatePayPaymentInitializeOptions {\n    bigcommerce_payments_ratepay?: BigCommercePaymentsRatePayPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-ratepay/bigcommerce-payments-ratepay-payment-strategy.spec.ts",
    "content": "import {\n    BillingAddress,\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsHostWindow,\n    PayPalOrderStatus,\n    PayPalSDK,\n} from '../bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsIntegrationServiceMock,\n    getBigCommercePaymentsRatePayPaymentMethod,\n    getPayPalSDKMock,\n} from '../mocks';\n\nimport { BigCommercePaymentsRatePayPaymentInitializeOptions } from './bigcommerce-payments-ratepay-initialize-options';\nimport BigCommercePaymentsRatePayPaymentStrategy from './bigcommerce-payments-ratepay-payment-strategy';\n\ndescribe('BigCommercePaymentsRatePayPaymentStrategy', () => {\n    let billingAddress: BillingAddress;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n    let paypalSdk: PayPalSDK;\n    let strategy: BigCommercePaymentsRatePayPaymentStrategy;\n    let loadingIndicator: LoadingIndicator;\n\n    const bigCommercePaymentsRatePayMethodsOptions: BigCommercePaymentsRatePayPaymentInitializeOptions =\n        {\n            container: '#checkout-payment-continue',\n            legalTextContainer: 'legal-text-container',\n            loadingContainerId: 'checkout-page-container-id',\n            getFieldsValues: () => {\n                return {\n                    ratepayBirthDate: {\n                        getDate: () => 1,\n                        getMonth: () => 1,\n                        getFullYear: () => 2000,\n                    },\n                    ratepayPhoneNumber: '234343434',\n                    ratepayPhoneCountryCode: '49',\n                };\n            },\n        };\n\n    const initializationOptions: PaymentInitializeOptions = {\n        methodId: 'ratepay',\n        gatewayId: 'bigcommerce_payments_apms',\n        bigcommerce_payments_ratepay: bigCommercePaymentsRatePayMethodsOptions,\n    };\n\n    beforeEach(() => {\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        loadingIndicator = new LoadingIndicator();\n\n        strategy = new BigCommercePaymentsRatePayPaymentStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n            loadingIndicator,\n            0,\n        );\n\n        jest.spyOn(loadingIndicator, 'show').mockReturnValue(undefined);\n        jest.spyOn(loadingIndicator, 'hide').mockReturnValue(undefined);\n\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getOrderStatus').mockResolvedValue(\n            PayPalOrderStatus.PollingStop,\n        );\n        jest.spyOn(document, 'getElementById').mockImplementation((id) => {\n            if (id === 'legal-text-container') {\n                const el = document.createElement('div');\n\n                el.innerHTML = 'Mocked legal text';\n\n                return el;\n            }\n\n            return null;\n        });\n\n        paypalSdk = getPayPalSDKMock();\n        paypalSdk.Legal.FUNDING = {\n            PAY_UPON_INVOICE: 'PAY_UPON_INVOICE',\n        };\n\n        paymentMethod = getBigCommercePaymentsRatePayPaymentMethod();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getBillingAddressOrThrow',\n        ).mockReturnValue(billingAddress);\n\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockResolvedValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockResolvedValue(\n            '1eddfd',\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'submitPayment').mockResolvedValue();\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BigCommercePaymentsHostWindow).paypal;\n    });\n\n    it('creates an instance of the BigCommercePayments RatePay payment strategy', () => {\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsRatePayPaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if loadingContainerId is not provided', async () => {\n            const options = {\n                methodId: 'ratepay',\n                gatewayId: 'bigcommerce_payments_apms',\n                bigcommerce_payments_ratepay: {\n                    legalTextContainer: 'legal-text-container',\n                    container: '#checkout-payment-continue',\n                },\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if gatewayId is not provided', async () => {\n            const options = {\n                methodId: 'ratepay',\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if options.bigcommerce_payments_ratepay is not provided', async () => {\n            const options = {\n                methodId: 'ratepay',\n                gatewayId: 'bigcommerce_payments_apms',\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if container is not provided', async () => {\n            const options = {\n                methodId: 'ratepay',\n                gatewayId: 'bigcommerce_payments_apms',\n                bigcommerce_payments_ratepay: {\n                    legalTextContainer: 'legal-text-container',\n                },\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if legalTextContainer is not provided', async () => {\n            const options = {\n                methodId: 'ratepay',\n                gatewayId: 'bigcommerce_payments_apms',\n                bigcommerce_payments_ratepay: {\n                    container: '#checkout-payment-continue',\n                },\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if merchantId is not provided', async () => {\n            paymentMethod.initializationData.merchantId = '';\n\n            const options = {\n                methodId: 'ratepay',\n                gatewayId: 'bigcommerce_payments_apms',\n                bigcommerce_payments_ratepay: {\n                    container: '#checkout-payment-continue',\n                    legalTextContainer: 'legal-text-container',\n                },\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n    });\n\n    describe('#toggleLoadingIndicator', () => {\n        it('shows loading indicator on execute', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'bigcommerce_payments_apms',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n\n            expect(loadingIndicator.show).toHaveBeenCalled();\n        });\n\n        it('hides loading indicator when error occurs', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'bigcommerce_payments_apms',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            try {\n                await strategy.execute(payload);\n                await new Promise((_resolve, reject) => process.nextTick(reject));\n            } catch (error: unknown) {\n                expect(loadingIndicator.hide).toHaveBeenCalled();\n            }\n        });\n    });\n\n    describe('#createFraudnetScript', () => {\n        it('add fraudNet script to document', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const fraudNetScript = document.querySelectorAll(\n                '[fncls = \"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\"]',\n            );\n\n            expect(fraudNetScript).toBeDefined();\n        });\n\n        it('add another needed fraudNet script', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const script = document.querySelector('script[src=\"https://c.paypal.com/da/r/fb.js\"]');\n\n            expect(script).toBeDefined();\n        });\n    });\n\n    describe('#renderLegalText', () => {\n        it('throws error if legalTextContainerElement is not found', async () => {\n            jest.spyOn(document, 'getElementById').mockImplementation(() => null);\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('renders legal text', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const source = document.getElementsByTagName('html')[0].innerHTML;\n            const legalText = source.search(\n                'By clicking on the button, you agree to the terms of payment and performance of a risk check from the payment partner, Ratepay. You also agree to PayPal’s privacy statement. If your request to purchase upon invoice is accepted, the purchase price claim will be assigned to Ratepay, and you may only pay Ratepay, not the merchant.',\n            );\n\n            expect(legalText).toBeDefined();\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws an error if payload.payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if orderId is not defined', async () => {\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockResolvedValue('');\n\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'bigcommerce_payments_apms',\n                },\n            };\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('fetch order status', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'bigcommerce_payments_apms',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_payments_apmscheckout',\n                {\n                    metadataId: expect.any(String),\n                },\n            );\n\n            expect(bigCommercePaymentsIntegrationService.getOrderStatus).toHaveBeenCalledWith(\n                'bigcommerce_payments_apms',\n                { params: { useMetadata: true } },\n            );\n        });\n\n        it('submits order', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'bigcommerce_payments_apms',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('submits payment with correct data', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'bigcommerce_payments_apms',\n                },\n            };\n\n            const expectedPayload = {\n                methodId: 'ratepay',\n                paymentData: {\n                    formattedPayload: {\n                        device_info: null,\n                        method_id: 'ratepay',\n                        paypal_account: {\n                            order_id: '1eddfd',\n                        },\n                        rate_pay: {\n                            birth_date: '2000-02-01',\n                            phone: {\n                                country_code: undefined,\n                                national_number: '234343434',\n                            },\n                        },\n                        set_as_default_stored_instrument: null,\n                        vault_payment_instrument: null,\n                    },\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayload);\n        });\n\n        it('initialize polling mechanism', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'bigcommerce_payments_apms',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.getOrderStatus).toHaveBeenCalled();\n        });\n\n        it('stop polling mechanism if corresponding status received', async () => {\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'getOrderStatus').mockResolvedValue(\n                PayPalOrderStatus.PollingError,\n            );\n\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'bigcommerce_payments_apms',\n                },\n            };\n\n            jest.spyOn(global, 'clearTimeout');\n\n            try {\n                await strategy.initialize(initializationOptions);\n                await strategy.execute(payload);\n            } catch (e) {\n                expect(clearTimeout).toHaveBeenCalled();\n            }\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n\n        it('deinitialize polling mechanism', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'bigcommerce_payments_apms',\n                },\n            };\n\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'getOrderStatus').mockResolvedValue(\n                PayPalOrderStatus.PollingStop,\n            );\n\n            jest.spyOn(document, 'getElementById').mockImplementation((id) => {\n                if (id === 'legal-text-container') {\n                    const el = document.createElement('div');\n\n                    el.remove = jest.fn();\n\n                    return el;\n                }\n\n                return null;\n            });\n            jest.spyOn(global, 'clearTimeout');\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n            await strategy.deinitialize();\n\n            expect(clearTimeout).toHaveBeenCalled();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-ratepay/bigcommerce-payments-ratepay-payment-strategy.ts",
    "content": "import { noop } from 'lodash';\n\nimport {\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    TimeoutError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsInitializationData,\n    BirthDate,\n    PayPalOrderStatus,\n} from '../bigcommerce-payments-types';\n\nimport {\n    BigCommercePaymentsRatePayPaymentInitializeOptions,\n    WithBigCommercePaymentsRatePayPaymentInitializeOptions,\n} from './bigcommerce-payments-ratepay-initialize-options';\n\nconst POLLING_INTERVAL = 3000;\nconst MAX_POLLING_TIME = 300000;\n\nexport default class BigCommercePaymentsRatePayPaymentStrategy implements PaymentStrategy {\n    private guid?: string;\n    private bigcommerce_payments_ratepay?: BigCommercePaymentsRatePayPaymentInitializeOptions;\n    private loadingIndicatorContainer?: string;\n    private pollingTimer = 0;\n    private stopPolling = noop;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\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 & WithBigCommercePaymentsRatePayPaymentInitializeOptions,\n    ): Promise<void> {\n        const { gatewayId, methodId, bigcommerce_payments_ratepay } = options;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!gatewayId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.gatewayId\" argument is not provided.',\n            );\n        }\n\n        if (!bigcommerce_payments_ratepay) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments_ratepay\" argument is not provided.`,\n            );\n        }\n\n        const { legalTextContainer, container, loadingContainerId } = bigcommerce_payments_ratepay;\n\n        if (!container) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.container\" argument is not provided.`,\n            );\n        }\n\n        if (!legalTextContainer) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.legalTextContainer\" argument is not provided.`,\n            );\n        }\n\n        if (!loadingContainerId) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.loadingContainerId\" argument is not provided.`,\n            );\n        }\n\n        this.loadingIndicatorContainer = loadingContainerId;\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(\n            methodId,\n            gatewayId,\n        );\n        const { merchantId } = paymentMethod.initializationData || {};\n\n        if (!merchantId) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because merchantId argument is not provided.`,\n            );\n        }\n\n        this.bigcommerce_payments_ratepay = bigcommerce_payments_ratepay;\n\n        await this.bigCommercePaymentsIntegrationService.loadPayPalSdk(methodId);\n\n        this.createFraudNetScript(merchantId, methodId, gatewayId);\n\n        this.loadFraudnetConfig();\n\n        this.renderLegalText(legalTextContainer, container);\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n\n        const { getFieldsValues } = this.bigcommerce_payments_ratepay || {};\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        if (!getFieldsValues || typeof getFieldsValues !== 'function') {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.getFieldsValues\" argument is not provided.`,\n            );\n        }\n\n        this.toggleLoadingIndicator(true);\n\n        try {\n            const orderId = await this.bigCommercePaymentsIntegrationService.createOrder(\n                'bigcommerce_payments_apmscheckout',\n                { metadataId: this.guid },\n            );\n\n            const { ratepayBirthDate, ratepayPhoneNumber, ratepayPhoneCountryCode } =\n                getFieldsValues();\n\n            const paymentData = {\n                formattedPayload: {\n                    vault_payment_instrument: null,\n                    set_as_default_stored_instrument: null,\n                    device_info: null,\n                    method_id: payment.methodId,\n                    rate_pay: {\n                        birth_date: this.normalizeDate(ratepayBirthDate),\n                        phone: {\n                            national_number: ratepayPhoneNumber,\n                            country_code: ratepayPhoneCountryCode.split('+')[1],\n                        },\n                    },\n                    paypal_account: {\n                        order_id: orderId,\n                    },\n                },\n            };\n\n            await this.paymentIntegrationService.submitOrder(order, options);\n            await this.paymentIntegrationService.submitPayment({\n                methodId: payment.methodId,\n                paymentData,\n            });\n\n            return await new Promise((resolve, reject) => {\n                this.initializePollingMechanism(\n                    payment.methodId,\n                    resolve,\n                    reject,\n                    payment.gatewayId,\n                );\n            });\n        } catch (error: unknown) {\n            this.handleError(error);\n\n            return new Promise((_resolve, reject) => reject());\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        const { legalTextContainer } = this.bigcommerce_payments_ratepay || {};\n        const fraudNetScript = document.querySelectorAll('[data-id=\"fraudnetScript\"]')[0];\n        const fraudNetConfig = document.querySelectorAll('[data-id=\"fraudnetConfig\"]')[0];\n\n        this.deinitializePollingMechanism();\n\n        fraudNetScript.remove();\n        fraudNetConfig.remove();\n\n        if (legalTextContainer) {\n            const legalTextContainerElement = document.getElementById(legalTextContainer);\n\n            legalTextContainerElement?.remove();\n        }\n\n        return Promise.resolve();\n    }\n\n    private normalizeDate(date: BirthDate) {\n        const formattedDate = this.formatDate(date.getDate());\n        const formattedMonth = this.formatDate(date.getMonth() + 1);\n\n        return `${date.getFullYear()}-${formattedMonth}-${formattedDate}`;\n    }\n\n    private formatDate(date: number): string {\n        return `${date < 10 ? 0 : ''}${date}`;\n    }\n\n    private renderLegalText(legalTextContainerElementId: string, container: string) {\n        const legalTextContainerId = legalTextContainerElementId;\n        const buttonContainerId = container.split('#')[1];\n        const buttonContainer = document.getElementById(buttonContainerId);\n        const buttonContainerParent = buttonContainer?.parentNode;\n        const legalTextContainer = document.createElement('div');\n\n        legalTextContainer.style.marginBottom = '20px';\n        legalTextContainer.setAttribute('id', legalTextContainerId);\n        buttonContainerParent?.prepend(legalTextContainer);\n\n        const bigCommercePaymentsSdk =\n            this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow();\n        const ratePayButton = bigCommercePaymentsSdk.Legal({\n            fundingSource: bigCommercePaymentsSdk.Legal.FUNDING.PAY_UPON_INVOICE,\n        });\n        const legalTextContainerElement = document.getElementById(legalTextContainerId);\n\n        if (legalTextContainerElement) {\n            ratePayButton.render(`#${legalTextContainerId}`);\n        } else {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"legalTextContainerElement\" argument is not found.`,\n            );\n        }\n    }\n\n    private handleError(error: unknown): void {\n        const { onError } = this.bigcommerce_payments_ratepay || {};\n\n        this.resetPollingMechanism();\n        this.toggleLoadingIndicator(false);\n\n        if (onError && typeof onError === 'function') {\n            onError(error);\n        }\n    }\n\n    private createFraudNetScript(merchantId: string, methodId: string, gatewayId: string) {\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId, gatewayId);\n        const { testMode } = paymentMethod.config;\n        const scriptElement = document.createElement('script');\n\n        scriptElement.setAttribute('type', 'application/json');\n        scriptElement.setAttribute('fncls', 'fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99');\n        scriptElement.setAttribute('data-id', 'fraudnetScript');\n        this.guid = this.generateGUID();\n\n        const fraudNetConfig = {\n            f: this.guid,\n            s: `${merchantId}_checkout-page`,\n            sandbox: testMode,\n        };\n\n        scriptElement.innerHTML = JSON.stringify(fraudNetConfig);\n        document.body.appendChild(scriptElement);\n    }\n\n    private generateGUID() {\n        let guid = '';\n        const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n        for (let i = 0; i < 32; i += 1) {\n            const randomIndex = Math.floor(Math.random() * characters.length);\n\n            guid += characters[randomIndex];\n        }\n\n        return guid;\n    }\n\n    private loadFraudnetConfig() {\n        const script = document.createElement('script');\n\n        script.setAttribute('data-id', 'fraudnetConfig');\n        script.src = 'https://c.paypal.com/da/r/fb.js';\n        document.body.appendChild(script);\n    }\n\n    private async reinitializeStrategy(\n        options: PaymentInitializeOptions & WithBigCommercePaymentsRatePayPaymentInitializeOptions,\n    ): Promise<void> {\n        await this.deinitialize();\n        await this.initialize(options);\n    }\n\n    /**\n     *\n     * Polling mechanism\n     *\n     *\n     * */\n    private async initializePollingMechanism(\n        methodId: string,\n        resolvePromise: () => void,\n        rejectPromise: () => void,\n        gatewayId?: string,\n    ): Promise<void> {\n        await new Promise<void>((resolve, reject) => {\n            const timeout = setTimeout(resolve, this.pollingInterval);\n\n            this.stopPolling = () => {\n                clearTimeout(timeout);\n                this.toggleLoadingIndicator(false);\n\n                return reject();\n            };\n        });\n\n        try {\n            this.pollingTimer += this.pollingInterval;\n\n            const orderStatus = await this.bigCommercePaymentsIntegrationService.getOrderStatus(\n                'bigcommerce_payments_apms',\n                {\n                    params: {\n                        useMetadata: true,\n                    },\n                },\n            );\n\n            const isOrderApproved = orderStatus === PayPalOrderStatus.PollingStop;\n            const isPollingError = orderStatus === PayPalOrderStatus.PollingError;\n\n            if (isOrderApproved) {\n                this.deinitializePollingMechanism();\n\n                return resolvePromise();\n            }\n\n            if (isPollingError) {\n                return rejectPromise();\n            }\n\n            if (!isOrderApproved && this.pollingTimer < this.maxPollingIntervalTime) {\n                return await this.initializePollingMechanism(\n                    methodId,\n                    resolvePromise,\n                    rejectPromise,\n                    gatewayId,\n                );\n            }\n\n            await this.reinitializeStrategy({\n                methodId,\n                gatewayId,\n                bigcommerce_payments_ratepay: this.bigcommerce_payments_ratepay,\n            });\n\n            this.handleError(new TimeoutError());\n        } catch (error) {\n            this.handleError(error);\n            rejectPromise();\n        }\n    }\n\n    private deinitializePollingMechanism(): void {\n        this.stopPolling();\n        this.pollingTimer = 0;\n    }\n\n    private resetPollingMechanism(): void {\n        this.deinitializePollingMechanism();\n    }\n\n    /**\n     *\n     * Loading Indicator methods\n     *\n     * */\n    private toggleLoadingIndicator(isLoading: boolean): void {\n        if (isLoading && this.loadingIndicatorContainer) {\n            this.loadingIndicator.show(this.loadingIndicatorContainer);\n        } else {\n            this.loadingIndicator.hide();\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-ratepay/create-bigcommerce-payments-ratepay-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsRatePayPaymentStrategy from './bigcommerce-payments-ratepay-payment-strategy';\nimport createBigCommercePaymentsRatePayPaymentStrategy from './create-bigcommerce-payments-ratepay-payment-strategy';\n\ndescribe('createBigCommercePaymentsRatePayPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates bigcommerce payments ratepay payment strategy', () => {\n        const strategy = createBigCommercePaymentsRatePayPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsRatePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-ratepay/create-bigcommerce-payments-ratepay-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { LOADING_INDICATOR_STYLES } from '../bigcommerce-payments-constants';\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsRatePayPaymentStrategy from './bigcommerce-payments-ratepay-payment-strategy';\n\nconst createBigCommercePaymentsRatePayPaymentStrategy: PaymentStrategyFactory<\n    BigCommercePaymentsRatePayPaymentStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsRatePayPaymentStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n        new LoadingIndicator({\n            containerStyles: { ...LOADING_INDICATOR_STYLES, position: 'fixed' },\n        }),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsRatePayPaymentStrategy, [\n    { gateway: 'bigcommerce_payments_apms', id: 'ratepay' },\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-redirect-alternative-methods/bigcomemrce-payments-redirect-alternative-methods-payment-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the BigCommercePayments payment\n * method making payment with Klarna.\n *\n *\n * Also, BCP (also known as BigCommercePayments) requires specific options to initialize the PayPal Klarna flow\n *\n * ```js\n * service.initializePayment({\n *     gatewayId: 'bigcommerce_payments_apms',\n *     methodId: 'klarna',\n *     bigcommerce_payments_apms: {\n * // Callback for handling error that occurs when a buyer approves payment\n *         onError: (error) => {\n *         // Example function\n *             this.handleError(\n *                {\n *                   payment: { methodId: 'bigcommerce_payments_apms', }\n *               }\n *            );\n *         },\n *     },\n * });\n * ```\n */\nexport default interface BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions {\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: Error | unknown): void;\n}\n\nexport interface WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions {\n    bigcommerce_payments_apms?: BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-redirect-alternative-methods/bigcomemrce-payments-redirect-alternative-methods-payment-strategy.ts",
    "content": "import { isRedirectError } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions, {\n    WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions,\n} from './bigcomemrce-payments-redirect-alternative-methods-payment-initialize-options';\n\nexport default class BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy\n    implements PaymentStrategy\n{\n    private bigCommercePaymentsAlternativeMethods?: BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\n    ) {}\n\n    initialize(\n        options: PaymentInitializeOptions &\n            WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions,\n    ): Promise<void> {\n        const { gatewayId, methodId, bigcommerce_payments_apms } = options;\n\n        this.bigCommercePaymentsAlternativeMethods = bigcommerce_payments_apms;\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        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, gatewayId } = payment;\n\n        try {\n            const orderId = await this.bigCommercePaymentsIntegrationService.createOrder(\n                'bigcommerce_payments_apms',\n                {\n                    gatewayId: 'bigcommerce_payments_apms',\n                    methodId,\n                },\n            );\n\n            const paymentData = {\n                formattedPayload: {\n                    vault_payment_instrument: null,\n                    set_as_default_stored_instrument: null,\n                    device_info: null,\n                    method_id: methodId,\n                    paypal_account: {\n                        order_id: orderId,\n                    },\n                },\n            };\n\n            await this.paymentIntegrationService.submitOrder(order, options);\n            await this.paymentIntegrationService.submitPayment({\n                methodId,\n                gatewayId,\n                paymentData,\n            });\n        } catch (error: unknown) {\n            if (isRedirectError(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                    reject();\n                });\n            }\n\n            this.handleError(error);\n\n            return Promise.reject(error);\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private handleError(error: unknown) {\n        const { onError } = this.bigCommercePaymentsAlternativeMethods || {};\n\n        if (onError && typeof onError === 'function') {\n            onError(error);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-redirect-alternative-methods/bigcommerce-payments-redirect-alternative-methods-payment-strategy.spec.ts",
    "content": "import {\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport { getBigCommercePaymentsIntegrationServiceMock } from '../mocks';\n\nimport BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions from './bigcomemrce-payments-redirect-alternative-methods-payment-initialize-options';\nimport BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy from './bigcomemrce-payments-redirect-alternative-methods-payment-strategy';\n\ndescribe('BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy', () => {\n    let strategy: BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let originalLocation: Location;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n\n    const defaultMethodId = 'klarna';\n    const defaultGatewayId = 'bigcommerce_payments';\n    const klarnaOrderId = 'orderId123';\n\n    const bigCommercePaymentsKlarnaOptions: BigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions =\n        {\n            onError: jest.fn(),\n        };\n\n    const initializationOptions: PaymentInitializeOptions = {\n        methodId: defaultMethodId,\n        gatewayId: defaultGatewayId,\n        bigcommerce_payments_apms: bigCommercePaymentsKlarnaOptions,\n    };\n\n    beforeEach(() => {\n        originalLocation = window.location;\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n\n        strategy = new BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockResolvedValue(\n            klarnaOrderId,\n        );\n\n        Object.defineProperty(window, 'location', {\n            value: { replace: jest.fn() },\n            writable: true,\n        });\n    });\n\n    afterEach(() => {\n        Object.defineProperty(window, 'location', {\n            value: originalLocation,\n            writable: true,\n        });\n\n        jest.clearAllMocks();\n    });\n\n    it('creates an instance of the BigCommercePayments Redirect Alternative Methods payment strategy', () => {\n        expect(strategy).toBeInstanceOf(\n            BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy,\n        );\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if gatewayId is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws an error if payload.payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('submits payment with provided data', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                    gatewayId: defaultGatewayId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: defaultMethodId,\n                gatewayId: defaultGatewayId,\n                paymentData: {\n                    formattedPayload: {\n                        vault_payment_instrument: null,\n                        set_as_default_stored_instrument: null,\n                        device_info: null,\n                        method_id: defaultMethodId,\n                        paypal_account: {\n                            order_id: klarnaOrderId,\n                        },\n                    },\n                },\n            });\n        });\n\n        it('calls onError callback for non-redirect errors', async () => {\n            const error = new Error('Payment failed');\n            const mockOnError = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_apms: { onError: mockOnError },\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                    gatewayId: defaultGatewayId,\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(error);\n\n            await expect(strategy.execute(payload)).rejects.toThrow('Payment failed');\n            expect(mockOnError).toHaveBeenCalledWith(error);\n        });\n\n        it('handles redirect error by calling window.location.replace and rejecting', async () => {\n            const redirectError = {\n                body: {\n                    additional_action_required: {\n                        data: {\n                            redirect_url: 'mocked_redirect_url',\n                        },\n                    },\n                },\n            };\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                    gatewayId: defaultGatewayId,\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(redirectError);\n\n            await expect(strategy.execute(payload)).rejects.toBeUndefined();\n            expect(window.location.replace).toHaveBeenCalledWith('mocked_redirect_url');\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-redirect-alternative-methods/create-bigcommerce-payments-redirect-alternative-methods-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy from './bigcomemrce-payments-redirect-alternative-methods-payment-strategy';\nimport createBigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy from './create-bigcommerce-payments-redirect-alternative-methods-payment-strategy';\n\ndescribe('createBigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy', () => {\n        const strategy =\n            createBigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy(\n                paymentIntegrationService,\n            );\n\n        expect(strategy).toBeInstanceOf(\n            BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy,\n        );\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-redirect-alternative-methods/create-bigcommerce-payments-redirect-alternative-methods-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy from './bigcomemrce-payments-redirect-alternative-methods-payment-strategy';\n\nconst createBigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy: PaymentStrategyFactory<\n    BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n    );\n\nexport default toResolvableModule(\n    createBigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy,\n    [\n        { gateway: 'bigcommerce_payments_apms', id: 'klarna' },\n        { gateway: 'bigcommerce_payments_apms', id: 'afterpay' },\n    ],\n);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-request-sender.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { getResponse } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsRequestSender from './bigcommerce-payments-request-sender';\n\ndescribe('BigCommercePaymentsRequestSender', () => {\n    let requestSender: RequestSender;\n    let bigCommercePaymentsRequestSender: BigCommercePaymentsRequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        bigCommercePaymentsRequestSender = new BigCommercePaymentsRequestSender(requestSender);\n\n        const requestResponseMock = getResponse({ orderId: 123 });\n\n        jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(requestResponseMock));\n        jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(requestResponseMock));\n        jest.spyOn(requestSender, 'put').mockReturnValue(Promise.resolve(requestResponseMock));\n    });\n\n    it('creates order with provided data', async () => {\n        const requestBody = {\n            cartId: 'abc',\n            instrumentId: 'vaultedInstrumentId',\n        };\n\n        await bigCommercePaymentsRequestSender.createOrder('bigcommerce_payments', requestBody);\n\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        expect(requestSender.post).toHaveBeenCalledWith(\n            '/api/storefront/payment/bigcommerce_payments',\n            expect.objectContaining({\n                body: requestBody,\n                headers,\n            }),\n        );\n    });\n\n    it('update order with provided data', async () => {\n        const shippingOptionMock = {\n            additionalDescription: 'Additional description',\n            description: 'Main description',\n            id: '1',\n            isRecommended: true,\n            imageUrl: '',\n            cost: 1,\n            transitTime: '123',\n            type: 'type',\n        };\n\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        const updateOrderRequestBody = {\n            availableShippingOptions: [shippingOptionMock],\n            cartId: 'abc',\n            selectedShippingOption: shippingOptionMock,\n        };\n\n        await bigCommercePaymentsRequestSender.updateOrder(updateOrderRequestBody);\n\n        expect(requestSender.put).toHaveBeenCalledWith(\n            '/api/storefront/initialization/bigcommerce_payments',\n            expect.objectContaining({\n                body: updateOrderRequestBody,\n                headers,\n            }),\n        );\n    });\n\n    it('requests order status', async () => {\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        await bigCommercePaymentsRequestSender.getOrderStatus();\n\n        expect(requestSender.get).toHaveBeenCalledWith(\n            '/api/storefront/initialization/bigcommerce_payments',\n            expect.objectContaining({\n                headers,\n            }),\n        );\n    });\n\n    it('requests order status with proper data', async () => {\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        await bigCommercePaymentsRequestSender.getOrderStatus('bigcommerce_payments_apms', {\n            params: { useMetaData: true },\n        });\n\n        expect(requestSender.get).toHaveBeenCalledWith(\n            '/api/storefront/initialization/bigcommerce_payments_apms',\n            expect.objectContaining({\n                headers,\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-request-sender.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    PayPalCreateOrderRequestBody,\n    PayPalOrderData,\n    PayPalOrderStatusData,\n    PayPalUpdateOrderRequestBody,\n    PayPalUpdateOrderResponse,\n} from './bigcommerce-payments-types';\n\nexport default class BigCommercePaymentsRequestSender {\n    constructor(private requestSender: RequestSender) {}\n\n    async createOrder(\n        providerId: string,\n        requestBody: Partial<PayPalCreateOrderRequestBody>,\n    ): Promise<PayPalOrderData> {\n        const url = `/api/storefront/payment/${providerId}`;\n        const body = requestBody;\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        const res = await this.requestSender.post<PayPalOrderData>(url, { headers, body });\n\n        return res.body;\n    }\n\n    async updateOrder(\n        requestBody: PayPalUpdateOrderRequestBody,\n    ): Promise<PayPalUpdateOrderResponse> {\n        const url = `/api/storefront/initialization/bigcommerce_payments`;\n        const body = requestBody;\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        const res = await this.requestSender.put<PayPalUpdateOrderResponse>(url, { headers, body });\n\n        return res.body;\n    }\n\n    async getOrderStatus(\n        methodId = 'bigcommerce_payments',\n        options?: RequestOptions,\n    ): Promise<PayPalOrderStatusData> {\n        const url = `/api/storefront/initialization/${methodId}`;\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        const res = await this.requestSender.get<PayPalOrderStatusData>(url, {\n            headers,\n            ...options,\n        });\n\n        return res.body;\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-script-loader.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsScriptLoader from './bigcommerce-payments-script-loader';\nimport { BigCommercePaymentsHostWindow, PayPalSDK } from './bigcommerce-payments-types';\nimport { getBigCommercePaymentsPaymentMethod, getPayPalSDKMock } from './mocks';\n\ndescribe('BigCommercePaymentsScriptLoader', () => {\n    let loader: ScriptLoader;\n    let paypalLoader: BigCommercePaymentsScriptLoader;\n    let paypalSdk: PayPalSDK;\n    let paymentMethod: PaymentMethod;\n\n    beforeEach(() => {\n        loader = createScriptLoader();\n        paymentMethod = getBigCommercePaymentsPaymentMethod();\n        paypalSdk = getPayPalSDKMock();\n\n        jest.spyOn(loader, 'loadScript').mockImplementation(() => {\n            (window as BigCommercePaymentsHostWindow).bigCommercePaymentsPayPalSDK = paypalSdk;\n\n            return Promise.resolve();\n        });\n\n        paypalLoader = new BigCommercePaymentsScriptLoader(loader);\n    });\n\n    afterEach(() => {\n        (window as BigCommercePaymentsHostWindow).bigCommercePaymentsPayPalSDK = undefined;\n    });\n\n    it('throws an error if initializationData is missing', async () => {\n        const paymentMethodProp = {\n            ...paymentMethod,\n            initializationData: undefined,\n        };\n\n        try {\n            await paypalLoader.getPayPalSDK(paymentMethodProp, 'USD');\n        } catch (error) {\n            expect(error).toBeInstanceOf(MissingDataError);\n        }\n    });\n\n    it('loads PayPalSDK with default configuration', async () => {\n        const output = await paypalLoader.getPayPalSDK(paymentMethod, 'USD');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n        expect(output).toEqual(paypalSdk);\n    });\n\n    it('loads PayPalSDK script every time if force load flag is provided', async () => {\n        const bigCommercePaymentsCreditPaymentMethod = {\n            ...paymentMethod,\n            id: 'bigcommerce_payments_creditcards',\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethod, 'USD');\n        await paypalLoader.getPayPalSDK(bigCommercePaymentsCreditPaymentMethod, 'USD', false, true);\n\n        expect(loader.loadScript).toHaveBeenCalledTimes(2);\n    });\n\n    it('loads PayPalSDK script with EUR currency', async () => {\n        await paypalLoader.getPayPalSDK(paymentMethod, 'EUR');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=EUR&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads BigCommercePayments script with disabled card funding', async () => {\n        await paypalLoader.getPayPalSDK(paymentMethod, 'USD');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads BigCommercePayments script with enabled credit funding', async () => {\n        const paymentMethodProp = {\n            ...paymentMethod,\n            initializationData: {\n                ...paymentMethod.initializationData,\n                isPayPalCreditAvailable: true,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodProp, 'USD');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=credit%2Cpaylater&disable-funding=card%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads BigCommercePayments script with disabled credit funding', async () => {\n        const paymentMethodProp = {\n            ...paymentMethod,\n            initializationData: {\n                ...paymentMethod.initializationData,\n                isPayPalCreditAvailable: false,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodProp, 'USD');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads BigCommercePayments script with enabled Venmo funding', async () => {\n        const paymentMethodProp = {\n            ...paymentMethod,\n            initializationData: {\n                ...paymentMethod.initializationData,\n                isVenmoEnabled: true,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodProp, 'USD');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=venmo&disable-funding=card%2Ccredit%2Cpaylater&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads BigCommercePayments script with disabled Venmo funding', async () => {\n        const paymentMethodProp = {\n            ...paymentMethod,\n            initializationData: {\n                ...paymentMethod.initializationData,\n                isVenmoEnabled: false,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodProp, 'USD');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads BigCommercePayments script with enabled several APMs (Klarna, Afterpay should not be included)', async () => {\n        const paymentMethodProp = {\n            ...paymentMethod,\n            initializationData: {\n                ...paymentMethod.initializationData,\n                availableAlternativePaymentMethods: [\n                    'bancontact',\n                    'giropay',\n                    'ideal',\n                    'mybank',\n                    'sofort',\n                    'sepa',\n                    'klarna',\n                    'afterpay',\n                ],\n                enabledAlternativePaymentMethods: [\n                    'bancontact',\n                    'giropay',\n                    'ideal',\n                    'klarna',\n                    'afterpay',\n                ],\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodProp, 'USD');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=bancontact%2Cgiropay%2Cideal&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo%2Cmybank%2Csofort%2Csepa&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads PayPalSDK script with commit flag as true', async () => {\n        await paypalLoader.getPayPalSDK(paymentMethod, 'USD', true);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads PayPalSDK script with commit flag as false', async () => {\n        await paypalLoader.getPayPalSDK(paymentMethod, 'USD', false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('successfully loads PayPalSDK script with commit flag as false if Skip Checkout feature off', async () => {\n        const paymentMethodMock = {\n            ...paymentMethod,\n            initializationData: {\n                ...paymentMethod.initializationData,\n                isHostedFormEnabled: false,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodMock, 'USD', false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('successfully enables all provided funding sources', async () => {\n        const paymentMethodMock = {\n            ...paymentMethod,\n            id: 'bigcommerce_payments_creditcards',\n            initializationData: {\n                ...paymentMethod.initializationData,\n                isHostedCheckoutEnabled: false,\n                isVenmoEnabled: true,\n                isPayPalCreditAvailable: true,\n                availableAlternativePaymentMethods: [],\n                enabledAlternativePaymentMethods: [],\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodMock, 'USD', false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('successfully loads paypal sdk with dev configuration', async () => {\n        const paymentMethodMock = {\n            ...paymentMethod,\n            id: 'bigcommerce_payments',\n            initializationData: {\n                ...paymentMethod.initializationData,\n                buyerCountry: 'UA',\n                isDeveloperModeApplicable: true,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodMock, 'USD', false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture&buyer-country=UA';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            'data-namespace': 'bigCommercePaymentsPayPalSDK',\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('successfully loads paypal sdk without nil values in configuration', async () => {\n        const paymentMethodMock = {\n            ...paymentMethod,\n            clientToken: '',\n            id: 'bigcommerce_payments',\n            initializationData: {\n                ...paymentMethod.initializationData,\n                attributionId: '',\n                merchantId: null,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodMock, 'USD', false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture';\n        const paypalSdkAttributes = { 'data-namespace': 'bigCommercePaymentsPayPalSDK' };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('throw error if unable to load Paypal script', async () => {\n        const expectedError = new PaymentMethodClientUnavailableError();\n\n        jest.spyOn(loader, 'loadScript').mockImplementation(() => {\n            throw expectedError;\n        });\n\n        try {\n            await paypalLoader.getPayPalSDK(paymentMethod, 'USD');\n        } catch (error) {\n            expect(error).toEqual(expectedError);\n        }\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    BigCommercePaymentsHostWindow,\n    BigCommercePaymentsInitializationData,\n    BigCommercePaymentsScriptParams,\n    ComponentsScriptType,\n    FundingType,\n    PayPalSDK,\n} from './bigcommerce-payments-types';\n\nexport default class BigCommercePaymentsScriptLoader {\n    private window: BigCommercePaymentsHostWindow;\n\n    constructor(private scriptLoader: ScriptLoader) {\n        this.window = window;\n    }\n\n    async getPayPalSDK(\n        paymentMethod: PaymentMethod<BigCommercePaymentsInitializationData>,\n        currencyCode: string,\n        initializesOnCheckoutPage?: boolean,\n        forceLoad?: boolean,\n    ): Promise<PayPalSDK> {\n        const paypalSdkScriptConfig = this.getPayPalSdkScriptConfigOrThrow(\n            paymentMethod,\n            currencyCode,\n            initializesOnCheckoutPage,\n        );\n\n        return this.loadPayPalSDK(paypalSdkScriptConfig, forceLoad);\n    }\n\n    private async loadPayPalSDK(\n        paypalSdkScriptConfig: BigCommercePaymentsScriptParams,\n        forceLoad = false,\n    ): Promise<PayPalSDK> {\n        if (!this.window.bigCommercePaymentsPayPalSDK || forceLoad) {\n            const options = this.transformConfig<BigCommercePaymentsScriptParams['options']>(\n                paypalSdkScriptConfig.options,\n            );\n            const attributes = this.transformConfig<BigCommercePaymentsScriptParams['attributes']>(\n                paypalSdkScriptConfig.attributes,\n            );\n\n            const paypalSdkUrl = 'https://www.paypal.com/sdk/js';\n            const scriptQuery = new URLSearchParams(options).toString();\n            const scriptSrc = `${paypalSdkUrl}?${scriptQuery}`;\n\n            await this.scriptLoader.loadScript(scriptSrc, { async: true, attributes });\n        }\n\n        if (!this.window.bigCommercePaymentsPayPalSDK) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.window.bigCommercePaymentsPayPalSDK;\n    }\n\n    private getPayPalSdkScriptConfigOrThrow(\n        paymentMethod: PaymentMethod<BigCommercePaymentsInitializationData>,\n        currencyCode: string,\n        initializesOnCheckoutPage = true,\n    ): BigCommercePaymentsScriptParams {\n        const { id, clientToken, initializationData } = paymentMethod;\n\n        if (!initializationData?.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            intent,\n            clientId,\n            merchantId,\n            buyerCountry,\n            attributionId,\n            isVenmoEnabled,\n            isHostedCheckoutEnabled,\n            isPayPalCreditAvailable,\n            isDeveloperModeApplicable,\n            availableAlternativePaymentMethods = [],\n            enabledAlternativePaymentMethods = [],\n            isGooglePayEnabled,\n        } = initializationData;\n\n        const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n        const shouldEnableCard = id === 'bigcommerce_payments_creditcards';\n        const enableCardFunding = shouldEnableCard ? ['card'] : [];\n        const disableCardFunding = !shouldEnableCard ? ['card'] : [];\n\n        const enableCreditFunding = isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n        const disableCreditFunding = !isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n\n        const enableVenmoFunding = isVenmoEnabled ? ['venmo'] : [];\n        const disableVenmoFunding = !isVenmoEnabled ? ['venmo'] : [];\n        const disableAPMsFunding = availableAlternativePaymentMethods.filter(\n            (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n        );\n        const googlePayComponent: ComponentsScriptType = isGooglePayEnabled ? ['googlepay'] : [];\n        const cardFieldsComponent: ComponentsScriptType = initializesOnCheckoutPage\n            ? ['card-fields']\n            : [];\n        const disableFunding: FundingType[] = this.filterFundingOptions([\n            ...disableCardFunding,\n            ...disableCreditFunding,\n            ...disableVenmoFunding,\n            ...disableAPMsFunding,\n        ]);\n        const enableFunding: FundingType[] = this.filterFundingOptions([\n            ...enableCardFunding,\n            ...enableCreditFunding,\n            ...enableVenmoFunding,\n            ...enabledAlternativePaymentMethods,\n        ]);\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                'enable-funding': enableFunding.length > 0 ? enableFunding : undefined,\n                'disable-funding': disableFunding.length > 0 ? disableFunding : undefined,\n                commit,\n                components: [\n                    'buttons',\n                    'hosted-fields',\n                    'payment-fields',\n                    'legal',\n                    ...googlePayComponent,\n                    ...cardFieldsComponent,\n                ],\n                currency: currencyCode,\n                intent,\n                ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n            },\n            attributes: {\n                'data-partner-attribution-id': attributionId,\n                'data-client-token': clientToken,\n                'data-namespace': 'bigCommercePaymentsPayPalSDK',\n            },\n        };\n    }\n\n    private filterFundingOptions(fundingOptions: FundingType[] | undefined): FundingType[] {\n        const fundingTypesToBeFiltered = ['klarna', 'afterpay'];\n\n        if (!fundingOptions) {\n            return [];\n        }\n\n        return fundingOptions.filter(\n            (fundingOption: FundingType) => !fundingTypesToBeFiltered.includes(fundingOption),\n        );\n    }\n\n    private transformConfig<T extends Record<string, unknown>>(config: T): Record<string, string> {\n        let transformedConfig = {};\n\n        const keys = Object.keys(config) as Array<keyof T>;\n\n        keys.forEach((key) => {\n            const value = config[key];\n\n            if (\n                value === undefined ||\n                value === null ||\n                value === '' ||\n                (Array.isArray(value) && value.length === 0)\n            ) {\n                return;\n            }\n\n            transformedConfig = {\n                ...transformedConfig,\n                [key]: Array.isArray(value) ? value.join(',') : value,\n            };\n        });\n\n        return transformedConfig;\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-types.ts",
    "content": "import { PayPalBNPLConfigurationItem } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    BuyNowCartRequestBody,\n    HostedInstrument,\n    ShippingOption,\n    VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n *\n * BigCommerce Payments Funding sources\n *\n */\nexport type FundingType = string;\n// TODO: rename BigCommercePaymentsSDKFunding to PayPalSDKFunding\nexport interface BigCommercePaymentsSDKFunding {\n    CARD: string;\n    PAYPAL: string;\n    CREDIT: string;\n    PAYLATER: string;\n    OXXO: string;\n    SEPA: string;\n    VENMO: string;\n}\n\n/**\n *\n * BigCommerce Payments SDK\n *\n */\n\nexport interface BigCommercePaymentsCardFieldsConfig {\n    inputEvents: {\n        onChange(data: BigCommercePaymentsCardFieldsState): void;\n        onFocus(data: BigCommercePaymentsCardFieldsState): void;\n        onBlur(data: BigCommercePaymentsCardFieldsState): void;\n        onInputSubmitRequest(data: BigCommercePaymentsCardFieldsState): void;\n    };\n    createVaultSetupToken?: (data: BigCommercePaymentsCardFieldsState) => void;\n    createOrder?: () => Promise<string>;\n    style: BigCommercePaymentsHostedFieldsRenderOptions['styles'];\n    onApprove(data: BigCommercePaymentsCardFieldsOnApproveData): void;\n    onError(): void;\n}\n\nexport interface BigCommercePaymentsCardFieldsOnApproveData {\n    vaultSetupToken?: string;\n    orderID: string;\n    liabilityShift?: LiabilityShiftEnum;\n}\n\nexport enum LiabilityShiftEnum {\n    Possible = 'POSSIBLE',\n    No = 'NO',\n    Unknown = 'UNKNOWN',\n    Yes = 'YES',\n}\n\ninterface BigCommercePaymentsCardFieldsFieldData {\n    isFocused: boolean;\n    isEmpty: boolean;\n    isValid: boolean;\n    isPotentiallyValid: boolean;\n}\n\ntype BigCommercePaymentsCardFieldsCard = BigCommercePaymentsHostedFieldsCard;\n\nexport interface BigCommercePaymentsCardFieldsState {\n    cards: BigCommercePaymentsCardFieldsCard[];\n    emittedBy: string;\n    isFormValid: boolean;\n    errors: string[];\n    fields: {\n        cardCvvField: BigCommercePaymentsCardFieldsFieldData;\n        cardNumberField: BigCommercePaymentsCardFieldsFieldData;\n        cardNameField?: BigCommercePaymentsCardFieldsFieldData;\n        cardExpiryField: BigCommercePaymentsCardFieldsFieldData;\n    };\n}\n\nexport interface BigCommercePaymentsFields {\n    render(container: HTMLElement | string): Promise<void>;\n    clear(): void;\n    removeClass(className: string): Promise<void>;\n    close(): Promise<void>;\n}\n\ninterface BigCommercePaymentsFieldsInitializationData {\n    placeholder?: string;\n}\n\nexport interface BigCommercePaymentsCardFields {\n    isEligible(): boolean;\n    CVVField(config?: BigCommercePaymentsFieldsInitializationData): BigCommercePaymentsFields;\n    ExpiryField(config?: BigCommercePaymentsFieldsInitializationData): BigCommercePaymentsFields;\n    NameField(config?: BigCommercePaymentsFieldsInitializationData): BigCommercePaymentsFields;\n    NumberField(config?: BigCommercePaymentsFieldsInitializationData): BigCommercePaymentsFields;\n    submit(config?: BigCommercePaymentsCardFieldsSubmitConfig): Promise<void>;\n    getState(): Promise<BigCommercePaymentsCardFieldsState>;\n}\n\nexport interface BigCommercePaymentsCardFieldsSubmitConfig {\n    billingAddress: {\n        company?: string;\n        addressLine1: string;\n        addressLine2?: string;\n        adminArea1: string; // State\n        adminArea2: string; // City\n        postalCode: string;\n        countryCode?: string;\n    };\n}\n\nexport interface PayPalSDK {\n    CardFields: (\n        data: BigCommercePaymentsCardFieldsConfig,\n    ) => Promise<BigCommercePaymentsCardFields>;\n    Googlepay: () => {\n        config: () => Promise<GooglePayConfig>;\n        confirmOrder: (arg0: {\n            orderId: string;\n            paymentMethodData: ConfirmOrderData;\n        }) => Promise<{ status: string }>;\n        initiatePayerAction: () => void;\n    };\n    FUNDING: BigCommercePaymentsSDKFunding;\n    HostedFields: {\n        isEligible(): boolean;\n        render(\n            data: BigCommercePaymentsHostedFieldsRenderOptions,\n        ): Promise<BigCommercePaymentsHostedFields>;\n    };\n    Legal: PayPalLegal & LegalFunding;\n    Buttons(options: BigCommercePaymentsButtonsOptions): BigCommercePaymentsButtons;\n    PaymentFields(\n        options: BigCommercePaymentsPaymentFieldsOptions,\n    ): BigCommercePaymentsPaymentFields;\n    Messages(options: BigCommercePaymentsMessagesOptions): BigCommercePaymentsMessages;\n}\n\nexport interface ConfirmOrderData {\n    tokenizationData: {\n        type: string;\n        token: string;\n    };\n    info: {\n        cardNetwork: string;\n        cardDetails: string;\n    };\n    type: string;\n}\n\nexport interface GooglePayConfig {\n    allowedPaymentMethods: AllowedPaymentMethods[];\n    apiVersion: number;\n    apiVersionMinor: number;\n    countryCode: string;\n    isEligible: boolean;\n    merchantInfo: {\n        merchantId: string;\n        merchantOrigin: string;\n    };\n}\n\nexport interface AllowedPaymentMethods {\n    type: string;\n    parameters: {\n        allowedAuthMethods: string[];\n        allowedCardNetworks: string[];\n        billingAddressRequired: boolean;\n        assuranceDetailsRequired: boolean;\n        billingAddressParameters: {\n            format: string;\n        };\n    };\n    tokenizationSpecification: {\n        type: string;\n        parameters: {\n            gateway: string;\n            gatewayMerchantId: string;\n        };\n    };\n}\n\nexport type PayPalLegal = (params: { fundingSource: string }) => {\n    render(container: string): void;\n};\n\nexport interface LegalFunding {\n    FUNDING: {\n        PAY_UPON_INVOICE: string;\n    };\n}\n\nexport interface BirthDate {\n    getFullYear(): number;\n    getDate(): number;\n    getMonth(): number;\n}\n\nexport interface BigCommercePaymentsScriptParams {\n    options: {\n        'client-id'?: string;\n        'merchant-id'?: string;\n        'buyer-country'?: string;\n        'disable-funding'?: FundingType[];\n        'enable-funding'?: FundingType[];\n        currency?: string;\n        commit?: boolean;\n        intent?: BigCommercePaymentsIntent;\n        components?: ComponentsScriptType;\n    };\n    attributes: {\n        'data-client-token'?: string;\n        'data-client-metadata-id'?: string;\n        'data-partner-attribution-id'?: string;\n        'data-user-id-token'?: string;\n        'data-namespace'?: string;\n    };\n}\n\nexport enum BigCommercePaymentsIntent {\n    AUTHORIZE = 'authorize',\n    CAPTURE = 'capture',\n}\n\nexport type ComponentsScriptType = Array<\n    | 'buttons'\n    | 'funding-eligibility'\n    | 'hosted-fields'\n    | 'messages'\n    | 'payment-fields'\n    | 'legal'\n    | 'googlepay'\n    | 'connect'\n    | 'card-fields'\n>;\n\nexport interface BigCommercePaymentsHostWindow extends Window {\n    bigCommercePaymentsPayPalSDK?: PayPalSDK;\n}\n\n/**\n *\n * BigCommerce Payments Initialization Data\n *\n */\nexport interface BigCommercePaymentsInitializationData {\n    attributionId?: string;\n    availableAlternativePaymentMethods: FundingType[];\n    buttonStyle?: PayPalButtonStyleOptions;\n    buyerCountry?: string;\n    clientId: string;\n    clientToken?: string;\n    enabledAlternativePaymentMethods: FundingType[];\n    isDeveloperModeApplicable?: boolean;\n    intent?: BigCommercePaymentsIntent;\n    isAcceleratedCheckoutEnabled?: boolean;\n    isHostedCheckoutEnabled?: boolean;\n    isPayPalCreditAvailable?: boolean;\n    isVenmoEnabled?: boolean;\n    isGooglePayEnabled?: boolean;\n    merchantId?: string;\n    orderId?: string;\n    shouldRenderFields?: boolean;\n    shouldRunAcceleratedCheckout?: boolean;\n    paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\n    isServerSideShippingCallbacksEnabled?: boolean;\n    paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[];\n}\n\n/**\n *\n * BigCommerce Payments BuyNow\n *\n */\nexport interface PayPalBuyNowInitializeOptions {\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\n}\n\n/**\n *\n * BigCommerce Payments Hosted Fields\n *\n */\nexport interface BigCommercePaymentsHostedFieldsRenderOptions {\n    fields?: {\n        number?: BigCommercePaymentsHostedFieldOption;\n        cvv?: BigCommercePaymentsHostedFieldOption;\n        expirationDate?: BigCommercePaymentsHostedFieldOption;\n    };\n    paymentsSDK?: boolean;\n    styles?: {\n        input?: { [key: string]: string };\n        '.invalid'?: { [key: string]: string };\n        '.valid'?: { [key: string]: string };\n        ':focus'?: { [key: string]: string };\n    };\n    createOrder(): Promise<string>;\n}\n\nexport interface BigCommercePaymentsHostedFieldOption {\n    selector: string;\n    placeholder?: string;\n}\n\nexport interface BigCommercePaymentsHostedFields {\n    submit(\n        options?: BigCommercePaymentsHostedFieldsSubmitOptions,\n    ): Promise<BigCommercePaymentsHostedFieldsApprove>;\n    getState(): BigCommercePaymentsHostedFieldsState;\n    on(eventName: string, callback: (event: BigCommercePaymentsHostedFieldsState) => void): void;\n}\n\nexport interface BigCommercePaymentsHostedFieldsSubmitOptions {\n    contingencies?: Array<'3D_SECURE'>;\n    cardholderName?: string;\n}\n\nexport interface BigCommercePaymentsHostedFieldsApprove {\n    orderId: string;\n    liabilityShift?: 'POSSIBLE' | 'NO' | 'UNKNOWN';\n}\n\nexport interface BigCommercePaymentsHostedFieldsState {\n    cards: BigCommercePaymentsHostedFieldsCard[];\n    emittedBy: string;\n    fields: {\n        number?: BigCommercePaymentsHostedFieldsFieldData;\n        expirationDate?: BigCommercePaymentsHostedFieldsFieldData;\n        expirationMonth?: BigCommercePaymentsHostedFieldsFieldData;\n        expirationYear?: BigCommercePaymentsHostedFieldsFieldData;\n        cvv?: BigCommercePaymentsHostedFieldsFieldData;\n        postalCode?: BigCommercePaymentsHostedFieldsFieldData;\n    };\n}\n\nexport interface BigCommercePaymentsHostedFieldsCard {\n    type: string;\n    niceType: string;\n    code: {\n        name: string;\n        size: number;\n    };\n}\n\nexport interface BigCommercePaymentsHostedFieldsFieldData {\n    container: HTMLElement;\n    isFocused: boolean;\n    isEmpty: boolean;\n    isPotentiallyValid: boolean;\n    isValid: boolean;\n}\n\n/**\n *\n * BigCommerce Payments Buttons\n *\n */\nexport interface BigCommercePaymentsButtons {\n    render(id: string): void;\n    close(): void;\n    isEligible(): boolean;\n    hasReturned?(): boolean;\n    resume?(): void;\n}\n\nexport interface BigCommercePaymentsButtonsOptions {\n    experience?: string;\n    style?: PayPalButtonStyleOptions;\n    fundingSource: string;\n    createOrder(): Promise<string>;\n    onApprove(\n        data: ApproveCallbackPayload,\n        actions: ApproveCallbackActions,\n    ): Promise<boolean | void> | void;\n    onInit?(data: InitCallbackPayload, actions: InitCallbackActions): Promise<void>;\n    onComplete?(data: CompleteCallbackDataPayload): Promise<void>;\n    onClick?(data: ClickCallbackPayload, actions: ClickCallbackActions): Promise<void> | void;\n    onError?(error: Error): void;\n    onCancel?(): void;\n    onShippingAddressChange?(data: ShippingAddressChangeCallbackPayload): Promise<void>;\n    onShippingOptionsChange?(data: ShippingOptionChangeCallbackPayload): Promise<void>;\n}\n\nexport interface ShippingOptionChangeCallbackPayload {\n    orderId: string;\n    selectedShippingOption: PayPalSelectedShippingOption;\n}\n\nexport interface ShippingAddressChangeCallbackPayload {\n    orderId: string;\n    shippingAddress: PayPalAddress;\n}\n\nexport interface ClickCallbackPayload {\n    fundingSource: string;\n}\n\nexport interface ClickCallbackActions {\n    reject(): void;\n    resolve(): void;\n}\n\nexport interface InitCallbackPayload {\n    correlationID: string;\n}\n\nexport interface InitCallbackActions {\n    disable(): void;\n    enable(): void;\n}\n\nexport interface PayPalAddress {\n    city: string;\n    countryCode: string;\n    postalCode: string;\n    state: string;\n}\n\nexport interface PaypalAddressCallbackData {\n    city: string;\n    country_code: string;\n    postal_code: string;\n    state: string;\n}\n\nexport interface PayPalSelectedShippingOption {\n    amount: {\n        currency_code: string;\n        value: string;\n    };\n    id: string;\n    label: string;\n    selected: boolean;\n    type: string;\n}\n\nexport interface ApproveCallbackPayload {\n    orderID?: string;\n}\n\nexport interface ApproveCallbackActions {\n    order: {\n        get: () => Promise<PayPalOrderDetails>;\n    };\n}\n\nexport interface PayPalOrderDetails {\n    payer: {\n        name: {\n            given_name: string;\n            surname: string;\n        };\n        email_address: string;\n        address: PayPalOrderAddress;\n        phone?: {\n            phone_number: {\n                national_number: string;\n            };\n        };\n    };\n    purchase_units: Array<{\n        shipping: {\n            address: PayPalOrderAddress;\n            name: {\n                full_name: string;\n            };\n        };\n    }>;\n}\n\nexport interface PayPalOrderAddress {\n    address_line_1: string;\n    address_line_2: string;\n    admin_area_2: string;\n    admin_area_1?: string;\n    postal_code: string;\n    country_code: string;\n}\n\nexport interface CompleteCallbackDataPayload {\n    intent: string;\n    orderID: string;\n}\n\nexport enum StyleButtonLabel {\n    paypal = 'paypal',\n    checkout = 'checkout',\n    buynow = 'buynow',\n    pay = 'pay',\n    installment = 'installment',\n}\n\nexport enum StyleButtonColor {\n    gold = 'gold',\n    blue = 'blue',\n    silver = 'silver',\n    black = 'black',\n    white = 'white',\n}\n\nexport enum StyleButtonShape {\n    pill = 'pill',\n    rect = 'rect',\n}\n\nexport interface PayPalButtonStyleOptions {\n    color?: StyleButtonColor;\n    shape?: StyleButtonShape;\n    height?: number;\n    label?: StyleButtonLabel;\n}\n\n/**\n *\n * BigCommerce Payments Payment fields\n *\n */\nexport interface BigCommercePaymentsPaymentFields {\n    render(id: string): void;\n}\n\nexport interface BigCommercePaymentsPaymentFieldsOptions {\n    style?: BigCommercePaymentsFieldsStyleOptions;\n    fundingSource: string;\n    fields: {\n        name?: {\n            value?: string;\n        };\n        email?: {\n            value?: string;\n        };\n    };\n}\n\nexport interface BigCommercePaymentsFieldsStyleOptions {\n    variables?: {\n        fontFamily?: string;\n        fontSizeBase?: string;\n        fontSizeSm?: string;\n        fontSizeM?: string;\n        fontSizeLg?: string;\n        textColor?: string;\n        colorTextPlaceholder?: string;\n        colorBackground?: string;\n        colorInfo?: string;\n        colorDanger?: string;\n        borderRadius?: string;\n        borderColor?: string;\n        borderWidth?: string;\n        borderFocusColor?: string;\n        spacingUnit?: string;\n    };\n    rules?: {\n        [key: string]: any;\n    };\n}\n\n/**\n *\n * BigCommercePayments Messages\n */\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface BigCommercePaymentsMessages {\n    render(id: string): void;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface BigCommercePaymentsMessagesOptions {\n    amount: number;\n    placement: string;\n    style?: BigCommercePaymentsMessagesStyleOptions;\n    fundingSource?: string;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface BigCommercePaymentsMessagesStyleOptions {\n    layout?: string;\n}\n\n/**\n *\n * Other\n *\n */\nexport enum NonInstantAlternativePaymentMethods {\n    OXXO = 'oxxo',\n}\n\nexport interface PayPalOrderData {\n    orderId: string;\n    setupToken?: string;\n    approveUrl: string;\n}\n\nexport interface PayPalUpdateOrderRequestBody {\n    availableShippingOptions?: ShippingOption[];\n    cartId: string;\n    selectedShippingOption?: ShippingOption | null;\n}\n\nexport interface PayPalUpdateOrderResponse {\n    statusCode: number;\n}\n\nexport interface PayPalCreateOrderRequestBody extends HostedInstrument, VaultedInstrument {\n    cartId: string;\n    metadataId?: string;\n    setupToken?: boolean;\n    fastlaneToken?: string;\n    methodId?: string;\n    gatewayId?: string;\n}\n\nexport enum PayPalOrderStatus {\n    Approved = 'APPROVED',\n    Created = 'CREATED',\n    PayerActionRequired = 'PAYER_ACTION_REQUIRED',\n    PollingStop = 'POLLING_STOP',\n    PollingError = 'POLLING_ERROR',\n}\n\nexport interface PayPalOrderStatusData {\n    status: PayPalOrderStatus;\n}\n\nexport interface PayPalCreateOrderCardFieldsResponse {\n    orderId: string;\n    setupToken?: string;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/bigcommerce-payments-venmo-button-initialize-options.ts",
    "content": "import {\n    PayPalButtonStyleOptions,\n    PayPalBuyNowInitializeOptions,\n} from '../bigcommerce-payments-types';\n\nexport default interface BigCommercePaymentsVenmoButtonInitializeOptions {\n    /**\n     * A set of styling options for the checkout button.\n     */\n    style?: PayPalButtonStyleOptions;\n\n    /**\n     * The option that used to initialize a PayPal script with provided currency code.\n     */\n    currencyCode?: string;\n\n    /**\n     * The options that required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\n\n    /**\n     *\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\n     *\n     */\n    onEligibilityFailure?(): void;\n}\n\nexport interface WithBigCommercePaymentsVenmoButtonInitializeOptions {\n    bigcommerce_payments_venmo?: BigCommercePaymentsVenmoButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/bigcommerce-payments-venmo-button-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    Cart,\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getBuyNowCartRequestBody,\n    getCart,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsHostWindow,\n    PayPalSDK,\n    StyleButtonColor,\n} from '../bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsIntegrationServiceMock,\n    getBigCommercePaymentsPaymentMethod,\n    getPayPalSDKMock,\n} from '../mocks';\n\nimport BigCommercePaymentsVenmoButtonInitializeOptions from './bigcommerce-payments-venmo-button-initialize-options';\nimport BigCommercePaymentsVenmoButtonStrategy from './bigcommerce-payments-venmo-button-strategy';\n\ndescribe('BigCommercePaymentsVenmoButtonStrategy', () => {\n    let buyNowCart: Cart;\n    let cart: Cart;\n    let eventEmitter: EventEmitter;\n    let strategy: BigCommercePaymentsVenmoButtonStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalButtonElement: HTMLDivElement;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n    let paypalSdk: PayPalSDK;\n\n    const defaultMethodId = 'bigcommerce_payments_venmo';\n    const defaultButtonContainerId = 'bigcommerce-payments-venmo-button-mock-id';\n    const paypalOrderId = 'ORDER_ID';\n\n    const buyNowCartRequestBody = getBuyNowCartRequestBody();\n\n    const buyNowBigCommercePaymentsVenmoOptions: BigCommercePaymentsVenmoButtonInitializeOptions = {\n        buyNowInitializeOptions: {\n            getBuyNowCartRequestBody: jest.fn().mockReturnValue(buyNowCartRequestBody),\n        },\n        currencyCode: 'USD',\n        style: {\n            height: 45,\n        },\n    };\n\n    const buyNowInitializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        bigcommerce_payments_venmo: buyNowBigCommercePaymentsVenmoOptions,\n    };\n\n    const bigCommercePaymentsVenmoOptions: BigCommercePaymentsVenmoButtonInitializeOptions = {\n        style: {\n            height: 45,\n        },\n        onEligibilityFailure: jest.fn(),\n    };\n\n    const initializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        bigcommerce_payments_venmo: bigCommercePaymentsVenmoOptions,\n    };\n\n    beforeEach(() => {\n        buyNowCart = getBuyNowCart();\n        cart = getCart();\n\n        eventEmitter = new EventEmitter();\n\n        paymentMethod = {\n            ...getBigCommercePaymentsPaymentMethod(),\n            id: 'bigcommerce_payments_venmo',\n        };\n        paypalSdk = getPayPalSDKMock();\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new BigCommercePaymentsVenmoButtonStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n        );\n\n        paypalButtonElement = document.createElement('div');\n        paypalButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(paypalButtonElement);\n\n        jest.spyOn(paymentIntegrationService, 'loadDefaultCheckout').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockReturnValue(\n            Promise.resolve(paypalSdk),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(\n            bigCommercePaymentsIntegrationService,\n            'createBuyNowCartOrThrow',\n        ).mockReturnValue(Promise.resolve(buyNowCart));\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder');\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'tokenizePayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'removeElement').mockImplementation(\n            jest.fn(),\n        );\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: BigCommercePaymentsButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on(\n                    'onClick',\n                    // eslint-disable-next-line @typescript-eslint/no-misused-promises\n                    async (jestSuccessExpectationsCallback, jestFailureExpectationsCallback) => {\n                        try {\n                            if (options.onClick) {\n                                await options.onClick(\n                                    { fundingSource: 'venmo' },\n                                    {\n                                        reject: jest.fn(),\n                                        resolve: jest.fn(),\n                                    },\n                                );\n\n                                if (\n                                    jestSuccessExpectationsCallback &&\n                                    typeof jestSuccessExpectationsCallback === 'function'\n                                ) {\n                                    jestSuccessExpectationsCallback();\n                                }\n                            }\n                        } catch (error) {\n                            if (\n                                jestFailureExpectationsCallback &&\n                                typeof jestFailureExpectationsCallback === 'function'\n                            ) {\n                                jestFailureExpectationsCallback(error);\n                            }\n                        }\n                    },\n                );\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: paypalOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onCancel', () => {\n                    if (options.onCancel) {\n                        options.onCancel();\n                    }\n                });\n\n                return {\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                    close: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BigCommercePaymentsHostWindow).paypal;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(paypalButtonElement);\n        }\n    });\n\n    it('creates an instance of the BigCommercePayments Venmo checkout button strategy', () => {\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsVenmoButtonStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if containerId is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_venmo is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_venmo.currencyCode is not provided (for buyNowFlow only)', async () => {\n            const { currencyCode, ...rest } = buyNowBigCommercePaymentsVenmoOptions;\n\n            const newInitializationOptions = {\n                ...buyNowInitializationOptions,\n                bigcommerce_payments_venmo: rest,\n            };\n\n            try {\n                await strategy.initialize(newInitializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if provided buyNow callback is not a function is not provided (for buyNowFlow only)', async () => {\n            const { buyNowInitializeOptions, ...rest } = buyNowBigCommercePaymentsVenmoOptions;\n\n            const newInitializationOptions = {\n                ...buyNowInitializationOptions,\n                bigcommerce_payments_venmo: {\n                    ...rest,\n                    buyNowInitializeOptions: {\n                        getBuyNowCartRequestBody: 'string',\n                    },\n                },\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(newInitializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads default checkout', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n\n        it('does not load default checkout for Buy Now flow', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).not.toHaveBeenCalled();\n        });\n\n        it('loads BigCommercePayments sdk script', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n                cart.currency.code,\n                false,\n            );\n        });\n\n        it('loads BigCommercePayments sdk script with provided currency code (Buy Now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n                buyNowBigCommercePaymentsVenmoOptions.currencyCode,\n                false,\n            );\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('initializes Venmo button to render', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.VENMO,\n                style: bigCommercePaymentsVenmoOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('render button with undefined color (uses default blue) when it receives gold color setting', async () => {\n            const initializationVenmoOptions = {\n                ...initializationOptions,\n                bigcommerce_payments_venmo: {\n                    style: {\n                        height: 45,\n                        color: StyleButtonColor.gold,\n                    },\n                },\n            };\n\n            const expectedStyles = {\n                height: 45,\n                color: undefined,\n            };\n\n            await strategy.initialize(initializationVenmoOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.VENMO,\n                style: expectedStyles,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('initializes Venmo button to render (BuyNow flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.VENMO,\n                style: bigCommercePaymentsVenmoOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n                onCancel: expect.any(Function),\n            });\n        });\n\n        it('renders PayPal Venmo button if it is eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => true),\n                render: bigCommercePaymentsSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('calls onEligibilityFailure when Venmo button if it is not eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsVenmoOptions.onEligibilityFailure).toHaveBeenCalled();\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('removes Venmo button container if the button has not rendered', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_venmo: {\n                    ...bigCommercePaymentsVenmoOptions,\n                    onEligibilityFailure: undefined,\n                },\n            });\n\n            expect(bigCommercePaymentsIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultButtonContainerId,\n            );\n        });\n    });\n\n    describe('#createOrder', () => {\n        it('creates order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_payments_venmo',\n            );\n        });\n    });\n\n    describe('#handleClick', () => {\n        beforeEach(() => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n                Promise.resolve(buyNowCart),\n            );\n            jest.spyOn(paymentIntegrationService, 'loadCheckout');\n        });\n\n        it('creates buy now cart on button click', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(\n                bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow,\n            ).toHaveBeenCalled();\n        });\n\n        it('loads checkout related to buy now cart on button click', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadCheckout).toHaveBeenCalledWith(buyNowCart.id);\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        it('tokenizes payment on paypal approve', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                defaultMethodId,\n                paypalOrderId,\n            );\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('loads default checkout onCancel callback (buy now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n            eventEmitter.emit('onCancel');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/bigcommerce-payments-venmo-button-strategy.ts",
    "content": "import {\n    CheckoutButtonInitializeOptions,\n    CheckoutButtonStrategy,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    ApproveCallbackPayload,\n    BigCommercePaymentsButtonsOptions,\n    PayPalButtonStyleOptions,\n    PayPalBuyNowInitializeOptions,\n    StyleButtonColor,\n} from '../bigcommerce-payments-types';\n\nimport BigCommercePaymentsVenmoButtonInitializeOptions, {\n    WithBigCommercePaymentsVenmoButtonInitializeOptions,\n} from './bigcommerce-payments-venmo-button-initialize-options';\n\nexport default class BigCommercePaymentsVenmoButtonStrategy implements CheckoutButtonStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\n    ) {}\n\n    async initialize(\n        options: CheckoutButtonInitializeOptions &\n            WithBigCommercePaymentsVenmoButtonInitializeOptions,\n    ): Promise<void> {\n        const { bigcommerce_payments_venmo, containerId, methodId } = options;\n        const { buyNowInitializeOptions, currencyCode: providedCurrencyCode } =\n            bigcommerce_payments_venmo || {};\n\n        const isBuyNowFlow = !!buyNowInitializeOptions;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!containerId) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n            );\n        }\n\n        if (!bigcommerce_payments_venmo) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.`,\n            );\n        }\n\n        if (isBuyNowFlow && !providedCurrencyCode) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments_venmo.currencyCode\" argument is not provided.`,\n            );\n        }\n\n        if (\n            isBuyNowFlow &&\n            typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n        ) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments_venmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n            );\n        }\n\n        if (!isBuyNowFlow) {\n            // Info: default checkout should not be loaded for BuyNow flow,\n            // since there is no checkout session available for that.\n            await this.paymentIntegrationService.loadDefaultCheckout();\n        }\n\n        // Info: we are using provided currency code for buy now cart,\n        // because checkout session is not available before buy now cart creation,\n        // hence application will throw an error on getCartOrThrow method call\n        const currencyCode = isBuyNowFlow\n            ? providedCurrencyCode\n            : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n        await this.bigCommercePaymentsIntegrationService.loadPayPalSdk(\n            methodId,\n            currencyCode,\n            false,\n        );\n\n        this.renderButton(containerId, methodId, bigcommerce_payments_venmo);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        containerId: string,\n        methodId: string,\n        bigcommerce_payments_venmo: BigCommercePaymentsVenmoButtonInitializeOptions,\n    ): void {\n        const { buyNowInitializeOptions, style, onEligibilityFailure } = bigcommerce_payments_venmo;\n\n        const paypalSdk = this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow();\n        const fundingSource = paypalSdk.FUNDING.VENMO;\n\n        const defaultCallbacks = {\n            createOrder: () =>\n                this.bigCommercePaymentsIntegrationService.createOrder(\n                    'bigcommerce_payments_venmo',\n                ),\n            onApprove: ({ orderID }: ApproveCallbackPayload) =>\n                this.bigCommercePaymentsIntegrationService.tokenizePayment(methodId, orderID),\n        };\n\n        const buyNowFlowCallbacks = {\n            onClick: () => this.handleClick(buyNowInitializeOptions),\n            onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n        };\n\n        const buttonRenderOptions: BigCommercePaymentsButtonsOptions = {\n            fundingSource,\n            style: this.getValidVenmoButtonStyles(style),\n            ...defaultCallbacks,\n            ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n        };\n\n        const paypalButtonRender = paypalSdk.Buttons(buttonRenderOptions);\n\n        if (paypalButtonRender.isEligible()) {\n            paypalButtonRender.render(`#${containerId}`);\n        } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n            onEligibilityFailure();\n        } else {\n            this.bigCommercePaymentsIntegrationService.removeElement(containerId);\n        }\n    }\n\n    private getValidVenmoButtonStyles(style: PayPalButtonStyleOptions | undefined) {\n        const validButtonStyle =\n            this.bigCommercePaymentsIntegrationService.getValidButtonStyle(style);\n\n        if (validButtonStyle.color === StyleButtonColor.gold) {\n            return {\n                ...validButtonStyle,\n                color: undefined,\n            };\n        }\n\n        return validButtonStyle;\n    }\n\n    private async handleClick(\n        buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n    ): Promise<void> {\n        if (buyNowInitializeOptions) {\n            const buyNowCart =\n                await this.bigCommercePaymentsIntegrationService.createBuyNowCartOrThrow(\n                    buyNowInitializeOptions,\n                );\n\n            await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/bigcommerce-payments-venmo-customer-initialize-options.ts",
    "content": "export default interface BigCommercePaymentsVenmoCustomerInitializeOptions {\n    /**\n     * The ID of a container which the checkout button should be inserted into.\n     */\n    container: string;\n\n    /**\n     * A callback that gets called if unable to initialize the widget or select\n     * one of the address options provided by the widget.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error?: Error): void;\n\n    /**\n     * A callback that gets called when Venmo button clicked.\n     */\n    onClick?(): void;\n}\n\nexport interface WithBigCommercePaymentsVenmoCustomerInitializeOptions {\n    bigcommerce_payments_venmo?: BigCommercePaymentsVenmoCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/bigcommerce-payments-venmo-customer-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    CustomerInitializeOptions,\n    DefaultCheckoutButtonHeight,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsHostWindow,\n    PayPalSDK,\n} from '../bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsIntegrationServiceMock,\n    getBigCommercePaymentsPaymentMethod,\n    getPayPalSDKMock,\n} from '../mocks';\n\nimport BigCommercePaymentsVenmoCustomerInitializeOptions from './bigcommerce-payments-venmo-customer-initialize-options';\nimport BigCommercePaymentsVenmoCustomerStrategy from './bigcommerce-payments-venmo-customer-strategy';\n\ndescribe('BigCommercePaymentsVenmoCustomerStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let strategy: BigCommercePaymentsVenmoCustomerStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalButtonElement: HTMLDivElement;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n    let paypalSdk: PayPalSDK;\n\n    const defaultMethodId = 'bigcommerce_payments_venmo';\n    const defaultButtonContainerId = 'bigcommerce-payments-venmo-customer-mock-id';\n    const paypalOrderId = 'ORDER_ID';\n\n    const bigCommercePaymentsVenmoOptions: BigCommercePaymentsVenmoCustomerInitializeOptions = {\n        container: defaultButtonContainerId,\n        onClick: jest.fn(),\n        onError: jest.fn(),\n    };\n\n    const initializationOptions: CustomerInitializeOptions = {\n        methodId: defaultMethodId,\n        bigcommerce_payments_venmo: bigCommercePaymentsVenmoOptions,\n    };\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n        paymentMethod = {\n            ...getBigCommercePaymentsPaymentMethod(),\n            id: 'bigcommerce_payments_venmo',\n        };\n        paypalSdk = getPayPalSDKMock();\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new BigCommercePaymentsVenmoCustomerStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n        );\n\n        paypalButtonElement = document.createElement('div');\n        paypalButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(paypalButtonElement);\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockResolvedValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'tokenizePayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'removeElement').mockImplementation(\n            jest.fn(),\n        );\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: BigCommercePaymentsButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: paypalOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onClick', () => {\n                    if (options.onClick) {\n                        options.onClick(\n                            { fundingSource: 'venmo' },\n                            {\n                                resolve: jest.fn(),\n                                reject: jest.fn(),\n                            },\n                        );\n                    }\n                });\n\n                return {\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                    close: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BigCommercePaymentsHostWindow).paypal;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(paypalButtonElement);\n        }\n    });\n\n    it('creates an instance of the BigCommercePayments Venmo checkout button strategy', () => {\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsVenmoCustomerStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_venmo is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_venmo.container is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n                bigcommerce_payments_venmo: {\n                    container: undefined,\n                },\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if bigcommerce_payments_venmo.onClick is provided but it is not a function', async () => {\n            const options = {\n                methodId: defaultMethodId,\n                bigcommerce_payments_venmo: {\n                    container: 'container',\n                    onClick: 'test',\n                },\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads bigcommerce_payments_venmo payment method', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                defaultMethodId,\n            );\n        });\n\n        it('does not load bigcommerce_payments_venmo payment method if payment method is already exists', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n                paymentMethod,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk with provided method id', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n            );\n        });\n\n        it('logs an error when PayPalSDK Buttons implementation is not available for some reasons', async () => {\n            jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockReturnValue(\n                Promise.resolve(undefined),\n            );\n\n            const log = jest.fn();\n\n            jest.spyOn(console, 'error').mockImplementation(log);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(log).toHaveBeenCalled();\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('initializes Venmo button to render', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.VENMO,\n                style: {\n                    color: 'silver',\n                    height: DefaultCheckoutButtonHeight,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('renders Venmo button if it is eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('does not render Venmo button if it is not eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('removes Venmo button container if the button has not rendered', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultButtonContainerId,\n            );\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates an order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_payments_venmo',\n            );\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        it('tokenizes payment on approve', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                defaultMethodId,\n                paypalOrderId,\n            );\n        });\n    });\n\n    describe('#onClick button callback', () => {\n        it('triggers onClick option by clicking on the button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsVenmoOptions.onClick).toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('calls default sign in method', async () => {\n            const credentials = {\n                email: 'test@test.com',\n                password: '123',\n            };\n\n            await strategy.signIn(credentials);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                undefined,\n            );\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('calls default sign out method', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout()', () => {\n        it('calls default continue with checkout callback', async () => {\n            const continueWithCheckoutCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({ continueWithCheckoutCallback });\n\n            expect(continueWithCheckoutCallback).toHaveBeenCalled();\n        });\n\n        it('makes nothing if continue with checkout callback is not provided', async () => {\n            const result = await strategy.executePaymentMethodCheckout();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/bigcommerce-payments-venmo-customer-strategy.ts",
    "content": "import {\n    CustomerCredentials,\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    DefaultCheckoutButtonHeight,\n    ExecutePaymentMethodCheckoutOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    ApproveCallbackPayload,\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsInitializationData,\n} from '../bigcommerce-payments-types';\n\nimport BigCommercePaymentsVenmoCustomerInitializeOptions, {\n    WithBigCommercePaymentsVenmoCustomerInitializeOptions,\n} from './bigcommerce-payments-venmo-customer-initialize-options';\n\nexport default class BigCommercePaymentsVenmoCustomerStrategy implements CustomerStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions & WithBigCommercePaymentsVenmoCustomerInitializeOptions,\n    ): Promise<void> {\n        const { bigcommerce_payments_venmo, 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 (!bigcommerce_payments_venmo) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.',\n            );\n        }\n\n        if (!bigcommerce_payments_venmo.container) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments_venmo.container\" argument is not provided.',\n            );\n        }\n\n        if (\n            bigcommerce_payments_venmo.onClick &&\n            typeof bigcommerce_payments_venmo.onClick !== 'function'\n        ) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.bigcommerce_payments_venmo.onClick\" argument is not a function.',\n            );\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethod(methodId);\n\n        if (!paymentMethod) {\n            await this.paymentIntegrationService.loadPaymentMethod(methodId);\n        }\n\n        const paypalSdk = await this.bigCommercePaymentsIntegrationService.loadPayPalSdk(methodId);\n\n        if (!paypalSdk || !paypalSdk.Buttons || typeof paypalSdk.Buttons !== 'function') {\n            // eslint-disable-next-line no-console\n            console.error(\n                '[BC Payments Venmo]: Button could not be rendered, due to issues with loading PayPal SDK',\n            );\n\n            return;\n        }\n\n        this.renderButton(methodId, bigcommerce_payments_venmo);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signInCustomer(credentials, options);\n    }\n\n    async signOut(options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signOutCustomer(options);\n    }\n\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n        options?.continueWithCheckoutCallback?.();\n\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        methodId: string,\n        bigcommerce_payments_venmo: BigCommercePaymentsVenmoCustomerInitializeOptions,\n    ): void {\n        const { container, onClick } = bigcommerce_payments_venmo;\n\n        const paypalSdk = this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n        const { paymentButtonStyles } = paymentMethod.initializationData || {};\n        const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n        const buttonRenderOptions: BigCommercePaymentsButtonsOptions = {\n            fundingSource: paypalSdk.FUNDING.VENMO,\n            style: this.bigCommercePaymentsIntegrationService.getValidButtonStyle({\n                ...checkoutTopButtonStyles,\n                height: DefaultCheckoutButtonHeight,\n            }),\n            createOrder: () =>\n                this.bigCommercePaymentsIntegrationService.createOrder(\n                    'bigcommerce_payments_venmo',\n                ),\n            onApprove: ({ orderID }: ApproveCallbackPayload) =>\n                this.bigCommercePaymentsIntegrationService.tokenizePayment(methodId, orderID),\n            ...(onClick && { onClick: () => onClick() }),\n        };\n\n        const paypalButtonRender = paypalSdk.Buttons(buttonRenderOptions);\n\n        if (paypalButtonRender.isEligible()) {\n            paypalButtonRender.render(`#${container}`);\n        } else {\n            this.bigCommercePaymentsIntegrationService.removeElement(container);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/bigcommerce-payments-venmo-payment-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the BigCommercePayments Venmo payment\n * method for presenting its Venmo button.\n *\n *\n * Also, BigCommercePayments requires specific options to initialize the Venmo Button on checkout page that substitutes a standard submit button\n * ```html\n * <!-- This is where the Venmo button will be inserted -->\n * <div id=\"container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'bigcommerce_payments_venmo',\n *     bigcommerce_payments_venmo: {\n *         container: '#container',\n * // Callback for submitting payment form that gets called when a buyer approves payment\n *         submitForm: () => {\n *         // Example function\n *             this.submitOrder(\n *                {\n *                   payment: { methodId: 'bigcommerce_payments_venmo', }\n *               }\n *            );\n *         },\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\n *         onValidate: (resolve, reject) => {\n *         // Example function\n *             const isValid = this.validatePaymentForm();\n *             if (isValid) {\n *                 return resolve();\n *             }\n *             return reject();\n *         },\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\n *         onRenderButton: () => {\n *         // Example function\n *             this.hidePaymentSubmitButton();\n *         }\n *     },\n * });\n * ```\n */\nexport default interface BigCommercePaymentsVenmoPaymentInitializeOptions {\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    container: string;\n\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: Error): void;\n\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n\n    /**\n     * A callback that gets called when a buyer click on Smart Payment Button\n     * and should validate payment form.\n     *\n     * @param resolve - A function, that gets called if form is valid.\n     * @param reject - A function, that gets called if form is not valid.\n     *\n     * @returns reject() or resolve()\n     */\n    onValidate(resolve: () => void, reject: () => void): Promise<void>;\n\n    /**\n     * A callback for submitting payment form that gets called\n     * when buyer approved PayPal account.\n     */\n    submitForm(): void;\n}\n\nexport interface WithBigCommercePaymentsVenmoPaymentInitializeOptions {\n    bigcommerce_payments_venmo?: BigCommercePaymentsVenmoPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/bigcommerce-payments-venmo-payment-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    InvalidArgumentError,\n    NotImplementedError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodInvalidError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsHostWindow,\n    PayPalSDK,\n} from '../bigcommerce-payments-types';\nimport {\n    getBigCommercePaymentsIntegrationServiceMock,\n    getBigCommercePaymentsPaymentMethod,\n    getPayPalSDKMock,\n} from '../mocks';\n\nimport BigCommercePaymentsVenmoPaymentInitializeOptions from './bigcommerce-payments-venmo-payment-initialize-options';\nimport BigCommercePaymentsVenmoPaymentStrategy from './bigcommerce-payments-venmo-payment-strategy';\n\ndescribe('BigCommercePaymentsVenmoPaymentStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let loadingIndicator: LoadingIndicator;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService;\n    let paypalSdk: PayPalSDK;\n    let strategy: BigCommercePaymentsVenmoPaymentStrategy;\n\n    const paypalOrderId = 'paypal123';\n\n    const fundingSource = 'venmo';\n    const defaultMethodId = 'bigcommerce_payments_venmo';\n    const defaultContainerId = '#container';\n\n    const bigCommercePaymentsVenmoOptions: BigCommercePaymentsVenmoPaymentInitializeOptions = {\n        container: defaultContainerId,\n        onValidate: jest.fn(),\n        submitForm: jest.fn(),\n    };\n\n    const initializationOptions: PaymentInitializeOptions = {\n        methodId: defaultMethodId,\n        bigcommerce_payments_venmo: bigCommercePaymentsVenmoOptions,\n    };\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        paypalSdk = getPayPalSDKMock();\n        paymentMethod = getBigCommercePaymentsPaymentMethod();\n        paymentMethod.id = defaultMethodId;\n        paymentMethod.initializationData.orderId = undefined;\n\n        loadingIndicator = new LoadingIndicator();\n        bigCommercePaymentsIntegrationService = getBigCommercePaymentsIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new BigCommercePaymentsVenmoPaymentStrategy(\n            paymentIntegrationService,\n            bigCommercePaymentsIntegrationService,\n            loadingIndicator,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'loadPayPalSdk').mockResolvedValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'createOrder').mockResolvedValue('');\n        jest.spyOn(bigCommercePaymentsIntegrationService, 'submitPayment').mockResolvedValue(\n            undefined,\n        );\n\n        jest.spyOn(loadingIndicator, 'show').mockReturnValue(undefined);\n        jest.spyOn(loadingIndicator, 'hide').mockReturnValue(undefined);\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: BigCommercePaymentsButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on('onClick', () => {\n                    if (options.onClick) {\n                        options.onClick(\n                            { fundingSource: 'venmo' },\n                            {\n                                reject: jest.fn(),\n                                resolve: jest.fn(),\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: paypalOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onCancel', () => {\n                    if (options.onCancel) {\n                        options.onCancel();\n                    }\n                });\n\n                eventEmitter.on('onError', () => {\n                    if (options.onError) {\n                        options.onError(new Error());\n                    }\n                });\n\n                return {\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                    close: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BigCommercePaymentsHostWindow).paypal;\n    });\n\n    it('creates an instance of the BigCommercePayments Venmo payment strategy', () => {\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsVenmoPaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if options.bigcommerce_payments_venmo is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not continues strategy initialization if order id is available in initializationData', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n            );\n        });\n    });\n\n    describe('#renderButton()', () => {\n        it('initializes Venmo button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource,\n                style: {\n                    color: 'black',\n                    height: 55,\n                    label: 'pay',\n                },\n                createOrder: expect.any(Function),\n                onClick: expect.any(Function),\n                onApprove: expect.any(Function),\n                onCancel: expect.any(Function),\n                onError: expect.any(Function),\n            });\n        });\n\n        it('throws an error if Venmo button is not eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotImplementedError);\n            }\n        });\n\n        it('renders Venmo button if it is eligible', async () => {\n            const bigCommercePaymentsSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: bigCommercePaymentsSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsSdkRenderMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates an order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(bigCommercePaymentsIntegrationService.createOrder).toHaveBeenCalledWith(\n                'bigcommerce_payments_venmocheckout',\n            );\n        });\n    });\n\n    describe('#onClick button callback', () => {\n        it('calls validation callback with provided params', async () => {\n            const onValidateMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_venmo: {\n                    ...bigCommercePaymentsVenmoOptions,\n                    onValidate: onValidateMock,\n                },\n            });\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(onValidateMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        it('submits form', async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_venmo: {\n                    ...bigCommercePaymentsVenmoOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n        });\n\n        it('hides loading indicator after form submit', async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_venmo: {\n                    ...bigCommercePaymentsVenmoOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onCancel');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onError button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n\n        it('calls onError callback if it is provided', async () => {\n            const onErrorMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_venmo: {\n                    ...bigCommercePaymentsVenmoOptions,\n                    onError: onErrorMock,\n                },\n            });\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws an error if payload.payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if orderId is not defined', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodInvalidError);\n            }\n        });\n\n        it('submits order', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('submits payment with provided data', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(bigCommercePaymentsIntegrationService.submitPayment).toHaveBeenCalledWith(\n                payload.payment.methodId,\n                paypalOrderId,\n            );\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('closes Venmo button component on deinitialize strategy', async () => {\n            const bigCommercePaymentsSdkCloseMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: bigCommercePaymentsSdkCloseMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n            await strategy.deinitialize();\n\n            expect(bigCommercePaymentsSdkCloseMock).toHaveBeenCalled();\n        });\n\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/bigcommerce-payments-venmo-payment-strategy.ts",
    "content": "import {\n    InvalidArgumentError,\n    NotImplementedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport {\n    ApproveCallbackPayload,\n    BigCommercePaymentsButtons,\n    BigCommercePaymentsButtonsOptions,\n    BigCommercePaymentsInitializationData,\n    ClickCallbackActions,\n} from '../bigcommerce-payments-types';\n\nimport BigCommercePaymentsVenmoPaymentInitializeOptions, {\n    WithBigCommercePaymentsVenmoPaymentInitializeOptions,\n} from './bigcommerce-payments-venmo-payment-initialize-options';\n\nexport default class BigCommercePaymentsVenmoPaymentStrategy implements PaymentStrategy {\n    private loadingIndicatorContainer?: string;\n    private orderId?: string;\n    private paypalButton?: BigCommercePaymentsButtons;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private bigCommercePaymentsIntegrationService: BigCommercePaymentsIntegrationService,\n        private loadingIndicator: LoadingIndicator,\n    ) {}\n\n    async initialize(\n        options?: PaymentInitializeOptions & WithBigCommercePaymentsVenmoPaymentInitializeOptions,\n    ): Promise<void> {\n        const { methodId, bigcommerce_payments_venmo } = 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 (!bigcommerce_payments_venmo) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bigcommerce_payments_venmo\" argument is not provided.`,\n            );\n        }\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n\n        // Info:\n        // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n        // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n        // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n        if (paymentMethod.initializationData?.orderId) {\n            this.orderId = paymentMethod.initializationData?.orderId;\n\n            return;\n        }\n\n        await this.bigCommercePaymentsIntegrationService.loadPayPalSdk(methodId);\n\n        this.loadingIndicatorContainer = bigcommerce_payments_venmo.container.split('#')[1];\n\n        this.renderButton(methodId, bigcommerce_payments_venmo);\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        if (!this.orderId) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n        await this.bigCommercePaymentsIntegrationService.submitPayment(\n            payment.methodId,\n            this.orderId,\n        );\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this.orderId = undefined;\n\n        this.paypalButton?.close();\n\n        return Promise.resolve();\n    }\n\n    /**\n     *\n     * Button methods/callbacks\n     *\n     * */\n    private renderButton(\n        methodId: string,\n        bigcommerce_payments_venmo: BigCommercePaymentsVenmoPaymentInitializeOptions,\n    ): void {\n        const paypalSdk = this.bigCommercePaymentsIntegrationService.getPayPalSdkOrThrow();\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<BigCommercePaymentsInitializationData>(methodId);\n        const { paymentButtonStyles } = paymentMethod.initializationData || {};\n        const { checkoutPaymentButtonStyles } = paymentButtonStyles || {};\n\n        const { container, onError, onRenderButton, onValidate, submitForm } =\n            bigcommerce_payments_venmo;\n\n        const buttonOptions: BigCommercePaymentsButtonsOptions = {\n            fundingSource: paypalSdk.FUNDING.VENMO,\n            style: this.bigCommercePaymentsIntegrationService.getValidButtonStyle(\n                checkoutPaymentButtonStyles,\n            ),\n            createOrder: () =>\n                this.bigCommercePaymentsIntegrationService.createOrder(\n                    'bigcommerce_payments_venmocheckout',\n                ),\n            onClick: (_, actions) => this.handleClick(actions, onValidate),\n            onApprove: (data) => this.handleApprove(data, submitForm),\n            onCancel: () => this.toggleLoadingIndicator(false),\n            onError: (error) => this.handleError(error, onError),\n        };\n\n        this.paypalButton = paypalSdk.Buttons(buttonOptions);\n\n        if (!this.paypalButton.isEligible()) {\n            throw new NotImplementedError(\n                `Venmo is not available for your region. Please another payment method instead.`,\n            );\n        }\n\n        if (onRenderButton && typeof onRenderButton === 'function') {\n            onRenderButton();\n        }\n\n        this.paypalButton.render(container);\n    }\n\n    private async handleClick(\n        actions: ClickCallbackActions,\n        onValidate: BigCommercePaymentsVenmoPaymentInitializeOptions['onValidate'],\n    ): Promise<void> {\n        const { resolve, reject } = actions;\n\n        const onValidationPassed = () => {\n            this.toggleLoadingIndicator(true);\n\n            return resolve();\n        };\n\n        await onValidate(onValidationPassed, reject);\n    }\n\n    private handleApprove(\n        { orderID }: ApproveCallbackPayload,\n        submitForm: BigCommercePaymentsVenmoPaymentInitializeOptions['submitForm'],\n    ): void {\n        this.orderId = orderID;\n\n        submitForm();\n        this.toggleLoadingIndicator(false);\n    }\n\n    private handleError(\n        error: Error,\n        onError: BigCommercePaymentsVenmoPaymentInitializeOptions['onError'],\n    ): void {\n        this.toggleLoadingIndicator(false);\n\n        if (onError && typeof onError === 'function') {\n            onError(error);\n        }\n    }\n\n    /**\n     *\n     * Loading Indicator methods\n     *\n     * */\n    private toggleLoadingIndicator(isLoading: boolean): void {\n        if (isLoading && this.loadingIndicatorContainer) {\n            this.loadingIndicator.show(this.loadingIndicatorContainer);\n        } else {\n            this.loadingIndicator.hide();\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/create-bigcommerce-payments-venmo-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsVenmoButtonStrategy from './bigcommerce-payments-venmo-button-strategy';\nimport createBigCommercePaymentsVenmoButtonStrategy from './create-bigcommerce-payments-venmo-button-strategy';\n\ndescribe('createBigCommercePaymentsVenmoButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePayments venmo button strategy', () => {\n        const strategy = createBigCommercePaymentsVenmoButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsVenmoButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/create-bigcommerce-payments-venmo-button-strategy.ts",
    "content": "import {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsVenmoButtonStrategy from './bigcommerce-payments-venmo-button-strategy';\n\nconst createBigCommercePaymentsVenmoButtonStrategy: CheckoutButtonStrategyFactory<\n    BigCommercePaymentsVenmoButtonStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsVenmoButtonStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsVenmoButtonStrategy, [\n    { id: 'bigcommerce_payments_venmo' },\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/create-bigcommerce-payments-venmo-cuastomer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsVenmoCustomerStrategy from './bigcommerce-payments-venmo-customer-strategy';\nimport createBigCommercePaymentsVenmoCustomerStrategy from './create-bigcommerce-payments-venmo-customer-strategy';\n\ndescribe('createBigCommercePaymentsVenmoCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePayments venmo customer strategy', () => {\n        const strategy = createBigCommercePaymentsVenmoCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsVenmoCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/create-bigcommerce-payments-venmo-customer-strategy.ts",
    "content": "import {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsVenmoCustomerStrategy from './bigcommerce-payments-venmo-customer-strategy';\n\nconst createBigCommercePaymentsVenmoCustomerStrategy: CustomerStrategyFactory<\n    BigCommercePaymentsVenmoCustomerStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsVenmoCustomerStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsVenmoCustomerStrategy, [\n    { id: 'bigcommerce_payments_venmo' },\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/create-bigcommerce-payments-venmo-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsVenmoPaymentStrategy from './bigcommerce-payments-venmo-payment-strategy';\nimport createBigCommercePaymentsVenmoPaymentStrategy from './create-bigcommerce-payments-venmo-payment-strategy';\n\ndescribe('createBigCommercePaymentsVenmoPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePayments venmo payment strategy', () => {\n        const strategy = createBigCommercePaymentsVenmoPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BigCommercePaymentsVenmoPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/bigcommerce-payments-venmo/create-bigcommerce-payments-venmo-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport createBigCommercePaymentsIntegrationService from '../create-bigcommerce-payments-integration-service';\n\nimport BigCommercePaymentsVenmoPaymentStrategy from './bigcommerce-payments-venmo-payment-strategy';\n\nconst createBigCommercePaymentsVenmoPaymentStrategy: PaymentStrategyFactory<\n    BigCommercePaymentsVenmoPaymentStrategy\n> = (paymentIntegrationService) =>\n    new BigCommercePaymentsVenmoPaymentStrategy(\n        paymentIntegrationService,\n        createBigCommercePaymentsIntegrationService(paymentIntegrationService),\n        new LoadingIndicator({ styles: { backgroundColor: 'black' } }),\n    );\n\nexport default toResolvableModule(createBigCommercePaymentsVenmoPaymentStrategy, [\n    { id: 'bigcommerce_payments_venmo' },\n]);\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/create-bigcommerce-payments-integration-service.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsIntegrationService from './bigcommerce-payments-integration-service';\nimport createBigCommercePaymentsIntegrationService from './create-bigcommerce-payments-integration-service';\n\ndescribe('createBigCommercePaymentsIntegrationService', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates BigCommercePayments integration service', () => {\n        const service = createBigCommercePaymentsIntegrationService(paymentIntegrationService);\n\n        expect(service).toBeInstanceOf(BigCommercePaymentsIntegrationService);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/create-bigcommerce-payments-integration-service.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    BigCommercePaymentsIntegrationService,\n    BigCommercePaymentsRequestSender,\n    BigCommercePaymentsScriptLoader,\n} from './index';\n\nconst createBigCommercePaymentsIntegrationService = (\n    paymentIntegrationService: PaymentIntegrationService,\n) => {\n    const { getHost } = paymentIntegrationService.getState();\n\n    return new BigCommercePaymentsIntegrationService(\n        createFormPoster(),\n        paymentIntegrationService,\n        new BigCommercePaymentsRequestSender(createRequestSender({ host: getHost() })),\n        new BigCommercePaymentsScriptLoader(getScriptLoader()),\n    );\n};\n\nexport default createBigCommercePaymentsIntegrationService;\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/index.ts",
    "content": "export { default as BigCommercePaymentsIntegrationService } from './bigcommerce-payments-integration-service';\nexport { default as BigCommercePaymentsRequestSender } from './bigcommerce-payments-request-sender';\nexport { default as BigCommercePaymentsScriptLoader } from './bigcommerce-payments-script-loader';\n\n/**\n *\n * BigCommercePayments strategies\n *\n */\nexport { default as createBigCommercePaymentsButtonStrategy } from './bigcommerce-payments/create-bigcommerce-payments-button-strategy';\nexport { WithBigCommercePaymentsButtonInitializeOptions } from './bigcommerce-payments/bigcommerce-payments-button-initialize-options';\n\nexport { default as createBigCommercePaymentsCustomerStrategy } from './bigcommerce-payments/create-bigcommerce-payments-customer-strategy';\nexport { WithBigCommercePaymentsCustomerInitializeOptions } from './bigcommerce-payments/bigcommerce-payments-customer-initialize-options';\n\nexport { default as createBigCommercePaymentsPaymentStrategy } from './bigcommerce-payments/create-bigcommerce-payments-payment-strategy';\nexport { WithBigCommercePaymentsPaymentInitializeOptions } from './bigcommerce-payments/bigcommerce-payments-payment-initialize-options';\n\n/**\n *\n * BigCommercePayments Fastlane strategy\n *\n */\nexport { default as createBigCommercePaymentsFastlaneCustomerStrategy } from './bigcommerce-payments-fastlane/create-bigcommerce-payments-fastlane-customer-strategy';\nexport { WithBigCommercePaymentsFastlaneCustomerInitializeOptions } from './bigcommerce-payments-fastlane/bigcommerce-payments-fastlane-customer-initialize-options';\n\nexport { default as createBigCommercePaymentsFastlanePaymentStrategy } from './bigcommerce-payments-fastlane/create-bigcommerce-payments-fastlane-payment-strategy';\nexport { WithBigCommercePaymentsFastlanePaymentInitializeOptions } from './bigcommerce-payments-fastlane/bigcommerce-payments-fastlane-payment-initialize-options';\n\n/**\n *\n * BigCommercePayments PayLater strategies\n *\n */\nexport { default as createBigCommercePaymentsPayLaterButtonStrategy } from './bigcommerce-payments-paylater/create-bigcommerce-payments-paylater-button-strategy';\nexport { WithBigCommercePaymentsPayLaterButtonInitializeOptions } from './bigcommerce-payments-paylater/bigcommerce-payments-paylater-button-initialize-options';\n\nexport { default as createBigCommercePaymentsPayLaterCustomerStrategy } from './bigcommerce-payments-paylater/create-bigcommerce-payments-paylater-customer-strategy';\nexport { WithBigCommercePaymentsPayLaterCustomerInitializeOptions } from './bigcommerce-payments-paylater/bigcommerce-payments-paylater-customer-initialize-options';\n\nexport { default as createBigCommercePaymentsPayLaterPaymentStrategy } from './bigcommerce-payments-paylater/create-bigcommerce-payments-paylater-payment-strategy';\nexport { WithBigCommercePaymentsPayLaterPaymentInitializeOptions } from './bigcommerce-payments-paylater/bigcommerce-payments-paylater-payment-initialize-options';\n\n/**\n *\n * BigCommercePayments RatePay strategy\n *\n */\nexport { default as createBigCommercePaymentsRatePayPayPaymentStrategy } from './bigcommerce-payments-ratepay/create-bigcommerce-payments-ratepay-payment-strategy';\nexport { WithBigCommercePaymentsRatePayPaymentInitializeOptions } from './bigcommerce-payments-ratepay/bigcommerce-payments-ratepay-initialize-options';\n\n/**\n *\n * BigCommercePayments Credit Cards strategies\n *\n */\nexport { default as createBigCommercePaymentsCreditCardsPaymentStrategy } from './bigcommerce-payments-credit-cards/create-bigcommerce-payments-credit-cards-payment-strategy';\nexport { WithBigCommercePaymentsCreditCardsPaymentInitializeOptions } from './bigcommerce-payments-credit-cards/bigcommerce-payments-credit-cards-payment-initialize-options';\n\n/**\n *\n * BigCommercePayments Alternative methods strategies\n *\n */\nexport { default as createBigCommercePaymentsAlternativeMethodsPaymentStrategy } from './bigcommerce-payments-alternative-methods/create-bigcommerce-payments-alternative-methods-payment-strategy';\nexport { WithBigCommercePaymentsAlternativeMethodsPaymentInitializeOptions } from './bigcommerce-payments-alternative-methods/bigcommerce-payments-alternative-methods-payment-initialize-options';\n\n/**\n *\n * BigCommercePayments Redirect Alternative methods strategies\n *\n */\nexport { default as createBigCommercePaymentsRedirectAlternativeMethodsPaymentStrategy } from './bigcommerce-payments-redirect-alternative-methods/create-bigcommerce-payments-redirect-alternative-methods-payment-strategy';\nexport { WithBigCommercePaymentsRedirectAlternativeMethodsPaymentInitializeOptions } from './bigcommerce-payments-redirect-alternative-methods/bigcomemrce-payments-redirect-alternative-methods-payment-initialize-options';\n\n/**\n *\n * BigCommercePayments Venmo strategies\n *\n */\nexport { default as createBigCommercePaymentsVenmoButtonStrategy } from './bigcommerce-payments-venmo/create-bigcommerce-payments-venmo-button-strategy';\nexport { WithBigCommercePaymentsVenmoButtonInitializeOptions } from './bigcommerce-payments-venmo/bigcommerce-payments-venmo-button-initialize-options';\n\nexport { default as createBigCommercePaymentsVenmoCustomerStrategy } from './bigcommerce-payments-venmo/create-bigcommerce-payments-venmo-customer-strategy';\nexport { WithBigCommercePaymentsVenmoCustomerInitializeOptions } from './bigcommerce-payments-venmo/bigcommerce-payments-venmo-customer-initialize-options';\n\nexport { default as createBigCommercePaymentsVenmoPaymentStrategy } from './bigcommerce-payments-venmo/create-bigcommerce-payments-venmo-payment-strategy';\nexport { WithBigCommercePaymentsVenmoPaymentInitializeOptions } from './bigcommerce-payments-venmo/bigcommerce-payments-venmo-payment-initialize-options';\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/mocks/get-bigcommerce-payments-integration-service-mock.mock.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BigCommercePaymentsIntegrationService from '../bigcommerce-payments-integration-service';\nimport BigCommercePaymentsRequestSender from '../bigcommerce-payments-request-sender';\nimport BigCommercePaymentsScriptLoader from '../bigcommerce-payments-script-loader';\n\nexport default function getBigCommercePaymentsIntegrationServiceMock(): BigCommercePaymentsIntegrationService {\n    const formPoster = createFormPoster();\n    const requestSender = createRequestSender();\n    const paymentIntegrationService = new PaymentIntegrationServiceMock();\n    const getBigCommercePaymentsRequestSender = new BigCommercePaymentsRequestSender(requestSender);\n    const getBigCommercePaymentsScriptLoader = new BigCommercePaymentsScriptLoader(\n        getScriptLoader(),\n    );\n\n    return new BigCommercePaymentsIntegrationService(\n        formPoster,\n        paymentIntegrationService,\n        getBigCommercePaymentsRequestSender,\n        getBigCommercePaymentsScriptLoader,\n    );\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/mocks/get-bigcommerce-payments-order-details.mock.ts",
    "content": "import { PayPalOrderDetails } from '../bigcommerce-payments-types';\n\nexport default function getBigCommercePaymentsOrderDetails(): PayPalOrderDetails {\n    return {\n        purchase_units: [\n            {\n                shipping: {\n                    address: {\n                        address_line_1: '2 E 61st St',\n                        address_line_2: 'Apt.1',\n                        admin_area_2: 'New York',\n                        admin_area_1: 'NY',\n                        postal_code: '10065',\n                        country_code: 'US',\n                    },\n                    name: {\n                        full_name: 'Full Name',\n                    },\n                },\n            },\n        ],\n        payer: {\n            name: {\n                given_name: 'John',\n                surname: 'Doe',\n            },\n            email_address: 'john@doe.com',\n            address: {\n                address_line_1: '1 Main St',\n                address_line_2: 'Apt.2',\n                admin_area_2: 'San Jose',\n                admin_area_1: 'CA',\n                postal_code: '95131',\n                country_code: 'US',\n            },\n            phone: {\n                phone_number: {\n                    national_number: '123456789',\n                },\n            },\n        },\n    };\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/mocks/get-bigcommerce-payments-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function getBigCommercePaymentsPaymentMethod(): PaymentMethod {\n    return {\n        id: 'bigcommerce_payments',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        clientToken: 'asdcvY7XFSQasd',\n        config: {\n            testMode: true,\n            merchantId: 'JTS4DY7XFSQZE',\n        },\n        initializationData: {\n            buttonStyle: {\n                height: 55,\n                color: 'black',\n                label: 'pay',\n            },\n            paymentButtonStyles: {\n                cartButtonStyles: {\n                    color: 'black',\n                    label: 'checkout',\n                },\n                pdpButtonStyles: {\n                    color: 'black',\n                    label: 'checkout',\n                },\n                checkoutTopButtonStyles: {\n                    color: 'silver',\n                    label: 'checkout',\n                },\n                checkoutPaymentButtonStyles: {\n                    color: 'black',\n                    label: 'pay',\n                    height: 55,\n                },\n            },\n            clientId: 'abc',\n            merchantId: 'JTS4DY7XFSQZE',\n            orderId: '3U4171152W1482642',\n            attributionId: '1123JLKJASD12',\n            intent: 'capture',\n            isAcceleratedCheckoutEnabled: false,\n            isPayPalCreditAvailable: false,\n            isVenmoEnabled: false,\n            shouldRenderFields: true,\n            shouldRunAcceleratedCheckout: false,\n            isHostedCheckoutEnabled: false,\n            paypalBNPLConfiguration: [\n                {\n                    id: 'checkout',\n                    name: 'Checkout page',\n                    status: true,\n                    styles: {\n                        layout: 'text',\n                        'logo-type': 'alternative',\n                        'text-color': 'white',\n                        'text-size': '10',\n                    },\n                },\n                {\n                    id: 'cart',\n                    name: 'Cart page',\n                    status: true,\n                    styles: {\n                        layout: 'text',\n                        'logo-type': 'alternative',\n                        'logo-position': 'right',\n                        'text-color': 'white',\n                        'text-size': '10',\n                    },\n                },\n            ],\n        },\n        skipRedirectConfirmationAlert: false,\n        type: 'PAYMENT_TYPE_API',\n    };\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/mocks/get-bigcommerce-payments-ratepay-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function getBigCommercePaymentsRatePayPaymentMethod(): PaymentMethod {\n    return {\n        id: 'ratepay',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        clientToken: 'asdcvY7XFSQasd',\n        config: {\n            testMode: true,\n            merchantId: 'JTS4DY7XFSQZE',\n        },\n        initializationData: {\n            clientId: 'abc',\n            merchantId: 'JTS4DY7XFSQZE',\n            orderId: '3U4171152W1482642',\n            attributionId: '1123JLKJASD12',\n            intent: 'capture',\n        },\n        skipRedirectConfirmationAlert: false,\n        type: 'PAYMENT_TYPE_API',\n    };\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/mocks/get-billing-address-from-order-details.mock.ts",
    "content": "import { BillingAddressRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getBigCommercePaymentsOrderDetails from './get-bigcommerce-payments-order-details.mock';\n\nexport default function getBillingAddressFromOrderDetails(): BillingAddressRequestBody {\n    const { payer } = getBigCommercePaymentsOrderDetails();\n\n    return {\n        firstName: payer.name.given_name,\n        lastName: payer.name.surname,\n        email: payer.email_address,\n        phone: payer.phone?.phone_number.national_number || '',\n        company: '',\n        address1: payer.address.address_line_1,\n        address2: payer.address.address_line_2,\n        city: payer.address.admin_area_2,\n        countryCode: payer.address.country_code,\n        postalCode: payer.address.postal_code,\n        stateOrProvince: '',\n        stateOrProvinceCode: payer.address.admin_area_1 || '',\n        customFields: [],\n    };\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/mocks/get-paypal-sdk.mock.ts",
    "content": "import { PayPalSDK } from '../bigcommerce-payments-types';\n\nconst cardFieldMethodsMock = {\n    render: jest.fn(),\n    clear: jest.fn(),\n    close: jest.fn(),\n    removeClass: jest.fn(),\n};\n\nexport default function getPayPalSDKMock(): PayPalSDK {\n    return {\n        Messages: () => ({\n            render: jest.fn(),\n        }),\n        PaymentFields: () => ({\n            render: jest.fn(),\n        }),\n        FUNDING: {\n            CARD: 'card',\n            PAYPAL: 'paypal',\n            CREDIT: 'credit',\n            PAYLATER: 'paylater',\n            OXXO: 'oxxo',\n            SEPA: 'sepa',\n            VENMO: 'venmo',\n        },\n        Buttons: () => ({\n            render: jest.fn(),\n            close: jest.fn(),\n            isEligible: jest.fn(() => true),\n        }),\n        CardFields: () =>\n            Promise.resolve({\n                isEligible: () => true,\n                CVVField: jest.fn().mockReturnValue(cardFieldMethodsMock),\n                ExpiryField: jest.fn().mockReturnValue(cardFieldMethodsMock),\n                NameField: jest.fn().mockReturnValue(cardFieldMethodsMock),\n                NumberField: jest.fn().mockReturnValue(cardFieldMethodsMock),\n                submit: jest.fn().mockReturnValue(Promise.resolve()),\n                getState: jest\n                    .fn()\n                    .mockReturnValue(Promise.resolve({ fields: { number: { isValid: true } } })),\n            }),\n        HostedFields: {\n            isEligible: () => true,\n            render: jest.fn(),\n        },\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        Legal: () => ({\n            render: jest.fn(),\n        }),\n    };\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/mocks/get-shipping-address-from-order-details.mock.ts",
    "content": "import { BillingAddressRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getBigCommercePaymentsOrderDetails from './get-bigcommerce-payments-order-details.mock';\n\nexport default function getShippingAddressFromOrderDetails(): BillingAddressRequestBody {\n    const orderDetails = getBigCommercePaymentsOrderDetails();\n\n    const { payer, purchase_units } = orderDetails;\n    const {\n        address,\n        name: { full_name },\n    } = purchase_units[0].shipping;\n    const [firstName, ...lastName] = full_name.split(' ');\n\n    return {\n        firstName,\n        lastName: lastName.join(' '),\n        email: payer.email_address,\n        phone: '',\n        company: '',\n        address1: address.address_line_1,\n        address2: address.address_line_2,\n        city: address.admin_area_2,\n        countryCode: address.country_code,\n        postalCode: address.postal_code,\n        stateOrProvince: '',\n        stateOrProvinceCode: address.admin_area_1 || '',\n        customFields: [],\n    };\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/src/mocks/index.ts",
    "content": "export { default as getBillingAddressFromOrderDetails } from './get-billing-address-from-order-details.mock';\nexport { default as getBigCommercePaymentsIntegrationServiceMock } from './get-bigcommerce-payments-integration-service-mock.mock';\nexport { default as getBigCommercePaymentsOrderDetails } from './get-bigcommerce-payments-order-details.mock';\nexport { default as getBigCommercePaymentsPaymentMethod } from './get-bigcommerce-payments-payment-method.mock';\nexport { default as getBigCommercePaymentsRatePayPaymentMethod } from './get-bigcommerce-payments-ratepay-payment-method.mock';\nexport { default as getPayPalSDKMock } from './get-paypal-sdk.mock';\nexport { default as getShippingAddressFromOrderDetails } from './get-shipping-address-from-order-details.mock';\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true,\n        \"lib\": [\n            \"es2017\",\n            \"dom\"\n        ]\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/.eslintrc.json",
    "content": "{\n    \"extends\": [\n        \"../../.eslintrc.json\"\n    ],\n    \"ignorePatterns\": [\n        \"!**/*\"\n    ],\n    \"overrides\": [\n        {\n            \"files\": [\n                \"*.ts\",\n                \"*.tsx\"\n            ],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\"\n            }\n        },\n        {\n            \"files\": [\n                \"*.spec.ts\"\n            ],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"jest/valid-expect\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\"\n            }\n        },\n        {\n            \"files\": [\n                \"*.mock.ts\"\n            ],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/README.md",
    "content": "# bigcommerce-payments-utils\n\nBigCommerce Payments (also known as BCP) is an all-in-one payment solution that is recommended by BigCommerce for all cohorts of clients\n\nbigcommerce-payments-utils contains shared utils logic, interfaces related to BCP that could be used in different packages (core package as well)\n\n## Running unit tests\n\nRun `npx nx test bigcommerce-payments-utils` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `npx nx lint bigcommerce-payments-utils` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/jest.config.js",
    "content": "module.exports = {\n    displayName: 'bigcommerce-payments-utils',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/bigcommerce-payments-utils',\n};\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/project.json",
    "content": "{\n    \"name\": \"bigcommerce-payments-utils\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/bigcommerce-payments-utils/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/bigcommerce-payments-utils/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/bigcommerce-payments-utils\"],\n            \"options\": {\n                \"jestConfig\": \"packages/bigcommerce-payments-utils/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/bigcommerce-payments-fastlane-utils.spec.ts",
    "content": "import {\n    PaymentMethodClientUnavailableError,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nimport BigCommercePaymentsFastlaneUtils from './bigcommerce-payments-fastlane-utils';\nimport {\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneSdk,\n    PayPalHostWindow,\n} from './bigcommerce-payments-types';\nimport { getPayPalFastlaneAuthenticationResultMock, getPayPalFastlaneSdk } from './mocks';\n\ndescribe('BigCommercePaymentsFastlaneUtils', () => {\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let subject: BigCommercePaymentsFastlaneUtils;\n\n    const methodIdMock = 'bigcommerce_payments_fastlane';\n    const authenticationResultMock = getPayPalFastlaneAuthenticationResultMock();\n\n    const bcAddressMock = {\n        address1: 'addressLine1',\n        address2: 'addressLine2',\n        city: 'addressCity',\n        company: 'BigCommerce',\n        country: 'United States',\n        countryCode: 'US',\n        customFields: [],\n        firstName: 'John',\n        lastName: 'Doe',\n        phone: '15551113344',\n        postalCode: '03004',\n        stateOrProvince: 'addressState',\n        stateOrProvinceCode: 'addressState',\n    };\n\n    const paypalToBcAddressMock = {\n        ...bcAddressMock,\n        id: 1,\n        country: 'US',\n        type: 'paypal-address',\n    };\n\n    const paypalToBcInstrumentMock = {\n        bigpayToken: 'nonce/token',\n        brand: 'Visa',\n        defaultInstrument: false,\n        expiryMonth: '12',\n        expiryYear: '2030',\n        iin: '',\n        last4: '1111',\n        method: 'bigcommerce_payments_fastlane',\n        provider: 'bigcommerce_payments_fastlane',\n        trustedShippingAddress: false,\n        untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n        type: 'card',\n    };\n\n    beforeEach(() => {\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n\n        subject = new BigCommercePaymentsFastlaneUtils();\n\n        jest.spyOn(Date, 'now').mockImplementation(() => 1);\n    });\n\n    afterEach(() => {\n        (window as PayPalHostWindow).bigCommercePaymentsFastlane = undefined;\n\n        jest.resetAllMocks();\n        jest.restoreAllMocks();\n\n        localStorage.clear();\n    });\n\n    describe('#initializePayPalFastlane', () => {\n        it('initializes paypal fastlane with paypal sdk', async () => {\n            jest.spyOn(paypalFastlaneSdk, 'Fastlane');\n\n            await subject.initializePayPalFastlane(paypalFastlaneSdk, false);\n\n            expect(paypalFastlaneSdk.Fastlane).toHaveBeenCalled();\n        });\n\n        it('sets axo to sandbox mode if test mode is enabled', async () => {\n            jest.spyOn(Storage.prototype, 'setItem').mockImplementation(jest.fn);\n\n            await subject.initializePayPalFastlane(paypalFastlaneSdk, true);\n\n            expect(window.localStorage.setItem).toHaveBeenCalledWith('fastlaneEnv', 'sandbox');\n            expect(window.localStorage.setItem).toHaveBeenCalledWith('axoEnv', 'sandbox');\n        });\n    });\n\n    describe('#getPayPalFastlaneOrThrow', () => {\n        it('successfully returns paypal fastlane with no errors', async () => {\n            const expectedResult = await subject.initializePayPalFastlane(paypalFastlaneSdk, false);\n\n            expect(subject.getPayPalFastlaneOrThrow()).toEqual(expectedResult);\n        });\n\n        it('throws an error if paypal fastlane did not initialize before', () => {\n            try {\n                subject.getPayPalFastlaneOrThrow();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n\n    describe('#lookupCustomerOrThrow', () => {\n        const testEmail = 'john@doe.com';\n\n        it('successfully triggers lookup method with provided email', async () => {\n            const paypalConnectMock = await subject.initializePayPalFastlane(\n                paypalFastlaneSdk,\n                false,\n            );\n\n            await subject.lookupCustomerOrThrow(testEmail);\n\n            expect(paypalConnectMock.identity.lookupCustomerByEmail).toHaveBeenCalledWith(\n                testEmail,\n            );\n        });\n\n        it('throws an error if paypal fastlane did not initialize before', async () => {\n            try {\n                await subject.lookupCustomerOrThrow(testEmail);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n\n    describe('#triggerAuthenticationFlowOrThrow', () => {\n        const customerContextIdMock = 'ryanRecognised123';\n\n        it('successfully triggers authentication flow with provided customer id and styles', async () => {\n            const paypalFastlaneMock = await subject.initializePayPalFastlane(\n                paypalFastlaneSdk,\n                false,\n            );\n\n            await subject.triggerAuthenticationFlowOrThrow(customerContextIdMock);\n\n            expect(paypalFastlaneMock.identity.triggerAuthenticationFlow).toHaveBeenCalledWith(\n                customerContextIdMock,\n            );\n        });\n\n        it('throws an error if paypal fastlane did not initialize before', async () => {\n            try {\n                await subject.triggerAuthenticationFlowOrThrow(customerContextIdMock);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n\n    describe('#updateStorageSessionId', () => {\n        const sessionIdMock = 'cartId123';\n\n        it('updates browser cookies with session id', () => {\n            jest.spyOn(CookieStorage, 'set');\n\n            subject.updateStorageSessionId(sessionIdMock);\n\n            expect(CookieStorage.set).toHaveBeenCalledWith('bc-fastlane-sessionId', sessionIdMock, {\n                expires: expect.any(Date),\n                secure: true,\n            });\n        });\n    });\n\n    describe('#removeStorageSessionId', () => {\n        it('removes session id from browser cookies', () => {\n            jest.spyOn(CookieStorage, 'remove');\n\n            subject.removeStorageSessionId();\n\n            expect(CookieStorage.remove).toHaveBeenCalledWith('bc-fastlane-sessionId');\n        });\n    });\n\n    describe('#getStorageSessionId', () => {\n        it('returns session id to browser storage', () => {\n            jest.spyOn(CookieStorage, 'get');\n\n            subject.getStorageSessionId();\n\n            expect(CookieStorage.get).toHaveBeenCalledWith('bc-fastlane-sessionId');\n        });\n    });\n\n    describe('#mapPayPalFastlaneProfileToBcCustomerData', () => {\n        it('returns default \"empty\" data if authenticationResult is undefined', () => {\n            expect(subject.mapPayPalFastlaneProfileToBcCustomerData(methodIdMock, {})).toEqual({\n                authenticationState: PayPalFastlaneAuthenticationState.UNRECOGNIZED,\n                addresses: [],\n                billingAddress: undefined,\n                shippingAddress: undefined,\n                instruments: [],\n            });\n        });\n\n        it('returns mapped PayPal Fastlane Profile to BC like data', () => {\n            expect(\n                subject.mapPayPalFastlaneProfileToBcCustomerData(\n                    methodIdMock,\n                    authenticationResultMock,\n                ),\n            ).toEqual({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [paypalToBcAddressMock],\n                billingAddress: paypalToBcAddressMock,\n                shippingAddress: paypalToBcAddressMock,\n                instruments: [paypalToBcInstrumentMock],\n            });\n        });\n    });\n\n    describe('#mapBcToPayPalInstrument()', () => {\n        it('maps and returns PayPal Instrument mapped to BC shape', () => {\n            const result = subject.mapPayPalToBcInstrument(\n                methodIdMock,\n                authenticationResultMock.profileData.card,\n            );\n\n            expect(result).toEqual([paypalToBcInstrumentMock]);\n        });\n    });\n\n    describe('#mapBcToPayPalAddress()', () => {\n        it('maps and returns PayPal Address based on provided BC address', () => {\n            const result = subject.mapBcToPayPalAddress(bcAddressMock);\n\n            expect(result).toEqual({\n                addressLine1: 'addressLine1',\n                addressLine2: 'addressLine2',\n                adminArea1: 'addressState',\n                adminArea2: 'addressCity',\n                company: 'BigCommerce',\n                countryCode: 'US',\n                postalCode: '03004',\n            });\n        });\n\n        it('set adminArea1 with stateOrProvince value if stateOrProvinceCode is empty', () => {\n            const addressMock = {\n                address1: 'addressLine1',\n                address2: 'addressLine2',\n                city: 'addressCity',\n                company: 'BigCommerce',\n                country: 'United States',\n                countryCode: 'US',\n                customFields: [],\n                firstName: 'John',\n                lastName: 'Doe',\n                phone: '15551113344',\n                postalCode: '03004',\n                stateOrProvince: 'addressState1',\n                stateOrProvinceCode: '',\n            };\n            const result = subject.mapBcToPayPalAddress(addressMock);\n\n            expect(result).toEqual({\n                addressLine1: 'addressLine1',\n                addressLine2: 'addressLine2',\n                adminArea1: 'addressState1',\n                adminArea2: 'addressCity',\n                company: 'BigCommerce',\n                countryCode: 'US',\n                postalCode: '03004',\n            });\n        });\n    });\n\n    describe('#mapPayPalToBcAddress()', () => {\n        it('maps and returns PayPal Address based on provided BC address', () => {\n            const result = subject.mapPayPalToBcAddress(\n                authenticationResultMock.profileData.shippingAddress.address,\n                authenticationResultMock.profileData.shippingAddress.name,\n                authenticationResultMock.profileData.shippingAddress.phoneNumber,\n                [],\n            );\n\n            expect(result).toEqual(paypalToBcAddressMock);\n        });\n    });\n\n    describe('#filterAddresses()', () => {\n        it('returns only one address if provided addresses are the same', () => {\n            const result = subject.filterAddresses([paypalToBcAddressMock, paypalToBcAddressMock]);\n\n            expect(result).toHaveLength(1);\n        });\n\n        it('returns an array of addresses if provided addresses are different', () => {\n            const result = subject.filterAddresses([\n                paypalToBcAddressMock,\n                {\n                    ...paypalToBcAddressMock,\n                    firstName: 'John',\n                    lastName: 'Son',\n                },\n            ]);\n\n            expect(result).toHaveLength(2);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/bigcommerce-payments-fastlane-utils.ts",
    "content": "import { isEqual, omit } from 'lodash';\n\nimport {\n    Address,\n    CardInstrument,\n    CustomerAddress,\n    PaymentMethodClientUnavailableError,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nimport {\n    PayPalFastlane,\n    PayPalFastlaneAddress,\n    PayPalFastlaneAuthenticationResult,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneLookupCustomerByEmailResult,\n    PayPalFastlaneProfileCard,\n    PayPalFastlaneProfileName,\n    PayPalFastlaneProfilePhone,\n    PayPalFastlaneProfileToBcCustomerDataMappingResult,\n    PayPalFastlaneSdk,\n    PayPalFastlaneStylesOption,\n    PayPalHostWindow,\n} from './bigcommerce-payments-types';\n\nexport default class BigCommercePaymentsFastlaneUtils {\n    private window: PayPalHostWindow;\n\n    constructor() {\n        this.window = window;\n    }\n\n    async initializePayPalFastlane(\n        paypalFastlaneSdk: PayPalFastlaneSdk,\n        isTestModeEnabled: boolean,\n        styles?: PayPalFastlaneStylesOption,\n    ): Promise<PayPalFastlane> {\n        if (isTestModeEnabled) {\n            window.localStorage.setItem('fastlaneEnv', 'sandbox');\n            window.localStorage.setItem('axoEnv', 'sandbox'); // TODO: remove if this key does not use on PayPal side\n        }\n\n        if (!this.window.bigCommercePaymentsFastlane) {\n            const defaultStyles = {\n                root: {\n                    backgroundColorPrimary: 'transparent',\n                },\n            };\n\n            this.window.bigCommercePaymentsFastlane = await paypalFastlaneSdk.Fastlane({\n                styles: styles || defaultStyles,\n            });\n        }\n\n        return this.window.bigCommercePaymentsFastlane;\n    }\n\n    getPayPalFastlaneOrThrow(): PayPalFastlane {\n        if (!this.window.bigCommercePaymentsFastlane) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.window.bigCommercePaymentsFastlane;\n    }\n\n    /**\n     *\n     * Detects the customer to PayPal Fastlane relation and\n     * returns customerContextId to use it for authentication\n     *\n     */\n    async lookupCustomerOrThrow(email: string): Promise<PayPalFastlaneLookupCustomerByEmailResult> {\n        const paypalFastlane = this.getPayPalFastlaneOrThrow();\n\n        return paypalFastlane.identity.lookupCustomerByEmail(email);\n    }\n\n    /**\n     *\n     * Triggers authentication flow (shows OTP popup) if the customer recognised as PayPal Fastlane user\n     * and returns PayPal Fastlane Profile data to use it in BC checkout\n     *\n     */\n    async triggerAuthenticationFlowOrThrow(\n        customerContextId?: string,\n    ): Promise<PayPalFastlaneAuthenticationResult> {\n        if (!customerContextId) {\n            return {};\n        }\n\n        const paypalFastlane = this.getPayPalFastlaneOrThrow();\n\n        return paypalFastlane.identity.triggerAuthenticationFlow(customerContextId);\n    }\n\n    /**\n     *\n     * 'updateStorageSessionId' method is used to:\n     * - set session id after user was authenticated (or unrecognised) to trigger authentication after page refresh\n     *\n     * Flow info:\n     * If user unrecognised then the lookup method will be working but the OTP will not be shown\n     * If user recognised and not canceled then the lookup method will be working and the OTP will be shown only if needed\n     * If user cancels the OPT then OTP will not be triggered after page refresh\n     *\n     */\n    updateStorageSessionId(sessionId: string): void {\n        const expires = new Date();\n\n        expires.setDate(expires.getDate() + 14); // 2 weeks expiry\n\n        const cookiesOption = {\n            expires,\n            secure: true,\n        };\n\n        CookieStorage.set('bc-fastlane-sessionId', sessionId, cookiesOption);\n    }\n\n    removeStorageSessionId(): void {\n        CookieStorage.remove('bc-fastlane-sessionId');\n    }\n\n    getStorageSessionId(): string {\n        return CookieStorage.get('bc-fastlane-sessionId') || '';\n    }\n\n    /**\n     *\n     * 'mapPayPalFastlaneProfileToBcCustomerData' method is responsible for:\n     * - mapping PayPal Fastlane Profile data to BC data shape\n     * - returning mapped data to use for updating PaymentProviderCustomer state and\n     * update shipping and billing addresses\n     *\n     */\n    mapPayPalFastlaneProfileToBcCustomerData(\n        methodId: string,\n        authenticationResult: PayPalFastlaneAuthenticationResult,\n    ): PayPalFastlaneProfileToBcCustomerDataMappingResult {\n        const { authenticationState, profileData } = authenticationResult;\n\n        const paypalBillingAddress = profileData?.card?.paymentSource?.card?.billingAddress;\n        const paypalShippingAddress = profileData?.shippingAddress;\n        const paypalProfileName = profileData?.name;\n        const paypalInstrument = profileData?.card;\n\n        const shippingAddress = paypalShippingAddress\n            ? this.mapPayPalToBcAddress(\n                  paypalShippingAddress.address,\n                  paypalShippingAddress.name,\n                  paypalShippingAddress.phoneNumber,\n              )\n            : undefined;\n        const billingAddress =\n            paypalBillingAddress && paypalProfileName\n                ? this.mapPayPalToBcAddress(\n                      paypalBillingAddress,\n                      paypalProfileName,\n                      paypalShippingAddress?.phoneNumber,\n                  )\n                : undefined;\n        const instruments = paypalInstrument\n            ? this.mapPayPalToBcInstrument(methodId, paypalInstrument)\n            : [];\n\n        const addresses = this.filterAddresses([shippingAddress, billingAddress]);\n\n        return {\n            authenticationState:\n                authenticationState || PayPalFastlaneAuthenticationState.UNRECOGNIZED,\n            addresses,\n            billingAddress,\n            shippingAddress,\n            instruments,\n        };\n    }\n\n    mapPayPalToBcInstrument(\n        methodId: string,\n        instrument: PayPalFastlaneProfileCard,\n    ): CardInstrument[] {\n        const { id, paymentSource } = instrument;\n        const { brand, expiry, lastDigits } = paymentSource.card;\n\n        const [expiryYear, expiryMonth] = expiry.split('-');\n\n        return [\n            {\n                bigpayToken: id,\n                brand,\n                defaultInstrument: false,\n                expiryMonth,\n                expiryYear,\n                iin: '',\n                last4: lastDigits,\n                method: methodId,\n                provider: methodId,\n                trustedShippingAddress: false,\n                untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n                type: 'card',\n            },\n        ];\n    }\n\n    mapBcToPayPalAddress(address?: Address): PayPalFastlaneAddress {\n        return {\n            company: address?.company || '',\n            addressLine1: address?.address1 || '',\n            addressLine2: address?.address2 || '',\n            adminArea1: address?.stateOrProvinceCode || address?.stateOrProvince || '',\n            adminArea2: address?.city || '',\n            postalCode: address?.postalCode || '',\n            countryCode: address?.countryCode || '',\n        };\n    }\n\n    mapPayPalToBcAddress(\n        address: PayPalFastlaneAddress,\n        profileName: PayPalFastlaneProfileName,\n        phone?: PayPalFastlaneProfilePhone,\n        customFields?: CustomerAddress['customFields'],\n    ): CustomerAddress {\n        const [firstName, lastName] = profileName.fullName.split(' ');\n\n        const phoneData = {\n            nationalNumber: phone?.nationalNumber || '',\n            countryCode: phone?.countryCode || '',\n        };\n\n        return {\n            id: Date.now(),\n            type: 'paypal-address',\n            firstName: profileName.firstName || firstName || '',\n            lastName: profileName.lastName || lastName || '',\n            company: address.company || '',\n            address1: address.addressLine1,\n            address2: address.addressLine2 || '',\n            city: address.adminArea2,\n            stateOrProvince: address.adminArea1,\n            stateOrProvinceCode: address.adminArea1,\n            country: address.countryCode || '', // TODO: update country with valid naming\n            countryCode: address.countryCode || '',\n            postalCode: address.postalCode,\n            phone: phoneData.countryCode + phoneData.nationalNumber,\n            customFields: customFields || [],\n        };\n    }\n\n    /**\n     *\n     * This method is responsible for filtering PayPal Fastlane addresses if they are the same\n     * and returns an array of addresses to use them for shipping and/or billing address selections\n     * so the customer will be able to use addresses from PayPal Fastlane in checkout flow\n     *\n     */\n    filterAddresses(addresses: Array<CustomerAddress | undefined>): CustomerAddress[] {\n        return addresses.reduce(\n            (customerAddresses: CustomerAddress[], currentAddress: CustomerAddress | undefined) => {\n                if (!currentAddress) {\n                    return customerAddresses;\n                }\n\n                const sameAddressInTheArray = customerAddresses.some((customerAddress) =>\n                    this.isEqualAddresses(customerAddress, currentAddress),\n                );\n\n                return sameAddressInTheArray\n                    ? customerAddresses\n                    : [...customerAddresses, currentAddress];\n            },\n            [],\n        );\n    }\n\n    private isEqualAddresses(\n        firstAddress: CustomerAddress,\n        secondAddress: CustomerAddress,\n    ): boolean {\n        return isEqual(this.normalizeAddress(firstAddress), this.normalizeAddress(secondAddress));\n    }\n\n    private normalizeAddress(address: CustomerAddress) {\n        return omit(address, ['id', 'phone']);\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/bigcommerce-payments-types.ts",
    "content": "import { CardInstrument, CustomerAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n *\n * BigCommerce Payments Funding sources\n *\n */\nexport type FundingType = string;\n\n/**\n *\n * BigCommerce Payments Initialization Data\n *\n */\nexport interface BigCommercePaymentsInitializationData {\n    attributionId?: string;\n    availableAlternativePaymentMethods: FundingType[];\n    buttonStyle?: PayPalButtonStyleOptions;\n    buyerCountry?: string;\n    clientId: string;\n    clientToken?: string;\n    fastlaneStyles?: FastlaneStylesSettings;\n    connectClientToken?: string; // TODO: remove when BCP Fastlane A/B test will be finished\n    enabledAlternativePaymentMethods: FundingType[];\n    isDeveloperModeApplicable?: boolean;\n    intent?: BigCommercePaymentsIntent;\n    isAcceleratedCheckoutEnabled?: boolean; // PayPal Fastlane related\n    isFastlaneShippingOptionAutoSelectEnabled?: boolean; // PayPal Fastlane related\n    isFastlaneStylingEnabled?: boolean;\n    isHostedCheckoutEnabled?: boolean;\n    isBigCommercePaymentsAnalyticsV2Enabled?: boolean; // PayPal Fastlane related\n    isPayPalCreditAvailable?: boolean;\n    isVenmoEnabled?: boolean;\n    isGooglePayEnabled?: boolean;\n    merchantId?: string;\n    orderId?: string;\n    shouldRenderFields?: boolean;\n    shouldRunAcceleratedCheckout?: boolean; // TODO: remove when BCP Fastlane A/B test will be finished\n    paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\n    paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[];\n    threeDSVerificationMethod?: string;\n}\n\n/**\n *\n * PayPalHostWindow contains different\n * PayPal Sdk instances for different purposes\n *\n */\nexport interface PayPalHostWindow extends Window {\n    bigCommercePaymentsFastlane?: PayPalFastlane;\n    bigCommercePaymentsFastlaneSdk?: PayPalFastlaneSdk;\n    bigCommercePaymentsMessages?: PayPalMessagesSdk;\n    bigCommercePaymentsApms?: PayPalApmSdk;\n    bigCommercePaymentsGooglePay?: PayPalGooglePaySdk;\n}\n\n/**\n *\n * PayPal SDK config\n *\n */\nexport interface PayPalSdkConfig {\n    options: {\n        'client-id'?: string;\n        'merchant-id'?: string;\n        'buyer-country'?: string;\n        'enable-funding'?: FundingType[];\n        'disable-funding'?: FundingType[];\n        currency?: string;\n        commit?: boolean;\n        intent?: BigCommercePaymentsIntent;\n        components?: PayPalSdkComponents;\n    };\n    attributes: {\n        'data-client-metadata-id'?: string;\n        'data-partner-attribution-id'?: string;\n        'data-user-id-token'?: string;\n        'data-namespace'?: string;\n        'data-client-token'?: string;\n        'data-sdk-client-token'?: string;\n    };\n}\n\nexport enum BigCommercePaymentsIntent {\n    AUTHORIZE = 'authorize',\n    CAPTURE = 'capture',\n}\n\nexport type PayPalSdkComponents = Array<\n    'fastlane' | 'messages' | 'buttons' | 'payment-fields' | 'googlepay' | 'three-domain-secure'\n>;\n\n/**\n *\n * PayPal Sdk instances\n *\n */\nexport enum LiabilityShiftEnum {\n    Possible = 'POSSIBLE',\n    No = 'NO',\n    Unknown = 'UNKNOWN',\n    Yes = 'YES',\n}\n\nexport interface threeDSecureParameters {\n    amount: string;\n    currency: string;\n    nonce: string;\n    threeDSRequested: boolean;\n    transactionContext: {\n        experience_context: {\n            brand_name?: string;\n            locale: string;\n            return_url: string;\n            cancel_url: string;\n        };\n    };\n}\n\nexport interface PayPalFastlaneSdk {\n    ThreeDomainSecureClient: {\n        isEligible(params: threeDSecureParameters): Promise<boolean>;\n        show(): Promise<ThreeDomainSecureClientShowResponse>;\n    };\n    Fastlane(options?: PayPalFastlaneOptions): Promise<PayPalFastlane>;\n}\n\ninterface ThreeDomainSecureClientShowResponse {\n    liabilityShift: LiabilityShiftEnum;\n    authenticationState: TDSecureAuthenticationState;\n    nonce: string; // Enriched nonce or the original nonce\n}\n\nexport interface PayPalMessagesSdk {\n    Messages(options: MessagingOptions): MessagingRender;\n}\n\nexport interface PayPalApmSdk {\n    Buttons(options: BigCommercePaymentsButtonsOptions): BigCommercePaymentsButtons;\n    PaymentFields(\n        options: BigCommercePaymentsPaymentFieldsOptions,\n    ): BigCommercePaymentsPaymentFields;\n}\n\nexport interface PayPalGooglePaySdk {\n    Googlepay(): GooglePay;\n}\n\nexport enum TDSecureVerificationMethod {\n    Always = 'SCA_ALWAYS',\n}\n\nexport enum TDSecureAuthenticationState {\n    Succeeded = 'succeeded',\n    Cancelled = 'cancelled',\n    Errored = 'errored',\n}\n\n/**\n *\n * Google Pay related types\n *\n */\n\ninterface GooglePay {\n    config: () => Promise<GooglePayConfig>;\n    confirmOrder: (confirmOrderConfig: ConfirmOrderConfig) => Promise<{ status: string }>;\n    initiatePayerAction: (payerActionConfig: PayerActionConfig) => Promise<void>;\n}\n\ninterface ConfirmOrderConfig {\n    orderId: string;\n    paymentMethodData: ConfirmOrderData;\n}\n\nexport interface ConfirmOrderData {\n    tokenizationData: {\n        type: string;\n        token: string;\n    };\n    info: {\n        cardNetwork: string;\n        cardDetails: string;\n    };\n    type: string;\n}\n\ninterface PayerActionConfig {\n    orderId: string;\n}\n\nexport interface GooglePayConfig {\n    allowedPaymentMethods: AllowedPaymentMethods[];\n    apiVersion: number;\n    apiVersionMinor: number;\n    countryCode: string;\n    isEligible: boolean;\n    merchantInfo: {\n        merchantId: string;\n        merchantOrigin: string;\n    };\n}\n\nexport interface AllowedPaymentMethods {\n    type: string;\n    parameters: {\n        allowedAuthMethods: string[];\n        allowedCardNetworks: string[];\n        billingAddressRequired: boolean;\n        assuranceDetailsRequired: boolean;\n        billingAddressParameters: {\n            format: string;\n        };\n    };\n    tokenizationSpecification: {\n        type: string;\n        parameters: {\n            gateway: string;\n            gatewayMerchantId: string;\n        };\n    };\n}\n\n/**\n *\n * BigCommerce Payments Buttons\n *\n */\nexport interface BigCommercePaymentsButtons {\n    render(id: string): void;\n    close(): void;\n    isEligible(): boolean;\n}\n\nexport interface BigCommercePaymentsButtonsOptions {\n    style?: PayPalButtonStyleOptions;\n    fundingSource: string;\n    createOrder(): Promise<string>;\n    onApprove(\n        data: PayPalButtonApproveCallbackPayload,\n        actions: PayPalButtonApproveCallbackActions,\n    ): Promise<boolean | void> | void;\n    onInit?(\n        data: PayPalButtonInitCallbackPayload,\n        actions: PayPalButtonInitCallbackActions,\n    ): Promise<void>;\n    onClick?(\n        data: PayPalButtonClickCallbackPayload,\n        actions: PayPalButtonClickCallbackActions,\n    ): Promise<void> | void;\n    onError?(error: Error): void;\n    onCancel?(): void;\n}\n\nexport interface PayPalButtonClickCallbackPayload {\n    fundingSource: string;\n}\n\nexport interface PayPalButtonClickCallbackActions {\n    reject(): void;\n    resolve(): void;\n}\n\nexport interface PayPalButtonInitCallbackPayload {\n    correlationID: string;\n}\n\nexport interface PayPalButtonInitCallbackActions {\n    disable(): void;\n    enable(): void;\n}\n\nexport interface PayPalButtonApproveCallbackPayload {\n    orderID?: string;\n}\n\nexport interface PayPalButtonApproveCallbackActions {\n    order: {\n        get: () => Promise<PayPalOrderDetails>;\n    };\n}\n\nexport interface PayPalOrderDetails {\n    payer: {\n        name: {\n            given_name: string;\n            surname: string;\n        };\n        email_address: string;\n        address: PayPalOrderAddress;\n    };\n    purchase_units: Array<{\n        shipping: {\n            address: PayPalOrderAddress;\n        };\n    }>;\n}\n\nexport interface PayPalOrderAddress {\n    address_line_1: string;\n    admin_area_2: string;\n    admin_area_1?: string;\n    postal_code: string;\n    country_code: string;\n}\n\nexport enum StyleButtonLabel {\n    paypal = 'paypal',\n    checkout = 'checkout',\n    buynow = 'buynow',\n    pay = 'pay',\n    installment = 'installment',\n}\n\nexport enum StyleButtonColor {\n    gold = 'gold',\n    blue = 'blue',\n    silver = 'silver',\n    black = 'black',\n    white = 'white',\n}\n\nexport enum StyleButtonShape {\n    pill = 'pill',\n    rect = 'rect',\n}\n\nexport interface PayPalButtonStyleOptions {\n    color?: StyleButtonColor;\n    shape?: StyleButtonShape;\n    height?: number;\n    label?: StyleButtonLabel;\n}\n\n/**\n *\n * BigCommerce Payments PaymentFields fields\n *\n */\nexport interface BigCommercePaymentsPaymentFields {\n    render(id: string): void;\n}\n\nexport interface BigCommercePaymentsPaymentFieldsOptions {\n    style?: BigCommercePaymentsFieldsStyleOptions;\n    fundingSource: string;\n    fields: {\n        name?: {\n            value?: string;\n        };\n        email?: {\n            value?: string;\n        };\n    };\n}\n\nexport interface BigCommercePaymentsFieldsStyleOptions {\n    variables?: {\n        fontFamily?: string;\n        fontSizeBase?: string;\n        fontSizeSm?: string;\n        fontSizeM?: string;\n        fontSizeLg?: string;\n        textColor?: string;\n        colorTextPlaceholder?: string;\n        colorBackground?: string;\n        colorInfo?: string;\n        colorDanger?: string;\n        borderRadius?: string;\n        borderColor?: string;\n        borderWidth?: string;\n        borderFocusColor?: string;\n        spacingUnit?: string;\n    };\n    rules?: {\n        [key: string]: any;\n    };\n}\n\n/**\n *\n * PayLater Messages related types\n * doc: https://developer.paypal.com/docs/checkout/pay-later/us/integrate/reference\n */\nexport interface MessagingRender {\n    render(container: string): void;\n}\n\nexport interface MessagesStyleOptions {\n    color?: string; // 'blue' | 'black' | 'white' | 'white-no-border' | 'gray' | 'monochrome' | 'grayscale'\n    layout?: string; // 'text' | 'flex'\n    logo?: {\n        type?: string; // 'primary' | 'alternative' | 'inline' | 'none'\n        position?: string; // 'left' | 'right' | 'top'\n    };\n    ratio?: string; // '1x1' | '1x4' | '8x1' | '20x1'\n    text?: {\n        align?: string; // 'left' | 'right' | 'center'\n        color?: string; // 'black' | 'white' | 'monochrome' | 'grayscale'\n        size?: number; // from 10 to 16\n    };\n}\n\nexport interface MessagingOptions {\n    amount: number;\n    placement: string;\n    style?: MessagesStyleOptions;\n}\n\nexport interface PayPalBNPLConfigurationItem {\n    id: string;\n    name: string;\n    status: boolean;\n    styles: Record<string, string>;\n}\n\n/**\n *\n * PayPal Fastlane related types\n *\n */\nexport interface PayPalFastlane {\n    identity: PayPalFastlaneIdentity;\n    events: PayPalFastlaneEvents;\n    profile: PayPalFastlaneProfile;\n    FastlaneCardComponent(\n        options: PayPalFastlaneCardComponentOptions,\n    ): Promise<PayPalFastlaneCardComponentMethods>;\n}\n\nexport interface PayPalFastlaneOptions {\n    styles?: PayPalFastlaneStylesOption;\n}\n\nexport interface PayPalFastlaneIdentity {\n    lookupCustomerByEmail(email: string): Promise<PayPalFastlaneLookupCustomerByEmailResult>;\n    triggerAuthenticationFlow(\n        customerContextId: string,\n    ): Promise<PayPalFastlaneAuthenticationResult>;\n}\n\nexport interface PayPalFastlaneLookupCustomerByEmailResult {\n    customerContextId?: string;\n}\n\nexport interface PayPalFastlaneAuthenticationResult {\n    authenticationState?: PayPalFastlaneAuthenticationState;\n    profileData?: PayPalFastlaneProfileData;\n}\n\nexport enum PayPalFastlaneAuthenticationState {\n    SUCCEEDED = 'succeeded',\n    FAILED = 'failed',\n    CANCELED = 'canceled',\n    UNRECOGNIZED = 'unrecognized',\n}\n\nexport interface PayPalFastlaneProfileData {\n    name: PayPalFastlaneProfileName;\n    shippingAddress: PayPalFastlaneShippingAddress;\n    card: PayPalFastlaneProfileCard;\n}\n\nexport interface PayPalFastlaneProfileName {\n    fullName: string;\n    firstName?: string;\n    lastName?: string;\n}\n\nexport interface PayPalFastlaneProfilePhone {\n    countryCode: string;\n    nationalNumber: string;\n}\n\nexport interface PayPalFastlaneShippingAddress {\n    name: PayPalFastlaneProfileName;\n    phoneNumber: PayPalFastlaneProfilePhone;\n    address: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneProfileCard {\n    id: string; // nonce / token\n    paymentSource: PayPalFastlanePaymentSource;\n}\n\nexport interface PayPalFastlanePaymentSource {\n    card: PayPalFastlaneCardSource;\n}\n\nexport interface PayPalFastlaneCardSource {\n    brand: string;\n    expiry: string; // \"YYYY-MM\"\n    lastDigits: string; // \"1111\"\n    name: string;\n    billingAddress: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneAddress {\n    company?: string;\n    addressLine1: string;\n    addressLine2?: string;\n    adminArea1: string; // State\n    adminArea2: string; // City\n    postalCode: string;\n    countryCode?: string;\n}\n\nexport interface PayPalFastlaneProfileToBcCustomerDataMappingResult {\n    authenticationState: PayPalFastlaneAuthenticationState;\n    addresses: CustomerAddress[];\n    billingAddress?: CustomerAddress;\n    shippingAddress?: CustomerAddress;\n    instruments: CardInstrument[];\n}\n\nexport interface PayPalFastlaneStylesOption {\n    root?: {\n        backgroundColorPrimary?: string;\n        errorColor?: string;\n        fontFamily?: string;\n        fontSizeBase?: string;\n        padding?: string;\n        primaryColor?: string;\n    };\n    input?: {\n        borderRadius?: string;\n        borderColor?: string;\n        focusBorderColor?: string;\n        backgroundColor?: string;\n        borderWidth?: string;\n        textColorBase?: string;\n    };\n    toggle?: {\n        colorPrimary?: string;\n        colorSecondary?: string;\n    };\n    text?: {\n        body?: {\n            color?: string;\n            fontSize?: string;\n        };\n        caption?: {\n            color?: string;\n            fontSize?: string;\n        };\n    };\n    branding?: string; // 'light' | 'dark'\n}\n\nexport interface PayPalFastlaneProfile {\n    showCardSelector(): Promise<PayPalFastlaneCardSelectorResponse>;\n    showShippingAddressSelector(): Promise<PayPalFastlaneShippingAddressSelectorResponse>;\n}\n\nexport interface PayPalFastlaneShippingAddressSelectorResponse {\n    selectionChanged: boolean;\n    selectedAddress: PayPalFastlaneShippingAddress;\n}\n\nexport interface PayPalFastlaneCardSelectorResponse {\n    selectionChanged: boolean;\n    selectedCard: PayPalFastlaneProfileCard;\n}\n\nexport interface PayPalFastlaneCardComponentMethods {\n    getPaymentToken(\n        options: PayPalFastlaneGetPaymentTokenOptions,\n    ): Promise<PayPalFastlaneProfileCard>;\n    render(element: string): void;\n}\n\nexport interface PayPalFastlaneGetPaymentTokenOptions {\n    name?: PayPalFastlaneProfileName;\n    billingAddress?: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneCardComponentOptions {\n    fields?: PayPalFastlaneCardComponentFields;\n}\n\nexport interface PayPalFastlaneCardComponentFields {\n    cardholderName?: {\n        enabled?: boolean;\n        prefill?: string;\n    };\n    phoneNumber?: {\n        placeholder?: string;\n        prefill?: string;\n    };\n}\n\nexport interface PayPalFastlaneEvents {\n    apmSelected: (options: PayPalFastlaneApmSelectedEventOptions) => void;\n    emailSubmitted: (options: PayPalFastlaneEmailEnteredEventOptions) => void;\n    orderPlaced: (options: PayPalFastlaneOrderPlacedEventOptions) => void;\n}\n\nexport interface PayPalFastlaneEventCommonOptions {\n    context_type: 'cs_id';\n    context_id: string; // checkout session id\n    page_type: 'checkout_page';\n    page_name: string; // title of the checkout initiation page\n    partner_name: 'bigc';\n    user_type: 'store_member' | 'store_guest'; // type of the user on the merchant site\n    store_id: string;\n    merchant_name: string;\n    experiment: string; // stringify JSON object \"[{ treatment_group: 'test' | 'control' }]\"\n}\n\nexport interface PayPalFastlaneApmSelectedEventOptions extends PayPalFastlaneEventCommonOptions {\n    apm_shown: '0' | '1'; // alternate payment shown on the checkout page\n    apm_list: string; // list of alternate payment shown on checkout page\n    apm_selected: string; // alternate payment method selected / methodId\n    apm_location: 'pre-email section' | 'payment section'; // placement of APM, whether it be above the email entry or in the radio buttons\n}\n\nexport interface PayPalFastlaneEmailEnteredEventOptions extends PayPalFastlaneEventCommonOptions {\n    user_email_saved: boolean; // shows whether checkout was loaded with or without a saved email\n    apm_shown: '0' | '1'; // alternate payment shown on the checkout page\n    apm_list: string; // list of alternate payment shown on checkout page 'applepay,googlepay,paypal'\n}\n\nexport interface PayPalFastlaneOrderPlacedEventOptions extends PayPalFastlaneEventCommonOptions {\n    selected_payment_method: string;\n    currency_code: string;\n}\n\nexport interface PayPalFastlanePaymentFormattedPayload {\n    paypal_connect_token?: {\n        order_id?: string;\n        token: string;\n    };\n    paypal_fastlane_token?: {\n        order_id?: string;\n        token: string;\n    };\n}\n\nexport interface FastlaneStylesSettings {\n    fastlaneRootSettingsBackgroundColor?: string;\n    fastlaneRootSettingsErrorColor?: string;\n    fastlaneRootSettingsFontFamily?: string;\n    fastlaneRootSettingsPadding?: string;\n    fastlaneRootSettingsPrimaryColor?: string;\n    fastlaneRootSettingsFontSize?: string;\n    fastlaneInputSettingsBackgroundColor?: string;\n    fastlaneInputSettingsBorderRadius?: string;\n    fastlaneInputSettingsBorderWidth?: string;\n    fastlaneInputSettingsTextColorBase?: string;\n    fastlaneInputSettingsBorderColor?: string;\n    fastlaneInputSettingsFocusBorderBase?: string;\n    fastlaneToggleSettingsColorPrimary?: string;\n    fastlaneToggleSettingsColorSecondary?: string;\n    fastlaneTextBodySettingsColor?: string;\n    fastlaneTextBodySettingsFontSize?: string;\n    fastlaneTextCaptionSettingsFontSize?: string;\n    fastlaneTextCaptionSettingsColor?: string;\n    fastlaneBrandingSettings?: string;\n}\n\nexport interface RedirectError {\n    body: {\n        additional_action_required: {\n            data: {\n                redirect_url: string;\n            };\n        };\n    };\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/create-bigcommerce-payments-fastlane-utils.spec.ts",
    "content": "import BigCommercePaymentsFastlaneUtils from './bigcommerce-payments-fastlane-utils';\nimport createBigCommercePaymentsFastlaneUtils from './create-bigcommerce-payments-fastlane-utils';\n\ndescribe('createBigCommercePaymentsFastlaneUtils', () => {\n    it('instantiates BigCommerce Payments Fastlane utils class', () => {\n        const utilsClass = createBigCommercePaymentsFastlaneUtils();\n\n        expect(utilsClass).toBeInstanceOf(BigCommercePaymentsFastlaneUtils);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/create-bigcommerce-payments-fastlane-utils.ts",
    "content": "import BigCommercePaymentsFastlaneUtils from './bigcommerce-payments-fastlane-utils';\n\nexport default function createBigCommercePaymentsFastlaneUtils(): BigCommercePaymentsFastlaneUtils {\n    return new BigCommercePaymentsFastlaneUtils();\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/create-bigcommerce-payments-sdk.spec.ts",
    "content": "import createBigCommercePaymentsSdk from './create-bigcommerce-payments-sdk';\nimport PayPalSdkHelper from './paypal-sdk-helper';\n\ndescribe('createBigCommercePaymentsSdk', () => {\n    it('instantiates BigCommerce Payments SDK', () => {\n        const BigCommercePaymentsSdkInstance = createBigCommercePaymentsSdk();\n\n        expect(BigCommercePaymentsSdkInstance).toBeInstanceOf(PayPalSdkHelper);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/create-bigcommerce-payments-sdk.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport PayPalSdkHelper from './paypal-sdk-helper';\n\nexport default function createBigCommercePaymentsSdk(): PayPalSdkHelper {\n    return new PayPalSdkHelper(createScriptLoader());\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/index.ts",
    "content": "export * from './bigcommerce-payments-types';\nexport * from './mocks';\nexport * from './utils';\n\n// TODO: this export should be moved to ./utils/index.ts file\nexport { default as isBigCommercePaymentsProviderError } from './utils/is-bigcommerce-payments-provider-error';\n\n/**\n *\n * BigCommerce Payments Sdk exports\n *\n * */\n// TODO Rename createBigCommercePaymentsSdk to createBigCommercePaymentsPayPalSdk\nexport { default as createBigCommercePaymentsSdk } from './create-bigcommerce-payments-sdk';\nexport { default as PayPalSdkHelper } from './paypal-sdk-helper';\n\n/**\n *\n * BigCommerce Payments Fastlane utils exports\n *\n */\nexport { default as createBigCommercePaymentsFastlaneUtils } from './create-bigcommerce-payments-fastlane-utils';\nexport { default as BigCommercePaymentsFastlaneUtils } from './bigcommerce-payments-fastlane-utils';\n\nexport { default as isBigcommerceFastlaneRequestError } from './utils/is-bigcommerce-fastlane-request-error';\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/mocks/get-bigcommerce-payments-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BigCommercePaymentsIntent } from '../bigcommerce-payments-types';\n\nexport default function getBigCommercePaymentsPaymentMethod(): PaymentMethod {\n    return {\n        id: 'bigcommerce_payments',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        clientToken: 'asdcvY7XFSQasd',\n        config: {\n            testMode: true,\n            merchantId: 'JTS4DY7XFSQZE',\n        },\n        initializationData: {\n            buttonStyle: {\n                height: 55,\n                color: 'black',\n                label: 'pay',\n            },\n            paymentButtonStyles: {\n                cartButtonStyles: {\n                    color: 'black',\n                    label: 'checkout',\n                },\n                pdpButtonStyles: {\n                    color: 'black',\n                    label: 'checkout',\n                },\n                checkoutTopButtonStyles: {\n                    color: 'silver',\n                    label: 'checkout',\n                },\n                checkoutPaymentButtonStyles: {\n                    color: 'black',\n                    label: 'pay',\n                    height: 55,\n                },\n            },\n            availableAlternativePaymentMethods: [],\n            clientId: 'abc',\n            merchantId: 'JTS4DY7XFSQZE',\n            orderId: '3U4171152W1482642',\n            attributionId: '1123JLKJASD12',\n            intent: BigCommercePaymentsIntent.CAPTURE,\n            isAcceleratedCheckoutEnabled: false,\n            isBigCommercePaymentsAnalyticsV2Enabled: false,\n            isPayPalCreditAvailable: false,\n            isVenmoEnabled: false,\n            shouldRenderFields: true,\n            shouldRunAcceleratedCheckout: false,\n            isHostedCheckoutEnabled: false,\n            isDeveloperModeApplicable: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getBigCommercePaymentsFastlanePaymentMethod(): PaymentMethod {\n    const bigCommercePaymentsDefaultPaymentMethod = getBigCommercePaymentsPaymentMethod();\n\n    return {\n        ...bigCommercePaymentsDefaultPaymentMethod,\n        id: 'bigcommerce_payments_fastlane',\n        initializationData: {\n            ...bigCommercePaymentsDefaultPaymentMethod.initializationData,\n            isAcceleratedCheckoutEnabled: true,\n            shouldRunAcceleratedCheckout: true,\n            isBigCommercePaymentsAnalyticsV2Enabled: true,\n        },\n    };\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/mocks/get-paypal-fastlane-authentication-result.mock.ts",
    "content": "import { PayPalFastlaneAuthenticationState } from '../bigcommerce-payments-types';\n\nexport default function getPayPalFastlaneAuthenticationResultMock() {\n    return {\n        authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n        profileData: {\n            name: {\n                fullName: 'John Doe',\n                firstName: 'John',\n                lastName: 'Doe',\n            },\n            shippingAddress: {\n                address: {\n                    company: 'BigCommerce',\n                    addressLine1: 'addressLine1',\n                    addressLine2: 'addressLine2',\n                    adminArea1: 'addressState',\n                    adminArea2: 'addressCity',\n                    postalCode: '03004',\n                    countryCode: 'US',\n                },\n                name: {\n                    fullName: 'John Doe',\n                    firstName: 'John',\n                    lastName: 'Doe',\n                },\n                phoneNumber: {\n                    nationalNumber: '5551113344',\n                    countryCode: '1',\n                },\n            },\n            card: {\n                id: 'nonce/token',\n                paymentSource: {\n                    card: {\n                        brand: 'Visa',\n                        expiry: '2030-12',\n                        lastDigits: '1111',\n                        name: 'John Doe',\n                        billingAddress: {\n                            firstName: 'John',\n                            lastName: 'Doe',\n                            company: 'BigCommerce',\n                            addressLine1: 'addressLine1',\n                            addressLine2: 'addressLine2',\n                            adminArea1: 'addressState',\n                            adminArea2: 'addressCity',\n                            postalCode: '03004',\n                            countryCode: 'US',\n                            phone: {\n                                nationalNumber: '5551113344',\n                                countryCode: '1',\n                            },\n                        },\n                    },\n                },\n            },\n        },\n    };\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/mocks/get-paypal-fastlane-sdk.mock.ts",
    "content": "import { PayPalFastlaneSdk } from '../bigcommerce-payments-types';\n\nimport getPayPalFastlane from './get-paypal-fastlane.mock';\n\nexport default function getPayPalFastlaneSdk(): PayPalFastlaneSdk {\n    return {\n        ThreeDomainSecureClient: {\n            isEligible: jest.fn(),\n            show: jest.fn(),\n        },\n        Fastlane: () => Promise.resolve(getPayPalFastlane()),\n    };\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/mocks/get-paypal-fastlane.mock.ts",
    "content": "import { PayPalFastlane, PayPalFastlaneCardComponentMethods } from '../bigcommerce-payments-types';\n\nexport default function getPayPalFastlane(): PayPalFastlane {\n    const paypalFastlaneComponentMethods: PayPalFastlaneCardComponentMethods = {\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        getPaymentToken: jest.fn(() => ({\n            id: 'paypal_fastlane_instrument_id_nonce',\n            paymentSource: {\n                card: {\n                    brand: 'Visa',\n                    expiry: '2030-12',\n                    lastDigits: '1111',\n                    name: 'John Doe',\n                    billingAddress: {\n                        firstName: 'John',\n                        lastName: 'Doe',\n                        company: 'BigCommerce',\n                        streetAddress: 'addressLine1',\n                        extendedAddress: 'addressLine2',\n                        locality: 'addressCity',\n                        region: 'addressState',\n                        postalCode: '03004',\n                        countryCodeAlpha2: 'US',\n                    },\n                },\n            },\n        })),\n        render: jest.fn(),\n    };\n\n    return {\n        identity: {\n            lookupCustomerByEmail: jest.fn(),\n            triggerAuthenticationFlow: jest.fn(),\n        },\n        events: {\n            apmSelected: jest.fn(),\n            emailSubmitted: jest.fn(),\n            orderPlaced: jest.fn(),\n        },\n        profile: {\n            showCardSelector: jest.fn(),\n            showShippingAddressSelector: jest.fn(),\n        },\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        FastlaneCardComponent: jest.fn(() => paypalFastlaneComponentMethods),\n    };\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/mocks/index.ts",
    "content": "export {\n    default as getBigCommercePaymentsPaymentMethod,\n    getBigCommercePaymentsFastlanePaymentMethod,\n} from './get-bigcommerce-payments-payment-method.mock';\nexport { default as getPayPalFastlaneSdk } from './get-paypal-fastlane-sdk.mock';\nexport { default as getPayPalFastlane } from './get-paypal-fastlane.mock';\nexport { default as getPayPalFastlaneAuthenticationResultMock } from './get-paypal-fastlane-authentication-result.mock';\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/paypal-sdk-helper.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    PayPalApmSdk,\n    PayPalFastlaneSdk,\n    PayPalGooglePaySdk,\n    PayPalHostWindow,\n    PayPalMessagesSdk,\n} from './bigcommerce-payments-types';\nimport { getBigCommercePaymentsFastlanePaymentMethod, getPayPalFastlaneSdk } from './mocks';\nimport PayPalSdkHelper from './paypal-sdk-helper';\n\ndescribe('PayPalSdkHelper', () => {\n    let loader: ScriptLoader;\n    let paymentMethod: PaymentMethod;\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let subject: PayPalSdkHelper;\n    let mockAPMPaymentMethod: PaymentMethod;\n\n    const paypalMessagesSdk: PayPalMessagesSdk = {\n        Messages: jest.fn(),\n    };\n\n    const paypalApmsSdk: PayPalApmSdk = {\n        Buttons: jest.fn(),\n        PaymentFields: jest.fn(),\n    };\n\n    const payPalGooglePaySdk: PayPalGooglePaySdk = {\n        Googlepay: jest.fn(),\n    };\n\n    const sessionId = '8a232bf4-d9ba-4621-a1a9-ed8f685f92d1';\n    const expectedSessionId = sessionId.replace(/-/g, '');\n\n    beforeEach(() => {\n        loader = createScriptLoader();\n        paymentMethod = getBigCommercePaymentsFastlanePaymentMethod();\n        mockAPMPaymentMethod = {\n            ...paymentMethod,\n            id: 'oxxo',\n            initializationData: {\n                ...paymentMethod.initializationData,\n                enabledAlternativePaymentMethods: ['oxxo'],\n                availableAlternativePaymentMethods: ['oxxo'],\n            },\n        };\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n        subject = new PayPalSdkHelper(loader);\n\n        jest.spyOn(loader, 'loadScript').mockImplementation(() => {\n            (window as PayPalHostWindow).bigCommercePaymentsFastlaneSdk = paypalFastlaneSdk;\n            (window as PayPalHostWindow).bigCommercePaymentsMessages = paypalMessagesSdk;\n            (window as PayPalHostWindow).bigCommercePaymentsApms = paypalApmsSdk;\n            (window as PayPalHostWindow).bigCommercePaymentsGooglePay = payPalGooglePaySdk;\n\n            return Promise.resolve();\n        });\n    });\n\n    afterEach(() => {\n        (window as PayPalHostWindow).bigCommercePaymentsFastlaneSdk = undefined;\n        (window as PayPalHostWindow).bigCommercePaymentsMessages = undefined;\n        (window as PayPalHostWindow).bigCommercePaymentsApms = undefined;\n        (window as PayPalHostWindow).bigCommercePaymentsGooglePay = undefined;\n\n        jest.clearAllMocks();\n    });\n\n    describe('#getPayPalFastlaneSdk()', () => {\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientId: undefined,\n                },\n            };\n\n            try {\n                await subject.getPayPalFastlaneSdk(mockPaymentMethod, 'USD', sessionId);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads PayPal Fastlane sdk script', async () => {\n            await subject.getPayPalFastlaneSdk(paymentMethod, 'USD', sessionId);\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&commit=true&components=fastlane%2Cthree-domain-secure&currency=USD&intent=capture',\n                {\n                    async: true,\n                    attributes: {\n                        'data-client-metadata-id': expectedSessionId,\n                        'data-namespace': 'bigCommercePaymentsFastlaneSdk',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                        'data-sdk-client-token': 'asdcvY7XFSQasd',\n                    },\n                },\n            );\n        });\n\n        // TODO: remove this test when A/B testing will be finished\n        it('loads PayPal Fastlane Sdk script with connectClientToken for bigcommerce_payments_creditcards method', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                methodId: 'bigcommerce_payments_creditcards',\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientToken: undefined,\n                    connectClientToken: 'connectClientToken123',\n                },\n            };\n\n            await subject.getPayPalFastlaneSdk(mockPaymentMethod, 'USD', sessionId);\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&commit=true&components=fastlane%2Cthree-domain-secure&currency=USD&intent=capture',\n                {\n                    async: true,\n                    attributes: {\n                        'data-client-metadata-id': expectedSessionId,\n                        'data-namespace': 'bigCommercePaymentsFastlaneSdk',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                        'data-sdk-client-token': 'asdcvY7XFSQasd',\n                    },\n                },\n            );\n        });\n\n        it('throws an error if there was an issue with loading PayPal Fastlane Sdk', async () => {\n            jest.spyOn(loader, 'loadScript').mockImplementation(jest.fn());\n\n            try {\n                await subject.getPayPalFastlaneSdk(paymentMethod, 'USD', sessionId);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('returns PayPal Fastlane Sdk', async () => {\n            const result = await subject.getPayPalFastlaneSdk(paymentMethod, 'USD', sessionId);\n\n            expect(result).toEqual(paypalFastlaneSdk);\n        });\n    });\n\n    describe('#getPayLaterMessages()', () => {\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientId: undefined,\n                },\n            };\n\n            try {\n                await subject.getPayPalMessages(mockPaymentMethod, 'USD');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads PayLater Messages sdk script', async () => {\n            await subject.getPayPalMessages(paymentMethod, 'USD');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&components=messages&currency=USD',\n                {\n                    async: true,\n                    attributes: {\n                        'data-namespace': 'bigCommercePaymentsMessages',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                    },\n                },\n            );\n        });\n\n        it('throws an error if there was an issue with loading paylater messages sdk', async () => {\n            jest.spyOn(loader, 'loadScript').mockImplementation(jest.fn());\n\n            try {\n                await subject.getPayPalMessages(paymentMethod, 'USD');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('returns PayPal Messages Sdk', async () => {\n            const result = await subject.getPayPalMessages(paymentMethod, 'USD');\n\n            expect(result).toEqual(paypalMessagesSdk);\n        });\n    });\n\n    describe('#getPayPalGooglePaySdk()', () => {\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientId: undefined,\n                },\n            };\n\n            try {\n                await subject.getPayPalGooglePaySdk(mockPaymentMethod, 'USD');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads PayPal Google Pay sdk script', async () => {\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&commit=true&components=googlepay&currency=USD&intent=capture',\n                {\n                    async: true,\n                    attributes: {\n                        'data-namespace': 'bigCommercePaymentsGooglePay',\n                        'data-client-token': 'asdcvY7XFSQasd',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                    },\n                },\n            );\n        });\n\n        it('throws an error if there was an issue with loading paypal google pay sdk', async () => {\n            jest.spyOn(loader, 'loadScript').mockImplementation(jest.fn());\n\n            try {\n                await subject.getPayPalGooglePaySdk(paymentMethod, 'USD');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('returns PayPal Google Pay Sdk', async () => {\n            const result = await subject.getPayPalGooglePaySdk(paymentMethod, 'USD');\n\n            expect(result).toEqual(payPalGooglePaySdk);\n        });\n\n        it('does not load Google Pay Sdk if already exist', async () => {\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD');\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD');\n\n            expect(loader.loadScript).toHaveBeenCalledTimes(1);\n        });\n\n        it('reload Google Pay Sdk', async () => {\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD');\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', false, true);\n\n            expect(loader.loadScript).toHaveBeenCalledTimes(2);\n        });\n    });\n\n    describe('#getPayPalApmsSdk()', () => {\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            try {\n                await subject.getPayPalApmsSdk(\n                    {\n                        ...mockAPMPaymentMethod,\n                        initializationData: {\n                            ...mockAPMPaymentMethod.initializationData,\n                            clientId: undefined,\n                        },\n                    },\n                    'USD',\n                );\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads APMs sdk script', async () => {\n            await subject.getPayPalApmsSdk(mockAPMPaymentMethod, 'USD');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=oxxo&commit=true&components=buttons%2Cpayment-fields&currency=USD&intent=capture',\n                {\n                    async: true,\n                    attributes: {\n                        'data-namespace': 'bigCommercePaymentsApms',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                    },\n                },\n            );\n        });\n\n        it('throws an error if there was an issue with loading APMs sdk', async () => {\n            jest.spyOn(loader, 'loadScript').mockImplementation(jest.fn());\n\n            try {\n                await subject.getPayPalApmsSdk(mockAPMPaymentMethod, 'USD');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('loads APMs sdk script for Klarna method id', async () => {\n            const apmKlarnaPaymentMethodMock = {\n                ...paymentMethod,\n                id: 'klarna',\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    enabledAlternativePaymentMethods: ['klarna'],\n                    availableAlternativePaymentMethods: ['klarna'],\n                },\n            };\n\n            await subject.getPayPalApmsSdk(apmKlarnaPaymentMethodMock, 'USD');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&commit=true&components=buttons%2Cpayment-fields&currency=USD&intent=capture',\n                {\n                    async: true,\n                    attributes: {\n                        'data-namespace': 'bigCommercePaymentsApms',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                    },\n                },\n            );\n        });\n\n        it('loads APMs sdk script for Afterpay method id', async () => {\n            const apmAfterpayPaymentMethodMock = {\n                ...paymentMethod,\n                id: 'afterpay',\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    enabledAlternativePaymentMethods: ['afterpay'],\n                    availableAlternativePaymentMethods: ['afterpay'],\n                },\n            };\n\n            await subject.getPayPalApmsSdk(apmAfterpayPaymentMethodMock, 'USD');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&commit=true&components=buttons%2Cpayment-fields&currency=USD&intent=capture',\n                {\n                    async: true,\n                    attributes: {\n                        'data-namespace': 'bigCommercePaymentsApms',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                    },\n                },\n            );\n        });\n\n        it('returns PayPal APMs Sdk', async () => {\n            const result = await subject.getPayPalApmsSdk(paymentMethod, 'USD');\n\n            expect(result).toEqual(paypalApmsSdk);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/paypal-sdk-helper.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    BigCommercePaymentsInitializationData,\n    FundingType,\n    PayPalFastlaneSdk,\n    PayPalGooglePaySdk,\n    PayPalHostWindow,\n    PayPalMessagesSdk,\n    PayPalSdkConfig,\n} from './bigcommerce-payments-types';\n\nexport default class PayPalSdkHelper {\n    private window: PayPalHostWindow;\n\n    constructor(private scriptLoader: ScriptLoader) {\n        this.window = window;\n    }\n\n    async getPayPalFastlaneSdk(\n        paymentMethod: PaymentMethod<BigCommercePaymentsInitializationData>,\n        currencyCode: string,\n        sessionId: string,\n    ): Promise<PayPalFastlaneSdk> {\n        if (!this.window.bigCommercePaymentsFastlaneSdk) {\n            const config = this.getPayPalFastlaneSdkConfiguration(\n                paymentMethod,\n                currencyCode,\n                sessionId,\n            );\n\n            await this.loadPayPalSdk(config);\n\n            if (!this.window.bigCommercePaymentsFastlaneSdk) {\n                throw new PaymentMethodClientUnavailableError();\n            }\n        }\n\n        return this.window.bigCommercePaymentsFastlaneSdk;\n    }\n\n    async getPayPalGooglePaySdk(\n        paymentMethod: PaymentMethod<BigCommercePaymentsInitializationData>,\n        currencyCode: string,\n        initializesOnCheckoutPage?: boolean,\n        forceLoad?: boolean,\n    ): Promise<PayPalGooglePaySdk> {\n        if (!this.window.bigCommercePaymentsGooglePay || forceLoad) {\n            const paypalSdkScriptConfig = this.getPayPalGooglePaySdkScriptConfigOrThrow(\n                paymentMethod,\n                currencyCode,\n                initializesOnCheckoutPage,\n            );\n\n            await this.loadPayPalSdk(paypalSdkScriptConfig);\n        }\n\n        if (!this.window.bigCommercePaymentsGooglePay) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.window.bigCommercePaymentsGooglePay;\n    }\n\n    async getPayPalApmsSdk(\n        paymentMethod: PaymentMethod<BigCommercePaymentsInitializationData>,\n        currencyCode: string,\n    ) {\n        if (!this.window.bigCommercePaymentsApms) {\n            const config = this.getPayPalApmSdkConfiguration(paymentMethod, currencyCode);\n\n            await this.loadPayPalSdk(config);\n\n            if (!this.window.bigCommercePaymentsApms) {\n                throw new PaymentMethodClientUnavailableError();\n            }\n        }\n\n        return this.window.bigCommercePaymentsApms;\n    }\n\n    async getPayPalMessages(\n        paymentMethod: PaymentMethod<BigCommercePaymentsInitializationData>,\n        currencyCode: string,\n    ): Promise<PayPalMessagesSdk> {\n        if (!this.window.bigCommercePaymentsMessages) {\n            const paypalSdkMessagesConfig = this.getPayPalSdkMessagesConfiguration(\n                paymentMethod,\n                currencyCode,\n            );\n\n            await this.loadPayPalSdk(paypalSdkMessagesConfig);\n        }\n\n        if (!this.window.bigCommercePaymentsMessages) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.window.bigCommercePaymentsMessages;\n    }\n\n    /**\n     *\n     *  loadPayPalSdk is a paypal sdk script loader\n     *  which loads paypal sdk based on provided configuration\n     *\n     */\n    private async loadPayPalSdk({ options, attributes }: PayPalSdkConfig): Promise<void> {\n        const scriptOptions = this.transformConfig<PayPalSdkConfig['options']>(options);\n        const scriptAttributes = this.transformConfig<PayPalSdkConfig['attributes']>(attributes);\n\n        const paypalSdkUrl = 'https://www.paypal.com/sdk/js';\n        const scriptQuery = new URLSearchParams(scriptOptions).toString();\n        const scriptSrc = `${paypalSdkUrl}?${scriptQuery}`;\n\n        await this.scriptLoader.loadScript(scriptSrc, {\n            async: true,\n            attributes: scriptAttributes,\n        });\n    }\n\n    /**\n     *\n     * Configurations section\n     *\n     */\n    private getPayPalFastlaneSdkConfiguration(\n        paymentMethod: PaymentMethod<BigCommercePaymentsInitializationData>,\n        currencyCode: string,\n        sessionId: string,\n    ): PayPalSdkConfig {\n        const { clientToken, initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const { intent, clientId, merchantId, attributionId } = initializationData;\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                commit: true,\n                components: ['fastlane', 'three-domain-secure'],\n                currency: currencyCode,\n                intent,\n            },\n            attributes: {\n                'data-client-metadata-id': sessionId.replace(/-/g, ''),\n                'data-namespace': 'bigCommercePaymentsFastlaneSdk',\n                'data-partner-attribution-id': attributionId,\n                'data-sdk-client-token': clientToken,\n            },\n        };\n    }\n\n    private getPayPalGooglePaySdkScriptConfigOrThrow(\n        paymentMethod: PaymentMethod<BigCommercePaymentsInitializationData>,\n        currencyCode: string,\n        initializesOnCheckoutPage = true,\n    ): PayPalSdkConfig {\n        const { clientToken, initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            intent,\n            clientId,\n            merchantId,\n            buyerCountry,\n            attributionId,\n            isHostedCheckoutEnabled,\n            isDeveloperModeApplicable,\n        } = initializationData;\n\n        const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                commit,\n                components: ['googlepay'],\n                currency: currencyCode,\n                intent,\n                ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n            },\n            attributes: {\n                'data-partner-attribution-id': attributionId,\n                'data-client-token': clientToken,\n                'data-namespace': 'bigCommercePaymentsGooglePay',\n            },\n        };\n    }\n\n    private getPayPalApmSdkConfiguration(\n        paymentMethod: PaymentMethod<BigCommercePaymentsInitializationData>,\n        currencyCode: string,\n    ): PayPalSdkConfig {\n        const { initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            intent,\n            clientId,\n            merchantId,\n            buyerCountry,\n            attributionId,\n            isDeveloperModeApplicable,\n            availableAlternativePaymentMethods = [],\n            enabledAlternativePaymentMethods = [],\n        } = initializationData;\n\n        const enableAPMsFunding = this.filterFundingOptions(enabledAlternativePaymentMethods);\n        const disableAPMsFunding = this.filterFundingOptions(\n            availableAlternativePaymentMethods.filter(\n                (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n            ),\n        );\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                'enable-funding': enableAPMsFunding.length > 0 ? enableAPMsFunding : undefined,\n                'disable-funding': disableAPMsFunding.length > 0 ? disableAPMsFunding : undefined,\n                commit: true,\n                components: ['buttons', 'payment-fields'],\n                currency: currencyCode,\n                intent,\n                ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n            },\n            attributes: {\n                'data-partner-attribution-id': attributionId,\n                'data-namespace': 'bigCommercePaymentsApms',\n            },\n        };\n    }\n\n    private getPayPalSdkMessagesConfiguration(\n        paymentMethod: PaymentMethod<BigCommercePaymentsInitializationData>,\n        currencyCode: string,\n    ): PayPalSdkConfig {\n        const { initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const { clientId, merchantId, attributionId, isDeveloperModeApplicable, buyerCountry } =\n            initializationData;\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                components: ['messages'],\n                currency: currencyCode,\n                ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n            },\n            attributes: {\n                'data-namespace': 'bigCommercePaymentsMessages',\n                'data-partner-attribution-id': attributionId,\n            },\n        };\n    }\n\n    /**\n     *\n     * Utils methods\n     *\n     */\n    private filterFundingOptions(fundingOptions: FundingType[] | undefined): FundingType[] {\n        const fundingTypesToBeFiltered = ['klarna', 'afterpay'];\n\n        if (!fundingOptions) {\n            return [];\n        }\n\n        return fundingOptions.filter(\n            (fundingOption: FundingType) => !fundingTypesToBeFiltered.includes(fundingOption),\n        );\n    }\n\n    private transformConfig<T extends Record<string, unknown>>(config: T): Record<string, string> {\n        let transformedConfig = {};\n\n        const keys = Object.keys(config) as Array<keyof T>;\n\n        keys.forEach((key) => {\n            const value = config[key];\n\n            if (\n                value === undefined ||\n                value === null ||\n                value === '' ||\n                (Array.isArray(value) && value.length === 0)\n            ) {\n                return;\n            }\n\n            transformedConfig = {\n                ...transformedConfig,\n                [key]: Array.isArray(value) ? value.join(',') : value,\n            };\n        });\n\n        return transformedConfig;\n    }\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/get-fastlane-styles.spec.ts",
    "content": "import getFastlaneStyles from './get-fastlane-styles';\n\ndescribe('#getFastlaneStyles()', () => {\n    it('returns styles options with provided modifications', () => {\n        const styles = {\n            fastlaneRootSettingsBackgroundColor: 'red',\n            fastlaneInputSettingsBorderColor: 'green',\n            fastlaneTextBodySettingsFontSize: '12px',\n            fastlaneTextBodySettingsColor: 'blue',\n        };\n\n        const uiStyles = {\n            root: {\n                backgroundColorPrimary: 'green',\n            },\n            text: {\n                caption: {\n                    fontSize: '15px',\n                },\n            },\n        };\n\n        expect(getFastlaneStyles(styles, uiStyles)).toEqual({\n            root: {\n                backgroundColorPrimary: 'red',\n            },\n            input: {\n                borderColor: 'green',\n            },\n            text: {\n                body: {\n                    fontSize: '12px',\n                    color: 'blue',\n                },\n                caption: {\n                    fontSize: '15px',\n                },\n            },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/get-fastlane-styles.ts",
    "content": "import { omitBy } from 'lodash';\n\nimport { FastlaneStylesSettings, PayPalFastlaneStylesOption } from '../index';\n\nfunction isInvalidStyleOption(styleOption: unknown) {\n    return typeof styleOption !== 'string';\n}\n\nexport default function getFastlaneStyles(\n    styleSettings?: FastlaneStylesSettings,\n    uiStyles?: PayPalFastlaneStylesOption,\n) {\n    if (!uiStyles && !styleSettings) {\n        return undefined;\n    }\n\n    return cleanUpFastlaneStyles(mergeFastlaneStyles(styleSettings, uiStyles));\n}\n\nfunction mergeFastlaneStyles(\n    styleSettings?: FastlaneStylesSettings,\n    uiStyles?: PayPalFastlaneStylesOption,\n): PayPalFastlaneStylesOption {\n    return {\n        root: {\n            backgroundColorPrimary:\n                styleSettings?.fastlaneRootSettingsBackgroundColor ||\n                uiStyles?.root?.backgroundColorPrimary,\n            errorColor: styleSettings?.fastlaneRootSettingsErrorColor || uiStyles?.root?.errorColor,\n            fontFamily: styleSettings?.fastlaneRootSettingsFontFamily || uiStyles?.root?.fontFamily,\n            fontSizeBase:\n                styleSettings?.fastlaneRootSettingsFontSize || uiStyles?.root?.fontSizeBase,\n            padding: styleSettings?.fastlaneRootSettingsPadding || uiStyles?.root?.padding,\n            primaryColor:\n                styleSettings?.fastlaneRootSettingsPrimaryColor || uiStyles?.root?.primaryColor,\n        },\n        input: {\n            borderRadius:\n                styleSettings?.fastlaneInputSettingsBorderRadius || uiStyles?.input?.borderRadius,\n            borderColor:\n                styleSettings?.fastlaneInputSettingsBorderColor || uiStyles?.input?.borderColor,\n            focusBorderColor:\n                styleSettings?.fastlaneInputSettingsFocusBorderBase ||\n                uiStyles?.input?.focusBorderColor,\n            backgroundColor:\n                styleSettings?.fastlaneInputSettingsBackgroundColor ||\n                uiStyles?.input?.backgroundColor,\n            borderWidth:\n                styleSettings?.fastlaneInputSettingsBorderWidth || uiStyles?.input?.borderWidth,\n            textColorBase:\n                styleSettings?.fastlaneInputSettingsTextColorBase || uiStyles?.input?.textColorBase,\n        },\n        toggle: {\n            colorPrimary:\n                styleSettings?.fastlaneToggleSettingsColorPrimary || uiStyles?.toggle?.colorPrimary,\n            colorSecondary:\n                styleSettings?.fastlaneToggleSettingsColorSecondary ||\n                uiStyles?.toggle?.colorSecondary,\n        },\n        text: {\n            body: {\n                color: styleSettings?.fastlaneTextBodySettingsColor || uiStyles?.text?.body?.color,\n                fontSize:\n                    styleSettings?.fastlaneTextBodySettingsFontSize ||\n                    uiStyles?.text?.body?.fontSize,\n            },\n            caption: {\n                color:\n                    styleSettings?.fastlaneTextCaptionSettingsColor ||\n                    uiStyles?.text?.caption?.color,\n                fontSize:\n                    styleSettings?.fastlaneTextCaptionSettingsFontSize ||\n                    uiStyles?.text?.caption?.fontSize,\n            },\n        },\n        branding: styleSettings?.fastlaneBrandingSettings || uiStyles?.branding,\n    };\n}\n\nfunction cleanUpFastlaneStyles(styles: PayPalFastlaneStylesOption) {\n    const fastlaneStyles: PayPalFastlaneStylesOption = {};\n\n    const root = omitBy(styles.root, isInvalidStyleOption);\n    const input = omitBy(styles.input, isInvalidStyleOption);\n    const toggle = omitBy(styles.toggle, isInvalidStyleOption);\n    const textBody = omitBy(styles.text?.body, isInvalidStyleOption);\n    const textCaption = omitBy(styles.text?.caption, isInvalidStyleOption);\n    const branding = styles.branding;\n\n    if (Object.keys(root).length) {\n        fastlaneStyles.root = root;\n    }\n\n    if (Object.keys(input).length) {\n        fastlaneStyles.input = input;\n    }\n\n    if (Object.keys(toggle).length) {\n        fastlaneStyles.toggle = toggle;\n    }\n\n    if (Object.keys(textBody).length) {\n        fastlaneStyles.text = {};\n        fastlaneStyles.text.body = textBody;\n    }\n\n    if (Object.keys(textCaption).length) {\n        fastlaneStyles.text = {\n            ...fastlaneStyles.text,\n        };\n        fastlaneStyles.text.caption = textCaption;\n    }\n\n    if (branding) {\n        fastlaneStyles.branding = branding;\n    }\n\n    return fastlaneStyles;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/get-paypal-messages-styles-from-bnpl-config.spec.ts",
    "content": "import getPaypalMessagesStylesFromBNPLConfig from './get-paypal-messages-styles-from-bnpl-config';\n\ndescribe('getPaypalMessagesStylesFromBNPLConfig', () => {\n    it('returns BigCommerce Messages Style Options from BNPL Config', () => {\n        const input = {\n            id: 'checkout',\n            name: 'Checkout page',\n            status: true,\n            styles: {\n                color: 'white-no-border',\n                layout: 'text',\n                'logo-type': 'alternative',\n                'logo-position': 'right',\n                ratio: '8x1',\n                'text-color': 'white',\n                'text-size': '10',\n            },\n        };\n\n        const expectedOutput = {\n            color: 'white-no-border',\n            layout: 'text',\n            logo: {\n                type: 'alternative',\n                position: 'right',\n            },\n            ratio: '8x1',\n            text: {\n                color: 'white',\n                size: 10,\n            },\n        };\n\n        expect(getPaypalMessagesStylesFromBNPLConfig(input)).toStrictEqual(expectedOutput);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/get-paypal-messages-styles-from-bnpl-config.ts",
    "content": "import { MessagesStyleOptions, PayPalBNPLConfigurationItem } from '../bigcommerce-payments-types';\n\nfunction getPaypalMessagesStylesFromBNPLConfig({\n    styles,\n}: PayPalBNPLConfigurationItem): MessagesStyleOptions {\n    const messagesStyles: MessagesStyleOptions = {};\n\n    if (styles.color) {\n        messagesStyles.color = styles.color;\n    }\n\n    if (styles.layout) {\n        messagesStyles.layout = styles.layout;\n    }\n\n    if (styles['logo-type'] || styles['logo-position']) {\n        messagesStyles.logo = {};\n\n        if (styles['logo-type']) {\n            messagesStyles.logo.type = styles['logo-type'];\n        }\n\n        if (styles['logo-position']) {\n            messagesStyles.logo.position = styles['logo-position'];\n        }\n    }\n\n    if (styles.ratio) {\n        messagesStyles.ratio = styles.ratio;\n    }\n\n    if (styles['text-color'] || styles['text-size']) {\n        messagesStyles.text = {};\n\n        if (styles['text-color']) {\n            messagesStyles.text.color = styles['text-color'];\n        }\n\n        if (styles['text-size']) {\n            messagesStyles.text.size = +styles['text-size'];\n        }\n    }\n\n    return messagesStyles;\n}\n\nexport default getPaypalMessagesStylesFromBNPLConfig;\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/index.ts",
    "content": "export { default as isBigCommercePaymentsFastlaneCustomer } from './is-bigcommerce-payments-fastlane-customer';\nexport { default as isPayPalFastlaneCustomer } from './is-paypal-fastlane-customer';\nexport { default as getFastlaneStyles } from './get-fastlane-styles';\nexport { default as getPaypalMessagesStylesFromBNPLConfig } from './get-paypal-messages-styles-from-bnpl-config';\nexport { default as isRedirectError } from './is-redirect-error';\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/is-bigcommerce-fastlane-request-error.spec.ts",
    "content": "import isBigcommerceFastlaneRequestError, {\n    BigcommerceFastlaneRequestError,\n} from './is-bigcommerce-fastlane-request-error';\n\ndescribe('isBigcommerceFastlaneRequestError', () => {\n    it('should return true if paypal fastlane request is invalid', () => {\n        const invalidRequestError: BigcommerceFastlaneRequestError = {\n            name: 'Error',\n            message: 'Invalid request',\n            response: {\n                name: 'INVALID_REQUEST',\n            },\n        };\n\n        expect(isBigcommerceFastlaneRequestError(invalidRequestError)).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/is-bigcommerce-fastlane-request-error.ts",
    "content": "export interface BigcommerceFastlaneRequestError {\n    name: string;\n    message: string;\n    response: {\n        name: string;\n    };\n}\n\nexport default function isBigcommerceFastlaneRequestError(\n    error: unknown,\n): error is BigcommerceFastlaneRequestError {\n    return (\n        typeof error === 'object' &&\n        error !== null &&\n        'message' in error &&\n        'response' in error &&\n        'name' in (error as BigcommerceFastlaneRequestError).response\n    );\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/is-bigcommerce-payments-fastlane-customer.spec.ts",
    "content": "import isBigCommercePaymentsFastlaneCustomer from './is-bigcommerce-payments-fastlane-customer';\n\ndescribe('isBigCommercePaymentsFastlaneCustomer', () => {\n    it('returns true if payment provider customer is BigCommercePayments related', () => {\n        const paymentProviderCustomer = {\n            authenticationState: 'success',\n            addresses: [],\n            instruments: [],\n        };\n\n        expect(isBigCommercePaymentsFastlaneCustomer(paymentProviderCustomer)).toBe(true);\n    });\n\n    it('returns false if payment provider customer is not BigCommercePayments related', () => {\n        const paymentProviderCustomer = {\n            stripeLinkAuthenticationState: true,\n        };\n\n        expect(isBigCommercePaymentsFastlaneCustomer(paymentProviderCustomer)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/is-bigcommerce-payments-fastlane-customer.ts",
    "content": "import {\n    PaymentProviderCustomer,\n    PayPalConnectCustomer,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function isBigCommercePaymentsFastlaneCustomer(\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"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/is-bigcommerce-payments-provider-error.spec.ts",
    "content": "import isBigCommercePaymentsProviderError from './is-bigcommerce-payments-provider-error';\n\ndescribe('isBigCommercePaymentsProviderError', () => {\n    it('returns true if error bigcommerce-payments provider related', () => {\n        const providerError = {\n            status: 'error',\n            three_ds_result: {\n                acs_url: null,\n                payer_auth_request: null,\n                merchant_data: null,\n                callback_url: null,\n            },\n            errors: [\n                {\n                    code: 'invalid_request_error',\n                    message:\n                        'Were experiencing difficulty processing your transaction. Please contact us or try again later.',\n                },\n                {\n                    code: 'transaction_rejected',\n                    message: 'Payment was declined. Please try again.',\n                    provider_error: {\n                        code: 'INSTRUMENT_DECLINED',\n                    },\n                },\n            ],\n        };\n\n        expect(isBigCommercePaymentsProviderError(providerError)).toBe(true);\n    });\n\n    it('returns false if error not bigcommerce-payments provider related', () => {\n        const notProviderError = {\n            status: 'error',\n            three_ds_result: {\n                acs_url: null,\n                payer_auth_request: null,\n                merchant_data: null,\n                callback_url: null,\n            },\n        };\n\n        expect(isBigCommercePaymentsProviderError(notProviderError)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/is-bigcommerce-payments-provider-error.ts",
    "content": "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 isBigCommercePaymentsProviderError(error: unknown): error is ProviderError {\n    return typeof error === 'object' && error !== null && 'errors' in error;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/is-paypal-fastlane-customer.spec.ts",
    "content": "import isPayPalFastlaneCustomer from './is-paypal-fastlane-customer';\n\ndescribe('isPayPalFastlaneCustomer', () => {\n    it('returns true if payment provider customer is PayPal Fastlane related', () => {\n        const paymentProviderCustomer = {\n            authenticationState: 'success',\n            addresses: [],\n            instruments: [],\n        };\n\n        expect(isPayPalFastlaneCustomer(paymentProviderCustomer)).toBe(true);\n    });\n\n    it('returns false if payment provider customer is not PayPal Fastlane related', () => {\n        const paymentProviderCustomer = {\n            stripeLinkAuthenticationState: true,\n        };\n\n        expect(isPayPalFastlaneCustomer(paymentProviderCustomer)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/is-paypal-fastlane-customer.ts",
    "content": "import {\n    PaymentProviderCustomer,\n    PayPalConnectCustomer,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n// TODO: update PayPalConnectCustomer with PayPalFastlaneCustomer\nexport default function isPayPalFastlaneCustomer(\n    customer?: PaymentProviderCustomer,\n): customer is PayPalConnectCustomer {\n    if (!customer) {\n        return false;\n    }\n\n    return (\n        'authenticationState' in customer || 'addresses' in customer || 'instruments' in customer\n    );\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/src/utils/is-redirect-error.ts",
    "content": "import { isRequestError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RedirectError } from '../bigcommerce-payments-types';\n\nexport default function isRedirectError(error: unknown): error is RedirectError {\n    return isRequestError(error) && error.body?.additional_action_required?.data.redirect_url;\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true,\n        \"lib\": [\n            \"es2017\",\n            \"dom\"\n        ]\n    }\n}"
  },
  {
    "path": "packages/bigcommerce-payments-utils/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/bigcommerce-payments-utils/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/README.md",
    "content": "# bluesnap-direct-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test bluesnap-direct-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint bluesnap-direct-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/jest.config.js",
    "content": "module.exports = {\n  displayName: 'bluesnap-direct-integration',\n  preset: '../../jest.preset.js',\n  globals: {\n    'ts-jest': {\n      tsconfig: '<rootDir>/tsconfig.spec.json',\n      diagnostics: false,\n    },\n  },\n  setupFilesAfterEnv: ['../../jest-setup.js'],\n  coverageDirectory: '../../coverage/packages/bluesnap-direct-integration',\n};\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/project.json",
    "content": "{\n    \"name\": \"bluesnap-direct-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/bluesnap-direct-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/bluesnap-direct-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/bluesnap-direct-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/bluesnap-direct-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-apm/bluesnap-direct-apm-payment-strategy.spec.ts",
    "content": "import {\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getErrorPaymentResponseBody,\n    getOrderRequestBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BlueSnapDirectAPMPaymentStrategy from './bluesnap-direct-apm-payment-strategy';\n\ndescribe('BlueSnapDirectAPMPaymentStrategy', () => {\n    let strategy: BlueSnapDirectAPMPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        strategy = new BlueSnapDirectAPMPaymentStrategy(paymentIntegrationService);\n    });\n\n    describe('#execute()', () => {\n        afterEach(() => {\n            (paymentIntegrationService.submitOrder as jest.Mock).mockClear();\n            (paymentIntegrationService.submitPayment as jest.Mock).mockClear();\n        });\n\n        it('throws error when payment data is empty', async () => {\n            await strategy.initialize();\n\n            await expect(strategy.execute({})).rejects.toThrow(PaymentArgumentInvalidError);\n        });\n\n        it('should submit stored instrument payment', async () => {\n            await strategy.initialize();\n\n            const payload = {\n                payment: {\n                    gatewayId: 'bluesnapdirect',\n                    methodId: 'ecp',\n                    paymentData: {\n                        instrumentId: '223344556',\n                        shouldSetAsDefaultInstrument: false,\n                    },\n                },\n            };\n\n            const expectedPayment = {\n                gatewayId: 'bluesnapdirect',\n                methodId: 'ecp',\n                paymentData: {\n                    instrumentId: '223344556',\n                    shouldSetAsDefaultInstrument: false,\n                },\n            };\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        it('should submit the ECP payment', async () => {\n            await strategy.initialize();\n\n            const accountType = 'CONSUMER_CHECKING' as const;\n            const payload = {\n                payment: {\n                    gatewayId: 'bluesnapdirect',\n                    methodId: 'ecp',\n                    paymentData: {\n                        accountNumber: '223344556',\n                        accountType,\n                        shopperPermission: true,\n                        routingNumber: '998877665',\n                    },\n                },\n            };\n\n            const expectedPayment = {\n                gatewayId: 'bluesnapdirect',\n                methodId: 'ecp',\n                paymentData: {\n                    formattedPayload: {\n                        ecp: {\n                            account_number: '223344556',\n                            account_type: 'CONSUMER_CHECKING',\n                            routing_number: '998877665',\n                            shopper_permission: true,\n                        },\n                    },\n                },\n            };\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        it('should submit the ECP payment with company name', async () => {\n            await strategy.initialize();\n\n            const accountType = 'CORPORATE_CHECKING' as const;\n            const payload = {\n                payment: {\n                    gatewayId: 'bluesnapdirect',\n                    methodId: 'ecp',\n                    paymentData: {\n                        accountNumber: '223344556',\n                        companyName: 'BigCommerce',\n                        accountType,\n                        shopperPermission: true,\n                        routingNumber: '998877665',\n                    },\n                },\n            };\n\n            const expectedPayment = {\n                gatewayId: 'bluesnapdirect',\n                methodId: 'ecp',\n                paymentData: {\n                    formattedPayload: {\n                        ecp: {\n                            account_number: '223344556',\n                            account_type: 'CORPORATE_CHECKING',\n                            company_name: 'BigCommerce',\n                            routing_number: '998877665',\n                            shopper_permission: true,\n                        },\n                    },\n                },\n            };\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        it('should submit the SEPA payment', async () => {\n            await strategy.initialize();\n\n            const payload = {\n                payment: {\n                    gatewayId: 'bluesnapdirect',\n                    methodId: 'sepa_direct_debit',\n                    paymentData: {\n                        iban: '223344556',\n                        firstName: 'John',\n                        lastName: 'Smith',\n                        shopperPermission: true,\n                    },\n                },\n            };\n\n            const expectedPayment = {\n                gatewayId: 'bluesnapdirect',\n                methodId: 'sepa_direct_debit',\n                paymentData: {\n                    formattedPayload: {\n                        sepa_direct_debit: {\n                            iban: '223344556',\n                            first_name: 'John',\n                            last_name: 'Smith',\n                            shopper_permission: true,\n                        },\n                    },\n                },\n            };\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        it('submits order without payment data for offsite payment instruments', async () => {\n            const payload = {\n                payment: {\n                    gatewayId: 'bluesnapdirect',\n                    methodId: 'moneybookers',\n                    paymentData: {\n                        terms: false,\n                        shouldCreateAccount: true,\n                        shouldSaveInstrument: false,\n                    },\n                },\n            };\n\n            await strategy.initialize();\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: payload.payment.methodId,\n            });\n        });\n\n        it('rejects payment when error is different to additional_action_required', async () => {\n            await strategy.initialize();\n\n            const error = new RequestError(getResponse(getErrorPaymentResponseBody()));\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.reject(error),\n            );\n\n            await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(error);\n        });\n\n        it('redirects to bluesnapdirect if additional action is required and provider_data is not empty', async () => {\n            const payload = {\n                payment: {\n                    gatewayId: 'bluesnapdirect',\n                    methodId: 'moneybookers',\n                    paymentData: {\n                        terms: false,\n                        shouldCreateAccount: true,\n                        shouldSaveInstrument: false,\n                    },\n                },\n            };\n\n            Object.defineProperty(window, 'location', {\n                value: {\n                    replace: jest.fn(),\n                },\n            });\n            await strategy.initialize();\n\n            const redirect_url = 'https://sandbox.bluesnap.com/buynow/checkout?enc=test';\n            const error = new RequestError(\n                getResponse({\n                    additional_action_required: {\n                        data: {\n                            redirect_url,\n                        },\n                        type: 'offsite_redirect',\n                    },\n                    status: 'additional_action_required',\n                    provider_data: JSON.stringify({\n                        merchantid: '123',\n                    }),\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.reject(error),\n            );\n\n            void strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(window.location.replace).toHaveBeenCalledWith(`${redirect_url}&merchantid=123`);\n        });\n\n        it('redirects to bluesnapdirect if additional action is required for Ideal', async () => {\n            const payload = {\n                payment: {\n                    gatewayId: 'bluesnapdirect',\n                    methodId: 'ideal',\n                    paymentData: {\n                        bic: '223344556',\n                    },\n                },\n            };\n\n            Object.defineProperty(window, 'location', {\n                value: {\n                    replace: jest.fn(),\n                },\n            });\n            await strategy.initialize();\n\n            const redirect_url = 'https://sandbox.bluesnap.com/buynow/checkout?enc=test';\n            const error = new RequestError(\n                getResponse({\n                    additional_action_required: {\n                        data: {\n                            redirect_url,\n                        },\n                        type: 'offsite_redirect',\n                    },\n                    status: 'additional_action_required',\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.reject(error),\n            );\n\n            void strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(window.location.replace).toHaveBeenCalledWith(redirect_url);\n        });\n\n        it('redirects to bluesnapdirect if additional action is required for Pay by Bank', async () => {\n            const payload = {\n                payment: {\n                    gatewayId: 'bluesnapdirect',\n                    methodId: 'pay_by_bank',\n                    paymentData: {\n                        iban: 'DE12345678901234567890',\n                    },\n                },\n            };\n\n            Object.defineProperty(window, 'location', {\n                value: {\n                    replace: jest.fn(),\n                },\n            });\n            await strategy.initialize();\n\n            const redirect_url = 'https://sandbox.bluesnap.com/buynow/checkout?enc=test';\n            const error = new RequestError(\n                getResponse({\n                    additional_action_required: {\n                        data: {\n                            redirect_url,\n                        },\n                        type: 'offsite_redirect',\n                    },\n                    status: 'additional_action_required',\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.reject(error),\n            );\n\n            void strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(window.location.replace).toHaveBeenCalledWith(redirect_url);\n        });\n    });\n\n    describe('#initialize()', () => {\n        it('initializes the strategy successfully', async () => {\n            const result = await strategy.initialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-apm/bluesnap-direct-apm-payment-strategy.ts",
    "content": "import {\n    isHostedInstrumentLike,\n    isVaultedInstrument,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BlueSnapDirectRedirectResponse } from '../types';\nimport {\n    isEcpInstrument,\n    isIdealInstrument,\n    isPayByBankInstrument,\n    isSepaInstrument,\n} from '../utils/is-bluesnap-direct-instrument';\nimport isBlueSnapDirectRedirectResponseProviderData from '../utils/is-bluesnap-direct-provider-data';\n\nexport default class BlueSnapDirectAPMPaymentStrategy implements PaymentStrategy {\n    constructor(private _paymentIntegrationService: PaymentIntegrationService) {}\n\n    async execute(payload: OrderRequestBody): Promise<void> {\n        const paymentPayload = this._formatePaymentPayload(payload);\n\n        await this._paymentIntegrationService.submitOrder();\n\n        try {\n            await this._paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error) {\n            if (this._isBlueSnapDirectRedirectResponse(error)) {\n                const providerData: unknown =\n                    error.body.provider_data && JSON.parse(error.body.provider_data);\n\n                let frameUrl = error.body.additional_action_required.data.redirect_url;\n\n                if (isBlueSnapDirectRedirectResponseProviderData(providerData)) {\n                    const providerDataQuery = new URLSearchParams(providerData).toString();\n\n                    frameUrl = `${frameUrl}&${providerDataQuery}`;\n                }\n\n                return new Promise(() => window.location.replace(frameUrl));\n            }\n\n            return Promise.reject(error);\n        }\n    }\n\n    initialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private _formatePaymentPayload({ payment }: OrderRequestBody) {\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        if (\n            payment.paymentData &&\n            isVaultedInstrument(payment.paymentData) &&\n            isHostedInstrumentLike(payment.paymentData)\n        ) {\n            return {\n                ...payment,\n                paymentData: {\n                    instrumentId: payment.paymentData.instrumentId,\n                    shouldSetAsDefaultInstrument:\n                        !!payment.paymentData.shouldSetAsDefaultInstrument,\n                },\n            };\n        }\n\n        if (isEcpInstrument(payment.paymentData)) {\n            return {\n                ...payment,\n                paymentData: {\n                    formattedPayload: {\n                        ecp: {\n                            account_number: payment.paymentData.accountNumber,\n                            account_type: payment.paymentData.accountType,\n                            shopper_permission: payment.paymentData.shopperPermission,\n                            routing_number: payment.paymentData.routingNumber,\n                            ...(payment.paymentData.companyName\n                                ? { company_name: payment.paymentData.companyName }\n                                : {}),\n                        },\n                        vault_payment_instrument: payment.paymentData.shouldSaveInstrument,\n                        set_as_default_stored_instrument:\n                            payment.paymentData.shouldSetAsDefaultInstrument,\n                    },\n                },\n            };\n        }\n\n        if (isSepaInstrument(payment.paymentData)) {\n            return {\n                ...payment,\n                paymentData: {\n                    formattedPayload: {\n                        sepa_direct_debit: {\n                            iban: payment.paymentData.iban,\n                            first_name: payment.paymentData.firstName,\n                            last_name: payment.paymentData.lastName,\n                            shopper_permission: payment.paymentData.shopperPermission,\n                        },\n                        vault_payment_instrument: payment.paymentData.shouldSaveInstrument,\n                        set_as_default_stored_instrument:\n                            payment.paymentData.shouldSetAsDefaultInstrument,\n                    },\n                },\n            };\n        }\n\n        if (isIdealInstrument(payment.paymentData)) {\n            return {\n                ...payment,\n                paymentData: {\n                    formattedPayload: {\n                        ideal: {\n                            bic: payment.paymentData.bic,\n                        },\n                    },\n                },\n            };\n        }\n\n        if (isPayByBankInstrument(payment.paymentData)) {\n            return {\n                ...payment,\n                paymentData: {\n                    formattedPayload: {\n                        pay_by_bank: {\n                            iban: payment.paymentData.iban,\n                        },\n                    },\n                },\n            };\n        }\n\n        return {\n            methodId: payment.methodId,\n        };\n    }\n\n    private _isBlueSnapDirectRedirectResponse(\n        response: unknown,\n    ): response is BlueSnapDirectRedirectResponse {\n        if (typeof response !== 'object' || response === null) {\n            return false;\n        }\n\n        const partialResponse: Partial<BlueSnapDirectRedirectResponse> = response;\n\n        if (!partialResponse.body) {\n            return false;\n        }\n\n        const partialBody: Partial<BlueSnapDirectRedirectResponse['body']> = partialResponse.body;\n\n        return (\n            partialBody.status === 'additional_action_required' &&\n            !!partialBody.additional_action_required?.data.redirect_url\n        );\n    }\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-apm/create-bluesnap-direct-apm-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BlueSnapDirectAPMPaymentStrategy from './bluesnap-direct-apm-payment-strategy';\nimport createBlueSnapDirectApmPaymentStrategy from './create-bluesnap-direct-apm-payment-strategy';\n\ndescribe('createBlueSnapDirectApmPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates bluesnapdirect Apm payment strategy', () => {\n        const strategy = createBlueSnapDirectApmPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BlueSnapDirectAPMPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-apm/create-bluesnap-direct-apm-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BlueSnapDirectAPMPaymentStrategy from './bluesnap-direct-apm-payment-strategy';\n\nconst createBlueSnapDirectAPMPaymentStrategy: PaymentStrategyFactory<\n    BlueSnapDirectAPMPaymentStrategy\n> = (paymentIntegrationService) => new BlueSnapDirectAPMPaymentStrategy(paymentIntegrationService);\n\nexport default toResolvableModule(createBlueSnapDirectAPMPaymentStrategy, [\n    { gateway: 'bluesnapdirect' },\n]);\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-constants.ts",
    "content": "import { HostedFieldType } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BlueSnapDirectHostedFieldTagId as HostedFieldTagId } from './types';\n\nexport const BlueSnapHostedFieldType: {\n    [HostedFieldTagId.CardNumber]: HostedFieldType.CardNumber;\n    [HostedFieldTagId.CardExpiry]: HostedFieldType.CardExpiry;\n    [HostedFieldTagId.CardName]: HostedFieldType.CardName;\n    [HostedFieldTagId.CardCode]: HostedFieldType.CardCode;\n} = {\n    [HostedFieldTagId.CardNumber]: HostedFieldType.CardNumber,\n    [HostedFieldTagId.CardExpiry]: HostedFieldType.CardExpiry,\n    [HostedFieldTagId.CardName]: HostedFieldType.CardName,\n    [HostedFieldTagId.CardCode]: HostedFieldType.CardCode,\n};\n\nexport const CREDIT_CARD_ERRORS = {\n    empty: {\n        [HostedFieldType.CardNumber]: {\n            fieldType: 'cardNumber',\n            message: 'Credit card number is required',\n            type: 'required',\n        },\n        [HostedFieldType.CardNumberVerification]: {\n            fieldType: 'cardNumber',\n            message: 'Credit card number is required',\n            type: 'required',\n        },\n        [HostedFieldType.CardExpiry]: {\n            fieldType: 'cardExpiry',\n            message: 'Expiration date is required',\n            type: 'required',\n        },\n        [HostedFieldType.CardCode]: {\n            fieldType: 'cardCode',\n            message: 'CVV is required',\n            type: 'required',\n        },\n        [HostedFieldType.CardName]: {\n            fieldType: 'cardName',\n            message: 'Full name is required',\n            type: 'required',\n        },\n    },\n    invalid: {\n        [HostedFieldType.CardNumber]: {\n            fieldType: 'cardNumber',\n            message: 'Credit card number must be valid',\n            type: 'invalid_card_number',\n        },\n        [HostedFieldType.CardNumberVerification]: {\n            fieldType: 'cardNumber',\n            message: 'Credit card number must be valid',\n            type: 'invalid_card_number',\n        },\n        [HostedFieldType.CardExpiry]: {\n            fieldType: 'cardExpiry',\n            message: 'Expiration date must be a valid future date in MM / YY format',\n            type: 'invalid_card_expiry',\n        },\n        [HostedFieldType.CardCode]: {\n            fieldType: 'cardCode',\n            message: 'CVV must be valid',\n            type: 'invalid_card_code',\n        },\n        [HostedFieldType.CardName]: {\n            fieldType: 'cardName',\n            message: 'Full name is required',\n            type: 'required',\n        },\n    },\n};\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/bluesnap-direct-3ds.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodFailedError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getBlueSnapDirectSdkMock, {\n    previouslyUsedCardDataMock,\n    threeDSdata,\n} from '../mocks/bluesnap-direct-sdk.mock';\nimport { BlueSnapDirectSdk } from '../types';\n\nimport BlueSnapDirect3ds from './bluesnap-direct-3ds';\nimport BlueSnapDirectScriptLoader from './bluesnap-direct-script-loader';\n\ndescribe('BlueSnapDirectHostedForm', () => {\n    let sdkMocks: ReturnType<typeof getBlueSnapDirectSdkMock>;\n    let blueSnapDirectSdkMock: BlueSnapDirectSdk;\n    let scriptLoader: BlueSnapDirectScriptLoader;\n    let threeDSChallange: BlueSnapDirect3ds;\n\n    beforeEach(() => {\n        sdkMocks = getBlueSnapDirectSdkMock();\n        blueSnapDirectSdkMock = sdkMocks.sdk;\n        scriptLoader = new BlueSnapDirectScriptLoader(createScriptLoader());\n        jest.spyOn(scriptLoader, 'load').mockResolvedValue(blueSnapDirectSdkMock);\n\n        threeDSChallange = new BlueSnapDirect3ds();\n    });\n\n    describe('#initialize3ds', () => {\n        it('should create hosted payment fields with 3DS enabled', async () => {\n            threeDSChallange.initialize(blueSnapDirectSdkMock);\n            await threeDSChallange.initialize3ds('pfToken', previouslyUsedCardDataMock);\n\n            expect(blueSnapDirectSdkMock.threeDsPaymentsSetup).toHaveBeenCalledWith(\n                'pfToken',\n                expect.anything(),\n            );\n            expect(blueSnapDirectSdkMock.threeDsPaymentsSubmitData).toHaveBeenCalledWith(\n                previouslyUsedCardDataMock,\n            );\n        });\n\n        it('should resolves with threeDSecureReferenceId value', async () => {\n            threeDSChallange.initialize(blueSnapDirectSdkMock);\n\n            const result = await threeDSChallange.initialize3ds(\n                'pfToken',\n                previouslyUsedCardDataMock,\n            );\n\n            expect(result).toBe(threeDSdata.threeDSecure.threeDSecureReferenceId);\n        });\n\n        it('should throw an error if response code different from \"1\"', async () => {\n            sdkMocks = getBlueSnapDirectSdkMock('0');\n            blueSnapDirectSdkMock = sdkMocks.sdk;\n            jest.spyOn(scriptLoader, 'load').mockResolvedValue(blueSnapDirectSdkMock);\n\n            threeDSChallange = new BlueSnapDirect3ds();\n            threeDSChallange.initialize(blueSnapDirectSdkMock);\n\n            await expect(\n                threeDSChallange.initialize3ds('pfToken', previouslyUsedCardDataMock),\n            ).rejects.toThrow(PaymentMethodFailedError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/bluesnap-direct-3ds.ts",
    "content": "import {\n    guard,\n    NotInitializedError,\n    NotInitializedErrorType,\n    PaymentMethodFailedError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BlueSnapDirectPreviouslyUsedCard, BlueSnapDirectSdk } from '../types';\n\nexport default class BlueSnapDirect3ds {\n    private _blueSnapSdk?: BlueSnapDirectSdk;\n\n    initialize(blueSnapSdk: BlueSnapDirectSdk) {\n        this._blueSnapSdk = blueSnapSdk;\n    }\n\n    async initialize3ds(\n        token: string,\n        cardData: BlueSnapDirectPreviouslyUsedCard,\n    ): Promise<string> {\n        const blueSnapSdk = this._getBlueSnapSdk();\n\n        return new Promise((resolve, reject) => {\n            blueSnapSdk.threeDsPaymentsSetup(token, (sdkResponse) => {\n                const code = sdkResponse.code;\n\n                if (code === '1') {\n                    return resolve(sdkResponse.threeDSecure.threeDSecureReferenceId);\n                }\n\n                return reject(new PaymentMethodFailedError());\n            });\n\n            blueSnapSdk.threeDsPaymentsSubmitData(cardData);\n        });\n    }\n\n    private _getBlueSnapSdk(): BlueSnapDirectSdk {\n        return guard(\n            this._blueSnapSdk,\n            () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/bluesnap-direct-credit-card-payment-strategy.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { WithCreditCardPaymentInitializeOptions } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    HostedFieldType,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getBlueSnapDirect } from '../mocks/bluesnap-direct-method.mock';\nimport getBlueSnapDirectSdkMock, {\n    previouslyUsedCardDataMock,\n} from '../mocks/bluesnap-direct-sdk.mock';\nimport { BlueSnapDirectSdk } from '../types';\n\nimport BlueSnapDirect3ds from './bluesnap-direct-3ds';\nimport BlueSnapDirectCreditCardPaymentStrategy from './bluesnap-direct-credit-card-payment-strategy';\nimport BlueSnapDirectHostedForm from './bluesnap-direct-hosted-form';\nimport BlueSnapHostedInputValidator from './bluesnap-direct-hosted-input-validator';\nimport BluesnapDirectNameOnCardInput from './bluesnap-direct-name-on-card-input';\nimport BlueSnapDirectScriptLoader from './bluesnap-direct-script-loader';\n\ndescribe('BlueSnapDirectCreditCardPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let scriptLoader: BlueSnapDirectScriptLoader;\n    let sdkMocks: ReturnType<typeof getBlueSnapDirectSdkMock>;\n    let blueSnapDirectSdkMock: BlueSnapDirectSdk;\n    let nameOnCardInput: BluesnapDirectNameOnCardInput;\n    let hostedInputValidator: BlueSnapHostedInputValidator;\n    let hostedForm: BlueSnapDirectHostedForm;\n    let bluesnapdirect3ds: BlueSnapDirect3ds;\n    let strategy: BlueSnapDirectCreditCardPaymentStrategy;\n    let options: PaymentInitializeOptions & WithCreditCardPaymentInitializeOptions;\n    let optionsCardValidation: PaymentInitializeOptions & WithCreditCardPaymentInitializeOptions;\n    let optionsCardValidationWithoutFields: PaymentInitializeOptions &\n        WithCreditCardPaymentInitializeOptions;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getBlueSnapDirect(),\n        );\n\n        scriptLoader = new BlueSnapDirectScriptLoader(createScriptLoader());\n        nameOnCardInput = new BluesnapDirectNameOnCardInput();\n        hostedInputValidator = new BlueSnapHostedInputValidator();\n        hostedForm = new BlueSnapDirectHostedForm(nameOnCardInput, hostedInputValidator);\n        bluesnapdirect3ds = new BlueSnapDirect3ds();\n        sdkMocks = getBlueSnapDirectSdkMock();\n        blueSnapDirectSdkMock = sdkMocks.sdk;\n\n        jest.spyOn(scriptLoader, 'load').mockResolvedValue(blueSnapDirectSdkMock);\n        jest.spyOn(hostedForm, 'initialize').mockImplementation(jest.fn());\n        jest.spyOn(hostedForm, 'attach').mockResolvedValue(undefined);\n        jest.spyOn(hostedForm, 'validate').mockReturnValue(hostedForm);\n        jest.spyOn(hostedForm, 'submit').mockResolvedValue({\n            cardCategory: 'cat',\n            exp: '20/2030',\n            cardHolderName: 'John Doe',\n            binCategory: 'string',\n            cardSubType: 'string',\n            ccBin: 'string',\n            ccType: 'string',\n            isRegulatedCard: 'string',\n            issuingCountry: 'string',\n            last4Digits: 'string',\n        });\n        jest.spyOn(hostedForm, 'detach').mockImplementation(jest.fn());\n        jest.spyOn(bluesnapdirect3ds, 'initialize').mockImplementation(jest.fn());\n        jest.spyOn(bluesnapdirect3ds, 'initialize3ds').mockResolvedValue('3dsId');\n\n        strategy = new BlueSnapDirectCreditCardPaymentStrategy(\n            scriptLoader,\n            paymentIntegrationService,\n            hostedForm,\n            bluesnapdirect3ds,\n        );\n\n        optionsCardValidationWithoutFields = {\n            creditCard: {\n                form: {\n                    fields: {\n                        [HostedFieldType.CardNumberVerification]: undefined,\n                        [HostedFieldType.CardCodeVerification]: undefined,\n                    },\n                },\n            },\n            gatewayId: 'bluesnapdirect',\n            methodId: 'credit_card',\n        };\n\n        optionsCardValidation = {\n            creditCard: {\n                form: {\n                    fields: {\n                        [HostedFieldType.CardNumberVerification]: {\n                            containerId: 'card-number',\n                            instrumentId: 'card-number-instrumentId',\n                        },\n                        [HostedFieldType.CardCodeVerification]: {\n                            containerId: 'card-code',\n                            instrumentId: 'card-code-instrumentId',\n                        },\n                    },\n                },\n            },\n            gatewayId: 'bluesnapdirect',\n            methodId: 'credit_card',\n        };\n\n        options = {\n            creditCard: {\n                form: {\n                    fields: {\n                        [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                        [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                        [HostedFieldType.CardName]: { containerId: 'card-name' },\n                        [HostedFieldType.CardCode]: { containerId: 'card-code' },\n                    },\n                },\n            },\n            gatewayId: 'bluesnapdirect',\n            methodId: 'credit_card',\n        };\n    });\n\n    describe('#initialize()', () => {\n        afterEach(() => {\n            (paymentIntegrationService.createHostedForm as jest.Mock).mockClear();\n        });\n\n        it('initializes the strategy successfully', async () => {\n            const initialize = strategy.initialize(options);\n\n            await expect(initialize).resolves.toBeUndefined();\n        });\n\n        it('should initialize BlueSnap hosted form', async () => {\n            await strategy.initialize(options);\n\n            expect(hostedForm.initialize).toHaveBeenCalledWith(\n                blueSnapDirectSdkMock,\n                options.creditCard?.form.fields,\n            );\n        });\n\n        it('should attach BlueSnap hosted form for credit card form', async () => {\n            await strategy.initialize(options);\n\n            expect(hostedForm.attach).toHaveBeenCalledWith(\n                'pfToken',\n                options.creditCard,\n                undefined,\n            );\n        });\n\n        it('should attach BlueSnap hosted form for credit card validation form', async () => {\n            await strategy.initialize(optionsCardValidation);\n\n            expect(hostedForm.attach).toHaveBeenCalledWith(\n                'pfToken',\n                optionsCardValidation.creditCard,\n                undefined,\n            );\n        });\n\n        it(\"shouldn't attach BlueSnap hosted form for credit card validation form\", async () => {\n            await strategy.initialize(optionsCardValidationWithoutFields);\n\n            expect(hostedForm.attach).not.toHaveBeenCalled();\n        });\n\n        it('should attach BlueSnap hosted form with 3DS enabled', async () => {\n            const initialize = async () => {\n                const method = getBlueSnapDirect();\n\n                method.config.is3dsEnabled = true;\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(method);\n\n                return strategy.initialize(options);\n            };\n\n            await initialize();\n\n            expect(hostedForm.attach).toHaveBeenCalledWith('pfToken', options.creditCard, true);\n        });\n\n        describe('should fail if...', () => {\n            test('gatewayId is not provided', async () => {\n                const initialize = async () => {\n                    options.gatewayId = undefined;\n\n                    return strategy.initialize(options);\n                };\n\n                await expect(initialize()).rejects.toThrow(InvalidArgumentError);\n                expect(paymentIntegrationService.createHostedForm).not.toHaveBeenCalled();\n            });\n\n            test('creditCard is not provided', async () => {\n                const initialize = () => {\n                    options.creditCard = undefined;\n\n                    return strategy.initialize(options);\n                };\n\n                await expect(initialize()).rejects.toThrow(InvalidArgumentError);\n                expect(paymentIntegrationService.createHostedForm).not.toHaveBeenCalled();\n            });\n\n            test('there is no payment method data', async () => {\n                const initialize = () => {\n                    jest.spyOn(\n                        paymentIntegrationService.getState(),\n                        'getPaymentMethodOrThrow',\n                    ).mockImplementation(() => {\n                        throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n                    });\n\n                    return strategy.initialize(options);\n                };\n\n                await expect(initialize()).rejects.toThrow(MissingDataError);\n                expect(hostedForm.initialize).not.toHaveBeenCalled();\n                expect(hostedForm.attach).not.toHaveBeenCalled();\n            });\n        });\n\n        it('should not throw when attach fails due to missing DOM containers (user navigated away)', async () => {\n            jest.spyOn(hostedForm, 'attach').mockRejectedValue(\n                new InvalidArgumentError(\n                    'Unable to create hosted payment fields to invalid HTML container elements.',\n                ),\n            );\n\n            await expect(strategy.initialize(options)).resolves.not.toThrow();\n        });\n    });\n\n    describe('#execute()', () => {\n        let payload: OrderRequestBody;\n\n        beforeEach(async () => {\n            payload = {\n                payment: {\n                    gatewayId: 'bluesnapdirect',\n                    methodId: 'credit_card',\n                },\n            };\n\n            await strategy.initialize(options);\n        });\n\n        it('executes the strategy successfully', async () => {\n            const execute = strategy.execute(payload);\n\n            await expect(execute).resolves.toBeUndefined();\n        });\n\n        it('should submit validated payment data to BlueSnap servers', async () => {\n            await strategy.execute(payload);\n\n            expect(hostedForm.validate).toHaveBeenCalled();\n            expect(hostedForm.submit).toHaveBeenCalled();\n        });\n\n        it(\"shouldn't submit validated payment data to BlueSnap servers when hosted fields isn't mounted\", async () => {\n            await strategy.initialize(optionsCardValidationWithoutFields);\n            await strategy.execute(payload);\n\n            expect(hostedForm.validate).not.toHaveBeenCalled();\n            expect(hostedForm.submit).not.toHaveBeenCalled();\n        });\n\n        it('should submit payment data to BlueSnap servers and include 3DS data', async () => {\n            const expectedData = {\n                amount: 190,\n                currency: 'USD',\n                billingFirstName: 'Test',\n                billingLastName: 'Tester',\n                billingCountry: 'US',\n                billingCity: 'Some City',\n                billingAddress: '12345 Testing Way',\n                billingZip: '95555',\n                shippingFirstName: 'Test',\n                shippingLastName: 'Tester',\n                shippingCountry: 'US',\n                shippingCity: 'Some City',\n                shippingAddress: '12345 Testing Way',\n                shippingZip: '95555',\n                email: 'test@bigcommerce.com',\n                phone: '555-555-5555',\n            };\n            const execute = () => {\n                const method = getBlueSnapDirect();\n\n                method.config.is3dsEnabled = true;\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(method);\n\n                return strategy.execute(payload);\n            };\n\n            await execute();\n\n            expect(hostedForm.submit).toHaveBeenCalledWith(expectedData, true);\n        });\n\n        it('should submit the order', async () => {\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('should submit the payment with cardHolderName for credit card form', async () => {\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                gatewayId: 'bluesnapdirect',\n                methodId: 'credit_card',\n                paymentData: {\n                    formattedPayload: {\n                        credit_card_token: {\n                            token: '{\"pfToken\":\"pfToken\",\"cardHolderName\":\"John Doe\"}',\n                        },\n                        vault_payment_instrument: false,\n                        set_as_default_stored_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('should submit the payment without cardHolderName for validate credit card form', async () => {\n            await strategy.initialize(optionsCardValidation);\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                gatewayId: 'bluesnapdirect',\n                methodId: 'credit_card',\n                paymentData: {\n                    formattedPayload: {\n                        credit_card_token: {\n                            token: '{\"pfToken\":\"pfToken\"}',\n                        },\n                        vault_payment_instrument: false,\n                        set_as_default_stored_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('should submit the payment with stored card with card validation form', async () => {\n            payload = {\n                payment: {\n                    gatewayId: 'bluesnapdirect',\n                    methodId: 'credit_card',\n                    paymentData: { shouldSetAsDefaultInstrument: false, instrumentId: 'id' },\n                },\n            };\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                gatewayId: 'bluesnapdirect',\n                methodId: 'credit_card',\n                paymentData: {\n                    instrumentId: 'id',\n                    nonce: 'pfToken',\n                    shouldSetAsDefaultInstrument: false,\n                },\n            });\n        });\n\n        it('should submit the payment with stored card without card validation form', async () => {\n            await strategy.initialize(optionsCardValidationWithoutFields);\n            payload = {\n                payment: {\n                    gatewayId: 'bluesnapdirect',\n                    methodId: 'credit_card',\n                    paymentData: { shouldSetAsDefaultInstrument: false, instrumentId: 'id' },\n                },\n            };\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                gatewayId: 'bluesnapdirect',\n                methodId: 'credit_card',\n                paymentData: {\n                    instrumentId: 'id',\n                    shouldSetAsDefaultInstrument: false,\n                },\n            });\n        });\n\n        it('should submit the payment with stored card with 3ds enabled', async () => {\n            const execute = async () => {\n                const method = getBlueSnapDirect();\n\n                method.config.is3dsEnabled = true;\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(method);\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getCardInstrumentOrThrow',\n                ).mockReturnValue({\n                    ...paymentIntegrationService.getState().getCardInstrumentOrThrow('card'),\n                    last4: previouslyUsedCardDataMock.last4Digits,\n                    brand: previouslyUsedCardDataMock.ccType,\n                });\n\n                await strategy.execute({\n                    payment: {\n                        gatewayId: 'bluesnapdirect',\n                        methodId: 'credit_card',\n                        paymentData: { shouldSetAsDefaultInstrument: false, instrumentId: 'id' },\n                    },\n                });\n            };\n\n            await strategy.initialize(optionsCardValidationWithoutFields);\n\n            await execute();\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                gatewayId: 'bluesnapdirect',\n                methodId: 'credit_card',\n                paymentData: {\n                    deviceSessionId: '3dsId',\n                    instrumentId: 'id',\n                    shouldSetAsDefaultInstrument: false,\n                },\n            });\n        });\n\n        it('should submit the payment with stored card with 3ds disabled', async () => {\n            const execute = async () => {\n                const method = getBlueSnapDirect();\n\n                method.config.is3dsEnabled = false;\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(method);\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getCardInstrumentOrThrow',\n                ).mockReturnValue({\n                    ...paymentIntegrationService.getState().getCardInstrumentOrThrow('card'),\n                    last4: previouslyUsedCardDataMock.last4Digits,\n                    brand: previouslyUsedCardDataMock.ccType,\n                });\n\n                await strategy.execute({\n                    payment: {\n                        gatewayId: 'bluesnapdirect',\n                        methodId: 'credit_card',\n                        paymentData: { shouldSetAsDefaultInstrument: false, instrumentId: 'id' },\n                    },\n                });\n            };\n\n            await strategy.initialize(optionsCardValidationWithoutFields);\n\n            await execute();\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                gatewayId: 'bluesnapdirect',\n                methodId: 'credit_card',\n                paymentData: {\n                    instrumentId: 'id',\n                    shouldSetAsDefaultInstrument: false,\n                },\n            });\n        });\n\n        it('should submit the payment and save card', async () => {\n            payload = {\n                payment: {\n                    gatewayId: 'bluesnapdirect',\n                    methodId: 'credit_card',\n                    paymentData: {\n                        shouldSaveInstrument: true,\n                        shouldSetAsDefaultInstrument: true,\n                    },\n                },\n            };\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                gatewayId: 'bluesnapdirect',\n                methodId: 'credit_card',\n                paymentData: {\n                    formattedPayload: {\n                        credit_card_token: {\n                            token: '{\"pfToken\":\"pfToken\",\"cardHolderName\":\"John Doe\"}',\n                        },\n                        vault_payment_instrument: true,\n                        set_as_default_stored_instrument: true,\n                    },\n                },\n            });\n        });\n\n        describe('should fail if...', () => {\n            test('payload.payment is not provided', async () => {\n                const execute = () => strategy.execute({ ...payload, payment: undefined });\n\n                await expect(execute()).rejects.toThrow(PaymentArgumentInvalidError);\n            });\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            const finalize = strategy.finalize();\n\n            await expect(finalize).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes the strategy successfully', async () => {\n            const deinitialize = strategy.deinitialize();\n\n            await expect(deinitialize).resolves.toBeUndefined();\n        });\n\n        it('should detach BlueSnap hosted form', async () => {\n            await strategy.initialize(options);\n            await strategy.deinitialize();\n\n            expect(hostedForm.detach).toHaveBeenCalled();\n        });\n\n        it(\"shouldn't detach BlueSnap hosted form if not initialized\", async () => {\n            await strategy.initialize(optionsCardValidationWithoutFields);\n            await strategy.deinitialize();\n\n            expect(hostedForm.detach).not.toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/bluesnap-direct-credit-card-payment-strategy.ts",
    "content": "import { WithCreditCardPaymentInitializeOptions } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    guard,\n    InvalidArgumentError,\n    isHostedInstrumentLike,\n    isVaultedInstrument,\n    MissingDataError,\n    MissingDataErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BlueSnapDirectSdk, BlueSnapDirectThreeDSecureData } from '../types';\nimport isHostedCardFieldOptionsMap from '../utils/is-hosted-card-field-options-map';\nimport isHostedStoredCardFieldOptionsMap from '../utils/is-hosted-stored-card-field-options-map';\n\nimport BlueSnapDirect3ds from './bluesnap-direct-3ds';\nimport BlueSnapDirectHostedForm from './bluesnap-direct-hosted-form';\nimport BlueSnapDirectScriptLoader from './bluesnap-direct-script-loader';\n\nexport default class BlueSnapDirectCreditCardPaymentStrategy implements PaymentStrategy {\n    private _paymentFieldsToken?: string;\n    private _shouldUseHostedFields?: boolean;\n    private _blueSnapSdk?: BlueSnapDirectSdk;\n\n    constructor(\n        private _scriptLoader: BlueSnapDirectScriptLoader,\n        private _paymentIntegrationService: PaymentIntegrationService,\n        private _blueSnapDirectHostedForm: BlueSnapDirectHostedForm,\n        private _blueSnapDirect3ds: BlueSnapDirect3ds,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithCreditCardPaymentInitializeOptions,\n    ): Promise<void> {\n        const { methodId, gatewayId, creditCard } = options;\n\n        if (!gatewayId || !creditCard) {\n            throw new InvalidArgumentError();\n        }\n\n        const state = await this._paymentIntegrationService.loadPaymentMethod(gatewayId, {\n            params: { method: methodId, bigpayToken: creditCard.bigpayToken },\n        });\n\n        const {\n            config: { testMode, is3dsEnabled },\n            clientToken,\n        } = state.getPaymentMethodOrThrow(methodId, gatewayId);\n\n        this._blueSnapSdk = await this._scriptLoader.load(testMode);\n\n        this._paymentFieldsToken = clientToken;\n        this._shouldUseHostedFields =\n            isHostedCardFieldOptionsMap(creditCard.form.fields) ||\n            (isHostedStoredCardFieldOptionsMap(creditCard.form.fields) &&\n                !!creditCard.form.fields.cardNumberVerification);\n\n        if (this._shouldUseHostedFields) {\n            this._blueSnapDirectHostedForm.initialize(this._blueSnapSdk, creditCard.form.fields);\n            try {\n                await this._blueSnapDirectHostedForm.attach(\n                    this._getPaymentFieldsToken(),\n                    creditCard,\n                    is3dsEnabled,\n                );\n            } catch (error) {\n                if (error instanceof InvalidArgumentError) {\n                    return;\n                }\n                throw error;\n            }\n        }\n    }\n\n    async execute(payload: OrderRequestBody): Promise<void> {\n        if (!payload.payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        if (!this._blueSnapSdk) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const { paymentData } = payload.payment;\n\n        const { shouldSaveInstrument, shouldSetAsDefaultInstrument } = isHostedInstrumentLike(\n            paymentData,\n        )\n            ? paymentData\n            : { shouldSaveInstrument: false, shouldSetAsDefaultInstrument: false };\n\n        const pfToken = this._getPaymentFieldsToken();\n        let threeDSecureReferenceId;\n\n        const { is3dsEnabled } = this._paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow(payload.payment.methodId, payload.payment.gatewayId).config;\n\n        const bluesnapSubmitedForm = this._shouldUseHostedFields\n            ? await this._blueSnapDirectHostedForm\n                  .validate()\n                  .submit(\n                      is3dsEnabled ? this._getBlueSnapDirectThreeDSecureData() : undefined,\n                      !(isHostedInstrumentLike(paymentData) && isVaultedInstrument(paymentData)),\n                  )\n            : undefined;\n\n        await this._paymentIntegrationService.submitOrder();\n\n        if (\n            isHostedInstrumentLike(paymentData) &&\n            isVaultedInstrument(paymentData) &&\n            this._paymentFieldsToken &&\n            paymentData.instrumentId\n        ) {\n            if (is3dsEnabled) {\n                this._blueSnapDirect3ds.initialize(this._blueSnapSdk);\n\n                const { last4, brand } = this._paymentIntegrationService\n                    .getState()\n                    .getCardInstrumentOrThrow(paymentData.instrumentId);\n\n                const previouslyUsedCard = {\n                    last4Digits: last4,\n                    ccType: brand.toUpperCase(),\n                    ...this._getBlueSnapDirectThreeDSecureData(),\n                };\n\n                threeDSecureReferenceId = await this._blueSnapDirect3ds.initialize3ds(\n                    this._paymentFieldsToken,\n                    previouslyUsedCard,\n                );\n            }\n\n            await this._paymentIntegrationService.submitPayment({\n                ...payload.payment,\n                paymentData: {\n                    instrumentId: paymentData.instrumentId,\n                    ...(this._shouldUseHostedFields ? { nonce: pfToken } : {}),\n                    ...(threeDSecureReferenceId\n                        ? { deviceSessionId: threeDSecureReferenceId }\n                        : {}),\n                    shouldSetAsDefaultInstrument: !!shouldSetAsDefaultInstrument,\n                },\n            });\n\n            return;\n        }\n\n        await this._paymentIntegrationService.submitPayment({\n            ...payload.payment,\n            paymentData: {\n                formattedPayload: {\n                    credit_card_token: {\n                        token: JSON.stringify({\n                            pfToken,\n                            cardHolderName:\n                                bluesnapSubmitedForm && bluesnapSubmitedForm.cardHolderName,\n                        }),\n                    },\n                    vault_payment_instrument: shouldSaveInstrument,\n                    set_as_default_stored_instrument: shouldSetAsDefaultInstrument,\n                },\n            },\n        });\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        if (this._shouldUseHostedFields) {\n            this._blueSnapDirectHostedForm.detach();\n        }\n\n        return Promise.resolve();\n    }\n\n    private _getBlueSnapDirectThreeDSecureData(): BlueSnapDirectThreeDSecureData {\n        const {\n            getBillingAddress,\n            getShippingAddress,\n            getCustomer,\n            getCheckoutOrThrow,\n            getCartOrThrow,\n        } = this._paymentIntegrationService.getState();\n        const billingAddress = getBillingAddress();\n        const shippingAddress = getShippingAddress();\n        const email = getCustomer()?.email || billingAddress?.email;\n        const phone = billingAddress?.phone || shippingAddress?.phone;\n\n        return {\n            amount: getCheckoutOrThrow().outstandingBalance,\n            currency: getCartOrThrow().currency.code,\n            ...(email && { email }),\n            ...(phone && { phone }),\n            ...(billingAddress && {\n                billingFirstName: billingAddress.firstName,\n                billingLastName: billingAddress.lastName,\n                billingCountry: billingAddress.countryCode,\n                billingCity: billingAddress.city,\n                billingAddress: `${billingAddress.address1} ${billingAddress.address2}`.trim(),\n                billingZip: billingAddress.postalCode,\n            }),\n            ...(shippingAddress && {\n                shippingFirstName: shippingAddress.firstName,\n                shippingLastName: shippingAddress.lastName,\n                shippingCountry: shippingAddress.countryCode,\n                shippingCity: shippingAddress.city,\n                shippingAddress: `${shippingAddress.address1} ${shippingAddress.address2}`.trim(),\n                shippingZip: shippingAddress.postalCode,\n            }),\n        };\n    }\n\n    private _getPaymentFieldsToken(): string {\n        return guard(\n            this._paymentFieldsToken,\n            () => new MissingDataError(MissingDataErrorType.MissingPaymentToken),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/bluesnap-direct-hosted-form.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { CreditCardPaymentInitializeOptions } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    HostedFieldType,\n    InvalidArgumentError,\n    NotInitializedError,\n    PaymentInvalidFormError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BlueSnapHostedFieldType } from '../bluesnap-direct-constants';\nimport getBlueSnapDirectSdkMock from '../mocks/bluesnap-direct-sdk.mock';\nimport getBlueSnapPaymentInitializeOptionsMocks from '../mocks/credit-card-payment-initialize-options.mock';\nimport {\n    BlueSnapDirectSdk,\n    BlueSnapDirectCardType as CardType,\n    BlueSnapDirectErrorCode as ErrorCode,\n    BlueSnapDirectErrorDescription as ErrorDescription,\n    BlueSnapDirectEventOrigin as EventOrigin,\n    BlueSnapDirectHostedFieldTagId as HostedFieldTagId,\n    BlueSnapDirectHostedPaymentFieldsOptions as HostedPaymentFieldsOptions,\n} from '../types';\n\nimport BlueSnapDirectHostedForm from './bluesnap-direct-hosted-form';\nimport BlueSnapHostedInputValidator from './bluesnap-direct-hosted-input-validator';\nimport BluesnapDirectNameOnCardInput from './bluesnap-direct-name-on-card-input';\nimport BlueSnapDirectScriptLoader from './bluesnap-direct-script-loader';\n\ndescribe('BlueSnapDirectHostedForm', () => {\n    let sdkMocks: ReturnType<typeof getBlueSnapDirectSdkMock>;\n    let blueSnapDirectSdkMock: BlueSnapDirectSdk;\n    let scriptLoader: BlueSnapDirectScriptLoader;\n    let nameOnCardInput: BluesnapDirectNameOnCardInput;\n    let hostedInputValidator: BlueSnapHostedInputValidator;\n    let hostedForm: BlueSnapDirectHostedForm;\n\n    let optionsMocks: ReturnType<typeof getBlueSnapPaymentInitializeOptionsMocks>;\n    let ccOptionsMock: CreditCardPaymentInitializeOptions;\n    let storedCCOptionsMock: CreditCardPaymentInitializeOptions;\n    let fieldset: HTMLFieldSetElement;\n    let ccCvvContainer: HTMLDivElement;\n    let ccExpiryContainer: HTMLDivElement;\n    let ccNumberContainer: HTMLDivElement;\n    let ccNameContainer: HTMLDivElement;\n\n    beforeEach(() => {\n        sdkMocks = getBlueSnapDirectSdkMock();\n        blueSnapDirectSdkMock = sdkMocks.sdk;\n        scriptLoader = new BlueSnapDirectScriptLoader(createScriptLoader());\n        jest.spyOn(scriptLoader, 'load').mockResolvedValue(blueSnapDirectSdkMock);\n\n        jest.spyOn(document, 'createElement');\n        nameOnCardInput = new BluesnapDirectNameOnCardInput();\n        jest.spyOn(nameOnCardInput, 'attach').mockReturnValue(undefined);\n        jest.spyOn(nameOnCardInput, 'detach').mockReturnValue(undefined);\n        jest.spyOn(nameOnCardInput, 'getValue').mockReturnValue('John Doe');\n\n        hostedInputValidator = new BlueSnapHostedInputValidator();\n        jest.spyOn(hostedInputValidator, 'initialize');\n        jest.spyOn(hostedInputValidator, 'initializeValidationFields');\n        jest.spyOn(hostedInputValidator, 'validate');\n\n        hostedForm = new BlueSnapDirectHostedForm(nameOnCardInput, hostedInputValidator);\n\n        optionsMocks = getBlueSnapPaymentInitializeOptionsMocks();\n        ccOptionsMock = optionsMocks.ccOptions;\n        storedCCOptionsMock = {\n            ...optionsMocks.ccOptions,\n            form: {\n                ...optionsMocks.ccOptions.form,\n                fields: {\n                    [HostedFieldType.CardCodeVerification]: {\n                        containerId: optionsMocks.ccCvvContainerId,\n                        instrumentId: 'instrumentId',\n                    },\n                    [HostedFieldType.CardNumberVerification]: {\n                        containerId: optionsMocks.ccNumberContainerId,\n                        instrumentId: 'instrumentId',\n                    },\n                },\n            },\n        };\n\n        fieldset = document.createElement('fieldset');\n        ccCvvContainer = document.createElement('div');\n        ccExpiryContainer = document.createElement('div');\n        ccNumberContainer = document.createElement('div');\n        ccNameContainer = document.createElement('div');\n\n        ccCvvContainer.id = optionsMocks.ccCvvContainerId;\n        ccExpiryContainer.id = optionsMocks.ccExpiryContainerId;\n        ccNumberContainer.id = optionsMocks.ccNumberContainerId;\n        ccNameContainer.id = optionsMocks.ccNameContainerId;\n\n        document.body\n            .appendChild(fieldset)\n            .append(ccCvvContainer, ccExpiryContainer, ccNumberContainer, ccNameContainer);\n    });\n\n    afterEach(() => {\n        document.body.removeChild(fieldset);\n        jest.spyOn(document, 'createElement').mockRestore();\n    });\n\n    describe('#initialize', () => {\n        it('should initialize hosted form successfully', () => {\n            hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n\n            expect(hostedInputValidator.initialize).toHaveBeenCalled();\n        });\n\n        it('should initialize hosted form for stored card successfully', () => {\n            hostedForm.initialize(blueSnapDirectSdkMock, storedCCOptionsMock.form.fields);\n\n            expect(hostedInputValidator.initializeValidationFields).toHaveBeenCalled();\n        });\n    });\n\n    describe('#attach', () => {\n        it('should set custom BlueSnap attributes to the hosted fields containers', async () => {\n            hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n            await hostedForm.attach('pfToken', ccOptionsMock);\n\n            expect(ccCvvContainer.dataset.bluesnap).toBe(HostedFieldTagId.CardCode);\n            expect(ccExpiryContainer.dataset.bluesnap).toBe(HostedFieldTagId.CardExpiry);\n            expect(ccNumberContainer.dataset.bluesnap).toBe(HostedFieldTagId.CardNumber);\n            expect(ccNameContainer.dataset.bluesnap).toBe(HostedFieldTagId.CardName);\n        });\n\n        it('should set custom BlueSnap attributes to the stored card hosted fields containers', async () => {\n            hostedForm.initialize(blueSnapDirectSdkMock, storedCCOptionsMock.form.fields);\n            await hostedForm.attach('pfToken', storedCCOptionsMock);\n\n            expect(ccCvvContainer.dataset.bluesnap).toBe(HostedFieldTagId.CardCode);\n            expect(ccNumberContainer.dataset.bluesnap).toBe(HostedFieldTagId.CardNumber);\n        });\n\n        it('should create hosted payment fields', async () => {\n            const expectedStyle = {\n                color: 'rgb (51, 51, 51)',\n                'font-family': 'Montserrat, Arial, Helvetica, sans-serif',\n                'font-size': '13px',\n                'font-weight': '508',\n            };\n            const expectedOptions = {\n                token: 'pfToken',\n                onFieldEventHandler: {\n                    setupComplete: expect.any(Function),\n                    onFocus: expect.any(Function),\n                    onBlur: expect.any(Function),\n                    onError: expect.any(Function),\n                    onType: expect.any(Function),\n                    onEnter: expect.any(Function),\n                    onValid: expect.any(Function),\n                },\n                ccnPlaceHolder: '',\n                cvvPlaceHolder: '',\n                expPlaceHolder: 'MM / YY',\n                style: {\n                    input: expectedStyle,\n                    '.invalid': expectedStyle,\n                    ':focus': expectedStyle,\n                },\n                '3DS': false,\n            };\n\n            hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n            await hostedForm.attach('pfToken', ccOptionsMock);\n\n            expect(blueSnapDirectSdkMock.hostedPaymentFieldsCreate).toHaveBeenCalledWith(\n                expectedOptions,\n            );\n            expect(nameOnCardInput.attach).toHaveBeenCalledWith(\n                expectedOptions,\n                undefined,\n                undefined,\n            );\n        });\n\n        it('should create hosted payment fields for stored cards without name input', async () => {\n            hostedForm.initialize(blueSnapDirectSdkMock, storedCCOptionsMock.form.fields);\n            await hostedForm.attach('pfToken', storedCCOptionsMock);\n\n            expect(nameOnCardInput.attach).not.toHaveBeenCalled();\n        });\n\n        it('should create hosted payment fields with 3DS enabled', async () => {\n            const expectedOptions = expect.objectContaining({ '3DS': true });\n\n            hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n            await hostedForm.attach('pfToken', ccOptionsMock, true);\n\n            expect(blueSnapDirectSdkMock.hostedPaymentFieldsCreate).toHaveBeenCalledWith(\n                expectedOptions,\n            );\n            expect(nameOnCardInput.attach).toHaveBeenCalledWith(\n                expectedOptions,\n                undefined,\n                undefined,\n            );\n        });\n\n        describe('should call the UI event callbacks:', () => {\n            test('onFocus', async () => {\n                const triggerFocus = () => {\n                    const { onFieldEventHandler: { onFocus } = {} } = (\n                        blueSnapDirectSdkMock.hostedPaymentFieldsCreate as jest.Mock\n                    ).mock.calls[0][0] as HostedPaymentFieldsOptions;\n\n                    onFocus?.(HostedFieldTagId.CardNumber);\n                };\n\n                hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n                await hostedForm.attach('pfToken', ccOptionsMock);\n                triggerFocus();\n\n                expect(ccOptionsMock.form.onFocus).toHaveBeenCalledWith({\n                    fieldType: BlueSnapHostedFieldType.ccn,\n                });\n            });\n\n            test('onBlur', async () => {\n                const triggerBlur = () => {\n                    const { onFieldEventHandler: { onBlur } = {} } = (\n                        blueSnapDirectSdkMock.hostedPaymentFieldsCreate as jest.Mock\n                    ).mock.calls[0][0] as HostedPaymentFieldsOptions;\n\n                    onBlur?.(HostedFieldTagId.CardNumber);\n                };\n\n                hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n                await hostedForm.attach('pfToken', ccOptionsMock);\n                triggerBlur();\n\n                expect(ccOptionsMock.form.onBlur).toHaveBeenCalledWith({\n                    fieldType: BlueSnapHostedFieldType.ccn,\n                });\n            });\n\n            test('onEnter', async () => {\n                const triggerEnter = () => {\n                    const { onFieldEventHandler: { onEnter } = {} } = (\n                        blueSnapDirectSdkMock.hostedPaymentFieldsCreate as jest.Mock\n                    ).mock.calls[0][0] as HostedPaymentFieldsOptions;\n\n                    onEnter?.(HostedFieldTagId.CardNumber);\n                };\n\n                hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n                await hostedForm.attach('pfToken', ccOptionsMock);\n                triggerEnter();\n\n                expect(ccOptionsMock.form.onEnter).toHaveBeenCalledWith({\n                    fieldType: BlueSnapHostedFieldType.ccn,\n                });\n            });\n\n            test('onCardTypeChange', async () => {\n                const triggerCardTypeChange = () => {\n                    const { onFieldEventHandler: { onType } = {} } = (\n                        blueSnapDirectSdkMock.hostedPaymentFieldsCreate as jest.Mock\n                    ).mock.calls[0][0] as HostedPaymentFieldsOptions;\n\n                    onType?.(HostedFieldTagId.CardNumber, 'MASTERCARD', undefined);\n                };\n\n                hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n                await hostedForm.attach('pfToken', ccOptionsMock);\n                triggerCardTypeChange();\n\n                expect(ccOptionsMock.form.onCardTypeChange).toHaveBeenCalledWith({\n                    cardType: CardType.MASTERCARD,\n                });\n            });\n\n            describe('onValidate', () => {\n                test('when onError is called', async () => {\n                    const triggerError = () => {\n                        const { onFieldEventHandler: { onError } = {} } = (\n                            blueSnapDirectSdkMock.hostedPaymentFieldsCreate as jest.Mock\n                        ).mock.calls[0][0] as HostedPaymentFieldsOptions;\n\n                        onError?.(\n                            HostedFieldTagId.CardNumber,\n                            ErrorCode.INVALID_OR_EMPTY,\n                            ErrorDescription.INVALID,\n                            EventOrigin.ON_BLUR,\n                        );\n                    };\n\n                    hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n                    await hostedForm.attach('pfToken', ccOptionsMock);\n                    triggerError();\n\n                    expect(ccOptionsMock.form.onValidate).toHaveBeenCalledWith(\n                        hostedInputValidator.validate({\n                            tagId: HostedFieldTagId.CardNumber,\n                            errorDescription: ErrorDescription.INVALID,\n                        }),\n                    );\n                });\n\n                test('when onValid is called', async () => {\n                    const triggerValid = () => {\n                        const { onFieldEventHandler: { onValid } = {} } = (\n                            blueSnapDirectSdkMock.hostedPaymentFieldsCreate as jest.Mock\n                        ).mock.calls[0][0] as HostedPaymentFieldsOptions;\n\n                        onValid?.(HostedFieldTagId.CardNumber);\n                    };\n\n                    hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n                    await hostedForm.attach('pfToken', ccOptionsMock);\n                    triggerValid();\n\n                    expect(ccOptionsMock.form.onValidate).toHaveBeenCalledWith(\n                        hostedInputValidator.validate({\n                            tagId: HostedFieldTagId.CardNumber,\n                        }),\n                    );\n                });\n            });\n        });\n\n        describe('throws an error if...', () => {\n            test('hosted form has not been initialized', async () => {\n                const attach = hostedForm.attach('pfToken', ccOptionsMock);\n\n                await expect(attach).rejects.toThrow(NotInitializedError);\n            });\n\n            test('fields is not a HostedCardFieldOptionsMap or HostedStoredCardFieldOptionsMap', async () => {\n                const attach = () => {\n                    ccOptionsMock.form.fields = {};\n\n                    return hostedForm.attach('pfToken', ccOptionsMock);\n                };\n\n                hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n\n                await expect(attach()).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('invalid containers are provided', async () => {\n                const attach = () => {\n                    Object.values(ccOptionsMock.form.fields).forEach((field) => {\n                        field.containerId = 'foo';\n                    });\n\n                    return hostedForm.attach('pfToken', ccOptionsMock);\n                };\n\n                hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n\n                await expect(attach()).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('when onError is called with an unexpected error', async () => {\n                const triggerError = () => {\n                    const { onFieldEventHandler: { onError } = {} } = (\n                        blueSnapDirectSdkMock.hostedPaymentFieldsCreate as jest.Mock\n                    ).mock.calls[0][0] as HostedPaymentFieldsOptions;\n\n                    onError?.(\n                        HostedFieldTagId.CardNumber,\n                        ErrorCode.THREE_DS_NOT_ENABLED,\n                        ErrorDescription.THREE_DS_NOT_ENABLED,\n                        undefined,\n                    );\n                };\n\n                hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n                await hostedForm.attach('pfToken', ccOptionsMock);\n\n                expect(triggerError).toThrow(\n                    'An unexpected error has occurred: {\"tagId\":\"ccn\",\"errorCode\":\"14100\",\"errorDescription\":\"3D Secure is not enabled\"}',\n                );\n                expect(ccOptionsMock.form.onValidate).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('#validate', () => {\n        it('should call the onValidate callback and return the BlueSnapDirectHostedForm instance', async () => {\n            const pretendUserEntersValidData = () => {\n                const { onFieldEventHandler: { onValid } = {} } = (\n                    blueSnapDirectSdkMock.hostedPaymentFieldsCreate as jest.Mock\n                ).mock.calls[0][0] as HostedPaymentFieldsOptions;\n\n                onValid?.(HostedFieldTagId.CardNumber);\n                onValid?.(HostedFieldTagId.CardExpiry);\n                onValid?.(HostedFieldTagId.CardCode);\n                onValid?.(HostedFieldTagId.CardName);\n            };\n            const placeOrder = () => hostedForm.validate();\n\n            hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n            await hostedForm.attach('pfToken', ccOptionsMock);\n            pretendUserEntersValidData();\n\n            expect(placeOrder()).toBe(hostedForm);\n            expect(ccOptionsMock.form.onValidate).toHaveBeenCalledWith(\n                hostedInputValidator.validate(),\n            );\n        });\n\n        it('should call the onValidate callback and throw an error', async () => {\n            const pretendUserForgetsFillCcName = () => {\n                const { onFieldEventHandler: { onValid } = {} } = (\n                    blueSnapDirectSdkMock.hostedPaymentFieldsCreate as jest.Mock\n                ).mock.calls[0][0] as HostedPaymentFieldsOptions;\n\n                onValid?.(HostedFieldTagId.CardNumber);\n                onValid?.(HostedFieldTagId.CardExpiry);\n                onValid?.(HostedFieldTagId.CardCode);\n            };\n            const placeOrder = () => hostedForm.validate();\n\n            hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n            await hostedForm.attach('pfToken', ccOptionsMock);\n            pretendUserForgetsFillCcName();\n\n            expect(placeOrder).toThrow(PaymentInvalidFormError);\n            expect(ccOptionsMock.form.onValidate).toHaveBeenCalledWith(\n                hostedInputValidator.validate(),\n            );\n        });\n\n        it('should throw an error with details', async () => {\n            const expectedErrors = {\n                cardNumber: [{ message: 'Credit card number is required', type: 'required' }],\n                cardExpiry: [{ message: 'Expiration date is required', type: 'required' }],\n                cardCode: [{ message: 'CVV is required', type: 'required' }],\n                cardName: [{ message: 'Full name is required', type: 'required' }],\n            };\n            const getErrorDetails = () => {\n                try {\n                    hostedForm.validate();\n                } catch (err) {\n                    return (err as PaymentInvalidFormError).details;\n                }\n            };\n\n            hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n            await hostedForm.attach('pfToken', ccOptionsMock);\n\n            expect(getErrorDetails()).toStrictEqual(expectedErrors);\n        });\n    });\n\n    describe('#submit', () => {\n        it('should submit payment data successfully', async () => {\n            const placeOrder = () => hostedForm.submit(undefined, true);\n\n            hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n\n            await expect(placeOrder()).resolves.toStrictEqual({\n                ...sdkMocks.callbackResults,\n                cardHolderName: 'John Doe',\n            });\n        });\n\n        it('should submit payment data successfully without cardholder name', async () => {\n            const placeOrder = () => hostedForm.submit(undefined, false);\n\n            hostedForm.initialize(blueSnapDirectSdkMock, ccOptionsMock.form.fields);\n\n            await expect(placeOrder()).resolves.toStrictEqual({\n                ...sdkMocks.callbackResults,\n            });\n        });\n\n        it('should fail to submit payment data', async () => {\n            const initialize = () => {\n                const sdkWithErrors = getBlueSnapDirectSdkMock('0').sdk;\n\n                return hostedForm.initialize(sdkWithErrors);\n            };\n            const placeOrder = () => hostedForm.submit();\n\n            initialize();\n\n            await expect(placeOrder()).rejects.toThrow(\n                'Submission failed with status: 0 and errors: [{\"errorCode\":\"0\",\"errorDescription\":\"unknown\",\"eventType\":\"Server Error\",\"tagId\":\"cvv\"}]',\n            );\n        });\n\n        it('should fail to submit payment data if 3DS auth fails', async () => {\n            const initialize = () => {\n                const sdkWithErrors = getBlueSnapDirectSdkMock('14101').sdk;\n\n                return hostedForm.initialize(sdkWithErrors);\n            };\n            const placeOrder = () => hostedForm.submit();\n\n            initialize();\n\n            await expect(placeOrder()).rejects.toThrow('3D Secure authentication failed');\n        });\n\n        it('throws an error if hosted form has not been initialized', async () => {\n            const placeOrder = () => hostedForm.submit();\n\n            await expect(placeOrder()).rejects.toThrow(NotInitializedError);\n        });\n    });\n\n    describe('#detach', () => {\n        it('should detach name on card input', () => {\n            hostedForm.detach();\n\n            expect(nameOnCardInput.detach).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/bluesnap-direct-hosted-form.ts",
    "content": "import { kebabCase } from 'lodash';\n\nimport { CreditCardPaymentInitializeOptions } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    guard,\n    HostedCardFieldOptionsMap,\n    HostedFieldBlurEventData,\n    HostedFieldEnterEventData,\n    HostedFieldFocusEventData,\n    HostedFieldOptionsMap,\n    HostedFieldStylesMap,\n    HostedFormOptions,\n    HostedInputValidateErrorData,\n    HostedStoredCardFieldOptionsMap,\n    InvalidArgumentError,\n    NotInitializedError,\n    NotInitializedErrorType,\n    PaymentInvalidFormError,\n    PaymentInvalidFormErrorDetails,\n    PaymentMethodFailedError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BlueSnapHostedFieldType } from '../bluesnap-direct-constants';\nimport {\n    BlueSnapDirectSdk,\n    BlueSnapDirectStyle,\n    BlueSnapDirectCallbackCardData as CallbackCardData,\n    BlueSnapDirectCallbackError as CallbackError,\n    BlueSnapDirectCallbackResults as CallbackResults,\n    WithBlueSnapDirectCardHolderName as CardHolderName,\n    BlueSnapDirectCardType as CardType,\n    BlueSnapDirectCardTypeValues as CardTypeValues,\n    BlueSnapDirectErrorCode as ErrorCode,\n    BlueSnapDirectErrorDescription as ErrorDescription,\n    BlueSnapDirectEventOrigin as EventOrigin,\n    BlueSnapDirectHostedFieldTagId as HostedFieldTagId,\n    BlueSnapDirectHostedPaymentFieldsOptions as HostedPaymentFieldsOptions,\n    BlueSnapDirectThreeDSecureData as ThreeDSecureData,\n} from '../types';\nimport isValidationErrorDescription from '../utils/is-bluesnap-direct-input-validation-error-description';\nimport isHostedCardFieldOptionsMap from '../utils/is-hosted-card-field-options-map';\nimport isHostedStoredCardFieldOptionsMap from '../utils/is-hosted-stored-card-field-options-map';\n\nimport BlueSnapHostedInputValidator from './bluesnap-direct-hosted-input-validator';\nimport BluesnapDirectNameOnCardInput from './bluesnap-direct-name-on-card-input';\n\nexport default class BlueSnapDirectHostedForm {\n    private _blueSnapSdk?: BlueSnapDirectSdk;\n    private _onValidate: HostedFormOptions['onValidate'];\n\n    constructor(\n        private _nameOnCardInput: BluesnapDirectNameOnCardInput,\n        private _hostedInputValidator: BlueSnapHostedInputValidator,\n    ) {}\n\n    initialize(blueSnapSdk: BlueSnapDirectSdk, fields?: HostedFieldOptionsMap) {\n        this._blueSnapSdk = blueSnapSdk;\n\n        if (!fields) {\n            return;\n        }\n\n        if (isHostedCardFieldOptionsMap(fields)) {\n            this._hostedInputValidator.initialize();\n\n            return;\n        }\n\n        if (isHostedStoredCardFieldOptionsMap(fields) && !!fields.cardNumberVerification) {\n            this._hostedInputValidator.initializeValidationFields();\n        }\n    }\n\n    async attach(\n        paymentFieldsToken: string,\n        { form: { fields, ...callbacksAndStyles } }: CreditCardPaymentInitializeOptions,\n        enable3DS = false,\n    ): Promise<void> {\n        const blueSnapSdk = this._getBlueSnapSdk();\n\n        if (!isHostedCardFieldOptionsMap(fields) && !isHostedStoredCardFieldOptionsMap(fields)) {\n            throw new InvalidArgumentError(\n                'Field options must be of type HostedCardFieldOptionsMap',\n            );\n        }\n\n        this._onValidate = callbacksAndStyles.onValidate;\n\n        if (isHostedCardFieldOptionsMap(fields)) {\n            this._setCustomBlueSnapAttributes(fields);\n        }\n\n        if (isHostedStoredCardFieldOptionsMap(fields)) {\n            this._setCustomStoredCardsBlueSnapAttributes(fields);\n        }\n\n        return new Promise<void>((resolve) => {\n            const options = this._getHostedPaymentFieldsOptions(\n                paymentFieldsToken,\n                fields,\n                callbacksAndStyles,\n                resolve,\n                enable3DS,\n            );\n\n            blueSnapSdk.hostedPaymentFieldsCreate(options);\n\n            if (isHostedCardFieldOptionsMap(fields)) {\n                this._nameOnCardInput.attach(\n                    options,\n                    fields.cardName.accessibilityLabel,\n                    fields.cardName.placeholder,\n                );\n            }\n        });\n    }\n\n    validate(): this {\n        const results = this._hostedInputValidator.validate();\n\n        this._onValidate?.(results);\n\n        if (!results.isValid) {\n            const details = Object.entries(results.errors).reduce<PaymentInvalidFormErrorDetails>(\n                (result, [key, value]: [string, HostedInputValidateErrorData[]]) => ({\n                    ...result,\n                    [key]: value.map(({ message, type }) => ({ message, type })),\n                }),\n                {},\n            );\n\n            throw new PaymentInvalidFormError(details);\n        }\n\n        return this;\n    }\n\n    submit(\n        threeDSecureData?: ThreeDSecureData,\n        shouldSendName = false,\n    ): Promise<CallbackCardData & CardHolderName> {\n        return new Promise((resolve, reject) =>\n            this._getBlueSnapSdk().hostedPaymentFieldsSubmitData(\n                (data: CallbackResults) =>\n                    this._isBlueSnapDirectCallbackError(data)\n                        ? reject(\n                              new PaymentMethodFailedError(\n                                  data.statusCode === ErrorCode.THREE_DS_AUTH_FAILED\n                                      ? data.error[0].errorDescription\n                                      : `Submission failed with status: ${\n                                            data.statusCode\n                                        } and errors: ${JSON.stringify(data.error)}`,\n                              ),\n                          )\n                        : resolve({\n                              ...data.cardData,\n                              ...(shouldSendName\n                                  ? { cardHolderName: this._nameOnCardInput.getValue() }\n                                  : {}),\n                          }),\n                threeDSecureData,\n            ),\n        );\n    }\n\n    detach(): void {\n        this._nameOnCardInput.detach();\n    }\n\n    private _isBlueSnapDirectCallbackError(data: CallbackResults): data is CallbackError {\n        return 'error' in data;\n    }\n\n    private _getHostedPaymentFieldsOptions(\n        token: string,\n        fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n        {\n            onFocus,\n            onBlur,\n            onValidate,\n            onCardTypeChange,\n            onEnter,\n            styles,\n        }: Omit<HostedFormOptions, 'fields'>,\n        resolve: () => void,\n        enable3DS: boolean,\n    ): HostedPaymentFieldsOptions {\n        return {\n            token,\n            onFieldEventHandler: {\n                setupComplete: () => resolve(),\n                onFocus: this._usetUiEventCallback(onFocus),\n                onBlur: this._usetUiEventCallback(onBlur),\n                onError: this._handleError(onValidate),\n                onType: (_tagId: HostedFieldTagId, cardType: CardTypeValues) =>\n                    onCardTypeChange?.({ cardType: CardType[cardType] }),\n                onEnter: this._usetUiEventCallback(onEnter),\n                onValid: (tagId: HostedFieldTagId) =>\n                    onValidate?.(this._hostedInputValidator.validate({ tagId })),\n            },\n            ...(isHostedCardFieldOptionsMap(fields) && {\n                ccnPlaceHolder: fields.cardNumber.placeholder || '',\n                cvvPlaceHolder: fields.cardCode?.placeholder || '',\n                expPlaceHolder: fields.cardExpiry.placeholder || 'MM / YY',\n            }),\n            ...(styles && { style: this._mapStyles(styles) }),\n            '3DS': enable3DS,\n        };\n    }\n\n    private _mapStyles({\n        default: input,\n        error,\n        focus,\n    }: HostedFieldStylesMap): BlueSnapDirectStyle {\n        return Object.entries({\n            ...(input && { input }),\n            ...(error && { '.invalid': error }),\n            ...(focus && { ':focus': focus }),\n        }).reduce((result, [selector, declaration]) => {\n            return {\n                ...result,\n                [selector]: Object.entries(declaration).reduce(\n                    (declarationBlock, [property, value]) => ({\n                        ...declarationBlock,\n                        [kebabCase(property)]: value,\n                    }),\n                    {},\n                ),\n            };\n        }, {});\n    }\n\n    private _handleError(\n        onValidate: HostedFormOptions['onValidate'],\n    ): (\n        tagId: HostedFieldTagId | undefined,\n        errorCode: ErrorCode,\n        errorDescription: ErrorDescription | undefined,\n        eventOrigin: EventOrigin | undefined,\n    ) => void {\n        return (tagId, errorCode, errorDescription, eventOrigin) => {\n            if (errorCode === ErrorCode.INVALID_OR_EMPTY) {\n                if (tagId && isValidationErrorDescription(errorDescription)) {\n                    return onValidate?.(\n                        this._hostedInputValidator.validate({ tagId, errorDescription }),\n                    );\n                }\n            }\n\n            throw new PaymentMethodFailedError(\n                `An unexpected error has occurred: ${JSON.stringify({\n                    tagId,\n                    errorCode,\n                    errorDescription,\n                    eventOrigin,\n                })}`,\n            );\n        };\n    }\n\n    private _usetUiEventCallback(\n        callback?: (\n            data: HostedFieldBlurEventData | HostedFieldEnterEventData | HostedFieldFocusEventData,\n        ) => void,\n    ): (tagId: HostedFieldTagId) => void {\n        return (tagId) => {\n            if (callback) {\n                callback({ fieldType: BlueSnapHostedFieldType[tagId] });\n            }\n        };\n    }\n\n    private _getBlueSnapSdk(): BlueSnapDirectSdk {\n        return guard(\n            this._blueSnapSdk,\n            () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n        );\n    }\n\n    private _setCustomBlueSnapAttributes(fields: HostedCardFieldOptionsMap): void {\n        const { cardNumber, cardExpiry, cardCode, cardName } = fields;\n\n        const cardNumberContainer = document.getElementById(cardNumber.containerId);\n        const cardExpiryContainer = document.getElementById(cardExpiry.containerId);\n        const cardCodeContainer = cardCode && document.getElementById(cardCode.containerId);\n        const cardNameContainer = document.getElementById(cardName.containerId);\n\n        if (\n            !cardNumberContainer ||\n            !cardExpiryContainer ||\n            !cardCodeContainer ||\n            !cardNameContainer\n        ) {\n            throw new InvalidArgumentError(\n                'Unable to create hosted payment fields to invalid HTML container elements.',\n            );\n        }\n\n        cardNumberContainer.dataset.bluesnap = HostedFieldTagId.CardNumber;\n        cardExpiryContainer.dataset.bluesnap = HostedFieldTagId.CardExpiry;\n        cardCodeContainer.dataset.bluesnap = HostedFieldTagId.CardCode;\n        cardNameContainer.dataset.bluesnap = HostedFieldTagId.CardName;\n    }\n\n    private _setCustomStoredCardsBlueSnapAttributes(fields: HostedStoredCardFieldOptionsMap): void {\n        const { cardNumberVerification, cardCodeVerification } = fields;\n\n        const cardNumberContainer =\n            cardNumberVerification && document.getElementById(cardNumberVerification.containerId);\n        const cardCodeContainer =\n            cardCodeVerification && document.getElementById(cardCodeVerification.containerId);\n\n        if (!cardNumberContainer && !cardCodeContainer) {\n            return;\n        }\n\n        if (cardNumberContainer) {\n            cardNumberContainer.dataset.bluesnap = HostedFieldTagId.CardNumber;\n        }\n\n        if (cardCodeContainer) {\n            cardCodeContainer.dataset.bluesnap = HostedFieldTagId.CardCode;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/bluesnap-direct-hosted-input-validator.spec.ts",
    "content": "import { CREDIT_CARD_ERRORS } from '../bluesnap-direct-constants';\nimport {\n    BlueSnapDirectHostedFieldTagId as HostedFieldTagId,\n    BlueSnapDirectErrorDescription as SubmitErrorDescription,\n} from '../types';\n\nimport BlueSnapHostedInputValidator from './bluesnap-direct-hosted-input-validator';\n\ndescribe('BlueSnapHostedInputValidator', () => {\n    let validator: BlueSnapHostedInputValidator;\n\n    beforeEach(() => {\n        validator = new BlueSnapHostedInputValidator();\n        validator.initialize();\n    });\n\n    it('should return an invalid result by default', () => {\n        const expectedResult = {\n            isValid: false,\n            errors: {\n                cardNumber: [CREDIT_CARD_ERRORS.empty.cardNumber],\n                cardExpiry: [CREDIT_CARD_ERRORS.empty.cardExpiry],\n                cardCode: [CREDIT_CARD_ERRORS.empty.cardCode],\n                cardName: [CREDIT_CARD_ERRORS.empty.cardName],\n            },\n        };\n\n        expect(validator.validate()).toStrictEqual(expectedResult);\n    });\n\n    it('should return a valid result', () => {\n        const expectedResult = {\n            isValid: true,\n            errors: {\n                cardNumber: [],\n                cardExpiry: [],\n                cardCode: [],\n                cardName: [],\n            },\n        };\n\n        validator.validate({ tagId: HostedFieldTagId.CardCode });\n        validator.validate({ tagId: HostedFieldTagId.CardExpiry });\n        validator.validate({ tagId: HostedFieldTagId.CardNumber });\n        validator.validate({ tagId: HostedFieldTagId.CardName });\n\n        expect(validator.validate()).toStrictEqual(expectedResult);\n    });\n\n    it('should return an invalid result', () => {\n        const expectedResult = {\n            isValid: false,\n            errors: {\n                cardNumber: [CREDIT_CARD_ERRORS.invalid.cardNumber],\n                cardExpiry: [CREDIT_CARD_ERRORS.empty.cardExpiry],\n                cardCode: [CREDIT_CARD_ERRORS.invalid.cardCode],\n                cardName: [CREDIT_CARD_ERRORS.empty.cardName],\n            },\n        };\n\n        validator.validate({\n            tagId: HostedFieldTagId.CardNumber,\n            errorDescription: SubmitErrorDescription.INVALID,\n        });\n        validator.validate({\n            tagId: HostedFieldTagId.CardExpiry,\n            errorDescription: SubmitErrorDescription.EMPTY,\n        });\n        validator.validate({\n            tagId: HostedFieldTagId.CardCode,\n            errorDescription: SubmitErrorDescription.INVALID,\n        });\n        validator.validate({\n            tagId: HostedFieldTagId.CardName,\n            errorDescription: SubmitErrorDescription.EMPTY,\n        });\n\n        expect(validator.validate()).toStrictEqual(expectedResult);\n    });\n\n    it('should return an invalid result for stored cards', () => {\n        validator = new BlueSnapHostedInputValidator();\n        validator.initializeValidationFields();\n\n        const expectedResult = {\n            isValid: false,\n            errors: {\n                cardNumberVerification: [CREDIT_CARD_ERRORS.invalid.cardNumber],\n            },\n        };\n\n        validator.validate({\n            tagId: HostedFieldTagId.CardNumber,\n            errorDescription: SubmitErrorDescription.INVALID,\n        });\n\n        expect(validator.validate()).toStrictEqual(expectedResult);\n    });\n});\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/bluesnap-direct-hosted-input-validator.ts",
    "content": "import {\n    HostedFieldType,\n    HostedInputValidateErrorData,\n    HostedInputValidateErrorDataMap,\n    HostedInputValidateResults,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BlueSnapHostedFieldType, CREDIT_CARD_ERRORS } from '../bluesnap-direct-constants';\nimport {\n    BlueSnapDirectInputValidationErrorDescription as ErrorDescription,\n    BlueSnapDirectHostedFieldTagId as HostedFieldTagId,\n} from '../types';\n\nexport default class BlueSnapHostedInputValidator {\n    private _errors: HostedInputValidateErrorDataMap = {};\n\n    initialize(): void {\n        this._errors = {\n            cardNumber: [CREDIT_CARD_ERRORS.empty.cardNumber],\n            cardExpiry: [CREDIT_CARD_ERRORS.empty.cardExpiry],\n            cardCode: [CREDIT_CARD_ERRORS.empty.cardCode],\n            cardName: [CREDIT_CARD_ERRORS.empty.cardName],\n        };\n    }\n\n    initializeValidationFields(): void {\n        this._errors = {\n            cardNumberVerification: [CREDIT_CARD_ERRORS.empty.cardNumber],\n        };\n    }\n\n    validate(error?: {\n        tagId: HostedFieldTagId;\n        errorDescription?: ErrorDescription;\n    }): HostedInputValidateResults {\n        if (error) {\n            this._updateErrors(error.tagId, error.errorDescription);\n        }\n\n        return {\n            isValid: Object.values(this._errors).every(\n                (errorData: HostedInputValidateErrorData[]) => errorData.length === 0,\n            ),\n            errors: this._errors,\n        };\n    }\n\n    private _updateErrors(tagId: HostedFieldTagId, errorDescription?: ErrorDescription): void {\n        const fieldType = this._errors.cardNumberVerification\n            ? HostedFieldType.CardNumberVerification\n            : BlueSnapHostedFieldType[tagId];\n\n        this._errors[fieldType] = errorDescription\n            ? [CREDIT_CARD_ERRORS[errorDescription][fieldType]]\n            : [];\n    }\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/bluesnap-direct-name-on-card-input.spec.ts",
    "content": "import { NotInitializedError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    BlueSnapDirectErrorCode as ErrorCode,\n    BlueSnapDirectErrorDescription as ErrorDescription,\n    BlueSnapDirectEventOrigin as EventOrigin,\n    BlueSnapDirectHostedFieldTagId as HostedFieldTagId,\n    BlueSnapDirectHostedPaymentFieldsOptions as HostedPaymentFieldsOptions,\n} from '../types';\n\nimport BluesnapDirectNameOnCardInput from './bluesnap-direct-name-on-card-input';\n\ndescribe('BluesnapDirectNameOnCardInput', () => {\n    let nameOnCardInput: BluesnapDirectNameOnCardInput;\n    let options: HostedPaymentFieldsOptions;\n\n    const getInputElement = () =>\n        (document.createElement as jest.Mock).mock.results[0].value as HTMLInputElement;\n\n    beforeEach(() => {\n        nameOnCardInput = new BluesnapDirectNameOnCardInput();\n        options = {\n            token: 'pfToken',\n            onFieldEventHandler: {\n                setupComplete: jest.fn(),\n                onFocus: jest.fn(),\n                onBlur: jest.fn(),\n                onError: jest.fn(),\n                onType: jest.fn(),\n                onEnter: jest.fn(),\n                onValid: jest.fn(),\n            },\n            ccnPlaceHolder: '',\n            cvvPlaceHolder: '',\n            expPlaceHolder: 'MM / YY',\n            style: {\n                input: {\n                    color: 'green',\n                    'font-family': 'Montserrat',\n                    'font-size': '13px',\n                    'font-weight': '508',\n                },\n                '.invalid': {\n                    color: 'red',\n                    'font-family': 'Arial',\n                    'font-size': '14px',\n                    'font-weight': '509',\n                },\n                ':focus': {\n                    color: 'blue',\n                    'font-family': 'Helvetica',\n                    'font-size': '15px',\n                    'font-weight': '510',\n                },\n            },\n        };\n\n        jest.spyOn(document, 'createElement');\n    });\n\n    afterEach(() => {\n        jest.spyOn(document, 'createElement').mockRestore();\n    });\n\n    describe('attach', () => {\n        it('should create an HTMLInputElement', () => {\n            nameOnCardInput.attach(options);\n\n            expect(document.createElement).toHaveBeenCalledWith('input');\n        });\n\n        it('should configure it', () => {\n            nameOnCardInput.attach(options);\n\n            expect(getInputElement()).toEqual(\n                expect.objectContaining({\n                    autocomplete: 'cc-name',\n                    id: HostedFieldTagId.CardName,\n                    inputMode: 'text',\n                    maxLength: 200,\n                    style: expect.objectContaining({\n                        backgroundColor: 'transparent',\n                        border: '0px',\n                        height: '100%',\n                        margin: '0px',\n                        outline: 'none',\n                        padding: '0px',\n                        width: '100%',\n                    }),\n                    type: 'text',\n                }),\n            );\n        });\n\n        it('should apply default styles', () => {\n            nameOnCardInput.attach(options);\n\n            expect(getInputElement()).toEqual(\n                expect.objectContaining({\n                    style: expect.objectContaining({\n                        color: 'green',\n                        fontFamily: 'Montserrat',\n                        fontSize: '13px',\n                        fontWeight: '508',\n                    }),\n                }),\n            );\n        });\n\n        describe('should add event listeners', () => {\n            const pretendUserFocuses = () => getInputElement().dispatchEvent(new Event('focus'));\n            const pretendUserBlurs = (value = '') => {\n                getInputElement().value = value;\n                getInputElement().dispatchEvent(new Event('blur'));\n            };\n            const pretendUserEnters = () => getInputElement().dispatchEvent(new Event('enter'));\n\n            beforeEach(() => {\n                nameOnCardInput.attach(options);\n            });\n\n            it('should handle focus event', () => {\n                pretendUserFocuses();\n\n                expect(options.onFieldEventHandler?.onFocus).toHaveBeenCalledWith(\n                    HostedFieldTagId.CardName,\n                );\n                expect(getInputElement().style).toEqual(\n                    expect.objectContaining({\n                        color: 'blue',\n                        fontFamily: 'Helvetica',\n                        fontSize: '15px',\n                        fontWeight: '510',\n                    }),\n                );\n            });\n\n            it('should handle blur event with invalid value', () => {\n                pretendUserBlurs();\n\n                expect(options.onFieldEventHandler?.onBlur).toHaveBeenCalledWith(\n                    HostedFieldTagId.CardName,\n                );\n                expect(options.onFieldEventHandler?.onError).toHaveBeenCalledWith(\n                    HostedFieldTagId.CardName,\n                    ErrorCode.INVALID_OR_EMPTY,\n                    ErrorDescription.EMPTY,\n                    EventOrigin.ON_BLUR,\n                );\n                expect(getInputElement().style).toEqual(\n                    expect.objectContaining({\n                        color: 'red',\n                        fontFamily: 'Arial',\n                        fontSize: '14px',\n                        fontWeight: '509',\n                    }),\n                );\n            });\n\n            it('should handle blur event with valid value', () => {\n                pretendUserBlurs('John Doe');\n\n                expect(options.onFieldEventHandler?.onBlur).toHaveBeenCalledWith(\n                    HostedFieldTagId.CardName,\n                );\n                expect(options.onFieldEventHandler?.onValid).toHaveBeenCalledWith(\n                    HostedFieldTagId.CardName,\n                );\n                expect(getInputElement().style).toEqual(\n                    expect.objectContaining({\n                        color: 'green',\n                        fontFamily: 'Montserrat',\n                        fontSize: '13px',\n                        fontWeight: '508',\n                    }),\n                );\n            });\n\n            it('should handle enter event', () => {\n                pretendUserEnters();\n\n                expect(options.onFieldEventHandler?.onEnter).toHaveBeenCalledWith(\n                    HostedFieldTagId.CardName,\n                );\n            });\n        });\n\n        it('should set aria-label attribute', () => {\n            nameOnCardInput.attach(options, 'foo');\n\n            expect(getInputElement().getAttribute('aria-label')).toBe('foo');\n        });\n\n        it('should set placeholder attribute', () => {\n            nameOnCardInput.attach(options, 'foo', 'bar');\n\n            expect(getInputElement().placeholder).toBe('bar');\n        });\n\n        it('should mount it', () => {\n            const mountCardNameContainer = () => {\n                jest.spyOn(document, 'createElement').mockRestore();\n\n                const container = document.createElement('div');\n\n                jest.spyOn(document, 'createElement');\n\n                container.dataset.bluesnap = 'noc';\n\n                jest.spyOn(container, 'appendChild');\n\n                document.body.append(container);\n\n                return container;\n            };\n            const cardNameContainer = mountCardNameContainer();\n\n            nameOnCardInput.attach(options);\n\n            expect(cardNameContainer.appendChild).toHaveBeenCalledWith(getInputElement());\n        });\n    });\n\n    describe('getValue', () => {\n        it(\"should return it's value\", () => {\n            const pretendUserFillsCcName = () => {\n                getInputElement().value = 'John Doe';\n            };\n\n            nameOnCardInput.attach(options);\n            pretendUserFillsCcName();\n\n            expect(nameOnCardInput.getValue()).toBe('John Doe');\n        });\n\n        it('should fail if not attached yet', () => {\n            const getValue = () => nameOnCardInput.getValue();\n\n            expect(getValue).toThrow(NotInitializedError);\n        });\n    });\n\n    describe('detach', () => {\n        it('should detach it', () => {\n            nameOnCardInput.attach(options);\n            jest.spyOn(getInputElement(), 'remove');\n\n            nameOnCardInput.detach();\n\n            expect(getInputElement().remove).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/bluesnap-direct-name-on-card-input.ts",
    "content": "import {\n    guard,\n    NotInitializedError,\n    NotInitializedErrorType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    BluesnapDirectNocInputAllowedStyle as AllowedStyle,\n    BlueSnapDirectStyle,\n    BlueSnapDirectErrorCode as ErrorCode,\n    BlueSnapDirectErrorDescription as ErrorDescription,\n    BlueSnapDirectEventOrigin as EventOrigin,\n    BlueSnapDirectHostedFieldTagId as HostedFieldTagId,\n    BlueSnapDirectHostedPaymentFieldsOptions as HostedPaymentFieldsOptions,\n    BlueSnapDirectStyleDeclaration as StyleDeclaration,\n} from '../types';\nimport isArrayOfAllowedProps from '../utils/is-array-of-allowed-props';\n\nexport default class BluesnapDirectNameOnCardInput {\n    private _input?: HTMLInputElement;\n    private _style?: BlueSnapDirectStyle;\n\n    attach(\n        {\n            style,\n            onFieldEventHandler: { onFocus, onBlur, onValid, onError, onEnter } = {},\n        }: HostedPaymentFieldsOptions,\n        accessibilityLabel?: string,\n        placeholder?: string,\n    ): void {\n        this._style = style;\n\n        this._create();\n\n        this._getInput().addEventListener('focus', this._handleFocus(onFocus));\n        this._getInput().addEventListener('blur', this._handleBlur(onBlur, onValid, onError));\n        this._getInput().addEventListener('enter', this._handleEnter(onEnter));\n\n        if (accessibilityLabel) {\n            this._getInput().setAttribute('aria-label', accessibilityLabel);\n        }\n\n        if (placeholder) {\n            this._getInput().placeholder = placeholder;\n        }\n\n        document.querySelector('[data-bluesnap=\"noc\"]')?.appendChild(this._getInput());\n    }\n\n    getValue(): string {\n        return this._getInput().value;\n    }\n\n    detach(): void {\n        if (this._input) {\n            this._input.remove();\n            this._input = undefined;\n        }\n    }\n\n    private _handleFocus(\n        onFocus: Required<HostedPaymentFieldsOptions>['onFieldEventHandler']['onFocus'],\n    ): (event: Event) => void {\n        return () => {\n            this._applyStyles(this._style?.[':focus']);\n\n            onFocus?.(HostedFieldTagId.CardName);\n        };\n    }\n\n    private _handleBlur(\n        onBlur: Required<HostedPaymentFieldsOptions>['onFieldEventHandler']['onBlur'],\n        onValid: Required<HostedPaymentFieldsOptions>['onFieldEventHandler']['onValid'],\n        onError: Required<HostedPaymentFieldsOptions>['onFieldEventHandler']['onError'],\n    ): (event: Event) => void {\n        return ({ target }) => {\n            onBlur?.(HostedFieldTagId.CardName);\n\n            if (target instanceof HTMLInputElement) {\n                if (/\\w{1,200}/.test(target.value)) {\n                    this._applyStyles(this._style?.input);\n\n                    onValid?.(HostedFieldTagId.CardName);\n                } else {\n                    this._applyStyles(this._style?.['.invalid']);\n\n                    onError?.(\n                        HostedFieldTagId.CardName,\n                        ErrorCode.INVALID_OR_EMPTY,\n                        ErrorDescription.EMPTY,\n                        EventOrigin.ON_BLUR,\n                    );\n                }\n            }\n        };\n    }\n\n    private _handleEnter(\n        onEnter: Required<HostedPaymentFieldsOptions>['onFieldEventHandler']['onEnter'],\n    ): (event: Event) => void {\n        return () => onEnter?.(HostedFieldTagId.CardName);\n    }\n\n    private _applyStyles(styles: StyleDeclaration = {}): void {\n        const allowedStyle: AllowedStyle = {\n            color: styles.color,\n            fontFamily: styles['font-family'],\n            fontSize: styles['font-size'],\n            fontWeight: styles['font-weight'],\n        };\n        const styleKeys = Object.keys(allowedStyle);\n\n        if (isArrayOfAllowedProps(styleKeys)) {\n            styleKeys.forEach((key) => {\n                if (!allowedStyle[key]) {\n                    return;\n                }\n\n                this._getInput().style[key] = allowedStyle[key] || '';\n            });\n        }\n    }\n\n    private _configureInput(): void {\n        this._getInput().autocomplete = 'cc-name';\n        this._getInput().id = HostedFieldTagId.CardName;\n        this._getInput().inputMode = 'text';\n        this._getInput().maxLength = 200;\n        this._getInput().style.backgroundColor = 'transparent';\n        this._getInput().style.border = '0';\n        this._getInput().style.height = '100%';\n        this._getInput().style.margin = '0';\n        this._getInput().style.outline = 'none';\n        this._getInput().style.padding = '0';\n        this._getInput().style.width = '100%';\n        this._getInput().type = 'text';\n    }\n\n    private _getInput(): HTMLInputElement {\n        return guard(\n            this._input,\n            () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n        );\n    }\n\n    private _create(): void {\n        this._input = document.createElement('input');\n        this._configureInput();\n        this._applyStyles(this._style?.input);\n    }\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/bluesnap-direct-script-loader.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BlueSnapDirectHostWindow, BlueSnapDirectSdk } from '../types';\n\nimport BlueSnapDirectScriptLoader, { BlueSnapDirectSdkEnv } from './bluesnap-direct-script-loader';\n\ndescribe('BlueSnapDirectScriptLoader', () => {\n    let scriptLoader: ScriptLoader;\n    let bsWindow: BlueSnapDirectHostWindow;\n    let blueSnapDirectScriptLoader: BlueSnapDirectScriptLoader;\n    let blueSnapDirectSdkMock: BlueSnapDirectSdk;\n\n    beforeEach(() => {\n        scriptLoader = createScriptLoader();\n        bsWindow = window;\n        blueSnapDirectScriptLoader = new BlueSnapDirectScriptLoader(scriptLoader, bsWindow);\n        blueSnapDirectSdkMock = {} as BlueSnapDirectSdk;\n\n        jest.spyOn(scriptLoader, 'loadScript').mockImplementation(() => {\n            bsWindow.bluesnap = blueSnapDirectSdkMock;\n\n            return Promise.resolve();\n        });\n    });\n\n    afterEach(() => {\n        delete bsWindow.bluesnap;\n    });\n\n    describe('#load', () => {\n        it('should load the Hosted Payment Fields SDK successfully', async () => {\n            const sdk = await blueSnapDirectScriptLoader.load();\n\n            expect(sdk).toEqual(blueSnapDirectSdkMock);\n        });\n\n        it('should load the Hosted Payment Fields SDK for production', async () => {\n            await blueSnapDirectScriptLoader.load();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(BlueSnapDirectSdkEnv.PRODUCTION);\n        });\n\n        it('should load the Hosted Payment Fields SDK for sandbox', async () => {\n            await blueSnapDirectScriptLoader.load(true);\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(BlueSnapDirectSdkEnv.SANDBOX);\n        });\n\n        it('should skip to load SDK if SDK was previusly loaded', async () => {\n            bsWindow.bluesnap = blueSnapDirectSdkMock;\n            await blueSnapDirectScriptLoader.load();\n\n            expect(scriptLoader.loadScript).not.toHaveBeenCalled();\n        });\n\n        it('should fail to load the Hosted Payment Fields SDK', async () => {\n            jest.spyOn(scriptLoader, 'loadScript').mockImplementationOnce(() => {\n                delete bsWindow.bluesnap;\n\n                return Promise.resolve();\n            });\n\n            const sdkPromise = blueSnapDirectScriptLoader.load();\n\n            await expect(sdkPromise).rejects.toThrow(PaymentMethodClientUnavailableError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/bluesnap-direct-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BlueSnapDirectHostWindow, BlueSnapDirectSdk } from '../types';\n\nexport enum BlueSnapDirectSdkEnv {\n    PRODUCTION = 'https://pay.bluesnap.com/web-sdk/5/bluesnap.js',\n    SANDBOX = 'https://sandpay.bluesnap.com/web-sdk/5/bluesnap.js',\n}\n\nexport default class BlueSnapDirectScriptLoader {\n    constructor(\n        private _scriptLoader: ScriptLoader,\n        private _window: BlueSnapDirectHostWindow = window,\n    ) {}\n\n    async load(testMode = false): Promise<BlueSnapDirectSdk> {\n        if (this._window.bluesnap) {\n            return this._window.bluesnap;\n        }\n\n        await this._scriptLoader.loadScript(\n            testMode ? BlueSnapDirectSdkEnv.SANDBOX : BlueSnapDirectSdkEnv.PRODUCTION,\n        );\n\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (!this._window.bluesnap) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this._window.bluesnap;\n    }\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/create-bluesnap-direct-credit-card-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BlueSnapDirectCreditCardPaymentStrategy from './bluesnap-direct-credit-card-payment-strategy';\nimport createBlueSnapDirectCreditCardPaymentStrategy from './create-bluesnap-direct-credit-card-payment-strategy';\n\ndescribe('createBlueSnapDirectCreditCardPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates bluesnapdirect cc payment strategy', () => {\n        const strategy = createBlueSnapDirectCreditCardPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BlueSnapDirectCreditCardPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnap-direct-credit-card/create-bluesnap-direct-credit-card-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BlueSnapDirect3ds from './bluesnap-direct-3ds';\nimport BlueSnapDirectCreditCardPaymentStrategy from './bluesnap-direct-credit-card-payment-strategy';\nimport BlueSnapDirectHostedForm from './bluesnap-direct-hosted-form';\nimport BlueSnapHostedInputValidator from './bluesnap-direct-hosted-input-validator';\nimport BluesnapDirectNameOnCardInput from './bluesnap-direct-name-on-card-input';\nimport BlueSnapDirectScriptLoader from './bluesnap-direct-script-loader';\n\nconst createBlueSnapDirectCreditCardPaymentStrategy: PaymentStrategyFactory<\n    BlueSnapDirectCreditCardPaymentStrategy\n> = (paymentIntegrationService) =>\n    new BlueSnapDirectCreditCardPaymentStrategy(\n        new BlueSnapDirectScriptLoader(getScriptLoader()),\n        paymentIntegrationService,\n        new BlueSnapDirectHostedForm(\n            new BluesnapDirectNameOnCardInput(),\n            new BlueSnapHostedInputValidator(),\n        ),\n        new BlueSnapDirect3ds(),\n    );\n\nexport default toResolvableModule(createBlueSnapDirectCreditCardPaymentStrategy, [\n    { id: 'credit_card', gateway: 'bluesnapdirect' },\n]);\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnapv2/bluesnapv2-payment-options.ts",
    "content": "import { BlueSnapV2StyleProps } from './bluesnapv2';\n\n/**\n * A set of options that are required to initialize the BlueSnap V2 payment\n * method.\n *\n * The payment step is done through a web page via an iframe provided by the\n * strategy.\n *\n * ```html\n * <!-- This is where the BlueSnap iframe will be inserted. It can be an in-page container or a modal -->\n * <div id=\"container\"></div>\n *\n * <!-- This is a cancellation button -->\n * <button type=\"button\" id=\"cancel-button\"></button>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'bluesnapv2',\n *     bluesnapv2: {\n *         onLoad: (iframe) => {\n *             document.getElementById('container')\n *                 .appendChild(iframe);\n *\n *             document.getElementById('cancel-button')\n *                 .addEventListener('click', () => {\n *                     document.getElementById('container').innerHTML = '';\n *                 });\n *         },\n *     },\n * });\n * ```\n */\nexport interface BlueSnapV2PaymentInitializeOptions {\n    /**\n     * A set of CSS properties to apply to the iframe.\n     */\n    style?: BlueSnapV2StyleProps;\n\n    /**\n     * A callback that gets called when the iframe is ready to be added to the\n     * current page. It is responsible for determining where the iframe should\n     * be inserted in the DOM.\n     *\n     * @param iframe - The iframe element containing the payment web page\n     * provided by the strategy.\n     * @param cancel - A function, when called, will cancel the payment\n     * process and remove the iframe.\n     */\n    onLoad(iframe: HTMLIFrameElement, cancel: () => void): void;\n}\n\nexport interface WithBlueSnapV2PaymentInitializeOptions {\n    bluesnapv2?: BlueSnapV2PaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnapv2/bluesnapv2-payment-strategy.spec.ts",
    "content": "import { merge } from 'lodash';\n\nimport {\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentStatusTypes,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrder,\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { WithBlueSnapV2PaymentInitializeOptions } from './bluesnapv2-payment-options';\nimport BlueSnapV2PaymentStrategy from './bluesnapv2-payment-strategy';\n\ndescribe('BlueSnapV2PaymentStrategy', () => {\n    let strategy: BlueSnapV2PaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    let initializeOptions: PaymentInitializeOptions;\n    let options: PaymentInitializeOptions & WithBlueSnapV2PaymentInitializeOptions;\n    let payload: OrderRequestBody;\n    let orderRequestBody: OrderRequestBody;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        orderRequestBody = getOrderRequestBody();\n\n        initializeOptions = {\n            methodId: 'method',\n            bluesnapv2: {\n                onLoad: () => ({}),\n            },\n        };\n        payload = merge(getOrderRequestBody(), {\n            payment: {\n                methodId: 'method',\n                paymentData: null,\n            },\n        });\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'initializeOffsitePayment').mockImplementation(\n            jest.fn(),\n        );\n\n        options = {\n            methodId: 'method',\n            bluesnapv2: {\n                onLoad: jest.fn(),\n            },\n        };\n\n        strategy = new BlueSnapV2PaymentStrategy(paymentIntegrationService);\n    });\n\n    it('submits order with payment data', async () => {\n        await strategy.initialize(initializeOptions);\n        await strategy.execute(payload, options);\n\n        expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(payload, options);\n    });\n\n    it('initializes offsite payment flow', async () => {\n        const myOptions = {\n            methodId: 'method',\n            bluesnapv2: {\n                onLoad: jest.fn(),\n            },\n        };\n\n        await strategy.initialize(initializeOptions);\n        await strategy.execute(payload, myOptions);\n\n        expect(paymentIntegrationService.initializeOffsitePayment).toHaveBeenCalledWith({\n            methodId: 'method',\n            gatewayId: options.gatewayId,\n            shouldSaveInstrument: false,\n            target: 'bluesnapv2_hosted_payment_page',\n            promise: expect.any(Promise),\n        });\n    });\n\n    it('finalizes order if order is created and payment is acknowledged', async () => {\n        const order = getOrder();\n        const status = PaymentStatusTypes.ACKNOWLEDGE;\n\n        jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n            ...paymentIntegrationService.getState(),\n            getOrder: () => order,\n            getPaymentStatus: () => status,\n        });\n\n        await strategy.initialize(options);\n        await strategy.execute(orderRequestBody, options);\n\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n\n        await strategy.finalize(options);\n\n        expect(paymentIntegrationService.finalizeOrder).toHaveBeenCalledWith(options);\n    });\n\n    it('finalizes order if order is created and payment is finalized', async () => {\n        const order = getOrder();\n\n        jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n            ...paymentIntegrationService.getState(),\n            getOrder: () => order,\n            getPaymentStatus: () => PaymentStatusTypes.FINALIZE,\n        });\n\n        await strategy.finalize(options);\n\n        expect(paymentIntegrationService.finalizeOrder).toHaveBeenCalledWith(options);\n    });\n\n    it('does not finalize order if order is not created', async () => {\n        jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n            ...paymentIntegrationService.getState(),\n            getOrder: () => undefined,\n            getPaymentStatus: () => 'INCOMPLETE',\n        });\n\n        await strategy.initialize(initializeOptions);\n\n        await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n    });\n\n    it('does not finalize order if order is not finalized or acknowledged', async () => {\n        const order = getOrder();\n\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockResolvedValue({\n            ...paymentIntegrationService.finalizeOrder(),\n            getOrder: () => order,\n            getPaymentStatus: () => 'INITIALIZE',\n        });\n\n        await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n    });\n\n    it('throws error if unable to finalize due to missing data', async () => {\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockResolvedValue({\n            ...paymentIntegrationService.finalizeOrder(),\n            getOrder: () => undefined,\n        });\n\n        await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n    });\n\n    it('returns checkout state', async () => {\n        await strategy.initialize(initializeOptions);\n\n        const output = await strategy.execute(getOrderRequestBody());\n\n        await expect(strategy.execute(payload, options)).resolves.toEqual(output);\n    });\n\n    it('throws error is unable to execute due to invalid payment', async () => {\n        await strategy.initialize(initializeOptions);\n        payload.payment = undefined;\n\n        await expect(strategy.execute(payload)).rejects.toBeInstanceOf(PaymentArgumentInvalidError);\n    });\n\n    it('throws error is unable to execute due to _initializeOptions un set', async () => {\n        await strategy.initialize();\n\n        await expect(strategy.execute(payload)).rejects.toBeInstanceOf(NotInitializedError);\n    });\n\n    it('deinitialize payment strategy', async () => {\n        await strategy.initialize(initializeOptions);\n\n        const deinitialize = strategy.deinitialize();\n\n        await expect(deinitialize).resolves.toBeUndefined();\n    });\n\n    it('create iframe with styleprops', () => {\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        // eslint-disable-next-line no-underscore-dangle\n        const _iframe: HTMLIFrameElement = strategy._createIframe.call(\n            '',\n            'bluesnapv2_hosted_payment_page',\n            { border: '1px solid gray', height: '40vh', width: '100%', padding: '3px' },\n        );\n\n        expect(_iframe).toHaveProperty('style');\n        expect(_iframe.name).toBe('bluesnapv2_hosted_payment_page');\n        expect(_iframe.style.height).toBe('40vh');\n        expect(_iframe.style.border).toBe('1px solid gray');\n        expect(_iframe.style.width).toBe('100%');\n        // eslint-disable-next-line jest/no-restricted-matchers\n        expect(_iframe.style.padding).toBeFalsy();\n    });\n\n    it('execute with styleprops', async () => {\n        initializeOptions = merge(initializeOptions, {\n            bluesnapv2: {\n                style: {\n                    border: '1px solid gray',\n                    height: '40vh',\n                    width: '100%',\n                },\n            },\n        });\n        await strategy.initialize(initializeOptions);\n\n        const iframeCreator = jest.spyOn(\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            BlueSnapV2PaymentStrategy.prototype as any,\n            '_createIframe',\n        );\n\n        await strategy.execute(payload, options);\n\n        expect(iframeCreator).toHaveBeenCalledWith('bluesnapv2_hosted_payment_page', {\n            border: '1px solid gray',\n            height: '40vh',\n            width: '100%',\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnapv2/bluesnapv2-payment-strategy.ts",
    "content": "import { noop } from 'lodash';\n\nimport {\n    CancellablePromise,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentRequestOptions,\n    PaymentStatusTypes,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BlueSnapV2StyleProps } from './bluesnapv2';\nimport {\n    BlueSnapV2PaymentInitializeOptions,\n    WithBlueSnapV2PaymentInitializeOptions,\n} from './bluesnapv2-payment-options';\n\nconst IFRAME_NAME = 'bluesnapv2_hosted_payment_page';\n\nexport default class BlueSnapV2PaymentStrategy implements PaymentStrategy {\n    private _initializeOptions?: BlueSnapV2PaymentInitializeOptions;\n\n    constructor(private _paymentIntegrationService: PaymentIntegrationService) {}\n\n    async execute(\n        orderRequest: OrderRequestBody,\n        options?: PaymentInitializeOptions & WithBlueSnapV2PaymentInitializeOptions,\n    ): Promise<void> {\n        const { payment } = orderRequest;\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        if (!this._initializeOptions) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const { onLoad, style } = this._initializeOptions;\n        const frame = this._createIframe(IFRAME_NAME, style);\n        const promise = new CancellablePromise<undefined>(new Promise(noop));\n\n        onLoad(frame, () => promise.cancel(new PaymentMethodCancelledError()));\n\n        await this._paymentIntegrationService.submitOrder(orderRequest, options);\n\n        await this._paymentIntegrationService.initializeOffsitePayment({\n            methodId: payment.methodId,\n            gatewayId: payment.gatewayId,\n            shouldSaveInstrument: false,\n            target: frame.name,\n            promise: promise.promise,\n        });\n    }\n\n    async finalize(options?: PaymentRequestOptions): Promise<void> {\n        const state = this._paymentIntegrationService.getState();\n        const order = state.getOrder();\n        const status = state.getPaymentStatus();\n\n        if (\n            order &&\n            (status === PaymentStatusTypes.ACKNOWLEDGE || status === PaymentStatusTypes.FINALIZE)\n        ) {\n            await this._paymentIntegrationService.finalizeOrder(options);\n\n            return;\n        }\n\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    async initialize(\n        options?: PaymentInitializeOptions & WithBlueSnapV2PaymentInitializeOptions,\n    ): Promise<void> {\n        this._initializeOptions = options && options.bluesnapv2;\n\n        await Promise.resolve();\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private _createIframe(name: string, style?: BlueSnapV2StyleProps): HTMLIFrameElement {\n        const iframe = document.createElement('iframe');\n\n        iframe.setAttribute(\n            'sandbox',\n            'allow-top-navigation allow-scripts allow-forms allow-same-origin',\n        );\n\n        iframe.name = name;\n\n        if (style) {\n            const { border, height, width } = style;\n\n            iframe.style.border = border ?? '';\n            iframe.style.height = height ?? '';\n            iframe.style.width = width ?? '';\n        }\n\n        return iframe;\n    }\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnapv2/bluesnapv2.ts",
    "content": "export interface BlueSnapV2StyleProps {\n    border?: string;\n    height?: string;\n    width?: string;\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnapv2/create-bluesnapv2-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BlueSnapV2PaymentStrategy from './bluesnapv2-payment-strategy';\nimport createBluesnapv2PaymentStrategy from './create-bluesnapv2-payment-strategy';\n\ndescribe('createBlueSnapV2PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates bluesnapv2 payment strategy', () => {\n        const strategy = createBluesnapv2PaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BlueSnapV2PaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/bluesnapv2/create-bluesnapv2-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BlueSnapV2PaymentStrategy from './bluesnapv2-payment-strategy';\n\nconst createBluesnapV2PaymentStrategy: PaymentStrategyFactory<BlueSnapV2PaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new BlueSnapV2PaymentStrategy(paymentIntegrationService);\n};\n\nexport default toResolvableModule(createBluesnapV2PaymentStrategy, [{ gateway: 'bluesnapv2' }]);\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/index.ts",
    "content": "export { default as createBlueSnapDirectCreditCardPaymentStrategy } from './bluesnap-direct-credit-card/create-bluesnap-direct-credit-card-payment-strategy';\nexport { default as createBlueSnapDirectAPMPaymentStrategy } from './bluesnap-direct-apm/create-bluesnap-direct-apm-payment-strategy';\nexport { default as createBlueSnapV2PaymentStrategy } from './bluesnapv2/create-bluesnapv2-payment-strategy';\n\nexport {\n    BlueSnapDirectAPMInitializeOptions,\n    WithBlueSnapDirectAPMPaymentInitializeOptions,\n} from './types';\n\nexport { WithBlueSnapV2PaymentInitializeOptions } from './bluesnapv2/bluesnapv2-payment-options';\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/mocks/bluesnap-direct-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getBlueSnapDirect(): PaymentMethod {\n    return {\n        clientToken: 'pfToken',\n        config: {\n            cardCode: true,\n            displayName: 'Credit Card',\n            isHostedFormEnabled: true,\n            testMode: true,\n        },\n        gateway: 'bluesnapdirect',\n        id: 'credit_card',\n        method: 'credit_card',\n        supportedCards: ['AMEX', 'CUP', 'DINERS', 'DISCOVER', 'JCB', 'MC', 'VISA'],\n        type: 'PAYMENT_TYPE_API',\n    };\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/mocks/bluesnap-direct-sdk.mock.ts",
    "content": "import {\n    BlueSnapDirect3dsCallbackResponse,\n    BlueSnapDirectCallbackResults,\n    BlueSnapDirectHostedPaymentFieldsOptions,\n} from '../types';\n\nconst data = {\n    cardData: {\n        binCategory: 'CONSUMER',\n        cardCategory: 'foo',\n        cardSubType: 'CREDIT',\n        ccBin: '411111',\n        ccType: 'VISA',\n        exp: '12/2023',\n        isRegulatedCard: 'Y',\n        issuingCountry: 'us',\n        last4Digits: '1111',\n    },\n    statusCode: '1',\n    transactionFraudInfo: {\n        fraudSessionId: 'qwerty123',\n    },\n};\n\nexport const previouslyUsedCardDataMock = {\n    last4Digits: '1111',\n    ccType: 'visa',\n    amount: 10,\n    currency: 'USD',\n    billingFirstName: 'string',\n    billingLastName: 'string',\n    billingCountry: 'string',\n    billingState: 'string',\n    billingCity: 'string',\n    billingAddress: 'string',\n    billingZip: 'string',\n    email: 'string',\n    phone: '11111111111',\n};\n\nexport const threeDSdata = {\n    code: '1',\n    cardData: data.cardData,\n    threeDSecure: {\n        authResult: 'string',\n        threeDSecureReferenceId: '1111',\n    },\n};\n\nconst errors = {\n    '0': {\n        error: [\n            {\n                errorCode: '0',\n                errorDescription: 'unknown',\n                eventType: 'Server Error',\n                tagId: 'cvv',\n            },\n        ],\n        statusCode: '0',\n        transactionFraudInfo: {\n            fraudSessionId: 'qwerty123',\n        },\n    },\n    '14101': {\n        error: [\n            {\n                errorCode: '14101',\n                errorDescription: '3D Secure authentication failed',\n                eventType: 'Server Error',\n                tagId: 'ccn',\n            },\n        ],\n        statusCode: '14101',\n        transactionFraudInfo: {\n            fraudSessionId: 'qwerty123',\n        },\n    },\n};\n\nexport default function getBlueSnapDirectSdkMock(errorCode?: keyof typeof errors) {\n    return {\n        sdk: {\n            hostedPaymentFieldsCreate: jest.fn(\n                (options: BlueSnapDirectHostedPaymentFieldsOptions) => {\n                    options.onFieldEventHandler?.setupComplete?.();\n                },\n            ),\n            hostedPaymentFieldsSubmitData: jest.fn(\n                (callback: (results: BlueSnapDirectCallbackResults) => void) =>\n                    callback(errorCode ? errors[errorCode] : data),\n            ),\n            threeDsPaymentsSetup: jest.fn(\n                (\n                    _token: string,\n                    callback: (results: BlueSnapDirect3dsCallbackResponse) => void,\n                ) => {\n                    return setTimeout(\n                        () => callback(errorCode ? { ...threeDSdata, code: '0' } : threeDSdata),\n                        0,\n                    );\n                },\n            ),\n            threeDsPaymentsSubmitData: jest.fn(),\n        },\n        callbackResults: errorCode ? errors[errorCode].error : data.cardData,\n    };\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/mocks/credit-card-payment-initialize-options.mock.ts",
    "content": "import { HostedFieldType } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function getBlueSnapPaymentInitializeOptionsMocks() {\n    const ccCvvContainerId = 'ccCvv';\n    const ccExpiryContainerId = 'ccExpiry';\n    const ccNumberContainerId = 'ccNumber';\n    const ccNameContainerId = 'ccName';\n    const style = {\n        color: 'rgb (51, 51, 51)',\n        fontFamily: 'Montserrat, Arial, Helvetica, sans-serif',\n        fontSize: '13px',\n        fontWeight: '508',\n    };\n\n    return {\n        ccCvvContainerId,\n        ccExpiryContainerId,\n        ccNumberContainerId,\n        ccNameContainerId,\n        ccOptions: {\n            form: {\n                fields: {\n                    [HostedFieldType.CardCode]: {\n                        containerId: ccCvvContainerId,\n                    },\n                    [HostedFieldType.CardExpiry]: {\n                        containerId: ccExpiryContainerId,\n                    },\n                    [HostedFieldType.CardName]: {\n                        containerId: ccNameContainerId,\n                    },\n                    [HostedFieldType.CardNumber]: {\n                        containerId: ccNumberContainerId,\n                    },\n                },\n                styles: {\n                    default: style,\n                    error: style,\n                    focus: style,\n                },\n                onBlur: jest.fn(),\n                onCardTypeChange: jest.fn(),\n                onEnter: jest.fn(),\n                onFocus: jest.fn(),\n                onValidate: jest.fn(),\n            },\n        },\n    };\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/types.ts",
    "content": "export type BluesnapDirectNocInputAllowedStyle = Pick<\n    CSSStyleDeclaration,\n    'color' | 'fontFamily' | 'fontSize' | 'fontWeight'\n>;\n\nexport interface BlueSnapDirectStyleDeclaration {\n    [k: string]: string;\n}\n\nexport interface BlueSnapDirectStyle {\n    '.invalid'?: BlueSnapDirectStyleDeclaration;\n    ':focus'?: BlueSnapDirectStyleDeclaration;\n    input?: BlueSnapDirectStyleDeclaration;\n}\n\nexport enum BlueSnapDirectCardType {\n    AMEX = 'american-express',\n    CHINA_UNION_PAY = 'unionpay',\n    DINERS = 'diners-club',\n    DISCOVER = 'discover',\n    JCB = 'jcb',\n    MASTERCARD = 'mastercard',\n    UNKNOWN = 'unknown',\n    VISA = 'visa',\n}\n\nexport type BlueSnapDirectCardTypeValues = keyof typeof BlueSnapDirectCardType;\n\nexport enum BlueSnapDirectEventOrigin {\n    ON_BLUR = 'onBlur',\n    ON_SUBMIT = 'onSubmit',\n}\n\nexport enum BlueSnapDirectErrorDescription {\n    EMPTY = 'empty',\n    INVALID = 'invalid',\n    THREE_DS_NOT_ENABLED = '3D Secure is not enabled',\n}\n\nexport type BlueSnapDirectInputValidationErrorDescription = Extract<\n    BlueSnapDirectErrorDescription,\n    BlueSnapDirectErrorDescription.EMPTY | BlueSnapDirectErrorDescription.INVALID\n>;\n\nexport enum BlueSnapDirectErrorCode {\n    CC_NOT_SUPORTED = '22013',\n    ERROR_403 = '403',\n    ERROR_404 = '404',\n    ERROR_500 = '500',\n    INVALID_OR_EMPTY = '10',\n    SESSION_EXPIRED = '400',\n    THREE_DS_AUTH_FAILED = '14101',\n    THREE_DS_CLIENT_ERROR = '14103',\n    THREE_DS_MISSING_FIELDS = '14102',\n    THREE_DS_NOT_ENABLED = '14100',\n    TOKEN_EXPIRED = '14040',\n    TOKEN_NOT_ASSOCIATED = '14042',\n    TOKEN_NOT_FOUND = '14041',\n}\n\nexport enum BlueSnapDirectHostedFieldTagId {\n    CardCode = 'cvv',\n    CardExpiry = 'exp',\n    CardName = 'noc',\n    CardNumber = 'ccn',\n}\n\nexport interface BlueSnapDirectHostedPaymentFieldsOptions {\n    token: string;\n    onFieldEventHandler?: {\n        setupComplete?: () => void;\n        threeDsChallengeExecuted?: () => void;\n        onFocus?: (tagId: BlueSnapDirectHostedFieldTagId) => void;\n        onBlur?: (tagId: BlueSnapDirectHostedFieldTagId) => void;\n        onError?: (\n            tagId: BlueSnapDirectHostedFieldTagId | undefined,\n            errorCode: BlueSnapDirectErrorCode,\n            errorDescription: BlueSnapDirectErrorDescription | undefined,\n            eventOrigin: BlueSnapDirectEventOrigin | undefined,\n        ) => void;\n        onType?: (\n            tagId: BlueSnapDirectHostedFieldTagId,\n            cardType: BlueSnapDirectCardTypeValues,\n            cardData: BlueSnapDirectCardData | undefined,\n        ) => void;\n        onEnter?: (tagId: BlueSnapDirectHostedFieldTagId) => void;\n        onValid?: (tagId: BlueSnapDirectHostedFieldTagId) => void;\n    };\n    ccnPlaceHolder?: string;\n    cvvPlaceHolder?: string;\n    expPlaceHolder?: string;\n    style?: BlueSnapDirectStyle;\n    '3DS'?: boolean;\n}\n\ninterface BlueSnapDirectCallback {\n    statusCode: string;\n    transactionFraudInfo: {\n        fraudSessionId: string;\n    };\n}\n\ninterface BlueSnapDirectCardData {\n    binCategory: string;\n    cardSubType: string;\n    ccBin: string;\n    ccType: string;\n    isRegulatedCard: string;\n    issuingCountry: string;\n    last4Digits: string;\n}\n\nexport interface BlueSnapDirectCallbackCardData extends BlueSnapDirectCardData {\n    cardCategory: string;\n    exp: string;\n}\n\ninterface BlueSnapDirectCallbackData extends BlueSnapDirectCallback {\n    cardData: BlueSnapDirectCallbackCardData;\n}\n\nexport interface WithBlueSnapDirectCardHolderName {\n    cardHolderName?: string;\n}\n\ninterface BlueSnapDirectSubmitError {\n    errorCode: string;\n    errorDescription: string;\n    eventType: string;\n    tagId: string;\n}\n\nexport interface BlueSnapDirectCallbackError extends BlueSnapDirectCallback {\n    error: BlueSnapDirectSubmitError[];\n}\n\nexport type BlueSnapDirectCallbackResults =\n    | BlueSnapDirectCallbackData\n    | BlueSnapDirectCallbackError;\n\nexport interface BlueSnapDirectThreeDSecureData {\n    amount: number;\n    currency: string;\n    billingFirstName?: string;\n    billingLastName?: string;\n    billingCountry?: string;\n    billingState?: string;\n    billingCity?: string;\n    billingAddress?: string;\n    billingZip?: string;\n    shippingFirstName?: string;\n    shippingLastName?: string;\n    shippingCountry?: string;\n    shippingState?: string;\n    shippingCity?: string;\n    shippingAddress?: string;\n    shippingZip?: string;\n    email?: string;\n    phone?: string;\n}\n\nexport interface BlueSnapDirectSdk {\n    hostedPaymentFieldsCreate(options: BlueSnapDirectHostedPaymentFieldsOptions): void;\n    hostedPaymentFieldsSubmitData(\n        callback: (results: BlueSnapDirectCallbackResults) => void,\n        threeDSecureData?: BlueSnapDirectThreeDSecureData,\n    ): void;\n    threeDsPaymentsSetup(\n        token: string,\n        callback: (reponse: BlueSnapDirect3dsCallbackResponse) => void,\n    ): void;\n    threeDsPaymentsSubmitData(cardData: BlueSnapDirectPreviouslyUsedCard): void;\n}\n\nexport interface BlueSnapDirectPreviouslyUsedCard {\n    last4Digits?: string;\n    ccType?: string;\n    amount: number;\n    currency: string;\n    billingFirstName?: string;\n    billingLastName?: string;\n    billingCountry?: string;\n    billingState?: string;\n    billingCity?: string;\n    billingAddress?: string;\n    billingZip?: string;\n    shippingFirstName?: string;\n    shippingLastName?: string;\n    shippingCountry?: string;\n    shippingState?: string;\n    shippingCity?: string;\n    shippingAddress?: string;\n    shippingZip?: string;\n    email?: string;\n    phone?: string;\n}\n\nexport interface BlueSnapDirect3dsCallbackResponse {\n    code: string;\n    cardData: BlueSnapDirectCallbackCardData;\n    threeDSecure: {\n        authResult: string;\n        threeDSecureReferenceId: string;\n    };\n}\n\nexport interface BlueSnapDirectHostWindow extends Window {\n    bluesnap?: BlueSnapDirectSdk;\n}\n\nexport interface BlueSnapDirectStyleProps {\n    border?: string;\n    height?: string;\n    width?: string;\n}\n\nexport interface BlueSnapDirectRedirectResponseProviderData {\n    [key: string]: string;\n    merchantid: string;\n}\n\nexport interface BlueSnapDirectRedirectResponse {\n    body: {\n        additional_action_required: {\n            type: 'offsite_redirect';\n            data: {\n                redirect_url: string;\n            };\n        };\n        status: string;\n        provider_data?: string;\n    };\n}\n\n/**\n * A set of options that are required to initialize the BlueSnap V2 payment\n * method.\n *\n * The payment step is done through a web page via an iframe provided by the\n * strategy.\n *\n * ```html\n * <!-- This is where the BlueSnap iframe will be inserted. It can be an in-page container or a modal -->\n * <div id=\"container\"></div>\n *\n * <!-- This is a cancellation button -->\n * <button type=\"button\" id=\"cancel-button\"></button>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'bluesnapDirect',\n *     bluesnapDirect: {\n *         onLoad: (iframe) => {\n *             document.getElementById('container')\n *                 .appendChild(iframe);\n *\n *             document.getElementById('cancel-button')\n *                 .addEventListener('click', () => {\n *                     document.getElementById('container').innerHTML = '';\n *                 });\n *         },\n *     },\n * });\n * ```\n */\nexport interface BlueSnapDirectAPMInitializeOptions {\n    /**\n     * A set of CSS properties to apply to the iframe.\n     */\n    style?: BlueSnapDirectStyleProps;\n\n    /**\n     * A callback that gets called when the iframe is ready to be added to the\n     * current page. It is responsible for determining where the iframe should\n     * be inserted in the DOM.\n     *\n     * @param iframe - The iframe element containing the payment web page\n     * provided by the strategy.\n     * @param cancel - A function, when called, will cancel the payment\n     * process and remove the iframe.\n     */\n    onLoad(iframe: HTMLIFrameElement, cancel: () => void): void;\n}\n\nexport interface WithBlueSnapDirectAPMPaymentInitializeOptions {\n    /**\n     * The options that are required to initialize the Apple Pay payment\n     * method. They can be omitted unless you need to support Apple Pay.\n     */\n    bluesnapdirect?: BlueSnapDirectAPMInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/utils/is-array-of-allowed-props.ts",
    "content": "import { BluesnapDirectNocInputAllowedStyle } from '../types';\n\nexport default function isArrayOfAllowedProps(\n    fields: string[],\n): fields is Array<keyof BluesnapDirectNocInputAllowedStyle> {\n    return fields.every((field) =>\n        ['color', 'fontFamily', 'fontSize', 'fontWeight'].includes(field),\n    );\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/utils/is-bluesnap-direct-input-validation-error-description.ts",
    "content": "import {\n    BlueSnapDirectErrorDescription,\n    BlueSnapDirectInputValidationErrorDescription,\n} from '../types';\n\nexport default function isBlueSnapDirectInputValidationErrorDescription(\n    errorDescription?: BlueSnapDirectErrorDescription,\n): errorDescription is BlueSnapDirectInputValidationErrorDescription {\n    if (errorDescription === undefined) {\n        return false;\n    }\n\n    return [BlueSnapDirectErrorDescription.EMPTY, BlueSnapDirectErrorDescription.INVALID].includes(\n        errorDescription,\n    );\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/utils/is-bluesnap-direct-instrument.ts",
    "content": "import {\n    WithEcpInstrument,\n    WithIdealInstrument,\n    WithPayByBankInstrument,\n    WithSepaInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function isEcpInstrument(data: unknown): data is WithEcpInstrument {\n    return Boolean(\n        typeof data === 'object' &&\n            data !== null &&\n            'accountNumber' in data &&\n            'accountType' in data &&\n            'shopperPermission' in data &&\n            'routingNumber' in data,\n    );\n}\n\nexport function isIdealInstrument(paymentData: unknown): paymentData is WithIdealInstrument {\n    return Boolean(typeof paymentData === 'object' && paymentData !== null && 'bic' in paymentData);\n}\n\nexport function isSepaInstrument(paymentData: unknown): paymentData is WithSepaInstrument {\n    return Boolean(\n        typeof paymentData === 'object' &&\n            paymentData !== null &&\n            'iban' in paymentData &&\n            'firstName' in paymentData &&\n            'lastName' in paymentData &&\n            'shopperPermission' in paymentData,\n    );\n}\n\nexport function isPayByBankInstrument(\n    paymentData: unknown,\n): paymentData is WithPayByBankInstrument {\n    return Boolean(\n        typeof paymentData === 'object' &&\n            paymentData !== null &&\n            'iban' in paymentData &&\n            !('firstName' in paymentData) &&\n            !('lastName' in paymentData) &&\n            !('shopperPermission' in paymentData),\n    );\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/utils/is-bluesnap-direct-provider-data.ts",
    "content": "import { BlueSnapDirectRedirectResponseProviderData } from '../types';\n\nexport default function isBlueSnapDirectRedirectResponseProviderData(\n    value: unknown,\n): value is BlueSnapDirectRedirectResponseProviderData {\n    if (typeof value !== 'object' || value === null) {\n        return false;\n    }\n\n    const partialValue: Partial<BlueSnapDirectRedirectResponseProviderData> = value;\n\n    if (!partialValue.merchantid) {\n        return false;\n    }\n\n    return typeof partialValue.merchantid === 'string';\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/utils/is-hosted-card-field-options-map.ts",
    "content": "import {\n    HostedCardFieldOptionsMap,\n    HostedFieldOptionsMap,\n    HostedFieldType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function isHostedCardFieldOptionsMap(\n    fields: HostedFieldOptionsMap,\n): fields is HostedCardFieldOptionsMap {\n    return HostedFieldType.CardNumber in fields;\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/src/utils/is-hosted-stored-card-field-options-map.ts",
    "content": "import {\n    HostedFieldOptionsMap,\n    HostedFieldType,\n    HostedStoredCardFieldOptionsMap,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function isHostedStoredCardFieldOptionsMap(\n    fields: HostedFieldOptionsMap,\n): fields is HostedStoredCardFieldOptionsMap {\n    return (\n        HostedFieldType.CardCodeVerification in fields ||\n        HostedFieldType.CardNumberVerification in fields\n    );\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}"
  },
  {
    "path": "packages/bluesnap-direct-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/bluesnap-direct-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/bolt-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\", \"*.spec.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/no-non-null-assertion\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/bolt-integration/README.md",
    "content": "# bolt-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test bolt-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint bolt-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/bolt-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'bolt-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/bolt-integration',\n};\n"
  },
  {
    "path": "packages/bolt-integration/project.json",
    "content": "{\n    \"name\": \"bolt-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/bolt-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/bolt-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/bolt-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/bolt-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-button-initialize-options.ts",
    "content": "import { BoltButtonStyleOptions, BoltBuyNowInitializeOptions } from './bolt';\n\nexport default interface BoltButtonInitializeOptions {\n    /**\n     * The options that are required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: BoltBuyNowInitializeOptions;\n\n    style?: BoltButtonStyleOptions;\n}\n\nexport interface WithBoltButtonInitializeOptions {\n    /**\n     * The options that are required to initialize the Bolt payment\n     * method. They can be omitted unless you need to support Bolt.\n     */\n    bolt?: BoltButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-button-strategy.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    NotImplementedError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { BoltCheckout, BoltHostWindow, StyleButtonShape, StyleButtonSize } from './bolt';\nimport BoltButtonInitializeOptions from './bolt-button-initialize-options';\nimport BoltButtonStrategy from './bolt-button-strategy';\nimport BoltScriptLoader from './bolt-script-loader';\nimport { getBolt, getBoltClientScriptMock } from './bolt.mock';\n\ndescribe('BoltButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let scriptLoader: ScriptLoader;\n    let paymentMethod: PaymentMethod;\n    let boltScriptLoader: BoltScriptLoader;\n    let boltButtonElement: HTMLDivElement;\n    let boltClient: BoltCheckout;\n    let strategy: BoltButtonStrategy;\n\n    const defaultMethodId = 'bolt';\n    const defaultButtonContainerId = 'button-button-mock-id';\n    const boltOptions: BoltButtonInitializeOptions = {\n        buyNowInitializeOptions: {\n            storefrontApiToken: 'storefrontApiToken',\n            getBuyNowCartRequestBody: jest.fn(),\n        },\n        style: {\n            size: StyleButtonSize.Medium,\n            shape: StyleButtonShape.Rect,\n        },\n    };\n    const initializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        bolt: boltOptions,\n    };\n\n    beforeEach(() => {\n        boltButtonElement = document.createElement('div');\n        boltButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(boltButtonElement);\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        scriptLoader = createScriptLoader();\n        boltScriptLoader = new BoltScriptLoader(scriptLoader);\n        boltClient = getBoltClientScriptMock(true);\n        paymentMethod = getBolt();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(boltScriptLoader, 'loadBoltClient').mockResolvedValue(boltClient);\n\n        strategy = new BoltButtonStrategy(paymentIntegrationService, boltScriptLoader);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BoltHostWindow).BoltConnect;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(boltButtonElement);\n        }\n    });\n\n    it('creates an instance of the Bolt checkout button strategy', () => {\n        expect(strategy).toBeInstanceOf(BoltButtonStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n            } as CheckoutButtonInitializeOptions;\n\n            await expect(strategy.initialize(options)).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('throws an error if containerId is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            await expect(strategy.initialize(options)).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('throws an error if it is not buy now flow', async () => {\n            const options = {\n                ...initializationOptions,\n                bolt: {},\n            };\n\n            await expect(strategy.initialize(options)).rejects.toThrow(NotImplementedError);\n        });\n\n        it('throws an error if storefrontApiToken is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n                methodId: defaultMethodId,\n                bolt: {\n                    buyNowInitializeOptions: {},\n                },\n            } as CheckoutButtonInitializeOptions;\n\n            await expect(strategy.initialize(options)).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('throws an error if bolt is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n                methodId: defaultMethodId,\n                storefrontApiToken: '123',\n            } as CheckoutButtonInitializeOptions;\n\n            await expect(strategy.initialize(options)).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('loads bolt client script', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(boltScriptLoader.loadBoltClient).toHaveBeenCalledWith(\n                'publishableKey',\n                true,\n                undefined,\n                'BigCommerce',\n                'storefrontApiToken',\n            );\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('skip button render if BoltConnect do not exist', async () => {\n            (window as BoltHostWindow).BoltConnect = undefined;\n\n            await strategy.initialize(initializationOptions);\n\n            expect(document.getElementById('product-page-checkout-wrapper')).toBeNull();\n        });\n\n        it('skip button render if setupProductPageCheckout do not exist', async () => {\n            (window as BoltHostWindow).BoltConnect = {};\n\n            await strategy.initialize(initializationOptions);\n\n            expect(document.getElementById('product-page-checkout-wrapper')).toBeNull();\n        });\n\n        it('render default bolt smart payment button', async () => {\n            (window as BoltHostWindow).BoltConnect = {\n                setupProductPageCheckout: jest.fn(),\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            const objectElement = document.getElementsByClassName(\n                'bolt-product-checkout-button',\n            )[0];\n            const objectData = objectElement.getAttribute('data');\n\n            expect(objectElement).not.toBeNull();\n            expect(objectData).toContain('publishable_key=publishableKey');\n            expect(objectData).toContain('variant=ppc');\n            expect(objectData).toContain('height=40');\n            expect(objectData).toContain('border_radius=4');\n        });\n\n        it('render small bolt smart payment button with shape pill', async () => {\n            (window as BoltHostWindow).BoltConnect = {\n                setupProductPageCheckout: jest.fn(),\n            };\n\n            boltOptions.style = {\n                size: StyleButtonSize.Small,\n                shape: StyleButtonShape.Pill,\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            const objectElement = document.getElementsByClassName(\n                'bolt-product-checkout-button',\n            )[0];\n            const objectData = objectElement.getAttribute('data');\n\n            expect(objectData).toContain('height=25');\n            expect(objectData).toContain('border_radius=13');\n        });\n\n        it('render large bolt smart payment button', async () => {\n            (window as BoltHostWindow).BoltConnect = {\n                setupProductPageCheckout: jest.fn(),\n            };\n\n            boltOptions.style = {\n                size: StyleButtonSize.Large,\n                shape: StyleButtonShape.Rect,\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            const objectElement = document.getElementsByClassName(\n                'bolt-product-checkout-button',\n            )[0];\n            const objectData = objectElement.getAttribute('data');\n\n            expect(objectData).toContain('height=45');\n            expect(objectData).toContain('border_radius=4');\n        });\n\n        it('render bolt smart payment button without styles', async () => {\n            (window as BoltHostWindow).BoltConnect = {\n                setupProductPageCheckout: jest.fn(),\n            };\n\n            boltOptions.style = undefined;\n\n            await strategy.initialize(initializationOptions);\n\n            const objectElement = document.getElementsByClassName(\n                'bolt-product-checkout-button',\n            )[0];\n            const objectData = objectElement.getAttribute('data');\n\n            expect(objectData).not.toContain('height');\n            expect(objectData).not.toContain('border_radius');\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-button-strategy.ts",
    "content": "import { stringifyUrl } from 'query-string';\n\nimport {\n    CheckoutButtonInitializeOptions,\n    CheckoutButtonStrategy,\n    InvalidArgumentError,\n    NotImplementedError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    BoltButtonStyleOptions,\n    BoltHostWindow,\n    BoltPaymentMethod,\n    StyleButtonShape,\n    StyleButtonSize,\n} from './bolt';\nimport { WithBoltButtonInitializeOptions } from './bolt-button-initialize-options';\nimport BoltScriptLoader from './bolt-script-loader';\n\nexport default class BoltButtonStrategy implements CheckoutButtonStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private boltScriptLoader: BoltScriptLoader,\n        public boltHostWindow: BoltHostWindow = window,\n    ) {}\n\n    async initialize(\n        options: CheckoutButtonInitializeOptions & WithBoltButtonInitializeOptions,\n    ): Promise<void> {\n        const { bolt, containerId, methodId } = options;\n        const { buyNowInitializeOptions, style } = bolt || {};\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 (!bolt) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.bolt\" argument is not provided.`,\n            );\n        }\n\n        const isBuyNowFlow = Boolean(buyNowInitializeOptions);\n\n        if (!isBuyNowFlow) {\n            throw new NotImplementedError('Only buy now flow is implemented for Bolt button');\n        }\n\n        if (\n            !buyNowInitializeOptions?.storefrontApiToken ||\n            typeof buyNowInitializeOptions.storefrontApiToken !== 'string'\n        ) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.storefrontApiToken\" argument is not provided.`,\n            );\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod: BoltPaymentMethod = state.getPaymentMethodOrThrow(methodId);\n        const { initializationData, config } = paymentMethod;\n        const { publishableKey, developerConfig } = initializationData || {};\n\n        await this.boltScriptLoader.loadBoltClient(\n            publishableKey,\n            config.testMode,\n            developerConfig,\n            'BigCommerce',\n            buyNowInitializeOptions.storefrontApiToken,\n        );\n\n        this.renderButton(containerId, paymentMethod, style);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        containerId: string,\n        paymentMethod: BoltPaymentMethod,\n        style?: BoltButtonStyleOptions,\n    ): void {\n        if (typeof this.boltHostWindow.BoltConnect?.setupProductPageCheckout !== 'function') {\n            return;\n        }\n\n        this.addButtonContainer(containerId, paymentMethod, style);\n        this.boltHostWindow.BoltConnect.setupProductPageCheckout();\n    }\n\n    private addButtonContainer(\n        containerId: string,\n        paymentMethod: BoltPaymentMethod,\n        style?: BoltButtonStyleOptions,\n    ): void {\n        const container = document.getElementById(containerId);\n\n        if (!container) {\n            return;\n        }\n\n        const boltButtonContainer = document.createElement('div');\n        const boltButtonObject = document.createElement('object');\n\n        boltButtonContainer.setAttribute('id', 'product-page-checkout-wrapper');\n        boltButtonContainer.setAttribute('class', 'bolt-button-wrapper');\n        boltButtonContainer.setAttribute('style', 'display:none');\n        boltButtonContainer.setAttribute('data-tid', 'product-page-checkout-wrapper');\n\n        boltButtonObject.setAttribute('data', this.getBoltObjectData(paymentMethod, style));\n        boltButtonObject.setAttribute('class', 'bolt-product-checkout-button');\n\n        boltButtonContainer.append(boltButtonObject);\n        container.innerHTML = '';\n        container.append(boltButtonContainer);\n    }\n\n    private getBoltObjectData(\n        paymentMethod: BoltPaymentMethod,\n        style?: BoltButtonStyleOptions,\n    ): string {\n        const { initializationData, config } = paymentMethod;\n        const { publishableKey, developerConfig } = initializationData || {};\n\n        const domainUrl = this.boltScriptLoader.getDomainURL(!!config.testMode, developerConfig);\n        const buttonHeight = this.getButtonHeight(style?.size);\n        const buttonBorderRadius = this.getButtonBorderRadius(style?.shape, buttonHeight);\n\n        return stringifyUrl({\n            url: `https://${domainUrl}/v1/checkout_button`,\n            query: {\n                publishable_key: publishableKey,\n                variant: 'ppc',\n                height: buttonHeight,\n                border_radius: buttonBorderRadius,\n            },\n        });\n    }\n\n    private getButtonHeight(buttonSize?: StyleButtonSize): number | undefined {\n        if (!buttonSize) {\n            return;\n        }\n\n        switch (buttonSize) {\n            case StyleButtonSize.Small:\n                return 25;\n\n            case StyleButtonSize.Large:\n                return 45;\n\n            case StyleButtonSize.Medium:\n            default:\n                return 40;\n        }\n    }\n\n    private getButtonBorderRadius(\n        buttonShape?: StyleButtonShape,\n        buttonHeight?: number,\n    ): number | undefined {\n        if (!buttonShape) {\n            return;\n        }\n\n        switch (buttonShape) {\n            case StyleButtonShape.Pill:\n                return buttonHeight ? Math.round(buttonHeight / 2) : undefined;\n\n            case StyleButtonShape.Rect:\n            default:\n                return 4;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-customer-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the customer step of\n * checkout to support Bolt.\n */\nexport default interface BoltCustomerInitializeOptions {\n    /**\n     * A callback that gets called on initialize the strategy\n     *\n     * @param hasBoltAccount - The hasBoltAccount variable handle the result of checking user account availability on Bolt.\n     * @param email - Email address which was used for checking user account availability on Bolt.\n     */\n    onInit?(hasBoltAccount: boolean, email?: string): void;\n}\n\nexport interface WithBoltCustomerInitializeOptions {\n    bolt?: BoltCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-customer-strategy.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CustomerStrategy,\n    InvalidArgumentError,\n    MissingDataError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodFailedError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCustomer,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { BoltCheckout, BoltHostWindow, BoltInitializationData } from './bolt';\nimport BoltCustomerStrategy from './bolt-customer-strategy';\nimport BoltScriptLoader from './bolt-script-loader';\nimport { getBolt } from './bolt.mock';\n\ndescribe('BoltCustomerStrategy', () => {\n    let boltScriptLoader: BoltScriptLoader;\n    let boltCheckout: BoltCheckout;\n    let paymentMethodMock: PaymentMethod<BoltInitializationData>;\n    let strategy: CustomerStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        const scriptLoader = createScriptLoader();\n\n        paymentMethodMock = getBolt();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        boltCheckout = {} as BoltCheckout;\n        boltCheckout.configure = jest.fn();\n        boltCheckout.setClientCustomCallbacks = jest.fn();\n        boltCheckout.openCheckout = jest.fn();\n        boltCheckout.hasBoltAccount = jest.fn();\n        boltScriptLoader = new BoltScriptLoader(scriptLoader);\n        boltScriptLoader.loadBoltClient = jest.fn(() => {\n            (window as BoltHostWindow).BoltCheckout = boltCheckout;\n\n            return Promise.resolve(boltCheckout);\n        });\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue(\n            getCustomer(),\n        );\n\n        strategy = new BoltCustomerStrategy(paymentIntegrationService, boltScriptLoader);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('creates an instance of BoltCustomerStrategy', () => {\n        expect(strategy).toBeInstanceOf(BoltCustomerStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('fails to initialize the strategy if methodId is not provided', async () => {\n            await expect(strategy.initialize({ methodId: undefined })).rejects.toThrow(\n                InvalidArgumentError,\n            );\n        });\n\n        it('fails to initialize the strategy if publishableKey option is not provided', async () => {\n            paymentMethodMock.initializationData = undefined;\n\n            await expect(strategy.initialize({ methodId: 'bolt' })).rejects.toThrow(\n                MissingDataError,\n            );\n        });\n\n        it('loads bolt script loader', async () => {\n            await strategy.initialize({ methodId: 'bolt' });\n\n            expect(boltScriptLoader.loadBoltClient).toHaveBeenCalled();\n        });\n\n        it('calls Bolt on init callback', async () => {\n            const onInitMock = jest.fn();\n\n            await strategy.initialize({\n                methodId: 'bolt',\n                bolt: {\n                    onInit: onInitMock,\n                },\n            });\n\n            expect(onInitMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('calls default sign in method', async () => {\n            const credentials = {\n                email: 'test@test.com',\n                password: '123',\n            };\n\n            await strategy.signIn(credentials);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                undefined,\n            );\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('calls default sign out method', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout', () => {\n        it('fails to execute payment method checkout if methodId is not provided', async () => {\n            await expect(\n                strategy.executePaymentMethodCheckout({ methodId: undefined }),\n            ).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('fails to execute payment method checkout if provided continueWithCheckoutCallback is not a function', async () => {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            const continueWithCheckoutCallbackMock: any = 'string';\n\n            await expect(\n                strategy.executePaymentMethodCheckout({\n                    methodId: 'bolt',\n                    continueWithCheckoutCallback: continueWithCheckoutCallbackMock,\n                }),\n            ).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('successfully executes payment method checkout if continueWithCheckoutCallback is not provided (for suggestion block)', async () => {\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n\n            const options = { methodId: 'bolt' };\n\n            jest.spyOn(boltCheckout, 'hasBoltAccount').mockResolvedValue(true);\n\n            await strategy.initialize({ methodId: 'bolt' });\n            await strategy.executePaymentMethodCheckout(options);\n\n            expect(boltCheckout.hasBoltAccount).toHaveBeenCalledWith('test@bigcommerce.com');\n            expect(boltCheckout.openCheckout).toHaveBeenCalled();\n        });\n\n        it('runs default BC checkout flow (calls continueWithCheckoutCallback) if the customer does not have an email', async () => {\n            const mockCallback = jest.fn();\n            const options = { methodId: 'bolt', continueWithCheckoutCallback: mockCallback };\n\n            const customer = getCustomer();\n            const billingAddress = getBillingAddress();\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue({\n                ...billingAddress,\n                email: undefined,\n            });\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue({\n                ...customer,\n                email: '',\n            });\n\n            await strategy.executePaymentMethodCheckout(options);\n\n            expect(mockCallback).toHaveBeenCalledTimes(1);\n        });\n\n        it('runs default BC checkout flow (calls continueWithCheckoutCallback) if Bolt embedded one click configuration mode is disabled', async () => {\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = false;\n\n            const mockCallback = jest.fn();\n            const options = { methodId: 'bolt', continueWithCheckoutCallback: mockCallback };\n\n            await strategy.initialize({ methodId: 'bolt' });\n            await strategy.executePaymentMethodCheckout(options);\n\n            expect(mockCallback).toHaveBeenCalledTimes(1);\n        });\n\n        it('runs default BC checkout flow (calls continueWithCheckoutCallback) if customer do not have Bolt account', async () => {\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n\n            const mockCallback = jest.fn();\n            const options = { methodId: 'bolt', continueWithCheckoutCallback: mockCallback };\n\n            jest.spyOn(boltCheckout, 'hasBoltAccount').mockResolvedValue(false);\n\n            await strategy.initialize({ methodId: 'bolt' });\n            await strategy.executePaymentMethodCheckout(options);\n\n            expect(boltCheckout.hasBoltAccount).toHaveBeenCalledWith('test@bigcommerce.com');\n            expect(mockCallback).toHaveBeenCalledTimes(1);\n        });\n\n        it('shows Bolt Checkout Modal', async () => {\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n\n            const mockCallback = jest.fn();\n            const options = { methodId: 'bolt', continueWithCheckoutCallback: mockCallback };\n\n            jest.spyOn(boltCheckout, 'hasBoltAccount').mockResolvedValue(true);\n\n            await strategy.initialize({ methodId: 'bolt' });\n            await strategy.executePaymentMethodCheckout(options);\n\n            expect(boltCheckout.hasBoltAccount).toHaveBeenCalledWith('test@bigcommerce.com');\n            expect(boltCheckout.openCheckout).toHaveBeenCalled();\n        });\n\n        it('runs default BC checkout flow (calls continueWithCheckoutCallback) if customer close Bolt Checkout Modal', async () => {\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n\n            const mockCallback = jest.fn();\n            const options = { methodId: 'bolt', continueWithCheckoutCallback: mockCallback };\n            const callbacks = {\n                close: () => {\n                    options.continueWithCheckoutCallback();\n                },\n            };\n\n            jest.spyOn(boltCheckout, 'hasBoltAccount').mockResolvedValue(true);\n            jest.spyOn(boltCheckout, 'openCheckout').mockImplementation(() => {\n                callbacks.close();\n\n                return Promise.resolve();\n            });\n\n            await strategy.initialize({ methodId: 'bolt' });\n            await strategy.executePaymentMethodCheckout(options);\n\n            expect(boltCheckout.hasBoltAccount).toHaveBeenCalledWith('test@bigcommerce.com');\n            expect(boltCheckout.openCheckout).toHaveBeenCalled();\n            expect(mockCallback).toHaveBeenCalledTimes(1);\n        });\n\n        it('fails to execute payment method checkout if Bolt has an error when open Bolt Checkout Modal', async () => {\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n\n            const mockCallback = jest.fn();\n            const options = { methodId: 'bolt', continueWithCheckoutCallback: mockCallback };\n\n            jest.spyOn(boltCheckout, 'hasBoltAccount').mockResolvedValue(true);\n            jest.spyOn(boltCheckout, 'openCheckout').mockImplementation(() => {\n                throw new PaymentMethodFailedError('Error on Bolt side');\n            });\n\n            await strategy.initialize({ methodId: 'bolt' });\n\n            await expect(strategy.executePaymentMethodCheckout(options)).rejects.toThrow(\n                PaymentMethodFailedError,\n            );\n\n            expect(boltCheckout.hasBoltAccount).toHaveBeenCalledWith('test@bigcommerce.com');\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-customer-strategy.ts",
    "content": "import { noop } from 'rxjs';\n\nimport {\n    CheckoutPaymentMethodExecutedOptions,\n    CustomerCredentials,\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    ExecutePaymentMethodCheckoutOptions,\n    InvalidArgumentError,\n    isCustomError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodFailedError,\n    PaymentMethodInvalidError,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BoltCheckout, BoltHostWindow, BoltInitializationData } from './bolt';\nimport { WithBoltCustomerInitializeOptions } from './bolt-customer-initialize-options';\nimport BoltScriptLoader from './bolt-script-loader';\n\nexport default class BoltCustomerStrategy implements CustomerStrategy {\n    private boltHostWindow: BoltHostWindow = window;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private boltScriptLoader: BoltScriptLoader,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions & WithBoltCustomerInitializeOptions,\n    ): Promise<void> {\n        const { methodId, bolt } = options;\n        const { onInit } = bolt || {};\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" argument is not provided.',\n            );\n        }\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n        const paymentMethod: PaymentMethod<BoltInitializationData> = this.paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow<BoltInitializationData>(methodId);\n\n        if (!paymentMethod.initializationData?.publishableKey) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const { developerConfig, publishableKey } = paymentMethod.initializationData;\n\n        await this.boltScriptLoader.loadBoltClient(\n            publishableKey,\n            paymentMethod.config.testMode,\n            developerConfig,\n        );\n\n        if (onInit && typeof onInit === 'function') {\n            const email = this.getCustomerEmail();\n            const hasBoltAccount = await this.hasBoltAccount(email);\n\n            onInit(hasBoltAccount, email);\n        }\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signInCustomer(credentials, options);\n\n        return Promise.resolve();\n    }\n\n    async signOut(options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signOutCustomer(options);\n\n        return Promise.resolve();\n    }\n\n    async executePaymentMethodCheckout(\n        options?: ExecutePaymentMethodCheckoutOptions,\n    ): Promise<void> {\n        const {\n            continueWithCheckoutCallback = noop,\n            checkoutPaymentMethodExecuted,\n            methodId,\n        } = options || {};\n        const email = this.getCustomerEmail();\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" argument is not provided.',\n            );\n        }\n\n        if (typeof continueWithCheckoutCallback !== 'function') {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.',\n            );\n        }\n\n        if (!email) {\n            continueWithCheckoutCallback();\n\n            return;\n        }\n\n        return this.openBoltCheckoutModalOrThrow(\n            email,\n            methodId,\n            continueWithCheckoutCallback,\n            checkoutPaymentMethodExecuted,\n        );\n    }\n\n    private async openBoltCheckoutModalOrThrow(\n        email: string,\n        methodId: string,\n        continueWithCheckoutCallback: () => void,\n        checkoutPaymentMethodExecuted?: (payload: CheckoutPaymentMethodExecutedOptions) => void,\n    ): Promise<void> {\n        const boltClient = this.getBoltClientOrThrow();\n        const paymentMethod = this.paymentIntegrationService\n            .getState()\n            .getPaymentMethod<BoltInitializationData>(methodId);\n\n        try {\n            if (paymentMethod?.initializationData?.embeddedOneClickEnabled) {\n                const hasBoltAccount = await this.hasBoltAccount(email);\n\n                if (hasBoltAccount) {\n                    const callbacks = {\n                        close: () => {\n                            continueWithCheckoutCallback();\n                        },\n                    };\n\n                    await boltClient.openCheckout(email, callbacks);\n                } else {\n                    continueWithCheckoutCallback();\n                }\n\n                if (typeof checkoutPaymentMethodExecuted === 'function') {\n                    checkoutPaymentMethodExecuted({ hasBoltAccount });\n                }\n            } else {\n                continueWithCheckoutCallback();\n            }\n        } catch (error) {\n            if (\n                isCustomError(error) &&\n                error.name !== 'MissingDataError' &&\n                error.name !== 'NotInitializedError'\n            ) {\n                throw new PaymentMethodFailedError(error.message);\n            }\n\n            throw error;\n        }\n    }\n\n    private getBoltClientOrThrow(): BoltCheckout {\n        const boltClient = this.boltHostWindow.BoltCheckout;\n\n        if (!boltClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return boltClient;\n    }\n\n    private async hasBoltAccount(email: string) {\n        const boltClient = this.getBoltClientOrThrow();\n\n        try {\n            return await boltClient.hasBoltAccount(email);\n        } catch {\n            throw new PaymentMethodInvalidError();\n        }\n    }\n\n    private getCustomerEmail() {\n        const state = this.paymentIntegrationService.getState();\n        const customer = state.getCustomer();\n        const billingAddress = state.getBillingAddress();\n\n        return customer?.email || billingAddress?.email || '';\n    }\n}\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-error.spec.ts",
    "content": "import BoltError from './bolt-error';\n\ndescribe('Bolt errors', () => {\n    it('Get Bolt error - invalid card number', () => {\n        const error = new BoltError('1000');\n\n        expect(error.body).toEqual({ errors: [{ code: 'invalid_number' }] });\n    });\n\n    it('Get Bolt error - invalid expiry date', () => {\n        const error = new BoltError('1001');\n\n        expect(error.body).toEqual({ errors: [{ code: 'invalid_expiry_date' }] });\n    });\n\n    it('Get Bolt error - invalid cvc', () => {\n        const error = new BoltError('1002');\n\n        expect(error.body).toEqual({ errors: [{ code: 'invalid_cvc' }] });\n    });\n\n    it('Get Bolt error - invalid zip', () => {\n        const error = new BoltError('1003');\n\n        expect(error.body).toEqual({ errors: [{ code: 'invalid_zip' }] });\n    });\n\n    it('Get Bolt error - incorrect zip', () => {\n        const error = new BoltError('2003');\n\n        expect(error.body).toEqual({ errors: [{ code: 'incorrect_zip' }] });\n    });\n\n    it('default error is exist', () => {\n        const error = new BoltError('incorrect error code');\n\n        expect(error.body).toEqual({ errors: [{ code: 'general_error' }] });\n    });\n});\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-error.ts",
    "content": "import { PaymentErrorData, StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class BoltError extends StandardError {\n    body: { errors: PaymentErrorData[] };\n\n    constructor(public errorCode: string) {\n        super();\n\n        this.name = 'BoltPaymentsFieldError';\n        this.type = 'bolt_payments_field_error';\n        this.body = { errors: [BoltError.getError(errorCode)] };\n    }\n\n    private static getError(errorCode: string): PaymentErrorData {\n        switch (errorCode) {\n            case '1000':\n            case '2000':\n            case '3000':\n                return { code: 'invalid_number' };\n\n            case '1001':\n            case '2001':\n            case '3001':\n                return { code: 'invalid_expiry_date' };\n\n            case '1002':\n            case '2002':\n                return { code: 'invalid_cvc' };\n\n            case '1003':\n                return { code: 'invalid_zip' };\n\n            case '2003':\n                return { code: 'incorrect_zip' };\n\n            default:\n                return { code: 'general_error' };\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-payment-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the Bolt payment method with:\n *\n * 1) Bolt Full Checkout:\n *\n * If the customer chooses to pay with Bolt, he will be asked to\n * enter his payment details via Bolt Full Checkout.\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'bolt',\n * });\n * ```\n *\n * 2) Bolt Client:\n *\n * If the customer chooses to pay with Bolt in payment section of Checkout page,\n * the Bolt Payment Modal will be shown, and the customer will be asked\n * to enter payment details via Bolt Modal\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'bolt',\n *     bolt: {\n *         useBigCommerceCheckout: true,\n *     }\n * });\n * ```\n *\n * 3) Bolt Embedded:\n *\n * A set of options that are required to initialize the Bolt payment method\n * for presenting its credit card form.\n *\n * ```html\n * <!-- These containers are where the hosted (iframed) credit card field will be inserted -->\n * <div id=\"bolt-embedded\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'bolt',\n *     bolt: {\n *         useBigCommerceCheckout: true,\n *         containerId: 'boltEmbeddedContainerId',\n *     }\n * });\n * ```\n */\nexport default interface BoltPaymentInitializeOptions {\n    useBigCommerceCheckout: boolean;\n\n    /**\n     * The CSS selector of a container where the Bolt Embedded payment field should be inserted into.\n     */\n    containerId?: string;\n\n    /**\n     * A callback that gets called when the customer selects Bolt as payment option.\n     */\n    onPaymentSelect?(hasBoltAccount: boolean): void;\n}\n\nexport interface WithBoltPaymentInitializeOptions {\n    /**\n     * The options that are required to initialize the Bolt payment\n     * method. They can be omitted unless you need to support Bolt.\n     */\n    bolt?: BoltPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-payment-strategy.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\nimport localStorageFallback from 'local-storage-fallback';\n\nimport { AnalyticsExtraItemsManager } from '@bigcommerce/checkout-sdk/analytics';\nimport {\n    Checkout,\n    InvalidArgumentError,\n    MissingDataError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n    PaymentMethodInvalidError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCheckout,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    BoltCheckout,\n    BoltDeveloperMode,\n    BoltEmbedded,\n    BoltEmbeddedTokenize,\n    BoltEmbededField,\n    BoltPaymentMethod,\n} from './bolt';\nimport { WithBoltPaymentInitializeOptions } from './bolt-payment-initialize-options';\nimport BoltPaymentStrategy from './bolt-payment-strategy';\nimport BoltScriptLoader from './bolt-script-loader';\nimport { getBolt, getBoltClientScriptMock, getBoltEmbeddedScriptMock } from './bolt.mock';\n\ndescribe('BoltPaymentStrategy', () => {\n    let boltClientScriptInitializationOptions: PaymentInitializeOptions;\n    let scriptLoader: ScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let boltScriptLoader: BoltScriptLoader;\n    let paymentMethodMock: BoltPaymentMethod;\n    let strategy: BoltPaymentStrategy;\n    let boltClient: BoltCheckout;\n    let boltEmbedded: BoltEmbedded;\n    let boltEmbeddedField: BoltEmbededField;\n    let boltEmbeddedFieldTokenizeResponse: BoltEmbeddedTokenize;\n    let boltEmbeddedScriptInitializationOptions: PaymentInitializeOptions &\n        WithBoltPaymentInitializeOptions;\n    let boltTakeOverInitializationOptions: PaymentInitializeOptions;\n    let payload: OrderRequestBody;\n    let checkoutMock: Checkout;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        scriptLoader = createScriptLoader();\n        boltScriptLoader = new BoltScriptLoader(scriptLoader);\n        paymentMethodMock = getBolt();\n        boltClientScriptInitializationOptions = {\n            methodId: 'bolt',\n            bolt: {\n                useBigCommerceCheckout: true,\n            },\n        };\n        boltEmbeddedFieldTokenizeResponse = {\n            bin: '1111',\n            expiration: '2022-11',\n            last4: '1111',\n            postal_code: undefined,\n            token: 'token',\n            token_type: 'bolt',\n        };\n        boltEmbeddedScriptInitializationOptions = {\n            methodId: 'bolt',\n            bolt: {\n                containerId: 'bolt-embedded',\n                onPaymentSelect: jest.fn(),\n                useBigCommerceCheckout: true,\n            },\n        };\n        boltTakeOverInitializationOptions = {\n            methodId: 'bolt',\n        };\n        payload = {\n            payment: {\n                methodId: 'bolt',\n                paymentData: {\n                    nonce: 'transactionReference',\n                },\n            },\n        };\n        boltClient = getBoltClientScriptMock(true);\n        boltEmbedded = getBoltEmbeddedScriptMock();\n        boltEmbeddedField = boltEmbedded.create('payment_field');\n        checkoutMock = getCheckout();\n\n        jest.spyOn(boltScriptLoader, 'loadBoltClient').mockResolvedValue(boltClient);\n        jest.spyOn(boltScriptLoader, 'loadBoltEmbedded').mockResolvedValue(boltEmbedded);\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(boltEmbedded, 'create').mockReturnValue(boltEmbeddedField);\n        jest.spyOn(boltEmbeddedField, 'tokenize').mockResolvedValue(\n            boltEmbeddedFieldTokenizeResponse,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n            checkoutMock,\n        );\n\n        strategy = new BoltPaymentStrategy(\n            paymentIntegrationService,\n            boltScriptLoader,\n            new AnalyticsExtraItemsManager(localStorageFallback),\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize', () => {\n        it('successfully initializes the bolt strategy and loads the bolt client', async () => {\n            await strategy.initialize(boltClientScriptInitializationOptions);\n\n            expect(boltScriptLoader.loadBoltClient).toHaveBeenCalledWith(\n                'publishableKey',\n                true,\n                undefined,\n            );\n        });\n\n        it('successfully initializes the bolt strategy and loads the bolt client with developer params', async () => {\n            paymentMethodMock.initializationData!.developerConfig = {\n                developerMode: 'bolt_sandbox' as BoltDeveloperMode,\n                developerDomain: '',\n            };\n\n            await strategy.initialize(boltClientScriptInitializationOptions);\n\n            expect(boltScriptLoader.loadBoltClient).toHaveBeenCalledWith(\n                'publishableKey',\n                true,\n                paymentMethodMock.initializationData?.developerConfig,\n            );\n        });\n\n        it('fails to initialize the bolt strategy and load bolt embedded script if method id is not provided', async () => {\n            const initializationOptions = {\n                methodId: '',\n                bolt: {\n                    containerId: undefined,\n                    useBigCommerceCheckout: true,\n                    onPaymentSelect: jest.fn(),\n                },\n            };\n\n            await expect(strategy.initialize(initializationOptions)).rejects.toThrow(\n                InvalidArgumentError,\n            );\n            expect(boltScriptLoader.loadBoltEmbedded).not.toHaveBeenCalled();\n            expect(boltClient.hasBoltAccount).not.toHaveBeenCalled();\n            expect(initializationOptions.bolt.onPaymentSelect).not.toHaveBeenCalled();\n        });\n\n        it('fails to initialize the bolt strategy and load bolt embedded script if onPaymentSelect is not provided', async () => {\n            const initializationOptions = {\n                methodId: 'bolt',\n                bolt: {\n                    ...boltEmbeddedScriptInitializationOptions.bolt,\n                    useBigCommerceCheckout: true,\n                    onPaymentSelect: undefined,\n                },\n            };\n\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n\n            await expect(strategy.initialize(initializationOptions)).rejects.toThrow(\n                InvalidArgumentError,\n            );\n            expect(boltScriptLoader.loadBoltEmbedded).not.toHaveBeenCalled();\n            expect(boltClient.hasBoltAccount).not.toHaveBeenCalled();\n        });\n\n        it('fails to initialize the bolt strategy and load bolt embedded script if containerId is not provided', async () => {\n            const initializationOptions = {\n                methodId: 'bolt',\n                bolt: {\n                    containerId: undefined,\n                    useBigCommerceCheckout: true,\n                    onPaymentSelect: jest.fn(),\n                },\n            };\n\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n\n            await expect(strategy.initialize(initializationOptions)).rejects.toThrow(\n                InvalidArgumentError,\n            );\n            expect(boltScriptLoader.loadBoltEmbedded).not.toHaveBeenCalled();\n            expect(boltClient.hasBoltAccount).not.toHaveBeenCalled();\n            expect(initializationOptions.bolt.onPaymentSelect).not.toHaveBeenCalled();\n        });\n\n        it('successfully initializes the bolt strategy, loads the bolt embedded and mounts bolt embedded field', async () => {\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n\n            await strategy.initialize(boltEmbeddedScriptInitializationOptions);\n\n            expect(boltScriptLoader.loadBoltEmbedded).toHaveBeenCalledWith(\n                'publishableKey',\n                true,\n                undefined,\n            );\n            expect(boltEmbedded.create).toHaveBeenCalled();\n            expect(boltEmbeddedField.mount).toHaveBeenCalled();\n            expect(boltClient.hasBoltAccount).toHaveBeenCalled();\n            expect(\n                boltEmbeddedScriptInitializationOptions.bolt?.onPaymentSelect,\n            ).toHaveBeenCalled();\n        });\n\n        it('successfully initializes the bolt strategy, loads the bolt embedded with developer params and mounts bolt embedded field', async () => {\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n            paymentMethodMock.initializationData!.developerConfig = {\n                developerMode: 'bolt_sandbox' as BoltDeveloperMode,\n                developerDomain: '',\n            };\n\n            await strategy.initialize(boltEmbeddedScriptInitializationOptions);\n\n            expect(boltScriptLoader.loadBoltEmbedded).toHaveBeenCalledWith(\n                'publishableKey',\n                true,\n                paymentMethodMock.initializationData!.developerConfig,\n            );\n            expect(boltEmbedded.create).toHaveBeenCalled();\n            expect(boltEmbeddedField.mount).toHaveBeenCalled();\n            expect(boltClient.hasBoltAccount).toHaveBeenCalled();\n            expect(\n                boltEmbeddedScriptInitializationOptions.bolt?.onPaymentSelect,\n            ).toHaveBeenCalled();\n        });\n\n        it('successfully initializes the bolt strategy without loading the bolt embedded', async () => {\n            await strategy.initialize(boltTakeOverInitializationOptions);\n\n            expect(boltScriptLoader.loadBoltClient).toHaveBeenCalled();\n            expect(boltScriptLoader.loadBoltEmbedded).not.toHaveBeenCalled();\n        });\n\n        it('successfully initializes the bolt strategy without publishable key if BoltCheckout SDK was initialized before', async () => {\n            await boltScriptLoader.loadBoltClient(\n                'publishableKey',\n                true,\n                paymentMethodMock.initializationData!.developerConfig,\n            );\n\n            const initializationOptions = {\n                ...boltTakeOverInitializationOptions,\n                bolt: {\n                    useBigCommerceCheckout: false,\n                },\n            };\n\n            paymentMethodMock.initializationData!.publishableKey = '';\n\n            await strategy.initialize(initializationOptions);\n\n            expect(boltScriptLoader.loadBoltClient).toHaveBeenCalledWith();\n        });\n\n        it('fails to initialize the bolt strategy if publishableKey is not provided when using Bigcommerce Checkout', async () => {\n            paymentMethodMock.initializationData!.publishableKey = '';\n\n            await expect(\n                strategy.initialize(boltClientScriptInitializationOptions),\n            ).rejects.toThrow(MissingDataError);\n            expect(boltScriptLoader.loadBoltClient).not.toHaveBeenCalled();\n            expect(boltScriptLoader.loadBoltEmbedded).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute', () => {\n        const expectedPayment = {\n            methodId: 'bolt',\n            paymentData: {\n                nonce: 'transactionReference',\n            },\n        };\n\n        it('successfully executes the bolt strategy and submits payment when using bolt client', async () => {\n            const expectedCart = {\n                orderToken: 'clientToken',\n            };\n            const expectedCallbacks = {\n                success: expect.any(Function),\n                close: expect.any(Function),\n            };\n\n            await strategy.initialize(boltClientScriptInitializationOptions);\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.applyStoreCredit).toHaveBeenCalledWith(false);\n            expect(boltClient.configure).toHaveBeenCalledWith(\n                expect.objectContaining(expectedCart),\n                {},\n                expect.objectContaining(expectedCallbacks),\n            );\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        it('succesfully executes the bolt strategy and applies store credit when using bolt client', async () => {\n            const expectedCart = {\n                orderToken: 'clientToken',\n            };\n            const expectedCallbacks = {\n                success: expect.any(Function),\n                close: expect.any(Function),\n            };\n\n            checkoutMock.isStoreCreditApplied = true;\n\n            await strategy.initialize(boltClientScriptInitializationOptions);\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.applyStoreCredit).toHaveBeenCalledWith(true);\n            expect(boltClient.configure).toHaveBeenCalledWith(\n                expect.objectContaining(expectedCart),\n                {},\n                expect.objectContaining(expectedCallbacks),\n            );\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        it('succesfully executes the bolt strategy with checkout takeover', async () => {\n            jest.spyOn(boltClient, 'getTransactionReference').mockResolvedValue(\n                'transactionReference',\n            );\n\n            await strategy.initialize(boltTakeOverInitializationOptions);\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(boltClient.setOrderId).toHaveBeenCalled();\n            expect(boltClient.getTransactionReference).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n            expect(paymentIntegrationService.applyStoreCredit).not.toHaveBeenCalled();\n            expect(boltClient.configure).not.toHaveBeenCalled();\n        });\n\n        it('fails to submit payment if no transaction reference returned from bolt client with checkout takeover', async () => {\n            jest.spyOn(boltClient, 'getTransactionReference').mockResolvedValue(undefined);\n\n            await strategy.initialize(boltTakeOverInitializationOptions);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentMethodInvalidError);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(boltClient.setOrderId).toHaveBeenCalled();\n            expect(boltClient.getTransactionReference).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalledWith(\n                expectedPayment,\n            );\n            expect(paymentIntegrationService.applyStoreCredit).not.toHaveBeenCalled();\n            expect(boltClient.configure).not.toHaveBeenCalled();\n        });\n\n        it('fails to execute the bolt strategy if no payment is provided when using bolt client', async () => {\n            payload.payment = undefined;\n            await strategy.initialize(boltClientScriptInitializationOptions);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentArgumentInvalidError);\n            expect(boltClient.configure).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('fails to execute the bolt strategy if no client token is provided when using bolt client', async () => {\n            paymentMethodMock.clientToken = undefined;\n            await strategy.initialize(boltClientScriptInitializationOptions);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(MissingDataError);\n            expect(boltClient.configure).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('fails to execute the bolt strategy if the client script is not loaded when using bolt client', async () => {\n            jest.spyOn(boltScriptLoader, 'loadBoltClient').mockImplementation(jest.fn());\n            await strategy.initialize(boltClientScriptInitializationOptions);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(NotInitializedError);\n            expect(boltClient.configure).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('does not submit payment if the payment is cancelled when using bolt client', async () => {\n            boltClient = getBoltClientScriptMock(false);\n            jest.spyOn(boltScriptLoader, 'loadBoltClient').mockResolvedValue(boltClient);\n            await strategy.initialize(boltClientScriptInitializationOptions);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentMethodCancelledError);\n            expect(boltClient.configure).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('does not submit payment if the payment is cancelled because of invalid transaction reference when using bolt client', async () => {\n            boltClient = getBoltClientScriptMock(true, false);\n            jest.spyOn(boltScriptLoader, 'loadBoltClient').mockResolvedValue(boltClient);\n            await strategy.initialize(boltClientScriptInitializationOptions);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentMethodFailedError);\n            expect(boltClient.configure).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('fails to execute the strategy if no payment is provided with checkout takeover', async () => {\n            payload.payment = undefined;\n\n            await strategy.initialize(boltTakeOverInitializationOptions);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentArgumentInvalidError);\n            expect(paymentIntegrationService.applyStoreCredit).not.toHaveBeenCalled();\n            expect(boltClient.configure).not.toHaveBeenCalled();\n        });\n\n        it('fails to execute the strategy if no method id is provided with checkout takeover', async () => {\n            payload.payment = {\n                methodId: '',\n            };\n\n            await strategy.initialize(boltTakeOverInitializationOptions);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(MissingDataError);\n            expect(paymentIntegrationService.applyStoreCredit).not.toHaveBeenCalled();\n            expect(boltClient.configure).not.toHaveBeenCalled();\n        });\n\n        it('fails to execute the strategy if no payment payload sent without account creation field with bolt embedded', async () => {\n            const boltEmbeddedPayload = {\n                payment: {\n                    methodId: 'bolt',\n                    paymentData: {},\n                },\n            };\n\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n\n            await strategy.initialize(boltEmbeddedScriptInitializationOptions);\n\n            await expect(strategy.execute(boltEmbeddedPayload)).rejects.toThrow(MissingDataError);\n            expect(boltEmbeddedField.tokenize).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('fails to execute the strategy if no payment provided with bolt embedded', async () => {\n            const boltEmbeddedPayload = {\n                payment: undefined,\n            };\n\n            await strategy.initialize(boltEmbeddedScriptInitializationOptions);\n\n            await expect(strategy.execute(boltEmbeddedPayload)).rejects.toThrow(\n                PaymentArgumentInvalidError,\n            );\n            expect(boltEmbeddedField.tokenize).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('fails to execute the strategy with bolt embedded if provider will receive an error', async () => {\n            const boltEmbeddedPayload = {\n                payment: {\n                    methodId: 'bolt',\n                    paymentData: {\n                        shouldCreateAccount: false,\n                    },\n                },\n            };\n\n            jest.spyOn(boltEmbeddedField, 'tokenize').mockImplementation(() => {\n                throw new Error();\n            });\n\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n\n            await strategy.initialize(boltEmbeddedScriptInitializationOptions);\n\n            await expect(strategy.execute(boltEmbeddedPayload)).rejects.toThrow(Error);\n            expect(boltEmbeddedField.tokenize).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('fails to execute the strategy with bolt embedded if provider will receive invalid data', async () => {\n            const invalidData = {\n                token: '',\n                last4: 'last4',\n                bin: 'bin',\n                expiration: '1122',\n                token_type: '',\n            };\n\n            const boltEmbeddedPayload = {\n                payment: {\n                    methodId: 'bolt',\n                    paymentData: {\n                        shouldCreateAccount: false,\n                    },\n                },\n            };\n\n            jest.spyOn(boltEmbeddedField, 'tokenize').mockResolvedValue(invalidData);\n\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n\n            await strategy.initialize(boltEmbeddedScriptInitializationOptions);\n\n            await expect(strategy.execute(boltEmbeddedPayload)).rejects.toThrow(\n                PaymentArgumentInvalidError,\n            );\n            expect(boltEmbeddedField.tokenize).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('succesfully executes the bolt strategy with bolt embedded (without account creation)', async () => {\n            const submitPaymentOptions = {\n                methodId: 'bolt',\n                paymentData: {\n                    formattedPayload: {\n                        credit_card_token: {\n                            token: 'token',\n                            last_four_digits: '1111',\n                            iin: '1111',\n                            expiration_month: 11,\n                            expiration_year: 2022,\n                        },\n                        provider_data: {\n                            create_account: false,\n                            embedded_checkout: true,\n                        },\n                    },\n                },\n            };\n            const boltEmbeddedPayload = {\n                payment: {\n                    methodId: 'bolt',\n                    paymentData: {\n                        shouldCreateAccount: false,\n                    },\n                },\n            };\n\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n            await strategy.initialize(boltEmbeddedScriptInitializationOptions);\n            await strategy.execute(boltEmbeddedPayload);\n\n            expect(boltEmbeddedField.tokenize).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                submitPaymentOptions,\n            );\n        });\n\n        it('succesfully executes the bolt strategy with bolt embedded (with account creation)', async () => {\n            const submitPaymentOptions = {\n                methodId: 'bolt',\n                paymentData: {\n                    formattedPayload: {\n                        credit_card_token: {\n                            token: 'token',\n                            last_four_digits: '1111',\n                            iin: '1111',\n                            expiration_month: 11,\n                            expiration_year: 2022,\n                        },\n                        provider_data: {\n                            create_account: true,\n                            embedded_checkout: true,\n                        },\n                    },\n                },\n            };\n\n            const boltEmbeddedPayload = {\n                payment: {\n                    methodId: 'bolt',\n                    paymentData: {\n                        shouldCreateAccount: true,\n                    },\n                },\n            };\n\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n            await strategy.initialize(boltEmbeddedScriptInitializationOptions);\n            await strategy.execute(boltEmbeddedPayload);\n\n            expect(boltEmbeddedField.tokenize).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                submitPaymentOptions,\n            );\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes Bolt client script strategy', async () => {\n            await strategy.initialize(boltClientScriptInitializationOptions);\n            await strategy.deinitialize();\n\n            expect(boltEmbeddedField.unmount).not.toHaveBeenCalled();\n        });\n\n        it('deinitializes Bolt embedded one click strategy', async () => {\n            paymentMethodMock.initializationData!.embeddedOneClickEnabled = true;\n            await strategy.initialize(boltEmbeddedScriptInitializationOptions);\n\n            await strategy.deinitialize();\n\n            expect(boltEmbeddedField.unmount).toHaveBeenCalled();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-payment-strategy.ts",
    "content": "import {\n    AnalyticsExtraItemsManager,\n    isAnalyticsTrackerWindow,\n} from '@bigcommerce/checkout-sdk/analytics';\nimport {\n    InvalidArgumentError,\n    isWithAccountCreation,\n    MissingDataError,\n    MissingDataErrorType,\n    NonceInstrument,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    WithAccountCreation,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    BoltCheckout,\n    BoltEmbedded,\n    BoltEmbeddedTokenize,\n    BoltEmbededField,\n    BoltPaymentMethod,\n    BoltTransaction,\n} from './bolt';\nimport BoltError from './bolt-error';\nimport { WithBoltPaymentInitializeOptions } from './bolt-payment-initialize-options';\nimport BoltScriptLoader from './bolt-script-loader';\nimport { isBoltPaymentData } from './is-bolt-payment-data';\n\nexport default class BoltPaymentStrategy implements PaymentStrategy {\n    private boltClient?: BoltCheckout;\n    private boltEmbedded?: BoltEmbedded;\n    private embeddedField?: BoltEmbededField;\n    private useBoltClient = false;\n    private useBoltEmbedded = false;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private boltScriptLoader: BoltScriptLoader,\n        private analyticsExtraItemsManager: AnalyticsExtraItemsManager,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithBoltPaymentInitializeOptions,\n    ): Promise<void> {\n        const { bolt, methodId } = options;\n        const { containerId, onPaymentSelect, useBigCommerceCheckout } = bolt || {};\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 (!useBigCommerceCheckout) {\n            // info: calling loadBoltClient method without providing any params is necessary for Bolt Full Checkout and Fraud Protection\n            this.boltClient = await this.boltScriptLoader.loadBoltClient();\n\n            return;\n        }\n\n        const paymentMethod: BoltPaymentMethod = this.paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow(options.methodId);\n\n        const { initializationData, config } = paymentMethod;\n        const { publishableKey, developerConfig, embeddedOneClickEnabled } =\n            initializationData || {};\n        const { testMode } = config;\n\n        if (!publishableKey) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        this.boltClient = await this.boltScriptLoader.loadBoltClient(\n            publishableKey,\n            testMode,\n            developerConfig,\n        );\n\n        this.useBoltClient = !embeddedOneClickEnabled;\n        this.useBoltEmbedded = !!embeddedOneClickEnabled;\n\n        if (this.useBoltEmbedded) {\n            if (!containerId) {\n                throw new InvalidArgumentError(\n                    'Unable to initialize payment because \"options.bolt.containerId\" argument is not provided.',\n                );\n            }\n\n            if (!onPaymentSelect) {\n                throw new InvalidArgumentError(\n                    'Unable to initialize payment because \"options.bolt.onPaymentSelect\" argument is not provided.',\n                );\n            }\n\n            this.boltEmbedded = await this.boltScriptLoader.loadBoltEmbedded(\n                publishableKey,\n                testMode,\n                developerConfig,\n            );\n\n            this.mountBoltEmbeddedField(containerId);\n            onPaymentSelect(await this.hasBoltAccount());\n        }\n    }\n\n    deinitialize(): Promise<void> {\n        this.embeddedField?.unmount();\n\n        this.boltClient = undefined;\n        this.boltEmbedded = undefined;\n\n        return Promise.resolve();\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        this.setExtraItemsForAnalytics();\n\n        const { payment, ...order } = payload;\n        const { methodId, paymentData } = payment || {};\n        let paymentPayload;\n\n        if (!payload.payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        if (!methodId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        if (!paymentData || !isBoltPaymentData(paymentData)) {\n            throw new MissingDataError(MissingDataErrorType.MissingPayment);\n        }\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n\n        if (this.useBoltClient) {\n            paymentPayload = await this.getBoltClientPaymentPayload(methodId, paymentData, options);\n        } else if (this.useBoltEmbedded) {\n            paymentPayload = await this.getBoltEmbeddedPaymentPayload(methodId, paymentData);\n        } else {\n            paymentPayload = await this.getBoltFullCheckoutPaymentPayload(methodId, paymentData);\n        }\n\n        await this.paymentIntegrationService.submitPayment(paymentPayload);\n    }\n\n    private async getBoltClientPaymentPayload(\n        methodId: string,\n        paymentData: NonceInstrument,\n        options?: PaymentRequestOptions,\n    ): Promise<Payment> {\n        await this.paymentIntegrationService.loadPaymentMethod(methodId, options);\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n        const orderToken = paymentMethod.clientToken;\n        const { isStoreCreditApplied } = state.getCheckoutOrThrow();\n        const { shouldSaveInstrument } = paymentData;\n        const boltClient = this.getBoltClientOrThrow();\n\n        await this.paymentIntegrationService.applyStoreCredit(isStoreCreditApplied);\n\n        if (!orderToken) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const boltTransaction: BoltTransaction = await new Promise((resolve, reject) => {\n            const onSuccess = (transaction: BoltTransaction, callback: () => void) => {\n                if (!transaction.reference) {\n                    reject(\n                        new PaymentMethodFailedError(\n                            'Unable to proceed because transaction reference is unavailable. Please try again later.',\n                        ),\n                    );\n                } else {\n                    resolve(transaction);\n                }\n\n                callback();\n            };\n\n            const onClose = () => {\n                reject(new PaymentMethodCancelledError());\n            };\n\n            const callbacks = {\n                success: onSuccess,\n                close: onClose,\n            };\n\n            boltClient.configure({ orderToken }, {}, callbacks).open();\n        });\n\n        return {\n            methodId,\n            paymentData: {\n                nonce: boltTransaction.reference,\n                shouldSaveInstrument,\n            },\n        };\n    }\n\n    private async getBoltEmbeddedPaymentPayload(\n        methodId: string,\n        paymentData: WithAccountCreation,\n    ): Promise<Payment> {\n        if (!isWithAccountCreation(paymentData)) {\n            throw new MissingDataError(MissingDataErrorType.MissingPayment);\n        }\n\n        const tokenizeResult = this.validateTokenizeResultOrThrow(\n            await this.embeddedField?.tokenize(),\n        );\n\n        return {\n            methodId,\n            paymentData: {\n                formattedPayload: {\n                    credit_card_token: {\n                        token: tokenizeResult.token,\n                        last_four_digits: tokenizeResult.last4,\n                        iin: tokenizeResult.bin,\n                        expiration_month: +tokenizeResult.expiration.split('-')[1],\n                        expiration_year: +tokenizeResult.expiration.split('-')[0],\n                    },\n                    provider_data: {\n                        create_account: !!paymentData.shouldCreateAccount,\n                        embedded_checkout: true,\n                    },\n                },\n            },\n        };\n    }\n\n    private async getBoltFullCheckoutPaymentPayload(\n        methodId: string,\n        paymentData: NonceInstrument,\n    ): Promise<Payment> {\n        await this.setBoltOrderId();\n\n        const boltClient = this.getBoltClientOrThrow();\n        const transactionReference = await boltClient.getTransactionReference();\n\n        if (!transactionReference) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        return {\n            methodId,\n            paymentData: {\n                ...paymentData,\n                nonce: transactionReference,\n            },\n        };\n    }\n\n    private getBoltClientOrThrow(): BoltCheckout {\n        if (!this.boltClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.boltClient;\n    }\n\n    private getBoltEmbeddedOrThrow() {\n        if (!this.boltEmbedded) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.boltEmbedded;\n    }\n\n    private async hasBoltAccount(): Promise<boolean> {\n        const state = this.paymentIntegrationService.getState();\n        const customer = state.getCustomer();\n        const billingAddress = state.getBillingAddress();\n        const email = customer?.email || billingAddress?.email || '';\n        const boltClient = this.getBoltClientOrThrow();\n\n        try {\n            return await boltClient.hasBoltAccount(email);\n        } catch {\n            throw new PaymentMethodInvalidError();\n        }\n    }\n\n    private async setBoltOrderId() {\n        const order = this.paymentIntegrationService.getState().getOrderOrThrow();\n        const boltClient = this.getBoltClientOrThrow();\n\n        try {\n            await boltClient.setOrderId(order.orderId);\n        } catch {\n            throw new PaymentMethodInvalidError();\n        }\n    }\n\n    private mountBoltEmbeddedField(containerId: string) {\n        const boltEmbedded = this.getBoltEmbeddedOrThrow();\n        const styles = { backgroundColor: '#fff' };\n        const embeddedField = boltEmbedded.create('payment_field', {\n            styles,\n            renderSeparateFields: true,\n        });\n\n        embeddedField.mount(`#${containerId}`);\n\n        this.embeddedField = embeddedField;\n    }\n\n    private validateTokenizeResultOrThrow(\n        tokenizeResult?: BoltEmbeddedTokenize | Error,\n    ): BoltEmbeddedTokenize {\n        if (!tokenizeResult) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        if (tokenizeResult instanceof Error) {\n            throw new BoltError(tokenizeResult.message);\n        }\n\n        const { token, last4, bin, expiration } = tokenizeResult;\n        const lastFourDigits = +last4;\n        const iin = +bin;\n        const expirationMonth = +`${expiration}`.split('-')[1];\n        const expirationYear = +`${expiration}`.split('-')[0];\n\n        if (\n            !token ||\n            Number.isNaN(lastFourDigits) ||\n            Number.isNaN(iin) ||\n            Number.isNaN(expirationMonth) ||\n            Number.isNaN(expirationYear)\n        ) {\n            throw new PaymentArgumentInvalidError();\n        }\n\n        return tokenizeResult;\n    }\n\n    private setExtraItemsForAnalytics() {\n        const state = this.paymentIntegrationService.getState();\n        const storeConfig = state.getStoreConfigOrThrow();\n        const cart = state.getCartOrThrow();\n\n        if (storeConfig.checkoutSettings.isAnalyticsEnabled && isAnalyticsTrackerWindow(window)) {\n            const { id, lineItems } = cart;\n\n            this.analyticsExtraItemsManager.saveExtraItemsData(id, lineItems);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-script-loader.spec.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BoltCheckout, BoltDeveloperMode, BoltEmbedded, BoltHostWindow } from './bolt';\nimport BoltScriptLoader from './bolt-script-loader';\nimport { getBoltClientScriptMock, getBoltEmbeddedScriptMock } from './bolt.mock';\n\ndescribe('BoltScriptLoader', () => {\n    let boltScriptLoader: BoltScriptLoader;\n    let scriptLoader: ScriptLoader;\n    let mockWindow: BoltHostWindow;\n\n    const expectedScriptOptions = (id: string, publishableKey?: string) => {\n        return expect.objectContaining({\n            attributes: expect.objectContaining({\n                id,\n                'data-publishable-key': publishableKey,\n            }),\n        });\n    };\n\n    beforeEach(() => {\n        mockWindow = {} as BoltHostWindow;\n        scriptLoader = {} as ScriptLoader;\n        boltScriptLoader = new BoltScriptLoader(scriptLoader, mockWindow);\n    });\n\n    describe('#load()', () => {\n        const publishableKey = 'publishableKey';\n        let boltClient: BoltCheckout;\n        let boltEmbedded: BoltEmbedded;\n\n        describe('loads BoltClient', () => {\n            beforeEach(() => {\n                boltClient = getBoltClientScriptMock();\n                scriptLoader.loadScript = jest.fn(() => {\n                    mockWindow.BoltCheckout = boltClient;\n\n                    return Promise.resolve();\n                });\n            });\n\n            it('loads the bolt client script in live mode', async () => {\n                await boltScriptLoader.loadBoltClient(publishableKey);\n\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect.bolt.com/connect-bigcommerce.js',\n                    expectedScriptOptions('bolt-connect', publishableKey),\n                );\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect.bolt.com/track.js',\n                    expectedScriptOptions('bolt-track', publishableKey),\n                );\n            });\n\n            it('loads the bolt client script in test mode', async () => {\n                await boltScriptLoader.loadBoltClient(publishableKey, true);\n\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect-sandbox.bolt.com/connect-bigcommerce.js',\n                    expectedScriptOptions('bolt-connect', publishableKey),\n                );\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect-sandbox.bolt.com/track.js',\n                    expectedScriptOptions('bolt-track', publishableKey),\n                );\n            });\n\n            it('loads the bolt client script in staging mode', async () => {\n                await boltScriptLoader.loadBoltClient(publishableKey, true, {\n                    developerMode: BoltDeveloperMode.StagingMode,\n                    developerDomain: '',\n                });\n\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect-staging.bolt.com/connect-bigcommerce.js',\n                    expectedScriptOptions('bolt-connect', publishableKey),\n                );\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect-staging.bolt.com/track.js',\n                    expectedScriptOptions('bolt-track', publishableKey),\n                );\n            });\n\n            it('loads the bolt client script in sandbox mode', async () => {\n                await boltScriptLoader.loadBoltClient(publishableKey, true, {\n                    developerMode: BoltDeveloperMode.SandboxMode,\n                    developerDomain: '',\n                });\n\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect-sandbox.bolt.com/connect-bigcommerce.js',\n                    expect.any(Object),\n                );\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect-sandbox.bolt.com/track.js',\n                    expectedScriptOptions('bolt-track', publishableKey),\n                );\n            });\n\n            it('loads the bolt client script in development mode', async () => {\n                await boltScriptLoader.loadBoltClient(publishableKey, true, {\n                    developerMode: BoltDeveloperMode.DevelopmentMode,\n                    developerDomain: 'test.sample.com',\n                });\n\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect.test.sample.com/connect-bigcommerce.js',\n                    expect.any(Object),\n                );\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect.test.sample.com/track.js',\n                    expectedScriptOptions('bolt-track', publishableKey),\n                );\n            });\n\n            it('returns the BoltClient from the window', async () => {\n                const client = await boltScriptLoader.loadBoltClient(publishableKey);\n\n                expect(client).toBe(boltClient);\n            });\n\n            it('returns the Bolt Client from the window if it is already exist without provided publishableKey', async () => {\n                await boltScriptLoader.loadBoltClient(publishableKey);\n\n                const client = await boltScriptLoader.loadBoltClient();\n\n                expect(client).toBe(boltClient);\n            });\n\n            it('throws an error when window is not set', async () => {\n                scriptLoader.loadScript = jest.fn(() => {\n                    mockWindow.BoltCheckout = undefined;\n\n                    return Promise.resolve();\n                });\n\n                await expect(boltScriptLoader.loadBoltClient(publishableKey)).rejects.toThrow(\n                    PaymentMethodClientUnavailableError,\n                );\n            });\n        });\n\n        describe('loads BoltEmbedded', () => {\n            beforeEach(() => {\n                boltEmbedded = getBoltEmbeddedScriptMock();\n                scriptLoader.loadScript = jest.fn(() => {\n                    mockWindow.Bolt = () => boltEmbedded;\n\n                    return Promise.resolve();\n                });\n            });\n\n            it('loads the bolt embedded script in live mode', async () => {\n                await boltScriptLoader.loadBoltEmbedded(publishableKey);\n\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect.bolt.com/embed.js',\n                    expect.any(Object),\n                );\n            });\n\n            it('loads the bolt embedded script in test mode', async () => {\n                await boltScriptLoader.loadBoltEmbedded(publishableKey, true);\n\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect-sandbox.bolt.com/embed.js',\n                    expect.any(Object),\n                );\n            });\n\n            it('loads the bolt embedded script in staging mode', async () => {\n                await boltScriptLoader.loadBoltEmbedded(publishableKey, true, {\n                    developerMode: BoltDeveloperMode.StagingMode,\n                    developerDomain: '',\n                });\n\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect-staging.bolt.com/embed.js',\n                    expect.any(Object),\n                );\n            });\n\n            it('loads the bolt embedded script in sandbox mode', async () => {\n                await boltScriptLoader.loadBoltEmbedded(publishableKey, true, {\n                    developerMode: BoltDeveloperMode.SandboxMode,\n                    developerDomain: '',\n                });\n\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect-sandbox.bolt.com/embed.js',\n                    expect.any(Object),\n                );\n            });\n\n            it('loads the bolt embedded script in development mode', async () => {\n                await boltScriptLoader.loadBoltEmbedded(publishableKey, true, {\n                    developerMode: BoltDeveloperMode.DevelopmentMode,\n                    developerDomain: 'test.sample.com',\n                });\n\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//connect.test.sample.com/embed.js',\n                    expect.any(Object),\n                );\n            });\n\n            it('returns the BoltEmbedded from the window', async () => {\n                const client = await boltScriptLoader.loadBoltEmbedded(publishableKey);\n\n                expect(client).toBe(boltEmbedded);\n            });\n\n            it('throws an error when window is not set', async () => {\n                scriptLoader.loadScript = jest.fn(() => {\n                    mockWindow.Bolt = undefined;\n\n                    return Promise.resolve();\n                });\n\n                await expect(boltScriptLoader.loadBoltEmbedded(publishableKey)).rejects.toThrow(\n                    PaymentMethodClientUnavailableError,\n                );\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt-script-loader.ts",
    "content": "import { LoadScriptOptions, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    InvalidArgumentError,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    BoltCheckout,\n    BoltDeveloperMode,\n    BoltDeveloperModeParams,\n    BoltEmbedded,\n    BoltHostWindow,\n} from './bolt';\n\nexport default class BoltScriptLoader {\n    constructor(\n        private scriptLoader: ScriptLoader,\n        public boltHostWindow: BoltHostWindow = window,\n    ) {}\n\n    async loadBoltClient(\n        publishableKey?: string,\n        testMode?: boolean,\n        developerModeParams?: BoltDeveloperModeParams,\n        cartId?: string,\n        storefrontApiToken?: string,\n    ): Promise<BoltCheckout> {\n        if (this.boltHostWindow.BoltCheckout) {\n            return this.boltHostWindow.BoltCheckout;\n        }\n\n        if (!publishableKey) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"publishableKey\" argument is not provided.',\n            );\n        }\n\n        await this.scriptLoader.loadScript(\n            `//${this.getDomainURL(!!testMode, developerModeParams)}/connect-bigcommerce.js`,\n            this.getScriptOptions('bolt-connect', publishableKey, cartId, storefrontApiToken),\n        );\n        await this.scriptLoader.loadScript(\n            `//${this.getDomainURL(!!testMode, developerModeParams)}/track.js`,\n            this.getScriptOptions('bolt-track', publishableKey),\n        );\n\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (!this.boltHostWindow.BoltCheckout) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.boltHostWindow.BoltCheckout;\n    }\n\n    async loadBoltEmbedded(\n        publishableKey: string,\n        testMode?: boolean,\n        developerModeParams?: BoltDeveloperModeParams,\n    ): Promise<BoltEmbedded> {\n        const options: LoadScriptOptions = {\n            async: true,\n            attributes: {\n                id: 'bolt-embedded',\n            },\n        };\n\n        await this.scriptLoader.loadScript(\n            `//${this.getDomainURL(!!testMode, developerModeParams)}/embed.js`,\n            options,\n        );\n\n        if (!this.boltHostWindow.Bolt) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.boltHostWindow.Bolt(publishableKey);\n    }\n\n    getDomainURL(testMode: boolean, developerModeParams?: BoltDeveloperModeParams): string {\n        if (!testMode) {\n            return 'connect.bolt.com';\n        }\n\n        if (developerModeParams) {\n            switch (developerModeParams.developerMode) {\n                case BoltDeveloperMode.StagingMode:\n                    return 'connect-staging.bolt.com';\n\n                case BoltDeveloperMode.DevelopmentMode:\n                    return `connect.${developerModeParams.developerDomain}`;\n            }\n        }\n\n        return 'connect-sandbox.bolt.com';\n    }\n\n    private getScriptOptions(\n        id: string,\n        publishableKey: string,\n        cartId?: string,\n        storefrontApiToken?: string,\n    ): LoadScriptOptions {\n        return {\n            async: true,\n            attributes: {\n                id,\n                'data-publishable-key': publishableKey,\n                ...(cartId && { 'data-shopping-cart-id': cartId }),\n                ...(storefrontApiToken && { 'data-storefront-api-token': storefrontApiToken }),\n            },\n        };\n    }\n}\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt.mock.ts",
    "content": "import { noop } from 'lodash';\n\nimport { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BoltCallbacks, BoltCheckout, BoltClient, BoltEmbedded, BoltTransaction } from './bolt';\n\nexport function getBoltClientScriptMock(\n    shouldSucceed = false,\n    isValidTransactionReference = true,\n): BoltCheckout {\n    return {\n        configure: jest.fn(\n            (_cart: object, _hints: Record<string, unknown>, callbacks?: BoltCallbacks) => {\n                /* eslint-enable */\n                return getConfiguredBoltMock(\n                    shouldSucceed,\n                    isValidTransactionReference,\n                    callbacks || { success: noop, close: noop },\n                );\n            },\n        ),\n        getTransactionReference: jest.fn(),\n        hasBoltAccount: jest.fn(),\n        openCheckout: jest.fn(),\n        setClientCustomCallbacks: jest.fn(),\n        setOrderId: jest.fn(),\n    };\n}\n\nexport function getBoltEmbeddedScriptMock(): BoltEmbedded {\n    return {\n        create: jest.fn(() => {\n            return {\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                tokenize: jest.fn(),\n            };\n        }),\n    };\n}\n\nexport function getConfiguredBoltMock(\n    shouldSucceed: boolean,\n    isValidTransactionReference: boolean,\n    callbacks: BoltCallbacks,\n): BoltClient {\n    const mockTransaction: BoltTransaction = {\n        reference: isValidTransactionReference ? 'transactionReference' : '',\n        id: 'id',\n        status: 'complete',\n        type: 'authorization',\n        processor: 'vantiv',\n        date: 1234567890,\n        authorization: {\n            status: 'approved',\n            reason: 'reason',\n        },\n    };\n\n    return {\n        open: jest.fn(() => {\n            if (shouldSucceed) {\n                callbacks.success(mockTransaction, jest.fn());\n            } else if (callbacks.close) {\n                callbacks.close();\n            }\n        }),\n    };\n}\n\nexport function getBolt(): PaymentMethod {\n    return {\n        id: 'bolt',\n        logoUrl: '',\n        method: 'bolt',\n        supportedCards: [],\n        config: {\n            displayName: 'Bolt',\n            testMode: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        initializationData: {\n            publishableKey: 'publishableKey',\n            embeddedOneClickEnabled: false,\n        },\n        clientToken: 'clientToken',\n    };\n}\n"
  },
  {
    "path": "packages/bolt-integration/src/bolt.ts",
    "content": "import {\n    BuyNowCartRequestBody,\n    NonceInstrument,\n    PaymentMethod,\n    WithAccountCreation,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport interface BoltHostWindow extends Window {\n    BoltCheckout?: BoltCheckout;\n    BoltConnect?: BoltConnect;\n    Bolt?(publicKey: string): BoltEmbedded;\n}\n\nexport interface BoltCheckout {\n    configure(cart: BoltCart, hints: Record<string, never>, callbacks?: BoltCallbacks): BoltClient;\n    hasBoltAccount(email: string): Promise<boolean>;\n    getTransactionReference(): Promise<string | undefined>;\n    openCheckout(email: string, callbacks?: BoltOpenCheckoutCallbacks): Promise<void>;\n    setClientCustomCallbacks(callbacks: BoltCallbacks): void;\n    setOrderId(orderId: number): Promise<void>;\n}\n\nexport interface BoltConnect {\n    setupProductPageCheckout?(): void;\n}\n\nexport interface BoltOpenCheckoutCallbacks {\n    close?(): void;\n}\n\nexport interface BoltEmbeddedOptions {\n    styles: { backgroundColor: string };\n    renderSeparateFields?: boolean;\n}\n\nexport interface BoltEmbedded {\n    create(name: string, options?: BoltEmbeddedOptions): BoltEmbededField;\n}\n\nexport interface BoltEmbededField {\n    mount(element: string): void;\n    unmount(): void;\n    tokenize(): Promise<BoltEmbeddedTokenize | Error>;\n}\n\nexport interface BoltDeveloperModeParams {\n    developerMode: BoltDeveloperMode;\n    developerDomain: string;\n}\n\nexport enum BoltDeveloperMode {\n    SandboxMode = 'bolt_sandbox',\n    StagingMode = 'bolt_staging',\n    DevelopmentMode = 'bolt_development',\n}\n\nexport interface BoltClient {\n    open(): void;\n}\n\nexport interface BoltCart {\n    orderToken: string;\n}\n\nexport interface BoltCallbacks {\n    check?(): boolean;\n    onCheckoutStart?(): void;\n    onPaymentSubmit?(): void;\n    success(transaction: BoltTransaction, callback: () => void): void;\n    close?(): void;\n}\n\nexport interface BoltTransaction {\n    id: string;\n    type: string;\n    processor: string;\n    date: number;\n    reference: string;\n    status: string;\n    authorization: BoltAuthorization;\n}\n\nexport interface BoltAuthorization {\n    status: string;\n    reason: string;\n}\n\nexport interface BoltEmbeddedTokenize {\n    bin: string;\n    expiration: string;\n    last4: string;\n    postal_code?: string;\n    token: string;\n    token_type: string;\n}\n\nexport interface BoltPaymentMethod extends PaymentMethod {\n    initializationData?: BoltInitializationData;\n}\n\nexport interface BoltInitializationData {\n    publishableKey: string;\n    developerConfig: BoltDeveloperModeParams;\n    embeddedOneClickEnabled: boolean;\n}\n\nexport type BoltPaymentData = WithAccountCreation & NonceInstrument;\n\nexport interface BoltBuyNowInitializeOptions {\n    storefrontApiToken?: string;\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\n}\n\nexport enum StyleButtonSize {\n    Small = 'small',\n    Medium = 'medium',\n    Large = 'large',\n}\n\nexport enum StyleButtonShape {\n    Pill = 'pill',\n    Rect = 'rect',\n}\n\nexport interface BoltButtonStyleOptions {\n    shape?: StyleButtonShape;\n    size?: StyleButtonSize;\n}\n"
  },
  {
    "path": "packages/bolt-integration/src/create-bolt-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BoltButtonStrategy from './bolt-button-strategy';\nimport createBoltButtonStrategy from './create-bolt-button-strategy';\n\ndescribe('createBoltButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates bolt button strategy', () => {\n        const strategy = createBoltButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BoltButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bolt-integration/src/create-bolt-button-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BoltButtonStrategy from './bolt-button-strategy';\nimport BoltScriptLoader from './bolt-script-loader';\n\nconst createBoltButtonStrategy: CheckoutButtonStrategyFactory<BoltButtonStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new BoltButtonStrategy(\n        paymentIntegrationService,\n        new BoltScriptLoader(getScriptLoader()),\n    );\n};\n\nexport default toResolvableModule(createBoltButtonStrategy, [{ id: 'bolt' }]);\n"
  },
  {
    "path": "packages/bolt-integration/src/create-bolt-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BoltCustomerStrategy from './bolt-customer-strategy';\nimport createBoltCustomerStrategy from './create-bolt-customer-strategy';\n\ndescribe('createPayPalCommerceCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce customer strategy', () => {\n        const strategy = createBoltCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BoltCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bolt-integration/src/create-bolt-customer-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BoltCustomerStrategy from './bolt-customer-strategy';\nimport BoltScriptLoader from './bolt-script-loader';\n\nconst createBoltCustomerStrategy: CustomerStrategyFactory<BoltCustomerStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new BoltCustomerStrategy(\n        paymentIntegrationService,\n        new BoltScriptLoader(getScriptLoader()),\n    );\n};\n\nexport default toResolvableModule(createBoltCustomerStrategy, [{ id: 'bolt' }]);\n"
  },
  {
    "path": "packages/bolt-integration/src/create-bolt-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BoltPaymentStrategy from './bolt-payment-strategy';\nimport createBoltPaymentStrategy from './create-bolt-payment-strategy';\n\ndescribe('createBoltPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates bolt payment strategy', () => {\n        const strategy = createBoltPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BoltPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/bolt-integration/src/create-bolt-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\nimport localStorageFallback from 'local-storage-fallback';\n\nimport { AnalyticsExtraItemsManager } from '@bigcommerce/checkout-sdk/analytics';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BoltPaymentStrategy from './bolt-payment-strategy';\nimport BoltScriptLoader from './bolt-script-loader';\n\nconst createBoltPaymentStrategy: PaymentStrategyFactory<BoltPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new BoltPaymentStrategy(\n        paymentIntegrationService,\n        new BoltScriptLoader(getScriptLoader()),\n        new AnalyticsExtraItemsManager(localStorageFallback),\n    );\n};\n\nexport default toResolvableModule(createBoltPaymentStrategy, [{ id: 'bolt' }]);\n"
  },
  {
    "path": "packages/bolt-integration/src/index.ts",
    "content": "export { WithBoltPaymentInitializeOptions } from './bolt-payment-initialize-options';\nexport { default as createBoltPaymentStrategy } from './create-bolt-payment-strategy';\n\nexport { WithBoltButtonInitializeOptions } from './bolt-button-initialize-options';\nexport { default as createBoltButtonStrategy } from './create-bolt-button-strategy';\n\nexport { WithBoltCustomerInitializeOptions } from './bolt-customer-initialize-options';\nexport { default as createBoltCustomerStrategy } from './create-bolt-customer-strategy';\n"
  },
  {
    "path": "packages/bolt-integration/src/is-bolt-payment-data.spec.ts",
    "content": "import { isBoltPaymentData } from './is-bolt-payment-data';\n\ndescribe('isBoltPaymentData', () => {\n    it('payment data is matches nonce instrument', () => {\n        const paymentData = {\n            nonce: 'nonce',\n        };\n\n        expect(isBoltPaymentData(paymentData)).toBe(true);\n    });\n\n    it('payment data is matches account creation', () => {\n        const paymentData = {\n            shouldCreateAccount: false,\n        };\n\n        expect(isBoltPaymentData(paymentData)).toBe(true);\n    });\n\n    it('payment data is not matches BoltPaymentData', () => {\n        const paymentData = {\n            anyOther: 'some data',\n        };\n\n        expect(isBoltPaymentData(paymentData)).toBe(false);\n    });\n\n    it('payment data is not object', () => {\n        const paymentData = null;\n\n        expect(isBoltPaymentData(paymentData)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/bolt-integration/src/is-bolt-payment-data.ts",
    "content": "import { isObject } from 'lodash';\n\nimport { isWithAccountCreation } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BoltPaymentData } from './bolt';\n\nexport function isBoltPaymentData(paymentData: unknown): paymentData is BoltPaymentData {\n    return Boolean(\n        isObject(paymentData) &&\n            ('shouldSaveInstrument' in paymentData ||\n                'nonce' in paymentData ||\n                isWithAccountCreation(paymentData)),\n    );\n}\n"
  },
  {
    "path": "packages/bolt-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"references\": [\n        {\n          \"path\": \"./tsconfig.spec.json\"\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/bolt-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/braintree-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-shadow\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"jsdoc/check-tag-names\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\", \"*.spec.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-empty-function\": \"off\",\n                \"@typescript-eslint/no-throw-literal\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/braintree-integration/README.md",
    "content": "# braintree-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test braintree-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint braintree-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/braintree-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'braintree-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/braintree-integration',\n};\n"
  },
  {
    "path": "packages/braintree-integration/project.json",
    "content": "{\n    \"name\": \"braintree-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/braintree-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/braintree-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/braintree-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/braintree-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-ach/braintree-ach-initialize-options.ts",
    "content": "export interface BraintreeAchInitializeOptions {\n    /**\n     * A callback that returns text that should be displayed to the customer in UI for proof of authorization\n     */\n    getMandateText: () => string;\n}\n\nexport interface WithBraintreeAchPaymentInitializeOptions {\n    /**\n     * The options that are required to initialize the Braintree ACH payment\n     * method. They can be omitted unless you need to support Apple Pay.\n     */\n    braintreeach?: BraintreeAchInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-ach/braintree-ach-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getBraintreeAchPaymentMethod(): PaymentMethod {\n    return {\n        id: 'braintreeach',\n        logoUrl: '',\n        method: 'paypal-ach',\n        clientToken: 'clientToken',\n        supportedCards: [],\n        config: {\n            displayName: 'Braintree ACH',\n            isVaultingEnabled: true,\n        },\n        initializationData: {\n            isAcceleratedCheckoutEnabled: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n    };\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-ach/braintree-ach-payment-strategy.spec.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BraintreeDataCollector,\n    BraintreeScriptLoader,\n    BraintreeSdk,\n    BraintreeSDKVersionManager,\n    BraintreeUsBankAccount,\n    getDataCollectorMock,\n    getUsBankAccountMock,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentMethodFailedError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getBraintreeAchPaymentMethod } from './braintree-ach-payment-method.mock';\nimport BraintreeAchPaymentStrategy from './braintree-ach-payment-strategy';\n\ndescribe('BraintreeAchPaymentStrategy', () => {\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let braintreeSdk: BraintreeSdk;\n    let braintreeUsBankAccount: BraintreeUsBankAccount;\n    let braintreeDataCollector: BraintreeDataCollector;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let strategy: BraintreeAchPaymentStrategy;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    const methodId = 'braintreeach';\n    const paymentMethodMock = getBraintreeAchPaymentMethod();\n\n    const braintreeAchInitializationOptions = {\n        methodId,\n        braintreeach: {\n            getMandateText: () => 'text',\n        },\n    };\n\n    beforeEach(() => {\n        braintreeUsBankAccount = getUsBankAccountMock();\n        braintreeDataCollector = getDataCollectorMock();\n\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        braintreeSdk = new BraintreeSdk(braintreeScriptLoader);\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new BraintreeAchPaymentStrategy(paymentIntegrationService, braintreeSdk);\n\n        const state = paymentIntegrationService.getState();\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockImplementation(jest.fn());\n        jest.spyOn(state, 'getPaymentMethodOrThrow').mockImplementation(() => paymentMethodMock);\n        jest.spyOn(paymentIntegrationService, 'submitOrder');\n        jest.spyOn(paymentIntegrationService, 'submitPayment');\n\n        jest.spyOn(braintreeSdk, 'initialize');\n        jest.spyOn(braintreeSdk, 'deinitialize');\n        jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockResolvedValue(\n            braintreeDataCollector,\n        );\n        jest.spyOn(braintreeSdk, 'getUsBankAccount').mockResolvedValue(braintreeUsBankAccount);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize', () => {\n        it('throws an error if methodId is not provided', async () => {\n            try {\n                await strategy.initialize({ methodId: '' });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if clientToken is not defined', async () => {\n            const newPaymentMethodMock = { ...paymentMethodMock, clientToken: undefined };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => newPaymentMethodMock);\n\n            try {\n                await strategy.initialize({ methodId });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws an error if initializationData is not defined', async () => {\n            const newPaymentMethodMock = { ...paymentMethodMock, initializationData: undefined };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => newPaymentMethodMock);\n\n            try {\n                await strategy.initialize({ methodId });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('successfully initializes braintree sdk and braintree us bank account', async () => {\n            await strategy.initialize({ methodId });\n\n            expect(braintreeSdk.initialize).toHaveBeenCalledWith(paymentMethodMock.clientToken);\n            expect(braintreeSdk.getUsBankAccount).toHaveBeenCalled();\n        });\n\n        it('throws an error if there was an issue with getting braintree us bank account module', async () => {\n            jest.spyOn(braintreeSdk, 'getUsBankAccount').mockImplementation(() => {\n                throw new Error();\n            });\n\n            try {\n                await strategy.initialize({ methodId });\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodFailedError);\n            }\n        });\n    });\n\n    describe('#execute', () => {\n        it('throws an error if payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if braintree sdk is not initialized', async () => {\n            try {\n                await strategy.execute({\n                    payment: {\n                        methodId,\n                        paymentData: {},\n                    },\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('throws an error if stored instrument is not related to us bank account', async () => {\n            try {\n                await strategy.initialize({ methodId });\n                await strategy.execute({\n                    payment: {\n                        methodId,\n                        paymentData: {},\n                    },\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if getMandateText is not provided or mandateText is empty', async () => {\n            try {\n                await strategy.initialize({ methodId });\n                await strategy.execute({\n                    payment: {\n                        methodId,\n                        paymentData: {\n                            accountNumber: '10000000',\n                            routingNumber: '111111111',\n                            ownershipType: 'Personal',\n                            accountType: 'Checking',\n                        },\n                    },\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error for not-braintree exception', async () => {\n            const ExternalError = {\n                name: 'ExternalError',\n            };\n\n            jest.spyOn(braintreeUsBankAccount, 'tokenize').mockImplementation(() => {\n                throw ExternalError;\n            });\n\n            try {\n                await strategy.initialize(braintreeAchInitializationOptions);\n                await strategy.execute({\n                    payment: {\n                        methodId,\n                        paymentData: {\n                            accountNumber: '10000000',\n                            routingNumber: '111111111',\n                            ownershipType: 'Personal',\n                            accountType: 'Checking',\n                        },\n                    },\n                });\n            } catch (error: any) {\n                expect(ExternalError.name).toBe('ExternalError');\n            }\n        });\n\n        it('submits payment with braintree ach', async () => {\n            await strategy.initialize(braintreeAchInitializationOptions);\n            await strategy.execute({\n                payment: {\n                    methodId,\n                    paymentData: {\n                        firstName: 'John',\n                        lastName: 'Doe',\n                        accountNumber: '10000000',\n                        routingNumber: '111111111',\n                        ownershipType: 'Personal',\n                        accountType: 'Checking',\n                    },\n                },\n            });\n\n            expect(braintreeUsBankAccount.tokenize).toHaveBeenCalledWith({\n                bankDetails: {\n                    accountNumber: '10000000',\n                    accountType: 'checking',\n                    billingAddress: {\n                        extendedAddress: '',\n                        locality: 'Some City',\n                        postalCode: '95555',\n                        region: 'CA',\n                        streetAddress: '12345 Testing Way',\n                    },\n                    firstName: 'John',\n                    lastName: 'Doe',\n                    ownershipType: 'personal',\n                    routingNumber: '111111111',\n                },\n                mandateText: 'text',\n            });\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith({}, undefined);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    deviceSessionId: braintreeDataCollector.deviceData,\n                    formattedPayload: {\n                        tokenized_bank_account: {\n                            issuer: '111111111',\n                            masked_account_number: '0000',\n                            token: 'token',\n                        },\n                    },\n                    shouldSaveInstrument: undefined,\n                    shouldSetAsDefaultInstrument: undefined,\n                },\n            });\n        });\n\n        it('submits payment with braintree ach for business', async () => {\n            await strategy.initialize(braintreeAchInitializationOptions);\n            await strategy.execute({\n                payment: {\n                    methodId,\n                    paymentData: {\n                        businessName: 'BigCommerce',\n                        accountNumber: '10000000',\n                        routingNumber: '111111111',\n                        ownershipType: 'Business',\n                        accountType: 'Checking',\n                    },\n                },\n            });\n\n            expect(braintreeUsBankAccount.tokenize).toHaveBeenCalledWith({\n                bankDetails: {\n                    accountNumber: '10000000',\n                    accountType: 'checking',\n                    billingAddress: {\n                        extendedAddress: '',\n                        locality: 'Some City',\n                        postalCode: '95555',\n                        region: 'CA',\n                        streetAddress: '12345 Testing Way',\n                    },\n                    businessName: 'BigCommerce',\n                    ownershipType: 'business',\n                    routingNumber: '111111111',\n                },\n                mandateText: 'text',\n            });\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith({}, undefined);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    deviceSessionId: braintreeDataCollector.deviceData,\n                    formattedPayload: {\n                        tokenized_bank_account: {\n                            issuer: '111111111',\n                            masked_account_number: '0000',\n                            token: 'token',\n                        },\n                    },\n                    shouldSaveInstrument: undefined,\n                    shouldSetAsDefaultInstrument: undefined,\n                },\n            });\n        });\n\n        it('submits payment with braintree ach vaulted instrument with verification', async () => {\n            await strategy.initialize(braintreeAchInitializationOptions);\n            await strategy.execute({\n                payment: {\n                    methodId,\n                    paymentData: {\n                        instrumentId: 'AchInstrumentId',\n                        businessName: 'BigCommerce',\n                        accountNumber: '10000000',\n                        routingNumber: '111111111',\n                        ownershipType: 'Business',\n                        accountType: 'Checking',\n                    },\n                },\n            });\n\n            expect(braintreeUsBankAccount.tokenize).toHaveBeenCalledWith({\n                bankDetails: {\n                    accountNumber: '10000000',\n                    accountType: 'checking',\n                    billingAddress: {\n                        extendedAddress: '',\n                        locality: 'Some City',\n                        postalCode: '95555',\n                        region: 'CA',\n                        streetAddress: '12345 Testing Way',\n                    },\n                    businessName: 'BigCommerce',\n                    ownershipType: 'business',\n                    routingNumber: '111111111',\n                },\n                mandateText: 'The data are used for stored instrument verification',\n            });\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith({}, undefined);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    deviceSessionId: braintreeDataCollector.deviceData,\n                    instrumentId: 'AchInstrumentId',\n                    nonce: 'token',\n                    shouldSaveInstrument: undefined,\n                    shouldSetAsDefaultInstrument: undefined,\n                },\n            });\n        });\n\n        it('throw an error if vaulting is disabled', async () => {\n            const state = paymentIntegrationService.getState();\n\n            jest.spyOn(state, 'getPaymentMethodOrThrow').mockImplementation(() => ({\n                ...paymentMethodMock,\n                config: {\n                    ...paymentMethodMock.config,\n                    isVaultingEnabled: false,\n                },\n            }));\n\n            await strategy.initialize(braintreeAchInitializationOptions);\n\n            await expect(\n                strategy.execute({\n                    payment: {\n                        methodId,\n                        paymentData: {\n                            instrumentId: 'AchInstrumentId',\n                            businessName: 'BigCommerce',\n                            accountNumber: '10000000',\n                            routingNumber: '111111111',\n                            ownershipType: 'Business',\n                            accountType: 'Checking',\n                        },\n                    },\n                }),\n            ).rejects.toThrow(InvalidArgumentError);\n        });\n    });\n\n    describe('#deinitialize', () => {\n        it('deinitializes braintree sdk', async () => {\n            await strategy.deinitialize();\n\n            expect(braintreeSdk.deinitialize).toHaveBeenCalled();\n        });\n    });\n\n    describe('#finalize', () => {\n        it('throw an error by default', async () => {\n            try {\n                await strategy.finalize();\n            } catch (error) {\n                expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-ach/braintree-ach-payment-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-ach/create-braintree-ach-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeAchPaymentStrategy from './braintree-ach-payment-strategy';\nimport createBraintreeAchPaymentStrategy from './create-braintree-ach-payment-strategy';\n\ndescribe('createBraintreeAchPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates braintree ach payment strategy', () => {\n        const strategy = createBraintreeAchPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreeAchPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-ach/create-braintree-ach-payment-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-credit-card/braintree-credit-card-payment-initialize-options.ts",
    "content": "import {\n    BraintreeError,\n    BraintreeFormOptions,\n    BraintreeThreeDSecureOptions,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport interface BraintreeCreditCardPaymentInitializeOptions {\n    /**\n     * A list of card brands that are not supported by the merchant.\n     *\n     * List of supported brands by braintree can be found here: https://braintree.github.io/braintree-web/current/module-braintree-web_hosted-fields.html#~field\n     * search for `supportedCardBrands` property.\n     *\n     * List of credit cards brands:\n     * 'visa',\n     * 'mastercard',\n     * 'american-express',\n     * 'diners-club',\n     * 'discover',\n     * 'jcb',\n     * 'union-pay',\n     * 'maestro',\n     * 'elo',\n     * 'mir',\n     * 'hiper',\n     * 'hipercard'\n     *\n     * */\n    unsupportedCardBrands?: string[];\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    containerId?: string;\n\n    threeDSecure?: BraintreeThreeDSecureOptions;\n\n    /**\n     * @alpha\n     * Please note that this option is currently in an early stage of\n     * development. Therefore the API is unstable and not ready for public\n     * consumption.\n     */\n    form?: BraintreeFormOptions;\n\n    /**\n     * The location to insert the Pay Later Messages.\n     */\n    bannerContainerId?: string;\n\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n\n    /**\n     * A callback for submitting payment form that gets called\n     * when buyer approved PayPal account.\n     */\n    submitForm?(): void;\n\n    /**\n     * A callback that gets called if unable to submit payment.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onPaymentError?(error: BraintreeError | StandardError): void;\n\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: unknown): void;\n}\n\nexport interface WithBraintreeCreditCardPaymentInitializeOptions {\n    /**\n     * The options that are required to initialize Braintree PayPal wallet button on Product and Cart page.\n     */\n    braintree?: BraintreeCreditCardPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-credit-card/braintree-credit-card-payment-strategy.spec.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\nimport { merge } from 'lodash';\n\nimport {\n    BraintreeError,\n    BraintreeErrorType,\n    BraintreeFastlane,\n    BraintreeIntegrationService,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n    getBraintree,\n    getFastlaneMock,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    MissingDataError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    getConfig,\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeHostedForm from '../braintree-hosted-form/braintree-hosted-form';\nimport {\n    getBillingAddress,\n    getThreeDSecureMock,\n    getThreeDSecureOptionsMock,\n    getTokenizeResponseBody,\n} from '../mocks/braintree.mock';\n\nimport {\n    BraintreeCreditCardPaymentInitializeOptions,\n    WithBraintreeCreditCardPaymentInitializeOptions,\n} from './braintree-credit-card-payment-initialize-options';\nimport BraintreeCreditCardPaymentStrategy from './braintree-credit-card-payment-strategy';\n\ndescribe('BraintreeCreditCardPaymentStrategy', () => {\n    let braintreeCreditCardPaymentStrategy: BraintreeCreditCardPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let braintreeIntegrationService: BraintreeIntegrationService;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let braintreeHostedForm: BraintreeHostedForm;\n    let paymentMethod: PaymentMethod;\n    let braintreeFastlaneMock: BraintreeFastlane;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    beforeEach(() => {\n        const methodId = 'braintree';\n\n        paymentMethod = {\n            ...getBraintree(),\n            id: methodId,\n            initializationData: {\n                isAcceleratedCheckoutEnabled: true,\n                shouldRunAcceleratedCheckout: true,\n            },\n        };\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        braintreeFastlaneMock = getFastlaneMock();\n        braintreeIntegrationService = new BraintreeIntegrationService(\n            braintreeScriptLoader,\n            window,\n        );\n        braintreeHostedForm = new BraintreeHostedForm(\n            braintreeScriptLoader,\n            braintreeSDKVersionManager,\n        );\n        braintreeCreditCardPaymentStrategy = new BraintreeCreditCardPaymentStrategy(\n            paymentIntegrationService,\n            braintreeIntegrationService,\n            braintreeHostedForm,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(braintreeIntegrationService, 'getSessionId').mockResolvedValue('sessionId');\n        jest.spyOn(braintreeIntegrationService, 'getBraintreeFastlane').mockResolvedValue(\n            braintreeFastlaneMock,\n        );\n        jest.spyOn(braintreeIntegrationService, 'initialize');\n        braintreeScriptLoader.loadClient = jest.fn();\n        jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n            create: jest.fn(),\n        });\n        jest.spyOn(braintreeIntegrationService, 'getClient').mockResolvedValue({\n            request: jest.fn(),\n        });\n        jest.spyOn(braintreeHostedForm, 'initialize');\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(braintreeIntegrationService, 'teardown');\n        jest.spyOn(braintreeHostedForm, 'deinitialize');\n        jest.spyOn(paymentIntegrationService, 'submitPayment');\n        jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n            create: jest.fn(),\n        });\n        jest.spyOn(braintreeScriptLoader, 'loadClient').mockResolvedValue({\n            create: jest.fn().mockResolvedValue({\n                request: jest.fn(),\n            }),\n        });\n        jest.spyOn(braintreeIntegrationService, 'tokenizeCard');\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('creates an instance of the braintree payment strategy', () => {\n        expect(braintreeCreditCardPaymentStrategy).toBeInstanceOf(\n            BraintreeCreditCardPaymentStrategy,\n        );\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if client token is missing', async () => {\n            paymentMethod.clientToken = '';\n\n            try {\n                await braintreeCreditCardPaymentStrategy.initialize({\n                    methodId: paymentMethod.id,\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('initializes the strategy', async () => {\n            paymentMethod.config.isHostedFormEnabled = false;\n\n            const options: PaymentInitializeOptions &\n                WithBraintreeCreditCardPaymentInitializeOptions = {\n                braintree: {\n                    form: {\n                        fields: {\n                            cardNumberVerification: {\n                                instrumentId: 'instrument123',\n                                containerId: 'containerId',\n                            },\n                        },\n                    },\n                    unsupportedCardBrands: [],\n                },\n                methodId: paymentMethod.id,\n            };\n\n            await braintreeCreditCardPaymentStrategy.initialize(options);\n\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n                paymentMethod.clientToken,\n                undefined,\n            );\n            expect(braintreeIntegrationService.getSessionId).toHaveBeenCalled();\n\n            jest.spyOn(braintreeHostedForm, 'initialize');\n        });\n    });\n\n    it('initializes the strategy as hosted form if feature is enabled and configuration is passed', async () => {\n        paymentMethod.config.isHostedFormEnabled = true;\n        jest.spyOn(braintreeHostedForm, 'isInitialized').mockReturnValue(true);\n\n        const options = {\n            methodId: paymentMethod.id,\n            braintree: {\n                form: {\n                    fields: {\n                        cardName: { containerId: 'cardName' },\n                        cardNumber: { containerId: 'cardNumber' },\n                        cardExpiry: { containerId: 'cardExpiry' },\n                    },\n                },\n                unsupportedCardBrands: ['american-express', 'diners-club'],\n            },\n        };\n\n        await braintreeCreditCardPaymentStrategy.initialize(options);\n\n        expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n            paymentMethod.clientToken,\n            undefined,\n        );\n        expect(braintreeHostedForm.initialize).toHaveBeenCalledWith(\n            options.braintree.form,\n            options.braintree.unsupportedCardBrands,\n            'clientToken',\n        );\n        expect(braintreeIntegrationService.getSessionId).toHaveBeenCalled();\n    });\n\n    it('initializes braintree fastlane sdk', async () => {\n        const cart = getCart();\n        const storeConfig = getConfig().storeConfig;\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfig,\n        );\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getPaymentProviderCustomer',\n        ).mockReturnValue(undefined);\n\n        paymentMethod.initializationData.isAcceleratedCheckoutEnabled = true;\n\n        const options: PaymentInitializeOptions & WithBraintreeCreditCardPaymentInitializeOptions =\n            {\n                methodId: paymentMethod.id,\n                braintree: {\n                    threeDSecure: getThreeDSecureOptionsMock(),\n                    form: {\n                        fields: {\n                            cardName: { containerId: 'cardName' },\n                            cardNumber: { containerId: 'cardNumber' },\n                            cardExpiry: { containerId: 'cardExpiry' },\n                        },\n                    },\n                    unsupportedCardBrands: [],\n                },\n            };\n\n        await braintreeCreditCardPaymentStrategy.initialize(options);\n\n        expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n            paymentMethod.clientToken,\n            options.braintree?.threeDSecure,\n        );\n        expect(braintreeIntegrationService.getBraintreeFastlane).toHaveBeenCalled();\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            await braintreeCreditCardPaymentStrategy.deinitialize();\n\n            expect(braintreeIntegrationService.teardown).toHaveBeenCalled();\n            expect(braintreeHostedForm.deinitialize).toHaveBeenCalled();\n        });\n\n        it('resets hosted form initialization state on strategy deinitialization', async () => {\n            jest.spyOn(braintreeIntegrationService, 'getClient').mockResolvedValue({\n                request: jest.fn().mockResolvedValue(getTokenizeResponseBody()),\n            });\n            jest.spyOn(braintreeHostedForm, 'tokenize');\n            braintreeHostedForm.deinitialize = jest.fn(() => Promise.resolve());\n            paymentMethod.config.isHostedFormEnabled = true;\n\n            await braintreeCreditCardPaymentStrategy.initialize({\n                methodId: paymentMethod.id,\n                braintree: {\n                    form: {\n                        fields: {\n                            cardName: { containerId: 'cardName' },\n                            cardNumber: { containerId: 'cardNumber' },\n                            cardExpiry: { containerId: 'cardExpiry' },\n                        },\n                    },\n                    unsupportedCardBrands: [],\n                },\n            });\n\n            await braintreeCreditCardPaymentStrategy.deinitialize();\n            await braintreeCreditCardPaymentStrategy.execute(getOrderRequestBody());\n\n            expect(braintreeHostedForm.tokenize).not.toHaveBeenCalled();\n            expect(braintreeIntegrationService.teardown).toHaveBeenCalled();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            try {\n                await braintreeCreditCardPaymentStrategy.finalize();\n            } catch (error) {\n                expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n            }\n        });\n    });\n\n    describe('#execute()', () => {\n        let orderRequestBody: OrderRequestBody;\n\n        beforeEach(() => {\n            orderRequestBody = getOrderRequestBody();\n        });\n\n        describe('common execution behaviour', () => {\n            it('calls submit order with the order request information', async () => {\n                jest.spyOn(braintreeIntegrationService, 'getClient').mockResolvedValue({\n                    request: jest.fn().mockResolvedValue(getTokenizeResponseBody()),\n                });\n\n                await braintreeCreditCardPaymentStrategy.execute(getOrderRequestBody());\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            });\n\n            describe('non hosted form behaviour', () => {\n                it('passes on optional flags to save and to make default', async () => {\n                    jest.spyOn(braintreeIntegrationService, 'getClient').mockResolvedValue({\n                        request: jest.fn().mockResolvedValue(getTokenizeResponseBody()),\n                    });\n\n                    const payload = merge({}, getOrderRequestBody(), {\n                        payment: {\n                            paymentData: {\n                                shouldSaveInstrument: true,\n                                shouldSetAsDefaultInstrument: true,\n                            },\n                        },\n                    });\n\n                    await braintreeCreditCardPaymentStrategy.execute(payload);\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                shouldSaveInstrument: true,\n                                shouldSetAsDefaultInstrument: true,\n                            }),\n                        }),\n                    );\n                });\n\n                it('does nothing to VaultedInstruments', async () => {\n                    const payload = {\n                        ...getOrderRequestBody(),\n                        payment: {\n                            methodId: 'braintree',\n                            paymentData: {\n                                instrumentId: 'my_instrument_id',\n                                iin: '123123',\n                            },\n                        },\n                    };\n\n                    await braintreeCreditCardPaymentStrategy.execute(payload);\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                        payload.payment,\n                    );\n                });\n\n                it('tokenizes the card', async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment');\n                    jest.spyOn(braintreeHostedForm, 'tokenize');\n                    jest.spyOn(braintreeIntegrationService, 'getClient').mockResolvedValue({\n                        request: jest.fn().mockResolvedValue(getTokenizeResponseBody()),\n                    });\n\n                    const expected = {\n                        ...getOrderRequestBody().payment,\n                        paymentData: {\n                            deviceSessionId: 'sessionId',\n                            nonce: 'demo_nonce',\n                            shouldSaveInstrument: false,\n                            shouldSetAsDefaultInstrument: false,\n                        },\n                    };\n\n                    await braintreeCreditCardPaymentStrategy.initialize({\n                        methodId: paymentMethod.id,\n                    });\n                    await braintreeCreditCardPaymentStrategy.execute(getOrderRequestBody());\n\n                    expect(braintreeIntegrationService.tokenizeCard).toHaveBeenCalledWith(\n                        getOrderRequestBody().payment,\n                        getBillingAddress(),\n                    );\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expected);\n                });\n\n                it('verifies the card if 3ds is enabled', async () => {\n                    jest.spyOn(braintreeIntegrationService, 'get3DS').mockResolvedValue({\n                        ...getThreeDSecureMock(),\n                    });\n                    jest.spyOn(braintreeIntegrationService, 'verifyCard').mockResolvedValue({\n                        nonce: 'demo_nonce',\n                    });\n                    jest.spyOn(braintreeIntegrationService, 'getClient').mockResolvedValue({\n                        request: jest.fn().mockResolvedValue(getTokenizeResponseBody()),\n                    });\n\n                    const options3ds = {\n                        methodId: paymentMethod.id,\n                        braintree: {\n                            threeDSecure: getThreeDSecureOptionsMock(),\n                            form: {\n                                fields: {},\n                                cardCodeVerification: {\n                                    instrumentId: 'my_instrument_id',\n                                    containerId: 'my_container_id',\n                                },\n                            },\n                            unsupportedCardBrands: [],\n                        },\n                    };\n\n                    paymentMethod.config.is3dsEnabled = true;\n\n                    await braintreeCreditCardPaymentStrategy.initialize(options3ds);\n\n                    const expected = {\n                        ...getOrderRequestBody().payment,\n                        paymentData: {\n                            deviceSessionId: 'sessionId',\n                            nonce: 'demo_nonce',\n                            shouldSaveInstrument: false,\n                            shouldSetAsDefaultInstrument: false,\n                        },\n                    };\n\n                    await braintreeCreditCardPaymentStrategy.execute(getOrderRequestBody());\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expected);\n                });\n\n                it('calls onPaymentError callback and rejects when verifyCard fails with 3DS validation error', async () => {\n                    const braintree3DSError: BraintreeError = {\n                        code: 'THREEDS_LOOKUP_VALIDATION_ERROR',\n                        type: BraintreeErrorType.Customer,\n                        name: 'BraintreeError',\n                        message:\n                            \"The data passed in 'verifyCard' did not pass validation checks. See details for more info.\",\n                    };\n\n                    const onPaymentError = jest.fn();\n\n                    jest.spyOn(braintreeIntegrationService, 'verifyCard').mockRejectedValue(\n                        braintree3DSError,\n                    );\n                    jest.spyOn(braintreeIntegrationService, 'get3DS').mockResolvedValue({\n                        ...getThreeDSecureMock(),\n                    });\n\n                    const options3ds = {\n                        methodId: paymentMethod.id,\n                        braintree: {\n                            threeDSecure: getThreeDSecureOptionsMock(),\n                            onPaymentError,\n                        },\n                    };\n\n                    paymentMethod.config.is3dsEnabled = true;\n\n                    await braintreeCreditCardPaymentStrategy.initialize(options3ds);\n\n                    await expect(\n                        braintreeCreditCardPaymentStrategy.execute(getOrderRequestBody()),\n                    ).rejects.toBeUndefined();\n\n                    expect(onPaymentError).toHaveBeenCalledWith(\n                        expect.objectContaining({\n                            message: 'THREEDS_VERIFICATION_FAILED',\n                        }),\n                    );\n                });\n            });\n        });\n\n        describe('hosted form behaviour', () => {\n            let initializeOptions: BraintreeCreditCardPaymentInitializeOptions;\n\n            beforeEach(() => {\n                jest.spyOn(braintreeHostedForm, 'tokenizeForStoredCardVerification');\n                jest.spyOn(braintreeHostedForm, 'tokenize');\n                jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n                    create: jest.fn().mockReturnValue({\n                        on: jest.fn(),\n                        getState: jest.fn().mockReturnValue({\n                            fields: {},\n                        }),\n                        tokenize: jest.fn().mockResolvedValue({\n                            nonce: 'my_tokenized_card_with_hosted_form',\n                        }),\n                    }),\n                });\n\n                initializeOptions = {\n                    form: {\n                        fields: {\n                            cardName: { containerId: 'cardName' },\n                            cardNumber: { containerId: 'cardNumber' },\n                            cardExpiry: { containerId: 'cardExpiry' },\n                        },\n                    },\n                    unsupportedCardBrands: [],\n                };\n\n                paymentMethod.config.isHostedFormEnabled = true;\n            });\n\n            it('tokenizes payment data through hosted form and submits it', async () => {\n                await braintreeCreditCardPaymentStrategy.initialize({\n                    methodId: paymentMethod.id,\n                    braintree: initializeOptions,\n                });\n\n                await braintreeCreditCardPaymentStrategy.execute(orderRequestBody);\n\n                expect(braintreeHostedForm.tokenize).toHaveBeenCalledWith(getBillingAddress());\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    ...orderRequestBody.payment,\n                    paymentData: {\n                        deviceSessionId: 'sessionId',\n                        nonce: 'my_tokenized_card_with_hosted_form',\n                        shouldSaveInstrument: false,\n                        shouldSetAsDefaultInstrument: false,\n                    },\n                });\n            });\n\n            it('passes save instrument flags if set', async () => {\n                const payload = merge({}, orderRequestBody, {\n                    payment: {\n                        paymentData: {\n                            shouldSaveInstrument: true,\n                            shouldSetAsDefaultInstrument: true,\n                        },\n                    },\n                });\n\n                await braintreeCreditCardPaymentStrategy.initialize({\n                    methodId: paymentMethod.id,\n                    braintree: initializeOptions,\n                });\n\n                await braintreeCreditCardPaymentStrategy.execute(payload);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            shouldSaveInstrument: true,\n                            shouldSetAsDefaultInstrument: true,\n                        }),\n                    }),\n                );\n            });\n\n            it('does nothing to VaultedInstruments', async () => {\n                const payload = {\n                    ...orderRequestBody,\n                    payment: {\n                        methodId: paymentMethod.id,\n                        paymentData: {\n                            instrumentId: 'my_instrument_id',\n                        },\n                    },\n                };\n\n                await braintreeCreditCardPaymentStrategy.execute(payload);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    payload.payment,\n                );\n            });\n\n            it('throws an error if loadHostedFields finished with an error related to an invalid hosted field when the strategy is not deinitialized', async () => {\n                const braintreeError: BraintreeError = {\n                    code: 'HOSTED_FIELDS_INVALID_FIELD_SELECTOR',\n                    type: BraintreeErrorType.Merchant,\n                    name: 'BraintreeError',\n                    message: 'Selector does not reference a valid DOM node.',\n                };\n\n                jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockRejectedValue(\n                    braintreeError,\n                );\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'isPaymentMethodInitialized',\n                ).mockReturnValue(true);\n\n                try {\n                    await braintreeCreditCardPaymentStrategy.initialize({\n                        methodId: paymentMethod.id,\n                        braintree: initializeOptions,\n                    });\n                } catch (error: Error | any) {\n                    expect(error.message).toEqual(braintreeError.message);\n                }\n            });\n        });\n\n        describe('3DS additional action with stored cards', () => {\n            beforeEach(() => {\n                jest.spyOn(paymentIntegrationService, 'submitOrder').mockResolvedValue({} as any);\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getCardInstrumentOrThrow',\n                ).mockReturnValue({\n                    bigpayToken: 'my_instrument_id',\n                    brand: 'visa',\n                    defaultInstrument: false,\n                    expiryMonth: '12',\n                    expiryYear: '2025',\n                    iin: '411111',\n                    last4: '1111',\n                    provider: 'braintree',\n                    trustedShippingAddress: false,\n                    method: 'braintree',\n                    type: 'card',\n                    untrustedShippingCardVerificationMode: 'pan' as any,\n                });\n                jest.spyOn(\n                    braintreeIntegrationService,\n                    'challenge3DSVerification',\n                ).mockResolvedValue({\n                    nonce: '3ds_verified_nonce',\n                    details: {},\n                    description: 'verified',\n                    liabilityShiftPossible: true,\n                    liabilityShifted: true,\n                } as any);\n            });\n\n            it('preserves shouldSetAsDefaultInstrument flag when stored card requires 3DS and user wants to set as default', async () => {\n                const threeDSecureError = {\n                    name: 'BraintreePaymentRequest3DSError',\n                    body: {\n                        status: 'error',\n                        errors: [{ code: 'three_d_secure_required' }],\n                        three_ds_result: {\n                            payer_auth_request: 'stored_card_nonce',\n                        },\n                    },\n                };\n\n                const payload = {\n                    ...orderRequestBody,\n                    payment: {\n                        methodId: paymentMethod.id,\n                        paymentData: {\n                            instrumentId: 'my_instrument_id',\n                            shouldSaveInstrument: false,\n                            shouldSetAsDefaultInstrument: true,\n                        },\n                    },\n                };\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment')\n                    .mockRejectedValueOnce(threeDSecureError)\n                    .mockResolvedValueOnce({} as any);\n\n                await braintreeCreditCardPaymentStrategy.initialize({\n                    methodId: paymentMethod.id,\n                });\n\n                await braintreeCreditCardPaymentStrategy.execute(payload);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                    ...payload.payment,\n                    paymentData: {\n                        instrumentId: 'my_instrument_id',\n                        shouldSaveInstrument: false,\n                        shouldSetAsDefaultInstrument: true,\n                        deviceSessionId: 'sessionId',\n                        nonce: '3ds_verified_nonce',\n                    },\n                });\n            });\n\n            it('does not include save flags when both are false during 3DS verification with stored card', async () => {\n                const threeDSecureError = {\n                    name: 'BraintreePaymentRequest3DSError',\n                    body: {\n                        status: 'error',\n                        errors: [{ code: 'three_d_secure_required' }],\n                        three_ds_result: {\n                            payer_auth_request: 'stored_card_nonce',\n                        },\n                    },\n                };\n\n                const payload = {\n                    ...orderRequestBody,\n                    payment: {\n                        methodId: paymentMethod.id,\n                        paymentData: {\n                            instrumentId: 'my_instrument_id',\n                            shouldSaveInstrument: false,\n                            shouldSetAsDefaultInstrument: false,\n                        },\n                    },\n                };\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment')\n                    .mockRejectedValueOnce(threeDSecureError)\n                    .mockResolvedValueOnce({} as any);\n\n                await braintreeCreditCardPaymentStrategy.initialize({\n                    methodId: paymentMethod.id,\n                });\n\n                await braintreeCreditCardPaymentStrategy.execute(payload);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                    ...payload.payment,\n                    paymentData: {\n                        deviceSessionId: 'sessionId',\n                        nonce: '3ds_verified_nonce',\n                    },\n                });\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-credit-card/braintree-credit-card-payment-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-credit-card/create-braintree-credit-card-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createBraintreeCreditCardPaymentStrategy from './create-braintree-credit-card-payment-strategy';\nimport BraintreeCreditCardPaymentStrategy from './braintree-credit-card-payment-strategy';\n\ndescribe('createBraintreeCreditCardPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates braintree credit card payment strategy', () => {\n        const strategy = createBraintreeCreditCardPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreeCreditCardPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-credit-card/create-braintree-credit-card-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BraintreeHostWindow,\n    BraintreeIntegrationService,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeCreditCardPaymentStrategy from './braintree-credit-card-payment-strategy';\nimport BraintreeHostedForm from '../braintree-hosted-form/braintree-hosted-form';\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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-customer-initialize-options.ts",
    "content": "import { BraintreeFastlaneStylesOption } from '@bigcommerce/checkout-sdk/braintree-utils';\n\n/**\n * A set of options that are optional to initialize the Braintree Fastlane customer strategy\n * that are responsible for Braintree Fastlane components styling and initialization\n *\n * ```js\n * service.initializeCustomer({\n *     methodId: 'braintreeacceleratedcheckout', // 'braintree' only for A/B testing\n *     braintreefastlane: {\n *         styles: {\n *              root: {\n *                  backgroundColorPrimary: 'transparent',\n *                  errorColor: '#C40B0B',\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\n *              },\n *              input: {\n *                  borderRadius: '0.25rem',\n *                  borderColor: '#9E9E9E',\n *                  focusBorderColor: '#4496F6',\n *              },\n *              toggle: {\n *                  colorPrimary: '#0F005E',\n *                  colorSecondary: '#ffffff',\n *              },\n *              text: {\n *                  body: {\n *                      color: '#222222',\n *                      fontSize: '1rem',\n *                  },\n *                  caption: {\n *                      color: '#515151',\n *                      fontSize: '0.875rem',\n *                  },\n *              },\n *              branding: 'light',\n *         },\n *     },\n * });\n * ```\n */\nexport default interface BraintreeFastlaneCustomerInitializeOptions {\n    /**\n     * Is a stylisation options for customizing PayPal Fastlane components\n     *\n     * Note: the styles for all Braintree Fastlane strategies should be the same,\n     * because they will be provided to PayPal library only for the first strategy initialization\n     * no matter what strategy was initialised first\n     */\n    styles?: BraintreeFastlaneStylesOption;\n}\n\nexport interface WithBraintreeFastlaneCustomerInitializeOptions {\n    braintreefastlane?: BraintreeFastlaneCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-customer-strategy.spec.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BraintreeIntegrationService,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n    getBraintree,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    InvalidArgumentError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    getCustomer,\n    getGuestCustomer,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeFastlaneCustomerStrategy from './braintree-fastlane-customer-strategy';\nimport BraintreeFastlaneUtils from './braintree-fastlane-utils';\n\ndescribe('BraintreeFastlaneCustomerStrategy', () => {\n    let braintreeFastlaneUtils: BraintreeFastlaneUtils;\n    let braintreeIntegrationService: BraintreeIntegrationService;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let strategy: BraintreeFastlaneCustomerStrategy;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    const customer = getGuestCustomer();\n    const storeConfig = getConfig().storeConfig;\n\n    const methodId = 'braintreeacceleratedcheckout';\n    const initializationOptions = { methodId };\n    const executionOptions = {\n        methodId,\n        checkoutPaymentMethodExecuted: jest.fn(),\n        continueWithCheckoutCallback: jest.fn(),\n    };\n    const paymentMethod = {\n        ...getBraintree(),\n        id: methodId,\n        initializationData: {\n            isAcceleratedCheckoutEnabled: true,\n            shouldRunAcceleratedCheckout: true,\n        },\n    };\n\n    beforeEach(() => {\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        braintreeIntegrationService = new BraintreeIntegrationService(\n            braintreeScriptLoader,\n            window,\n        );\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeFastlaneUtils = new BraintreeFastlaneUtils(\n            paymentIntegrationService,\n            braintreeIntegrationService,\n        );\n\n        strategy = new BraintreeFastlaneCustomerStrategy(\n            paymentIntegrationService,\n            braintreeFastlaneUtils,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod');\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue(\n            customer,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfig,\n        );\n        jest.spyOn(braintreeFastlaneUtils, 'initializeBraintreeFastlaneOrThrow').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(braintreeFastlaneUtils, 'runPayPalAuthenticationFlowOrThrow').mockImplementation(\n            jest.fn(),\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        it('throw an error if the method id is not provided', async () => {\n            try {\n                await strategy.initialize({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('initializes Braintree Fastlane', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    isFastlaneEnabled: true,\n                    isAcceleratedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockPaymentMethod);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n            expect(braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow).toHaveBeenCalledWith(\n                methodId,\n                undefined,\n            );\n        });\n\n        it('initializes braintree fastlane with correct styles', async () => {\n            const newInitializationOptions = {\n                methodId,\n                braintreefastlane: {\n                    onChange: jest.fn(),\n                    styles: {\n                        root: {\n                            backgroundColorPrimary: 'green',\n                            errorColor: 'orange',\n                        },\n                        input: {\n                            borderRadius: '5px',\n                        },\n                    },\n                },\n            };\n\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    isAcceleratedCheckoutEnabled: true,\n                    shouldRunAcceleratedCheckout: true,\n                    isFastlaneEnabled: true,\n                    isFastlaneStylingEnabled: true,\n                    fastlaneStyles: {\n                        fastlaneRootSettingsBackgroundColor: 'red',\n                        fastlaneBrandingSettings: 'branding',\n                    },\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockPaymentMethod);\n\n            await strategy.initialize(newInitializationOptions);\n\n            expect(braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow).toHaveBeenCalledWith(\n                methodId,\n                {\n                    root: {\n                        backgroundColorPrimary: 'red',\n                        errorColor: 'orange',\n                    },\n                    input: {\n                        borderRadius: '5px',\n                    },\n                    branding: 'branding',\n                },\n            );\n        });\n\n        it('loads another payment method if the primary load throws an error', async () => {\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockImplementationOnce(\n                () => {\n                    throw new Error();\n                },\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith('braintree');\n        });\n\n        it('does not throw anything if there is an error with Fastlane initialization', async () => {\n            jest.spyOn(\n                braintreeFastlaneUtils,\n                'initializeBraintreeFastlaneOrThrow',\n            ).mockImplementation(() => Promise.reject());\n\n            await strategy.initialize(initializationOptions);\n\n            try {\n                expect(\n                    braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow,\n                ).toHaveBeenCalled();\n            } catch (error) {\n                expect(error).toBeUndefined();\n            }\n        });\n    });\n\n    describe('#executePaymentMethodCheckout()', () => {\n        it('throws an error if continueWithCheckoutCallback is not provided or it is not a function', async () => {\n            try {\n                await strategy.initialize({ methodId });\n                await strategy.executePaymentMethodCheckout();\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('authenticates user with PayPal Fastlane', async () => {\n            await strategy.initialize({ methodId });\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow).toHaveBeenCalled();\n        });\n\n        it('calls checkoutPaymentMethodExecuted and continueWithCheckoutCallback after payment method execution', async () => {\n            await strategy.initialize({ methodId });\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(executionOptions.checkoutPaymentMethodExecuted).toHaveBeenCalled();\n            expect(executionOptions.continueWithCheckoutCallback).toHaveBeenCalled();\n        });\n\n        it('does not run authentication flow for store member', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    isFastlaneEnabled: true,\n                    isAcceleratedCheckoutEnabled: true,\n                    shouldRunAcceleratedCheckout: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockPaymentMethod);\n\n            const storeMember = getCustomer();\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue(\n                storeMember,\n            );\n\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(\n                braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow,\n            ).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#shouldRunAuthenticationFlow() & #runPayPalAuthenticationFlowOrThrow()', () => {\n        it('authenticates customer with PayPal Fastlane', async () => {\n            await strategy.initialize({ methodId });\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n            expect(braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow).toHaveBeenCalledWith(\n                methodId,\n                undefined,\n            );\n            expect(braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow).toHaveBeenCalled();\n        });\n\n        it('does not authenticate customer with PayPal Fastlane if it should not run due to A/B testing', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    isAcceleratedCheckoutEnabled: true,\n                    shouldRunAcceleratedCheckout: false,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockPaymentMethod);\n\n            await strategy.initialize({ methodId });\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n            expect(braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow).toHaveBeenCalled();\n            expect(\n                braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow,\n            ).not.toHaveBeenCalled();\n        });\n\n        it('does not authenticate customer with PayPal Fastlane if feature is disabled', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    isFastlaneEnabled: false,\n                    shouldRunAcceleratedCheckout: false,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockPaymentMethod);\n\n            await strategy.initialize({ methodId });\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n            expect(\n                braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow,\n            ).not.toHaveBeenCalled();\n            expect(\n                braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow,\n            ).not.toHaveBeenCalled();\n        });\n\n        // Info: valid only for A/B testing\n        it('loads extra payment method if braintreeacceleratedcheckout didnt load before', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    isAcceleratedCheckoutEnabled: true,\n                    shouldRunAcceleratedCheckout: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockPaymentMethod);\n\n            await strategy.initialize({ methodId: 'braintree' });\n            await strategy.executePaymentMethodCheckout({\n                ...executionOptions,\n                methodId: 'braintree',\n            });\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith('braintree');\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n            expect(braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow).toHaveBeenCalled();\n            expect(braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow).toHaveBeenCalled();\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('calls default sign in method', async () => {\n            const credentials = {\n                email: 'test@test.com',\n                password: '123',\n            };\n\n            await strategy.initialize({ methodId });\n            await strategy.signIn(credentials);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                undefined,\n            );\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('calls default sign out method', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            await expect(strategy.deinitialize()).resolves.not.toThrow();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-customer-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-payment-initialize-options.ts",
    "content": "import { BraintreeFastlaneStylesOption } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { CardInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * A set of options that are required to initialize the Braintree Fastlane payment\n * method for presenting on the page.\n *\n *\n * Also, Braintree requires specific options to initialize Braintree Fastlane Credit Card Component\n * ```html\n * <!-- This is where the Braintree Credit Card Component will be inserted -->\n * <div id=\"container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'braintreeacceleratedcheckout',\n *     braintreefastlane: {\n *         onInit: (renderPayPalComponentMethod) => renderPayPalComponentMethod('#container-id'),\n *         onChange: (showPayPalCardSelector) => showPayPalCardSelector(),\n *         styles: {\n *              root: {\n *                  backgroundColorPrimary: 'transparent',\n *                  errorColor: '#C40B0B',\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\n *              },\n *              input: {\n *                  borderRadius: '0.25rem',\n *                  borderColor: '#9E9E9E',\n *                  focusBorderColor: '#4496F6',\n *              },\n *              toggle: {\n *                  colorPrimary: '#0F005E',\n *                  colorSecondary: '#ffffff',\n *              },\n *              text: {\n *                  body: {\n *                      color: '#222222',\n *                      fontSize: '1rem',\n *                  },\n *                  caption: {\n *                      color: '#515151',\n *                      fontSize: '0.875rem',\n *                  },\n *              },\n *              branding: 'light',\n *         },\n *     },\n * });\n * ```\n */\nexport default interface BraintreeFastlanePaymentInitializeOptions {\n    /**\n     * Is a callback that takes the CSS selector of a container\n     * where the Braintree Fastlane form should be inserted into.\n     */\n    onInit?: (renderPayPalComponentMethod: (container: string) => void) => void;\n\n    /**\n     * Is a callback that shows Braintree stored instruments\n     * when get triggered\n     */\n    onChange?: (showPayPalCardSelector: () => Promise<CardInstrument | undefined>) => void;\n\n    /**\n     * Is a stylisation options for customizing Braintree Fastlane components\n     *\n     * Note: the styles for all Braintree Fastlane strategies should be the same,\n     * because they will be provided to PayPal library only for the first strategy initialization\n     * no matter what strategy was initialised first\n     */\n    styles?: BraintreeFastlaneStylesOption;\n    onError?: (error: Error) => void;\n}\n\nexport interface WithBraintreeFastlanePaymentInitializeOptions {\n    braintreefastlane?: BraintreeFastlanePaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-payment-strategy.spec.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\nimport { EventEmitter } from 'events';\nimport { noop } from 'lodash';\n\nimport {\n    Braintree3DSVerifyCardCallback,\n    BraintreeFastlane,\n    BraintreeFastlaneAuthenticationState,\n    BraintreeIntegrationService,\n    BraintreeScriptLoader,\n    BraintreeSdk,\n    BraintreeSDKVersionManager,\n    BraintreeThreeDSecure,\n    BraintreeThreeDSecureOptions,\n    getBraintree,\n    getFastlaneMock,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    CardInstrument,\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getConfig,\n    getCustomer,\n    getGuestCustomer,\n    getOrder,\n    getShippingAddress,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nimport { getThreeDSecureMock } from '../mocks/braintree.mock';\n\nimport BraintreeFastlanePaymentStrategy from './braintree-fastlane-payment-strategy';\nimport BraintreeFastlaneUtils from './braintree-fastlane-utils';\n\ndescribe('BraintreeFastlanePaymentStrategy', () => {\n    let braintreeFastlaneUtils: BraintreeFastlaneUtils;\n    let braintreeFastlaneMock: BraintreeFastlane;\n    let braintreeIntegrationService: BraintreeIntegrationService;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let strategy: BraintreeFastlanePaymentStrategy;\n    let braintreeSdk: BraintreeSdk;\n    let threeDSecure: BraintreeThreeDSecure;\n    let eventEmitter: EventEmitter;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    const methodId = 'braintreeacceleratedcheckout';\n    const deviceSessionId = 'device_session_id_mock';\n    const instrumentId = 'asd123';\n\n    const cart = getCart();\n    const order = getOrder();\n    const customer = getGuestCustomer();\n    const billingAddress = getBillingAddress();\n    const shippingAddress = getShippingAddress();\n    const storeConfig = getConfig().storeConfig;\n    const paymentMethod = {\n        ...getBraintree(),\n        id: methodId,\n    };\n    const selectedInstrumentMock = {\n        id: 'nonce/token',\n        paymentSource: {\n            card: {\n                brand: 'Visa',\n                expiry: '2030-12',\n                lastDigits: '1111',\n                name: 'John Doe',\n                billingAddress: {\n                    company: 'BigCommerce',\n                    streetAddress: 'addressLine1',\n                    locality: 'addressCity',\n                    region: 'addressState',\n                    postalCode: '03004',\n                    countryCodeAlpha2: 'US',\n                    extendedAddress: 'addressLine2',\n                    firstName: 'John',\n                    lastName: 'Doe',\n                },\n            },\n        },\n    };\n\n    const renderMethodMock = jest.fn();\n    const getFastlaneCardComponent = (id: string) => () => {\n        const fastlaneCardComponent = () => {\n            return fastlaneCardComponent;\n        };\n\n        fastlaneCardComponent.getPaymentToken = () => {\n            return Promise.resolve({\n                id,\n                paymentSource: selectedInstrumentMock.paymentSource,\n            });\n        };\n\n        fastlaneCardComponent.render = renderMethodMock;\n\n        return Promise.resolve(fastlaneCardComponent);\n    };\n\n    const bcAddressMock = {\n        id: 1,\n        type: 'type',\n        address1: 'addressLine1',\n        address2: 'addressLine2',\n        city: 'addressCity',\n        company: 'BigCommerce',\n        countryCode: 'US',\n        country: 'US',\n        customFields: [],\n        firstName: 'John',\n        lastName: 'Doe',\n        phone: '333333333333',\n        postalCode: '03004',\n        stateOrProvince: 'addressState',\n        stateOrProvinceCode: 'addressState',\n    };\n\n    const card = 'card' as const;\n\n    const bcCardMock = {\n        bigpayToken: 'nonce/token',\n        brand: 'Visa',\n        defaultInstrument: false,\n        expiryMonth: '12',\n        expiryYear: '2030',\n        iin: '',\n        last4: '1111',\n        method: 'paypalcommerceacceleratedcheckout',\n        provider: 'paypalcommerceacceleratedcheckout',\n        untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.CVV,\n        trustedShippingAddress: false,\n        type: card,\n    };\n\n    const defaultInitializationOptions = {\n        methodId,\n        braintreefastlane: {\n            onInit: jest.fn(),\n            onChange: jest.fn(),\n        },\n    };\n\n    const executeOptions = {\n        payment: {\n            methodId,\n            paymentData: {},\n        },\n    };\n\n    const executeOptionsWithVaultedInstrument = {\n        payment: {\n            methodId,\n            paymentData: {\n                instrumentId,\n            },\n        },\n    };\n\n    beforeEach(() => {\n        braintreeFastlaneMock = getFastlaneMock();\n        threeDSecure = getThreeDSecureMock();\n        eventEmitter = new EventEmitter();\n\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        braintreeIntegrationService = new BraintreeIntegrationService(\n            braintreeScriptLoader,\n            window,\n        );\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeFastlaneUtils = new BraintreeFastlaneUtils(\n            paymentIntegrationService,\n            braintreeIntegrationService,\n        );\n\n        braintreeSdk = new BraintreeSdk(braintreeScriptLoader);\n\n        strategy = new BraintreeFastlanePaymentStrategy(\n            paymentIntegrationService,\n            braintreeFastlaneUtils,\n            braintreeSdk,\n        );\n\n        jest.spyOn(CookieStorage, 'get');\n        jest.spyOn(CookieStorage, 'set');\n        jest.spyOn(CookieStorage, 'remove');\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService, 'updatePaymentProviderCustomer');\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod');\n        jest.spyOn(paymentIntegrationService, 'submitOrder');\n        jest.spyOn(paymentIntegrationService, 'submitPayment');\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(paymentIntegrationService.getState(), 'getOrderOrThrow').mockReturnValue(order);\n        jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue(\n            customer,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfig,\n        );\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getBillingAddressOrThrow',\n        ).mockReturnValue(billingAddress);\n        jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n            shippingAddress,\n        );\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getPaymentProviderCustomerOrThrow',\n        ).mockImplementation(jest.fn());\n\n        jest.spyOn(braintreeFastlaneUtils, 'initializeBraintreeFastlaneOrThrow').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(braintreeFastlaneUtils, 'runPayPalAuthenticationFlowOrThrow').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(\n            braintreeFastlaneUtils,\n            'getBraintreeFastlaneComponentOrThrow',\n        ).mockImplementation(() => braintreeFastlaneMock.FastlaneCardComponent);\n        jest.spyOn(braintreeFastlaneUtils, 'getDeviceSessionId').mockResolvedValue(deviceSessionId);\n        jest.spyOn(braintreeFastlaneMock, 'FastlaneCardComponent').mockImplementation(\n            getFastlaneCardComponent('nonce'),\n        );\n        jest.spyOn(braintreeSdk, 'initialize');\n        jest.spyOn(braintreeSdk, 'getBraintreeThreeDS').mockResolvedValue(threeDSecure);\n        jest.spyOn(threeDSecure, 'on').mockImplementation((options) => {\n            eventEmitter.on('on', (cancelCallback) => {\n                if (options === 'customer-canceled') {\n                    cancelCallback();\n                }\n            });\n        });\n        jest.spyOn(threeDSecure, 'verifyCard').mockImplementation(\n            (options: BraintreeThreeDSecureOptions, callback?: Braintree3DSVerifyCardCallback) => {\n                eventEmitter.on('onLookupComplete', (nextCallback) => {\n                    if (typeof options.onLookupComplete === 'function') {\n                        options.onLookupComplete(\n                            {\n                                lookup: {\n                                    threeDSecureVersion: '2',\n                                },\n                                paymentMethod: {\n                                    nonce: 'nonce',\n                                    details: {\n                                        cardType: '',\n                                        lastFour: '',\n                                        lastTwo: '',\n                                    },\n                                    description: '',\n                                    liabilityShiftPossible: false,\n                                    liabilityShifted: false,\n                                },\n                                requiresUserAuthentication: true,\n                                threeDSecureInfo: {\n                                    liabilityShiftPossible: true,\n                                    liabilityShifted: true,\n                                },\n                            },\n                            nextCallback,\n                        );\n                    }\n                });\n\n                if (callback) {\n                    callback({ code: '' }, { nonce: 'fastlane_token_mock' });\n                }\n\n                return Promise.resolve({\n                    nonce: 'nonce',\n                    details: {\n                        cardType: '',\n                        lastFour: '',\n                        lastTwo: '',\n                    },\n                    description: '',\n                    liabilityShiftPossible: false,\n                    liabilityShifted: false,\n                });\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        it('throws an error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if fastlane enabled and onChange callback is not provided', async () => {\n            const options = {\n                ...defaultInitializationOptions,\n                braintreefastlane: {\n                    onInit: jest.fn(),\n                },\n            };\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if option.braintreefastlane is not provided', async () => {\n            const options = {\n                methodId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if option.braintreefastlane.container is not provided', async () => {\n            const options = {\n                methodId,\n                braintreefastlane: {},\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('should intialize braintreeSdk', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        'PROJECT-7080.braintree_fastlane_three_ds': true,\n                    },\n                },\n            });\n            await strategy.initialize(defaultInitializationOptions);\n\n            expect(braintreeSdk.initialize).toHaveBeenCalled();\n        });\n\n        it('gets PayPal Fastlane component', async () => {\n            jest.spyOn(CookieStorage, 'get');\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({});\n\n            await strategy.initialize(defaultInitializationOptions);\n\n            expect(braintreeFastlaneUtils.getBraintreeFastlaneComponentOrThrow).toHaveBeenCalled();\n        });\n\n        it('should not authenticate user if OTP was triggered before', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: BraintreeFastlaneAuthenticationState.SUCCEEDED,\n            });\n\n            await strategy.initialize(defaultInitializationOptions);\n\n            expect(\n                braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow,\n            ).not.toHaveBeenCalled();\n        });\n\n        it('should not authenticate user if OTP was canceled before', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: BraintreeFastlaneAuthenticationState.CANCELED,\n            });\n\n            await strategy.initialize(defaultInitializationOptions);\n\n            expect(\n                braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow,\n            ).not.toHaveBeenCalled();\n        });\n\n        it('should not trigger authentication flow if the user was authenticated in current session', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({});\n\n            jest.spyOn(CookieStorage, 'get').mockReturnValue('');\n\n            await strategy.initialize(defaultInitializationOptions);\n\n            expect(\n                braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow,\n            ).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger lookup method for store members', async () => {\n            const storeMember = getCustomer();\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue(\n                storeMember,\n            );\n\n            await strategy.initialize(defaultInitializationOptions);\n\n            expect(\n                braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow,\n            ).not.toHaveBeenCalled();\n        });\n\n        it('triggers fastlane authentication flow', async () => {\n            jest.spyOn(CookieStorage, 'get').mockReturnValue(cart.id);\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({});\n\n            await strategy.initialize(defaultInitializationOptions);\n\n            expect(braintreeFastlaneUtils.runPayPalAuthenticationFlowOrThrow).toHaveBeenCalled();\n        });\n    });\n\n    describe('#renderBraintreeCardComponent', () => {\n        let container: HTMLElement;\n        let callback: (containerId: string) => void = noop;\n\n        const initializationOptions = {\n            methodId,\n            braintreefastlane: {\n                onInit: (renderComponent: (containerId: string) => void) => {\n                    callback = renderComponent;\n                },\n                onChange: jest.fn(),\n            },\n        };\n\n        beforeEach(() => {\n            container = document.createElement('div');\n            container.id = 'pp-connect-container-id';\n            document.body.appendChild(container);\n        });\n\n        afterEach(() => {\n            document.body.removeChild(container);\n        });\n\n        it('throws an error if container id is not provided (or it has a falsy value) in callback call', async () => {\n            await strategy.initialize(initializationOptions);\n\n            try {\n                callback('');\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('initializes braintree fastlane', async () => {\n            await strategy.initialize(initializationOptions);\n\n            callback(container.id);\n\n            expect(braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow).toHaveBeenCalledWith(\n                methodId,\n                undefined,\n            );\n        });\n\n        it('initializes braintree fastlane with correct styles', async () => {\n            const newInitializationOptions = {\n                methodId,\n                braintreefastlane: {\n                    onInit: (renderComponent: (containerId: string) => void) => {\n                        callback = renderComponent;\n                    },\n                    onChange: jest.fn(),\n                    styles: {\n                        root: {\n                            backgroundColorPrimary: 'green',\n                            errorColor: 'orange',\n                        },\n                        input: {\n                            borderRadius: '5px',\n                        },\n                    },\n                },\n            };\n\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    isAcceleratedCheckoutEnabled: true,\n                    shouldRunAcceleratedCheckout: true,\n                    isFastlaneEnabled: true,\n                    isFastlaneStylingEnabled: true,\n                    fastlaneStyles: {\n                        fastlaneRootSettingsBackgroundColor: 'red',\n                        fastlaneBrandingSettings: 'branding',\n                    },\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockPaymentMethod);\n\n            await strategy.initialize(newInitializationOptions);\n\n            callback(container.id);\n\n            expect(braintreeFastlaneUtils.initializeBraintreeFastlaneOrThrow).toHaveBeenCalledWith(\n                methodId,\n                {\n                    root: {\n                        backgroundColorPrimary: 'red',\n                        errorColor: 'orange',\n                    },\n                    input: {\n                        borderRadius: '5px',\n                    },\n                    branding: 'branding',\n                },\n            );\n        });\n\n        it('renders braintree card component', async () => {\n            container.id = 'pp-fastlane-container-id';\n\n            jest.spyOn(braintreeFastlaneMock, 'FastlaneCardComponent').mockImplementation(\n                getFastlaneCardComponent('nonce'),\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            if (container.id) {\n                callback(container.id);\n            }\n\n            expect(renderMethodMock).toHaveBeenCalledWith(container.id);\n        });\n\n        it('renders braintree card component with prefilled cardholder name', async () => {\n            const fastlaneCardOptionsMock = {\n                fields: {\n                    cardholderName: {\n                        enabled: true,\n                        prefill: 'Test Tester',\n                    },\n                    phoneNumber: {\n                        prefill: '555-555-5555',\n                    },\n                },\n                styles: {},\n            };\n\n            container.id = 'pp-fastlane-container-id';\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeFastlaneMock.FastlaneCardComponent).toHaveBeenCalledWith(\n                fastlaneCardOptionsMock,\n            );\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws an error is payment is not provided', async () => {\n            await strategy.initialize(defaultInitializationOptions);\n\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('submits payment and order with prepared data', async () => {\n            await strategy.initialize(defaultInitializationOptions);\n            await strategy.execute(executeOptions);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith({}, undefined);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: 'braintreeacceleratedcheckout',\n                paymentData: {\n                    deviceSessionId,\n                    nonce: 'nonce',\n                },\n            });\n        });\n\n        it('submits payment and order with stored instrument data', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        'PROJECT-7080.braintree_fastlane_three_ds': true,\n                    },\n                },\n            });\n            await strategy.initialize(defaultInitializationOptions);\n            await strategy.execute(executeOptions);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith({}, undefined);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: 'braintreeacceleratedcheckout',\n                paymentData: {\n                    deviceSessionId,\n                    nonce: 'nonce',\n                },\n            });\n        });\n    });\n\n    describe('#preparePaymentPayload()', () => {\n        beforeEach(() => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        'PROJECT-7080.braintree_fastlane_three_ds': true,\n                    },\n                },\n            });\n        });\n\n        it('collects an tokenizes data from braintree fastlane card component (customer without fastlane account)', async () => {\n            const tokenizationNonceMock = 'fastlane_token_mock';\n            const tokenizeMethodMock = jest.fn().mockResolvedValue({\n                id: tokenizationNonceMock,\n                paymentSource: selectedInstrumentMock.paymentSource,\n            });\n\n            jest.spyOn(braintreeFastlaneMock, 'FastlaneCardComponent').mockImplementation(() => {\n                const fastlaneCardComponent = () => {\n                    return fastlaneCardComponent;\n                };\n\n                fastlaneCardComponent.getPaymentToken = tokenizeMethodMock;\n\n                fastlaneCardComponent.render = renderMethodMock;\n\n                return Promise.resolve(fastlaneCardComponent);\n            });\n\n            await strategy.initialize(defaultInitializationOptions);\n            await strategy.execute(executeOptions);\n\n            expect(tokenizeMethodMock).toHaveBeenCalledWith({\n                billingAddress: {\n                    streetAddress: '12345 Testing Way',\n                    locality: 'Some City',\n                    region: 'CA',\n                    postalCode: '95555',\n                    countryCodeAlpha2: 'US',\n                },\n                name: {\n                    fullName: 'Test Tester',\n                },\n            });\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    deviceSessionId,\n                    nonce: tokenizationNonceMock,\n                },\n            });\n        });\n\n        it('set region field with stateOrProvince value if stateOrProvinceCode is empty', async () => {\n            const tokenizationNonceMock = 'fastlane_token_mock';\n            const billingAddressMock = {\n                id: '55c96cda6f04c',\n                firstName: 'Test',\n                lastName: 'Tester',\n                email: 'test@bigcommerce.com',\n                company: 'Bigcommerce',\n                address1: '12345 Testing Way',\n                address2: '',\n                city: 'Bangkok',\n                stateOrProvince: 'Bangkok',\n                stateOrProvinceCode: '',\n                country: 'Thailand',\n                countryCode: 'TH',\n                postalCode: '10100',\n                shouldSaveAddress: true,\n                phone: '555-555-5555',\n                customFields: [],\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddressOrThrow',\n            ).mockReturnValue(billingAddressMock);\n\n            const tokenizeMethodMock = jest.fn().mockResolvedValue({\n                id: tokenizationNonceMock,\n                paymentSource: selectedInstrumentMock.paymentSource,\n            });\n\n            jest.spyOn(braintreeFastlaneMock, 'FastlaneCardComponent').mockImplementation(() => {\n                const fastlaneCardComponent = () => {\n                    return fastlaneCardComponent;\n                };\n\n                fastlaneCardComponent.getPaymentToken = tokenizeMethodMock;\n\n                fastlaneCardComponent.render = renderMethodMock;\n\n                return Promise.resolve(fastlaneCardComponent);\n            });\n\n            await strategy.initialize(defaultInitializationOptions);\n            await strategy.execute(executeOptions);\n\n            expect(tokenizeMethodMock).toHaveBeenCalledWith({\n                billingAddress: {\n                    streetAddress: '12345 Testing Way',\n                    locality: 'Bangkok',\n                    region: 'Bangkok',\n                    postalCode: '10100',\n                    countryCodeAlpha2: 'TH',\n                },\n                name: {\n                    fullName: 'Test Tester',\n                },\n            });\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    deviceSessionId,\n                    nonce: tokenizationNonceMock,\n                },\n            });\n        });\n\n        it('places order with braintree fastlane using fastlane vaulted instrument for customers with fastlane account', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    isAcceleratedCheckoutEnabled: true,\n                    shouldRunAcceleratedCheckout: true,\n                    isFastlaneEnabled: true,\n                },\n            };\n\n            paymentMethod.config.is3dsEnabled = false;\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockPaymentMethod);\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomerOrThrow',\n            ).mockImplementation(() => ({\n                authenticationState: 'succeeded',\n                addresses: [],\n                instruments: [\n                    {\n                        brand: 'visa',\n                        expiryMonth: '12',\n                        expiryYear: '33',\n                        iin: '411111',\n                        last4: '1111',\n                        type: 'card',\n                        bigpayToken: instrumentId,\n                        defaultInstrument: false,\n                        provider: methodId,\n                        trustedShippingAddress: false,\n                        method: methodId,\n                        untrustedShippingCardVerificationMode:\n                            UntrustedShippingCardVerificationType.CVV,\n                    },\n                ],\n            }));\n\n            await strategy.initialize(defaultInitializationOptions);\n            await strategy.execute(executeOptionsWithVaultedInstrument);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: 'braintreeacceleratedcheckout',\n                paymentData: {\n                    deviceSessionId,\n                    formattedPayload: {\n                        paypal_fastlane_token: {\n                            token: instrumentId,\n                        },\n                    },\n                },\n            });\n        });\n\n        it('verifies card', async () => {\n            jest.spyOn(threeDSecure, 'verifyCard');\n            jest.spyOn(braintreeSdk, 'getBraintreeThreeDS').mockResolvedValue(threeDSecure);\n            paymentMethod.config.is3dsEnabled = true;\n            await strategy.initialize(defaultInitializationOptions);\n            await strategy.execute(executeOptions);\n\n            expect(threeDSecure.verifyCard).toHaveBeenCalled();\n        });\n\n        it('verifies card for fastlane guest', async () => {\n            const guestNonce = 'guest_nonce';\n            const tokenizeMethodMock = jest.fn().mockResolvedValue({\n                id: guestNonce,\n                paymentSource: {\n                    ...selectedInstrumentMock.paymentSource,\n                    card: {\n                        ...selectedInstrumentMock.paymentSource.card,\n                        binDetails: {\n                            bin: 'guest_bin',\n                        },\n                    },\n                },\n            });\n\n            jest.spyOn(braintreeFastlaneMock, 'FastlaneCardComponent').mockImplementation(() => {\n                const fastlaneCardComponent = () => {\n                    return fastlaneCardComponent;\n                };\n\n                fastlaneCardComponent.getPaymentToken = tokenizeMethodMock;\n\n                fastlaneCardComponent.render = renderMethodMock;\n\n                return Promise.resolve(fastlaneCardComponent);\n            });\n            jest.spyOn(threeDSecure, 'verifyCard');\n            jest.spyOn(braintreeSdk, 'getBraintreeThreeDS').mockResolvedValue(threeDSecure);\n            paymentMethod.config.is3dsEnabled = true;\n            await strategy.initialize(defaultInitializationOptions);\n            await strategy.execute(executeOptions);\n\n            expect(threeDSecure.verifyCard).toHaveBeenCalledWith(\n                {\n                    amount: 190,\n                    bin: 'guest_bin',\n                    nonce: 'guest_nonce',\n                    onLookupComplete: expect.any(Function),\n                },\n                expect.any(Function),\n            );\n        });\n\n        it('verifies card for fastlane authorised user', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomerOrThrow',\n            ).mockImplementation(() => ({\n                authenticationState: 'succeeded',\n                addresses: [],\n                instruments: [\n                    {\n                        brand: 'visa',\n                        expiryMonth: '12',\n                        expiryYear: '33',\n                        iin: '411111',\n                        last4: '1111',\n                        bin: 'authorized_bin',\n                        type: 'card',\n                        bigpayToken: instrumentId,\n                        defaultInstrument: false,\n                        provider: methodId,\n                        trustedShippingAddress: false,\n                        method: methodId,\n                        untrustedShippingCardVerificationMode:\n                            UntrustedShippingCardVerificationType.CVV,\n                    },\n                ],\n            }));\n            jest.spyOn(threeDSecure, 'verifyCard');\n            jest.spyOn(braintreeSdk, 'getBraintreeThreeDS').mockResolvedValue(threeDSecure);\n            paymentMethod.config.is3dsEnabled = true;\n            await strategy.initialize(defaultInitializationOptions);\n            await strategy.execute(executeOptions);\n\n            expect(threeDSecure.verifyCard).toHaveBeenCalledWith(\n                {\n                    amount: 190,\n                    bin: '411111',\n                    nonce: instrumentId,\n                    onLookupComplete: expect.any(Function),\n                },\n                expect.any(Function),\n            );\n        });\n\n        it('retrieve 3DS instance', async () => {\n            jest.spyOn(braintreeSdk, 'getBraintreeThreeDS').mockResolvedValue(threeDSecure);\n            paymentMethod.config.is3dsEnabled = true;\n            await strategy.initialize(defaultInitializationOptions);\n            await strategy.execute(executeOptions);\n\n            expect(braintreeSdk.getBraintreeThreeDS).toHaveBeenCalled();\n        });\n\n        it('should reject with a PaymentMethodCancelledError if customer cancels', async () => {\n            paymentMethod.config.is3dsEnabled = true;\n\n            const threeDSecureMock = {\n                ...threeDSecure,\n                verifyCard: (_options, callback) => {\n                    if (callback) {\n                        callback(\n                            { code: 'THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT' },\n                            { nonce: 'fastlane_token_mock' },\n                        );\n                    }\n\n                    return Promise.resolve('fastlane_token_mock');\n                },\n            };\n\n            jest.spyOn(braintreeSdk, 'getBraintreeThreeDS').mockResolvedValue(threeDSecureMock);\n\n            const onErrorMock = jest.fn();\n\n            await strategy.initialize({\n                methodId,\n                braintreefastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(),\n                    onError: onErrorMock,\n                },\n            });\n\n            try {\n                await strategy.execute(executeOptions);\n            } catch (e) {\n                expect(onErrorMock).toHaveBeenCalled();\n            }\n        });\n\n        it('calls next callback', async () => {\n            paymentMethod.config.is3dsEnabled = true;\n\n            await strategy.initialize(defaultInitializationOptions);\n            await strategy.execute(executeOptions);\n\n            const next = jest.fn();\n\n            eventEmitter.emit('onLookupComplete', next);\n\n            expect(next).toHaveBeenCalled();\n        });\n\n        it('calls on customer cancel', async () => {\n            paymentMethod.config.is3dsEnabled = true;\n\n            await strategy.initialize(defaultInitializationOptions);\n            await strategy.execute(executeOptions);\n\n            const next = jest.fn();\n            const cancelCallback = jest.fn();\n\n            eventEmitter.emit('onLookupComplete', next);\n            eventEmitter.emit('on', cancelCallback);\n\n            expect(cancelCallback).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onChange option callback', () => {\n        beforeEach(() => {\n            jest.spyOn(braintreeFastlaneUtils, 'mapPayPalToBcInstrument');\n            jest.spyOn(braintreeFastlaneUtils, 'getBraintreeFastlaneOrThrow').mockReturnValue(\n                braintreeFastlaneMock,\n            );\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomer',\n            ).mockReturnValue({\n                authenticationState: BraintreeFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [bcAddressMock],\n                instruments: [bcCardMock],\n            });\n\n            jest.spyOn(braintreeFastlaneMock.profile, 'showCardSelector').mockImplementation(() =>\n                Promise.resolve({\n                    selectionChanged: true,\n                    selectedCard: selectedInstrumentMock,\n                }),\n            );\n        });\n\n        it('returns selected card instrument', async () => {\n            paymentMethod.initializationData.isFastlaneEnabled = true;\n\n            let onChangeCallback: () => Promise<CardInstrument | undefined> = () =>\n                Promise.resolve(undefined);\n            const onChangeImplementation = (\n                showCardSelector: () => Promise<CardInstrument | undefined>,\n            ) => {\n                onChangeCallback = showCardSelector;\n            };\n\n            await strategy.initialize({\n                methodId,\n                braintreefastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(onChangeImplementation),\n                },\n            });\n\n            const result = await onChangeCallback();\n\n            const paypalToBcInstrument = {\n                bigpayToken: 'nonce/token',\n                brand: 'Visa',\n                defaultInstrument: false,\n                expiryMonth: '12',\n                expiryYear: '2030',\n                iin: '',\n                last4: '1111',\n                method: 'braintreeacceleratedcheckout',\n                provider: 'braintreeacceleratedcheckout',\n                trustedShippingAddress: false,\n                type: 'card',\n                untrustedShippingCardVerificationMode: 'pan',\n            };\n\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalledWith({\n                authenticationState: BraintreeFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [bcAddressMock],\n                instruments: [paypalToBcInstrument],\n            });\n\n            expect(result).toEqual(paypalToBcInstrument);\n        });\n\n        it('returns undefined if the customer selects the same instrument or closes a popup window', async () => {\n            paymentMethod.initializationData.isFastlaneEnabled = true;\n            jest.spyOn(braintreeFastlaneMock.profile, 'showCardSelector').mockImplementation(() =>\n                Promise.resolve({\n                    selectionChanged: false,\n                    selectedCard: selectedInstrumentMock,\n                }),\n            );\n\n            let onChangeCallback: () => Promise<CardInstrument | undefined> = () =>\n                Promise.resolve(undefined);\n            const onChangeImplementation = (\n                showPayPalCardSelector: () => Promise<CardInstrument | undefined>,\n            ) => {\n                onChangeCallback = showPayPalCardSelector;\n            };\n\n            await strategy.initialize({\n                methodId,\n                braintreefastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(onChangeImplementation),\n                },\n            });\n\n            const result = await onChangeCallback();\n\n            expect(result).toBeUndefined();\n        });\n\n        it('calls mapPayPalToBcInstrument', async () => {\n            paymentMethod.initializationData.isFastlaneEnabled = true;\n\n            let onChangeCallback: () => Promise<CardInstrument | undefined> = () =>\n                Promise.resolve(undefined);\n            const onChangeImplementation = (\n                showCardSelector: () => Promise<CardInstrument | undefined>,\n            ) => {\n                onChangeCallback = showCardSelector;\n            };\n\n            await strategy.initialize({\n                methodId,\n                braintreefastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(onChangeImplementation),\n                },\n            });\n\n            await onChangeCallback();\n\n            expect(braintreeFastlaneUtils.mapPayPalToBcInstrument).toHaveBeenCalled();\n            expect(braintreeFastlaneUtils.mapPayPalToBcInstrument).toHaveBeenCalledWith(\n                'braintreeacceleratedcheckout',\n                [selectedInstrumentMock],\n            );\n        });\n\n        it('does not update payment provider customer if selected instruments exist', async () => {\n            paymentMethod.initializationData.isFastlaneEnabled = true;\n            jest.spyOn(braintreeFastlaneUtils, 'mapPayPalToBcInstrument').mockReturnValue(\n                undefined,\n            );\n\n            let onChangeCallback: () => Promise<CardInstrument | undefined> = () =>\n                Promise.resolve(undefined);\n            const onChangeImplementation = (\n                showCardSelector: () => Promise<CardInstrument | undefined>,\n            ) => {\n                onChangeCallback = showCardSelector;\n            };\n\n            await strategy.initialize({\n                methodId,\n                braintreefastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(onChangeImplementation),\n                },\n            });\n\n            await onChangeCallback();\n\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            await expect(strategy.deinitialize()).resolves.not.toThrow();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-payment-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-utils.spec.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BraintreeFastlane,\n    BraintreeFastlaneAuthenticationState,\n    BraintreeIntegrationService,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n    getBraintreeFastlaneProfileDataMock,\n    getFastlaneMock,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    MissingDataError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getConsignment,\n    getCountries,\n    getCustomer,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nimport { getBraintreeAcceleratedCheckoutPaymentMethod } from '../mocks/braintree.mock';\n\nimport BraintreeFastlaneUtils from './braintree-fastlane-utils';\n\ndescribe('BraintreeFastlaneUtils', () => {\n    let braintreeFastlaneMock: BraintreeFastlane;\n    let braintreeIntegrationService: BraintreeIntegrationService;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let subject: BraintreeFastlaneUtils;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    const cart = getCart();\n    const countries = getCountries();\n    const customer = getCustomer();\n    const billingAddress = getBillingAddress();\n    const paymentMethod = getBraintreeAcceleratedCheckoutPaymentMethod();\n    const consignments = [getConsignment()];\n\n    const methodId = 'braintreeacceleratedcheckout';\n\n    beforeEach(() => {\n        braintreeFastlaneMock = getFastlaneMock();\n        jest.spyOn(Date, 'now').mockImplementation(() => 1);\n\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        braintreeIntegrationService = new BraintreeIntegrationService(\n            braintreeScriptLoader,\n            window,\n        );\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        subject = new BraintreeFastlaneUtils(\n            paymentIntegrationService,\n            braintreeIntegrationService,\n        );\n\n        jest.spyOn(CookieStorage, 'remove');\n        jest.spyOn(CookieStorage, 'set');\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod');\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress');\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress');\n        jest.spyOn(paymentIntegrationService, 'updatePaymentProviderCustomer').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paymentIntegrationService, 'selectShippingOption');\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue(customer);\n        jest.spyOn(paymentIntegrationService.getState(), 'getCountries').mockReturnValue(countries);\n        jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n            billingAddress,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getConsignments').mockReturnValue(\n            consignments,\n        );\n\n        jest.spyOn(braintreeIntegrationService, 'initialize');\n        jest.spyOn(braintreeIntegrationService, 'getSessionId').mockImplementation(jest.fn());\n        jest.spyOn(braintreeIntegrationService, 'getBraintreeFastlane').mockResolvedValue(\n            braintreeFastlaneMock,\n        );\n\n        jest.spyOn(braintreeFastlaneMock.identity, 'lookupCustomerByEmail').mockResolvedValue({\n            customerContextId: 'customerContextId',\n        });\n\n        jest.spyOn(braintreeFastlaneMock.identity, 'triggerAuthenticationFlow').mockResolvedValue({\n            authenticationState: BraintreeFastlaneAuthenticationState.SUCCEEDED,\n            profileData: getBraintreeFastlaneProfileDataMock(),\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initializeBraintreeFastlaneOrThrow()', () => {\n        it('throws an error if clientToken is not defined', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                clientToken: undefined,\n            });\n\n            try {\n                await subject.initializeBraintreeFastlaneOrThrow(methodId);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('initializes braintree integration service and loads braintree fastlane', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    isAcceleratedCheckoutEnabled: true,\n                    isFastlaneEnabled: true,\n                },\n            });\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n                paymentMethod.clientToken,\n            );\n            expect(braintreeIntegrationService.getBraintreeFastlane).toHaveBeenCalledWith(\n                cart.id,\n                false,\n                undefined,\n            );\n        });\n    });\n\n    describe('#runPayPalAuthenticationFlowOrThrow()', () => {\n        beforeEach(() => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    isAcceleratedCheckoutEnabled: true,\n                    isFastlaneEnabled: true,\n                },\n            });\n        });\n\n        it('does not authenticate user if braintree fastlane is not loaded', async () => {\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).not.toHaveBeenCalled();\n        });\n\n        it('checks if there is PP Fastlane account with customer email', async () => {\n            jest.spyOn(braintreeFastlaneMock.identity, 'lookupCustomerByEmail').mockResolvedValue(\n                {},\n            );\n\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(braintreeFastlaneMock.identity.lookupCustomerByEmail).toHaveBeenCalled();\n        });\n\n        it('updates customer provider and billing address with correct data', async () => {\n            const expectedBillingAddress = {\n                address1: 'Hello World Address',\n                address2: '',\n                city: 'Bellingham',\n                company: '',\n                country: 'United States',\n                countryCode: 'US',\n                customFields: [],\n                firstName: 'John',\n                id: 1,\n                lastName: 'Doe',\n                phone: '12345',\n                postalCode: '98225',\n                stateOrProvince: 'WA',\n                stateOrProvinceCode: 'WA',\n                type: 'paypal-address',\n            };\n\n            const updatePaymentProviderCustomerPayload = {\n                authenticationState: BraintreeFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [\n                    {\n                        id: 1,\n                        type: 'paypal-address',\n                        firstName: 'John',\n                        lastName: 'Doe',\n                        company: '',\n                        address1: 'Hello World Address',\n                        address2: '',\n                        city: 'Bellingham',\n                        stateOrProvince: 'WA',\n                        stateOrProvinceCode: 'WA',\n                        country: 'United States',\n                        countryCode: 'US',\n                        postalCode: '98225',\n                        phone: '12345',\n                        customFields: [],\n                    },\n                ],\n                instruments: [\n                    {\n                        bigpayToken: 'pp-vaulted-instrument-id',\n                        brand: 'VISA',\n                        defaultInstrument: false,\n                        expiryMonth: undefined,\n                        expiryYear: '02/2037',\n                        iin: '',\n                        last4: '1111',\n                        method: 'braintreeacceleratedcheckout',\n                        provider: 'braintreeacceleratedcheckout',\n                        trustedShippingAddress: false,\n                        type: 'card',\n                        untrustedShippingCardVerificationMode: 'pan',\n                    },\n                ],\n            };\n            const profileData = getBraintreeFastlaneProfileDataMock();\n\n            profileData.shippingAddress.phoneNumber = '12345';\n\n            jest.spyOn(\n                braintreeFastlaneMock.identity,\n                'triggerAuthenticationFlow',\n            ).mockResolvedValue({\n                authenticationState: BraintreeFastlaneAuthenticationState.SUCCEEDED,\n                profileData,\n            });\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalledWith(\n                updatePaymentProviderCustomerPayload,\n            );\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                expectedBillingAddress,\n            );\n        });\n\n        it('preselects shipping option with first shipping option', async () => {\n            const paymentMethodWithShippingAutoselect = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isFastlaneShippingOptionAutoSelectEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingAutoselect);\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow(undefined, true);\n\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                consignments[0]?.availableShippingOptions\n                    ? consignments[0]?.availableShippingOptions[0].id\n                    : undefined,\n            );\n        });\n\n        it('doesnt select shipping option if isFastlaneShippingOptionAutoSelectEnabled false', async () => {\n            const paymentMethodWithShippingAutoselect = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isFastlaneShippingOptionAutoSelectEnabled: false,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingAutoselect);\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow(undefined, true);\n\n            expect(paymentIntegrationService.selectShippingOption).not.toHaveBeenCalled();\n        });\n\n        it('select shipping option if isFastlaneShippingOptionAutoSelectEnabled true', async () => {\n            const paymentMethodWithShippingAutoselect = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isFastlaneShippingOptionAutoSelectEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingAutoselect);\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow(undefined, true);\n\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalled();\n        });\n\n        it('doesnt preselect shipping option', async () => {\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow(undefined, false);\n\n            expect(paymentIntegrationService.selectShippingOption).not.toHaveBeenCalled();\n        });\n\n        it('does not authenticate user if the customer unrecognized in PP Fastlane', async () => {\n            jest.spyOn(braintreeFastlaneMock.identity, 'lookupCustomerByEmail').mockResolvedValue(\n                {},\n            );\n\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(CookieStorage.set).toHaveBeenCalledWith('bc-fastlane-sessionId', cart.id, {\n                expires: expect.any(Date),\n                secure: true,\n            });\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalledWith({\n                authenticationState: BraintreeFastlaneAuthenticationState.UNRECOGNIZED,\n                addresses: [],\n                instruments: [],\n            });\n        });\n\n        it('triggers PP Fastlane authentication flow if customer is detected as PP Fastlane user', async () => {\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(braintreeFastlaneMock.identity.triggerAuthenticationFlow).toHaveBeenCalled();\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalled();\n        });\n\n        it('successfully authenticate customer with PP Fastlane', async () => {\n            const updatePaymentProviderCustomerPayload = {\n                authenticationState: BraintreeFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [\n                    {\n                        id: 1,\n                        type: 'paypal-address',\n                        firstName: 'John',\n                        lastName: 'Doe',\n                        company: '',\n                        address1: 'Hello World Address',\n                        address2: '',\n                        city: 'Bellingham',\n                        stateOrProvince: 'WA',\n                        stateOrProvinceCode: 'WA',\n                        country: 'United States',\n                        countryCode: 'US',\n                        postalCode: '98225',\n                        phone: '14085551234',\n                        customFields: [],\n                    },\n                ],\n                instruments: [\n                    {\n                        bigpayToken: 'pp-vaulted-instrument-id',\n                        brand: 'VISA',\n                        defaultInstrument: false,\n                        expiryMonth: undefined,\n                        expiryYear: '02/2037',\n                        iin: '',\n                        last4: '1111',\n                        method: 'braintreeacceleratedcheckout',\n                        provider: 'braintreeacceleratedcheckout',\n                        trustedShippingAddress: false,\n                        type: 'card',\n                        untrustedShippingCardVerificationMode: 'pan',\n                    },\n                ],\n            };\n\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(CookieStorage.set).toHaveBeenCalledWith('bc-fastlane-sessionId', cart.id, {\n                expires: expect.any(Date),\n                secure: true,\n            });\n            expect(braintreeFastlaneMock.identity.triggerAuthenticationFlow).toHaveBeenCalled();\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalledWith(\n                updatePaymentProviderCustomerPayload,\n            );\n        });\n\n        it('successfully authenticate customer with PP Fastlane and different shipping and billing addresses', async () => {\n            const defaultProfileData = getBraintreeFastlaneProfileDataMock();\n            const profileData = getBraintreeFastlaneProfileDataMock();\n\n            profileData.card.paymentSource.card.billingAddress = {\n                ...defaultProfileData.card.paymentSource.card.billingAddress,\n                firstName: 'Mr.',\n                lastName: 'Smith',\n            };\n\n            jest.spyOn(\n                braintreeFastlaneMock.identity,\n                'triggerAuthenticationFlow',\n            ).mockResolvedValue({\n                authenticationState: BraintreeFastlaneAuthenticationState.SUCCEEDED,\n                profileData,\n            });\n\n            const updatePaymentProviderCustomerPayload = {\n                authenticationState: BraintreeFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [\n                    {\n                        id: 1,\n                        type: 'paypal-address',\n                        firstName: 'John',\n                        lastName: 'Doe',\n                        company: '',\n                        address1: 'Hello World Address',\n                        address2: '',\n                        city: 'Bellingham',\n                        stateOrProvince: 'WA',\n                        stateOrProvinceCode: 'WA',\n                        country: 'United States',\n                        countryCode: 'US',\n                        postalCode: '98225',\n                        phone: '14085551234',\n                        customFields: [],\n                    },\n                    {\n                        id: 1,\n                        type: 'paypal-address',\n                        firstName: 'Mr.',\n                        lastName: 'Smith',\n                        company: '',\n                        address1: 'Hello World Address',\n                        address2: '',\n                        city: 'Bellingham',\n                        stateOrProvince: 'WA',\n                        stateOrProvinceCode: 'WA',\n                        country: 'United States',\n                        countryCode: 'US',\n                        postalCode: '98225',\n                        phone: '14085551234',\n                        customFields: [],\n                    },\n                ],\n                instruments: [\n                    {\n                        bigpayToken: 'pp-vaulted-instrument-id',\n                        brand: 'VISA',\n                        defaultInstrument: false,\n                        expiryMonth: undefined,\n                        expiryYear: '02/2037',\n                        iin: '',\n                        last4: '1111',\n                        method: 'braintreeacceleratedcheckout',\n                        provider: 'braintreeacceleratedcheckout',\n                        trustedShippingAddress: false,\n                        type: 'card',\n                        untrustedShippingCardVerificationMode: 'pan',\n                    },\n                ],\n            };\n\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(CookieStorage.set).toHaveBeenCalledWith('bc-fastlane-sessionId', cart.id, {\n                expires: expect.any(Date),\n                secure: true,\n            });\n            expect(braintreeFastlaneMock.identity.triggerAuthenticationFlow).toHaveBeenCalled();\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalledWith(\n                updatePaymentProviderCustomerPayload,\n            );\n        });\n\n        it('does not authenticate customer if the authentication was canceled or failed', async () => {\n            jest.spyOn(\n                braintreeFastlaneMock.identity,\n                'triggerAuthenticationFlow',\n            ).mockResolvedValue({\n                authenticationState: BraintreeFastlaneAuthenticationState.CANCELED,\n                profileData: getBraintreeFastlaneProfileDataMock(),\n            });\n\n            const updatePaymentProviderCustomerPayload = {\n                authenticationState: BraintreeFastlaneAuthenticationState.CANCELED,\n                addresses: [],\n                instruments: [],\n            };\n\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(CookieStorage.remove).toHaveBeenCalledWith('bc-fastlane-sessionId');\n            expect(braintreeFastlaneMock.identity.triggerAuthenticationFlow).toHaveBeenCalled();\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalledWith(\n                updatePaymentProviderCustomerPayload,\n            );\n        });\n\n        it('preselects billing address with first paypal fastlane billing address', async () => {\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith({\n                id: 1,\n                type: 'paypal-address',\n                firstName: 'John',\n                lastName: 'Doe',\n                company: '',\n                address1: 'Hello World Address',\n                address2: '',\n                city: 'Bellingham',\n                stateOrProvince: 'WA',\n                stateOrProvinceCode: 'WA',\n                country: 'United States',\n                countryCode: 'US',\n                postalCode: '98225',\n                phone: '14085551234',\n                customFields: [],\n            });\n        });\n\n        it('preselects shipping address with first paypal fastlane address', async () => {\n            await subject.initializeBraintreeFastlaneOrThrow(methodId, undefined);\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith({\n                id: 1,\n                type: 'paypal-address',\n                firstName: 'John',\n                lastName: 'Doe',\n                company: '',\n                address1: 'Hello World Address',\n                address2: '',\n                city: 'Bellingham',\n                stateOrProvince: 'WA',\n                stateOrProvinceCode: 'WA',\n                country: 'United States',\n                countryCode: 'US',\n                postalCode: '98225',\n                phone: '14085551234',\n                customFields: [],\n            });\n        });\n\n        it('do not update billing and shipping address if paypal does not return any address in profile data', async () => {\n            jest.spyOn(\n                braintreeFastlaneMock.identity,\n                'triggerAuthenticationFlow',\n            ).mockRejectedValue({});\n\n            await subject.initializeBraintreeFastlaneOrThrow(methodId);\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(paymentIntegrationService.updateBillingAddress).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.updateShippingAddress).not.toHaveBeenCalled();\n        });\n\n        it('does not update shipping address if the cart contains only digital items', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue({\n                ...cart,\n                lineItems: {\n                    ...cart.lineItems,\n                    physicalItems: [],\n                },\n            });\n\n            await subject.initializeBraintreeFastlaneOrThrow(methodId);\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(paymentIntegrationService.updateShippingAddress).not.toHaveBeenCalled();\n        });\n\n        it('preselects billing with shipping firstName and lastName if the cart contains only digital items', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue({\n                ...cart,\n                lineItems: {\n                    ...cart.lineItems,\n                    physicalItems: [],\n                },\n            });\n\n            await subject.initializeBraintreeFastlaneOrThrow(methodId);\n            await subject.runPayPalAuthenticationFlowOrThrow();\n\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith({\n                id: 1,\n                type: 'paypal-address',\n                firstName: 'John',\n                lastName: 'Doe',\n                company: '',\n                address1: 'Hello World Address',\n                address2: '',\n                city: 'Bellingham',\n                stateOrProvince: 'WA',\n                stateOrProvinceCode: 'WA',\n                country: 'United States',\n                countryCode: 'US',\n                postalCode: '98225',\n                phone: '14085551234',\n                customFields: [],\n            });\n        });\n    });\n\n    describe('#getDeviceSessionId', () => {\n        it('returns device session id', async () => {\n            await subject.initializeBraintreeFastlaneOrThrow(methodId);\n            await subject.getDeviceSessionId();\n\n            expect(braintreeIntegrationService.getSessionId).toHaveBeenCalled();\n        });\n\n        it('returns device session id for fastlane', async () => {\n            await subject.initializeBraintreeFastlaneOrThrow(methodId);\n            await subject.getDeviceSessionId();\n\n            expect(braintreeIntegrationService.getSessionId).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-fastlane/braintree-fastlane-utils.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-fastlane/create-braintree-fastlane-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeFastlaneCustomerStrategy from './braintree-fastlane-customer-strategy';\nimport createBraintreeFastlaneCustomerStrategy from './create-braintree-fastlane-customer-strategy';\n\ndescribe('createBraintreeFastlaneCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates braintree fastlane checkout customer strategy', () => {\n        const strategy = createBraintreeFastlaneCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreeFastlaneCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-fastlane/create-braintree-fastlane-customer-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-fastlane/create-braintree-fastlane-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeFastlanePaymentStrategy from './braintree-fastlane-payment-strategy';\nimport createBraintreeFastlanePaymentStrategy from './create-braintree-fastlane-payment-strategy';\n\ndescribe('createBraintreeFastlanePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates braintree fastlane payment strategy', () => {\n        const strategy = createBraintreeFastlanePaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreeFastlanePaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-fastlane/create-braintree-fastlane-payment-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-hosted-form/braintree-hosted-form.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    BRAINTREE_SDK_DEFAULT_VERSION,\n    BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n    BraintreeFormOptions,\n    BraintreeHostedFields,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n    getClientMock,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\n\nimport {\n    NotInitializedError,\n    PaymentIntegrationService,\n    PaymentInvalidFormError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { getBillingAddress } from '../mocks/braintree.mock';\n\nimport BraintreeHostedForm from './braintree-hosted-form';\n\ndescribe('BraintreeHostedForm', () => {\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let cardFields: Pick<BraintreeHostedFields, 'on' | 'tokenize' | 'teardown'>;\n    let cardFieldsEventEmitter: EventEmitter;\n    let containers: HTMLElement[];\n    let formOptions: BraintreeFormOptions;\n    let subject: BraintreeHostedForm;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    const unsupportedCardBrands = ['american-express', 'maestro'];\n\n    function appendContainer(id: string): HTMLElement {\n        const container = document.createElement('div');\n        container.id = id;\n        document.body.appendChild(container);\n\n        return container;\n    }\n\n    beforeEach(() => {\n        cardFieldsEventEmitter = new EventEmitter();\n\n        cardFields = {\n            on: jest.fn((eventName, callback) => {\n                cardFieldsEventEmitter.on(eventName, callback);\n            }),\n            tokenize: jest.fn(() => Promise.resolve({ nonce: 'foobar_nonce' })),\n            teardown: jest.fn(),\n        };\n\n        formOptions = {\n            fields: {\n                cardCode: { containerId: 'cardCode', placeholder: 'Card code' },\n                cardName: { containerId: 'cardName', placeholder: 'Card name' },\n                cardNumber: { containerId: 'cardNumber', placeholder: 'Card number' },\n                cardExpiry: { containerId: 'cardExpiry', placeholder: 'Card expiry' },\n            },\n            styles: {\n                default: { color: '#000' },\n                error: { color: '#f00', fontWeight: 'bold' },\n                focus: { color: '#00f' },\n            },\n        };\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        subject = new BraintreeHostedForm(braintreeScriptLoader, braintreeSDKVersionManager);\n\n        containers = [\n            appendContainer('cardCode'),\n            appendContainer('cardName'),\n            appendContainer('cardNumber'),\n            appendContainer('cardExpiry'),\n        ];\n\n        jest.spyOn(braintreeScriptLoader, 'loadClient').mockResolvedValue({\n            create: jest.fn().mockResolvedValue(getClientMock()),\n        });\n\n        jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n            create: jest.fn().mockResolvedValue({ on: jest.fn() }),\n        });\n\n        jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValue(\n            BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n        );\n    });\n\n    afterEach(() => {\n        containers.forEach((container) => {\n            container.parentElement?.removeChild(container);\n        });\n    });\n\n    describe('#initialize', () => {\n        it('creates and configures hosted fields', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValue(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n            const createMock = jest.fn();\n            const clientMock = {\n                ...getClientMock(),\n                request: expect.any(Function),\n            };\n\n            const options = {\n                fields: {\n                    cvv: {\n                        container: '#cardCode',\n                        internalLabel: undefined,\n                        placeholder: 'Card code',\n                    },\n                    expirationDate: {\n                        container: '#cardExpiry',\n                        internalLabel: undefined,\n                        placeholder: 'Card expiry',\n                    },\n                    number: {\n                        container: '#cardNumber',\n                        internalLabel: undefined,\n                        placeholder: 'Card number',\n                        supportedCardBrands: {\n                            'american-express': false,\n                            maestro: false,\n                        },\n                    },\n                    cardholderName: {\n                        container: '#cardName',\n                        internalLabel: undefined,\n                        placeholder: 'Card name',\n                    },\n                },\n                styles: {\n                    input: { color: '#000' },\n                    '.invalid': { color: '#f00', 'font-weight': 'bold' },\n                    ':focus': { color: '#00f' },\n                },\n            };\n\n            jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n                create: createMock,\n            });\n\n            await subject.initialize(formOptions, unsupportedCardBrands, 'clientToken');\n\n            expect(createMock).toHaveBeenCalledWith({\n                ...options,\n                client: clientMock,\n            });\n        });\n\n        it('creates and configures hosted fields with preventCursorJumps', async () => {\n            const createMock = jest.fn();\n            const clientMock = {\n                ...getClientMock(),\n                request: expect.any(Function),\n            };\n\n            const options = {\n                fields: {\n                    cvv: {\n                        container: '#cardCode',\n                        internalLabel: undefined,\n                        placeholder: 'Card code',\n                    },\n                    expirationDate: {\n                        container: '#cardExpiry',\n                        internalLabel: undefined,\n                        placeholder: 'Card expiry',\n                    },\n                    number: {\n                        container: '#cardNumber',\n                        internalLabel: undefined,\n                        placeholder: 'Card number',\n                        supportedCardBrands: {\n                            'american-express': false,\n                            maestro: false,\n                        },\n                    },\n                    cardholderName: {\n                        container: '#cardName',\n                        internalLabel: undefined,\n                        placeholder: 'Card name',\n                    },\n                },\n                styles: {\n                    input: { color: '#000' },\n                    '.invalid': { color: '#f00', 'font-weight': 'bold' },\n                    ':focus': { color: '#00f' },\n                },\n                preventCursorJumps: true,\n            };\n\n            jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n                create: createMock,\n            });\n\n            await subject.initialize(formOptions, unsupportedCardBrands, 'clientToken');\n\n            expect(createMock).toHaveBeenCalledWith({\n                ...options,\n                client: clientMock,\n            });\n        });\n\n        it('creates and configures hosted fields for stored card verification', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValue(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n            const createMock = jest.fn();\n            const clientMock = {\n                ...getClientMock(),\n                request: expect.any(Function),\n            };\n\n            jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n                create: createMock,\n            });\n\n            const expectOptions = {\n                fields: {\n                    cvv: {\n                        container: '#cardCode',\n                        placeholder: 'Card code',\n                    },\n                    number: {\n                        container: '#cardNumber',\n                        placeholder: 'Card number',\n                    },\n                },\n                styles: {\n                    input: { color: '#000' },\n                    '.invalid': { color: '#f00', 'font-weight': 'bold' },\n                    ':focus': { color: '#00f' },\n                },\n            };\n\n            await subject.initialize(\n                {\n                    ...formOptions,\n                    fields: {\n                        cardCodeVerification: {\n                            containerId: 'cardCode',\n                            placeholder: 'Card code',\n                            instrumentId: 'foobar_instrument_id',\n                        },\n                        cardNumberVerification: {\n                            containerId: 'cardNumber',\n                            placeholder: 'Card number',\n                            instrumentId: 'foobar_instrument_id',\n                        },\n                    },\n                },\n                [],\n                'clientToken',\n            );\n\n            expect(createMock).toHaveBeenCalledWith({\n                ...expectOptions,\n                client: clientMock,\n            });\n        });\n    });\n\n    describe('#isInitialized', () => {\n        it('returns true if hosted form is initialized', async () => {\n            await subject.initialize(formOptions, [], 'clientToken');\n            expect(subject.isInitialized()).toBe(true);\n        });\n\n        it('returns false when no fields specified in form options', async () => {\n            await subject.initialize({ fields: {} }, [], 'clientToken');\n            expect(subject.isInitialized()).toBe(false);\n        });\n\n        it('changes hosted form initialization state', async () => {\n            jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n                create: jest.fn().mockResolvedValue({\n                    teardown: jest.fn(),\n                    on: jest.fn(),\n                }),\n            });\n\n            await subject.initialize(formOptions, [], 'clientToken');\n            expect(subject.isInitialized()).toBe(true);\n\n            await subject.deinitialize();\n            expect(subject.isInitialized()).toBe(false);\n        });\n    });\n\n    describe('#deinitialize', () => {\n        it('calls hosted form fields teardown on deinitialize', async () => {\n            const teardownMock = jest.fn();\n\n            jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n                create: jest.fn().mockResolvedValue({\n                    teardown: teardownMock,\n                    on: jest.fn(),\n                }),\n            });\n\n            await subject.initialize(formOptions, [], 'clientToken');\n            await subject.deinitialize();\n\n            expect(teardownMock).toHaveBeenCalled();\n        });\n\n        it('does not call teardown if fields are not initialized', async () => {\n            await subject.initialize({ ...formOptions, fields: {} }, [], 'clientToken');\n            await subject.deinitialize();\n\n            expect(cardFields.teardown).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#tokenize', () => {\n        it('tokenizes data through hosted fields', async () => {\n            const tokenizeMock = jest.fn().mockResolvedValue({ nonce: 'nonce' });\n\n            jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n                create: jest.fn().mockResolvedValue({\n                    teardown: jest.fn(),\n                    on: jest.fn(),\n                    tokenize: tokenizeMock,\n                }),\n            });\n\n            await subject.initialize(formOptions, [], 'clientToken');\n            const billingAddress = getBillingAddress();\n\n            await subject.tokenize(billingAddress);\n\n            expect(tokenizeMock).toHaveBeenCalledWith({\n                billingAddress: {\n                    countryName: billingAddress.country,\n                    postalCode: billingAddress.postalCode,\n                    streetAddress: billingAddress.address1,\n                },\n            });\n        });\n\n        it('returns invalid form error when tokenizing with invalid form data', async () => {\n            const tokenizeMock = jest.fn().mockRejectedValue({\n                name: 'BraintreeError',\n                code: 'HOSTED_FIELDS_FIELDS_EMPTY',\n            });\n\n            jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n                create: jest.fn().mockResolvedValue({\n                    teardown: jest.fn(),\n                    on: jest.fn(),\n                    tokenize: tokenizeMock,\n                }),\n            });\n\n            await subject.initialize(formOptions, [], 'clientToken');\n\n            await expect(subject.tokenize(getBillingAddress())).rejects.toBeInstanceOf(\n                PaymentInvalidFormError,\n            );\n        });\n\n        it('throws error if trying to tokenize before initialization', async () => {\n            await expect(subject.tokenize(getBillingAddress())).rejects.toBeInstanceOf(\n                NotInitializedError,\n            );\n        });\n    });\n\n    describe('#tokenizeForStoredCardVerification', () => {\n        it('tokenizes data for stored card verification', async () => {\n            const tokenizeMock = jest.fn().mockResolvedValue({ nonce: 'nonce' });\n\n            jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n                create: jest.fn().mockResolvedValue({\n                    teardown: jest.fn(),\n                    on: jest.fn(),\n                    tokenize: tokenizeMock,\n                }),\n            });\n\n            await subject.initialize(formOptions, [], 'clientToken');\n            await subject.tokenizeForStoredCardVerification();\n\n            expect(tokenizeMock).toHaveBeenCalled();\n        });\n\n        it('returns invalid form error on invalid stored card data', async () => {\n            const tokenizeMock = jest.fn().mockRejectedValue({\n                name: 'BraintreeError',\n                code: 'HOSTED_FIELDS_FIELDS_EMPTY',\n            });\n\n            jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n                create: jest.fn().mockResolvedValue({\n                    teardown: jest.fn(),\n                    on: jest.fn(),\n                    tokenize: tokenizeMock,\n                }),\n            });\n\n            await subject.initialize(formOptions, [], 'clientToken');\n\n            await expect(subject.tokenizeForStoredCardVerification()).rejects.toBeInstanceOf(\n                PaymentInvalidFormError,\n            );\n        });\n\n        it('throws error if trying to tokenize before initialization', async () => {\n            await expect(subject.tokenizeForStoredCardVerification()).rejects.toBeInstanceOf(\n                NotInitializedError,\n            );\n        });\n    });\n\n    describe('card fields events notifications', () => {\n        let handleFocus: jest.Mock;\n        let handleBlur: jest.Mock;\n        let handleEnter: jest.Mock;\n        let handleCardTypeChange: jest.Mock;\n        let handleValidate: jest.Mock;\n\n        beforeEach(async () => {\n            jest.spyOn(braintreeScriptLoader, 'loadHostedFields').mockResolvedValue({\n                create: jest.fn().mockResolvedValue({\n                    on: jest.fn((eventName, callback) => {\n                        cardFieldsEventEmitter.on(eventName, callback);\n                    }),\n                    tokenize: jest.fn(() => Promise.resolve({ nonce: 'foobar_nonce' })),\n                    teardown: jest.fn(),\n                }),\n            });\n\n            handleFocus = jest.fn();\n            handleBlur = jest.fn();\n            handleEnter = jest.fn();\n            handleCardTypeChange = jest.fn();\n            handleValidate = jest.fn();\n\n            await subject.initialize(\n                {\n                    ...formOptions,\n                    onFocus: handleFocus,\n                    onBlur: handleBlur,\n                    onEnter: handleEnter,\n                    onCardTypeChange: handleCardTypeChange,\n                    onValidate: handleValidate,\n                },\n                [],\n                'clientToken',\n            );\n        });\n\n        it('notifies on focus', () => {\n            cardFieldsEventEmitter.emit('focus', { emittedBy: 'cvv' });\n            expect(handleFocus).toHaveBeenCalledWith({ fieldType: 'cardCode' });\n        });\n\n        it('notifies on blur', () => {\n            cardFieldsEventEmitter.emit('blur', { emittedBy: 'cvv' });\n            expect(handleBlur).toHaveBeenCalledWith({ fieldType: 'cardCode', errors: {} });\n        });\n\n        it('notifies on blur with field errors', () => {\n            cardFieldsEventEmitter.emit('blur', {\n                emittedBy: 'cvv',\n                fields: { cvv: { isEmpty: true, isPotentiallyValid: true, isValid: false } },\n            });\n\n            expect(handleBlur).toHaveBeenCalledWith({\n                fieldType: 'cardCode',\n                errors: {\n                    cvv: {\n                        isEmpty: true,\n                        isPotentiallyValid: true,\n                        isValid: false,\n                    },\n                },\n            });\n        });\n\n        it('notifies on enter key', () => {\n            cardFieldsEventEmitter.emit('inputSubmitRequest', { emittedBy: 'cvv' });\n            expect(handleEnter).toHaveBeenCalledWith({ fieldType: 'cardCode' });\n        });\n\n        it('notifies on card type change', () => {\n            cardFieldsEventEmitter.emit('cardTypeChange', { cards: [{ type: 'visa' }] });\n            expect(handleCardTypeChange).toHaveBeenCalledWith({ cardType: 'visa' });\n        });\n\n        it('normalizes \"master-card\" to \"mastercard\"', () => {\n            cardFieldsEventEmitter.emit('cardTypeChange', { cards: [{ type: 'master-card' }] });\n            expect(handleCardTypeChange).toHaveBeenCalledWith({ cardType: 'mastercard' });\n        });\n\n        it('notifies undefined if card type is ambiguous', () => {\n            cardFieldsEventEmitter.emit('cardTypeChange', {\n                cards: [{ type: 'visa' }, { type: 'master-card' }],\n            });\n\n            expect(handleCardTypeChange).toHaveBeenCalledWith({ cardType: undefined });\n        });\n\n        it('notifies on validation errors', () => {\n            cardFieldsEventEmitter.emit('validityChange', {\n                fields: {\n                    cvv: { isValid: false },\n                    number: { isValid: false },\n                    expirationDate: { isValid: false },\n                },\n            });\n\n            expect(handleValidate).toHaveBeenCalledWith({\n                errors: {\n                    cardCode: [\n                        {\n                            fieldType: 'cardCode',\n                            message: 'Invalid card code',\n                            type: 'invalid_card_code',\n                        },\n                    ],\n                    cardNumber: [\n                        {\n                            fieldType: 'cardNumber',\n                            message: 'Invalid card number',\n                            type: 'invalid_card_number',\n                        },\n                    ],\n                    cardExpiry: [\n                        {\n                            fieldType: 'cardExpiry',\n                            message: 'Invalid card expiry',\n                            type: 'invalid_card_expiry',\n                        },\n                    ],\n                },\n                isValid: false,\n            });\n        });\n\n        it('notifies when form becomes valid', () => {\n            cardFieldsEventEmitter.emit('validityChange', {\n                fields: {\n                    cvv: { isValid: true },\n                    number: { isValid: true },\n                    expirationDate: { isValid: true },\n                },\n            });\n\n            expect(handleValidate).toHaveBeenCalledWith({\n                errors: {\n                    cardCode: undefined,\n                    cardNumber: undefined,\n                    cardExpiry: undefined,\n                },\n                isValid: true,\n            });\n        });\n\n        it('notifies when tokenizing valid form', async () => {\n            await subject.tokenize(getBillingAddress());\n\n            expect(handleValidate).toHaveBeenCalledWith({\n                errors: {\n                    cardCode: undefined,\n                    cardNumber: undefined,\n                    cardExpiry: undefined,\n                },\n                isValid: true,\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-hosted-form/braintree-hosted-form.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-local-payment-methods/braintree-local-methods-payment-initialize-options.ts",
    "content": "export interface BraintreeLocalMethodsPaymentInitializeOptions {\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    container: string;\n    /**\n     * Text that will be displayed on lpm button\n     */\n    buttonText: string;\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n    /**\n     * A callback for submitting payment form that gets called\n     * when buyer approved PayPal account.\n     */\n    submitForm?(): void;\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError(error: unknown): void;\n}\n\nexport interface WithBraintreeLocalMethodsPaymentInitializeOptions {\n    braintreelocalmethods?: BraintreeLocalMethodsPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-local-payment-methods/braintree-local-methods-payment-strategy.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BraintreeLocalPayment,\n    BraintreeOrderStatus,\n    BraintreeScriptLoader,\n    BraintreeSdk,\n    BraintreeSDKVersionManager,\n    getBraintreeLocalPaymentMock,\n    getDataCollectorMock,\n    NonInstantLocalPaymentMethods,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodInvalidError,\n    RequestError,\n    StoreConfig,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCheckout,\n    getConfig,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport BraintreeRequestSender from '../braintree-request-sender';\nimport {\n    getBraintreeLocalMethods,\n    getBraintreeLocalMethodsInitializationOptions,\n} from '../mocks/braintree.mock';\n\nimport BraintreeLocalMethodsPaymentStrategy from './braintree-local-methods-payment-strategy';\n\ndescribe('BraintreeLocalMethodsPaymentStrategy', () => {\n    let strategy: BraintreeLocalMethodsPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let braintreeLocalPaymentMock: BraintreeLocalPayment;\n    let braintreeSdk: BraintreeSdk;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let paymentMethodMock: PaymentMethod;\n    let storeConfigMock: StoreConfig;\n    let loadingIndicator: LoadingIndicator;\n    let lpmButton: HTMLButtonElement;\n    let lpmContainer: HTMLElement;\n    let braintreeRequestSender: BraintreeRequestSender;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n    const sessionId = getDataCollectorMock().deviceData;\n\n    const instantPaymentMethodId = 'ideal';\n    const defaultOrderId = '123';\n    const requestSender = createRequestSender();\n\n    const braintreelocalmethods = getBraintreeLocalMethodsInitializationOptions();\n\n    const initializationOptions: PaymentInitializeOptions = {\n        methodId: instantPaymentMethodId,\n        gatewayId: 'braintreelocalmethods',\n        braintreelocalmethods,\n    };\n\n    beforeEach(() => {\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        braintreeSdk = new BraintreeSdk(braintreeScriptLoader);\n        loadingIndicator = new LoadingIndicator();\n        braintreeRequestSender = new BraintreeRequestSender(requestSender);\n        strategy = new BraintreeLocalMethodsPaymentStrategy(\n            paymentIntegrationService,\n            braintreeSdk,\n            braintreeRequestSender,\n            loadingIndicator,\n            1,\n            10,\n        );\n\n        lpmContainer = document.createElement('div');\n        lpmContainer.id = 'checkout-payment-continue';\n        document.body.appendChild(lpmContainer);\n\n        lpmButton = document.createElement('button');\n        lpmButton.id = instantPaymentMethodId;\n        document.body.appendChild(lpmButton);\n\n        paymentMethodMock = {\n            ...getBraintreeLocalMethods(),\n            clientToken: 'token',\n        };\n\n        storeConfigMock = getConfig().storeConfig;\n        storeConfigMock.checkoutSettings.features = {\n            'PAYPAL-4853.add_new_payment_flow_for_braintree_lpms': true,\n            'PAYPAL-5258.braintree_local_methods_polling': false,\n        };\n\n        braintreeLocalPaymentMock = getBraintreeLocalPaymentMock(\n            defaultOrderId,\n            async () => {},\n            undefined,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n            getCheckout(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfigMock,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder');\n\n        jest.spyOn(loadingIndicator, 'show').mockImplementation(jest.fn);\n        jest.spyOn(loadingIndicator, 'hide').mockImplementation(jest.fn);\n\n        jest.spyOn(braintreeSdk, 'initialize');\n        jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockImplementation(() =>\n            Promise.resolve(getDataCollectorMock()),\n        );\n\n        jest.spyOn(braintreeSdk, 'getBraintreeLocalPayment').mockResolvedValue(\n            braintreeLocalPaymentMock,\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        document.body.removeChild(lpmButton);\n        document.body.removeChild(lpmContainer);\n    });\n\n    it('creates BraintreeLocalMethodsPaymentStrategy', () => {\n        expect(strategy).toBeInstanceOf(BraintreeLocalMethodsPaymentStrategy);\n    });\n\n    describe('#initialize', () => {\n        it('throws error when methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error when gatewayId is not provided', async () => {\n            const options = {\n                methodId: instantPaymentMethodId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if options.braintreelocalmethods is not provided', async () => {\n            const options = {\n                methodId: instantPaymentMethodId,\n                gatewayId: 'braintreelocalmethods',\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if clientToken is not provided (instant payment method only)', async () => {\n            paymentMethodMock.clientToken = '';\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws error if merchantId is not provided (instant payment method only)', async () => {\n            paymentMethodMock.config.merchantId = undefined;\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws error if initializationData is not provided (instant payment method only)', async () => {\n            paymentMethodMock.initializationData = null;\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('initializes braintree integration service (instant payment method only)', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeSdk.initialize).toHaveBeenCalledWith(paymentMethodMock.clientToken);\n        });\n\n        it('does not load BraintreeLocalMethods for non-instant payment methods', async () => {\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: NonInstantLocalPaymentMethods.TRUSTLY,\n            });\n\n            expect(braintreeSdk.getBraintreeLocalPayment).not.toHaveBeenCalled();\n        });\n\n        it('loads BraintreeLocalMethods (instant payment method only)', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeSdk.getBraintreeLocalPayment).toHaveBeenCalledWith(\n                paymentMethodMock.config.merchantId,\n            );\n        });\n\n        it('performs error handling flow when there is an error while getting braintree local payment sdk', async () => {\n            jest.spyOn(braintreeSdk, 'getBraintreeLocalPayment').mockImplementationOnce(() => {\n                throw new Error('error');\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreelocalmethods?.onError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize', () => {\n        it('deinitializes strategy', async () => {\n            await expect(strategy.deinitialize()).resolves.not.toThrow();\n        });\n    });\n\n    describe('#finalize', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#execute', () => {\n        it('throws an error if payload.payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws PaymentArgumentInvalidError if payment is not provided', async () => {\n            await expect(strategy.execute({})).rejects.toThrow(PaymentArgumentInvalidError);\n        });\n\n        describe('when instant payment method', () => {\n            let payload: OrderRequestBody;\n\n            beforeEach(() => {\n                payload = {\n                    payment: {\n                        gatewayId: 'braintreelocalmethods',\n                        methodId: instantPaymentMethodId,\n                    },\n                };\n            });\n\n            it('should call startPayment method from Braintree local payment methods instance', async () => {\n                braintreeLocalPaymentMock = getBraintreeLocalPaymentMock(\n                    defaultOrderId,\n                    async () => {},\n                    undefined,\n                );\n\n                jest.spyOn(braintreeSdk, 'getBraintreeLocalPayment').mockResolvedValue(\n                    braintreeLocalPaymentMock,\n                );\n\n                await strategy.initialize(initializationOptions);\n                await strategy.execute(payload);\n\n                expect(braintreeLocalPaymentMock.startPayment).toHaveBeenCalledWith(\n                    {\n                        address: {\n                            countryCode: 'US',\n                        },\n                        amount: 190,\n                        currencyCode: 'USD',\n                        email: 'foo@bar.com',\n                        fallback: {\n                            buttonText: 'Complete Payment',\n                            url: storeConfigMock.links.checkoutLink,\n                        },\n                        givenName: 'Test',\n                        surname: 'Tester',\n                        onPaymentStart: expect.any(Function),\n                        paymentType: instantPaymentMethodId,\n                        shippingAddressRequired: true,\n                    },\n                    expect.any(Function),\n                );\n            });\n\n            it('starts Braintree LPM flow (opens popup) when orderId was successfully saved on BE side', async () => {\n                const startPaymentMock = jest.fn();\n\n                const error = new RequestError(\n                    getResponse({\n                        additional_action_required: {\n                            data: {\n                                order_id_saved_successfully: true,\n                            },\n                        },\n                    }),\n                );\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment')\n                    .mockReturnValueOnce(Promise.reject(error))\n                    .mockReturnValueOnce(Promise.resolve(paymentIntegrationService.getState()));\n\n                braintreeLocalPaymentMock = getBraintreeLocalPaymentMock(\n                    defaultOrderId,\n                    () => {\n                        startPaymentMock();\n\n                        return Promise.resolve();\n                    },\n                    undefined,\n                );\n\n                jest.spyOn(braintreeSdk, 'getBraintreeLocalPayment').mockResolvedValue(\n                    braintreeLocalPaymentMock,\n                );\n\n                await strategy.initialize(initializationOptions);\n                await strategy.execute(payload);\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                expect(startPaymentMock).toHaveBeenCalled();\n            });\n\n            it('triggers onError callback when there is an issue with Braintree LPM payment flow', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValue(\n                    Promise.resolve(paymentIntegrationService.getState()),\n                );\n\n                braintreeLocalPaymentMock = getBraintreeLocalPaymentMock(\n                    defaultOrderId,\n                    async () => {},\n                    {\n                        code: 'non close window lpm flow error',\n                    },\n                );\n\n                jest.spyOn(braintreeSdk, 'getBraintreeLocalPayment').mockResolvedValue(\n                    braintreeLocalPaymentMock,\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                try {\n                    await strategy.execute(payload);\n                } catch (error: unknown) {\n                    expect(error).toBeInstanceOf(PaymentMethodInvalidError);\n                }\n            });\n\n            it('hides loader and does not throw anything when customer close popup window', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValue(\n                    Promise.resolve(paymentIntegrationService.getState()),\n                );\n\n                braintreeLocalPaymentMock = getBraintreeLocalPaymentMock(\n                    defaultOrderId,\n                    async () => {},\n                    {\n                        code: 'LOCAL_PAYMENT_WINDOW_CLOSED',\n                    },\n                );\n\n                jest.spyOn(braintreeSdk, 'getBraintreeLocalPayment').mockResolvedValue(\n                    braintreeLocalPaymentMock,\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                try {\n                    await strategy.execute(payload);\n                } catch (error: unknown) {\n                    expect(loadingIndicator.hide).toHaveBeenCalled();\n                }\n            });\n        });\n\n        describe('when non-instant payment method', () => {\n            let payload: OrderRequestBody;\n\n            beforeEach(() => {\n                payload = {\n                    payment: {\n                        gatewayId: 'braintreelocalmethods',\n                        methodId: NonInstantLocalPaymentMethods.TRUSTLY,\n                    },\n                };\n\n                Object.defineProperty(window, 'location', {\n                    value: {\n                        replace: jest.fn(),\n                    },\n                });\n            });\n\n            it('should not use startPayment method', async () => {\n                await strategy.execute(payload);\n\n                expect(braintreeLocalPaymentMock.startPayment).not.toHaveBeenCalled();\n            });\n\n            it('submits order payload with payment data', async () => {\n                await strategy.execute(payload);\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            });\n\n            it('submits payment payload with payment data', async () => {\n                await strategy.execute(payload);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'trustly',\n                        paymentData: expect.objectContaining({\n                            deviceSessionId: sessionId,\n                            formattedPayload: {\n                                method: NonInstantLocalPaymentMethods.TRUSTLY,\n                            },\n                        }),\n                    }),\n                );\n            });\n\n            it('when submit payment returns additional action required specific error', async () => {\n                const error = new RequestError(\n                    getResponse({\n                        additional_action_required: {\n                            type: 'offsite_redirect',\n                            data: {\n                                redirect_url: 'redirect_url',\n                            },\n                        },\n                    }),\n                );\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() =>\n                    Promise.reject(error),\n                );\n\n                try {\n                    await strategy.execute(payload);\n                } catch (_) {\n                    expect(window.location.replace).toHaveBeenCalledWith('redirect_url');\n                }\n            });\n\n            it('does not perform additional action when error has invalid shape #1', async () => {\n                const error = new RequestError(getResponse(undefined));\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() =>\n                    Promise.reject(error),\n                );\n\n                try {\n                    await strategy.execute(payload);\n                } catch (_) {\n                    expect(window.location.replace).not.toHaveBeenCalled();\n                }\n            });\n\n            it('does not perform additional action when error has invalid shape #2', async () => {\n                const error = null;\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() =>\n                    Promise.reject(error),\n                );\n\n                try {\n                    await strategy.execute(payload);\n                } catch (_) {\n                    expect(window.location.replace).not.toHaveBeenCalled();\n                }\n            });\n\n            it('does not perform additional action when error has invalid shape #3', async () => {\n                const error = new RequestError(\n                    getResponse({\n                        additional_action_required: undefined,\n                    }),\n                );\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() =>\n                    Promise.reject(error),\n                );\n\n                try {\n                    await strategy.execute(payload);\n                } catch (_) {\n                    expect(window.location.replace).not.toHaveBeenCalled();\n                }\n            });\n\n            it('toggles loading indicator and throws an error when error is not an instance of additional action required', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() =>\n                    Promise.reject(new Error('submit payment error')),\n                );\n\n                try {\n                    await strategy.execute(payload);\n                } catch (error: unknown) {\n                    expect(loadingIndicator.hide).toHaveBeenCalled();\n                    expect(error).toBeInstanceOf(Error);\n                }\n            });\n        });\n    });\n\n    describe('#polling mechanism', () => {\n        beforeEach(() => {\n            const storeConfigMock = {\n                ...getConfig().storeConfig,\n                checkoutSettings: {\n                    ...getConfig().storeConfig.checkoutSettings,\n                    features: {\n                        'PAYPAL-4853.add_new_payment_flow_for_braintree_lpms': true,\n                        'PAYPAL-5258.braintree_local_methods_polling': true,\n                    },\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.resolve(paymentIntegrationService.getState()),\n            );\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue(storeConfigMock);\n\n            const validBraintreeResponse = {\n                body: {\n                    additional_action_required: {\n                        data: {\n                            order_id_saved_successfully: true,\n                        },\n                    },\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitOrder').mockRejectedValue(\n                validBraintreeResponse,\n            );\n        });\n\n        it('initialize polling mechanism', async () => {\n            jest.spyOn(braintreeRequestSender, 'getOrderStatus').mockReturnValue(\n                Promise.resolve({ status: BraintreeOrderStatus.Completed }),\n            );\n\n            const payload = {\n                payment: {\n                    methodId: 'braintreelocalmethods',\n                    gatewayId: 'braintreelocalmethods',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            await strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreeRequestSender.getOrderStatus).toHaveBeenCalled();\n        });\n\n        it('request order status with proper payload', async () => {\n            jest.spyOn(braintreeRequestSender, 'getOrderStatus').mockReturnValue(\n                Promise.resolve({ status: BraintreeOrderStatus.Completed }),\n            );\n\n            const validBraintreeResponse = {\n                body: {\n                    additional_action_required: {\n                        data: {\n                            order_id_saved_successfully: true,\n                        },\n                    },\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitOrder').mockRejectedValue(\n                validBraintreeResponse,\n            );\n\n            const payload = {\n                payment: {\n                    methodId: 'braintreelocalmethods',\n                    gatewayId: 'braintreelocalmethods',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            await strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreeRequestSender.getOrderStatus).toHaveBeenCalledWith(\n                'braintreelocalmethods',\n                {\n                    params: {\n                        useMetadata: false,\n                    },\n                },\n            );\n        });\n\n        it('deinitialize polling mechanism', async () => {\n            jest.spyOn(braintreeRequestSender, 'getOrderStatus').mockReturnValue(\n                Promise.resolve({ status: BraintreeOrderStatus.Completed }),\n            );\n\n            const validBraintreeResponse = {\n                body: {\n                    additional_action_required: {\n                        data: {\n                            order_id_saved_successfully: true,\n                        },\n                    },\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitOrder').mockRejectedValue(\n                validBraintreeResponse,\n            );\n\n            const payload = {\n                payment: {\n                    methodId: 'braintreelocalmethods',\n                    gatewayId: 'braintreelocalmethods',\n                },\n            };\n\n            jest.spyOn(global, 'clearTimeout');\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n            await strategy.deinitialize();\n\n            expect(clearTimeout).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-local-payment-methods/braintree-local-methods-payment-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-local-payment-methods/create-braintree-local-methods-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeLocalMethodsPaymentStrategy from './braintree-local-methods-payment-strategy';\nimport createBraintreeLocalMethodsPaymentStrategy from './create-braintree-local-methods-payment-strategy';\n\ndescribe('createBraintreePaypalCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates braintree local methods payment strategy', () => {\n        const strategy = createBraintreeLocalMethodsPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreeLocalMethodsPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-local-payment-methods/create-braintree-local-methods-payment-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/braintree-paypal-button-initialize-options.ts",
    "content": "import { BraintreeError, PaypalStyleOptions } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    Address,\n    BuyNowCartRequestBody,\n    StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default interface BraintreePaypalButtonInitializeOptions {\n    /**\n     * The options that are required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: {\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\n    };\n\n    /**\n     * The option that used to initialize a PayPal script with provided currency code.\n     */\n    currencyCode?: string;\n\n    /**\n     * @internal\n     * This is an internal property and therefore subject to change. DO NOT USE.\n     */\n    shouldProcessPayment?: boolean;\n\n    /**\n     * A set of styling options for the checkout button.\n     */\n    style?: Pick<\n        PaypalStyleOptions,\n        'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons' | 'height'\n    >;\n\n    /**\n     * Address to be used for shipping.\n     * If not provided, it will use the first saved address from the active customer.\n     */\n    shippingAddress?: Address | null;\n\n    /**\n     * A callback that gets called if unable to authorize and tokenize payment.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onAuthorizeError?(error: BraintreeError | StandardError): void;\n\n    /**\n     * A callback that gets called if unable to submit payment.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onPaymentError?(error: BraintreeError | StandardError): void;\n\n    /**\n     * A callback that gets called on any error instead of submit payment or authorization errors.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error: BraintreeError | StandardError): void;\n\n    /**\n     *\n     *  A callback that gets called when Braintree SDK restricts to render PayPal component.\n     *\n     */\n    onEligibilityFailure?(): void;\n}\n\nexport interface WithBraintreePaypalButtonInitializeOptions {\n    /**\n     * The options that are required to initialize Braintree PayPal wallet button on Product and Cart page.\n     */\n    braintreepaypal?: BraintreePaypalButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/braintree-paypal-button-strategy.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\nimport { EventEmitter } from 'events';\n\nimport {\n    BraintreeDataCollector,\n    BraintreeError,\n    BraintreeHostWindow,\n    BraintreeIntegrationService,\n    BraintreePaypalCheckout,\n    BraintreePaypalCheckoutCreator,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n    getBraintree,\n    getDataCollectorMock,\n    getPayPalCheckoutCreatorMock,\n    getPaypalCheckoutMock,\n    PaypalButtonOptions,\n    PaypalSDK,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    BuyNowCartCreationError,\n    BuyNowCartRequestBody,\n    Cart,\n    CartSource,\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getCart,\n    getCustomer,\n    getShippingAddress,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getPaypalSDKMock } from '../mocks/paypal.mock';\n\nimport BraintreePaypalButtonInitializeOptions, {\n    WithBraintreePaypalButtonInitializeOptions,\n} from './braintree-paypal-button-initialize-options';\nimport BraintreePaypalButtonStrategy from './braintree-paypal-button-strategy';\n\ndescribe('BraintreePaypalButtonStrategy', () => {\n    let buyNowCart: Cart;\n    let cart: Cart;\n    let dataCollector: BraintreeDataCollector;\n    let eventEmitter: EventEmitter;\n    let braintreeIntegrationService: BraintreeIntegrationService;\n    let braintreePaypalCheckoutMock: BraintreePaypalCheckout;\n    let braintreePaypalCheckoutCreatorMock: BraintreePaypalCheckoutCreator;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let formPoster: FormPoster;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalButtonElement: HTMLDivElement;\n    let paypalSdkMock: PaypalSDK;\n    let strategy: BraintreePaypalButtonStrategy;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    const defaultButtonContainerId = 'braintree-paypal-button-mock-id';\n\n    const braintreePaypalOptions: BraintreePaypalButtonInitializeOptions = {\n        shouldProcessPayment: false,\n        style: { height: 45 },\n        onAuthorizeError: jest.fn(),\n        onPaymentError: jest.fn(),\n        onError: jest.fn(),\n        onEligibilityFailure: jest.fn(),\n    };\n\n    const buyNowCartRequestBody: BuyNowCartRequestBody = {\n        source: CartSource.BuyNow,\n        lineItems: [\n            {\n                productId: 1,\n                quantity: 2,\n                optionSelections: {\n                    optionId: 11,\n                    optionValue: 11,\n                },\n            },\n        ],\n    };\n\n    const initializationOptions: CheckoutButtonInitializeOptions &\n        WithBraintreePaypalButtonInitializeOptions = {\n        methodId: 'braintreepaypal',\n        containerId: defaultButtonContainerId,\n        braintreepaypal: braintreePaypalOptions,\n    };\n\n    const buyNowInitializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: 'braintreepaypal',\n        containerId: defaultButtonContainerId,\n        braintreepaypal: {\n            ...braintreePaypalOptions,\n            currencyCode: 'USD',\n            buyNowInitializeOptions: {\n                getBuyNowCartRequestBody: jest.fn().mockReturnValue(buyNowCartRequestBody),\n            },\n        },\n    };\n\n    const getSDKPayPalCheckoutMockWithErrorCallbackCall = () => {\n        return jest.fn(\n            (\n                _options: unknown,\n                _successCallback: unknown,\n                errorCallback: (err: BraintreeError) => void,\n            ) => {\n                errorCallback({ type: 'UNKNOWN', code: '234' } as BraintreeError);\n\n                return Promise.resolve(braintreePaypalCheckoutMock);\n            },\n        );\n    };\n\n    const getSDKPaypalCheckoutMockWithSuccessCallbackCall = (\n        braintreePaypalCheckoutPayloadMock: BraintreePaypalCheckout,\n    ) => {\n        return jest.fn(\n            (\n                _options: unknown,\n                successCallback: (braintreePaypalCheckout: BraintreePaypalCheckout) => void,\n            ) => {\n                successCallback(braintreePaypalCheckoutPayloadMock);\n\n                return Promise.resolve(braintreePaypalCheckoutMock);\n            },\n        );\n    };\n\n    beforeEach(() => {\n        buyNowCart = getBuyNowCart();\n        cart = getCart();\n        dataCollector = getDataCollectorMock();\n        eventEmitter = new EventEmitter();\n        paymentMethod = {\n            ...getBraintree(),\n            clientToken: 'myToken',\n        };\n        paypalSdkMock = getPaypalSDKMock();\n        (window as BraintreeHostWindow).paypal = paypalSdkMock;\n        braintreePaypalCheckoutMock = getPaypalCheckoutMock();\n        braintreePaypalCheckoutCreatorMock = getPayPalCheckoutCreatorMock(\n            braintreePaypalCheckoutMock,\n            false,\n        );\n\n        paypalButtonElement = document.createElement('div');\n        paypalButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(paypalButtonElement);\n\n        formPoster = createFormPoster();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        braintreeIntegrationService = new BraintreeIntegrationService(\n            braintreeScriptLoader,\n            window,\n        );\n\n        strategy = new BraintreePaypalButtonStrategy(\n            paymentIntegrationService,\n            formPoster,\n            braintreeIntegrationService,\n            window,\n        );\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation(() => {});\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue(\n            getCustomer(),\n        );\n        jest.spyOn(paymentIntegrationService, 'loadDefaultCheckout').mockImplementation(jest.fn());\n\n        jest.spyOn(braintreeIntegrationService, 'getPaypalCheckout').mockImplementation(\n            getSDKPaypalCheckoutMockWithSuccessCallbackCall(braintreePaypalCheckoutMock),\n        );\n\n        jest.spyOn(braintreeIntegrationService, 'getDataCollector').mockResolvedValue(\n            dataCollector,\n        );\n        jest.spyOn(braintreeIntegrationService, 'removeElement').mockImplementation(jest.fn());\n        jest.spyOn(braintreeScriptLoader, 'loadPaypalCheckout').mockResolvedValue(\n            braintreePaypalCheckoutCreatorMock,\n        );\n        jest.spyOn(paypalSdkMock, 'Buttons').mockImplementation((options: PaypalButtonOptions) => {\n            eventEmitter.on('createOrder', () => {\n                if (typeof options.createOrder === 'function') {\n                    options.createOrder().catch(() => {});\n                }\n            });\n\n            eventEmitter.on('approve', () => {\n                if (typeof options.onApprove === 'function') {\n                    options.onApprove({ payerId: 'PAYER_ID' }).catch(() => {});\n                }\n            });\n\n            eventEmitter.on('click', () => {\n                if (typeof options.onClick === 'function') {\n                    options.onClick();\n                }\n            });\n\n            return {\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n            };\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BraintreeHostWindow).paypal;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(paypalButtonElement);\n        }\n    });\n\n    it('creates an instance of the braintree paypal button button strategy', () => {\n        expect(strategy).toBeInstanceOf(BraintreePaypalButtonStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if braintreepaypal is not provided', async () => {\n            const options = {\n                methodId: 'braintreepaypal',\n                containerId: defaultButtonContainerId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if container id is not provided', async () => {\n            const options = {\n                methodId: 'braintreepaypal',\n                containerId: '',\n                braintreepaypal: {},\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if braintreepaypal.currencyCode is not provided (BuyNow flow)', async () => {\n            try {\n                await strategy.initialize({\n                    methodId: 'braintreepaypal',\n                    containerId: defaultButtonContainerId,\n                    braintreepaypal: {\n                        ...braintreePaypalOptions,\n                        buyNowInitializeOptions: {\n                            getBuyNowCartRequestBody: jest.fn(),\n                        },\n                    },\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not load default checkout for BuyNowFlow', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).not.toHaveBeenCalled();\n        });\n\n        it('throws error if client token is missing', async () => {\n            paymentMethod.clientToken = undefined;\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws error if initialization data is missing', async () => {\n            paymentMethod.initializationData = undefined;\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('initializes braintree integration service', async () => {\n            braintreeIntegrationService.initialize = jest.fn();\n            braintreeIntegrationService.getPaypalCheckout = jest.fn();\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n                paymentMethod.clientToken,\n            );\n        });\n\n        it('initializes braintree paypal checkout with proper options', async () => {\n            braintreeIntegrationService.initialize = jest.fn();\n            braintreeIntegrationService.getPaypalCheckout = jest.fn();\n            paymentMethod.initializationData = {\n                ...paymentMethod.initializationData,\n                isCreditEnabled: false,\n                currency: 'USD',\n                intent: undefined,\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n                paymentMethod.clientToken,\n            );\n            expect(braintreeIntegrationService.getPaypalCheckout).toHaveBeenCalledWith(\n                {\n                    currency: 'USD',\n                    isCreditEnabled: false,\n                    intent: undefined,\n                    commit: false,\n                },\n                expect.any(Function),\n                expect.any(Function),\n            );\n        });\n\n        it('calls onError callback option on paypal checkout creation failure', async () => {\n            braintreeIntegrationService.getPaypalCheckout =\n                getSDKPayPalCheckoutMockWithErrorCallbackCall();\n\n            await strategy.initialize(initializationOptions);\n\n            expect(initializationOptions.braintreepaypal?.onError).toHaveBeenCalled();\n        });\n\n        it('throws an error if buy now cart request body data is not provided', async () => {\n            const buyNowInitializationOptions: CheckoutButtonInitializeOptions = {\n                methodId: 'braintreepaypal',\n                containerId: defaultButtonContainerId,\n                braintreepaypal: {\n                    ...braintreePaypalOptions,\n                    currencyCode: 'USD',\n                    buyNowInitializeOptions: {\n                        getBuyNowCartRequestBody: jest.fn().mockReturnValue(undefined),\n                    },\n                },\n            };\n\n            await strategy.initialize(buyNowInitializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalOptions.onPaymentError).toHaveBeenCalledWith(\n                new MissingDataError(MissingDataErrorType.MissingCart),\n            );\n        });\n\n        it('throws an error if there was an issue with buy now cart creation (Buy Now flow)', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n                Promise.reject(new Error()),\n            );\n\n            await strategy.initialize(buyNowInitializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalOptions.onPaymentError).toHaveBeenCalledWith(\n                new BuyNowCartCreationError(),\n            );\n        });\n\n        it('creates order with Buy Now cart id (Buy Now flow)', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n                Promise.resolve(buyNowCart),\n            );\n\n            await strategy.initialize(buyNowInitializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(formPoster.postForm).toHaveBeenCalledWith(\n                '/checkout.php',\n                expect.objectContaining({\n                    cart_id: buyNowCart.id,\n                }),\n            );\n        });\n\n        it('renders Braintree PayPal button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                createOrder: expect.any(Function),\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.PAYPAL,\n                onApprove: expect.any(Function),\n                style: {\n                    shape: 'rect',\n                    height: 45,\n                },\n            });\n        });\n\n        it('removes Braintree PayPal button container when paypal is not available in window', async () => {\n            delete (window as BraintreeHostWindow).paypal;\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultButtonContainerId,\n            );\n        });\n\n        it('does not render Braintree PayPal button and calls onEligibilityFailure callback', async () => {\n            const renderMock = jest.fn();\n\n            jest.spyOn(paypalSdkMock, 'Buttons').mockImplementation(() => {\n                return {\n                    isEligible: jest.fn(() => false),\n                    render: renderMock,\n                    close: jest.fn(),\n                };\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                createOrder: expect.any(Function),\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.PAYPAL,\n                onApprove: expect.any(Function),\n                style: {\n                    shape: 'rect',\n                    height: 45,\n                },\n            });\n\n            expect(braintreePaypalOptions.onEligibilityFailure).toHaveBeenCalled();\n            expect(renderMock).not.toHaveBeenCalled();\n        });\n\n        it('renders Braintree PayPal button in production environment if payment method is in test mode', async () => {\n            paymentMethod.config.testMode = false;\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith(\n                expect.objectContaining({ env: 'production' }),\n            );\n        });\n\n        it('sets up PayPal payment flow with provided address', async () => {\n            await strategy.initialize({\n                ...initializationOptions,\n                braintreepaypal: {\n                    ...initializationOptions.braintreepaypal,\n                    shippingAddress: {\n                        ...getShippingAddress(),\n                        address1: 'a1',\n                        address2: 'a2',\n                        city: 'c',\n                        countryCode: 'AU',\n                        phone: '0123456',\n                        postalCode: '2000',\n                        stateOrProvinceCode: 'NSW',\n                        firstName: 'foo',\n                        lastName: 'bar',\n                    },\n                },\n            });\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.createPayment).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    shippingAddressOverride: {\n                        city: 'c',\n                        countryCode: 'AU',\n                        line1: 'a1',\n                        line2: 'a2',\n                        phone: '0123456',\n                        postalCode: '2000',\n                        recipientName: 'foo bar',\n                        state: 'NSW',\n                    },\n                }),\n            );\n        });\n\n        it('sets up PayPal payment flow with no address when null is passed', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue(\n                undefined,\n            );\n\n            await strategy.initialize({\n                ...initializationOptions,\n                braintreepaypal: {\n                    ...initializationOptions.braintreepaypal,\n                    shippingAddress: null,\n                },\n            });\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.createPayment).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    shippingAddressOverride: undefined,\n                }),\n            );\n        });\n\n        it('sets up PayPal payment flow with current checkout details when customer is ready to pay', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.createPayment).toHaveBeenCalledWith({\n                amount: 190,\n                currency: 'USD',\n                enableShippingAddress: true,\n                flow: 'checkout',\n                offerCredit: false,\n                shippingAddressEditable: false,\n                shippingAddressOverride: {\n                    city: 'Some City',\n                    countryCode: 'US',\n                    line1: '12345 Testing Way',\n                    line2: '',\n                    phone: '555-555-5555',\n                    postalCode: '95555',\n                    recipientName: 'Test Tester',\n                    state: 'CA',\n                },\n            });\n        });\n\n        it('triggers error callback if unable to set up payment flow', async () => {\n            const expectedError = new Error('Unable to set up payment flow');\n\n            expectedError.name = 'BraintreeError';\n\n            jest.spyOn(braintreePaypalCheckoutMock, 'createPayment').mockImplementation(() =>\n                Promise.reject(expectedError),\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalOptions.onPaymentError).toHaveBeenCalledWith(expectedError);\n        });\n\n        it('tokenizes PayPal payment details when authorization event is triggered', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.tokenizePayment).toHaveBeenCalledWith({\n                payerId: 'PAYER_ID',\n            });\n        });\n\n        it('posts payment details to server to set checkout data when PayPal payment details are tokenized', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(formPoster.postForm).toHaveBeenCalledWith(\n                '/checkout.php',\n                expect.objectContaining({\n                    payment_type: 'paypal',\n                    provider: 'braintreepaypal',\n                    action: 'set_external_checkout',\n                    device_data: dataCollector.deviceData,\n                    nonce: 'NONCE',\n                    billing_address: JSON.stringify({\n                        email: 'foo@bar.com',\n                        first_name: 'Foo',\n                        last_name: 'Bar',\n                        address_line_1: '56789 Testing Way',\n                        address_line_2: 'Level 2',\n                        city: 'Some Other City',\n                        state: 'Arizona',\n                        country_code: 'US',\n                        postal_code: '96666',\n                    }),\n                    shipping_address: JSON.stringify({\n                        email: 'foo@bar.com',\n                        first_name: 'Hello',\n                        last_name: 'World',\n                        address_line_1: '12345 Testing Way',\n                        address_line_2: 'Level 1',\n                        city: 'Some City',\n                        state: 'California',\n                        country_code: 'US',\n                        postal_code: '95555',\n                    }),\n                }),\n            );\n        });\n\n        it('posts payment details to server to process payment if `shouldProcessPayment` is passed when PayPal payment details are tokenized', async () => {\n            const options = {\n                ...initializationOptions,\n                braintreepaypal: {\n                    ...braintreePaypalOptions,\n                    shouldProcessPayment: true,\n                },\n            };\n\n            await strategy.initialize(options);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(formPoster.postForm).toHaveBeenCalledWith(\n                '/checkout.php',\n                expect.objectContaining({\n                    payment_type: 'paypal',\n                    provider: 'braintreepaypal',\n                    action: 'process_payment',\n                    device_data: dataCollector.deviceData,\n                    nonce: 'NONCE',\n                    billing_address: JSON.stringify({\n                        email: 'foo@bar.com',\n                        first_name: 'Foo',\n                        last_name: 'Bar',\n                        address_line_1: '56789 Testing Way',\n                        address_line_2: 'Level 2',\n                        city: 'Some Other City',\n                        state: 'Arizona',\n                        country_code: 'US',\n                        postal_code: '96666',\n                    }),\n                    shipping_address: JSON.stringify({\n                        email: 'foo@bar.com',\n                        first_name: 'Hello',\n                        last_name: 'World',\n                        address_line_1: '12345 Testing Way',\n                        address_line_2: 'Level 1',\n                        city: 'Some City',\n                        state: 'California',\n                        country_code: 'US',\n                        postal_code: '95555',\n                    }),\n                }),\n            );\n        });\n\n        it('triggers error callback if unable to tokenize payment', async () => {\n            const expectedError = new Error('Unable to tokenize');\n\n            expectedError.name = 'BraintreeError';\n\n            jest.spyOn(braintreePaypalCheckoutMock, 'tokenizePayment').mockReturnValue(\n                Promise.reject(expectedError),\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalOptions.onAuthorizeError).toHaveBeenCalledWith(expectedError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('teardowns braintree sdk creator on strategy deinitialize', async () => {\n            braintreeIntegrationService.teardown = jest.fn();\n\n            await strategy.initialize(initializationOptions);\n            await strategy.deinitialize();\n\n            expect(braintreeIntegrationService.teardown).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/braintree-paypal-button-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/braintree-paypal-customer-initialize-options.ts",
    "content": "import { BraintreeError } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default interface BraintreePaypalCustomerInitializeOptions {\n    /**\n     * The ID of a container which the checkout button should be inserted into.\n     */\n    container: string;\n\n    buttonHeight?: number;\n\n    /**\n     * A callback that gets called on any error instead of submit payment or authorization errors.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error: BraintreeError | StandardError): void;\n\n    /**\n     * A callback that gets called when wallet button clicked\n     */\n    onClick?(): void;\n}\n\nexport interface WithBraintreePaypalCustomerInitializeOptions {\n    /**\n     * The options that are required to initialize the customer step of checkout\n     * when using Braintree PayPal.\n     */\n    braintreepaypal?: BraintreePaypalCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/braintree-paypal-customer-strategy.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\nimport { EventEmitter } from 'events';\n\nimport {\n    BraintreeDataCollector,\n    BraintreeError,\n    BraintreeHostWindow,\n    BraintreeIntegrationService,\n    BraintreePaypalCheckout,\n    BraintreePaypalCheckoutCreator,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n    getBraintree,\n    getDataCollectorMock,\n    getPayPalCheckoutCreatorMock,\n    getPaypalCheckoutMock,\n    PaypalButtonOptions,\n    PaypalButtonStyleColorOption,\n    PaypalSDK,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    CustomerInitializeOptions,\n    DefaultCheckoutButtonHeight,\n    InvalidArgumentError,\n    MissingDataError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getPaypalSDKMock } from '../mocks/paypal.mock';\n\nimport BraintreePaypalCustomerInitializeOptions, {\n    WithBraintreePaypalCustomerInitializeOptions,\n} from './braintree-paypal-customer-initialize-options';\nimport BraintreePaypalCustomerStrategy from './braintree-paypal-customer-strategy';\n\ndescribe('BraintreePaypalCustomerStrategy', () => {\n    let dataCollector: BraintreeDataCollector;\n    let eventEmitter: EventEmitter;\n    let braintreePaypalCheckoutMock: BraintreePaypalCheckout;\n    let braintreePaypalCheckoutCreatorMock: BraintreePaypalCheckoutCreator;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let formPoster: FormPoster;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let braintreeIntegrationService: BraintreeIntegrationService;\n    let paypalSdkMock: PaypalSDK;\n    let strategy: BraintreePaypalCustomerStrategy;\n    let paypalButtonElement: HTMLDivElement;\n    let paymentMethodMock: PaymentMethod;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    const defaultButtonContainerId = 'braintree-paypal-button-mock-id';\n\n    const braintreePaypalOptions: BraintreePaypalCustomerInitializeOptions = {\n        container: defaultButtonContainerId,\n        onClick: jest.fn(),\n        onError: jest.fn(),\n    };\n\n    const initializationOptions: CustomerInitializeOptions &\n        WithBraintreePaypalCustomerInitializeOptions = {\n        methodId: 'braintreepaypal',\n        braintreepaypal: braintreePaypalOptions,\n    };\n\n    const getSDKPaypalCheckoutMock = (\n        braintreePaypalCheckoutPayloadMock?: BraintreePaypalCheckout,\n    ) => {\n        if (!braintreePaypalCheckoutPayloadMock) {\n            return jest.fn(\n                (\n                    _options: unknown,\n                    _successCallback: unknown,\n                    errorCallback: (err: BraintreeError) => void,\n                ) => {\n                    errorCallback({ type: 'UNKNOWN', code: '234' } as BraintreeError);\n\n                    return Promise.resolve(braintreePaypalCheckoutMock);\n                },\n            );\n        }\n\n        return jest.fn(\n            (\n                _options: unknown,\n                successCallback: (braintreePaypalCheckout: BraintreePaypalCheckout) => void,\n            ) => {\n                successCallback(braintreePaypalCheckoutPayloadMock);\n\n                return Promise.resolve(braintreePaypalCheckoutMock);\n            },\n        );\n    };\n\n    beforeEach(() => {\n        dataCollector = getDataCollectorMock();\n        eventEmitter = new EventEmitter();\n        braintreePaypalCheckoutMock = getPaypalCheckoutMock();\n        braintreePaypalCheckoutCreatorMock = getPayPalCheckoutCreatorMock(\n            braintreePaypalCheckoutMock,\n            false,\n        );\n        paypalSdkMock = getPaypalSDKMock();\n        (window as BraintreeHostWindow).paypal = paypalSdkMock;\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        formPoster = createFormPoster();\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        braintreeIntegrationService = new BraintreeIntegrationService(\n            braintreeScriptLoader,\n            window,\n        );\n        paymentMethodMock = {\n            ...getBraintree(),\n            clientToken: 'myToken',\n        };\n\n        paypalButtonElement = document.createElement('div');\n        paypalButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(paypalButtonElement);\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValueOnce({\n            ...paymentIntegrationService.getState(),\n            getPaymentMethodOrThrow: () => ({ ...paymentMethodMock }),\n        });\n        jest.spyOn(braintreeIntegrationService, 'getPaypalCheckout').mockImplementation(\n            getSDKPaypalCheckoutMock(braintreePaypalCheckoutMock),\n        );\n        jest.spyOn(braintreeIntegrationService, 'getDataCollector').mockResolvedValue(\n            dataCollector,\n        );\n        jest.spyOn(braintreeIntegrationService, 'removeElement').mockImplementation(jest.fn());\n        jest.spyOn(braintreeScriptLoader, 'loadPaypalCheckout').mockResolvedValue(\n            braintreePaypalCheckoutCreatorMock,\n        );\n        jest.spyOn(paypalSdkMock, 'Buttons').mockImplementation((options: PaypalButtonOptions) => {\n            eventEmitter.on('createOrder', () => {\n                if (typeof options.createOrder === 'function') {\n                    options.createOrder().catch(() => {});\n                }\n            });\n\n            eventEmitter.on('approve', () => {\n                if (typeof options.onApprove === 'function') {\n                    options.onApprove({ payerId: 'PAYER_ID' }).catch(() => {});\n                }\n            });\n\n            eventEmitter.on('click', () => {\n                if (typeof options.onClick === 'function') {\n                    options.onClick();\n                }\n            });\n\n            return {\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n            };\n        });\n        jest.spyOn(formPoster, 'postForm').mockImplementation(() => {});\n\n        strategy = new BraintreePaypalCustomerStrategy(\n            paymentIntegrationService,\n            formPoster,\n            braintreeIntegrationService,\n            window,\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BraintreeHostWindow).paypal;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(paypalButtonElement);\n        }\n    });\n\n    it('creates an instance of the braintree paypal checkout button strategy', () => {\n        expect(strategy).toBeInstanceOf(BraintreePaypalCustomerStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if braintreepaypal is not provided', async () => {\n            const options = {\n                methodId: 'braintreepaypal',\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if container id is not provided', async () => {\n            const options = {\n                methodId: 'braintreepaypal',\n                braintreepaypal: {},\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if client token is missing', async () => {\n            paymentMethodMock.clientToken = undefined;\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('fetch payment method if client token is not exist', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethodMock,\n                clientToken: undefined,\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalled();\n        });\n\n        it('throws error if initialization data is missing', async () => {\n            paymentMethodMock.initializationData = undefined;\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('initializes braintree paypal checkout', async () => {\n            braintreeIntegrationService.initialize = jest.fn();\n            braintreeIntegrationService.getPaypalCheckout = jest.fn();\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n                paymentMethodMock.clientToken,\n            );\n            expect(braintreeIntegrationService.getPaypalCheckout).toHaveBeenCalled();\n        });\n\n        it('calls braintreeSdk with proper options', async () => {\n            braintreeIntegrationService.initialize = jest.fn();\n            braintreeIntegrationService.getPaypalCheckout = jest.fn();\n            paymentMethodMock.initializationData = {\n                ...paymentMethodMock.initializationData,\n                isCreditEnabled: true,\n                currency: 'USD',\n                intent: undefined,\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeIntegrationService.getPaypalCheckout).toHaveBeenCalledWith(\n                {\n                    currency: 'USD',\n                    isCreditEnabled: true,\n                    intent: undefined,\n                    commit: false,\n                },\n                expect.any(Function),\n                expect.any(Function),\n            );\n        });\n\n        it('calls onError callback option if the error was caught on paypal checkout creation', async () => {\n            braintreeIntegrationService.getPaypalCheckout = getSDKPaypalCheckoutMock();\n\n            await strategy.initialize(initializationOptions);\n\n            expect(initializationOptions.braintreepaypal?.onError).toHaveBeenCalled();\n        });\n\n        it('do not renders eligible PayPal checkout button', async () => {\n            const renderMock = jest.fn();\n\n            jest.spyOn(paypalSdkMock, 'Buttons').mockReturnValue({\n                isEligible: jest.fn(() => false),\n                render: renderMock,\n                close: jest.fn(),\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.PAYPAL,\n                style: {\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                    height: DefaultCheckoutButtonHeight,\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n            expect(renderMock).not.toHaveBeenCalled();\n        });\n\n        it('do not renders button if PayPal disappeared in window', async () => {\n            delete (window as BraintreeHostWindow).paypal;\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).not.toHaveBeenCalled();\n            expect(braintreeIntegrationService.removeElement).toHaveBeenCalled();\n        });\n\n        it('renders PayPal checkout button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.PAYPAL,\n                style: {\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                    height: DefaultCheckoutButtonHeight,\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('renders PayPal checkout button with a customized height', async () => {\n            await strategy.initialize({\n                ...initializationOptions,\n                braintreepaypal: {\n                    ...braintreePaypalOptions,\n                    buttonHeight: DefaultCheckoutButtonHeight,\n                },\n            });\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.PAYPAL,\n                style: {\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                    height: DefaultCheckoutButtonHeight,\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('renders PayPal checkout button in production environment if payment method is in test mode', async () => {\n            paymentMethodMock.config.testMode = false;\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith(\n                expect.objectContaining({ env: 'production' }),\n            );\n        });\n\n        it('loads checkout details when customer is ready to pay', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => {\n                throw new Error();\n            });\n\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValueOnce({\n                ...paymentIntegrationService.getState(),\n                getStoreConfigOrThrow: jest.fn().mockReturnValue(getConfig().storeConfig),\n                getCartOrThrow: jest.fn().mockReturnValue({ currency: { code: 'AUD' } }),\n            });\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledTimes(1);\n        });\n\n        it('sets up PayPal payment flow with no address when null is passed', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValueOnce(\n                undefined,\n            );\n\n            await strategy.initialize({\n                ...initializationOptions,\n                braintreepaypal: {\n                    ...initializationOptions.braintreepaypal,\n                    shippingAddress: null,\n                } as BraintreePaypalCustomerInitializeOptions,\n            });\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.createPayment).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    shippingAddressOverride: undefined,\n                }),\n            );\n        });\n\n        it('sets up PayPal payment flow with current checkout details when customer is ready to pay', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.createPayment).toHaveBeenCalledWith({\n                amount: 190,\n                currency: 'USD',\n                enableShippingAddress: true,\n                flow: 'checkout',\n                offerCredit: false,\n                shippingAddressEditable: false,\n                shippingAddressOverride: {\n                    city: 'Some City',\n                    countryCode: 'US',\n                    line1: '12345 Testing Way',\n                    line2: '',\n                    phone: '555-555-5555',\n                    postalCode: '95555',\n                    recipientName: 'Test Tester',\n                    state: 'CA',\n                },\n            });\n        });\n\n        it('triggers error callback if unable to set up payment flow', async () => {\n            const expectedError = new Error('Unable to set up payment flow');\n\n            jest.spyOn(braintreePaypalCheckoutMock, 'createPayment').mockImplementation(() =>\n                Promise.reject(expectedError),\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalOptions.onError).toHaveBeenCalledWith(expectedError);\n        });\n\n        it('tokenizes PayPal payment details when authorization event is triggered', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.tokenizePayment).toHaveBeenCalledWith({\n                payerId: 'PAYER_ID',\n            });\n        });\n\n        it('posts payment details to server to set checkout data when PayPal payment details are tokenized', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(formPoster.postForm).toHaveBeenCalledWith(\n                '/checkout.php',\n                expect.objectContaining({\n                    payment_type: 'paypal',\n                    provider: 'braintreepaypal',\n                    action: 'set_external_checkout',\n                    device_data: dataCollector.deviceData,\n                    nonce: 'NONCE',\n                    billing_address: JSON.stringify({\n                        email: 'foo@bar.com',\n                        first_name: 'Foo',\n                        last_name: 'Bar',\n                        address_line_1: '56789 Testing Way',\n                        address_line_2: 'Level 2',\n                        city: 'Some Other City',\n                        state: 'Arizona',\n                        country_code: 'US',\n                        postal_code: '96666',\n                    }),\n                    shipping_address: JSON.stringify({\n                        email: 'foo@bar.com',\n                        first_name: 'Hello',\n                        last_name: 'World',\n                        address_line_1: '12345 Testing Way',\n                        address_line_2: 'Level 1',\n                        city: 'Some City',\n                        state: 'California',\n                        country_code: 'US',\n                        postal_code: '95555',\n                    }),\n                }),\n            );\n        });\n\n        it('triggers error callback if unable to tokenize payment', async () => {\n            const expectedError = new Error('Unable to tokenize');\n\n            jest.spyOn(braintreePaypalCheckoutMock, 'tokenizePayment').mockReturnValue(\n                Promise.reject(expectedError),\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalOptions.onError).toHaveBeenCalledWith(expectedError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('teardowns braintree sdk creator on strategy deinitialize', async () => {\n            braintreeIntegrationService.teardown = jest.fn();\n\n            await strategy.initialize(initializationOptions);\n            await strategy.deinitialize();\n\n            expect(braintreeIntegrationService.teardown).toHaveBeenCalled();\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('calls default sign in method', async () => {\n            const credentials = {\n                email: 'test@test.com',\n                password: '123',\n            };\n\n            await strategy.signIn(credentials);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                undefined,\n            );\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('calls default sign out method', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout()', () => {\n        it('calls default continue with checkout callback', async () => {\n            const continueWithCheckoutCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({ continueWithCheckoutCallback });\n\n            expect(continueWithCheckoutCallback).toHaveBeenCalled();\n        });\n\n        it('makes nothing if continue with checkout callback is not provided', async () => {\n            const result = await strategy.executePaymentMethodCheckout();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/braintree-paypal-customer-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/braintree-paypal-payment-initialize-options.ts",
    "content": "import {\n    BraintreeError,\n    BraintreeFormOptions,\n    BraintreeThreeDSecureOptions,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport interface BraintreePaypalPaymentInitializeOptions {\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    containerId?: string;\n\n    threeDSecure?: BraintreeThreeDSecureOptions;\n\n    /**\n     * @alpha\n     * Please note that this option is currently in an early stage of\n     * development. Therefore the API is unstable and not ready for public\n     * consumption.\n     */\n    form?: BraintreeFormOptions;\n\n    /**\n     * The location to insert the Pay Later Messages.\n     */\n    bannerContainerId?: string;\n\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n\n    /**\n     * A callback for submitting payment form that gets called\n     * when buyer approved PayPal account.\n     */\n    submitForm?(): void;\n\n    /**\n     * A callback that gets called if unable to submit payment.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onPaymentError?(error: BraintreeError | StandardError): void;\n\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: unknown): void;\n}\n\nexport interface WithBraintreePaypalPaymentInitializeOptions {\n    /**\n     * The options that are required to initialize the customer step of checkout\n     * when using Braintree PayPal.\n     */\n    braintree?: BraintreePaypalPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/braintree-paypal-payment-strategy.spec.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\nimport { EventEmitter } from 'events';\nimport { omit } from 'lodash';\n\nimport {\n    BraintreeClient,\n    BraintreeError,\n    BraintreeHostWindow,\n    BraintreeIntegrationService,\n    BraintreeMessages,\n    BraintreeModuleCreator,\n    BraintreePaypal,\n    BraintreePaypalCheckout,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n    getBraintreePaypal,\n    getBraintreePaypalMock,\n    getClientMock,\n    getModuleCreatorMock,\n    getPayPalCheckoutCreatorMock,\n    getPaypalCheckoutMock,\n    getPaypalMock,\n    getTokenizePayload,\n    PaypalButtonOptions,\n    PaypalSDK,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    getShippingAddress,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport mapToBraintreeShippingAddressOverride from '../map-to-braintree-shipping-address-override';\n\nimport BraintreePaypalPaymentStrategy from './braintree-paypal-payment-strategy';\n\ndescribe('BraintreePaypalPaymentStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let strategy: BraintreePaypalPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let braintreeMessages: BraintreeMessages;\n    let braintreeIntegrationService: BraintreeIntegrationService;\n    let paymentMethodMock: PaymentMethod;\n    let clientCreatorMock: BraintreeModuleCreator<BraintreeClient>;\n    let braintreePaypalCreatorMock: BraintreeModuleCreator<BraintreePaypal>;\n    let paypalCheckoutCreatorMock: BraintreeModuleCreator<BraintreePaypalCheckout>;\n    let paypalSdkMock: PaypalSDK;\n    let braintreePaypalCheckoutMock: BraintreePaypalCheckout;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    const providerError = {\n        errors: [\n            {\n                code: 'transaction_declined',\n                message: 'Payment was declined. Please try again.',\n                provider_error: {\n                    code: '2046',\n                },\n            },\n        ],\n    };\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        paypalSdkMock = getPaypalMock();\n        paymentMethodMock = getBraintreePaypal();\n        clientCreatorMock = getModuleCreatorMock(getClientMock());\n        braintreePaypalCreatorMock = getModuleCreatorMock(getBraintreePaypalMock());\n        braintreePaypalCheckoutMock = getPaypalCheckoutMock();\n        paypalCheckoutCreatorMock = getPayPalCheckoutCreatorMock(\n            braintreePaypalCheckoutMock,\n            false,\n        );\n\n        (window as BraintreeHostWindow).paypal = paypalSdkMock;\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        braintreeMessages = new BraintreeMessages(paymentIntegrationService);\n        braintreeIntegrationService = new BraintreeIntegrationService(\n            braintreeScriptLoader,\n            window,\n        );\n        strategy = new BraintreePaypalPaymentStrategy(\n            paymentIntegrationService,\n            braintreeIntegrationService,\n            braintreeMessages,\n            new LoadingIndicator(),\n        );\n\n        const div = document.createElement('div');\n\n        div.setAttribute('id', 'checkout-button-container');\n        document.body.appendChild(div);\n\n        const state = paymentIntegrationService.getState();\n\n        jest.spyOn(state, 'getPaymentMethodOrThrow').mockImplementation(() => paymentMethodMock);\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(state);\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getOutstandingBalance',\n        ).mockImplementation((useStoreCredit) => (useStoreCredit ? 150 : 190));\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockResolvedValue(state);\n\n        jest.spyOn(braintreeScriptLoader, 'loadClient').mockResolvedValue(clientCreatorMock);\n        jest.spyOn(braintreeScriptLoader, 'loadPaypal').mockResolvedValue(\n            braintreePaypalCreatorMock,\n        );\n        jest.spyOn(braintreeScriptLoader, 'loadPaypalCheckout').mockResolvedValue(\n            paypalCheckoutCreatorMock,\n        );\n\n        const getSDKPaypalCheckoutMock = (\n            braintreePaypalCheckoutPayloadMock?: BraintreePaypalCheckout,\n        ) => {\n            if (!braintreePaypalCheckoutPayloadMock) {\n                return jest.fn(\n                    (\n                        _options: unknown,\n                        _successCallback: unknown,\n                        errorCallback: (err: BraintreeError) => void,\n                    ) => {\n                        errorCallback({ type: 'UNKNOWN', code: '234' } as BraintreeError);\n\n                        return Promise.resolve(braintreePaypalCheckoutMock);\n                    },\n                );\n            }\n\n            return jest.fn(\n                (\n                    _options: unknown,\n                    successCallback: (braintreePaypalCheckout: BraintreePaypalCheckout) => void,\n                ) => {\n                    successCallback(braintreePaypalCheckoutPayloadMock);\n\n                    return Promise.resolve(braintreePaypalCheckoutMock);\n                },\n            );\n        };\n\n        jest.spyOn(braintreeIntegrationService, 'initialize');\n        jest.spyOn(braintreeIntegrationService, 'getPaypal');\n        jest.spyOn(braintreeIntegrationService, 'getPaypalCheckout').mockImplementation(\n            getSDKPaypalCheckoutMock(braintreePaypalCheckoutMock),\n        );\n        jest.spyOn(braintreeIntegrationService, 'getSessionId').mockResolvedValue('my_session_id');\n        jest.spyOn(braintreeIntegrationService, 'teardown');\n        jest.spyOn(braintreeIntegrationService, 'paypal').mockResolvedValue({\n            type: 'PaypalAccount',\n            nonce: 'my_tokenized_card',\n            details: { email: 'random@email.com' },\n        });\n\n        jest.spyOn(braintreeMessages, 'render');\n\n        jest.spyOn(paypalSdkMock, 'Buttons').mockImplementation((options: PaypalButtonOptions) => {\n            eventEmitter.on('approve', () => {\n                if (typeof options.onApprove === 'function') {\n                    options.onApprove();\n                }\n            });\n\n            eventEmitter.on('createOrder', () => {\n                if (typeof options.createOrder === 'function') {\n                    options.createOrder();\n                }\n            });\n\n            return {\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: jest.fn(),\n            };\n        });\n    });\n\n    afterEach(() => {\n        const buttonContainer = document.getElementById('checkout-button-container');\n\n        if (buttonContainer) {\n            buttonContainer.remove();\n        }\n    });\n\n    it('creates an instance of the braintree payment strategy', () => {\n        expect(strategy).toBeInstanceOf(BraintreePaypalPaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('initializes the braintree integration service with the client token and the set of options', async () => {\n            const options = { methodId: paymentMethodMock.id, braintree: {} };\n\n            await strategy.initialize(options);\n\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n                paymentMethodMock.clientToken,\n            );\n        });\n\n        it('preloads paypal', async () => {\n            await strategy.initialize({ methodId: paymentMethodMock.id });\n\n            expect(braintreeIntegrationService.getPaypal).toHaveBeenCalled();\n        });\n\n        it('paypal checkout is initialized successfully', async () => {\n            paymentMethodMock.initializationData.enableCheckoutPaywallBanner = true;\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            const options = {\n                methodId: paymentMethodMock.id,\n                braintree: { bannerContainerId: 'banner-container-id' },\n            };\n\n            await strategy.initialize(options);\n\n            expect(braintreeIntegrationService.getPaypalCheckout).toHaveBeenCalledWith(\n                {\n                    currency: 'USD',\n                    isCreditEnabled: undefined,\n                    intent: undefined,\n                },\n                expect.any(Function),\n                expect.any(Function),\n            );\n        });\n\n        it('renders Braintree PayPal message for braintreepaypalcredit', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({ ...paymentMethodMock, id: 'braintreepaypalcredit' });\n\n            const options = {\n                methodId: 'braintreepaypalcredit',\n                braintree: { bannerContainerId: 'banner-container-id' },\n            };\n\n            await strategy.initialize(options);\n\n            expect(braintreeMessages.render).toHaveBeenCalledWith(\n                'braintreepaypalcredit',\n                'banner-container-id',\n                'payment',\n            );\n        });\n\n        it('renders Braintree PayPal message if isCreditEnabled is falsy', async () => {\n            const options = {\n                methodId: paymentMethodMock.id,\n                braintree: { bannerContainerId: 'banner-container-id' },\n            };\n\n            await strategy.initialize(options);\n\n            expect(braintreeMessages.render).toHaveBeenCalledWith(\n                paymentMethodMock.id,\n                'banner-container-id',\n                'payment',\n            );\n        });\n\n        it('does NOT render Braintree PayPal message if method is not braintreepaypalcredit and isCreditEnabled is true', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethodMock,\n                id: 'braintreepaypal',\n                initializationData: { isCreditEnabled: true },\n            });\n\n            const options = {\n                methodId: 'braintreepaypal',\n                braintree: { bannerContainerId: 'banner-container-id' },\n            };\n\n            await strategy.initialize(options);\n\n            expect(braintreeMessages.render).not.toHaveBeenCalled();\n        });\n\n        it('throws error if unable to initialize', async () => {\n            paymentMethodMock.clientToken = undefined;\n\n            try {\n                await strategy.initialize({ methodId: paymentMethodMock.id });\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n    });\n\n    describe('#execute()', () => {\n        let orderRequestBody: OrderRequestBody;\n        let options: PaymentInitializeOptions;\n\n        const shippingAddressOverride = mapToBraintreeShippingAddressOverride(getShippingAddress());\n\n        beforeEach(() => {\n            orderRequestBody = getOrderRequestBody();\n            options = { methodId: getBraintreePaypal().id };\n\n            jest.clearAllMocks();\n        });\n\n        it('calls submit order with the order request information', async () => {\n            await strategy.initialize(options);\n            await strategy.execute(orderRequestBody, options);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                omit(orderRequestBody, 'payment'),\n                expect.any(Object),\n            );\n        });\n\n        it('refresh the state if paymentMethod has nonce value', async () => {\n            paymentMethodMock.nonce = 'some-nonce';\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            await strategy.initialize(options);\n            await strategy.execute(orderRequestBody, options);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledTimes(1);\n            expect(braintreeIntegrationService.getPaypal).toHaveBeenCalledTimes(1);\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledTimes(1);\n        });\n\n        it('pass the options to submitOrder', async () => {\n            await strategy.initialize(options);\n            await strategy.execute(orderRequestBody, options);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                expect.any(Object),\n                options,\n            );\n        });\n\n        it('submitPayment with the right information', async () => {\n            const expected = {\n                ...orderRequestBody.payment,\n                paymentData: {\n                    formattedPayload: {\n                        vault_payment_instrument: null,\n                        set_as_default_stored_instrument: null,\n                        device_info: 'my_session_id',\n                        paypal_account: {\n                            token: 'my_tokenized_card',\n                            email: 'random@email.com',\n                        },\n                    },\n                },\n            };\n\n            await strategy.initialize(options);\n            await strategy.execute(orderRequestBody, options);\n\n            expect(braintreeIntegrationService.paypal).toHaveBeenCalledWith({\n                amount: 190,\n                locale: 'en_US',\n                currency: 'USD',\n                shouldSaveInstrument: false,\n                offerCredit: false,\n                shippingAddressEditable: false,\n                shippingAddressOverride,\n            });\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expected);\n        });\n\n        it('passes grand total with store credit to PayPal if it is applied', async () => {\n            await strategy.initialize(options);\n\n            const state = paymentIntegrationService.getState();\n\n            jest.spyOn(state, 'getOutstandingBalance').mockImplementation((useStoreCredit) =>\n                useStoreCredit ? 150 : 190,\n            );\n\n            await strategy.execute({ ...orderRequestBody, useStoreCredit: true }, options);\n\n            expect(state.getOutstandingBalance).toHaveBeenCalledWith(true);\n            expect(braintreeIntegrationService.paypal).toHaveBeenCalledWith({\n                amount: 150,\n                locale: 'en_US',\n                currency: 'USD',\n                shouldSaveInstrument: false,\n                offerCredit: false,\n                shippingAddressEditable: false,\n                shippingAddressOverride,\n            });\n\n            await strategy.execute(orderRequestBody, options);\n\n            expect(state.getOutstandingBalance).toHaveBeenCalledWith(false);\n            expect(braintreeIntegrationService.paypal).toHaveBeenCalledWith({\n                amount: 190,\n                locale: 'en_US',\n                currency: 'USD',\n                shouldSaveInstrument: false,\n                shippingAddressEditable: false,\n                offerCredit: false,\n                shippingAddressOverride,\n            });\n        });\n\n        it('does not call paypal if a nonce is present', async () => {\n            paymentMethodMock.nonce = 'some-nonce';\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            const expected = expect.objectContaining({\n                paymentData: {\n                    formattedPayload: {\n                        vault_payment_instrument: null,\n                        set_as_default_stored_instrument: null,\n                        device_info: null,\n                        paypal_account: {\n                            token: 'some-nonce',\n                            email: null,\n                        },\n                    },\n                },\n            });\n\n            await strategy.initialize({ methodId: paymentMethodMock.id });\n            await strategy.execute(orderRequestBody, options);\n\n            expect(braintreeIntegrationService.paypal).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expected);\n        });\n\n        it('converts any error returned by braintree in a StandardError', async () => {\n            braintreeIntegrationService.paypal = () =>\n                Promise.reject({ name: 'BraintreeError', message: 'my_message' });\n\n            await strategy.initialize(options);\n\n            await expect(strategy.execute(orderRequestBody, options)).rejects.toEqual(\n                expect.any(PaymentMethodFailedError),\n            );\n        });\n\n        it('does not submit order when paypal fails', async () => {\n            paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n                paymentIntegrationService.getState(),\n            );\n\n            braintreeIntegrationService.paypal = () =>\n                Promise.reject({ name: 'BraintreeError', message: 'my_message' });\n\n            await strategy.initialize(options);\n\n            try {\n                await strategy.execute(orderRequestBody, options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodFailedError);\n                expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalledWith();\n            }\n        });\n\n        it('throws cancellation error if shopper dismisses PayPal modal before completing authorization flow', async () => {\n            jest.spyOn(braintreeIntegrationService, 'paypal').mockRejectedValue({\n                code: 'PAYPAL_POPUP_CLOSED',\n                message: 'Customer closed PayPal popup before authorizing.',\n                name: 'BraintreeError',\n            });\n\n            await strategy.initialize(options);\n\n            try {\n                await strategy.execute(orderRequestBody, options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodCancelledError);\n            }\n        });\n\n        it('throws specific error if receive INSTRUMENT_DECLINED error', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw providerError;\n            });\n\n            const braintreeOptions = {\n                ...options,\n                braintree: {\n                    containerId: '#checkout-button-container',\n                    onError: jest.fn(),\n                },\n            };\n\n            await strategy.initialize(braintreeOptions);\n\n            try {\n                await strategy.execute(orderRequestBody, options);\n            } catch (error) {\n                expect(braintreeOptions.braintree.onError).toHaveBeenCalledWith(\n                    new Error('INSTRUMENT_DECLINED'),\n                );\n            }\n        });\n\n        it('rendering the paypal button when a specific INSTRUMENT_DECLINED error occurs', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw providerError;\n            });\n\n            const braintreeOptions = {\n                ...options,\n                braintree: {\n                    onError: jest.fn(),\n                    containerId: '#checkout-button-container',\n                },\n            };\n\n            await strategy.initialize(braintreeOptions);\n\n            try {\n                await strategy.execute(orderRequestBody, options);\n            } catch (error) {\n                expect(braintreeOptions.braintree.onError).toHaveBeenCalledWith(\n                    new Error('INSTRUMENT_DECLINED'),\n                );\n\n                expect(paypalSdkMock.Buttons).toHaveBeenCalled();\n            }\n        });\n\n        it('execute submitPayment with re-authorised NONCE value when a specific INSTRUMENT_DECLINED error occurs', async () => {\n            const token = getTokenizePayload().nonce;\n\n            const expected = {\n                ...orderRequestBody.payment,\n                paymentData: {\n                    formattedPayload: {\n                        vault_payment_instrument: null,\n                        set_as_default_stored_instrument: null,\n                        device_info: null,\n                        paypal_account: { token, email: null },\n                    },\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw providerError;\n            });\n\n            const braintreeOptions = {\n                ...options,\n                braintree: {\n                    onError: jest.fn(),\n                    containerId: '#checkout-button-container',\n                },\n            };\n\n            await strategy.initialize(braintreeOptions);\n\n            try {\n                await strategy.execute(orderRequestBody, options);\n            } catch (error) {\n                expect(braintreeOptions.braintree.onError).toHaveBeenCalledWith(\n                    new Error('INSTRUMENT_DECLINED'),\n                );\n            }\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(orderRequestBody, options);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenLastCalledWith(expected);\n        });\n\n        it('#createOrder button callback', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw providerError;\n            });\n\n            const braintreeOptions = {\n                ...options,\n                braintree: {\n                    onError: jest.fn(),\n                    containerId: '#checkout-button-container',\n                },\n            };\n\n            await strategy.initialize(braintreeOptions);\n\n            try {\n                await strategy.execute(orderRequestBody, options);\n            } catch (error) {\n                expect(braintreeOptions.braintree.onError).toHaveBeenCalledWith(\n                    new Error('INSTRUMENT_DECLINED'),\n                );\n            }\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(orderRequestBody, options);\n\n            expect(braintreePaypalCheckoutMock.createPayment).toHaveBeenCalledWith({\n                amount: 190,\n                currency: 'USD',\n                enableShippingAddress: true,\n                flow: 'checkout',\n                offerCredit: false,\n                shippingAddressEditable: false,\n                shippingAddressOverride: {\n                    city: 'Some City',\n                    countryCode: 'US',\n                    line1: '12345 Testing Way',\n                    line2: '',\n                    phone: '555-555-5555',\n                    postalCode: '95555',\n                    recipientName: 'Test Tester',\n                    state: 'CA',\n                },\n            });\n        });\n\n        describe('when paying with a vaulted instrument', () => {\n            beforeEach(() => {\n                orderRequestBody = {\n                    payment: {\n                        methodId: 'braintreepaypal',\n                        paymentData: {\n                            instrumentId: 'fake-instrument-id',\n                        },\n                    },\n                };\n            });\n\n            it('calls submit payment with the right payload', async () => {\n                paymentMethodMock.config.isVaultingEnabled = true;\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodMock);\n\n                await strategy.initialize({ methodId: paymentMethodMock.id });\n                await strategy.execute(orderRequestBody, options);\n\n                expect(braintreeIntegrationService.paypal).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    methodId: 'braintreepaypal',\n                    paymentData: {\n                        instrumentId: 'fake-instrument-id',\n                    },\n                });\n            });\n\n            it('throws if vaulting is disabled and trying to pay with a vaulted instrument', async () => {\n                await strategy.initialize({ methodId: paymentMethodMock.id });\n\n                try {\n                    await strategy.execute(orderRequestBody, options);\n                } catch (error) {\n                    expect(braintreeIntegrationService.paypal).not.toHaveBeenCalledWith();\n                    expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalledWith();\n                    expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalledWith();\n\n                    if (error instanceof InvalidArgumentError) {\n                        expect(error).toBeInstanceOf(InvalidArgumentError);\n                        expect(error.message).toBe(\n                            'Vaulting is disabled but a vaulted instrument was being used for this transaction',\n                        );\n                    }\n                }\n            });\n        });\n\n        describe('if paypal credit', () => {\n            beforeEach(() => {\n                const state = paymentIntegrationService.getState();\n\n                jest.spyOn(state, 'getPaymentMethodOrThrow').mockImplementation(() => ({\n                    ...paymentMethodMock,\n                    id: 'braintreepaypalcredit',\n                }));\n            });\n\n            it('submitPayment with the right information and sets credit to true', async () => {\n                const expected = {\n                    ...orderRequestBody.payment,\n                    paymentData: {\n                        formattedPayload: {\n                            vault_payment_instrument: null,\n                            set_as_default_stored_instrument: null,\n                            device_info: 'my_session_id',\n                            paypal_account: {\n                                token: 'my_tokenized_card',\n                                email: 'random@email.com',\n                            },\n                        },\n                    },\n                };\n\n                await strategy.initialize(options);\n                await strategy.execute(orderRequestBody, options);\n\n                expect(braintreeIntegrationService.paypal).toHaveBeenCalledWith({\n                    amount: 190,\n                    locale: 'en_US',\n                    currency: 'USD',\n                    shouldSaveInstrument: false,\n                    offerCredit: true,\n                    shippingAddressEditable: false,\n                    shippingAddressOverride,\n                });\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expected);\n            });\n        });\n\n        describe('when vaulting is selected', () => {\n            beforeEach(() => {\n                orderRequestBody = {\n                    payment: {\n                        methodId: 'braintreepaypal',\n                        paymentData: {\n                            shouldSaveInstrument: true,\n                        },\n                    },\n                };\n\n                paymentMethodMock.config.isVaultingEnabled = true;\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodMock);\n            });\n\n            it('initializes paypal in vault mode', async () => {\n                const expected = {\n                    ...orderRequestBody.payment,\n                    paymentData: {\n                        formattedPayload: {\n                            vault_payment_instrument: true,\n                            set_as_default_stored_instrument: null,\n                            device_info: 'my_session_id',\n                            paypal_account: {\n                                token: 'my_tokenized_card',\n                                email: 'random@email.com',\n                            },\n                        },\n                    },\n                };\n\n                await strategy.initialize(options);\n                await strategy.execute(orderRequestBody, options);\n\n                expect(braintreeIntegrationService.paypal).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        shouldSaveInstrument: true,\n                    }),\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expected);\n            });\n\n            it('sends vault_payment_instrument set to true', async () => {\n                paymentMethodMock.config.isVaultingEnabled = true;\n\n                const expected = {\n                    ...orderRequestBody.payment,\n                    paymentData: {\n                        formattedPayload: expect.objectContaining({\n                            vault_payment_instrument: true,\n                        }),\n                    },\n                };\n\n                await strategy.initialize(options);\n                await strategy.execute(orderRequestBody, options);\n\n                expect(braintreeIntegrationService.paypal).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        shouldSaveInstrument: true,\n                    }),\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expected);\n            });\n\n            it('sends set_as_default_stored_instrument set to null when vaulting and NOT making default', async () => {\n                await strategy.initialize(options);\n                await strategy.execute(\n                    {\n                        payment: {\n                            methodId: 'braintreepaypal',\n                            paymentData: {\n                                shouldSaveInstrument: true,\n                            },\n                        },\n                    },\n                    options,\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: {\n                            formattedPayload: expect.objectContaining({\n                                set_as_default_stored_instrument: null,\n                            }),\n                        },\n                    }),\n                );\n            });\n\n            it('sends set_as_default_stored_instrument set to true when vaulting and making default', async () => {\n                await strategy.initialize(options);\n                await strategy.execute(\n                    {\n                        payment: {\n                            methodId: 'braintreepaypal',\n                            paymentData: {\n                                shouldSaveInstrument: true,\n                                shouldSetAsDefaultInstrument: true,\n                            },\n                        },\n                    },\n                    options,\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        paymentData: {\n                            formattedPayload: expect.objectContaining({\n                                set_as_default_stored_instrument: true,\n                            }),\n                        },\n                    }),\n                );\n            });\n\n            it('throws if vaulting is enabled and trying to save an instrument', async () => {\n                paymentMethodMock.config.isVaultingEnabled = false;\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodMock);\n                await strategy.initialize(options);\n\n                try {\n                    await strategy.execute(orderRequestBody, options);\n                } catch (error) {\n                    expect(error).toBeInstanceOf(InvalidArgumentError);\n                }\n            });\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('calls deinitialize in the braintree payment processor', async () => {\n            await strategy.deinitialize();\n\n            expect(braintreeIntegrationService.teardown).toHaveBeenCalled();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            try {\n                await strategy.finalize();\n            } catch (error) {\n                expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/braintree-paypal-payment-strategy.ts",
    "content": "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                onClick: () => {\n                    this.toggleLoadingIndicator(true);\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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreePaypalCreditButtonStrategy from './braintree-paypal-button-strategy';\nimport createBraintreePaypalCreditButtonStrategy from './create-braintree-paypal-button-strategy';\n\ndescribe('createBraintreePaypalCreditButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates braintree paypal credit button strategy', () => {\n        const strategy = createBraintreePaypalCreditButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreePaypalCreditButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-button-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreePaypalCustomerStrategy from './braintree-paypal-customer-strategy';\nimport createBraintreePaypalCustomerStrategy from './create-braintree-paypal-customer-strategy';\n\ndescribe('createBraintreePaypalCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce customer strategy', () => {\n        const strategy = createBraintreePaypalCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreePaypalCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-customer-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreePaypalPaymentStrategy from './braintree-paypal-payment-strategy';\nimport createBraintreePaypalPaymentStrategy from './create-braintree-paypal-payment-strategy';\n\ndescribe('createBraintreePaypalPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce payment strategy', () => {\n        const strategy = createBraintreePaypalPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreePaypalPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal/create-braintree-paypal-payment-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal-constants.ts",
    "content": "export const LOADING_INDICATOR_STYLES = {\n    'background-color': 'rgba(0, 0, 0, 0.4)',\n    'z-index': '1000',\n};\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal-credit/braintree-paypal-credit-button-initialize-options.ts",
    "content": "import { BraintreeError, PaypalStyleOptions } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    Address,\n    BuyNowCartRequestBody,\n    StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default interface BraintreePaypalCreditButtonInitializeOptions {\n    /**\n     * The options that are required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: {\n        getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\n    };\n\n    /**\n     * The option that used to initialize a PayPal script with provided currency code.\n     */\n    currencyCode?: string;\n\n    /**\n     * @internal\n     * This is an internal property and therefore subject to change. DO NOT USE.\n     */\n    shouldProcessPayment?: boolean;\n\n    /**\n     * A set of styling options for the checkout button.\n     */\n    style?: Pick<\n        PaypalStyleOptions,\n        'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons' | 'height'\n    >;\n\n    /**\n     * Address to be used for shipping.\n     * If not provided, it will use the first saved address from the active customer.\n     */\n    shippingAddress?: Address | null;\n\n    /**\n     * A callback that gets called if unable to authorize and tokenize payment.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onAuthorizeError?(error: BraintreeError | StandardError): void;\n\n    /**\n     * A callback that gets called if unable to submit payment.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onPaymentError?(error: BraintreeError | StandardError): void;\n\n    /**\n     * A callback that gets called on any error instead of submit payment or authorization errors.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error: BraintreeError | StandardError): void;\n\n    /**\n     *\n     *  A callback that gets called when Braintree SDK restricts to render PayPal component.\n     *\n     */\n    onEligibilityFailure?(): void;\n}\n\nexport interface WithBraintreePaypalCreditButtonInitializeOptions {\n    /**\n     * The options that are required to initialize Braintree PayPal Credit wallet button on Product and Cart page.\n     */\n    braintreepaypalcredit?: BraintreePaypalCreditButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal-credit/braintree-paypal-credit-button-strategy.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\nimport { EventEmitter } from 'events';\n\nimport {\n    BraintreeDataCollector,\n    BraintreeError,\n    BraintreeHostWindow,\n    BraintreeIntegrationService,\n    BraintreePaypalCheckout,\n    BraintreePaypalCheckoutCreator,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n    getBraintree,\n    getDataCollectorMock,\n    getPayPalCheckoutCreatorMock,\n    getPaypalCheckoutMock,\n    PaypalButtonOptions,\n    PaypalSDK,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    BuyNowCartCreationError,\n    BuyNowCartRequestBody,\n    Cart,\n    CartSource,\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getCart,\n    getCustomer,\n    getShippingAddress,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getPaypalSDKMock } from '../mocks/paypal.mock';\n\nimport BraintreePaypalCreditButtonInitializeOptions, {\n    WithBraintreePaypalCreditButtonInitializeOptions,\n} from './braintree-paypal-credit-button-initialize-options';\nimport BraintreePaypalCreditButtonStrategy from './braintree-paypal-credit-button-strategy';\n\ndescribe('BraintreePaypalCreditButtonStrategy', () => {\n    let buyNowCart: Cart;\n    let cart: Cart;\n    let dataCollector: BraintreeDataCollector;\n    let eventEmitter: EventEmitter;\n    let braintreeIntegrationService: BraintreeIntegrationService;\n    let braintreePaypalCheckoutMock: BraintreePaypalCheckout;\n    let braintreePaypalCheckoutCreatorMock: BraintreePaypalCheckoutCreator;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let formPoster: FormPoster;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalSdkMock: PaypalSDK;\n    let paypalButtonElement: HTMLDivElement;\n    let strategy: BraintreePaypalCreditButtonStrategy;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    const defaultButtonContainerId = 'braintree-paypal-credit-button-mock-id';\n\n    const braintreePaypalCreditOptions: BraintreePaypalCreditButtonInitializeOptions = {\n        shouldProcessPayment: false,\n        style: { height: 45 },\n        onAuthorizeError: jest.fn(),\n        onPaymentError: jest.fn(),\n        onError: jest.fn(),\n        onEligibilityFailure: jest.fn(),\n    };\n\n    const buyNowCartRequestBody: BuyNowCartRequestBody = {\n        source: CartSource.BuyNow,\n        lineItems: [\n            {\n                productId: 1,\n                quantity: 2,\n                optionSelections: {\n                    optionId: 11,\n                    optionValue: 11,\n                },\n            },\n        ],\n    };\n\n    const initializationOptions: CheckoutButtonInitializeOptions &\n        WithBraintreePaypalCreditButtonInitializeOptions = {\n        methodId: 'braintreepaypalcredit',\n        containerId: defaultButtonContainerId,\n        braintreepaypalcredit: braintreePaypalCreditOptions,\n    };\n\n    const buyNowInitializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: 'braintreepaypalcredit',\n        containerId: defaultButtonContainerId,\n        braintreepaypalcredit: {\n            ...braintreePaypalCreditOptions,\n            currencyCode: 'USD',\n            buyNowInitializeOptions: {\n                getBuyNowCartRequestBody: jest.fn().mockReturnValue(buyNowCartRequestBody),\n            },\n        },\n    };\n\n    const getSDKPayPalCheckoutMockWithErrorCallbackCall = () => {\n        return jest.fn(\n            (\n                _options: unknown,\n                _successCallback: unknown,\n                errorCallback: (err: BraintreeError) => void,\n            ) => {\n                errorCallback({ type: 'UNKNOWN', code: '234' } as BraintreeError);\n\n                return Promise.resolve(braintreePaypalCheckoutMock);\n            },\n        );\n    };\n\n    const getSDKPaypalCheckoutMockWithSuccessCallbackCall = (\n        braintreePaypalCheckoutPayloadMock: BraintreePaypalCheckout,\n    ) => {\n        return jest.fn(\n            (\n                _options: unknown,\n                successCallback: (braintreePaypalCheckout: BraintreePaypalCheckout) => void,\n            ) => {\n                successCallback(braintreePaypalCheckoutPayloadMock);\n\n                return Promise.resolve(braintreePaypalCheckoutMock);\n            },\n        );\n    };\n\n    beforeEach(() => {\n        buyNowCart = getBuyNowCart();\n        cart = getCart();\n        dataCollector = getDataCollectorMock();\n        eventEmitter = new EventEmitter();\n        paymentMethod = {\n            ...getBraintree(),\n            clientToken: 'myToken',\n        };\n        paypalSdkMock = getPaypalSDKMock();\n        (window as BraintreeHostWindow).paypal = paypalSdkMock;\n        braintreePaypalCheckoutMock = getPaypalCheckoutMock();\n        braintreePaypalCheckoutCreatorMock = getPayPalCheckoutCreatorMock(\n            braintreePaypalCheckoutMock,\n            false,\n        );\n\n        paypalButtonElement = document.createElement('div');\n        paypalButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(paypalButtonElement);\n\n        formPoster = createFormPoster();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        braintreeIntegrationService = new BraintreeIntegrationService(\n            braintreeScriptLoader,\n            window,\n        );\n        strategy = new BraintreePaypalCreditButtonStrategy(\n            paymentIntegrationService,\n            formPoster,\n            braintreeIntegrationService,\n            window,\n        );\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation(() => {});\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue(\n            getCustomer(),\n        );\n        jest.spyOn(paymentIntegrationService, 'loadDefaultCheckout').mockImplementation(jest.fn());\n\n        jest.spyOn(braintreeIntegrationService, 'getPaypalCheckout').mockImplementation(\n            getSDKPaypalCheckoutMockWithSuccessCallbackCall(braintreePaypalCheckoutMock),\n        );\n\n        jest.spyOn(braintreeIntegrationService, 'getDataCollector').mockResolvedValue(\n            dataCollector,\n        );\n        jest.spyOn(braintreeIntegrationService, 'removeElement').mockImplementation(jest.fn());\n        jest.spyOn(braintreeScriptLoader, 'loadPaypalCheckout').mockResolvedValue(\n            braintreePaypalCheckoutCreatorMock,\n        );\n        jest.spyOn(paypalSdkMock, 'Buttons').mockImplementation((options: PaypalButtonOptions) => {\n            eventEmitter.on('createOrder', () => {\n                if (typeof options.createOrder === 'function') {\n                    options.createOrder().catch(() => {});\n                }\n            });\n\n            eventEmitter.on('approve', () => {\n                if (typeof options.onApprove === 'function') {\n                    options.onApprove({ payerId: 'PAYER_ID' }).catch(() => {});\n                }\n            });\n\n            eventEmitter.on('click', () => {\n                if (typeof options.onClick === 'function') {\n                    options.onClick();\n                }\n            });\n\n            return {\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n            };\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BraintreeHostWindow).paypal;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(paypalButtonElement);\n        }\n    });\n\n    it('creates an instance of the braintree paypal credit button button strategy', () => {\n        expect(strategy).toBeInstanceOf(BraintreePaypalCreditButtonStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if braintreepaypalcredit is not provided', async () => {\n            const options = {\n                methodId: 'braintreepaypalcredit',\n                containerId: defaultButtonContainerId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if container id is not provided', async () => {\n            const options = {\n                methodId: 'braintreepaypalcredit',\n                containerId: '',\n                braintreepaypal: {},\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if braintreepaypalcredit.currencyCode is not provided (BuyNow flow)', async () => {\n            try {\n                await strategy.initialize({\n                    methodId: 'braintreepaypalcredit',\n                    containerId: defaultButtonContainerId,\n                    braintreepaypalcredit: {\n                        ...braintreePaypalCreditOptions,\n                        buyNowInitializeOptions: {\n                            getBuyNowCartRequestBody: jest.fn(),\n                        },\n                    },\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not load default checkout for BuyNowFlow', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).not.toHaveBeenCalled();\n        });\n\n        it('throws error if client token is missing', async () => {\n            paymentMethod.clientToken = undefined;\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws error if initialization data is missing', async () => {\n            paymentMethod.initializationData = undefined;\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('initializes braintree integration service', async () => {\n            braintreeIntegrationService.initialize = jest.fn();\n            braintreeIntegrationService.getPaypalCheckout = jest.fn();\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n                paymentMethod.clientToken,\n            );\n        });\n\n        it('initializes braintree paypal checkout with proper options', async () => {\n            braintreeIntegrationService.initialize = jest.fn();\n            braintreeIntegrationService.getPaypalCheckout = jest.fn();\n            paymentMethod.initializationData = {\n                ...paymentMethod.initializationData,\n                isCreditEnabled: true,\n                currency: 'USD',\n                intent: undefined,\n                commit: false,\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n                paymentMethod.clientToken,\n            );\n            expect(braintreeIntegrationService.getPaypalCheckout).toHaveBeenCalledWith(\n                {\n                    currency: 'USD',\n                    isCreditEnabled: true,\n                    intent: undefined,\n                    commit: false,\n                },\n                expect.any(Function),\n                expect.any(Function),\n            );\n        });\n\n        it('calls onError callback option on paypal checkout creation failure', async () => {\n            braintreeIntegrationService.getPaypalCheckout =\n                getSDKPayPalCheckoutMockWithErrorCallbackCall();\n\n            await strategy.initialize(initializationOptions);\n\n            expect(initializationOptions.braintreepaypalcredit?.onError).toHaveBeenCalled();\n        });\n\n        it('throws an error if buy now cart request body data is not provided', async () => {\n            const buyNowInitializationOptions: CheckoutButtonInitializeOptions = {\n                methodId: 'braintreepaypalcredit',\n                containerId: defaultButtonContainerId,\n                braintreepaypalcredit: {\n                    ...braintreePaypalCreditOptions,\n                    currencyCode: 'USD',\n                    buyNowInitializeOptions: {\n                        getBuyNowCartRequestBody: jest.fn().mockReturnValue(undefined),\n                    },\n                },\n            };\n\n            await strategy.initialize(buyNowInitializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCreditOptions.onPaymentError).toHaveBeenCalledWith(\n                new MissingDataError(MissingDataErrorType.MissingCart),\n            );\n        });\n\n        it('throws an error if there was an issue with buy now cart creation (Buy Now flow)', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n                Promise.reject(new Error()),\n            );\n\n            await strategy.initialize(buyNowInitializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCreditOptions.onPaymentError).toHaveBeenCalledWith(\n                new BuyNowCartCreationError(),\n            );\n        });\n\n        it('creates order with Buy Now cart id (Buy Now flow)', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n                Promise.resolve(buyNowCart),\n            );\n\n            await strategy.initialize(buyNowInitializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(formPoster.postForm).toHaveBeenCalledWith(\n                '/checkout.php',\n                expect.objectContaining({\n                    cart_id: buyNowCart.id,\n                }),\n            );\n        });\n\n        it('renders braintree paylater button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                createOrder: expect.any(Function),\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.PAYLATER,\n                onApprove: expect.any(Function),\n                style: {\n                    shape: 'rect',\n                    height: 45,\n                },\n            });\n\n            expect(paypalSdkMock.Buttons).not.toHaveBeenCalledWith({\n                createOrder: expect.any(Function),\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.CREDIT,\n                onApprove: expect.any(Function),\n                style: {\n                    label: 'credit',\n                    shape: 'rect',\n                    height: 45,\n                },\n            });\n        });\n\n        it('renders braintree credit button if paylater is not eligible', async () => {\n            jest.spyOn(paypalSdkMock, 'Buttons').mockImplementationOnce(() => {\n                return {\n                    isEligible: jest.fn(() => false),\n                    render: jest.fn(),\n                    close: jest.fn(),\n                };\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                createOrder: expect.any(Function),\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.PAYLATER,\n                onApprove: expect.any(Function),\n                style: {\n                    shape: 'rect',\n                    height: 45,\n                },\n            });\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                createOrder: expect.any(Function),\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.CREDIT,\n                onApprove: expect.any(Function),\n                style: {\n                    label: 'credit',\n                    shape: 'rect',\n                    height: 45,\n                },\n            });\n        });\n\n        it('removes Braintree PayPal Credit button container when paypal is not available in window', async () => {\n            delete (window as BraintreeHostWindow).paypal;\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultButtonContainerId,\n            );\n        });\n\n        it('does not render PayPal checkout button and calls onEligibilityFailure callback', async () => {\n            const renderMock = jest.fn();\n\n            jest.spyOn(paypalSdkMock, 'Buttons').mockImplementation(() => {\n                return {\n                    isEligible: jest.fn(() => false),\n                    render: renderMock,\n                    close: jest.fn(),\n                };\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                createOrder: expect.any(Function),\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.PAYLATER,\n                onApprove: expect.any(Function),\n                style: {\n                    shape: 'rect',\n                    height: 45,\n                },\n            });\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                createOrder: expect.any(Function),\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.CREDIT,\n                onApprove: expect.any(Function),\n                style: {\n                    shape: 'rect',\n                    height: 45,\n                    label: 'credit',\n                },\n            });\n\n            expect(braintreePaypalCreditOptions.onEligibilityFailure).toHaveBeenCalled();\n            expect(renderMock).not.toHaveBeenCalled();\n        });\n\n        it('renders braintree checkout button in production environment if payment method is in test mode', async () => {\n            paymentMethod.config.testMode = false;\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith(\n                expect.objectContaining({ env: 'production' }),\n            );\n        });\n\n        it('sets up PayPal payment flow with provided address', async () => {\n            await strategy.initialize({\n                ...initializationOptions,\n                braintreepaypalcredit: {\n                    ...initializationOptions.braintreepaypalcredit,\n                    shippingAddress: {\n                        ...getShippingAddress(),\n                        address1: 'a1',\n                        address2: 'a2',\n                        city: 'c',\n                        countryCode: 'AU',\n                        phone: '0123456',\n                        postalCode: '2000',\n                        stateOrProvinceCode: 'NSW',\n                        firstName: 'foo',\n                        lastName: 'bar',\n                    },\n                },\n            });\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.createPayment).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    shippingAddressOverride: {\n                        city: 'c',\n                        countryCode: 'AU',\n                        line1: 'a1',\n                        line2: 'a2',\n                        phone: '0123456',\n                        postalCode: '2000',\n                        recipientName: 'foo bar',\n                        state: 'NSW',\n                    },\n                }),\n            );\n        });\n\n        it('sets up PayPal payment flow with no address when null is passed', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue(\n                undefined,\n            );\n\n            await strategy.initialize({\n                ...initializationOptions,\n                braintreepaypalcredit: {\n                    ...initializationOptions.braintreepaypalcredit,\n                    shippingAddress: null,\n                },\n            });\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.createPayment).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    shippingAddressOverride: undefined,\n                }),\n            );\n        });\n\n        it('sets up PayPal payment flow with current checkout details when customer is ready to pay', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.createPayment).toHaveBeenCalledWith({\n                amount: 190,\n                currency: 'USD',\n                enableShippingAddress: true,\n                flow: 'checkout',\n                offerCredit: true,\n                shippingAddressEditable: false,\n                shippingAddressOverride: {\n                    city: 'Some City',\n                    countryCode: 'US',\n                    line1: '12345 Testing Way',\n                    line2: '',\n                    phone: '555-555-5555',\n                    postalCode: '95555',\n                    recipientName: 'Test Tester',\n                    state: 'CA',\n                },\n            });\n        });\n\n        it('triggers error callback if unable to set up payment flow', async () => {\n            const expectedError = new Error('Unable to set up payment flow');\n\n            expectedError.name = 'BraintreeError';\n\n            jest.spyOn(braintreePaypalCheckoutMock, 'createPayment').mockImplementation(() =>\n                Promise.reject(expectedError),\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCreditOptions.onPaymentError).toHaveBeenCalledWith(expectedError);\n        });\n\n        it('tokenizes PayPal payment details when authorization event is triggered', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.tokenizePayment).toHaveBeenCalledWith({\n                payerId: 'PAYER_ID',\n            });\n        });\n\n        it('posts payment details to server to set checkout data when PayPal payment details are tokenized', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(formPoster.postForm).toHaveBeenCalledWith(\n                '/checkout.php',\n                expect.objectContaining({\n                    payment_type: 'paypal',\n                    provider: 'braintreepaypalcredit',\n                    action: 'set_external_checkout',\n                    device_data: dataCollector.deviceData,\n                    nonce: 'NONCE',\n                    billing_address: JSON.stringify({\n                        email: 'foo@bar.com',\n                        first_name: 'Foo',\n                        last_name: 'Bar',\n                        address_line_1: '56789 Testing Way',\n                        address_line_2: 'Level 2',\n                        city: 'Some Other City',\n                        state: 'Arizona',\n                        country_code: 'US',\n                        postal_code: '96666',\n                    }),\n                    shipping_address: JSON.stringify({\n                        email: 'foo@bar.com',\n                        first_name: 'Hello',\n                        last_name: 'World',\n                        address_line_1: '12345 Testing Way',\n                        address_line_2: 'Level 1',\n                        city: 'Some City',\n                        state: 'California',\n                        country_code: 'US',\n                        postal_code: '95555',\n                    }),\n                }),\n            );\n        });\n\n        it('posts payment details to server to process payment if `shouldProcessPayment` is passed when PayPal payment details are tokenized', async () => {\n            const options = {\n                ...initializationOptions,\n                braintreepaypalcredit: {\n                    ...braintreePaypalCreditOptions,\n                    shouldProcessPayment: true,\n                },\n            };\n\n            await strategy.initialize(options);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(formPoster.postForm).toHaveBeenCalledWith(\n                '/checkout.php',\n                expect.objectContaining({\n                    payment_type: 'paypal',\n                    provider: 'braintreepaypalcredit',\n                    action: 'process_payment',\n                    device_data: dataCollector.deviceData,\n                    nonce: 'NONCE',\n                    billing_address: JSON.stringify({\n                        email: 'foo@bar.com',\n                        first_name: 'Foo',\n                        last_name: 'Bar',\n                        address_line_1: '56789 Testing Way',\n                        address_line_2: 'Level 2',\n                        city: 'Some Other City',\n                        state: 'Arizona',\n                        country_code: 'US',\n                        postal_code: '96666',\n                    }),\n                    shipping_address: JSON.stringify({\n                        email: 'foo@bar.com',\n                        first_name: 'Hello',\n                        last_name: 'World',\n                        address_line_1: '12345 Testing Way',\n                        address_line_2: 'Level 1',\n                        city: 'Some City',\n                        state: 'California',\n                        country_code: 'US',\n                        postal_code: '95555',\n                    }),\n                }),\n            );\n        });\n\n        it('triggers error callback if unable to tokenize payment', async () => {\n            const expectedError = new Error('Unable to tokenize');\n\n            expectedError.name = 'BraintreeError';\n\n            jest.spyOn(braintreePaypalCheckoutMock, 'tokenizePayment').mockReturnValue(\n                Promise.reject(expectedError),\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCreditOptions.onAuthorizeError).toHaveBeenCalledWith(\n                expectedError,\n            );\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('teardowns braintree sdk creator on strategy deinitialize', async () => {\n            braintreeIntegrationService.teardown = jest.fn();\n\n            await strategy.initialize(initializationOptions);\n            await strategy.deinitialize();\n\n            expect(braintreeIntegrationService.teardown).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal-credit/braintree-paypal-credit-button-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal-credit/braintree-paypal-credit-customer-initialize-options.ts",
    "content": "import { BraintreeError } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default interface BraintreePaypalCreditCustomerInitializeOptions {\n    /**\n     * The ID of a container which the checkout button should be inserted into.\n     */\n    container: string;\n\n    buttonHeight?: number;\n\n    /**\n     * A callback that gets called on any error instead of submit payment or authorization errors.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error: BraintreeError | StandardError): void;\n\n    /**\n     * A callback that gets called when wallet button clicked\n     */\n    onClick?(): void;\n}\n\nexport interface WithBraintreePaypalCreditCustomerInitializeOptions {\n    /**\n     * The options that are required to initialize the customer step of checkout\n     * when using Braintree PayPal.\n     */\n    braintreepaypalcredit?: BraintreePaypalCreditCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal-credit/braintree-paypal-credit-customer-strategy.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\nimport { EventEmitter } from 'events';\n\nimport {\n    BraintreeDataCollector,\n    BraintreeError,\n    BraintreeHostWindow,\n    BraintreeIntegrationService,\n    BraintreePaypalCheckout,\n    BraintreePaypalCheckoutCreator,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n    getBraintree,\n    getDataCollectorMock,\n    getPayPalCheckoutCreatorMock,\n    getPaypalCheckoutMock,\n    PaypalButtonOptions,\n    PaypalButtonStyleColorOption,\n    PaypalSDK,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    CustomerInitializeOptions,\n    DefaultCheckoutButtonHeight,\n    InvalidArgumentError,\n    MissingDataError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getPaypalSDKMock } from '../mocks/paypal.mock';\n\nimport BraintreePaypalCreditCustomerInitializeOptions, {\n    WithBraintreePaypalCreditCustomerInitializeOptions,\n} from './braintree-paypal-credit-customer-initialize-options';\nimport BraintreePaypalCreditCustomerStrategy from './braintree-paypal-credit-customer-strategy';\n\ndescribe('BraintreePaypalCreditCustomerStrategy', () => {\n    let dataCollector: BraintreeDataCollector;\n    let eventEmitter: EventEmitter;\n    let braintreePaypalCheckoutMock: BraintreePaypalCheckout;\n    let braintreePaypalCheckoutCreatorMock: BraintreePaypalCheckoutCreator;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let formPoster: FormPoster;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let braintreeIntegrationService: BraintreeIntegrationService;\n    let paypalSdkMock: PaypalSDK;\n    let strategy: BraintreePaypalCreditCustomerStrategy;\n    let paypalButtonElement: HTMLDivElement;\n    let paymentMethodMock: PaymentMethod;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    const defaultButtonContainerId = 'braintree-paypal-credit-button-mock-id';\n\n    const braintreePaypalCreditOptions: BraintreePaypalCreditCustomerInitializeOptions = {\n        container: defaultButtonContainerId,\n        onClick: jest.fn(),\n        onError: jest.fn(),\n    };\n\n    const initializationOptions: CustomerInitializeOptions &\n        WithBraintreePaypalCreditCustomerInitializeOptions = {\n        methodId: 'braintreepaypalcredit',\n        braintreepaypalcredit: braintreePaypalCreditOptions,\n    };\n\n    const getSDKPaypalCheckoutMock = (\n        braintreePaypalCheckoutPayloadMock?: BraintreePaypalCheckout,\n    ) => {\n        if (!braintreePaypalCheckoutPayloadMock) {\n            return jest.fn(\n                (\n                    _options: unknown,\n                    _successCallback: unknown,\n                    errorCallback: (err: BraintreeError) => void,\n                ) => {\n                    errorCallback({ type: 'UNKNOWN', code: '234' } as BraintreeError);\n\n                    return Promise.resolve(braintreePaypalCheckoutMock);\n                },\n            );\n        }\n\n        return jest.fn(\n            (\n                _options: unknown,\n                successCallback: (braintreePaypalCheckout: BraintreePaypalCheckout) => void,\n            ) => {\n                successCallback(braintreePaypalCheckoutPayloadMock);\n\n                return Promise.resolve(braintreePaypalCheckoutMock);\n            },\n        );\n    };\n\n    beforeEach(() => {\n        dataCollector = getDataCollectorMock();\n        eventEmitter = new EventEmitter();\n        braintreePaypalCheckoutMock = getPaypalCheckoutMock();\n        braintreePaypalCheckoutCreatorMock = getPayPalCheckoutCreatorMock(\n            braintreePaypalCheckoutMock,\n            false,\n        );\n        paypalSdkMock = getPaypalSDKMock();\n        (window as BraintreeHostWindow).paypal = paypalSdkMock;\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        formPoster = createFormPoster();\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        braintreeIntegrationService = new BraintreeIntegrationService(\n            braintreeScriptLoader,\n            window,\n        );\n        paymentMethodMock = {\n            ...getBraintree(),\n            clientToken: 'myToken',\n        };\n\n        paypalButtonElement = document.createElement('div');\n        paypalButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(paypalButtonElement);\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(braintreeIntegrationService, 'getPaypalCheckout').mockImplementation(\n            getSDKPaypalCheckoutMock(braintreePaypalCheckoutMock),\n        );\n\n        jest.spyOn(braintreeIntegrationService, 'getDataCollector').mockResolvedValue(\n            dataCollector,\n        );\n        jest.spyOn(braintreeIntegrationService, 'removeElement').mockImplementation(jest.fn());\n        jest.spyOn(braintreeScriptLoader, 'loadPaypalCheckout').mockResolvedValue(\n            braintreePaypalCheckoutCreatorMock,\n        );\n        jest.spyOn(paypalSdkMock, 'Buttons').mockImplementation((options: PaypalButtonOptions) => {\n            eventEmitter.on('createOrder', () => {\n                if (typeof options.createOrder === 'function') {\n                    options.createOrder().catch(() => {});\n                }\n            });\n\n            eventEmitter.on('approve', () => {\n                if (typeof options.onApprove === 'function') {\n                    options.onApprove({ payerId: 'PAYER_ID' }).catch(() => {});\n                }\n            });\n\n            eventEmitter.on('click', () => {\n                if (typeof options.onClick === 'function') {\n                    options.onClick();\n                }\n            });\n\n            return {\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n            };\n        });\n        jest.spyOn(formPoster, 'postForm').mockImplementation(() => {});\n\n        strategy = new BraintreePaypalCreditCustomerStrategy(\n            paymentIntegrationService,\n            formPoster,\n            braintreeIntegrationService,\n            window,\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as BraintreeHostWindow).paypal;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(paypalButtonElement);\n        }\n    });\n\n    it('creates an instance of the braintree paypal credit checkout button strategy', () => {\n        expect(strategy).toBeInstanceOf(BraintreePaypalCreditCustomerStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if braintreepaypalcredit is not provided', async () => {\n            const options = {\n                methodId: 'braintreepaypalcredit',\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if container id is not provided', async () => {\n            const options = {\n                methodId: 'braintreepaypalcredit',\n                braintreepaypal: {},\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if client token is missing', async () => {\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValueOnce({\n                ...paymentIntegrationService.getState(),\n                getPaymentMethodOrThrow: jest.fn().mockReturnValue(paymentMethodMock),\n            });\n\n            paymentMethodMock.clientToken = undefined;\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws error if initialization data is missing', async () => {\n            paymentMethodMock.initializationData = undefined;\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('initializes braintree integration service', async () => {\n            braintreeIntegrationService.initialize = jest.fn();\n            braintreeIntegrationService.getPaypalCheckout = jest.fn();\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n                paymentMethodMock.clientToken,\n            );\n        });\n\n        it('initializes braintree paypal checkout', async () => {\n            braintreeIntegrationService.initialize = jest.fn();\n            braintreeIntegrationService.getPaypalCheckout = jest.fn();\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n                paymentMethodMock.clientToken,\n            );\n            expect(braintreeIntegrationService.getPaypalCheckout).toHaveBeenCalled();\n        });\n\n        it('calls braintreeSdk with proper options', async () => {\n            braintreeIntegrationService.initialize = jest.fn();\n            braintreeIntegrationService.getPaypalCheckout = jest.fn();\n            paymentMethodMock.initializationData = {\n                ...paymentMethodMock.initializationData,\n                isCreditEnabled: true,\n                currency: 'USD',\n                intent: undefined,\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeIntegrationService.getPaypalCheckout).toHaveBeenCalledWith(\n                {\n                    currency: 'USD',\n                    isCreditEnabled: true,\n                    intent: undefined,\n                    commit: false,\n                },\n                expect.any(Function),\n                expect.any(Function),\n            );\n        });\n\n        it('calls onError callback option if the error was caught on paypal checkout creation', async () => {\n            braintreeIntegrationService.getPaypalCheckout = getSDKPaypalCheckoutMock();\n\n            await strategy.initialize(initializationOptions);\n\n            expect(initializationOptions.braintreepaypalcredit?.onError).toHaveBeenCalled();\n        });\n\n        it('do not renders not eligible PayPal checkout buttons', async () => {\n            const renderMock = jest.fn();\n\n            jest.spyOn(paypalSdkMock, 'Buttons').mockReturnValue({\n                isEligible: jest.fn(() => false),\n                render: renderMock,\n                close: jest.fn(),\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.PAYLATER,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.CREDIT,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n\n            expect(renderMock).not.toHaveBeenCalled();\n        });\n\n        it('do not renders button if PayPal disappeared in window', async () => {\n            delete (window as BraintreeHostWindow).paypal;\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).not.toHaveBeenCalled();\n            expect(braintreeIntegrationService.removeElement).toHaveBeenCalled();\n        });\n\n        it('renders braintree paylater button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.PAYLATER,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n\n            expect(paypalSdkMock.Buttons).not.toHaveBeenCalledWith({\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.CREDIT,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    label: 'credit',\n                    color: PaypalButtonStyleColorOption.GOLD,\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('renders braintree paylater button with a customized height', async () => {\n            await strategy.initialize({\n                ...initializationOptions,\n                braintreepaypalcredit: {\n                    ...braintreePaypalCreditOptions,\n                    buttonHeight: 100,\n                },\n            });\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.PAYLATER,\n                style: {\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                    height: DefaultCheckoutButtonHeight,\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('renders braintree credit button if paylater is not eligible', async () => {\n            const renderMock = jest.fn();\n\n            jest.spyOn(paypalSdkMock, 'Buttons').mockImplementation((data: PaypalButtonOptions) => {\n                return {\n                    isEligible: jest.fn(\n                        () => data.fundingSource !== paypalSdkMock.FUNDING.PAYLATER,\n                    ),\n                    render: renderMock,\n                    close: jest.fn(),\n                };\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.PAYLATER,\n                style: {\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                    height: DefaultCheckoutButtonHeight,\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith({\n                env: 'sandbox',\n                fundingSource: paypalSdkMock.FUNDING.CREDIT,\n                style: {\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                    height: DefaultCheckoutButtonHeight,\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n\n            expect(renderMock).toHaveBeenCalled();\n        });\n\n        it('renders braintree checkout button in production environment if payment method is in test mode', async () => {\n            paymentMethodMock.config.testMode = false;\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkMock.Buttons).toHaveBeenCalledWith(\n                expect.objectContaining({ env: 'production' }),\n            );\n        });\n\n        it('loads checkout details when customer is ready to pay', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => {\n                throw new Error();\n            });\n\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValueOnce({\n                ...paymentIntegrationService.getState(),\n                getPaymentMethodOrThrow: jest.fn().mockReturnValue(paymentMethodMock),\n                getCartOrThrow: jest.fn().mockReturnValue({ currency: { code: 'AUD' } }),\n            });\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledTimes(1);\n        });\n\n        it('sets up PayPal payment flow with no address when null is passed', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValueOnce(\n                undefined,\n            );\n\n            await strategy.initialize({\n                ...initializationOptions,\n                braintreepaypalcredit: {\n                    ...initializationOptions.braintreepaypalcredit,\n                    shippingAddress: null,\n                } as BraintreePaypalCreditCustomerInitializeOptions,\n            });\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.createPayment).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    shippingAddressOverride: undefined,\n                }),\n            );\n        });\n\n        it('sets up PayPal payment flow with current checkout details when customer is ready to pay', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.createPayment).toHaveBeenCalledWith({\n                amount: 190,\n                currency: 'USD',\n                enableShippingAddress: true,\n                flow: 'checkout',\n                offerCredit: true,\n                shippingAddressEditable: false,\n                shippingAddressOverride: {\n                    city: 'Some City',\n                    countryCode: 'US',\n                    line1: '12345 Testing Way',\n                    line2: '',\n                    phone: '555-555-5555',\n                    postalCode: '95555',\n                    recipientName: 'Test Tester',\n                    state: 'CA',\n                },\n            });\n        });\n\n        it('triggers error callback if unable to set up payment flow', async () => {\n            const expectedError = new Error('Unable to set up payment flow');\n\n            expectedError.name = 'BraintreeError';\n\n            jest.spyOn(braintreePaypalCheckoutMock, 'createPayment').mockImplementation(() =>\n                Promise.reject(expectedError),\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCreditOptions.onError).toHaveBeenCalledWith(expectedError);\n        });\n\n        it('tokenizes PayPal payment details when authorization event is triggered', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCheckoutMock.tokenizePayment).toHaveBeenCalledWith({\n                payerId: 'PAYER_ID',\n            });\n        });\n\n        it('posts payment details to server to set checkout data when PayPal payment details are tokenized', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(formPoster.postForm).toHaveBeenCalledWith(\n                '/checkout.php',\n                expect.objectContaining({\n                    payment_type: 'paypal',\n                    provider: 'braintreepaypalcredit',\n                    action: 'set_external_checkout',\n                    device_data: dataCollector.deviceData,\n                    nonce: 'NONCE',\n                    billing_address: JSON.stringify({\n                        email: 'foo@bar.com',\n                        first_name: 'Foo',\n                        last_name: 'Bar',\n                        address_line_1: '56789 Testing Way',\n                        address_line_2: 'Level 2',\n                        city: 'Some Other City',\n                        state: 'Arizona',\n                        country_code: 'US',\n                        postal_code: '96666',\n                    }),\n                    shipping_address: JSON.stringify({\n                        email: 'foo@bar.com',\n                        first_name: 'Hello',\n                        last_name: 'World',\n                        address_line_1: '12345 Testing Way',\n                        address_line_2: 'Level 1',\n                        city: 'Some City',\n                        state: 'California',\n                        country_code: 'US',\n                        postal_code: '95555',\n                    }),\n                }),\n            );\n        });\n\n        it('triggers error callback if unable to tokenize payment', async () => {\n            const expectedError = new Error('Unable to tokenize');\n\n            expectedError.name = 'BraintreeError';\n\n            jest.spyOn(braintreePaypalCheckoutMock, 'tokenizePayment').mockReturnValue(\n                Promise.reject(expectedError),\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('approve');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(braintreePaypalCreditOptions.onError).toHaveBeenCalledWith(expectedError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('teardowns braintree sdk creator on strategy deinitialize', async () => {\n            braintreeIntegrationService.teardown = jest.fn();\n\n            await strategy.initialize(initializationOptions);\n            await strategy.deinitialize();\n\n            expect(braintreeIntegrationService.teardown).toHaveBeenCalled();\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('calls default sign in method', async () => {\n            const credentials = {\n                email: 'test@test.com',\n                password: '123',\n            };\n\n            await strategy.signIn(credentials);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                undefined,\n            );\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('calls default sign out method', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout()', () => {\n        it('calls default continue with checkout callback', async () => {\n            const continueWithCheckoutCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({ continueWithCheckoutCallback });\n\n            expect(continueWithCheckoutCallback).toHaveBeenCalled();\n        });\n\n        it('makes nothing if continue with checkout callback is not provided', async () => {\n            const result = await strategy.executePaymentMethodCheckout();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal-credit/braintree-paypal-credit-customer-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal-credit/create-braintree-paypal-credit-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreePaypalCreditButtonStrategy from './braintree-paypal-credit-button-strategy';\nimport createBraintreePaypalCreditButtonStrategy from './create-braintree-paypal-credit-button-strategy';\n\ndescribe('createBraintreePaypalCreditButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates braintree paypal credit button strategy', () => {\n        const strategy = createBraintreePaypalCreditButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreePaypalCreditButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal-credit/create-braintree-paypal-credit-button-strategy.ts",
    "content": "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    return new BraintreePaypalCreditButtonStrategy(\n        paymentIntegrationService,\n        createFormPoster(),\n        braintreeIntegrationService,\n        braintreeHostWindow,\n    );\n};\n\nexport default toResolvableModule(createBraintreePaypalCreditButtonStrategy, [\n    { id: 'braintreepaypalcredit' },\n]);\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal-credit/create-braintree-paypal-credit-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreePaypalCreditCustomerStrategy from './braintree-paypal-credit-customer-strategy';\nimport createBraintreePaypalCreditCustomerStrategy from './create-braintree-paypal-credit-customer-strategy';\n\ndescribe('createBraintreePaypalCreditCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates braintree paypal credit customer strategy', () => {\n        const strategy = createBraintreePaypalCreditCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreePaypalCreditCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-paypal-credit/create-braintree-paypal-credit-customer-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-request-sender.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { getResponse } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeRequestSender from './braintree-request-sender';\n\ndescribe('BraintreeRequestSender', () => {\n    let requestSender: RequestSender;\n    let braintreeRequestSender: BraintreeRequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        braintreeRequestSender = new BraintreeRequestSender(requestSender);\n\n        const requestResponseMock = getResponse({ orderId: 123 });\n\n        jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(requestResponseMock));\n        jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(requestResponseMock));\n        jest.spyOn(requestSender, 'put').mockReturnValue(Promise.resolve(requestResponseMock));\n    });\n\n    it('requests order status', async () => {\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        await braintreeRequestSender.getOrderStatus();\n\n        expect(requestSender.get).toHaveBeenCalledWith(\n            '/api/storefront/initialization/braintreelocalmethods',\n            expect.objectContaining({\n                headers,\n            }),\n        );\n    });\n\n    it('requests order status with proper data', async () => {\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        await braintreeRequestSender.getOrderStatus('braintreelocalmethods', {\n            params: { useMetaData: false },\n        });\n\n        expect(requestSender.get).toHaveBeenCalledWith(\n            '/api/storefront/initialization/braintreelocalmethods',\n            expect.objectContaining({\n                headers,\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-request-sender.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-venmo/braintree-venmo-button-strategy.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n    BraintreeSdk,\n    BraintreeVenmoCheckout,\n    createBraintreeSdk,\n    getBraintree,\n    getVenmoCheckoutMock,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    BuyNowCartRequestBody,\n    Cart,\n    CartSource,\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    MissingDataError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeVenmoButtonStrategy from './braintree-venmo-button-strategy';\n\ndescribe('BraintreeVenmoButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let braintreeVenmoCheckoutMock: BraintreeVenmoCheckout;\n    let formPoster: FormPoster;\n    let paymentMethodMock: PaymentMethod;\n    let venmoButtonElement: HTMLDivElement;\n    let strategy: BraintreeVenmoButtonStrategy;\n    let braintreeSdk: BraintreeSdk;\n\n    const defaultContainerId = 'braintree-venmo-button-mock-id';\n\n    const buyNowCartMock: Cart = {\n        ...getCart(),\n        id: '999',\n        source: CartSource.BuyNow,\n    };\n\n    const buyNowCartRequestBody: BuyNowCartRequestBody = {\n        source: CartSource.BuyNow,\n        lineItems: [\n            {\n                productId: 1,\n                quantity: 2,\n                optionSelections: {\n                    optionId: 11,\n                    optionValue: 11,\n                },\n            },\n        ],\n    };\n\n    const getBraintreeVenmoButtonOptionsMock = () => ({\n        methodId: 'braintreevenmo',\n        containerId: defaultContainerId,\n        braintreevenmo: {\n            onError: jest.fn(),\n        },\n    });\n\n    const getBuyNowBraintreeVenmoButtonOptionsMock = () => ({\n        methodId: 'braintreevenmo',\n        containerId: defaultContainerId,\n        braintreevenmo: {\n            onError: jest.fn(),\n            currencyCode: 'USD',\n            buyNowInitializeOptions: {\n                getBuyNowCartRequestBody: jest.fn().mockReturnValue(buyNowCartRequestBody),\n            },\n        },\n    });\n\n    const billingAddressPayload = {\n        line1: 'line1',\n        line2: 'line2',\n        city: 'city',\n        state: 'state',\n        postalCode: 'postalCode',\n        countryCode: 'countryCode',\n    };\n\n    const shippingAddressPayload = {\n        ...billingAddressPayload,\n        recipientName: 'John Doe',\n    };\n\n    const expectedAddress = {\n        email: 'test@test.com',\n        first_name: 'John',\n        last_name: 'Doe',\n        phone_number: '123456789',\n        address_line_1: 'line1',\n        address_line_2: 'line2',\n        city: 'city',\n        state: 'state',\n        country_code: 'countryCode',\n        postal_code: 'postalCode',\n    };\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        formPoster = createFormPoster();\n\n        braintreeSdk = createBraintreeSdk(paymentIntegrationService);\n\n        strategy = new BraintreeVenmoButtonStrategy(\n            paymentIntegrationService,\n            formPoster,\n            braintreeSdk,\n        );\n\n        paymentMethodMock = {\n            ...getBraintree(),\n            clientToken: 'myToken',\n            initializationData: {\n                merchantAccountId: '100000',\n            },\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(braintreeSdk, 'getClient').mockReturnValue(\n            Promise.resolve({ request: jest.fn() }),\n        );\n        jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n            Promise.resolve(buyNowCartMock),\n        );\n        jest.spyOn(braintreeSdk, 'getVenmoCheckoutOrThrow').mockReturnValue(\n            Promise.resolve(getVenmoCheckoutMock()),\n        );\n        jest.spyOn(formPoster, 'postForm').mockImplementation(() => {});\n        jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockReturnValue({\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            deviceData: { device: 'something' },\n        });\n\n        venmoButtonElement = document.createElement('div');\n        venmoButtonElement.id = defaultContainerId;\n        document.body.appendChild(venmoButtonElement);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        if (document.getElementById(defaultContainerId)) {\n            document.body.removeChild(venmoButtonElement);\n        }\n    });\n\n    it('creates an instance of the braintree venmo checkout button strategy', () => {\n        expect(strategy).toBeInstanceOf(BraintreeVenmoButtonStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {\n                containerId: 'braintree-venmo-button-mock-id',\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if client token is missing', async () => {\n            paymentMethodMock.clientToken = undefined;\n\n            const options = getBraintreeVenmoButtonOptionsMock();\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws an error if containerId is not provided', async () => {\n            const options = {\n                methodId: 'braintreevenmo',\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('initializes braintree sdk', async () => {\n            const options = getBraintreeVenmoButtonOptionsMock();\n\n            braintreeSdk.initialize = jest.fn();\n\n            await strategy.initialize(options);\n\n            expect(braintreeSdk.initialize).toHaveBeenCalledWith(paymentMethodMock.clientToken);\n        });\n\n        it('initializes the braintree venmo checkout', async () => {\n            const options = getBraintreeVenmoButtonOptionsMock();\n\n            braintreeSdk.initialize = jest.fn();\n\n            await strategy.initialize(options);\n\n            expect(braintreeSdk.initialize).toHaveBeenCalledWith(paymentMethodMock.clientToken);\n            expect(braintreeSdk.getVenmoCheckoutOrThrow).toHaveBeenCalled();\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n\n        it('successfully renders braintree venmo button', async () => {\n            braintreeVenmoCheckoutMock = {\n                isBrowserSupported: jest.fn().mockReturnValue(true),\n                teardown: jest.fn(),\n                tokenize: jest.fn(),\n            };\n\n            const options = getBraintreeVenmoButtonOptionsMock();\n            const venmoButton = document.getElementById(options.containerId);\n\n            await strategy.initialize(options);\n\n            expect(venmoButton).toBeInstanceOf(HTMLDivElement);\n        });\n\n        it('successfully creates Buy Now cart on venmo button click', async () => {\n            const options = getBuyNowBraintreeVenmoButtonOptionsMock();\n\n            braintreeVenmoCheckoutMock = {\n                isBrowserSupported: jest.fn().mockReturnValue(true),\n                teardown: jest.fn(),\n                tokenize: jest.fn(),\n            };\n\n            const venmoButton = document.getElementById(options.containerId);\n\n            await strategy.initialize(options);\n\n            if (venmoButton) {\n                venmoButton.click();\n\n                expect(paymentIntegrationService.createBuyNowCart).toHaveBeenCalled();\n            }\n        });\n\n        it('successfully tokenize braintreeVenmoCheckout on venmo button click', async () => {\n            braintreeVenmoCheckoutMock = {\n                isBrowserSupported: jest.fn().mockReturnValue(true),\n                teardown: jest.fn(),\n                tokenize: jest.fn(),\n            };\n\n            jest.spyOn(braintreeSdk, 'getVenmoCheckoutOrThrow').mockReturnValue(\n                Promise.resolve(braintreeVenmoCheckoutMock),\n            );\n\n            const options = getBraintreeVenmoButtonOptionsMock();\n            const venmoButton = document.getElementById(options.containerId);\n\n            await strategy.initialize(options);\n\n            if (venmoButton) {\n                venmoButton.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(braintreeVenmoCheckoutMock.tokenize).toHaveBeenCalled();\n            }\n        });\n\n        it('successfully sends data through formPoster on venmo button click', async () => {\n            const tokenizationPayload = {\n                nonce: 'tokenization_nonce',\n                type: 'VenmoAccount',\n                details: {\n                    email: 'test@test.com',\n                    firstName: 'John',\n                    lastName: 'Doe',\n                    phone: '123456789',\n                    billingAddress: billingAddressPayload,\n                    shippingAddress: shippingAddressPayload,\n                },\n            };\n\n            braintreeVenmoCheckoutMock = {\n                isBrowserSupported: jest.fn().mockReturnValue(true),\n                teardown: jest.fn(),\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                tokenize: jest.fn((callback) => callback(undefined, tokenizationPayload)),\n            };\n\n            jest.spyOn(braintreeSdk, 'getVenmoCheckoutOrThrow').mockReturnValue(\n                Promise.resolve(braintreeVenmoCheckoutMock),\n            );\n\n            const options = getBraintreeVenmoButtonOptionsMock();\n            const venmoButton = document.getElementById(options.containerId);\n\n            await strategy.initialize(options);\n\n            if (venmoButton) {\n                venmoButton.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(braintreeVenmoCheckoutMock.tokenize).toHaveBeenCalled();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(formPoster.postForm).toHaveBeenCalledWith('/checkout.php', {\n                    action: 'set_external_checkout',\n                    device_data: { device: 'something' },\n                    nonce: 'tokenization_nonce',\n                    payment_type: 'paypal',\n                    provider: 'braintreevenmo',\n                    billing_address: JSON.stringify(expectedAddress),\n                    shipping_address: JSON.stringify(expectedAddress),\n                });\n            }\n        });\n\n        it('successfully sends data through formPoster on venmo button click with Buy Now cart id', async () => {\n            const tokenizationPayload = {\n                nonce: 'tokenization_nonce',\n                type: 'VenmoAccount',\n                details: {\n                    email: 'test@test.com',\n                    firstName: 'John',\n                    lastName: 'Doe',\n                    phone: '123456789',\n                    billingAddress: billingAddressPayload,\n                    shippingAddress: shippingAddressPayload,\n                },\n            };\n\n            braintreeVenmoCheckoutMock = {\n                isBrowserSupported: jest.fn().mockReturnValue(true),\n                teardown: jest.fn(),\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                tokenize: jest.fn((callback) => callback(undefined, tokenizationPayload)),\n            };\n\n            jest.spyOn(braintreeSdk, 'getVenmoCheckoutOrThrow').mockReturnValue(\n                Promise.resolve(braintreeVenmoCheckoutMock),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue({\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                body: buyNowCartMock,\n            });\n\n            const options = getBuyNowBraintreeVenmoButtonOptionsMock();\n            const venmoButton = document.getElementById(options.containerId);\n\n            await strategy.initialize(options);\n\n            if (venmoButton) {\n                venmoButton.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(braintreeVenmoCheckoutMock.tokenize).toHaveBeenCalled();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(formPoster.postForm).toHaveBeenCalledWith('/checkout.php', {\n                    action: 'set_external_checkout',\n                    device_data: { device: 'something' },\n                    nonce: 'tokenization_nonce',\n                    payment_type: 'paypal',\n                    provider: 'braintreevenmo',\n                    billing_address: JSON.stringify(expectedAddress),\n                    shipping_address: JSON.stringify(expectedAddress),\n                });\n            }\n        });\n\n        it('successfully sends data through formPoster on venmo button click with shipping data if billing data is not provided', async () => {\n            const tokenizationPayload = {\n                nonce: 'tokenization_nonce',\n                type: 'VenmoAccount',\n                details: {\n                    email: 'test@test.com',\n                    firstName: 'John',\n                    lastName: 'Doe',\n                    phone: '123456789',\n                    shippingAddress: shippingAddressPayload,\n                },\n            };\n\n            braintreeVenmoCheckoutMock = {\n                isBrowserSupported: jest.fn().mockReturnValue(true),\n                teardown: jest.fn(),\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                tokenize: jest.fn((callback) => callback(undefined, tokenizationPayload)),\n            };\n\n            jest.spyOn(braintreeSdk, 'getVenmoCheckoutOrThrow').mockReturnValue(\n                Promise.resolve(braintreeVenmoCheckoutMock),\n            );\n\n            const options = getBraintreeVenmoButtonOptionsMock();\n            const venmoButton = document.getElementById(options.containerId);\n\n            await strategy.initialize(options);\n\n            if (venmoButton) {\n                venmoButton.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(braintreeVenmoCheckoutMock.tokenize).toHaveBeenCalled();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(formPoster.postForm).toHaveBeenCalledWith('/checkout.php', {\n                    action: 'set_external_checkout',\n                    device_data: {\n                        device: 'something',\n                    },\n                    nonce: 'tokenization_nonce',\n                    payment_type: 'paypal',\n                    provider: 'braintreevenmo',\n                    billing_address: JSON.stringify(expectedAddress),\n                    shipping_address: JSON.stringify(expectedAddress),\n                });\n            }\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitialize braintree sdk on strategy deinitialize', async () => {\n            const options = getBraintreeVenmoButtonOptionsMock();\n\n            braintreeSdk.initialize = jest.fn();\n            braintreeSdk.deinitialize = jest.fn();\n\n            await strategy.initialize(options);\n            await strategy.deinitialize();\n\n            expect(braintreeSdk.deinitialize).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-venmo/braintree-venmo-button-strategy.ts",
    "content": "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        // eslint-disable-next-line @typescript-eslint/no-misused-promises\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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-venmo/braintree-venmo-initialize-options.ts",
    "content": "import { BraintreeError, PaypalStyleOptions } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    BuyNowCartRequestBody,\n    StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport interface BraintreeVenmoButtonInitializeOptions {\n    /**\n     * The option that used to initialize a PayPal script with provided currency code.\n     */\n    currencyCode?: string;\n\n    /**\n     * The options that are required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: BuyNowInitializeOptions;\n\n    /**\n     * A set of styling options for the checkout button.\n     */\n    style?: Pick<\n        PaypalStyleOptions,\n        'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons' | 'height'\n    >;\n\n    /**\n     * A callback that gets called on any error.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error: BraintreeError | StandardError): void;\n}\n\nexport interface BuyNowInitializeOptions {\n    getBuyNowCartRequestBody?(): BuyNowCartRequestBody | void;\n}\n\nexport interface WithBraintreeVenmoInitializeOptions {\n    /**\n     * The options that are required to facilitate Braintree Venmo. They can be\n     * omitted unless you need to support Braintree Venmo.\n     */\n    braintreevenmo?: BraintreeVenmoButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-venmo/braintree-venmo-payment-strategy-initialize-options.ts",
    "content": "export default interface BraintreeVenmoPaymentStrategyInitializeOptions {\n    /**\n     * An option that can provide different payment authorization methods, for more information use the following link: https://developer.paypal.com/braintree/docs/guides/venmo/client-side/javascript/v3/#desktop-qr-code\n     * If no value is specified, it will be true\n     */\n    allowDesktop?: boolean;\n}\n\nexport interface WithBraintreeVenmoInitializeOptions {\n    /**\n     * The options that are required to facilitate Braintree Venmo. They can be\n     * omitted unless you need to support Braintree Venmo.\n     */\n    braintreevenmo?: BraintreeVenmoPaymentStrategyInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-venmo/braintree-venmo-payment-strategy.spec.ts",
    "content": "import {\n    MissingDataError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BraintreeVenmoPaymentStrategy from './braintree-venmo-payment-strategy';\nimport {\n    BraintreeIntegrationService,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n    BraintreeTokenizePayload,\n    BraintreeVenmoCheckout,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    getConfig,\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\nimport { getBraintreeVenmo } from '../mocks/braintree.mock';\nimport clearAllMocks = jest.clearAllMocks;\n\ndescribe('BraintreeVenmoPaymentStrategy', () => {\n    let braintreeVenmoPaymentStrategy: PaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let braintreeIntegrationService: BraintreeIntegrationService;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n    let paymentMethodMock: PaymentMethod;\n    let tokenizeMock: BraintreeVenmoCheckout['tokenize'];\n    let options: PaymentInitializeOptions;\n    const storeConfig = getConfig().storeConfig;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            window,\n            braintreeSDKVersionManager,\n        );\n        braintreeIntegrationService = new BraintreeIntegrationService(\n            braintreeScriptLoader,\n            window,\n        );\n        const braintreeTokenizePayload: BraintreeTokenizePayload = {\n            nonce: 'sampleNonce',\n            type: 'PaypalAccount',\n            details: {\n                username: 'sampleUsername',\n                email: 'sample@example.com',\n            },\n        };\n\n        tokenizeMock = jest.fn((callback) => callback(undefined, braintreeTokenizePayload));\n        paymentMethodMock = { ...getBraintreeVenmo() };\n        options = { methodId: paymentMethodMock.id };\n\n        braintreeVenmoPaymentStrategy = new BraintreeVenmoPaymentStrategy(\n            paymentIntegrationService,\n            braintreeIntegrationService,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getBraintreeVenmo(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfig,\n        );\n        jest.spyOn(braintreeScriptLoader, 'loadClient').mockResolvedValue({\n            create: jest.fn().mockResolvedValue({\n                request: jest.fn(),\n            }),\n        });\n        jest.spyOn(braintreeIntegrationService, 'getVenmoCheckout').mockResolvedValue({\n            tokenize: jest.fn().mockResolvedValue(tokenizeMock),\n            isBrowserSupported: jest.fn(),\n            teardown: jest.fn(),\n        });\n        jest.spyOn(braintreeIntegrationService, 'initialize');\n    });\n\n    it('creates an instance of the braintree venmo payment strategy', () => {\n        expect(braintreeVenmoPaymentStrategy).toBeInstanceOf(BraintreeVenmoPaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('initializes the braintree venmo payment processor with the client token', async () => {\n            const options = { methodId: paymentMethodMock.id };\n\n            await braintreeVenmoPaymentStrategy.initialize(options);\n\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledWith(\n                paymentMethodMock.clientToken,\n            );\n            expect(braintreeIntegrationService.getVenmoCheckout).toHaveBeenCalled();\n        });\n\n        it('throws error if clientToken does not exist', async () => {\n            paymentMethodMock.clientToken = undefined;\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            try {\n                await braintreeVenmoPaymentStrategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throw error if getVenmoCheckout fails', async () => {\n            jest.spyOn(braintreeIntegrationService, 'getVenmoCheckout').mockReturnValue(\n                Promise.reject({\n                    name: 'notBraintreeError',\n                    message: 'my_message',\n                }),\n            );\n\n            try {\n                await braintreeVenmoPaymentStrategy.initialize(options);\n            } catch (error) {\n                expect((error as Error).message).toBe('my_message');\n            }\n        });\n\n        it('should initialize Venmo with an appropriate config', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        'PAYPAL-5406.braintree_venmo_web_fallback_support': true,\n                    },\n                },\n            });\n\n            await braintreeVenmoPaymentStrategy.initialize(options);\n\n            expect(braintreeIntegrationService.getVenmoCheckout).toHaveBeenCalledWith({\n                mobileWebFallBack: true,\n            });\n        });\n\n        it('should initialize Venmo with providing venmo options', async () => {\n            await braintreeVenmoPaymentStrategy.initialize({\n                ...options,\n                braintreevenmo: {\n                    allowDesktop: true,\n                },\n            });\n\n            expect(braintreeIntegrationService.getVenmoCheckout).toHaveBeenCalledWith({\n                allowDesktop: true,\n                mobileWebFallBack: true,\n            });\n        });\n    });\n\n    describe('#execute()', () => {\n        let orderRequestBody: OrderRequestBody;\n\n        beforeEach(() => {\n            jest.spyOn(paymentIntegrationService, 'submitOrder');\n            jest.spyOn(braintreeIntegrationService, 'getSessionId').mockResolvedValue(\n                'my_session_id',\n            );\n            orderRequestBody = getOrderRequestBody();\n            braintreeIntegrationService.getVenmoCheckout = jest.fn(\n                (): Promise<BraintreeVenmoCheckout> =>\n                    Promise.resolve({\n                        tokenize: tokenizeMock,\n                        isBrowserSupported: () => true,\n                        teardown: jest.fn(),\n                    }),\n            );\n        });\n\n        afterEach(() => {\n            clearAllMocks();\n        });\n\n        it('calls submit order with the order request information', async () => {\n            await braintreeVenmoPaymentStrategy.initialize(options);\n            await braintreeVenmoPaymentStrategy.execute(orderRequestBody, options);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith({\n                useStoreCredit: false,\n            });\n        });\n\n        it('refresh the state if paymentMethod has nonce value', async () => {\n            paymentMethodMock.nonce = 'some-nonce';\n\n            await braintreeVenmoPaymentStrategy.initialize(options);\n            await braintreeVenmoPaymentStrategy.execute(orderRequestBody, options);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledTimes(1);\n            expect(braintreeIntegrationService.initialize).toHaveBeenCalledTimes(1);\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledTimes(1);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n        });\n\n        it('pass the options to submitOrder', async () => {\n            await braintreeVenmoPaymentStrategy.initialize(options);\n            await braintreeVenmoPaymentStrategy.execute(orderRequestBody, options);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith({\n                useStoreCredit: false,\n            });\n        });\n\n        it('does not call braintreeVenmoCheckout.tokenize if a nonce is present', async () => {\n            paymentMethodMock.nonce = 'some-nonce';\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            const expected = expect.objectContaining({\n                paymentData: {\n                    formattedPayload: {\n                        vault_payment_instrument: null,\n                        set_as_default_stored_instrument: null,\n                        device_info: null,\n                        paypal_account: {\n                            token: 'some-nonce',\n                            email: null,\n                        },\n                    },\n                },\n            });\n\n            await braintreeVenmoPaymentStrategy.initialize({ methodId: paymentMethodMock.id });\n            await braintreeVenmoPaymentStrategy.execute(orderRequestBody, options);\n\n            expect(tokenizeMock).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expected);\n        });\n\n        it('throw error after user closed modal window', async () => {\n            const tokenizeMockError = jest.fn((callback) =>\n                callback(\n                    {\n                        name: 'BraintreeError',\n                        message: 'my_message',\n                        code: 'PAYPAL_POPUP_CLOSED',\n                    },\n                    undefined,\n                ),\n            );\n\n            braintreeIntegrationService.getVenmoCheckout = jest.fn(\n                (): Promise<BraintreeVenmoCheckout> =>\n                    Promise.resolve({\n                        tokenize: tokenizeMockError,\n                        isBrowserSupported: () => true,\n                        teardown: jest.fn(),\n                    }),\n            );\n\n            await braintreeVenmoPaymentStrategy.initialize(options);\n\n            await expect(\n                braintreeVenmoPaymentStrategy.execute(orderRequestBody, options),\n            ).rejects.toEqual(expect.any(PaymentMethodCancelledError));\n            expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n        });\n\n        it('throw error after tokenize error', async () => {\n            const tokenizeMockError = jest.fn((callback) =>\n                callback(\n                    {\n                        name: 'BraintreeError',\n                        message: 'my_message',\n                    },\n                    undefined,\n                ),\n            );\n\n            braintreeIntegrationService.getVenmoCheckout = jest.fn(\n                (): Promise<BraintreeVenmoCheckout> =>\n                    Promise.resolve({\n                        tokenize: tokenizeMockError,\n                        isBrowserSupported: () => true,\n                        teardown: jest.fn(),\n                    }),\n            );\n\n            await braintreeVenmoPaymentStrategy.initialize(options);\n\n            await expect(\n                braintreeVenmoPaymentStrategy.execute(orderRequestBody, options),\n            ).rejects.toEqual(expect.any(PaymentMethodFailedError));\n            expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n        });\n\n        it('throw error when no payment options exist', async () => {\n            await braintreeVenmoPaymentStrategy.initialize(options);\n\n            try {\n                await braintreeVenmoPaymentStrategy.execute({}, options);\n            } catch (error) {\n                expect(error).toEqual(expect.any(PaymentArgumentInvalidError));\n            }\n\n            expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('calls deinitialize in the braintree payment processor', async () => {\n            braintreeIntegrationService.teardown = jest.fn(() => Promise.resolve());\n\n            await braintreeVenmoPaymentStrategy.deinitialize();\n\n            expect(braintreeIntegrationService.teardown).toHaveBeenCalled();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            try {\n                await braintreeVenmoPaymentStrategy.finalize();\n            } catch (error) {\n                expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-venmo/braintree-venmo-payment-strategy.ts",
    "content": "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';\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        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            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        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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-venmo/create-braintree-venmo-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeVenmoButtonStrategy from './braintree-venmo-button-strategy';\nimport createBraintreeVenmoButtonStrategy from './create-braintree-venmo-button-strategy';\n\ndescribe('createBraintreeVenmoButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('initializes braintree venmo button strategy', () => {\n        const strategy = createBraintreeVenmoButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreeVenmoButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-venmo/create-braintree-venmo-button-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-venmo/create-braintree-venmo-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createBraintreeVenmoPaymentStrategy from './create-braintree-venmo-payment-strategy';\nimport BraintreeVenmoPaymentStrategy from './braintree-venmo-payment-strategy';\n\ndescribe('createBraintreeVenmoPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('initializes braintree venmo payment strategy', () => {\n        const strategy = createBraintreeVenmoPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreeVenmoPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-venmo/create-braintree-venmo-payment-strategy.ts",
    "content": "import {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport BraintreeVenmoPaymentStrategy from './braintree-venmo-payment-strategy';\nimport {\n    BraintreeHostWindow,\n    BraintreeIntegrationService,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-button-strategy.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BraintreeDataCollector,\n    BraintreeHostWindow,\n    BraintreeScriptLoader,\n    BraintreeSdk,\n    BraintreeSDKVersionManager,\n    BraintreeVisaCheckout,\n    getBraintree,\n    getDataCollectorMock,\n    getDeviceDataMock,\n    getPaymentSuccessPayload,\n    getVisaCheckoutMock,\n    getVisaCheckoutSDKMock,\n    VisaCheckoutHostWindow,\n    VisaCheckoutPaymentSuccessPayload,\n    VisaCheckoutSDK,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    CheckoutButtonInitializeOptions,\n    MissingDataError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeVisaCheckoutButtonStrategy from './braintree-visa-checkout-button-strategy';\n\ndescribe('BraintreeVisaCheckoutButtonStrategy', () => {\n    let strategy: BraintreeVisaCheckoutButtonStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let braintreeSdk: BraintreeSdk;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let formPoster: FormPoster;\n    let paymentMethodMock: PaymentMethod;\n    let braintreeVisaCheckout: BraintreeVisaCheckout;\n    let mockWindow: VisaCheckoutHostWindow;\n    let visaCheckoutSDKMock: VisaCheckoutSDK;\n    let braintreeVisaCheckoutButtonElement: HTMLDivElement;\n    let dataCollector: BraintreeDataCollector;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n    let visaPayload: VisaCheckoutPaymentSuccessPayload;\n\n    const defaultContainerId = 'braintree-visa-checkout-button-mock-id';\n\n    const initializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: 'braintreevisacheckout',\n        containerId: 'braintree-visa-checkout-button-mock-id',\n    };\n\n    beforeEach(() => {\n        visaPayload = getPaymentSuccessPayload();\n\n        mockWindow = {} as VisaCheckoutHostWindow & BraintreeHostWindow;\n\n        dataCollector = getDataCollectorMock();\n\n        visaCheckoutSDKMock = getVisaCheckoutSDKMock();\n\n        paymentMethodMock = {\n            ...getBraintree(),\n            clientToken: 'myVisaCheckoutToken',\n        };\n\n        braintreeVisaCheckoutButtonElement = document.createElement('div');\n        braintreeVisaCheckoutButtonElement.id = defaultContainerId;\n        document.body.appendChild(braintreeVisaCheckoutButtonElement);\n\n        braintreeVisaCheckout = getVisaCheckoutMock();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        formPoster = createFormPoster();\n\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            mockWindow,\n            braintreeSDKVersionManager,\n        );\n        braintreeSdk = new BraintreeSdk(braintreeScriptLoader);\n\n        strategy = new BraintreeVisaCheckoutButtonStrategy(\n            paymentIntegrationService,\n            formPoster,\n            braintreeSdk,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n\n        jest.spyOn(braintreeSdk, 'initialize');\n        jest.spyOn(braintreeSdk, 'getBraintreeVisaCheckout').mockResolvedValue(\n            braintreeVisaCheckout,\n        );\n        jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockResolvedValue(dataCollector);\n\n        jest.spyOn(braintreeSdk, 'getVisaCheckoutSdk').mockImplementation(() => {\n            mockWindow.V = visaCheckoutSDKMock;\n\n            return Promise.resolve(mockWindow.V);\n        });\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation(() => {});\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        it('renders visa checkout button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeVisaCheckout.createInitOptions).toHaveBeenCalled();\n            expect(mockWindow.V?.init).toHaveBeenCalled();\n        });\n\n        it('do not render the visa button if there is no element with the containerId identifier in the DOM', async () => {\n            try {\n                await strategy.initialize({\n                    ...initializationOptions,\n                    containerId: 'test-container',\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n\n                if (error instanceof Error) {\n                    expect(error.message).toBe('Need a container to place the button');\n                }\n            }\n        });\n\n        it('throws error if client token is missing', async () => {\n            paymentMethodMock.clientToken = undefined;\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws error if initialization data is missing', async () => {\n            paymentMethodMock.initializationData = undefined;\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('initializes braintree integration service', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeSdk.initialize).toHaveBeenCalledWith(paymentMethodMock.clientToken);\n        });\n\n        it('initializes braintree visa checkout', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeSdk.getBraintreeVisaCheckout).toHaveBeenCalled();\n        });\n\n        it('call the createInitOptions and init functions with the proper options', async () => {\n            const properOptions = {\n                paymentRequest: {\n                    currencyCode: 'USD',\n                    subtotal: '190',\n                },\n                settings: {\n                    shipping: {\n                        collectShipping: true,\n                    },\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeVisaCheckout.createInitOptions).toHaveBeenCalledWith(properOptions);\n            expect(mockWindow.V?.init).toHaveBeenCalledWith(properOptions);\n        });\n\n        it('visa Checkout tokenization', async () => {\n            jest.spyOn(visaCheckoutSDKMock, 'on').mockImplementation((_, callback) => {\n                callback(visaPayload, new Error());\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeVisaCheckout.tokenize).toHaveBeenCalled();\n            expect(braintreeSdk.getDataCollectorOrThrow).toHaveBeenCalled();\n        });\n\n        it('posts payment details to server to set checkout data when Visa Checkout payment details are tokenized', async () => {\n            const mappedToBCAddress = JSON.stringify({\n                email: 'test@example.com',\n                first_name: 'John',\n                last_name: 'Doe',\n                phone_number: '04877789875',\n                address_line_1: '51 Main St.',\n                address_line_2: 'Ultimo',\n                city: 'Sydney',\n                state: 'NSW',\n                country_code: 'ES',\n                postal_code: '2008',\n            });\n\n            jest.spyOn(visaCheckoutSDKMock, 'on').mockImplementation((_, callback) => {\n                callback(visaPayload, new Error());\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(formPoster.postForm).toHaveBeenCalledWith(\n                '/checkout.php',\n                expect.objectContaining({\n                    action: 'set_external_checkout',\n                    billing_address: mappedToBCAddress,\n                    card_information: JSON.stringify({ type: 'Visa', number: '11' }),\n                    device_data: getDeviceDataMock(),\n                    nonce: 'my-nonce',\n                    payment_type: 'type1',\n                    provider: 'braintreevisacheckout',\n                    shipping_address: mappedToBCAddress,\n                }),\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-button-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-customer-strategy.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BraintreeDataCollector,\n    BraintreeHostWindow,\n    BraintreeScriptLoader,\n    BraintreeSdk,\n    BraintreeSDKVersionManager,\n    BraintreeVisaCheckout,\n    getBraintree,\n    getDataCollectorMock,\n    getDeviceDataMock,\n    getPaymentSuccessPayload,\n    getVisaCheckoutMock,\n    getVisaCheckoutSDKMock,\n    VisaCheckoutHostWindow,\n    VisaCheckoutPaymentSuccessPayload,\n    VisaCheckoutSDK,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    CustomerInitializeOptions,\n    InvalidArgumentError,\n    MissingDataError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeVisaCheckoutCustomerStrategy from './braintree-visa-checkout-customer-strategy';\nimport { WithBraintreeVisaCheckoutCustomerInitializeOptions } from './braintree-visa-customer-initialize-options';\n\ndescribe('BraintreeVisaCheckoutCustomerStrategy', () => {\n    let strategy: BraintreeVisaCheckoutCustomerStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let braintreeSdk: BraintreeSdk;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let formPoster: FormPoster;\n    let paymentMethodMock: PaymentMethod;\n    let braintreeVisaCheckout: BraintreeVisaCheckout;\n    let mockWindow: VisaCheckoutHostWindow;\n    let visaCheckoutSDKMock: VisaCheckoutSDK;\n    let braintreeVisaCheckoutButtonElement: HTMLDivElement;\n    let dataCollector: BraintreeDataCollector;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n    let visaPayload: VisaCheckoutPaymentSuccessPayload;\n\n    const defaultContainerId = 'braintree-visa-checkout-button-mock-id';\n\n    const initializationOptions: CustomerInitializeOptions &\n        WithBraintreeVisaCheckoutCustomerInitializeOptions = {\n        methodId: 'braintreevisacheckout',\n        braintreevisacheckout: {\n            container: 'braintree-visa-checkout-button-mock-id',\n            onError: jest.fn(),\n        },\n    };\n\n    beforeEach(() => {\n        visaPayload = getPaymentSuccessPayload();\n\n        mockWindow = {} as VisaCheckoutHostWindow & BraintreeHostWindow;\n\n        dataCollector = getDataCollectorMock();\n\n        visaCheckoutSDKMock = getVisaCheckoutSDKMock();\n\n        paymentMethodMock = {\n            ...getBraintree(),\n            clientToken: 'myVisaCheckoutToken',\n        };\n\n        braintreeVisaCheckoutButtonElement = document.createElement('div');\n        braintreeVisaCheckoutButtonElement.id = defaultContainerId;\n        document.body.appendChild(braintreeVisaCheckoutButtonElement);\n\n        braintreeVisaCheckout = getVisaCheckoutMock();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        formPoster = createFormPoster();\n\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            mockWindow,\n            braintreeSDKVersionManager,\n        );\n        braintreeSdk = new BraintreeSdk(braintreeScriptLoader);\n\n        strategy = new BraintreeVisaCheckoutCustomerStrategy(\n            paymentIntegrationService,\n            formPoster,\n            braintreeSdk,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(paymentIntegrationService, 'loadCheckout');\n\n        jest.spyOn(braintreeSdk, 'initialize');\n        jest.spyOn(braintreeSdk, 'deinitialize');\n        jest.spyOn(braintreeSdk, 'getBraintreeVisaCheckout').mockResolvedValue(\n            braintreeVisaCheckout,\n        );\n        jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockResolvedValue(dataCollector);\n\n        jest.spyOn(braintreeSdk, 'getVisaCheckoutSdk').mockImplementation(() => {\n            mockWindow.V = visaCheckoutSDKMock;\n\n            return Promise.resolve(mockWindow.V);\n        });\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation(() => {});\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        it('renders visa checkout button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeVisaCheckout.createInitOptions).toHaveBeenCalled();\n            expect(mockWindow.V?.init).toHaveBeenCalled();\n        });\n\n        it('do not render the visa button if there is no element with the containerId identifier in the DOM', async () => {\n            try {\n                await strategy.initialize({\n                    ...initializationOptions,\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    braintreevisacheckout: {},\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n\n                if (error instanceof Error) {\n                    expect(error.message).toBe(\n                        'Unable to proceed because the provided container ID is not valid.',\n                    );\n                }\n            }\n        });\n\n        it('throws error if client token is missing', async () => {\n            paymentMethodMock.clientToken = undefined;\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws error if methodId is missing', async () => {\n            try {\n                await strategy.initialize({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('initializes braintree integration service', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeSdk.initialize).toHaveBeenCalledWith(paymentMethodMock.clientToken);\n        });\n\n        it('initializes braintree visa checkout', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeSdk.getBraintreeVisaCheckout).toHaveBeenCalled();\n        });\n\n        it('call the createInitOptions and init functions with the proper options', async () => {\n            const properOptions = {\n                paymentRequest: {\n                    currencyCode: 'USD',\n                    subtotal: '190',\n                },\n                settings: {\n                    locale: 'en_US',\n                    shipping: {\n                        collectShipping: true,\n                    },\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeVisaCheckout.createInitOptions).toHaveBeenCalledWith(properOptions);\n            expect(mockWindow.V?.init).toHaveBeenCalledWith(properOptions);\n        });\n\n        it('visa Checkout tokenization', async () => {\n            jest.spyOn(visaCheckoutSDKMock, 'on').mockImplementation((_, callback) => {\n                callback(visaPayload, new Error());\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(braintreeVisaCheckout.tokenize).toHaveBeenCalled();\n            expect(braintreeSdk.getDataCollectorOrThrow).toHaveBeenCalled();\n        });\n\n        it('registers the error and success callbacks', async () => {\n            jest.spyOn(visaCheckoutSDKMock, 'on').mockImplementation((_, callback) => {\n                callback(visaPayload, new Error());\n            });\n            await strategy.initialize(initializationOptions);\n\n            expect(visaCheckoutSDKMock.on).toHaveBeenCalledWith(\n                'payment.success',\n                expect.any(Function),\n            );\n            expect(visaCheckoutSDKMock.on).toHaveBeenCalledWith(\n                'payment.error',\n                expect.any(Function),\n            );\n        });\n\n        describe('when payment.success', () => {\n            beforeEach(() => {\n                jest.spyOn(visaCheckoutSDKMock, 'on').mockImplementation((_, callback) => {\n                    callback(visaPayload, new Error());\n                });\n            });\n\n            it('posts payment details to server to set checkout data when Visa Checkout payment details are tokenized', async () => {\n                const mappedToBCAddress = JSON.stringify({\n                    email: 'test@example.com',\n                    first_name: 'John',\n                    last_name: 'Doe',\n                    phone_number: '04877789875',\n                    address_line_1: '51 Main St.',\n                    address_line_2: 'Ultimo',\n                    city: 'Sydney',\n                    state: 'NSW',\n                    country_code: 'ES',\n                    postal_code: '2008',\n                });\n\n                await strategy.initialize(initializationOptions);\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(formPoster.postForm).toHaveBeenCalledWith(\n                    '/checkout.php',\n                    expect.objectContaining({\n                        action: 'set_external_checkout',\n                        billing_address: mappedToBCAddress,\n                        card_information: JSON.stringify({ type: 'Visa', number: '11' }),\n                        device_data: getDeviceDataMock(),\n                        nonce: 'my-nonce',\n                        payment_type: 'type1',\n                        provider: 'braintreevisacheckout',\n                        shipping_address: mappedToBCAddress,\n                    }),\n                );\n            });\n\n            it('reloads quote and payment method', async () => {\n                await strategy.initialize(initializationOptions);\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.loadCheckout).toHaveBeenCalled();\n            });\n\n            it('payment error triggers onError from the options', async () => {\n                const errorMock = new Error();\n\n                jest.spyOn(visaCheckoutSDKMock, 'on').mockImplementation((_, callback) => {\n                    callback(visaPayload, errorMock);\n                });\n\n                await strategy.initialize(initializationOptions);\n\n                expect(initializationOptions.braintreevisacheckout?.onError).toHaveBeenCalledWith(\n                    errorMock,\n                );\n            });\n        });\n    });\n\n    describe('#signIn()', () => {\n        beforeEach(async () => {\n            await strategy.initialize(initializationOptions);\n        });\n\n        it('throws error if trying to sign in programmatically', () => {\n            expect(() => strategy.signIn()).toThrow();\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('throws error if trying to sign out programmatically', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n            expect(braintreeSdk.deinitialize).toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout', () => {\n        it('runs continue callback automatically on execute payment method checkout', async () => {\n            const mockCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({\n                continueWithCheckoutCallback: mockCallback,\n            });\n\n            expect(mockCallback.mock.calls).toHaveLength(1);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-customer-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-payment-options.ts",
    "content": "export default interface BraintreeVisaCheckoutPaymentInitializeOptions {\n    /**\n     * A callback that gets called when Visa Checkout fails to initialize or\n     * selects a payment option.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error: Error): void;\n\n    /**\n     * A callback that gets called when the customer selects a payment option.\n     */\n    onPaymentSelect?(): void;\n}\n\nexport interface WithBraintreeVisaCheckoutPaymentInitializeOptions {\n    braintreevisacheckout?: BraintreeVisaCheckoutPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-payment-strategy.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BraintreeDataCollector,\n    BraintreeHostWindow,\n    BraintreeScriptLoader,\n    BraintreeSdk,\n    BraintreeSDKVersionManager,\n    BraintreeVisaCheckout,\n    getBraintree,\n    getDataCollectorMock,\n    getPaymentSuccessPayload,\n    getVisaCheckoutMock,\n    getVisaCheckoutSDKMock,\n    VisaCheckoutHostWindow,\n    VisaCheckoutPaymentSuccessPayload,\n    VisaCheckoutSDK,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    MissingDataError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeVisaCheckoutPaymentStrategy from './braintree-visa-checkout-payment-strategy';\n\ndescribe('BraintreeVisaCheckoutPaymentStrategy', () => {\n    let strategy: BraintreeVisaCheckoutPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let braintreeSdk: BraintreeSdk;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let formPoster: FormPoster;\n    let paymentMethodMock: PaymentMethod;\n    let braintreeVisaCheckout: BraintreeVisaCheckout;\n    let mockWindow: VisaCheckoutHostWindow;\n    let visaCheckoutSDKMock: VisaCheckoutSDK;\n    let braintreeVisaCheckoutButtonElement: HTMLDivElement;\n    let dataCollector: BraintreeDataCollector;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n    let visaPayload: VisaCheckoutPaymentSuccessPayload;\n\n    const defaultContainerId = 'braintree-visa-checkout-button-mock-id';\n\n    beforeEach(() => {\n        visaPayload = getPaymentSuccessPayload();\n\n        mockWindow = {} as VisaCheckoutHostWindow & BraintreeHostWindow;\n\n        dataCollector = getDataCollectorMock();\n\n        visaCheckoutSDKMock = getVisaCheckoutSDKMock();\n\n        paymentMethodMock = {\n            ...getBraintree(),\n            clientToken: 'myVisaCheckoutToken',\n        };\n\n        braintreeVisaCheckoutButtonElement = document.createElement('div');\n        braintreeVisaCheckoutButtonElement.id = defaultContainerId;\n        document.body.appendChild(braintreeVisaCheckoutButtonElement);\n\n        braintreeVisaCheckout = getVisaCheckoutMock();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        formPoster = createFormPoster();\n\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            mockWindow,\n            braintreeSDKVersionManager,\n        );\n        braintreeSdk = new BraintreeSdk(braintreeScriptLoader);\n\n        strategy = new BraintreeVisaCheckoutPaymentStrategy(\n            paymentIntegrationService,\n            formPoster,\n            braintreeSdk,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder');\n        jest.spyOn(paymentIntegrationService, 'submitPayment');\n\n        jest.spyOn(braintreeSdk, 'initialize');\n        jest.spyOn(braintreeSdk, 'deinitialize');\n        jest.spyOn(braintreeSdk, 'getBraintreeVisaCheckout').mockResolvedValue(\n            braintreeVisaCheckout,\n        );\n        jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockResolvedValue(dataCollector);\n\n        jest.spyOn(braintreeSdk, 'getVisaCheckoutSdk').mockImplementation(() => {\n            mockWindow.V = visaCheckoutSDKMock;\n\n            return Promise.resolve(mockWindow.V);\n        });\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation(() => {});\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('creates an instance of BraintreeVisaCheckoutPaymentStrategy', () => {\n        expect(strategy).toBeInstanceOf(BraintreeVisaCheckoutPaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        let visaCheckoutOptions: PaymentInitializeOptions;\n\n        beforeEach(() => {\n            visaCheckoutOptions = { methodId: 'braintreevisacheckout', braintreevisacheckout: {} };\n        });\n\n        it('loads visacheckout in test mode if enabled', async () => {\n            paymentMethodMock.config.testMode = true;\n\n            await strategy.initialize(visaCheckoutOptions);\n\n            expect(braintreeSdk.getVisaCheckoutSdk).toHaveBeenLastCalledWith(true);\n        });\n\n        it('loads visacheckout without test mode if disabled', async () => {\n            paymentMethodMock.config.testMode = false;\n\n            await strategy.initialize(visaCheckoutOptions);\n\n            expect(braintreeSdk.getVisaCheckoutSdk).toHaveBeenLastCalledWith(false);\n        });\n\n        it('registers the error and success callbacks', async () => {\n            jest.spyOn(visaCheckoutSDKMock, 'on').mockImplementation((_, callback) => {\n                callback(visaPayload, new Error());\n            });\n            await strategy.initialize(visaCheckoutOptions);\n\n            expect(visaCheckoutSDKMock.on).toHaveBeenCalledWith(\n                'payment.success',\n                expect.any(Function),\n            );\n            expect(visaCheckoutSDKMock.on).toHaveBeenCalledWith(\n                'payment.error',\n                expect.any(Function),\n            );\n        });\n\n        describe('when payment.success', () => {\n            beforeEach(() => {\n                jest.spyOn(visaCheckoutSDKMock, 'on').mockImplementation((_, callback) => {\n                    callback(visaPayload, new Error());\n                });\n            });\n\n            it('reloads checkout and payment method', async () => {\n                await strategy.initialize(visaCheckoutOptions);\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.loadCheckout).toHaveBeenCalledTimes(1);\n                expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                    'braintreevisacheckout',\n                );\n            });\n\n            it('fires onPaymentSelect when there is been a change in payment method', async () => {\n                const onPaymentSelect = jest.fn();\n\n                await strategy.initialize({\n                    ...visaCheckoutOptions,\n                    braintreevisacheckout: {\n                        onPaymentSelect,\n                    },\n                });\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(onPaymentSelect).toHaveBeenCalled();\n            });\n        });\n\n        it('triggers onError from the options when there is a payment error', async () => {\n            const onError = jest.fn();\n            const errorMock = new Error();\n\n            jest.spyOn(visaCheckoutSDKMock, 'on').mockImplementation((_, callback) => {\n                callback(visaPayload, errorMock);\n            });\n\n            await strategy.initialize({\n                ...visaCheckoutOptions,\n                braintreevisacheckout: {\n                    onError,\n                },\n            });\n\n            expect(onError).toHaveBeenCalledWith(errorMock);\n        });\n    });\n\n    describe('#execute()', () => {\n        let orderRequestBody: OrderRequestBody;\n        let visaCheckoutOptions: PaymentInitializeOptions;\n\n        beforeEach(() => {\n            orderRequestBody = getOrderRequestBody();\n            paymentMethodMock.initializationData = { nonce: 'payment-nonce-for-visacheckout' };\n\n            visaCheckoutOptions = { methodId: 'braintreevisacheckout', braintreevisacheckout: {} };\n        });\n\n        it('calls submit order with the order request information', async () => {\n            await strategy.initialize(visaCheckoutOptions);\n            await strategy.execute(orderRequestBody, visaCheckoutOptions);\n\n            const { payment, ...order } = orderRequestBody;\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                order,\n                expect.any(Object),\n            );\n        });\n\n        it('pass the options to submitOrder', async () => {\n            await strategy.initialize(visaCheckoutOptions);\n            await strategy.execute(orderRequestBody, visaCheckoutOptions);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                expect.any(Object),\n                visaCheckoutOptions,\n            );\n        });\n\n        it('submitPayment with the right information', async () => {\n            const expected = {\n                ...orderRequestBody.payment,\n                paymentData: {\n                    nonce: 'payment-nonce-for-visacheckout',\n                },\n            };\n\n            await strategy.initialize(visaCheckoutOptions);\n            await strategy.execute(orderRequestBody, visaCheckoutOptions);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expected);\n        });\n\n        it('throws if a nonce is not present', async () => {\n            paymentMethodMock.initializationData = {};\n\n            await strategy.initialize(visaCheckoutOptions);\n\n            try {\n                await strategy.execute(orderRequestBody, visaCheckoutOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        beforeEach(async () => {\n            await strategy.initialize({\n                methodId: 'braintreevisacheckout',\n                braintreevisacheckout: {},\n            });\n        });\n\n        it('deinitializes BraintreeVisaCheckoutPaymentProcessor', async () => {\n            await strategy.deinitialize();\n\n            expect(braintreeSdk.deinitialize).toHaveBeenCalled();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            try {\n                await strategy.finalize();\n            } catch (error) {\n                expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-checkout-payment-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/braintree-visa-customer-initialize-options.ts",
    "content": "export default interface BraintreeVisaCheckoutCustomerInitializeOptions {\n    container: string;\n\n    /**\n     * A callback that gets called when Visa Checkout fails to initialize or\n     * selects a payment option.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error: Error): void;\n}\n\nexport interface WithBraintreeVisaCheckoutCustomerInitializeOptions {\n    braintreevisacheckout?: BraintreeVisaCheckoutCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/create-braintree-cisa-checkout-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeVisaCheckoutCustomerStrategy from './braintree-visa-checkout-customer-strategy';\nimport createBraintreeVisaCheckoutCustomerStrategy from './create-braintree-visa-checkout-customer-strategy';\n\ndescribe('createBraintreeVisaCheckoutCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates braintree visa checkout button strategy', () => {\n        const strategy = createBraintreeVisaCheckoutCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreeVisaCheckoutCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/create-braintree-visa-checkout-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeVisaCheckoutButtonStrategy from './braintree-visa-checkout-button-strategy';\nimport createBraintreeVisaCheckoutButtonStrategy from './create-braintree-visa-checkout-button-strategy';\n\ndescribe('createBraintreeVisaCheckoutButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates braintree visa checkout button strategy', () => {\n        const strategy = createBraintreeVisaCheckoutButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreeVisaCheckoutButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/create-braintree-visa-checkout-button-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/create-braintree-visa-checkout-customer-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/create-braintree-visa-checkout-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeVisaCheckoutPaymentStrategy from './braintree-visa-checkout-payment-strategy';\nimport createBraintreeVisaCheckoutPaymentStrategy from './create-braintree-visa-checkout-payment-strategy';\n\ndescribe('createBraintreeVisaCheckoutPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates braintree visa checkout payment strategy', () => {\n        const strategy = createBraintreeVisaCheckoutPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(BraintreeVisaCheckoutPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/braintree-visa-checkout/create-braintree-visa-checkout-payment-strategy.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/get-valid-button-style.spec.ts",
    "content": "import {\n    PaypalButtonStyleColorOption,\n    PaypalButtonStyleLayoutOption,\n    PaypalButtonStyleShapeOption,\n    PaypalButtonStyleSizeOption,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\n\nimport getValidButtonStyle from './get-valid-button-style';\n\ndescribe('#getValidButtonStyle()', () => {\n    it('returns valid button style', () => {\n        const stylesMock = {\n            color: PaypalButtonStyleColorOption.SIlVER,\n            fundingicons: true,\n            height: 55,\n            layout: PaypalButtonStyleLayoutOption.HORIZONTAL,\n            shape: PaypalButtonStyleShapeOption.RECT,\n            size: PaypalButtonStyleSizeOption.SMALL,\n            tagline: true,\n        };\n\n        const expects = {\n            ...stylesMock,\n        };\n\n        expect(getValidButtonStyle(stylesMock)).toEqual(expects);\n    });\n\n    it('returns button style with rect shape if shape is not provided', () => {\n        const stylesMock = {\n            color: PaypalButtonStyleColorOption.SIlVER,\n            fundingicons: true,\n            height: 55,\n            layout: PaypalButtonStyleLayoutOption.HORIZONTAL,\n            shape: undefined,\n            size: PaypalButtonStyleSizeOption.SMALL,\n            tagline: true,\n        };\n\n        const expects = {\n            ...stylesMock,\n            shape: PaypalButtonStyleShapeOption.RECT,\n        };\n\n        expect(getValidButtonStyle(stylesMock)).toEqual(expects);\n    });\n\n    it('returns styles with updated height if height value is bigger than expected', () => {\n        const stylesMock = {\n            color: PaypalButtonStyleColorOption.SIlVER,\n            fundingicons: true,\n            height: 110,\n            layout: PaypalButtonStyleLayoutOption.HORIZONTAL,\n            shape: PaypalButtonStyleShapeOption.RECT,\n            size: PaypalButtonStyleSizeOption.SMALL,\n            tagline: true,\n        };\n\n        const expects = {\n            ...stylesMock,\n            height: 55,\n        };\n\n        expect(getValidButtonStyle(stylesMock)).toEqual(expects);\n    });\n\n    it('returns styles with updated height if height value is less than expected', () => {\n        const stylesMock = {\n            color: PaypalButtonStyleColorOption.SIlVER,\n            fundingicons: true,\n            height: 10,\n            layout: PaypalButtonStyleLayoutOption.HORIZONTAL,\n            shape: PaypalButtonStyleShapeOption.RECT,\n            size: PaypalButtonStyleSizeOption.SMALL,\n            tagline: true,\n        };\n\n        const expects = {\n            ...stylesMock,\n            height: 25,\n        };\n\n        expect(getValidButtonStyle(stylesMock)).toEqual(expects);\n    });\n\n    it('returns styles with default height if height value is not valid', () => {\n        const stylesMock = {\n            color: PaypalButtonStyleColorOption.SIlVER,\n            fundingicons: true,\n            height: 'ten',\n            layout: PaypalButtonStyleLayoutOption.HORIZONTAL,\n            shape: PaypalButtonStyleShapeOption.RECT,\n            size: PaypalButtonStyleSizeOption.SMALL,\n            tagline: true,\n        };\n\n        const expects = {\n            ...stylesMock,\n            height: 40,\n        };\n\n        expect(getValidButtonStyle(stylesMock)).toEqual(expects);\n    });\n\n    it('returns styles with default height if height value is null', () => {\n        const stylesMock = {\n            color: PaypalButtonStyleColorOption.SIlVER,\n            fundingicons: true,\n            height: undefined,\n            layout: PaypalButtonStyleLayoutOption.HORIZONTAL,\n            shape: PaypalButtonStyleShapeOption.RECT,\n            size: PaypalButtonStyleSizeOption.SMALL,\n            tagline: true,\n        };\n\n        const expects = {\n            ...stylesMock,\n            height: 40,\n        };\n\n        expect(getValidButtonStyle(stylesMock)).toEqual(expects);\n    });\n\n    it('returns styles with valid height even if number inside a string was received', () => {\n        const stylesMock = {\n            color: PaypalButtonStyleColorOption.SIlVER,\n            fundingicons: true,\n            height: '45',\n            layout: PaypalButtonStyleLayoutOption.HORIZONTAL,\n            shape: PaypalButtonStyleShapeOption.RECT,\n            size: PaypalButtonStyleSizeOption.SMALL,\n            tagline: true,\n        };\n\n        const expects = {\n            ...stylesMock,\n            height: 45,\n        };\n\n        expect(getValidButtonStyle(stylesMock)).toEqual(expects);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/get-valid-button-style.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/index.ts",
    "content": "/**\n * Braintree ACH strategies\n */\nexport { default as createBraintreeAchPaymentStrategy } from './braintree-ach/create-braintree-ach-payment-strategy';\nexport { WithBraintreeAchPaymentInitializeOptions } from './braintree-ach/braintree-ach-initialize-options';\n\n/**\n * Braintree PayPal strategies\n */\nexport { default as createBraintreePaypalButtonStrategy } from './braintree-paypal/create-braintree-paypal-button-strategy';\nexport { default as createBraintreePaypalCustomerStrategy } from './braintree-paypal/create-braintree-paypal-customer-strategy';\nexport { default as createBraintreePaypalPaymentStrategy } from './braintree-paypal/create-braintree-paypal-payment-strategy';\nexport { WithBraintreePaypalCustomerInitializeOptions } from './braintree-paypal/braintree-paypal-customer-initialize-options';\nexport { WithBraintreePaypalButtonInitializeOptions } from './braintree-paypal/braintree-paypal-button-initialize-options';\n\n/**\n * Braintree PayPal Credit strategies\n */\nexport { default as createBraintreePaypalCreditButtonStrategy } from './braintree-paypal-credit/create-braintree-paypal-credit-button-strategy';\nexport { default as createBraintreePaypalCreditCustomerStrategy } from './braintree-paypal-credit/create-braintree-paypal-credit-customer-strategy';\nexport { WithBraintreePaypalCreditButtonInitializeOptions } from './braintree-paypal-credit/braintree-paypal-credit-button-initialize-options';\nexport { WithBraintreePaypalCreditCustomerInitializeOptions } from './braintree-paypal-credit/braintree-paypal-credit-customer-initialize-options';\n\n/**\n * Braintree LPMs strategies\n */\nexport { default as createBraintreeLocalMethodsPaymentStrategy } from './braintree-local-payment-methods/create-braintree-local-methods-payment-strategy';\nexport { WithBraintreeLocalMethodsPaymentInitializeOptions } from './braintree-local-payment-methods/braintree-local-methods-payment-initialize-options';\n\n/**\n * Braintree AXO strategies\n */\nexport { default as createBraintreeFastlaneCustomerStrategy } from './braintree-fastlane/create-braintree-fastlane-customer-strategy';\nexport { default as createBraintreeFastlanePaymentStrategy } from './braintree-fastlane/create-braintree-fastlane-payment-strategy';\nexport { WithBraintreeFastlaneCustomerInitializeOptions } from './braintree-fastlane/braintree-fastlane-customer-initialize-options';\nexport { WithBraintreeFastlanePaymentInitializeOptions } from './braintree-fastlane/braintree-fastlane-payment-initialize-options';\n\n/**\n * Braintree Visa Checkout strategies\n */\nexport { default as createBraintreeVisaCheckoutButtonStrategy } from './braintree-visa-checkout/create-braintree-visa-checkout-button-strategy';\nexport { default as createBraintreeVisaCheckoutCustomerStrategy } from './braintree-visa-checkout/create-braintree-visa-checkout-customer-strategy';\nexport { default as createBraintreeVisaCheckoutPaymentStrategy } from './braintree-visa-checkout/create-braintree-visa-checkout-payment-strategy';\n\n/**\n * Braintree Venmo\n */\nexport { default as createBraintreeVenmoButtonStrategy } from './braintree-venmo/create-braintree-venmo-button-strategy';\nexport { default as createBraintreeVenmoPaymentStrategy } from './braintree-venmo/create-braintree-venmo-payment-strategy';\n/**\n * Braintree Credit Card Payment Strategies\n */\nexport { default as createBraintreeCreditCardPaymentStrategy } from './braintree-credit-card/create-braintree-credit-card-payment-strategy';\nexport { WithBraintreeCreditCardPaymentInitializeOptions } from './braintree-credit-card/braintree-credit-card-payment-initialize-options';\n"
  },
  {
    "path": "packages/braintree-integration/src/is-braintree-error.spec.ts",
    "content": "import isBraintreeError from './is-braintree-error';\n\ndescribe('isBraintreeError()', () => {\n    it('returns true if error comes from Braintree', () => {\n        const error = new Error('An unknown error.');\n\n        error.name = 'BraintreeError';\n\n        expect(isBraintreeError(error)).toBe(true);\n    });\n\n    it('returns false if error is not from Braintree', () => {\n        const error = new Error('An unknown error.');\n\n        expect(isBraintreeError(error)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/is-braintree-error.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/is-braintree-paypal-provider-error.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/is-us-bank-account-instrument-like.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/isUnsupportedBrowserError.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/map-to-braintree-shipping-address-override.spec.ts",
    "content": "import { getBraintreeAddress } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { getShippingAddress } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport mapToBraintreeShippingAddressOverride from './map-to-braintree-shipping-address-override';\n\ndescribe('mapToBraintreeAddress()', () => {\n    it('maps shipping address to braintree address', () => {\n        expect(mapToBraintreeShippingAddressOverride(getShippingAddress())).toEqual(\n            getBraintreeAddress(),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/braintree-integration/src/map-to-braintree-shipping-address-override.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-integration/src/mocks/braintree.mock.ts",
    "content": "import {\n    Braintree3DSVerifyCardCallback,\n    BraintreeClient,\n    BraintreeHostedFieldsTokenizePayload,\n    BraintreeModule,\n    BraintreeModuleCreator,\n    BraintreeThreeDSecure,\n    BraintreeThreeDSecureOptions,\n    PaypalButtonStyleColorOption,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    DefaultCheckoutButtonHeight,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getBraintreeAcceleratedCheckoutPaymentMethod(): PaymentMethod {\n    return {\n        skipRedirectConfirmationAlert: true,\n        id: 'braintreeacceleratedcheckout',\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: ['VISA', 'MC', 'AMEX', 'DISCOVER', 'JCB', 'DINERS'],\n        config: {\n            displayName: 'Credit Card',\n            testMode: false,\n        },\n        clientToken: 'asdasd',\n        initializationData: {\n            isAcceleratedCheckoutEnabled: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n    };\n}\n\nexport function getBraintreeVenmo(): PaymentMethod {\n    return {\n        id: 'braintreevenmo',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        config: {\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'foo',\n        initializationData: {\n            isBrainteeVenmoEnabled: false,\n        },\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getThreeDSecureMock(): BraintreeThreeDSecure {\n    return {\n        verifyCard: (_options, callback: Braintree3DSVerifyCardCallback) => {\n            if (callback) {\n                callback({ code: '' }, { nonce: 'fastlane_token_mock' });\n            }\n\n            return Promise.resolve('fastlane_token_mock');\n        },\n        cancelVerifyCard: jest.fn(),\n        on: jest.fn(),\n        teardown: jest.fn(),\n    };\n}\n\nexport function getBraintreeLocalMethodsInitializationOptions() {\n    return {\n        container: '#checkout-payment-continue',\n        onRenderButton: jest.fn(),\n        submitForm: jest.fn(),\n        onValidate: jest.fn(),\n        onError: jest.fn(),\n    };\n}\n\nexport function getBraintreeLocalMethods() {\n    return {\n        id: 'braintreelocalmethods',\n        logoUrl: '',\n        method: 'ideal',\n        supportedCards: [],\n        config: {\n            displayName: 'Ideal',\n            merchantId: 'someMerchantId',\n        },\n        initializationData: {\n            isAcceleratedCheckoutEnabled: false,\n            paymentButtonStyles: {\n                checkoutTopButtonStyles: {\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                    height: DefaultCheckoutButtonHeight,\n                },\n            },\n        },\n        type: 'PAYMENT_TYPE_API',\n    };\n}\n\nexport interface BraintreeTokenizeResponse {\n    creditCards: BraintreeHostedFieldsTokenizePayload[];\n}\n\nexport function getTokenizeResponseBody(): BraintreeTokenizeResponse {\n    return {\n        creditCards: [\n            {\n                nonce: 'demo_nonce',\n                details: {\n                    bin: 'demo_bin',\n                    cardType: 'Visa',\n                    expirationMonth: '01',\n                    expirationYear: '2025',\n                    lastFour: '0001',\n                    lastTwo: '01',\n                },\n                description: 'ending in 01',\n                type: 'CreditCard',\n                binData: {\n                    commercial: 'bin_data_commercial',\n                    countryOfIssuance: 'bin_data_country_of_issuance',\n                    debit: 'bin_data_debit',\n                    durbinRegulated: 'bin_data_durbin_regulated',\n                    healthcare: 'bin_data_healthcare',\n                    issuingBank: 'bin_data_issuing_bank',\n                    payroll: 'bin_data_payroll',\n                    prepaid: 'bin_data_prepaid',\n                    productId: 'bin_data_product_id',\n                },\n            },\n        ],\n    };\n}\n\nexport function getThreeDSecureOptionsMock(): BraintreeThreeDSecureOptions {\n    return {\n        nonce: 'nonce',\n        amount: 225,\n        addFrame: jest.fn(),\n        removeFrame: jest.fn(),\n        additionalInformation: {\n            acsWindowSize: '01',\n        },\n    };\n}\n\nexport function getModuleCreatorMock<T>(\n    module: BraintreeModule | BraintreeClient,\n): BraintreeModuleCreator<T> {\n    return {\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        create: jest.fn(() => Promise.resolve(module)),\n    };\n}\n\nexport function getBillingAddress() {\n    return {\n        id: '55c96cda6f04c',\n        firstName: 'Test',\n        lastName: 'Tester',\n        email: 'test@bigcommerce.com',\n        company: 'Bigcommerce',\n        address1: '12345 Testing Way',\n        address2: '',\n        city: 'Some City',\n        stateOrProvince: 'California',\n        stateOrProvinceCode: 'CA',\n        country: 'United States',\n        countryCode: 'US',\n        postalCode: '95555',\n        shouldSaveAddress: true,\n        phone: '555-555-5555',\n        customFields: [],\n    };\n}\n"
  },
  {
    "path": "packages/braintree-integration/src/mocks/paypal.mock.ts",
    "content": "import { PaypalSDK } from '@bigcommerce/checkout-sdk/braintree-utils';\n\nexport function getPaypalSDKMock(): PaypalSDK {\n    return {\n        FUNDING: {\n            CARD: 'card',\n            CREDIT: 'credit',\n            PAYPAL: 'paypal',\n            PAYLATER: 'paylater',\n        },\n        Button: {\n            render: jest.fn(),\n        },\n        checkout: {\n            initXO: jest.fn(),\n            startFlow: jest.fn(),\n            closeFlow: jest.fn(),\n            setup: jest.fn(),\n        },\n        Buttons: jest.fn(),\n        Messages: jest.fn().mockReturnValue({\n            render: jest.fn(),\n        }),\n    };\n}\n"
  },
  {
    "path": "packages/braintree-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true\n    }\n}\n"
  },
  {
    "path": "packages/braintree-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/braintree-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.spec.ts\",\n        \"**/*.mock.ts\",\n    ]\n}\n"
  },
  {
    "path": "packages/braintree-utils/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\", \"*.spec.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-empty-function\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/braintree-utils/README.md",
    "content": "# @bigcommerce/checkout-sdk/storage\n\nCheckout SDK Storage package contains tools implementation for storing data in browser storage like Local Storage (session storage and cookies implementation might be added in the future).\n\n## Table of contents\n- [Features](#features)\n- [How to use package](#how-to-use-package)\n    - [Using Braintree Utils package](#using-braintree-utils-package)\n\n- [Development commands](#development-commands)\n    - [Running unit tests](#running-unit-tests)\n    - [Running lint](#running-lint)\n- [License](#license)\n\n\n## Features\n\nThe braintree-utils package provides sharable braintree implementation that can be useful in other integration packages like Google Pay, Apple Pay, or etc., for example:\n* get braintree sdk version;\n\n\n## How to use package\n\n### Using Braintree utils package\n\nYou can use Braintree utils implementation inside your integration package. Import that what you need from braintree-utils package:\n\n```sh\nimport { BRAINTREE_SDK_STABLE_VERSION } from '@bigcommerce/checkout-sdk/braintree-utils';\n\nsomeOtherPackage.setBraintreeSdkVersion(BRAINTREE_SDK_STABLE_VERSION);\n```\n\n\n## Development commands\n\n### Running unit tests\n\nRun `nx test braintree-utils` to execute the unit tests via [Jest](https://jestjs.io).\n\n### Running lint\n\nRun `nx lint braintree-utils` to execute the lint via [ESLint](https://eslint.org/).\n\n\n## License\n\nMIT\n\n"
  },
  {
    "path": "packages/braintree-utils/jest.config.js",
    "content": "module.exports = {\n    displayName: 'braintree-utils',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/braintree-utils',\n    coveragePathIgnorePatterns: ['<rootDir>/src/index.ts', '<rootDir>/src/utils/index.ts'],\n};\n"
  },
  {
    "path": "packages/braintree-utils/project.json",
    "content": "{\n    \"name\": \"braintree-utils\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/braintree-utils/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/braintree-utils/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/braintree-utils\"],\n            \"options\": {\n                \"jestConfig\": \"packages/braintree-utils/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/braintree-utils/src/braintree-integration-service.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    NotInitializedError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getShippingAddress,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeIntegrationService from './braintree-integration-service';\nimport BraintreeScriptLoader from './braintree-script-loader';\nimport BraintreeSDKVersionManager from './braintree-sdk-version-manager';\nimport {\n    getBillingAddress,\n    getBraintreeAddress,\n    getBraintreePaymentData,\n    getClientMock,\n    getDataCollectorMock,\n    getDeviceDataMock,\n    getFastlaneMock,\n    getModuleCreatorMock,\n    getPayPalCheckoutCreatorMock,\n    getPaypalCheckoutMock,\n    getThreeDSecureMock,\n} from './mocks';\nimport { PaypalSDK } from './paypal';\nimport {\n    BraintreeClient,\n    BraintreeDataCollector,\n    BraintreeFastlane,\n    BraintreeHostWindow,\n    BraintreeModuleCreator,\n    BraintreePaypalCheckout,\n    BraintreeThreeDSecure,\n} from './types';\n\ndescribe('BraintreeIntegrationService', () => {\n    let braintreeFastlaneMock: BraintreeFastlane;\n    let braintreeFastlaneCreatorMock: BraintreeModuleCreator<BraintreeFastlane>;\n    let braintreeHostWindowMock: BraintreeHostWindow;\n    let braintreeIntegrationService: BraintreeIntegrationService;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let clientMock: BraintreeClient;\n    let clientCreatorMock: BraintreeModuleCreator<BraintreeClient>;\n    let dataCollectorMock: BraintreeDataCollector;\n    let threeDSecureMock: BraintreeThreeDSecure;\n    let threeDSecureCreatorMock: BraintreeModuleCreator<BraintreeThreeDSecure>;\n    let dataCollectorCreatorMock: BraintreeModuleCreator<BraintreeDataCollector>;\n    let paypalCheckoutMock: BraintreePaypalCheckout;\n    let paypalCheckoutCreatorMock: BraintreeModuleCreator<BraintreePaypalCheckout>;\n    let loader: ScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    const clientToken = 'clientToken';\n\n    beforeEach(() => {\n        braintreeFastlaneMock = getFastlaneMock();\n        braintreeFastlaneCreatorMock = getModuleCreatorMock(braintreeFastlaneMock);\n        clientMock = getClientMock();\n        clientCreatorMock = getModuleCreatorMock(clientMock);\n        dataCollectorMock = getDataCollectorMock();\n        dataCollectorCreatorMock = getModuleCreatorMock(dataCollectorMock);\n        paypalCheckoutMock = getPaypalCheckoutMock();\n        paypalCheckoutCreatorMock = getPayPalCheckoutCreatorMock(paypalCheckoutMock, false);\n        threeDSecureMock = getThreeDSecureMock();\n        threeDSecureCreatorMock = getModuleCreatorMock(threeDSecureMock);\n        loader = createScriptLoader();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n\n        braintreeHostWindowMock = window as BraintreeHostWindow;\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            loader,\n            braintreeHostWindowMock,\n            braintreeSDKVersionManager,\n        );\n        braintreeIntegrationService = new BraintreeIntegrationService(\n            braintreeScriptLoader,\n            braintreeHostWindowMock,\n        );\n\n        jest.spyOn(braintreeScriptLoader, 'loadClient').mockResolvedValue(clientCreatorMock);\n        jest.spyOn(braintreeScriptLoader, 'loadFastlane').mockResolvedValue(\n            braintreeFastlaneCreatorMock,\n        );\n        jest.spyOn(braintreeScriptLoader, 'loadDataCollector').mockResolvedValue(\n            dataCollectorCreatorMock,\n        );\n        jest.spyOn(braintreeScriptLoader, 'loadPaypalCheckout').mockResolvedValue(\n            paypalCheckoutCreatorMock,\n        );\n\n        jest.spyOn(braintreeScriptLoader, 'load3DS').mockResolvedValue(threeDSecureCreatorMock);\n    });\n\n    afterEach(() => {\n        jest.resetAllMocks();\n        jest.restoreAllMocks();\n\n        localStorage.clear();\n    });\n\n    describe('#getPaypal', () => {\n        it('throws an error if PayPal SDK cannot be loaded or created', async () => {\n            jest.spyOn(braintreeScriptLoader, 'loadPaypal').mockRejectedValue(\n                new Error('PayPal SDK failed to load'),\n            );\n\n            braintreeIntegrationService.initialize(clientToken);\n\n            await expect(braintreeIntegrationService.getPaypal()).rejects.toThrow(\n                'PayPal SDK failed to load',\n            );\n        });\n\n        it('throws if PayPal creation fails after being loaded', async () => {\n            jest.spyOn(braintreeScriptLoader, 'loadPaypal').mockResolvedValueOnce({\n                create: jest.fn().mockRejectedValue(new Error('PayPal creation failed')),\n            });\n\n            braintreeIntegrationService.initialize(clientToken);\n\n            await expect(braintreeIntegrationService.getPaypal()).rejects.toThrow(\n                'PayPal creation failed',\n            );\n        });\n    });\n\n    describe('#getClient()', () => {\n        it('uses the right arguments to create the client', async () => {\n            braintreeIntegrationService.initialize(clientToken);\n\n            const client = await braintreeIntegrationService.getClient();\n\n            expect(clientCreatorMock.create).toHaveBeenCalledWith({ authorization: 'clientToken' });\n            expect(client).toBe(clientMock);\n        });\n\n        it('always returns the same instance of the client', async () => {\n            braintreeIntegrationService.initialize(clientToken);\n\n            const client1 = await braintreeIntegrationService.getClient();\n            const client2 = await braintreeIntegrationService.getClient();\n\n            expect(braintreeScriptLoader.loadClient).toHaveBeenCalledTimes(1);\n            expect(clientCreatorMock.create).toHaveBeenCalledTimes(1);\n            expect(client1).toBe(client2);\n        });\n\n        it('throws if no client token is provided', async () => {\n            try {\n                await braintreeIntegrationService.getClient();\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n    });\n\n    describe('#getBraintreeFastlane()', () => {\n        it('throws an error if client token is not provided', async () => {\n            braintreeIntegrationService.initialize('');\n\n            try {\n                await braintreeIntegrationService.getBraintreeFastlane();\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('loads braintree fastlane and creates an instance of fastlane object', async () => {\n            braintreeIntegrationService.initialize(clientToken);\n\n            const result = await braintreeIntegrationService.getBraintreeFastlane();\n\n            expect(braintreeScriptLoader.loadClient).toHaveBeenCalled();\n            expect(braintreeScriptLoader.loadDataCollector).toHaveBeenCalled();\n            expect(braintreeScriptLoader.loadFastlane).toHaveBeenCalled();\n\n            expect(braintreeFastlaneCreatorMock.create).toHaveBeenCalledWith({\n                authorization: clientToken,\n                client: clientMock,\n                deviceData: getDeviceDataMock(),\n                styles: {\n                    root: {\n                        backgroundColorPrimary: 'transparent',\n                    },\n                },\n            });\n\n            expect(result).toEqual(braintreeFastlaneMock);\n        });\n\n        it('sets fastlane to sandbox mode if test mode is enabled', async () => {\n            jest.spyOn(Storage.prototype, 'setItem').mockImplementation(jest.fn);\n\n            braintreeIntegrationService.initialize(clientToken);\n\n            await braintreeIntegrationService.getBraintreeFastlane('asd123', true);\n\n            expect(window.localStorage.setItem).toHaveBeenCalledWith('fastlaneEnv', 'sandbox');\n        });\n\n        it('does not switch fastlane to sandbox mode if test mode is disabled', async () => {\n            jest.spyOn(Storage.prototype, 'setItem').mockImplementation(jest.fn);\n\n            braintreeIntegrationService.initialize(clientToken);\n\n            await braintreeIntegrationService.getBraintreeFastlane('asd123', false);\n\n            expect(window.localStorage.setItem).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#getPaypalCheckout()', () => {\n        it('get paypal checkout', async () => {\n            const onSuccess = jest.fn();\n            const onError = jest.fn();\n\n            braintreeIntegrationService.initialize(clientToken);\n\n            await braintreeIntegrationService.getPaypalCheckout({}, onSuccess, onError);\n\n            expect(onSuccess).toHaveBeenCalledWith(paypalCheckoutMock);\n            expect(onError).not.toHaveBeenCalled();\n            expect(paypalCheckoutMock.loadPayPalSDK).toHaveBeenCalled();\n        });\n\n        it('get paypal checkout when paypal exists in window', async () => {\n            (window as BraintreeHostWindow).paypal = {} as PaypalSDK;\n\n            const onSuccess = jest.fn();\n            const onError = jest.fn();\n\n            braintreeIntegrationService.initialize(clientToken);\n\n            await braintreeIntegrationService.getPaypalCheckout({}, onSuccess, onError);\n\n            expect(onSuccess).toHaveBeenCalledWith(paypalCheckoutMock);\n            expect(onError).not.toHaveBeenCalled();\n            expect(paypalCheckoutMock.loadPayPalSDK).not.toHaveBeenCalled();\n        });\n\n        it('get paypal checkout but paypalCheckoutCreator throw error', async () => {\n            const onSuccess = jest.fn();\n            const onError = jest.fn();\n\n            const newPaypalCheckoutCreatorMock = getPayPalCheckoutCreatorMock(\n                paypalCheckoutMock,\n                true,\n            );\n\n            jest.spyOn(braintreeScriptLoader, 'loadPaypalCheckout').mockResolvedValue(\n                newPaypalCheckoutCreatorMock,\n            );\n\n            braintreeIntegrationService.initialize(clientToken);\n\n            await braintreeIntegrationService.getPaypalCheckout({}, onSuccess, onError);\n\n            expect(onSuccess).not.toHaveBeenCalled();\n            expect(onError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getDataCollector()', () => {\n        it('uses the right parameters to instantiate a data collector', async () => {\n            braintreeIntegrationService.initialize(clientToken);\n\n            await braintreeIntegrationService.getDataCollector();\n\n            expect(dataCollectorCreatorMock.create).toHaveBeenCalledWith({\n                client: clientMock,\n                kount: true,\n            });\n\n            await braintreeIntegrationService.getDataCollector({ paypal: true });\n\n            expect(dataCollectorCreatorMock.create).toHaveBeenCalledWith({\n                client: clientMock,\n                kount: true,\n                paypal: true,\n            });\n        });\n\n        it('always returns the same instance of the data collector', async () => {\n            braintreeIntegrationService.initialize(clientToken);\n\n            const dataCollector1 = await braintreeIntegrationService.getDataCollector();\n            const dataCollector2 = await braintreeIntegrationService.getDataCollector();\n\n            expect(dataCollector1).toBe(dataCollector2);\n            expect(braintreeScriptLoader.loadDataCollector).toHaveBeenCalledTimes(1);\n            expect(dataCollectorCreatorMock.create).toHaveBeenCalledTimes(1);\n        });\n\n        it('returns different data collector instance if it is used for PayPal', async () => {\n            braintreeIntegrationService.initialize(clientToken);\n\n            const dataCollector = await braintreeIntegrationService.getDataCollector();\n            const paypalDataCollector = await braintreeIntegrationService.getDataCollector({\n                paypal: true,\n            });\n\n            expect(await braintreeIntegrationService.getDataCollector()).toBe(dataCollector);\n            expect(await braintreeIntegrationService.getDataCollector({ paypal: true })).toBe(\n                paypalDataCollector,\n            );\n        });\n\n        it('returns the data collector information', async () => {\n            braintreeIntegrationService.initialize(clientToken);\n\n            const dataCollector = await braintreeIntegrationService.getDataCollector();\n\n            expect(dataCollector).toEqual(\n                expect.objectContaining({ deviceData: getDeviceDataMock() }),\n            );\n        });\n\n        it('catches the KOUNT_IS_NOT_ENABLED error', async () => {\n            jest.spyOn(dataCollectorCreatorMock, 'create').mockReturnValue(\n                Promise.reject({ code: 'DATA_COLLECTOR_KOUNT_NOT_ENABLED' }),\n            );\n\n            braintreeIntegrationService.initialize(clientToken);\n\n            await expect(braintreeIntegrationService.getDataCollector()).resolves.toEqual(\n                expect.objectContaining({ deviceData: undefined }),\n            );\n        });\n\n        it('throws if some other error is returned', async () => {\n            jest.spyOn(dataCollectorCreatorMock, 'create').mockReturnValue(\n                Promise.reject({ code: 'OTHER_RANDOM_ERROR' }),\n            );\n\n            braintreeIntegrationService.initialize(clientToken);\n\n            await expect(braintreeIntegrationService.getDataCollector()).rejects.toEqual({\n                code: 'OTHER_RANDOM_ERROR',\n            });\n        });\n    });\n\n    describe('#getBraintreeEnv()', () => {\n        it('get Braintree env - production', () => {\n            expect(braintreeIntegrationService.getBraintreeEnv()).toBe('production');\n            expect(braintreeIntegrationService.getBraintreeEnv(false)).toBe('production');\n        });\n\n        it('get Braintree env - sandbox', () => {\n            expect(braintreeIntegrationService.getBraintreeEnv(true)).toBe('sandbox');\n        });\n    });\n\n    describe('#mapToBraintreeAddress()', () => {\n        it('maps shipping address to braintree address', () => {\n            expect(\n                braintreeIntegrationService.mapToBraintreeShippingAddressOverride(\n                    getShippingAddress(),\n                ),\n            ).toEqual(getBraintreeAddress());\n        });\n    });\n\n    describe('#mapToLegacyShippingAddress()', () => {\n        const detailsMock = {\n            email: 'test@test.com',\n            phone: '55555555555',\n            shippingAddress: {\n                recipientName: 'John Doe',\n                line1: 'shipping_line1',\n                line2: 'shipping_line2',\n                city: 'shipping_city',\n                state: 'shipping_state',\n                postalCode: '03444',\n                countryCode: 'US',\n            },\n        };\n\n        it('maps details to legacy shipping address', () => {\n            const props = {\n                ...detailsMock,\n                billingAddress: undefined,\n            };\n\n            const expects = {\n                email: detailsMock.email,\n                first_name: 'John',\n                last_name: 'Doe',\n                phone_number: detailsMock.phone,\n                address_line_1: detailsMock.shippingAddress.line1,\n                address_line_2: detailsMock.shippingAddress.line2,\n                city: detailsMock.shippingAddress.city,\n                state: detailsMock.shippingAddress.state,\n                country_code: detailsMock.shippingAddress.countryCode,\n                postal_code: detailsMock.shippingAddress.postalCode,\n            };\n\n            expect(braintreeIntegrationService.mapToLegacyShippingAddress(props)).toEqual(expects);\n        });\n\n        it('returns empty string if name is empty', () => {\n            const details = {\n                email: 'test@test.com',\n                phone: '55555555555',\n                shippingAddress: {\n                    recipientName: '',\n                    line1: 'test',\n                    line2: 'test',\n                    city: 'New York',\n                    state: 'New York',\n                    postalCode: '01111',\n                    countryCode: '01',\n                },\n            };\n\n            const expects = {\n                email: 'test@test.com',\n                phone_number: '55555555555',\n                first_name: '',\n                last_name: '',\n                address_line_1: 'test',\n                address_line_2: 'test',\n                city: 'New York',\n                state: 'New York',\n                country_code: '01',\n                postal_code: '01111',\n            };\n\n            expect(braintreeIntegrationService.mapToLegacyShippingAddress(details)).toEqual(\n                expects,\n            );\n        });\n    });\n\n    describe('mapToLegacyBillingAddress()', () => {\n        const detailsMock = {\n            username: 'johndoe',\n            email: 'test@test.com',\n            payerId: '1122abc',\n            firstName: 'John',\n            lastName: 'Doe',\n            countryCode: 'US',\n            phone: '55555555555',\n            billingAddress: {\n                line1: 'billing_line1',\n                line2: 'billing_line2',\n                city: 'billing_city',\n                state: 'billing_state',\n                postalCode: '03444',\n                countryCode: 'US',\n            },\n            shippingAddress: {\n                recipientName: 'John Doe',\n                line1: 'shipping_line1',\n                line2: 'shipping_line2',\n                city: 'shipping_city',\n                state: 'shipping_state',\n                postalCode: '03444',\n                countryCode: 'US',\n            },\n        };\n\n        it('maps details to legacy billing address using billing details as main address', () => {\n            const props = detailsMock;\n\n            const expects = {\n                email: detailsMock.email,\n                first_name: detailsMock.firstName,\n                last_name: detailsMock.lastName,\n                phone_number: detailsMock.phone,\n                address_line_1: detailsMock.billingAddress.line1,\n                address_line_2: detailsMock.billingAddress.line2,\n                city: detailsMock.billingAddress.city,\n                state: detailsMock.billingAddress.state,\n                country_code: detailsMock.billingAddress.countryCode,\n                postal_code: detailsMock.billingAddress.postalCode,\n            };\n\n            expect(braintreeIntegrationService.mapToLegacyBillingAddress(props)).toEqual(expects);\n        });\n\n        it('maps details to legacy billing address using shipping details as main address if billing details is not provided', () => {\n            const props = {\n                ...detailsMock,\n                billingAddress: undefined,\n            };\n\n            const expects = {\n                email: detailsMock.email,\n                first_name: detailsMock.firstName,\n                last_name: detailsMock.lastName,\n                phone_number: detailsMock.phone,\n                address_line_1: detailsMock.shippingAddress.line1,\n                address_line_2: detailsMock.shippingAddress.line2,\n                city: detailsMock.shippingAddress.city,\n                state: detailsMock.shippingAddress.state,\n                country_code: detailsMock.shippingAddress.countryCode,\n                postal_code: detailsMock.shippingAddress.postalCode,\n            };\n\n            expect(braintreeIntegrationService.mapToLegacyBillingAddress(props)).toEqual(expects);\n        });\n    });\n\n    describe('remove element', () => {\n        let container: HTMLDivElement;\n\n        beforeEach(() => {\n            container = document.createElement('div');\n            container.setAttribute('id', 'braintree-id');\n            document.body.appendChild(container);\n        });\n\n        afterAll(() => {\n            document.body.removeChild(container);\n        });\n\n        it('remove existing element', () => {\n            braintreeIntegrationService.removeElement('braintree-id');\n\n            expect(document.getElementById('braintree-id')).toBeNull();\n        });\n\n        it('remove not existing element', () => {\n            braintreeIntegrationService.removeElement('any-other-id');\n\n            expect(document.getElementById('braintree-id')).not.toBeNull();\n        });\n    });\n\n    describe('#getSessionId', () => {\n        it('provides riskCorrelationId to data collector', async () => {\n            const cartIdMock = 'cartId-asdasd';\n\n            braintreeIntegrationService.initialize(clientToken);\n            await braintreeIntegrationService.getSessionId(cartIdMock);\n\n            expect(dataCollectorCreatorMock.create).toHaveBeenCalledWith({\n                client: clientMock,\n                kount: true,\n                riskCorrelationId: cartIdMock,\n            });\n        });\n    });\n\n    describe('#verifyCard', () => {\n        const threeDSecureOptions = {\n            nonce: '3ds_nonce',\n            amount: 122,\n        };\n        it('tokenizes the card with the right params', async () => {\n            jest.spyOn(braintreeIntegrationService, 'tokenizeCard');\n            jest.spyOn(braintreeIntegrationService, 'verifyCard');\n            jest.spyOn(braintreeScriptLoader, 'load3DS');\n            jest.spyOn(braintreeScriptLoader, 'loadClient').mockResolvedValue({\n                create: jest.fn().mockResolvedValue({\n                    request: jest.fn().mockResolvedValue({\n                        creditCards: [\n                            {\n                                nonce: 'nonce',\n                                details: { bin: 'bin' },\n                            },\n                        ],\n                    }),\n                }),\n            });\n            braintreeIntegrationService.initialize(clientToken, threeDSecureOptions);\n            await braintreeIntegrationService.verifyCard(\n                getBraintreePaymentData(),\n                getBillingAddress(),\n                122,\n            );\n\n            expect(braintreeIntegrationService.tokenizeCard).toHaveBeenCalledWith(\n                getBraintreePaymentData(),\n                getBillingAddress(),\n            );\n        });\n\n        it('loads 3ds', async () => {\n            jest.spyOn(braintreeScriptLoader, 'loadClient').mockResolvedValue({\n                create: jest.fn().mockResolvedValue({\n                    request: jest.fn().mockResolvedValue({\n                        creditCards: [\n                            {\n                                nonce: 'nonce',\n                                details: { bin: 'bin' },\n                            },\n                        ],\n                    }),\n                }),\n            });\n            braintreeIntegrationService.initialize(clientToken, threeDSecureOptions);\n            await braintreeIntegrationService.verifyCard(\n                getBraintreePaymentData(),\n                getBillingAddress(),\n                122,\n            );\n\n            expect(braintreeScriptLoader.load3DS).toHaveBeenCalled();\n        });\n    });\n\n    describe('#teardown()', () => {\n        it('calls teardown in all the dependencies', async () => {\n            braintreeIntegrationService.initialize(clientToken);\n\n            await braintreeIntegrationService.getDataCollector();\n\n            await braintreeIntegrationService.teardown();\n\n            expect(dataCollectorMock.teardown).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/braintree-integration-service.ts",
    "content": "import { supportsPopups } from '@braintree/browser-detection';\nimport { isEmpty } from 'lodash';\n\nimport {\n    Address,\n    CancellablePromise,\n    CreditCardInstrument,\n    LegacyAddress,\n    NonceInstrument,\n    NotInitializedError,\n    NotInitializedErrorType,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentInvalidFormError,\n    PaymentInvalidFormErrorDetails,\n    PaymentMethodCancelledError,\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                        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\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        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\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 (!this.threeDSecureOptions || !nonce) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const {\n            addFrame,\n            removeFrame,\n            challengeRequested = true,\n            additionalInformation,\n        } = this.threeDSecureOptions;\n        const cancelVerifyCard = async () => {\n            const response = await threeDSecure.cancelVerifyCard();\n\n            // eslint-disable-next-line @typescript-eslint/no-use-before-define\n            verification.cancel(new PaymentMethodCancelledError());\n\n            return response;\n        };\n\n        const roundedAmount = amount.toFixed(2);\n\n        const verification = new CancellablePromise(\n            threeDSecure.verifyCard({\n                addFrame: (error, iframe) => {\n                    if (addFrame) {\n                        addFrame(error, iframe, cancelVerifyCard);\n                    }\n                },\n                amount: Number(roundedAmount),\n                bin,\n                challengeRequested,\n                nonce,\n                removeFrame,\n                onLookupComplete: (_data, next) => {\n                    next();\n                },\n                collectDeviceData: true,\n                additionalInformation,\n            }),\n        );\n\n        return verification.promise;\n    }\n}\n"
  },
  {
    "path": "packages/braintree-utils/src/braintree-messages.spec.ts",
    "content": "import {\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { BraintreeHostWindow } from './braintree';\nimport BraintreeMessages from './braintree-messages';\nimport { getBraintree, getPaypalMock } from './mocks';\nimport { MessagingPlacements, PaypalSDK } from './paypal';\n\ndescribe('BraintreeMessages', () => {\n    let braintreeMessages: BraintreeMessages;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalSdkMock: PaypalSDK;\n    let paypalMessageElement: HTMLDivElement;\n\n    const amount = 190;\n    const methodId = 'braintreepaypalcredit';\n    const defaultMessageContainerId = 'braintree-paypal-credit-message-mock-id';\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeMessages = new BraintreeMessages(paymentIntegrationService);\n\n        paypalSdkMock = getPaypalMock();\n        (window as BraintreeHostWindow).paypal = paypalSdkMock;\n\n        paymentMethod = {\n            ...getBraintree(),\n            clientToken: 'myToken',\n        };\n\n        paypalMessageElement = document.createElement('div');\n        paypalMessageElement.id = defaultMessageContainerId;\n        document.body.appendChild(paypalMessageElement);\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n    });\n\n    afterEach(() => {\n        delete (window as BraintreeHostWindow).paypal;\n\n        if (document.getElementById(defaultMessageContainerId)) {\n            document.body.removeChild(paypalMessageElement);\n        }\n    });\n\n    it('does not render paypal banner when paypal is not presented in window', () => {\n        delete (window as BraintreeHostWindow).paypal;\n\n        braintreeMessages.render(methodId, defaultMessageContainerId, MessagingPlacements.PAYMENT);\n\n        expect(paypalSdkMock.Messages).not.toHaveBeenCalled();\n    });\n\n    it('does not render paypal banner when container is not presented in DOM', () => {\n        document.body.removeChild(paypalMessageElement);\n\n        braintreeMessages.render(methodId, defaultMessageContainerId, MessagingPlacements.PAYMENT);\n\n        expect(paypalSdkMock.Messages).not.toHaveBeenCalled();\n    });\n\n    it('does not render paypal banner when payment initialization data was not returned from server', () => {\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            {\n                ...paymentMethod,\n                initializationData: null,\n            },\n        );\n\n        braintreeMessages.render(methodId, defaultMessageContainerId, MessagingPlacements.PAYMENT);\n\n        expect(paypalSdkMock.Messages).not.toHaveBeenCalled();\n    });\n\n    it('does not render paypal banner on checkout page when it is disabled', () => {\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: undefined,\n                },\n            },\n        );\n\n        braintreeMessages.render(methodId, defaultMessageContainerId, MessagingPlacements.PAYMENT);\n\n        expect(paypalSdkMock.Messages).not.toHaveBeenCalled();\n    });\n\n    describe('BNPL implementation', () => {\n        it('does not render home page Braintree Message if banner status is false', () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: [\n                        {\n                            id: 'homepage',\n                            name: 'Home page',\n                            status: false,\n                            styles: {},\n                        },\n                    ],\n                },\n            });\n\n            braintreeMessages.render(methodId, defaultMessageContainerId, MessagingPlacements.HOME);\n\n            expect(paypalSdkMock.Messages).not.toHaveBeenCalled();\n        });\n\n        it('renders Braintree Message on home page', () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: [\n                        {\n                            id: 'homepage',\n                            name: 'Home page',\n                            status: true,\n                            styles: {\n                                color: 'white-no-border',\n                                layout: 'flex',\n                                ratio: '8x1',\n                            },\n                        },\n                    ],\n                },\n            });\n\n            braintreeMessages.render(methodId, defaultMessageContainerId, MessagingPlacements.HOME);\n\n            expect(paypalSdkMock.Messages).toHaveBeenCalledWith({\n                amount,\n                buyerCountry: 'US',\n                placement: 'homepage',\n                style: {\n                    color: 'white-no-border',\n                    layout: 'flex',\n                    ratio: '8x1',\n                },\n            });\n        });\n\n        it('does not render product page Braintree Message if banner status is false', () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: [\n                        {\n                            id: 'product',\n                            name: 'Product page',\n                            status: false,\n                            styles: {},\n                        },\n                    ],\n                },\n            });\n\n            braintreeMessages.render(\n                methodId,\n                defaultMessageContainerId,\n                MessagingPlacements.PRODUCT,\n            );\n\n            expect(paypalSdkMock.Messages).not.toHaveBeenCalled();\n        });\n\n        it('renders Braintree Message on product page', () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: [\n                        {\n                            id: 'product',\n                            name: 'Product page',\n                            status: true,\n                            styles: {\n                                layout: 'text',\n                                'logo-type': 'alternative',\n                                'text-color': 'black',\n                                'text-size': '12',\n                            },\n                        },\n                    ],\n                },\n            });\n\n            braintreeMessages.render(\n                methodId,\n                defaultMessageContainerId,\n                MessagingPlacements.PRODUCT,\n            );\n\n            expect(paypalSdkMock.Messages).toHaveBeenCalledWith({\n                amount,\n                buyerCountry: 'US',\n                placement: 'product',\n                style: {\n                    layout: 'text',\n                    logo: {\n                        type: 'alternative',\n                    },\n                    text: {\n                        color: 'black',\n                        size: 12,\n                    },\n                },\n            });\n        });\n\n        it('does not render cart page Braintree Message if banner status is false', () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: [\n                        {\n                            id: 'cart',\n                            name: 'Cart page',\n                            status: false,\n                            styles: {},\n                        },\n                    ],\n                },\n            });\n\n            braintreeMessages.render(methodId, defaultMessageContainerId, MessagingPlacements.CART);\n\n            expect(paypalSdkMock.Messages).not.toHaveBeenCalled();\n        });\n\n        it('renders Braintree Message on cart page', () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: [\n                        {\n                            id: 'cart',\n                            name: 'Cart page',\n                            status: true,\n                            styles: {\n                                layout: 'text',\n                                'logo-type': 'alternative',\n                                'text-color': 'white',\n                                'text-size': '10',\n                                'logo-position': 'right',\n                            },\n                        },\n                    ],\n                },\n            });\n\n            braintreeMessages.render(methodId, defaultMessageContainerId, MessagingPlacements.CART);\n\n            expect(paypalSdkMock.Messages).toHaveBeenCalledWith({\n                amount,\n                buyerCountry: 'US',\n                placement: 'cart',\n                style: {\n                    layout: 'text',\n                    logo: {\n                        position: 'right',\n                        type: 'alternative',\n                    },\n                    text: {\n                        color: 'white',\n                        size: 10,\n                    },\n                },\n            });\n        });\n\n        it('does not render checkout page Braintree Message if banner status is false', () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: [\n                        {\n                            id: 'checkout',\n                            name: 'Checkout page',\n                            status: false,\n                            styles: {},\n                        },\n                    ],\n                },\n            });\n\n            braintreeMessages.render(methodId, defaultMessageContainerId, MessagingPlacements.CART);\n\n            expect(paypalSdkMock.Messages).not.toHaveBeenCalled();\n        });\n\n        it('renders Braintree Message on checkout page', () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: [\n                        {\n                            id: 'checkout',\n                            name: 'Checkout page',\n                            status: true,\n                            styles: {\n                                layout: 'text',\n                                'logo-type': 'inline',\n                                'text-color': 'black',\n                                'text-size': '12',\n                            },\n                        },\n                    ],\n                },\n            });\n\n            braintreeMessages.render(\n                methodId,\n                defaultMessageContainerId,\n                MessagingPlacements.PAYMENT,\n            );\n\n            expect(paypalSdkMock.Messages).toHaveBeenCalledWith({\n                amount,\n                buyerCountry: 'US',\n                placement: 'payment',\n                style: {\n                    layout: 'text',\n                    logo: {\n                        type: 'inline',\n                    },\n                    text: {\n                        color: 'black',\n                        size: 12,\n                    },\n                },\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/braintree-messages.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/braintree-script-loader.spec.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentIntegrationService,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeScriptLoader from './braintree-script-loader';\nimport { BRAINTREE_SDK_SCRIPTS_INTEGRITY } from './braintree-sdk-scripts-integrity';\nimport {\n    BRAINTREE_SDK_DEFAULT_VERSION,\n    BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n    BRAINTREE_SDK_STABLE_VERSION,\n} from './braintree-sdk-verison';\nimport BraintreeSDKVersionManager from './braintree-sdk-version-manager';\nimport {\n    getBraintreeLocalPaymentMock,\n    getBraintreePaypalMock,\n    getClientMock,\n    getDataCollectorMock,\n    getFastlaneMock,\n    getGooglePaymentMock,\n    getHostedFieldsMock,\n    getModuleCreatorMock,\n    getPaypalCheckoutMock,\n    getThreeDSecureMock,\n    getVenmoCheckoutMock,\n    getVisaCheckoutMock,\n    getVisaCheckoutSDKMock,\n} from './mocks';\nimport {\n    BraintreeClientCreator,\n    BraintreeDataCollector,\n    BraintreeFastlane,\n    BraintreeGooglePaymentCreator,\n    BraintreeHostedFieldsCreator,\n    BraintreeHostWindow,\n    BraintreeLocalPaymentCreator,\n    BraintreeModuleCreator,\n    BraintreeModuleName,\n    BraintreePaypalCheckoutCreator,\n    BraintreePaypalCreator,\n    BraintreeThreeDSecureCreator,\n    BraintreeVenmoCheckoutCreator,\n    BraintreeVisaCheckoutCreator,\n} from './types';\nimport { VisaCheckoutSDK } from './visacheckout';\n\ndescribe('BraintreeScriptLoader', () => {\n    let scriptLoader: ScriptLoader;\n    let mockWindow: BraintreeHostWindow;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    const braintreeSdkDefaultScriptsIntegrity =\n        BRAINTREE_SDK_SCRIPTS_INTEGRITY[BRAINTREE_SDK_DEFAULT_VERSION];\n    const braintreeSdkStableScriptsIntegrity =\n        BRAINTREE_SDK_SCRIPTS_INTEGRITY[BRAINTREE_SDK_STABLE_VERSION];\n    const braintreeSdkFixedHostedFieldsScriptsIntegrity =\n        BRAINTREE_SDK_SCRIPTS_INTEGRITY[BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION];\n    const thirdPartyBraintreeVersion = '3.123.4';\n\n    beforeEach(() => {\n        mockWindow = { braintree: {} } as BraintreeHostWindow;\n        scriptLoader = {} as ScriptLoader;\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n\n        jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValue(\n            BRAINTREE_SDK_STABLE_VERSION,\n        );\n    });\n\n    describe('#loadClient()', () => {\n        let clientMock: BraintreeClientCreator;\n\n        beforeEach(() => {\n            clientMock = getModuleCreatorMock(getClientMock());\n            scriptLoader.loadScript = jest.fn(() => {\n                if (mockWindow.braintree) {\n                    mockWindow.braintree.client = clientMock;\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads the client with stable version of braintree sdk', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const client = await braintreeScriptLoader.loadClient();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_STABLE_VERSION}/js/client.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity: braintreeSdkStableScriptsIntegrity[BraintreeModuleName.Client],\n                    },\n                },\n            );\n            expect(client).toBe(clientMock);\n        });\n\n        it('loads the client with default version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const client = await braintreeScriptLoader.loadClient();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_DEFAULT_VERSION}/js/client.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity: braintreeSdkDefaultScriptsIntegrity[BraintreeModuleName.Client],\n                    },\n                },\n            );\n            expect(client).toBe(clientMock);\n        });\n\n        it('loads the client with fixed hosted fields version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const client = await braintreeScriptLoader.loadClient();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION}/js/client.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkFixedHostedFieldsScriptsIntegrity[\n                                BraintreeModuleName.Client\n                            ],\n                    },\n                },\n            );\n            expect(client).toBe(clientMock);\n        });\n\n        it('loads the client with non-supported version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                thirdPartyBraintreeVersion,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const client = await braintreeScriptLoader.loadClient();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${thirdPartyBraintreeVersion}/js/client.min.js`,\n                undefined,\n            );\n            expect(client).toBe(clientMock);\n        });\n\n        it('loads the client throw error if braintree does not exist in window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                {} as BraintreeHostWindow,\n                braintreeSDKVersionManager,\n            );\n\n            try {\n                await braintreeScriptLoader.loadClient();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('loads the client throw error if client does not exist in window.braintree', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                {\n                    braintree: {},\n                } as BraintreeHostWindow,\n                braintreeSDKVersionManager,\n            );\n\n            try {\n                await braintreeScriptLoader.loadClient();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('does not load module if it is already in the window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadClient();\n            await braintreeScriptLoader.loadClient();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#loadFastlane()', () => {\n        let fastlaneCreatorMock: BraintreeModuleCreator<BraintreeFastlane>;\n\n        beforeEach(() => {\n            fastlaneCreatorMock = getModuleCreatorMock(getFastlaneMock());\n            scriptLoader.loadScript = jest.fn(() => {\n                if (mockWindow.braintree) {\n                    mockWindow.braintree.fastlane = fastlaneCreatorMock;\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads fastlane module with stable version of braintree sdk', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const fastlane = await braintreeScriptLoader.loadFastlane();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_STABLE_VERSION}/js/fastlane.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity: braintreeSdkStableScriptsIntegrity[BraintreeModuleName.Fastlane],\n                    },\n                },\n            );\n            expect(fastlane).toBe(fastlaneCreatorMock);\n        });\n\n        it('loads fastlane module with hosted fields fix version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValue(\n                BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n            );\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const fastlane = await braintreeScriptLoader.loadFastlane();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION}/js/fastlane.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkFixedHostedFieldsScriptsIntegrity[\n                                BraintreeModuleName.Fastlane\n                            ],\n                    },\n                },\n            );\n            expect(fastlane).toBe(fastlaneCreatorMock);\n        });\n\n        it('loads fastlane module with default version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const fastlane = await braintreeScriptLoader.loadFastlane();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_DEFAULT_VERSION}/js/fastlane.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkDefaultScriptsIntegrity[BraintreeModuleName.Fastlane],\n                    },\n                },\n            );\n            expect(fastlane).toBe(fastlaneCreatorMock);\n        });\n\n        it('loads the fastlane with non-supported version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                thirdPartyBraintreeVersion,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const fastlane = await braintreeScriptLoader.loadFastlane();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${thirdPartyBraintreeVersion}/js/fastlane.min.js`,\n                undefined,\n            );\n            expect(fastlane).toBe(fastlaneCreatorMock);\n        });\n\n        it('loads the fastlane throw error if braintree does not exist in window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                {} as BraintreeHostWindow,\n                braintreeSDKVersionManager,\n            );\n\n            try {\n                await braintreeScriptLoader.loadFastlane();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('loads the client throw error if fastlane does not exist in window.braintree', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                {\n                    braintree: {},\n                } as BraintreeHostWindow,\n                braintreeSDKVersionManager,\n            );\n\n            try {\n                await braintreeScriptLoader.loadFastlane();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('does not load module if it is already in the window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadFastlane();\n            await braintreeScriptLoader.loadFastlane();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#loadPaypalCheckout', () => {\n        let paypalCheckoutMock: BraintreePaypalCheckoutCreator;\n\n        beforeEach(() => {\n            paypalCheckoutMock = getModuleCreatorMock(getPaypalCheckoutMock());\n            scriptLoader.loadScript = jest.fn(() => {\n                if (mockWindow.braintree) {\n                    mockWindow.braintree.paypalCheckout = paypalCheckoutMock;\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads PayPal checkout with stable version of braintree sdk', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const paypalCheckout = await braintreeScriptLoader.loadPaypalCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_STABLE_VERSION}/js/paypal-checkout.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkStableScriptsIntegrity[BraintreeModuleName.PaypalCheckout],\n                    },\n                },\n            );\n            expect(paypalCheckout).toBe(paypalCheckoutMock);\n        });\n\n        it('loads the paypalCheckout with fixed hosted fields version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const paypalCheckout = await braintreeScriptLoader.loadPaypalCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION}/js/paypal-checkout.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkFixedHostedFieldsScriptsIntegrity[\n                                BraintreeModuleName.PaypalCheckout\n                            ],\n                    },\n                },\n            );\n            expect(paypalCheckout).toBe(paypalCheckout);\n        });\n\n        it('loads PayPal checkout with default version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const paypalCheckout = await braintreeScriptLoader.loadPaypalCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_DEFAULT_VERSION}/js/paypal-checkout.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkDefaultScriptsIntegrity[BraintreeModuleName.PaypalCheckout],\n                    },\n                },\n            );\n            expect(paypalCheckout).toBe(paypalCheckoutMock);\n        });\n\n        it('loads PayPal checkout with non-supported version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                thirdPartyBraintreeVersion,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const paypalCheckout = await braintreeScriptLoader.loadPaypalCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${thirdPartyBraintreeVersion}/js/paypal-checkout.min.js`,\n                undefined,\n            );\n            expect(paypalCheckout).toBe(paypalCheckoutMock);\n        });\n\n        it('loads PayPal checkout throw error if braintree does not exist in window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                {} as BraintreeHostWindow,\n                braintreeSDKVersionManager,\n            );\n\n            try {\n                await braintreeScriptLoader.loadPaypalCheckout();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('loads PayPal checkout throw error if client does not exist in window.paypalCheckout', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                {\n                    braintree: {},\n                } as BraintreeHostWindow,\n                braintreeSDKVersionManager,\n            );\n\n            try {\n                await braintreeScriptLoader.loadPaypalCheckout();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('does not load module if it is already in the window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadPaypalCheckout();\n            await braintreeScriptLoader.loadPaypalCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#loadLocalPayment', () => {\n        let localPayment: BraintreeLocalPaymentCreator;\n\n        beforeEach(() => {\n            localPayment = getModuleCreatorMock(getBraintreeLocalPaymentMock());\n            scriptLoader.loadScript = jest.fn(() => {\n                if (mockWindow.braintree) {\n                    mockWindow.braintree.localPayment = localPayment;\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads local payment methods with stable version of braintree sdk', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadLocalPayment();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_STABLE_VERSION}/js/local-payment.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkStableScriptsIntegrity[BraintreeModuleName.LocalPayment],\n                    },\n                },\n            );\n        });\n\n        it('loads local payment methods with hosted fields fix version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValue(\n                BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n            );\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadLocalPayment();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION}/js/local-payment.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkFixedHostedFieldsScriptsIntegrity[\n                                BraintreeModuleName.LocalPayment\n                            ],\n                    },\n                },\n            );\n        });\n\n        it('loads local payment methods with default version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadLocalPayment();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_DEFAULT_VERSION}/js/local-payment.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkDefaultScriptsIntegrity[BraintreeModuleName.LocalPayment],\n                    },\n                },\n            );\n        });\n\n        it('loads local payment methods with non-supported version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                thirdPartyBraintreeVersion,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadLocalPayment();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${thirdPartyBraintreeVersion}/js/local-payment.min.js`,\n                undefined,\n            );\n        });\n\n        it('does not load module if it is already in the window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadLocalPayment();\n            await braintreeScriptLoader.loadLocalPayment();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#loadGooglePayment', () => {\n        let googlePayment: BraintreeGooglePaymentCreator;\n\n        beforeEach(() => {\n            googlePayment = getModuleCreatorMock(getGooglePaymentMock());\n            scriptLoader.loadScript = jest.fn(() => {\n                if (mockWindow.braintree) {\n                    mockWindow.braintree.googlePayment = googlePayment;\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads google payment methods with stable version of braintree sdk', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadGooglePayment();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_STABLE_VERSION}/js/google-payment.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkStableScriptsIntegrity[BraintreeModuleName.GooglePayment],\n                    },\n                },\n            );\n        });\n\n        it('loads google payment methods with hosted fields fix version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValue(\n                BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n            );\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadGooglePayment();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION}/js/google-payment.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkFixedHostedFieldsScriptsIntegrity[\n                                BraintreeModuleName.GooglePayment\n                            ],\n                    },\n                },\n            );\n        });\n\n        it('loads google payment methods with default version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadGooglePayment();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_DEFAULT_VERSION}/js/google-payment.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkDefaultScriptsIntegrity[BraintreeModuleName.GooglePayment],\n                    },\n                },\n            );\n        });\n\n        it('loads google payment methods with non-supported version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                thirdPartyBraintreeVersion,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadGooglePayment();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${thirdPartyBraintreeVersion}/js/google-payment.min.js`,\n                undefined,\n            );\n        });\n\n        it('does not load module if it is already in the window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadGooglePayment();\n            await braintreeScriptLoader.loadGooglePayment();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#loadPaypal', () => {\n        let braintreePaypal: BraintreePaypalCreator;\n\n        beforeEach(() => {\n            braintreePaypal = getModuleCreatorMock(getBraintreePaypalMock());\n            scriptLoader.loadScript = jest.fn(() => {\n                if (mockWindow.braintree) {\n                    mockWindow.braintree.paypal = braintreePaypal;\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads braintree paypal payment methods with stable version of braintree sdk', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadPaypal();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_STABLE_VERSION}/js/paypal.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity: braintreeSdkStableScriptsIntegrity[BraintreeModuleName.Paypal],\n                    },\n                },\n            );\n        });\n\n        it('loads braintree paypal payment methods with hosted fields fix version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n            );\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadPaypal();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION}/js/paypal.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkFixedHostedFieldsScriptsIntegrity[\n                                BraintreeModuleName.Paypal\n                            ],\n                    },\n                },\n            );\n        });\n\n        it('loads braintree paypal payment methods with default version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadPaypal();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_DEFAULT_VERSION}/js/paypal.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity: braintreeSdkDefaultScriptsIntegrity[BraintreeModuleName.Paypal],\n                    },\n                },\n            );\n        });\n\n        it('loads braintree paypal payment methods with non-supported version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                thirdPartyBraintreeVersion,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadPaypal();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${thirdPartyBraintreeVersion}/js/paypal.min.js`,\n                undefined,\n            );\n        });\n\n        it('does not load module if it is already in the window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadPaypal();\n            await braintreeScriptLoader.loadPaypal();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#load3DS', () => {\n        let threeDSecure: BraintreeThreeDSecureCreator;\n\n        beforeEach(() => {\n            threeDSecure = getModuleCreatorMock(getThreeDSecureMock());\n            scriptLoader.loadScript = jest.fn(() => {\n                if (mockWindow.braintree) {\n                    mockWindow.braintree.threeDSecure = threeDSecure;\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads threeDSecure methods with stable version of braintree sdk', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.load3DS();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_STABLE_VERSION}/js/three-d-secure.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkStableScriptsIntegrity[BraintreeModuleName.ThreeDSecure],\n                    },\n                },\n            );\n        });\n\n        it('loads threeDSecure methods with hosted fields fix version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValue(\n                BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n            );\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.load3DS();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION}/js/three-d-secure.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkFixedHostedFieldsScriptsIntegrity[\n                                BraintreeModuleName.ThreeDSecure\n                            ],\n                    },\n                },\n            );\n        });\n\n        it('loads threeDSecure methods with default version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.load3DS();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_DEFAULT_VERSION}/js/three-d-secure.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkDefaultScriptsIntegrity[BraintreeModuleName.ThreeDSecure],\n                    },\n                },\n            );\n        });\n\n        it('loads threeDSecure methods with non-supported version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                thirdPartyBraintreeVersion,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.load3DS();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${thirdPartyBraintreeVersion}/js/three-d-secure.min.js`,\n                undefined,\n            );\n        });\n\n        it('does not load module if it is already in the window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.load3DS();\n            await braintreeScriptLoader.load3DS();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#loadVisaCheckout', () => {\n        let visaCheckout: BraintreeVisaCheckoutCreator;\n\n        beforeEach(() => {\n            visaCheckout = getModuleCreatorMock(getVisaCheckoutMock());\n            scriptLoader.loadScript = jest.fn(() => {\n                if (mockWindow.braintree) {\n                    mockWindow.braintree.visaCheckout = visaCheckout;\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads visaCheckout methods with stable version of braintree sdk', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVisaCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_STABLE_VERSION}/js/visa-checkout.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkStableScriptsIntegrity[BraintreeModuleName.VisaCheckout],\n                    },\n                },\n            );\n        });\n\n        it('loads visaCheckout methods with hosted fields fix version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValue(\n                BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n            );\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVisaCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION}/js/visa-checkout.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkFixedHostedFieldsScriptsIntegrity[\n                                BraintreeModuleName.VisaCheckout\n                            ],\n                    },\n                },\n            );\n        });\n\n        it('loads visaCheckout methods with default version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVisaCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_DEFAULT_VERSION}/js/visa-checkout.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkDefaultScriptsIntegrity[BraintreeModuleName.VisaCheckout],\n                    },\n                },\n            );\n        });\n\n        it('loads visaCheckout methods with non-supported version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                thirdPartyBraintreeVersion,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVisaCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${thirdPartyBraintreeVersion}/js/visa-checkout.min.js`,\n                undefined,\n            );\n        });\n\n        it('does not load module if it is already in the window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVisaCheckout();\n            await braintreeScriptLoader.loadVisaCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#loadHostedFields', () => {\n        let hostedFields: BraintreeHostedFieldsCreator;\n\n        beforeEach(() => {\n            hostedFields = getModuleCreatorMock(getHostedFieldsMock());\n            scriptLoader.loadScript = jest.fn(() => {\n                if (mockWindow.braintree) {\n                    mockWindow.braintree.hostedFields = hostedFields;\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads hostedFields methods with stable version of braintree sdk', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadHostedFields();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_STABLE_VERSION}/js/hosted-fields.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkStableScriptsIntegrity[BraintreeModuleName.HostedFields],\n                    },\n                },\n            );\n        });\n\n        it('loads hostedFields methods with hosted fields fix version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValue(\n                BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n            );\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadHostedFields();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION}/js/hosted-fields.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkFixedHostedFieldsScriptsIntegrity[\n                                BraintreeModuleName.HostedFields\n                            ],\n                    },\n                },\n            );\n        });\n\n        it('loads hostedFields methods with default version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadHostedFields();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_DEFAULT_VERSION}/js/hosted-fields.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkDefaultScriptsIntegrity[BraintreeModuleName.HostedFields],\n                    },\n                },\n            );\n        });\n\n        it('loads hostedFields methods with non-supported version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                thirdPartyBraintreeVersion,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadHostedFields();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${thirdPartyBraintreeVersion}/js/hosted-fields.min.js`,\n                undefined,\n            );\n        });\n\n        it('does not load module if it is already in the window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadHostedFields();\n            await braintreeScriptLoader.loadHostedFields();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#loadVenmoCheckout', () => {\n        let venmoCheckout: BraintreeVenmoCheckoutCreator;\n\n        beforeEach(() => {\n            venmoCheckout = getModuleCreatorMock(getVenmoCheckoutMock());\n            scriptLoader.loadScript = jest.fn(() => {\n                if (mockWindow.braintree) {\n                    mockWindow.braintree.venmo = venmoCheckout;\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads venmoCheckout methods with stable version of braintree sdk', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVenmoCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_STABLE_VERSION}/js/venmo.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity: braintreeSdkStableScriptsIntegrity[BraintreeModuleName.Venmo],\n                    },\n                },\n            );\n        });\n\n        it('loads venmoCheckout methods with hosted fields fix version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValue(\n                BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n            );\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVenmoCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION}/js/venmo.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkFixedHostedFieldsScriptsIntegrity[\n                                BraintreeModuleName.Venmo\n                            ],\n                    },\n                },\n            );\n        });\n\n        it('loads venmoCheckout methods with default version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVenmoCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_DEFAULT_VERSION}/js/venmo.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity: braintreeSdkDefaultScriptsIntegrity[BraintreeModuleName.Venmo],\n                    },\n                },\n            );\n        });\n\n        it('loads venmoCheckout methods with non-supported version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                thirdPartyBraintreeVersion,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVenmoCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${thirdPartyBraintreeVersion}/js/venmo.min.js`,\n                undefined,\n            );\n        });\n\n        it('does not load module if it is already in the window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVenmoCheckout();\n            await braintreeScriptLoader.loadVenmoCheckout();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#loadDataCollector()', () => {\n        let dataCollectorMock: BraintreeModuleCreator<BraintreeDataCollector>;\n\n        beforeEach(() => {\n            dataCollectorMock = getModuleCreatorMock(getDataCollectorMock());\n            scriptLoader.loadScript = jest.fn(() => {\n                if (mockWindow.braintree) {\n                    mockWindow.braintree.dataCollector = dataCollectorMock;\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads the data collector library with stable version of braintree sdk', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const dataCollector = await braintreeScriptLoader.loadDataCollector();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_STABLE_VERSION}/js/data-collector.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkStableScriptsIntegrity[BraintreeModuleName.DataCollector],\n                    },\n                },\n            );\n            expect(dataCollector).toBe(dataCollectorMock);\n        });\n\n        it('loads the data collector library with hosted fields fix version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValue(\n                BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n            );\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const dataCollector = await braintreeScriptLoader.loadDataCollector();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION}/js/data-collector.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkFixedHostedFieldsScriptsIntegrity[\n                                BraintreeModuleName.DataCollector\n                            ],\n                    },\n                },\n            );\n            expect(dataCollector).toBe(dataCollectorMock);\n        });\n\n        it('loads the data collector library with default version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                BRAINTREE_SDK_DEFAULT_VERSION,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const dataCollector = await braintreeScriptLoader.loadDataCollector();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${BRAINTREE_SDK_DEFAULT_VERSION}/js/data-collector.min.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            braintreeSdkDefaultScriptsIntegrity[BraintreeModuleName.DataCollector],\n                    },\n                },\n            );\n            expect(dataCollector).toBe(dataCollectorMock);\n        });\n\n        it('loads the data collector library with non-supported version of braintree sdk', async () => {\n            jest.spyOn(braintreeSDKVersionManager, 'getSDKVersion').mockReturnValueOnce(\n                thirdPartyBraintreeVersion,\n            );\n\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n            const dataCollector = await braintreeScriptLoader.loadDataCollector();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//js.braintreegateway.com/web/${thirdPartyBraintreeVersion}/js/data-collector.min.js`,\n                undefined,\n            );\n            expect(dataCollector).toBe(dataCollectorMock);\n        });\n\n        it('loads the data collector library throw error if braintree does not exist in window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                {} as BraintreeHostWindow,\n                braintreeSDKVersionManager,\n            );\n\n            try {\n                await braintreeScriptLoader.loadDataCollector();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('throws an error when load data collector module if client does not exist in window.dataCollector', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                {\n                    braintree: {},\n                } as BraintreeHostWindow,\n                braintreeSDKVersionManager,\n            );\n\n            try {\n                await braintreeScriptLoader.loadDataCollector();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('does not load module if it is already in the window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadDataCollector();\n            await braintreeScriptLoader.loadDataCollector();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#loadVisaCheckoutSdk', () => {\n        let visaCheckoutSdk: VisaCheckoutSDK;\n\n        beforeEach(() => {\n            visaCheckoutSdk = getVisaCheckoutSDKMock();\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.V = visaCheckoutSdk;\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads loadVisaCheckoutSdk methods', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVisaCheckoutSdk();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            'sha384-1f1csvP3ZFxg4dILH1GaY4LHlZ0oX7Rk83rxmLlwbnIi4TM0NYzXoev1VoEiVDS6',\n                    },\n                },\n            );\n        });\n\n        it('loads loadVisaCheckoutSdk in sandbox mode', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVisaCheckoutSdk(true);\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `//sandbox-assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js`,\n                {\n                    async: true,\n                    attributes: {\n                        crossorigin: 'anonymous',\n                        integrity:\n                            'sha384-0eu1s1GtqzXlL9DtLgmwzC5WWlEH/ADRM0n38cVQkvtT+W/gey96rcb1LwuUOPDm',\n                    },\n                },\n            );\n        });\n\n        it('does not load module if it is already in the window', async () => {\n            const braintreeScriptLoader = new BraintreeScriptLoader(\n                scriptLoader,\n                mockWindow,\n                braintreeSDKVersionManager,\n            );\n\n            await braintreeScriptLoader.loadVisaCheckoutSdk();\n            await braintreeScriptLoader.loadVisaCheckoutSdk();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/braintree-script-loader.ts",
    "content": "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 BraintreeSDKVersionManager from './braintree-sdk-version-manager';\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} from './types';\nimport { VisaCheckoutSDK } from './visacheckout';\n\nexport default class BraintreeScriptLoader {\n    constructor(\n        private scriptLoader: ScriptLoader,\n        private braintreeHostWindow: BraintreeHostWindow,\n        private braintreeSDKVersionManager: BraintreeSDKVersionManager,\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"
  },
  {
    "path": "packages/braintree-utils/src/braintree-sdk-scripts-integrity.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/braintree-sdk-verison.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/braintree-sdk-version-manager.spec.ts",
    "content": "import {\n    PaymentIntegrationService,\n    StoreConfig,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\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 BraintreeSDKVersionManager from './braintree-sdk-version-manager';\n\ndescribe('BraintreeSDKVersionManager', () => {\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let storeConfigMock: StoreConfig | undefined;\n    const braintreeWindow: BraintreeHostWindow = window;\n\n    beforeEach(() => {\n        storeConfigMock = getConfig().storeConfig;\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        storeConfigMock.checkoutSettings.features = {\n            'PAYPAL-5636.update_braintree_sdk_version': false,\n            'PAYPAL-5809.braintree_hosted_fields_fix_version': false,\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValue(\n            storeConfigMock,\n        );\n\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n    });\n\n    afterEach(() => {\n        braintreeWindow.braintree = undefined;\n    });\n\n    it('instantiates braintree sdk version manager', () => {\n        expect(braintreeSDKVersionManager).toBeInstanceOf(BraintreeSDKVersionManager);\n    });\n\n    it('get stable braintree sdk version', () => {\n        expect(braintreeSDKVersionManager.getSDKVersion()).toBe(BRAINTREE_SDK_STABLE_VERSION);\n    });\n\n    it('get hosted fields fixed braintree sdk version if store config is not defined', () => {\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValue(\n            storeConfigMock,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValueOnce(\n            undefined,\n        );\n\n        expect(braintreeSDKVersionManager.getSDKVersion()).toBe(\n            BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n        );\n    });\n\n    it('get default braintree sdk version', () => {\n        storeConfigMock = getConfig().storeConfig;\n        storeConfigMock.checkoutSettings.features = {\n            'PAYPAL-5636.update_braintree_sdk_version': true,\n            'PAYPAL-5809.braintree_hosted_fields_fix_version': false,\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValue(\n            storeConfigMock,\n        );\n\n        expect(braintreeSDKVersionManager.getSDKVersion()).toBe(BRAINTREE_SDK_DEFAULT_VERSION);\n    });\n\n    it('get braintree sdk version with fixed hosted fields focus', () => {\n        storeConfigMock = getConfig().storeConfig;\n        storeConfigMock.checkoutSettings.features = {\n            'PAYPAL-5809.braintree_hosted_fields_fix_version': true,\n            'PAYPAL-5636.update_braintree_sdk_version': false,\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValue(\n            storeConfigMock,\n        );\n\n        expect(braintreeSDKVersionManager.getSDKVersion()).toBe(\n            BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n        );\n    });\n\n    it('should get unmanageable version if exist in window.braintree', () => {\n        Object.defineProperty(braintreeWindow, 'braintree', {\n            value: {\n                client: {\n                    VERSION: '1.123.4',\n                },\n            },\n        });\n\n        expect(braintreeSDKVersionManager.getSDKVersion()).toBe('1.123.4');\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/braintree-sdk-version-manager.ts",
    "content": "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';\n\nexport default class BraintreeSDKVersionManager {\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"
  },
  {
    "path": "packages/braintree-utils/src/braintree-sdk.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    NotInitializedError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeScriptLoader from './braintree-script-loader';\nimport BraintreeSdk from './braintree-sdk';\nimport BraintreeSDKVersionManager from './braintree-sdk-version-manager';\nimport {\n    getBraintreeLocalPaymentMock,\n    getClientMock,\n    getDataCollectorMock,\n    getGooglePaymentMock,\n    getModuleCreatorMock,\n    getThreeDSecureMock,\n    getUsBankAccountMock,\n    getVenmoCheckoutMock,\n    getVisaCheckoutMock,\n    getVisaCheckoutSDKMock,\n} from './mocks';\nimport {\n    BraintreeClient,\n    BraintreeDataCollector,\n    BraintreeError,\n    BraintreeErrorCode,\n    BraintreeErrorType,\n    BraintreeGooglePayment,\n    BraintreeGooglePaymentCreator,\n    BraintreeLocalPayment,\n    BraintreeLocalPaymentCreateConfig,\n    BraintreeLocalPaymentCreator,\n    BraintreeModuleCreator,\n    BraintreeThreeDSecure,\n    BraintreeThreeDSecureCreator,\n    BraintreeUsBankAccount,\n    BraintreeVenmoCheckout,\n    BraintreeVisaCheckout,\n    BraintreeVisaCheckoutCreator,\n    BraintreeWindow,\n    VisaCheckoutSDK,\n} from './types';\n\ndescribe('BraintreeSdk', () => {\n    let braintreeSdk: BraintreeSdk;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let braintreeWindowMock: BraintreeWindow;\n    let clientCreatorMock: BraintreeModuleCreator<BraintreeClient>;\n    let clientMock: BraintreeClient;\n    let dataCollectorCreatorMock: BraintreeModuleCreator<BraintreeDataCollector>;\n    let dataCollectorMock: BraintreeDataCollector;\n    let usBankAccountCreatorMock: BraintreeModuleCreator<BraintreeUsBankAccount>;\n    let usBankAccountMock: BraintreeUsBankAccount;\n    let braintreeVisaCheckoutMock: BraintreeVisaCheckout;\n    let braintreeVisaCheckoutCreatorMock: BraintreeVisaCheckoutCreator;\n    let threeDSMock: BraintreeThreeDSecure;\n    let threeDSCreatorMock: BraintreeThreeDSecureCreator;\n    let braintreeGooglePayment: BraintreeGooglePayment;\n    let braintreeGooglePaymentCreator: BraintreeGooglePaymentCreator;\n    let braintreeLocalPayment: BraintreeLocalPayment;\n    let braintreeLocalPaymentCreator: BraintreeLocalPaymentCreator;\n    let visaCheckoutSdkMock: VisaCheckoutSDK;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    const clientTokenMock = 'clientTokenMock';\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeWindowMock = window as BraintreeWindow;\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            createScriptLoader(),\n            braintreeWindowMock,\n            braintreeSDKVersionManager,\n        );\n        clientMock = getClientMock();\n        clientCreatorMock = getModuleCreatorMock(clientMock);\n        dataCollectorMock = getDataCollectorMock();\n        dataCollectorCreatorMock = getModuleCreatorMock(dataCollectorMock);\n        threeDSMock = getThreeDSecureMock();\n        threeDSCreatorMock = getModuleCreatorMock(threeDSMock);\n        usBankAccountMock = getUsBankAccountMock();\n        usBankAccountCreatorMock = getModuleCreatorMock(usBankAccountMock);\n        visaCheckoutSdkMock = getVisaCheckoutSDKMock();\n        braintreeGooglePayment = getGooglePaymentMock();\n        braintreeGooglePaymentCreator = getModuleCreatorMock(braintreeGooglePayment);\n        braintreeLocalPayment = getBraintreeLocalPaymentMock();\n        braintreeLocalPaymentCreator = getModuleCreatorMock(braintreeLocalPayment);\n\n        braintreeSdk = new BraintreeSdk(braintreeScriptLoader);\n\n        jest.spyOn(braintreeScriptLoader, 'loadClient').mockImplementation(() =>\n            Promise.resolve(clientCreatorMock),\n        );\n        jest.spyOn(braintreeScriptLoader, 'loadDataCollector').mockImplementation(() =>\n            Promise.resolve(dataCollectorCreatorMock),\n        );\n        jest.spyOn(braintreeScriptLoader, 'loadUsBankAccount').mockImplementation(() =>\n            Promise.resolve(usBankAccountCreatorMock),\n        );\n        jest.spyOn(braintreeScriptLoader, 'loadVisaCheckout').mockImplementation(() =>\n            Promise.resolve(braintreeVisaCheckoutCreatorMock),\n        );\n        jest.spyOn(braintreeScriptLoader, 'loadVisaCheckoutSdk').mockImplementation(() =>\n            Promise.resolve(visaCheckoutSdkMock),\n        );\n        jest.spyOn(braintreeScriptLoader, 'load3DS').mockImplementation(() =>\n            Promise.resolve(threeDSCreatorMock),\n        );\n        jest.spyOn(braintreeScriptLoader, 'loadGooglePayment').mockImplementation(() =>\n            Promise.resolve(braintreeGooglePaymentCreator),\n        );\n        jest.spyOn(braintreeScriptLoader, 'loadLocalPayment').mockImplementation(() =>\n            Promise.resolve(braintreeLocalPaymentCreator),\n        );\n\n        braintreeVisaCheckoutMock = getVisaCheckoutMock();\n        braintreeVisaCheckoutCreatorMock = getModuleCreatorMock(braintreeVisaCheckoutMock);\n    });\n\n    afterEach(() => {\n        jest.resetAllMocks();\n        jest.restoreAllMocks();\n    });\n\n    describe('#getClientToken()', () => {\n        it('throws an error if client token was not provided', async () => {\n            try {\n                await braintreeSdk.getClient();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('creates braintree client module', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getClient();\n\n            expect(braintreeScriptLoader.loadClient).toHaveBeenCalled();\n            expect(clientCreatorMock.create).toHaveBeenCalledWith({\n                authorization: clientTokenMock,\n            });\n        });\n\n        it('returns the same client module while calling method for second time', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getClient();\n            await braintreeSdk.getClient();\n\n            expect(braintreeScriptLoader.loadClient).toHaveBeenCalledTimes(1);\n            expect(clientCreatorMock.create).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#getDataCollector()', () => {\n        it('throws an error if client token was not provided', async () => {\n            try {\n                await braintreeSdk.getDataCollectorOrThrow();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('creates data collector with provided options', async () => {\n            const riskCorrelationId = 'sessionId';\n\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getDataCollectorOrThrow({ riskCorrelationId });\n\n            expect(braintreeScriptLoader.loadDataCollector).toHaveBeenCalled();\n            expect(dataCollectorCreatorMock.create).toHaveBeenCalledWith({\n                client: clientMock,\n                kount: true,\n                riskCorrelationId,\n            });\n        });\n\n        it('returns the same data collector on second method call', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getDataCollectorOrThrow();\n            await braintreeSdk.getDataCollectorOrThrow();\n\n            expect(braintreeScriptLoader.loadDataCollector).toHaveBeenCalledTimes(1);\n            expect(dataCollectorCreatorMock.create).toHaveBeenCalledTimes(1);\n        });\n\n        it('returns empty data collector when braintree throws Kount error', async () => {\n            jest.spyOn(dataCollectorCreatorMock, 'create').mockImplementation(() => {\n                return Promise.reject({ code: BraintreeErrorCode.KountNotEnabled });\n            });\n\n            braintreeSdk.initialize(clientTokenMock);\n\n            const result = await braintreeSdk.getDataCollectorOrThrow();\n\n            expect(result).toEqual({\n                deviceData: undefined,\n                teardown: expect.any(Function),\n            });\n        });\n\n        it('throws an error when unexpected error occurs', async () => {\n            jest.spyOn(dataCollectorCreatorMock, 'create').mockImplementation(() => {\n                throw new Error();\n            });\n\n            braintreeSdk.initialize(clientTokenMock);\n\n            try {\n                await braintreeSdk.getDataCollectorOrThrow();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(Error);\n            }\n        });\n    });\n\n    describe('#getBraintreeThreeDS()', () => {\n        it('throws an error if client token is not defined', async () => {\n            try {\n                await braintreeSdk.getBraintreeThreeDS();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('creates Braintree 3D Secure module', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getBraintreeThreeDS();\n\n            expect(braintreeScriptLoader.load3DS).toHaveBeenCalled();\n            expect(threeDSCreatorMock.create).toHaveBeenCalledWith({\n                client: clientMock,\n                version: 2,\n            });\n        });\n\n        it('returns the same Braintree 3D Secure module while calling method for second time', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getBraintreeThreeDS();\n            await braintreeSdk.getBraintreeThreeDS();\n\n            expect(braintreeScriptLoader.load3DS).toHaveBeenCalledTimes(1);\n            expect(threeDSCreatorMock.create).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#getBraintreeGooglePayment()', () => {\n        it('throws an error if client token is not defined', async () => {\n            try {\n                await braintreeSdk.getBraintreeGooglePayment();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('creates Braintree Google Payment module', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getBraintreeGooglePayment();\n\n            expect(braintreeScriptLoader.loadGooglePayment).toHaveBeenCalled();\n            expect(braintreeGooglePaymentCreator.create).toHaveBeenCalledWith({\n                client: clientMock,\n            });\n        });\n\n        it('returns the same Braintree Google Payment module while calling method for second time', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getBraintreeGooglePayment();\n            await braintreeSdk.getBraintreeGooglePayment();\n\n            expect(braintreeScriptLoader.loadGooglePayment).toHaveBeenCalledTimes(1);\n            expect(braintreeGooglePaymentCreator.create).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#getBraintreeLocalPayment()', () => {\n        const merchantId = 'merchantAccountId';\n        const getBraintreeLocalPaymentCreatorCreateMock = (\n            callbackError: BraintreeError | undefined = undefined,\n        ) => {\n            return async (\n                _: BraintreeLocalPaymentCreateConfig,\n                callback?: (\n                    error: BraintreeError | undefined,\n                    instance: BraintreeLocalPayment,\n                ) => void,\n            ): Promise<BraintreeLocalPayment> => {\n                if (callback && typeof callback === 'function') {\n                    callback(callbackError, braintreeLocalPayment);\n                }\n\n                return Promise.resolve(braintreeLocalPayment);\n            };\n        };\n\n        it('throws an error if client token is not defined', async () => {\n            try {\n                await braintreeSdk.getBraintreeLocalPayment(merchantId);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('creates Braintree Local Payment module', async () => {\n            jest.spyOn(braintreeLocalPaymentCreator, 'create').mockImplementation(\n                getBraintreeLocalPaymentCreatorCreateMock(),\n            );\n\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getBraintreeLocalPayment(merchantId);\n\n            expect(braintreeScriptLoader.loadLocalPayment).toHaveBeenCalled();\n            expect(braintreeLocalPaymentCreator.create).toHaveBeenCalledWith(\n                {\n                    client: clientMock,\n                    merchantAccountId: merchantId,\n                },\n                expect.any(Function),\n            );\n        });\n\n        it('throws an error if Braintree Local Payment module creation fails', async () => {\n            const braintreeError: BraintreeError = {\n                name: 'test',\n                type: BraintreeErrorType.Network,\n                code: 'NETWORK_ERROR',\n                message: 'Network error',\n            };\n\n            jest.spyOn(braintreeLocalPaymentCreator, 'create').mockImplementation(\n                getBraintreeLocalPaymentCreatorCreateMock(braintreeError),\n            );\n\n            braintreeSdk.initialize(clientTokenMock);\n\n            try {\n                await braintreeSdk.getBraintreeLocalPayment(merchantId);\n            } catch (error: unknown) {\n                expect(error).toEqual(braintreeError);\n            }\n        });\n\n        it('returns the same Braintree Local Payment module while calling method for second time', async () => {\n            jest.spyOn(braintreeLocalPaymentCreator, 'create').mockImplementation(\n                getBraintreeLocalPaymentCreatorCreateMock(),\n            );\n\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getBraintreeLocalPayment(merchantId);\n            await braintreeSdk.getBraintreeLocalPayment(merchantId);\n\n            expect(braintreeScriptLoader.loadLocalPayment).toHaveBeenCalledTimes(1);\n            expect(braintreeLocalPaymentCreator.create).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#getUsBankAccount()', () => {\n        it('throws an error if client token was not provided', async () => {\n            try {\n                await braintreeSdk.getUsBankAccount();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('creates braintree us bank account module', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getUsBankAccount();\n\n            expect(braintreeScriptLoader.loadUsBankAccount).toHaveBeenCalled();\n            expect(usBankAccountCreatorMock.create).toHaveBeenCalledWith({\n                client: clientMock,\n            });\n        });\n\n        it('returns the same us bank account module while calling method for second time', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getUsBankAccount();\n            await braintreeSdk.getUsBankAccount();\n\n            expect(braintreeScriptLoader.loadUsBankAccount).toHaveBeenCalledTimes(1);\n            expect(usBankAccountCreatorMock.create).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#getVenmoCheckout()', () => {\n        let braintreeVenmoCheckoutMock: BraintreeVenmoCheckout;\n        let braintreeVenmoCheckoutCreatorMock: BraintreeModuleCreator<BraintreeVenmoCheckout>;\n\n        beforeEach(() => {\n            braintreeSdk.initialize(clientTokenMock);\n            braintreeVenmoCheckoutMock = getVenmoCheckoutMock();\n            braintreeVenmoCheckoutCreatorMock = getModuleCreatorMock(braintreeVenmoCheckoutMock);\n            braintreeScriptLoader.loadVenmoCheckout = jest\n                .fn()\n                .mockReturnValue(Promise.resolve(braintreeVenmoCheckoutCreatorMock));\n        });\n\n        it('returns a promise that resolves to the BraintreeVenmoCheckout', async () => {\n            const braintreeVenmoCreateMock = {\n                create: jest.fn().mockReturnValue({\n                    isBrowserSupported: jest.fn().mockReturnValue(true),\n                    teardown: expect.any(Function),\n                    tokenize: expect.any(Function),\n                }),\n            };\n\n            jest.spyOn(braintreeScriptLoader, 'loadVenmoCheckout').mockReturnValue(\n                Promise.resolve(braintreeVenmoCreateMock),\n            );\n\n            await braintreeSdk.getVenmoCheckoutOrThrow();\n\n            expect(braintreeVenmoCreateMock.create).toHaveBeenCalled();\n        });\n\n        it('always returns the same instance of the BraintreeVenmoCheckout client', async () => {\n            const braintreeVenmoCreateMock = {\n                create: jest.fn().mockReturnValue({\n                    isBrowserSupported: jest.fn().mockReturnValue(true),\n                    teardown: expect.any(Function),\n                    tokenize: expect.any(Function),\n                }),\n            };\n\n            jest.spyOn(braintreeScriptLoader, 'loadVenmoCheckout').mockReturnValue(\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                braintreeVenmoCreateMock,\n            );\n\n            const braintreeVenmoCheckout1 = await braintreeSdk.getVenmoCheckoutOrThrow();\n            const braintreeVenmoCheckout2 = await braintreeSdk.getVenmoCheckoutOrThrow();\n\n            expect(braintreeVenmoCheckout1).toBe(braintreeVenmoCheckout2);\n            expect(braintreeScriptLoader.loadVenmoCheckout).toHaveBeenCalledTimes(1);\n            expect(braintreeVenmoCreateMock.create).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#getBraintreeVisaCheckout()', () => {\n        it('throws an error if client token was not provided', async () => {\n            try {\n                await braintreeSdk.getBraintreeVisaCheckout();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('get braintree visa checkout', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getBraintreeVisaCheckout();\n\n            expect(braintreeScriptLoader.loadVisaCheckout).toHaveBeenCalled();\n            expect(braintreeScriptLoader.loadClient).toHaveBeenCalled();\n            expect(braintreeVisaCheckoutCreatorMock.create).toHaveBeenCalledWith({\n                client: clientMock,\n            });\n        });\n\n        it('returns the same visa checkout module while calling method for second time', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getBraintreeVisaCheckout();\n            await braintreeSdk.getBraintreeVisaCheckout();\n\n            expect(braintreeScriptLoader.loadVisaCheckout).toHaveBeenCalledTimes(1);\n            expect(braintreeVisaCheckoutCreatorMock.create).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#getVisaCheckoutSdk()', () => {\n        it('get visa checkout sdk', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getVisaCheckoutSdk();\n\n            expect(braintreeScriptLoader.loadVisaCheckoutSdk).toHaveBeenCalled();\n        });\n\n        it('returns the same visa checkout sdk module while calling method for second time', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            await braintreeSdk.getVisaCheckoutSdk();\n            await braintreeSdk.getVisaCheckoutSdk();\n\n            expect(braintreeScriptLoader.loadVisaCheckoutSdk).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('teardowns data collector on deinitialize', async () => {\n            braintreeSdk.initialize(clientTokenMock);\n\n            const dataCollector = await braintreeSdk.getDataCollectorOrThrow();\n\n            await braintreeSdk.deinitialize();\n\n            expect(dataCollector.teardown).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/braintree-sdk.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/braintree.ts",
    "content": "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\n/**\n * A set of options that are required to support 3D Secure authentication flow.\n *\n * If the customer uses a credit card that has 3D Secure enabled, they will be\n * asked to verify their identity when they pay. The verification is done\n * through a web page via an iframe provided by the card issuer.\n */\n// export interface BraintreeThreeDSecureOptions {\n//     /**\n//      * A callback that gets called when the iframe is ready to be added to the\n//      * current page. It is responsible for determining where the iframe should\n//      * be inserted in the DOM.\n//      *\n//      * @param error - Any error raised during the verification process;\n//      * undefined if there is none.\n//      * @param iframe - The iframe element containing the verification web page\n//      * provided by the card issuer.\n//      * @param cancel - A function, when called, will cancel the verification\n//      * process and remove the iframe.\n//      */\n//     addFrame(\n//         error: Error | undefined,\n//         iframe: HTMLIFrameElement,\n//         cancel: () => Promise<BraintreeVerifyPayload> | undefined,\n//     ): void;\n//\n//     /**\n//      * A callback that gets called when the iframe is about to be removed from\n//      * the current page.\n//      */\n//     removeFrame(): void;\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"
  },
  {
    "path": "packages/braintree-utils/src/create-braintree-sdk.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport BraintreeSdk from './braintree-sdk';\nimport createBraintreeSdk from './create-braintree-sdk';\n\ndescribe('createBraintreeSdk', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    it('instantiates braintree sdk', () => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        expect(createBraintreeSdk(paymentIntegrationService)).toBeInstanceOf(BraintreeSdk);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/create-braintree-sdk.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/index.ts",
    "content": "export * from './mocks';\nexport * from './types';\nexport * from './utils';\n\nexport { default as BraintreeIntegrationService } from './braintree-integration-service';\nexport { default as BraintreeMessages } from './braintree-messages';\nexport { default as BraintreeScriptLoader } from './braintree-script-loader';\nexport { default as BraintreeSdk } from './braintree-sdk';\nexport { default as createBraintreeSdk } from './create-braintree-sdk';\nexport { default as BraintreeSDKVersionManager } from './braintree-sdk-version-manager';\nexport { BRAINTREE_SDK_SCRIPTS_INTEGRITY } from './braintree-sdk-scripts-integrity';\nexport {\n    BRAINTREE_SDK_STABLE_VERSION,\n    BRAINTREE_SDK_DEFAULT_VERSION,\n    BRAINTREE_SDK_HOSTED_FIELDS_FIX_VERSION,\n} from './braintree-sdk-verison';\n\nexport { default as mapToLegacyBillingAddress } from './map-to-legacy-billing-address';\nexport { default as mapToLegacyShippingAddress } from './map-to-legacy-shipping-address';\n\nexport {\n    isBraintreeFormFieldsMap,\n    isBraintreeStoredCardFieldsMap,\n} from './utils/is-braintree-form-fields-map';\n"
  },
  {
    "path": "packages/braintree-utils/src/isManageableBraintreeSDKVersion.spec.ts",
    "content": "import {\n    BRAINTREE_SDK_DEFAULT_VERSION,\n    BRAINTREE_SDK_STABLE_VERSION,\n} from './braintree-sdk-verison';\nimport isManageableBraintreeSDKVersion from './isManageableBraintreeSDKVersion';\n\ndescribe('isManageableBraintreeSDKVersion', () => {\n    it('returns true if default braintree version', () => {\n        expect(isManageableBraintreeSDKVersion(BRAINTREE_SDK_DEFAULT_VERSION)).toBe(true);\n    });\n\n    it('returns true if stable braintree version', () => {\n        expect(isManageableBraintreeSDKVersion(BRAINTREE_SDK_STABLE_VERSION)).toBe(true);\n    });\n\n    it('returns false if non-supported braintree version', () => {\n        expect(isManageableBraintreeSDKVersion('3.123.4')).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/isManageableBraintreeSDKVersion.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/load-paypal-sdk-once.spec.ts",
    "content": "import loadPayPalSDKOnce, { resetLoadPayPalSDKOncePromise } from './load-paypal-sdk-once';\nimport { BraintreePaypalCheckout } from './braintree';\nimport { BraintreeError } from './types';\n\ndescribe('loadPayPalSDKOnce', () => {\n    let paypalCheckout: BraintreePaypalCheckout;\n\n    const config = {\n        clientId: '12341234',\n        currency: 'US',\n    };\n\n    beforeEach(() => {\n        paypalCheckout = {\n            loadPayPalSDK: jest.fn(),\n            createPayment: jest.fn(),\n            teardown: jest.fn(),\n            tokenizePayment: jest.fn(),\n        };\n\n        jest.clearAllMocks();\n        resetLoadPayPalSDKOncePromise();\n    });\n\n    it('loads PayPal SDK once', async () => {\n        jest.spyOn(paypalCheckout, 'loadPayPalSDK').mockImplementation((_config, callback) =>\n            callback(null),\n        );\n\n        const result = await loadPayPalSDKOnce(paypalCheckout, config);\n\n        expect(paypalCheckout.loadPayPalSDK).toHaveBeenCalledTimes(1);\n        expect(result).toBe(paypalCheckout);\n    });\n\n    it('does not call loadPayPalSDKOnce twice', async () => {\n        jest.spyOn(paypalCheckout, 'loadPayPalSDK').mockImplementation((_config, callback) =>\n            callback(null),\n        );\n\n        const result1 = await loadPayPalSDKOnce(paypalCheckout, config);\n        const result2 = await loadPayPalSDKOnce(paypalCheckout, config);\n\n        expect(paypalCheckout.loadPayPalSDK).toHaveBeenCalledTimes(1);\n        expect(result1).toBe(paypalCheckout);\n        expect(result2).toBe(paypalCheckout);\n    });\n\n    it('returns the same promise when called multiple times before resolve', async () => {\n        jest.spyOn(paypalCheckout, 'loadPayPalSDK').mockImplementation((_config, callback) => {\n            setTimeout(() => {\n                callback(null);\n            }, 10);\n        });\n\n        const promise1 = loadPayPalSDKOnce(paypalCheckout, config);\n        const promise2 = loadPayPalSDKOnce(paypalCheckout, config);\n\n        expect(paypalCheckout.loadPayPalSDK).toHaveBeenCalledTimes(1);\n        expect(promise1).toBe(promise2);\n\n        const result = await promise1;\n        expect(result).toBe(paypalCheckout);\n    });\n\n    it('rejects if loadPayPalSDKOnce returns an error', async () => {\n        const error = new Error('load failed');\n\n        jest.spyOn(paypalCheckout, 'loadPayPalSDK').mockImplementation((_config, callback) =>\n            callback(error as BraintreeError),\n        );\n\n        await expect(loadPayPalSDKOnce(paypalCheckout, config)).rejects.toThrow('load failed');\n\n        expect(paypalCheckout.loadPayPalSDK).toHaveBeenCalledTimes(1);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/load-paypal-sdk-once.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/map-to-legacy-billing-address.spec.ts",
    "content": "import mapToLegacyBillingAddress from './map-to-legacy-billing-address';\n\ndescribe('mapToLegacyBillingAddress()', () => {\n    const detailsMock = {\n        username: 'johndoe',\n        email: 'test@test.com',\n        payerId: '1122abc',\n        firstName: 'John',\n        lastName: 'Doe',\n        countryCode: 'US',\n        phone: '55555555555',\n        billingAddress: {\n            line1: 'billing_line1',\n            line2: 'billing_line2',\n            city: 'billing_city',\n            state: 'billing_state',\n            postalCode: '03444',\n            countryCode: 'US',\n        },\n        shippingAddress: {\n            recipientName: 'John Doe',\n            line1: 'shipping_line1',\n            line2: 'shipping_line2',\n            city: 'shipping_city',\n            state: 'shipping_state',\n            postalCode: '03444',\n            countryCode: 'US',\n        },\n    };\n\n    it('maps details to legacy billing address using billing details as main address', () => {\n        const props = detailsMock;\n\n        const expects = {\n            email: detailsMock.email,\n            first_name: detailsMock.firstName,\n            last_name: detailsMock.lastName,\n            phone_number: detailsMock.phone,\n            address_line_1: detailsMock.billingAddress.line1,\n            address_line_2: detailsMock.billingAddress.line2,\n            city: detailsMock.billingAddress.city,\n            state: detailsMock.billingAddress.state,\n            country_code: detailsMock.billingAddress.countryCode,\n            postal_code: detailsMock.billingAddress.postalCode,\n        };\n\n        expect(mapToLegacyBillingAddress(props)).toEqual(expects);\n    });\n\n    it('maps details to legacy billing address using shipping details as main address if billing details is not provided', () => {\n        const props = {\n            ...detailsMock,\n            billingAddress: undefined,\n        };\n\n        const expects = {\n            email: detailsMock.email,\n            first_name: detailsMock.firstName,\n            last_name: detailsMock.lastName,\n            phone_number: detailsMock.phone,\n            address_line_1: detailsMock.shippingAddress.line1,\n            address_line_2: detailsMock.shippingAddress.line2,\n            city: detailsMock.shippingAddress.city,\n            state: detailsMock.shippingAddress.state,\n            country_code: detailsMock.shippingAddress.countryCode,\n            postal_code: detailsMock.shippingAddress.postalCode,\n        };\n\n        expect(mapToLegacyBillingAddress(props)).toEqual(expects);\n    });\n\n    it('should return only personal info when no address is available', () => {\n        const details = {\n            email: 'noaddress@example.com',\n            firstName: 'No',\n            lastName: 'Address',\n            phone: '5555555555',\n        };\n\n        const result = mapToLegacyBillingAddress(details);\n\n        expect(result).toEqual({\n            email: 'noaddress@example.com',\n            first_name: 'No',\n            last_name: 'Address',\n            phone_number: '5555555555',\n            address_line_1: undefined,\n            address_line_2: undefined,\n            city: undefined,\n            state: undefined,\n            country_code: undefined,\n            postal_code: undefined,\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/map-to-legacy-billing-address.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/map-to-legacy-shipping-address.spec.ts",
    "content": "import mapToLegacyShippingAddress from './map-to-legacy-shipping-address';\n\ndescribe('mapToLegacyShippingAddress()', () => {\n    const detailsMock = {\n        email: 'test@test.com',\n        phone: '55555555555',\n        shippingAddress: {\n            recipientName: 'John Doe',\n            line1: 'shipping_line1',\n            line2: 'shipping_line2',\n            city: 'shipping_city',\n            state: 'shipping_state',\n            postalCode: '03444',\n            countryCode: 'US',\n        },\n    };\n\n    it('maps details to legacy shipping address', () => {\n        const props = {\n            ...detailsMock,\n            billingAddress: undefined,\n        };\n\n        const expects = {\n            email: detailsMock.email,\n            first_name: 'John',\n            last_name: 'Doe',\n            phone_number: detailsMock.phone,\n            address_line_1: detailsMock.shippingAddress.line1,\n            address_line_2: detailsMock.shippingAddress.line2,\n            city: detailsMock.shippingAddress.city,\n            state: detailsMock.shippingAddress.state,\n            country_code: detailsMock.shippingAddress.countryCode,\n            postal_code: detailsMock.shippingAddress.postalCode,\n        };\n\n        expect(mapToLegacyShippingAddress(props)).toEqual(expects);\n    });\n\n    it('should return only personal info when no shipping address is available', () => {\n        const details = {\n            email: 'noaddress@example.com',\n            phone: '5555555555',\n        };\n\n        const result = mapToLegacyShippingAddress(details);\n\n        expect(result).toEqual({\n            email: 'noaddress@example.com',\n            first_name: '',\n            last_name: '',\n            phone_number: '5555555555',\n            address_line_1: undefined,\n            address_line_2: undefined,\n            city: undefined,\n            state: undefined,\n            country_code: undefined,\n            postal_code: undefined,\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/map-to-legacy-shipping-address.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/mocks/braintree-modules.mock.ts",
    "content": "import {\n    BraintreeClient,\n    BraintreeDataCollector,\n    BraintreeFastlane,\n    BraintreeGooglePayment,\n    BraintreeModule,\n    BraintreeModuleCreator,\n    BraintreePaypal,\n    BraintreeThreeDSecure,\n    BraintreeUsBankAccount,\n} from '../types';\n\nimport { getBraintreePaymentDataRequest } from './braintree.mock';\n\n/**\n *\n * Braintree Module Creator Generic Mock\n *\n */\nexport function getModuleCreatorMock<T>(\n    // TODO: this option should not be optional (check braintreeLocalMethods implementation to fix that)\n    module?:\n        | BraintreeModule\n        | BraintreeClient\n        | BraintreePaypal\n        | BraintreeFastlane\n        | BraintreeUsBankAccount\n        | BraintreeThreeDSecure\n        | BraintreeGooglePayment,\n): BraintreeModuleCreator<T> {\n    return {\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        create: jest.fn(() => Promise.resolve(module)),\n    };\n}\n\n/**\n *\n * Braintree Client\n *\n */\nexport function getClientMock(): BraintreeClient {\n    return {\n        request: jest.fn(),\n    };\n}\n\n/**\n *\n * Braintree Data Collector\n *\n */\nexport function getDataCollectorMock(): BraintreeDataCollector {\n    return {\n        deviceData: getDeviceDataMock(),\n        teardown: jest.fn(() => Promise.resolve()),\n    };\n}\n\n// TODO: it is not necessary to have a function for static return value, so we can update it with constant variable in the future\nexport function getDeviceDataMock(): string {\n    return '{\"device_session_id\": \"my_device_session_id\", \"fraud_merchant_id\": \"we_dont_use_this_field\"}';\n}\n\n/**\n *\n * Braintree 3D Secure\n *\n */\nexport function getThreeDSecureMock(): BraintreeThreeDSecure {\n    return {\n        verifyCard: jest.fn(),\n        cancelVerifyCard: jest.fn(),\n        teardown: jest.fn(() => Promise.resolve()),\n        on: jest.fn(),\n    };\n}\n\n/**\n *\n * Braintree Google Payment\n *\n */\nexport function getGooglePaymentMock(): BraintreeGooglePayment {\n    return {\n        createPaymentDataRequest: jest.fn(() => getBraintreePaymentDataRequest()),\n        teardown: jest.fn(),\n    };\n}\n\n/**\n *\n * Braintree US Bank Account\n *\n */\nexport function getUsBankAccountMock(): BraintreeUsBankAccount {\n    return {\n        tokenize: jest.fn(() => Promise.resolve({ nonce: 'token', details: {} })),\n    };\n}\n"
  },
  {
    "path": "packages/braintree-utils/src/mocks/braintree.mock.ts",
    "content": "import {\n    OrderPaymentRequestBody,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport BillingAddress, {\n    BillingAddressState,\n    BraintreeFastlane,\n    BraintreeFastlaneAuthenticationState,\n    BraintreeFastlaneProfileData,\n    BraintreeGooglePaymentDataRequest,\n    BraintreeHostedFields,\n    BraintreeLocalPayment,\n    BraintreeLocalPaymentConfig,\n    BraintreeLocalPaymentsPayload,\n    BraintreeLPMStartPaymentError,\n    BraintreePaypal,\n    BraintreePaypalCheckout,\n    BraintreePaypalCheckoutCreator,\n    BraintreeShippingAddressOverride,\n    BraintreeTokenizePayload,\n    BraintreeVenmoCheckout,\n    BraintreeVisaCheckout,\n    TotalPriceStatusType,\n    VisaCheckoutInitOptions,\n} from '../types';\n\nimport { getVisaCheckoutTokenizedPayload } from './visacheckout.mock';\nimport { getOrderRequestBody } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nexport function getBraintree(): PaymentMethod {\n    return {\n        id: 'braintree',\n        clientToken: 'clientToken',\n        logoUrl:\n            'https://cdn.bcapp.dev/rHEAD/modules/checkout/braintree/images/paypal_powered_braintree_horizontal.png',\n        method: 'credit-card',\n        supportedCards: ['VISA', 'MC', 'AMEX', 'DISCOVER', 'JCB', 'DINERS'],\n        config: {\n            displayName: 'Credit Card',\n            cardCode: true,\n            enablePaypal: true,\n            merchantId: '',\n            testMode: true,\n            isVisaCheckoutEnabled: false,\n        },\n        initializationData: {\n            isAcceleratedCheckoutEnabled: false,\n            paymentButtonStyles: {\n                checkoutTopButtonStyles: {\n                    color: 'blue',\n                    label: 'checkout',\n                },\n            },\n        },\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getBraintreeFastlaneProfileDataMock(): BraintreeFastlaneProfileData {\n    return {\n        fastlaneCustomerAuthAssertionToken: 'some_token',\n        fastlaneCustomerId: 'asdasd',\n        shippingAddress: {\n            id: '123123',\n            company: undefined,\n            extendedAddress: undefined,\n            firstName: 'John',\n            lastName: 'Doe',\n            streetAddress: 'Hello World Address',\n            locality: 'Bellingham',\n            region: 'WA',\n            postalCode: '98225',\n            phoneNumber: '14085551234',\n            countryCodeNumeric: 0,\n            countryCodeAlpha2: 'US',\n            countryCodeAlpha3: '',\n        },\n        card: {\n            id: 'pp-vaulted-instrument-id',\n            paymentSource: {\n                card: {\n                    brand: 'VISA',\n                    expiry: '02/2037',\n                    lastDigits: '1111',\n                    billingAddress: {\n                        id: '321',\n                        company: undefined,\n                        extendedAddress: undefined,\n                        firstName: undefined,\n                        lastName: undefined,\n                        streetAddress: 'Hello World Address',\n                        locality: 'Bellingham',\n                        region: 'WA',\n                        postalCode: '98225',\n                        countryCodeNumeric: 0,\n                        countryCodeAlpha2: 'US',\n                        countryCodeAlpha3: '',\n                    },\n                },\n            },\n        },\n        name: {\n            firstName: 'John',\n            lastName: 'Doe',\n        },\n    };\n}\n\nexport function getVisaCheckoutMock(): BraintreeVisaCheckout {\n    return {\n        createInitOptions: jest.fn((options: VisaCheckoutInitOptions) => options),\n        tokenize: jest.fn(() => Promise.resolve(getVisaCheckoutTokenizedPayload())),\n        teardown: jest.fn(() => Promise.resolve()),\n    };\n}\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\nconst mockHtmlElement = {\n    tagName: 'DIV',\n} as unknown as HTMLElement;\n\nconst hostedFieldMock = {\n    container: mockHtmlElement,\n    isFocused: true,\n    isEmpty: true,\n    isPotentiallyValid: true,\n    isValid: true,\n};\n\nexport function getBraintreePaymentData(): OrderPaymentRequestBody {\n    return {\n        ...getOrderRequestBody().payment,\n        methodId: 'braintree',\n    };\n}\n\nexport function getBillingAddress(): BillingAddress {\n    return {\n        id: '55c96cda6f04c',\n        firstName: 'Test',\n        lastName: 'Tester',\n        email: 'test@bigcommerce.com',\n        company: 'Bigcommerce',\n        address1: '12345 Testing Way',\n        address2: '',\n        city: 'Some City',\n        stateOrProvince: 'California',\n        stateOrProvinceCode: 'CA',\n        country: 'United States',\n        countryCode: 'US',\n        postalCode: '95555',\n        shouldSaveAddress: true,\n        phone: '555-555-5555',\n        customFields: [],\n    };\n}\n\nexport function getBillingAddressState(): BillingAddressState {\n    return {\n        data: getBillingAddress(),\n        errors: {},\n        statuses: {},\n    };\n}\n\nexport function getHostedFieldsMock(): BraintreeHostedFields {\n    return {\n        getState: () => ({\n            cards: [],\n            emittedBy: 'bank',\n            fields: {\n                number: hostedFieldMock,\n                expirationDate: hostedFieldMock,\n                expirationMonth: hostedFieldMock,\n                expirationYear: hostedFieldMock,\n                cvv: hostedFieldMock,\n                postalCode: hostedFieldMock,\n            },\n        }),\n        teardown: jest.fn(() => Promise.resolve()),\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        tokenize: jest.fn(() => Promise.resolve(getTokenizePayload())),\n        on: jest.fn(),\n    };\n}\n\nexport function getVenmoCheckoutMock(): BraintreeVenmoCheckout {\n    return {\n        teardown: jest.fn(() => Promise.resolve()),\n        // TODO: remove this rule and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/no-misused-promises\n        tokenize: jest.fn(() => Promise.resolve()),\n        isBrowserSupported: jest.fn(),\n    };\n}\n\nexport function getFastlaneMock(): BraintreeFastlane {\n    return {\n        profile: {\n            showCardSelector: jest.fn(),\n            showShippingAddressSelector: jest.fn(),\n        },\n        identity: {\n            lookupCustomerByEmail: () => Promise.resolve({ customerContextId: 'customerId' }),\n            triggerAuthenticationFlow: () =>\n                Promise.resolve({\n                    authenticationState: BraintreeFastlaneAuthenticationState.SUCCEEDED,\n                    profileData: getBraintreeFastlaneProfileDataMock(),\n                }),\n        },\n        FastlaneCardComponent: jest.fn(),\n        events: {\n            apmSelected: jest.fn(),\n            emailSubmitted: jest.fn(),\n            orderPlaced: jest.fn(),\n        },\n    };\n}\n\nexport function getBraintreeFastlaneAuthenticationResultMock() {\n    return {\n        authenticationState: BraintreeFastlaneAuthenticationState.SUCCEEDED,\n        profileData: {\n            name: {\n                fullName: 'John Doe',\n                firstName: 'John',\n                lastName: 'Doe',\n            },\n            shippingAddress: {\n                address: {\n                    company: 'BigCommerce',\n                    addressLine1: 'addressLine1',\n                    addressLine2: 'addressLine2',\n                    adminArea1: 'addressState',\n                    adminArea2: 'addressCity',\n                    postalCode: '03004',\n                    countryCode: 'US',\n                },\n                name: {\n                    fullName: 'John Doe',\n                    firstName: 'John',\n                    lastName: 'Doe',\n                },\n                phoneNumber: {\n                    nationalNumber: '5551113344',\n                    countryCode: '1',\n                },\n            },\n            card: {\n                id: 'nonce/token',\n                paymentSource: {\n                    card: {\n                        brand: 'Visa',\n                        expiry: '2030-12',\n                        lastDigits: '1111',\n                        name: 'John Doe',\n                        billingAddress: {\n                            firstName: 'John',\n                            lastName: 'Doe',\n                            company: 'BigCommerce',\n                            addressLine1: 'addressLine1',\n                            addressLine2: 'addressLine2',\n                            adminArea1: 'addressState',\n                            adminArea2: 'addressCity',\n                            postalCode: '03004',\n                            countryCode: 'US',\n                            phone: {\n                                nationalNumber: '5551113344',\n                                countryCode: '1',\n                            },\n                        },\n                    },\n                },\n            },\n        },\n    };\n}\n\nexport function getBraintreeLocalPaymentMock(\n    orderId = '111',\n    startCallback: () => Promise<void> = () => Promise.resolve(),\n    startPaymentError: BraintreeLPMStartPaymentError | undefined = undefined,\n): BraintreeLocalPayment {\n    return {\n        // eslint-disable-next-line @typescript-eslint/no-misused-promises\n        startPayment: jest.fn(\n            async (\n                config: BraintreeLocalPaymentConfig,\n                callback: (\n                    startPaymentError: BraintreeLPMStartPaymentError | undefined,\n                    payload: BraintreeLocalPaymentsPayload,\n                ) => Promise<void>,\n            ) => {\n                await config.onPaymentStart({ paymentId: orderId }, startCallback);\n                await callback(startPaymentError, { nonce: 'braintree lpm nonce' });\n            },\n        ),\n        teardown: () => Promise.resolve(),\n    };\n}\n\nexport function getPaypalCheckoutMock(): BraintreePaypalCheckout {\n    return {\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        loadPayPalSDK: jest.fn((_config, callback: () => void) => callback()),\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        createPayment: jest.fn(() => Promise.resolve()),\n        teardown: jest.fn(),\n        tokenizePayment: jest.fn(() => Promise.resolve(getTokenizePayload())),\n    };\n}\n\nexport function getPayPalCheckoutCreatorMock(\n    braintreePaypalCheckoutMock: BraintreePaypalCheckout,\n    shouldThrowError: boolean,\n): BraintreePaypalCheckoutCreator {\n    return {\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        create: shouldThrowError\n            ? jest.fn(\n                  (\n                      _config,\n                      callback: (\n                          err: Error,\n                          braintreePaypalCheckout: BraintreePaypalCheckout | undefined,\n                      ) => void,\n                  ) => callback(new Error('test'), undefined),\n              )\n            : jest.fn(\n                  (\n                      _config,\n                      callback: (\n                          _err: Error | undefined,\n                          braintreePaypalCheckout: BraintreePaypalCheckout,\n                      ) => void,\n                  ) => callback(undefined, braintreePaypalCheckoutMock),\n              ),\n    };\n}\n\nexport function getTokenizePayload(): BraintreeTokenizePayload {\n    return {\n        nonce: 'NONCE',\n        type: 'PaypalAccount',\n        details: {\n            email: 'foo@bar.com',\n            payerId: 'PAYER_ID',\n            firstName: 'Foo',\n            lastName: 'Bar',\n            billingAddress: {\n                line1: '56789 Testing Way',\n                line2: 'Level 2',\n                city: 'Some Other City',\n                state: 'Arizona',\n                countryCode: 'US',\n                postalCode: '96666',\n            },\n            shippingAddress: {\n                recipientName: 'Hello World',\n                line1: '12345 Testing Way',\n                line2: 'Level 1',\n                city: 'Some City',\n                state: 'California',\n                countryCode: 'US',\n                postalCode: '95555',\n            },\n        },\n    };\n}\n\nexport function getBraintreePaypalMock(): BraintreePaypal {\n    return {\n        closeWindow: jest.fn(),\n        focusWindow: jest.fn(),\n        tokenize: jest.fn(() => Promise.resolve(getBraintreePaypalTokenizePayloadMock())),\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        Buttons: jest.fn(() => ({\n            render: jest.fn(),\n            isEligible: jest.fn(() => true),\n        })),\n    };\n}\n\nexport function getBraintreePaypalTokenizePayloadMock(): BraintreeTokenizePayload {\n    return {\n        nonce: 'nonce',\n        type: 'PaypalAccount',\n        details: {\n            email: 'test@test.com',\n        },\n    };\n}\n\nexport function getBraintreePaypal(): PaymentMethod {\n    return {\n        id: 'braintreepaypal',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        config: {\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'foo',\n        initializationData: {\n            isBrainteeVenmoEnabled: false,\n            enableCheckoutPaywallBanner: false,\n        },\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getBraintreePaymentDataRequest(): BraintreeGooglePaymentDataRequest {\n    return {\n        allowedPaymentMethods: [],\n        apiVersion: 1,\n        cardRequirements: {\n            allowedCardNetworks: [],\n            billingAddressFormat: '',\n            billingAddressRequired: true,\n        },\n        environment: '',\n        i: {\n            googleTransactionId: '',\n            startTimeMs: 1,\n        },\n        merchantInfo: {\n            authJwt: '',\n            merchantId: '',\n            merchantName: '',\n        },\n        paymentMethodTokenizationParameters: {\n            parameters: {\n                'braintree:apiVersion': '',\n                'braintree:authorizationFingerprint': '',\n                'braintree:merchantId': '',\n                'braintree:metadata': '',\n                'braintree:sdkVersion': '',\n                gateway: '',\n            },\n            tokenizationType: '',\n        },\n        shippingAddressRequired: true,\n        phoneNumberRequired: true,\n        transactionInfo: {\n            currencyCode: '',\n            totalPrice: '',\n            totalPriceStatus: TotalPriceStatusType.FINAL,\n        },\n    };\n}\n\nexport function getBraintreeAddress(): BraintreeShippingAddressOverride {\n    return {\n        line1: '12345 Testing Way',\n        line2: '',\n        city: 'Some City',\n        state: 'CA',\n        countryCode: 'US',\n        postalCode: '95555',\n        phone: '555-555-5555',\n        recipientName: 'Test Tester',\n    };\n}\n"
  },
  {
    "path": "packages/braintree-utils/src/mocks/index.ts",
    "content": "export * from './braintree.mock';\nexport * from './braintree-modules.mock';\nexport * from './paypal.mock';\nexport * from './visacheckout.mock';\n"
  },
  {
    "path": "packages/braintree-utils/src/mocks/paypal.mock.ts",
    "content": "import { PaypalSDK } from '../paypal';\n\nexport function getPaypalMock(): PaypalSDK {\n    return {\n        FUNDING: {\n            CARD: 'card',\n            CREDIT: 'credit',\n            PAYPAL: 'paypal',\n            PAYLATER: 'paylater',\n        },\n        Button: {\n            render: jest.fn(),\n        },\n        checkout: {\n            initXO: jest.fn(),\n            startFlow: jest.fn(),\n            closeFlow: jest.fn(),\n            setup: jest.fn(),\n        },\n        Buttons: jest.fn(),\n        Messages: jest.fn().mockReturnValue({\n            render: jest.fn(),\n        }),\n    };\n}\n"
  },
  {
    "path": "packages/braintree-utils/src/mocks/visacheckout.mock.ts",
    "content": "import { SDK_VERSION_HEADERS } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    VisaCheckoutAddress,\n    VisaCheckoutPaymentSuccessPayload,\n    VisaCheckoutSDK,\n    VisaCheckoutTokenizedPayload,\n    VisaCheckoutUserData,\n} from '../visacheckout';\n\nexport function getVisaCheckoutSDKMock(): VisaCheckoutSDK {\n    return {\n        init: jest.fn(),\n        on: jest.fn(),\n    };\n}\n\nexport function getVisaCheckoutTokenizedPayload(): VisaCheckoutTokenizedPayload {\n    return {\n        nonce: 'my-nonce',\n        details: {\n            cardType: 'Visa',\n            lastFour: '4111',\n            lastTwo: '11',\n        },\n        description: 'this is a description',\n        type: 'type1',\n        billingAddress: getVisaCheckoutAddress(),\n        shippingAddress: getVisaCheckoutAddress(),\n        userData: getVisaCheckoutUserData(),\n        binData: {\n            commercial: 'bin_data_commercial',\n            countryOfIssuance: 'bin_data_country_of_issuance',\n            debit: 'bin_data_debit',\n            durbinRegulated: 'bin_data_durbin_regulated',\n            healthcare: 'bin_data_healthcare',\n            issuingBank: 'bin_data_issuing_bank',\n            payroll: 'bin_data_payroll',\n            prepaid: 'bin_data_prepaid',\n            productId: 'bin_data_product_id',\n        },\n    };\n}\n\nexport function getPaymentSuccessPayload(): VisaCheckoutPaymentSuccessPayload {\n    return {\n        callid: 'caller_id',\n        encKey: '25848dbb9c6772e1c6b24271a27e55a558c91507',\n        encPaymentData:\n            'a397bb59616f5de338ed6759657dac07fff4737a6d3dbdca933d6e5fc9d82edbc310a47b91118cdf',\n        partialShippingAddress: {\n            countryCode: 'ES',\n            postalCode: '2007',\n        },\n        paymentMethodType: 'TOKEN',\n        responseStatus: {\n            code: 200,\n            message: 'All good',\n            status: 200,\n        },\n    };\n}\n\nexport function getVisaCheckoutAddress(): VisaCheckoutAddress {\n    return {\n        countryCode: 'ES',\n        firstName: 'John',\n        lastName: 'Doe',\n        locality: 'Sydney',\n        postalCode: '2008',\n        region: 'NSW',\n        streetAddress: '51 Main St.',\n        extendedAddress: 'Ultimo',\n        phoneNumber: '04877789875',\n    };\n}\n\nexport function getVisaCheckoutUserData(): VisaCheckoutUserData {\n    return {\n        userEmail: 'test@example.com',\n        userFirstName: 'Johnathan',\n        userLastName: 'Doyle',\n        userFullName: 'Johnathan M. Doyle',\n        userName: 'jdoyle',\n    };\n}\n\nexport function getVisaCheckoutRequestBody() {\n    return {\n        body: {\n            action: 'set_external_checkout',\n            billing_address: {\n                address_line_1: '51 Main St.',\n                address_line_2: 'Ultimo',\n                city: 'Sydney',\n                country_code: 'ES',\n                email: 'test@example.com',\n                first_name: 'John',\n                last_name: 'Doe',\n                phone_number: '04877789875',\n                postal_code: '2008',\n                state: 'NSW',\n            },\n            card_information: {\n                number: '11',\n                type: 'Visa',\n            },\n            device_data: 'my_device_session_id',\n            nonce: 'my-nonce',\n            payment_type: 'type1',\n            provider: 'braintreevisacheckout',\n            shipping_address: {\n                address_line_1: '51 Main St.',\n                address_line_2: 'Ultimo',\n                city: 'Sydney',\n                country_code: 'ES',\n                email: 'test@example.com',\n                first_name: 'John',\n                last_name: 'Doe',\n                phone_number: '04877789875',\n                postal_code: '2008',\n                state: 'NSW',\n            },\n        },\n        headers: {\n            Accept: 'text/html',\n            'Content-Type': 'application/x-www-form-urlencoded',\n            ...SDK_VERSION_HEADERS,\n        },\n    };\n}\n"
  },
  {
    "path": "packages/braintree-utils/src/paypal.ts",
    "content": "// 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?(): 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"
  },
  {
    "path": "packages/braintree-utils/src/types.ts",
    "content": "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    addFrame?(\n        error: Error | undefined,\n        iframe: HTMLIFrameElement,\n        cancel: () => Promise<BraintreeVerifyPayload> | undefined,\n    ): void;\n    removeFrame?(): void;\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"
  },
  {
    "path": "packages/braintree-utils/src/utils/get-fastlane-styles.spec.ts",
    "content": "import getFastlaneStyles from './get-fastlane-styles';\n\ndescribe('#getValidBraintreeFastlaneStyles()', () => {\n    it('returns styles options with provided modifications', () => {\n        const styles = {\n            fastlaneRootSettingsBackgroundColor: 'red',\n            fastlaneInputSettingsBorderColor: 'green',\n            fastlaneTextBodySettingsFontSize: '12px',\n            fastlaneTextBodySettingsColor: 'blue',\n        };\n\n        const uiStyles = {\n            root: {\n                backgroundColorPrimary: 'green',\n            },\n            text: {\n                caption: {\n                    fontSize: '15px',\n                },\n            },\n        };\n\n        expect(getFastlaneStyles(styles, uiStyles)).toEqual({\n            root: {\n                backgroundColorPrimary: 'red',\n            },\n            input: {\n                borderColor: 'green',\n            },\n            text: {\n                body: {\n                    fontSize: '12px',\n                    color: 'blue',\n                },\n                caption: {\n                    fontSize: '15px',\n                },\n            },\n        });\n    });\n\n    it('returns toggle styles if provided', () => {\n        const styles = {\n            fastlaneToggleSettingsColorPrimary: 'red',\n            fastlaneToggleSettingsColorSecondary: 'green',\n        };\n\n        expect(getFastlaneStyles(styles, undefined)).toEqual({\n            toggle: {\n                colorPrimary: 'red',\n                colorSecondary: 'green',\n            },\n        });\n    });\n\n    it('returns branding styles if provided', () => {\n        const styles = {\n            fastlaneBrandingSettings: 'red',\n        };\n\n        expect(getFastlaneStyles(styles, undefined)).toEqual({\n            branding: 'red',\n        });\n    });\n\n    it('returns undefined when both styleSettings and uiStyles are undefined', () => {\n        expect(getFastlaneStyles()).toBeUndefined();\n    });\n\n    it('returns uiStyles when styleSettings is undefined', () => {\n        const uiStyles = {\n            root: { backgroundColorPrimary: 'red' },\n        };\n\n        expect(getFastlaneStyles(undefined, uiStyles)).toEqual(uiStyles);\n    });\n\n    it('returns styleSettings when uiStyles is undefined', () => {\n        const styleSettings = {\n            fastlaneRootSettingsBackgroundColor: 'blue',\n        };\n\n        expect(getFastlaneStyles(styleSettings)).toEqual({\n            root: { backgroundColorPrimary: 'blue' },\n        });\n    });\n\n    it('merges styleSettings and uiStyles correctly', () => {\n        const styleSettings = {\n            fastlaneRootSettingsBackgroundColor: 'blue',\n        };\n        const uiStyles = {\n            root: {\n                backgroundColorPrimary: 'red',\n                errorColor: 'black',\n            },\n            input: {\n                borderColor: 'green',\n                borderRadius: '1',\n                focusBorderColor: 'green',\n                backgroundColor: 'red',\n                borderWidth: '1',\n                textColorBase: 'green',\n            },\n            toggle: {\n                colorPrimary: 'green',\n                colorSecondary: 'green',\n            },\n            text: {\n                body: {\n                    color: 'blue',\n                    fontSize: '12px',\n                },\n                caption: {\n                    fontSize: '12px',\n                    color: 'blue',\n                },\n            },\n        };\n\n        expect(getFastlaneStyles(styleSettings, uiStyles)).toEqual({\n            root: {\n                backgroundColorPrimary: 'blue',\n                errorColor: 'black',\n            },\n            input: {\n                borderColor: 'green',\n                borderRadius: '1',\n                focusBorderColor: 'green',\n                backgroundColor: 'red',\n                borderWidth: '1',\n                textColorBase: 'green',\n            },\n            toggle: {\n                colorPrimary: 'green',\n                colorSecondary: 'green',\n            },\n            text: {\n                body: {\n                    color: 'blue',\n                    fontSize: '12px',\n                },\n                caption: {\n                    fontSize: '12px',\n                    color: 'blue',\n                },\n            },\n        });\n    });\n\n    it('merges styleSettings and uiStyles correctly when some objects is empty', () => {\n        const styleSettings = {\n            fastlaneRootSettingsBackgroundColor: 'blue',\n        };\n        const uiStyles = {\n            root: {\n                backgroundColorPrimary: 'red',\n                errorColor: 'black',\n            },\n            input: {\n                borderColor: 'green',\n                borderRadius: '1',\n                focusBorderColor: 'green',\n                backgroundColor: 'red',\n                borderWidth: '1',\n                textColorBase: 'green',\n            },\n            toggle: {\n                colorPrimary: 'green',\n                colorSecondary: 'green',\n            },\n            text: {\n                body: undefined,\n                caption: undefined,\n            },\n        };\n\n        expect(getFastlaneStyles(styleSettings, uiStyles)).toEqual({\n            root: {\n                backgroundColorPrimary: 'blue',\n                errorColor: 'black',\n            },\n            input: {\n                borderColor: 'green',\n                borderRadius: '1',\n                focusBorderColor: 'green',\n                backgroundColor: 'red',\n                borderWidth: '1',\n                textColorBase: 'green',\n            },\n            toggle: {\n                colorPrimary: 'green',\n                colorSecondary: 'green',\n            },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/utils/get-fastlane-styles.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/utils/index.ts",
    "content": "export { default as getFastlaneStyles } from './get-fastlane-styles';\nexport { default as isBraintreeAcceleratedCheckoutCustomer } from './is-braintree-accelerated-checkout-customer';\nexport { default as isBraintreeError } from './is-braintree-error';\nexport { default as isBraintreeFastlaneWindow } from './is-braintree-fastlane-window';\nexport { default as isBraintreeHostedFormError } from './is-braintree-hosted-form-error';\nexport { default as isBraintreeSupportedCardBrand } from './is-braintree-supported-card-brand';\nexport { default as isBraintreePaymentRequest3DSError } from './is-braintree-payment-request-3ds-error';\n"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-accelerated-checkout-customer.spec.ts",
    "content": "import isBraintreeAcceleratedCheckoutCustomer from './is-braintree-accelerated-checkout-customer';\n\ndescribe('isBraintreeAcceleratedCheckoutCustomer', () => {\n    it('returns true if payment provider customer is Braintree related', () => {\n        const paymentProviderCustomer = {\n            authenticationState: 'success',\n            addresses: [],\n            instruments: [],\n        };\n\n        expect(isBraintreeAcceleratedCheckoutCustomer(paymentProviderCustomer)).toBe(true);\n    });\n\n    it('returns false if payment provider customer is not Braintree related', () => {\n        const paymentProviderCustomer = {\n            stripeLinkAuthenticationState: true,\n        };\n\n        expect(isBraintreeAcceleratedCheckoutCustomer(paymentProviderCustomer)).toBe(false);\n    });\n\n    it('returns false if customer is not provided', () => {\n        expect(isBraintreeAcceleratedCheckoutCustomer(undefined)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-accelerated-checkout-customer.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-error.spec.ts",
    "content": "import isBraintreeError from './is-braintree-error';\n\ndescribe('isBraintreeError', () => {\n    it('error is BraintreeError', () => {\n        expect(\n            isBraintreeError({\n                type: 'CUSTOMER',\n            }),\n        ).toBe(true);\n    });\n\n    it('error is not BraintreeError', () => {\n        expect(isBraintreeError(null)).toBe(false);\n        expect(isBraintreeError({})).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-error.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-fastlane-window.spec.ts",
    "content": "import { BraintreeFastlaneWindow } from '../types';\n\nimport isBraintreeFastlaneWindow from './is-braintree-fastlane-window';\n\ndescribe('isBraintreeFastlaneWindow', () => {\n    it('window has braintreeFastlane option', () => {\n        expect(\n            isBraintreeFastlaneWindow({ braintreeFastlane: {} } as BraintreeFastlaneWindow),\n        ).toBe(true);\n    });\n\n    it('window does not have braintreeFastlane option', () => {\n        expect(isBraintreeFastlaneWindow({} as Window)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-fastlane-window.ts",
    "content": "import { BraintreeFastlaneWindow } from '../types';\n\nexport default function isBraintreeFastlaneWindow(\n    window: Window,\n): window is BraintreeFastlaneWindow {\n    return Boolean(window.hasOwnProperty('braintreeFastlane'));\n}\n"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-form-fields-map.spec.ts",
    "content": "import { isBraintreeStoredCardFieldsMap } from './is-braintree-form-fields-map';\nimport { BraintreeFormFieldType, BraintreeStoredCardFieldsMap } from '../index';\n\ndescribe('isBraintreeStoredCardFieldsMap', () => {\n    it('returns true if fields belong to stored card', () => {\n        const fields: BraintreeStoredCardFieldsMap = {\n            [BraintreeFormFieldType.CardCodeVerification]: {\n                instrumentId: 'instrumentId',\n                containerId: 'containerId',\n            },\n        };\n\n        expect(isBraintreeStoredCardFieldsMap(fields)).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-form-fields-map.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-hosted-form-error.spec.ts",
    "content": "import { isBraintreeHostedFormError } from '../index';\n\ndescribe('isBraintreeHostedFormError', () => {\n    it('should return true error belongs to hosted form', () => {\n        const error = {\n            code: 'INVALID_DETAILS',\n            message: 'The \"details.invalidFieldKeys\" field is present but invalid.',\n            details: {\n                reason: 'Expected \"invalidFieldKeys\" to be undefined or a valid value, but got an invalid value instead.',\n            },\n        };\n\n        expect(isBraintreeHostedFormError(error)).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-hosted-form-error.ts",
    "content": "import isBraintreeError from './is-braintree-error';\nimport { BraintreeHostedFormError } from '../types';\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"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-payment-request-3d-error.spec.ts",
    "content": "import isBraintreePaymentRequest3DSError, {\n    BraintreePaymentRequest3DSError,\n} from './is-braintree-payment-request-3ds-error';\n\ndescribe('isBraintreePaymentRequest3DSError', () => {\n    it('returns true for a structurally valid object with all required fields', () => {\n        const error: BraintreePaymentRequest3DSError = {\n            name: 'SomeError',\n            body: {\n                status: '400',\n                three_ds_result: {\n                    payer_auth_request: 'some-auth-request',\n                },\n                errors: [{ code: 'three_d_secure_required' }],\n            },\n        };\n\n        expect(isBraintreePaymentRequest3DSError(error)).toBe(true);\n    });\n\n    it('returns false when top-level properties are missing', () => {\n        const error: unknown = {\n            body: {\n                status: '400',\n                three_ds_result: {\n                    payer_auth_request: 'auth',\n                },\n                errors: [],\n            },\n        };\n\n        expect(isBraintreePaymentRequest3DSError(error)).toBe(false);\n    });\n\n    it('returns false when body is missing', () => {\n        const error: unknown = {\n            name: 'MissingBodyError',\n        };\n\n        expect(isBraintreePaymentRequest3DSError(error)).toBe(false);\n    });\n\n    it('returns false when three_ds_result is missing', () => {\n        const error: unknown = {\n            name: 'Missing3DS',\n            body: {\n                status: '400',\n                errors: [],\n            },\n        };\n\n        expect(isBraintreePaymentRequest3DSError(error)).toBe(false);\n    });\n\n    it('returns false when payer_auth_request is missing', () => {\n        const error: unknown = {\n            name: 'MissingAuthRequest',\n            body: {\n                status: '400',\n                three_ds_result: {},\n                errors: [],\n            },\n        };\n\n        expect(isBraintreePaymentRequest3DSError(error)).toBe(false);\n    });\n\n    it('returns false when errors is missing', () => {\n        const error: unknown = {\n            name: 'MissingErrors',\n            body: {\n                status: '400',\n                three_ds_result: {\n                    payer_auth_request: 'some-auth-request',\n                },\n            },\n        };\n\n        expect(isBraintreePaymentRequest3DSError(error)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-payment-request-3ds-error.ts",
    "content": "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    /* 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"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-supported-card-brand.spec.ts",
    "content": "import { isBraintreeSupportedCardBrand } from './is-braintree-supported-card-brand';\n\ndescribe('isBraintreeSupportedCardBrand', () => {\n    it('returns true if card brand is supported', () => {\n        const supportedCardBrand = 'mastercard';\n        const unsupportedCardBrand = 'fakebank';\n\n        expect(isBraintreeSupportedCardBrand(supportedCardBrand)).toBe(true);\n        expect(isBraintreeSupportedCardBrand(unsupportedCardBrand)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-braintree-supported-card-brand.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-credit-card-instrument-like.spec.ts",
    "content": "import isCreditCardInstrumentLike from './is-credit-card-instrument-like';\n\ndescribe('isCreditCardInstrumentLike', () => {\n    it('returns true for valid CreditCardInstrument-like object', () => {\n        const validInstrument: unknown = {\n            ccNumber: '4111111111111111',\n            ccName: 'John Doe',\n            ccExpiry: {\n                month: '12',\n                year: '2030',\n            },\n        };\n\n        expect(isCreditCardInstrumentLike(validInstrument)).toBe(true);\n    });\n\n    it('returns false if ccNumber is missing', () => {\n        const invalidInstrument: unknown = {\n            ccName: 'John Doe',\n            ccExpiry: {\n                month: '12',\n                year: '2030',\n            },\n        };\n\n        expect(isCreditCardInstrumentLike(invalidInstrument)).toBe(false);\n    });\n\n    it('returns false if ccExpiry is not an object', () => {\n        const invalidInstrument: unknown = {\n            ccNumber: '4111111111111111',\n            ccName: 'John Doe',\n            ccExpiry: '12/2030',\n        };\n\n        expect(isCreditCardInstrumentLike(invalidInstrument)).toBe(false);\n    });\n\n    it('returns false for null input', () => {\n        expect(isCreditCardInstrumentLike(null)).toBe(false);\n    });\n\n    it('returns false for empty object', () => {\n        expect(isCreditCardInstrumentLike({})).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/braintree-utils/src/utils/is-credit-card-instrument-like.ts",
    "content": "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"
  },
  {
    "path": "packages/braintree-utils/src/visacheckout.ts",
    "content": "export interface VisaCheckoutAddress {\n    countryCode?: string;\n    extendedAddress?: string;\n    firstName?: string;\n    lastName?: string;\n    locality?: string;\n    postalCode?: string;\n    region?: string;\n    streetAddress?: string;\n    phoneNumber?: string;\n}\n\nexport interface VisaCheckoutUserData {\n    userEmail: string;\n    userFirstName: string;\n    userLastName: string;\n    userFullName: string;\n    userName: string;\n}\n\nexport interface VisaCheckoutTokenizedPayload {\n    nonce: string;\n    details: {\n        cardType: string;\n        lastFour: string;\n        lastTwo: string;\n    };\n    description: string;\n    type: string;\n    billingAddress: VisaCheckoutAddress;\n    shippingAddress?: VisaCheckoutAddress;\n    userData: VisaCheckoutUserData;\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 VisaCheckoutEventMap {\n    'payment.success'(payment: VisaCheckoutPaymentSuccessPayload): void;\n    'payment.error'(payment: VisaCheckoutPaymentSuccessPayload, Error: Error): Promise<void> | void;\n}\n\nexport interface VisaCheckoutSDK {\n    init(options: VisaCheckoutInitOptions): Promise<void> | void;\n    on<VisaCheckoutEventType extends keyof VisaCheckoutEventMap>(\n        eventType: VisaCheckoutEventType,\n        callback: VisaCheckoutEventMap[VisaCheckoutEventType],\n    ): void;\n}\n\nexport type VisaCheckoutCardType = 'VISA' | 'MASTERCARD' | 'AMEX' | 'DISCOVER' | 'ELECTRON' | 'ELO';\n\nexport interface VisaCheckoutInitOptions {\n    apikey: string;\n    referenceCallID?: string;\n    externalProfileId?: string;\n    externalClientId?: string;\n    settings?: {\n        locale?: string;\n        countryCode?: string;\n        displayName?: string;\n        websiteUrl?: string;\n        customerSupportUrl?: string;\n        shipping?: {\n            acceptedRegions?: string;\n            collectShipping?: boolean;\n        };\n        review?: {\n            message?: string;\n            buttonAction?: 'Continue' | 'Pay';\n        };\n        payment?: {\n            cardBrands?: VisaCheckoutCardType[];\n            acceptCanadianVisaDebit?: boolean;\n            billingCountries?: string;\n        };\n        threeDSSetup?: {\n            threeDSActive?: false;\n            threeDSSuppressChallenge?: boolean;\n        };\n        dataLevel?: 'SUMMARY' | 'FULL' | 'NONE';\n        currencyFormat?: string;\n        enableUserDataPrefill?: boolean;\n    };\n    paymentRequest: {\n        merchantRequestId?: string;\n        currencyCode?: string;\n        subtotal: string;\n        shippingHandling?: string;\n        tax?: string;\n        discount?: string;\n        giftWrap?: string;\n        misc?: string;\n        total?: string;\n        orderId?: string;\n        description?: string;\n        promoCode?: string;\n        customData?: {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            [key: string]: any;\n        };\n    };\n}\n\nexport interface VisaCheckoutPaymentSuccessPayload {\n    callid: string;\n    responseStatus: VisaCheckoutResponseStatus;\n    encKey: string;\n    encPaymentData: string;\n    partialShippingAddress: {\n        countryCode: string;\n        postalCode: string;\n    };\n    paymentMethodType: 'PAN' | 'TOKEN';\n}\n\nexport interface VisaCheckoutPaymentCancelledPayload {\n    callid: string;\n}\n\nexport interface VisaCheckoutResponseStatus {\n    status: number;\n    code: number;\n    severity?: 'ERROR' | 'WARNING';\n    message: string;\n}\n\nexport interface VisaCheckoutHostWindow extends Window {\n    V?: VisaCheckoutSDK;\n}\n"
  },
  {
    "path": "packages/braintree-utils/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true\n    }\n}\n"
  },
  {
    "path": "packages/braintree-utils/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/braintree-utils/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/cardinal-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\", \"*.spec.tsx\"],\n            \"rules\": {\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/cardinal-integration/README.md",
    "content": "# cardinal-integration\n\nThis package contains the integration layer for [Cardinal](https://cardinalcommerce.com/).\n\n# Cardinal\n\nFor additional information on Cardinal API, please refer to [Cardinal Virtual SDK API documentation](https://cardinaldocs.atlassian.net/wiki/spaces/VSDK/overview).\n\n## Running unit tests\n\nThis package uses [Jest](https://jestjs.io) for testing.\n\nRun `nx test cardinal-integration` to execute all the unit tests for this package.\n\nRun `nx test cardinal-integration --testFile=\"<FILE_NAME>\"` to execute unit tests for a single file.\n\n## Running lint\n\nRun `nx lint cardinal-integration` to execute the lint via [ESLint](https://eslint.org/)\n"
  },
  {
    "path": "packages/cardinal-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'cardinal-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/cardinal-integration',\n};\n"
  },
  {
    "path": "packages/cardinal-integration/project.json",
    "content": "{\n    \"name\": \"cardinal-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/cardinal-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/cardinal-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/cardinal-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/cardinal-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/cardinal-integration/src/cardinal-client.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    NotInitializedError,\n    PaymentMethodFailedError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    getCardinalBinProcessResponse,\n    getCardinalOrderData,\n    getCardinalSDK,\n    getCardinalThreeDSResult,\n    getCardinalValidatedData,\n} from './cardinal.mock';\n\nimport {\n    CardinalClient,\n    CardinalEventType,\n    CardinalInitializationType,\n    CardinalPaymentType,\n    CardinalScriptLoader,\n    CardinalSDK,\n    CardinalSignatureVerification,\n    CardinalTriggerEvents,\n    CardinalValidatedAction,\n    setupCompleteFn,\n    validatedFn,\n} from './index';\n\nconst isSetupCompletedType = (\n    type: CardinalEventType,\n    callback: setupCompleteFn | validatedFn,\n): callback is setupCompleteFn => {\n    if (typeof callback === 'function' && type.toString() === CardinalEventType.SetupCompleted) {\n        return true;\n    }\n\n    return false;\n};\n\nconst isValidatedType = (\n    type: CardinalEventType,\n    callback: setupCompleteFn | validatedFn,\n): callback is validatedFn => {\n    if (typeof callback === 'function' && type.toString() === CardinalEventType.Validated) {\n        return true;\n    }\n\n    return false;\n};\n\ndescribe('CardinalClient', () => {\n    let client: CardinalClient;\n    let cardinalScriptLoader: CardinalScriptLoader;\n    let sdk: CardinalSDK;\n    let setupCall: setupCompleteFn;\n    let validatedCall: validatedFn;\n\n    beforeEach(() => {\n        cardinalScriptLoader = new CardinalScriptLoader(createScriptLoader());\n        sdk = getCardinalSDK();\n        client = new CardinalClient(cardinalScriptLoader);\n\n        jest.spyOn(cardinalScriptLoader, 'load').mockReturnValue(Promise.resolve(sdk));\n    });\n\n    describe('#initialize', () => {\n        it('loads the cardinal sdk correctly', async () => {\n            await client.load('provider', false);\n\n            expect(cardinalScriptLoader.load).toHaveBeenCalled();\n        });\n    });\n\n    describe('#configure', () => {\n        let completed: setupCompleteFn;\n        let validated: validatedFn;\n\n        beforeEach(() => {\n            sdk.on = jest.fn((type: CardinalEventType, callback) => {\n                if (isSetupCompletedType(type, callback)) {\n                    completed = callback;\n                }\n\n                if (isValidatedType(type, callback)) {\n                    validated = callback;\n                }\n            });\n        });\n\n        describe('#successfully', () => {\n            beforeEach(async () => {\n                jest.spyOn(sdk, 'setup').mockImplementation(() => {\n                    completed({ sessionId: '12', modules: [{ loaded: true, module: '123' }] });\n                });\n\n                await client.load('provider', true);\n            });\n\n            it('completes the setup process', async () => {\n                await client.configure('token');\n\n                expect(sdk.on).toHaveBeenCalledWith(\n                    CardinalEventType.SetupCompleted,\n                    expect.any(Function),\n                );\n                expect(sdk.setup).toHaveBeenCalledWith(CardinalInitializationType.Init, {\n                    jwt: 'token',\n                });\n            });\n\n            it('reconfigures the cardinal sdk', async () => {\n                await client.configure('firstToken');\n                await client.configure('secondToken');\n\n                expect(cardinalScriptLoader.load).toHaveBeenNthCalledWith(\n                    2,\n                    expect.stringMatching(/^provider/),\n                    true,\n                );\n                expect(sdk.on).toHaveBeenCalledTimes(4);\n                expect(sdk.setup).toHaveBeenCalledTimes(2);\n            });\n\n            it(\"does not reconfigure the cardinal sdk if it's the same token\", async () => {\n                await client.configure('sameToken');\n                await client.configure('sameToken');\n\n                expect(cardinalScriptLoader.load).toHaveBeenNthCalledWith(1, 'provider', true);\n                expect(sdk.on).toHaveBeenCalledTimes(2);\n                expect(sdk.setup).toHaveBeenCalledTimes(1);\n            });\n        });\n\n        it('throws an error if cardinal sdk is not defined', () => {\n            expect(() => client.configure('token')).toThrow(NotInitializedError);\n\n            expect(cardinalScriptLoader.load).not.toHaveBeenCalled();\n            expect(sdk.on).not.toHaveBeenCalled();\n            expect(sdk.setup).not.toHaveBeenCalled();\n        });\n\n        it('completes the setup process with error', async () => {\n            jest.spyOn(sdk, 'setup').mockImplementation(() => {\n                validated(getCardinalValidatedData(CardinalValidatedAction.Error, false, 1020), '');\n            });\n\n            await client.load('provider', true);\n\n            await expect(client.configure('token')).rejects.toThrow(MissingDataError);\n        });\n    });\n\n    describe('#runBinProcess', () => {\n        beforeEach(async () => {\n            sdk.on = jest.fn((type, callback) => {\n                if (isSetupCompletedType(type, callback)) {\n                    setupCall = callback;\n                }\n            });\n\n            jest.spyOn(sdk, 'setup').mockImplementation(() => {\n                setupCall({ sessionId: '12', modules: [{ loaded: true, module: '123' }] });\n            });\n\n            await client.load('provider', true);\n            await client.configure('token');\n        });\n\n        it('collects the data correctly', async () => {\n            jest.spyOn(sdk, 'trigger').mockReturnValue(\n                Promise.resolve(getCardinalBinProcessResponse(true)),\n            );\n\n            await client.runBinProcess('123456');\n\n            expect(sdk.trigger).toHaveBeenCalledWith(CardinalTriggerEvents.BinProcess, '123456');\n        });\n\n        it('throws an error if data was not collected correctly', async () => {\n            jest.spyOn(sdk, 'trigger').mockReturnValue(\n                Promise.resolve(getCardinalBinProcessResponse(false)),\n            );\n\n            try {\n                await client.runBinProcess('');\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('throws an error if cardinal throws an exception', async () => {\n            jest.spyOn(sdk, 'trigger').mockImplementation(() => {\n                return Promise.reject(new Error('Error'));\n            });\n\n            try {\n                await client.runBinProcess('');\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n    });\n\n    describe('#getThreeDSecureData', () => {\n        beforeEach(async () => {\n            sdk.on = jest.fn((type, callback) => {\n                if (isSetupCompletedType(type, callback)) {\n                    setupCall = callback;\n                } else {\n                    validatedCall = callback;\n                }\n            });\n\n            jest.spyOn(sdk, 'setup').mockImplementation(() => {\n                setupCall({ sessionId: '12', modules: [{ loaded: true, module: '123' }] });\n            });\n\n            await client.load('provider', true);\n            await client.configure('token');\n        });\n\n        it('returns a valid token', async () => {\n            jest.spyOn(sdk, 'continue').mockImplementation(() => {\n                validatedCall(\n                    getCardinalValidatedData(CardinalValidatedAction.Success, true),\n                    'token',\n                );\n            });\n\n            const promise = await client.getThreeDSecureData(\n                getCardinalThreeDSResult(),\n                getCardinalOrderData(),\n            );\n\n            expect(sdk.on).toHaveBeenCalledWith(CardinalEventType.Validated, expect.any(Function));\n            expect(promise).toEqual({ token: 'token' });\n        });\n\n        it('returns a no action code', async () => {\n            jest.spyOn(sdk, 'continue').mockImplementation(() => {\n                validatedCall(\n                    getCardinalValidatedData(CardinalValidatedAction.NoAction, false, 0),\n                    'token',\n                );\n            });\n\n            const promise = await client.getThreeDSecureData(\n                getCardinalThreeDSResult(),\n                getCardinalOrderData(),\n            );\n\n            expect(sdk.on).toHaveBeenCalledWith(CardinalEventType.Validated, expect.any(Function));\n            expect(promise).toEqual({ token: 'token' });\n        });\n\n        it('returns an error and a no action code', async () => {\n            jest.spyOn(sdk, 'continue').mockImplementation(() => {\n                validatedCall(\n                    getCardinalValidatedData(CardinalValidatedAction.NoAction, false, 3002),\n                    'token',\n                );\n            });\n\n            try {\n                await client.getThreeDSecureData(\n                    getCardinalThreeDSResult(),\n                    getCardinalOrderData(),\n                );\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodFailedError);\n            }\n        });\n\n        it('returns a signature validation error and a no action code', async () => {\n            jest.spyOn(sdk, 'continue').mockImplementation(() => {\n                const data = {\n                    ...getCardinalValidatedData(CardinalValidatedAction.NoAction, false, 0),\n                    Payment: {\n                        ExtendedData: {\n                            SignatureVerification: CardinalSignatureVerification.No,\n                        },\n                        ProcessorTransactionId: '',\n                        Type: CardinalPaymentType.CCA,\n                    },\n                };\n\n                validatedCall(data, 'token');\n            });\n\n            try {\n                await client.getThreeDSecureData(\n                    getCardinalThreeDSResult(),\n                    getCardinalOrderData(),\n                );\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodFailedError);\n            }\n        });\n\n        it('returns an error code', async () => {\n            jest.spyOn(sdk, 'continue').mockImplementation(() => {\n                validatedCall(\n                    getCardinalValidatedData(CardinalValidatedAction.Error, false, 3004),\n                    'token',\n                );\n            });\n\n            try {\n                await client.getThreeDSecureData(\n                    getCardinalThreeDSResult(),\n                    getCardinalOrderData(),\n                );\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodFailedError);\n            }\n        });\n\n        it('returns a failure code', async () => {\n            jest.spyOn(sdk, 'continue').mockImplementation(() => {\n                validatedCall(\n                    getCardinalValidatedData(CardinalValidatedAction.Failure, false, 3004),\n                    'token',\n                );\n            });\n\n            try {\n                await client.getThreeDSecureData(\n                    getCardinalThreeDSResult(),\n                    getCardinalOrderData(),\n                );\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodFailedError);\n\n                if (error instanceof PaymentMethodFailedError) {\n                    expect(error.message).toBe(\n                        'User failed authentication or an error was encountered while processing the transaction.',\n                    );\n                }\n            }\n        });\n\n        it('does not return an action code', async () => {\n            jest.spyOn(sdk, 'continue').mockImplementation(() => {\n                const data = {\n                    ErrorDescription: '',\n                    ErrorNumber: 0,\n                    Validated: true,\n                    Payment: {\n                        ProcessorTransactionId: '',\n                        Type: CardinalPaymentType.CCA,\n                        ExtendedData: {},\n                    },\n                };\n\n                validatedCall(data, 'token');\n            });\n\n            const promise = await client.getThreeDSecureData(\n                getCardinalThreeDSResult(),\n                getCardinalOrderData(),\n            );\n\n            expect(sdk.on).toHaveBeenCalledWith(CardinalEventType.Validated, expect.any(Function));\n            expect(promise).toEqual({ token: 'token' });\n        });\n\n        it('returns an error without an action code', async () => {\n            jest.spyOn(sdk, 'continue').mockImplementation(() => {\n                const data = {\n                    ErrorDescription: 'Custom error',\n                    ErrorNumber: 1533,\n                    Validated: true,\n                    Payment: {\n                        ProcessorTransactionId: '',\n                        Type: CardinalPaymentType.CCA,\n                        ExtendedData: {},\n                    },\n                };\n\n                validatedCall(data, 'token');\n            });\n\n            const promise = await client.getThreeDSecureData(\n                getCardinalThreeDSResult(),\n                getCardinalOrderData(),\n            );\n\n            expect(sdk.on).toHaveBeenCalledWith(CardinalEventType.Validated, expect.any(Function));\n            expect(promise).toEqual({ token: 'token' });\n        });\n\n        it('returns a response without a jwt', async () => {\n            jest.spyOn(sdk, 'continue').mockImplementation(() => {\n                validatedCall(\n                    getCardinalValidatedData(CardinalValidatedAction.Error, false, 100),\n                    '',\n                );\n            });\n\n            try {\n                await client.getThreeDSecureData(\n                    getCardinalThreeDSResult(),\n                    getCardinalOrderData(),\n                );\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodFailedError);\n\n                if (error instanceof PaymentMethodFailedError) {\n                    expect(error.message).toBe(\n                        'An error was encountered while processing the transaction.',\n                    );\n                }\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/cardinal-integration/src/cardinal-client.ts",
    "content": "import { includes, noop } from 'lodash';\n\nimport {\n    Address,\n    BillingAddress,\n    CreditCardInstrument,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    PaymentMethodFailedError,\n    ThreeDSecureToken,\n    ThreeDsResult,\n    VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    CardinalAccount,\n    CardinalAddress,\n    CardinalConsumer,\n    CardinalEventType,\n    CardinalInitializationType,\n    CardinalPartialOrder,\n    CardinalPaymentBrand,\n    CardinalSDK,\n    CardinalSignatureValidationErrors,\n    CardinalSignatureVerification,\n    CardinalTriggerEvents,\n    CardinalValidatedAction,\n    CardinalValidatedData,\n} from './cardinal';\nimport CardinalScriptLoader from './cardinal-script-loader';\n\nexport type CardinalSupportedPaymentInstrument = CreditCardInstrument | VaultedInstrument;\n\nexport interface CardinalOrderData {\n    billingAddress: BillingAddress;\n    shippingAddress?: Address;\n    currencyCode: string;\n    id: string;\n    amount: number;\n    paymentData?: CreditCardInstrument;\n}\n\nexport default class CardinalClient {\n    private _provider = '';\n    private _testMode = false;\n    private _sdk?: Promise<CardinalSDK>;\n    private _configurationToken = '';\n\n    constructor(private _scriptLoader: CardinalScriptLoader) {}\n\n    load(provider: string, testMode = false): Promise<void> {\n        this._provider = provider;\n        this._testMode = testMode;\n\n        if (!this._sdk) {\n            this._sdk = this._scriptLoader.load(provider, testMode);\n        }\n\n        return this._sdk.then(noop);\n    }\n\n    configure(clientToken: string): Promise<void> {\n        if (this._configurationToken) {\n            if (this._configurationToken === clientToken) {\n                return Promise.resolve();\n            }\n\n            this._sdk = this._scriptLoader.load(`${this._provider}.${Date.now()}`, this._testMode);\n        }\n\n        return this._getClientSDK().then(\n            (client) =>\n                new Promise<void>((resolve, reject) => {\n                    client.on(CardinalEventType.SetupCompleted, () => {\n                        client.off(CardinalEventType.SetupCompleted);\n                        client.off(CardinalEventType.Validated);\n\n                        this._configurationToken = clientToken;\n\n                        resolve();\n                    });\n\n                    client.on(CardinalEventType.Validated, (data: CardinalValidatedData) => {\n                        client.off(CardinalEventType.SetupCompleted);\n                        client.off(CardinalEventType.Validated);\n\n                        switch (data.ActionCode) {\n                            case CardinalValidatedAction.Error:\n                                if (includes(CardinalSignatureValidationErrors, data.ErrorNumber)) {\n                                    reject(\n                                        new MissingDataError(\n                                            MissingDataErrorType.MissingPaymentMethod,\n                                        ),\n                                    );\n                                }\n\n                                reject(new PaymentMethodFailedError(data.ErrorDescription));\n                                break;\n                        }\n                    });\n\n                    client.setup(CardinalInitializationType.Init, {\n                        jwt: clientToken,\n                    });\n                }),\n        );\n    }\n\n    runBinProcess(binNumber: string): Promise<void> {\n        return this._getClientSDK()\n            .then((client) =>\n                client.trigger(CardinalTriggerEvents.BinProcess, binNumber).catch(noop),\n            )\n            .then((result) => {\n                if (!result || !result.Status) {\n                    throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n                }\n            });\n    }\n\n    getThreeDSecureData(\n        threeDSecureData: ThreeDsResult,\n        orderData: CardinalOrderData,\n    ): Promise<ThreeDSecureToken> {\n        return this._getClientSDK().then((client) => {\n            return new Promise<ThreeDSecureToken>((resolve, reject) => {\n                client.on(\n                    CardinalEventType.Validated,\n                    (data: CardinalValidatedData, jwt?: string) => {\n                        client.off(CardinalEventType.Validated);\n\n                        if (!jwt) {\n                            return reject(\n                                new PaymentMethodFailedError(\n                                    data.ErrorDescription\n                                        ? data.ErrorDescription\n                                        : 'An error was encountered while processing the transaction.',\n                                ),\n                            );\n                        }\n\n                        if (!data.ActionCode) {\n                            return resolve({ token: jwt });\n                        }\n\n                        switch (data.ActionCode) {\n                            case CardinalValidatedAction.Success:\n                                return resolve({ token: jwt });\n\n                            case CardinalValidatedAction.NoAction:\n                                if (data.ErrorNumber > 0) {\n                                    return reject(\n                                        new PaymentMethodFailedError(data.ErrorDescription),\n                                    );\n                                } else if (\n                                    !data.Payment ||\n                                    !data.Payment.ExtendedData ||\n                                    data.Payment.ExtendedData.SignatureVerification !==\n                                        CardinalSignatureVerification.Yes\n                                ) {\n                                    return reject(\n                                        new PaymentMethodFailedError(\n                                            'Transaction signature could not be validated.',\n                                        ),\n                                    );\n                                }\n\n                                return resolve({ token: jwt });\n\n                            case CardinalValidatedAction.Failure:\n                                return reject(\n                                    new PaymentMethodFailedError(\n                                        'User failed authentication or an error was encountered while processing the transaction.',\n                                    ),\n                                );\n\n                            case CardinalValidatedAction.Error:\n                                return reject(new PaymentMethodFailedError(data.ErrorDescription));\n                        }\n                    },\n                );\n\n                const continueObject = {\n                    AcsUrl: threeDSecureData.acs_url,\n                    Payload: threeDSecureData.merchant_data,\n                };\n\n                const partialOrder = this._mapToPartialOrder(\n                    orderData,\n                    threeDSecureData.payer_auth_request,\n                );\n\n                client.continue(CardinalPaymentBrand.CCA, continueObject, partialOrder);\n            });\n        });\n    }\n\n    private _mapToPartialOrder(\n        orderData: CardinalOrderData,\n        transactionId: string,\n    ): CardinalPartialOrder {\n        const consumer: CardinalConsumer = {\n            BillingAddress: this._mapToCardinalAddress(orderData.billingAddress),\n        };\n\n        if (orderData.paymentData) {\n            consumer.Account = this._mapToCardinalAccount(orderData.paymentData);\n        }\n\n        if (orderData.billingAddress.email) {\n            consumer.Email1 = orderData.billingAddress.email;\n        }\n\n        if (orderData.shippingAddress) {\n            consumer.ShippingAddress = this._mapToCardinalAddress(orderData.shippingAddress);\n        }\n\n        return {\n            Consumer: consumer,\n            OrderDetails: {\n                OrderNumber: orderData.id,\n                Amount: orderData.amount,\n                CurrencyCode: orderData.currencyCode,\n                OrderChannel: 'S',\n                TransactionId: transactionId,\n            },\n        };\n    }\n\n    private _mapToCardinalAccount(paymentData: CreditCardInstrument): CardinalAccount {\n        return {\n            AccountNumber: Number(paymentData.ccNumber),\n            ExpirationMonth: Number(paymentData.ccExpiry.month),\n            ExpirationYear: Number(paymentData.ccExpiry.year),\n            NameOnAccount: paymentData.ccName,\n            CardCode: Number(paymentData.ccCvv),\n        };\n    }\n\n    private _mapToCardinalAddress(address: Address): CardinalAddress {\n        const cardinalAddress: CardinalAddress = {\n            FirstName: address.firstName,\n            LastName: address.lastName,\n            Address1: address.address1,\n            City: address.city,\n            State: address.stateOrProvince,\n            PostalCode: address.postalCode,\n            CountryCode: address.countryCode,\n        };\n\n        if (address.address2) {\n            cardinalAddress.Address2 = address.address2;\n        }\n\n        if (address.phone) {\n            cardinalAddress.Phone1 = address.phone;\n        }\n\n        return cardinalAddress;\n    }\n\n    private _getClientSDK(): Promise<CardinalSDK> {\n        if (!this._sdk) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this._sdk;\n    }\n}\n"
  },
  {
    "path": "packages/cardinal-integration/src/cardinal-script-loader.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getCardinalScriptMock } from './cardinal.mock';\n\nimport { CardinalScriptLoader, CardinalWindow } from './index';\n\ndescribe('CardinalScriptLoader', () => {\n    const cardinalWindow: CardinalWindow = window;\n    const scriptLoader = createScriptLoader();\n    const scriptMock = getCardinalScriptMock();\n    const loadScript = jest.spyOn(scriptLoader, 'loadScript');\n    let cardinalScriptLoader: CardinalScriptLoader;\n\n    beforeEach(() => {\n        cardinalScriptLoader = new CardinalScriptLoader(scriptLoader, cardinalWindow);\n    });\n\n    it('loads widget test script', () => {\n        const testMode = true;\n\n        cardinalScriptLoader.load('provider', testMode);\n\n        expect(loadScript).toHaveBeenCalledWith(\n            'https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js?v=provider',\n        );\n    });\n\n    it('loads widget production script', () => {\n        const testMode = false;\n\n        cardinalScriptLoader.load('provider', testMode);\n\n        expect(loadScript).toHaveBeenCalledWith(\n            'https://static.client.cardinaltrusted.com/songbird/v2.0.0/songbird.js?v=provider',\n        );\n    });\n\n    it('returns script from the window', async () => {\n        scriptLoader.loadScript = jest.fn(() => {\n            cardinalWindow.Cardinal = scriptMock.Cardinal;\n\n            return Promise.resolve();\n        });\n\n        const script = await cardinalScriptLoader.load('provider');\n\n        expect(script).toBe(cardinalWindow.Cardinal);\n    });\n\n    it('throws error to inform that order finalization is not required', async () => {\n        scriptLoader.loadScript = jest.fn(() => {\n            throw new PaymentMethodClientUnavailableError();\n        });\n\n        try {\n            await cardinalScriptLoader.load('provider');\n        } catch (error) {\n            expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n        }\n    });\n});\n"
  },
  {
    "path": "packages/cardinal-integration/src/cardinal-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CardinalSDK, CardinalWindow } from './cardinal';\n\nconst SDK_TEST_URL = 'https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js';\n\nconst SDK_PROD_URL = 'https://static.client.cardinaltrusted.com/songbird/v2.0.0/songbird.js';\n\nexport default class CardinalScriptLoader {\n    constructor(private _scriptLoader: ScriptLoader, private _window: CardinalWindow = window) {}\n\n    load(provider: string, testMode?: boolean): Promise<CardinalSDK> {\n        const url = testMode ? SDK_TEST_URL : SDK_PROD_URL;\n\n        return this._scriptLoader.loadScript(`${url}?v=${provider}`).then(() => {\n            if (!this._window.Cardinal) {\n                throw new PaymentMethodClientUnavailableError();\n            }\n\n            return this._window.Cardinal;\n        });\n    }\n}\n"
  },
  {
    "path": "packages/cardinal-integration/src/cardinal-three-d-secure-flow-v2.spec.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\nimport { merge } from 'lodash';\n\nimport {\n    HostedForm,\n    OrderRequestBody,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCheckout,\n    getOrder,\n    getOrderRequestBody,\n    getPaymentMethod,\n    getResponse,\n    getShippingAddress,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport CardinalClient from './cardinal-client';\nimport CardinalThreeDSecureFlowV2 from './cardinal-three-d-secure-flow-v2';\n\ndescribe('CardinalBarclaysThreeDSecureFlow', () => {\n    let cardinalClient: Pick<\n        CardinalClient,\n        'configure' | 'getThreeDSecureData' | 'load' | 'runBinProcess'\n    >;\n    let threeDSecureFlow: CardinalThreeDSecureFlowV2;\n    let paymentMethod: PaymentMethod;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentMethod = getPaymentMethod();\n\n        cardinalClient = {\n            configure: jest.fn(() => Promise.resolve()),\n            getThreeDSecureData: jest.fn(),\n            load: jest.fn(() => Promise.resolve()),\n            runBinProcess: jest.fn(() => Promise.resolve()),\n        };\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        threeDSecureFlow = new CardinalThreeDSecureFlowV2(\n            paymentIntegrationService,\n            cardinalClient as CardinalClient,\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#prepare', () => {\n        it('loads Cardinal client', async () => {\n            await threeDSecureFlow.prepare(paymentMethod);\n\n            expect(cardinalClient.load).toHaveBeenCalledWith(\n                paymentMethod.id,\n                paymentMethod.config.testMode,\n            );\n        });\n    });\n\n    describe('#start', () => {\n        let execute: PaymentStrategy['execute'];\n        let form: HostedForm;\n        let options: PaymentRequestOptions;\n        let payload: OrderRequestBody;\n\n        beforeEach(() => {\n            execute = jest.fn(() => Promise.resolve());\n            options = { methodId: paymentMethod.id };\n\n            form = {\n                getBin: jest.fn(() => '411111'),\n                submit: jest.fn(),\n                attach: jest.fn(),\n                detach: jest.fn(),\n                getCardType: jest.fn(),\n                validate: jest.fn(),\n            };\n\n            payload = merge({}, getOrderRequestBody(), {\n                payment: {\n                    methodId: paymentMethod.id,\n                    gatewayId: paymentMethod.gateway,\n                },\n            });\n        });\n\n        it('executes order submission', async () => {\n            await threeDSecureFlow.start(execute, payload, options, form);\n\n            expect(execute).toHaveBeenCalledWith(payload, options);\n        });\n\n        describe('if additional action is required', () => {\n            let additionalActionRequired: Response<any>;\n\n            beforeEach(() => {\n                additionalActionRequired = getResponse({\n                    status: 'additional_action_required',\n                    additional_action_required: { data: { token: 'JWT123' } },\n                    three_ds_result: { payer_auth_request: 'TOKEN123' },\n                });\n\n                execute = jest.fn(() => Promise.reject(new RequestError(additionalActionRequired)));\n            });\n\n            it('configures Cardinal client', async () => {\n                await threeDSecureFlow.start(execute, payload, options, form);\n\n                expect(cardinalClient.configure).toHaveBeenCalledWith('JWT123');\n            });\n\n            it('runs BIN detection process if defined', async () => {\n                await threeDSecureFlow.start(execute, payload, options, form);\n\n                expect(cardinalClient.runBinProcess).toHaveBeenCalledWith(form.getBin());\n            });\n\n            it('submits XID token using hosted form if provided', async () => {\n                await threeDSecureFlow.start(execute, payload, options, form);\n\n                expect(form.submit).toHaveBeenCalledWith(\n                    merge({}, payload.payment, {\n                        paymentData: { threeDSecure: { xid: 'TOKEN123' } },\n                    }),\n                );\n            });\n\n            it('submits XID token directly if hosted form is not provided', async () => {\n                await threeDSecureFlow.start(execute, payload, options);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    merge({}, payload.payment, {\n                        paymentData: { threeDSecure: { xid: 'TOKEN123' } },\n                    }),\n                );\n            });\n\n            describe('if 3DS is required', () => {\n                let threeDSecureRequired: Response<any>;\n\n                beforeEach(() => {\n                    threeDSecureRequired = getResponse({\n                        errors: [{ code: 'three_d_secure_required' }],\n                        three_ds_result: {\n                            acs_url: 'https://foo.com',\n                            payer_auth_request: 'TOKEN345',\n                            merchant_data: 'qwerty123...',\n                            callback_url: null,\n                        },\n                    });\n\n                    jest.spyOn(form, 'submit').mockRejectedValueOnce(\n                        new RequestError(threeDSecureRequired),\n                    );\n                });\n\n                it('handles 3DS error and prompts shopper to authenticate', async () => {\n                    await threeDSecureFlow.start(execute, payload, options, form);\n\n                    expect(cardinalClient.getThreeDSecureData).toHaveBeenCalledWith(\n                        threeDSecureRequired.body.three_ds_result,\n                        {\n                            billingAddress: getBillingAddress(),\n                            shippingAddress: getShippingAddress(),\n                            currencyCode: getCheckout().cart.currency.code,\n                            id: getOrder().orderId.toString(),\n                            amount: getCheckout().cart.cartAmount,\n                        },\n                    );\n                });\n\n                it('submits 3DS token using hosted form if provided', async () => {\n                    await threeDSecureFlow.start(execute, payload, options, form);\n\n                    expect(form.submit).toHaveBeenCalledWith(\n                        merge({}, payload.payment, {\n                            paymentData: { threeDSecure: { token: 'TOKEN345' } },\n                        }),\n                    );\n                });\n\n                it('submits 3DS token directly if hosted form is not provided', async () => {\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                        new RequestError(threeDSecureRequired),\n                    );\n\n                    await threeDSecureFlow.start(execute, payload, options);\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                        merge({}, payload.payment, {\n                            paymentData: { threeDSecure: { token: 'TOKEN345' } },\n                        }),\n                    );\n                });\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/cardinal-integration/src/cardinal-three-d-secure-flow-v2.ts",
    "content": "import { merge, some } from 'lodash';\n\nimport {\n    HostedForm,\n    isCreditCardInstrument,\n    isRequestError,\n    isVaultedInstrument,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CardinalThreeDSecureToken } from './cardinal';\nimport CardinalClient, { CardinalOrderData } from './cardinal-client';\n\nexport default class CardinalThreeDSecureFlowV2 {\n    constructor(\n        private _paymentIntegrationService: PaymentIntegrationService,\n        private _cardinalClient: CardinalClient,\n    ) {}\n\n    async prepare(method: PaymentMethod): Promise<void> {\n        await this._cardinalClient.load(method.id, method.config.testMode);\n    }\n\n    async start(\n        execute: PaymentStrategy['execute'],\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n        hostedForm?: HostedForm,\n    ): Promise<void> {\n        const { getCardInstrument } = this._paymentIntegrationService.getState();\n        const { payment = { methodId: '' } } = payload;\n        const { paymentData = {} } = payment;\n\n        try {\n            return await execute(payload, options);\n        } catch (error) {\n            if (isRequestError(error) && error.body?.status === 'additional_action_required') {\n                const token = error.body.additional_action_required?.data?.token;\n                const xid = error.body.three_ds_result?.payer_auth_request;\n\n                await this._cardinalClient.configure(token);\n\n                const bin = this._getBin(paymentData, getCardInstrument, hostedForm);\n\n                if (bin) {\n                    await this._cardinalClient.runBinProcess(bin);\n                }\n\n                try {\n                    return await this._submitPayment(payment, { xid }, hostedForm);\n                } catch (err) {\n                    if (\n                        isRequestError(err) &&\n                        some(err.body.errors, { code: 'three_d_secure_required' })\n                    ) {\n                        const threeDsResult = err.body.three_ds_result;\n                        const threeDsToken = threeDsResult?.payer_auth_request;\n\n                        await this._cardinalClient.getThreeDSecureData(\n                            threeDsResult,\n                            this._getOrderData(),\n                        );\n\n                        return this._submitPayment(payment, { token: threeDsToken }, hostedForm);\n                    }\n\n                    throw err;\n                }\n            }\n\n            throw error;\n        }\n    }\n\n    private _getOrderData(): CardinalOrderData {\n        const store = this._paymentIntegrationService.getState();\n        const billingAddress = store.getBillingAddressOrThrow();\n        const shippingAddress = store.getShippingAddress();\n        const {\n            cart: {\n                currency: { code: currencyCode },\n                cartAmount: amount,\n            },\n        } = store.getCheckoutOrThrow();\n        const id = store.getOrderOrThrow().orderId.toString();\n\n        return { billingAddress, shippingAddress, currencyCode, id, amount };\n    }\n\n    private async _submitPayment(\n        payment: OrderPaymentRequestBody,\n        threeDSecure: CardinalThreeDSecureToken,\n        hostedForm?: HostedForm,\n    ): Promise<void> {\n        const paymentPayload = merge({}, payment, { paymentData: { threeDSecure } });\n\n        if (!hostedForm) {\n            await this._paymentIntegrationService.submitPayment(paymentPayload);\n        }\n\n        await hostedForm?.submit(paymentPayload);\n    }\n\n    private _getBin(\n        paymentData: NonNullable<OrderPaymentRequestBody['paymentData']>,\n        getCardInstrument: PaymentIntegrationSelectors['getCardInstrument'],\n        hostedForm?: HostedForm,\n    ): string {\n        const instrument =\n            isVaultedInstrument(paymentData) && getCardInstrument(paymentData.instrumentId);\n        const ccNumber = isCreditCardInstrument(paymentData) && paymentData.ccNumber;\n        const hostedFormBin = hostedForm ? hostedForm.getBin() : ccNumber;\n        const bin = instrument ? instrument.iin : hostedFormBin;\n\n        return bin || '';\n    }\n}\n"
  },
  {
    "path": "packages/cardinal-integration/src/cardinal-three-d-secure-flow.spec.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\nimport { merge } from 'lodash';\n\nimport {\n    HostedForm,\n    OrderRequestBody,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCheckout,\n    getOrder,\n    getOrderRequestBody,\n    getPaymentMethod,\n    getResponse,\n    getShippingAddress,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport CardinalClient from './cardinal-client';\nimport CardinalThreeDSecureFlow from './cardinal-three-d-secure-flow';\n\ndescribe('CardinalThreeDSecureFlow', () => {\n    let cardinalClient: Pick<\n        CardinalClient,\n        'configure' | 'getThreeDSecureData' | 'load' | 'runBinProcess'\n    >;\n    let threeDSecureFlow: CardinalThreeDSecureFlow;\n    let paymentMethod: PaymentMethod;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentMethod = {\n            ...getPaymentMethod(),\n            clientToken: 'foo',\n        };\n\n        cardinalClient = {\n            configure: jest.fn(() => Promise.resolve()),\n            getThreeDSecureData: jest.fn(),\n            load: jest.fn(() => Promise.resolve()),\n            runBinProcess: jest.fn(() => Promise.resolve()),\n        };\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        threeDSecureFlow = new CardinalThreeDSecureFlow(\n            paymentIntegrationService,\n            cardinalClient as CardinalClient,\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#prepare', () => {\n        it('loads Cardinal client', async () => {\n            await threeDSecureFlow.prepare(paymentMethod);\n\n            expect(cardinalClient.load).toHaveBeenCalledWith(\n                paymentMethod.id,\n                paymentMethod.config.testMode,\n            );\n        });\n\n        it('configures Cardinal client', async () => {\n            await threeDSecureFlow.prepare(paymentMethod);\n\n            expect(cardinalClient.configure).toHaveBeenCalledWith(paymentMethod.clientToken);\n        });\n\n        it('reloads payment method if client token is undefined', async () => {\n            paymentMethod = {\n                ...getPaymentMethod(),\n                clientToken: '',\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            await threeDSecureFlow.prepare(paymentMethod);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                paymentMethod.id,\n            );\n        });\n\n        it('does not reload payment method if client token is defined', async () => {\n            await threeDSecureFlow.prepare(paymentMethod);\n\n            expect(paymentIntegrationService.loadPaymentMethod).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#start', () => {\n        let execute: PaymentStrategy['execute'];\n        let form: HostedForm;\n        let options: PaymentRequestOptions;\n        let payload: OrderRequestBody;\n\n        beforeEach(() => {\n            execute = jest.fn(() => Promise.resolve());\n            options = { methodId: paymentMethod.id };\n\n            form = {\n                getBin: jest.fn(() => '411111'),\n                submit: jest.fn(),\n                attach: jest.fn(),\n                detach: jest.fn(),\n                getCardType: jest.fn(),\n                validate: jest.fn(),\n            };\n\n            payload = merge({}, getOrderRequestBody(), {\n                payment: {\n                    methodId: paymentMethod.id,\n                    gatewayId: paymentMethod.gateway,\n                },\n            });\n        });\n\n        it('runs BIN detection process if defined', async () => {\n            await threeDSecureFlow.start(execute, payload, options, form);\n\n            expect(cardinalClient.runBinProcess).toHaveBeenCalledWith(form.getBin());\n        });\n\n        it('executes order submission with client token', async () => {\n            await threeDSecureFlow.start(execute, payload, options, form);\n\n            expect(execute).toHaveBeenCalledWith(\n                merge(payload, {\n                    payment: {\n                        paymentData: {\n                            threeDSecure: { token: paymentMethod.clientToken },\n                        },\n                    },\n                }),\n                options,\n            );\n        });\n\n        it('throws error in case it is not a request error', async () => {\n            execute = jest.fn(() => Promise.reject(new Error()));\n\n            try {\n                await threeDSecureFlow.start(execute, payload, options, form);\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n            }\n        });\n\n        describe('if 3DS is required', () => {\n            let response: Response<any>;\n\n            beforeEach(() => {\n                response = getResponse({\n                    errors: [{ code: 'three_d_secure_required' }],\n                    three_ds_result: {},\n                });\n\n                execute = jest.fn(() => Promise.reject(new RequestError(response)));\n            });\n\n            it('handles 3DS error and prompts shopper to authenticate', async () => {\n                await threeDSecureFlow.start(execute, payload, options, form);\n\n                expect(cardinalClient.getThreeDSecureData).toHaveBeenCalledWith(\n                    response.body.three_ds_result,\n                    {\n                        billingAddress: getBillingAddress(),\n                        shippingAddress: getShippingAddress(),\n                        currencyCode: getCheckout().cart.currency.code,\n                        id: getOrder().orderId.toString(),\n                        amount: getCheckout().cart.cartAmount,\n                    },\n                );\n            });\n\n            it('submits 3DS token using hosted form if provided', async () => {\n                jest.spyOn(cardinalClient, 'getThreeDSecureData').mockResolvedValue({\n                    token: 'token',\n                });\n\n                await threeDSecureFlow.start(execute, payload, options, form);\n\n                expect(form.submit).toHaveBeenCalledWith(\n                    merge(payload.payment, {\n                        paymentData: { threeDSecure: 'three_d_secure' },\n                    }),\n                );\n            });\n\n            it('submits 3DS token directly if hosted form is not provided', async () => {\n                jest.spyOn(cardinalClient, 'getThreeDSecureData').mockResolvedValue({\n                    token: 'token',\n                });\n\n                await threeDSecureFlow.start(execute, payload, options);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    merge(payload.payment, {\n                        paymentData: { threeDSecure: 'three_d_secure' },\n                    }),\n                );\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/cardinal-integration/src/cardinal-three-d-secure-flow.ts",
    "content": "import { merge, some } from 'lodash';\n\nimport {\n    HostedForm,\n    isRequestError,\n    isVaultedInstrument,\n    OrderRequestBody,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport CardinalClient, { CardinalOrderData } from './cardinal-client';\n\nexport default class CardinalThreeDSecureFlow {\n    constructor(\n        private _paymentIntegrationService: PaymentIntegrationService,\n        private _cardinalClient: CardinalClient,\n    ) {}\n\n    async prepare(method: PaymentMethod): Promise<void> {\n        await this._cardinalClient.load(method.id, method.config.testMode);\n        await this._cardinalClient.configure(await this._getClientToken(method));\n    }\n\n    async start(\n        execute: PaymentStrategy['execute'],\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n        hostedForm?: HostedForm,\n    ): Promise<void> {\n        const { getCardInstrument, getPaymentMethodOrThrow } =\n            this._paymentIntegrationService.getState();\n\n        const { payment: { methodId = '', paymentData = {} } = {} } = payload;\n        const instrument =\n            isVaultedInstrument(paymentData) && getCardInstrument(paymentData.instrumentId);\n        const bin = instrument ? instrument.iin : hostedForm && hostedForm.getBin();\n\n        if (bin) {\n            await this._cardinalClient.runBinProcess(bin);\n        }\n\n        try {\n            return await execute(\n                merge(payload, {\n                    payment: {\n                        paymentData: {\n                            threeDSecure: { token: getPaymentMethodOrThrow(methodId).clientToken },\n                        },\n                    },\n                }),\n                options,\n            );\n        } catch (error) {\n            if (\n                !isRequestError(error) ||\n                !some(error.body.errors, { code: 'three_d_secure_required' })\n            ) {\n                throw error;\n            }\n\n            const threeDSecure = await this._cardinalClient.getThreeDSecureData(\n                error.body.three_ds_result,\n                this._getOrderData(),\n            );\n\n            if (!hostedForm) {\n                await this._paymentIntegrationService.submitPayment(\n                    merge(payload.payment, {\n                        paymentData: { threeDSecure },\n                    }),\n                );\n\n                return;\n            }\n\n            await hostedForm.submit(\n                merge(payload.payment, {\n                    paymentData: { threeDSecure },\n                }),\n            );\n        }\n    }\n\n    private async _getClientToken(method: PaymentMethod): Promise<string> {\n        if (method.clientToken) {\n            return method.clientToken;\n        }\n\n        await this._paymentIntegrationService.loadPaymentMethod(method.id);\n\n        const paymentMethod = this._paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow(method.id);\n\n        return paymentMethod.clientToken || '';\n    }\n\n    private _getOrderData(): CardinalOrderData {\n        const state = this._paymentIntegrationService.getState();\n        const billingAddress = state.getBillingAddressOrThrow();\n        const shippingAddress = state.getShippingAddress();\n        const checkout = state.getCheckoutOrThrow();\n        const order = state.getOrderOrThrow();\n\n        return {\n            billingAddress,\n            shippingAddress,\n            currencyCode: checkout.cart.currency.code,\n            id: order.orderId.toString(),\n            amount: checkout.cart.cartAmount,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/cardinal-integration/src/cardinal.mock.ts",
    "content": "import { ThreeDsResult } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCreditCardInstrument,\n    getShippingAddress,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    CardinalBinProcessResponse,\n    CardinalOrderData,\n    CardinalPaymentType,\n    CardinalSDK,\n    CardinalSignatureVerification,\n    CardinalValidatedAction,\n    CardinalValidatedData,\n    CardinalWindow,\n} from '.';\n\nconst CardinalWindowMock: CardinalWindow = window;\n\nexport function getCardinalScriptMock(): CardinalWindow {\n    return {\n        ...CardinalWindowMock,\n        Cardinal: getCardinalSDK(),\n    };\n}\n\nexport function getCardinalSDK(): CardinalSDK {\n    return {\n        configure: jest.fn(),\n        on: jest.fn(),\n        setup: jest.fn(),\n        trigger: jest.fn(),\n        continue: jest.fn(),\n        off: jest.fn(),\n        start: jest.fn(),\n    };\n}\n\nexport function getCardinalBinProcessResponse(status: boolean): CardinalBinProcessResponse {\n    return {\n        Status: status,\n    };\n}\n\nexport function getCardinalValidatedData(\n    actionCode: CardinalValidatedAction,\n    status: boolean,\n    errorNumber?: number,\n): CardinalValidatedData {\n    return {\n        ActionCode: actionCode,\n        ErrorDescription: '',\n        ErrorNumber: errorNumber || 0,\n        Validated: status,\n        Payment: {\n            ExtendedData: {\n                SignatureVerification: CardinalSignatureVerification.Yes,\n            },\n            ProcessorTransactionId: '',\n            Type: CardinalPaymentType.CCA,\n        },\n    };\n}\n\nexport function getCardinalThreeDSResult(): ThreeDsResult {\n    return {\n        acs_url: 'https://',\n        payer_auth_request: 'auth_request',\n        merchant_data: 'merchant_data',\n        callback_url: '',\n    };\n}\n\nexport function getCardinalOrderData(): CardinalOrderData {\n    const billingAddress = getBillingAddress();\n\n    billingAddress.address2 = 'Address 2';\n\n    return {\n        billingAddress,\n        shippingAddress: getShippingAddress(),\n        currencyCode: 'USD',\n        id: '123-abc',\n        amount: 12000,\n        paymentData: getCreditCardInstrument(),\n    };\n}\n"
  },
  {
    "path": "packages/cardinal-integration/src/cardinal.ts",
    "content": "import { ThreeDSecure, ThreeDSecureToken } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport const CardinalSignatureValidationErrors = [100004, 1010, 1011, 1020];\n\nexport interface CardinalSDK {\n    configure(params: CardinalConfiguration): void;\n    on(params: CardinalEventType, callback: CardinalEventMap[CardinalEventType]): void;\n    off(params: CardinalEventType): void;\n    setup<K extends keyof CardinalInitializationDataMap>(\n        initializationType: K,\n        initializationData: CardinalInitializationDataMap[K],\n    ): void;\n    trigger(\n        event: CardinalTriggerEvents,\n        data?: string,\n    ): Promise<CardinalBinProcessResponse | void>;\n    continue(\n        paymentBrand: CardinalPaymentBrand,\n        continueObject: CardinalContinue,\n        order: CardinalPartialOrder,\n    ): void;\n    start(paymentBrand: CardinalPaymentBrand, order: CardinalPartialOrder, jwt?: string): void;\n}\n\nexport interface CardinalWindow extends Window {\n    Cardinal?: CardinalSDK;\n}\n\nexport enum CardinalEventType {\n    SetupCompleted = 'payments.setupComplete',\n    Validated = 'payments.validated',\n}\n\nexport type setupCompleteFn = (setupCompleteData: CardinalSetupCompletedData) => void;\nexport type validatedFn = (data: CardinalValidatedData, jwt?: string) => void;\n\nexport interface CardinalEventMap {\n    [CardinalEventType.SetupCompleted]: setupCompleteFn;\n    [CardinalEventType.Validated]: validatedFn;\n}\n\nexport type CardinalConfiguration = Partial<{\n    logging: {\n        level: string;\n    };\n    payment: {\n        view: string;\n        framework: string;\n        displayLoading: boolean;\n    };\n}>;\n\nexport interface CardinalSetupCompletedData {\n    sessionId: string;\n    modules: CardinalModuleState[];\n}\n\nexport interface CardinalModuleState {\n    loaded: boolean;\n    module: string;\n}\n\nexport enum CardinalInitializationType {\n    Init = 'init',\n    Complete = 'complete',\n    Confirm = 'confirm',\n}\n\nexport interface CardinalInitializationDataMap {\n    [CardinalInitializationType.Init]: CardinalInitTypeData;\n    [CardinalInitializationType.Complete]: CardinalCompleteTypeData;\n    [CardinalInitializationType.Confirm]: CardinalConfirmTypeData;\n}\n\nexport interface CardinalInitTypeData {\n    jwt: string;\n}\n\nexport interface CardinalCompleteTypeData {\n    Status: string;\n}\n\nexport interface CardinalConfirmTypeData {\n    jwt: string;\n    cardinalResponseJwt: string;\n}\n\nexport interface CardinalValidatedData {\n    ActionCode?: CardinalValidatedAction;\n    ErrorDescription: string;\n    ErrorNumber: number;\n    Validated?: boolean;\n    Payment?: CardinalPayment;\n}\n\nexport interface CardinalPayment {\n    ExtendedData?: CardinalCCAExtendedData;\n    ProcessorTransactionId: string;\n    Type: CardinalPaymentType;\n}\n\nexport interface CardinalBinProcessResponse {\n    Status: boolean;\n}\n\nexport interface CardinalContinue {\n    AcsUrl: string;\n    Payload: string;\n}\n\nexport interface CardinalPartialOrder {\n    OrderDetails: CardinalOrderDetails;\n    Consumer?: CardinalConsumer;\n}\n\nexport interface CardinalConsumer {\n    Email1?: string;\n    Email2?: string;\n    ShippingAddress?: CardinalAddress;\n    BillingAddress?: CardinalAddress;\n    Account?: CardinalAccount;\n}\n\nexport interface CardinalAccount {\n    AccountNumber: number;\n    ExpirationMonth: number;\n    ExpirationYear: number;\n    NameOnAccount: string;\n    CardCode: number;\n}\n\nexport interface CardinalAddress {\n    FullName?: string;\n    FirstName: string;\n    MiddleName?: string;\n    LastName: string;\n    Address1: string;\n    Address2?: string;\n    Address3?: string;\n    City: string;\n    State: string;\n    PostalCode: string;\n    CountryCode: string;\n    Phone1?: string;\n    Phone2?: string;\n}\n\nexport interface CardinalOrderDetails {\n    OrderNumber: string;\n    Amount: number;\n    CurrencyCode: string;\n    OrderDescription?: string;\n    OrderChannel: string;\n    TransactionId?: string;\n}\n\nexport type CardinalCCAExtendedData = Partial<{\n    CAVV: string;\n    ECIFlag: string;\n    PAResStatus: string;\n    SignatureVerification: string;\n    XID: string;\n    UCAFIndicator: string;\n    ChallengeCancel: string;\n}>;\n\nexport enum CardinalValidatedAction {\n    Success = 'SUCCESS',\n    NoAction = 'NOACTION',\n    Failure = 'FAILURE',\n    Error = 'ERROR',\n}\n\nexport enum CardinalPaymentType {\n    CCA = 'CCA',\n    Paypal = 'Paypal',\n    Wallet = 'Wallet',\n    VisaCheckout = 'VisaCheckout',\n    ApplePay = 'ApplePay',\n    DiscoverWallet = 'DiscoverWallet',\n}\n\nexport enum CardinalTriggerEvents {\n    BinProcess = 'bin.process',\n}\n\nexport enum CardinalPaymentBrand {\n    CCA = 'cca',\n}\n\nexport enum CardinalSignatureVerification {\n    Yes = 'Y',\n    No = 'N',\n}\n\nexport type CardinalThreeDSecureToken = Pick<ThreeDSecure, 'xid'> | ThreeDSecureToken;\n"
  },
  {
    "path": "packages/cardinal-integration/src/index.ts",
    "content": "export * from './cardinal';\n\nexport { default as CardinalThreeDSecureFlow } from './cardinal-three-d-secure-flow';\nexport { default as CardinalThreeDSecureFlowV2 } from './cardinal-three-d-secure-flow-v2';\nexport { default as CardinalScriptLoader } from './cardinal-script-loader';\nexport {\n    default as CardinalClient,\n    CardinalOrderData,\n    CardinalSupportedPaymentInstrument,\n} from './cardinal-client';\n"
  },
  {
    "path": "packages/cardinal-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/cardinal-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/cardinal-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/cba-mpgs-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\", \"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-shadow\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/dot-notation\": \"off\",\n                \"no-plusplus\": \"off\",\n                \"no-await-in-loop\": \"off\",\n                \"no-loop-func\": \"off\",\n                \"dot-notation\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/cba-mpgs-integration/README.md",
    "content": "# cba-mpgs-integration\n\nThis package contains the integration layer for the [CBA-MPGS](https://www.commbank.com.au/business/payments/take-online-payments/commweb-payment-gateway.html) provider.\n\n# cba-mpgs\n\nFor additional information on CBA-MPGS, please refer to [CBA-MPGS documentation](https://paymentgateway.commbank.com.au/api/documentation/integrationGuidelines/index.html).\n\n## Running unit tests\n\nRun `nx test cba-mpgs-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint cba-mpgs-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/cba-mpgs-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'cba-mpgs-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/cba-mpgs-integration',\n};\n"
  },
  {
    "path": "packages/cba-mpgs-integration/project.json",
    "content": "{\n    \"name\": \"cba-mpgs-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/cba-mpgs-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/cba-mpgs-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/cba-mpgs-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/cba-mpgs-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/cba-mpgs-integration/src/cba-mpgs-payment-strategy.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\nimport { merge } from 'lodash';\n\nimport {\n    MissingDataError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodFailedError,\n    PaymentStatusTypes,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    getErrorPaymentResponseBody,\n    getOrder,\n    getOrderRequestBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { ThreeDSjs } from './cba-mpgs';\nimport CBAMPGSPaymentStrategy from './cba-mpgs-payment-strategy';\nimport CBAMPGSScriptLoader from './cba-mpgs-script-loader';\nimport { getCBAMPGS, getCBAMPGSScriptMock, getCBAMPGSScriptMockRetryOnly } from './cba-mpgs.mock';\n\ndescribe('CBAMPGSPaymentStrategy', () => {\n    let scriptLoader: ScriptLoader;\n    let cbaMPGSScriptLoader: CBAMPGSScriptLoader;\n    let threeDSjs: ThreeDSjs;\n    let payload: OrderRequestBody;\n    let paymentMethod: PaymentMethod;\n    let strategy: CBAMPGSPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        scriptLoader = createScriptLoader();\n        threeDSjs = getCBAMPGSScriptMock();\n\n        cbaMPGSScriptLoader = new CBAMPGSScriptLoader(scriptLoader);\n\n        strategy = new CBAMPGSPaymentStrategy(paymentIntegrationService, cbaMPGSScriptLoader);\n\n        paymentMethod = getCBAMPGS();\n\n        payload = merge({}, getOrderRequestBody(), {\n            payment: {\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            },\n        });\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            getConfig().storeConfig,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getOrder').mockReturnValue(getOrder());\n        jest.spyOn(cbaMPGSScriptLoader, 'load').mockResolvedValue(threeDSjs);\n        jest.spyOn(paymentIntegrationService.getState(), 'getLocale').mockReturnValue({\n            locale: 'en_US',\n        } as any);\n        jest.useFakeTimers();\n    });\n\n    describe('#initialize', () => {\n        it('should initialize the base strategy if 3ds is disabled', async () => {\n            paymentMethod.config.is3dsEnabled = false;\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            expect(cbaMPGSScriptLoader.load).not.toHaveBeenCalled();\n        });\n\n        it('should initialize the strategy and load ThreeDSjs script if 3ds is enabled', async () => {\n            const configurePayload = {\n                merchantId: paymentMethod.initializationData.merchantId,\n                sessionId: expect.any(String),\n                callback: expect.any(Function),\n                configuration: {\n                    userLanguage: { locale: 'en_US' },\n                    wsVersion: 62,\n                },\n            };\n\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            expect(cbaMPGSScriptLoader.load).toHaveBeenCalled();\n            expect(threeDSjs.configure).toHaveBeenCalledWith(configurePayload);\n            expect(threeDSjs.isConfigured).toHaveBeenCalled();\n        });\n\n        it('should initialize in production mode if isTestModeFlagEnabled is false', async () => {\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            expect(cbaMPGSScriptLoader.load).toHaveBeenCalledWith(false);\n        });\n\n        it('should initialize in sandbox mode if isTestModeFlagEnabled is true', async () => {\n            paymentMethod.initializationData.isTestModeFlagEnabled = true;\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            expect(cbaMPGSScriptLoader.load).toHaveBeenCalledWith(true);\n        });\n\n        it('should throw NotInitializedError if script fails to load', async () => {\n            jest.spyOn(cbaMPGSScriptLoader, 'load').mockResolvedValue(undefined as any);\n\n            await expect(strategy.initialize({ methodId: paymentMethod.id })).rejects.toThrow(\n                NotInitializedError,\n            );\n        });\n\n        it('should throw MissingDataError if clientToken missing', async () => {\n            paymentMethod.clientToken = undefined;\n\n            await expect(strategy.initialize({ methodId: paymentMethod.id })).rejects.toThrow(\n                MissingDataError,\n            );\n        });\n\n        it('should throw PaymentMethodFailedError if configure fails', async () => {\n            const badMock = getCBAMPGSScriptMock(false);\n\n            jest.spyOn(cbaMPGSScriptLoader, 'load').mockResolvedValue(badMock);\n\n            await expect(strategy.initialize({ methodId: paymentMethod.id })).rejects.toThrow(\n                PaymentMethodFailedError,\n            );\n        });\n    });\n\n    describe('#execute', () => {\n        beforeEach(async () => {\n            const error = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [{ code: 'three_d_secure_required' }],\n                    three_ds_result: {\n                        acs_url: null,\n                        payer_auth_request: null,\n                        merchant_data: null,\n                        callback_url: null,\n                        token: 'session-id-uuid',\n                    },\n                    status: 'error',\n                }),\n            );\n\n            (paymentIntegrationService.submitPayment as jest.Mock).mockRejectedValue(error);\n\n            await strategy.initialize({ methodId: paymentMethod.id });\n        });\n\n        it('should execute base strategy if 3ds disabled', async () => {\n            paymentMethod.config.is3dsEnabled = false;\n            (paymentIntegrationService.submitPayment as jest.Mock).mockResolvedValue({});\n\n            await strategy.initialize({ methodId: paymentMethod.id });\n            await strategy.execute(payload);\n\n            expect(threeDSjs.initiateAuthentication).not.toHaveBeenCalled();\n        });\n\n        it('should fail if payment data missing', async () => {\n            payload.payment = undefined as any;\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentArgumentInvalidError);\n        });\n\n        it('should execute and trigger 3DS successfully', async () => {\n            const threeDSMock = getCBAMPGSScriptMock();\n\n            strategy['threeDSjs'] = threeDSMock;\n\n            strategy['authenticatePayer'] = jest.fn().mockResolvedValue(undefined);\n\n            await strategy.execute(payload);\n\n            const orderId = `${getConfig().storeConfig.storeProfile.storeId}_${getOrder().orderId}`;\n\n            expect(strategy['threeDSjs'].initiateAuthentication).toHaveBeenCalledWith(\n                orderId,\n                'session-id-uuid',\n                expect.any(Function),\n            );\n\n            expect(strategy['authenticatePayer']).toHaveBeenCalledWith(orderId, 'session-id-uuid');\n        });\n\n        it('should reject with RequestError if 3ds result missing token', async () => {\n            const error = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [{ code: 'three_d_secure_required' }],\n                    three_ds_result: { token: undefined },\n                    status: 'error',\n                }),\n            );\n\n            (paymentIntegrationService.submitPayment as jest.Mock).mockRejectedValue(error);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(RequestError);\n        });\n\n        it('should reject if non-3ds error occurs', async () => {\n            const error = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [{ code: 'gateway_error' }],\n                    status: 'error',\n                }),\n            );\n\n            (paymentIntegrationService.submitPayment as jest.Mock).mockRejectedValue(error);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(RequestError);\n        });\n\n        it('should retry to authenticate payer if server is busy', async () => {\n            threeDSjs = getCBAMPGSScriptMock(true, true, true, true, false, true, true);\n\n            jest.spyOn(cbaMPGSScriptLoader, 'load').mockResolvedValueOnce(threeDSjs);\n\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            strategy.execute(payload);\n\n            const expectedTimes = 2;\n\n            for (let i = 0; i < expectedTimes; i++) {\n                await new Promise((resolve) => process.nextTick(resolve));\n                jest.runAllTimers();\n            }\n\n            expect(threeDSjs.initiateAuthentication).toHaveBeenCalled();\n            expect(threeDSjs.authenticatePayer).toHaveBeenCalledTimes(expectedTimes);\n        });\n\n        it('should retry up to 5 times to authenticate payer if server is busy', async () => {\n            threeDSjs = getCBAMPGSScriptMockRetryOnly(true, true, true, true, false, true, true);\n\n            jest.spyOn(cbaMPGSScriptLoader, 'load').mockResolvedValueOnce(threeDSjs);\n\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            // eslint-disable-next-line jest/valid-expect\n            expect(strategy.execute(payload)).rejects.toThrow(Error);\n\n            const expectedTimes = 5;\n\n            for (let i = 0; i < expectedTimes; i++) {\n                await new Promise((resolve) => process.nextTick(resolve));\n                jest.runAllTimers();\n            }\n\n            expect(threeDSjs.initiateAuthentication).toHaveBeenCalled();\n            expect(threeDSjs.authenticatePayer).toHaveBeenCalledTimes(expectedTimes);\n        });\n    });\n\n    describe('#finalize', () => {\n        it('finalizes order if created and status is FINALIZE', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getOrder').mockReturnValue(\n                getOrder(),\n            );\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentStatus').mockReturnValue(\n                PaymentStatusTypes.FINALIZE,\n            );\n\n            await strategy.finalize();\n\n            expect(paymentIntegrationService.finalizeOrder).toHaveBeenCalled();\n        });\n\n        it('throws if not FINALIZE', async () => {\n            const state = paymentIntegrationService.getState();\n\n            jest.spyOn(state, 'getPaymentStatus').mockReturnValue(PaymentStatusTypes.INITIALIZE);\n\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n\n        it('throws if order missing', async () => {\n            const state = paymentIntegrationService.getState();\n\n            jest.spyOn(state, 'getOrder').mockReturnValue(null as any);\n\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize', () => {\n        it('deinitializes correctly', async () => {\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            await expect(strategy.deinitialize()).resolves.toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/cba-mpgs-integration/src/cba-mpgs-payment-strategy.ts",
    "content": "import { noop, some } from 'lodash';\n\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    isRequestError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodFailedError,\n    PaymentRequestOptions,\n    PaymentStatusTypes,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    RestApiResponse,\n    THREE_D_SECURE_AVAILABLE,\n    THREE_D_SECURE_BUSY,\n    THREE_D_SECURE_PROCEED,\n    ThreeDSjs,\n} from './cba-mpgs';\nimport CBAMPGSScriptLoader from './cba-mpgs-script-loader';\nimport { isCBAMPGSPaymentMethodLike, isThreeDSErrorBody } from './is-cba-mpgs-payment-method-like';\n\nexport default class CBAMPGSPaymentStrategy extends CreditCardPaymentStrategy {\n    private threeDSjs?: ThreeDSjs;\n\n    private sessionId = '';\n    private locale?: string;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private cbaMGPSScriptLoader: CBAMPGSScriptLoader,\n    ) {\n        super(paymentIntegrationService);\n    }\n\n    async initialize(options: PaymentInitializeOptions): Promise<void> {\n        await super.initialize(options);\n\n        const { methodId } = options;\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n        if (!isCBAMPGSPaymentMethodLike(paymentMethod)) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            clientToken,\n            initializationData: { isTestModeFlagEnabled = false, merchantId },\n            config: { is3dsEnabled },\n        } = paymentMethod;\n\n        if (is3dsEnabled) {\n            this.threeDSjs = await this.cbaMGPSScriptLoader.load(isTestModeFlagEnabled);\n\n            if (!this.threeDSjs) {\n                throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n            }\n\n            if (!clientToken || !merchantId) {\n                throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n            }\n\n            this.sessionId = clientToken;\n            this.locale = state.getLocale();\n\n            if (!this.locale) {\n                throw new MissingDataError(MissingDataErrorType.MissingCart);\n            }\n\n            await this.threeDSjs.configure({\n                merchantId,\n                sessionId: this.sessionId,\n                callback: () => {\n                    if (this.threeDSjs?.isConfigured()) {\n                        return this.paymentIntegrationService.getState();\n                    }\n\n                    throw new PaymentMethodFailedError('Failed to configure 3DS API.');\n                },\n                configuration: {\n                    userLanguage: this.locale,\n                    wsVersion: 62,\n                },\n            });\n        }\n\n        return Promise.resolve();\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment } = payload;\n        const paymentData = payment && payment.paymentData;\n\n        if (!payment || !paymentData) {\n            throw new PaymentArgumentInvalidError(['payment.paymentData']);\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(payment.methodId);\n\n        const { is3dsEnabled } = paymentMethod.config;\n\n        if (is3dsEnabled) {\n            const newPaymentData = {\n                ...paymentData,\n                threeDSecure: { token: this.sessionId },\n            };\n\n            if (payload.payment) {\n                payload.payment.paymentData = newPaymentData;\n            }\n        }\n\n        return super.execute(payload, options).catch((error) => {\n            if (\n                !is3dsEnabled ||\n                !isRequestError(error) ||\n                !some(error.body.errors, { code: 'three_d_secure_required' })\n            ) {\n                return Promise.reject(error);\n            }\n\n            const retryState = this.paymentIntegrationService.getState();\n            const order = retryState.getOrder();\n\n            const {\n                storeProfile: { storeId },\n            } = retryState.getStoreConfigOrThrow();\n\n            if (!order || !this.sessionId) {\n                throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n            }\n\n            const orderId = `${storeId}_${order.orderId}`;\n\n            if (!isThreeDSErrorBody(error.body)) {\n                throw new RequestError();\n            }\n\n            const {\n                three_ds_result: { token: transactionId },\n            } = error.body;\n\n            if (!transactionId) {\n                return Promise.reject(error);\n            }\n\n            return this.initiateAuthentication(orderId, transactionId);\n        });\n    }\n\n    async finalize(options?: PaymentRequestOptions): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const order = state.getOrder();\n\n        if (order && state.getPaymentStatus() === PaymentStatusTypes.FINALIZE) {\n            await this.paymentIntegrationService.finalizeOrder(options);\n\n            return Promise.resolve();\n        }\n\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this.threeDSjs = undefined;\n        this.sessionId = '';\n\n        return super.deinitialize();\n    }\n\n    private async initiateAuthentication(orderId: string, transactionId: string): Promise<void> {\n        const response: RestApiResponse = await new Promise((resolve, reject) => {\n            if (!this.threeDSjs) {\n                throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n            }\n\n            this.threeDSjs.initiateAuthentication(orderId, transactionId, (data) => {\n                const error = data.error;\n\n                if (error) {\n                    return reject(new PaymentMethodFailedError(error.msg));\n                }\n\n                if (this.threeDSjs && data.gatewayRecommendation === THREE_D_SECURE_PROCEED) {\n                    return resolve(data.restApiResponse);\n                }\n\n                return reject(new PaymentMethodFailedError());\n            });\n        });\n\n        if (\n            response.transaction &&\n            response.transaction.authenticationStatus === THREE_D_SECURE_AVAILABLE\n        ) {\n            return this.authenticatePayer(orderId, transactionId);\n        }\n\n        throw new PaymentMethodFailedError();\n    }\n\n    private async authenticatePayer(\n        orderId: string,\n        transactionId: string,\n        attempt = 1,\n    ): Promise<void> {\n        return new Promise((_resolve, reject) => {\n            if (!this.threeDSjs) {\n                return reject(\n                    new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n                );\n            }\n\n            this.threeDSjs.authenticatePayer(\n                orderId,\n                transactionId,\n                // eslint-disable-next-line @typescript-eslint/no-misused-promises\n                async (data) => {\n                    const error = data.error;\n\n                    if (error) {\n                        if (error.cause && error.cause === THREE_D_SECURE_BUSY && attempt < 5) {\n                            // Wait 3 seconds for MPGS server to process the `initiateAuthentication` call\n                            // See: Step 1: Initiate Authentication ->  Initiate Authentication Request:\n                            // https://ap-gateway.mastercard.com/api/documentation/integrationGuidelines/supportedFeatures/pickAdditionalFunctionality/authentication/3DS/integrationModelAPI.html?locale=en_US#x_3DSTest\n                            await new Promise((resolve) => setTimeout(resolve, 3000));\n\n                            // eslint-disable-next-line no-plusplus, no-param-reassign\n                            return this.authenticatePayer(orderId, transactionId, ++attempt);\n                        }\n\n                        return reject(new PaymentMethodFailedError());\n                    }\n\n                    // ThreeDSjs will handle the redirect so return a promise that doesn't really resolve\n                    return new Promise<never>(noop);\n                },\n                { fullScreenRedirect: true },\n            );\n        });\n    }\n}\n"
  },
  {
    "path": "packages/cba-mpgs-integration/src/cba-mpgs-script-loader.spec.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { CBAMPGSHostWindow, ThreeDSjs } from './cba-mpgs';\nimport CBAMPGSScriptLoader from './cba-mpgs-script-loader';\nimport { getCBAMPGSScriptMock } from './cba-mpgs.mock';\n\ndescribe('CBAMPGSScriptLoader', () => {\n    let cbaMPGSScriptLoader: CBAMPGSScriptLoader;\n    let scriptLoader: ScriptLoader;\n    let mockWindow: CBAMPGSHostWindow;\n\n    beforeEach(() => {\n        mockWindow = {} as CBAMPGSHostWindow;\n        scriptLoader = {} as ScriptLoader;\n        cbaMPGSScriptLoader = new CBAMPGSScriptLoader(scriptLoader, mockWindow);\n    });\n\n    describe('#load()', () => {\n        let threeDsScript: ThreeDSjs;\n\n        beforeEach(() => {\n            threeDsScript = getCBAMPGSScriptMock();\n\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.ThreeDS = threeDsScript;\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads the Script', async () => {\n            await cbaMPGSScriptLoader.load(false);\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                '//ap-gateway.mastercard.com/static/threeDS/1.3.0/three-ds.min.js',\n            );\n        });\n\n        it('returns the Script from the window', async () => {\n            const ThreeDSjs = await cbaMPGSScriptLoader.load();\n\n            expect(ThreeDSjs).toBe(threeDsScript);\n        });\n\n        describe('when testMode is on', () => {\n            it('loads the Script in sandbox mode', async () => {\n                await cbaMPGSScriptLoader.load(true);\n\n                expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                    '//test-gateway.mastercard.com/static/threeDS/1.3.0/three-ds.min.js',\n                );\n            });\n\n            it('returns the Script from the window', async () => {\n                const ThreeDSjs = await cbaMPGSScriptLoader.load(true);\n\n                expect(ThreeDSjs).toBe(threeDsScript);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/cba-mpgs-integration/src/cba-mpgs-script-loader.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\nimport { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CBAMPGSHostWindow, ThreeDSjs } from './cba-mpgs';\n\nexport default class CBAMPGSScriptLoader {\n    constructor(private _scriptLoader: ScriptLoader, private _window: CBAMPGSHostWindow = window) {}\n\n    async load(testMode?: boolean): Promise<ThreeDSjs> {\n        await this._scriptLoader.loadScript(\n            `//${\n                testMode ? 'test' : 'ap'\n            }-gateway.mastercard.com/static/threeDS/1.3.0/three-ds.min.js`,\n        );\n\n        if (!this._window.ThreeDS) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this._window.ThreeDS;\n    }\n}\n"
  },
  {
    "path": "packages/cba-mpgs-integration/src/cba-mpgs.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    THREE_D_SECURE_AVAILABLE,\n    THREE_D_SECURE_BUSY,\n    THREE_D_SECURE_PROCEED,\n    ThreeDSAuthenticationResponse,\n    ThreeDSjs,\n} from './cba-mpgs';\n\nexport function getCBAMPGSScriptMock(\n    configureSuccess = true,\n    initiateAuthSuccess = true,\n    authPayerSuccess = true,\n    authAvailable = true,\n    includeErrorStep1 = false,\n    includeErrorStep2 = false,\n    retryErrorCode = false,\n): ThreeDSjs {\n    const authenticatePayerRetry = jest\n        .fn()\n        .mockImplementationOnce((_orderId, _transactionId, callback) =>\n            callback(\n                authenticationResponse(\n                    authPayerSuccess,\n                    retryErrorCode,\n                    includeErrorStep2,\n                    authAvailable,\n                ),\n            ),\n        )\n        .mockImplementationOnce((_orderId, _transactionId, callback) =>\n            callback(\n                authenticationResponse(authPayerSuccess, false, includeErrorStep2, authAvailable),\n            ),\n        );\n\n    return {\n        configure: jest.fn((config) => Promise.resolve(config.callback())),\n        isConfigured: jest.fn(() => configureSuccess),\n        initiateAuthentication: jest.fn((_orderId, _transactionId, callback) =>\n            callback(\n                authenticationResponse(\n                    initiateAuthSuccess,\n                    retryErrorCode,\n                    includeErrorStep1,\n                    authAvailable,\n                ),\n            ),\n        ),\n        authenticatePayer: retryErrorCode\n            ? authenticatePayerRetry\n            : jest.fn((_orderId, _transactionId, callback) =>\n                  callback(\n                      authenticationResponse(\n                          authPayerSuccess,\n                          retryErrorCode,\n                          includeErrorStep2,\n                          authAvailable,\n                      ),\n                  ),\n              ),\n    };\n}\n\nexport function getCBAMPGSScriptMockRetryOnly(\n    configureSuccess = true,\n    initiateAuthSuccess = true,\n    authPayerSuccess = true,\n    authAvailable = true,\n    includeErrorStep1 = false,\n    includeErrorStep2 = false,\n    retryErrorCode = false,\n): ThreeDSjs {\n    const authenticatePayerRetry = jest\n        .fn()\n        .mockImplementation((_orderId, _transactionId, callback) =>\n            callback(\n                authenticationResponse(\n                    authPayerSuccess,\n                    retryErrorCode,\n                    includeErrorStep2,\n                    authAvailable,\n                ),\n            ),\n        );\n\n    return {\n        configure: jest.fn((config) => Promise.resolve(config.callback())),\n        isConfigured: jest.fn(() => configureSuccess),\n        initiateAuthentication: jest.fn((_orderId, _transactionId, callback) =>\n            callback(\n                authenticationResponse(\n                    initiateAuthSuccess,\n                    retryErrorCode,\n                    includeErrorStep1,\n                    authAvailable,\n                ),\n            ),\n        ),\n        authenticatePayer: retryErrorCode\n            ? authenticatePayerRetry\n            : jest.fn((_orderId, _transactionId, callback) =>\n                  callback(\n                      authenticationResponse(\n                          authPayerSuccess,\n                          retryErrorCode,\n                          includeErrorStep2,\n                          authAvailable,\n                      ),\n                  ),\n              ),\n    };\n}\n\nfunction authenticationResponse(\n    success: boolean,\n    retryError?: boolean,\n    includeError?: boolean,\n    authAvailable?: boolean,\n): ThreeDSAuthenticationResponse {\n    const response: ThreeDSAuthenticationResponse = {\n        restApiResponse: {\n            transaction: {\n                authenticationStatus: authAvailable\n                    ? THREE_D_SECURE_AVAILABLE\n                    : 'AUTHENTICATION_UNAVAILABLE',\n            },\n        },\n        gatewayRecommendation: success ? THREE_D_SECURE_PROCEED : 'DO_NOT_PROCEED',\n    };\n\n    if (includeError) {\n        response.error = {\n            code: 'error_code',\n            msg: 'something went wrong',\n            cause: retryError ? THREE_D_SECURE_BUSY : undefined,\n        };\n    }\n\n    return response;\n}\n\nexport function getCBAMPGS(): PaymentMethod {\n    return {\n        id: 'cba_mpgs',\n        gateway: '',\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: [],\n        clientToken: 'foo',\n        config: {\n            displayName: 'CBA MPGS',\n            is3dsEnabled: true,\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        initializationData: {\n            isTestModeFlagEnabled: false,\n            merchantId: 'ABC123',\n        },\n        skipRedirectConfirmationAlert: true,\n    };\n}\n"
  },
  {
    "path": "packages/cba-mpgs-integration/src/cba-mpgs.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\nimport { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport const THREE_D_SECURE_PROCEED = 'PROCEED';\nexport const THREE_D_SECURE_BUSY = 'SERVER_BUSY';\nexport const THREE_D_SECURE_AVAILABLE = 'AUTHENTICATION_AVAILABLE';\n\nexport interface CBAMPGSHostWindow extends Window {\n    ThreeDS?: ThreeDSjs;\n}\n\nexport interface ThreeDSjs {\n    // Configuration method for initializing the API.\n    configure(config: ThreeDSConfiguration): Promise<void>;\n    // Convenience method to check if the API has been configured successfully.\n    isConfigured(): boolean;\n    // Authentication for the arguments passed.\n    initiateAuthentication(\n        orderId: string,\n        transactionId: string,\n        callback: (data: ThreeDSAuthenticationResponse) => void,\n    ): void;\n    authenticatePayer(\n        orderId: string,\n        transactionId: string,\n        callback: (data: ThreeDSAuthenticationResponse) => void,\n        optionalParams?: AuthenticatePayerOptionalParams,\n    ): void;\n}\n\nexport interface RestApiResponse {\n    transaction: {\n        authenticationStatus: string;\n    };\n}\n\n// Configuration required to configure ThreeDS\nexport interface ThreeDSConfiguration {\n    merchantId: string;\n    sessionId: string;\n    configuration: ThreeDSAPIConfiguration;\n    callback(): void;\n}\n\nexport interface ThreeDSAuthenticationResponse {\n    error?: ThreeDSAuthenticationError;\n    restApiResponse: RestApiResponse;\n    gatewayRecommendation: string;\n}\n\nexport interface AuthenticatePayerOptionalParams {\n    fullScreenRedirect: boolean;\n}\n\nexport interface ThreeDSAuthenticationError {\n    code: string;\n    msg: string;\n    cause?: string;\n}\n\n// JSON value supporting data elements like userLanguage, REST API version (wsVersion)\nexport interface ThreeDSAPIConfiguration {\n    // A language identifier or IETF language tag to control the language of the payment page displayed to the payer.\n    //  For example, \"en_US\", es, \"fr-CA\". By default, the language is \"en_US\".\n    userLanguage: string;\n    // The Web Services API version that you submitted the request in. IE: 62\n    wsVersion: number;\n}\n\nexport interface CBAMPGSPaymentMethod extends PaymentMethod {\n    initializationData: CBAMPGSInitializationData;\n}\n\nexport interface CBAMPGSInitializationData {\n    isTestModeFlagEnabled?: boolean;\n    merchantId: string;\n}\n\nexport interface ThreeDSErrorBody {\n    three_ds_result: {\n        token: string;\n    };\n}\n"
  },
  {
    "path": "packages/cba-mpgs-integration/src/create-cba-mpgs-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport CBAMPGSPaymentStrategy from './cba-mpgs-payment-strategy';\nimport createCBAMPGSPaymentStrategy from './create-cba-mpgs-payment-strategy';\n\ndescribe('createCBAMPGSPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates CBAMPGS payment strategy', () => {\n        const strategy = createCBAMPGSPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(CBAMPGSPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/cba-mpgs-integration/src/create-cba-mpgs-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport CBAMPGSPaymentStrategy from './cba-mpgs-payment-strategy';\nimport CBAMPGSScriptLoader from './cba-mpgs-script-loader';\n\nconst createCBAMPGSPaymentStrategy: PaymentStrategyFactory<CBAMPGSPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new CBAMPGSPaymentStrategy(\n        paymentIntegrationService,\n        new CBAMPGSScriptLoader(getScriptLoader()),\n    );\n};\n\nexport default toResolvableModule(createCBAMPGSPaymentStrategy, [{ id: 'cba_mpgs' }]);\n"
  },
  {
    "path": "packages/cba-mpgs-integration/src/index.ts",
    "content": "export { default as createCBAMPGSPaymentStrategy } from './create-cba-mpgs-payment-strategy';\n"
  },
  {
    "path": "packages/cba-mpgs-integration/src/is-cba-mpgs-payment-method-like.ts",
    "content": "/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CBAMPGSPaymentMethod, ThreeDSErrorBody } from './cba-mpgs';\n\nexport function isCBAMPGSPaymentMethodLike(\n    paymentMethod: PaymentMethod,\n): paymentMethod is CBAMPGSPaymentMethod {\n    return (\n        typeof paymentMethod === 'object' &&\n        paymentMethod !== null &&\n        'initializationData' in paymentMethod &&\n        typeof (paymentMethod as CBAMPGSPaymentMethod).initializationData === 'object' &&\n        (paymentMethod as CBAMPGSPaymentMethod).initializationData !== null &&\n        'merchantId' in (paymentMethod as CBAMPGSPaymentMethod).initializationData &&\n        typeof (paymentMethod as CBAMPGSPaymentMethod).initializationData.merchantId === 'string' &&\n        (typeof (paymentMethod as CBAMPGSPaymentMethod).initializationData.isTestModeFlagEnabled ===\n            'boolean' ||\n            typeof (paymentMethod as CBAMPGSPaymentMethod).initializationData\n                .isTestModeFlagEnabled === 'undefined')\n    );\n}\n\nexport function isThreeDSErrorBody(body: unknown): body is ThreeDSErrorBody {\n    return (\n        typeof body === 'object' &&\n        body !== null &&\n        'three_ds_result' in body &&\n        typeof (body as ThreeDSErrorBody).three_ds_result === 'object' &&\n        (body as ThreeDSErrorBody).three_ds_result !== null &&\n        'token' in (body as ThreeDSErrorBody).three_ds_result &&\n        typeof (body as ThreeDSErrorBody).three_ds_result.token === 'string'\n    );\n}\n"
  },
  {
    "path": "packages/cba-mpgs-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}"
  },
  {
    "path": "packages/cba-mpgs-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/cba-mpgs-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": { \n            \"@typescript-eslint/naming-convention\": \"off\",\n            \"@typescript-eslint/consistent-type-assertions\": \"off\",\n            \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n            \"@typescript-eslint/no-floating-promises\": \"off\",\n            \"@typescript-eslint/no-unsafe-call\": \"off\",\n            \"@typescript-eslint/no-explicit-any\": \"off\",\n            \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n             \"@typescript-eslint/no-unsafe-return\": \"off\",\n            \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n            \"@typescript-eslint/no-unsafe-argument\": \"off\"\n        }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/README.md",
    "content": "# checkoutcom-integration\n\nThis package contains the integration layer for the [Checkoutcom](https://www.checkoutcom.com/) provider.\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test checkoutcom-custom-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\nRun `nx test checkoutcom-integration --testFile=\"<FILE_NAME>\"` to execute unit tests for a single file.\n\n## Running lint\n\nRun `nx lint checkoutcom-custom-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'checkoutcom-custom-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/checkoutcom-custom-integration',\n};\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/project.json",
    "content": "{\n    \"name\": \"checkoutcom-custom-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/checkoutcom-custom-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/checkoutcom-custom-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/checkoutcom-custom-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/checkoutcom-custom-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-apm/checkoutcom-apm-payment-strategy.test.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { merge, noop, omit } from 'lodash';\n\nimport {\n    HostedFieldType,\n    HostedForm,\n    OrderFinalizationNotRequiredError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentStatusTypes,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getErrorPaymentResponseBody,\n    getOrderRequestBody,\n    getPaymentMethod,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getCheckoutcom } from '../checkoutcom';\n\nimport CheckoutComAPMPaymentStrategy from './checkoutcom-apm-payment-strategy';\n\ndescribe('CheckoutcomAPMPaymentStrategy', () => {\n    let formPoster: FormPoster;\n    let strategy: CheckoutComAPMPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethodMock: PaymentMethod;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paymentMethodMock = getCheckoutcom();\n        formPoster = createFormPoster();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        const state = paymentIntegrationService.getState();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(state);\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation((_url, _data, callback = noop) =>\n            callback(),\n        );\n        strategy = new CheckoutComAPMPaymentStrategy(paymentIntegrationService);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('submits order without payment data', async () => {\n        const payload = getOrderRequestBody();\n        const options = { methodId: 'oxxo' };\n\n        await strategy.execute(payload, options);\n\n        expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n            omit(payload, 'payment'),\n            options,\n        );\n    });\n\n    it('submits document field when methodId is supported', async () => {\n        const paymentWithDocument = {\n            payment: {\n                methodId: 'oxxo',\n                gatewayId: 'checkoutcom',\n                paymentData: {\n                    ccDocument: '',\n                },\n            },\n        };\n\n        Object.defineProperty(window, 'location', {\n            value: {\n                replace: jest.fn(),\n            },\n        });\n\n        const payload = merge(getOrderRequestBody(), paymentWithDocument);\n        const options = { methodId: 'oxxo' };\n\n        const expectedPayment = merge(payload.payment, {\n            paymentData: { formattedPayload: { ccDocument: '' } },\n        });\n\n        await strategy.execute(payload, options);\n\n        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n    });\n\n    it('returns checkout state', async () => {\n        const paymentWithDocument = {\n            payment: {\n                methodId: 'oxxo',\n                gatewayId: 'checkoutcom',\n                paymentData: {\n                    iban: 'iban-code',\n                    bic: 'bic-code',\n                },\n            },\n        };\n        const payload = merge(getOrderRequestBody(), paymentWithDocument);\n        const options = { methodId: 'oxxo' };\n\n        const output = await strategy.execute(payload);\n\n        await expect(strategy.execute(payload, options)).resolves.toEqual(output);\n    });\n\n    it('redirects to target url when additional action redirect is provided', async () => {\n        const payload = {\n            payment: {\n                gatewayId: 'checkoutcom',\n                methodId: 'oxxo',\n                paymentData: {\n                    terms: false,\n                    shouldCreateAccount: true,\n                    shouldSaveInstrument: false,\n                },\n            },\n        };\n\n        Object.defineProperty(window, 'location', {\n            value: {\n                replace: jest.fn(),\n            },\n        });\n        await strategy.initialize();\n\n        const redirect_url = 'http://redirect-url.com';\n        const error = new RequestError(\n            getResponse({\n                additional_action_required: {\n                    data: {\n                        redirect_url,\n                    },\n                    type: 'offsite_redirect',\n                },\n                status: 'additional_action_required',\n                provider_data: JSON.stringify({\n                    merchantid: '123',\n                }),\n            }),\n        );\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n            Promise.reject(error),\n        );\n\n        void strategy.execute(payload);\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(window.location.replace).toHaveBeenCalledWith('http://redirect-url.com');\n    });\n\n    it('does not redirect to target url if additional action is not provided', async () => {\n        const response = new RequestError(getResponse(getErrorPaymentResponseBody()));\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n            Promise.reject(response),\n        );\n\n        const payload = getOrderRequestBody();\n\n        await expect(strategy.execute(payload)).rejects.toThrow(RequestError);\n    });\n\n    describe('when hosted form is enabled', () => {\n        let form: HostedForm;\n        let initializeOptions: PaymentInitializeOptions;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                submit: jest.fn(),\n                validate: jest.fn(() => Promise.resolve()),\n                detach: jest.fn(),\n                getBin: jest.fn(),\n                getCardType: jest.fn(),\n            };\n\n            initializeOptions = {\n                creditCard: {\n                    form: {\n                        fields: {\n                            [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                            [HostedFieldType.CardName]: { containerId: 'card-name' },\n                            [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                        },\n                    },\n                },\n                methodId: 'checkoutcom',\n            };\n\n            paymentMethodMock.config.isHostedFormEnabled = true;\n\n            paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n            const state = paymentIntegrationService.getState();\n\n            jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(\n                merge(getPaymentMethod(), { config: { isHostedFormEnabled: true } }),\n            );\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(state);\n            jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockImplementation(jest.fn());\n            jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n            jest.spyOn(formPoster, 'postForm').mockImplementation((_url, _data, callback = noop) =>\n                callback(),\n            );\n\n            strategy = new CheckoutComAPMPaymentStrategy(paymentIntegrationService);\n            jest.spyOn(paymentIntegrationService, 'loadCurrentOrder').mockImplementation(jest.fn());\n            jest.spyOn(paymentIntegrationService, 'createHostedForm').mockReturnValue(form);\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('creates hosted form', async () => {\n            paymentMethodMock.config.isHostedFormEnabled = true;\n\n            await strategy.initialize(initializeOptions);\n\n            expect(paymentIntegrationService.createHostedForm).toHaveBeenCalled();\n        });\n\n        it('attaches hosted form to container', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(form.attach).toHaveBeenCalled();\n        });\n\n        it('submits payment data with hosted form', async () => {\n            const payload = getOrderRequestBody();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.submit).toHaveBeenCalledWith(payload.payment);\n        });\n\n        it('validates user input before submitting data', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(getOrderRequestBody());\n\n            expect(form.validate).toHaveBeenCalled();\n        });\n\n        it('does not submit payment data with hosted form if validation fails', async () => {\n            jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n            try {\n                await strategy.initialize(initializeOptions);\n                await strategy.execute(getOrderRequestBody());\n            } catch (error) {\n                expect(form.submit).not.toHaveBeenCalled();\n            }\n        });\n\n        it('loads current order after payment submission', async () => {\n            const payload = getOrderRequestBody();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.loadCurrentOrder).toHaveBeenCalled();\n        });\n\n        it('redirects to target url when additional action redirect is provided', async () => {\n            const error = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [],\n                    additional_action_required: {\n                        data: {\n                            redirect_url: 'http://redirect-url.com',\n                        },\n                        type: 'offsite_redirect',\n                    },\n                    three_ds_result: {},\n                    status: 'error',\n                }),\n            );\n\n            Object.defineProperty(window, 'location', {\n                value: {\n                    replace: jest.fn(),\n                },\n            });\n\n            jest.spyOn(form, 'submit').mockRejectedValue(error);\n\n            const payload = getOrderRequestBody();\n\n            await strategy.initialize(initializeOptions);\n            strategy.execute(payload);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(window.location.replace).toHaveBeenCalledWith('http://redirect-url.com');\n        });\n\n        it('does not finalize order if order is not created', async () => {\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getOrder: () => undefined,\n                getPaymentStatus: () => PaymentStatusTypes.INITIALIZE,\n            });\n\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n            expect(paymentIntegrationService.finalizeOrder).not.toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-apm/checkoutcom-apm-payment-strategy.ts",
    "content": "import {\n    CreditCardInstrument,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInstrument,\n    PaymentRequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithDocumentInstrument } from '../checkoutcom';\nimport CheckoutComCustomPaymentStrategy from '../checkoutcom-custom-payment-strategy';\n\nconst DOCUMENT_SUPPORTED_APMS = ['boleto', 'oxxo', 'qpay', 'ideal'];\n\nexport default class CheckoutComAPMPaymentStrategy extends CheckoutComCustomPaymentStrategy {\n    protected async _executeWithoutHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<void> {\n        const { payment, ...order } = payload;\n        const paymentData = payment?.paymentData;\n\n        if (!payment || !paymentData) {\n            throw new PaymentArgumentInvalidError(['payment.paymentData']);\n        }\n\n        await this._paymentIntegrationService.submitOrder(order, options);\n\n        try {\n            await this._paymentIntegrationService.submitPayment({\n                ...payment,\n                paymentData: {\n                    ...paymentData,\n                    formattedPayload: this._createFormattedPayload(\n                        payment.methodId,\n                        paymentData as PaymentInstrument,\n                    ),\n                },\n            });\n        } catch (error) {\n            return this._processResponse(error);\n        }\n    }\n\n    private _createFormattedPayload(\n        methodId: string,\n        paymentData: PaymentInstrument | (CreditCardInstrument & WithDocumentInstrument),\n    ): WithDocumentInstrument {\n        const formattedPayload: WithDocumentInstrument = { ccDocument: '' };\n        const ccDocument = 'ccDocument' in paymentData ? paymentData.ccDocument : '';\n\n        if (DOCUMENT_SUPPORTED_APMS.indexOf(methodId) !== -1 && ccDocument) {\n            formattedPayload.ccDocument = ccDocument;\n        }\n\n        return formattedPayload;\n    }\n}\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-apm/create-checkoutcom-apm-payment-strategy.test.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { CheckoutComAPMPaymentStrategy, createCheckoutComAPMPaymentStrategy } from '..';\n\ndescribe('createCheckoutComAPMPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates checkoutcom APM payment strategy', () => {\n        const strategy = createCheckoutComAPMPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(CheckoutComAPMPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-apm/create-checkoutcom-apm-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport CheckoutComCustomPaymentStrategy from '../checkoutcom-custom-payment-strategy';\n\nimport CheckoutComAPMPaymentStrategy from './checkoutcom-apm-payment-strategy';\n\nconst createCheckoutComAPMPaymentStrategy: PaymentStrategyFactory<\n    CheckoutComCustomPaymentStrategy\n> = (paymentIntegrationService) => {\n    return new CheckoutComAPMPaymentStrategy(paymentIntegrationService);\n};\n\nexport default toResolvableModule(createCheckoutComAPMPaymentStrategy, [\n    { gateway: 'checkoutcom' },\n]);\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-credit-card-payment-strategy.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\n\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    isThreeDSecureRequiredError,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStatusTypes,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class CheckoutComCreditCardPaymentStrategy extends CreditCardPaymentStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        protected formPoster: FormPoster,\n    ) {\n        super(paymentIntegrationService);\n    }\n\n    finalize(options?: PaymentRequestOptions): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const order = state.getOrder();\n\n        if (order && state.getPaymentStatus() === PaymentStatusTypes.FINALIZE) {\n            this.paymentIntegrationService.finalizeOrder(options);\n        }\n\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    protected async _executeWithoutHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<void> {\n        const { payment, ...order } = payload;\n        const paymentData = payment && payment.paymentData;\n\n        if (!payment || !paymentData) {\n            throw new PaymentArgumentInvalidError(['payment.paymentData']);\n        }\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n\n        try {\n            await this.paymentIntegrationService.submitPayment({ ...payment, paymentData });\n        } catch (error) {\n            if (isThreeDSecureRequiredError(error)) {\n                return this._handleThreeDSecure(error);\n            }\n\n            return Promise.reject(error);\n        }\n    }\n\n    protected async _executeWithHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<void> {\n        const { payment, ...order } = payload;\n        const form = this._hostedForm;\n\n        if (!form) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        if (!payment || !payment.methodId) {\n            throw new PaymentArgumentInvalidError(['payment.methodId']);\n        }\n\n        try {\n            await form.validate();\n            await this.paymentIntegrationService.submitOrder(order, options);\n            await form.submit(payment);\n        } catch (error) {\n            if (isThreeDSecureRequiredError(error)) {\n                return this._handleThreeDSecure(error);\n            }\n\n            return Promise.reject(error);\n        }\n\n        this.paymentIntegrationService.loadCurrentOrder();\n    }\n\n    private _handleThreeDSecure(error: RequestError): Promise<void> {\n        const { acs_url, payer_auth_request, callback_url, merchant_data } =\n            error.body.three_ds_result;\n\n        return new Promise<void>(() =>\n            this.formPoster.postForm(acs_url, {\n                PaReq: payer_auth_request || null,\n                TermUrl: callback_url || null,\n                MD: merchant_data || null,\n            }),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-custom-payment-strategy.test.ts",
    "content": "import { merge } from 'lodash';\n\nimport {\n    Checkout,\n    HostedFieldType,\n    HostedForm,\n    OrderFinalizationNotRequiredError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCheckout,\n    getErrorPaymentResponseBody,\n    getOrderRequestBody,\n    getPaymentMethod,\n    getResponse,\n    getShippingAddress,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getCheckoutcom } from './checkoutcom';\nimport CheckoutComCustomPaymentStrategy from './checkoutcom-custom-payment-strategy';\n\ndescribe('CheckoutComCustomPaymentStrategy', () => {\n    let strategy: CheckoutComCustomPaymentStrategy;\n    let checkoutMock: Checkout;\n    let paymentMethodMock: PaymentMethod;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        strategy = new CheckoutComCustomPaymentStrategy(paymentIntegrationService);\n        paymentMethodMock = getCheckoutcom();\n        checkoutMock = getCheckout();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n            getBillingAddress(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n            getShippingAddress(),\n        );\n\n        jest.spyOn(paymentIntegrationService, 'initializePayment').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n            checkoutMock,\n        );\n    });\n\n    it('is special type of credit card strategy', () => {\n        expect(strategy).toBeInstanceOf(CheckoutComCustomPaymentStrategy);\n    });\n\n    describe('#execute', () => {\n        let form: HostedForm;\n        let initializeOptions: PaymentInitializeOptions;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                submit: jest.fn(),\n                validate: jest.fn(() => Promise.resolve()),\n                detach: jest.fn(),\n                getBin: jest.fn(),\n                getCardType: jest.fn(),\n            };\n            initializeOptions = {\n                creditCard: {\n                    form: {\n                        fields: {\n                            [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                            [HostedFieldType.CardName]: { containerId: 'card-name' },\n                            [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                        },\n                    },\n                },\n                methodId: 'checkoutcom',\n            };\n\n            const state = paymentIntegrationService.getState();\n\n            jest.spyOn(state, 'getCheckoutOrThrow').mockReturnValue(checkoutMock);\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(merge(getPaymentMethod(), { config: { isHostedFormEnabled: true } }));\n            jest.spyOn(paymentIntegrationService, 'createHostedForm').mockReturnValue(form);\n        });\n\n        it('validates user input before submitting data', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(getOrderRequestBody());\n\n            expect(form.validate).toHaveBeenCalled();\n        });\n\n        it('submits the order', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(getOrderRequestBody());\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('submits payment data with hosted form', async () => {\n            const payload = getOrderRequestBody();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.submit).toHaveBeenCalledWith(payload.payment);\n        });\n\n        it('does not submit payment data with hosted form if validation fails', async () => {\n            jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n            try {\n                await strategy.initialize(initializeOptions);\n                await strategy.execute(getOrderRequestBody());\n            } catch (error) {\n                expect(form.submit).not.toHaveBeenCalled();\n            }\n        });\n\n        it('loads current order after payment submission', async () => {\n            const payload = getOrderRequestBody();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.loadCurrentOrder).toHaveBeenCalled();\n        });\n\n        it('redirects to target url when additional action redirect is provided', async () => {\n            const error = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [],\n                    additional_action_required: {\n                        data: {\n                            redirect_url: 'http://redirect-url.com',\n                        },\n                        type: 'offsite_redirect',\n                    },\n                    three_ds_result: {},\n                    status: 'error',\n                }),\n            );\n\n            Object.defineProperty(window, 'location', {\n                value: {\n                    replace: jest.fn(),\n                },\n            });\n\n            jest.spyOn(form, 'submit').mockRejectedValue(error);\n\n            await strategy.initialize(initializeOptions);\n            strategy.execute(getOrderRequestBody());\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(window.location.replace).toHaveBeenCalledWith('http://redirect-url.com');\n        });\n    });\n\n    describe('#finalize', () => {\n        it('should throw an error to inform that order finalization is not required', async () => {\n            const finalize = strategy.finalize();\n\n            await expect(finalize).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-custom-payment-strategy.ts",
    "content": "import { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    isRequestError,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStatusTypes,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { AdditionalActionRequired, AdditionalActionType } from './checkoutcom';\n\nexport default class CheckoutComCustomPaymentStrategy extends CreditCardPaymentStrategy {\n    constructor(protected paymentIntegrationService: PaymentIntegrationService) {\n        super(paymentIntegrationService);\n    }\n    finalize(options?: PaymentRequestOptions): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const order = state.getOrder();\n\n        if (order && state.getPaymentStatus() === PaymentStatusTypes.FINALIZE) {\n            this.paymentIntegrationService.finalizeOrder(options);\n        }\n\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    protected async _executeWithHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<void> {\n        const { payment, ...order } = payload;\n        const form = this._hostedForm;\n\n        if (!form) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        if (!payment || !payment.methodId) {\n            throw new PaymentArgumentInvalidError(['payment.methodId']);\n        }\n\n        try {\n            await form.validate();\n            await this.paymentIntegrationService.submitOrder(order, options);\n            await form.submit(payment);\n        } catch (error) {\n            return this._processResponse(error);\n        }\n\n        this.paymentIntegrationService.loadCurrentOrder();\n    }\n\n    protected _processResponse(error: unknown): Promise<void> {\n        if (!isRequestError(error)) {\n            return Promise.reject(error);\n        }\n\n        const additionalActionRequired: AdditionalActionRequired =\n            error.body.additional_action_required;\n\n        // TODO validate all possible responses and perform respective additional actions\n        if (\n            additionalActionRequired &&\n            additionalActionRequired.type === AdditionalActionType.OffsiteRedirect\n        ) {\n            return this._performRedirect(additionalActionRequired);\n        }\n\n        return Promise.reject(error);\n    }\n\n    private _performRedirect(additionalActionRequired: AdditionalActionRequired): Promise<void> {\n        return new Promise(() => {\n            window.location.replace(additionalActionRequired.data.redirect_url);\n        });\n    }\n}\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-ideal/checkoutcom-ideal-payment-strategy.test.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { merge, noop } from 'lodash';\n\nimport {\n    HostedFieldType,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    getPaymentMethod,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport CheckoutcomiDealPaymentStrategy from './checkoutcom-ideal-payment-strategy';\n\ndescribe('CheckoutcomiDealPaymentStrategy', () => {\n    let strategy: CheckoutcomiDealPaymentStrategy;\n    let paymentMethodMock: PaymentMethod;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let initializeOptions: PaymentInitializeOptions;\n    let formPoster: FormPoster;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        strategy = new CheckoutcomiDealPaymentStrategy(paymentIntegrationService);\n\n        formPoster = createFormPoster();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getPaymentMethod(),\n        );\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation((_url, _data, callback = noop) =>\n            callback(),\n        );\n\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n        strategy = new CheckoutcomiDealPaymentStrategy(paymentIntegrationService);\n    });\n\n    it('returns checkout state', async () => {\n        initializeOptions = {\n            creditCard: {\n                form: {\n                    fields: {\n                        [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                        [HostedFieldType.CardName]: { containerId: 'card-name' },\n                        [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                    },\n                },\n            },\n            methodId: 'checkoutcom',\n        };\n\n        const options = {\n            payment: {\n                methodId: 'ideal',\n                gatewayId: 'checkoutcom',\n            },\n        };\n        const payload = merge(getOrderRequestBody(), options);\n\n        await strategy.initialize(initializeOptions);\n\n        const output = await strategy.execute(getOrderRequestBody());\n\n        await expect(strategy.execute(payload)).resolves.toEqual(output);\n    });\n\n    it('submits bic field when methodId is supported', async () => {\n        const paymentWithDocument = {\n            payment: {\n                methodId: 'ideal',\n                gatewayId: 'checkoutcom',\n                paymentData: {\n                    bic: 'TESTCODE',\n                },\n            },\n        };\n        const payload = merge(getOrderRequestBody(), paymentWithDocument);\n        const options = { methodId: 'ideal' };\n\n        const expectedPayment = merge(payload.payment, {\n            paymentData: { formattedPayload: { bic: 'TESTCODE' } },\n        });\n\n        await strategy.execute(payload, options);\n\n        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n    });\n\n    it('doees not submit bic field when methodId is unsupported', async () => {\n        const paymentWithDocument = {\n            payment: {\n                methodId: 'notideal',\n                gatewayId: 'checkoutcom',\n                paymentData: {\n                    bic: 'TESTCODE',\n                },\n            },\n        };\n        const payload = merge(getOrderRequestBody(), paymentWithDocument);\n        const options = { methodId: 'ideal' };\n\n        const expectedPayment = merge(payload.payment, {\n            paymentData: { formattedPayload: undefined },\n        });\n\n        await strategy.execute(payload, options);\n\n        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n    });\n});\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-ideal/checkoutcom-ideal-payment-strategy.ts",
    "content": "import {\n    CreditCardInstrument,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInstrument,\n    PaymentRequestOptions,\n    WithIdealInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport CheckoutComCustomPaymentStrategy from '../checkoutcom-custom-payment-strategy';\n\nconst CHECKOUTCOM_IDEAL_PAYMENT_METHOD = 'ideal';\n\nexport default class CheckoutComiDealPaymentStrategy extends CheckoutComCustomPaymentStrategy {\n    protected async _executeWithoutHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<void> {\n        const { payment, ...order } = payload;\n        const paymentData = payment?.paymentData;\n\n        if (!payment || !paymentData) {\n            throw new PaymentArgumentInvalidError(['payment.paymentData']);\n        }\n\n        await this._paymentIntegrationService.submitOrder(order, options);\n\n        try {\n            await this._paymentIntegrationService.submitPayment({\n                ...payment,\n                paymentData: {\n                    ...paymentData,\n                    formattedPayload: this._createFormattedPayload(\n                        payment.methodId,\n                        paymentData as PaymentInstrument,\n                    ),\n                },\n            });\n        } catch (error) {\n            return this._processResponse(error);\n        }\n    }\n\n    private _createFormattedPayload(\n        methodId: string,\n        paymentData: PaymentInstrument | (CreditCardInstrument & WithIdealInstrument),\n    ): WithIdealInstrument | undefined {\n        if (CHECKOUTCOM_IDEAL_PAYMENT_METHOD === methodId && 'bic' in paymentData) {\n            return { bic: paymentData.bic };\n        }\n    }\n}\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-ideal/create-checkoutcom-ideal-payment-strategy.test.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { createCheckoutComIdealPaymentStrategy } from '..';\n\nimport CheckoutComiDealPaymentStrategy from './checkoutcom-ideal-payment-strategy';\n\ndescribe('createCheckoutComiDealPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates checkoutcom iDeal payment strategy', () => {\n        const strategy = createCheckoutComIdealPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(CheckoutComiDealPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-ideal/create-checkoutcom-ideal-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport CheckoutComiDealPaymentStrategy from './checkoutcom-ideal-payment-strategy';\n\nconst createCheckoutComiDealPaymentStrategy: PaymentStrategyFactory<\n    CheckoutComiDealPaymentStrategy\n> = (paymentIntegrationService) => {\n    return new CheckoutComiDealPaymentStrategy(paymentIntegrationService);\n};\n\nexport default toResolvableModule(createCheckoutComiDealPaymentStrategy, [\n    { gateway: 'checkoutcom', id: 'ideal' },\n]);\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-sepa/checkoutcom-fawry-payment-strategy.test.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { merge, noop } from 'lodash';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    getPaymentMethod,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport CheckoutComFawryPaymentStrategy from './checkoutcom-fawry-payment-strategy';\n\ndescribe('CheckoutcomFawryPaymentStrategy', () => {\n    let formPoster: FormPoster;\n    let strategy: CheckoutComFawryPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        formPoster = createFormPoster();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getPaymentMethod(),\n        );\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation((_url, _data, callback = noop) =>\n            callback(),\n        );\n\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n        strategy = new CheckoutComFawryPaymentStrategy(paymentIntegrationService);\n    });\n\n    it('returns checkout state', async () => {\n        const paymentWithDocument = {\n            payment: {\n                methodId: 'fawry',\n                gatewayId: 'checkoutcom',\n                paymentData: {\n                    customerMobile: '1234567890',\n                    customerEmail: 'test@test.com',\n                },\n            },\n        };\n\n        const payload = merge(getOrderRequestBody(), paymentWithDocument);\n\n        const output = await strategy.execute(merge(getOrderRequestBody(), payload));\n\n        await expect(strategy.execute(payload)).resolves.toEqual(output);\n    });\n\n    it('submits customer fields when methodId is supported', async () => {\n        const paymentWithDocument = {\n            payment: {\n                methodId: 'fawry',\n                gatewayId: 'checkoutcom',\n                paymentData: {\n                    customerMobile: '1234567890',\n                    customerEmail: 'test@test.com',\n                },\n            },\n        };\n        const payload = merge(getOrderRequestBody(), paymentWithDocument);\n        const options = { methodId: 'fawry' };\n\n        const expectedPayment = merge(payload.payment, {\n            paymentData: {\n                formattedPayload: { customerMobile: '1234567890', customerEmail: 'test@test.com' },\n            },\n        });\n\n        await strategy.execute(payload, options);\n\n        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n    });\n\n    it('doees not submit customer fields when methodId is unsupported', async () => {\n        const paymentWithDocument = {\n            payment: {\n                methodId: 'notfawry',\n                gatewayId: 'checkoutcom',\n                paymentData: {\n                    customerMobile: '1234567890',\n                    customerEmail: 'test@test.com',\n                },\n            },\n        };\n        const payload = merge(getOrderRequestBody(), paymentWithDocument);\n        const options = { methodId: 'fawry' };\n\n        const expectedPayment = merge(payload.payment, {\n            paymentData: { formattedPayload: undefined },\n        });\n\n        await strategy.execute(payload, options);\n\n        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n    });\n});\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-sepa/checkoutcom-fawry-payment-strategy.ts",
    "content": "import {\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInstrument,\n    PaymentRequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithCheckoutcomFawryInstrument } from '../checkoutcom';\nimport CheckoutComCustomPaymentStrategy from '../checkoutcom-custom-payment-strategy';\n\nconst CHECKOUTCOM_FAWRY_PAYMENT_METHOD = 'fawry';\n\nexport default class CheckoutComFawryPaymentStrategy extends CheckoutComCustomPaymentStrategy {\n    protected async _executeWithoutHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<void> {\n        const { payment, ...order } = payload;\n        const paymentData = payment && payment.paymentData;\n\n        if (!payment || !paymentData) {\n            throw new PaymentArgumentInvalidError(['payment.paymentData']);\n        }\n\n        await this._paymentIntegrationService.submitOrder(order, options);\n\n        try {\n            await this._paymentIntegrationService.submitPayment({\n                ...payment,\n                paymentData: {\n                    ...paymentData,\n                    formattedPayload: this._createFormattedPayload(\n                        payment.methodId,\n                        paymentData as PaymentInstrument,\n                    ),\n                },\n            });\n        } catch (error) {\n            return this._processResponse(error);\n        }\n    }\n\n    private _createFormattedPayload(\n        methodId: string,\n        paymentData: PaymentInstrument,\n    ): WithCheckoutcomFawryInstrument | undefined {\n        if (\n            CHECKOUTCOM_FAWRY_PAYMENT_METHOD === methodId &&\n            'customerMobile' in paymentData &&\n            'customerEmail' in paymentData\n        ) {\n            const fawryPaymentData = paymentData as {\n                customerMobile: string;\n                customerEmail: string;\n            };\n\n            return {\n                customerMobile: fawryPaymentData.customerMobile,\n                customerEmail: fawryPaymentData.customerEmail,\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-sepa/checkoutcom-sepa-payment-strategy.test.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { merge, noop, omit } from 'lodash';\n\nimport {\n    HostedFieldType,\n    HostedForm,\n    OrderFinalizationNotRequiredError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentStatusTypes,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getErrorPaymentResponseBody,\n    getOrderRequestBody,\n    getPaymentMethod,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getCheckoutcom } from '../checkoutcom';\n\nimport CheckoutcomSEPAPaymentStrategy from './checkoutcom-sepa-payment-strategy';\n\ndescribe('CheckoutcomSEPAPaymentStrategy', () => {\n    let formPoster: FormPoster;\n    let strategy: CheckoutcomSEPAPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethodMock: PaymentMethod;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paymentMethodMock = getCheckoutcom();\n        formPoster = createFormPoster();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        const state = paymentIntegrationService.getState();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(state);\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation((_url, _data, callback = noop) =>\n            callback(),\n        );\n        strategy = new CheckoutcomSEPAPaymentStrategy(paymentIntegrationService);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('submits order without payment data', async () => {\n        const payload = getOrderRequestBody();\n        const options = { methodId: 'methodId' };\n\n        await strategy.execute(payload, options);\n\n        expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n            omit(payload, 'payment'),\n            options,\n        );\n    });\n\n    it('submits document field when methodId is supported', async () => {\n        const paymentWithDocument = {\n            payment: {\n                methodId: 'sepa',\n                gatewayId: 'checkoutcom',\n                paymentData: {\n                    iban: 'iban-code',\n                    bic: 'bic-code',\n                },\n            },\n        };\n\n        Object.defineProperty(window, 'location', {\n            value: {\n                replace: jest.fn(),\n            },\n        });\n\n        const payload = merge(getOrderRequestBody(), paymentWithDocument);\n        const options = { methodId: 'sepa' };\n\n        const expectedPayment = merge(payload.payment, {\n            paymentData: { formattedPayload: { iban: 'iban-code', bic: 'bic-code' } },\n        });\n\n        await strategy.execute(payload, options);\n\n        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n    });\n\n    it('returns checkout state', async () => {\n        const paymentWithDocument = {\n            payment: {\n                methodId: 'sepa',\n                gatewayId: 'checkoutcom',\n                paymentData: {\n                    iban: 'iban-code',\n                    bic: 'bic-code',\n                },\n            },\n        };\n        const payload = merge(getOrderRequestBody(), paymentWithDocument);\n        const options = { methodId: 'sepa' };\n\n        const output = await strategy.execute(payload);\n\n        await expect(strategy.execute(payload, options)).resolves.toEqual(output);\n    });\n\n    it('redirects to target url when additional action redirect is provided', async () => {\n        const payload = {\n            payment: {\n                gatewayId: 'checkoutcom',\n                methodId: 'sepa',\n                paymentData: {\n                    terms: false,\n                    shouldCreateAccount: true,\n                    shouldSaveInstrument: false,\n                },\n            },\n        };\n\n        Object.defineProperty(window, 'location', {\n            value: {\n                replace: jest.fn(),\n            },\n        });\n        await strategy.initialize();\n\n        const redirect_url = 'http://redirect-url.com';\n        const error = new RequestError(\n            getResponse({\n                additional_action_required: {\n                    data: {\n                        redirect_url,\n                    },\n                    type: 'offsite_redirect',\n                },\n                status: 'additional_action_required',\n                provider_data: JSON.stringify({\n                    merchantid: '123',\n                }),\n            }),\n        );\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n            Promise.reject(error),\n        );\n\n        void strategy.execute(payload);\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(window.location.replace).toHaveBeenCalledWith('http://redirect-url.com');\n    });\n\n    it('does not redirect to target url if additional action is not provided', async () => {\n        const response = new RequestError(getResponse(getErrorPaymentResponseBody()));\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n            Promise.reject(response),\n        );\n\n        await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(RequestError);\n    });\n\n    describe('when hosted form is enabled', () => {\n        let form: HostedForm;\n        let initializeOptions: PaymentInitializeOptions;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                submit: jest.fn(),\n                validate: jest.fn(() => Promise.resolve()),\n                detach: jest.fn(),\n                getBin: jest.fn(),\n                getCardType: jest.fn(),\n            };\n\n            initializeOptions = {\n                creditCard: {\n                    form: {\n                        fields: {\n                            [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                            [HostedFieldType.CardName]: { containerId: 'card-name' },\n                            [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                        },\n                    },\n                },\n                methodId: 'checkoutcom',\n            };\n\n            paymentMethodMock.config.isHostedFormEnabled = true;\n\n            paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n            const state = paymentIntegrationService.getState();\n\n            jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(\n                merge(getPaymentMethod(), { config: { isHostedFormEnabled: true } }),\n            );\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(state);\n            jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockImplementation(jest.fn());\n\n            jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n            jest.spyOn(formPoster, 'postForm').mockImplementation((_url, _data, callback = noop) =>\n                callback(),\n            );\n\n            strategy = new CheckoutcomSEPAPaymentStrategy(paymentIntegrationService);\n            jest.spyOn(paymentIntegrationService, 'loadCurrentOrder').mockImplementation(jest.fn());\n            jest.spyOn(paymentIntegrationService, 'createHostedForm').mockReturnValue(form);\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('creates hosted form', async () => {\n            paymentMethodMock.config.isHostedFormEnabled = true;\n\n            await strategy.initialize(initializeOptions);\n\n            expect(paymentIntegrationService.createHostedForm).toHaveBeenCalled();\n        });\n\n        it('attaches hosted form to container', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(form.attach).toHaveBeenCalled();\n        });\n\n        it('submits payment data with hosted form', async () => {\n            const payload = getOrderRequestBody();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.submit).toHaveBeenCalledWith(payload.payment);\n        });\n\n        it('validates user input before submitting data', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(getOrderRequestBody());\n\n            expect(form.validate).toHaveBeenCalled();\n        });\n\n        it('does not submit payment data with hosted form if validation fails', async () => {\n            jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n            try {\n                await strategy.initialize(initializeOptions);\n                await strategy.execute(getOrderRequestBody());\n            } catch (error) {\n                expect(form.submit).not.toHaveBeenCalled();\n            }\n        });\n\n        it('loads current order after payment submission', async () => {\n            const payload = getOrderRequestBody();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.loadCurrentOrder).toHaveBeenCalled();\n        });\n\n        it('redirects to target url when additional action redirect is provided', async () => {\n            const error = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [],\n                    additional_action_required: {\n                        data: {\n                            redirect_url: 'http://redirect-url.com',\n                        },\n                        type: 'offsite_redirect',\n                    },\n                    three_ds_result: {},\n                    status: 'error',\n                }),\n            );\n\n            Object.defineProperty(window, 'location', {\n                value: {\n                    replace: jest.fn(),\n                },\n            });\n\n            jest.spyOn(form, 'submit').mockRejectedValue(error);\n\n            await strategy.initialize(initializeOptions);\n            strategy.execute(getOrderRequestBody());\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(window.location.replace).toHaveBeenCalledWith('http://redirect-url.com');\n        });\n\n        it('does not finalize order if order is not created', async () => {\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getOrder: () => undefined,\n                getPaymentStatus: () => PaymentStatusTypes.INITIALIZE,\n            });\n\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n            expect(paymentIntegrationService.finalizeOrder).not.toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-sepa/checkoutcom-sepa-payment-strategy.ts",
    "content": "import {\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInstrument,\n    PaymentRequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithCheckoutcomSEPAInstrument } from '../checkoutcom';\nimport CheckoutComCustomPaymentStrategy from '../checkoutcom-custom-payment-strategy';\n\nconst CHECKOUTCOM_SEPA_PAYMENT_METHOD = 'sepa';\n\nexport default class CheckoutComSEPAPaymentStrategy extends CheckoutComCustomPaymentStrategy {\n    protected async _executeWithoutHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<void> {\n        const { payment, ...order } = payload;\n        const paymentData = payment?.paymentData;\n\n        if (!payment || !paymentData) {\n            throw new PaymentArgumentInvalidError(['payment.paymentData']);\n        }\n\n        await this._paymentIntegrationService.submitOrder(order, options);\n\n        try {\n            await this._paymentIntegrationService.submitPayment({\n                ...payment,\n                paymentData: {\n                    ...paymentData,\n                    formattedPayload: this._createFormattedPayload(\n                        payment.methodId,\n                        paymentData as PaymentInstrument,\n                    ),\n                },\n            });\n        } catch (error) {\n            return this._processResponse(error);\n        }\n    }\n\n    private _createFormattedPayload(\n        methodId: string,\n        paymentData: PaymentInstrument,\n    ): WithCheckoutcomSEPAInstrument {\n        const formattedPayload: WithCheckoutcomSEPAInstrument = { iban: '', bic: '' };\n\n        if (\n            methodId === CHECKOUTCOM_SEPA_PAYMENT_METHOD &&\n            document &&\n            'iban' in paymentData &&\n            'bic' in paymentData\n        ) {\n            const { iban, bic } = paymentData as unknown as WithCheckoutcomSEPAInstrument;\n\n            formattedPayload.iban = iban;\n            formattedPayload.bic = bic;\n        }\n\n        return formattedPayload;\n    }\n}\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-sepa/create-checkoutcom-fawry-payment-strategy.test.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { CheckoutComFawryPaymentStrategy, createCheckoutComFawryPaymentStrategy } from '..';\n\ndescribe('createCheckoutComFawryPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates checkoutcom fawry payment strategy', () => {\n        const strategy = createCheckoutComFawryPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(CheckoutComFawryPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-sepa/create-checkoutcom-fawry-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport CheckoutComFawryPaymentStrategy from './checkoutcom-fawry-payment-strategy';\n\nconst createCheckoutComFawryPaymentStrategy: PaymentStrategyFactory<\n    CheckoutComFawryPaymentStrategy\n> = (paymentIntegrationService) => {\n    return new CheckoutComFawryPaymentStrategy(paymentIntegrationService);\n};\n\nexport default toResolvableModule(createCheckoutComFawryPaymentStrategy, [\n    { gateway: 'checkoutcom', id: 'fawry' },\n]);\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-sepa/create-checkoutcom-sepa-payment-strategy.test.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport CheckoutComSEPAPaymentStrategy from './checkoutcom-sepa-payment-strategy';\nimport createCheckoutcomSepaPaymentStrategy from './create-checkoutcom-sepa-payment-strategy';\n\ndescribe('createCheckoutComSepaPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates checkoutcom sepa payment strategy', () => {\n        const strategy = createCheckoutcomSepaPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(CheckoutComSEPAPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom-sepa/create-checkoutcom-sepa-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport CheckoutComSepaPaymentStrategy from './checkoutcom-sepa-payment-strategy';\n\nconst createCheckoutComSepaPaymentStrategy: PaymentStrategyFactory<\n    CheckoutComSepaPaymentStrategy\n> = (paymentIntegrationService) => {\n    return new CheckoutComSepaPaymentStrategy(paymentIntegrationService);\n};\n\nexport default toResolvableModule(createCheckoutComSepaPaymentStrategy, [\n    { gateway: 'checkoutcom', id: 'sepa' },\n]);\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/checkoutcom.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport interface AdditionalActionRequired {\n    type: AdditionalActionType;\n    data: AdditionalRedirectData;\n}\n\nexport interface AdditionalRedirectData {\n    redirect_url: string;\n    transaction_id?: string;\n}\n\nexport enum AdditionalActionType {\n    OffsiteRedirect = 'offsite_redirect',\n}\n\nexport function getCheckoutcom(): PaymentMethod {\n    return {\n        id: 'checkoutcom',\n        logoUrl: '',\n        method: 'checkoutcom',\n        supportedCards: [],\n        config: {\n            displayName: 'Checkout.com',\n            merchantId: '',\n            testMode: true,\n        },\n        initializationData: {\n            checkoutcomkey: 'key',\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport interface WithDocumentInstrument {\n    ccDocument: string;\n}\n\nexport interface WithCheckoutcomSEPAInstrument {\n    iban: string;\n    bic: string;\n}\n\nexport interface WithCheckoutcomFawryInstrument {\n    customerMobile: string;\n    customerEmail: string;\n}\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/create-checkoutcom-credit-card-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport CheckoutComCreditCardPaymentStrategy from './checkoutcom-credit-card-payment-strategy';\n\nconst createCheckoutComCreditCardPaymentStrategy: PaymentStrategyFactory<\n    CheckoutComCreditCardPaymentStrategy\n> = (paymentIntegrationService) => {\n    return new CheckoutComCreditCardPaymentStrategy(paymentIntegrationService, createFormPoster());\n};\n\nexport default toResolvableModule(createCheckoutComCreditCardPaymentStrategy, [\n    { gateway: 'checkoutcom', id: 'credit_card' },\n    { gateway: 'checkoutcom', id: 'card' },\n]);\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/create-checkoutcom-custom-credit-card-payment-strategy.test.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport CheckoutComCreditCardPaymentStrategy from './checkoutcom-credit-card-payment-strategy';\nimport createCheckoutcomCreditCardPaymentStrategy from './create-checkoutcom-credit-card-payment-strategy';\n\ndescribe('createCheckoutComCreditCardPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates checkoutcom custom payment strategy', () => {\n        const strategy = createCheckoutcomCreditCardPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(CheckoutComCreditCardPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/src/index.ts",
    "content": "export { default as createCheckoutComFawryPaymentStrategy } from './checkoutcom-sepa/create-checkoutcom-fawry-payment-strategy';\nexport { default as CheckoutComFawryPaymentStrategy } from './checkoutcom-sepa/checkoutcom-fawry-payment-strategy';\nexport { default as createCheckoutComCreditCardPaymentStrategy } from './create-checkoutcom-credit-card-payment-strategy';\nexport { default as CheckoutComCreditCardPaymentStrategy } from './checkoutcom-credit-card-payment-strategy';\nexport { default as createCheckoutComSepaPaymentStrategy } from './checkoutcom-sepa/create-checkoutcom-sepa-payment-strategy';\nexport { default as CheckoutComCustomSepaPaymentStrategy } from './checkoutcom-sepa/checkoutcom-sepa-payment-strategy';\nexport { default as CheckoutComCustomPaymentStrategy } from './checkoutcom-custom-payment-strategy';\nexport { default as CheckoutComIdealPaymentStrategy } from './checkoutcom-ideal/checkoutcom-ideal-payment-strategy';\nexport { default as createCheckoutComIdealPaymentStrategy } from './checkoutcom-ideal/create-checkoutcom-ideal-payment-strategy';\nexport { default as createCheckoutComAPMPaymentStrategy } from './checkoutcom-apm/create-checkoutcom-apm-payment-strategy';\nexport { default as CheckoutComAPMPaymentStrategy } from './checkoutcom-apm/checkoutcom-apm-payment-strategy';\nexport * from './checkoutcom';\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/checkoutcom-custom-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/clearpay-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"jest/valid-expect\": \"off\",\n                \"jest/no-if\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"jest/no-test-return-statement\": \"off\",\n                \"@typescript-eslint/no-shadow\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/clearpay-integration/README.md",
    "content": "# Clearpay integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test clearpay-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint clearpay-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/clearpay-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'clearpay-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/clearpay-integration',\n    coveragePathIgnorePatterns: ['<rootDir>/src/index.ts'],\n};\n"
  },
  {
    "path": "packages/clearpay-integration/project.json",
    "content": "{\n    \"name\": \"clearpay-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/clearpay-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/clearpay-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/clearpay-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/clearpay-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/clearpay-integration/src/clearpay-payment-strategy.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\nimport { merge, noop } from 'lodash';\n\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    NotInitializedError,\n    OrderFinalizationNotCompletedError,\n    OrderRequestBody,\n    PaymentIntegrationService,\n    PaymentMethod,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCheckout,\n    getErrorPaymentResponseBody,\n    getErrorResponse,\n    getOrderRequestBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport ClearpayPaymentStrategy from './clearpay-payment-strategy';\nimport ClearpayScriptLoader from './clearpay-script-loader';\nimport { getClearpay } from './clearpay.mock';\n\ndescribe('ClearpayPaymentStrategy', () => {\n    let payload: OrderRequestBody;\n    let paymentMethod: PaymentMethod;\n    let scriptLoader: ClearpayScriptLoader;\n    let strategy: ClearpayPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    const clearpaySdk = {\n        initialize: noop,\n        redirect: noop,\n    };\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        scriptLoader = new ClearpayScriptLoader(createScriptLoader());\n        strategy = new ClearpayPaymentStrategy(paymentIntegrationService, scriptLoader);\n\n        paymentMethod = getClearpay();\n\n        payload = merge({}, getOrderRequestBody(), {\n            payment: {\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            },\n        });\n\n        jest.spyOn(paymentIntegrationService, 'validateCheckout').mockReturnValue(\n            new Promise<void>((resolve) => resolve()),\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue({\n            checkoutSettings: {},\n        } as any);\n\n        jest.spyOn(scriptLoader, 'load').mockReturnValue(Promise.resolve(clearpaySdk));\n\n        jest.spyOn(clearpaySdk, 'initialize').mockImplementation(noop);\n\n        jest.spyOn(clearpaySdk, 'redirect').mockImplementation(noop);\n\n        const storeConfigMock = {\n            checkoutSettings: {\n                features: {\n                    'PI-4555.clearpay_add_https_to_prod_script': true,\n                },\n            },\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfigMock as any,\n        );\n    });\n\n    describe('#initialize()', () => {\n        it('loads script when initializing strategy', async () => {\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            expect(scriptLoader.load).toHaveBeenCalledWith(paymentMethod, {\n                'PI-4555.clearpay_add_https_to_prod_script': true,\n            });\n        });\n    });\n\n    describe('#execute()', () => {\n        const successHandler = jest.fn();\n\n        beforeEach(async () => {\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddressOrThrow',\n            ).mockReturnValue({\n                ...getBillingAddress(),\n                countryCode: 'GB',\n            });\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCheckout').mockReturnValue(\n                getCheckout(),\n            );\n\n            strategy.execute(payload).then(successHandler);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n        });\n\n        it('redirects to Clearpay', () => {\n            expect(clearpaySdk.initialize).toHaveBeenCalledWith({ countryCode: 'GB' });\n            expect(clearpaySdk.redirect).toHaveBeenCalledWith({ token: paymentMethod.clientToken });\n        });\n\n        it('applies store credit usage', () => {\n            expect(paymentIntegrationService.applyStoreCredit).toHaveBeenCalledWith(false);\n        });\n\n        it('validates nothing has changed before redirecting to Clearpay checkout page', async () => {\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.validateCheckout).toHaveBeenCalled();\n        });\n\n        it('rejects with error if execution is unsuccessful', async () => {\n            jest.spyOn(paymentIntegrationService, 'applyStoreCredit').mockReturnValueOnce(\n                Promise.reject(new RequestError()),\n            );\n\n            const errorHandler = jest.fn();\n\n            strategy.execute(payload).catch(errorHandler);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(errorHandler).toHaveBeenCalled();\n        });\n\n        it('throws error if trying to execute before initialization', async () => {\n            await strategy.deinitialize();\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('throws InvalidArgumentError if loadPaymentMethod fails', async () => {\n            const errorResponse = merge(getErrorResponse(), {\n                body: {\n                    status: 422,\n                },\n            });\n\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockImplementationOnce(\n                () => {\n                    throw new RequestError(errorResponse);\n                },\n            );\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                payload.payment?.gatewayId,\n                {\n                    params: { method: payload.payment?.methodId },\n                },\n            );\n\n            await expect(strategy.execute(payload)).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('throws RequestError if loadPaymentMethod fails', async () => {\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockImplementationOnce(\n                () => {\n                    throw new RequestError(getErrorResponse());\n                },\n            );\n\n            await expect(strategy.execute(payload)).rejects.toThrow(RequestError);\n        });\n\n        it('loads payment client token', () => {\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                paymentMethod.gateway,\n                { params: { method: paymentMethod.id } },\n            );\n        });\n\n        it(\"throws error if GB isn't the courtryCode in the billing address\", async () => {\n            await strategy.deinitialize();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddressOrThrow',\n            ).mockReturnValue({\n                ...getBillingAddress(),\n                countryCode: 'US',\n            });\n\n            strategy = new ClearpayPaymentStrategy(paymentIntegrationService, scriptLoader);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(InvalidArgumentError);\n        });\n    });\n\n    describe('#finalize()', () => {\n        const nonce = 'bar';\n\n        beforeEach(() => {\n            strategy = new ClearpayPaymentStrategy(paymentIntegrationService, scriptLoader);\n        });\n\n        it('submits the order and the payment', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getContextConfig').mockReturnValue({\n                checkoutId: '6a6071cc-82ba-45aa-adb0-ebec42d6ff6f',\n                flashMessages: [],\n                geoCountryCode: 'AU',\n                payment: {\n                    formId: 'dc030783-6129-4ee3-8e06-6f4270df1527',\n                    token: nonce,\n                },\n            });\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentId').mockReturnValue({\n                providerId: paymentMethod.id,\n            });\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n            await strategy.finalize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                {},\n                { methodId: paymentMethod.id, gatewayId: paymentMethod.gateway },\n            );\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: paymentMethod.id,\n                paymentData: { nonce },\n            });\n\n            jest.spyOn(paymentIntegrationService, 'forgetCheckout');\n\n            expect(paymentIntegrationService.forgetCheckout).not.toHaveBeenCalled();\n        });\n\n        it('throws error if unable to finalize order due to missing data', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getContextConfig',\n            ).mockReturnValueOnce(undefined);\n\n            await expect(\n                strategy.finalize({ methodId: paymentMethod.id, gatewayId: paymentMethod.gateway }),\n            ).rejects.toThrow(MissingDataError);\n        });\n\n        it('throws OrderFinalizationNotCompleted error if unable to finalize order', async () => {\n            const response = new RequestError(getResponse(getErrorPaymentResponseBody()));\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValue(\n                Promise.reject(response),\n            );\n            jest.spyOn(paymentIntegrationService, 'forgetCheckout').mockImplementation(jest.fn());\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethods').mockImplementation(\n                jest.fn(),\n            );\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            });\n\n            await expect(\n                strategy.finalize({ methodId: paymentMethod.id, gatewayId: paymentMethod.gateway }),\n            ).rejects.toThrow(OrderFinalizationNotCompletedError);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                {},\n                { methodId: paymentMethod.id, gatewayId: paymentMethod.gateway },\n            );\n\n            expect(paymentIntegrationService.forgetCheckout).toHaveBeenCalledWith(paymentMethod.id);\n            expect(paymentIntegrationService.loadPaymentMethods).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/clearpay-integration/src/clearpay-payment-strategy.ts",
    "content": "import { noop } from 'lodash';\n\nimport {\n    InvalidArgumentError,\n    isRequestError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotCompletedError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    RequestError,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport ClearpayScriptLoader from './clearpay-script-loader';\nimport ClearpaySdk from './clearpay-sdk';\n\nexport default class ClearpayPaymentStrategy implements PaymentStrategy {\n    private _clearpaySdk?: ClearpaySdk;\n\n    constructor(\n        private _paymentIntegrationService: PaymentIntegrationService,\n        private _clearpayScriptLoader: ClearpayScriptLoader,\n    ) {}\n\n    async initialize(options: PaymentInitializeOptions): Promise<void> {\n        const { getPaymentMethodOrThrow } = this._paymentIntegrationService.getState();\n        const paymentMethod = getPaymentMethodOrThrow(options.methodId, options.gatewayId);\n\n        const features = this._paymentIntegrationService.getState().getStoreConfigOrThrow()\n            .checkoutSettings.features;\n\n        this._clearpaySdk = await this._clearpayScriptLoader.load(paymentMethod, features);\n    }\n\n    deinitialize(): Promise<void> {\n        this._clearpaySdk = undefined;\n\n        return Promise.resolve();\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { gatewayId, methodId } = payload.payment || {};\n\n        if (!gatewayId || !methodId) {\n            throw new PaymentArgumentInvalidError(['payment.gatewayId', 'payment.methodId']);\n        }\n\n        const state = this._paymentIntegrationService.getState();\n        const { isStoreCreditApplied: useStoreCredit } = state.getCheckoutOrThrow();\n\n        await this._paymentIntegrationService.applyStoreCredit(useStoreCredit);\n\n        await this._paymentIntegrationService.validateCheckout(state.getCheckout(), options);\n\n        const { countryCode } = state.getBillingAddressOrThrow();\n\n        if (!this._isCountrySupported(countryCode)) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because billing country is not supported.',\n            );\n        }\n\n        await this._loadPaymentMethod(gatewayId, methodId, options);\n\n        await this._redirectToClearpay(\n            countryCode,\n            this._paymentIntegrationService.getState().getPaymentMethod(methodId, gatewayId),\n        );\n\n        // Clearpay will handle the rest of the flow so return a promise that doesn't really resolve\n        return new Promise(noop);\n    }\n\n    async finalize(options: PaymentRequestOptions): Promise<void> {\n        const state = this._paymentIntegrationService.getState();\n        const payment = state.getPaymentId();\n        const config = state.getContextConfig();\n\n        if (!payment) {\n            throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n        }\n\n        if (!config || !config.payment.token) {\n            throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n        }\n\n        const paymentPayload = {\n            methodId: payment.providerId,\n            paymentData: { nonce: config.payment.token },\n        };\n\n        await this._paymentIntegrationService.submitOrder({}, options);\n\n        try {\n            await this._paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error) {\n            await this._paymentIntegrationService.forgetCheckout(payment.providerId);\n            await this._paymentIntegrationService.loadPaymentMethods();\n\n            if (isRequestError(error)) {\n                throw new OrderFinalizationNotCompletedError(error.body?.errors?.[0]?.message);\n            }\n        }\n    }\n\n    private async _redirectToClearpay(\n        countryCode: string,\n        paymentMethod?: PaymentMethod,\n    ): Promise<void> {\n        if (!this._clearpaySdk || !paymentMethod || !paymentMethod.clientToken) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        this._clearpaySdk.initialize({ countryCode });\n        this._clearpaySdk.redirect({ token: paymentMethod.clientToken });\n\n        return Promise.resolve();\n    }\n\n    private _isCountrySupported(countryCode: string): boolean {\n        return countryCode === 'GB';\n    }\n\n    private async _loadPaymentMethod(\n        gatewayId: string,\n        methodId: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        try {\n            return await this._paymentIntegrationService.loadPaymentMethod(gatewayId, {\n                ...options,\n                params: { ...options?.params, method: methodId },\n            });\n        } catch (error) {\n            if (error instanceof RequestError && error.body?.status === 422) {\n                throw new InvalidArgumentError(\n                    \"Clearpay can't process your payment for this order, please try another payment method\",\n                );\n            }\n\n            throw error;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/clearpay-integration/src/clearpay-script-loader.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\nimport { merge } from 'lodash';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport ClearpayScriptLoader from './clearpay-script-loader';\nimport { getClearpay } from './clearpay.mock';\n\ndescribe('ClearpayScriptLoader', () => {\n    const scriptLoader = createScriptLoader();\n    const clearpayScriptLoader = new ClearpayScriptLoader(scriptLoader);\n    const loadScript = jest.spyOn(scriptLoader, 'loadScript');\n\n    it('loads widget script', () => {\n        const method = getClearpay();\n\n        clearpayScriptLoader.load(method);\n\n        expect(loadScript).toHaveBeenCalledWith('//portal.clearpay.co.uk/afterpay-async.js');\n    });\n\n    it('loads sandbox widget script if in test mode', () => {\n        const method = merge({}, getClearpay(), { config: { testMode: true } });\n\n        clearpayScriptLoader.load(method);\n\n        expect(loadScript).toHaveBeenCalledWith(\n            '//portal.sandbox.clearpay.co.uk/afterpay-async.js',\n        );\n    });\n\n    it('loads https PROD widget script when experiment is enabled', () => {\n        const method = getClearpay();\n        const features = { 'PI-4555.clearpay_add_https_to_prod_script': true } as any;\n\n        clearpayScriptLoader.load(method, features);\n\n        expect(loadScript).toHaveBeenCalledWith('https://portal.clearpay.co.uk/afterpay-async.js');\n    });\n\n    it('throws an error when window is not set', async () => {\n        const scriptLoader = {} as ScriptLoader;\n\n        scriptLoader.loadScript = jest.fn(() => {\n            return Promise.resolve();\n        });\n\n        const method = merge({}, getClearpay(), { config: { testMode: true } });\n        const clearpayScriptLoader = new ClearpayScriptLoader(scriptLoader, {\n            AfterPay: undefined,\n        } as any);\n\n        try {\n            await clearpayScriptLoader.load(method);\n        } catch (error) {\n            expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n        }\n    });\n});\n"
  },
  {
    "path": "packages/clearpay-integration/src/clearpay-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport ClearpaySdk from './clearpay-sdk';\nimport ClearpayWindow from './clearpay-window';\n\nconst SCRIPTS_DEFAULT = {\n    PROD: '//portal.clearpay.co.uk/afterpay-async.js',\n    SANDBOX: '//portal.sandbox.clearpay.co.uk/afterpay-async.js',\n    HTTPS_SANDBOX: 'https://portal.sandbox.clearpay.co.uk/afterpay-async.js',\n    HTTPS_PROD: 'https://portal.clearpay.co.uk/afterpay-async.js',\n};\n\nconst CLEARPAY_HTTPS_PROD_SCRIPT_EXPERIMENT = 'PI-4555.clearpay_add_https_to_prod_script';\n\nexport default class ClearpayScriptLoader {\n    constructor(private _scriptLoader: ScriptLoader, public _window: ClearpayWindow = window) {}\n\n    async load(method: PaymentMethod, features = {}): Promise<ClearpaySdk> {\n        await this._scriptLoader.loadScript(this._getScriptUrl(method.config.testMode, features));\n\n        if (!this._window.AfterPay) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this._window.AfterPay;\n    }\n\n    private _getScriptUrl(testMode?: boolean, features = {}): string {\n        const httpsEnabled = isExperimentEnabled(\n            features,\n            CLEARPAY_HTTPS_PROD_SCRIPT_EXPERIMENT,\n            false,\n        );\n\n        if (testMode) {\n            return httpsEnabled ? SCRIPTS_DEFAULT.HTTPS_SANDBOX : SCRIPTS_DEFAULT.SANDBOX;\n        }\n\n        return httpsEnabled ? SCRIPTS_DEFAULT.HTTPS_PROD : SCRIPTS_DEFAULT.PROD;\n    }\n}\n"
  },
  {
    "path": "packages/clearpay-integration/src/clearpay-sdk.ts",
    "content": "export default interface ClearpaySdk {\n    initialize(options: ClearpayInitializeOptions): void;\n    redirect(options: ClearpayDisplayOptions): void;\n}\n\nexport interface ClearpayDisplayOptions {\n    token: string;\n}\n\nexport interface ClearpayInitializeOptions {\n    countryCode: string;\n}\n"
  },
  {
    "path": "packages/clearpay-integration/src/clearpay-window.ts",
    "content": "import ClearpaySdk from './clearpay-sdk';\n\nexport default interface ClearpayWindow extends Window {\n    AfterPay?: ClearpaySdk;\n}\n"
  },
  {
    "path": "packages/clearpay-integration/src/clearpay.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getClearpay(): PaymentMethod {\n    return {\n        id: 'PAY_BY_INSTALLMENT',\n        gateway: 'clearpay',\n        logoUrl: '',\n        method: 'multi-option',\n        supportedCards: [],\n        config: {\n            displayName: 'Pay over time',\n            merchantId: '33133',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'foo',\n    };\n}\n"
  },
  {
    "path": "packages/clearpay-integration/src/create-clearpay-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport ClearpayPaymentStrategy from './clearpay-payment-strategy';\nimport createClearpayPaymentStrategy from './create-clearpay-payment-strategy';\n\ndescribe('createClearpayPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates Clearpay payment strategy', () => {\n        const strategy = createClearpayPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(ClearpayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/clearpay-integration/src/create-clearpay-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport ClearpayPaymentStrategy from './clearpay-payment-strategy';\nimport ClearpayScriptLoader from './clearpay-script-loader';\n\nconst createClearpayPaymentStrategy: PaymentStrategyFactory<ClearpayPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new ClearpayPaymentStrategy(\n        paymentIntegrationService,\n        new ClearpayScriptLoader(getScriptLoader()),\n    );\n};\n\nexport default toResolvableModule(createClearpayPaymentStrategy, [\n    { gateway: 'clearpay' },\n    { id: 'clearpay' },\n]);\n"
  },
  {
    "path": "packages/clearpay-integration/src/index.ts",
    "content": "export { default as createClearpayPaymentStrategy } from './create-clearpay-payment-strategy';\n"
  },
  {
    "path": "packages/clearpay-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true\n    }\n}\n"
  },
  {
    "path": "packages/clearpay-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/clearpay-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/core/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/no-empty-function\": \"off\",\n                \"@typescript-eslint/no-empty-interface\": \"off\",\n                \"@typescript-eslint/ban-types\": \"off\",\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-misused-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/restrict-template-expressions\": \"off\",\n                \"@typescript-eslint/require-await\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/default-param-last\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/no-shadow\": \"off\",\n                \"complexity\": \"off\",\n                \"no-plusplus\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"jsdoc/check-tag-names\": \"off\",\n                \"no-return-await\": \"off\",\n                \"@typescript-eslint/no-use-before-define\": \"off\",\n                \"no-param-reassign\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"no-nested-ternary\": \"off\",\n                \"@typescript-eslint/no-unused-vars\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"@typescript-eslint/no-unused-expressions\": \"off\",\n                \"@typescript-eslint/member-ordering\": \"off\",\n                \"@typescript-eslint/unified-signatures\": \"off\",\n                \"jsdoc/require-param-type\": \"off\",\n                \"jsdoc/require-returns-type\": \"off\",\n                \"jsdoc/check-param-names\": \"off\",\n                \"no-restricted-globals\": \"off\",\n                \"no-underscore-dangle\": \"off\",\n                \"import/no-named-default\": \"off\",\n                \"no-restricted-syntax\": \"off\",\n                \"eqeqeq\": \"off\",\n                \"no-continue\": \"off\",\n                \"@typescript-eslint/no-throw-literal\": \"off\",\n                \"max-classes-per-file\": \"off\",\n                \"global-require\": \"off\",\n                \"no-multi-assign\": \"off\",\n                \"no-restricted-properties\": \"off\",\n                \"no-proto\": \"off\",\n                \"no-throw-literal\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-non-null-assertion\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"jest/valid-expect\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-shadow\": \"off\",\n                \"jest/no-test-return-statement\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"jest/no-focused-tests\": \"off\",\n                \"jest/no-if\": \"off\",\n                \"@typescript-eslint/no-unused-vars\": \"off\",\n                \"jest/no-restricted-matchers\": \"off\",\n                \"no-multi-assign\": \"off\",\n                \"jest/valid-expect-in-promise\": \"off\",\n                \"jest/no-jasmine-globals\": \"off\",\n                \"jest/no-identical-title\": \"off\",\n                \"no-underscore-dangle\": \"off\",\n                \"no-await-in-loop\": \"off\",\n                \"no-loop-func\": \"off\",\n                \"max-classes-per-file\": \"off\",\n                \"no-sequences\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"no-underscore-dangle\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/core/api-extractor/checkout-button.json",
    "content": "{\n    \"extends\": \"./checkout-sdk.json\",\n    \"project\": {\n        \"entryPointSourceFile\": \"../../temp/core/src/bundles/checkout-button.d.ts\"\n    },\n    \"dtsRollup\": {\n        \"mainDtsRollupPath\": \"types/checkout-button.d.ts\"\n    }\n}\n"
  },
  {
    "path": "packages/core/api-extractor/checkout-sdk.json",
    "content": "{\n    \"compiler\": {\n        \"configType\": \"tsconfig\",\n        \"rootFolder\": \".\"\n    },\n    \"project\": {\n        \"entryPointSourceFile\": \"../../temp/core/src/bundles/checkout-sdk.d.ts\"\n    },\n    \"validationRules\": {\n        \"missingReleaseTags\": \"allow\"\n    },\n    \"apiReviewFile\": {\n        \"enabled\": false\n    },\n    \"apiJsonFile\": {\n        \"enabled\": false\n    },\n    \"dtsRollup\": {\n        \"enabled\": true,\n        \"mainDtsRollupPath\": \"types/checkout-sdk.d.ts\"\n    }\n}\n"
  },
  {
    "path": "packages/core/api-extractor/embedded-checkout.json",
    "content": "{\n    \"extends\": \"./checkout-sdk.json\",\n    \"project\": {\n        \"entryPointSourceFile\": \"../../temp/core/src/bundles/embedded-checkout.d.ts\"\n    },\n    \"dtsRollup\": {\n        \"mainDtsRollupPath\": \"types/embedded-checkout.d.ts\"\n    }\n}\n"
  },
  {
    "path": "packages/core/api-extractor/internal-mappers.json",
    "content": "{\n    \"extends\": \"./checkout-sdk.json\",\n    \"project\": {\n        \"entryPointSourceFile\": \"../../temp/core/src/bundles/internal-mappers.d.ts\"\n    },\n    \"dtsRollup\": {\n        \"mainDtsRollupPath\": \"types/internal-mappers.d.ts\"\n    }\n}\n"
  },
  {
    "path": "packages/core/auto-export.config.json",
    "content": "{\n    \"entries\": [\n        {\n            \"inputPath\": \"packages/*/src/index.ts\",\n            \"outputPath\": \"packages/core/src/generated/payment-strategies.ts\",\n            \"packageOutputPath\": \"packages/core/src/generated/integrations/<moduleName>/index.ts\",\n            \"memberPattern\": \"^create.+PaymentStrategy$\"\n        },\n        {\n            \"inputPath\": \"packages/*/src/index.ts\",\n            \"outputPath\": \"packages/core/src/generated/customer-strategies.ts\",\n            \"packageOutputPath\": \"packages/core/src/generated/integrations/<moduleName>/index.ts\",\n            \"memberPattern\": \"^create.+CustomerStrategy$\"\n        },\n        {\n            \"inputPath\": \"packages/*/src/index.ts\",\n            \"outputPath\": \"packages/core/src/generated/checkout-button-strategies.ts\",\n            \"packageOutputPath\": \"packages/core/src/generated/integrations/<moduleName>/index.ts\",\n            \"memberPattern\": \"^create.+ButtonStrategy$\"\n        }\n    ],\n    \"apiExtractorConfig\": {\n        \"entryPointSourceFile\": \"../../temp/core/src/generated/integrations/<moduleName>/index.d.ts\",\n        \"mainDtsRollupPath\": \"types/integrations/<moduleName>.d.ts\"\n    }\n}\n"
  },
  {
    "path": "packages/core/create-enum.config.json",
    "content": "{\n    \"entries\": [\n        {\n            \"inputPaths\": [\n                \"packages/*/src/index.ts\",\n                \"packages/core/src/checkout-buttons/index.ts\"\n            ],\n            \"inputMemberPattern\": \"^.+ButtonMethodType$\",\n            \"outputPath\": \"packages/core/src/generated/checkout-button-method-type.ts\",\n            \"outputMemberName\": \"CheckoutButtonMethodType\"\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/core/extend-interface.config.json",
    "content": "{\n    \"entries\": [\n        {\n            \"inputPath\": \"packages/*/src/index.ts\",\n            \"outputPath\": \"packages/core/src/generated/payment-initialize-options.ts\",\n            \"outputMemberName\": \"PaymentInitializeOptions\",\n            \"memberPattern\": \"^With.+PaymentInitializeOptions$\",\n            \"targetPath\": \"packages/core/src/payment/index.ts\",\n            \"targetMemberName\": \"BasePaymentInitializeOptions\"\n        },\n        {\n            \"inputPath\": \"packages/*/src/index.ts\",\n            \"outputPath\": \"packages/core/src/generated/customer-initialize-options.ts\",\n            \"outputMemberName\": \"CustomerInitializeOptions\",\n            \"memberPattern\": \"^With.+CustomerInitializeOptions$\",\n            \"targetPath\": \"packages/core/src/customer/index.ts\",\n            \"targetMemberName\": \"BaseCustomerInitializeOptions\"\n        },\n        {\n            \"inputPath\": \"packages/*/src/index.ts\",\n            \"outputPath\": \"packages/core/src/generated/checkout-button-initialize-options.ts\",\n            \"outputMemberName\": \"CheckoutButtonInitializeOptions\",\n            \"memberPattern\": \"^With.+ButtonInitializeOptions$\",\n            \"targetPath\": \"packages/core/src/checkout-buttons/index.ts\",\n            \"targetMemberName\": \"BaseCheckoutButtonInitializeOptions\"\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/core/jest.config.js",
    "content": "module.exports = {\n    displayName: 'core',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/core',\n};\n"
  },
  {
    "path": "packages/core/project.json",
    "content": "{\n    \"name\": \"core\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/core/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:core\"],\n    \"targets\": {\n        \"build\": {\n            \"executor\": \"nx:run-commands\",\n            \"options\": {\n                \"command\": \"webpack --config webpack.config.js\"\n            },\n            \"dependsOn\": [\n                {\n                    \"target\": \"generate\"\n                },\n                {\n                    \"target\": \"build\",\n                    \"dependencies\": true\n                }\n            ]\n        },\n        \"build-analyze\": {\n            \"executor\": \"nx:run-commands\",\n            \"options\": {\n                \"commands\": [\n                    \"webpack --config webpack.config.js --config-name esm --profile --json > webpack-stats.json\",\n                    \"webpack-bundle-analyzer webpack-stats.json dist --default-sizes gzip\"\n                ],\n                \"parallel\": false\n            },\n            \"dependsOn\": [\n                {\n                    \"target\": \"generate\"\n                },\n                {\n                    \"target\": \"build\",\n                    \"dependencies\": true\n                }\n            ]\n        },\n        \"build-watch\": {\n            \"executor\": \"nx:run-commands\",\n            \"options\": {\n                \"command\": \"webpack --config webpack.config.js --config-name esm --watch --progress\"\n            },\n            \"dependsOn\": [\n                {\n                    \"target\": \"generate\"\n                },\n                {\n                    \"target\": \"build\",\n                    \"dependencies\": true\n                }\n            ]\n        },\n        \"build-cdn\": {\n            \"executor\": \"nx:run-commands\",\n            \"options\": {\n                \"parallel\": false,\n                \"commands\": [\n                    \"webpack --config webpack-cdn.config.js --config-name umd\",\n                    \"webpack --config webpack-cdn.config.js --config-name umd-loader\"\n                ]\n            },\n            \"dependsOn\": [\n                {\n                    \"target\": \"generate\"\n                },\n                {\n                    \"target\": \"build\",\n                    \"dependencies\": true\n                }\n            ]\n        },\n        \"build-dts\": {\n            \"executor\": \"nx:run-commands\",\n            \"options\": {\n                \"cwd\": \"packages/core\",\n                \"parallel\": false,\n                \"commands\": [\n                    \"tsc --outDir ../../temp --declaration --emitDeclarationOnly\",\n                    \"api-extractor run --config api-extractor/checkout-sdk.json & api-extractor run --config api-extractor/checkout-button.json & api-extractor run --config api-extractor/embedded-checkout.json & api-extractor run --config api-extractor/internal-mappers.json & wait\",\n                    \"find src/generated/integrations -name 'api-extractor.json' | xargs -I {} -P 8 sh -c 'cd \\\"$(dirname \\\"{}\\\")\\\" && npx api-extractor run --config api-extractor.json'\",\n                    \"rm -rf ../../temp\",\n                    \"nx run hosted-form-v2:build-dts\"\n                ]\n            }\n        },\n        \"docs\": {\n            \"executor\": \"nx:run-commands\",\n            \"options\": {\n                \"cwd\": \"packages/core\",\n                \"parallel\": false,\n                \"commands\": [\n                    \"mkdir -p src/generated && cp ../../dist/types/checkout-sdk.d.ts src/generated/checkout-sdk.d.ts\",\n                    \"typedoc --plugin typedoc-plugin-markdown --options typedoc.json --tsconfig tsconfig.json src/generated/checkout-sdk.d.ts\"\n                ]\n            },\n            \"dependsOn\": [\n                {\n                    \"target\": \"build-dts\"\n                }\n            ]\n        },\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"fix\": true,\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/core/**/*.ts\"]\n            },\n            \"dependsOn\": [\n                {\n                    \"target\": \"generate\"\n                }\n            ]\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/core\"],\n            \"options\": {\n                \"jestConfig\": \"packages/core/jest.config.js\",\n                \"passWithNoTests\": true,\n                \"runInBand\": true\n            },\n            \"dependsOn\": [\n                {\n                    \"target\": \"generate\"\n                }\n            ]\n        },\n        \"generate\": {\n            \"executor\": \"nx:run-commands\",\n            \"options\": {\n                \"commands\": [\n                    \"rm -rf packages/core/src/generated\",\n                    \"npx nx generate @bigcommerce/checkout-sdk/workspace-tools:auto-export --projectName=core\",\n                    \"npx nx generate @bigcommerce/checkout-sdk/workspace-tools:extend-interface --projectName=core\",\n                    \"npx nx generate @bigcommerce/checkout-sdk/workspace-tools:create-enum --projectName=core\"\n                ],\n                \"parallel\": false\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/core/src/address/address.ts",
    "content": "import { AddressExtraFieldValue } from '../form';\n\nexport type AddressKey = keyof Address;\n\nexport default interface Address extends AddressRequestBody {\n    country: string;\n    shouldSaveAddress?: boolean;\n}\n\nexport interface AddressRequestBody {\n    firstName: string;\n    lastName: string;\n    company: string;\n    address1: string;\n    address2: string;\n    city: string;\n    stateOrProvince: string;\n    stateOrProvinceCode: string;\n    countryCode: string;\n    postalCode: string;\n    phone: string;\n    customFields: Array<{\n        fieldId: string;\n        fieldValue: string | number | string[];\n    }>;\n    extraFields?: AddressExtraFieldValue[];\n}\n"
  },
  {
    "path": "packages/core/src/address/index.ts",
    "content": "export { default as Address, AddressKey, AddressRequestBody } from './address';\nexport { default as InternalAddress } from './internal-address';\n\nexport { default as isAddressEqual } from './is-address-equal';\nexport { default as isInternalAddressEqual } from './is-internal-address-equal';\n\nexport { default as mapFromInternalAddress } from './map-from-internal-address';\nexport { default as mapToInternalAddress } from './map-to-internal-address';\n"
  },
  {
    "path": "packages/core/src/address/internal-address.ts",
    "content": "export default interface InternalAddress<T = string> {\n    id?: T;\n    firstName: string;\n    lastName: string;\n    company: string;\n    addressLine1: string;\n    addressLine2: string;\n    city: string;\n    province: string;\n    provinceCode: string;\n    postCode: string;\n    country: string;\n    countryCode: string;\n    phone: string;\n    customFields: Array<{\n        fieldId: string;\n        fieldValue: string | number | string[];\n    }>;\n    type?: string;\n}\n"
  },
  {
    "path": "packages/core/src/address/is-address-equal.spec.ts",
    "content": "import { getShippingAddress } from '../shipping/shipping-addresses.mock';\n\nimport isAddressEqual from './is-address-equal';\n\ndescribe('isInternalAddressEqual', () => {\n    it('returns true if addresses are equal', () => {\n        const output = isAddressEqual(getShippingAddress(), getShippingAddress());\n\n        expect(output).toBe(true);\n    });\n\n    it('returns false if addresses are different', () => {\n        const output = isAddressEqual(getShippingAddress(), {\n            ...getShippingAddress(),\n            address1: '1 Foobar St',\n        });\n\n        expect(output).toBe(false);\n    });\n\n    it('returns true if addresses have different values for ignored fields', () => {\n        expect(\n            isAddressEqual(getShippingAddress(), { ...getShippingAddress(), country: 'x' }),\n        ).toBe(true);\n\n        expect(\n            isAddressEqual(getShippingAddress(), {\n                ...getShippingAddress(),\n                stateOrProvinceCode: '123',\n            }),\n        ).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/address/is-address-equal.ts",
    "content": "import { identity, isEqual, pickBy } from 'lodash';\n\nimport Address from './address';\n\nexport default function isAddressEqual(\n    addressA: Partial<Address>,\n    addressB: Partial<Address>,\n): boolean {\n    return isEqual(normalize(addressA), normalize(addressB));\n}\n\nfunction normalize(address: Partial<Address>): Partial<Address> {\n    return pickBy(\n        {\n            firstName: address.firstName,\n            lastName: address.lastName,\n            company: address.company,\n            address1: address.address1,\n            address2: address.address2,\n            city: address.city,\n            stateOrProvince: address.stateOrProvince,\n            countryCode: address.countryCode,\n            postalCode: address.postalCode,\n            phone: address.phone,\n            customFields: address.customFields,\n        },\n        identity,\n    );\n}\n"
  },
  {
    "path": "packages/core/src/address/is-internal-address-equal.spec.ts",
    "content": "import { getShippingAddress } from '../shipping/internal-shipping-addresses.mock';\n\nimport isInternalAddressEqual from './is-internal-address-equal';\n\ndescribe('isInternalAddressEqual', () => {\n    it('returns true if addresses are equal', () => {\n        const output = isInternalAddressEqual(getShippingAddress(), getShippingAddress());\n\n        expect(output).toBe(true);\n    });\n\n    it('returns false if addresses are different', () => {\n        const output = isInternalAddressEqual(getShippingAddress(), {\n            ...getShippingAddress(),\n            addressLine1: '1 Foobar St',\n        });\n\n        expect(output).toBe(false);\n    });\n\n    it('returns true if addresses have different values for ignored fields', () => {\n        expect(\n            isInternalAddressEqual(getShippingAddress(), { ...getShippingAddress(), id: '123' }),\n        ).toBe(true);\n\n        expect(\n            isInternalAddressEqual(getShippingAddress(), {\n                ...getShippingAddress(),\n                provinceCode: '123',\n            }),\n        ).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/address/is-internal-address-equal.ts",
    "content": "import { isEqual } from 'lodash';\n\nimport { omitPrivate } from '../common/utility';\n\nimport InternalAddress from './internal-address';\n\nexport default function isInternalAddressEqual(\n    addressA: Partial<InternalAddress>,\n    addressB: Partial<InternalAddress>,\n): boolean {\n    return isEqual(normalize(addressA), normalize(addressB));\n}\n\nfunction normalize(address: Partial<InternalAddress>): Partial<InternalAddress> {\n    const ignoredKeys = ['id', 'provinceCode'];\n\n    return (Object.keys(omitPrivate(address) || {}) as Array<keyof InternalAddress>).reduce(\n        (result, key) =>\n            ignoredKeys.indexOf(key) === -1 && address[key]\n                ? { ...result, [key]: address[key] }\n                : result,\n        {},\n    );\n}\n"
  },
  {
    "path": "packages/core/src/address/map-from-internal-address.spec.ts",
    "content": "import { omit } from 'lodash';\n\nimport { getBillingAddress } from '../billing/billing-addresses.mock';\nimport { getBillingAddress as getInternalBillingAddress } from '../billing/internal-billing-addresses.mock';\n\nimport mapFromInternalAddress from './map-from-internal-address';\n\ndescribe('mapFromInternalAddress()', () => {\n    it('maps from internal address', () => {\n        expect(mapFromInternalAddress(getInternalBillingAddress())).toEqual(\n            omit(getBillingAddress(), 'email', 'shouldSaveAddress'),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/address/map-from-internal-address.ts",
    "content": "import { BillingAddress } from '../billing';\n\nimport Address from './address';\nimport InternalAddress from './internal-address';\n\nexport default function mapFromInternalAddress(address: InternalAddress): Address | BillingAddress {\n    return {\n        id: address.id,\n        firstName: address.firstName,\n        lastName: address.lastName,\n        company: address.company,\n        address1: address.addressLine1,\n        address2: address.addressLine2,\n        city: address.city,\n        stateOrProvince: address.province,\n        stateOrProvinceCode: address.provinceCode,\n        postalCode: address.postCode,\n        country: address.country,\n        countryCode: address.countryCode,\n        phone: address.phone,\n        customFields: address.customFields,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/address/map-to-internal-address.spec.ts",
    "content": "import { getBillingAddress } from '../billing/billing-addresses.mock';\nimport { getBillingAddress as getInternalBillingAddress } from '../billing/internal-billing-addresses.mock';\nimport { getConsignment } from '../shipping/consignments.mock';\nimport { getShippingAddress as getInternalShippingAddress } from '../shipping/internal-shipping-addresses.mock';\nimport { getShippingAddress } from '../shipping/shipping-addresses.mock';\n\nimport mapToInternalAddress from './map-to-internal-address';\n\ndescribe('mapToInternalAddress()', () => {\n    it('maps to internal address', () => {\n        expect(mapToInternalAddress(getBillingAddress())).toEqual(getInternalBillingAddress());\n    });\n\n    it('maps to internal shipping address when consignments are passed', () => {\n        expect(mapToInternalAddress(getShippingAddress(), [getConsignment()])).toEqual(\n            getInternalShippingAddress(),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/address/map-to-internal-address.ts",
    "content": "import { BillingAddress, isBillingAddressLike } from '../billing';\nimport { Consignment } from '../shipping';\n\nimport Address from './address';\nimport InternalAddress from './internal-address';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalAddress(\n    address: Address | BillingAddress,\n    consignments?: Consignment[],\n): InternalAddress<any> {\n    let addressId;\n\n    if (isBillingAddressLike(address)) {\n        addressId = address.id;\n    } else if (consignments && consignments.length) {\n        addressId = consignments[0].id;\n    }\n\n    return {\n        id: addressId,\n        firstName: address.firstName,\n        lastName: address.lastName,\n        company: address.company,\n        addressLine1: address.address1,\n        addressLine2: address.address2,\n        city: address.city,\n        province: address.stateOrProvince,\n        provinceCode: address.stateOrProvinceCode,\n        postCode: address.postalCode,\n        country: address.country,\n        countryCode: address.countryCode,\n        phone: address.phone,\n        customFields: address.customFields,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/analytics/analytics-step-tracker.spec.ts",
    "content": "import { AnalyticsExtraItemsManager } from '@bigcommerce/checkout-sdk/analytics';\n\nimport { getGiftCertificateItem } from '../cart/line-items.mock';\nimport { CheckoutService, createCheckoutService } from '../checkout';\nimport { getCheckoutWithCoupons } from '../checkout/checkouts.mock';\nimport { InvalidArgumentError } from '../common/error/errors';\nimport { ShopperCurrency } from '../config';\nimport { getConfig } from '../config/configs.mock';\nimport { Order } from '../order';\nimport { getPhysicalItem } from '../order/line-items.mock';\nimport { getOrder } from '../order/orders.mock';\nimport { getPaymentMethod } from '../payment/payment-methods.mock';\nimport { getShippingOption } from '../shipping/shipping-options.mock';\n\nimport AnalyticsStepTracker, { AnalyticStepId, AnalyticStepType } from './analytics-step-tracker';\nimport {\n    isGoogleAnalyticsAvailable,\n    isPayloadSizeLimitReached,\n    sendGoogleAnalytics,\n} from './analytics-tracker-ga';\n\njest.mock('./analytics-tracker-ga', () => ({\n    isGoogleAnalyticsAvailable: jest.fn(),\n    isPayloadSizeLimitReached: jest.fn(),\n    sendGoogleAnalytics: jest.fn(),\n}));\n\ndescribe('AnalyticsStepTracker', () => {\n    let checkoutService: CheckoutService;\n    let analyticsStepTracker: AnalyticsStepTracker;\n    let sessionStorage: any;\n    let analytics: any;\n\n    const VIEWED_EVENT_NAME = 'Checkout Step Viewed';\n    const COMPLETED_EVENT_NAME = 'Checkout Step Completed';\n    const storedData = {\n        103: {\n            brand: 'OFS',\n            category: 'Cat 1',\n        },\n        104: {\n            brand: 'Digitalia',\n            category: 'Ebooks, Audio Books',\n        },\n    };\n\n    beforeEach(() => {\n        analytics = {\n            track: jest.fn(),\n        };\n\n        sessionStorage = {\n            getItem: jest.fn(() => JSON.stringify(storedData)),\n            setItem: jest.fn(),\n            removeItem: jest.fn(),\n        };\n\n        checkoutService = createCheckoutService();\n\n        jest.spyOn(checkoutService.getState().data, 'getCheckout').mockReturnValue(\n            getCheckoutWithCoupons(),\n        );\n\n        jest.spyOn(checkoutService.getState().data, 'getConfig').mockReturnValue({\n            ...getConfig().storeConfig,\n            shopperCurrency: {\n                code: 'JPY',\n                exchangeRate: 1.01,\n            } as ShopperCurrency,\n        });\n\n        analyticsStepTracker = new AnalyticsStepTracker(\n            checkoutService,\n            new AnalyticsExtraItemsManager(sessionStorage),\n            analytics,\n        );\n    });\n\n    describe('#trackCheckoutStarted()', () => {\n        beforeEach(() => {\n            analyticsStepTracker.trackCheckoutStarted();\n        });\n\n        it('saves the category and brand data to the storage', () => {\n            expect(sessionStorage.setItem).toHaveBeenCalledWith(\n                'ORDER_ITEMS_b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                JSON.stringify(storedData),\n            );\n        });\n\n        it('only tracks analytics once', () => {\n            analyticsStepTracker.trackCheckoutStarted();\n            analyticsStepTracker.trackCheckoutStarted();\n\n            expect(analytics.track).toHaveBeenCalledTimes(1);\n        });\n\n        it('tracks the affiliation', () => {\n            expect(analytics.track).toHaveBeenCalledWith(\n                'Checkout Started',\n                expect.objectContaining({\n                    affiliation: 's1504098821',\n                }),\n            );\n        });\n\n        it('tracks the currency', () => {\n            expect(analytics.track).toHaveBeenCalledWith(\n                'Checkout Started',\n                expect.objectContaining({\n                    currency: 'JPY',\n                }),\n            );\n        });\n\n        it('tracks the expected tax', () => {\n            expect(analytics.track).toHaveBeenCalledWith(\n                'Checkout Started',\n                expect.objectContaining({\n                    tax: 3.03,\n                }),\n            );\n        });\n\n        it('tracks the expected revenue', () => {\n            expect(analytics.track).toHaveBeenCalledWith(\n                'Checkout Started',\n                expect.objectContaining({\n                    revenue: 191.9,\n                }),\n            );\n        });\n\n        it('tracks the expected shipping cost', () => {\n            expect(analytics.track).toHaveBeenCalledWith(\n                'Checkout Started',\n                expect.objectContaining({\n                    shipping: 15.15,\n                }),\n            );\n        });\n\n        it('tracks the coupons', () => {\n            expect(analytics.track).toHaveBeenCalledWith(\n                'Checkout Started',\n                expect.objectContaining({\n                    coupon: 'SAVEBIG2015,279F507D817E3E7',\n                }),\n            );\n        });\n\n        it('tracks the products', () => {\n            expect(analytics.track).toHaveBeenCalledWith(\n                'Checkout Started',\n                expect.objectContaining({\n                    products: [\n                        {\n                            product_id: '103',\n                            sku: 'CLC',\n                            name: 'Canvas Laundry Cart',\n                            price: 190,\n                            quantity: 1,\n                            image_url: '/images/canvas-laundry-cart.jpg',\n                            brand: 'OFS',\n                            category: 'Cat 1',\n                            variant: 'n:v',\n                        },\n                        {\n                            product_id: '104',\n                            sku: 'CLX',\n                            name: 'Digital Book',\n                            price: 200,\n                            quantity: 1,\n                            image_url: '/images/digital-book.jpg',\n                            brand: 'Digitalia',\n                            category: 'Ebooks, Audio Books',\n                            variant: 'm:l',\n                        },\n                        {\n                            name: '$100 Gift Certificate',\n                            price: 101,\n                            product_id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                            quantity: 1,\n                        },\n                    ],\n                }),\n            );\n        });\n    });\n\n    describe('#trackOrderComplete()', () => {\n        describe('when order is not complete', () => {\n            beforeEach(() => {\n                jest.spyOn(checkoutService.getState().data, 'getOrder').mockReturnValue({\n                    isComplete: false,\n                } as Order);\n                analyticsStepTracker.trackOrderComplete();\n            });\n\n            it('does not send any data', () => {\n                expect(analytics.track).not.toHaveBeenCalled();\n            });\n\n            it('doest not remove the category and brand data from the storage', () => {\n                expect(sessionStorage.removeItem).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('when there are no saved items', () => {\n            beforeEach(() => {\n                jest.spyOn(checkoutService.getState().data, 'getOrder').mockReturnValue(getOrder());\n\n                sessionStorage.getItem = jest.fn(() => null);\n                analyticsStepTracker.trackOrderComplete();\n            });\n\n            it('does not send any data', () => {\n                expect(analytics.track).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('when there is a complete order', () => {\n            beforeEach(() => {\n                jest.spyOn(checkoutService.getState().data, 'getOrder').mockReturnValue(getOrder());\n\n                analyticsStepTracker.trackOrderComplete();\n            });\n\n            it('tracks the order id', () => {\n                expect(analytics.track).toHaveBeenCalledWith(\n                    'Order Completed',\n                    expect.objectContaining({\n                        order_id: '295',\n                    }),\n                );\n            });\n\n            it('tracks the order affiliation', () => {\n                expect(analytics.track).toHaveBeenCalledWith(\n                    'Order Completed',\n                    expect.objectContaining({\n                        affiliation: 's1504098821',\n                    }),\n                );\n            });\n\n            it('tracks the order grand total', () => {\n                expect(analytics.track).toHaveBeenCalledWith(\n                    'Order Completed',\n                    expect.objectContaining({\n                        revenue: 191.9,\n                    }),\n                );\n            });\n\n            it('tracks the order shipping cost', () => {\n                expect(analytics.track).toHaveBeenCalledWith(\n                    'Order Completed',\n                    expect.objectContaining({\n                        shipping: 15.15,\n                    }),\n                );\n            });\n\n            it('tracks the order discount amount', () => {\n                expect(analytics.track).toHaveBeenCalledWith(\n                    'Order Completed',\n                    expect.objectContaining({\n                        discount: 10.1,\n                    }),\n                );\n            });\n\n            it('tracks the order coupons as a single, comma-separated string', () => {\n                expect(analytics.track).toHaveBeenCalledWith(\n                    'Order Completed',\n                    expect.objectContaining({\n                        coupon: 'SAVEBIG2015,279F507D817E3E7',\n                    }),\n                );\n            });\n\n            it('tracks the order currency', () => {\n                expect(analytics.track).toHaveBeenCalledWith(\n                    'Order Completed',\n                    expect.objectContaining({\n                        currency: 'JPY',\n                    }),\n                );\n            });\n\n            it('tracks the tax total value', () => {\n                expect(analytics.track).toHaveBeenCalledWith(\n                    'Order Completed',\n                    expect.objectContaining({\n                        tax: 3.03,\n                    }),\n                );\n            });\n\n            it('tracks the product list', () => {\n                expect(analytics.track).toHaveBeenCalledWith(\n                    'Order Completed',\n                    expect.objectContaining({\n                        products: [\n                            {\n                                product_id: '103',\n                                sku: 'CLC',\n                                name: 'Canvas Laundry Cart',\n                                price: 190,\n                                quantity: 1,\n                                image_url: '/images/canvas-laundry-cart.jpg',\n                                brand: 'OFS',\n                                category: 'Cat 1',\n                                variant: 'n:v',\n                            },\n                            {\n                                product_id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                                name: '$100 Gift Certificate',\n                                price: 101,\n                                quantity: 1,\n                            },\n                        ],\n                    }),\n                );\n            });\n\n            it('reads data from session storage', () => {\n                expect(sessionStorage.getItem).toHaveBeenCalledWith(\n                    'ORDER_ITEMS_b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                );\n            });\n\n            it('removes the category and brand data to the storage', () => {\n                expect(sessionStorage.removeItem).toHaveBeenCalledWith(\n                    'ORDER_ITEMS_b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                );\n            });\n        });\n\n        describe('When order reach Google Analytics payload limit', () => {\n            beforeEach(() => {\n                (isGoogleAnalyticsAvailable as jest.Mock<any>).mockImplementation(() => true);\n                (isPayloadSizeLimitReached as jest.Mock<any>).mockImplementation(() => true);\n\n                jest.spyOn(checkoutService.getState().data, 'getOrder').mockReturnValue({\n                    ...getOrder(),\n                    lineItems: {\n                        physicalItems: Array.from(new Array(100)).map(() => getPhysicalItem()),\n                        digitalItems: [],\n                        giftCertificates: [getGiftCertificateItem()],\n                        customItems: [],\n                    },\n                });\n\n                jest.spyOn(checkoutService.getState().data, 'getConfig').mockReturnValue({\n                    ...getConfig().storeConfig,\n                    checkoutSettings: {\n                        ...getConfig().storeConfig.checkoutSettings,\n                        features: {\n                            'DATA-6891.missing_orders_within_GA': true,\n                        },\n                    },\n                });\n\n                analyticsStepTracker = new AnalyticsStepTracker(\n                    checkoutService,\n                    new AnalyticsExtraItemsManager(sessionStorage),\n                    analytics,\n                );\n\n                analyticsStepTracker.trackOrderComplete();\n            });\n\n            afterEach(() => {\n                jest.clearAllMocks();\n            });\n\n            it('Payload reach limit and we will go through all products separately', () => {\n                expect(isGoogleAnalyticsAvailable).toHaveBeenCalled();\n                expect(isPayloadSizeLimitReached).toHaveBeenCalled();\n                expect(sendGoogleAnalytics).toHaveBeenCalledTimes(102);\n                expect(analytics.track).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('When order does not reach Google Analytics payload limit', () => {\n            beforeEach(() => {\n                (isGoogleAnalyticsAvailable as jest.Mock<any>).mockImplementation(() => true);\n                (isPayloadSizeLimitReached as jest.Mock<any>).mockImplementation(() => false);\n                (sendGoogleAnalytics as jest.Mock<any>).mockImplementation();\n\n                jest.spyOn(checkoutService.getState().data, 'getOrder').mockReturnValue(getOrder());\n\n                jest.spyOn(checkoutService.getState().data, 'getConfig').mockReturnValue({\n                    ...getConfig().storeConfig,\n                    checkoutSettings: {\n                        ...getConfig().storeConfig.checkoutSettings,\n                        features: {\n                            'DATA-6891.missing_orders_within_GA': true,\n                        },\n                    },\n                });\n\n                analyticsStepTracker = new AnalyticsStepTracker(\n                    checkoutService,\n                    new AnalyticsExtraItemsManager(sessionStorage),\n                    analytics,\n                );\n\n                analyticsStepTracker.trackOrderComplete();\n            });\n\n            afterEach(() => {\n                jest.clearAllMocks();\n            });\n\n            it('analytics.track() should be executed', () => {\n                expect(isGoogleAnalyticsAvailable).toHaveBeenCalled();\n                expect(isPayloadSizeLimitReached).toHaveBeenCalled();\n                expect(sendGoogleAnalytics).not.toHaveBeenCalled();\n                expect(analytics.track).toHaveBeenCalledTimes(1);\n            });\n        });\n    });\n\n    describe('#trackStepViewed()', () => {\n        beforeEach(() => {\n            analyticsStepTracker.trackStepViewed('payment');\n        });\n\n        it('sends step viewed tracking data to GA for the given step with current currency', () => {\n            expect(analytics.track).toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                step: AnalyticStepId.PAYMENT,\n                currency: 'JPY',\n            });\n        });\n\n        it('sends step completed & viewed tracking data to GA for all the steps before given step (including current step)', () => {\n            expect(analytics.track).toHaveBeenCalledWith(\n                COMPLETED_EVENT_NAME,\n                buildCompletedPayload(AnalyticStepId.CUSTOMER),\n            );\n            expect(analytics.track).toHaveBeenCalledWith(\n                COMPLETED_EVENT_NAME,\n                buildCompletedPayload(AnalyticStepId.BILLING),\n            );\n            expect(analytics.track).toHaveBeenCalledWith(\n                COMPLETED_EVENT_NAME,\n                buildCompletedPayload(AnalyticStepId.SHIPPING),\n            );\n\n            expect(analytics.track).toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                step: AnalyticStepId.PAYMENT,\n                currency: 'JPY',\n            });\n            expect(analytics.track).toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                step: AnalyticStepId.CUSTOMER,\n                currency: 'JPY',\n            });\n            expect(analytics.track).toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                step: AnalyticStepId.BILLING,\n                currency: 'JPY',\n            });\n            expect(analytics.track).toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                step: AnalyticStepId.SHIPPING,\n                currency: 'JPY',\n            });\n        });\n\n        it('throws exception when custom invaid step order is passed', () => {\n            expect(\n                () =>\n                    new AnalyticsStepTracker(checkoutService, sessionStorage, analytics, {\n                        checkoutSteps: [\n                            'shipping',\n                            'billying' as AnalyticStepType,\n                            'payment',\n                            'customer',\n                        ],\n                    }),\n            ).toThrow(InvalidArgumentError);\n        });\n\n        describe('when custom step order is passed', () => {\n            let analyticsStepTrackerCustomOrder: AnalyticsStepTracker;\n\n            beforeEach(() => {\n                analyticsStepTrackerCustomOrder = new AnalyticsStepTracker(\n                    checkoutService,\n                    new AnalyticsExtraItemsManager(sessionStorage),\n                    analytics,\n                    {\n                        checkoutSteps: ['shipping', 'billing', 'payment', 'customer'],\n                    },\n                );\n            });\n\n            it('only sends step viewed and complete for defined previous steps', () => {\n                (analytics.track as jest.Mock).mockClear();\n\n                analyticsStepTrackerCustomOrder.trackStepViewed('billing');\n\n                expect(analytics.track).toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                    step: AnalyticStepId.BILLING,\n                    currency: 'JPY',\n                });\n                expect(analytics.track).toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                    step: AnalyticStepId.SHIPPING,\n                    currency: 'JPY',\n                });\n                expect(analytics.track).toHaveBeenCalledWith(\n                    COMPLETED_EVENT_NAME,\n                    buildCompletedPayload(AnalyticStepId.SHIPPING),\n                );\n\n                expect(analytics.track).not.toHaveBeenCalledWith(\n                    COMPLETED_EVENT_NAME,\n                    expect.objectContaining({ step: AnalyticStepId.BILLING }),\n                );\n                expect(analytics.track).not.toHaveBeenCalledWith(\n                    COMPLETED_EVENT_NAME,\n                    expect.objectContaining({ step: AnalyticStepId.PAYMENT }),\n                );\n                expect(analytics.track).not.toHaveBeenCalledWith(\n                    COMPLETED_EVENT_NAME,\n                    expect.objectContaining({ step: AnalyticStepId.CUSTOMER }),\n                );\n                expect(analytics.track).not.toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                    step: AnalyticStepId.PAYMENT,\n                    currency: 'JPY',\n                });\n                expect(analytics.track).not.toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                    step: AnalyticStepId.CUSTOMER,\n                    currency: 'JPY',\n                });\n            });\n        });\n\n        describe('when no checkout steps', () => {\n            let analyticsStepTrackerNoBackfill: AnalyticsStepTracker;\n\n            beforeEach(() => {\n                analyticsStepTrackerNoBackfill = new AnalyticsStepTracker(\n                    checkoutService,\n                    new AnalyticsExtraItemsManager(sessionStorage),\n                    analytics,\n                    { checkoutSteps: [] },\n                );\n            });\n\n            it('only sends step viewed event for passed step', () => {\n                (analytics.track as jest.Mock).mockClear();\n\n                analyticsStepTrackerNoBackfill.trackStepViewed('payment');\n\n                expect(analytics.track).not.toHaveBeenCalledWith(\n                    COMPLETED_EVENT_NAME,\n                    expect.anything(),\n                );\n\n                expect(analytics.track).toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                    step: AnalyticStepId.PAYMENT,\n                    currency: 'JPY',\n                });\n                expect(analytics.track).not.toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                    step: AnalyticStepId.CUSTOMER,\n                    currency: 'JPY',\n                });\n                expect(analytics.track).not.toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                    step: AnalyticStepId.BILLING,\n                    currency: 'JPY',\n                });\n                expect(analytics.track).not.toHaveBeenCalledWith(VIEWED_EVENT_NAME, {\n                    step: AnalyticStepId.SHIPPING,\n                    currency: 'JPY',\n                });\n            });\n        });\n    });\n\n    describe('#trackStepCompleted()', () => {\n        describe('when no information is available', () => {\n            beforeEach(() => {\n                analyticsStepTracker.trackStepCompleted('payment');\n            });\n\n            it('sends an empty shipping_method property when neither payment_method nor shipping_method are specified', () => {\n                expect(analytics.track).toHaveBeenCalledWith(\n                    COMPLETED_EVENT_NAME,\n                    buildCompletedPayload(AnalyticStepId.PAYMENT),\n                );\n            });\n        });\n\n        describe('when there is information available', () => {\n            beforeEach(() => {\n                jest.spyOn(\n                    checkoutService.getState().data,\n                    'getSelectedShippingOption',\n                ).mockReturnValue(getShippingOption());\n\n                jest.spyOn(\n                    checkoutService.getState().data,\n                    'getSelectedPaymentMethod',\n                ).mockReturnValue(getPaymentMethod());\n\n                analyticsStepTracker.trackStepCompleted('payment');\n            });\n\n            it('sends the shipping_method and payment data', () => {\n                expect(analytics.track).toHaveBeenCalledWith(COMPLETED_EVENT_NAME, {\n                    step: AnalyticStepId.PAYMENT,\n                    shipping_method: 'Flat Rate',\n                    payment_method: 'Authorizenet',\n                    currency: 'JPY',\n                });\n            });\n\n            it('calls track only once per step', () => {\n                analytics.track.mockReset();\n                analyticsStepTracker.trackStepCompleted('payment');\n\n                expect(analytics.track).toHaveBeenCalledTimes(0);\n            });\n\n            it('sends step complete event again if different shipping_method is selected', () => {\n                jest.spyOn(\n                    checkoutService.getState().data,\n                    'getSelectedShippingOption',\n                ).mockReturnValue({\n                    ...getShippingOption(),\n                    id: 'id-foo',\n                    description: 'foo',\n                });\n\n                jest.spyOn(\n                    checkoutService.getState().data,\n                    'getSelectedPaymentMethod',\n                ).mockReturnValue(undefined);\n\n                analyticsStepTracker.trackStepCompleted('shipping');\n\n                expect(analytics.track).toHaveBeenLastCalledWith(COMPLETED_EVENT_NAME, {\n                    step: AnalyticStepId.SHIPPING,\n                    shipping_method: 'foo',\n                    currency: 'JPY',\n                });\n            });\n        });\n    });\n\n    function buildCompletedPayload(step: AnalyticStepId) {\n        return { step, shipping_method: ' ', currency: 'JPY' };\n    }\n});\n"
  },
  {
    "path": "packages/core/src/analytics/analytics-step-tracker.ts",
    "content": "import { keys } from 'lodash';\n\nimport {\n    AnalyticsExtraItemsManager,\n    AnalyticsTracker,\n    ExtraItemsData,\n} from '@bigcommerce/checkout-sdk/analytics';\n\nimport { DigitalItem, LineItemMap, PhysicalItem } from '../cart';\nimport { Checkout, CheckoutService } from '../checkout';\nimport { InvalidArgumentError } from '../common/error/errors';\nimport { ShopperCurrency, StoreProfile } from '../config';\nimport { Coupon } from '../coupon';\nimport { Order } from '../order';\nimport { ShippingOption } from '../shipping';\n\nimport {\n    isGoogleAnalyticsAvailable,\n    isPayloadSizeLimitReached,\n    sendGoogleAnalytics,\n} from './analytics-tracker-ga';\nimport StepTracker from './step-tracker';\n\nexport interface StepTrackerConfig {\n    checkoutSteps?: AnalyticStepType[];\n}\n\nexport type AnalyticStepType = 'customer' | 'shipping' | 'billing' | 'payment';\n\nexport enum AnalyticStepId {\n    CUSTOMER = 1,\n    SHIPPING,\n    BILLING,\n    PAYMENT,\n}\n\nconst ANALYTIC_STEPS: { [key: string]: AnalyticStepId } = {\n    customer: AnalyticStepId.CUSTOMER,\n    shipping: AnalyticStepId.SHIPPING,\n    billing: AnalyticStepId.BILLING,\n    payment: AnalyticStepId.PAYMENT,\n};\n\nexport default class AnalyticsStepTracker implements StepTracker {\n    private _checkoutStarted = false;\n    private _completedSteps: { [key: string]: boolean } = {};\n    private _viewedSteps: { [key in AnalyticStepId]?: boolean } = {};\n    private _analyticStepOrder: AnalyticStepType[] = ['customer', 'shipping', 'billing', 'payment'];\n\n    constructor(\n        private checkoutService: CheckoutService,\n        private analyticsExtraItemsManager: AnalyticsExtraItemsManager,\n        private analytics: AnalyticsTracker,\n        { checkoutSteps }: StepTrackerConfig = {},\n    ) {\n        if (checkoutSteps !== undefined) {\n            if (checkoutSteps.some((value) => !(value in ANALYTIC_STEPS))) {\n                throw new InvalidArgumentError(\n                    `Invalid checkout steps provided. Valid values are: ${keys(ANALYTIC_STEPS).join(\n                        ', ',\n                    )}.`,\n                );\n            }\n\n            this._analyticStepOrder = checkoutSteps;\n        }\n    }\n\n    trackCheckoutStarted(): void {\n        if (this._checkoutStarted) {\n            return;\n        }\n\n        const checkout = this.getCheckout();\n\n        if (!checkout) {\n            return;\n        }\n\n        const {\n            coupons,\n            grandTotal,\n            shippingCostTotal,\n            taxTotal,\n            cart: { lineItems, discountAmount, id },\n        } = checkout;\n\n        const extraItemsData = this.analyticsExtraItemsManager.saveExtraItemsData(id, lineItems);\n\n        this.analytics.track(\n            'Checkout Started',\n            this.getTrackingPayload({\n                revenue: grandTotal,\n                shipping: shippingCostTotal,\n                tax: taxTotal,\n                discount: discountAmount,\n                coupons,\n                lineItems,\n                extraItemsData,\n            }),\n        );\n\n        this._checkoutStarted = true;\n    }\n\n    trackOrderComplete(): void {\n        const order = this.getOrder();\n\n        if (!order) {\n            return;\n        }\n\n        const {\n            isComplete,\n            orderId,\n            orderAmount,\n            shippingCostTotal,\n            taxTotal,\n            discountAmount,\n            coupons,\n            lineItems,\n            cartId,\n        } = order;\n\n        if (!isComplete) {\n            return;\n        }\n\n        const extraItemsData = this.analyticsExtraItemsManager.readExtraItemsData(cartId);\n\n        if (extraItemsData === null) {\n            return;\n        }\n\n        const isMissingOrdersExperimentEnabled = this.checkoutService.getState().data.getConfig()\n            ?.checkoutSettings.features['DATA-6891.missing_orders_within_GA'];\n\n        const payload = this.getTrackingPayload({\n            orderId,\n            revenue: orderAmount,\n            shipping: shippingCostTotal,\n            tax: taxTotal,\n            discount: discountAmount,\n            coupons,\n            extraItemsData,\n            lineItems,\n        });\n\n        if (\n            isMissingOrdersExperimentEnabled &&\n            isGoogleAnalyticsAvailable() &&\n            isPayloadSizeLimitReached(payload)\n        ) {\n            sendGoogleAnalytics('transaction', {\n                '&ti': payload.order_id,\n                '&ta': payload.affiliation,\n                '&tr': payload.revenue,\n                '&ts': payload.shipping,\n                '&tt': payload.tax,\n                '&tcc': payload.coupon,\n                '&cu': payload.currency,\n            });\n            payload.products.forEach((product) => {\n                sendGoogleAnalytics('item', {\n                    '&ti': payload.order_id,\n                    '&in': product.name,\n                    '&ic': product.sku,\n                    '&iv': `${product.category}`,\n                    '&ip': product.price,\n                    '&iq': product.quantity,\n                });\n            });\n\n            // TODO: decide how to send large orders to Segment without sending to GA again\n            return this.analyticsExtraItemsManager.clearExtraItemData(cartId);\n        }\n\n        this.analytics.track('Order Completed', payload);\n\n        this.analyticsExtraItemsManager.clearExtraItemData(cartId);\n    }\n\n    trackStepViewed(step: AnalyticStepType): void {\n        const stepId = this.getIdFromStep(step);\n\n        if (!stepId || this.hasStepViewed(stepId)) {\n            return;\n        }\n\n        this.trackViewed(stepId);\n        this.backfill(stepId);\n    }\n\n    trackStepCompleted(step: AnalyticStepType): void {\n        const stepId = this.getIdFromStep(step);\n\n        if (!stepId || this.hasStepCompleted(stepId)) {\n            return;\n        }\n\n        this.backfill(stepId);\n        this.trackCompleted(stepId);\n    }\n\n    private backfill(stepId: AnalyticStepId): void {\n        for (const i of this._analyticStepOrder) {\n            const id = this.getIdFromStep(i);\n\n            if (!id) {\n                break;\n            }\n\n            if (!this.hasStepViewed(id)) {\n                this.trackViewed(id);\n            }\n\n            if (id === stepId) {\n                break;\n            }\n\n            if (!this.hasStepCompleted(id)) {\n                this.trackCompleted(id);\n            }\n        }\n    }\n\n    private trackCompleted(stepId: AnalyticStepId): void {\n        const shippingMethod = this.getSelectedShippingOption();\n        const { code: currency = '' } = this.getShopperCurrency() || {};\n        const paymentMethod = this.getPaymentMethodName();\n\n        const payload: {\n            step: number;\n            currency: string;\n            shipping_method?: string;\n            payment_method?: string;\n        } = {\n            step: stepId,\n            currency,\n        };\n\n        if (shippingMethod) {\n            payload.shipping_method = shippingMethod.description;\n        }\n\n        if (paymentMethod) {\n            payload.payment_method = paymentMethod;\n        }\n\n        // due to an issue with the way the segment library works, we must send at least one of the two\n        // options--otherwise it rejects the track call with no diagnostic messages. however, if we blindly\n        // include both options, it sends a single comma for the value, which is undesireable. by only adding\n        // one of the two (shippingMethod here being arbitrarily chosen), we always have at least one value, but\n        // never send two empty values.\n        if (!payload.shipping_method && !payload.payment_method) {\n            payload.shipping_method = ' ';\n        }\n\n        this.analytics.track('Checkout Step Completed', payload);\n\n        const shippingMethodId = shippingMethod ? shippingMethod.id : '';\n        const completedStepId =\n            stepId === AnalyticStepId.SHIPPING ? `${stepId}-${shippingMethodId}` : stepId;\n\n        this._completedSteps[completedStepId] = true;\n    }\n\n    private getTrackingPayload({\n        orderId,\n        revenue,\n        shipping,\n        tax,\n        discount,\n        coupons,\n        extraItemsData,\n        lineItems,\n    }: {\n        orderId?: number;\n        revenue: number;\n        shipping: number;\n        tax: number;\n        discount: number;\n        coupons: Coupon[];\n        extraItemsData: ExtraItemsData;\n        lineItems: LineItemMap;\n    }) {\n        const { code = '' } = this.getShopperCurrency() || {};\n        const { storeName = '' } = this.getStoreProfile() || {};\n\n        return {\n            order_id: String(orderId),\n            affiliation: storeName,\n            revenue: this.toShopperCurrency(revenue),\n            shipping: this.toShopperCurrency(shipping),\n            tax: this.toShopperCurrency(tax),\n            discount: this.toShopperCurrency(discount),\n            coupon: (coupons || []).map((coupon) => coupon.code.toUpperCase()).join(','),\n            currency: code,\n            products: this.getProducts(extraItemsData, lineItems),\n        };\n    }\n\n    private hasStepCompleted(stepId: AnalyticStepId): boolean {\n        const shippingOption = this.getSelectedShippingOption();\n        const shippingMethodId = shippingOption ? shippingOption.id : '';\n\n        return (\n            Object.prototype.hasOwnProperty.call(this._completedSteps, stepId) ||\n            (stepId === AnalyticStepId.SHIPPING &&\n                Object.prototype.hasOwnProperty.call(\n                    this._completedSteps,\n                    `${stepId}-${shippingMethodId}`,\n                ))\n        );\n    }\n\n    private hasStepViewed(stepId: AnalyticStepId): boolean {\n        return !!this._viewedSteps[stepId];\n    }\n\n    private getIdFromStep(step: string): AnalyticStepId | null {\n        const name = step.split('.');\n\n        return ANALYTIC_STEPS[name[0]] || null;\n    }\n\n    private trackViewed(stepId: AnalyticStepId): void {\n        const currency = this.getShopperCurrency();\n\n        this.analytics.track('Checkout Step Viewed', {\n            step: stepId,\n            currency: currency ? currency.code : '',\n        });\n\n        this._viewedSteps[stepId] = true;\n    }\n\n    private getOrder(): Order | undefined {\n        const {\n            data: { getOrder },\n        } = this.checkoutService.getState();\n\n        return getOrder();\n    }\n\n    private getCheckout(): Checkout | undefined {\n        const {\n            data: { getCheckout },\n        } = this.checkoutService.getState();\n\n        return getCheckout();\n    }\n\n    private getShopperCurrency(): ShopperCurrency | undefined {\n        const {\n            data: { getConfig },\n        } = this.checkoutService.getState();\n        const config = getConfig();\n\n        return config && config.shopperCurrency;\n    }\n\n    private getStoreProfile(): StoreProfile | undefined {\n        const {\n            data: { getConfig },\n        } = this.checkoutService.getState();\n        const config = getConfig();\n\n        return config && config.storeProfile;\n    }\n\n    private toShopperCurrency(amount: number): number {\n        const { exchangeRate = 1 } = this.getShopperCurrency() || {};\n\n        return Math.round(amount * exchangeRate * 100) / 100;\n    }\n\n    private getSelectedShippingOption(): ShippingOption | null {\n        const { data } = this.checkoutService.getState();\n        const shippingOption = data.getSelectedShippingOption();\n\n        return shippingOption && shippingOption.id && shippingOption.description\n            ? shippingOption\n            : null;\n    }\n\n    private getPaymentMethodName(): string {\n        const { data } = this.checkoutService.getState();\n        const paymentMethod = data.getSelectedPaymentMethod();\n\n        return paymentMethod && paymentMethod.config ? paymentMethod.config.displayName || '' : '';\n    }\n\n    private getProducts(itemsData: ExtraItemsData, lineItems: LineItemMap): AnalyticsProduct[] {\n        const customItems: AnalyticsProduct[] = (lineItems.customItems || []).map((item) => ({\n            product_id: item.id,\n            sku: item.sku,\n            price: item.listPrice,\n            quantity: item.quantity,\n            name: item.name,\n        }));\n\n        const giftCertificateItems: AnalyticsProduct[] = lineItems.giftCertificates.map((item) => {\n            return {\n                product_id: item.id,\n                price: this.toShopperCurrency(item.amount),\n                name: item.name,\n                quantity: 1,\n            };\n        });\n\n        const transformItem = (item: PhysicalItem | DigitalItem): AnalyticsProduct => {\n            let itemAttributes;\n\n            if (item.options && item.options.length) {\n                itemAttributes = item.options.map((option) => `${option.name}:${option.value}`);\n                itemAttributes.sort();\n            }\n\n            const variant =\n                Array.isArray(itemAttributes) && itemAttributes.length\n                    ? itemAttributes.join(', ')\n                    : 'single-product-option';\n\n            const brand = itemsData[item.productId] && itemsData[item.productId].brand;\n\n            return {\n                product_id: String(item.productId),\n                sku: item.sku,\n                price: item.salePrice,\n                image_url: item.imageUrl,\n                name: item.name,\n                quantity: item.quantity,\n                category: itemsData[item.productId] ? itemsData[item.productId].category : '',\n                variant,\n                ...(brand && { brand }),\n            };\n        };\n\n        const physicalAndDigitalItems: AnalyticsProduct[] = [\n            ...lineItems.physicalItems,\n            ...lineItems.digitalItems,\n        ].map(transformItem);\n\n        return [...customItems, ...physicalAndDigitalItems, ...giftCertificateItems];\n    }\n}\n\nexport interface AnalyticsProduct {\n    product_id: string | number;\n    price: number;\n    quantity: number;\n    name: string;\n    sku?: string;\n    image_url?: string;\n    category?: string;\n    variant?: string;\n    brand?: string;\n}\n"
  },
  {
    "path": "packages/core/src/analytics/analytics-tracker-ga.spec.ts",
    "content": "import { ExtraItemsData } from '@bigcommerce/checkout-sdk/analytics';\n\nimport { LineItemMap } from '../cart';\nimport { getGiftCertificateItem } from '../cart/line-items.mock';\nimport { getPhysicalItem } from '../order/line-items.mock';\nimport { getOrder } from '../order/orders.mock';\n\nimport { AnalyticsProduct } from './analytics-step-tracker';\nimport { isPayloadSizeLimitReached } from './analytics-tracker-ga';\n\ndescribe('analytics step tracker helpers', () => {\n    test('should return false on small order', () => {\n        const order = getOrder();\n\n        const result = isPayloadSizeLimitReached({\n            orderId: order.orderId,\n            affiliation: 'storeName',\n            revenue: order.orderAmount,\n            shipping: order.shippingCostTotal,\n            tax: order.taxTotal,\n            discount: order.discountAmount,\n            coupon: (order.coupons || []).map((coupon) => coupon.code.toUpperCase()).join(','),\n            currency: 'USD',\n            products: getPayloadProducts({}, order.lineItems),\n        });\n\n        expect(result).toBe(false);\n    });\n\n    test('should return true on large order', () => {\n        const order = getOrder();\n\n        const lineItems = {\n            physicalItems: Array.from(new Array(100)).map(() => getPhysicalItem()),\n            digitalItems: [],\n            giftCertificates: [getGiftCertificateItem()],\n            customItems: [],\n        };\n\n        const result = isPayloadSizeLimitReached({\n            orderId: order.orderId,\n            affiliation: 'storeName',\n            revenue: order.orderAmount,\n            shipping: order.shippingCostTotal,\n            tax: order.taxTotal,\n            discount: order.discountAmount,\n            coupon: (order.coupons || []).map((coupon) => coupon.code.toUpperCase()).join(','),\n            currency: 'USD',\n            products: getPayloadProducts({}, lineItems),\n        });\n\n        expect(result).toBe(true);\n    });\n});\n\nfunction getPayloadProducts(itemsData: ExtraItemsData, lineItems: LineItemMap): AnalyticsProduct[] {\n    const customItems: AnalyticsProduct[] = (lineItems.customItems || []).map((item) => ({\n        product_id: item.id,\n        sku: item.sku,\n        price: item.listPrice,\n        quantity: item.quantity,\n        name: item.name,\n    }));\n\n    const giftCertificateItems: AnalyticsProduct[] = lineItems.giftCertificates.map((item) => {\n        return {\n            product_id: item.id,\n            price: item.amount,\n            name: item.name,\n            quantity: 1,\n        };\n    });\n\n    const physicalAndDigitalItems: AnalyticsProduct[] = [\n        ...lineItems.physicalItems,\n        ...lineItems.digitalItems,\n    ].map((item) => {\n        let itemAttributes;\n\n        if (item.options && item.options.length) {\n            itemAttributes = item.options.map((option) => `${option.name}:${option.value}`);\n            itemAttributes.sort();\n        }\n\n        return {\n            product_id: item.productId,\n            sku: item.sku,\n            price: item.salePrice,\n            image_url: item.imageUrl,\n            name: item.name,\n            quantity: item.quantity,\n            brand: itemsData[item.productId] ? itemsData[item.productId].brand : '',\n            category: itemsData[item.productId] ? itemsData[item.productId].category : '',\n            variant: (itemAttributes || []).join(', '),\n        };\n    });\n\n    return [...customItems, ...physicalAndDigitalItems, ...giftCertificateItems];\n}\n"
  },
  {
    "path": "packages/core/src/analytics/analytics-tracker-ga.ts",
    "content": "import {\n    AnalyticsTrackerWindow,\n    isAnalyticsTrackerWindow,\n} from '@bigcommerce/checkout-sdk/analytics';\n\ninterface AnalyticsTrackerWindowGA extends AnalyticsTrackerWindow {\n    ga(command: string, eventName: string, payload: AnalyticPayload): void;\n}\n\nfunction isAnalyticsTrackerWindowGA(\n    window: Window | AnalyticsTrackerWindowGA,\n): window is AnalyticsTrackerWindowGA {\n    return window && 'ga' in window && typeof window.ga === 'function';\n}\n\nexport function isGoogleAnalyticsAvailable(): boolean {\n    return isAnalyticsTrackerWindow(window) && isAnalyticsTrackerWindowGA(window);\n}\n\nexport function sendGoogleAnalytics(type: string, payload: AnalyticPayload): void {\n    if (isAnalyticsTrackerWindowGA(window)) {\n        window.ga('send', type, {\n            ...payload,\n            nonInteraction: false,\n        });\n    }\n}\n\n/**\n * Max size of the payload for the Google Analytics module\n * if the limit will be succeeded, the GA throwing a silent error,\n * and only in debug mode you can see it\n */\nexport function isPayloadSizeLimitReached(obj: AnalyticPayload): boolean {\n    const ANALYTICS_MAX_URI_LENGTH = 8096;\n\n    return serializeAnalyticsEventPayload(obj).length >= ANALYTICS_MAX_URI_LENGTH;\n}\n\nfunction serializeAnalyticsEventPayload(obj: AnalyticPayload): string {\n    return Object.keys(obj)\n        .reduce((acc: string[], key) => {\n            const type = typeof obj[key];\n\n            if (type === 'string' || type === 'number') {\n                return [...acc, `${key}=${obj[key]}`];\n            }\n\n            if (type === 'object' && obj[key] !== null) {\n                return [...acc, serializeAnalyticsEventPayload(obj[key] as AnalyticPayload)];\n            }\n\n            return acc;\n        }, [])\n        .join('&');\n}\n\ninterface AnalyticPayload {\n    [key: string]: unknown;\n}\n"
  },
  {
    "path": "packages/core/src/analytics/braintree-analytic-tracker/braintree-analytic-tracker-service.ts",
    "content": "export default interface BraintreeAnalyticTrackerService {\n    customerPaymentMethodExecuted(): void;\n    paymentComplete(): void;\n    selectedPaymentMethod(methodId: string): void;\n    walletButtonClick(methodId: string): void;\n}\n"
  },
  {
    "path": "packages/core/src/analytics/braintree-analytic-tracker/braintree-analytic-tracker.spec.ts",
    "content": "import {\n    BraintreeFastlane,\n    BraintreeFastlaneWindow,\n    getBraintree,\n    getFastlaneMock,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\n\nimport { getCart } from '../../cart/carts.mock';\nimport { CheckoutService, createCheckoutService } from '../../checkout';\nimport { getCheckoutWithCoupons } from '../../checkout/checkouts.mock';\nimport { getConfig } from '../../config/configs.mock';\nimport { getCustomer } from '../../customer/customers.mock';\n\nimport BraintreeAnalyticTracker from './braintree-analytic-tracker';\nimport BraintreeAnalyticTrackerService from './braintree-analytic-tracker-service';\n\ndescribe('BraintreeAnalyticTracker', () => {\n    let braintreeAnalyticTracker: BraintreeAnalyticTrackerService;\n    let braintreeFastlaneMock: BraintreeFastlane;\n    let braintreeWindow: Window & Partial<BraintreeFastlaneWindow>;\n    let checkoutService: CheckoutService;\n\n    const getBraintreeAcceleratedCheckout = (isControlGroup: boolean) => ({\n        ...getBraintree(),\n        id: 'braintreeacceleratedcheckout',\n        initializationData: {\n            isAcceleratedCheckoutEnabled: true,\n            shouldRunAcceleratedCheckout: isControlGroup,\n            isBraintreeAnalyticsV2Enabled: true,\n        },\n    });\n\n    const guestCustomer = {\n        ...getCustomer(),\n        isGuest: true,\n    };\n\n    beforeEach(() => {\n        checkoutService = createCheckoutService();\n        braintreeWindow = window;\n        braintreeAnalyticTracker = new BraintreeAnalyticTracker(checkoutService);\n\n        braintreeFastlaneMock = getFastlaneMock();\n        braintreeWindow.braintreeFastlane = braintreeFastlaneMock;\n\n        jest.spyOn(checkoutService.getState().data, 'getCheckout').mockReturnValue(\n            getCheckoutWithCoupons(),\n        );\n\n        jest.spyOn(checkoutService.getState().data, 'getCustomer').mockReturnValue(getCustomer());\n        jest.spyOn(checkoutService.getState().data, 'getCart').mockReturnValue(getCart());\n\n        jest.spyOn(checkoutService.getState().data, 'getConfig').mockReturnValue(\n            getConfig().storeConfig,\n        );\n\n        jest.spyOn(checkoutService.getState().data, 'getPaymentMethods').mockReturnValue([\n            getBraintreeAcceleratedCheckout(true),\n        ]);\n\n        jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue(\n            getBraintreeAcceleratedCheckout(false),\n        );\n    });\n\n    afterAll(() => {\n        delete braintreeWindow.braintreeFastlane;\n    });\n\n    describe('customerPaymentMethodExecuted', () => {\n        it('does not trigger anything if braintreeFastlane is not provided', () => {\n            delete braintreeWindow.braintreeFastlane;\n\n            braintreeAnalyticTracker.customerPaymentMethodExecuted();\n\n            expect(braintreeFastlaneMock.events.emailSubmitted).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger anything if braintree analytic feature is disabled', () => {\n            const braintreeAcceleratedCheckoutMock = getBraintreeAcceleratedCheckout(false);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue({\n                ...braintreeAcceleratedCheckoutMock,\n                initializationData: {\n                    ...braintreeAcceleratedCheckoutMock.initializationData,\n                    isBraintreeAnalyticsV2Enabled: false,\n                },\n            });\n\n            braintreeAnalyticTracker.customerPaymentMethodExecuted();\n\n            expect(braintreeFastlaneMock.events.emailSubmitted).not.toHaveBeenCalled();\n        });\n\n        it('triggers emailSubmitted callback for store member', () => {\n            braintreeAnalyticTracker.customerPaymentMethodExecuted();\n\n            expect(braintreeFastlaneMock.events.emailSubmitted).toHaveBeenCalled();\n        });\n    });\n\n    describe('paymentComplete', () => {\n        it('does not trigger anything if braintreeFastlane is not provided', () => {\n            delete braintreeWindow.braintreeFastlane;\n\n            braintreeAnalyticTracker.paymentComplete();\n\n            expect(braintreeFastlaneMock.events.orderPlaced).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger anything if braintree analytic feature is disabled', () => {\n            const braintreeAcceleratedCheckoutMock = getBraintreeAcceleratedCheckout(false);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue({\n                ...braintreeAcceleratedCheckoutMock,\n                initializationData: {\n                    ...braintreeAcceleratedCheckoutMock.initializationData,\n                    isBraintreeAnalyticsV2Enabled: false,\n                },\n            });\n\n            braintreeAnalyticTracker.paymentComplete();\n\n            expect(braintreeFastlaneMock.events.orderPlaced).not.toHaveBeenCalled();\n        });\n\n        it('triggers orderPlaced', () => {\n            braintreeAnalyticTracker.paymentComplete();\n\n            expect(braintreeFastlaneMock.events.orderPlaced).toHaveBeenCalled();\n        });\n    });\n\n    describe('selectedPaymentMethod', () => {\n        it('does not trigger anything if braintreeFastlane is not provided', () => {\n            delete braintreeWindow.braintreeFastlane;\n\n            braintreeAnalyticTracker.selectedPaymentMethod('applepay');\n\n            expect(braintreeFastlaneMock.events.apmSelected).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger anything if method id is not properly provided', () => {\n            braintreeAnalyticTracker.selectedPaymentMethod('');\n\n            expect(braintreeFastlaneMock.events.apmSelected).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger anything if braintree analytic feature is disabled', () => {\n            const braintreeAcceleratedCheckoutMock = getBraintreeAcceleratedCheckout(false);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue({\n                ...braintreeAcceleratedCheckoutMock,\n                initializationData: {\n                    ...braintreeAcceleratedCheckoutMock.initializationData,\n                    isBraintreeAnalyticsV2Enabled: false,\n                },\n            });\n\n            braintreeAnalyticTracker.selectedPaymentMethod('applepay');\n\n            expect(braintreeFastlaneMock.events.apmSelected).not.toHaveBeenCalled();\n        });\n\n        it('triggers apm selected event', () => {\n            braintreeAnalyticTracker.selectedPaymentMethod('applepay');\n\n            expect(braintreeFastlaneMock.events.apmSelected).toHaveBeenCalled();\n        });\n    });\n\n    describe('walletButtonClick', () => {\n        it('does not trigger anything if braintreeFastlane is not provided', () => {\n            delete braintreeWindow.braintreeFastlane;\n\n            braintreeAnalyticTracker.walletButtonClick('applepay');\n\n            expect(braintreeFastlaneMock.events.apmSelected).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger anything if method id is not properly provided', () => {\n            braintreeAnalyticTracker.walletButtonClick('');\n\n            expect(braintreeFastlaneMock.events.apmSelected).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger anything if braintree analytic feature is disabled', () => {\n            const braintreeAcceleratedCheckoutMock = getBraintreeAcceleratedCheckout(false);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue({\n                ...braintreeAcceleratedCheckoutMock,\n                initializationData: {\n                    ...braintreeAcceleratedCheckoutMock.initializationData,\n                    isBraintreeAnalyticsV2Enabled: false,\n                },\n            });\n\n            braintreeAnalyticTracker.walletButtonClick('applepay');\n\n            expect(braintreeFastlaneMock.events.apmSelected).not.toHaveBeenCalled();\n        });\n\n        it('triggers apm selected event', () => {\n            braintreeAnalyticTracker.walletButtonClick('applepay');\n\n            expect(braintreeFastlaneMock.events.apmSelected).toHaveBeenCalled();\n        });\n    });\n\n    describe('#emailSubmitted callback', () => {\n        const emailSubmitEventOptions = {\n            apm_list: 'braintreeacceleratedcheckout',\n            apm_shown: '0',\n            context_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n            context_type: 'cs_id',\n            experiment: '[{\"treatment_group\":\"control\"}]',\n            merchant_name: 's1504098821',\n            page_name: '',\n            page_type: 'checkout_page',\n            partner_name: 'bigc',\n            store_id: '1504098821',\n            user_email_saved: false,\n            user_type: 'store_member',\n        };\n\n        it('calls emailSubmitted callback for store member', () => {\n            braintreeAnalyticTracker.customerPaymentMethodExecuted();\n\n            expect(braintreeFastlaneMock.events.emailSubmitted).toHaveBeenCalledWith(\n                emailSubmitEventOptions,\n            );\n        });\n\n        it('calls emailSubmitted callback for guest user', () => {\n            jest.spyOn(checkoutService.getState().data, 'getCustomer').mockReturnValue(\n                guestCustomer,\n            );\n\n            braintreeAnalyticTracker.customerPaymentMethodExecuted();\n\n            expect(braintreeFastlaneMock.events.emailSubmitted).toHaveBeenCalledWith({\n                ...emailSubmitEventOptions,\n                user_type: 'store_guest', // <-- this option changes based on \"guest\"/\"store member\" user\n            });\n        });\n\n        it('calls emailSubmitted callback for users from control group', () => {\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethods').mockReturnValue([\n                getBraintreeAcceleratedCheckout(false),\n            ]);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue(\n                getBraintreeAcceleratedCheckout(false),\n            );\n\n            braintreeAnalyticTracker.customerPaymentMethodExecuted();\n\n            expect(braintreeFastlaneMock.events.emailSubmitted).toHaveBeenCalledWith({\n                ...emailSubmitEventOptions,\n                experiment: '[{\"treatment_group\":\"control\"}]', // <- user in test group means that BT AXO feature is not available due to A/B testing flow\n            });\n        });\n\n        it('calls emailSubmitted callback for users from test group', () => {\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethods').mockReturnValue([\n                getBraintreeAcceleratedCheckout(true),\n            ]);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue(\n                getBraintreeAcceleratedCheckout(true),\n            );\n\n            braintreeAnalyticTracker.customerPaymentMethodExecuted();\n\n            expect(braintreeFastlaneMock.events.emailSubmitted).toHaveBeenCalledWith({\n                ...emailSubmitEventOptions,\n                experiment: '[{\"treatment_group\":\"test\"}]',\n            });\n        });\n\n        it('calls emailSubmitted callback and place user in a control group if there was an error loading braintreeacceleratedcheckout payment method', () => {\n            jest.spyOn(\n                checkoutService.getState().errors,\n                'getLoadPaymentMethodError',\n            ).mockReturnValue(Error('asd'));\n\n            braintreeAnalyticTracker.customerPaymentMethodExecuted();\n\n            expect(braintreeFastlaneMock.events.emailSubmitted).toHaveBeenCalledWith({\n                ...emailSubmitEventOptions,\n                experiment: '[{\"treatment_group\":\"control\"}]',\n            });\n        });\n\n        it('calls emailSubmitted callback with apm options', () => {\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethods').mockReturnValue([\n                getBraintree(),\n                getBraintreeAcceleratedCheckout(false),\n            ]);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue(\n                getBraintreeAcceleratedCheckout(false),\n            );\n\n            braintreeAnalyticTracker.customerPaymentMethodExecuted();\n\n            expect(braintreeFastlaneMock.events.emailSubmitted).toHaveBeenCalledWith({\n                ...emailSubmitEventOptions,\n                apm_list: 'braintree,braintreeacceleratedcheckout',\n                apm_shown: '1',\n            });\n        });\n    });\n\n    describe('#paymentComplete callback', () => {\n        const paymentCompleteEventOptions = {\n            context_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n            context_type: 'cs_id',\n            currency_code: 'USD', // <- related to paymentComplete callback\n            experiment: '[{\"treatment_group\":\"control\"}]',\n            merchant_name: 's1504098821',\n            page_name: '',\n            page_type: 'checkout_page',\n            partner_name: 'bigc',\n            selected_payment_method: 'applepay', // <- related to paymentComplete callback\n            store_id: '1504098821',\n            user_type: 'store_member',\n        };\n\n        it('triggers paymentComplete with provided selected method', () => {\n            braintreeAnalyticTracker.selectedPaymentMethod('applepay');\n            braintreeAnalyticTracker.paymentComplete();\n\n            expect(braintreeFastlaneMock.events.orderPlaced).toHaveBeenCalledWith(\n                paymentCompleteEventOptions,\n            );\n        });\n\n        it('triggers paymentComplete with provided with different payment method selected method', () => {\n            braintreeAnalyticTracker.selectedPaymentMethod('braintreeacceleratedcheckout');\n            braintreeAnalyticTracker.paymentComplete();\n\n            expect(braintreeFastlaneMock.events.orderPlaced).toHaveBeenCalledWith({\n                ...paymentCompleteEventOptions,\n                selected_payment_method: 'braintreeacceleratedcheckout',\n            });\n        });\n\n        it('triggers paymentComplete with provided with EUR currency code', () => {\n            jest.spyOn(checkoutService.getState().data, 'getCart').mockReturnValue({\n                ...getCart(),\n                currency: {\n                    name: 'Euro',\n                    code: 'EUR',\n                    symbol: '€',\n                    decimalPlaces: 2,\n                },\n            });\n\n            braintreeAnalyticTracker.selectedPaymentMethod('applepay');\n            braintreeAnalyticTracker.paymentComplete();\n\n            expect(braintreeFastlaneMock.events.orderPlaced).toHaveBeenCalledWith({\n                ...paymentCompleteEventOptions,\n                currency_code: 'EUR',\n            });\n        });\n    });\n\n    describe('#apmSelected callback', () => {\n        const apmSelectedEventOptions = {\n            apm_list: 'braintreeacceleratedcheckout',\n            apm_location: 'payment section',\n            apm_selected: 'applepay',\n            apm_shown: '0',\n            context_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n            context_type: 'cs_id',\n            experiment: '[{\"treatment_group\":\"control\"}]',\n            merchant_name: 's1504098821',\n            page_name: '',\n            page_type: 'checkout_page',\n            partner_name: 'bigc',\n            store_id: '1504098821',\n            user_type: 'store_member',\n        };\n\n        it('triggers apm selected event from payments list', () => {\n            braintreeAnalyticTracker.selectedPaymentMethod('applepay');\n\n            expect(braintreeFastlaneMock.events.apmSelected).toHaveBeenCalledWith(\n                apmSelectedEventOptions,\n            );\n        });\n\n        it('triggers apm selected event as a wallet button', () => {\n            braintreeAnalyticTracker.walletButtonClick('applepay');\n\n            expect(braintreeFastlaneMock.events.apmSelected).toHaveBeenCalledWith({\n                ...apmSelectedEventOptions,\n                apm_location: 'pre-email section',\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/analytics/braintree-analytic-tracker/braintree-analytic-tracker.ts",
    "content": "import {\n    BraintreeFastlane,\n    BraintreeFastlaneApmSelectedEventOptions,\n    BraintreeFastlaneEmailEnteredEventOptions,\n    BraintreeFastlaneEventCommonOptions,\n    BraintreeFastlaneOrderPlacedEventOptions,\n    isBraintreeFastlaneWindow,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CheckoutService } from '../../checkout';\n\nimport BraintreeAnalyticTrackerService from './braintree-analytic-tracker-service';\n\nexport default class BraintreeAnalyticTracker implements BraintreeAnalyticTrackerService {\n    private _selectedPaymentMethodId = '';\n\n    constructor(private checkoutService: CheckoutService) {}\n\n    customerPaymentMethodExecuted() {\n        if (this._shouldTrackFastlaneEvent()) {\n            this._trackEmailSubmitted();\n        }\n    }\n\n    paymentComplete() {\n        if (this._shouldTrackFastlaneEvent()) {\n            this._trackOrderPlaced(this._selectedPaymentMethodId);\n        }\n    }\n\n    selectedPaymentMethod(methodId: string): void {\n        if (this._shouldTrackFastlaneEvent() && methodId) {\n            this._selectedPaymentMethodId = methodId;\n\n            this._trackApmSelected(methodId, false);\n        }\n    }\n\n    walletButtonClick(methodId: string) {\n        if (this._shouldTrackFastlaneEvent() && methodId) {\n            this._selectedPaymentMethodId = methodId;\n\n            this._trackApmSelected(methodId, true);\n        }\n    }\n\n    private _shouldTrackFastlaneEvent() {\n        const state = this.checkoutService.getState();\n        const paymentMethod =\n            state.data.getPaymentMethod('braintree') ||\n            state.data.getPaymentMethod('braintreeacceleratedcheckout');\n        const isAnalyticEnabled = paymentMethod?.initializationData.isBraintreeAnalyticsV2Enabled;\n\n        const isAvailableAnalyticEventsMethods =\n            isBraintreeFastlaneWindow(window) && window.braintreeFastlane.events;\n\n        return isAnalyticEnabled && isAvailableAnalyticEventsMethods;\n    }\n\n    private _getBraintreeEventsOrThrow(): BraintreeFastlane['events'] {\n        if (isBraintreeFastlaneWindow(window)) {\n            return window.braintreeFastlane.events;\n        }\n\n        throw new PaymentMethodClientUnavailableError();\n    }\n\n    /**\n     *\n     * Braintree Events tracking methods\n     *\n     */\n    private _trackEmailSubmitted(): void {\n        const { emailSubmitted } = this._getBraintreeEventsOrThrow();\n        const eventOptions = this._getEmailSubmittedEventOptions();\n\n        emailSubmitted(eventOptions);\n    }\n\n    private _trackApmSelected(methodId: string, isWalletButton: boolean): void {\n        const { apmSelected } = this._getBraintreeEventsOrThrow();\n        const eventOptions = this._getApmSelectedEventOptions(methodId, isWalletButton);\n\n        apmSelected(eventOptions);\n    }\n\n    private _trackOrderPlaced(methodId: string): void {\n        const { orderPlaced } = this._getBraintreeEventsOrThrow();\n        const eventOptions = this._getOrderPlacedEventOptions(methodId);\n\n        orderPlaced(eventOptions);\n    }\n\n    /**\n     *\n     * Event options methods\n     *\n     */\n    private _getEventCommonOptions(): BraintreeFastlaneEventCommonOptions {\n        const state = this.checkoutService.getState();\n        const cart = state.data.getCart();\n        const storeProfile = state.data.getConfig()?.storeProfile;\n        const isGuestCustomer = state.data.getCustomer()?.isGuest;\n\n        const paymentMethod = state.data.getPaymentMethod('braintreeacceleratedcheckout');\n        const isTestTreatmentGroup =\n            !state.errors.getLoadPaymentMethodError('braintreeacceleratedcheckout') &&\n            paymentMethod?.initializationData.shouldRunAcceleratedCheckout;\n\n        const experiments = [\n            {\n                treatment_group: isTestTreatmentGroup ? 'test' : 'control',\n            },\n        ];\n\n        return {\n            context_type: 'cs_id',\n            context_id: cart?.id || '',\n            page_type: 'checkout_page',\n            page_name: window.document.title,\n            partner_name: 'bigc',\n            user_type: isGuestCustomer ? 'store_guest' : 'store_member',\n            store_id: storeProfile?.storeId || '',\n            merchant_name: storeProfile?.storeName || '',\n            experiment: JSON.stringify(experiments),\n        };\n    }\n\n    private _getEmailSubmittedEventOptions(): BraintreeFastlaneEmailEnteredEventOptions {\n        const state = this.checkoutService.getState().data;\n        const paymentMethods = state.getPaymentMethods() || [];\n        const apmList = paymentMethods.map(({ id }) => id);\n\n        return {\n            ...this._getEventCommonOptions(),\n            user_email_saved: false,\n            apm_shown: apmList.length > 1 ? '1' : '0',\n            apm_list: apmList.join(','),\n        };\n    }\n\n    private _getApmSelectedEventOptions(\n        methodId: string,\n        isWalletButton: boolean,\n    ): BraintreeFastlaneApmSelectedEventOptions {\n        const state = this.checkoutService.getState().data;\n        const paymentMethods = state.getPaymentMethods() || [];\n        const apmList = paymentMethods.map(({ id }) => id);\n\n        return {\n            ...this._getEventCommonOptions(),\n            apm_shown: apmList.length > 1 ? '1' : '0',\n            apm_list: apmList.join(','),\n            apm_selected: methodId,\n            apm_location: isWalletButton ? 'pre-email section' : 'payment section',\n        };\n    }\n\n    private _getOrderPlacedEventOptions(\n        methodId: string,\n    ): BraintreeFastlaneOrderPlacedEventOptions {\n        const state = this.checkoutService.getState().data;\n        const cart = state.getCart();\n\n        return {\n            ...this._getEventCommonOptions(),\n            selected_payment_method: methodId,\n            currency_code: cart?.currency.code || '',\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/analytics/braintree-analytic-tracker/create-braintree-analytic-tracker.spec.ts",
    "content": "import { createCheckoutService } from '../../checkout';\n\nimport BraintreeAnalyticTracker from './braintree-analytic-tracker';\nimport createBraintreeAnalyticTracker from './create-braintree-analytic-tracker';\n\ndescribe('createBraintreeAnalyticTracker', () => {\n    it('returns instance of BraintreeAnalyticTracker', () => {\n        const checkoutService = createCheckoutService();\n\n        expect(createBraintreeAnalyticTracker(checkoutService)).toBeInstanceOf(\n            BraintreeAnalyticTracker,\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/analytics/braintree-analytic-tracker/create-braintree-analytic-tracker.ts",
    "content": "import { CheckoutService } from '../../checkout';\n\nimport BraintreeAnalyticTracker from './braintree-analytic-tracker';\nimport BraintreeAnalyticTrackerService from './braintree-analytic-tracker-service';\n\n/**\n * Creates an instance of `BraintreeAnalyticTrackerService`.\n *\n * @remarks\n * ```js\n * const checkoutService = createCheckoutService();\n * await checkoutService.loadCheckout();\n * const braintreeAnalyticTracker = createBraintreeAnalyticTracker(checkoutService);\n *\n * braintreeAnalyticTracker.customerPaymentMethodExecuted();\n * braintreeAnalyticTracker.paymentComplete();\n * braintreeAnalyticTracker.selectedPaymentMethod('applepay');\n * braintreeAnalyticTracker.walletButtonClick('paypal');\n * ```\n *\n * @returns an instance of `BraintreeAnalyticTrackerService`.\n */\nexport default function createBraintreeAnalyticTracker(\n    checkoutService: CheckoutService,\n): BraintreeAnalyticTrackerService {\n    return new BraintreeAnalyticTracker(checkoutService);\n}\n"
  },
  {
    "path": "packages/core/src/analytics/braintree-analytic-tracker/index.ts",
    "content": "export { default as createBraintreeAnalyticTracker } from './create-braintree-analytic-tracker';\nexport { default as BraintreeAnalyticTrackerService } from './braintree-analytic-tracker-service';\n"
  },
  {
    "path": "packages/core/src/analytics/create-step-tracker.spec.ts",
    "content": "import { AnalyticsTracker, AnalyticsTrackerWindow } from '@bigcommerce/checkout-sdk/analytics';\n\nimport { CheckoutService, createCheckoutService } from '../checkout';\nimport { MissingDataError } from '../common/error/errors';\nimport { StoreConfig } from '../config';\n\nimport AnalyticsStepTracker from './analytics-step-tracker';\nimport createStepTracker from './create-step-tracker';\nimport NoopStepTracker from './noop-step-tracker';\n\ndeclare let window: AnalyticsTrackerWindow;\n\ndescribe('createStepTracker', () => {\n    let checkoutService: CheckoutService;\n\n    beforeEach(() => {\n        checkoutService = createCheckoutService();\n    });\n\n    describe('#createStepTracker()', () => {\n        describe('when checkoutService has not been initialized', () => {\n            it('returns instance of noop logger', () => {\n                expect(() => createStepTracker(checkoutService)).toThrow(MissingDataError);\n            });\n        });\n\n        describe('when window.analytics is undefined', () => {\n            beforeEach(() => {\n                jest.spyOn(checkoutService.getState().data, 'getConfig').mockReturnValue({\n                    checkoutSettings: {\n                        isAnalyticsEnabled: true,\n                    },\n                } as StoreConfig);\n            });\n\n            it('returns instance of noop logger', () => {\n                expect(createStepTracker(checkoutService)).toBeInstanceOf(NoopStepTracker);\n            });\n        });\n\n        describe('when analytics settings is disabled', () => {\n            beforeEach(() => {\n                jest.spyOn(checkoutService.getState().data, 'getConfig').mockReturnValue({\n                    checkoutSettings: {\n                        isAnalyticsEnabled: false,\n                    },\n                } as StoreConfig);\n\n                window.analytics = {} as AnalyticsTracker;\n            });\n\n            it('returns instance of noop logger', () => {\n                expect(createStepTracker(checkoutService)).toBeInstanceOf(NoopStepTracker);\n            });\n        });\n\n        describe('when window.analytics is defined and analytics setting enabled', () => {\n            beforeEach(() => {\n                jest.spyOn(checkoutService.getState().data, 'getConfig').mockReturnValue({\n                    checkoutSettings: {\n                        isAnalyticsEnabled: true,\n                    },\n                } as StoreConfig);\n\n                window.analytics = {} as AnalyticsTracker;\n            });\n\n            it('returns instance of AnalyticsStepTracker', () => {\n                expect(createStepTracker(checkoutService)).toBeInstanceOf(AnalyticsStepTracker);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/analytics/create-step-tracker.ts",
    "content": "import localStorageFallback from 'local-storage-fallback';\n\nimport {\n    AnalyticsExtraItemsManager,\n    isAnalyticsTrackerWindow,\n} from '@bigcommerce/checkout-sdk/analytics';\n\nimport { CheckoutService } from '../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\n\nimport AnalyticsStepTracker, { StepTrackerConfig } from './analytics-step-tracker';\nimport NoopStepTracker from './noop-step-tracker';\nimport StepTracker from './step-tracker';\n\n/**\n * Creates an instance of `StepTracker`.\n *\n * @remarks\n * ```js\n * const checkoutService = createCheckoutService();\n * await checkoutService.loadCheckout();\n * const stepTracker = createStepTracker(checkoutService);\n *\n * stepTracker.trackCheckoutStarted();\n * ```\n *\n * @param CheckoutService - An instance of CheckoutService\n * @param StepTrackerConfig - A step tracker config object\n * @returns an instance of `StepTracker`.\n */\nexport default function createStepTracker(\n    checkoutService: CheckoutService,\n    stepTrackerConfig?: StepTrackerConfig,\n): StepTracker {\n    const { data } = checkoutService.getState();\n    const config = data.getConfig();\n\n    if (!config) {\n        throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n    }\n\n    const { isAnalyticsEnabled } = config.checkoutSettings;\n\n    if (isAnalyticsEnabled && isAnalyticsTrackerWindow(window)) {\n        return new AnalyticsStepTracker(\n            checkoutService,\n            new AnalyticsExtraItemsManager(localStorageFallback),\n            window.analytics,\n            stepTrackerConfig,\n        );\n    }\n\n    return new NoopStepTracker();\n}\n"
  },
  {
    "path": "packages/core/src/analytics/index.ts",
    "content": "export { default as createStepTracker } from './create-step-tracker';\nexport { default as StepTracker } from './step-tracker';\n\nexport {\n    createBraintreeAnalyticTracker,\n    BraintreeAnalyticTrackerService,\n} from './braintree-analytic-tracker';\n\nexport {\n    createPayPalCommerceAnalyticTracker,\n    PayPalCommerceAnalyticTrackerService,\n} from './paypal-commerce-analytic-tracker';\n"
  },
  {
    "path": "packages/core/src/analytics/noop-step-tracker.ts",
    "content": "import StepTracker from './step-tracker';\n\nexport default class NoopStepTracker implements StepTracker {\n    trackCheckoutStarted(): void {}\n\n    trackOrderComplete(): void {}\n\n    trackStepViewed(): void {}\n\n    trackStepCompleted(): void {}\n}\n"
  },
  {
    "path": "packages/core/src/analytics/paypal-commerce-analytic-tracker/create-paypal-commerce-analytic-tracker.spec.ts",
    "content": "import { createCheckoutService } from '../../checkout';\n\nimport createPayPalCommerceAnalyticTracker from './create-paypal-commerce-analytic-tracker';\nimport PayPalCommerceAnalyticTracker from './paypal-commerce-analytic-tracker';\n\ndescribe('createPayPalCommerceAnalyticTracker', () => {\n    it('returns instance of PayPalCommerceAnalyticTracker', () => {\n        const checkoutService = createCheckoutService();\n\n        expect(createPayPalCommerceAnalyticTracker(checkoutService)).toBeInstanceOf(\n            PayPalCommerceAnalyticTracker,\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/analytics/paypal-commerce-analytic-tracker/create-paypal-commerce-analytic-tracker.ts",
    "content": "import { CheckoutService } from '../../checkout';\n\nimport PayPalCommerceAnalyticTracker from './paypal-commerce-analytic-tracker';\nimport PayPalCommerceAnalyticTrackerService from './paypal-commerce-analytic-tracker-service';\n\n/**\n * Creates an instance of `PayPalCommerceAnalyticTrackerService`.\n *\n * @remarks\n * ```js\n * const checkoutService = createCheckoutService();\n * await checkoutService.loadCheckout();\n * const paypalCommerceAnalyticTracker = createPayPalCommerceAnalyticTracker(checkoutService);\n *\n * paypalCommerceAnalyticTracker.customerPaymentMethodExecuted();\n * paypalCommerceAnalyticTracker.paymentComplete();\n * paypalCommerceAnalyticTracker.selectedPaymentMethod('applepay');\n * paypalCommerceAnalyticTracker.walletButtonClick('paypal');\n * ```\n *\n * @returns an instance of `PayPalCommerceAnalyticTrackerService`.\n */\nexport default function createPayPalCommerceAnalyticTracker(\n    checkoutService: CheckoutService,\n): PayPalCommerceAnalyticTrackerService {\n    return new PayPalCommerceAnalyticTracker(checkoutService);\n}\n"
  },
  {
    "path": "packages/core/src/analytics/paypal-commerce-analytic-tracker/index.ts",
    "content": "export { default as createPayPalCommerceAnalyticTracker } from './create-paypal-commerce-analytic-tracker';\nexport { default as PayPalCommerceAnalyticTrackerService } from './paypal-commerce-analytic-tracker-service';\n"
  },
  {
    "path": "packages/core/src/analytics/paypal-commerce-analytic-tracker/paypal-commerce-analytic-tracker-service.ts",
    "content": "export default interface PayPalCommerceAnalyticTrackerService {\n    customerPaymentMethodExecuted(): void;\n    paymentComplete(): void;\n    selectedPaymentMethod(methodId: string): void;\n    walletButtonClick(methodId: string): void;\n}\n"
  },
  {
    "path": "packages/core/src/analytics/paypal-commerce-analytic-tracker/paypal-commerce-analytic-tracker.spec.ts",
    "content": "import {\n    getPayPalCommerceAcceleratedCheckoutPaymentMethod,\n    getPayPalCommercePaymentMethod,\n    getPayPalFastlane,\n    PayPalCommerceHostWindow,\n    PayPalFastlane,\n} from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\n\nimport { getCart } from '../../cart/carts.mock';\nimport { CheckoutService, createCheckoutService } from '../../checkout';\nimport { getCheckoutWithCoupons } from '../../checkout/checkouts.mock';\nimport { getConfig } from '../../config/configs.mock';\nimport { getCustomer } from '../../customer/customers.mock';\n\nimport PayPalCommerceAnalyticTracker from './paypal-commerce-analytic-tracker';\nimport PayPalCommerceAnalyticTrackerService from './paypal-commerce-analytic-tracker-service';\n\ndescribe('PayPalCommerceAnalyticTracker', () => {\n    let paypalCommerceFastlaneMock: PayPalFastlane;\n    let paypalCommerceFastlaneWindow: Window & Partial<PayPalCommerceHostWindow>;\n    let paypalCommerceFastlaneTracker: PayPalCommerceAnalyticTrackerService;\n    let checkoutService: CheckoutService;\n\n    const getPayPalCommerceAcceleratedCheckout = (\n        isControlGroup: boolean,\n        isFastlaneEnabled = false,\n    ) => ({\n        ...getPayPalCommerceAcceleratedCheckoutPaymentMethod(),\n        id: 'paypalcommerceacceleratedcheckout',\n        initializationData: {\n            isAcceleratedCheckoutEnabled: true,\n            shouldRunAcceleratedCheckout: isControlGroup,\n            isPayPalCommerceAnalyticsV2Enabled: true,\n            isFastlaneEnabled,\n        },\n    });\n\n    const guestCustomer = {\n        ...getCustomer(),\n        isGuest: true,\n    };\n\n    beforeEach(() => {\n        checkoutService = createCheckoutService();\n        paypalCommerceFastlaneTracker = new PayPalCommerceAnalyticTracker(checkoutService);\n        paypalCommerceFastlaneMock = getPayPalFastlane();\n        paypalCommerceFastlaneWindow = window;\n        paypalCommerceFastlaneWindow.paypalFastlane = paypalCommerceFastlaneMock;\n\n        jest.spyOn(checkoutService.getState().data, 'getCheckout').mockReturnValue(\n            getCheckoutWithCoupons(),\n        );\n\n        jest.spyOn(checkoutService.getState().data, 'getCustomer').mockReturnValue(getCustomer());\n        jest.spyOn(checkoutService.getState().data, 'getCart').mockReturnValue(getCart());\n\n        jest.spyOn(checkoutService.getState().data, 'getConfig').mockReturnValue(\n            getConfig().storeConfig,\n        );\n\n        jest.spyOn(checkoutService.getState().data, 'getPaymentMethods').mockReturnValue([\n            getPayPalCommerceAcceleratedCheckout(true, true),\n        ]);\n        jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue(\n            getPayPalCommerceAcceleratedCheckout(false, true),\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('customerPaymentMethodExecuted', () => {\n        it('does not trigger anything if paypalFastlane is not provided', () => {\n            delete paypalCommerceFastlaneWindow.paypalFastlane;\n\n            paypalCommerceFastlaneTracker.customerPaymentMethodExecuted();\n\n            expect(paypalCommerceFastlaneMock.events.emailSubmitted).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger anything if paypal commerce analytic feature is disabled', () => {\n            const paymentMethodMock = getPayPalCommerceAcceleratedCheckout(false, true);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue({\n                ...paymentMethodMock,\n                initializationData: {\n                    ...paymentMethodMock.initializationData,\n                    isPayPalCommerceAnalyticsV2Enabled: false,\n                },\n            });\n\n            paypalCommerceFastlaneTracker.customerPaymentMethodExecuted();\n\n            expect(paypalCommerceFastlaneMock.events.emailSubmitted).not.toHaveBeenCalled();\n        });\n\n        it('triggers emailSubmitted callback for store member', () => {\n            paypalCommerceFastlaneTracker.customerPaymentMethodExecuted();\n\n            expect(paypalCommerceFastlaneMock.events.emailSubmitted).toHaveBeenCalled();\n        });\n    });\n\n    describe('paymentComplete', () => {\n        it('does not trigger anything if paypalFastlane is not provided', () => {\n            delete paypalCommerceFastlaneWindow.paypalFastlane;\n\n            paypalCommerceFastlaneTracker.paymentComplete();\n\n            expect(paypalCommerceFastlaneMock.events.orderPlaced).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger anything if paypal commerce analytic feature is disabled', () => {\n            const paymentMethodMock = getPayPalCommerceAcceleratedCheckout(false, true);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue({\n                ...paymentMethodMock,\n                initializationData: {\n                    ...paymentMethodMock.initializationData,\n                    isPayPalCommerceAnalyticsV2Enabled: false,\n                },\n            });\n\n            paypalCommerceFastlaneTracker.paymentComplete();\n\n            expect(paypalCommerceFastlaneMock.events.orderPlaced).not.toHaveBeenCalled();\n        });\n\n        it('triggers orderPlaced', () => {\n            paypalCommerceFastlaneTracker.paymentComplete();\n\n            expect(paypalCommerceFastlaneMock.events.orderPlaced).toHaveBeenCalled();\n        });\n    });\n\n    describe('selectedPaymentMethod', () => {\n        it('does not trigger anything if paypalFastlane is not provided', () => {\n            delete paypalCommerceFastlaneWindow.paypalFastlane;\n\n            paypalCommerceFastlaneTracker.selectedPaymentMethod('applepay');\n\n            expect(paypalCommerceFastlaneMock.events.apmSelected).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger anything if method id is not properly provided', () => {\n            paypalCommerceFastlaneTracker.selectedPaymentMethod('');\n\n            expect(paypalCommerceFastlaneMock.events.apmSelected).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger anything if paypal commerce analytic feature is disabled', () => {\n            const paymentMethodMock = getPayPalCommerceAcceleratedCheckout(false, true);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue({\n                ...paymentMethodMock,\n                initializationData: {\n                    ...paymentMethodMock.initializationData,\n                    isPayPalCommerceAnalyticsV2Enabled: false,\n                },\n            });\n\n            paypalCommerceFastlaneTracker.selectedPaymentMethod('applepay');\n\n            expect(paypalCommerceFastlaneMock.events.apmSelected).not.toHaveBeenCalled();\n        });\n\n        it('triggers apm selected event', () => {\n            paypalCommerceFastlaneTracker.selectedPaymentMethod('applepay');\n\n            expect(paypalCommerceFastlaneMock.events.apmSelected).toHaveBeenCalled();\n        });\n    });\n\n    describe('walletButtonClick', () => {\n        it('does not trigger anything if paypalFastlane is not provided', () => {\n            delete paypalCommerceFastlaneWindow.paypalFastlane;\n\n            paypalCommerceFastlaneTracker.walletButtonClick('applepay');\n\n            expect(paypalCommerceFastlaneMock.events.apmSelected).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger anything if method id is not properly provided', () => {\n            paypalCommerceFastlaneTracker.walletButtonClick('');\n\n            expect(paypalCommerceFastlaneMock.events.apmSelected).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger anything if paypal commerce analytic feature is disabled', () => {\n            const paymentMethodMock = getPayPalCommerceAcceleratedCheckout(false, true);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue({\n                ...paymentMethodMock,\n                initializationData: {\n                    ...paymentMethodMock.initializationData,\n                    isPayPalCommerceAnalyticsV2Enabled: false,\n                },\n            });\n\n            paypalCommerceFastlaneTracker.walletButtonClick('applepay');\n\n            expect(paypalCommerceFastlaneMock.events.apmSelected).not.toHaveBeenCalled();\n        });\n\n        it('triggers apm selected event', () => {\n            paypalCommerceFastlaneTracker.walletButtonClick('applepay');\n\n            expect(paypalCommerceFastlaneMock.events.apmSelected).toHaveBeenCalled();\n        });\n    });\n\n    describe('#emailSubmitted callback', () => {\n        const emailSubmitEventOptions = {\n            apm_list: 'paypalcommerceacceleratedcheckout',\n            apm_shown: '0',\n            context_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n            context_type: 'cs_id',\n            experiment: '[{\"treatment_group\":\"control\"}]',\n            merchant_name: 's1504098821',\n            page_name: '',\n            page_type: 'checkout_page',\n            partner_name: 'bigc',\n            store_id: '1504098821',\n            user_email_saved: false,\n            user_type: 'store_member',\n        };\n\n        it('calls emailSubmitted callback for store member', () => {\n            paypalCommerceFastlaneTracker.customerPaymentMethodExecuted();\n\n            expect(paypalCommerceFastlaneMock.events.emailSubmitted).toHaveBeenCalledWith(\n                emailSubmitEventOptions,\n            );\n        });\n\n        it('calls emailSubmitted callback for guest user', () => {\n            jest.spyOn(checkoutService.getState().data, 'getCustomer').mockReturnValue(\n                guestCustomer,\n            );\n\n            paypalCommerceFastlaneTracker.customerPaymentMethodExecuted();\n\n            expect(paypalCommerceFastlaneMock.events.emailSubmitted).toHaveBeenCalledWith({\n                ...emailSubmitEventOptions,\n                user_type: 'store_guest', // <-- this option changes based on \"guest\"/\"store member\" user\n            });\n        });\n\n        it('calls emailSubmitted callback for users from control group', () => {\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethods').mockReturnValue([\n                getPayPalCommerceAcceleratedCheckout(false, true),\n            ]);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue(\n                getPayPalCommerceAcceleratedCheckout(false, true),\n            );\n\n            paypalCommerceFastlaneTracker.customerPaymentMethodExecuted();\n\n            expect(paypalCommerceFastlaneMock.events.emailSubmitted).toHaveBeenCalledWith({\n                ...emailSubmitEventOptions,\n                experiment: '[{\"treatment_group\":\"control\"}]', // <- user in test group means that BT AXO feature is not available due to A/B testing flow\n            });\n        });\n\n        it('calls emailSubmitted callback for users from test group', () => {\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethods').mockReturnValue([\n                getPayPalCommerceAcceleratedCheckout(true, true),\n            ]);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue(\n                getPayPalCommerceAcceleratedCheckout(true, true),\n            );\n\n            paypalCommerceFastlaneTracker.customerPaymentMethodExecuted();\n\n            expect(paypalCommerceFastlaneMock.events.emailSubmitted).toHaveBeenCalledWith({\n                ...emailSubmitEventOptions,\n                experiment: '[{\"treatment_group\":\"test\"}]',\n            });\n        });\n\n        it('calls emailSubmitted callback and place user in a control group if there was an error loading paypalcommerceacceleratedcheckout payment method', () => {\n            jest.spyOn(\n                checkoutService.getState().errors,\n                'getLoadPaymentMethodError',\n            ).mockReturnValue(Error('asd'));\n\n            paypalCommerceFastlaneTracker.customerPaymentMethodExecuted();\n\n            expect(paypalCommerceFastlaneMock.events.emailSubmitted).toHaveBeenCalledWith({\n                ...emailSubmitEventOptions,\n                experiment: '[{\"treatment_group\":\"control\"}]',\n            });\n        });\n\n        it('calls emailSubmitted callback with apm options', () => {\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethods').mockReturnValue([\n                getPayPalCommercePaymentMethod(),\n                getPayPalCommerceAcceleratedCheckout(false, true),\n            ]);\n\n            jest.spyOn(checkoutService.getState().data, 'getPaymentMethod').mockReturnValue(\n                getPayPalCommerceAcceleratedCheckout(false, true),\n            );\n\n            paypalCommerceFastlaneTracker.customerPaymentMethodExecuted();\n\n            expect(paypalCommerceFastlaneMock.events.emailSubmitted).toHaveBeenCalledWith({\n                ...emailSubmitEventOptions,\n                apm_list: 'paypalcommerce,paypalcommerceacceleratedcheckout',\n                apm_shown: '1',\n            });\n        });\n    });\n\n    describe('#paymentComplete callback', () => {\n        const paymentCompleteEventOptions = {\n            context_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n            context_type: 'cs_id',\n            currency_code: 'USD', // <- related to paymentComplete callback\n            experiment: '[{\"treatment_group\":\"control\"}]',\n            merchant_name: 's1504098821',\n            page_name: '',\n            page_type: 'checkout_page',\n            partner_name: 'bigc',\n            selected_payment_method: 'applepay', // <- related to paymentComplete callback\n            store_id: '1504098821',\n            user_type: 'store_member',\n        };\n\n        it('triggers paymentComplete with provided selected method', () => {\n            paypalCommerceFastlaneTracker.selectedPaymentMethod('applepay');\n            paypalCommerceFastlaneTracker.paymentComplete();\n\n            expect(paypalCommerceFastlaneMock.events.orderPlaced).toHaveBeenCalledWith(\n                paymentCompleteEventOptions,\n            );\n        });\n\n        it('triggers paymentComplete with provided with different payment method selected method', () => {\n            paypalCommerceFastlaneTracker.selectedPaymentMethod(\n                'paypalcommerceacceleratedcheckout',\n            );\n            paypalCommerceFastlaneTracker.paymentComplete();\n\n            expect(paypalCommerceFastlaneMock.events.orderPlaced).toHaveBeenCalledWith({\n                ...paymentCompleteEventOptions,\n                selected_payment_method: 'paypalcommerceacceleratedcheckout',\n            });\n        });\n\n        it('triggers paymentComplete with provided with EUR currency code', () => {\n            jest.spyOn(checkoutService.getState().data, 'getCart').mockReturnValue({\n                ...getCart(),\n                currency: {\n                    name: 'Euro',\n                    code: 'EUR',\n                    symbol: '€',\n                    decimalPlaces: 2,\n                },\n            });\n\n            paypalCommerceFastlaneTracker.selectedPaymentMethod('applepay');\n            paypalCommerceFastlaneTracker.paymentComplete();\n\n            expect(paypalCommerceFastlaneMock.events.orderPlaced).toHaveBeenCalledWith({\n                ...paymentCompleteEventOptions,\n                currency_code: 'EUR',\n            });\n        });\n    });\n\n    describe('#apmSelected callback', () => {\n        const apmSelectedEventOptions = {\n            apm_list: 'paypalcommerceacceleratedcheckout',\n            apm_location: 'payment section',\n            apm_selected: 'applepay',\n            apm_shown: '0',\n            context_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n            context_type: 'cs_id',\n            experiment: '[{\"treatment_group\":\"control\"}]',\n            merchant_name: 's1504098821',\n            page_name: '',\n            page_type: 'checkout_page',\n            partner_name: 'bigc',\n            store_id: '1504098821',\n            user_type: 'store_member',\n        };\n\n        it('triggers apm selected event from payments list', () => {\n            paypalCommerceFastlaneTracker.selectedPaymentMethod('applepay');\n\n            expect(paypalCommerceFastlaneMock.events.apmSelected).toHaveBeenCalledWith(\n                apmSelectedEventOptions,\n            );\n        });\n\n        it('triggers apm selected event as a wallet button', () => {\n            paypalCommerceFastlaneTracker.walletButtonClick('applepay');\n\n            expect(paypalCommerceFastlaneMock.events.apmSelected).toHaveBeenCalledWith({\n                ...apmSelectedEventOptions,\n                apm_location: 'pre-email section',\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/analytics/paypal-commerce-analytic-tracker/paypal-commerce-analytic-tracker.ts",
    "content": "import { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    PayPalCommerceHostWindow,\n    PayPalFastlaneApmSelectedEventOptions,\n    PayPalFastlaneEmailEnteredEventOptions,\n    PayPalFastlaneEventCommonOptions,\n    PayPalFastlaneEvents,\n    PayPalFastlaneOrderPlacedEventOptions,\n} from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\n\nimport { CheckoutService } from '../../checkout';\n\nimport PayPalCommerceAnalyticTrackerService from './paypal-commerce-analytic-tracker-service';\n\nexport default class PayPalCommerceAnalyticTracker implements PayPalCommerceAnalyticTrackerService {\n    private _selectedPaymentMethodId = '';\n\n    constructor(private _checkoutService: CheckoutService) {}\n\n    customerPaymentMethodExecuted(): void {\n        if (this._shouldTrackFastlaneEvent()) {\n            this._trackEmailSubmitted();\n        }\n    }\n\n    paymentComplete(): void {\n        if (this._shouldTrackFastlaneEvent()) {\n            this._trackOrderPlaced(this._selectedPaymentMethodId);\n        }\n    }\n\n    selectedPaymentMethod(methodId: string): void {\n        if (this._shouldTrackFastlaneEvent() && methodId) {\n            this._selectedPaymentMethodId = methodId;\n\n            this._trackApmSelected(methodId, false);\n        }\n    }\n\n    walletButtonClick(methodId: string): void {\n        if (this._shouldTrackFastlaneEvent() && methodId) {\n            this._selectedPaymentMethodId = methodId;\n\n            this._trackApmSelected(methodId, true);\n        }\n    }\n\n    private _shouldTrackFastlaneEvent(): boolean {\n        const state = this._checkoutService.getState();\n        const paymentMethod = state.data.getPaymentMethod('paypalcommerce');\n        const initializationData = paymentMethod?.initializationData || {};\n        const isAnalyticEnabled = initializationData.isPayPalCommerceAnalyticsV2Enabled;\n\n        const paypalHostWindow = window as PayPalCommerceHostWindow;\n        const isAvailableAnalyticEventsMethods = paypalHostWindow.paypalFastlane\n            ? !!paypalHostWindow.paypalFastlane.events\n            : false;\n\n        return isAnalyticEnabled && isAvailableAnalyticEventsMethods;\n    }\n\n    private _getPayPalEventsOrThrow(): PayPalFastlaneEvents {\n        const paypalHostWindow = window as PayPalCommerceHostWindow;\n\n        if (paypalHostWindow.paypalFastlane && paypalHostWindow.paypalFastlane.events) {\n            return paypalHostWindow.paypalFastlane.events;\n        }\n\n        throw new PaymentMethodClientUnavailableError();\n    }\n\n    /**\n     *\n     * Analytic Event track methods\n     *\n     */\n    private _trackEmailSubmitted(): void {\n        const { emailSubmitted } = this._getPayPalEventsOrThrow();\n        const eventOptions = this._getEmailSubmittedEventOptions();\n\n        emailSubmitted(eventOptions);\n    }\n\n    private _trackApmSelected(methodId: string, isWalletButton: boolean): void {\n        const { apmSelected } = this._getPayPalEventsOrThrow();\n        const eventOptions = this._getApmSelectedEventOptions(methodId, isWalletButton);\n\n        apmSelected(eventOptions);\n    }\n\n    private _trackOrderPlaced(methodId: string): void {\n        const { orderPlaced } = this._getPayPalEventsOrThrow();\n        const eventOptions = this._getOrderPlacedEventOptions(methodId);\n\n        orderPlaced(eventOptions);\n    }\n\n    /**\n     *\n     * Event options methods\n     *\n     */\n    private _getEventCommonOptions(): PayPalFastlaneEventCommonOptions {\n        const state = this._checkoutService.getState();\n        const cart = state.data.getCart();\n        const storeProfile = state.data.getConfig()?.storeProfile;\n        const isGuestCustomer = state.data.getCustomer()?.isGuest;\n        const methodId = 'paypalcommerceacceleratedcheckout';\n\n        const paymentMethod = state.data.getPaymentMethod(methodId);\n        const isTestTreatmentGroup =\n            !state.errors.getLoadPaymentMethodError(methodId) &&\n            paymentMethod?.initializationData.shouldRunAcceleratedCheckout;\n\n        const experiments = [\n            {\n                treatment_group: isTestTreatmentGroup ? 'test' : 'control',\n            },\n        ];\n\n        return {\n            context_type: 'cs_id',\n            context_id: cart?.id.replace(/-/g, '') || '',\n            page_type: 'checkout_page',\n            page_name: window.document.title,\n            partner_name: 'bigc',\n            user_type: isGuestCustomer ? 'store_guest' : 'store_member',\n            store_id: storeProfile?.storeId || '',\n            merchant_name: storeProfile?.storeName || '',\n            experiment: JSON.stringify(experiments),\n        };\n    }\n\n    private _getEmailSubmittedEventOptions(): PayPalFastlaneEmailEnteredEventOptions {\n        const state = this._checkoutService.getState().data;\n        const paymentMethods = state.getPaymentMethods() || [];\n        const apmList = paymentMethods.map(({ id }) => id);\n\n        return {\n            ...this._getEventCommonOptions(),\n            user_email_saved: false,\n            apm_shown: apmList.length > 1 ? '1' : '0',\n            apm_list: apmList.join(','),\n        };\n    }\n\n    private _getApmSelectedEventOptions(\n        methodId: string,\n        isWalletButton: boolean,\n    ): PayPalFastlaneApmSelectedEventOptions {\n        const state = this._checkoutService.getState().data;\n        const paymentMethods = state.getPaymentMethods() || [];\n        const apmList = paymentMethods.map(({ id }) => id);\n\n        return {\n            ...this._getEventCommonOptions(),\n            apm_shown: apmList.length > 1 ? '1' : '0',\n            apm_list: apmList.join(','),\n            apm_selected: methodId,\n            apm_location: isWalletButton ? 'pre-email section' : 'payment section',\n        };\n    }\n\n    private _getOrderPlacedEventOptions(methodId: string): PayPalFastlaneOrderPlacedEventOptions {\n        const state = this._checkoutService.getState().data;\n        const cart = state.getCart();\n\n        return {\n            ...this._getEventCommonOptions(),\n            selected_payment_method: methodId,\n            currency_code: cart?.currency.code || '',\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/analytics/step-tracker.ts",
    "content": "export default interface StepTracker {\n    trackOrderComplete(): void;\n    trackCheckoutStarted(): void;\n    trackStepViewed(step: string): void;\n    trackStepCompleted(step: string): void;\n}\n"
  },
  {
    "path": "packages/core/src/b2b-dev-tools/b2b-dev-mode-constants.ts",
    "content": "// TODO: CHECKOUT-9979 remove this file before delivery\n/**\n * Dev-only credentials. DO NOT use in production code paths.\n * Activated only when the `enableB2bDevMode` URL param is present.\n */\nexport const B2B_DEV_MODE_URL_PARAM = 'enableB2bDevMode';\nexport const B2B_DEV_MODE_APP_CLIENT_ID = 'dl7c39mdpul6hyc489yk0vzxl6jesyx';\nexport const B2B_DEV_MODE_BASE_URL = 'https://api-b2b.bigcommerce.com';\n"
  },
  {
    "path": "packages/core/src/b2b-dev-tools/b2b-dev-mode.spec.ts",
    "content": "// TODO: CHECKOUT-9979 remove this file before delivery\nimport { isB2bDevModeEnabled, resolveB2bAppClientId, resolveB2bBaseUrl } from './b2b-dev-mode';\n\ndescribe('b2b-dev-mode', () => {\n    const originalLocation = window.location;\n\n    function setSearch(search: string) {\n        delete (window as { location?: Location }).location;\n        (window as { location: Pick<Location, 'search'> }).location = { search };\n    }\n\n    afterEach(() => {\n        delete (window as { location?: Location }).location;\n        (window as { location: Location }).location = originalLocation;\n    });\n\n    describe('isB2bDevModeEnabled', () => {\n        it('returns true when enableB2bDevMode is present (no value)', () => {\n            setSearch('?enableB2bDevMode');\n\n            expect(isB2bDevModeEnabled()).toBe(true);\n        });\n\n        it('returns true when enableB2bDevMode=true', () => {\n            setSearch('?enableB2bDevMode=true');\n\n            expect(isB2bDevModeEnabled()).toBe(true);\n        });\n\n        it('returns true when enableB2bDevMode is one of many params', () => {\n            setSearch('?foo=bar&enableB2bDevMode&baz=qux');\n\n            expect(isB2bDevModeEnabled()).toBe(true);\n        });\n\n        it('returns false when param is absent', () => {\n            setSearch('?foo=bar');\n\n            expect(isB2bDevModeEnabled()).toBe(false);\n        });\n\n        it('returns false when search is empty', () => {\n            setSearch('');\n\n            expect(isB2bDevModeEnabled()).toBe(false);\n        });\n    });\n\n    describe('resolveB2bAppClientId', () => {\n        it('returns dev id when dev mode enabled', () => {\n            setSearch('?enableB2bDevMode');\n\n            expect(resolveB2bAppClientId('prod-id')).toBe('dl7c39mdpul6hyc489yk0vzxl6jesyx');\n        });\n\n        it('returns fallback when dev mode disabled', () => {\n            setSearch('');\n\n            expect(resolveB2bAppClientId('prod-id')).toBe('prod-id');\n        });\n\n        it('returns empty fallback when dev mode disabled and fallback is empty', () => {\n            setSearch('');\n\n            expect(resolveB2bAppClientId('')).toBe('');\n        });\n    });\n\n    describe('resolveB2bBaseUrl', () => {\n        it('returns dev url when dev mode enabled', () => {\n            setSearch('?enableB2bDevMode');\n\n            expect(resolveB2bBaseUrl('https://prod.example.com')).toBe(\n                'https://api-b2b.bigcommerce.com',\n            );\n        });\n\n        it('returns fallback when dev mode disabled', () => {\n            setSearch('');\n\n            expect(resolveB2bBaseUrl('https://prod.example.com')).toBe('https://prod.example.com');\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/b2b-dev-tools/b2b-dev-mode.ts",
    "content": "// TODO: CHECKOUT-9979 remove this file before delivery\nimport {\n    B2B_DEV_MODE_APP_CLIENT_ID,\n    B2B_DEV_MODE_BASE_URL,\n    B2B_DEV_MODE_URL_PARAM,\n} from './b2b-dev-mode-constants';\n\n/**\n * Returns true if `enableB2bDevMode` is present in the current URL's query string.\n * SSR-safe: returns false when `window` is undefined.\n */\nexport function isB2bDevModeEnabled(): boolean {\n    if (typeof window === 'undefined' || !window.location) {\n        return false;\n    }\n\n    try {\n        const params = new URLSearchParams(window.location.search);\n\n        if (params.has(B2B_DEV_MODE_URL_PARAM)) {\n            console.log('B2B Dev Mode Enabled'); // eslint-disable-line no-console\n\n            return true;\n        }\n\n        return false;\n    } catch {\n        return false;\n    }\n}\n\n/**\n * Returns the dev-mode app client id if dev mode is enabled, otherwise `fallback`.\n */\nexport function resolveB2bAppClientId(fallback: string): string {\n    return isB2bDevModeEnabled() ? B2B_DEV_MODE_APP_CLIENT_ID : fallback;\n}\n\n/**\n * Returns the dev-mode B2B base URL if dev mode is enabled, otherwise `fallback`.\n */\nexport function resolveB2bBaseUrl(fallback: string): string {\n    return isB2bDevModeEnabled() ? B2B_DEV_MODE_BASE_URL : fallback;\n}\n"
  },
  {
    "path": "packages/core/src/b2b-dev-tools/index.ts",
    "content": "// TODO: CHECKOUT-9979 remove this file before delivery\nexport { isB2bDevModeEnabled, resolveB2bAppClientId, resolveB2bBaseUrl } from './b2b-dev-mode';\n"
  },
  {
    "path": "packages/core/src/b2b-token/b2b-token-action-creator.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { CheckoutStore, createCheckoutStore } from '../checkout';\nimport { getCheckout, getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\nimport { getConfig } from '../config/configs.mock';\nimport { getCustomer } from '../customer/customers.mock';\n\nimport B2BTokenActionCreator from './b2b-token-action-creator';\nimport { B2BTokenActionType } from './b2b-token-actions';\nimport B2BTokenRequestSender from './b2b-token-request-sender';\n\ndescribe('B2BTokenActionCreator', () => {\n    let store: CheckoutStore;\n    let requestSender: B2BTokenRequestSender;\n    let actionCreator: B2BTokenActionCreator;\n\n    const b2bResponse = getResponse({ code: 200, data: { token: 'b2b-auth-token' } });\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreState());\n        requestSender = new B2BTokenRequestSender(createRequestSender());\n\n        jest.spyOn(requestSender, 'getB2BToken').mockResolvedValue(b2bResponse);\n\n        jest.spyOn(store.getState().config, 'getStoreConfigOrThrow').mockReturnValue(\n            getConfig().storeConfig,\n        );\n        jest.spyOn(store.getState().customer, 'getCustomerOrThrow').mockReturnValue(getCustomer());\n        jest.spyOn(store.getState().checkout, 'getCheckoutOrThrow').mockReturnValue(getCheckout());\n\n        actionCreator = new B2BTokenActionCreator(requestSender);\n    });\n\n    describe('#loadB2BToken()', () => {\n        it('emits load actions on success', async () => {\n            const actions = await from(actionCreator.loadB2BToken()(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: B2BTokenActionType.LoadB2BTokenRequested },\n                {\n                    type: B2BTokenActionType.LoadB2BTokenSucceeded,\n                    payload: { token: 'b2b-auth-token' },\n                },\n            ]);\n        });\n\n        it('calls getB2BToken with b2bApiSettings from initial state', async () => {\n            const customer = getCustomer();\n            const checkout = getCheckout();\n            const b2bApiSettings = {\n                clientId: 'dl7c39mdpul6hyc489yk0vzxl6jesyx',\n                baseUrl: 'https://api-b2b.bigcommerce.com',\n            };\n\n            jest.spyOn(store.getState().config, 'getStoreConfigOrThrow').mockReturnValue({\n                ...getConfig().storeConfig,\n                b2bApiSettings,\n            });\n\n            await from(actionCreator.loadB2BToken()(store)).toPromise();\n\n            expect(requestSender.getB2BToken).toHaveBeenCalledWith(\n                b2bApiSettings.clientId,\n                customer.id,\n                getConfig().storeConfig.storeProfile.storeHash,\n                checkout.channelId,\n                b2bApiSettings.baseUrl,\n                undefined,\n            );\n        });\n\n        it('emits error actions if getB2BToken fails', async () => {\n            jest.spyOn(requestSender, 'getB2BToken').mockRejectedValue(getErrorResponse());\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(actionCreator.loadB2BToken()(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: B2BTokenActionType.LoadB2BTokenRequested },\n                expect.objectContaining({\n                    type: B2BTokenActionType.LoadB2BTokenFailed,\n                    error: true,\n                }),\n            ]);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/b2b-token/b2b-token-action-creator.ts",
    "content": "import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\n// TODO: CHECKOUT-9979 remove this import before delivery\nimport { resolveB2bAppClientId, resolveB2bBaseUrl } from '../b2b-dev-tools';\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\n\nimport { B2BTokenActionType, LoadB2BTokenAction } from './b2b-token-actions';\nimport B2BTokenRequestSender from './b2b-token-request-sender';\n\nexport default class B2BTokenActionCreator {\n    constructor(private _requestSender: B2BTokenRequestSender) {}\n\n    loadB2BToken(\n        options?: RequestOptions,\n    ): ThunkAction<LoadB2BTokenAction, InternalCheckoutSelectors> {\n        return (store) => {\n            const state = store.getState();\n            const storeConfig = state.config.getStoreConfigOrThrow();\n            const { storeHash } = storeConfig.storeProfile;\n            // TODO: CHECKOUT-9979 revert to `const { baseUrl: b2bBaseUrl = '', clientId: b2bClientId = '' } = storeConfig.b2bApiSettings ?? {};` before delivery\n            const { baseUrl = '', clientId = '' } = storeConfig.b2bApiSettings ?? {};\n            const b2bClientId = resolveB2bAppClientId(clientId);\n            const b2bBaseUrl = resolveB2bBaseUrl(baseUrl);\n            const { id: customerId } = state.customer.getCustomerOrThrow();\n            const { channelId } = state.checkout.getCheckoutOrThrow();\n\n            return concat(\n                of(createAction(B2BTokenActionType.LoadB2BTokenRequested)),\n                defer(async () => {\n                    const { body } = await this._requestSender.getB2BToken(\n                        b2bClientId,\n                        customerId,\n                        storeHash,\n                        channelId,\n                        b2bBaseUrl,\n                        options,\n                    );\n\n                    return createAction(B2BTokenActionType.LoadB2BTokenSucceeded, {\n                        token: body.data.token,\n                    });\n                }),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(B2BTokenActionType.LoadB2BTokenFailed, error),\n                ),\n            );\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/b2b-token/b2b-token-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { B2BToken } from './b2b-token-state';\n\nexport enum B2BTokenActionType {\n    LoadB2BTokenRequested = 'LOAD_B2B_TOKEN_REQUESTED',\n    LoadB2BTokenSucceeded = 'LOAD_B2B_TOKEN_SUCCEEDED',\n    LoadB2BTokenFailed = 'LOAD_B2B_TOKEN_FAILED',\n}\n\nexport type LoadB2BTokenAction =\n    | LoadB2BTokenRequestedAction\n    | LoadB2BTokenSucceededAction\n    | LoadB2BTokenFailedAction;\n\nexport interface LoadB2BTokenRequestedAction extends Action {\n    type: B2BTokenActionType.LoadB2BTokenRequested;\n}\n\nexport interface LoadB2BTokenSucceededAction extends Action<B2BToken> {\n    type: B2BTokenActionType.LoadB2BTokenSucceeded;\n}\n\nexport interface LoadB2BTokenFailedAction extends Action<Error> {\n    type: B2BTokenActionType.LoadB2BTokenFailed;\n}\n"
  },
  {
    "path": "packages/core/src/b2b-token/b2b-token-reducer.spec.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\n\nimport { B2BTokenActionType } from './b2b-token-actions';\nimport b2bTokenReducer from './b2b-token-reducer';\nimport B2BTokenState, { DEFAULT_STATE } from './b2b-token-state';\n\ndescribe('b2bTokenReducer()', () => {\n    let initialState: B2BTokenState;\n\n    beforeEach(() => {\n        initialState = DEFAULT_STATE;\n    });\n\n    it('returns loading state on requested', () => {\n        const action = createAction(B2BTokenActionType.LoadB2BTokenRequested);\n        const state = b2bTokenReducer(initialState, action);\n\n        expect(state.statuses.isLoading).toBe(true);\n        expect(state.errors.loadError).toBeUndefined();\n    });\n\n    it('stores token and clears loading state on success', () => {\n        const token = { token: 'my-b2b-token' };\n        const action = createAction(B2BTokenActionType.LoadB2BTokenSucceeded, token);\n        const state = b2bTokenReducer(initialState, action);\n\n        expect(state.data).toEqual(token);\n        expect(state.statuses.isLoading).toBe(false);\n        expect(state.errors.loadError).toBeUndefined();\n    });\n\n    it('stores error and clears loading state on failure', () => {\n        const error = new Error('Failed to load B2B token');\n        const action = createErrorAction(B2BTokenActionType.LoadB2BTokenFailed, error);\n        const state = b2bTokenReducer(initialState, action);\n\n        expect(state.errors.loadError).toBe(error);\n        expect(state.statuses.isLoading).toBe(false);\n        expect(state.data).toBeUndefined();\n    });\n\n    it('returns previous state for unknown actions', () => {\n        const action = { type: 'UNKNOWN_ACTION' } as any;\n        const state = b2bTokenReducer(initialState, action);\n\n        expect(state).toEqual(initialState);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/b2b-token/b2b-token-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectSet } from '../common/utility';\n\nimport { B2BTokenActionType, LoadB2BTokenAction } from './b2b-token-actions';\nimport B2BTokenState, {\n    B2BToken,\n    B2BTokenErrorsState,\n    B2BTokenStatusesState,\n    DEFAULT_STATE,\n} from './b2b-token-state';\n\nexport default function b2bTokenReducer(\n    state: B2BTokenState = DEFAULT_STATE,\n    action: Action,\n): B2BTokenState {\n    const reducer = combineReducers<B2BTokenState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(data: B2BToken | undefined, action: LoadB2BTokenAction): B2BToken | undefined {\n    switch (action.type) {\n        case B2BTokenActionType.LoadB2BTokenSucceeded:\n            return action.payload;\n\n        default:\n            return data;\n    }\n}\n\nfunction errorsReducer(\n    errors: B2BTokenErrorsState = DEFAULT_STATE.errors,\n    action: LoadB2BTokenAction,\n): B2BTokenErrorsState {\n    switch (action.type) {\n        case B2BTokenActionType.LoadB2BTokenRequested:\n        case B2BTokenActionType.LoadB2BTokenSucceeded:\n            return objectSet(errors, 'loadError', undefined);\n\n        case B2BTokenActionType.LoadB2BTokenFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: B2BTokenStatusesState = DEFAULT_STATE.statuses,\n    action: LoadB2BTokenAction,\n): B2BTokenStatusesState {\n    switch (action.type) {\n        case B2BTokenActionType.LoadB2BTokenRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case B2BTokenActionType.LoadB2BTokenFailed:\n        case B2BTokenActionType.LoadB2BTokenSucceeded:\n            return objectSet(statuses, 'isLoading', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/b2b-token/b2b-token-request-sender.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\n\nimport { SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getResponse } from '../common/http-request/responses.mock';\n\nimport B2BTokenRequestSender from './b2b-token-request-sender';\n\ndescribe('B2BTokenRequestSender', () => {\n    let requestSender: RequestSender;\n    let b2bTokenRequestSender: B2BTokenRequestSender;\n\n    const jwtToken = 'bc-jwt-token';\n    const b2bToken = 'b2b-token-value';\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n\n        jest.spyOn(requestSender, 'get').mockResolvedValue(getResponse({ token: jwtToken }));\n        jest.spyOn(requestSender, 'post').mockResolvedValue(\n            getResponse({ code: 200, data: { token: b2bToken } }),\n        );\n\n        b2bTokenRequestSender = new B2BTokenRequestSender(requestSender);\n    });\n\n    describe('#getB2BToken()', () => {\n        it('fetches BC JWT then exchanges it for a B2B token', async () => {\n            await b2bTokenRequestSender.getB2BToken(\n                'my-client-id',\n                123,\n                'abc123',\n                1,\n                'https://api-b2b.bigcommerce.com',\n            );\n\n            expect(requestSender.get).toHaveBeenCalledWith('/customer/current.jwt', {\n                params: { app_client_id: 'my-client-id' },\n                headers: SDK_VERSION_HEADERS,\n                timeout: undefined,\n            });\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                'https://api-b2b.bigcommerce.com/api/v2/login',\n                {\n                    credentials: false,\n                    headers: { 'Content-Type': 'application/json' },\n                    body: {\n                        bcToken: jwtToken,\n                        customerId: 123,\n                        storeHash: 'abc123',\n                        channelId: 1,\n                    },\n                    timeout: undefined,\n                },\n            );\n        });\n\n        it('uses the provided b2bBaseUrl for the token exchange', async () => {\n            await b2bTokenRequestSender.getB2BToken(\n                'my-client-id',\n                123,\n                'abc123',\n                1,\n                'https://api-b2b.staging.zone',\n            );\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                'https://api-b2b.staging.zone/api/v2/login',\n                expect.objectContaining({\n                    body: expect.objectContaining({ bcToken: jwtToken }),\n                }),\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/b2b-token/b2b-token-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nexport interface B2BTokenResponseBody {\n    code: number;\n    data: {\n        token: string;\n    };\n}\n\nexport default class B2BTokenRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    async getB2BToken(\n        appClientId: string,\n        customerId: number,\n        storeHash: string,\n        channelId: number,\n        b2bBaseUrl: string,\n        options?: RequestOptions,\n    ): Promise<Response<B2BTokenResponseBody>> {\n        const { body: jwtBody } = await this._requestSender.get<{ token: string }>(\n            '/customer/current.jwt',\n            {\n                timeout: options?.timeout,\n                params: { app_client_id: appClientId },\n                headers: SDK_VERSION_HEADERS,\n            },\n        );\n\n        return this._requestSender.post(`${b2bBaseUrl}/api/v2/login`, {\n            timeout: options?.timeout,\n            credentials: false,\n            headers: { 'Content-Type': 'application/json' },\n            body: {\n                bcToken: jwtBody.token,\n                customerId,\n                storeHash,\n                channelId,\n            },\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/b2b-token/b2b-token-selector.spec.ts",
    "content": "import { createB2BTokenSelectorFactory } from './b2b-token-selector';\nimport B2BTokenState, { DEFAULT_STATE } from './b2b-token-state';\n\ndescribe('createB2BTokenSelectorFactory()', () => {\n    const createSelector = createB2BTokenSelectorFactory();\n\n    it('returns undefined token when no data is loaded', () => {\n        const selector = createSelector(DEFAULT_STATE);\n\n        expect(selector.getToken()).toBeUndefined();\n    });\n\n    it('returns the token string when data is loaded', () => {\n        const state: B2BTokenState = {\n            ...DEFAULT_STATE,\n            data: { token: 'my-b2b-token' },\n        };\n        const selector = createSelector(state);\n\n        expect(selector.getToken()).toBe('my-b2b-token');\n    });\n\n    it('returns false for isLoading when not loading', () => {\n        const selector = createSelector(DEFAULT_STATE);\n\n        expect(selector.isLoading()).toBe(false);\n    });\n\n    it('returns true for isLoading when loading', () => {\n        const state: B2BTokenState = {\n            ...DEFAULT_STATE,\n            statuses: { isLoading: true },\n        };\n        const selector = createSelector(state);\n\n        expect(selector.isLoading()).toBe(true);\n    });\n\n    it('returns undefined for getLoadError when no error', () => {\n        const selector = createSelector(DEFAULT_STATE);\n\n        expect(selector.getLoadError()).toBeUndefined();\n    });\n\n    it('returns error for getLoadError when there is an error', () => {\n        const error = new Error('B2B token load failed');\n        const state: B2BTokenState = {\n            ...DEFAULT_STATE,\n            errors: { loadError: error },\n        };\n        const selector = createSelector(state);\n\n        expect(selector.getLoadError()).toBe(error);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/b2b-token/b2b-token-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport B2BTokenState, { DEFAULT_STATE } from './b2b-token-state';\n\nexport default interface B2BTokenSelector {\n    getToken(): string | undefined;\n    getLoadError(): Error | undefined;\n    isLoading(): boolean;\n}\n\nexport type B2BTokenSelectorFactory = (state: B2BTokenState) => B2BTokenSelector;\n\nexport function createB2BTokenSelectorFactory(): B2BTokenSelectorFactory {\n    const getToken = createSelector(\n        (state: B2BTokenState) => state.data?.token,\n        (token) => () => token,\n    );\n\n    const getLoadError = createSelector(\n        (state: B2BTokenState) => state.errors.loadError,\n        (error) => () => error,\n    );\n\n    const isLoading = createSelector(\n        (state: B2BTokenState) => !!state.statuses.isLoading,\n        (status) => () => status,\n    );\n\n    return memoizeOne((state: B2BTokenState = DEFAULT_STATE): B2BTokenSelector => {\n        return {\n            getToken: getToken(state),\n            getLoadError: getLoadError(state),\n            isLoading: isLoading(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/b2b-token/b2b-token-state.ts",
    "content": "export interface B2BToken {\n    token: string;\n}\n\nexport default interface B2BTokenState {\n    data?: B2BToken;\n    errors: B2BTokenErrorsState;\n    statuses: B2BTokenStatusesState;\n}\n\nexport interface B2BTokenErrorsState {\n    loadError?: Error;\n}\n\nexport interface B2BTokenStatusesState {\n    isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: B2BTokenState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/b2b-token/index.ts",
    "content": "export { default as B2BTokenActionCreator } from './b2b-token-action-creator';\nexport { B2BTokenActionType, LoadB2BTokenAction } from './b2b-token-actions';\nexport { default as b2bTokenReducer } from './b2b-token-reducer';\nexport {\n    default as B2BTokenSelector,\n    B2BTokenSelectorFactory,\n    createB2BTokenSelectorFactory,\n} from './b2b-token-selector';\nexport { B2BToken, default as B2BTokenState } from './b2b-token-state';\nexport { default as B2BTokenRequestSender } from './b2b-token-request-sender';\n"
  },
  {
    "path": "packages/core/src/billing/billing-address-action-creator.spec.ts",
    "content": "import { createErrorAction } from '@bigcommerce/data-store';\nimport { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { omit } from 'lodash';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { AddressRequestBody } from '../address';\nimport { Checkout, CheckoutStore, CheckoutStoreState, createCheckoutStore } from '../checkout';\nimport { getCheckout, getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { MissingDataError, StandardError } from '../common/error/errors';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\nimport { getConfigState } from '../config/configs.mock';\nimport {\n    Subscriptions,\n    SubscriptionsActionCreator,\n    SubscriptionsActionType,\n    SubscriptionsRequestSender,\n    UpdateSubscriptionsAction,\n} from '../subscription';\nimport { UpdateSubscriptionsError } from '../subscription/errors';\n\nimport { BillingAddressRequestBody } from './billing-address';\nimport BillingAddressActionCreator from './billing-address-action-creator';\nimport {\n    BillingAddressAction,\n    BillingAddressActionType,\n    ContinueAsGuestAction,\n    UpdateBillingAddressAction,\n} from './billing-address-actions';\nimport BillingAddressRequestSender from './billing-address-request-sender';\nimport { getBillingAddress } from './billing-addresses.mock';\n\ndescribe('BillingAddressActionCreator', () => {\n    let address: AddressRequestBody;\n    let billingAddressActionCreator: BillingAddressActionCreator;\n    let billingAddressRequestSender: BillingAddressRequestSender;\n    let subscriptionsRequestSender: SubscriptionsRequestSender;\n    let subscriptionsActionCreator: SubscriptionsActionCreator;\n    let errorResponse: Response<Error>;\n    let response: Response<Checkout>;\n    let subscriptionsResponse: Response<Subscriptions>;\n    let state: CheckoutStoreState;\n    let store: CheckoutStore;\n    let actions:\n        | Array<BillingAddressAction | UpdateSubscriptionsAction>\n        | BillingAddressAction\n        | ContinueAsGuestAction\n        | UpdateSubscriptionsAction\n        | undefined;\n\n    beforeEach(() => {\n        response = getResponse(getCheckout());\n        subscriptionsResponse = getResponse({\n            email: 'foo@bar.com',\n            acceptsMarketingNewsletter: false,\n            acceptsAbandonedCartEmails: false,\n        });\n        errorResponse = getErrorResponse();\n        state = getCheckoutStoreState();\n        billingAddressRequestSender = new BillingAddressRequestSender(createRequestSender());\n        subscriptionsRequestSender = new SubscriptionsRequestSender(createRequestSender());\n        subscriptionsActionCreator = new SubscriptionsActionCreator(subscriptionsRequestSender);\n\n        jest.spyOn(billingAddressRequestSender, 'updateAddress').mockImplementation(() =>\n            Promise.resolve(response),\n        );\n        jest.spyOn(billingAddressRequestSender, 'createAddress').mockImplementation(() =>\n            Promise.resolve(response),\n        );\n\n        jest.spyOn(subscriptionsRequestSender, 'updateSubscriptions').mockImplementation(() =>\n            Promise.resolve(subscriptionsResponse),\n        );\n\n        billingAddressActionCreator = new BillingAddressActionCreator(\n            billingAddressRequestSender,\n            subscriptionsActionCreator,\n        );\n        address = getBillingAddress();\n    });\n\n    describe('#continueAsGuest()', () => {\n        const guestCredentials = { email: 'x' };\n\n        describe('when store has no checkout data', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({});\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    actions = await from(\n                        billingAddressActionCreator.continueAsGuest(guestCredentials)(store),\n                    ).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(actions).toBeUndefined();\n                    expect(billingAddressRequestSender.updateAddress).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        describe('when store has a signed-in shopper', () => {\n            beforeEach(() => {\n                store = createCheckoutStore(state);\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    actions = await from(\n                        billingAddressActionCreator.continueAsGuest(guestCredentials)(store),\n                    ).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(StandardError);\n                    expect(actions).toBeUndefined();\n                    expect(billingAddressRequestSender.updateAddress).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        describe('when store has checkout data but no billing address data', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({\n                    ...omit(state, 'billingAddress'),\n                    customer: {\n                        ...state.customer,\n                        data: {\n                            // tslint:disable-next-line:no-non-null-assertion\n                            ...state.customer.data!,\n                            isGuest: true,\n                        },\n                    },\n                });\n            });\n\n            it('emits customer actions if marketingEmailConsent is true', async () => {\n                actions = await from(\n                    billingAddressActionCreator.continueAsGuest({\n                        ...guestCredentials,\n                        acceptsAbandonedCartEmails: true,\n                    })(store),\n                )\n                    .pipe(toArray())\n                    .toPromise();\n\n                expect(actions).toContainEqual({\n                    type: SubscriptionsActionType.UpdateSubscriptionsRequested,\n                });\n                expect(actions).toContainEqual({\n                    type: SubscriptionsActionType.UpdateSubscriptionsSucceeded,\n                    payload: subscriptionsResponse.body,\n                });\n            });\n\n            it('emits failed customer actions if failed to update', async () => {\n                jest.spyOn(subscriptionsRequestSender, 'updateSubscriptions').mockReturnValue(\n                    Promise.reject(getErrorResponse()),\n                );\n\n                const errorHandler = jest.fn();\n\n                actions = await from(\n                    billingAddressActionCreator.continueAsGuest({\n                        ...guestCredentials,\n                        acceptsAbandonedCartEmails: true,\n                    })(store),\n                )\n                    .pipe(\n                        catchError((error) => {\n                            errorHandler(error);\n\n                            return of(error);\n                        }),\n                        toArray(),\n                    )\n                    .toPromise();\n\n                expect(errorHandler).toHaveBeenCalledWith(\n                    createErrorAction(\n                        SubscriptionsActionType.UpdateSubscriptionsFailed,\n                        new UpdateSubscriptionsError(),\n                    ),\n                );\n\n                expect(actions).toContainEqual({\n                    type: SubscriptionsActionType.UpdateSubscriptionsRequested,\n                });\n                expect(actions).toContainEqual(\n                    expect.objectContaining({\n                        type: SubscriptionsActionType.UpdateSubscriptionsFailed,\n                    }),\n                );\n            });\n\n            it('sends request to update subscriptions if marketingEmailConsent is false', async () => {\n                await from(\n                    billingAddressActionCreator.continueAsGuest(\n                        {\n                            ...guestCredentials,\n                            acceptsAbandonedCartEmails: false,\n                        },\n                        {},\n                    )(store),\n                ).toPromise();\n\n                expect(subscriptionsRequestSender.updateSubscriptions).toHaveBeenCalledWith(\n                    {\n                        email: guestCredentials.email,\n                        acceptsAbandonedCartEmails: false,\n                        acceptsMarketingNewsletter: false,\n                    },\n                    {},\n                );\n            });\n\n            it('sends request to update subscriptions if marketingEmailConsent is true', async () => {\n                await from(\n                    billingAddressActionCreator.continueAsGuest(\n                        {\n                            ...guestCredentials,\n                            acceptsAbandonedCartEmails: true,\n                            acceptsMarketingNewsletter: true,\n                        },\n                        {},\n                    )(store),\n                ).toPromise();\n\n                expect(subscriptionsRequestSender.updateSubscriptions).toHaveBeenCalledWith(\n                    {\n                        email: guestCredentials.email,\n                        acceptsAbandonedCartEmails: true,\n                        acceptsMarketingNewsletter: true,\n                    },\n                    {},\n                );\n            });\n\n            it('emits billing actions if able to continue as guest', async () => {\n                actions = await from(\n                    billingAddressActionCreator.continueAsGuest(guestCredentials)(store),\n                )\n                    .pipe(toArray())\n                    .toPromise();\n\n                expect(actions).toEqual([\n                    { type: BillingAddressActionType.ContinueAsGuestRequested },\n                    {\n                        type: BillingAddressActionType.ContinueAsGuestSucceeded,\n                        payload: response.body,\n                    },\n                ]);\n            });\n\n            it('emits error actions if unable to continue as guest', async () => {\n                jest.spyOn(billingAddressRequestSender, 'createAddress').mockReturnValue(\n                    Promise.reject(getErrorResponse()),\n                );\n\n                const errorHandler = jest.fn();\n\n                actions = await from(\n                    billingAddressActionCreator.continueAsGuest(guestCredentials)(store),\n                )\n                    .pipe(\n                        catchError((action: UpdateBillingAddressAction) => {\n                            errorHandler();\n\n                            return of(action);\n                        }),\n                        toArray(),\n                    )\n                    .toPromise();\n\n                expect(errorHandler).toHaveBeenCalled();\n                expect(actions).toEqual([\n                    { type: BillingAddressActionType.ContinueAsGuestRequested },\n                    {\n                        type: BillingAddressActionType.ContinueAsGuestFailed,\n                        payload: errorResponse,\n                        error: true,\n                    },\n                ]);\n            });\n\n            it('sends request to create billing address', async () => {\n                await from(\n                    billingAddressActionCreator.continueAsGuest(guestCredentials, {})(store),\n                ).toPromise();\n\n                expect(billingAddressRequestSender.createAddress).toHaveBeenCalledWith(\n                    getCheckout().id,\n                    guestCredentials,\n                    {},\n                );\n            });\n        });\n\n        describe('when store has checkout and billing address data from quote', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({\n                    ...state,\n                    customer: {\n                        ...state.customer,\n                        data: {\n                            // tslint:disable-next-line:no-non-null-assertion\n                            ...state.customer.data!,\n                            isGuest: true,\n                        },\n                    },\n                });\n            });\n\n            it('emits actions if able to update billing address', async () => {\n                actions = await from(\n                    billingAddressActionCreator.continueAsGuest(guestCredentials)(store),\n                )\n                    .pipe(toArray())\n                    .toPromise();\n\n                expect(actions).toEqual([\n                    { type: BillingAddressActionType.ContinueAsGuestRequested },\n                    {\n                        type: BillingAddressActionType.ContinueAsGuestSucceeded,\n                        payload: response.body,\n                    },\n                ]);\n            });\n\n            it('emits error actions if unable to update billing address', async () => {\n                jest.spyOn(billingAddressRequestSender, 'updateAddress').mockReturnValue(\n                    Promise.reject(getErrorResponse()),\n                );\n\n                const errorHandler = jest.fn();\n\n                actions = await from(\n                    billingAddressActionCreator.continueAsGuest(guestCredentials)(store),\n                )\n                    .pipe(\n                        catchError((action: BillingAddressAction) => {\n                            errorHandler();\n\n                            return of(action);\n                        }),\n                        toArray(),\n                    )\n                    .toPromise();\n\n                expect(errorHandler).toHaveBeenCalled();\n                expect(actions).toEqual([\n                    { type: BillingAddressActionType.ContinueAsGuestRequested },\n                    {\n                        type: BillingAddressActionType.ContinueAsGuestFailed,\n                        payload: errorResponse,\n                        error: true,\n                    },\n                ]);\n            });\n\n            it('sends request to update billing address, using billing address email if not provided', async () => {\n                await from(\n                    billingAddressActionCreator.continueAsGuest(guestCredentials, {})(store),\n                ).toPromise();\n\n                expect(billingAddressRequestSender.updateAddress).toHaveBeenCalledWith(\n                    getCheckout().id,\n                    {\n                        ...omit(address, 'country'),\n                        ...guestCredentials,\n                        id: '55c96cda6f04c',\n                    },\n                    {},\n                );\n            });\n        });\n    });\n\n    describe('#updateAddress()', () => {\n        describe('when store has no checkout data', () => {\n            beforeEach(() => {\n                actions = undefined;\n                store = createCheckoutStore(omit(state, 'checkout'));\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    actions = await from(\n                        billingAddressActionCreator.updateAddress(address)(createCheckoutStore({})),\n                    ).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(actions).toBeUndefined();\n                    expect(billingAddressRequestSender.updateAddress).not.toHaveBeenCalled();\n                    expect(billingAddressRequestSender.createAddress).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        describe('when store has checkout data but no billing address data', () => {\n            beforeEach(() => {\n                store = createCheckoutStore(omit(state, 'billingAddress'));\n                address = omit(address, 'id') as BillingAddressRequestBody;\n            });\n\n            it('emits actions if able to update billing address when experiment is enabled', async () => {\n                const configState = getConfigState();\n\n                const stateWithExperiment = {\n                    ...state,\n                    config: configState,\n                };\n\n                store = createCheckoutStore(omit(stateWithExperiment, 'billingAddress'));\n                actions = await from(billingAddressActionCreator.updateAddress(address)(store))\n                    .pipe(toArray())\n                    .toPromise();\n\n                expect(billingAddressRequestSender.createAddress).toHaveBeenCalled();\n\n                expect(actions).toEqual([\n                    { type: BillingAddressActionType.UpdateBillingAddressRequested },\n                    {\n                        type: BillingAddressActionType.UpdateBillingAddressSucceeded,\n                        payload: response.body,\n                    },\n                ]);\n            });\n\n            it('emits actions if able to update billing address', async () => {\n                actions = await from(billingAddressActionCreator.updateAddress(address)(store))\n                    .pipe(toArray())\n                    .toPromise();\n\n                expect(actions).toEqual([\n                    { type: BillingAddressActionType.UpdateBillingAddressRequested },\n                    {\n                        type: BillingAddressActionType.UpdateBillingAddressSucceeded,\n                        payload: response.body,\n                    },\n                ]);\n            });\n\n            it('emits error actions if unable to create billing address', async () => {\n                jest.spyOn(billingAddressRequestSender, 'createAddress').mockReturnValue(\n                    Promise.reject(getErrorResponse()),\n                );\n\n                const errorHandler = jest.fn();\n\n                actions = await from(billingAddressActionCreator.updateAddress(address)(store))\n                    .pipe(\n                        catchError((action: UpdateBillingAddressAction) => {\n                            errorHandler();\n\n                            return of(action);\n                        }),\n                        toArray(),\n                    )\n                    .toPromise();\n\n                expect(errorHandler).toHaveBeenCalled();\n                expect(actions).toEqual([\n                    { type: BillingAddressActionType.UpdateBillingAddressRequested },\n                    {\n                        type: BillingAddressActionType.UpdateBillingAddressFailed,\n                        payload: errorResponse,\n                        error: true,\n                    },\n                ]);\n            });\n\n            it('sends request to create billing address', async () => {\n                await from(\n                    billingAddressActionCreator.updateAddress(address, {})(store),\n                ).toPromise();\n\n                expect(billingAddressRequestSender.createAddress).toHaveBeenCalledWith(\n                    getCheckout().id,\n                    address,\n                    {},\n                );\n            });\n\n            it('sends request to update email', async () => {\n                const payload = { email: 'foo' };\n\n                await from(\n                    billingAddressActionCreator.updateAddress(payload, {})(store),\n                ).toPromise();\n\n                expect(billingAddressRequestSender.createAddress).toHaveBeenCalledWith(\n                    getCheckout().id,\n                    payload,\n                    {},\n                );\n            });\n        });\n\n        describe('when store has checkout and billing address data from quote', () => {\n            beforeEach(() => {\n                store = createCheckoutStore(state);\n            });\n\n            it('emits actions if able to update billing address', async () => {\n                actions = await from(billingAddressActionCreator.updateAddress(address)(store))\n                    .pipe(toArray())\n                    .toPromise();\n\n                expect(actions).toEqual([\n                    { type: BillingAddressActionType.UpdateBillingAddressRequested },\n                    {\n                        type: BillingAddressActionType.UpdateBillingAddressSucceeded,\n                        payload: response.body,\n                    },\n                ]);\n            });\n\n            it('emits error actions if unable to update billing address', async () => {\n                jest.spyOn(billingAddressRequestSender, 'updateAddress').mockReturnValue(\n                    Promise.reject(getErrorResponse()),\n                );\n\n                const errorHandler = jest.fn();\n\n                actions = await from(billingAddressActionCreator.updateAddress(address)(store))\n                    .pipe(\n                        catchError((action: UpdateBillingAddressAction) => {\n                            errorHandler();\n\n                            return of(action);\n                        }),\n                        toArray(),\n                    )\n                    .toPromise();\n\n                expect(errorHandler).toHaveBeenCalled();\n                expect(actions).toEqual([\n                    { type: BillingAddressActionType.UpdateBillingAddressRequested },\n                    {\n                        type: BillingAddressActionType.UpdateBillingAddressFailed,\n                        payload: errorResponse,\n                        error: true,\n                    },\n                ]);\n            });\n\n            it('sends request to update billing address, using billing address email if not provided', async () => {\n                await from(\n                    billingAddressActionCreator.updateAddress(address, {})(store),\n                ).toPromise();\n\n                expect(billingAddressRequestSender.updateAddress).toHaveBeenCalledWith(\n                    getCheckout().id,\n                    {\n                        ...address,\n                        email: 'test@bigcommerce.com',\n                        id: '55c96cda6f04c',\n                    },\n                    {},\n                );\n            });\n\n            it('sends request to update billing address, using blank email when provided', async () => {\n                const email = '';\n\n                await from(\n                    billingAddressActionCreator.updateAddress({ ...address, email }, {})(store),\n                ).toPromise();\n\n                expect(billingAddressRequestSender.updateAddress).toHaveBeenCalledWith(\n                    getCheckout().id,\n                    {\n                        ...address,\n                        email,\n                        id: '55c96cda6f04c',\n                    },\n                    {},\n                );\n            });\n\n            it('sends request to update billing address, using provided email', async () => {\n                const email = 'foo@bar.com';\n\n                await from(\n                    billingAddressActionCreator.updateAddress({ ...address, email }, {})(store),\n                ).toPromise();\n\n                expect(billingAddressRequestSender.updateAddress).toHaveBeenCalledWith(\n                    getCheckout().id,\n                    {\n                        ...address,\n                        email,\n                        id: '55c96cda6f04c',\n                    },\n                    {},\n                );\n            });\n        });\n\n        describe('when store has checkout and billing address data from an incomplete order', () => {\n            beforeEach(() => {\n                // The billing address contained in the Order response does not have an ID.\n                store = createCheckoutStore(omit(state, 'billingAddress.data.id'));\n            });\n\n            it('sends request to create a billing address, using provided email', async () => {\n                const email = 'foo@bar.com';\n\n                await from(\n                    billingAddressActionCreator.updateAddress({ ...address, email }, {})(store),\n                ).toPromise();\n\n                expect(billingAddressRequestSender.updateAddress).toHaveBeenCalledWith(\n                    getCheckout().id,\n                    {\n                        ...address,\n                        email,\n                        id: '55c96cda6f04c',\n                    },\n                    {},\n                );\n            });\n\n            it('sends request to create a billing address, using previous email', async () => {\n                await from(\n                    billingAddressActionCreator.updateAddress(address, {})(store),\n                ).toPromise();\n\n                expect(billingAddressRequestSender.updateAddress).toHaveBeenCalledWith(\n                    getCheckout().id,\n                    {\n                        ...address,\n                        email: 'test@bigcommerce.com',\n                        id: '55c96cda6f04c',\n                    },\n                    {},\n                );\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/billing/billing-address-action-creator.ts",
    "content": "import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { Response } from '@bigcommerce/request-sender';\nimport { isEmpty } from 'lodash';\nimport { concat, defer, empty, merge, Observable, Observer, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { Checkout, InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { GuestCredentials } from '../customer';\nimport { SubscriptionsActionCreator, UpdateSubscriptionsAction } from '../subscription';\n\nimport { BillingAddressUpdateRequestBody } from './billing-address';\nimport {\n    BillingAddressActionType,\n    ContinueAsGuestAction,\n    UpdateBillingAddressAction,\n} from './billing-address-actions';\nimport { UnableToContinueAsGuestError } from './errors';\n\nimport { BillingAddressRequestSender } from '.';\n\nexport default class BillingAddressActionCreator {\n    constructor(\n        private _requestSender: BillingAddressRequestSender,\n        private _subscriptionActionCreator: SubscriptionsActionCreator,\n    ) {}\n\n    continueAsGuest(\n        credentials: GuestCredentials,\n        options?: RequestOptions,\n    ): ThunkAction<ContinueAsGuestAction | UpdateSubscriptionsAction, InternalCheckoutSelectors> {\n        return (store) => {\n            const state = store.getState();\n            const checkout = state.checkout.getCheckout();\n\n            if (!checkout) {\n                throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n            }\n\n            const customer = state.customer.getCustomer();\n\n            if (customer && !customer.isGuest) {\n                throw new UnableToContinueAsGuestError();\n            }\n\n            const billingAddress = state.billingAddress.getBillingAddress();\n\n            let billingAddressRequestBody: Partial<BillingAddressUpdateRequestBody>;\n\n            if (!billingAddress) {\n                billingAddressRequestBody = credentials;\n            } else {\n                const { country, ...existingBillingAddressRequestBody } = billingAddress;\n\n                billingAddressRequestBody = {\n                    ...existingBillingAddressRequestBody,\n                    ...credentials,\n                };\n            }\n\n            const hasBillingAddress = !isEmpty(billingAddress);\n\n            return merge(\n                concat(\n                    of(createAction(BillingAddressActionType.ContinueAsGuestRequested)),\n                    defer(async () => {\n                        const { body } = await this._createOrUpdateBillingAddress(\n                            checkout.id,\n                            billingAddressRequestBody,\n                            hasBillingAddress,\n                            options,\n                        );\n\n                        return createAction(\n                            BillingAddressActionType.ContinueAsGuestSucceeded,\n                            body,\n                        );\n                    }),\n                ).pipe(\n                    catchError((error) =>\n                        throwErrorAction(BillingAddressActionType.ContinueAsGuestFailed, error),\n                    ),\n                ),\n                this._updateCustomerConsent(credentials, options),\n            );\n        };\n    }\n\n    updateAddress(\n        address: Partial<BillingAddressUpdateRequestBody>,\n        options?: RequestOptions,\n    ): ThunkAction<UpdateBillingAddressAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<UpdateBillingAddressAction>) => {\n                const state = store.getState();\n                const checkout = state.checkout.getCheckout();\n\n                if (!checkout) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                observer.next(createAction(BillingAddressActionType.UpdateBillingAddressRequested));\n\n                const billingAddress = state.billingAddress.getBillingAddress();\n\n                const hasBillingAddress = !isEmpty(billingAddress);\n\n                // If email is not present in the address provided by the client, then\n                // fall back to the stored email as it could have been set separately\n                // using a convenience method. We can't rely on billingAddress having\n                // an ID to consider that there's a preexisting email, as billingAddress\n                // object from Order doesn't have an ID.\n                const billingAddressRequestBody = {\n                    ...address,\n                    email:\n                        typeof address.email === 'undefined' && billingAddress\n                            ? billingAddress.email\n                            : address.email,\n                };\n\n                if (billingAddress && billingAddress.id) {\n                    billingAddressRequestBody.id = billingAddress.id;\n                }\n\n                this._createOrUpdateBillingAddress(\n                    checkout.id,\n                    billingAddressRequestBody,\n                    hasBillingAddress,\n                    options,\n                )\n                    .then(({ body }) => {\n                        observer.next(\n                            createAction(\n                                BillingAddressActionType.UpdateBillingAddressSucceeded,\n                                body,\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                BillingAddressActionType.UpdateBillingAddressFailed,\n                                response,\n                            ),\n                        );\n                    });\n            });\n    }\n\n    private _updateCustomerConsent(\n        { email, acceptsAbandonedCartEmails, acceptsMarketingNewsletter }: GuestCredentials,\n        options?: RequestOptions,\n    ): Observable<UpdateSubscriptionsAction> {\n        if (\n            (acceptsAbandonedCartEmails === undefined || acceptsAbandonedCartEmails === null) &&\n            (acceptsMarketingNewsletter === undefined || acceptsMarketingNewsletter === null)\n        ) {\n            return empty();\n        }\n\n        return this._subscriptionActionCreator.updateSubscriptions(\n            {\n                email,\n                acceptsMarketingNewsletter: acceptsMarketingNewsletter || false,\n                acceptsAbandonedCartEmails: acceptsAbandonedCartEmails || false,\n            },\n            options,\n        );\n    }\n\n    private _createOrUpdateBillingAddress(\n        checkoutId: string,\n        address: Partial<BillingAddressUpdateRequestBody>,\n        hasBillingAddress: boolean,\n        options?: RequestOptions,\n    ): Promise<Response<Checkout>> {\n        if (!hasBillingAddress) {\n            return this._requestSender.createAddress(checkoutId, address, options);\n        }\n\n        return this._requestSender.updateAddress(checkoutId, address, options);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/billing/billing-address-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { Checkout } from '../checkout';\n\nexport enum BillingAddressActionType {\n    UpdateBillingAddressRequested = 'UPDATE_BILLING_ADDRESS_REQUESTED',\n    UpdateBillingAddressSucceeded = 'UPDATE_BILLING_ADDRESS_SUCCEEDED',\n    UpdateBillingAddressFailed = 'UPDATE_BILLING_ADDRESS_FAILED',\n\n    ContinueAsGuestRequested = 'CONTINUE_AS_GUEST_REQUESTED',\n    ContinueAsGuestSucceeded = 'CONTINUE_AS_GUEST_SUCCEEDED',\n    ContinueAsGuestFailed = 'CONTINUE_AS_GUEST_FAILED',\n}\n\nexport type BillingAddressAction = ContinueAsGuestAction | UpdateBillingAddressAction;\n\nexport type UpdateBillingAddressAction =\n    | UpdateBillingAddressRequested\n    | UpdateBillingAddressSucceeded\n    | UpdateBillingAddressFailed;\n\nexport type ContinueAsGuestAction =\n    | ContinueAsGuestRequested\n    | ContinueAsGuestSucceeded\n    | ContinueAsGuestFailed;\n\nexport interface UpdateBillingAddressRequested extends Action {\n    type: BillingAddressActionType.UpdateBillingAddressRequested;\n}\n\nexport interface UpdateBillingAddressSucceeded extends Action<Checkout> {\n    type: BillingAddressActionType.UpdateBillingAddressSucceeded;\n}\n\nexport interface UpdateBillingAddressFailed extends Action<Error> {\n    type: BillingAddressActionType.UpdateBillingAddressFailed;\n}\n\nexport interface ContinueAsGuestRequested extends Action {\n    type: BillingAddressActionType.ContinueAsGuestRequested;\n}\n\nexport interface ContinueAsGuestSucceeded extends Action<Checkout> {\n    type: BillingAddressActionType.ContinueAsGuestSucceeded;\n}\n\nexport interface ContinueAsGuestFailed extends Action<Error> {\n    type: BillingAddressActionType.ContinueAsGuestFailed;\n}\n"
  },
  {
    "path": "packages/core/src/billing/billing-address-reducer.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\n\nimport { CheckoutActionType } from '../checkout';\nimport { getCheckout } from '../checkout/checkouts.mock';\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\nimport { SubscriptionsActionType } from '../subscription';\n\nimport { BillingAddressActionType } from './billing-address-actions';\nimport billingAddressReducer from './billing-address-reducer';\nimport BillingAddressState from './billing-address-state';\n\ndescribe('billingAddressReducer', () => {\n    let initialState: BillingAddressState;\n\n    beforeEach(() => {\n        initialState = { errors: {}, statuses: {} };\n    });\n\n    it('returns billing address when checkout loads', () => {\n        const action = createAction(CheckoutActionType.LoadCheckoutSucceeded, getCheckout());\n        const output = billingAddressReducer(initialState, action);\n\n        expect(output).toEqual({\n            data: action.payload && action.payload.billingAddress,\n            errors: { loadError: undefined },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns loading state when checkout is requested', () => {\n        const action = createAction(CheckoutActionType.LoadCheckoutRequested);\n        const output = billingAddressReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { loadError: undefined },\n            statuses: { isLoading: true },\n        });\n    });\n\n    it('returns error state when checkout fails to load', () => {\n        const action = createAction(\n            CheckoutActionType.LoadCheckoutFailed,\n            new RequestError(getErrorResponse()),\n        );\n        const output = billingAddressReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { loadError: action.payload },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns pending when continueAsGuest requested', () => {\n        const action = createAction(BillingAddressActionType.ContinueAsGuestRequested);\n        const output = billingAddressReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { continueAsGuestError: undefined },\n            statuses: { isContinuingAsGuest: true },\n        });\n    });\n\n    it('returns pending when subscriptions update requested', () => {\n        const action = createAction(SubscriptionsActionType.UpdateSubscriptionsRequested);\n        const output = billingAddressReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { continueAsGuestError: undefined },\n            statuses: { isContinuingAsGuest: true },\n        });\n    });\n\n    it('returns data when continueAsGuest succeeded', () => {\n        const action = createAction(\n            BillingAddressActionType.ContinueAsGuestSucceeded,\n            getCheckout(),\n        );\n        const output = billingAddressReducer(initialState, action);\n\n        expect(output).toEqual({\n            data: action.payload && action.payload.billingAddress,\n            errors: {\n                continueAsGuestError: undefined,\n            },\n            statuses: {\n                isContinuingAsGuest: false,\n            },\n        });\n    });\n\n    it('returns clean state when subscriptions updated', () => {\n        const action = createAction(SubscriptionsActionType.UpdateSubscriptionsSucceeded, {});\n        const output = billingAddressReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { continueAsGuestError: undefined },\n            statuses: { isContinuingAsGuest: false },\n        });\n    });\n\n    it('returns error when continueAsGuest failed', () => {\n        const action = createAction(\n            BillingAddressActionType.ContinueAsGuestFailed,\n            new RequestError(getErrorResponse()),\n        );\n        const output = billingAddressReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { continueAsGuestError: action.payload },\n            statuses: { isContinuingAsGuest: false },\n        });\n    });\n\n    it('returns error when subscriptions failed to update', () => {\n        const action = createAction(\n            SubscriptionsActionType.UpdateSubscriptionsFailed,\n            new RequestError(getErrorResponse()),\n        );\n        const output = billingAddressReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { continueAsGuestError: action.payload },\n            statuses: { isContinuingAsGuest: false },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/billing/billing-address-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport {\n    CheckoutAction,\n    CheckoutActionType,\n    CheckoutHydrateAction,\n    CheckoutHydrateActionType,\n} from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { objectSet, replace } from '../common/utility';\nimport { OrderAction } from '../order';\nimport { SubscriptionsActionType, UpdateSubscriptionsAction } from '../subscription';\n\nimport BillingAddress from './billing-address';\nimport { BillingAddressAction, BillingAddressActionType } from './billing-address-actions';\nimport BillingAddressState, {\n    BillingAddressErrorsState,\n    BillingAddressStatusesState,\n    DEFAULT_STATE,\n} from './billing-address-state';\n\nexport default function billingAddressReducer(\n    state: BillingAddressState = DEFAULT_STATE,\n    action: Action,\n): BillingAddressState {\n    const reducer = combineReducers<BillingAddressState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: BillingAddress | undefined,\n    action: CheckoutAction | BillingAddressAction | OrderAction | CheckoutHydrateAction,\n): BillingAddress | undefined {\n    switch (action.type) {\n        case BillingAddressActionType.UpdateBillingAddressSucceeded:\n        case BillingAddressActionType.ContinueAsGuestSucceeded:\n        case CheckoutActionType.LoadCheckoutSucceeded:\n            return replace(data, action.payload && action.payload.billingAddress);\n\n        case CheckoutHydrateActionType.HydrateInitialState:\n            return replace(data, action.payload?.checkout?.billingAddress);\n\n        default:\n            return data;\n    }\n}\n\nfunction errorsReducer(\n    errors: BillingAddressErrorsState = DEFAULT_STATE.errors,\n    action: CheckoutAction | BillingAddressAction | OrderAction | UpdateSubscriptionsAction,\n): BillingAddressErrorsState {\n    switch (action.type) {\n        case CheckoutActionType.LoadCheckoutRequested:\n        case CheckoutActionType.LoadCheckoutSucceeded:\n            return objectSet(errors, 'loadError', undefined);\n\n        case CheckoutActionType.LoadCheckoutFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        case BillingAddressActionType.UpdateBillingAddressRequested:\n        case BillingAddressActionType.UpdateBillingAddressSucceeded:\n            return objectSet(errors, 'updateError', undefined);\n\n        case BillingAddressActionType.UpdateBillingAddressFailed:\n            return objectSet(errors, 'updateError', action.payload);\n\n        case SubscriptionsActionType.UpdateSubscriptionsRequested:\n        case SubscriptionsActionType.UpdateSubscriptionsSucceeded:\n        case BillingAddressActionType.ContinueAsGuestRequested:\n        case BillingAddressActionType.ContinueAsGuestSucceeded:\n            return objectSet(errors, 'continueAsGuestError', undefined);\n\n        case SubscriptionsActionType.UpdateSubscriptionsFailed:\n        case BillingAddressActionType.ContinueAsGuestFailed:\n            return objectSet(errors, 'continueAsGuestError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: BillingAddressStatusesState = DEFAULT_STATE.statuses,\n    action: CheckoutAction | BillingAddressAction | OrderAction | UpdateSubscriptionsAction,\n): BillingAddressStatusesState {\n    switch (action.type) {\n        case CheckoutActionType.LoadCheckoutRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case CheckoutActionType.LoadCheckoutSucceeded:\n        case CheckoutActionType.LoadCheckoutFailed:\n            return objectSet(statuses, 'isLoading', false);\n\n        case BillingAddressActionType.UpdateBillingAddressRequested:\n            return objectSet(statuses, 'isUpdating', true);\n\n        case BillingAddressActionType.UpdateBillingAddressFailed:\n        case BillingAddressActionType.UpdateBillingAddressSucceeded:\n            return objectSet(statuses, 'isUpdating', false);\n\n        case BillingAddressActionType.ContinueAsGuestRequested:\n        case SubscriptionsActionType.UpdateSubscriptionsRequested:\n            return objectSet(statuses, 'isContinuingAsGuest', true);\n\n        case SubscriptionsActionType.UpdateSubscriptionsSucceeded:\n        case SubscriptionsActionType.UpdateSubscriptionsFailed:\n        case BillingAddressActionType.ContinueAsGuestFailed:\n        case BillingAddressActionType.ContinueAsGuestSucceeded:\n            return objectSet(statuses, 'isContinuingAsGuest', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/billing/billing-address-request-sender.spec.ts",
    "content": "import {\n    createRequestSender,\n    createTimeout,\n    RequestSender,\n    Response,\n} from '@bigcommerce/request-sender';\n\nimport { EmptyCartError } from '../cart/errors';\nimport { Checkout } from '../checkout';\nimport { getCheckout } from '../checkout/checkouts.mock';\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport BillingAddressRequestSender from './billing-address-request-sender';\nimport { getBillingAddress } from './billing-addresses.mock';\n\ndescribe('BillingAddressRequestSender', () => {\n    let addressRequestSender: BillingAddressRequestSender;\n    let requestSender: RequestSender;\n    let response: Response<Checkout>;\n    const include = [\n        'cart.lineItems.physicalItems.options',\n        'cart.lineItems.physicalItems.stockPosition',\n        'cart.lineItems.digitalItems.options',\n        'cart.lineItems.digitalItems.stockPosition',\n        'customer',\n        'promotions.banners',\n    ].join(',');\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n\n        addressRequestSender = new BillingAddressRequestSender(requestSender);\n        response = getResponse(getCheckout());\n\n        jest.spyOn(requestSender, 'post').mockResolvedValue(response);\n        jest.spyOn(requestSender, 'put').mockResolvedValue(response);\n    });\n\n    describe('#updateAddress()', () => {\n        const { id, ...address } = getBillingAddress();\n\n        it('updates billing address', async () => {\n            await addressRequestSender.updateAddress('foo', getBillingAddress());\n\n            expect(requestSender.put).toHaveBeenCalledWith(\n                `/api/storefront/checkouts/foo/billing-address/${id}`,\n                {\n                    body: address,\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include,\n                    },\n                },\n            );\n        });\n\n        it('updates billing address with timeout', async () => {\n            const options = { timeout: createTimeout() };\n\n            await addressRequestSender.updateAddress('foo', getBillingAddress(), options);\n\n            expect(requestSender.put).toHaveBeenCalledWith(\n                `/api/storefront/checkouts/foo/billing-address/${id}`,\n                {\n                    ...options,\n                    body: address,\n                    params: {\n                        include,\n                    },\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                },\n            );\n        });\n\n        it('throws `EmptyCartError` if error type is `empty_cart`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 422,\n                    title: 'The request could not process',\n                    type: 'empty_cart',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'put').mockReturnValue(Promise.reject(error));\n\n            await expect(\n                addressRequestSender.updateAddress('foo', getBillingAddress()),\n            ).rejects.toThrow(EmptyCartError);\n        });\n    });\n\n    describe('#createAddress()', () => {\n        const address = getBillingAddress();\n\n        it('creates billing address', async () => {\n            await addressRequestSender.createAddress('foo', address);\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/foo/billing-address',\n                {\n                    body: address,\n                    params: {\n                        include,\n                    },\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                },\n            );\n        });\n\n        it('creates billing address with timeout', async () => {\n            const options = { timeout: createTimeout() };\n\n            await addressRequestSender.createAddress('foo', address, options);\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/foo/billing-address',\n                {\n                    ...options,\n                    body: address,\n                    params: {\n                        include,\n                    },\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                },\n            );\n        });\n\n        it('throws `EmptyCartError` if error type is `empty_cart`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 422,\n                    title: 'The request could not process',\n                    type: 'empty_cart',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.reject(error));\n\n            await expect(\n                addressRequestSender.createAddress('foo', getBillingAddress()),\n            ).rejects.toThrow(EmptyCartError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/billing/billing-address-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { AddressRequestBody } from '../address';\nimport { EmptyCartError } from '../cart/errors';\nimport { Checkout } from '../checkout';\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport { BillingAddressUpdateRequestBody } from './billing-address';\n\nconst DEFAULT_PARAMS = {\n    include: [\n        'cart.lineItems.physicalItems.options',\n        'cart.lineItems.physicalItems.stockPosition',\n        'cart.lineItems.digitalItems.options',\n        'cart.lineItems.digitalItems.stockPosition',\n        'customer',\n        'promotions.banners',\n    ].join(','),\n};\n\nexport default class BillingAddressRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    createAddress(\n        checkoutId: string,\n        address: Partial<AddressRequestBody>,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<Checkout>> {\n        const url = `/api/storefront/checkouts/${checkoutId}/billing-address`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender\n            .post<Checkout>(url, {\n                body: address,\n                params: DEFAULT_PARAMS,\n                headers,\n                timeout,\n            })\n            .catch((err) => {\n                if (err.body.type === 'empty_cart') {\n                    throw new EmptyCartError();\n                }\n\n                throw err;\n            });\n    }\n\n    updateAddress(\n        checkoutId: string,\n        address: Partial<BillingAddressUpdateRequestBody>,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<Checkout>> {\n        const { id, ...body } = address;\n        const url = `/api/storefront/checkouts/${checkoutId}/billing-address/${id}`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender\n            .put<Checkout>(url, { params: DEFAULT_PARAMS, body, headers, timeout })\n            .catch((err) => {\n                if (err.body.type === 'empty_cart') {\n                    throw new EmptyCartError();\n                }\n\n                throw err;\n            });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/billing/billing-address-selector.spec.ts",
    "content": "import { CheckoutStoreState } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\n\nimport BillingAddressSelector, {\n    BillingAddressSelectorFactory,\n    createBillingAddressSelectorFactory,\n} from './billing-address-selector';\n\ndescribe('BillingAddressSelector', () => {\n    let billingAddressSelector: BillingAddressSelector;\n    let createBillingAddressSelector: BillingAddressSelectorFactory;\n    let state: CheckoutStoreState;\n\n    beforeEach(() => {\n        createBillingAddressSelector = createBillingAddressSelectorFactory();\n        state = getCheckoutStoreState();\n    });\n\n    describe('#getBillingAddress()', () => {\n        it('returns the current billing address', () => {\n            billingAddressSelector = createBillingAddressSelector(state.billingAddress);\n\n            expect(billingAddressSelector.getBillingAddress()).toEqual(state.billingAddress.data);\n        });\n\n        it('returns undefined if quote is not available', () => {\n            billingAddressSelector = createBillingAddressSelector({\n                ...state.billingAddress,\n                data: undefined,\n            });\n\n            expect(billingAddressSelector.getBillingAddress()).toBeFalsy();\n        });\n    });\n\n    describe('#getUpdateError()', () => {\n        it('returns error if unable to update', () => {\n            const updateError = new Error();\n\n            billingAddressSelector = createBillingAddressSelector({\n                ...state.billingAddress,\n                errors: { updateError },\n            });\n\n            expect(billingAddressSelector.getUpdateError()).toEqual(updateError);\n        });\n\n        it('does not returns error if able to update', () => {\n            billingAddressSelector = createBillingAddressSelector(state.billingAddress);\n\n            expect(billingAddressSelector.getUpdateError()).toBeUndefined();\n        });\n    });\n\n    describe('#getContinueAsGuestError()', () => {\n        it('returns error if unable to update', () => {\n            const continueAsGuestError = new Error();\n\n            billingAddressSelector = createBillingAddressSelector({\n                ...state.billingAddress,\n                errors: { continueAsGuestError },\n            });\n\n            expect(billingAddressSelector.getContinueAsGuestError()).toEqual(continueAsGuestError);\n        });\n\n        it('does not returns error if able to update', () => {\n            billingAddressSelector = createBillingAddressSelector(state.billingAddress);\n\n            expect(billingAddressSelector.getContinueAsGuestError()).toBeUndefined();\n        });\n    });\n\n    describe('#isUpdating()', () => {\n        it('returns true if updating billing address', () => {\n            billingAddressSelector = createBillingAddressSelector({\n                ...state.billingAddress,\n                statuses: { isUpdating: true },\n            });\n\n            expect(billingAddressSelector.isUpdating()).toBe(true);\n        });\n\n        it('returns false if not updating billing address', () => {\n            billingAddressSelector = createBillingAddressSelector(state.billingAddress);\n\n            expect(billingAddressSelector.isUpdating()).toBe(false);\n        });\n    });\n\n    describe('#isContinuingAsGuest()', () => {\n        it('returns true if updating billing address', () => {\n            billingAddressSelector = createBillingAddressSelector({\n                ...state.billingAddress,\n                statuses: { isContinuingAsGuest: true },\n            });\n\n            expect(billingAddressSelector.isContinuingAsGuest()).toBe(true);\n        });\n\n        it('returns false if not updating billing address', () => {\n            billingAddressSelector = createBillingAddressSelector(state.billingAddress);\n\n            expect(billingAddressSelector.isContinuingAsGuest()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/billing/billing-address-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport BillingAddress from './billing-address';\nimport BillingAddressState, { DEFAULT_STATE } from './billing-address-state';\n\nexport default interface BillingAddressSelector {\n    getBillingAddress(): BillingAddress | undefined;\n    getBillingAddressOrThrow(): BillingAddress;\n    getUpdateError(): Error | undefined;\n    getContinueAsGuestError(): Error | undefined;\n    getLoadError(): Error | undefined;\n    isUpdating(): boolean;\n    isContinuingAsGuest(): boolean;\n    isLoading(): boolean;\n}\n\nexport type BillingAddressSelectorFactory = (state: BillingAddressState) => BillingAddressSelector;\n\nexport function createBillingAddressSelectorFactory(): BillingAddressSelectorFactory {\n    const getBillingAddress = createSelector(\n        (state: BillingAddressState) => state.data,\n        (data) => () => data,\n    );\n\n    const getBillingAddressOrThrow = createSelector(\n        getBillingAddress,\n        (getBillingAddress) => () => {\n            return guard(\n                getBillingAddress(),\n                () => new MissingDataError(MissingDataErrorType.MissingBillingAddress),\n            );\n        },\n    );\n\n    const getUpdateError = createSelector(\n        (state: BillingAddressState) => state.errors.updateError,\n        (error) => () => error,\n    );\n\n    const getContinueAsGuestError = createSelector(\n        (state: BillingAddressState) => state.errors.continueAsGuestError,\n        (error) => () => error,\n    );\n\n    const getLoadError = createSelector(\n        (state: BillingAddressState) => state.errors.loadError,\n        (error) => () => error,\n    );\n\n    const isUpdating = createSelector(\n        (state: BillingAddressState) => !!state.statuses.isUpdating,\n        (status) => () => status,\n    );\n\n    const isContinuingAsGuest = createSelector(\n        (state: BillingAddressState) => !!state.statuses.isContinuingAsGuest,\n        (status) => () => status,\n    );\n\n    const isLoading = createSelector(\n        (state: BillingAddressState) => !!state.statuses.isLoading,\n        (status) => () => status,\n    );\n\n    return memoizeOne((state: BillingAddressState = DEFAULT_STATE): BillingAddressSelector => {\n        return {\n            getBillingAddress: getBillingAddress(state),\n            getBillingAddressOrThrow: getBillingAddressOrThrow(state),\n            getUpdateError: getUpdateError(state),\n            getContinueAsGuestError: getContinueAsGuestError(state),\n            getLoadError: getLoadError(state),\n            isUpdating: isUpdating(state),\n            isContinuingAsGuest: isContinuingAsGuest(state),\n            isLoading: isLoading(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/billing/billing-address-state.ts",
    "content": "import BillingAddress from './billing-address';\n\nexport default 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 const DEFAULT_STATE: BillingAddressState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/billing/billing-address.ts",
    "content": "import { Address, AddressRequestBody } from '../address';\n\nexport default interface BillingAddress extends Address {\n    id: string;\n    email?: string;\n}\n\nexport interface BillingAddressRequestBody extends AddressRequestBody {\n    email?: string;\n}\n\nexport interface BillingAddressUpdateRequestBody extends BillingAddressRequestBody {\n    id: string;\n}\n"
  },
  {
    "path": "packages/core/src/billing/billing-addresses.mock.ts",
    "content": "import BillingAddress from './billing-address';\nimport BillingAddressState from './billing-address-state';\n\nexport function getBillingAddress(): BillingAddress {\n    return {\n        id: '55c96cda6f04c',\n        firstName: 'Test',\n        lastName: 'Tester',\n        email: 'test@bigcommerce.com',\n        company: 'Bigcommerce',\n        address1: '12345 Testing Way',\n        address2: '',\n        city: 'Some City',\n        stateOrProvince: 'California',\n        stateOrProvinceCode: 'CA',\n        country: 'United States',\n        countryCode: 'US',\n        postalCode: '95555',\n        shouldSaveAddress: true,\n        phone: '555-555-5555',\n        customFields: [],\n    };\n}\n\nexport function getBillingAddressState(): BillingAddressState {\n    return {\n        data: getBillingAddress(),\n        errors: {},\n        statuses: {},\n    };\n}\n"
  },
  {
    "path": "packages/core/src/billing/errors/index.ts",
    "content": "export { default as UnableToContinueAsGuestError } from './unable-to-continue-as-guest-error';\n"
  },
  {
    "path": "packages/core/src/billing/errors/unable-to-continue-as-guest-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\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 UnableToContinueAsGuestError extends StandardError {\n    constructor(message?: string) {\n        super(\n            message || 'Unable to continue as a guest because the customer is already signed in.',\n        );\n\n        this.name = 'UnableToContinueAsGuestError';\n        this.type = 'unable_to_continue_as_guest';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/billing/index.ts",
    "content": "export * from './billing-address-actions';\n\nexport {\n    default as BillingAddress,\n    BillingAddressRequestBody,\n    BillingAddressUpdateRequestBody,\n} from './billing-address';\nexport {\n    default as BillingAddressSelector,\n    BillingAddressSelectorFactory,\n    createBillingAddressSelectorFactory,\n} from './billing-address-selector';\nexport { default as BillingAddressActionCreator } from './billing-address-action-creator';\nexport { default as BillingAddressState } from './billing-address-state';\nexport { default as BillingAddressRequestSender } from './billing-address-request-sender';\nexport { default as billingAddressReducer } from './billing-address-reducer';\nexport { default as isBillingAddressLike } from './is-billing-address-like';\n"
  },
  {
    "path": "packages/core/src/billing/internal-billing-addresses.mock.ts",
    "content": "import { InternalAddress } from '../address';\n\nexport function getBillingAddress(): InternalAddress {\n    return {\n        id: '55c96cda6f04c',\n        firstName: 'Test',\n        lastName: 'Tester',\n        company: 'Bigcommerce',\n        addressLine1: '12345 Testing Way',\n        addressLine2: '',\n        city: 'Some City',\n        province: 'California',\n        provinceCode: 'CA',\n        postCode: '95555',\n        country: 'United States',\n        countryCode: 'US',\n        phone: '555-555-5555',\n        customFields: [],\n    };\n}\n"
  },
  {
    "path": "packages/core/src/billing/is-billing-address-like.spec.ts",
    "content": "import { getShippingAddress } from '../shipping/shipping-addresses.mock';\n\nimport { getBillingAddress } from './billing-addresses.mock';\nimport isBillingAddressLike from './is-billing-address-like';\n\ndescribe('isBillingAddressLike', () => {\n    it('returns true if billing address', () => {\n        expect(isBillingAddressLike(getBillingAddress())).toBeTruthy();\n    });\n\n    it('returns false if shipping address', () => {\n        expect(isBillingAddressLike(getShippingAddress())).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/billing/is-billing-address-like.ts",
    "content": "import { Address } from '../address';\n\nimport BillingAddress from './billing-address';\n\nexport default function isBillingAddressLike(address: Address): address is BillingAddress {\n    const billingAddress = address as BillingAddress;\n\n    return typeof billingAddress.id !== 'undefined';\n}\n"
  },
  {
    "path": "packages/core/src/bodl/analytics-steps.ts",
    "content": "export enum AnalyticStepType {\n    CUSTOMER = 'customer',\n    SHIPPING = 'shipping',\n    BILLING = 'billing',\n    PAYMENT = 'payment',\n}\n\nexport const AnalyticStepOrder: AnalyticStepType[] = [\n    AnalyticStepType.CUSTOMER,\n    AnalyticStepType.SHIPPING,\n    AnalyticStepType.BILLING,\n    AnalyticStepType.PAYMENT,\n];\n"
  },
  {
    "path": "packages/core/src/bodl/bodl-emitter-service.ts",
    "content": "import { flatten } from 'lodash';\n\nimport { LineItem, LineItemMap } from '../cart';\nimport { CheckoutSelectors, CheckoutStoreSelector } from '../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\n\nimport { AnalyticStepOrder, AnalyticStepType } from './analytics-steps';\nimport BodlService from './bodl-service';\nimport {\n    BodlEventsCheckout,\n    BodlEventsPayload,\n    BODLProduct,\n    CommonCheckoutData,\n} from './bodl-window';\n\nexport default class BodlEmitterService implements BodlService {\n    private _checkoutStarted = false;\n    private _emailEntryBegan = false;\n    private _shippingOptionsShown = false;\n    private _completedSteps: { [key: string]: boolean } = {};\n    private state?: CheckoutStoreSelector;\n\n    constructor(\n        private subscribe: (subscriber: (state: CheckoutSelectors) => void) => void,\n        private bodlEvents: BodlEventsCheckout,\n    ) {\n        this.subscribe((state) => {\n            this.setState(state.data);\n\n            const config = this.state?.getConfig();\n\n            if (!config) {\n                throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n            }\n        });\n    }\n\n    setState(state: CheckoutStoreSelector) {\n        this.state = state;\n    }\n\n    checkoutBegin(): void {\n        const data = this._getCommonCheckoutData();\n\n        if (this._checkoutStarted || !data) {\n            return;\n        }\n\n        this.bodlEvents.emitCheckoutBeginEvent(data);\n\n        this._checkoutStarted = true;\n    }\n\n    orderPurchased(): void {\n        const order = this.state?.getOrder();\n\n        if (!order) {\n            return;\n        }\n\n        const {\n            currency,\n            isComplete,\n            orderId,\n            orderAmount,\n            shippingCostTotal,\n            lineItems,\n            cartId,\n            coupons,\n            channelId,\n            taxTotal,\n        } = order;\n\n        if (!isComplete) {\n            return;\n        }\n\n        this.bodlEvents.emitOrderPurchasedEvent({\n            event_id: cartId,\n            currency: currency.code,\n            order_id: orderId,\n            tax: taxTotal,\n            channel_id: channelId,\n            cart_value: orderAmount,\n            coupon_codes: coupons.map((coupon) => coupon.code.toUpperCase()),\n            shipping_cost: shippingCostTotal,\n            line_items: this._getProducts(lineItems, currency.code),\n        });\n    }\n\n    stepCompleted(currentStep?: AnalyticStepType): void {\n        if (!currentStep) {\n            return;\n        }\n\n        AnalyticStepOrder.some((step: AnalyticStepType) => {\n            if (!this._hasStepCompleted(step)) {\n                this._trackCompletedStep(step);\n            }\n\n            return step === currentStep;\n        });\n    }\n\n    customerEmailEntry(email?: string) {\n        if (this._emailEntryBegan || !email?.length) {\n            return;\n        }\n\n        this._emailEntryBegan = true;\n        this.bodlEvents.emit('bodl_checkout_email_entry_began');\n    }\n\n    customerSuggestionInit(payload?: BodlEventsPayload) {\n        this.bodlEvents.emit('bodl_checkout_customer_suggestion_initialization', payload);\n    }\n\n    customerSuggestionExecute() {\n        this.bodlEvents.emit('bodl_checkout_customer_suggestion_execute');\n    }\n\n    customerPaymentMethodExecuted(payload?: BodlEventsPayload) {\n        this.bodlEvents.emit('bodl_checkout_customer_payment_method_executed', payload);\n    }\n\n    showShippingMethods() {\n        if (this._shippingOptionsShown) {\n            return;\n        }\n\n        this._shippingOptionsShown = true;\n        this.bodlEvents.emit('bodl_checkout_show_shipping_options');\n    }\n\n    selectedPaymentMethod(paymentOption?: string) {\n        const commonData = this._getCommonCheckoutData();\n\n        if (!commonData || !paymentOption) {\n            return;\n        }\n\n        this.bodlEvents.emitPaymentDetailsProvidedEvent({\n            ...commonData,\n            payment_type: paymentOption,\n        });\n    }\n\n    clickPayButton(payload?: BodlEventsPayload) {\n        this.bodlEvents.emit('bodl_checkout_click_pay_button', payload);\n    }\n\n    paymentRejected() {\n        this.bodlEvents.emit('bodl_checkout_payment_rejected');\n    }\n\n    paymentComplete() {\n        this.bodlEvents.emit('bodl_checkout_payment_complete');\n    }\n\n    exitCheckout() {\n        this.bodlEvents.emit('bodl_checkout_exit');\n    }\n\n    private _trackCompletedStep(step: AnalyticStepType) {\n        this._completedSteps[step] = true;\n\n        const bodlEventsMap: { [key in AnalyticStepType]?: () => void } = {\n            [AnalyticStepType.SHIPPING]: this._trackShippingStepCompleted.bind(this),\n        };\n        const emit = bodlEventsMap[step];\n\n        if (emit) {\n            emit();\n        } else {\n            this.bodlEvents.emit('bodl_checkout_step_completed', { step });\n        }\n    }\n\n    private _trackShippingStepCompleted(): void {\n        const shippingMethod = this.state?.getSelectedShippingOption()?.description;\n        const commonData = this._getCommonCheckoutData();\n\n        if (!commonData || !shippingMethod) {\n            return;\n        }\n\n        this.bodlEvents.emitShippingDetailsProvidedEvent({\n            ...commonData,\n            shipping_method: shippingMethod,\n        });\n    }\n\n    private _getCommonCheckoutData(): CommonCheckoutData | null {\n        const checkout = this.state?.getCheckout();\n\n        if (!checkout) {\n            return null;\n        }\n\n        const {\n            cart: { cartAmount, currency, lineItems, id, coupons },\n            channelId,\n        } = checkout;\n\n        return {\n            event_id: id,\n            currency: currency.code,\n            cart_value: cartAmount,\n            coupon_codes: coupons.map((coupon) => coupon.code.toUpperCase()),\n            line_items: this._getProducts(lineItems, currency.code),\n            channel_id: channelId,\n        };\n    }\n\n    private _getProducts(lineItems: LineItemMap, currencyCode: string): BODLProduct[] {\n        const customItems: BODLProduct[] = (lineItems.customItems || []).map((item) => ({\n            product_id: item.id,\n            sku: item.sku,\n            base_price: item.listPrice,\n            sale_price: item.listPrice,\n            purchase_price: item.listPrice,\n            quantity: item.quantity,\n            product_name: item.name,\n            currency: currencyCode,\n        }));\n\n        const giftCertificateItems: BODLProduct[] = lineItems.giftCertificates.map((item) => {\n            return {\n                product_id: item.id,\n                gift_certificate_id: item.id,\n                base_price: item.amount,\n                sale_price: item.amount,\n                purchase_price: item.amount,\n                product_name: item.name,\n                gift_certificate_name: item.name,\n                gift_certificate_theme: item.theme,\n                quantity: 1,\n                currency: currencyCode,\n            };\n        });\n\n        const physicalAndDigitalItems: BODLProduct[] = [\n            ...lineItems.physicalItems,\n            ...lineItems.digitalItems,\n        ].map((item) => {\n            const getCategoryNames = (lineItem: LineItem): string[] => {\n                if (Array.isArray(lineItem.categoryNames)) {\n                    return lineItem.categoryNames;\n                } else if (Array.isArray(lineItem.categories)) {\n                    return flatten(lineItem.categories).map(({ name }) => name);\n                }\n\n                return [];\n            };\n\n            let itemAttributes;\n\n            if (item.options && item.options.length) {\n                itemAttributes = item.options.map((option) => `${option.name}:${option.value}`);\n                itemAttributes.sort();\n            }\n\n            return {\n                product_id: item.productId,\n                quantity: item.quantity,\n                product_name: item.name,\n                base_price: item.listPrice,\n                sale_price: item.salePrice,\n                purchase_price: item.salePrice > 0 ? item.salePrice : item.listPrice,\n                sku: item.sku,\n                variant_id: item.variantId,\n                discount: item.discountAmount,\n                coupon_amount: item.couponAmount,\n                brand_name: item.brand,\n                currency: currencyCode,\n                category_names: getCategoryNames(item),\n                retail_price: item.retailPrice,\n            };\n        });\n\n        return [...customItems, ...physicalAndDigitalItems, ...giftCertificateItems].map(\n            (item) => ({\n                ...item,\n                product_id: String(item.product_id),\n            }),\n        );\n    }\n\n    private _hasStepCompleted(step: AnalyticStepType): boolean {\n        return this._completedSteps[step];\n    }\n}\n"
  },
  {
    "path": "packages/core/src/bodl/bodl-events-service.spec.ts",
    "content": "import { CheckoutSelectors, CheckoutService, createCheckoutService } from '../checkout';\nimport { getCheckoutWithCoupons } from '../checkout/checkouts.mock';\nimport { getConfig } from '../config/configs.mock';\nimport { getOrder } from '../order/orders.mock';\nimport { getShippingOption } from '../shipping/shipping-options.mock';\n\nimport { AnalyticStepType } from './analytics-steps';\nimport BodlEmitterService from './bodl-emitter-service';\nimport { BodlEventsCheckout, BodlEventsPayload } from './bodl-window';\n\ndescribe('BodlEmitterService', () => {\n    let checkoutService: CheckoutService;\n    let bodlEmitterService: BodlEmitterService;\n    let bodlEvents: BodlEventsCheckout;\n    let subscriber: (subscriber: (state: CheckoutSelectors) => void) => void;\n\n    beforeEach(() => {\n        bodlEvents = {\n            emitOrderPurchasedEvent: jest.fn(),\n            emitCheckoutBeginEvent: jest.fn(),\n            emitShippingDetailsProvidedEvent: jest.fn(),\n            emitPaymentDetailsProvidedEvent: jest.fn(),\n            emit: jest.fn(),\n        };\n\n        checkoutService = createCheckoutService();\n\n        subscriber = (cb) => {\n            cb(checkoutService.getState());\n        };\n\n        jest.spyOn(checkoutService.getState().data, 'getCheckout').mockReturnValue(\n            getCheckoutWithCoupons(),\n        );\n\n        jest.spyOn(checkoutService.getState().data, 'getConfig').mockReturnValue(\n            getConfig().storeConfig,\n        );\n\n        jest.spyOn(checkoutService.getState().data, 'getSelectedShippingOption').mockReturnValue({\n            ...getShippingOption(),\n            description: 'foo',\n        });\n\n        bodlEmitterService = new BodlEmitterService(subscriber, bodlEvents);\n    });\n\n    describe('#checkoutBegin()', () => {\n        beforeEach(() => {\n            bodlEmitterService.checkoutBegin();\n        });\n\n        it('only tracks event once', () => {\n            bodlEmitterService.checkoutBegin();\n            bodlEmitterService.checkoutBegin();\n\n            expect(bodlEvents.emitCheckoutBeginEvent).toHaveBeenCalledTimes(1);\n        });\n\n        it('tracks the event id', () => {\n            expect(bodlEvents.emitCheckoutBeginEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    event_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                }),\n            );\n        });\n\n        it('tracks the currency', () => {\n            expect(bodlEvents.emitCheckoutBeginEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    currency: 'USD',\n                }),\n            );\n        });\n\n        it('tracks the cart value', () => {\n            expect(bodlEvents.emitCheckoutBeginEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    cart_value: 190,\n                }),\n            );\n        });\n\n        it('tracks the coupon_codes array', () => {\n            expect(bodlEvents.emitCheckoutBeginEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    coupon_codes: ['SAVEBIG2015', '279F507D817E3E7'],\n                }),\n            );\n        });\n\n        it('tracks the channel id', () => {\n            expect(bodlEvents.emitCheckoutBeginEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    channel_id: 1,\n                }),\n            );\n        });\n\n        it('tracks products', () => {\n            expect(bodlEvents.emitCheckoutBeginEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    coupon_codes: ['SAVEBIG2015', '279F507D817E3E7'],\n                    cart_value: 190,\n                    currency: 'USD',\n                    event_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                    line_items: [\n                        {\n                            product_id: '103',\n                            sku: 'CLC',\n                            product_name: 'Canvas Laundry Cart',\n                            base_price: 200,\n                            sale_price: 190,\n                            retail_price: 210,\n                            purchase_price: 190,\n                            quantity: 1,\n                            brand_name: 'OFS',\n                            discount: 10,\n                            coupon_amount: 5,\n                            category_names: ['Cat 1'],\n                            variant_id: 71,\n                            currency: 'USD',\n                        },\n                        {\n                            product_id: '104',\n                            sku: 'CLX',\n                            product_name: 'Digital Book',\n                            base_price: 200,\n                            purchase_price: 200,\n                            sale_price: 200,\n                            retail_price: 210,\n                            quantity: 1,\n                            discount: 0,\n                            coupon_amount: 5,\n                            brand_name: 'Digitalia',\n                            category_names: ['Ebooks', 'Audio Books'],\n                            variant_id: 72,\n                            currency: 'USD',\n                        },\n                        {\n                            gift_certificate_id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                            gift_certificate_name: '$100 Gift Certificate',\n                            gift_certificate_theme: 'General',\n                            product_name: '$100 Gift Certificate',\n                            base_price: 100,\n                            purchase_price: 100,\n                            sale_price: 100,\n                            product_id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                            quantity: 1,\n                            currency: 'USD',\n                        },\n                    ],\n                }),\n            );\n        });\n    });\n\n    describe('#orderPurchased()', () => {\n        beforeEach(() => {\n            const orderMock = getOrder();\n\n            delete orderMock.lineItems.physicalItems[0].categoryNames;\n\n            jest.spyOn(checkoutService.getState().data, 'getOrder').mockReturnValue(orderMock);\n\n            bodlEmitterService.orderPurchased();\n        });\n\n        it('tracks the event id', () => {\n            expect(bodlEvents.emitOrderPurchasedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    event_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                }),\n            );\n        });\n\n        it('tracks the currency', () => {\n            expect(bodlEvents.emitOrderPurchasedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    currency: 'USD',\n                }),\n            );\n        });\n\n        it('tracks the transaction id', () => {\n            expect(bodlEvents.emitOrderPurchasedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    order_id: 295,\n                }),\n            );\n        });\n\n        it('tracks the cart amount', () => {\n            expect(bodlEvents.emitOrderPurchasedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    cart_value: 190,\n                }),\n            );\n        });\n\n        it('tracks the coupon amount, single field, comma separated', () => {\n            expect(bodlEvents.emitOrderPurchasedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    coupon_codes: ['SAVEBIG2015', '279F507D817E3E7'],\n                }),\n            );\n        });\n\n        it('tracks the shipping cost', () => {\n            expect(bodlEvents.emitOrderPurchasedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    shipping_cost: 15,\n                }),\n            );\n        });\n\n        it('tracks the channel id', () => {\n            expect(bodlEvents.emitOrderPurchasedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    channel_id: 1,\n                }),\n            );\n        });\n\n        it('tracks total tax', () => {\n            expect(bodlEvents.emitOrderPurchasedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    tax: 3,\n                }),\n            );\n        });\n\n        it('tracks products', () => {\n            expect(bodlEvents.emitOrderPurchasedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    line_items: [\n                        {\n                            product_id: '103',\n                            sku: 'CLC',\n                            product_name: 'Canvas Laundry Cart',\n                            base_price: 200,\n                            sale_price: 190,\n                            purchase_price: 190,\n                            retail_price: 210,\n                            quantity: 1,\n                            brand_name: 'OFS',\n                            discount: 10,\n                            coupon_amount: 5,\n                            category_names: ['Cat 1', 'Furniture', 'Bed'],\n                            variant_id: 71,\n                            currency: 'USD',\n                        },\n                        {\n                            gift_certificate_id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                            gift_certificate_name: '$100 Gift Certificate',\n                            gift_certificate_theme: 'General',\n                            product_name: '$100 Gift Certificate',\n                            base_price: 100,\n                            sale_price: 100,\n                            purchase_price: 100,\n                            product_id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                            quantity: 1,\n                            currency: 'USD',\n                        },\n                    ],\n                }),\n            );\n        });\n    });\n\n    describe('#stepCompleted(step)', () => {\n        const SHIPPING_STEP = AnalyticStepType.SHIPPING;\n\n        describe('Shipping Step', () => {\n            beforeEach(() => {\n                bodlEmitterService.stepCompleted(SHIPPING_STEP);\n            });\n\n            it('only tracks event once', () => {\n                bodlEmitterService.stepCompleted(SHIPPING_STEP);\n                bodlEmitterService.stepCompleted(SHIPPING_STEP);\n\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).toHaveBeenCalledTimes(1);\n            });\n\n            it('tracks the event id', () => {\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        event_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                    }),\n                );\n            });\n\n            it('tracks the currency', () => {\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        currency: 'USD',\n                    }),\n                );\n            });\n\n            it('tracks the cart value', () => {\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        cart_value: 190,\n                    }),\n                );\n            });\n\n            it('tracks the coupon_codes array', () => {\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        coupon_codes: ['SAVEBIG2015', '279F507D817E3E7'],\n                    }),\n                );\n            });\n\n            it('tracks the channel id', () => {\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        channel_id: 1,\n                    }),\n                );\n            });\n\n            it('tracks the selected shipping method', () => {\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        shipping_method: 'foo',\n                    }),\n                );\n            });\n\n            it('tracks products', () => {\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        line_items: [\n                            {\n                                product_id: '103',\n                                sku: 'CLC',\n                                product_name: 'Canvas Laundry Cart',\n                                base_price: 200,\n                                sale_price: 190,\n                                purchase_price: 190,\n                                quantity: 1,\n                                retail_price: 210,\n                                brand_name: 'OFS',\n                                discount: 10,\n                                coupon_amount: 5,\n                                category_names: ['Cat 1'],\n                                variant_id: 71,\n                                currency: 'USD',\n                            },\n                            {\n                                product_id: '104',\n                                sku: 'CLX',\n                                product_name: 'Digital Book',\n                                base_price: 200,\n                                purchase_price: 200,\n                                sale_price: 200,\n                                quantity: 1,\n                                retail_price: 210,\n                                discount: 0,\n                                coupon_amount: 5,\n                                brand_name: 'Digitalia',\n                                category_names: ['Ebooks', 'Audio Books'],\n                                variant_id: 72,\n                                currency: 'USD',\n                            },\n                            {\n                                gift_certificate_id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                                gift_certificate_name: '$100 Gift Certificate',\n                                gift_certificate_theme: 'General',\n                                product_name: '$100 Gift Certificate',\n                                base_price: 100,\n                                purchase_price: 100,\n                                sale_price: 100,\n                                product_id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                                quantity: 1,\n                                currency: 'USD',\n                            },\n                        ],\n                        shipping_method: 'foo',\n                    }),\n                );\n            });\n        });\n\n        describe('Steps ordering', () => {\n            it('no step has not completed yet', () => {\n                bodlEmitterService.stepCompleted();\n\n                expect(bodlEvents.emit).not.toHaveBeenCalled();\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).not.toHaveBeenCalled();\n            });\n\n            it('First step completed', () => {\n                bodlEmitterService.stepCompleted(AnalyticStepType.CUSTOMER);\n\n                expect(bodlEvents.emit).toHaveBeenCalledTimes(1);\n                expect(bodlEvents.emit).toHaveBeenCalledWith('bodl_checkout_step_completed', {\n                    step: 'customer',\n                });\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).not.toHaveBeenCalled();\n                expect(bodlEvents.emit).not.toHaveBeenCalledWith('bodl_checkout_step_completed', {\n                    step: 'billing',\n                });\n                expect(bodlEvents.emit).not.toHaveBeenCalledWith('bodl_checkout_step_completed', {\n                    step: 'payment',\n                });\n            });\n\n            it('Complete the same step three times', () => {\n                bodlEmitterService.stepCompleted(AnalyticStepType.CUSTOMER);\n                bodlEmitterService.stepCompleted(AnalyticStepType.CUSTOMER);\n                bodlEmitterService.stepCompleted(AnalyticStepType.CUSTOMER);\n\n                expect(bodlEvents.emit).toHaveBeenCalledTimes(1);\n                expect(bodlEvents.emit).toHaveBeenCalledWith('bodl_checkout_step_completed', {\n                    step: 'customer',\n                });\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).not.toHaveBeenCalled();\n            });\n\n            it('Manually complete three steps', () => {\n                bodlEmitterService.stepCompleted(AnalyticStepType.CUSTOMER);\n                bodlEmitterService.stepCompleted(AnalyticStepType.SHIPPING);\n                bodlEmitterService.stepCompleted(AnalyticStepType.BILLING);\n\n                expect(bodlEvents.emit).toHaveBeenCalledTimes(2);\n                expect(bodlEvents.emit).toHaveBeenCalledWith('bodl_checkout_step_completed', {\n                    step: 'customer',\n                });\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).toHaveBeenCalled();\n                expect(bodlEvents.emit).toHaveBeenCalledWith('bodl_checkout_step_completed', {\n                    step: 'billing',\n                });\n                expect(bodlEvents.emit).not.toHaveBeenCalledWith('bodl_checkout_step_completed', {\n                    step: 'payment',\n                });\n            });\n\n            it('First and third step completed manually, second - autocompleted', () => {\n                bodlEmitterService.stepCompleted(AnalyticStepType.CUSTOMER);\n                bodlEmitterService.stepCompleted(AnalyticStepType.BILLING);\n\n                expect(bodlEvents.emit).toHaveBeenCalledTimes(2);\n                expect(bodlEvents.emit).toHaveBeenCalledWith('bodl_checkout_step_completed', {\n                    step: 'customer',\n                });\n                expect(bodlEvents.emitShippingDetailsProvidedEvent).toHaveBeenCalled();\n                expect(bodlEvents.emit).toHaveBeenCalledWith('bodl_checkout_step_completed', {\n                    step: 'billing',\n                });\n                expect(bodlEvents.emit).not.toHaveBeenCalledWith('bodl_checkout_step_completed', {\n                    step: 'payment',\n                });\n            });\n        });\n    });\n\n    describe('#selectedPaymentMethod(method)', () => {\n        const PAYMENT_OPTION = 'Credit Card';\n\n        beforeEach(() => {\n            bodlEmitterService.selectedPaymentMethod(PAYMENT_OPTION);\n        });\n\n        it('tracks the event id', () => {\n            expect(bodlEvents.emitPaymentDetailsProvidedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    event_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                }),\n            );\n        });\n\n        it('tracks the currency', () => {\n            expect(bodlEvents.emitPaymentDetailsProvidedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    currency: 'USD',\n                }),\n            );\n        });\n\n        it('tracks the cart value', () => {\n            expect(bodlEvents.emitPaymentDetailsProvidedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    cart_value: 190,\n                }),\n            );\n        });\n\n        it('tracks the coupon_codes array', () => {\n            expect(bodlEvents.emitPaymentDetailsProvidedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    coupon_codes: ['SAVEBIG2015', '279F507D817E3E7'],\n                }),\n            );\n        });\n\n        it('tracks the channel id', () => {\n            expect(bodlEvents.emitPaymentDetailsProvidedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    channel_id: 1,\n                }),\n            );\n        });\n\n        it('tracks the selected method', () => {\n            expect(bodlEvents.emitPaymentDetailsProvidedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    payment_type: PAYMENT_OPTION,\n                }),\n            );\n        });\n\n        it('tracks products', () => {\n            expect(bodlEvents.emitPaymentDetailsProvidedEvent).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    line_items: [\n                        {\n                            product_id: '103',\n                            sku: 'CLC',\n                            product_name: 'Canvas Laundry Cart',\n                            base_price: 200,\n                            sale_price: 190,\n                            purchase_price: 190,\n                            quantity: 1,\n                            retail_price: 210,\n                            brand_name: 'OFS',\n                            discount: 10,\n                            coupon_amount: 5,\n                            category_names: ['Cat 1'],\n                            variant_id: 71,\n                            currency: 'USD',\n                        },\n                        {\n                            product_id: '104',\n                            sku: 'CLX',\n                            product_name: 'Digital Book',\n                            base_price: 200,\n                            purchase_price: 200,\n                            sale_price: 200,\n                            quantity: 1,\n                            retail_price: 210,\n                            discount: 0,\n                            coupon_amount: 5,\n                            brand_name: 'Digitalia',\n                            category_names: ['Ebooks', 'Audio Books'],\n                            variant_id: 72,\n                            currency: 'USD',\n                        },\n                        {\n                            gift_certificate_id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                            gift_certificate_name: '$100 Gift Certificate',\n                            gift_certificate_theme: 'General',\n                            product_name: '$100 Gift Certificate',\n                            base_price: 100,\n                            purchase_price: 100,\n                            sale_price: 100,\n                            product_id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                            quantity: 1,\n                            currency: 'USD',\n                        },\n                    ],\n                    payment_type: 'Credit Card',\n                }),\n            );\n        });\n    });\n\n    describe('#customerEmailEntry(email)', () => {\n        it('Shopper has not yet entered email', () => {\n            bodlEmitterService.customerEmailEntry();\n\n            expect(bodlEvents.emit).not.toHaveBeenCalled();\n        });\n\n        it('Shopper begins to enter an email', () => {\n            bodlEmitterService.customerEmailEntry('e');\n            bodlEmitterService.customerEmailEntry('em');\n            bodlEmitterService.customerEmailEntry('ema');\n            bodlEmitterService.customerEmailEntry('emai');\n            bodlEmitterService.customerEmailEntry('email');\n\n            expect(bodlEvents.emit).toHaveBeenCalledTimes(1);\n            expect(bodlEvents.emit).toHaveBeenCalledWith('bodl_checkout_email_entry_began');\n        });\n    });\n\n    describe('#showShippingMethods()', () => {\n        it('emit show shipping methods', () => {\n            bodlEmitterService.showShippingMethods();\n\n            expect(bodlEvents.emit).toHaveBeenCalledTimes(1);\n            expect(bodlEvents.emit).toHaveBeenCalledWith('bodl_checkout_show_shipping_options');\n        });\n\n        it('show shipping methods more then once', () => {\n            bodlEmitterService.showShippingMethods();\n            bodlEmitterService.showShippingMethods();\n            bodlEmitterService.showShippingMethods();\n\n            expect(bodlEvents.emit).toHaveBeenCalledTimes(1);\n            expect(bodlEvents.emit).toHaveBeenCalledWith('bodl_checkout_show_shipping_options');\n        });\n    });\n\n    describe('simple bodl events', () => {\n        it('emit simple BODL events', () => {\n            const bodlEventsList: Array<{\n                eventMethod(arg?: string | BodlEventsPayload): void;\n                methodArguments?: string | BodlEventsPayload;\n                expectedData: [string, BodlEventsPayload?];\n            }> = [\n                {\n                    eventMethod: (payload: BodlEventsPayload) =>\n                        bodlEmitterService.customerSuggestionInit(payload),\n                    methodArguments: { test: 'data' },\n                    expectedData: [\n                        'bodl_checkout_customer_suggestion_initialization',\n                        { test: 'data' },\n                    ],\n                },\n                {\n                    eventMethod: () => bodlEmitterService.customerSuggestionExecute(),\n                    expectedData: ['bodl_checkout_customer_suggestion_execute'],\n                },\n                {\n                    eventMethod: (payload: BodlEventsPayload) =>\n                        bodlEmitterService.customerPaymentMethodExecuted(payload),\n                    methodArguments: { test: 'data' },\n                    expectedData: [\n                        'bodl_checkout_customer_payment_method_executed',\n                        { test: 'data' },\n                    ],\n                },\n                {\n                    eventMethod: (payload: BodlEventsPayload) =>\n                        bodlEmitterService.clickPayButton(payload),\n                    methodArguments: { test: 'data' },\n                    expectedData: ['bodl_checkout_click_pay_button', { test: 'data' }],\n                },\n                {\n                    eventMethod: () => bodlEmitterService.paymentRejected(),\n                    expectedData: ['bodl_checkout_payment_rejected'],\n                },\n                {\n                    eventMethod: () => bodlEmitterService.paymentComplete(),\n                    expectedData: ['bodl_checkout_payment_complete'],\n                },\n                {\n                    eventMethod: () => bodlEmitterService.exitCheckout(),\n                    expectedData: ['bodl_checkout_exit'],\n                },\n            ];\n\n            bodlEventsList.forEach((event) => {\n                const { eventMethod, methodArguments, expectedData } = event;\n\n                bodlEvents.emit = jest.fn();\n\n                eventMethod(methodArguments);\n\n                expect(bodlEvents.emit).toHaveBeenCalledTimes(1);\n                expect(bodlEvents.emit).toHaveBeenCalledWith(...expectedData);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/bodl/bodl-service.ts",
    "content": "import { BodlEventsPayload } from './bodl-window';\n\nexport default interface BodlService {\n    checkoutBegin(): void;\n    orderPurchased(): void;\n    stepCompleted(step?: string): void;\n    customerEmailEntry(email?: string): void;\n    customerSuggestionInit(payload?: BodlEventsPayload): void;\n    customerSuggestionExecute(): void;\n    customerPaymentMethodExecuted(payload?: BodlEventsPayload): void;\n    showShippingMethods(): void;\n    selectedPaymentMethod(methodName?: string): void;\n    clickPayButton(payload?: BodlEventsPayload): void;\n    paymentRejected(): void;\n    paymentComplete(): void;\n    exitCheckout(): void;\n}\n"
  },
  {
    "path": "packages/core/src/bodl/bodl-window.ts",
    "content": "export interface BODLProduct {\n    product_id: string | number;\n    product_name: string;\n    variant_id?: number;\n    sku?: string;\n    gift_certificate_id?: string | number;\n    gift_certificate_name?: string;\n    gift_certificate_theme?: string;\n    base_price: number;\n    sale_price?: number;\n    retail_price?: number;\n    quantity: number;\n    discount?: number;\n    coupon_amount?: number;\n    index?: number;\n    brand_name?: string;\n    category_names?: string[];\n    currency?: string;\n}\n\nexport interface CommonCheckoutData {\n    event_id: string;\n    currency: string;\n    channel_id: number;\n    cart_value: number;\n    coupon_codes: string[];\n    line_items: BODLProduct[];\n}\n\nexport interface OrderPurchasedData extends CommonCheckoutData {\n    tax: number;\n    order_id: number;\n    shipping_cost: number;\n}\n\nexport interface ShippingDetailsProvidedData extends CommonCheckoutData {\n    shipping_method: string;\n}\n\nexport interface BillingDetailsProvidedData extends CommonCheckoutData {\n    payment_type: string;\n}\n\nexport interface BodlEventsCheckout {\n    emitShippingDetailsProvidedEvent(data: ShippingDetailsProvidedData): boolean;\n    emitPaymentDetailsProvidedEvent(data: BillingDetailsProvidedData): boolean;\n    emitCheckoutBeginEvent(data: CommonCheckoutData): boolean;\n    emitOrderPurchasedEvent(data: OrderPurchasedData): boolean;\n    emit(name: string, data?: BodlEventsPayload): void;\n}\n\nexport interface BodlEventsPayload {\n    [key: string]: unknown;\n}\n\nexport interface BodlEvents {\n    checkout: BodlEventsCheckout;\n}\n\nexport default interface BodlEventsWindow extends Window {\n    bodlEvents: BodlEvents;\n}\n"
  },
  {
    "path": "packages/core/src/bodl/create-bodl-service.spec.ts",
    "content": "import { CheckoutSelectors, CheckoutService, createCheckoutService } from '../checkout';\n\nimport BodlEmitterService from './bodl-emitter-service';\nimport BodlEventsWindow, { BodlEvents } from './bodl-window';\nimport createBodlService from './create-bodl-service';\nimport NoopBodlService from './noop-bodl-service';\n\ndeclare let window: BodlEventsWindow;\n\ndescribe('createBodl', () => {\n    let checkoutService: CheckoutService;\n    let subscriber: (subscriber: (state: CheckoutSelectors) => void) => void;\n\n    beforeEach(() => {\n        checkoutService = createCheckoutService();\n\n        subscriber = () => {\n            return checkoutService.getState();\n        };\n    });\n\n    describe('#createBodlService()', () => {\n        describe('when window.bodlEvents is undefined', () => {\n            it('returns instance of noop logger', () => {\n                expect(createBodlService(subscriber)).toBeInstanceOf(NoopBodlService);\n            });\n        });\n\n        describe('when window.bodlEvents is defined', () => {\n            beforeEach(() => {\n                window.bodlEvents = {} as BodlEvents;\n            });\n\n            it('returns instance of BodlService', () => {\n                expect(createBodlService(subscriber)).toBeInstanceOf(BodlEmitterService);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/bodl/create-bodl-service.ts",
    "content": "import { CheckoutSelectors } from '../checkout';\n\nimport BodlEmitterService from './bodl-emitter-service';\nimport BodlService from './bodl-service';\nimport { isBodlEnabled } from './is-bodl-enabled';\nimport NoopBodlService from './noop-bodl-service';\n\n/**\n * Creates an instance of `BodlService`.\n *\n * @remarks\n *\n * ```js\n * const bodlService = BodlService();\n * bodlService.checkoutBegin();\n *\n * ```\n *\n * @param subscribe - The callback function, what get a subscriber as a property, that subscribes to state changes.\n * @returns an instance of `BodlService`.\n */\nexport default function createBodlService(\n    subscribe: (subscriber: (state: CheckoutSelectors) => void) => void,\n): BodlService {\n    if (isBodlEnabled(window)) {\n        return new BodlEmitterService(subscribe, window.bodlEvents.checkout);\n    }\n\n    return new NoopBodlService();\n}\n"
  },
  {
    "path": "packages/core/src/bodl/index.ts",
    "content": "export { default as createBodlService } from './create-bodl-service';\nexport { default as BodlService } from './bodl-service';\n"
  },
  {
    "path": "packages/core/src/bodl/is-bodl-enabled.ts",
    "content": "import BodlEventsWindow from './bodl-window';\n\nexport function isBodlEnabled(window: Window): window is BodlEventsWindow {\n    return 'bodlEvents' in window;\n}\n"
  },
  {
    "path": "packages/core/src/bodl/noop-bodl-service.ts",
    "content": "import BodlService from './bodl-service';\n\nexport default class NoopBodlService implements BodlService {\n    checkoutBegin(): void {}\n\n    orderPurchased(): void {}\n\n    stepCompleted(): void {}\n\n    customerEmailEntry(): void {}\n\n    customerSuggestionInit(): void {}\n\n    customerSuggestionExecute(): void {}\n\n    customerPaymentMethodExecuted(): void {}\n\n    showShippingMethods(): void {}\n\n    selectedPaymentMethod(): void {}\n\n    clickPayButton(): void {}\n\n    paymentRejected(): void {}\n\n    paymentComplete(): void {}\n\n    exitCheckout(): void {}\n}\n"
  },
  {
    "path": "packages/core/src/bundles/checkout-button.ts",
    "content": "export { createTimeout } from '@bigcommerce/request-sender';\n\nexport { createCheckoutButtonInitializer } from '../checkout-buttons';\n"
  },
  {
    "path": "packages/core/src/bundles/checkout-sdk.ts",
    "content": "export { createTimeout } from '@bigcommerce/request-sender';\n\nexport { isExtraField } from '../form/map-extra-field-to-form-field';\nexport { createCheckoutService } from '../checkout';\nexport { createCheckoutButtonInitializer } from '../checkout-buttons';\nexport { embedCheckout } from '../embedded-checkout';\nexport { createEmbeddedCheckoutMessenger } from '../embedded-checkout/iframe-content';\nexport { createLanguageService } from '../locale';\nexport { createCurrencyService } from '../currency';\nexport {\n    createStepTracker,\n    createBraintreeAnalyticTracker,\n    createPayPalCommerceAnalyticTracker,\n} from '../analytics';\nexport { createStoredCardHostedFormService } from '../hosted-form';\nexport { createBodlService } from '../bodl';\nexport { ExtensionCommandType, ExtensionQueryType, ExtensionQueryMap } from '../extension';\n"
  },
  {
    "path": "packages/core/src/bundles/embedded-checkout.ts",
    "content": "export { embedCheckout } from '../embedded-checkout';\nexport { createEmbeddedCheckoutMessenger } from '../embedded-checkout/iframe-content';\n"
  },
  {
    "path": "packages/core/src/bundles/extension.ts",
    "content": "export { initializeExtensionService, ExtensionCommandType, ExtensionEventType } from '../extension';\n"
  },
  {
    "path": "packages/core/src/bundles/hosted-form.ts",
    "content": "export { initializeHostedInput, notifyInitializeError } from '../hosted-form/iframe-content';\n"
  },
  {
    "path": "packages/core/src/bundles/internal-mappers.ts",
    "content": "/**\n * Please note that these mappers are for internal use only. DO NOT USE. They\n * can be removed or changed at any time.\n */\nexport { mapToInternalAddress } from '../address';\nexport { mapToInternalCart } from '../cart';\nexport { mapToInternalCoupon, mapToInternalGiftCertificate } from '../coupon';\nexport { mapToInternalCustomer } from '../customer';\nexport { mapToInternalLineItem, mapToInternalLineItems } from '../cart';\nexport { mapToInternalOrder } from '../order';\nexport { mapToInternalQuote } from '../quote';\nexport { mapToInternalShippingOption, mapToInternalShippingOptions } from '../shipping';\nexport { CacheKeyResolver } from '../common/utility';\n"
  },
  {
    "path": "packages/core/src/cart/buy-now-cart-request-body.ts",
    "content": "import { CartSource } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\ninterface LineItem {\n    productId: number;\n    quantity: number;\n    variantId?: number;\n    optionSelections?: {\n        optionId: number;\n        optionValue: number | string;\n    };\n}\n\n/**\n * An object that contains the information required for creating 'Buy now' cart.\n */\nexport default interface BuyNowCartRequestBody {\n    source: CartSource.BuyNow;\n    lineItems: LineItem[];\n}\n"
  },
  {
    "path": "packages/core/src/cart/cart-comparator.spec.ts",
    "content": "import { getPhysicalItem } from '../order/line-items.mock';\n\nimport CartComparator from './cart-comparator';\nimport { getCart } from './carts.mock';\n\ndescribe('CartComparator', () => {\n    let comparator: CartComparator;\n\n    beforeEach(() => {\n        comparator = new CartComparator();\n    });\n\n    describe('#isEqual()', () => {\n        it('returns true if two carts are equal', () => {\n            const cartA = getCart();\n            const cartB = getCart();\n\n            expect(comparator.isEqual(cartA, cartB)).toBe(true);\n        });\n\n        it('returns true if two carts have different ignored properties', () => {\n            const cartA = getCart();\n            const cartB = {\n                ...cartA,\n                lineItems: {\n                    ...cartA.lineItems,\n                    physicalItems: cartA.lineItems.physicalItems.map((item) => ({\n                        ...item,\n                        discounts: [{ discountedAmount: 0, name: 'foobar' }],\n                        id: `${item.id}-123`,\n                    })),\n                },\n                updatedTime: `${cartA.updatedTime}-123`,\n            };\n\n            expect(comparator.isEqual(cartA, cartB)).toBe(true);\n        });\n\n        it('returns false if two carts have different id', () => {\n            const cartA = getCart();\n            const cartB = { ...cartA, id: `${cartA.id}-123` };\n\n            expect(comparator.isEqual(cartA, cartB)).toBe(false);\n        });\n\n        it('returns false if two carts have different currency settings', () => {\n            const cartA = getCart();\n            const cartB = { ...cartA, currency: { ...cartA.currency, code: 'JPY' } };\n\n            expect(comparator.isEqual(cartA, cartB)).toBe(false);\n        });\n\n        it('returns false if two carts have different total amount', () => {\n            const cartA = getCart();\n            const cartB = { ...cartA, cartAmount: cartA.cartAmount + 100 };\n\n            expect(comparator.isEqual(cartA, cartB)).toBe(false);\n        });\n\n        it('returns false if two carts have different line items', () => {\n            const cartA = getCart();\n            const cartB = {\n                ...cartA,\n                lineItems: {\n                    ...cartA.lineItems,\n                    physicalItems: cartA.lineItems.physicalItems.map((item) => ({\n                        ...item,\n                        productId: item.productId + 1,\n                        variantId: item.variantId + 1,\n                    })),\n                },\n            };\n\n            expect(comparator.isEqual(cartA, cartB)).toBe(false);\n        });\n\n        it('returns false if two carts have different line item amount', () => {\n            const cartA = getCart();\n            const cartB = {\n                ...cartA,\n                lineItems: {\n                    ...cartA.lineItems,\n                    physicalItems: cartA.lineItems.physicalItems.map((item) => ({\n                        ...item,\n                        extendedSalePrice: item.extendedSalePrice * 2,\n                        quantity: item.quantity * 2,\n                    })),\n                },\n            };\n\n            expect(comparator.isEqual(cartA, cartB)).toBe(false);\n        });\n\n        it('returns false if two carts have different gift certificate amount', () => {\n            const cartA = getCart();\n            const cartB = {\n                ...cartA,\n                lineItems: {\n                    ...cartA.lineItems,\n                    giftCertificates: cartA.lineItems.giftCertificates.map((item) => ({\n                        ...item,\n                        amount: item.amount * 2,\n                    })),\n                },\n            };\n\n            expect(comparator.isEqual(cartA, cartB)).toBe(false);\n        });\n\n        it('returns false if two carts have different gift certificate recipient', () => {\n            const cartA = getCart();\n            const cartB = {\n                ...cartA,\n                lineItems: {\n                    ...cartA.lineItems,\n                    giftCertificates: cartA.lineItems.giftCertificates.map((item) => ({\n                        ...item,\n                        recipient: {\n                            ...item.recipient,\n                            name: `${item.recipient.name}-123`,\n                        },\n                    })),\n                },\n            };\n\n            expect(comparator.isEqual(cartA, cartB)).toBe(false);\n        });\n\n        it('returns false if two carts have different gift wrapping amount', () => {\n            const cartA = getCart();\n            const cartB = {\n                ...cartA,\n                lineItems: {\n                    ...cartA.lineItems,\n                    physicalItems: cartA.lineItems.physicalItems.map((item) => ({\n                        ...item,\n                        giftWrapping: {\n                            amount: 100,\n                            name: 'Foobar',\n                            message: 'Foobar',\n                        },\n                    })),\n                },\n            };\n\n            expect(comparator.isEqual(cartA, cartB)).toBe(false);\n        });\n\n        it('returns true if two carts have same items but only differ in their order', () => {\n            const baseCart = getCart();\n            const baseItem = getPhysicalItem();\n            const cartA = {\n                ...baseCart,\n                lineItems: {\n                    ...baseCart.lineItems,\n                    physicalItems: [\n                        baseItem,\n                        {\n                            ...baseItem,\n                            id: '833b1d4d-a407-4c3d-97d6-3ce079467bc5',\n                            productId: 30,\n                            variantId: 49,\n                        },\n                    ],\n                },\n            };\n            // Same set of items as `cartA` but in a different order\n            const cartB = {\n                ...cartA,\n                lineItems: {\n                    ...cartA.lineItems,\n                    physicalItems: cartA.lineItems.physicalItems.slice().reverse(),\n                },\n            };\n\n            expect(comparator.isEqual(cartA, cartB)).toBe(true);\n        });\n\n        it('returns true if two carts have same items but only differ in their id', () => {\n            const baseCart = getCart();\n            const baseItem = getPhysicalItem();\n            const cartA = {\n                ...baseCart,\n                lineItems: {\n                    ...baseCart.lineItems,\n                    physicalItems: [\n                        baseItem,\n                        {\n                            ...baseItem,\n                            id: '833b1d4d-a407-4c3d-97d6-3ce079467bc5',\n                            productId: 30,\n                            variantId: 49,\n                        },\n                    ],\n                },\n            };\n            // Same set of items as `cartA` but have different product IDs\n            const cartB = {\n                ...cartA,\n                lineItems: {\n                    ...cartA.lineItems,\n                    physicalItems: [\n                        getPhysicalItem(),\n                        {\n                            ...getPhysicalItem(),\n                            id: '12a3c145-f1b3-4cca-8456-4c25daf9fa7a',\n                            productId: 30,\n                            variantId: 49,\n                        },\n                    ],\n                },\n            };\n\n            expect(comparator.isEqual(cartA, cartB)).toBe(true);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/cart/cart-comparator.ts",
    "content": "import { isEqual } from 'lodash';\n\nimport { PartialDeep } from '../common/types';\n\nimport Cart from './cart';\n\nexport default class CartComparator {\n    isEqual(cartA: Cart, cartB: Cart): boolean {\n        return isEqual(this._normalize(cartA), this._normalize(cartB));\n    }\n\n    private _normalize(cart: Cart): PartialDeep<Cart> {\n        return {\n            cartAmount: cart.cartAmount,\n            currency: cart.currency,\n            id: cart.id,\n            lineItems: {\n                digitalItems: cart.lineItems.digitalItems\n                    .slice()\n                    .sort((itemA, itemB) =>\n                        `${itemA.productId}${itemA.variantId}`.localeCompare(\n                            `${itemB.productId}${itemB.variantId}`,\n                        ),\n                    )\n                    .map((item) => ({\n                        extendedSalePrice: item.extendedSalePrice,\n                        productId: item.productId,\n                        quantity: item.quantity,\n                        variantId: item.variantId,\n                    })),\n                giftCertificates: cart.lineItems.giftCertificates\n                    .slice()\n                    .sort((itemA, itemB) => `${itemA.id}`.localeCompare(`${itemB.id}`))\n                    .map((item) => ({\n                        amount: item.amount,\n                        recipient: item.recipient,\n                    })),\n                physicalItems: cart.lineItems.physicalItems\n                    .slice()\n                    .sort((itemA, itemB) =>\n                        `${itemA.productId}${itemA.variantId}`.localeCompare(\n                            `${itemB.productId}${itemB.variantId}`,\n                        ),\n                    )\n                    .map((item) => ({\n                        extendedSalePrice: item.extendedSalePrice,\n                        productId: item.productId,\n                        quantity: item.quantity,\n                        variantId: item.variantId,\n                        giftWrapping: item.giftWrapping,\n                    })),\n            },\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/cart/cart-reducer.spec.ts",
    "content": "import { BillingAddressActionType } from '../billing';\nimport { CheckoutActionType } from '../checkout';\nimport { getCheckout } from '../checkout/checkouts.mock';\nimport { CouponActionType, GiftCertificateActionType } from '../coupon';\nimport { ConsignmentActionType } from '../shipping';\n\nimport cartReducer from './cart-reducer';\nimport CartState from './cart-state';\nimport { getCart, getCartState } from './carts.mock';\n\ndescribe('cartReducer()', () => {\n    let initialState: CartState;\n\n    beforeEach(() => {\n        initialState = getCartState();\n    });\n\n    it('returns new data when checkout is loaded', () => {\n        const action = {\n            type: CheckoutActionType.LoadCheckoutSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n\n    it('returns new data when a consignment is updated', () => {\n        const action = {\n            type: ConsignmentActionType.UpdateConsignmentSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n\n    it('returns new data when consignments are created', () => {\n        const action = {\n            type: ConsignmentActionType.CreateConsignmentsSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n\n    it('returns new data when billing address gets updated', () => {\n        const action = {\n            type: BillingAddressActionType.UpdateBillingAddressSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n\n    it('returns new data when a consignment is updated', () => {\n        const action = {\n            type: ConsignmentActionType.UpdateConsignmentSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n\n    it('returns new data when a consignment is created', () => {\n        const action = {\n            type: ConsignmentActionType.CreateConsignmentsSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n\n    it('returns new data when a consignment is deleted', () => {\n        const action = {\n            type: ConsignmentActionType.DeleteConsignmentSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n\n    it('returns new data when a shipping option is updated', () => {\n        const action = {\n            type: ConsignmentActionType.UpdateShippingOptionSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n\n    it('returns new data when shipping options are loaded', () => {\n        const action = {\n            type: ConsignmentActionType.LoadShippingOptionsSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n\n    it('returns new data when coupon gets applied', () => {\n        const action = {\n            type: CouponActionType.ApplyCouponSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n\n    it('returns new data when coupon gets removed', () => {\n        const action = {\n            type: CouponActionType.RemoveCouponSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n\n    it('returns new data when gift certificate gets applied', () => {\n        const action = {\n            type: GiftCertificateActionType.ApplyGiftCertificateSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n\n    it('returns new data when gift certificate gets removed', () => {\n        const action = {\n            type: GiftCertificateActionType.RemoveGiftCertificateSucceeded,\n            payload: getCheckout(),\n        };\n\n        expect(cartReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: getCart(),\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/cart/cart-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { BillingAddressAction, BillingAddressActionType } from '../billing';\nimport {\n    CheckoutAction,\n    CheckoutActionType,\n    CheckoutHydrateAction,\n    CheckoutHydrateActionType,\n} from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\nimport {\n    CouponAction,\n    CouponActionType,\n    GiftCertificateAction,\n    GiftCertificateActionType,\n} from '../coupon';\nimport { ConsignmentAction, ConsignmentActionType } from '../shipping';\n\nimport Cart from './cart';\nimport CartState, { CartErrorsState, CartStatusesState, DEFAULT_STATE } from './cart-state';\n\nexport default function cartReducer(state: CartState = DEFAULT_STATE, action: Action): CartState {\n    const reducer = combineReducers<CartState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: Cart | undefined,\n    action:\n        | BillingAddressAction\n        | CheckoutAction\n        | ConsignmentAction\n        | CouponAction\n        | GiftCertificateAction\n        | CheckoutHydrateAction,\n): Cart | undefined {\n    switch (action.type) {\n        case BillingAddressActionType.UpdateBillingAddressSucceeded:\n        case CheckoutActionType.LoadCheckoutSucceeded:\n        case ConsignmentActionType.CreateConsignmentsSucceeded:\n        case ConsignmentActionType.DeleteConsignmentSucceeded:\n        case ConsignmentActionType.UpdateConsignmentSucceeded:\n        case ConsignmentActionType.UpdateShippingOptionSucceeded:\n        case ConsignmentActionType.LoadShippingOptionsSucceeded:\n        case CouponActionType.ApplyCouponSucceeded:\n        case CouponActionType.RemoveCouponSucceeded:\n        case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n        case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n            return objectMerge(data, action.payload && action.payload.cart);\n\n        case CheckoutHydrateActionType.HydrateInitialState:\n            return objectMerge(data, action.payload?.checkout?.cart);\n\n        default:\n            return data;\n    }\n}\n\nfunction statusesReducer(\n    statuses: CartStatusesState = DEFAULT_STATE.statuses,\n    action: CheckoutAction,\n): CartStatusesState {\n    switch (action.type) {\n        case CheckoutActionType.LoadCheckoutRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case CheckoutActionType.LoadCheckoutFailed:\n        case CheckoutActionType.LoadCheckoutSucceeded:\n            return objectSet(statuses, 'isLoading', false);\n\n        default:\n            return statuses;\n    }\n}\n\nfunction errorsReducer(\n    errors: CartErrorsState = DEFAULT_STATE.errors,\n    action: CheckoutAction,\n): CartErrorsState {\n    switch (action.type) {\n        case CheckoutActionType.LoadCheckoutRequested:\n        case CheckoutActionType.LoadCheckoutSucceeded:\n            return objectSet(errors, 'loadError', undefined);\n\n        case CheckoutActionType.LoadCheckoutFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/cart/cart-request-sender.spec.ts",
    "content": "import {\n    createRequestSender,\n    createTimeout,\n    RequestSender,\n    Response,\n} from '@bigcommerce/request-sender';\n\nimport { CartSource } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getResponse } from '../common/http-request/responses.mock';\n\nimport BuyNowCartRequestBody from './buy-now-cart-request-body';\nimport Cart from './cart';\nimport CartRequestSender from './cart-request-sender';\nimport { getCart } from './carts.mock';\n\ndescribe('CartRequestSender', () => {\n    let cart: Cart;\n    let cartRequestSender: CartRequestSender;\n    let requestSender: RequestSender;\n    let response: Response<Cart>;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        cartRequestSender = new CartRequestSender(requestSender);\n    });\n\n    describe('#createBuyNowCart', () => {\n        const buyNowCartRequestBody: BuyNowCartRequestBody = {\n            source: CartSource.BuyNow,\n            lineItems: [\n                {\n                    productId: 1,\n                    quantity: 2,\n                    optionSelections: {\n                        optionId: 11,\n                        optionValue: 11,\n                    },\n                },\n            ],\n        };\n\n        beforeEach(() => {\n            cart = { ...getCart(), source: CartSource.BuyNow };\n            response = getResponse(cart);\n\n            jest.spyOn(requestSender, 'post').mockResolvedValue(response);\n        });\n\n        it('creates buy now cart', async () => {\n            await cartRequestSender.createBuyNowCart(buyNowCartRequestBody);\n\n            expect(requestSender.post).toHaveBeenCalledWith('/api/storefront/carts', {\n                body: buyNowCartRequestBody,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('creates buy now cart with timeout', async () => {\n            const options = { timeout: createTimeout() };\n\n            await cartRequestSender.createBuyNowCart(buyNowCartRequestBody, options);\n\n            expect(requestSender.post).toHaveBeenCalledWith('/api/storefront/carts', {\n                ...options,\n                body: buyNowCartRequestBody,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/cart/cart-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { BuyNowCartRequestBody, Cart } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nexport default class CartRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    createBuyNowCart(\n        body: BuyNowCartRequestBody,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<Cart>> {\n        const url = '/api/storefront/carts';\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender.post(url, { body, headers, timeout });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/cart/cart-selector.spec.ts",
    "content": "import { CheckoutStoreState } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\n\nimport CartSelector, { CartSelectorFactory, createCartSelectorFactory } from './cart-selector';\n\ndescribe('CartSelector', () => {\n    let cartSelector: CartSelector;\n    let createCartSelector: CartSelectorFactory;\n    let state: CheckoutStoreState;\n\n    beforeEach(() => {\n        createCartSelector = createCartSelectorFactory();\n        state = getCheckoutStoreState();\n    });\n\n    describe('#getCart()', () => {\n        it('returns the current cart', () => {\n            cartSelector = createCartSelector(state.cart);\n\n            expect(cartSelector.getCart()).toEqual(state.cart.data);\n        });\n    });\n\n    describe('#getLoadError()', () => {\n        it('returns error if unable to load', () => {\n            const loadError = new Error();\n\n            cartSelector = createCartSelector({\n                ...state.cart,\n                errors: { loadError },\n            });\n\n            expect(cartSelector.getLoadError()).toEqual(loadError);\n        });\n\n        it('does not returns error if able to load', () => {\n            cartSelector = createCartSelector(state.cart);\n\n            expect(cartSelector.getLoadError()).toBeUndefined();\n        });\n    });\n\n    describe('#isLoading()', () => {\n        it('returns true if loading cart', () => {\n            cartSelector = createCartSelector({\n                ...state.cart,\n                statuses: { isLoading: true },\n            });\n\n            expect(cartSelector.isLoading()).toBe(true);\n        });\n\n        it('returns false if not loading cart', () => {\n            cartSelector = createCartSelector(state.cart);\n\n            expect(cartSelector.isLoading()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/cart/cart-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport Cart from './cart';\nimport CartState, { DEFAULT_STATE } from './cart-state';\n\nexport default interface CartSelector {\n    getCart(): Cart | undefined;\n    getCartOrThrow(): Cart;\n    getLoadError(): Error | undefined;\n    isLoading(): boolean;\n    getLocale(): string | undefined;\n}\n\nexport type CartSelectorFactory = (state: CartState) => CartSelector;\n\nexport function createCartSelectorFactory() {\n    const getCart = createSelector(\n        (state: CartState) => state.data,\n        (cart) => () => cart,\n    );\n\n    const getCartOrThrow = createSelector(getCart, (getCart) => () => {\n        return guard(getCart(), () => new MissingDataError(MissingDataErrorType.MissingCart));\n    });\n\n    const getLoadError = createSelector(\n        (state: CartState) => state.errors.loadError,\n        (error) => () => error,\n    );\n\n    const isLoading = createSelector(\n        (state: CartState) => !!state.statuses.isLoading,\n        (status) => () => status,\n    );\n\n    const getLocale = createSelector(\n        (state: CartState) => state.data?.locale,\n        (data) => () => data,\n    );\n\n    return memoizeOne((state: CartState = DEFAULT_STATE): CartSelector => {\n        return {\n            getCart: getCart(state),\n            getCartOrThrow: getCartOrThrow(state),\n            getLoadError: getLoadError(state),\n            isLoading: isLoading(state),\n            getLocale: getLocale(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/cart/cart-state.ts",
    "content": "import Cart from './cart';\n\nexport default interface CartState {\n    data?: Cart;\n    errors: CartErrorsState;\n    statuses: CartStatusesState;\n}\n\nexport interface CartErrorsState {\n    loadError?: Error;\n}\n\nexport interface CartStatusesState {\n    isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: CartState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/cart/cart.ts",
    "content": "import { CartSource } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Coupon } from '../coupon';\nimport { Currency } from '../currency';\nimport { Discount } from '../discount';\n\nimport LineItemMap from './line-item-map';\n\nexport default interface Cart {\n    id: string;\n    customerId: number;\n    companyId: number | null;\n    currency: Currency;\n    email: string;\n    isTaxIncluded: boolean;\n    baseAmount: number;\n\n    /**\n     * This is the total amount of discount applied on line_items.\n     */\n    discountAmount: number;\n\n    cartAmount: number;\n\n    /**\n     * This is an array of all applied coupons.\n     */\n    coupons: Coupon[];\n\n    /**\n     * This is the total amount of discount applied on cart including coupons and line_items discounts.\n     */\n    discounts: Discount[];\n\n    lineItems: LineItemMap;\n    createdTime: string;\n    updatedTime: string;\n    source?: CartSource;\n    locale: string;\n}\n"
  },
  {
    "path": "packages/core/src/cart/carts.mock.ts",
    "content": "import { getCurrency } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { Cart, CartState } from '../cart';\nimport { getCoupon, getShippingCoupon } from '../coupon/coupons.mock';\nimport { getDiscount } from '../discount/discounts.mock';\n\nimport { getDigitalItem, getGiftCertificateItem, getPhysicalItem } from './line-items.mock';\n\nexport function getCart(): Cart {\n    return {\n        id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n        customerId: 4,\n        companyId: null,\n        currency: getCurrency(),\n        email: 'foo@bar.com',\n        isTaxIncluded: false,\n        baseAmount: 200,\n        discountAmount: 10,\n        cartAmount: 190,\n        coupons: [getCoupon(), getShippingCoupon()],\n        discounts: [getDiscount()],\n        lineItems: {\n            physicalItems: [getPhysicalItem()],\n            digitalItems: [getDigitalItem()],\n            giftCertificates: [getGiftCertificateItem()],\n            customItems: [],\n        },\n        createdTime: '2018-03-06T04:41:49+00:00',\n        updatedTime: '2018-03-07T03:44:51+00:00',\n        locale: 'en',\n    };\n}\n\nexport function getCartState(): CartState {\n    return {\n        data: getCart(),\n        errors: {},\n        statuses: {},\n    };\n}\n"
  },
  {
    "path": "packages/core/src/cart/errors/buy-now-cart-creation-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\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"
  },
  {
    "path": "packages/core/src/cart/errors/cart-changed-error.spec.ts",
    "content": "import { getCheckout } from '../../checkout/checkouts.mock';\n\nimport CartChangedError from './cart-changed-error';\n\ndescribe('CartChangedError', () => {\n    it('returns error name', () => {\n        const error = new CartChangedError(getCheckout(), {\n            ...getCheckout(),\n            outstandingBalance: 0,\n        });\n\n        expect(error.name).toBe('CartChangedError');\n        expect(error.data.previous).toEqual(getCheckout());\n        expect(error.data.updated).toEqual({\n            ...getCheckout(),\n            outstandingBalance: 0,\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/cart/errors/cart-changed-error.ts",
    "content": "import { ComparableCheckout } from '../../checkout';\nimport { StandardError } from '../../common/error/errors';\n\nexport default class CartChangedError extends StandardError {\n    /**\n     * @alpha\n     * Please note that this option is currently in an early stage of\n     * development. Therefore the API is unstable and not ready for public\n     * consumption.\n     */\n    data: { previous: ComparableCheckout; updated: ComparableCheckout };\n\n    constructor(previous: ComparableCheckout, updated: ComparableCheckout) {\n        super(\n            'An update to your shopping cart has been detected and your available shipping costs have been updated.',\n        );\n\n        this.name = 'CartChangedError';\n        this.type = 'cart_changed';\n        this.data = {\n            previous,\n            updated,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/cart/errors/cart-consistency-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * This error is thrown when the server detects inconsistency in cart data since it is last requested,\n * for example, product prices or eligible discounts have changed.\n */\nexport default class CartConsistencyError extends StandardError {\n    constructor(message?: string) {\n        super(\n            message ||\n                'Your checkout could not be processed because some details have changed. Please review your order and try again.',\n        );\n\n        this.name = 'CartConsistencyError';\n        this.type = 'cart_consistency';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/cart/errors/cart-stock-positions-changed-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * This error is thrown when at least one cart item changed stock position (e.g. moved to a different warehouse)\n * and the server returns type `cart_stock_positions_changed`.\n */\nexport default class CartStockPositionsChangedError extends StandardError {\n    changedItemIds: string[];\n\n    constructor(changedItemIds: string[], message?: string) {\n        super(\n            message ||\n                'At least one item changed stock position. Please review your cart and try again.',\n        );\n\n        this.name = 'CartStockPositionsChangedError';\n        this.type = 'cart_stock_positions_changed';\n        this.changedItemIds = changedItemIds;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/cart/errors/empty-cart-error.spec.ts",
    "content": "import EmptyCartError from './empty-cart-error';\n\ndescribe('EmptyCartError', () => {\n    it('returns error name and type', () => {\n        const error = new EmptyCartError();\n\n        expect(error.name).toBe('EmptyCartError');\n        expect(error.type).toBe('empty_cart');\n    });\n\n    it('returns default message when no custom message is provided', () => {\n        const error = new EmptyCartError();\n\n        expect(error.message).toBe(\n            'Your checkout could not be processed because your cart is empty. Please add items to your cart and try again.',\n        );\n    });\n\n    it('returns custom message when provided', () => {\n        const customMessage = 'Custom empty cart message';\n        const error = new EmptyCartError(customMessage);\n\n        expect(error.message).toBe(customMessage);\n        expect(error.name).toBe('EmptyCartError');\n        expect(error.type).toBe('empty_cart');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/cart/errors/empty-cart-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * This error is thrown when cart is removed or empty.\n */\nexport default class EmptyCartError extends StandardError {\n    constructor(message?: string) {\n        super(\n            message ||\n                'Your checkout could not be processed because your cart is empty. Please add items to your cart and try again.',\n        );\n\n        this.name = 'EmptyCartError';\n        this.type = 'empty_cart';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/cart/errors/index.ts",
    "content": "export { default as BuyNowCartCreationError } from './buy-now-cart-creation-error';\nexport { default as CartChangedError } from './cart-changed-error';\nexport { default as CartConsistencyError } from './cart-consistency-error';\nexport { default as CartStockPositionsChangedError } from './cart-stock-positions-changed-error';\nexport { default as EmptyCartError } from './empty-cart-error';\n"
  },
  {
    "path": "packages/core/src/cart/index.ts",
    "content": "export { default as BuyNowCartRequestBody } from './buy-now-cart-request-body';\nexport { default as Cart } from './cart';\nexport { default as InternalCart } from './internal-cart';\nexport { default as InternalLineItem } from './internal-line-item';\nexport {\n    DigitalItem,\n    GiftCertificateItem,\n    LineItem,\n    LineItemCategory,\n    PhysicalItem,\n    StockPosition,\n} from './line-item';\nexport { default as LineItemMap } from './line-item-map';\n\nexport { default as CartComparator } from './cart-comparator';\nexport { default as CartRequestSender } from './cart-request-sender';\nexport { default as cartReducer } from './cart-reducer';\nexport {\n    default as CartSelector,\n    CartSelectorFactory,\n    createCartSelectorFactory,\n} from './cart-selector';\nexport { default as CartState } from './cart-state';\n\nexport { default as map } from './map-to-internal-cart';\nexport { default as mapGiftCertificateToInternalLineItem } from './map-gift-certificate-to-internal-line-item';\nexport { default as mapToInternalCart } from './map-to-internal-cart';\nexport { default as mapToInternalLineItem } from './map-to-internal-line-item';\nexport { default as mapToInternalLineItems } from './map-to-internal-line-items';\n"
  },
  {
    "path": "packages/core/src/cart/internal-cart.ts",
    "content": "import { InternalCoupon, InternalGiftCertificate } from '../coupon';\nimport { DiscountNotification } from '../discount';\n\nimport InternalLineItem from './internal-line-item';\n\nexport default interface InternalCart {\n    id: string;\n    items: InternalLineItem[];\n    currency: string;\n    subtotal: {\n        amount: number;\n        integerAmount: number;\n    };\n    coupon: {\n        discountedAmount: number;\n        coupons: InternalCoupon[];\n    };\n    discount: {\n        amount: number;\n        integerAmount: number;\n    };\n    discountNotifications: DiscountNotification[];\n    giftCertificate: {\n        totalDiscountedAmount: number;\n        appliedGiftCertificates: { [code: string]: InternalGiftCertificate };\n    };\n    shipping: {\n        amount: number;\n        integerAmount: number;\n        amountBeforeDiscount: number;\n        integerAmountBeforeDiscount: number;\n        required: boolean;\n    };\n    storeCredit: {\n        amount: number;\n    };\n    taxSubtotal: {\n        amount: number;\n        integerAmount: number;\n    };\n    taxes: Array<{ name: string; amount: number }>;\n    taxTotal: {\n        amount: number;\n        integerAmount: number;\n    };\n    handling: {\n        amount: number;\n        integerAmount: number;\n    };\n    grandTotal: {\n        amount: number;\n        integerAmount: number;\n    };\n}\n"
  },
  {
    "path": "packages/core/src/cart/internal-carts.mock.ts",
    "content": "import InternalCart from './internal-cart';\n\nexport function getCart(): InternalCart {\n    return {\n        id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n        items: [\n            {\n                id: '666',\n                type: 'ItemPhysicalEntity',\n                name: 'Canvas Laundry Cart',\n                downloadsPageUrl: undefined,\n                imageUrl: '/images/canvas-laundry-cart.jpg',\n                quantity: 1,\n                brand: 'OFS',\n                sku: 'CLC',\n                amount: 200,\n                discount: 10,\n                amountAfterDiscount: 190,\n                attributes: [\n                    {\n                        name: 'n',\n                        value: 'v',\n                    },\n                ],\n                integerAmount: 20000,\n                integerDiscount: 1000,\n                integerAmountAfterDiscount: 19000,\n                integerUnitPrice: 20000,\n                integerUnitPriceAfterDiscount: 19000,\n                variantId: 71,\n                addedByPromotion: false,\n                productId: 103,\n                categoryNames: ['Cat 1'],\n            },\n            {\n                id: '667',\n                type: 'ItemDigitalEntity',\n                name: 'Digital Book',\n                downloadsPageUrl: 'url.php',\n                imageUrl: '/images/digital-book.jpg',\n                quantity: 1,\n                brand: 'Digitalia',\n                sku: 'CLX',\n                amount: 200,\n                discount: 0,\n                amountAfterDiscount: 200,\n                attributes: [\n                    {\n                        name: 'm',\n                        value: 'l',\n                    },\n                ],\n                integerAmount: 20000,\n                integerDiscount: 0,\n                integerAmountAfterDiscount: 20000,\n                integerUnitPrice: 20000,\n                integerUnitPriceAfterDiscount: 20000,\n                variantId: 72,\n                addedByPromotion: false,\n                productId: 104,\n                categoryNames: ['Ebooks', 'Audio Books'],\n            },\n            {\n                id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                name: '$100 Gift Certificate',\n                type: 'ItemGiftCertificateEntity',\n                sender: {\n                    name: 'pablo',\n                    email: 'pa@blo.com',\n                },\n                recipient: {\n                    name: 'luis',\n                    email: 'lu@is.com',\n                },\n                imageUrl: '',\n                quantity: 1,\n                amount: 100,\n                discount: 0,\n                amountAfterDiscount: 100,\n                attributes: [],\n                integerAmount: 10000,\n                integerDiscount: 0,\n                integerAmountAfterDiscount: 10000,\n                integerUnitPrice: 10000,\n                integerUnitPriceAfterDiscount: 10000,\n                variantId: null,\n            },\n        ],\n        currency: 'USD',\n        subtotal: {\n            amount: 190,\n            integerAmount: 19000,\n        },\n        coupon: {\n            discountedAmount: 10,\n            coupons: [\n                {\n                    code: 'savebig2015',\n                    discount: '20% off each item',\n                    discountType: 1,\n                },\n                {\n                    code: '279F507D817E3E7',\n                    discount: '$5.00 off the shipping total',\n                    discountType: 3,\n                },\n            ],\n        },\n        discount: {\n            amount: 10,\n            integerAmount: 1000,\n        },\n        discountNotifications: [\n            {\n                placeholders: [],\n                discountType: null,\n                message: '',\n                messageHtml: 'foo',\n            },\n        ],\n        giftCertificate: {\n            totalDiscountedAmount: 14,\n            appliedGiftCertificates: {\n                gc: {\n                    code: 'gc',\n                    discountedAmount: 7,\n                    remainingBalance: 3,\n                    giftCertificate: {\n                        code: 'gc',\n                        balance: 10,\n                        purchaseDate: 'ddmmyy',\n                    },\n                },\n                gc2: {\n                    code: 'gc2',\n                    discountedAmount: 7,\n                    remainingBalance: 3,\n                    giftCertificate: {\n                        code: 'gc2',\n                        balance: 10,\n                        purchaseDate: 'ddmmyy',\n                    },\n                },\n            },\n        },\n        shipping: {\n            amount: 15,\n            integerAmount: 1500,\n            amountBeforeDiscount: 20,\n            integerAmountBeforeDiscount: 2000,\n            required: true,\n        },\n        storeCredit: {\n            amount: 0,\n        },\n        taxSubtotal: {\n            amount: 3,\n            integerAmount: 300,\n        },\n        taxes: [\n            {\n                name: 'Tax',\n                amount: 3,\n            },\n        ],\n        taxTotal: {\n            amount: 3,\n            integerAmount: 300,\n        },\n        handling: {\n            amount: 8,\n            integerAmount: 800,\n        },\n        grandTotal: {\n            amount: 190,\n            integerAmount: 19000,\n        },\n    };\n}\n\nexport function getCartResponseBody() {\n    return {\n        data: {\n            cart: getCart(),\n        },\n        meta: {},\n    };\n}\n\nexport function getCartState() {\n    return {\n        data: getCart(),\n        errors: {},\n        meta: {},\n        statuses: {},\n    };\n}\n"
  },
  {
    "path": "packages/core/src/cart/internal-line-item.ts",
    "content": "export default interface InternalLineItem {\n    amount: number;\n    amountAfterDiscount: number;\n    attributes: Array<{ name: string; value: string }>;\n    discount: number;\n    integerAmount: number;\n    downloadsPageUrl?: string;\n    integerAmountAfterDiscount: number;\n    integerDiscount: number;\n    integerUnitPrice: number;\n    integerUnitPriceAfterDiscount: number;\n    id: string | number;\n    imageUrl: string;\n    name?: string;\n    quantity: number;\n    brand?: string;\n    sku?: string;\n    categoryNames?: string[];\n    type: string;\n    variantId: number | null;\n    productId?: number;\n    addedByPromotion?: boolean;\n    sender?: {\n        name: string;\n        email: string;\n    };\n    recipient?: {\n        name: string;\n        email: string;\n    };\n}\n"
  },
  {
    "path": "packages/core/src/cart/line-item-map.ts",
    "content": "import { CustomItem, DigitalItem, GiftCertificateItem, PhysicalItem } from './line-item';\n\nexport default interface LineItemMap {\n    physicalItems: PhysicalItem[];\n    digitalItems: DigitalItem[];\n    customItems?: CustomItem[];\n    giftCertificates: GiftCertificateItem[];\n}\n"
  },
  {
    "path": "packages/core/src/cart/line-item.ts",
    "content": "export interface PhysicalItem extends LineItem {\n    isShippingRequired: boolean;\n    giftWrapping?: {\n        name: string;\n        message: string;\n        amount: number;\n    };\n}\n\nexport interface DigitalItem extends LineItem {\n    downloadFileUrls: string[];\n    downloadPageUrl: string;\n    downloadSize: string;\n}\n\nexport interface CustomItem {\n    id: string;\n    listPrice: number;\n    extendedListPrice: number;\n    name: string;\n    quantity: number;\n    sku: string;\n}\n\nexport interface GiftCertificateItem {\n    id: string | number;\n    name: string;\n    theme: string;\n    amount: number;\n    taxable: boolean;\n    sender: {\n        name: string;\n        email: string;\n    };\n    recipient: {\n        name: string;\n        email: string;\n    };\n    message: string;\n}\n\nexport interface LineItem {\n    id: string | number;\n    variantId: number;\n    productId: number;\n    sku: string;\n    name: string;\n    url: string;\n    quantity: number;\n    brand: string;\n    categoryNames?: string[];\n    categories?: LineItemCategory[][];\n    isTaxable: boolean;\n    imageUrl: string;\n    discounts: Array<{ name: string; discountedAmount: number }>;\n    discountAmount: number;\n    couponAmount: number;\n    listPrice: number;\n    salePrice: number;\n    retailPrice: number;\n    comparisonPrice: number;\n    extendedListPrice: number;\n    extendedSalePrice: number;\n    extendedComparisonPrice: number;\n    socialMedia?: LineItemSocialData[];\n    options?: LineItemOption[];\n    addedByPromotion: boolean;\n    parentId?: string | null;\n    quantityBackordered?: number;\n    backorderMessage?: string | null;\n    stockPosition?: StockPosition;\n}\n\nexport interface LineItemOption {\n    name: string;\n    nameId: number;\n    value: string;\n    valueId: number | null;\n}\n\nexport interface LineItemSocialData {\n    channel: string;\n    code: string;\n    text: string;\n    link: string;\n}\n\nexport interface LineItemCategory {\n    name: string;\n}\n\nexport interface StockPosition {\n    quantityOnHand: number;\n    quantityBackordered: number;\n    quantityOutOfStock: number;\n    backorderMessage: string | null;\n}\n"
  },
  {
    "path": "packages/core/src/cart/line-items.mock.ts",
    "content": "import { DigitalItem, GiftCertificateItem, PhysicalItem, StockPosition } from '../cart';\n\nexport function getStockPosition(): StockPosition {\n    return {\n        quantityOnHand: 10,\n        quantityBackordered: 0,\n        quantityOutOfStock: 0,\n        backorderMessage: null,\n    };\n}\n\nexport function getPhysicalItem(): PhysicalItem {\n    return {\n        id: '666',\n        variantId: 71,\n        productId: 103,\n        sku: 'CLC',\n        name: 'Canvas Laundry Cart',\n        url: '/canvas-laundry-cart/',\n        quantity: 1,\n        brand: 'OFS',\n        isTaxable: true,\n        imageUrl: '/images/canvas-laundry-cart.jpg',\n        discounts: [],\n        discountAmount: 10,\n        couponAmount: 5,\n        listPrice: 200,\n        salePrice: 190,\n        retailPrice: 210,\n        comparisonPrice: 200,\n        extendedListPrice: 200,\n        extendedSalePrice: 190,\n        extendedComparisonPrice: 200,\n        isShippingRequired: true,\n        addedByPromotion: false,\n        options: [\n            {\n                name: 'n',\n                nameId: 1,\n                value: 'v',\n                valueId: 3,\n            },\n        ],\n        categories: [[{ name: 'Cat 1' }], [{ name: 'Furniture' }, { name: 'Bed' }]],\n        categoryNames: ['Cat 1'],\n        stockPosition: getStockPosition(),\n    };\n}\n\nexport function getDigitalItem(): DigitalItem {\n    return {\n        id: '667',\n        variantId: 72,\n        productId: 104,\n        sku: 'CLX',\n        name: 'Digital Book',\n        url: '/digital-book/',\n        quantity: 1,\n        brand: 'Digitalia',\n        isTaxable: true,\n        imageUrl: '/images/digital-book.jpg',\n        discounts: [],\n        discountAmount: 0,\n        couponAmount: 5,\n        listPrice: 200,\n        salePrice: 200,\n        retailPrice: 210,\n        comparisonPrice: 200,\n        downloadPageUrl: 'url.php',\n        downloadFileUrls: [],\n        downloadSize: '',\n        extendedListPrice: 200,\n        extendedSalePrice: 200,\n        extendedComparisonPrice: 200,\n        addedByPromotion: false,\n        options: [\n            {\n                name: 'm',\n                nameId: 1,\n                value: 'l',\n                valueId: 3,\n            },\n        ],\n        categories: [[{ name: 'Cat 1' }], [{ name: 'Cat 2' }], [{ name: 'Cat 3' }]],\n        categoryNames: ['Ebooks', 'Audio Books'],\n        stockPosition: getStockPosition(),\n    };\n}\n\nexport function getGiftCertificateItem(): GiftCertificateItem {\n    return {\n        id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n        name: '$100 Gift Certificate',\n        message: 'message',\n        amount: 100,\n        taxable: false,\n        theme: 'General',\n        sender: {\n            name: 'pablo',\n            email: 'pa@blo.com',\n        },\n        recipient: {\n            name: 'luis',\n            email: 'lu@is.com',\n        },\n    };\n}\n"
  },
  {
    "path": "packages/core/src/cart/map-gift-certificate-to-internal-line-item.ts",
    "content": "import { AmountTransformer } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport InternalLineItem from './internal-line-item';\nimport { GiftCertificateItem } from './line-item';\n\nexport default function mapGiftCertificateToInternalLineItem(\n    item: GiftCertificateItem,\n    decimalPlaces: number,\n): InternalLineItem {\n    const amountTransformer = new AmountTransformer(decimalPlaces);\n\n    return {\n        id: item.id,\n        imageUrl: '',\n        name: item.name,\n        amount: item.amount,\n        amountAfterDiscount: item.amount,\n        discount: 0,\n        integerAmount: amountTransformer.toInteger(item.amount),\n        integerAmountAfterDiscount: amountTransformer.toInteger(item.amount),\n        integerUnitPrice: amountTransformer.toInteger(item.amount),\n        integerUnitPriceAfterDiscount: amountTransformer.toInteger(item.amount),\n        integerDiscount: 0,\n        quantity: 1,\n        sender: item.sender,\n        recipient: item.recipient,\n        type: 'ItemGiftCertificateEntity',\n        attributes: [],\n        variantId: null,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/cart/map-to-internal-cart.spec.ts",
    "content": "import { getCart as getInternalCart } from '../cart/internal-carts.mock';\nimport { getCheckoutWithGiftCertificates } from '../checkout/checkouts.mock';\n\nimport mapToInternalCart from './map-to-internal-cart';\n\ndescribe('mapToInternalLineItems()', () => {\n    it('maps to internal line items', () => {\n        expect(mapToInternalCart(getCheckoutWithGiftCertificates())).toEqual(getInternalCart());\n    });\n});\n"
  },
  {
    "path": "packages/core/src/cart/map-to-internal-cart.ts",
    "content": "import { keyBy, reduce, some } from 'lodash';\n\nimport { AmountTransformer } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../checkout';\nimport { mapToInternalCoupon, mapToInternalGiftCertificate } from '../coupon';\nimport { mapToDiscountNotifications } from '../promotion';\n\nimport InternalCart from './internal-cart';\nimport mapToInternalLineItems from './map-to-internal-line-items';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalCart(checkout: Checkout): InternalCart {\n    const decimalPlaces = checkout.cart.currency.decimalPlaces;\n    const amountTransformer = new AmountTransformer(decimalPlaces);\n\n    return {\n        id: checkout.cart.id,\n        items: mapToInternalLineItems(checkout.cart.lineItems, decimalPlaces),\n        currency: checkout.cart.currency.code,\n        coupon: {\n            discountedAmount: reduce(\n                checkout.cart.coupons,\n                (sum, coupon) => {\n                    return sum + coupon.discountedAmount;\n                },\n                0,\n            ),\n            coupons: checkout.cart.coupons.map(mapToInternalCoupon),\n        },\n        discount: {\n            amount: checkout.cart.discountAmount,\n            integerAmount: amountTransformer.toInteger(checkout.cart.discountAmount),\n        },\n        discountNotifications: mapToDiscountNotifications(checkout.promotions),\n        giftCertificate: {\n            totalDiscountedAmount: reduce(\n                checkout.giftCertificates,\n                (sum, certificate) => {\n                    return sum + certificate.used;\n                },\n                0,\n            ),\n            appliedGiftCertificates: keyBy(\n                checkout.giftCertificates.map(mapToInternalGiftCertificate),\n                'code',\n            ),\n        },\n        shipping: {\n            amount: checkout.shippingCostTotal,\n            integerAmount: amountTransformer.toInteger(checkout.shippingCostTotal),\n            amountBeforeDiscount: checkout.shippingCostBeforeDiscount,\n            integerAmountBeforeDiscount: amountTransformer.toInteger(\n                checkout.shippingCostBeforeDiscount,\n            ),\n            required: some(\n                checkout.cart.lineItems.physicalItems,\n                (lineItem) => lineItem.isShippingRequired,\n            ),\n        },\n        subtotal: {\n            amount: checkout.subtotal,\n            integerAmount: amountTransformer.toInteger(checkout.subtotal),\n        },\n        storeCredit: {\n            amount: checkout.customer ? checkout.customer.storeCredit : 0,\n        },\n        taxSubtotal: {\n            amount: checkout.taxTotal,\n            integerAmount: amountTransformer.toInteger(checkout.taxTotal),\n        },\n        taxes: checkout.taxes,\n        taxTotal: {\n            amount: checkout.taxTotal,\n            integerAmount: amountTransformer.toInteger(checkout.taxTotal),\n        },\n        handling: {\n            amount: checkout.handlingCostTotal,\n            integerAmount: amountTransformer.toInteger(checkout.handlingCostTotal),\n        },\n        grandTotal: {\n            amount: checkout.grandTotal,\n            integerAmount: amountTransformer.toInteger(checkout.grandTotal),\n        },\n    };\n}\n"
  },
  {
    "path": "packages/core/src/cart/map-to-internal-line-item.ts",
    "content": "import { AmountTransformer } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport InternalLineItem from './internal-line-item';\nimport { DigitalItem, LineItem } from './line-item';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalLineItem(\n    item: LineItem,\n    type: string,\n    decimalPlaces: number,\n    idKey: keyof LineItem = 'id',\n): InternalLineItem {\n    const amountTransformer = new AmountTransformer(decimalPlaces);\n\n    return {\n        id: item[idKey] as string | number,\n        imageUrl: item.imageUrl,\n        amount: item.extendedListPrice,\n        amountAfterDiscount: item.extendedSalePrice,\n        discount: item.discountAmount,\n        integerAmount: amountTransformer.toInteger(item.extendedListPrice),\n        integerAmountAfterDiscount: amountTransformer.toInteger(item.extendedSalePrice),\n        integerDiscount: amountTransformer.toInteger(item.discountAmount),\n        integerUnitPrice: amountTransformer.toInteger(item.listPrice),\n        integerUnitPriceAfterDiscount: amountTransformer.toInteger(item.salePrice),\n        downloadsPageUrl: (item as DigitalItem).downloadPageUrl,\n        name: item.name,\n        quantity: item.quantity,\n        brand: item.brand,\n        sku: item.sku,\n        categoryNames: item.categoryNames,\n        variantId: item.variantId,\n        productId: item.productId,\n        attributes: (item.options || []).map((option) => ({\n            name: option.name,\n            value: option.value,\n        })),\n        addedByPromotion: item.addedByPromotion,\n        type,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/cart/map-to-internal-line-items.spec.ts",
    "content": "import { getCart } from '../cart/carts.mock';\nimport { getCart as getInternalCart } from '../cart/internal-carts.mock';\n\nimport mapToInternalLineItems from './map-to-internal-line-items';\n\ndescribe('mapToInternalLineItems()', () => {\n    it('maps to internal line items', () => {\n        expect(mapToInternalLineItems(getCart().lineItems, 2)).toEqual(getInternalCart().items);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/cart/map-to-internal-line-items.ts",
    "content": "import InternalLineItem from './internal-line-item';\nimport { LineItem } from './line-item';\nimport LineItemMap from './line-item-map';\nimport mapGiftCertificateToInternalLineItem from './map-gift-certificate-to-internal-line-item';\nimport mapToInternalLineItem from './map-to-internal-line-item';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalLineItems(\n    itemMap: LineItemMap,\n    decimalPlaces: number,\n    idKey: keyof LineItem = 'id',\n): InternalLineItem[] {\n    return (Object.keys(itemMap) as Array<keyof LineItemMap>).reduce<InternalLineItem[]>(\n        (result, key) => [\n            ...result,\n            ...(itemMap[key] as LineItem[]).map((item: any) => {\n                if (key === 'giftCertificates') {\n                    return mapGiftCertificateToInternalLineItem(item, decimalPlaces);\n                }\n\n                return mapToInternalLineItem(\n                    item,\n                    mapToInternalLineItemType(key),\n                    decimalPlaces,\n                    idKey,\n                );\n            }),\n        ],\n        [],\n    );\n}\n\nfunction mapToInternalLineItemType(type: string): string {\n    switch (type) {\n        case 'physicalItems':\n            return 'ItemPhysicalEntity';\n\n        case 'digitalItems':\n            return 'ItemDigitalEntity';\n\n        case 'giftCertificates':\n            return 'ItemGiftCertificateEntity';\n\n        default:\n            return '';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-action-creator.spec.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { concat, from, of, throwError } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { MissingDataError, StandardError } from '../common/error/errors';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\nimport { ConfigActionCreator, ConfigActionType, ConfigRequestSender } from '../config';\nimport { getConfig } from '../config/configs.mock';\nimport { FormFieldsActionCreator, FormFieldsActionType, FormFieldsRequestSender } from '../form';\nimport { getFormFields } from '../form/form.mock';\n\nimport CheckoutActionCreator from './checkout-action-creator';\nimport { CheckoutActionType } from './checkout-actions';\nimport CheckoutRequestSender from './checkout-request-sender';\nimport CheckoutStore from './checkout-store';\nimport { getCheckout, getCheckoutStoreState } from './checkouts.mock';\nimport createCheckoutStore from './create-checkout-store';\n\ndescribe('CheckoutActionCreator', () => {\n    let actionCreator: CheckoutActionCreator;\n    let checkoutRequestSender: CheckoutRequestSender;\n    let formFieldsRequestSender: FormFieldsRequestSender;\n    let configRequestSender: ConfigRequestSender;\n    let configActionCreator: ConfigActionCreator;\n    let formFieldsActionCreator: FormFieldsActionCreator;\n    let store: CheckoutStore;\n\n    beforeEach(() => {\n        const requestSender = createRequestSender();\n\n        checkoutRequestSender = new CheckoutRequestSender(requestSender);\n        configRequestSender = new ConfigRequestSender(requestSender);\n        formFieldsRequestSender = new FormFieldsRequestSender(requestSender);\n        store = createCheckoutStore(getCheckoutStoreState());\n\n        jest.spyOn(formFieldsRequestSender, 'loadFields').mockReturnValue(\n            Promise.resolve(getResponse(getFormFields())),\n        );\n\n        jest.spyOn(configRequestSender, 'loadConfig').mockReturnValue(\n            Promise.resolve(getResponse(getConfig())),\n        );\n\n        jest.spyOn(checkoutRequestSender, 'loadCheckout').mockReturnValue(\n            Promise.resolve(getResponse(getCheckout())),\n        );\n\n        jest.spyOn(checkoutRequestSender, 'updateCheckout').mockReturnValue(\n            Promise.resolve(getResponse(getCheckout())),\n        );\n\n        configActionCreator = new ConfigActionCreator(configRequestSender);\n\n        jest.spyOn(configActionCreator, 'loadConfig');\n\n        formFieldsActionCreator = new FormFieldsActionCreator(formFieldsRequestSender);\n\n        jest.spyOn(formFieldsActionCreator, 'loadFormFields');\n\n        actionCreator = new CheckoutActionCreator(\n            checkoutRequestSender,\n            configActionCreator,\n            formFieldsActionCreator,\n        );\n    });\n\n    describe('#loadCheckout', () => {\n        it('emits action to notify loading progress', async () => {\n            const { id } = getCheckout();\n            const actions = await from(actionCreator.loadCheckout(id)(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(checkoutRequestSender.loadCheckout).toHaveBeenCalledWith(id, undefined);\n\n            expect(actions).toEqual(\n                expect.arrayContaining([\n                    { type: CheckoutActionType.LoadCheckoutRequested },\n                    { type: ConfigActionType.LoadConfigRequested },\n                    { type: FormFieldsActionType.LoadFormFieldsRequested },\n                    {\n                        type: FormFieldsActionType.LoadFormFieldsSucceeded,\n                        payload: getFormFields(),\n                    },\n                    { type: ConfigActionType.LoadConfigSucceeded, payload: getConfig() },\n                    { type: CheckoutActionType.LoadCheckoutSucceeded, payload: getCheckout() },\n                ]),\n            );\n        });\n\n        it('emits error action if unable to load checkout', async () => {\n            jest.spyOn(checkoutRequestSender, 'loadCheckout').mockReturnValue(\n                Promise.reject(getErrorResponse()),\n            );\n\n            const { id } = getCheckout();\n            const errorHandler = jest.fn((action) => of(action));\n\n            const actions = await from(actionCreator.loadCheckout(id)(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual(\n                expect.arrayContaining([\n                    { type: CheckoutActionType.LoadCheckoutRequested },\n                    { type: ConfigActionType.LoadConfigRequested },\n                    { type: FormFieldsActionType.LoadFormFieldsRequested },\n                    { type: ConfigActionType.LoadConfigSucceeded, payload: getConfig() },\n                    {\n                        type: CheckoutActionType.LoadCheckoutFailed,\n                        error: true,\n                        payload: getErrorResponse(),\n                    },\n                ]),\n            );\n        });\n\n        it('emits error action if unable to load config', async () => {\n            const errorResponse = getErrorResponse();\n\n            jest.spyOn(configActionCreator, 'loadConfig').mockReturnValue(\n                concat(\n                    of(createAction(ConfigActionType.LoadConfigRequested)),\n                    throwError(createErrorAction(ConfigActionType.LoadConfigFailed, errorResponse)),\n                ),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(\n                actionCreator.loadCheckout('b20deef40f9699e48671bbc3fef6ca44dc80e3c7')(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual(\n                expect.arrayContaining([\n                    { type: CheckoutActionType.LoadCheckoutRequested },\n                    { type: ConfigActionType.LoadConfigRequested },\n                    {\n                        type: ConfigActionType.LoadConfigFailed,\n                        error: true,\n                        payload: errorResponse,\n                    },\n                    {\n                        type: CheckoutActionType.LoadCheckoutFailed,\n                        error: true,\n                        payload: errorResponse,\n                    },\n                ]),\n            );\n        });\n\n        it('does not call loadCheckout until loadConfig resolves', () => {\n            const { id } = getCheckout();\n\n            jest.spyOn(configActionCreator, 'loadConfig').mockReturnValue(\n                of(createAction(ConfigActionType.LoadConfigSucceeded)),\n            );\n\n            from(actionCreator.loadCheckout(id)(store)).toPromise();\n\n            expect(configActionCreator.loadConfig).toHaveBeenCalled();\n            expect(checkoutRequestSender.loadCheckout).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#loadDefaultCheckout', () => {\n        it('emits action to notify loading progress', async () => {\n            const actions = await from(actionCreator.loadDefaultCheckout()(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: CheckoutActionType.LoadCheckoutRequested },\n                { type: ConfigActionType.LoadConfigRequested },\n                { type: FormFieldsActionType.LoadFormFieldsRequested },\n                { type: ConfigActionType.LoadConfigSucceeded, payload: getConfig() },\n                { type: FormFieldsActionType.LoadFormFieldsSucceeded, payload: getFormFields() },\n                { type: CheckoutActionType.LoadCheckoutSucceeded, payload: getCheckout() },\n            ]);\n\n            expect(formFieldsActionCreator.loadFormFields).toHaveBeenCalled();\n            expect(configActionCreator.loadConfig).toHaveBeenCalled();\n            expect(checkoutRequestSender.loadCheckout).toHaveBeenCalled();\n        });\n\n        it('emits error action if unable to load checkout', async () => {\n            jest.spyOn(checkoutRequestSender, 'loadCheckout').mockReturnValue(\n                Promise.reject(getErrorResponse()),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            const actions = await from(actionCreator.loadDefaultCheckout()(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: CheckoutActionType.LoadCheckoutRequested },\n                { type: ConfigActionType.LoadConfigRequested },\n                { type: FormFieldsActionType.LoadFormFieldsRequested },\n                { type: ConfigActionType.LoadConfigSucceeded, payload: getConfig() },\n                { type: FormFieldsActionType.LoadFormFieldsSucceeded, payload: getFormFields() },\n                {\n                    type: CheckoutActionType.LoadCheckoutFailed,\n                    error: true,\n                    payload: getErrorResponse(),\n                },\n            ]);\n        });\n\n        it('does not call loadCheckout until loadConfig resolves', () => {\n            jest.spyOn(configActionCreator, 'loadConfig').mockReturnValue(\n                of(createAction(ConfigActionType.LoadConfigSucceeded)),\n            );\n\n            from(actionCreator.loadDefaultCheckout()(store)).toPromise();\n\n            expect(configActionCreator.loadConfig).toHaveBeenCalled();\n            expect(checkoutRequestSender.loadCheckout).not.toHaveBeenCalled();\n        });\n\n        it('calls loadCheckout after loadConfig with the default checkout ID', async () => {\n            await from(actionCreator.loadDefaultCheckout()(store)).toPromise();\n\n            expect(configActionCreator.loadConfig).toHaveBeenCalled();\n            expect(checkoutRequestSender.loadCheckout).toHaveBeenCalledWith(\n                '6a6071cc-82ba-45aa-adb0-ebec42d6ff6f',\n                undefined,\n            );\n        });\n    });\n\n    describe('#updateCheckout', () => {\n        it('calls checkout request sender', async () => {\n            await from(actionCreator.updateCheckout({ customerMessage: 'foo' })(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(checkoutRequestSender.updateCheckout).toHaveBeenCalledWith(\n                'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                { customerMessage: 'foo' },\n                undefined,\n            );\n        });\n\n        it('emits action to notify updating progress', async () => {\n            const actions = await from(\n                actionCreator.updateCheckout({ customerMessage: 'foo' })(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: CheckoutActionType.UpdateCheckoutRequested },\n                { type: CheckoutActionType.UpdateCheckoutSucceeded, payload: getCheckout() },\n            ]);\n        });\n\n        it('emits error action if unable to update checkout', async () => {\n            jest.spyOn(checkoutRequestSender, 'updateCheckout').mockReturnValue(\n                Promise.reject(getErrorResponse()),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            const actions = await from(\n                actionCreator.updateCheckout({ customerMessage: 'foo' })(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: CheckoutActionType.UpdateCheckoutRequested },\n                {\n                    type: CheckoutActionType.UpdateCheckoutFailed,\n                    error: true,\n                    payload: getErrorResponse(),\n                },\n            ]);\n        });\n    });\n\n    describe('#loadCurrentCheckout()', () => {\n        it('loads checkout by using existing id', async () => {\n            await from(actionCreator.loadCurrentCheckout()(store)).toPromise();\n\n            expect(checkoutRequestSender.loadCheckout).toHaveBeenCalledWith(\n                'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                undefined,\n            );\n        });\n\n        it('throws error if there is no existing checkout id', async () => {\n            store = createCheckoutStore();\n\n            try {\n                await from(actionCreator.loadCurrentCheckout()(store)).toPromise();\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads checkout only when action is dispatched', async () => {\n            const action = actionCreator.loadCurrentCheckout()(store);\n\n            expect(checkoutRequestSender.loadCheckout).not.toHaveBeenCalled();\n\n            await store.dispatch(action);\n\n            expect(checkoutRequestSender.loadCheckout).toHaveBeenCalled();\n        });\n    });\n\n    describe('#loadDefaultCheckout()', () => {\n        it('loads checkout by using existing id', async () => {\n            await from(actionCreator.loadDefaultCheckout()(store)).toPromise();\n\n            expect(checkoutRequestSender.loadCheckout).toHaveBeenCalledWith(\n                '6a6071cc-82ba-45aa-adb0-ebec42d6ff6f',\n                undefined,\n            );\n        });\n\n        it('throws error if there is no existing checkout id', async () => {\n            store = createCheckoutStore();\n\n            try {\n                await from(actionCreator.loadDefaultCheckout()(store)).toPromise();\n            } catch ({ payload }) {\n                expect(payload).toBeInstanceOf(StandardError);\n            }\n        });\n\n        it('loads checkout only when action is dispatched', async () => {\n            const action = actionCreator.loadDefaultCheckout()(store);\n\n            expect(checkoutRequestSender.loadCheckout).not.toHaveBeenCalled();\n\n            await store.dispatch(action);\n\n            expect(checkoutRequestSender.loadCheckout).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-action-creator.ts",
    "content": "import { Action, createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, merge, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { ConfigActionCreator } from '../config';\nimport { FormFieldsActionCreator } from '../form';\n\nimport Checkout, { CheckoutRequestBody } from './checkout';\nimport { CheckoutActionType, LoadCheckoutAction, UpdateCheckoutAction } from './checkout-actions';\nimport { CheckoutHydrateActionType } from './checkout-hydrate-actions';\nimport CheckoutInitialState from './checkout-initial-state';\nimport CheckoutRequestSender from './checkout-request-sender';\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\nexport default class CheckoutActionCreator {\n    constructor(\n        private _checkoutRequestSender: CheckoutRequestSender,\n        private _configActionCreator: ConfigActionCreator,\n        private _formFieldsActionCreator: FormFieldsActionCreator,\n    ) {}\n\n    loadCheckout(\n        id: string,\n        options?: RequestOptions,\n    ): ThunkAction<LoadCheckoutAction, InternalCheckoutSelectors> {\n        return () => {\n            return concat(\n                of(createAction(CheckoutActionType.LoadCheckoutRequested)),\n                merge(\n                    this._configActionCreator.loadConfig({\n                        useCache: true,\n                        timeout: options?.timeout,\n                        params: { checkoutId: id },\n                    }),\n                    this._formFieldsActionCreator.loadFormFields({\n                        useCache: true,\n                        timeout: options?.timeout,\n                    }),\n                ),\n                defer(() => {\n                    return this._checkoutRequestSender\n                        .loadCheckout(id, options)\n                        .then(({ body }) => {\n                            return createAction(\n                                CheckoutActionType.LoadCheckoutSucceeded,\n                                this._transformCustomerAddresses(body),\n                            );\n                        });\n                }),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(CheckoutActionType.LoadCheckoutFailed, error),\n                ),\n            );\n        };\n    }\n\n    loadDefaultCheckout(\n        options?: RequestOptions,\n    ): ThunkAction<LoadCheckoutAction, InternalCheckoutSelectors> {\n        return (store) =>\n            concat(\n                of(createAction(CheckoutActionType.LoadCheckoutRequested)),\n                merge(\n                    this._configActionCreator.loadConfig({\n                        useCache: true,\n                        timeout: options?.timeout,\n                    }),\n                    this._formFieldsActionCreator.loadFormFields({\n                        useCache: true,\n                        timeout: options?.timeout,\n                    }),\n                ),\n                defer(async () => {\n                    const state = store.getState();\n                    const context = state.config.getContextConfig();\n\n                    if (!context || !context.checkoutId) {\n                        throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n                    }\n\n                    const { body } = await this._checkoutRequestSender.loadCheckout(\n                        context.checkoutId,\n                        options,\n                    );\n\n                    return createAction(\n                        CheckoutActionType.LoadCheckoutSucceeded,\n                        this._transformCustomerAddresses(body),\n                    );\n                }),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(CheckoutActionType.LoadCheckoutFailed, error),\n                ),\n            );\n    }\n\n    updateCheckout(\n        body: CheckoutRequestBody,\n        options?: RequestOptions,\n    ): ThunkAction<UpdateCheckoutAction, InternalCheckoutSelectors> {\n        return (store) =>\n            new Observable((observer) => {\n                const state = store.getState();\n                const checkout = state.checkout.getCheckout();\n\n                if (!checkout) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                observer.next(createAction(CheckoutActionType.UpdateCheckoutRequested));\n\n                this._checkoutRequestSender\n                    .updateCheckout(checkout.id, body, options)\n                    .then(({ body }) => {\n                        observer.next(\n                            createAction(CheckoutActionType.UpdateCheckoutSucceeded, body),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(CheckoutActionType.UpdateCheckoutFailed, response),\n                        );\n                    });\n            });\n    }\n\n    loadCurrentCheckout(\n        options?: RequestOptions,\n    ): ThunkAction<LoadCheckoutAction, InternalCheckoutSelectors> {\n        return (store) => {\n            const state = store.getState();\n            const checkout = state.checkout.getCheckout();\n\n            if (!checkout) {\n                throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n            }\n\n            return this.loadCheckout(checkout.id, options)(store);\n        };\n    }\n\n    hydrateInitialState(state: CheckoutInitialState): Action<CheckoutInitialState> {\n        return {\n            type: CheckoutHydrateActionType.HydrateInitialState,\n            payload: state,\n        };\n    }\n\n    private _transformCustomerAddresses(body: Checkout): Checkout {\n        return {\n            ...body,\n            customer: {\n                ...body.customer,\n                addresses: body.customer.addresses.map((address) => ({\n                    ...address,\n                    shouldSaveAddress: false,\n                })),\n            },\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { LoadConfigAction } from '../config';\nimport { LoadFormFieldsAction } from '../form';\n\nimport Checkout from './checkout';\n\nexport enum CheckoutActionType {\n    LoadCheckoutRequested = 'LOAD_CHECKOUT_REQUESTED',\n    LoadCheckoutSucceeded = 'LOAD_CHECKOUT_SUCCEEDED',\n    LoadCheckoutFailed = 'LOAD_CHECKOUT_FAILED',\n\n    UpdateCheckoutRequested = 'UPDATE_CHECKOUT_REQUESTED',\n    UpdateCheckoutSucceeded = 'UPDATE_CHECKOUT_SUCCEEDED',\n    UpdateCheckoutFailed = 'UPDATE_CHECKOUT_FAILED',\n}\n\nexport type CheckoutAction = LoadCheckoutAction | UpdateCheckoutAction;\n\nexport type LoadCheckoutAction =\n    | LoadCheckoutRequestedAction\n    | LoadCheckoutSucceededAction\n    | LoadCheckoutFailedAction\n    | LoadFormFieldsAction\n    | LoadConfigAction;\n\nexport type UpdateCheckoutAction =\n    | UpdateCheckoutRequestedAction\n    | UpdateCheckoutSucceededAction\n    | UpdateCheckoutFailedAction;\n\nexport interface LoadCheckoutRequestedAction extends Action {\n    type: CheckoutActionType.LoadCheckoutRequested;\n}\n\nexport interface LoadCheckoutSucceededAction extends Action<Checkout> {\n    type: CheckoutActionType.LoadCheckoutSucceeded;\n}\n\nexport interface LoadCheckoutFailedAction extends Action<Error> {\n    type: CheckoutActionType.LoadCheckoutFailed;\n}\n\nexport interface UpdateCheckoutRequestedAction extends Action {\n    type: CheckoutActionType.UpdateCheckoutRequested;\n}\n\nexport interface UpdateCheckoutSucceededAction extends Action<Checkout> {\n    type: CheckoutActionType.UpdateCheckoutSucceeded;\n}\n\nexport interface UpdateCheckoutFailedAction extends Action<Error> {\n    type: CheckoutActionType.UpdateCheckoutFailed;\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-default-includes.ts",
    "content": "const CHECKOUT_DEFAULT_INCLUDES = [\n    'cart.lineItems.physicalItems.options',\n    'cart.lineItems.physicalItems.stockPosition',\n    'cart.lineItems.digitalItems.options',\n    'cart.lineItems.digitalItems.stockPosition',\n    'customer',\n    'customer.customerGroup',\n    'payments',\n    'promotions.banners',\n];\n\nexport default CHECKOUT_DEFAULT_INCLUDES;\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-hydrate-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport CheckoutInitialState from './checkout-initial-state';\n\nexport enum CheckoutHydrateActionType {\n    HydrateInitialState = 'HYDRATE_INITIAL_STATE',\n}\n\nexport interface CheckoutHydrateAction extends Action<CheckoutInitialState> {\n    type: CheckoutHydrateActionType.HydrateInitialState;\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-initial-state.ts",
    "content": "import { B2BApiSettings, Config } from '../config';\nimport { Extension } from '../extension';\nimport { ExtraFields, FormFields } from '../form';\n\nimport Checkout from './checkout';\n\nexport default interface CheckoutInitialState {\n    config?: Config;\n    formFields?: FormFields;\n    checkout?: Checkout;\n    extensions?: Extension[];\n    extraFields?: ExtraFields;\n    b2bApiSettings?: B2BApiSettings;\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-params.ts",
    "content": "export enum CheckoutIncludes {\n    AvailableShippingOptions = 'consignments.availableShippingOptions',\n    PhysicalItemsCategoryNames = 'cart.lineItems.physicalItems.categoryNames',\n    DigitalItemsCategoryNames = 'cart.lineItems.digitalItems.categoryNames',\n}\n\nexport default interface CheckoutParams {\n    include?: CheckoutIncludes[] | CheckoutIncludeParam;\n}\n\nexport type CheckoutIncludeParam = {\n    [key in CheckoutIncludes]?: boolean;\n};\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-reducer.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { omit } from 'lodash';\n\nimport { CheckoutActionType } from '../checkout';\nimport { getCheckout } from '../checkout/checkouts.mock';\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\nimport { ConsignmentActionType } from '../shipping';\nimport { SpamProtectionActionType } from '../spam-protection';\n\nimport checkoutReducer from './checkout-reducer';\nimport CheckoutState from './checkout-state';\n\ndescribe('checkoutReducer', () => {\n    let initialState: CheckoutState;\n\n    beforeEach(() => {\n        initialState = { errors: {}, statuses: {} };\n    });\n\n    it('returns loaded state', () => {\n        const action = createAction(CheckoutActionType.LoadCheckoutSucceeded, getCheckout());\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual({\n            data: omit(action.payload, [\n                'billingAddress',\n                'cart',\n                'customer',\n                'consignments',\n                'coupons',\n                'giftCertificates',\n            ]),\n            errors: { loadError: undefined },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns loading state', () => {\n        const action = createAction(CheckoutActionType.LoadCheckoutRequested);\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { loadError: undefined },\n            statuses: { isLoading: true },\n        });\n    });\n\n    it('returns error state', () => {\n        const action = createAction(\n            CheckoutActionType.LoadCheckoutFailed,\n            new RequestError(getErrorResponse()),\n        );\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { loadError: action.payload },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns updated state', () => {\n        const action = createAction(CheckoutActionType.UpdateCheckoutSucceeded, getCheckout());\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual({\n            data: omit(action.payload, [\n                'billingAddress',\n                'cart',\n                'customer',\n                'consignments',\n                'coupons',\n                'giftCertificates',\n            ]),\n            errors: { updateError: undefined },\n            statuses: { isUpdating: false },\n        });\n    });\n\n    it('returns new state when consignment gets created', () => {\n        const action = createAction(\n            ConsignmentActionType.CreateConsignmentsSucceeded,\n            getCheckout(),\n            { id: '123' },\n        );\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual(\n            expect.objectContaining({\n                data: omit(action.payload, [\n                    'billingAddress',\n                    'cart',\n                    'customer',\n                    'consignments',\n                    'coupons',\n                    'giftCertificates',\n                ]),\n            }),\n        );\n    });\n\n    it('returns new state when consignment gets updated', () => {\n        const action = createAction(\n            ConsignmentActionType.UpdateConsignmentSucceeded,\n            getCheckout(),\n            { id: '123' },\n        );\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual(\n            expect.objectContaining({\n                data: omit(action.payload, [\n                    'billingAddress',\n                    'cart',\n                    'customer',\n                    'consignments',\n                    'coupons',\n                    'giftCertificates',\n                ]),\n            }),\n        );\n    });\n\n    it('returns new state when Load Shipping options succeeded', () => {\n        const action = createAction(\n            ConsignmentActionType.LoadShippingOptionsSucceeded,\n            getCheckout(),\n        );\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual(\n            expect.objectContaining({\n                data: omit(action.payload, [\n                    'billingAddress',\n                    'cart',\n                    'customer',\n                    'consignments',\n                    'coupons',\n                    'giftCertificates',\n                ]),\n            }),\n        );\n    });\n\n    it('returns new state when consignment gets deleted', () => {\n        const action = createAction(\n            ConsignmentActionType.DeleteConsignmentSucceeded,\n            getCheckout(),\n            { id: '123' },\n        );\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual(\n            expect.objectContaining({\n                data: omit(action.payload, [\n                    'billingAddress',\n                    'cart',\n                    'customer',\n                    'consignments',\n                    'coupons',\n                    'giftCertificates',\n                ]),\n            }),\n        );\n    });\n\n    it('returns new state when shipping option gets updated', () => {\n        const action = createAction(\n            ConsignmentActionType.UpdateShippingOptionSucceeded,\n            getCheckout(),\n            { id: '123' },\n        );\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual(\n            expect.objectContaining({\n                data: omit(action.payload, [\n                    'billingAddress',\n                    'cart',\n                    'customer',\n                    'consignments',\n                    'coupons',\n                    'giftCertificates',\n                ]),\n            }),\n        );\n    });\n\n    it('returns loading state', () => {\n        const action = createAction(CheckoutActionType.UpdateCheckoutRequested);\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { updateError: undefined },\n            statuses: { isUpdating: true },\n        });\n    });\n\n    it('returns error state', () => {\n        const action = createAction(\n            CheckoutActionType.UpdateCheckoutFailed,\n            new RequestError(getErrorResponse()),\n        );\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { updateError: action.payload },\n            statuses: { isUpdating: false },\n        });\n    });\n\n    it('returns new status when spam check is executing', () => {\n        const action = createAction(SpamProtectionActionType.ExecuteRequested);\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual(\n            expect.objectContaining({\n                statuses: { isExecutingSpamCheck: true },\n            }),\n        );\n    });\n\n    it('returns new status when spam check is executed successfully', () => {\n        const action = createAction(SpamProtectionActionType.ExecuteSucceeded);\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual(\n            expect.objectContaining({\n                statuses: { isExecutingSpamCheck: false },\n            }),\n        );\n    });\n\n    it('returns new status when spam check is failed to execute', () => {\n        const action = createAction(SpamProtectionActionType.ExecuteFailed);\n        const output = checkoutReducer(initialState, action);\n\n        expect(output).toEqual(\n            expect.objectContaining({\n                statuses: { isExecutingSpamCheck: false },\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\nimport { omit } from 'lodash';\n\nimport { BillingAddressAction, BillingAddressActionType } from '../billing';\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\nimport {\n    CouponAction,\n    CouponActionType,\n    GiftCertificateAction,\n    GiftCertificateActionType,\n} from '../coupon';\nimport { OrderAction, OrderActionType } from '../order';\nimport { ConsignmentAction, ConsignmentActionType } from '../shipping';\nimport { SpamProtectionAction, SpamProtectionActionType } from '../spam-protection';\nimport { StoreCreditAction, StoreCreditActionType } from '../store-credit';\n\nimport { CheckoutAction, CheckoutActionType } from './checkout-actions';\nimport { CheckoutHydrateAction, CheckoutHydrateActionType } from './checkout-hydrate-actions';\nimport CheckoutState, {\n    CheckoutDataState,\n    CheckoutErrorsState,\n    CheckoutStatusesState,\n    DEFAULT_STATE,\n} from './checkout-state';\n\nexport default function checkoutReducer(\n    state: CheckoutState = DEFAULT_STATE,\n    action: Action,\n): CheckoutState {\n    const reducer = combineReducers<CheckoutState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: CheckoutDataState | undefined,\n    action:\n        | CheckoutAction\n        | BillingAddressAction\n        | ConsignmentAction\n        | CouponAction\n        | GiftCertificateAction\n        | OrderAction\n        | SpamProtectionAction\n        | StoreCreditAction\n        | CheckoutHydrateAction,\n): CheckoutDataState | undefined {\n    switch (action.type) {\n        case CheckoutActionType.LoadCheckoutSucceeded:\n        case CheckoutActionType.UpdateCheckoutSucceeded:\n        case StoreCreditActionType.ApplyStoreCreditSucceeded:\n        case BillingAddressActionType.UpdateBillingAddressSucceeded:\n        case CouponActionType.ApplyCouponSucceeded:\n        case CouponActionType.RemoveCouponSucceeded:\n        case ConsignmentActionType.CreateConsignmentsSucceeded:\n        case ConsignmentActionType.UpdateConsignmentSucceeded:\n        case ConsignmentActionType.DeleteConsignmentSucceeded:\n        case ConsignmentActionType.UpdateShippingOptionSucceeded:\n        case ConsignmentActionType.LoadShippingOptionsSucceeded:\n        case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n        case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n        case SpamProtectionActionType.VerifyCheckoutSucceeded:\n            return objectMerge(\n                data,\n                omit(action.payload, [\n                    'billingAddress',\n                    'cart',\n                    'consignments',\n                    'customer',\n                    'coupons',\n                    'giftCertificates',\n                ]),\n            ) as CheckoutDataState;\n\n        case OrderActionType.SubmitOrderSucceeded:\n            return objectSet(data, 'orderId', action.payload && action.payload.order.orderId);\n\n        case CheckoutHydrateActionType.HydrateInitialState:\n            return objectMerge(\n                data,\n                omit(action.payload?.checkout, [\n                    'billingAddress',\n                    'cart',\n                    'consignments',\n                    'customer',\n                    'coupons',\n                    'giftCertificates',\n                ]),\n            ) as CheckoutDataState;\n\n        default:\n            return data;\n    }\n}\n\nfunction errorsReducer(\n    errors: CheckoutErrorsState = DEFAULT_STATE.errors,\n    action: CheckoutAction | OrderAction,\n): CheckoutErrorsState {\n    switch (action.type) {\n        case CheckoutActionType.LoadCheckoutRequested:\n        case CheckoutActionType.LoadCheckoutSucceeded:\n            return objectSet(errors, 'loadError', undefined);\n\n        case CheckoutActionType.LoadCheckoutFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        case CheckoutActionType.UpdateCheckoutRequested:\n        case CheckoutActionType.UpdateCheckoutSucceeded:\n            return objectSet(errors, 'updateError', undefined);\n\n        case CheckoutActionType.UpdateCheckoutFailed:\n            return objectSet(errors, 'updateError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: CheckoutStatusesState = DEFAULT_STATE.statuses,\n    action: CheckoutAction | OrderAction | SpamProtectionAction,\n): CheckoutStatusesState {\n    switch (action.type) {\n        case CheckoutActionType.LoadCheckoutRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case CheckoutActionType.LoadCheckoutFailed:\n        case CheckoutActionType.LoadCheckoutSucceeded:\n            return objectSet(statuses, 'isLoading', false);\n\n        case CheckoutActionType.UpdateCheckoutRequested:\n            return objectSet(statuses, 'isUpdating', true);\n\n        case CheckoutActionType.UpdateCheckoutFailed:\n        case CheckoutActionType.UpdateCheckoutSucceeded:\n            return objectSet(statuses, 'isUpdating', false);\n\n        case SpamProtectionActionType.ExecuteRequested:\n            return objectSet(statuses, 'isExecutingSpamCheck', true);\n\n        case SpamProtectionActionType.ExecuteFailed:\n        case SpamProtectionActionType.ExecuteSucceeded:\n            return objectSet(statuses, 'isExecutingSpamCheck', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-request-sender.spec.ts",
    "content": "import { createRequestSender, RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { EmptyCartError } from '../cart/errors';\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport Checkout from './checkout';\nimport { CheckoutIncludes } from './checkout-params';\nimport CheckoutRequestSender from './checkout-request-sender';\nimport { getCheckout } from './checkouts.mock';\nimport { CheckoutNotAvailableError } from './errors';\n\ndescribe('CheckoutRequestSender', () => {\n    let requestSender: RequestSender;\n    let response: Response<Checkout>;\n    let checkoutRequestSender: CheckoutRequestSender;\n\n    const defaultIncludes = [\n        'cart.lineItems.physicalItems.options',\n        'cart.lineItems.physicalItems.stockPosition',\n        'cart.lineItems.digitalItems.options',\n        'cart.lineItems.digitalItems.stockPosition',\n        'customer',\n        'customer.customerGroup',\n        'payments',\n        'promotions.banners',\n    ].join(',');\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        response = getResponse(getCheckout());\n\n        jest.spyOn(requestSender, 'get').mockResolvedValue(response);\n        jest.spyOn(requestSender, 'put').mockResolvedValue(response);\n        checkoutRequestSender = new CheckoutRequestSender(requestSender);\n    });\n\n    describe('loadCheckout', () => {\n        it('returns the response of the requestSender', async () => {\n            expect(\n                await checkoutRequestSender.loadCheckout('6cb62bfc-c92d-45f5-869b-d3d9681a58d4'),\n            ).toEqual(response);\n        });\n\n        it('sends expected params to requestSender', async () => {\n            await checkoutRequestSender.loadCheckout('6cb62bfc-c92d-45f5-869b-d3d9681a58d4');\n\n            expect(requestSender.get).toHaveBeenCalledWith(\n                '/api/storefront/checkout/6cb62bfc-c92d-45f5-869b-d3d9681a58d4',\n                {\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include: defaultIncludes,\n                    },\n                    timeout: undefined,\n                },\n            );\n        });\n\n        it('appends passed params when loading checkout', async () => {\n            await checkoutRequestSender.loadCheckout('6cb62bfc-c92d-45f5-869b-d3d9681a58d4', {\n                params: {\n                    include: [CheckoutIncludes.AvailableShippingOptions],\n                },\n            });\n\n            expect(requestSender.get).toHaveBeenCalledWith(\n                '/api/storefront/checkout/6cb62bfc-c92d-45f5-869b-d3d9681a58d4',\n                {\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include: defaultIncludes.concat(\n                            `,${CheckoutIncludes.AvailableShippingOptions}`,\n                        ),\n                        timeout: undefined,\n                    },\n                },\n            );\n        });\n\n        it('throws CheckoutNotAvailable if the request status is in the 400 range', async () => {\n            jest.spyOn(requestSender, 'get').mockRejectedValue(\n                getErrorResponse(undefined, undefined, 404),\n            );\n\n            try {\n                await checkoutRequestSender.loadCheckout('6cb62bfc-c92d-45f5-869b-d3d9681a58d4');\n            } catch (error) {\n                expect(error).toBeInstanceOf(CheckoutNotAvailableError);\n            }\n        });\n\n        it('throws a generic request error if status in the 500 range', async () => {\n            jest.spyOn(requestSender, 'get').mockRejectedValue(\n                getErrorResponse(undefined, undefined, 500),\n            );\n\n            try {\n                await checkoutRequestSender.loadCheckout('6cb62bfc-c92d-45f5-869b-d3d9681a58d4');\n            } catch (error) {\n                expect(error).not.toBeInstanceOf(CheckoutNotAvailableError);\n            }\n        });\n    });\n\n    describe('updateCheckout', () => {\n        it('returns the response of the requestSender', async () => {\n            expect(\n                await checkoutRequestSender.updateCheckout('6cb62bfc-c92d-45f5-869b-d3d9681a58d4', {\n                    customerMessage: 'foo',\n                }),\n            ).toEqual(response);\n        });\n\n        it('sends expected params to requestSender', async () => {\n            await checkoutRequestSender.updateCheckout(\n                '6cb62bfc-c92d-45f5-869b-d3d9681a58d4',\n                { customerMessage: 'foo' },\n                {\n                    params: {\n                        include: [CheckoutIncludes.AvailableShippingOptions],\n                    },\n                },\n            );\n\n            expect(requestSender.put).toHaveBeenCalledWith(\n                '/api/storefront/checkout/6cb62bfc-c92d-45f5-869b-d3d9681a58d4',\n                {\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    body: {\n                        customerMessage: 'foo',\n                    },\n                    params: {\n                        include: defaultIncludes.concat(\n                            `,${CheckoutIncludes.AvailableShippingOptions}`,\n                        ),\n                    },\n                    timeout: undefined,\n                },\n            );\n        });\n\n        it('throws `EmptyCartError` if error type is `empty_cart`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 422,\n                    title: 'The request could not process',\n                    type: 'empty_cart',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'put').mockRejectedValue(error);\n\n            await expect(\n                checkoutRequestSender.updateCheckout('6cb62bfc-c92d-45f5-869b-d3d9681a58d4', {\n                    customerMessage: 'foo',\n                }),\n            ).rejects.toThrow(EmptyCartError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { EmptyCartError } from '../cart/errors';\nimport {\n    ContentType,\n    joinOrMergeIncludes,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport Checkout, { CheckoutRequestBody } from './checkout';\nimport CHECKOUT_DEFAULT_INCLUDES from './checkout-default-includes';\nimport CheckoutParams from './checkout-params';\nimport { CheckoutNotAvailableError } from './errors';\n\nexport default class CheckoutRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    loadCheckout(\n        id: string,\n        { params: { include } = {}, timeout }: RequestOptions<CheckoutParams> = {},\n    ): Promise<Response<Checkout>> {\n        const url = `/api/storefront/checkout/${id}`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender\n            .get<Checkout>(url, {\n                params: {\n                    include: joinOrMergeIncludes(CHECKOUT_DEFAULT_INCLUDES, include),\n                },\n                headers,\n                timeout,\n            })\n            .catch((error) => {\n                if (error.status >= 400 && error.status < 500) {\n                    throw new CheckoutNotAvailableError(error);\n                }\n\n                throw error;\n            });\n    }\n\n    updateCheckout(\n        id: string,\n        body: CheckoutRequestBody,\n        { params: { include } = {}, timeout }: RequestOptions<CheckoutParams> = {},\n    ): Promise<Response<Checkout>> {\n        const url = `/api/storefront/checkout/${id}`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender\n            .put<Checkout>(url, {\n                params: {\n                    include: joinOrMergeIncludes(CHECKOUT_DEFAULT_INCLUDES, include),\n                },\n                body,\n                headers,\n                timeout,\n            })\n            .catch((err) => {\n                if (err.body.type === 'empty_cart') {\n                    throw new EmptyCartError();\n                }\n\n                throw err;\n            });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-selector.spec.ts",
    "content": "import { merge } from 'lodash';\n\nimport { CheckoutSelectorFactory, createCheckoutSelectorFactory } from './checkout-selector';\nimport CheckoutStoreState from './checkout-store-state';\nimport { getCheckout, getCheckoutState, getCheckoutStoreState } from './checkouts.mock';\nimport createInternalCheckoutSelectors from './create-internal-checkout-selectors';\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\ndescribe('CheckoutSelector', () => {\n    let createCheckoutSelector: CheckoutSelectorFactory;\n    let selectors: InternalCheckoutSelectors;\n    let state: CheckoutStoreState;\n\n    beforeEach(() => {\n        createCheckoutSelector = createCheckoutSelectorFactory();\n        state = getCheckoutStoreState();\n        selectors = createInternalCheckoutSelectors(state);\n    });\n\n    it('returns checkout', () => {\n        const selector = createCheckoutSelector(\n            state.checkout,\n            selectors.billingAddress,\n            selectors.cart,\n            selectors.consignments,\n            selectors.coupons,\n            selectors.customer,\n            selectors.giftCertificates,\n        );\n\n        expect(selector.getCheckout()).toEqual({\n            ...getCheckout(),\n            cart: selectors.cart.getCart(),\n            consignments: selectors.consignments.getConsignments(),\n            coupons: selectors.coupons.getCoupons(),\n            giftCertificates: selectors.giftCertificates.getGiftCertificates(),\n        });\n    });\n\n    it('returns load error', () => {\n        const loadError = new Error();\n        const selector = createCheckoutSelector(\n            {\n                ...getCheckoutState(),\n                errors: { loadError },\n            },\n            selectors.billingAddress,\n            selectors.cart,\n            selectors.consignments,\n            selectors.coupons,\n            selectors.customer,\n            selectors.giftCertificates,\n        );\n\n        expect(selector.getLoadError()).toEqual(loadError);\n    });\n\n    it('returns loading status', () => {\n        const selector = createCheckoutSelector(\n            {\n                ...getCheckoutState(),\n                statuses: { isLoading: true },\n            },\n            selectors.billingAddress,\n            selectors.cart,\n            selectors.consignments,\n            selectors.coupons,\n            selectors.customer,\n            selectors.giftCertificates,\n        );\n\n        expect(selector.isLoading()).toBe(true);\n    });\n\n    it('returns update error', () => {\n        const updateError = new Error();\n        const selector = createCheckoutSelector(\n            {\n                ...getCheckoutState(),\n                errors: { updateError },\n            },\n            selectors.billingAddress,\n            selectors.cart,\n            selectors.consignments,\n            selectors.coupons,\n            selectors.customer,\n            selectors.giftCertificates,\n        );\n\n        expect(selector.getUpdateError()).toEqual(updateError);\n    });\n\n    it('returns updating status', () => {\n        const selector = createCheckoutSelector(\n            {\n                ...getCheckoutState(),\n                statuses: { isUpdating: true },\n            },\n            selectors.billingAddress,\n            selectors.cart,\n            selectors.consignments,\n            selectors.coupons,\n            selectors.customer,\n            selectors.giftCertificates,\n        );\n\n        expect(selector.isUpdating()).toBe(true);\n    });\n\n    it('returns executing spam check status', () => {\n        const selector = createCheckoutSelector(\n            {\n                ...getCheckoutState(),\n                statuses: { isExecutingSpamCheck: true },\n            },\n            selectors.billingAddress,\n            selectors.cart,\n            selectors.consignments,\n            selectors.coupons,\n            selectors.customer,\n            selectors.giftCertificates,\n        );\n\n        expect(selector.isExecutingSpamCheck()).toBe(true);\n    });\n\n    it('returns outstanding balance total with store credit if flag is passed', () => {\n        state = merge(getCheckoutStoreState(), {\n            customer: { data: { storeCredit: 50 } },\n        });\n        selectors = createInternalCheckoutSelectors(state);\n\n        const selector = createCheckoutSelector(\n            state.checkout,\n            selectors.billingAddress,\n            selectors.cart,\n            selectors.consignments,\n            selectors.coupons,\n            selectors.customer,\n            selectors.giftCertificates,\n        );\n\n        expect(selector.getOutstandingBalance(true)).toBe(140);\n\n        expect(selector.getOutstandingBalance()).toBe(190);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { BillingAddressSelector } from '../billing';\nimport { CartSelector } from '../cart';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\nimport { CouponSelector, GiftCertificateSelector } from '../coupon';\nimport { CustomerSelector } from '../customer';\nimport { ConsignmentSelector } from '../shipping';\n\nimport Checkout from './checkout';\nimport CheckoutState, { DEFAULT_STATE } from './checkout-state';\n\nexport default interface CheckoutSelector {\n    getCheckout(): Checkout | undefined;\n    getCheckoutOrThrow(): Checkout;\n    getOutstandingBalance(useStoreCredit?: boolean): number | undefined;\n    getLoadError(): Error | undefined;\n    getUpdateError(): Error | undefined;\n    isExecutingSpamCheck(): boolean;\n    isLoading(): boolean;\n    isUpdating(): boolean;\n}\n\nexport type CheckoutSelectorFactory = (\n    state: CheckoutState,\n    billingAddress: BillingAddressSelector,\n    cart: CartSelector,\n    consignments: ConsignmentSelector,\n    coupons: CouponSelector,\n    customer: CustomerSelector,\n    giftCertificates: GiftCertificateSelector,\n) => CheckoutSelector;\n\ninterface CheckoutSelectorDependencies {\n    billingAddress: BillingAddressSelector;\n    cart: CartSelector;\n    consignments: ConsignmentSelector;\n    coupons: CouponSelector;\n    customer: CustomerSelector;\n    giftCertificates: GiftCertificateSelector;\n}\n\nexport function createCheckoutSelectorFactory(): CheckoutSelectorFactory {\n    const getCheckout = createSelector(\n        (state: CheckoutState) => state.data,\n        (_: CheckoutState, { billingAddress }: CheckoutSelectorDependencies) =>\n            billingAddress.getBillingAddress,\n        (_: CheckoutState, { cart }: CheckoutSelectorDependencies) => cart.getCart,\n        (_: CheckoutState, { customer }: CheckoutSelectorDependencies) => customer.getCustomer,\n        (_: CheckoutState, { consignments }: CheckoutSelectorDependencies) =>\n            consignments.getConsignments,\n        (_: CheckoutState, { coupons }: CheckoutSelectorDependencies) => coupons.getCoupons,\n        (_: CheckoutState, { giftCertificates }: CheckoutSelectorDependencies) =>\n            giftCertificates.getGiftCertificates,\n        (\n                data,\n                getBillingAddress,\n                getCart,\n                getCustomer,\n                getConsignments,\n                getCoupons,\n                getGiftCertificates,\n            ) =>\n            () => {\n                const billingAddress = getBillingAddress();\n                const cart = getCart();\n                const customer = getCustomer();\n                const consignments = getConsignments() || [];\n                const coupons = getCoupons() || [];\n                const giftCertificates = getGiftCertificates() || [];\n\n                if (!data || !cart || !customer) {\n                    return;\n                }\n\n                return {\n                    ...data,\n                    billingAddress,\n                    cart,\n                    customer,\n                    consignments,\n                    coupons,\n                    giftCertificates,\n                };\n            },\n    );\n\n    const getCheckoutOrThrow = createSelector(getCheckout, (getCheckout) => () => {\n        return guard(\n            getCheckout(),\n            () => new MissingDataError(MissingDataErrorType.MissingCheckout),\n        );\n    });\n\n    const getOutstandingBalance = createSelector(\n        getCheckout,\n        (getCheckout) => (useStoreCredit?: boolean) => {\n            const checkout = getCheckout();\n\n            if (!checkout) {\n                return;\n            }\n\n            const grandTotal = checkout.grandTotal || 0;\n            const storeCredit = checkout.customer.storeCredit || 0;\n\n            return useStoreCredit\n                ? Math.max(grandTotal - storeCredit, 0)\n                : checkout.outstandingBalance;\n        },\n    );\n\n    const getLoadError = createSelector(\n        (state: CheckoutState) => state.errors.loadError,\n        (error) => () => error,\n    );\n\n    const getUpdateError = createSelector(\n        (state: CheckoutState) => state.errors.updateError,\n        (error) => () => error,\n    );\n\n    const isExecutingSpamCheck = createSelector(\n        (state: CheckoutState) => state.statuses.isExecutingSpamCheck,\n        (isExecutingSpamCheck) => () => isExecutingSpamCheck === true,\n    );\n\n    const isLoading = createSelector(\n        (state: CheckoutState) => state.statuses.isLoading,\n        (isLoading) => () => isLoading === true,\n    );\n\n    const isUpdating = createSelector(\n        (state: CheckoutState) => state.statuses.isUpdating,\n        (isUpdating) => () => isUpdating === true,\n    );\n\n    return memoizeOne(\n        (\n            state: CheckoutState = DEFAULT_STATE,\n            billingAddress: BillingAddressSelector,\n            cart: CartSelector,\n            consignments: ConsignmentSelector,\n            coupons: CouponSelector,\n            customer: CustomerSelector,\n            giftCertificates: GiftCertificateSelector,\n        ): CheckoutSelector => {\n            return {\n                getCheckout: getCheckout(state, {\n                    billingAddress,\n                    cart,\n                    consignments,\n                    coupons,\n                    customer,\n                    giftCertificates,\n                }),\n                getCheckoutOrThrow: getCheckoutOrThrow(state, {\n                    billingAddress,\n                    cart,\n                    consignments,\n                    coupons,\n                    customer,\n                    giftCertificates,\n                }),\n                getOutstandingBalance: getOutstandingBalance(state, {\n                    billingAddress,\n                    cart,\n                    consignments,\n                    coupons,\n                    customer,\n                    giftCertificates,\n                }),\n                getLoadError: getLoadError(state),\n                getUpdateError: getUpdateError(state),\n                isExecutingSpamCheck: isExecutingSpamCheck(state),\n                isLoading: isLoading(state),\n                isUpdating: isUpdating(state),\n            };\n        },\n    );\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-selectors.ts",
    "content": "import CheckoutStoreErrorSelector from './checkout-store-error-selector';\nimport CheckoutStoreSelector from './checkout-store-selector';\nimport CheckoutStoreStatusSelector from './checkout-store-status-selector';\n\nexport default interface CheckoutSelectors {\n    data: CheckoutStoreSelector;\n    errors: CheckoutStoreErrorSelector;\n    statuses: CheckoutStoreStatusSelector;\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-service.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { createRequestSender, createTimeout } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\nimport { get, map, merge } from 'lodash';\nimport { Observable, of } from 'rxjs';\n\nimport { createNoPaymentStrategy } from '@bigcommerce/checkout-sdk/no-payment-integration';\nimport { createOfflinePaymentStrategy } from '@bigcommerce/checkout-sdk/offline-integration';\nimport {\n    PaymentStrategyResolveId,\n    PaymentStrategy as PaymentStrategyV2,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { B2BTokenActionCreator, B2BTokenRequestSender } from '../b2b-token';\nimport {\n    BillingAddressActionCreator,\n    BillingAddressActionType,\n    BillingAddressRequestSender,\n} from '../billing';\nimport { getBillingAddress } from '../billing/billing-addresses.mock';\nimport { createDataStoreProjection, DataStoreProjection } from '../common/data-store';\nimport { ErrorActionCreator } from '../common/error';\nimport { getResponse } from '../common/http-request/responses.mock';\nimport { ResolveIdRegistry } from '../common/registry';\nimport { ConfigActionCreator, ConfigRequestSender } from '../config';\nimport { getConfig } from '../config/configs.mock';\nimport {\n    CouponActionCreator,\n    CouponRequestSender,\n    GiftCertificateActionCreator,\n    GiftCertificateRequestSender,\n} from '../coupon';\nimport {\n    createCustomerStrategyRegistry,\n    createCustomerStrategyRegistryV2,\n    CustomerActionCreator,\n    CustomerRequestSender,\n    CustomerStrategyActionCreator,\n} from '../customer';\nimport { CustomerStrategyActionType } from '../customer/customer-strategy-actions';\nimport CustomerStrategyRegistryV2 from '../customer/customer-strategy-registry-v2';\nimport { getCustomer } from '../customer/customers.mock';\nimport {\n    createExtensionEventBroadcaster,\n    ExtensionActionCreator,\n    ExtensionActionType,\n    ExtensionCommandType,\n    ExtensionEventBroadcaster,\n    ExtensionMessageType,\n    ExtensionMessenger,\n    ExtensionQueryType,\n    ExtensionRegion,\n    ExtensionRequestSender,\n    getExtensions,\n    WorkerExtensionMessenger,\n} from '../extension';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../form';\nimport { getAddressFormFields, getFormFields } from '../form/form.mock';\nimport { CountryActionCreator, CountryRequestSender } from '../geography';\nimport { getCountriesResponseBody } from '../geography/countries.mock';\nimport { OrderActionCreator, OrderRequestSender } from '../order';\nimport { getCompleteOrderResponseBody, getOrderRequestBody } from '../order/internal-orders.mock';\nimport { getOrder } from '../order/orders.mock';\nimport {\n    B2BCompanyPaymentMethodRequestSender,\n    createPaymentClient,\n    createPaymentStrategyRegistryV2,\n    PaymentMethodActionCreator,\n    PaymentMethodRequestSender,\n    PaymentStrategyActionCreator,\n    PaymentStrategyRegistry,\n} from '../payment';\nimport { createPaymentIntegrationService } from '../payment-integration';\nimport { InstrumentActionCreator, InstrumentRequestSender } from '../payment/instrument';\nimport { InstrumentActionType } from '../payment/instrument/instrument-actions';\nimport {\n    deleteInstrumentResponseBody,\n    getLoadInstrumentsResponseBody,\n    getVaultAccessToken,\n} from '../payment/instrument/instrument.mock';\nimport {\n    getAuthorizenet,\n    getPaymentMethod,\n    getPaymentMethods,\n} from '../payment/payment-methods.mock';\nimport { PaymentStrategyActionType } from '../payment/payment-strategy-actions';\nimport {\n    ConsignmentActionCreator,\n    ConsignmentActionType,\n    ConsignmentRequestSender,\n    createShippingStrategyRegistry,\n    PickupOptionActionCreator,\n    PickupOptionRequestSender,\n    ShippingCountryActionCreator,\n    ShippingCountryRequestSender,\n    ShippingStrategyActionCreator,\n} from '../shipping';\nimport { getShippingAddress } from '../shipping/shipping-addresses.mock';\nimport { getShippingOptions } from '../shipping/shipping-options.mock';\nimport { ShippingStrategyActionType } from '../shipping/shipping-strategy-actions';\nimport { SignInEmailActionCreator, SignInEmailRequestSender } from '../signin-email';\nimport {\n    createSpamProtection,\n    SpamProtectionActionCreator,\n    SpamProtectionActionType,\n    SpamProtectionOptions,\n    SpamProtectionRequestSender,\n} from '../spam-protection';\nimport { StoreCreditActionCreator, StoreCreditRequestSender } from '../store-credit';\nimport { SubscriptionsActionCreator, SubscriptionsRequestSender } from '../subscription';\n\nimport CheckoutActionCreator from './checkout-action-creator';\nimport CheckoutInitialState from './checkout-initial-state';\nimport CheckoutRequestSender from './checkout-request-sender';\nimport CheckoutSelectors from './checkout-selectors';\nimport CheckoutService from './checkout-service';\nimport CheckoutStore from './checkout-store';\nimport CheckoutValidator from './checkout-validator';\nimport {\n    getCheckout,\n    getCheckoutStoreState,\n    getCheckoutWithCoupons,\n    getCheckoutWithPayments,\n} from './checkouts.mock';\nimport { createCheckoutSelectorsFactory } from './create-checkout-selectors';\nimport createCheckoutStore from './create-checkout-store';\n\ndescribe('CheckoutService', () => {\n    let billingAddressActionCreator: BillingAddressActionCreator;\n    let billingAddressRequestSender: BillingAddressRequestSender;\n    let checkoutActionCreator: CheckoutActionCreator;\n    let instrumentRequestSender: InstrumentRequestSender;\n    let countryRequestSender: CountryRequestSender;\n    let consignmentRequestSender: ConsignmentRequestSender;\n    let customerRequestSender: CustomerRequestSender;\n    let consignmentActionCreator: ConsignmentActionCreator;\n    let checkoutRequestSender: CheckoutRequestSender;\n    let checkoutService: CheckoutService;\n    let checkoutValidator: CheckoutValidator;\n    let configActionCreator: ConfigActionCreator;\n    let configRequestSender: ConfigRequestSender;\n    let formFieldsActionCreator: FormFieldsActionCreator;\n    let formFieldsRequestSender: FormFieldsRequestSender;\n    let couponRequestSender: CouponRequestSender;\n    let customerStrategyActionCreator: CustomerStrategyActionCreator;\n    let extensionRequestSender: ExtensionRequestSender;\n    let extensionActionCreator: ExtensionActionCreator;\n    let errorActionCreator: ErrorActionCreator;\n    let giftCertificateRequestSender: GiftCertificateRequestSender;\n    let instrumentActionCreator: InstrumentActionCreator;\n    let orderActionCreator: OrderActionCreator;\n    let orderRequestSender: OrderRequestSender;\n    let paymentMethodRequestSender: PaymentMethodRequestSender;\n    let paymentMethodActionCreator: PaymentMethodActionCreator;\n    let paymentStrategy: PaymentStrategyV2;\n    let paymentStrategyActionCreator: PaymentStrategyActionCreator;\n    let paymentStrategyRegistry: PaymentStrategyRegistry;\n    let paymentStrategyRegistryV2: ResolveIdRegistry<PaymentStrategyV2, PaymentStrategyResolveId>;\n    let customerRegistryV2: CustomerStrategyRegistryV2;\n    let shippingStrategyActionCreator: ShippingStrategyActionCreator;\n    let shippingCountryRequestSender: ShippingCountryRequestSender;\n    let signInEmailActionCreator: SignInEmailActionCreator;\n    let signInEmailRequestSender: SignInEmailRequestSender;\n    let subscriptionsRequestSender: SubscriptionsRequestSender;\n    let subscriptionsActionCreator: SubscriptionsActionCreator;\n    let spamProtectionActionCreator: SpamProtectionActionCreator;\n    let store: CheckoutStore;\n    let storeProjection: DataStoreProjection<CheckoutSelectors>;\n    let storeCreditRequestSender: StoreCreditRequestSender;\n    let extensionMessenger: ExtensionMessenger;\n    let workerExtensionMessenger: WorkerExtensionMessenger;\n    let extensionEventBroadcaster: ExtensionEventBroadcaster;\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreState());\n        storeProjection = createDataStoreProjection(store, createCheckoutSelectorsFactory());\n\n        workerExtensionMessenger = new WorkerExtensionMessenger();\n        extensionMessenger = new ExtensionMessenger(store, workerExtensionMessenger, {}, {}, {});\n\n        const locale = 'en';\n        const requestSender = createRequestSender();\n        const paymentClient = createPaymentClient(store);\n\n        instrumentRequestSender = new InstrumentRequestSender(paymentClient, requestSender);\n\n        jest.spyOn(instrumentRequestSender, 'getVaultAccessToken').mockResolvedValue(\n            getResponse(getVaultAccessToken()),\n        );\n        jest.spyOn(instrumentRequestSender, 'loadInstruments').mockResolvedValue(\n            getResponse(getLoadInstrumentsResponseBody()),\n        );\n        jest.spyOn(instrumentRequestSender, 'deleteInstrument').mockResolvedValue(\n            getResponse(deleteInstrumentResponseBody()),\n        );\n\n        shippingCountryRequestSender = new ShippingCountryRequestSender(requestSender, { locale });\n\n        jest.spyOn(shippingCountryRequestSender, 'loadCountries').mockResolvedValue(\n            getResponse(getCountriesResponseBody()),\n        );\n\n        billingAddressRequestSender = new BillingAddressRequestSender(requestSender);\n        subscriptionsRequestSender = new SubscriptionsRequestSender(requestSender);\n        subscriptionsActionCreator = new SubscriptionsActionCreator(subscriptionsRequestSender);\n\n        jest.spyOn(subscriptionsRequestSender, 'updateSubscriptions').mockResolvedValue(\n            getResponse({\n                email: 'foo@bar.com',\n                acceptsMarketingNewsletter: false,\n                acceptsAbandonedCartEmails: false,\n            }),\n        );\n\n        signInEmailRequestSender = new SignInEmailRequestSender(requestSender);\n        signInEmailActionCreator = new SignInEmailActionCreator(signInEmailRequestSender);\n\n        jest.spyOn(signInEmailRequestSender, 'sendSignInEmail').mockResolvedValue(\n            getResponse({\n                sent_email: 'foo@bar.com',\n                expiry: 0,\n            }),\n        );\n\n        jest.spyOn(billingAddressRequestSender, 'updateAddress').mockResolvedValue(\n            getResponse(\n                merge({}, getCheckout(), {\n                    customer: {\n                        email: 'foo@bar.com',\n                    },\n                    billingAddress: {\n                        email: 'foo@bar.com',\n                    },\n                }),\n            ),\n        );\n\n        countryRequestSender = new CountryRequestSender(requestSender, {\n            locale,\n        });\n\n        jest.spyOn(countryRequestSender, 'loadCountries').mockResolvedValue(\n            getResponse(getCountriesResponseBody()),\n        );\n\n        const paymentIntegrationService = createPaymentIntegrationService(store);\n\n        paymentStrategy = createOfflinePaymentStrategy(paymentIntegrationService);\n\n        jest.spyOn(paymentStrategy, 'execute').mockResolvedValue(Promise.resolve());\n\n        jest.spyOn(paymentStrategy, 'finalize').mockResolvedValue(Promise.resolve());\n\n        jest.spyOn(paymentStrategy, 'initialize').mockResolvedValue(Promise.resolve());\n\n        jest.spyOn(paymentStrategy, 'deinitialize').mockResolvedValue(Promise.resolve());\n\n        paymentStrategyRegistry = new PaymentStrategyRegistry();\n        paymentStrategyRegistryV2 = createPaymentStrategyRegistryV2(paymentIntegrationService, {});\n        customerRegistryV2 = createCustomerStrategyRegistryV2(paymentIntegrationService, {});\n\n        // This can't be fixed until we have differences between core and payment integration api payment strategy types\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(paymentStrategyRegistry, 'getByMethod').mockReturnValue(paymentStrategy);\n\n        extensionRequestSender = new ExtensionRequestSender(requestSender);\n        extensionActionCreator = new ExtensionActionCreator(extensionRequestSender);\n\n        jest.spyOn(extensionRequestSender, 'loadExtensions').mockResolvedValue(\n            getResponse(getExtensions()),\n        );\n\n        orderRequestSender = new OrderRequestSender(requestSender);\n\n        jest.spyOn(orderRequestSender, 'loadOrder').mockResolvedValue(getResponse(getOrder()));\n        jest.spyOn(orderRequestSender, 'submitOrder').mockResolvedValue(\n            getResponse(getCompleteOrderResponseBody()),\n        );\n        jest.spyOn(orderRequestSender, 'finalizeOrder').mockResolvedValue(\n            getResponse(getCompleteOrderResponseBody()),\n        );\n\n        consignmentRequestSender = new ConsignmentRequestSender(requestSender);\n\n        jest.spyOn(consignmentRequestSender, 'createConsignments').mockResolvedValue(\n            getResponse(getCheckout()),\n        );\n        jest.spyOn(consignmentRequestSender, 'updateConsignment').mockResolvedValue(\n            getResponse(getCheckout()),\n        );\n\n        giftCertificateRequestSender = new GiftCertificateRequestSender(requestSender);\n\n        jest.spyOn(giftCertificateRequestSender, 'applyGiftCertificate').mockResolvedValue(\n            getResponse(getCheckout()),\n        );\n        jest.spyOn(giftCertificateRequestSender, 'removeGiftCertificate').mockResolvedValue(\n            getResponse(getCheckout()),\n        );\n\n        checkoutRequestSender = new CheckoutRequestSender(requestSender);\n\n        jest.spyOn(checkoutRequestSender, 'loadCheckout').mockResolvedValue(\n            getResponse(getCheckout()),\n        );\n        jest.spyOn(checkoutRequestSender, 'updateCheckout').mockResolvedValue(\n            getResponse(getCheckout()),\n        );\n\n        couponRequestSender = new CouponRequestSender(requestSender);\n\n        jest.spyOn(couponRequestSender, 'applyCoupon').mockResolvedValue(\n            getResponse(getCheckout()),\n        );\n        jest.spyOn(couponRequestSender, 'removeCoupon').mockResolvedValue(\n            getResponse(getCheckout()),\n        );\n\n        storeCreditRequestSender = new StoreCreditRequestSender(requestSender);\n\n        jest.spyOn(storeCreditRequestSender, 'applyStoreCredit').mockResolvedValue(\n            getResponse(getCheckout()),\n        );\n        jest.spyOn(storeCreditRequestSender, 'removeStoreCredit').mockResolvedValue(\n            getResponse(getCheckout()),\n        );\n\n        configRequestSender = new ConfigRequestSender(requestSender);\n\n        jest.spyOn(configRequestSender, 'loadConfig').mockResolvedValue(getResponse(getConfig()));\n\n        customerRequestSender = new CustomerRequestSender(requestSender);\n\n        jest.spyOn(customerRequestSender, 'createAccount').mockResolvedValue(getResponse({}));\n        jest.spyOn(customerRequestSender, 'createAddress').mockResolvedValue(\n            getResponse(getCustomer()),\n        );\n\n        paymentMethodRequestSender = new PaymentMethodRequestSender(requestSender);\n\n        jest.spyOn(paymentMethodRequestSender, 'loadPaymentMethod').mockResolvedValue(\n            getResponse(getPaymentMethod()),\n        );\n        jest.spyOn(paymentMethodRequestSender, 'loadPaymentMethods').mockResolvedValue(\n            getResponse(getPaymentMethods()),\n        );\n\n        checkoutValidator = new CheckoutValidator(checkoutRequestSender);\n\n        jest.spyOn(checkoutValidator, 'validate').mockResolvedValue(undefined);\n\n        checkoutValidator = new CheckoutValidator(checkoutRequestSender);\n\n        billingAddressActionCreator = new BillingAddressActionCreator(\n            billingAddressRequestSender,\n            subscriptionsActionCreator,\n        );\n\n        configActionCreator = new ConfigActionCreator(configRequestSender);\n\n        formFieldsRequestSender = new FormFieldsRequestSender(requestSender);\n\n        jest.spyOn(formFieldsRequestSender, 'loadFields').mockResolvedValue(\n            getResponse(getFormFields()),\n        );\n\n        formFieldsActionCreator = new FormFieldsActionCreator(formFieldsRequestSender);\n\n        checkoutActionCreator = new CheckoutActionCreator(\n            checkoutRequestSender,\n            configActionCreator,\n            formFieldsActionCreator,\n        );\n\n        consignmentActionCreator = new ConsignmentActionCreator(\n            consignmentRequestSender,\n            checkoutRequestSender,\n        );\n\n        customerStrategyActionCreator = new CustomerStrategyActionCreator(\n            createCustomerStrategyRegistry(store, requestSender),\n            customerRegistryV2,\n            paymentIntegrationService,\n        );\n\n        instrumentActionCreator = new InstrumentActionCreator(instrumentRequestSender);\n\n        spamProtectionActionCreator = new SpamProtectionActionCreator(\n            createSpamProtection(createScriptLoader()),\n            new SpamProtectionRequestSender(requestSender),\n        );\n\n        orderActionCreator = new OrderActionCreator(orderRequestSender, checkoutValidator);\n\n        paymentMethodActionCreator = new PaymentMethodActionCreator(\n            paymentMethodRequestSender,\n            new B2BCompanyPaymentMethodRequestSender(requestSender),\n        );\n\n        paymentStrategyActionCreator = new PaymentStrategyActionCreator(\n            paymentStrategyRegistry,\n            paymentStrategyRegistryV2,\n            orderActionCreator,\n            spamProtectionActionCreator,\n            paymentIntegrationService,\n        );\n\n        shippingStrategyActionCreator = new ShippingStrategyActionCreator(\n            createShippingStrategyRegistry(store, requestSender),\n        );\n\n        errorActionCreator = new ErrorActionCreator();\n\n        extensionEventBroadcaster = createExtensionEventBroadcaster(\n            storeProjection,\n            extensionMessenger,\n        );\n\n        checkoutService = new CheckoutService(\n            store,\n            storeProjection,\n            extensionMessenger,\n            extensionEventBroadcaster,\n            new B2BTokenActionCreator(new B2BTokenRequestSender(requestSender)),\n            billingAddressActionCreator,\n            checkoutActionCreator,\n            configActionCreator,\n            new CustomerActionCreator(\n                customerRequestSender,\n                checkoutActionCreator,\n                new SpamProtectionActionCreator(\n                    createSpamProtection(createScriptLoader()),\n                    new SpamProtectionRequestSender(requestSender),\n                ),\n            ),\n            consignmentActionCreator,\n            new CountryActionCreator(countryRequestSender),\n            new CouponActionCreator(couponRequestSender),\n            customerStrategyActionCreator,\n            errorActionCreator,\n            new GiftCertificateActionCreator(giftCertificateRequestSender),\n            instrumentActionCreator,\n            orderActionCreator,\n            paymentMethodActionCreator,\n            paymentStrategyActionCreator,\n            new PickupOptionActionCreator(new PickupOptionRequestSender(requestSender)),\n            new ShippingCountryActionCreator(shippingCountryRequestSender, store),\n            shippingStrategyActionCreator,\n            signInEmailActionCreator,\n            spamProtectionActionCreator,\n            new StoreCreditActionCreator(storeCreditRequestSender),\n            subscriptionsActionCreator,\n            formFieldsActionCreator,\n            extensionActionCreator,\n            workerExtensionMessenger,\n        );\n    });\n\n    it('has methods that can be destructed', () => {\n        const { loadCheckout, loadOrder } = checkoutService;\n\n        expect(() => loadCheckout()).not.toThrow(TypeError);\n        expect(() => loadOrder(123)).not.toThrow(TypeError);\n    });\n\n    describe('#getState()', () => {\n        it('returns state', () => {\n            expect(checkoutService.getState()).toEqual(\n                expect.objectContaining({\n                    data: expect.any(Object),\n                    errors: expect.any(Object),\n                    statuses: expect.any(Object),\n                }),\n            );\n        });\n\n        it('returns same state unless it is changed', () => {\n            const state = checkoutService.getState();\n\n            expect(state).toBe(checkoutService.getState());\n\n            checkoutService.loadPaymentMethods();\n\n            expect(state).not.toBe(checkoutService.getState());\n        });\n    });\n\n    describe('#subscribe()', () => {\n        it('passes state to subscriber', () => {\n            const subscriber = jest.fn();\n\n            checkoutService.subscribe(subscriber);\n\n            expect(subscriber).toHaveBeenCalledWith(checkoutService.getState());\n        });\n\n        it('passes state to filters', async () => {\n            const filter = jest.fn((state) => state);\n\n            checkoutService.subscribe(() => {}, filter);\n\n            await checkoutService.loadCheckout();\n\n            expect(Object.keys((filter as jest.Mock).mock.calls[0][0])).toEqual(\n                Object.keys(checkoutService.getState()),\n            );\n        });\n\n        it('calls subscriber on state change', async () => {\n            const subscriber = jest.fn();\n\n            checkoutService.subscribe(subscriber, (state) => state.data.getCheckout());\n            subscriber.mockReset();\n\n            jest.spyOn(checkoutRequestSender, 'loadCheckout').mockReturnValue(\n                Promise.resolve(getResponse(getCheckoutWithCoupons())),\n            );\n\n            await checkoutService.loadCheckout('abc');\n            await checkoutService.loadCheckout('abc');\n\n            expect(subscriber).toHaveBeenCalledTimes(1);\n        });\n\n        it('only calls subscriber when filters are matched', async () => {\n            const subscriber = jest.fn();\n\n            checkoutService.subscribe(subscriber, (state) =>\n                get(state.data.getCheckout(), 'payments'),\n            );\n            subscriber.mockReset();\n\n            jest.spyOn(checkoutRequestSender, 'loadCheckout').mockReturnValue(\n                Promise.resolve(getResponse(getCheckoutWithPayments())),\n            );\n\n            await checkoutService.loadCheckout('abc');\n\n            expect(subscriber).toHaveBeenCalledTimes(1);\n\n            jest.spyOn(checkoutRequestSender, 'loadCheckout').mockReturnValue(\n                Promise.resolve(getResponse(getCheckoutWithCoupons())),\n            );\n\n            await checkoutService.loadCheckout('abc');\n\n            expect(subscriber).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#notifyState()', () => {\n        it('notifies subscribers of its current state', () => {\n            const subscriber = jest.fn();\n\n            checkoutService.subscribe(subscriber);\n            checkoutService.notifyState();\n\n            expect(subscriber).toHaveBeenLastCalledWith(checkoutService.getState());\n            expect(subscriber).toHaveBeenCalledTimes(2);\n        });\n    });\n\n    describe('#loadCheckout()', () => {\n        const { id } = getCheckout();\n\n        beforeEach(() => {\n            jest.spyOn(checkoutActionCreator, 'loadCheckout');\n            jest.spyOn(checkoutActionCreator, 'loadDefaultCheckout');\n            jest.spyOn(configActionCreator, 'loadConfig');\n        });\n\n        it('calls loadCheckout with the provided id', () => {\n            checkoutService.loadCheckout(id);\n\n            expect(checkoutActionCreator.loadCheckout).toHaveBeenCalledWith(id, undefined);\n        });\n\n        it('calls loadDefaultCheckout when no id is provided', async () => {\n            await checkoutService.loadCheckout();\n\n            expect(checkoutActionCreator.loadDefaultCheckout).toHaveBeenCalledWith(undefined);\n        });\n\n        it('returns a state with a hydrated checkout', async () => {\n            const state = await checkoutService.loadCheckout();\n\n            expect(state.data.getCheckout()).toEqual(store.getState().checkout.getCheckout());\n        });\n    });\n\n    describe('#sendSignInEmail()', () => {\n        it('sends sign-in email', async () => {\n            const state = await checkoutService.sendSignInEmail({\n                email: 'foo@bar.com',\n            });\n\n            expect(signInEmailRequestSender.sendSignInEmail).toHaveBeenCalledWith(\n                {\n                    email: 'foo@bar.com',\n                },\n                undefined,\n            );\n\n            expect(state.data.getCheckout()).toEqual(store.getState().checkout.getCheckout());\n        });\n    });\n\n    describe('#createCustomerAccount()', () => {\n        it('creates customer account', async () => {\n            const state = await checkoutService.createCustomerAccount({\n                email: 'foo@bar.com',\n                firstName: 'first',\n                lastName: 'last',\n                password: 'password',\n            });\n\n            expect(customerRequestSender.createAccount).toHaveBeenCalledWith(\n                {\n                    email: 'foo@bar.com',\n                    firstName: 'first',\n                    lastName: 'last',\n                    password: 'password',\n                },\n                undefined,\n            );\n\n            expect(state.data.getCheckout()).toEqual(store.getState().checkout.getCheckout());\n        });\n    });\n\n    describe('#createCustomerAddress()', () => {\n        it('creates customer address', async () => {\n            const address = getShippingAddress();\n            const state = await checkoutService.createCustomerAddress(address);\n\n            expect(customerRequestSender.createAddress).toHaveBeenCalledWith(address, undefined);\n\n            expect(state.data.getCheckout()).toEqual(store.getState().checkout.getCheckout());\n        });\n    });\n\n    describe('#updateSubscriptions()', () => {\n        it('updates subscriptions', async () => {\n            const state = await checkoutService.updateSubscriptions({\n                email: 'foo@bar.com',\n                acceptsAbandonedCartEmails: true,\n                acceptsMarketingNewsletter: false,\n            });\n\n            expect(subscriptionsRequestSender.updateSubscriptions).toHaveBeenCalledWith(\n                {\n                    email: 'foo@bar.com',\n                    acceptsAbandonedCartEmails: true,\n                    acceptsMarketingNewsletter: false,\n                },\n                undefined,\n            );\n\n            expect(state.data.getCheckout()).toEqual(store.getState().checkout.getCheckout());\n        });\n    });\n\n    describe('#updateCheckout()', () => {\n        const { id } = getCheckout();\n\n        it('updates checkout data', async () => {\n            const state = await checkoutService.updateCheckout({\n                customerMessage: 'foo',\n            });\n\n            expect(checkoutRequestSender.updateCheckout).toHaveBeenCalledWith(\n                id,\n                { customerMessage: 'foo' },\n                undefined,\n            );\n\n            expect(state.data.getCheckout()).toEqual(store.getState().checkout.getCheckout());\n        });\n    });\n\n    describe('#loadShippingAddressFields()', () => {\n        it('loads config data', async () => {\n            const state = await checkoutService.loadShippingAddressFields();\n            const result = state.data.getShippingAddressFields('');\n            const expected = getAddressFormFields();\n\n            expect(map(result, 'id')).toEqual(map(expected, 'id'));\n        });\n\n        it('loads extra countries data', async () => {\n            const state = await checkoutService.loadShippingAddressFields();\n\n            expect(state.data.getShippingCountries()).toEqual(getCountriesResponseBody().data);\n        });\n    });\n\n    describe('#loadBillingAddressFields()', () => {\n        it('loads config data', async () => {\n            const state = await checkoutService.loadBillingAddressFields();\n            const result = state.data.getBillingAddressFields('');\n            const expected = getAddressFormFields();\n\n            expect(map(result, 'id')).toEqual(map(expected, 'id'));\n        });\n\n        it('loads extra countries data', async () => {\n            const state = await checkoutService.loadBillingAddressFields();\n\n            expect(state.data.getBillingCountries()).toEqual(getCountriesResponseBody().data);\n        });\n    });\n\n    describe('#loadOrder()', () => {\n        beforeEach(() => {\n            jest.spyOn(orderActionCreator, 'loadOrder');\n            jest.spyOn(configActionCreator, 'loadConfig');\n            jest.spyOn(formFieldsActionCreator, 'loadFormFields');\n        });\n\n        it('loads order data', async () => {\n            const state = await checkoutService.loadOrder(295);\n\n            expect(orderActionCreator.loadOrder).toHaveBeenCalled();\n            expect(state.data.getOrder()).toEqual(store.getState().order.getOrder());\n        });\n\n        it('loads config data', async () => {\n            const state = await checkoutService.loadOrder(295);\n\n            expect(configActionCreator.loadConfig).toHaveBeenCalled();\n            expect(state.data.getConfig()).toEqual(getConfig().storeConfig);\n        });\n\n        it('loads form fields data', async () => {\n            const state = await checkoutService.loadOrder(295);\n\n            expect(formFieldsActionCreator.loadFormFields).toHaveBeenCalled();\n            expect(state.data.getCustomerAccountFields()).toEqual(getFormFields().customerAccount);\n        });\n    });\n\n    describe('#submitOrder()', () => {\n        let noPaymentDataRequiredPaymentStrategy: PaymentStrategyV2;\n\n        beforeEach(async () => {\n            const paymentIntegrationService = createPaymentIntegrationService(store);\n\n            await checkoutService.loadCheckout();\n\n            noPaymentDataRequiredPaymentStrategy =\n                createNoPaymentStrategy(paymentIntegrationService);\n\n            // This can't be fixed until we have differences between core and payment integration api payment strategy types\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            paymentStrategyRegistry.get = jest.fn(() => noPaymentDataRequiredPaymentStrategy);\n\n            jest.spyOn(spamProtectionActionCreator, 'execute').mockReturnValue(() =>\n                of(createAction(SpamProtectionActionType.ExecuteSucceeded)),\n            );\n        });\n\n        it('finds payment strategy', async () => {\n            await checkoutService.loadPaymentMethods();\n            await checkoutService.submitOrder(getOrderRequestBody());\n\n            expect(paymentStrategyRegistry.getByMethod).toHaveBeenCalledWith(getAuthorizenet());\n        });\n\n        it('executes payment strategy', async () => {\n            const payload = getOrderRequestBody();\n\n            await checkoutService.loadPaymentMethods();\n            await checkoutService.submitOrder(payload);\n\n            expect(paymentStrategy.execute).toHaveBeenCalledWith(\n                getOrderRequestBody(),\n                // tslint:disable-next-line:no-non-null-assertion\n                {\n                    methodId: payload.payment!.methodId,\n                    gatewayId: payload.payment!.gatewayId,\n                },\n            );\n        });\n\n        it('executes payment strategy with timeout', async () => {\n            const payload = getOrderRequestBody();\n            const options = { timeout: createTimeout() };\n\n            await checkoutService.loadPaymentMethods();\n            await checkoutService.submitOrder(payload, options);\n\n            expect(paymentStrategy.execute).toHaveBeenCalledWith(\n                payload,\n                // tslint:disable-next-line:no-non-null-assertion\n                {\n                    ...options,\n                    methodId: payload.payment!.methodId,\n                    gatewayId: payload.payment!.gatewayId,\n                },\n            );\n        });\n    });\n\n    describe('#finalizeOrderIfNeeded()', () => {\n        it('finds payment strategy', async () => {\n            await checkoutService.loadCheckout();\n            await checkoutService.loadPaymentMethods();\n            await checkoutService.finalizeOrderIfNeeded();\n\n            expect(paymentStrategyRegistry.getByMethod).toHaveBeenCalledWith(getAuthorizenet());\n        });\n\n        it('finalizes order', async () => {\n            await checkoutService.loadCheckout();\n            await checkoutService.loadPaymentMethods();\n            await checkoutService.finalizeOrderIfNeeded();\n\n            expect(paymentStrategy.finalize).toHaveBeenCalledWith({\n                methodId: getAuthorizenet().id,\n            });\n        });\n\n        it('finalizes order with timeout', async () => {\n            const options = { timeout: createTimeout() };\n\n            await checkoutService.loadCheckout();\n            await checkoutService.loadPaymentMethods();\n            await checkoutService.finalizeOrderIfNeeded(options);\n\n            expect(paymentStrategy.finalize).toHaveBeenCalledWith({\n                ...options,\n                methodId: getAuthorizenet().id,\n            });\n        });\n    });\n\n    describe('#loadPaymentMethods()', () => {\n        it('loads payment methods', async () => {\n            const options = {\n                params: { cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7' },\n            };\n\n            await checkoutService.loadPaymentMethods();\n\n            expect(paymentMethodRequestSender.loadPaymentMethods).toHaveBeenCalledWith(options);\n        });\n\n        it('loads payment methods with timeout', async () => {\n            const options = {\n                timeout: createTimeout(),\n                params: { cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7' },\n            };\n\n            await checkoutService.loadPaymentMethods(options);\n\n            expect(paymentMethodRequestSender.loadPaymentMethods).toHaveBeenCalledWith(options);\n        });\n\n        it('returns payment methods', async () => {\n            const state = await checkoutService.loadPaymentMethods();\n\n            expect(state.data.getPaymentMethods()).toEqual(getPaymentMethods());\n        });\n\n        it('dispatches action with queue id', async () => {\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.loadPaymentMethods();\n\n            expect(store.dispatch).toHaveBeenCalledWith(expect.any(Function), {\n                queueId: 'paymentMethods',\n            });\n        });\n    });\n\n    describe('#initializePayment()', () => {\n        it('dispatches action to initialize payment', async () => {\n            const options = { methodId: getPaymentMethod().id };\n            const action = () => of(createAction(PaymentStrategyActionType.InitializeRequested));\n\n            jest.spyOn(paymentStrategyActionCreator, 'initialize').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.initializePayment(options);\n\n            expect(paymentStrategyActionCreator.initialize).toHaveBeenCalledWith(options);\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'paymentStrategy',\n            });\n        });\n    });\n\n    describe('#deinitializePayment()', () => {\n        it('dispatches action to deinitialize payment', async () => {\n            const options = { methodId: getPaymentMethod().id };\n            const action = () => of(createAction(PaymentStrategyActionType.DeinitializeRequested));\n\n            jest.spyOn(paymentStrategyActionCreator, 'deinitialize').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.deinitializePayment(options);\n\n            expect(paymentStrategyActionCreator.deinitialize).toHaveBeenCalledWith(options);\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'paymentStrategy',\n            });\n        });\n    });\n\n    describe('#loadBillingCountries()', () => {\n        it('loads billing countries data', async () => {\n            const state = await checkoutService.loadBillingCountries();\n\n            expect(state.data.getBillingCountries()).toEqual(getCountriesResponseBody().data);\n        });\n\n        it('dispatches action with queue id', async () => {\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.loadBillingCountries();\n\n            expect(store.dispatch).toHaveBeenCalledWith(expect.any(Observable), {\n                queueId: 'billingCountries',\n            });\n        });\n    });\n\n    describe('#loadShippingCountries()', () => {\n        it('loads shipping countries data', async () => {\n            const state = await checkoutService.loadShippingCountries();\n\n            expect(state.data.getShippingCountries()).toEqual(getCountriesResponseBody().data);\n        });\n\n        it('dispatches action with queue id', async () => {\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.loadShippingCountries();\n\n            expect(store.dispatch).toHaveBeenCalledWith(expect.any(Observable), {\n                queueId: 'shippingCountries',\n            });\n        });\n    });\n\n    describe('#initializeCustomer()', () => {\n        it('dispatches action to initialize customer', async () => {\n            const options = { methodId: getPaymentMethod().id };\n            const action = () => of(createAction(CustomerStrategyActionType.InitializeRequested));\n\n            jest.spyOn(customerStrategyActionCreator, 'initialize').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.initializeCustomer(options);\n\n            expect(customerStrategyActionCreator.initialize).toHaveBeenCalledWith(options);\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'customerStrategy',\n            });\n        });\n    });\n\n    describe('#deinitializeCustomer()', () => {\n        it('dispatches action to deinitialize customer', async () => {\n            const options = { methodId: getPaymentMethod().id };\n            const action = () => of(createAction(CustomerStrategyActionType.DeinitializeRequested));\n\n            jest.spyOn(customerStrategyActionCreator, 'deinitialize').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.deinitializeCustomer(options);\n\n            expect(customerStrategyActionCreator.deinitialize).toHaveBeenCalledWith(options);\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'customerStrategy',\n            });\n        });\n    });\n\n    describe('#continueAsGuest()', () => {\n        it('dispatches action to continue as guest', async () => {\n            const action = () =>\n                of(createAction(BillingAddressActionType.ContinueAsGuestRequested));\n\n            jest.spyOn(billingAddressActionCreator, 'continueAsGuest').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.continueAsGuest({ email: 'foo@bar.com' });\n\n            expect(billingAddressActionCreator.continueAsGuest).toHaveBeenCalledWith(\n                { email: 'foo@bar.com' },\n                undefined,\n            );\n            expect(store.dispatch).toHaveBeenCalledWith(action, undefined);\n        });\n    });\n\n    describe('#signInCustomer()', () => {\n        it('dispatches action to sign in customer', async () => {\n            const options = { methodId: getPaymentMethod().id };\n            const action = of(createAction(CustomerStrategyActionType.SignInRequested));\n\n            jest.spyOn(customerStrategyActionCreator, 'signIn').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.signInCustomer(\n                { email: 'foo@bar.com', password: 'password1' },\n                options,\n            );\n\n            expect(customerStrategyActionCreator.signIn).toHaveBeenCalledWith(\n                { email: 'foo@bar.com', password: 'password1' },\n                options,\n            );\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'customerStrategy',\n            });\n        });\n    });\n\n    describe('#signOutCustomer()', () => {\n        it('dispatches action to sign out customer', async () => {\n            const options = { methodId: getPaymentMethod().id };\n            const action = of(createAction(CustomerStrategyActionType.SignOutRequested));\n\n            jest.spyOn(customerStrategyActionCreator, 'signOut').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.signOutCustomer(options);\n\n            expect(customerStrategyActionCreator.signOut).toHaveBeenCalledWith(options);\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'customerStrategy',\n            });\n        });\n    });\n\n    describe('#executePaymentMethodCheckout()', () => {\n        it('dispatches action to execute payment method checkout', async () => {\n            const options = {\n                methodId: getPaymentMethod().id,\n                fallback: () => {},\n            };\n            const action = of(\n                createAction(CustomerStrategyActionType.ExecutePaymentMethodCheckoutRequested),\n            );\n\n            jest.spyOn(\n                customerStrategyActionCreator,\n                'executePaymentMethodCheckout',\n            ).mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.executePaymentMethodCheckout(options);\n\n            expect(customerStrategyActionCreator.executePaymentMethodCheckout).toHaveBeenCalledWith(\n                options,\n            );\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'customerStrategy',\n            });\n        });\n    });\n\n    describe('#loadShippingOptions()', () => {\n        it('loads shipping options', async () => {\n            const state = await checkoutService.loadShippingOptions();\n\n            expect(checkoutRequestSender.loadCheckout).toHaveBeenCalled();\n            expect(state.data.getShippingOptions()).toEqual(getShippingOptions());\n        });\n    });\n\n    describe('#initializeShipping()', () => {\n        it('dispatches action to initialize shipping', async () => {\n            const options = { timeout: createTimeout() };\n            const action = () => of(createAction(ShippingStrategyActionType.InitializeRequested));\n\n            jest.spyOn(shippingStrategyActionCreator, 'initialize').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.initializeShipping(options);\n\n            expect(shippingStrategyActionCreator.initialize).toHaveBeenCalledWith(options);\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'shippingStrategy',\n            });\n        });\n    });\n\n    describe('#deinitializeShipping()', () => {\n        it('dispatches action to deinitialize shipping', async () => {\n            const options = { timeout: createTimeout() };\n            const action = () => of(createAction(ShippingStrategyActionType.DeinitializeRequested));\n\n            jest.spyOn(shippingStrategyActionCreator, 'deinitialize').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.deinitializeShipping(options);\n\n            expect(shippingStrategyActionCreator.deinitialize).toHaveBeenCalledWith(options);\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'shippingStrategy',\n            });\n        });\n    });\n\n    describe('#selectConsignmentShippingOption()', () => {\n        it('dispatches action to update shipping option for a consignment', async () => {\n            const options = { timeout: createTimeout() };\n            const action = () =>\n                of(\n                    createAction(ConsignmentActionType.UpdateShippingOptionRequested, null, {\n                        id: 'test',\n                    }),\n                );\n\n            jest.spyOn(consignmentActionCreator, 'updateShippingOption').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.selectConsignmentShippingOption('foo', 'bar', options);\n\n            expect(consignmentActionCreator.updateShippingOption).toHaveBeenCalledWith(\n                {\n                    id: 'foo',\n                    shippingOptionId: 'bar',\n                },\n                options,\n            );\n\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'shippingStrategy',\n            });\n        });\n    });\n\n    describe('#updateConsignment()', () => {\n        it('dispatches action to update address for a consignment', async () => {\n            const address = getShippingAddress();\n            const options = { timeout: createTimeout() };\n            const action = () =>\n                of(\n                    createAction(ConsignmentActionType.UpdateConsignmentRequested, null, {\n                        id: 'test',\n                    }),\n                );\n\n            jest.spyOn(consignmentActionCreator, 'updateConsignment').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            const payload = {\n                id: 'foo',\n                shippingAddress: address,\n                lineItems: [],\n            };\n\n            await checkoutService.updateConsignment(payload, options);\n\n            expect(consignmentActionCreator.updateConsignment).toHaveBeenCalledWith(\n                payload,\n                options,\n            );\n\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'shippingStrategy',\n            });\n        });\n    });\n\n    describe('#assignItemsToAddress()', () => {\n        it('dispatches action to update consignment', async () => {\n            const address = getShippingAddress();\n            const options = { timeout: createTimeout() };\n            const action = () =>\n                of(createAction(ConsignmentActionType.CreateConsignmentsRequested));\n\n            jest.spyOn(consignmentActionCreator, 'assignItemsByAddress').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            const payload = {\n                address,\n                shippingAddress: address,\n                lineItems: [\n                    {\n                        itemId: 'item-foo',\n                        quantity: 2,\n                    },\n                ],\n            };\n\n            await checkoutService.assignItemsToAddress(payload, options);\n\n            expect(consignmentActionCreator.assignItemsByAddress).toHaveBeenCalledWith(\n                payload,\n                options,\n            );\n\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'shippingStrategy',\n            });\n        });\n    });\n\n    describe('#unassignItemsToAddress()', () => {\n        it('dispatches action to update consignment', async () => {\n            const address = getShippingAddress();\n            const options = { timeout: createTimeout() };\n            const action = () =>\n                of(\n                    createAction(ConsignmentActionType.DeleteConsignmentRequested, null, {\n                        id: 'test',\n                    }),\n                );\n\n            jest.spyOn(consignmentActionCreator, 'unassignItemsByAddress').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            const payload = {\n                address,\n                shippingAddress: address,\n                lineItems: [\n                    {\n                        itemId: 'item-foo',\n                        quantity: 2,\n                    },\n                ],\n            };\n\n            await checkoutService.unassignItemsToAddress(payload, options);\n\n            expect(consignmentActionCreator.unassignItemsByAddress).toHaveBeenCalledWith(\n                payload,\n                options,\n            );\n\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'shippingStrategy',\n            });\n        });\n    });\n\n    describe('#createConsignments()', () => {\n        it('dispatches action to create consignments', async () => {\n            const consignments = [\n                {\n                    lineItems: [],\n                    shippingAddress: getShippingAddress(),\n                },\n            ];\n            const options = { timeout: createTimeout() };\n            const action = () =>\n                of(createAction(ConsignmentActionType.CreateConsignmentsRequested));\n\n            jest.spyOn(consignmentActionCreator, 'createConsignments').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.createConsignments(consignments, options);\n\n            expect(consignmentActionCreator.createConsignments).toHaveBeenCalledWith(\n                consignments,\n                options,\n            );\n\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'shippingStrategy',\n            });\n        });\n    });\n\n    describe('#updateShippingAddress()', () => {\n        it('dispatches action to update shipping address', async () => {\n            const address = getShippingAddress();\n            const options = { timeout: createTimeout() };\n            const action = () =>\n                of(createAction(ShippingStrategyActionType.UpdateAddressRequested));\n\n            jest.spyOn(shippingStrategyActionCreator, 'updateAddress').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.updateShippingAddress(address, options);\n\n            expect(shippingStrategyActionCreator.updateAddress).toHaveBeenCalledWith(\n                address,\n                options,\n            );\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'shippingStrategy',\n            });\n        });\n    });\n\n    describe('#selectShippingOption()', () => {\n        it('dispatches action to select shipping option', async () => {\n            const shippingOptionId = 'shipping-option-id-456';\n            const options = { timeout: createTimeout() };\n            const action = () => of(createAction(ShippingStrategyActionType.SelectOptionRequested));\n\n            jest.spyOn(shippingStrategyActionCreator, 'selectOption').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.selectShippingOption(shippingOptionId, options);\n\n            expect(shippingStrategyActionCreator.selectOption).toHaveBeenCalledWith(\n                shippingOptionId,\n                options,\n            );\n            expect(store.dispatch).toHaveBeenCalledWith(action, {\n                queueId: 'shippingStrategy',\n            });\n        });\n    });\n\n    describe('#updateBillingAddress()', () => {\n        it('updates the billing address', async () => {\n            const address = getBillingAddress();\n            const options = { timeout: createTimeout() };\n\n            await checkoutService.updateBillingAddress(address, options);\n\n            expect(billingAddressRequestSender.updateAddress).toHaveBeenCalledWith(\n                getCheckout().id,\n                address,\n                options,\n            );\n        });\n    });\n\n    describe('#applyStoreCredit()', () => {\n        it('applies store credit when called with true', async () => {\n            const options = { timeout: createTimeout() };\n\n            await checkoutService.applyStoreCredit(true, options);\n\n            expect(storeCreditRequestSender.applyStoreCredit).toHaveBeenCalledWith(\n                getCheckout().id,\n                { ...options, version: getCheckout().version },\n            );\n        });\n\n        it('removes store credit when called with false', async () => {\n            const options = { timeout: createTimeout() };\n\n            await checkoutService.applyStoreCredit(false, options);\n\n            expect(storeCreditRequestSender.removeStoreCredit).toHaveBeenCalledWith(\n                getCheckout().id,\n                { ...options, version: getCheckout().version },\n            );\n        });\n    });\n\n    describe('#applyCoupon()', () => {\n        it('applies a coupon', async () => {\n            const code = 'myCoupon1234';\n            const options = { timeout: createTimeout() };\n\n            await checkoutService.applyCoupon(code, options);\n\n            expect(couponRequestSender.applyCoupon).toHaveBeenCalledWith(\n                getCheckout().id,\n                code,\n                options,\n            );\n        });\n    });\n\n    describe('#removeCoupon()', () => {\n        it('removes a coupon', async () => {\n            const code = 'myCoupon1234';\n            const options = { timeout: createTimeout() };\n\n            await checkoutService.removeCoupon(code, options);\n\n            expect(couponRequestSender.removeCoupon).toHaveBeenCalledWith(\n                getCheckout().id,\n                code,\n                options,\n            );\n        });\n    });\n\n    describe('#applyGiftCertificate()', () => {\n        it('applies a gift certificate', async () => {\n            const code = 'myGiftCertificate1234';\n            const options = { timeout: createTimeout() };\n\n            await checkoutService.applyGiftCertificate(code, options);\n\n            expect(giftCertificateRequestSender.applyGiftCertificate).toHaveBeenCalledWith(\n                getCheckout().id,\n                code,\n                options,\n            );\n        });\n    });\n\n    describe('#removeGiftCertificate()', () => {\n        it('removes a gift certificate', async () => {\n            const code = 'myGiftCertificate1234';\n            const options = { timeout: createTimeout() };\n\n            await checkoutService.removeGiftCertificate(code, options);\n\n            expect(giftCertificateRequestSender.removeGiftCertificate).toHaveBeenCalledWith(\n                getCheckout().id,\n                code,\n                options,\n            );\n        });\n    });\n\n    describe('#loadInstruments()', () => {\n        it('loads instruments', async () => {\n            const action = () => of(createAction(InstrumentActionType.LoadInstrumentsRequested));\n\n            jest.spyOn(instrumentActionCreator, 'loadInstruments').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.loadInstruments();\n\n            expect(instrumentActionCreator.loadInstruments).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(action, undefined);\n        });\n    });\n\n    describe('#deleteInstrument()', () => {\n        it('deletes an instrument', async () => {\n            const instrumentId = '456';\n            const deleteAction = () =>\n                of(\n                    createAction(InstrumentActionType.DeleteInstrumentRequested, null, {\n                        instrumentId,\n                    }),\n                );\n\n            jest.spyOn(instrumentActionCreator, 'deleteInstrument').mockReturnValue(deleteAction);\n\n            jest.spyOn(store, 'dispatch');\n\n            const loadAction = () =>\n                of(createAction(InstrumentActionType.LoadInstrumentsRequested));\n\n            jest.spyOn(instrumentActionCreator, 'loadInstruments').mockReturnValue(loadAction);\n\n            await checkoutService.deleteInstrument(instrumentId);\n\n            expect(instrumentActionCreator.deleteInstrument).toHaveBeenCalledWith(instrumentId);\n            expect(store.dispatch).toHaveBeenCalledWith(deleteAction, undefined);\n            expect(instrumentActionCreator.loadInstruments).toHaveBeenCalled();\n        });\n    });\n\n    describe('#clearError()', () => {\n        it('dispatches \"clear error\" action', () => {\n            jest.spyOn(errorActionCreator, 'clearError');\n\n            const error = new Error('Unexpected error');\n\n            checkoutService.clearError(error);\n\n            expect(errorActionCreator.clearError).toHaveBeenCalledWith(error);\n        });\n    });\n\n    describe('#initializeSpamProtection()', () => {\n        let options: SpamProtectionOptions;\n\n        beforeEach(() => {\n            options = { containerId: 'spamProtectionContainer' };\n\n            const action = () => of(createAction(SpamProtectionActionType.InitializeSucceeded));\n\n            jest.spyOn(spamProtectionActionCreator, 'initialize').mockReturnValue(action);\n\n            jest.spyOn(store, 'dispatch');\n        });\n\n        it('initializes spam protection', async () => {\n            await checkoutService.initializeSpamProtection(options);\n\n            expect(spamProtectionActionCreator.initialize).toHaveBeenCalledWith(options);\n        });\n    });\n\n    describe('#executeSpamCheck()', () => {\n        beforeEach(() => {\n            jest.spyOn(spamProtectionActionCreator, 'initialize').mockReturnValue(() =>\n                of(createAction(SpamProtectionActionType.InitializeSucceeded)),\n            );\n\n            jest.spyOn(spamProtectionActionCreator, 'verifyCheckoutSpamProtection').mockReturnValue(\n                () => of(createAction(SpamProtectionActionType.VerifyCheckoutRequested)),\n            );\n        });\n\n        it('executes spam check', async () => {\n            await checkoutService.executeSpamCheck();\n\n            expect(spamProtectionActionCreator.verifyCheckoutSpamProtection).toHaveBeenCalled();\n        });\n    });\n\n    describe('#CheckoutExtension', () => {\n        it('loads extensions', async () => {\n            await checkoutService.loadExtensions();\n\n            expect(extensionRequestSender.loadExtensions).toHaveBeenCalled();\n        });\n\n        it('loads extensions with timeout', async () => {\n            const options = {\n                timeout: createTimeout(),\n                params: { cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7' },\n            };\n\n            await checkoutService.loadExtensions(options);\n\n            expect(extensionRequestSender.loadExtensions).toHaveBeenCalledWith(options);\n        });\n\n        it('returns extensions', async () => {\n            const state = await checkoutService.loadExtensions();\n\n            expect(state.data.getExtensions()).toEqual(getExtensions());\n        });\n\n        it('dispatches action with queue id', async () => {\n            jest.spyOn(store, 'dispatch');\n\n            await checkoutService.loadExtensions();\n\n            expect(store.dispatch).toHaveBeenCalledWith(expect.any(Function), {\n                queueId: 'extensions',\n            });\n        });\n\n        it('render extensions', async () => {\n            const action = () => of(createAction(ExtensionActionType.RenderExtensionSucceeded));\n\n            jest.spyOn(extensionActionCreator, 'renderExtension').mockReturnValue(action);\n            jest.spyOn(extensionEventBroadcaster, 'listen');\n\n            const container = 'checkout.extension';\n            const region = ExtensionRegion.ShippingShippingAddressFormBefore;\n            const workerExtensionMessenger = new WorkerExtensionMessenger();\n\n            await checkoutService.renderExtension(container, region);\n\n            expect(extensionActionCreator.renderExtension).toHaveBeenCalledWith(\n                container,\n                region,\n                workerExtensionMessenger,\n            );\n            expect(extensionEventBroadcaster.listen).toHaveBeenCalled();\n        });\n\n        it('removes extension cache', async () => {\n            jest.spyOn(extensionMessenger, 'clearCacheByRegion');\n\n            const region = ExtensionRegion.ShippingShippingAddressFormBefore;\n\n            checkoutService.clearExtensionCache(region);\n\n            expect(extensionMessenger.clearCacheByRegion).toHaveBeenCalledWith(region);\n        });\n\n        it('posts a message to an extension', async () => {\n            jest.spyOn(extensionMessenger, 'post').mockImplementation(() => Promise.resolve());\n\n            const message = {\n                type: ExtensionMessageType.GetConsignments,\n                payload: {\n                    consignments: [],\n                },\n            };\n\n            checkoutService.postMessageToExtension('xxx', message);\n\n            expect(extensionMessenger.post).toHaveBeenCalledWith('xxx', message);\n        });\n\n        it('handles extension commands', () => {\n            const extensions = getExtensions();\n            const handler = jest.fn();\n\n            jest.spyOn(extensionMessenger, 'listenForCommand');\n\n            checkoutService.handleExtensionCommand(\n                extensions[0].id,\n                ExtensionCommandType.ReloadCheckout,\n                handler,\n            );\n\n            expect(extensionMessenger.listenForCommand).toHaveBeenCalledWith(\n                extensions[0].id,\n                ExtensionCommandType.ReloadCheckout,\n                handler,\n            );\n        });\n\n        it('handles extension queries', () => {\n            const extensions = getExtensions();\n            const handler = jest.fn();\n\n            jest.spyOn(extensionMessenger, 'listenForQuery');\n\n            checkoutService.handleExtensionQuery(\n                extensions[0].id,\n                ExtensionQueryType.GetConsignments,\n                handler,\n            );\n\n            expect(extensionMessenger.listenForQuery).toHaveBeenCalledWith(\n                extensions[0].id,\n                ExtensionQueryType.GetConsignments,\n                handler,\n            );\n        });\n    });\n\n    describe('#hydrateInitialState', () => {\n        it('creates instance with initial data', async () => {\n            const initialState: CheckoutInitialState = {\n                config: getConfig(),\n                formFields: getFormFields(),\n                checkout: getCheckout(),\n                extensions: getExtensions(),\n            };\n\n            const state = await checkoutService.hydrateInitialState(initialState);\n\n            expect(state.data.getCheckout()).toEqual(initialState.checkout);\n            expect(state.data.getConfig()).toEqual(initialState.config?.storeConfig);\n            expect(state.data.getCustomerAccountFields()).toEqual(\n                initialState.formFields?.customerAccount,\n            );\n            expect(state.data.getExtensions()).toEqual(initialState.extensions);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-service.ts",
    "content": "import { Action, ThunkAction } from '@bigcommerce/data-store';\nimport { Observable } from 'rxjs';\n\nimport { bindDecorator as bind } from '@bigcommerce/checkout-sdk/utility';\n\nimport { AddressRequestBody } from '../address';\nimport { B2BTokenActionCreator } from '../b2b-token';\nimport { BillingAddressActionCreator, BillingAddressRequestBody } from '../billing';\nimport { DataStoreProjection } from '../common/data-store';\nimport { ErrorActionCreator, ErrorMessageTransformer } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\nimport { ConfigActionCreator } from '../config';\nimport { CouponActionCreator, GiftCertificateActionCreator } from '../coupon';\nimport {\n    CustomerAccountRequestBody,\n    CustomerActionCreator,\n    CustomerAddressRequestBody,\n    CustomerCredentials,\n    CustomerInitializeOptions,\n    CustomerRequestOptions,\n    CustomerStrategyActionCreator,\n    ExecutePaymentMethodCheckoutOptions,\n    GuestCredentials,\n} from '../customer';\nimport {\n    ExtensionActionCreator,\n    ExtensionCommandMap,\n    ExtensionEventBroadcaster,\n    ExtensionMessage,\n    ExtensionMessenger,\n    ExtensionQueryMap,\n    ExtensionRegion,\n    WorkerExtensionMessenger,\n} from '../extension';\nimport { FormFieldsActionCreator } from '../form';\nimport { CountryActionCreator } from '../geography';\nimport { OrderActionCreator, OrderRequestBody } from '../order';\nimport {\n    OrderFinalizeOptions,\n    PaymentInitializeOptions,\n    PaymentMethodActionCreator,\n    PaymentRequestOptions,\n    PaymentStrategyActionCreator,\n} from '../payment';\nimport { InstrumentActionCreator } from '../payment/instrument';\nimport {\n    ConsignmentActionCreator,\n    ConsignmentAssignmentRequestBody,\n    ConsignmentsRequestBody,\n    ConsignmentUpdateRequestBody,\n    PickupOptionActionCreator,\n    PickupOptionRequestBody,\n    ShippingCountryActionCreator,\n    ShippingInitializeOptions,\n    ShippingRequestOptions,\n    ShippingStrategyActionCreator,\n} from '../shipping';\nimport { SignInEmailActionCreator, SignInEmailRequestBody } from '../signin-email';\nimport { SpamProtectionActionCreator, SpamProtectionOptions } from '../spam-protection';\nimport { StoreCreditActionCreator } from '../store-credit';\nimport { Subscriptions, SubscriptionsActionCreator } from '../subscription';\n\nimport { CheckoutRequestBody } from './checkout';\nimport CheckoutActionCreator from './checkout-action-creator';\nimport CheckoutInitialState from './checkout-initial-state';\nimport CheckoutParams from './checkout-params';\nimport CheckoutSelectors from './checkout-selectors';\nimport CheckoutStore from './checkout-store';\nimport createCheckoutServiceErrorTransformer from './create-checkout-service-error-transformer';\n\n/**\n * Responsible for completing the checkout process for the current customer.\n *\n * This object can be used to collect all information that is required for\n * checkout, such as shipping and billing information. It can also be used to\n * retrieve the current checkout state and subscribe to its changes.\n */\n@bind\nexport default class CheckoutService {\n    private _errorTransformer: ErrorMessageTransformer;\n\n    /**\n     * @internal\n     */\n    constructor(\n        private _store: CheckoutStore,\n        private _storeProjection: DataStoreProjection<CheckoutSelectors>,\n        private _extensionMessenger: ExtensionMessenger,\n        private _extensionEventBroadcaster: ExtensionEventBroadcaster,\n        private _b2bTokenActionCreator: B2BTokenActionCreator,\n        private _billingAddressActionCreator: BillingAddressActionCreator,\n        private _checkoutActionCreator: CheckoutActionCreator,\n        private _configActionCreator: ConfigActionCreator,\n        private _customerActionCreator: CustomerActionCreator,\n        private _consignmentActionCreator: ConsignmentActionCreator,\n        private _countryActionCreator: CountryActionCreator,\n        private _couponActionCreator: CouponActionCreator,\n        private _customerStrategyActionCreator: CustomerStrategyActionCreator,\n        private _errorActionCreator: ErrorActionCreator,\n        private _giftCertificateActionCreator: GiftCertificateActionCreator,\n        private _instrumentActionCreator: InstrumentActionCreator,\n        private _orderActionCreator: OrderActionCreator,\n        private _paymentMethodActionCreator: PaymentMethodActionCreator,\n        private _paymentStrategyActionCreator: PaymentStrategyActionCreator,\n        private _pickupOptionActionCreator: PickupOptionActionCreator,\n        private _shippingCountryActionCreator: ShippingCountryActionCreator,\n        private _shippingStrategyActionCreator: ShippingStrategyActionCreator,\n        private _signInEmailActionCreator: SignInEmailActionCreator,\n        private _spamProtectionActionCreator: SpamProtectionActionCreator,\n        private _storeCreditActionCreator: StoreCreditActionCreator,\n        private _subscriptionsActionCreator: SubscriptionsActionCreator,\n        private _formFieldsActionCreator: FormFieldsActionCreator,\n        private _extensionActionCreator: ExtensionActionCreator,\n        private _workerExtensionMessenger: WorkerExtensionMessenger,\n    ) {\n        this._errorTransformer = createCheckoutServiceErrorTransformer();\n    }\n\n    /**\n     * Returns a snapshot of the current checkout state.\n     *\n     * The method returns a new instance every time there is a change in the\n     * checkout state. You can query the state by calling any of its getter\n     * methods.\n     *\n     * ```js\n     * const state = service.getState();\n     *\n     * console.log(state.data.getOrder());\n     * console.log(state.errors.getSubmitOrderError());\n     * console.log(state.statuses.isSubmittingOrder());\n     * ```\n     *\n     * @returns The current customer's checkout state\n     */\n    getState(): CheckoutSelectors {\n        return this._storeProjection.getState();\n    }\n\n    /**\n     * Notifies all subscribers with the current state.\n     *\n     * When this method gets called, the subscribers get called regardless if\n     * they have any filters applied.\n     */\n    notifyState(): void {\n        this._storeProjection.notifyState();\n    }\n\n    /**\n     * Subscribes to any changes to the current state.\n     *\n     * The method registers a callback function and executes it every time there\n     * is a change in the checkout state.\n     *\n     * ```js\n     * service.subscribe(state => {\n     *     console.log(state.data.getCart());\n     * });\n     * ```\n     *\n     * The method can be configured to notify subscribers only regarding\n     * relevant changes, by providing a filter function.\n     *\n     * ```js\n     * const filter = state => state.data.getCart();\n     *\n     * // Only trigger the subscriber when the cart changes.\n     * service.subscribe(state => {\n     *     console.log(state.data.getCart())\n     * }, filter);\n     * ```\n     *\n     * @param subscriber - The function to subscribe to state changes.\n     * @param filters - One or more functions to filter out irrelevant state\n     * changes. If more than one function is provided, the subscriber will only\n     * be triggered if all conditions are met.\n     * @returns A function, if called, will unsubscribe the subscriber.\n     */\n    subscribe(\n        subscriber: (state: CheckoutSelectors) => void,\n        ...filters: Array<(state: CheckoutSelectors) => any>\n    ): () => void {\n        return this._storeProjection.subscribe(subscriber, ...filters);\n    }\n\n    /**\n     * Hydrates the checkout service with an initial state.\n     *\n     * The initial state can contain various checkout data such as cart items,\n     * customer information, and other relevant state.\n     *\n     * ```js\n     * const initialState = {\n     *     // ... initial checkout state data\n     * };\n     *\n     * const state = await service.hydrateInitialState(initialState);\n     *\n     * console.log(state.data.getCheckout());\n     * ```\n     *\n     * @alpha\n     * @param state - The initial state data to hydrate the checkout service with.\n     * @returns A promise that resolves to the current state after hydration.\n     */\n    hydrateInitialState(state: CheckoutInitialState): Promise<CheckoutSelectors> {\n        return this._dispatch(this._checkoutActionCreator.hydrateInitialState(state));\n    }\n\n    /**\n     * Loads the current checkout.\n     *\n     * This method can only be called if there is an active checkout. Also, it\n     * can only retrieve data that belongs to the current customer. When it is\n     * successfully executed, you can retrieve the data by calling\n     * `CheckoutStoreSelector#getCheckout`.\n     *\n     * ```js\n     * const state = await service.loadCheckout('0cfd6c06-57c3-4e29-8d7a-de55cc8a9052');\n     *\n     * console.log(state.data.getCheckout());\n     * ```\n     *\n     * @param id - The identifier of the checkout to load, or the default checkout if not provided.\n     * @param options - Options for loading the current checkout.\n     * @returns A promise that resolves to the current state.\n     */\n    loadCheckout(\n        id?: string,\n        options?: RequestOptions<CheckoutParams>,\n    ): Promise<CheckoutSelectors> {\n        return this._dispatch(\n            id\n                ? this._checkoutActionCreator.loadCheckout(id, options)\n                : this._checkoutActionCreator.loadDefaultCheckout(options),\n        );\n    }\n\n    /**\n     * Updates specific properties of the current checkout.\n     *\n     * ```js\n     * const state = await service.updateCheckout(checkout);\n     *\n     * console.log(state.data.getCheckout());\n     * ```\n     *\n     * @param payload - The checkout properties to be updated.\n     * @param options - Options for loading the current checkout.\n     * @returns A promise that resolves to the current state.\n     */\n    updateCheckout(\n        payload: CheckoutRequestBody,\n        options?: RequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._checkoutActionCreator.updateCheckout(payload, options);\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Loads an order by an id.\n     *\n     * The method can only retrieve an order if the order belongs to the current\n     * customer. If it is successfully executed, the data can be retrieved by\n     * calling `CheckoutStoreSelector#getOrder`.\n     *\n     * ```js\n     * const state = await service.loadOrder(123);\n     *\n     * console.log(state.data.getOrder());\n     * ```\n     *\n     * @param orderId - The identifier of the order to load.\n     * @param options - Options for loading the order.\n     * @returns A promise that resolves to the current state.\n     */\n    loadOrder(orderId: number, options?: RequestOptions): Promise<CheckoutSelectors> {\n        const loadCheckoutAction = this._orderActionCreator.loadOrder(orderId, options);\n        const formFieldsAction = this._formFieldsActionCreator.loadFormFields(options);\n        const loadConfigAction = this._configActionCreator.loadConfig(options);\n\n        return Promise.all([\n            this._dispatch(loadCheckoutAction),\n            this._dispatch(loadConfigAction, { queueId: 'config' }),\n            this._dispatch(formFieldsAction, { queueId: 'formFields' }),\n        ]).then(() => this.getState());\n    }\n\n    /**\n     * Submits an order, thereby completing a checkout process.\n     *\n     * Before you can submit an order, you must initialize the payment method\n     * chosen by the customer by calling `CheckoutService#initializePayment`.\n     *\n     * ```js\n     * await service.initializePayment({ methodId: 'braintree' });\n     * await service.submitOrder({\n     *     payment: {\n     *         methodId: 'braintree',\n     *         paymentData: {\n     *             ccExpiry: { month: 10, year: 20 },\n     *             ccName: 'BigCommerce',\n     *             ccNumber: '4111111111111111',\n     *             ccCvv: 123,\n     *         },\n     *     },\n     * });\n     * ```\n     *\n     * You are not required to include `paymentData` if the order does not\n     * require additional payment details. For example, the customer has already\n     * entered their payment details on the cart page using one of the hosted\n     * payment methods, such as PayPal. Or the customer has applied a gift\n     * certificate that exceeds the grand total amount.\n     *\n     * If the order is submitted successfully, you can retrieve the newly\n     * created order by calling `CheckoutStoreSelector#getOrder`.\n     *\n     * ```js\n     * const state = await service.submitOrder(payload);\n     *\n     * console.log(state.data.getOrder());\n     * ```\n     *\n     * @param payload - The request payload to submit for the current order.\n     * @param options - Options for submitting the current order.\n     * @returns A promise that resolves to the current state.\n     */\n    submitOrder(payload: OrderRequestBody, options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._paymentStrategyActionCreator.execute(payload, options);\n\n        return this._dispatch(action, { queueId: 'paymentStrategy' });\n    }\n\n    /**\n     * Finalizes the submission process for an order.\n     *\n     * This method is only required for certain hosted payment methods that\n     * require a customer to enter their credit card details on their website.\n     * You need to call this method once the customer has redirected back to\n     * checkout in order to complete the checkout process.\n     *\n     * If the method is called before order finalization is required or for a\n     * payment method that does not require order finalization, an error will be\n     * thrown. Conversely, if the method is called successfully, you should\n     * immediately redirect the customer to the order confirmation page.\n     *\n     * ```js\n     * try {\n     *     await service.finalizeOrderIfNeeded();\n     *\n     *     window.location.assign('/order-confirmation');\n     * } catch (error) {\n     *     if (error.type !== 'order_finalization_not_required') {\n     *         throw error;\n     *     }\n     * }\n     * ```\n     *\n     * @param options - Options for finalizing the current order.\n     * @returns A promise that resolves to the current state.\n     * @throws `OrderFinalizationNotRequiredError` error if order finalization\n     * is not required for the current order at the time of execution.\n     */\n    finalizeOrderIfNeeded(options?: OrderFinalizeOptions): Promise<CheckoutSelectors> {\n        const action = this._paymentStrategyActionCreator.finalize(options);\n\n        return this._dispatch(action, { queueId: 'paymentStrategy' });\n    }\n\n    /**\n     * Loads a list of payment methods available for checkout.\n     *\n     * If a customer enters their payment details before navigating to the\n     * checkout page (i.e.: using PayPal checkout button on the cart page), only\n     * one payment method will be available for the customer - the selected\n     * payment method. Otherwise, by default, all payment methods configured by\n     * the merchant will be available for the customer.\n     *\n     * Once the method is executed successfully, you can call\n     * `CheckoutStoreSelector#getPaymentMethods` to retrieve the list of payment\n     * methods.\n     *\n     * ```js\n     * const state = service.loadPaymentMethods();\n     *\n     * console.log(state.data.getPaymentMethods());\n     * ```\n     *\n     * @param options - Options for loading the payment methods that are\n     * available to the current customer.\n     * @returns A promise that resolves to the current state.\n     */\n    loadPaymentMethods(options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._paymentMethodActionCreator.loadPaymentMethods(options);\n\n        return this._dispatch(action, { queueId: 'paymentMethods' });\n    }\n\n    /**\n     * Loads a list of payment methods for given ids.\n     *\n     *\n     * Once the method is executed successfully, you can call\n     * `CheckoutStoreSelector#getPaymentMethods` to retrieve the list of payment\n     * methods.\n     *\n     * ```js\n     * const state = service.loadPaymentMethodsById(['applepay']);\n     *\n     * console.log(state.data.getPaymentMethodOrThrow('applepay'));\n     * ```\n     *\n     * @param methodIds - The identifier for the payment methods to load.\n     * @param options - Options for loading the payment methods that are\n     * available to the current customer.\n     * @returns A promise that resolves to the current state.\n     */\n    loadPaymentMethodByIds(\n        methodIds: string[],\n        options?: RequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._paymentMethodActionCreator.loadPaymentMethodsById(methodIds, options);\n\n        return this._dispatch(action, { queueId: 'paymentMethods' });\n    }\n\n    /**\n     * Loads a payment method by an id.\n     *\n     * This method does not work with multi-option payment providers. Due to its\n     * limitation, it is deprecated and will be removed in the future.\n     *\n     * @deprecated\n     * @internal\n     * @param methodId - The identifier for the payment method to load.\n     * @param options - Options for loading the payment method.\n     * @returns A promise that resolves to the current state.\n     */\n    loadPaymentMethod(methodId: string, options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._paymentMethodActionCreator.loadPaymentMethod(methodId, options);\n\n        return this._dispatch(action, { queueId: 'paymentMethods' });\n    }\n\n    /**\n     * Initializes the payment step of a checkout process.\n     *\n     * Before a payment method can accept payment details, it must first be\n     * initialized. Some payment methods require you to provide additional\n     * initialization options. For example, you can provide an element ID for\n     * Amazon Pay if you want users to be able to select a different payment\n     * method by clicking on the element.\n     *\n     * ```js\n     * await service.initializePayment({\n     *     methodId: 'amazonpay',\n     *     amazonpay: {\n     *         editButtonId: 'edit-button',\n     *     },\n     * });\n     * ```\n     *\n     * @param options - Options for initializing the payment step of checkout.\n     * @returns A promise that resolves to the current state.\n     */\n    initializePayment(options: PaymentInitializeOptions): Promise<CheckoutSelectors> {\n        const action = this._paymentStrategyActionCreator.initialize(options);\n\n        return this._dispatch(action, { queueId: 'paymentStrategy' });\n    }\n\n    /**\n     * De-initializes the payment step of a checkout process.\n     *\n     * The method should be called once you no longer require a payment method\n     * to be initialized. It can perform any necessary clean-up behind the\n     * scene, i.e.: remove DOM nodes or event handlers that are attached as a\n     * result of payment initialization.\n     *\n     * ```js\n     * await service.deinitializePayment({\n     *     methodId: 'amazonpay',\n     * });\n     * ```\n     *\n     * @param options - Options for deinitializing the payment step of checkout.\n     * @returns A promise that resolves to the current state.\n     */\n    deinitializePayment(options: PaymentRequestOptions): Promise<CheckoutSelectors> {\n        const action = this._paymentStrategyActionCreator.deinitialize(options);\n\n        return this._dispatch(action, { queueId: 'paymentStrategy' });\n    }\n\n    /**\n     * Loads a list of countries available for billing.\n     *\n     * Once you make a successful request, you will be able to retrieve the list\n     * of countries by calling `CheckoutStoreSelector#getBillingCountries`.\n     *\n     * ```js\n     * const state = await service.loadBillingCountries();\n     *\n     * console.log(state.data.getBillingCountries());\n     * ```\n     *\n     * @param options - Options for loading the available billing countries.\n     * @returns A promise that resolves to the current state.\n     */\n    loadBillingCountries(options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._countryActionCreator.loadCountries(options);\n\n        return this._dispatch(action, { queueId: 'billingCountries' });\n    }\n\n    /**\n     * Loads a list of countries available for shipping.\n     *\n     * The list is determined based on the shipping zones configured by a\n     * merchant. Once you make a successful call, you will be able to retrieve\n     * the list of available shipping countries by calling\n     * `CheckoutStoreSelector#getShippingCountries`.\n     *\n     * ```js\n     * const state = await service.loadShippingCountries();\n     *\n     * console.log(state.data.getShippingCountries());\n     * ```\n     *\n     * @param options - Options for loading the available shipping countries.\n     * @returns A promise that resolves to the current state.\n     */\n    loadShippingCountries(options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._shippingCountryActionCreator.loadCountries(options);\n\n        return this._dispatch(action, { queueId: 'shippingCountries' });\n    }\n\n    /**\n     * Loads a list of pickup options for a given criteria.\n     *\n     * ```js\n     * const consignmentId = '1';\n     * const searchArea = {\n     *     radius: {\n     *         value: 1.4,\n     *         unit: 'KM'\n     *     },\n     *     coordinates: {\n     *         latitude: 1.4,\n     *         longitude: 0\n     *     },\n     * };\n     * const state = await service.loadPickupOptions({ consignmentId, searchArea });\n     *\n     * console.log(state.data.getPickupOptions(consignmentId, searchArea));\n     * ```\n     *\n     * @alpha\n     * @param query - Options for loading the available shipping countries.\n     * @returns A promise that resolves to the current state.\n     */\n    loadPickupOptions(query: PickupOptionRequestBody): Promise<CheckoutSelectors> {\n        const action = this._pickupOptionActionCreator.loadPickupOptions(query);\n\n        return this._dispatch(action, { queueId: 'pickupOptions' });\n    }\n\n    /**\n     * Loads a set of form fields that should be presented to customers in order\n     * to capture their billing address.\n     *\n     * Once the method has been executed successfully, you can call\n     * `CheckoutStoreSelector#getBillingAddressFields` to retrieve the set of\n     * form fields.\n     *\n     * ```js\n     * const state = service.loadBillingAddressFields();\n     *\n     * console.log(state.data.getBillingAddressFields('US'));\n     * ```\n     *\n     * @param options - Options for loading the billing address form fields.\n     * @returns A promise that resolves to the current state.\n     */\n    loadBillingAddressFields(options?: RequestOptions): Promise<CheckoutSelectors> {\n        return this.loadBillingCountries(options);\n    }\n\n    /**\n     * Loads a set of form fields that should be presented to customers in order\n     * to capture their shipping address.\n     *\n     * Once the method has been executed successfully, you can call\n     * `CheckoutStoreSelector#getShippingAddressFields` to retrieve the set of\n     * form fields.\n     *\n     * ```js\n     * const state = service.loadShippingAddressFields();\n     *\n     * console.log(state.data.getShippingAddressFields('US'));\n     * ```\n     *\n     * @param options - Options for loading the shipping address form fields.\n     * @returns A promise that resolves to the current state.\n     */\n    loadShippingAddressFields(options?: RequestOptions): Promise<CheckoutSelectors> {\n        return this.loadShippingCountries(options);\n    }\n\n    /**\n     * Initializes the sign-in step of a checkout process.\n     *\n     * Some payment methods, such as Amazon Pay, have their own sign-in flow. In\n     * order to support them, this method must be called.\n     *\n     * ```js\n     * await service.initializeCustomer({\n     *     methodId: 'amazonpay',\n     *     amazonpay: {\n     *         container: 'signInButton',\n     *     },\n     * });\n     * ```\n     *\n     * @param options - Options for initializing the customer step of checkout.\n     * @returns A promise that resolves to the current state.\n     */\n    initializeCustomer(options?: CustomerInitializeOptions): Promise<CheckoutSelectors> {\n        const action = this._customerStrategyActionCreator.initialize(options);\n\n        return this._dispatch(action, { queueId: 'customerStrategy' });\n    }\n\n    /**\n     * De-initializes the sign-in step of a checkout process.\n     *\n     * It should be called once you no longer want to prompt customers to sign\n     * in. It can perform any necessary clean-up behind the scene, i.e.: remove\n     * DOM nodes or event handlers that are attached as a result of customer\n     * initialization.\n     *\n     * ```js\n     * await service.deinitializeCustomer({\n     *     methodId: 'amazonpay',\n     * });\n     * ```\n     *\n     * @param options - Options for deinitializing the customer step of checkout.\n     * @returns A promise that resolves to the current state.\n     */\n    deinitializeCustomer(options?: CustomerRequestOptions): Promise<CheckoutSelectors> {\n        const action = this._customerStrategyActionCreator.deinitialize(options);\n\n        return this._dispatch(action, { queueId: 'customerStrategy' });\n    }\n\n    /**\n     * Sends a email that contains a single-use sign-in link. When a valid links is clicked,\n     * signs in the customer without requiring any password, redirecting them to the account page if no redirectUrl is provided.\n     *\n     *\n     * ```js\n     * checkoutService.sendSignInEmail({ email: 'foo@bar.com', redirectUrl: 'checkout' });\n     * ```\n     *\n     * @param signInEmailRequest - The sign-in email request values.\n     * @param options - Options for the send email request.\n     * @returns A promise that resolves to the current state.\n     */\n    sendSignInEmail(\n        signInEmailRequest: SignInEmailRequestBody,\n        options?: RequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._signInEmailActionCreator.sendSignInEmail(signInEmailRequest, options);\n\n        return this._dispatch(action, { queueId: 'signInEmail' });\n    }\n\n    /**\n     * Retrieves a B2B authentication token for the current customer.\n     *\n     * The token can be used to authenticate requests to B2B REST and GraphQL\n     * endpoints. The customer must be signed in for this method to succeed.\n     * The B2B base URL and client ID are read from the checkout settings config.\n     *\n     * ```js\n     * const state = await service.getB2BToken();\n     *\n     * console.log(state.data.getB2BToken());\n     * ```\n     *\n     * @param options - Options for the request.\n     * @returns A promise that resolves to the current state.\n     */\n    getB2BToken(options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._b2bTokenActionCreator.loadB2BToken(options);\n\n        return this._dispatch(action, { queueId: 'b2bToken' });\n    }\n\n    /**\n     * Creates a customer account.\n     *\n     * @remarks\n     * ```js\n     * checkoutService.createCustomerAccount({\n     *   email: 'foo@bar.com',\n     *   firstName: 'Foo',\n     *   lastName: 'Bar',\n     *   password: 'password',\n     *   acceptsMarketingEmails: true,\n     *   customFields: [],\n     * });\n     * ```\n     * Please note that `createCustomerAccount` is currently in an early stage\n     * of development. Therefore the API is unstable and not ready for public\n     * consumption.\n     *\n     * @alpha\n     * @param customerAccount - The customer account data.\n     * @param options - Options for creating customer account.\n     * @returns A promise that resolves to the current state.\n     */\n    createCustomerAccount(\n        customerAccount: CustomerAccountRequestBody,\n        options?: RequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._customerActionCreator.createCustomer(customerAccount, options);\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Creates a customer account address.\n     *\n     * @remarks\n     * ```js\n     * checkoutService.createCustomerAddress({\n     *   firstName: 'Foo',\n     *   lastName: 'Bar',\n     *   address1: '55 Market St',\n     *   stateOrProvinceCode: 'CA',\n     *   countryCode: 'US',\n     *   postalCode: '90110',\n     *   customFields: [],\n     * });\n     * ```\n     * Please note that `createCustomerAccountAddress` is currently in an early stage\n     * of development. Therefore the API is unstable and not ready for public\n     * consumption.\n     *\n     * @alpha\n     * @param customerAddress - The customer account data.\n     * @param options - Options for creating customer account.\n     * @returns A promise that resolves to the current state.\n     */\n    createCustomerAddress(\n        customerAddress: CustomerAddressRequestBody,\n        options?: RequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._customerActionCreator.createAddress(customerAddress, options);\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Updates the subscriptions associated to an email.\n     *\n     * @param subscriptions - The email and associated subscriptions to update.\n     * @param options - Options for continuing as a guest.\n     * @returns A promise that resolves to the current state.\n     */\n    updateSubscriptions(\n        subscriptions: Subscriptions,\n        options?: RequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._subscriptionsActionCreator.updateSubscriptions(subscriptions, options);\n\n        return this._dispatch(action, { queueId: 'subscriptions' });\n    }\n\n    /**\n     * Continues to check out as a guest.\n     *\n     * If your Checkout Settings allow it, your customers could continue the checkout as guests (without signing in).\n     * If you have enabled the checkout setting \"Prompt existing accounts to sign in\", this information is\n     * exposed as part of the [Customer](../interfaces/customer.md) object.\n     *\n     * Once they provide their email address, it will be stored as\n     * part of their [billing address](../interfaces/billingaddress.md).\n     *\n     * @param credentials - The guest credentials to use, with optional subscriptions.\n     * @param options - Options for continuing as a guest.\n     * @returns A promise that resolves to the current state.\n     */\n    continueAsGuest(\n        credentials: GuestCredentials,\n        options?: RequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._billingAddressActionCreator.continueAsGuest(credentials, options);\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Signs into a customer's registered account.\n     *\n     * Once the customer is signed in successfully, the checkout state will be\n     * populated with information associated with the customer, such as their\n     * saved addresses. You can call `CheckoutStoreSelector#getCustomer` to\n     * retrieve the data.\n     *\n     * ```js\n     * const state = await service.signInCustomer({\n     *     email: 'foo@bar.com',\n     *     password: 'password123',\n     * });\n     *\n     * console.log(state.data.getCustomer());\n     * ```\n     *\n     * @param credentials - The credentials to be used for signing in the customer.\n     * @param options - Options for signing in the customer.\n     * @returns A promise that resolves to the current state.\n     */\n    signInCustomer(\n        credentials: CustomerCredentials,\n        options?: CustomerRequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._customerStrategyActionCreator.signIn(credentials, options);\n\n        return this._dispatch(action, { queueId: 'customerStrategy' });\n    }\n\n    /**\n     * Signs out the current customer if they are previously signed in.\n     *\n     * Once the customer is successfully signed out, the checkout state will be\n     * reset automatically.\n     *\n     * ```js\n     * const state = await service.signOutCustomer();\n     *\n     * // The returned object should not contain information about the previously signed-in customer.\n     * console.log(state.data.getCustomer());\n     * ```\n     *\n     * When a store has \"Allow customers to access their cart across multiple devices\" enabled, signing out\n     * will remove the cart/checkout data from the current session. An error with type=\"checkout_not_available\" will be thrown.\n     *\n     * ```js\n     * try {\n     *   await service.signOutCustomer();\n     * } catch (error) {\n     *   if (error.type === 'checkout_not_available') {\n     *     window.top.location.assign('/');\n     *   }\n     * }\n     * ```\n     *\n     * @param options - Options for signing out the customer.\n     * @returns A promise that resolves to the current state.\n     */\n    signOutCustomer(options?: CustomerRequestOptions): Promise<CheckoutSelectors> {\n        const action = this._customerStrategyActionCreator.signOut(options);\n\n        return this._dispatch(action, { queueId: 'customerStrategy' });\n    }\n\n    /**\n     * Executes custom checkout of the priority payment method.\n     *\n     * Some payment methods, such as Bolt, can use their own checkout\n     * with autofilled customers data, to make checkout passing process\n     * easier and faster for customers with Bolt account.\n     *\n     * ```js\n     * await service.executePaymentMethodCheckout({\n     *     methodId: 'bolt',\n     *     fallback: () => {},\n     * });\n     * ```\n     *\n     * @param options - Options for executing payment method checkout.\n     * @returns A promise that resolves to the current state.\n     */\n    executePaymentMethodCheckout(\n        options?: ExecutePaymentMethodCheckoutOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._customerStrategyActionCreator.executePaymentMethodCheckout(options);\n\n        return this._dispatch(action, { queueId: 'customerStrategy' });\n    }\n\n    /**\n     * Loads a list of shipping options available for checkout.\n     *\n     * Available shipping options can only be determined once a customer\n     * provides their shipping address. If the method is executed successfully,\n     * `CheckoutStoreSelector#getShippingOptions` can be called to retrieve the\n     * list of shipping options.\n     *\n     * ```js\n     * const state = await service.loadShippingOptions();\n     *\n     * console.log(state.data.getShippingOptions());\n     * ```\n     *\n     * @param options - Options for loading the available shipping options.\n     * @returns A promise that resolves to the current state.\n     */\n    loadShippingOptions(options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._consignmentActionCreator.loadShippingOptions(options);\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Initializes the shipping step of a checkout process.\n     *\n     * Some payment methods, such as Amazon Pay, can provide shipping\n     * information to be used for checkout. In order to support them, this\n     * method must be called.\n     *\n     * ```js\n     * await service.initializeShipping({\n     *     methodId: 'amazonpay',\n     *     amazonpay: {\n     *         editAddressButtonId: 'changeAddressButton',\n     *     },\n     * });\n     * ```\n     *\n     * @param options - Options for initializing the shipping step of checkout.\n     * @returns A promise that resolves to the current state.\n     */\n    initializeShipping(options?: ShippingInitializeOptions): Promise<CheckoutSelectors> {\n        const action = this._shippingStrategyActionCreator.initialize(options);\n\n        return this._dispatch(action, { queueId: 'shippingStrategy' });\n    }\n\n    /**\n     * De-initializes the shipping step of a checkout process.\n     *\n     * It should be called once you no longer need to collect shipping details.\n     * It can perform any necessary clean-up behind the scene, i.e.: remove DOM\n     * nodes or event handlers that are attached as a result of shipping\n     * initialization.\n     *\n     * ```js\n     * await service.deinitializeShipping({\n     *     methodId: 'amazonpay',\n     * });\n     * ```\n     *\n     * @param options - Options for deinitializing the shipping step of checkout.\n     * @returns A promise that resolves to the current state.\n     */\n    deinitializeShipping(options?: ShippingRequestOptions): Promise<CheckoutSelectors> {\n        const action = this._shippingStrategyActionCreator.deinitialize(options);\n\n        return this._dispatch(action, { queueId: 'shippingStrategy' });\n    }\n\n    /**\n     * Selects a shipping option for the current address.\n     *\n     * If a shipping option has an additional cost, the quote for the current\n     * order will be adjusted once the option is selected.\n     *\n     * ```js\n     * const state = await service.selectShippingOption('address-id', 'shipping-option-id');\n     *\n     * console.log(state.data.getSelectedShippingOption());\n     * ```\n     *\n     * @param shippingOptionId - The identifier of the shipping option to\n     * select.\n     * @param options - Options for selecting the shipping option.\n     * @returns A promise that resolves to the current state.\n     */\n    selectShippingOption(\n        shippingOptionId: string,\n        options?: ShippingRequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._shippingStrategyActionCreator.selectOption(shippingOptionId, options);\n\n        return this._dispatch(action, { queueId: 'shippingStrategy' });\n    }\n\n    /**\n     * Updates the shipping address for the current checkout.\n     *\n     * When a customer updates their shipping address for an order, they will\n     * see an updated list of shipping options and the cost for each option,\n     * unless no options are available. If the update is successful, you can\n     * call `CheckoutStoreSelector#getShippingAddress` to retrieve the address.\n     *\n     * If the shipping address changes and the selected shipping option becomes\n     * unavailable for the updated address, the shipping option will be\n     * deselected.\n     *\n     * You can submit an address that is partially complete. The address does\n     * not get validated until you submit the order.\n     *\n     * ```js\n     * const state = await service.updateShippingAddress(address);\n     *\n     * console.log(state.data.getShippingAddress());\n     * ```\n     *\n     * @param address - The address to be used for shipping.\n     * @param options - Options for updating the shipping address.\n     * @returns A promise that resolves to the current state.\n     */\n    updateShippingAddress(\n        address: Partial<AddressRequestBody>,\n        options?: ShippingRequestOptions<CheckoutParams>,\n    ): Promise<CheckoutSelectors> {\n        const action = this._shippingStrategyActionCreator.updateAddress(address, options);\n\n        return this._dispatch(action, { queueId: 'shippingStrategy' });\n    }\n\n    /**\n     * Creates consignments given a list.\n     *\n     * Note: this is used when items need to be shipped to multiple addresses,\n     * for single shipping address, use `CheckoutService#updateShippingAddress`.\n     *\n     * When consignments are created, an updated list of shipping options will\n     * become available for each consignment, unless no options are available.\n     * If the update is successful, you can call\n     * `CheckoutStoreSelector#getConsignments` to retrieve the updated list of\n     * consignments.'\n     *\n     * Beware that if a consignment includes all line items from another\n     * consignment, that consignment will be deleted as a valid consignment must\n     * include at least one valid line item.\n     *\n     * You can submit an address that is partially complete. The address does\n     * not get validated until you submit the order.\n     *\n     * ```js\n     * const state = await service.createConsignments(consignments);\n     *\n     * console.log(state.data.getConsignments());\n     * ```\n     *\n     * @param consignments - The list of consignments to be created.\n     * @param options - Options for updating the shipping address.\n     * @returns A promise that resolves to the current state.\n     */\n    createConsignments(\n        consignments: ConsignmentsRequestBody,\n        options?: RequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._consignmentActionCreator.createConsignments(consignments, options);\n\n        return this._dispatch(action, { queueId: 'shippingStrategy' });\n    }\n\n    /**\n     * Deletes a consignment\n     *\n     * ```js\n     * const state = await service.deleteConsignment('55c96cda6f04c');\n     *\n     * console.log(state.data.getConsignments());\n     * ```\n     *\n     * @param consignmentId - The ID of the consignment to be deleted\n     * @param options - Options for the consignment delete request\n     * @returns A promise that resolves to the current state.\n     */\n    deleteConsignment(consignmentId: string, options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._consignmentActionCreator.deleteConsignment(consignmentId, options);\n\n        return this._dispatch(action, { queueId: 'shippingStrategy' });\n    }\n\n    /**\n     * Updates a specific consignment.\n     *\n     * Note: this is used when items need to be shipped to multiple addresses,\n     * for single shipping address, use `CheckoutService#selectShippingOption`.\n     *\n     * When a shipping address for a consignment is updated, an updated list of\n     * shipping options will become available for the consignment, unless no\n     * options are available. If the update is successful, you can call\n     * `CheckoutStoreSelector#getConsignments` to retrieve updated list of\n     * consignments.\n     *\n     * Beware that if the updated consignment includes all line items from another\n     * consignment, that consignment will be deleted as a valid consignment must\n     * include at least one valid line item.\n     *\n     * If the shipping address changes and the selected shipping option becomes\n     * unavailable for the updated address, the shipping option will be\n     * deselected.\n     *\n     * You can submit an address that is partially complete. The address does\n     * not get validated until you submit the order.\n     *\n     * ```js\n     * const state = await service.updateConsignment(consignment);\n     *\n     * console.log(state.data.getConsignments());\n     * ```\n     *\n     * @param consignment - The consignment data that will be used.\n     * @param options - Options for updating the shipping address.\n     * @returns A promise that resolves to the current state.\n     */\n    updateConsignment(\n        consignment: ConsignmentUpdateRequestBody,\n        options?: RequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._consignmentActionCreator.updateConsignment(consignment, options);\n\n        return this._dispatch(action, { queueId: 'shippingStrategy' });\n    }\n\n    /**\n     * Convenience method that assigns items to be shipped to a specific address.\n     *\n     * Note: this method finds an existing consignment that matches the provided address\n     * and assigns the provided items. If no consignment matches the address, a new one\n     * will be created.\n     *\n     * @param consignment - The consignment data that will be used.\n     * @param options - Options for the request\n     * @returns A promise that resolves to the current state.\n     */\n    assignItemsToAddress(\n        consignment: ConsignmentAssignmentRequestBody,\n        options?: RequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._consignmentActionCreator.assignItemsByAddress(consignment, options);\n\n        return this._dispatch(action, { queueId: 'shippingStrategy' });\n    }\n\n    /**\n     * Convenience method that unassigns items from a specific shipping address.\n     *\n     * Note: this method finds an existing consignment that matches the provided address\n     * and unassigns the specified items. If the consignment ends up with no line items\n     * after the unassignment, it will be deleted.\n     *\n     * @param consignment - The consignment data that will be used.\n     * @param options - Options for the request\n     * @returns A promise that resolves to the current state.\n     */\n    unassignItemsToAddress(\n        consignment: ConsignmentAssignmentRequestBody,\n        options?: RequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._consignmentActionCreator.unassignItemsByAddress(consignment, options);\n\n        return this._dispatch(action, { queueId: 'shippingStrategy' });\n    }\n\n    /**\n     * Selects a shipping option for a given consignment.\n     *\n     * Note: this is used when items need to be shipped to multiple addresses,\n     * for single shipping address, use `CheckoutService#updateShippingAddress`.\n     *\n     * If a shipping option has an additional cost, the quote for the current\n     * order will be adjusted once the option is selected.\n     *\n     * ```js\n     * const state = await service.selectConsignmentShippingOption(consignmentId, optionId);\n     *\n     * console.log(state.data.getConsignments());\n     * ```\n     *\n     * @param consignmentId - The identified of the consignment to be updated.\n     * @param shippingOptionId - The identifier of the shipping option to\n     * select.\n     * @param options - Options for selecting the shipping option.\n     * @returns A promise that resolves to the current state.\n     */\n    selectConsignmentShippingOption(\n        consignmentId: string,\n        shippingOptionId: string,\n        options?: ShippingRequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._consignmentActionCreator.updateShippingOption(\n            {\n                id: consignmentId,\n                shippingOptionId,\n            },\n            options,\n        );\n\n        return this._dispatch(action, { queueId: 'shippingStrategy' });\n    }\n\n    /**\n     * Updates the billing address for the current checkout.\n     *\n     * A customer must provide their billing address before they can proceed to\n     * pay for their order.\n     *\n     * You can submit an address that is partially complete. The address does\n     * not get validated until you submit the order.\n     *\n     * ```js\n     * const state = await service.updateBillingAddress(address);\n     *\n     * console.log(state.data.getBillingAddress());\n     * ```\n     *\n     * @param address - The address to be used for billing.\n     * @param options - Options for updating the billing address.\n     * @returns A promise that resolves to the current state.\n     */\n    updateBillingAddress(\n        address: Partial<BillingAddressRequestBody>,\n        options: RequestOptions = {},\n    ): Promise<CheckoutSelectors> {\n        const action = this._billingAddressActionCreator.updateAddress(address, options);\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Applies or removes customer's store credit code to the current checkout.\n     *\n     * Once the store credit gets applied, the outstanding balance will be adjusted accordingly.\n     *\n     * ```js\n     * const state = await service.applyStoreCredit(true);\n     *\n     * console.log(state.data.getCheckout().outstandingBalance);\n     * ```\n     *\n     * @param options - Options for applying store credit.\n     * @returns A promise that resolves to the current state.\n     */\n    applyStoreCredit(\n        useStoreCredit: boolean,\n        options?: RequestOptions,\n    ): Promise<CheckoutSelectors> {\n        const action = this._storeCreditActionCreator.applyStoreCredit(useStoreCredit, options);\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Applies a coupon code to the current checkout.\n     *\n     * Once the coupon code gets applied, the quote for the current checkout will\n     * be adjusted accordingly. The same coupon code cannot be applied more than\n     * once.\n     *\n     * ```js\n     * await service.applyCoupon('COUPON');\n     * ```\n     *\n     * @param code - The coupon code to apply to the current checkout.\n     * @param options - Options for applying the coupon code.\n     * @returns A promise that resolves to the current state.\n     */\n    applyCoupon(code: string, options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._couponActionCreator.applyCoupon(code, options);\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Removes a coupon code from the current checkout.\n     *\n     * Once the coupon code gets removed, the quote for the current checkout will\n     * be adjusted accordingly.\n     *\n     * ```js\n     * await service.removeCoupon('COUPON');\n     * ```\n     *\n     * @param code - The coupon code to remove from the current checkout.\n     * @param options - Options for removing the coupon code.\n     * @returns A promise that resolves to the current state.\n     */\n    removeCoupon(code: string, options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._couponActionCreator.removeCoupon(code, options);\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Applies a gift certificate to the current checkout.\n     *\n     * Once the gift certificate gets applied, the quote for the current\n     * checkout will be adjusted accordingly.\n     *\n     * ```js\n     * await service.applyGiftCertificate('GIFT_CERTIFICATE');\n     * ```\n     *\n     * @param code - The gift certificate to apply to the current checkout.\n     * @param options - Options for applying the gift certificate.\n     * @returns A promise that resolves to the current state.\n     */\n    applyGiftCertificate(code: string, options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._giftCertificateActionCreator.applyGiftCertificate(code, options);\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Removes a gift certificate from an order.\n     *\n     * Once the gift certificate gets removed, the quote for the current\n     * checkout will be adjusted accordingly.\n     *\n     * ```js\n     * await service.removeGiftCertificate('GIFT_CERTIFICATE');\n     * ```\n     *\n     * @param code - The gift certificate to remove from the current checkout.\n     * @param options - Options for removing the gift certificate.\n     * @returns A promise that resolves to the current state.\n     */\n    removeGiftCertificate(code: string, options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._giftCertificateActionCreator.removeGiftCertificate(code, options);\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Loads a list of payment instruments associated with a customer.\n     *\n     * Once the method has been called successfully, you can retrieve the list\n     * of payment instruments by calling `CheckoutStoreSelector#getInstruments`.\n     * If the customer does not have any payment instruments on record, i.e.:\n     * credit card, you will get an empty list instead.\n     *\n     * ```js\n     * const state = service.loadInstruments();\n     *\n     * console.log(state.data.getInstruments());\n     * ```\n     *\n     * @returns A promise that resolves to the current state.\n     */\n    loadInstruments(): Promise<CheckoutSelectors> {\n        const action = this._instrumentActionCreator.loadInstruments();\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Deletes a payment instrument by an id.\n     *\n     * Once an instrument gets removed, it can no longer be retrieved using\n     * `CheckoutStoreSelector#getInstruments`.\n     *\n     * ```js\n     * const state = service.deleteInstrument('123');\n     *\n     * console.log(state.data.getInstruments());\n     * ```\n     *\n     * @param instrumentId - The identifier of the payment instrument to delete.\n     * @returns A promise that resolves to the current state.\n     */\n    deleteInstrument(instrumentId: string): Promise<CheckoutSelectors> {\n        const action = this._instrumentActionCreator.deleteInstrument(instrumentId);\n\n        return this._dispatch(action).then(() => this.loadInstruments());\n    }\n\n    /**\n     * Clear errors that have been collected from previous calls.\n     *\n     * ```js\n     * const state = await service.clearError(error);\n     *\n     * console.log(state.errors.getError());\n     * ```\n     *\n     * @param error - Specific error object to clear\n     * @returns A promise that resolves to the current state.\n     */\n    clearError(error: Error): Promise<CheckoutSelectors> {\n        const action = this._errorActionCreator.clearError(error);\n\n        return this._dispatch(action);\n    }\n\n    /**\n     * Initializes the spam protection for order creation.\n     *\n     * Note: Use `CheckoutService#executeSpamCheck` instead.\n     * You do not need to call this method before calling\n     * `CheckoutService#executeSpamCheck`.\n     *\n     * With spam protection enabled, the customer has to be verified as\n     * a human. The order creation will fail if spam protection\n     * is enabled but verification fails.\n     *\n     * ```js\n     * await service.initializeSpamProtection();\n     * ```\n     *\n     * @param options - Options for initializing spam protection.\n     * @returns A promise that resolves to the current state.\n     * @deprecated - Use CheckoutService#executeSpamCheck instead.\n     */\n    initializeSpamProtection(options: SpamProtectionOptions): Promise<CheckoutSelectors> {\n        const action = this._spamProtectionActionCreator.initialize(options);\n\n        return this._dispatch(action, { queueId: 'spamProtection' });\n    }\n\n    /**\n     * Verifies whether the current checkout is created by a human.\n     *\n     * Note: this method will do the initialization, therefore you do not\n     * need to call `CheckoutService#initializeSpamProtection`\n     * before calling this method.\n     *\n     * With spam protection enabled, the customer has to be verified as\n     * a human. The order creation will fail if spam protection\n     * is enabled but verification fails. You should call this method before\n     * `submitOrder` method is called (i.e.: when the shopper\n     * first gets to the payment step).\n     *\n     * **Note**: You need to enable Google ReCAPTCHA bot protection in your Checkout Settings.\n     *\n     * ```js\n     * await service.executeSpamCheck();\n     * ```\n     *\n     * @returns A promise that resolves to the current state.\n     */\n    executeSpamCheck(): Promise<CheckoutSelectors> {\n        const action = this._spamProtectionActionCreator.verifyCheckoutSpamProtection();\n\n        return this._dispatch(action, { queueId: 'spamProtection' });\n    }\n\n    /**\n     * Loads a list of extensions available for checkout.\n     *\n     * ```js\n     * const state = await service.loadExtensions();\n     *\n     * console.log(state.data.getExtensions());\n     * ```\n     *\n     * @alpha\n     * @param options - Options for loading the extensions that are\n     * available to the current customer.\n     * @returns A promise that resolves to the current state.\n     */\n    loadExtensions(options?: RequestOptions): Promise<CheckoutSelectors> {\n        const action = this._extensionActionCreator.loadExtensions(options);\n\n        return this._dispatch(action, { queueId: 'extensions' });\n    }\n\n    /**\n     * Renders an extension for a checkout extension region.\n     * Currently, only one extension is allowed per region.\n     *\n     * @alpha\n     * @param container - The ID of a container which the extension should be inserted.\n     * @param region - The name of an area where the extension should be presented.\n     * @returns A promise that resolves to the current state.\n     */\n    async renderExtension(container: string, region: ExtensionRegion): Promise<CheckoutSelectors> {\n        const action = this._extensionActionCreator.renderExtension(\n            container,\n            region,\n            this._workerExtensionMessenger,\n        );\n        const state = await this._dispatch(action, { queueId: 'extensions' });\n\n        this._extensionEventBroadcaster.listen();\n\n        return state;\n    }\n\n    /**\n     * Clear cache for a checkout extension when removing it from UI.\n     * This function should be used whenver an extension is removed from the UI.\n     *\n     * @alpha\n     * @param region - The name of an area where the extension should be presented.\n     */\n    clearExtensionCache(region: ExtensionRegion): void {\n        this._extensionMessenger.clearCacheByRegion(region);\n    }\n\n    /**\n     * Posts a message to a checkout extension.\n     *\n     * @alpha\n     * @param extensionId - The ID of an extension to post the event to.\n     * @param message - The message to post to an extension.\n     */\n    postMessageToExtension(extensionId: string, message: ExtensionMessage): void {\n        this._extensionMessenger.post(extensionId, message);\n    }\n\n    /**\n     * Manages the command handler for an extension.\n     *\n     * @alpha\n     * @param extensionId - The ID of the extension sending the command.\n     * @param command - The command to be handled.\n     * @param handler - The handler function for the extension command.\n     * @returns A function that, when called, will deregister the command handler.\n     */\n    handleExtensionCommand<T extends keyof ExtensionCommandMap>(\n        extensionId: string,\n        command: T,\n        handler: (command: ExtensionCommandMap[T]) => Promise<void> | void,\n    ): () => void {\n        return this._extensionMessenger.listenForCommand(extensionId, command, handler);\n    }\n\n    /**\n     * Manages the query handler for an extension.\n     *\n     * @alpha\n     * @param extensionId - The ID of the extension sending the query.\n     * @param query - The query to be handled.\n     * @param handler - The handler function for the extension query.\n     * @returns A function that, when called, will deregister the query handler.\n     */\n    handleExtensionQuery<T extends keyof ExtensionQueryMap>(\n        extensionId: string,\n        query: T,\n        handler: (command: ExtensionQueryMap[T]) => Promise<void> | void,\n    ): () => void {\n        return this._extensionMessenger.listenForQuery(extensionId, query, handler);\n    }\n\n    /**\n     * Dispatches an action through the data store and returns the current state\n     * once the action is dispatched.\n     *\n     * @param action - The action to dispatch.\n     * @returns A promise that resolves to the current state.\n     */\n    private _dispatch(\n        action: Action | Observable<Action> | ThunkAction<Action>,\n        options?: { queueId?: string },\n    ): Promise<CheckoutSelectors> {\n        return this._store\n            .dispatch(action, options)\n            .then(() => this.getState())\n            .catch((error) => {\n                throw this._errorTransformer.transform(error);\n            });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-state.ts",
    "content": "import { Omit } from '../common/types';\n\nimport Checkout from './checkout';\n\nexport default interface CheckoutState {\n    data?: CheckoutDataState;\n    errors: CheckoutErrorsState;\n    statuses: CheckoutStatusesState;\n}\n\nexport type CheckoutDataState = Omit<\n    Checkout,\n    'billingAddress' | 'cart' | 'consignments' | 'coupons' | 'giftCertificates'\n>;\n\nexport interface CheckoutErrorsState {\n    loadError?: Error;\n    updateError?: Error;\n}\n\nexport interface CheckoutStatusesState {\n    isExecutingSpamCheck?: boolean;\n    isLoading?: boolean;\n    isUpdating?: boolean;\n}\n\nexport const DEFAULT_STATE: CheckoutState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-store-error-selector.spec.ts",
    "content": "import { RequestError } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { getErrorResponse } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    CheckoutStoreErrorSelectorFactory,\n    createCheckoutStoreErrorSelectorFactory,\n} from './checkout-store-error-selector';\nimport { getCheckoutStoreStateWithOrder } from './checkouts.mock';\nimport createInternalCheckoutSelectors from './create-internal-checkout-selectors';\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\ndescribe('CheckoutStoreErrorSelector', () => {\n    let createCheckoutStoreErrorSelector: CheckoutStoreErrorSelectorFactory;\n    let error: Error;\n    let requestError: RequestError;\n    let selectors: InternalCheckoutSelectors;\n\n    beforeEach(() => {\n        createCheckoutStoreErrorSelector = createCheckoutStoreErrorSelectorFactory();\n        selectors = createInternalCheckoutSelectors(getCheckoutStoreStateWithOrder());\n\n        error = new Error();\n        requestError = new RequestError(getErrorResponse());\n    });\n\n    describe('#getError()', () => {\n        it('returns no error if there are no errors', () => {\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getError()).toBeUndefined();\n        });\n\n        it('returns the first error that it encounters', () => {\n            jest.spyOn(selectors.checkout, 'getLoadError').mockReturnValue(undefined);\n            jest.spyOn(selectors.paymentStrategies, 'getExecuteError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getError()).toEqual(error);\n\n            expect(selectors.checkout.getLoadError).toHaveBeenCalled();\n            expect(selectors.paymentStrategies.getExecuteError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getLoadCheckoutError()', () => {\n        it('returns error if there is an error when loading checkout', () => {\n            jest.spyOn(selectors.checkout, 'getLoadError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadCheckoutError()).toEqual(error);\n            expect(selectors.checkout.getLoadError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when loading checkout', () => {\n            jest.spyOn(selectors.checkout, 'getLoadError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadCheckoutError()).toBeUndefined();\n            expect(selectors.checkout.getLoadError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getCreateCustomerAccountError()', () => {\n        it('returns error if there is an error when loading checkout', () => {\n            jest.spyOn(selectors.customer, 'getCreateAccountError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getCreateCustomerAccountError()).toEqual(error);\n            expect(selectors.customer.getCreateAccountError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when loading checkout', () => {\n            jest.spyOn(selectors.customer, 'getCreateAccountError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getCreateCustomerAccountError()).toBeUndefined();\n            expect(selectors.customer.getCreateAccountError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getSignInEmailError()', () => {\n        it('returns error if theres one', () => {\n            jest.spyOn(selectors.signInEmail, 'getSendError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getSignInEmailError()).toEqual(error);\n            expect(selectors.signInEmail.getSendError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error', () => {\n            jest.spyOn(selectors.signInEmail, 'getSendError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getSignInEmailError()).toBeUndefined();\n            expect(selectors.signInEmail.getSendError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getUpdateCheckoutError()', () => {\n        it('returns error if there is an error when loading checkout', () => {\n            jest.spyOn(selectors.checkout, 'getUpdateError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getUpdateCheckoutError()).toEqual(error);\n            expect(selectors.checkout.getUpdateError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when loading checkout', () => {\n            jest.spyOn(selectors.checkout, 'getUpdateError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getUpdateCheckoutError()).toBeUndefined();\n            expect(selectors.checkout.getUpdateError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getSubmitOrderError()', () => {\n        it('returns error if there is an error when submitting order', () => {\n            jest.spyOn(selectors.paymentStrategies, 'getExecuteError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getSubmitOrderError()).toEqual(error);\n            expect(selectors.paymentStrategies.getExecuteError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when submitting order', () => {\n            jest.spyOn(selectors.paymentStrategies, 'getExecuteError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getSubmitOrderError()).toBeUndefined();\n            expect(selectors.paymentStrategies.getExecuteError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getFinalizeOrderError()', () => {\n        it('returns error if there is an error when finalizing order', () => {\n            jest.spyOn(selectors.paymentStrategies, 'getFinalizeError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getFinalizeOrderError()).toEqual(error);\n            expect(selectors.paymentStrategies.getFinalizeError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when finalizing order', () => {\n            jest.spyOn(selectors.paymentStrategies, 'getFinalizeError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getFinalizeOrderError()).toBeUndefined();\n            expect(selectors.paymentStrategies.getFinalizeError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getLoadOrderError()', () => {\n        it('returns error if there is an error when loading order', () => {\n            jest.spyOn(selectors.order, 'getLoadError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadOrderError()).toEqual(error);\n            expect(selectors.order.getLoadError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when loading order', () => {\n            jest.spyOn(selectors.order, 'getLoadError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadOrderError()).toBeUndefined();\n            expect(selectors.order.getLoadError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getLoadCartError()', () => {\n        it('returns error if there is an error when loading cart', () => {\n            jest.spyOn(selectors.cart, 'getLoadError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadCartError()).toEqual(error);\n            expect(selectors.cart.getLoadError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when loading cart', () => {\n            jest.spyOn(selectors.cart, 'getLoadError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadCartError()).toBeUndefined();\n            expect(selectors.cart.getLoadError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getLoadBillingCountriesError()', () => {\n        it('returns error if there is an error when loading billing countries', () => {\n            jest.spyOn(selectors.countries, 'getLoadError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadBillingCountriesError()).toEqual(error);\n            expect(selectors.countries.getLoadError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when loading billing countries', () => {\n            jest.spyOn(selectors.countries, 'getLoadError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadBillingCountriesError()).toBeUndefined();\n            expect(selectors.countries.getLoadError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getLoadShippingCountriesError()', () => {\n        it('returns error if there is an error when loading shipping countries', () => {\n            jest.spyOn(selectors.shippingCountries, 'getLoadError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadShippingCountriesError()).toEqual(error);\n            expect(selectors.shippingCountries.getLoadError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when loading shipping countries', () => {\n            jest.spyOn(selectors.shippingCountries, 'getLoadError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadShippingCountriesError()).toBeUndefined();\n            expect(selectors.shippingCountries.getLoadError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getLoadPaymentMethodsError()', () => {\n        it('returns error if there is an error when loading payment methods', () => {\n            jest.spyOn(selectors.paymentMethods, 'getLoadError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadPaymentMethodsError()).toEqual(error);\n            expect(selectors.paymentMethods.getLoadError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when loading payment methods', () => {\n            jest.spyOn(selectors.paymentMethods, 'getLoadError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadPaymentMethodsError()).toBeUndefined();\n            expect(selectors.paymentMethods.getLoadError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getLoadPaymentMethodError()', () => {\n        it('returns error if there is an error when loading payment method', () => {\n            jest.spyOn(selectors.paymentMethods, 'getLoadMethodError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadPaymentMethodError('braintree')).toEqual(error);\n            expect(selectors.paymentMethods.getLoadMethodError).toHaveBeenCalledWith('braintree');\n        });\n\n        it('returns undefined if there is no error when loading payment method', () => {\n            jest.spyOn(selectors.paymentMethods, 'getLoadMethodError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadPaymentMethodError('braintree')).toBeUndefined();\n            expect(selectors.paymentMethods.getLoadMethodError).toHaveBeenCalledWith('braintree');\n        });\n    });\n\n    describe('#getInitializePaymentError()', () => {\n        it('returns error if unable to initialize payment', () => {\n            jest.spyOn(selectors.paymentStrategies, 'getInitializeError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getInitializePaymentError('braintree')).toEqual(error);\n            expect(selectors.paymentStrategies.getInitializeError).toHaveBeenCalledWith(\n                'braintree',\n            );\n        });\n\n        it('returns undefined if able to initialize payment', () => {\n            jest.spyOn(selectors.paymentStrategies, 'getInitializeError').mockReturnValue(\n                undefined,\n            );\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getInitializePaymentError('braintree')).toBeUndefined();\n            expect(selectors.paymentStrategies.getInitializeError).toHaveBeenCalledWith(\n                'braintree',\n            );\n        });\n    });\n\n    describe('#getSignInError()', () => {\n        it('returns error if there is an error when signing in', () => {\n            jest.spyOn(selectors.customerStrategies, 'getSignInError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getSignInError()).toEqual(error);\n            expect(selectors.customerStrategies.getSignInError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when signing in', () => {\n            jest.spyOn(selectors.customerStrategies, 'getSignInError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getSignInError()).toBeUndefined();\n            expect(selectors.customerStrategies.getSignInError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getSignOutError()', () => {\n        it('returns error if there is an error when signing out', () => {\n            jest.spyOn(selectors.customerStrategies, 'getSignOutError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getSignOutError()).toEqual(error);\n            expect(selectors.customerStrategies.getSignOutError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when signing out', () => {\n            jest.spyOn(selectors.customerStrategies, 'getSignOutError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getSignOutError()).toBeUndefined();\n            expect(selectors.customerStrategies.getSignOutError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getInitializeCustomerError()', () => {\n        it('returns error if unable to initialize customer', () => {\n            jest.spyOn(selectors.customerStrategies, 'getInitializeError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getInitializeCustomerError()).toEqual(error);\n            expect(selectors.customerStrategies.getInitializeError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if able to initialize customer', () => {\n            jest.spyOn(selectors.customerStrategies, 'getInitializeError').mockReturnValue(\n                undefined,\n            );\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getInitializeCustomerError()).toBeUndefined();\n            expect(selectors.customerStrategies.getInitializeError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getLoadShippingOptionsError()', () => {\n        it('returns error if there is an error when loading the shipping options', () => {\n            jest.spyOn(selectors.consignments, 'getLoadShippingOptionsError').mockReturnValue(\n                error,\n            );\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadShippingOptionsError()).toEqual(error);\n            expect(selectors.consignments.getLoadShippingOptionsError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is NO error when loading the shipping options', () => {\n            jest.spyOn(selectors.consignments, 'getLoadShippingOptionsError').mockReturnValue(\n                undefined,\n            );\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadShippingOptionsError()).toBeUndefined();\n            expect(selectors.consignments.getLoadShippingOptionsError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getSelectShippingOptionError()', () => {\n        it('returns error if there is an error when selecting the shipping options', () => {\n            jest.spyOn(selectors.shippingStrategies, 'getSelectOptionError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getSelectShippingOptionError()).toEqual(error);\n            expect(selectors.shippingStrategies.getSelectOptionError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is NO error when selecting the shipping options', () => {\n            jest.spyOn(selectors.shippingStrategies, 'getSelectOptionError').mockReturnValue(\n                undefined,\n            );\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getSelectShippingOptionError()).toBeUndefined();\n            expect(selectors.shippingStrategies.getSelectOptionError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getUpdateBillingAddressError()', () => {\n        it('returns error if there is an error when updating the billing address', () => {\n            jest.spyOn(selectors.billingAddress, 'getUpdateError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getUpdateBillingAddressError()).toEqual(error);\n            expect(selectors.billingAddress.getUpdateError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is NO error when updating the billing address', () => {\n            jest.spyOn(selectors.billingAddress, 'getUpdateError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getUpdateBillingAddressError()).toBeUndefined();\n            expect(selectors.billingAddress.getUpdateError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getUpdateSubscriptionsError()', () => {\n        it('returns error if there is an error when updating subscriptions', () => {\n            jest.spyOn(selectors.subscriptions, 'getUpdateError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getUpdateSubscriptionsError()).toEqual(error);\n            expect(selectors.subscriptions.getUpdateError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is NO error when updating subscriptions', () => {\n            jest.spyOn(selectors.subscriptions, 'getUpdateError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getUpdateSubscriptionsError()).toBeUndefined();\n            expect(selectors.subscriptions.getUpdateError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getContinueAsGuestError()', () => {\n        it('returns error if there is an error', () => {\n            jest.spyOn(selectors.billingAddress, 'getContinueAsGuestError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getContinueAsGuestError()).toEqual(error);\n            expect(selectors.billingAddress.getContinueAsGuestError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is NO errors', () => {\n            jest.spyOn(selectors.billingAddress, 'getContinueAsGuestError').mockReturnValue(\n                undefined,\n            );\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getContinueAsGuestError()).toBeUndefined();\n            expect(selectors.billingAddress.getContinueAsGuestError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getUpdateConsignmentError()', () => {\n        it('returns error if there is an error when updating consignments', () => {\n            jest.spyOn(selectors.consignments, 'getUpdateError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getUpdateConsignmentError('foo')).toEqual(error);\n            expect(selectors.consignments.getUpdateError).toHaveBeenCalledWith('foo');\n        });\n\n        it('returns undefined if there is NO error when updating consignments', () => {\n            jest.spyOn(selectors.consignments, 'getUpdateError');\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getUpdateConsignmentError('foo')).toBeUndefined();\n            expect(selectors.consignments.getUpdateError).toHaveBeenCalledWith('foo');\n        });\n    });\n\n    describe('#getDeleteConsignmentError()', () => {\n        it('returns error if there is an error when deleting consignments', () => {\n            jest.spyOn(selectors.consignments, 'getDeleteError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getDeleteConsignmentError('foo')).toEqual(error);\n            expect(selectors.consignments.getDeleteError).toHaveBeenCalledWith('foo');\n        });\n\n        it('returns undefined if there is NO error when deleting consignments', () => {\n            jest.spyOn(selectors.consignments, 'getDeleteError');\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getDeleteConsignmentError('foo')).toBeUndefined();\n            expect(selectors.consignments.getDeleteError).toHaveBeenCalledWith('foo');\n        });\n    });\n\n    describe('#getCreateConsignmentsError()', () => {\n        it('returns error if there is an error when creating consignments', () => {\n            jest.spyOn(selectors.consignments, 'getCreateError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getCreateConsignmentsError()).toEqual(error);\n            expect(selectors.consignments.getCreateError).toHaveBeenCalledWith();\n        });\n\n        it('returns undefined if there is NO error when creating consignments', () => {\n            jest.spyOn(selectors.consignments, 'getCreateError');\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getCreateConsignmentsError()).toBeUndefined();\n            expect(selectors.consignments.getCreateError).toHaveBeenCalledWith();\n        });\n    });\n\n    describe('#getUpdateShippingAddressError()', () => {\n        it('returns error if there is an error when updating the shipping address', () => {\n            jest.spyOn(selectors.shippingStrategies, 'getUpdateAddressError').mockReturnValue(\n                error,\n            );\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getUpdateShippingAddressError()).toEqual(error);\n            expect(selectors.shippingStrategies.getUpdateAddressError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is NO error when updating the shipping address', () => {\n            jest.spyOn(selectors.shippingStrategies, 'getUpdateAddressError').mockReturnValue(\n                undefined,\n            );\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getUpdateShippingAddressError()).toBeUndefined();\n            expect(selectors.shippingStrategies.getUpdateAddressError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getInitializePaymentError()', () => {\n        it('returns error if unable to initialize shipping', () => {\n            jest.spyOn(selectors.shippingStrategies, 'getInitializeError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getInitializeShippingError('foobar')).toEqual(error);\n            expect(selectors.shippingStrategies.getInitializeError).toHaveBeenCalledWith('foobar');\n        });\n\n        it('returns undefined if able to initialize shipping', () => {\n            jest.spyOn(selectors.shippingStrategies, 'getInitializeError').mockReturnValue(\n                undefined,\n            );\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getInitializeShippingError('foobar')).toBeUndefined();\n            expect(selectors.shippingStrategies.getInitializeError).toHaveBeenCalledWith('foobar');\n        });\n    });\n\n    describe('#getApplyCouponError()', () => {\n        it('returns error if there is an error when updating the a coupon', () => {\n            jest.spyOn(selectors.coupons, 'getApplyError').mockReturnValue(requestError);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getApplyCouponError()).toEqual(requestError);\n            expect(selectors.coupons.getApplyError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is NO error when updating the a coupon', () => {\n            jest.spyOn(selectors.coupons, 'getApplyError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getApplyCouponError()).toBeUndefined();\n            expect(selectors.coupons.getApplyError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getRemoveCouponError()', () => {\n        it('returns error if there is an error when updating the a coupon', () => {\n            jest.spyOn(selectors.coupons, 'getRemoveError').mockReturnValue(requestError);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getRemoveCouponError()).toEqual(requestError);\n            expect(selectors.coupons.getRemoveError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is NO error when updating the a coupon', () => {\n            jest.spyOn(selectors.coupons, 'getRemoveError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getRemoveCouponError()).toBeUndefined();\n            expect(selectors.coupons.getRemoveError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getApplyGiftCertificateError()', () => {\n        it('returns error if there is an error when applying gift certificate', () => {\n            jest.spyOn(selectors.giftCertificates, 'getApplyError').mockReturnValue(requestError);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getApplyGiftCertificateError()).toEqual(requestError);\n            expect(selectors.giftCertificates.getApplyError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is NO error when applying gift certificate', () => {\n            jest.spyOn(selectors.giftCertificates, 'getApplyError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getApplyGiftCertificateError()).toBeUndefined();\n            expect(selectors.giftCertificates.getApplyError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getRemoveGiftCertificateError()', () => {\n        it('returns error if there is an error when removing gift certificate', () => {\n            jest.spyOn(selectors.giftCertificates, 'getRemoveError').mockReturnValue(requestError);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getRemoveGiftCertificateError()).toEqual(requestError);\n            expect(selectors.giftCertificates.getRemoveError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is NO error when removing gift certificate', () => {\n            jest.spyOn(selectors.giftCertificates, 'getRemoveError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getRemoveGiftCertificateError()).toBeUndefined();\n            expect(selectors.giftCertificates.getRemoveError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getLoadInstrumentsError()', () => {\n        it('returns error if there is an error when loading instruments', () => {\n            jest.spyOn(selectors.instruments, 'getLoadError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadInstrumentsError()).toEqual(error);\n            expect(selectors.instruments.getLoadError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is NO error when loading instruments', () => {\n            jest.spyOn(selectors.instruments, 'getLoadError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadInstrumentsError()).toBeUndefined();\n            expect(selectors.instruments.getLoadError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getDeleteInstrumentError()', () => {\n        it('returns error if there is an error when deleting instruments', () => {\n            jest.spyOn(selectors.instruments, 'getDeleteError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getDeleteInstrumentError('123')).toEqual(error);\n            expect(selectors.instruments.getDeleteError).toHaveBeenCalledWith('123');\n        });\n\n        it('returns undefined if there is NO error when deleting instruments', () => {\n            jest.spyOn(selectors.instruments, 'getDeleteError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getDeleteInstrumentError('123')).toBeUndefined();\n            expect(selectors.instruments.getDeleteError).toHaveBeenCalledWith('123');\n        });\n    });\n\n    describe('#getLoadConfigError()', () => {\n        it('returns error if there is an error when loading config', () => {\n            jest.spyOn(selectors.config, 'getLoadError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadConfigError()).toEqual(error);\n            expect(selectors.config.getLoadError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is NO error when loading config', () => {\n            jest.spyOn(selectors.config, 'getLoadError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadConfigError()).toBeUndefined();\n            expect(selectors.config.getLoadError).toHaveBeenCalled();\n        });\n    });\n\n    describe('#getLoadExtensionsError()', () => {\n        it('returns error if there is an error when loading extensions', () => {\n            jest.spyOn(selectors.extensions, 'getLoadError').mockReturnValue(error);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadExtensionsError()).toEqual(error);\n            expect(selectors.extensions.getLoadError).toHaveBeenCalled();\n        });\n\n        it('returns undefined if there is no error when loading extensions', () => {\n            jest.spyOn(selectors.extensions, 'getLoadError').mockReturnValue(undefined);\n\n            const errors = createCheckoutStoreErrorSelector(selectors);\n\n            expect(errors.getLoadExtensionsError()).toBeUndefined();\n            expect(selectors.extensions.getLoadError).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-store-error-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport {\n    CartChangedError,\n    CartConsistencyError,\n    CartStockPositionsChangedError,\n} from '../cart/errors';\nimport { RequestError } from '../common/error/errors';\nimport { createSelector, createShallowEqualSelector } from '../common/selector';\nimport { Omit } from '../common/types';\n\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\n/**\n * Responsible for getting the error of any asynchronous checkout action, if\n * there is any.\n *\n * This object has a set of getters that would return an error if an action is\n * not executed successfully. For example, if you are unable to submit an order,\n * you can use this object to retrieve the reason for the failure.\n */\nexport default interface CheckoutStoreErrorSelector {\n    getError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to load the current checkout.\n     *\n     * @returns The error object if unable to load, otherwise undefined.\n     */\n    getLoadCheckoutError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to update the current checkout.\n     *\n     * @returns The error object if unable to update, otherwise undefined.\n     */\n    getUpdateCheckoutError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to submit the current order.\n     *\n     * @returns The error object if unable to submit, otherwise undefined.\n     */\n    getSubmitOrderError():\n        | Error\n        | CartChangedError\n        | CartConsistencyError\n        | CartStockPositionsChangedError\n        | undefined;\n\n    /**\n     * Returns an error if unable to finalize the current order.\n     *\n     * @returns The error object if unable to finalize, otherwise undefined.\n     */\n    getFinalizeOrderError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to load the current order.\n     *\n     * @returns The error object if unable to load, otherwise undefined.\n     */\n    getLoadOrderError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to load the current cart.\n     *\n     * @returns The error object if unable to load, otherwise undefined.\n     */\n    getLoadCartError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to load billing countries.\n     *\n     * @returns The error object if unable to load, otherwise undefined.\n     */\n    getLoadBillingCountriesError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to load shipping countries.\n     *\n     * @returns The error object if unable to load, otherwise undefined.\n     */\n    getLoadShippingCountriesError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to load payment methods.\n     *\n     * @returns The error object if unable to load, otherwise undefined.\n     */\n    getLoadPaymentMethodsError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to load a specific payment method.\n     *\n     * @param methodId - The identifier of the payment method to load.\n     * @returns The error object if unable to load, otherwise undefined.\n     */\n    getLoadPaymentMethodError(methodId?: string): Error | undefined;\n\n    /**\n     * Returns an error if unable to initialize a specific payment method.\n     *\n     * @param methodId - The identifier of the payment method to initialize.\n     * @returns The error object if unable to initialize, otherwise undefined.\n     */\n    getInitializePaymentError(methodId?: string): Error | undefined;\n\n    /**\n     * Returns an error if unable to sign in.\n     *\n     * @returns The error object if unable to sign in, otherwise undefined.\n     */\n    getSignInError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to sign out.\n     *\n     * @returns The error object if unable to sign out, otherwise undefined.\n     */\n    getSignOutError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to initialize the customer step of a checkout\n     * process.\n     *\n     * @param methodId - The identifer of the initialization method to execute.\n     * @returns The error object if unable to initialize, otherwise undefined.\n     */\n    getInitializeCustomerError(methodId?: string): Error | undefined;\n\n    /**\n     * Returns an error if unable to load shipping options.\n     *\n     * @returns The error object if unable to load, otherwise undefined.\n     */\n    getLoadShippingOptionsError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to select a shipping option.\n     *\n     * A consignment ID should be provided when checking for an error for a\n     * specific consignment, otherwise it will check for all available consignments.\n     *\n     * @param consignmentId - The identifier of the consignment to be checked.\n     * @returns The error object if unable to select, otherwise undefined.\n     */\n    getSelectShippingOptionError(consignmentId?: string): Error | undefined;\n\n    /**\n     * Returns an error if unable to continue as guest.\n     *\n     * The call could fail in scenarios where guest checkout is not allowed, for example, when existing accounts are required to sign-in.\n     *\n     * In the background, this call tries to set the billing address email using the Storefront API. You could access the Storefront API response status code using `getContinueAsGuestError` error selector.\n     *\n     * ```js\n     * console.log(state.errors.getContinueAsGuestError());\n     * console.log(state.errors.getContinueAsGuestError().status);\n     * ```\n     *\n     * For more information about status codes, check [Checkout Storefront API - Add Checkout Billing Address](https://developer.bigcommerce.com/api-reference/cart-checkout/storefront-checkout-api/checkout-billing-address/checkoutsbillingaddressbycheckoutidpost).\n     *\n     * @returns The error object if unable to continue, otherwise undefined.\n     */\n    getContinueAsGuestError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to update billing address.\n     *\n     * @returns The error object if unable to update, otherwise undefined.\n     */\n    getUpdateBillingAddressError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to update subscriptions.\n     *\n     * @returns The error object if unable to update, otherwise undefined.\n     */\n    getUpdateSubscriptionsError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to update shipping address.\n     *\n     * @returns The error object if unable to update, otherwise undefined.\n     */\n    getUpdateShippingAddressError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to delete a consignment.\n     *\n     * A consignment ID should be provided when checking for an error for a\n     * specific consignment, otherwise it will check for all available consignments.\n     *\n     * @param consignmentId - The identifier of the consignment to be checked.\n     * @returns The error object if unable to delete, otherwise undefined.\n     */\n    getDeleteConsignmentError(consignmentId?: string): Error | undefined;\n\n    /**\n     * Returns an error if unable to update a consignment.\n     *\n     * A consignment ID should be provided when checking for an error for a\n     * specific consignment, otherwise it will check for all available consignments.\n     *\n     * @param consignmentId - The identifier of the consignment to be checked.\n     * @returns The error object if unable to update, otherwise undefined.\n     */\n    getUpdateConsignmentError(consignmentId?: string): Error | undefined;\n\n    /**\n     * Returns an error if unable to create consignments.\n     *\n     * @returns The error object if unable to create, otherwise undefined.\n     */\n    getCreateConsignmentsError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to initialize the shipping step of a checkout\n     * process.\n     *\n     * @param methodId - The identifer of the initialization method to execute.\n     * @returns The error object if unable to initialize, otherwise undefined.\n     */\n    getInitializeShippingError(methodId?: string): Error | undefined;\n\n    /**\n     * Returns an error if unable to apply store credit.\n     *\n     * @returns The error object if unable to apply, otherwise undefined.\n     */\n    getApplyStoreCreditError(): RequestError | undefined;\n\n    /**\n     * Returns an error if unable to apply a coupon code.\n     *\n     * @returns The error object if unable to apply, otherwise undefined.\n     */\n    getApplyCouponError(): RequestError | undefined;\n\n    /**\n     * Returns an error if unable to remove a coupon code.\n     *\n     * @returns The error object if unable to remove, otherwise undefined.\n     */\n    getRemoveCouponError(): RequestError | undefined;\n\n    /**\n     * Returns an error if unable to apply a gift certificate.\n     *\n     * @returns The error object if unable to apply, otherwise undefined.\n     */\n    getApplyGiftCertificateError(): RequestError | undefined;\n\n    /**\n     * Returns an error if unable to remove a gift certificate.\n     *\n     * @returns The error object if unable to remove, otherwise undefined.\n     */\n    getRemoveGiftCertificateError(): RequestError | undefined;\n\n    /**\n     * Returns an error if unable to load payment instruments.\n     *\n     * @returns The error object if unable to load, otherwise undefined.\n     */\n    getLoadInstrumentsError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to delete a payment instrument.\n     *\n     * @param instrumentId - The identifier of the payment instrument to delete.\n     * @returns The error object if unable to delete, otherwise undefined.\n     */\n    getDeleteInstrumentError(instrumentId?: string): Error | undefined;\n\n    /**\n     * Returns an error if unable to load the checkout configuration of a store.\n     *\n     * @returns The error object if unable to load, otherwise undefined.\n     */\n    getLoadConfigError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to send sign-in email.\n     *\n     * @returns The error object if unable to send email, otherwise undefined.\n     */\n    getSignInEmailError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to load the B2B token.\n     *\n     * @returns The error object if unable to load the B2B token, otherwise undefined.\n     */\n    getLoadB2BTokenError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to create customer account.\n     *\n     * @returns The error object if unable to create account, otherwise undefined.\n     */\n    getCreateCustomerAccountError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to create customer address.\n     *\n     * @returns The error object if unable to create address, otherwise undefined.\n     */\n    getCreateCustomerAddressError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to fetch pickup options.\n     *\n     * @returns The error object if unable to fetch pickup options, otherwise undefined.\n     */\n    getPickupOptionsError(): Error | undefined;\n\n    /**\n     * Returns an error if unable to fetch extensions.\n     *\n     * @alpha\n     * @returns The error object if unable to fetch extensions, otherwise undefined.\n     */\n    getLoadExtensionsError(): Error | undefined;\n}\n\nexport type CheckoutStoreErrorSelectorFactory = (\n    state: InternalCheckoutSelectors,\n) => CheckoutStoreErrorSelector;\n\nexport function createCheckoutStoreErrorSelectorFactory(): CheckoutStoreErrorSelectorFactory {\n    const getError = createShallowEqualSelector(\n        (selector: Omit<CheckoutStoreErrorSelector, 'getError'>) => selector,\n        (selector) => () => {\n            for (const key of Object.keys(selector) as Array<\n                keyof Omit<CheckoutStoreErrorSelector, 'getError'>\n            >) {\n                const error = selector[key]();\n\n                if (error) {\n                    return error;\n                }\n            }\n        },\n    );\n\n    const getSelectShippingOptionError = createSelector(\n        ({ shippingStrategies }: InternalCheckoutSelectors) =>\n            shippingStrategies.getSelectOptionError,\n        ({ consignments }: InternalCheckoutSelectors) => consignments.getUpdateShippingOptionError,\n        (getSelectOptionError, getUpdateShippingOptionError) => (consignmentId?: string) => {\n            return getSelectOptionError() || getUpdateShippingOptionError(consignmentId);\n        },\n    );\n\n    return memoizeOne((state: InternalCheckoutSelectors): CheckoutStoreErrorSelector => {\n        const selector = {\n            getLoadCheckoutError: state.checkout.getLoadError,\n            getUpdateCheckoutError: state.checkout.getUpdateError,\n            getSubmitOrderError: state.paymentStrategies.getExecuteError,\n            getFinalizeOrderError: state.paymentStrategies.getFinalizeError,\n            getLoadOrderError: state.order.getLoadError,\n            getLoadCartError: state.cart.getLoadError,\n            getLoadBillingCountriesError: state.countries.getLoadError,\n            getLoadShippingCountriesError: state.shippingCountries.getLoadError,\n            getLoadPaymentMethodsError: state.paymentMethods.getLoadError,\n            getLoadPaymentMethodError: state.paymentMethods.getLoadMethodError,\n            getInitializePaymentError: state.paymentStrategies.getInitializeError,\n            getSignInError: state.customerStrategies.getSignInError,\n            getSignOutError: state.customerStrategies.getSignOutError,\n            getInitializeCustomerError: state.customerStrategies.getInitializeError,\n            getLoadShippingOptionsError: state.consignments.getLoadShippingOptionsError,\n            getSelectShippingOptionError: getSelectShippingOptionError(state),\n            getContinueAsGuestError: state.billingAddress.getContinueAsGuestError,\n            getUpdateBillingAddressError: state.billingAddress.getUpdateError,\n            getUpdateSubscriptionsError: state.subscriptions.getUpdateError,\n            getUpdateShippingAddressError: state.shippingStrategies.getUpdateAddressError,\n            getDeleteConsignmentError: state.consignments.getDeleteError,\n            getUpdateConsignmentError: state.consignments.getUpdateError,\n            getCreateConsignmentsError: state.consignments.getCreateError,\n            getInitializeShippingError: state.shippingStrategies.getInitializeError,\n            getApplyStoreCreditError: state.storeCredit.getApplyError,\n            getApplyCouponError: state.coupons.getApplyError,\n            getRemoveCouponError: state.coupons.getRemoveError,\n            getApplyGiftCertificateError: state.giftCertificates.getApplyError,\n            getRemoveGiftCertificateError: state.giftCertificates.getRemoveError,\n            getLoadInstrumentsError: state.instruments.getLoadError,\n            getDeleteInstrumentError: state.instruments.getDeleteError,\n            getLoadConfigError: state.config.getLoadError,\n            getSignInEmailError: state.signInEmail.getSendError,\n            getLoadB2BTokenError: state.b2bToken.getLoadError,\n            getCreateCustomerAccountError: state.customer.getCreateAccountError,\n            getCreateCustomerAddressError: state.customer.getCreateAddressError,\n            getPickupOptionsError: state.pickupOptions.getLoadError,\n            getLoadExtensionsError: state.extensions.getLoadError,\n        };\n\n        return {\n            getError: getError(selector),\n            ...selector,\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-store-selector.spec.ts",
    "content": "import { find, reject } from 'lodash';\n\nimport { ExtensionRegion } from '../extension';\nimport { FormField } from '../form';\nimport { getAddressFormFields } from '../form/form.mock';\nimport { getUnitedStates } from '../geography/countries.mock';\nimport { getBraintree } from '../payment/payment-methods.mock';\nimport { getAustralia } from '../shipping/shipping-countries.mock';\nimport { getShippingOptions } from '../shipping/shipping-options.mock';\n\nimport CheckoutStoreSelector, {\n    CheckoutStoreSelectorFactory,\n    createCheckoutStoreSelectorFactory,\n} from './checkout-store-selector';\nimport CheckoutStoreState from './checkout-store-state';\nimport { getCheckoutStoreStateWithOrder } from './checkouts.mock';\nimport createInternalCheckoutSelectors from './create-internal-checkout-selectors';\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\ndescribe('CheckoutStoreSelector', () => {\n    let createCheckoutStoreSelector: CheckoutStoreSelectorFactory;\n    let state: CheckoutStoreState;\n    let internalSelectors: InternalCheckoutSelectors;\n    let selector: CheckoutStoreSelector;\n\n    beforeEach(() => {\n        createCheckoutStoreSelector = createCheckoutStoreSelectorFactory();\n        state = getCheckoutStoreStateWithOrder();\n        internalSelectors = createInternalCheckoutSelectors(state);\n        selector = createCheckoutStoreSelector(internalSelectors);\n    });\n\n    it('returns checkout data', () => {\n        expect(selector.getCheckout()).toEqual(internalSelectors.checkout.getCheckout());\n    });\n\n    it('returns flash messages', () => {\n        expect(selector.getFlashMessages()).toEqual(internalSelectors.config.getFlashMessages());\n    });\n\n    it('returns order', () => {\n        expect(selector.getOrder()).toEqual(internalSelectors.order.getOrder());\n    });\n\n    it('returns sign-in email', () => {\n        expect(selector.getSignInEmail()).toEqual(internalSelectors.signInEmail.getEmail());\n    });\n\n    it('returns config', () => {\n        expect(selector.getConfig()).toEqual(internalSelectors.config.getStoreConfig());\n    });\n\n    it('returns shipping options', () => {\n        expect(selector.getShippingOptions()).toEqual(getShippingOptions());\n    });\n\n    it('returns consignments', () => {\n        expect(selector.getConsignments()).toEqual(\n            internalSelectors.consignments.getConsignments(),\n        );\n    });\n\n    it('returns shipping countries', () => {\n        expect(selector.getShippingCountries()).toEqual(\n            internalSelectors.shippingCountries.getShippingCountries(),\n        );\n    });\n\n    it('returns billing countries', () => {\n        expect(selector.getBillingCountries()).toEqual(internalSelectors.countries.getCountries());\n    });\n\n    it('returns payment methods', () => {\n        expect(selector.getPaymentMethods()).toEqual(\n            internalSelectors.paymentMethods.getPaymentMethods(),\n        );\n    });\n\n    it('returns payment method', () => {\n        expect(selector.getPaymentMethod('braintree')).toEqual(\n            internalSelectors.paymentMethods.getPaymentMethod('braintree'),\n        );\n    });\n\n    it('returns cart', () => {\n        expect(selector.getCart()).toEqual(internalSelectors.cart.getCart());\n    });\n\n    it('returns customer', () => {\n        expect(selector.getCustomer()).toEqual(internalSelectors.customer.getCustomer());\n    });\n\n    it('returns user experience settings', () => {\n        expect(selector.getUserExperienceSettings()).toEqual(\n            internalSelectors.config.getStoreConfigOrThrow().checkoutSettings\n                .checkoutUserExperienceSettings,\n        );\n    });\n\n    describe('#getBillingAddress()', () => {\n        const emptyBillingAddress = {\n            email: '',\n            id: '',\n            address1: '',\n            customFields: [],\n            address2: '',\n            city: '',\n            company: '',\n            country: '',\n            firstName: '',\n            lastName: '',\n            phone: '',\n            postalCode: '',\n            stateOrProvince: '',\n            stateOrProvinceCode: '',\n            countryCode: '',\n        };\n\n        it('returns billing address', () => {\n            expect(selector.getBillingAddress()).toEqual(\n                internalSelectors.billingAddress.getBillingAddress(),\n            );\n        });\n\n        it('returns geo-ip dummy billing address when billing address is undefined', () => {\n            internalSelectors = createInternalCheckoutSelectors(state);\n\n            jest.spyOn(internalSelectors.billingAddress, 'getBillingAddress').mockReturnValue(\n                undefined,\n            );\n\n            selector = createCheckoutStoreSelector(internalSelectors);\n\n            expect(selector.getBillingAddress()).toEqual({\n                ...emptyBillingAddress,\n                countryCode: 'AU',\n            });\n        });\n\n        it('returns geo-ip dummy billing address when only email is defined in billing address', () => {\n            internalSelectors = createInternalCheckoutSelectors(state);\n\n            jest.spyOn(internalSelectors.billingAddress, 'getBillingAddress').mockReturnValue({\n                ...emptyBillingAddress,\n                email: 'foo@bar.com',\n                id: '2',\n            });\n\n            selector = createCheckoutStoreSelector(internalSelectors);\n\n            expect(selector.getBillingAddress()).toEqual({\n                ...emptyBillingAddress,\n                id: '2',\n                email: 'foo@bar.com',\n                countryCode: 'AU',\n            });\n        });\n\n        it('returns undefined if getBillingAddress & geoIp are not present', () => {\n            internalSelectors = createInternalCheckoutSelectors(state);\n\n            jest.spyOn(internalSelectors.billingAddress, 'getBillingAddress').mockReturnValue(\n                undefined,\n            );\n            jest.spyOn(internalSelectors.config, 'getContextConfig').mockReturnValue(undefined);\n\n            selector = createCheckoutStoreSelector(internalSelectors);\n\n            expect(selector.getBillingAddress()).toBeUndefined();\n        });\n\n        it('returns address if address is partially defined but geo IP is not defined', () => {\n            internalSelectors = createInternalCheckoutSelectors(state);\n\n            jest.spyOn(internalSelectors.billingAddress, 'getBillingAddress').mockReturnValue({\n                ...emptyBillingAddress,\n                email: 'foo@bar.com',\n            });\n            jest.spyOn(internalSelectors.config, 'getContextConfig').mockReturnValue(undefined);\n\n            selector = createCheckoutStoreSelector(internalSelectors);\n\n            expect(selector.getBillingAddress()).toEqual({\n                ...emptyBillingAddress,\n                email: 'foo@bar.com',\n            });\n        });\n    });\n\n    describe('#getShippingAddress()', () => {\n        it('returns shipping address', () => {\n            expect(selector.getShippingAddress()).toEqual(\n                internalSelectors.shippingAddress.getShippingAddress(),\n            );\n        });\n\n        it('returns geo-ip dummy shipping address', () => {\n            internalSelectors = createInternalCheckoutSelectors(state);\n\n            jest.spyOn(internalSelectors.shippingAddress, 'getShippingAddress').mockReturnValue(\n                undefined,\n            );\n\n            selector = createCheckoutStoreSelector(internalSelectors);\n\n            expect(selector.getShippingAddress()).toEqual({\n                address1: '',\n                address2: '',\n                city: '',\n                company: '',\n                country: '',\n                customFields: [],\n                firstName: '',\n                lastName: '',\n                phone: '',\n                postalCode: '',\n                stateOrProvince: '',\n                stateOrProvinceCode: '',\n                countryCode: 'AU',\n            });\n        });\n\n        it('returns undefined if shippingAddress & geoIp are not present', () => {\n            internalSelectors = createInternalCheckoutSelectors(state);\n\n            jest.spyOn(internalSelectors.shippingAddress, 'getShippingAddress').mockReturnValue(\n                undefined,\n            );\n            jest.spyOn(internalSelectors.config, 'getContextConfig').mockReturnValue(undefined);\n\n            selector = createCheckoutStoreSelector(internalSelectors);\n\n            expect(selector.getShippingAddress()).toBeUndefined();\n        });\n    });\n\n    it('returns instruments', () => {\n        expect(selector.getInstruments()).toEqual(internalSelectors.instruments.getInstruments());\n    });\n\n    it('returns instruments for a particular payment method', () => {\n        const paymentMethodMock = getBraintree();\n\n        expect(selector.getInstruments(paymentMethodMock)).toEqual(\n            internalSelectors.instruments.getInstrumentsByPaymentMethod(paymentMethodMock),\n        );\n    });\n\n    it('returns flag indicating if payment is submitted', () => {\n        expect(selector.isPaymentDataSubmitted('braintree')).toBe(true);\n    });\n\n    it('returns shipping address fields', () => {\n        const results = selector.getShippingAddressFields('AU');\n        const predicate = ({ name }: FormField) =>\n            name === 'stateOrProvince' || name === 'stateOrProvinceCode' || name === 'countryCode';\n        const field = find(results, { name: 'stateOrProvinceCode' });\n\n        expect(reject(results, predicate)).toEqual(reject(getAddressFormFields(), predicate));\n        expect(field && field.options && field.options.items).toEqual(\n            getAustralia().subdivisions.map(({ code, name }) => ({ label: name, value: code })),\n        );\n    });\n\n    it('returns billing address fields', () => {\n        const results = selector.getBillingAddressFields('US');\n        const predicate = ({ name }: FormField) =>\n            name === 'stateOrProvince' || name === 'stateOrProvinceCode' || name === 'countryCode';\n        const field = find(results, { name: 'stateOrProvinceCode' });\n\n        expect(reject(results, predicate)).toEqual(reject(getAddressFormFields(), predicate));\n        expect(field && field.options && field.options.items).toEqual(\n            getUnitedStates().subdivisions.map(({ code, name }) => ({ label: name, value: code })),\n        );\n    });\n\n    it('changes to the public objects do not affect the private copy', () => {\n        const publicCheckout = selector.getCheckout();\n        const privateCheckout = internalSelectors.checkout.getCheckout();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        publicCheckout!.customer.email = 'should@notchange.com';\n\n        // tslint:disable-next-line:no-non-null-assertion\n        expect(privateCheckout!.customer.email).not.toBe('should@notchange.com');\n    });\n\n    it('returns extensions', () => {\n        expect(selector.getExtensions()).toEqual(internalSelectors.extensions.getExtensions());\n    });\n\n    it('returns payment provider customer data', () => {\n        expect(selector.getPaymentProviderCustomer()).toEqual(\n            internalSelectors.paymentProviderCustomer.getPaymentProviderCustomer(),\n        );\n    });\n\n    it('returns the extension of a given region', () => {\n        expect(\n            selector.getExtensionByRegion(ExtensionRegion.ShippingShippingAddressFormBefore),\n        ).toEqual(\n            internalSelectors.extensions.getExtensionByRegion(\n                ExtensionRegion.ShippingShippingAddressFormBefore,\n            ),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-store-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\nimport { omit, values } from 'lodash';\n\nimport { Address } from '../address';\nimport { BillingAddress } from '../billing';\nimport { Cart } from '../cart';\nimport { createSelector } from '../common/selector';\nimport { cloneResult as clone } from '../common/utility';\nimport { FlashMessage, FlashMessageType, StoreConfig, UserExperienceSettings } from '../config';\nimport { Coupon, GiftCertificate } from '../coupon';\nimport { Customer } from '../customer';\nimport { Extension, ExtensionRegion } from '../extension';\nimport { FormField } from '../form';\nimport { Country } from '../geography';\nimport { Order } from '../order';\nimport { PaymentMethod } from '../payment';\nimport { PaymentProviderCustomer } from '../payment-provider-customer';\nimport { CardInstrument, PaymentInstrument } from '../payment/instrument';\nimport { Consignment, PickupOptionResult, SearchArea, ShippingOption } from '../shipping';\nimport { SignInEmail } from '../signin-email';\n\nimport Checkout from './checkout';\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\nexport type Instrument = CardInstrument;\n\n/**\n * Responsible for getting the state of the current checkout.\n *\n * This object has a set of methods that allow you to get a specific piece of\n * checkout information, such as shipping and billing details.\n */\nexport default interface CheckoutStoreSelector {\n    /**\n     * Gets the current checkout.\n     *\n     * @returns The current checkout if it is loaded, otherwise undefined.\n     */\n    getCheckout(): Checkout | undefined;\n\n    /**\n     * Gets the current order.\n     *\n     * @returns The current order if it is loaded, otherwise undefined.\n     */\n    getOrder(): Order | undefined;\n\n    /**\n     * Gets the checkout configuration of a store.\n     *\n     * @returns The configuration object if it is loaded, otherwise undefined.\n     */\n    getConfig(): StoreConfig | undefined;\n\n    /**\n     * Gets the sign-in email.\n     *\n     * @returns The sign-in email object if sent, otherwise undefined\n     */\n    getSignInEmail(): SignInEmail | undefined;\n\n    /**\n     * Gets the B2B authentication token for the current customer.\n     *\n     * @returns The B2B token string if it has been loaded, otherwise undefined.\n     */\n    getB2BToken(): string | undefined;\n\n    /**\n     * Gets the shipping address of the current checkout.\n     *\n     * If the address is partially complete, it may not have shipping options\n     * associated with it.\n     *\n     * @returns The shipping address object if it is loaded, otherwise\n     * undefined.\n     */\n    getShippingAddress(): Address | undefined;\n\n    /**\n     * Gets a list of shipping options available for the shipping address.\n     *\n     * If there is no shipping address assigned to the current checkout, the\n     * list of shipping options will be empty.\n     *\n     * @returns The list of shipping options if any, otherwise undefined.\n     */\n    getShippingOptions(): ShippingOption[] | undefined;\n\n    /**\n     * Gets a list of consignments.\n     *\n     * If there are no consignments created for to the current checkout, the\n     * list will be empty.\n     *\n     * @returns The list of consignments if any, otherwise undefined.\n     */\n    getConsignments(): Consignment[] | undefined;\n\n    /**\n     * Gets the selected shipping option for the current checkout.\n     *\n     * @returns The shipping option object if there is a selected option,\n     * otherwise undefined.\n     */\n    getSelectedShippingOption(): ShippingOption | undefined;\n\n    /**\n     * Gets a list of countries available for shipping.\n     *\n     * @returns The list of countries if it is loaded, otherwise undefined.\n     */\n    getShippingCountries(): Country[] | undefined;\n\n    /**\n     * Gets the billing address of an order.\n     *\n     * @returns The billing address object if it is loaded, otherwise undefined.\n     */\n    getBillingAddress(): BillingAddress | undefined;\n\n    /**\n     * Gets a list of countries available for billing.\n     *\n     * @returns The list of countries if it is loaded, otherwise undefined.\n     */\n    getBillingCountries(): Country[] | undefined;\n\n    /**\n     * Gets a list of payment methods available for checkout.\n     *\n     * @returns The list of payment methods if it is loaded, otherwise undefined.\n     */\n    getPaymentMethods(): PaymentMethod[] | undefined;\n\n    /**\n     * Gets a payment method by an id.\n     *\n     * The method returns undefined if unable to find a payment method with the\n     * specified id, either because it is not available for the customer, or it\n     * is not loaded.\n     *\n     * @param methodId - The identifier of the payment method.\n     * @param gatewayId - The identifier of a payment provider providing the\n     * payment method.\n     * @returns The payment method object if loaded and available, otherwise,\n     * undefined.\n     */\n    getPaymentMethod(methodId: string, gatewayId?: string): PaymentMethod | undefined;\n\n    /**\n     * Gets the payment method that is selected for checkout.\n     *\n     * @returns The payment method object if there is a selected method;\n     * undefined if otherwise.\n     */\n    getSelectedPaymentMethod(): PaymentMethod | undefined;\n\n    /**\n     * Gets the available flash messages.\n     *\n     * Flash messages contain messages set by the server,\n     * e.g: when trying to sign in using an invalid email link.\n     *\n     * @param type - The type of flash messages to be returned. Optional\n     * @returns The flash messages if available, otherwise undefined.\n     */\n    getFlashMessages(type?: FlashMessageType): FlashMessage[] | undefined;\n\n    /**\n     * Gets the current cart.\n     *\n     * @returns The current cart object if it is loaded, otherwise undefined.\n     */\n    getCart(): Cart | undefined;\n\n    /**\n     * Gets a list of coupons that are applied to the current checkout.\n     *\n     * @returns The list of applied coupons if there is any, otherwise undefined.\n     */\n    getCoupons(): Coupon[] | undefined;\n\n    /**\n     * Gets a list of gift certificates that are applied to the current checkout.\n     *\n     * @returns The list of applied gift certificates if there is any, otherwise undefined.\n     */\n    getGiftCertificates(): GiftCertificate[] | undefined;\n\n    /**\n     * Gets the current customer.\n     *\n     * @returns The current customer object if it is loaded, otherwise\n     * undefined.\n     */\n    getCustomer(): Customer | undefined;\n\n    /**\n     * Checks if payment data is required or not.\n     *\n     * If payment data is required, customers should be prompted to enter their\n     * payment details.\n     *\n     * ```js\n     * if (state.checkout.isPaymentDataRequired()) {\n     *     // Render payment form\n     * } else {\n     *     // Render \"Payment is not required for this order\" message\n     * }\n     * ```\n     *\n     * @param useStoreCredit - If true, check whether payment data is required\n     * with store credit applied; otherwise, check without store credit.\n     * @returns True if payment data is required, otherwise false.\n     */\n    isPaymentDataRequired(useStoreCredit?: boolean): boolean;\n\n    /**\n     * Checks if payment data is submitted or not.\n     *\n     * If payment data is already submitted using a payment method, customers\n     * should not be prompted to enter their payment details again.\n     *\n     * @param methodId - The identifier of the payment method.\n     * @param gatewayId - The identifier of a payment provider providing the\n     * payment method.\n     * @returns True if payment data is submitted, otherwise false.\n     */\n    isPaymentDataSubmitted(methodId: string, gatewayId?: string): boolean;\n\n    /**\n     * Gets a list of payment instruments associated with the current customer.\n     *\n     * @returns The list of payment instruments if it is loaded, otherwise undefined.\n     */\n    getInstruments(): Instrument[] | undefined;\n    getInstruments(paymentMethod: PaymentMethod): PaymentInstrument[] | undefined;\n\n    /**\n     * Gets a set of form fields that should be presented in order to create a customer.\n     *\n     * @returns The set of customer account form fields if it is loaded,\n     * otherwise undefined.\n     */\n    getCustomerAccountFields(): FormField[];\n\n    /**\n     * Gets a set of form fields that should be presented to customers in order\n     * to capture their billing address for a specific country.\n     *\n     * @param countryCode - A 2-letter country code (ISO 3166-1 alpha-2).\n     * @returns The set of billing address form fields if it is loaded,\n     * otherwise undefined.\n     */\n    getBillingAddressFields(countryCode: string): FormField[];\n\n    /**\n     * Gets a set of form fields that should be presented to customers in order\n     * to capture their shipping address for a specific country.\n     *\n     * @param countryCode - A 2-letter country code (ISO 3166-1 alpha-2).\n     * @returns The set of shipping address form fields if it is loaded,\n     * otherwise undefined.\n     */\n    getShippingAddressFields(countryCode: string): FormField[];\n\n    /**\n     * Gets address extra fields.\n     *\n     * @returns The list of extra fields if available, otherwise an empty array.\n     */\n    getAddressExtraFields(): FormField[];\n\n    /**\n     * Gets order extra fields.\n     *\n     * @returns The list of extra fields if available, otherwise an empty array.\n     */\n    getOrderExtraFields(): FormField[];\n\n    /**\n     * Gets a list of pickup options for specified parameters.\n     *\n     * @param consignmentId - Id of consignment.\n     * @param searchArea - An object containing of radius and co-ordinates.\n     * @returns The set of shipping address form fields if it is loaded,\n     * otherwise undefined.\n     */\n    getPickupOptions(\n        consignmentId: string,\n        searchArea: SearchArea,\n    ): PickupOptionResult[] | undefined;\n\n    /**\n     * Gets user experience settings.\n     *\n     * @returns The object of user experience settings if it is loaded, otherwise undefined.\n     */\n    getUserExperienceSettings(): UserExperienceSettings | undefined;\n\n    /**\n     * Gets a list of extensions available for checkout.\n     *\n     * @alpha\n     * @returns The list of extensions if it is loaded, otherwise undefined.\n     */\n    getExtensions(): Extension[] | undefined;\n\n    /**\n     * Gets payment provider customers data.\n     *\n     * @alpha\n     * @returns The object with payment provider customer data\n     */\n    getPaymentProviderCustomer(): PaymentProviderCustomer | undefined;\n\n    /**\n     * Gets the extension associated with a given region.\n     *\n     * @alpha\n     * @param region - A checkout extension region.\n     * @returns The extension corresponding to the specified region, otherwise undefined.\n     */\n    getExtensionByRegion(region: ExtensionRegion): Extension | undefined;\n}\n\nexport type CheckoutStoreSelectorFactory = (\n    state: InternalCheckoutSelectors,\n) => CheckoutStoreSelector;\n\nexport function createCheckoutStoreSelectorFactory(): CheckoutStoreSelectorFactory {\n    const getCheckout = createSelector(\n        ({ checkout }: InternalCheckoutSelectors) => checkout.getCheckout,\n        (getCheckout) => clone(getCheckout),\n    );\n\n    const getOrder = createSelector(\n        ({ order }: InternalCheckoutSelectors) => order.getOrder,\n        (getOrder) => clone(getOrder),\n    );\n\n    const getConfig = createSelector(\n        ({ config }: InternalCheckoutSelectors) => config.getStoreConfig,\n        (getStoreConfig) => clone(getStoreConfig),\n    );\n\n    const getShippingAddress = createSelector(\n        ({ shippingAddress }: InternalCheckoutSelectors) => shippingAddress.getShippingAddress,\n        ({ config }: InternalCheckoutSelectors) => config.getContextConfig,\n        (getShippingAddress, getContextConfig) =>\n            clone(() => {\n                const shippingAddress = getShippingAddress();\n                const context = getContextConfig();\n\n                if (!shippingAddress) {\n                    if (!context || !context.geoCountryCode) {\n                        return;\n                    }\n\n                    return {\n                        firstName: '',\n                        lastName: '',\n                        company: '',\n                        address1: '',\n                        address2: '',\n                        city: '',\n                        stateOrProvince: '',\n                        stateOrProvinceCode: '',\n                        postalCode: '',\n                        country: '',\n                        phone: '',\n                        customFields: [],\n                        countryCode: context.geoCountryCode,\n                    };\n                }\n\n                return shippingAddress;\n            }),\n    );\n\n    const getShippingOptions = createSelector(\n        ({ consignments }: InternalCheckoutSelectors) => consignments.getConsignments,\n        (getConsignments) =>\n            clone(() => {\n                const consignments = getConsignments();\n\n                const shippingConsignment = consignments?.find(\n                    (consignment) => !consignment.selectedPickupOption,\n                );\n\n                return shippingConsignment?.availableShippingOptions;\n            }),\n    );\n\n    const getConsignments = createSelector(\n        ({ consignments }: InternalCheckoutSelectors) => consignments.getConsignments,\n        (getConsignments) => clone(getConsignments),\n    );\n\n    const getSelectedShippingOption = createSelector(\n        ({ consignments }: InternalCheckoutSelectors) => consignments.getConsignments,\n        (getConsignments) =>\n            clone(() => {\n                const consignments = getConsignments();\n                const shippingConsignment = consignments?.find(\n                    (consignment) => !consignment.selectedPickupOption,\n                );\n\n                return shippingConsignment?.selectedShippingOption;\n            }),\n    );\n\n    const getShippingCountries = createSelector(\n        ({ shippingCountries }: InternalCheckoutSelectors) =>\n            shippingCountries.getShippingCountries,\n        (getShippingCountries) => clone(getShippingCountries),\n    );\n\n    const getBillingAddress = createSelector(\n        ({ billingAddress }: InternalCheckoutSelectors) => billingAddress.getBillingAddress,\n        ({ config }: InternalCheckoutSelectors) => config.getContextConfig,\n        (getBillingAddress, getContextConfig) =>\n            clone(() => {\n                const billingAddress = getBillingAddress();\n                const context = getContextConfig();\n                const isEmptyBillingAddress =\n                    !billingAddress ||\n                    values(omit(billingAddress, 'shouldSaveAddress', 'email', 'id')).every(\n                        (val) => !val || !val.length,\n                    );\n\n                if (isEmptyBillingAddress) {\n                    if (!context || !context.geoCountryCode) {\n                        return billingAddress;\n                    }\n\n                    return {\n                        id: billingAddress ? billingAddress.id : '',\n                        firstName: '',\n                        lastName: '',\n                        company: '',\n                        address1: '',\n                        address2: '',\n                        city: '',\n                        email: billingAddress ? billingAddress.email : '',\n                        stateOrProvince: '',\n                        stateOrProvinceCode: '',\n                        postalCode: '',\n                        country: '',\n                        phone: '',\n                        customFields: [],\n                        countryCode: context.geoCountryCode,\n                    };\n                }\n\n                return billingAddress;\n            }),\n    );\n\n    const getBillingCountries = createSelector(\n        ({ countries }: InternalCheckoutSelectors) => countries.getCountries,\n        (getCountries) => clone(getCountries),\n    );\n\n    const getPaymentMethods = createSelector(\n        ({ paymentMethods }: InternalCheckoutSelectors) => paymentMethods.getPaymentMethods,\n        (getPaymentMethods) => clone(getPaymentMethods),\n    );\n\n    const getPaymentMethod = createSelector(\n        ({ paymentMethods }: InternalCheckoutSelectors) => paymentMethods.getPaymentMethod,\n        (getPaymentMethod) => clone(getPaymentMethod),\n    );\n\n    const getSelectedPaymentMethod = createSelector(\n        ({ payment }: InternalCheckoutSelectors) => payment.getPaymentId,\n        ({ paymentMethods }: InternalCheckoutSelectors) => paymentMethods.getPaymentMethod,\n        (getPaymentId, getPaymentMethod) =>\n            clone(() => {\n                const payment = getPaymentId();\n\n                return payment && getPaymentMethod(payment.providerId, payment.gatewayId);\n            }),\n    );\n\n    const getCart = createSelector(\n        ({ cart }: InternalCheckoutSelectors) => cart.getCart,\n        (getCart) => clone(getCart),\n    );\n\n    const getCoupons = createSelector(\n        ({ coupons }: InternalCheckoutSelectors) => coupons.getCoupons,\n        (getCoupons) => clone(getCoupons),\n    );\n\n    const getGiftCertificates = createSelector(\n        ({ giftCertificates }: InternalCheckoutSelectors) => giftCertificates.getGiftCertificates,\n        (getGiftCertificates) => clone(getGiftCertificates),\n    );\n\n    const getCustomer = createSelector(\n        ({ customer }: InternalCheckoutSelectors) => customer.getCustomer,\n        (getCustomer) => clone(getCustomer),\n    );\n\n    const getSignInEmail = createSelector(\n        ({ signInEmail }: InternalCheckoutSelectors) => signInEmail.getEmail,\n        (getEmail) => clone(getEmail),\n    );\n\n    const getB2BToken = createSelector(\n        ({ b2bToken }: InternalCheckoutSelectors) => b2bToken.getToken,\n        (getToken) => clone(getToken),\n    );\n\n    const isPaymentDataRequired = createSelector(\n        ({ payment }: InternalCheckoutSelectors) => payment.isPaymentDataRequired,\n        (isPaymentDataRequired) => clone(isPaymentDataRequired),\n    );\n\n    const isPaymentDataSubmitted = createSelector(\n        ({ payment }: InternalCheckoutSelectors) => payment.isPaymentDataSubmitted,\n        ({ paymentMethods }: InternalCheckoutSelectors) => paymentMethods.getPaymentMethod,\n        (isPaymentDataSubmitted, getPaymentMethod) =>\n            clone((methodId: string, gatewayId?: string) => {\n                return isPaymentDataSubmitted(getPaymentMethod(methodId, gatewayId));\n            }),\n    );\n\n    const getInstruments = createSelector(\n        ({ instruments }: InternalCheckoutSelectors) => instruments.getInstruments,\n        ({ instruments }: InternalCheckoutSelectors) => instruments.getInstrumentsByPaymentMethod,\n        (getInstruments, getInstrumentsByPaymentMethod) => {\n            function getInstrumentsSelector(): Instrument[] | undefined;\n            function getInstrumentsSelector(\n                paymentMethod: PaymentMethod,\n            ): PaymentInstrument[] | undefined;\n\n            function getInstrumentsSelector(\n                paymentMethod?: PaymentMethod,\n            ): PaymentInstrument[] | undefined {\n                return paymentMethod\n                    ? getInstrumentsByPaymentMethod(paymentMethod)\n                    : getInstruments();\n            }\n\n            return clone(getInstrumentsSelector);\n        },\n    );\n\n    const getCustomerAccountFields = createSelector(\n        ({ form }: InternalCheckoutSelectors) => form.getCustomerAccountFields,\n        (getCustomerAccountFields) => clone(getCustomerAccountFields),\n    );\n\n    const getBillingAddressFields = createSelector(\n        ({ form }: InternalCheckoutSelectors) => form.getBillingAddressFields,\n        ({ countries }: InternalCheckoutSelectors) => countries.getCountries,\n        (getBillingAddressFields, getCountries) =>\n            clone((countryCode: string) => {\n                return getBillingAddressFields(getCountries(), countryCode);\n            }),\n    );\n\n    const getShippingAddressFields = createSelector(\n        ({ form }: InternalCheckoutSelectors) => form.getShippingAddressFields,\n        ({ shippingCountries }: InternalCheckoutSelectors) =>\n            shippingCountries.getShippingCountries,\n        (getShippingAddressFields, getShippingCountries) =>\n            clone((countryCode: string) => {\n                return getShippingAddressFields(getShippingCountries(), countryCode);\n            }),\n    );\n\n    const getAddressExtraFields = createSelector(\n        ({ form }: InternalCheckoutSelectors) => form.getAddressExtraFields,\n        (getAddressExtraFields) => clone(getAddressExtraFields),\n    );\n\n    const getOrderExtraFields = createSelector(\n        ({ form }: InternalCheckoutSelectors) => form.getOrderExtraFields,\n        (getOrderExtraFields) => clone(getOrderExtraFields),\n    );\n\n    const getFlashMessages = createSelector(\n        ({ config }: InternalCheckoutSelectors) => config.getFlashMessages,\n        (getFlashMessages) => clone(getFlashMessages),\n    );\n\n    const getPickupOptions = createSelector(\n        ({ pickupOptions }: InternalCheckoutSelectors) => pickupOptions.getPickupOptions,\n        (getPickupOptions) => clone(getPickupOptions),\n    );\n\n    const getUserExperienceSettings = createSelector(\n        ({ config }: InternalCheckoutSelectors) => config.getStoreConfig,\n        (getStoreConfig) =>\n            clone(() => {\n                const config = getStoreConfig();\n\n                if (!config) {\n                    return;\n                }\n\n                return config.checkoutSettings.checkoutUserExperienceSettings;\n            }),\n    );\n\n    const getExtensions = createSelector(\n        ({ extensions }: InternalCheckoutSelectors) => extensions.getExtensions,\n        (getExtensions) => clone(getExtensions),\n    );\n\n    const getPaymentProviderCustomer = createSelector(\n        ({ paymentProviderCustomer }: InternalCheckoutSelectors) =>\n            paymentProviderCustomer.getPaymentProviderCustomer,\n        (getPaymentProviderCustomer) => clone(getPaymentProviderCustomer),\n    );\n\n    const getExtensionByRegion = createSelector(\n        ({ extensions }: InternalCheckoutSelectors) => extensions.getExtensionByRegion,\n        (getExtensionByRegion) => clone(getExtensionByRegion),\n    );\n\n    return memoizeOne((state: InternalCheckoutSelectors): CheckoutStoreSelector => {\n        return {\n            getCheckout: getCheckout(state),\n            getOrder: getOrder(state),\n            getConfig: getConfig(state),\n            getExtensions: getExtensions(state),\n            getExtensionByRegion: getExtensionByRegion(state),\n            getFlashMessages: getFlashMessages(state),\n            getShippingAddress: getShippingAddress(state),\n            getShippingOptions: getShippingOptions(state),\n            getConsignments: getConsignments(state),\n            getSelectedShippingOption: getSelectedShippingOption(state),\n            getShippingCountries: getShippingCountries(state),\n            getBillingAddress: getBillingAddress(state),\n            getBillingCountries: getBillingCountries(state),\n            getPaymentMethods: getPaymentMethods(state),\n            getPaymentMethod: getPaymentMethod(state),\n            getSelectedPaymentMethod: getSelectedPaymentMethod(state),\n            getCart: getCart(state),\n            getCoupons: getCoupons(state),\n            getGiftCertificates: getGiftCertificates(state),\n            getCustomer: getCustomer(state),\n            isPaymentDataRequired: isPaymentDataRequired(state),\n            isPaymentDataSubmitted: isPaymentDataSubmitted(state),\n            getSignInEmail: getSignInEmail(state),\n            getB2BToken: getB2BToken(state),\n            getInstruments: getInstruments(state),\n            getCustomerAccountFields: getCustomerAccountFields(state),\n            getBillingAddressFields: getBillingAddressFields(state),\n            getShippingAddressFields: getShippingAddressFields(state),\n            getAddressExtraFields: getAddressExtraFields(state),\n            getOrderExtraFields: getOrderExtraFields(state),\n            getPickupOptions: getPickupOptions(state),\n            getUserExperienceSettings: getUserExperienceSettings(state),\n            getPaymentProviderCustomer: getPaymentProviderCustomer(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-store-state.ts",
    "content": "import { B2BTokenState } from '../b2b-token';\nimport { BillingAddressState } from '../billing';\nimport { CartState } from '../cart';\nimport { CheckoutButtonState } from '../checkout-buttons';\nimport { ConfigState } from '../config';\nimport { CouponState, GiftCertificateState } from '../coupon';\nimport { CustomerState, CustomerStrategyState } from '../customer';\nimport { ExtensionState } from '../extension';\nimport { FormFieldsState } from '../form';\nimport { CountryState } from '../geography';\nimport { OrderState } from '../order';\nimport { OrderBillingAddressState } from '../order-billing-address';\nimport { PaymentMethodState, PaymentState, PaymentStrategyState } from '../payment';\nimport { PaymentProviderCustomerState } from '../payment-provider-customer';\nimport { InstrumentState } from '../payment/instrument';\nimport { RemoteCheckoutState } from '../remote-checkout';\nimport {\n    ConsignmentState,\n    PickupOptionState,\n    ShippingCountryState,\n    ShippingStrategyState,\n} from '../shipping';\nimport { SignInEmailState } from '../signin-email';\nimport { StoreCreditState } from '../store-credit';\nimport { SubscriptionsState } from '../subscription';\n\nimport CheckoutState from './checkout-state';\n\nexport default interface CheckoutStoreState {\n    b2bToken: B2BTokenState;\n    billingAddress: BillingAddressState;\n    cart: CartState;\n    checkout: CheckoutState;\n    checkoutButton: CheckoutButtonState;\n    config: ConfigState;\n    countries: CountryState;\n    coupons: CouponState;\n    consignments: ConsignmentState;\n    customer: CustomerState;\n    customerStrategies: CustomerStrategyState;\n    extensions: ExtensionState;\n    formFields: FormFieldsState;\n    giftCertificates: GiftCertificateState;\n    instruments: InstrumentState;\n    order: OrderState;\n    orderBillingAddress: OrderBillingAddressState;\n    payment: PaymentState;\n    paymentMethods: PaymentMethodState;\n    paymentProviderCustomer: PaymentProviderCustomerState;\n    paymentStrategies: PaymentStrategyState;\n    pickupOptions: PickupOptionState;\n    remoteCheckout: RemoteCheckoutState;\n    shippingCountries: ShippingCountryState;\n    shippingStrategies: ShippingStrategyState;\n    signInEmail: SignInEmailState;\n    subscriptions: SubscriptionsState;\n    storeCredit: StoreCreditState;\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-store-status-selector.spec.ts",
    "content": "import {\n    CheckoutStoreStatusSelectorFactory,\n    createCheckoutStoreStatusSelectorFactory,\n} from './checkout-store-status-selector';\nimport { getCheckoutStoreState } from './checkouts.mock';\nimport createInternalCheckoutSelectors from './create-internal-checkout-selectors';\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\ndescribe('CheckoutStoreStatusSelector', () => {\n    let createCheckoutStoreStatusSelector: CheckoutStoreStatusSelectorFactory;\n    let selectors: InternalCheckoutSelectors;\n\n    beforeEach(() => {\n        createCheckoutStoreStatusSelector = createCheckoutStoreStatusSelectorFactory();\n        selectors = createInternalCheckoutSelectors(getCheckoutStoreState());\n    });\n\n    describe('#isLoadingCheckout()', () => {\n        it('returns true if loading checkout', () => {\n            jest.spyOn(selectors.checkout, 'isLoading').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingCheckout()).toBe(true);\n            expect(selectors.checkout.isLoading).toHaveBeenCalled();\n        });\n\n        it('returns false if not loading checkout', () => {\n            jest.spyOn(selectors.checkout, 'isLoading').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingCheckout()).toBe(false);\n            expect(selectors.checkout.isLoading).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isUpdatingCheckout()', () => {\n        it('returns true if updating checkout', () => {\n            jest.spyOn(selectors.checkout, 'isUpdating').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isUpdatingCheckout()).toBe(true);\n            expect(selectors.checkout.isUpdating).toHaveBeenCalled();\n        });\n\n        it('returns false if not updating checkout', () => {\n            jest.spyOn(selectors.checkout, 'isUpdating').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isUpdatingCheckout()).toBe(false);\n            expect(selectors.checkout.isUpdating).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isCreatingCustomerAccount()', () => {\n        it('returns true if updating checkout', () => {\n            jest.spyOn(selectors.customer, 'isCreatingCustomerAccount').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCreatingCustomerAccount()).toBe(true);\n            expect(selectors.customer.isCreatingCustomerAccount).toHaveBeenCalled();\n        });\n\n        it('returns false if not updating checkout', () => {\n            jest.spyOn(selectors.customer, 'isCreatingCustomerAccount').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCreatingCustomerAccount()).toBe(false);\n            expect(selectors.customer.isCreatingCustomerAccount).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isExecutingSpamCheck()', () => {\n        it('returns true if executing spam check', () => {\n            jest.spyOn(selectors.checkout, 'isExecutingSpamCheck').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isExecutingSpamCheck()).toBe(true);\n            expect(selectors.checkout.isExecutingSpamCheck).toHaveBeenCalled();\n        });\n\n        it('returns false if not updating checkout', () => {\n            jest.spyOn(selectors.checkout, 'isExecutingSpamCheck').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isExecutingSpamCheck()).toBe(false);\n            expect(selectors.checkout.isExecutingSpamCheck).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isSubmittingOrder()', () => {\n        it('returns true if submitting order', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isExecuting').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isSubmittingOrder()).toBe(true);\n            expect(selectors.paymentStrategies.isExecuting).toHaveBeenCalled();\n        });\n\n        it('returns false if not submitting order', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isExecuting').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isSubmittingOrder()).toBe(false);\n            expect(selectors.paymentStrategies.isExecuting).toHaveBeenCalled();\n        });\n\n        it('returns true if executing spam check', () => {\n            jest.spyOn(selectors.checkout, 'isExecutingSpamCheck').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isSubmittingOrder()).toBe(true);\n            expect(selectors.checkout.isExecutingSpamCheck).toHaveBeenCalled();\n        });\n\n        it('returns false if not executing spam check', () => {\n            jest.spyOn(selectors.checkout, 'isExecutingSpamCheck').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isSubmittingOrder()).toBe(false);\n            expect(selectors.checkout.isExecutingSpamCheck).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isFinalizingOrder()', () => {\n        it('returns true if finalizing order', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isFinalizing').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isFinalizingOrder()).toBe(true);\n            expect(selectors.paymentStrategies.isFinalizing).toHaveBeenCalled();\n        });\n\n        it('returns false if not finalizing order', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isFinalizing').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isFinalizingOrder()).toBe(false);\n            expect(selectors.paymentStrategies.isFinalizing).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isLoadingOrder()', () => {\n        it('returns true if loading order', () => {\n            jest.spyOn(selectors.order, 'isLoading').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingOrder()).toBe(true);\n            expect(selectors.order.isLoading).toHaveBeenCalled();\n        });\n\n        it('returns false if not loading order', () => {\n            jest.spyOn(selectors.order, 'isLoading').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingOrder()).toBe(false);\n            expect(selectors.order.isLoading).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isLoadingCart()', () => {\n        it('returns true if loading cart', () => {\n            jest.spyOn(selectors.cart, 'isLoading').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingCart()).toBe(true);\n            expect(selectors.cart.isLoading).toHaveBeenCalled();\n        });\n\n        it('returns false if not loading cart', () => {\n            jest.spyOn(selectors.cart, 'isLoading').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingCart()).toBe(false);\n            expect(selectors.cart.isLoading).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isLoadingBillingCountries()', () => {\n        it('returns true if loading billing countries', () => {\n            jest.spyOn(selectors.countries, 'isLoading').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingBillingCountries()).toBe(true);\n            expect(selectors.countries.isLoading).toHaveBeenCalled();\n        });\n\n        it('returns false if not loading billing countries', () => {\n            jest.spyOn(selectors.countries, 'isLoading').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingBillingCountries()).toBe(false);\n            expect(selectors.countries.isLoading).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isLoadingShippingCountries()', () => {\n        it('returns true if loading shipping countries', () => {\n            jest.spyOn(selectors.shippingCountries, 'isLoading').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingShippingCountries()).toBe(true);\n            expect(selectors.shippingCountries.isLoading).toHaveBeenCalled();\n        });\n\n        it('returns false if not loading shipping countries', () => {\n            jest.spyOn(selectors.shippingCountries, 'isLoading').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingShippingCountries()).toBe(false);\n            expect(selectors.shippingCountries.isLoading).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isLoadingPaymentMethods()', () => {\n        it('returns true if loading payment methods', () => {\n            jest.spyOn(selectors.paymentMethods, 'isLoading').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingPaymentMethods()).toBe(true);\n            expect(selectors.paymentMethods.isLoading).toHaveBeenCalled();\n        });\n\n        it('returns false if not loading payment methods', () => {\n            jest.spyOn(selectors.paymentMethods, 'isLoading').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingPaymentMethods()).toBe(false);\n            expect(selectors.paymentMethods.isLoading).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isLoadingPaymentMethod()', () => {\n        it('returns true if loading payment method', () => {\n            jest.spyOn(selectors.paymentMethods, 'isLoadingMethod').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingPaymentMethod('braintree')).toBe(true);\n            expect(selectors.paymentMethods.isLoadingMethod).toHaveBeenCalledWith('braintree');\n        });\n\n        it('returns false if not loading payment methods', () => {\n            jest.spyOn(selectors.paymentMethods, 'isLoadingMethod').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingPaymentMethod('braintree')).toBe(false);\n            expect(selectors.paymentMethods.isLoadingMethod).toHaveBeenCalledWith('braintree');\n        });\n    });\n\n    describe('#isInitializedCustomer()', () => {\n        it('returns true if wallet button is initialized', () => {\n            jest.spyOn(selectors.customerStrategies, 'isInitialized').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isInitializedCustomer('foobar')).toBe(true);\n        });\n\n        it('returns false if wallet button is not initialized', () => {\n            jest.spyOn(selectors.customerStrategies, 'isInitialized').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isInitializedCustomer('foobar')).toBe(false);\n        });\n    });\n\n    describe('#isInitializingPayment()', () => {\n        beforeEach(() => {\n            jest.spyOn(selectors.paymentStrategies, 'isInitializing').mockReturnValue(false);\n        });\n\n        it('returns true if initializing payment', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isInitializing').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isInitializingPayment('foobar')).toBe(true);\n            expect(selectors.paymentStrategies.isInitializing).toHaveBeenCalledWith('foobar');\n        });\n\n        it('returns false if not initializing payment', () => {\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isInitializingPayment('foobar')).toBe(false);\n            expect(selectors.paymentStrategies.isInitializing).toHaveBeenCalledWith('foobar');\n        });\n    });\n\n    describe('#isSigningIn()', () => {\n        it('returns true if signing in', () => {\n            jest.spyOn(selectors.customerStrategies, 'isSigningIn').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isSigningIn()).toBe(true);\n            expect(selectors.customerStrategies.isSigningIn).toHaveBeenCalled();\n        });\n\n        it('returns false if not signing in', () => {\n            jest.spyOn(selectors.customerStrategies, 'isSigningIn').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isSigningIn()).toBe(false);\n            expect(selectors.customerStrategies.isSigningIn).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isSigningOut()', () => {\n        beforeEach(() => {\n            jest.spyOn(selectors.customerStrategies, 'isSigningOut').mockReturnValue(false);\n        });\n\n        it('returns true if signing out', () => {\n            jest.spyOn(selectors.customerStrategies, 'isSigningOut').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isSigningOut()).toBe(true);\n            expect(selectors.customerStrategies.isSigningOut).toHaveBeenCalled();\n        });\n\n        it('returns false if not signing out', () => {\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isSigningOut()).toBe(false);\n            expect(selectors.customerStrategies.isSigningOut).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isExecutingPaymentMethodCheckout()', () => {\n        beforeEach(() => {\n            jest.spyOn(\n                selectors.customerStrategies,\n                'isExecutingPaymentMethodCheckout',\n            ).mockReturnValue(false);\n        });\n\n        it('returns true if executing payment method checkout', () => {\n            jest.spyOn(\n                selectors.customerStrategies,\n                'isExecutingPaymentMethodCheckout',\n            ).mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isExecutingPaymentMethodCheckout()).toBe(true);\n            expect(\n                selectors.customerStrategies.isExecutingPaymentMethodCheckout,\n            ).toHaveBeenCalled();\n        });\n\n        it('returns false if not executing payment method checkout', () => {\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isExecutingPaymentMethodCheckout()).toBe(false);\n            expect(\n                selectors.customerStrategies.isExecutingPaymentMethodCheckout,\n            ).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isInitializingCustomer()', () => {\n        it('returns true if initializing', () => {\n            jest.spyOn(selectors.customerStrategies, 'isInitializing').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isInitializingCustomer('foobar')).toBe(true);\n            expect(selectors.customerStrategies.isInitializing).toHaveBeenCalledWith('foobar');\n        });\n\n        it('returns false if not initializing', () => {\n            jest.spyOn(selectors.customerStrategies, 'isInitializing').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isInitializingCustomer('foobar')).toBe(false);\n            expect(selectors.customerStrategies.isInitializing).toHaveBeenCalledWith('foobar');\n        });\n    });\n\n    describe('#isLoadingShippingOptions()', () => {\n        it('returns true if loading shipping options', () => {\n            jest.spyOn(selectors.consignments, 'isLoadingShippingOptions').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingShippingOptions()).toBe(true);\n            expect(selectors.consignments.isLoadingShippingOptions).toHaveBeenCalled();\n        });\n\n        it('returns false if not loading shipping options', () => {\n            jest.spyOn(selectors.consignments, 'isLoadingShippingOptions').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingShippingOptions()).toBe(false);\n            expect(selectors.consignments.isLoadingShippingOptions).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isSelectingShippingOption()', () => {\n        it('returns true if selecting shipping options', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isSelectingOption').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isSelectingShippingOption()).toBe(true);\n            expect(selectors.shippingStrategies.isSelectingOption).toHaveBeenCalled();\n        });\n\n        it('returns false if not selecting shipping options', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isSelectingOption').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isSelectingShippingOption()).toBe(false);\n            expect(selectors.shippingStrategies.isSelectingOption).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isSendingSignInEmail()', () => {\n        it('returns true if sending', () => {\n            jest.spyOn(selectors.signInEmail, 'isSending').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isSendingSignInEmail()).toBe(true);\n            expect(selectors.signInEmail.isSending).toHaveBeenCalled();\n        });\n\n        it('returns false if not sending', () => {\n            jest.spyOn(selectors.signInEmail, 'isSending').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isSendingSignInEmail()).toBe(false);\n            expect(selectors.signInEmail.isSending).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isUpdatingBillingAddress()', () => {\n        it('returns true if updating billing address', () => {\n            jest.spyOn(selectors.billingAddress, 'isUpdating').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isUpdatingBillingAddress()).toBe(true);\n            expect(selectors.billingAddress.isUpdating).toHaveBeenCalled();\n        });\n\n        it('returns false if not updating billing address', () => {\n            jest.spyOn(selectors.billingAddress, 'isUpdating').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isUpdatingBillingAddress()).toBe(false);\n            expect(selectors.billingAddress.isUpdating).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isUpdatingSubscriptions()', () => {\n        it('returns true if updating subscriptions', () => {\n            jest.spyOn(selectors.subscriptions, 'isUpdating').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isUpdatingSubscriptions()).toBe(true);\n            expect(selectors.subscriptions.isUpdating).toHaveBeenCalled();\n        });\n\n        it('returns false if not updating subscriptions', () => {\n            jest.spyOn(selectors.subscriptions, 'isUpdating').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isUpdatingSubscriptions()).toBe(false);\n            expect(selectors.subscriptions.isUpdating).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isContinuingAsGuest()', () => {\n        it('returns true if continuing as guest', () => {\n            jest.spyOn(selectors.billingAddress, 'isContinuingAsGuest').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isContinuingAsGuest()).toBe(true);\n            expect(selectors.billingAddress.isContinuingAsGuest).toHaveBeenCalled();\n        });\n\n        it('returns false if not continuing as guest', () => {\n            jest.spyOn(selectors.billingAddress, 'isContinuingAsGuest').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isContinuingAsGuest()).toBe(false);\n            expect(selectors.billingAddress.isContinuingAsGuest).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isUpdatingShippingAddress()', () => {\n        it('returns true if updating shipping address', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isUpdatingAddress').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isUpdatingShippingAddress()).toBe(true);\n            expect(selectors.shippingStrategies.isUpdatingAddress).toHaveBeenCalled();\n        });\n\n        it('returns false if not updating shipping address', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isUpdatingAddress').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isUpdatingShippingAddress()).toBe(false);\n            expect(selectors.shippingStrategies.isUpdatingAddress).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isUpdatingConsignment()', () => {\n        it('returns true if updating shipping address', () => {\n            jest.spyOn(selectors.consignments, 'isUpdating').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isUpdatingConsignment()).toBe(true);\n            expect(selectors.consignments.isUpdating).toHaveBeenCalled();\n        });\n\n        it('returns false if not updating shipping address', () => {\n            jest.spyOn(selectors.consignments, 'isUpdating').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isUpdatingConsignment()).toBe(false);\n            expect(selectors.consignments.isUpdating).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isDeletingConsignment()', () => {\n        it('returns true if deleting consignment', () => {\n            jest.spyOn(selectors.consignments, 'isDeleting').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isDeletingConsignment()).toBe(true);\n            expect(selectors.consignments.isDeleting).toHaveBeenCalled();\n        });\n\n        it('returns false if not deleting consignment', () => {\n            jest.spyOn(selectors.consignments, 'isDeleting').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isDeletingConsignment()).toBe(false);\n            expect(selectors.consignments.isDeleting).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isCreatingConsignments()', () => {\n        it('returns true if updating shipping address', () => {\n            jest.spyOn(selectors.consignments, 'isCreating').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCreatingConsignments()).toBe(true);\n            expect(selectors.consignments.isCreating).toHaveBeenCalled();\n        });\n\n        it('returns false if not updating shipping address', () => {\n            jest.spyOn(selectors.consignments, 'isCreating').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCreatingConsignments()).toBe(false);\n            expect(selectors.consignments.isCreating).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isInitializingShipping()', () => {\n        it('returns true if initializing shipping', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isInitializing').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isInitializingShipping('foobar')).toBe(true);\n            expect(selectors.shippingStrategies.isInitializing).toHaveBeenCalledWith('foobar');\n        });\n\n        it('returns false if not initializing shipping', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isInitializing').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isInitializingShipping('foobar')).toBe(false);\n            expect(selectors.shippingStrategies.isInitializing).toHaveBeenCalledWith('foobar');\n        });\n    });\n\n    describe('#isApplyingCoupon()', () => {\n        it('returns true if applying a coupon', () => {\n            jest.spyOn(selectors.coupons, 'isApplying').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isApplyingCoupon()).toBe(true);\n            expect(selectors.coupons.isApplying).toHaveBeenCalled();\n        });\n\n        it('returns false if not applying a coupon', () => {\n            jest.spyOn(selectors.coupons, 'isApplying').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isApplyingCoupon()).toBe(false);\n            expect(selectors.coupons.isApplying).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isRemovingCoupon()', () => {\n        it('returns true if removing a coupon', () => {\n            jest.spyOn(selectors.coupons, 'isRemoving').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isRemovingCoupon()).toBe(true);\n            expect(selectors.coupons.isRemoving).toHaveBeenCalled();\n        });\n\n        it('returns false if not removing a coupon', () => {\n            jest.spyOn(selectors.coupons, 'isRemoving').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isRemovingCoupon()).toBe(false);\n            expect(selectors.coupons.isRemoving).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isApplyingGiftCertificate()', () => {\n        it('returns true if applying a gift certificate', () => {\n            jest.spyOn(selectors.giftCertificates, 'isApplying').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isApplyingGiftCertificate()).toBe(true);\n            expect(selectors.giftCertificates.isApplying).toHaveBeenCalled();\n        });\n\n        it('returns false if not applying a gift certificate', () => {\n            jest.spyOn(selectors.giftCertificates, 'isApplying').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isApplyingGiftCertificate()).toBe(false);\n            expect(selectors.giftCertificates.isApplying).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isRemovingGiftCertificate()', () => {\n        it('returns true if removing a gift certificate', () => {\n            jest.spyOn(selectors.giftCertificates, 'isRemoving').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isRemovingGiftCertificate()).toBe(true);\n            expect(selectors.giftCertificates.isRemoving).toHaveBeenCalled();\n        });\n\n        it('returns false if not removing a gift certificate', () => {\n            jest.spyOn(selectors.giftCertificates, 'isRemoving').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isRemovingGiftCertificate()).toBe(false);\n            expect(selectors.giftCertificates.isRemoving).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isLoadingInstruments()', () => {\n        it('returns true if loading instruments', () => {\n            jest.spyOn(selectors.instruments, 'isLoading').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingInstruments()).toBe(true);\n            expect(selectors.instruments.isLoading).toHaveBeenCalled();\n        });\n\n        it('returns false if not loading instruments', () => {\n            jest.spyOn(selectors.instruments, 'isLoading').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingInstruments()).toBe(false);\n            expect(selectors.instruments.isLoading).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isDeletingInstrument()', () => {\n        it('returns true if deleting instrument', () => {\n            jest.spyOn(selectors.instruments, 'isDeleting').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isDeletingInstrument('123')).toBe(true);\n            expect(selectors.instruments.isDeleting).toHaveBeenCalledWith('123');\n        });\n\n        it('returns false if not deleting instrument', () => {\n            jest.spyOn(selectors.instruments, 'isDeleting').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isDeletingInstrument('123')).toBe(false);\n            expect(selectors.instruments.isDeleting).toHaveBeenCalledWith('123');\n        });\n    });\n\n    describe('#isLoadingConfig()', () => {\n        it('returns true if loading config', () => {\n            jest.spyOn(selectors.config, 'isLoading').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingConfig()).toBe(true);\n            expect(selectors.config.isLoading).toHaveBeenCalledWith();\n        });\n\n        it('returns false if not loading config', () => {\n            jest.spyOn(selectors.config, 'isLoading').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isLoadingConfig()).toBe(false);\n            expect(selectors.config.isLoading).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isPaymentStepPending()', () => {\n        it('returns true if widget is interacting', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isWidgetInteracting').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isPaymentStepPending()).toBe(true);\n            expect(selectors.paymentStrategies.isWidgetInteracting).toHaveBeenCalled();\n        });\n\n        it('returns false if widget is not interacting', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isWidgetInteracting').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isPaymentStepPending()).toBe(false);\n            expect(selectors.paymentStrategies.isWidgetInteracting).toHaveBeenCalled();\n        });\n\n        it('returns true if strategy is initializing', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isInitializing').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isPaymentStepPending()).toBe(true);\n            expect(selectors.paymentStrategies.isInitializing).toHaveBeenCalled();\n        });\n\n        it('returns false if strategy is not initializing', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isInitializing').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isPaymentStepPending()).toBe(false);\n            expect(selectors.paymentStrategies.isInitializing).toHaveBeenCalled();\n        });\n\n        it('returns true if strategy is executing', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isExecuting').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isPaymentStepPending()).toBe(true);\n            expect(selectors.paymentStrategies.isExecuting).toHaveBeenCalled();\n        });\n\n        it('returns false if strategy is not executing', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isExecuting').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isPaymentStepPending()).toBe(false);\n            expect(selectors.paymentStrategies.isExecuting).toHaveBeenCalled();\n        });\n\n        it('returns true if strategy is finalizing', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isFinalizing').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isPaymentStepPending()).toBe(true);\n            expect(selectors.paymentStrategies.isFinalizing).toHaveBeenCalled();\n        });\n\n        it('returns false if strategy is not finalizing', () => {\n            jest.spyOn(selectors.paymentStrategies, 'isFinalizing').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isPaymentStepPending()).toBe(false);\n            expect(selectors.paymentStrategies.isFinalizing).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isCustomerStepPending()', () => {\n        it('returns true if widget is interacting', () => {\n            jest.spyOn(selectors.customerStrategies, 'isWidgetInteracting').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCustomerStepPending()).toBe(true);\n            expect(selectors.customerStrategies.isWidgetInteracting).toHaveBeenCalled();\n        });\n\n        it('returns false if widget is not interacting', () => {\n            jest.spyOn(selectors.customerStrategies, 'isWidgetInteracting').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCustomerStepPending()).toBe(false);\n            expect(selectors.customerStrategies.isWidgetInteracting).toHaveBeenCalled();\n        });\n\n        it('returns true if payment method checkout is executing', () => {\n            jest.spyOn(\n                selectors.customerStrategies,\n                'isExecutingPaymentMethodCheckout',\n            ).mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCustomerStepPending()).toBe(true);\n            expect(\n                selectors.customerStrategies.isExecutingPaymentMethodCheckout,\n            ).toHaveBeenCalled();\n        });\n\n        it('returns false if payment method checkout is not executing', () => {\n            jest.spyOn(\n                selectors.customerStrategies,\n                'isExecutingPaymentMethodCheckout',\n            ).mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCustomerStepPending()).toBe(false);\n            expect(\n                selectors.customerStrategies.isExecutingPaymentMethodCheckout,\n            ).toHaveBeenCalled();\n        });\n\n        it('returns true if strategy is initializing', () => {\n            jest.spyOn(selectors.customerStrategies, 'isInitializing').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCustomerStepPending()).toBe(true);\n            expect(selectors.customerStrategies.isInitializing).toHaveBeenCalled();\n        });\n\n        it('returns false if strategy is not initializing', () => {\n            jest.spyOn(selectors.customerStrategies, 'isInitializing').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCustomerStepPending()).toBe(false);\n            expect(selectors.customerStrategies.isInitializing).toHaveBeenCalled();\n        });\n\n        it('returns true if strategy is executing', () => {\n            jest.spyOn(selectors.customerStrategies, 'isSigningIn').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCustomerStepPending()).toBe(true);\n            expect(selectors.customerStrategies.isSigningIn).toHaveBeenCalled();\n        });\n\n        it('returns false if strategy is not executing', () => {\n            jest.spyOn(selectors.customerStrategies, 'isSigningIn').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCustomerStepPending()).toBe(false);\n            expect(selectors.customerStrategies.isSigningIn).toHaveBeenCalled();\n        });\n\n        it('returns true if strategy is finalizing', () => {\n            jest.spyOn(selectors.customerStrategies, 'isSigningOut').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCustomerStepPending()).toBe(true);\n            expect(selectors.customerStrategies.isSigningOut).toHaveBeenCalled();\n        });\n\n        it('returns false if strategy is not finalizing', () => {\n            jest.spyOn(selectors.customerStrategies, 'isSigningOut').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isCustomerStepPending()).toBe(false);\n            expect(selectors.customerStrategies.isSigningOut).toHaveBeenCalled();\n        });\n    });\n\n    describe('#isShippingStepPending()', () => {\n        it('returns true if widget is interacting', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isWidgetInteracting').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isShippingStepPending()).toBe(true);\n            expect(selectors.shippingStrategies.isWidgetInteracting).toHaveBeenCalled();\n        });\n\n        it('returns false if widget is not interacting', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isWidgetInteracting').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isShippingStepPending()).toBe(false);\n            expect(selectors.shippingStrategies.isWidgetInteracting).toHaveBeenCalled();\n        });\n\n        it('returns true if strategy is initializing', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isInitializing').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isShippingStepPending()).toBe(true);\n            expect(selectors.shippingStrategies.isInitializing).toHaveBeenCalled();\n        });\n\n        it('returns false if strategy is not initializing', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isInitializing').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isShippingStepPending()).toBe(false);\n            expect(selectors.shippingStrategies.isInitializing).toHaveBeenCalled();\n        });\n\n        it('returns true if strategy is updating address', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isUpdatingAddress').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isShippingStepPending()).toBe(true);\n            expect(selectors.shippingStrategies.isUpdatingAddress).toHaveBeenCalled();\n        });\n\n        it('returns false if strategy is not updating address', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isUpdatingAddress').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isShippingStepPending()).toBe(false);\n            expect(selectors.shippingStrategies.isUpdatingAddress).toHaveBeenCalled();\n        });\n\n        it('returns true if strategy is selecting option', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isSelectingOption').mockReturnValue(true);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isShippingStepPending()).toBe(true);\n            expect(selectors.shippingStrategies.isSelectingOption).toHaveBeenCalled();\n        });\n\n        it('returns false if strategy is not selecting option', () => {\n            jest.spyOn(selectors.shippingStrategies, 'isSelectingOption').mockReturnValue(false);\n\n            const statuses = createCheckoutStoreStatusSelector(selectors);\n\n            expect(statuses.isShippingStepPending()).toBe(false);\n            expect(selectors.shippingStrategies.isSelectingOption).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-store-status-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector, createShallowEqualSelector } from '../common/selector';\nimport { Omit } from '../common/types';\n\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\n/**\n * Responsible for checking the statuses of various asynchronous actions related\n * to checkout.\n *\n * This object has a set of getters that return true if an action is in\n * progress. For example, you can check whether a customer is submitting an\n * order and waiting for the request to complete.\n */\nexport default interface CheckoutStoreStatusSelector {\n    /**\n     * Checks whether any checkout action is pending.\n     *\n     * @returns True if there is a pending action, otherwise false.\n     */\n    isPending(): boolean;\n\n    /**\n     * Checks whether the current checkout is loading.\n     *\n     * @returns True if the current checkout is loading, otherwise false.\n     */\n    isLoadingCheckout(): boolean;\n\n    /**\n     * Checks whether the current checkout is being updated.\n     *\n     * @returns True if the current checkout is being updated, otherwise false.\n     */\n    isUpdatingCheckout(): boolean;\n\n    /**\n     * Checks whether spam check is executing.\n     *\n     * @returns True if the current checkout is being updated, otherwise false.\n     */\n    isExecutingSpamCheck(): boolean;\n\n    /**\n     * Checks whether the current order is submitting.\n     *\n     * @returns True if the current order is submitting, otherwise false.\n     */\n    isSubmittingOrder(): boolean;\n\n    /**\n     * Checks whether the current order is finalizing.\n     *\n     * @returns True if the current order is finalizing, otherwise false.\n     */\n    isFinalizingOrder(): boolean;\n\n    /**\n     * Checks whether the current order is loading.\n     *\n     * @returns True if the current order is loading, otherwise false.\n     */\n    isLoadingOrder(): boolean;\n\n    /**\n     * Checks whether the current cart is loading.\n     *\n     * @returns True if the current cart is loading, otherwise false.\n     */\n    isLoadingCart(): boolean;\n\n    /**\n     * Checks whether billing countries are loading.\n     *\n     * @returns True if billing countries are loading, otherwise false.\n     */\n    isLoadingBillingCountries(): boolean;\n\n    /**\n     * Checks whether shipping countries are loading.\n     *\n     * @returns True if shipping countries are loading, otherwise false.\n     */\n    isLoadingShippingCountries(): boolean;\n\n    /**\n     * Checks whether payment methods are loading.\n     *\n     * @returns True if payment methods are loading, otherwise false.\n     */\n    isLoadingPaymentMethods(): boolean;\n\n    /**\n     * Checks whether a specific or any payment method is loading.\n     *\n     * The method returns true if no ID is provided and at least one payment\n     * method is loading.\n     *\n     * @param methodId - The identifier of the payment method to check.\n     * @returns True if the payment method is loading, otherwise false.\n     */\n    isLoadingPaymentMethod(methodId?: string): boolean;\n\n    /**\n     * Checks whether a specific or any payment method is initializing.\n     *\n     * The method returns true if no ID is provided and at least one payment\n     * method is initializing.\n     *\n     * @param methodId - The identifier of the payment method to check.\n     * @returns True if the payment method is initializing, otherwise false.\n     */\n    isInitializingPayment(methodId?: string): boolean;\n\n    /**\n     * Checks whether the current customer is signing in.\n     *\n     * If an ID is provided, the method also checks whether the customer is\n     * signing in using a specific customer method with the same ID.\n     *\n     * @param methodId - The identifier of the method used for signing in the\n     * current customer.\n     * @returns True if the customer is signing in, otherwise false.\n     */\n    isSigningIn(methodId?: string): boolean;\n\n    /**\n     * Checks whether the current customer is signing out.\n     *\n     * If an ID is provided, the method also checks whether the customer is\n     * signing out using a specific customer method with the same ID.\n     *\n     * @param methodId - The identifier of the method used for signing out the\n     * current customer.\n     * @returns True if the customer is signing out, otherwise false.\n     */\n    isSigningOut(methodId?: string): boolean;\n\n    /**\n     * Checks whether the customer step is initializing.\n     *\n     * If an ID is provided, the method also checks whether the customer step is\n     * initializing using a specific customer method with the same ID.\n     *\n     * @param methodId - The identifier of the method used for initializing the\n     * customer step of checkout.\n     * @returns True if the customer step is initializing, otherwise false.\n     */\n    isInitializingCustomer(methodId?: string): boolean;\n\n    /**\n     * Checks whether a wallet button is initialized.\n     *\n     * @param methodId - The identifier of the payment method to check.\n     * @returns True if the wallet button method is initialized, otherwise false.\n     */\n    isInitializedCustomer(methodId?: string): boolean;\n\n    /**\n     * Checks whether the current customer is executing payment method checkout.\n     *\n     * If an ID is provided, the method also checks whether the customer is\n     * executing payment method checkout using a specific customer method with the same ID.\n     *\n     * @param methodId - The identifier of the method used for continuing the\n     * current customer.\n     * @returns True if the customer is executing payment method checkout, otherwise false.\n     */\n    isExecutingPaymentMethodCheckout(methodId?: string): boolean;\n\n    /**\n     * Checks whether shipping options are loading.\n     *\n     * @returns True if shipping options are loading, otherwise false.\n     */\n    isLoadingShippingOptions(): boolean;\n\n    /**\n     * Checks whether a shipping option is being selected.\n     *\n     * A consignment ID should be provided when checking if a shipping option\n     * is being selected for a specific consignment, otherwise it will check\n     * for all consignments.\n     *\n     * @param consignmentId - The identifier of the consignment to be checked.\n     * @returns True if selecting a shipping option, otherwise false.\n     */\n    isSelectingShippingOption(consignmentId?: string): boolean;\n\n    /**\n     * Checks whether the billing address is being updated.\n     *\n     * @returns True if updating their billing address, otherwise false.\n     */\n    isUpdatingBillingAddress(): boolean;\n\n    /**\n     * Checks whether the shopper is continuing out as a guest.\n     *\n     * @returns True if continuing as guest, otherwise false.\n     */\n    isContinuingAsGuest(): boolean;\n\n    /**\n     * Checks the shipping address is being updated.\n     *\n     * @returns True if updating their shipping address, otherwise false.\n     */\n    isUpdatingShippingAddress(): boolean;\n\n    /**\n     * Checks whether a given/any consignment is being updated.\n     *\n     * A consignment ID should be provided when checking for a specific consignment,\n     * otherwise it will check for any consignment.\n     *\n     * @param consignmentId - The identifier of the consignment to be checked.\n     * @returns True if updating consignment(s), otherwise false.\n     */\n    isUpdatingConsignment(consignmentId?: string): boolean;\n\n    /**\n     * Checks whether a given/any consignment is being deleted.\n     *\n     * A consignment ID should be provided when checking for a specific consignment,\n     * otherwise it will check for any consignment.\n     *\n     * @param consignmentId - The identifier of the consignment to be checked.\n     * @returns True if deleting consignment(s), otherwise false.\n     */\n    isDeletingConsignment(consignmentId?: string): boolean;\n\n    /**\n     * Checks whether a given/any consignment is being updated.\n     *\n     * A consignment ID should be provided when checking for a specific consignment,\n     * otherwise it will check for any consignment.\n     *\n     * @returns True if creating consignments, otherwise false.\n     */\n    isCreatingConsignments(): boolean;\n\n    /**\n     * Checks whether the shipping step of a checkout process is initializing.\n     *\n     * If an identifier is provided, the method also checks whether the shipping\n     * step is initializing using a specific shipping method with the same\n     * identifier.\n     *\n     * @param methodId - The identifer of the initialization method to check.\n     * @returns True if the shipping step is initializing, otherwise false.\n     */\n    isInitializingShipping(methodId?: string): boolean;\n\n    /**\n     * Checks whether the current customer is applying a coupon code.\n     *\n     * @returns True if applying a coupon code, otherwise false.\n     */\n    isApplyingCoupon(): boolean;\n\n    /**\n     * Checks whether the current customer is applying store credit.\n     *\n     * @returns True if applying store credit, otherwise false.\n     */\n    isApplyingStoreCredit(): boolean;\n\n    /**\n     * Checks whether the current customer is removing a coupon code.\n     *\n     * @returns True if removing a coupon code, otherwise false.\n     */\n    isRemovingCoupon(): boolean;\n\n    /**\n     * Checks whether a sign-in email is being sent.\n     *\n     * @returns True if sending a sign-in email, otherwise false\n     */\n    isSendingSignInEmail(): boolean;\n\n    /**\n     * Checks whether a B2B token is being loaded.\n     *\n     * @returns True if a B2B token is being loaded, otherwise false.\n     */\n    isLoadingB2BToken(): boolean;\n\n    /**\n     * Checks whether the current customer is applying a gift certificate.\n     *\n     * @returns True if applying a gift certificate, otherwise false.\n     */\n    isApplyingGiftCertificate(): boolean;\n\n    /**\n     * Checks whether the current customer is removing a gift certificate.\n     *\n     * @returns True if removing a gift certificate, otherwise false.\n     */\n    isRemovingGiftCertificate(): boolean;\n\n    /**\n     * Checks whether the current customer's payment instruments are loading.\n     *\n     * @returns True if payment instruments are loading, otherwise false.\n     */\n    isLoadingInstruments(): boolean;\n\n    /**\n     * Checks whether the current customer is deleting a payment instrument.\n     *\n     * @returns True if deleting a payment instrument, otherwise false.\n     */\n    isDeletingInstrument(instrumentId?: string): boolean;\n\n    /**\n     * Checks whether the checkout configuration of a store is loading.\n     *\n     * @returns True if the configuration is loading, otherwise false.\n     */\n    isLoadingConfig(): boolean;\n\n    /**\n     * Checks whether the customer step of a checkout is in a pending state.\n     *\n     * The customer step is considered to be pending if it is in the process of\n     * initializing, signing in, signing out, and/or interacting with a customer\n     * widget.\n     *\n     * @returns True if the customer step is pending, otherwise false.\n     */\n    isCustomerStepPending(): boolean;\n\n    /**\n     * Checks whether the shipping step of a checkout is in a pending state.\n     *\n     * The shipping step is considered to be pending if it is in the process of\n     * initializing, updating address, selecting a shipping option, and/or\n     * interacting with a shipping widget.\n     *\n     * @returns True if the shipping step is pending, otherwise false.\n     */\n    isShippingStepPending(): boolean;\n\n    /**\n     * Checks whether the payment step of a checkout is in a pending state.\n     *\n     * The payment step is considered to be pending if it is in the process of\n     * initializing, submitting an order, finalizing an order, and/or\n     * interacting with a payment widget.\n     *\n     * @returns True if the payment step is pending, otherwise false.\n     */\n    isPaymentStepPending(): boolean;\n\n    /**\n     * Checks whether the subscriptions are being updated.\n     *\n     * @returns True if updating subscriptions, otherwise false.\n     */\n    isUpdatingSubscriptions(): boolean;\n\n    /**\n     * Checks whether a customer account is being created\n     *\n     * @returns True if creating, otherwise false.\n     */\n    isCreatingCustomerAccount(): boolean;\n\n    /**\n     * Checks whether a customer address is being created\n     *\n     * @returns True if creating, otherwise false.\n     */\n    isCreatingCustomerAddress(): boolean;\n\n    /**\n     * Checks whether pickup options are loading.\n     *\n     * @returns True if pickup options are loading, otherwise false.\n     */\n    isLoadingPickupOptions(): boolean;\n}\n\nexport type CheckoutStoreStatusSelectorFactory = (\n    state: InternalCheckoutSelectors,\n) => CheckoutStoreStatusSelector;\n\nexport function createCheckoutStoreStatusSelectorFactory(): CheckoutStoreStatusSelectorFactory {\n    const isPending = createShallowEqualSelector(\n        (selector: Omit<CheckoutStoreStatusSelector, 'isPending'>) => selector,\n        (selector) => () => {\n            return (\n                Object.keys(selector) as Array<keyof Omit<CheckoutStoreStatusSelector, 'isPending'>>\n            ).some((key) => selector[key]());\n        },\n    );\n\n    const isSelectingShippingOption = createSelector(\n        ({ shippingStrategies }: InternalCheckoutSelectors) => shippingStrategies.isSelectingOption,\n        ({ consignments }: InternalCheckoutSelectors) => consignments.isUpdatingShippingOption,\n        (isSelectingOption, isUpdatingShippingOption) => (consignmentId?: string) => {\n            return isSelectingOption() || isUpdatingShippingOption(consignmentId);\n        },\n    );\n\n    const isCustomerStepPending = createSelector(\n        ({ customerStrategies }: InternalCheckoutSelectors) => customerStrategies.isInitializing,\n        ({ customerStrategies }: InternalCheckoutSelectors) => customerStrategies.isSigningIn,\n        ({ customerStrategies }: InternalCheckoutSelectors) => customerStrategies.isSigningOut,\n        ({ customerStrategies }: InternalCheckoutSelectors) =>\n            customerStrategies.isExecutingPaymentMethodCheckout,\n        ({ customerStrategies }: InternalCheckoutSelectors) =>\n            customerStrategies.isWidgetInteracting,\n        (\n                isInitializing,\n                isSigningIn,\n                isSigningOut,\n                isExecutingPaymentMethodCheckout,\n                isWidgetInteracting,\n            ) =>\n            (methodId?: string) => {\n                return (\n                    isInitializing(methodId) ||\n                    isSigningIn(methodId) ||\n                    isSigningOut(methodId) ||\n                    isExecutingPaymentMethodCheckout(methodId) ||\n                    isWidgetInteracting(methodId)\n                );\n            },\n    );\n\n    const isShippingStepPending = createSelector(\n        ({ shippingStrategies }: InternalCheckoutSelectors) => shippingStrategies.isInitializing,\n        ({ shippingStrategies }: InternalCheckoutSelectors) => shippingStrategies.isUpdatingAddress,\n        ({ shippingStrategies }: InternalCheckoutSelectors) => shippingStrategies.isSelectingOption,\n        ({ shippingStrategies }: InternalCheckoutSelectors) =>\n            shippingStrategies.isWidgetInteracting,\n        (isInitializing, isUpdatingAddress, isSelectingOption, isWidgetInteracting) =>\n            (methodId?: string) => {\n                return (\n                    isInitializing(methodId) ||\n                    isUpdatingAddress(methodId) ||\n                    isSelectingOption(methodId) ||\n                    isWidgetInteracting(methodId)\n                );\n            },\n    );\n\n    const isPaymentStepPending = createSelector(\n        ({ paymentStrategies }: InternalCheckoutSelectors) => paymentStrategies.isInitializing,\n        ({ paymentStrategies }: InternalCheckoutSelectors) => paymentStrategies.isExecuting,\n        ({ paymentStrategies }: InternalCheckoutSelectors) => paymentStrategies.isFinalizing,\n        ({ paymentStrategies }: InternalCheckoutSelectors) => paymentStrategies.isWidgetInteracting,\n        (isInitializing, isExecuting, isFinalizing, isWidgetInteracting) => (methodId?: string) => {\n            return (\n                isInitializing(methodId) ||\n                isExecuting(methodId) ||\n                isFinalizing(methodId) ||\n                isWidgetInteracting(methodId)\n            );\n        },\n    );\n\n    const isSubmittingOrder = createSelector(\n        ({ paymentStrategies }: InternalCheckoutSelectors) => paymentStrategies.isExecuting,\n        ({ checkout }: InternalCheckoutSelectors) => checkout.isExecutingSpamCheck, // Remove this when CheckoutService#initializeSpamProtection is deprecated\n        (isExecuting, isExecutingSpamCheck) => (methodId?: string) => {\n            return isExecuting(methodId) || isExecutingSpamCheck();\n        },\n    );\n\n    return memoizeOne((state: InternalCheckoutSelectors): CheckoutStoreStatusSelector => {\n        const selector = {\n            isLoadingCheckout: state.checkout.isLoading,\n            isUpdatingCheckout: state.checkout.isUpdating,\n            isExecutingSpamCheck: state.checkout.isExecutingSpamCheck,\n            isSubmittingOrder: isSubmittingOrder(state),\n            isFinalizingOrder: state.paymentStrategies.isFinalizing,\n            isLoadingOrder: state.order.isLoading,\n            isLoadingCart: state.cart.isLoading,\n            isLoadingBillingCountries: state.countries.isLoading,\n            isLoadingShippingCountries: state.shippingCountries.isLoading,\n            isLoadingPaymentMethods: state.paymentMethods.isLoading,\n            isLoadingPaymentMethod: state.paymentMethods.isLoadingMethod,\n            isInitializingPayment: state.paymentStrategies.isInitializing,\n            isSigningIn: state.customerStrategies.isSigningIn,\n            isSigningOut: state.customerStrategies.isSigningOut,\n            isExecutingPaymentMethodCheckout:\n                state.customerStrategies.isExecutingPaymentMethodCheckout,\n            isInitializingCustomer: state.customerStrategies.isInitializing,\n            isInitializedCustomer: state.customerStrategies.isInitialized,\n            isLoadingShippingOptions: state.consignments.isLoadingShippingOptions,\n            isSelectingShippingOption: isSelectingShippingOption(state),\n            isUpdatingBillingAddress: state.billingAddress.isUpdating,\n            isUpdatingSubscriptions: state.subscriptions.isUpdating,\n            isCreatingCustomerAccount: state.customer.isCreatingCustomerAccount,\n            isCreatingCustomerAddress: state.customer.isCreatingCustomerAddress,\n            isContinuingAsGuest: state.billingAddress.isContinuingAsGuest,\n            isUpdatingShippingAddress: state.shippingStrategies.isUpdatingAddress,\n            isUpdatingConsignment: state.consignments.isUpdating,\n            isDeletingConsignment: state.consignments.isDeleting,\n            isCreatingConsignments: state.consignments.isCreating,\n            isInitializingShipping: state.shippingStrategies.isInitializing,\n            isApplyingStoreCredit: state.storeCredit.isApplying,\n            isApplyingCoupon: state.coupons.isApplying,\n            isRemovingCoupon: state.coupons.isRemoving,\n            isApplyingGiftCertificate: state.giftCertificates.isApplying,\n            isRemovingGiftCertificate: state.giftCertificates.isRemoving,\n            isLoadingInstruments: state.instruments.isLoading,\n            isDeletingInstrument: state.instruments.isDeleting,\n            isLoadingConfig: state.config.isLoading,\n            isSendingSignInEmail: state.signInEmail.isSending,\n            isLoadingB2BToken: state.b2bToken.isLoading,\n            isCustomerStepPending: isCustomerStepPending(state),\n            isShippingStepPending: isShippingStepPending(state),\n            isPaymentStepPending: isPaymentStepPending(state),\n            isLoadingPickupOptions: state.pickupOptions.isLoading,\n        };\n\n        return {\n            isPending: isPending(selector),\n            ...selector,\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-store.ts",
    "content": "import { Action, DataStore, ReadableDataStore } from '@bigcommerce/data-store';\n\nimport CheckoutStoreState from './checkout-store-state';\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\ntype CheckoutStore = DataStore<CheckoutStoreState, Action, InternalCheckoutSelectors>;\n\nexport default CheckoutStore;\n\nexport type ReadableCheckoutStore = ReadableDataStore<InternalCheckoutSelectors>;\n\nexport interface CheckoutStoreOptions {\n    shouldWarnMutation?: boolean;\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-validator.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { getCart } from '../cart/carts.mock';\nimport { CartChangedError } from '../cart/errors';\nimport { MissingDataError } from '../common/error/errors';\nimport { getResponse } from '../common/http-request/responses.mock';\nimport { getCoupon } from '../coupon/coupons.mock';\nimport { getGiftCertificate } from '../coupon/gift-certificates.mock';\n\nimport CheckoutRequestSender from './checkout-request-sender';\nimport CheckoutValidator from './checkout-validator';\nimport { getCheckout } from './checkouts.mock';\n\ndescribe('CheckoutValidator', () => {\n    const checkoutRequestSender = new CheckoutRequestSender(createRequestSender());\n    const checkoutValidator = new CheckoutValidator(checkoutRequestSender);\n    const checkout = getCheckout();\n\n    describe('validate()', () => {\n        beforeEach(() => {\n            jest.spyOn(checkoutRequestSender, 'loadCheckout').mockReturnValue(\n                Promise.resolve(getResponse(getCheckout())),\n            );\n        });\n\n        it('throws when no cart is passed', () => {\n            expect(() => checkoutValidator.validate()).toThrow(MissingDataError);\n        });\n\n        it('calls loadCheckout when cart is passed', () => {\n            checkoutValidator.validate(checkout, {});\n\n            expect(checkoutRequestSender.loadCheckout).toHaveBeenCalledWith(\n                'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                {},\n            );\n        });\n\n        describe('when API request fails', () => {\n            beforeEach(() => {\n                jest.spyOn(checkoutRequestSender, 'loadCheckout').mockReturnValue(\n                    Promise.reject({ foo: 'bar' }),\n                );\n            });\n\n            it('returns a rejected promise containing the original reason', async () => {\n                const errorHandler = jest.fn(() => {});\n\n                await checkoutValidator.validate(checkout, {}).catch(errorHandler);\n\n                expect(errorHandler).toHaveBeenCalledWith({ foo: 'bar' });\n            });\n        });\n\n        describe('when API request succeeds', () => {\n            beforeEach(() => {\n                jest.spyOn(checkoutRequestSender, 'loadCheckout').mockReturnValue(\n                    Promise.resolve(getResponse(getCheckout())),\n                );\n            });\n\n            it('resolves when cart content matches', async () => {\n                const successHandler = jest.fn(() => {});\n\n                await checkoutValidator.validate(checkout).then(successHandler);\n\n                expect(successHandler).toHaveBeenCalled();\n            });\n\n            it('rejects with \"cart changed error\" when carts do not match', async () => {\n                const errorHandler = jest.fn(() => {});\n                const cart = getCart();\n\n                await checkoutValidator\n                    .validate({\n                        ...checkout,\n                        cart: {\n                            ...cart,\n                            lineItems: {\n                                ...cart.lineItems,\n                                physicalItems: [],\n                            },\n                        },\n                    })\n                    .catch(errorHandler);\n\n                expect(errorHandler).toHaveBeenCalledWith(\n                    new CartChangedError(getCheckout(), getCheckout()),\n                );\n            });\n\n            it('rejects with \"cart changed error\" if outstandingBalance are different', async () => {\n                try {\n                    await checkoutValidator.validate({\n                        ...checkout,\n                        outstandingBalance: 10,\n                    });\n                } catch (error) {\n                    expect(error).toBeInstanceOf(CartChangedError);\n                }\n            });\n\n            it('rejects with \"cart changed error\" if coupons are different', async () => {\n                try {\n                    await checkoutValidator.validate({\n                        ...checkout,\n                        coupons: [getCoupon(), getCoupon()],\n                    });\n                } catch (error) {\n                    expect(error).toBeInstanceOf(CartChangedError);\n                }\n            });\n\n            it('rejects with \"cart changed error\" if gift certificates are different', async () => {\n                try {\n                    await checkoutValidator.validate({\n                        ...checkout,\n                        giftCertificates: [getGiftCertificate(), getGiftCertificate()],\n                    });\n                } catch (error) {\n                    expect(error).toBeInstanceOf(CartChangedError);\n                }\n            });\n\n            it('does not reject \"cart changed error\" if only update timestamp is different', async () => {\n                await expect(\n                    checkoutValidator.validate({\n                        ...checkout,\n                        updatedTime: '2018-06-01T14:31:40+00:00',\n                    }),\n                ).resolves.toBeUndefined();\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/checkout-validator.ts",
    "content": "import { isEqual, map } from 'lodash';\n\nimport { Cart, CartComparator } from '../cart';\nimport { CartChangedError } from '../cart/errors';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { Coupon, GiftCertificate } from '../coupon';\n\nimport Checkout from './checkout';\nimport CheckoutRequestSender from './checkout-request-sender';\n\nexport type ComparableCheckout = Pick<\n    Checkout,\n    'outstandingBalance' | 'coupons' | 'giftCertificates'\n> & {\n    cart: Partial<Cart>;\n};\n\nexport default class CheckoutValidator {\n    constructor(private _checkoutRequestSender: CheckoutRequestSender) {}\n\n    validate(checkout?: Checkout, options?: RequestOptions): Promise<void> {\n        if (!checkout) {\n            throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n        }\n\n        return this._checkoutRequestSender.loadCheckout(checkout.id, options).then((response) => {\n            const comparator = new CartComparator();\n\n            if (\n                checkout.outstandingBalance === response.body.outstandingBalance &&\n                this._compareCoupons(checkout.coupons, response.body.coupons) &&\n                this._compareGiftCertificates(\n                    checkout.giftCertificates,\n                    response.body.giftCertificates,\n                ) &&\n                comparator.isEqual(checkout.cart, response.body.cart)\n            ) {\n                return;\n            }\n\n            throw new CartChangedError(\n                this._getComparableCheckout(checkout),\n                this._getComparableCheckout(response.body),\n            );\n        });\n    }\n\n    private _compareCoupons(couponsA: Coupon[], couponsB: Coupon[]): boolean {\n        return isEqual(map(couponsA, 'code'), map(couponsB, 'code'));\n    }\n\n    private _compareGiftCertificates(\n        giftCertificatesA: GiftCertificate[],\n        giftCertificatesB: GiftCertificate[],\n    ): boolean {\n        return isEqual(map(giftCertificatesA, 'code'), map(giftCertificatesB, 'code'));\n    }\n\n    private _getComparableCheckout(checkout: Checkout): ComparableCheckout {\n        const { cart, coupons, giftCertificates, outstandingBalance } = checkout;\n\n        return {\n            cart: {\n                cartAmount: cart.cartAmount,\n                currency: cart.currency,\n                lineItems: cart.lineItems,\n            },\n            coupons,\n            giftCertificates,\n            outstandingBalance,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkout.ts",
    "content": "import { BillingAddress } from '../billing';\nimport { Cart } from '../cart';\nimport { Coupon, GiftCertificate } from '../coupon';\nimport { Customer } from '../customer';\nimport { Discount } from '../discount';\nimport { Fee } from '../fee';\nimport { Promotion } from '../promotion';\nimport { Consignment } from '../shipping';\nimport { Tax } from '../tax';\n\nexport default interface Checkout {\n    id: string;\n    billingAddress?: BillingAddress;\n    cart: Cart;\n    customer: Customer;\n    customerMessage: string;\n    consignments: Consignment[];\n    taxes: Tax[];\n    discounts: Discount[];\n    displayDiscountTotal: number;\n    isStoreCreditApplied: boolean;\n    coupons: Coupon[];\n    orderId?: number;\n    giftWrappingCostTotal: number;\n    comparisonShippingCost: number;\n    shippingCostTotal: number;\n    shippingCostBeforeDiscount: number;\n    /**\n     * Whether the current checkout must execute spam protection\n     * before placing the order.\n     *\n     * Note: You need to enable Google ReCAPTCHA bot protection in your Checkout Settings.\n     */\n    shouldExecuteSpamCheck: boolean;\n    handlingCostTotal: number;\n    taxTotal: number;\n    subtotal: number;\n    grandTotal: number;\n    outstandingBalance: number;\n    orderBasedAutoDiscountTotal: number;\n    manualDiscountTotal: number;\n    hasOrderLevelAutoDiscountMaxLimitReached?: boolean;\n    giftCertificates: GiftCertificate[];\n    promotions?: Promotion[];\n    balanceDue: number;\n    createdTime: string;\n    updatedTime: string;\n    payments?: CheckoutPayment[];\n    channelId: number;\n    fees: Fee[];\n    totalDiscount: number;\n    version: number;\n}\n\nexport interface CheckoutRequestBody {\n    customerMessage: string;\n}\n\nexport interface CheckoutPayment {\n    detail: {\n        step: string;\n    };\n    providerId: string;\n    providerType: string;\n    gatewayId?: string;\n}\n"
  },
  {
    "path": "packages/core/src/checkout/checkouts.mock.ts",
    "content": "import { getBillingAddress, getBillingAddressState } from '../billing/billing-addresses.mock';\nimport { getCart, getCartState } from '../cart/carts.mock';\nimport { getCheckoutButtonState } from '../checkout-buttons/checkout-buttons.mock';\nimport { getConfigState } from '../config/configs.mock';\nimport { getCoupon, getCouponsState, getShippingCoupon } from '../coupon/coupons.mock';\nimport { getGiftCertificate, getGiftCertificatesState } from '../coupon/gift-certificates.mock';\nimport { getCustomer, getCustomerState } from '../customer/customers.mock';\nimport { getCustomerStrategyState } from '../customer/internal-customers.mock';\nimport { getExtensionState } from '../extension/extension.mock';\nimport { getFormFieldsState } from '../form/form.mock';\nimport { getCountriesState } from '../geography/countries.mock';\nimport { getOrderBillingAddressState } from '../order-billing-address';\nimport { getOrderState } from '../order/orders.mock';\nimport { ACKNOWLEDGE, HOSTED } from '../payment';\nimport { getInstrumentsState } from '../payment/instrument/instrument.mock';\nimport { getPaymentMethod, getPaymentMethodsState } from '../payment/payment-methods.mock';\nimport { getPaymentState } from '../payment/payments.mock';\nimport { getRemoteCheckoutState } from '../remote-checkout/remote-checkout.mock';\nimport { getConsignment, getConsignmentsState } from '../shipping/consignments.mock';\nimport { getPickupOptionsState } from '../shipping/pickup-option.mock';\nimport { getShippingCountriesState } from '../shipping/shipping-countries.mock';\n\nimport Checkout, { CheckoutPayment } from './checkout';\nimport CheckoutState from './checkout-state';\nimport CheckoutStoreState from './checkout-store-state';\n\nexport function getCheckout(): Checkout {\n    return {\n        id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n        comparisonShippingCost: 20,\n        displayDiscountTotal: 0,\n        manualDiscountTotal: 0,\n        orderBasedAutoDiscountTotal: 0,\n        hasOrderLevelAutoDiscountMaxLimitReached: false,\n        cart: getCart(),\n        customer: getCustomer(),\n        customerMessage: 'comment',\n        billingAddress: getBillingAddress(),\n        consignments: [getConsignment()],\n        taxes: [\n            {\n                name: 'Tax',\n                amount: 3,\n            },\n        ],\n        discounts: [],\n        coupons: [],\n        isStoreCreditApplied: false,\n        shouldExecuteSpamCheck: false,\n        orderId: 295,\n        shippingCostTotal: 15,\n        shippingCostBeforeDiscount: 20,\n        handlingCostTotal: 8,\n        taxTotal: 3,\n        subtotal: 190,\n        grandTotal: 190,\n        giftWrappingCostTotal: 0,\n        outstandingBalance: 190,\n        giftCertificates: [],\n        balanceDue: 0,\n        createdTime: '2018-03-06T04:41:49+00:00',\n        updatedTime: '2018-03-07T03:44:51+00:00',\n        promotions: [\n            {\n                banners: [\n                    {\n                        type: 'upsell',\n                        text: 'foo',\n                    },\n                ],\n            },\n        ],\n        channelId: 1,\n        fees: [],\n        totalDiscount: 0,\n        version: 1,\n    };\n}\n\nexport function getCheckoutWithPayments(): Checkout {\n    return {\n        ...getCheckout(),\n        payments: [getCheckoutPayment()],\n    };\n}\n\nexport function getCheckoutWithCoupons(): Checkout {\n    return {\n        ...getCheckout(),\n        coupons: [getCoupon(), getShippingCoupon()],\n    };\n}\n\nexport function getCheckoutWithGiftCertificates(): Checkout {\n    return {\n        ...getCheckout(),\n        giftCertificates: [getGiftCertificate(), { ...getGiftCertificate(), code: 'gc2' }],\n    };\n}\n\nexport function getCheckoutPayment(): CheckoutPayment {\n    return {\n        providerId: getPaymentMethod().id,\n        gatewayId: getPaymentMethod().gateway,\n        providerType: HOSTED,\n        detail: {\n            step: ACKNOWLEDGE,\n        },\n    };\n}\n\nexport function getCheckoutState(): CheckoutState {\n    return {\n        data: getCheckout(),\n        errors: {},\n        statuses: {},\n    };\n}\n\nexport function getCheckoutStoreState(): CheckoutStoreState {\n    return {\n        b2bToken: { errors: {}, statuses: {} },\n        billingAddress: getBillingAddressState(),\n        cart: getCartState(),\n        checkout: getCheckoutState(),\n        checkoutButton: getCheckoutButtonState(),\n        config: getConfigState(),\n        consignments: getConsignmentsState(),\n        countries: getCountriesState(),\n        coupons: getCouponsState(),\n        customer: getCustomerState(),\n        customerStrategies: getCustomerStrategyState(),\n        extensions: getExtensionState(),\n        formFields: getFormFieldsState(),\n        giftCertificates: getGiftCertificatesState(),\n        instruments: getInstrumentsState(),\n        order: { errors: {}, statuses: {} },\n        orderBillingAddress: getOrderBillingAddressState(),\n        payment: getPaymentState(),\n        paymentMethods: getPaymentMethodsState(),\n        paymentProviderCustomer: { data: {} },\n        paymentStrategies: { data: {}, errors: {}, statuses: {} },\n        pickupOptions: getPickupOptionsState(),\n        remoteCheckout: getRemoteCheckoutState(),\n        shippingCountries: getShippingCountriesState(),\n        shippingStrategies: { data: {}, errors: {}, statuses: {} },\n        subscriptions: { errors: {}, statuses: {} },\n        signInEmail: { errors: {}, statuses: {} },\n        storeCredit: { errors: {}, statuses: {} },\n    };\n}\n\nexport function getCheckoutStoreStateWithOrder(): CheckoutStoreState {\n    return {\n        ...getCheckoutStoreState(),\n        order: getOrderState(),\n    };\n}\n"
  },
  {
    "path": "packages/core/src/checkout/create-action-transformer.spec.ts",
    "content": "import { Action, createErrorAction } from '@bigcommerce/data-store';\nimport { Observable, Subscribable, throwError } from 'rxjs';\n\nimport { createRequestErrorFactory } from '../common/error';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport createActionTransformer from './create-action-transformer';\n\ndescribe('createActionTransformer()', () => {\n    let transformer: (action: Subscribable<Action>) => Observable<Action>;\n\n    beforeEach(() => {\n        transformer = createActionTransformer(createRequestErrorFactory());\n    });\n\n    describe('when the payload is a response', () => {\n        it('transforms the error', () => {\n            const payload = getErrorResponse();\n            const action$ = throwError(createErrorAction('FOOBAR', payload));\n\n            transformer(action$).subscribe({\n                error: (action) => {\n                    expect(action.payload).toBeInstanceOf(Error);\n                },\n            });\n        });\n\n        it('sets the error message as the body.detail', () => {\n            const payload = getErrorResponse();\n            const action$ = throwError(createErrorAction('FOOBAR', payload));\n\n            transformer(action$).subscribe({\n                error: (action) => {\n                    expect(action.payload.message).toEqual(payload.body.detail);\n                },\n            });\n        });\n\n        it('uses the default message if none provided', () => {\n            const payload = getErrorResponse();\n\n            delete payload.body.detail;\n\n            const action$ = throwError(createErrorAction('FOOBAR', payload));\n\n            transformer(action$).subscribe({\n                error: (action) => {\n                    expect(action.payload.message).toEqual(expect.any(String));\n                },\n            });\n        });\n    });\n\n    describe('when the payload is NOT a response', () => {\n        it('does not transform if payload is `Error` instance', () => {\n            const payload = new Error();\n            const action$ = throwError(createErrorAction('FOOBAR', payload));\n\n            transformer(action$).subscribe({\n                error: (action) => {\n                    expect(action.payload).toEqual(payload);\n                },\n            });\n        });\n\n        it('does not transform if payload is not `Response`', () => {\n            const payload = {};\n            const action$ = throwError(createErrorAction('FOOBAR', payload));\n\n            transformer(action$).subscribe({\n                error: (action) => {\n                    expect(action.payload).toEqual(payload);\n                },\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/create-action-transformer.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\nimport { from, Observable, Subscribable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { RequestErrorFactory } from '../common/error';\n\nexport default function createActionTransformer(\n    requestErrorFactory: RequestErrorFactory,\n): (action: Subscribable<Action>) => Observable<Action> {\n    return (action$) =>\n        from(action$).pipe(\n            catchError<Action, never>((action) => {\n                if (action instanceof Error || action.payload instanceof Error) {\n                    throw action;\n                }\n\n                if (isResponse(action.payload)) {\n                    const message = action.payload.body && action.payload.body.detail;\n\n                    throw {\n                        ...action,\n                        payload: requestErrorFactory.createError(action.payload, message),\n                    };\n                }\n\n                throw action;\n            }),\n        );\n}\n\nfunction isResponse(object: any) {\n    if (!object || typeof object !== 'object') {\n        return false;\n    }\n\n    return ['body', 'headers', 'status', 'statusText'].every((key) =>\n        Object.prototype.hasOwnProperty.call(object, key),\n    );\n}\n"
  },
  {
    "path": "packages/core/src/checkout/create-checkout-selectors.ts",
    "content": "import {\n    CheckoutSelectors,\n    createCheckoutStoreErrorSelectorFactory,\n    createCheckoutStoreSelectorFactory,\n    createCheckoutStoreStatusSelectorFactory,\n    InternalCheckoutSelectors,\n} from '../checkout';\n\nexport type CheckoutSelectorsFactory = (selectors: InternalCheckoutSelectors) => CheckoutSelectors;\n\nexport function createCheckoutSelectorsFactory(): CheckoutSelectorsFactory {\n    const createCheckoutStoreSelector = createCheckoutStoreSelectorFactory();\n    const createCheckoutStoreErrorSelector = createCheckoutStoreErrorSelectorFactory();\n    const createCheckoutStoreStatusSelector = createCheckoutStoreStatusSelectorFactory();\n\n    return (selectors: InternalCheckoutSelectors) => {\n        const data = createCheckoutStoreSelector(selectors);\n        const errors = createCheckoutStoreErrorSelector(selectors);\n        const statuses = createCheckoutStoreStatusSelector(selectors);\n\n        return {\n            data,\n            errors,\n            statuses,\n        };\n    };\n}\n\nexport default function createCheckoutSelectors(\n    selectors: InternalCheckoutSelectors,\n): CheckoutSelectors {\n    return createCheckoutSelectorsFactory()(selectors);\n}\n"
  },
  {
    "path": "packages/core/src/checkout/create-checkout-service-error-transformer.spec.ts",
    "content": "import { MissingDataError, MissingDataErrorType } from '../common/error/errors';\n\nimport createCheckoutServiceErrorTransformer from './create-checkout-service-error-transformer';\n\ndescribe('createCheckoutServiceErrorTransformer()', () => {\n    it('appends debug information if in development mode', () => {\n        const transformer = createCheckoutServiceErrorTransformer(true);\n        const error = new MissingDataError(MissingDataErrorType.MissingCheckout);\n        const originalMessage = error.message;\n\n        expect(transformer.transform(error).message).toBe(\n            `${originalMessage} The data could be unavailable because it has not loaded from the server yet. To fix this issue, you can try calling \\`CheckoutService#loadCheckout\\` before performing the same action again.`,\n        );\n    });\n\n    it('does not append debug information if not in development mode', () => {\n        const transformer = createCheckoutServiceErrorTransformer(false);\n        const error = new MissingDataError(MissingDataErrorType.MissingCheckout);\n        const originalMessage = error.message;\n\n        expect(transformer.transform(error).message).toEqual(originalMessage);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/create-checkout-service-error-transformer.ts",
    "content": "import { ErrorMessageTransformer } from '../common/error';\nimport {\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n} from '../common/error/errors';\nimport { getEnvironment } from '../common/utility';\n\nexport type CheckoutServiceErrorType = MissingDataError | NotInitializedError;\nexport type CheckoutServiceErrorTransformer = ErrorMessageTransformer<\n    CheckoutServiceErrorType | Error\n>;\n\nexport default function createCheckoutServiceErrorTransformer(\n    isDevelopment: boolean = getEnvironment() === 'development',\n): CheckoutServiceErrorTransformer {\n    return new ErrorMessageTransformer((error) => {\n        if (!isDevelopment || !isCheckoutServiceError(error)) {\n            return error.message;\n        }\n\n        switch (error.subtype || error.type) {\n            case MissingDataErrorType.MissingConsignments:\n                return `\n                ${error.message}\n                The data could be unavailable because no shipping address has been provided.\n                To fix this, create a consignment or update the shipping address before performing\n                the same action again.\n            `;\n\n            case MissingDataErrorType.MissingCart:\n            case MissingDataErrorType.MissingCheckout:\n                return `\n                ${error.message}\n                The data could be unavailable because it has not loaded from the server yet.\n                To fix this issue, you can try calling \\`CheckoutService#loadCheckout\\`\n                before performing the same action again.\n            `;\n\n            case MissingDataErrorType.MissingCheckoutConfig:\n                return `\n                ${error.message}\n                The data could be unavailable because it has not loaded from the server yet.\n                To fix this issue, you need to make sure \\`CheckoutService\\` is initialized\n                properly by calling \\`CheckoutService#loadCheckout\\` before performing any\n                other actions.\n            `;\n\n            case MissingDataErrorType.MissingOrder:\n                return `\n                ${error.message}\n                The data could be unavailable because it has not loaded from the server yet.\n                To fix this issue, you can try calling \\`CheckoutService#loadOrder\\`\n                before performing the same action again.\n            `;\n\n            case MissingDataErrorType.MissingOrderId:\n                return `\n                ${error.message}\n                The data could be unavailable because no order has been created yet. You have\n                to first create the order before you can perform the action.\n            `;\n\n            case MissingDataErrorType.MissingPaymentMethod:\n                return `\n                ${error.message}\n                The data could be unavailable because it has not loaded from the server, or\n                configured by the merchant yet. To fix the former issue, you can try calling\n                \\`CheckoutService#loadPaymentMethods\\` before performing the same action again.\n            `;\n\n            case NotInitializedErrorType.CustomerNotInitialized:\n                return `\n                In order to initialize the customer step of checkout, you need to call\n                \\`CheckoutService#initializeCustomer\\`. Afterwards, you should be able to\n                submit customer details.\n            `;\n\n            case NotInitializedErrorType.PaymentNotInitialized:\n                return `\n                ${error.message}\n                In order to initialize the payment step of checkout, you need to call\n                \\`CheckoutService#initializePayment\\`. Afterwards, you should be able to\n                submit payment details.\n            `;\n\n            case NotInitializedErrorType.ShippingNotInitialized:\n                return `\n                ${error.message}\n                In order to initialize the shipping step of checkout, you need to call\n                \\`CheckoutService#initializeShipping\\`. Afterwards, you should be able to\n                submit shipping details.\n            `;\n\n            default:\n                return error.message;\n        }\n    });\n}\n\nfunction isCheckoutServiceError(error: any): error is CheckoutServiceErrorType {\n    return !!(error.subtype || error.type);\n}\n"
  },
  {
    "path": "packages/core/src/checkout/create-checkout-service.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { getDefaultLogger, Logger } from '../common/log';\n\nimport CheckoutService from './checkout-service';\nimport createCheckoutService from './create-checkout-service';\n\njest.mock('@bigcommerce/request-sender');\n\ndescribe('createCheckoutService()', () => {\n    const nodeEnviroment = process.env.NODE_ENV;\n    let logger: Logger;\n\n    beforeEach(() => {\n        logger = getDefaultLogger();\n        jest.spyOn(logger, 'warn');\n    });\n\n    afterEach(() => {\n        process.env.NODE_ENV = nodeEnviroment;\n\n        jest.clearAllMocks();\n    });\n\n    it('creates an instance of CheckoutService', () => {\n        const checkoutService = createCheckoutService();\n\n        expect(checkoutService).toBeInstanceOf(CheckoutService);\n    });\n\n    it('configures instance with host URL', () => {\n        const host = 'https://foobar.com';\n\n        createCheckoutService({ host });\n\n        expect(createRequestSender).toHaveBeenCalledWith({ host });\n    });\n\n    it('throws if production and protocol is not https', () => {\n        process.env.NODE_ENV = 'production';\n\n        createCheckoutService();\n\n        expect(logger.warn).toHaveBeenCalled();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/create-checkout-service.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { B2BTokenActionCreator, B2BTokenRequestSender } from '../b2b-token';\nimport { BillingAddressActionCreator, BillingAddressRequestSender } from '../billing';\nimport { createDataStoreProjection } from '../common/data-store';\nimport { ErrorActionCreator, ErrorLogger } from '../common/error';\nimport { ExperimentAwareRequestSender } from '../common/http-request';\nimport { getDefaultLogger } from '../common/log';\nimport { getEnvironment } from '../common/utility';\nimport { ConfigActionCreator, ConfigRequestSender, ConfigState, ConfigWindow } from '../config';\nimport {\n    CouponActionCreator,\n    CouponRequestSender,\n    GiftCertificateActionCreator,\n    GiftCertificateRequestSender,\n} from '../coupon';\nimport {\n    createCustomerStrategyRegistry,\n    createCustomerStrategyRegistryV2,\n    CustomerActionCreator,\n    CustomerRequestSender,\n    CustomerStrategyActionCreator,\n} from '../customer';\nimport {\n    createExtensionEventBroadcaster,\n    ExtensionActionCreator,\n    ExtensionMessenger,\n    ExtensionRequestSender,\n    WorkerExtensionMessenger,\n} from '../extension';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../form';\nimport * as customerStrategyFactories from '../generated/customer-strategies';\nimport * as paymentStrategyFactories from '../generated/payment-strategies';\nimport { CountryActionCreator, CountryRequestSender } from '../geography';\nimport { OrderActionCreator, OrderRequestSender } from '../order';\nimport {\n    B2BCompanyPaymentMethodRequestSender,\n    createPaymentClient,\n    createPaymentStrategyRegistry,\n    createPaymentStrategyRegistryV2,\n    PaymentMethodActionCreator,\n    PaymentMethodRequestSender,\n    PaymentStrategyActionCreator,\n} from '../payment';\nimport { createPaymentIntegrationService } from '../payment-integration';\nimport { InstrumentActionCreator, InstrumentRequestSender } from '../payment/instrument';\nimport {\n    ConsignmentActionCreator,\n    ConsignmentRequestSender,\n    createShippingStrategyRegistry,\n    PickupOptionActionCreator,\n    PickupOptionRequestSender,\n    ShippingCountryActionCreator,\n    ShippingCountryRequestSender,\n    ShippingStrategyActionCreator,\n} from '../shipping';\nimport { SignInEmailActionCreator, SignInEmailRequestSender } from '../signin-email';\nimport {\n    createSpamProtection,\n    SpamProtectionActionCreator,\n    SpamProtectionRequestSender,\n} from '../spam-protection';\nimport { StoreCreditActionCreator, StoreCreditRequestSender } from '../store-credit';\nimport { SubscriptionsActionCreator, SubscriptionsRequestSender } from '../subscription';\n\nimport CheckoutActionCreator from './checkout-action-creator';\nimport CheckoutRequestSender from './checkout-request-sender';\nimport CheckoutService from './checkout-service';\nimport CheckoutValidator from './checkout-validator';\nimport { createCheckoutSelectorsFactory } from './create-checkout-selectors';\nimport createCheckoutStore from './create-checkout-store';\n\n/**\n * Creates an instance of `CheckoutService`.\n *\n * @remarks\n * ```js\n * const service = createCheckoutService();\n *\n * service.subscribe(state => {\n *     console.log(state);\n * });\n *\n * service.loadCheckout();\n * ```\n *\n * @param options - A set of construction options.\n * @returns an instance of `CheckoutService`.\n */\nexport default function createCheckoutService(options?: CheckoutServiceOptions): CheckoutService {\n    if (document.location.protocol !== 'https:') {\n        getDefaultLogger().warn(\n            'The BigCommerce Checkout SDK should not be used on a non-HTTPS page',\n        );\n    }\n\n    if (getEnvironment() !== 'production') {\n        getDefaultLogger().warn(\n            'Note that the development build is not optimized. To create a production build, set process\\u200b.env.NODE_ENV to `production`.',\n        );\n    }\n\n    const config: ConfigState = {\n        meta: {\n            externalSource: options && options.externalSource,\n            host: options?.host,\n            locale: options?.locale,\n            variantIdentificationToken: (window as ConfigWindow).checkoutVariantIdentificationToken,\n        },\n        errors: {},\n        statuses: {},\n    };\n    const { locale = '', shouldWarnMutation = true } = options || {};\n    const requestSender = createRequestSender({ host: options && options.host });\n    const store = createCheckoutStore({ config }, { shouldWarnMutation });\n    const experimentRequestSender = new ExperimentAwareRequestSender(requestSender, {\n        getBasePath: () => store.getState().config.getStoreConfig()?.links.baseUrl ?? undefined,\n        getFeatures: () =>\n            store.getState().config.getStoreConfig()?.checkoutSettings?.features ?? {},\n    }) as unknown as RequestSender;\n    const paymentClient = createPaymentClient(store);\n    const orderRequestSender = new OrderRequestSender(experimentRequestSender);\n    const checkoutRequestSender = new CheckoutRequestSender(experimentRequestSender);\n    const configActionCreator = new ConfigActionCreator(new ConfigRequestSender(requestSender));\n    const spamProtection = createSpamProtection(createScriptLoader());\n    const spamProtectionRequestSender = new SpamProtectionRequestSender(experimentRequestSender);\n    const spamProtectionActionCreator = new SpamProtectionActionCreator(\n        spamProtection,\n        spamProtectionRequestSender,\n    );\n    const orderActionCreator = new OrderActionCreator(\n        orderRequestSender,\n        new CheckoutValidator(checkoutRequestSender),\n    );\n    const subscriptionsActionCreator = new SubscriptionsActionCreator(\n        new SubscriptionsRequestSender(experimentRequestSender),\n    );\n    const formFieldsActionCreator = new FormFieldsActionCreator(\n        new FormFieldsRequestSender(experimentRequestSender),\n    );\n    const checkoutActionCreator = new CheckoutActionCreator(\n        checkoutRequestSender,\n        configActionCreator,\n        formFieldsActionCreator,\n    );\n    const paymentIntegrationService = createPaymentIntegrationService(\n        store,\n        experimentRequestSender,\n    );\n\n    // NO_PAYMENT_DATA_REQUIRED must always be available regardless of build mode — it handles\n    // free orders / full store credit checkouts and cannot be lazily loaded via integrations.\n    const essentialPaymentStrategyFactories = {\n        createNoPaymentStrategy: paymentStrategyFactories.createNoPaymentStrategy,\n    };\n    const registryV2 = createPaymentStrategyRegistryV2(\n        paymentIntegrationService,\n        process.env.ESSENTIAL_BUILD ? essentialPaymentStrategyFactories : paymentStrategyFactories,\n        { useFallback: true },\n    );\n    const customerRegistryV2 = createCustomerStrategyRegistryV2(\n        paymentIntegrationService,\n        process.env.ESSENTIAL_BUILD ? {} : customerStrategyFactories,\n    );\n    const extensionActionCreator = new ExtensionActionCreator(\n        new ExtensionRequestSender(experimentRequestSender),\n    );\n    const workerExtensionMessenger = new WorkerExtensionMessenger();\n    const extensionMessenger = new ExtensionMessenger(store, workerExtensionMessenger);\n    const storeProjection = createDataStoreProjection(store, createCheckoutSelectorsFactory());\n\n    return new CheckoutService(\n        store,\n        storeProjection,\n        extensionMessenger,\n        createExtensionEventBroadcaster(storeProjection, extensionMessenger),\n        new B2BTokenActionCreator(new B2BTokenRequestSender(requestSender)),\n        new BillingAddressActionCreator(\n            new BillingAddressRequestSender(experimentRequestSender),\n            subscriptionsActionCreator,\n        ),\n        checkoutActionCreator,\n        configActionCreator,\n        new CustomerActionCreator(\n            new CustomerRequestSender(experimentRequestSender),\n            checkoutActionCreator,\n            spamProtectionActionCreator,\n        ),\n        new ConsignmentActionCreator(\n            new ConsignmentRequestSender(experimentRequestSender),\n            checkoutRequestSender,\n        ),\n        new CountryActionCreator(new CountryRequestSender(experimentRequestSender, { locale })),\n        new CouponActionCreator(new CouponRequestSender(experimentRequestSender)),\n        new CustomerStrategyActionCreator(\n            createCustomerStrategyRegistry(store, experimentRequestSender),\n            customerRegistryV2,\n            paymentIntegrationService,\n        ),\n        new ErrorActionCreator(),\n        new GiftCertificateActionCreator(new GiftCertificateRequestSender(experimentRequestSender)),\n        new InstrumentActionCreator(\n            new InstrumentRequestSender(paymentClient, experimentRequestSender),\n        ),\n        orderActionCreator,\n        new PaymentMethodActionCreator(\n            new PaymentMethodRequestSender(experimentRequestSender),\n            new B2BCompanyPaymentMethodRequestSender(requestSender),\n        ),\n        new PaymentStrategyActionCreator(\n            createPaymentStrategyRegistry(store, paymentClient, experimentRequestSender),\n            registryV2,\n            orderActionCreator,\n            spamProtectionActionCreator,\n            paymentIntegrationService,\n        ),\n        new PickupOptionActionCreator(new PickupOptionRequestSender(experimentRequestSender)),\n        new ShippingCountryActionCreator(\n            new ShippingCountryRequestSender(experimentRequestSender, { locale }),\n            store,\n        ),\n        new ShippingStrategyActionCreator(\n            createShippingStrategyRegistry(store, experimentRequestSender),\n        ),\n        new SignInEmailActionCreator(new SignInEmailRequestSender(experimentRequestSender)),\n        spamProtectionActionCreator,\n        new StoreCreditActionCreator(new StoreCreditRequestSender(experimentRequestSender)),\n        subscriptionsActionCreator,\n        formFieldsActionCreator,\n        extensionActionCreator,\n        workerExtensionMessenger,\n    );\n}\n\nexport interface CheckoutServiceOptions {\n    locale?: string;\n    host?: string;\n    shouldWarnMutation?: boolean;\n    externalSource?: string;\n    errorLogger?: ErrorLogger;\n}\n"
  },
  {
    "path": "packages/core/src/checkout/create-checkout-store-reducer.ts",
    "content": "import { Action, combineReducers, Reducer } from '@bigcommerce/data-store';\n\nimport { b2bTokenReducer } from '../b2b-token';\nimport { billingAddressReducer } from '../billing';\nimport { cartReducer } from '../cart';\nimport { checkoutButtonReducer } from '../checkout-buttons';\nimport { configReducer } from '../config';\nimport { couponReducer, giftCertificateReducer } from '../coupon';\nimport { customerReducer, customerStrategyReducer } from '../customer';\nimport { extensionReducer } from '../extension';\nimport { formFieldsReducer } from '../form';\nimport { countryReducer } from '../geography';\nimport { orderReducer } from '../order';\nimport { orderBillingAddressReducer } from '../order-billing-address';\nimport { paymentMethodReducer, paymentReducer, paymentStrategyReducer } from '../payment';\nimport { paymentProviderCustomerReducer } from '../payment-provider-customer';\nimport { instrumentReducer } from '../payment/instrument';\nimport { remoteCheckoutReducer } from '../remote-checkout';\nimport {\n    consignmentReducer,\n    pickupOptionReducer,\n    shippingCountryReducer,\n    shippingStrategyReducer,\n} from '../shipping';\nimport { signInEmailReducer } from '../signin-email';\nimport { storeCreditReducer } from '../store-credit';\nimport { subscriptionsReducer } from '../subscription';\n\nimport checkoutReducer from './checkout-reducer';\nimport CheckoutStoreState from './checkout-store-state';\n\nexport default function createCheckoutStoreReducer(): Reducer<CheckoutStoreState, Action> {\n    return combineReducers({\n        b2bToken: b2bTokenReducer,\n        billingAddress: billingAddressReducer,\n        cart: cartReducer,\n        checkout: checkoutReducer,\n        checkoutButton: checkoutButtonReducer,\n        config: configReducer,\n        consignments: consignmentReducer,\n        countries: countryReducer,\n        coupons: couponReducer,\n        customer: customerReducer,\n        customerStrategies: customerStrategyReducer,\n        extensions: extensionReducer,\n        formFields: formFieldsReducer,\n        giftCertificates: giftCertificateReducer,\n        instruments: instrumentReducer,\n        orderBillingAddress: orderBillingAddressReducer,\n        order: orderReducer,\n        payment: paymentReducer,\n        paymentMethods: paymentMethodReducer,\n        paymentStrategies: paymentStrategyReducer,\n        pickupOptions: pickupOptionReducer,\n        paymentProviderCustomer: paymentProviderCustomerReducer,\n        remoteCheckout: remoteCheckoutReducer,\n        shippingCountries: shippingCountryReducer,\n        shippingStrategies: shippingStrategyReducer,\n        signInEmail: signInEmailReducer,\n        subscriptions: subscriptionsReducer,\n        storeCredit: storeCreditReducer,\n    });\n}\n"
  },
  {
    "path": "packages/core/src/checkout/create-checkout-store.spec.ts",
    "content": "import { createErrorAction, DataStore } from '@bigcommerce/data-store';\nimport { throwError } from 'rxjs';\n\nimport { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport createCheckoutStore from './create-checkout-store';\n\ndescribe('createCheckoutStore()', () => {\n    it('returns an instance of CheckoutStore', () => {\n        const store = createCheckoutStore();\n\n        expect(store).toEqual(expect.any(DataStore));\n    });\n\n    it('creates `CheckoutStore` with action transformer', async () => {\n        const store = createCheckoutStore();\n        const action$ = throwError(createErrorAction('SUBMIT_ORDER_FAILED', getErrorResponse()));\n\n        try {\n            await store.dispatch(action$);\n        } catch (error) {\n            expect(error).toBeInstanceOf(Error);\n        }\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/create-checkout-store.ts",
    "content": "import { createDataStore } from '@bigcommerce/data-store';\n\nimport { createRequestErrorFactory } from '../common/error';\n\nimport CheckoutStore, { CheckoutStoreOptions } from './checkout-store';\nimport CheckoutStoreState from './checkout-store-state';\nimport createActionTransformer from './create-action-transformer';\nimport createCheckoutStoreReducer from './create-checkout-store-reducer';\nimport { createInternalCheckoutSelectorsFactory } from './create-internal-checkout-selectors';\n\nexport default function createCheckoutStore(\n    initialStoreState: Partial<CheckoutStoreState> = {},\n    options?: CheckoutStoreOptions,\n): CheckoutStore {\n    const actionTransformer = createActionTransformer(createRequestErrorFactory());\n    const createInternalCheckoutSelectors = createInternalCheckoutSelectorsFactory();\n    const stateTransformer = (state: CheckoutStoreState) => createInternalCheckoutSelectors(state);\n    const reducer = createCheckoutStoreReducer();\n\n    return createDataStore(reducer, initialStoreState, {\n        actionTransformer,\n        stateTransformer,\n        ...options,\n    });\n}\n"
  },
  {
    "path": "packages/core/src/checkout/create-internal-checkout-selectors.ts",
    "content": "import { createB2BTokenSelectorFactory } from '../b2b-token';\nimport { createBillingAddressSelectorFactory } from '../billing';\nimport { createCartSelectorFactory } from '../cart';\nimport { createCheckoutButtonSelectorFactory } from '../checkout-buttons';\nimport { createFreezeProxies } from '../common/utility';\nimport { createConfigSelectorFactory } from '../config';\nimport { createCouponSelectorFactory, createGiftCertificateSelectorFactory } from '../coupon';\nimport { createCustomerSelectorFactory, createCustomerStrategySelectorFactory } from '../customer';\nimport { createExtensionSelectorFactory } from '../extension';\nimport { createFormSelectorFactory } from '../form';\nimport { createCountrySelectorFactory } from '../geography';\nimport { createOrderSelectorFactory } from '../order';\nimport { createOrderBillingAddressSelectorFactory } from '../order-billing-address';\nimport {\n    createPaymentMethodSelectorFactory,\n    createPaymentSelectorFactory,\n    createPaymentStrategySelectorFactory,\n} from '../payment';\nimport { createPaymentProviderCustomerSelectorFactory } from '../payment-provider-customer';\nimport { createInstrumentSelectorFactory } from '../payment/instrument';\nimport { createRemoteCheckoutSelectorFactory } from '../remote-checkout';\nimport {\n    createConsignmentSelectorFactory,\n    createPickupOptionSelectorFactory,\n    createShippingAddressSelectorFactory,\n    createShippingCountrySelectorFactory,\n    createShippingStrategySelectorFactory,\n} from '../shipping';\nimport { createSignInEmailSelectorFactory } from '../signin-email';\nimport { createStoreCreditSelectorFactory } from '../store-credit';\nimport { createSubscriptionsSelectorFactory } from '../subscription';\n\nimport { createCheckoutSelectorFactory } from './checkout-selector';\nimport { CheckoutStoreOptions } from './checkout-store';\nimport CheckoutStoreState from './checkout-store-state';\nimport InternalCheckoutSelectors from './internal-checkout-selectors';\n\nexport type InternalCheckoutSelectorsFactory = (\n    state: CheckoutStoreState,\n    options?: CheckoutStoreOptions,\n) => InternalCheckoutSelectors;\n\nexport function createInternalCheckoutSelectorsFactory(): InternalCheckoutSelectorsFactory {\n    const createB2BTokenSelector = createB2BTokenSelectorFactory();\n    const createBillingAddressSelector = createBillingAddressSelectorFactory();\n    const createCartSelector = createCartSelectorFactory();\n    const createCheckoutButtonSelector = createCheckoutButtonSelectorFactory();\n    const createConfigSelector = createConfigSelectorFactory();\n    const createCountrySelector = createCountrySelectorFactory();\n    const createCouponSelector = createCouponSelectorFactory();\n    const createCustomerSelector = createCustomerSelectorFactory();\n    const createCustomerStrategySelector = createCustomerStrategySelectorFactory();\n    const createGiftCertificateSelector = createGiftCertificateSelectorFactory();\n    const createInstrumentSelector = createInstrumentSelectorFactory();\n    const createFormSelector = createFormSelectorFactory();\n    const createPaymentMethodSelector = createPaymentMethodSelectorFactory();\n    const createPaymentStrategySelector = createPaymentStrategySelectorFactory();\n    const createPickupOptionSelector = createPickupOptionSelectorFactory();\n    const createPaymentProviderCustomerSelector = createPaymentProviderCustomerSelectorFactory();\n    const createRemoteCheckoutSelector = createRemoteCheckoutSelectorFactory();\n    const createShippingAddressSelector = createShippingAddressSelectorFactory();\n    const createShippingCountrySelector = createShippingCountrySelectorFactory();\n    const createShippingStrategySelector = createShippingStrategySelectorFactory();\n    const createConsignmentSelector = createConsignmentSelectorFactory();\n    const createCheckoutSelector = createCheckoutSelectorFactory();\n    const createOrderSelector = createOrderSelectorFactory();\n    const createOrderBillingAddressSelector = createOrderBillingAddressSelectorFactory();\n    const createPaymentSelector = createPaymentSelectorFactory();\n    const createStoreCreditSelector = createStoreCreditSelectorFactory();\n    const createSubscriptionsSelector = createSubscriptionsSelectorFactory();\n    const createSignInEmailSelector = createSignInEmailSelectorFactory();\n    const createExtensionSelector = createExtensionSelectorFactory();\n\n    return (state, options = {}) => {\n        const b2bToken = createB2BTokenSelector(state.b2bToken);\n        const billingAddress = createBillingAddressSelector(state.billingAddress);\n        const cart = createCartSelector(state.cart);\n        const checkoutButton = createCheckoutButtonSelector(state.checkoutButton);\n        const countries = createCountrySelector(state.countries);\n        const coupons = createCouponSelector(state.coupons);\n        const customer = createCustomerSelector(state.customer);\n        const customerStrategies = createCustomerStrategySelector(state.customerStrategies);\n        const extensions = createExtensionSelector(state.extensions);\n        const form = createFormSelector(state.formFields);\n        const giftCertificates = createGiftCertificateSelector(state.giftCertificates);\n        const instruments = createInstrumentSelector(state.instruments);\n        const orderBillingAddress = createOrderBillingAddressSelector(state.orderBillingAddress);\n        const paymentMethods = createPaymentMethodSelector(state.paymentMethods);\n        const paymentProviderCustomer = createPaymentProviderCustomerSelector(\n            state.paymentProviderCustomer,\n        );\n        const paymentStrategies = createPaymentStrategySelector(state.paymentStrategies);\n        const pickupOptions = createPickupOptionSelector(state.pickupOptions);\n        const remoteCheckout = createRemoteCheckoutSelector(state.remoteCheckout);\n        const shippingAddress = createShippingAddressSelector(state.consignments);\n        const shippingCountries = createShippingCountrySelector(state.shippingCountries);\n        const shippingStrategies = createShippingStrategySelector(state.shippingStrategies);\n        const subscriptions = createSubscriptionsSelector(state.subscriptions);\n        const storeCredit = createStoreCreditSelector(state.storeCredit);\n        const signInEmail = createSignInEmailSelector(state.signInEmail);\n\n        // Compose selectors\n        const consignments = createConsignmentSelector(state.consignments, cart);\n        const checkout = createCheckoutSelector(\n            state.checkout,\n            billingAddress,\n            cart,\n            consignments,\n            coupons,\n            customer,\n            giftCertificates,\n        );\n        const order = createOrderSelector(state.order, orderBillingAddress, coupons);\n        const payment = createPaymentSelector(checkout, order);\n        const config = createConfigSelector(state.config, state.formFields);\n\n        const selectors = {\n            b2bToken,\n            billingAddress,\n            cart,\n            checkout,\n            checkoutButton,\n            config,\n            consignments,\n            countries,\n            coupons,\n            customer,\n            customerStrategies,\n            extensions,\n            form,\n            giftCertificates,\n            instruments,\n            order,\n            orderBillingAddress,\n            payment,\n            paymentMethods,\n            paymentProviderCustomer,\n            paymentStrategies,\n            pickupOptions,\n            remoteCheckout,\n            shippingAddress,\n            shippingCountries,\n            shippingStrategies,\n            signInEmail,\n            subscriptions,\n            storeCredit,\n        };\n\n        return options.shouldWarnMutation ? createFreezeProxies(selectors) : selectors;\n    };\n}\n\nexport default function createInternalCheckoutSelectors(\n    state: CheckoutStoreState,\n    options?: CheckoutStoreOptions,\n): InternalCheckoutSelectors {\n    return createInternalCheckoutSelectorsFactory()(state, options);\n}\n"
  },
  {
    "path": "packages/core/src/checkout/errors/checkout-not-available-error.spec.ts",
    "content": "import { getErrorResponse } from '../../common/http-request/responses.mock';\n\nimport { CheckoutNotAvailableError } from '.';\n\ndescribe('init', () => {\n    it('sets type to checkout_not_available', () => {\n        const error = new CheckoutNotAvailableError(getErrorResponse());\n\n        expect(error.type).toBe('checkout_not_available');\n    });\n\n    it('returns error name', () => {\n        const error = new CheckoutNotAvailableError(getErrorResponse());\n\n        expect(error.name).toBe('CheckoutNotAvailableError');\n    });\n\n    it('sets the message as `body.title`', () => {\n        const response = getErrorResponse();\n        const error = new CheckoutNotAvailableError(response);\n\n        expect(error.message).toEqual(response.body.title);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout/errors/checkout-not-available-error.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { InternalErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../../common/error/errors';\n\n/**\n * Throw this error when we are unable to retrieve a checkout object from the\n * server using the provided ID. It could be because the shopper does not have\n * permission to view the object, or the ID itself is invalid.\n */\nexport default class CheckoutNotAvailableError extends RequestError {\n    constructor(response: Response<InternalErrorResponseBody>) {\n        super(response, { message: response.body.title });\n\n        this.name = 'CheckoutNotAvailableError';\n        this.type = 'checkout_not_available';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout/errors/index.ts",
    "content": "export { default as CheckoutNotAvailableError } from './checkout-not-available-error';\n"
  },
  {
    "path": "packages/core/src/checkout/index.ts",
    "content": "export * from './checkout-actions';\nexport * from './checkout-hydrate-actions';\n\nexport { default as Checkout, CheckoutPayment } from './checkout';\nexport { default as CHECKOUT_DEFAULT_INCLUDES } from './checkout-default-includes';\nexport { default as CheckoutActionCreator } from './checkout-action-creator';\nexport {\n    default as CheckoutParams,\n    CheckoutIncludes,\n    CheckoutIncludeParam,\n} from './checkout-params';\nexport { default as checkoutReducer } from './checkout-reducer';\nexport { default as CheckoutRequestSender } from './checkout-request-sender';\nexport {\n    default as CheckoutSelector,\n    CheckoutSelectorFactory,\n    createCheckoutSelectorFactory,\n} from './checkout-selector';\nexport { default as CheckoutSelectors } from './checkout-selectors';\nexport { default as CheckoutService } from './checkout-service';\nexport { default as CheckoutState } from './checkout-state';\nexport {\n    default as CheckoutStoreErrorSelector,\n    createCheckoutStoreErrorSelectorFactory,\n} from './checkout-store-error-selector';\nexport {\n    default as CheckoutStoreSelector,\n    CheckoutStoreSelectorFactory,\n    createCheckoutStoreSelectorFactory,\n} from './checkout-store-selector';\nexport { default as CheckoutStoreState } from './checkout-store-state';\nexport {\n    default as CheckoutStoreStatusSelector,\n    CheckoutStoreStatusSelectorFactory,\n    createCheckoutStoreStatusSelectorFactory,\n} from './checkout-store-status-selector';\nexport {\n    default as CheckoutStore,\n    CheckoutStoreOptions,\n    ReadableCheckoutStore,\n} from './checkout-store';\nexport { default as CheckoutValidator, ComparableCheckout } from './checkout-validator';\nexport { default as InternalCheckoutSelectors } from './internal-checkout-selectors';\n\nexport { default as createActionTransformer } from './create-action-transformer';\nexport { default as createCheckoutService } from './create-checkout-service';\nexport { default as createCheckoutStore } from './create-checkout-store';\nexport { default as createCheckoutSelectors } from './create-checkout-selectors';\nexport {\n    default as createInternalCheckoutSelectors,\n    createInternalCheckoutSelectorsFactory,\n} from './create-internal-checkout-selectors';\n"
  },
  {
    "path": "packages/core/src/checkout/internal-checkout-selectors.ts",
    "content": "import { B2BTokenSelector } from '../b2b-token';\nimport { BillingAddressSelector } from '../billing';\nimport { CartSelector } from '../cart';\nimport { CheckoutButtonSelector } from '../checkout-buttons';\nimport { ConfigSelector } from '../config';\nimport { CouponSelector, GiftCertificateSelector } from '../coupon';\nimport { CustomerSelector, CustomerStrategySelector } from '../customer';\nimport { ExtensionSelector } from '../extension';\nimport { FormSelector } from '../form';\nimport { CountrySelector } from '../geography';\nimport { OrderSelector } from '../order';\nimport OrderBillingAddressSelector from '../order-billing-address/order-billing-address-selector';\nimport { PaymentMethodSelector, PaymentSelector, PaymentStrategySelector } from '../payment';\nimport { PaymentProviderCustomerSelector } from '../payment-provider-customer';\nimport { InstrumentSelector } from '../payment/instrument';\nimport { RemoteCheckoutSelector } from '../remote-checkout';\nimport {\n    ConsignmentSelector,\n    PickupOptionSelector,\n    ShippingAddressSelector,\n    ShippingCountrySelector,\n    ShippingStrategySelector,\n} from '../shipping';\nimport { SignInEmailSelector } from '../signin-email';\nimport { StoreCreditSelector } from '../store-credit';\nimport { SubscriptionsSelector } from '../subscription';\n\nimport CheckoutSelector from './checkout-selector';\n\nexport default interface InternalCheckoutSelectors {\n    b2bToken: B2BTokenSelector;\n    billingAddress: BillingAddressSelector;\n    cart: CartSelector;\n    checkout: CheckoutSelector;\n    checkoutButton: CheckoutButtonSelector;\n    config: ConfigSelector;\n    consignments: ConsignmentSelector;\n    countries: CountrySelector;\n    coupons: CouponSelector;\n    customer: CustomerSelector;\n    customerStrategies: CustomerStrategySelector;\n    extensions: ExtensionSelector;\n    form: FormSelector;\n    giftCertificates: GiftCertificateSelector;\n    instruments: InstrumentSelector;\n    order: OrderSelector;\n    orderBillingAddress: OrderBillingAddressSelector;\n    payment: PaymentSelector;\n    paymentMethods: PaymentMethodSelector;\n    paymentStrategies: PaymentStrategySelector;\n    paymentProviderCustomer: PaymentProviderCustomerSelector;\n    pickupOptions: PickupOptionSelector;\n    remoteCheckout: RemoteCheckoutSelector;\n    shippingAddress: ShippingAddressSelector;\n    shippingCountries: ShippingCountrySelector;\n    shippingStrategies: ShippingStrategySelector;\n    signInEmail: SignInEmailSelector;\n    subscriptions: SubscriptionsSelector;\n    storeCredit: StoreCreditSelector;\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { LoadPaymentMethodAction } from '../payment';\n\nimport { CheckoutButtonMethodType } from './strategies';\n\nexport enum CheckoutButtonActionType {\n    InitializeButtonFailed = 'INITIALIZE_BUTTON_FAILED',\n    InitializeButtonRequested = 'INITIALIZE_BUTTON_REQUESTED',\n    InitializeButtonSucceeded = 'INITIALIZE_BUTTON_SUCCEEDED',\n\n    DeinitializeButtonFailed = 'DEINITIALIZE_BUTTON_FAILED',\n    DeinitializeButtonRequested = 'DEINITIALIZE_BUTTON_REQUESTED',\n    DeinitializeButtonSucceeded = 'DEINITIALIZE_BUTTON_SUCCEEDED',\n}\n\nexport type CheckoutButtonAction = InitializeButtonAction | DeinitializeButtonAction;\n\nexport type InitializeButtonAction =\n    | InitializeButtonRequestedAction\n    | InitializeButtonSucceededAction\n    | InitializeButtonFailedAction\n    | LoadPaymentMethodAction;\n\nexport type DeinitializeButtonAction =\n    | DeinitializeButtonRequestedAction\n    | DeinitializeButtonSucceededAction\n    | DeinitializeButtonFailedAction;\n\nexport interface CheckoutButtonActionMeta {\n    methodId: CheckoutButtonMethodType;\n}\n\nexport interface InitializeButtonActionMeta extends CheckoutButtonActionMeta {\n    containerId: string;\n}\n\nexport interface InitializeButtonRequestedAction\n    extends Action<undefined, InitializeButtonActionMeta> {\n    type: CheckoutButtonActionType.InitializeButtonRequested;\n}\n\nexport interface InitializeButtonSucceededAction\n    extends Action<undefined, InitializeButtonActionMeta> {\n    type: CheckoutButtonActionType.InitializeButtonSucceeded;\n}\n\nexport interface InitializeButtonFailedAction extends Action<Error, InitializeButtonActionMeta> {\n    type: CheckoutButtonActionType.InitializeButtonFailed;\n}\n\nexport interface DeinitializeButtonRequestedAction\n    extends Action<undefined, CheckoutButtonActionMeta> {\n    type: CheckoutButtonActionType.DeinitializeButtonRequested;\n}\n\nexport interface DeinitializeButtonSucceededAction\n    extends Action<undefined, CheckoutButtonActionMeta> {\n    type: CheckoutButtonActionType.DeinitializeButtonSucceeded;\n}\n\nexport interface DeinitializeButtonFailedAction extends Action<Error, CheckoutButtonActionMeta> {\n    type: CheckoutButtonActionType.DeinitializeButtonFailed;\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-error-selector.ts",
    "content": "import { InternalCheckoutSelectors } from '../checkout';\nimport { selector } from '../common/selector';\n\nimport CheckoutButtonSelector from './checkout-button-selector';\nimport { CheckoutButtonMethodType } from './strategies';\n\n@selector\nexport default class CheckoutButtonErrorSelector {\n    private _checkoutButton: CheckoutButtonSelector;\n\n    /**\n     * @internal\n     */\n    constructor(selectors: InternalCheckoutSelectors) {\n        this._checkoutButton = selectors.checkoutButton;\n    }\n\n    getInitializeButtonError(methodId?: CheckoutButtonMethodType): Error | undefined {\n        return this._checkoutButton.getInitializeError(methodId);\n    }\n\n    getDeinitializeButtonError(methodId?: CheckoutButtonMethodType): Error | undefined {\n        return this._checkoutButton.getDeinitializeError(methodId);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-initializer-options.ts",
    "content": "export default interface CheckoutButtonInitializerOptions {\n    host?: string;\n    locale?: string;\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-initializer.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { of } from 'rxjs';\n\nimport { CheckoutStore, createCheckoutStore } from '../checkout';\nimport {\n    B2BCompanyPaymentMethodRequestSender,\n    PaymentMethodActionCreator,\n    PaymentMethodRequestSender,\n} from '../payment';\nimport { createPaymentIntegrationService } from '../payment-integration';\n\nimport { CheckoutButtonActionType } from './checkout-button-actions';\nimport CheckoutButtonErrorSelector from './checkout-button-error-selector';\nimport CheckoutButtonInitializer from './checkout-button-initializer';\nimport CheckoutButtonStatusSelector from './checkout-button-status-selector';\nimport CheckoutButtonStrategyActionCreator from './checkout-button-strategy-action-creator';\nimport createCheckoutButtonRegistry from './create-checkout-button-registry';\nimport createCheckoutButtonRegistryV2 from './create-checkout-button-registry-v2';\nimport { CheckoutButtonMethodType } from './strategies';\n\ndescribe('CheckoutButtonInitializer', () => {\n    let initializer: CheckoutButtonInitializer;\n    let buttonActionCreator: CheckoutButtonStrategyActionCreator;\n    let store: CheckoutStore;\n\n    beforeEach(() => {\n        store = createCheckoutStore();\n\n        buttonActionCreator = new CheckoutButtonStrategyActionCreator(\n            createCheckoutButtonRegistry(store, createRequestSender(), createFormPoster()),\n            createCheckoutButtonRegistryV2(createPaymentIntegrationService(store), {}),\n            new PaymentMethodActionCreator(\n                new PaymentMethodRequestSender(createRequestSender()),\n                new B2BCompanyPaymentMethodRequestSender(createRequestSender()),\n            ),\n        );\n\n        jest.spyOn(store, 'dispatch');\n        jest.spyOn(store, 'subscribe');\n\n        jest.spyOn(buttonActionCreator, 'initialize').mockReturnValue(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            of(createAction(CheckoutButtonActionType.InitializeButtonRequested)),\n        );\n\n        jest.spyOn(buttonActionCreator, 'deinitialize').mockReturnValue(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            of(createAction(CheckoutButtonActionType.DeinitializeButtonRequested)),\n        );\n\n        initializer = new CheckoutButtonInitializer(store, buttonActionCreator);\n    });\n\n    it('dispatches action to initialize button strategy', async () => {\n        const options = {\n            methodId: CheckoutButtonMethodType.BRAINTREE_PAYPAL,\n            containerId: 'checkout-button',\n        };\n\n        await initializer.initializeButton(options);\n\n        expect(buttonActionCreator.initialize).toHaveBeenCalledWith(options);\n        expect(store.dispatch).toHaveBeenCalledWith(buttonActionCreator.initialize(options), {\n            queueId: `checkoutButtonStrategy:${CheckoutButtonMethodType.BRAINTREE_PAYPAL}:${options.containerId}`,\n        });\n    });\n\n    it('dispatches multiple actions to initialize button strategy if multiple containers can be found', async () => {\n        const container = document.createElement('div');\n\n        container.className = 'checkout-button';\n\n        const containers: HTMLElement[] = [];\n\n        containers.push(container);\n        containers.push(container.cloneNode() as HTMLElement);\n        containers.push(container.cloneNode() as HTMLElement);\n        containers.forEach((container) => document.body.appendChild(container));\n\n        const options = {\n            methodId: CheckoutButtonMethodType.BRAINTREE_PAYPAL,\n            containerId: '.checkout-button',\n        };\n\n        await initializer.initializeButton(options);\n\n        expect(buttonActionCreator.initialize).toHaveBeenCalledTimes(3);\n        expect(buttonActionCreator.initialize).toHaveBeenCalledWith({\n            ...options,\n            containerId: expect.stringMatching(new RegExp(`${options.methodId}-container.+`)),\n        });\n\n        expect(store.dispatch).toHaveBeenCalledTimes(3);\n        expect(store.dispatch).toHaveBeenCalledWith(buttonActionCreator.initialize(options), {\n            queueId: expect.stringMatching(\n                new RegExp(\n                    `checkoutButtonStrategy:${options.methodId}:${options.methodId}-container.+`,\n                ),\n            ),\n        });\n\n        containers.forEach((container) => container.remove());\n    });\n\n    it('dispatches action to deinitialize button strategy', async () => {\n        const options = {\n            methodId: CheckoutButtonMethodType.BRAINTREE_PAYPAL,\n            containerId: 'checkout-button',\n        };\n\n        await initializer.deinitializeButton(options);\n\n        expect(buttonActionCreator.deinitialize).toHaveBeenCalledWith(options);\n        expect(store.dispatch).toHaveBeenCalledWith(buttonActionCreator.deinitialize(options), {\n            queueId: `checkoutButtonStrategy:${CheckoutButtonMethodType.BRAINTREE_PAYPAL}`,\n        });\n    });\n\n    it('registers subscribers with data store', () => {\n        const subscriber = jest.fn();\n\n        initializer.subscribe(subscriber);\n        store.notifyState();\n\n        expect(subscriber).toHaveBeenCalledWith(initializer.getState());\n    });\n\n    it('returns selector object for querying current state', () => {\n        expect(initializer.getState()).toEqual({\n            errors: expect.any(CheckoutButtonErrorSelector),\n            statuses: expect.any(CheckoutButtonStatusSelector),\n        });\n    });\n\n    it('has methods that can be destructed', () => {\n        const { initializeButton } = initializer;\n\n        expect(() =>\n            initializeButton({\n                methodId: CheckoutButtonMethodType.BRAINTREE_PAYPAL,\n                containerId: 'checkout-button',\n            }),\n        ).not.toThrow(TypeError);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-initializer.ts",
    "content": "import { bindDecorator as bind } from '@bigcommerce/checkout-sdk/utility';\n\nimport { CheckoutStore, InternalCheckoutSelectors } from '../checkout';\nimport { isElementId, setUniqueElementId } from '../common/dom';\n\nimport { CheckoutButtonInitializeOptions, CheckoutButtonOptions } from './checkout-button-options';\nimport CheckoutButtonSelectors from './checkout-button-selectors';\nimport CheckoutButtonStrategyActionCreator from './checkout-button-strategy-action-creator';\nimport createCheckoutButtonSelectors from './create-checkout-button-selectors';\n\n@bind\nexport default class CheckoutButtonInitializer {\n    private _state: CheckoutButtonSelectors;\n\n    /**\n     * @internal\n     */\n    constructor(\n        private _store: CheckoutStore,\n        private _buttonStrategyActionCreator: CheckoutButtonStrategyActionCreator,\n    ) {\n        this._state = createCheckoutButtonSelectors(this._store.getState());\n\n        this._store.subscribe((state) => {\n            this._state = createCheckoutButtonSelectors(state);\n        });\n    }\n\n    /**\n     * Returns a snapshot of the current state.\n     *\n     * The method returns a new instance every time there is a change in the\n     * state. You can query the state by calling any of its getter methods.\n     *\n     * ```js\n     * const state = service.getState();\n     *\n     * console.log(state.errors.getInitializeButtonError());\n     * console.log(state.statuses.isInitializingButton());\n     * ```\n     *\n     * @returns The current customer's checkout state\n     */\n    getState(): CheckoutButtonSelectors {\n        return this._state;\n    }\n\n    /**\n     * Subscribes to any changes to the current state.\n     *\n     * The method registers a callback function and executes it every time there\n     * is a change in the current state.\n     *\n     * ```js\n     * service.subscribe(state => {\n     *     console.log(state.statuses.isInitializingButton());\n     * });\n     * ```\n     *\n     * The method can be configured to notify subscribers only regarding\n     * relevant changes, by providing a filter function.\n     *\n     * ```js\n     * const filter = state => state.errors.getInitializeButtonError();\n     *\n     * // Only trigger the subscriber when the cart changes.\n     * service.subscribe(state => {\n     *     console.log(state.errors.getInitializeButtonError())\n     * }, filter);\n     * ```\n     *\n     * @param subscriber - The function to subscribe to state changes.\n     * @param filters - One or more functions to filter out irrelevant state\n     * changes. If more than one function is provided, the subscriber will only\n     * be triggered if all conditions are met.\n     * @returns A function, if called, will unsubscribe the subscriber.\n     */\n    subscribe(\n        subscriber: (state: CheckoutButtonSelectors) => void,\n        ...filters: Array<(state: CheckoutButtonSelectors) => any>\n    ): () => void {\n        return this._store.subscribe(\n            () => subscriber(this.getState()),\n            (state) => state.checkoutButton.getState(),\n            ...filters.map(\n                (filter) => (state: InternalCheckoutSelectors) =>\n                    filter(createCheckoutButtonSelectors(state)),\n            ),\n        );\n    }\n\n    /**\n     * Initializes the checkout button of a payment method.\n     *\n     * When the checkout button is initialized, it will be inserted into the DOM,\n     * ready to be interacted with by the customer.\n     *\n     * ```js\n     * initializer.initializeButton({\n     *     methodId: 'braintreepaypal',\n     *     containerId: 'checkoutButton',\n     *     braintreepaypal: {\n     *     },\n     * });\n     * ```\n     *\n     * @param options - Options for initializing the checkout button.\n     * @returns A promise that resolves to the current state.\n     */\n    initializeButton(options: CheckoutButtonInitializeOptions): Promise<CheckoutButtonSelectors> {\n        const containerIds = isElementId(options.containerId)\n            ? [options.containerId]\n            : setUniqueElementId(options.containerId, `${options.methodId}-container`);\n\n        return Promise.all(\n            containerIds.map((containerId) => {\n                const action = this._buttonStrategyActionCreator.initialize({\n                    ...options,\n                    containerId,\n                });\n                const queueId = `checkoutButtonStrategy:${options.methodId}:${containerId}`;\n\n                return this._store.dispatch(action, { queueId });\n            }),\n        ).then(() => this.getState());\n    }\n\n    /**\n     * De-initializes the checkout button by performing any necessary clean-ups.\n     *\n     * ```js\n     * await service.deinitializeButton({\n     *     methodId: 'braintreepaypal',\n     * });\n     * ```\n     *\n     * @param options - Options for deinitializing the checkout button.\n     * @returns A promise that resolves to the current state.\n     */\n    deinitializeButton(options: CheckoutButtonOptions): Promise<CheckoutButtonSelectors> {\n        const action = this._buttonStrategyActionCreator.deinitialize(options);\n        const queueId = `checkoutButtonStrategy:${options.methodId}`;\n\n        return this._store.dispatch(action, { queueId }).then(() => this.getState());\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-options.ts",
    "content": "import { RequestOptions } from '../common/http-request';\n\nimport { CheckoutButtonMethodType } from './strategies';\nimport { PaypalButtonInitializeOptions } from './strategies/paypal';\n\nexport { CheckoutButtonInitializeOptions } from '../generated/checkout-button-initialize-options';\n\n/**\n * The set of options for configuring the checkout button.\n */\nexport interface CheckoutButtonOptions extends RequestOptions {\n    /**\n     * The identifier of the payment method.\n     */\n    methodId: CheckoutButtonMethodType;\n}\n\nexport interface BaseCheckoutButtonInitializeOptions extends CheckoutButtonOptions {\n    [key: string]: unknown;\n\n    /**\n     * The ID of a container which the checkout button should be inserted.\n     */\n    containerId: string;\n\n    /**\n     * The option that is required to load payment method configuration for provided currency code in Buy Now flow.\n     */\n    currencyCode?: string;\n\n    /**\n     * The options that are required to facilitate PayPal. They can be omitted\n     * unless you need to support Paypal.\n     */\n    paypal?: PaypalButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-reducer.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\n\nimport { CheckoutButtonActionType } from './checkout-button-actions';\nimport checkoutButtonReducer from './checkout-button-reducer';\nimport CheckoutButtonState from './checkout-button-state';\nimport { getCheckoutButtonState } from './checkout-buttons.mock';\nimport { CheckoutButtonMethodType } from './strategies';\n\ndescribe('checkoutButtonReducer', () => {\n    let initialState: CheckoutButtonState;\n\n    beforeEach(() => {\n        initialState = getCheckoutButtonState();\n    });\n\n    it('returns new status state if button is initializing', () => {\n        const methodId = CheckoutButtonMethodType.BRAINTREE_PAYPAL;\n        const containerId = 'foobar';\n        const action = createAction(CheckoutButtonActionType.InitializeButtonRequested, undefined, {\n            methodId,\n            containerId,\n        });\n        const state = checkoutButtonReducer(initialState, action);\n\n        expect(state.statuses).toEqual({ braintreepaypal: { isInitializing: true } });\n    });\n\n    it('returns new status state if button is initialized', () => {\n        initialState = {\n            ...initialState,\n            statuses: {\n                braintreepaypal: {\n                    isInitializing: true,\n                },\n            },\n        };\n\n        const methodId = CheckoutButtonMethodType.BRAINTREE_PAYPAL;\n        const containerId = 'foobar';\n        const action = createAction(CheckoutButtonActionType.InitializeButtonSucceeded, undefined, {\n            methodId,\n            containerId,\n        });\n        const state = checkoutButtonReducer(initialState, action);\n\n        expect(state.statuses).toEqual({ braintreepaypal: { isInitializing: false } });\n    });\n\n    it('returns new initialization state if button is initialized', () => {\n        const methodId = CheckoutButtonMethodType.BRAINTREE_PAYPAL;\n        const containerId = 'foobar';\n        const action = createAction(CheckoutButtonActionType.InitializeButtonSucceeded, undefined, {\n            methodId,\n            containerId,\n        });\n        const state = checkoutButtonReducer(initialState, action);\n\n        expect(state.data).toEqual({\n            braintreepaypal: { initializedContainers: { [containerId]: true } },\n        });\n    });\n\n    it('returns new status state if deinitializing button', () => {\n        const methodId = CheckoutButtonMethodType.BRAINTREE_PAYPAL;\n        const action = createAction(\n            CheckoutButtonActionType.DeinitializeButtonRequested,\n            undefined,\n            { methodId },\n        );\n        const state = checkoutButtonReducer(initialState, action);\n\n        expect(state.statuses).toEqual({ braintreepaypal: { isDeinitializing: true } });\n    });\n\n    it('returns new status state if button is deinitialized', () => {\n        initialState = {\n            ...initialState,\n            statuses: {\n                braintreepaypal: {\n                    isDeinitializing: true,\n                },\n            },\n        };\n\n        const methodId = CheckoutButtonMethodType.BRAINTREE_PAYPAL;\n        const action = createAction(\n            CheckoutButtonActionType.DeinitializeButtonSucceeded,\n            undefined,\n            { methodId },\n        );\n        const state = checkoutButtonReducer(initialState, action);\n\n        expect(state.statuses).toEqual({ braintreepaypal: { isDeinitializing: false } });\n    });\n\n    it('returns new initialization state if button is deinitialized', () => {\n        const methodId = CheckoutButtonMethodType.BRAINTREE_PAYPAL;\n        const containerId = 'foobar';\n\n        initialState = {\n            ...initialState,\n            data: {\n                [methodId]: {\n                    initializedContainers: {\n                        [containerId]: true,\n                    },\n                },\n            },\n        };\n\n        const action = createAction(\n            CheckoutButtonActionType.DeinitializeButtonSucceeded,\n            undefined,\n            { methodId },\n        );\n        const state = checkoutButtonReducer(initialState, action);\n\n        expect(state.data).toEqual({ braintreepaypal: { initializedContainers: {} } });\n    });\n\n    it('returns new error state if button fails to initialize', () => {\n        const error = new Error('Fail to initialize');\n        const methodId = CheckoutButtonMethodType.BRAINTREE_PAYPAL;\n        const containerId = 'foobar';\n        const action = createAction(CheckoutButtonActionType.InitializeButtonFailed, error, {\n            methodId,\n            containerId,\n        });\n        const state = checkoutButtonReducer(initialState, action);\n\n        expect(state.errors).toEqual({ braintreepaypal: { initializeError: error } });\n    });\n\n    it('returns new error state if button no longer fails to initialize', () => {\n        initialState = {\n            ...initialState,\n            errors: {\n                braintreepaypal: {\n                    initializeError: new Error('Fail to initialize'),\n                },\n            },\n        };\n\n        const methodId = CheckoutButtonMethodType.BRAINTREE_PAYPAL;\n        const containerId = 'foobar';\n        const action = createAction(CheckoutButtonActionType.InitializeButtonSucceeded, undefined, {\n            methodId,\n            containerId,\n        });\n        const state = checkoutButtonReducer(initialState, action);\n\n        expect(state.errors).toEqual({ braintreepaypal: { initializeError: undefined } });\n    });\n\n    it('returns new error state if button fails to deinitialize', () => {\n        const error = new Error('Fail to initialize');\n        const methodId = CheckoutButtonMethodType.BRAINTREE_PAYPAL;\n        const containerId = 'foobar';\n        const action = createAction(CheckoutButtonActionType.DeinitializeButtonFailed, error, {\n            methodId,\n            containerId,\n        });\n        const state = checkoutButtonReducer(initialState, action);\n\n        expect(state.errors).toEqual({ braintreepaypal: { deinitializeError: error } });\n    });\n\n    it('returns new error state if button no longer fails to deinitialize', () => {\n        initialState = {\n            ...initialState,\n            errors: {\n                braintreepaypal: {\n                    deinitializeError: new Error('Fail to deinitialize'),\n                },\n            },\n        };\n\n        const methodId = CheckoutButtonMethodType.BRAINTREE_PAYPAL;\n        const action = createAction(\n            CheckoutButtonActionType.DeinitializeButtonSucceeded,\n            undefined,\n            { methodId },\n        );\n        const state = checkoutButtonReducer(initialState, action);\n\n        expect(state.errors).toEqual({ braintreepaypal: { deinitializeError: undefined } });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-reducer.ts",
    "content": "import { combineReducers } from '@bigcommerce/data-store';\n\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport { CheckoutButtonAction, CheckoutButtonActionType } from './checkout-button-actions';\nimport CheckoutButtonState, {\n    CheckoutButtonDataState,\n    CheckoutButtonErrorsState,\n    CheckoutButtonStatusesState,\n    DEFAULT_STATE,\n} from './checkout-button-state';\n\nconst DEFAULT_DATA_STATE: CheckoutButtonDataState = { initializedContainers: {} };\nconst DEFAULT_ERROR_STATE: CheckoutButtonErrorsState = {};\nconst DEFAULT_STATUS_STATE: CheckoutButtonStatusesState = {};\n\nexport default function checkoutButtonReducer(\n    state: CheckoutButtonState = DEFAULT_STATE,\n    action: CheckoutButtonAction,\n): CheckoutButtonState {\n    if (!action.meta || !action.meta.methodId) {\n        return state;\n    }\n\n    const reducer = combineReducers<CheckoutButtonState>({\n        data: combineReducers({\n            [action.meta.methodId]: dataReducer,\n        }),\n        errors: combineReducers({\n            [action.meta.methodId]: errorsReducer,\n        }),\n        statuses: combineReducers({\n            [action.meta.methodId]: statusesReducer,\n        }),\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: CheckoutButtonDataState = DEFAULT_DATA_STATE,\n    action: CheckoutButtonAction,\n): CheckoutButtonDataState {\n    switch (action.type) {\n        case CheckoutButtonActionType.InitializeButtonSucceeded:\n            if (!action.meta || !action.meta.containerId) {\n                return data;\n            }\n\n            return objectMerge(data, {\n                initializedContainers: {\n                    [action.meta.containerId]: true,\n                },\n            });\n\n        case CheckoutButtonActionType.DeinitializeButtonSucceeded:\n            return objectSet(data, 'initializedContainers', {});\n    }\n\n    return data;\n}\n\nfunction errorsReducer(\n    errors: CheckoutButtonErrorsState = DEFAULT_ERROR_STATE,\n    action: CheckoutButtonAction,\n): CheckoutButtonErrorsState {\n    switch (action.type) {\n        case CheckoutButtonActionType.InitializeButtonRequested:\n        case CheckoutButtonActionType.InitializeButtonSucceeded:\n            return objectSet(errors, 'initializeError', undefined);\n\n        case CheckoutButtonActionType.InitializeButtonFailed:\n            return objectSet(errors, 'initializeError', action.payload);\n\n        case CheckoutButtonActionType.DeinitializeButtonRequested:\n        case CheckoutButtonActionType.DeinitializeButtonSucceeded:\n            return objectSet(errors, 'deinitializeError', undefined);\n\n        case CheckoutButtonActionType.DeinitializeButtonFailed:\n            return objectSet(errors, 'deinitializeError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: CheckoutButtonStatusesState = DEFAULT_STATUS_STATE,\n    action: CheckoutButtonAction,\n): CheckoutButtonStatusesState {\n    switch (action.type) {\n        case CheckoutButtonActionType.InitializeButtonRequested:\n            return objectSet(statuses, 'isInitializing', true);\n\n        case CheckoutButtonActionType.InitializeButtonFailed:\n        case CheckoutButtonActionType.InitializeButtonSucceeded:\n            return objectSet(statuses, 'isInitializing', false);\n\n        case CheckoutButtonActionType.DeinitializeButtonRequested:\n            return objectSet(statuses, 'isDeinitializing', true);\n\n        case CheckoutButtonActionType.DeinitializeButtonFailed:\n        case CheckoutButtonActionType.DeinitializeButtonSucceeded:\n            return objectSet(statuses, 'isDeinitializing', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-selector.spec.ts",
    "content": "import {\n    CheckoutButtonSelectorFactory,\n    createCheckoutButtonSelectorFactory,\n} from './checkout-button-selector';\nimport CheckoutButtonState from './checkout-button-state';\nimport { getCheckoutButtonState } from './checkout-buttons.mock';\nimport { CheckoutButtonMethodType } from './strategies';\n\ndescribe('CheckoutButtonSelector', () => {\n    let state: CheckoutButtonState;\n    let createCheckoutButtonSelector: CheckoutButtonSelectorFactory;\n\n    describe('#isInitializing()', () => {\n        beforeEach(() => {\n            createCheckoutButtonSelector = createCheckoutButtonSelectorFactory();\n            state = {\n                ...getCheckoutButtonState(),\n                statuses: {\n                    braintreepaypal: {\n                        isInitializing: true,\n                    },\n                },\n            };\n        });\n\n        it('returns true if initializing checkout button', () => {\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(selector.isInitializing(CheckoutButtonMethodType.BRAINTREE_PAYPAL)).toBe(true);\n        });\n\n        it('returns true if initializing any checkout button', () => {\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(selector.isInitializing()).toBe(true);\n        });\n\n        it('returns false if not initializing checkout button', () => {\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(selector.isInitializing(CheckoutButtonMethodType.BRAINTREE_PAYPAL_CREDIT)).toBe(\n                false,\n            );\n        });\n\n        it('returns false if not initializing any checkout button', () => {\n            state = getCheckoutButtonState();\n\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(selector.isInitializing()).toBe(false);\n        });\n    });\n\n    describe('#isInitialized()', () => {\n        it('returns true if method is initialized', () => {\n            const selector = createCheckoutButtonSelector({\n                ...state,\n                data: {\n                    [CheckoutButtonMethodType.BRAINTREE_PAYPAL]: {\n                        initializedContainers: { isInitialized: true },\n                    },\n                },\n            });\n\n            expect(selector.isInitialized(CheckoutButtonMethodType.BRAINTREE_PAYPAL)).toBe(true);\n        });\n\n        it('returns false if method is not initialized', () => {\n            const selector = createCheckoutButtonSelector({\n                ...state,\n                data: {\n                    [CheckoutButtonMethodType.BRAINTREE_PAYPAL]: {\n                        initializedContainers: { isInitialized: false },\n                    },\n                },\n            });\n\n            expect(selector.isInitialized(CheckoutButtonMethodType.BRAINTREE_PAYPAL)).toBe(false);\n            expect(selector.isInitialized(CheckoutButtonMethodType.PAYPALEXPRESS)).toBe(false);\n        });\n    });\n\n    describe('#isDeinitializing()', () => {\n        beforeEach(() => {\n            state = {\n                ...getCheckoutButtonState(),\n                statuses: {\n                    braintreepaypal: {\n                        isDeinitializing: true,\n                    },\n                },\n            };\n        });\n\n        it('returns true if deinitializing checkout button', () => {\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(selector.isDeinitializing(CheckoutButtonMethodType.BRAINTREE_PAYPAL)).toBe(true);\n        });\n\n        it('returns true if deinitializing any checkout button', () => {\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(selector.isDeinitializing()).toBe(true);\n        });\n\n        it('returns false if not deinitializing checkout button', () => {\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(\n                selector.isDeinitializing(CheckoutButtonMethodType.BRAINTREE_PAYPAL_CREDIT),\n            ).toBe(false);\n        });\n\n        it('returns false if not deinitializing any checkout button', () => {\n            state = getCheckoutButtonState();\n\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(selector.isDeinitializing()).toBe(false);\n        });\n    });\n\n    describe('#getInitializeError()', () => {\n        let expectedError: Error;\n\n        beforeEach(() => {\n            expectedError = new Error('Unable to initialize foobar');\n\n            state = {\n                ...getCheckoutButtonState(),\n                errors: {\n                    braintreepaypal: {\n                        initializeError: expectedError,\n                    },\n                },\n            };\n        });\n\n        it('returns error if unable to initialize checkout button', () => {\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(selector.getInitializeError(CheckoutButtonMethodType.BRAINTREE_PAYPAL)).toEqual(\n                expectedError,\n            );\n        });\n\n        it('returns error if unable to initialize any checkout button', () => {\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(selector.getInitializeError()).toEqual(expectedError);\n        });\n\n        it('returns undefined if able to initialize checkout button', () => {\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(\n                selector.getInitializeError(CheckoutButtonMethodType.BRAINTREE_PAYPAL_CREDIT),\n            ).toBeUndefined();\n        });\n\n        it('returns undefined if there are no issues initializing any checkout button', () => {\n            state = getCheckoutButtonState();\n\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(selector.getInitializeError()).toBeUndefined();\n        });\n    });\n\n    describe('#getDeinitializeError()', () => {\n        let expectedError: Error;\n\n        beforeEach(() => {\n            expectedError = new Error('Unable to deinitialize foobar');\n\n            state = {\n                ...getCheckoutButtonState(),\n                errors: {\n                    braintreepaypal: {\n                        deinitializeError: expectedError,\n                    },\n                },\n            };\n        });\n\n        it('returns error if unable to deinitialize checkout button', () => {\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(\n                selector.getDeinitializeError(CheckoutButtonMethodType.BRAINTREE_PAYPAL),\n            ).toEqual(expectedError);\n        });\n\n        it('returns error if unable to deinitialize any checkout button', () => {\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(selector.getDeinitializeError()).toEqual(expectedError);\n        });\n\n        it('returns undefined if able to deinitialize checkout button', () => {\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(\n                selector.getDeinitializeError(CheckoutButtonMethodType.BRAINTREE_PAYPAL_CREDIT),\n            ).toBeUndefined();\n        });\n\n        it('returns undefined if there are no issues deinitializing any checkout button', () => {\n            state = getCheckoutButtonState();\n\n            const selector = createCheckoutButtonSelector(state);\n\n            expect(selector.getDeinitializeError()).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-selector.ts",
    "content": "import { memoize, memoizeOne } from '@bigcommerce/memoize';\nimport { find, some, values } from 'lodash';\n\nimport { createSelector } from '../common/selector';\n\nimport CheckoutButtonState, { DEFAULT_STATE } from './checkout-button-state';\nimport { CheckoutButtonMethodType } from './strategies';\n\nexport default interface CheckoutButtonSelector {\n    getState(): CheckoutButtonState;\n    isInitializing(methodId?: CheckoutButtonMethodType): boolean;\n    isInitialized(methodId: CheckoutButtonMethodType, containerId?: string): boolean;\n    isDeinitializing(methodId?: CheckoutButtonMethodType): boolean;\n    getInitializeError(methodId?: CheckoutButtonMethodType): Error | undefined;\n    getDeinitializeError(methodId?: CheckoutButtonMethodType): Error | undefined;\n}\n\nexport type CheckoutButtonSelectorFactory = (state: CheckoutButtonState) => CheckoutButtonSelector;\n\nexport function createCheckoutButtonSelectorFactory(): CheckoutButtonSelectorFactory {\n    const getState = createSelector(\n        (state: CheckoutButtonState) => state,\n        (state) => () => state,\n    );\n\n    const isInitializing = createSelector(\n        (state: CheckoutButtonState) => state.statuses,\n        (statuses) =>\n            memoize((methodId?: CheckoutButtonMethodType) => {\n                if (methodId) {\n                    const method = statuses[methodId];\n\n                    return (method && method.isInitializing) === true;\n                }\n\n                return some(statuses, { isInitializing: true });\n            }),\n    );\n\n    const isInitialized = createSelector(\n        (state: CheckoutButtonState) => state.data,\n        (data) =>\n            memoize((methodId: CheckoutButtonMethodType, containerId?: string) => {\n                const method = data[methodId];\n\n                if (!method) {\n                    return false;\n                }\n\n                if (!containerId) {\n                    return some(\n                        method.initializedContainers,\n                        (isInitialized) => isInitialized === true,\n                    );\n                }\n\n                return method.initializedContainers[containerId] === true;\n            }),\n    );\n\n    const isDeinitializing = createSelector(\n        (state: CheckoutButtonState) => state.statuses,\n        (statuses) =>\n            memoize((methodId?: CheckoutButtonMethodType) => {\n                if (methodId) {\n                    const method = statuses[methodId];\n\n                    return (method && method.isDeinitializing) === true;\n                }\n\n                return some(statuses, { isDeinitializing: true });\n            }),\n    );\n\n    const getInitializeError = createSelector(\n        (state: CheckoutButtonState) => state.errors,\n        (errors) =>\n            memoize((methodId?: CheckoutButtonMethodType) => {\n                const method = methodId\n                    ? errors[methodId]\n                    : find(values(errors), (method) => !!(method && method.initializeError));\n\n                return method && method.initializeError;\n            }),\n    );\n\n    const getDeinitializeError = createSelector(\n        (state: CheckoutButtonState) => state.errors,\n        (errors) =>\n            memoize((methodId?: CheckoutButtonMethodType) => {\n                const method = methodId\n                    ? errors[methodId]\n                    : find(values(errors), (method) => !!(method && method.deinitializeError));\n\n                return method && method.deinitializeError;\n            }),\n    );\n\n    return memoizeOne((state: CheckoutButtonState = DEFAULT_STATE): CheckoutButtonSelector => {\n        return {\n            getState: getState(state),\n            isInitializing: isInitializing(state),\n            isInitialized: isInitialized(state),\n            isDeinitializing: isDeinitializing(state),\n            getInitializeError: getInitializeError(state),\n            getDeinitializeError: getDeinitializeError(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-selectors.ts",
    "content": "import CheckoutButtonErrorSelector from './checkout-button-error-selector';\nimport CheckoutButtonStatusSelector from './checkout-button-status-selector';\n\nexport default interface CheckoutButtonSelectors {\n    errors: CheckoutButtonErrorSelector;\n    statuses: CheckoutButtonStatusSelector;\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-state.ts",
    "content": "import { CheckoutButtonMethodType } from './strategies';\n\nexport default interface CheckoutButtonState {\n    data: {\n        [key in CheckoutButtonMethodType]?: CheckoutButtonDataState | undefined;\n    };\n    errors: {\n        [key in CheckoutButtonMethodType]?: CheckoutButtonErrorsState | undefined;\n    };\n    statuses: {\n        [key in CheckoutButtonMethodType]?: CheckoutButtonStatusesState | undefined;\n    };\n}\n\nexport interface CheckoutButtonDataState {\n    initializedContainers: {\n        [key: string]: boolean;\n    };\n}\n\nexport interface CheckoutButtonErrorsState {\n    initializeError?: Error;\n    deinitializeError?: Error;\n}\n\nexport interface CheckoutButtonStatusesState {\n    isInitializing?: boolean;\n    isDeinitializing?: boolean;\n}\n\nexport const DEFAULT_STATE: CheckoutButtonState = {\n    data: {},\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-status-selector.ts",
    "content": "import { InternalCheckoutSelectors } from '../checkout';\nimport { selector } from '../common/selector';\n\nimport CheckoutButtonSelector from './checkout-button-selector';\nimport { CheckoutButtonMethodType } from './strategies';\n\n@selector\nexport default class CheckoutButtonStatusSelector {\n    private _checkoutButton: CheckoutButtonSelector;\n\n    /**\n     * @internal\n     */\n    constructor(selectors: InternalCheckoutSelectors) {\n        this._checkoutButton = selectors.checkoutButton;\n    }\n\n    isInitializingButton(methodId?: CheckoutButtonMethodType): boolean {\n        return this._checkoutButton.isInitializing(methodId);\n    }\n\n    isDeinitializingButton(methodId?: CheckoutButtonMethodType): boolean {\n        return this._checkoutButton.isDeinitializing(methodId);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-strategy-action-creator.spec.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { merge } from 'lodash';\nimport { from, of, throwError } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { CheckoutStore, createCheckoutStore } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { Registry } from '../common/registry';\nimport {\n    B2BCompanyPaymentMethodRequestSender,\n    PaymentMethodActionCreator,\n    PaymentMethodActionType,\n    PaymentMethodRequestSender,\n} from '../payment';\nimport { createPaymentIntegrationService } from '../payment-integration';\nimport { getPaymentMethod } from '../payment/payment-methods.mock';\n\nimport { CheckoutButtonActionType } from './checkout-button-actions';\nimport { CheckoutButtonInitializeOptions } from './checkout-button-options';\nimport CheckoutButtonStrategyActionCreator from './checkout-button-strategy-action-creator';\nimport CheckoutButtonRegistryV2 from './checkout-button-strategy-registry-v2';\nimport createCheckoutButtonRegistryV2 from './create-checkout-button-registry-v2';\nimport { CheckoutButtonMethodType, CheckoutButtonStrategy } from './strategies';\n\ndescribe('CheckoutButtonStrategyActionCreator', () => {\n    let paymentMethodActionCreator: PaymentMethodActionCreator;\n    let registry: Registry<CheckoutButtonStrategy>;\n    let registryV2: CheckoutButtonRegistryV2;\n    let options: CheckoutButtonInitializeOptions;\n    let strategyActionCreator: CheckoutButtonStrategyActionCreator;\n    let strategy: CheckoutButtonStrategy;\n    let store: CheckoutStore;\n\n    class MockButtonStrategy implements CheckoutButtonStrategy {\n        initialize(): Promise<void> {\n            return Promise.resolve();\n        }\n\n        deinitialize(): Promise<void> {\n            return Promise.resolve();\n        }\n    }\n\n    beforeEach(() => {\n        registry = new Registry<CheckoutButtonStrategy>();\n        paymentMethodActionCreator = new PaymentMethodActionCreator(\n            new PaymentMethodRequestSender(createRequestSender()),\n            new B2BCompanyPaymentMethodRequestSender(createRequestSender()),\n        );\n        strategy = new MockButtonStrategy();\n        store = createCheckoutStore();\n        registryV2 = createCheckoutButtonRegistryV2(createPaymentIntegrationService(store), {});\n        registry.register(CheckoutButtonMethodType.PAYPALEXPRESS, () => strategy);\n\n        jest.spyOn(paymentMethodActionCreator, 'loadPaymentMethod').mockReturnValue(() =>\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            from([\n                createAction(PaymentMethodActionType.LoadPaymentMethodRequested),\n                createAction(PaymentMethodActionType.LoadPaymentMethodSucceeded, {\n                    paymentMethod: getPaymentMethod(),\n                }),\n            ]),\n        );\n\n        options = {\n            methodId: CheckoutButtonMethodType.PAYPALEXPRESS,\n            containerId: 'checkout-button',\n        };\n\n        strategyActionCreator = new CheckoutButtonStrategyActionCreator(\n            registry,\n            registryV2,\n            paymentMethodActionCreator,\n        );\n    });\n\n    it('loads required payment method and uses cache if available', async () => {\n        await from(strategyActionCreator.initialize(options)(store)).pipe(toArray()).toPromise();\n\n        expect(paymentMethodActionCreator.loadPaymentMethod).toHaveBeenCalledWith(\n            CheckoutButtonMethodType.PAYPALEXPRESS,\n            { useCache: true },\n        );\n    });\n\n    it('loads required payment method for provided currency', async () => {\n        const optionsMock = {\n            methodId: CheckoutButtonMethodType.PAYPALEXPRESS,\n            containerId: 'checkout-button',\n            currencyCode: 'USD',\n        };\n\n        await from(strategyActionCreator.initialize(optionsMock)(store))\n            .pipe(toArray())\n            .toPromise();\n\n        const expectedPaymentMethodOptions = {\n            useCache: true,\n            params: {\n                currencyCode: 'USD',\n            },\n        };\n\n        expect(paymentMethodActionCreator.loadPaymentMethod).toHaveBeenCalledWith(\n            CheckoutButtonMethodType.PAYPALEXPRESS,\n            expectedPaymentMethodOptions,\n        );\n    });\n\n    it('finds strategy and initializes it', async () => {\n        jest.spyOn(registry, 'get');\n        jest.spyOn(strategy, 'initialize');\n\n        await from(strategyActionCreator.initialize(options)(store)).pipe(toArray()).toPromise();\n\n        expect(registry.get).toHaveBeenCalledWith(CheckoutButtonMethodType.PAYPALEXPRESS);\n        expect(strategy.initialize).toHaveBeenCalledWith(options);\n    });\n\n    it('does not initialize if strategy is already initialized', async () => {\n        store = createCheckoutStore(\n            merge(getCheckoutStoreState(), {\n                checkoutButton: {\n                    data: {\n                        [options.methodId]: {\n                            initializedContainers: {\n                                [options.containerId]: true,\n                            },\n                        },\n                    },\n                },\n            }),\n        );\n\n        jest.spyOn(registry, 'get');\n        jest.spyOn(strategy, 'initialize');\n\n        await from(strategyActionCreator.initialize(options)(store)).pipe(toArray()).toPromise();\n\n        expect(registry.get).not.toHaveBeenCalledWith(CheckoutButtonMethodType.PAYPALEXPRESS);\n        expect(strategy.initialize).not.toHaveBeenCalledWith(options);\n    });\n\n    it('emits actions indicating initialization progress', async () => {\n        const methodId = CheckoutButtonMethodType.PAYPALEXPRESS;\n        const containerId = 'checkout-button';\n        const actions = await from(\n            strategyActionCreator.initialize({ methodId, containerId })(store),\n        )\n            .pipe(toArray())\n            .toPromise();\n\n        expect(actions).toEqual([\n            {\n                type: CheckoutButtonActionType.InitializeButtonRequested,\n                meta: { methodId, containerId },\n            },\n            { type: PaymentMethodActionType.LoadPaymentMethodRequested },\n            {\n                type: PaymentMethodActionType.LoadPaymentMethodSucceeded,\n                payload: { paymentMethod: getPaymentMethod() },\n            },\n            {\n                type: CheckoutButtonActionType.InitializeButtonSucceeded,\n                meta: { methodId, containerId },\n            },\n        ]);\n    });\n\n    it('throws error if unable to load required payment method', async () => {\n        const methodId = CheckoutButtonMethodType.PAYPALEXPRESS;\n        const containerId = 'checkout-button';\n        const expectedError = new Error('Unable to load payment method');\n\n        jest.spyOn(paymentMethodActionCreator, 'loadPaymentMethod').mockReturnValue(() =>\n            throwError(\n                createErrorAction(PaymentMethodActionType.LoadPaymentMethodFailed, expectedError),\n            ),\n        );\n\n        const errorHandler = jest.fn((action) => of(action));\n        const actions = await from(\n            strategyActionCreator.initialize({ methodId, containerId })(store),\n        )\n            .pipe(catchError(errorHandler), toArray())\n            .toPromise();\n\n        expect(errorHandler).toHaveBeenCalled();\n        expect(actions).toEqual([\n            {\n                type: CheckoutButtonActionType.InitializeButtonRequested,\n                meta: { methodId, containerId },\n            },\n            {\n                type: PaymentMethodActionType.LoadPaymentMethodFailed,\n                error: true,\n                payload: expectedError,\n            },\n            {\n                type: CheckoutButtonActionType.InitializeButtonFailed,\n                error: true,\n                payload: expectedError,\n                meta: { methodId, containerId },\n            },\n        ]);\n    });\n\n    it('throws error if unable to initialize strategy', async () => {\n        const methodId = CheckoutButtonMethodType.PAYPALEXPRESS;\n        const containerId = 'checkout-button';\n        const expectedError = new Error('Unable to initialize strategy');\n\n        jest.spyOn(strategy, 'initialize').mockReturnValue(Promise.reject(expectedError));\n\n        const errorHandler = jest.fn((action) => of(action));\n        const actions = await from(\n            strategyActionCreator.initialize({ methodId, containerId })(store),\n        )\n            .pipe(catchError(errorHandler), toArray())\n            .toPromise();\n\n        expect(errorHandler).toHaveBeenCalled();\n        expect(actions).toEqual([\n            {\n                type: CheckoutButtonActionType.InitializeButtonRequested,\n                meta: { methodId, containerId },\n            },\n            { type: PaymentMethodActionType.LoadPaymentMethodRequested },\n            {\n                type: PaymentMethodActionType.LoadPaymentMethodSucceeded,\n                payload: expect.any(Object),\n            },\n            {\n                type: CheckoutButtonActionType.InitializeButtonFailed,\n                error: true,\n                payload: expectedError,\n                meta: { methodId, containerId },\n            },\n        ]);\n    });\n\n    it('finds strategy and deinitializes it', async () => {\n        store = createCheckoutStore(\n            merge(getCheckoutStoreState(), {\n                checkoutButton: {\n                    data: {\n                        [options.methodId]: {\n                            initializedContainers: {\n                                [options.containerId]: true,\n                            },\n                        },\n                    },\n                },\n            }),\n        );\n\n        jest.spyOn(registry, 'get');\n        jest.spyOn(strategy, 'deinitialize');\n\n        await from(strategyActionCreator.deinitialize(options)(store)).pipe(toArray()).toPromise();\n\n        expect(registry.get).toHaveBeenCalledWith(CheckoutButtonMethodType.PAYPALEXPRESS);\n        expect(strategy.deinitialize).toHaveBeenCalled();\n    });\n\n    it('does not deinitialize if strategy is not initialized', async () => {\n        jest.spyOn(registry, 'get');\n        jest.spyOn(strategy, 'deinitialize');\n\n        await from(strategyActionCreator.deinitialize(options)(store)).pipe(toArray()).toPromise();\n\n        expect(registry.get).not.toHaveBeenCalledWith(options.methodId);\n        expect(strategy.deinitialize).not.toHaveBeenCalled();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-strategy-action-creator.ts",
    "content": "import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, empty, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { CheckoutButtonStrategy as CheckoutButtonStrategyV2 } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { Registry } from '../common/registry';\nimport { PaymentMethodActionCreator } from '../payment';\n\nimport {\n    CheckoutButtonActionType,\n    DeinitializeButtonAction,\n    InitializeButtonAction,\n} from './checkout-button-actions';\nimport { CheckoutButtonInitializeOptions, CheckoutButtonOptions } from './checkout-button-options';\nimport CheckoutButtonRegistryV2 from './checkout-button-strategy-registry-v2';\nimport { CheckoutButtonMethodType, CheckoutButtonStrategy } from './strategies';\n\nexport default class CheckoutButtonStrategyActionCreator {\n    constructor(\n        private _registry: Registry<CheckoutButtonStrategy>,\n        private _registryV2: CheckoutButtonRegistryV2,\n        private _paymentMethodActionCreator: PaymentMethodActionCreator,\n    ) {}\n\n    initialize(\n        options: CheckoutButtonInitializeOptions,\n    ): ThunkAction<InitializeButtonAction, InternalCheckoutSelectors> {\n        return (store) => {\n            const meta = {\n                methodId: options.methodId,\n                containerId: options.containerId,\n            };\n\n            if (\n                store.getState().checkoutButton.isInitialized(options.methodId, options.containerId)\n            ) {\n                return empty();\n            }\n\n            const paymentMethodRequestParams = options.currencyCode\n                ? { params: { currencyCode: options.currencyCode } }\n                : {};\n\n            const paymentMethodRequestOptions = {\n                ...paymentMethodRequestParams,\n                timeout: options.timeout,\n                useCache: true,\n            };\n\n            return concat(\n                of(\n                    createAction(\n                        CheckoutButtonActionType.InitializeButtonRequested,\n                        undefined,\n                        meta,\n                    ),\n                ),\n                this._paymentMethodActionCreator.loadPaymentMethod(\n                    options.methodId,\n                    paymentMethodRequestOptions,\n                )(store),\n                defer(() =>\n                    this._getStrategy(options.methodId)\n                        .initialize(options)\n                        .then(() =>\n                            createAction(\n                                CheckoutButtonActionType.InitializeButtonSucceeded,\n                                undefined,\n                                meta,\n                            ),\n                        ),\n                ),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(CheckoutButtonActionType.InitializeButtonFailed, error, meta),\n                ),\n            );\n        };\n    }\n\n    deinitialize(\n        options: CheckoutButtonOptions,\n    ): ThunkAction<DeinitializeButtonAction, InternalCheckoutSelectors> {\n        return (store) => {\n            const meta = { methodId: options.methodId };\n\n            if (!store.getState().checkoutButton.isInitialized(options.methodId)) {\n                return empty();\n            }\n\n            return concat(\n                of(\n                    createAction(\n                        CheckoutButtonActionType.DeinitializeButtonRequested,\n                        undefined,\n                        meta,\n                    ),\n                ),\n                defer(() =>\n                    this._getStrategy(options.methodId)\n                        .deinitialize()\n                        .then(() =>\n                            createAction(\n                                CheckoutButtonActionType.DeinitializeButtonSucceeded,\n                                undefined,\n                                meta,\n                            ),\n                        ),\n                ),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(\n                        CheckoutButtonActionType.DeinitializeButtonFailed,\n                        error,\n                        meta,\n                    ),\n                ),\n            );\n        };\n    }\n\n    private _getStrategy(\n        methodId: CheckoutButtonMethodType,\n    ): CheckoutButtonStrategy | CheckoutButtonStrategyV2 {\n        let strategy: CheckoutButtonStrategy | CheckoutButtonStrategyV2;\n\n        try {\n            strategy = this._registryV2.get({ id: methodId });\n        } catch {\n            strategy = this._registry.get(methodId);\n        }\n\n        return strategy;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-button-strategy-registry-v2.ts",
    "content": "import {\n    CheckoutButtonStrategy,\n    CheckoutButtonStrategyResolveId,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ResolveIdRegistry } from '../common/registry';\n\ntype CheckoutButtonRegistry = ResolveIdRegistry<\n    CheckoutButtonStrategy,\n    CheckoutButtonStrategyResolveId\n>;\n\nexport default CheckoutButtonRegistry;\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/checkout-buttons.mock.ts",
    "content": "import CheckoutButtonState from './checkout-button-state';\n\nexport function getCheckoutButtonState(): CheckoutButtonState {\n    return {\n        data: {},\n        errors: {},\n        statuses: {},\n    };\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/create-checkout-button-initializer.spec.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { createCheckoutStore } from '../checkout';\n\nimport CheckoutButtonInitializer from './checkout-button-initializer';\nimport createCheckoutButtonInitializer from './create-checkout-button-initializer';\n\njest.mock('@bigcommerce/form-poster');\njest.mock('@bigcommerce/request-sender');\njest.mock('../checkout', () => ({\n    createCheckoutStore: jest.fn(() => ({\n        getState: jest.fn().mockReturnValue({}),\n        subscribe: jest.fn(),\n    })),\n}));\njest.mock('../payment-integration');\njest.mock('./create-checkout-button-registry');\n\ndescribe('createCheckoutButtonInitializer()', () => {\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('creates instance of `CheckoutButtonInitializer`', () => {\n        const initializer = createCheckoutButtonInitializer();\n\n        expect(initializer).toBeInstanceOf(CheckoutButtonInitializer);\n    });\n\n    it('configures instance with host URL', () => {\n        const host = 'https://foobar.com';\n\n        createCheckoutButtonInitializer({ host, locale: 'en' });\n\n        expect(createCheckoutStore).toHaveBeenCalledWith({\n            config: {\n                meta: {\n                    host,\n                    locale: 'en',\n                },\n                errors: {},\n                statuses: {},\n            },\n        });\n        expect(createFormPoster).toHaveBeenCalledWith({ host });\n        expect(createRequestSender).toHaveBeenCalledWith({ host });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/create-checkout-button-initializer.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { createCheckoutStore } from '../checkout';\nimport { ConfigState } from '../config';\nimport * as defaultCheckoutButtonStrategyFactories from '../generated/checkout-button-strategies';\nimport {\n    B2BCompanyPaymentMethodRequestSender,\n    PaymentMethodActionCreator,\n    PaymentMethodRequestSender,\n} from '../payment';\nimport { createPaymentIntegrationService } from '../payment-integration';\n\nimport CheckoutButtonInitializer from './checkout-button-initializer';\nimport CheckoutButtonInitializerOptions from './checkout-button-initializer-options';\nimport CheckoutButtonStrategyActionCreator from './checkout-button-strategy-action-creator';\nimport createCheckoutButtonRegistry from './create-checkout-button-registry';\nimport createCheckoutButtonRegistryV2 from './create-checkout-button-registry-v2';\n\n/**\n * Creates an instance of `CheckoutButtonInitializer`.\n *\n * @remarks\n * ```js\n * const initializer = createCheckoutButtonInitializer();\n *\n * initializer.initializeButton({\n *     methodId: 'braintreepaypal',\n *     braintreepaypal: {\n *         container: '#checkoutButton',\n *     },\n * });\n * ```\n *\n * @alpha\n * Please note that `CheckoutButtonInitializer` is currently in an early stage\n * of development. Therefore the API is unstable and not ready for public\n * consumption.\n *\n * @param options - A set of construction options.\n * @returns an instance of `CheckoutButtonInitializer`.\n */\nexport default function createCheckoutButtonInitializer(\n    options?: CheckoutButtonInitializerOptions,\n): CheckoutButtonInitializer {\n    const { host } = options ?? {};\n\n    const config: ConfigState = {\n        meta: {\n            host: options?.host,\n            locale: options?.locale,\n        },\n        errors: {},\n        statuses: {},\n    };\n\n    const store = createCheckoutStore({ config });\n    const requestSender = createRequestSender({ host });\n    const formPoster = createFormPoster({ host });\n    const paymentIntegrationService = createPaymentIntegrationService(store);\n    const registryV2 = createCheckoutButtonRegistryV2(\n        paymentIntegrationService,\n        process.env.ESSENTIAL_BUILD ? {} : defaultCheckoutButtonStrategyFactories,\n    );\n\n    return new CheckoutButtonInitializer(\n        store,\n        new CheckoutButtonStrategyActionCreator(\n            createCheckoutButtonRegistry(store, requestSender, formPoster, host),\n            registryV2,\n            new PaymentMethodActionCreator(\n                new PaymentMethodRequestSender(requestSender),\n                new B2BCompanyPaymentMethodRequestSender(requestSender),\n            ),\n        ),\n    );\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/create-checkout-button-registry-v2.spec.ts",
    "content": "import {\n    CheckoutButtonStrategy,\n    PaymentIntegrationService,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createCheckoutButtonStrategyRegistry from './create-checkout-button-registry-v2';\n\ndescribe('createCheckoutButtonStrategyRegistry', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('creates registry with factories pre-registered', () => {\n        const fooStrategy = {} as CheckoutButtonStrategy;\n        const registry = createCheckoutButtonStrategyRegistry(paymentIntegrationService, {\n            createFooStrategy: toResolvableModule(\n                () => fooStrategy,\n                [{ id: 'foo', gateway: null, type: 'api' }],\n            ),\n        });\n        const strategy = registry.get({ id: 'foo' });\n\n        expect(strategy).toEqual(fooStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/create-checkout-button-registry-v2.ts",
    "content": "import {\n    CheckoutButtonStrategy,\n    CheckoutButtonStrategyFactory,\n    CheckoutButtonStrategyResolveId,\n    isResolvableModule,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ResolveIdRegistry } from '../common/registry';\n\nexport interface CheckoutButtonStrategyFactories {\n    [key: string]: CheckoutButtonStrategyFactory<CheckoutButtonStrategy>;\n}\n\nexport default function createCheckoutButtonStrategyRegistry(\n    paymentIntegrationService: PaymentIntegrationService,\n    checkoutButtonStrategyFactories: CheckoutButtonStrategyFactories,\n): ResolveIdRegistry<CheckoutButtonStrategy, CheckoutButtonStrategyResolveId> {\n    const registry = new ResolveIdRegistry<\n        CheckoutButtonStrategy,\n        CheckoutButtonStrategyResolveId\n    >();\n\n    for (const [, createCheckoutButtonStrategy] of Object.entries(\n        checkoutButtonStrategyFactories,\n    )) {\n        if (\n            !isResolvableModule<\n                CheckoutButtonStrategyFactory<CheckoutButtonStrategy>,\n                CheckoutButtonStrategyResolveId\n            >(createCheckoutButtonStrategy)\n        ) {\n            continue;\n        }\n\n        for (const resolverId of createCheckoutButtonStrategy.resolveIds) {\n            registry.register(resolverId, () =>\n                createCheckoutButtonStrategy(paymentIntegrationService),\n            );\n        }\n    }\n\n    return registry;\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/create-checkout-button-registry.spec.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { createCheckoutStore } from '../checkout';\nimport { Registry } from '../common/registry';\n\nimport createCheckoutButtonRegistry from './create-checkout-button-registry';\nimport { CheckoutButtonStrategy } from './strategies';\nimport { PaypalButtonStrategy } from './strategies/paypal';\n\ndescribe('createCheckoutButtonRegistry', () => {\n    let registry: Registry<CheckoutButtonStrategy>;\n\n    beforeEach(() => {\n        const store = createCheckoutStore();\n\n        registry = createCheckoutButtonRegistry(store, createRequestSender(), createFormPoster());\n    });\n\n    it('returns registry with PayPal Express registered', () => {\n        expect(registry.get('paypalexpress')).toEqual(expect.any(PaypalButtonStrategy));\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/create-checkout-button-registry.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { RequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { CheckoutActionCreator, CheckoutRequestSender, CheckoutStore } from '../checkout';\nimport { Registry } from '../common/registry';\nimport { ConfigActionCreator, ConfigRequestSender } from '../config';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../form';\nimport { PaypalScriptLoader } from '../payment/strategies/paypal';\n\nimport { CheckoutButtonMethodType, CheckoutButtonStrategy } from './strategies';\nimport { PaypalButtonStrategy } from './strategies/paypal';\n\nexport default function createCheckoutButtonRegistry(\n    store: CheckoutStore,\n    requestSender: RequestSender,\n    formPoster: FormPoster,\n    host?: string,\n): Registry<CheckoutButtonStrategy, CheckoutButtonMethodType> {\n    const registry = new Registry<CheckoutButtonStrategy, CheckoutButtonMethodType>();\n    const scriptLoader = getScriptLoader();\n    const checkoutRequestSender = new CheckoutRequestSender(requestSender);\n    const checkoutActionCreator = new CheckoutActionCreator(\n        checkoutRequestSender,\n        new ConfigActionCreator(new ConfigRequestSender(requestSender)),\n        new FormFieldsActionCreator(new FormFieldsRequestSender(requestSender)),\n    );\n\n    registry.register(\n        CheckoutButtonMethodType.PAYPALEXPRESS,\n        () =>\n            new PaypalButtonStrategy(\n                store,\n                checkoutActionCreator,\n                new PaypalScriptLoader(scriptLoader),\n                formPoster,\n                host,\n            ),\n    );\n\n    return registry;\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/create-checkout-button-selectors.ts",
    "content": "import { InternalCheckoutSelectors } from '../checkout';\n\nimport CheckoutButtonErrorSelector from './checkout-button-error-selector';\nimport CheckoutButtonSelectors from './checkout-button-selectors';\nimport CheckoutButtonStatusSelector from './checkout-button-status-selector';\n\nexport default function createCheckoutButtonSelectors(\n    selectors: InternalCheckoutSelectors,\n): CheckoutButtonSelectors {\n    const errors = new CheckoutButtonErrorSelector(selectors);\n    const statuses = new CheckoutButtonStatusSelector(selectors);\n\n    return {\n        errors,\n        statuses,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/index.ts",
    "content": "export { default as createCheckoutButtonInitializer } from './create-checkout-button-initializer';\nexport { default as checkoutButtonReducer } from './checkout-button-reducer';\nexport {\n    default as CheckoutButtonSelector,\n    CheckoutButtonSelectorFactory,\n    createCheckoutButtonSelectorFactory,\n} from './checkout-button-selector';\nexport { default as CheckoutButtonState } from './checkout-button-state';\nexport { CheckoutButtonStrategy, CheckoutButtonMethodType } from './strategies';\nexport {\n    BaseCheckoutButtonInitializeOptions,\n    CheckoutButtonOptions,\n    CheckoutButtonInitializeOptions,\n} from './checkout-button-options';\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/strategies/checkout-button-method-type.ts",
    "content": "export { default } from '../../generated/checkout-button-method-type';\n\nexport enum BaseCheckoutButtonMethodType {\n    AMAZON_PAY_V2 = 'amazonpay',\n    BRAINTREE_PAYPAL = 'braintreepaypal',\n    BRAINTREE_VENMO = 'braintreevenmo',\n    BRAINTREE_PAYPAL_CREDIT = 'braintreepaypalcredit',\n    GOOGLEPAY_ADYENV2 = 'googlepayadyenv2',\n    GOOGLEPAY_ADYENV3 = 'googlepayadyenv3',\n    GOOGLEPAY_AUTHORIZENET = 'googlepayauthorizenet',\n    GOOGLEPAY_BNZ = 'googlepaybnz',\n    GOOGLEPAY_BRAINTREE = 'googlepaybraintree',\n    GOOGLEPAY_CHECKOUTCOM = 'googlepaycheckoutcom',\n    GOOGLEPAY_CYBERSOURCEV2 = 'googlepaycybersourcev2',\n    GOOGLEPAY_ORBITAL = 'googlepayorbital',\n    GOOGLEPAY_STRIPE = 'googlepaystripe',\n    GOOGLEPAY_STRIPEUPE = 'googlepaystripeupe',\n    GOOGLEPAY_WORLDPAYACCESS = 'googlepayworldpayaccess',\n    PAYPALEXPRESS = 'paypalexpress',\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/strategies/checkout-button-strategy.ts",
    "content": "import { CheckoutButtonInitializeOptions } from '../checkout-button-options';\n\nexport default interface CheckoutButtonStrategy {\n    initialize(options: CheckoutButtonInitializeOptions): Promise<void>;\n\n    deinitialize(): Promise<void>;\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/strategies/index.ts",
    "content": "export { default as CheckoutButtonStrategy } from './checkout-button-strategy';\nexport { default as CheckoutButtonMethodType } from './checkout-button-method-type';\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/strategies/paypal/index.ts",
    "content": "export { PaypalButtonInitializeOptions } from './paypal-button-options';\nexport { default as PaypalButtonStrategy } from './paypal-button-strategy';\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/strategies/paypal/paypal-button-options.ts",
    "content": "import { StandardError } from '../../../common/error/errors';\nimport { PaypalStyleOptions } from '../../../payment/strategies/paypal';\n\nexport interface PaypalButtonInitializeOptions {\n    /**\n     * @internal\n     * This is an internal property and therefore subject to change. DO NOT USE.\n     */\n    shouldProcessPayment?: boolean;\n\n    /**\n     * The Client ID of the Paypal App\n     */\n    clientId: string;\n\n    /**\n     * Whether or not to show a credit button.\n     */\n    allowCredit?: boolean;\n\n    /**\n     * A set of styling options for the checkout button.\n     */\n    style?: Pick<\n        PaypalStyleOptions,\n        'layout' | 'size' | 'color' | 'label' | 'shape' | 'tagline' | 'fundingicons'\n    >;\n\n    /**\n     * A callback that gets called if unable to authorize and tokenize payment.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onAuthorizeError?(error: StandardError): void;\n\n    /**\n     * A callback that gets called if unable to submit payment.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onPaymentError?(error: StandardError): void;\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/strategies/paypal/paypal-button-strategy.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\nimport { EventEmitter } from 'events';\nimport { merge } from 'lodash';\nimport { from } from 'rxjs';\n\nimport {\n    CheckoutActionCreator,\n    CheckoutActionType,\n    CheckoutRequestSender,\n    CheckoutStore,\n    createCheckoutStore,\n} from '../../../checkout';\nimport { getCheckout, getCheckoutStoreState } from '../../../checkout/checkouts.mock';\nimport { InvalidArgumentError, MissingDataError } from '../../../common/error/errors';\nimport { ConfigActionCreator, ConfigRequestSender } from '../../../config';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../../../form';\nimport { getPaypalExpress } from '../../../payment/payment-methods.mock';\nimport {\n    PaypalActions,\n    PaypalButtonOptions,\n    PaypalButtonStyleColorOption,\n    PaypalButtonStyleShapeOption,\n    PaypalButtonStyleSizeOption,\n    PaypalScriptLoader,\n    PaypalSDK,\n} from '../../../payment/strategies/paypal';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonMethodType from '../checkout-button-method-type';\n\nimport { PaypalButtonInitializeOptions } from './paypal-button-options';\nimport PaypalButtonStrategy from './paypal-button-strategy';\nimport { getPaypalMock } from './paypal.mock';\n\ndescribe('PaypalButtonStrategy', () => {\n    let actionsMock: PaypalActions;\n    let checkoutActionCreator: CheckoutActionCreator;\n    let eventEmitter: EventEmitter;\n    let formPoster: FormPoster;\n    let options: CheckoutButtonInitializeOptions;\n    let paypalOptions: PaypalButtonInitializeOptions;\n    let paypal: PaypalSDK;\n    let paypalScriptLoader: PaypalScriptLoader;\n    let store: CheckoutStore;\n    let strategy: PaypalButtonStrategy;\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreState());\n        checkoutActionCreator = new CheckoutActionCreator(\n            new CheckoutRequestSender(createRequestSender()),\n            new ConfigActionCreator(new ConfigRequestSender(createRequestSender())),\n            new FormFieldsActionCreator(new FormFieldsRequestSender(createRequestSender())),\n        );\n        formPoster = createFormPoster();\n        paypalScriptLoader = new PaypalScriptLoader(getScriptLoader());\n\n        paypalOptions = {\n            shouldProcessPayment: false,\n            clientId: 'abc',\n            onAuthorizeError: jest.fn(),\n            onPaymentError: jest.fn(),\n        };\n\n        options = {\n            containerId: 'checkout-button',\n            methodId: CheckoutButtonMethodType.PAYPALEXPRESS,\n            paypal: paypalOptions,\n        };\n\n        eventEmitter = new EventEmitter();\n        paypal = getPaypalMock();\n\n        actionsMock = {\n            payment: {\n                get: jest.fn().mockReturnValue(\n                    Promise.resolve({\n                        payer: {\n                            payer_info: 'PAYER_INFO',\n                        },\n                    }),\n                ),\n            },\n            request: {\n                post: jest.fn().mockReturnValue(Promise.resolve()),\n            },\n        };\n\n        jest.spyOn(paypal.Button, 'render').mockImplementation((options: PaypalButtonOptions) => {\n            eventEmitter.on('payment', () => {\n                if (options.payment) {\n                    options\n                        .payment(\n                            {\n                                payerId: 'PAYER_ID',\n                                paymentID: 'PAYMENT_ID',\n                                payerID: 'PAYER_ID',\n                            },\n                            actionsMock,\n                        )\n                        .catch(() => {});\n                }\n            });\n\n            eventEmitter.on('authorize', () => {\n                if (options.onAuthorize) {\n                    options\n                        .onAuthorize(\n                            {\n                                payerId: 'PAYER_ID',\n                                paymentID: 'PAYMENT_ID',\n                                payerID: 'PAYER_ID',\n                            },\n                            actionsMock,\n                        )\n                        .catch(() => {});\n                }\n            });\n        });\n\n        jest.spyOn(checkoutActionCreator, 'loadDefaultCheckout').mockReturnValue(() =>\n            from([\n                createAction(CheckoutActionType.LoadCheckoutRequested),\n                createAction(CheckoutActionType.LoadCheckoutSucceeded, getCheckout()),\n            ]),\n        );\n\n        jest.spyOn(paypalScriptLoader, 'loadPaypal').mockReturnValue(Promise.resolve(paypal));\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation(() => {});\n\n        strategy = new PaypalButtonStrategy(\n            store,\n            checkoutActionCreator,\n            paypalScriptLoader,\n            formPoster,\n        );\n    });\n\n    it('throws error if paypal options is not loaded', async () => {\n        try {\n            store = createCheckoutStore();\n            strategy = new PaypalButtonStrategy(\n                store,\n                checkoutActionCreator,\n                paypalScriptLoader,\n                formPoster,\n            );\n\n            options = {\n                containerId: 'checkout-button',\n                methodId: CheckoutButtonMethodType.PAYPALEXPRESS,\n            };\n\n            await strategy.initialize(options);\n        } catch (error) {\n            expect(error).toBeInstanceOf(InvalidArgumentError);\n        }\n    });\n\n    it('throws error if payment method is not loaded', async () => {\n        try {\n            store = createCheckoutStore();\n            strategy = new PaypalButtonStrategy(\n                store,\n                checkoutActionCreator,\n                paypalScriptLoader,\n                formPoster,\n            );\n\n            options = {\n                containerId: 'checkout-button',\n                paypal: paypalOptions,\n            } as CheckoutButtonInitializeOptions;\n\n            await strategy.initialize(options);\n        } catch (error) {\n            expect(error).toBeInstanceOf(MissingDataError);\n        }\n    });\n\n    it('initializes Paypal and PayPal JS clients', async () => {\n        await strategy.initialize(options);\n\n        expect(paypalScriptLoader.loadPaypal).toHaveBeenCalled();\n    });\n\n    it('throws error if unable to initialize Paypal or PayPal JS client', async () => {\n        const expectedError = new Error('Unable to load JS client');\n\n        jest.spyOn(paypalScriptLoader, 'loadPaypal').mockReturnValue(Promise.reject(expectedError));\n\n        try {\n            await strategy.initialize(options);\n        } catch (error) {\n            expect(error).toEqual(expectedError);\n        }\n    });\n\n    it('renders PayPal checkout button', async () => {\n        await strategy.initialize(options);\n\n        expect(paypal.Button.render).toHaveBeenCalledWith(\n            {\n                env: 'production',\n                client: {\n                    production: 'abc',\n                },\n                commit: false,\n                onAuthorize: expect.any(Function),\n                payment: expect.any(Function),\n                style: {\n                    shape: 'rect',\n                },\n                funding: {\n                    allowed: [],\n                    disallowed: [paypal.FUNDING.CREDIT],\n                },\n            },\n            'checkout-button',\n        );\n    });\n\n    it('customizes style of PayPal checkout button', async () => {\n        options = {\n            ...options,\n            paypal: {\n                ...paypalOptions,\n                style: {\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    shape: PaypalButtonStyleShapeOption.PILL,\n                    size: PaypalButtonStyleSizeOption.RESPONSIVE,\n                },\n            },\n        };\n\n        await strategy.initialize(options);\n\n        expect(paypal.Button.render).toHaveBeenCalledWith(\n            expect.objectContaining({\n                style: {\n                    color: 'blue',\n                    shape: 'pill',\n                    size: 'responsive',\n                },\n            }),\n            'checkout-button',\n        );\n    });\n\n    it('throws error if unable to render PayPal button', async () => {\n        const expectedError = new Error('Unable to render PayPal button');\n\n        jest.spyOn(paypal.Button, 'render').mockImplementation(() => {\n            throw expectedError;\n        });\n\n        try {\n            await strategy.initialize(options);\n        } catch (error) {\n            expect(error).toEqual(expectedError);\n        }\n    });\n\n    it('renders PayPal checkout button in sandbox environment if payment method is in test mode', async () => {\n        store = createCheckoutStore(\n            merge({}, getCheckoutStoreState(), {\n                paymentMethods: {\n                    data: [merge({}, getPaypalExpress(), { config: { testMode: true } })],\n                },\n            }),\n        );\n\n        strategy = new PaypalButtonStrategy(\n            store,\n            checkoutActionCreator,\n            paypalScriptLoader,\n            formPoster,\n        );\n\n        await strategy.initialize(options);\n\n        expect(paypal.Button.render).toHaveBeenCalledWith(\n            expect.objectContaining({ env: 'sandbox' }),\n            'checkout-button',\n        );\n    });\n\n    it('posts payment details to server to set checkout data when PayPal payment details are tokenized', async () => {\n        await strategy.initialize(options);\n\n        eventEmitter.emit('authorize');\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(formPoster.postForm).toHaveBeenCalledWith(\n            '/checkout.php',\n            expect.objectContaining({\n                payment_type: 'paypal',\n                provider: 'paypalexpress',\n                action: 'set_external_checkout',\n                paymentId: 'PAYMENT_ID',\n                payerId: 'PAYER_ID',\n                payerInfo: JSON.stringify('PAYER_INFO'),\n            }),\n        );\n    });\n\n    describe('if PayPal Credit is offered', () => {\n        beforeEach(() => {\n            options = {\n                ...options,\n                paypal: {\n                    ...paypalOptions,\n                    allowCredit: true,\n                },\n            };\n        });\n\n        it('renders PayPal Credit checkout button', async () => {\n            await strategy.initialize(options);\n\n            expect(paypal.Button.render).toHaveBeenCalledWith(\n                {\n                    client: {\n                        production: 'abc',\n                    },\n                    commit: false,\n                    env: 'production',\n                    onAuthorize: expect.any(Function),\n                    payment: expect.any(Function),\n                    style: {\n                        shape: 'rect',\n                    },\n                    funding: {\n                        allowed: [paypal.FUNDING.CREDIT],\n                        disallowed: [],\n                    },\n                },\n                'checkout-button',\n            );\n        });\n    });\n\n    it('sends create payment requests to the relative url by default', async () => {\n        await strategy.initialize(options);\n\n        eventEmitter.emit('payment');\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        const expectedBody = {\n            cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n            merchantId: 'h3hxn44tdd8wxkzd',\n        };\n\n        expect(actionsMock.request.post).toHaveBeenCalledWith(\n            '/api/storefront/payment/paypalexpress',\n            expectedBody,\n            expect.any(Object),\n        );\n    });\n\n    describe('with a supplied host', () => {\n        beforeEach(() => {\n            strategy = new PaypalButtonStrategy(\n                store,\n                checkoutActionCreator,\n                paypalScriptLoader,\n                formPoster,\n                'https://example.com',\n            );\n        });\n\n        it('sends create payment requests to the supplied host', async () => {\n            await strategy.initialize(options);\n\n            eventEmitter.emit('payment');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            const expectedBody = {\n                cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                merchantId: 'h3hxn44tdd8wxkzd',\n            };\n\n            expect(actionsMock.request.post).toHaveBeenCalledWith(\n                'https://example.com/api/storefront/payment/paypalexpress',\n                expectedBody,\n                expect.any(Object),\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/strategies/paypal/paypal-button-strategy.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { pick } from 'lodash';\n\nimport { CheckoutActionCreator, CheckoutStore } from '../../../checkout';\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    StandardError,\n} from '../../../common/error/errors';\nimport { INTERNAL_USE_ONLY, SDK_VERSION_HEADERS } from '../../../common/http-request';\nimport { PaymentMethod } from '../../../payment';\nimport {\n    PaypalActions,\n    PaypalAuthorizeData,\n    PaypalButtonStyleShapeOption,\n    PaypalButtonStyleSizeOption,\n    PaypalClientToken,\n    PaypalScriptLoader,\n} from '../../../payment/strategies/paypal';\nimport { CheckoutButtonInitializeOptions } from '../../checkout-button-options';\nimport CheckoutButtonStrategy from '../checkout-button-strategy';\n\nexport default class PaypalButtonStrategy implements CheckoutButtonStrategy {\n    private _paymentMethod?: PaymentMethod;\n\n    constructor(\n        private _store: CheckoutStore,\n        private _checkoutActionCreator: CheckoutActionCreator,\n        private _paypalScriptLoader: PaypalScriptLoader,\n        private _formPoster: FormPoster,\n        private _host = '',\n    ) {}\n\n    initialize(options: CheckoutButtonInitializeOptions): Promise<void> {\n        const paypalOptions = options.paypal;\n        const state = this._store.getState();\n        const paymentMethod = (this._paymentMethod = state.paymentMethods.getPaymentMethod(\n            options.methodId,\n        ));\n\n        if (!paypalOptions) {\n            throw new InvalidArgumentError();\n        }\n\n        if (!paymentMethod) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        return this._paypalScriptLoader\n            .loadPaypal(paymentMethod.config.merchantId)\n            .then((paypal) => {\n                if (!paymentMethod || !paymentMethod.config.merchantId) {\n                    throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n                }\n\n                const merchantId = paymentMethod.config.merchantId;\n                const env = paymentMethod.config.testMode ? 'sandbox' : 'production';\n                const clientToken: PaypalClientToken = { [env]: paypalOptions.clientId };\n\n                const fundingCreditOption = paypal.FUNDING.CREDIT || 'credit';\n                const allowedSources = paypalOptions.allowCredit ? [fundingCreditOption] : [];\n                const disallowedSources = !paypalOptions.allowCredit ? [fundingCreditOption] : [];\n\n                return paypal.Button.render(\n                    {\n                        env,\n                        client: clientToken,\n                        commit: paypalOptions.shouldProcessPayment,\n                        funding: {\n                            allowed: allowedSources,\n                            disallowed: disallowedSources,\n                        },\n                        style: {\n                            shape: PaypalButtonStyleShapeOption.RECT,\n                            ...pick(\n                                paypalOptions.style,\n                                'layout',\n                                'color',\n                                'label',\n                                'shape',\n                                'tagline',\n                                'fundingicons',\n                            ),\n                            size:\n                                paymentMethod.id === 'paypalexpress' &&\n                                paypalOptions.style?.size === 'small'\n                                    ? PaypalButtonStyleSizeOption.RESPONSIVE\n                                    : paypalOptions.style?.size,\n                        },\n                        payment: (_, actions) =>\n                            this._setupPayment(merchantId, actions, paypalOptions.onPaymentError),\n                        onAuthorize: (data, actions) =>\n                            this._tokenizePayment(\n                                data,\n                                actions,\n                                paypalOptions.shouldProcessPayment,\n                                paypalOptions.onAuthorizeError,\n                            ),\n                    },\n                    options.containerId,\n                );\n            });\n    }\n\n    deinitialize(): Promise<void> {\n        this._paymentMethod = undefined;\n\n        return Promise.resolve();\n    }\n\n    private _setupPayment(\n        merchantId: string,\n        actions?: PaypalActions,\n        onError?: (error: StandardError) => void,\n    ): Promise<string> {\n        if (!actions) {\n            throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n        }\n\n        return this._store\n            .dispatch(this._checkoutActionCreator.loadDefaultCheckout())\n            .then((state) => {\n                const cart = state.cart.getCart();\n                const cartId = cart ? cart.id : '';\n\n                return actions.request.post(\n                    `${this._host}/api/storefront/payment/paypalexpress`,\n                    { merchantId, cartId },\n                    {\n                        headers: {\n                            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                            ...SDK_VERSION_HEADERS,\n                        },\n                    },\n                );\n            })\n            .then((res) => res.id)\n            .catch((error) => {\n                if (onError) {\n                    onError(error);\n                }\n\n                throw error;\n            });\n    }\n\n    private _tokenizePayment(\n        data: PaypalAuthorizeData,\n        actions?: PaypalActions,\n        shouldProcessPayment?: boolean,\n        _onError?: (error: StandardError) => void, // FIXME: This parameter seems to be unused\n    ): Promise<void> {\n        if (!this._paymentMethod) {\n            throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n        }\n\n        if (!actions) {\n            throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n        }\n\n        if (!data.paymentID || !data.payerID) {\n            throw new MissingDataError(MissingDataErrorType.MissingPayment);\n        }\n\n        const methodId = this._paymentMethod.id;\n\n        return actions.payment.get(data.paymentID).then((payload) => {\n            this._formPoster.postForm('/checkout.php', {\n                payment_type: 'paypal',\n                provider: methodId,\n                action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n                paymentId: data.paymentID,\n                payerId: data.payerID,\n                payerInfo: JSON.stringify(payload.payer.payer_info),\n            });\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/checkout-buttons/strategies/paypal/paypal.mock.ts",
    "content": "import { PaypalSDK } from '../../../payment/strategies/paypal';\n\nexport function getPaypalMock(): PaypalSDK {\n    return {\n        FUNDING: {\n            CARD: 'card',\n            CREDIT: 'credit',\n            PAYPAL: 'paypal',\n            PAYLATER: 'paylater',\n        },\n        Button: {\n            render: jest.fn(),\n        },\n        checkout: {\n            initXO: jest.fn(),\n            startFlow: jest.fn(),\n            closeFlow: jest.fn(),\n            setup: jest.fn(),\n        },\n        Buttons: jest.fn(),\n        Messages: jest.fn(),\n    };\n}\n"
  },
  {
    "path": "packages/core/src/common/browser-info/browser-info.ts",
    "content": "export default interface BrowserInfo {\n    color_depth: number;\n    java_enabled: boolean;\n    language: string;\n    screen_height: number;\n    screen_width: number;\n    time_zone_offset: string;\n}\n"
  },
  {
    "path": "packages/core/src/common/browser-info/get-browser-info.spec.ts",
    "content": "import getBrowserInfo from './get-browser-info';\n\ndescribe('getBrowserInfo()', () => {\n    it('retrieves browser info', () => {\n        expect(getBrowserInfo()).toEqual(\n            expect.objectContaining({\n                color_depth: expect.any(Number),\n                java_enabled: expect.any(Boolean),\n                language: expect.any(String),\n                screen_height: expect.any(Number),\n                screen_width: expect.any(Number),\n                time_zone_offset: expect.any(String),\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/browser-info/get-browser-info.ts",
    "content": "import BrowserInfo from './browser-info';\n\nexport default function getBrowserInfo(): BrowserInfo {\n    return {\n        color_depth: screen.colorDepth || 24,\n        java_enabled: typeof navigator.javaEnabled === 'function' ? navigator.javaEnabled() : false,\n        language: navigator.language || (navigator as any).userLanguage,\n        screen_height: screen.height,\n        screen_width: screen.width,\n        time_zone_offset: new Date().getTimezoneOffset().toString(),\n    };\n}\n"
  },
  {
    "path": "packages/core/src/common/browser-info/index.ts",
    "content": "export { default as BrowserInfo } from './browser-info';\nexport { default as getBrowserInfo } from './get-browser-info';\n"
  },
  {
    "path": "packages/core/src/common/data-store/action-options.ts",
    "content": "export default interface ActionOptions {\n    useCache?: boolean;\n    cacheInterval?: number;\n}\n"
  },
  {
    "path": "packages/core/src/common/data-store/cachable-action-decorator.spec.ts",
    "content": "import { Action, createAction } from '@bigcommerce/data-store';\nimport { concat, from, Observable } from 'rxjs';\nimport { map, toArray } from 'rxjs/operators';\n\nimport ActionOptions from './action-options';\nimport { default as cachableAction } from './cachable-action-decorator';\n\ndescribe('cachableActionDecorator()', () => {\n    class Foo {\n        constructor(private _fetch: (name: string) => Promise<string>) {}\n\n        @cachableAction\n        loadMessage(name: string, _options?: ActionOptions): Observable<Action> {\n            return from(this._fetch(name)).pipe(\n                map((response) => createAction('GET_MESSAGE', response)),\n            );\n        }\n\n        @cachableAction\n        loadUppercaseMessage(name: string, _options?: ActionOptions): Observable<Action> {\n            return from(this._fetch(name)).pipe(\n                map((response) => createAction('GET_UPPERCASE_MESSAGE', response.toUpperCase())),\n            );\n        }\n    }\n\n    let fetch: (name: string) => Promise<string>;\n    let foo: Foo;\n\n    beforeEach(() => {\n        fetch = jest.fn((name) => Promise.resolve(`Hello ${name}`));\n        foo = new Foo(fetch);\n    });\n\n    it('returns cached action if `useCache` option is true', async () => {\n        const actions = await concat(\n            foo.loadMessage('Foo', { useCache: true }),\n            foo.loadMessage('Foo', { useCache: true }),\n        )\n            .pipe(toArray())\n            .toPromise();\n\n        expect(fetch).toHaveBeenCalledTimes(1);\n        expect(actions).toEqual([\n            createAction('GET_MESSAGE', 'Hello Foo'),\n            createAction('GET_MESSAGE', 'Hello Foo'),\n        ]);\n    });\n\n    it('returns cached action based on parameters', async () => {\n        const actions = await concat(\n            foo.loadMessage('Foo', { useCache: true }),\n            foo.loadMessage('Bar', { useCache: true }),\n            foo.loadMessage('Foo', { useCache: true }),\n            foo.loadMessage('Bar', { useCache: true }),\n        )\n            .pipe(toArray())\n            .toPromise();\n\n        expect(fetch).toHaveBeenCalledTimes(2);\n        expect(actions).toEqual([\n            createAction('GET_MESSAGE', 'Hello Foo'),\n            createAction('GET_MESSAGE', 'Hello Bar'),\n            createAction('GET_MESSAGE', 'Hello Foo'),\n            createAction('GET_MESSAGE', 'Hello Bar'),\n        ]);\n    });\n\n    it('can augment multiple methods of class', async () => {\n        const actions = await concat(\n            foo.loadMessage('Foo', { useCache: true }),\n            foo.loadMessage('Foo', { useCache: true }),\n            foo.loadUppercaseMessage('Foo', { useCache: true }),\n            foo.loadUppercaseMessage('Foo', { useCache: true }),\n        )\n            .pipe(toArray())\n            .toPromise();\n\n        expect(fetch).toHaveBeenCalledTimes(2);\n        expect(actions).toEqual([\n            createAction('GET_MESSAGE', 'Hello Foo'),\n            createAction('GET_MESSAGE', 'Hello Foo'),\n            createAction('GET_UPPERCASE_MESSAGE', 'HELLO FOO'),\n            createAction('GET_UPPERCASE_MESSAGE', 'HELLO FOO'),\n        ]);\n    });\n\n    it('returns non-cached action if `useCache` option is omitted or false', async () => {\n        const actions = await concat(foo.loadMessage('Foo'), foo.loadMessage('Foo'))\n            .pipe(toArray())\n            .toPromise();\n\n        expect(fetch).toHaveBeenCalledTimes(2);\n        expect(actions).toEqual([\n            createAction('GET_MESSAGE', 'Hello Foo'),\n            createAction('GET_MESSAGE', 'Hello Foo'),\n        ]);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/data-store/cachable-action-decorator.ts",
    "content": "import cacheAction from './cache-action';\nimport isActionOptions from './is-action-options';\n\nexport default function cachableActionDecorator<TMethod extends (...args: any[]) => any>(\n    _: object,\n    key: string,\n    descriptor: TypedPropertyDescriptor<TMethod>,\n): TypedPropertyDescriptor<TMethod> {\n    const memoizedMethods = new WeakMap<object, { [key: string]: TMethod }>();\n\n    function decorateMethod(this: object, method: TMethod): TMethod {\n        return ((...args: any[]) => {\n            const lastArg = args[args.length - 1];\n            const { useCache } = isActionOptions(lastArg) ? lastArg : { useCache: false };\n\n            if (!useCache) {\n                return method.call(this, ...args);\n            }\n\n            const instanceMethods = memoizedMethods.get(this) || {};\n\n            if (!memoizedMethods.get(this)) {\n                memoizedMethods.set(this, instanceMethods);\n            }\n\n            if (!instanceMethods[key]) {\n                instanceMethods[key] = cacheAction(method);\n            }\n\n            return instanceMethods[key].call(this, ...args);\n        }) as TMethod;\n    }\n\n    return {\n        get() {\n            if (typeof descriptor.value !== 'function') {\n                throw new Error('Decorator should be used in functions');\n            }\n\n            const value = decorateMethod.call(this, descriptor.value);\n\n            Object.defineProperty(this, key, { ...descriptor, value });\n\n            return value;\n        },\n    };\n}\n"
  },
  {
    "path": "packages/core/src/common/data-store/cache-action.spec.ts",
    "content": "import { Action, createAction, createDataStore } from '@bigcommerce/data-store';\nimport { defer } from 'rxjs';\n\nimport cacheAction from './cache-action';\n\ndescribe('cacheAction()', () => {\n    it('returns observable action that emits cached value', async () => {\n        const getMessage = jest.fn(() =>\n            Promise.resolve(createAction('GET_MESSAGE', 'Hello world')),\n        );\n        const subscriber = jest.fn();\n        const createCachedAction = cacheAction(() => defer(() => getMessage() as Promise<Action>));\n\n        createCachedAction().subscribe(subscriber);\n        createCachedAction().subscribe(subscriber);\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(subscriber).toHaveBeenCalledWith(createAction('GET_MESSAGE', 'Hello world'));\n        expect(subscriber).toHaveBeenCalledTimes(2);\n        expect(getMessage).toHaveBeenCalledTimes(1);\n    });\n\n    it('caches emitted values from observable action based on parameters', async () => {\n        const getMessage = jest.fn((name) =>\n            Promise.resolve(createAction('GET_MESSAGE', `Hello ${name}`)),\n        );\n        const subscriber = jest.fn();\n        const createCachedAction = cacheAction((name, _) =>\n            defer(() => getMessage(name) as Promise<Action>),\n        );\n\n        createCachedAction('Foo', { params: { abc: 'abc' } }).subscribe(subscriber);\n        createCachedAction('Foo', { params: { abc: 'abc' } }).subscribe(subscriber);\n        createCachedAction('Bar', { params: { abc: 'efg' } }).subscribe(subscriber);\n        createCachedAction('Bar', { params: { abc: 'efg' } }).subscribe(subscriber);\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(subscriber).toHaveBeenCalledWith(createAction('GET_MESSAGE', 'Hello Foo'));\n        expect(subscriber).toHaveBeenCalledWith(createAction('GET_MESSAGE', 'Hello Bar'));\n        expect(subscriber).toHaveBeenCalledTimes(4);\n        expect(getMessage).toHaveBeenCalledWith('Foo');\n        expect(getMessage).toHaveBeenCalledWith('Bar');\n        expect(getMessage).toHaveBeenCalledTimes(2);\n    });\n\n    it('returns thunk action that emits cached value', async () => {\n        const getMessage = jest.fn(() =>\n            Promise.resolve(createAction('GET_MESSAGE', 'Hello world')),\n        );\n        const subscriber = jest.fn();\n        const createCachedAction = cacheAction(\n            () => (_) => defer(() => getMessage() as Promise<Action>),\n        );\n        const store = createDataStore((state) => state);\n\n        createCachedAction()(store).subscribe(subscriber);\n        createCachedAction()(store).subscribe(subscriber);\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(subscriber).toHaveBeenCalledWith(createAction('GET_MESSAGE', 'Hello world'));\n        expect(subscriber).toHaveBeenCalledTimes(2);\n        expect(getMessage).toHaveBeenCalledTimes(1);\n    });\n\n    it('caches emitted values from thunk action based on parameters', async () => {\n        const getMessage = jest.fn((name) =>\n            Promise.resolve(createAction('GET_MESSAGE', `Hello ${name}`)),\n        );\n        const subscriber = jest.fn();\n        const createCachedAction = cacheAction(\n            (name) => (_) => defer(() => getMessage(name) as Promise<Action>),\n        );\n        const store = createDataStore((state) => state);\n\n        createCachedAction('Foo')(store).subscribe(subscriber);\n        createCachedAction('Foo')(store).subscribe(subscriber);\n        createCachedAction('Bar')(store).subscribe(subscriber);\n        createCachedAction('Bar')(store).subscribe(subscriber);\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(subscriber).toHaveBeenCalledWith(createAction('GET_MESSAGE', 'Hello Foo'));\n        expect(subscriber).toHaveBeenCalledWith(createAction('GET_MESSAGE', 'Hello Bar'));\n        expect(subscriber).toHaveBeenCalledTimes(4);\n        expect(getMessage).toHaveBeenCalledWith('Foo');\n        expect(getMessage).toHaveBeenCalledWith('Bar');\n        expect(getMessage).toHaveBeenCalledTimes(2);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/data-store/cache-action.ts",
    "content": "import { Action, ThunkAction } from '@bigcommerce/data-store';\nimport { memoize } from '@bigcommerce/memoize';\nimport { isEqual } from 'lodash';\nimport { from, Observable } from 'rxjs';\nimport { shareReplay } from 'rxjs/operators';\n\nexport default function cacheAction<TFunction extends CreateActionFn>(fn: TFunction): TFunction {\n    function decoratedFn(this: any, ...args: any[]) {\n        const action = fn.call(this, ...args);\n\n        if (action instanceof Observable) {\n            return from(action).pipe(shareReplay());\n        }\n\n        if (typeof action === 'function') {\n            return memoize((store) => from(action(store)).pipe(shareReplay()), { isEqual });\n        }\n\n        return action;\n    }\n\n    return memoize(decoratedFn as TFunction, { isEqual });\n}\n\ntype CreateActionFn = (...args: any[]) => Observable<Action> | ThunkAction<Action> | Action;\n"
  },
  {
    "path": "packages/core/src/common/data-store/create-data-store-projection.spec.ts",
    "content": "import { Action, createDataStore, DataStore, Reducer } from '@bigcommerce/data-store';\n\nimport createDataStoreProjection from './create-data-store-projection';\n\ninterface TestState {\n    count?: number;\n    message: string;\n}\n\ninterface TransformedTestState {\n    count?: number;\n    transformedMessage: string;\n}\n\ndescribe('DataStoreProjection', () => {\n    let store: DataStore<TestState>;\n    let transformer: (state: TestState) => TransformedTestState;\n\n    beforeEach(() => {\n        const initialState: TestState = {\n            message: 'foobar',\n        };\n\n        const reducer: Reducer<TestState, Action> = (state = initialState, action) => {\n            switch (action.type) {\n                case 'MESSAGE':\n                    return { ...state, message: action.payload };\n\n                case 'COUNT':\n                    return { ...state, count: action.payload };\n\n                default:\n                    return state;\n            }\n        };\n\n        store = createDataStore(reducer, initialState);\n\n        transformer = (state: TestState) => {\n            return {\n                count: state.count,\n                transformedMessage: `${state.message}!`,\n            };\n        };\n    });\n\n    it('projects state of data store to into different shape', () => {\n        const projection = createDataStoreProjection(store, transformer);\n\n        expect(projection.getState()).toEqual({\n            transformedMessage: 'foobar!',\n        });\n    });\n\n    it('passes projected data to subscriber', () => {\n        const projection = createDataStoreProjection(store, transformer);\n        const subscriber = jest.fn();\n\n        projection.subscribe(subscriber);\n        subscriber.mockReset();\n        store.dispatch({ type: 'MESSAGE', payload: 'new message' });\n\n        expect(subscriber).toHaveBeenCalledWith({ transformedMessage: 'new message!' });\n        expect(subscriber).toHaveBeenCalledTimes(1);\n    });\n\n    it('triggers subscriber if projected data matches filter', () => {\n        const projection = createDataStoreProjection(store, transformer);\n        const subscriber = jest.fn();\n        const filter = jest.fn((state) => state.transformedMessage);\n\n        projection.subscribe(subscriber, filter);\n        subscriber.mockReset();\n        store.dispatch({ type: 'COUNT', payload: 10 });\n\n        expect(subscriber).not.toHaveBeenCalled();\n\n        store.dispatch({ type: 'MESSAGE', payload: 'new message' });\n\n        expect(subscriber).toHaveBeenCalledTimes(1);\n    });\n\n    it('can be unsubscribed', () => {\n        const projection = createDataStoreProjection(store, transformer);\n        const subscriber = jest.fn();\n        const unsubscribe = projection.subscribe(subscriber);\n\n        subscriber.mockReset();\n        unsubscribe();\n        store.dispatch({ type: 'MESSAGE', payload: 'new message' });\n\n        expect(subscriber).toHaveBeenCalledTimes(0);\n    });\n\n    it('can directly trigger subscriber without changing state', () => {\n        const projection = createDataStoreProjection(store, transformer);\n        const subscriber = jest.fn();\n\n        projection.subscribe(subscriber);\n        subscriber.mockReset();\n        projection.notifyState();\n\n        expect(subscriber).toHaveBeenCalledTimes(1);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/data-store/create-data-store-projection.ts",
    "content": "import { Action, createAction, createDataStore, ReadableDataStore } from '@bigcommerce/data-store';\n\nenum ProjectionActionType {\n    Synchronize = 'SYNCHRONIZE',\n}\n\ninterface SynchronizeAction<TState> extends Action<TState> {\n    type: ProjectionActionType.Synchronize;\n    payload: TState;\n}\n\nexport interface DataStoreProjection<TTransformedState>\n    extends ReadableDataStore<TTransformedState> {\n    notifyState(): void;\n}\n\nexport default function createDataStoreProjection<TState, TTransformedState = TState>(\n    store: ReadableDataStore<TState>,\n    stateTransformer: (state: TState) => TTransformedState,\n): DataStoreProjection<TTransformedState> {\n    const projection = createDataStore<\n        TState | undefined,\n        SynchronizeAction<TState>,\n        TTransformedState\n    >(\n        (state, action) =>\n            action.type === ProjectionActionType.Synchronize ? action.payload : state,\n        store.getState(),\n        { stateTransformer },\n    );\n\n    store.subscribe(\n        (state) => {\n            projection.dispatch(\n                createAction(ProjectionActionType.Synchronize, state) as SynchronizeAction<TState>,\n            );\n        },\n        { initial: false },\n    );\n\n    return projection;\n}\n"
  },
  {
    "path": "packages/core/src/common/data-store/index.ts",
    "content": "export { default as ActionOptions } from './action-options';\nexport {\n    default as createDataStoreProjection,\n    DataStoreProjection,\n} from './create-data-store-projection';\nexport { default as cachableAction } from './cachable-action-decorator';\nexport { default as cachableActionDecorator } from './cachable-action-decorator';\nexport { default as cacheAction } from './cache-action';\n"
  },
  {
    "path": "packages/core/src/common/data-store/is-action-options.ts",
    "content": "import ActionOptions from './action-options';\n\nexport default function isActionOptions(param: any): param is ActionOptions {\n    return param && typeof param.useCache === 'boolean';\n}\n"
  },
  {
    "path": "packages/core/src/common/date-time/add-minutes.spec.ts",
    "content": "import addMinutes from './add-minutes';\n\ndescribe('addMinutes()', () => {\n    it('adds minutes to the supplied time', () => {\n        const date = new Date();\n\n        expect(addMinutes(date, 5).getTime() - date.getTime()).toEqual(5 * 60 * 1000);\n        expect(addMinutes(date, 100).getTime() - date.getTime()).toEqual(100 * 60 * 1000);\n    });\n\n    it('adds negative minutes to the supplied time', () => {\n        const date = new Date();\n\n        expect(addMinutes(date, -5).getTime() - date.getTime()).toEqual(-5 * 60 * 1000);\n        expect(addMinutes(date, -100).getTime() - date.getTime()).toEqual(-100 * 60 * 1000);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/date-time/add-minutes.ts",
    "content": "export default function addMinutes(date: Date, amount: number): Date {\n    const newDate = new Date(date.getTime());\n\n    newDate.setMinutes(date.getMinutes() + amount);\n\n    return newDate;\n}\n"
  },
  {
    "path": "packages/core/src/common/date-time/index.ts",
    "content": "export { default as addMinutes } from './add-minutes';\nexport { default as isFuture } from './is-future';\n"
  },
  {
    "path": "packages/core/src/common/date-time/is-future.spec.ts",
    "content": "import isFuture from './is-future';\n\ndescribe('isFuture()', () => {\n    it('detects that the supplied time is in the future', () => {\n        const futureDate = new Date();\n\n        futureDate.setMinutes(futureDate.getMinutes() + 5);\n\n        expect(isFuture(futureDate)).toBe(true);\n    });\n\n    it('detects that the supplied time is in the past', () => {\n        const futureDate = new Date();\n\n        futureDate.setMinutes(futureDate.getMinutes() - 5);\n\n        expect(isFuture(futureDate)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/date-time/is-future.ts",
    "content": "export default function isFuture(date: Date): boolean {\n    return date.valueOf() > Date.now();\n}\n"
  },
  {
    "path": "packages/core/src/common/dom/detachment-observer.spec.ts",
    "content": "import { EventEmitter } from 'events';\nimport { noop } from 'lodash';\n\nimport DetachmentObserver from './detachment-observer';\nimport { UnexpectedDetachmentError } from './errors';\nimport { MutationObserverFactory } from './mutation-observer';\n\ndescribe('DetachmentObserver', () => {\n    let mutationEventEmitter: EventEmitter;\n    let mutationObserver: Pick<MutationObserver, 'disconnect' | 'observe'>;\n    let mutationObserverFactory: Pick<MutationObserverFactory, 'create'>;\n    let subject: DetachmentObserver;\n\n    beforeEach(() => {\n        mutationEventEmitter = new EventEmitter();\n\n        mutationObserver = {\n            observe: jest.fn(),\n            disconnect: jest.fn(),\n        };\n\n        mutationObserverFactory = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            create: jest.fn((callback) => {\n                mutationEventEmitter.on('remove', callback);\n\n                return mutationObserver;\n            }),\n        };\n\n        subject = new DetachmentObserver(mutationObserverFactory as MutationObserverFactory);\n    });\n\n    it('throws error and stops observing if targetted element is removed before promise is resolved', async () => {\n        const element = document.createElement('div');\n        const promise = new Promise(noop);\n        const output = subject.ensurePresence([element], promise);\n\n        mutationEventEmitter.emit('remove', [{ removedNodes: [element] }]);\n\n        try {\n            await output;\n        } catch (error) {\n            expect(error).toEqual(expect.any(UnexpectedDetachmentError));\n\n            expect(mutationObserver.disconnect).toHaveBeenCalled();\n        }\n    });\n\n    it('returns promised value and stops observing if targetted element is not removed before promise is resolved', async () => {\n        const eventEmitter = new EventEmitter();\n        const element = document.createElement('div');\n        const promise = new Promise((resolve) => eventEmitter.on('resolve', resolve));\n        const output = subject.ensurePresence([element], promise);\n\n        eventEmitter.emit('resolve', 'foobar');\n\n        expect(await output).toBe('foobar');\n\n        expect(mutationObserver.disconnect).toHaveBeenCalled();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/dom/detachment-observer.ts",
    "content": "import { CancellablePromise } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { UnexpectedDetachmentError } from './errors';\nimport { MutationObserverFactory } from './mutation-observer';\n\nexport default class DetachmentObserver {\n    constructor(private _mutationObserver: MutationObserverFactory) {}\n\n    async ensurePresence<T>(targets: Node[], promise: Promise<T>): Promise<T> {\n        const cancellable = new CancellablePromise(promise);\n\n        const observer = this._mutationObserver.create((mutationsList) => {\n            mutationsList.forEach((mutation) => {\n                const removedTargets = Array.from(mutation.removedNodes).filter((node) =>\n                    targets.some((target) => node === target || node.contains(target)),\n                );\n\n                if (removedTargets.length === 0) {\n                    return;\n                }\n\n                cancellable.cancel(new UnexpectedDetachmentError());\n            });\n        });\n\n        observer.observe(document.body, { childList: true, subtree: true });\n\n        try {\n            const output = await cancellable.promise;\n\n            observer.disconnect();\n\n            return output;\n        } catch (error) {\n            observer.disconnect();\n\n            throw error;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/dom/errors/index.ts",
    "content": "export { default as UnexpectedDetachmentError } from './unexpected-detachment-error';\n"
  },
  {
    "path": "packages/core/src/common/dom/errors/unexpected-detachment-error.ts",
    "content": "import { StandardError } from '../../error/errors';\n\nexport default class UnexpectedDetachmentError extends StandardError {\n    constructor(message?: string) {\n        super(\n            message ||\n                'Unable to proceed because the required element is unexpectedly detached from the page.',\n        );\n\n        this.name = 'UnexpectedDetachmentError';\n        this.type = 'unexpected_detachment';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/dom/index.ts",
    "content": "export * from './mutation-observer';\n\nexport { default as isElementId } from './is-element-id';\nexport { default as setUniqueElementId } from './set-unique-element-id';\nexport { default as DetachmentObserver } from './detachment-observer';\n"
  },
  {
    "path": "packages/core/src/common/dom/is-element-id.spec.ts",
    "content": "import isElementId from './is-element-id';\n\ndescribe('isElementId()', () => {\n    it('returns true if string is valid element ID', () => {\n        expect(isElementId('foobar')).toBe(true);\n\n        expect(isElementId('FOOBAR')).toBe(true);\n\n        expect(isElementId('foo-bar')).toBe(true);\n    });\n\n    it('returns false if string is not valid element ID', () => {\n        expect(isElementId('.foobar')).toBe(false);\n\n        expect(isElementId('[foobar]')).toBe(false);\n\n        expect(isElementId('#foobar')).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/dom/is-element-id.ts",
    "content": "/* eslint-disable no-useless-escape */\nexport default function isElementId(id: string): boolean {\n    return /^\\w[\\w\\-\\:\\.]*$/.test(id);\n}\n"
  },
  {
    "path": "packages/core/src/common/dom/mutation-observer.ts",
    "content": "export interface MutationObeserverCreator {\n    prototype: MutationObserver;\n    new (callback: MutationCallback): MutationObserver;\n}\n\nexport interface MutationObserverWindow extends Window {\n    MutationObserver: MutationObeserverCreator;\n}\n\nexport class MutationObserverFactory {\n    constructor(private _window: MutationObserverWindow = window as MutationObserverWindow) {}\n\n    create(callback: MutationCallback): MutationObserver {\n        return new this._window.MutationObserver(callback);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/dom/set-unique-element-id.spec.ts",
    "content": "import { uniq } from 'lodash';\n\nimport setUniqueElementId from './set-unique-element-id';\n\ndescribe('setUniqueElementId()', () => {\n    let className: string;\n    let elements: HTMLElement[];\n\n    beforeEach(() => {\n        className = 'foobar';\n        elements = [];\n\n        const element = document.createElement('div');\n\n        element.className = className;\n\n        elements.push(element);\n        elements.push(element.cloneNode() as HTMLElement);\n        elements.push(element.cloneNode() as HTMLElement);\n        elements.forEach((element) => document.body.appendChild(element));\n    });\n\n    afterEach(() => {\n        elements.forEach((element) => element.remove());\n    });\n\n    it('set a different element id if the same element id is already set in the document', () => {\n        const el = document.createElement('div');\n\n        el.id = 'container1';\n        document.body.appendChild(el);\n\n        expect(setUniqueElementId(`.${className}`, 'container')).toEqual([\n            'container2',\n            expect.stringMatching(/^container.+/),\n            expect.stringMatching(/^container.+/),\n        ]);\n    });\n\n    it('sets element id if not already set', () => {\n        const output = setUniqueElementId(`.${className}`, 'container');\n\n        expect(output).toEqual([\n            expect.stringMatching(/^container.+/),\n            expect.stringMatching(/^container.+/),\n            expect.stringMatching(/^container.+/),\n        ]);\n\n        expect(uniq(output)).toHaveLength(output.length);\n\n        expect(elements.map((element) => element.id)).toEqual(output);\n    });\n\n    it('does not set element id if already set', () => {\n        elements[0].id = 'hello-world';\n\n        expect(setUniqueElementId(`.${className}`, 'container')).toEqual([\n            'hello-world',\n            expect.stringMatching(/^container.+/),\n            expect.stringMatching(/^container.+/),\n        ]);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/dom/set-unique-element-id.ts",
    "content": "import { uniqueId } from 'lodash';\n\nimport { InvalidArgumentError } from '../error/errors';\n\nconst getUniqId = (idPrefix?: string): string => {\n    const id = uniqueId(idPrefix);\n\n    return document.getElementById(id) ? getUniqId(idPrefix) : id;\n};\n\nexport default function setUniqueElementId(selector: string, idPrefix: string): string[] {\n    const containers = document.querySelectorAll(selector);\n\n    if (!containers.length) {\n        throw new InvalidArgumentError(\n            `Unable to find any element with the specified selector: ${selector}`,\n        );\n    }\n\n    return Array.prototype.slice.call(containers).map((container: HTMLElement) => {\n        if (!container.id) {\n            container.id = getUniqId(idPrefix);\n        }\n\n        return container.id;\n    });\n}\n"
  },
  {
    "path": "packages/core/src/common/error/clear-error-reducer.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\n\nimport clearErrorReducer from './clear-error-reducer';\nimport ErrorActionCreator from './error-action-creator';\n\ndescribe('clearErrorReducer()', () => {\n    let actions: ErrorActionCreator;\n\n    beforeEach(() => {\n        actions = new ErrorActionCreator();\n    });\n\n    it('returns new state without error', () => {\n        const fooError = new Error('foo');\n        const barError = new Error('bar');\n        const action = actions.clearError(fooError);\n\n        expect(clearErrorReducer({ fooError, barError }, action)).toEqual({ barError });\n    });\n\n    it('does nothing if action is not \"clear error\" action', () => {\n        const fooError = new Error('foo');\n        const barError = new Error('bar');\n        const action = createAction('FOOBAR');\n\n        expect(clearErrorReducer({ fooError, barError }, action)).toEqual({ fooError, barError });\n    });\n\n    it('finds error recursively', () => {\n        const fooError = new Error('foo');\n        const barError = new Error('bar');\n        const action = actions.clearError(fooError);\n\n        expect(clearErrorReducer({ 123: { fooError, barError } }, action)).toEqual({\n            123: { barError },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/clear-error-reducer.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { omitDeep } from '../utility';\n\nimport { ClearErrorAction, ErrorActionType } from './error-actions';\n\nexport default function clearErrorReducer<\n    TState extends { [key: string]: any },\n    TAction extends Action,\n>(state: TState, action: TAction): TState | undefined {\n    if (isClearErrorAction(action)) {\n        return omitDeep(state, (value) => value === action.payload);\n    }\n\n    return state;\n}\n\nfunction isClearErrorAction(action: Action): action is ClearErrorAction {\n    return action.type === ErrorActionType.ClearError;\n}\n"
  },
  {
    "path": "packages/core/src/common/error/create-request-error-factory.spec.ts",
    "content": "import createRequestErrorFactory from './create-request-error-factory';\nimport RequestErrorFactory from './request-error-factory';\n\ndescribe('createRequestErrorFactory()', () => {\n    it('returns an instance of RequestErrorFactory', () => {\n        const factory = createRequestErrorFactory();\n\n        expect(factory).toBeInstanceOf(RequestErrorFactory);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/create-request-error-factory.ts",
    "content": "import { PaymentMethodInvalidError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { UnrecoverableError } from './errors';\nimport RequestErrorFactory from './request-error-factory';\n\nexport default function createRequestErrorFactory(): RequestErrorFactory {\n    const factory = new RequestErrorFactory();\n\n    const unrecoverableErrorTypes = [\n        'catalog_only',\n        'empty_cart',\n        'invalid_order_id',\n        'invalid_order_token',\n        'missing_order_token',\n        'missing_provider_token',\n        'missing_shipping_method',\n        'order_completion_error',\n        'order_could_not_be_finalized_error',\n        'order_create_failed',\n        'provider_fatal_error',\n        'provider_setup_error',\n        'stock_too_low',\n    ];\n\n    unrecoverableErrorTypes.forEach((type) => {\n        factory.register(type, (response, message) => new UnrecoverableError(response, message));\n    });\n\n    factory.register(\n        'invalid_payment_provider',\n        (response) => new PaymentMethodInvalidError(response),\n    );\n    factory.register(\n        'payment_config_not_found',\n        (response) => new PaymentMethodInvalidError(response),\n    );\n\n    return factory;\n}\n"
  },
  {
    "path": "packages/core/src/common/error/error-action-creator.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\n\nimport ErrorActionCreator from './error-action-creator';\nimport { ErrorActionType } from './error-actions';\n\ndescribe('ErrorActionCreator', () => {\n    let actions: ErrorActionCreator;\n\n    beforeEach(() => {\n        actions = new ErrorActionCreator();\n    });\n\n    it('creates \"clear error\" action', () => {\n        const error = new Error('Unexpected error');\n\n        expect(actions.clearError(error)).toEqual(createAction(ErrorActionType.ClearError, error));\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/error-action-creator.ts",
    "content": "import { ClearErrorAction, ErrorActionType } from './error-actions';\n\nexport default class ErrorActionCreator {\n    clearError(error: Error): ClearErrorAction {\n        return {\n            type: ErrorActionType.ClearError,\n            payload: error,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/error/error-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nexport enum ErrorActionType {\n    ClearError = 'CLEAR_ERROR',\n}\n\nexport type ErrorAction = ClearErrorAction;\n\nexport interface ClearErrorAction extends Action {\n    type: ErrorActionType.ClearError;\n    payload: Error;\n}\n"
  },
  {
    "path": "packages/core/src/common/error/error-logger.ts",
    "content": "export interface ErrorLogger {\n    log(error: Error): void;\n}\n\nexport class DefaultErrorLogger implements ErrorLogger {\n    log(error: Error): void {\n        // eslint-disable-next-line no-console\n        console.error(error);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/error/error-message-transformer.spec.ts",
    "content": "import ErrorMessageTransformer from './error-message-transformer';\n\ndescribe('ErrorMessageTransformer', () => {\n    it('transforms error message according to customizer', () => {\n        const customizer = jest.fn((error) => {\n            return `${error.message} Good bye.`;\n        });\n\n        const transformer = new ErrorMessageTransformer(customizer);\n        const error = new Error('Hello world.');\n\n        expect(transformer.transform(error).message).toBe('Hello world. Good bye.');\n    });\n\n    it('trims white spaces and removes line breaks', () => {\n        const customizer = jest.fn((error) => {\n            return `\n                ${error.message}\n                Good\n                bye.\n            `;\n        });\n\n        const transformer = new ErrorMessageTransformer(customizer);\n        const error = new Error(`Hello world.`);\n\n        expect(transformer.transform(error).message).toBe('Hello world. Good bye.');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/error-message-transformer.ts",
    "content": "import { toSingleLine } from '../utility';\n\nexport default class ErrorMessageTransformer<TError extends Error = Error> {\n    constructor(private _messageCustomizer: (type: TError) => string) {}\n\n    transform(error: TError): TError {\n        error.message = toSingleLine(this._messageCustomizer(error));\n\n        return error;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/error/errors/custom-error.ts",
    "content": "export default interface CustomError extends Error {\n    message: string;\n    type: string;\n    subtype?: string;\n}\n\nexport function isCustomError(error: unknown): error is CustomError {\n    return typeof error === 'object' && error !== null && 'message' in error && 'type' in error;\n}\n"
  },
  {
    "path": "packages/core/src/common/error/errors/index.ts",
    "content": "export { default as CustomError, isCustomError } from './custom-error';\nexport { default as InvalidArgumentError } from './invalid-argument-error';\nexport { default as InternalRequestError } from './map-from-internal-error-response';\nexport { default as MissingDataError, MissingDataErrorType } from './missing-data-error';\nexport { default as NotImplementedError } from './not-implemented-error';\nexport { default as NotInitializedError, NotInitializedErrorType } from './not-initialized-error';\nexport { default as PaymentRequestError } from './map-from-payment-error-response';\nexport { default as RequestError } from './request-error';\nexport { default as StandardError } from './standard-error';\nexport { default as StorefrontRequestError } from './map-from-storefront-error-response';\nexport { default as TimeoutError } from './timeout-error';\nexport { default as UnrecoverableError } from './unrecoverable-error';\nexport { default as UnsupportedBrowserError } from './unsupported-browser-error';\n\nexport { default as mapFromInternalErrorResponse } from './map-from-internal-error-response';\nexport { default as mapFromPaymentErrorResponse } from './map-from-payment-error-response';\nexport { default as mapFromStorefrontErrorResponse } from './map-from-storefront-error-response';\n"
  },
  {
    "path": "packages/core/src/common/error/errors/invalid-argument-error.spec.ts",
    "content": "import InvalidArgumentError from './invalid-argument-error';\n\ndescribe('InvalidArgumentError', () => {\n    it('returns error name', () => {\n        const error = new InvalidArgumentError();\n\n        expect(error.name).toBe('InvalidArgumentError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/errors/invalid-argument-error.ts",
    "content": "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"
  },
  {
    "path": "packages/core/src/common/error/errors/map-from-internal-error-response.spec.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { InternalErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getErrorResponse } from '../../http-request/responses.mock';\n\nimport mapFromInternalErrorResponse from './map-from-internal-error-response';\nimport RequestError from './request-error';\n\ndescribe('mapFromInternalErrorResponse()', () => {\n    let error: RequestError<InternalErrorResponseBody>;\n    let response: Response<InternalErrorResponseBody>;\n\n    beforeEach(() => {\n        response = getErrorResponse({\n            status: 400,\n            title: 'Error with payment provider',\n            type: 'invalid_payment',\n            errors: ['Missing CCV.', 'Missing CC Type.'],\n        });\n\n        error = mapFromInternalErrorResponse(response);\n    });\n\n    it('keeps original body', () => {\n        expect(error.body).toEqual(response.body);\n    });\n\n    it('keeps original headers', () => {\n        expect(error.headers).toEqual(response.headers);\n    });\n\n    it('keeps original status', () => {\n        expect(error.status).toEqual(response.status);\n    });\n\n    it('concatenates all errors, ignoring empty ones', () => {\n        expect(error.message).toBe('Missing CCV. Missing CC Type.');\n    });\n\n    it('creates an array of error objects', () => {\n        expect(error.errors).toEqual([\n            { code: 'invalid_payment', message: 'Missing CCV.' },\n            { code: 'invalid_payment', message: 'Missing CC Type.' },\n        ]);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/errors/map-from-internal-error-response.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { InternalErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport RequestError from './request-error';\n\nexport default function mapFromInternalErrorResponse(\n    response: Response<InternalErrorResponseBody>,\n    message?: string,\n): RequestError {\n    const { body } = response;\n    const { errors = [] } = body;\n\n    return new RequestError(response, {\n        message: joinErrors(errors) || body.detail || body.title || message,\n        errors: errors.length\n            ? errors.map((message) => ({ code: body.type, message }))\n            : [{ code: body.type, message: body.detail || body.title }],\n    });\n}\n\nfunction joinErrors(errors: string[]): string | undefined {\n    return errors\n        .reduce((result: string[], error) => {\n            if (error) {\n                return [...result, error];\n            }\n\n            return result;\n        }, [])\n        .join(' ');\n}\n"
  },
  {
    "path": "packages/core/src/common/error/errors/map-from-payment-error-response.spec.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { PaymentErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getErrorResponse } from '../../http-request/responses.mock';\n\nimport mapFromPaymentErrorResponse from './map-from-payment-error-response';\nimport RequestError from './request-error';\n\ndescribe('mapFromPaymentErrorResponse()', () => {\n    let error: RequestError<PaymentErrorResponseBody>;\n    let response: Response<PaymentErrorResponseBody>;\n\n    beforeEach(() => {\n        response = getErrorResponse({\n            status: '',\n            errors: [\n                { code: 'invalid_cvv', message: undefined },\n                { code: 'invalid_number', message: 'Invalid number' },\n                { code: 'invalid_empty', message: '' },\n                { code: 'invalid_account', message: 'Invalid account.' },\n            ],\n        });\n\n        error = mapFromPaymentErrorResponse(response);\n    });\n\n    it('keeps original body', () => {\n        expect(error.body).toEqual(response.body);\n    });\n\n    it('keeps original headers', () => {\n        expect(error.headers).toEqual(response.headers);\n    });\n\n    it('keeps original status', () => {\n        expect(error.status).toEqual(response.status);\n    });\n\n    it('creates an array of error objects', () => {\n        expect(error.errors).toEqual(response.body.errors);\n    });\n\n    it('concatenates all errors, ignoring empty ones', () => {\n        expect(error.message).toBe('Invalid number Invalid account.');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/errors/map-from-payment-error-response.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { PaymentErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport RequestError from './request-error';\n\nexport default function mapFromPaymentErrorResponse(\n    response: Response<PaymentErrorResponseBody>,\n    message?: string,\n): RequestError {\n    const { body } = response;\n    const { errors = [] } = body;\n\n    return new RequestError(response, {\n        message: joinErrors(errors) || message,\n        errors,\n    });\n}\n\nfunction joinErrors(errors: Array<{ code: string; message?: string }>): string | undefined {\n    if (!Array.isArray(errors)) {\n        return;\n    }\n\n    return errors\n        .reduce((result: string[], error) => {\n            if (error && error.message) {\n                return [...result, error.message];\n            }\n\n            return result;\n        }, [])\n        .join(' ');\n}\n"
  },
  {
    "path": "packages/core/src/common/error/errors/map-from-storefront-error-response.spec.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getErrorResponse } from '../../http-request/responses.mock';\n\nimport mapFromStorefrontErrorResponse from './map-from-storefront-error-response';\nimport RequestError from './request-error';\n\ndescribe('mapFromStorefrontErrorResponse()', () => {\n    let error: RequestError<StorefrontErrorResponseBody>;\n    let response: Response<StorefrontErrorResponseBody>;\n\n    beforeEach(() => {\n        response = getErrorResponse({\n            status: 400,\n            title: 'Coupon cannot be applied',\n            detail: 'Coupon FOO cannot be applied',\n            type: 'about:blank',\n            code: 'min_purchase',\n        });\n\n        error = mapFromStorefrontErrorResponse(response);\n    });\n\n    it('sets message using detail', () => {\n        expect(error.message).toBe('Coupon FOO cannot be applied');\n    });\n\n    it('creates an array of error objects', () => {\n        expect(error.errors).toEqual([\n            { code: 'min_purchase', message: 'Coupon FOO cannot be applied' },\n        ]);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/errors/map-from-storefront-error-response.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport RequestError from './request-error';\n\nexport default function mapFromStorefrontErrorResponse(\n    response: Response<StorefrontErrorResponseBody>,\n    message?: string,\n): RequestError<StorefrontErrorResponseBody> {\n    const { body } = response;\n\n    return new RequestError(response, {\n        message: message || body.detail || body.title,\n        errors: [\n            {\n                code: body.code || body.type,\n                message: body.detail || body.title,\n            },\n        ],\n    });\n}\n"
  },
  {
    "path": "packages/core/src/common/error/errors/missing-data-error.spec.ts",
    "content": "import MissingDataError, { MissingDataErrorType } from './missing-data-error';\n\ndescribe('MissingDataError', () => {\n    it('returns error name', () => {\n        const error = new MissingDataError(MissingDataErrorType.MissingCheckout);\n\n        expect(error.name).toBe('MissingDataError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/errors/missing-data-error.ts",
    "content": "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    MissingPaymentProviderCustomer,\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.MissingPaymentProviderCustomer:\n            return 'Unable to proceed because payment provider customer is unavailable.';\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"
  },
  {
    "path": "packages/core/src/common/error/errors/not-implemented-error.spec.ts",
    "content": "import NotImplementedError from './not-implemented-error';\n\ndescribe('NotImplementedError', () => {\n    it('returns error name', () => {\n        const error = new NotImplementedError();\n\n        expect(error.name).toBe('NotImplementedError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/errors/not-implemented-error.ts",
    "content": "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"
  },
  {
    "path": "packages/core/src/common/error/errors/not-initialized-error.spec.ts",
    "content": "import NotInitializedError, { NotInitializedErrorType } from './not-initialized-error';\n\ndescribe('NotInitializedError', () => {\n    it('returns error name', () => {\n        const error = new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n\n        expect(error.name).toBe('NotInitializedError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/errors/not-initialized-error.ts",
    "content": "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"
  },
  {
    "path": "packages/core/src/common/error/errors/request-error.spec.ts",
    "content": "import { getErrorResponse } from '../../http-request/responses.mock';\n\nimport RequestError from './request-error';\n\ndescribe('RequestError', () => {\n    it('sets type', () => {\n        const error = new RequestError(getErrorResponse());\n\n        expect(error.type).toBe('request');\n    });\n\n    it('sets name', () => {\n        const error = new RequestError(getErrorResponse());\n\n        expect(error.name).toBe('RequestError');\n    });\n\n    it('sets body', () => {\n        const response = getErrorResponse();\n        const error = new RequestError(response);\n\n        expect(error.body).toEqual(response.body);\n    });\n\n    it('sets status', () => {\n        const response = getErrorResponse();\n        const error = new RequestError(response);\n\n        expect(error.status).toEqual(response.status);\n    });\n\n    it('sets default data when none provided', () => {\n        const error = new RequestError();\n\n        expect(error.message).toBe('An unexpected error has occurred.');\n        expect(error.status).toBe(0);\n        expect(error.body).toEqual({});\n        expect(error.headers).toEqual({});\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/errors/request-error.ts",
    "content": "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"
  },
  {
    "path": "packages/core/src/common/error/errors/standard-error.spec.ts",
    "content": "import StandardError from './standard-error';\n\ndescribe('StandardError', () => {\n    class TestError extends StandardError {}\n\n    it('returns error name', () => {\n        const error = new TestError();\n\n        expect(error.name).toBe('StandardError');\n    });\n\n    it('sets error message if provided', () => {\n        const message = 'Hello world';\n        const error = new TestError(message);\n\n        expect(error.message).toEqual(message);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/errors/standard-error.ts",
    "content": "import { setPrototypeOf } from '../../utility';\n\nimport CustomError from './custom-error';\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"
  },
  {
    "path": "packages/core/src/common/error/errors/timeout-error.spec.ts",
    "content": "import TimeoutError from './timeout-error';\n\ndescribe('TimeoutError', () => {\n    it('returns error name', () => {\n        const error = new TimeoutError();\n\n        expect(error.name).toBe('TimeoutError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/errors/timeout-error.ts",
    "content": "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"
  },
  {
    "path": "packages/core/src/common/error/errors/unrecoverable-error.spec.ts",
    "content": "import { getResponse } from '../../http-request/responses.mock';\n\nimport UnrecoverableError from './unrecoverable-error';\n\ndescribe('UnrecoverableError', () => {\n    it('returns error name', () => {\n        const error = new UnrecoverableError(getResponse('Error'));\n\n        expect(error.name).toBe('UnrecoverableError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/errors/unrecoverable-error.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport RequestError from './request-error';\n\n/**\n * Throw this error if there is an unexpected error and it is not possible to\n * recover from unless the shopper creates a new checkout session.\n */\nexport default class UnrecoverableError<T = any> extends RequestError {\n    constructor(response: Response<T>, message?: string) {\n        super(response, {\n            message:\n                message ||\n                'An unexpected error has occurred. The checkout process cannot continue as a result.',\n        });\n\n        this.name = 'UnrecoverableError';\n        this.type = 'unrecoverable';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/error/errors/unsupported-browser-error.spec.ts",
    "content": "import UnsupportedBrowserError from './unsupported-browser-error';\n\ndescribe('UnsupportedBrowserError', () => {\n    it('returns error name', () => {\n        const error = new UnsupportedBrowserError();\n\n        expect(error.name).toBe('UnsupportedBrowserError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/errors/unsupported-browser-error.ts",
    "content": "import StandardError from './standard-error';\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"
  },
  {
    "path": "packages/core/src/common/error/index.ts",
    "content": "export * from './error-actions';\nexport * from './error-logger';\n\nexport { default as clearErrorReducer } from './clear-error-reducer';\nexport { default as createRequestErrorFactory } from './create-request-error-factory';\nexport { default as throwErrorAction } from './throw-error-action';\nexport { default as ErrorActionCreator } from './error-action-creator';\nexport { default as ErrorMessageTransformer } from './error-message-transformer';\nexport { default as RequestErrorFactory } from './request-error-factory';\n"
  },
  {
    "path": "packages/core/src/common/error/request-error-factory.spec.ts",
    "content": "import { merge } from 'lodash';\n\nimport { PaymentMethodInvalidError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    getErrorResponse,\n    getErrorResponseBody,\n    getTimeoutResponse,\n} from '../http-request/responses.mock';\n\nimport { RequestError, TimeoutError, UnrecoverableError } from './errors';\nimport RequestErrorFactory from './request-error-factory';\n\ndescribe('RequestErrorFactory', () => {\n    it('creates error from XHR response based on type', () => {\n        const factory = new RequestErrorFactory();\n        const response = merge({}, getErrorResponse(), { body: { type: 'empty_cart' } });\n\n        factory.register('empty_cart', (data) => new UnrecoverableError(data));\n\n        expect(factory.createError(response)).toBeInstanceOf(UnrecoverableError);\n    });\n\n    it('creates error from XHR response based on formatted type', () => {\n        const factory = new RequestErrorFactory();\n        const response = merge({}, getErrorResponse(), { body: { type: 'foobar/empty_cart' } });\n\n        factory.register('empty_cart', (data) => new UnrecoverableError(data));\n\n        expect(factory.createError(response)).toBeInstanceOf(UnrecoverableError);\n    });\n\n    it('creates error from XHR response based on error code', () => {\n        const factory = new RequestErrorFactory();\n        const response = merge({}, getErrorResponse(), {\n            body: { errors: [{ code: 'empty_cart' }] },\n        });\n\n        factory.register('empty_cart', (data) => new UnrecoverableError(data));\n\n        expect(factory.createError(response)).toBeInstanceOf(UnrecoverableError);\n    });\n\n    it('creates `RequestError` from XHR response if type cannot be recognized', () => {\n        const factory = new RequestErrorFactory();\n\n        expect(factory.createError(getErrorResponse())).toBeInstanceOf(RequestError);\n    });\n\n    it('creates `TimeoutError` if XHR is aborted', () => {\n        const factory = new RequestErrorFactory();\n        const error = factory.createError(getTimeoutResponse());\n\n        expect(error).toBeInstanceOf(TimeoutError);\n        expect((error as TimeoutError).status).toBe(0);\n    });\n\n    it('exposes first error code if it has an array of errors', () => {\n        const factory = new RequestErrorFactory();\n        const errorResponse = getErrorResponseBody({\n            errors: [\n                {\n                    code: 'foo',\n                    message: 'bar',\n                },\n            ],\n        });\n\n        const error = factory.createError(getErrorResponse(errorResponse));\n\n        expect(error).toBeInstanceOf(RequestError);\n        expect(error.message).toBe('bar');\n    });\n\n    it('overrides with registered error when error code matches registered key', () => {\n        const factory = new RequestErrorFactory();\n\n        factory.register('payment_config_not_found', (data) => new PaymentMethodInvalidError(data));\n\n        const errorResponse = getErrorResponseBody({\n            errors: [\n                {\n                    code: 'payment_config_not_found',\n                    message: 'bar',\n                },\n            ],\n        });\n\n        const error = factory.createError(getErrorResponse(errorResponse));\n\n        expect(error.type).toBe('payment_method_invalid');\n        expect(error.message).toBe(\n            'There is a problem processing your payment. Please try again later.',\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/error/request-error-factory.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\nimport { last } from 'lodash';\n\nimport {\n    ErrorResponseBody,\n    InternalErrorResponseBody,\n    StorefrontErrorResponseBody,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    mapFromInternalErrorResponse,\n    mapFromPaymentErrorResponse,\n    mapFromStorefrontErrorResponse,\n    RequestError,\n    TimeoutError,\n} from './errors';\n\nexport default class RequestErrorFactory {\n    private _factoryMethods: { [key: string]: ErrorFactoryMethod } = {};\n\n    constructor() {\n        this.register('default', (response, message) => new RequestError(response, { message }));\n        this.register('internal', (response, message) =>\n            mapFromInternalErrorResponse(response, message),\n        );\n        this.register('storefront', (response, message) =>\n            mapFromStorefrontErrorResponse(response, message),\n        );\n        this.register('payment', (response, message) =>\n            mapFromPaymentErrorResponse(response, message),\n        );\n        this.register('timeout', (response) => new TimeoutError(response));\n    }\n\n    register(type: string, factoryMethod: ErrorFactoryMethod): void {\n        this._factoryMethods[type] = factoryMethod;\n    }\n\n    createError(response: Response<any>, message?: string): RequestError {\n        const factoryMethod =\n            this._factoryMethods[this._getType(response)] || this._factoryMethods.default;\n\n        return factoryMethod(response, message);\n    }\n\n    private _getType(response: Response<ErrorResponseBody>): string {\n        if (response.status === 0) {\n            return 'timeout';\n        }\n\n        if (this._isStorefrontErrorResponseBody(response.body)) {\n            return 'storefront';\n        }\n\n        if (this._isInternalErrorResponseBody(response.body)) {\n            const internalType = last(response.body.type.split('/'));\n\n            return internalType && this._factoryMethods[internalType] ? internalType : 'internal';\n        }\n\n        const error = last(response.body && response.body.errors);\n\n        if (error && error.code && this._factoryMethods[error.code]) {\n            return error.code;\n        }\n\n        return 'payment';\n    }\n\n    private _isStorefrontErrorResponseBody(\n        errorResponse: ErrorResponseBody,\n    ): errorResponse is StorefrontErrorResponseBody {\n        const storefrontErrorResponse = errorResponse as StorefrontErrorResponseBody;\n\n        return (\n            !this._isInternalErrorResponseBody(errorResponse) &&\n            typeof storefrontErrorResponse.title === 'string' &&\n            typeof storefrontErrorResponse.type === 'string' &&\n            typeof storefrontErrorResponse.status === 'number' &&\n            typeof storefrontErrorResponse.detail === 'string'\n        );\n    }\n\n    private _isInternalErrorResponseBody(\n        errorResponse: ErrorResponseBody,\n    ): errorResponse is InternalErrorResponseBody {\n        const internalErrorResponse = errorResponse as InternalErrorResponseBody;\n\n        return (\n            typeof internalErrorResponse.errors === 'object' &&\n            typeof internalErrorResponse.title === 'string' &&\n            typeof internalErrorResponse.type === 'string' &&\n            typeof internalErrorResponse.status === 'number'\n        );\n    }\n}\n\nexport type ErrorFactoryMethod<T = any> = (response: Response<T>, message?: string) => RequestError;\n"
  },
  {
    "path": "packages/core/src/common/error/throw-error-action.ts",
    "content": "import { Action, createErrorAction } from '@bigcommerce/data-store';\nimport { concat, Observable, of, throwError } from 'rxjs';\n\nexport default function throwErrorAction<TPayload, TMeta, TType extends string>(\n    type: TType,\n    error?: TPayload,\n    meta?: TMeta,\n): Observable<Action<TPayload, TMeta, TType>> {\n    if (isErrorAction(error)) {\n        return concat(of(error), throwError(createErrorAction(type, error.payload, meta)));\n    }\n\n    return throwError(createErrorAction(type, error, meta));\n}\n\nfunction isErrorAction(action: any): action is Action {\n    return action && action.type && action.error;\n}\n"
  },
  {
    "path": "packages/core/src/common/http-request/content-type.ts",
    "content": "enum ContentType {\n    Json = 'application/json',\n    JsonV1 = 'application/vnd.bc.v1+json',\n}\n\nexport default ContentType;\n"
  },
  {
    "path": "packages/core/src/common/http-request/experiment-aware-request-sender.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\n\nimport ExperimentAwareRequestSender, { ExperimentConfig } from './experiment-aware-request-sender';\nimport { getResponse } from './responses.mock';\n\ndescribe('ExperimentAwareRequestSender', () => {\n    const EXPERIMENT_FLAG = 'CHECKOUT-9950.update_sf_checkout_url_for_subfolder';\n    const url = '/api/storefront/checkouts/123/billing-address';\n    const absoluteUrl = 'https://other-domain.com/api/storefront/checkouts/123/billing-address';\n    const options = { body: { foo: 'bar' } };\n    const response = getResponse({});\n\n    let requestSender: RequestSender;\n    let config: ExperimentConfig;\n    let sender: ExperimentAwareRequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n\n        jest.spyOn(requestSender, 'sendRequest').mockResolvedValue(response);\n        jest.spyOn(requestSender, 'get').mockResolvedValue(response);\n        jest.spyOn(requestSender, 'post').mockResolvedValue(response);\n        jest.spyOn(requestSender, 'put').mockResolvedValue(response);\n        jest.spyOn(requestSender, 'patch').mockResolvedValue(response);\n        jest.spyOn(requestSender, 'delete').mockResolvedValue(response);\n\n        config = {\n            getBasePath: jest.fn().mockReturnValue('https://store.example.com/en'),\n            getFeatures: jest.fn().mockReturnValue({ [EXPERIMENT_FLAG]: true }),\n        };\n\n        sender = new ExperimentAwareRequestSender(requestSender, config);\n    });\n\n    describe('passthrough methods (no URL prefixing)', () => {\n        it('forwards sendRequest without prefixing', async () => {\n            await sender.sendRequest(url, options);\n\n            expect(requestSender.sendRequest).toHaveBeenCalledWith(url, options);\n        });\n\n        it('forwards get without prefixing', async () => {\n            await sender.get(url, options);\n\n            expect(requestSender.get).toHaveBeenCalledWith(url, options);\n        });\n    });\n\n    describe('mutating methods with experiment enabled and basePath set', () => {\n        it('prefixes url for post', async () => {\n            await sender.post(url, options);\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                'https://store.example.com/en/api/storefront/checkouts/123/billing-address',\n                options,\n            );\n        });\n\n        it('prefixes url for put', async () => {\n            await sender.put(url, options);\n\n            expect(requestSender.put).toHaveBeenCalledWith(\n                'https://store.example.com/en/api/storefront/checkouts/123/billing-address',\n                options,\n            );\n        });\n\n        it('prefixes url for patch', async () => {\n            await sender.patch(url, options);\n\n            expect(requestSender.patch).toHaveBeenCalledWith(\n                'https://store.example.com/en/api/storefront/checkouts/123/billing-address',\n                options,\n            );\n        });\n\n        it('prefixes url for delete', async () => {\n            await sender.delete(url, options);\n\n            expect(requestSender.delete).toHaveBeenCalledWith(\n                'https://store.example.com/en/api/storefront/checkouts/123/billing-address',\n                options,\n            );\n        });\n    });\n\n    describe('_prefixed guard conditions', () => {\n        it('does not prefix when experiment flag is disabled', async () => {\n            (config.getFeatures as jest.Mock).mockReturnValue({ [EXPERIMENT_FLAG]: false });\n\n            await sender.post(url, options);\n\n            expect(requestSender.post).toHaveBeenCalledWith(url, options);\n        });\n\n        it('does not prefix when features are empty (config not loaded yet)', async () => {\n            (config.getFeatures as jest.Mock).mockReturnValue({});\n\n            await sender.post(url, options);\n\n            expect(requestSender.post).toHaveBeenCalledWith(url, options);\n        });\n\n        it('does not prefix when basePath is undefined', async () => {\n            (config.getBasePath as jest.Mock).mockReturnValue(undefined);\n\n            await sender.post(url, options);\n\n            expect(requestSender.post).toHaveBeenCalledWith(url, options);\n        });\n\n        it('does not prefix when basePath ends with /checkout', async () => {\n            (config.getBasePath as jest.Mock).mockReturnValue('https://store.example.com/checkout');\n\n            await sender.post(url, options);\n\n            expect(requestSender.post).toHaveBeenCalledWith(url, options);\n        });\n\n        it('does not prefix when url is absolute', async () => {\n            await sender.post(absoluteUrl, options);\n\n            expect(requestSender.post).toHaveBeenCalledWith(absoluteUrl, options);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/http-request/experiment-aware-request-sender.ts",
    "content": "import { RequestOptions, RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { StoreConfig } from '../../config';\n\nexport interface ExperimentConfig {\n    getBasePath: () => string | undefined;\n    getFeatures: () => StoreConfig['checkoutSettings']['features'];\n}\n\nexport default class ExperimentAwareRequestSender {\n    constructor(private _requestSender: RequestSender, private _config: ExperimentConfig) {}\n\n    sendRequest<T>(url: string, options?: RequestOptions): Promise<Response<T>> {\n        return this._requestSender.sendRequest(url, options);\n    }\n\n    get<T>(url: string, options?: RequestOptions): Promise<Response<T>> {\n        return this._requestSender.get(url, options);\n    }\n\n    post<T>(url: string, options?: RequestOptions): Promise<Response<T>> {\n        return this._requestSender.post(this._prefixed(url), options);\n    }\n\n    put<T>(url: string, options?: RequestOptions): Promise<Response<T>> {\n        return this._requestSender.put(this._prefixed(url), options);\n    }\n\n    patch<T>(url: string, options?: RequestOptions): Promise<Response<T>> {\n        return this._requestSender.patch(this._prefixed(url), options);\n    }\n\n    delete<T>(url: string, options?: RequestOptions): Promise<Response<T>> {\n        return this._requestSender.delete(this._prefixed(url), options);\n    }\n\n    private _prefixed(url: string): string {\n        const basePath = this._config.getBasePath();\n\n        const isExperimentEnabled =\n            this._config.getFeatures()['CHECKOUT-9950.update_sf_checkout_url_for_subfolder'];\n\n        if (\n            !isExperimentEnabled ||\n            !basePath ||\n            basePath.endsWith('/checkout') ||\n            /^https?:\\/\\//.test(url)\n        ) {\n            return url;\n        }\n\n        return `${basePath}${url}`;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/http-request/index.ts",
    "content": "export * from './internal-api-headers';\nexport * from './sdk-version-headers';\n\nexport { default as ExperimentAwareRequestSender } from './experiment-aware-request-sender';\nexport type { ExperimentConfig } from './experiment-aware-request-sender';\n\nexport { default as InternalResponseBody } from './internal-response-body';\nexport { default as ContentType } from './content-type';\nexport { default as RequestOptions } from './request-options';\nexport { default as joinIncludes } from './join-includes';\nexport { default as joinOrMergeIncludes } from './join-or-merge-includes';\n"
  },
  {
    "path": "packages/core/src/common/http-request/internal-api-headers.ts",
    "content": "export const INTERNAL_USE_ONLY =\n    'This API endpoint is for internal use only and may change in the future';\n"
  },
  {
    "path": "packages/core/src/common/http-request/internal-response-body.ts",
    "content": "export default interface InternalResponseBody<TData = object, TMeta = object> {\n    data: TData;\n    meta: TMeta;\n}\n"
  },
  {
    "path": "packages/core/src/common/http-request/join-includes.spec.ts",
    "content": "import joinIncludes from './join-includes';\n\ndescribe('joinIncludes()', () => {\n    it('joins include params using comma as separator', () => {\n        expect(joinIncludes(['foo', 'bar', 'hello-world'])).toBe('foo,bar,hello-world');\n    });\n\n    it('returns string without duplicates', () => {\n        expect(joinIncludes(['foo', 'bar', 'foo'])).toBe('foo,bar');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/http-request/join-includes.ts",
    "content": "import { uniq } from 'lodash';\n\nexport default function joinIncludes<T>(includes: T[]): string {\n    return uniq(includes).join(',');\n}\n"
  },
  {
    "path": "packages/core/src/common/http-request/join-or-merge-includes.ts",
    "content": "import joinIncludes from './join-includes';\nimport mergeIncludes from './merge-includes';\n\n/**\n * Joins or merges a base list of includes with a set of additional includes.\n */\nexport default function joinOrMergeIncludes<T extends string>(\n    baseIncludes: T[],\n    includeDictionaryOrList: { [key in T]?: boolean } | T[] = [],\n): string {\n    return Array.isArray(includeDictionaryOrList)\n        ? joinIncludes([...baseIncludes, ...includeDictionaryOrList])\n        : mergeIncludes(baseIncludes, includeDictionaryOrList);\n}\n"
  },
  {
    "path": "packages/core/src/common/http-request/merge-includes.ts",
    "content": "import { difference, filter, keys, pickBy } from 'lodash';\n\nimport joinIncludes from './join-includes';\n\n/**\n * Merges includes given a list of base includes and a dictionary\n * of includes\n */\nexport default function mergeIncludes<T extends string>(\n    baseIncludes: T[],\n    includesDictionary?: { [key in T]?: boolean },\n): string {\n    const deletions = keys(pickBy(includesDictionary, (on) => !on));\n    const additions = keys(filter(includesDictionary));\n\n    return joinIncludes([...difference(baseIncludes, deletions), ...additions]);\n}\n"
  },
  {
    "path": "packages/core/src/common/http-request/request-options.ts",
    "content": "import { Timeout } from '@bigcommerce/request-sender';\n\n/**\n * A set of options for configuring an asynchronous request.\n */\nexport default interface RequestOptions<TParams = object> {\n    /**\n     * Provide this option if you want to cancel or time out the request. If the\n     * timeout object completes before the request, the request will be\n     * cancelled.\n     */\n    timeout?: Timeout;\n\n    /**\n     * The parameters of the request, if required.\n     */\n    params?: TParams;\n\n    /**\n     * The version of the checkout, used for optimistic concurrency control.\n     */\n    version?: number;\n}\n"
  },
  {
    "path": "packages/core/src/common/http-request/responses.mock.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { ErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { PaymentResponse } from '../../payment';\n\nexport function getResponse<T>(\n    body: T,\n    headers = {},\n    status = 200,\n    statusText = 'OK',\n): Response<T> {\n    return {\n        body,\n        status,\n        statusText,\n        headers: {\n            'content-type': 'application/json',\n            ...headers,\n        },\n    };\n}\n\nexport function getPaymentResponse<T>(\n    data: T,\n    headers = {},\n    status = 200,\n    statusText = 'OK',\n): PaymentResponse<T> {\n    return {\n        data,\n        status,\n        statusText,\n        headers: {\n            'content-type': 'application/json',\n            ...headers,\n        },\n    };\n}\n\nexport function getErrorResponse(\n    body = getErrorResponseBody(),\n    headers = {},\n    status = 400,\n    statusText = 'Bad Request',\n): Response<any> {\n    return {\n        body,\n        status,\n        statusText,\n        headers: {\n            'content-type': 'application/json',\n            ...headers,\n        },\n    };\n}\n\nexport function getErrorResponseBody(error?: any): ErrorResponseBody {\n    return {\n        detail: 'Something went wrong',\n        errors: ['Bad Request'],\n        status: 400,\n        title: 'Error',\n        ...error,\n    };\n}\n\nexport function getTimeoutResponse(): Response<string> {\n    return {\n        body: '',\n        headers: {},\n        status: 0,\n        statusText: '',\n    };\n}\n"
  },
  {
    "path": "packages/core/src/common/http-request/sdk-version-headers.ts",
    "content": "export const SDK_VERSION_HEADERS = { 'X-Checkout-SDK-Version': LIBRARY_VERSION };\n"
  },
  {
    "path": "packages/core/src/common/iframe/iframe-event-listener.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport IframeEventListener from './iframe-event-listener';\n\nenum TestEventType {\n    Loaded = 'LOADED',\n    Complete = 'COMPLETE',\n    Error = 'ERROR',\n}\n\ninterface TestEventMap {\n    [TestEventType.Loaded]: { type: TestEventType.Loaded };\n    [TestEventType.Complete]: { type: TestEventType.Complete };\n    [TestEventType.Error]: { type: TestEventType.Error };\n}\n\ndescribe('IframeEventListener', () => {\n    let origin: string;\n    let eventEmitter: EventEmitter;\n    let listener: IframeEventListener<TestEventMap>;\n    let handleLoaded: () => void;\n    let handleComplete: () => void;\n\n    beforeEach(() => {\n        origin = document.location.origin;\n        listener = new IframeEventListener(origin);\n        eventEmitter = new EventEmitter();\n        handleLoaded = jest.fn();\n        handleComplete = jest.fn();\n\n        jest.spyOn(window, 'addEventListener').mockImplementation((type, eventListener) => {\n            const listener =\n                typeof eventListener === 'function' ? eventListener : () => eventListener;\n\n            return eventEmitter.addListener(type, listener);\n        });\n\n        jest.spyOn(window, 'removeEventListener').mockImplementation((type, eventListener) => {\n            const listener =\n                typeof eventListener === 'function' ? eventListener : () => eventListener;\n\n            return eventEmitter.removeListener(type, listener);\n        });\n\n        listener.listen();\n        listener.addListener(TestEventType.Loaded, handleLoaded);\n        listener.addListener(TestEventType.Complete, handleComplete);\n    });\n\n    it('triggers relevant listeners after receiving `message` event', () => {\n        eventEmitter.emit('message', { origin, data: { type: TestEventType.Loaded } });\n\n        expect(handleLoaded).toHaveBeenCalled();\n        expect(handleComplete).not.toHaveBeenCalled();\n    });\n\n    it('triggers relevant listeners with context data if provided', () => {\n        eventEmitter.emit('message', {\n            origin,\n            data: { type: TestEventType.Loaded, context: { id: '123' } },\n        });\n\n        expect(handleLoaded).toHaveBeenCalledWith({ type: TestEventType.Loaded }, { id: '123' });\n    });\n\n    it('responds to event with www subdomain', () => {\n        eventEmitter.emit('message', {\n            origin: origin.replace('http://', 'http://www.'),\n            data: { type: TestEventType.Loaded },\n        });\n\n        expect(handleLoaded).toHaveBeenCalled();\n        expect(handleComplete).not.toHaveBeenCalled();\n    });\n\n    it('does not respond to event with unrecognized origin', () => {\n        eventEmitter.emit('message', {\n            origin: 'https://foobar.com',\n            data: {\n                type: TestEventType.Loaded,\n            },\n        });\n\n        expect(handleLoaded).not.toHaveBeenCalled();\n    });\n\n    it('triggers relevant listeners when origin URL has trailing slash', () => {\n        listener = new IframeEventListener(`${origin}/`);\n        listener.listen();\n        listener.addListener(TestEventType.Loaded, handleLoaded);\n\n        eventEmitter.emit('message', { origin, data: { type: TestEventType.Loaded } });\n\n        expect(handleLoaded).toHaveBeenCalled();\n    });\n\n    it('does not respond to invalid event', () => {\n        eventEmitter.emit('message', { origin, data: { type: 'FOOBAR' } });\n\n        expect(handleLoaded).not.toHaveBeenCalled();\n        expect(handleComplete).not.toHaveBeenCalled();\n    });\n\n    it('stops listening to `message` event', () => {\n        listener.stopListen();\n\n        eventEmitter.emit('message', { origin, data: { type: TestEventType.Loaded } });\n        eventEmitter.emit('message', { origin, data: { type: TestEventType.Complete } });\n\n        expect(handleLoaded).not.toHaveBeenCalled();\n        expect(handleComplete).not.toHaveBeenCalled();\n    });\n\n    it('removes specific event listener', () => {\n        listener.removeListener(TestEventType.Loaded, handleLoaded);\n\n        eventEmitter.emit('message', { origin, data: { type: TestEventType.Loaded } });\n        eventEmitter.emit('message', { origin, data: { type: TestEventType.Complete } });\n\n        expect(handleLoaded).not.toHaveBeenCalled();\n        expect(handleComplete).toHaveBeenCalled();\n    });\n\n    it('does nothing if trying to remove non-existent listener', () => {\n        expect(() => listener.removeListener(TestEventType.Error, () => {})).not.toThrow();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/iframe/iframe-event-listener.ts",
    "content": "import { bindDecorator as bind } from '@bigcommerce/checkout-sdk/utility';\n\nimport { appendWww, parseUrl } from '../url';\n\nimport { IframeEventMap } from './iframe-event';\nimport isIframeEvent from './is-iframe-event';\n\nexport default class IframeEventListener<\n    TEventMap extends IframeEventMap<keyof TEventMap>,\n    TContext = undefined,\n> {\n    private _isListening: boolean;\n    private _listeners: EventListeners<TEventMap, TContext>;\n    private _sourceOrigins: string[];\n\n    constructor(sourceOrigin: string) {\n        this._sourceOrigins = [\n            parseUrl(sourceOrigin).origin,\n            appendWww(parseUrl(sourceOrigin)).origin,\n        ];\n        this._isListening = false;\n        this._listeners = {};\n    }\n\n    listen(): void {\n        if (this._isListening) {\n            return;\n        }\n\n        this._isListening = true;\n\n        window.addEventListener('message', this._handleMessage);\n    }\n\n    stopListen(): void {\n        if (!this._isListening) {\n            return;\n        }\n\n        this._isListening = false;\n\n        window.removeEventListener('message', this._handleMessage);\n    }\n\n    addListener<TType extends keyof TEventMap>(\n        type: TType,\n        listener: (event: TEventMap[TType], context?: TContext) => void,\n    ): void {\n        let listeners = this._listeners[type];\n\n        if (!listeners) {\n            this._listeners[type] = listeners = [];\n        }\n\n        if (listeners.indexOf(listener) === -1) {\n            listeners.push(listener);\n        }\n    }\n\n    removeListener<TType extends keyof TEventMap>(\n        type: TType,\n        listener: (event: TEventMap[TType], context?: TContext) => void,\n    ): void {\n        const listeners = this._listeners[type];\n\n        if (!listeners) {\n            return;\n        }\n\n        const index = listeners.indexOf(listener);\n\n        if (index >= 0) {\n            listeners.splice(index, 1);\n        }\n    }\n\n    trigger<TType extends keyof TEventMap>(event: TEventMap[TType], context?: TContext): void {\n        const listeners = this._listeners[event.type];\n\n        if (!listeners) {\n            return;\n        }\n\n        listeners.forEach((listener) => (context ? listener(event, context) : listener(event)));\n    }\n\n    @bind\n    private _handleMessage(messageEvent: MessageEvent): void {\n        if (\n            this._sourceOrigins.indexOf(messageEvent.origin) === -1 ||\n            !isIframeEvent(messageEvent.data as TEventMap[keyof TEventMap], messageEvent.data.type)\n        ) {\n            return;\n        }\n\n        const { context, ...event } = messageEvent.data;\n\n        this.trigger(event, context);\n    }\n}\n\nexport type EventListeners<TEventMap, TContext = undefined> = {\n    [key in keyof TEventMap]?: Array<(event: TEventMap[key], context?: TContext) => void>;\n};\n"
  },
  {
    "path": "packages/core/src/common/iframe/iframe-event-poster.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport IframeEvent from './iframe-event';\nimport IframeEventPoster from './iframe-event-poster';\nimport isIframeEvent from './is-iframe-event';\n\ndescribe('IframeEventPoster', () => {\n    let eventEmitter: EventEmitter;\n    let origin: string;\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n        origin = 'https://mybigcommerce.com';\n\n        jest.spyOn(window, 'addEventListener').mockImplementation((type, eventListener) => {\n            const listener =\n                typeof eventListener === 'function' ? eventListener : () => eventListener;\n\n            return eventEmitter.addListener(type, listener);\n        });\n    });\n\n    it('posts event to target window', () => {\n        const message = { type: 'FOOBAR' };\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent>(origin, targetWindow);\n\n        jest.spyOn(targetWindow, 'postMessage');\n\n        poster.post(message);\n\n        expect(targetWindow.postMessage).toHaveBeenCalledWith(message, origin);\n    });\n\n    it('posts event with context data if provided', () => {\n        const message = { type: 'FOOBAR' };\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent, { id: string }>(origin, targetWindow);\n\n        jest.spyOn(targetWindow, 'postMessage');\n\n        poster.setContext({ id: '123' });\n        poster.post(message);\n\n        expect(targetWindow.postMessage).toHaveBeenCalledWith(\n            { ...message, context: { id: '123' } },\n            origin,\n        );\n    });\n\n    it('strips out irrelevant information from origin URL', () => {\n        const message = { type: 'FOOBAR' };\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent>(`${origin}/url/path`, targetWindow);\n\n        jest.spyOn(targetWindow, 'postMessage');\n\n        poster.post(message);\n\n        expect(targetWindow.postMessage).toHaveBeenCalledWith(message, origin);\n    });\n\n    it('does not post event to target window if it is same as current window', () => {\n        const message = { type: 'FOOBAR' };\n        const targetWindow = window;\n        const poster = new IframeEventPoster<IframeEvent>(origin, targetWindow);\n\n        jest.spyOn(window, 'postMessage');\n\n        poster.post(message);\n\n        expect(window.postMessage).not.toHaveBeenCalledWith(message, origin);\n    });\n\n    it('returns nothing if success / error event type is not provided', () => {\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent>(origin, targetWindow);\n\n        expect(poster.post({ type: 'FOOBAR_REQUEST' })).toBeUndefined();\n    });\n\n    it('returns promise if success / error event type is provided', () => {\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent>(origin, targetWindow);\n\n        expect(\n            poster.post(\n                { type: 'FOOBAR_REQUEST' },\n                { errorType: 'FOOBAR_ERROR', successType: 'FOOBAR_SUCCESS' },\n            ),\n        ).toBeInstanceOf(Promise);\n    });\n\n    it('resolves promise if success event is received', async () => {\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent>(origin, targetWindow);\n\n        jest.spyOn(targetWindow, 'postMessage').mockImplementation((message) => {\n            if (isIframeEvent(message, 'FOOBAR_REQUEST')) {\n                eventEmitter.emit('message', {\n                    origin,\n                    data: { type: 'FOOBAR_SUCCESS', payload: '123' },\n                });\n            }\n        });\n\n        expect(\n            await poster.post(\n                { type: 'FOOBAR_REQUEST' },\n                { errorType: 'FOOBAR_ERROR', successType: 'FOOBAR_SUCCESS' },\n            ),\n        ).toEqual({ type: 'FOOBAR_SUCCESS', payload: '123' });\n    });\n\n    it('rejects promise if error event is received', async () => {\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent>(origin, targetWindow);\n\n        jest.spyOn(targetWindow, 'postMessage').mockImplementation((message) => {\n            if (isIframeEvent(message, 'FOOBAR_REQUEST')) {\n                eventEmitter.emit('message', {\n                    origin,\n                    data: { type: 'FOOBAR_ERROR', payload: 'Unexpected error' },\n                });\n            }\n        });\n\n        try {\n            await poster.post(\n                { type: 'FOOBAR_REQUEST' },\n                { errorType: 'FOOBAR_ERROR', successType: 'FOOBAR_SUCCESS' },\n            );\n        } catch (event) {\n            expect(event).toEqual({ type: 'FOOBAR_ERROR', payload: 'Unexpected error' });\n        }\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/iframe/iframe-event-poster.ts",
    "content": "import { fromEvent } from 'rxjs';\nimport { filter, map, take } from 'rxjs/operators';\n\nimport { parseUrl } from '../url';\n\nimport IframeEvent from './iframe-event';\nimport isIframeEvent from './is-iframe-event';\n\nexport interface IframeEventPostOptions<\n    TSuccessEvent extends IframeEvent,\n    TErrorEvent extends IframeEvent,\n> {\n    errorType?: TErrorEvent['type'];\n    successType?: TSuccessEvent['type'];\n}\n\nexport default class IframeEventPoster<TEvent, TContext = undefined> {\n    private _targetOrigin: string;\n\n    constructor(targetOrigin: string, private _targetWindow?: Window, private _context?: TContext) {\n        this._targetOrigin = targetOrigin === '*' ? '*' : parseUrl(targetOrigin).origin;\n    }\n\n    post(event: TEvent): void;\n    post<\n        TSuccessEvent extends IframeEvent = IframeEvent,\n        TErrorEvent extends IframeEvent = IframeEvent,\n    >(\n        event: TEvent,\n        options: IframeEventPostOptions<TSuccessEvent, TErrorEvent>,\n    ): Promise<TSuccessEvent>;\n    post<\n        TSuccessEvent extends IframeEvent = IframeEvent,\n        TErrorEvent extends IframeEvent = IframeEvent,\n    >(\n        event: TEvent,\n        options?: IframeEventPostOptions<TSuccessEvent, TErrorEvent>,\n    ): Promise<TSuccessEvent> | void {\n        const targetWindow = this._targetWindow;\n\n        if (window === targetWindow) {\n            return;\n        }\n\n        if (!targetWindow) {\n            throw new Error('Unable to post message because target window is not set.');\n        }\n\n        const result =\n            options &&\n            fromEvent<MessageEvent>(window, 'message')\n                .pipe(\n                    filter(\n                        (event) =>\n                            event.origin === this._targetOrigin &&\n                            isIframeEvent(event.data, event.data.type) &&\n                            [options.successType, options.errorType].indexOf(event.data.type) !==\n                                -1,\n                    ),\n                    map((event) => {\n                        if (options.errorType === event.data.type) {\n                            throw event.data;\n                        }\n\n                        return event.data;\n                    }),\n                    take(1),\n                )\n                .toPromise();\n\n        targetWindow.postMessage({ ...event, context: this._context }, this._targetOrigin);\n\n        return result;\n    }\n\n    setTarget(window: Window) {\n        this._targetWindow = window;\n    }\n\n    setContext(context: TContext) {\n        this._context = context;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/iframe/iframe-event.ts",
    "content": "export default interface IframeEvent<TType = string, TPayload = any> {\n    type: TType;\n    payload?: TPayload;\n}\n\nexport type IframeEventMap<TType extends string | number | symbol = string> = {\n    [key in TType]: IframeEvent<TType>;\n};\n"
  },
  {
    "path": "packages/core/src/common/iframe/iframe-resizer.spec.ts",
    "content": "/* eslint-disable @typescript-eslint/no-var-requires */\njest.mock('iframe-resizer', () => {\n    window.addEventListener('resize', () => {});\n\n    return {\n        iframeResizer: jest.fn(),\n    };\n});\n\ndescribe('iframeResizer()', () => {\n    const options = { scrolling: false };\n    const iframe = document.createElement('iframe');\n\n    it('does not set up resizer listener until it is used', () => {\n        jest.spyOn(window, 'addEventListener');\n\n        const { iframeResizer } = require('./iframe-resizer');\n\n        expect(window.addEventListener).not.toHaveBeenCalledWith('resize', expect.any(Function));\n\n        iframeResizer(options, iframe);\n\n        expect(window.addEventListener).toHaveBeenCalledWith('resize', expect.any(Function));\n\n        (window.addEventListener as jest.Mock).mockReset();\n    });\n\n    it('passes parameter to original iframe resizer', () => {\n        const { iframeResizer: originalIframeResizer } = require('iframe-resizer');\n        const { iframeResizer } = require('./iframe-resizer');\n\n        iframeResizer(options, iframe);\n\n        expect(originalIframeResizer).toHaveBeenCalledWith(options, iframe);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/iframe/iframe-resizer.ts",
    "content": "import { IFrameComponent, IFrameOptions } from 'iframe-resizer';\n\nexport {\n    HeightCalculationMethod,\n    IFrameComponent,\n    IFrameMessageData,\n    IFrameObject,\n    IFrameOptions,\n    IFramePage,\n    IFramePageOptions,\n    IFrameResizedData,\n    IFrameScrollData,\n    PageInfo,\n    WidthCalculationMethod,\n} from 'iframe-resizer';\n\n// The reason why we are wrapping the original `iframeResizer` function imported\n// from the package is because the package sets up event listeners (window\n// resize etc...) as soon as the package is imported. Therefore, to defer the\n// side effect from happening until the function is actually being used, we are\n// importing the package inside this function. To minimise the chance of\n// importing the original package inadvertently, we are also re-exporting all of\n// its public interfaces. The re-exports do not cause any side effect because\n// they are plain TypeScript interfaces; meaning they are only used for type\n// checks rather than for code output.\nexport function iframeResizer(\n    options: IFrameOptions,\n    target: string | HTMLElement,\n): IFrameComponent[] {\n    /* eslint-disable @typescript-eslint/no-var-requires */\n    const { iframeResizer: originalIframeResizer } = require('iframe-resizer');\n\n    return originalIframeResizer(options, target);\n}\n\n// We also need to wrap the original `iframeResizer.contentWindow` because\n// similarly the package sets up event listeners as soon as the package gets\n// imported. Another reason is that if it is imported at the top level using a\n// regular import statement, it will be stripped out by Webpack as it is\n// considered as \"unused\", unless we explicitly mark it as a package that\n// produces side effects.\nexport function setupContentWindowForIframeResizer(): void {\n    require('iframe-resizer/js/iframeResizer.contentWindow');\n}\n"
  },
  {
    "path": "packages/core/src/common/iframe/index.ts",
    "content": "export * from './iframe-resizer';\n\nexport { default as IframeEventListener, EventListeners } from './iframe-event-listener';\nexport { default as IframeEventPoster } from './iframe-event-poster';\nexport { default as IframeEvent, IframeEventMap } from './iframe-event';\nexport { default as isIframeEvent } from './is-iframe-event';\n"
  },
  {
    "path": "packages/core/src/common/iframe/is-iframe-event.spec.ts",
    "content": "import isIframeEvent from './is-iframe-event';\n\ndescribe('isIframeEvent()', () => {\n    it('returns true if object has matching `type`', () => {\n        expect(isIframeEvent({ type: 'FOOBAR' }, 'FOOBAR')).toBe(true);\n    });\n\n    it('returns false if object does not have matching `type`', () => {\n        expect(isIframeEvent({ type: 'FOOBAR' }, 'FOO')).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/iframe/is-iframe-event.ts",
    "content": "import IframeEvent from './iframe-event';\n\nexport default function isIframeEvent<TEvent extends IframeEvent<TType>, TType extends string>(\n    object: any,\n    type: TType,\n): object is TEvent {\n    return object.type === type;\n}\n"
  },
  {
    "path": "packages/core/src/common/log/console-logger.spec.ts",
    "content": "import ConsoleLogger from './console-logger';\n\n// tslint:disable:no-console\ndescribe('ConsoleLogger', () => {\n    let logger: ConsoleLogger;\n\n    beforeEach(() => {\n        jest.spyOn(console, 'log').mockImplementation();\n        jest.spyOn(console, 'info').mockImplementation();\n        jest.spyOn(console, 'warn').mockImplementation();\n        jest.spyOn(console, 'error').mockImplementation();\n        jest.spyOn(console, 'debug').mockImplementation();\n\n        logger = new ConsoleLogger(console);\n    });\n\n    describe('#log()', () => {\n        it('logs messages to console', () => {\n            logger.log('hello', 'world');\n\n            // eslint-disable-next-line no-console\n            expect(console.log).toHaveBeenCalled();\n        });\n\n        it('does not throw an error if console is unavailable', () => {\n            logger = new ConsoleLogger(undefined);\n\n            expect(() => logger.log('hello', 'world')).not.toThrow();\n        });\n    });\n\n    describe('#info()', () => {\n        it('logs info messages to console', () => {\n            logger.info('hello', 'world');\n\n            // eslint-disable-next-line no-console\n            expect(console.info).toHaveBeenCalled();\n        });\n    });\n\n    describe('#warn()', () => {\n        it('logs warning messages to console', () => {\n            logger.warn('hello', 'world');\n\n            // eslint-disable-next-line no-console\n            expect(console.warn).toHaveBeenCalled();\n        });\n    });\n\n    describe('#error()', () => {\n        it('logs error messages to console', () => {\n            logger.error('hello', 'world');\n\n            // eslint-disable-next-line no-console\n            expect(console.error).toHaveBeenCalled();\n        });\n    });\n\n    describe('#debug()', () => {\n        it('logs debug messages to console', () => {\n            logger.debug('hello', 'world');\n\n            // eslint-disable-next-line no-console\n            expect(console.debug).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/log/console-logger.ts",
    "content": "import Logger from './logger';\n\ntype keys = 'log' | 'info' | 'warn' | 'error' | 'debug';\n\nexport default class ConsoleLogger implements Logger {\n    constructor(private _console?: Console) {}\n\n    log(...messages: any[]): void {\n        this._logToConsole('log', ...messages);\n    }\n\n    info(...messages: any[]): void {\n        this._logToConsole('info', ...messages);\n    }\n\n    warn(...messages: any[]): void {\n        this._logToConsole('warn', ...messages);\n    }\n\n    error(...messages: any[]): void {\n        this._logToConsole('error', ...messages);\n    }\n\n    debug(...messages: any[]): void {\n        this._logToConsole('debug', ...messages);\n    }\n\n    private _logToConsole(type: keys, ...messages: any[]): void {\n        if (!this._console || !this._console[type]) {\n            return;\n        }\n\n        this._console[type].call(this._console, ...messages);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/log/create-logger.ts",
    "content": "import ConsoleLogger from './console-logger';\nimport Logger from './logger';\nimport NoopLogger from './noop-logger';\n\nexport default function createLogger(isEnabled = true): Logger {\n    if (!isEnabled) {\n        return new NoopLogger();\n    }\n\n    return new ConsoleLogger(console);\n}\n"
  },
  {
    "path": "packages/core/src/common/log/get-default-logger.ts",
    "content": "import { getEnvironment } from '../utility';\n\nimport createLogger from './create-logger';\nimport Logger from './logger';\n\nconst logger = createLogger(getEnvironment() !== 'test');\n\nexport default function getDefaultLogger(): Logger {\n    return logger;\n}\n"
  },
  {
    "path": "packages/core/src/common/log/index.spec.ts",
    "content": "import ConsoleLogger from './console-logger';\nimport NoopLogger from './noop-logger';\n\nimport { createLogger } from './index';\n\ndescribe('createLogger()', () => {\n    it('returns a console logger if logging is enabled', () => {\n        const logger = createLogger();\n\n        expect(logger instanceof ConsoleLogger).toBe(true);\n    });\n\n    it('returns a noop logger if logging is disabled', () => {\n        const logger = createLogger(false);\n\n        expect(logger instanceof NoopLogger).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/log/index.ts",
    "content": "export { default as createLogger } from './create-logger';\nexport { default as getDefaultLogger } from './get-default-logger';\n\nexport { default as Logger } from './logger';\nexport { default as NoopLogger } from './noop-logger';\n"
  },
  {
    "path": "packages/core/src/common/log/logger.ts",
    "content": "export default interface Logger {\n    log(...messages: any[]): void;\n\n    info(...messages: any[]): void;\n\n    warn(...messages: any[]): void;\n\n    error(...messages: any[]): void;\n\n    debug(...messages: any[]): void;\n}\n"
  },
  {
    "path": "packages/core/src/common/log/noop-logger.ts",
    "content": "import Logger from './logger';\n\nexport default class NoopLogger implements Logger {\n    log(): void {}\n\n    info(): void {}\n\n    warn(): void {}\n\n    error(): void {}\n\n    debug(): void {}\n}\n"
  },
  {
    "path": "packages/core/src/common/registry/factory.ts",
    "content": "type Factory<T> = () => T;\n\nexport default Factory;\n"
  },
  {
    "path": "packages/core/src/common/registry/index.ts",
    "content": "export { default as Registry, RegistryOptions } from './registry';\nexport { default as ResolveIdRegistry } from './resolve-id-registry';\nexport { default as Factory } from './factory';\n"
  },
  {
    "path": "packages/core/src/common/registry/registry.spec.ts",
    "content": "import { InvalidArgumentError } from '../error/errors';\n\nimport Registry from './registry';\n\ndescribe('Registry', () => {\n    it('returns registered instance', () => {\n        const registry = new Registry<{ name: string }>();\n\n        registry.register('foo', () => ({ name: 'Foo' }));\n        registry.register('bar', () => ({ name: 'Bar' }));\n\n        expect(registry.get('foo')).toEqual({ name: 'Foo' });\n        expect(registry.get('bar')).toEqual({ name: 'Bar' });\n    });\n\n    it('returns cached instance', () => {\n        const registry = new Registry();\n\n        registry.register('foo', () => ({ name: 'Foo' }));\n\n        expect(registry.get('foo')).toBe(registry.get('foo'));\n    });\n\n    it('returns unique cached instances', () => {\n        const registry = new Registry();\n\n        registry.register('foo', () => ({ name: 'Foo' }));\n\n        const instanceA = registry.get('foo', 'A');\n        const instanceB = registry.get('foo', 'B');\n\n        expect(instanceA).not.toBe(instanceB);\n        expect(instanceA).toEqual(instanceB);\n    });\n\n    it('returns default strategy if none found', () => {\n        const registry = new Registry();\n\n        registry.register('default', () => ({ name: 'bar' }));\n\n        expect(registry.get('foo')).toEqual({ name: 'bar' });\n    });\n\n    it('returns default strategy if key not provided', () => {\n        const registry = new Registry();\n\n        registry.register('default', () => ({ name: 'bar' }));\n\n        expect(registry.get()).toEqual({ name: 'bar' });\n    });\n\n    it('throws error if not able to return instance', () => {\n        const registry = new Registry();\n\n        expect(() => registry.get('foo')).toThrow(InvalidArgumentError);\n    });\n\n    it('throws error if already registered', () => {\n        const registry = new Registry();\n\n        registry.register('foo', () => ({ name: 'Foo' }));\n\n        expect(() => registry.register('foo', () => ({ name: 'Foo' }))).toThrow(\n            InvalidArgumentError,\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/registry/registry.ts",
    "content": "import { InvalidArgumentError } from '../error/errors';\n\nimport Factory from './factory';\n\nexport default class Registry<T, K extends string = string> {\n    private _factories: { [key: string]: Factory<T> };\n    private _instances: { [key: string]: T };\n    private _defaultToken: string;\n    private _useFallback: string | boolean;\n    private _tokenResolver: (\n        token: string,\n        registeredTokens: string[],\n        exactMatch?: boolean,\n    ) => string | undefined;\n\n    constructor(options?: RegistryOptions) {\n        this._factories = {};\n        this._instances = {};\n        this._defaultToken = options?.defaultToken ?? 'default';\n        this._useFallback = options?.useFallback ?? true;\n        this._tokenResolver = options?.tokenResolver ?? ((token) => token);\n    }\n\n    get(token?: K, cacheToken?: string): T {\n        try {\n            return this._getInstance(\n                token || this._defaultToken,\n                cacheToken || token || this._defaultToken,\n            );\n        } catch (error) {\n            if (!this._useFallback) {\n                throw error;\n            }\n\n            return this._getInstance(this._defaultToken, cacheToken || this._defaultToken);\n        }\n    }\n\n    getFactory(token: string, exactMatch?: boolean): Factory<T> | undefined {\n        const resolvedToken = this._tokenResolver(token, Object.keys(this._factories), exactMatch);\n        const factory = resolvedToken ? this._factories[resolvedToken] : undefined;\n\n        return factory;\n    }\n\n    register(token: K, factory: Factory<T>): void {\n        if (this._hasFactory(token)) {\n            throw new InvalidArgumentError(`'${token}' is already registered.`);\n        }\n\n        this._factories[token] = factory;\n    }\n\n    protected _hasFactory(token: string): boolean {\n        return !!this._factories[token];\n    }\n\n    private _hasInstance(token: string): boolean {\n        return !!this._instances[token];\n    }\n\n    private _getInstance(token: string, cacheToken: string): T {\n        if (!this._hasInstance(cacheToken)) {\n            const factory = this.getFactory(token);\n\n            if (!factory) {\n                throw new InvalidArgumentError(`'${token}' is not registered.`);\n            }\n\n            this._instances[cacheToken] = factory();\n        }\n\n        return this._instances[cacheToken];\n    }\n}\n\nexport interface RegistryOptions {\n    defaultToken?: string;\n    useFallback?: boolean;\n    tokenResolver?(token: string, registeredTokens: string[]): string | undefined;\n}\n"
  },
  {
    "path": "packages/core/src/common/registry/resolve-id-registry.spec.ts",
    "content": "import { getDefaultLogger } from '../log';\n\nimport ResolveIdRegistry from './resolve-id-registry';\n\ndescribe('ResolveIdRegistry', () => {\n    interface TestStrategy {\n        execute(): boolean;\n    }\n\n    interface TestResolveId {\n        [key: string]: unknown;\n        id?: string;\n        type?: string;\n    }\n\n    class FooStrategy implements TestStrategy {\n        execute() {\n            return true;\n        }\n    }\n\n    class BarStrategy implements TestStrategy {\n        execute() {\n            return true;\n        }\n    }\n\n    class FoobarStrategy implements TestStrategy {\n        execute() {\n            return true;\n        }\n    }\n\n    class DefaultStrategy implements TestStrategy {\n        execute() {\n            return true;\n        }\n    }\n\n    class StrategyA implements TestStrategy {\n        execute() {\n            return true;\n        }\n    }\n\n    let subject: ResolveIdRegistry<TestStrategy, TestResolveId>;\n\n    beforeEach(() => {\n        subject = new ResolveIdRegistry();\n        subject.register({ id: 'foo' }, () => new FooStrategy());\n        subject.register({ type: 'bar' }, () => new BarStrategy());\n        subject.register({ id: 'foo', type: 'bar' }, () => new FoobarStrategy());\n        subject.register({ default: true }, () => new DefaultStrategy());\n    });\n\n    it('returns strategy if able to resolve to one by id', () => {\n        expect(subject.get({ id: 'foo', gateway: null, type: undefined })).toBeInstanceOf(\n            FooStrategy,\n        );\n    });\n\n    it('returns strategy if able to resolve to one by type', () => {\n        expect(subject.get({ id: undefined, gateway: undefined, type: 'bar' })).toBeInstanceOf(\n            BarStrategy,\n        );\n    });\n\n    it('returns strategy if able to resolve to one by id and type', () => {\n        expect(subject.get({ id: 'foo', type: 'bar' })).toBeInstanceOf(FoobarStrategy);\n    });\n\n    it('throws error if unable to resolve to one when useFallback is false', () => {\n        expect(() => subject.get({ type: 'hello' })).toThrow();\n    });\n\n    it('returns default strategy if unable to resolve to one when useFallback is true', () => {\n        subject = new ResolveIdRegistry(true);\n        subject.register({ default: true }, () => new DefaultStrategy());\n\n        expect(subject.get({ type: 'bigbigpaypay' })).toBeInstanceOf(DefaultStrategy);\n    });\n\n    it('returns new strategy instance if multiple methods fallback to default strategy', () => {\n        subject = new ResolveIdRegistry(true);\n        subject.register({ default: true }, () => new DefaultStrategy());\n\n        expect(subject.get({ type: 'bigbigpay' })).toBeInstanceOf(DefaultStrategy);\n        expect(subject.get({ type: 'bigpaypay' })).toBeInstanceOf(DefaultStrategy);\n        expect(subject.get({ type: 'bigbigpay' })).not.toBe(subject.get({ type: 'bigpaypay' }));\n    });\n\n    it('returns new strategy instance if multiple methods fallback to default strategy', () => {\n        subject = new ResolveIdRegistry(true);\n        subject.register({ default: true }, () => new DefaultStrategy());\n\n        expect(subject.get({ type: 'bigbigpay' })).toBeInstanceOf(DefaultStrategy);\n        expect(subject.get({ type: 'bigpaypay' })).toBeInstanceOf(DefaultStrategy);\n        expect(subject.get({ type: 'bigbigpay' })).not.toBe(subject.get({ type: 'bigpaypay' }));\n    });\n\n    it('returns correct strategy for a entered registry', () => {\n        const subject = new ResolveIdRegistry(true);\n        const registryKey1 = { id: 'credit_card', gateway: 'bluesnap' };\n        const registryKey2 = { type: 'PAYMENT_TYPE_HOSTED' };\n\n        subject.register(registryKey1, () => new StrategyA());\n        subject.register(registryKey2, () => new BarStrategy());\n\n        const query = { id: 'credit_card', gateway: 'barclaycard', type: 'PAYMENT_TYPE_HOSTED' };\n\n        expect(subject.get(query)).toBeInstanceOf(BarStrategy);\n    });\n\n    it('returns correct strategy for a entered registry if gateway passed is null', () => {\n        const subject = new ResolveIdRegistry(true);\n        const registryKey1 = { id: 'credit_card', gateway: 'bluesnap' };\n        const registryKey2 = { id: 'credit_card' };\n\n        subject.register(registryKey1, () => new StrategyA());\n        subject.register(registryKey2, () => new BarStrategy());\n\n        const query = { id: 'credit_card', gateway: null, type: 'PAYMENT_TYPE_HOSTED' };\n\n        expect(subject.get(query)).toBeInstanceOf(BarStrategy);\n    });\n\n    it('returns correct strategy for a entered registry when entry is with type', () => {\n        const subject = new ResolveIdRegistry(true);\n        const registryKey1 = { id: 'credit_card', gateway: 'bluesnap' };\n        const registryKey2 = { id: 'card', gateway: 'barclaycard' };\n        const registryKey3 = { type: 'PAYMENT_TYPE_HOSTED' };\n\n        subject.register(registryKey1, () => new StrategyA());\n        subject.register(registryKey2, () => new BarStrategy());\n        subject.register(registryKey3, () => new FooStrategy());\n\n        const query = { id: 'credit_card', gateway: 'barclaycard', type: 'PAYMENT_TYPE_HOSTED' };\n\n        expect(subject.get(query)).toBeInstanceOf(FooStrategy);\n    });\n\n    it('throws an error if two matches are returned with same weight', () => {\n        const subject = new ResolveIdRegistry(true);\n        const registryKey1 = { id: 'credit_card' };\n        const registryKey2 = { type: 'PAYMENT_TYPE_HOSTED' };\n\n        const logger = getDefaultLogger();\n\n        jest.spyOn(logger, 'warn');\n        global.process.env.NODE_ENV = 'development';\n\n        subject.register(registryKey1, () => new StrategyA());\n        subject.register(registryKey2, () => new BarStrategy());\n\n        const query = { id: 'credit_card', gateway: 'barclaycard', type: 'PAYMENT_TYPE_HOSTED' };\n\n        subject.get(query);\n\n        expect(logger.warn).toHaveBeenCalled();\n    });\n\n    it('returns none if no exact match is found', () => {\n        subject = new ResolveIdRegistry(true);\n        subject.register({ default: true }, () => new DefaultStrategy());\n        subject.register({ id: 'foo' }, () => new FooStrategy());\n        subject.register({ type: 'bar' }, () => new BarStrategy());\n\n        expect(subject.getFactory({ type: 'bigbigpaypay' }, true)).toBeUndefined();\n        expect(subject.getFactory({ id: 'foo', type: 'bar' }, true)).toBeUndefined();\n    });\n\n    it('returns none if query is a subset of a registered token', () => {\n        subject = new ResolveIdRegistry(true);\n        subject.register(\n            { id: 'credit_card', gateway: 'bluesnapdirect' } as TestResolveId,\n            () => new FooStrategy(),\n        );\n\n        expect(\n            subject.getFactory({ gateway: 'bluesnapdirect' } as TestResolveId, true),\n        ).toBeUndefined();\n    });\n\n    it('returns exact match even when a more specific token with a shared key is registered first', () => {\n        subject = new ResolveIdRegistry(true);\n\n        const fooFactory = () => new FooStrategy();\n        const barFactory = () => new BarStrategy();\n\n        subject.register({ gateway: 'apms', id: 'foo' } as TestResolveId, fooFactory);\n        subject.register({ id: 'foo' } as TestResolveId, barFactory);\n\n        expect(subject.getFactory({ id: 'foo' } as TestResolveId, true)).toBe(barFactory);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/registry/resolve-id-registry.ts",
    "content": "import { getDefaultLogger } from '../log';\nimport { getEnvironment } from '../utility';\n\nimport Factory from './factory';\nimport Registry from './registry';\n\nexport default class ResolveIdRegistry<TType, TToken extends { [key: string]: unknown }> {\n    private _registry: Registry<TType>;\n\n    constructor(private _useFallback = false) {\n        this._registry = new Registry({\n            tokenResolver: this._resolveToken.bind(this),\n            defaultToken: this._encodeToken({ default: true } as unknown as TToken),\n            useFallback: this._useFallback,\n        });\n    }\n\n    get(resolveId: TToken): TType {\n        return this._registry.get(this._encodeToken(resolveId));\n    }\n\n    getFactory(resolveId: TToken, exactMatch?: boolean): Factory<TType> | undefined {\n        try {\n            return this._registry.getFactory(this._encodeToken(resolveId), exactMatch);\n        } catch (error) {\n            return undefined;\n        }\n    }\n\n    getUseFallback(): boolean {\n        return this._useFallback;\n    }\n\n    register(resolveId: TToken, factory: Factory<TType>): void {\n        this._registry.register(this._encodeToken(resolveId), factory);\n    }\n\n    private _encodeToken(resolveId: TToken): string {\n        return btoa(JSON.stringify(resolveId));\n    }\n\n    private _decodeToken(token: string): TToken {\n        return JSON.parse(atob(token));\n    }\n\n    private _resolveToken(\n        token: string,\n        registeredTokens: string[],\n        exactMatch?: boolean,\n    ): string | undefined {\n        const query = this._decodeToken(token);\n\n        const results: Array<{\n            token: string;\n            matches: number;\n            default: boolean;\n            totalKeys: number;\n        }> = [];\n\n        registeredTokens.forEach((registeredToken) => {\n            const resolverId = this._decodeToken(registeredToken);\n\n            const result = {\n                token: registeredToken,\n                matches: 0,\n                default: false,\n                totalKeys: Object.keys(resolverId).length,\n            };\n\n            for (const [key, value] of Object.entries(resolverId)) {\n                if (key in query && query[key] !== value) {\n                    result.matches = 0;\n                    break;\n                }\n\n                if (key in query && query[key] === value) {\n                    result.matches++;\n                }\n\n                if (key === 'default' && value === true) {\n                    result.default = true;\n                }\n            }\n\n            results.push(result);\n        });\n\n        const matchedResults = results\n            .sort((a, b) => b.matches - a.matches)\n            .filter((result) => result.matches > 0);\n\n        if (matchedResults.length > 1 && matchedResults[0].matches === matchedResults[1].matches) {\n            if (getEnvironment() === 'development') {\n                getDefaultLogger().warn(\n                    'The provided query matches at least two strategies with the same specificity. This warning can be resolved by making their resolve ID more specific.',\n                );\n            }\n        }\n\n        const queryKeyCount = Object.keys(query).length;\n\n        if (exactMatch) {\n            const exactResult = matchedResults.find(\n                (result) => result.matches === queryKeyCount && result.matches === result.totalKeys,\n            );\n\n            if (!exactResult) {\n                throw new Error(\n                    `Unable to resolve to a registered token with the provided token for ${JSON.stringify(\n                        query,\n                    )} with exact match.`,\n                );\n            }\n\n            return exactResult.token;\n        }\n\n        const matched = matchedResults[0];\n\n        if (matched && matched.token) {\n            return matched.token;\n        }\n\n        if (this._useFallback) {\n            const defaultToken = results.find((result) => result.default)?.token;\n\n            if (defaultToken) {\n                return defaultToken;\n            }\n        }\n\n        throw new Error(\n            `Unable to resolve to a registered token with the provided token for ${JSON.stringify(\n                query,\n            )}.`,\n        );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/selector/create-selector.spec.ts",
    "content": "import createSelector from './create-selector';\n\ndescribe('createSelector()', () => {\n    interface TestState {\n        messages: string[];\n    }\n\n    it('creates selector that returns memorized function if combiner returns function', () => {\n        const selector = createSelector(\n            (state: TestState) => state.messages[0],\n            (message) => (anotherMessage: string) => ({ message, anotherMessage }),\n        );\n\n        const resultFn = selector({ messages: ['a', 'b'] });\n        const resultFn2 = selector({ messages: ['a', 'b'] });\n\n        expect(resultFn('hello')).toEqual({ message: 'a', anotherMessage: 'hello' });\n        expect(resultFn('hello')).toBe(resultFn2('hello'));\n\n        expect(resultFn2('bye')).toEqual({ message: 'a', anotherMessage: 'bye' });\n        expect(resultFn2('bye')).not.toBe(resultFn('hello'));\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/selector/create-selector.ts",
    "content": "import { createSelector as defaultSelectorCreator } from 'reselect';\n\nimport withMemoizedCombiner from './with-memoized-combiner';\n\n/**\n * This is a decorated version of Reselect's default `createSelector` function.\n * If the return value of the combiner function is a function, it will create a\n * memorized version of that function and return it instead.\n */\nexport default withMemoizedCombiner(defaultSelectorCreator);\n"
  },
  {
    "path": "packages/core/src/common/selector/create-shallow-equal-selector.spec.ts",
    "content": "import createShallowEqualSelector from './create-shallow-equal-selector';\n\ndescribe('createShallowEqualSelector()', () => {\n    interface TestState {\n        items: Array<{ id: number }>;\n        messages: string[];\n    }\n\n    it('creates selector that does shallow comparison instead of strict comparison', () => {\n        const combiner = jest.fn((messages: string[]) => messages.join(', '));\n        const selector = createShallowEqualSelector((state: TestState) => state.messages, combiner);\n\n        const result = selector({ messages: ['a', 'b'], items: [] });\n        const result2 = selector({ messages: ['a', 'b'], items: [] });\n\n        expect(result).toBe('a, b');\n        expect(result2).toBe('a, b');\n        expect(combiner).toHaveBeenCalledTimes(1);\n\n        const result3 = selector({ messages: ['b', 'c'], items: [] });\n\n        expect(result3).toBe('b, c');\n        expect(combiner).toHaveBeenCalledTimes(2);\n    });\n\n    it('creates selector that does shallow comparison instead of deep comparison', () => {\n        const combiner = jest.fn((items: TestState['items']) =>\n            items.map((item) => item.id).join(', '),\n        );\n        const selector = createShallowEqualSelector((state: TestState) => state.items, combiner);\n\n        const item = { id: 1 };\n        const item2 = { id: 2 };\n        const result = selector({ items: [item, item2], messages: [] });\n        const result2 = selector({ items: [item, item2], messages: [] });\n\n        expect(result).toBe('1, 2');\n        expect(result2).toBe('1, 2');\n        expect(combiner).toHaveBeenCalledTimes(1);\n\n        const result3 = selector({ items: [{ ...item }, { ...item2 }], messages: [] });\n\n        expect(result3).toBe('1, 2');\n        expect(combiner).toHaveBeenCalledTimes(2);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/selector/create-shallow-equal-selector.ts",
    "content": "import { createSelectorCreator, defaultMemoize } from 'reselect';\nimport shallowEqual from 'shallowequal';\n\nimport withMemoizedCombiner from './with-memoized-combiner';\n\nconst createShallowEqualSelector = createSelectorCreator(defaultMemoize, (a: any, b: any) =>\n    shallowEqual(a, b),\n);\n\nexport default withMemoizedCombiner(createShallowEqualSelector);\n"
  },
  {
    "path": "packages/core/src/common/selector/index.ts",
    "content": "export { default as selectorDecorator } from './selector-decorator';\nexport { default as selector } from './selector-decorator';\nexport { default as createSelector } from './create-selector';\nexport { default as createShallowEqualSelector } from './create-shallow-equal-selector';\n"
  },
  {
    "path": "packages/core/src/common/selector/selector-decorator.spec.ts",
    "content": "import { default as selector } from './selector-decorator';\n\ndescribe('SelectorDecorator', () => {\n    @selector\n    class Foo {\n        constructor(private name: string) {}\n\n        serialize(message?: string): { name: string; message?: string } {\n            return { name: this.name, message };\n        }\n    }\n\n    // tslint:disable-next-line:max-classes-per-file\n    @selector\n    class Bar {\n        constructor(private name: string) {}\n\n        serialize(message?: string): { name: string; message?: string } {\n            return { name: this.name, message };\n        }\n    }\n\n    it('returns cached value if new value is same', () => {\n        const foo = new Foo('foo');\n\n        expect(foo.serialize()).toBe(foo.serialize());\n        expect(foo.serialize('Hello world')).toBe(foo.serialize('Hello world'));\n    });\n\n    it('returns cached value if new value is same with different instance', () => {\n        const foo = new Foo('foo');\n        const foo2 = new Foo('foo');\n\n        expect(foo.serialize()).toBe(foo2.serialize());\n        expect(foo.serialize('Hello world')).toBe(foo2.serialize('Hello world'));\n    });\n\n    it('returns cached value if new value is same as old except private members', () => {\n        const foo = new Foo('foo');\n        const foo2 = new Foo('foo');\n        const output = foo.serialize();\n\n        (output as any).$$internalProp = 123;\n        (output as any)._internalProp = 'abc';\n\n        expect(output).toBe(foo2.serialize());\n    });\n\n    it('returns different values if instances belong to different classes', () => {\n        const foo = new Foo('foo');\n        const bar = new Bar('foo');\n\n        expect(foo.serialize()).not.toBe(bar.serialize());\n        expect(foo.serialize('Hello world')).not.toBe(bar.serialize('Hello world'));\n    });\n\n    it('returns new value if different to cached value', () => {\n        const foo = new Foo('foo');\n\n        expect(foo.serialize()).not.toBe(foo.serialize('Hello world'));\n    });\n\n    it('returns new value if different to cached value with different instances', () => {\n        const foo = new Foo('foo');\n        const foo2 = new Foo('FOO');\n\n        expect(foo.serialize()).not.toBe(foo2.serialize());\n        expect(foo.serialize()).toBe(foo.serialize());\n        expect(foo2.serialize()).toBe(foo2.serialize());\n    });\n\n    it('allows object destruction', () => {\n        const foo = new Foo('foo');\n        const { serialize } = foo;\n\n        expect(serialize()).toBe(serialize());\n        expect(serialize()).toBe(foo.serialize());\n    });\n\n    it('returns expected value', () => {\n        const foo = new Foo('foo');\n\n        expect(foo.serialize('Hello world')).toEqual({\n            message: 'Hello world',\n            name: 'foo',\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/selector/selector-decorator.ts",
    "content": "import { memoize } from '@bigcommerce/memoize';\n\nimport { bindDecorator } from '@bigcommerce/checkout-sdk/utility';\n\nimport { CacheKeyResolver, isEqual, isPrivate } from '../utility';\n\n/**\n * Decorates a class by patching all of its methods to cache their return values\n * and return them if they are called again with the same set of parameters. The\n * decorator also binds all the methods to the calling instance so it can be\n * destructed.\n */\nexport default function selectorDecorator<T extends Constructor<object>>(target: T): T {\n    const decoratedTarget = class extends target {};\n\n    Object.getOwnPropertyNames(target.prototype).forEach((key) => {\n        const descriptor = Object.getOwnPropertyDescriptor(target.prototype, key);\n\n        if (!descriptor || key === 'constructor') {\n            return;\n        }\n\n        Object.defineProperty(\n            decoratedTarget.prototype,\n            key,\n            selectorMethodDecorator(target.prototype, key, descriptor),\n        );\n    });\n\n    return decoratedTarget;\n}\n\nfunction selectorMethodDecorator<T extends Method>(\n    target: object,\n    key: string,\n    descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T> {\n    if (typeof descriptor.value !== 'function') {\n        return descriptor;\n    }\n\n    let resolver = new CacheKeyResolver();\n    let method = descriptor.value;\n    let memoizedMethod = memoize(method);\n\n    return bindDecorator(target, key, {\n        get() {\n            const value = ((...args: any[]) => {\n                const cachedValue = memoizedMethod.call(this, ...args);\n\n                if (resolver.getUsedCount(...args) === 1) {\n                    return cachedValue;\n                }\n\n                const newValue = method.call(this, ...args);\n\n                if (isEqual(newValue, cachedValue, { keyFilter: (key) => !isPrivate(key) })) {\n                    return cachedValue;\n                }\n\n                memoizedMethod.cache.set(resolver.getKey(...args), newValue);\n\n                return newValue;\n            }) as T;\n\n            Object.defineProperty(this, key, { ...descriptor, value });\n\n            return value;\n        },\n        set(value) {\n            resolver = new CacheKeyResolver();\n            method = value;\n            memoizedMethod = memoize(method);\n        },\n    });\n}\n\nexport type Constructor<T> = new (...args: any[]) => T;\ntype Method = (...args: any[]) => any;\n"
  },
  {
    "path": "packages/core/src/common/selector/with-memoized-combiner.spec.ts",
    "content": "import { createSelector } from 'reselect';\n\nimport withMemoizedCombiner from './with-memoized-combiner';\n\ndescribe('createSelector()', () => {\n    interface TestState {\n        messages: string[];\n    }\n\n    it('decorates selector creator to return partially applied memoized combiner when selector is called', () => {\n        const selector = withMemoizedCombiner(createSelector)(\n            (state: TestState) => state.messages[0],\n            (message) => (anotherMessage: string) => ({ message, anotherMessage }),\n        );\n\n        const resultFn = selector({ messages: ['a', 'b'] });\n        const resultFn2 = selector({ messages: ['a', 'b'] });\n\n        expect(resultFn('hello')).toEqual({ message: 'a', anotherMessage: 'hello' });\n        expect(resultFn('hello')).toBe(resultFn2('hello'));\n\n        expect(resultFn2('bye')).toEqual({ message: 'a', anotherMessage: 'bye' });\n        expect(resultFn2('bye')).not.toBe(resultFn('hello'));\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/selector/with-memoized-combiner.ts",
    "content": "import { memoize } from '@bigcommerce/memoize';\nimport { createSelector as defaultSelectorCreator } from 'reselect';\n\n/**\n * Decorate selector creators with the ability to memoize the return value of\n * their combiner if it is a function (which effectively works as a partially\n * applied combiner).\n */\nexport default function withMemoizedCombiner<T extends typeof defaultSelectorCreator>(\n    creator: T,\n): T {\n    return ((...args: any[]) => {\n        const combiner = args.pop();\n\n        // Reselect's default `createSelector` has many overloads. To avoid having\n        // to redefine all of them, we're using `any` to bypass the typechecker.\n        return (creator as any)(...args, (...combinerArgs: any[]) => {\n            // Although there are many overloads, all of them have the last argument\n            // as the combiner.\n            const result = combiner(...combinerArgs);\n\n            if (typeof result === 'function') {\n                return memoize(result);\n            }\n\n            return result;\n        });\n    }) as T;\n}\n"
  },
  {
    "path": "packages/core/src/common/storage/browser-storage.spec.ts",
    "content": "import BrowserStorage from './browser-storage';\n\ndescribe('BrowserStorage', () => {\n    afterEach(() => {\n        localStorage.clear();\n    });\n\n    it('stores item with key that is prefixed with namespace', () => {\n        const storage = new BrowserStorage('foobar');\n\n        storage.setItem('message', 'Hello world');\n\n        expect(localStorage.getItem('foobar.message')).toEqual(JSON.stringify('Hello world'));\n    });\n\n    it('stores item as JSON string and restores it back to its original type when it is retrieved', () => {\n        const storage = new BrowserStorage('foobar');\n\n        storage.setItem('flag', true);\n        storage.setItem('numbers', [1, 2, 3]);\n\n        expect(storage.getItem('flag')).toBe(true);\n\n        expect(storage.getItem('numbers')).toEqual([1, 2, 3]);\n    });\n\n    it('retrieves item and removes it from storage', () => {\n        const storage = new BrowserStorage('foobar');\n\n        storage.setItem('message', 'Hello world');\n\n        expect(storage.getItemOnce('message')).toBe('Hello world');\n\n        expect(storage.getItem('message')).toBeNull();\n    });\n\n    it('removes item from storage', () => {\n        const storage = new BrowserStorage('foobar');\n\n        storage.setItem('message', 'Hello world');\n        storage.removeItem('message');\n\n        expect(storage.getItem('message')).toBeNull();\n    });\n\n    it('returns null for unknown key', () => {\n        const storage = new BrowserStorage('foobar');\n\n        expect(storage.getItem('abc')).toBeNull();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/storage/browser-storage.ts",
    "content": "import { default as storage } from 'local-storage-fallback';\n\nexport default class BrowserStorage {\n    constructor(private _namespace: string) {}\n\n    getItem<TValue = any>(key: string): TValue | null {\n        const rawValue = storage.getItem(this.withNamespace(key));\n\n        if (rawValue === null) {\n            return null;\n        }\n\n        try {\n            return JSON.parse(rawValue);\n        } catch (error) {\n            // Clean up invalid values\n            this.removeItem(this.withNamespace(key));\n\n            return null;\n        }\n    }\n\n    getItemOnce<TValue = any>(key: string): TValue | null {\n        const value = this.getItem(key);\n\n        this.removeItem(key);\n\n        return value;\n    }\n\n    setItem<TValue = any>(key: string, value: TValue): void {\n        return storage.setItem(this.withNamespace(key), JSON.stringify(value));\n    }\n\n    removeItem(key: string): void {\n        return storage.removeItem(this.withNamespace(key));\n    }\n\n    private withNamespace(key: string): string {\n        return `${this._namespace}.${key}`;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/storage/index.ts",
    "content": "export { default as BrowserStorage } from './browser-storage';\n"
  },
  {
    "path": "packages/core/src/common/types/card-validator.d.ts",
    "content": "import 'card-validator';\n\n// Merge @types/card-validator with missing methods. We probably don't need this\n// once the official package is updated with the latest type definitions.\ndeclare module 'card-validator' {\n    type CardBrand =\n        | 'american-express'\n        | 'diners-club'\n        | 'discover'\n        | 'jcb'\n        | 'maestro'\n        | 'mastercard'\n        | 'unionpay'\n        | 'visa'\n        | 'mada';\n\n    interface CreditCardTypeInfo {\n        patterns?: Array<number | [number, number]>;\n        niceType?: string;\n        type?: CardBrand;\n        prefixPattern?: RegExp;\n        exactPattern?: RegExp;\n        gaps?: number[];\n        lengths?: number[];\n        code?: {\n            name?: string;\n            size?: number;\n        };\n    }\n\n    interface CreditCardType {\n        types: { [type: string]: string };\n        (cardNumber: string): CreditCardTypeInfo[];\n        getTypeInfo(type: string): CreditCardTypeInfo;\n        updateCard(type: string, updates: Partial<CreditCardTypeInfo>): void;\n        addCard(config: Partial<CreditCardTypeInfo>): void;\n    }\n\n    export const creditCardType: CreditCardType;\n}\n"
  },
  {
    "path": "packages/core/src/common/types/index.ts",
    "content": "export { default as Omit } from './omit';\nexport { default as PartialDeep } from './partial-deep';\n"
  },
  {
    "path": "packages/core/src/common/types/omit.ts",
    "content": "type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;\n\nexport default Omit;\n"
  },
  {
    "path": "packages/core/src/common/types/partial-deep.ts",
    "content": "type PartialDeep<T> = {\n    [P in keyof T]?: PartialDeep<T[P]>;\n};\n\nexport default PartialDeep;\n"
  },
  {
    "path": "packages/core/src/common/types/webpack.d.ts",
    "content": "declare const LIBRARY_NAME: string;\ndeclare const LIBRARY_VERSION: string;\ndeclare const MANIFEST_JSON: AssetManifest;\n\ninterface AssetManifest {\n    version: string;\n    js: string[];\n}\n"
  },
  {
    "path": "packages/core/src/common/url/append-www.spec.ts",
    "content": "import appendWww from './append-www';\n\ndescribe('appendWww', () => {\n    it('appends www to URL', () => {\n        const url = {\n            hash: '',\n            hostname: 'foobar.com',\n            href: 'https://foobar.com:8080/bar?foo=foo',\n            origin: 'https://foobar.com:8080',\n            pathname: '/bar',\n            port: '8080',\n            protocol: 'https:',\n            search: '?foo=foo',\n        };\n\n        expect(appendWww(url)).toEqual({\n            ...url,\n            origin: 'https://www.foobar.com:8080',\n            hostname: 'www.foobar.com',\n            href: 'https://www.foobar.com:8080/bar?foo=foo',\n        });\n    });\n\n    it('does not www to URL if already has www', () => {\n        const url = {\n            hash: '',\n            hostname: 'www.foobar.com',\n            href: 'https://www.foobar.com:8080/bar?foo=foo',\n            origin: 'https://www.foobar.com:8080',\n            pathname: '/bar',\n            port: '8080',\n            protocol: 'https:',\n            search: '?foo=foo',\n        };\n\n        expect(appendWww(url)).toEqual(url);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/url/append-www.ts",
    "content": "import parseUrl from './parse-url';\nimport Url from './url';\n\nexport default function appendWww(url: Url): Url {\n    return parseUrl(\n        url.hostname.indexOf('www') === 0\n            ? url.href\n            : url.href.replace(url.hostname, `www.${url.hostname}`),\n    );\n}\n"
  },
  {
    "path": "packages/core/src/common/url/index.ts",
    "content": "export { default as appendWww } from './append-www';\nexport { default as parseUrl } from './parse-url';\nexport { default as Url } from './url';\n"
  },
  {
    "path": "packages/core/src/common/url/parse-url.spec.ts",
    "content": "import { InvalidArgumentError } from '../error/errors';\n\nimport parseUrl from './parse-url';\n\ndescribe('parseUrl()', () => {\n    it('parses URL string', () => {\n        expect(parseUrl('https://foobar.com:8080/hello/world?foo=1&bar=2#heading')).toEqual({\n            hash: '#heading',\n            hostname: 'foobar.com',\n            href: 'https://foobar.com:8080/hello/world?foo=1&bar=2#heading',\n            origin: 'https://foobar.com:8080',\n            pathname: '/hello/world',\n            port: '8080',\n            protocol: 'https:',\n            search: '?foo=1&bar=2',\n        });\n    });\n\n    it('throws error if URL is not absolute', () => {\n        expect(() => parseUrl('/hello/world')).toThrow(InvalidArgumentError);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/url/parse-url.ts",
    "content": "import { InvalidArgumentError } from '../error/errors';\n\nimport Url from './url';\n\nexport default function parseUrl(url: string): Url {\n    if (!/^(https?:)?\\/\\//.test(url)) {\n        throw new InvalidArgumentError('The provided URL must be absolute.');\n    }\n\n    // new URL() is not supported in IE11, use anchor tag instead\n    const anchor = document.createElement('a');\n\n    anchor.href = url;\n\n    // IE11 returns 80 or 443 for the port number depending on the URL scheme,\n    // even if the port number is not specified in the URL.\n    const port =\n        anchor.port && url.indexOf(`${anchor.hostname}:${anchor.port}`) !== -1 ? anchor.port : '';\n\n    return {\n        hash: anchor.hash,\n        hostname: anchor.hostname,\n        href: anchor.href,\n        origin: `${anchor.protocol}//${anchor.hostname}${port ? `:${port}` : ''}`,\n        pathname: anchor.pathname,\n        port,\n        protocol: anchor.protocol,\n        search: anchor.search,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/common/url/url.ts",
    "content": "export default interface Url {\n    hash: string;\n    hostname: string;\n    href: string;\n    origin: string;\n    pathname: string;\n    port: string;\n    protocol: string;\n    search: string;\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/array-replace.spec.ts",
    "content": "import arrayReplace from './array-replace';\n\ndescribe('arrayReplace()', () => {\n    it('replaces current array with new array if they are different', () => {\n        const currentArray = [1, 2];\n        const newArray = [3, 4];\n        const result = arrayReplace(currentArray, newArray);\n\n        expect(result).toBe(newArray);\n    });\n\n    it('retains current array if new array is same as current array', () => {\n        const currentArray = [1, 2];\n        const newArray = [1, 2];\n        const result = arrayReplace(currentArray, newArray);\n\n        expect(result).toBe(currentArray);\n    });\n\n    it('recursively retains current array if new array is same as current array', () => {\n        const currentArray = [1, ['a', 'b']];\n        const newArray = [2, ['a', 'b']];\n        const result = arrayReplace(currentArray, newArray);\n\n        expect(result).toEqual([2, ['a', 'b']]);\n        expect(result[1]).toBe(currentArray[1]);\n    });\n\n    it('retains entity in current array if it is same as entity in new array in same position', () => {\n        const currentArray = [{ id: 1 }, { id: 2 }];\n        const newArray = [{ id: 1 }, { id: 3 }];\n        const result = arrayReplace(currentArray, newArray);\n\n        expect(result).toEqual([{ id: 1 }, { id: 3 }]);\n        expect(result[0]).toBe(currentArray[0]);\n        expect(result[1]).toBe(newArray[1]);\n    });\n\n    it('recursively retains entity in current array if it is same as entity in new array in same position', () => {\n        const currentArray = [{ id: 1 }, { id: 2, items: [{ id: 'a' }, { id: 'b' }] }];\n        const newArray = [{ id: 3 }, { id: 2, items: [{ id: 'a' }, { id: 'c' }] }];\n        const result = arrayReplace(currentArray, newArray);\n\n        expect(result).toEqual([{ id: 3 }, { id: 2, items: [{ id: 'a' }, { id: 'c' }] }]);\n        // tslint:disable-next-line:no-non-null-assertion\n        expect(result[1].items![0]).toBe(currentArray[1].items![0]);\n    });\n\n    it('uses custom matcher to match objects between arrays', () => {\n        const currentArray = [{ identifier: 1 }, { identifier: 2 }];\n        const newArray = [{ identifier: 1 }, { identifier: 3 }];\n        const result = arrayReplace(currentArray, newArray, {\n            matchObject: (a, b) => a.identifier === b.identifier,\n        });\n\n        expect(result).toEqual([{ identifier: 1 }, { identifier: 3 }]);\n        expect(result[0]).toBe(currentArray[0]);\n        expect(result[1]).toBe(newArray[1]);\n    });\n\n    it('does not assume objects are equal if `id` is undefined', () => {\n        const currentArray = [{ id: undefined, altId: 'a', oldKey: 'oldA' }];\n        const newArray = [{ id: undefined, altId: 'c' }];\n\n        const result = arrayReplace(currentArray, newArray);\n\n        expect(result).toBe(newArray);\n    });\n\n    it('handles nested collections of objects', () => {\n        const currentArray = [\n            {\n                id: '5d49eb3897a7d',\n                shippingCost: 0,\n                handlingCost: 0,\n                couponDiscounts: [],\n                discounts: [],\n                lineItemIds: [\n                    '5193c8b5-752a-4369-aeb4-53f881871aa2',\n                    '0aa305d8-3549-4a96-94e7-8c2ee0f3c23b',\n                ],\n                shippingAddress: {\n                    firstName: 'Good',\n                    lastName: 'Shopper',\n                    email: '',\n                    company: 'BigShopper',\n                    address1: '685 Market St',\n                    address2: '',\n                    city: 'San Francisco',\n                    stateOrProvince: 'California',\n                    stateOrProvinceCode: 'CA',\n                    country: 'United States',\n                    countryCode: 'US',\n                    postalCode: '94105',\n                    phone: '5677891234',\n                    customFields: [],\n                },\n                availableShippingOptions: [],\n            },\n        ];\n\n        const newArray = [\n            {\n                id: '5d49eb3897a7d',\n                shippingCost: 0,\n                handlingCost: 0,\n                couponDiscounts: [],\n                discounts: [],\n                lineItemIds: [\n                    '5193c8b5-752a-4369-aeb4-53f881871aa2',\n                    '0aa305d8-3549-4a96-94e7-8c2ee0f3c23b',\n                ],\n                shippingAddress: {\n                    firstName: 'Good',\n                    lastName: 'Shopper',\n                    email: '',\n                    company: 'BigShopper',\n                    address1: '685 Market St',\n                    address2: '',\n                    city: 'San Francisco',\n                    stateOrProvince: 'California',\n                    stateOrProvinceCode: 'CA',\n                    country: 'United States',\n                    countryCode: 'US',\n                    postalCode: '94105',\n                    phone: '5677891234',\n                    customFields: [],\n                },\n                availableShippingOptions: [\n                    {\n                        id: '4dcbf24f457dd67d5f89bcf374e0bc9b',\n                        type: 'freeshipping',\n                        description: 'Free Shipping',\n                        imageUrl: '',\n                        cost: 0,\n                        transitTime: '',\n                        isRecommended: true,\n                        additionalDescription: '',\n                    },\n                ],\n            },\n        ];\n\n        const result = arrayReplace(currentArray, newArray);\n\n        expect(result).toEqual(newArray);\n        expect(result[0].shippingAddress).toBe(currentArray[0].shippingAddress);\n        expect(result[0].lineItemIds).toBe(currentArray[0].lineItemIds);\n        expect(result[0].availableShippingOptions).toBe(newArray[0].availableShippingOptions);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/array-replace.ts",
    "content": "import { isArray } from 'lodash';\n\nimport isPlainObject from './is-plain-object';\nimport objectMerge from './object-merge';\nimport replace from './replace';\n\nexport interface ArrayReplaceOptions {\n    matchObject(objectA: any, objectB: any): boolean;\n}\n\nfunction arrayReplace<T>(\n    currentArray: T[] | undefined,\n    newArray: T[],\n    options?: ArrayReplaceOptions,\n): T[];\nfunction arrayReplace<T>(\n    currentArray: T[],\n    newArray?: T[],\n    options?: ArrayReplaceOptions,\n): undefined;\nfunction arrayReplace<T>(\n    currentArray?: T[],\n    newArray?: T[],\n    options?: ArrayReplaceOptions,\n): T[] | undefined;\n\nfunction arrayReplace<T>(\n    currentArray?: T[],\n    newArray?: T[],\n    options?: ArrayReplaceOptions,\n): T[] | undefined {\n    const { matchObject = (a: any, b: any) => a.id !== undefined && a.id === b.id } = options || {};\n\n    // Return the new array if the current array does not exist\n    if (!currentArray) {\n        return newArray;\n    }\n\n    // If the new array does not exist, or the current array is strictly equal\n    // to the new array, exit early and return the current array so that the\n    // object reference doesn't change\n    if (!newArray || currentArray === newArray) {\n        return currentArray;\n    }\n\n    // Otherwise, try to replace the items of the current array with the new\n    // array. If the item from the two arrays are the same, keep the current\n    // one. Do it recursively until all arrays are replaced.\n    let sameAsCurrentCount = 0;\n    let sameAsNewCount = 0;\n\n    const countSameAsReplaced = <T>(replacedValue: T, currentValue: T, newValue: T): T => {\n        sameAsCurrentCount += replacedValue === currentValue ? 1 : 0;\n        sameAsNewCount += replacedValue === newValue ? 1 : 0;\n\n        return replacedValue;\n    };\n\n    const result = newArray.map((newItem, index) => {\n        const currentItem = currentArray && currentArray[index];\n\n        if (isPlainObject(currentItem) && isPlainObject(newItem)) {\n            if (matchObject(currentItem, newItem)) {\n                return countSameAsReplaced(objectMerge(currentItem, newItem), currentItem, newItem);\n            }\n\n            return countSameAsReplaced(replace(currentItem, newItem), currentItem, newItem);\n        }\n\n        if (isArray(currentItem) && isArray(newItem)) {\n            return countSameAsReplaced(arrayReplace(currentItem, newItem), currentItem, newItem);\n        }\n\n        return countSameAsReplaced(replace(currentItem, newItem), currentItem, newItem);\n    }) as T[];\n\n    // If all items in the result are identical to the current array, and the\n    // current array and the new array have the same size, simply return the\n    // current array instead of the result.\n    if (\n        sameAsCurrentCount === newArray.length &&\n        currentArray &&\n        currentArray.length === newArray.length\n    ) {\n        return currentArray;\n    }\n\n    // If all items in the result are identical to the new array, simply return\n    // the new array.\n    if (sameAsNewCount === newArray.length) {\n        return newArray;\n    }\n\n    return result;\n}\n\nexport default arrayReplace;\n"
  },
  {
    "path": "packages/core/src/common/utility/cache-key-maps.ts",
    "content": "export interface RootCacheKeyMap {\n    maps: ChildCacheKeyMap[];\n}\n\nexport interface IntermediateCacheKeyMap {\n    maps: ChildCacheKeyMap[];\n    parentMap: RootCacheKeyMap | IntermediateCacheKeyMap;\n    usedCount: number;\n    value: any;\n}\n\nexport interface TerminalCacheKeyMap extends IntermediateCacheKeyMap {\n    cacheKey: string;\n}\n\nexport type ChildCacheKeyMap = IntermediateCacheKeyMap | TerminalCacheKeyMap;\n\nexport function isTerminalCacheKeyMap(map: ChildCacheKeyMap): map is TerminalCacheKeyMap {\n    return Object.prototype.hasOwnProperty.call(map, 'cacheKey');\n}\n\nexport function isRootCacheKeyMap(map: RootCacheKeyMap | ChildCacheKeyMap): map is RootCacheKeyMap {\n    return Object.prototype.hasOwnProperty.call(map, 'parentMap');\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/cache-key-resolver.spec.ts",
    "content": "import CacheKeyResolver from './cache-key-resolver';\n\ndescribe('CacheKeyResolver', () => {\n    it('returns same cache key if params are equal', () => {\n        const resolver = new CacheKeyResolver();\n\n        expect(resolver.getKey('hello')).toBe('1');\n        expect(resolver.getKey('bye')).toBe('2');\n        expect(resolver.getKey('hello')).toBe('1');\n        expect(resolver.getKey('bye')).toBe('2');\n    });\n\n    it('returns same cache key if multiple params are equal', () => {\n        const resolver = new CacheKeyResolver();\n\n        expect(resolver.getKey('hello', 'world')).toBe('1');\n        expect(resolver.getKey('hello', 'good', 'bye')).toBe('2');\n        expect(resolver.getKey('hello', 'world')).toBe('1');\n        expect(resolver.getKey('hello', 'good', 'bye')).toBe('2');\n    });\n\n    it('returns same cache key if no params are provided', () => {\n        const resolver = new CacheKeyResolver();\n\n        expect(resolver.getKey()).toBe('1');\n        expect(resolver.getKey()).toBe('1');\n    });\n\n    it('works with non-primitive params', () => {\n        const resolver = new CacheKeyResolver();\n        const personA = { name: 'Foo' };\n        const personB = { name: 'Bar' };\n        const personC = { name: 'Foobar' };\n\n        expect(resolver.getKey(personA, personB)).toBe('1');\n        expect(resolver.getKey(personB, personA)).toBe('2');\n        expect(resolver.getKey(personA, personB)).toBe('1');\n        expect(resolver.getKey(personB, personA, personC)).toBe('3');\n    });\n\n    it('works with functions', () => {\n        const resolver = new CacheKeyResolver();\n        const functionA = () => 'a';\n        const functionB = () => 'b';\n\n        expect(resolver.getKey('foobar', functionA)).toBe('1');\n        expect(resolver.getKey('foobar', functionB)).toBe('2');\n        expect(resolver.getKey('foobar', functionA)).toBe('1');\n        expect(resolver.getKey('foobar', functionB)).toBe('2');\n    });\n\n    it('works with unserializable objects with cyclical reference', () => {\n        const resolver = new CacheKeyResolver();\n        const objectB: any = { child: undefined };\n        const objectA: any = { child: objectB };\n\n        objectB.child = objectA;\n\n        expect(resolver.getKey(objectA, objectB)).toBe('1');\n        expect(resolver.getKey(objectA, objectB)).toBe('1');\n    });\n\n    it('returns same key if objects are shallowly equivalent', () => {\n        const resolver = new CacheKeyResolver();\n        const objectA = { id: 1 };\n        const objectB = { id: 1 };\n\n        expect(resolver.getKey('foobar', objectA)).toEqual(resolver.getKey('foobar', objectB));\n    });\n\n    it('returns different cache key for least recently used set of arguments', () => {\n        const resolver = new CacheKeyResolver({ maxSize: 2 });\n\n        expect(resolver.getKey('hello', 'world')).toBe('1');\n        // This will return the cache key\n        expect(resolver.getKey('hello', 'world')).toBe('1');\n        expect(resolver.getKey('hello', 'good')).toBe('2');\n        expect(resolver.getKey('bad', 'guys')).toBe('3');\n        // This will return a new cache key because the set of arguments is\n        // least recently used and the number of cache keys already exceed the\n        // maximum size\n        expect(resolver.getKey('hello', 'world')).toBe('4');\n    });\n\n    it('only expires cache key if number of unique calls exceeds limit', () => {\n        const resolver = new CacheKeyResolver({ maxSize: 2 });\n\n        expect(resolver.getKey('hello', 'world')).toBe('1');\n        expect(resolver.getKey('hello', 'world')).toBe('1');\n        // The previous call should not expire the key because it is called with\n        // the same set of arguments\n        expect(resolver.getKey('hello', 'world')).toBe('1');\n\n        expect(resolver.getKey('foo', 'bar')).toBe('2');\n        expect(resolver.getKey('hello', 'bye')).toBe('3');\n\n        // This call should return a new key because the previous two calls are\n        // made with different sets of arguments\n        expect(resolver.getKey('hello', 'world')).toBe('4');\n    });\n\n    it('returns cache key used count', () => {\n        const resolver = new CacheKeyResolver();\n\n        expect(resolver.getUsedCount('hello', 'world')).toBe(0);\n\n        resolver.getKey('hello', 'world');\n\n        expect(resolver.getUsedCount('hello', 'world')).toBe(1);\n\n        resolver.getKey('hello', 'world');\n\n        expect(resolver.getUsedCount('hello', 'world')).toBe(2);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/cache-key-resolver.ts",
    "content": "import { noop } from 'lodash';\nimport shallowEqual from 'shallowequal';\n\nimport {\n    ChildCacheKeyMap,\n    IntermediateCacheKeyMap,\n    isRootCacheKeyMap,\n    isTerminalCacheKeyMap,\n    RootCacheKeyMap,\n    TerminalCacheKeyMap,\n} from './cache-key-maps';\n\nexport interface CacheKeyResolverOptions {\n    maxSize?: number;\n    onExpire?(key: string): void;\n    isEqual?(valueA: any, valueB: any): boolean;\n}\n\ninterface ResolveResult {\n    index: number;\n    parentMap: RootCacheKeyMap | IntermediateCacheKeyMap;\n    map?: TerminalCacheKeyMap;\n}\n\nexport default class CacheKeyResolver {\n    private _lastId = 0;\n    private _map: RootCacheKeyMap = { maps: [] };\n    private _usedMaps: TerminalCacheKeyMap[] = [];\n    private _options: Required<CacheKeyResolverOptions>;\n\n    constructor(options?: CacheKeyResolverOptions) {\n        this._options = {\n            maxSize: 0,\n            isEqual: shallowEqual,\n            onExpire: noop,\n            ...options,\n        };\n    }\n\n    getKey(...args: any[]): string {\n        const result = this._resolveMap(...args);\n        const { index, parentMap } = result;\n        let { map } = result;\n\n        if (map && map.cacheKey) {\n            map.usedCount++;\n        } else {\n            map = this._generateMap(parentMap, args.slice(index));\n        }\n\n        // Keep track of the least used map so we can remove it if the size of\n        // the stack exceeds the maximum size.\n        this._removeLeastUsedMap(map);\n\n        return map.cacheKey;\n    }\n\n    getUsedCount(...args: any[]): number {\n        const { map } = this._resolveMap(...args);\n\n        return map ? map.usedCount : 0;\n    }\n\n    private _resolveMap(...args: any[]): ResolveResult {\n        let index = 0;\n        let parentMap = this._map;\n\n        // Traverse the tree to find the linked list of maps that match the\n        // arguments of the call. Each intermediate or terminal map contains a\n        // value that could be used to match with the arguments. The last map in\n        // the list (the terminal) should contain a cache key. If it can does\n        // not exist, we will return a falsy value so that the caller could\n        // handle and generate a new cache key.\n        while (parentMap.maps.length) {\n            let isMatched = false;\n\n            for (let mapIndex = 0; mapIndex < parentMap.maps.length; mapIndex++) {\n                const map = parentMap.maps[mapIndex];\n\n                if (!this._options.isEqual(map.value, args[index])) {\n                    continue;\n                }\n\n                // Move the most recently used map to the top of the stack for\n                // quicker access\n                parentMap.maps.unshift(...parentMap.maps.splice(mapIndex, 1));\n\n                if (\n                    (args.length === 0 || index === args.length - 1) &&\n                    isTerminalCacheKeyMap(map)\n                ) {\n                    return { index, map, parentMap };\n                }\n\n                isMatched = true;\n                parentMap = map;\n                index++;\n\n                break;\n            }\n\n            if (!isMatched) {\n                break;\n            }\n        }\n\n        return { index, parentMap };\n    }\n\n    private _generateMap(\n        parent: RootCacheKeyMap | IntermediateCacheKeyMap,\n        args: any[],\n    ): TerminalCacheKeyMap {\n        let index = 0;\n        let parentMap = parent;\n        let map: IntermediateCacheKeyMap;\n\n        do {\n            map = {\n                maps: [],\n                parentMap,\n                usedCount: 1,\n                value: args[index],\n            };\n\n            // Continue to build the tree of maps so that it could be resolved\n            // next time when the function is called with the same set of\n            // arguments.\n            parentMap.maps.unshift(map);\n\n            parentMap = map;\n            index++;\n        } while (index < args.length);\n\n        const terminalMap = map as TerminalCacheKeyMap;\n\n        terminalMap.cacheKey = `${++this._lastId}`;\n\n        return terminalMap;\n    }\n\n    private _removeLeastUsedMap(recentlyUsedMap: TerminalCacheKeyMap): void {\n        if (!this._options.maxSize) {\n            return;\n        }\n\n        const index = this._usedMaps.indexOf(recentlyUsedMap);\n\n        this._usedMaps.splice(index === -1 ? 0 : index, index === -1 ? 0 : 1, recentlyUsedMap);\n\n        if (this._usedMaps.length <= this._options.maxSize) {\n            return;\n        }\n\n        const map = this._usedMaps.pop();\n\n        if (!map) {\n            return;\n        }\n\n        this._removeMap(map);\n        this._options.onExpire(map.cacheKey);\n    }\n\n    private _removeMap(map: ChildCacheKeyMap): void {\n        if (!map.parentMap) {\n            return;\n        }\n\n        map.parentMap.maps.splice(map.parentMap.maps.indexOf(map), 1);\n\n        if (isRootCacheKeyMap(map.parentMap)) {\n            return;\n        }\n\n        this._removeMap(map.parentMap);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/clone-decorator.spec.ts",
    "content": "import { default as clone } from './clone-decorator';\n\ndescribe('cloneDecorator', () => {\n    describe('decorates whole classes', () => {\n        @clone\n        class Foo {\n            constructor(public obj: any) {}\n\n            getValue() {\n                return this.obj;\n            }\n        }\n\n        it('returns a cloned copy of the original object', () => {\n            const obj = { test: 123 };\n            const foo = new Foo(obj);\n\n            const result = foo.getValue();\n\n            expect(result).not.toBe(obj);\n            expect(result).toEqual(obj);\n        });\n\n        it('returns a deep cloned copy', () => {\n            const obj = { test: 123, deep: { clone: 456 } };\n            const foo = new Foo(obj);\n\n            const result = foo.getValue();\n\n            obj.deep.clone = 789;\n\n            expect(result.deep.clone).not.toEqual(obj.deep.clone);\n        });\n\n        it('returns a new cloned copy if the result of the method changes', () => {\n            const obj = { test: 123 };\n            const newObj = { new: 456 };\n            const foo = new Foo(obj);\n\n            const result = foo.getValue();\n\n            foo.obj = newObj;\n\n            const newResult = foo.getValue();\n\n            expect(newResult).not.toBe(newObj);\n            expect(newResult).toEqual(newObj);\n            expect(result).not.toEqual(newObj);\n        });\n\n        it('returns the same value if the object reference is the same', () => {\n            const obj = { test: 123 };\n            const foo = new Foo(obj);\n\n            const result = foo.getValue();\n\n            obj.test = 456;\n\n            const newResult = foo.getValue();\n\n            expect(result).toBe(newResult);\n            expect(result).not.toEqual({ test: 456 });\n        });\n    });\n\n    describe('decorates methods', () => {\n        // tslint:disable-next-line:max-classes-per-file\n        class Foo {\n            constructor(public obj: any) {}\n\n            @clone\n            getValue() {\n                return this.obj;\n            }\n        }\n\n        it('returns a cloned copy of the original object', () => {\n            const obj = { test: 123 };\n            const foo = new Foo(obj);\n\n            const result = foo.getValue();\n\n            expect(result).not.toBe(obj);\n            expect(result).toEqual(obj);\n        });\n\n        it('returns a deep cloned copy', () => {\n            const obj = { test: 123, deep: { clone: 456 } };\n            const foo = new Foo(obj);\n\n            const result = foo.getValue();\n\n            obj.deep.clone = 789;\n\n            expect(result.deep.clone).not.toEqual(obj.deep.clone);\n        });\n\n        it('returns a new cloned copy if the result of the method changes', () => {\n            const obj = { test: 123 };\n            const newObj = { new: 456 };\n            const foo = new Foo(obj);\n\n            const result = foo.getValue();\n\n            foo.obj = newObj;\n\n            const newResult = foo.getValue();\n\n            expect(newResult).not.toBe(newObj);\n            expect(newResult).toEqual(newObj);\n            expect(result).not.toEqual(newObj);\n        });\n\n        it('returns the same value if the object reference is the same', () => {\n            const obj = { test: 123 };\n            const foo = new Foo(obj);\n\n            const result = foo.getValue();\n\n            obj.test = 456;\n\n            const newResult = foo.getValue();\n\n            expect(result).toBe(newResult);\n            expect(result).not.toEqual({ test: 456 });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/clone-decorator.ts",
    "content": "import { cloneDeep, memoize } from 'lodash';\n\nfunction cloneDecorator<T extends Method>(\n    target: object,\n    key: string,\n    descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T>;\nfunction cloneDecorator<T extends Constructor<object>>(target: T): T;\n\nfunction cloneDecorator(target: any, key?: any, descriptor?: any): any {\n    if (!key || !descriptor) {\n        return cloneClassDecorator(target);\n    }\n\n    return cloneMethodDecorator(target, key, descriptor);\n}\n\nexport default cloneDecorator;\n\nexport function cloneClassDecorator<T extends Constructor<object>>(target: T): T {\n    const decoratedTarget = class extends target {};\n\n    Object.getOwnPropertyNames(target.prototype).forEach((key) => {\n        const descriptor = Object.getOwnPropertyDescriptor(target.prototype, key);\n\n        if (!descriptor || key === 'constructor') {\n            return;\n        }\n\n        Object.defineProperty(\n            decoratedTarget.prototype,\n            key,\n            cloneMethodDecorator(target.prototype, key, descriptor),\n        );\n    });\n\n    return decoratedTarget;\n}\n\nexport function cloneMethodDecorator<T extends Method>(\n    _: object,\n    key: string,\n    descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T> {\n    if (typeof descriptor.value !== 'function') {\n        return descriptor;\n    }\n\n    let method = descriptor.value;\n    const memoizedCloneDeep = memoize(cloneDeep);\n\n    // Use WeakMap as the MapCache, this allows for better garbage collection\n    // There's a deprecated `clear` method in the lodash implementation\n    // of MapCache, hence the `any`\n    memoizedCloneDeep.cache = new WeakMap() as any;\n\n    return {\n        get() {\n            const value = ((...args: any[]) => {\n                const result = method.apply(this, args);\n\n                return result && typeof result === 'object' ? memoizedCloneDeep(result) : result;\n            }) as T;\n\n            Object.defineProperty(this, key, { ...descriptor, value });\n\n            return value;\n        },\n        set(value) {\n            method = value;\n        },\n    };\n}\n\nexport type Constructor<T> = new (...args: any[]) => T;\nexport type Method = (...args: any[]) => any;\n"
  },
  {
    "path": "packages/core/src/common/utility/clone-result.spec.ts",
    "content": "import cloneResult from './clone-result';\n\ndescribe('cloneResult()', () => {\n    it('clones output of function', () => {\n        const data = { message: 'foo' };\n        const fn = () => data;\n        const clonedFn = cloneResult(fn);\n\n        expect(clonedFn()).toEqual(fn());\n\n        expect(clonedFn()).not.toBe(fn());\n    });\n\n    it('only clones again if output is different to previous call', () => {\n        let data = { message: 'foo' };\n        const fn = () => data;\n        const clonedFn = cloneResult(fn);\n        const resultA = clonedFn();\n\n        expect(resultA).toBe(clonedFn());\n\n        data = { message: 'bar' };\n\n        expect(resultA).not.toBe(clonedFn());\n    });\n\n    it('does not clone nested object again if it is already cloned', () => {\n        let data = { message: 'foo', child: { id: 1 } };\n        const fn = () => data;\n        const clonedFn = cloneResult(fn);\n        const resultA = clonedFn();\n\n        data = { ...data, message: 'bar' };\n\n        const resultB = clonedFn();\n\n        expect(resultA.child).toBe(resultB.child);\n\n        expect(resultA.child).not.toBe(fn().child);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/clone-result.ts",
    "content": "import { memoize } from 'lodash';\n\nimport isPlainObject from './is-plain-object';\n\nconst cloneDeep = memoize(<T>(input: T): T => {\n    if (Array.isArray(input)) {\n        // Fixed in later versions of typescript https://github.com/microsoft/TypeScript/issues/36390\n        return (input as any[]).map((value: T[keyof T]) => cloneDeepSafe(value)) as any;\n    }\n\n    if (isPlainObject(input)) {\n        return (Object.keys(input) as Array<keyof T>).reduce(\n            (result, key) => ({\n                ...result,\n                [key]: cloneDeepSafe(input[key]),\n            }),\n            {},\n        ) as T;\n    }\n\n    return input;\n});\n\n// Use WeakMap as the MapCache, this allows for better garbage collection\n// There's a deprecated `clear` method in the lodash implementation\n// of MapCache, hence the `any`\ncloneDeep.cache = new WeakMap() as any;\n\n/**\n * This is a wrapper function for `cloneDeep`. We need it because `cloneDeep` is\n * a memoized function using an instance of `WeakMap` as its cache. Without this\n * wrapper, the memoized function will throw an error if it is called with a\n * non-object argument.\n */\nconst cloneDeepSafe = <T>(input: T): T => {\n    return typeof input === 'object' && input !== null ? cloneDeep(input) : input;\n};\n\n/**\n * Clone the return value of a function. If the result is the same as previous\n * calls, return the previous clone instead of cloning it again.\n */\nexport default function cloneResult<T extends Func>(fn: T): T {\n    return ((...args: any[]) => cloneDeepSafe(fn(...args))) as T;\n}\n\nexport type Func = (...args: any[]) => any;\n"
  },
  {
    "path": "packages/core/src/common/utility/create-freeze-proxy.spec.ts",
    "content": "import createFreezeProxy, { createFreezeProxies } from './create-freeze-proxy';\n\nclass Foobar {\n    protected _data: any;\n\n    constructor(data = {}) {\n        this._data = data;\n    }\n\n    getData() {\n        return this._data;\n    }\n\n    getName() {\n        return this._data.name;\n    }\n}\n\n// tslint:disable-next-line:max-classes-per-file\nclass ExtendedFoobar extends Foobar {\n    getExtendedData() {\n        return {\n            ...this._data,\n            extended: true,\n        };\n    }\n}\n\ndescribe('createFreezeProxy()', () => {\n    it('freezes return value of methods', () => {\n        const foobar = new Foobar({ name: 'foobar' });\n        const proxy = createFreezeProxy(foobar);\n\n        expect(Object.isFrozen(foobar.getData())).toBe(false);\n        expect(Object.isFrozen(proxy.getData())).toBe(true);\n    });\n\n    it('freezes return value of inherited methods', () => {\n        const proxy = createFreezeProxy(new ExtendedFoobar({ name: 'foobar' }));\n\n        expect(Object.isFrozen(proxy.getData())).toBe(true);\n        expect(Object.isFrozen(proxy.getExtendedData())).toBe(true);\n    });\n\n    it('ignores primitive return value', () => {\n        const proxy = createFreezeProxy(new Foobar({ name: 'foobar' }));\n\n        expect(proxy.getName()).toBe('foobar');\n    });\n});\n\ndescribe('createFreezeProxies()', () => {\n    it('freezes return value of methods of all objects', () => {\n        const foobar = new Foobar({ name: 'foobar' });\n        const extendedFoobar = new ExtendedFoobar({ name: 'extended_foobar' });\n        const proxy = createFreezeProxies({ extendedFoobar, foobar });\n\n        expect(Object.isFrozen(foobar.getData())).toBe(false);\n        expect(Object.isFrozen(extendedFoobar.getData())).toBe(false);\n        expect(Object.isFrozen(proxy.foobar.getData())).toBe(true);\n        expect(Object.isFrozen(proxy.extendedFoobar.getData())).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/create-freeze-proxy.ts",
    "content": "import { deepFreeze } from '@bigcommerce/data-store';\n\ntype FunctionProperties<T> = {\n    [K in keyof T]: T[K] extends (...args: unknown[]) => unknown ? T[K] : never;\n};\n\nexport default function createFreezeProxy<T extends object>(target: T): T {\n    return createProxy(\n        target,\n        (target, name) =>\n            (...args: any[]) =>\n                deepFreeze(target[name].call(target, ...args)),\n    );\n}\n\nexport function createFreezeProxies<T extends object, TMap extends { [key: string]: T }>(\n    map: TMap,\n): TMap {\n    return Object.keys(map).reduce<{ [key: string]: T }>((result, key) => {\n        result[key] = createFreezeProxy(map[key]);\n\n        return result;\n    }, {}) as TMap;\n}\n\nfunction createProxy<T extends object>(\n    target: T,\n    trap: (target: FunctionProperties<T>, name: keyof FunctionProperties<T>, proxy: T) => any,\n): T {\n    const proxy = Object.create(target);\n\n    traversePrototypeOf(target, (prototype) => {\n        Object.getOwnPropertyNames(prototype).forEach((name) => {\n            if (\n                name === 'constructor' ||\n                typeof proxy[name] !== 'function' ||\n                name.charAt(0) === '_'\n            ) {\n                return;\n            }\n\n            proxy[name] = trap(target as FunctionProperties<T>, name as keyof T, proxy);\n        });\n    });\n\n    return proxy;\n}\n\nfunction traversePrototypeOf(target: object, iteratee: (prototype: object) => void): void {\n    let prototype = Object.getPrototypeOf(target);\n\n    while (prototype) {\n        iteratee(prototype);\n\n        prototype = Object.getPrototypeOf(prototype);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/get-environment.spec.ts",
    "content": "import getEnvironment from './get-environment';\n\ndescribe('getEnvironment', () => {\n    let savedEnvironment: NodeJS.ProcessEnv;\n    let savedProcess: any;\n\n    beforeEach(() => {\n        savedEnvironment = process.env;\n        savedProcess = global.process;\n        process.env = {};\n    });\n\n    afterEach(() => {\n        global.process = savedProcess;\n        process.env = savedEnvironment;\n    });\n\n    it('returns the value set in process.env.NODE_ENV', () => {\n        global.process.env.NODE_ENV = 'test';\n\n        expect(getEnvironment()).toBe('test');\n    });\n\n    it('defaults to development if no value is set', () => {\n        global.process.env.NODE_ENV = undefined;\n\n        expect(getEnvironment()).toBe('development');\n    });\n\n    it('defaults to development if process is not defined', () => {\n        delete (global as Partial<NodeJS.Global>).process;\n\n        expect(getEnvironment()).toBe('development');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/get-environment.ts",
    "content": "export default function getEnvironment(): string {\n    try {\n        return process.env.NODE_ENV || 'development';\n    } catch (e) {\n        return 'development';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/guard.spec.ts",
    "content": "import { InvalidArgumentError } from '../error/errors';\n\nimport guard from './guard';\n\ndescribe('guard()', () => {\n    it('throws error if value is null', () => {\n        expect(() => guard(null)).toThrow();\n    });\n\n    it('throws error if value is undefined', () => {\n        expect(() => guard(undefined)).toThrow();\n    });\n\n    it('does not throw error if value is 0', () => {\n        expect(() => guard(0)).not.toThrow();\n    });\n\n    it('throws custom error if provided', () => {\n        expect(() => guard(null, () => new InvalidArgumentError())).toThrow(InvalidArgumentError);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/guard.ts",
    "content": "export default function guard<T>(value: T, errorFactory?: () => Error): NonNullable<T> {\n    if (value === undefined || value === null) {\n        throw errorFactory ? errorFactory() : new Error('An unexpected error has occurred.');\n    }\n\n    return value as NonNullable<T>;\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/index.ts",
    "content": "export { default as arrayReplace } from './array-replace';\nexport { default as clone } from './clone-decorator';\nexport { default as cloneResult } from './clone-result';\nexport { default as createFreezeProxy, createFreezeProxies } from './create-freeze-proxy';\nexport { default as CacheKeyResolver } from './cache-key-resolver';\nexport { default as guard } from './guard';\nexport { default as getEnvironment } from './get-environment';\nexport { default as isEqual } from './is-equal';\nexport { default as isPlainObject } from './is-plain-object';\nexport { default as isPrivate } from './is-private';\nexport { default as mergeOrPush } from './merge-or-push';\nexport { default as omitDeep } from './omit-deep';\nexport { default as omitPrivate } from './omit-private';\nexport { default as objectFlatten } from './object-flatten';\nexport { default as objectMerge } from './object-merge';\nexport { default as objectSet } from './object-set';\nexport { default as objectWithSortedKeys } from './object-with-sorted-keys';\nexport { default as replace } from './replace';\nexport { default as setPrototypeOf } from './set-prototype-of';\nexport { default as toSingleLine } from './to-single-line';\n"
  },
  {
    "path": "packages/core/src/common/utility/is-equal.spec.ts",
    "content": "import isEqual from './is-equal';\nimport isPrivate from './is-private';\n\ndescribe('isEqual', () => {\n    it('returns true if objects are same', () => {\n        const object = { a: 'a', b: 'b' };\n\n        expect(isEqual(object, object)).toBe(true);\n    });\n\n    it('returns true if objects are equal in value', () => {\n        const objectA = { a: 'a', b: 'b' };\n        const objectB = { a: 'a', b: 'b' };\n\n        expect(isEqual(objectA, objectB)).toBe(true);\n    });\n\n    it('returns false if objects are different in value', () => {\n        const objectA = { a: 'a', b: 'b' };\n        const objectB = { a: 'A', b: 'B' };\n\n        expect(isEqual(objectA, objectB)).toBe(false);\n    });\n\n    it('returns true if objects are equal except ignored properties', () => {\n        const objectA = { a: 'a', b: 'b', _c: 'c', d: [{ $$a: 'a' }] };\n        const objectB = { a: 'a', b: 'b', d: [{}] };\n\n        expect(isEqual(objectA, objectB, { keyFilter: (key) => !isPrivate(key) })).toBe(true);\n    });\n\n    it('returns true if arrays are equal in value', () => {\n        const objectA = ['a', 'b'];\n        const objectB = ['a', 'b'];\n\n        expect(isEqual(objectA, objectB)).toBe(true);\n    });\n\n    it('returns false if arrays are different in value', () => {\n        const objectA = ['a', 'b'];\n        const objectB = ['A', 'B'];\n\n        expect(isEqual(objectA, objectB)).toBe(false);\n    });\n\n    it('returns true if nested objects are equal in value', () => {\n        const objectA = { a: 'a', b: 'b', c: [1, 2], d: { a: 'a', b: 'b' } };\n        const objectB = { a: 'a', b: 'b', c: [1, 2], d: { a: 'a', b: 'b' } };\n\n        expect(isEqual(objectA, objectB)).toBe(true);\n    });\n\n    it('returns false if nested objects are different in value', () => {\n        const objectA = { a: 'a', b: 'b', c: [1, 2], d: { a: 'a', b: 'b' } };\n        const objectB = { a: 'a', b: 'b', c: [1, 2], d: { a: 'A', b: 'B' } };\n\n        expect(isEqual(objectA, objectB)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/is-equal.ts",
    "content": "export interface CompareOptions {\n    keyFilter?(key: string): boolean;\n}\n\nexport default function isEqual(objectA: any, objectB: any, options?: CompareOptions): boolean {\n    if (objectA === objectB) {\n        return true;\n    }\n\n    if (objectA && objectB && typeof objectA === 'object' && typeof objectB === 'object') {\n        if (Array.isArray(objectA) && Array.isArray(objectB)) {\n            return isArrayEqual(objectA, objectB, options);\n        }\n\n        if (Array.isArray(objectA) || Array.isArray(objectB)) {\n            return false;\n        }\n\n        if (objectA instanceof Date && objectB instanceof Date) {\n            return isDateEqual(objectA, objectB);\n        }\n\n        if (objectA instanceof Date || objectB instanceof Date) {\n            return false;\n        }\n\n        if (objectA instanceof RegExp && objectB instanceof RegExp) {\n            return isRegExpEqual(objectA, objectB);\n        }\n\n        if (objectA instanceof RegExp || objectB instanceof RegExp) {\n            return false;\n        }\n\n        return isObjectEqual(objectA, objectB, options);\n    }\n\n    return objectA === objectB;\n}\n\nfunction isRegExpEqual(objectA: RegExp, objectB: RegExp): boolean {\n    return objectA.toString() === objectB.toString();\n}\n\nfunction isDateEqual(objectA: Date, objectB: Date): boolean {\n    return objectA.getTime() === objectB.getTime();\n}\n\nfunction isArrayEqual(objectA: any[], objectB: any[], options?: CompareOptions): boolean {\n    if (objectA.length !== objectB.length) {\n        return false;\n    }\n\n    for (let index = 0, length = objectA.length; index < length; index++) {\n        if (!isEqual(objectA[index], objectB[index], options)) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\nfunction isObjectEqual(\n    objectA: { [key: string]: any },\n    objectB: { [key: string]: any },\n    options?: CompareOptions,\n): boolean {\n    const filter = options && options.keyFilter;\n    const keysA = filter ? Object.keys(objectA).filter(filter) : Object.keys(objectA);\n    const keysB = filter ? Object.keys(objectB).filter(filter) : Object.keys(objectB);\n\n    if (keysA.length !== keysB.length) {\n        return false;\n    }\n\n    for (let index = 0, length = keysA.length; index < length; index++) {\n        const key = keysA[index];\n\n        if (!Object.prototype.hasOwnProperty.call(objectB, key)) {\n            return false;\n        }\n\n        if (!isEqual(objectA[key], objectB[key], options)) {\n            return false;\n        }\n    }\n\n    return true;\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/is-plain-object.ts",
    "content": "import { isPlainObject as lodashIsPlainObject } from 'lodash';\n\n// We need this wrapper because Lodash's version doesn't act as a type guard\nexport default function isPlainObject(value: any): value is object {\n    return lodashIsPlainObject(value);\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/is-private.ts",
    "content": "export default function isPrivate(key: string): boolean {\n    return `${key}`.indexOf('$$') === 0 || `${key}`.indexOf('_') === 0;\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/merge-or-push.spec.ts",
    "content": "import mergeOrPush from './merge-or-push';\n\ndescribe('mergeOrPush()', () => {\n    it('replaces primitive value in target array if found in array', () => {\n        const array = [1, 2, 3, 4, 5];\n        const expected = [1, 2, 99, 4, 5];\n\n        expect(mergeOrPush<number>(array, 99, (value) => value === 3)).toEqual(expected);\n    });\n\n    it('merges input object in target array if found in array', () => {\n        const array = [\n            { id: 1, name: 'one' },\n            { id: 2, name: 'two' },\n            { id: 3, name: 'three' },\n        ];\n        const expected = [\n            { id: 1, name: 'ONE' },\n            { id: 2, name: 'two' },\n            { id: 3, name: 'three' },\n        ];\n\n        expect(mergeOrPush(array, { id: 1, name: 'ONE' }, { id: 1 })).toEqual(expected);\n    });\n\n    it('recursively merges input object in target array if found in array', () => {\n        const array = [\n            { id: 1, item: { name: 'ONE', message: 'foobar' } },\n            { id: 2, item: { name: 'TWO', message: 'hello' } },\n        ];\n        const expected = [\n            { id: 1, item: { name: 'FOO', message: 'foobar' } },\n            { id: 2, item: { name: 'TWO', message: 'hello' } },\n        ];\n\n        expect(\n            mergeOrPush(array, { id: 1, item: { name: 'FOO' } } as any, { id: 1 } as any),\n        ).toEqual(expected);\n    });\n\n    it('replaces input array in target array if found in array', () => {\n        const array = [[1], [1, 2], [1, 2, 3]];\n        const expected = [[1], [99], [1, 2, 3]];\n\n        expect(mergeOrPush(array, [99], (item) => item.length === 2)).toEqual(expected);\n    });\n\n    it('pushes primitive value to target array if not found in array', () => {\n        const array = [1, 2, 3, 4, 5];\n        const expected = [1, 2, 3, 4, 5, 99];\n\n        expect(mergeOrPush(array, 99, (value) => value === 6)).toEqual(expected);\n    });\n\n    it('pushes input object to target array if not found in array', () => {\n        const array = [\n            { id: 1, name: 'one' },\n            { id: 2, name: 'two' },\n            { id: 3, name: 'three' },\n        ];\n        const expected = [\n            { id: 1, name: 'one' },\n            { id: 2, name: 'two' },\n            { id: 3, name: 'three' },\n            { id: 4, name: 'ONE' },\n        ];\n\n        expect(mergeOrPush(array, { id: 4, name: 'ONE' }, { id: 4 })).toEqual(expected);\n    });\n\n    it('pushes input array to target array if not found in array', () => {\n        const array = [[1], [1, 2], [1, 2, 3]];\n        const expected = [[1], [1, 2], [1, 2, 3], [99, 98]];\n\n        expect(mergeOrPush(array, [99, 98], (item) => item.length === 4)).toEqual(expected);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/merge-or-push.ts",
    "content": "import { findIndex, pick, pickBy, ValueKeyIteratee } from 'lodash';\n\nimport isPlainObject from './is-plain-object';\nimport objectMerge from './object-merge';\n\n/**\n * Push an item to an array if it doesn't exist in the array. Otherwise, merge\n * with the existing item in the array. This function always returns a new array.\n */\nexport default function mergeOrPush<T>(array: T[], item?: T, predicate?: ValueKeyIteratee<T>): T[] {\n    if (!item) {\n        return array;\n    }\n\n    const defaultPredicate = pick<T>(item, 'id');\n    const derivedPredicate: any =\n        typeof predicate === 'object' ? pickBy<T>(predicate) : predicate || defaultPredicate;\n    const index = findIndex(array, derivedPredicate);\n    const newArray = [...array];\n\n    if (index === -1) {\n        newArray.push(item);\n    } else {\n        const existingItem = array[index];\n\n        newArray[index] =\n            isPlainObject(existingItem) && isPlainObject(item)\n                ? objectMerge(existingItem, item)\n                : item;\n    }\n\n    return newArray;\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/object-flatten.spec.ts",
    "content": "import objectFlatten from './object-flatten';\n\nconst testObject = {\n    consignmentId: '55c96cda6f04c',\n    searchArea: {\n        radius: {\n            value: 1.4,\n            unit: 0,\n        },\n        coordinates: {\n            latitude: 1.4,\n            longitude: 1.4,\n        },\n    },\n};\n\ndescribe('objectFlatten()', () => {\n    it('flattens a nested object', () => {\n        const newValue = {\n            consignmentId: '55c96cda6f04c',\n            'searchArea.radius.value': 1.4,\n            'searchArea.radius.unit': 0,\n            'searchArea.coordinates.latitude': 1.4,\n            'searchArea.coordinates.longitude': 1.4,\n        };\n\n        const result = objectFlatten(testObject);\n\n        expect(result).toEqual(newValue);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/object-flatten.ts",
    "content": "/**\n * Takes a nested object and flattens it.\n */\nexport default function objectFlatten(\n    object: { [key: string]: any },\n    parent?: string,\n): { [key: string]: any } {\n    const flattened: { [key: string]: any } = {};\n\n    Object.keys(object).forEach((key: string) => {\n        const value = object[key];\n        const keyString = parent ? `${parent}.${key}` : key;\n\n        if (typeof value === 'object') {\n            Object.assign(flattened, objectFlatten(value, keyString));\n        } else {\n            flattened[keyString] = value;\n        }\n    });\n\n    return flattened;\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/object-merge.spec.ts",
    "content": "import objectMerge from './object-merge';\n\ndescribe('objectMerge()', () => {\n    it('retains current object if new object contains same set of values as current', () => {\n        const object = { id: 1, message: 'foobar' };\n        const result = objectMerge(object, { id: 1, message: 'foobar' });\n\n        expect(result).toBe(object);\n    });\n\n    it('recursively retains current object if new object contains same set of values as current', () => {\n        const object = { item: { id: 1, message: 'foobar' } };\n        const result = objectMerge(object, { item: { id: 1, message: 'foobar' } });\n\n        expect(result).toBe(object);\n        expect(result.item).toBe(object.item);\n    });\n\n    it('retains current object if new partial contains same set of values as current', () => {\n        const object = { id: 1, message: 'foobar' };\n        const result = objectMerge(object, { message: 'foobar' });\n\n        expect(result).toBe(object);\n    });\n\n    it('recursively retains current object if new partial contains same set of values as current', () => {\n        const object = { item: { id: 1, message: 'foobar' } };\n        const result = objectMerge(object, { item: { message: 'foobar' } } as any);\n\n        expect(result).toBe(object);\n        expect(result.item).toBe(object.item);\n    });\n\n    it('merges current object with new partial if they are different', () => {\n        const object = { id: 1, message: 'foobar' };\n        const newObject = { message: 'hello' };\n        const result = objectMerge(object, newObject);\n\n        expect(result).not.toBe(object);\n        expect(result).not.toBe(newObject);\n        expect(result).toEqual({ id: 1, message: 'hello' });\n    });\n\n    it('recursively merges current object if new partial contains different set of values as current', () => {\n        const object = { item: { id: 1, message: 'foobar' } };\n        const newObject = { item: { message: 'hello' } };\n        const result = objectMerge(object, newObject as any);\n\n        expect(result).not.toBe(object);\n        expect(result).not.toBe(newObject);\n        expect(result).toEqual({ item: { id: 1, message: 'hello' } });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/object-merge.ts",
    "content": "import { isArray } from 'lodash';\n\nimport arrayReplace from './array-replace';\nimport isPlainObject from './is-plain-object';\nimport objectSet from './object-set';\n\nfunction objectMerge<T extends object>(currentObject: T, newObject?: Partial<T>): T;\nfunction objectMerge<T extends object>(\n    currentObject: T | undefined,\n    newObject: Partial<T>,\n): Partial<T>;\nfunction objectMerge<T extends object>(currentObject?: T, newObject?: Partial<T>): T | undefined;\n\nfunction objectMerge<T extends object>(\n    currentObject?: T,\n    newObject?: Partial<T>,\n): T | Partial<T> | undefined {\n    if (!currentObject) {\n        return newObject;\n    }\n\n    // If the new object does not exist but the current object does, or the new\n    // object is strictly equal to the current object, return the current object\n    if (!newObject || currentObject === newObject) {\n        return currentObject;\n    }\n\n    // If both objects exist, but some values might be different, perform a merge.\n    // Retain values that are equal and only replace them with the new values if\n    // they are different.\n    return (Object.keys(newObject) as Array<keyof T>).reduce((result, key) => {\n        const currentValue = result[key];\n        const newValue = newObject[key];\n\n        if (isPlainObject(currentValue) && isPlainObject(newValue)) {\n            return objectSet(result, key, objectMerge(currentValue, newValue));\n        }\n\n        if (isArray(currentValue) && isArray(newValue)) {\n            return objectSet(result, key, arrayReplace(currentValue, newValue) as any);\n        }\n\n        return objectSet(result, key, newValue as any);\n    }, currentObject);\n}\n\nexport default objectMerge;\n"
  },
  {
    "path": "packages/core/src/common/utility/object-set.spec.ts",
    "content": "import objectSet from './object-set';\n\ndescribe('objectSet()', () => {\n    it('sets key of object with new value by creating new copy of object if current value is different to new value', () => {\n        const object = { item: { id: 1 } };\n        const newValue = { id: 2 };\n        const result = objectSet(object, 'item', newValue);\n\n        expect(result).toEqual({ item: { id: 2 } });\n        expect(result.item).toBe(newValue);\n    });\n\n    it('retains current value if new value is same as current', () => {\n        const object = { item: { id: 1 } };\n        const newValue = object.item;\n        const result = objectSet(object, 'item', newValue);\n\n        expect(result).toBe(object);\n        expect(result.item).toBe(object.item);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/object-set.ts",
    "content": "import isEqual from './is-equal';\n\n/**\n * Set a new value to an object under a key if the new value is different to the\n * current value of the key.\n */\nexport default function objectSet<T extends { [key: string]: any }, K extends keyof T>(\n    object: T | undefined,\n    key: K,\n    value: T[K],\n): T {\n    if (\n        object &&\n        Object.prototype.hasOwnProperty.call(object, key) &&\n        isEqual(object[key], value)\n    ) {\n        return object;\n    }\n\n    return {\n        ...(object as any),\n        [key]: value,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/object-with-sorted-keys.spec.ts",
    "content": "import objectWithSortedKeys from './object-with-sorted-keys';\n\nconst unsortedObject = {\n    test: 'test',\n    a: '1',\n};\n\ndescribe('objectFlatten()', () => {\n    it('flattens a nested object', () => {\n        const sortedObject = {\n            a: '1',\n            test: 'test',\n        };\n\n        const result = objectWithSortedKeys(unsortedObject);\n\n        expect(result).toEqual(sortedObject);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/object-with-sorted-keys.ts",
    "content": "export default function objectWithSortedKeys(object: { [key: string]: any }) {\n    const keys = Object.keys(object);\n    const sortedKeys = keys.sort();\n\n    const sortedArray = sortedKeys.reduce(\n        (previous, current) => ({\n            ...previous,\n            [current]: object[current],\n        }),\n        {},\n    );\n\n    return sortedArray;\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/omit-deep.spec.ts",
    "content": "import omitDeep from './omit-deep';\n\ndescribe('omitDeep()', () => {\n    it('omits nested properties', () => {\n        const object = {\n            $$key: 'abc',\n            id: 1,\n            items: [\n                { $$key: 'abc', id: 2 },\n                { $$key: 'abc', id: 3 },\n            ],\n        };\n\n        const expected = {\n            id: 1,\n            items: [{ id: 2 }, { id: 3 }],\n        };\n\n        expect(omitDeep(object, (_, key) => key === '$$key')).toEqual(expected);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/omit-deep.ts",
    "content": "import { isPlainObject, omitBy, transform } from 'lodash';\n\nexport default function omitDeep(\n    object: any,\n    predicate: (value: any, key: string) => boolean,\n): any {\n    if (Array.isArray(object)) {\n        return object.map((value) => omitDeep(value, predicate));\n    }\n\n    if (isPlainObject(object)) {\n        return transform(\n            omitBy(object, predicate),\n            (result, value, key) => {\n                result[key] = omitDeep(value, predicate);\n            },\n            {} as { [key: string]: any },\n        );\n    }\n\n    return object;\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/omit-private.spec.ts",
    "content": "import omitPrivate from './omit-private';\n\ndescribe('omitPrivate()', () => {\n    it('omits private properties recursively', () => {\n        const object = {\n            $$key: 'abc',\n            _key: 'abc',\n            id: 1,\n            items: [\n                { $$key: 'abc', id: 2 },\n                { _key: 'abc', id: 3 },\n            ],\n        };\n\n        const expected = {\n            id: 1,\n            items: [{ id: 2 }, { id: 3 }],\n        };\n\n        expect(omitPrivate(object)).toEqual(expected);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/omit-private.ts",
    "content": "import isPrivate from './is-private';\nimport omitDeep from './omit-deep';\n\nexport default function omitPrivate(object: any): any {\n    return omitDeep(object, (_: any, key: string) => isPrivate(key));\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/replace.spec.ts",
    "content": "import replace from './replace';\n\ndescribe('replace()', () => {\n    it('replaces current value with new value if they are different', () => {\n        const valueA = { message: 'foo' };\n        const valueB = { message: 'bar' };\n\n        expect(replace(valueA, valueB)).toBe(valueB);\n    });\n\n    it('retains current value if new value equals to current value but only differs in its reference', () => {\n        const valueA = { message: 'foo' };\n        const valueB = { message: 'foo' };\n\n        expect(replace(valueA, valueB)).toBe(valueA);\n    });\n\n    it('replaces current value with empty value except `undefined`', () => {\n        expect(replace('foobar', undefined)).toBe('foobar');\n\n        expect(replace(Number(123), 0)).toBe(0);\n        expect(replace(String('foobar'), '')).toBe('');\n        expect(replace(Object({ message: 'foo' }), null)).toBeNull();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/replace.ts",
    "content": "import isEqual from './is-equal';\n\n/**\n * Replace the current value with a new value if the former is different to the\n * latter.\n */\nexport default function replace<T>(currentValue: T, newValue?: T): T {\n    if (newValue === undefined || isEqual(currentValue, newValue)) {\n        return currentValue;\n    }\n\n    return newValue;\n}\n"
  },
  {
    "path": "packages/core/src/common/utility/set-prototype-of.spec.ts",
    "content": "import setPrototypeOf from './set-prototype-of';\n\ndescribe('setPrototypeOf', () => {\n    it('assigns prototype to object', () => {\n        class CustomError extends Error {}\n\n        const error = new CustomError();\n\n        setPrototypeOf(error, CustomError.prototype);\n\n        expect(error instanceof CustomError).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/set-prototype-of.ts",
    "content": "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"
  },
  {
    "path": "packages/core/src/common/utility/to-single-line.spec.ts",
    "content": "import toSingleLine from './to-single-line';\n\ndescribe('toSingleLine()', () => {\n    it('removes white spaces and line breaks', () => {\n        const message = `\n            Hello world.\n            Foo bar.\n        `;\n\n        expect(toSingleLine(message)).toBe('Hello world. Foo bar.');\n    });\n\n    it('returns empty string when no arguments are supplied', () => {\n        expect(toSingleLine()).toBe('');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/utility/to-single-line.ts",
    "content": "export default function toSingleLine(input?: string) {\n    if (!input) {\n        return '';\n    }\n\n    return input\n        .split(/(?:\\r\\n|\\n|\\r)/)\n        .map((line) => line.replace(/^\\s+/gm, ''))\n        .join(' ')\n        .trim();\n}\n"
  },
  {
    "path": "packages/core/src/common/worker/WorkerEvent.ts",
    "content": "export default interface WorkerEvent<TType = string, TPayload = any> {\n    type: TType;\n    payload?: TPayload;\n}\n\nexport type WorkerEventMap<TType extends string | number | symbol = string> = {\n    [key in TType]: WorkerEvent<TType>;\n};\n\nexport type WorkerEventListeners<TEventMap, TContext = undefined> = {\n    [key in keyof TEventMap]?: Array<(event: TEventMap[key], context?: TContext) => void>;\n};\n"
  },
  {
    "path": "packages/core/src/common/worker/index.ts",
    "content": "export { WorkerEventListener } from './worker-event-listener';\nexport { WorkerEventPoster } from './worker-event-poster';\n"
  },
  {
    "path": "packages/core/src/common/worker/worker-event-listener.test.ts",
    "content": "import { WorkerEventListener } from './worker-event-listener';\n\ndescribe('WorkerEventListener', () => {\n    let worker: Worker;\n    let workerEventListener: WorkerEventListener<any>;\n\n    const testMessage = {\n        type: 'dummyType',\n        payload: { data: 'test' },\n        context: { extensionId: '123' },\n    };\n\n    beforeEach(() => {\n        worker = {\n            addEventListener: jest.fn(),\n            removeEventListener: jest.fn(),\n            postMessage: jest.fn(),\n        } as unknown as Worker;\n\n        workerEventListener = new WorkerEventListener(worker);\n    });\n\n    it('should start listening to messages', () => {\n        workerEventListener.listen();\n\n        expect(worker.addEventListener).toHaveBeenCalledWith('message', expect.any(Function));\n    });\n\n    it('should stop listening to worker messages', () => {\n        workerEventListener.listen();\n        workerEventListener.stopListen();\n\n        expect(worker.removeEventListener).toHaveBeenCalledWith('message', expect.any(Function));\n    });\n\n    it('should add a listener for a specific event type', () => {\n        const listener = jest.fn();\n\n        workerEventListener.addListener(testMessage.type, listener);\n        workerEventListener.trigger(testMessage);\n\n        expect(listener).toHaveBeenCalledWith(testMessage);\n    });\n\n    it('should remove a listener for a specific event type', () => {\n        const listener = jest.fn();\n\n        workerEventListener.addListener(testMessage.type, listener);\n        workerEventListener.removeListener(testMessage.type, listener);\n        workerEventListener.trigger(testMessage);\n\n        expect(listener).not.toHaveBeenCalled();\n    });\n\n    it('should trigger all listeners for a specific event type', () => {\n        const listener1 = jest.fn();\n        const listener2 = jest.fn();\n\n        workerEventListener.addListener(testMessage.type, listener1);\n        workerEventListener.addListener(testMessage.type, listener2);\n        workerEventListener.trigger(testMessage);\n\n        expect(listener1).toHaveBeenCalledWith(testMessage);\n        expect(listener2).toHaveBeenCalledWith(testMessage);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/worker/worker-event-listener.ts",
    "content": "import { bindDecorator as bind } from '@bigcommerce/checkout-sdk/utility';\n\nimport { WorkerEventListeners, WorkerEventMap } from './WorkerEvent';\n\nexport class WorkerEventListener<\n    TEventMap extends WorkerEventMap<keyof TEventMap>,\n    TContext = undefined,\n> {\n    private _isListening: boolean;\n    private _listeners: WorkerEventListeners<TEventMap, TContext>;\n\n    constructor(private _worker: Worker) {\n        this._isListening = false;\n        this._listeners = {};\n    }\n\n    listen(): void {\n        if (this._isListening) {\n            return;\n        }\n\n        this._isListening = true;\n        this._worker.addEventListener('message', this._handleMessage);\n    }\n\n    stopListen(): void {\n        if (!this._isListening) {\n            return;\n        }\n\n        this._isListening = false;\n        this._worker.removeEventListener('message', this._handleMessage);\n    }\n\n    addListener<TType extends keyof TEventMap>(\n        type: TType,\n        listener: (event: TEventMap[TType], context?: TContext) => void,\n    ): void {\n        let listeners = this._listeners[type];\n\n        if (!listeners) {\n            this._listeners[type] = listeners = [];\n        }\n\n        if (listeners.indexOf(listener) === -1) {\n            listeners.push(listener);\n        }\n    }\n\n    removeListener<TType extends keyof TEventMap>(\n        type: TType,\n        listener: (event: TEventMap[TType], context?: TContext) => void,\n    ): void {\n        const listeners = this._listeners[type];\n\n        if (!listeners) {\n            return;\n        }\n\n        const index = listeners.indexOf(listener);\n\n        if (index >= 0) {\n            listeners.splice(index, 1);\n        }\n    }\n\n    trigger<TType extends keyof TEventMap>(event: TEventMap[TType], context?: TContext): void {\n        const listeners = this._listeners[event.type];\n\n        if (!listeners) {\n            return;\n        }\n\n        listeners.forEach((listener) => (context ? listener(event, context) : listener(event)));\n    }\n\n    @bind\n    private _handleMessage(messageEvent: MessageEvent): void {\n        const { context, ...event } = messageEvent.data;\n\n        this.trigger(event, context);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/common/worker/worker-event-poster.spec.ts",
    "content": "import { MockWorker } from '../../extension/extension.mock';\n\nimport { WorkerEventPoster } from './worker-event-poster';\n\ndescribe('WorkerEventPoster', () => {\n    let mockWorker: MockWorker;\n\n    beforeEach(() => {\n        mockWorker = new MockWorker('https://worker.extension.com/worker.js');\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('constructor', () => {\n        it('should initialize with a worker and context', () => {\n            const poster = new WorkerEventPoster(mockWorker as any as Worker, 'testContext');\n\n            expect(poster).toBeDefined();\n        });\n    });\n\n    describe('post', () => {\n        it('should call worker.postMessage with the event and the provided context', () => {\n            const poster = new WorkerEventPoster(mockWorker as any as Worker, 'testContext');\n            const event = { id: 'dynamic-translatable-123', text: 'dynamic text', locale: 'en-US' };\n\n            poster.post(event);\n\n            expect(mockWorker.postMessage).toHaveBeenCalledTimes(1);\n            expect(mockWorker.postMessage).toHaveBeenCalledWith({\n                ...event,\n                context: 'testContext',\n            });\n        });\n\n        it('should spread the event properties into the message object', () => {\n            const poster = new WorkerEventPoster(mockWorker as any as Worker, 'testContext');\n            const event = { id: 'dynamic-translatable-123', text: 'dynamic text', locale: 'en-US' };\n\n            poster.post(event);\n\n            expect(mockWorker.postMessage).toHaveBeenCalledWith({\n                id: 'dynamic-translatable-123',\n                text: 'dynamic text',\n                locale: 'en-US',\n                context: 'testContext',\n            });\n        });\n\n        it('should throw an error if post is called when _worker is null (defensive check)', () => {\n            const poster = new WorkerEventPoster(null as any as Worker, 'testContext');\n\n            const event = { type: 'FAIL_EVENT' };\n\n            expect(() => poster.post(event)).toThrow(\n                'WorkerPoster: Worker is not initialized or creation failed. Cannot post message.',\n            );\n            expect(mockWorker.postMessage).not.toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/common/worker/worker-event-poster.ts",
    "content": "export class WorkerEventPoster<TEvent, TContext = undefined> {\n    constructor(private _worker: Worker, private _context: TContext) {}\n\n    post(event: TEvent): void {\n        if (!this._worker) {\n            throw new Error(\n                'WorkerPoster: Worker is not initialized or creation failed. Cannot post message.',\n            );\n        }\n\n        this._worker.postMessage({ ...event, context: this._context });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/config/capabilities.ts",
    "content": "// This is an exact copy of packages/payment-integration-api/src/config/capabilities.ts\n// Duplication is needed for interface export\n// Please update both files if you want to make changes to the Capabilities interface\nexport interface Capabilities {\n    userJourney: {\n        disableEditCart: boolean;\n        disableStoreCredit: boolean;\n        hasCompanyAddressBook: boolean;\n        hasAddressExtraFields: boolean;\n        hasOrderExtraFields: boolean;\n        requiresB2BToken: boolean;\n    };\n    customer: {\n        superAdminCompanySelector: boolean;\n    };\n    shipping: {\n        restrictManualAddressEntry: boolean;\n        prefillCompanyAddress: boolean;\n        hideSaveToAddressBookCheck: boolean;\n        hideBillingSameAsShippingCheck: boolean;\n    };\n    billing: {\n        restrictManualAddressEntry: boolean;\n        hideSaveToAddressBookCheck: boolean;\n    };\n    payment: {\n        paymentMethodFiltering: boolean;\n        b2bPaymentMethodFilter: boolean;\n        poPaymentMethod: boolean;\n        poConfig: {\n            label: string;\n            required: boolean;\n            creditLimit: number;\n            currency: string;\n        } | null;\n        additionalPaymentNotes: boolean;\n        additionalField: {\n            label: string;\n            required: boolean;\n        } | null;\n        excludeOfflineForInvoice: boolean;\n        excludePPSDK: boolean;\n    };\n    orderConfirmation: {\n        orderSummary: boolean;\n        persistB2BMetadata: boolean;\n        storeQuoteId: boolean;\n        storeInvoiceReference: boolean;\n        invoiceRedirect: boolean;\n    };\n}\n"
  },
  {
    "path": "packages/core/src/config/config-action-creator.spec.ts",
    "content": "import { createRequestSender, RequestSender, Response } from '@bigcommerce/request-sender';\nimport { merge, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport Config from './config';\nimport ConfigActionCreator from './config-action-creator';\nimport { ConfigActionType } from './config-actions';\nimport ConfigRequestSender from './config-request-sender';\nimport { getConfig } from './configs.mock';\n\ndescribe('ConfigActionCreator', () => {\n    let requestSender: RequestSender;\n    let configRequestSender: ConfigRequestSender;\n    let configActionCreator: ConfigActionCreator;\n    let errorResponse: Response<any>;\n    let response: Response<Config>;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        configRequestSender = new ConfigRequestSender(requestSender);\n        configActionCreator = new ConfigActionCreator(configRequestSender);\n\n        response = getResponse(getConfig());\n        errorResponse = getErrorResponse();\n\n        jest.spyOn(configRequestSender, 'loadConfig').mockReturnValue(Promise.resolve(response));\n    });\n\n    describe('#loadConfig()', () => {\n        it('emits actions if able to load config', async () => {\n            const actions = await configActionCreator.loadConfig().pipe(toArray()).toPromise();\n\n            expect(actions).toEqual([\n                { type: ConfigActionType.LoadConfigRequested },\n                { type: ConfigActionType.LoadConfigSucceeded, payload: response.body },\n            ]);\n        });\n\n        it('emits error actions if unable to load config', async () => {\n            jest.spyOn(configRequestSender, 'loadConfig').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await configActionCreator\n                .loadConfig()\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: ConfigActionType.LoadConfigRequested },\n                { type: ConfigActionType.LoadConfigFailed, payload: errorResponse, error: true },\n            ]);\n        });\n\n        it('dispatches actions using cached responses if available', async () => {\n            const actions = await merge(\n                configActionCreator.loadConfig({\n                    useCache: true,\n                    params: { checkoutId: '6554a0a0-527f-4d51-9197-58ab22eb1dab' },\n                }),\n                configActionCreator.loadConfig({\n                    useCache: true,\n                    params: { checkoutId: '6554a0a0-527f-4d51-9197-58ab22eb1dab' },\n                }),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: ConfigActionType.LoadConfigRequested },\n                { type: ConfigActionType.LoadConfigRequested },\n                { type: ConfigActionType.LoadConfigSucceeded, payload: response.body },\n                { type: ConfigActionType.LoadConfigSucceeded, payload: response.body },\n            ]);\n\n            expect(configRequestSender.loadConfig).toHaveBeenCalledTimes(1);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/config/config-action-creator.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\nimport { Observable, Observer } from 'rxjs';\n\nimport { ActionOptions, cachableAction } from '../common/data-store';\nimport { RequestOptions } from '../common/http-request';\n\nimport { ConfigActionType, LoadConfigAction } from './config-actions';\n\nimport { ConfigRequestSender } from '.';\n\nexport default class ConfigActionCreator {\n    constructor(private _configRequestSender: ConfigRequestSender) {}\n\n    @cachableAction\n    loadConfig(options?: RequestOptions & ActionOptions): Observable<LoadConfigAction> {\n        return Observable.create((observer: Observer<LoadConfigAction>) => {\n            observer.next(createAction(ConfigActionType.LoadConfigRequested));\n\n            this._configRequestSender\n                .loadConfig(options)\n                .then((response) => {\n                    observer.next(\n                        createAction(ConfigActionType.LoadConfigSucceeded, response.body),\n                    );\n                    observer.complete();\n                })\n                .catch((response) => {\n                    observer.error(createErrorAction(ConfigActionType.LoadConfigFailed, response));\n                });\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/config/config-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport Config from './config';\n\nexport enum ConfigActionType {\n    LoadConfigRequested = 'LOAD_CONFIG_REQUESTED',\n    LoadConfigSucceeded = 'LOAD_CONFIG_SUCCEEDED',\n    LoadConfigFailed = 'LOAD_CONFIG_FAILED',\n}\n\nexport type LoadConfigAction =\n    | LoadConfigRequestedAction\n    | LoadConfigSucceededAction\n    | LoadConfigFailedAction;\n\nexport interface LoadConfigRequestedAction extends Action {\n    type: ConfigActionType.LoadConfigRequested;\n}\n\nexport interface LoadConfigSucceededAction extends Action<Config> {\n    type: ConfigActionType.LoadConfigSucceeded;\n}\n\nexport interface LoadConfigFailedAction extends Action<Error> {\n    type: ConfigActionType.LoadConfigFailed;\n}\n"
  },
  {
    "path": "packages/core/src/config/config-reducer.spec.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\n\nimport { ConfigActionType } from './config-actions';\nimport { getConfig } from './configs.mock';\n\nimport { configReducer, ConfigState } from './index';\n\ndescribe('configReducer()', () => {\n    let initialState: ConfigState;\n\n    beforeEach(() => {\n        initialState = {\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    it('loads the config', () => {\n        const action = createAction(ConfigActionType.LoadConfigRequested);\n\n        expect(configReducer(initialState, action)).toMatchObject({\n            statuses: { isLoading: true },\n        });\n    });\n\n    it('returns config data if it was load successfully', () => {\n        const action = createAction(ConfigActionType.LoadConfigSucceeded, getConfig());\n\n        expect(configReducer(initialState, action)).toMatchObject({\n            data: action.payload,\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns an error if loading fails', () => {\n        const action = createErrorAction(ConfigActionType.LoadConfigFailed, new Error());\n\n        expect(configReducer(initialState, action)).toMatchObject({\n            errors: { loadError: action.payload },\n            statuses: { isLoading: false },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/config/config-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { CheckoutHydrateAction, CheckoutHydrateActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport Config from './config';\nimport { ConfigActionType, LoadConfigAction } from './config-actions';\nimport ConfigState, { ConfigErrorsState, ConfigStatusesState, DEFAULT_STATE } from './config-state';\n\nexport default function configReducer(\n    state: ConfigState = DEFAULT_STATE,\n    action: Action,\n): ConfigState {\n    const reducer = combineReducers<ConfigState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: Config | undefined,\n    action: LoadConfigAction | CheckoutHydrateAction,\n): Config | undefined {\n    switch (action.type) {\n        case ConfigActionType.LoadConfigSucceeded:\n            return objectMerge(data, action.payload);\n\n        case CheckoutHydrateActionType.HydrateInitialState: {\n            const merged = objectMerge(data, action.payload?.config);\n\n            // b2bApiSettings is a top-level field in CheckoutInitialState (separate from config),\n            // so it must be merged into storeConfig manually after the config hydration.\n            // Skip if config data is absent or this is a non-B2B store (no b2bApiSettings).\n            if (!merged || !action.payload?.b2bApiSettings) {\n                return merged;\n            }\n\n            return {\n                ...merged,\n                storeConfig: {\n                    ...merged.storeConfig,\n                    b2bApiSettings: action.payload.b2bApiSettings,\n                },\n            };\n        }\n\n        default:\n            return data;\n    }\n}\n\nfunction errorsReducer(\n    errors: ConfigErrorsState = DEFAULT_STATE.errors,\n    action: LoadConfigAction,\n): ConfigErrorsState {\n    switch (action.type) {\n        case ConfigActionType.LoadConfigSucceeded:\n            return objectSet(errors, 'loadError', undefined);\n\n        case ConfigActionType.LoadConfigFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: ConfigStatusesState = DEFAULT_STATE.statuses,\n    action: LoadConfigAction,\n): ConfigStatusesState {\n    switch (action.type) {\n        case ConfigActionType.LoadConfigRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case ConfigActionType.LoadConfigSucceeded:\n        case ConfigActionType.LoadConfigFailed:\n            return objectSet(statuses, 'isLoading', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/config/config-request-sender.spec.ts",
    "content": "import { createRequestSender, createTimeout, Response } from '@bigcommerce/request-sender';\n\nimport { CheckoutNotAvailableError } from '../checkout/errors';\nimport { ContentType, INTERNAL_USE_ONLY, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport Config from './config';\nimport ConfigRequestSender from './config-request-sender';\nimport { getConfig } from './configs.mock';\n\ndescribe('ConfigRequestSender', () => {\n    const requestSender = createRequestSender();\n    let configRequestSender: ConfigRequestSender;\n\n    beforeEach(() => {\n        configRequestSender = new ConfigRequestSender(requestSender);\n    });\n\n    describe('#loadConfig()', () => {\n        let response: Response<Config>;\n\n        beforeEach(() => {\n            response = getResponse(getConfig());\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('loads config', async () => {\n            const output = await configRequestSender.loadConfig();\n\n            expect(output).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/checkout-settings', {\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('loads config with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const output = await configRequestSender.loadConfig(options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/checkout-settings', {\n                ...options,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('loads config with checkout ID', async () => {\n            const options = { params: { checkoutId: 'dummy' } };\n            const output = await configRequestSender.loadConfig(options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/checkout-settings', {\n                ...options,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('throws a CheckoutNotAvailable error when it encounters a client error(400-499)', async () => {\n            jest.spyOn(requestSender, 'get').mockRejectedValue(\n                getErrorResponse(undefined, undefined, 404),\n            );\n\n            try {\n                await configRequestSender.loadConfig();\n            } catch (error) {\n                expect(error).toBeInstanceOf(CheckoutNotAvailableError);\n            }\n        });\n\n        it('throws a generic request error when it encounters a server error(500-599)', async () => {\n            jest.spyOn(requestSender, 'get').mockRejectedValue(\n                getErrorResponse(undefined, undefined, 500),\n            );\n\n            try {\n                await configRequestSender.loadConfig();\n            } catch (error) {\n                expect(error).not.toBeInstanceOf(CheckoutNotAvailableError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/config/config-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { CheckoutNotAvailableError } from '../checkout/errors';\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport Config from './config';\n\nexport default class ConfigRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    loadConfig({ timeout, params }: RequestOptions = {}): Promise<Response<Config>> {\n        const url = '/api/storefront/checkout-settings';\n\n        return this._requestSender\n            .get<Config>(url, {\n                timeout,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                    ...SDK_VERSION_HEADERS,\n                },\n                params,\n            })\n            .catch((error) => {\n                if (error.status >= 400 && error.status < 500) {\n                    throw new CheckoutNotAvailableError(error);\n                }\n\n                throw error;\n            });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/config/config-selector.spec.ts",
    "content": "import { CheckoutStoreState } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\n\nimport { FlashMessage } from './config';\nimport ConfigSelector, {\n    ConfigSelectorFactory,\n    createConfigSelectorFactory,\n} from './config-selector';\nimport ConfigState from './config-state';\n\ndescribe('ConfigSelector', () => {\n    let configSelector: ConfigSelector;\n    let configStateWithMessages: ConfigState;\n    let createConfigSelector: ConfigSelectorFactory;\n    let state: CheckoutStoreState;\n\n    beforeEach(() => {\n        createConfigSelector = createConfigSelectorFactory();\n        state = getCheckoutStoreState();\n    });\n\n    describe('#getConfig()', () => {\n        it('returns the current config', () => {\n            configSelector = createConfigSelector(state.config, state.formFields);\n\n            expect(configSelector.getConfig()).toEqual(state.config.data);\n        });\n\n        it('returns the store config', () => {\n            configSelector = createConfigSelector(state.config, state.formFields);\n\n            expect(configSelector.getStoreConfig()).toEqual({\n                // tslint:disable-next-line:no-non-null-assertion\n                ...state.config.data!.storeConfig,\n                formFields: {\n                    customerAccount: state.formFields.data?.customerAccount,\n                    shippingAddress: state.formFields.data?.shippingAddress,\n                    billingAddress: state.formFields.data?.billingAddress,\n                },\n            });\n        });\n\n        it('returns the context config', () => {\n            configSelector = createConfigSelector(state.config, state.formFields);\n\n            // tslint:disable-next-line:no-non-null-assertion\n            expect(configSelector.getContextConfig()).toEqual(state.config.data!.context);\n        });\n    });\n\n    describe('#getFlashMessages', () => {\n        const flashMessages: FlashMessage[] = [\n            { type: 'info', message: 'm_info', title: '' },\n            { type: 'error', message: 'm_error', title: '' },\n            { type: 'warning', message: 'm_warning', title: '' },\n            { type: 'success', message: 'm_success', title: '' },\n        ];\n\n        beforeEach(() => {\n            configStateWithMessages = {\n                ...state.config,\n                data: {\n                    // tslint:disable-next-line: no-non-null-assertion\n                    ...state.config.data!,\n                    context: {\n                        // tslint:disable-next-line: no-non-null-assertion\n                        ...state.config.data!.context,\n                        flashMessages,\n                    },\n                },\n            };\n        });\n\n        it('returns all the flash messages', () => {\n            configSelector = createConfigSelector(configStateWithMessages, state.formFields);\n\n            expect(configSelector.getFlashMessages()).toEqual(flashMessages);\n        });\n\n        it('returns the flash message matching the provided filter', () => {\n            configSelector = createConfigSelector(configStateWithMessages, state.formFields);\n\n            expect(configSelector.getFlashMessages('error')).toEqual([flashMessages[1]]);\n        });\n\n        it('returns empty array when no messages available', () => {\n            configSelector = createConfigSelector(state.config, state.formFields);\n\n            expect(configSelector.getFlashMessages()).toEqual([]);\n        });\n    });\n\n    describe('#getExternalSource()', () => {\n        it('returns the external source', () => {\n            const externalSource = 'Partner';\n\n            configSelector = createConfigSelector(\n                {\n                    ...state.config,\n                    meta: { externalSource },\n                },\n                state.formFields,\n            );\n\n            expect(configSelector.getExternalSource()).toEqual(externalSource);\n        });\n    });\n\n    describe('#getLoadingError()', () => {\n        it('returns error if unable to load config', () => {\n            const loadError = new Error();\n\n            configSelector = createConfigSelector(\n                {\n                    ...state.config,\n                    errors: { loadError },\n                },\n                state.formFields,\n            );\n\n            expect(configSelector.getLoadError()).toEqual(loadError);\n        });\n\n        it('does not returns error if able to load config', () => {\n            configSelector = createConfigSelector(state.config, state.formFields);\n\n            expect(configSelector.getLoadError()).toBeUndefined();\n        });\n    });\n\n    describe('#isLoading()', () => {\n        it('returns true if loading config', () => {\n            configSelector = createConfigSelector(\n                {\n                    ...state.config,\n                    statuses: { isLoading: true },\n                },\n                state.formFields,\n            );\n\n            expect(configSelector.isLoading()).toBe(true);\n        });\n\n        it('returns false if not loading config', () => {\n            configSelector = createConfigSelector(state.config, state.formFields);\n\n            expect(configSelector.isLoading()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/config/config-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\nimport { FormFieldsState } from '../form';\n\nimport Config, { ContextConfig, FlashMessage, FlashMessageType, StoreConfig } from './config';\nimport ConfigState, { DEFAULT_STATE } from './config-state';\n\nexport default interface ConfigSelector {\n    getConfig(): Config | undefined;\n    getFlashMessages(type?: FlashMessageType): FlashMessage[] | undefined;\n    getStoreConfig(): StoreConfig | undefined;\n    getStoreConfigOrThrow(): StoreConfig;\n    getContextConfig(): ContextConfig | undefined;\n    getExternalSource(): string | undefined;\n    getHost(): string | undefined;\n    getLocale(): string | undefined;\n    getVariantIdentificationToken(): string | undefined;\n    getLoadError(): Error | undefined;\n    isLoading(): boolean;\n}\n\nexport type ConfigSelectorFactory = (\n    state: ConfigState,\n    formState: FormFieldsState,\n) => ConfigSelector;\n\ninterface ConfigSelectorDependencies {\n    formState: FormFieldsState;\n}\n\nexport function createConfigSelectorFactory(): ConfigSelectorFactory {\n    const getConfig = createSelector(\n        (state: ConfigState) => state.data,\n        (data) => () => data,\n    );\n\n    const getFlashMessages = createSelector(\n        (state: ConfigState) => state.data,\n        (data) => (filterType?: FlashMessageType) => {\n            if (!data) {\n                return;\n            }\n\n            const { flashMessages } = data.context;\n\n            if (!flashMessages) {\n                return;\n            }\n\n            return filterType !== undefined\n                ? flashMessages.filter(({ type }) => filterType === type)\n                : flashMessages;\n        },\n    );\n\n    const getStoreConfig = createSelector(\n        (state: ConfigState) => state.data,\n        (_: ConfigState, { formState }: ConfigSelectorDependencies) => formState && formState.data,\n        (data, formFields = { customerAccount: [], shippingAddress: [], billingAddress: [] }) =>\n            () =>\n                data\n                    ? {\n                          ...data.storeConfig,\n                          formFields,\n                      }\n                    : undefined,\n    );\n\n    const getStoreConfigOrThrow = createSelector(getStoreConfig, (getStoreConfig) => () => {\n        return guard(\n            getStoreConfig(),\n            () => new MissingDataError(MissingDataErrorType.MissingCheckoutConfig),\n        );\n    });\n\n    const getContextConfig = createSelector(\n        (state: ConfigState) => state.data && state.data.context,\n        (data) => () => data,\n    );\n\n    const getExternalSource = createSelector(\n        (state: ConfigState) => state.meta && state.meta.externalSource,\n        (data) => () => data,\n    );\n\n    const getHost = createSelector(\n        (state: ConfigState) => state.meta?.host,\n        (data) => () => data,\n    );\n\n    const getLocale = createSelector(\n        (state: ConfigState) => state.meta?.locale,\n        (data) => () => data,\n    );\n\n    const getVariantIdentificationToken = createSelector(\n        (state: ConfigState) => state.meta && state.meta.variantIdentificationToken,\n        (data) => () => data,\n    );\n\n    const getLoadError = createSelector(\n        (state: ConfigState) => state.errors.loadError,\n        (error) => () => error,\n    );\n\n    const isLoading = createSelector(\n        (state: ConfigState) => !!state.statuses.isLoading,\n        (status) => () => status,\n    );\n\n    return memoizeOne(\n        (state: ConfigState = DEFAULT_STATE, formState: FormFieldsState): ConfigSelector => {\n            return {\n                getConfig: getConfig(state),\n                getFlashMessages: getFlashMessages(state),\n                getStoreConfig: getStoreConfig(state, { formState }),\n                getStoreConfigOrThrow: getStoreConfigOrThrow(state, { formState }),\n                getContextConfig: getContextConfig(state),\n                getExternalSource: getExternalSource(state),\n                getHost: getHost(state),\n                getLocale: getLocale(state),\n                getVariantIdentificationToken: getVariantIdentificationToken(state),\n                getLoadError: getLoadError(state),\n                isLoading: isLoading(state),\n            };\n        },\n    );\n}\n"
  },
  {
    "path": "packages/core/src/config/config-state.ts",
    "content": "import Config from './config';\n\nexport default interface ConfigState {\n    data?: Config;\n    meta?: ConfigMetaState;\n    errors: ConfigErrorsState;\n    statuses: ConfigStatusesState;\n}\n\nexport interface ConfigMetaState {\n    externalSource?: string;\n    variantIdentificationToken?: string;\n    host?: string;\n    locale?: string;\n}\n\nexport interface ConfigErrorsState {\n    loadError?: Error;\n}\n\nexport interface ConfigStatusesState {\n    isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: ConfigState = {\n    meta: {},\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/config/config-window.ts",
    "content": "export default interface ConfigWindow extends Window {\n    checkoutVariantIdentificationToken?: string;\n}\n"
  },
  {
    "path": "packages/core/src/config/config.ts",
    "content": "import { FormFields } from '../form';\n\nimport { type Capabilities } from './capabilities';\n\nexport default interface Config {\n    context: ContextConfig;\n    customization: CustomizationConfig;\n    storeConfig: StoreConfig;\n}\n\nexport interface B2BApiSettings {\n    clientId: string;\n    baseUrl: string;\n}\n\nexport interface StoreConfig {\n    cdnPath: string;\n    checkoutSettings: CheckoutSettings;\n    b2bApiSettings?: B2BApiSettings;\n    currency: StoreCurrency;\n    displayDateFormat: string;\n    displaySettings: DisplaySettings;\n    inputDateFormat: string;\n\n    /**\n     * @deprecated Please use instead the data selectors\n     * @remarks\n     * ```js\n     * const data = CheckoutService.getState().data;\n     * const shippingAddressFields = data.getShippingAddressFields('US');\n     * const billingAddressFields = data.getBillingAddressFields('US');\n     * const customerAccountFields = data.getCustomerAccountFields();\n     * ```\n     */\n    formFields: FormFields;\n\n    links: StoreLinks;\n    paymentSettings: PaymentSettings;\n    shopperConfig: ShopperConfig;\n    storeProfile: StoreProfile;\n    imageDirectory: string;\n    isAngularDebuggingEnabled: boolean;\n    shopperCurrency: ShopperCurrency;\n    inventorySettings?: InventorySettings;\n}\n\nexport interface ShopperCurrency extends StoreCurrency {\n    exchangeRate: number;\n    isTransactional: boolean;\n}\n\nexport interface StoreProfile {\n    orderEmail: string;\n    shopPath: string;\n    storeCountry: string;\n    storeCountryCode: string;\n    storeHash: string;\n    storeId: string;\n    storeName: string;\n    storePhoneNumber: string;\n    storeLanguage: string;\n}\n\nexport interface ShopperConfig {\n    defaultNewsletterSignup: boolean;\n    passwordRequirements: PasswordRequirements;\n    showNewsletterSignup: boolean;\n}\n\nexport interface PasswordRequirements {\n    alpha: string;\n    numeric: string;\n    minlength: number;\n    error: string;\n}\n\nexport interface PaymentSettings {\n    bigpayBaseUrl: string;\n    clientSidePaymentProviders: string[];\n}\n\nexport interface StoreLinks {\n    baseUrl?: string | null;\n    cartLink: string;\n    checkoutLink: string;\n    createAccountLink: string;\n    forgotPasswordLink: string;\n    loginLink: string;\n    logoutLink: string;\n    siteLink: string;\n    orderConfirmationLink: string;\n}\n\nexport interface StoreCurrency {\n    code: string;\n    decimalPlaces: string;\n    decimalSeparator: string;\n    isTransactional: boolean;\n    symbolLocation: string;\n    symbol: string;\n    thousandsSeparator: string;\n}\n\nexport interface UserExperienceSettings {\n    checkoutV2Theme: boolean;\n    walletButtonsOnTop: boolean;\n    floatingLabelEnabled: boolean;\n}\n\nexport interface CheckoutSettings {\n    capabilities?: Capabilities;\n    features: { [featureName: string]: boolean };\n    checkoutBillingSameAsShippingEnabled: boolean;\n    checkoutUserExperienceSettings: UserExperienceSettings;\n    enableOrderComments: boolean;\n    enableTermsAndConditions: boolean;\n    googleMapsApiKey: string;\n    googleRecaptchaSitekey: string;\n    isAccountCreationEnabled: boolean;\n    isStorefrontSpamProtectionEnabled: boolean;\n    guestCheckoutEnabled: boolean;\n    hasMultiShippingEnabled: boolean;\n    isAnalyticsEnabled: boolean;\n    isCardVaultingEnabled: boolean;\n    isCouponCodeCollapsed: boolean;\n    isExpressPrivacyPolicy: boolean;\n    isSignInEmailEnabled: boolean;\n    isPaymentRequestEnabled: boolean;\n    isPaymentRequestCanMakePaymentEnabled: boolean;\n    isSpamProtectionEnabled: boolean;\n    isTrustedShippingAddressEnabled: boolean;\n    orderTermsAndConditions: string;\n    orderTermsAndConditionsLocation: string;\n    orderTermsAndConditionsLink: string;\n    orderTermsAndConditionsType: string;\n    privacyPolicyUrl: string;\n    providerWithCustomCheckout: string | null;\n    shippingQuoteFailedMessage: string;\n    realtimeShippingProviders: string[];\n    requiresMarketingConsent: boolean;\n    remoteCheckoutProviders: any[];\n    shouldRedirectToStorefrontForAuth: boolean;\n}\n\nexport interface CustomizationConfig {\n    languageData: any[];\n}\n\nexport type FlashMessageType = 'error' | 'info' | 'warning' | 'success';\n\nexport interface FlashMessage {\n    type: FlashMessageType;\n    message: string;\n    title?: string;\n}\n\nexport interface ContextConfig {\n    checkoutId?: string;\n    geoCountryCode: string;\n    flashMessages: FlashMessage[];\n    payment: {\n        formId?: string;\n        token?: string;\n    };\n}\n\nexport interface DisplaySettings {\n    hidePriceFromGuests: boolean;\n}\n\nexport interface InventorySettings {\n    showQuantityOnBackorder: boolean;\n    showBackorderMessage: boolean;\n    showQuantityOnHand: boolean;\n    showDefaultShippingExpectationPrompt: boolean;\n    showBackorderAvailabilityPrompt: boolean;\n    backorderAvailabilityPrompt: string | null;\n    defaultShippingExpectationPrompt: string | null;\n    shouldDisplayBackorderMessagesOnStorefront: boolean;\n}\n"
  },
  {
    "path": "packages/core/src/config/configs.mock.ts",
    "content": "import { getFormFields } from '../form/form.mock';\n\nimport Config from './config';\nimport ConfigState from './config-state';\n\nexport function getConfig(): Config {\n    return {\n        context: {\n            checkoutId: '6a6071cc-82ba-45aa-adb0-ebec42d6ff6f',\n            flashMessages: [],\n            geoCountryCode: 'AU',\n            payment: {\n                formId: 'dc030783-6129-4ee3-8e06-6f4270df1527',\n            },\n        },\n        customization: {\n            languageData: [],\n        },\n        storeConfig: {\n            cdnPath: 'https://cdn.bcapp.dev/rHEAD',\n            checkoutSettings: {\n                features: {},\n                checkoutBillingSameAsShippingEnabled: true,\n                checkoutUserExperienceSettings: {\n                    checkoutV2Theme: false,\n                    walletButtonsOnTop: false,\n                    floatingLabelEnabled: false,\n                },\n                enableOrderComments: true,\n                enableTermsAndConditions: false,\n                guestCheckoutEnabled: true,\n                hasMultiShippingEnabled: true,\n                googleMapsApiKey: '',\n                googleRecaptchaSitekey: 'sitekey',\n                isAccountCreationEnabled: true,\n                isAnalyticsEnabled: false,\n                isCardVaultingEnabled: true,\n                isExpressPrivacyPolicy: false,\n                isStorefrontSpamProtectionEnabled: false,\n                isSignInEmailEnabled: false,\n                isPaymentRequestEnabled: false,\n                isPaymentRequestCanMakePaymentEnabled: false,\n                isCouponCodeCollapsed: true,\n                isSpamProtectionEnabled: true,\n                isTrustedShippingAddressEnabled: false,\n                orderTermsAndConditions: '',\n                orderTermsAndConditionsLocation: '',\n                orderTermsAndConditionsLink: '',\n                orderTermsAndConditionsType: '',\n                privacyPolicyUrl: '',\n                providerWithCustomCheckout: null,\n                shippingQuoteFailedMessage:\n                    \"Unfortunately one or more items in your cart can't be shipped to your location. Please choose a different delivery address.\",\n                realtimeShippingProviders: ['Fedex', 'UPS', 'USPS'],\n                requiresMarketingConsent: false,\n                remoteCheckoutProviders: [],\n                shouldRedirectToStorefrontForAuth: false,\n            },\n            currency: {\n                code: 'USD',\n                decimalPlaces: '2',\n                decimalSeparator: '.',\n                isTransactional: true,\n                symbolLocation: 'left',\n                symbol: '$',\n                thousandsSeparator: ',',\n            },\n            displayDateFormat: 'dd/MM/yyyy',\n            displaySettings: {\n                hidePriceFromGuests: false,\n            },\n            inputDateFormat: 'dd/MM/yyyy',\n            formFields: getFormFields(),\n            links: {\n                cartLink: 'https://store-k1drp8k8.bcapp.dev/cart.php',\n                checkoutLink: 'https://store-k1drp8k8.bcapp.dev/checkout',\n                createAccountLink:\n                    'https://store-k1drp8k8.bcapp.dev/login.php?action=create_account',\n                forgotPasswordLink:\n                    'https://store-k1drp8k8.bcapp.dev/login.php?action=reset_password',\n                loginLink: 'https://store-k1drp8k8.bcapp.dev/login.php',\n                logoutLink: 'https://store-k1drp8k8.bcapp.dev/login.php?action=logout',\n                siteLink: 'https://store-k1drp8k8.bcapp.dev/',\n                orderConfirmationLink:\n                    'https://store-k1drp8k8.bcapp.dev/checkout/order-confirmation',\n            },\n            paymentSettings: {\n                bigpayBaseUrl: 'https://bigpay.integration.zone',\n                clientSidePaymentProviders: [\n                    'migs',\n                    'eway',\n                    'securenet',\n                    'usaepay',\n                    'elavon',\n                    'hps',\n                    'quickbooks',\n                    'orbital',\n                    'stripe',\n                    'authorizenet',\n                    'firstdatae4v14',\n                    'nmi',\n                    'braintree',\n                    'braintreepaypal',\n                    'paypal',\n                    'sagepay',\n                    'squarev2',\n                    'afterpay',\n                    'vantiv',\n                ],\n            },\n            shopperConfig: {\n                defaultNewsletterSignup: false,\n                passwordRequirements: {\n                    alpha: '/[A-Za-z]/',\n                    numeric: '/[0-9]/',\n                    minlength: 7,\n                    error: 'Passwords must be at least 7 characters and contain both alphabetic and numeric characters.',\n                },\n                showNewsletterSignup: true,\n            },\n            storeProfile: {\n                orderEmail: 's1504098821@example.com',\n                shopPath: 'https://store-k1drp8k8.bcapp.dev',\n                storeCountry: 'United States',\n                storeCountryCode: 'US',\n                storeHash: 'k1drp8k8',\n                storeId: '1504098821',\n                storeName: 's1504098821',\n                storePhoneNumber: '987654321',\n                storeLanguage: 'en_US',\n            },\n            imageDirectory: 'product_images',\n            isAngularDebuggingEnabled: false,\n            shopperCurrency: {\n                code: 'USD',\n                symbolLocation: 'left',\n                symbol: '$',\n                decimalPlaces: '2',\n                decimalSeparator: '.',\n                thousandsSeparator: ',',\n                exchangeRate: 1,\n                isTransactional: true,\n            },\n            inventorySettings: {\n                showQuantityOnBackorder: false,\n                showBackorderMessage: false,\n                showQuantityOnHand: false,\n                showDefaultShippingExpectationPrompt: false,\n                defaultShippingExpectationPrompt: '',\n                showBackorderAvailabilityPrompt: false,\n                backorderAvailabilityPrompt: '',\n                shouldDisplayBackorderMessagesOnStorefront: false,\n            },\n        },\n    };\n}\n\nexport function getConfigState(): ConfigState {\n    return {\n        data: getConfig(),\n        meta: {\n            externalSource: 'Partner',\n            variantIdentificationToken: 'default',\n        },\n        errors: {},\n        statuses: {},\n    };\n}\n"
  },
  {
    "path": "packages/core/src/config/index.ts",
    "content": "export * from './config-actions';\n\nexport {\n    default as Config,\n    StoreConfig,\n    StoreProfile,\n    ShopperCurrency,\n    FlashMessage,\n    FlashMessageType,\n    UserExperienceSettings,\n    B2BApiSettings,\n} from './config';\nexport { default as ConfigActionCreator } from './config-action-creator';\nexport {\n    default as ConfigSelector,\n    ConfigSelectorFactory,\n    createConfigSelectorFactory,\n} from './config-selector';\nexport { default as configReducer } from './config-reducer';\nexport { default as ConfigRequestSender } from './config-request-sender';\nexport { default as ConfigState, DEFAULT_STATE } from './config-state';\nexport { default as ConfigWindow } from './config-window';\n"
  },
  {
    "path": "packages/core/src/coupon/coupon-action-creator.spec.ts",
    "content": "import { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { Checkout, CheckoutStore, CheckoutStoreState, createCheckoutStore } from '../checkout';\nimport { getCheckoutStoreState, getCheckoutWithCoupons } from '../checkout/checkouts.mock';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport CouponActionCreator from './coupon-action-creator';\nimport { CouponActionType } from './coupon-actions';\nimport CouponRequestSender from './coupon-request-sender';\n\ndescribe('CouponActionCreator', () => {\n    let couponActionCreator: CouponActionCreator;\n    let errorResponse: Response<Error>;\n    let response: Response<Checkout>;\n    let state: CheckoutStoreState;\n    let store: CheckoutStore;\n    let requestSender: CouponRequestSender;\n\n    beforeEach(() => {\n        response = getResponse(getCheckoutWithCoupons());\n        errorResponse = getErrorResponse();\n        state = getCheckoutStoreState();\n        store = createCheckoutStore(state);\n        requestSender = new CouponRequestSender(createRequestSender());\n\n        couponActionCreator = new CouponActionCreator(requestSender);\n\n        jest.spyOn(requestSender, 'applyCoupon').mockReturnValue(Promise.resolve(response));\n        jest.spyOn(requestSender, 'removeCoupon').mockReturnValue(Promise.resolve(response));\n    });\n\n    describe('#applyCoupon()', () => {\n        beforeEach(() => {\n            jest.spyOn(store, 'dispatch');\n        });\n\n        it('emits actions if able to apply coupon', () => {\n            const coupon = 'myCouponCode1234';\n\n            from(couponActionCreator.applyCoupon(coupon)(store))\n                .pipe(toArray())\n                .subscribe((actions) => {\n                    expect(actions).toEqual([\n                        { type: CouponActionType.ApplyCouponRequested },\n                        {\n                            type: CouponActionType.ApplyCouponSucceeded,\n                            payload: getCheckoutWithCoupons(),\n                        },\n                    ]);\n                });\n        });\n\n        it('emits error actions if unable to apply coupon', () => {\n            jest.spyOn(requestSender, 'applyCoupon').mockReturnValue(Promise.reject(errorResponse));\n\n            const coupon = 'myCouponCode1234';\n            const errorHandler = jest.fn((action) => of(action));\n\n            from(couponActionCreator.applyCoupon(coupon)(store))\n                .pipe(catchError(errorHandler), toArray())\n                .subscribe((actions) => {\n                    expect(errorHandler).toHaveBeenCalled();\n                    expect(actions).toEqual([\n                        { type: CouponActionType.ApplyCouponRequested },\n                        {\n                            type: CouponActionType.ApplyCouponFailed,\n                            payload: errorResponse,\n                            error: true,\n                        },\n                    ]);\n                });\n        });\n    });\n\n    describe('#removeCoupon()', () => {\n        beforeEach(() => {\n            jest.spyOn(store, 'dispatch');\n        });\n\n        it('emits actions if able to remove coupon', () => {\n            const coupon = 'myCouponCode1234';\n\n            from(couponActionCreator.removeCoupon(coupon)(store))\n                .pipe(toArray())\n                .subscribe((actions) => {\n                    expect(actions).toEqual([\n                        { type: CouponActionType.RemoveCouponRequested },\n                        {\n                            type: CouponActionType.RemoveCouponSucceeded,\n                            payload: getCheckoutWithCoupons(),\n                        },\n                    ]);\n                });\n        });\n\n        it('emits error actions if unable to remove coupon', () => {\n            jest.spyOn(requestSender, 'removeCoupon').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const coupon = 'myCouponCode1234';\n            const errorHandler = jest.fn((action) => of(action));\n\n            from(couponActionCreator.removeCoupon(coupon)(store))\n                .pipe(catchError(errorHandler), toArray())\n                .subscribe((actions) => {\n                    expect(errorHandler).toHaveBeenCalled();\n                    expect(actions).toEqual([\n                        { type: CouponActionType.RemoveCouponRequested },\n                        {\n                            type: CouponActionType.RemoveCouponFailed,\n                            payload: errorResponse,\n                            error: true,\n                        },\n                    ]);\n                });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/coupon/coupon-action-creator.ts",
    "content": "import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { Observable, Observer } from 'rxjs';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\n\nimport {\n    ApplyCouponAction,\n    CouponAction,\n    CouponActionType,\n    RemoveCouponAction,\n} from './coupon-actions';\nimport CouponRequestSender from './coupon-request-sender';\n\nexport default class CouponActionCreator {\n    constructor(private _couponRequestSender: CouponRequestSender) {}\n\n    applyCoupon(\n        code: string,\n        options?: RequestOptions,\n    ): ThunkAction<CouponAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<ApplyCouponAction>) => {\n                const state = store.getState();\n                const checkout = state.checkout.getCheckout();\n\n                if (!checkout) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                observer.next(createAction(CouponActionType.ApplyCouponRequested));\n\n                this._couponRequestSender\n                    .applyCoupon(checkout.id, code, options)\n                    .then(({ body }) => {\n                        observer.next(createAction(CouponActionType.ApplyCouponSucceeded, body));\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(CouponActionType.ApplyCouponFailed, response),\n                        );\n                    });\n            });\n    }\n\n    removeCoupon(\n        code: string,\n        options?: RequestOptions,\n    ): ThunkAction<CouponAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<RemoveCouponAction>) => {\n                const state = store.getState();\n                const checkout = state.checkout.getCheckout();\n\n                if (!checkout) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                observer.next(createAction(CouponActionType.RemoveCouponRequested));\n\n                this._couponRequestSender\n                    .removeCoupon(checkout.id, code, options)\n                    .then(({ body }) => {\n                        observer.next(createAction(CouponActionType.RemoveCouponSucceeded, body));\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(CouponActionType.RemoveCouponFailed, response),\n                        );\n                    });\n            });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/coupon/coupon-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../checkout';\nimport { RequestError } from '../common/error/errors';\n\nexport enum CouponActionType {\n    ApplyCouponRequested = 'APPLY_COUPON_REQUESTED',\n    ApplyCouponSucceeded = 'APPLY_COUPON_SUCCEEDED',\n    ApplyCouponFailed = 'APPLY_COUPON_FAILED',\n\n    RemoveCouponRequested = 'REMOVE_COUPON_REQUESTED',\n    RemoveCouponSucceeded = 'REMOVE_COUPON_SUCCEEDED',\n    RemoveCouponFailed = 'REMOVE_COUPON_FAILED',\n}\n\nexport type CouponAction = ApplyCouponAction | RemoveCouponAction;\n\nexport type ApplyCouponAction =\n    | ApplyCouponRequestedAction\n    | ApplyCouponSucceededAction\n    | ApplyCouponFailedAction;\n\nexport type RemoveCouponAction =\n    | RemoveCouponRequestedAction\n    | RemoveCouponSucceededAction\n    | RemoveCouponFailedAction;\n\nexport interface ApplyCouponRequestedAction extends Action {\n    type: CouponActionType.ApplyCouponRequested;\n}\n\nexport interface ApplyCouponSucceededAction extends Action<Checkout> {\n    type: CouponActionType.ApplyCouponSucceeded;\n}\n\nexport interface ApplyCouponFailedAction extends Action<RequestError<StorefrontErrorResponseBody>> {\n    type: CouponActionType.ApplyCouponFailed;\n}\n\nexport interface RemoveCouponRequestedAction extends Action {\n    type: CouponActionType.RemoveCouponRequested;\n}\n\nexport interface RemoveCouponSucceededAction extends Action<Checkout> {\n    type: CouponActionType.RemoveCouponSucceeded;\n}\n\nexport interface RemoveCouponFailedAction extends Action<RequestError> {\n    type: CouponActionType.RemoveCouponFailed;\n}\n"
  },
  {
    "path": "packages/core/src/coupon/coupon-reducer.spec.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CheckoutActionType } from '../checkout';\nimport { getCheckout, getCheckoutWithCoupons } from '../checkout/checkouts.mock';\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\nimport { OrderActionType } from '../order';\nimport { getOrder } from '../order/orders.mock';\nimport { ConsignmentActionType } from '../shipping';\n\nimport { CouponActionType } from './coupon-actions';\nimport couponReducer from './coupon-reducer';\nimport CouponState from './coupon-state';\n\ndescribe('couponReducer()', () => {\n    const initialState: CouponState = { errors: {}, statuses: {} };\n\n    it('returns new state when coupon gets applied', () => {\n        const action = createAction(\n            CouponActionType.ApplyCouponSucceeded,\n            getCheckoutWithCoupons(),\n        );\n\n        expect(couponReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: action.payload && action.payload.coupons,\n            }),\n        );\n    });\n\n    it('returns new state when coupon gets removed', () => {\n        const action = createAction(CouponActionType.RemoveCouponSucceeded, getCheckout());\n\n        expect(couponReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: [],\n            }),\n        );\n    });\n\n    it('returns new state when shipping option is updated', () => {\n        const action = createAction(\n            ConsignmentActionType.UpdateShippingOptionSucceeded,\n            getCheckout(),\n        );\n\n        expect(couponReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: [],\n            }),\n        );\n    });\n\n    it('returns new state when checkout gets loaded', () => {\n        const action = createAction(\n            CheckoutActionType.LoadCheckoutSucceeded,\n            getCheckoutWithCoupons(),\n        );\n\n        expect(couponReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: action.payload && action.payload.coupons,\n            }),\n        );\n    });\n\n    it('returns new state when order gets loaded', () => {\n        const action = createAction(OrderActionType.LoadOrderSucceeded, getOrder());\n\n        expect(couponReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: action.payload && action.payload.coupons,\n            }),\n        );\n    });\n\n    it('returns an error state if coupon failed to be applied', () => {\n        const errorResponseBody: StorefrontErrorResponseBody = {\n            title: '',\n            detail: '',\n            type: '',\n            status: 400,\n        };\n\n        const action = createErrorAction(\n            CouponActionType.ApplyCouponFailed,\n            new RequestError(getErrorResponse(errorResponseBody)),\n        );\n\n        expect(couponReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                errors: { applyCouponError: action.payload },\n                statuses: { isApplyingCoupon: false },\n            }),\n        );\n    });\n\n    it('returns an error state if coupon failed to be removed', () => {\n        const action = createErrorAction(\n            CouponActionType.RemoveCouponFailed,\n            new RequestError(getErrorResponse()),\n        );\n\n        expect(couponReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                errors: { removeCouponError: action.payload },\n                statuses: { isRemovingCoupon: false },\n            }),\n        );\n    });\n\n    it('returns new state while applying a coupon', () => {\n        const action = createAction(CouponActionType.ApplyCouponRequested);\n\n        expect(couponReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                statuses: { isApplyingCoupon: true },\n            }),\n        );\n    });\n\n    it('returns new state while removing a coupon', () => {\n        const action = createAction(CouponActionType.RemoveCouponRequested);\n\n        expect(couponReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                statuses: { isRemovingCoupon: true },\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/coupon/coupon-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport {\n    CheckoutAction,\n    CheckoutActionType,\n    CheckoutHydrateAction,\n    CheckoutHydrateActionType,\n} from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\nimport { OrderAction, OrderActionType } from '../order';\nimport { ConsignmentAction, ConsignmentActionType } from '../shipping';\n\nimport Coupon from './coupon';\nimport { CouponAction, CouponActionType } from './coupon-actions';\nimport CouponState, { CouponErrorsState, CouponStatusesState, DEFAULT_STATE } from './coupon-state';\n\nexport default function couponReducer(\n    state: CouponState = DEFAULT_STATE,\n    action: Action,\n): CouponState {\n    const reducer = combineReducers<CouponState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: Coupon[] | undefined,\n    action: CouponAction | CheckoutAction | OrderAction | ConsignmentAction | CheckoutHydrateAction,\n): Coupon[] | undefined {\n    switch (action.type) {\n        case CheckoutActionType.LoadCheckoutSucceeded:\n        case CouponActionType.ApplyCouponSucceeded:\n        case ConsignmentActionType.UpdateShippingOptionSucceeded:\n        case CouponActionType.RemoveCouponSucceeded:\n        case OrderActionType.LoadOrderSucceeded:\n            return arrayReplace(data, action.payload && action.payload.coupons);\n\n        case CheckoutHydrateActionType.HydrateInitialState:\n            return arrayReplace(data, action.payload?.checkout?.coupons);\n\n        default:\n            return data;\n    }\n}\n\nfunction errorsReducer(errors: CouponErrorsState = {}, action: CouponAction): CouponErrorsState {\n    switch (action.type) {\n        case CouponActionType.ApplyCouponRequested:\n        case CouponActionType.ApplyCouponSucceeded:\n            return objectSet(errors, 'applyCouponError', undefined);\n\n        case CouponActionType.ApplyCouponFailed:\n            return objectSet(errors, 'applyCouponError', action.payload);\n\n        case CouponActionType.RemoveCouponRequested:\n        case CouponActionType.RemoveCouponSucceeded:\n            return objectSet(errors, 'removeCouponError', undefined);\n\n        case CouponActionType.RemoveCouponFailed:\n            return objectSet(errors, 'removeCouponError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: CouponStatusesState = {},\n    action: CouponAction,\n): CouponStatusesState {\n    switch (action.type) {\n        case CouponActionType.ApplyCouponRequested:\n            return objectSet(statuses, 'isApplyingCoupon', true);\n\n        case CouponActionType.ApplyCouponSucceeded:\n        case CouponActionType.ApplyCouponFailed:\n            return objectSet(statuses, 'isApplyingCoupon', false);\n\n        case CouponActionType.RemoveCouponRequested:\n            return objectSet(statuses, 'isRemovingCoupon', true);\n\n        case CouponActionType.RemoveCouponSucceeded:\n        case CouponActionType.RemoveCouponFailed:\n            return objectSet(statuses, 'isRemovingCoupon', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/coupon/coupon-request-sender.spec.ts",
    "content": "import { createRequestSender, createTimeout, RequestSender } from '@bigcommerce/request-sender';\n\nimport { EmptyCartError } from '../cart/errors';\nimport { getCheckoutWithCoupons } from '../checkout/checkouts.mock';\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport CouponRequestSender from './coupon-request-sender';\n\ndescribe('Coupon Request Sender', () => {\n    let couponRequestSender: CouponRequestSender;\n    let requestSender: RequestSender;\n    const defaultIncludes = [\n        'cart.lineItems.physicalItems.options',\n        'cart.lineItems.physicalItems.stockPosition',\n        'cart.lineItems.digitalItems.options',\n        'cart.lineItems.digitalItems.stockPosition',\n        'customer',\n        'customer.customerGroup',\n        'payments',\n        'promotions.banners',\n        'consignments.availableShippingOptions',\n    ].join(',');\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        couponRequestSender = new CouponRequestSender(requestSender);\n    });\n\n    it('couponRequestSender is defined', () => {\n        expect(couponRequestSender).toBeDefined();\n    });\n\n    const checkoutId = 'checkoutId1234';\n    const couponCode = 'myCouponCode1234';\n\n    describe('#applyCoupon()', () => {\n        it('applies coupon code', async () => {\n            const response = getResponse(getCheckoutWithCoupons());\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n\n            const output = await couponRequestSender.applyCoupon(checkoutId, couponCode);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/coupons',\n                {\n                    body: { couponCode },\n                    params: {\n                        include: defaultIncludes,\n                    },\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                },\n            );\n        });\n\n        it('applies coupon with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const response = getResponse(getCheckoutWithCoupons());\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n\n            const output = await couponRequestSender.applyCoupon(checkoutId, couponCode, options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/coupons',\n                {\n                    ...options,\n                    body: { couponCode },\n                    params: {\n                        include: defaultIncludes,\n                    },\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                },\n            );\n        });\n\n        it('throws `EmptyCartError` if error type is `empty_cart`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 422,\n                    title: 'The request could not process',\n                    type: 'empty_cart',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.reject(error));\n\n            await expect(couponRequestSender.applyCoupon(checkoutId, couponCode)).rejects.toThrow(\n                EmptyCartError,\n            );\n        });\n    });\n\n    describe('#removeCoupon()', () => {\n        it('removes coupon code', async () => {\n            const response = getResponse(getCheckoutWithCoupons());\n\n            jest.spyOn(requestSender, 'delete').mockReturnValue(Promise.resolve(response));\n\n            const output = await couponRequestSender.removeCoupon(checkoutId, couponCode);\n\n            expect(output).toEqual(response);\n            expect(requestSender.delete).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/coupons/myCouponCode1234',\n                {\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include: defaultIncludes,\n                    },\n                },\n            );\n        });\n\n        it('removes coupon code with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const response = getResponse(getCheckoutWithCoupons());\n\n            jest.spyOn(requestSender, 'delete').mockReturnValue(Promise.resolve(response));\n\n            const output = await couponRequestSender.removeCoupon(checkoutId, couponCode, options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.delete).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/coupons/myCouponCode1234',\n                {\n                    ...options,\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include: defaultIncludes,\n                    },\n                },\n            );\n        });\n\n        it('throws `EmptyCartError` if error type is `empty_cart`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 422,\n                    title: 'The request could not process',\n                    type: 'empty_cart',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'delete').mockReturnValue(Promise.reject(error));\n\n            await expect(couponRequestSender.removeCoupon(checkoutId, couponCode)).rejects.toThrow(\n                EmptyCartError,\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/coupon/coupon-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { EmptyCartError } from '../cart/errors';\nimport { Checkout, CHECKOUT_DEFAULT_INCLUDES, CheckoutIncludes } from '../checkout';\nimport {\n    ContentType,\n    joinIncludes,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nexport default class CouponRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    applyCoupon(\n        checkoutId: string,\n        couponCode: string,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<Checkout>> {\n        const url = `/api/storefront/checkouts/${checkoutId}/coupons`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender\n            .post<Checkout>(url, {\n                headers,\n                timeout,\n                params: {\n                    include: joinIncludes([\n                        ...CHECKOUT_DEFAULT_INCLUDES,\n                        CheckoutIncludes.AvailableShippingOptions,\n                    ]),\n                },\n                body: { couponCode },\n            })\n            .catch((err) => {\n                if (err.body.type === 'empty_cart') {\n                    throw new EmptyCartError();\n                }\n\n                throw err;\n            });\n    }\n\n    removeCoupon(\n        checkoutId: string,\n        couponCode: string,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<Checkout>> {\n        const url = `/api/storefront/checkouts/${checkoutId}/coupons/${couponCode}`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender\n            .delete<Checkout>(url, {\n                headers,\n                timeout,\n                params: {\n                    include: joinIncludes([\n                        ...CHECKOUT_DEFAULT_INCLUDES,\n                        CheckoutIncludes.AvailableShippingOptions,\n                    ]),\n                },\n            })\n            .catch((err) => {\n                if (err.body.type === 'empty_cart') {\n                    throw new EmptyCartError();\n                }\n\n                throw err;\n            });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/coupon/coupon-selector.spec.ts",
    "content": "import { RequestError } from '../common/error/errors';\n\nimport CouponSelector, {\n    CouponSelectorFactory,\n    createCouponSelectorFactory,\n} from './coupon-selector';\nimport CouponState from './coupon-state';\n\ndescribe('CouponSelector', () => {\n    let couponSelector: CouponSelector;\n    let createCouponSelector: CouponSelectorFactory;\n    let state: CouponState;\n\n    beforeEach(() => {\n        createCouponSelector = createCouponSelectorFactory();\n        state = {\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    describe('#getApplyError()', () => {\n        it('returns error if unable to apply', () => {\n            const applyCouponError = new RequestError();\n\n            couponSelector = createCouponSelector({\n                ...state,\n                errors: { applyCouponError },\n            });\n\n            expect(couponSelector.getApplyError()).toEqual(applyCouponError);\n        });\n\n        it('does not returns error if able to apply', () => {\n            couponSelector = createCouponSelector(state);\n\n            expect(couponSelector.getApplyError()).toBeUndefined();\n        });\n    });\n\n    describe('#isApplying()', () => {\n        it('returns true if applying a coupon', () => {\n            couponSelector = createCouponSelector({\n                ...state,\n                statuses: { isApplyingCoupon: true },\n            });\n\n            expect(couponSelector.isApplying()).toBe(true);\n        });\n\n        it('returns false if not applying a coupon', () => {\n            couponSelector = createCouponSelector(state);\n\n            expect(couponSelector.isApplying()).toBe(false);\n        });\n    });\n\n    describe('#getRemoveError()', () => {\n        it('returns error if unable to remove', () => {\n            const removeCouponError = new RequestError();\n\n            couponSelector = createCouponSelector({\n                ...state,\n                errors: { removeCouponError },\n            });\n\n            expect(couponSelector.getRemoveError()).toEqual(removeCouponError);\n        });\n\n        it('does not returns error if able to remove', () => {\n            couponSelector = createCouponSelector(state);\n\n            expect(couponSelector.getRemoveError()).toBeUndefined();\n        });\n    });\n\n    describe('#isRemoving()', () => {\n        it('returns true if removing a coupon', () => {\n            couponSelector = createCouponSelector({\n                ...state,\n                statuses: { isRemovingCoupon: true },\n            });\n\n            expect(couponSelector.isRemoving()).toBe(true);\n        });\n\n        it('returns false if not removing a coupon', () => {\n            couponSelector = createCouponSelector(state);\n\n            expect(couponSelector.isRemoving()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/coupon/coupon-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { RequestError } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\n\nimport Coupon from './coupon';\nimport CouponState, { DEFAULT_STATE } from './coupon-state';\n\nexport default interface CouponSelector {\n    getCoupons(): Coupon[] | undefined;\n    getRemoveError(): RequestError | undefined;\n    getApplyError(): RequestError | undefined;\n    isApplying(): boolean;\n    isRemoving(): boolean;\n}\n\nexport type CouponSelectorFactory = (state: CouponState) => CouponSelector;\n\nexport function createCouponSelectorFactory(): CouponSelectorFactory {\n    const getCoupons = createSelector(\n        (state: CouponState) => state.data,\n        (data) => () => data,\n    );\n\n    const getRemoveError = createSelector(\n        (state: CouponState) => state.errors.removeCouponError,\n        (error) => () => error,\n    );\n\n    const getApplyError = createSelector(\n        (state: CouponState) => state.errors.applyCouponError,\n        (error) => () => error,\n    );\n\n    const isApplying = createSelector(\n        (state: CouponState) => !!state.statuses.isApplyingCoupon,\n        (status) => () => status,\n    );\n\n    const isRemoving = createSelector(\n        (state: CouponState) => !!state.statuses.isRemovingCoupon,\n        (status) => () => status,\n    );\n\n    return memoizeOne((state: CouponState = DEFAULT_STATE): CouponSelector => {\n        return {\n            getCoupons: getCoupons(state),\n            getRemoveError: getRemoveError(state),\n            getApplyError: getApplyError(state),\n            isApplying: isApplying(state),\n            isRemoving: isRemoving(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/coupon/coupon-state.ts",
    "content": "import { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\n\nimport Coupon from './coupon';\n\nexport default interface CouponState {\n    data?: Coupon[];\n    errors: CouponErrorsState;\n    statuses: CouponStatusesState;\n}\n\nexport interface CouponErrorsState {\n    applyCouponError?: RequestError<StorefrontErrorResponseBody>;\n    removeCouponError?: RequestError<StorefrontErrorResponseBody>;\n}\n\nexport interface CouponStatusesState {\n    isApplyingCoupon?: boolean;\n    isRemovingCoupon?: boolean;\n}\n\nexport const DEFAULT_STATE: CouponState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/coupon/coupon.ts",
    "content": "export default interface Coupon {\n    id: string;\n    displayName: string;\n    code: string;\n    couponType: string;\n    discountedAmount: number;\n    hasMaxLimitReached?: boolean;\n}\n"
  },
  {
    "path": "packages/core/src/coupon/coupons.mock.ts",
    "content": "import Coupon from './coupon';\nimport CouponState from './coupon-state';\n\nexport function getCoupon(): Coupon {\n    return {\n        code: 'savebig2015',\n        displayName: '20% off each item',\n        couponType: 'percentage_discount',\n        discountedAmount: 5,\n        id: '1',\n    };\n}\n\nexport function getShippingCoupon(): Coupon {\n    return {\n        code: '279F507D817E3E7',\n        displayName: '$5.00 off the shipping total',\n        couponType: 'shipping_discount',\n        discountedAmount: 5,\n        id: '4',\n    };\n}\n\nexport function getCouponsState(): CouponState {\n    return {\n        data: [getCoupon(), getShippingCoupon()],\n        errors: {},\n        statuses: {},\n    };\n}\n"
  },
  {
    "path": "packages/core/src/coupon/gift-certificate-action-creator.spec.ts",
    "content": "import { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { ErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout, CheckoutStore, CheckoutStoreState, createCheckoutStore } from '../checkout';\nimport {\n    getCheckout,\n    getCheckoutStoreState,\n    getCheckoutWithGiftCertificates,\n} from '../checkout/checkouts.mock';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport GiftCertificateActionCreator from './gift-certificate-action-creator';\nimport { GiftCertificateActionType } from './gift-certificate-actions';\nimport GiftCertificateRequestSender from './gift-certificate-request-sender';\n\ndescribe('GiftCertificateActionCreator', () => {\n    let errorResponse: Response<ErrorResponseBody>;\n    let giftCertificateActionCreator: GiftCertificateActionCreator;\n    let giftCertificateRequestSender: GiftCertificateRequestSender;\n    let response: Response<Checkout>;\n    let state: CheckoutStoreState;\n    let store: CheckoutStore;\n\n    beforeEach(() => {\n        errorResponse = getErrorResponse();\n        state = getCheckoutStoreState();\n        store = createCheckoutStore(state);\n\n        giftCertificateRequestSender = new GiftCertificateRequestSender(createRequestSender());\n        giftCertificateActionCreator = new GiftCertificateActionCreator(\n            giftCertificateRequestSender,\n        );\n    });\n\n    describe('#applyGiftCertificate()', () => {\n        beforeEach(() => {\n            response = getResponse(getCheckoutWithGiftCertificates());\n\n            jest.spyOn(giftCertificateRequestSender, 'applyGiftCertificate').mockReturnValue(\n                Promise.resolve(response),\n            );\n\n            jest.spyOn(store, 'dispatch');\n        });\n\n        it('emits actions if able to apply giftCertificate', async () => {\n            const giftCertificate = 'myGiftCertificate1234';\n            const actions = await from(\n                giftCertificateActionCreator.applyGiftCertificate(giftCertificate)(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: GiftCertificateActionType.ApplyGiftCertificateRequested },\n                {\n                    type: GiftCertificateActionType.ApplyGiftCertificateSucceeded,\n                    payload: response.body,\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to apply giftCertificate', async () => {\n            jest.spyOn(giftCertificateRequestSender, 'applyGiftCertificate').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const giftCertificate = 'myGiftCertificate1234';\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(\n                giftCertificateActionCreator.applyGiftCertificate(giftCertificate)(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: GiftCertificateActionType.ApplyGiftCertificateRequested },\n                {\n                    type: GiftCertificateActionType.ApplyGiftCertificateFailed,\n                    payload: errorResponse,\n                    error: true,\n                },\n            ]);\n        });\n    });\n\n    describe('#removeGiftCertificate()', () => {\n        beforeEach(() => {\n            response = getResponse(getCheckout());\n\n            jest.spyOn(giftCertificateRequestSender, 'removeGiftCertificate').mockReturnValue(\n                Promise.resolve(response),\n            );\n\n            jest.spyOn(store, 'dispatch');\n        });\n\n        it('emits actions if able to remove giftCertificate', async () => {\n            const giftCertificate = 'myGiftCertificate1234';\n            const actions = await from(\n                giftCertificateActionCreator.removeGiftCertificate(giftCertificate)(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: GiftCertificateActionType.RemoveGiftCertificateRequested },\n                {\n                    type: GiftCertificateActionType.RemoveGiftCertificateSucceeded,\n                    payload: response.body,\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to remove giftCertificate', async () => {\n            jest.spyOn(giftCertificateRequestSender, 'removeGiftCertificate').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const giftCertificate = 'myGiftCertificate1234';\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(\n                giftCertificateActionCreator.removeGiftCertificate(giftCertificate)(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: GiftCertificateActionType.RemoveGiftCertificateRequested },\n                {\n                    type: GiftCertificateActionType.RemoveGiftCertificateFailed,\n                    payload: errorResponse,\n                    error: true,\n                },\n            ]);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/coupon/gift-certificate-action-creator.ts",
    "content": "import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { Observable, Observer } from 'rxjs';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\n\nimport {\n    ApplyGiftCertificateAction,\n    GiftCertificateActionType,\n    RemoveGiftCertificateAction,\n} from './gift-certificate-actions';\n\nimport { GiftCertificateRequestSender } from '.';\n\nexport default class GiftCertificateActionCreator {\n    constructor(private _giftCertificateRequestSender: GiftCertificateRequestSender) {}\n\n    applyGiftCertificate(\n        giftCertificate: string,\n        options?: RequestOptions,\n    ): ThunkAction<ApplyGiftCertificateAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<ApplyGiftCertificateAction>) => {\n                const state = store.getState();\n                const checkout = state.checkout.getCheckout();\n\n                if (!checkout) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                observer.next(\n                    createAction(GiftCertificateActionType.ApplyGiftCertificateRequested),\n                );\n\n                this._giftCertificateRequestSender\n                    .applyGiftCertificate(checkout.id, giftCertificate, options)\n                    .then(({ body }) => {\n                        observer.next(\n                            createAction(\n                                GiftCertificateActionType.ApplyGiftCertificateSucceeded,\n                                body,\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                GiftCertificateActionType.ApplyGiftCertificateFailed,\n                                response,\n                            ),\n                        );\n                    });\n            });\n    }\n\n    removeGiftCertificate(\n        giftCertificate: string,\n        options?: RequestOptions,\n    ): ThunkAction<RemoveGiftCertificateAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<RemoveGiftCertificateAction>) => {\n                const state = store.getState();\n                const checkout = state.checkout.getCheckout();\n\n                if (!checkout) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                observer.next(\n                    createAction(GiftCertificateActionType.RemoveGiftCertificateRequested),\n                );\n\n                this._giftCertificateRequestSender\n                    .removeGiftCertificate(checkout.id, giftCertificate, options)\n                    .then(({ body }) => {\n                        observer.next(\n                            createAction(\n                                GiftCertificateActionType.RemoveGiftCertificateSucceeded,\n                                body,\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                GiftCertificateActionType.RemoveGiftCertificateFailed,\n                                response,\n                            ),\n                        );\n                    });\n            });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/coupon/gift-certificate-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../checkout';\nimport { RequestError } from '../common/error/errors';\n\nexport enum GiftCertificateActionType {\n    ApplyGiftCertificateRequested = 'APPLY_GIFT_CERTIFICATE_REQUESTED',\n    ApplyGiftCertificateSucceeded = 'APPLY_GIFT_CERTIFICATE_SUCCEEDED',\n    ApplyGiftCertificateFailed = 'APPLY_GIFT_CERTIFICATE_FAILED',\n\n    RemoveGiftCertificateRequested = 'REMOVE_GIFT_CERTIFICATE_REQUESTED',\n    RemoveGiftCertificateSucceeded = 'REMOVE_GIFT_CERTIFICATE_SUCCEEDED',\n    RemoveGiftCertificateFailed = 'REMOVE_GIFT_CERTIFICATE_FAILED',\n}\n\nexport type GiftCertificateAction = ApplyGiftCertificateAction | RemoveGiftCertificateAction;\n\nexport type ApplyGiftCertificateAction =\n    | ApplyGiftCertificateRequestedAction\n    | ApplyGiftCertificateSucceededAction\n    | ApplyGiftCertificateFailedAction;\n\nexport type RemoveGiftCertificateAction =\n    | RemoveGiftCertificateRequestedAction\n    | RemoveGiftCertificateSucceededAction\n    | RemoveGiftCertificateFailedAction;\n\nexport interface ApplyGiftCertificateRequestedAction extends Action {\n    type: GiftCertificateActionType.ApplyGiftCertificateRequested;\n}\n\nexport interface ApplyGiftCertificateSucceededAction extends Action<Checkout> {\n    type: GiftCertificateActionType.ApplyGiftCertificateSucceeded;\n}\n\nexport interface ApplyGiftCertificateFailedAction\n    extends Action<RequestError<StorefrontErrorResponseBody>> {\n    type: GiftCertificateActionType.ApplyGiftCertificateFailed;\n}\n\nexport interface RemoveGiftCertificateRequestedAction extends Action {\n    type: GiftCertificateActionType.RemoveGiftCertificateRequested;\n}\n\nexport interface RemoveGiftCertificateSucceededAction extends Action<Checkout> {\n    type: GiftCertificateActionType.RemoveGiftCertificateSucceeded;\n}\n\nexport interface RemoveGiftCertificateFailedAction\n    extends Action<RequestError<StorefrontErrorResponseBody>> {\n    type: GiftCertificateActionType.RemoveGiftCertificateFailed;\n}\n"
  },
  {
    "path": "packages/core/src/coupon/gift-certificate-reducer.spec.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\n\nimport { CheckoutActionType } from '../checkout';\nimport { getCheckout, getCheckoutWithGiftCertificates } from '../checkout/checkouts.mock';\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\nimport { ConsignmentActionType } from '../shipping';\n\nimport { GiftCertificateActionType } from './gift-certificate-actions';\nimport giftCertificateReducer from './gift-certificate-reducer';\nimport GiftCertificateState from './gift-certificate-state';\n\ndescribe('giftCertificateReducer()', () => {\n    const initialState: GiftCertificateState = { errors: {}, statuses: {} };\n\n    it('returns new state when gift certificate gets applied', () => {\n        const action = createAction(\n            GiftCertificateActionType.ApplyGiftCertificateSucceeded,\n            getCheckoutWithGiftCertificates(),\n        );\n\n        expect(giftCertificateReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: action.payload && action.payload.giftCertificates,\n            }),\n        );\n    });\n\n    it('returns new state when gift certificate gets removed', () => {\n        const action = createAction(\n            GiftCertificateActionType.RemoveGiftCertificateSucceeded,\n            getCheckout(),\n        );\n\n        expect(giftCertificateReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: [],\n            }),\n        );\n    });\n\n    it('returns new state when consignment gets updated', () => {\n        const action = createAction(\n            ConsignmentActionType.UpdateConsignmentSucceeded,\n            getCheckoutWithGiftCertificates(),\n            { id: '123' },\n        );\n\n        expect(giftCertificateReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: action.payload && action.payload.giftCertificates,\n            }),\n        );\n    });\n\n    it('returns new state when consignment gets created', () => {\n        const action = createAction(\n            ConsignmentActionType.CreateConsignmentsSucceeded,\n            getCheckoutWithGiftCertificates(),\n            { id: '123' },\n        );\n\n        expect(giftCertificateReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: action.payload && action.payload.giftCertificates,\n            }),\n        );\n    });\n\n    it('returns new state when consignment gets deleted', () => {\n        const action = createAction(\n            ConsignmentActionType.DeleteConsignmentSucceeded,\n            getCheckoutWithGiftCertificates(),\n            { id: '123' },\n        );\n\n        expect(giftCertificateReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: action.payload && action.payload.giftCertificates,\n            }),\n        );\n    });\n\n    it('returns new state when shipping option gets updated', () => {\n        const action = createAction(\n            ConsignmentActionType.UpdateShippingOptionSucceeded,\n            getCheckoutWithGiftCertificates(),\n            { id: '123' },\n        );\n\n        expect(giftCertificateReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: action.payload && action.payload.giftCertificates,\n            }),\n        );\n    });\n\n    it('returns new state when checkout gets loaded', () => {\n        const action = createAction(\n            CheckoutActionType.LoadCheckoutSucceeded,\n            getCheckoutWithGiftCertificates(),\n        );\n\n        expect(giftCertificateReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: action.payload && action.payload.giftCertificates,\n            }),\n        );\n    });\n\n    it('returns an error state if gift certificate failed to be applied', () => {\n        const action = createErrorAction(\n            GiftCertificateActionType.ApplyGiftCertificateFailed,\n            new RequestError(getErrorResponse()),\n        );\n\n        expect(giftCertificateReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                errors: { applyGiftCertificateError: action.payload },\n                statuses: { isApplyingGiftCertificate: false },\n            }),\n        );\n    });\n\n    it('returns an error state if gift certificate failed to be removed', () => {\n        const action = createErrorAction(\n            GiftCertificateActionType.RemoveGiftCertificateFailed,\n            new RequestError(getErrorResponse()),\n        );\n\n        expect(giftCertificateReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                errors: { removeGiftCertificateError: action.payload },\n                statuses: { isRemovingGiftCertificate: false },\n            }),\n        );\n    });\n\n    it('returns new state while applying a gift certificate', () => {\n        const action = createAction(GiftCertificateActionType.ApplyGiftCertificateRequested);\n\n        expect(giftCertificateReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                statuses: { isApplyingGiftCertificate: true },\n            }),\n        );\n    });\n\n    it('returns new state while removing a giftCertificate', () => {\n        const action = createAction(GiftCertificateActionType.RemoveGiftCertificateRequested);\n\n        expect(giftCertificateReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                statuses: { isRemovingGiftCertificate: true },\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/coupon/gift-certificate-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport {\n    CheckoutAction,\n    CheckoutActionType,\n    CheckoutHydrateAction,\n    CheckoutHydrateActionType,\n} from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\nimport { ConsignmentAction, ConsignmentActionType } from '../shipping';\n\nimport { CouponAction, CouponActionType } from './coupon-actions';\nimport GiftCertificate from './gift-certificate';\nimport { GiftCertificateAction, GiftCertificateActionType } from './gift-certificate-actions';\nimport GiftCertificateState, {\n    DEFAULT_STATE,\n    GiftCertificateErrorsState,\n    GiftCertificateStatusesState,\n} from './gift-certificate-state';\n\nexport default function giftCertificateReducer(\n    state: GiftCertificateState = DEFAULT_STATE,\n    action: Action,\n): GiftCertificateState {\n    const reducer = combineReducers<GiftCertificateState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: GiftCertificate[] | undefined,\n    action:\n        | CheckoutAction\n        | GiftCertificateAction\n        | ConsignmentAction\n        | CouponAction\n        | CheckoutHydrateAction,\n): GiftCertificate[] | undefined {\n    switch (action.type) {\n        case CheckoutActionType.LoadCheckoutSucceeded:\n        case ConsignmentActionType.CreateConsignmentsSucceeded:\n        case ConsignmentActionType.UpdateConsignmentSucceeded:\n        case ConsignmentActionType.DeleteConsignmentSucceeded:\n        case ConsignmentActionType.UpdateShippingOptionSucceeded:\n        case CouponActionType.ApplyCouponSucceeded:\n        case CouponActionType.RemoveCouponSucceeded:\n        case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n        case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n            return arrayReplace(data, action.payload && action.payload.giftCertificates);\n\n        case CheckoutHydrateActionType.HydrateInitialState:\n            return arrayReplace(data, action.payload?.checkout?.giftCertificates);\n\n        default:\n            return data;\n    }\n}\n\nfunction errorsReducer(\n    errors: GiftCertificateErrorsState = DEFAULT_STATE.errors,\n    action: GiftCertificateAction,\n): GiftCertificateErrorsState {\n    switch (action.type) {\n        case GiftCertificateActionType.ApplyGiftCertificateRequested:\n        case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n            return objectSet(errors, 'applyGiftCertificateError', undefined);\n\n        case GiftCertificateActionType.ApplyGiftCertificateFailed:\n            return objectSet(errors, 'applyGiftCertificateError', action.payload);\n\n        case GiftCertificateActionType.RemoveGiftCertificateRequested:\n        case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n            return objectSet(errors, 'removeGiftCertificateError', undefined);\n\n        case GiftCertificateActionType.RemoveGiftCertificateFailed:\n            return objectSet(errors, 'removeGiftCertificateError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: GiftCertificateStatusesState = DEFAULT_STATE.statuses,\n    action: GiftCertificateAction,\n): GiftCertificateStatusesState {\n    switch (action.type) {\n        case GiftCertificateActionType.ApplyGiftCertificateRequested:\n            return objectSet(statuses, 'isApplyingGiftCertificate', true);\n\n        case GiftCertificateActionType.ApplyGiftCertificateSucceeded:\n        case GiftCertificateActionType.ApplyGiftCertificateFailed:\n            return objectSet(statuses, 'isApplyingGiftCertificate', false);\n\n        case GiftCertificateActionType.RemoveGiftCertificateRequested:\n            return objectSet(statuses, 'isRemovingGiftCertificate', true);\n\n        case GiftCertificateActionType.RemoveGiftCertificateSucceeded:\n        case GiftCertificateActionType.RemoveGiftCertificateFailed:\n            return objectSet(statuses, 'isRemovingGiftCertificate', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/coupon/gift-certificate-request-sender.spec.ts",
    "content": "import { createRequestSender, createTimeout, RequestSender } from '@bigcommerce/request-sender';\n\nimport { EmptyCartError } from '../cart/errors';\nimport { getCheckoutWithGiftCertificates } from '../checkout/checkouts.mock';\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport GiftCertificateRequestSender from './gift-certificate-request-sender';\n\ndescribe('Gift Certificate Request Sender', () => {\n    let giftCertificateRequestSender: GiftCertificateRequestSender;\n    let requestSender: RequestSender;\n\n    const defaultIncludes = [\n        'cart.lineItems.physicalItems.options',\n        'cart.lineItems.physicalItems.stockPosition',\n        'cart.lineItems.digitalItems.options',\n        'cart.lineItems.digitalItems.stockPosition',\n        'customer',\n        'customer.customerGroup',\n        'payments',\n        'promotions.banners',\n    ].join(',');\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n\n        jest.spyOn(requestSender, 'delete').mockReturnValue(Promise.resolve(getResponse({})));\n        jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(getResponse({})));\n\n        giftCertificateRequestSender = new GiftCertificateRequestSender(requestSender);\n    });\n\n    it('giftCertificateRequestSender is defined', () => {\n        expect(giftCertificateRequestSender).toBeDefined();\n    });\n\n    const checkoutId = 'checkoutId1234';\n    const giftCertificateCode = 'myGiftCertificate1234';\n\n    describe('#applyGiftCertificate()', () => {\n        it('applies gift certificate code', async () => {\n            const response = getResponse(getCheckoutWithGiftCertificates());\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n\n            const output = await giftCertificateRequestSender.applyGiftCertificate(\n                checkoutId,\n                giftCertificateCode,\n            );\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/gift-certificates',\n                {\n                    body: { giftCertificateCode },\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include: defaultIncludes,\n                    },\n                },\n            );\n        });\n\n        it('applies gift certificate with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const response = getResponse(getCheckoutWithGiftCertificates());\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n\n            const output = await giftCertificateRequestSender.applyGiftCertificate(\n                checkoutId,\n                giftCertificateCode,\n                options,\n            );\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/gift-certificates',\n                {\n                    ...options,\n                    body: { giftCertificateCode },\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include: defaultIncludes,\n                    },\n                },\n            );\n        });\n\n        it('throws `EmptyCartError` if error type is `empty_cart`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 422,\n                    title: 'The request could not process',\n                    type: 'empty_cart',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.reject(error));\n\n            await expect(\n                giftCertificateRequestSender.applyGiftCertificate(checkoutId, giftCertificateCode),\n            ).rejects.toThrow(EmptyCartError);\n        });\n    });\n\n    describe('#removeGiftCertificate()', () => {\n        it('removes gift certificate code', async () => {\n            const response = getResponse(getCheckoutWithGiftCertificates());\n\n            jest.spyOn(requestSender, 'delete').mockReturnValue(Promise.resolve(response));\n\n            const output = await giftCertificateRequestSender.removeGiftCertificate(\n                checkoutId,\n                giftCertificateCode,\n            );\n\n            expect(output).toEqual(response);\n            expect(requestSender.delete).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/gift-certificates/myGiftCertificate1234',\n                {\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include: defaultIncludes,\n                    },\n                },\n            );\n        });\n\n        it('removes gift certificate code with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const response = getResponse(getCheckoutWithGiftCertificates());\n\n            jest.spyOn(requestSender, 'delete').mockReturnValue(Promise.resolve(response));\n\n            const output = await giftCertificateRequestSender.removeGiftCertificate(\n                checkoutId,\n                giftCertificateCode,\n                options,\n            );\n\n            expect(output).toEqual(response);\n            expect(requestSender.delete).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/gift-certificates/myGiftCertificate1234',\n                {\n                    ...options,\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include: defaultIncludes,\n                    },\n                },\n            );\n        });\n\n        it('throws `EmptyCartError` if error type is `empty_cart`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 422,\n                    title: 'The request could not process',\n                    type: 'empty_cart',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'delete').mockReturnValue(Promise.reject(error));\n\n            await expect(\n                giftCertificateRequestSender.removeGiftCertificate(checkoutId, giftCertificateCode),\n            ).rejects.toThrow(EmptyCartError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/coupon/gift-certificate-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { EmptyCartError } from '../cart/errors';\nimport { Checkout, CHECKOUT_DEFAULT_INCLUDES } from '../checkout';\nimport {\n    ContentType,\n    joinIncludes,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nexport default class GiftCertificateRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    applyGiftCertificate(\n        checkoutId: string,\n        giftCertificateCode: string,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<Checkout>> {\n        const url = `/api/storefront/checkouts/${checkoutId}/gift-certificates`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender\n            .post<Checkout>(url, {\n                headers,\n                timeout,\n                params: {\n                    include: joinIncludes(CHECKOUT_DEFAULT_INCLUDES),\n                },\n                body: { giftCertificateCode },\n            })\n            .catch((err) => {\n                if (err.body.type === 'empty_cart') {\n                    throw new EmptyCartError();\n                }\n\n                throw err;\n            });\n    }\n\n    removeGiftCertificate(\n        checkoutId: string,\n        giftCertificateCode: string,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<Checkout>> {\n        const url = `/api/storefront/checkouts/${checkoutId}/gift-certificates/${giftCertificateCode}`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender\n            .delete<Checkout>(url, {\n                headers,\n                timeout,\n                params: {\n                    include: joinIncludes(CHECKOUT_DEFAULT_INCLUDES),\n                },\n            })\n            .catch((err) => {\n                if (err.body.type === 'empty_cart') {\n                    throw new EmptyCartError();\n                }\n\n                throw err;\n            });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/coupon/gift-certificate-selector.spec.ts",
    "content": "import { createRequestErrorFactory } from '../common/error';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport GiftCertificateSelector, {\n    createGiftCertificateSelectorFactory,\n    GiftCertificateSelectorFactory,\n} from './gift-certificate-selector';\nimport GiftCertificateState from './gift-certificate-state';\n\ndescribe('GiftCertificateSelector', () => {\n    let createGiftCertificateSelector: GiftCertificateSelectorFactory;\n    let giftCertificateSelector: GiftCertificateSelector;\n    let state: { giftCertificates: GiftCertificateState };\n    const errorFactory = createRequestErrorFactory();\n\n    beforeEach(() => {\n        createGiftCertificateSelector = createGiftCertificateSelectorFactory();\n        state = {\n            giftCertificates: {\n                errors: {},\n                statuses: {},\n            },\n        };\n    });\n\n    describe('#getApplyError()', () => {\n        it('returns error if unable to apply', () => {\n            const applyGiftCertificateError = errorFactory.createError(getErrorResponse());\n\n            giftCertificateSelector = createGiftCertificateSelector({\n                ...state.giftCertificates,\n                errors: { applyGiftCertificateError },\n            });\n\n            expect(giftCertificateSelector.getApplyError()).toEqual(applyGiftCertificateError);\n        });\n\n        it('does not returns error if able to apply', () => {\n            giftCertificateSelector = createGiftCertificateSelector(state.giftCertificates);\n\n            expect(giftCertificateSelector.getApplyError()).toBeUndefined();\n        });\n    });\n\n    describe('#isApplying()', () => {\n        it('returns true if applying a gift certificate', () => {\n            giftCertificateSelector = createGiftCertificateSelector({\n                ...state.giftCertificates,\n                statuses: { isApplyingGiftCertificate: true },\n            });\n\n            expect(giftCertificateSelector.isApplying()).toBe(true);\n        });\n\n        it('returns false if not applying a gift certificate', () => {\n            giftCertificateSelector = createGiftCertificateSelector(state.giftCertificates);\n\n            expect(giftCertificateSelector.isApplying()).toBe(false);\n        });\n    });\n\n    describe('#getRemoveError()', () => {\n        it('returns error if unable to remove', () => {\n            const removeGiftCertificateError = errorFactory.createError(getErrorResponse());\n\n            giftCertificateSelector = createGiftCertificateSelector({\n                ...state.giftCertificates,\n                errors: { removeGiftCertificateError },\n            });\n\n            expect(giftCertificateSelector.getRemoveError()).toEqual(removeGiftCertificateError);\n        });\n\n        it('does not returns error if able to remove', () => {\n            giftCertificateSelector = createGiftCertificateSelector(state.giftCertificates);\n\n            expect(giftCertificateSelector.getRemoveError()).toBeUndefined();\n        });\n    });\n\n    describe('#isRemoving()', () => {\n        it('returns true if removing a gift certificate', () => {\n            giftCertificateSelector = createGiftCertificateSelector({\n                ...state.giftCertificates,\n                statuses: { isRemovingGiftCertificate: true },\n            });\n\n            expect(giftCertificateSelector.isRemoving()).toBe(true);\n        });\n\n        it('returns false if not removing a gift certificate', () => {\n            giftCertificateSelector = createGiftCertificateSelector(state.giftCertificates);\n\n            expect(giftCertificateSelector.isRemoving()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/coupon/gift-certificate-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\n\nimport GiftCertificate from './gift-certificate';\nimport GiftCertificateState, { DEFAULT_STATE } from './gift-certificate-state';\n\nexport default interface GiftCertificateSelector {\n    getGiftCertificates(): GiftCertificate[] | undefined;\n    getRemoveError(): RequestError<StorefrontErrorResponseBody> | undefined;\n    getApplyError(): RequestError<StorefrontErrorResponseBody> | undefined;\n    isApplying(): boolean;\n    isRemoving(): boolean;\n}\n\nexport type GiftCertificateSelectorFactory = (\n    state: GiftCertificateState,\n) => GiftCertificateSelector;\n\nexport function createGiftCertificateSelectorFactory(): GiftCertificateSelectorFactory {\n    const getGiftCertificates = createSelector(\n        (state: GiftCertificateState) => state.data,\n        (data) => () => data,\n    );\n\n    const getRemoveError = createSelector(\n        (state: GiftCertificateState) => state.errors.removeGiftCertificateError,\n        (error) => () => error,\n    );\n\n    const getApplyError = createSelector(\n        (state: GiftCertificateState) => state.errors.applyGiftCertificateError,\n        (error) => () => error,\n    );\n\n    const isApplying = createSelector(\n        (state: GiftCertificateState) => !!state.statuses.isApplyingGiftCertificate,\n        (status) => () => status,\n    );\n\n    const isRemoving = createSelector(\n        (state: GiftCertificateState) => !!state.statuses.isRemovingGiftCertificate,\n        (status) => () => status,\n    );\n\n    return memoizeOne((state: GiftCertificateState = DEFAULT_STATE): GiftCertificateSelector => {\n        return {\n            getGiftCertificates: getGiftCertificates(state),\n            getRemoveError: getRemoveError(state),\n            getApplyError: getApplyError(state),\n            isApplying: isApplying(state),\n            isRemoving: isRemoving(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/coupon/gift-certificate-state.ts",
    "content": "import { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\n\nimport GiftCertificate from './gift-certificate';\n\nexport default interface GiftCertificateState {\n    data?: GiftCertificate[];\n    errors: GiftCertificateErrorsState;\n    statuses: GiftCertificateStatusesState;\n}\n\nexport interface GiftCertificateErrorsState {\n    applyGiftCertificateError?: RequestError<StorefrontErrorResponseBody>;\n    removeGiftCertificateError?: RequestError<StorefrontErrorResponseBody>;\n}\n\nexport interface GiftCertificateStatusesState {\n    isApplyingGiftCertificate?: boolean;\n    isRemovingGiftCertificate?: boolean;\n}\n\nexport const DEFAULT_STATE: GiftCertificateState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/coupon/gift-certificate.ts",
    "content": "export default interface GiftCertificate {\n    balance: number;\n    remaining: number;\n    used: number;\n    code: string;\n    purchaseDate: string;\n}\n"
  },
  {
    "path": "packages/core/src/coupon/gift-certificates.mock.ts",
    "content": "import GiftCertificate from './gift-certificate';\nimport GiftCertificateState from './gift-certificate-state';\n\nexport function getGiftCertificate(): GiftCertificate {\n    return {\n        balance: 10,\n        used: 7,\n        remaining: 3,\n        code: 'gc',\n        purchaseDate: 'ddmmyy',\n    };\n}\n\nexport function getGiftCertificatesState(): GiftCertificateState {\n    return {\n        data: [getGiftCertificate(), { ...getGiftCertificate(), code: 'gc2' }],\n        errors: {},\n        statuses: {},\n    };\n}\n"
  },
  {
    "path": "packages/core/src/coupon/index.ts",
    "content": "export * from './coupon-actions';\nexport * from './gift-certificate-actions';\n\nexport { default as Coupon } from './coupon';\nexport { default as CouponState } from './coupon-state';\nexport { default as InternalCoupon } from './internal-coupon';\nexport { default as CouponActionCreator } from './coupon-action-creator';\nexport { default as CouponRequestSender } from './coupon-request-sender';\nexport {\n    default as CouponSelector,\n    CouponSelectorFactory,\n    createCouponSelectorFactory,\n} from './coupon-selector';\nexport { default as couponReducer } from './coupon-reducer';\n\nexport { default as GiftCertificate } from './gift-certificate';\nexport { default as GiftCertificateState } from './gift-certificate-state';\nexport { default as InternalGiftCertificate } from './internal-gift-certificate';\nexport { default as GiftCertificateActionCreator } from './gift-certificate-action-creator';\nexport { default as GiftCertificateRequestSender } from './gift-certificate-request-sender';\nexport {\n    default as GiftCertificateSelector,\n    GiftCertificateSelectorFactory,\n    createGiftCertificateSelectorFactory,\n} from './gift-certificate-selector';\nexport { default as giftCertificateReducer } from './gift-certificate-reducer';\n\nexport { default as mapToInternalCoupon } from './map-to-internal-coupon';\nexport { default as mapToInternalGiftCertificate } from './map-to-internal-gift-certificate';\n"
  },
  {
    "path": "packages/core/src/coupon/internal-coupon.ts",
    "content": "export default interface InternalCoupon {\n    code: string;\n    discount: string;\n    discountType: number;\n}\n"
  },
  {
    "path": "packages/core/src/coupon/internal-coupons.mock.ts",
    "content": "import InternalCoupon from './internal-coupon';\n\nexport function getCoupon(): InternalCoupon {\n    return {\n        code: 'savebig2015',\n        discount: '20% off each item',\n        discountType: 1,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/coupon/internal-gift-certificate.ts",
    "content": "export default interface InternalGiftCertificate {\n    code: string;\n    discountedAmount: number;\n    remainingBalance: number;\n    giftCertificate?: {\n        balance: number;\n        code: string;\n        purchaseDate: string;\n    };\n}\n"
  },
  {
    "path": "packages/core/src/coupon/map-to-internal-coupon.spec.ts",
    "content": "import { getCoupon } from './coupons.mock';\nimport { getCoupon as getInternalCoupon } from './internal-coupons.mock';\nimport mapToInternalCoupon from './map-to-internal-coupon';\n\ndescribe('mapToInternalCoupon', () => {\n    it('maps to internal coupon', () => {\n        expect(mapToInternalCoupon(getCoupon())).toEqual(getInternalCoupon());\n    });\n});\n"
  },
  {
    "path": "packages/core/src/coupon/map-to-internal-coupon.ts",
    "content": "import Coupon from './coupon';\nimport InternalCoupon from './internal-coupon';\n\nconst couponTypes = [\n    'per_item_discount',\n    'percentage_discount',\n    'per_total_discount',\n    'shipping_discount',\n    'free_shipping',\n];\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalCoupon(coupon: Coupon): InternalCoupon {\n    return {\n        code: coupon.code,\n        discount: coupon.displayName,\n        discountType: couponTypes.indexOf(coupon.couponType),\n    };\n}\n"
  },
  {
    "path": "packages/core/src/coupon/map-to-internal-gift-certificate.ts",
    "content": "import GiftCertificate from './gift-certificate';\nimport InternalGiftCertificate from './internal-gift-certificate';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalGiftCertificate(\n    giftCertificate: GiftCertificate,\n): InternalGiftCertificate {\n    return {\n        code: giftCertificate.code,\n        discountedAmount: giftCertificate.used,\n        remainingBalance: giftCertificate.remaining,\n        giftCertificate: {\n            balance: giftCertificate.balance,\n            code: giftCertificate.code,\n            purchaseDate: giftCertificate.purchaseDate,\n        },\n    };\n}\n"
  },
  {
    "path": "packages/core/src/currency/create-currency-service.ts",
    "content": "import { StoreConfig } from '../config';\n\nimport CurrencyService from './currency-service';\n\n/**\n * Creates an instance of `CurrencyService`.\n *\n * @remarks\n * ```js\n * const { data } = checkoutService.getState();\n * const config = data.getConfig();\n * const checkout = data.getCheckout();\n * const currencyService = createCurrencyService(config);\n *\n * currencyService.toStoreCurrency(checkout.grandTotal);\n * currencyService.toCustomerCurrency(checkout.grandTotal);\n * ```\n *\n * @param config - The config object containing the currency configuration\n * @returns an instance of `CurrencyService`.\n */\nexport default function createCurrencyService(config: StoreConfig): CurrencyService {\n    return new CurrencyService(config);\n}\n"
  },
  {
    "path": "packages/core/src/currency/currency-service.ts",
    "content": "import { CurrencyFormatter } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { bindDecorator as bind } from '@bigcommerce/checkout-sdk/utility';\n\nimport { StoreConfig } from '../config';\n\n/**\n * Responsible for formatting and converting currencies.\n */\n@bind\nexport default class CurrencyService {\n    private _customerFormatter: CurrencyFormatter;\n    private _storeFormatter: CurrencyFormatter;\n\n    /**\n     * @internal\n     */\n    constructor(private _storeConfig: StoreConfig) {\n        this._customerFormatter = new CurrencyFormatter(this._storeConfig.shopperCurrency);\n        this._storeFormatter = new CurrencyFormatter(this._storeConfig.currency);\n    }\n\n    toCustomerCurrency(amount: number): string {\n        const exchangeRate = this._storeConfig.shopperCurrency.exchangeRate;\n\n        return this._customerFormatter.format(amount * exchangeRate);\n    }\n\n    toStoreCurrency(amount: number): string {\n        return this._storeFormatter.format(amount);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/currency/currency.ts",
    "content": "export default interface Currency {\n    name: string;\n    code: string;\n    symbol: string;\n    decimalPlaces: number;\n}\n\nexport interface CurrencyConfig {\n    decimalPlaces: string;\n    decimalSeparator: string;\n    symbolLocation: string;\n    symbol: string;\n    thousandsSeparator: string;\n}\n"
  },
  {
    "path": "packages/core/src/currency/index.ts",
    "content": "export { default as createCurrencyService } from './create-currency-service';\nexport { default as Currency } from './currency';\n"
  },
  {
    "path": "packages/core/src/customer/create-customer-strategy-registry-v2.spec.ts",
    "content": "import {\n    CustomerStrategy,\n    PaymentIntegrationService,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createCustomerStrategyRegistry from './create-customer-strategy-registry-v2';\n\ndescribe('createCustomerStrategyRegistry', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('creates registry with factories pre-registered', () => {\n        const fooStrategy = {} as CustomerStrategy;\n        const registry = createCustomerStrategyRegistry(paymentIntegrationService, {\n            createFooStrategy: toResolvableModule(\n                () => fooStrategy,\n                [{ id: 'foo', gateway: null, type: 'api' }],\n            ),\n        });\n        const strategy = registry.get({ id: 'foo' });\n\n        expect(strategy).toEqual(fooStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/customer/create-customer-strategy-registry-v2.ts",
    "content": "import {\n    CustomerStrategy,\n    CustomerStrategyFactory,\n    CustomerStrategyResolveId,\n    isResolvableModule,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ResolveIdRegistry } from '../common/registry';\n\nexport interface CustomerStrategyFactories {\n    [key: string]: CustomerStrategyFactory<CustomerStrategy>;\n}\n\nexport default function createCustomerStrategyRegistry(\n    paymentIntegrationService: PaymentIntegrationService,\n    customerStrategyFactories: CustomerStrategyFactories,\n): ResolveIdRegistry<CustomerStrategy, CustomerStrategyResolveId> {\n    const registry = new ResolveIdRegistry<CustomerStrategy, CustomerStrategyResolveId>();\n\n    for (const [, createCustomerStrategy] of Object.entries(customerStrategyFactories)) {\n        if (\n            !isResolvableModule<\n                CustomerStrategyFactory<CustomerStrategy>,\n                CustomerStrategyResolveId\n            >(createCustomerStrategy)\n        ) {\n            continue;\n        }\n\n        for (const resolverId of createCustomerStrategy.resolveIds) {\n            registry.register(resolverId, () => createCustomerStrategy(paymentIntegrationService));\n        }\n    }\n\n    return registry;\n}\n"
  },
  {
    "path": "packages/core/src/customer/create-customer-strategy-registry.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { CheckoutActionCreator, CheckoutRequestSender, CheckoutStore } from '../checkout';\nimport { Registry } from '../common/registry';\nimport { ConfigActionCreator, ConfigRequestSender } from '../config';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../form';\nimport {\n    createSpamProtection,\n    SpamProtectionActionCreator,\n    SpamProtectionRequestSender,\n} from '../spam-protection';\n\nimport CustomerActionCreator from './customer-action-creator';\nimport CustomerRequestSender from './customer-request-sender';\nimport { CustomerStrategy } from './strategies';\nimport { DefaultCustomerStrategy } from './strategies/default';\n\nexport default function createCustomerStrategyRegistry(\n    store: CheckoutStore,\n    requestSender: RequestSender,\n): Registry<CustomerStrategy> {\n    const registry = new Registry<CustomerStrategy>();\n    const scriptLoader = getScriptLoader();\n    const checkoutRequestSender = new CheckoutRequestSender(requestSender);\n    const checkoutActionCreator = new CheckoutActionCreator(\n        checkoutRequestSender,\n        new ConfigActionCreator(new ConfigRequestSender(requestSender)),\n        new FormFieldsActionCreator(new FormFieldsRequestSender(requestSender)),\n    );\n    const spamProtectionActionCreator = new SpamProtectionActionCreator(\n        createSpamProtection(scriptLoader),\n        new SpamProtectionRequestSender(requestSender),\n    );\n    const customerActionCreator = new CustomerActionCreator(\n        new CustomerRequestSender(requestSender),\n        checkoutActionCreator,\n        spamProtectionActionCreator,\n    );\n\n    registry.register('default', () => new DefaultCustomerStrategy(store, customerActionCreator));\n\n    return registry;\n}\n"
  },
  {
    "path": "packages/core/src/customer/customer-account.ts",
    "content": "import { AddressRequestBody } from '../address';\n\nexport default interface CustomerAccountRequestBody {\n    firstName: string;\n    lastName: string;\n    email: string;\n    password: string;\n    acceptsMarketingEmails?: boolean;\n    customFields?: Array<{\n        fieldId: string;\n        fieldValue: string | number | string[];\n    }>;\n}\n\nexport interface CustomerAccountInternalRequestBody extends CustomerAccountRequestBody {\n    token?: string;\n}\n\nexport type CustomerAddressRequestBody = AddressRequestBody;\n"
  },
  {
    "path": "packages/core/src/customer/customer-action-creator.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { ScriptLoader } from '@bigcommerce/script-loader';\nimport { merge } from 'lodash';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { CartSource, ErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    CheckoutActionCreator,\n    CheckoutActionType,\n    CheckoutRequestSender,\n    CheckoutStore,\n    createCheckoutStore,\n} from '../checkout';\nimport { getCheckout, getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { MutationObserverFactory } from '../common/dom';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\nimport { ConfigActionCreator, ConfigRequestSender } from '../config';\nimport { getConfig } from '../config/configs.mock';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../form';\nimport { getShippingAddress } from '../shipping/shipping-addresses.mock';\nimport {\n    GoogleRecaptcha,\n    GoogleRecaptchaScriptLoader,\n    GoogleRecaptchaWindow,\n    SpamProtectionActionCreator,\n    SpamProtectionActionType,\n    SpamProtectionRequestSender,\n} from '../spam-protection';\n\nimport Customer from './customer';\nimport CustomerActionCreator from './customer-action-creator';\nimport { CustomerActionType } from './customer-actions';\nimport CustomerRequestSender from './customer-request-sender';\nimport { getCustomer } from './customers.mock';\nimport { InternalCustomerResponseBody } from './internal-customer-responses';\nimport { getCustomerResponseBody } from './internal-customers.mock';\n\ndescribe('CustomerActionCreator', () => {\n    let customerRequestSender: CustomerRequestSender;\n    let checkoutActionCreator: CheckoutActionCreator;\n    let customerActionCreator: CustomerActionCreator;\n    let spamProtectionActionCreator: SpamProtectionActionCreator;\n    let errorResponse: Response<ErrorResponseBody>;\n    let response: Response<InternalCustomerResponseBody>;\n    let customerResponse: Response<Customer>;\n    let store: CheckoutStore;\n\n    beforeEach(() => {\n        const requestSender = createRequestSender();\n        const mockWindow = { grecaptcha: {} } as GoogleRecaptchaWindow;\n        const scriptLoader = new ScriptLoader();\n        const googleRecaptchaScriptLoader = new GoogleRecaptchaScriptLoader(\n            scriptLoader,\n            mockWindow,\n        );\n        const mutationObserverFactory = new MutationObserverFactory();\n        const googleRecaptcha = new GoogleRecaptcha(\n            googleRecaptchaScriptLoader,\n            mutationObserverFactory,\n        );\n\n        response = getResponse(getCustomerResponseBody());\n        customerResponse = getResponse(getCustomer());\n        errorResponse = getErrorResponse();\n        store = createCheckoutStore(getCheckoutStoreState());\n\n        customerRequestSender = new CustomerRequestSender(requestSender);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(customerRequestSender, 'createAccount').mockReturnValue(Promise.resolve({}));\n        jest.spyOn(customerRequestSender, 'createAddress').mockReturnValue(\n            Promise.resolve(customerResponse),\n        );\n        jest.spyOn(customerRequestSender, 'signInCustomer').mockReturnValue(\n            Promise.resolve(response),\n        );\n        jest.spyOn(customerRequestSender, 'signOutCustomer').mockReturnValue(\n            Promise.resolve(response),\n        );\n\n        checkoutActionCreator = new CheckoutActionCreator(\n            new CheckoutRequestSender(requestSender),\n            new ConfigActionCreator(new ConfigRequestSender(requestSender)),\n            new FormFieldsActionCreator(new FormFieldsRequestSender(requestSender)),\n        );\n\n        jest.spyOn(checkoutActionCreator, 'loadCurrentCheckout').mockReturnValue(() =>\n            from([\n                createAction(CheckoutActionType.LoadCheckoutRequested),\n                createAction(CheckoutActionType.LoadCheckoutSucceeded, getCheckout()),\n            ]),\n        );\n\n        jest.spyOn(checkoutActionCreator, 'loadCheckout').mockReturnValue(() =>\n            from([\n                createAction(CheckoutActionType.LoadCheckoutRequested),\n                createAction(CheckoutActionType.LoadCheckoutSucceeded, getCheckout()),\n            ]),\n        );\n\n        spamProtectionActionCreator = new SpamProtectionActionCreator(\n            googleRecaptcha,\n            new SpamProtectionRequestSender(requestSender),\n        );\n\n        jest.spyOn(spamProtectionActionCreator, 'execute').mockReturnValue(() =>\n            from([\n                createAction(SpamProtectionActionType.ExecuteRequested),\n                createAction(SpamProtectionActionType.ExecuteSucceeded, { token: 'token' }),\n            ]),\n        );\n\n        customerActionCreator = new CustomerActionCreator(\n            customerRequestSender,\n            checkoutActionCreator,\n            spamProtectionActionCreator,\n        );\n    });\n\n    describe('#createCustomer()', () => {\n        it('emits actions if able to create customer', async () => {\n            const customer = {\n                email: 'foo@bar.com',\n                password: 'foobar',\n                firstName: 'first',\n                lastName: 'last',\n            };\n\n            const actions = await from(customerActionCreator.createCustomer(customer)(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: CustomerActionType.CreateCustomerRequested },\n                { type: CheckoutActionType.LoadCheckoutRequested },\n                { type: CheckoutActionType.LoadCheckoutSucceeded, payload: getCheckout() },\n                { type: CustomerActionType.CreateCustomerSucceeded },\n            ]);\n        });\n\n        it('emits error actions if unable to create customer', async () => {\n            jest.spyOn(customerRequestSender, 'createAccount').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const customer = {\n                email: 'foo@bar.com',\n                password: 'foobar',\n                firstName: 'first',\n                lastName: 'last',\n            };\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(customerActionCreator.createCustomer(customer)(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: CustomerActionType.CreateCustomerRequested },\n                {\n                    type: CustomerActionType.CreateCustomerFailed,\n                    payload: errorResponse,\n                    error: true,\n                },\n            ]);\n        });\n\n        it('does not execute spam protection if disabled', async () => {\n            jest.spyOn(store.getState().config, 'getStoreConfigOrThrow').mockReturnValue(\n                merge(getConfig().storeConfig, {\n                    checkoutSettings: { isStorefrontSpamProtectionEnabled: false },\n                }),\n            );\n\n            const customer = {\n                email: 'foo@bar.com',\n                password: 'foobar',\n                firstName: 'first',\n                lastName: 'last',\n            };\n\n            await from(customerActionCreator.createCustomer(customer)(store)).toPromise();\n\n            expect(spamProtectionActionCreator.execute).not.toHaveBeenCalled();\n\n            expect(customerRequestSender.createAccount).toHaveBeenCalledWith(\n                {\n                    ...customer,\n                    token: undefined,\n                },\n                undefined,\n            );\n        });\n\n        it('executes spam protection if enabled', async () => {\n            jest.spyOn(store.getState().config, 'getStoreConfigOrThrow').mockReturnValue(\n                merge(getConfig().storeConfig, {\n                    checkoutSettings: { isStorefrontSpamProtectionEnabled: true },\n                }),\n            );\n\n            const customer = {\n                email: 'foo@bar.com',\n                password: 'foobar',\n                firstName: 'first',\n                lastName: 'last',\n            };\n\n            const actions = await from(customerActionCreator.createCustomer(customer)(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(spamProtectionActionCreator.execute).toHaveBeenCalled();\n\n            expect(customerRequestSender.createAccount).toHaveBeenCalledWith(\n                {\n                    ...customer,\n                    token: 'token',\n                },\n                undefined,\n            );\n\n            expect(actions).toEqual([\n                { type: CustomerActionType.CreateCustomerRequested },\n                { type: SpamProtectionActionType.ExecuteRequested },\n                { type: SpamProtectionActionType.ExecuteSucceeded, payload: { token: 'token' } },\n                { type: CheckoutActionType.LoadCheckoutRequested },\n                { type: CheckoutActionType.LoadCheckoutSucceeded, payload: getCheckout() },\n                { type: CustomerActionType.CreateCustomerSucceeded },\n            ]);\n        });\n    });\n\n    describe('#createAddress()', () => {\n        it('emits actions if able to create customer address', async () => {\n            const address = getShippingAddress();\n\n            const actions = await customerActionCreator\n                .createAddress(address)\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: CustomerActionType.CreateCustomerAddressRequested },\n                { type: CustomerActionType.CreateCustomerAddressSucceeded, payload: getCustomer() },\n            ]);\n        });\n\n        it('emits error actions if unable to create customer address', async () => {\n            jest.spyOn(customerRequestSender, 'createAddress').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const address = getShippingAddress();\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await customerActionCreator\n                .createAddress(address)\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: CustomerActionType.CreateCustomerAddressRequested },\n                {\n                    type: CustomerActionType.CreateCustomerAddressFailed,\n                    payload: errorResponse,\n                    error: true,\n                },\n            ]);\n        });\n    });\n\n    describe('#signInCustomer()', () => {\n        it('emits actions if able to sign in customer', async () => {\n            const credentials = { email: 'foo@bar.com', password: 'foobar' };\n            const actions = await from(customerActionCreator.signInCustomer(credentials)(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: CustomerActionType.SignInCustomerRequested },\n                { type: CheckoutActionType.LoadCheckoutRequested },\n                { type: CheckoutActionType.LoadCheckoutSucceeded, payload: getCheckout() },\n                { type: CustomerActionType.SignInCustomerSucceeded, payload: response.body.data },\n            ]);\n        });\n\n        it('emits actions if able to sign in customer with cart id', async () => {\n            const credentials = { email: 'foo@bar.com', password: 'foobar' };\n            const buyNowCheckout = {\n                ...getCheckout(),\n                cart: {\n                    ...getCheckout().cart,\n                    source: CartSource.BuyNow,\n                },\n            };\n\n            jest.spyOn(store.getState().checkout, 'getCheckoutOrThrow').mockReturnValue(\n                buyNowCheckout,\n            );\n\n            jest.spyOn(checkoutActionCreator, 'loadCurrentCheckout').mockReturnValue(() =>\n                from([\n                    createAction(CheckoutActionType.LoadCheckoutRequested),\n                    createAction(CheckoutActionType.LoadCheckoutSucceeded, buyNowCheckout),\n                ]),\n            );\n\n            const actions = await from(\n                customerActionCreator.signInCustomer({ ...credentials, cartId: buyNowCheckout.id })(\n                    store,\n                ),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: CustomerActionType.SignInCustomerRequested },\n                { type: CheckoutActionType.LoadCheckoutRequested },\n                { type: CheckoutActionType.LoadCheckoutSucceeded, payload: buyNowCheckout },\n                { type: CustomerActionType.SignInCustomerSucceeded, payload: response.body.data },\n            ]);\n        });\n\n        it('emits error actions if unable to sign in customer', async () => {\n            jest.spyOn(customerRequestSender, 'signInCustomer').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const credentials = { email: 'foo@bar.com', password: 'foobar' };\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(customerActionCreator.signInCustomer(credentials)(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: CustomerActionType.SignInCustomerRequested },\n                {\n                    type: CustomerActionType.SignInCustomerFailed,\n                    payload: errorResponse,\n                    error: true,\n                },\n            ]);\n        });\n\n        it('emits actions to reload current checkout', async () => {\n            const credentials = { email: 'foo@bar.com', password: 'foobar' };\n\n            await from(customerActionCreator.signInCustomer(credentials)(store)).toPromise();\n\n            expect(checkoutActionCreator.loadCurrentCheckout).toHaveBeenCalled();\n        });\n\n        it('emits actions to reload checkout by id after signin', async () => {\n            const credentials = { email: 'foo@bar.com', password: 'foobar' };\n\n            const responseWithCrossDevice = {\n                ...getCustomerResponseBody(),\n                data: {\n                    ...getCustomerResponseBody().data,\n                    persistentCartRetrievalInformation: {\n                        id: 'persistent-cart-id',\n                    },\n                },\n            };\n\n            jest.spyOn(customerRequestSender, 'signInCustomer').mockReturnValue(\n                Promise.resolve(getResponse(responseWithCrossDevice)),\n            );\n\n            await from(customerActionCreator.signInCustomer(credentials)(store)).toPromise();\n\n            expect(checkoutActionCreator.loadCheckout).toHaveBeenCalled();\n        });\n    });\n\n    describe('#signOutCustomer()', () => {\n        it('emits actions if able to sign out customer', async () => {\n            const actions = await from(customerActionCreator.signOutCustomer()(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: CustomerActionType.SignOutCustomerRequested },\n                { type: CheckoutActionType.LoadCheckoutRequested },\n                { type: CheckoutActionType.LoadCheckoutSucceeded, payload: getCheckout() },\n                { type: CustomerActionType.SignOutCustomerSucceeded, payload: response.body.data },\n            ]);\n        });\n\n        it('emits actions if able to sign out customer with cart id', async () => {\n            const buyNowCheckout = {\n                ...getCheckout(),\n                cart: {\n                    ...getCheckout().cart,\n                    source: CartSource.BuyNow,\n                },\n            };\n\n            jest.spyOn(store.getState().checkout, 'getCheckoutOrThrow').mockReturnValue(\n                buyNowCheckout,\n            );\n\n            jest.spyOn(checkoutActionCreator, 'loadCurrentCheckout').mockReturnValue(() =>\n                from([\n                    createAction(CheckoutActionType.LoadCheckoutRequested),\n                    createAction(CheckoutActionType.LoadCheckoutSucceeded, buyNowCheckout),\n                ]),\n            );\n\n            const actions = await from(customerActionCreator.signOutCustomer()(store))\n                .pipe(toArray())\n                .toPromise();\n\n            // Verify that signOutCustomer was called with the checkout ID as cartId\n            expect(customerRequestSender.signOutCustomer).toHaveBeenCalledWith(\n                undefined,\n                buyNowCheckout.id,\n            );\n\n            expect(actions).toEqual([\n                { type: CustomerActionType.SignOutCustomerRequested },\n                { type: CheckoutActionType.LoadCheckoutRequested },\n                { type: CheckoutActionType.LoadCheckoutSucceeded, payload: buyNowCheckout },\n                { type: CustomerActionType.SignOutCustomerSucceeded, payload: response.body.data },\n            ]);\n        });\n\n        it('emits error actions if unable to sign out customer', async () => {\n            jest.spyOn(customerRequestSender, 'signOutCustomer').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(customerActionCreator.signOutCustomer()(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: CustomerActionType.SignOutCustomerRequested },\n                {\n                    type: CustomerActionType.SignOutCustomerFailed,\n                    payload: errorResponse,\n                    error: true,\n                },\n            ]);\n        });\n\n        it('emits actions to reload current checkout', async () => {\n            const credentials = { email: 'foo@bar.com', password: 'foobar' };\n\n            await from(customerActionCreator.signInCustomer(credentials)(store)).toPromise();\n\n            expect(checkoutActionCreator.loadCurrentCheckout).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/customer/customer-action-creator.ts",
    "content": "import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, from, Observable, of } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\n\nimport { CartSource } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CheckoutActionCreator, InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\nimport {\n    isSpamProtectionExecuteSucceededAction,\n    SpamProtectionActionCreator,\n} from '../spam-protection';\n\nimport CustomerAccountRequestBody, { CustomerAddressRequestBody } from './customer-account';\nimport {\n    CreateCustomerAction,\n    CreateCustomerAddressAction,\n    CustomerActionType,\n    SignInCustomerAction,\n    SignOutCustomerAction,\n} from './customer-actions';\nimport CustomerCredentials from './customer-credentials';\nimport CustomerRequestSender from './customer-request-sender';\n\nexport default class CustomerActionCreator {\n    constructor(\n        private _customerRequestSender: CustomerRequestSender,\n        private _checkoutActionCreator: CheckoutActionCreator,\n        private _spamProtectionActionCreator: SpamProtectionActionCreator,\n    ) {}\n\n    createCustomer(\n        customerAccount: CustomerAccountRequestBody,\n        options?: RequestOptions,\n    ): ThunkAction<CreateCustomerAction, InternalCheckoutSelectors> {\n        return (store) => {\n            const state = store.getState();\n            const config = state.config.getStoreConfigOrThrow();\n            const { isStorefrontSpamProtectionEnabled } = config.checkoutSettings;\n\n            const createCustomer = (token?: string) =>\n                from(\n                    this._customerRequestSender.createAccount(\n                        { ...customerAccount, token },\n                        options,\n                    ),\n                ).pipe(\n                    switchMap(() =>\n                        concat(\n                            this._checkoutActionCreator.loadCurrentCheckout(options)(store),\n                            of(createAction(CustomerActionType.CreateCustomerSucceeded)),\n                        ),\n                    ),\n                );\n\n            return concat(\n                of(createAction(CustomerActionType.CreateCustomerRequested)),\n                isStorefrontSpamProtectionEnabled\n                    ? from(this._spamProtectionActionCreator.execute()(store)).pipe(\n                          switchMap((action) =>\n                              isSpamProtectionExecuteSucceededAction(action)\n                                  ? concat(of(action), createCustomer(action.payload?.token))\n                                  : of(action),\n                          ),\n                      )\n                    : createCustomer(),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(CustomerActionType.CreateCustomerFailed, error),\n                ),\n            );\n        };\n    }\n\n    createAddress(\n        customerAddress: CustomerAddressRequestBody,\n        options?: RequestOptions,\n    ): Observable<CreateCustomerAddressAction> {\n        return concat(\n            of(createAction(CustomerActionType.CreateCustomerAddressRequested)),\n            defer(async () => {\n                const { body } = await this._customerRequestSender.createAddress(\n                    customerAddress,\n                    options,\n                );\n\n                return createAction(CustomerActionType.CreateCustomerAddressSucceeded, body);\n            }),\n        ).pipe(\n            catchError((error) =>\n                throwErrorAction(CustomerActionType.CreateCustomerAddressFailed, error),\n            ),\n        );\n    }\n\n    signInCustomer(\n        credentials: CustomerCredentials,\n        options?: RequestOptions,\n    ): ThunkAction<SignInCustomerAction, InternalCheckoutSelectors> {\n        return (store) => {\n            const checkout = store.getState().checkout.getCheckoutOrThrow();\n            const cartId = checkout.cart.source === CartSource.BuyNow ? checkout.id : undefined;\n\n            return concat(\n                of(createAction(CustomerActionType.SignInCustomerRequested)),\n                from(\n                    this._customerRequestSender.signInCustomer({ ...credentials, cartId }, options),\n                ).pipe(\n                    switchMap(({ body }) => {\n                        if (body.data.persistentCartRetrievalInformation) {\n                            return concat(\n                                this._checkoutActionCreator.loadCheckout(\n                                    body.data.persistentCartRetrievalInformation.id,\n                                    options,\n                                )(store),\n                                of(\n                                    createAction(\n                                        CustomerActionType.SignInCustomerSucceeded,\n                                        body.data,\n                                    ),\n                                ),\n                            );\n                        }\n\n                        return concat(\n                            this._checkoutActionCreator.loadCurrentCheckout(options)(store),\n                            of(createAction(CustomerActionType.SignInCustomerSucceeded, body.data)),\n                        );\n                    }),\n                ),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(CustomerActionType.SignInCustomerFailed, error),\n                ),\n            );\n        };\n    }\n\n    signOutCustomer(\n        options?: RequestOptions,\n    ): ThunkAction<SignOutCustomerAction, InternalCheckoutSelectors> {\n        return (store) => {\n            const checkout = store.getState().checkout.getCheckoutOrThrow();\n            const cartId = checkout.cart.source === CartSource.BuyNow ? checkout.id : undefined;\n\n            return concat(\n                of(createAction(CustomerActionType.SignOutCustomerRequested)),\n                from(this._customerRequestSender.signOutCustomer(options, cartId)).pipe(\n                    switchMap(({ body }) =>\n                        concat(\n                            this._checkoutActionCreator.loadCurrentCheckout(options)(store),\n                            of(\n                                createAction(\n                                    CustomerActionType.SignOutCustomerSucceeded,\n                                    body.data,\n                                ),\n                            ),\n                        ),\n                    ),\n                ),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(CustomerActionType.SignOutCustomerFailed, error),\n                ),\n            );\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/customer/customer-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { LoadCheckoutAction } from '../checkout';\nimport { SpamProtectionAction } from '../spam-protection';\n\nimport Customer from './customer';\nimport { InternalCustomerResponseData } from './internal-customer-responses';\n\nexport enum CustomerActionType {\n    SignInCustomerRequested = 'SIGN_IN_CUSTOMER_REQUESTED',\n    SignInCustomerSucceeded = 'SIGN_IN_CUSTOMER_SUCCEEDED',\n    SignInCustomerFailed = 'SIGN_IN_CUSTOMER_FAILED',\n\n    SignOutCustomerRequested = 'SIGN_OUT_CUSTOMER_REQUESTED',\n    SignOutCustomerSucceeded = 'SIGN_OUT_CUSTOMER_SUCCEEDED',\n    SignOutCustomerFailed = 'SIGN_OUT_CUSTOMER_FAILED',\n\n    CreateCustomerRequested = 'CREATE_CUSTOMER_REQUESTED',\n    CreateCustomerSucceeded = 'CREATE_CUSTOMER_SUCCEEDED',\n    CreateCustomerFailed = 'CREATE_CUSTOMER_FAILED',\n\n    CreateCustomerAddressRequested = 'CREATE_CUSTOMER_ADDRESS_REQUESTED',\n    CreateCustomerAddressSucceeded = 'CREATE_CUSTOMER_ADDRESS_SUCCEEDED',\n    CreateCustomerAddressFailed = 'CREATE_CUSTOMER_ADDRESS_FAILED',\n\n    StripeLinkAuthenticated = 'STRIPE_LINK_AUTHENTICATED',\n}\n\nexport type CustomerAction =\n    | SignInCustomerAction\n    | SignOutCustomerAction\n    | CreateCustomerAddressAction\n    | CreateCustomerAction;\n\nexport type CreateCustomerAction =\n    | CreateCustomerRequestedAction\n    | CreateCustomerSucceededAction\n    | CreateCustomerFailedAction\n    | SpamProtectionAction\n    | LoadCheckoutAction;\n\nexport type CreateCustomerAddressAction =\n    | CreateCustomerAddressRequestedAction\n    | CreateCustomerAddressSucceededAction\n    | CreateCustomerAddressFailedAction\n    | LoadCheckoutAction;\n\nexport type SignInCustomerAction =\n    | SignInCustomerRequestedAction\n    | SignInCustomerSucceededAction\n    | SignInCustomerFailedAction\n    | LoadCheckoutAction;\n\nexport type SignOutCustomerAction =\n    | SignOutCustomerRequestedAction\n    | SignOutCustomerSucceededAction\n    | SignOutCustomerFailedAction\n    | LoadCheckoutAction;\n\nexport interface SignInCustomerRequestedAction extends Action {\n    type: CustomerActionType.SignInCustomerRequested;\n}\n\nexport interface StripeLinkAuthenticatedAction extends Action {\n    type: CustomerActionType.StripeLinkAuthenticated;\n}\n\nexport interface SignInCustomerSucceededAction extends Action<InternalCustomerResponseData> {\n    type: CustomerActionType.SignInCustomerSucceeded;\n}\n\nexport interface SignInCustomerFailedAction extends Action<Error> {\n    type: CustomerActionType.SignInCustomerFailed;\n}\n\nexport interface SignOutCustomerRequestedAction extends Action {\n    type: CustomerActionType.SignOutCustomerRequested;\n}\n\nexport interface SignOutCustomerSucceededAction extends Action<InternalCustomerResponseData> {\n    type: CustomerActionType.SignOutCustomerSucceeded;\n}\n\nexport interface SignOutCustomerFailedAction extends Action<Error> {\n    type: CustomerActionType.SignOutCustomerFailed;\n}\n\nexport interface CreateCustomerRequestedAction extends Action {\n    type: CustomerActionType.CreateCustomerRequested;\n}\n\nexport interface CreateCustomerSucceededAction extends Action {\n    type: CustomerActionType.CreateCustomerSucceeded;\n}\n\nexport interface CreateCustomerFailedAction extends Action<Error> {\n    type: CustomerActionType.CreateCustomerFailed;\n}\n\nexport interface CreateCustomerAddressRequestedAction extends Action {\n    type: CustomerActionType.CreateCustomerAddressRequested;\n}\n\nexport interface CreateCustomerAddressSucceededAction extends Action<Customer> {\n    type: CustomerActionType.CreateCustomerAddressSucceeded;\n}\n\nexport interface CreateCustomerAddressFailedAction extends Action<Error> {\n    type: CustomerActionType.CreateCustomerAddressFailed;\n}\n"
  },
  {
    "path": "packages/core/src/customer/customer-credentials.ts",
    "content": "export default interface CustomerCredentials {\n    email: string;\n    password: string;\n    cartId?: string;\n}\n"
  },
  {
    "path": "packages/core/src/customer/customer-reducer.spec.ts",
    "content": "import { createErrorAction } from '@bigcommerce/data-store';\n\nimport {\n    CreateCustomerAction,\n    CreateCustomerAddressAction,\n    CustomerActionType,\n} from './customer-actions';\nimport customerReducer from './customer-reducer';\nimport CustomerState, { DEFAULT_STATE } from './customer-state';\n\ndescribe('customerReducer()', () => {\n    let initialState: CustomerState;\n\n    beforeEach(() => {\n        initialState = DEFAULT_STATE;\n    });\n\n    it('return is creating status true when requested', () => {\n        const action: CreateCustomerAction = {\n            type: CustomerActionType.CreateCustomerRequested,\n        };\n\n        expect(customerReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                statuses: {\n                    isCreating: true,\n                },\n            }),\n        );\n    });\n\n    it('returns is creating status false when succeeded', () => {\n        const action: CreateCustomerAction = {\n            type: CustomerActionType.CreateCustomerSucceeded,\n        };\n\n        expect(customerReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                statuses: {\n                    isCreating: false,\n                },\n            }),\n        );\n    });\n\n    it('returns is creating customer error', () => {\n        const action = createErrorAction(CustomerActionType.CreateCustomerFailed, new Error());\n\n        expect(customerReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                statuses: { isCreating: false },\n                errors: { createError: action.payload },\n            }),\n        );\n    });\n\n    it('return is creating address status true when requested', () => {\n        const action: CreateCustomerAddressAction = {\n            type: CustomerActionType.CreateCustomerAddressRequested,\n        };\n\n        expect(customerReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                statuses: {\n                    isCreatingAddress: true,\n                },\n            }),\n        );\n    });\n\n    it('returns is creating address status false when succeeded', () => {\n        const action: CreateCustomerAddressAction = {\n            type: CustomerActionType.CreateCustomerAddressSucceeded,\n        };\n\n        expect(customerReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                statuses: {\n                    isCreatingAddress: false,\n                },\n            }),\n        );\n    });\n\n    it('returns is creating address error', () => {\n        const action = createErrorAction(\n            CustomerActionType.CreateCustomerAddressFailed,\n            new Error(),\n        );\n\n        expect(customerReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                statuses: { isCreatingAddress: false },\n                errors: { createAddressError: action.payload },\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/customer/customer-reducer.ts",
    "content": "import { combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { BillingAddressActionType, ContinueAsGuestAction } from '../billing';\nimport {\n    CheckoutAction,\n    CheckoutActionType,\n    CheckoutHydrateAction,\n    CheckoutHydrateActionType,\n} from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport Customer from './customer';\nimport {\n    CustomerAction,\n    CustomerActionType,\n    StripeLinkAuthenticatedAction,\n} from './customer-actions';\nimport CustomerState, {\n    CustomerErrorsState,\n    CustomerStatusesState,\n    DEFAULT_STATE,\n} from './customer-state';\n\ntype ReducerActionType =\n    | CheckoutAction\n    | ContinueAsGuestAction\n    | CustomerAction\n    | StripeLinkAuthenticatedAction\n    | CheckoutHydrateAction;\n\nexport default function customerReducer(\n    state: CustomerState = DEFAULT_STATE,\n    action: ReducerActionType,\n): CustomerState {\n    const reducer = combineReducers<CustomerState, ReducerActionType>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(data: Customer | undefined, action: ReducerActionType): Customer | undefined {\n    switch (action.type) {\n        case BillingAddressActionType.ContinueAsGuestSucceeded:\n        case CheckoutActionType.LoadCheckoutSucceeded:\n            return objectMerge(data, action.payload && action.payload.customer);\n\n        case CustomerActionType.CreateCustomerAddressSucceeded:\n            return objectMerge(data, action.payload);\n\n        case CheckoutHydrateActionType.HydrateInitialState:\n            return objectMerge(data, action.payload?.checkout?.customer);\n\n        default:\n            return data;\n    }\n}\n\nfunction errorsReducer(\n    errors: CustomerErrorsState = DEFAULT_STATE.errors,\n    action: ReducerActionType,\n): CustomerErrorsState {\n    switch (action.type) {\n        case CustomerActionType.CreateCustomerRequested:\n        case CustomerActionType.CreateCustomerSucceeded:\n            return objectSet(errors, 'createError', undefined);\n\n        case CustomerActionType.CreateCustomerFailed:\n            return objectSet(errors, 'createError', action.payload);\n\n        case CustomerActionType.CreateCustomerAddressRequested:\n        case CustomerActionType.CreateCustomerAddressSucceeded:\n            return objectSet(errors, 'createAddressError', undefined);\n\n        case CustomerActionType.CreateCustomerAddressFailed:\n            return objectSet(errors, 'createAddressError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: CustomerStatusesState = DEFAULT_STATE.statuses,\n    action: ReducerActionType,\n): CustomerStatusesState {\n    switch (action.type) {\n        case CustomerActionType.CreateCustomerRequested:\n            return objectSet(statuses, 'isCreating', true);\n\n        case CustomerActionType.CreateCustomerFailed:\n        case CustomerActionType.CreateCustomerSucceeded:\n            return objectSet(statuses, 'isCreating', false);\n\n        case CustomerActionType.CreateCustomerAddressRequested:\n            return objectSet(statuses, 'isCreatingAddress', true);\n\n        case CustomerActionType.CreateCustomerAddressFailed:\n        case CustomerActionType.CreateCustomerAddressSucceeded:\n            return objectSet(statuses, 'isCreatingAddress', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/customer/customer-request-options.ts",
    "content": "import {\n    CustomerStrategy,\n    CustomerStrategyFactory,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestOptions } from '../common/http-request';\n\nexport { CustomerInitializeOptions } from '../generated/customer-initialize-options';\n\n/**\n * A set of options for configuring any requests related to the customer step of\n * the current checkout flow.\n *\n * Some payment methods have their own sign-in or sign-out flow. Therefore, you\n * need to indicate the method you want to use if you need to trigger a specific\n * flow for signing in or out a customer. Otherwise, these options are not required.\n */\nexport interface CustomerRequestOptions extends RequestOptions {\n    methodId?: string;\n}\n\n/**\n * A set of options that are required to initialize the customer step of the\n * current checkout flow.\n *\n * Some payment methods have specific requirements for setting the customer\n * details for checkout. For example, Amazon Pay requires the customer to sign in\n * using their sign-in button. As a result, you may need to provide additional\n * information in order to initialize the customer step of checkout.\n */\nexport interface BaseCustomerInitializeOptions extends CustomerRequestOptions {\n    [key: string]: unknown;\n\n    /**\n     * @alpha\n     */\n    integrations?: Array<CustomerStrategyFactory<CustomerStrategy>>;\n}\n\n/**\n * A set of options that are required to pass the customer step of the\n * current checkout flow.\n *\n * Some payment methods have specific suggestion for customer to pass\n * the customer step. For example, Bolt suggests the customer to use\n * their custom checkout with prefilled form values. As a result, you\n * may need to provide additional information, error handler or callback\n * to execution method.\n *\n */\nexport interface ExecutePaymentMethodCheckoutOptions extends CustomerRequestOptions {\n    checkoutPaymentMethodExecuted?(data?: CheckoutPaymentMethodExecutedOptions): void;\n    continueWithCheckoutCallback?(): void;\n}\n\nexport interface CheckoutPaymentMethodExecutedOptions {\n    hasBoltAccount?: boolean;\n}\n"
  },
  {
    "path": "packages/core/src/customer/customer-request-sender.spec.ts",
    "content": "import {\n    createRequestSender,\n    createTimeout,\n    RequestSender,\n    Response,\n} from '@bigcommerce/request-sender';\n\nimport { SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getResponse } from '../common/http-request/responses.mock';\nimport { getShippingAddress } from '../shipping/shipping-addresses.mock';\n\nimport CustomerAccountRequestBody, { CustomerAddressRequestBody } from './customer-account';\nimport CustomerCredentials from './customer-credentials';\nimport CustomerRequestSender from './customer-request-sender';\nimport { InternalCustomerResponseBody } from './internal-customer-responses';\nimport { getCustomerResponseBody } from './internal-customers.mock';\n\ndescribe('CustomerRequestSender', () => {\n    let customerRequestSender: CustomerRequestSender;\n    let requestSender: RequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'delete').mockReturnValue(Promise.resolve());\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve());\n\n        customerRequestSender = new CustomerRequestSender(requestSender);\n    });\n\n    describe('#createAccount()', () => {\n        let customerAccount: CustomerAccountRequestBody;\n        let response: Response<InternalCustomerResponseBody>;\n\n        beforeEach(() => {\n            customerAccount = {\n                email: 'foo@bar.com',\n                password: 'foobar',\n                firstName: 'first',\n                lastName: 'last',\n            };\n\n            response = getResponse(getCustomerResponseBody());\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('posts customer credentials', async () => {\n            const output = await customerRequestSender.createAccount(customerAccount);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith('/api/storefront/customer', {\n                body: customerAccount,\n                headers: SDK_VERSION_HEADERS,\n            });\n        });\n\n        it('posts customer credentials with timeout', async () => {\n            const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n            const output = await customerRequestSender.createAccount(customerAccount, options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith('/api/storefront/customer', {\n                ...options,\n                body: customerAccount,\n            });\n        });\n    });\n\n    describe('#createAddress()', () => {\n        let customerAddress: CustomerAddressRequestBody;\n        let response: Response<InternalCustomerResponseBody>;\n\n        beforeEach(() => {\n            customerAddress = getShippingAddress();\n\n            response = getResponse(getCustomerResponseBody());\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('posts customer credentials', async () => {\n            const output = await customerRequestSender.createAddress(customerAddress);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith('/api/storefront/customer-address', {\n                body: customerAddress,\n                headers: SDK_VERSION_HEADERS,\n            });\n        });\n\n        it('posts customer credentials with timeout', async () => {\n            const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n            const output = await customerRequestSender.createAddress(customerAddress, options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith('/api/storefront/customer-address', {\n                ...options,\n                body: customerAddress,\n            });\n        });\n    });\n\n    describe('#signInCustomer()', () => {\n        let credentials: CustomerCredentials;\n        let response: Response<InternalCustomerResponseBody>;\n\n        beforeEach(() => {\n            credentials = { email: 'foo@bar.com', password: 'foobar' };\n            response = getResponse(getCustomerResponseBody());\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('posts customer credentials', async () => {\n            const output = await customerRequestSender.signInCustomer(credentials);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith('/internalapi/v1/checkout/customer', {\n                body: credentials,\n                headers: SDK_VERSION_HEADERS,\n            });\n        });\n\n        it('posts customer credentials with timeout', async () => {\n            const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n            const output = await customerRequestSender.signInCustomer(credentials, options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith('/internalapi/v1/checkout/customer', {\n                ...options,\n                body: credentials,\n            });\n        });\n\n        it('posts customer credentials with timeout and cartId', async () => {\n            const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n            const output = await customerRequestSender.signInCustomer(\n                { ...credentials, cartId: 'test' },\n                options,\n            );\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith('/internalapi/v1/checkout/customer', {\n                ...options,\n                body: { ...credentials, cartId: 'test' },\n            });\n        });\n    });\n\n    describe('#signOutCustomer()', () => {\n        let response: Response<InternalCustomerResponseBody>;\n\n        beforeEach(() => {\n            response = getResponse(getCustomerResponseBody());\n\n            jest.spyOn(requestSender, 'delete').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('signs out customer', async () => {\n            const output = await customerRequestSender.signOutCustomer();\n\n            expect(output).toEqual(response);\n            expect(requestSender.delete).toHaveBeenCalledWith('/internalapi/v1/checkout/customer', {\n                timeout: undefined,\n                headers: SDK_VERSION_HEADERS,\n            });\n        });\n\n        it('signs out customer with timeout', async () => {\n            const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n            const output = await customerRequestSender.signOutCustomer(options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.delete).toHaveBeenCalledWith(\n                '/internalapi/v1/checkout/customer',\n                options,\n            );\n        });\n\n        it('signs out customer with timeout and calls with cart id', async () => {\n            const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n            const output = await customerRequestSender.signOutCustomer(options, 'test');\n\n            expect(output).toEqual(response);\n            expect(requestSender.delete).toHaveBeenCalledWith('/internalapi/v1/checkout/customer', {\n                ...options,\n                body: { cartId: 'test' },\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/customer/customer-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport Customer from './customer';\nimport { CustomerAccountInternalRequestBody, CustomerAddressRequestBody } from './customer-account';\nimport CustomerCredentials from './customer-credentials';\nimport { InternalCustomerResponseBody } from './internal-customer-responses';\n\nexport default class CustomerRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    createAccount(\n        customerAccount: CustomerAccountInternalRequestBody,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<object>> {\n        const url = '/api/storefront/customer';\n\n        return this._requestSender.post(url, {\n            timeout,\n            headers: SDK_VERSION_HEADERS,\n            body: customerAccount,\n        });\n    }\n\n    createAddress(\n        customerAddress: CustomerAddressRequestBody,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<Customer>> {\n        const url = `/api/storefront/customer-address`;\n\n        return this._requestSender.post<Customer>(url, {\n            timeout,\n            headers: SDK_VERSION_HEADERS,\n            body: customerAddress,\n        });\n    }\n\n    signInCustomer(\n        credentials: CustomerCredentials,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<InternalCustomerResponseBody>> {\n        const url = '/internalapi/v1/checkout/customer';\n\n        return this._requestSender.post(url, {\n            timeout,\n            headers: SDK_VERSION_HEADERS,\n            body: credentials,\n        });\n    }\n\n    signOutCustomer(\n        { timeout }: RequestOptions = {},\n        cartId?: string,\n    ): Promise<Response<InternalCustomerResponseBody>> {\n        const url = '/internalapi/v1/checkout/customer';\n\n        return this._requestSender.delete(url, {\n            timeout,\n            headers: SDK_VERSION_HEADERS,\n            ...(cartId && { body: { cartId } }),\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/customer/customer-selector.spec.ts",
    "content": "import { CheckoutStoreState } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\n\nimport CustomerSelector, {\n    createCustomerSelectorFactory,\n    CustomerSelectorFactory,\n} from './customer-selector';\nimport { DEFAULT_STATE } from './customer-state';\nimport { getCustomer } from './customers.mock';\n\ndescribe('CustomerSelector', () => {\n    let createCustomerSelector: CustomerSelectorFactory;\n    let selector: CustomerSelector;\n    let state: CheckoutStoreState;\n\n    beforeEach(() => {\n        createCustomerSelector = createCustomerSelectorFactory();\n        state = getCheckoutStoreState();\n    });\n\n    describe('#getCustomer()', () => {\n        it('returns current customer', () => {\n            selector = createCustomerSelector(state.customer);\n\n            expect(selector.getCustomer()).toEqual(getCustomer());\n        });\n\n        it('returns undefined if customer is unavailable', () => {\n            selector = createCustomerSelector(DEFAULT_STATE);\n\n            expect(selector.getCustomer()).toBeUndefined();\n        });\n    });\n\n    describe('#getCreateAccountError()', () => {\n        it('returns current customer', () => {\n            const createError = new Error();\n\n            selector = createCustomerSelector({\n                errors: { createError },\n                statuses: {},\n            });\n\n            expect(selector.getCreateAccountError()).toEqual(createError);\n        });\n\n        it('returns undefined if customer is unavailable', () => {\n            selector = createCustomerSelector(DEFAULT_STATE);\n\n            expect(selector.getCreateAccountError()).toBeUndefined();\n        });\n    });\n\n    describe('#isCreatingCustomerAccount()', () => {\n        it('returns current customer', () => {\n            selector = createCustomerSelector({\n                errors: {},\n                statuses: { isCreating: true },\n            });\n\n            expect(selector.isCreatingCustomerAccount()).toBe(true);\n        });\n\n        it('returns undefined if customer is unavailable', () => {\n            selector = createCustomerSelector(DEFAULT_STATE);\n\n            expect(selector.isCreatingCustomerAccount()).toBe(false);\n        });\n    });\n\n    describe('#getCreateAddressError()', () => {\n        it('returns current customer', () => {\n            const createAddressError = new Error();\n\n            selector = createCustomerSelector({\n                errors: { createAddressError },\n                statuses: {},\n            });\n\n            expect(selector.getCreateAddressError()).toEqual(createAddressError);\n        });\n\n        it('returns undefined if customer is unavailable', () => {\n            selector = createCustomerSelector(DEFAULT_STATE);\n\n            expect(selector.getCreateAddressError()).toBeUndefined();\n        });\n    });\n\n    describe('#isCreatingCustomerAccount()', () => {\n        it('returns is creating address', () => {\n            selector = createCustomerSelector({\n                errors: {},\n                statuses: { isCreatingAddress: true },\n            });\n\n            expect(selector.isCreatingCustomerAddress()).toBe(true);\n        });\n\n        it('returns undefined if customer is unavailable', () => {\n            selector = createCustomerSelector(DEFAULT_STATE);\n\n            expect(selector.isCreatingCustomerAddress()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/customer/customer-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport Customer from './customer';\nimport CustomerState, { DEFAULT_STATE } from './customer-state';\n\nexport default interface CustomerSelector {\n    getCustomer(): Customer | undefined;\n    getCustomerOrThrow(): Customer;\n    getCreateAccountError(): Error | undefined;\n    isCreatingCustomerAccount(): boolean;\n    getCreateAddressError(): Error | undefined;\n    isCreatingCustomerAddress(): boolean;\n}\n\nexport type CustomerSelectorFactory = (state: CustomerState) => CustomerSelector;\n\nexport function createCustomerSelectorFactory(): CustomerSelectorFactory {\n    const getCustomer = createSelector(\n        (state: CustomerState) => state.data,\n        (customer) => () => customer,\n    );\n\n    const getCustomerOrThrow = createSelector(getCustomer, (getCustomer) => () => {\n        return guard(\n            getCustomer(),\n            () => new MissingDataError(MissingDataErrorType.MissingCustomer),\n        );\n    });\n\n    const getCreateAccountError = createSelector(\n        (state: CustomerState) => state.errors.createError,\n        (error) => () => error,\n    );\n\n    const isCreatingCustomerAccount = createSelector(\n        (state: CustomerState) => !!state.statuses.isCreating,\n        (status) => () => status,\n    );\n\n    const getCreateAddressError = createSelector(\n        (state: CustomerState) => state.errors.createAddressError,\n        (error) => () => error,\n    );\n\n    const isCreatingCustomerAddress = createSelector(\n        (state: CustomerState) => !!state.statuses.isCreatingAddress,\n        (status) => () => status,\n    );\n\n    return memoizeOne((state: CustomerState = DEFAULT_STATE): CustomerSelector => {\n        return {\n            getCustomer: getCustomer(state),\n            getCustomerOrThrow: getCustomerOrThrow(state),\n            getCreateAccountError: getCreateAccountError(state),\n            isCreatingCustomerAccount: isCreatingCustomerAccount(state),\n            getCreateAddressError: getCreateAddressError(state),\n            isCreatingCustomerAddress: isCreatingCustomerAddress(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/customer/customer-state.ts",
    "content": "import Customer from './customer';\n\nexport default interface CustomerState {\n    data?: Customer;\n    statuses: CustomerStatusesState;\n    errors: CustomerErrorsState;\n}\n\nexport interface CustomerErrorsState {\n    createError?: Error;\n    createAddressError?: Error;\n}\n\nexport interface CustomerStatusesState {\n    isCreating?: boolean;\n    isCreatingAddress?: boolean;\n}\n\nexport const DEFAULT_STATE: CustomerState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/customer/customer-strategy-action-creator.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\nimport { ScriptLoader } from '@bigcommerce/script-loader';\nimport { merge } from 'lodash';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    CheckoutActionCreator,\n    CheckoutRequestSender,\n    CheckoutStore,\n    CheckoutStoreState,\n    createCheckoutStore,\n} from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { MutationObserverFactory } from '../common/dom';\nimport { Registry } from '../common/registry';\nimport { ConfigActionCreator, ConfigRequestSender } from '../config';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../form';\nimport { createPaymentIntegrationService } from '../payment-integration';\nimport {\n    GoogleRecaptcha,\n    GoogleRecaptchaScriptLoader,\n    GoogleRecaptchaWindow,\n    SpamProtectionActionCreator,\n    SpamProtectionRequestSender,\n} from '../spam-protection';\n\nimport createCustomerStrategyRegistry from './create-customer-strategy-registry';\nimport createCustomerStrategyRegistryV2 from './create-customer-strategy-registry-v2';\nimport CustomerActionCreator from './customer-action-creator';\nimport CustomerRequestSender from './customer-request-sender';\nimport CustomerStrategyActionCreator from './customer-strategy-action-creator';\nimport { CustomerStrategyActionType } from './customer-strategy-actions';\nimport CustomerStrategyRegistryV2 from './customer-strategy-registry-v2';\nimport { CustomerStrategy } from './strategies';\nimport { DefaultCustomerStrategy } from './strategies/default';\n\ndescribe('CustomerStrategyActionCreator', () => {\n    let registry: Registry<CustomerStrategy>;\n    let customerRegistryV2: CustomerStrategyRegistryV2;\n    let state: CheckoutStoreState;\n    let store: CheckoutStore;\n    let strategy: DefaultCustomerStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        const requestSender = createRequestSender();\n        const checkoutActionCreator = new CheckoutActionCreator(\n            new CheckoutRequestSender(requestSender),\n            new ConfigActionCreator(new ConfigRequestSender(requestSender)),\n            new FormFieldsActionCreator(new FormFieldsRequestSender(requestSender)),\n        );\n\n        const mockWindow = { grecaptcha: {} } as GoogleRecaptchaWindow;\n        const scriptLoader = new ScriptLoader();\n        const googleRecaptchaScriptLoader = new GoogleRecaptchaScriptLoader(\n            scriptLoader,\n            mockWindow,\n        );\n        const mutationObserverFactory = new MutationObserverFactory();\n        const googleRecaptcha = new GoogleRecaptcha(\n            googleRecaptchaScriptLoader,\n            mutationObserverFactory,\n        );\n\n        state = getCheckoutStoreState();\n        store = createCheckoutStore(state);\n\n        paymentIntegrationService = createPaymentIntegrationService(store);\n\n        customerRegistryV2 = createCustomerStrategyRegistryV2(paymentIntegrationService, {});\n        registry = createCustomerStrategyRegistry(store, createRequestSender());\n        strategy = new DefaultCustomerStrategy(\n            store,\n            new CustomerActionCreator(\n                new CustomerRequestSender(requestSender),\n                checkoutActionCreator,\n                new SpamProtectionActionCreator(\n                    googleRecaptcha,\n                    new SpamProtectionRequestSender(requestSender),\n                ),\n            ),\n        );\n\n        jest.spyOn(registry, 'get').mockReturnValue(strategy);\n\n        jest.spyOn(strategy, 'signOut').mockReturnValue(Promise.resolve(store.getState()));\n    });\n\n    describe('#initialize()', () => {\n        beforeEach(() => {\n            store = createCheckoutStore(\n                merge({}, state, {\n                    customerStrategies: { data: { amazon: { isInitialized: true } } },\n                }),\n            );\n\n            jest.spyOn(strategy, 'initialize').mockReturnValue(Promise.resolve(store.getState()));\n        });\n\n        it('finds customer strategy by id', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n\n            await from(actionCreator.initialize({ methodId: 'default' })(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(registry.get).toHaveBeenCalledWith('default');\n        });\n\n        it('initializes customer strategy', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const options = { methodId: 'default' };\n\n            await from(actionCreator.initialize(options)(store)).pipe(toArray()).toPromise();\n\n            expect(strategy.initialize).toHaveBeenCalledWith(options);\n        });\n\n        it('does not initialize if strategy is already initialized', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const strategy = registry.get('amazon');\n\n            jest.spyOn(strategy, 'initialize').mockReturnValue(Promise.resolve(store.getState()));\n\n            await from(actionCreator.initialize({ methodId: 'amazon' })(store)).toPromise();\n\n            expect(strategy.initialize).not.toHaveBeenCalled();\n        });\n\n        it('emits action to notify initialization progress', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const actions = await from(actionCreator.initialize({ methodId: 'default' })(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: CustomerStrategyActionType.InitializeRequested,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: CustomerStrategyActionType.InitializeSucceeded,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n\n        it('emits error action if unable to initialize', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const initializeError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            jest.spyOn(strategy, 'initialize').mockReturnValue(Promise.reject(initializeError));\n\n            const actions = await from(actionCreator.initialize({ methodId: 'default' })(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: CustomerStrategyActionType.InitializeRequested,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: CustomerStrategyActionType.InitializeFailed,\n                    error: true,\n                    payload: initializeError,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        beforeEach(() => {\n            store = createCheckoutStore(\n                merge({}, state, {\n                    customerStrategies: { data: { default: { isInitialized: true } } },\n                }),\n            );\n\n            jest.spyOn(strategy, 'deinitialize').mockReturnValue(Promise.resolve(store.getState()));\n        });\n\n        it('finds customer strategy by id', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n\n            await from(actionCreator.deinitialize({ methodId: 'default' })(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(registry.get).toHaveBeenCalledWith('default');\n        });\n\n        it('deinitializes customer strategy', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const options = { methodId: 'default' };\n\n            await from(actionCreator.deinitialize(options)(store)).pipe(toArray()).toPromise();\n\n            expect(strategy.deinitialize).toHaveBeenCalledWith(options);\n        });\n\n        it('does not deinitialize if strategy is not initialized', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const strategy = registry.get('amazon');\n\n            jest.spyOn(strategy, 'deinitialize').mockReturnValue(Promise.resolve(store.getState()));\n\n            await from(actionCreator.deinitialize({ methodId: 'amazon' })(store)).toPromise();\n\n            expect(strategy.deinitialize).not.toHaveBeenCalled();\n        });\n\n        it('emits action to notify initialization progress', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const actions = await from(actionCreator.deinitialize({ methodId: 'default' })(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: CustomerStrategyActionType.DeinitializeRequested,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: CustomerStrategyActionType.DeinitializeSucceeded,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n\n        it('emits error action if unable to deinitialize', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const deinitializeError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            jest.spyOn(strategy, 'deinitialize').mockReturnValue(Promise.reject(deinitializeError));\n\n            const actions = await from(actionCreator.deinitialize({ methodId: 'default' })(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: CustomerStrategyActionType.DeinitializeRequested,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: CustomerStrategyActionType.DeinitializeFailed,\n                    error: true,\n                    payload: deinitializeError,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n    });\n\n    describe('#signIn()', () => {\n        beforeEach(() => {\n            jest.spyOn(strategy, 'signIn').mockReturnValue(Promise.resolve(store.getState()));\n        });\n\n        it('finds customer strategy by id', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n\n            await actionCreator\n                .signIn({ email: 'foo@bar.com', password: 'password1' }, { methodId: 'default' })\n                .pipe(toArray())\n                .toPromise();\n\n            expect(registry.get).toHaveBeenCalledWith('default');\n        });\n\n        it('executes customer strategy', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const credentials = { email: 'foo@bar.com', password: 'password1' };\n            const options = { methodId: 'default' };\n\n            await actionCreator.signIn(credentials, options).pipe(toArray()).toPromise();\n\n            expect(strategy.signIn).toHaveBeenCalledWith(credentials, options);\n        });\n\n        it('emits action to notify sign-in progress', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const actions = await actionCreator\n                .signIn({ email: 'foo@bar.com', password: 'password1' }, { methodId: 'default' })\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: CustomerStrategyActionType.SignInRequested, meta: { methodId: 'default' } },\n                { type: CustomerStrategyActionType.SignInSucceeded, meta: { methodId: 'default' } },\n            ]);\n        });\n\n        it('emits error action if unable to sign in', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const signInError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            jest.spyOn(strategy, 'signIn').mockReturnValue(Promise.reject(signInError));\n\n            const actions = await actionCreator\n                .signIn({ email: 'foo@bar.com', password: 'password1' }, { methodId: 'default' })\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: CustomerStrategyActionType.SignInRequested, meta: { methodId: 'default' } },\n                {\n                    type: CustomerStrategyActionType.SignInFailed,\n                    error: true,\n                    payload: signInError,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n    });\n\n    describe('#signOut()', () => {\n        beforeEach(() => {\n            jest.spyOn(strategy, 'signOut').mockReturnValue(Promise.resolve(store.getState()));\n        });\n\n        it('finds customer strategy by id', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n\n            await actionCreator.signOut({ methodId: 'default' }).pipe(toArray()).toPromise();\n\n            expect(registry.get).toHaveBeenCalledWith('default');\n        });\n\n        it('executes customer strategy', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const options = { methodId: 'default' };\n\n            await actionCreator.signOut(options).pipe(toArray()).toPromise();\n\n            expect(strategy.signOut).toHaveBeenCalledWith(options);\n        });\n\n        it('emits action to notify sign-out progress', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const actions = await actionCreator\n                .signOut({ methodId: 'default' })\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: CustomerStrategyActionType.SignOutRequested,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: CustomerStrategyActionType.SignOutSucceeded,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n\n        it('emits error action if unable to sign out', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const signOutError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            jest.spyOn(strategy, 'signOut').mockReturnValue(Promise.reject(signOutError));\n\n            const actions = await actionCreator\n                .signOut({ methodId: 'default' })\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: CustomerStrategyActionType.SignOutRequested,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: CustomerStrategyActionType.SignOutFailed,\n                    error: true,\n                    payload: signOutError,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n    });\n\n    describe('#widgetInteraction()', () => {\n        it('executes widget interaction callback', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const options = { methodId: 'default' };\n            const fakeMethod = jest.fn(() => Promise.resolve());\n\n            await actionCreator.widgetInteraction(fakeMethod, options).pipe(toArray()).toPromise();\n\n            expect(fakeMethod).toHaveBeenCalled();\n        });\n\n        it('emits action to notify widget interaction in progress', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const actions = await actionCreator\n                .widgetInteraction(\n                    jest.fn(() => Promise.resolve()),\n                    { methodId: 'default' },\n                )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: CustomerStrategyActionType.WidgetInteractionStarted,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: CustomerStrategyActionType.WidgetInteractionFinished,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n\n        it('emits error action if widget interaction fails', async () => {\n            const actionCreator = new CustomerStrategyActionCreator(\n                registry,\n                customerRegistryV2,\n                paymentIntegrationService,\n            );\n            const signInError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            const actions = await actionCreator\n                .widgetInteraction(\n                    jest.fn(() => Promise.reject(signInError)),\n                    { methodId: 'default' },\n                )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: CustomerStrategyActionType.WidgetInteractionStarted,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: CustomerStrategyActionType.WidgetInteractionFailed,\n                    error: true,\n                    payload: signInError,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/customer/customer-strategy-action-creator.ts",
    "content": "import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { Observable, Observer } from 'rxjs';\n\nimport {\n    CustomerStrategy as CustomerStrategyV2,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { Registry } from '../common/registry';\nimport { registerIntegrations } from '../payment-integration';\n\nimport CustomerCredentials from './customer-credentials';\nimport {\n    CustomerInitializeOptions,\n    CustomerRequestOptions,\n    ExecutePaymentMethodCheckoutOptions,\n} from './customer-request-options';\nimport {\n    CustomerStrategyActionType,\n    CustomerStrategyDeinitializeAction,\n    CustomerStrategyExecutePaymentMethodCheckoutAction,\n    CustomerStrategyInitializeAction,\n    CustomerStrategySignInAction,\n    CustomerStrategySignOutAction,\n    CustomerStrategyWidgetAction,\n} from './customer-strategy-actions';\nimport CustomerStrategyRegistryV2 from './customer-strategy-registry-v2';\nimport { CustomerStrategy } from './strategies';\n\nexport default class CustomerStrategyActionCreator {\n    constructor(\n        private _strategyRegistry: Registry<CustomerStrategy>,\n        private _strategyRegistryV2: CustomerStrategyRegistryV2,\n        private _paymentIntegrationService: PaymentIntegrationService,\n    ) {}\n\n    signIn(\n        credentials: CustomerCredentials,\n        options?: CustomerRequestOptions,\n    ): Observable<CustomerStrategySignInAction> {\n        return Observable.create((observer: Observer<CustomerStrategySignInAction>) => {\n            const methodId = options && options.methodId;\n            const meta = { methodId };\n\n            observer.next(\n                createAction(CustomerStrategyActionType.SignInRequested, undefined, meta),\n            );\n\n            const promise: Promise<InternalCheckoutSelectors | void> = this._getStrategy(\n                methodId,\n            ).signIn(credentials, options);\n\n            promise\n                .then(() => {\n                    observer.next(\n                        createAction(CustomerStrategyActionType.SignInSucceeded, undefined, meta),\n                    );\n                    observer.complete();\n                })\n                .catch((error) => {\n                    observer.error(\n                        createErrorAction(CustomerStrategyActionType.SignInFailed, error, meta),\n                    );\n                });\n        });\n    }\n\n    signOut(options?: CustomerRequestOptions): Observable<CustomerStrategySignOutAction> {\n        return Observable.create((observer: Observer<CustomerStrategySignOutAction>) => {\n            const methodId = options && options.methodId;\n            const meta = { methodId };\n\n            observer.next(\n                createAction(CustomerStrategyActionType.SignOutRequested, undefined, meta),\n            );\n\n            const promise: Promise<InternalCheckoutSelectors | void> =\n                this._getStrategy(methodId).signOut(options);\n\n            promise\n                .then(() => {\n                    observer.next(\n                        createAction(CustomerStrategyActionType.SignOutSucceeded, undefined, meta),\n                    );\n                    observer.complete();\n                })\n                .catch((error) => {\n                    observer.error(\n                        createErrorAction(CustomerStrategyActionType.SignOutFailed, error, meta),\n                    );\n                });\n        });\n    }\n\n    executePaymentMethodCheckout(\n        options?: ExecutePaymentMethodCheckoutOptions,\n    ): Observable<CustomerStrategyExecutePaymentMethodCheckoutAction> {\n        return Observable.create(\n            (observer: Observer<CustomerStrategyExecutePaymentMethodCheckoutAction>) => {\n                const methodId = options && options.methodId;\n                const meta = { methodId };\n\n                observer.next(\n                    createAction(\n                        CustomerStrategyActionType.ExecutePaymentMethodCheckoutRequested,\n                        undefined,\n                        meta,\n                    ),\n                );\n\n                const promise: Promise<InternalCheckoutSelectors | void> =\n                    this._getStrategy(methodId).executePaymentMethodCheckout(options);\n\n                promise\n                    .then(() => {\n                        observer.next(\n                            createAction(\n                                CustomerStrategyActionType.ExecutePaymentMethodCheckoutSucceeded,\n                                undefined,\n                                meta,\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((error) => {\n                        observer.error(\n                            createErrorAction(\n                                CustomerStrategyActionType.ExecutePaymentMethodCheckoutFailed,\n                                error,\n                                meta,\n                            ),\n                        );\n                    });\n            },\n        );\n    }\n\n    initialize(\n        options?: CustomerInitializeOptions,\n    ): ThunkAction<CustomerStrategyInitializeAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<CustomerStrategyInitializeAction>) => {\n                const state = store.getState();\n                const methodId = options && options.methodId;\n                const meta = { methodId };\n\n                registerIntegrations(\n                    this._strategyRegistryV2,\n                    options?.integrations ?? [],\n                    this._paymentIntegrationService,\n                );\n\n                if (methodId && state.customerStrategies.isInitialized(methodId)) {\n                    return observer.complete();\n                }\n\n                observer.next(\n                    createAction(CustomerStrategyActionType.InitializeRequested, undefined, meta),\n                );\n\n                const promise: Promise<InternalCheckoutSelectors | void> =\n                    this._getStrategy(methodId).initialize(options);\n\n                promise\n                    .then(() => {\n                        observer.next(\n                            createAction(\n                                CustomerStrategyActionType.InitializeSucceeded,\n                                undefined,\n                                meta,\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((error) => {\n                        observer.error(\n                            createErrorAction(\n                                CustomerStrategyActionType.InitializeFailed,\n                                error,\n                                meta,\n                            ),\n                        );\n                    });\n            });\n    }\n\n    deinitialize(\n        options?: CustomerRequestOptions,\n    ): ThunkAction<CustomerStrategyDeinitializeAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<CustomerStrategyDeinitializeAction>) => {\n                const state = store.getState();\n                const methodId = options && options.methodId;\n                const meta = { methodId };\n\n                if (methodId && !state.customerStrategies.isInitialized(methodId)) {\n                    return observer.complete();\n                }\n\n                observer.next(\n                    createAction(CustomerStrategyActionType.DeinitializeRequested, undefined, meta),\n                );\n\n                const promise: Promise<InternalCheckoutSelectors | void> =\n                    this._getStrategy(methodId).deinitialize(options);\n\n                promise\n                    .then(() => {\n                        observer.next(\n                            createAction(\n                                CustomerStrategyActionType.DeinitializeSucceeded,\n                                undefined,\n                                meta,\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((error) => {\n                        observer.error(\n                            createErrorAction(\n                                CustomerStrategyActionType.DeinitializeFailed,\n                                error,\n                                meta,\n                            ),\n                        );\n                    });\n            });\n    }\n\n    widgetInteraction(\n        method: () => Promise<any>,\n        options?: CustomerRequestOptions,\n    ): Observable<CustomerStrategyWidgetAction> {\n        return Observable.create((observer: Observer<CustomerStrategyWidgetAction>) => {\n            const methodId = options && options.methodId;\n            const meta = { methodId };\n\n            observer.next(\n                createAction(CustomerStrategyActionType.WidgetInteractionStarted, undefined, meta),\n            );\n\n            method()\n                .then(() => {\n                    observer.next(\n                        createAction(\n                            CustomerStrategyActionType.WidgetInteractionFinished,\n                            undefined,\n                            meta,\n                        ),\n                    );\n                    observer.complete();\n                })\n                .catch((error) => {\n                    observer.error(\n                        createErrorAction(\n                            CustomerStrategyActionType.WidgetInteractionFailed,\n                            error,\n                            meta,\n                        ),\n                    );\n                });\n        });\n    }\n\n    private _getStrategy(methodId?: string): CustomerStrategy | CustomerStrategyV2 {\n        let strategy: CustomerStrategy | CustomerStrategyV2;\n\n        try {\n            strategy = this._strategyRegistryV2.get({ id: methodId || '' });\n        } catch {\n            strategy = this._strategyRegistry.get(methodId);\n        }\n\n        return strategy;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/customer/customer-strategy-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nexport enum CustomerStrategyActionType {\n    SignInFailed = 'CUSTOMER_STRATEGY_SIGN_IN_FAILED',\n    SignInRequested = 'CUSTOMER_STRATEGY_SIGN_IN_REQUESTED',\n    SignInSucceeded = 'CUSTOMER_STRATEGY_SIGN_IN_SUCCEEDED',\n    SignOutFailed = 'CUSTOMER_STRATEGY_SIGN_OUT_FAILED',\n    SignOutRequested = 'CUSTOMER_STRATEGY_SIGN_OUT_REQUESTED',\n    SignOutSucceeded = 'CUSTOMER_STRATEGY_SIGN_OUT_SUCCEEDED',\n    ExecutePaymentMethodCheckoutFailed = 'CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_FAILED',\n    ExecutePaymentMethodCheckoutRequested = 'CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_REQUESTED',\n    ExecutePaymentMethodCheckoutSucceeded = 'CUSTOMER_STRATEGY_EXECUTE_PAYMENT_METHOD_CHECKOUT_SUCCEEDED',\n    InitializeFailed = 'CUSTOMER_STRATEGY_INITIALIZE_FAILED',\n    InitializeRequested = 'CUSTOMER_STRATEGY_INITIALIZE_REQUESTED',\n    InitializeSucceeded = 'CUSTOMER_STRATEGY_INITIALIZE_SUCCEEDED',\n    DeinitializeFailed = 'CUSTOMER_STRATEGY_DEINITIALIZE_FAILED',\n    DeinitializeRequested = 'CUSTOMER_STRATEGY_DEINITIALIZE_REQUESTED',\n    DeinitializeSucceeded = 'CUSTOMER_STRATEGY_DEINITIALIZE_SUCCEEDED',\n    WidgetInteractionStarted = 'CUSTOMER_STRATEGY_WIDGET_INTERACTION_STARTED',\n    WidgetInteractionFinished = 'CUSTOMER_STRATEGY_WIDGET_INTERACTION_FINISHED',\n    WidgetInteractionFailed = 'CUSTOMER_STRATEGY_WIDGET_INTERACTION_FAILED',\n}\n\nexport type CustomerStrategyAction =\n    | CustomerStrategySignInAction\n    | CustomerStrategySignOutAction\n    | CustomerStrategyExecutePaymentMethodCheckoutAction\n    | CustomerStrategyInitializeAction\n    | CustomerStrategyDeinitializeAction\n    | CustomerStrategyWidgetAction;\n\nexport type CustomerStrategySignInAction =\n    | SignInRequestedAction\n    | SignInSucceededAction\n    | SignInFailedAction;\n\nexport type CustomerStrategySignOutAction =\n    | SignOutRequestedAction\n    | SignOutSucceededAction\n    | SignOutFailedAction;\n\nexport type CustomerStrategyExecutePaymentMethodCheckoutAction =\n    | ExecutePaymentMethodCheckoutRequestedAction\n    | ExecutePaymentMethodCheckoutSucceededAction\n    | ExecutePaymentMethodCheckoutFailedAction;\n\nexport type CustomerStrategyInitializeAction =\n    | InitializeRequestedAction\n    | InitializeSucceededAction\n    | InitializeFailedAction;\n\nexport type CustomerStrategyDeinitializeAction =\n    | DeinitializeRequestedAction\n    | DeinitializeSucceededAction\n    | DeinitializeFailedAction;\n\nexport type CustomerStrategyWidgetAction =\n    | WidgetInteractionStartedAction\n    | WidgetInteractionFinishedAction\n    | WidgetInteractionFailedAction;\n\nexport interface SignInRequestedAction extends Action {\n    type: CustomerStrategyActionType.SignInRequested;\n}\n\nexport interface SignInSucceededAction extends Action {\n    type: CustomerStrategyActionType.SignInSucceeded;\n}\n\nexport interface SignInFailedAction extends Action<Error> {\n    type: CustomerStrategyActionType.SignInFailed;\n}\n\nexport interface SignOutRequestedAction extends Action {\n    type: CustomerStrategyActionType.SignOutRequested;\n}\n\nexport interface SignOutSucceededAction extends Action {\n    type: CustomerStrategyActionType.SignOutSucceeded;\n}\n\nexport interface SignOutFailedAction extends Action<Error> {\n    type: CustomerStrategyActionType.SignOutFailed;\n}\n\nexport interface ExecutePaymentMethodCheckoutRequestedAction extends Action {\n    type: CustomerStrategyActionType.ExecutePaymentMethodCheckoutRequested;\n}\n\nexport interface ExecutePaymentMethodCheckoutSucceededAction extends Action {\n    type: CustomerStrategyActionType.ExecutePaymentMethodCheckoutSucceeded;\n}\n\nexport interface ExecutePaymentMethodCheckoutFailedAction extends Action<Error> {\n    type: CustomerStrategyActionType.ExecutePaymentMethodCheckoutFailed;\n}\n\nexport interface InitializeRequestedAction extends Action {\n    type: CustomerStrategyActionType.InitializeRequested;\n}\n\nexport interface InitializeSucceededAction extends Action {\n    type: CustomerStrategyActionType.InitializeSucceeded;\n}\n\nexport interface InitializeFailedAction extends Action<Error> {\n    type: CustomerStrategyActionType.InitializeFailed;\n}\n\nexport interface DeinitializeRequestedAction extends Action {\n    type: CustomerStrategyActionType.DeinitializeRequested;\n}\n\nexport interface DeinitializeSucceededAction extends Action {\n    type: CustomerStrategyActionType.DeinitializeSucceeded;\n}\n\nexport interface DeinitializeFailedAction extends Action<Error> {\n    type: CustomerStrategyActionType.DeinitializeFailed;\n}\n\nexport interface WidgetInteractionStartedAction extends Action {\n    type: CustomerStrategyActionType.WidgetInteractionStarted;\n}\n\nexport interface WidgetInteractionFinishedAction extends Action {\n    type: CustomerStrategyActionType.WidgetInteractionFinished;\n}\n\nexport interface WidgetInteractionFailedAction extends Action<Error> {\n    type: CustomerStrategyActionType.WidgetInteractionFailed;\n}\n"
  },
  {
    "path": "packages/core/src/customer/customer-strategy-reducer.spec.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\n\nimport { CustomerStrategyActionType } from './customer-strategy-actions';\nimport customerStrategyReducer from './customer-strategy-reducer';\nimport CustomerStrategyState from './customer-strategy-state';\n\ndescribe('customerStrategyReducer()', () => {\n    let initialState: CustomerStrategyState;\n\n    beforeEach(() => {\n        initialState = {\n            data: {},\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    it('returns pending flag as true if initializing customer', () => {\n        const action = createAction(CustomerStrategyActionType.InitializeRequested, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            initializeMethodId: 'foobar',\n            isInitializing: true,\n        });\n    });\n\n    it('returns pending flag as false if customer has initialized successfully', () => {\n        const action = createAction(CustomerStrategyActionType.InitializeSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            initializeMethodId: undefined,\n            isInitializing: false,\n        });\n    });\n\n    it('returns initialization flag as true if customer has initialized successfully', () => {\n        const action = createAction(CustomerStrategyActionType.InitializeSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).data).toEqual({\n            foobar: { isInitialized: true },\n        });\n    });\n\n    it('returns error if customer has failed to initialize', () => {\n        const action = createErrorAction(CustomerStrategyActionType.InitializeFailed, new Error(), {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).errors).toEqual({\n            initializeMethodId: 'foobar',\n            initializeErrors: { foobar: action.payload },\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            isInitializing: false,\n        });\n    });\n\n    it('returns the existing errors', () => {\n        const action = createErrorAction(CustomerStrategyActionType.InitializeFailed, new Error(), {\n            methodId: 'foo',\n        });\n\n        const action2 = createAction(CustomerStrategyActionType.InitializeSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        const newState = customerStrategyReducer(initialState, action);\n\n        expect(customerStrategyReducer(newState, action2).errors).toEqual({\n            initializeMethodId: 'foo',\n            initializeErrors: { foo: Error() },\n        });\n    });\n\n    it('returns errors if multiple methods failed to initialize', () => {\n        const action = createErrorAction(CustomerStrategyActionType.InitializeFailed, new Error(), {\n            methodId: 'foo',\n        });\n\n        const action2 = createErrorAction(\n            CustomerStrategyActionType.InitializeFailed,\n            new Error(),\n            {\n                methodId: 'bar',\n            },\n        );\n\n        const newState = customerStrategyReducer(initialState, action);\n\n        expect(customerStrategyReducer(newState, action2).errors.initializeErrors).toEqual({\n            foo: Error(),\n            bar: Error(),\n        });\n    });\n\n    it('returns pending flag as true if deinitializing customer', () => {\n        const action = createAction(CustomerStrategyActionType.DeinitializeRequested, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            deinitializeMethodId: 'foobar',\n            isDeinitializing: true,\n        });\n    });\n\n    it('returns pending flag as false if customer has deinitialized successfully', () => {\n        const action = createAction(CustomerStrategyActionType.DeinitializeSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            deinitializeMethodId: undefined,\n            isDeinitializing: false,\n        });\n    });\n\n    it('returns initialization flag as false if customer has deinitialized successfully', () => {\n        const action = createAction(CustomerStrategyActionType.DeinitializeSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).data).toEqual({\n            foobar: { isInitialized: false },\n        });\n    });\n\n    it('returns error if customer has failed to deinitialize', () => {\n        const action = createErrorAction(\n            CustomerStrategyActionType.DeinitializeFailed,\n            new Error(),\n            { methodId: 'foobar' },\n        );\n\n        expect(customerStrategyReducer(initialState, action).errors).toEqual({\n            deinitializeMethodId: 'foobar',\n            deinitializeError: action.payload,\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            isDeinitializing: false,\n        });\n    });\n\n    it('returns pending flag as true if signing in customer', () => {\n        const action = createAction(CustomerStrategyActionType.SignInRequested, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            signInMethodId: 'foobar',\n            isSigningIn: true,\n        });\n    });\n\n    it('returns pending flag as false if customer has signed in successfully', () => {\n        const action = createAction(CustomerStrategyActionType.SignInSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            signInMethodId: undefined,\n            isSigningIn: false,\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            isSigningIn: false,\n        });\n    });\n\n    it('returns error if customer has failed to sign in', () => {\n        const action = createErrorAction(CustomerStrategyActionType.SignInFailed, new Error(), {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).errors).toEqual({\n            signInMethodId: 'foobar',\n            signInError: action.payload,\n        });\n    });\n\n    it('returns pending flag as true if signing out customer', () => {\n        const action = createAction(CustomerStrategyActionType.SignOutRequested, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            signOutMethodId: 'foobar',\n            isSigningOut: true,\n        });\n    });\n\n    it('returns pending flag as false if customer has signed out successfully', () => {\n        const action = createAction(CustomerStrategyActionType.SignOutSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            signOutMethodId: undefined,\n            isSigningOut: false,\n        });\n    });\n\n    it('returns error if customer has failed to sign out', () => {\n        const action = createErrorAction(CustomerStrategyActionType.SignOutFailed, new Error(), {\n            methodId: 'foobar',\n        });\n\n        expect(customerStrategyReducer(initialState, action).errors).toEqual({\n            signOutMethodId: 'foobar',\n            signOutError: action.payload,\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            isSigningOut: false,\n        });\n    });\n\n    it('returns the pending flag as true if the customer executing payment method checkout', () => {\n        const action = createAction(\n            CustomerStrategyActionType.ExecutePaymentMethodCheckoutRequested,\n            undefined,\n            { methodId: 'foobar' },\n        );\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            executePaymentMethodCheckoutMethodId: 'foobar',\n            isExecutingPaymentMethodCheckout: true,\n        });\n    });\n\n    it('returns the pending flag as false if the customer has executed payment method checkout successfully', () => {\n        const action = createAction(\n            CustomerStrategyActionType.ExecutePaymentMethodCheckoutSucceeded,\n            undefined,\n            { methodId: 'foobar' },\n        );\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            executePaymentMethodCheckoutMethodId: undefined,\n            isExecutingPaymentMethodCheckout: false,\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            isExecutingPaymentMethodCheckout: false,\n        });\n    });\n\n    it('returns error if customer has failed to execute payment method checkout', () => {\n        const action = createErrorAction(\n            CustomerStrategyActionType.ExecutePaymentMethodCheckoutFailed,\n            new Error(),\n            { methodId: 'foobar' },\n        );\n\n        expect(customerStrategyReducer(initialState, action).errors).toEqual({\n            executePaymentMethodCheckoutMethodId: 'foobar',\n            executePaymentMethodCheckoutError: action.payload,\n        });\n    });\n\n    it('returns pending flag as true if interacting with widget', () => {\n        const action = createAction(\n            CustomerStrategyActionType.WidgetInteractionStarted,\n            undefined,\n            { methodId: 'foobar' },\n        );\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            widgetInteractionMethodId: 'foobar',\n            isWidgetInteracting: true,\n        });\n    });\n\n    it('returns pending flag as false if interacting with widget has finished', () => {\n        const action = createAction(\n            CustomerStrategyActionType.WidgetInteractionFinished,\n            undefined,\n            { methodId: 'foobar' },\n        );\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            widgetInteractionMethodId: undefined,\n            isWidgetInteracting: false,\n        });\n    });\n\n    it('returns error if widget interaction has failed', () => {\n        const action = createErrorAction(\n            CustomerStrategyActionType.WidgetInteractionFailed,\n            new Error(),\n            { methodId: 'foobar' },\n        );\n\n        expect(customerStrategyReducer(initialState, action).errors).toEqual({\n            widgetInteractionMethodId: 'foobar',\n            widgetInteractionError: action.payload,\n        });\n\n        expect(customerStrategyReducer(initialState, action).statuses).toEqual({\n            isWidgetInteracting: false,\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/customer/customer-strategy-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge } from '../common/utility';\n\nimport { CustomerStrategyAction, CustomerStrategyActionType } from './customer-strategy-actions';\nimport CustomerStrategyState, {\n    CustomerStrategyDataState,\n    CustomerStrategyErrorsState,\n    CustomerStrategyStatusesState,\n    DEFAULT_STATE,\n} from './customer-strategy-state';\n\nexport default function customerStrategyReducer(\n    state: CustomerStrategyState = DEFAULT_STATE,\n    action: Action,\n): CustomerStrategyState {\n    const reducer = combineReducers<CustomerStrategyState, CustomerStrategyAction>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: CustomerStrategyDataState = DEFAULT_STATE.data,\n    action: CustomerStrategyAction,\n): CustomerStrategyDataState {\n    switch (action.type) {\n        case CustomerStrategyActionType.InitializeSucceeded:\n            return objectMerge(data, {\n                [action.meta && action.meta.methodId]: {\n                    isInitialized: true,\n                },\n            });\n\n        case CustomerStrategyActionType.DeinitializeSucceeded:\n            return objectMerge(data, {\n                [action.meta && action.meta.methodId]: {\n                    isInitialized: false,\n                },\n            });\n    }\n\n    return data;\n}\n\nfunction errorsReducer(\n    errors: CustomerStrategyErrorsState = DEFAULT_STATE.errors,\n    action: CustomerStrategyAction,\n): CustomerStrategyErrorsState {\n    switch (action.type) {\n        case CustomerStrategyActionType.InitializeRequested:\n        case CustomerStrategyActionType.InitializeSucceeded:\n            return objectMerge(errors, {\n                initializeErrors: { ...errors.initializeErrors },\n                initializeMethodId: errors.initializeMethodId\n                    ? errors.initializeMethodId\n                    : undefined,\n            });\n\n        case CustomerStrategyActionType.InitializeFailed:\n            return objectMerge(errors, {\n                initializeErrors: {\n                    ...errors.initializeErrors,\n                    [action.meta && action.meta.methodId]: action.payload,\n                },\n                initializeMethodId: action.meta && action.meta.methodId,\n            });\n\n        case CustomerStrategyActionType.DeinitializeRequested:\n        case CustomerStrategyActionType.DeinitializeSucceeded:\n            return objectMerge(errors, {\n                deinitializeError: undefined,\n                deinitializeMethodId: undefined,\n            });\n\n        case CustomerStrategyActionType.DeinitializeFailed:\n            return objectMerge(errors, {\n                deinitializeError: action.payload,\n                deinitializeMethodId: action.meta && action.meta.methodId,\n            });\n\n        case CustomerStrategyActionType.SignInRequested:\n        case CustomerStrategyActionType.SignInSucceeded:\n            return objectMerge(errors, {\n                signInError: undefined,\n                signInMethodId: undefined,\n            });\n\n        case CustomerStrategyActionType.SignInFailed:\n            return objectMerge(errors, {\n                signInError: action.payload,\n                signInMethodId: action.meta && action.meta.methodId,\n            });\n\n        case CustomerStrategyActionType.SignOutRequested:\n        case CustomerStrategyActionType.SignOutSucceeded:\n            return objectMerge(errors, {\n                signOutError: undefined,\n                signOutMethodId: undefined,\n            });\n\n        case CustomerStrategyActionType.SignOutFailed:\n            return objectMerge(errors, {\n                signOutError: action.payload,\n                signOutMethodId: action.meta && action.meta.methodId,\n            });\n\n        case CustomerStrategyActionType.ExecutePaymentMethodCheckoutRequested:\n        case CustomerStrategyActionType.ExecutePaymentMethodCheckoutSucceeded:\n            return objectMerge(errors, {\n                executePaymentMethodCheckoutError: undefined,\n                executePaymentMethodCheckoutMethodId: undefined,\n            });\n\n        case CustomerStrategyActionType.ExecutePaymentMethodCheckoutFailed:\n            return objectMerge(errors, {\n                executePaymentMethodCheckoutError: action.payload,\n                executePaymentMethodCheckoutMethodId: action.meta && action.meta.methodId,\n            });\n\n        case CustomerStrategyActionType.WidgetInteractionStarted:\n        case CustomerStrategyActionType.WidgetInteractionFinished:\n            return objectMerge(errors, {\n                widgetInteractionError: undefined,\n                widgetInteractionMethodId: undefined,\n            });\n\n        case CustomerStrategyActionType.WidgetInteractionFailed:\n            return objectMerge(errors, {\n                widgetInteractionError: action.payload,\n                widgetInteractionMethodId: action.meta.methodId,\n            });\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: CustomerStrategyStatusesState = DEFAULT_STATE.statuses,\n    action: CustomerStrategyAction,\n): CustomerStrategyStatusesState {\n    switch (action.type) {\n        case CustomerStrategyActionType.InitializeRequested:\n            return objectMerge(statuses, {\n                isInitializing: true,\n                initializeMethodId: action.meta && action.meta.methodId,\n            });\n\n        case CustomerStrategyActionType.InitializeFailed:\n        case CustomerStrategyActionType.InitializeSucceeded:\n            return objectMerge(statuses, {\n                isInitializing: false,\n                initializeMethodId: undefined,\n            });\n\n        case CustomerStrategyActionType.DeinitializeRequested:\n            return objectMerge(statuses, {\n                isDeinitializing: true,\n                deinitializeMethodId: action.meta && action.meta.methodId,\n            });\n\n        case CustomerStrategyActionType.DeinitializeFailed:\n        case CustomerStrategyActionType.DeinitializeSucceeded:\n            return objectMerge(statuses, {\n                isDeinitializing: false,\n                deinitializeMethodId: undefined,\n            });\n\n        case CustomerStrategyActionType.SignInRequested:\n            return objectMerge(statuses, {\n                isSigningIn: true,\n                signInMethodId: action.meta && action.meta.methodId,\n            });\n\n        case CustomerStrategyActionType.SignInFailed:\n        case CustomerStrategyActionType.SignInSucceeded:\n            return objectMerge(statuses, {\n                isSigningIn: false,\n                signInMethodId: undefined,\n            });\n\n        case CustomerStrategyActionType.SignOutRequested:\n            return objectMerge(statuses, {\n                isSigningOut: true,\n                signOutMethodId: action.meta && action.meta.methodId,\n            });\n\n        case CustomerStrategyActionType.SignOutFailed:\n        case CustomerStrategyActionType.SignOutSucceeded:\n            return objectMerge(statuses, {\n                isSigningOut: false,\n                signOutMethodId: undefined,\n            });\n\n        case CustomerStrategyActionType.ExecutePaymentMethodCheckoutRequested:\n            return objectMerge(statuses, {\n                isExecutingPaymentMethodCheckout: true,\n                executePaymentMethodCheckoutMethodId: action.meta && action.meta.methodId,\n            });\n\n        case CustomerStrategyActionType.ExecutePaymentMethodCheckoutFailed:\n        case CustomerStrategyActionType.ExecutePaymentMethodCheckoutSucceeded:\n            return objectMerge(statuses, {\n                isExecutingPaymentMethodCheckout: false,\n                executePaymentMethodCheckoutMethodId: undefined,\n            });\n\n        case CustomerStrategyActionType.WidgetInteractionStarted:\n            return objectMerge(statuses, {\n                isWidgetInteracting: true,\n                widgetInteractionMethodId: action.meta.methodId,\n            });\n\n        case CustomerStrategyActionType.WidgetInteractionFinished:\n        case CustomerStrategyActionType.WidgetInteractionFailed:\n            return objectMerge(statuses, {\n                isWidgetInteracting: false,\n                widgetInteractionMethodId: undefined,\n            });\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/customer/customer-strategy-registry-v2.ts",
    "content": "import {\n    CustomerStrategy,\n    CustomerStrategyResolveId,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ResolveIdRegistry } from '../common/registry';\n\ntype CustomerStrategyRegistry = ResolveIdRegistry<CustomerStrategy, CustomerStrategyResolveId>;\n\nexport default CustomerStrategyRegistry;\n"
  },
  {
    "path": "packages/core/src/customer/customer-strategy-selector.spec.ts",
    "content": "import { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport CustomerStrategySelector, {\n    createCustomerStrategySelectorFactory,\n    CustomerStrategySelectorFactory,\n} from './customer-strategy-selector';\nimport { getCustomerStrategyState } from './internal-customers.mock';\n\ndescribe('CustomerStrategySelector', () => {\n    let createCustomerStrategySelector: CustomerStrategySelectorFactory;\n    let selector: CustomerStrategySelector;\n    let state: any;\n\n    beforeEach(() => {\n        createCustomerStrategySelector = createCustomerStrategySelectorFactory();\n        state = {\n            customerStrategy: getCustomerStrategyState(),\n        };\n    });\n\n    describe('#getSignInError()', () => {\n        it('returns error if unable to sign in', () => {\n            const signInError = getErrorResponse();\n\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                errors: { signInError },\n            });\n\n            expect(selector.getSignInError()).toEqual(signInError);\n        });\n\n        it('does not returns error if able to sign in', () => {\n            selector = createCustomerStrategySelector(state.customerStrategy);\n\n            expect(selector.getSignInError()).toBeUndefined();\n        });\n    });\n\n    describe('#getSignOutError()', () => {\n        it('returns error if unable to sign out', () => {\n            const signOutError = getErrorResponse();\n\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                errors: { signOutError },\n            });\n\n            expect(selector.getSignOutError()).toEqual(signOutError);\n        });\n\n        it('does not returns error if able to sign out', () => {\n            selector = createCustomerStrategySelector(state.customerStrategy);\n\n            expect(selector.getSignOutError()).toBeUndefined();\n        });\n    });\n\n    describe('#getExecutePaymentMethodCheckoutError()', () => {\n        it('returns error if unable to execute payment method checkout', () => {\n            const executePaymentMethodCheckoutError = getErrorResponse();\n\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                errors: { executePaymentMethodCheckoutError },\n            });\n\n            expect(selector.getExecutePaymentMethodCheckoutError()).toEqual(\n                executePaymentMethodCheckoutError,\n            );\n        });\n\n        it('does not returns error if able to execute payment method checkout', () => {\n            selector = createCustomerStrategySelector(state.customerStrategy);\n\n            expect(selector.getExecutePaymentMethodCheckoutError()).toBeUndefined();\n        });\n    });\n\n    describe('#getInitializeError()', () => {\n        it('returns error if unable to initialize any method', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                errors: {\n                    initializeErrors: {\n                        foobar: getErrorResponse(),\n                    },\n                    initializeMethodId: 'foobar',\n                },\n            });\n\n            expect(selector.getInitializeError()).toEqual(getErrorResponse());\n        });\n\n        it('returns error if unable to initialize specific method', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                errors: {\n                    initializeErrors: {\n                        foobar: getErrorResponse(),\n                    },\n                    initializeMethodId: 'foobar',\n                },\n            });\n\n            expect(selector.getInitializeError('foobar')).toEqual(getErrorResponse());\n            expect(selector.getInitializeError('bar')).toBeUndefined();\n        });\n\n        it('does not return error if able to initialize', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                errors: {},\n            });\n\n            expect(selector.getInitializeError()).toBeUndefined();\n        });\n    });\n\n    describe('#getWidgetInteractingError()', () => {\n        it('returns error if unable to initialize any method', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                errors: {\n                    widgetInteractionError: getErrorResponse(),\n                    widgetInteractionMethodId: 'foobar',\n                },\n            });\n\n            expect(selector.getWidgetInteractionError()).toEqual(getErrorResponse());\n        });\n\n        it('returns error if unable to initialize specific method', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                errors: {\n                    widgetInteractionError: getErrorResponse(),\n                    widgetInteractionMethodId: 'foobar',\n                },\n            });\n\n            expect(selector.getWidgetInteractionError('foobar')).toEqual(getErrorResponse());\n            expect(selector.getWidgetInteractionError('bar')).toBeUndefined();\n        });\n\n        it('does not return error if able to initialize', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                errors: {},\n            });\n\n            expect(selector.getWidgetInteractionError()).toBeUndefined();\n        });\n    });\n\n    describe('#isSigningIn()', () => {\n        it('returns true if signing in', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                statuses: { isSigningIn: true },\n            });\n\n            expect(selector.isSigningIn()).toBe(true);\n        });\n\n        it('returns false if not signing in', () => {\n            selector = createCustomerStrategySelector(state.customerStrategy);\n\n            expect(selector.isSigningIn()).toBe(false);\n        });\n    });\n\n    describe('#isSigningOut()', () => {\n        it('returns true if signing out', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                statuses: { isSigningOut: true },\n            });\n\n            expect(selector.isSigningOut()).toBe(true);\n        });\n\n        it('returns false if not signing out', () => {\n            selector = createCustomerStrategySelector(state.customerStrategy);\n\n            expect(selector.isSigningOut()).toBe(false);\n        });\n    });\n\n    describe('#isExecutingPaymentMethodCheckout()', () => {\n        it('returns true if shopper executing payment method checkout', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                statuses: { isExecutingPaymentMethodCheckout: true },\n            });\n\n            expect(selector.isExecutingPaymentMethodCheckout()).toBe(true);\n        });\n\n        it('returns false if shopper has not executed payment method checkout', () => {\n            selector = createCustomerStrategySelector(state.customerStrategy);\n\n            expect(selector.isExecutingPaymentMethodCheckout()).toBe(false);\n        });\n    });\n\n    describe('#isInitializing()', () => {\n        it('returns true if initializing any method', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                statuses: { initializeMethodId: 'foobar', isInitializing: true },\n            });\n\n            expect(selector.isInitializing()).toBe(true);\n        });\n\n        it('returns true if initializing specific method', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                statuses: { initializeMethodId: 'foobar', isInitializing: true },\n            });\n\n            expect(selector.isInitializing('foobar')).toBe(true);\n            expect(selector.isInitializing('bar')).toBe(false);\n        });\n\n        it('returns false if not initializing method', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                statuses: { initializeMethodId: undefined, isInitializing: false },\n            });\n\n            expect(selector.isInitializing()).toBe(false);\n        });\n    });\n\n    describe('#isInitialized()', () => {\n        it('returns true if method is initialized', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                data: { foobar: { isInitialized: true } },\n            });\n\n            expect(selector.isInitialized('foobar')).toBe(true);\n        });\n\n        it('returns false if method is not initialized', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                data: { foobar: { isInitialized: false } },\n            });\n\n            expect(selector.isInitialized('foobar')).toBe(false);\n            expect(selector.isInitialized('bar')).toBe(false);\n        });\n    });\n\n    describe('#isWidgetInteracting()', () => {\n        it('returns true if any method is interacting with a widget', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                statuses: { widgetInteractionMethodId: 'foobar', isWidgetInteracting: true },\n            });\n\n            expect(selector.isWidgetInteracting()).toBe(true);\n        });\n\n        it('returns true if a specific method is interacting with a widget', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                statuses: { widgetInteractionMethodId: 'foobar', isWidgetInteracting: true },\n            });\n\n            expect(selector.isWidgetInteracting('foobar')).toBe(true);\n            expect(selector.isWidgetInteracting('bar')).toBe(false);\n        });\n\n        it('returns false if not interacting with a widget', () => {\n            selector = createCustomerStrategySelector({\n                ...state.customerStrategy,\n                statuses: { widgetInteractionMethodId: undefined, isWidgetInteracting: false },\n            });\n\n            expect(selector.isWidgetInteracting()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/customer/customer-strategy-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport CustomerStrategyState, { DEFAULT_STATE } from './customer-strategy-state';\n\nexport default interface CustomerStrategySelector {\n    getSignInError(methodId?: string): Error | undefined;\n    getSignOutError(methodId?: string): Error | undefined;\n    getExecutePaymentMethodCheckoutError(methodId?: string): Error | undefined;\n    getInitializeError(methodId?: string): Error | undefined;\n    getWidgetInteractionError(methodId?: string): Error | undefined;\n    isSigningIn(methodId?: string): boolean;\n    isSigningOut(methodId?: string): boolean;\n    isExecutingPaymentMethodCheckout(methodId?: string): boolean;\n    isInitializing(methodId?: string): boolean;\n    isInitialized(methodId: string): boolean;\n    isWidgetInteracting(methodId?: string): boolean;\n}\n\nexport type CustomerStrategySelectorFactory = (\n    state: CustomerStrategyState,\n) => CustomerStrategySelector;\n\nexport function createCustomerStrategySelectorFactory(): CustomerStrategySelectorFactory {\n    const getSignInError = createSelector(\n        (state: CustomerStrategyState) => state.errors.signInMethodId,\n        (state: CustomerStrategyState) => state.errors.signInError,\n        (signInMethodId, signInError) => (methodId?: string) => {\n            if (methodId && signInMethodId !== methodId) {\n                return;\n            }\n\n            return signInError;\n        },\n    );\n\n    const getSignOutError = createSelector(\n        (state: CustomerStrategyState) => state.errors.signOutMethodId,\n        (state: CustomerStrategyState) => state.errors.signOutError,\n        (signOutMethodId, signOutError) => (methodId?: string) => {\n            if (methodId && signOutMethodId !== methodId) {\n                return;\n            }\n\n            return signOutError;\n        },\n    );\n\n    const getExecutePaymentMethodCheckoutError = createSelector(\n        (state: CustomerStrategyState) => state.errors.executePaymentMethodCheckoutMethodId,\n        (state: CustomerStrategyState) => state.errors.executePaymentMethodCheckoutError,\n        (executePaymentMethodCheckoutMethodId, executePaymentMethodCheckoutError) =>\n            (methodId?: string) => {\n                if (methodId && executePaymentMethodCheckoutMethodId !== methodId) {\n                    return;\n                }\n\n                return executePaymentMethodCheckoutError;\n            },\n    );\n\n    const getInitializeError = createSelector(\n        (state: CustomerStrategyState) => state.errors.initializeMethodId,\n        (state: CustomerStrategyState) => state.errors.initializeErrors,\n        (initializeMethodId, initializeErrors) => (methodId?: string) => {\n            if (!initializeMethodId || !initializeErrors) {\n                return;\n            }\n\n            if (methodId) {\n                return initializeErrors[methodId];\n            }\n\n            return initializeErrors[initializeMethodId];\n        },\n    );\n\n    const getWidgetInteractionError = createSelector(\n        (state: CustomerStrategyState) => state.errors.widgetInteractionMethodId,\n        (state: CustomerStrategyState) => state.errors.widgetInteractionError,\n        (widgetInteractionMethodId, widgetInteractionError) => (methodId?: string) => {\n            if (methodId && widgetInteractionMethodId !== methodId) {\n                return;\n            }\n\n            return widgetInteractionError;\n        },\n    );\n\n    const isSigningIn = createSelector(\n        (state: CustomerStrategyState) => state.statuses.signInMethodId,\n        (state: CustomerStrategyState) => state.statuses.isSigningIn,\n        (signInMethodId, isSigningIn) => (methodId?: string) => {\n            if (methodId && signInMethodId !== methodId) {\n                return false;\n            }\n\n            return !!isSigningIn;\n        },\n    );\n\n    const isSigningOut = createSelector(\n        (state: CustomerStrategyState) => state.statuses.signOutMethodId,\n        (state: CustomerStrategyState) => state.statuses.isSigningOut,\n        (signOutMethodId, isSigningOut) => (methodId?: string) => {\n            if (methodId && signOutMethodId !== methodId) {\n                return false;\n            }\n\n            return !!isSigningOut;\n        },\n    );\n\n    const isExecutingPaymentMethodCheckout = createSelector(\n        (state: CustomerStrategyState) => state.statuses.executePaymentMethodCheckoutMethodId,\n        (state: CustomerStrategyState) => state.statuses.isExecutingPaymentMethodCheckout,\n        (executePaymentMethodCheckoutMethodId, isExecutingPaymentMethodCheckout) =>\n            (methodId?: string) => {\n                if (methodId && executePaymentMethodCheckoutMethodId !== methodId) {\n                    return false;\n                }\n\n                return !!isExecutingPaymentMethodCheckout;\n            },\n    );\n\n    const isInitializing = createSelector(\n        (state: CustomerStrategyState) => state.statuses.initializeMethodId,\n        (state: CustomerStrategyState) => state.statuses.isInitializing,\n        (initializeMethodId, isInitializing) => (methodId?: string) => {\n            if (methodId && initializeMethodId !== methodId) {\n                return false;\n            }\n\n            return !!isInitializing;\n        },\n    );\n\n    const isInitialized = createSelector(\n        (state: CustomerStrategyState) => state.data,\n        (data) => (methodId: string) => {\n            return !!(data[methodId] && data[methodId].isInitialized);\n        },\n    );\n\n    const isWidgetInteracting = createSelector(\n        (state: CustomerStrategyState) => state.statuses.widgetInteractionMethodId,\n        (state: CustomerStrategyState) => state.statuses.isWidgetInteracting,\n        (widgetInteractionMethodId, isWidgetInteracting) => (methodId?: string) => {\n            if (methodId && widgetInteractionMethodId !== methodId) {\n                return false;\n            }\n\n            return !!isWidgetInteracting;\n        },\n    );\n\n    return memoizeOne((state: CustomerStrategyState = DEFAULT_STATE): CustomerStrategySelector => {\n        return {\n            getSignInError: getSignInError(state),\n            getSignOutError: getSignOutError(state),\n            getExecutePaymentMethodCheckoutError: getExecutePaymentMethodCheckoutError(state),\n            getInitializeError: getInitializeError(state),\n            getWidgetInteractionError: getWidgetInteractionError(state),\n            isSigningIn: isSigningIn(state),\n            isSigningOut: isSigningOut(state),\n            isExecutingPaymentMethodCheckout: isExecutingPaymentMethodCheckout(state),\n            isInitializing: isInitializing(state),\n            isInitialized: isInitialized(state),\n            isWidgetInteracting: isWidgetInteracting(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/customer/customer-strategy-state.ts",
    "content": "export default interface CustomerStrategyState {\n    data: CustomerStrategyDataState;\n    errors: CustomerStrategyErrorsState;\n    statuses: CustomerStrategyStatusesState;\n}\n\nexport interface CustomerStrategyDataState {\n    [key: string]: {\n        isInitialized: boolean;\n    };\n}\n\nexport interface CustomerStrategyErrorsState {\n    deinitializeError?: Error;\n    deinitializeMethodId?: string;\n    initializeErrors?: { [key: string]: Error };\n    initializeMethodId?: string;\n    signInError?: Error;\n    signInMethodId?: string;\n    signOutError?: Error;\n    signOutMethodId?: string;\n    executePaymentMethodCheckoutError?: Error;\n    executePaymentMethodCheckoutMethodId?: string;\n    widgetInteractionError?: Error;\n    widgetInteractionMethodId?: string;\n}\n\nexport interface CustomerStrategyStatusesState {\n    deinitializeMethodId?: string;\n    initializeMethodId?: string;\n    isDeinitializing?: boolean;\n    isInitializing?: boolean;\n    isSigningIn?: boolean;\n    isSigningOut?: boolean;\n    signInMethodId?: string;\n    signOutMethodId?: string;\n    isExecutingPaymentMethodCheckout?: boolean;\n    executePaymentMethodCheckoutMethodId?: string;\n    isWidgetInteracting?: boolean;\n    widgetInteractionMethodId?: string;\n}\n\nexport const DEFAULT_STATE: CustomerStrategyState = {\n    data: {},\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/customer/customer.ts",
    "content": "import { Address } from '../address';\n\nexport default interface Customer {\n    id: number;\n    addresses: CustomerAddress[];\n    storeCredit: number;\n    /**\n     * The email address of the signed in customer.\n     */\n    email: string;\n    firstName: string;\n    fullName: string;\n    isGuest: boolean;\n    lastName: string;\n    /**\n     * Indicates whether the customer should be prompted to sign-in.\n     *\n     * Note: You need to enable \"Prompt existing accounts to sign in\" in your Checkout Settings.\n     */\n    shouldEncourageSignIn: boolean;\n    customerGroup?: CustomerGroup;\n}\n\nexport interface CustomerAddress extends Address {\n    id: number;\n    type: string;\n}\n\nexport interface CustomerGroup {\n    id: number;\n    name: string;\n}\n"
  },
  {
    "path": "packages/core/src/customer/customers.mock.ts",
    "content": "import { getShippingAddress } from '../shipping/shipping-addresses.mock';\n\nimport Customer from './customer';\nimport CustomerState from './customer-state';\n\nexport function getGuestCustomer(): Customer {\n    return {\n        id: 0,\n        addresses: [],\n        email: '',\n        firstName: '',\n        fullName: '',\n        isGuest: true,\n        lastName: '',\n        storeCredit: 0,\n        shouldEncourageSignIn: false,\n        customerGroup: {\n            id: 0,\n            name: '',\n        },\n    };\n}\n\nexport function getCustomer(): Customer {\n    return {\n        id: 4,\n        email: 'test@bigcommerce.com',\n        firstName: 'Foo',\n        fullName: 'Foo Bar',\n        lastName: 'Bar',\n        storeCredit: 0,\n        shouldEncourageSignIn: false,\n        addresses: [\n            {\n                ...getShippingAddress(),\n                id: 5,\n                type: 'residential',\n            },\n        ],\n        isGuest: false,\n        customerGroup: {\n            id: 1,\n            name: 'vip',\n        },\n    };\n}\n\nexport function getCustomerState(): CustomerState {\n    return {\n        data: getCustomer(),\n        errors: {},\n        statuses: {},\n    };\n}\n"
  },
  {
    "path": "packages/core/src/customer/guest-credentials.ts",
    "content": "import { Subscriptions } from '../subscription';\n\nexport type GuestCredentials = Partial<Subscriptions> & {\n    id?: string;\n    email: string;\n};\n\nexport default GuestCredentials;\n"
  },
  {
    "path": "packages/core/src/customer/index.ts",
    "content": "export {\n    BaseCustomerInitializeOptions,\n    CustomerInitializeOptions,\n    CustomerRequestOptions,\n    ExecutePaymentMethodCheckoutOptions,\n} from './customer-request-options';\n\nexport { default as InternalCustomer } from './internal-customer';\nexport { default as Customer, CustomerAddress } from './customer';\n\nexport { default as createCustomerStrategyRegistry } from './create-customer-strategy-registry';\nexport { default as createCustomerStrategyRegistryV2 } from './create-customer-strategy-registry-v2';\nexport { CustomerAction, CustomerActionType } from './customer-actions';\nexport { default as customerReducer } from './customer-reducer';\nexport {\n    default as CustomerAccountRequestBody,\n    CustomerAddressRequestBody,\n} from './customer-account';\nexport { default as CustomerActionCreator } from './customer-action-creator';\nexport { default as CustomerCredentials } from './customer-credentials';\nexport { default as CustomerRequestSender } from './customer-request-sender';\nexport {\n    default as CustomerSelector,\n    CustomerSelectorFactory,\n    createCustomerSelectorFactory,\n} from './customer-selector';\nexport { default as CustomerState } from './customer-state';\nexport { default as CustomerStrategyActionCreator } from './customer-strategy-action-creator';\nexport {\n    default as CustomerStrategySelector,\n    CustomerStrategySelectorFactory,\n    createCustomerStrategySelectorFactory,\n} from './customer-strategy-selector';\nexport { default as CustomerStrategyState } from './customer-strategy-state';\nexport { default as customerStrategyReducer } from './customer-strategy-reducer';\nexport { default as GuestCredentials } from './guest-credentials';\n\nexport { default as mapToInternalCustomer } from './map-to-internal-customer';\n"
  },
  {
    "path": "packages/core/src/customer/internal-customer-responses.ts",
    "content": "import { InternalResponseBody } from '../common/http-request';\n\nimport InternalCustomer from './internal-customer';\n\nexport type InternalCustomerResponseBody = InternalResponseBody<InternalCustomerResponseData>;\n\nexport interface InternalCustomerResponseData {\n    customer: InternalCustomer;\n    persistentCartRetrievalInformation?: {\n        id: string;\n    };\n}\n"
  },
  {
    "path": "packages/core/src/customer/internal-customer.ts",
    "content": "import { InternalAddress } from '../address';\n\nexport default interface InternalCustomer {\n    addresses: Array<InternalAddress<number>>;\n    customerId: number;\n    isGuest: boolean;\n    storeCredit: number;\n    email: string;\n    firstName: string;\n    lastName: string;\n    name: string;\n    remote?: {\n        provider: string;\n        billing?: string;\n        billingMessage?: string;\n        customer?: string;\n        payment?: string;\n        shipping?: string;\n        customerMessage?: string;\n        useStoreCredit?: boolean;\n    };\n    customerGroupId?: number;\n    customerGroupName?: string;\n    phoneNumber?: string;\n}\n"
  },
  {
    "path": "packages/core/src/customer/internal-customers.mock.ts",
    "content": "import { getShippingAddress } from '../shipping/internal-shipping-addresses.mock';\n\nimport CustomerStrategyState from './customer-strategy-state';\nimport InternalCustomer from './internal-customer';\nimport { InternalCustomerResponseBody } from './internal-customer-responses';\n\nexport function getGuestCustomer(): InternalCustomer {\n    return {\n        addresses: [],\n        customerId: 0,\n        customerGroupName: '',\n        email: 'test@bigcommerce.com',\n        firstName: 'Test',\n        lastName: 'Tester',\n        isGuest: true,\n        name: 'Test Tester',\n        storeCredit: 0,\n    };\n}\n\nexport function getCustomer(): InternalCustomer {\n    return {\n        ...getGuestCustomer(),\n        addresses: [\n            {\n                ...getShippingAddress(),\n                id: 5,\n            },\n        ],\n        customerId: 4,\n        customerGroupName: 'vip',\n        isGuest: false,\n        email: 'test@bigcommerce.com',\n        firstName: 'Foo',\n        lastName: 'Bar',\n        name: 'Foo Bar',\n    };\n}\n\nexport function getRemoteCustomer(): InternalCustomer {\n    return {\n        ...getGuestCustomer(),\n        remote: {\n            billing: 'fixed',\n            billingMessage: 'Same as the Billing address set by you in your Amazon account.',\n            customer: 'fixed',\n            payment: 'widget',\n            provider: 'amazon',\n            shipping: 'widget',\n        },\n    };\n}\n\nexport function getCustomerResponseBody(): InternalCustomerResponseBody {\n    return {\n        data: {\n            customer: getGuestCustomer(),\n        },\n        meta: {},\n    };\n}\n\nexport function getCustomerStrategyState(): CustomerStrategyState {\n    return {\n        data: {},\n        errors: {},\n        statuses: {},\n    };\n}\n"
  },
  {
    "path": "packages/core/src/customer/map-to-internal-customer.spec.ts",
    "content": "import { getBillingAddress } from '../billing/billing-addresses.mock';\nimport { getCheckout } from '../checkout/checkouts.mock';\nimport {\n    getCustomer as getInternalCustomer,\n    getGuestCustomer as getInternalGuestCustomer,\n} from '../customer/internal-customers.mock';\n\nimport { getGuestCustomer } from './customers.mock';\nimport mapToInternalCustomer from './map-to-internal-customer';\n\ndescribe('mapToInternalCustomer', () => {\n    it('maps to internal guest customer', () => {\n        expect(mapToInternalCustomer(getGuestCustomer(), getBillingAddress())).toEqual(\n            getInternalGuestCustomer(),\n        );\n    });\n\n    it('maps to internal customer', () => {\n        const checkout = getCheckout();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        expect(mapToInternalCustomer(checkout.customer, checkout.billingAddress!)).toEqual(\n            getInternalCustomer(),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/customer/map-to-internal-customer.ts",
    "content": "import { mapToInternalAddress } from '../address';\nimport { OrderBillingAddress } from '../order-billing-address/order-billing-address-state';\n\nimport InternalCustomer from './internal-customer';\n\nimport { Customer } from '.';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalCustomer(\n    customer: Customer,\n    billingAddress: OrderBillingAddress,\n): InternalCustomer {\n    const firstName = customer.firstName || billingAddress.firstName || '';\n    const lastName = customer.lastName || billingAddress.lastName || '';\n\n    return {\n        addresses: (customer.addresses || []).map((address) => mapToInternalAddress(address)),\n        customerId: customer.id,\n        isGuest: customer.isGuest,\n        storeCredit: customer.storeCredit,\n        email: customer.email || billingAddress.email || '',\n        firstName,\n        lastName,\n        name: customer.fullName || [firstName, lastName].join(' '),\n        customerGroupName: customer.customerGroup && customer.customerGroup.name,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/customer/strategies/customer-strategy.ts",
    "content": "import { InternalCheckoutSelectors } from '../../checkout';\nimport CustomerCredentials from '../customer-credentials';\nimport {\n    CustomerInitializeOptions,\n    CustomerRequestOptions,\n    ExecutePaymentMethodCheckoutOptions,\n} from '../customer-request-options';\n\nexport default interface CustomerStrategy {\n    signIn(\n        credentials: CustomerCredentials,\n        options?: CustomerRequestOptions,\n    ): Promise<InternalCheckoutSelectors>;\n\n    signOut(options?: CustomerRequestOptions): Promise<InternalCheckoutSelectors>;\n\n    executePaymentMethodCheckout(\n        options?: ExecutePaymentMethodCheckoutOptions,\n    ): Promise<InternalCheckoutSelectors>;\n\n    initialize(options?: CustomerInitializeOptions): Promise<InternalCheckoutSelectors>;\n\n    deinitialize(options?: CustomerRequestOptions): Promise<InternalCheckoutSelectors>;\n}\n"
  },
  {
    "path": "packages/core/src/customer/strategies/default/default-customer-strategy.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { ScriptLoader } from '@bigcommerce/script-loader';\nimport { of } from 'rxjs';\n\nimport {\n    CheckoutActionCreator,\n    CheckoutRequestSender,\n    CheckoutStore,\n    createCheckoutStore,\n} from '../../../checkout';\nimport { MutationObserverFactory } from '../../../common/dom';\nimport { ConfigActionCreator, ConfigRequestSender } from '../../../config';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../../../form';\nimport { getQuote } from '../../../quote/internal-quotes.mock';\nimport {\n    GoogleRecaptcha,\n    GoogleRecaptchaScriptLoader,\n    GoogleRecaptchaWindow,\n    SpamProtectionActionCreator,\n    SpamProtectionRequestSender,\n} from '../../../spam-protection';\nimport CustomerActionCreator from '../../customer-action-creator';\nimport { CustomerActionType } from '../../customer-actions';\nimport CustomerRequestSender from '../../customer-request-sender';\n\nimport DefaultCustomerStrategy from './default-customer-strategy';\n\ndescribe('DefaultCustomerStrategy', () => {\n    let customerActionCreator: CustomerActionCreator;\n    let store: CheckoutStore;\n\n    beforeEach(() => {\n        store = createCheckoutStore();\n\n        const requestSender = createRequestSender();\n        const mockWindow = { grecaptcha: {} } as GoogleRecaptchaWindow;\n        const scriptLoader = new ScriptLoader();\n        const googleRecaptchaScriptLoader = new GoogleRecaptchaScriptLoader(\n            scriptLoader,\n            mockWindow,\n        );\n        const mutationObserverFactory = new MutationObserverFactory();\n        const googleRecaptcha = new GoogleRecaptcha(\n            googleRecaptchaScriptLoader,\n            mutationObserverFactory,\n        );\n\n        customerActionCreator = new CustomerActionCreator(\n            new CustomerRequestSender(requestSender),\n            new CheckoutActionCreator(\n                new CheckoutRequestSender(requestSender),\n                new ConfigActionCreator(new ConfigRequestSender(requestSender)),\n                new FormFieldsActionCreator(new FormFieldsRequestSender(requestSender)),\n            ),\n            new SpamProtectionActionCreator(\n                googleRecaptcha,\n                new SpamProtectionRequestSender(requestSender),\n            ),\n        );\n    });\n\n    it('dispatches action to sign in customer', async () => {\n        const strategy = new DefaultCustomerStrategy(store, customerActionCreator);\n        const credentials = { email: 'foo@bar.com', password: 'foobar' };\n        const options = {};\n        const action = of(createAction(CustomerActionType.SignInCustomerRequested, getQuote()));\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(customerActionCreator, 'signInCustomer').mockReturnValue(action);\n\n        jest.spyOn(store, 'dispatch');\n\n        const output = await strategy.signIn(credentials, options);\n\n        expect(customerActionCreator.signInCustomer).toHaveBeenCalledWith(credentials, options);\n        expect(store.dispatch).toHaveBeenCalledWith(action);\n        expect(output).toEqual(store.getState());\n    });\n\n    it('dispatches action to sign out customer', async () => {\n        const strategy = new DefaultCustomerStrategy(store, customerActionCreator);\n        const options = {};\n        const action = of(createAction(CustomerActionType.SignOutCustomerRequested, getQuote()));\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(customerActionCreator, 'signOutCustomer').mockReturnValue(action);\n\n        jest.spyOn(store, 'dispatch');\n\n        const output = await strategy.signOut(options);\n\n        expect(customerActionCreator.signOutCustomer).toHaveBeenCalledWith(options);\n        expect(store.dispatch).toHaveBeenCalledWith(action);\n        expect(output).toEqual(store.getState());\n    });\n\n    it('runs continue callback automatically on execute payment method checkout', async () => {\n        const strategy = new DefaultCustomerStrategy(store, customerActionCreator);\n        const mockCallback = jest.fn();\n\n        await strategy.executePaymentMethodCheckout({ continueWithCheckoutCallback: mockCallback });\n\n        expect(mockCallback.mock.calls).toHaveLength(1);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/customer/strategies/default/default-customer-strategy.ts",
    "content": "import { CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport CustomerActionCreator from '../../customer-action-creator';\nimport CustomerCredentials from '../../customer-credentials';\nimport {\n    CustomerRequestOptions,\n    ExecutePaymentMethodCheckoutOptions,\n} from '../../customer-request-options';\nimport CustomerStrategy from '../customer-strategy';\n\nexport default class DefaultCustomerStrategy implements CustomerStrategy {\n    constructor(\n        private _store: CheckoutStore,\n        private _customerActionCreator: CustomerActionCreator,\n    ) {}\n\n    signIn(\n        credentials: CustomerCredentials,\n        options?: CustomerRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(\n            this._customerActionCreator.signInCustomer(credentials, options),\n        );\n    }\n\n    signOut(options?: CustomerRequestOptions): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(this._customerActionCreator.signOutCustomer(options));\n    }\n\n    executePaymentMethodCheckout(\n        options?: ExecutePaymentMethodCheckoutOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        options?.continueWithCheckoutCallback?.();\n\n        return Promise.resolve(this._store.getState());\n    }\n\n    initialize(): Promise<InternalCheckoutSelectors> {\n        return Promise.resolve(this._store.getState());\n    }\n\n    deinitialize(): Promise<InternalCheckoutSelectors> {\n        return Promise.resolve(this._store.getState());\n    }\n}\n"
  },
  {
    "path": "packages/core/src/customer/strategies/default/index.ts",
    "content": "export { default as DefaultCustomerStrategy } from './default-customer-strategy';\n"
  },
  {
    "path": "packages/core/src/customer/strategies/index.ts",
    "content": "export { default as CustomerStrategy } from './customer-strategy';\n"
  },
  {
    "path": "packages/core/src/discount/discount-notification.ts",
    "content": "export default interface DiscountNotification {\n    message: string;\n    messageHtml: string;\n    discountType: string | null;\n    placeholders: string[];\n}\n"
  },
  {
    "path": "packages/core/src/discount/discount.ts",
    "content": "export default interface Discount {\n    id: string;\n    discountedAmount: number;\n}\n"
  },
  {
    "path": "packages/core/src/discount/discounts.mock.ts",
    "content": "import Discount from './discount';\n\nexport function getDiscount(): Discount {\n    return {\n        id: '12e11c8f-7dce-4da3-9413-b649533f8bad',\n        discountedAmount: 10,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/discount/index.ts",
    "content": "export { default as Discount } from './discount';\nexport { default as DiscountNotification } from './discount-notification';\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/embed-checkout.spec.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { BrowserStorage } from '../common/storage';\n\nimport embedCheckout from './embed-checkout';\nimport EmbeddedCheckout from './embedded-checkout';\nimport EmbeddedCheckoutOptions from './embedded-checkout-options';\nimport ResizableIframeCreator from './resizable-iframe-creator';\n\njest.mock('./embedded-checkout', () => {\n    return jest.fn(() => {\n        const instance: Partial<EmbeddedCheckout> = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            attach: jest.fn(() => Promise.resolve(instance)),\n        };\n\n        return instance;\n    });\n});\n\ndescribe('embedCheckout()', () => {\n    let options: EmbeddedCheckoutOptions;\n\n    beforeEach(() => {\n        options = {\n            url: 'https://mybigcommerce.com/checkout',\n            containerId: 'checkout',\n        };\n    });\n\n    it('attaches checkout iframe', async () => {\n        const checkout = await embedCheckout(options);\n\n        expect(checkout.attach).toHaveBeenCalled();\n    });\n\n    it('constructs instance with required dependencies', async () => {\n        await embedCheckout(options);\n\n        expect(EmbeddedCheckout).toHaveBeenCalledWith(\n            expect.any(ResizableIframeCreator),\n            expect.any(IframeEventListener),\n            expect.any(IframeEventPoster),\n            expect.any(LoadingIndicator),\n            expect.any(RequestSender),\n            expect.any(BrowserStorage),\n            expect.any(Location),\n            options,\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/embed-checkout.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { BrowserStorage } from '../common/storage';\nimport { parseUrl } from '../common/url';\n\nimport EmbeddedCheckout from './embedded-checkout';\nimport { EmbeddedCheckoutEventMap } from './embedded-checkout-events';\nimport EmbeddedCheckoutOptions from './embedded-checkout-options';\nimport { EmbeddedContentEvent } from './iframe-content';\nimport ResizableIframeCreator from './resizable-iframe-creator';\n\nconst STORAGE_PREFIX = 'BigCommerce.EmbeddedCheckout';\n\n/**\n * Embed the checkout form in an iframe.\n *\n * @remarks\n * Once the iframe is embedded, it will automatically resize according to the\n * size of the checkout form. It will also notify the parent window when certain\n * events have occurred. i.e.: when the form is loaded and ready to be used.\n *\n * ```js\n * embedCheckout({\n *     url: 'https://checkout/url',\n *     containerId: 'container-id',\n * });\n * ```\n *\n * @param options - Options for embedding the checkout form.\n * @returns A promise that resolves to an instance of `EmbeddedCheckout`.\n */\nexport default function embedCheckout(options: EmbeddedCheckoutOptions): Promise<EmbeddedCheckout> {\n    const origin = parseUrl(options.url).origin;\n    const embeddedCheckout = new EmbeddedCheckout(\n        new ResizableIframeCreator(),\n        new IframeEventListener<EmbeddedCheckoutEventMap>(origin),\n        new IframeEventPoster<EmbeddedContentEvent>(origin),\n        new LoadingIndicator({ styles: options.styles && options.styles.loadingIndicator }),\n        createRequestSender(),\n        new BrowserStorage(STORAGE_PREFIX),\n        window.location,\n        options,\n    );\n\n    return embeddedCheckout.attach();\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/embedded-checkout-error.ts",
    "content": "export default interface EmbeddedCheckoutError {\n    message: string;\n    type?: string;\n    subtype?: string;\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/embedded-checkout-events.ts",
    "content": "import EmbeddedCheckoutError from './embedded-checkout-error';\nimport { EmbeddedContentOptions } from './iframe-content';\n\nexport enum EmbeddedCheckoutEventType {\n    CheckoutComplete = 'CHECKOUT_COMPLETE',\n    CheckoutError = 'CHECKOUT_ERROR',\n    CheckoutLoaded = 'CHECKOUT_LOADED',\n    FrameError = 'FRAME_ERROR',\n    FrameLoaded = 'FRAME_LOADED',\n    SignedOut = 'SIGNED_OUT',\n}\n\nexport interface EmbeddedCheckoutEventMap {\n    [EmbeddedCheckoutEventType.CheckoutComplete]: EmbeddedCheckoutCompleteEvent;\n    [EmbeddedCheckoutEventType.CheckoutError]: EmbeddedCheckoutErrorEvent;\n    [EmbeddedCheckoutEventType.CheckoutLoaded]: EmbeddedCheckoutLoadedEvent;\n    [EmbeddedCheckoutEventType.FrameError]: EmbeddedCheckoutFrameErrorEvent;\n    [EmbeddedCheckoutEventType.FrameLoaded]: EmbeddedCheckoutFrameLoadedEvent;\n    [EmbeddedCheckoutEventType.SignedOut]: EmbeddedCheckoutSignedOutEvent;\n}\n\nexport type EmbeddedCheckoutEvent =\n    | EmbeddedCheckoutCompleteEvent\n    | EmbeddedCheckoutErrorEvent\n    | EmbeddedCheckoutFrameErrorEvent\n    | EmbeddedCheckoutFrameLoadedEvent\n    | EmbeddedCheckoutLoadedEvent\n    | EmbeddedCheckoutSignedOutEvent;\n\nexport interface EmbeddedCheckoutCompleteEvent {\n    type: EmbeddedCheckoutEventType.CheckoutComplete;\n}\n\nexport interface EmbeddedCheckoutErrorEvent {\n    type: EmbeddedCheckoutEventType.CheckoutError;\n    payload: EmbeddedCheckoutError;\n}\n\nexport interface EmbeddedCheckoutLoadedEvent {\n    type: EmbeddedCheckoutEventType.CheckoutLoaded;\n}\n\nexport interface EmbeddedCheckoutFrameErrorEvent {\n    type: EmbeddedCheckoutEventType.FrameError;\n    payload: EmbeddedCheckoutError;\n}\n\nexport interface EmbeddedCheckoutFrameLoadedEvent {\n    type: EmbeddedCheckoutEventType.FrameLoaded;\n    payload?: EmbeddedContentOptions;\n}\n\nexport interface EmbeddedCheckoutSignedOutEvent {\n    type: EmbeddedCheckoutEventType.SignedOut;\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/embedded-checkout-options.ts",
    "content": "import {\n    EmbeddedCheckoutCompleteEvent,\n    EmbeddedCheckoutErrorEvent,\n    EmbeddedCheckoutFrameErrorEvent,\n    EmbeddedCheckoutFrameLoadedEvent,\n    EmbeddedCheckoutLoadedEvent,\n    EmbeddedCheckoutSignedOutEvent,\n} from './embedded-checkout-events';\nimport EmbeddedCheckoutStyles from './embedded-checkout-styles';\n\nexport default interface EmbeddedCheckoutOptions {\n    containerId: string;\n    url: string;\n    styles?: EmbeddedCheckoutStyles;\n    onComplete?(event: EmbeddedCheckoutCompleteEvent): void;\n    onError?(event: EmbeddedCheckoutErrorEvent): void;\n    onFrameError?(event: EmbeddedCheckoutFrameErrorEvent): void;\n    onFrameLoad?(event: EmbeddedCheckoutFrameLoadedEvent): void;\n    onLoad?(event: EmbeddedCheckoutLoadedEvent): void;\n    onSignOut?(event: EmbeddedCheckoutSignedOutEvent): void;\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/embedded-checkout-styles.ts",
    "content": "import { LoadingIndicatorStyles } from '@bigcommerce/checkout-sdk/ui';\n\nexport default interface EmbeddedCheckoutStyles {\n    // Base\n    body?: BodyStyles;\n    text?: InlineElementStyles;\n    heading?: BlockElementStyles;\n    secondaryHeading?: BlockElementStyles;\n    link?: LinkStyles;\n    secondaryText?: InlineElementStyles;\n\n    // Form\n    button?: ButtonStyles;\n    secondaryButton?: ButtonStyles;\n    input?: TextInputStyles;\n    select?: InputStyles;\n    radio?: CheckableInputStyles;\n    checkbox?: CheckableInputStyles;\n    label?: LabelStyles;\n\n    // Components\n    checklist?: ChecklistStyles;\n    discountBanner?: BlockElementStyles;\n    loadingBanner?: BlockElementStyles;\n    loadingIndicator?: LoadingIndicatorStyles;\n    orderSummary?: BlockElementStyles;\n    step?: StepStyles;\n}\n\nexport interface InlineElementStyles {\n    color?: string;\n    fontFamily?: string;\n    fontWeight?: string;\n    letterSpacing?: string;\n    lineHeight?: string;\n}\n\nexport interface BlockElementStyles extends InlineElementStyles {\n    backgroundColor?: string;\n    boxShadow?: string;\n    borderColor?: string;\n    borderWidth?: string;\n}\n\nexport interface BodyStyles {\n    backgroundColor?: string;\n}\n\nexport interface LinkStyles extends InlineElementStyles {\n    active?: InlineElementStyles;\n    focus?: InlineElementStyles;\n    hover?: InlineElementStyles;\n}\n\nexport interface ButtonStyles extends BlockElementStyles {\n    active?: BlockElementStyles;\n    focus?: BlockElementStyles;\n    hover?: BlockElementStyles;\n    disabled?: BlockElementStyles;\n}\n\nexport interface InputStyles extends BlockElementStyles {\n    active?: BlockElementStyles;\n    error?: InputStyles;\n    focus?: BlockElementStyles;\n    hover?: BlockElementStyles;\n    disabled?: BlockElementStyles;\n}\n\nexport interface TextInputStyles extends InputStyles {\n    placeholder?: InlineElementStyles;\n}\n\nexport interface CheckableInputStyles extends InputStyles {\n    error?: InputStyles;\n    checked?: BlockElementStyles;\n}\n\nexport interface LabelStyles extends InlineElementStyles {\n    error?: InlineElementStyles;\n}\n\nexport interface ChecklistStyles extends BlockElementStyles {\n    hover?: BlockElementStyles;\n    checked?: BlockElementStyles;\n}\n\nexport interface StepStyles extends BlockElementStyles {\n    icon?: BlockElementStyles;\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/embedded-checkout.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\n\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\nimport {\n    IFrameComponent,\n    IframeEventListener,\n    IframeEventPoster,\n    iframeResizer,\n} from '../common/iframe';\nimport { BrowserStorage } from '../common/storage';\n\nimport EmbeddedCheckout, {\n    ALLOW_COOKIE_ATTEMPT_INTERVAL,\n    IS_COOKIE_ALLOWED_KEY,\n    LAST_ALLOW_COOKIE_ATTEMPT_KEY,\n} from './embedded-checkout';\nimport { EmbeddedCheckoutEventMap, EmbeddedCheckoutEventType } from './embedded-checkout-events';\nimport EmbeddedCheckoutOptions from './embedded-checkout-options';\nimport EmbeddedCheckoutStyles from './embedded-checkout-styles';\nimport { InvalidLoginTokenError, NotEmbeddableError, NotEmbeddableErrorType } from './errors';\nimport { EmbeddedContentEvent, EmbeddedContentEventType } from './iframe-content';\nimport ResizableIframeCreator from './resizable-iframe-creator';\n\ndescribe('EmbeddedCheckout', () => {\n    let embeddedCheckout: EmbeddedCheckout;\n    let iframe: IFrameComponent;\n    let iframeCreator: ResizableIframeCreator;\n    let loadingIndicator: LoadingIndicator;\n    let location: Location;\n    let messageListener: IframeEventListener<EmbeddedCheckoutEventMap>;\n    let messagePoster: IframeEventPoster<EmbeddedContentEvent>;\n    let requestSender: RequestSender;\n    let options: EmbeddedCheckoutOptions;\n    let storage: BrowserStorage;\n    let styles: EmbeddedCheckoutStyles;\n\n    beforeEach(() => {\n        options = {\n            url: 'https://mybigcommerce.com/checkout',\n            containerId: 'checkout',\n        };\n\n        styles = {\n            body: {\n                backgroundColor: '#000',\n            },\n        };\n\n        Object.defineProperty(window, 'location', {\n            value: {\n                replace: jest.fn(),\n            },\n        });\n\n        window.addEventListener = jest.fn();\n        window.removeEventListener = jest.fn();\n\n        iframe = iframeResizer({}, document.body.appendChild(document.createElement('iframe')))[0];\n        iframeCreator = new ResizableIframeCreator();\n        messageListener = new IframeEventListener('https://mybigcommerce.com');\n        messagePoster = new IframeEventPoster('https://mybigcommerce.com');\n        loadingIndicator = new LoadingIndicator();\n        location = window.location;\n        requestSender = createRequestSender();\n        storage = new BrowserStorage('EmbeddedCheckout');\n\n        jest.spyOn(iframeCreator, 'createFrame').mockReturnValue(Promise.resolve(iframe));\n\n        jest.spyOn(loadingIndicator, 'show').mockImplementation(() => {});\n\n        jest.spyOn(loadingIndicator, 'hide').mockImplementation(() => {});\n\n        jest.spyOn(storage, 'getItem').mockImplementation((key) =>\n            key === IS_COOKIE_ALLOWED_KEY ? true : null,\n        );\n\n        embeddedCheckout = new EmbeddedCheckout(\n            iframeCreator,\n            messageListener,\n            messagePoster,\n            loadingIndicator,\n            requestSender,\n            storage,\n            location,\n            options,\n        );\n    });\n\n    afterEach(() => {\n        (location.replace as jest.Mock).mockRestore();\n        storage.removeItem(IS_COOKIE_ALLOWED_KEY);\n        storage.removeItem(LAST_ALLOW_COOKIE_ATTEMPT_KEY);\n    });\n\n    it('creates iframe element', async () => {\n        await embeddedCheckout.attach();\n\n        expect(iframeCreator.createFrame).toHaveBeenCalledWith(options.url, options.containerId);\n    });\n\n    it('listens to checkout events', async () => {\n        jest.spyOn(messageListener, 'listen');\n\n        await embeddedCheckout.attach();\n\n        expect(messageListener.listen).toHaveBeenCalled();\n    });\n\n    it('triggers error callback when there is error', async () => {\n        const error = new NotEmbeddableError();\n\n        jest.spyOn(iframeCreator, 'createFrame').mockReturnValue(Promise.reject(error));\n\n        jest.spyOn(messageListener, 'trigger');\n\n        try {\n            await embeddedCheckout.attach();\n        } catch (thrown) {\n            expect(messageListener.trigger).toHaveBeenCalledWith({\n                type: EmbeddedCheckoutEventType.FrameError,\n                payload: error,\n            });\n\n            expect(thrown).toEqual(error);\n        }\n    });\n\n    it('removes iframe from DOM tree', async () => {\n        await embeddedCheckout.attach();\n\n        jest.spyOn(iframe.iFrameResizer, 'close');\n\n        embeddedCheckout.detach();\n\n        expect(iframe.iFrameResizer.close).toHaveBeenCalled();\n    });\n\n    it('stops listening to checkout events', async () => {\n        jest.spyOn(messageListener, 'stopListen');\n\n        await embeddedCheckout.attach();\n\n        embeddedCheckout.detach();\n\n        expect(messageListener.stopListen).toHaveBeenCalled();\n    });\n\n    it('only creates iframe once until it is detached', async () => {\n        await embeddedCheckout.attach();\n        await embeddedCheckout.attach();\n\n        expect(iframeCreator.createFrame).toHaveBeenCalledTimes(1);\n\n        embeddedCheckout.detach();\n\n        await embeddedCheckout.attach();\n\n        expect(iframeCreator.createFrame).toHaveBeenCalledTimes(2);\n    });\n\n    it('can retry if unable to attach for first time', async () => {\n        jest.spyOn(iframeCreator, 'createFrame').mockReturnValueOnce(\n            Promise.reject(new NotEmbeddableError()),\n        );\n\n        await embeddedCheckout.attach().catch(() => {});\n        await embeddedCheckout.attach().catch(() => {});\n\n        expect(iframeCreator.createFrame).toHaveBeenCalledTimes(2);\n    });\n\n    it('listens to checkout events when callbacks are passed', () => {\n        jest.spyOn(messageListener, 'addListener');\n\n        options = {\n            ...options,\n            onComplete: jest.fn(),\n            onError: jest.fn(),\n            onFrameLoad: jest.fn(),\n            onLoad: jest.fn(),\n            onSignOut: jest.fn(),\n        };\n\n        embeddedCheckout = new EmbeddedCheckout(\n            iframeCreator,\n            messageListener,\n            messagePoster,\n            loadingIndicator,\n            requestSender,\n            storage,\n            location,\n            options,\n        );\n\n        expect(messageListener.addListener).toHaveBeenCalledWith(\n            EmbeddedCheckoutEventType.CheckoutComplete,\n            options.onComplete,\n        );\n\n        expect(messageListener.addListener).toHaveBeenCalledWith(\n            EmbeddedCheckoutEventType.CheckoutError,\n            options.onError,\n        );\n\n        expect(messageListener.addListener).toHaveBeenCalledWith(\n            EmbeddedCheckoutEventType.CheckoutLoaded,\n            options.onLoad,\n        );\n\n        expect(messageListener.addListener).toHaveBeenCalledWith(\n            EmbeddedCheckoutEventType.FrameLoaded,\n            options.onFrameLoad,\n        );\n\n        expect(messageListener.addListener).toHaveBeenCalledWith(\n            EmbeddedCheckoutEventType.SignedOut,\n            options.onSignOut,\n        );\n    });\n\n    it('configures styles when iframe is loaded', async () => {\n        options = { ...options, styles };\n        embeddedCheckout = new EmbeddedCheckout(\n            iframeCreator,\n            messageListener,\n            messagePoster,\n            loadingIndicator,\n            requestSender,\n            storage,\n            location,\n            options,\n        );\n\n        jest.spyOn(messagePoster, 'post');\n\n        await embeddedCheckout.attach();\n\n        expect(messagePoster.post).toHaveBeenCalledWith({\n            type: EmbeddedContentEventType.StyleConfigured,\n            payload: styles,\n        });\n    });\n\n    it('reconfigures styles when iframe is reloaded again', async () => {\n        options = { ...options, styles };\n        embeddedCheckout = new EmbeddedCheckout(\n            iframeCreator,\n            messageListener,\n            messagePoster,\n            loadingIndicator,\n            requestSender,\n            storage,\n            location,\n            options,\n        );\n\n        jest.spyOn(messagePoster, 'post');\n\n        await embeddedCheckout.attach();\n\n        messageListener.trigger({ type: EmbeddedCheckoutEventType.FrameLoaded });\n\n        expect(messagePoster.post).toHaveBeenCalledTimes(2);\n        expect(messagePoster.post).toHaveBeenCalledWith({\n            type: EmbeddedContentEventType.StyleConfigured,\n            payload: styles,\n        });\n    });\n\n    it('toggles loading indicator', (done) => {\n        embeddedCheckout.attach().then(() => {\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n\n            done();\n        });\n\n        expect(loadingIndicator.show).toHaveBeenCalled();\n        expect(loadingIndicator.hide).not.toHaveBeenCalled();\n    });\n\n    it('redirects user to allow third party cookie to be set', () => {\n        jest.spyOn(storage, 'getItem').mockImplementation((key) =>\n            key === IS_COOKIE_ALLOWED_KEY ? null : true,\n        );\n\n        embeddedCheckout.attach();\n\n        expect(location.replace).toHaveBeenCalledWith(\n            `https://mybigcommerce.com/embedded-checkout/allow-cookie?returnUrl=${encodeURIComponent(\n                location.href,\n            )}`,\n        );\n    });\n\n    it('does not redirect user if cookie is already allowed', () => {\n        embeddedCheckout.attach();\n\n        expect(location.replace).not.toHaveBeenCalled();\n    });\n\n    it('retries once if cookie is flagged as allowed yet unable to load frame', async () => {\n        (storage.getItem as jest.Mock).mockRestore();\n        storage.setItem(IS_COOKIE_ALLOWED_KEY, true);\n\n        jest.spyOn(iframeCreator, 'createFrame').mockRejectedValue(\n            new NotEmbeddableError('Empty cart', NotEmbeddableErrorType.MissingContent),\n        );\n\n        embeddedCheckout.attach();\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(location.replace).toHaveBeenCalledWith(\n            `https://mybigcommerce.com/embedded-checkout/allow-cookie?returnUrl=${encodeURIComponent(\n                location.href,\n            )}`,\n        );\n    });\n\n    it('does not retry renew cookie allowance if already retried recently', async () => {\n        (storage.getItem as jest.Mock).mockRestore();\n        storage.setItem(IS_COOKIE_ALLOWED_KEY, true);\n        storage.setItem(\n            LAST_ALLOW_COOKIE_ATTEMPT_KEY,\n            Date.now() - ALLOW_COOKIE_ATTEMPT_INTERVAL - 1000,\n        ); // Add 1 second buffer time\n\n        jest.spyOn(iframeCreator, 'createFrame').mockRejectedValue(\n            new NotEmbeddableError('Empty cart', NotEmbeddableErrorType.MissingContent),\n        );\n\n        embeddedCheckout.attach();\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(location.replace).toHaveBeenCalledTimes(1);\n    });\n\n    it('does not retry to renew cookie allowance if error is due to other issues', async () => {\n        (storage.getItem as jest.Mock).mockRestore();\n        storage.setItem(IS_COOKIE_ALLOWED_KEY, true);\n\n        jest.spyOn(iframeCreator, 'createFrame').mockRejectedValue(\n            new NotEmbeddableError('Invalid container', NotEmbeddableErrorType.MissingContainer),\n        );\n\n        try {\n            await embeddedCheckout.attach();\n        } catch (thrown) {\n            expect(location.replace).not.toHaveBeenCalled();\n        }\n    });\n\n    it('has methods that can be destructed', () => {\n        const { attach } = embeddedCheckout;\n\n        expect(() => attach()).not.toThrow(TypeError);\n    });\n\n    describe('if login URL is passed', () => {\n        beforeEach(() => {\n            options = {\n                ...options,\n                url: 'https://mybigcommerce.com/login/token/foobar',\n            };\n            embeddedCheckout = new EmbeddedCheckout(\n                iframeCreator,\n                messageListener,\n                messagePoster,\n                loadingIndicator,\n                requestSender,\n                storage,\n                location,\n                options,\n            );\n        });\n\n        it('attempts to login', async () => {\n            const response = getResponse({ redirectUrl: 'https://mybigcommerce.com/checkout' });\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n\n            await embeddedCheckout.attach();\n\n            expect(requestSender.post).toHaveBeenCalledWith(options.url);\n\n            expect(iframeCreator.createFrame).toHaveBeenCalledWith(\n                response.body.redirectUrl,\n                options.containerId,\n            );\n        });\n\n        it('triggers error callback if unable to login', async () => {\n            const response = getErrorResponse();\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.reject(response));\n\n            jest.spyOn(messageListener, 'trigger');\n\n            try {\n                await embeddedCheckout.attach();\n            } catch (thrown) {\n                expect(messageListener.trigger).toHaveBeenCalledWith({\n                    type: EmbeddedCheckoutEventType.FrameError,\n                    payload: thrown,\n                });\n\n                expect(thrown).toEqual(new InvalidLoginTokenError(response));\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/embedded-checkout.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\nimport { bindDecorator as bind } from '@bigcommerce/checkout-sdk/utility';\n\nimport { IFrameComponent, IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { BrowserStorage } from '../common/storage';\nimport { parseUrl } from '../common/url';\n\nimport EmbeddedCheckoutError from './embedded-checkout-error';\nimport { EmbeddedCheckoutEventMap, EmbeddedCheckoutEventType } from './embedded-checkout-events';\nimport EmbeddedCheckoutOptions from './embedded-checkout-options';\nimport { InvalidLoginTokenError, NotEmbeddableError, NotEmbeddableErrorType } from './errors';\nimport { EmbeddedContentEvent, EmbeddedContentEventType } from './iframe-content';\nimport ResizableIframeCreator from './resizable-iframe-creator';\n\nexport const ALLOW_COOKIE_ATTEMPT_INTERVAL = 10 * 60 * 1000;\nexport const IS_COOKIE_ALLOWED_KEY = 'isCookieAllowed';\nexport const LAST_ALLOW_COOKIE_ATTEMPT_KEY = 'lastAllowCookieAttempt';\n\n@bind\nexport default class EmbeddedCheckout {\n    private _iframe?: IFrameComponent;\n    private _isAttached: boolean;\n\n    /**\n     * @internal\n     */\n    constructor(\n        private _iframeCreator: ResizableIframeCreator,\n        private _messageListener: IframeEventListener<EmbeddedCheckoutEventMap>,\n        private _messagePoster: IframeEventPoster<EmbeddedContentEvent>,\n        private _loadingIndicator: LoadingIndicator,\n        private _requestSender: RequestSender,\n        private _storage: BrowserStorage,\n        private _location: Location,\n        private _options: EmbeddedCheckoutOptions,\n    ) {\n        this._isAttached = false;\n\n        if (this._options.onComplete) {\n            this._messageListener.addListener(\n                EmbeddedCheckoutEventType.CheckoutComplete,\n                this._options.onComplete,\n            );\n        }\n\n        if (this._options.onError) {\n            this._messageListener.addListener(\n                EmbeddedCheckoutEventType.CheckoutError,\n                this._options.onError,\n            );\n        }\n\n        if (this._options.onLoad) {\n            this._messageListener.addListener(\n                EmbeddedCheckoutEventType.CheckoutLoaded,\n                this._options.onLoad,\n            );\n        }\n\n        if (this._options.onFrameLoad) {\n            this._messageListener.addListener(\n                EmbeddedCheckoutEventType.FrameLoaded,\n                this._options.onFrameLoad,\n            );\n        }\n\n        if (this._options.onSignOut) {\n            this._messageListener.addListener(\n                EmbeddedCheckoutEventType.SignedOut,\n                this._options.onSignOut,\n            );\n        }\n\n        this._messageListener.addListener(EmbeddedCheckoutEventType.FrameLoaded, () =>\n            this._configureStyles(),\n        );\n    }\n\n    attach(): Promise<this> {\n        if (this._isAttached) {\n            return Promise.resolve(this);\n        }\n\n        this._isAttached = true;\n        this._messageListener.listen();\n        this._loadingIndicator.show(this._options.containerId);\n\n        return this._allowCookie()\n            .then(() => this._attemptLogin())\n            .then((url) => this._iframeCreator.createFrame(url, this._options.containerId))\n            .then((iframe) => {\n                this._iframe = iframe;\n\n                this._configureStyles();\n                this._loadingIndicator.hide();\n            })\n            .catch((error) => {\n                this._isAttached = false;\n\n                return this._retryAllowCookie(error).catch(() => {\n                    this._messageListener.trigger({\n                        type: EmbeddedCheckoutEventType.FrameError,\n                        payload: error,\n                    });\n\n                    this._loadingIndicator.hide();\n\n                    throw error;\n                });\n            })\n            .then(() => this);\n    }\n\n    detach(): void {\n        if (!this._isAttached) {\n            return;\n        }\n\n        this._isAttached = false;\n        this._messageListener.stopListen();\n\n        if (this._iframe && this._iframe.parentNode) {\n            this._iframe.parentNode.removeChild(this._iframe);\n            this._iframe.iFrameResizer.close();\n        }\n    }\n\n    private _configureStyles(): void {\n        if (!this._iframe || !this._iframe.contentWindow || !this._options.styles) {\n            return;\n        }\n\n        this._messagePoster.setTarget(this._iframe.contentWindow);\n\n        this._messagePoster.post({\n            type: EmbeddedContentEventType.StyleConfigured,\n            payload: this._options.styles,\n        });\n    }\n\n    private _attemptLogin(): Promise<string> {\n        if (!/^\\/login\\/token/.test(parseUrl(this._options.url).pathname)) {\n            return Promise.resolve(this._options.url);\n        }\n\n        return this._requestSender\n            .post<{ redirectUrl: string }>(this._options.url)\n            .then(({ body: { redirectUrl } }) => redirectUrl)\n            .catch((response) => Promise.reject(new InvalidLoginTokenError(response)));\n    }\n\n    /**\n     * This workaround is required for certain browsers (namely Safari) that\n     * prevent session cookies to be set for a third party website unless the\n     * user has recently visited such website. Therefore, before we attempt to\n     * login or set an active cart in the session, we need to first redirect the\n     * user to the domain of Embedded Checkout.\n     */\n    private _allowCookie(): Promise<void> {\n        if (this._storage.getItem(IS_COOKIE_ALLOWED_KEY)) {\n            return Promise.resolve();\n        }\n\n        this._storage.setItem(IS_COOKIE_ALLOWED_KEY, true);\n\n        // It could be possible that the flag is set to true but the browser has\n        // already removed the permission to store third-party cookies. In that\n        // case, we should try to redirect the user again. But we only want to\n        // do it once within a fixed interval. This is to avoid getting into a\n        // redirect loop if the shopper actually doesn't have a valid card\n        // session.\n        this._storage.setItem(LAST_ALLOW_COOKIE_ATTEMPT_KEY, Date.now());\n\n        const { origin } = parseUrl(this._options.url);\n        const redirectUrl = `${origin}/embedded-checkout/allow-cookie?returnUrl=${encodeURIComponent(\n            this._location.href,\n        )}`;\n\n        document.body.style.visibility = 'hidden';\n        this._location.replace(redirectUrl);\n\n        return new Promise<never>(() => {});\n    }\n\n    private _retryAllowCookie(error: EmbeddedCheckoutError): Promise<void> {\n        const lastAttempt = Number(this._storage.getItem(LAST_ALLOW_COOKIE_ATTEMPT_KEY));\n        const canRetry =\n            (!lastAttempt || Date.now() - lastAttempt > ALLOW_COOKIE_ATTEMPT_INTERVAL) &&\n            error instanceof NotEmbeddableError &&\n            error.subtype === NotEmbeddableErrorType.MissingContent;\n\n        if (!canRetry) {\n            return Promise.reject();\n        }\n\n        this._storage.removeItem(LAST_ALLOW_COOKIE_ATTEMPT_KEY);\n        this._storage.removeItem(IS_COOKIE_ALLOWED_KEY);\n\n        return this._allowCookie();\n    }\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/errors/index.ts",
    "content": "export { default as NotEmbeddableError, NotEmbeddableErrorType } from './not-embeddable-error';\nexport { default as InvalidLoginTokenError } from './invalid-login-token-error';\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/errors/invalid-login-token-error.spec.ts",
    "content": "import { getErrorResponse } from '../../common/http-request/responses.mock';\n\nimport InvalidLoginTokenError from './invalid-login-token-error';\n\ndescribe('InvalidLoginTokenError', () => {\n    it('returns error name', () => {\n        const error = new InvalidLoginTokenError(\n            getErrorResponse({\n                status: 400,\n                title: 'Invalid login token error',\n                type: 'invalid_login',\n                errors: ['Invalid details.'],\n            }),\n        );\n\n        expect(error.name).toBe('InvalidLoginTokenError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/errors/invalid-login-token-error.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { InternalErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../../common/error/errors';\n\n/**\n * Throw this error we are not able to sign in a shopper because the provided\n * login token is invalid.\n */\nexport default class InvalidLoginTokenError extends RequestError {\n    constructor(response: Response<InternalErrorResponseBody>) {\n        super(response, { message: response.body.title });\n\n        this.name = 'InvalidLoginTokenError';\n        this.type = 'invalid_login_token';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/errors/not-embeddable-error.spec.ts",
    "content": "import NotEmbeddableError from './not-embeddable-error';\n\ndescribe('NotEmbeddableError', () => {\n    it('returns error name', () => {\n        const error = new NotEmbeddableError();\n\n        expect(error.name).toBe('NotEmbeddableError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/errors/not-embeddable-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\nexport enum NotEmbeddableErrorType {\n    MissingContainer = 'missing_container',\n    MissingContent = 'missing_content',\n    UnknownError = 'unknown_error',\n}\n\n/**\n * Throw this error if we are not able to embed the checkout form as an iframe.\n * This can be due to the fact that the provided container ID is invalid, or the\n * checkout form fails to load inside the iframe. It can also be due to an\n * unknown reason.\n */\nexport default class NotEmbeddableError extends StandardError {\n    constructor(\n        message?: string,\n        public subtype: NotEmbeddableErrorType = NotEmbeddableErrorType.UnknownError,\n    ) {\n        super(message || 'Unable to embed the checkout form.');\n\n        this.name = 'NotEmbeddableError';\n        this.type = 'not_embeddable';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/iframe-content/create-embedded-checkout-messenger.spec.ts",
    "content": "import createEmbeddedCheckoutMessenger from './create-embedded-checkout-messenger';\nimport IframeEmbeddedCheckoutMessenger from './iframe-embedded-checkout-messenger';\nimport NoopEmbeddedCheckoutMessenger from './noop-embedded-checkout-messenger';\n\ndescribe('createEmbeddedCheckoutMessenger()', () => {\n    it('creates no-op embedded checkout messenger if not inside iframe', () => {\n        expect(\n            createEmbeddedCheckoutMessenger({ parentOrigin: 'https://foobar.mybigcommerece.com' }),\n        ).toBeInstanceOf(NoopEmbeddedCheckoutMessenger);\n    });\n\n    it('creates embedded checkout messenger if inside iframe', () => {\n        expect(\n            createEmbeddedCheckoutMessenger({\n                parentOrigin: 'https://foobar.mybigcommerece.com',\n                parentWindow: Object.create(window),\n            }),\n        ).toBeInstanceOf(IframeEmbeddedCheckoutMessenger);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/iframe-content/create-embedded-checkout-messenger.ts",
    "content": "import {\n    IframeEventListener,\n    IframeEventPoster,\n    setupContentWindowForIframeResizer,\n} from '../../common/iframe';\nimport { EmbeddedCheckoutEvent, EmbeddedCheckoutEventType } from '../embedded-checkout-events';\n\nimport EmbeddedCheckoutMessenger from './embedded-checkout-messenger';\nimport EmbeddedCheckoutMessengerOptions from './embedded-checkout-messenger-options';\nimport { EmbeddedContentEventMap } from './embedded-content-events';\nimport handleFrameLoadedEvent from './handle-frame-loaded-event';\nimport IframeEmbeddedCheckoutMessenger from './iframe-embedded-checkout-messenger';\nimport NoopEmbeddedCheckoutMessenger from './noop-embedded-checkout-messenger';\n\n/**\n * Create an instance of `EmbeddedCheckoutMessenger`.\n *\n * @remarks\n * The object is responsible for posting messages to the parent window from the\n * iframe when certain events have occurred. For example, when the checkout\n * form is first loaded, you should notify the parent window about it.\n *\n * The iframe can only be embedded in domains that are allowed by the store.\n *\n * ```ts\n * const messenger = createEmbeddedCheckoutMessenger({\n *     parentOrigin: 'https://some/website',\n * });\n *\n * messenger.postFrameLoaded();\n * ```\n *\n * @alpha\n * Please note that this feature is currently in an early stage of development.\n * Therefore the API is unstable and not ready for public consumption.\n *\n * @param options - Options for creating `EmbeddedCheckoutMessenger`\n * @returns - An instance of `EmbeddedCheckoutMessenger`\n */\nexport default function createEmbeddedCheckoutMessenger(\n    options: EmbeddedCheckoutMessengerOptions,\n): EmbeddedCheckoutMessenger {\n    setupContentWindowForIframeResizer();\n\n    const parentWindow = options.parentWindow || window.parent;\n\n    // Return a No-op messenger if it is not called inside an iframe\n    if (window === parentWindow) {\n        return new NoopEmbeddedCheckoutMessenger();\n    }\n\n    return new IframeEmbeddedCheckoutMessenger(\n        new IframeEventListener<EmbeddedContentEventMap>(options.parentOrigin),\n        new IframeEventPoster<EmbeddedCheckoutEvent>(options.parentOrigin, parentWindow),\n        new IframeEventPoster<EmbeddedCheckoutEvent>('*', parentWindow),\n        { [EmbeddedCheckoutEventType.FrameLoaded]: handleFrameLoadedEvent },\n    );\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/iframe-content/embedded-checkout-messenger-options.ts",
    "content": "export default interface EmbeddedCheckoutMessengerOptions {\n    parentOrigin: string;\n    parentWindow?: Window;\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/iframe-content/embedded-checkout-messenger.ts",
    "content": "import { CustomError } from '../../common/error/errors';\nimport EmbeddedCheckoutStyles from '../embedded-checkout-styles';\n\nimport EmbeddedContentOptions from './embedded-content-options';\n\nexport default interface EmbeddedCheckoutMessenger {\n    postComplete(): void;\n    postError(payload: Error | CustomError): void;\n    postFrameError(payload: Error | CustomError): void;\n    postFrameLoaded(payload?: EmbeddedContentOptions): void;\n    postLoaded(): void;\n    postSignedOut(): void;\n    receiveStyles(handler: (styles: EmbeddedCheckoutStyles) => void): void;\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/iframe-content/embedded-content-events.ts",
    "content": "import EmbeddedCheckoutStyles from '../embedded-checkout-styles';\n\nexport enum EmbeddedContentEventType {\n    StyleConfigured = 'STYLE_CONFIGURED',\n}\n\nexport interface EmbeddedContentEventMap {\n    [EmbeddedContentEventType.StyleConfigured]: EmbeddedContentStyleConfiguredEvent;\n}\n\nexport type EmbeddedContentEvent = EmbeddedContentStyleConfiguredEvent;\n\nexport interface EmbeddedContentStyleConfiguredEvent {\n    type: EmbeddedContentEventType.StyleConfigured;\n    payload: EmbeddedCheckoutStyles;\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/iframe-content/embedded-content-options.ts",
    "content": "export default interface EmbeddedContentOptions {\n    contentId?: string;\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/iframe-content/handle-frame-loaded-event.spec.ts",
    "content": "import { EmbeddedCheckoutEventType } from '../embedded-checkout-events';\n\nimport handleFrameLoadedEvent from './handle-frame-loaded-event';\n\ndescribe('handleFrameLoadedEvent()', () => {\n    let content: HTMLElement;\n\n    beforeEach(() => {\n        content = document.createElement('div');\n        content.id = 'foobar';\n        document.body.appendChild(content);\n    });\n\n    afterEach(() => {\n        document.body.removeChild(content);\n    });\n\n    it('adds special marker to body element', () => {\n        handleFrameLoadedEvent({\n            type: EmbeddedCheckoutEventType.FrameLoaded,\n            payload: { contentId: content.id },\n        });\n\n        expect(content.hasAttribute('data-iframe-height')).toBe(true);\n    });\n\n    it('does not throw error if `contentId` is not passed', () => {\n        expect(() =>\n            handleFrameLoadedEvent({ type: EmbeddedCheckoutEventType.FrameLoaded }),\n        ).not.toThrow();\n    });\n\n    it('does not throw error if element cannot be found', () => {\n        expect(() =>\n            handleFrameLoadedEvent({\n                type: EmbeddedCheckoutEventType.FrameLoaded,\n                payload: { contentId: 'abc' },\n            }),\n        ).not.toThrow();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/iframe-content/handle-frame-loaded-event.ts",
    "content": "import { EmbeddedCheckoutFrameLoadedEvent } from '../embedded-checkout-events';\n\nexport default function handleFrameLoadedEvent(message: EmbeddedCheckoutFrameLoadedEvent): void {\n    if (!message.payload || !message.payload.contentId) {\n        return;\n    }\n\n    const body = document.getElementById(message.payload.contentId);\n\n    if (!body || body.hasAttribute('data-iframe-height')) {\n        return;\n    }\n\n    body.setAttribute('data-iframe-height', '');\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/iframe-content/iframe-embedded-checkout-messenger.spec.ts",
    "content": "import { CartChangedError } from '../../cart/errors';\nimport { getCheckout } from '../../checkout/checkouts.mock';\nimport { IframeEventListener, IframeEventPoster } from '../../common/iframe';\nimport { EmbeddedCheckoutEvent, EmbeddedCheckoutEventType } from '../embedded-checkout-events';\n\nimport { EmbeddedContentEventMap, EmbeddedContentEventType } from './embedded-content-events';\nimport IframeEmbeddedCheckoutMessenger from './iframe-embedded-checkout-messenger';\n\ndescribe('EmbeddedCheckoutMessenger', () => {\n    let messenger: IframeEmbeddedCheckoutMessenger;\n    let messageListener: IframeEventListener<EmbeddedContentEventMap>;\n    let messagePoster: IframeEventPoster<EmbeddedCheckoutEvent>;\n    let untargetedMessagePoster: IframeEventPoster<EmbeddedCheckoutEvent>;\n    let parentWindow: Window;\n\n    beforeEach(() => {\n        const parentOrigin = 'https://foobar.mybigcommerece.com';\n\n        parentWindow = Object.create(window);\n        messageListener = new IframeEventListener<EmbeddedContentEventMap>(parentOrigin);\n        messagePoster = new IframeEventPoster<EmbeddedCheckoutEvent>(parentOrigin, parentWindow);\n        untargetedMessagePoster = new IframeEventPoster<EmbeddedCheckoutEvent>('*', parentWindow);\n\n        jest.spyOn(messagePoster, 'post');\n        jest.spyOn(untargetedMessagePoster, 'post');\n        jest.spyOn(messageListener, 'addListener');\n\n        messenger = new IframeEmbeddedCheckoutMessenger(\n            messageListener,\n            messagePoster,\n            untargetedMessagePoster,\n        );\n    });\n\n    it('posts `complete` event to parent window', () => {\n        messenger.postComplete();\n\n        expect(messagePoster.post).toHaveBeenCalledWith({\n            type: EmbeddedCheckoutEventType.CheckoutComplete,\n        });\n    });\n\n    it('posts `complete` event to parent window', () => {\n        const error = new CartChangedError(getCheckout(), getCheckout());\n\n        messenger.postError(error);\n\n        expect(messagePoster.post).toHaveBeenCalledWith({\n            type: EmbeddedCheckoutEventType.CheckoutError,\n            payload: {\n                message: error.message,\n                type: error.type,\n            },\n        });\n    });\n\n    it('posts `loaded` event to parent window', () => {\n        messenger.postLoaded();\n\n        expect(messagePoster.post).toHaveBeenCalledWith({\n            type: EmbeddedCheckoutEventType.CheckoutLoaded,\n        });\n    });\n\n    it('posts `frame_loaded` event to parent window', () => {\n        messenger.postFrameLoaded();\n\n        expect(messagePoster.post).toHaveBeenCalledWith({\n            type: EmbeddedCheckoutEventType.FrameLoaded,\n        });\n    });\n\n    it('posts `frame_error` event to parent window without target origin', () => {\n        const error = new Error();\n\n        messenger.postFrameError(error);\n\n        expect(untargetedMessagePoster.post).toHaveBeenCalledWith({\n            type: EmbeddedCheckoutEventType.FrameError,\n            payload: {\n                message: error.message,\n            },\n        });\n    });\n\n    it('posts `signed_out` event to parent window', () => {\n        messenger.postSignedOut();\n\n        expect(messagePoster.post).toHaveBeenCalledWith({\n            type: EmbeddedCheckoutEventType.SignedOut,\n        });\n    });\n\n    it('listens to `style_configured` event from parent window', () => {\n        const handler = jest.fn();\n        const styles = { body: { backgroundColor: '#00ff00' } };\n\n        messenger.receiveStyles(handler);\n        messageListener.trigger({\n            type: EmbeddedContentEventType.StyleConfigured,\n            payload: styles,\n        });\n\n        expect(messageListener.addListener).toHaveBeenCalledWith(\n            EmbeddedContentEventType.StyleConfigured,\n            expect.any(Function),\n        );\n\n        expect(handler).toHaveBeenCalledWith(styles);\n    });\n\n    it('invokes message callbacks if registered', () => {\n        const handler = jest.fn();\n\n        messenger = new IframeEmbeddedCheckoutMessenger(\n            messageListener,\n            messagePoster,\n            untargetedMessagePoster,\n            { [EmbeddedCheckoutEventType.FrameLoaded]: handler },\n        );\n\n        messenger.postFrameLoaded({ contentId: 'foobar' });\n\n        expect(handler).toHaveBeenCalledWith({\n            type: EmbeddedCheckoutEventType.FrameLoaded,\n            payload: { contentId: 'foobar' },\n        });\n    });\n\n    it('does not invoke message callback if it does not match with type of event', () => {\n        const handler = jest.fn();\n\n        messenger = new IframeEmbeddedCheckoutMessenger(\n            messageListener,\n            messagePoster,\n            untargetedMessagePoster,\n            { [EmbeddedCheckoutEventType.FrameLoaded]: handler },\n        );\n\n        messenger.postFrameError(new Error('Unexpected error'));\n\n        expect(handler).not.toHaveBeenCalled();\n    });\n\n    it('has methods that can be destructed', () => {\n        const { postComplete } = messenger;\n\n        expect(() => postComplete()).not.toThrow(TypeError);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/iframe-content/iframe-embedded-checkout-messenger.ts",
    "content": "import { bindDecorator as bind } from '@bigcommerce/checkout-sdk/utility';\n\nimport { CustomError, isCustomError } from '../../common/error/errors';\nimport { IframeEventListener, IframeEventPoster } from '../../common/iframe';\nimport EmbeddedCheckoutError from '../embedded-checkout-error';\nimport {\n    EmbeddedCheckoutCompleteEvent,\n    EmbeddedCheckoutErrorEvent,\n    EmbeddedCheckoutEvent,\n    EmbeddedCheckoutEventMap,\n    EmbeddedCheckoutEventType,\n    EmbeddedCheckoutFrameErrorEvent,\n    EmbeddedCheckoutFrameLoadedEvent,\n    EmbeddedCheckoutLoadedEvent,\n    EmbeddedCheckoutSignedOutEvent,\n} from '../embedded-checkout-events';\nimport EmbeddedCheckoutStyles from '../embedded-checkout-styles';\n\nimport EmbeddedCheckoutMessenger from './embedded-checkout-messenger';\nimport { EmbeddedContentEventMap, EmbeddedContentEventType } from './embedded-content-events';\nimport EmbeddedContentOptions from './embedded-content-options';\n\n@bind\nexport default class IframeEmbeddedCheckoutMessenger implements EmbeddedCheckoutMessenger {\n    /**\n     * @internal\n     */\n    constructor(\n        private _messageListener: IframeEventListener<EmbeddedContentEventMap>,\n        private _messagePoster: IframeEventPoster<EmbeddedCheckoutEvent>,\n        private _untargetedMessagePoster: IframeEventPoster<EmbeddedCheckoutEvent>,\n        private _messageHandlers: EventCallbacks<EmbeddedCheckoutEventMap> = {},\n    ) {\n        this._messageListener.listen();\n    }\n\n    postComplete(): void {\n        const message: EmbeddedCheckoutCompleteEvent = {\n            type: EmbeddedCheckoutEventType.CheckoutComplete,\n        };\n\n        this._postMessage(message);\n    }\n\n    postError(payload: Error | CustomError): void {\n        const message: EmbeddedCheckoutErrorEvent = {\n            type: EmbeddedCheckoutEventType.CheckoutError,\n            payload: this._transformError(payload),\n        };\n\n        this._postMessage(message);\n    }\n\n    postFrameError(payload: Error | CustomError): void {\n        const message: EmbeddedCheckoutFrameErrorEvent = {\n            type: EmbeddedCheckoutEventType.FrameError,\n            payload: this._transformError(payload),\n        };\n\n        // Ideally, all messages should be targeted at a specific origin.\n        // However, for `FrameError` message, we have to post it in an\n        // untargeted fashion. This is because the error could be caused by a\n        // missing cart. That makes it not possible to determine of site origin\n        // of the parent window. Nevertheless, we still want to notify the\n        // parent window about the error.\n        this._postMessage(message, { untargeted: true });\n    }\n\n    postFrameLoaded(payload?: EmbeddedContentOptions): void {\n        const message: EmbeddedCheckoutFrameLoadedEvent = {\n            type: EmbeddedCheckoutEventType.FrameLoaded,\n            payload,\n        };\n\n        this._postMessage(message);\n    }\n\n    postLoaded(): void {\n        const message: EmbeddedCheckoutLoadedEvent = {\n            type: EmbeddedCheckoutEventType.CheckoutLoaded,\n        };\n\n        this._postMessage(message);\n    }\n\n    postSignedOut(): void {\n        const message: EmbeddedCheckoutSignedOutEvent = {\n            type: EmbeddedCheckoutEventType.SignedOut,\n        };\n\n        this._postMessage(message);\n    }\n\n    receiveStyles(handler: (styles: EmbeddedCheckoutStyles) => void): void {\n        this._messageListener.addListener(\n            EmbeddedContentEventType.StyleConfigured,\n            ({ payload }) => {\n                handler(payload);\n            },\n        );\n    }\n\n    private _postMessage(message: EmbeddedCheckoutEvent, options?: { untargeted?: boolean }): void {\n        this._notifyMessageHandlers(message);\n\n        if (options && options.untargeted) {\n            return this._untargetedMessagePoster.post(message);\n        }\n\n        this._messagePoster.post(message);\n    }\n\n    private _notifyMessageHandlers(message: EmbeddedCheckoutEvent): void {\n        Object.keys(this._messageHandlers).forEach((key) => {\n            if (message.type !== key) {\n                return;\n            }\n\n            const handler = this._messageHandlers[key];\n\n            if (handler) {\n                (handler as (event: EmbeddedCheckoutEvent) => void).call(null, message);\n            }\n        });\n    }\n\n    private _transformError(error: Error | CustomError): EmbeddedCheckoutError {\n        return {\n            message: error.message,\n            type: isCustomError(error) ? error.type : undefined,\n            subtype: isCustomError(error) ? error.subtype : undefined,\n        };\n    }\n}\n\nexport type EventCallbacks<TEventMap> = {\n    [key in keyof TEventMap]?: (event: TEventMap[key]) => void;\n};\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/iframe-content/index.ts",
    "content": "export * from './embedded-content-events';\n\nexport { default as createEmbeddedCheckoutMessenger } from './create-embedded-checkout-messenger';\nexport { default as EmbeddedContentOptions } from './embedded-content-options';\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/iframe-content/noop-embedded-checkout-messenger.ts",
    "content": "import { bindDecorator as bind } from '@bigcommerce/checkout-sdk/utility';\n\nimport EmbeddedCheckoutMessenger from './embedded-checkout-messenger';\n\n@bind\nexport default class NoopEmbeddedCheckoutMessenger implements EmbeddedCheckoutMessenger {\n    postComplete(): void {}\n\n    postError(): void {}\n\n    postFrameError(): void {}\n\n    postFrameLoaded(): void {}\n\n    postLoaded(): void {}\n\n    postSignedOut(): void {}\n\n    receiveStyles(): void {}\n}\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/index.ts",
    "content": "export { default as embedCheckout } from './embed-checkout';\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/resizable-iframe-creator.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport { IFrameComponent, IFrameObject, IFrameOptions, iframeResizer } from '../common/iframe';\n\nimport { EmbeddedCheckoutEventType } from './embedded-checkout-events';\nimport { NotEmbeddableError } from './errors';\nimport ResizableIframeCreator, { ExtendedHTMLIFrameElement } from './resizable-iframe-creator';\n\njest.mock('../common/iframe', () => ({\n    iframeResizer: jest.fn((_: IFrameOptions, element: HTMLIFrameElement) => {\n        (element as IFrameComponent).iFrameResizer = {} as IFrameObject;\n\n        return [element];\n    }),\n    isIframeEvent: jest.fn((object, type) => object.type === type),\n}));\n\ndescribe('ResizableIframeCreator', () => {\n    let url: string;\n    let container: HTMLElement;\n    let eventEmitter: EventEmitter;\n    let iframeCreator: ResizableIframeCreator;\n\n    beforeEach(() => {\n        url = 'http://mybigcommerce.com/checkout';\n        container = document.createElement('div');\n        eventEmitter = new EventEmitter();\n\n        jest.spyOn(window, 'addEventListener').mockImplementation((type, listener) => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            return eventEmitter.addListener(type, listener);\n        });\n\n        jest.spyOn(window, 'removeEventListener').mockImplementation((type, listener) => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            return eventEmitter.removeListener(type, listener);\n        });\n\n        container.setAttribute('id', 'checkout');\n        window.document.body.appendChild(container);\n\n        iframeCreator = new ResizableIframeCreator({\n            timeout: 0,\n        });\n    });\n\n    it('inserts checkout iframe into container', async () => {\n        setTimeout(() => {\n            eventEmitter.emit('message', {\n                origin: 'http://mybigcommerce.com',\n                data: { type: EmbeddedCheckoutEventType.FrameLoaded },\n            });\n        });\n\n        const frame = await iframeCreator.createFrame(url, 'checkout');\n\n        expect(frame.tagName).toBe('IFRAME');\n        expect(frame.src).toEqual(url);\n        expect(frame.parentElement).toEqual(container);\n    });\n\n    it('configures iframe to be borderless and auto-resizable', async () => {\n        setTimeout(() => {\n            eventEmitter.emit('message', {\n                origin: 'http://mybigcommerce.com',\n                data: { type: EmbeddedCheckoutEventType.FrameLoaded },\n            });\n        });\n\n        const frame = await iframeCreator.createFrame(url, 'checkout');\n\n        expect(frame.style.border).toBe('');\n        expect(frame.style.width).toBe('100%');\n        expect(frame.iFrameResizer).toBeDefined();\n        expect(iframeResizer).toHaveBeenCalledWith(\n            {\n                scrolling: false,\n                sizeWidth: false,\n                heightCalculationMethod: 'lowestElement',\n            },\n            frame,\n        );\n    });\n\n    it('calculates iframe height based on body element if option is passed', async () => {\n        setTimeout(() => {\n            eventEmitter.emit('message', {\n                origin: 'http://mybigcommerce.com',\n                data: {\n                    type: EmbeddedCheckoutEventType.FrameLoaded,\n                    payload: { contentId: 'foobar' },\n                },\n            });\n        });\n\n        await iframeCreator.createFrame(url, 'checkout');\n\n        expect(iframeResizer).toHaveBeenCalledWith(\n            expect.objectContaining({\n                heightCalculationMethod: 'taggedElement',\n            }),\n            expect.any(HTMLIFrameElement),\n        );\n    });\n\n    it('allows cross-origin iframe to use payment request API', async () => {\n        setTimeout(() => {\n            eventEmitter.emit('message', {\n                origin: 'http://mybigcommerce.com',\n                data: { type: EmbeddedCheckoutEventType.FrameLoaded },\n            });\n        });\n\n        const frame: ExtendedHTMLIFrameElement = await iframeCreator.createFrame(url, 'checkout');\n\n        expect(frame.allowPaymentRequest).toBe(true);\n    });\n\n    it('removes message listener if iframe is loaded successfully', async () => {\n        jest.spyOn(window, 'removeEventListener');\n\n        setTimeout(() => {\n            eventEmitter.emit('message', {\n                origin: 'http://mybigcommerce.com',\n                data: { type: EmbeddedCheckoutEventType.FrameLoaded },\n            });\n        });\n\n        await iframeCreator.createFrame(url, 'checkout');\n\n        expect(window.removeEventListener).toHaveBeenCalledWith('message', expect.any(Function));\n    });\n\n    it('throws error if unable to find container element', () => {\n        expect(() => iframeCreator.createFrame(url, 'invalid_container')).toThrow(\n            NotEmbeddableError,\n        );\n    });\n\n    it('throws error if not receiving \"loaded\" event within certain timeframe', async () => {\n        try {\n            await iframeCreator.createFrame(url, 'checkout');\n        } catch (error) {\n            expect(error).toBeInstanceOf(NotEmbeddableError);\n        }\n    });\n\n    it('throws error if receiving \"error\" event from iframe', async () => {\n        const event = {\n            type: EmbeddedCheckoutEventType.FrameError,\n            payload: { message: 'Not available' },\n        };\n\n        setTimeout(() => {\n            eventEmitter.emit('message', {\n                origin: 'http://mybigcommerce.com',\n                data: event,\n            });\n        });\n\n        try {\n            await iframeCreator.createFrame(url, 'checkout');\n        } catch (error) {\n            expect(error).toBeInstanceOf(NotEmbeddableError);\n            expect((error as NotEmbeddableError).message).toEqual(event.payload.message);\n        }\n    });\n\n    it('removes iframe from container element if unable to load', async () => {\n        try {\n            await iframeCreator.createFrame(url, 'checkout');\n        } catch (error) {\n            expect(container.childNodes).toHaveLength(0);\n        }\n    });\n\n    it('removes message listener if unable to load', async () => {\n        jest.spyOn(window, 'removeEventListener');\n\n        try {\n            await iframeCreator.createFrame(url, 'checkout');\n        } catch (error) {\n            expect(window.removeEventListener).toHaveBeenCalledWith(\n                'message',\n                expect.any(Function),\n            );\n        }\n    });\n\n    it('inserts the iframe even if the message comes from the www version of the url', async () => {\n        setTimeout(() => {\n            eventEmitter.emit('message', {\n                origin: 'http://www.mybigcommerce.com',\n                data: { type: EmbeddedCheckoutEventType.FrameLoaded },\n            });\n        });\n\n        const frame = await iframeCreator.createFrame(url, 'checkout');\n\n        expect(frame.tagName).toBe('IFRAME');\n        expect(frame.src).toEqual(url);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/embedded-checkout/resizable-iframe-creator.ts",
    "content": "import { IFrameComponent, iframeResizer, isIframeEvent } from '../common/iframe';\nimport { appendWww, parseUrl } from '../common/url';\n\nimport { EmbeddedCheckoutEventType } from './embedded-checkout-events';\nimport { NotEmbeddableError, NotEmbeddableErrorType } from './errors';\n\nexport interface ExtendedHTMLIFrameElement extends HTMLIFrameElement {\n    allowPaymentRequest?: boolean;\n}\n\nexport default class ResizableIframeCreator {\n    constructor(private _options?: { timeout: number }) {}\n\n    createFrame(src: string, containerId: string): Promise<IFrameComponent> {\n        const container = document.getElementById(containerId);\n        const { timeout = 60000 } = this._options || {};\n\n        if (!container) {\n            throw new NotEmbeddableError(\n                'Unable to embed the iframe because the container element could not be found.',\n                NotEmbeddableErrorType.MissingContainer,\n            );\n        }\n\n        const iframe: ExtendedHTMLIFrameElement = document.createElement('iframe');\n\n        iframe.src = src;\n        iframe.style.border = 'none';\n        iframe.style.display = 'none';\n        iframe.style.width = '100%';\n        iframe.allowPaymentRequest = true;\n        iframe.allow = 'payment';\n\n        container.appendChild(iframe);\n\n        return this._toResizableFrame(iframe, timeout).catch((error) => {\n            container.removeChild(iframe);\n\n            throw error;\n        });\n    }\n\n    private _toResizableFrame(\n        iframe: HTMLIFrameElement,\n        timeoutInterval: number,\n    ): Promise<IFrameComponent> {\n        // Can't simply listen to `load` event because it always gets triggered even if there's an error.\n        // Instead, listen to the `load` inside the iframe and let the parent frame know when it happens.\n        return new Promise((resolve, reject) => {\n            const timeout = window.setTimeout(() => {\n                reject(\n                    new NotEmbeddableError(\n                        'Unable to embed the iframe because the content could not be loaded.',\n                    ),\n                );\n            }, timeoutInterval);\n\n            const handleMessage = (event: MessageEvent) => {\n                if (\n                    event.origin !== parseUrl(iframe.src).origin &&\n                    event.origin !== appendWww(parseUrl(iframe.src)).origin\n                ) {\n                    return;\n                }\n\n                if (isIframeEvent(event.data, EmbeddedCheckoutEventType.FrameError)) {\n                    teardown();\n                    reject(\n                        new NotEmbeddableError(\n                            event.data.payload.message,\n                            NotEmbeddableErrorType.MissingContent,\n                        ),\n                    );\n                }\n\n                if (isIframeEvent(event.data, EmbeddedCheckoutEventType.FrameLoaded)) {\n                    iframe.style.display = '';\n\n                    const contentId = event.data.payload && event.data.payload.contentId;\n                    const iframes = iframeResizer(\n                        {\n                            scrolling: false,\n                            sizeWidth: false,\n                            heightCalculationMethod: contentId ? 'taggedElement' : 'lowestElement',\n                        },\n                        iframe,\n                    );\n\n                    teardown();\n                    resolve(iframes[iframes.length - 1]);\n                }\n            };\n\n            const teardown = () => {\n                window.removeEventListener('message', handleMessage);\n                window.clearTimeout(timeout);\n            };\n\n            window.addEventListener('message', handleMessage);\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/create-extension-event-broadcaster.ts",
    "content": "import { CheckoutSelectors } from '../checkout';\nimport { DataStoreProjection } from '../common/data-store';\n\nimport { ExtensionEventBroadcaster } from './extension-event-broadcaster';\nimport { ExtensionEventType } from './extension-events';\nimport { ExtensionMessenger } from './extension-messenger';\nimport { subscribeConsignmentsChange } from './subscribers';\n\nexport function createExtensionEventBroadcaster(\n    store: DataStoreProjection<CheckoutSelectors>,\n    messenger: ExtensionMessenger,\n): ExtensionEventBroadcaster {\n    const subscribers = {\n        [ExtensionEventType.ConsignmentsChanged]: subscribeConsignmentsChange,\n    };\n\n    return new ExtensionEventBroadcaster(store, messenger, subscribers);\n}\n"
  },
  {
    "path": "packages/core/src/extension/create-extension-event-poster.spec.ts",
    "content": "import { IframeEventPoster } from '../common/iframe';\n\nimport { createExtensionEventPoster } from './create-extension-event-poster';\nimport { ExtensionNotFoundError } from './errors';\nimport { Extension } from './extension';\nimport { getExtensions } from './extension.mock';\n\ndescribe('createExtensionEventPoster', () => {\n    let extension: Extension;\n\n    beforeEach(() => {\n        extension = getExtensions()[0];\n    });\n\n    it('should return an instance of IframeEventPoster if the iframe and contentWindow exist', () => {\n        const iframe = { contentWindow: {} };\n\n        // Info: This can't be fixed for now, because TS requires to create an iframe element to return from\n        // query selector, however it is not possible to set contentWindow to an iframe element\n        // since it is read only property\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(document, 'querySelector').mockReturnValue({\n            querySelector: jest.fn(() => iframe),\n        });\n\n        const poster = createExtensionEventPoster(extension);\n\n        expect(document.querySelector).toHaveBeenCalledWith('[data-extension-id=\"123\"]');\n        expect(poster).toBeInstanceOf(IframeEventPoster);\n    });\n\n    it('should throw ExtensionNotFoundError if the iframe or contentWindow do not exist', () => {\n        jest.spyOn(document, 'querySelector').mockReturnValue(null);\n\n        expect(() => createExtensionEventPoster(extension)).toThrow(ExtensionNotFoundError);\n        expect(document.querySelector).toHaveBeenCalledWith('[data-extension-id=\"123\"]');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/create-extension-event-poster.ts",
    "content": "import { IframeEventPoster } from '../common/iframe';\n\nimport { ExtensionNotFoundError } from './errors';\nimport { Extension } from './extension';\n\nexport function createExtensionEventPoster<T>(extension: Extension): IframeEventPoster<T> {\n    const iframe = document\n        .querySelector(`[data-extension-id=\"${extension.id}\"]`)\n        ?.querySelector('iframe');\n\n    if (!iframe?.contentWindow) {\n        throw new ExtensionNotFoundError(\n            `Unable to post due to no extension rendered for ID: ${extension.id}.`,\n        );\n    }\n\n    return new IframeEventPoster<T>(extension.url, iframe.contentWindow);\n}\n"
  },
  {
    "path": "packages/core/src/extension/create-extension-web-worker.spec.ts",
    "content": "import { createExtensionWebWorker } from './create-extension-web-worker';\nimport { MockWorker } from './extension.mock';\n\n// Store original window properties\nconst originalWorker = window.Worker;\nconst originalCreateObjectURL = URL.createObjectURL;\nconst originalBlob = window.Blob;\n\ndescribe('createExtensionWebWorker', () => {\n    let mockCreateObjectURL: jest.Mock;\n    let mockBlobConstructor: jest.Mock;\n    let mockWorkerConstructor: jest.Mock;\n\n    beforeEach(() => {\n        mockCreateObjectURL = jest.fn().mockReturnValue('blob:http://localhost/mock-blob-url-123');\n        URL.createObjectURL = mockCreateObjectURL;\n\n        mockBlobConstructor = jest.fn((content, options) => ({\n            content,\n            options,\n            size: content.join('').length,\n            type: options.type,\n        }));\n        window.Blob = mockBlobConstructor as any;\n\n        mockWorkerConstructor = jest.fn((url) => new MockWorker(url));\n        window.Worker = mockWorkerConstructor as any;\n    });\n\n    afterEach(() => {\n        window.Worker = originalWorker;\n        URL.createObjectURL = originalCreateObjectURL;\n        window.Blob = originalBlob;\n        jest.clearAllMocks();\n    });\n\n    it('should throw an error if Web Workers are not supported', () => {\n        // Simulate no Worker support\n        (window as any).Worker = undefined;\n\n        const workerScriptUrl = 'http://localhost/my-worker.js';\n\n        expect(() => createExtensionWebWorker(workerScriptUrl)).toThrow(\n            `Unable to load the extension's web worker: your browser does not support Web Workers.`,\n        );\n    });\n\n    it('should create and return a new Worker instance on success', () => {\n        const workerScriptUrl = 'http://localhost/my-worker.js';\n        const worker = createExtensionWebWorker(workerScriptUrl);\n\n        expect(mockBlobConstructor).toHaveBeenCalledTimes(1);\n\n        const expectedBlobContent = [\n            `importScripts=((i)=>(...a)=>i(...a.map((u)=>''+new URL(u,\"${workerScriptUrl}\"))))(importScripts);`,\n            `importScripts(\"${workerScriptUrl}\")`,\n        ].join('');\n\n        expect(mockBlobConstructor.mock.calls[0][0]).toEqual([expectedBlobContent]); // Content is an array of strings\n        expect(mockBlobConstructor.mock.calls[0][1]).toEqual({ type: 'text/javascript' });\n        expect(mockCreateObjectURL).toHaveBeenCalledTimes(1);\n        expect(mockCreateObjectURL).toHaveBeenCalledWith(mockBlobConstructor.mock.results[0].value);\n        expect(mockWorkerConstructor).toHaveBeenCalledTimes(1);\n        expect(mockWorkerConstructor).toHaveBeenCalledWith(\n            'blob:http://localhost/mock-blob-url-123',\n        ); // The mocked blob URL\n        expect(worker).toBeInstanceOf(MockWorker);\n    });\n\n    it('should throw a generic error if URL.createObjectURL fails', () => {\n        mockCreateObjectURL.mockImplementation(() => {\n            throw new Error('Blob URL creation failed');\n        });\n\n        const workerScriptUrl = 'http://localhost/my-worker.js';\n\n        expect(() => createExtensionWebWorker(workerScriptUrl)).toThrow(\n            \"Unable to load the extension's web worker\",\n        );\n    });\n\n    it('should throw a generic error if new Worker() instantiation fails', () => {\n        mockWorkerConstructor.mockImplementation(() => {\n            throw new Error('Worker instantiation failed');\n        });\n\n        const workerScriptUrl = 'http://localhost/my-worker.js';\n\n        expect(() => createExtensionWebWorker(workerScriptUrl)).toThrow(\n            \"Unable to load the extension's web worker\",\n        );\n    });\n\n    it('should throw a generic error if Blob constructor fails', () => {\n        mockBlobConstructor.mockImplementation(() => {\n            throw new Error('Blob creation failed');\n        });\n\n        const workerScriptUrl = 'http://localhost/my-worker.js';\n\n        expect(() => createExtensionWebWorker(workerScriptUrl)).toThrow(\n            \"Unable to load the extension's web worker\",\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/create-extension-web-worker.ts",
    "content": "export function createExtensionWebWorker(url: string): Worker {\n    if (!window.Worker) {\n        throw new Error(\n            `Unable to load the extension's web worker: your browser does not support Web Workers.`,\n        );\n    }\n\n    try {\n        const blob = URL.createObjectURL(\n            new Blob(\n                [\n                    `importScripts=((i)=>(...a)=>i(...a.map((u)=>''+new URL(u,\"${url}\"))))(importScripts);importScripts(\"${url}\")`,\n                ],\n                { type: 'text/javascript' },\n            ),\n        );\n\n        return new Worker(blob);\n    } catch (error) {\n        throw new Error(`Unable to load the extension's web worker`);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/errors/extension-not-found-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\nexport class ExtensionNotFoundError extends StandardError {\n    constructor(message?: string) {\n        super(message || 'Unable to proceed due to no extension configured for this region.');\n\n        this.name = 'ExtensionNotFoundError';\n        this.type = 'extension_not_found';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/errors/extension-not-loaded-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\nexport class ExtensionNotLoadedError extends StandardError {\n    constructor(message?: string) {\n        super(message || 'Unable to load an extension');\n\n        this.name = 'ExtensionNotLoadedError';\n        this.type = 'extension_not_loaded';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/errors/index.ts",
    "content": "export { ExtensionNotFoundError } from './extension-not-found-error';\nexport { ExtensionNotLoadedError } from './extension-not-loaded-error';\nexport { UnsupportedExtensionCommandError } from './unsupported-extension-command-error';\nexport { UnsupportedExtensionQueryError } from './unsupported-extension-query-error';\n"
  },
  {
    "path": "packages/core/src/extension/errors/unsupported-extension-command-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\nexport class UnsupportedExtensionCommandError extends StandardError {\n    constructor(message?: string) {\n        super(message || 'Unable to proceed due to unsupported extension command.');\n\n        this.name = 'UnsupportedExtensionCommandError';\n        this.type = 'unsupported_extension_command_error';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/errors/unsupported-extension-query-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\nexport class UnsupportedExtensionQueryError extends StandardError {\n    constructor(message?: string) {\n        super(message || 'Unable to proceed due to unsupported extension query.');\n\n        this.name = 'UnsupportedExtensionQueryError';\n        this.type = 'unsupported_extension_query_error';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-action-creator.spec.ts",
    "content": "import { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { EventEmitter } from 'events';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { ErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CheckoutStore, createCheckoutStore } from '../checkout';\nimport { getCheckout, getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\nimport { StoreConfig } from '../config';\nimport { getConfig } from '../config/configs.mock';\n\nimport { ExtensionNotLoadedError } from './errors';\nimport { Extension, ExtensionRegion } from './extension';\nimport { ExtensionActionCreator } from './extension-action-creator';\nimport { ExtensionActionType } from './extension-actions';\nimport { ExtensionInternalCommandType } from './extension-internal-commands';\nimport { ExtensionRequestSender } from './extension-request-sender';\nimport {\n    getExtensionCommand,\n    getExtensions,\n    getWorkerExtension,\n    MockWorker,\n} from './extension.mock';\nimport { WorkerExtensionMessenger } from './worker-extension-messenger';\n\ndescribe('ExtensionActionCreator', () => {\n    let errorResponse: Response<ErrorResponseBody>;\n    let extensionActionCreator: ExtensionActionCreator;\n    let extensionRequestSender: ExtensionRequestSender;\n    let extensionsResponse: Response<Extension[]>;\n    let store: CheckoutStore;\n    let storeConfig: StoreConfig;\n    let workerExtensionMessenger: WorkerExtensionMessenger;\n\n    beforeEach(() => {\n        errorResponse = getErrorResponse();\n        extensionsResponse = getResponse(getExtensions());\n        store = createCheckoutStore(getCheckoutStoreState());\n        storeConfig = getConfig().storeConfig;\n\n        extensionRequestSender = new ExtensionRequestSender(createRequestSender());\n        extensionActionCreator = new ExtensionActionCreator(extensionRequestSender);\n        workerExtensionMessenger = new WorkerExtensionMessenger();\n\n        jest.spyOn(store.getState().config, 'getStoreConfigOrThrow').mockReturnValue(storeConfig);\n        jest.spyOn(extensionRequestSender, 'loadExtensions').mockReturnValue(\n            Promise.resolve(extensionsResponse),\n        );\n\n        jest.spyOn(store.getState().cart, 'getCartOrThrow').mockReturnValue(getCheckout().cart);\n    });\n\n    describe('#loadExtensions()', () => {\n        it('sends a request to get a list of extensions', async () => {\n            await from(extensionActionCreator.loadExtensions()(store)).toPromise();\n\n            expect(extensionRequestSender.loadExtensions).toHaveBeenCalled();\n        });\n\n        it('emits actions if able to load extensions', async () => {\n            const actions = await from(extensionActionCreator.loadExtensions()(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: ExtensionActionType.LoadExtensionsRequested },\n                {\n                    type: ExtensionActionType.LoadExtensionsSucceeded,\n                    payload: extensionsResponse.body,\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to load extensions', async () => {\n            jest.spyOn(extensionRequestSender, 'loadExtensions').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(extensionActionCreator.loadExtensions()(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: ExtensionActionType.LoadExtensionsRequested },\n                {\n                    type: ExtensionActionType.LoadExtensionsFailed,\n                    payload: errorResponse,\n                    error: true,\n                },\n            ]);\n        });\n    });\n\n    describe('#renderExtension()', () => {\n        it('throws error if unable to find an extension', async () => {\n            jest.spyOn(store.getState().extensions, 'getExtensionByRegion').mockReturnValue(\n                undefined,\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            await from(\n                extensionActionCreator.renderExtension(\n                    'foo',\n                    ExtensionRegion.ShippingShippingAddressFormAfter,\n                    workerExtensionMessenger,\n                )(store),\n            )\n                .pipe(catchError(errorHandler))\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n        });\n\n        it('emits actions if able to render an extension', async () => {\n            const event = getExtensionCommand();\n            const eventEmitter = new EventEmitter();\n            const mockElement = document.createElement('div');\n\n            jest.spyOn(document, 'getElementById').mockReturnValue(mockElement);\n            jest.spyOn(window, 'addEventListener').mockImplementation((type, eventListener) => {\n                const listener =\n                    typeof eventListener === 'function' ? eventListener : () => eventListener;\n\n                return eventEmitter.addListener(type, listener);\n            });\n\n            setTimeout(() => {\n                eventEmitter.emit('message', {\n                    ...event,\n                    data: {\n                        type: ExtensionInternalCommandType.ResizeIframe,\n                    },\n                });\n            });\n\n            const actions = await from(\n                extensionActionCreator.renderExtension(\n                    'foo',\n                    ExtensionRegion.ShippingShippingAddressFormBefore,\n                    workerExtensionMessenger,\n                )(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: ExtensionActionType.RenderExtensionRequested },\n                { type: ExtensionActionType.RenderExtensionSucceeded },\n            ]);\n        });\n\n        it('emits error actions if unable to render an extension', async () => {\n            jest.spyOn(document, 'getElementById').mockReturnValue(null);\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(\n                extensionActionCreator.renderExtension(\n                    'foo',\n                    ExtensionRegion.ShippingShippingAddressFormAfter,\n                    workerExtensionMessenger,\n                )(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: ExtensionActionType.RenderExtensionRequested },\n                {\n                    type: ExtensionActionType.RenderExtensionFailed,\n                    payload: expect.any(ExtensionNotLoadedError),\n                    error: true,\n                },\n            ]);\n        });\n    });\n\n    describe('#renderExtension() with worker extensions', () => {\n        it('emits error actions if unable to render a worker extension', async () => {\n            const workerExtension = getWorkerExtension();\n\n            jest.spyOn(store.getState().extensions, 'getExtensionByRegion').mockReturnValue(\n                workerExtension,\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(\n                extensionActionCreator.renderExtension(\n                    '',\n                    ExtensionRegion.GlobalWebWorker,\n                    workerExtensionMessenger,\n                )(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: ExtensionActionType.RenderExtensionRequested },\n                {\n                    type: ExtensionActionType.RenderExtensionFailed,\n                    payload: new Error(\n                        \"Unable to load the extension's web worker: your browser does not support Web Workers.\",\n                    ),\n                    error: true,\n                },\n            ]);\n        });\n\n        it('emits actions if able to render a worker extension', async () => {\n            const workerExtension = getWorkerExtension();\n\n            jest.spyOn(store.getState().extensions, 'getExtensionByRegion').mockReturnValue(\n                workerExtension,\n            );\n\n            const mockCreateObjectURL = jest.fn().mockReturnValue(`blob:${workerExtension.url}`);\n\n            URL.createObjectURL = mockCreateObjectURL;\n\n            const mockBlobConstructor = jest.fn((content, options) => ({\n                content,\n                options,\n                size: content.join('').length,\n                type: options.type,\n            }));\n\n            window.Blob = mockBlobConstructor as any;\n\n            const mockWorkerConstructor = jest.fn(() => new MockWorker(workerExtension.url));\n\n            window.Worker = mockWorkerConstructor as any;\n\n            const actions = await from(\n                extensionActionCreator.renderExtension(\n                    '',\n                    ExtensionRegion.GlobalWebWorker,\n                    workerExtensionMessenger,\n                )(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: ExtensionActionType.RenderExtensionRequested },\n                { type: ExtensionActionType.RenderExtensionSucceeded },\n            ]);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/extension-action-creator.ts",
    "content": "import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { Observable, Observer } from 'rxjs';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { RequestOptions } from '../common/http-request';\nimport { parseUrl } from '../common/url';\n\nimport { createExtensionWebWorker } from './create-extension-web-worker';\nimport { ExtensionNotFoundError } from './errors';\nimport { ExtensionRegion, ExtensionType } from './extension';\nimport { ExtensionAction, ExtensionActionType } from './extension-actions';\nimport { ExtensionIframe } from './extension-iframe';\nimport { ExtensionRequestSender } from './extension-request-sender';\nimport { WorkerExtensionMessenger } from './worker-extension-messenger';\n\nexport class ExtensionActionCreator {\n    constructor(private _requestSender: ExtensionRequestSender) {}\n\n    loadExtensions(\n        options?: RequestOptions,\n    ): ThunkAction<ExtensionAction, InternalCheckoutSelectors> {\n        return () =>\n            Observable.create((observer: Observer<ExtensionAction>) => {\n                observer.next(createAction(ExtensionActionType.LoadExtensionsRequested));\n\n                this._requestSender\n                    .loadExtensions(options)\n                    .then((response) => {\n                        const extensions = response.body;\n\n                        observer.next(\n                            createAction(ExtensionActionType.LoadExtensionsSucceeded, extensions),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(ExtensionActionType.LoadExtensionsFailed, response),\n                        );\n                    });\n            });\n    }\n\n    renderExtension(\n        container: string,\n        region: ExtensionRegion,\n        workerExtensionMessenger: WorkerExtensionMessenger,\n    ): ThunkAction<ExtensionAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create(async (observer: Observer<ExtensionAction>) => {\n                const state = store.getState();\n                const { id: cartId } = state.cart.getCartOrThrow();\n                const {\n                    links: { checkoutLink },\n                } = state.config.getStoreConfigOrThrow();\n\n                const extension = state.extensions.getExtensionByRegion(region);\n\n                try {\n                    if (!extension) {\n                        throw new ExtensionNotFoundError(\n                            `Unable to proceed due to no extension configured for the region: ${region}.`,\n                        );\n                    }\n\n                    observer.next(createAction(ExtensionActionType.RenderExtensionRequested));\n\n                    if (extension.type === ExtensionType.Worker) {\n                        const worker = createExtensionWebWorker(extension.url);\n\n                        workerExtensionMessenger.add(extension.id, worker);\n                    } else {\n                        const iframe = new ExtensionIframe(container, extension, {\n                            cartId,\n                            parentOrigin: parseUrl(checkoutLink).origin,\n                        });\n\n                        await iframe.attach();\n                    }\n\n                    observer.next(createAction(ExtensionActionType.RenderExtensionSucceeded));\n                    observer.complete();\n                } catch (error) {\n                    observer.error(\n                        createErrorAction(ExtensionActionType.RenderExtensionFailed, error),\n                    );\n                }\n            });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { Extension } from './extension';\n\nexport enum ExtensionActionType {\n    LoadExtensionsRequested = 'LOAD_EXTENSIONS_REQUESTED',\n    LoadExtensionsSucceeded = 'LOAD_EXTENSIONS_SUCCEEDED',\n    LoadExtensionsFailed = 'LOAD_EXTENSIONS_FAILED',\n    RenderExtensionRequested = 'RENDER_EXTENSION_REQUESTED',\n    RenderExtensionSucceeded = 'RENDER_EXTENSION_SUCCEEDED',\n    RenderExtensionFailed = 'RENDER_EXTENSION_FAILED',\n}\n\nexport type ExtensionAction =\n    | LoadExtensionsRequestedAction\n    | LoadExtensionsSucceededAction\n    | LoadExtensionsFailedAction\n    | RenderExtensionRequestedAction\n    | RenderExtensionSucceededAction\n    | RenderExtensionFailedAction;\n\nexport interface LoadExtensionsRequestedAction extends Action {\n    type: ExtensionActionType.LoadExtensionsRequested;\n}\n\nexport interface LoadExtensionsSucceededAction extends Action<Extension[]> {\n    type: ExtensionActionType.LoadExtensionsSucceeded;\n}\n\nexport interface LoadExtensionsFailedAction extends Action<Error> {\n    type: ExtensionActionType.LoadExtensionsFailed;\n}\n\nexport interface RenderExtensionRequestedAction extends Action {\n    type: ExtensionActionType.RenderExtensionRequested;\n}\n\nexport interface RenderExtensionSucceededAction extends Action {\n    type: ExtensionActionType.RenderExtensionSucceeded;\n}\n\nexport interface RenderExtensionFailedAction extends Action<Error> {\n    type: ExtensionActionType.RenderExtensionFailed;\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-commands.ts",
    "content": "export type ExtensionCommand =\n    | ReloadCheckoutCommand\n    | ShowLoadingIndicatorCommand\n    | SetIframeStyleCommand\n    | ReRenderShippingForm\n    | ReRenderShippingStep;\n\nexport enum ExtensionCommandType {\n    ReloadCheckout = 'EXTENSION:RELOAD_CHECKOUT',\n    ShowLoadingIndicator = 'EXTENSION:SHOW_LOADING_INDICATOR',\n    SetIframeStyle = 'EXTENSION:SET_IFRAME_STYLE',\n    ReRenderShippingForm = 'EXTENSION:RE_RENDER_SHIPPING_FORM',\n    ReRenderShippingStep = 'EXTENSION:RE_RENDER_SHIPPING_STEP',\n}\n\nexport interface ReloadCheckoutCommand {\n    type: ExtensionCommandType.ReloadCheckout;\n}\n\nexport interface ShowLoadingIndicatorCommand {\n    type: ExtensionCommandType.ShowLoadingIndicator;\n    payload: {\n        show: boolean;\n    };\n}\n\nexport interface SetIframeStyleCommand {\n    type: ExtensionCommandType.SetIframeStyle;\n    payload: {\n        style: {\n            [key: string]: string | number | null;\n        };\n    };\n}\n\nexport interface ReRenderShippingForm {\n    type: ExtensionCommandType.ReRenderShippingForm;\n}\n\nexport interface ReRenderShippingStep {\n    type: ExtensionCommandType.ReRenderShippingStep;\n}\nexport interface ExtensionCommandMap {\n    [ExtensionCommandType.ReloadCheckout]: ReloadCheckoutCommand;\n    [ExtensionCommandType.ShowLoadingIndicator]: ShowLoadingIndicatorCommand;\n    [ExtensionCommandType.SetIframeStyle]: SetIframeStyleCommand;\n    [ExtensionCommandType.ReRenderShippingForm]: ReRenderShippingForm;\n    [ExtensionCommandType.ReRenderShippingStep]: ReRenderShippingStep;\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-event-broadcaster.spec.ts",
    "content": "import EventEmitter from 'events';\n\nimport { CheckoutSelectors } from '../checkout';\nimport { DataStoreProjection } from '../common/data-store';\nimport { getConsignments } from '../shipping/consignments.mock';\n\nimport { ExtensionEventBroadcaster } from './extension-event-broadcaster';\nimport { ExtensionEventType } from './extension-events';\nimport { ExtensionInternalCommandType } from './extension-internal-commands';\nimport { ExtensionMessenger } from './extension-messenger';\nimport { getExtensions } from './extension.mock';\nimport { ExtensionChangeSubscriber } from './subscribers';\n\ndescribe('ExtensionEventBroadcaster', () => {\n    let store: Pick<DataStoreProjection<CheckoutSelectors>, 'getState'>;\n    let messenger: Pick<ExtensionMessenger, 'post'>;\n    let subscriber: ExtensionChangeSubscriber;\n    let subject: ExtensionEventBroadcaster;\n    let eventEmitter: EventEmitter;\n\n    beforeEach(() => {\n        store = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            getState: jest.fn(() => ({\n                data: {\n                    getExtensions,\n                },\n            })),\n        };\n        messenger = { post: jest.fn() };\n        subscriber = jest.fn();\n\n        subject = new ExtensionEventBroadcaster(\n            store as DataStoreProjection<CheckoutSelectors>,\n            messenger as ExtensionMessenger,\n            {\n                [ExtensionEventType.ConsignmentsChanged]: subscriber,\n            },\n        );\n\n        eventEmitter = new EventEmitter();\n\n        jest.spyOn(window, 'addEventListener').mockImplementation((type, eventListener) => {\n            const listener =\n                typeof eventListener === 'function' ? eventListener : () => eventListener;\n\n            return eventEmitter.addListener(type, listener);\n        });\n\n        jest.spyOn(window, 'removeEventListener').mockImplementation((type, eventListener) => {\n            const listener =\n                typeof eventListener === 'function' ? eventListener : () => eventListener;\n\n            return eventEmitter.removeListener(type, listener);\n        });\n    });\n\n    it('listens to subscribe command', () => {\n        const extensions = getExtensions();\n\n        subject.listen();\n\n        expect(subscriber).not.toHaveBeenCalled();\n\n        eventEmitter.emit('message', {\n            origin: new URL(extensions[0].url).origin,\n            data: {\n                type: ExtensionInternalCommandType.Subscribe,\n                payload: {\n                    eventType: ExtensionEventType.ConsignmentsChanged,\n                    extensionId: extensions[0].id,\n                },\n            },\n        });\n\n        expect(subscriber).toHaveBeenCalled();\n    });\n\n    it('broadcasts event to subscribed extensions', () => {\n        const extensions = getExtensions();\n\n        subject.listen();\n\n        eventEmitter.emit('message', {\n            origin: new URL(extensions[0].url).origin,\n            data: {\n                type: ExtensionInternalCommandType.Subscribe,\n                payload: {\n                    eventType: ExtensionEventType.ConsignmentsChanged,\n                    extensionId: extensions[0].id,\n                },\n            },\n        });\n\n        const event = {\n            type: ExtensionEventType.ConsignmentsChanged,\n            payload: {\n                consignments: getConsignments(),\n                previousConsignments: [],\n            },\n        };\n\n        subject.broadcast(event);\n\n        expect(messenger.post).toHaveBeenCalledWith(extensions[0].id, event);\n    });\n\n    it('listens to unsubscribe command', () => {\n        const extensions = getExtensions();\n\n        subject.listen();\n\n        eventEmitter.emit('message', {\n            origin: new URL(extensions[0].url).origin,\n            data: {\n                type: ExtensionInternalCommandType.Subscribe,\n                payload: {\n                    eventType: ExtensionEventType.ConsignmentsChanged,\n                    extensionId: extensions[0].id,\n                },\n            },\n        });\n\n        eventEmitter.emit('message', {\n            origin: new URL(extensions[0].url).origin,\n            data: {\n                type: ExtensionInternalCommandType.Unsubscribe,\n                payload: {\n                    eventType: ExtensionEventType.ConsignmentsChanged,\n                    extensionId: extensions[0].id,\n                },\n            },\n        });\n\n        const event = {\n            type: ExtensionEventType.ConsignmentsChanged,\n            payload: {\n                consignments: getConsignments(),\n                previousConsignments: [],\n            },\n        };\n\n        subject.broadcast(event);\n\n        expect(messenger.post).not.toHaveBeenCalledWith(extensions[0].id, event);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/extension-event-broadcaster.ts",
    "content": "import { CheckoutSelectors } from '../checkout';\nimport { DataStoreProjection } from '../common/data-store';\nimport { IframeEventListener } from '../common/iframe';\n\nimport { ExtensionEvent, ExtensionEventType } from './extension-events';\nimport {\n    ExtensionInternalCommandMap,\n    ExtensionInternalCommandType,\n    ExtensionSubscribeCommand,\n    ExtensionUnsubscribeCommand,\n} from './extension-internal-commands';\nimport { ExtensionMessenger } from './extension-messenger';\nimport { ExtensionChangeSubscriber, ExtensionChangeUnsubscriber } from './subscribers';\n\nexport class ExtensionEventBroadcaster {\n    private _subscribed: { [id: string]: boolean } = {};\n    private _unsubscribers: { [type: string]: ExtensionChangeUnsubscriber } = {};\n    private _listeners: { [id: string]: IframeEventListener<ExtensionInternalCommandMap> } = {};\n\n    constructor(\n        private _store: DataStoreProjection<CheckoutSelectors>,\n        private _extensionMessenger: ExtensionMessenger,\n        private _subscribers: Record<ExtensionEventType, ExtensionChangeSubscriber>,\n    ) {}\n\n    listen(): void {\n        const {\n            data: { getExtensions },\n        } = this._store.getState();\n\n        getExtensions()?.forEach((extension) => {\n            if (this._listeners[extension.id]) {\n                return;\n            }\n\n            const eventListener = new IframeEventListener<ExtensionInternalCommandMap>(\n                extension.url,\n            );\n\n            eventListener.addListener(\n                ExtensionInternalCommandType.Subscribe,\n                this._handleSubscribe.bind(this),\n            );\n\n            eventListener.addListener(\n                ExtensionInternalCommandType.Unsubscribe,\n                this._handleUnsubscribe.bind(this),\n            );\n\n            eventListener.listen();\n\n            this._listeners[extension.id] = eventListener;\n        });\n    }\n\n    broadcast(event: ExtensionEvent): void {\n        const {\n            data: { getExtensions },\n        } = this._store.getState();\n\n        getExtensions()?.forEach((extension) => {\n            if (!this._subscribed[extension.id]) {\n                return;\n            }\n\n            this._extensionMessenger.post(extension.id, event);\n        });\n    }\n\n    private _handleSubscribe({\n        payload: { eventType, extensionId },\n    }: ExtensionSubscribeCommand): void {\n        this._subscribed[extensionId] = true;\n\n        if (this._unsubscribers[eventType]) {\n            return;\n        }\n\n        this._unsubscribers[eventType] = this._subscribers[eventType](this._store, this);\n    }\n\n    private _handleUnsubscribe({\n        payload: { eventType, extensionId },\n    }: ExtensionUnsubscribeCommand): void {\n        delete this._subscribed[extensionId];\n\n        if (Object.keys(this._subscribed).length) {\n            return;\n        }\n\n        this._unsubscribers[eventType]?.();\n\n        delete this._unsubscribers[eventType];\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-events.ts",
    "content": "import { Consignment } from '../shipping';\n\nexport enum ExtensionEventType {\n    ConsignmentsChanged = 'EXTENSION:CONSIGNMENTS_CHANGED',\n}\n\nexport interface ConsignmentsChangedEvent {\n    type: ExtensionEventType.ConsignmentsChanged;\n    payload: {\n        consignments: Consignment[];\n        previousConsignments: Consignment[];\n    };\n}\n\nexport type ExtensionEvent = ConsignmentsChangedEvent;\n\nexport interface ExtensionEventMap {\n    [ExtensionEventType.ConsignmentsChanged]: ConsignmentsChangedEvent;\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-iframe.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport { Cart } from '../cart';\nimport { getCart } from '../cart/carts.mock';\nimport { parseUrl } from '../common/url';\n\nimport { Extension } from './extension';\nimport { ExtensionIframe } from './extension-iframe';\nimport { ExtensionInternalCommandType } from './extension-internal-commands';\nimport { getExtensions } from './extension.mock';\n\ndescribe('ExtensionIframe', () => {\n    let cart: Cart;\n    let container: HTMLDivElement;\n    let extension: Extension;\n    let extensionIframe: ExtensionIframe;\n    let extensionOrigin: string;\n    let eventEmitter: EventEmitter;\n\n    beforeEach(() => {\n        container = document.createElement('div');\n        container.id = 'containerId';\n        cart = getCart();\n        extension = getExtensions()[0];\n        extensionIframe = new ExtensionIframe('containerId', extension, {\n            cartId: cart.id,\n            parentOrigin: parseUrl('https://www.test.com').origin,\n        });\n        extensionOrigin = parseUrl(extension.url).origin;\n        eventEmitter = new EventEmitter();\n\n        document.getElementById = jest.fn().mockReturnValue(container);\n\n        setTimeout(() => {\n            eventEmitter.emit('message', {\n                origin: extensionOrigin,\n                data: { type: ExtensionInternalCommandType.ResizeIframe },\n            });\n        });\n\n        jest.spyOn(window, 'addEventListener').mockImplementation((type, eventListener) => {\n            const listener =\n                typeof eventListener === 'function' ? eventListener : () => eventListener;\n\n            return eventEmitter.addListener(type, listener);\n        });\n    });\n\n    afterEach(() => {\n        container.innerHTML = '';\n    });\n\n    it('attaches iframe to the container', async () => {\n        await extensionIframe.attach();\n\n        const iframe = container.querySelector('iframe') || document.createElement('iframe');\n\n        const url = new URL(iframe.src);\n\n        expect(url.origin).toBe(extensionOrigin);\n        expect(url.searchParams.get('extensionId')).toBe(extension.id);\n        expect(url.searchParams.get('cartId')).toBe(cart.id);\n        expect(url.searchParams.get('parentOrigin')).toBe('https://www.test.com');\n    });\n\n    it('only attaches iframe once for an extension', async () => {\n        await extensionIframe.attach();\n\n        document.querySelector = jest.fn().mockReturnValue(container);\n        container.querySelector = jest.fn().mockReturnValue(document.createElement('iframe'));\n\n        await extensionIframe.attach();\n        await extensionIframe.attach();\n\n        expect(container.querySelectorAll('iframe')).toHaveLength(1);\n\n        jest.resetAllMocks();\n    });\n\n    it('detaches the iframe from its parent', async () => {\n        const removeChild = jest.spyOn(container, 'removeChild');\n\n        await extensionIframe.attach();\n        extensionIframe.detach();\n\n        expect(removeChild).toHaveBeenCalled();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/extension-iframe.ts",
    "content": "import { createExtensionEventPoster } from './create-extension-event-poster';\nimport { Extension, ExtensionIframeConfig } from './extension';\nimport { ExtensionInternalEvent, ExtensionInternalEventType } from './extension-internal-events';\nimport ResizableIframeCreator from './resizable-iframe-creator';\n\nexport class ExtensionIframe {\n    private _iframe: HTMLIFrameElement | undefined;\n    private _url: URL;\n\n    constructor(\n        private _containerId: string,\n        private _extension: Extension,\n        private _config: ExtensionIframeConfig,\n    ) {\n        const { cartId, parentOrigin } = this._config;\n\n        this._url = new URL(this._extension.url);\n\n        this._url.searchParams.set('extensionId', this._extension.id);\n        this._url.searchParams.set('cartId', cartId);\n        this._url.searchParams.set('parentOrigin', parentOrigin);\n    }\n\n    async attach(): Promise<void> {\n        if (\n            document\n                .querySelector(`[data-extension-id=\"${this._extension.id}\"]`)\n                ?.querySelector('iframe')\n        ) {\n            return;\n        }\n\n        const iframeCreator = new ResizableIframeCreator();\n        const iframeResizerCallback = (type: ExtensionInternalEventType) => {\n            const poster = createExtensionEventPoster<ExtensionInternalEvent>(this._extension);\n\n            poster.post({\n                type,\n            });\n        };\n        const initCallback = () => {\n            iframeResizerCallback(ExtensionInternalEventType.ExtensionReady);\n        };\n        const failedCallback = () => {\n            iframeResizerCallback(ExtensionInternalEventType.ExtensionFailed);\n        };\n\n        this._iframe = await iframeCreator.createFrame(\n            this._url.toString(),\n            this._containerId,\n            initCallback,\n            failedCallback,\n        );\n\n        const container = document.getElementById(this._containerId);\n\n        container?.setAttribute('data-extension-id', this._extension.id);\n    }\n\n    detach(): void {\n        if (this._iframe && this._iframe.parentElement) {\n            this._iframe.parentElement.removeChild(this._iframe);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-internal-commands.ts",
    "content": "import { ExtensionEventType } from './extension-events';\n\nexport enum ExtensionInternalCommandType {\n    Subscribe = 'EXTENSION_INTERNAL:SUBSCRIBE',\n    Unsubscribe = 'EXTENSION_INTERNAL:UNSUBSCRIBE',\n    ResizeIframe = 'EXTENSION_INTERNAL:RESIZE_IFRAME',\n}\n\nexport interface ExtensionSubscribeCommand {\n    type: ExtensionInternalCommandType.Subscribe;\n    payload: {\n        extensionId: string;\n        eventType: ExtensionEventType;\n    };\n}\n\nexport interface ExtensionUnsubscribeCommand {\n    type: ExtensionInternalCommandType.Unsubscribe;\n    payload: {\n        extensionId: string;\n        eventType: ExtensionEventType;\n    };\n}\n\nexport interface ExtensionResizeIframeCommand {\n    type: ExtensionInternalCommandType.ResizeIframe;\n    payload: {\n        extensionId: string;\n    };\n}\n\nexport interface ExtensionInternalCommandMap {\n    [ExtensionInternalCommandType.Subscribe]: ExtensionSubscribeCommand;\n    [ExtensionInternalCommandType.Unsubscribe]: ExtensionUnsubscribeCommand;\n    [ExtensionInternalCommandType.ResizeIframe]: ExtensionResizeIframeCommand;\n}\n\nexport type ExtensionInternalCommand =\n    | ExtensionSubscribeCommand\n    | ExtensionUnsubscribeCommand\n    | ExtensionResizeIframeCommand;\n"
  },
  {
    "path": "packages/core/src/extension/extension-internal-events.ts",
    "content": "export enum ExtensionInternalEventType {\n    ExtensionReady = 'EXTENSION:READY',\n    ExtensionFailed = 'EXTENSION:FAILED',\n}\n\nexport interface ExtensionReadyEvent {\n    type: ExtensionInternalEventType.ExtensionReady;\n}\n\nexport interface ExtensionFailedEvent {\n    type: ExtensionInternalEventType.ExtensionFailed;\n}\n\nexport type ExtensionInternalEvent = ExtensionReadyEvent | ExtensionFailedEvent;\n"
  },
  {
    "path": "packages/core/src/extension/extension-message.ts",
    "content": "import { Consignment } from '../shipping';\n\nimport { ExtensionCommand } from './extension-commands';\nimport { ExtensionEvent } from './extension-events';\nimport { ExtensionQuery } from './extension-queries';\n\nexport const enum ExtensionMessageType {\n    GetConsignments = 'EXTENSION:GET_CONSIGNMENTS',\n}\n\nexport interface GetConsignmentsMessage {\n    type: ExtensionMessageType.GetConsignments;\n    payload: {\n        consignments: Consignment[];\n    };\n}\n\nexport type ExtensionMessage = ExtensionEvent | GetConsignmentsMessage;\n\nexport interface ExtensionMessageMap {\n    [ExtensionMessageType.GetConsignments]: GetConsignmentsMessage;\n}\n\nexport interface ExtensionCommandOrQueryContext {\n    extensionId: string;\n}\n\nexport type ExtensionCommandOrQuery = ExtensionCommand | ExtensionQuery;\n"
  },
  {
    "path": "packages/core/src/extension/extension-messenger.spec.ts",
    "content": "import EventEmitter from 'events';\n\nimport { createCheckoutStore, ReadableCheckoutStore } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\n\nimport {\n    ExtensionNotFoundError,\n    UnsupportedExtensionCommandError,\n    UnsupportedExtensionQueryError,\n} from './errors';\nimport { Extension } from './extension';\nimport { ExtensionCommandMap, ExtensionCommandType } from './extension-commands';\nimport { ExtensionEvent } from './extension-events';\nimport { ExtensionMessenger } from './extension-messenger';\nimport { ExtensionQueryMap, ExtensionQueryType } from './extension-queries';\nimport { getExtensionEvent, getExtensions } from './extension.mock';\nimport { WorkerExtensionMessenger } from './worker-extension-messenger';\n\ndescribe('ExtensionMessenger', () => {\n    let extensionCommandHandler: jest.Mock;\n    let extensionQueryHandler: jest.Mock;\n    let extension: Extension;\n    let extensionMessenger: ExtensionMessenger;\n    let workerExtensionMessenger: WorkerExtensionMessenger;\n    let event: {\n        origin: string;\n        data: ExtensionEvent;\n    };\n    let store: ReadableCheckoutStore;\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreState());\n        extension = getExtensions()[0];\n        event = getExtensionEvent();\n        extensionCommandHandler = jest.fn();\n        extensionQueryHandler = jest.fn();\n        workerExtensionMessenger = new WorkerExtensionMessenger();\n    });\n\n    describe('#listenForCommand', () => {\n        let listener: IframeEventListener<ExtensionCommandMap>;\n\n        beforeEach(() => {\n            listener = new IframeEventListener(extension.url);\n\n            const listeners = {\n                [extension.id]: listener,\n            };\n\n            extensionMessenger = new ExtensionMessenger(\n                store,\n                workerExtensionMessenger,\n                listeners,\n                {},\n                {},\n            );\n        });\n\n        it('should throw if unable to find the extension', () => {\n            expect(() =>\n                extensionMessenger.listenForCommand(\n                    'xxx',\n                    ExtensionCommandType.ReloadCheckout,\n                    extensionCommandHandler,\n                ),\n            ).toThrow(ExtensionNotFoundError);\n        });\n\n        it('should throw if trying to listen for an unsupported command', () => {\n            expect(() =>\n                extensionMessenger.listenForCommand(\n                    extension.id,\n                    'INVALID_COMMAND' as ExtensionCommandType,\n                    extensionCommandHandler,\n                ),\n            ).toThrow(UnsupportedExtensionCommandError);\n        });\n\n        it('should listen and add an event listener', () => {\n            const eventEmitter = new EventEmitter();\n\n            jest.spyOn(listener, 'addListener').mockImplementation((type, listener) => {\n                eventEmitter.addListener(type, ({ context }) => {\n                    if (type === ExtensionCommandType.ReloadCheckout) {\n                        listener({ type }, context);\n                    }\n                });\n            });\n\n            extensionMessenger.listenForCommand(\n                extension.id,\n                ExtensionCommandType.ReloadCheckout,\n                extensionCommandHandler,\n            );\n\n            eventEmitter.emit(ExtensionCommandType.ReloadCheckout, {\n                context: { extensionId: extension.id },\n            });\n\n            expect(extensionCommandHandler).toHaveBeenCalledWith(\n                { type: ExtensionCommandType.ReloadCheckout },\n                { extensionId: extension.id },\n            );\n        });\n\n        it('should listen to commands emitted by same extension', () => {\n            const eventEmitter = new EventEmitter();\n\n            jest.spyOn(listener, 'addListener').mockImplementation((type, listener) => {\n                eventEmitter.addListener(type, ({ context }) => {\n                    if (type === ExtensionCommandType.ReloadCheckout) {\n                        listener({ type }, context);\n                    }\n                });\n            });\n\n            extensionMessenger.listenForCommand(\n                extension.id,\n                ExtensionCommandType.ReloadCheckout,\n                extensionCommandHandler,\n            );\n\n            eventEmitter.emit(ExtensionCommandType.ReloadCheckout, {\n                context: { extensionId: extension.id },\n            });\n\n            eventEmitter.emit(ExtensionCommandType.ReloadCheckout, {\n                context: { extensionId: getExtensions()[1].id },\n            });\n\n            expect(extensionCommandHandler).toHaveBeenCalledTimes(1);\n        });\n\n        it('should remove the event listener', () => {\n            const eventEmitter = new EventEmitter();\n\n            jest.spyOn(listener, 'addListener').mockImplementation((type, listener) => {\n                eventEmitter.addListener(type, ({ context }) => {\n                    if (type === ExtensionCommandType.ReloadCheckout) {\n                        listener({ type }, context);\n                    }\n                });\n            });\n\n            jest.spyOn(listener, 'removeListener').mockImplementation((type) => {\n                eventEmitter.removeAllListeners(type);\n            });\n\n            const remover = extensionMessenger.listenForCommand(\n                extension.id,\n                ExtensionCommandType.ReloadCheckout,\n                extensionCommandHandler,\n            );\n\n            remover();\n\n            eventEmitter.emit(ExtensionCommandType.ReloadCheckout, {\n                context: { extensionId: extension.id },\n            });\n\n            expect(extensionCommandHandler).not.toHaveBeenCalled();\n        });\n\n        it('should stop listening', () => {\n            jest.spyOn(listener, 'stopListen');\n\n            extensionMessenger.listenForCommand(\n                extension.id,\n                ExtensionCommandType.ReloadCheckout,\n                extensionCommandHandler,\n            );\n\n            extensionMessenger.stopListen(extension.id);\n\n            // FIXME\n            expect(listener.stopListen).toHaveBeenCalled();\n        });\n    });\n\n    describe('#listenForQuery', () => {\n        let listener: IframeEventListener<ExtensionQueryMap>;\n\n        beforeEach(() => {\n            listener = new IframeEventListener(extension.url);\n\n            const listeners = {\n                [extension.id]: listener,\n            };\n\n            extensionMessenger = new ExtensionMessenger(\n                store,\n                workerExtensionMessenger,\n                {},\n                listeners,\n                {},\n            );\n        });\n\n        it('should throw if unable to find the extension', () => {\n            expect(() =>\n                extensionMessenger.listenForQuery(\n                    'xxx',\n                    ExtensionQueryType.GetConsignments,\n                    extensionQueryHandler,\n                ),\n            ).toThrow(ExtensionNotFoundError);\n        });\n\n        it('should throw if trying to listen for an unsupported command', () => {\n            expect(() =>\n                extensionMessenger.listenForQuery(\n                    extension.id,\n                    'INVALID_QUERY' as ExtensionQueryType,\n                    extensionQueryHandler,\n                ),\n            ).toThrow(UnsupportedExtensionQueryError);\n        });\n\n        it('should listen and add an event listener', () => {\n            const eventEmitter = new EventEmitter();\n\n            jest.spyOn(listener, 'addListener').mockImplementation((type, listener) => {\n                eventEmitter.addListener(type, ({ context }) => {\n                    if (type === ExtensionQueryType.GetConsignments) {\n                        listener({ type }, context);\n                    }\n                });\n            });\n\n            extensionMessenger.listenForQuery(\n                extension.id,\n                ExtensionQueryType.GetConsignments,\n                extensionQueryHandler,\n            );\n\n            eventEmitter.emit(ExtensionQueryType.GetConsignments, {\n                context: { extensionId: extension.id },\n            });\n\n            expect(extensionQueryHandler).toHaveBeenCalledWith(\n                { type: ExtensionQueryType.GetConsignments },\n                { extensionId: extension.id },\n            );\n        });\n\n        it('should listen to commands emitted by same extension', () => {\n            const eventEmitter = new EventEmitter();\n\n            jest.spyOn(listener, 'addListener').mockImplementation((type, listener) => {\n                eventEmitter.addListener(type, ({ context }) => {\n                    if (type === ExtensionQueryType.GetConsignments) {\n                        listener({ type }, context);\n                    }\n                });\n            });\n\n            extensionMessenger.listenForQuery(\n                extension.id,\n                ExtensionQueryType.GetConsignments,\n                extensionQueryHandler,\n            );\n\n            eventEmitter.emit(ExtensionQueryType.GetConsignments, {\n                context: { extensionId: extension.id },\n            });\n\n            eventEmitter.emit(ExtensionQueryType.GetConsignments, {\n                context: { extensionId: getExtensions()[1].id },\n            });\n\n            expect(extensionQueryHandler).toHaveBeenCalledTimes(1);\n        });\n\n        it('should remove the event listener', () => {\n            const eventEmitter = new EventEmitter();\n\n            jest.spyOn(listener, 'addListener').mockImplementation((type, listener) => {\n                eventEmitter.addListener(type, ({ context }) => {\n                    if (type === ExtensionQueryType.GetConsignments) {\n                        listener({ type }, context);\n                    }\n                });\n            });\n\n            jest.spyOn(listener, 'removeListener').mockImplementation((type) => {\n                eventEmitter.removeAllListeners(type);\n            });\n\n            const remover = extensionMessenger.listenForQuery(\n                extension.id,\n                ExtensionQueryType.GetConsignments,\n                extensionQueryHandler,\n            );\n\n            remover();\n\n            eventEmitter.emit(ExtensionQueryType.GetConsignments, {\n                context: { extensionId: extension.id },\n            });\n\n            expect(extensionQueryHandler).not.toHaveBeenCalled();\n        });\n\n        it('should stop listening', () => {\n            jest.spyOn(listener, 'stopListen');\n\n            extensionMessenger.listenForQuery(\n                extension.id,\n                ExtensionQueryType.GetConsignments,\n                extensionQueryHandler,\n            );\n\n            extensionMessenger.stopListen(extension.id);\n\n            // FIXME\n            expect(listener.stopListen).toHaveBeenCalled();\n        });\n    });\n\n    describe('#post()', () => {\n        it('should log out the error if an extension has not yet been rendered', () => {\n            document.querySelector = jest.fn().mockReturnValue(undefined);\n\n            extensionMessenger = new ExtensionMessenger(\n                store,\n                workerExtensionMessenger,\n                {},\n                {},\n                {},\n            );\n\n            jest.spyOn(extensionMessenger, 'clearCacheById');\n            jest.spyOn(console, 'log');\n\n            extensionMessenger.post(extension.id, event.data);\n\n            expect(extensionMessenger.clearCacheById).toHaveBeenCalledWith(extension.id);\n            // eslint-disable-next-line no-console\n            expect(console.log).toHaveBeenCalled();\n        });\n\n        it('should post to an extension', () => {\n            const container = document.createElement('div');\n            const iframe = document.createElement('iframe');\n\n            container.appendChild(iframe);\n\n            const poster = new IframeEventPoster(extension.url, window);\n            const posters = {\n                [extension.id]: poster,\n            };\n\n            extensionMessenger = new ExtensionMessenger(\n                store,\n                workerExtensionMessenger,\n                {},\n                {},\n                posters,\n            );\n\n            document.querySelector = jest.fn().mockReturnValue(container);\n\n            jest.spyOn(iframe, 'contentWindow', 'get').mockReturnValue(window);\n            jest.spyOn(poster, 'post');\n\n            extensionMessenger.post(extension.id, event.data);\n\n            expect(poster.post).toHaveBeenCalledWith(event.data);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/extension-messenger.ts",
    "content": "import { ReadableCheckoutStore } from '../checkout';\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\n\nimport { createExtensionEventPoster } from './create-extension-event-poster';\nimport {\n    ExtensionNotFoundError,\n    UnsupportedExtensionCommandError,\n    UnsupportedExtensionQueryError,\n} from './errors';\nimport { Extension, ExtensionType } from './extension';\nimport { ExtensionCommandMap, ExtensionCommandType } from './extension-commands';\nimport { ExtensionCommandOrQueryContext, ExtensionMessage } from './extension-message';\nimport { ExtensionQueryMap, ExtensionQueryType } from './extension-queries';\nimport { WorkerExtensionMessenger } from './worker-extension-messenger';\n\nexport class ExtensionMessenger {\n    private _extensions: Extension[] | undefined;\n\n    constructor(\n        private _store: ReadableCheckoutStore,\n        private _workerExtensionMessenger: WorkerExtensionMessenger,\n        private _commandListeners: {\n            [extensionId: string]: IframeEventListener<ExtensionCommandMap>;\n        } = {},\n        private _queryListeners: {\n            [extensionId: string]: IframeEventListener<ExtensionQueryMap>;\n        } = {},\n        private _posters: { [extensionId: string]: IframeEventPoster<ExtensionMessage> } = {},\n    ) {}\n\n    clearCacheByRegion(region: string): void {\n        const extension = this._getExtensionByRegion(region);\n\n        if (extension.type === ExtensionType.Worker) {\n            this._workerExtensionMessenger.clearCacheById(extension.id);\n\n            return;\n        }\n\n        this.clearCacheById(extension.id);\n    }\n\n    clearCacheById(extensionId: string): void {\n        const extension = this._getExtensionById(extensionId);\n\n        if (extension.type === ExtensionType.Worker) {\n            this._workerExtensionMessenger.clearCacheById(extension.id);\n\n            return;\n        }\n\n        if (this._commandListeners[extensionId]) {\n            delete this._commandListeners[extensionId];\n        }\n\n        if (this._queryListeners[extensionId]) {\n            delete this._queryListeners[extensionId];\n        }\n\n        if (this._posters[extensionId]) {\n            delete this._posters[extensionId];\n        }\n    }\n\n    listenForCommand<T extends keyof ExtensionCommandMap>(\n        extensionId: string,\n        command: T,\n        commandHandler: (\n            command: ExtensionCommandMap[T],\n            context?: ExtensionCommandOrQueryContext,\n        ) => Promise<void> | void,\n    ): () => void {\n        const extension = this._getExtensionById(extensionId);\n\n        if (extension.type === ExtensionType.Worker) {\n            return this._workerExtensionMessenger.listenForCommand(\n                extensionId,\n                command,\n                commandHandler,\n            );\n        }\n\n        if (!this._commandListeners[extensionId]) {\n            this._commandListeners[extensionId] = new IframeEventListener(extension.url);\n        }\n\n        const listener = this._commandListeners[extensionId];\n\n        listener.listen();\n\n        const validCommandType = this._validateCommand<T>(command);\n\n        const commandHandlerProxy = (\n            command: ExtensionCommandMap[T],\n            context?: ExtensionCommandOrQueryContext,\n        ) => {\n            if (context?.extensionId === extensionId) {\n                commandHandler(command, context);\n            }\n        };\n\n        listener.addListener(validCommandType, commandHandlerProxy);\n\n        return () => {\n            listener.removeListener(validCommandType, commandHandlerProxy);\n        };\n    }\n\n    listenForQuery<T extends keyof ExtensionQueryMap>(\n        extensionId: string,\n        query: T,\n        queryHandler: (\n            query: ExtensionQueryMap[T],\n            context?: ExtensionCommandOrQueryContext,\n        ) => Promise<void> | void,\n    ): () => void {\n        const extension = this._getExtensionById(extensionId);\n\n        if (extension.type === ExtensionType.Worker) {\n            return this._workerExtensionMessenger.listenForQuery(extensionId, query, queryHandler);\n        }\n\n        if (!this._queryListeners[extensionId]) {\n            this._queryListeners[extensionId] = new IframeEventListener(extension.url);\n        }\n\n        const listener = this._queryListeners[extensionId];\n\n        listener.listen();\n\n        const validQueryType = this._validateQuery<T>(query);\n\n        const queryHandlerProxy = (\n            query: ExtensionQueryMap[T],\n            context?: ExtensionCommandOrQueryContext,\n        ) => {\n            if (context?.extensionId === extensionId) {\n                queryHandler(query, context);\n            }\n        };\n\n        listener.addListener(validQueryType, queryHandlerProxy);\n\n        return () => {\n            listener.removeListener(validQueryType, queryHandlerProxy);\n        };\n    }\n\n    stopListen(extensionId: string): void {\n        const extension = this._getExtensionById(extensionId);\n\n        if (extension.type === ExtensionType.Worker) {\n            this._workerExtensionMessenger.stopListen(extensionId);\n\n            return;\n        }\n\n        if (this._commandListeners[extensionId]) {\n            this._commandListeners[extensionId].stopListen();\n        }\n\n        if (this._queryListeners[extensionId]) {\n            this._queryListeners[extensionId].stopListen();\n        }\n    }\n\n    post(extensionId: string, message: ExtensionMessage): void {\n        try {\n            const extension = this._getExtensionById(extensionId);\n\n            if (extension.type === ExtensionType.Worker) {\n                this._workerExtensionMessenger.post(extensionId, message);\n\n                return;\n            }\n\n            if (!this._posters[extensionId]) {\n                this._posters[extensionId] =\n                    createExtensionEventPoster<ExtensionMessage>(extension);\n            }\n\n            this._posters[extensionId].post(message);\n        } catch (error) {\n            this.clearCacheById(extensionId);\n            // eslint-disable-next-line no-console\n            console.log(\n                `Unable to post event to extension(${extensionId}) because extension iframe is not mounted.\\nThe event that could not be delivered:`,\n                message,\n            );\n        }\n    }\n\n    private _getExtensionById(extensionId: string): Extension {\n        this._getExtensions();\n\n        const extension = this._extensions?.find((e) => e.id === extensionId);\n\n        if (!extension) {\n            throw new ExtensionNotFoundError(\n                `Unable to proceed due to no extension found for ID: ${extensionId}.`,\n            );\n        }\n\n        return extension;\n    }\n\n    private _getExtensionByRegion(region: string): Extension {\n        this._getExtensions();\n\n        const extension = this._extensions?.find((e) => e.region === region);\n\n        if (!extension) {\n            throw new ExtensionNotFoundError(\n                `Unable to proceed due to no extension found for region: ${region}.`,\n            );\n        }\n\n        return extension;\n    }\n\n    private _getExtensions(): void {\n        if (this._extensions) {\n            return;\n        }\n\n        const {\n            extensions: { getExtensions },\n        } = this._store.getState();\n\n        this._extensions = getExtensions();\n\n        if (!this._extensions) {\n            throw new ExtensionNotFoundError(`Extension configurations not found.`);\n        }\n    }\n\n    private _validateCommand<T extends keyof ExtensionCommandMap>(command: T): T {\n        if (Object.values(ExtensionCommandType).includes(command)) {\n            return command;\n        }\n\n        throw new UnsupportedExtensionCommandError();\n    }\n    private _validateQuery<T extends keyof ExtensionQueryMap>(query: T): T {\n        if (Object.values(ExtensionQueryType).includes(query)) {\n            return query;\n        }\n\n        throw new UnsupportedExtensionQueryError();\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-queries.ts",
    "content": "export type ExtensionQuery = GetConsignmentsQuery;\n\nexport enum ExtensionQueryType {\n    GetConsignments = 'EXTENSION:GET_CONSIGNMENTS',\n}\n\nexport interface GetConsignmentsQuery {\n    type: ExtensionQueryType.GetConsignments;\n    payload?: {\n        useCache?: boolean;\n    };\n}\n\nexport interface ExtensionQueryMap {\n    [ExtensionQueryType.GetConsignments]: GetConsignmentsQuery;\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport {\n    CheckoutHydrateAction,\n    CheckoutHydrateActionType,\n} from '../checkout/checkout-hydrate-actions';\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\n\nimport { Extension } from './extension';\nimport { ExtensionAction, ExtensionActionType } from './extension-actions';\nimport {\n    DEFAULT_STATE,\n    ExtensionErrorsState,\n    ExtensionState,\n    ExtensionStatusesState,\n} from './extension-state';\n\nexport function extensionReducer(\n    state: ExtensionState = DEFAULT_STATE,\n    action: Action,\n): ExtensionState {\n    const reducer = combineReducers<ExtensionState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: Extension[] | undefined,\n    action: ExtensionAction | CheckoutHydrateAction,\n): Extension[] | undefined {\n    if (action.type === ExtensionActionType.LoadExtensionsSucceeded) {\n        return arrayReplace(data, action.payload);\n    }\n\n    if (action.type === CheckoutHydrateActionType.HydrateInitialState) {\n        return arrayReplace(data, action.payload?.extensions);\n    }\n\n    return data;\n}\n\nfunction errorsReducer(\n    errors: ExtensionErrorsState = DEFAULT_STATE.errors,\n    action: ExtensionAction,\n): ExtensionErrorsState {\n    switch (action.type) {\n        case ExtensionActionType.LoadExtensionsRequested:\n        case ExtensionActionType.LoadExtensionsSucceeded:\n            return objectSet(errors, 'loadError', undefined);\n\n        case ExtensionActionType.RenderExtensionRequested:\n        case ExtensionActionType.RenderExtensionSucceeded:\n            return objectSet(errors, 'renderError', undefined);\n\n        case ExtensionActionType.LoadExtensionsFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        case ExtensionActionType.RenderExtensionFailed:\n            return objectSet(errors, 'renderError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: ExtensionStatusesState = DEFAULT_STATE.statuses,\n    action: ExtensionAction,\n): ExtensionStatusesState {\n    switch (action.type) {\n        case ExtensionActionType.LoadExtensionsRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case ExtensionActionType.LoadExtensionsSucceeded:\n        case ExtensionActionType.LoadExtensionsFailed:\n            return objectSet(statuses, 'isLoading', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-reduer.spec.ts",
    "content": "import { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport { ExtensionActionType } from './extension-actions';\nimport { extensionReducer } from './extension-reducer';\nimport { ExtensionState } from './extension-state';\nimport { getExtensions } from './extension.mock';\n\ndescribe('extensionReducer()', () => {\n    let initialState: ExtensionState;\n\n    beforeEach(() => {\n        initialState = {\n            data: [],\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    it('returns new state when loading extensions', () => {\n        const action = {\n            type: ExtensionActionType.LoadExtensionsRequested,\n        };\n\n        expect(extensionReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: {},\n            statuses: { isLoading: true },\n        });\n    });\n\n    it('returns new state when extensions are loaded', () => {\n        const action = {\n            type: ExtensionActionType.LoadExtensionsSucceeded,\n            payload: getExtensions(),\n        };\n\n        expect(extensionReducer(initialState, action)).toEqual({\n            ...initialState,\n            data: action.payload,\n            errors: { loadError: undefined },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns new state when extensions cannot be loaded', () => {\n        const action = {\n            type: ExtensionActionType.LoadExtensionsFailed,\n            payload: getErrorResponse(),\n        };\n\n        expect(extensionReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: { loadError: action.payload },\n            statuses: { isLoading: false },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/extension-request-sender.spec.ts",
    "content": "import {\n    createRequestSender,\n    createTimeout,\n    RequestSender,\n    Response,\n} from '@bigcommerce/request-sender';\n\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getResponse } from '../common/http-request/responses.mock';\n\nimport { Extension } from './extension';\nimport { ExtensionRequestSender, EXTENSIONS_API_URL } from './extension-request-sender';\nimport { getExtensions } from './extension.mock';\n\ndescribe('ExtensionRequestSender', () => {\n    let extensionRequestSender: ExtensionRequestSender;\n    let requestSender: RequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        extensionRequestSender = new ExtensionRequestSender(requestSender);\n    });\n\n    describe('#loadExtensions()', () => {\n        let response: Response<Extension[]>;\n\n        beforeEach(() => {\n            response = getResponse(getExtensions());\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('loads extensions', async () => {\n            expect(await extensionRequestSender.loadExtensions()).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith(EXTENSIONS_API_URL, {\n                timeout: undefined,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('loads extensions with timeout', async () => {\n            const options = { timeout: createTimeout() };\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n\n            expect(await extensionRequestSender.loadExtensions(options)).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith(EXTENSIONS_API_URL, {\n                ...options,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('loads extensions with params', async () => {\n            const options = { params: { method: 'method-id' } };\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n\n            expect(await extensionRequestSender.loadExtensions(options)).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith(EXTENSIONS_API_URL, {\n                ...options,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/extension-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport { Extension } from './extension';\n\nexport const EXTENSIONS_API_URL = '/api/storefront/checkout-extensions';\n\nexport class ExtensionRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    loadExtensions({ timeout, params }: RequestOptions = {}): Promise<Response<Extension[]>> {\n        return this._requestSender.get(EXTENSIONS_API_URL, {\n            timeout,\n            headers: {\n                Accept: ContentType.JsonV1,\n                ...SDK_VERSION_HEADERS,\n            },\n            params,\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-selector.spec.ts",
    "content": "import { CheckoutStoreState } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport { Extension, ExtensionRegion } from './extension';\nimport {\n    createExtensionSelectorFactory,\n    ExtensionSelector,\n    ExtensionSelectorFactory,\n} from './extension-selector';\nimport { getExtensions } from './extension.mock';\n\ndescribe('ExtensionSelector', () => {\n    let createExtensionSelector: ExtensionSelectorFactory;\n    let extensionSelector: ExtensionSelector;\n    let state: CheckoutStoreState;\n\n    beforeEach(() => {\n        createExtensionSelector = createExtensionSelectorFactory();\n        state = getCheckoutStoreState();\n    });\n\n    describe('#getExtensions()', () => {\n        it('returns a list of extensions', () => {\n            extensionSelector = createExtensionSelector(state.extensions);\n\n            expect(extensionSelector.getExtensions()).toEqual(state.extensions.data);\n        });\n\n        it('returns an empty array if there are no extension', () => {\n            extensionSelector = createExtensionSelector({\n                ...state.extensions,\n                data: [],\n            });\n\n            expect(extensionSelector.getExtensions()).toEqual([]);\n        });\n    });\n\n    describe('#getExtensionByRegion()', () => {\n        it('returns the extension for the specified region', () => {\n            extensionSelector = createExtensionSelector(state.extensions);\n\n            const extension = extensionSelector.getExtensionByRegion(\n                ExtensionRegion.ShippingShippingAddressFormAfter,\n            );\n\n            expect(extension).toEqual(getExtensions()[1]);\n        });\n\n        it('returns the first extension if multiple extensions match the region', () => {\n            const extensions = [\n                ...getExtensions().slice(0, 1),\n                {\n                    ...getExtensions().slice(0, 1),\n                    id: '789',\n                },\n            ] as Extension[];\n\n            extensionSelector = createExtensionSelector({\n                ...state.extensions,\n                data: extensions,\n            });\n\n            const extension = extensionSelector.getExtensionByRegion(\n                ExtensionRegion.ShippingShippingAddressFormBefore,\n            );\n\n            expect(extension).toEqual(extensions[0]);\n        });\n\n        it('returns undefined if no extension matches the region', () => {\n            extensionSelector = createExtensionSelector({\n                ...state.extensions,\n                data: getExtensions().slice(0, 1),\n            });\n\n            const extension = extensionSelector.getExtensionByRegion(\n                ExtensionRegion.ShippingShippingAddressFormAfter,\n            );\n\n            expect(extension).toBeUndefined();\n        });\n    });\n\n    describe('#getLoadError()', () => {\n        it('returns error if unable to load', () => {\n            const loadError = new RequestError(getErrorResponse());\n\n            extensionSelector = createExtensionSelector({\n                ...state.extensions,\n                errors: { loadError },\n            });\n\n            expect(extensionSelector.getLoadError()).toEqual(loadError);\n        });\n\n        it('does not returns error if able to load', () => {\n            extensionSelector = createExtensionSelector(state.extensions);\n\n            expect(extensionSelector.getLoadError()).toBeUndefined();\n        });\n    });\n\n    describe('#isLoading()', () => {\n        it('returns true if loading extensions', () => {\n            extensionSelector = createExtensionSelector({\n                ...state.extensions,\n                statuses: { isLoading: true },\n            });\n\n            expect(extensionSelector.isLoading()).toBe(true);\n        });\n\n        it('returns false if not loading extensions', () => {\n            extensionSelector = createExtensionSelector(state.extensions);\n\n            expect(extensionSelector.isLoading()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/extension-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport { Extension, ExtensionRegion } from './extension';\nimport { DEFAULT_STATE, ExtensionState } from './extension-state';\n\nexport interface ExtensionSelector {\n    getExtensions(): Extension[] | undefined;\n    getExtensionByRegion(region: ExtensionRegion): Extension | undefined;\n    getLoadError(): Error | undefined;\n    isLoading(): boolean;\n}\n\nexport type ExtensionSelectorFactory = (state: ExtensionState) => ExtensionSelector;\n\nexport function createExtensionSelectorFactory(): ExtensionSelectorFactory {\n    const getExtensions = createSelector(\n        (state: ExtensionState) => state.data,\n        (data) => () => data,\n    );\n\n    const getExtensionByRegion = createSelector(\n        (state: ExtensionState) => state.data,\n        (data) => (region: ExtensionRegion) => data?.find((e) => e.region === region),\n    );\n\n    const getLoadError = createSelector(\n        (state: ExtensionState) => state.errors.loadError,\n        (error) => () => error,\n    );\n\n    const isLoading = createSelector(\n        (state: ExtensionState) => state.statuses.isLoading,\n        (isLoading) => () => !!isLoading,\n    );\n\n    return memoizeOne((state: ExtensionState = DEFAULT_STATE): ExtensionSelector => {\n        return {\n            getExtensions: getExtensions(state),\n            getExtensionByRegion: getExtensionByRegion(state),\n            getLoadError: getLoadError(state),\n            isLoading: isLoading(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-service.spec.ts",
    "content": "import EventEmitter from 'events';\nimport { noop } from 'lodash';\n\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\n\nimport { ExtensionCommand } from './extension-commands';\nimport { ExtensionEventMap, ExtensionEventType } from './extension-events';\nimport {\n    ExtensionInternalCommand,\n    ExtensionInternalCommandType,\n} from './extension-internal-commands';\nimport { ExtensionInternalEventType } from './extension-internal-events';\nimport {\n    ExtensionCommandOrQuery,\n    ExtensionCommandOrQueryContext,\n    ExtensionMessageMap,\n    ExtensionMessageType,\n    GetConsignmentsMessage,\n} from './extension-message';\nimport ExtensionService from './extension-service';\n\ndescribe('ExtensionService', () => {\n    let extensionService: ExtensionService;\n    let messageListener: IframeEventListener<ExtensionMessageMap>;\n    let eventListener: IframeEventListener<ExtensionEventMap>;\n    let eventPoster: IframeEventPoster<ExtensionCommandOrQuery, ExtensionCommandOrQueryContext>;\n    let internalEventPoster: IframeEventPoster<ExtensionInternalCommand>;\n\n    beforeEach(() => {\n        messageListener = new IframeEventListener('https://mybigcommerce.com');\n        eventListener = new IframeEventListener('https://mybigcommerce.com');\n        eventPoster = new IframeEventPoster('https://mybigcommerce.com');\n        internalEventPoster = new IframeEventPoster('https://mybigcommerce.com');\n\n        jest.spyOn(eventListener, 'listen');\n        jest.spyOn(eventListener, 'addListener');\n        jest.spyOn(eventPoster, 'post');\n        jest.spyOn(internalEventPoster, 'post');\n\n        extensionService = new ExtensionService(\n            messageListener,\n            eventListener,\n            eventPoster,\n            internalEventPoster,\n        );\n    });\n\n    it('#initializes successfully', () => {\n        void extensionService.initialize('test');\n\n        expect(eventListener.listen).toHaveBeenCalled();\n    });\n\n    it('#initialize throws error if no extension Id is passed', async () => {\n        await expect(extensionService.initialize(undefined as unknown as string)).rejects.toThrow(\n            'Extension Id not found.',\n        );\n    });\n\n    it('posts internal resize iframe command to host', () => {\n        void extensionService.initialize('test');\n\n        expect(internalEventPoster.post).toHaveBeenCalledWith(\n            {\n                type: ExtensionInternalCommandType.ResizeIframe,\n                payload: { extensionId: 'test' },\n            },\n            {\n                successType: ExtensionInternalEventType.ExtensionReady,\n                errorType: ExtensionInternalEventType.ExtensionFailed,\n            },\n        );\n    });\n\n    it('throws error if host side asserts that the extension failed', async () => {\n        jest.spyOn(internalEventPoster, 'post').mockRejectedValue({\n            type: ExtensionInternalEventType.ExtensionFailed,\n        });\n\n        await expect(extensionService.initialize('test')).rejects.toThrow(\n            'Extension failed to load within 60 seconds; please reload and try again.',\n        );\n    });\n\n    it('#post throws error if event name is not passed correctly', () => {\n        void extensionService.initialize('test');\n\n        const event = {\n            type: 'some-event',\n        } as unknown as ExtensionCommand;\n\n        expect(() => extensionService.post(event)).toThrow('some-event is not supported.');\n    });\n\n    it('#addListener adds callback as noop if no callback method is passed', () => {\n        void extensionService.initialize('test');\n\n        extensionService.addListener(ExtensionEventType.ConsignmentsChanged);\n\n        expect(eventListener.addListener).toHaveBeenCalledWith(\n            ExtensionEventType.ConsignmentsChanged,\n            noop,\n        );\n    });\n\n    it('#addListener is not called if event name is not correct', () => {\n        void extensionService.initialize('test');\n\n        expect(() => extensionService.addListener('someevent' as ExtensionEventType)).toThrow(\n            'someevent is not supported.',\n        );\n    });\n\n    it('#addListener is called correctly with params', () => {\n        void extensionService.initialize('test');\n\n        const callbackFn = jest.fn();\n\n        extensionService.addListener(ExtensionEventType.ConsignmentsChanged, callbackFn);\n\n        expect(eventListener.addListener).toHaveBeenCalledWith(\n            ExtensionEventType.ConsignmentsChanged,\n            callbackFn,\n        );\n    });\n\n    it('getConsignments()', async () => {\n        const eventEmitter = new EventEmitter();\n        const replyMessage: GetConsignmentsMessage = {\n            type: ExtensionMessageType.GetConsignments,\n            payload: {\n                consignments: [],\n            },\n        };\n\n        jest.spyOn(extensionService, 'post');\n        jest.spyOn(window, 'addEventListener').mockImplementation((type, eventListener) => {\n            const listener =\n                typeof eventListener === 'function' ? eventListener : () => eventListener;\n\n            return eventEmitter.addListener(type, listener);\n        });\n        jest.spyOn(eventPoster, 'post').mockImplementation(() => {\n            eventEmitter.emit('message', {\n                origin: 'https://mybigcommerce.com',\n                data: replyMessage,\n                type: ExtensionMessageType.GetConsignments,\n            });\n\n            return Promise.resolve(replyMessage);\n        });\n        jest.spyOn(messageListener, 'removeListener');\n\n        void extensionService.initialize('test');\n\n        const useCache = Math.random() >= 0.5;\n\n        expect(await extensionService.getConsignments(useCache)).toBe(\n            replyMessage.payload.consignments,\n        );\n        expect(extensionService.post).toHaveBeenCalledWith({\n            type: ExtensionMessageType.GetConsignments,\n            payload: { useCache },\n        });\n        expect(messageListener.removeListener).toHaveBeenCalled();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/extension-service.ts",
    "content": "import { noop } from 'lodash';\n\nimport { Consignment } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\n\nimport { ExtensionCommandType } from './extension-commands';\nimport { ExtensionEventMap, ExtensionEventType } from './extension-events';\nimport {\n    ExtensionInternalCommand,\n    ExtensionInternalCommandType,\n} from './extension-internal-commands';\nimport { ExtensionInternalEventType } from './extension-internal-events';\nimport {\n    ExtensionCommandOrQuery,\n    ExtensionCommandOrQueryContext,\n    ExtensionMessageMap,\n    ExtensionMessageType,\n    GetConsignmentsMessage,\n} from './extension-message';\nimport { ExtensionQueryType } from './extension-queries';\n\nexport default class ExtensionService {\n    private _extensionId?: string;\n\n    constructor(\n        private _messageListener: IframeEventListener<ExtensionMessageMap>,\n        private _eventListener: IframeEventListener<ExtensionEventMap>,\n        private _messagePoster: IframeEventPoster<\n            ExtensionCommandOrQuery,\n            ExtensionCommandOrQueryContext\n        >,\n        private _internalCommandPoster: IframeEventPoster<ExtensionInternalCommand>,\n    ) {\n        this._messagePoster.setTarget(window.parent);\n        this._internalCommandPoster.setTarget(window.parent);\n    }\n\n    async initialize(extensionId: string): Promise<void> {\n        if (!extensionId) {\n            throw new Error('Extension Id not found.');\n        }\n\n        this._extensionId = extensionId;\n\n        this._messageListener.listen();\n        this._eventListener.listen();\n        this._messagePoster.setContext({ extensionId });\n\n        try {\n            await this._internalCommandPoster.post(\n                {\n                    type: ExtensionInternalCommandType.ResizeIframe,\n                    payload: { extensionId },\n                },\n                {\n                    successType: ExtensionInternalEventType.ExtensionReady,\n                    errorType: ExtensionInternalEventType.ExtensionFailed,\n                },\n            );\n        } catch (event) {\n            if (this._isExtensionFailedEvent(event)) {\n                throw new Error(\n                    'Extension failed to load within 60 seconds; please reload and try again.',\n                );\n            }\n        }\n    }\n\n    post(command: ExtensionCommandOrQuery): void {\n        if (!this._isCommandOrQueryType(command.type)) {\n            throw new Error(`${command.type} is not supported.`);\n        }\n\n        this._messagePoster.post(command);\n    }\n\n    addListener(eventType: ExtensionEventType, callback: () => void = noop): () => void {\n        if (!this._extensionId) {\n            throw new Error('Extension is not initialized.');\n        }\n\n        const extensionId = this._extensionId;\n\n        if (!Object.values(ExtensionEventType).includes(eventType)) {\n            throw new Error(`${eventType} is not supported.`);\n        }\n\n        this._internalCommandPoster.post({\n            type: ExtensionInternalCommandType.Subscribe,\n            payload: { extensionId, eventType },\n        });\n\n        this._eventListener.addListener(eventType, callback);\n\n        return () => {\n            this._internalCommandPoster.post({\n                type: ExtensionInternalCommandType.Unsubscribe,\n                payload: { extensionId, eventType },\n            });\n\n            this._eventListener.removeListener(eventType, callback);\n        };\n    }\n\n    async getConsignments(useCache = true): Promise<Consignment[]> {\n        return new Promise((resolve) => {\n            const callback = (event: GetConsignmentsMessage) => {\n                this._messageListener.removeListener(\n                    ExtensionMessageType.GetConsignments,\n                    callback,\n                );\n\n                resolve(event.payload.consignments);\n            };\n\n            this._messageListener.addListener(ExtensionMessageType.GetConsignments, callback);\n\n            this.post({ type: ExtensionQueryType.GetConsignments, payload: { useCache } });\n        });\n    }\n\n    private _isExtensionFailedEvent(\n        event: any,\n    ): event is ExtensionInternalEventType.ExtensionFailed {\n        return event.type === ExtensionInternalEventType.ExtensionFailed;\n    }\n\n    private _isCommandOrQueryType(type: any): type is ExtensionCommandOrQuery['type'] {\n        return (\n            Object.values(ExtensionCommandType).includes(type) ||\n            Object.values(ExtensionQueryType).includes(type)\n        );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension-state.ts",
    "content": "import { Extension } from './extension';\n\nexport interface ExtensionState {\n    data?: Extension[];\n    errors: ExtensionErrorsState;\n    statuses: ExtensionStatusesState;\n}\n\nexport interface ExtensionErrorsState {\n    loadError?: Error;\n    renderError?: Error;\n}\n\nexport interface ExtensionStatusesState {\n    isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: ExtensionState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/extension/extension.mock.ts",
    "content": "import { getConsignments } from '../shipping/consignments.mock';\n\nimport { Extension, ExtensionRegion, ExtensionType } from './extension';\nimport { ExtensionCommand, ExtensionCommandType } from './extension-commands';\nimport { ExtensionEvent, ExtensionEventType } from './extension-events';\nimport { ExtensionState } from './extension-state';\n\nexport function getExtensions(): Extension[] {\n    return [\n        {\n            id: '123',\n            name: 'Foo',\n            region: ExtensionRegion.ShippingShippingAddressFormBefore,\n            url: 'https://widget.foo.com/',\n            type: ExtensionType.Iframe,\n        },\n        {\n            id: '456',\n            name: 'Bar',\n            region: ExtensionRegion.ShippingShippingAddressFormAfter,\n            url: 'https://widget.bar.com/',\n            type: ExtensionType.Iframe,\n        },\n    ];\n}\n\nexport function getWorkerExtension(): Extension {\n    return {\n        id: '789',\n        name: 'Worker Extension',\n        region: ExtensionRegion.GlobalWebWorker,\n        url: 'https://worker.extension.com/worker.js',\n        type: ExtensionType.Worker,\n    };\n}\n\nexport function getExtensionState(): ExtensionState {\n    return {\n        data: getExtensions(),\n        errors: {},\n        statuses: {},\n    };\n}\n\nexport function getExtensionCommand(): {\n    origin: string;\n    data: ExtensionCommand;\n} {\n    return {\n        origin: 'https://widget.foo.com',\n        data: {\n            type: ExtensionCommandType.ReloadCheckout,\n        },\n    };\n}\n\nexport function getExtensionEvent(): {\n    origin: string;\n    data: ExtensionEvent;\n} {\n    return {\n        origin: 'https://host.store',\n        data: {\n            type: ExtensionEventType.ConsignmentsChanged,\n            payload: {\n                consignments: getConsignments(),\n                previousConsignments: [],\n            },\n        },\n    };\n}\n\n// Mock Worker implementation for testing purposes\nexport class MockWorker {\n    url: string;\n    onmessage: ((this: Worker, ev: MessageEvent) => any) | null = null;\n    onerror: ((this: Worker, ev: ErrorEvent) => any) | null = null;\n    // Using jest.Mock for postMessage to spy on its calls\n    postMessage: jest.Mock;\n    constructor(url: string) {\n        this.url = url;\n        this.postMessage = jest.fn();\n    }\n    terminate(): void {\n        /* mock */\n    }\n    addEventListener(): void {\n        /* mock */\n    }\n    removeEventListener(): void {\n        /* mock */\n    }\n    dispatchEvent(): boolean {\n        return true; /* mock */\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/extension.ts",
    "content": "export interface Extension {\n    id: string;\n    name: string;\n    region: ExtensionRegion;\n    url: string;\n    type: ExtensionType;\n}\n\nexport interface ExtensionIframeConfig {\n    cartId: string;\n    parentOrigin: string;\n}\n\nexport const enum ExtensionRegion {\n    ShippingShippingAddressFormBefore = 'shipping.shippingAddressForm.before',\n    ShippingShippingAddressFormAfter = 'shipping.shippingAddressForm.after',\n    ShippingSelectedShippingMethod = 'shipping.selectedShippingMethod',\n    PaymentPaymentMethodListBefore = 'payment.paymentMethodList.before',\n    SummaryAfter = 'summary.after',\n    SummaryLastItemAfter = 'summary.lastItem.after',\n    GlobalWebWorker = 'global',\n}\n\nexport const enum ExtensionType {\n    Iframe = 'iframe',\n    Worker = 'worker',\n}\n"
  },
  {
    "path": "packages/core/src/extension/iframe-resizer-setup.spec.ts",
    "content": "import {\n    iframeResizerSetup,\n    IframeResizerWindow,\n    isIframeResizerWindow,\n} from './iframe-resizer-setup';\n\ndescribe('isIframeResizerWindow and iframeResizerSetup', () => {\n    beforeAll(() => {\n        Object.defineProperty(window, 'parentIFrame', {\n            value: {\n                autoResize: jest.fn(),\n                setHeightCalculationMethod: jest.fn(),\n                size: jest.fn(),\n            },\n        });\n    });\n\n    describe('isIframeResizerWindow', () => {\n        it('should return true if window has parentIFrame', () => {\n            expect(isIframeResizerWindow(window)).toBe(true);\n        });\n    });\n\n    describe('iframeResizerSetup', () => {\n        it('should call parentIFrame.autoResize(true) and setHeightCalculationMethod(\"bodyOffset\") when fixedHeight is not provided', () => {\n            iframeResizerSetup(undefined, undefined);\n\n            expect(\n                (window as unknown as IframeResizerWindow).parentIFrame.autoResize,\n            ).toHaveBeenCalledWith(true);\n            expect(\n                (window as unknown as IframeResizerWindow).parentIFrame.setHeightCalculationMethod,\n            ).toHaveBeenCalledWith('bodyOffset');\n        });\n\n        it('should call setHeightCalculationMethod(\"taggedElement\") when taggedElementId is provided and element exists', () => {\n            jest.spyOn(document, 'getElementById').mockReturnValue(document.createElement('div'));\n\n            iframeResizerSetup('div-id', undefined);\n\n            expect(\n                (window as unknown as IframeResizerWindow).parentIFrame.setHeightCalculationMethod,\n            ).toHaveBeenCalledWith('taggedElement');\n\n            jest.resetAllMocks();\n        });\n\n        it('should throw an error when taggedElementId is provided but the element does not exist', () => {\n            expect(() => iframeResizerSetup('non-existent-element', undefined)).toThrow(\n                'Element not found.',\n            );\n        });\n\n        it('should call parentIFrame.size with fixedHeight if fixedHeight is provided', () => {\n            iframeResizerSetup(undefined, 100);\n\n            expect(\n                (window as unknown as IframeResizerWindow).parentIFrame.size,\n            ).toHaveBeenCalledWith(100);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/iframe-resizer-setup.ts",
    "content": "export interface IframeResizerWindow extends Window {\n    parentIFrame: {\n        autoResize: (isEnabled: boolean) => void;\n        setHeightCalculationMethod: (id: string) => void;\n        size: (height: number) => void;\n    };\n}\n\nexport function isIframeResizerWindow(window: Window): window is IframeResizerWindow {\n    return 'parentIFrame' in window;\n}\n\nexport function iframeResizerSetup(\n    taggedElementId: string | undefined,\n    fixedHeight: number | undefined,\n): void {\n    if (!isIframeResizerWindow(window)) {\n        throw new Error('iFramerResizer window not found.');\n    }\n\n    if (fixedHeight) {\n        window.parentIFrame.size(fixedHeight);\n    } else {\n        window.parentIFrame.autoResize(true);\n\n        if (taggedElementId) {\n            const element = document.getElementById(taggedElementId);\n\n            if (!element) {\n                throw new Error(`Element not found.`);\n            }\n\n            element.setAttribute('data-iframe-height', '');\n            window.parentIFrame.setHeightCalculationMethod('taggedElement');\n        } else {\n            window.parentIFrame.setHeightCalculationMethod('bodyOffset');\n        }\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/index.ts",
    "content": "export { ExtensionRegion, Extension } from './extension';\nexport { getExtensions } from './extension.mock';\nexport { ExtensionActionType } from './extension-actions';\nexport { ExtensionActionCreator } from './extension-action-creator';\nexport { ExtensionEventType } from './extension-events';\nexport { ExtensionMessageType, ExtensionMessage } from './extension-message';\nexport { ExtensionEventBroadcaster } from './extension-event-broadcaster';\nexport { createExtensionEventBroadcaster } from './create-extension-event-broadcaster';\nexport { ExtensionIframe } from './extension-iframe';\nexport { ExtensionMessenger } from './extension-messenger';\nexport { ExtensionCommand, ExtensionCommandType, ExtensionCommandMap } from './extension-commands';\nexport { ExtensionQuery, ExtensionQueryType, ExtensionQueryMap } from './extension-queries';\nexport { extensionReducer } from './extension-reducer';\nexport { ExtensionRequestSender } from './extension-request-sender';\nexport {\n    ExtensionSelector,\n    ExtensionSelectorFactory,\n    createExtensionSelectorFactory,\n} from './extension-selector';\nexport { default as initializeExtensionService } from './initialize-extension-service';\nexport { ExtensionState } from './extension-state';\nexport { WorkerExtensionMessenger } from './worker-extension-messenger';\n"
  },
  {
    "path": "packages/core/src/extension/initialize-extension-service.spec.ts",
    "content": "import ExtensionService from './extension-service';\nimport initializeExtensionService, {\n    InitializeExtensionServiceOptions,\n} from './initialize-extension-service';\n\ndescribe('initializeExtensionService', () => {\n    it('initializes extension service correctly', async () => {\n        Object.defineProperty(window, 'parentIFrame', {\n            value: {\n                autoResize: jest.fn(),\n                setHeightCalculationMethod: jest.fn(),\n            },\n        });\n\n        const options: InitializeExtensionServiceOptions = {\n            extensionId: 'test',\n            parentOrigin: 'https://test.com',\n        };\n\n        const extensionService = await initializeExtensionService(options);\n\n        expect(extensionService).toBeInstanceOf(ExtensionService);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/initialize-extension-service.ts",
    "content": "import {\n    IframeEventListener,\n    IframeEventPoster,\n    setupContentWindowForIframeResizer,\n} from '../common/iframe';\n\nimport { ExtensionCommand } from './extension-commands';\nimport { ExtensionEventMap } from './extension-events';\nimport { ExtensionInternalCommand } from './extension-internal-commands';\nimport { ExtensionCommandOrQueryContext, ExtensionMessageMap } from './extension-message';\nimport ExtensionService from './extension-service';\nimport { iframeResizerSetup } from './iframe-resizer-setup';\n\nexport interface InitializeExtensionServiceOptions {\n    extensionId: string;\n    parentOrigin: string;\n    taggedElementId?: string;\n    fixedHeight?: number;\n}\n\nexport default async function initializeExtensionService(\n    options: InitializeExtensionServiceOptions,\n): Promise<ExtensionService> {\n    const { extensionId, parentOrigin, taggedElementId, fixedHeight } = options;\n\n    setupContentWindowForIframeResizer();\n\n    const extension = new ExtensionService(\n        new IframeEventListener<ExtensionMessageMap>(parentOrigin),\n        new IframeEventListener<ExtensionEventMap>(parentOrigin),\n        new IframeEventPoster<ExtensionCommand, ExtensionCommandOrQueryContext>(parentOrigin),\n        new IframeEventPoster<ExtensionInternalCommand>(parentOrigin),\n    );\n\n    await extension.initialize(extensionId);\n\n    iframeResizerSetup(taggedElementId, fixedHeight);\n\n    return extension;\n}\n"
  },
  {
    "path": "packages/core/src/extension/resizable-firame-creator.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport { UnexpectedDetachmentError } from '../common/dom/errors';\n\nimport { ExtensionNotLoadedError } from './errors';\nimport { Extension } from './extension';\nimport { ExtensionInternalCommandType } from './extension-internal-commands';\nimport { getExtensions } from './extension.mock';\nimport ResizableIframeCreator from './resizable-iframe-creator';\n\ndescribe('ResizableIframeCreator', () => {\n    let url: string;\n    let container: HTMLElement;\n    let eventEmitter: EventEmitter;\n    let extension: Extension;\n    let iframeCreator: ResizableIframeCreator;\n    let initCallback: () => void;\n    let failedCallback: () => void;\n\n    beforeEach(() => {\n        extension = getExtensions()[0];\n        url = 'http://mybigcommerce.com/checkout';\n        container = document.createElement('div');\n        eventEmitter = new EventEmitter();\n        initCallback = jest.fn();\n        failedCallback = jest.fn();\n\n        jest.spyOn(window, 'addEventListener').mockImplementation((type, eventListener) => {\n            const listener =\n                typeof eventListener === 'function' ? eventListener : () => eventListener;\n\n            return eventEmitter.addListener(type, listener);\n        });\n\n        jest.spyOn(window, 'removeEventListener').mockImplementation((type, eventListener) => {\n            const listener =\n                typeof eventListener === 'function' ? eventListener : () => eventListener;\n\n            return eventEmitter.removeListener(type, listener);\n        });\n\n        container.setAttribute('id', 'checkout');\n        container.setAttribute('data-extension-id', extension.id);\n        window.document.body.innerHTML = '';\n        window.document.body.appendChild(container);\n\n        iframeCreator = new ResizableIframeCreator({\n            timeout: 0,\n        });\n    });\n\n    it('removes message listener if iframe is loaded successfully', async () => {\n        jest.spyOn(window, 'removeEventListener');\n\n        setTimeout(() => {\n            eventEmitter.emit('message', {\n                origin: 'http://mybigcommerce.com',\n                data: { type: ExtensionInternalCommandType.ResizeIframe },\n            });\n            eventEmitter.emit('message', {\n                origin: 'http://mybigcommerce.com',\n                data: '[iFrameSizer]iFrameResizer0:0:0:init',\n            });\n        });\n\n        await iframeCreator.createFrame(url, 'checkout', initCallback, failedCallback);\n\n        expect(window.removeEventListener).toHaveBeenCalledWith('message', expect.any(Function));\n        expect(initCallback).toHaveBeenCalled();\n        expect(failedCallback).not.toHaveBeenCalled();\n    });\n\n    it('inserts checkout iframe into container', async () => {\n        setTimeout(() => {\n            eventEmitter.emit('message', {\n                origin: 'http://mybigcommerce.com',\n                data: { type: ExtensionInternalCommandType.ResizeIframe },\n            });\n        });\n\n        const frame = await iframeCreator.createFrame(\n            url,\n            'checkout',\n            initCallback,\n            failedCallback,\n        );\n\n        expect(frame.tagName).toBe('IFRAME');\n        expect(frame.src).toEqual(url);\n        expect(frame.parentElement).toEqual(container);\n    });\n\n    it('configures iframe to be borderless and auto-resizable', async () => {\n        setTimeout(() => {\n            eventEmitter.emit('message', {\n                origin: 'http://mybigcommerce.com',\n                data: { type: ExtensionInternalCommandType.ResizeIframe },\n            });\n        });\n\n        const frame = await iframeCreator.createFrame(\n            url,\n            'checkout',\n            initCallback,\n            failedCallback,\n        );\n\n        expect(frame.style.border).toBe('');\n        expect(frame.style.width).toBe('100%');\n        expect(frame.iFrameResizer).toBeDefined();\n    });\n\n    it('throws error if unable to find container element', () => {\n        expect(() =>\n            iframeCreator.createFrame(url, 'invalid_container', initCallback, failedCallback),\n        ).toThrow(ExtensionNotLoadedError);\n    });\n\n    it('throws error if not receiving \"loaded\" event within certain timeframe', async () => {\n        jest.spyOn(console, 'error').mockImplementation();\n\n        try {\n            await iframeCreator.createFrame(url, 'checkout', initCallback, () => {\n                throw Error('failedCallback execution failed');\n            });\n        } catch (error) {\n            expect(error).toBeInstanceOf(ExtensionNotLoadedError);\n            expect(initCallback).not.toHaveBeenCalled();\n        }\n\n        // eslint-disable-next-line no-console\n        expect(console.error).toHaveBeenCalledWith(\n            'Extension rendering timed out after 0ms, and the callback function could not be executed. Error: failedCallback execution failed',\n        );\n    });\n\n    it('removes iframe from container element if unable to load', async () => {\n        try {\n            await iframeCreator.createFrame(url, 'checkout', initCallback, failedCallback);\n        } catch (error) {\n            expect(container.childNodes).toHaveLength(0);\n        }\n    });\n\n    it('removes message listener if unable to load', async () => {\n        jest.spyOn(window, 'removeEventListener');\n\n        try {\n            await iframeCreator.createFrame(url, 'checkout', initCallback, failedCallback);\n        } catch (error) {\n            expect(window.removeEventListener).toHaveBeenCalledWith(\n                'message',\n                expect.any(Function),\n            );\n        }\n    });\n\n    it('throws error if container is removed before iframe finishes loading', async () => {\n        iframeCreator = new ResizableIframeCreator({\n            timeout: 1000,\n        });\n\n        setTimeout(() => {\n            container.remove();\n        });\n\n        try {\n            await iframeCreator.createFrame(url, 'checkout', initCallback, failedCallback);\n        } catch (error) {\n            expect(error).toBeInstanceOf(UnexpectedDetachmentError);\n            expect(initCallback).not.toHaveBeenCalled();\n            expect(failedCallback).not.toHaveBeenCalled();\n        }\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/resizable-iframe-creator.ts",
    "content": "import { DetachmentObserver, MutationObserverFactory } from '../common/dom';\nimport { IFrameComponent, iframeResizer, isIframeEvent } from '../common/iframe';\nimport { parseUrl } from '../common/url';\n\nimport { ExtensionNotLoadedError } from './errors';\nimport { ExtensionInternalCommandType } from './extension-internal-commands';\n\nexport default class ResizableIframeCreator {\n    constructor(private _options?: { timeout: number }) {}\n\n    createFrame(\n        src: string,\n        containerId: string,\n        initCallback: () => void,\n        failedCallback: () => void,\n    ): Promise<IFrameComponent> {\n        const container = document.getElementById(containerId);\n        const { timeout = 60000 } = this._options || {};\n\n        if (!container) {\n            throw new ExtensionNotLoadedError(\n                'Unable to embed the iframe because the container element could not be found.',\n            );\n        }\n\n        const iframe = document.createElement('iframe');\n\n        iframe.src = src;\n        iframe.style.border = 'none';\n        iframe.style.display = 'none';\n        iframe.style.width = '100%';\n\n        container.appendChild(iframe);\n\n        return this._toResizableFrame(iframe, timeout, initCallback, failedCallback).catch(\n            (error) => {\n                container.removeChild(iframe);\n\n                throw error;\n            },\n        );\n    }\n\n    private async _toResizableFrame(\n        iframe: HTMLIFrameElement,\n        timeoutInterval: number,\n        initCallback: () => void,\n        failedCallback: () => void,\n    ): Promise<IFrameComponent> {\n        const detachmentObserver = new DetachmentObserver(new MutationObserverFactory());\n\n        // Can't simply listen to `load` event because it always gets triggered even if there's an error.\n        // Instead, listen to the `load` inside the iframe and let the parent frame know when it happens.\n        const promise = new Promise<IFrameComponent>((resolve, reject) => {\n            const timeout = window.setTimeout(() => {\n                try {\n                    failedCallback();\n                } catch (error) {\n                    if (error instanceof Error) {\n                        // eslint-disable-next-line no-console\n                        console.error(\n                            `Extension rendering timed out after ${timeoutInterval}ms, and the callback function could not be executed. Error: ${error.message}`,\n                        );\n                    }\n                }\n\n                reject(\n                    new ExtensionNotLoadedError(\n                        'Unable to load the extension because the content could not be loaded.',\n                    ),\n                );\n            }, timeoutInterval);\n\n            const handleMessage = (event: MessageEvent) => {\n                if (event.origin !== parseUrl(iframe.src).origin) {\n                    return;\n                }\n\n                if (isIframeEvent(event.data, ExtensionInternalCommandType.ResizeIframe)) {\n                    iframe.style.display = '';\n\n                    const iframes = iframeResizer(\n                        {\n                            autoResize: false,\n                            scrolling: false,\n                            sizeWidth: false,\n                            heightCalculationMethod: 'bodyOffset',\n                            initCallback,\n                        },\n                        iframe,\n                    );\n\n                    teardown();\n                    resolve(iframes[iframes.length - 1]);\n                }\n            };\n\n            const teardown = () => {\n                window.removeEventListener('message', handleMessage);\n                window.clearTimeout(timeout);\n            };\n\n            window.addEventListener('message', handleMessage);\n        });\n\n        return detachmentObserver.ensurePresence([iframe], promise);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/extension/subscribers/extension-change-subscriber.ts",
    "content": "import { CheckoutSelectors } from '../../checkout';\nimport { DataStoreProjection } from '../../common/data-store';\nimport { ExtensionEventBroadcaster } from '../extension-event-broadcaster';\n\nexport type ExtensionChangeSubscriber = (\n    store: DataStoreProjection<CheckoutSelectors>,\n    broadcaster: ExtensionEventBroadcaster,\n) => ExtensionChangeUnsubscriber;\n\nexport type ExtensionChangeUnsubscriber = () => void;\n"
  },
  {
    "path": "packages/core/src/extension/subscribers/index.ts",
    "content": "export {\n    ExtensionChangeSubscriber,\n    ExtensionChangeUnsubscriber,\n} from './extension-change-subscriber';\nexport { subscribeConsignmentsChange } from './subscribe-consignments-change';\n"
  },
  {
    "path": "packages/core/src/extension/subscribers/subscribe-consignments-change.spec.ts",
    "content": "import EventEmitter from 'events';\n\nimport { CheckoutSelectors } from '../../checkout';\nimport { DataStoreProjection } from '../../common/data-store';\nimport { getConsignment } from '../../shipping/consignments.mock';\nimport { getShippingAddress } from '../../shipping/shipping-addresses.mock';\nimport { ExtensionEventBroadcaster } from '../extension-event-broadcaster';\nimport { ExtensionEventType } from '../extension-events';\n\nimport { subscribeConsignmentsChange } from './subscribe-consignments-change';\n\ndescribe('subscribeConsignmentsChange', () => {\n    let store: Pick<DataStoreProjection<CheckoutSelectors>, 'getState' | 'subscribe'>;\n    let broadcaster: Pick<ExtensionEventBroadcaster, 'broadcast'>;\n    let eventEmitter: EventEmitter;\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        store = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            getState: jest.fn(() => ({\n                data: {\n                    getConsignments: () => [getConsignment()],\n                },\n            })),\n            subscribe: jest.fn((listener) => {\n                eventEmitter.addListener('change', listener);\n\n                return () => {\n                    eventEmitter.removeListener('change', listener);\n                };\n            }),\n        };\n\n        broadcaster = {\n            broadcast: jest.fn(),\n        };\n    });\n\n    it('subscribes to state change', () => {\n        const consignment = getConsignment();\n\n        subscribeConsignmentsChange(\n            store as DataStoreProjection<CheckoutSelectors>,\n            broadcaster as ExtensionEventBroadcaster,\n        );\n\n        expect(store.subscribe).toHaveBeenCalled();\n\n        const newConsignment = {\n            ...consignment,\n            address: {\n                ...getShippingAddress(),\n                countryCode: 'AU',\n            },\n        };\n\n        eventEmitter.emit('change', {\n            data: {\n                getConsignments: () => [newConsignment],\n            },\n        });\n\n        expect(broadcaster.broadcast).toHaveBeenCalledWith({\n            type: ExtensionEventType.ConsignmentsChanged,\n            payload: {\n                consignments: [newConsignment],\n                previousConsignments: [consignment],\n            },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/subscribers/subscribe-consignments-change.ts",
    "content": "import { CheckoutSelectors } from '../../checkout';\nimport { DataStoreProjection } from '../../common/data-store';\nimport { ExtensionEventBroadcaster } from '../extension-event-broadcaster';\nimport { ExtensionEventType } from '../extension-events';\n\nimport { ExtensionChangeSubscriber } from './extension-change-subscriber';\n\nexport const subscribeConsignmentsChange: ExtensionChangeSubscriber = (\n    store: DataStoreProjection<CheckoutSelectors>,\n    broadcaster: ExtensionEventBroadcaster,\n) => {\n    const {\n        data: { getConsignments: getInitialConsignments },\n    } = store.getState();\n\n    let consignments = getInitialConsignments() ?? [];\n\n    return store.subscribe(\n        ({ data: { getConsignments } }) => {\n            const currentConsignments = getConsignments() ?? [];\n\n            if (currentConsignments === consignments) {\n                return;\n            }\n\n            broadcaster.broadcast({\n                type: ExtensionEventType.ConsignmentsChanged,\n                payload: {\n                    consignments: currentConsignments,\n                    previousConsignments: consignments,\n                },\n            });\n\n            consignments = currentConsignments;\n        },\n        ({ data: { getConsignments } }) => getConsignments(),\n    );\n};\n"
  },
  {
    "path": "packages/core/src/extension/worker-extension-messenger.spec.ts",
    "content": "import EventEmitter from 'events';\n\nimport { WorkerEventListener } from '../common/worker';\n\nimport {\n    ExtensionNotFoundError,\n    UnsupportedExtensionCommandError,\n    UnsupportedExtensionQueryError,\n} from './errors';\nimport { ExtensionCommandMap, ExtensionCommandType } from './extension-commands';\nimport { ExtensionQueryMap, ExtensionQueryType } from './extension-queries';\nimport { WorkerExtensionMessenger } from './worker-extension-messenger';\n\njest.mock('../common/worker', () => ({\n    WorkerEventListener: jest.fn().mockImplementation(() => ({\n        listen: jest.fn(),\n        addListener: jest.fn(),\n        removeListener: jest.fn(),\n        stopListen: jest.fn(),\n    })),\n    WorkerEventPoster: jest.fn().mockImplementation(() => ({\n        post: jest.fn(),\n    })),\n}));\n\ndescribe('WorkerExtensionMessenger', () => {\n    let extensionCommandHandler: jest.Mock;\n    let extensionQueryHandler: jest.Mock;\n    let messenger: WorkerExtensionMessenger;\n    let worker: Worker;\n\n    const extensionId = '12345678-1234-1234-1234-123456789012';\n\n    beforeEach(() => {\n        extensionCommandHandler = jest.fn();\n        extensionQueryHandler = jest.fn();\n        worker = {} as Worker;\n    });\n\n    describe('#listenForCommand', () => {\n        let listener: WorkerEventListener<ExtensionCommandMap>;\n\n        beforeEach(() => {\n            listener = new WorkerEventListener(worker);\n\n            const listeners = {\n                [extensionId]: listener,\n            };\n\n            messenger = new WorkerExtensionMessenger({ [extensionId]: worker }, listeners, {});\n        });\n\n        it('should throw if unable to find the extension', () => {\n            expect(() =>\n                messenger.listenForCommand(\n                    '404',\n                    ExtensionCommandType.ReloadCheckout,\n                    extensionCommandHandler,\n                ),\n            ).toThrow(ExtensionNotFoundError);\n        });\n\n        it('should throw if trying to listen for an unsupported command', () => {\n            expect(() =>\n                messenger.listenForCommand(\n                    extensionId,\n                    'INVALID_COMMAND' as ExtensionCommandType,\n                    extensionCommandHandler,\n                ),\n            ).toThrow(UnsupportedExtensionCommandError);\n        });\n\n        it('should listen and add an event listener', () => {\n            const eventEmitter = new EventEmitter();\n\n            jest.spyOn(listener, 'addListener').mockImplementation((type, listener) => {\n                eventEmitter.addListener(type, ({ context }) => {\n                    if (type === ExtensionCommandType.ReloadCheckout) {\n                        listener({ type }, context);\n                    }\n                });\n            });\n\n            messenger.listenForCommand(\n                extensionId,\n                ExtensionCommandType.ReloadCheckout,\n                extensionCommandHandler,\n            );\n\n            eventEmitter.emit(ExtensionCommandType.ReloadCheckout, {\n                context: { extensionId },\n            });\n\n            expect(extensionCommandHandler).toHaveBeenCalledWith(\n                { type: ExtensionCommandType.ReloadCheckout },\n                { extensionId },\n            );\n        });\n\n        it('should listen to commands emitted by the same extension', () => {\n            const eventEmitter = new EventEmitter();\n\n            jest.spyOn(listener, 'addListener').mockImplementation((type, listener) => {\n                eventEmitter.addListener(type, ({ context }) => {\n                    if (type === ExtensionCommandType.ReloadCheckout) {\n                        listener({ type }, context);\n                    }\n                });\n            });\n\n            messenger.listenForCommand(\n                extensionId,\n                ExtensionCommandType.ReloadCheckout,\n                extensionCommandHandler,\n            );\n\n            eventEmitter.emit(ExtensionCommandType.ReloadCheckout, {\n                context: { extensionId },\n            });\n\n            eventEmitter.emit(ExtensionCommandType.ReloadCheckout, {\n                context: { extensionId: '404' },\n            });\n\n            expect(extensionCommandHandler).toHaveBeenCalledTimes(1);\n        });\n\n        it('should remove the event listener', () => {\n            const eventEmitter = new EventEmitter();\n\n            jest.spyOn(listener, 'addListener').mockImplementation((type, listener) => {\n                eventEmitter.addListener(type, ({ context }) => {\n                    if (type === ExtensionCommandType.ReloadCheckout) {\n                        listener({ type }, context);\n                    }\n                });\n            });\n\n            jest.spyOn(listener, 'removeListener').mockImplementation((type) => {\n                eventEmitter.removeAllListeners(type);\n            });\n\n            const remover = messenger.listenForCommand(\n                extensionId,\n                ExtensionCommandType.ReloadCheckout,\n                extensionCommandHandler,\n            );\n\n            remover();\n\n            eventEmitter.emit(ExtensionCommandType.ReloadCheckout, {\n                context: { extensionId },\n            });\n\n            expect(extensionCommandHandler).not.toHaveBeenCalled();\n        });\n\n        it('should stop listening', () => {\n            jest.spyOn(listener, 'stopListen');\n\n            messenger.listenForCommand(\n                extensionId,\n                ExtensionCommandType.ReloadCheckout,\n                extensionCommandHandler,\n            );\n\n            messenger.stopListen(extensionId);\n\n            expect(listener.stopListen).toHaveBeenCalled();\n        });\n    });\n\n    describe('#listenForQuery', () => {\n        let listener: WorkerEventListener<ExtensionQueryMap>;\n\n        beforeEach(() => {\n            listener = new WorkerEventListener(worker);\n\n            const listeners = {\n                [extensionId]: listener,\n            };\n\n            messenger = new WorkerExtensionMessenger({ [extensionId]: worker }, {}, listeners);\n        });\n\n        it('should throw if unable to find the extension', () => {\n            expect(() =>\n                messenger.listenForQuery(\n                    'xxx',\n                    ExtensionQueryType.GetConsignments,\n                    extensionQueryHandler,\n                ),\n            ).toThrow(ExtensionNotFoundError);\n        });\n\n        it('should throw if trying to listen for an unsupported command', () => {\n            expect(() =>\n                messenger.listenForQuery(\n                    extensionId,\n                    'INVALID_QUERY' as ExtensionQueryType,\n                    extensionQueryHandler,\n                ),\n            ).toThrow(UnsupportedExtensionQueryError);\n        });\n\n        it('should listen and add an event listener', () => {\n            const eventEmitter = new EventEmitter();\n\n            jest.spyOn(listener, 'addListener').mockImplementation((type, listener) => {\n                eventEmitter.addListener(type, ({ context }) => {\n                    if (type === ExtensionQueryType.GetConsignments) {\n                        listener({ type }, context);\n                    }\n                });\n            });\n\n            messenger.listenForQuery(\n                extensionId,\n                ExtensionQueryType.GetConsignments,\n                extensionQueryHandler,\n            );\n\n            eventEmitter.emit(ExtensionQueryType.GetConsignments, {\n                context: { extensionId },\n            });\n\n            expect(extensionQueryHandler).toHaveBeenCalledWith(\n                { type: ExtensionQueryType.GetConsignments },\n                { extensionId },\n            );\n        });\n\n        it('should listen to queries emitted by the same extension', () => {\n            const eventEmitter = new EventEmitter();\n\n            jest.spyOn(listener, 'addListener').mockImplementation((type, listener) => {\n                eventEmitter.addListener(type, ({ context }) => {\n                    if (type === ExtensionQueryType.GetConsignments) {\n                        listener({ type }, context);\n                    }\n                });\n            });\n\n            messenger.listenForQuery(\n                extensionId,\n                ExtensionQueryType.GetConsignments,\n                extensionQueryHandler,\n            );\n\n            eventEmitter.emit(ExtensionQueryType.GetConsignments, {\n                context: { extensionId },\n            });\n\n            eventEmitter.emit(ExtensionQueryType.GetConsignments, {\n                context: { extensionId: '404' },\n            });\n\n            expect(extensionQueryHandler).toHaveBeenCalledTimes(1);\n        });\n\n        it('should remove the event listener', () => {\n            const eventEmitter = new EventEmitter();\n\n            jest.spyOn(listener, 'addListener').mockImplementation((type, listener) => {\n                eventEmitter.addListener(type, ({ context }) => {\n                    if (type === ExtensionQueryType.GetConsignments) {\n                        listener({ type }, context);\n                    }\n                });\n            });\n\n            jest.spyOn(listener, 'removeListener').mockImplementation((type) => {\n                eventEmitter.removeAllListeners(type);\n            });\n\n            const remover = messenger.listenForQuery(\n                extensionId,\n                ExtensionQueryType.GetConsignments,\n                extensionQueryHandler,\n            );\n\n            remover();\n\n            eventEmitter.emit(ExtensionQueryType.GetConsignments, {\n                context: { [extensionId]: extensionId },\n            });\n\n            expect(extensionQueryHandler).not.toHaveBeenCalled();\n        });\n\n        it('should stop listening', () => {\n            jest.spyOn(listener, 'stopListen');\n\n            messenger.listenForQuery(\n                extensionId,\n                ExtensionQueryType.GetConsignments,\n                extensionQueryHandler,\n            );\n\n            messenger.stopListen(extensionId);\n\n            expect(listener.stopListen).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/extension/worker-extension-messenger.ts",
    "content": "import { WorkerEventListener, WorkerEventPoster } from '../common/worker';\n\nimport {\n    ExtensionNotFoundError,\n    UnsupportedExtensionCommandError,\n    UnsupportedExtensionQueryError,\n} from './errors';\nimport { ExtensionCommandMap, ExtensionCommandType } from './extension-commands';\nimport { ExtensionCommandOrQueryContext, ExtensionMessage } from './extension-message';\nimport { ExtensionQueryMap, ExtensionQueryType } from './extension-queries';\n\nexport class WorkerExtensionMessenger {\n    constructor(\n        private _workers: { [extensionId: string]: Worker } = {},\n        private _commandListeners: {\n            [extensionId: string]: WorkerEventListener<ExtensionCommandMap>;\n        } = {},\n        private _queryListeners: {\n            [extensionId: string]: WorkerEventListener<ExtensionQueryMap>;\n        } = {},\n    ) {}\n\n    add(extensionId: string, worker: Worker): void {\n        this._workers[extensionId] = worker;\n    }\n\n    listenForCommand<T extends keyof ExtensionCommandMap>(\n        extensionId: string,\n        command: T,\n        commandHandler: (\n            command: ExtensionCommandMap[T],\n            context?: ExtensionCommandOrQueryContext,\n        ) => Promise<void> | void,\n    ): () => void {\n        const worker = this._getWorkerById(extensionId);\n\n        if (!this._commandListeners[extensionId]) {\n            this._commandListeners[extensionId] = new WorkerEventListener(worker);\n        }\n\n        const listener = this._commandListeners[extensionId];\n\n        listener.listen();\n\n        const validCommandType = this._validateCommand<T>(command);\n\n        const commandHandlerProxy = (\n            command: ExtensionCommandMap[T],\n            context?: ExtensionCommandOrQueryContext,\n        ) => {\n            if (context?.extensionId === extensionId) {\n                commandHandler(command, context);\n            }\n        };\n\n        listener.addListener(validCommandType, commandHandlerProxy);\n\n        return () => {\n            listener.removeListener(validCommandType, commandHandlerProxy);\n        };\n    }\n\n    listenForQuery<T extends keyof ExtensionQueryMap>(\n        extensionId: string,\n        query: T,\n        queryHandler: (\n            query: ExtensionQueryMap[T],\n            context?: ExtensionCommandOrQueryContext,\n        ) => Promise<void> | void,\n    ): () => void {\n        const worker = this._getWorkerById(extensionId);\n\n        if (!this._queryListeners[extensionId]) {\n            this._queryListeners[extensionId] = new WorkerEventListener(worker);\n        }\n\n        const listener = this._queryListeners[extensionId];\n\n        listener.listen();\n\n        const validQueryType = this._validateQuery<T>(query);\n\n        const queryHandlerProxy = (\n            query: ExtensionQueryMap[T],\n            context?: ExtensionCommandOrQueryContext,\n        ) => {\n            if (context?.extensionId === extensionId) {\n                queryHandler(query, context);\n            }\n        };\n\n        listener.addListener(validQueryType, queryHandlerProxy);\n\n        return () => {\n            listener.removeListener(validQueryType, queryHandlerProxy);\n        };\n    }\n\n    stopListen(extensionId: string): void {\n        if (this._commandListeners[extensionId]) {\n            this._commandListeners[extensionId].stopListen();\n        }\n\n        if (this._queryListeners[extensionId]) {\n            this._queryListeners[extensionId].stopListen();\n        }\n    }\n\n    post(extensionId: string, message: ExtensionMessage): void {\n        if (!this._workers[extensionId]) {\n            throw new Error(`Worker with extensionId ${extensionId} not found`);\n        }\n\n        const workerPoster = new WorkerEventPoster(this._workers[extensionId], extensionId);\n\n        workerPoster.post(message);\n    }\n\n    clearCacheById(extensionId: string): void {\n        delete this._workers[extensionId];\n    }\n\n    private _getWorkerById(extensionId: string): Worker {\n        const worker = this._workers[extensionId];\n\n        if (!worker) {\n            throw new ExtensionNotFoundError(`Worker with extensionId ${extensionId} not found`);\n        }\n\n        return worker;\n    }\n\n    private _validateCommand<T extends keyof ExtensionCommandMap>(command: T): T {\n        if (Object.values(ExtensionCommandType).includes(command)) {\n            return command;\n        }\n\n        throw new UnsupportedExtensionCommandError();\n    }\n\n    private _validateQuery<T extends keyof ExtensionQueryMap>(query: T): T {\n        if (Object.values(ExtensionQueryType).includes(query)) {\n            return query;\n        }\n\n        throw new UnsupportedExtensionQueryError();\n    }\n}\n"
  },
  {
    "path": "packages/core/src/fee/fee.ts",
    "content": "export default interface Fee {\n    id: string;\n    type: string;\n    name: string;\n    displayName: string;\n    cost: number;\n    source: string;\n}\n"
  },
  {
    "path": "packages/core/src/fee/index.ts",
    "content": "export { default as Fee } from './fee';\n"
  },
  {
    "path": "packages/core/src/form/extra-field.ts",
    "content": "export type ExtraFieldType = 'text' | 'multiline_text' | 'number' | 'dropdown';\n\nexport interface ExtraFieldConfig {\n    defaultValue?: string | number;\n    maxLength?: number;\n    numberOfRows?: number;\n    maxValue?: number;\n    options?: string[];\n}\n\nexport interface ExtraField {\n    id: string;\n    name: string;\n    visibleToStorefront: boolean;\n    isRequired: boolean;\n    type: ExtraFieldType;\n    config: ExtraFieldConfig;\n}\n\nexport interface AddressExtraFieldValue {\n    fieldId: string;\n    fieldValue: string | number;\n}\n\nexport interface ExtraFields {\n    address: ExtraField[];\n    order: ExtraField[];\n}\n"
  },
  {
    "path": "packages/core/src/form/form-field.ts",
    "content": "import { AddressKey } from '../address';\n\nexport type FormFieldFieldType =\n    | 'checkbox'\n    | 'date'\n    | 'text'\n    | 'dropdown'\n    | 'password'\n    | 'radio'\n    | 'multiline';\n\nexport type FormFieldType = 'array' | 'date' | 'integer' | 'string';\n\nexport interface CustomerPasswordRequirements {\n    alpha: string;\n    numeric: string;\n    minlength: number;\n    description: string;\n}\n\nexport default interface FormField {\n    name: string | AddressKey;\n    custom: boolean;\n    id: string;\n    label: string;\n    required: boolean;\n    default?: string;\n    fieldType?: FormFieldFieldType;\n    hidden?: boolean;\n    inputDateFormat?: string;\n    itemtype?: string;\n    max?: string | number;\n    maxLength?: number;\n    min?: string | number;\n    options?: FormFieldOptions;\n    requirements?: CustomerPasswordRequirements;\n    secret?: boolean;\n    type?: FormFieldType;\n}\n\nexport interface FormFields {\n    customerAccount: FormField[];\n    shippingAddress: FormField[];\n    billingAddress: FormField[];\n}\n\nexport interface FormFieldOptions {\n    helperLabel?: string;\n    items?: FormFieldItem[];\n    rows?: number;\n}\n\nexport interface FormFieldItem {\n    value: string;\n    label: string;\n}\n"
  },
  {
    "path": "packages/core/src/form/form-fields-action-creator.spec.ts",
    "content": "import { createRequestSender, RequestSender, Response } from '@bigcommerce/request-sender';\nimport { merge, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport { FormFields } from './form-field';\nimport FormFieldsActionCreator from './form-fields-action-creator';\nimport { FormFieldsActionType } from './form-fields-actions';\nimport FormFieldsRequestSender from './form-fields-request-sender';\nimport { getFormFields } from './form.mock';\n\ndescribe('FormFieldsActionCreator', () => {\n    let requestSender: RequestSender;\n    let formFieldsRequestSender: FormFieldsRequestSender;\n    let formFieldsActionCreator: FormFieldsActionCreator;\n    let errorResponse: Response<any>;\n    let response: Response<FormFields>;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        formFieldsRequestSender = new FormFieldsRequestSender(requestSender);\n        formFieldsActionCreator = new FormFieldsActionCreator(formFieldsRequestSender);\n\n        response = getResponse(getFormFields());\n        errorResponse = getErrorResponse();\n\n        jest.spyOn(formFieldsRequestSender, 'loadFields').mockReturnValue(\n            Promise.resolve(response),\n        );\n    });\n\n    describe('#loadConfig()', () => {\n        it('emits actions if able to load config', async () => {\n            const actions = await formFieldsActionCreator\n                .loadFormFields()\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: FormFieldsActionType.LoadFormFieldsRequested },\n                { type: FormFieldsActionType.LoadFormFieldsSucceeded, payload: response.body },\n            ]);\n        });\n\n        it('emits error actions if unable to load config', async () => {\n            jest.spyOn(formFieldsRequestSender, 'loadFields').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await formFieldsActionCreator\n                .loadFormFields()\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: FormFieldsActionType.LoadFormFieldsRequested },\n                {\n                    type: FormFieldsActionType.LoadFormFieldsFailed,\n                    payload: errorResponse,\n                    error: true,\n                },\n            ]);\n        });\n\n        it('dispatches actions using cached responses if available', async () => {\n            const actions = await merge(\n                formFieldsActionCreator.loadFormFields({ useCache: true }),\n                formFieldsActionCreator.loadFormFields({ useCache: true }),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: FormFieldsActionType.LoadFormFieldsRequested },\n                { type: FormFieldsActionType.LoadFormFieldsRequested },\n                { type: FormFieldsActionType.LoadFormFieldsSucceeded, payload: response.body },\n                { type: FormFieldsActionType.LoadFormFieldsSucceeded, payload: response.body },\n            ]);\n\n            expect(formFieldsRequestSender.loadFields).toHaveBeenCalledTimes(1);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/form/form-fields-action-creator.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { concat, defer, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { ActionOptions, cachableAction } from '../common/data-store';\nimport { throwErrorAction } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\n\nimport { FormFieldsActionType, LoadFormFieldsAction } from './form-fields-actions';\nimport FormFieldsRequestSender from './form-fields-request-sender';\n\nexport default class FormFieldsActionCreator {\n    constructor(private _formFieldsRequestSender: FormFieldsRequestSender) {}\n\n    @cachableAction\n    loadFormFields(options?: RequestOptions & ActionOptions): Observable<LoadFormFieldsAction> {\n        return concat(\n            of(createAction(FormFieldsActionType.LoadFormFieldsRequested)),\n            defer(async () => {\n                const { body } = await this._formFieldsRequestSender.loadFields(options);\n\n                return createAction(FormFieldsActionType.LoadFormFieldsSucceeded, body);\n            }),\n        ).pipe(\n            catchError((response) =>\n                throwErrorAction(FormFieldsActionType.LoadFormFieldsFailed, response),\n            ),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/form/form-fields-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { FormFields } from './form-field';\n\nexport enum FormFieldsActionType {\n    LoadFormFieldsRequested = 'LOAD_FORM_FIELDS_REQUESTED',\n    LoadFormFieldsSucceeded = 'LOAD_FORM_FIELDS_SUCCEEDED',\n    LoadFormFieldsFailed = 'LOAD_FORM_FIELDS_FAILED',\n}\n\nexport type LoadFormFieldsAction =\n    | LoadFormFieldsRequestedAction\n    | LoadFormFieldsSucceededAction\n    | LoadFormFieldsFailedAction;\n\nexport interface LoadFormFieldsRequestedAction extends Action {\n    type: FormFieldsActionType.LoadFormFieldsRequested;\n}\n\nexport interface LoadFormFieldsSucceededAction extends Action<FormFields> {\n    type: FormFieldsActionType.LoadFormFieldsSucceeded;\n}\n\nexport interface LoadFormFieldsFailedAction extends Action<Error> {\n    type: FormFieldsActionType.LoadFormFieldsFailed;\n}\n"
  },
  {
    "path": "packages/core/src/form/form-fields-reducer.spec.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\n\nimport { CheckoutHydrateActionType } from '../checkout';\n\nimport { FormFieldsActionType } from './form-fields-actions';\nimport { getAddressExtraFields, getFormFields } from './form.mock';\n\nimport { formFieldsReducer, FormFieldsState } from './index';\n\ndescribe('formFieldsReducer()', () => {\n    let initialState: FormFieldsState;\n\n    beforeEach(() => {\n        initialState = {\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    it('loads the config', () => {\n        const action = createAction(FormFieldsActionType.LoadFormFieldsRequested);\n\n        expect(formFieldsReducer(initialState, action)).toMatchObject({\n            statuses: { isLoading: true },\n        });\n    });\n\n    it('returns config data if it was load successfully', () => {\n        const action = createAction(FormFieldsActionType.LoadFormFieldsSucceeded, getFormFields());\n\n        expect(formFieldsReducer(initialState, action)).toMatchObject({\n            data: action.payload,\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns an error if loading fails', () => {\n        const action = createErrorAction(FormFieldsActionType.LoadFormFieldsFailed, new Error());\n\n        expect(formFieldsReducer(initialState, action)).toMatchObject({\n            errors: { loadError: action.payload },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('hydrates extraFields from initial state', () => {\n        const extraFields = { address: getAddressExtraFields(), order: [] };\n        const action = createAction(CheckoutHydrateActionType.HydrateInitialState, {\n            extraFields,\n        });\n\n        expect(formFieldsReducer(initialState, action)).toMatchObject({\n            extraFields,\n        });\n    });\n\n    it('keeps extraFields undefined when not in hydration payload', () => {\n        const action = createAction(CheckoutHydrateActionType.HydrateInitialState, {\n            formFields: getFormFields(),\n        });\n\n        const result = formFieldsReducer(initialState, action);\n\n        expect(result.extraFields).toBeUndefined();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/form/form-fields-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { CheckoutHydrateAction, CheckoutHydrateActionType } from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport { ExtraFields } from './extra-field';\nimport { FormFields } from './form-field';\nimport { FormFieldsActionType, LoadFormFieldsAction } from './form-fields-actions';\nimport FormFieldsState, {\n    DEFAULT_STATE,\n    FormFieldsErrorState,\n    FormFieldsStatusesState,\n} from './form-fields-state';\n\nexport default function formFieldsReducer(\n    state: FormFieldsState = DEFAULT_STATE,\n    action: Action,\n): FormFieldsState {\n    const reducer = combineReducers<FormFieldsState>({\n        data: dataReducer,\n        extraFields: extraFieldsReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: FormFields | undefined,\n    action: LoadFormFieldsAction | CheckoutHydrateAction,\n): FormFields | undefined {\n    switch (action.type) {\n        case FormFieldsActionType.LoadFormFieldsSucceeded:\n            return objectMerge(data, action.payload);\n\n        case CheckoutHydrateActionType.HydrateInitialState:\n            return objectMerge(data, action.payload?.formFields);\n\n        default:\n            return data;\n    }\n}\n\nfunction extraFieldsReducer(\n    extraFields: ExtraFields | undefined,\n    action: CheckoutHydrateAction,\n): ExtraFields | undefined {\n    switch (action.type) {\n        case CheckoutHydrateActionType.HydrateInitialState:\n            return action.payload?.extraFields ?? extraFields;\n\n        default:\n            return extraFields;\n    }\n}\n\nfunction errorsReducer(\n    errors: FormFieldsErrorState = DEFAULT_STATE.errors,\n    action: LoadFormFieldsAction,\n): FormFieldsErrorState {\n    switch (action.type) {\n        case FormFieldsActionType.LoadFormFieldsSucceeded:\n            return objectSet(errors, 'loadError', undefined);\n\n        case FormFieldsActionType.LoadFormFieldsFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: FormFieldsStatusesState = DEFAULT_STATE.statuses,\n    action: LoadFormFieldsAction,\n): FormFieldsStatusesState {\n    switch (action.type) {\n        case FormFieldsActionType.LoadFormFieldsRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case FormFieldsActionType.LoadFormFieldsSucceeded:\n        case FormFieldsActionType.LoadFormFieldsFailed:\n            return objectSet(statuses, 'isLoading', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/form/form-fields-request-sender.spec.ts",
    "content": "import { createRequestSender, createTimeout, Response } from '@bigcommerce/request-sender';\n\nimport { ContentType, INTERNAL_USE_ONLY, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getResponse } from '../common/http-request/responses.mock';\n\nimport { FormFields } from './form-field';\nimport FormFieldsRequestSender from './form-fields-request-sender';\nimport { getFormFields } from './form.mock';\n\ndescribe('FormFieldsRequestSender', () => {\n    const requestSender = createRequestSender();\n    let formFieldsRequestSender: FormFieldsRequestSender;\n\n    beforeEach(() => {\n        formFieldsRequestSender = new FormFieldsRequestSender(requestSender);\n    });\n\n    describe('#loadFormFields()', () => {\n        let response: Response<FormFields>;\n\n        beforeEach(() => {\n            response = getResponse(getFormFields());\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('loads fields', async () => {\n            const output = await formFieldsRequestSender.loadFields();\n\n            expect(output).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/form-fields', {\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('loads config with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const output = await formFieldsRequestSender.loadFields(options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/form-fields', {\n                ...options,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/form/form-fields-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport { FormFields } from './form-field';\n\nexport default class FormFieldsRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    loadFields({ timeout }: RequestOptions = {}): Promise<Response<FormFields>> {\n        const url = '/api/storefront/form-fields';\n\n        return this._requestSender.get(url, {\n            timeout,\n            headers: {\n                Accept: ContentType.JsonV1,\n                'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                ...SDK_VERSION_HEADERS,\n            },\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/form/form-fields-state.ts",
    "content": "import { ExtraFields } from './extra-field';\nimport { FormFields } from './form-field';\n\nexport default interface FormFieldsState {\n    data?: FormFields;\n    extraFields?: ExtraFields;\n    errors: FormFieldsErrorState;\n    statuses: FormFieldsStatusesState;\n}\n\nexport interface FormFieldsErrorState {\n    loadError?: Error;\n}\n\nexport interface FormFieldsStatusesState {\n    isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: FormFieldsState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/form/form-selector.spec.ts",
    "content": "import { find, map } from 'lodash';\n\nimport { CheckoutStoreState } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { Country } from '../geography';\nimport { getCountries } from '../geography/countries.mock';\nimport { getShippingCountries } from '../shipping/shipping-countries.mock';\n\nimport FormFieldsState from './form-fields-state';\nimport FormSelector, { createFormSelectorFactory, FormSelectorFactory } from './form-selector';\nimport {\n    getAddressExtraFields,\n    getAddressFormFields,\n    getFormFields,\n    getOrderExtraFields,\n} from './form.mock';\n\n// tslint:disable:no-non-null-assertion\n\ndescribe('FormSelector', () => {\n    let createFormSelector: FormSelectorFactory;\n    let state: CheckoutStoreState;\n\n    beforeEach(() => {\n        createFormSelector = createFormSelectorFactory();\n        state = getCheckoutStoreState();\n    });\n\n    describe('#getShippingAddressFields()', () => {\n        let formSelector: FormSelector;\n        let countries: Country[];\n\n        beforeEach(() => {\n            formSelector = createFormSelector(state.formFields);\n            countries = getShippingCountries();\n        });\n\n        it('returns the shipping address form fields', () => {\n            const expected = getAddressFormFields();\n            const result = formSelector.getShippingAddressFields([], '');\n\n            expect(map(result, 'id')).toEqual(map(expected, 'id'));\n        });\n\n        it('includes the countries as options for the country field', () => {\n            const forms = formSelector.getShippingAddressFields(countries, '');\n            const country = find(forms, { name: 'countryCode' });\n\n            expect(country!.fieldType).toBe('dropdown');\n            expect(country!.options!.items).toEqual([\n                { value: 'AU', label: 'Australia' },\n                { value: 'JP', label: 'Japan' },\n            ]);\n        });\n\n        it('sets the default country to the selected one', () => {\n            const forms = formSelector.getShippingAddressFields(countries, 'JP');\n            const country = find(forms, { name: 'countryCode' });\n\n            expect(country!.default).toBe('JP');\n        });\n\n        it('includes the provinces for the selected country', () => {\n            const forms = formSelector.getShippingAddressFields(countries, 'AU');\n            const province = find(forms, { name: 'stateOrProvinceCode' });\n\n            expect(province!.required).toBe(true);\n            expect(province!.fieldType).toBe('dropdown');\n            expect(province!.options!.items).toEqual([{ value: 'NSW', label: 'New South Wales' }]);\n        });\n\n        it('does not make provinces required if we do not have them in the countries list', () => {\n            const forms = formSelector.getShippingAddressFields(countries, 'JP');\n            const province = find(forms, { name: 'stateOrProvince' });\n\n            expect(province!.required).toBe(false);\n            expect(province!.fieldType).not.toBe('dropdown');\n        });\n\n        it('make provinces required if requireState flag is on', () => {\n            const forms = formSelector.getShippingAddressFields(countries, 'AU');\n            const province = find(forms, { name: 'stateOrProvinceCode' });\n\n            expect(province!.required).toBe(true);\n            expect(province!.fieldType).toBe('dropdown');\n            expect(province!.options!.items).toEqual([{ value: 'NSW', label: 'New South Wales' }]);\n        });\n\n        it('makes postcode required for countries that require it', () => {\n            const forms = formSelector.getShippingAddressFields(countries, 'AU');\n            const postCode = find(forms, { name: 'postalCode' });\n\n            expect(postCode!.required).toBe(true);\n        });\n\n        it('makes postcode NOT required for countries that DO NOT require it', () => {\n            const forms = formSelector.getShippingAddressFields(countries, 'JP');\n            const postCode = find(forms, { name: 'postalCode' });\n\n            expect(postCode!.required).toBe(false);\n        });\n    });\n\n    describe('#getBillingAddressFields()', () => {\n        let formSelector: FormSelector;\n        let countries: Country[];\n\n        beforeEach(() => {\n            formSelector = createFormSelector(state.formFields);\n            countries = getCountries();\n        });\n\n        it('returns the billing address form fields', () => {\n            const expected = getAddressFormFields();\n            const result = formSelector.getBillingAddressFields([], '');\n\n            expect(map(result, 'id')).toEqual(map(expected, 'id'));\n        });\n\n        it('includes the countries as options for the country field', () => {\n            const forms = formSelector.getBillingAddressFields(countries, '');\n            const country = find(forms, { name: 'countryCode' });\n\n            expect(country!.fieldType).toBe('dropdown');\n            expect(country!.options!.items).toEqual([\n                { value: 'AU', label: 'Australia' },\n                { value: 'US', label: 'United States' },\n                { value: 'JP', label: 'Japan' },\n            ]);\n        });\n\n        it('sets the default country to the selected one', () => {\n            const forms = formSelector.getBillingAddressFields(countries, 'US');\n            const country = find(forms, { name: 'countryCode' });\n\n            expect(country!.default).toBe('US');\n        });\n\n        it('includes the provinces for the selected country', () => {\n            const forms = formSelector.getBillingAddressFields(countries, 'AU');\n            const province = find(forms, { name: 'stateOrProvinceCode' });\n\n            expect(province!.required).toBe(true);\n            expect(province!.fieldType).toBe('dropdown');\n            expect(province!.options!.items).toEqual([\n                { value: 'NSW', label: 'New South Wales' },\n                { value: 'VIC', label: 'Victoria' },\n            ]);\n        });\n\n        it('make provinces optional when requireState flag is off', () => {\n            const forms = formSelector.getShippingAddressFields(countries, 'US');\n            const province = find(forms, { name: 'stateOrProvinceCode' });\n\n            expect(province!.required).toBe(false);\n            expect(province!.fieldType).toBe('dropdown');\n            expect(province!.options!.items).toEqual([\n                { value: 'CA', label: 'California' },\n                { value: 'TX', label: 'Texas' },\n            ]);\n        });\n\n        it('does not make provinces required if we do not have them in the countries list', () => {\n            const forms = formSelector.getBillingAddressFields(countries, 'JP');\n            const province = find(forms, { name: 'stateOrProvince' });\n\n            expect(province!.required).toBe(false);\n            expect(province!.fieldType).not.toBe('dropdown');\n        });\n\n        it('makes postcode required for countries that require it', () => {\n            const forms = formSelector.getBillingAddressFields(countries, 'AU');\n            const postCode = find(forms, { name: 'postalCode' });\n\n            expect(postCode!.required).toBe(true);\n        });\n\n        it('makes postcode NOT required for countries that DO NOT require it', () => {\n            const forms = formSelector.getBillingAddressFields(countries, 'JP');\n            const postCode = find(forms, { name: 'postalCode' });\n\n            expect(postCode!.required).toBe(false);\n        });\n    });\n\n    describe('#getCustomerAccountFields()', () => {\n        let formSelector: FormSelector;\n\n        beforeEach(() => {\n            formSelector = createFormSelector(state.formFields);\n        });\n\n        it('returns the customer account fields', () => {\n            const { customerAccount } = getFormFields();\n\n            expect(formSelector.getCustomerAccountFields()).toEqual(customerAccount);\n        });\n    });\n\n    describe('#getAddressExtraFields()', () => {\n        it('returns all mapped B2B extra fields from address extra fields', () => {\n            const b2bState: FormFieldsState = {\n                data: getFormFields(),\n                extraFields: { address: getAddressExtraFields(), order: [] },\n                errors: {},\n                statuses: {},\n            };\n\n            const formSelector = createFormSelector(b2bState);\n            const result = formSelector.getAddressExtraFields();\n\n            expect(result).toHaveLength(5);\n            expect(result[0].name).toBe('b2bExtraField_13449');\n            expect(result[0].required).toBe(true);\n            expect(result[0].fieldType).toBe('text');\n            expect(result[1].name).toBe('b2bExtraField_13453');\n            expect(result[1].fieldType).toBe('multiline');\n            expect(result[1].options).toEqual({ rows: 8 });\n            expect(result[2].name).toBe('b2bExtraField_13457');\n            expect(result[2].type).toBe('integer');\n            expect(result[3].name).toBe('b2bExtraField_13530');\n            expect(result[3].fieldType).toBe('dropdown');\n            expect(result[3].options?.items).toHaveLength(8);\n            expect(result[4].name).toBe('b2bExtraField_13531');\n            expect(result[4].fieldType).toBe('dropdown');\n        });\n\n        it('returns empty array when no B2B extra fields are present', () => {\n            const formSelector = createFormSelector(state.formFields);\n\n            expect(formSelector.getAddressExtraFields()).toEqual([]);\n        });\n\n        it('returns empty array when extraFields.address is an empty array', () => {\n            const b2bState: FormFieldsState = {\n                data: getFormFields(),\n                extraFields: { address: [], order: [] },\n                errors: {},\n                statuses: {},\n            };\n\n            const formSelector = createFormSelector(b2bState);\n\n            expect(formSelector.getAddressExtraFields()).toEqual([]);\n        });\n    });\n\n    describe('#getOrderExtraFields()', () => {\n        it('returns all mapped B2B extra fields from order extra fields', () => {\n            const b2bState: FormFieldsState = {\n                data: getFormFields(),\n                extraFields: { address: [], order: getOrderExtraFields() },\n                errors: {},\n                statuses: {},\n            };\n\n            const formSelector = createFormSelector(b2bState);\n            const result = formSelector.getOrderExtraFields();\n\n            expect(result).toHaveLength(4);\n            expect(result[0].name).toBe('b2bExtraField_20001');\n            expect(result[0].required).toBe(true);\n            expect(result[0].fieldType).toBe('text');\n            expect(result[1].name).toBe('b2bExtraField_20002');\n            expect(result[1].fieldType).toBe('multiline');\n            expect(result[1].options).toEqual({ rows: 4 });\n            expect(result[2].name).toBe('b2bExtraField_20003');\n            expect(result[2].fieldType).toBe('dropdown');\n            expect(result[2].options?.items).toHaveLength(3);\n            expect(result[3].name).toBe('b2bExtraField_20004');\n            expect(result[3].type).toBe('integer');\n            expect(result[3].max).toBe(100000);\n        });\n\n        it('returns empty array when extraFields.order is an empty array', () => {\n            const b2bState: FormFieldsState = {\n                data: getFormFields(),\n                extraFields: { address: [], order: [] },\n                errors: {},\n                statuses: {},\n            };\n\n            const formSelector = createFormSelector(b2bState);\n\n            expect(formSelector.getOrderExtraFields()).toEqual([]);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/form/form-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\nimport { find } from 'lodash';\n\nimport { createSelector } from '../common/selector';\nimport { Country } from '../geography';\n\nimport FormField from './form-field';\nimport FormFieldsState, { DEFAULT_STATE } from './form-fields-state';\nimport mapExtraFieldToFormField from './map-extra-field-to-form-field';\n\nexport default interface FormSelector {\n    getShippingAddressFields(countries: Country[] | undefined, countryCode: string): FormField[];\n    getBillingAddressFields(countries: Country[] | undefined, countryCode: string): FormField[];\n    getCustomerAccountFields(): FormField[];\n    getAddressExtraFields(): FormField[];\n    getOrderExtraFields(): FormField[];\n    getLoadError(): Error | undefined;\n    isLoading(): boolean;\n}\n\nexport type FormSelectorFactory = (state: FormFieldsState) => FormSelector;\n\nexport function createFormSelectorFactory(): FormSelectorFactory {\n    const getShippingAddressFields = createSelector(\n        (state: FormFieldsState) => state.data,\n        (formFields) =>\n            (countries: Country[] = [], countryCode: string) => {\n                const selectedCountry = find(countries, { code: countryCode });\n                const fields = formFields ? formFields.shippingAddress : [];\n\n                return fields.map((field: any) => processField(field, countries, selectedCountry));\n            },\n    );\n\n    const getBillingAddressFields = createSelector(\n        (state: FormFieldsState) => state.data,\n        (formFields) =>\n            (countries: Country[] = [], countryCode: string) => {\n                const selectedCountry = find(countries, { code: countryCode });\n                const fields = formFields ? formFields.billingAddress : [];\n\n                return fields.map((field: any) => processField(field, countries, selectedCountry));\n            },\n    );\n\n    const getCustomerAccountFields = createSelector(\n        (state: FormFieldsState) => state.data,\n        (formFields) => () => formFields ? formFields.customerAccount : [],\n    );\n\n    const getAddressExtraFields = createSelector(\n        (state: FormFieldsState) => state.extraFields,\n        (extraFields) => () => {\n            if (!extraFields || !extraFields.address.length) {\n                return [];\n            }\n\n            return extraFields.address.map(mapExtraFieldToFormField);\n        },\n    );\n\n    const getOrderExtraFields = createSelector(\n        (state: FormFieldsState) => state.extraFields,\n        (extraFields) => () => {\n            if (!extraFields || !extraFields.order.length) {\n                return [];\n            }\n\n            return extraFields.order.map(mapExtraFieldToFormField);\n        },\n    );\n\n    const getLoadError = createSelector(\n        (state: FormFieldsState) => state.errors.loadError,\n        (error) => () => error,\n    );\n\n    const isLoading = createSelector(\n        (state: FormFieldsState) => !!state.statuses.isLoading,\n        (status) => () => status,\n    );\n\n    function processField(\n        field: FormField,\n        countries: Country[],\n        selectedCountry?: Country,\n    ): FormField {\n        if (field.name === 'countryCode') {\n            return processCountry(field, countries, selectedCountry);\n        }\n\n        if (field.name === 'stateOrProvince') {\n            return processProvince(field, selectedCountry);\n        }\n\n        if (field.name === 'postalCode') {\n            return processsPostCode(field, selectedCountry);\n        }\n\n        return field;\n    }\n\n    function processCountry(\n        field: FormField,\n        countries: Country[] = [],\n        country?: Country,\n    ): FormField {\n        if (!countries.length) {\n            return field;\n        }\n\n        const { code = '' } = country || {};\n        const items = countries.map(({ code, name }: any) => ({\n            value: code,\n            label: name,\n        }));\n\n        return {\n            ...field,\n            options: { items },\n            default: code,\n            type: 'array',\n            fieldType: 'dropdown',\n            itemtype: 'string',\n        };\n    }\n\n    function processProvince(field: FormField, country?: Country): FormField {\n        const { subdivisions = [], requiresState } = country || {};\n\n        if (!subdivisions.length) {\n            return {\n                ...field,\n                required: requiresState == null ? false : requiresState,\n            };\n        }\n\n        const items = subdivisions.map(({ code, name }: any) => ({\n            value: code,\n            label: name,\n        }));\n\n        return {\n            ...field,\n            name: 'stateOrProvinceCode',\n            options: { items },\n            required: requiresState == null ? true : requiresState,\n            type: 'array',\n            fieldType: 'dropdown',\n            itemtype: 'string',\n        };\n    }\n\n    function processsPostCode(field: FormField, country?: Country): FormField {\n        const { hasPostalCodes = [] } = country || {};\n\n        if (hasPostalCodes === undefined) {\n            return field;\n        }\n\n        return { ...field, required: Boolean(hasPostalCodes) };\n    }\n\n    return memoizeOne((state: FormFieldsState = DEFAULT_STATE): FormSelector => {\n        return {\n            getShippingAddressFields: getShippingAddressFields(state),\n            getBillingAddressFields: getBillingAddressFields(state),\n            getCustomerAccountFields: getCustomerAccountFields(state),\n            getAddressExtraFields: getAddressExtraFields(state),\n            getOrderExtraFields: getOrderExtraFields(state),\n            getLoadError: getLoadError(state),\n            isLoading: isLoading(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/form/form.mock.ts",
    "content": "import { ExtraField } from './extra-field';\nimport FormField, { FormFields } from './form-field';\nimport FormFieldsState from './form-fields-state';\n\nexport function getFormFieldsState(): FormFieldsState {\n    return {\n        data: getFormFields(),\n        errors: {},\n        statuses: {},\n    };\n}\n\nexport function getFormFields(): FormFields {\n    return {\n        customerAccount: getAccountFormFields(),\n        billingAddress: getAddressFormFields(),\n        shippingAddress: getAddressFormFields(),\n    };\n}\n\nexport function getAccountFormFields(): FormField[] {\n    return [\n        {\n            id: 'field_4',\n            name: 'firstName',\n            custom: false,\n            label: 'First Name',\n            required: true,\n            default: '',\n        },\n        {\n            id: 'field_5',\n            name: 'lastName',\n            custom: false,\n            label: 'Last Name',\n            required: true,\n            default: '',\n        },\n    ];\n}\n\nexport function getAddressFormFields(): FormField[] {\n    return [\n        {\n            id: 'field_4',\n            name: 'firstName',\n            custom: false,\n            label: 'First Name',\n            required: true,\n            default: '',\n        },\n        {\n            id: 'field_5',\n            name: 'lastName',\n            custom: false,\n            label: 'Last Name',\n            required: true,\n            default: '',\n        },\n        {\n            id: 'field_6',\n            name: 'company',\n            custom: false,\n            label: 'Company Name',\n            required: false,\n            default: '',\n        },\n        {\n            id: 'field_7',\n            name: 'phone',\n            custom: false,\n            label: 'Phone Number',\n            required: true,\n            default: '',\n        },\n        {\n            id: 'field_8',\n            name: 'address1',\n            custom: false,\n            label: 'Address Line 1',\n            required: true,\n            default: '',\n        },\n        {\n            id: 'field_9',\n            name: 'address2',\n            custom: false,\n            label: 'Address Line 2',\n            required: false,\n            default: '',\n        },\n        {\n            id: 'field_10',\n            name: 'city',\n            custom: false,\n            label: 'Suburb/City',\n            required: true,\n            default: '',\n        },\n        {\n            id: 'field_11',\n            name: 'countryCode',\n            custom: false,\n            label: 'Country',\n            required: true,\n        },\n        {\n            id: 'field_12',\n            name: 'stateOrProvince',\n            custom: false,\n            label: 'State/Province',\n            required: true,\n        },\n        {\n            id: 'field_13',\n            name: 'postalCode',\n            custom: false,\n            label: 'Zip/Postcode',\n            required: true,\n            default: '',\n        },\n        {\n            id: 'field_25',\n            name: 'field_25',\n            custom: true,\n            label: 'picklist',\n            required: false,\n            type: 'array',\n            fieldType: 'dropdown',\n            itemtype: 'string',\n            options: {\n                helperLabel: 'my pick list',\n                items: [\n                    {\n                        value: '0',\n                        label: 'my',\n                    },\n                    {\n                        value: '1',\n                        label: 'pick',\n                    },\n                    {\n                        value: '2',\n                        label: 'list',\n                    },\n                ],\n            },\n        },\n    ];\n}\n\nexport function getAddressExtraFields(): ExtraField[] {\n    return [\n        {\n            id: '13449',\n            name: 'textRequired',\n\n            visibleToStorefront: true,\n            type: 'text',\n            isRequired: true,\n            config: { defaultValue: 'ddd', maxLength: 10 },\n        },\n        {\n            id: '13453',\n            name: 'multilineText',\n\n            visibleToStorefront: true,\n            type: 'multiline_text',\n            isRequired: false,\n            config: { defaultValue: 'optional multi-line text', numberOfRows: 8 },\n        },\n        {\n            id: '13457',\n            name: 'number',\n\n            visibleToStorefront: true,\n            type: 'number',\n            isRequired: false,\n            config: { defaultValue: 100, maxValue: 1000 },\n        },\n        {\n            id: '13530',\n            name: 'dropdownRequired',\n\n            visibleToStorefront: true,\n            type: 'dropdown',\n            isRequired: true,\n            config: { options: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] },\n        },\n        {\n            id: '13531',\n            name: 'dropdownOptional',\n\n            visibleToStorefront: true,\n            type: 'dropdown',\n            isRequired: false,\n            config: { options: ['A', 'B', 'C', 'D', 'E', 'F', 'G'] },\n        },\n    ];\n}\n\nexport function getOrderExtraFields(): ExtraField[] {\n    return [\n        {\n            id: '20001',\n            name: 'poNumber',\n            visibleToStorefront: true,\n            type: 'text',\n            isRequired: true,\n            config: { maxLength: 30 },\n        },\n        {\n            id: '20002',\n            name: 'deliveryInstructions',\n            visibleToStorefront: true,\n            type: 'multiline_text',\n            isRequired: false,\n            config: { numberOfRows: 4 },\n        },\n        {\n            id: '20003',\n            name: 'orderPriority',\n            visibleToStorefront: true,\n            type: 'dropdown',\n            isRequired: false,\n            config: { options: ['Low', 'Normal', 'High'] },\n        },\n        {\n            id: '20004',\n            name: 'maxBudget',\n            visibleToStorefront: true,\n            type: 'number',\n            isRequired: false,\n            config: { maxValue: 100000 },\n        },\n    ];\n}\n"
  },
  {
    "path": "packages/core/src/form/index.ts",
    "content": "export * from './form-fields-actions';\n\nexport {\n    ExtraField,\n    ExtraFieldConfig,\n    ExtraFields,\n    ExtraFieldType,\n    AddressExtraFieldValue,\n} from './extra-field';\nexport {\n    default as FormSelector,\n    FormSelectorFactory,\n    createFormSelectorFactory,\n} from './form-selector';\nexport { default as FormField, FormFields } from './form-field';\nexport { default as FormFieldsRequestSender } from './form-fields-request-sender';\n\nexport { default as FormFieldsActionCreator } from './form-fields-action-creator';\nexport { default as formFieldsReducer } from './form-fields-reducer';\nexport { default as FormFieldsState, DEFAULT_STATE } from './form-fields-state';\nexport {\n    default as mapExtraFieldToFormField,\n    isExtraField,\n    B2B_EXTRA_FIELD_PREFIX,\n} from './map-extra-field-to-form-field';\n"
  },
  {
    "path": "packages/core/src/form/map-extra-field-to-form-field.spec.ts",
    "content": "import { ExtraField } from './extra-field';\nimport mapExtraFieldToFormField, { isExtraField } from './map-extra-field-to-form-field';\n\ndescribe('mapB2bExtraFieldToFormField', () => {\n    it('maps a text field', () => {\n        const extraField: ExtraField = {\n            id: '100',\n            name: 'textField',\n            visibleToStorefront: true,\n            type: 'text',\n            isRequired: true,\n            config: { defaultValue: 'hello', maxLength: 50 },\n        };\n\n        const result = mapExtraFieldToFormField(extraField);\n\n        expect(result).toEqual({\n            id: 'b2bExtraField_100',\n            name: 'b2bExtraField_100',\n            custom: false,\n            label: 'textField',\n            hidden: false,\n            required: true,\n            default: 'hello',\n            fieldType: 'text',\n            type: 'string',\n            maxLength: 50,\n            max: undefined,\n            options: undefined,\n        });\n    });\n\n    it('maps a multiline text field', () => {\n        const extraField: ExtraField = {\n            id: '200',\n            name: 'multilineField',\n            visibleToStorefront: true,\n            type: 'multiline_text',\n            isRequired: false,\n            config: { defaultValue: 'multi', numberOfRows: 5 },\n        };\n\n        const result = mapExtraFieldToFormField(extraField);\n\n        expect(result).toEqual({\n            id: 'b2bExtraField_200',\n            name: 'b2bExtraField_200',\n            custom: false,\n            label: 'multilineField',\n            hidden: false,\n            required: false,\n            default: 'multi',\n            fieldType: 'multiline',\n            type: 'string',\n            maxLength: undefined,\n            max: undefined,\n            options: { rows: 5 },\n        });\n    });\n\n    it('maps a number field', () => {\n        const extraField: ExtraField = {\n            id: '300',\n            name: 'numberField',\n            visibleToStorefront: true,\n            type: 'number',\n            isRequired: true,\n            config: { defaultValue: 42, maxValue: 1000 },\n        };\n\n        const result = mapExtraFieldToFormField(extraField);\n\n        expect(result).toEqual({\n            id: 'b2bExtraField_300',\n            name: 'b2bExtraField_300',\n            custom: false,\n            label: 'numberField',\n            hidden: false,\n            required: true,\n            default: '42',\n            fieldType: 'text',\n            type: 'integer',\n            maxLength: undefined,\n            max: 1000,\n            options: undefined,\n        });\n    });\n\n    it('maps a dropdown field', () => {\n        const extraField: ExtraField = {\n            id: '400',\n            name: 'dropdownField',\n            visibleToStorefront: true,\n            type: 'dropdown',\n            isRequired: true,\n            config: { options: ['A', 'B', 'C'] },\n        };\n\n        const result = mapExtraFieldToFormField(extraField);\n\n        expect(result).toEqual({\n            id: 'b2bExtraField_400',\n            name: 'b2bExtraField_400',\n            custom: false,\n            label: 'dropdownField',\n            hidden: false,\n            required: true,\n            default: undefined,\n            fieldType: 'dropdown',\n            type: 'array',\n            maxLength: undefined,\n            max: undefined,\n            options: {\n                items: [\n                    { value: 'A', label: 'A' },\n                    { value: 'B', label: 'B' },\n                    { value: 'C', label: 'C' },\n                ],\n            },\n        });\n    });\n});\n\ndescribe('defaultValue coercion', () => {\n    it('stringifies a numeric defaultValue', () => {\n        const extraField: ExtraField = {\n            id: '500',\n            name: 'numericDefault',\n            visibleToStorefront: true,\n            type: 'number',\n            isRequired: false,\n            config: { defaultValue: 0, maxValue: 100 },\n        };\n\n        const result = mapExtraFieldToFormField(extraField);\n\n        expect(result.default).toBe('0');\n    });\n\n    it('passes through a string defaultValue as-is', () => {\n        const extraField: ExtraField = {\n            id: '501',\n            name: 'stringDefault',\n            visibleToStorefront: true,\n            type: 'text',\n            isRequired: false,\n            config: { defaultValue: 'preset' },\n        };\n\n        const result = mapExtraFieldToFormField(extraField);\n\n        expect(result.default).toBe('preset');\n    });\n\n    it('returns undefined when config has no defaultValue', () => {\n        const extraField: ExtraField = {\n            id: '502',\n            name: 'noDefault',\n            visibleToStorefront: true,\n            type: 'dropdown',\n            isRequired: false,\n            config: { options: ['X', 'Y'] },\n        };\n\n        const result = mapExtraFieldToFormField(extraField);\n\n        expect(result.default).toBeUndefined();\n    });\n});\n\ndescribe('isB2bExtraField', () => {\n    it('returns true for B2B extra fields', () => {\n        expect(\n            isExtraField({\n                id: 'b2bExtraField_100',\n                name: 'b2bExtraField_100',\n                custom: false,\n                label: 'Test',\n                required: false,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns false for regular form fields', () => {\n        expect(\n            isExtraField({\n                id: 'field_4',\n                name: 'firstName',\n                custom: false,\n                label: 'First Name',\n                required: true,\n            }),\n        ).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/form/map-extra-field-to-form-field.ts",
    "content": "import { ExtraField, ExtraFieldType } from './extra-field';\nimport FormField, { FormFieldFieldType, FormFieldType } from './form-field';\n\nexport const B2B_EXTRA_FIELD_PREFIX = 'b2bExtraField_';\n\nexport function isExtraField(field: FormField): boolean {\n    return field.name.startsWith(B2B_EXTRA_FIELD_PREFIX);\n}\n\nexport default function mapExtraFieldToFormField(extraField: ExtraField): FormField {\n    const { fieldType, type } = getFieldTypeInfo(extraField.type);\n\n    let options: FormField['options'];\n\n    if (extraField.config.numberOfRows) {\n        options = { rows: extraField.config.numberOfRows };\n    }\n\n    if (extraField.config.options?.length) {\n        options = {\n            ...options,\n            items: extraField.config.options.map((val) => ({\n                value: val,\n                label: val,\n            })),\n        };\n    }\n\n    return {\n        id: `${B2B_EXTRA_FIELD_PREFIX}${extraField.id}`,\n        name: `${B2B_EXTRA_FIELD_PREFIX}${extraField.id}`,\n        custom: false,\n        label: extraField.name,\n        hidden: !extraField.visibleToStorefront,\n        required: extraField.isRequired,\n        default:\n            extraField.config.defaultValue != null\n                ? String(extraField.config.defaultValue)\n                : undefined,\n        fieldType,\n        type,\n        maxLength: extraField.config.maxLength,\n        max: extraField.config.maxValue,\n        options,\n    };\n}\n\nfunction getFieldTypeInfo(extraFieldType: ExtraFieldType): {\n    fieldType: FormFieldFieldType;\n    type: FormFieldType;\n} {\n    switch (extraFieldType) {\n        case 'multiline_text':\n            return { fieldType: 'multiline', type: 'string' };\n\n        case 'number':\n            return { fieldType: 'text', type: 'integer' };\n\n        case 'dropdown':\n            return { fieldType: 'dropdown', type: 'array' };\n\n        case 'text':\n        default:\n            return { fieldType: 'text', type: 'string' };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/geography/countries.mock.ts",
    "content": "import Country from './country';\nimport { CountryResponseBody } from './country-responses';\nimport CountryState from './country-state';\n\nexport function getCountries(): Country[] {\n    return [getAustralia(), getUnitedStates(), getJapan()];\n}\n\nexport function getCountriesResponseBody(): CountryResponseBody {\n    return {\n        meta: {},\n        data: getCountries(),\n    };\n}\n\nexport function getCountriesState(): CountryState {\n    return {\n        data: getCountries(),\n        errors: {},\n        statuses: {},\n    };\n}\n\nexport function getAustralia(): Country {\n    return {\n        code: 'AU',\n        name: 'Australia',\n        subdivisions: [\n            { code: 'NSW', name: 'New South Wales' },\n            { code: 'VIC', name: 'Victoria' },\n        ],\n        hasPostalCodes: true,\n        requiresState: true,\n    };\n}\n\nexport function getUnitedStates(): Country {\n    return {\n        code: 'US',\n        name: 'United States',\n        hasPostalCodes: true,\n        subdivisions: [\n            { code: 'CA', name: 'California' },\n            { code: 'TX', name: 'Texas' },\n        ],\n        requiresState: false,\n    };\n}\n\nexport function getJapan(): Country {\n    return {\n        code: 'JP',\n        name: 'Japan',\n        hasPostalCodes: false,\n        subdivisions: [],\n        requiresState: false,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/geography/country-action-creator.spec.ts",
    "content": "import { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { ErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport { getCountries } from './countries.mock';\nimport CountryActionCreator from './country-action-creator';\nimport { CountryActionType } from './country-actions';\nimport CountryRequestSender from './country-request-sender';\n\ndescribe('CountryActionCreator', () => {\n    let countryRequestSender: CountryRequestSender;\n    let countryActionCreator: CountryActionCreator;\n    let errorResponse: Response<ErrorResponseBody>;\n    let response: Response<any>;\n\n    beforeEach(() => {\n        response = getResponse({ data: getCountries() });\n        errorResponse = getErrorResponse();\n\n        countryRequestSender = new CountryRequestSender(createRequestSender(), { locale: '' });\n        countryActionCreator = new CountryActionCreator(countryRequestSender);\n\n        jest.spyOn(countryRequestSender, 'loadCountries').mockReturnValue(\n            Promise.resolve(response),\n        );\n    });\n\n    describe('#loadCountries()', () => {\n        it('emits actions if able to load countries', () => {\n            countryActionCreator\n                .loadCountries()\n                .pipe(toArray())\n                .subscribe((actions) => {\n                    expect(actions).toEqual([\n                        { type: CountryActionType.LoadCountriesRequested },\n                        {\n                            type: CountryActionType.LoadCountriesSucceeded,\n                            payload: response.body.data,\n                        },\n                    ]);\n                });\n        });\n\n        it('emits error actions if unable to load countries', () => {\n            jest.spyOn(countryRequestSender, 'loadCountries').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            countryActionCreator\n                .loadCountries()\n                .pipe(catchError(errorHandler), toArray())\n                .subscribe((actions) => {\n                    expect(actions).toEqual([\n                        { type: CountryActionType.LoadCountriesRequested },\n                        {\n                            type: CountryActionType.LoadCountriesFailed,\n                            payload: errorResponse,\n                            error: true,\n                        },\n                    ]);\n                });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/geography/country-action-creator.ts",
    "content": "import { Action, createAction, createErrorAction } from '@bigcommerce/data-store';\nimport { Observable, Observer } from 'rxjs';\n\nimport { RequestOptions } from '../common/http-request';\n\nimport Country from './country';\nimport { CountryActionType } from './country-actions';\nimport CountryRequestSender from './country-request-sender';\n\nexport default class CountryActionCreator {\n    constructor(private _countryRequestSender: CountryRequestSender) {}\n\n    loadCountries(options?: RequestOptions): Observable<Action<Country[]>> {\n        return Observable.create((observer: Observer<Action<Country[]>>) => {\n            observer.next(createAction(CountryActionType.LoadCountriesRequested));\n\n            this._countryRequestSender\n                .loadCountries(options)\n                .then((response) => {\n                    observer.next(\n                        createAction(CountryActionType.LoadCountriesSucceeded, response.body.data),\n                    );\n                    observer.complete();\n                })\n                .catch((response) => {\n                    observer.error(\n                        createErrorAction(CountryActionType.LoadCountriesFailed, response),\n                    );\n                });\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/geography/country-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport Country from './country';\n\nexport enum CountryActionType {\n    LoadCountriesRequested = 'LOAD_COUNTRIES_REQUESTED',\n    LoadCountriesSucceeded = 'LOAD_COUNTRIES_SUCCEEDED',\n    LoadCountriesFailed = 'LOAD_COUNTRIES_FAILED',\n}\n\nexport type LoadCountriesAction =\n    | LoadCountriesRequestedAction\n    | LoadCountriesSucceededAction\n    | LoadCountriesFailedAction;\n\nexport interface LoadCountriesRequestedAction extends Action {\n    type: CountryActionType.LoadCountriesRequested;\n}\n\nexport interface LoadCountriesSucceededAction extends Action<Country[]> {\n    type: CountryActionType.LoadCountriesSucceeded;\n}\n\nexport interface LoadCountriesFailedAction extends Action<Error> {\n    type: CountryActionType.LoadCountriesFailed;\n}\n"
  },
  {
    "path": "packages/core/src/geography/country-reducer.spec.ts",
    "content": "import { RequestErrorFactory } from '../common/error';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport { getCountries } from './countries.mock';\nimport { CountryActionType, LoadCountriesAction } from './country-actions';\nimport countryReducer from './country-reducer';\nimport CountryState from './country-state';\n\ndescribe('countryReducer()', () => {\n    let initialState: CountryState;\n\n    beforeEach(() => {\n        initialState = {\n            data: getCountries(),\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    it('returns a new state when fetching new countries', () => {\n        const action: LoadCountriesAction = {\n            type: CountryActionType.LoadCountriesRequested,\n        };\n\n        expect(countryReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: {},\n            statuses: { isLoading: true },\n        });\n    });\n\n    it('returns a new state when countries are fetched', () => {\n        const action: LoadCountriesAction = {\n            type: CountryActionType.LoadCountriesSucceeded,\n            payload: [\n                {\n                    code: 'JP',\n                    name: 'Japan',\n                    hasPostalCodes: false,\n                    subdivisions: [],\n                    requiresState: false,\n                },\n            ],\n        };\n\n        expect(countryReducer(initialState, action)).toEqual({\n            data: action.payload,\n            errors: { loadError: undefined },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns a new state when countries cannot be fetched', () => {\n        const action: LoadCountriesAction = {\n            type: CountryActionType.LoadCountriesFailed,\n            payload: new RequestErrorFactory().createError(getErrorResponse()),\n        };\n\n        expect(countryReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: { loadError: action.payload },\n            statuses: { isLoading: false },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/geography/country-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\n\nimport Country from './country';\nimport { CountryActionType, LoadCountriesAction } from './country-actions';\nimport CountryState, {\n    CountryErrorsState,\n    CountryStatusesState,\n    DEFAULT_STATE,\n} from './country-state';\n\nexport default function countryReducer(\n    state: CountryState = DEFAULT_STATE,\n    action: Action,\n): CountryState {\n    const reducer = combineReducers<CountryState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: Country[] | undefined,\n    action: LoadCountriesAction,\n): Country[] | undefined {\n    switch (action.type) {\n        case CountryActionType.LoadCountriesSucceeded:\n            return arrayReplace(data, action.payload);\n\n        default:\n            return data;\n    }\n}\n\nfunction errorsReducer(\n    errors: CountryErrorsState = DEFAULT_STATE.errors,\n    action: LoadCountriesAction,\n): CountryErrorsState {\n    switch (action.type) {\n        case CountryActionType.LoadCountriesRequested:\n        case CountryActionType.LoadCountriesSucceeded:\n            return objectSet(errors, 'loadError', undefined);\n\n        case CountryActionType.LoadCountriesFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: CountryStatusesState = DEFAULT_STATE.statuses,\n    action: LoadCountriesAction,\n): CountryStatusesState {\n    switch (action.type) {\n        case CountryActionType.LoadCountriesRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case CountryActionType.LoadCountriesSucceeded:\n        case CountryActionType.LoadCountriesFailed:\n            return objectSet(statuses, 'isLoading', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/geography/country-request-sender.spec.ts",
    "content": "import {\n    createRequestSender,\n    createTimeout,\n    RequestSender,\n    Response,\n} from '@bigcommerce/request-sender';\n\nimport { SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getResponse } from '../common/http-request/responses.mock';\n\nimport { getCountriesResponseBody } from './countries.mock';\nimport CountryRequestSender from './country-request-sender';\nimport { CountryResponseBody } from './country-responses';\n\ndescribe('CountryRequestSender', () => {\n    let countryRequestSender: CountryRequestSender;\n    let requestSender: RequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        countryRequestSender = new CountryRequestSender(requestSender, { locale: 'en' });\n    });\n\n    describe('#loadCountries()', () => {\n        let response: Response<CountryResponseBody>;\n\n        beforeEach(() => {\n            response = getResponse(getCountriesResponseBody());\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('loads countries', async () => {\n            const output = await countryRequestSender.loadCountries();\n\n            expect(output).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/internalapi/v1/store/countries', {\n                headers: {\n                    'Accept-Language': 'en',\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('loads countries with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const output = await countryRequestSender.loadCountries(options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/internalapi/v1/store/countries', {\n                ...options,\n                headers: {\n                    'Accept-Language': 'en',\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/geography/country-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport { CountryResponseBody } from './country-responses';\n\nexport default class CountryRequestSender {\n    constructor(private _requestSender: RequestSender, private _config: { locale?: string }) {}\n\n    loadCountries({ timeout }: RequestOptions = {}): Promise<Response<CountryResponseBody>> {\n        const url = '/internalapi/v1/store/countries';\n        const headers = {\n            'Accept-Language': this._config.locale,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender.get(url, { headers, timeout });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/geography/country-responses.ts",
    "content": "import Country from './country';\n\nexport interface CountryResponseBody {\n    meta: object;\n    data: Country[];\n}\n"
  },
  {
    "path": "packages/core/src/geography/country-selector.spec.ts",
    "content": "import { CheckoutStoreState } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\n\nimport CountrySelector, {\n    CountrySelectorFactory,\n    createCountrySelectorFactory,\n} from './country-selector';\n\ndescribe('CountrySelector', () => {\n    let countrySelector: CountrySelector;\n    let createCountrySelector: CountrySelectorFactory;\n    let state: CheckoutStoreState;\n\n    beforeEach(() => {\n        createCountrySelector = createCountrySelectorFactory();\n        state = getCheckoutStoreState();\n    });\n\n    describe('#getCountries()', () => {\n        it('returns a list of countries', () => {\n            countrySelector = createCountrySelector(state.countries);\n\n            expect(countrySelector.getCountries()).toEqual(state.countries.data);\n        });\n\n        it('returns an empty array if there are no countries', () => {\n            countrySelector = createCountrySelector({\n                ...state.countries,\n                data: [],\n            });\n\n            expect(countrySelector.getCountries()).toEqual([]);\n        });\n    });\n\n    describe('#getLoadError()', () => {\n        it('returns error if unable to load', () => {\n            const loadError = new Error();\n\n            countrySelector = createCountrySelector({\n                ...state.countries,\n                errors: { loadError },\n            });\n\n            expect(countrySelector.getLoadError()).toEqual(loadError);\n        });\n\n        it('does not returns error if able to load', () => {\n            countrySelector = createCountrySelector(state.countries);\n\n            expect(countrySelector.getLoadError()).toBeUndefined();\n        });\n    });\n\n    describe('#isLoading()', () => {\n        it('returns true if loading countries', () => {\n            countrySelector = createCountrySelector({\n                ...state.countries,\n                statuses: { isLoading: true },\n            });\n\n            expect(countrySelector.isLoading()).toBe(true);\n        });\n\n        it('returns false if not loading countries', () => {\n            countrySelector = createCountrySelector(state.countries);\n\n            expect(countrySelector.isLoading()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/geography/country-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport Country from './country';\nimport CountryState, { DEFAULT_STATE } from './country-state';\n\nexport default interface CountrySelector {\n    getCountries(): Country[] | undefined;\n    getLoadError(): Error | undefined;\n    isLoading(): boolean;\n}\n\nexport type CountrySelectorFactory = (state: CountryState) => CountrySelector;\n\nexport function createCountrySelectorFactory(): CountrySelectorFactory {\n    const getCountries = createSelector(\n        (state: CountryState) => state.data,\n        (countries) => () => countries,\n    );\n\n    const getLoadError = createSelector(\n        (state: CountryState) => state.errors.loadError,\n        (error) => () => error,\n    );\n\n    const isLoading = createSelector(\n        (state: CountryState) => !!state.statuses.isLoading,\n        (status) => () => status,\n    );\n\n    return memoizeOne((state: CountryState = DEFAULT_STATE): CountrySelector => {\n        return {\n            getCountries: getCountries(state),\n            getLoadError: getLoadError(state),\n            isLoading: isLoading(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/geography/country-state.ts",
    "content": "import Country from './country';\n\nexport default interface CountryState {\n    data?: Country[];\n    errors: CountryErrorsState;\n    statuses: CountryStatusesState;\n}\n\nexport interface CountryErrorsState {\n    loadError?: Error;\n}\n\nexport interface CountryStatusesState {\n    isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: CountryState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/geography/country.ts",
    "content": "export default interface Country {\n    code: string;\n    name: string;\n    hasPostalCodes: boolean;\n    subdivisions: Region[];\n    requiresState: boolean;\n}\n\nexport interface Region {\n    code: string;\n    name: string;\n}\n"
  },
  {
    "path": "packages/core/src/geography/index.ts",
    "content": "export * from './country-responses';\n\nexport { default as CountryActionCreator } from './country-action-creator';\nexport { default as CountryRequestSender } from './country-request-sender';\nexport { default as Country } from './country';\nexport {\n    default as CountrySelector,\n    CountrySelectorFactory,\n    createCountrySelectorFactory,\n} from './country-selector';\nexport { default as CountryState } from './country-state';\nexport { default as countryReducer } from './country-reducer';\n"
  },
  {
    "path": "packages/core/src/hosted-form/create-hosted-form-stored-card-service.spec.ts",
    "content": "import createStoredCardHostedFormService from './create-hosted-form-stored-card-service';\nimport StoredCardHostedFormService from './stored-card-hosted-form-service';\n\ndescribe('createStoredCardHostedFormService()', () => {\n    it('returns an instance of StoredCardHostedFormService', () => {\n        const service = createStoredCardHostedFormService('https://bigpay.integration.zone');\n\n        expect(service).toBeInstanceOf(StoredCardHostedFormService);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/create-hosted-form-stored-card-service.ts",
    "content": "import { createCheckoutStore } from '../checkout';\n\nimport HostedFormFactory from './hosted-form-factory';\nimport StoredCardHostedFormService from './stored-card-hosted-form-service';\n\n/**\n * Creates an instance of `StoredCardHostedFormService`.\n *\n *\n * @param host - Host url string parameter.\n * @returns An instance of `StoredCardHostedFormService`.\n */\nexport default function createStoredCardHostedFormService(host: string) {\n    const store = createCheckoutStore();\n\n    return new StoredCardHostedFormService(host, new HostedFormFactory(store));\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/errors/index.ts",
    "content": "export { default as InvalidHostedFormConfigError } from './invalid-hosted-form-config-error';\nexport { default as InvalidHostedFormError } from './invalid-hosted-form-error';\nexport { default as InvalidHostedFormValueError } from './invalid-hosted-form-value-error';\n"
  },
  {
    "path": "packages/core/src/hosted-form/errors/invalid-hosted-form-config-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\nexport default class InvalidHostedFormConfigError extends StandardError {\n    constructor(message?: string) {\n        super(\n            message ||\n                'Unable to proceed due to invalid configuration provided for the hosted payment form.',\n        );\n\n        this.name = 'InvalidHostedFormConfigError';\n        this.type = 'invalid_hosted_form_config';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/errors/invalid-hosted-form-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\nexport default class InvalidHostedFormError extends StandardError {\n    constructor(message?: string) {\n        super(message || 'Unable to proceed due to an unknown error with the hosted payment form.');\n\n        this.name = 'InvalidHostedFormError';\n        this.type = 'invalid_hosted_form';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/errors/invalid-hosted-form-value-error.ts",
    "content": "import { flatMap, map, values } from 'lodash';\n\nimport { StandardError } from '../../common/error/errors';\nimport { HostedInputValidateErrorDataMap } from '../iframe-content';\n\nexport default class InvalidHostedFormValueError extends StandardError {\n    constructor(public errors: HostedInputValidateErrorDataMap) {\n        super(\n            [\n                'Unable to proceed due to invalid user input values',\n                ...flatMap(values(errors), (fieldErrors) =>\n                    map(fieldErrors, ({ message }) => message),\n                ),\n            ].join('. '),\n        );\n\n        this.name = 'InvalidHostedFormValueError';\n        this.type = 'invalid_hosted_form_value';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-field-events.ts",
    "content": "import { CardInstrument } from '../payment/instrument';\n\nimport HostedFieldType from './hosted-field-type';\nimport { HostedFieldStylesMap } from './hosted-form-options';\nimport HostedFormOrderData from './hosted-form-order-data';\nimport {\n    StoredCardHostedFormData,\n    StoredCardHostedFormInstrumentFields,\n} from './stored-card-hosted-form-type';\n\nexport enum HostedFieldEventType {\n    AttachRequested = 'HOSTED_FIELD:ATTACH_REQUESTED',\n    SubmitRequested = 'HOSTED_FIELD:SUBMITTED_REQUESTED',\n    ValidateRequested = 'HOSTED_FIELD:VALIDATE_REQUESTED',\n    StoredCardRequested = 'HOSTED_FIELD:STORED_CARD_REQUESTED',\n}\n\nexport interface HostedFieldEventMap {\n    [HostedFieldEventType.AttachRequested]: HostedFieldAttachEvent;\n    [HostedFieldEventType.SubmitRequested]: HostedFieldSubmitRequestEvent;\n    [HostedFieldEventType.ValidateRequested]: HostedFieldValidateRequestEvent;\n    [HostedFieldEventType.StoredCardRequested]: HostedFieldStoredCardRequestEvent;\n}\n\nexport type HostedFieldEvent =\n    | HostedFieldAttachEvent\n    | HostedFieldSubmitRequestEvent\n    | HostedFieldValidateRequestEvent\n    | HostedFieldStoredCardRequestEvent;\n\nexport interface HostedFieldAttachEvent {\n    type: HostedFieldEventType.AttachRequested;\n    payload: {\n        accessibilityLabel?: string;\n        cardInstrument?: CardInstrument;\n        fontUrls?: string[];\n        placeholder?: string;\n        styles?: HostedFieldStylesMap;\n        origin?: string;\n        type: HostedFieldType;\n    };\n}\n\nexport interface HostedFieldSubmitRequestEvent {\n    type: HostedFieldEventType.SubmitRequested;\n    payload: {\n        data: HostedFormOrderData;\n        fields: HostedFieldType[];\n    };\n}\n\nexport interface HostedFieldValidateRequestEvent {\n    type: HostedFieldEventType.ValidateRequested;\n}\n\nexport interface HostedFieldStoredCardRequestEvent {\n    type: HostedFieldEventType.StoredCardRequested;\n    payload: {\n        data: StoredCardHostedFormData;\n        fields: StoredCardHostedFormInstrumentFields;\n    };\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-field-type.ts",
    "content": "enum HostedFieldType {\n    CardCode = 'cardCode',\n    CardCodeVerification = 'cardCodeVerification',\n    CardExpiry = 'cardExpiry',\n    CardName = 'cardName',\n    CardNumber = 'cardNumber',\n    CardNumberVerification = 'cardNumberVerification',\n}\n\nexport default HostedFieldType;\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-field.spec.ts",
    "content": "import { DetachmentObserver } from '../common/dom';\nimport { RequestError } from '../common/error/errors';\nimport { getResponse } from '../common/http-request/responses.mock';\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { getErrorPaymentResponseBody } from '../payment/payments.mock';\n\nimport { InvalidHostedFormConfigError, InvalidHostedFormError } from './errors';\nimport HostedField from './hosted-field';\nimport { HostedFieldEvent, HostedFieldEventType } from './hosted-field-events';\nimport HostedFieldType from './hosted-field-type';\nimport { getHostedFormOrderData } from './hosted-form-order-data.mock';\nimport { HostedInputEventMap, HostedInputEventType } from './iframe-content';\nimport {\n    StoredCardHostedFormDataMock,\n    StoredCardHostedFormInstrumentFieldsMock,\n} from './stored-card-hosted-form.mock';\n\ndescribe('HostedField', () => {\n    let container: HTMLDivElement;\n    let field: HostedField;\n    let detachmentObserver: Pick<DetachmentObserver, 'ensurePresence'>;\n    let eventPoster: Pick<IframeEventPoster<HostedFieldEvent>, 'post' | 'setTarget'>;\n    let eventListener: Pick<IframeEventListener<HostedInputEventMap>, 'listen'>;\n\n    beforeEach(() => {\n        container = document.createElement('div');\n        detachmentObserver = { ensurePresence: jest.fn((_, promise) => promise) };\n        eventPoster = { post: jest.fn(), setTarget: jest.fn() };\n        eventListener = { listen: jest.fn() };\n\n        container.id = 'field-container-id';\n        document.body.appendChild(container);\n\n        field = new HostedField(\n            HostedFieldType.CardNumber,\n            'field-container-id',\n            'Enter your card number here',\n            'Card number',\n            { default: { color: 'rgb(0, 0, 0)', fontFamily: 'Open Sans, Arial' } },\n            eventPoster as IframeEventPoster<HostedFieldEvent>,\n            eventListener as IframeEventListener<HostedInputEventMap>,\n            detachmentObserver as DetachmentObserver,\n            'some-checkout-id',\n        );\n    });\n\n    afterEach(() => {\n        container.remove();\n    });\n\n    it('attaches iframe to container', () => {\n        field.attach();\n\n        expect(document.querySelector('#field-container-id iframe')).toBeDefined();\n    });\n\n    it('sets iframe URL with version param and checkout param', () => {\n        field.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        expect(document.querySelector<HTMLIFrameElement>('#field-container-id iframe')!.src).toBe(\n            `${location.origin}/checkout/payment/hosted-field?version=1.0.0&checkoutId=some-checkout-id`,\n        );\n    });\n\n    it('sets target for event poster', async () => {\n        process.nextTick(() => {\n            // tslint:disable-next-line:no-non-null-assertion\n            document.querySelector('#field-container-id iframe')!.dispatchEvent(new Event('load'));\n        });\n\n        await field.attach();\n\n        expect(eventPoster.setTarget).toHaveBeenCalled();\n    });\n\n    it('ensures presence of iframe during attachment', async () => {\n        process.nextTick(() => {\n            // tslint:disable-next-line:no-non-null-assertion\n            document.querySelector('#field-container-id iframe')!.dispatchEvent(new Event('load'));\n        });\n\n        const promise = field.attach();\n\n        await promise;\n\n        expect(detachmentObserver.ensurePresence).toHaveBeenCalledWith(\n            [document.querySelector('#field-container-id iframe')],\n            promise,\n        );\n    });\n\n    it('notifies if able to attach', async () => {\n        jest.spyOn(eventPoster, 'post').mockResolvedValue({\n            type: HostedInputEventType.AttachSucceeded,\n        });\n\n        process.nextTick(() => {\n            // tslint:disable-next-line:no-non-null-assertion\n            document.querySelector('#field-container-id iframe')!.dispatchEvent(new Event('load'));\n        });\n\n        await field.attach();\n\n        expect(eventPoster.post).toHaveBeenCalledWith(\n            {\n                type: HostedFieldEventType.AttachRequested,\n                payload: {\n                    accessibilityLabel: 'Card number',\n                    fontUrls: [],\n                    placeholder: 'Enter your card number here',\n                    styles: { default: { color: 'rgb(0, 0, 0)', fontFamily: 'Open Sans, Arial' } },\n                    origin: document.location.origin,\n                    type: HostedFieldType.CardNumber,\n                },\n            },\n            {\n                successType: HostedInputEventType.AttachSucceeded,\n                errorType: HostedInputEventType.AttachFailed,\n            },\n        );\n    });\n\n    it('notifies with font URLs if available', async () => {\n        const linkElement = document.createElement('link');\n\n        linkElement.href = 'https://fonts.googleapis.com/css?family=Open+Sans&display=swap';\n        linkElement.rel = 'stylesheet';\n\n        document.head.appendChild(linkElement);\n\n        jest.spyOn(eventPoster, 'post').mockResolvedValue({\n            type: HostedInputEventType.AttachSucceeded,\n        });\n\n        process.nextTick(() => {\n            // tslint:disable-next-line:no-non-null-assertion\n            document.querySelector('#field-container-id iframe')!.dispatchEvent(new Event('load'));\n        });\n\n        await field.attach();\n\n        expect(eventPoster.post).toHaveBeenCalledWith(\n            {\n                type: HostedFieldEventType.AttachRequested,\n                payload: expect.objectContaining({\n                    type: HostedFieldType.CardNumber,\n                    fontUrls: ['https://fonts.googleapis.com/css?family=Open+Sans&display=swap'],\n                }),\n            },\n            expect.any(Object),\n        );\n    });\n\n    it('throws error if container is invalid', async () => {\n        container.remove();\n\n        try {\n            await field.attach();\n        } catch (error) {\n            expect(error).toBeInstanceOf(InvalidHostedFormConfigError);\n        }\n    });\n\n    it('sends request to submit payment data', async () => {\n        jest.spyOn(eventPoster, 'post').mockResolvedValue({\n            type: HostedInputEventType.SubmitSucceeded,\n        });\n\n        const fields = [HostedFieldType.CardExpiry, HostedFieldType.CardNumber];\n        const data = getHostedFormOrderData();\n\n        await field.submitForm(fields, data);\n\n        expect(eventPoster.post).toHaveBeenCalledWith(\n            {\n                type: HostedFieldEventType.SubmitRequested,\n                payload: { fields, data },\n            },\n            {\n                successType: HostedInputEventType.SubmitSucceeded,\n                errorType: HostedInputEventType.SubmitFailed,\n            },\n        );\n    });\n\n    it('sends request to submit stored card form data', async () => {\n        jest.spyOn(eventPoster, 'post').mockResolvedValue({\n            type: HostedInputEventType.StoredCardSucceeded,\n        });\n\n        await field.submitStoredCardForm(\n            StoredCardHostedFormInstrumentFieldsMock,\n            StoredCardHostedFormDataMock,\n        );\n\n        expect(eventPoster.post).toHaveBeenCalledWith(\n            {\n                type: HostedFieldEventType.StoredCardRequested,\n                payload: {\n                    fields: StoredCardHostedFormInstrumentFieldsMock,\n                    data: StoredCardHostedFormDataMock,\n                },\n            },\n            {\n                successType: HostedInputEventType.StoredCardSucceeded,\n                errorType: HostedInputEventType.StoredCardFailed,\n            },\n        );\n    });\n\n    it('ensures presence of iframe during submission', async () => {\n        field.attach();\n\n        const fields = [HostedFieldType.CardExpiry, HostedFieldType.CardNumber];\n        const data = getHostedFormOrderData();\n        const promise = field.submitForm(fields, data);\n\n        await promise;\n\n        expect(detachmentObserver.ensurePresence).toHaveBeenCalledWith(\n            [document.querySelector('#field-container-id iframe')],\n            promise,\n        );\n    });\n\n    it('throws error if unable to submit payment', async () => {\n        jest.spyOn(eventPoster, 'post').mockRejectedValue({\n            type: HostedInputEventType.SubmitFailed,\n            payload: { error: { code: 'hosted_form_error', message: 'Invalid form' } },\n        });\n\n        const fields = [HostedFieldType.CardExpiry, HostedFieldType.CardNumber];\n        const data = getHostedFormOrderData();\n\n        try {\n            await field.submitForm(fields, data);\n        } catch (error) {\n            expect(error).toBeInstanceOf(InvalidHostedFormError);\n        }\n    });\n\n    it('forwards error if submission fails because of server error', async () => {\n        jest.spyOn(eventPoster, 'post').mockRejectedValue({\n            type: HostedInputEventType.SubmitFailed,\n            payload: {\n                // tslint:disable-next-line:no-non-null-assertion\n                error: getErrorPaymentResponseBody().errors![0],\n                response: getResponse(getErrorPaymentResponseBody()),\n            },\n        });\n\n        const fields = [HostedFieldType.CardExpiry, HostedFieldType.CardNumber];\n        const data = getHostedFormOrderData();\n\n        try {\n            await field.submitForm(fields, data);\n        } catch (error) {\n            expect(error).toBeInstanceOf(RequestError);\n        }\n    });\n\n    it('forwards error if submission fails because of runtime error', async () => {\n        const rejection = new Error('Runtime error');\n\n        jest.spyOn(eventPoster, 'post').mockRejectedValue(rejection);\n\n        const fields = [HostedFieldType.CardExpiry, HostedFieldType.CardNumber];\n        const data = getHostedFormOrderData();\n\n        try {\n            await field.submitForm(fields, data);\n        } catch (error) {\n            expect(error).toEqual(rejection);\n        }\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-field.ts",
    "content": "import { values } from 'lodash';\nimport { fromEvent } from 'rxjs';\nimport { switchMap, take } from 'rxjs/operators';\n\nimport { DetachmentObserver } from '../common/dom';\nimport { mapFromPaymentErrorResponse } from '../common/error/errors';\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { parseUrl } from '../common/url';\nimport { CardInstrument } from '../payment/instrument';\n\nimport {\n    InvalidHostedFormConfigError,\n    InvalidHostedFormError,\n    InvalidHostedFormValueError,\n} from './errors';\nimport { HostedFieldEvent, HostedFieldEventType } from './hosted-field-events';\nimport HostedFieldType from './hosted-field-type';\nimport { HostedFieldStylesMap } from './hosted-form-options';\nimport HostedFormOrderData from './hosted-form-order-data';\nimport {\n    HostedInputEventMap,\n    HostedInputEventType,\n    HostedInputStoredCardSucceededEvent,\n    HostedInputSubmitErrorEvent,\n    HostedInputSubmitSuccessEvent,\n    HostedInputValidateEvent,\n} from './iframe-content';\nimport {\n    StoredCardHostedFormData,\n    StoredCardHostedFormInstrumentFields,\n} from './stored-card-hosted-form-type';\n\nexport const RETRY_INTERVAL = 60 * 1000;\nexport const LAST_RETRY_KEY = 'lastRetry';\n\nexport default class HostedField {\n    private _iframe: HTMLIFrameElement;\n\n    constructor(\n        private _type: HostedFieldType,\n        private _containerId: string,\n        private _placeholder: string,\n        private _accessibilityLabel: string,\n        private _styles: HostedFieldStylesMap,\n        private _eventPoster: IframeEventPoster<HostedFieldEvent>,\n        private _eventListener: IframeEventListener<HostedInputEventMap>,\n        private _detachmentObserver: DetachmentObserver,\n        private _checkoutId?: string,\n        private _cardInstrument?: CardInstrument,\n    ) {\n        this._iframe = document.createElement('iframe');\n\n        const src = this._checkoutId\n            ? `/checkout/payment/hosted-field?version=${LIBRARY_VERSION}&checkoutId=${this._checkoutId}`\n            : `/checkout/payment/hosted-field?version=${LIBRARY_VERSION}`;\n\n        this._iframe.src = src;\n        this._iframe.style.border = 'none';\n        this._iframe.style.height = '100%';\n        this._iframe.style.overflow = 'hidden';\n        this._iframe.style.width = '100%';\n    }\n\n    getType(): HostedFieldType {\n        return this._type;\n    }\n\n    async attach(): Promise<void> {\n        const container = document.getElementById(this._containerId);\n\n        if (!container) {\n            throw new InvalidHostedFormConfigError(\n                'Unable to proceed because the provided container ID is not valid.',\n            );\n        }\n\n        container.appendChild(this._iframe);\n        this._eventListener.listen();\n\n        const promise = fromEvent(this._iframe, 'load')\n            .pipe(\n                switchMap(async ({ target }) => {\n                    const contentWindow = target && (target as HTMLIFrameElement).contentWindow;\n\n                    if (!contentWindow) {\n                        throw new Error('The content window of the iframe cannot be accessed.');\n                    }\n\n                    this._eventPoster.setTarget(contentWindow);\n\n                    await this._eventPoster.post(\n                        {\n                            type: HostedFieldEventType.AttachRequested,\n                            payload: {\n                                accessibilityLabel: this._accessibilityLabel,\n                                cardInstrument: this._cardInstrument,\n                                fontUrls: this._getFontUrls(),\n                                placeholder: this._placeholder,\n                                styles: this._styles,\n                                origin: document.location.origin,\n                                type: this._type,\n                            },\n                        },\n                        {\n                            successType: HostedInputEventType.AttachSucceeded,\n                            errorType: HostedInputEventType.AttachFailed,\n                        },\n                    );\n                }),\n                take(1),\n            )\n            .toPromise();\n\n        await this._detachmentObserver.ensurePresence([this._iframe], promise);\n    }\n\n    detach(): void {\n        if (!this._iframe.parentElement) {\n            return;\n        }\n\n        this._iframe.parentElement.removeChild(this._iframe);\n        this._eventListener.stopListen();\n    }\n\n    async submitForm(\n        fields: HostedFieldType[],\n        data: HostedFormOrderData,\n    ): Promise<HostedInputSubmitSuccessEvent> {\n        try {\n            const promise = this._eventPoster.post<HostedInputSubmitSuccessEvent>(\n                {\n                    type: HostedFieldEventType.SubmitRequested,\n                    payload: { fields, data },\n                },\n                {\n                    successType: HostedInputEventType.SubmitSucceeded,\n                    errorType: HostedInputEventType.SubmitFailed,\n                },\n            );\n\n            return await this._detachmentObserver.ensurePresence([this._iframe], promise);\n        } catch (event) {\n            if (this._isSubmitErrorEvent(event)) {\n                if (event.payload.error.code === 'hosted_form_error') {\n                    throw new InvalidHostedFormError(event.payload.error.message);\n                }\n\n                if (event.payload.response) {\n                    throw mapFromPaymentErrorResponse(event.payload.response);\n                }\n\n                throw new Error(event.payload.error.message);\n            }\n\n            throw event;\n        }\n    }\n\n    async submitStoredCardForm(\n        fields: StoredCardHostedFormInstrumentFields,\n        data: StoredCardHostedFormData,\n    ): Promise<HostedInputStoredCardSucceededEvent> {\n        const promise = this._eventPoster.post<HostedInputStoredCardSucceededEvent>(\n            {\n                type: HostedFieldEventType.StoredCardRequested,\n                payload: { fields, data },\n            },\n            {\n                successType: HostedInputEventType.StoredCardSucceeded,\n                errorType: HostedInputEventType.StoredCardFailed,\n            },\n        );\n\n        return this._detachmentObserver.ensurePresence([this._iframe], promise);\n    }\n\n    async validateForm(): Promise<void> {\n        const promise = this._eventPoster.post<HostedInputValidateEvent>(\n            {\n                type: HostedFieldEventType.ValidateRequested,\n            },\n            {\n                successType: HostedInputEventType.Validated,\n            },\n        );\n\n        const { payload } = await this._detachmentObserver.ensurePresence([this._iframe], promise);\n\n        if (!payload.isValid) {\n            throw new InvalidHostedFormValueError(payload.errors);\n        }\n    }\n\n    private _getFontUrls(): string[] {\n        const hostname = 'fonts.googleapis.com';\n        const links = document.querySelectorAll(`link[href*='${hostname}'][rel='stylesheet']`);\n\n        return Array.prototype.slice\n            .call(links)\n            .filter((link) => parseUrl(link.href).hostname === hostname)\n            .filter((link) =>\n                values(this._styles)\n                    .map((style) => style && style.fontFamily)\n                    .filter((family): family is string => typeof family === 'string')\n                    .some((family) =>\n                        family\n                            .split(/,\\s/)\n                            .some((name) => link.href.indexOf(name.replace(' ', '+')) !== -1),\n                    ),\n            )\n            .map((link) => link.href);\n    }\n\n    private _isSubmitErrorEvent(event: any): event is HostedInputSubmitErrorEvent {\n        return event.type === HostedInputEventType.SubmitFailed;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-form-factory.spec.ts",
    "content": "import { createCheckoutStore, ReadableCheckoutStore } from '../checkout';\n\nimport HostedFieldType from './hosted-field-type';\nimport HostedForm from './hosted-form';\nimport HostedFormFactory from './hosted-form-factory';\n\ndescribe('HostedFormFactory', () => {\n    let factory: HostedFormFactory;\n    let store: ReadableCheckoutStore;\n\n    beforeEach(() => {\n        store = createCheckoutStore();\n        factory = new HostedFormFactory(store);\n    });\n\n    it('creates hosted form', () => {\n        const result = factory.create(\n            'https://store.foobar.com',\n            {\n                fields: {\n                    [HostedFieldType.CardCode]: { containerId: 'card-code' },\n                    [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                    [HostedFieldType.CardName]: { containerId: 'card-name' },\n                    [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                },\n            },\n            'some-checkout-id',\n        );\n\n        expect(result).toBeInstanceOf(HostedForm);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-form-factory.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\nimport { pick } from 'lodash';\n\nimport { ReadableCheckoutStore } from '../checkout';\nimport { DetachmentObserver, MutationObserverFactory } from '../common/dom';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { CardInstrument } from '../payment/instrument';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../spam-protection';\n\nimport HostedField from './hosted-field';\nimport HostedFieldType from './hosted-field-type';\nimport HostedForm from './hosted-form';\nimport LegacyHostedFormOptions, {\n    HostedCardFieldOptionsMap,\n    HostedStoredCardFieldOptionsMap,\n} from './hosted-form-options';\nimport HostedFormOrderDataTransformer from './hosted-form-order-data-transformer';\n\nexport default class HostedFormFactory {\n    constructor(private _store: ReadableCheckoutStore) {}\n\n    create(host: string, options: LegacyHostedFormOptions, checkoutId?: string): HostedForm {\n        const fieldTypes = Object.keys(options.fields) as HostedFieldType[];\n        const fields = fieldTypes.reduce<HostedField[]>((result, type) => {\n            const fields = options.fields as HostedStoredCardFieldOptionsMap &\n                HostedCardFieldOptionsMap;\n            const fieldOptions = fields[type];\n\n            if (!fieldOptions) {\n                return result;\n            }\n\n            return [\n                ...result,\n                new HostedField(\n                    type,\n                    fieldOptions.containerId,\n                    fieldOptions.placeholder || '',\n                    fieldOptions.accessibilityLabel || '',\n                    options.styles || {},\n                    new IframeEventPoster(host),\n                    new IframeEventListener(host),\n                    new DetachmentObserver(new MutationObserverFactory()),\n                    checkoutId,\n                    'instrumentId' in fieldOptions\n                        ? this._getCardInstrument(fieldOptions.instrumentId)\n                        : undefined,\n                ),\n            ];\n        }, []);\n\n        return new HostedForm(\n            fields,\n            new IframeEventListener(host),\n            new HostedFormOrderDataTransformer(this._store),\n            pick(options, 'onBlur', 'onEnter', 'onFocus', 'onCardTypeChange', 'onValidate'),\n            new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n        );\n    }\n\n    private _getCardInstrument(instrumentId: string): CardInstrument {\n        const {\n            instruments: { getCardInstrument },\n        } = this._store.getState();\n        const instrument = getCardInstrument(instrumentId);\n\n        if (!instrument) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentInstrument);\n        }\n\n        return instrument;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-form-options.ts",
    "content": "import HostedFieldType from './hosted-field-type';\nimport {\n    HostedInputBlurEvent,\n    HostedInputCardTypeChangeEvent,\n    HostedInputEnterEvent,\n    HostedInputFocusEvent,\n    HostedInputStyles,\n    HostedInputValidateEvent,\n} from './iframe-content';\n\nexport default interface LegacyHostedFormOptions {\n    fields: HostedFieldOptionsMap;\n    styles?: HostedFieldStylesMap;\n    onBlur?(data: HostedFieldBlurEventData): void;\n    onCardTypeChange?(data: HostedFieldCardTypeChangeEventData): void;\n    onEnter?(data: HostedFieldEnterEventData): void;\n    onFocus?(data: HostedFieldFocusEventData): void;\n    onValidate?(data: HostedFieldValidateEventData): void;\n}\n\nexport type HostedFormErrorDataKeys =\n    | 'number'\n    | 'expirationDate'\n    | 'expirationMonth'\n    | 'expirationYear'\n    | 'cvv'\n    | 'postalCode';\n\nexport interface HostedFormErrorData {\n    isEmpty: boolean;\n    isPotentiallyValid: boolean;\n    isValid: boolean;\n}\n\nexport type HostedFormErrorsData = Partial<Record<HostedFormErrorDataKeys, HostedFormErrorData>>;\n\nexport type HostedFieldBlurEventData = HostedInputBlurEvent['payload'];\nexport type HostedFieldCardTypeChangeEventData = HostedInputCardTypeChangeEvent['payload'];\nexport type HostedFieldEnterEventData = HostedInputEnterEvent['payload'];\nexport type HostedFieldFocusEventData = HostedInputFocusEvent['payload'];\nexport type HostedFieldValidateEventData = HostedInputValidateEvent['payload'];\n\nexport type HostedFieldOptionsMap = HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap;\n\nexport interface HostedCardFieldOptionsMap {\n    [HostedFieldType.CardCode]?: HostedCardFieldOptions;\n    [HostedFieldType.CardExpiry]: HostedCardFieldOptions;\n    [HostedFieldType.CardName]: HostedCardFieldOptions;\n    [HostedFieldType.CardNumber]: HostedCardFieldOptions;\n}\n\nexport interface HostedStoredCardFieldOptionsMap {\n    [HostedFieldType.CardCodeVerification]?: HostedStoredCardFieldOptions;\n    [HostedFieldType.CardNumberVerification]?: HostedStoredCardFieldOptions;\n}\n\nexport interface HostedCardFieldOptions {\n    accessibilityLabel?: string;\n    containerId: string;\n    placeholder?: string;\n}\n\nexport interface HostedStoredCardFieldOptions extends HostedCardFieldOptions {\n    instrumentId: string;\n}\n\nexport interface HostedFieldStylesMap {\n    default?: HostedFieldStyles;\n    error?: HostedFieldStyles;\n    focus?: HostedFieldStyles;\n}\n\nexport type HostedFieldStyles = HostedInputStyles;\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-form-order-data-transformer.spec.ts",
    "content": "import { createCheckoutStore, ReadableCheckoutStore } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\n\nimport HostedFormOrderDataTransformer from './hosted-form-order-data-transformer';\n\ndescribe('HostedFormOrderDataTransformer', () => {\n    let store: ReadableCheckoutStore;\n    let transformer: HostedFormOrderDataTransformer;\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreState());\n        transformer = new HostedFormOrderDataTransformer(store);\n\n        jest.spyOn(store.getState().payment, 'getPaymentToken').mockReturnValue('auth-token');\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(store.getState().instruments, 'getInstrumentsMeta').mockReturnValue({\n            vaultAccessToken: 'vault-token',\n        });\n    });\n\n    it('transforms payload', () => {\n        const result = transformer.transform({\n            methodId: 'authorizenet',\n            paymentData: { shouldSaveInstrument: true },\n        });\n\n        expect(Object.keys(result)).toEqual(\n            expect.arrayContaining([\n                'authToken',\n                'checkout',\n                'config',\n                'order',\n                'orderMeta',\n                'payment',\n                'paymentMethod',\n                'paymentMethodMeta',\n            ]),\n        );\n    });\n\n    it('includes vault access token if paying with stored instrument', () => {\n        const result = transformer.transform({\n            methodId: 'authorizenet',\n            paymentData: { instrumentId: '123' },\n        });\n\n        expect(result.authToken).toBe('auth-token, vault-token');\n    });\n\n    it('does not include vault access token if not paying with stored instrument', () => {\n        const result = transformer.transform({\n            methodId: 'authorizenet',\n            paymentData: {\n                ccExpiry: {\n                    month: '12',\n                    year: '2020',\n                },\n                ccName: 'Foo Bar',\n                ccNumber: '4111 1111 1111 1111',\n            },\n        });\n\n        expect(result.authToken).toBe('auth-token');\n    });\n\n    it('returns AdditionalAction object within response if received as a parameter', () => {\n        const additionalActionMock = {\n            type: 'recaptcha_v2_verification',\n            data: {\n                human_verification_token: 'googleRecaptchaToken',\n            },\n        };\n\n        const result = transformer.transform(\n            {\n                methodId: 'authorizenet',\n                paymentData: { instrumentId: '123' },\n            },\n            additionalActionMock,\n        );\n\n        expect(result.additionalAction).toEqual(additionalActionMock);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-form-order-data-transformer.ts",
    "content": "import { omit } from 'lodash';\n\nimport { ReadableCheckoutStore } from '../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { OrderPaymentRequestBody } from '../order';\nimport {\n    HostedCreditCardInstrument,\n    isVaultedInstrument,\n    PaymentAdditionalAction,\n} from '../payment';\n\nimport HostedFormOrderData from './hosted-form-order-data';\n\nexport default class HostedFormOrderDataTransformer {\n    constructor(private _store: ReadableCheckoutStore) {}\n\n    transform(\n        payload: OrderPaymentRequestBody,\n        additionalAction?: PaymentAdditionalAction,\n    ): HostedFormOrderData {\n        const state = this._store.getState();\n        const checkout = state.checkout.getCheckout();\n        const config = state.config.getConfig();\n        const instrumentMeta = state.instruments.getInstrumentsMeta();\n        const order = state.order.getOrder();\n        const orderMeta = state.order.getOrderMeta();\n        const payment = omit(\n            payload.paymentData,\n            'ccExpiry',\n            'ccName',\n            'ccNumber',\n            'ccCvv',\n        ) as HostedCreditCardInstrument;\n        let paymentMethod = state.paymentMethods.getPaymentMethod(\n            payload.methodId,\n            payload.gatewayId,\n        );\n\n        if (paymentMethod?.gateway === 'worldpayaccess' && paymentMethod?.id === 'credit_card') {\n            paymentMethod = { ...paymentMethod, id: 'worldpayaccess', method: 'credit-card' };\n        }\n\n        const paymentMethodMeta = state.paymentMethods.getPaymentMethodsMeta();\n        const authToken =\n            instrumentMeta && payment && isVaultedInstrument(payment)\n                ? `${state.payment.getPaymentToken()}, ${instrumentMeta.vaultAccessToken}`\n                : state.payment.getPaymentToken();\n\n        if (!authToken) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n        }\n\n        return {\n            additionalAction,\n            authToken,\n            checkout,\n            config,\n            order,\n            orderMeta,\n            payment,\n            paymentMethod,\n            paymentMethodMeta,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-form-order-data.mock.ts",
    "content": "import { getCheckoutWithGiftCertificates } from '../checkout/checkouts.mock';\nimport { getConfig } from '../config/configs.mock';\nimport { getOrder, getOrderMeta } from '../order/orders.mock';\nimport { getPaymentMethod, getPaymentMethodsMeta } from '../payment/payment-methods.mock';\n\nimport HostedFormOrderData from './hosted-form-order-data';\n\nexport function getHostedFormOrderData(): HostedFormOrderData {\n    return {\n        authToken: 'auth-token',\n        checkout: getCheckoutWithGiftCertificates(),\n        config: getConfig(),\n        order: getOrder(),\n        orderMeta: getOrderMeta(),\n        payment: {},\n        paymentMethod: getPaymentMethod(),\n        paymentMethodMeta: getPaymentMethodsMeta(),\n    };\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-form-order-data.ts",
    "content": "import { Checkout } from '../checkout';\nimport { Config } from '../config';\nimport { Order, OrderMeta } from '../order';\nimport {\n    HostedCreditCardInstrument,\n    HostedVaultedInstrument,\n    PaymentAdditionalAction,\n    PaymentInstrumentMeta,\n    PaymentMethod,\n    PaymentMethodMeta,\n} from '../payment';\n\nexport default interface HostedFormOrderData {\n    additionalAction?: PaymentAdditionalAction;\n    authToken: string;\n    checkout?: Checkout;\n    config?: Config;\n    order?: Order;\n    orderMeta?: OrderMeta;\n    payment?: (HostedCreditCardInstrument | HostedVaultedInstrument) & PaymentInstrumentMeta;\n    paymentMethod?: PaymentMethod;\n    paymentMethodMeta?: PaymentMethodMeta;\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-form.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse, getErrorResponseBody } from '../common/http-request/responses.mock';\nimport { IframeEventListener } from '../common/iframe';\nimport { PaymentAdditionalAction } from '../payment';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../spam-protection';\n\nimport HostedField from './hosted-field';\nimport HostedFieldType from './hosted-field-type';\nimport HostedForm from './hosted-form';\nimport LegacyHostedFormOptions from './hosted-form-options';\nimport HostedFormOrderDataTransformer from './hosted-form-order-data-transformer';\nimport { getHostedFormOrderData } from './hosted-form-order-data.mock';\nimport { HostedInputEventMap, HostedInputEventType } from './iframe-content';\nimport {\n    StoredCardHostedFormDataMock,\n    StoredCardHostedFormInstrumentFieldsMock,\n} from './stored-card-hosted-form.mock';\n\ndescribe('HostedForm', () => {\n    let callbacks: Pick<\n        LegacyHostedFormOptions,\n        'onBlur' | 'onCardTypeChange' | 'onEnter' | 'onFocus' | 'onValidate'\n    >;\n    let eventListener: IframeEventListener<HostedInputEventMap>;\n    let fields: HostedField[];\n    let form: HostedForm;\n    let payloadTransformer: Pick<HostedFormOrderDataTransformer, 'transform'>;\n    let paymentHumanVerificationHandler: PaymentHumanVerificationHandler;\n    let errorResponse: RequestError;\n    let additionalActionMock: PaymentAdditionalAction;\n\n    const fieldPrototype: Partial<HostedField> = {\n        attach: jest.fn(),\n        detach: jest.fn(),\n        getType: jest.fn(),\n        submitForm: jest.fn(),\n        submitStoredCardForm: jest.fn(),\n        validateForm: jest.fn(),\n    };\n\n    beforeEach(() => {\n        callbacks = {\n            onBlur: jest.fn(),\n            onEnter: jest.fn(),\n            onFocus: jest.fn(),\n            onCardTypeChange: jest.fn(),\n            onValidate: jest.fn(),\n        };\n\n        fields = [\n            Object.create(fieldPrototype) as HostedField,\n            Object.create(fieldPrototype) as HostedField,\n            Object.create(fieldPrototype) as HostedField,\n            Object.create(fieldPrototype) as HostedField,\n        ];\n\n        jest.spyOn(fields[0], 'getType').mockReturnValue(HostedFieldType.CardCode);\n        jest.spyOn(fields[1], 'getType').mockReturnValue(HostedFieldType.CardExpiry);\n        jest.spyOn(fields[2], 'getType').mockReturnValue(HostedFieldType.CardName);\n        jest.spyOn(fields[3], 'getType').mockReturnValue(HostedFieldType.CardNumber);\n\n        eventListener = new IframeEventListener('https://store.foobar.com');\n        payloadTransformer = { transform: jest.fn() };\n        paymentHumanVerificationHandler = new PaymentHumanVerificationHandler(\n            createSpamProtection(createScriptLoader()),\n        );\n\n        form = new HostedForm(\n            fields,\n            eventListener,\n            payloadTransformer as HostedFormOrderDataTransformer,\n            callbacks,\n            paymentHumanVerificationHandler,\n        );\n\n        errorResponse = {\n            ...getErrorResponse(),\n            body: {\n                ...getErrorResponseBody(),\n                status: 'additional_action_required',\n                additional_action_required: {\n                    type: 'recaptcha_v2_verification',\n                    data: {\n                        key: 'recaptchakey123',\n                    },\n                },\n            },\n            errors: [],\n            name: '',\n            type: '',\n            message: '',\n        };\n\n        additionalActionMock = {\n            type: 'recaptcha_v2_verification',\n            data: {\n                human_verification_token: 'googleRecaptchaToken',\n            },\n        };\n    });\n\n    it('attaches all fields to document', async () => {\n        fields.forEach((field) => jest.spyOn(field, 'attach').mockResolvedValue(undefined));\n\n        await form.attach();\n\n        expect(fields[0].attach).toHaveBeenCalled();\n        expect(fields[1].attach).toHaveBeenCalled();\n        expect(fields[2].attach).toHaveBeenCalled();\n        expect(fields[3].attach).toHaveBeenCalled();\n    });\n\n    it('detaches all fields from document', async () => {\n        fields.forEach((field) => jest.spyOn(field, 'detach').mockReturnValue(undefined));\n\n        await form.detach();\n\n        expect(fields[0].detach).toHaveBeenCalled();\n        expect(fields[1].detach).toHaveBeenCalled();\n        expect(fields[2].detach).toHaveBeenCalled();\n        expect(fields[3].detach).toHaveBeenCalled();\n    });\n\n    it('submits payment by passing order data to number field', async () => {\n        // tslint:disable-next-line:no-non-null-assertion\n        const field = fields.find((field) => field.getType() === HostedFieldType.CardNumber)!;\n        const data = getHostedFormOrderData();\n        const payload = {\n            methodId: 'authorizenet',\n            paymentData: { shouldSaveInstrument: true },\n        };\n        const response = {\n            status: 'ok',\n        };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(field, 'submitForm').mockResolvedValue({ payload: { response } });\n\n        jest.spyOn(payloadTransformer, 'transform').mockReturnValue(data);\n\n        await form.submit(payload);\n\n        expect(payloadTransformer.transform).toHaveBeenCalledWith(payload, undefined);\n        expect(field.submitForm).toHaveBeenCalledWith(\n            fields.map((field) => field.getType()),\n            data,\n        );\n    });\n\n    it('submits stored card form data', async () => {\n        // tslint:disable-next-line:no-non-null-assertion\n        const field = fields.find((field) => field.getType() === HostedFieldType.CardNumber)!;\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(field, 'submitStoredCardForm').mockResolvedValue({});\n\n        await form.submitStoredCard({\n            fields: StoredCardHostedFormInstrumentFieldsMock,\n            data: StoredCardHostedFormDataMock,\n        });\n\n        expect(field.submitStoredCardForm).toHaveBeenCalledWith(\n            StoredCardHostedFormInstrumentFieldsMock,\n            StoredCardHostedFormDataMock,\n        );\n    });\n\n    it('submits payment again after human verification performed', async () => {\n        // tslint:disable-next-line:no-non-null-assertion\n        const field = fields.find((field) => field.getType() === HostedFieldType.CardNumber)!;\n        const data = getHostedFormOrderData();\n        const response = {\n            status: 'ok',\n        };\n        const payload = {\n            methodId: 'authorizenet',\n            paymentData: { shouldSaveInstrument: true },\n        };\n\n        jest.spyOn(field, 'submitForm')\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            .mockResolvedValueOnce({ payload: { response: errorResponse } })\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            .mockResolvedValue({ payload: { response } });\n\n        jest.spyOn(payloadTransformer, 'transform').mockReturnValue(data);\n\n        await form.submit(payload);\n\n        expect(field.submitForm).toHaveBeenCalledTimes(2);\n    });\n\n    it('executes human verification when verification requested error returned', async () => {\n        // tslint:disable-next-line:no-non-null-assertion\n        const field = fields.find((field) => field.getType() === HostedFieldType.CardNumber)!;\n        const data = getHostedFormOrderData();\n        const payload = {\n            methodId: 'authorizenet',\n            paymentData: { shouldSaveInstrument: true },\n        };\n\n        jest.spyOn(field, 'submitForm').mockRejectedValue(errorResponse);\n\n        jest.spyOn(payloadTransformer, 'transform').mockReturnValue(data);\n\n        const errorHandler = jest\n            .spyOn(paymentHumanVerificationHandler, 'handle')\n            .mockReturnValue(Promise.resolve(additionalActionMock));\n\n        try {\n            await form.submit(payload);\n        } catch {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            errorHandler();\n        }\n\n        expect(errorHandler).toHaveBeenCalled();\n        expect(paymentHumanVerificationHandler.handle).toHaveBeenCalledWith(errorResponse);\n    });\n\n    it('notifies when card type changes', () => {\n        eventListener.trigger({\n            type: HostedInputEventType.CardTypeChanged,\n            payload: { cardType: 'visa' },\n        });\n\n        expect(callbacks.onCardTypeChange).toHaveBeenCalledWith({ cardType: 'visa' });\n    });\n\n    it('notifies when validation happens', () => {\n        const payload = {\n            isValid: false,\n            errors: {\n                cardCode: [\n                    {\n                        fieldType: HostedFieldType.CardCode,\n                        type: 'required',\n                        message: 'Missing required data',\n                    },\n                ],\n                cardExpiry: [],\n                cardName: [],\n                cardNumber: [],\n            },\n        };\n\n        eventListener.trigger({ type: HostedInputEventType.Validated, payload });\n\n        expect(callbacks.onValidate).toHaveBeenCalledWith(payload);\n    });\n\n    it('notifies when input receives focus event', () => {\n        eventListener.trigger({\n            type: HostedInputEventType.Focused,\n            payload: { fieldType: HostedFieldType.CardCode },\n        });\n\n        expect(callbacks.onFocus).toHaveBeenCalledWith({ fieldType: HostedFieldType.CardCode });\n    });\n\n    it('notifies when input receives blur event', () => {\n        eventListener.trigger({\n            type: HostedInputEventType.Blurred,\n            payload: { fieldType: HostedFieldType.CardCode },\n        });\n\n        expect(callbacks.onBlur).toHaveBeenCalledWith({ fieldType: HostedFieldType.CardCode });\n    });\n\n    it('notifies when enter key is pressed', async () => {\n        jest.spyOn(fields[0], 'validateForm').mockResolvedValue(undefined);\n\n        eventListener.trigger({\n            type: HostedInputEventType.Entered,\n            payload: { fieldType: HostedFieldType.CardCode },\n        });\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(callbacks.onEnter).toHaveBeenCalledWith({ fieldType: HostedFieldType.CardCode });\n    });\n\n    it('validates form when enter key is pressed', async () => {\n        jest.spyOn(fields[0], 'validateForm').mockResolvedValue(undefined);\n\n        eventListener.trigger({\n            type: HostedInputEventType.Entered,\n            payload: { fieldType: HostedFieldType.CardCode },\n        });\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(fields[0].validateForm).toHaveBeenCalled();\n    });\n\n    it('returns card type', () => {\n        eventListener.trigger({\n            type: HostedInputEventType.CardTypeChanged,\n            payload: { cardType: 'visa' },\n        });\n\n        expect(form.getCardType()).toBe('visa');\n    });\n\n    it('returns bin number', () => {\n        eventListener.trigger({\n            type: HostedInputEventType.BinChanged,\n            payload: { bin: '411111' },\n        });\n\n        expect(form.getBin()).toBe('411111');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/hosted-form.ts",
    "content": "import { noop, without } from 'lodash';\n\nimport { HostedForm as HostedFormInterface } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { IframeEventListener } from '../common/iframe';\nimport { OrderPaymentRequestBody } from '../order';\nimport { PaymentAdditionalAction } from '../payment';\nimport { PaymentHumanVerificationHandler } from '../spam-protection';\n\nimport { InvalidHostedFormConfigError } from './errors';\nimport HostedField from './hosted-field';\nimport LegacyHostedFormOptions from './hosted-form-options';\nimport HostedFormOrderDataTransformer from './hosted-form-order-data-transformer';\nimport {\n    HostedInputEnterEvent,\n    HostedInputEventMap,\n    HostedInputEventType,\n    HostedInputStoredCardSucceededEvent,\n    HostedInputSubmitSuccessEvent,\n} from './iframe-content';\nimport {\n    StoredCardHostedFormData,\n    StoredCardHostedFormInstrumentFields,\n} from './stored-card-hosted-form-type';\n\ntype HostedFormEventCallbacks = Pick<\n    LegacyHostedFormOptions,\n    'onBlur' | 'onCardTypeChange' | 'onFocus' | 'onEnter' | 'onValidate'\n>;\n\nexport default class HostedForm implements HostedFormInterface {\n    private _bin?: string;\n    private _cardType?: string;\n\n    constructor(\n        private _fields: HostedField[],\n        private _eventListener: IframeEventListener<HostedInputEventMap>,\n        private _payloadTransformer: HostedFormOrderDataTransformer,\n        private _eventCallbacks: HostedFormEventCallbacks,\n        private _paymentHumanVerificationHandler: PaymentHumanVerificationHandler,\n    ) {\n        const {\n            onBlur = noop,\n            onCardTypeChange = noop,\n            onFocus = noop,\n            onValidate = noop,\n        } = this._eventCallbacks;\n\n        this._eventListener.addListener(HostedInputEventType.Blurred, ({ payload }) =>\n            onBlur(payload),\n        );\n        this._eventListener.addListener(HostedInputEventType.CardTypeChanged, ({ payload }) =>\n            onCardTypeChange(payload),\n        );\n        this._eventListener.addListener(HostedInputEventType.Focused, ({ payload }) =>\n            onFocus(payload),\n        );\n        this._eventListener.addListener(HostedInputEventType.Validated, ({ payload }) =>\n            onValidate(payload),\n        );\n        this._eventListener.addListener(HostedInputEventType.Entered, this._handleEnter);\n\n        this._eventListener.addListener(\n            HostedInputEventType.CardTypeChanged,\n            ({ payload }) => (this._cardType = payload.cardType),\n        );\n        this._eventListener.addListener(\n            HostedInputEventType.BinChanged,\n            ({ payload }) => (this._bin = payload.bin),\n        );\n    }\n\n    getBin(): string | undefined {\n        return this._bin;\n    }\n\n    getCardType(): string | undefined {\n        return this._cardType;\n    }\n\n    async attach(): Promise<void> {\n        this._eventListener.listen();\n\n        const field = this._getFirstField();\n        const otherFields = without(this._fields, field);\n\n        await field.attach();\n        await Promise.all(otherFields.map((otherField) => otherField.attach()));\n    }\n\n    detach(): void {\n        this._eventListener.stopListen();\n\n        this._fields.forEach((field) => {\n            field.detach();\n        });\n    }\n\n    async submit(\n        payload: OrderPaymentRequestBody,\n        additionalActionData?: PaymentAdditionalAction,\n    ): Promise<HostedInputSubmitSuccessEvent> {\n        try {\n            return await this._getFirstField().submitForm(\n                this._fields.map((field) => field.getType()),\n                this._payloadTransformer.transform(payload, additionalActionData),\n            );\n        } catch (error) {\n            const additionalAction = await this._paymentHumanVerificationHandler.handle(error);\n\n            return await this._getFirstField().submitForm(\n                this._fields.map((field) => field.getType()),\n                this._payloadTransformer.transform(payload, additionalAction),\n            );\n        }\n    }\n\n    async submitStoredCard(payload: {\n        fields: StoredCardHostedFormInstrumentFields;\n        data: StoredCardHostedFormData;\n    }): Promise<HostedInputStoredCardSucceededEvent | void> {\n        return this._getFirstField().submitStoredCardForm(payload.fields, payload.data);\n    }\n\n    async validate(): Promise<void> {\n        return this._getFirstField().validateForm();\n    }\n\n    private _getFirstField(): HostedField {\n        const field = this._fields[0];\n\n        if (!field) {\n            throw new InvalidHostedFormConfigError(\n                'Unable to proceed because the payment form has no field defined.',\n            );\n        }\n\n        return field;\n    }\n\n    private _handleEnter: (event: HostedInputEnterEvent) => Promise<void> = async ({ payload }) => {\n        try {\n            await this.validate();\n        } catch (error) {\n            // Catch form validation error because we want to trigger `onEnter`\n            // irrespective of the validation result.\n            if (error instanceof Error && error.name !== 'InvalidHostedFormValueError') {\n                throw error;\n            }\n        }\n\n        const { onEnter = noop } = this._eventCallbacks;\n\n        onEnter(payload);\n    };\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/card-expiry-date.ts",
    "content": "export default interface CardExpiryDate {\n    month: string;\n    year: string;\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/card-expiry-formatter.spec.ts",
    "content": "import CardExpiryFormatter from './card-expiry-formatter';\n\ndescribe('CardExpiryFormatter', () => {\n    let formatter: CardExpiryFormatter;\n\n    beforeEach(() => {\n        formatter = new CardExpiryFormatter();\n    });\n\n    describe('#format', () => {\n        it('converts date into MM/YY date format', () => {\n            expect(formatter.format('10/2019')).toBe('10 / 19');\n        });\n\n        it('formats partial date value', () => {\n            expect(formatter.format('10')).toBe('10 / ');\n        });\n\n        it('returns month only if there is no year and separator has no trailing space', () => {\n            expect(formatter.format('10 /')).toBe('10');\n        });\n\n        it('surrounds separator with whitespaces', () => {\n            expect(formatter.format('10/19')).toBe('10 / 19');\n        });\n    });\n\n    describe('#toObject', () => {\n        it('converts MM / YY date format into expiry date object', () => {\n            expect(formatter.toObject('01 / 30')).toEqual({ month: '01', year: '2030' });\n\n            expect(formatter.toObject('12 / 30')).toEqual({ month: '12', year: '2030' });\n        });\n\n        it('converts MM / YYYY date format into expiry date object', () => {\n            expect(formatter.toObject('01 / 2030')).toEqual({ month: '01', year: '2030' });\n\n            expect(formatter.toObject('12 / 2030')).toEqual({ month: '12', year: '2030' });\n        });\n\n        it('converts M / YY date format into expiry date object', () => {\n            expect(formatter.toObject('1 / 30')).toEqual({ month: '01', year: '2030' });\n        });\n\n        it('returns empty expiry date object if date format is invalid', () => {\n            expect(formatter.toObject('fo / ba')).toEqual({ month: '', year: '' });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/card-expiry-formatter.ts",
    "content": "import CardExpiryDate from './card-expiry-date';\n\nconst NUMBER_SEPARATOR = '/';\n\nexport default class CardExpiryFormatter {\n    format(value: string): string {\n        const [month = '', year = ''] = value.split(new RegExp(`\\\\s*${NUMBER_SEPARATOR}\\\\s*`));\n        const trimmedMonth = month.slice(0, 2);\n        const trimmedYear =\n            year.length === 4 ? year.slice(-2) : year ? year.slice(0, 2) : month.slice(2);\n\n        // i.e.: '1'\n        if (value.length < 2) {\n            return month;\n        }\n\n        // ie.: '10 /' (without trailing space)\n        if (value.length > 3 && !trimmedYear) {\n            return trimmedMonth;\n        }\n\n        return `${trimmedMonth} ${NUMBER_SEPARATOR} ${trimmedYear}`;\n    }\n\n    toObject(value: string): CardExpiryDate {\n        const [month = '', year = ''] = value.split(new RegExp(`\\\\s*${NUMBER_SEPARATOR}\\\\s*`));\n\n        if (!/^\\d+$/.test(month) || !/^\\d+$/.test(year)) {\n            return { month: '', year: '' };\n        }\n\n        return {\n            month: month.length === 1 ? `0${month}` : month.slice(0, 2),\n            year: year.length === 2 ? `20${year}` : year.slice(0, 4),\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/card-number-formatter.spec.ts",
    "content": "import CardNumberFormatter from './card-number-formatter';\n\ndescribe('CardNumberFormatter', () => {\n    let formatter: CardNumberFormatter;\n\n    beforeEach(() => {\n        formatter = new CardNumberFormatter();\n    });\n\n    describe('#format()', () => {\n        it('formats Visa credit card number', () => {\n            expect(formatter.format('4111111111111111')).toBe('4111 1111 1111 1111');\n\n            expect(formatter.format('4111 1111 1111 1111234')).toBe('4111 1111 1111 1111234');\n        });\n\n        it('formats Mastercard credit card number', () => {\n            expect(formatter.format('5555555555554444')).toBe('5555 5555 5555 4444');\n        });\n\n        it('formats Amex credit card number', () => {\n            expect(formatter.format('378282246310005')).toBe('3782 822463 10005');\n        });\n\n        it('formats Diners Club credit card number', () => {\n            expect(formatter.format('36259600000004')).toBe('3625 960000 0004');\n        });\n\n        it('formats Discover credit card number', () => {\n            expect(formatter.format('6011111111111117')).toBe('6011 1111 1111 1117');\n        });\n\n        it('formats potentially invalid credit card number', () => {\n            expect(formatter.format('41111')).toBe('4111 1');\n\n            expect(formatter.format('5555')).toBe('5555');\n\n            expect(formatter.format('37828224631')).toBe('3782 822463 1');\n        });\n\n        it('does not format if credit card number cannot be recognized', () => {\n            expect(formatter.format('99999999')).toBe('99999999');\n        });\n    });\n\n    describe('#unformat()', () => {\n        it('removes credit card number formatting', () => {\n            expect(formatter.unformat('4111 1111 1111 1111')).toBe('4111111111111111');\n\n            expect(formatter.unformat('3782 822463 10005')).toBe('378282246310005');\n        });\n\n        it('unformats credit card number that is partially complete', () => {\n            expect(formatter.unformat('4111 1111')).toBe('41111111');\n        });\n\n        it('does not do anything if credit card number is invalid', () => {\n            expect(formatter.unformat('xxxx xxxx 1111 1111')).toBe('xxxx xxxx 1111 1111');\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/card-number-formatter.ts",
    "content": "import { creditCardType, number } from 'card-validator';\nimport { max } from 'lodash';\n\nconst NUMBER_SEPARATOR = ' ';\n\nexport default class CardNumberFormatter {\n    format(value: string): string {\n        const { card } = number(value);\n\n        if (!card) {\n            return value;\n        }\n\n        const maxLength = max(creditCardType(value).map((info) => max(info.lengths)));\n        const unformattedValue = this.unformat(value).slice(0, maxLength);\n\n        return card.gaps\n            .filter((gapIndex) => unformattedValue.length > gapIndex)\n            .reduce(\n                (output, gapIndex, index) =>\n                    [output.slice(0, gapIndex + index), output.slice(gapIndex + index)].join(\n                        NUMBER_SEPARATOR,\n                    ),\n                unformattedValue,\n            );\n    }\n\n    unformat(value: string): string {\n        const { card } = number(value);\n\n        if (!card) {\n            return value;\n        }\n\n        return value.replace(new RegExp(NUMBER_SEPARATOR, 'g'), '');\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/get-hosted-input-storage.ts",
    "content": "import HostedInputStorage from './hosted-input-storage';\n\nlet storage: HostedInputStorage | null;\n\nexport default function getHostedInputStorage(): HostedInputStorage {\n    storage = storage || new HostedInputStorage();\n\n    return storage;\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-autocomplete-fieldset.spec.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nimport HostedAutocompleteFieldset from './hosted-autocomplete-fieldset';\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\n\ndescribe('HostedAutocompleteFieldset', () => {\n    let container: HTMLFormElement;\n    let fieldset: HostedAutocompleteFieldset;\n    let inputAggregator: Pick<HostedInputAggregator, 'getInputs'>;\n\n    beforeEach(() => {\n        inputAggregator = { getInputs: jest.fn() };\n\n        container = document.createElement('form');\n        document.body.appendChild(container);\n\n        fieldset = new HostedAutocompleteFieldset(\n            container,\n            [HostedFieldType.CardExpiry, HostedFieldType.CardName],\n            inputAggregator as HostedInputAggregator,\n        );\n    });\n\n    afterEach(() => {\n        container.remove();\n    });\n\n    it('attaches autocomplete inputs to container', () => {\n        fieldset.attach();\n\n        expect(container.querySelector('#autocomplete-card-expiry')).toBeTruthy();\n        expect(container.querySelector('#autocomplete-card-name')).toBeTruthy();\n    });\n\n    it('hides autocomplete input from user', () => {\n        fieldset.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const input = container.querySelector<HTMLInputElement>('#autocomplete-card-expiry')!;\n\n        expect(input.style.opacity).toBe('0');\n        expect(input.style.position).toBe('absolute');\n        expect(input.tabIndex).toBe(-1);\n    });\n\n    it('configures autocomplete property based on field type', () => {\n        fieldset.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const expiryInput = container.querySelector<HTMLInputElement>('#autocomplete-card-expiry')!;\n        // tslint:disable-next-line:no-non-null-assertion\n        const nameInput = container.querySelector<HTMLInputElement>('#autocomplete-card-name')!;\n\n        expect(expiryInput.autocomplete).toBe('cc-exp');\n        expect(nameInput.autocomplete).toBe('cc-name');\n    });\n\n    it('updates corresponding hosted inputs when autocomplete inputs receive update', () => {\n        const hostedExpiryInput: Pick<HostedInput, 'getType' | 'setValue'> = {\n            getType: jest.fn(() => HostedFieldType.CardExpiry),\n            setValue: jest.fn(),\n        };\n        const hostedNameInput: Pick<HostedInput, 'getType' | 'setValue'> = {\n            getType: jest.fn(() => HostedFieldType.CardName),\n            setValue: jest.fn(),\n        };\n\n        jest.spyOn(inputAggregator, 'getInputs').mockReturnValue([\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            hostedExpiryInput,\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            hostedNameInput,\n        ]);\n\n        fieldset.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const input = container.querySelector<HTMLInputElement>('#autocomplete-card-expiry')!;\n\n        input.value = '10 / 20';\n        input.dispatchEvent(new Event('change'));\n\n        expect(hostedExpiryInput.setValue).toHaveBeenCalledWith('10 / 20');\n        expect(hostedNameInput.setValue).not.toHaveBeenCalledWith('10 / 20');\n    });\n\n    it('removes autocomplete inputs when fieldset detaches', () => {\n        fieldset.attach();\n        fieldset.detach();\n\n        expect(container.querySelector('#autocomplete-card-expiry')).toBeFalsy();\n        expect(container.querySelector('#autocomplete-card-name')).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-autocomplete-fieldset.ts",
    "content": "import { kebabCase } from 'lodash';\n\nimport HostedFieldType from '../hosted-field-type';\n\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport mapToAutocompleteType from './map-to-autocomplete-type';\n\nexport default class HostedAutocompleteFieldset {\n    private _inputs: HTMLInputElement[];\n\n    constructor(\n        private _form: HTMLFormElement,\n        private _fieldTypes: HostedFieldType[],\n        private _inputAggregator: HostedInputAggregator,\n    ) {\n        this._inputs = this._fieldTypes.map((type) => this._createInput(type));\n    }\n\n    attach(): void {\n        this._inputs.forEach((input) => this._form.appendChild(input));\n    }\n\n    detach(): void {\n        this._inputs.forEach((input) => {\n            if (!input.parentElement) {\n                return;\n            }\n\n            input.parentElement.removeChild(input);\n        });\n    }\n\n    private _createInput(type: HostedFieldType): HTMLInputElement {\n        const input = document.createElement('input');\n\n        input.autocomplete = mapToAutocompleteType(type);\n        input.id = this._getAutocompleteElementId(type);\n        input.tabIndex = -1;\n        input.style.position = 'absolute';\n        input.style.opacity = '0';\n        input.style.zIndex = '-1';\n\n        input.addEventListener('change', this._handleChange);\n\n        return input;\n    }\n\n    private _handleChange: (event: Event) => void = (event) => {\n        const targetInput = event.target as HTMLInputElement;\n\n        if (!targetInput) {\n            throw new Error('Unable to get a reference to the target of the change event.');\n        }\n\n        const targetHostedInput = this._inputAggregator\n            .getInputs()\n            .find((input) => this._getAutocompleteElementId(input.getType()) === targetInput.id);\n\n        if (!targetHostedInput) {\n            return;\n        }\n\n        targetHostedInput.setValue(targetInput.value);\n    };\n\n    private _getAutocompleteElementId(type: HostedFieldType): string {\n        return `autocomplete-${kebabCase(type)}`;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-card-expiry-input.spec.ts",
    "content": "import { IframeEventListener, IframeEventPoster } from '../../common/iframe';\nimport { HostedFieldEventMap } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport CardExpiryFormatter from './card-expiry-formatter';\nimport HostedCardExpiryInput from './hosted-card-expiry-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent } from './hosted-input-events';\nimport HostedInputPaymentHandler from './hosted-input-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\n\ndescribe('HostedCardExpiryInput', () => {\n    let container: HTMLFormElement;\n    let eventListener: Pick<\n        IframeEventListener<HostedFieldEventMap>,\n        'addListener' | 'listen' | 'stopListen'\n    >;\n    let eventPoster: Pick<IframeEventPoster<HostedInputEvent>, 'post' | 'setTarget'>;\n    let expiryFormatter: Pick<CardExpiryFormatter, 'format'>;\n    let input: HostedCardExpiryInput;\n    let inputAggregator: Pick<HostedInputAggregator, 'getInputValues'>;\n    let inputValidator: Pick<HostedInputValidator, 'validate'>;\n    let paymentHandler: Pick<HostedInputPaymentHandler, 'handle'>;\n    let storedCardHandler: Pick<HostedInputStoredCardHandler, 'handle'>;\n    let styles: HostedInputStylesMap;\n\n    beforeEach(() => {\n        eventListener = {\n            addListener: jest.fn(),\n            listen: jest.fn(),\n            stopListen: jest.fn(),\n        };\n        eventPoster = {\n            post: jest.fn(),\n            setTarget: jest.fn(),\n        };\n        expiryFormatter = { format: jest.fn() };\n        inputAggregator = { getInputValues: jest.fn() };\n        inputValidator = {\n            validate: jest.fn(() =>\n                Promise.resolve({\n                    isValid: true,\n                    errors: {},\n                }),\n            ),\n        };\n        paymentHandler = { handle: jest.fn() };\n        storedCardHandler = { handle: jest.fn() };\n        styles = { default: { color: 'rgb(255, 255, 255)' } };\n\n        container = document.createElement('form');\n        document.body.appendChild(container);\n\n        input = new HostedCardExpiryInput(\n            container,\n            'Expiration',\n            'Card expiration',\n            'cc-expiry',\n            styles,\n            [],\n            eventListener as IframeEventListener<HostedFieldEventMap>,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            paymentHandler as HostedInputPaymentHandler,\n            storedCardHandler as HostedInputStoredCardHandler,\n            expiryFormatter as CardExpiryFormatter,\n        );\n    });\n\n    afterEach(() => {\n        container.remove();\n    });\n\n    it('returns input type', () => {\n        expect(input.getType()).toEqual(HostedFieldType.CardExpiry);\n    });\n\n    it('formats input on change', () => {\n        jest.spyOn(expiryFormatter, 'format').mockReturnValue('10 / 20');\n\n        input.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const element = container.querySelector('input')!;\n\n        element.value = '1020';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(expiryFormatter.format).toHaveBeenCalledWith('1020');\n        expect(element.value).toBe('10 / 20');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-card-expiry-input.ts",
    "content": "import { IframeEventListener, IframeEventPoster } from '../../common/iframe';\nimport { HostedFieldEventMap } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport CardExpiryFormatter from './card-expiry-formatter';\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent } from './hosted-input-events';\nimport HostedInputPaymentHandler from './hosted-input-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\n\nexport default class HostedCardExpiryInput extends HostedInput {\n    /**\n     * @internal\n     */\n    constructor(\n        form: HTMLFormElement,\n        placeholder: string,\n        accessibilityLabel: string,\n        autocomplete: string,\n        styles: HostedInputStylesMap,\n        fontUrls: string[],\n        eventListener: IframeEventListener<HostedFieldEventMap>,\n        eventPoster: IframeEventPoster<HostedInputEvent>,\n        inputAggregator: HostedInputAggregator,\n        inputValidator: HostedInputValidator,\n        paymentHandler: HostedInputPaymentHandler,\n        storedCardHandler: HostedInputStoredCardHandler,\n        private _formatter: CardExpiryFormatter,\n    ) {\n        super(\n            HostedFieldType.CardExpiry,\n            form,\n            placeholder,\n            accessibilityLabel,\n            autocomplete,\n            styles,\n            fontUrls,\n            eventListener,\n            eventPoster,\n            inputAggregator,\n            inputValidator,\n            paymentHandler,\n            storedCardHandler,\n        );\n    }\n\n    protected _formatValue(value: string): void {\n        this._input.value = this._formatter.format(value);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-card-number-input.spec.ts",
    "content": "import { IframeEventListener, IframeEventPoster } from '../../common/iframe';\nimport { HostedFieldEventMap } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport CardNumberFormatter from './card-number-formatter';\nimport HostedAutocompleteFieldset from './hosted-autocomplete-fieldset';\nimport HostedCardNumberInput from './hosted-card-number-input';\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputPaymentHandler from './hosted-input-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\n\ndescribe('HostedCardNumberInput', () => {\n    let autocompleteFieldset: HostedAutocompleteFieldset;\n    let container: HTMLFormElement;\n    let eventListener: Pick<\n        IframeEventListener<HostedFieldEventMap>,\n        'addListener' | 'listen' | 'stopListen'\n    >;\n    let eventPoster: Pick<IframeEventPoster<HostedInputEvent>, 'setTarget' | 'post'>;\n    let input: HostedInput;\n    let inputAggregator: Pick<HostedInputAggregator, 'getInputValues'>;\n    let inputValidator: Pick<HostedInputValidator, 'validate'>;\n    let numberFormatter: Pick<CardNumberFormatter, 'format' | 'unformat'>;\n    let paymentHandler: Pick<HostedInputPaymentHandler, 'handle'>;\n    let storedCardHandler: Pick<HostedInputStoredCardHandler, 'handle'>;\n    let styles: HostedInputStylesMap;\n\n    beforeEach(() => {\n        container = document.createElement('form');\n        document.body.appendChild(container);\n\n        autocompleteFieldset = new HostedAutocompleteFieldset(\n            container,\n            [HostedFieldType.CardCode, HostedFieldType.CardExpiry, HostedFieldType.CardName],\n            new HostedInputAggregator(window.parent),\n        );\n        eventListener = {\n            addListener: jest.fn(),\n            listen: jest.fn(),\n            stopListen: jest.fn(),\n        };\n        eventPoster = {\n            post: jest.fn(),\n            setTarget: jest.fn(),\n        };\n        inputAggregator = { getInputValues: jest.fn() };\n        inputValidator = {\n            validate: jest.fn(() =>\n                Promise.resolve({\n                    isValid: true,\n                    errors: {},\n                }),\n            ),\n        };\n        numberFormatter = { format: jest.fn(), unformat: (value) => value.replace(/ /g, '') };\n        paymentHandler = { handle: jest.fn() };\n        storedCardHandler = { handle: jest.fn() };\n        styles = { default: { color: 'rgb(255, 255, 255)' } };\n\n        input = new HostedCardNumberInput(\n            HostedFieldType.CardNumber,\n            container,\n            'Full name',\n            'Cardholder name',\n            'cc-name',\n            styles,\n            [],\n            eventListener as IframeEventListener<HostedFieldEventMap>,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            paymentHandler as HostedInputPaymentHandler,\n            storedCardHandler as HostedInputStoredCardHandler,\n            autocompleteFieldset,\n            numberFormatter as CardNumberFormatter,\n        );\n    });\n\n    afterEach(() => {\n        container.remove();\n    });\n\n    it('returns input type', () => {\n        expect(input.getType()).toEqual(HostedFieldType.CardNumber);\n    });\n\n    it('notifies card type change', () => {\n        jest.spyOn(numberFormatter, 'format').mockReturnValue('4111');\n\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const element = container.querySelector('input')!;\n\n        element.value = '4111';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.CardTypeChanged,\n            payload: {\n                cardType: 'visa',\n            },\n        });\n    });\n\n    it('notifies bin number change', () => {\n        jest.spyOn(numberFormatter, 'format').mockReturnValue('4111 1111 1111 1111');\n\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const element = container.querySelector('input')!;\n\n        element.value = '4111111111111111';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.BinChanged,\n            payload: {\n                bin: '411111',\n            },\n        });\n\n        element.value = '4987 6511 1111 1111';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.BinChanged,\n            payload: {\n                bin: '498765',\n            },\n        });\n    });\n\n    it('notifies when bin number can no longer be detected', () => {\n        jest.spyOn(numberFormatter, 'format').mockImplementation((value) =>\n            value === '4111111111111111' ? '4111 1111 1111 1111' : value,\n        );\n\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const element = container.querySelector('input')!;\n\n        element.value = '4111111111111111';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        element.value = '41';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.BinChanged,\n            payload: {\n                bin: '',\n            },\n        });\n    });\n\n    it('does not notify if bin number is invalid', () => {\n        jest.spyOn(numberFormatter, 'format').mockReturnValue('0000 0000 0000 0000');\n\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const element = container.querySelector('input')!;\n\n        element.value = '0000000000000000';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(eventPoster.post).not.toHaveBeenCalledWith(\n            expect.objectContaining({\n                type: HostedInputEventType.BinChanged,\n            }),\n        );\n    });\n\n    it('formats input on change', () => {\n        jest.spyOn(numberFormatter, 'format').mockReturnValue('4111 1111 1111 1111');\n\n        input.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const element = container.querySelector('input')!;\n\n        element.value = '4111111111111111';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(numberFormatter.format).toHaveBeenCalledWith('4111111111111111');\n        expect(element.value).toBe('4111 1111 1111 1111');\n    });\n\n    it('attaches autocomplete fieldset', () => {\n        jest.spyOn(autocompleteFieldset, 'attach');\n\n        input.attach();\n\n        expect(autocompleteFieldset.attach).toHaveBeenCalled();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-card-number-input.ts",
    "content": "import { number } from 'card-validator';\nimport { get } from 'lodash';\n\nimport { IframeEventListener, IframeEventPoster } from '../../common/iframe';\nimport { HostedFieldEventMap } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport CardNumberFormatter from './card-number-formatter';\nimport HostedAutocompleteFieldset from './hosted-autocomplete-fieldset';\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputPaymentHandler from './hosted-input-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\n\nexport default class HostedCardNumberInput extends HostedInput {\n    /**\n     * @internal\n     */\n    constructor(\n        type: HostedFieldType,\n        form: HTMLFormElement,\n        placeholder: string,\n        accessibilityLabel: string,\n        autocomplete: string,\n        styles: HostedInputStylesMap,\n        fontUrls: string[],\n        eventListener: IframeEventListener<HostedFieldEventMap>,\n        eventPoster: IframeEventPoster<HostedInputEvent>,\n        inputAggregator: HostedInputAggregator,\n        inputValidator: HostedInputValidator,\n        paymentHandler: HostedInputPaymentHandler,\n        storedCardHandler: HostedInputStoredCardHandler,\n        private _autocompleteFieldset: HostedAutocompleteFieldset,\n        private _formatter: CardNumberFormatter,\n    ) {\n        super(\n            type,\n            form,\n            placeholder,\n            accessibilityLabel,\n            autocomplete,\n            styles,\n            fontUrls,\n            eventListener,\n            eventPoster,\n            inputAggregator,\n            inputValidator,\n            paymentHandler,\n            storedCardHandler,\n        );\n    }\n\n    attach(): void {\n        super.attach();\n\n        this._autocompleteFieldset.attach();\n    }\n\n    protected _notifyChange(value: string): void {\n        const cardInfo = number(value).card;\n        const prevCardInfo = this._previousValue && number(this._previousValue).card;\n\n        if (get(prevCardInfo, 'type') !== get(cardInfo, 'type')) {\n            this._eventPoster.post({\n                type: HostedInputEventType.CardTypeChanged,\n                payload: {\n                    cardType: cardInfo ? cardInfo.type : undefined,\n                },\n            });\n        }\n\n        const unformattedValue = this._formatter.unformat(value);\n        const unformattedPreviousValue = this._previousValue\n            ? this._formatter.unformat(this._previousValue)\n            : '';\n\n        const bin =\n            unformattedValue.length >= 6 && number(unformattedValue).isPotentiallyValid\n                ? unformattedValue.substr(0, 6)\n                : '';\n        const prevBin =\n            unformattedPreviousValue.length >= 6 ? unformattedPreviousValue.substr(0, 6) : '';\n\n        if (bin !== prevBin) {\n            this._eventPoster.post({\n                type: HostedInputEventType.BinChanged,\n                payload: { bin },\n            });\n        }\n    }\n\n    protected _formatValue(value: string): void {\n        const selectionEnd = this._input.selectionEnd;\n        const formattedValue = this._formatter.format(value);\n\n        if (selectionEnd === value.length && value.length < formattedValue.length) {\n            this._input.setSelectionRange(formattedValue.length, formattedValue.length);\n        } else {\n            this._input.setSelectionRange(selectionEnd || 0, selectionEnd || 0);\n        }\n\n        this._input.value = formattedValue;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-aggregator.spec.ts",
    "content": "import { includes } from 'lodash';\n\nimport HostedFieldType from '../hosted-field-type';\n\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport HostedInputWindow from './hosted-input-window';\n\ndescribe('HostedInputAggregator', () => {\n    let aggregator: HostedInputAggregator;\n    let frames: HostedInputWindow[];\n    let parentWindow: Pick<Window, 'frames'>;\n\n    beforeEach(() => {\n        parentWindow = Object.create(window);\n        aggregator = new HostedInputAggregator(parentWindow as Window);\n        frames = [\n            Object.create(window),\n            Object.create(window),\n            Object.create(window),\n            Object.create(window),\n        ];\n\n        const codeInput = {\n            getType: jest.fn(() => HostedFieldType.CardCode),\n            getValue: jest.fn(() => '123'),\n        } as Pick<HostedInput, 'getType' | 'getValue'>;\n\n        const expiryInput = {\n            getType: jest.fn(() => HostedFieldType.CardExpiry),\n            getValue: jest.fn(() => '10 / 20'),\n        } as Pick<HostedInput, 'getType' | 'getValue'>;\n\n        const nameInput = {\n            getType: jest.fn(() => HostedFieldType.CardName),\n            getValue: jest.fn(() => 'Good Shopper'),\n        } as Pick<HostedInput, 'getType' | 'getValue'>;\n\n        const numberInput = {\n            getType: jest.fn(() => HostedFieldType.CardNumber),\n            getValue: jest.fn(() => '4111 1111 1111 1111'),\n        } as Pick<HostedInput, 'getType' | 'getValue'>;\n\n        frames[0].hostedInput = codeInput as HostedInput;\n        frames[1].hostedInput = expiryInput as HostedInput;\n        frames[2].hostedInput = nameInput as HostedInput;\n        frames[3].hostedInput = numberInput as HostedInput;\n\n        (parentWindow as any).frames = frames;\n    });\n\n    it('gathers all adjacent hosted inputs', () => {\n        expect(aggregator.getInputs()).toEqual(frames.map((frame) => frame.hostedInput));\n    });\n\n    it('does not throw error if there are other iframes in parent window that belong to different origin than itself', () => {\n        frames.push({\n            get hostedInput() {\n                throw new DOMException();\n            },\n        } as unknown as HostedInputWindow);\n\n        expect(aggregator.getInputs()).toEqual(\n            frames.slice(0, -1).map((frame) => frame.hostedInput),\n        );\n    });\n\n    it('does not throw error if there are other iframes in parent window that belong to different origin than itself in IE 11', () => {\n        frames.push({\n            get hostedInput() {\n                throw new DOMException();\n            },\n        } as unknown as HostedInputWindow);\n\n        expect(aggregator.getInputs()).toEqual(\n            frames.slice(0, -1).map((frame) => frame.hostedInput),\n        );\n    });\n\n    it('does not fail silently if unable to gather adjacent hosted inputs for other reasons', () => {\n        frames.push({\n            get hostedInput() {\n                throw new TypeError();\n            },\n        } as unknown as HostedInputWindow);\n\n        expect(() => aggregator.getInputs()).toThrow(TypeError);\n    });\n\n    it('gathers all adjacent hosted inputs that satisfy filter', () => {\n        expect(\n            aggregator.getInputs((field) =>\n                includes([HostedFieldType.CardCode, HostedFieldType.CardExpiry], field.getType()),\n            ),\n        ).toEqual([frames[0].hostedInput, frames[1].hostedInput]);\n    });\n\n    it('gathers all values of adjacent hosted inputs', () => {\n        expect(aggregator.getInputValues()).toEqual({\n            [HostedFieldType.CardCode]: '123',\n            [HostedFieldType.CardExpiry]: '10 / 20',\n            [HostedFieldType.CardName]: 'Good Shopper',\n            [HostedFieldType.CardNumber]: '4111 1111 1111 1111',\n        });\n    });\n\n    it('gathers all values of adjacent hosted inputs that satisfy filter', () => {\n        expect(\n            aggregator.getInputValues((field) =>\n                includes([HostedFieldType.CardCode, HostedFieldType.CardExpiry], field.getType()),\n            ),\n        ).toEqual({\n            [HostedFieldType.CardCode]: '123',\n            [HostedFieldType.CardExpiry]: '10 / 20',\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-aggregator.ts",
    "content": "import HostedInput from './hosted-input';\nimport HostedInputValues from './hosted-input-values';\nimport HostedInputWindow from './hosted-input-window';\n\nexport default class HostedInputAggregator {\n    constructor(private _parentWindow: Window) {}\n\n    getInputs(filter?: (field: HostedInput) => boolean): HostedInput[] {\n        return Array.prototype.slice\n            .call(this._parentWindow.frames)\n            .reduce((result: Window[], frame: Window) => {\n                try {\n                    const input = (frame as HostedInputWindow).hostedInput;\n\n                    if (!input || (filter && !filter(input))) {\n                        return result;\n                    }\n\n                    return [...result, input];\n                } catch (error) {\n                    if (error instanceof DOMException) {\n                        return result;\n                    }\n\n                    // IE11 doesn't throw `DOMException`\n                    if (error instanceof Error && error.message === 'Permission denied') {\n                        return result;\n                    }\n\n                    throw error;\n                }\n            }, []);\n    }\n\n    getInputValues(filter?: (field: HostedInput) => boolean): HostedInputValues {\n        return this.getInputs(filter).reduce<HostedInputValues>((result, input) => {\n            return {\n                ...result,\n                [input.getType()]: input.getValue(),\n            };\n        }, {});\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-events.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport {\n    PaymentErrorData,\n    PaymentErrorResponseBody,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport HostedFieldType from '../hosted-field-type';\nimport { HostedFormErrorsData } from '../hosted-form-options';\n\nimport HostedInputInitializeErrorData from './hosted-input-initialize-error-data';\nimport HostedInputValidateResults from './hosted-input-validate-results';\n\n// Event types\nexport enum HostedInputEventType {\n    AttachSucceeded = 'HOSTED_INPUT:ATTACH_SUCCEEDED',\n    AttachFailed = 'HOSTED_INPUT:ATTACH_FAILED',\n    BinChanged = 'HOSTED_INPUT:BIN_CHANGED',\n    Blurred = 'HOSTED_INPUT:BLURRED',\n    Changed = 'HOSTED_INPUT:CHANGED',\n    CardTypeChanged = 'HOSTED_INPUT:CARD_TYPE_CHANGED',\n    Entered = 'HOSTED_INPUT:ENTERED',\n    Focused = 'HOSTED_INPUT:FOCUSED',\n    SubmitSucceeded = 'HOSTED_INPUT:SUBMIT_SUCCEEDED',\n    SubmitFailed = 'HOSTED_INPUT:SUBMIT_FAILED',\n    Validated = 'HOSTED_INPUT:VALIDATED',\n    StoredCardSucceeded = 'HOSTED_INPUT:STORED_CARD_SUCCEEDED',\n    StoredCardFailed = 'HOSTED_INPUT:STORED_CARD_FAILED',\n}\n\n// Event mapping\nexport interface HostedInputEventMap {\n    [HostedInputEventType.AttachSucceeded]: HostedInputAttachSuccessEvent;\n    [HostedInputEventType.AttachFailed]: HostedInputAttachErrorEvent;\n    [HostedInputEventType.BinChanged]: HostedInputBinChangeEvent;\n    [HostedInputEventType.Blurred]: HostedInputBlurEvent;\n    [HostedInputEventType.Changed]: HostedInputChangeEvent;\n    [HostedInputEventType.CardTypeChanged]: HostedInputCardTypeChangeEvent;\n    [HostedInputEventType.Entered]: HostedInputEnterEvent;\n    [HostedInputEventType.Focused]: HostedInputFocusEvent;\n    [HostedInputEventType.SubmitSucceeded]: HostedInputSubmitSuccessEvent;\n    [HostedInputEventType.SubmitFailed]: HostedInputSubmitErrorEvent;\n    [HostedInputEventType.Validated]: HostedInputValidateEvent;\n    [HostedInputEventType.StoredCardFailed]: HostedInputStoredCardErrorEvent;\n    [HostedInputEventType.StoredCardSucceeded]: HostedInputStoredCardSucceededEvent;\n}\n\n// Events\nexport type HostedInputEvent =\n    | HostedInputAttachSuccessEvent\n    | HostedInputAttachErrorEvent\n    | HostedInputBinChangeEvent\n    | HostedInputBlurEvent\n    | HostedInputChangeEvent\n    | HostedInputCardTypeChangeEvent\n    | HostedInputEnterEvent\n    | HostedInputFocusEvent\n    | HostedInputSubmitSuccessEvent\n    | HostedInputSubmitErrorEvent\n    | HostedInputValidateEvent\n    | HostedInputStoredCardSucceededEvent\n    | HostedInputStoredCardErrorEvent;\n\nexport interface HostedInputAttachSuccessEvent {\n    type: HostedInputEventType.AttachSucceeded;\n}\n\nexport interface HostedInputStoredCardSucceededEvent {\n    type: HostedInputEventType.StoredCardSucceeded;\n}\n\nexport interface HostedInputStoredCardErrorEvent {\n    type: HostedInputEventType.StoredCardFailed;\n    payload?: {\n        errors?: string[];\n        error?: PaymentErrorData;\n        response?: Response<PaymentErrorResponseBody>;\n    };\n}\n\nexport interface HostedInputAttachErrorEvent {\n    type: HostedInputEventType.AttachFailed;\n    payload: {\n        error: HostedInputInitializeErrorData;\n    };\n}\n\nexport interface HostedInputBinChangeEvent {\n    type: HostedInputEventType.BinChanged;\n    payload: {\n        bin?: string;\n    };\n}\n\nexport interface HostedInputBlurEvent {\n    type: HostedInputEventType.Blurred;\n    payload: {\n        fieldType: HostedFieldType;\n        errors?: HostedFormErrorsData;\n    };\n}\n\nexport interface HostedInputChangeEvent {\n    type: HostedInputEventType.Changed;\n    payload: {\n        fieldType: HostedFieldType;\n    };\n}\n\nexport interface HostedInputCardTypeChangeEvent {\n    type: HostedInputEventType.CardTypeChanged;\n    payload: {\n        cardType?: string;\n    };\n}\n\nexport interface HostedInputFocusEvent {\n    type: HostedInputEventType.Focused;\n    payload: {\n        fieldType: HostedFieldType;\n    };\n}\n\nexport interface HostedInputEnterEvent {\n    type: HostedInputEventType.Entered;\n    payload: {\n        fieldType: HostedFieldType;\n    };\n}\n\nexport interface HostedInputSubmitSuccessEvent {\n    type: HostedInputEventType.SubmitSucceeded;\n    payload: {\n        response: Response<unknown>;\n    };\n}\n\nexport interface HostedInputSubmitErrorEvent {\n    type: HostedInputEventType.SubmitFailed;\n    payload: {\n        error: PaymentErrorData;\n        response?: Response<PaymentErrorResponseBody>;\n    };\n}\n\nexport interface HostedInputValidateEvent {\n    type: HostedInputEventType.Validated;\n    payload: HostedInputValidateResults;\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-factory.spec.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nimport HostedCardExpiryInput from './hosted-card-expiry-input';\nimport HostedCardNumberInput from './hosted-card-number-input';\nimport HostedInput from './hosted-input';\nimport HostedInputFactory from './hosted-input-factory';\n\ndescribe('HostedInputFactory', () => {\n    let factory: HostedInputFactory;\n\n    beforeEach(() => {\n        factory = new HostedInputFactory('https://store.foobar.com');\n    });\n\n    it('creates card number field', () => {\n        expect(\n            factory.create(document.createElement('form'), HostedFieldType.CardNumber),\n        ).toBeInstanceOf(HostedCardNumberInput);\n    });\n\n    it('creates card number verification field', () => {\n        const input = factory.create(\n            document.createElement('form'),\n            HostedFieldType.CardNumberVerification,\n        );\n\n        expect(input).toBeInstanceOf(HostedCardNumberInput);\n        expect(input.getType()).toEqual(HostedFieldType.CardNumberVerification);\n    });\n\n    it('creates card expiry field', () => {\n        expect(\n            factory.create(document.createElement('form'), HostedFieldType.CardExpiry),\n        ).toBeInstanceOf(HostedCardExpiryInput);\n    });\n\n    it('creates regular input field for other field types', () => {\n        expect(\n            factory.create(document.createElement('form'), HostedFieldType.CardCode),\n        ).toBeInstanceOf(HostedInput);\n\n        expect(\n            factory.create(document.createElement('form'), HostedFieldType.CardName),\n        ).toBeInstanceOf(HostedInput);\n    });\n\n    it('normalises parent origin if origin contains www', () => {\n        factory.normalizeParentOrigin('https://www.store.foobar.com');\n\n        expect(factory.getParentOrigin()).toBe('https://www.store.foobar.com');\n    });\n\n    it('does not normalise parent origin if origin is completely different', () => {\n        factory.normalizeParentOrigin('https://www.xyz.com');\n\n        expect(factory.getParentOrigin()).toBe('https://store.foobar.com');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-factory.ts",
    "content": "import { createClient as createBigpayClient } from '@bigcommerce/bigpay-client';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { IframeEventListener, IframeEventPoster } from '../../common/iframe';\nimport { appendWww, parseUrl } from '../../common/url';\nimport {\n    PaymentRequestSender,\n    PaymentRequestTransformer,\n    StorefrontStoredCardRequestSender,\n} from '../../payment';\nimport { CardInstrument } from '../../payment/instrument';\nimport HostedFieldType from '../hosted-field-type';\n\nimport CardExpiryFormatter from './card-expiry-formatter';\nimport CardNumberFormatter from './card-number-formatter';\nimport getHostedInputStorage from './get-hosted-input-storage';\nimport HostedAutocompleteFieldset from './hosted-autocomplete-fieldset';\nimport HostedCardExpiryInput from './hosted-card-expiry-input';\nimport HostedCardNumberInput from './hosted-card-number-input';\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport HostedInputPaymentHandler from './hosted-input-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\nimport mapToAccessibilityLabel from './map-to-accessibility-label';\nimport mapToAutocompleteType from './map-to-autocomplete-type';\n\nexport default class HostedInputFactory {\n    constructor(private _parentOrigin: string) {}\n\n    create(\n        form: HTMLFormElement,\n        type: HostedFieldType,\n        styles: HostedInputStylesMap = {},\n        fontUrls: string[] = [],\n        placeholder = '',\n        accessibilityLabel: string = mapToAccessibilityLabel(type),\n        cardInstrument?: CardInstrument,\n    ): HostedInput {\n        const autocomplete = mapToAutocompleteType(type);\n\n        if (type === HostedFieldType.CardNumber) {\n            return this._createNumberInput(\n                type,\n                form,\n                styles,\n                fontUrls,\n                placeholder,\n                accessibilityLabel,\n                autocomplete,\n            );\n        }\n\n        if (type === HostedFieldType.CardNumberVerification) {\n            return this._createNumberInput(\n                type,\n                form,\n                styles,\n                fontUrls,\n                placeholder,\n                accessibilityLabel,\n                autocomplete,\n                cardInstrument,\n            );\n        }\n\n        if (type === HostedFieldType.CardExpiry) {\n            return this._createExpiryInput(\n                form,\n                styles,\n                fontUrls,\n                placeholder,\n                accessibilityLabel,\n                autocomplete,\n            );\n        }\n\n        if (type === HostedFieldType.CardCodeVerification) {\n            return this._createInput(\n                type,\n                form,\n                styles,\n                fontUrls,\n                placeholder,\n                accessibilityLabel,\n                autocomplete,\n                cardInstrument,\n            );\n        }\n\n        return this._createInput(\n            type,\n            form,\n            styles,\n            fontUrls,\n            placeholder,\n            accessibilityLabel,\n            autocomplete,\n        );\n    }\n\n    normalizeParentOrigin(origin: string): void {\n        if (this._parentOrigin === origin) {\n            return;\n        }\n\n        if (\n            this._parentOrigin !== appendWww(parseUrl(origin)).origin &&\n            origin !== appendWww(parseUrl(this._parentOrigin)).origin\n        ) {\n            return;\n        }\n\n        this._parentOrigin = origin;\n    }\n\n    getParentOrigin(): string {\n        return this._parentOrigin;\n    }\n\n    private _createExpiryInput(\n        form: HTMLFormElement,\n        styles: HostedInputStylesMap,\n        fontUrls: string[],\n        placeholder: string,\n        accessibilityLabel = '',\n        autocomplete = '',\n    ): HostedCardExpiryInput {\n        return new HostedCardExpiryInput(\n            form,\n            placeholder,\n            accessibilityLabel,\n            autocomplete,\n            styles,\n            fontUrls,\n            new IframeEventListener(this._parentOrigin),\n            new IframeEventPoster(this._parentOrigin, window.parent),\n            new HostedInputAggregator(window.parent),\n            new HostedInputValidator(),\n            this._createPaymentHandler(),\n            this._createStoredCardHandler(),\n            new CardExpiryFormatter(),\n        );\n    }\n\n    private _createNumberInput(\n        type: HostedFieldType,\n        form: HTMLFormElement,\n        styles: HostedInputStylesMap,\n        fontUrls: string[],\n        placeholder: string,\n        accessibilityLabel = '',\n        autocomplete = '',\n        cardInstrument?: CardInstrument,\n    ): HostedCardNumberInput {\n        return new HostedCardNumberInput(\n            type,\n            form,\n            placeholder,\n            accessibilityLabel,\n            autocomplete,\n            styles,\n            fontUrls,\n            new IframeEventListener(this._parentOrigin),\n            new IframeEventPoster(this._parentOrigin, window.parent),\n            new HostedInputAggregator(window.parent),\n            new HostedInputValidator(cardInstrument),\n            this._createPaymentHandler(cardInstrument),\n            this._createStoredCardHandler(cardInstrument),\n            new HostedAutocompleteFieldset(\n                form,\n                [HostedFieldType.CardCode, HostedFieldType.CardExpiry, HostedFieldType.CardName],\n                new HostedInputAggregator(window.parent),\n            ),\n            new CardNumberFormatter(),\n        );\n    }\n\n    private _createInput(\n        type: HostedFieldType,\n        form: HTMLFormElement,\n        styles: HostedInputStylesMap,\n        fontUrls: string[],\n        placeholder: string,\n        accessibilityLabel = '',\n        autocomplete = '',\n        cardInstrument?: CardInstrument,\n    ): HostedInput {\n        return new HostedInput(\n            type,\n            form,\n            placeholder,\n            accessibilityLabel,\n            autocomplete,\n            styles,\n            fontUrls,\n            new IframeEventListener(this._parentOrigin),\n            new IframeEventPoster(this._parentOrigin, window.parent),\n            new HostedInputAggregator(window.parent),\n            new HostedInputValidator(cardInstrument),\n            this._createPaymentHandler(cardInstrument),\n            this._createStoredCardHandler(cardInstrument),\n        );\n    }\n\n    private _createPaymentHandler(cardInstrument?: CardInstrument): HostedInputPaymentHandler {\n        return new HostedInputPaymentHandler(\n            new HostedInputAggregator(window.parent),\n            new HostedInputValidator(cardInstrument),\n            getHostedInputStorage(),\n            new IframeEventPoster(this._parentOrigin, window.parent),\n            new PaymentRequestSender(createBigpayClient()),\n            new PaymentRequestTransformer(),\n        );\n    }\n\n    private _createStoredCardHandler(\n        cardInstrument?: CardInstrument,\n    ): HostedInputStoredCardHandler {\n        return new HostedInputStoredCardHandler(\n            new HostedInputAggregator(window.parent),\n            new HostedInputValidator(cardInstrument),\n            new IframeEventPoster(this._parentOrigin, window.parent),\n            new StorefrontStoredCardRequestSender(createRequestSender()),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-initialize-error-data.ts",
    "content": "export default interface HostedInputInitializeErrorData {\n    message: string;\n    redirectUrl: string;\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-initializer.spec.ts",
    "content": "import { IframeEventListener } from '../../common/iframe';\nimport { getCardInstrument } from '../../payment/instrument/instrument.mock';\nimport { InvalidHostedFormConfigError } from '../errors';\nimport { HostedFieldEventMap, HostedFieldEventType } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport HostedInput from './hosted-input';\nimport HostedInputFactory from './hosted-input-factory';\nimport HostedInputInitializer from './hosted-input-initializer';\nimport HostedInputStorage from './hosted-input-storage';\n\ndescribe('HostedInputInitializer', () => {\n    let container: HTMLElement;\n    let eventListener: IframeEventListener<HostedFieldEventMap>;\n    let factory: Pick<HostedInputFactory, 'create' | 'normalizeParentOrigin'>;\n    let initializer: HostedInputInitializer;\n    let input: Pick<HostedInput, 'attach'>;\n    let storage: Pick<HostedInputStorage, 'setNonce'>;\n\n    beforeEach(() => {\n        factory = { create: jest.fn(), normalizeParentOrigin: jest.fn() };\n        storage = { setNonce: jest.fn() };\n        eventListener = new IframeEventListener('https://store.foobar.com');\n        input = { attach: jest.fn() };\n\n        initializer = new HostedInputInitializer(\n            factory as HostedInputFactory,\n            storage as HostedInputStorage,\n            eventListener,\n        );\n\n        container = document.createElement('div');\n        container.id = 'input-container';\n        document.body.appendChild(container);\n\n        jest.spyOn(input, 'attach').mockImplementation();\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(factory, 'create').mockReturnValue(input);\n    });\n\n    afterEach(() => {\n        container.remove();\n    });\n\n    it('creates new hosted input', async () => {\n        process.nextTick(() => {\n            eventListener.trigger({\n                type: HostedFieldEventType.AttachRequested,\n                payload: {\n                    type: HostedFieldType.CardNumber,\n                    accessibilityLabel: 'Name',\n                    cardInstrument: getCardInstrument(),\n                    fontUrls: [],\n                    placeholder: 'Card name',\n                    styles: { default: { color: 'rgb(0, 0, 0)' } },\n                },\n            });\n        });\n\n        await initializer.initialize('input-container');\n\n        expect(factory.create).toHaveBeenCalledWith(\n            expect.any(HTMLFormElement),\n            HostedFieldType.CardNumber,\n            { default: { color: 'rgb(0, 0, 0)' } },\n            [],\n            'Card name',\n            'Name',\n            getCardInstrument(),\n        );\n    });\n\n    it('attaches input to container', async () => {\n        process.nextTick(() => {\n            eventListener.trigger({\n                type: HostedFieldEventType.AttachRequested,\n                payload: { type: HostedFieldType.CardNumber },\n            });\n        });\n\n        await initializer.initialize('input-container');\n\n        expect(input.attach).toHaveBeenCalled();\n    });\n\n    it('stores nonce into storage', async () => {\n        process.nextTick(() => {\n            eventListener.trigger({\n                type: HostedFieldEventType.AttachRequested,\n                payload: { type: HostedFieldType.CardNumber },\n            });\n        });\n\n        await initializer.initialize('input-container', 'abc');\n\n        expect(storage.setNonce).toHaveBeenCalledWith('abc');\n    });\n\n    it('returns newly created input', async () => {\n        process.nextTick(() => {\n            eventListener.trigger({\n                type: HostedFieldEventType.AttachRequested,\n                payload: { type: HostedFieldType.CardNumber },\n            });\n        });\n\n        expect(await initializer.initialize('input-container')).toEqual(input);\n    });\n\n    it('throws error if container cannot be found', () => {\n        container.remove();\n\n        expect(() => initializer.initialize('input-container')).toThrow(\n            InvalidHostedFormConfigError,\n        );\n    });\n\n    it('normalises parent origin for input factory', async () => {\n        process.nextTick(() => {\n            eventListener.trigger({\n                type: HostedFieldEventType.AttachRequested,\n                payload: { type: HostedFieldType.CardNumber, origin: 'https://www.foobar.com' },\n            });\n        });\n\n        await initializer.initialize('input-container');\n\n        expect(factory.normalizeParentOrigin).toHaveBeenCalled();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-initializer.ts",
    "content": "import { fromEvent } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\n\nimport { IframeEventListener } from '../../common/iframe';\nimport { InvalidHostedFormConfigError } from '../errors';\nimport {\n    HostedFieldAttachEvent,\n    HostedFieldEventMap,\n    HostedFieldEventType,\n} from '../hosted-field-events';\n\nimport HostedInput from './hosted-input';\nimport HostedInputFactory from './hosted-input-factory';\nimport HostedInputStorage from './hosted-input-storage';\n\ninterface EventTargetLike<TEvent> {\n    addListener(eventName: string, handler: (event: TEvent) => void): void;\n    removeListener(eventName: string, handler: (event: TEvent) => void): void;\n}\n\nexport default class HostedInputInitializer {\n    constructor(\n        private _factory: HostedInputFactory,\n        private _storage: HostedInputStorage,\n        private _eventListener: IframeEventListener<HostedFieldEventMap>,\n    ) {}\n\n    initialize(containerId: string, nonce?: string): Promise<HostedInput> {\n        if (nonce) {\n            this._storage.setNonce(nonce);\n        }\n\n        const form = this._createFormContainer(containerId);\n\n        this._resetPageStyles(containerId);\n        this._eventListener.listen();\n\n        return fromEvent<HostedFieldAttachEvent>(\n            this._eventListener as EventTargetLike<HostedFieldAttachEvent>,\n            HostedFieldEventType.AttachRequested,\n        )\n            .pipe(\n                map(({ payload }) => {\n                    const {\n                        accessibilityLabel,\n                        cardInstrument,\n                        fontUrls,\n                        placeholder,\n                        styles,\n                        origin,\n                        type,\n                    } = payload;\n\n                    if (origin) {\n                        this._factory.normalizeParentOrigin(origin);\n                    }\n\n                    const field = this._factory.create(\n                        form,\n                        type,\n                        styles,\n                        fontUrls,\n                        placeholder,\n                        accessibilityLabel,\n                        cardInstrument,\n                    );\n\n                    field.attach();\n\n                    return field;\n                }),\n                take(1),\n            )\n            .toPromise();\n    }\n\n    private _resetPageStyles(containerId: string) {\n        const html = document.querySelector('html');\n        const body = document.querySelector('body');\n        const container = document.getElementById(containerId);\n\n        [html, body, container].forEach((node) => {\n            if (!node) {\n                return;\n            }\n\n            node.style.height = '100%';\n            node.style.width = '100%';\n            node.style.overflow = 'hidden';\n            node.style.padding = '0';\n            node.style.margin = '0';\n        });\n    }\n\n    private _createFormContainer(containerId: string): HTMLFormElement {\n        const container = document.getElementById(containerId);\n\n        if (!container) {\n            throw new InvalidHostedFormConfigError(\n                'Unable to proceed because the provided container ID is not valid.',\n            );\n        }\n\n        const form = document.createElement('form');\n        const button = document.createElement('button');\n\n        form.noValidate = true;\n        form.style.height = '100%';\n        form.style.width = '100%';\n        button.style.display = 'none';\n\n        container.appendChild(form);\n        form.appendChild(button);\n\n        return form;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-options.ts",
    "content": "export default interface HostedInputOptions {\n    containerId: string;\n    nonce?: string;\n    origin: string;\n    parentOrigin: string;\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-payment-handler.spec.ts",
    "content": "import { getResponse } from '../../common/http-request/responses.mock';\nimport { IframeEventPoster } from '../../common/iframe';\nimport { PaymentRequestSender, PaymentRequestTransformer } from '../../payment';\nimport {\n    getErrorPaymentResponseBody,\n    getPaymentRequestBody,\n    getPaymentResponseBody,\n} from '../../payment/payments.mock';\nimport { HostedFieldEventType } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\nimport HostedFormOrderData from '../hosted-form-order-data';\nimport { getHostedFormOrderData } from '../hosted-form-order-data.mock';\n\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputPaymentHandler from './hosted-input-payment-handler';\nimport HostedInputStorage from './hosted-input-storage';\nimport HostedInputValidateResults from './hosted-input-validate-results';\nimport HostedInputValidator from './hosted-input-validator';\nimport HostedInputValues from './hosted-input-values';\n\ndescribe('HostedInputPaymentHandler', () => {\n    let data: HostedFormOrderData;\n    let eventPoster: Pick<IframeEventPoster<HostedInputEvent>, 'post'>;\n    let fields: HostedFieldType[];\n    let handler: HostedInputPaymentHandler;\n    let inputAggregator: Pick<HostedInputAggregator, 'getInputValues'>;\n    let inputValidator: Pick<HostedInputValidator, 'validate'>;\n    let inputStorage: Pick<HostedInputStorage, 'getNonce'>;\n    let requestSender: Pick<PaymentRequestSender, 'submitPayment'>;\n    let requestTransformer: Pick<PaymentRequestTransformer, 'transformWithHostedFormData'>;\n    let values: HostedInputValues;\n    let validationResults: HostedInputValidateResults;\n\n    beforeEach(() => {\n        inputAggregator = { getInputValues: jest.fn() };\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        inputValidator = { validate: jest.fn(() => []) };\n        inputStorage = { getNonce: jest.fn() };\n        eventPoster = { post: jest.fn() };\n        requestSender = { submitPayment: jest.fn() };\n        requestTransformer = { transformWithHostedFormData: jest.fn() };\n\n        handler = new HostedInputPaymentHandler(\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            inputStorage as HostedInputStorage,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            requestSender as PaymentRequestSender,\n            requestTransformer as PaymentRequestTransformer,\n        );\n\n        data = getHostedFormOrderData();\n\n        fields = [\n            HostedFieldType.CardCode,\n            HostedFieldType.CardExpiry,\n            HostedFieldType.CardName,\n            HostedFieldType.CardNumber,\n        ];\n\n        values = {\n            [HostedFieldType.CardCode]: '123',\n            [HostedFieldType.CardExpiry]: '10 / 20',\n            [HostedFieldType.CardName]: 'Good Shopper',\n            [HostedFieldType.CardNumber]: '4111 1111 1111 1111',\n        };\n\n        validationResults = {\n            isValid: true,\n            errors: {\n                cardCode: [],\n                cardExpiry: [],\n                cardName: [],\n                cardNumber: [],\n            },\n        };\n\n        jest.spyOn(inputAggregator, 'getInputValues').mockReturnValue(values);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(inputValidator, 'validate').mockReturnValue(validationResults);\n\n        jest.spyOn(requestSender, 'submitPayment').mockResolvedValue(\n            getResponse(getPaymentResponseBody()),\n        );\n    });\n\n    it('validates user inputs', async () => {\n        jest.spyOn(inputValidator, 'validate');\n\n        await handler.handle({\n            type: HostedFieldEventType.SubmitRequested,\n            payload: { data, fields },\n        });\n\n        expect(inputValidator.validate).toHaveBeenCalledWith(values);\n    });\n\n    it('posts event when validation happens', async () => {\n        const results = {\n            isValid: false,\n            errors: {\n                ...validationResults.errors,\n                cardNumber: [\n                    { fieldType: HostedFieldType.CardNumber, message: 'Card number is required' },\n                ],\n            },\n        };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(inputValidator, 'validate').mockResolvedValue(results);\n\n        jest.spyOn(eventPoster, 'post');\n\n        await handler.handle({\n            type: HostedFieldEventType.SubmitRequested,\n            payload: { data, fields },\n        });\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.Validated,\n            payload: results,\n        });\n    });\n\n    it('makes payment request with expected payload', async () => {\n        jest.spyOn(requestTransformer, 'transformWithHostedFormData').mockReturnValue(\n            getPaymentRequestBody(),\n        );\n\n        jest.spyOn(inputStorage, 'getNonce').mockReturnValue('nonce');\n\n        await handler.handle({\n            type: HostedFieldEventType.SubmitRequested,\n            payload: { data, fields },\n        });\n\n        expect(requestTransformer.transformWithHostedFormData).toHaveBeenCalledWith(\n            values,\n            data,\n            'nonce',\n        );\n        expect(requestSender.submitPayment).toHaveBeenCalledWith(getPaymentRequestBody());\n    });\n\n    it('posts event with payload if payment submission succeeds', async () => {\n        jest.spyOn(eventPoster, 'post');\n\n        await handler.handle({\n            type: HostedFieldEventType.SubmitRequested,\n            payload: { data, fields },\n        });\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.SubmitSucceeded,\n            payload: {\n                response: {\n                    body: getPaymentResponseBody(),\n                    headers: { 'content-type': 'application/json' },\n                    status: 200,\n                    statusText: 'OK',\n                },\n            },\n        });\n    });\n\n    it('posts event if payment submission fails', async () => {\n        const response = getResponse(getErrorPaymentResponseBody());\n\n        jest.spyOn(eventPoster, 'post');\n\n        jest.spyOn(requestSender, 'submitPayment').mockRejectedValue(response);\n\n        await handler.handle({\n            type: HostedFieldEventType.SubmitRequested,\n            payload: { data, fields },\n        });\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.SubmitFailed,\n            payload: {\n                error: { code: 'insufficient_funds', message: 'Insufficient funds' },\n                response,\n            },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-payment-handler.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\nimport { snakeCase } from 'lodash';\n\nimport { PaymentErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { IframeEventPoster } from '../../common/iframe';\nimport { PaymentRequestSender, PaymentRequestTransformer } from '../../payment';\nimport { InvalidHostedFormValueError } from '../errors';\nimport { HostedFieldSubmitRequestEvent } from '../hosted-field-events';\n\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputStorage from './hosted-input-storage';\nimport HostedInputValidator from './hosted-input-validator';\n\nexport default class HostedInputPaymentHandler {\n    constructor(\n        private _inputAggregator: HostedInputAggregator,\n        private _inputValidator: HostedInputValidator,\n        private _inputStorage: HostedInputStorage,\n        private _eventPoster: IframeEventPoster<HostedInputEvent>,\n        private _paymentRequestSender: PaymentRequestSender,\n        private _paymentRequestTransformer: PaymentRequestTransformer,\n    ) {}\n\n    handle: (event: HostedFieldSubmitRequestEvent) => Promise<void> = async ({\n        payload: { data },\n    }) => {\n        const values = this._inputAggregator.getInputValues();\n        const results = await this._inputValidator.validate(values);\n\n        this._eventPoster.post({\n            type: HostedInputEventType.Validated,\n            payload: results,\n        });\n\n        if (!results.isValid) {\n            const error = new InvalidHostedFormValueError(results.errors);\n\n            return this._eventPoster.post({\n                type: HostedInputEventType.SubmitFailed,\n                payload: {\n                    error: { code: snakeCase(error.name), message: error.message },\n                },\n            });\n        }\n\n        try {\n            const response = await this._paymentRequestSender.submitPayment(\n                this._paymentRequestTransformer.transformWithHostedFormData(\n                    values,\n                    data,\n                    this._inputStorage.getNonce() || '',\n                ),\n            );\n\n            this._eventPoster.post({\n                type: HostedInputEventType.SubmitSucceeded,\n                payload: { response },\n            });\n        } catch (error) {\n            if (this._isPaymentErrorResponse(error)) {\n                this._eventPoster.post({\n                    type: HostedInputEventType.SubmitFailed,\n                    payload: { error: error.body.errors[0], response: error },\n                });\n            } else if (this._isErrorResponse(error)) {\n                this._eventPoster.post({\n                    type: HostedInputEventType.SubmitFailed,\n                    payload: { error: { code: snakeCase(error.name), message: error.message } },\n                });\n            }\n        }\n    };\n\n    private _isPaymentErrorResponse(response: any): response is Response<PaymentErrorResponseBody> {\n        const { body: { errors = [] } = {} } = response || {};\n\n        return (\n            typeof (errors[0] && errors[0].code) === 'string' &&\n            typeof (errors[0] && errors[0].message) === 'string'\n        );\n    }\n\n    private _isErrorResponse(error: unknown): error is { name?: string; message?: string } {\n        return (\n            typeof error === 'object' &&\n            error !== null &&\n            (('name' in error && typeof (error as { name: unknown }).name === 'string') ||\n                !('name' in error)) &&\n            (('message' in error && typeof (error as { message: unknown }).message === 'string') ||\n                !('message' in error))\n        );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-storage.spec.ts",
    "content": "import HostedInputStorage from './hosted-input-storage';\n\ndescribe('HostedInputStorage', () => {\n    let subject: HostedInputStorage;\n\n    beforeEach(() => {\n        subject = new HostedInputStorage();\n    });\n\n    it('sets nonce for later retrieval', () => {\n        subject.setNonce('abc');\n\n        expect(subject.getNonce()).toBe('abc');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-storage.ts",
    "content": "export default class HostedInputStorage {\n    private _nonce?: string;\n\n    setNonce(nonce: string): void {\n        this._nonce = nonce;\n    }\n\n    getNonce(): string | undefined {\n        return this._nonce;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-stored-card-handler.spec.ts",
    "content": "import { getResponse } from '../../common/http-request/responses.mock';\nimport { IframeEventPoster } from '../../common/iframe';\nimport { StorefrontStoredCardRequestSender } from '../../payment';\nimport { getErrorPaymentResponseBody, getPaymentResponseBody } from '../../payment/payments.mock';\nimport { HostedFieldEventType } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\nimport {\n    StoredCardHostedFormData,\n    StoredCardHostedFormInstrumentFields,\n} from '../stored-card-hosted-form-type';\nimport {\n    StoredCardHostedFormDataMock,\n    StoredCardHostedFormInstrumentFieldsMock,\n    StoredCardHostedFormInstrumentFormMock,\n} from '../stored-card-hosted-form.mock';\n\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport HostedInputValidateResults from './hosted-input-validate-results';\nimport HostedInputValidator from './hosted-input-validator';\nimport HostedInputValues from './hosted-input-values';\n\ndescribe('HostedInputStoredCardHandler', () => {\n    let data: StoredCardHostedFormData;\n    let eventPoster: Pick<IframeEventPoster<HostedInputEvent>, 'post'>;\n    let fields: StoredCardHostedFormInstrumentFields;\n    let handler: HostedInputStoredCardHandler;\n    let inputAggregator: Pick<HostedInputAggregator, 'getInputValues'>;\n    let inputValidator: Pick<HostedInputValidator, 'validate'>;\n    let requestSender: Pick<StorefrontStoredCardRequestSender, 'submitPaymentInstrument'>;\n    let values: HostedInputValues;\n    let validationResults: HostedInputValidateResults;\n\n    beforeEach(() => {\n        inputAggregator = { getInputValues: jest.fn() };\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        inputValidator = { validate: jest.fn(() => []) };\n        eventPoster = { post: jest.fn() };\n        requestSender = { submitPaymentInstrument: jest.fn() };\n\n        handler = new HostedInputStoredCardHandler(\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            requestSender as StorefrontStoredCardRequestSender,\n        );\n\n        data = StoredCardHostedFormDataMock;\n        fields = StoredCardHostedFormInstrumentFieldsMock;\n\n        values = {\n            [HostedFieldType.CardCode]: '777',\n            [HostedFieldType.CardExpiry]: '03 / 30',\n            [HostedFieldType.CardName]: 'John Smith',\n            [HostedFieldType.CardNumber]: '4111 1111 1111 1111',\n        };\n\n        validationResults = {\n            isValid: true,\n            errors: {\n                cardCode: [],\n                cardExpiry: [],\n                cardName: [],\n                cardNumber: [],\n            },\n        };\n\n        jest.spyOn(inputAggregator, 'getInputValues').mockReturnValue(values);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(inputValidator, 'validate').mockReturnValue(validationResults);\n\n        jest.spyOn(requestSender, 'submitPaymentInstrument').mockResolvedValue(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            getResponse(getPaymentResponseBody()),\n        );\n    });\n\n    it('validates user inputs', async () => {\n        jest.spyOn(inputValidator, 'validate');\n\n        await handler.handle({\n            type: HostedFieldEventType.StoredCardRequested,\n            payload: { data, fields },\n        });\n\n        expect(inputValidator.validate).toHaveBeenCalledWith(values);\n    });\n\n    it('posts event when validation happens', async () => {\n        const results = {\n            isValid: false,\n            errors: {\n                ...validationResults.errors,\n                cardNumber: [\n                    { fieldType: HostedFieldType.CardNumber, message: 'Card number is required' },\n                ],\n            },\n        };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(inputValidator, 'validate').mockResolvedValue(results);\n\n        jest.spyOn(eventPoster, 'post');\n\n        await handler.handle({\n            type: HostedFieldEventType.StoredCardRequested,\n            payload: { data, fields },\n        });\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.Validated,\n            payload: results,\n        });\n    });\n\n    it('makes vaulting request with expected payload', async () => {\n        await handler.handle({\n            type: HostedFieldEventType.StoredCardRequested,\n            payload: { data, fields },\n        });\n\n        expect(requestSender.submitPaymentInstrument).toHaveBeenCalledWith(\n            StoredCardHostedFormDataMock,\n            StoredCardHostedFormInstrumentFormMock,\n        );\n    });\n\n    it('posts event with payload if vaulting submission succeeds', async () => {\n        jest.spyOn(eventPoster, 'post');\n\n        await handler.handle({\n            type: HostedFieldEventType.StoredCardRequested,\n            payload: { data, fields },\n        });\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.StoredCardSucceeded,\n        });\n    });\n\n    it('posts event if vaulting submission fails', async () => {\n        const response = getResponse(getErrorPaymentResponseBody());\n\n        jest.spyOn(eventPoster, 'post');\n\n        jest.spyOn(requestSender, 'submitPaymentInstrument').mockRejectedValue(response);\n\n        await handler.handle({\n            type: HostedFieldEventType.StoredCardRequested,\n            payload: { data, fields },\n        });\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.StoredCardFailed,\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-stored-card-handler.ts",
    "content": "import { IframeEventPoster } from '../../common/iframe';\nimport { StorefrontStoredCardRequestSender } from '../../payment';\nimport { HostedFieldStoredCardRequestEvent } from '../hosted-field-events';\n\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputValidator from './hosted-input-validator';\n\nexport default class HostedInputStoredCardHandler {\n    constructor(\n        private _inputAggregator: HostedInputAggregator,\n        private _inputValidator: HostedInputValidator,\n        private _eventPoster: IframeEventPoster<HostedInputEvent>,\n        private _storedCardRequestSender: StorefrontStoredCardRequestSender,\n    ) {}\n\n    handle: (event: HostedFieldStoredCardRequestEvent) => Promise<void> = async (event) => {\n        const {\n            payload: { data, fields },\n        } = event;\n        const values = this._inputAggregator.getInputValues();\n        const results = await this._inputValidator.validate(values);\n\n        this._eventPoster.post({\n            type: HostedInputEventType.Validated,\n            payload: results,\n        });\n\n        if (!results.isValid) {\n            return this._eventPoster.post({\n                type: HostedInputEventType.StoredCardFailed,\n            });\n        }\n\n        const { defaultInstrument, ...billingAddress } = fields;\n\n        const [expiryMonth, expiryYear] = values.cardExpiry ? values.cardExpiry.split('/') : [];\n\n        try {\n            await this._storedCardRequestSender.submitPaymentInstrument(data, {\n                billingAddress,\n                instrument: {\n                    type: 'card',\n                    cardholderName: values.cardName || '',\n                    number: values.cardNumber ? values.cardNumber.replace(/ /g, '') : '',\n                    expiryMonth: Number(expiryMonth.trim()),\n                    expiryYear: Number(`20${expiryYear.trim()}`),\n                    verificationValue: values.cardCode ?? '',\n                },\n                defaultInstrument,\n            });\n\n            this._eventPoster.post({\n                type: HostedInputEventType.StoredCardSucceeded,\n            });\n        } catch (error) {\n            this._eventPoster.post({\n                type: HostedInputEventType.StoredCardFailed,\n            });\n        }\n    };\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-styles.ts",
    "content": "type HostedInputStyles = Partial<\n    Pick<CSSStyleDeclaration, 'color' | 'fontFamily' | 'fontSize' | 'fontWeight'>\n>;\n\nexport default HostedInputStyles;\n\nexport interface HostedInputStylesMap {\n    default?: HostedInputStyles;\n    error?: HostedInputStyles;\n    focus?: HostedInputStyles;\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-validate-error-data.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nexport default interface HostedInputValidateErrorData {\n    fieldType: string;\n    message: string;\n    type: string;\n}\n\nexport interface HostedInputValidateErrorDataMap {\n    [HostedFieldType.CardCode]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardCodeVerification]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardExpiry]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardName]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardNumber]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardNumberVerification]?: HostedInputValidateErrorData[];\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-validate-results.ts",
    "content": "import { HostedInputValidateErrorDataMap } from './hosted-input-validate-error-data';\n\nexport default interface HostedInputValidateResults {\n    errors: HostedInputValidateErrorDataMap;\n    isValid: boolean;\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-validator.spec.ts",
    "content": "import { omit } from 'lodash';\n\nimport { getCardInstrument } from '../../payment/instrument/instrument.mock';\nimport HostedFieldType from '../hosted-field-type';\n\nimport HostedInputValidateResults from './hosted-input-validate-results';\nimport HostedInputValidator from './hosted-input-validator';\nimport HostedInputValues from './hosted-input-values';\n\ndescribe('HostedInputValidator', () => {\n    let validData: HostedInputValues;\n    let validResults: HostedInputValidateResults;\n    let validator: HostedInputValidator;\n\n    beforeEach(() => {\n        validData = {\n            cardCode: '123',\n            cardExpiry: '10 / 35',\n            cardName: 'BC',\n            cardNumber: '4111 1111 1111 1111',\n        };\n\n        validResults = {\n            isValid: true,\n            errors: {\n                cardCode: [],\n                cardExpiry: [],\n                cardName: [],\n                cardNumber: [],\n            },\n        };\n\n        validator = new HostedInputValidator(getCardInstrument());\n    });\n\n    it('does not throw error if data is valid', async () => {\n        expect(await validator.validate(validData)).toEqual(validResults);\n    });\n\n    it('does not throw error if card number is valid 13-digit visa card number', async () => {\n        expect(await validator.validate({ ...validData, cardNumber: '4929 0000 0555 9' })).toEqual(\n            validResults,\n        );\n    });\n\n    it('does not throw error if card number is valid 8-BIN discover card number', async () => {\n        expect(\n            await validator.validate({ ...validData, cardNumber: '8171 9999 2766 0000' }),\n        ).toEqual(validResults);\n    });\n\n    it('does not throw error if card number is valid JCB test card number', async () => {\n        expect(await validator.validate({ ...validData, cardNumber: '3337000000000008' })).toEqual(\n            validResults,\n        );\n    });\n\n    it('returns error if card number is missing', async () => {\n        expect(await validator.validate({ ...validData, cardNumber: '' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardNumber: [\n                    {\n                        fieldType: 'cardNumber',\n                        type: 'required',\n                        message: 'Credit card number is required',\n                    },\n                    {\n                        fieldType: 'cardNumber',\n                        type: 'invalid_card_number',\n                        message: 'Credit card number must be valid',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('returns error if card number is invalid', async () => {\n        expect(\n            await validator.validate({ ...validData, cardNumber: '9999 9999 9999 9999' }),\n        ).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardNumber: [\n                    {\n                        fieldType: 'cardNumber',\n                        type: 'invalid_card_number',\n                        message: 'Credit card number must be valid',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('does not return error if card number is not required', async () => {\n        expect(await validator.validate(omit(validData, HostedFieldType.CardNumber))).toEqual({\n            ...validResults,\n            errors: omit(validResults.errors, HostedFieldType.CardNumber),\n        });\n    });\n\n    it('returns error if card name is missing', async () => {\n        expect(await validator.validate({ ...validData, cardName: '' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardName: [\n                    { fieldType: 'cardName', type: 'required', message: 'Full name is required' },\n                ],\n            },\n        });\n    });\n\n    it('returns error if card name field includes a valid card number', async () => {\n        expect(\n            await validator.validate({\n                ...validData,\n                cardName: 'text before 4111 1111 1111 1111 and after',\n            }),\n        ).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardName: [\n                    {\n                        fieldType: 'cardName',\n                        type: 'invalid_card_name',\n                        message: 'Credit card name must be valid',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('does not return error if card name is not required', async () => {\n        expect(await validator.validate(omit(validData, HostedFieldType.CardName))).toEqual({\n            ...validResults,\n            errors: omit(validResults.errors, HostedFieldType.CardName),\n        });\n    });\n\n    it('returns error if expiry date is missing', async () => {\n        expect(await validator.validate({ ...validData, cardExpiry: '' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardExpiry: [\n                    {\n                        fieldType: 'cardExpiry',\n                        type: 'required',\n                        message: 'Expiration date is required',\n                    },\n                    {\n                        fieldType: 'cardExpiry',\n                        type: 'invalid_card_expiry',\n                        message: 'Expiration date must be a valid future date in MM / YY format',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('returns error if expiry date is invalid', async () => {\n        expect(await validator.validate({ ...validData, cardExpiry: '2030 / 12' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardExpiry: [\n                    {\n                        fieldType: 'cardExpiry',\n                        type: 'invalid_card_expiry',\n                        message: 'Expiration date must be a valid future date in MM / YY format',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('returns error if expiry date is in past', async () => {\n        expect(await validator.validate({ ...validData, cardExpiry: '2030 / 12' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardExpiry: [\n                    {\n                        fieldType: 'cardExpiry',\n                        type: 'invalid_card_expiry',\n                        message: 'Expiration date must be a valid future date in MM / YY format',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('does not return error if expiry date is not required', async () => {\n        expect(await validator.validate(omit(validData, HostedFieldType.CardExpiry))).toEqual({\n            ...validResults,\n            errors: omit(validResults.errors, HostedFieldType.CardExpiry),\n        });\n    });\n\n    it('returns error if card code is missing when required', async () => {\n        expect(await validator.validate({ ...validData, cardCode: '' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardCode: [\n                    { fieldType: 'cardCode', type: 'required', message: 'CVV is required' },\n                    {\n                        fieldType: 'cardCode',\n                        type: 'invalid_card_code',\n                        message: 'CVV must be valid',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('returns error if card code is invalid when required', async () => {\n        expect(await validator.validate({ ...validData, cardCode: '99999' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardCode: [\n                    {\n                        fieldType: 'cardCode',\n                        type: 'invalid_card_code',\n                        message: 'CVV must be valid',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('returns error if card code is invalid for given card number', async () => {\n        // Card code for American Express should have 4 digts\n        expect(\n            await validator.validate({\n                ...validData,\n                cardCode: '123',\n                cardNumber: '378282246310005',\n            }),\n        ).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardCode: [\n                    {\n                        fieldType: 'cardCode',\n                        type: 'invalid_card_code',\n                        message: 'CVV must be valid',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('does not return error if card code is not required', async () => {\n        expect(await validator.validate(omit(validData, HostedFieldType.CardCode))).toEqual({\n            ...validResults,\n            errors: omit(validResults.errors, HostedFieldType.CardCode),\n        });\n    });\n\n    it('does not return invalid card code error if card code is provided before card number', async () => {\n        expect(await validator.validate({ ...validData, cardCode: '123', cardNumber: '' })).toEqual(\n            {\n                isValid: false,\n                errors: expect.objectContaining({\n                    cardCode: [],\n                }),\n            },\n        );\n    });\n\n    describe('when validating against stored card verification fields', () => {\n        it('returns error if card number used for verification is missing', async () => {\n            expect(await validator.validate({ cardNumberVerification: '' })).toEqual({\n                isValid: false,\n                errors: {\n                    cardNumberVerification: expect.arrayContaining([\n                        {\n                            fieldType: 'cardNumberVerification',\n                            type: 'required',\n                            message: 'Credit card number is required',\n                        },\n                    ]),\n                },\n            });\n        });\n\n        it('returns error if card number used for verification is invalid', async () => {\n            expect(\n                await validator.validate({ cardNumberVerification: '9999 9999 9999 9999' }),\n            ).toEqual({\n                isValid: false,\n                errors: {\n                    cardNumberVerification: expect.arrayContaining([\n                        {\n                            fieldType: 'cardNumberVerification',\n                            type: 'invalid_card_number',\n                            message: 'Credit card number must be valid',\n                        },\n                    ]),\n                },\n            });\n        });\n\n        it('returns error if card number used for verification is does not match with instrument', async () => {\n            expect(\n                await validator.validate({ cardNumberVerification: '5555 5555 5555 4444' }),\n            ).toEqual({\n                isValid: false,\n                errors: {\n                    cardNumberVerification: expect.arrayContaining([\n                        {\n                            fieldType: 'cardNumberVerification',\n                            type: 'mismatched_card_number',\n                            message:\n                                'The card number entered does not match the card stored in your account',\n                        },\n                    ]),\n                },\n            });\n        });\n\n        it('does not return error if card number used for verification is valid', async () => {\n            expect(\n                await validator.validate({ cardNumberVerification: '4111 1111 1111 1111' }),\n            ).toEqual({\n                isValid: true,\n                errors: {\n                    cardNumberVerification: [],\n                },\n            });\n        });\n\n        it('returns error if card code used for verification is missing', async () => {\n            expect(await validator.validate({ cardCodeVerification: '' })).toEqual({\n                isValid: false,\n                errors: {\n                    cardCodeVerification: expect.arrayContaining([\n                        {\n                            fieldType: 'cardCodeVerification',\n                            type: 'required',\n                            message: 'CVV is required',\n                        },\n                    ]),\n                },\n            });\n        });\n\n        it('returns error if card code used for verification is invalid', async () => {\n            expect(await validator.validate({ cardCodeVerification: '1234' })).toEqual({\n                isValid: false,\n                errors: {\n                    cardCodeVerification: expect.arrayContaining([\n                        {\n                            fieldType: 'cardCodeVerification',\n                            type: 'invalid_card_code',\n                            message: 'CVV must be valid',\n                        },\n                    ]),\n                },\n            });\n        });\n\n        it('does not return error if card code used for verification is valid', async () => {\n            expect(await validator.validate({ cardCodeVerification: '123' })).toEqual({\n                isValid: true,\n                errors: {\n                    cardCodeVerification: [],\n                },\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-validator.ts",
    "content": "import { creditCardType, cvv, expirationDate, number } from 'card-validator';\nimport { object, ObjectShape, string, StringSchema, ValidationError } from 'yup';\n\nimport { CardInstrument } from '../../payment/instrument';\n\nimport { HostedInputValidateErrorDataMap } from './hosted-input-validate-error-data';\nimport HostedInputValidateResults from './hosted-input-validate-results';\nimport HostedInputValues from './hosted-input-values';\n\nexport default class HostedInputValidator {\n    private readonly _completeSchema: ObjectShape = {\n        cardCode: this._getCardCodeSchema(),\n        cardCodeVerification: this._getCardCodeVerificationSchema(),\n        cardExpiry: this._getCardExpirySchema(),\n        cardName: this._getCardNameSchema(),\n        cardNumber: this._getCardNumberSchema(),\n        cardNumberVerification: this._getCardNumberVerificationSchema(),\n    };\n\n    constructor(private _cardInstrument?: CardInstrument) {\n        this._configureCardValidator();\n    }\n\n    async validate(values: HostedInputValues): Promise<HostedInputValidateResults> {\n        const schemas: ObjectShape = {};\n        const results: HostedInputValidateResults = {\n            errors: {},\n            isValid: true,\n        };\n\n        let requiredField: keyof HostedInputValues;\n\n        for (requiredField in values) {\n            if (Object.prototype.hasOwnProperty.call(values, requiredField)) {\n                schemas[requiredField] = this._completeSchema[requiredField];\n                results.errors[requiredField] = [];\n            }\n        }\n\n        try {\n            await object(schemas).validate(values, { abortEarly: false });\n\n            return results;\n        } catch (error) {\n            if (this._isValidationErrorType(error)) {\n                throw error;\n            }\n\n            return {\n                errors: (\n                    Object.keys(results.errors) as Array<keyof HostedInputValidateErrorDataMap>\n                ).reduce<HostedInputValidateErrorDataMap>(\n                    (result, fieldType) => ({\n                        ...result,\n                        [fieldType]: (error as ValidationError).inner\n                            .filter((innerError) => innerError.path === fieldType)\n                            .map((innerError) => ({\n                                fieldType: innerError.path,\n                                message: innerError.errors.join(' '),\n                                type: innerError.type,\n                            })),\n                    }),\n                    {},\n                ),\n                isValid: false,\n            };\n        }\n    }\n\n    private _configureCardValidator(): void {\n        const discoverInfo = creditCardType.getTypeInfo('discover');\n        const jcbInfo = creditCardType.getTypeInfo('jcb');\n        const visaInfo = creditCardType.getTypeInfo('visa');\n\n        // Need to support 13 digit PAN because some gateways only provide test credit card numbers in this format.\n        creditCardType.updateCard('visa', {\n            lengths: [13, ...(visaInfo.lengths || [])],\n        });\n\n        // Add support for 8-BIN Discover Cards.\n        creditCardType.updateCard('discover', {\n            patterns: [...(discoverInfo.patterns || []), [810, 817]],\n        });\n\n        creditCardType.addCard({\n            niceType: 'Mada',\n            type: 'mada',\n            patterns: [\n                400861, 401757, 407197, 407395, 409201, 410685, 412565, 417633, 419593, 422817,\n                422818, 422819, 428331, 428671, 428672, 428673, 431361, 432328, 434107, 439954,\n                440533, 440647, 440795, 445564, 446393, 446404, 446672, 455036, 455708, 457865,\n                458456, 462220, 468540, 468541, 468542, 468543, 483010, 483011, 483012, 484783,\n                486094, 486095, 486096, 489317, 489318, 489319, 493428, 504300, 506968, 508160,\n                513213, 520058, 521076, 524130, 524514, 529415, 529741, 530060, 530906, 531095,\n                531196, 532013, 535825, 535989, 536023, 537767, 539931, 543085, 543357, 549760,\n                554180, 557606, 558848, 585265, 588845, 588846, 588847, 588848, 588849, 588850,\n                588851, 588982, 588983, 589005, 589206, 604906, 605141, 636120, 968201, 968202,\n                968203, 968204, 968205, 968206, 968207, 968208, 968209, 968210, 968211,\n            ],\n            gaps: [4, 8, 12],\n            lengths: [16, 18, 19],\n            code: {\n                name: 'CVV',\n                size: 3,\n            },\n        });\n\n        // Add support WorldPayAccess and Authorize.net test cards\n        creditCardType.updateCard('jcb', {\n            patterns: [...(jcbInfo.patterns || []), 3088, 3337, 3338],\n        });\n    }\n\n    private _getCardCodeSchema(): StringSchema {\n        return string()\n            .required('CVV is required')\n            .test({\n                message: 'CVV must be valid',\n                name: 'invalid_card_code',\n                test(value) {\n                    const { card } = number((this.parent as HostedInputValues).cardNumber || '');\n\n                    return cvv(value, card && card.code ? card.code.size : undefined).isValid;\n                },\n            });\n    }\n\n    private _getCardCodeVerificationSchema(): StringSchema {\n        return string()\n            .required('CVV is required')\n            .test({\n                message: 'CVV must be valid',\n                name: 'invalid_card_code',\n                test: (value = '') => {\n                    const cardType =\n                        this._cardInstrument &&\n                        this._mapFromInstrumentCardType(this._cardInstrument.brand);\n                    const cardInfo = cardType && creditCardType.getTypeInfo(cardType);\n\n                    return cvv(value, cardInfo && cardInfo.code ? cardInfo.code.size : undefined)\n                        .isValid;\n                },\n            });\n    }\n\n    private _getCardExpirySchema(): StringSchema {\n        return string()\n            .required('Expiration date is required')\n            .test({\n                message: 'Expiration date must be a valid future date in MM / YY format',\n                name: 'invalid_card_expiry',\n                test: (value) => expirationDate(value).isValid,\n            });\n    }\n\n    private _getCardNameSchema(): StringSchema {\n        return string()\n            .max(200)\n            .required('Full name is required')\n            .test({\n                message: 'Credit card name must be valid',\n                name: 'invalid_card_name',\n                test: (value) => {\n                    // Get all numbers from the input value after removing whitespaces\n                    const numbers = value.replace(/\\s/g, '').match(/[0-9]+/g);\n\n                    if (!numbers?.length) {\n                        return true;\n                    }\n\n                    for (const num of numbers) {\n                        if (number(num).isValid) {\n                            return false;\n                        }\n                    }\n\n                    return true;\n                },\n            });\n    }\n\n    private _getCardNumberSchema(): StringSchema {\n        return string()\n            .required('Credit card number is required')\n            .test({\n                message: 'Credit card number must be valid',\n                name: 'invalid_card_number',\n                test: (value) => number(value).isValid,\n            });\n    }\n\n    private _getCardNumberVerificationSchema(): StringSchema {\n        return string()\n            .required('Credit card number is required')\n            .test({\n                message: 'Credit card number must be valid',\n                name: 'invalid_card_number',\n                test: (value = '') => number(value).isValid,\n            })\n            .test({\n                message: 'The card number entered does not match the card stored in your account',\n                name: 'mismatched_card_number',\n                test: (value = '') =>\n                    this._cardInstrument\n                        ? value.slice(-this._cardInstrument.last4.length) ===\n                          this._cardInstrument.last4\n                        : false,\n            });\n    }\n\n    private _mapFromInstrumentCardType(type: string): string {\n        switch (type) {\n            case 'amex':\n            case 'american_express':\n                return 'american-express';\n\n            case 'diners':\n                return 'diners-club';\n\n            default:\n                return type;\n        }\n    }\n\n    private _isValidationErrorType(error: any): error is { name: string } {\n        return 'name' in error && error.name !== 'ValidationError';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-values.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nexport default interface HostedInputValues {\n    [HostedFieldType.CardCode]?: string;\n    [HostedFieldType.CardCodeVerification]?: string;\n    [HostedFieldType.CardExpiry]?: string;\n    [HostedFieldType.CardName]?: string;\n    [HostedFieldType.CardNumber]?: string;\n    [HostedFieldType.CardNumberVerification]?: string;\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input-window.ts",
    "content": "import HostedInput from './hosted-input';\n\nexport default interface HostedInputWindow extends Window {\n    hostedInput: HostedInput;\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport { IframeEventListener, IframeEventPoster } from '../../common/iframe';\nimport {\n    HostedFieldEventMap,\n    HostedFieldEventType,\n    HostedFieldSubmitRequestEvent,\n} from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputPaymentHandler from './hosted-input-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\nimport HostedInputValues from './hosted-input-values';\n\ndescribe('HostedInput', () => {\n    let container: HTMLFormElement;\n    let eventEmitter: EventEmitter;\n    let eventListener: Pick<\n        IframeEventListener<HostedFieldEventMap>,\n        'addListener' | 'listen' | 'stopListen'\n    >;\n    let eventPoster: Pick<IframeEventPoster<HostedInputEvent>, 'setTarget' | 'post'>;\n    let fontUrls: string[];\n    let input: HostedInput;\n    let inputAggregator: Pick<HostedInputAggregator, 'getInputValues'>;\n    let inputValidator: Pick<HostedInputValidator, 'validate'>;\n    let paymentHandler: Pick<HostedInputPaymentHandler, 'handle'>;\n    let storedCardHandler: Pick<HostedInputStoredCardHandler, 'handle'>;\n    let styles: HostedInputStylesMap;\n    let values: HostedInputValues;\n\n    beforeEach(() => {\n        values = {\n            cardCode: '123',\n            cardExpiry: '10 / 20',\n            cardName: 'Good Shopper',\n            cardNumber: '4111 1111 1111 1111',\n        };\n\n        styles = {\n            default: {\n                color: 'rgb(255, 255, 255)',\n                fontSize: '15px',\n            },\n        };\n\n        eventEmitter = new EventEmitter();\n\n        eventListener = {\n            addListener: jest.fn((type, listener) => {\n                eventEmitter.on(type, listener);\n            }),\n            listen: jest.fn(),\n            stopListen: jest.fn(),\n        };\n\n        eventPoster = {\n            post: jest.fn(),\n            setTarget: jest.fn(),\n        };\n\n        fontUrls = ['https://fonts.googleapis.com/css?family=Open+Sans&display=swap'];\n\n        paymentHandler = { handle: jest.fn() };\n        storedCardHandler = { handle: jest.fn() };\n\n        inputAggregator = {\n            getInputValues: jest.fn(() => values),\n        };\n\n        inputValidator = {\n            validate: jest.fn(() =>\n                Promise.resolve({\n                    isValid: true,\n                    errors: {\n                        cardExpiry: [],\n                        cardName: [],\n                        cardNumber: [],\n                    },\n                }),\n            ),\n        };\n\n        container = document.createElement('form');\n        document.body.appendChild(container);\n\n        input = new HostedInput(\n            HostedFieldType.CardName,\n            container,\n            'Full name',\n            'Cardholder name',\n            'cc-name',\n            styles,\n            fontUrls,\n            eventListener as IframeEventListener<HostedFieldEventMap>,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            paymentHandler as HostedInputPaymentHandler,\n            storedCardHandler as HostedInputStoredCardHandler,\n        );\n    });\n\n    afterEach(() => {\n        input.detach();\n        container.remove();\n    });\n\n    it('returns input type', () => {\n        expect(input.getType()).toEqual(HostedFieldType.CardName);\n    });\n\n    it('sets and returns input value', () => {\n        input.setValue('abc');\n\n        expect(input.getValue()).toBe('abc');\n    });\n\n    it('attaches input to container', () => {\n        input.attach();\n\n        expect(container.querySelector('input')).toBeDefined();\n    });\n\n    it('configures input with expected attributes', () => {\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        expect(element.id).toBe('card-name');\n        expect(element.placeholder).toBe('Full name');\n        expect(element.autocomplete).toBe('cc-name');\n        expect(element.getAttribute('aria-label')).toBe('Cardholder name');\n        expect(element.inputMode).toBe('text');\n    });\n\n    it('configures card number input with numeric inputmode', () => {\n        const cardNumberInput = new HostedInput(\n            HostedFieldType.CardNumber,\n            container,\n            'Full name',\n            'Cardholder name',\n            'cc-name',\n            styles,\n            fontUrls,\n            eventListener as IframeEventListener<HostedFieldEventMap>,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            paymentHandler as HostedInputPaymentHandler,\n            storedCardHandler as HostedInputStoredCardHandler,\n        );\n\n        cardNumberInput.attach();\n\n        expect(container.querySelector('input')!.inputMode).toBe('numeric');\n\n        cardNumberInput.detach();\n    });\n\n    it('sets target for event poster', () => {\n        input.attach();\n\n        expect(eventPoster.setTarget).toHaveBeenCalled();\n    });\n\n    it('starts listening to events', () => {\n        input.attach();\n\n        expect(eventListener.listen).toHaveBeenCalled();\n    });\n\n    it('applies default styles to input', () => {\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        expect(element.style.color).toBe('rgb(255, 255, 255)');\n        expect(element.style.fontSize).toBe('15px');\n    });\n\n    it('notifies when input is attached', () => {\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.AttachSucceeded,\n        });\n    });\n\n    it('loads required fonts when input is attached', () => {\n        input.attach();\n\n        const links = Array.from<HTMLLinkElement>(\n            document.querySelectorAll('link[href*=\"fonts.googleapis.com\"][rel=\"stylesheet\"]'),\n        );\n\n        expect(links.map((link) => link.href)).toEqual(fontUrls);\n    });\n\n    it('notifies input change', () => {\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        element.value = '123';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.Changed,\n            payload: {\n                fieldType: HostedFieldType.CardName,\n            },\n        });\n    });\n\n    it('notifies when input is in focus', () => {\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        element.dispatchEvent(new Event('focus', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.Focused,\n            payload: {\n                fieldType: HostedFieldType.CardName,\n            },\n        });\n    });\n\n    it('notifies when input loses focus', () => {\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        element.dispatchEvent(new Event('blur', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.Blurred,\n            payload: {\n                fieldType: HostedFieldType.CardName,\n            },\n        });\n    });\n\n    it('validates form when input loses focus', () => {\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        element.dispatchEvent(new Event('blur', { bubbles: true }));\n\n        expect(inputValidator.validate).toHaveBeenCalledWith(values);\n    });\n\n    it('validates form when requested by parent frame', () => {\n        input.attach();\n\n        eventEmitter.emit(HostedFieldEventType.ValidateRequested);\n\n        expect(inputValidator.validate).toHaveBeenCalledWith(values);\n    });\n\n    it('submits form when requested by parent frame', () => {\n        const event = {} as HostedFieldSubmitRequestEvent;\n\n        input.attach();\n\n        eventEmitter.emit(HostedFieldEventType.SubmitRequested, event);\n\n        expect(paymentHandler.handle).toHaveBeenCalledWith(event);\n    });\n\n    it('emits event when enter key is pressed', () => {\n        input.attach();\n\n        container.dispatchEvent(new Event('submit'));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.Entered,\n            payload: {\n                fieldType: HostedFieldType.CardName,\n            },\n        });\n    });\n\n    it('cleans up when it detaches', () => {\n        jest.spyOn(eventListener, 'stopListen');\n\n        input.attach();\n        input.detach();\n\n        expect(eventListener.stopListen).toHaveBeenCalled();\n        expect(container.querySelector('input')).toBeFalsy();\n        expect(\n            document.querySelector('link[href*=\"fonts.googleapis.com\"][rel=\"stylesheet\"]'),\n        ).toBeFalsy();\n    });\n\n    it('applies bugfix of forcing focus on input field', () => {\n        input.attach();\n\n        expect(document.activeElement).toEqual(document.body);\n\n        window.dispatchEvent(new Event('focus'));\n\n        expect(document.activeElement).toEqual(container.querySelector('input'));\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/hosted-input.ts",
    "content": "import { kebabCase } from 'lodash';\n\nimport { IframeEventListener, IframeEventPoster } from '../../common/iframe';\nimport { parseUrl } from '../../common/url';\nimport {\n    HostedFieldEventMap,\n    HostedFieldEventType,\n    HostedFieldValidateRequestEvent,\n} from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputPaymentHandler from './hosted-input-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport HostedInputStyles, { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\nimport HostedInputWindow from './hosted-input-window';\n\nexport default class HostedInput {\n    protected _input: HTMLInputElement;\n    protected _previousValue?: string;\n    private _fontLinks?: HTMLLinkElement[];\n    private _isTouched = false;\n\n    /**\n     * @internal\n     */\n    constructor(\n        protected _type: HostedFieldType,\n        protected _form: HTMLFormElement,\n        protected _placeholder: string,\n        protected _accessibilityLabel: string,\n        protected _autocomplete: string,\n        protected _styles: HostedInputStylesMap,\n        protected _fontUrls: string[],\n        protected _eventListener: IframeEventListener<HostedFieldEventMap>,\n        protected _eventPoster: IframeEventPoster<HostedInputEvent>,\n        protected _inputAggregator: HostedInputAggregator,\n        protected _inputValidator: HostedInputValidator,\n        protected _paymentHandler: HostedInputPaymentHandler,\n        protected _storedCardHandler: HostedInputStoredCardHandler,\n    ) {\n        this._input = document.createElement('input');\n\n        this._input.addEventListener('input', this._handleInput);\n        this._input.addEventListener('blur', this._handleBlur);\n        this._input.addEventListener('focus', this._handleFocus);\n        this._eventListener.addListener(\n            HostedFieldEventType.ValidateRequested,\n            this._handleValidate,\n        );\n        this._eventListener.addListener(\n            HostedFieldEventType.SubmitRequested,\n            this._paymentHandler.handle,\n        );\n        this._eventListener.addListener(\n            HostedFieldEventType.StoredCardRequested,\n            this._storedCardHandler.handle,\n        );\n\n        this._configureInput();\n    }\n\n    getType(): HostedFieldType {\n        return this._type;\n    }\n\n    getValue(): string {\n        return this._input.value;\n    }\n\n    setValue(value: string): void {\n        this._processChange(value);\n    }\n\n    isTouched(): boolean {\n        return this._isTouched;\n    }\n\n    attach(): void {\n        this._form.appendChild(this._input);\n        this._form.addEventListener('submit', this._handleSubmit);\n\n        this._loadFonts();\n\n        this._eventPoster.setTarget(window.parent);\n        this._eventListener.listen();\n\n        // fixes the issue on Firefox/Safari where the input doesn't focus properly\n        window.addEventListener('focus', this._forceFocusToInput);\n\n        // Assign itself to the global so it can be accessed by its sibling frames\n        (window as unknown as HostedInputWindow).hostedInput = this;\n\n        this._eventPoster.post({ type: HostedInputEventType.AttachSucceeded });\n    }\n\n    detach(): void {\n        if (this._input.parentElement) {\n            this._input.parentElement.removeChild(this._input);\n        }\n\n        this._form.removeEventListener('submit', this._handleSubmit);\n        this._unloadFonts();\n\n        window.removeEventListener('focus', this._forceFocusToInput);\n\n        this._eventListener.stopListen();\n    }\n\n    protected _formatValue(value: string): void {\n        this._input.value = value;\n    }\n\n    protected _notifyChange(_value: string): void {\n        this._eventPoster.post({\n            type: HostedInputEventType.Changed,\n            payload: {\n                fieldType: this._type,\n            },\n        });\n    }\n\n    private _configureInput(): void {\n        this._input.style.backgroundColor = 'transparent';\n        this._input.style.border = '0';\n        this._input.style.display = 'block';\n        this._input.style.height = '100%';\n        this._input.style.margin = '0';\n        this._input.style.outline = 'none';\n        this._input.style.padding = '0';\n        this._input.style.width = '100%';\n        this._input.id = kebabCase(this._type);\n        this._input.placeholder = this._placeholder;\n        this._input.autocomplete = this._autocomplete;\n\n        this._input.setAttribute('aria-label', this._accessibilityLabel);\n\n        this._applyStyles(this._styles.default);\n\n        switch (this._input.id) {\n            case 'card-code':\n            case 'card-expiry':\n            case 'card-number':\n                this._input.type = 'text';\n                this._input.inputMode = 'numeric';\n                this._input.pattern = '[0-9]*';\n                break;\n\n            case 'card-name':\n                this._input.type = 'text';\n                this._input.inputMode = 'text';\n                break;\n        }\n    }\n\n    private _applyStyles(styles: HostedInputStyles = {}): void {\n        const allowedStyles: {\n            [key in keyof Required<HostedInputStyles>]: HostedInputStyles[key];\n        } = {\n            color: styles.color,\n            fontFamily: styles.fontFamily,\n            fontSize: styles.fontSize,\n            fontWeight: styles.fontWeight,\n        };\n        const styleKeys = Object.keys(allowedStyles) as Array<keyof HostedInputStyles>;\n\n        styleKeys.forEach((key) => {\n            if (!allowedStyles[key]) {\n                return;\n            }\n\n            this._input.style[key] = allowedStyles[key] || '';\n        });\n    }\n\n    private _loadFonts(): void {\n        if (this._fontLinks) {\n            return;\n        }\n\n        this._fontLinks = this._fontUrls\n            .filter((url) => parseUrl(url).hostname === 'fonts.googleapis.com')\n            .filter((url) => !document.querySelector(`link[href='${url}'][rel='stylesheet']`))\n            .map((url) => {\n                const link = document.createElement('link');\n\n                link.rel = 'stylesheet';\n                link.href = url;\n\n                document.head.appendChild(link);\n\n                return link;\n            });\n    }\n\n    private _unloadFonts(): void {\n        if (!this._fontLinks) {\n            return;\n        }\n\n        this._fontLinks.forEach((link) => {\n            if (!link.parentElement) {\n                return;\n            }\n\n            link.parentElement.removeChild(link);\n        });\n\n        this._fontLinks = undefined;\n    }\n\n    private async _validateForm(): Promise<void> {\n        const values = this._inputAggregator.getInputValues();\n        const results = await this._inputValidator.validate(values);\n\n        if (results.isValid) {\n            this._applyStyles(this._styles.default);\n        } else {\n            this._applyStyles(this._styles.error);\n        }\n\n        this._eventPoster.post({\n            type: HostedInputEventType.Validated,\n            payload: results,\n        });\n    }\n\n    private _processChange(value: string): void {\n        if (value === this._previousValue) {\n            return;\n        }\n\n        this._isTouched = true;\n\n        this._formatValue(value);\n        this._validateForm();\n        this._notifyChange(value);\n\n        this._previousValue = value;\n    }\n\n    private _handleInput: (event: Event) => void = (event) => {\n        const input = event.target as HTMLInputElement;\n\n        this._processChange(input.value);\n    };\n\n    private _handleBlur: (event: Event) => void = () => {\n        this._applyStyles(this._styles.default);\n        this._validateForm();\n\n        this._eventPoster.post({\n            type: HostedInputEventType.Blurred,\n            payload: {\n                fieldType: this._type,\n            },\n        });\n    };\n\n    private _handleFocus: (event: Event) => void = () => {\n        this._applyStyles(this._styles.focus);\n\n        this._eventPoster.post({\n            type: HostedInputEventType.Focused,\n            payload: {\n                fieldType: this._type,\n            },\n        });\n    };\n\n    private _handleValidate: (event: HostedFieldValidateRequestEvent) => void = () => {\n        this._validateForm();\n    };\n\n    private _handleSubmit: (event: Event) => void = (event) => {\n        event.preventDefault();\n\n        this._eventPoster.post({\n            type: HostedInputEventType.Entered,\n            payload: {\n                fieldType: this._type,\n            },\n        });\n    };\n\n    private _forceFocusToInput = (): void => {\n        if (document.activeElement === document.body) {\n            const browserName = navigator.userAgent.toLowerCase();\n\n            if (browserName.indexOf('safari') > -1) {\n                if (this._input.value === '') {\n                    this._input.setAttribute('value', ' ');\n                    this._input.setSelectionRange(0, 1);\n                    this._input.setAttribute('value', '');\n                }\n            } else {\n                this._input.focus();\n            }\n        }\n    };\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/index.ts",
    "content": "export * from './hosted-input-events';\n\nexport { default as initializeHostedInput } from './initialize-hosted-input';\nexport { default as notifyInitializeError } from './notify-initialize-error';\nexport { default as CardExpiryFormatter } from './card-expiry-formatter';\nexport { default as CardNumberFormatter } from './card-number-formatter';\nexport { default as HostedInputStyles } from './hosted-input-styles';\nexport { default as HostedInputValues } from './hosted-input-values';\nexport {\n    default as HostedInputValidateErrorData,\n    HostedInputValidateErrorDataMap,\n} from './hosted-input-validate-error-data';\nexport { default as HostedInputValidateResults } from './hosted-input-validate-results';\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/initialize-hosted-input.ts",
    "content": "import { IframeEventListener } from '../../common/iframe';\nimport { HostedFieldEventMap } from '../hosted-field-events';\n\nimport getHostedInputStorage from './get-hosted-input-storage';\nimport HostedInput from './hosted-input';\nimport HostedInputFactory from './hosted-input-factory';\nimport HostedInputInitializer from './hosted-input-initializer';\nimport HostedInputOptions from './hosted-input-options';\n\nexport default function initializeHostedInput(options: HostedInputOptions): Promise<HostedInput> {\n    const { containerId, nonce, parentOrigin } = options;\n    const initializer = new HostedInputInitializer(\n        new HostedInputFactory(parentOrigin),\n        getHostedInputStorage(),\n        new IframeEventListener<HostedFieldEventMap>(parentOrigin),\n    );\n\n    return initializer.initialize(containerId, nonce);\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/map-to-accessibility-label.spec.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nimport mapToAccessibilityLabel from './map-to-accessibility-label';\n\ndescribe('mapToAccessibilityLabel()', () => {\n    it('returns label for card code input', () => {\n        expect(mapToAccessibilityLabel(HostedFieldType.CardCode)).toBe('CVC');\n    });\n\n    it('returns label for card expiry input', () => {\n        expect(mapToAccessibilityLabel(HostedFieldType.CardExpiry)).toBe('Expiration');\n    });\n\n    it('returns label for card name input', () => {\n        expect(mapToAccessibilityLabel(HostedFieldType.CardName)).toBe('Name on card');\n    });\n\n    it('returns label for card number input', () => {\n        expect(mapToAccessibilityLabel(HostedFieldType.CardNumber)).toBe('Credit card number');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/map-to-accessibility-label.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nexport default function mapToAccessibilityLabel(type: HostedFieldType): string {\n    switch (type) {\n        case HostedFieldType.CardCode:\n        case HostedFieldType.CardCodeVerification:\n            return 'CVC';\n\n        case HostedFieldType.CardExpiry:\n            return 'Expiration';\n\n        case HostedFieldType.CardName:\n            return 'Name on card';\n\n        case HostedFieldType.CardNumber:\n        case HostedFieldType.CardNumberVerification:\n            return 'Credit card number';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/map-to-autocomplete-type.spec.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nimport mapToAutocompleteType from './map-to-autocomplete-type';\n\ndescribe('mapToAutocompleteType()', () => {\n    it('returns autocomplete type for card code input', () => {\n        expect(mapToAutocompleteType(HostedFieldType.CardCode)).toBe('cc-csc');\n    });\n\n    it('returns autocomplete type for card expiry input', () => {\n        expect(mapToAutocompleteType(HostedFieldType.CardExpiry)).toBe('cc-exp');\n    });\n\n    it('returns autocomplete type for card name input', () => {\n        expect(mapToAutocompleteType(HostedFieldType.CardName)).toBe('cc-name');\n    });\n\n    it('returns autocomplete type for card number input', () => {\n        expect(mapToAutocompleteType(HostedFieldType.CardNumber)).toBe('cc-number');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/map-to-autocomplete-type.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nexport default function mapToAutocompleteType(type: HostedFieldType): string {\n    switch (type) {\n        case HostedFieldType.CardCode:\n            return 'cc-csc';\n\n        case HostedFieldType.CardExpiry:\n            return 'cc-exp';\n\n        case HostedFieldType.CardName:\n            return 'cc-name';\n\n        case HostedFieldType.CardNumber:\n            return 'cc-number';\n\n        default:\n            return '';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/iframe-content/notify-initialize-error.ts",
    "content": "import { IframeEventPoster } from '../../common/iframe';\n\nimport { HostedInputAttachErrorEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputInitializeErrorData from './hosted-input-initialize-error-data';\n\nconst poster = new IframeEventPoster<HostedInputAttachErrorEvent>('*', window.parent);\n\nexport default function notifyInitializeError(error: HostedInputInitializeErrorData): void {\n    poster.post({\n        type: HostedInputEventType.AttachFailed,\n        payload: { error },\n    });\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/index.ts",
    "content": "export { default as HostedFieldType } from './hosted-field-type';\nexport { default as HostedForm } from './hosted-form';\nexport { default as HostedFormFactory } from './hosted-form-factory';\nexport { default as LegacyHostedFormOptions } from './hosted-form-options';\nexport { default as HostedFormOrderDataTransformer } from './hosted-form-order-data-transformer';\nexport { default as HostedFormOrderData } from './hosted-form-order-data';\nexport { default as createStoredCardHostedFormService } from './create-hosted-form-stored-card-service';\n"
  },
  {
    "path": "packages/core/src/hosted-form/stored-card-hosted-form-service.spec.ts",
    "content": "import { CheckoutStore, createCheckoutStore } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\n\nimport StoredCardHostedFormService from './stored-card-hosted-form-service';\nimport {\n    StoredCardHostedFormDataMock,\n    StoredCardHostedFormInstrumentFieldsMock,\n} from './stored-card-hosted-form.mock';\n\nimport { HostedForm, HostedFormFactory, LegacyHostedFormOptions } from '.';\n\ndescribe('StoredCardHostedFormService', () => {\n    let formFactory: HostedFormFactory;\n\n    let store: CheckoutStore;\n    let service: StoredCardHostedFormService;\n    let initializeOptions: LegacyHostedFormOptions;\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreState());\n\n        formFactory = new HostedFormFactory(store);\n\n        service = new StoredCardHostedFormService('https://bigpay.integration.zone', formFactory);\n    });\n\n    describe('when hosted form is enabled', () => {\n        let form: Pick<HostedForm, 'attach' | 'submit' | 'validate' | 'submitStoredCard'>;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                submit: jest.fn(() => Promise.resolve()),\n                validate: jest.fn(() => Promise.resolve()),\n                submitStoredCard: jest.fn(() => Promise.resolve()),\n            };\n            initializeOptions = {\n                fields: {\n                    cardCode: {\n                        containerId: 'cardCode',\n                    },\n                    cardExpiry: {\n                        containerId: 'cardExpiry',\n                    },\n                    cardNumber: {\n                        containerId: 'cardNumber',\n                    },\n                    cardName: {\n                        containerId: 'cardName',\n                    },\n                },\n            };\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(formFactory, 'create').mockReturnValue(form);\n        });\n\n        it('creates hosted form', async () => {\n            await service.initialize(initializeOptions);\n\n            expect(formFactory.create).toHaveBeenCalledWith(\n                'https://bigpay.integration.zone',\n                initializeOptions,\n            );\n        });\n\n        it('attaches hosted form to container', async () => {\n            await service.initialize(initializeOptions);\n\n            expect(form.attach).toHaveBeenCalled();\n        });\n\n        it('submits payment data with hosted form', async () => {\n            await service.initialize(initializeOptions);\n            await service.submitStoredCard(\n                StoredCardHostedFormInstrumentFieldsMock,\n                StoredCardHostedFormDataMock,\n            );\n\n            expect(form.submitStoredCard).toHaveBeenCalledWith({\n                fields: StoredCardHostedFormInstrumentFieldsMock,\n                data: StoredCardHostedFormDataMock,\n            });\n        });\n\n        it('validates user input before submitting data', async () => {\n            await service.initialize(initializeOptions);\n            await service.submitStoredCard(\n                StoredCardHostedFormInstrumentFieldsMock,\n                StoredCardHostedFormDataMock,\n            );\n\n            expect(form.validate).toHaveBeenCalled();\n        });\n\n        it('does not submit payment data with hosted form if validation fails', async () => {\n            jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n            try {\n                await service.initialize(initializeOptions);\n                await service.submitStoredCard(\n                    StoredCardHostedFormInstrumentFieldsMock,\n                    StoredCardHostedFormDataMock,\n                );\n            } catch (error) {\n                expect(form.submit).not.toHaveBeenCalled();\n            }\n        });\n    });\n\n    describe('when hosted form is enabled but hosted fields are not present for rendering', () => {\n        let form: Pick<HostedForm, 'attach' | 'submit' | 'validate' | 'submitStoredCard'>;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                submit: jest.fn(() => Promise.resolve()),\n                validate: jest.fn(() => Promise.resolve()),\n                submitStoredCard: jest.fn(() => Promise.resolve()),\n            };\n            initializeOptions = {\n                fields: {},\n            };\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(formFactory, 'create').mockReturnValue(form);\n        });\n\n        it('does not submit with hosted form', async () => {\n            await service.initialize(initializeOptions);\n            await service.submitStoredCard(\n                StoredCardHostedFormInstrumentFieldsMock,\n                StoredCardHostedFormDataMock,\n            );\n\n            expect(form.submit).not.toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/hosted-form/stored-card-hosted-form-service.ts",
    "content": "import { NotInitializedError, NotInitializedErrorType } from '../common/error/errors';\n\nimport HostedForm from './hosted-form';\nimport HostedFormFactory from './hosted-form-factory';\nimport LegacyHostedFormOptions from './hosted-form-options';\nimport {\n    StoredCardHostedFormData,\n    StoredCardHostedFormInstrumentFields,\n} from './stored-card-hosted-form-type';\n\nexport default class StoredCardHostedFormService {\n    protected _hostedForm?: HostedForm;\n    constructor(protected _host: string, protected _hostedFormFactory: HostedFormFactory) {}\n\n    async submitStoredCard(\n        fields: StoredCardHostedFormInstrumentFields,\n        data: StoredCardHostedFormData,\n    ): Promise<void> {\n        const form = this._hostedForm;\n\n        if (!form) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        await form.validate().then(() => form.submitStoredCard({ fields, data }));\n    }\n\n    initialize(options: LegacyHostedFormOptions): Promise<void> {\n        const form = this._hostedFormFactory.create(this._host, options);\n\n        return form.attach().then(() => {\n            this._hostedForm = form;\n        });\n    }\n\n    deinitialize() {\n        if (this._hostedForm) {\n            this._hostedForm.detach();\n        }\n    }\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/stored-card-hosted-form-type.ts",
    "content": "export interface StoredCardHostedFormData {\n    currencyCode: string;\n    paymentsUrl: string;\n    providerId: string;\n    shopperId: string;\n    storeHash: string;\n    vaultToken: string;\n}\n\nexport interface StoredCardHostedFormPaymentInstrument {\n    type: string;\n    cardholderName: string;\n    number: string;\n    expiryMonth: number;\n    expiryYear: number;\n    verificationValue: string;\n}\n\nexport interface StoredCardHostedFormBillingAddress {\n    address1: string;\n    address2?: string;\n    city: string;\n    postalCode: string;\n    countryCode: string;\n    company?: string;\n    firstName: string;\n    lastName: string;\n    email: string;\n    phone?: string;\n    stateOrProvinceCode?: string;\n}\n\nexport interface StoredCardHostedFormInstrumentForm {\n    billingAddress: StoredCardHostedFormBillingAddress;\n    instrument: StoredCardHostedFormPaymentInstrument;\n    defaultInstrument: boolean;\n}\n\nexport interface StoredCardHostedFormInstrumentFields extends StoredCardHostedFormBillingAddress {\n    defaultInstrument: boolean;\n}\n\nexport interface StoredCardHostedFormPayload {\n    fields: StoredCardHostedFormInstrumentFields;\n    data: StoredCardHostedFormData;\n}\n"
  },
  {
    "path": "packages/core/src/hosted-form/stored-card-hosted-form.mock.ts",
    "content": "const StoredCardHostedFormDataMock = {\n    currencyCode: 'USD',\n    paymentsUrl: 'https//test.com',\n    providerId: 'bluesnapdirect',\n    shopperId: '12345',\n    storeHash: '12345',\n    vaultToken: 'token124',\n};\n\nconst StoredCardHostedFormBillingAddressAPIMock = {\n    email: 'string@mail.com',\n    address1: '57 Balsham Road',\n    city: 'Harthill',\n    postal_code: 'S31 6EN',\n    country_code: 'NL',\n    company: 'String',\n    first_name: 'John',\n    last_name: 'Smith',\n    phone: '123456789',\n    state_or_province_code: 'BEL',\n};\n\nconst StoredCardHostedFormBillingAddressMock = {\n    address1: '57 Balsham Road',\n    address2: '',\n    city: 'Harthill',\n    postalCode: 'S31 6EN',\n    countryCode: 'NL',\n    company: 'String',\n    firstName: 'John',\n    lastName: 'Smith',\n    email: 'string@mail.com',\n    phone: '123456789',\n    stateOrProvinceCode: 'BEL',\n};\n\nconst StoredCardHostedFormPaymentInstrumentAPIMock = {\n    type: 'card',\n    cardholder_name: 'John Smith',\n    number: '4111111111111111',\n    expiry_month: 3,\n    expiry_year: 2030,\n    verification_value: '777',\n};\n\nconst StoredCardHostedFormPaymentInstrumentMock = {\n    type: 'card',\n    cardholderName: 'John Smith',\n    number: '4111111111111111',\n    expiryMonth: 3,\n    expiryYear: 2030,\n    verificationValue: '777',\n};\n\nconst StoredCardHostedFormInstrumentFormMock = {\n    billingAddress: StoredCardHostedFormBillingAddressMock,\n    instrument: StoredCardHostedFormPaymentInstrumentMock,\n    defaultInstrument: true,\n};\n\nconst StoredCardHostedFormInstrumentFormAPIMock = {\n    billingAddress: StoredCardHostedFormBillingAddressAPIMock,\n    instrument: StoredCardHostedFormPaymentInstrumentAPIMock,\n    default_Instrument: true,\n};\nconst StoredCardHostedFormInstrumentFieldsMock = {\n    ...StoredCardHostedFormBillingAddressMock,\n    defaultInstrument: true,\n};\n\nexport {\n    StoredCardHostedFormDataMock,\n    StoredCardHostedFormBillingAddressMock,\n    StoredCardHostedFormPaymentInstrumentMock,\n    StoredCardHostedFormInstrumentFormMock,\n    StoredCardHostedFormInstrumentFieldsMock,\n    StoredCardHostedFormInstrumentFormAPIMock,\n};\n"
  },
  {
    "path": "packages/core/src/index.ts",
    "content": "export { BillingAddress, BillingAddressRequestBody, BillingAddressActionCreator } from './billing';\nexport { getBillingAddress } from './billing/billing-addresses.mock';\nexport { createDataStoreProjection, DataStoreProjection } from './common/data-store';\nexport { cloneResult as clone } from './common/utility';\nexport { Cart } from './cart';\nexport {\n    createCheckoutStore,\n    createInternalCheckoutSelectors,\n    Checkout,\n    CheckoutActionCreator,\n    CheckoutStore,\n    InternalCheckoutSelectors,\n    ReadableCheckoutStore,\n} from './checkout';\nexport { getCheckoutStoreStateWithOrder } from './checkout/checkouts.mock';\nexport { StoreConfig } from './config';\nexport { Customer } from './customer';\nexport { Order, OrderActionCreator, OrderRequestBody } from './order';\nexport { getOrder } from './order/orders.mock';\nexport {\n    Payment,\n    PaymentActionCreator,\n    PaymentMethodActionCreator,\n    PaymentMethod,\n} from './payment';\nexport { PaymentProviderCustomer } from './payment-provider-customer';\nexport { getPayment } from './payment/payments.mock';\nexport { CardInstrument } from './payment/instrument';\nexport {\n    Consignment,\n    ConsignmentActionCreator,\n    ShippingAddress,\n    ShippingAddressRequestBody,\n} from './shipping';\nexport { getShippingAddress } from './shipping/shipping-addresses.mock';\n"
  },
  {
    "path": "packages/core/src/loader-cdn.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\nimport 'current-script-polyfill';\n\nimport * as checkoutButtonBundle from './bundles/checkout-button';\nimport * as mainBundle from './bundles/checkout-sdk';\nimport * as embeddedCheckoutBundle from './bundles/embedded-checkout';\nimport * as hostedFormBundle from './bundles/hosted-form';\nimport { parseUrl } from './common/url';\n\nexport type CheckoutButtonBundle = typeof checkoutButtonBundle & { version: string };\nexport type EmbeddedCheckoutBundle = typeof embeddedCheckoutBundle & { version: string };\nexport type HostedFormBundle = typeof hostedFormBundle & { version: string };\nexport type MainBundle = typeof mainBundle & { version: string };\n\nexport enum BundleType {\n    CheckoutButton = 'checkout-button',\n    EmbeddedCheckout = 'embedded-checkout',\n    HostedForm = 'hosted-form',\n    Main = 'checkout-sdk',\n}\n\nconst scriptOrigin = isScriptElement(document.currentScript)\n    ? parseUrl(document.currentScript.src).origin\n    : '';\n\nexport function load(moduleName?: BundleType.Main): Promise<MainBundle>;\nexport function load(moduleName: BundleType.CheckoutButton): Promise<CheckoutButtonBundle>;\nexport function load(moduleName: BundleType.EmbeddedCheckout): Promise<EmbeddedCheckoutBundle>;\nexport function load(moduleName: BundleType.HostedForm): Promise<HostedFormBundle>;\n\nexport async function load(\n    moduleName: string = BundleType.Main,\n): Promise<MainBundle | CheckoutButtonBundle | EmbeddedCheckoutBundle | HostedFormBundle> {\n    const { version, js } = MANIFEST_JSON;\n    const manifestPath = js.find((path) => path.indexOf(moduleName) !== -1);\n\n    if (!manifestPath) {\n        throw new Error('Unable to load the script because its URL cannot be determined.');\n    }\n\n    await getScriptLoader().loadScript(`${scriptOrigin}/${manifestPath}`);\n\n    return {\n        version,\n        ...(window as any)[LIBRARY_NAME],\n    };\n}\n\nfunction isScriptElement(element: HTMLOrSVGScriptElement | null): element is HTMLScriptElement {\n    return !!(element && 'src' in element);\n}\n"
  },
  {
    "path": "packages/core/src/loader.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport * as checkoutButtonBundle from './bundles/checkout-button';\nimport * as mainBundle from './bundles/checkout-sdk';\nimport * as embeddedCheckoutBundle from './bundles/embedded-checkout';\nimport * as hostedFormBundle from './bundles/hosted-form';\n\nexport type CheckoutButtonBundle = typeof checkoutButtonBundle & { version: string };\nexport type EmbeddedCheckoutBundle = typeof embeddedCheckoutBundle & { version: string };\nexport type HostedFormBundle = typeof hostedFormBundle & { version: string };\nexport type MainBundle = typeof mainBundle & { version: string };\n\nexport enum BundleType {\n    CheckoutButton = 'checkout-button',\n    EmbeddedCheckout = 'embedded-checkout',\n    HostedForm = 'hosted-form',\n    Main = 'checkout-sdk',\n}\n\nexport function load(moduleName?: BundleType.Main): Promise<MainBundle>;\nexport function load(moduleName: BundleType.CheckoutButton): Promise<CheckoutButtonBundle>;\nexport function load(moduleName: BundleType.EmbeddedCheckout): Promise<EmbeddedCheckoutBundle>;\nexport function load(moduleName: BundleType.HostedForm): Promise<HostedFormBundle>;\n\nexport async function load(\n    moduleName: string = BundleType.Main,\n): Promise<MainBundle | CheckoutButtonBundle | EmbeddedCheckoutBundle | HostedFormBundle> {\n    const { version, js } = MANIFEST_JSON;\n    const manifestPath = js.find((path) => path.indexOf(moduleName) !== -1);\n\n    if (!manifestPath) {\n        throw new Error('Unable to load the script because its URL cannot be determined.');\n    }\n\n    await getScriptLoader().loadScript(manifestPath);\n\n    return {\n        version,\n        ...(window as any)[LIBRARY_NAME],\n    };\n}\n"
  },
  {
    "path": "packages/core/src/locale/create-language-service.ts",
    "content": "import { getDefaultLogger } from '../common/log';\n\nimport LanguageConfig from './language-config';\nimport LanguageService from './language-service';\n\n/**\n * Creates an instance of `LanguageService`.\n *\n * @remarks\n * ```js\n * const language = {{{langJson 'optimized_checkout'}}}; // `langJson` is a Handlebars helper provided by BigCommerce's Stencil template engine.\n * const service = createLanguageService(language);\n *\n * console.log(service.translate('address.city_label'));\n * ```\n *\n * @param config - A configuration object.\n * @returns An instance of `LanguageService`.\n */\nexport default function createLanguageService(\n    config: Partial<LanguageConfig> = {},\n): LanguageService {\n    return new LanguageService(config, getDefaultLogger());\n}\n"
  },
  {
    "path": "packages/core/src/locale/index.ts",
    "content": "export { default as createLanguageService } from './create-language-service';\nexport { default as LanguageService } from './language-service';\n"
  },
  {
    "path": "packages/core/src/locale/language-config.ts",
    "content": "export default interface LanguageConfig {\n    defaultTranslations: Translations;\n    defaultLocale?: string;\n    fallbackTranslations?: Translations;\n    fallbackLocale?: string;\n    locale: string;\n    locales: Locales;\n    translations: Translations;\n}\n\nexport interface TransformedLanguageConfig {\n    defaultTranslations: Translations;\n    defaultLocale?: string;\n    fallbackTranslations?: Translations;\n    fallbackLocale?: string;\n    locale: string;\n    locales: Locales;\n    translations: TransformedTranslations;\n}\n\nexport interface Translations {\n    [key: string]: string | Translations;\n}\n\nexport interface TransformedTranslations {\n    [key: string]: string;\n}\n\nexport interface Locales {\n    [key: string]: string;\n}\n"
  },
  {
    "path": "packages/core/src/locale/language-service.spec.ts",
    "content": "import { Logger, NoopLogger } from '../common/log';\n\nimport LanguageConfig from './language-config';\nimport LanguageService from './language-service';\n\ndescribe('LanguageService', () => {\n    let config: Partial<LanguageConfig>;\n    let langService: LanguageService;\n    let logger: Logger;\n\n    beforeEach(() => {\n        config = {\n            locale: 'en',\n            defaultTranslations: {\n                optimized_checkout: {\n                    test: {\n                        customer_heading: 'Customer',\n                        greeting_text: 'Welcome {name}',\n                    },\n                },\n            },\n            translations: {\n                'optimized_checkout.test.item_count_text':\n                    '{count, plural, one{1 Item} other{# Items}}',\n                'optimized_checkout.test.continue_as_guest_action': 'Continue as guest',\n                'optimized_checkout.test.email_label': 'Email Address',\n                'optimized_checkout.test.order_number_text': 'Your order number is {orderNumber}',\n                'optimized_checkout.test.thank_you_text': '<strong>Thank you<strong>',\n                'optimized_checkout.test.link_single_quote_text':\n                    \"Check <a href='/terms-and-conditions/' target='blank'>T&C</a>\",\n                'optimized_checkout.test.escape_text': \"Copy this code '{abc}'\",\n            },\n        };\n\n        logger = new NoopLogger();\n\n        jest.spyOn(logger, 'warn');\n\n        langService = new LanguageService(config, logger);\n    });\n\n    it('has methods that can be destructed', () => {\n        const { translate } = langService;\n\n        expect(() => translate('test.continue_as_guest_action')).not.toThrow(TypeError);\n    });\n\n    describe('#translate()', () => {\n        it('returns translated strings', () => {\n            expect(langService.translate('test.continue_as_guest_action')).toBe(\n                'Continue as guest',\n            );\n            expect(langService.translate('test.order_number_text', { orderNumber: '12345' })).toBe(\n                'Your order number is 12345',\n            );\n        });\n\n        it('returns translated HTML strings', () => {\n            expect(langService.translate('test.thank_you_text')).toBe('<strong>Thank you<strong>');\n        });\n\n        it('returns translated HTML strings with special ICU characters', () => {\n            expect(langService.translate('test.link_single_quote_text')).toBe(\n                \"Check <a href='/terms-and-conditions/' target='blank'>T&C</a>\",\n            );\n        });\n\n        it('returns translated text with escaped characters', () => {\n            expect(langService.translate('test.escape_text')).toBe('Copy this code {abc}');\n        });\n\n        it('returns template string when values are missing for template variables', () => {\n            expect(langService.translate('test.order_number_text')).toBe(\n                'Your order number is {orderNumber}',\n            );\n        });\n\n        it('pluralizes strings using ICU format', () => {\n            expect(langService.translate('test.item_count_text', { count: 0 })).toBe('0 Items');\n            expect(langService.translate('test.item_count_text', { count: 1 })).toBe('1 Item');\n            expect(langService.translate('test.item_count_text', { count: 10 })).toBe('10 Items');\n        });\n\n        it('supports non-English pluralization rules', () => {\n            config = {\n                locale: 'cs',\n                translations: {\n                    'optimized_checkout.test.days_text':\n                        '{count, plural, one{1 den} few{# dny} many{# dne} other{# dní} }',\n                },\n            };\n\n            langService = new LanguageService(config, logger);\n\n            expect(langService.translate('test.days_text', { count: 1 })).toBe('1 den');\n            expect(langService.translate('test.days_text', { count: 2 })).toBe('2 dny');\n            expect(langService.translate('test.days_text', { count: 1.5 })).toBe('1,5 dne');\n            expect(langService.translate('test.days_text', { count: 100 })).toBe('100 dní');\n        });\n\n        it('supports multiple locales', () => {\n            config = {\n                locale: 'fr',\n                locales: {\n                    'optimized_checkout.test.direction_text': 'fr', // French has less ordinals than English\n                    'optimized_checkout.test.position_text': 'en',\n                },\n                translations: {\n                    'optimized_checkout.test.direction_text':\n                        'Prenez la {count, selectordinal, one{#re} other{#e}} à droite',\n                    'optimized_checkout.test.position_text':\n                        '{count, selectordinal, one{#st} two{#nd} few{#rd} other{#th}} position',\n                },\n            };\n\n            langService = new LanguageService(config, logger);\n\n            expect(langService.translate('test.direction_text', { count: 1 })).toBe(\n                'Prenez la 1re à droite',\n            );\n            expect(langService.translate('test.direction_text', { count: 2 })).toBe(\n                'Prenez la 2e à droite',\n            );\n            expect(langService.translate('test.direction_text', { count: 3 })).toBe(\n                'Prenez la 3e à droite',\n            );\n            expect(langService.translate('test.position_text', { count: 1 })).toBe('1st position');\n            expect(langService.translate('test.position_text', { count: 2 })).toBe('2nd position');\n            expect(langService.translate('test.position_text', { count: 3 })).toBe('3rd position');\n        });\n\n        it('should return default translations if user-preferred language file is not available', () => {\n            expect(langService.translate('test.customer_heading')).toBe('Customer');\n            expect(langService.translate('test.greeting_text', { name: 'David' })).toBe(\n                'Welcome David',\n            );\n        });\n\n        it('should return the translation key if both custom and default translation is missing', () => {\n            expect(langService.translate('test.random')).toBe('optimized_checkout.test.random');\n        });\n\n        it('returns custom translations if defined, otherwise use default and then fallback translations', () => {\n            config = {\n                translations: {\n                    optimized_checkout: {\n                        test: {\n                            greeting_text: 'Good morning',\n                        },\n                    },\n                },\n                defaultTranslations: {\n                    optimized_checkout: {\n                        test: {\n                            greeting_text: 'Morning',\n                            hello_text: 'Hello',\n                        },\n                    },\n                },\n                fallbackTranslations: {\n                    optimized_checkout: {\n                        test: {\n                            greeting_text: 'Good day',\n                            hello_text: 'Hi',\n                            goodbye_text: 'Goodbye',\n                        },\n                    },\n                },\n            };\n\n            langService = new LanguageService(config, logger);\n\n            expect(langService.translate('test.greeting_text')).toBe('Good morning');\n            expect(langService.translate('test.hello_text')).toBe('Hello');\n            expect(langService.translate('test.goodbye_text')).toBe('Goodbye');\n        });\n\n        it('formats default and fallback strings based on locale specified', () => {\n            config = {\n                ...config,\n                defaultLocale: 'fr', // French has less ordinals than English\n                defaultTranslations: {\n                    optimized_checkout: {\n                        test: {\n                            direction_text:\n                                'Prenez la {count, selectordinal, one{#re} other{#e}} à droite',\n                        },\n                    },\n                },\n                fallbackLocale: 'en',\n                fallbackTranslations: {\n                    optimized_checkout: {\n                        test: {\n                            position_text:\n                                '{count, selectordinal, one{#st} two{#nd} few{#rd} other{#th}} position',\n                        },\n                    },\n                },\n            };\n\n            langService = new LanguageService(config, logger);\n\n            expect(langService.translate('test.direction_text', { count: 1 })).toBe(\n                'Prenez la 1re à droite',\n            );\n            expect(langService.translate('test.direction_text', { count: 2 })).toBe(\n                'Prenez la 2e à droite',\n            );\n            expect(langService.translate('test.direction_text', { count: 3 })).toBe(\n                'Prenez la 3e à droite',\n            );\n            expect(langService.translate('test.position_text', { count: 1 })).toBe('1st position');\n            expect(langService.translate('test.position_text', { count: 2 })).toBe('2nd position');\n            expect(langService.translate('test.position_text', { count: 3 })).toBe('3rd position');\n        });\n    });\n\n    describe('#getLocale()', () => {\n        it('returns the theme locale if the current theme provides translations for UCO', () => {\n            config = {\n                locale: 'zh-TW',\n                locales: {\n                    'optimized_checkout.test.direction_text': 'zh',\n                    'optimized_checkout.test.position_text': 'en',\n                },\n                translations: {\n                    'optimized_checkout.test.direction_text': 'direction_text',\n                    'optimized_checkout.test.position_text': 'position_text',\n                },\n            };\n\n            langService = new LanguageService(config, logger);\n\n            expect(langService.getLocale()).toBe('zh-TW');\n        });\n\n        it('returns the default locale if the current theme does not provide translations for UCO', () => {\n            config = {\n                locale: 'zh',\n                locales: {\n                    'optimized_checkout.test.direction_text': 'en',\n                    'optimized_checkout.test.position_text': 'en',\n                },\n                translations: {\n                    'optimized_checkout.test.direction_text': 'direction_text',\n                    'optimized_checkout.test.position_text': 'position_text',\n                },\n            };\n\n            langService = new LanguageService(config, logger);\n\n            expect(langService.getLocale()).toBe('en');\n        });\n    });\n\n    describe('#mapKeys()', () => {\n        it('sets up an alias by mapping one language key to another', () => {\n            langService.mapKeys({\n                'mydirective.text': 'test.email_label',\n            });\n\n            const result = langService.translate('mydirective.text');\n            const expected = langService.translate('test.email_label');\n\n            expect(result).toEqual(expected);\n        });\n\n        it('sets up an alias that works with template variables', () => {\n            const name = 'Andrea';\n\n            langService.mapKeys({\n                'mydirective.text': 'test.greeting_text',\n            });\n\n            const result = langService.translate('mydirective.text', { name });\n            const expected = langService.translate('test.greeting_text', { name });\n\n            expect(result).toEqual(expected);\n            expect(result).toContain(name);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/locale/language-service.ts",
    "content": "import { FormatError, IntlMessageFormat } from 'intl-messageformat';\nimport { isObject, union } from 'lodash';\n\nimport { bindDecorator as bind } from '@bigcommerce/checkout-sdk/utility';\n\nimport { Logger } from '../common/log';\n\nimport LanguageConfig, {\n    Locales,\n    TransformedLanguageConfig,\n    TransformedTranslations,\n    Translations,\n} from './language-config';\n\nconst DEFAULT_LOCALE = 'en';\nconst KEY_PREFIX = 'optimized_checkout';\n\n/**\n * Responsible for getting language strings.\n *\n * This object can be used to retrieve language strings that are most\n * appropriate for a given locale.\n *\n * The language strings provided to the object should follow [ICU\n * MessageFormat](http://userguide.icu-project.org/formatparse/messages) syntax.\n */\n@bind\nexport default class LanguageService {\n    private _locale: string;\n    private _locales: Locales;\n    private _translations: TransformedTranslations;\n    private _formatters: { [key: string]: any };\n\n    /**\n     * @internal\n     */\n    constructor(config: Partial<LanguageConfig>, private _logger: Logger) {\n        const { locale, locales, translations } = this._transformConfig(config);\n\n        this._locale = locale;\n        this._locales = locales;\n        this._translations = translations;\n        this._formatters = {};\n    }\n\n    /**\n     * Remaps a set of language strings with a different set of keys.\n     *\n     * ```js\n     * service.mapKeys({\n     *     'new_key': 'existing_key',\n     * });\n     *\n     * console.log(service.translate('new_key'));\n     * ```\n     *\n     * @param maps - The set of language strings.\n     */\n    mapKeys(maps: { [key: string]: string }): void {\n        Object.keys(maps).forEach((key) => {\n            const translationKey = `${KEY_PREFIX}.${maps[key]}`;\n\n            this._translations[`${KEY_PREFIX}.${key}`] = this._translations[translationKey];\n        });\n    }\n\n    /**\n     * Gets the preferred locale of the current customer.\n     *\n     * @returns The preferred locale code.\n     */\n    getLocale(): string {\n        return this._hasTranslations() ? this._locale : DEFAULT_LOCALE;\n    }\n\n    /**\n     * Gets a language string by a key.\n     *\n     * ```js\n     * service.translate('language_key');\n     * ```\n     *\n     * If the language string contains a placeholder, you can replace it by\n     * providing a second argument.\n     *\n     * ```js\n     * service.translate('language_key', { placeholder: 'Hello' });\n     * ```\n     *\n     * @param key - The language key.\n     * @param data - Data for replacing placeholders in the language string.\n     * @returns The translated language string.\n     */\n    translate(key: string, data: TranslationData = {}): string {\n        const prefixedKey = `${KEY_PREFIX}.${key}`;\n\n        if (typeof this._translations[prefixedKey] !== 'string') {\n            this._logger.warn(`Translation key \"${prefixedKey}\" is missing`);\n\n            return prefixedKey;\n        }\n\n        if (!this._formatters[prefixedKey]) {\n            this._formatters[prefixedKey] = new IntlMessageFormat(\n                this._escapeSpecialCharacters(this._translations[prefixedKey] || ''),\n                this._locales[prefixedKey],\n                undefined,\n                { ignoreTag: true },\n            );\n        }\n\n        try {\n            return this._formatters[prefixedKey].format(this._transformData(data));\n        } catch (error) {\n            if (this._isFormatError(error)) {\n                return error.originalMessage ?? '';\n            }\n\n            throw error;\n        }\n    }\n\n    private _transformConfig(config: Partial<LanguageConfig> = {}): TransformedLanguageConfig {\n        const output: TransformedLanguageConfig = {\n            defaultLocale: '',\n            defaultTranslations: {},\n            translations: {},\n            locales: {},\n            locale: config.locale || DEFAULT_LOCALE,\n        };\n\n        const locales = config.locales || {};\n        const translations = this._flattenObject(config.translations || {});\n        const defaultTranslations = this._flattenObject(config.defaultTranslations || {});\n        const fallbackTranslations = this._flattenObject(config.fallbackTranslations || {});\n        const translationKeys = union(\n            Object.keys(fallbackTranslations),\n            Object.keys(defaultTranslations),\n            Object.keys(translations),\n        );\n\n        translationKeys.forEach((key) => {\n            if (translations && translations[key]) {\n                output.translations[key] = translations[key];\n                output.locales[key] = locales[key] || output.locale;\n            } else if (defaultTranslations[key]) {\n                output.translations[key] = defaultTranslations[key];\n                output.locales[key] = config.defaultLocale ?? DEFAULT_LOCALE;\n            } else {\n                output.translations[key] = fallbackTranslations[key];\n                output.locales[key] = config.fallbackLocale ?? DEFAULT_LOCALE;\n            }\n        });\n\n        return output;\n    }\n\n    private _flattenObject(\n        object: Translations,\n        result: TransformedTranslations = {},\n        parentKey = '',\n    ): TransformedTranslations {\n        try {\n            Object.keys(object).forEach((key) => {\n                const value = object[key];\n                const resultKey = parentKey ? `${parentKey}.${key}` : key;\n\n                if (isObject(value)) {\n                    return this._flattenObject(value, result, resultKey);\n                }\n\n                result[resultKey] = value;\n            });\n        } catch (err) {\n            this._logger.warn(`Unable to parse object: ${err}`);\n        }\n\n        return result;\n    }\n\n    private _transformData(data: TranslationData): TranslationData {\n        return Object.keys(data).reduce<TranslationData>((result, key) => {\n            const value = data[key];\n\n            result[key] = value === null || value === undefined ? '' : value;\n\n            return result;\n        }, {});\n    }\n\n    private _hasTranslations(): boolean {\n        return (\n            Object.keys(this._locales)\n                .map((key) => this._locales[key])\n                .filter((code) => code.split('-')[0] === this._locale.split('-')[0]).length > 0\n        );\n    }\n\n    private _isFormatError(error: unknown): error is FormatError {\n        return typeof error === 'object' && error !== null && 'originalMessage' in error;\n    }\n\n    private _escapeSpecialCharacters(message: string) {\n        return message.replace(/(\\w+)='([^']*)'/g, \"$1=''$2''\");\n    }\n}\n\nexport interface TranslationData {\n    [key: string]: string | number;\n}\n"
  },
  {
    "path": "packages/core/src/order/errors/index.ts",
    "content": "export { default as OrderFinalizationNotRequiredError } from './order-finalization-not-required-error';\nexport { default as OrderFinalizationNotCompletedError } from './order-finalization-not-completed-error';\nexport { default as OrderTaxProviderUnavailableError } from './order-tax-provider-unavailable-error';\nexport { default as MissingShippingMethodError } from './missing-shipping-method-error';\n"
  },
  {
    "path": "packages/core/src/order/errors/invalid-shipping-address-error.spec.ts",
    "content": "import InvalidShippingAddressError from './invalid-shipping-address-error';\n\ndescribe('InvalidShippingAddressError', () => {\n    it('returns error name', () => {\n        const error = new InvalidShippingAddressError('error');\n\n        expect(error.name).toBe('InvalidShippingAddressError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/order/errors/invalid-shipping-address-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\nexport default class InvalidShippingAddressError extends StandardError {\n    constructor(message: string) {\n        super(message);\n\n        this.name = 'InvalidShippingAddressError';\n        this.type = 'invalid_shipping_address';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/order/errors/missing-shipping-method-error.spec.ts",
    "content": "import MissingShippingMethodError from './missing-shipping-method-error';\n\ndescribe('MissingShippingMethodError', () => {\n    it('returns error name', () => {\n        const error = new MissingShippingMethodError('error');\n\n        expect(error.name).toBe('MissingShippingMethodError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/order/errors/missing-shipping-method-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\nexport default class MissingShippingMethodError extends StandardError {\n    constructor(message: string) {\n        super(message);\n\n        this.name = 'MissingShippingMethodError';\n        this.type = 'missing_shipping_method';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/order/errors/order-finalization-not-completed-error.spec.ts",
    "content": "import OrderFinalizationNotCompletedError from './order-finalization-not-completed-error';\n\ndescribe('OrderFinalizationNotCompletedError', () => {\n    let error = new OrderFinalizationNotCompletedError();\n\n    it('returns error name', () => {\n        expect(error.name).toBe('OrderFinalizationNotCompletedError');\n    });\n\n    it('returns error type', () => {\n        expect(error.type).toBe('order_finalization_not_completed');\n    });\n\n    it('returns default message', () => {\n        expect(error.message).toBe('The current order could not be finalized successfully');\n    });\n\n    it('returns custom message', () => {\n        error = new OrderFinalizationNotCompletedError('Custom error message');\n\n        expect(error.message).toBe('Custom error message');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/order/errors/order-finalization-not-completed-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if the order finalization request\n * was not completed successfully.\n */\nexport default class OrderFinalizationNotCompletedError extends StandardError {\n    constructor(message?: string) {\n        super(message || 'The current order could not be finalized successfully');\n\n        this.name = 'OrderFinalizationNotCompletedError';\n        this.type = 'order_finalization_not_completed';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/order/errors/order-finalization-not-required-error.spec.ts",
    "content": "import OrderFinalizationNotRequiredError from './order-finalization-not-required-error';\n\ndescribe('OrderFinalizationNotRequiredError', () => {\n    it('returns error name', () => {\n        const error = new OrderFinalizationNotRequiredError();\n\n        expect(error.name).toBe('OrderFinalizationNotRequiredError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/order/errors/order-finalization-not-required-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\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"
  },
  {
    "path": "packages/core/src/order/errors/order-tax-provider-unavailable-error.spec.ts",
    "content": "import OrderTaxProviderUnavailableError from './order-tax-provider-unavailable-error';\n\ndescribe('OrderTaxProviderUnavailableError', () => {\n    it('returns error name', () => {\n        const error = new OrderTaxProviderUnavailableError();\n\n        expect(error.name).toBe('OrderTaxProviderUnavailableError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/order/errors/order-tax-provider-unavailable-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * Checkout prevents consumers from placing their orders when a merchant wishes\n * to be able to block transactions if the automated tax provider cannot be reached.\n */\nexport default class OrderTaxProviderUnavailableError extends StandardError {\n    constructor(message?: string) {\n        super(message || 'The tax provider is unavailable.');\n\n        this.name = 'OrderTaxProviderUnavailableError';\n        this.type = 'tax_provider_unavailable';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/order/index.ts",
    "content": "export * from './internal-order-responses';\nexport * from './order-actions';\n\nexport { default as Order, GatewayOrderPayment, OrderMeta } from './order';\nexport {\n    default as InternalOrder,\n    InternalIncompleteOrder,\n    InternalOrderPayment,\n} from './internal-order';\nexport { default as InternalOrderRequestBody } from './internal-order-request-body';\n\nexport { default as OrderActionCreator } from './order-action-creator';\nexport { default as orderReducer } from './order-reducer';\nexport {\n    default as OrderRequestBody,\n    OrderPaymentRequestBody,\n    OrderPaymentInstrument,\n} from './order-request-body';\nexport { default as OrderRequestSender } from './order-request-sender';\nexport {\n    default as OrderSelector,\n    OrderSelectorFactory,\n    createOrderSelectorFactory,\n} from './order-selector';\nexport { default as OrderState } from './order-state';\n\nexport { default as mapToInternalOrder } from './map-to-internal-order';\nexport { getAwaitingOrder } from './internal-orders.mock';\n"
  },
  {
    "path": "packages/core/src/order/internal-order-request-body.ts",
    "content": "import { PaymentInstrument } from '../payment';\n\nexport default interface InternalOrderRequestBody {\n    cartId: string;\n    payment?: InternalOrderPaymentRequestBody;\n    useStoreCredit?: boolean;\n    customerMessage?: string;\n    externalSource?: string;\n    shouldSaveInstrument?: boolean;\n}\n\nexport interface InternalOrderPaymentRequestBody {\n    name: string;\n    gateway?: string;\n    paymentData?: PaymentInstrument;\n}\n"
  },
  {
    "path": "packages/core/src/order/internal-order-responses.ts",
    "content": "import { InternalResponseBody } from '../common/http-request';\nimport { InternalCustomer } from '../customer';\n\nimport InternalOrder from './internal-order';\n\nexport type InternalOrderResponseBody = InternalResponseBody<\n    InternalOrderResponseData,\n    InternalOrderResponseMeta\n>;\n\nexport interface InternalOrderResponseData {\n    customer: InternalCustomer;\n    order: InternalOrder;\n}\n\nexport interface InternalOrderResponseMeta {\n    deviceFingerprint?: string;\n}\n"
  },
  {
    "path": "packages/core/src/order/internal-order.ts",
    "content": "import { InternalLineItem } from '../cart';\nimport { InternalCoupon, InternalGiftCertificate } from '../coupon';\nimport { DiscountNotification } from '../discount';\n\nexport default interface InternalOrder {\n    id: number;\n    orderId: number;\n    items: InternalLineItem[];\n    currency: string;\n    customerCanBeCreated: boolean;\n    subtotal: {\n        amount: number;\n        integerAmount: number;\n    };\n    coupon: {\n        discountedAmount: number;\n        coupons: InternalCoupon[];\n    };\n    discount: {\n        amount: number;\n        integerAmount: number;\n    };\n    discountNotifications: DiscountNotification[];\n    giftCertificate: InternalGiftCertificateList;\n    shipping: {\n        amount: number;\n        integerAmount: number;\n        amountBeforeDiscount: number;\n        integerAmountBeforeDiscount: number;\n    };\n    status: string;\n    storeCredit: {\n        amount: number;\n    };\n    taxes: Array<{ name: string; amount: number }>;\n    taxTotal: {\n        amount: number;\n        integerAmount: number;\n    };\n    handling: {\n        amount: number;\n        integerAmount: number;\n    };\n    grandTotal: {\n        amount: number;\n        integerAmount: number;\n    };\n    token?: string;\n    payment: InternalOrderPayment;\n    socialData?: { [itemId: string]: InternalSocialDataList };\n    hasDigitalItems: boolean;\n    isDownloadable: boolean;\n    isComplete: boolean;\n    callbackUrl?: string;\n}\n\nexport interface InternalIncompleteOrder {\n    isComplete: false;\n    orderId: null;\n    payment: InternalOrderPayment;\n    status?: string;\n    hasDigitalItems?: boolean;\n    isDownloadable?: boolean;\n}\n\nexport interface InternalGiftCertificateList {\n    totalDiscountedAmount: number;\n    appliedGiftCertificates: { [code: string]: InternalGiftCertificate };\n}\n\nexport interface InternalOrderPayment {\n    id?: string;\n    gateway?: string;\n    redirectUrl?: string;\n    returnUrl?: string;\n    status?: string;\n    helpText?: string;\n}\n\nexport interface InternalOrderMeta {\n    deviceFingerprint?: string;\n}\n\nexport interface InternalSocialDataItem {\n    name: string;\n    description: string;\n    image: string;\n    url: string;\n    shareText: string;\n    sharingLink: string;\n    channelName: string;\n    channelCode: string;\n}\n\nexport interface InternalSocialDataList {\n    [key: string]: InternalSocialDataItem;\n}\n"
  },
  {
    "path": "packages/core/src/order/internal-orders.mock.ts",
    "content": "import { getGuestCustomer } from '../customer/internal-customers.mock';\nimport { getPayment } from '../payment/payments.mock';\n\nimport InternalOrder, { InternalIncompleteOrder } from './internal-order';\nimport InternalOrderRequestBody from './internal-order-request-body';\nimport { InternalOrderResponseBody } from './internal-order-responses';\nimport OrderRequestBody, { OrderPaymentRequestBody } from './order-request-body';\n\nexport function getOrderRequestBody(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: getPayment() as OrderPaymentRequestBody,\n    };\n}\n\nexport function getInternalOrderRequestBody(): InternalOrderRequestBody {\n    const payment = getPayment();\n\n    return {\n        cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n        customerMessage: 'comment',\n        externalSource: 'Partner',\n        useStoreCredit: false,\n        payment: {\n            name: payment.methodId,\n            gateway: payment.gatewayId,\n            paymentData: payment.paymentData,\n        },\n    };\n}\n\nexport function getIncompleteOrder(): InternalIncompleteOrder {\n    return {\n        orderId: null,\n        payment: {},\n        status: 'ORDER_STATUS_INCOMPLETE',\n        hasDigitalItems: false,\n        isDownloadable: false,\n        isComplete: false,\n    };\n}\n\nexport function getIncompleteOrderState() {\n    return {\n        data: getIncompleteOrder(),\n        errors: {},\n        meta: {},\n        statuses: {},\n    };\n}\n\nexport function getAwaitingOrder(): InternalOrder {\n    const order = getCompleteOrder();\n\n    return {\n        ...order,\n        callbackUrl:\n            'https://internalapi-999425555.mybigcommerce.com/internalapi/v1/checkout/order/505/payment',\n        payment: {\n            ...order.payment,\n            returnUrl: 'http://returnurl.bigcommerce.com/',\n        },\n        token: '77d92d6e1b1b7d1017aa84ad0a9fe6ae',\n    };\n}\n\nexport function getCompleteOrder(): InternalOrder {\n    return {\n        ...getIncompleteOrder(),\n        id: 295,\n        items: [\n            {\n                id: 103,\n                type: 'ItemPhysicalEntity',\n                name: 'Canvas Laundry Cart',\n                imageUrl: '/images/canvas-laundry-cart.jpg',\n                quantity: 1,\n                brand: 'OFS',\n                sku: 'CLC',\n                amount: 200,\n                discount: 10,\n                amountAfterDiscount: 190,\n                integerAmount: 20000,\n                integerDiscount: 1000,\n                integerAmountAfterDiscount: 19000,\n                integerUnitPrice: 20000,\n                integerUnitPriceAfterDiscount: 19000,\n                variantId: 71,\n                addedByPromotion: false,\n                attributes: [\n                    {\n                        name: 'n',\n                        value: 'v',\n                    },\n                ],\n                productId: 103,\n                categoryNames: ['Cat 1'],\n            },\n            {\n                id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                type: 'ItemGiftCertificateEntity',\n                name: '$100 Gift Certificate',\n                sender: {\n                    name: 'pablo',\n                    email: 'pa@blo.com',\n                },\n                recipient: {\n                    name: 'luis',\n                    email: 'lu@is.com',\n                },\n                imageUrl: '',\n                quantity: 1,\n                amount: 100,\n                discount: 0,\n                amountAfterDiscount: 100,\n                attributes: [],\n                integerAmount: 10000,\n                integerDiscount: 0,\n                integerAmountAfterDiscount: 10000,\n                integerUnitPrice: 10000,\n                integerUnitPriceAfterDiscount: 10000,\n                variantId: null,\n            },\n        ],\n        currency: 'USD',\n        subtotal: {\n            amount: 200,\n            integerAmount: 20000,\n        },\n        coupon: {\n            discountedAmount: 10,\n            coupons: [\n                {\n                    code: 'savebig2015',\n                    discount: '20% off each item',\n                    discountType: 1,\n                },\n                {\n                    code: '279F507D817E3E7',\n                    discount: '$5.00 off the shipping total',\n                    discountType: 3,\n                },\n            ],\n        },\n        discount: {\n            amount: 10,\n            integerAmount: 1000,\n        },\n        discountNotifications: [],\n        giftCertificate: {\n            totalDiscountedAmount: 7,\n            appliedGiftCertificates: {\n                gc: {\n                    code: 'gc',\n                    discountedAmount: 7,\n                    remainingBalance: 3,\n                    giftCertificate: {\n                        code: 'gc',\n                        balance: 10,\n                        purchaseDate: '',\n                    },\n                },\n            },\n        },\n        shipping: {\n            amount: 15,\n            integerAmount: 1500,\n            amountBeforeDiscount: 20,\n            integerAmountBeforeDiscount: 2000,\n        },\n        storeCredit: {\n            amount: 0,\n        },\n        taxes: [\n            {\n                name: 'Tax',\n                amount: 3,\n            },\n        ],\n        taxTotal: {\n            amount: 3,\n            integerAmount: 300,\n        },\n        handling: {\n            amount: 8,\n            integerAmount: 800,\n        },\n        grandTotal: {\n            amount: 190,\n            integerAmount: 19000,\n        },\n        orderId: 295,\n        payment: {\n            id: 'authorizenet',\n            status: 'PAYMENT_STATUS_FINALIZE',\n            helpText: '%%OrderID%% text %%OrderID%%',\n        },\n        isDownloadable: false,\n        hasDigitalItems: false,\n        customerCanBeCreated: true,\n        isComplete: true,\n        status: 'ORDER_STATUS_AWAITING_FULFILLMENT',\n        /* eslint no-useless-escape: \"off\" */\n        socialData: {\n            5: {\n                fb: {\n                    name: 'Canvas Laundry Cart',\n                    description: 'Canvas Laundry Cart',\n                    image: '/images/canvas-laundry-cart.jpg',\n                    url: 'http://www.facebook.com/sharer/sharer.php?s=100&p[title]=I+just+bought+%27%5BSample%5D+Sodling%2C+black+leather+duffle+bag%27+on+s1446156961&p[summary]=How+to+write+product+descriptions+that+sellOne+of+the+best+things+you+can+do+to+make+your+store+successful+is+invest+some+time+in+writing+great+product+descriptions.+You+want+to+provide+detailed+ye...&p[url]=http%3A%2F%2Fs1446156961.bcapp.dev%2Fsample-sodling-black-leather-duffle-bag%2F&p[images][0]=http%3A%2F%2Fcdn.bcapp.dev%2Fbcapp%2Fuvn6bltx%2Fproducts%2F68%2Fimages%2F253%2FHERO_mensstyle_034__54484.1348466546.190.285.jpg%3Fc%3D1',\n                    shareText:\n                        \"I just bought '[Sample] Sodling, black leather duffle bag' on s1446156961\",\n                    sharingLink:\n                        'http://www.facebook.com/sharer/sharer.php?s=100&p[title]=I+just+bought+%27%5BSample%5D+Sodling%2C+black+leather+duffle+bag%27+on+s1446156961&p[summary]=How+to+write+product+descriptions+that+sellOne+of+the+best+things+you+can+do+to+make+your+store+successful+is+invest+some+time+in+writing+great+product+descriptions.+You+want+to+provide+detailed+ye...&p[url]=http%3A%2F%2Fs1446156961.bcapp.dev%2Fsample-sodling-black-leather-duffle-bag%2F&p[images][0]=http%3A%2F%2Fcdn.bcapp.dev%2Fbcapp%2Fuvn6bltx%2Fproducts%2F68%2Fimages%2F253%2FHERO_mensstyle_034__54484.1348466546.190.285.jpg%3Fc%3D1',\n                    channelName: 'Facebook',\n                    channelCode: 'fb',\n                },\n                tw: {\n                    name: 'Canvas Laundry Cart',\n                    description: 'Canvas Laundry Cart',\n                    image: '/images/canvas-laundry-cart.jpg',\n                    url: 'https://twitter.com/intent/tweet?url=http%3A%2F%2Fs1446156961.bcapp.dev%2Fsample-sodling-black-leather-duffle-bag%2F&text=I+just+bought+%27%5BSample%5D+Sodling%2C+black+leather+duffle+bag%27+on+s1446156961',\n                    shareText:\n                        \"I just bought '[Sample] Sodling, black leather duffle bag' on s1446156961\",\n                    sharingLink:\n                        'https://twitter.com/intent/tweet?url=http%3A%2F%2Fs1446156961.bcapp.dev%2Fsample-sodling-black-leather-duffle-bag%2F&text=I+just+bought+%27%5BSample%5D+Sodling%2C+black+leather+duffle+bag%27+on+s1446156961',\n                    channelName: 'Twitter',\n                    channelCode: 'tw',\n                },\n                gp: {\n                    name: 'Canvas Laundry Cart',\n                    description: 'Canvas Laundry Cart',\n                    image: '/images/canvas-laundry-cart.jpg',\n                    url: 'https://plus.google.com/share?url=http://s1446156961.bcapp.dev/sample-sodling-black-leather-duffle-bag/',\n                    shareText:\n                        \"I just bought '[Sample] Sodling, black leather duffle bag' on s1446156961\",\n                    sharingLink:\n                        'https://plus.google.com/share?url=http://s1446156961.bcapp.dev/sample-sodling-black-leather-duffle-bag/',\n                    channelName: 'Google Plus',\n                    channelCode: 'gp',\n                },\n            },\n        },\n    };\n}\n\nexport function getCompleteOrderResponseBody(): InternalOrderResponseBody {\n    return {\n        meta: {},\n        data: {\n            customer: getGuestCustomer(),\n            order: getCompleteOrder(),\n        },\n    };\n}\n\nexport function getSubmitOrderResponseHeaders(): { token: string } {\n    return {\n        token: 'auth-token',\n    };\n}\n\nexport function getSubmitOrderResponseBody(): InternalOrderResponseBody {\n    return {\n        data: {\n            customer: getGuestCustomer(),\n            order: {\n                ...getSubmittedOrder(),\n            },\n        },\n        meta: {\n            deviceFingerprint: 'a084205e-1b1f-487d-9087-e072d20747e5',\n        },\n    };\n}\n\nexport function getSubmittedOrder(): InternalOrder {\n    const order = getCompleteOrder();\n\n    return {\n        ...order,\n        payment: {\n            ...order.payment,\n            status: '',\n        },\n    };\n}\n"
  },
  {
    "path": "packages/core/src/order/line-items.mock.ts",
    "content": "/* eslint no-useless-escape: \"off\" */\nimport { PhysicalItem } from '../cart';\nimport { getPhysicalItem as getCartPhysicalItem } from '../cart/line-items.mock';\n\nexport function getPhysicalItem(): PhysicalItem {\n    return {\n        ...getCartPhysicalItem(),\n        socialMedia: [\n            {\n                code: 'fb',\n                channel: 'Facebook',\n                text: \"I just bought '[Sample] Sodling, black leather duffle bag' on s1446156961\",\n                link: 'http://www.facebook.com/sharer/sharer.php?s=100&p[title]=I+just+bought+%27%5BSample%5D+Sodling%2C+black+leather+duffle+bag%27+on+s1446156961&p[summary]=How+to+write+product+descriptions+that+sellOne+of+the+best+things+you+can+do+to+make+your+store+successful+is+invest+some+time+in+writing+great+product+descriptions.+You+want+to+provide+detailed+ye...&p[url]=http%3A%2F%2Fs1446156961.bcapp.dev%2Fsample-sodling-black-leather-duffle-bag%2F&p[images][0]=http%3A%2F%2Fcdn.bcapp.dev%2Fbcapp%2Fuvn6bltx%2Fproducts%2F68%2Fimages%2F253%2FHERO_mensstyle_034__54484.1348466546.190.285.jpg%3Fc%3D1',\n            },\n            {\n                code: 'tw',\n                channel: 'Twitter',\n                text: \"I just bought '[Sample] Sodling, black leather duffle bag' on s1446156961\",\n                link: 'https://twitter.com/intent/tweet?url=http%3A%2F%2Fs1446156961.bcapp.dev%2Fsample-sodling-black-leather-duffle-bag%2F&text=I+just+bought+%27%5BSample%5D+Sodling%2C+black+leather+duffle+bag%27+on+s1446156961',\n            },\n            {\n                code: 'gp',\n                channel: 'Google Plus',\n                text: \"I just bought '[Sample] Sodling, black leather duffle bag' on s1446156961\",\n                link: 'https://plus.google.com/share?url=http://s1446156961.bcapp.dev/sample-sodling-black-leather-duffle-bag/',\n            },\n        ],\n        id: 5,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/order/map-to-internal-order.spec.ts",
    "content": "import { getCheckoutWithPayments } from '../checkout/checkouts.mock';\n\nimport { getAwaitingOrder } from './internal-orders.mock';\nimport mapToInternalOrder, { mapToInternalIncompleteOrder } from './map-to-internal-order';\nimport { getOrder, getOrderMeta } from './orders.mock';\n\ndescribe('mapToInternalOrder()', () => {\n    it('maps to internal line items', () => {\n        expect(mapToInternalOrder(getOrder(), getOrderMeta())).toEqual(getAwaitingOrder());\n    });\n});\n\ndescribe('mapToInternalIncompleteOrder()', () => {\n    it('maps to internal incomplete order', () => {\n        expect(mapToInternalIncompleteOrder(getCheckoutWithPayments())).toEqual({\n            isComplete: false,\n            orderId: null,\n            payment: {\n                id: 'authorizenet',\n                status: 'PAYMENT_STATUS_ACKNOWLEDGE',\n            },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/order/map-to-internal-order.ts",
    "content": "import { filter, find, keyBy, reduce } from 'lodash';\n\nimport { AmountTransformer } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { LineItem, mapToInternalLineItems } from '../cart';\nimport { Checkout } from '../checkout';\nimport { mapToInternalCoupon } from '../coupon';\nimport { HOSTED } from '../payment';\n\nimport InternalOrder, {\n    InternalGiftCertificateList,\n    InternalIncompleteOrder,\n    InternalOrderPayment,\n    InternalSocialDataList,\n} from './internal-order';\nimport Order, {\n    GatewayOrderPayment,\n    GiftCertificateOrderPayment,\n    OrderPayment,\n    OrderPayments,\n} from './order';\nimport { OrderMetaState } from './order-state';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalOrder(\n    order: Order,\n    orderMeta: OrderMetaState = {},\n): InternalOrder {\n    const decimalPlaces = order.currency.decimalPlaces;\n    const amountTransformer = new AmountTransformer(decimalPlaces);\n\n    return {\n        id: order.orderId,\n        items: mapToInternalLineItems(order.lineItems, order.currency.decimalPlaces, 'productId'),\n        orderId: order.orderId,\n        currency: order.currency.code,\n        customerCanBeCreated: order.customerCanBeCreated,\n        payment: mapToInternalOrderPayment(order.payments, orderMeta.payment),\n        subtotal: {\n            amount: order.baseAmount,\n            integerAmount: amountTransformer.toInteger(order.baseAmount),\n        },\n        coupon: {\n            discountedAmount: reduce(\n                order.coupons,\n                (sum, coupon) => {\n                    return sum + coupon.discountedAmount;\n                },\n                0,\n            ),\n            coupons: order.coupons.map(mapToInternalCoupon),\n        },\n        discount: {\n            amount: order.discountAmount,\n            integerAmount: amountTransformer.toInteger(order.discountAmount),\n        },\n        token: orderMeta.orderToken,\n        callbackUrl: orderMeta.callbackUrl,\n        discountNotifications: [],\n        giftCertificate: mapToGiftCertificates(order.payments),\n        socialData: mapToInternalSocialDataList(order),\n        status: order.status,\n        hasDigitalItems: order.hasDigitalItems,\n        isDownloadable: order.isDownloadable,\n        isComplete: order.isComplete,\n        shipping: {\n            amount: order.shippingCostTotal,\n            integerAmount: amountTransformer.toInteger(order.shippingCostTotal),\n            amountBeforeDiscount: order.shippingCostBeforeDiscount,\n            integerAmountBeforeDiscount: amountTransformer.toInteger(\n                order.shippingCostBeforeDiscount,\n            ),\n        },\n        storeCredit: {\n            amount: mapToStoreCredit(order.payments),\n        },\n        taxes: order.taxes,\n        taxTotal: {\n            amount: order.taxTotal,\n            integerAmount: amountTransformer.toInteger(order.taxTotal),\n        },\n        handling: {\n            amount: order.handlingCostTotal,\n            integerAmount: amountTransformer.toInteger(order.handlingCostTotal),\n        },\n        grandTotal: {\n            amount: order.orderAmount,\n            integerAmount: order.orderAmountAsInteger,\n        },\n    };\n}\n\nexport function mapToInternalIncompleteOrder(checkout: Checkout): InternalIncompleteOrder {\n    const payment = find(checkout.payments, { providerType: HOSTED });\n\n    return {\n        orderId: null,\n        isComplete: false,\n        payment: !payment\n            ? {}\n            : {\n                  id: payment.providerId,\n                  gateway: payment.gatewayId,\n                  status: mapToInternalPaymentStatus(payment.detail.step),\n              },\n    };\n}\n\nfunction mapToInternalPaymentStatus(status: string): string {\n    return `PAYMENT_STATUS_${status}`;\n}\n\nfunction mapToStoreCredit(payments?: OrderPayments): number {\n    const item = find(payments, { providerId: 'storecredit' });\n\n    return item ? item.amount : 0;\n}\n\nfunction mapToGiftCertificates(payments?: OrderPayments): InternalGiftCertificateList {\n    const items = filter(payments, {\n        providerId: 'giftcertificate',\n    }) as GiftCertificateOrderPayment[];\n\n    return {\n        totalDiscountedAmount: reduce(items, (sum, item) => item.amount + sum, 0),\n        appliedGiftCertificates: keyBy(\n            items.map((item) => ({\n                code: item.detail.code,\n                discountedAmount: item.amount,\n                remainingBalance: item.detail.remaining,\n                giftCertificate: {\n                    balance: item.amount + item.detail.remaining,\n                    code: item.detail.code,\n                    purchaseDate: '',\n                },\n            })),\n            'code',\n        ),\n    };\n}\n\nfunction mapToInternalOrderPayment(\n    payments?: OrderPayments,\n    payment: InternalOrderPayment = {},\n): InternalOrderPayment {\n    const item = find(payments, isDefaultOrderPayment) as GatewayOrderPayment;\n\n    if (!item) {\n        return {};\n    }\n\n    return {\n        id: item.providerId,\n        status: mapToInternalPaymentStatus(item.detail.step),\n        helpText: item.detail.instructions,\n        returnUrl: payment.returnUrl,\n    };\n}\n\nfunction isDefaultOrderPayment(payment: OrderPayment): payment is GatewayOrderPayment {\n    return payment.providerId !== 'giftcertificate' && payment.providerId !== 'storecredit';\n}\n\nfunction mapToInternalSocialDataList(\n    order: Order,\n): { [itemId: string]: InternalSocialDataList } | undefined {\n    const socialDataObject: { [itemId: string]: InternalSocialDataList } = {};\n    const items = [...order.lineItems.physicalItems, ...order.lineItems.digitalItems];\n\n    items.forEach((item) => {\n        socialDataObject[item.id] = mapToInternalSocialData(item);\n    });\n\n    return socialDataObject;\n}\n\nfunction mapToInternalSocialData(lineItem: LineItem): InternalSocialDataList {\n    const codes = ['fb', 'tw', 'gp'];\n\n    return codes.reduce<InternalSocialDataList>((socialData, code) => {\n        const item =\n            lineItem.socialMedia && find(lineItem.socialMedia, (item) => item.code === code);\n\n        if (!item) {\n            return socialData;\n        }\n\n        socialData[code] = {\n            name: lineItem.name,\n            description: lineItem.name,\n            image: lineItem.imageUrl,\n            url: item.link,\n            shareText: item.text,\n            sharingLink: item.link,\n            channelName: item.channel,\n            channelCode: item.code,\n        };\n\n        return socialData;\n    }, {});\n}\n"
  },
  {
    "path": "packages/core/src/order/order-action-creator.spec.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\nimport { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { merge, omit } from 'lodash';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { ErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getCart, getCartState } from '../cart/carts.mock';\nimport {\n    CheckoutRequestSender,\n    CheckoutStore,\n    CheckoutStoreState,\n    CheckoutValidator,\n    createCheckoutStore,\n} from '../checkout';\nimport { getCheckout, getCheckoutState, getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { MissingDataError } from '../common/error/errors';\nimport { InternalResponseBody } from '../common/http-request';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\nimport { getConfigState } from '../config/configs.mock';\nimport { SpamProtectionNotCompletedError } from '../spam-protection/errors';\n\nimport { InternalOrderResponseBody } from './internal-order-responses';\nimport {\n    getCompleteOrderResponseBody,\n    getInternalOrderRequestBody,\n    getOrderRequestBody,\n    getSubmitOrderResponseBody,\n    getSubmitOrderResponseHeaders,\n} from './internal-orders.mock';\nimport Order from './order';\nimport OrderActionCreator from './order-action-creator';\nimport { OrderActionType } from './order-actions';\nimport OrderRequestSender from './order-request-sender';\nimport { getOrder, getOrderState } from './orders.mock';\n\ndescribe('OrderActionCreator', () => {\n    let orderRequestSender: OrderRequestSender;\n    let checkoutValidator: CheckoutValidator;\n    let checkoutRequestSender: CheckoutRequestSender;\n    let orderActionCreator: OrderActionCreator;\n    let state: CheckoutStoreState;\n    let store: CheckoutStore;\n\n    beforeEach(() => {\n        state = {\n            ...getCheckoutStoreState(),\n            order: {\n                errors: {},\n                meta: {},\n                statuses: {},\n            },\n        };\n        store = createCheckoutStore(state);\n\n        jest.spyOn(store, 'dispatch');\n\n        orderRequestSender = new OrderRequestSender(createRequestSender());\n        checkoutRequestSender = new CheckoutRequestSender(createRequestSender());\n        checkoutValidator = new CheckoutValidator(checkoutRequestSender);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(orderRequestSender, 'loadOrder').mockReturnValue({});\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(orderRequestSender, 'submitOrder').mockReturnValue({});\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(orderRequestSender, 'finalizeOrder').mockReturnValue({});\n\n        jest.spyOn(checkoutValidator, 'validate').mockReturnValue(Promise.resolve());\n\n        orderActionCreator = new OrderActionCreator(orderRequestSender, checkoutValidator);\n    });\n\n    describe('#loadOrder()', () => {\n        beforeEach(() => {\n            jest.spyOn(orderRequestSender, 'loadOrder').mockReturnValue(\n                Promise.resolve(getResponse(getOrder())),\n            );\n        });\n\n        it('emits actions if able to load order', async () => {\n            const actions = await orderActionCreator.loadOrder(295).pipe(toArray()).toPromise();\n\n            expect(actions).toEqual([\n                { type: OrderActionType.LoadOrderRequested },\n                { type: OrderActionType.LoadOrderSucceeded, payload: getOrder() },\n            ]);\n        });\n\n        it('emits actions if unable to load order', async () => {\n            jest.spyOn(orderRequestSender, 'loadOrder').mockReturnValue(\n                Promise.reject(getErrorResponse()),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await orderActionCreator\n                .loadOrder(0)\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: OrderActionType.LoadOrderRequested },\n                { type: OrderActionType.LoadOrderFailed, payload: getErrorResponse(), error: true },\n            ]);\n        });\n    });\n\n    describe('#loadCurrentOrder()', () => {\n        beforeEach(() => {\n            jest.spyOn(orderRequestSender, 'loadOrder').mockReturnValue(\n                Promise.resolve(getResponse(getOrder())),\n            );\n        });\n\n        it('loads order by using order id from order object', async () => {\n            await from(orderActionCreator.loadCurrentOrder()(store)).toPromise();\n\n            expect(orderRequestSender.loadOrder).toHaveBeenCalledWith(295, undefined);\n        });\n\n        it('loads order by using order id from checkout object if order object is unavailable', async () => {\n            store = createCheckoutStore({\n                ...state,\n                checkout: undefined,\n                order: getOrderState(),\n            });\n\n            await from(orderActionCreator.loadCurrentOrder()(store)).toPromise();\n\n            expect(orderRequestSender.loadOrder).toHaveBeenCalledWith(295, undefined);\n        });\n\n        it('throws error if there is no existing order id', async () => {\n            store = createCheckoutStore();\n\n            try {\n                await from(orderActionCreator.loadCurrentOrder()(store)).toPromise();\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads order only when action is dispatched', async () => {\n            const action = orderActionCreator.loadCurrentOrder()(store);\n\n            expect(orderRequestSender.loadOrder).not.toHaveBeenCalled();\n\n            await store.dispatch(action);\n\n            expect(orderRequestSender.loadOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#loadOrderPayments()', () => {\n        beforeEach(() => {\n            jest.spyOn(orderRequestSender, 'loadOrder').mockReturnValue(\n                Promise.resolve(getResponse(getOrder())),\n            );\n        });\n\n        it('emits actions if able to load order', async () => {\n            const actions = await orderActionCreator\n                .loadOrderPayments(295)\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: OrderActionType.LoadOrderPaymentsRequested },\n                { type: OrderActionType.LoadOrderPaymentsSucceeded, payload: getOrder() },\n            ]);\n        });\n\n        it('emits actions if unable to load order', async () => {\n            jest.spyOn(orderRequestSender, 'loadOrder').mockReturnValue(\n                Promise.reject(getErrorResponse()),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await orderActionCreator\n                .loadOrderPayments(295)\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: OrderActionType.LoadOrderPaymentsRequested },\n                {\n                    type: OrderActionType.LoadOrderPaymentsFailed,\n                    payload: getErrorResponse(),\n                    error: true,\n                },\n            ]);\n        });\n\n        it('loads order by using order id from order object', async () => {\n            await orderActionCreator.loadOrderPayments(295).toPromise();\n\n            expect(orderRequestSender.loadOrder).toHaveBeenCalledWith(295, undefined);\n        });\n\n        it('loads order by using order id from checkout object if order object is unavailable', async () => {\n            store = createCheckoutStore({\n                ...state,\n                checkout: undefined,\n                order: getOrderState(),\n            });\n\n            await orderActionCreator.loadOrderPayments(295).toPromise();\n\n            expect(orderRequestSender.loadOrder).toHaveBeenCalledWith(295, undefined);\n        });\n\n        it('loads order only when action is dispatched', async () => {\n            const action = orderActionCreator.loadOrderPayments(295);\n\n            expect(orderRequestSender.loadOrder).not.toHaveBeenCalled();\n\n            await store.dispatch(action);\n\n            expect(orderRequestSender.loadOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#submitOrder()', () => {\n        let errorResponse: Response<ErrorResponseBody>;\n        let loadResponse: Response<Order>;\n        let submitResponse: Response<InternalResponseBody>;\n\n        beforeEach(() => {\n            loadResponse = getResponse(getOrder());\n            submitResponse = getResponse(\n                getSubmitOrderResponseBody(),\n                getSubmitOrderResponseHeaders(),\n            );\n            errorResponse = getErrorResponse();\n\n            jest.spyOn(checkoutRequestSender, 'loadCheckout').mockReturnValue(\n                Promise.resolve(getResponse(getCheckout())),\n            );\n\n            jest.spyOn(orderRequestSender, 'loadOrder').mockReturnValue(\n                Promise.resolve(loadResponse),\n            );\n\n            jest.spyOn(orderRequestSender, 'submitOrder').mockReturnValue(\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                Promise.resolve(submitResponse),\n            );\n        });\n\n        it('emits actions if able to submit order', async () => {\n            const actions = await from(orderActionCreator.submitOrder(getOrderRequestBody())(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: OrderActionType.SubmitOrderRequested },\n                { type: OrderActionType.LoadOrderRequested },\n                { type: OrderActionType.LoadOrderSucceeded, payload: getOrder() },\n                {\n                    type: OrderActionType.SubmitOrderSucceeded,\n                    payload: submitResponse.body.data,\n                    meta: {\n                        ...submitResponse.body.meta,\n                        token: submitResponse.headers.token,\n                    },\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to submit order', async () => {\n            jest.spyOn(orderRequestSender, 'submitOrder').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(orderActionCreator.submitOrder(getOrderRequestBody())(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: OrderActionType.SubmitOrderRequested },\n                { type: OrderActionType.SubmitOrderFailed, payload: errorResponse, error: true },\n            ]);\n        });\n\n        it('verifies cart content', async () => {\n            await from(orderActionCreator.submitOrder(getOrderRequestBody())(store)).toPromise();\n\n            expect(checkoutValidator.validate).toHaveBeenCalled();\n        });\n\n        it('throws error if spam check should be run', async () => {\n            const checkout = getCheckout();\n\n            checkout.shouldExecuteSpamCheck = true;\n\n            const checkoutState = getCheckoutState();\n\n            checkoutState.data = checkout;\n\n            const checkoutStoreState = {\n                ...getCheckoutStoreState(),\n                checkout: checkoutState,\n            };\n            const state = {\n                ...checkoutStoreState,\n                order: {\n                    errors: {},\n                    meta: {},\n                    statuses: {},\n                },\n            };\n            const store = createCheckoutStore(state);\n\n            try {\n                await from(\n                    orderActionCreator.submitOrder(getOrderRequestBody())(store),\n                ).toPromise();\n            } catch (error) {\n                expect((error as { payload: any }).payload).toBeInstanceOf(\n                    SpamProtectionNotCompletedError,\n                );\n            }\n        });\n\n        it('submits order payload with payment data', async () => {\n            await from(orderActionCreator.submitOrder(getOrderRequestBody())(store)).toPromise();\n\n            expect(orderRequestSender.submitOrder).toHaveBeenCalledWith(\n                getInternalOrderRequestBody(),\n                { headers: { checkoutVariant: 'default' } },\n            );\n        });\n\n        it('submits order payload without payment data', async () => {\n            await from(\n                orderActionCreator.submitOrder(omit(getOrderRequestBody(), 'payment'))(store),\n            ).toPromise();\n\n            expect(orderRequestSender.submitOrder).toHaveBeenCalledWith(\n                omit(getInternalOrderRequestBody(), 'payment'),\n                { headers: { checkoutVariant: 'default' } },\n            );\n        });\n\n        it('does not submit order if cart verification fails', async () => {\n            jest.spyOn(checkoutValidator, 'validate').mockReturnValue(Promise.reject('foo'));\n\n            store = createCheckoutStore({\n                ...state,\n                cart: merge({}, getCartState(), { data: { ...getCart(), currency: 'JPY' } }),\n                config: getConfigState(),\n            });\n\n            try {\n                await from(\n                    orderActionCreator.submitOrder(getOrderRequestBody())(store),\n                ).toPromise();\n            } catch (action) {\n                expect(orderRequestSender.submitOrder).not.toHaveBeenCalled();\n                expect((action as Action).payload).toBe('foo');\n            }\n        });\n\n        it('loads current order after order submission', async () => {\n            await from(orderActionCreator.submitOrder(getOrderRequestBody())(store)).toPromise();\n\n            expect(orderRequestSender.loadOrder).toHaveBeenCalledWith(295, undefined);\n        });\n    });\n\n    describe('#finalizeOrder()', () => {\n        let errorResponse: Response<ErrorResponseBody>;\n        let response: Response<InternalOrderResponseBody>;\n\n        beforeEach(() => {\n            response = getResponse(getCompleteOrderResponseBody());\n            errorResponse = getErrorResponse();\n\n            jest.spyOn(orderRequestSender, 'loadOrder').mockReturnValue(\n                Promise.resolve(getResponse(getOrder())),\n            );\n        });\n\n        it('emits actions if able to finalize order', async () => {\n            jest.spyOn(orderRequestSender, 'finalizeOrder').mockReturnValue(\n                Promise.resolve(response),\n            );\n\n            const actions = await orderActionCreator.finalizeOrder(295).pipe(toArray()).toPromise();\n\n            expect(actions).toEqual([\n                { type: OrderActionType.FinalizeOrderRequested },\n                { type: OrderActionType.LoadOrderRequested },\n                { type: OrderActionType.LoadOrderSucceeded, payload: getOrder() },\n                { type: OrderActionType.FinalizeOrderSucceeded, payload: response.body.data },\n            ]);\n        });\n\n        it('emits error actions if unable to finalize order', async () => {\n            jest.spyOn(orderRequestSender, 'finalizeOrder').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await orderActionCreator\n                .finalizeOrder(0)\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: OrderActionType.FinalizeOrderRequested },\n                { type: OrderActionType.FinalizeOrderFailed, payload: errorResponse, error: true },\n            ]);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/order/order-action-creator.ts",
    "content": "import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, from, Observable, Observer, of } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\n\nimport { CheckoutValidator, InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { SpamProtectionNotCompletedError } from '../spam-protection/errors';\n\nimport InternalOrderRequestBody from './internal-order-request-body';\nimport {\n    FinalizeOrderAction,\n    LoadOrderAction,\n    LoadOrderPaymentsAction,\n    OrderActionType,\n    SubmitOrderAction,\n} from './order-actions';\nimport OrderRequestBody from './order-request-body';\nimport OrderRequestSender from './order-request-sender';\n\nexport default class OrderActionCreator {\n    constructor(\n        private _orderRequestSender: OrderRequestSender,\n        private _checkoutValidator: CheckoutValidator,\n    ) {}\n\n    loadOrder(orderId: number, options?: RequestOptions): Observable<LoadOrderAction> {\n        return new Observable((observer: Observer<LoadOrderAction>) => {\n            observer.next(createAction(OrderActionType.LoadOrderRequested));\n\n            this._orderRequestSender\n                .loadOrder(orderId, options)\n                .then((response) => {\n                    observer.next(createAction(OrderActionType.LoadOrderSucceeded, response.body));\n                    observer.complete();\n                })\n                .catch((response) => {\n                    observer.error(createErrorAction(OrderActionType.LoadOrderFailed, response));\n                });\n        });\n    }\n\n    // TODO: Remove when checkout does not contain unrelated order data.\n    loadOrderPayments(\n        orderId: number,\n        options?: RequestOptions,\n    ): Observable<LoadOrderPaymentsAction> {\n        return new Observable((observer: Observer<LoadOrderPaymentsAction>) => {\n            observer.next(createAction(OrderActionType.LoadOrderPaymentsRequested));\n\n            this._orderRequestSender\n                .loadOrder(orderId, options)\n                .then((response) => {\n                    observer.next(\n                        createAction(OrderActionType.LoadOrderPaymentsSucceeded, response.body),\n                    );\n                    observer.complete();\n                })\n                .catch((response) => {\n                    observer.error(\n                        createErrorAction(OrderActionType.LoadOrderPaymentsFailed, response),\n                    );\n                });\n        });\n    }\n\n    loadCurrentOrder(\n        options?: RequestOptions,\n    ): ThunkAction<LoadOrderAction, InternalCheckoutSelectors> {\n        return (store) =>\n            defer(() => {\n                const orderId = this._getCurrentOrderId(store.getState());\n\n                if (!orderId) {\n                    throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n                }\n\n                return this.loadOrder(orderId, options);\n            });\n    }\n\n    submitOrder(\n        payload?: OrderRequestBody,\n        options?: RequestOptions,\n    ): ThunkAction<SubmitOrderAction, InternalCheckoutSelectors> {\n        return (store) =>\n            concat(\n                of(createAction(OrderActionType.SubmitOrderRequested)),\n                defer(() => {\n                    const state = store.getState();\n                    const externalSource = state.config.getExternalSource();\n                    const variantIdentificationToken = state.config.getVariantIdentificationToken();\n                    const checkout = state.checkout.getCheckout();\n\n                    if (!checkout) {\n                        throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                    }\n\n                    if (checkout.shouldExecuteSpamCheck) {\n                        throw new SpamProtectionNotCompletedError();\n                    }\n\n                    return from(\n                        this._checkoutValidator.validate(checkout, options).then(() =>\n                            this._orderRequestSender.submitOrder(\n                                this._mapToOrderRequestBody(\n                                    payload ?? {},\n                                    checkout.id,\n                                    checkout.customerMessage,\n                                    externalSource,\n                                ),\n                                {\n                                    ...options,\n                                    headers: {\n                                        checkoutVariant: variantIdentificationToken,\n                                    },\n                                },\n                            ),\n                        ),\n                    ).pipe(\n                        switchMap((response) =>\n                            concat(\n                                // TODO: Remove once we can submit orders using storefront API\n                                this.loadOrder(response.body.data.order.orderId, options),\n                                of(\n                                    createAction(\n                                        OrderActionType.SubmitOrderSucceeded,\n                                        response.body.data,\n                                        { ...response.body.meta, token: response.headers.token },\n                                    ),\n                                ),\n                            ),\n                        ),\n                    );\n                }).pipe(\n                    catchError((error) =>\n                        throwErrorAction(OrderActionType.SubmitOrderFailed, error),\n                    ),\n                ),\n            );\n    }\n\n    finalizeOrder(\n        orderId: number,\n        options?: RequestOptions,\n    ): Observable<FinalizeOrderAction | LoadOrderAction> {\n        return concat(\n            of(createAction(OrderActionType.FinalizeOrderRequested)),\n            from(this._orderRequestSender.finalizeOrder(orderId, options)).pipe(\n                switchMap((response) =>\n                    concat(\n                        this.loadOrder(orderId, options),\n                        of(\n                            createAction(\n                                OrderActionType.FinalizeOrderSucceeded,\n                                response.body.data,\n                            ),\n                        ),\n                    ),\n                ),\n            ),\n        ).pipe(catchError((error) => throwErrorAction(OrderActionType.FinalizeOrderFailed, error)));\n    }\n\n    private _getCurrentOrderId(state: InternalCheckoutSelectors): number | undefined {\n        const order = state.order.getOrder();\n        const checkout = state.checkout.getCheckout();\n\n        return (order && order.orderId) || (checkout && checkout.orderId);\n    }\n\n    private _mapToOrderRequestBody(\n        payload: OrderRequestBody,\n        cartId: string,\n        customerMessage: string,\n        externalSource?: string,\n    ): InternalOrderRequestBody {\n        const { payment, ...order } = payload;\n\n        if (!payment) {\n            return {\n                ...order,\n                cartId,\n                customerMessage,\n                externalSource,\n            };\n        }\n\n        return {\n            ...order,\n            cartId,\n            customerMessage,\n            externalSource,\n            payment: {\n                paymentData: payment.paymentData,\n                name: payment.methodId,\n                gateway: payment.gatewayId,\n            },\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/order/order-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { InternalOrderResponseData } from './internal-order-responses';\nimport Order from './order';\n\nexport enum OrderActionType {\n    LoadOrderRequested = 'LOAD_ORDER_REQUESTED',\n    LoadOrderSucceeded = 'LOAD_ORDER_SUCCEEDED',\n    LoadOrderFailed = 'LOAD_ORDER_FAILED',\n\n    LoadOrderPaymentsRequested = 'LOAD_ORDER_PAYMENTS_REQUESTED',\n    LoadOrderPaymentsSucceeded = 'LOAD_ORDER_PAYMENTS_SUCCEEDED',\n    LoadOrderPaymentsFailed = 'LOAD_ORDER_PAYMENTS_FAILED',\n\n    SubmitOrderRequested = 'SUBMIT_ORDER_REQUESTED',\n    SubmitOrderSucceeded = 'SUBMIT_ORDER_SUCCEEDED',\n    SubmitOrderFailed = 'SUBMIT_ORDER_FAILED',\n\n    FinalizeOrderRequested = 'FINALIZE_ORDER_REQUESTED',\n    FinalizeOrderSucceeded = 'FINALIZE_ORDER_SUCCEEDED',\n    FinalizeOrderFailed = 'FINALIZE_ORDER_FAILED',\n}\n\nexport type OrderAction =\n    | LoadOrderAction\n    | LoadOrderPaymentsAction\n    | SubmitOrderAction\n    | FinalizeOrderAction;\n\nexport type LoadOrderPaymentsAction =\n    | LoadOrderPaymentsRequestedAction\n    | LoadOrderPaymentsSucceededAction\n    | LoadOrderPaymentsFailedAction;\n\nexport type LoadOrderAction =\n    | LoadOrderRequestedAction\n    | LoadOrderSucceededAction\n    | LoadOrderFailedAction;\n\nexport type SubmitOrderAction =\n    | SubmitOrderRequestedAction\n    | SubmitOrderSucceededAction\n    | SubmitOrderFailedAction\n    | LoadOrderAction;\n\nexport type FinalizeOrderAction =\n    | FinalizeOrderRequestedAction\n    | FinalizeOrderSucceededAction\n    | FinalizeOrderFailedAction\n    | LoadOrderAction;\n\nexport interface LoadOrderRequestedAction extends Action {\n    type: OrderActionType.LoadOrderRequested;\n}\n\nexport interface LoadOrderSucceededAction extends Action<Order> {\n    type: OrderActionType.LoadOrderSucceeded;\n}\n\nexport interface LoadOrderFailedAction extends Action<Error> {\n    type: OrderActionType.LoadOrderFailed;\n}\n\nexport interface LoadOrderPaymentsRequestedAction extends Action {\n    type: OrderActionType.LoadOrderPaymentsRequested;\n}\n\nexport interface LoadOrderPaymentsSucceededAction extends Action<Order> {\n    type: OrderActionType.LoadOrderPaymentsSucceeded;\n}\n\nexport interface LoadOrderPaymentsFailedAction extends Action<Error> {\n    type: OrderActionType.LoadOrderPaymentsFailed;\n}\n\nexport interface SubmitOrderRequestedAction extends Action {\n    type: OrderActionType.SubmitOrderRequested;\n}\n\nexport interface SubmitOrderSucceededAction extends Action<InternalOrderResponseData> {\n    type: OrderActionType.SubmitOrderSucceeded;\n}\n\nexport interface SubmitOrderFailedAction extends Action<Error> {\n    type: OrderActionType.SubmitOrderFailed;\n}\n\nexport interface FinalizeOrderRequestedAction extends Action {\n    type: OrderActionType.FinalizeOrderRequested;\n}\n\nexport interface FinalizeOrderSucceededAction extends Action<InternalOrderResponseData> {\n    type: OrderActionType.FinalizeOrderSucceeded;\n}\n\nexport interface FinalizeOrderFailedAction extends Action<Error> {\n    type: OrderActionType.FinalizeOrderFailed;\n}\n"
  },
  {
    "path": "packages/core/src/order/order-reducer.spec.ts",
    "content": "import { createErrorAction } from '@bigcommerce/data-store';\nimport { omit } from 'lodash';\n\nimport { RequestErrorFactory } from '../common/error';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport {\n    getCompleteOrderResponseBody,\n    getSubmitOrderResponseBody,\n    getSubmitOrderResponseHeaders,\n} from './internal-orders.mock';\nimport {\n    FinalizeOrderAction,\n    LoadOrderAction,\n    LoadOrderPaymentsAction,\n    OrderActionType,\n    SubmitOrderAction,\n} from './order-actions';\nimport orderReducer from './order-reducer';\nimport OrderState from './order-state';\nimport { getOrder } from './orders.mock';\n\ndescribe('orderReducer()', () => {\n    let initialState: OrderState;\n\n    beforeEach(() => {\n        initialState = {\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    it('returns new status while fetching order', () => {\n        const action: LoadOrderAction = {\n            type: OrderActionType.LoadOrderRequested,\n        };\n\n        expect(orderReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                statuses: { isLoading: true },\n            }),\n        );\n    });\n\n    it('returns new data if it is fetched successfully', () => {\n        const action: LoadOrderAction = {\n            type: OrderActionType.LoadOrderSucceeded,\n            payload: getOrder(),\n        };\n\n        expect(orderReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: omit(action.payload, ['billingAddress', 'coupons']),\n                statuses: { isLoading: false },\n            }),\n        );\n    });\n\n    it('returns error if it is not fetched successfully', () => {\n        const response = getErrorResponse();\n        const action = createErrorAction(\n            OrderActionType.LoadOrderFailed,\n            new RequestErrorFactory().createError(response),\n        );\n\n        expect(orderReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                errors: { loadError: action.payload },\n                statuses: { isLoading: false },\n            }),\n        );\n    });\n\n    it('returns new data if it is submitted successfully', () => {\n        const response = getSubmitOrderResponseBody();\n        const headers = getSubmitOrderResponseHeaders();\n        const action: SubmitOrderAction = {\n            type: OrderActionType.SubmitOrderSucceeded,\n            meta: {\n                ...response.meta,\n                token: headers.token,\n            },\n            payload: response.data,\n        };\n\n        expect(orderReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                meta: {\n                    callbackUrl: response.data.order.callbackUrl,\n                    deviceFingerprint: response.meta.deviceFingerprint,\n                    orderToken: response.data.order.token,\n                    // tslint:disable-next-line:no-non-null-assertion\n                    payment: action.payload!.order.payment,\n                    token: headers.token,\n                },\n            }),\n        );\n    });\n\n    it('returns new data if it is finalized successfully', () => {\n        const response = getCompleteOrderResponseBody();\n        const action: FinalizeOrderAction = {\n            type: OrderActionType.FinalizeOrderSucceeded,\n            meta: response.meta,\n            payload: response.data,\n        };\n\n        expect(orderReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                meta: {\n                    // tslint:disable-next-line:no-non-null-assertion\n                    payment: action.payload!.order.payment,\n                },\n            }),\n        );\n    });\n\n    describe('loadOrderPayments', () => {\n        it('returns new status while fetching order', () => {\n            const action: LoadOrderPaymentsAction = {\n                type: OrderActionType.LoadOrderPaymentsRequested,\n            };\n\n            expect(orderReducer(initialState, action)).toEqual(\n                expect.objectContaining({\n                    statuses: { isLoading: true },\n                }),\n            );\n        });\n\n        it('returns new data if it is fetched successfully', () => {\n            const action: LoadOrderPaymentsAction = {\n                type: OrderActionType.LoadOrderPaymentsSucceeded,\n                payload: getOrder(),\n            };\n\n            expect(orderReducer(initialState, action)).toEqual(\n                expect.objectContaining({\n                    data: omit(action.payload, ['billingAddress', 'coupons']),\n                    statuses: { isLoading: false },\n                }),\n            );\n        });\n\n        it('returns error if it is not fetched successfully', () => {\n            const response = getErrorResponse();\n            const action = createErrorAction(\n                OrderActionType.LoadOrderPaymentsFailed,\n                new RequestErrorFactory().createError(response),\n            );\n\n            expect(orderReducer(initialState, action)).toEqual(\n                expect.objectContaining({\n                    errors: { loadError: action.payload },\n                    statuses: { isLoading: false },\n                }),\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/order/order-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\nimport { omit } from 'lodash';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport { OrderAction, OrderActionType } from './order-actions';\nimport OrderState, {\n    DEFAULT_STATE,\n    OrderDataState,\n    OrderErrorsState,\n    OrderMetaState,\n    OrderStatusesState,\n} from './order-state';\n\nexport default function orderReducer(\n    state: OrderState = DEFAULT_STATE,\n    action: Action,\n): OrderState {\n    const reducer = combineReducers<OrderState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        meta: metaReducer,\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: OrderDataState | undefined,\n    action: OrderAction,\n): OrderDataState | undefined {\n    switch (action.type) {\n        case OrderActionType.LoadOrderSucceeded:\n        case OrderActionType.LoadOrderPaymentsSucceeded:\n            return objectMerge(\n                data,\n                omit(action.payload, ['billingAddress', 'coupons']),\n            ) as OrderDataState;\n\n        default:\n            return data;\n    }\n}\n\nfunction metaReducer(\n    meta: OrderMetaState | undefined,\n    action: OrderAction,\n): OrderMetaState | undefined {\n    switch (action.type) {\n        case OrderActionType.FinalizeOrderSucceeded:\n        case OrderActionType.SubmitOrderSucceeded:\n            return objectMerge(meta, {\n                ...action.meta,\n                callbackUrl: action.payload && action.payload.order.callbackUrl,\n                orderToken: action.payload && action.payload.order.token,\n                payment: action.payload && action.payload.order && action.payload.order.payment,\n            });\n\n        default:\n            return meta;\n    }\n}\n\nfunction errorsReducer(\n    errors: OrderErrorsState = DEFAULT_STATE.errors,\n    action: OrderAction,\n): OrderErrorsState {\n    switch (action.type) {\n        case OrderActionType.LoadOrderRequested:\n        case OrderActionType.LoadOrderSucceeded:\n        case OrderActionType.LoadOrderPaymentsSucceeded:\n        case OrderActionType.LoadOrderPaymentsRequested:\n            return objectSet(errors, 'loadError', undefined);\n\n        case OrderActionType.LoadOrderFailed:\n        case OrderActionType.LoadOrderPaymentsFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: OrderStatusesState = DEFAULT_STATE.statuses,\n    action: OrderAction,\n): OrderStatusesState {\n    switch (action.type) {\n        case OrderActionType.LoadOrderRequested:\n        case OrderActionType.LoadOrderPaymentsRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case OrderActionType.LoadOrderSucceeded:\n        case OrderActionType.LoadOrderFailed:\n        case OrderActionType.LoadOrderPaymentsSucceeded:\n        case OrderActionType.LoadOrderPaymentsFailed:\n            return objectSet(statuses, 'isLoading', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/order/order-request-body.ts",
    "content": "import {\n    WithAccountCreation,\n    WithBankAccountInstrument,\n    WithEcpInstrument,\n    WithPayByBankInstrument,\n    WithSepaInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    CreditCardInstrument,\n    HostedCreditCardInstrument,\n    HostedInstrument,\n    HostedVaultedInstrument,\n    NonceInstrument,\n    VaultedInstrument,\n    WithCheckoutcomFawryInstrument,\n    WithCheckoutcomSEPAInstrument,\n    WithDocumentInstrument,\n    WithIdealInstrument,\n    WithMollieIssuerInstrument,\n} from '../payment';\n\n/**\n * An object that contains the information required for submitting an order.\n */\nexport default interface OrderRequestBody {\n    /**\n     * An object that contains the payment details of a customer. In some cases,\n     * you can omit this object if the order does not require further payment.\n     * For example, the customer is able to use their store credit to pay for\n     * the entire order. Or they have already submitted their payment details\n     * using PayPal.\n     */\n    payment?: OrderPaymentRequestBody;\n\n    /**\n     * If true, apply the store credit of the customer to the order. It only\n     * works if the customer has previously signed in.\n     */\n    useStoreCredit?: boolean;\n}\n\nexport type OrderPaymentInstrument =\n    | WithBankAccountInstrument\n    | WithEcpInstrument\n    | WithSepaInstrument\n    | WithPayByBankInstrument\n    | WithIdealInstrument\n    | CreditCardInstrument\n    | HostedInstrument\n    | HostedCreditCardInstrument\n    | HostedVaultedInstrument\n    | NonceInstrument\n    | VaultedInstrument\n    | (CreditCardInstrument & WithDocumentInstrument)\n    | (CreditCardInstrument & WithCheckoutcomFawryInstrument)\n    | (CreditCardInstrument & WithCheckoutcomSEPAInstrument)\n    | (CreditCardInstrument & WithIdealInstrument)\n    | (HostedInstrument & WithMollieIssuerInstrument)\n    | WithAccountCreation;\n\n/**\n * An object that contains the payment information required for submitting an\n * order.\n */\nexport interface OrderPaymentRequestBody {\n    /**\n     * The identifier of the payment method that is chosen for the order.\n     */\n    methodId: string;\n\n    /**\n     * The identifier of the payment provider that is chosen for the order.\n     */\n    gatewayId?: string;\n\n    /**\n     * An object that contains the details of a credit card, vaulted payment\n     * instrument or nonce instrument.\n     */\n    paymentData?: OrderPaymentInstrument;\n}\n"
  },
  {
    "path": "packages/core/src/order/order-request-sender.spec.ts",
    "content": "import { createRequestSender, createTimeout, Response } from '@bigcommerce/request-sender';\n\nimport {\n    CartConsistencyError,\n    CartStockPositionsChangedError,\n    EmptyCartError,\n} from '../cart/errors';\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport { MissingShippingMethodError, OrderTaxProviderUnavailableError } from './errors';\nimport InvalidShippingAddressError from './errors/invalid-shipping-address-error';\nimport { InternalOrderResponseBody } from './internal-order-responses';\nimport { getCompleteOrderResponseBody } from './internal-orders.mock';\nimport Order from './order';\nimport OrderRequestSender from './order-request-sender';\nimport { getOrder } from './orders.mock';\n\ndescribe('OrderRequestSender', () => {\n    let orderRequestSender: OrderRequestSender;\n    const include = [\n        'payments',\n        'lineItems.physicalItems.socialMedia',\n        'lineItems.physicalItems.options',\n        'lineItems.physicalItems.categories',\n        'lineItems.digitalItems.socialMedia',\n        'lineItems.digitalItems.options',\n        'lineItems.digitalItems.categories',\n    ].join(',');\n\n    const requestSender = createRequestSender();\n\n    beforeEach(() => {\n        orderRequestSender = new OrderRequestSender(requestSender);\n    });\n\n    describe('#loadOrder()', () => {\n        let response: Response<Order>;\n\n        beforeEach(() => {\n            response = getResponse(getOrder());\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('loads order', async () => {\n            const output = await orderRequestSender.loadOrder(295);\n\n            expect(output).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/orders/295', {\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    ...SDK_VERSION_HEADERS,\n                },\n                params: { include },\n                timeout: undefined,\n            });\n        });\n\n        it('loads order with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const output = await orderRequestSender.loadOrder(295, options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/orders/295', {\n                ...options,\n                params: { include },\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('loads order including payment data', async () => {\n            await orderRequestSender.loadOrder(295);\n\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/orders/295', {\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    ...SDK_VERSION_HEADERS,\n                },\n                params: { include },\n                timeout: undefined,\n            });\n        });\n    });\n\n    describe('#submitOrder()', () => {\n        let response: Response<InternalOrderResponseBody>;\n\n        beforeEach(() => {\n            response = getResponse(getCompleteOrderResponseBody());\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('submits order and returns response', async () => {\n            const payload = {\n                cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                useStoreCredit: false,\n            };\n            const output = await orderRequestSender.submitOrder(payload);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/internalapi/v1/checkout/order',\n                expect.objectContaining({\n                    body: payload,\n                    headers: expect.anything(),\n                }),\n            );\n        });\n\n        it('throws OrderTaxProviderUnavailableError if request status is 500 and type is tax_provider_unavailable', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 500,\n                    title: 'The tax provider is unavailable.',\n                    type: 'tax_provider_unavailable',\n                },\n                undefined,\n                500,\n            );\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.reject(error));\n\n            try {\n                const payload = {\n                    cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                    useStoreCredit: false,\n                };\n\n                await orderRequestSender.submitOrder(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(OrderTaxProviderUnavailableError);\n            }\n        });\n\n        it('throws `CartConsistencyError` if error type is `cart_has_changed`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 409,\n                    title: 'Checkout could not be processed',\n                    type: 'cart_has_changed',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.reject(error));\n\n            try {\n                const payload = {\n                    cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                    useStoreCredit: false,\n                };\n\n                await orderRequestSender.submitOrder(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(CartConsistencyError);\n            }\n        });\n\n        it('throws `CartStockPositionsChangedError` with changedItemIds if error type is `cart_stock_positions_changed`', async () => {\n            const changedItemIds = ['496b4d99-5fd4-445f-b50c-95aee0a0e6e0'];\n            const error = getErrorResponse(\n                {\n                    status: 409,\n                    title: 'At least one item changed stock position',\n                    type: 'cart_stock_positions_changed',\n                    detail: 'changed items are 496b4d99-5fd4-445f-b50c-95aee0a0e6e0',\n                    errors: { changedItemIds },\n                } as any,\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.reject(error));\n\n            try {\n                const payload = {\n                    cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                    useStoreCredit: false,\n                };\n\n                await orderRequestSender.submitOrder(payload);\n            } catch (err) {\n                expect(err).toBeInstanceOf(CartStockPositionsChangedError);\n                expect((err as CartStockPositionsChangedError).changedItemIds).toEqual(\n                    changedItemIds,\n                );\n            }\n        });\n\n        it('throws `MissingShippingMethodError` if error type is `missing_shipping_method`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 400,\n                    title: 'Missing shipping method',\n                    type: 'missing_shipping_method',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.reject(error));\n\n            const payload = {\n                cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                useStoreCredit: false,\n            };\n\n            await expect(orderRequestSender.submitOrder(payload)).rejects.toThrow(\n                MissingShippingMethodError,\n            );\n        });\n\n        it('throws `InvalidShippingAddressError` if error type is `invalid_shipping_address`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 400,\n                    title: 'Invalid shipping address',\n                    type: 'invalid_shipping_address',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.reject(error));\n\n            const payload = {\n                cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                useStoreCredit: false,\n            };\n\n            await expect(orderRequestSender.submitOrder(payload)).rejects.toThrow(\n                InvalidShippingAddressError,\n            );\n        });\n\n        it('throws `EmptyCartError` if error type is `empty_cart`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 422,\n                    title: 'The request could not process',\n                    type: 'empty_cart',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.reject(error));\n\n            const payload = {\n                cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                useStoreCredit: false,\n            };\n\n            await expect(orderRequestSender.submitOrder(payload)).rejects.toThrow(EmptyCartError);\n        });\n\n        it('submits order and returns response with timeout', async () => {\n            const payload = {\n                cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                useStoreCredit: false,\n            };\n            const options = { timeout: createTimeout() };\n            const output = await orderRequestSender.submitOrder(payload, options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/internalapi/v1/checkout/order',\n                expect.objectContaining({\n                    ...options,\n                    body: payload,\n                }),\n            );\n        });\n\n        it('submits order with checkout variant header and library version when variant is provided', async () => {\n            const payload = { cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7' };\n            const headers = {\n                checkoutVariant: 'default',\n                ...SDK_VERSION_HEADERS,\n            };\n\n            await orderRequestSender.submitOrder(payload, { headers });\n\n            expect(requestSender.post).toHaveBeenCalledWith('/internalapi/v1/checkout/order', {\n                body: payload,\n                headers: {\n                    'X-Checkout-Variant': headers.checkoutVariant,\n                    'X-Checkout-SDK-Version': expect.any(String),\n                },\n            });\n        });\n\n        it('submits order with library version', async () => {\n            const payload = { cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7' };\n\n            await orderRequestSender.submitOrder(payload);\n\n            expect(requestSender.post).toHaveBeenCalledWith('/internalapi/v1/checkout/order', {\n                body: payload,\n                headers: {\n                    'X-Checkout-SDK-Version': expect.any(String),\n                },\n            });\n        });\n    });\n\n    describe('#finalizeOrder()', () => {\n        let response: Response<InternalOrderResponseBody>;\n\n        beforeEach(() => {\n            response = getResponse(getCompleteOrderResponseBody());\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('finalizes order and returns response', async () => {\n            const output = await orderRequestSender.finalizeOrder(295);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith('/internalapi/v1/checkout/order/295', {\n                timeout: undefined,\n                headers: SDK_VERSION_HEADERS,\n            });\n        });\n\n        it('finalizes order and returns response with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const output = await orderRequestSender.finalizeOrder(295, options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith('/internalapi/v1/checkout/order/295', {\n                ...options,\n                headers: SDK_VERSION_HEADERS,\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/order/order-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\nimport { isNil, omitBy } from 'lodash';\n\nimport {\n    CartConsistencyError,\n    CartStockPositionsChangedError,\n    EmptyCartError,\n} from '../cart/errors';\nimport {\n    ContentType,\n    joinIncludes,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport { MissingShippingMethodError, OrderTaxProviderUnavailableError } from './errors';\nimport InvalidShippingAddressError from './errors/invalid-shipping-address-error';\nimport InternalOrderRequestBody from './internal-order-request-body';\nimport { InternalOrderResponseBody } from './internal-order-responses';\nimport Order from './order';\n\nexport interface SubmitOrderRequestOptions extends RequestOptions {\n    headers?: {\n        checkoutVariant?: string;\n    };\n}\n\nexport default class OrderRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    loadOrder(orderId: number, { timeout }: RequestOptions = {}): Promise<Response<Order>> {\n        const url = `/api/storefront/orders/${orderId}`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n        const include = [\n            'payments',\n            'lineItems.physicalItems.socialMedia',\n            'lineItems.physicalItems.options',\n            'lineItems.physicalItems.categories',\n            'lineItems.digitalItems.socialMedia',\n            'lineItems.digitalItems.options',\n            'lineItems.digitalItems.categories',\n        ];\n\n        return this._requestSender.get(url, {\n            params: {\n                include: joinIncludes(include),\n            },\n            headers,\n            timeout,\n        });\n    }\n\n    submitOrder(\n        body?: InternalOrderRequestBody,\n        { headers, timeout }: SubmitOrderRequestOptions = {},\n    ): Promise<Response<InternalOrderResponseBody>> {\n        const url = '/internalapi/v1/checkout/order';\n\n        return this._requestSender\n            .post<InternalOrderResponseBody>(url, {\n                body,\n                headers: omitBy(\n                    {\n                        'X-Checkout-Variant': headers && headers.checkoutVariant,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    isNil,\n                ),\n                timeout,\n            })\n            .catch((error) => {\n                if (error.body.type === 'tax_provider_unavailable') {\n                    throw new OrderTaxProviderUnavailableError();\n                }\n\n                if (error.body.type === 'cart_has_changed') {\n                    throw new CartConsistencyError();\n                }\n\n                if (error.body.type === 'cart_stock_positions_changed') {\n                    const changedItemIds =\n                        (error.body.errors as { changedItemIds?: string[] })?.changedItemIds ?? [];\n\n                    throw new CartStockPositionsChangedError(changedItemIds);\n                }\n\n                if (error.body.type === 'missing_shipping_method') {\n                    throw new MissingShippingMethodError(error.body.detail);\n                }\n\n                if (error.body.type === 'invalid_shipping_address') {\n                    throw new InvalidShippingAddressError(error.body.detail);\n                }\n\n                if (error.body.type === 'empty_cart') {\n                    throw new EmptyCartError();\n                }\n\n                throw error;\n            });\n    }\n\n    finalizeOrder(\n        orderId: number,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<InternalOrderResponseBody>> {\n        const url = `/internalapi/v1/checkout/order/${orderId}`;\n\n        return this._requestSender.post(url, { timeout, headers: SDK_VERSION_HEADERS });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/order/order-selector.spec.ts",
    "content": "import { set } from 'lodash';\n\nimport {\n    CheckoutStoreState,\n    createInternalCheckoutSelectors,\n    InternalCheckoutSelectors,\n} from '../checkout';\nimport { getCheckoutStoreStateWithOrder } from '../checkout/checkouts.mock';\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport OrderSelector, { createOrderSelectorFactory, OrderSelectorFactory } from './order-selector';\nimport { getOrder, getOrderState } from './orders.mock';\n\nimport { GatewayOrderPayment } from '.';\n\ndescribe('OrderSelector', () => {\n    let createOrderSelector: OrderSelectorFactory;\n    let orderSelector: OrderSelector;\n    let state: CheckoutStoreState;\n    let selectors: InternalCheckoutSelectors;\n\n    beforeEach(() => {\n        createOrderSelector = createOrderSelectorFactory();\n        state = getCheckoutStoreStateWithOrder();\n        selectors = createInternalCheckoutSelectors(state);\n    });\n\n    describe('#getOrder()', () => {\n        it('returns the current order', () => {\n            orderSelector = createOrderSelector(\n                state.order,\n                selectors.orderBillingAddress,\n                selectors.coupons,\n            );\n\n            expect(orderSelector.getOrder()).toEqual({\n                ...getOrder(),\n                billingAddress: selectors.orderBillingAddress.getOrderBillingAddress(),\n                coupons: selectors.coupons.getCoupons(),\n            });\n        });\n    });\n\n    describe('#getOrderMeta()', () => {\n        it('returns order meta', () => {\n            orderSelector = createOrderSelector(\n                state.order,\n                selectors.orderBillingAddress,\n                selectors.coupons,\n            );\n\n            expect(orderSelector.getOrderMeta()).toEqual(state.order.meta);\n        });\n    });\n\n    describe('#getLoadError()', () => {\n        it('returns error if unable to load', () => {\n            const loadError = new RequestError(getErrorResponse());\n\n            orderSelector = createOrderSelector(\n                {\n                    ...state.order,\n                    errors: { loadError },\n                },\n                selectors.orderBillingAddress,\n                selectors.coupons,\n            );\n\n            expect(orderSelector.getLoadError()).toEqual(loadError);\n        });\n\n        it('does not returns error if able to load', () => {\n            orderSelector = createOrderSelector(\n                state.order,\n                selectors.orderBillingAddress,\n                selectors.coupons,\n            );\n\n            expect(orderSelector.getLoadError()).toBeUndefined();\n        });\n    });\n\n    describe('#getPaymentId()', () => {\n        describe('when there is a matching payment method', () => {\n            it('returns the paymentId', () => {\n                const orderPayment: GatewayOrderPayment = {\n                    providerId: 'some-provider-id',\n                    description: '',\n                    amount: 225,\n                    detail: { step: 'INITIALIZE', instructions: '' },\n                    paymentId: 'abc',\n                };\n\n                const orderState = set(getOrderState(), 'data.payments', [orderPayment]);\n\n                orderSelector = createOrderSelector(\n                    orderState,\n                    selectors.orderBillingAddress,\n                    selectors.coupons,\n                );\n\n                expect(orderSelector.getPaymentId('some-provider-id')).toBe('abc');\n            });\n        });\n\n        describe('when there is no matching payment method', () => {\n            it('returns undefined', () => {\n                orderSelector = createOrderSelector(\n                    state.order,\n                    selectors.orderBillingAddress,\n                    selectors.coupons,\n                );\n\n                expect(orderSelector.getPaymentId('some-non-matching-id')).toBeUndefined();\n            });\n        });\n    });\n\n    describe('#isLoading()', () => {\n        it('returns true if loading order', () => {\n            orderSelector = createOrderSelector(\n                {\n                    ...state.order,\n                    statuses: { isLoading: true },\n                },\n                selectors.orderBillingAddress,\n                selectors.coupons,\n            );\n\n            expect(orderSelector.isLoading()).toBe(true);\n        });\n\n        it('returns false if not loading order', () => {\n            orderSelector = createOrderSelector(\n                state.order,\n                selectors.orderBillingAddress,\n                selectors.coupons,\n            );\n\n            expect(orderSelector.isLoading()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/order/order-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\nimport { CouponSelector } from '../coupon';\nimport OrderBillingAddressSelector from '../order-billing-address/order-billing-address-selector';\n\nimport Order from './order';\nimport OrderState, { DEFAULT_STATE, OrderMetaState } from './order-state';\n\nexport default interface OrderSelector {\n    getOrder(): Order | undefined;\n    getOrderOrThrow(): Order;\n    getOrderMeta(): OrderMetaState | undefined;\n    getLoadError(): Error | undefined;\n    getPaymentId(methodId: string): string | undefined;\n    isLoading(): boolean;\n}\n\nexport type OrderSelectorFactory = (\n    state: OrderState,\n    billingAddress: OrderBillingAddressSelector,\n    coupons: CouponSelector,\n) => OrderSelector;\n\ninterface OrderSelectorDependencies {\n    billingAddress: OrderBillingAddressSelector;\n    coupons: CouponSelector;\n}\n\nexport function createOrderSelectorFactory(): OrderSelectorFactory {\n    const getOrder = createSelector(\n        (state: OrderState) => state.data,\n        (_: OrderState, { billingAddress }: OrderSelectorDependencies) =>\n            billingAddress.getOrderBillingAddress(),\n        (_: OrderState, { coupons }: OrderSelectorDependencies) => coupons.getCoupons(),\n        (data, billingAddress, coupons = []) =>\n            () => {\n                if (!data || !billingAddress) {\n                    return;\n                }\n\n                return {\n                    ...data,\n                    billingAddress,\n                    coupons,\n                };\n            },\n    );\n\n    const getOrderOrThrow = createSelector(getOrder, (getOrder) => () => {\n        return guard(getOrder(), () => new MissingDataError(MissingDataErrorType.MissingOrder));\n    });\n\n    const getOrderMeta = createSelector(\n        (state: OrderState) => state.meta,\n        (meta) => () => meta,\n    );\n\n    const getLoadError = createSelector(\n        (state: OrderState) => state.errors.loadError,\n        (error) => () => error,\n    );\n\n    const getPaymentId = createSelector(\n        (state: OrderState) => state.data?.payments,\n        (payments = []) =>\n            (methodId: string) => {\n                const currentPayment = payments.find(({ providerId }) => providerId === methodId);\n\n                return currentPayment?.paymentId;\n            },\n    );\n\n    const isLoading = createSelector(\n        (state: OrderState) => !!state.statuses.isLoading,\n        (status) => () => status,\n    );\n\n    return memoizeOne(\n        (\n            state: OrderState = DEFAULT_STATE,\n            billingAddress: OrderBillingAddressSelector,\n            coupons: CouponSelector,\n        ): OrderSelector => {\n            return {\n                getOrder: getOrder(state, { billingAddress, coupons }),\n                getOrderOrThrow: getOrderOrThrow(state, { billingAddress, coupons }),\n                getOrderMeta: getOrderMeta(state),\n                getLoadError: getLoadError(state),\n                getPaymentId: getPaymentId(state),\n                isLoading: isLoading(state),\n            };\n        },\n    );\n}\n"
  },
  {
    "path": "packages/core/src/order/order-state.ts",
    "content": "import { Omit } from '../common/types';\n\nimport { InternalOrderMeta, InternalOrderPayment } from './internal-order';\nimport Order from './order';\n\nexport default interface OrderState {\n    data?: OrderDataState;\n    meta?: OrderMetaState;\n    errors: OrderErrorsState;\n    statuses: OrderStatusesState;\n}\n\nexport type OrderDataState = Omit<Order, 'billingAddress' | 'coupons'>;\n\nexport interface OrderMetaState extends InternalOrderMeta {\n    token?: string;\n    orderToken?: string;\n    callbackUrl?: string;\n    payment?: InternalOrderPayment;\n}\n\nexport interface OrderErrorsState {\n    loadError?: Error;\n    submitError?: Error;\n    finalizeError?: Error;\n}\n\nexport interface OrderStatusesState {\n    isLoading?: boolean;\n    isSubmitting?: boolean;\n    isFinalizing?: boolean;\n}\n\nexport const DEFAULT_STATE: OrderState = {\n    errors: {},\n    meta: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/order/order.ts",
    "content": "import { Currency } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { LineItemMap } from '../cart';\nimport { Coupon } from '../coupon';\nimport { OrderBillingAddress } from '../order-billing-address/order-billing-address-state';\nimport { Tax } from '../tax';\n\nimport { OrderMetaState } from './order-state';\n\nexport default interface Order {\n    baseAmount: number;\n    billingAddress: OrderBillingAddress;\n    cartId: string;\n    coupons: Coupon[];\n    consignments: OrderConsignment;\n    currency: Currency;\n    customerCanBeCreated: boolean;\n    customerId: number;\n    customerMessage: string;\n    discountAmount: number;\n    displayDiscountTotal: number;\n    handlingCostTotal: number;\n    hasDigitalItems: boolean;\n    isComplete: boolean;\n    isDownloadable: boolean;\n    isTaxIncluded: boolean;\n    lineItems: LineItemMap;\n    orderAmount: number;\n    orderAmountAsInteger: number;\n    orderBasedAutoDiscountTotal: number;\n    orderId: number;\n    manualDiscountTotal: number;\n    productAutoDiscountedSubtotal: number;\n    payments?: OrderPayments;\n    giftWrappingCostTotal: number;\n    comparisonShippingCost: number;\n    shippingCostTotal: number;\n    shippingCostBeforeDiscount: number;\n    status: string;\n    taxes: Tax[];\n    taxTotal: number;\n    totalDiscount: number;\n    channelId: number;\n    fees: OrderFee[];\n}\n\nexport interface OrderFee {\n    id: number;\n    type: string;\n    customerDisplayName: string;\n    cost: number;\n    source: string;\n}\n\nexport type OrderPayments = Array<GatewayOrderPayment | GiftCertificateOrderPayment>;\n\nexport type OrderMeta = OrderMetaState;\n\nexport interface OrderPayment {\n    providerId: string;\n    gatewayId?: string;\n    methodId?: string;\n    paymentId?: string;\n    description: string;\n    amount: number;\n}\n\nexport interface GatewayOrderPayment extends OrderPayment {\n    detail: {\n        step: string;\n        instructions: string;\n    };\n    mandate?: {\n        id: string;\n        url?: string;\n        mandateText?: {\n            [key: string]: string;\n        };\n    };\n}\n\nexport interface GiftCertificateOrderPayment extends OrderPayment {\n    detail: {\n        code: string;\n        remaining: number;\n    };\n}\n\nexport interface OrderConsignment {\n    shipping: OrderShippingConsignment[];\n}\n\nexport interface OrderShippingConsignmentDiscount {\n    id: number;\n    amount: number;\n    code: string | null;\n}\n\nexport interface OrderShippingConsignment {\n    lineItems: Array<{\n        id: number;\n    }>;\n    shippingAddressId: number;\n    firstName: string;\n    lastName: string;\n    company: string;\n    address1: string;\n    address2: string;\n    city: string;\n    stateOrProvince: string;\n    postalCode: string;\n    country: string;\n    countryCode: string;\n    email: string;\n    phone: string;\n    itemsTotal: number;\n    itemsShipped: number;\n    shippingMethod: string;\n    baseCost: number;\n    costExTax: number;\n    costIncTax: number;\n    costTax: number;\n    costTaxClassId: number;\n    baseHandlingCost: number;\n    handlingCostExTax: number;\n    handlingCostIncTax: number;\n    handlingCostTax: number;\n    handlingCostTaxClassId: number;\n    shippingZoneId: number;\n    shippingZoneName: string;\n    customFields: Array<{\n        name: string;\n        value: string | null;\n    }>;\n    discounts: OrderShippingConsignmentDiscount[];\n}\n"
  },
  {
    "path": "packages/core/src/order/orders.mock.ts",
    "content": "import { getCurrency } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getBillingAddress } from '../billing/billing-addresses.mock';\nimport { getGiftCertificateItem } from '../cart/line-items.mock';\nimport { getCoupon, getShippingCoupon } from '../coupon/coupons.mock';\n\nimport { getAwaitingOrder, getSubmitOrderResponseHeaders } from './internal-orders.mock';\nimport { getPhysicalItem } from './line-items.mock';\nimport Order, {\n    GatewayOrderPayment,\n    GiftCertificateOrderPayment,\n    OrderConsignment,\n    OrderShippingConsignment,\n} from './order';\nimport OrderState, { OrderMetaState } from './order-state';\n\nexport function getOrder(): Order {\n    return {\n        baseAmount: 200,\n        billingAddress: getBillingAddress(),\n        cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n        consignments: getOrderConsignment(),\n        comparisonShippingCost: 20,\n        coupons: [getCoupon(), getShippingCoupon()],\n        currency: getCurrency(),\n        customerMessage: '',\n        customerCanBeCreated: true,\n        customerId: 0,\n        discountAmount: 10,\n        displayDiscountTotal: 0,\n        manualDiscountTotal: 0,\n        productAutoDiscountedSubtotal: 200,\n        orderBasedAutoDiscountTotal: 0,\n        handlingCostTotal: 8,\n        hasDigitalItems: false,\n        isComplete: true,\n        isDownloadable: false,\n        isTaxIncluded: false,\n        lineItems: {\n            physicalItems: [getPhysicalItem()],\n            digitalItems: [],\n            giftCertificates: [getGiftCertificateItem()],\n            customItems: [],\n        },\n        orderAmount: 190,\n        orderAmountAsInteger: 19000,\n        giftWrappingCostTotal: 0,\n        orderId: 295,\n        payments: [getGatewayOrderPayment(), getGiftCertificateOrderPayment()],\n        shippingCostTotal: 15,\n        shippingCostBeforeDiscount: 20,\n        status: 'ORDER_STATUS_AWAITING_FULFILLMENT',\n        taxes: [\n            {\n                name: 'Tax',\n                amount: 3,\n            },\n        ],\n        taxTotal: 3,\n        channelId: 1,\n        fees: [],\n        totalDiscount: 0,\n    };\n}\n\nexport function getOrderMeta(): OrderMetaState {\n    const { token } = getSubmitOrderResponseHeaders();\n    const { token: orderToken, callbackUrl, payment } = getAwaitingOrder();\n\n    return {\n        token,\n        orderToken,\n        callbackUrl,\n        payment,\n    };\n}\n\nexport function getGatewayOrderPayment(): GatewayOrderPayment {\n    return {\n        providerId: 'authorizenet',\n        description: 'credit-card',\n        amount: 190,\n        detail: {\n            step: 'FINALIZE',\n            instructions: '%%OrderID%% text %%OrderID%%',\n        },\n    };\n}\n\nexport function getGiftCertificateOrderPayment(): GiftCertificateOrderPayment {\n    return {\n        providerId: 'giftcertificate',\n        description: 'gc',\n        amount: 7,\n        detail: {\n            code: 'gc',\n            remaining: 3,\n        },\n    };\n}\n\nexport function getOrderState(): OrderState {\n    return {\n        data: getOrder(),\n        meta: getOrderMeta(),\n        errors: {},\n        statuses: {},\n    };\n}\n\nexport function getOrderConsignment(): OrderConsignment {\n    return {\n        shipping: [getOrderShippingConsignment()],\n    };\n}\n\nexport function getOrderShippingConsignment(): OrderShippingConsignment {\n    return {\n        lineItems: [\n            {\n                id: 123,\n            },\n        ],\n        shippingAddressId: 1,\n        firstName: 'firstName',\n        lastName: 'lastName',\n        company: 'companyName',\n        address1: '2802 Skyway Cir',\n        address2: 'Balcony',\n        city: 'Austin',\n        stateOrProvince: 'Texas',\n        postalCode: '78704',\n        country: 'United States',\n        countryCode: 'US',\n        email: 'test@bigcommerce.com',\n        phone: '0410123452',\n        itemsTotal: 1,\n        itemsShipped: 0,\n        shippingMethod: 'Flat Rate',\n        baseCost: 15.5,\n        costExTax: 15.5,\n        costIncTax: 16.7,\n        costTax: 1.2,\n        costTaxClassId: 2,\n        baseHandlingCost: 0,\n        handlingCostExTax: 0,\n        handlingCostIncTax: 0,\n        handlingCostTax: 0,\n        handlingCostTaxClassId: 2,\n        shippingZoneId: 1,\n        shippingZoneName: 'United States',\n        customFields: [\n            {\n                name: 'customerMessage',\n                value: 'foobar',\n            },\n        ],\n        discounts: [],\n    };\n}\n"
  },
  {
    "path": "packages/core/src/order-billing-address/index.ts",
    "content": "export { default as OrderBillingAddressState } from './order-billing-address-state';\nexport { default as orderBillingAddressReducer } from './order-billing-address-reducer';\nexport {\n    default as OrderBillingAddressSelectorFactory,\n    createOrderBillingAddressSelectorFactory,\n} from './order-billing-address-selector';\n\nexport { getOrderBillingAddressState } from './order-billing-address.mock';\n"
  },
  {
    "path": "packages/core/src/order-billing-address/order-billing-address-reducer.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\n\nimport { OrderActionType } from '../order';\nimport { getOrder } from '../order/orders.mock';\n\nimport orderBillingAddressReducer from './order-billing-address-reducer';\n\nimport { OrderBillingAddressState } from '.';\n\ndescribe('orderBillingAddressReducer', () => {\n    let initialState: OrderBillingAddressState;\n\n    beforeEach(() => {\n        initialState = {};\n    });\n\n    it('returns billing address when order loads', () => {\n        const action = createAction(OrderActionType.LoadOrderSucceeded, getOrder());\n        const output = orderBillingAddressReducer(initialState, action);\n\n        expect(output).toEqual({\n            data: action.payload && action.payload.billingAddress,\n        });\n    });\n\n    it('returns billing address for offsite payment', () => {\n        const action = createAction(OrderActionType.LoadOrderPaymentsSucceeded, getOrder());\n        const output = orderBillingAddressReducer(initialState, action);\n\n        expect(output).toEqual({\n            data: action.payload && action.payload.billingAddress,\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/order-billing-address/order-billing-address-reducer.ts",
    "content": "import { Action, combineReducers } from '@bigcommerce/data-store';\n\nimport { replace } from '../common/utility';\nimport { OrderAction, OrderActionType } from '../order';\n\nimport OrderBillingAddressState, {\n    DEFAULT_STATE,\n    OrderBillingAddress,\n} from './order-billing-address-state';\n\nexport default function orderBillingAddressReducer(\n    state: OrderBillingAddressState = DEFAULT_STATE,\n    action: Action,\n): OrderBillingAddressState {\n    const reducer = combineReducers<OrderBillingAddressState>({\n        data: dataReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: OrderBillingAddress | undefined,\n    action: OrderAction,\n): OrderBillingAddress | undefined {\n    switch (action.type) {\n        case OrderActionType.LoadOrderPaymentsSucceeded:\n        case OrderActionType.LoadOrderSucceeded:\n            return replace(data, action.payload && action.payload.billingAddress);\n\n        default:\n            return data;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/order-billing-address/order-billing-address-selector.spec.ts",
    "content": "import { CheckoutStoreState } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\n\nimport OrderBillingAddressSelector, {\n    createOrderBillingAddressSelectorFactory,\n    OrderBillingAddressSelectorFactory,\n} from './order-billing-address-selector';\n\ndescribe('OrderBillingAddressSelector', () => {\n    let orderBillingAddressSelector: OrderBillingAddressSelector;\n    let createOrderCreateBillingAddressSelector: OrderBillingAddressSelectorFactory;\n    let state: CheckoutStoreState;\n\n    beforeEach(() => {\n        createOrderCreateBillingAddressSelector = createOrderBillingAddressSelectorFactory();\n        state = getCheckoutStoreState();\n    });\n\n    it('returns the current billing address from order if present', () => {\n        orderBillingAddressSelector = createOrderCreateBillingAddressSelector(\n            state.orderBillingAddress,\n        );\n\n        expect(orderBillingAddressSelector.getOrderBillingAddress()).toEqual(\n            state.orderBillingAddress.data,\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/order-billing-address/order-billing-address-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport OrderBillingAddressState, {\n    DEFAULT_STATE,\n    OrderBillingAddress,\n} from './order-billing-address-state';\n\nexport default interface OrderBillingAddressSelector {\n    getOrderBillingAddress(): OrderBillingAddress | undefined;\n}\n\nexport type OrderBillingAddressSelectorFactory = (\n    state: OrderBillingAddressState,\n) => OrderBillingAddressSelector;\n\nexport function createOrderBillingAddressSelectorFactory(): OrderBillingAddressSelectorFactory {\n    const getOrderBillingAddress = createSelector(\n        (state: OrderBillingAddressState) => state.data,\n        (data) => () => data,\n    );\n\n    return memoizeOne(\n        (state: OrderBillingAddressState = DEFAULT_STATE): OrderBillingAddressSelector => {\n            return {\n                getOrderBillingAddress: getOrderBillingAddress(state),\n            };\n        },\n    );\n}\n"
  },
  {
    "path": "packages/core/src/order-billing-address/order-billing-address-state.ts",
    "content": "import { Address } from '../address';\n\nexport interface OrderBillingAddress extends Address {\n    email?: string;\n}\n\nexport default interface OrderBillingAddressState {\n    data?: OrderBillingAddress;\n}\n\nexport const DEFAULT_STATE: OrderBillingAddressState = {};\n"
  },
  {
    "path": "packages/core/src/order-billing-address/order-billing-address.mock.ts",
    "content": "import OrderBillingAddressState, { OrderBillingAddress } from './order-billing-address-state';\n\nexport function getOrderBillingAddress(): OrderBillingAddress {\n    return {\n        firstName: 'Test',\n        lastName: 'Tester',\n        email: 'test@bigcommerce.com',\n        company: 'Bigcommerce',\n        address1: '12345 Testing Way',\n        address2: '',\n        city: 'Some City',\n        stateOrProvince: 'California',\n        stateOrProvinceCode: 'CA',\n        country: 'United States',\n        countryCode: 'US',\n        postalCode: '95555',\n        shouldSaveAddress: true,\n        phone: '555-555-5555',\n        customFields: [],\n    };\n}\n\nexport function getOrderBillingAddressState(): OrderBillingAddressState {\n    return {\n        data: getOrderBillingAddress(),\n    };\n}\n"
  },
  {
    "path": "packages/core/src/payment/apply-b2b-company-payment-method-filter.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { CheckoutStore, createCheckoutStore } from '../checkout';\nimport { getCheckout, getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { MissingDataError } from '../common/error/errors';\nimport { getResponse } from '../common/http-request/responses.mock';\n\nimport applyB2bCompanyPaymentMethodFilter from './apply-b2b-company-payment-method-filter';\nimport B2BCompanyPaymentMethodRequestSender, {\n    B2BCompanyPaymentMethodsResponseBody,\n} from './b2b-company-payment-method-request-sender';\nimport { getPaymentMethod } from './payment-methods.mock';\n\ndescribe('applyB2bCompanyPaymentMethodFilter', () => {\n    const companyId = 42;\n    const b2bToken = 'b2b-token-value';\n    const b2bBaseUrl = 'https://api-b2b.bigcommerce.com';\n\n    const allowListResponseBody: B2BCompanyPaymentMethodsResponseBody = {\n        data: [\n            {\n                code: getPaymentMethod().id,\n                name: getPaymentMethod().id,\n                isEnabled: '1',\n                paymentId: 1,\n            },\n        ],\n    };\n\n    let store: CheckoutStore;\n    let state: InternalCheckoutSelectors;\n    let requestSender: B2BCompanyPaymentMethodRequestSender;\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreState());\n        state = store.getState();\n\n        jest.spyOn(state.cart, 'getCart').mockReturnValue({\n            ...getCheckout().cart,\n            companyId,\n        });\n        jest.spyOn(state.customer, 'getCustomer').mockReturnValue({\n            ...getCheckout().customer,\n            isGuest: false,\n        });\n        jest.spyOn(state.b2bToken, 'getToken').mockReturnValue(b2bToken);\n        jest.spyOn(state.config, 'getStoreConfig').mockReturnValue({\n            ...state.config.getStoreConfig()!,\n            b2bApiSettings: { baseUrl: b2bBaseUrl, clientId: 'cid' },\n        });\n\n        requestSender = new B2BCompanyPaymentMethodRequestSender(createRequestSender());\n\n        jest.spyOn(requestSender, 'getB2BCompanyPaymentMethods').mockResolvedValue(\n            getResponse(allowListResponseBody),\n        );\n    });\n\n    it('fetches the allow-list and returns the filtered subset', async () => {\n        const methods = [getPaymentMethod()];\n\n        const result = await applyB2bCompanyPaymentMethodFilter(methods, state, requestSender);\n\n        expect(requestSender.getB2BCompanyPaymentMethods).toHaveBeenCalledWith(\n            companyId,\n            b2bToken,\n            b2bBaseUrl,\n            undefined,\n        );\n        expect(result).toEqual([getPaymentMethod()]);\n    });\n\n    it('forwards request options to the B2B request sender', async () => {\n        const methods = [getPaymentMethod()];\n        const options = { timeout: undefined };\n\n        await applyB2bCompanyPaymentMethodFilter(methods, state, requestSender, options);\n\n        expect(requestSender.getB2BCompanyPaymentMethods).toHaveBeenCalledWith(\n            companyId,\n            b2bToken,\n            b2bBaseUrl,\n            options,\n        );\n    });\n\n    it('throws MissingDataError when the customer is missing', async () => {\n        jest.spyOn(state.customer, 'getCustomer').mockReturnValue(undefined);\n\n        await expect(\n            applyB2bCompanyPaymentMethodFilter([getPaymentMethod()], state, requestSender),\n        ).rejects.toBeInstanceOf(MissingDataError);\n        expect(requestSender.getB2BCompanyPaymentMethods).not.toHaveBeenCalled();\n    });\n\n    it('throws MissingDataError when the customer is a guest', async () => {\n        jest.spyOn(state.customer, 'getCustomer').mockReturnValue({\n            ...getCheckout().customer,\n            isGuest: true,\n        });\n\n        await expect(\n            applyB2bCompanyPaymentMethodFilter([getPaymentMethod()], state, requestSender),\n        ).rejects.toBeInstanceOf(MissingDataError);\n        expect(requestSender.getB2BCompanyPaymentMethods).not.toHaveBeenCalled();\n    });\n\n    it('throws MissingDataError when the B2B token is missing from state', async () => {\n        jest.spyOn(state.b2bToken, 'getToken').mockReturnValue(undefined);\n\n        await expect(\n            applyB2bCompanyPaymentMethodFilter([getPaymentMethod()], state, requestSender),\n        ).rejects.toBeInstanceOf(MissingDataError);\n        expect(requestSender.getB2BCompanyPaymentMethods).not.toHaveBeenCalled();\n    });\n\n    it('throws MissingDataError when companyId is missing', async () => {\n        jest.spyOn(state.cart, 'getCart').mockReturnValue({\n            ...getCheckout().cart,\n            companyId: null,\n        });\n\n        await expect(\n            applyB2bCompanyPaymentMethodFilter([getPaymentMethod()], state, requestSender),\n        ).rejects.toBeInstanceOf(MissingDataError);\n        expect(requestSender.getB2BCompanyPaymentMethods).not.toHaveBeenCalled();\n    });\n\n    it('throws MissingDataError when the B2B base URL is unavailable', async () => {\n        jest.spyOn(state.config, 'getStoreConfig').mockReturnValue({\n            ...state.config.getStoreConfig()!,\n            b2bApiSettings: { baseUrl: '', clientId: '' },\n        });\n\n        await expect(\n            applyB2bCompanyPaymentMethodFilter([getPaymentMethod()], state, requestSender),\n        ).rejects.toBeInstanceOf(MissingDataError);\n        expect(requestSender.getB2BCompanyPaymentMethods).not.toHaveBeenCalled();\n    });\n\n    it('propagates errors from the B2B request sender', async () => {\n        const b2bError = new Error('B2B endpoint unavailable');\n\n        jest.spyOn(requestSender, 'getB2BCompanyPaymentMethods').mockRejectedValue(b2bError);\n\n        await expect(\n            applyB2bCompanyPaymentMethodFilter([getPaymentMethod()], state, requestSender),\n        ).rejects.toBe(b2bError);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/apply-b2b-company-payment-method-filter.ts",
    "content": "// TODO: CHECKOUT-9979 remove this import before delivery\nimport { resolveB2bBaseUrl } from '../b2b-dev-tools';\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\n\nimport B2BCompanyPaymentMethodRequestSender from './b2b-company-payment-method-request-sender';\nimport filterPaymentMethodsByB2BCompanyAllowList from './b2b-company-payment-method-filter-transformer';\nimport PaymentMethod from './payment-method';\n\nexport default async function applyB2bCompanyPaymentMethodFilter(\n    methods: PaymentMethod[],\n    state: InternalCheckoutSelectors,\n    b2bCompanyPaymentMethodRequestSender: B2BCompanyPaymentMethodRequestSender,\n    options?: RequestOptions,\n): Promise<PaymentMethod[]> {\n    const customer = state.customer.getCustomer();\n    const b2bToken = state.b2bToken.getToken();\n    const b2bBaseUrl = resolveB2bBaseUrl(\n        state.config.getStoreConfig()?.b2bApiSettings?.baseUrl ?? '',\n    );\n    const companyId = state.cart.getCart()?.companyId;\n\n    if (!customer || customer.isGuest || !b2bToken || !b2bBaseUrl || !companyId) {\n        throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n    }\n\n    const { body } = await b2bCompanyPaymentMethodRequestSender.getB2BCompanyPaymentMethods(\n        companyId,\n        b2bToken,\n        b2bBaseUrl,\n        options,\n    );\n\n    return filterPaymentMethodsByB2BCompanyAllowList(methods, body);\n}\n"
  },
  {
    "path": "packages/core/src/payment/b2b-company-payment-method-filter-transformer.spec.ts",
    "content": "import filterPaymentMethodsByB2BCompanyAllowList from './b2b-company-payment-method-filter-transformer';\nimport { B2BCompanyPaymentMethodsResponseBody } from './b2b-company-payment-method-request-sender';\nimport PaymentMethod from './payment-method';\n\nfunction makeMethod(id: string): PaymentMethod {\n    return {\n        id,\n        config: {},\n        method: 'credit-card',\n        supportedCards: [],\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\ndescribe('filterPaymentMethodsByB2BCompanyAllowList', () => {\n    it('returns only methods whose id is in the allow-list', () => {\n        const methods = [makeMethod('cheque'), makeMethod('stripev3'), makeMethod('braintree')];\n        const body: B2BCompanyPaymentMethodsResponseBody = {\n            data: [\n                { code: 'cheque', name: 'Check', isEnabled: '1', paymentId: 1 },\n                { code: 'stripev3', name: 'Stripe', isEnabled: '1', paymentId: 2 },\n            ],\n        };\n\n        expect(filterPaymentMethodsByB2BCompanyAllowList(methods, body)).toEqual([\n            makeMethod('cheque'),\n            makeMethod('stripev3'),\n        ]);\n    });\n\n    it('drops methods whose B2B entry is disabled', () => {\n        const methods = [makeMethod('cheque'), makeMethod('stripev3')];\n        const body: B2BCompanyPaymentMethodsResponseBody = {\n            data: [\n                { code: 'cheque', name: 'Check', isEnabled: '1', paymentId: 1 },\n                { code: 'stripev3', name: 'Stripe', isEnabled: '0', paymentId: 2 },\n            ],\n        };\n\n        expect(filterPaymentMethodsByB2BCompanyAllowList(methods, body)).toEqual([\n            makeMethod('cheque'),\n        ]);\n    });\n\n    it('returns an empty list when the allow-list is empty', () => {\n        const methods = [makeMethod('cheque'), makeMethod('stripev3')];\n        const body: B2BCompanyPaymentMethodsResponseBody = { data: [] };\n\n        expect(filterPaymentMethodsByB2BCompanyAllowList(methods, body)).toEqual([]);\n    });\n\n    it('returns an empty list when the intersection is empty', () => {\n        const methods = [makeMethod('cheque'), makeMethod('stripev3')];\n        const body: B2BCompanyPaymentMethodsResponseBody = {\n            data: [{ code: 'braintree', name: 'Braintree', isEnabled: '1', paymentId: 1 }],\n        };\n\n        expect(filterPaymentMethodsByB2BCompanyAllowList(methods, body)).toEqual([]);\n    });\n\n    it('preserves the order of the input methods', () => {\n        const methods = [makeMethod('stripev3'), makeMethod('braintree'), makeMethod('cheque')];\n        const body: B2BCompanyPaymentMethodsResponseBody = {\n            data: [\n                { code: 'cheque', name: 'Check', isEnabled: '1', paymentId: 1 },\n                { code: 'stripev3', name: 'Stripe', isEnabled: '1', paymentId: 2 },\n            ],\n        };\n\n        expect(filterPaymentMethodsByB2BCompanyAllowList(methods, body)).toEqual([\n            makeMethod('stripev3'),\n            makeMethod('cheque'),\n        ]);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/b2b-company-payment-method-filter-transformer.ts",
    "content": "import { B2BCompanyPaymentMethodsResponseBody } from './b2b-company-payment-method-request-sender';\nimport PaymentMethod from './payment-method';\n\n/**\n * Intersects the storefront payment method list against a B2B company's\n * allow-list. Matches on `PaymentMethod.id === b2bMethod.code` and drops\n * disabled methods (`isEnabled !== '1'`).\n */\nexport default function filterPaymentMethodsByB2BCompanyAllowList(\n    methods: PaymentMethod[],\n    body: B2BCompanyPaymentMethodsResponseBody,\n): PaymentMethod[] {\n    const allowedCodes = new Set(body.data.filter((m) => m.isEnabled === '1').map((m) => m.code));\n\n    return methods.filter((method) => allowedCodes.has(method.id));\n}\n"
  },
  {
    "path": "packages/core/src/payment/b2b-company-payment-method-request-sender.spec.ts",
    "content": "import { createRequestSender, createTimeout, RequestSender } from '@bigcommerce/request-sender';\n\nimport { getResponse } from '../common/http-request/responses.mock';\n\nimport B2BCompanyPaymentMethodRequestSender, {\n    B2BCompanyPaymentMethodsResponseBody,\n} from './b2b-company-payment-method-request-sender';\n\ndescribe('B2BCompanyPaymentMethodRequestSender', () => {\n    let requestSender: RequestSender;\n    let b2bCompanyPaymentMethodRequestSender: B2BCompanyPaymentMethodRequestSender;\n\n    const responseBody: B2BCompanyPaymentMethodsResponseBody = {\n        data: [\n            { code: 'cheque', name: 'Check', isEnabled: '1', paymentId: 1 },\n            { code: 'stripev3', name: 'Stripe', isEnabled: '1', paymentId: 2 },\n        ],\n    };\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n\n        jest.spyOn(requestSender, 'get').mockResolvedValue(getResponse(responseBody));\n\n        b2bCompanyPaymentMethodRequestSender = new B2BCompanyPaymentMethodRequestSender(\n            requestSender,\n        );\n    });\n\n    describe('#getB2BCompanyPaymentMethods()', () => {\n        it('calls the company payments endpoint with auth headers', async () => {\n            await b2bCompanyPaymentMethodRequestSender.getB2BCompanyPaymentMethods(\n                42,\n                'b2b-token-value',\n                'https://api-b2b.bigcommerce.com',\n            );\n\n            expect(requestSender.get).toHaveBeenCalledWith(\n                'https://api-b2b.bigcommerce.com/api/v2/companies/42/payments',\n                {\n                    timeout: undefined,\n                    credentials: false,\n                    headers: {\n                        authToken: 'b2b-token-value',\n                        Authorization: 'Bearer b2b-token-value',\n                    },\n                },\n            );\n        });\n\n        it('forwards the request timeout', async () => {\n            const timeout = createTimeout();\n\n            await b2bCompanyPaymentMethodRequestSender.getB2BCompanyPaymentMethods(\n                42,\n                'b2b-token-value',\n                'https://api-b2b.bigcommerce.com',\n                { timeout },\n            );\n\n            expect(requestSender.get).toHaveBeenCalledWith(\n                'https://api-b2b.bigcommerce.com/api/v2/companies/42/payments',\n                expect.objectContaining({ timeout }),\n            );\n        });\n\n        it('uses the provided b2bBaseUrl for the endpoint', async () => {\n            await b2bCompanyPaymentMethodRequestSender.getB2BCompanyPaymentMethods(\n                7,\n                'b2b-token-value',\n                'https://api-b2b.staging.zone',\n            );\n\n            expect(requestSender.get).toHaveBeenCalledWith(\n                'https://api-b2b.staging.zone/api/v2/companies/7/payments',\n                expect.any(Object),\n            );\n        });\n\n        it('returns the response from the request sender', async () => {\n            const result = await b2bCompanyPaymentMethodRequestSender.getB2BCompanyPaymentMethods(\n                42,\n                'b2b-token-value',\n                'https://api-b2b.bigcommerce.com',\n            );\n\n            expect(result.body).toEqual(responseBody);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/b2b-company-payment-method-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { RequestOptions } from '../common/http-request';\n\nexport interface B2BCompanyPaymentMethodsResponseBody {\n    data: Array<{\n        code: string;\n        name: string;\n        isEnabled: '1' | '0';\n        paymentId: number;\n    }>;\n}\n\nexport default class B2BCompanyPaymentMethodRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    async getB2BCompanyPaymentMethods(\n        companyId: number,\n        b2bToken: string,\n        b2bBaseUrl: string,\n        options?: RequestOptions,\n    ): Promise<Response<B2BCompanyPaymentMethodsResponseBody>> {\n        return this._requestSender.get(`${b2bBaseUrl}/api/v2/companies/${companyId}/payments`, {\n            timeout: options?.timeout,\n            credentials: false,\n            headers: {\n                authToken: b2bToken,\n                Authorization: `Bearer ${b2bToken}`,\n            },\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/bigpay-client.d.ts",
    "content": "// TODO: Remove this once we've added type definitions to `@bigcommerce/bigpay-client`\ndeclare module '@bigcommerce/bigpay-client';\n"
  },
  {
    "path": "packages/core/src/payment/create-payment-client.spec.ts",
    "content": "import { createClient } from '@bigcommerce/bigpay-client';\n\nimport { CheckoutStore, createCheckoutStore } from '../checkout';\nimport { getConfigState } from '../config/configs.mock';\nimport { getFormFieldsState } from '../form/form.mock';\n\nimport createPaymentClient from './create-payment-client';\n\ndescribe('createPaymentClient()', () => {\n    let client: any;\n    let store: CheckoutStore;\n\n    beforeEach(() => {\n        store = createCheckoutStore({\n            config: getConfigState(),\n            formFields: getFormFieldsState(),\n        });\n\n        jest.spyOn(store, 'subscribe');\n\n        client = createPaymentClient(store);\n\n        jest.spyOn(client, 'setHost');\n    });\n\n    it('sets the host when the store callback is invoked', () => {\n        store.notifyState();\n\n        expect(client.setHost).toHaveBeenCalledWith('https://bigpay.integration.zone');\n    });\n\n    it('returns an instance of bigpay client', () => {\n        expect(client).toMatchObject(createClient({ host: 'https://bigpay.integration.zone' }));\n    });\n\n    it('subscribes to changes', () => {\n        expect(store.subscribe).toHaveBeenCalledTimes(1);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/create-payment-client.ts",
    "content": "// / <reference path=\"../payment/bigpay-client.d.ts\" />\nimport { createClient as createBigpayClient } from '@bigcommerce/bigpay-client';\n\nimport { CheckoutStore } from '../checkout';\n\nexport default function createPaymentClient(store: CheckoutStore) {\n    const paymentClient = createBigpayClient();\n\n    store.subscribe(\n        (state) => {\n            const config = state.config.getStoreConfig();\n\n            if (config) {\n                paymentClient.setHost(config.paymentSettings.bigpayBaseUrl);\n            }\n        },\n        (state) => state.config.getStoreConfig(),\n    );\n\n    return paymentClient;\n}\n"
  },
  {
    "path": "packages/core/src/payment/create-payment-strategy-registry-v2.spec.ts",
    "content": "import {\n    PaymentIntegrationService,\n    PaymentStrategy,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPaymentStrategyRegistry from './create-payment-strategy-registry-v2';\n\ndescribe('createPaymentStrategyRegistry', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('creates registry with factories pre-registered', () => {\n        const fooStrategy = {} as PaymentStrategy;\n        const registry = createPaymentStrategyRegistry(paymentIntegrationService, {\n            createFooStrategy: toResolvableModule(\n                () => fooStrategy,\n                [{ id: 'foo', gateway: null, type: 'api' }],\n            ),\n        });\n        const strategy = registry.get({ id: 'foo', type: 'api' });\n\n        expect(strategy).toEqual(fooStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/create-payment-strategy-registry-v2.ts",
    "content": "import {\n    isResolvableModule,\n    PaymentIntegrationService,\n    PaymentStrategy,\n    PaymentStrategyFactory,\n    PaymentStrategyResolveId,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ResolveIdRegistry } from '../common/registry';\n\nexport interface PaymentStrategyFactories {\n    [key: string]: PaymentStrategyFactory<PaymentStrategy>;\n}\n\nexport default function createPaymentStrategyRegistry(\n    paymentIntegrationService: PaymentIntegrationService,\n    paymentStrategyFactories: PaymentStrategyFactories,\n    options: { useFallback: boolean } = { useFallback: false },\n): ResolveIdRegistry<PaymentStrategy, PaymentStrategyResolveId> {\n    const { useFallback } = options;\n    const registry = new ResolveIdRegistry<PaymentStrategy, PaymentStrategyResolveId>(useFallback);\n\n    for (const [, createPaymentStrategy] of Object.entries(paymentStrategyFactories)) {\n        if (\n            !isResolvableModule<PaymentStrategyFactory<PaymentStrategy>, PaymentStrategyResolveId>(\n                createPaymentStrategy,\n            )\n        ) {\n            continue;\n        }\n\n        for (const resolverId of createPaymentStrategy.resolveIds) {\n            registry.register(resolverId, () => createPaymentStrategy(paymentIntegrationService));\n        }\n    }\n\n    return registry;\n}\n"
  },
  {
    "path": "packages/core/src/payment/create-payment-strategy-registry.spec.ts",
    "content": "import { createClient as createPaymentClient } from '@bigcommerce/bigpay-client';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { createCheckoutStore } from '../checkout';\n\nimport createPaymentStrategyRegistry from './create-payment-strategy-registry';\nimport PaymentStrategyRegistry from './payment-strategy-registry';\nimport PaymentStrategyType from './payment-strategy-type';\nimport { ConvergePaymentStrategy } from './strategies/converge';\nimport { PPSDKStrategy } from './strategies/ppsdk';\n\ndescribe('CreatePaymentStrategyRegistry', () => {\n    let registry: PaymentStrategyRegistry;\n\n    beforeEach(() => {\n        const store = createCheckoutStore();\n        const requestSender = createRequestSender();\n        const paymentClient = createPaymentClient();\n\n        registry = createPaymentStrategyRegistry(store, paymentClient, requestSender);\n    });\n\n    it('can create a payment strategy registry', () => {\n        expect(registry).toEqual(expect.any(PaymentStrategyRegistry));\n    });\n\n    it('can instantiate converge', () => {\n        const paymentStrategy = registry.get(PaymentStrategyType.CONVERGE);\n\n        expect(paymentStrategy).toBeInstanceOf(ConvergePaymentStrategy);\n    });\n\n    it('can instantiate ppsdk', () => {\n        const paymentStrategy = registry.get(PaymentStrategyType.PPSDK);\n\n        expect(paymentStrategy).toBeInstanceOf(PPSDKStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/create-payment-strategy-registry.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { RequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { CheckoutRequestSender, CheckoutStore, CheckoutValidator } from '../checkout';\nimport { BrowserStorage } from '../common/storage';\nimport { HostedFormFactory } from '../hosted-form';\nimport { OrderActionCreator, OrderRequestSender } from '../order';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../spam-protection';\n\nimport PaymentActionCreator from './payment-action-creator';\nimport PaymentRequestSender from './payment-request-sender';\nimport PaymentRequestTransformer from './payment-request-transformer';\nimport PaymentStrategyRegistry from './payment-strategy-registry';\nimport PaymentStrategyType from './payment-strategy-type';\nimport { ConvergePaymentStrategy } from './strategies/converge';\nimport {\n    createStepHandler,\n    createSubStrategyRegistry,\n    PaymentResumer,\n    PPSDKStrategy,\n} from './strategies/ppsdk';\n\nexport default function createPaymentStrategyRegistry(\n    store: CheckoutStore,\n    paymentClient: any,\n    requestSender: RequestSender,\n) {\n    const registry = new PaymentStrategyRegistry({\n        defaultToken: PaymentStrategyType.CREDIT_CARD,\n    });\n\n    const paymentRequestTransformer = new PaymentRequestTransformer();\n    const paymentRequestSender = new PaymentRequestSender(paymentClient);\n    const checkoutRequestSender = new CheckoutRequestSender(requestSender);\n    const checkoutValidator = new CheckoutValidator(checkoutRequestSender);\n    const orderActionCreator = new OrderActionCreator(\n        new OrderRequestSender(requestSender),\n        checkoutValidator,\n    );\n    const paymentHumanVerificationHandler = new PaymentHumanVerificationHandler(\n        createSpamProtection(createScriptLoader()),\n    );\n    const paymentActionCreator = new PaymentActionCreator(\n        paymentRequestSender,\n        orderActionCreator,\n        paymentRequestTransformer,\n        paymentHumanVerificationHandler,\n    );\n    const formPoster = createFormPoster();\n    const stepHandler = createStepHandler(formPoster, paymentHumanVerificationHandler);\n    const hostedFormFactory = new HostedFormFactory(store);\n\n    registry.register(\n        PaymentStrategyType.CONVERGE,\n        () =>\n            new ConvergePaymentStrategy(\n                store,\n                orderActionCreator,\n                paymentActionCreator,\n                hostedFormFactory,\n                formPoster,\n            ),\n    );\n\n    registry.register(\n        PaymentStrategyType.PPSDK,\n        () =>\n            new PPSDKStrategy(\n                store,\n                orderActionCreator,\n                createSubStrategyRegistry(\n                    store,\n                    orderActionCreator,\n                    requestSender,\n                    stepHandler,\n                    hostedFormFactory,\n                ),\n                new PaymentResumer(requestSender, stepHandler),\n                new BrowserStorage('PPSDK'),\n            ),\n    );\n\n    return registry;\n}\n"
  },
  {
    "path": "packages/core/src/payment/errors/index.ts",
    "content": "export { default as PaymentArgumentInvalidError } from './payment-argument-invalid-error';\nexport { default as PaymentMethodCancelledError } from './payment-method-cancelled-error';\nexport { default as PaymentMethodClientUnavailableError } from './payment-method-client-unavailable-error';\nexport { default as PaymentMethodDeclinedError } from './payment-method-declined-error';\nexport { default as PaymentInstrumentNotValidError } from './payment-instrument-not-valid-error';\nexport {\n    default as PaymentInvalidFormError,\n    PaymentInvalidFormErrorDetails,\n} from './payment-invalid-form-error';\n"
  },
  {
    "path": "packages/core/src/payment/errors/payment-argument-invalid-error.spec.ts",
    "content": "import PaymentArgumentInvalidError from './payment-argument-invalid-error';\n\ndescribe('PaymentArgumentInvalidError', () => {\n    it('returns error name', () => {\n        const error = new PaymentArgumentInvalidError();\n\n        expect(error.name).toBe('PaymentArgumentInvalidError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/errors/payment-argument-invalid-error.ts",
    "content": "import { InvalidArgumentError } from '../../common/error/errors';\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"
  },
  {
    "path": "packages/core/src/payment/errors/payment-instrument-not-valid-error.spec.ts",
    "content": "import PaymentInstrumentNotValidError from './payment-instrument-not-valid-error';\n\ndescribe('PaymentMethodCancelledError', () => {\n    it('returns error name', () => {\n        const error = new PaymentInstrumentNotValidError();\n\n        expect(error.name).toBe('PaymentInstrumentNotValidError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/errors/payment-instrument-not-valid-error.ts",
    "content": "import { InvalidArgumentError } from '../../common/error/errors';\n\n/**\n * This error should be thrown when the selected instrument is not in the list\n * of valid instruments or the type doesn't match the expected type.\n */\nexport default class PaymentInstrumentNotValidError extends InvalidArgumentError {\n    constructor(message?: string) {\n        super(message || 'The selected instrument is either missing or not a valid type.');\n\n        this.name = 'PaymentInstrumentNotValidError';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/errors/payment-invalid-form-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\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"
  },
  {
    "path": "packages/core/src/payment/errors/payment-method-cancelled-error.spec.ts",
    "content": "import PaymentMethodCancelledError from './payment-method-cancelled-error';\n\ndescribe('PaymentMethodCancelledError', () => {\n    it('returns error name', () => {\n        const error = new PaymentMethodCancelledError();\n\n        expect(error.name).toBe('PaymentMethodCancelledError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/errors/payment-method-cancelled-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\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"
  },
  {
    "path": "packages/core/src/payment/errors/payment-method-client-unavailable-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\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"
  },
  {
    "path": "packages/core/src/payment/errors/payment-method-declined-error.spec.ts",
    "content": "import PaymentMethodDeclinedError from './payment-method-declined-error';\n\ndescribe('PaymentMethodDeclinedError', () => {\n    it('returns error name', () => {\n        const error = new PaymentMethodDeclinedError();\n\n        expect(error.name).toBe('PaymentMethodDeclinedError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/errors/payment-method-declined-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if a payment method explicitly returns a declined error and\n * the shopper has to choose a different payment method if they wish to continue\n * their checkout process.\n */\nexport default class PaymentMethodDeclinedError extends StandardError {\n    constructor(message?: string) {\n        super(\n            message ||\n                'The selected payment method was declined. Please select another payment method.',\n        );\n\n        this.name = 'PaymentMethodDeclinedError';\n        this.type = 'payment_declined';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/index.ts",
    "content": "export {\n    BasePaymentInitializeOptions,\n    OrderFinalizeOptions,\n    PaymentInitializeOptions,\n    PaymentRequestOptions,\n} from './payment-request-options';\nexport * from './payment-method-actions';\nexport * from './payment-method-types';\nexport * from './payment-status-types';\n\nexport {\n    default as PaymentAdditionalAction,\n    CardingProtectionActionData,\n} from './payment-additional-action';\nexport { default as createPaymentClient } from './create-payment-client';\nexport { default as createPaymentStrategyRegistry } from './create-payment-strategy-registry';\nexport { default as createPaymentStrategyRegistryV2 } from './create-payment-strategy-registry-v2';\nexport { default as isHostedInstrumentLike } from './is-hosted-intrument-like';\nexport { default as isNonceLike } from './is-nonce-like';\nexport { default as isVaultedInstrument } from './is-vaulted-instrument';\nexport { default as PaymentActionCreator } from './payment-action-creator';\nexport {\n    default as Payment,\n    CreditCardInstrument,\n    WithIdealInstrument,\n    WithCheckoutcomFawryInstrument,\n    WithCheckoutcomSEPAInstrument,\n    HostedCreditCardInstrument,\n    HostedInstrument,\n    HostedVaultedInstrument,\n    VaultedInstrument,\n    PaymentInstrument,\n    PaymentInstrumentMeta,\n    NonceInstrument,\n    ThreeDSecure,\n    ThreeDSecureToken,\n    WithDocumentInstrument,\n    WithMollieIssuerInstrument,\n} from './payment';\nexport { default as B2BCompanyPaymentMethodRequestSender } from './b2b-company-payment-method-request-sender';\nexport { default as PaymentMethod } from './payment-method';\nexport { default as PaymentMethodMeta } from './payment-method-meta';\nexport { default as PaymentMethodConfig } from './payment-method-config';\nexport { default as InitializationStrategy } from './payment-method-initialization-strategy';\nexport { default as PaymentMethodActionCreator } from './payment-method-action-creator';\nexport { default as paymentMethodReducer } from './payment-method-reducer';\nexport { default as PaymentMethodRequestSender } from './payment-method-request-sender';\nexport {\n    default as PaymentMethodSelector,\n    PaymentMethodSelectorFactory,\n    createPaymentMethodSelectorFactory,\n} from './payment-method-selector';\nexport { default as PaymentMethodState } from './payment-method-state';\nexport { default as paymentReducer } from './payment-reducer';\nexport { default as PaymentRequestBody } from './payment-request-body';\nexport { default as PaymentRequestSender } from './payment-request-sender';\nexport { default as PaymentRequestTransformer } from './payment-request-transformer';\nexport { default as PaymentResponse } from './payment-response';\nexport { default as PaymentResponseBody } from './payment-response-body';\nexport {\n    default as PaymentSelector,\n    PaymentSelectorFactory,\n    createPaymentSelectorFactory,\n} from './payment-selector';\nexport { default as PaymentState } from './payment-state';\nexport { default as PaymentStrategyActionCreator } from './payment-strategy-action-creator';\nexport { default as paymentStrategyReducer } from './payment-strategy-reducer';\nexport { default as PaymentStrategyRegistry } from './payment-strategy-registry';\nexport {\n    default as PaymentStrategySelector,\n    PaymentStrategySelectorFactory,\n    createPaymentStrategySelectorFactory,\n} from './payment-strategy-selector';\nexport { default as PaymentStrategyState } from './payment-strategy-state';\nexport { default as PaymentStrategyType } from './payment-strategy-type';\nexport { default as StorefrontStoredCardRequestSender } from './storefront-stored-card-request-sender';\n"
  },
  {
    "path": "packages/core/src/payment/instrument/index.ts",
    "content": "export {\n    default as PaymentInstrument,\n    AccountInstrument,\n    CardInstrument,\n    AchInstrument,\n} from './instrument';\nexport { default as InstrumentActionCreator } from './instrument-action-creator';\nexport { default as InstrumentRequestSender } from './instrument-request-sender';\nexport {\n    default as InstrumentSelector,\n    InstrumentSelectorFactory,\n    createInstrumentSelectorFactory,\n} from './instrument-selector';\nexport { default as InstrumentState } from './instrument-state';\nexport { default as instrumentReducer } from './instrument-reducer';\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-action-creator.spec.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\nimport { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { merge } from 'lodash';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { ErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Address } from '../../address';\nimport { CheckoutStore, CheckoutStoreState, createCheckoutStore } from '../../checkout';\nimport { getCheckoutStoreState } from '../../checkout/checkouts.mock';\nimport { getErrorResponse, getResponse } from '../../common/http-request/responses.mock';\nimport { getConfig, getConfigState } from '../../config/configs.mock';\nimport { getShippingAddress } from '../../shipping/shipping-addresses.mock';\n\nimport { VaultAccessToken } from './instrument';\nimport InstrumentActionCreator from './instrument-action-creator';\nimport { InstrumentActionType } from './instrument-actions';\nimport InstrumentRequestSender from './instrument-request-sender';\nimport { InstrumentsResponseBody } from './instrument-response-body';\nimport {\n    deleteInstrumentResponseBody,\n    getInstrumentsMeta,\n    getInstrumentsState,\n    getLoadInstrumentsResponseBody,\n    getVaultAccessToken,\n} from './instrument.mock';\n\ndescribe('InstrumentActionCreator', () => {\n    const bigpayClient: any = {};\n    let instrumentActionCreator: InstrumentActionCreator;\n    let instrumentRequestSender: InstrumentRequestSender;\n    let vaultAccessTokenResponse: Response<VaultAccessToken>;\n    let loadInstrumentsResponse: Response<InstrumentsResponseBody>;\n    let deleteInstrumentResponse: Response<InstrumentsResponseBody>;\n    let errorResponse: Response<ErrorResponseBody>;\n    let state: CheckoutStoreState;\n    let store: CheckoutStore;\n    let storeId: string;\n    let customerId: number;\n    let instrumentId: string;\n    let currencyCode: string;\n    let shippingAddress: Address;\n    let shippingAddresses: Address[];\n    let vaultAccessExpiry: number;\n    let vaultAccessToken: string;\n\n    beforeEach(() => {\n        instrumentRequestSender = new InstrumentRequestSender(bigpayClient, createRequestSender());\n        errorResponse = getErrorResponse();\n        vaultAccessTokenResponse = getResponse(getVaultAccessToken());\n        loadInstrumentsResponse = getResponse(getLoadInstrumentsResponseBody());\n        deleteInstrumentResponse = getResponse(deleteInstrumentResponseBody());\n\n        jest.spyOn(instrumentRequestSender, 'getVaultAccessToken').mockResolvedValue(\n            vaultAccessTokenResponse,\n        );\n        jest.spyOn(instrumentRequestSender, 'loadInstruments').mockResolvedValue(\n            loadInstrumentsResponse,\n        );\n        jest.spyOn(instrumentRequestSender, 'deleteInstrument').mockResolvedValue(\n            deleteInstrumentResponse,\n        );\n\n        instrumentActionCreator = new InstrumentActionCreator(instrumentRequestSender);\n\n        state = getCheckoutStoreState();\n        store = createCheckoutStore(state);\n\n        // tslint:disable-next-line:no-non-null-assertion\n        storeId = state.config.data!.storeConfig.storeProfile.storeId;\n        // tslint:disable-next-line:no-non-null-assertion\n        customerId = state.cart.data!.customerId;\n        shippingAddress = getShippingAddress();\n        // shippingAddresses equivalent to the consignments mock\n        shippingAddresses = [shippingAddress, shippingAddress];\n        instrumentId = '123';\n        currencyCode = 'USD';\n\n        const instrumentsMeta = getInstrumentsMeta();\n\n        vaultAccessToken = instrumentsMeta.vaultAccessToken;\n        vaultAccessExpiry = instrumentsMeta.vaultAccessExpiry;\n    });\n\n    describe('#loadInstruments()', () => {\n        it('sends a request to get a list of instruments using shopper currency', async () => {\n            await from(instrumentActionCreator.loadInstruments()(store)).toPromise();\n\n            expect(instrumentRequestSender.getVaultAccessToken).toHaveBeenCalled();\n            expect(instrumentRequestSender.loadInstruments).toHaveBeenCalledWith(\n                { storeId, customerId, currencyCode, authToken: vaultAccessToken },\n                shippingAddresses,\n            );\n        });\n\n        it('sends a request to get a list of instruments using default currency when shopper currency is not transactional', async () => {\n            store = createCheckoutStore({\n                ...state,\n                config: merge({}, getConfigState(), {\n                    data: {\n                        ...getConfig(),\n                        storeConfig: { shopperCurrency: { code: 'AUD', isTransactional: false } },\n                    },\n                }),\n            });\n\n            await from(instrumentActionCreator.loadInstruments()(store)).toPromise();\n\n            expect(instrumentRequestSender.getVaultAccessToken).toHaveBeenCalled();\n            expect(instrumentRequestSender.loadInstruments).toHaveBeenCalledWith(\n                { storeId, customerId, currencyCode, authToken: vaultAccessToken },\n                shippingAddresses,\n            );\n        });\n\n        it('does not send a request to get a list of instruments if valid token is supplied', async () => {\n            store = createCheckoutStore({\n                ...state,\n                instruments: {\n                    ...getInstrumentsState(),\n                    meta: {\n                        ...getInstrumentsMeta(),\n                        vaultAccessExpiry: 1816097476098,\n                    },\n                },\n            });\n\n            await from(instrumentActionCreator.loadInstruments()(store)).toPromise();\n\n            expect(instrumentRequestSender.getVaultAccessToken).not.toHaveBeenCalled();\n            expect(instrumentRequestSender.loadInstruments).toHaveBeenCalledWith(\n                { storeId, customerId, currencyCode, authToken: vaultAccessToken },\n                shippingAddresses,\n            );\n        });\n\n        it('emits actions if able to load instruments', async () => {\n            const actions = await from(instrumentActionCreator.loadInstruments()(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: InstrumentActionType.LoadInstrumentsRequested,\n                },\n                {\n                    type: InstrumentActionType.LoadInstrumentsSucceeded,\n                    meta: { vaultAccessExpiry, vaultAccessToken },\n                    payload: loadInstrumentsResponse.body,\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to load instruments', async () => {\n            jest.spyOn(instrumentRequestSender, 'loadInstruments').mockRejectedValue(errorResponse);\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(instrumentActionCreator.loadInstruments()(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: InstrumentActionType.LoadInstrumentsRequested },\n                {\n                    type: InstrumentActionType.LoadInstrumentsFailed,\n                    payload: errorResponse,\n                    error: true,\n                },\n            ]);\n        });\n\n        it('emits Missing Data Error if data is missing from the date', async () => {\n            store = createCheckoutStore();\n\n            try {\n                await from(instrumentActionCreator.loadInstruments()(store))\n                    .pipe(toArray())\n                    .toPromise();\n            } catch (e) {\n                expect((e as Action).type).toBe('missing_data');\n            }\n        });\n    });\n\n    describe('#deleteInstrument()', () => {\n        it('deletes an instrument', async () => {\n            await from(instrumentActionCreator.deleteInstrument(instrumentId)(store)).toPromise();\n\n            expect(instrumentRequestSender.getVaultAccessToken).toHaveBeenCalled();\n            expect(instrumentRequestSender.deleteInstrument).toHaveBeenCalledWith(\n                {\n                    storeId,\n                    customerId,\n                    currencyCode,\n                    authToken: vaultAccessToken,\n                },\n                instrumentId,\n            );\n        });\n\n        it('does not send a request to get a list of instruments if valid token is supplied', async () => {\n            store = createCheckoutStore({\n                ...state,\n                instruments: {\n                    ...getInstrumentsState(),\n                    meta: {\n                        ...getInstrumentsMeta(),\n                        vaultAccessExpiry: 1816097476098,\n                    },\n                },\n            });\n\n            await from(instrumentActionCreator.deleteInstrument(instrumentId)(store)).toPromise();\n\n            expect(instrumentRequestSender.getVaultAccessToken).not.toHaveBeenCalled();\n            expect(instrumentRequestSender.deleteInstrument).toHaveBeenCalledWith(\n                {\n                    storeId,\n                    customerId,\n                    currencyCode,\n                    authToken: vaultAccessToken,\n                },\n                instrumentId,\n            );\n        });\n\n        it('emits actions if able to delete an instrument', async () => {\n            const actions = await from(\n                instrumentActionCreator.deleteInstrument(instrumentId)(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: InstrumentActionType.DeleteInstrumentRequested,\n                    meta: { instrumentId },\n                },\n                {\n                    type: InstrumentActionType.DeleteInstrumentSucceeded,\n                    meta: { instrumentId, vaultAccessExpiry, vaultAccessToken },\n                    payload: deleteInstrumentResponse.body,\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to delete an instrument', async () => {\n            jest.spyOn(instrumentRequestSender, 'deleteInstrument').mockRejectedValue(\n                errorResponse,\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(\n                instrumentActionCreator.deleteInstrument(instrumentId)(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: InstrumentActionType.DeleteInstrumentRequested,\n                    meta: { instrumentId },\n                },\n                {\n                    type: InstrumentActionType.DeleteInstrumentFailed,\n                    meta: { instrumentId },\n                    payload: errorResponse,\n                    error: true,\n                },\n            ]);\n        });\n\n        it('emits Missing Data Error if data is missing from the date', async () => {\n            store = createCheckoutStore({});\n\n            try {\n                await from(instrumentActionCreator.deleteInstrument('')(store))\n                    .pipe(toArray())\n                    .toPromise();\n            } catch (e) {\n                expect((e as Action).type).toBe('missing_data');\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-action-creator.ts",
    "content": "import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { Observable, Observer } from 'rxjs';\n\nimport { Address } from '../../address';\nimport { InternalCheckoutSelectors, ReadableCheckoutStore } from '../../checkout';\nimport { addMinutes, isFuture } from '../../common/date-time';\nimport { MissingDataError, MissingDataErrorType } from '../../common/error/errors';\n\nimport { SessionContext, VaultAccessToken } from './instrument';\nimport {\n    DeleteInstrumentAction,\n    InstrumentActionType,\n    LoadInstrumentsAction,\n} from './instrument-actions';\nimport InstrumentRequestSender from './instrument-request-sender';\n\nexport default class InstrumentActionCreator {\n    constructor(private _instrumentRequestSender: InstrumentRequestSender) {}\n\n    loadInstruments(): ThunkAction<LoadInstrumentsAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<LoadInstrumentsAction>) => {\n                observer.next(createAction(InstrumentActionType.LoadInstrumentsRequested));\n\n                const session = this._getSessionContext(store);\n                const token = this._getCurrentAccessToken(store);\n                const shippingAddress = this._getShippingAddress(store);\n\n                return this._getValidAccessToken(token)\n                    .then((currentToken) =>\n                        this._instrumentRequestSender\n                            .loadInstruments(\n                                {\n                                    ...session,\n                                    authToken: currentToken.vaultAccessToken,\n                                },\n                                shippingAddress,\n                            )\n                            .then(({ body }) => {\n                                observer.next(\n                                    createAction(\n                                        InstrumentActionType.LoadInstrumentsSucceeded,\n                                        body,\n                                        currentToken,\n                                    ),\n                                );\n                                observer.complete();\n                            }),\n                    )\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(InstrumentActionType.LoadInstrumentsFailed, response),\n                        );\n                    });\n            });\n    }\n\n    deleteInstrument(\n        instrumentId: string,\n    ): ThunkAction<DeleteInstrumentAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<DeleteInstrumentAction>) => {\n                observer.next(\n                    createAction(InstrumentActionType.DeleteInstrumentRequested, undefined, {\n                        instrumentId,\n                    }),\n                );\n\n                const session = this._getSessionContext(store);\n                const token = this._getCurrentAccessToken(store);\n\n                return this._getValidAccessToken(token)\n                    .then((currentToken) =>\n                        this._instrumentRequestSender\n                            .deleteInstrument(\n                                {\n                                    ...session,\n                                    authToken: currentToken.vaultAccessToken,\n                                },\n                                instrumentId,\n                            )\n                            .then(({ body }) => {\n                                observer.next(\n                                    createAction(\n                                        InstrumentActionType.DeleteInstrumentSucceeded,\n                                        body,\n                                        {\n                                            instrumentId,\n                                            ...currentToken,\n                                        },\n                                    ),\n                                );\n                                observer.complete();\n                            }),\n                    )\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                InstrumentActionType.DeleteInstrumentFailed,\n                                response,\n                                { instrumentId },\n                            ),\n                        );\n                    });\n            });\n    }\n\n    private _isValidVaultAccessToken(token: VaultAccessToken): boolean {\n        if (!token || !token.vaultAccessToken) {\n            return false;\n        }\n\n        const expiryBuffer = 2;\n        const expiry = addMinutes(new Date(token.vaultAccessExpiry), expiryBuffer);\n\n        return isFuture(expiry);\n    }\n\n    private _getCurrentAccessToken(store: ReadableCheckoutStore): VaultAccessToken | undefined {\n        const { instruments } = store.getState();\n        const meta = instruments.getInstrumentsMeta();\n\n        if (!meta) {\n            return;\n        }\n\n        return {\n            vaultAccessToken: meta.vaultAccessToken,\n            vaultAccessExpiry: meta.vaultAccessExpiry,\n        };\n    }\n\n    private _getValidAccessToken(token?: VaultAccessToken): Promise<VaultAccessToken> {\n        return token && this._isValidVaultAccessToken(token)\n            ? Promise.resolve(token)\n            : this._instrumentRequestSender.getVaultAccessToken().then(({ body }) => body);\n    }\n\n    private _getShippingAddress(store: ReadableCheckoutStore): Address | Address[] | undefined {\n        const state = store.getState();\n        const addresses = state.shippingAddress.getShippingAddresses();\n\n        return addresses.length > 1 ? addresses : state.shippingAddress.getShippingAddress();\n    }\n\n    private _getSessionContext(store: ReadableCheckoutStore): SessionContext {\n        const state = store.getState();\n        const config = state.config.getStoreConfig();\n        const cart = state.cart.getCart();\n\n        if (!config) {\n            throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n        }\n\n        if (!cart) {\n            throw new MissingDataError(MissingDataErrorType.MissingCart);\n        }\n\n        const { customerId } = cart;\n        const { storeId } = config.storeProfile;\n        const { code } = config.shopperCurrency.isTransactional\n            ? config.shopperCurrency\n            : config.currency;\n\n        return {\n            customerId,\n            storeId,\n            currencyCode: code,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { VaultAccessToken } from './instrument';\nimport { InstrumentsResponseBody } from './instrument-response-body';\n\nexport enum InstrumentActionType {\n    LoadInstrumentsRequested = 'LOAD_INSTRUMENTS_REQUESTED',\n    LoadInstrumentsSucceeded = 'LOAD_INSTRUMENTS_SUCCEEDED',\n    LoadInstrumentsFailed = 'LOAD_INSTRUMENTS_FAILED',\n\n    DeleteInstrumentRequested = 'DELETE_INSTRUMENT_REQUESTED',\n    DeleteInstrumentSucceeded = 'DELETE_INSTRUMENT_SUCCEEDED',\n    DeleteInstrumentFailed = 'DELETE_INSTRUMENT_FAILED',\n}\n\nexport type InstrumentAction = LoadInstrumentsAction | DeleteInstrumentAction;\n\nexport type LoadInstrumentsAction =\n    | LoadInstrumentsRequestedAction\n    | LoadInstrumentsSucceededAction\n    | LoadInstrumentsFailedAction;\n\nexport type DeleteInstrumentAction =\n    | DeleteInstrumentRequestedAction\n    | DeleteInstrumentSucceededAction\n    | DeleteInstrumentFailedAction;\n\nexport interface LoadInstrumentsRequestedAction extends Action {\n    type: InstrumentActionType.LoadInstrumentsRequested;\n}\n\nexport interface LoadInstrumentsSucceededAction\n    extends Action<InstrumentsResponseBody, VaultAccessToken> {\n    type: InstrumentActionType.LoadInstrumentsSucceeded;\n}\n\nexport interface LoadInstrumentsFailedAction extends Action<Error> {\n    type: InstrumentActionType.LoadInstrumentsFailed;\n}\n\nexport interface DeleteInstrumentRequestedAction extends Action {\n    type: InstrumentActionType.DeleteInstrumentRequested;\n}\n\nexport interface DeleteInstrumentSucceededAction\n    extends Action<InstrumentsResponseBody, VaultAccessToken & { instrumentId: string }> {\n    type: InstrumentActionType.DeleteInstrumentSucceeded;\n}\n\nexport interface DeleteInstrumentFailedAction extends Action<Error> {\n    type: InstrumentActionType.DeleteInstrumentFailed;\n}\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-reducer.spec.ts",
    "content": "import { createRequestErrorFactory } from '../../common/error';\nimport { getErrorResponse } from '../../common/http-request/responses.mock';\n\nimport { InstrumentAction, InstrumentActionType } from './instrument-actions';\nimport instrumentReducer from './instrument-reducer';\nimport InstrumentState from './instrument-state';\nimport {\n    deleteInstrumentResponseBody,\n    getInstruments,\n    getInstrumentsMeta,\n    getLoadInstrumentsResponseBody,\n} from './instrument.mock';\n\ndescribe('instrumentReducer()', () => {\n    let initialState: InstrumentState;\n\n    beforeEach(() => {\n        initialState = {\n            data: [],\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    it('returns new state when loading instruments', () => {\n        const action: InstrumentAction = {\n            type: InstrumentActionType.LoadInstrumentsRequested,\n        };\n\n        expect(instrumentReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: {},\n            statuses: { isLoading: true },\n        });\n    });\n\n    it('returns new state when instruments are loaded', () => {\n        const action: InstrumentAction = {\n            type: InstrumentActionType.LoadInstrumentsSucceeded,\n            meta: getInstrumentsMeta(),\n            payload: getLoadInstrumentsResponseBody(),\n        };\n\n        expect(instrumentReducer(initialState, action)).toEqual({\n            ...initialState,\n            // tslint:disable-next-line:no-non-null-assertion\n            data: action.payload!.vaultedInstruments,\n            meta: action.meta,\n            errors: { loadError: undefined },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns new state when instruments cannot be loaded', () => {\n        const action: InstrumentAction = {\n            type: InstrumentActionType.LoadInstrumentsFailed,\n            payload: createRequestErrorFactory().createError(getErrorResponse()),\n        };\n\n        expect(instrumentReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: { loadError: action.payload },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns new state when deleting instruments', () => {\n        const action: InstrumentAction = {\n            type: InstrumentActionType.DeleteInstrumentRequested,\n            meta: { instrumentId: '123' },\n        };\n\n        expect(instrumentReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: {},\n            statuses: {\n                isDeleting: true,\n                deletingInstrument: '123',\n            },\n        });\n    });\n\n    it('returns new state when instruments are deleted', () => {\n        const initialInstruments = getInstruments();\n\n        initialState.data = initialInstruments;\n\n        const action: InstrumentAction = {\n            type: InstrumentActionType.DeleteInstrumentSucceeded,\n            meta: {\n                ...getInstrumentsMeta(),\n                instrumentId: initialInstruments[0].bigpayToken,\n            },\n            payload: deleteInstrumentResponseBody(),\n        };\n\n        expect(instrumentReducer(initialState, action)).toEqual({\n            ...initialState,\n            data: initialInstruments,\n            meta: action.meta,\n            errors: { deleteError: undefined },\n            statuses: {\n                isDeleting: false,\n                deletingInstrument: undefined,\n            },\n        });\n    });\n\n    it('returns new state when instruments cannot be deleted', () => {\n        const action: InstrumentAction = {\n            type: InstrumentActionType.DeleteInstrumentFailed,\n            meta: { instrumentId: '123' },\n            payload: createRequestErrorFactory().createError(getErrorResponse()),\n        };\n\n        expect(instrumentReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: {\n                deleteError: action.payload,\n                failedInstrument: '123',\n            },\n            statuses: {\n                isDeleting: false,\n                deletingInstrument: undefined,\n            },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../../common/error';\nimport { arrayReplace, objectMerge, objectSet } from '../../common/utility';\n\nimport PaymentInstrument from './instrument';\nimport { InstrumentAction, InstrumentActionType } from './instrument-actions';\nimport InstrumentState, {\n    DEFAULT_STATE,\n    InstrumentErrorState,\n    InstrumentMeta,\n    InstrumentStatusState,\n} from './instrument-state';\n\nexport default function instrumentReducer(\n    state: InstrumentState = DEFAULT_STATE,\n    action: Action,\n): InstrumentState {\n    const reducer = combineReducers<InstrumentState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        meta: metaReducer,\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: PaymentInstrument[] = DEFAULT_STATE.data,\n    action: InstrumentAction,\n): PaymentInstrument[] {\n    switch (action.type) {\n        case InstrumentActionType.LoadInstrumentsSucceeded:\n            return arrayReplace(data, (action.payload && action.payload.vaultedInstruments) || []);\n\n        default:\n            return data;\n    }\n}\n\nfunction metaReducer(\n    meta: InstrumentMeta | undefined,\n    action: InstrumentAction,\n): InstrumentMeta | undefined {\n    switch (action.type) {\n        case InstrumentActionType.LoadInstrumentsSucceeded:\n        case InstrumentActionType.DeleteInstrumentSucceeded:\n            return objectMerge(meta, action.meta);\n\n        default:\n            return meta;\n    }\n}\n\nfunction errorsReducer(\n    errors: InstrumentErrorState = DEFAULT_STATE.errors,\n    action: InstrumentAction,\n): InstrumentErrorState {\n    switch (action.type) {\n        case InstrumentActionType.LoadInstrumentsRequested:\n        case InstrumentActionType.LoadInstrumentsSucceeded:\n            return objectSet(errors, 'loadError', undefined);\n\n        case InstrumentActionType.DeleteInstrumentRequested:\n        case InstrumentActionType.DeleteInstrumentSucceeded:\n            return objectMerge(errors, {\n                deleteError: undefined,\n                failedInstrument: undefined,\n            });\n\n        case InstrumentActionType.LoadInstrumentsFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        case InstrumentActionType.DeleteInstrumentFailed:\n            return objectMerge(errors, {\n                deleteError: action.payload,\n                failedInstrument: action.meta.instrumentId,\n            });\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: InstrumentStatusState = DEFAULT_STATE.statuses,\n    action: InstrumentAction,\n): InstrumentStatusState {\n    switch (action.type) {\n        case InstrumentActionType.LoadInstrumentsRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case InstrumentActionType.DeleteInstrumentRequested:\n            return objectMerge(statuses, {\n                isDeleting: true,\n                deletingInstrument: action.meta.instrumentId,\n            });\n\n        case InstrumentActionType.LoadInstrumentsSucceeded:\n        case InstrumentActionType.LoadInstrumentsFailed:\n            return objectSet(statuses, 'isLoading', false);\n\n        case InstrumentActionType.DeleteInstrumentSucceeded:\n        case InstrumentActionType.DeleteInstrumentFailed:\n            return objectMerge(statuses, {\n                isDeleting: false,\n                deletingInstrument: undefined,\n            });\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-request-sender.spec.ts",
    "content": "import {\n    createRequestSender,\n    createTimeout,\n    RequestSender,\n    Response,\n} from '@bigcommerce/request-sender';\nimport { omit } from 'lodash';\n\nimport { Address } from '../../address';\nimport { getPaymentResponse, getResponse } from '../../common/http-request/responses.mock';\nimport { getShippingAddress as getInternalShippingAddress } from '../../shipping/internal-shipping-addresses.mock';\nimport { getShippingAddress } from '../../shipping/shipping-addresses.mock';\n\nimport { InstrumentRequestContext } from './instrument';\nimport InstrumentRequestSender from './instrument-request-sender';\nimport { InternalVaultAccessTokenResponseBody } from './instrument-response-body';\nimport {\n    deleteInstrumentResponseBody,\n    getErrorInstrumentResponseBody,\n    getInstruments,\n    getInternalInstrumentsResponseBody,\n    getLoadInstrumentsResponseBody,\n    getVaultAccessToken,\n    getVaultAccessTokenResponseBody,\n    instrumentRequestContext,\n} from './instrument.mock';\n\ndescribe('InstrumentRequestSender', () => {\n    let client: any;\n    let instrumentRequestSender: InstrumentRequestSender;\n    let requestContext: InstrumentRequestContext;\n    let requestSender: RequestSender;\n    let shippingAddress: Address;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n\n        client = {\n            getVaultAccessToken: jest.fn((_, callback) => callback()),\n            loadInstruments: jest.fn((_, callback) => callback()),\n            loadInstrumentsWithAddress: jest.fn((_, callback) => callback()),\n            deleteShopperInstrument: jest.fn((_, callback) => callback()),\n        };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve());\n        requestContext = instrumentRequestContext();\n        instrumentRequestSender = new InstrumentRequestSender(client, requestSender);\n        shippingAddress = getShippingAddress();\n    });\n\n    describe('#getVaultAccessToken()', () => {\n        let response: Response<InternalVaultAccessTokenResponseBody>;\n\n        beforeEach(() => {\n            response = getResponse(getVaultAccessTokenResponseBody());\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('loads vault access token', async () => {\n            const output = await instrumentRequestSender.getVaultAccessToken();\n\n            expect(output).toEqual({\n                ...response,\n                body: getVaultAccessToken(),\n            });\n            expect(requestSender.get).toHaveBeenCalledWith(expect.any(String), {\n                timeout: undefined,\n            });\n        });\n\n        it('loads vault access token with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const output = await instrumentRequestSender.getVaultAccessToken(options);\n\n            expect(output).toEqual({\n                ...response,\n                body: {\n                    vaultAccessToken: 'vault-token',\n                    vaultAccessExpiry: 1516097476098,\n                },\n            });\n            expect(requestSender.get).toHaveBeenCalledWith(expect.any(String), options);\n        });\n    });\n\n    describe('#loadInstruments()', () => {\n        it('returns instruments if request is successful', async () => {\n            client.loadInstruments = jest.fn((_, callback) =>\n                callback(null, getPaymentResponse(getInternalInstrumentsResponseBody())),\n            );\n\n            const response = await instrumentRequestSender.loadInstruments(requestContext);\n\n            expect(response).toEqual(\n                getResponse({\n                    vaultedInstruments: getInstruments(),\n                }),\n            );\n\n            expect(client.loadInstrumentsWithAddress).not.toHaveBeenCalled();\n            expect(client.loadInstruments).toHaveBeenCalledWith(\n                requestContext,\n                expect.any(Function),\n            );\n        });\n\n        it('returns error response if request is unsuccessful', async () => {\n            client.loadInstruments = jest.fn((_, callback) =>\n                callback(\n                    getPaymentResponse(getErrorInstrumentResponseBody(), {}, 400, 'Bad Request'),\n                ),\n            );\n\n            try {\n                await instrumentRequestSender.loadInstruments(requestContext);\n            } catch (error) {\n                expect(error).toEqual(\n                    getResponse(getErrorInstrumentResponseBody(), {}, 400, 'Bad Request'),\n                );\n            }\n        });\n\n        it('returns loads trusted instruments if shipping address is available', async () => {\n            client.loadInstrumentsWithAddress = jest.fn((_, callback) =>\n                callback(null, getPaymentResponse(getInternalInstrumentsResponseBody())),\n            );\n\n            const response = await instrumentRequestSender.loadInstruments(\n                requestContext,\n                shippingAddress,\n            );\n\n            expect(response).toEqual(getResponse(getLoadInstrumentsResponseBody()));\n\n            expect(client.loadInstruments).not.toHaveBeenCalled();\n            expect(client.loadInstrumentsWithAddress).toHaveBeenCalledWith(\n                {\n                    ...requestContext,\n                    shippingAddress: omit(getInternalShippingAddress(), 'id'),\n                },\n                expect.any(Function),\n            );\n        });\n\n        it('returns error response if request is unsuccessful when passing shipping address', async () => {\n            client.loadInstrumentsWithAddress = jest.fn((_, callback) =>\n                callback(\n                    getPaymentResponse(getErrorInstrumentResponseBody(), {}, 400, 'Bad Request'),\n                ),\n            );\n\n            try {\n                await instrumentRequestSender.loadInstruments(requestContext, shippingAddress);\n            } catch (error) {\n                expect(error).toEqual(\n                    getResponse(getErrorInstrumentResponseBody(), {}, 400, 'Bad Request'),\n                );\n            }\n        });\n    });\n\n    describe('#deleteInstrument()', () => {\n        it('deletes an instrument if request is successful', async () => {\n            client.deleteShopperInstrument = jest.fn((_, callback) =>\n                callback(null, getPaymentResponse(deleteInstrumentResponseBody())),\n            );\n\n            const instrumentId = '123';\n            const response = await instrumentRequestSender.deleteInstrument(\n                requestContext,\n                instrumentId,\n            );\n\n            expect(response).toEqual(getResponse(deleteInstrumentResponseBody()));\n            expect(client.deleteShopperInstrument).toHaveBeenCalledWith(\n                {\n                    ...requestContext,\n                    instrumentId,\n                },\n                expect.any(Function),\n            );\n        });\n\n        it('returns error response if request is unsuccessful', async () => {\n            client.deleteShopperInstrument = jest.fn((_, callback) =>\n                callback(\n                    getPaymentResponse(getErrorInstrumentResponseBody(), {}, 400, 'Bad Request'),\n                ),\n            );\n\n            try {\n                await instrumentRequestSender.deleteInstrument(requestContext, '');\n            } catch (error) {\n                expect(error).toEqual(\n                    getResponse(getErrorInstrumentResponseBody(), {}, 400, 'Bad Request'),\n                );\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { Address, mapToInternalAddress } from '../../address';\nimport { RequestOptions } from '../../common/http-request';\nimport PaymentResponse from '../payment-response';\n\nimport { InstrumentRequestContext, VaultAccessToken } from './instrument';\nimport {\n    InstrumentsResponseBody,\n    InternalInstrumentErrorResponseBody,\n    InternalInstrumentsResponseBody,\n    InternalVaultAccessTokenResponseBody,\n} from './instrument-response-body';\nimport InstrumentResponseTransformer from './instrument-response-transformer';\n\nexport default class InstrumentRequestSender {\n    private _transformer: InstrumentResponseTransformer;\n\n    constructor(private _client: any, private _requestSender: RequestSender) {\n        this._transformer = new InstrumentResponseTransformer();\n    }\n\n    getVaultAccessToken({ timeout }: RequestOptions = {}): Promise<Response<VaultAccessToken>> {\n        const url = '/internalapi/v1/checkout/payments/vault-access-token';\n\n        return this._requestSender\n            .get<InternalVaultAccessTokenResponseBody>(url, { timeout })\n            .then((response) => ({\n                ...response,\n                body: {\n                    vaultAccessToken: response.body.data.token,\n                    vaultAccessExpiry: response.body.data.expires_at,\n                },\n            }));\n    }\n\n    loadInstruments(\n        requestContext: InstrumentRequestContext,\n        shippingAddress?: Address | Address[],\n    ): Promise<Response<InstrumentsResponseBody>> {\n        return shippingAddress\n            ? this._loadInstrumentsWithAddress(requestContext, shippingAddress)\n            : this._loadInstruments(requestContext);\n    }\n\n    deleteInstrument(\n        requestContext: InstrumentRequestContext,\n        instrumentId: string,\n    ): Promise<Response<InstrumentsResponseBody>> {\n        const payload = {\n            ...requestContext,\n            instrumentId,\n        };\n\n        return new Promise((resolve, reject) => {\n            this._client.deleteShopperInstrument(\n                payload,\n                (\n                    errorResponse: PaymentResponse<InternalInstrumentErrorResponseBody>,\n                    response: PaymentResponse<InternalInstrumentsResponseBody>,\n                ) =>\n                    errorResponse\n                        ? reject(this._transformer.transformErrorResponse(errorResponse))\n                        : resolve(this._transformer.transformResponse(response)),\n            );\n        });\n    }\n\n    private _loadInstruments(\n        requestContext: InstrumentRequestContext,\n    ): Promise<Response<InstrumentsResponseBody>> {\n        return new Promise((resolve, reject) => {\n            this._client.loadInstruments(\n                requestContext,\n                (\n                    errorResponse: PaymentResponse<InternalInstrumentErrorResponseBody>,\n                    response: PaymentResponse<InternalInstrumentsResponseBody>,\n                ) =>\n                    errorResponse\n                        ? reject(this._transformer.transformErrorResponse(errorResponse))\n                        : resolve(this._transformer.transformResponse(response)),\n            );\n        });\n    }\n\n    private _loadInstrumentsWithAddress(\n        requestContext: InstrumentRequestContext,\n        shippingAddress: Address | Address[],\n    ): Promise<Response<InstrumentsResponseBody>> {\n        const payload = {\n            ...requestContext,\n            shippingAddress: Array.isArray(shippingAddress)\n                ? shippingAddress.map((address) => mapToInternalAddress(address))\n                : mapToInternalAddress(shippingAddress),\n        };\n\n        return new Promise((resolve, reject) => {\n            this._client.loadInstrumentsWithAddress(\n                payload,\n                (\n                    errorResponse: PaymentResponse<InternalInstrumentErrorResponseBody>,\n                    response: PaymentResponse<InternalInstrumentsResponseBody>,\n                ) =>\n                    errorResponse\n                        ? reject(this._transformer.transformErrorResponse(errorResponse))\n                        : resolve(this._transformer.transformResponse(response)),\n            );\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-response-body.ts",
    "content": "import PaymentInstrument, { UntrustedShippingCardVerificationType } from './instrument';\n\nexport interface InstrumentError {\n    code: number;\n    message: string;\n}\n\nexport type InternalInstrument =\n    | CardInternalInstrument\n    | PayPalInternalInstrument\n    | BankInternalInstrument;\n\nexport interface BaseInternalInstrument {\n    bigpay_token: string;\n    default_instrument: boolean;\n    provider: string;\n    trusted_shipping_address: boolean;\n    method: string;\n}\n\nexport interface BaseInternalAccountInstrument {\n    external_id: string;\n    bigpay_token: string;\n    default_instrument: boolean;\n    provider: string;\n    trusted_shipping_address: boolean;\n    method: string;\n    method_type: string;\n}\n\nexport interface CardInternalInstrument extends BaseInternalInstrument {\n    brand: string;\n    expiry_month: string;\n    expiry_year: string;\n    iin: string;\n    last_4: string;\n    method_type: 'card';\n    untrusted_shipping_address_card_verification_mode: UntrustedShippingCardVerificationType;\n}\n\nexport interface PayPalInternalInstrument extends BaseInternalAccountInstrument {\n    method_type: 'paypal';\n}\n\nexport interface BankInternalInstrument extends BaseInternalAccountInstrument {\n    method_type: 'bank';\n    iban: string;\n    account_number: string;\n    issuer: string;\n}\n\nexport interface InstrumentsResponseBody {\n    vaultedInstruments: PaymentInstrument[];\n}\n\nexport interface InstrumentErrorResponseBody {\n    errors?: InstrumentError[];\n}\n\nexport interface InternalInstrumentsResponseBody {\n    vaulted_instruments: InternalInstrument[];\n}\n\nexport interface InternalInstrumentErrorResponseBody {\n    errors?: InstrumentError[];\n}\n\nexport interface InternalVaultAccessTokenResponseBody {\n    data: {\n        token: string;\n        expires_at: number;\n        errors?: InstrumentError[];\n    };\n}\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-response-transformer.spec.ts",
    "content": "import { getPaymentResponse, getResponse } from '../../common/http-request/responses.mock';\n\nimport InstrumentResponseTransformer from './instrument-response-transformer';\nimport {\n    getErrorInstrumentResponseBody,\n    getInternalInstrumentsResponseBody,\n    getLoadInstrumentsResponseBody,\n    getVaultAccessToken,\n    getVaultAccessTokenResponseBody,\n} from './instrument.mock';\n\ndescribe('InstrumentResponseTransformer', () => {\n    let instrumentResponseTransformer: InstrumentResponseTransformer;\n\n    beforeEach(() => {\n        instrumentResponseTransformer = new InstrumentResponseTransformer();\n    });\n\n    describe('#transformResponse()', () => {\n        it('transforms the loadInstruments response', () => {\n            const response = getPaymentResponse(getInternalInstrumentsResponseBody());\n            const result = instrumentResponseTransformer.transformResponse(response);\n\n            expect(result.body).toEqual(getLoadInstrumentsResponseBody());\n        });\n\n        it('transforms an empty loadInstruments response', () => {\n            const response = getPaymentResponse({ vaulted_instruments: [] });\n            const result = instrumentResponseTransformer.transformResponse(response);\n\n            expect(result.body).toEqual({ vaultedInstruments: [] });\n        });\n    });\n\n    describe('#transformVaultAccessResponse()', () => {\n        it('transforms loadInstruments errors', () => {\n            const response = getResponse(getVaultAccessTokenResponseBody());\n            const result = instrumentResponseTransformer.transformVaultAccessResponse(response);\n\n            expect(result.body).toEqual(getVaultAccessToken());\n        });\n    });\n\n    describe('#transformErrorResponse()', () => {\n        it('transforms loadInstruments errors', () => {\n            const response = getPaymentResponse(getErrorInstrumentResponseBody());\n            const result = instrumentResponseTransformer.transformErrorResponse(response);\n\n            expect(result.body).toEqual(getErrorInstrumentResponseBody());\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-response-transformer.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport PaymentResponse from '../payment-response';\n\nimport PaymentInstrument, { VaultAccessToken } from './instrument';\nimport {\n    BankInternalInstrument,\n    InstrumentErrorResponseBody,\n    InstrumentsResponseBody,\n    InternalInstrument,\n    InternalInstrumentErrorResponseBody,\n    InternalInstrumentsResponseBody,\n    InternalVaultAccessTokenResponseBody,\n    PayPalInternalInstrument,\n} from './instrument-response-body';\nimport { mapToBankInstrument } from './map-to-bank-instrument';\nimport { mapToCardInstrument } from './map-to-card-instrument';\nimport { mapToPayPalInstrument } from './map-to-paypal-instrument';\n\nexport default class InstrumentResponseTransformer {\n    transformResponse(\n        response: PaymentResponse<InternalInstrumentsResponseBody>,\n    ): Response<InstrumentsResponseBody> {\n        const { body, ...payload } = this._transformResponse(response);\n\n        return {\n            ...payload,\n            body: {\n                vaultedInstruments: this._transformVaultedInstruments(body.vaulted_instruments),\n            },\n        };\n    }\n\n    transformErrorResponse(\n        response: PaymentResponse<InternalInstrumentErrorResponseBody>,\n    ): Response<InstrumentErrorResponseBody> {\n        return this._transformResponse(response);\n    }\n\n    transformVaultAccessResponse(\n        response: Response<InternalVaultAccessTokenResponseBody>,\n    ): Response<VaultAccessToken> {\n        return {\n            ...response,\n            body: {\n                vaultAccessToken: response.body.data.token,\n                vaultAccessExpiry: response.body.data.expires_at,\n            },\n        };\n    }\n\n    private _transformVaultedInstruments(\n        vaultedInstruments: InternalInstrument[] = [],\n    ): PaymentInstrument[] {\n        return vaultedInstruments.map((instrument) => {\n            if (this._isPayPalInstrument(instrument)) {\n                return mapToPayPalInstrument(instrument);\n            }\n\n            if (this._isBankInstrument(instrument)) {\n                return mapToBankInstrument(instrument);\n            }\n\n            return mapToCardInstrument(instrument);\n        });\n    }\n\n    private _isPayPalInstrument(\n        instrument: InternalInstrument,\n    ): instrument is PayPalInternalInstrument {\n        return instrument.method_type === 'paypal';\n    }\n\n    private _isBankInstrument(\n        instrument: InternalInstrument,\n    ): instrument is BankInternalInstrument {\n        return instrument.method_type === 'bank';\n    }\n\n    private _transformResponse<T>(response: PaymentResponse<T>): Response<T> {\n        const { data: body, ...payload } = response;\n\n        return {\n            ...payload,\n            body,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-selector.spec.ts",
    "content": "import { find, set } from 'lodash';\n\nimport { CheckoutStoreState } from '../../checkout';\nimport { getCheckoutStoreState } from '../../checkout/checkouts.mock';\nimport { getBraintree } from '../payment-methods.mock';\n\nimport InstrumentSelector, {\n    createInstrumentSelectorFactory,\n    InstrumentSelectorFactory,\n} from './instrument-selector';\nimport { getInstruments, getInstrumentsMeta } from './instrument.mock';\n\ndescribe('InstrumentSelector', () => {\n    let createInstrumentSelector: InstrumentSelectorFactory;\n    let instrumentSelector: InstrumentSelector;\n    let state: CheckoutStoreState;\n\n    beforeEach(() => {\n        createInstrumentSelector = createInstrumentSelectorFactory();\n        state = getCheckoutStoreState();\n    });\n\n    describe('#getInstruments()', () => {\n        it('returns only supported instruments if no method is passed', () => {\n            set(state, 'instruments.data[0].provider', 'invalid');\n            set(state, 'instruments.data[0].method', 'card');\n\n            instrumentSelector = createInstrumentSelector(state.instruments);\n\n            const result = instrumentSelector.getInstruments();\n\n            expect(result).toContainEqual(\n                expect.objectContaining({ provider: 'authorizenet', last4: expect.any(String) }),\n            );\n            expect(result).not.toContainEqual(expect.objectContaining({ provider: 'invalid' }));\n        });\n\n        it('returns an empty array if there are no instruments', () => {\n            instrumentSelector = createInstrumentSelector({ data: [], errors: {}, statuses: {} });\n\n            expect(instrumentSelector.getInstruments()).toEqual([]);\n        });\n    });\n\n    describe('#getInstrument()', () => {\n        it('returns instrument with given ID', () => {\n            instrumentSelector = createInstrumentSelector(state.instruments);\n\n            expect(instrumentSelector.getCardInstrument('123')).toEqual(\n                find(getInstruments(), { bigpayToken: '123' }),\n            );\n        });\n\n        it('returns nothing if instrument is not found', () => {\n            instrumentSelector = createInstrumentSelector(state.instruments);\n\n            expect(instrumentSelector.getCardInstrument('1123123312')).toBeUndefined();\n        });\n\n        it('only returns card instrument', () => {\n            instrumentSelector = createInstrumentSelector(state.instruments);\n\n            // tslint:disable-next-line:no-non-null-assertion\n            expect(\n                instrumentSelector.getCardInstrument(\n                    find(getInstruments(), { method: 'paypal' })!.bigpayToken,\n                ),\n            ).toBeUndefined();\n        });\n    });\n\n    describe('#getInstrumentsByPaymentMethod()', () => {\n        it('returns the instruments for a particular method', () => {\n            instrumentSelector = createInstrumentSelector(state.instruments);\n\n            expect(instrumentSelector.getInstrumentsByPaymentMethod(getBraintree())).toEqual([\n                expect.objectContaining({ provider: 'braintree', method: 'credit_card' }),\n            ]);\n        });\n\n        it('returns an empty array if the method is not supported', () => {\n            instrumentSelector = createInstrumentSelector(state.instruments);\n\n            expect(\n                instrumentSelector.getInstrumentsByPaymentMethod({\n                    ...getBraintree(),\n                    id: 'nonexistent',\n                }),\n            ).toEqual([]);\n        });\n\n        it('returns an empty array if there are no instruments', () => {\n            instrumentSelector = createInstrumentSelector({ data: [], errors: {}, statuses: {} });\n\n            expect(instrumentSelector.getInstrumentsByPaymentMethod(getBraintree())).toEqual([]);\n        });\n    });\n\n    describe('#getInstrumentsMeta()', () => {\n        it('returns instrument meta', () => {\n            instrumentSelector = createInstrumentSelector(state.instruments);\n\n            expect(instrumentSelector.getInstrumentsMeta()).toEqual(getInstrumentsMeta());\n        });\n\n        it('returns same instrument meta unless state changes', () => {\n            instrumentSelector = createInstrumentSelector(state.instruments);\n\n            const meta = instrumentSelector.getInstrumentsMeta();\n\n            instrumentSelector = createInstrumentSelector(state.instruments);\n\n            expect(instrumentSelector.getInstrumentsMeta()).toBe(meta);\n\n            instrumentSelector = createInstrumentSelector({\n                ...state.instruments,\n                meta: {\n                    vaultAccessToken: '321efg',\n                    vaultAccessExpiry: 1516097730499,\n                },\n            });\n\n            expect(instrumentSelector.getInstrumentsMeta()).not.toBe(meta);\n        });\n    });\n\n    describe('#getLoadError()', () => {\n        it('returns error if unable to load', () => {\n            const loadError = new Error();\n\n            instrumentSelector = createInstrumentSelector({\n                ...state.instruments,\n                errors: { loadError },\n            });\n\n            expect(instrumentSelector.getLoadError()).toEqual(loadError);\n        });\n\n        it('does not return error if able to load', () => {\n            instrumentSelector = createInstrumentSelector(state.instruments);\n\n            expect(instrumentSelector.getLoadError()).toBeUndefined();\n        });\n    });\n\n    describe('#getDeleteError()', () => {\n        const mockInstrumentId = '123';\n\n        it('returns error if unable to delete', () => {\n            const deleteError = new Error();\n\n            instrumentSelector = createInstrumentSelector({\n                ...state.instruments,\n                errors: { deleteError, failedInstrument: mockInstrumentId },\n            });\n\n            expect(instrumentSelector.getDeleteError(mockInstrumentId)).toEqual(deleteError);\n        });\n\n        it('does not return error if able to delete', () => {\n            instrumentSelector = createInstrumentSelector(state.instruments);\n\n            expect(instrumentSelector.getDeleteError(mockInstrumentId)).toBeUndefined();\n        });\n\n        it('does not return error if unable to delete irrelevant instrument', () => {\n            const deleteError = new Error();\n\n            instrumentSelector = createInstrumentSelector({\n                ...state.instruments,\n                errors: { deleteError, failedInstrument: mockInstrumentId },\n            });\n\n            expect(instrumentSelector.getDeleteError('321')).toBeUndefined();\n        });\n\n        it('returns any error if instrument id is not passed', () => {\n            const deleteError = new Error();\n\n            instrumentSelector = createInstrumentSelector({\n                ...state.instruments,\n                errors: { deleteError, failedInstrument: mockInstrumentId },\n            });\n\n            expect(instrumentSelector.getDeleteError()).toEqual(deleteError);\n        });\n    });\n\n    describe('#isLoading()', () => {\n        it('returns true if loading instruments', () => {\n            instrumentSelector = createInstrumentSelector({\n                ...state.instruments,\n                statuses: { isLoading: true },\n            });\n\n            expect(instrumentSelector.isLoading()).toBe(true);\n        });\n\n        it('returns false if not loading instruments', () => {\n            instrumentSelector = createInstrumentSelector(state.instruments);\n\n            expect(instrumentSelector.isLoading()).toBe(false);\n        });\n    });\n\n    describe('#isDeleting()', () => {\n        const mockInstrumentId = '123';\n\n        it('returns true if deleting an instrument', () => {\n            instrumentSelector = createInstrumentSelector({\n                ...state.instruments,\n                statuses: { isDeleting: true, deletingInstrument: mockInstrumentId },\n            });\n\n            expect(instrumentSelector.isDeleting(mockInstrumentId)).toBe(true);\n        });\n\n        it('returns false if not deleting an instrument', () => {\n            instrumentSelector = createInstrumentSelector({\n                ...state.instruments,\n                statuses: { isDeleting: false, deletingInstrument: undefined },\n            });\n\n            expect(instrumentSelector.isDeleting(mockInstrumentId)).toBe(false);\n        });\n\n        it('returns false if not deleting specific instrument', () => {\n            instrumentSelector = createInstrumentSelector({\n                ...state.instruments,\n                statuses: { isDeleting: true, deletingInstrument: '321' },\n            });\n\n            expect(instrumentSelector.isDeleting(mockInstrumentId)).toBe(false);\n        });\n\n        it('returns any deleting status if instrument id is not passed', () => {\n            instrumentSelector = createInstrumentSelector({\n                ...state.instruments,\n                statuses: { isDeleting: true, deletingInstrument: mockInstrumentId },\n            });\n\n            expect(instrumentSelector.isDeleting()).toBe(true);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\nimport { filter, flatMap, isMatch, values } from 'lodash';\n\nimport { MissingDataError, MissingDataErrorType } from '../../common/error/errors';\nimport { createSelector } from '../../common/selector';\nimport { guard } from '../../common/utility';\nimport PaymentMethod from '../payment-method';\n\nimport PaymentInstrument, { CardInstrument } from './instrument';\nimport InstrumentState, { DEFAULT_STATE, InstrumentMeta } from './instrument-state';\nimport supportedInstruments from './supported-payment-instruments';\n\nexport default interface InstrumentSelector {\n    getCardInstrument(instrumentId: string): CardInstrument | undefined;\n    getCardInstrumentOrThrow(instrumentId: string): CardInstrument;\n    getInstruments(): PaymentInstrument[] | undefined;\n    getInstrumentsByPaymentMethod(paymentMethod: PaymentMethod): PaymentInstrument[] | undefined;\n    getInstrumentsMeta(): InstrumentMeta | undefined;\n    getLoadError(): Error | undefined;\n    getDeleteError(instrumentId?: string): Error | undefined;\n    isLoading(): boolean;\n    isDeleting(instrumentId?: string): boolean;\n}\n\nexport type InstrumentSelectorFactory = (state: InstrumentState) => InstrumentSelector;\n\nexport function createInstrumentSelectorFactory(): InstrumentSelectorFactory {\n    const getInstrumentsByPaymentMethod = createSelector(\n        (state: InstrumentState) => state.data,\n        (instruments) => (paymentMethod: PaymentMethod) => {\n            if (!instruments) {\n                return;\n            }\n\n            const paymentMethodKey = paymentMethod.gateway\n                ? `${paymentMethod.gateway}.${paymentMethod.id}`\n                : paymentMethod.id;\n\n            const currentMethod = supportedInstruments[paymentMethodKey];\n\n            if (!currentMethod) {\n                return [];\n            }\n\n            return filter<PaymentInstrument>(instruments, currentMethod);\n        },\n    );\n\n    const getCardInstrument = createSelector(\n        (state: InstrumentState) => state.data,\n        (instruments = []) =>\n            (instrumentId: string) => {\n                const cards = values(supportedInstruments);\n\n                return instruments.find(\n                    (instrument): instrument is CardInstrument =>\n                        instrument.bigpayToken === instrumentId &&\n                        instrument.type === 'card' &&\n                        cards.some((card) => isMatch(instrument, card)),\n                );\n            },\n    );\n\n    const getCardInstrumentOrThrow = createSelector(\n        getCardInstrument,\n        (getCardInstrument) => (instrumentId: string) => {\n            return guard(\n                getCardInstrument(instrumentId),\n                () => new MissingDataError(MissingDataErrorType.MissingPaymentInstrument),\n            );\n        },\n    );\n\n    const getInstruments = createSelector(\n        (state: InstrumentState) => state.data,\n        (instruments) => () => {\n            if (!instruments) {\n                return;\n            }\n\n            const allSupportedInstruments = flatMap(supportedInstruments, (supportedProvider) =>\n                filter(\n                    instruments,\n                    (instrument: PaymentInstrument): instrument is PaymentInstrument => {\n                        return isMatch(instrument, supportedProvider);\n                    },\n                ),\n            );\n\n            return allSupportedInstruments;\n        },\n    );\n\n    const getInstrumentsMeta = createSelector(\n        (state: InstrumentState) => state.meta,\n        (meta) => () => meta,\n    );\n\n    const getLoadError = createSelector(\n        (state: InstrumentState) => state.errors.loadError,\n        (loadError) => () => loadError,\n    );\n\n    const getDeleteError = createSelector(\n        (state: InstrumentState) => state.errors.failedInstrument,\n        (state: InstrumentState) => state.errors.deleteError,\n        (failedInstrument, deleteError) => (instrumentId?: string) => {\n            if (instrumentId && failedInstrument !== instrumentId) {\n                return;\n            }\n\n            return deleteError;\n        },\n    );\n\n    const isLoading = createSelector(\n        (state: InstrumentState) => state.statuses.isLoading,\n        (isLoading) => () => !!isLoading,\n    );\n\n    const isDeleting = createSelector(\n        (state: InstrumentState) => state.statuses.deletingInstrument,\n        (state: InstrumentState) => state.statuses.isDeleting,\n        (deletingInstrument, isDeleting) => (instrumentId?: string) => {\n            if (instrumentId && deletingInstrument !== instrumentId) {\n                return false;\n            }\n\n            return !!isDeleting;\n        },\n    );\n\n    return memoizeOne((state: InstrumentState = DEFAULT_STATE): InstrumentSelector => {\n        return {\n            getCardInstrument: getCardInstrument(state),\n            getCardInstrumentOrThrow: getCardInstrumentOrThrow(state),\n            getInstruments: getInstruments(state),\n            getInstrumentsByPaymentMethod: getInstrumentsByPaymentMethod(state),\n            getInstrumentsMeta: getInstrumentsMeta(state),\n            getLoadError: getLoadError(state),\n            getDeleteError: getDeleteError(state),\n            isLoading: isLoading(state),\n            isDeleting: isDeleting(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument-state.ts",
    "content": "import PaymentInstrument, { VaultAccessToken } from './instrument';\n\nexport default interface InstrumentState {\n    data?: PaymentInstrument[];\n    meta?: InstrumentMeta;\n    errors: InstrumentErrorState;\n    statuses: InstrumentStatusState;\n}\n\nexport interface InstrumentErrorState {\n    deleteError?: Error;\n    failedInstrument?: string;\n    loadError?: Error;\n    vaultError?: Error;\n}\n\nexport interface InstrumentStatusState {\n    isDeleting?: boolean;\n    isLoading?: boolean;\n    isVaulting?: boolean;\n    deletingInstrument?: string;\n}\n\nexport type InstrumentMeta = VaultAccessToken;\n\nexport const DEFAULT_STATE = {\n    data: [],\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument.mock.ts",
    "content": "import PaymentInstrument, {\n    CardInstrument,\n    InstrumentRequestContext,\n    UntrustedShippingCardVerificationType,\n    VaultAccessToken,\n} from './instrument';\nimport {\n    InstrumentErrorResponseBody,\n    InstrumentsResponseBody,\n    InternalInstrumentsResponseBody,\n    InternalVaultAccessTokenResponseBody,\n} from './instrument-response-body';\nimport InstrumentState, { InstrumentMeta } from './instrument-state';\n\nexport function getInstrumentsMeta(): InstrumentMeta {\n    return getVaultAccessToken();\n}\n\nexport function getVaultAccessToken(): VaultAccessToken {\n    return {\n        vaultAccessToken: 'vault-token',\n        vaultAccessExpiry: 1516097476098,\n    };\n}\n\nexport function getInstruments(): PaymentInstrument[] {\n    return [\n        {\n            bigpayToken: '123',\n            provider: 'braintree',\n            iin: '11111111',\n            last4: '4321',\n            expiryMonth: '02',\n            expiryYear: '2020',\n            brand: 'test',\n            trustedShippingAddress: true,\n            defaultInstrument: true,\n            method: 'credit_card',\n            untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n            type: 'card',\n        },\n        {\n            bigpayToken: '111',\n            provider: 'authorizenet',\n            iin: '11222333',\n            last4: '4444',\n            expiryMonth: '10',\n            expiryYear: '2024',\n            brand: 'test',\n            trustedShippingAddress: false,\n            defaultInstrument: false,\n            method: 'credit_card',\n            untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n            type: 'card',\n        },\n        {\n            bigpayToken: '31415',\n            provider: 'braintree',\n            trustedShippingAddress: false,\n            defaultInstrument: false,\n            type: 'account',\n            method: 'paypal',\n            externalId: 'test@external-id.com',\n        },\n        {\n            bigpayToken: '52346',\n            provider: 'ideal',\n            trustedShippingAddress: false,\n            accountNumber: 'DEFDEF',\n            issuer: 'TEST2',\n            defaultInstrument: false,\n            type: 'bank',\n            method: 'bank',\n            iban: 'DEFDEF',\n        },\n        {\n            bigpayToken: '56789',\n            provider: 'adyenv2',\n            iin: '11111111',\n            last4: '4321',\n            expiryMonth: '02',\n            expiryYear: '2020',\n            brand: 'test',\n            trustedShippingAddress: true,\n            defaultInstrument: true,\n            method: 'scheme',\n            type: 'card',\n            untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n        },\n    ];\n}\n\nexport function getCardInstrument(): CardInstrument {\n    return {\n        bigpayToken: '123',\n        provider: 'braintree',\n        iin: '11111111',\n        last4: '1111',\n        expiryMonth: '02',\n        expiryYear: '2020',\n        brand: 'visa',\n        trustedShippingAddress: true,\n        defaultInstrument: true,\n        method: 'card',\n        untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n        type: 'card',\n    };\n}\n\nexport function getInstrumentsState(): InstrumentState {\n    return {\n        data: getInstruments(),\n        meta: getInstrumentsMeta(),\n        errors: {},\n        statuses: {},\n    };\n}\n\nexport function instrumentRequestContext(): InstrumentRequestContext {\n    return {\n        storeId: '1504098821',\n        customerId: 0,\n        currencyCode: 'USD',\n        authToken: getInstrumentsMeta().vaultAccessToken,\n    };\n}\n\nexport function getErrorInstrumentResponseBody(): InstrumentErrorResponseBody {\n    return {\n        errors: [\n            {\n                code: 400,\n                message: 'Bad Request',\n            },\n        ],\n    };\n}\n\nexport function getVaultAccessTokenResponseBody(): InternalVaultAccessTokenResponseBody {\n    return {\n        data: {\n            token: 'vault-token',\n            expires_at: 1516097476098,\n        },\n    };\n}\n\nexport function getLoadInstrumentsResponseBody(): InstrumentsResponseBody {\n    return {\n        vaultedInstruments: getInstruments(),\n    };\n}\n\nexport function getInternalInstrumentsResponseBody(): InternalInstrumentsResponseBody {\n    return {\n        vaulted_instruments: [\n            {\n                bigpay_token: '123',\n                provider: 'braintree',\n                iin: '11111111',\n                last_4: '4321',\n                expiry_month: '02',\n                expiry_year: '2020',\n                brand: 'test',\n                trusted_shipping_address: true,\n                default_instrument: true,\n                method: 'credit_card',\n                method_type: 'card',\n                untrusted_shipping_address_card_verification_mode:\n                    UntrustedShippingCardVerificationType.PAN,\n            },\n            {\n                bigpay_token: '111',\n                provider: 'authorizenet',\n                iin: '11222333',\n                last_4: '4444',\n                expiry_month: '10',\n                expiry_year: '2024',\n                brand: 'test',\n                trusted_shipping_address: false,\n                default_instrument: false,\n                method_type: 'card',\n                method: 'credit_card',\n                untrusted_shipping_address_card_verification_mode:\n                    UntrustedShippingCardVerificationType.PAN,\n            },\n            {\n                bigpay_token: '31415',\n                provider: 'braintree',\n                trusted_shipping_address: false,\n                default_instrument: false,\n                method_type: 'paypal',\n                method: 'paypal',\n                external_id: 'test@external-id.com',\n            },\n            {\n                bigpay_token: '52346',\n                provider: 'ideal',\n                trusted_shipping_address: false,\n                account_number: 'DEFDEF',\n                issuer: 'TEST2',\n                default_instrument: false,\n                method_type: 'bank',\n                method: 'bank',\n                iban: 'DEFDEF',\n                external_id: 'test@external-id.com',\n            },\n            {\n                bigpay_token: '56789',\n                provider: 'adyenv2',\n                iin: '11111111',\n                last_4: '4321',\n                expiry_month: '02',\n                expiry_year: '2020',\n                brand: 'test',\n                trusted_shipping_address: true,\n                default_instrument: true,\n                method: 'scheme',\n                method_type: 'card',\n                untrusted_shipping_address_card_verification_mode:\n                    UntrustedShippingCardVerificationType.PAN,\n            },\n        ],\n    };\n}\n\nexport function deleteInstrumentResponseBody(): InstrumentsResponseBody {\n    return {\n        vaultedInstruments: [],\n    };\n}\n"
  },
  {
    "path": "packages/core/src/payment/instrument/instrument.ts",
    "content": "type PaymentInstrument = CardInstrument | AccountInstrument;\n\nexport default PaymentInstrument;\n\ninterface 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"
  },
  {
    "path": "packages/core/src/payment/instrument/map-to-bank-instrument.spec.ts",
    "content": "import { mapToBankInstrument } from './map-to-bank-instrument';\n\ndescribe('mapToBankInstrument', () => {\n    it('returns a BankInstrument from a BankInternalInstrument', () => {\n        const result = mapToBankInstrument({\n            bigpay_token: 'my-bigpay-token',\n            trusted_shipping_address: true,\n            provider: 'braintree',\n            method_type: 'bank',\n            method: 'account',\n            default_instrument: false,\n            account_number: '1234',\n            iban: 'ZXY',\n            issuer: 'Some Issuer',\n            external_id: 'test@external-id.com',\n        });\n\n        expect(result).toEqual({\n            bigpayToken: 'my-bigpay-token',\n            trustedShippingAddress: true,\n            provider: 'braintree',\n            method: 'account',\n            defaultInstrument: false,\n            type: 'bank',\n            accountNumber: '1234',\n            iban: 'ZXY',\n            issuer: 'Some Issuer',\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/instrument/map-to-bank-instrument.ts",
    "content": "import { BankInstrument } from './instrument';\nimport { BankInternalInstrument } from './instrument-response-body';\n\nexport function mapToBankInstrument(instrument: BankInternalInstrument): BankInstrument {\n    return {\n        bigpayToken: instrument.bigpay_token,\n        defaultInstrument: instrument.default_instrument,\n        provider: instrument.provider,\n        trustedShippingAddress: instrument.trusted_shipping_address,\n        accountNumber: instrument.account_number,\n        issuer: instrument.issuer,\n        iban: instrument.iban,\n        method: instrument.method,\n        type: 'bank',\n    };\n}\n"
  },
  {
    "path": "packages/core/src/payment/instrument/map-to-card-instrument.spec.ts",
    "content": "import { UntrustedShippingCardVerificationType } from './instrument';\nimport { mapToCardInstrument } from './map-to-card-instrument';\n\ndescribe('mapToCardInstrument', () => {\n    it('returns a CardInstrument from a CardInternalInstrument', () => {\n        const result = mapToCardInstrument({\n            bigpay_token: 'my-bigpay-token',\n            trusted_shipping_address: true,\n            provider: 'braintree',\n            method: 'credit_card',\n            method_type: 'card',\n            last_4: '4111',\n            iin: '4242',\n            expiry_year: '2020',\n            expiry_month: '12',\n            default_instrument: false,\n            untrusted_shipping_address_card_verification_mode:\n                UntrustedShippingCardVerificationType.PAN,\n            brand: 'VISA',\n        });\n\n        expect(result).toEqual({\n            bigpayToken: 'my-bigpay-token',\n            brand: 'VISA',\n            trustedShippingAddress: true,\n            provider: 'braintree',\n            method: 'credit_card',\n            last4: '4111',\n            iin: '4242',\n            expiryYear: '2020',\n            expiryMonth: '12',\n            defaultInstrument: false,\n            untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n            type: 'card',\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/instrument/map-to-card-instrument.ts",
    "content": "import { CardInstrument } from './instrument';\nimport { CardInternalInstrument } from './instrument-response-body';\n\nexport function mapToCardInstrument(instrument: CardInternalInstrument): CardInstrument {\n    return {\n        bigpayToken: instrument.bigpay_token,\n        defaultInstrument: instrument.default_instrument,\n        provider: instrument.provider,\n        iin: instrument.iin,\n        last4: instrument.last_4,\n        expiryMonth: instrument.expiry_month,\n        expiryYear: instrument.expiry_year,\n        brand: instrument.brand,\n        trustedShippingAddress: instrument.trusted_shipping_address,\n        untrustedShippingCardVerificationMode:\n            instrument.untrusted_shipping_address_card_verification_mode,\n        method: instrument.method,\n        type: 'card',\n    };\n}\n"
  },
  {
    "path": "packages/core/src/payment/instrument/map-to-paypal-instrument.spec.ts",
    "content": "import { mapToPayPalInstrument } from './map-to-paypal-instrument';\n\ndescribe('mapToPayPalInstrument', () => {\n    it('returns a PayPalInstrument from a PayPalInternalInstrument', () => {\n        const result = mapToPayPalInstrument({\n            bigpay_token: 'my-bigpay-token',\n            trusted_shipping_address: true,\n            provider: 'braintree',\n            method_type: 'paypal',\n            method: 'account',\n            default_instrument: false,\n            external_id: 'test@external-id.com',\n        });\n\n        expect(result).toEqual({\n            bigpayToken: 'my-bigpay-token',\n            trustedShippingAddress: true,\n            provider: 'braintree',\n            method: 'paypal',\n            defaultInstrument: false,\n            externalId: 'test@external-id.com',\n            type: 'account',\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/instrument/map-to-paypal-instrument.ts",
    "content": "import { PayPalInstrument } from './instrument';\nimport { PayPalInternalInstrument } from './instrument-response-body';\n\nexport function mapToPayPalInstrument(instrument: PayPalInternalInstrument): PayPalInstrument {\n    return {\n        bigpayToken: instrument.bigpay_token,\n        defaultInstrument: instrument.default_instrument,\n        provider: instrument.provider,\n        externalId: instrument.external_id,\n        trustedShippingAddress: instrument.trusted_shipping_address,\n        method: 'paypal',\n        type: 'account',\n    };\n}\n"
  },
  {
    "path": "packages/core/src/payment/instrument/supported-payment-instruments.ts",
    "content": "import PaymentInstrument from './instrument';\n\ninterface SupportedInstruments {\n    [key: string]: Pick<PaymentInstrument, 'method' | 'provider'>;\n}\n\nconst supportedInstruments: SupportedInstruments = {\n    'mollie.credit_card': {\n        provider: 'mollie',\n        method: 'credit_card',\n    },\n    'adyenv2.scheme': {\n        provider: 'adyenv2',\n        method: 'scheme',\n    },\n    'adyenv3.scheme': {\n        provider: 'adyenv3',\n        method: 'scheme',\n    },\n    'adyenv2.bcmc': {\n        provider: 'adyenv2',\n        method: 'bcmc',\n    },\n    'adyenv2.ideal': {\n        provider: 'adyenv2',\n        method: 'ideal',\n    },\n    'adyenv2.sepadirectdebit': {\n        provider: 'adyenv2',\n        method: 'sepadirectdebit',\n    },\n    'adyenv2.directEbanking': {\n        provider: 'adyenv2',\n        method: 'directEbanking',\n    },\n    'adyenv2.giropay': {\n        provider: 'adyenv2',\n        method: 'giropay',\n    },\n    braintree: {\n        provider: 'braintree',\n        method: 'credit_card',\n    },\n    braintreepaypal: {\n        provider: 'braintree',\n        method: 'paypal',\n    },\n    braintreeach: {\n        provider: 'braintree',\n        method: 'ach',\n    },\n    authorizenet: {\n        provider: 'authorizenet',\n        method: 'credit_card',\n    },\n    elavon: {\n        provider: 'elavon',\n        method: 'credit_card',\n    },\n    checkoutcom: {\n        provider: 'checkoutcom',\n        method: 'credit_card',\n    },\n    'checkoutcom.credit_card': {\n        provider: 'checkoutcom',\n        method: 'credit_card',\n    },\n    'checkoutcom.card': {\n        provider: 'checkoutcom',\n        method: 'card',\n    },\n    sagepay: {\n        provider: 'sagepay',\n        method: 'credit_card',\n    },\n    stripe: {\n        provider: 'stripe',\n        method: 'credit_card',\n    },\n    'stripev3.card': {\n        provider: 'stripev3',\n        method: 'card',\n    },\n    'stripeupe.card': {\n        provider: 'stripeupe',\n        method: 'card',\n    },\n    cybersource: {\n        provider: 'cybersource',\n        method: 'credit_card',\n    },\n    cybersourcev2: {\n        provider: 'cybersourcev2',\n        method: 'credit_card',\n    },\n    bnz: {\n        provider: 'bnz',\n        method: 'credit_card',\n    },\n    converge: {\n        provider: 'converge',\n        method: 'credit_card',\n    },\n    bluesnapv2: {\n        provider: 'bluesnapv2',\n        method: 'credit_card',\n    },\n    'bluesnapdirect.credit_card': {\n        provider: 'bluesnapdirect',\n        method: 'credit_card',\n    },\n    'bluesnapdirect.ecp': {\n        provider: 'bluesnapdirect',\n        method: 'ecp',\n    },\n    'bluesnapdirect.sepa_direct_debit': {\n        provider: 'bluesnapdirect',\n        method: 'sepa_direct_debit',\n    },\n    orbital: {\n        provider: 'orbital',\n        method: 'credit_card',\n    },\n    paymetric: {\n        provider: 'paymetric',\n        method: 'credit_card',\n    },\n    bolt: {\n        provider: 'bolt',\n        method: 'credit_card',\n    },\n    'barclaycard.credit_card': {\n        provider: 'barclaycard',\n        method: 'credit_card',\n    },\n    moneris: {\n        provider: 'moneris',\n        method: 'credit_card',\n    },\n    cba_mpgs: {\n        provider: 'cba_mpgs',\n        method: 'credit_card',\n    },\n    worldpayaccess: {\n        provider: 'worldpayaccess',\n        method: 'credit_card',\n    },\n    'worldpayaccess.credit_card': {\n        provider: 'worldpayaccess',\n        method: 'credit_card',\n    },\n    squarev2: {\n        provider: 'squarev2',\n        method: 'credit_card',\n    },\n    paypalcommercecreditcards: {\n        provider: 'paypalcommerce',\n        method: 'credit_card',\n    },\n    paypalcommerce: {\n        provider: 'paypalcommerce',\n        method: 'paypal',\n    },\n    bigcommerce_payments_creditcards: {\n        provider: 'bigcommerce_payments',\n        method: 'credit_card',\n    },\n    bigcommerce_payments: {\n        provider: 'bigcommerce_payments',\n        method: 'paypal',\n    },\n    tdonlinemart: {\n        provider: 'tdonlinemart',\n        method: 'credit_card',\n    },\n};\n\nexport default supportedInstruments;\n"
  },
  {
    "path": "packages/core/src/payment/is-credit-card-like.spec.ts",
    "content": "import isCreditCardLike from './is-credit-card-like';\nimport { getCreditCardInstrument } from './payments.mock';\n\ndescribe('isCreditCardLike', () => {\n    it('returns true if the object looks like a credit creditcard', () => {\n        const paymentData = getCreditCardInstrument();\n\n        expect(paymentData && isCreditCardLike(paymentData)).toBeTruthy();\n    });\n\n    it('returns false if a Vaulted Instrument', () => {\n        const paymentData = { instrumentId: 'my_instrument_id', cvv: 123, iin: '123123' };\n\n        expect(isCreditCardLike(paymentData)).toBeFalsy();\n    });\n\n    it('returns false if a Tokenized Credit Card', () => {\n        const paymentData = { nonce: 'my_nonce' };\n\n        expect(isCreditCardLike(paymentData)).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/is-credit-card-like.ts",
    "content": "import isVaultedInstrument from './is-vaulted-instrument';\nimport { CreditCardInstrument, PaymentInstrument } from './payment';\n\nexport default function isCreditCardLike(\n    instrument: PaymentInstrument,\n): instrument is CreditCardInstrument {\n    const card = instrument as CreditCardInstrument;\n\n    return (\n        !isVaultedInstrument(card) &&\n        typeof card.ccName === 'string' &&\n        typeof card.ccNumber === 'string' &&\n        typeof card.ccExpiry === 'object' &&\n        typeof card.ccExpiry.month === 'string' &&\n        typeof card.ccExpiry.year === 'string'\n    );\n}\n"
  },
  {
    "path": "packages/core/src/payment/is-hosted-intrument-like.spec.ts",
    "content": "import isHostedInstrumentLike from './is-hosted-intrument-like';\n\ndescribe('isHostedInstrumentLike', () => {\n    it('returns true if the object has both matching properties as undefined', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: undefined,\n                shouldSetAsDefaultInstrument: undefined,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object has any matching properties as undefined', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: undefined,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object has any matching properties as undefined for different props', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: undefined,\n                shouldSetAsDefaultInstrument: false,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object has both boolean values as false', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: false,\n                shouldSetAsDefaultInstrument: false,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object has both boolean values as true', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: true,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object has both boolean values', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: false,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object has at least one matching property', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: true,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object is object-like', () => {\n        expect(isHostedInstrumentLike({})).toBe(true);\n    });\n\n    it('returns false if the object is null', () => {\n        expect(isHostedInstrumentLike(null)).toBe(false);\n    });\n\n    it('returns false if the object is undefined', () => {\n        expect(isHostedInstrumentLike(undefined)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/is-hosted-intrument-like.ts",
    "content": "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"
  },
  {
    "path": "packages/core/src/payment/is-nonce-like.spec.ts",
    "content": "import isNonceLike from './is-nonce-like';\nimport { getCreditCardInstrument } from './payments.mock';\n\ndescribe('isNonceLike', () => {\n    it('returns true if a Tokenized Credit Card', () => {\n        const paymentData = { nonce: 'my_nonce', deviceSessionId: 'my_session_id' };\n\n        expect(isNonceLike(paymentData)).toBeTruthy();\n    });\n\n    it('returns false if the object looks like a credit creditcard', () => {\n        const paymentData = getCreditCardInstrument();\n\n        expect(isNonceLike(paymentData)).toBeFalsy();\n    });\n\n    it('returns false if a Vaulted Instrument', () => {\n        const paymentData = { instrumentId: 'my_instrument_id', cvv: 123, iin: '123123' };\n\n        expect(isNonceLike(paymentData)).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/is-nonce-like.ts",
    "content": "import { NonceInstrument, PaymentInstrument } from './payment';\n\nexport default function isNonceLike(instrument: PaymentInstrument): instrument is NonceInstrument {\n    return Boolean((instrument as NonceInstrument).nonce);\n}\n"
  },
  {
    "path": "packages/core/src/payment/is-vaulted-instrument.spec.ts",
    "content": "import isVaultedInstrument from './is-vaulted-instrument';\nimport { getCreditCardInstrument } from './payments.mock';\n\ndescribe('isTokenizedCreditCardLike', () => {\n    it('returns true if a Vaulted Instrument', () => {\n        const paymentData = { instrumentId: 'my_instrument_id', cvv: 123, iin: '123123' };\n\n        expect(isVaultedInstrument(paymentData)).toBeTruthy();\n    });\n\n    it('returns false if a Tokenized Credit Card', () => {\n        const paymentData = { nonce: 'my_nonce', deviceSessionId: 'my_session_id' };\n\n        expect(isVaultedInstrument(paymentData)).toBeFalsy();\n    });\n\n    it('returns false if the object looks like a credit creditcard', () => {\n        const paymentData = getCreditCardInstrument();\n\n        expect(isVaultedInstrument(paymentData)).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/is-vaulted-instrument.ts",
    "content": "import {\n    FormattedPayload,\n    FormattedVaultedInstrument,\n    HostedVaultedInstrument,\n    PaymentInstrument,\n    VaultedInstrument,\n} from './payment';\n\nexport default function isVaultedInstrument(\n    instrument: PaymentInstrument,\n): instrument is VaultedInstrument {\n    return Boolean((instrument as VaultedInstrument).instrumentId);\n}\n\nexport function isHostedVaultedInstrument(\n    instrument: PaymentInstrument,\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: PaymentInstrument,\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"
  },
  {
    "path": "packages/core/src/payment/payment-action-creator.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\nimport { noop } from 'lodash';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { CancellablePromise } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CheckoutStore, CheckoutValidator, createCheckoutStore } from '../checkout';\nimport { getCheckoutStoreStateWithOrder } from '../checkout/checkouts.mock';\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\nimport { OrderActionCreator, OrderActionType, OrderRequestSender } from '../order';\nimport { getOrder } from '../order/orders.mock';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../spam-protection';\n\nimport createPaymentClient from './create-payment-client';\nimport { PaymentMethodCancelledError } from './errors';\nimport PaymentActionCreator from './payment-action-creator';\nimport { PaymentActionType } from './payment-actions';\nimport PaymentAdditionalAction from './payment-additional-action';\nimport PaymentRequestSender from './payment-request-sender';\nimport PaymentRequestTransformer from './payment-request-transformer';\nimport {\n    getErrorPaymentResponseBody,\n    getPayment,\n    getPaymentRequestBody,\n    getPaymentResponseBody,\n} from './payments.mock';\n\ndescribe('PaymentActionCreator', () => {\n    let orderRequestSender: OrderRequestSender;\n    let orderActionCreator: OrderActionCreator;\n    let paymentActionCreator: PaymentActionCreator;\n    let paymentRequestSender: PaymentRequestSender;\n    let paymentRequestTransformer: PaymentRequestTransformer;\n    let paymentHumanVerificationHandler: PaymentHumanVerificationHandler;\n    let store: CheckoutStore;\n    let errorResponse: RequestError;\n    let additionalActionMock: PaymentAdditionalAction;\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreStateWithOrder());\n        orderRequestSender = new OrderRequestSender(createRequestSender());\n        paymentRequestSender = new PaymentRequestSender(createPaymentClient(store));\n        paymentRequestTransformer = new PaymentRequestTransformer();\n        paymentHumanVerificationHandler = new PaymentHumanVerificationHandler(\n            createSpamProtection(createScriptLoader()),\n        );\n\n        jest.spyOn(orderRequestSender, 'loadOrder').mockReturnValue(\n            Promise.resolve(getResponse(getOrder())),\n        );\n\n        jest.spyOn(paymentRequestSender, 'initializeOffsitePayment').mockReturnValue(\n            Promise.resolve(),\n        );\n\n        jest.spyOn(paymentRequestSender, 'submitPayment').mockReturnValue(\n            Promise.resolve(getResponse(getPaymentResponseBody())),\n        );\n\n        jest.spyOn(paymentRequestTransformer, 'transform');\n\n        orderActionCreator = new OrderActionCreator(orderRequestSender, {} as CheckoutValidator);\n        paymentActionCreator = new PaymentActionCreator(\n            paymentRequestSender,\n            orderActionCreator,\n            paymentRequestTransformer,\n            paymentHumanVerificationHandler,\n        );\n\n        errorResponse = {\n            ...getErrorResponse(),\n            body: {\n                ...getErrorPaymentResponseBody(),\n                status: 'additional_action_required',\n                additional_action_required: {\n                    type: 'recaptcha_v2_verification',\n                    data: {\n                        key: 'recaptchakey123',\n                    },\n                },\n            },\n            errors: [],\n            name: '',\n            type: '',\n            message: '',\n        };\n\n        additionalActionMock = {\n            type: 'recaptcha_v2_verification',\n            data: {\n                human_verification_token: 'googleRecaptchaToken',\n            },\n        };\n    });\n\n    describe('#submitPayment()', () => {\n        it('dispatches actions to data store', async () => {\n            const actions = await from(paymentActionCreator.submitPayment(getPayment())(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: PaymentActionType.SubmitPaymentRequested,\n                },\n                {\n                    type: OrderActionType.LoadOrderRequested,\n                },\n                {\n                    type: OrderActionType.LoadOrderSucceeded,\n                    payload: getOrder(),\n                },\n                {\n                    type: PaymentActionType.SubmitPaymentSucceeded,\n                    payload: getPaymentResponseBody(),\n                },\n            ]);\n        });\n\n        it('dispatches error actions to data store if unsuccessful', async () => {\n            jest.spyOn(paymentRequestSender, 'submitPayment').mockReturnValue(\n                Promise.reject(getResponse(getErrorPaymentResponseBody())),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(paymentActionCreator.submitPayment(getPayment())(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: PaymentActionType.SubmitPaymentRequested,\n                },\n                {\n                    type: PaymentActionType.SubmitPaymentFailed,\n                    payload: getResponse(getErrorPaymentResponseBody()),\n                    error: true,\n                },\n            ]);\n        });\n\n        it('sends request to submit payment', async () => {\n            await from(paymentActionCreator.submitPayment(getPayment())(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(paymentRequestSender.submitPayment).toHaveBeenCalledWith(\n                getPaymentRequestBody(),\n            );\n        });\n\n        it('executes human verification when verification requested error returned', async () => {\n            jest.spyOn(paymentRequestSender, 'submitPayment').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest\n                .spyOn(paymentHumanVerificationHandler, 'handle')\n                .mockReturnValue(Promise.resolve(additionalActionMock));\n\n            await from(paymentActionCreator.submitPayment(getPayment())(store))\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n\n            return expect(paymentHumanVerificationHandler.handle).toHaveBeenCalledWith(\n                errorResponse,\n            );\n        });\n\n        it('sends payment request again after human verification performed', async () => {\n            jest.spyOn(paymentRequestSender, 'submitPayment').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = await jest\n                .spyOn(paymentHumanVerificationHandler, 'handle')\n                .mockReturnValue(Promise.resolve(additionalActionMock));\n\n            await from(paymentActionCreator.submitPayment(getPayment())(store))\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(paymentRequestSender.submitPayment).toHaveBeenCalledTimes(2);\n        });\n    });\n\n    describe('#initializeOffsitePayment()', () => {\n        it('dispatches actions to data store', async () => {\n            const payment = getPayment();\n            const { methodId, gatewayId } = payment;\n\n            const actions = await from(\n                paymentActionCreator.initializeOffsitePayment({ methodId, gatewayId })(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: PaymentActionType.InitializeOffsitePaymentRequested },\n                { type: PaymentActionType.InitializeOffsitePaymentSucceeded },\n            ]);\n        });\n\n        it('dispatches error actions to data store if unsuccessful', async () => {\n            const error = new Error();\n\n            jest.spyOn(paymentRequestSender, 'initializeOffsitePayment').mockRejectedValue(error);\n\n            const errorHandler = jest.fn((action) => of(action));\n            const payment = getPayment();\n            const { methodId, gatewayId } = payment;\n\n            const actions = await from(\n                paymentActionCreator.initializeOffsitePayment({ methodId, gatewayId })(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: PaymentActionType.InitializeOffsitePaymentRequested,\n                },\n                {\n                    type: PaymentActionType.InitializeOffsitePaymentFailed,\n                    payload: error,\n                    error: true,\n                },\n            ]);\n        });\n\n        it('dispatches error actions to data store if payment cancelled', async () => {\n            const error = new PaymentMethodCancelledError();\n\n            jest.spyOn(paymentRequestSender, 'initializeOffsitePayment').mockResolvedValue(\n                new Promise(noop),\n            );\n\n            const cancelPayment = new CancellablePromise<undefined>(new Promise(noop));\n            const errorHandler = jest.fn((action) => of(action));\n            const payment = getPayment();\n            const { methodId, gatewayId } = payment;\n\n            const actions = from(\n                paymentActionCreator.initializeOffsitePayment({\n                    methodId,\n                    gatewayId,\n                    promise: cancelPayment.promise,\n                })(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            cancelPayment.cancel(error);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(errorHandler).toHaveBeenCalled();\n\n            return expect(actions).resolves.toEqual([\n                {\n                    type: PaymentActionType.InitializeOffsitePaymentRequested,\n                },\n                {\n                    type: PaymentActionType.InitializeOffsitePaymentFailed,\n                    payload: error,\n                    error: true,\n                },\n            ]);\n        });\n\n        it('passes \"set_as_default_stored_instrument\" flag as null to the paymentRequestTransformer when vaulting, but not as default', () => {\n            const payment = getPayment();\n            const { methodId, gatewayId } = payment;\n\n            paymentActionCreator.initializeOffsitePayment({\n                methodId,\n                gatewayId,\n                shouldSaveInstrument: true,\n            })(store);\n\n            expect(paymentRequestTransformer.transform).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    paymentData: expect.objectContaining({\n                        formattedPayload: expect.objectContaining({\n                            set_as_default_stored_instrument: null,\n                        }),\n                    }),\n                }),\n                expect.anything(),\n            );\n        });\n\n        it('passes \"set_as_default_stored_instrument\" flag as true to the paymentRequestTransformer when vaulting and making default', () => {\n            const payment = getPayment();\n            const { methodId, gatewayId } = payment;\n\n            paymentActionCreator.initializeOffsitePayment({\n                methodId,\n                gatewayId,\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: true,\n            })(store);\n\n            expect(paymentRequestTransformer.transform).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    paymentData: expect.objectContaining({\n                        formattedPayload: expect.objectContaining({\n                            set_as_default_stored_instrument: true,\n                        }),\n                    }),\n                }),\n                expect.anything(),\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-action-creator.ts",
    "content": "import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, of } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { OrderActionCreator } from '../order';\nimport { PaymentHumanVerificationHandler } from '../spam-protection';\n\nimport Payment, {\n    FormattedHostedInstrument,\n    FormattedPayload,\n    FormattedVaultedInstrument,\n} from './payment';\nimport {\n    InitializeOffsitePaymentAction,\n    PaymentActionType,\n    SubmitPaymentAction,\n} from './payment-actions';\nimport PaymentRequestSender from './payment-request-sender';\nimport PaymentRequestTransformer from './payment-request-transformer';\n\ninterface InitializeOffsitePaymentSettings {\n    methodId: string;\n    gatewayId?: string;\n    instrumentId?: string;\n    target?: string;\n    promise?: Promise<undefined>;\n    shouldSaveInstrument?: boolean;\n    shouldSetAsDefaultInstrument?: boolean;\n}\n\ntype InitializeOffsitePayment = (\n    settings: InitializeOffsitePaymentSettings,\n) => ThunkAction<InitializeOffsitePaymentAction, InternalCheckoutSelectors>;\n\nexport default class PaymentActionCreator {\n    constructor(\n        private _paymentRequestSender: PaymentRequestSender,\n        private _orderActionCreator: OrderActionCreator,\n        private _paymentRequestTransformer: PaymentRequestTransformer,\n        private _paymentHumanVerificationHandler: PaymentHumanVerificationHandler,\n    ) {}\n\n    submitPayment(payment: Payment): ThunkAction<SubmitPaymentAction, InternalCheckoutSelectors> {\n        return (store) =>\n            concat(\n                of(createAction(PaymentActionType.SubmitPaymentRequested)),\n                defer(async () => {\n                    try {\n                        return await this._paymentRequestSender.submitPayment(\n                            this._paymentRequestTransformer.transform(payment, store.getState()),\n                        );\n                    } catch (error) {\n                        const additionalAction = await this._paymentHumanVerificationHandler.handle(\n                            error,\n                        );\n\n                        return await this._paymentRequestSender.submitPayment(\n                            this._paymentRequestTransformer.transform(\n                                { ...payment, additionalAction },\n                                store.getState(),\n                            ),\n                        );\n                    }\n                }).pipe(\n                    switchMap(({ body }) =>\n                        concat(\n                            this._orderActionCreator.loadCurrentOrder()(store),\n                            of(createAction(PaymentActionType.SubmitPaymentSucceeded, body)),\n                        ),\n                    ),\n                ),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(PaymentActionType.SubmitPaymentFailed, error),\n                ),\n            );\n    }\n\n    initializeOffsitePayment: InitializeOffsitePayment = ({\n        methodId,\n        gatewayId,\n        instrumentId,\n        target,\n        promise,\n        shouldSaveInstrument,\n        shouldSetAsDefaultInstrument,\n    }) => {\n        return (store) => {\n            let paymentData:\n                | FormattedPayload<FormattedHostedInstrument | FormattedVaultedInstrument>\n                | undefined;\n\n            if (instrumentId) {\n                paymentData = { formattedPayload: { bigpay_token: instrumentId } };\n            } else if (shouldSaveInstrument) {\n                paymentData = {\n                    formattedPayload: {\n                        vault_payment_instrument: shouldSaveInstrument,\n                        set_as_default_stored_instrument: shouldSetAsDefaultInstrument || null,\n                    },\n                };\n            }\n\n            const payload = this._paymentRequestTransformer.transform(\n                { gatewayId, methodId, paymentData },\n                store.getState(),\n            );\n\n            return concat(\n                of(createAction(PaymentActionType.InitializeOffsitePaymentRequested)),\n                Promise.race(\n                    [\n                        this._paymentRequestSender.initializeOffsitePayment(payload, target),\n                        promise,\n                    ].filter(Boolean),\n                ).then(() => createAction(PaymentActionType.InitializeOffsitePaymentSucceeded)),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(PaymentActionType.InitializeOffsitePaymentFailed, error),\n                ),\n            );\n        };\n    };\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { LoadOrderAction } from '../order';\n\nimport PaymentResponseBody from './payment-response-body';\n\nexport enum PaymentActionType {\n    SubmitPaymentRequested = 'SUBMIT_PAYMENT_REQUESTED',\n    SubmitPaymentSucceeded = 'SUBMIT_PAYMENT_SUCCEEDED',\n    SubmitPaymentFailed = 'SUBMIT_PAYMENT_FAILED',\n\n    InitializeOffsitePaymentRequested = 'INITIALIZE_OFFSITE_PAYMENT_REQUESTED',\n    InitializeOffsitePaymentSucceeded = 'INITIALIZE_OFFSITE_PAYMENT_SUCCEEDED',\n    InitializeOffsitePaymentFailed = 'INITIALIZE_OFFSITE_PAYMENT_FAILED',\n}\n\nexport type PaymentAction = SubmitPaymentAction | InitializeOffsitePaymentAction;\n\nexport type SubmitPaymentAction =\n    | SubmitPaymentRequestedAction\n    | SubmitPaymentSucceededAction\n    | SubmitPaymentFailedAction\n    | LoadOrderAction;\n\nexport type InitializeOffsitePaymentAction =\n    | InitializeOffsitePaymentRequestedAction\n    | InitializeOffsitePaymentSucceededAction\n    | InitializeOffsitePaymentFailedAction;\n\nexport interface SubmitPaymentRequestedAction extends Action {\n    type: PaymentActionType.SubmitPaymentRequested;\n}\n\nexport interface SubmitPaymentSucceededAction extends Action<PaymentResponseBody> {\n    type: PaymentActionType.SubmitPaymentSucceeded;\n}\n\nexport interface SubmitPaymentFailedAction extends Action<Error> {\n    type: PaymentActionType.SubmitPaymentFailed;\n}\n\nexport interface InitializeOffsitePaymentRequestedAction extends Action {\n    type: PaymentActionType.InitializeOffsitePaymentRequested;\n}\n\nexport interface InitializeOffsitePaymentSucceededAction extends Action {\n    type: PaymentActionType.InitializeOffsitePaymentSucceeded;\n}\n\nexport interface InitializeOffsitePaymentFailedAction extends Action<Error> {\n    type: PaymentActionType.InitializeOffsitePaymentFailed;\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-additional-action.ts",
    "content": "export default interface PaymentAdditionalAction {\n    type: string;\n    data: CardingProtectionActionData;\n}\n\nexport interface CardingProtectionActionData {\n    human_verification_token?: string;\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-action-creator.spec.ts",
    "content": "import { createRequestSender, createTimeout, Response } from '@bigcommerce/request-sender';\nimport { from, merge, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { ErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CheckoutStore, createCheckoutStore } from '../checkout';\nimport { getCheckout, getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { MissingDataError } from '../common/error/errors';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport B2BCompanyPaymentMethodRequestSender, {\n    B2BCompanyPaymentMethodsResponseBody,\n} from './b2b-company-payment-method-request-sender';\nimport PaymentMethod from './payment-method';\nimport PaymentMethodActionCreator from './payment-method-action-creator';\nimport { PaymentMethodActionType } from './payment-method-actions';\nimport PaymentMethodRequestSender from './payment-method-request-sender';\nimport { getPaymentMethod, getPaymentMethods, getPaymentMethodsMeta } from './payment-methods.mock';\n\ndescribe('PaymentMethodActionCreator', () => {\n    let errorResponse: Response<ErrorResponseBody>;\n    let paymentMethodActionCreator: PaymentMethodActionCreator;\n    let paymentMethodRequestSender: PaymentMethodRequestSender;\n    let b2bCompanyPaymentMethodRequestSender: B2BCompanyPaymentMethodRequestSender;\n    let paymentMethodResponse: Response<PaymentMethod>;\n    let paymentMethodsResponse: Response<PaymentMethod[]>;\n    let store: CheckoutStore;\n\n    beforeEach(() => {\n        errorResponse = getErrorResponse();\n        paymentMethodResponse = getResponse(getPaymentMethod());\n        paymentMethodsResponse = getResponse(getPaymentMethods(), {\n            'x-device-session-id': getPaymentMethodsMeta().deviceSessionId,\n            'x-session-hash': getPaymentMethodsMeta().sessionHash,\n        });\n        store = createCheckoutStore(getCheckoutStoreState());\n\n        paymentMethodRequestSender = new PaymentMethodRequestSender(createRequestSender());\n        b2bCompanyPaymentMethodRequestSender = new B2BCompanyPaymentMethodRequestSender(\n            createRequestSender(),\n        );\n        paymentMethodActionCreator = new PaymentMethodActionCreator(\n            paymentMethodRequestSender,\n            b2bCompanyPaymentMethodRequestSender,\n        );\n\n        jest.spyOn(paymentMethodRequestSender, 'loadPaymentMethod').mockReturnValue(\n            Promise.resolve(paymentMethodResponse),\n        );\n\n        jest.spyOn(paymentMethodRequestSender, 'loadPaymentMethods').mockReturnValue(\n            Promise.resolve(paymentMethodsResponse),\n        );\n\n        jest.spyOn(store.getState().cart, 'getCartOrThrow').mockReturnValue(getCheckout().cart);\n    });\n\n    describe('#loadPaymentMethods()', () => {\n        it('sends a request to get a list of payment methods', async () => {\n            await from(paymentMethodActionCreator.loadPaymentMethods()(store)).toPromise();\n\n            expect(paymentMethodRequestSender.loadPaymentMethods).toHaveBeenCalled();\n        });\n\n        it('emits actions if able to load payment methods', async () => {\n            const actions = await from(paymentMethodActionCreator.loadPaymentMethods()(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: PaymentMethodActionType.LoadPaymentMethodsRequested },\n                {\n                    type: PaymentMethodActionType.LoadPaymentMethodsSucceeded,\n                    payload: paymentMethodsResponse.body,\n                    meta: {\n                        deviceSessionId: paymentMethodsResponse.headers['x-device-session-id'],\n                        sessionHash: paymentMethodsResponse.headers['x-session-hash'],\n                    },\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to load payment methods', async () => {\n            jest.spyOn(paymentMethodRequestSender, 'loadPaymentMethods').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(paymentMethodActionCreator.loadPaymentMethods()(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: PaymentMethodActionType.LoadPaymentMethodsRequested },\n                {\n                    type: PaymentMethodActionType.LoadPaymentMethodsFailed,\n                    payload: errorResponse,\n                    error: true,\n                },\n            ]);\n        });\n\n        describe('with B2B company allow-list filtering', () => {\n            const companyId = 42;\n            const b2bToken = 'b2b-token-value';\n            const b2bBaseUrl = 'https://api-b2b.bigcommerce.com';\n\n            const allowListResponseBody: B2BCompanyPaymentMethodsResponseBody = {\n                data: [\n                    {\n                        code: getPaymentMethod().id,\n                        name: getPaymentMethod().id,\n                        isEnabled: '1',\n                        paymentId: 1,\n                    },\n                ],\n            };\n\n            function setCapability(value: boolean): void {\n                const baseConfig = store.getState().config.getStoreConfig()!;\n\n                jest.spyOn(store.getState().config, 'getStoreConfig').mockReturnValue({\n                    ...baseConfig,\n                    checkoutSettings: {\n                        ...baseConfig.checkoutSettings,\n                        capabilities: {\n                            ...baseConfig.checkoutSettings.capabilities,\n                            payment: {\n                                ...baseConfig.checkoutSettings.capabilities?.payment,\n                                b2bPaymentMethodFilter: value,\n                            },\n                        },\n                    } as typeof baseConfig.checkoutSettings,\n                    b2bApiSettings: { baseUrl: b2bBaseUrl, clientId: 'cid' },\n                });\n            }\n\n            beforeEach(() => {\n                const state = store.getState();\n\n                jest.spyOn(state.cart, 'getCart').mockReturnValue({\n                    ...getCheckout().cart,\n                    companyId,\n                });\n                jest.spyOn(state.customer, 'getCustomer').mockReturnValue({\n                    ...getCheckout().customer,\n                    isGuest: false,\n                });\n                jest.spyOn(state.b2bToken, 'getToken').mockReturnValue(b2bToken);\n                setCapability(true);\n\n                jest.spyOn(\n                    b2bCompanyPaymentMethodRequestSender,\n                    'getB2BCompanyPaymentMethods',\n                ).mockResolvedValue(getResponse(allowListResponseBody));\n            });\n\n            it('applies the filter automatically when the capability is enabled', async () => {\n                const actions = await from(paymentMethodActionCreator.loadPaymentMethods()(store))\n                    .pipe(toArray())\n                    .toPromise();\n\n                expect(\n                    b2bCompanyPaymentMethodRequestSender.getB2BCompanyPaymentMethods,\n                ).toHaveBeenCalledWith(companyId, b2bToken, b2bBaseUrl, undefined);\n\n                expect(actions).toEqual([\n                    { type: PaymentMethodActionType.LoadPaymentMethodsRequested },\n                    {\n                        type: PaymentMethodActionType.LoadPaymentMethodsSucceeded,\n                        payload: [getPaymentMethod()],\n                        meta: {\n                            deviceSessionId: paymentMethodsResponse.headers['x-device-session-id'],\n                            sessionHash: paymentMethodsResponse.headers['x-session-hash'],\n                        },\n                    },\n                ]);\n            });\n\n            it('does not call the B2B request sender when the capability is disabled', async () => {\n                setCapability(false);\n\n                await from(paymentMethodActionCreator.loadPaymentMethods()(store)).toPromise();\n\n                expect(\n                    b2bCompanyPaymentMethodRequestSender.getB2BCompanyPaymentMethods,\n                ).not.toHaveBeenCalled();\n            });\n\n            it('fails with MissingDataError when the B2B token is missing from state', async () => {\n                jest.spyOn(store.getState().b2bToken, 'getToken').mockReturnValue(undefined);\n\n                const errorHandler = jest.fn((action) => of(action));\n                const actions = await from(paymentMethodActionCreator.loadPaymentMethods()(store))\n                    .pipe(catchError(errorHandler), toArray())\n                    .toPromise();\n\n                expect(errorHandler).toHaveBeenCalled();\n                expect(\n                    b2bCompanyPaymentMethodRequestSender.getB2BCompanyPaymentMethods,\n                ).not.toHaveBeenCalled();\n                expect(actions[1].payload).toBeInstanceOf(MissingDataError);\n            });\n\n            it('emits LoadPaymentMethodsFailed when the B2B fetch errors', async () => {\n                const b2bError = new Error('B2B endpoint unavailable');\n\n                jest.spyOn(\n                    b2bCompanyPaymentMethodRequestSender,\n                    'getB2BCompanyPaymentMethods',\n                ).mockRejectedValue(b2bError);\n\n                const errorHandler = jest.fn((action) => of(action));\n                const actions = await from(paymentMethodActionCreator.loadPaymentMethods()(store))\n                    .pipe(catchError(errorHandler), toArray())\n                    .toPromise();\n\n                expect(errorHandler).toHaveBeenCalled();\n                expect(actions).toEqual([\n                    { type: PaymentMethodActionType.LoadPaymentMethodsRequested },\n                    {\n                        type: PaymentMethodActionType.LoadPaymentMethodsFailed,\n                        payload: b2bError,\n                        error: true,\n                    },\n                ]);\n            });\n\n            it('fails with MissingDataError when companyId is missing', async () => {\n                jest.spyOn(store.getState().cart, 'getCart').mockReturnValue({\n                    ...getCheckout().cart,\n                    companyId: null,\n                });\n\n                const errorHandler = jest.fn((action) => of(action));\n                const actions = await from(paymentMethodActionCreator.loadPaymentMethods()(store))\n                    .pipe(catchError(errorHandler), toArray())\n                    .toPromise();\n\n                expect(\n                    b2bCompanyPaymentMethodRequestSender.getB2BCompanyPaymentMethods,\n                ).not.toHaveBeenCalled();\n                expect(actions[1].payload).toBeInstanceOf(MissingDataError);\n            });\n\n            it('fails with MissingDataError when the customer is a guest', async () => {\n                jest.spyOn(store.getState().customer, 'getCustomer').mockReturnValue({\n                    ...getCheckout().customer,\n                    isGuest: true,\n                });\n\n                const errorHandler = jest.fn((action) => of(action));\n                const actions = await from(paymentMethodActionCreator.loadPaymentMethods()(store))\n                    .pipe(catchError(errorHandler), toArray())\n                    .toPromise();\n\n                expect(\n                    b2bCompanyPaymentMethodRequestSender.getB2BCompanyPaymentMethods,\n                ).not.toHaveBeenCalled();\n                expect(actions[1].payload).toBeInstanceOf(MissingDataError);\n            });\n\n            it('fails with MissingDataError when the B2B base URL is unavailable', async () => {\n                const baseConfig = store.getState().config.getStoreConfig()!;\n\n                jest.spyOn(store.getState().config, 'getStoreConfig').mockReturnValue({\n                    ...baseConfig,\n                    b2bApiSettings: { baseUrl: '', clientId: '' },\n                });\n\n                const errorHandler = jest.fn((action) => of(action));\n                const actions = await from(paymentMethodActionCreator.loadPaymentMethods()(store))\n                    .pipe(catchError(errorHandler), toArray())\n                    .toPromise();\n\n                expect(\n                    b2bCompanyPaymentMethodRequestSender.getB2BCompanyPaymentMethods,\n                ).not.toHaveBeenCalled();\n                expect(actions[1].payload).toBeInstanceOf(MissingDataError);\n            });\n        });\n    });\n\n    describe('#loadPaymentMethod()', () => {\n        it('loads payment method data', async () => {\n            const methodId = 'braintree';\n            const options = { params: { cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7' } };\n\n            await from(paymentMethodActionCreator.loadPaymentMethod(methodId)(store)).toPromise();\n\n            expect(paymentMethodRequestSender.loadPaymentMethod).toHaveBeenCalledWith(\n                methodId,\n                options,\n            );\n        });\n\n        it('loads payment method data with timeout', async () => {\n            const methodId = 'braintree';\n            const options = {\n                timeout: createTimeout(),\n                params: { cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7' },\n            };\n\n            await from(\n                paymentMethodActionCreator.loadPaymentMethod(methodId, options)(store),\n            ).toPromise();\n\n            expect(paymentMethodRequestSender.loadPaymentMethod).toHaveBeenCalledWith(\n                methodId,\n                options,\n            );\n        });\n\n        it('emits actions if able to load payment method', async () => {\n            const methodId = 'braintree';\n            const actions = await from(\n                paymentMethodActionCreator.loadPaymentMethod(methodId)(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: PaymentMethodActionType.LoadPaymentMethodRequested, meta: { methodId } },\n                {\n                    type: PaymentMethodActionType.LoadPaymentMethodSucceeded,\n                    meta: { methodId },\n                    payload: paymentMethodResponse.body,\n                },\n            ]);\n        });\n\n        it('emits actions with cached values if available', async () => {\n            const methodId = 'braintree';\n            const options = { useCache: true };\n            const actions = await merge(\n                from(paymentMethodActionCreator.loadPaymentMethod(methodId, options)(store)),\n                from(paymentMethodActionCreator.loadPaymentMethod(methodId, options)(store)),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(paymentMethodRequestSender.loadPaymentMethod).toHaveBeenCalledTimes(1);\n            expect(actions).toEqual([\n                { type: PaymentMethodActionType.LoadPaymentMethodRequested, meta: { methodId } },\n                { type: PaymentMethodActionType.LoadPaymentMethodRequested, meta: { methodId } },\n                {\n                    type: PaymentMethodActionType.LoadPaymentMethodSucceeded,\n                    meta: { methodId },\n                    payload: paymentMethodResponse.body,\n                },\n                {\n                    type: PaymentMethodActionType.LoadPaymentMethodSucceeded,\n                    meta: { methodId },\n                    payload: paymentMethodResponse.body,\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to load payment method', async () => {\n            jest.spyOn(paymentMethodRequestSender, 'loadPaymentMethod').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const methodId = 'braintree';\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(\n                paymentMethodActionCreator.loadPaymentMethod(methodId)(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: PaymentMethodActionType.LoadPaymentMethodRequested, meta: { methodId } },\n                {\n                    type: PaymentMethodActionType.LoadPaymentMethodFailed,\n                    meta: { methodId },\n                    payload: errorResponse,\n                    error: true,\n                },\n            ]);\n        });\n    });\n\n    describe('#loadPaymentMethodsByIds()', () => {\n        it('loads payment methods data', async () => {\n            const methodId = 'braintree';\n            const options = { params: { cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7' } };\n\n            await from(\n                paymentMethodActionCreator.loadPaymentMethodsById([methodId])(store),\n            ).toPromise();\n\n            expect(paymentMethodRequestSender.loadPaymentMethod).toHaveBeenCalledWith(\n                methodId,\n                options,\n            );\n        });\n\n        it('loads payment method data with timeout', async () => {\n            const methodId = 'braintree';\n            const options = {\n                timeout: createTimeout(),\n                params: { cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7' },\n            };\n\n            await from(\n                paymentMethodActionCreator.loadPaymentMethodsById([methodId], options)(store),\n            ).toPromise();\n\n            expect(paymentMethodRequestSender.loadPaymentMethod).toHaveBeenCalledWith(\n                methodId,\n                options,\n            );\n        });\n\n        it('emits actions if able to load payment method', async () => {\n            const methodId = 'braintree';\n            const actions = await from(\n                paymentMethodActionCreator.loadPaymentMethodsById([methodId])(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: PaymentMethodActionType.LoadPaymentMethodsRequested },\n                {\n                    type: PaymentMethodActionType.LoadPaymentMethodsSucceeded,\n                    payload: [getPaymentMethod()],\n                },\n            ]);\n        });\n\n        it('if call fails no methods are returned', async () => {\n            jest.spyOn(paymentMethodRequestSender, 'loadPaymentMethod').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const methodId = 'braintree';\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(\n                paymentMethodActionCreator.loadPaymentMethodsById([methodId])(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: PaymentMethodActionType.LoadPaymentMethodsRequested },\n                {\n                    type: PaymentMethodActionType.LoadPaymentMethodsSucceeded,\n                    payload: [],\n                },\n            ]);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-action-creator.ts",
    "content": "import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { Observable, Observer } from 'rxjs';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { ActionOptions, cachableAction } from '../common/data-store';\nimport { RequestOptions } from '../common/http-request';\n\nimport applyB2bCompanyPaymentMethodFilter from './apply-b2b-company-payment-method-filter';\nimport B2BCompanyPaymentMethodRequestSender from './b2b-company-payment-method-request-sender';\nimport {\n    LoadPaymentMethodAction,\n    LoadPaymentMethodsAction,\n    PaymentMethodActionType,\n} from './payment-method-actions';\nimport PaymentMethodRequestSender from './payment-method-request-sender';\n\nimport { PaymentMethod } from '.';\n\nconst isPaymentMethod = (value: PaymentMethod | undefined): value is PaymentMethod => {\n    return !!value;\n};\n\nexport default class PaymentMethodActionCreator {\n    constructor(\n        private _requestSender: PaymentMethodRequestSender,\n        private _b2bCompanyPaymentMethodRequestSender: B2BCompanyPaymentMethodRequestSender,\n    ) {}\n\n    loadPaymentMethodsById(\n        methodIds: string[],\n        options?: RequestOptions,\n    ): ThunkAction<LoadPaymentMethodsAction, InternalCheckoutSelectors> {\n        return (store) =>\n            new Observable((observer: Observer<LoadPaymentMethodsAction>) => {\n                const state = store.getState();\n                const cartId = state.cart.getCart()?.id;\n                const params = cartId ? { ...options?.params, cartId } : { ...options?.params };\n\n                observer.next(createAction(PaymentMethodActionType.LoadPaymentMethodsRequested));\n                Promise.all(\n                    methodIds.map(async (id) => {\n                        try {\n                            const response = await this._requestSender.loadPaymentMethod(id, {\n                                ...options,\n                                params,\n                            });\n\n                            return response.body;\n                        } catch (_e) {\n                            return undefined;\n                        }\n                    }),\n                )\n                    .then((response) => {\n                        const paymentMethods = response.filter(isPaymentMethod);\n\n                        observer.next(\n                            createAction(\n                                PaymentMethodActionType.LoadPaymentMethodsSucceeded,\n                                paymentMethods,\n                            ),\n                        );\n\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.next(\n                            createAction(\n                                PaymentMethodActionType.LoadPaymentMethodsFailed,\n                                response,\n                            ),\n                        );\n                        observer.complete();\n                    });\n            });\n    }\n\n    loadPaymentMethods(\n        options?: RequestOptions,\n    ): ThunkAction<LoadPaymentMethodsAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<LoadPaymentMethodsAction>) => {\n                const state = store.getState();\n                const cart = state.cart.getCartOrThrow();\n\n                observer.next(createAction(PaymentMethodActionType.LoadPaymentMethodsRequested));\n\n                this._requestSender\n                    .loadPaymentMethods({\n                        ...options,\n                        params: { ...options?.params, cartId: cart.id },\n                    })\n                    .then(async (response) => {\n                        const meta = {\n                            deviceSessionId: response.headers['x-device-session-id'],\n                            sessionHash: response.headers['x-session-hash'],\n                        };\n                        let methods = response.body;\n\n                        const isB2bPaymentMethodFilterEnabled =\n                            state.config.getStoreConfig()?.checkoutSettings.capabilities?.payment\n                                ?.b2bPaymentMethodFilter ?? false;\n\n                        if (isB2bPaymentMethodFilterEnabled) {\n                            methods = await applyB2bCompanyPaymentMethodFilter(\n                                methods,\n                                state,\n                                this._b2bCompanyPaymentMethodRequestSender,\n                                options,\n                            );\n                        }\n\n                        observer.next(\n                            createAction(\n                                PaymentMethodActionType.LoadPaymentMethodsSucceeded,\n                                methods,\n                                meta,\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                PaymentMethodActionType.LoadPaymentMethodsFailed,\n                                response,\n                            ),\n                        );\n                    });\n            });\n    }\n\n    @cachableAction\n    loadPaymentMethod(\n        methodId: string,\n        options?: RequestOptions & ActionOptions,\n    ): ThunkAction<LoadPaymentMethodAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<LoadPaymentMethodAction>) => {\n                const state = store.getState();\n                const cartId = state.cart.getCart()?.id;\n                const params = cartId ? { ...options?.params, cartId } : { ...options?.params };\n\n                observer.next(\n                    createAction(PaymentMethodActionType.LoadPaymentMethodRequested, undefined, {\n                        methodId,\n                    }),\n                );\n\n                this._requestSender\n                    .loadPaymentMethod(methodId, { ...options, params })\n                    .then((response) => {\n                        observer.next(\n                            createAction(\n                                PaymentMethodActionType.LoadPaymentMethodSucceeded,\n                                response.body,\n                                { methodId },\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                PaymentMethodActionType.LoadPaymentMethodFailed,\n                                response,\n                                { methodId },\n                            ),\n                        );\n                    });\n            });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport PaymentMethod from './payment-method';\nimport PaymentMethodMeta from './payment-method-meta';\n\nexport enum PaymentMethodActionType {\n    LoadPaymentMethodRequested = 'LOAD_PAYMENT_METHOD_REQUESTED',\n    LoadPaymentMethodSucceeded = 'LOAD_PAYMENT_METHOD_SUCCEEDED',\n    LoadPaymentMethodFailed = 'LOAD_PAYMENT_METHOD_FAILED',\n\n    LoadPaymentMethodsRequested = 'LOAD_PAYMENT_METHODS_REQUESTED',\n    LoadPaymentMethodsSucceeded = 'LOAD_PAYMENT_METHODS_SUCCEEDED',\n    LoadPaymentMethodsFailed = 'LOAD_PAYMENT_METHODS_FAILED',\n}\n\nexport type PaymentMethodAction = LoadPaymentMethodAction | LoadPaymentMethodsAction;\n\nexport type LoadPaymentMethodAction =\n    | LoadPaymentMethodRequestedAction\n    | LoadPaymentMethodSucceededAction\n    | LoadPaymentMethodFailedAction;\n\nexport type LoadPaymentMethodsAction =\n    | LoadPaymentMethodsRequestedAction\n    | LoadPaymentMethodsSucceededAction\n    | LoadPaymentMethodsFailedAction;\n\nexport interface LoadPaymentMethodRequestedAction extends Action {\n    type: PaymentMethodActionType.LoadPaymentMethodRequested;\n}\n\nexport interface LoadPaymentMethodSucceededAction extends Action<PaymentMethod> {\n    type: PaymentMethodActionType.LoadPaymentMethodSucceeded;\n}\n\nexport interface LoadPaymentMethodFailedAction extends Action<Error> {\n    type: PaymentMethodActionType.LoadPaymentMethodFailed;\n}\n\nexport interface LoadPaymentMethodsRequestedAction extends Action {\n    type: PaymentMethodActionType.LoadPaymentMethodsRequested;\n}\n\nexport interface LoadPaymentMethodsSucceededAction\n    extends Action<PaymentMethod[], PaymentMethodMeta> {\n    type: PaymentMethodActionType.LoadPaymentMethodsSucceeded;\n}\n\nexport interface LoadPaymentMethodsFailedAction extends Action<Error> {\n    type: PaymentMethodActionType.LoadPaymentMethodsFailed;\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-config.ts",
    "content": "export default interface PaymentMethodConfig {\n    cardCode?: boolean;\n    displayName?: string;\n    enablePaypal?: boolean;\n    hasDefaultStoredInstrument?: boolean;\n    helpText?: string;\n    is3dsEnabled?: boolean;\n    isHostedFormEnabled?: boolean;\n    isVaultingCvvEnabled?: boolean;\n    isVaultingEnabled?: boolean;\n    isVisaCheckoutEnabled?: boolean;\n    logo?: string;\n    merchantId?: string;\n    redirectUrl?: string;\n    requireCustomerCode?: boolean;\n    returnUrl?: string;\n    showCardHolderName?: boolean;\n    testMode?: boolean;\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-initialization-strategy.ts",
    "content": "interface UnknownObject {\n    [key: string]: unknown;\n}\n\nexport default interface InitializationStrategy extends Partial<UnknownObject> {\n    type: string;\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-meta.ts",
    "content": "export default interface PaymentMethodMeta {\n    deviceSessionId: string;\n    sessionHash: string;\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-reducer.spec.ts",
    "content": "import { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport { PaymentMethodActionType } from './payment-method-actions';\nimport paymentMethodReducer from './payment-method-reducer';\nimport PaymentMethodState from './payment-method-state';\nimport {\n    getBraintreePaypal,\n    getPaymentMethod,\n    getPaymentMethods,\n    getPaymentMethodsMeta,\n} from './payment-methods.mock';\n\ndescribe('paymentMethodReducer()', () => {\n    let initialState: PaymentMethodState;\n\n    beforeEach(() => {\n        initialState = {\n            data: [],\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    it('returns new state when loading payment methods', () => {\n        const action = {\n            type: PaymentMethodActionType.LoadPaymentMethodsRequested,\n        };\n\n        expect(paymentMethodReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: {},\n            statuses: { isLoading: true },\n        });\n    });\n\n    it('returns new state when payment methods are loaded', () => {\n        const action = {\n            type: PaymentMethodActionType.LoadPaymentMethodsSucceeded,\n            payload: getPaymentMethods(),\n            meta: getPaymentMethodsMeta(),\n        };\n\n        expect(paymentMethodReducer(initialState, action)).toEqual({\n            ...initialState,\n            data: action.payload,\n            meta: action.meta,\n            errors: { loadError: undefined },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns new state when payment methods cannot be loaded', () => {\n        const action = {\n            type: PaymentMethodActionType.LoadPaymentMethodsFailed,\n            payload: getErrorResponse(),\n        };\n\n        expect(paymentMethodReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: { loadError: action.payload },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns new state when payment method is loaded', () => {\n        const response = getPaymentMethod();\n        const action = {\n            type: PaymentMethodActionType.LoadPaymentMethodSucceeded,\n            payload: response,\n            meta: { methodId: 'braintree' },\n        };\n\n        expect(paymentMethodReducer(initialState, action)).toEqual({\n            ...initialState,\n            data: [action.payload],\n            errors: {\n                loadMethodId: undefined,\n                loadMethodError: undefined,\n            },\n            statuses: {\n                isLoadingMethod: false,\n                loadingMethod: undefined,\n            },\n        });\n    });\n\n    it('returns new state when payment method cannot be loaded', () => {\n        const action = {\n            type: PaymentMethodActionType.LoadPaymentMethodFailed,\n            payload: getErrorResponse(),\n            meta: { methodId: 'braintree' },\n        };\n\n        expect(paymentMethodReducer(initialState, action)).toEqual({\n            ...initialState,\n            data: [],\n            errors: {\n                loadMethodId: 'braintree',\n                loadMethodError: getErrorResponse(),\n            },\n            statuses: {\n                isLoadingMethod: false,\n                loadingMethod: undefined,\n            },\n        });\n    });\n\n    it('returns new state when payment method is loaded and merged with existing payment methods', () => {\n        const response = getPaymentMethod();\n        const action = {\n            type: PaymentMethodActionType.LoadPaymentMethodSucceeded,\n            payload: {\n                ...response,\n                clientToken: '8e738db9-6477-4c92-888e-bea8f1311339',\n            },\n        };\n\n        initialState = {\n            ...initialState,\n            data: [getPaymentMethod(), getBraintreePaypal()],\n        };\n\n        expect(paymentMethodReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: [action.payload, getBraintreePaypal()],\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, mergeOrPush, objectMerge, objectSet } from '../common/utility';\n\nimport PaymentMethod from './payment-method';\nimport { PaymentMethodAction, PaymentMethodActionType } from './payment-method-actions';\nimport PaymentMethodMeta from './payment-method-meta';\nimport PaymentMethodState, {\n    DEFAULT_STATE,\n    PaymentMethodErrorsState,\n    PaymentMethodStatusesState,\n} from './payment-method-state';\n\nexport default function paymentMethodReducer(\n    state: PaymentMethodState = DEFAULT_STATE,\n    action: Action,\n): PaymentMethodState {\n    const reducer = combineReducers<PaymentMethodState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        meta: metaReducer,\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: PaymentMethod[] | undefined,\n    action: PaymentMethodAction,\n): PaymentMethod[] | undefined {\n    switch (action.type) {\n        case PaymentMethodActionType.LoadPaymentMethodSucceeded:\n            return mergeOrPush(\n                data || [],\n                action.payload,\n                action.payload && {\n                    id: action.payload.id,\n                    gateway: action.payload.gateway,\n                },\n            );\n\n        case PaymentMethodActionType.LoadPaymentMethodsSucceeded:\n            return arrayReplace(data, action.payload, {\n                matchObject: (methodA, methodB) =>\n                    methodA.id === methodB.id && methodA.gateway === methodB.gateway,\n            });\n\n        default:\n            return data;\n    }\n}\n\nfunction metaReducer(\n    meta: PaymentMethodMeta | undefined,\n    action: PaymentMethodAction,\n): PaymentMethodMeta | undefined {\n    switch (action.type) {\n        case PaymentMethodActionType.LoadPaymentMethodsSucceeded:\n            return objectMerge(meta, action.meta);\n\n        default:\n            return meta;\n    }\n}\n\nfunction errorsReducer(\n    errors: PaymentMethodErrorsState = DEFAULT_STATE.errors,\n    action: PaymentMethodAction,\n): PaymentMethodErrorsState {\n    switch (action.type) {\n        case PaymentMethodActionType.LoadPaymentMethodsRequested:\n        case PaymentMethodActionType.LoadPaymentMethodsSucceeded:\n            return objectSet(errors, 'loadError', undefined);\n\n        case PaymentMethodActionType.LoadPaymentMethodsFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        case PaymentMethodActionType.LoadPaymentMethodRequested:\n        case PaymentMethodActionType.LoadPaymentMethodSucceeded:\n            return objectMerge(errors, {\n                loadMethodId: undefined,\n                loadMethodError: undefined,\n            });\n\n        case PaymentMethodActionType.LoadPaymentMethodFailed:\n            return objectMerge(errors, {\n                loadMethodId: action.meta.methodId,\n                loadMethodError: action.payload,\n            });\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: PaymentMethodStatusesState = DEFAULT_STATE.statuses,\n    action: PaymentMethodAction,\n): PaymentMethodStatusesState {\n    switch (action.type) {\n        case PaymentMethodActionType.LoadPaymentMethodsRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case PaymentMethodActionType.LoadPaymentMethodsSucceeded:\n        case PaymentMethodActionType.LoadPaymentMethodsFailed:\n            return objectSet(statuses, 'isLoading', false);\n\n        case PaymentMethodActionType.LoadPaymentMethodRequested:\n            return objectMerge(statuses, {\n                isLoadingMethod: true,\n                loadMethodId: action.meta.methodId,\n            });\n\n        case PaymentMethodActionType.LoadPaymentMethodSucceeded:\n        case PaymentMethodActionType.LoadPaymentMethodFailed:\n            return objectMerge(statuses, {\n                isLoadingMethod: false,\n                loadMethodId: undefined,\n            });\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-request-sender.spec.ts",
    "content": "import {\n    createRequestSender,\n    createTimeout,\n    RequestSender,\n    Response,\n} from '@bigcommerce/request-sender';\n\nimport { ContentType, INTERNAL_USE_ONLY, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getResponse } from '../common/http-request/responses.mock';\n\nimport PaymentMethod from './payment-method';\nimport PaymentMethodRequestSender from './payment-method-request-sender';\nimport { getPaymentMethod, getPaymentMethods } from './payment-methods.mock';\n\ndescribe('PaymentMethodRequestSender', () => {\n    let paymentMethodRequestSender: PaymentMethodRequestSender;\n    let requestSender: RequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        paymentMethodRequestSender = new PaymentMethodRequestSender(requestSender);\n    });\n\n    describe('#loadPaymentMethods()', () => {\n        let response: Response<PaymentMethod[]>;\n\n        beforeEach(() => {\n            response = getResponse(getPaymentMethods());\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('loads payment methods', async () => {\n            expect(await paymentMethodRequestSender.loadPaymentMethods()).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/payments', {\n                timeout: undefined,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('loads payment methods with timeout', async () => {\n            const options = { timeout: createTimeout() };\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n\n            expect(await paymentMethodRequestSender.loadPaymentMethods(options)).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/payments', {\n                ...options,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('loads payment methods with params', async () => {\n            const options = { params: { method: 'method-id' } };\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n\n            expect(await paymentMethodRequestSender.loadPaymentMethods(options)).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/payments', {\n                ...options,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n    });\n\n    describe('#loadPaymentMethod()', () => {\n        let response: Response<PaymentMethod>;\n\n        beforeEach(() => {\n            response = getResponse(getPaymentMethod());\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('loads payment method', async () => {\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n\n            expect(await paymentMethodRequestSender.loadPaymentMethod('braintree')).toEqual(\n                response,\n            );\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/payments/braintree', {\n                timeout: undefined,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('loads payment method with timeout', async () => {\n            const options = { timeout: createTimeout() };\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n\n            expect(\n                await paymentMethodRequestSender.loadPaymentMethod('braintree', options),\n            ).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/payments/braintree', {\n                ...options,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('loads payment method with params', async () => {\n            const options = { params: { method: 'method-id' } };\n\n            jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(response));\n\n            expect(await paymentMethodRequestSender.loadPaymentMethod('afterpay', options)).toEqual(\n                response,\n            );\n            expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/payments/afterpay', {\n                ...options,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport PaymentMethod from './payment-method';\n\nexport default class PaymentMethodRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    loadPaymentMethods({ timeout, params }: RequestOptions = {}): Promise<\n        Response<PaymentMethod[]>\n    > {\n        const url = '/api/storefront/payments';\n\n        return this._requestSender.get(url, {\n            timeout,\n            headers: {\n                Accept: ContentType.JsonV1,\n                'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                ...SDK_VERSION_HEADERS,\n            },\n            params,\n        });\n    }\n\n    loadPaymentMethod(\n        methodId: string,\n        { timeout, params }: RequestOptions = {},\n    ): Promise<Response<PaymentMethod>> {\n        const url = `/api/storefront/payments/${methodId}`;\n\n        return this._requestSender.get(url, {\n            timeout,\n            headers: {\n                Accept: ContentType.JsonV1,\n                'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                ...SDK_VERSION_HEADERS,\n            },\n            params,\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-selector.spec.ts",
    "content": "import { CheckoutStoreState } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport PaymentMethodSelector, {\n    createPaymentMethodSelectorFactory,\n    PaymentMethodSelectorFactory,\n} from './payment-method-selector';\nimport { getAdyenAmex, getBraintree } from './payment-methods.mock';\n\ndescribe('PaymentMethodSelector', () => {\n    let createPaymentMethodSelector: PaymentMethodSelectorFactory;\n    let paymentMethodSelector: PaymentMethodSelector;\n    let state: CheckoutStoreState;\n\n    beforeEach(() => {\n        createPaymentMethodSelector = createPaymentMethodSelectorFactory();\n        state = getCheckoutStoreState();\n    });\n\n    describe('#getPaymentMethods()', () => {\n        it('returns a list of payment methods', () => {\n            paymentMethodSelector = createPaymentMethodSelector(state.paymentMethods);\n\n            expect(paymentMethodSelector.getPaymentMethods()).toEqual(state.paymentMethods.data);\n        });\n\n        it('returns an empty array if there are no payment methods', () => {\n            paymentMethodSelector = createPaymentMethodSelector({\n                ...state.paymentMethods,\n                data: [],\n            });\n\n            expect(paymentMethodSelector.getPaymentMethods()).toEqual([]);\n        });\n    });\n\n    describe('#getPaymentMethod()', () => {\n        it('returns payment method if found', () => {\n            paymentMethodSelector = createPaymentMethodSelector(state.paymentMethods);\n\n            expect(paymentMethodSelector.getPaymentMethod('braintree')).toEqual(getBraintree());\n        });\n\n        it('returns multi-option payment method if found', () => {\n            paymentMethodSelector = createPaymentMethodSelector(state.paymentMethods);\n\n            expect(paymentMethodSelector.getPaymentMethod('amex', 'adyen')).toEqual(getAdyenAmex());\n        });\n\n        it('returns nothing if payment method is not found', () => {\n            paymentMethodSelector = createPaymentMethodSelector(state.paymentMethods);\n\n            expect(paymentMethodSelector.getPaymentMethod('xyz')).toBeUndefined();\n        });\n\n        it('returns nothing if multi-option payment method is not found', () => {\n            paymentMethodSelector = createPaymentMethodSelector(state.paymentMethods);\n\n            expect(paymentMethodSelector.getPaymentMethod('amex')).toEqual(getAdyenAmex());\n        });\n    });\n\n    describe('#getLoadError()', () => {\n        it('returns error if unable to load', () => {\n            const loadError = new RequestError(getErrorResponse());\n\n            paymentMethodSelector = createPaymentMethodSelector({\n                ...state.paymentMethods,\n                errors: { loadError },\n            });\n\n            expect(paymentMethodSelector.getLoadError()).toEqual(loadError);\n        });\n\n        it('does not returns error if able to load', () => {\n            paymentMethodSelector = createPaymentMethodSelector(state.paymentMethods);\n\n            expect(paymentMethodSelector.getLoadError()).toBeUndefined();\n        });\n    });\n\n    describe('#getLoadMethodError()', () => {\n        it('returns error if unable to load', () => {\n            const loadMethodError = new RequestError(getErrorResponse());\n\n            paymentMethodSelector = createPaymentMethodSelector({\n                ...state.paymentMethods,\n                errors: { loadMethodError, loadMethodId: 'braintree' },\n            });\n\n            expect(paymentMethodSelector.getLoadMethodError('braintree')).toEqual(loadMethodError);\n        });\n\n        it('does not returns error if able to load', () => {\n            paymentMethodSelector = createPaymentMethodSelector(state.paymentMethods);\n\n            expect(paymentMethodSelector.getLoadMethodError('braintree')).toBeUndefined();\n        });\n\n        it('does not returns error if unable to load irrelevant method', () => {\n            const loadMethodError = new RequestError(getErrorResponse());\n\n            paymentMethodSelector = createPaymentMethodSelector({\n                ...state.paymentMethods,\n                errors: { loadMethodError, loadMethodId: 'authorizenet' },\n            });\n\n            expect(paymentMethodSelector.getLoadMethodError('braintree')).toBeUndefined();\n        });\n\n        it('returns any error if method id is not passed', () => {\n            const loadMethodError = new RequestError(getErrorResponse());\n\n            paymentMethodSelector = createPaymentMethodSelector({\n                ...state.paymentMethods,\n                errors: { loadMethodError, loadMethodId: 'braintree' },\n            });\n\n            expect(paymentMethodSelector.getLoadMethodError()).toEqual(loadMethodError);\n        });\n    });\n\n    describe('#isLoading()', () => {\n        it('returns true if loading payment methods', () => {\n            paymentMethodSelector = createPaymentMethodSelector({\n                ...state.paymentMethods,\n                statuses: { isLoading: true },\n            });\n\n            expect(paymentMethodSelector.isLoading()).toBe(true);\n        });\n\n        it('returns false if not loading payment methods', () => {\n            paymentMethodSelector = createPaymentMethodSelector(state.paymentMethods);\n\n            expect(paymentMethodSelector.isLoading()).toBe(false);\n        });\n    });\n\n    describe('#isLoadingMethod()', () => {\n        it('returns true if loading payment method', () => {\n            paymentMethodSelector = createPaymentMethodSelector({\n                ...state.paymentMethods,\n                statuses: { isLoadingMethod: true, loadMethodId: 'braintree' },\n            });\n\n            expect(paymentMethodSelector.isLoadingMethod('braintree')).toBe(true);\n        });\n\n        it('returns false if not loading payment method', () => {\n            paymentMethodSelector = createPaymentMethodSelector({\n                ...state.paymentMethods,\n                statuses: { isLoadingMethod: false, loadMethodId: undefined },\n            });\n\n            expect(paymentMethodSelector.isLoadingMethod('braintree')).toBe(false);\n        });\n\n        it('returns false if not loading specific payment method', () => {\n            paymentMethodSelector = createPaymentMethodSelector({\n                ...state.paymentMethods,\n                statuses: { isLoadingMethod: true, loadMethodId: 'authorizenet' },\n            });\n\n            expect(paymentMethodSelector.isLoadingMethod('braintree')).toBe(false);\n        });\n\n        it('returns any loading status if method id is not passed', () => {\n            paymentMethodSelector = createPaymentMethodSelector({\n                ...state.paymentMethods,\n                statuses: { isLoadingMethod: true, loadMethodId: 'braintree' },\n            });\n\n            expect(paymentMethodSelector.isLoadingMethod()).toBe(true);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\nimport { find } from 'lodash';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport PaymentMethod from './payment-method';\nimport PaymentMethodMeta from './payment-method-meta';\nimport PaymentMethodState, { DEFAULT_STATE } from './payment-method-state';\n\nexport default interface PaymentMethodSelector {\n    getPaymentMethods(): PaymentMethod[] | undefined;\n    getPaymentMethodsMeta(): PaymentMethodMeta | undefined;\n    getPaymentMethod(methodId: string, gatewayId?: string): PaymentMethod | undefined;\n    getPaymentMethodOrThrow(methodId: string, gatewayId?: string): PaymentMethod;\n    getLoadError(): Error | undefined;\n    getLoadMethodError(methodId?: string): Error | undefined;\n    isLoading(): boolean;\n    isLoadingMethod(methodId?: string): boolean;\n}\n\nexport type PaymentMethodSelectorFactory = (state: PaymentMethodState) => PaymentMethodSelector;\n\nexport function createPaymentMethodSelectorFactory(): PaymentMethodSelectorFactory {\n    const getPaymentMethods = createSelector(\n        (state: PaymentMethodState) => state.data,\n        (paymentMethods) => () => paymentMethods,\n    );\n\n    const getPaymentMethodsMeta = createSelector(\n        (state: PaymentMethodState) => state.meta,\n        (meta) => () => meta,\n    );\n\n    const getPaymentMethod = createSelector(\n        (state: PaymentMethodState) => state.data,\n        (paymentMethods) => (methodId: string, gatewayId?: string) => {\n            return gatewayId\n                ? find(paymentMethods, { id: methodId, gateway: gatewayId })\n                : find(paymentMethods, { id: methodId });\n        },\n    );\n\n    const getPaymentMethodOrThrow = createSelector(\n        getPaymentMethod,\n        (getPaymentMethod) => (methodId: string, gatewayId?: string) => {\n            return guard(\n                getPaymentMethod(methodId, gatewayId),\n                () => new MissingDataError(MissingDataErrorType.MissingPaymentMethod),\n            );\n        },\n    );\n\n    const getLoadError = createSelector(\n        (state: PaymentMethodState) => state.errors.loadError,\n        (loadError) => () => loadError,\n    );\n\n    const getLoadMethodError = createSelector(\n        (state: PaymentMethodState) => state.errors.loadMethodId,\n        (state: PaymentMethodState) => state.errors.loadMethodError,\n        (loadMethodId, loadMethodError) => (methodId?: string) => {\n            if (methodId && loadMethodId !== methodId) {\n                return;\n            }\n\n            return loadMethodError;\n        },\n    );\n\n    const isLoading = createSelector(\n        (state: PaymentMethodState) => state.statuses.isLoading,\n        (isLoading) => () => !!isLoading,\n    );\n\n    const isLoadingMethod = createSelector(\n        (state: PaymentMethodState) => state.statuses.loadMethodId,\n        (state: PaymentMethodState) => state.statuses.isLoadingMethod,\n        (loadMethodId, isLoadingMethod) => (methodId?: string) => {\n            if (methodId && loadMethodId !== methodId) {\n                return false;\n            }\n\n            return !!isLoadingMethod;\n        },\n    );\n\n    return memoizeOne((state: PaymentMethodState = DEFAULT_STATE): PaymentMethodSelector => {\n        return {\n            getPaymentMethods: getPaymentMethods(state),\n            getPaymentMethodsMeta: getPaymentMethodsMeta(state),\n            getPaymentMethod: getPaymentMethod(state),\n            getPaymentMethodOrThrow: getPaymentMethodOrThrow(state),\n            getLoadError: getLoadError(state),\n            getLoadMethodError: getLoadMethodError(state),\n            isLoading: isLoading(state),\n            isLoadingMethod: isLoadingMethod(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-state.ts",
    "content": "import PaymentMethod from './payment-method';\nimport PaymentMethodMeta from './payment-method-meta';\n\nexport default interface PaymentMethodState {\n    data?: PaymentMethod[];\n    meta?: PaymentMethodMeta;\n    errors: PaymentMethodErrorsState;\n    statuses: PaymentMethodStatusesState;\n}\n\nexport interface PaymentMethodErrorsState {\n    loadMethodId?: string;\n    loadError?: Error;\n    loadMethodError?: Error;\n}\n\nexport interface PaymentMethodStatusesState {\n    loadMethodId?: string;\n    isLoading?: boolean;\n    isLoadingMethod?: boolean;\n}\n\nexport const DEFAULT_STATE: PaymentMethodState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/payment/payment-method-types.ts",
    "content": "export const HOSTED = 'PAYMENT_TYPE_HOSTED';\nexport const OFFLINE = 'PAYMENT_TYPE_OFFLINE';\n"
  },
  {
    "path": "packages/core/src/payment/payment-method.ts",
    "content": "import PaymentMethodConfig from './payment-method-config';\nimport InitializationStrategy from './payment-method-initialization-strategy';\n\nexport default interface PaymentMethod<T = any> {\n    id: string;\n    config: PaymentMethodConfig;\n    method: string;\n    supportedCards: string[];\n    type: string;\n    clientToken?: string;\n    gateway?: string;\n    logoUrl?: string;\n    nonce?: string;\n    initializationData?: T;\n    returnUrl?: string;\n    initializationStrategy?: InitializationStrategy;\n    skipRedirectConfirmationAlert: boolean;\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-methods.mock.ts",
    "content": "import { getAmazonPayV2 } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport { DefaultCheckoutButtonHeight } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PaymentMethod from './payment-method';\nimport PaymentMethodState from './payment-method-state';\nimport { PaypalButtonStyleColorOption } from './strategies/paypal';\n\nexport function getBraintree(): PaymentMethod {\n    return {\n        id: 'braintree',\n        clientToken: 'clientToken',\n        logoUrl:\n            'https://cdn.bcapp.dev/rHEAD/modules/checkout/braintree/images/paypal_powered_braintree_horizontal.png',\n        method: 'credit-card',\n        supportedCards: ['VISA', 'MC', 'AMEX', 'DISCOVER', 'JCB', 'DINERS'],\n        config: {\n            displayName: 'Credit Card',\n            cardCode: true,\n            enablePaypal: true,\n            merchantId: '',\n            testMode: true,\n            isVisaCheckoutEnabled: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        initializationData: {\n            isAcceleratedCheckoutEnabled: false,\n            merchantAccountId: '100000',\n            paymentButtonStyles: {\n                checkoutTopButtonStyles: {\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                    height: DefaultCheckoutButtonHeight,\n                },\n            },\n        },\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getBraintreePaypal(): PaymentMethod {\n    return {\n        id: 'braintreepaypal',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        config: {\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'foo',\n        initializationData: {\n            isBrainteeVenmoEnabled: false,\n            enableCheckoutPaywallBanner: false,\n            paymentButtonStyles: {\n                checkoutTopButtonStyles: {\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                    height: DefaultCheckoutButtonHeight,\n                },\n            },\n        },\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getBraintreePaypalCredit(): PaymentMethod {\n    return {\n        id: 'braintreepaypalcredit',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        config: {\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'foo',\n        initializationData: {\n            isBraintreeVenmoEnabled: false,\n            paymentButtonStyles: {\n                checkoutTopButtonStyles: {\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    label: 'checkout',\n                    height: DefaultCheckoutButtonHeight,\n                },\n            },\n        },\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getBraintreeVisaCheckout(): PaymentMethod {\n    return {\n        id: 'braintreevisacheckout',\n        clientToken: 'clientToken',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        config: {\n            testMode: false,\n            isVisaCheckoutEnabled: true,\n        },\n        initializationData: {},\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getPaypalExpress(): PaymentMethod {\n    return {\n        id: 'paypalexpress',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        config: {\n            merchantId: 'h3hxn44tdd8wxkzd',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getPaypalCommerce(): PaymentMethod {\n    return {\n        id: 'paypalcommerce',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        clientToken: 'asdcvY7XFSQasd',\n        config: {\n            testMode: true,\n            merchantId: 'JTS4DY7XFSQZE',\n        },\n        initializationData: {\n            buttonStyle: {\n                height: 55,\n                color: 'black',\n                label: 'pay',\n            },\n            clientId: 'abc',\n            merchantId: 'JTS4DY7XFSQZE',\n            orderId: '3U4171152W1482642',\n            attributionId: '1123JLKJASD12',\n            intent: 'capture',\n            isPayPalCreditAvailable: false,\n            isVenmoEnabled: false,\n            shouldRenderFields: true,\n            isHostedCheckoutEnabled: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getPaypal(): PaymentMethod {\n    return {\n        id: 'paypal',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        config: {\n            testMode: false,\n            is3dsEnabled: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'foo',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getPPSDK(): PaymentMethod {\n    return {\n        id: 'cabbagepay',\n        method: 'credit-card',\n        supportedCards: [],\n        config: {},\n        type: 'PAYMENT_TYPE_SDK',\n        initializationStrategy: {\n            type: 'none',\n        },\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getUnsupportedPPSDK(): PaymentMethod {\n    return {\n        id: 'unsupported-cabbagepay',\n        method: 'credit-card',\n        supportedCards: [],\n        config: {},\n        type: 'PAYMENT_TYPE_SDK',\n        initializationStrategy: {\n            type: 'SOMETHING_UNSUPPORTED',\n        },\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getAdyenAmex(): PaymentMethod {\n    return {\n        id: 'amex',\n        gateway: 'adyen',\n        logoUrl: '',\n        method: 'multi-option',\n        supportedCards: [],\n        config: {\n            displayName: 'AMEX',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_HOSTED',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getAuthorizenet(): PaymentMethod {\n    return {\n        id: 'authorizenet',\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: [],\n        config: {\n            displayName: 'Authorizenet',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getBlueSnapV2(): PaymentMethod {\n    return {\n        id: 'cc',\n        gateway: 'bluesnapv2',\n        logoUrl: '',\n        method: 'multi-option',\n        supportedCards: [],\n        config: {\n            displayName: 'Credit Card',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_HOSTED',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getCybersource(): PaymentMethod {\n    return {\n        id: 'cybersource',\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: [],\n        config: {\n            displayName: 'Cybersource',\n            is3dsEnabled: true,\n            testMode: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'cyberToken',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getBankDeposit(): PaymentMethod {\n    return {\n        id: 'bankdeposit',\n        logoUrl: '',\n        method: 'offline',\n        supportedCards: [],\n        config: {\n            displayName: 'Bank Deposit',\n            helpText: 'Type any special instructions in here.',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_OFFLINE',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getKlarna(): PaymentMethod {\n    return {\n        id: 'klarna',\n        logoUrl: '',\n        method: 'widget',\n        supportedCards: [],\n        config: {\n            displayName: 'Pay Over Time',\n            helpText: 'Type any special instructions in here.',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'foo',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getAffirm(): PaymentMethod {\n    return {\n        id: 'affirm',\n        logoUrl: '',\n        method: 'affirm',\n        supportedCards: [],\n        config: {\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'foo',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getHumm(): PaymentMethod {\n    return {\n        id: 'humm',\n        logoUrl: '',\n        method: 'humm',\n        supportedCards: [],\n        config: {\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getStripe(): PaymentMethod {\n    return {\n        id: 'stripe',\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: ['VISA', 'MC', 'AMEX', 'DISCOVER', 'JCB', 'DINERS'],\n        config: {\n            displayName: 'Credit Card',\n            cardCode: true,\n            enablePaypal: true,\n            merchantId: '',\n            testMode: true,\n            isVisaCheckoutEnabled: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getSquare(): PaymentMethod {\n    return {\n        id: 'square',\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: ['VISA', 'MC', 'AMEX', 'DISCOVER', 'JCB', 'DINERS'],\n        config: {\n            displayName: 'Credit Card',\n            cardCode: true,\n            enablePaypal: true,\n            merchantId: '',\n            testMode: true,\n            isVisaCheckoutEnabled: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        initializationData: {\n            applicationId: 'test',\n            env: 'bar',\n            locationId: 'foo',\n            paymentData: {\n                nonce: undefined,\n            },\n        },\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getGooglePay(): PaymentMethod {\n    return {\n        id: 'googlepay',\n        logoUrl: '',\n        method: 'googlepay',\n        supportedCards: ['VISA', 'MC', 'AMEX'],\n        config: {\n            displayName: 'Google Pay',\n            merchantId: '',\n            testMode: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        initializationData: {\n            nonce: 'nonce',\n            card_information: {\n                type: 'MasterCard',\n                number: '4111',\n            },\n        },\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getGooglePayAdyenV2(): PaymentMethod {\n    return {\n        id: 'googlepayadyenv2',\n        logoUrl: '',\n        method: 'googlepay',\n        supportedCards: ['VISA', 'MC', 'AMEX'],\n        config: {\n            displayName: 'Google Pay',\n            merchantId: '',\n            testMode: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        initializationData: {\n            originKey: 'YOUR_ORIGIN_KEY',\n            clientKey: 'YOUR_CLIENT_KEY',\n            nonce: 'nonce',\n            card_information: {\n                type: 'MasterCard',\n                number: '4111',\n            },\n        },\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getGooglePayAdyenV3(): PaymentMethod {\n    return {\n        id: 'googlepayadyenv3',\n        logoUrl: '',\n        method: 'googlepay',\n        supportedCards: ['VISA', 'MC', 'AMEX'],\n        config: {\n            displayName: 'Google Pay',\n            merchantId: '',\n            testMode: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        initializationData: {\n            clientKey: 'YOUR_CLIENT_KEY',\n            nonce: 'nonce',\n            card_information: {\n                type: 'MasterCard',\n                number: '4111',\n            },\n        },\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getGooglePayCybersourceV2(): PaymentMethod {\n    return {\n        id: 'googlepaycybersourcev2',\n        logoUrl: '',\n        method: 'googlepay',\n        supportedCards: ['VISA', 'MC', 'AMEX'],\n        config: {\n            displayName: 'Google Pay',\n            merchantId: '',\n            testMode: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        initializationData: {\n            originKey: 'YOUR_ORIGIN_KEY',\n            clientKey: 'YOUR_CLIENT_KEY',\n            nonce: 'nonce',\n            card_information: {\n                type: 'MasterCard',\n                number: '4111',\n            },\n        },\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getGooglePayOrbital(): PaymentMethod {\n    return {\n        id: 'googlepayorbital',\n        logoUrl: '',\n        method: 'googlepay',\n        supportedCards: ['VISA', 'MC', 'AMEX'],\n        config: {\n            displayName: 'Google Pay',\n            merchantId: '',\n            testMode: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        initializationData: {\n            originKey: 'YOUR_ORIGIN_KEY',\n            clientKey: 'YOUR_CLIENT_KEY',\n            nonce: 'nonce',\n            card_information: {\n                type: 'MasterCard',\n                number: '4111',\n            },\n        },\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getZip(): PaymentMethod {\n    return {\n        id: 'zip',\n        logoUrl: '',\n        method: 'zip',\n        supportedCards: [],\n        config: {\n            displayName: 'Zip',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: '{\"id\":\"checkout_id\"}',\n        initializationData: {\n            redirectUrl: 'http://some-url',\n        },\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getQuadpay(): PaymentMethod {\n    return {\n        id: 'quadpay',\n        logoUrl: '',\n        method: 'quadpay',\n        supportedCards: [],\n        config: {\n            displayName: 'Quadpay',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: '{\"id\":\"checkout_id\"}',\n        initializationData: {\n            redirectUrl: 'http://some-url',\n        },\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getStripeV3(\n    method = 'card',\n    shouldUseIndividualCardFields = false,\n    isHostedFormEnabled = false,\n): PaymentMethod {\n    return {\n        id: method,\n        gateway: 'stripev3',\n        logoUrl: '',\n        method,\n        supportedCards: [],\n        config: {\n            displayName: 'Stripe',\n            merchantId: '',\n            testMode: true,\n            isHostedFormEnabled,\n        },\n        initializationData: {\n            stripePublishableKey: 'key',\n            useIndividualCardFields: shouldUseIndividualCardFields,\n            bopis: {\n                enabled: false,\n                requiredAddress: 'none',\n            },\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        returnUrl: 'http://www.example.com',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getStripeUPE(method = 'card'): PaymentMethod {\n    return {\n        id: method,\n        logoUrl: '',\n        method,\n        supportedCards: [],\n        config: {\n            displayName: 'Stripe',\n            merchantId: '',\n            testMode: true,\n        },\n        initializationData: {\n            stripePublishableKey: 'key',\n            stripeConnectedAccount: 'key',\n            browserLanguageEnabled: false,\n            shopperLanguage: 'en',\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        returnUrl: 'http://www.example.com',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getAdyenV3(method = 'scheme'): PaymentMethod {\n    return {\n        id: 'adyenv3',\n        logoUrl: '',\n        method,\n        supportedCards: [],\n        config: {\n            displayName: 'Adyen',\n            merchantId: 'YOUR_MERCHANT_ID',\n            testMode: true,\n        },\n        initializationData: {\n            clientKey: 'YOUR_CLIENT_KEY',\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getBolt(): PaymentMethod {\n    return {\n        id: 'bolt',\n        logoUrl: '',\n        method: 'bolt',\n        supportedCards: [],\n        config: {\n            displayName: 'Bolt',\n            testMode: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        initializationData: {\n            publishableKey: 'publishableKey',\n            embeddedOneClickEnabled: false,\n        },\n        clientToken: 'clientToken',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getPaymentMethod(): PaymentMethod {\n    return getAuthorizenet();\n}\n\nexport function getCheckoutcom(): PaymentMethod {\n    return {\n        id: 'checkoutcom',\n        logoUrl: '',\n        method: 'checkoutcom',\n        supportedCards: [],\n        config: {\n            displayName: 'Checkout.com',\n            merchantId: '',\n            testMode: true,\n        },\n        initializationData: {\n            checkoutcomkey: 'key',\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getMollie(): PaymentMethod {\n    return {\n        id: 'mollie',\n        gateway: '',\n        logoUrl:\n            'https://charlsieremade-cloud-dev-vm.store.bcdev/rHEAD/modules/checkout/mollie/images/mollie.png',\n        method: 'multi-options',\n        supportedCards: ['VISA', 'AMEX', 'MC', 'MAESTRO'],\n        config: {\n            displayName: 'Mollie',\n            hasDefaultStoredInstrument: false,\n            helpText: '',\n            is3dsEnabled: false,\n            isHostedFormEnabled: true,\n            isVaultingCvvEnabled: false,\n            isVaultingEnabled: false,\n            isVisaCheckoutEnabled: false,\n            merchantId: 'test_T0k3n',\n            requireCustomerCode: false,\n            testMode: true,\n        },\n        initializationData: {\n            locale: 'en-US',\n        },\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getMoneris(): PaymentMethod {\n    return {\n        id: 'moneris',\n        gateway: '',\n        logoUrl: '',\n        method: 'moneris',\n        supportedCards: [],\n        config: {\n            isHostedFormEnabled: false,\n            displayName: 'Moneris',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        initializationData: {\n            profileId: 'ABC123',\n            creditCardLabel: 'Credit Card',\n            expiryDateLabel: 'Expiration Date',\n            cvdLabel: 'CVV',\n        },\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getCBAMPGS(): PaymentMethod {\n    return {\n        id: 'cba_mpgs',\n        gateway: '',\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: [],\n        clientToken: 'foo',\n        config: {\n            displayName: 'CBA MPGS',\n            is3dsEnabled: true,\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        initializationData: {\n            isTestModeFlagEnabled: false,\n            merchantId: 'ABC123',\n        },\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getPaymentMethods(): PaymentMethod[] {\n    return [\n        getAdyenAmex(),\n        getAffirm(),\n        getAmazonPayV2(),\n        getAuthorizenet(),\n        getBlueSnapV2(),\n        getBraintree(),\n        getBraintreePaypal(),\n        getBraintreePaypalCredit(),\n        getBraintreeVisaCheckout(),\n        getCheckoutcom(),\n        getGooglePay(),\n        getGooglePayAdyenV2(),\n        getGooglePayCybersourceV2(),\n        getGooglePayOrbital(),\n        getHumm(),\n        getKlarna(),\n        getMollie(),\n        getMoneris(),\n        getPaypalCommerce(),\n        getPaypalExpress(),\n        getPPSDK(),\n        getQuadpay(),\n        getSquare(),\n        getStripeV3(),\n        getStripeUPE(),\n        getUnsupportedPPSDK(),\n        getApplePay(),\n        getZip(),\n    ];\n}\n\nexport function getApplePay() {\n    return {\n        id: 'applepay',\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: [],\n        providesShippingAddress: false,\n        config: {\n            displayName: '',\n            helpText: '',\n            testMode: false,\n            requireCustomerCode: false,\n            isVaultingEnabled: false,\n            hasDefaultStoredInstrument: false,\n            isHostedFormEnabled: false,\n        },\n        type: 'PAYMENT_TYPE_WALLET',\n        initializationStrategy: {\n            type: 'not_applicable',\n        },\n        nonce: undefined,\n        initializationData: {\n            storeName: 'test store',\n            countryCode: 'US',\n            currencyCode: 'USD',\n            supportedNetworks: ['visa', 'masterCard', 'amex', 'discover'],\n            gateway: 'adyenv2',\n            merchantCapabilities: ['supports3DS'],\n            merchantId: 'abc',\n            paymentsUrl: 'https://bigpay.service.bcdev',\n        },\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getPaymentMethodsMeta() {\n    return {\n        geoCountryCode: 'AU',\n        deviceSessionId: 'a37230e9a8e4ea2d7765e2f3e19f7b1d',\n        sessionHash: 'cfbbbac580a920b395571fe086db1e06',\n    };\n}\n\nexport function getPaymentMethodsState(): PaymentMethodState {\n    return {\n        data: getPaymentMethods(),\n        meta: getPaymentMethodsMeta(),\n        errors: {},\n        statuses: {},\n    };\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-reducer.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\n\nimport { PaymentActionType } from './payment-actions';\nimport paymentReducer from './payment-reducer';\nimport PaymentState from './payment-state';\nimport { getPaymentResponseBody } from './payments.mock';\n\ndescribe('paymentReducer', () => {\n    let initialState: PaymentState;\n\n    beforeEach(() => {\n        initialState = {};\n    });\n\n    it('returns new data if payment is submitted successfully', () => {\n        const action = createAction(\n            PaymentActionType.SubmitPaymentSucceeded,\n            getPaymentResponseBody(),\n        );\n\n        expect(paymentReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: action.payload,\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-reducer.ts",
    "content": "import { combineReducers } from '@bigcommerce/data-store';\n\nimport { PaymentAction, PaymentActionType } from './payment-actions';\nimport PaymentResponseBody from './payment-response-body';\nimport PaymentState from './payment-state';\n\nexport default function paymentReducer(\n    state: PaymentState = {},\n    action: PaymentAction,\n): PaymentState {\n    const reducer = combineReducers<PaymentState, PaymentAction>({\n        data: dataReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: PaymentResponseBody | undefined,\n    action: PaymentAction,\n): PaymentResponseBody | undefined {\n    switch (action.type) {\n        case PaymentActionType.SubmitPaymentSucceeded:\n            return action.payload;\n\n        default:\n            return data;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-request-body.ts",
    "content": "import { InternalAddress } from '../address';\nimport { InternalCart } from '../cart';\nimport { InternalCustomer } from '../customer';\nimport { InternalOrder } from '../order';\nimport { InternalShippingOption } from '../shipping';\n\nimport { PaymentInstrument } from './payment';\nimport PaymentAdditionalAction from './payment-additional-action';\nimport PaymentMethod from './payment-method';\n\nexport default interface PaymentRequestBody {\n    additionalAction?: PaymentAdditionalAction;\n    authToken: string;\n    billingAddress?: InternalAddress;\n    cart?: InternalCart;\n    customer?: InternalCustomer;\n    order?: InternalOrder;\n    orderMeta?: {\n        deviceFingerprint?: string;\n    };\n    payment?: PaymentInstrument;\n    paymentMethod?: PaymentMethod;\n    quoteMeta?: {\n        request?: {\n            deviceSessionId?: string;\n            geoCountryCode?: string;\n            sessionHash?: string;\n        };\n    };\n    shippingAddress?: InternalAddress;\n    shippingOption?: InternalShippingOption;\n    source?: string;\n    store?: {\n        storeHash?: string;\n        storeId?: string;\n        storeLanguage?: string;\n        storeName?: string;\n    };\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-request-options.ts",
    "content": "import { CreditCardPaymentInitializeOptions } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    PaymentStrategy,\n    PaymentStrategyFactory,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestOptions } from '../common/http-request';\n\nexport { PaymentInitializeOptions } from '../generated/payment-initialize-options';\n\n/**\n * The set of options for configuring any requests related to the payment step of\n * the current checkout flow.\n */\nexport interface PaymentRequestOptions extends RequestOptions {\n    /**\n     * The identifier of the payment method.\n     */\n    methodId: string;\n\n    /**\n     * The identifier of the payment provider providing the payment method. This\n     * option is only required if the provider offers multiple payment options.\n     * i.e.: Adyen and Klarna.\n     */\n    gatewayId?: string;\n}\n\n/**\n * A set of options that are required to initialize the payment step of the\n * current checkout flow.\n */\nexport interface BasePaymentInitializeOptions extends PaymentRequestOptions {\n    /**\n     * @alpha\n     */\n    integrations?: Array<PaymentStrategyFactory<PaymentStrategy>>;\n\n    /**\n     * @alpha\n     * Please note that this option is currently in an early stage of\n     * development. Therefore the API is unstable and not ready for public\n     * consumption.\n     */\n    creditCard?: CreditCardPaymentInitializeOptions;\n}\n\nexport interface OrderFinalizeOptions extends RequestOptions {\n    /**\n     * @alpha\n     */\n    integrations?: Array<PaymentStrategyFactory<PaymentStrategy>>;\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-request-sender.spec.ts",
    "content": "import PaymentRequestSender from './payment-request-sender';\nimport {\n    getErrorPaymentResponseBody,\n    getPaymentRequestBody,\n    getPaymentResponseBody,\n} from './payments.mock';\n\ndescribe('PaymentRequestSender', () => {\n    let bigpayClient: any;\n    let paymentRequestSender: PaymentRequestSender;\n\n    describe('#submitPayment()', () => {\n        beforeEach(() => {\n            bigpayClient = {\n                submitPayment: jest.fn((_, callback) =>\n                    callback(null, {\n                        data: getPaymentResponseBody(),\n                        headers: { 'content-type': 'application/json' },\n                        status: 200,\n                        statusText: 'OK',\n                    }),\n                ),\n            };\n            paymentRequestSender = new PaymentRequestSender(bigpayClient);\n        });\n\n        it('submits payment data to Bigpay', () => {\n            const payload = getPaymentRequestBody();\n\n            paymentRequestSender.submitPayment(payload);\n\n            expect(bigpayClient.submitPayment).toHaveBeenCalledWith(payload, expect.any(Function));\n        });\n\n        it('returns payment response if submission is successful', async () => {\n            const output = await paymentRequestSender.submitPayment(getPaymentRequestBody());\n\n            expect(output).toEqual({\n                body: getPaymentResponseBody(),\n                headers: { 'content-type': 'application/json' },\n                status: 200,\n                statusText: 'OK',\n            });\n        });\n\n        it('returns error response if submission is unsuccessful', async () => {\n            bigpayClient.submitPayment = jest.fn((_, callback) =>\n                callback({\n                    data: getErrorPaymentResponseBody(),\n                    headers: { 'content-type': 'application/json' },\n                    status: 400,\n                    statusText: 'Bad Request',\n                }),\n            );\n\n            try {\n                await paymentRequestSender.submitPayment(getPaymentRequestBody());\n            } catch (error) {\n                expect(error).toEqual({\n                    body: getErrorPaymentResponseBody(),\n                    headers: { 'content-type': 'application/json' },\n                    status: 400,\n                    statusText: 'Bad Request',\n                });\n            }\n        });\n    });\n\n    describe('#initializeOffsitePayment()', () => {\n        beforeEach(() => {\n            bigpayClient = {\n                initializeOffsitePayment: jest.fn(),\n            };\n            paymentRequestSender = new PaymentRequestSender(bigpayClient);\n        });\n\n        it('submits payment data to Bigpay', () => {\n            const payload = getPaymentRequestBody();\n\n            paymentRequestSender.initializeOffsitePayment(payload);\n\n            expect(bigpayClient.initializeOffsitePayment).toHaveBeenCalledWith(\n                payload,\n                null,\n                undefined,\n            );\n        });\n\n        it('submits payment data to BigPay with custom target', () => {\n            const payload = getPaymentRequestBody();\n\n            paymentRequestSender.initializeOffsitePayment(payload, 'iframename');\n\n            expect(bigpayClient.initializeOffsitePayment).toHaveBeenCalledWith(\n                payload,\n                null,\n                'iframename',\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-request-sender.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport PaymentRequestBody from './payment-request-body';\n\n/**\n * @todo Convert this file into TypeScript properly\n */\nexport default class PaymentRequestSender {\n    /**\n     * @class\n     * @param {BigpayClient} client\n     */\n    constructor(private _client: any) {}\n\n    submitPayment(payload: PaymentRequestBody): Promise<Response<any>> {\n        return new Promise((resolve, reject) => {\n            this._client.submitPayment(payload, (error: any, response: any) => {\n                if (error) {\n                    reject(this._transformResponse(error));\n                } else {\n                    resolve(this._transformResponse(response));\n                }\n            });\n        });\n    }\n\n    initializeOffsitePayment(payload: PaymentRequestBody, target?: string): Promise<void> {\n        return new Promise(() => {\n            this._client.initializeOffsitePayment(payload, null, target);\n        });\n    }\n\n    private _transformResponse(response: any): Response<any> {\n        return {\n            headers: response.headers,\n            body: response.data,\n            status: response.status,\n            statusText: response.statusText,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-request-transformer.spec.ts",
    "content": "import { merge } from 'lodash';\n\nimport { getBillingAddress } from '../billing/billing-addresses.mock';\nimport {\n    CheckoutStoreState,\n    createInternalCheckoutSelectors,\n    InternalCheckoutSelectors,\n} from '../checkout';\nimport {\n    getCheckoutStoreStateWithOrder,\n    getCheckoutWithGiftCertificates,\n} from '../checkout/checkouts.mock';\nimport { MissingDataError } from '../common/error/errors';\nimport { getConfig } from '../config/configs.mock';\nimport { getCustomer } from '../customer/customers.mock';\nimport { HostedFieldType } from '../hosted-form';\nimport { getHostedFormOrderData } from '../hosted-form/hosted-form-order-data.mock';\nimport { getOrder, getOrderMeta } from '../order/orders.mock';\nimport { getConsignment, getConsignments } from '../shipping/consignments.mock';\nimport { getShippingAddress } from '../shipping/shipping-addresses.mock';\nimport { getShippingOption } from '../shipping/shipping-options.mock';\n\nimport { getInstrumentsMeta } from './instrument/instrument.mock';\nimport Payment from './payment';\nimport {\n    getAdyenAmex,\n    getAuthorizenet,\n    getPaymentMethodsMeta,\n    getStripeV3,\n} from './payment-methods.mock';\nimport PaymentRequestTransformer from './payment-request-transformer';\nimport { getPayment, getPaymentRequestBody } from './payments.mock';\n\ndescribe('PaymentRequestTransformer', () => {\n    let state: CheckoutStoreState;\n    let selectors: InternalCheckoutSelectors;\n    let payment: Payment;\n    let paymentRequestTransformer: PaymentRequestTransformer;\n\n    beforeEach(() => {\n        state = getCheckoutStoreStateWithOrder();\n        selectors = createInternalCheckoutSelectors(state);\n        payment = {\n            methodId: 'methodId',\n            paymentData: getPayment().paymentData,\n        };\n        paymentRequestTransformer = new PaymentRequestTransformer();\n\n        jest.spyOn(selectors.billingAddress, 'getBillingAddress').mockReturnValue(\n            getBillingAddress(),\n        );\n        jest.spyOn(selectors.checkout, 'getCheckout').mockReturnValue(\n            getCheckoutWithGiftCertificates(),\n        );\n        jest.spyOn(selectors.customer, 'getCustomer').mockReturnValue(getCustomer());\n        jest.spyOn(selectors.order, 'getOrder').mockReturnValue(getOrder());\n        jest.spyOn(selectors.paymentMethods, 'getPaymentMethod').mockReturnValue(getAuthorizenet());\n        jest.spyOn(selectors.shippingAddress, 'getShippingAddress').mockReturnValue(\n            getShippingAddress(),\n        );\n        jest.spyOn(selectors.consignments, 'getConsignments').mockReturnValue(getConsignments());\n        jest.spyOn(selectors.consignments, 'getShippingOption').mockReturnValue(\n            getShippingOption(),\n        );\n        jest.spyOn(selectors.config, 'getStoreConfig').mockReturnValue(getConfig().storeConfig);\n        jest.spyOn(selectors.config, 'getContextConfig').mockReturnValue(getConfig().context);\n        jest.spyOn(selectors.instruments, 'getInstrumentsMeta').mockReturnValue(\n            getInstrumentsMeta(),\n        );\n        jest.spyOn(selectors.paymentMethods, 'getPaymentMethodsMeta').mockReturnValue(\n            getPaymentMethodsMeta(),\n        );\n        jest.spyOn(selectors.order, 'getOrderMeta').mockReturnValue(getOrderMeta());\n    });\n\n    it('transform a payload to PaymentRequestBody', () => {\n        const paymentRequestBodyResponse = paymentRequestTransformer.transform(payment, selectors);\n\n        expect(paymentRequestBodyResponse).toEqual(getPaymentRequestBody());\n    });\n\n    it('throws when authToken is not generated', () => {\n        jest.spyOn(selectors.payment, 'getPaymentToken').mockReturnValue(undefined);\n\n        expect(() => paymentRequestTransformer.transform(payment, selectors)).toThrow(\n            MissingDataError,\n        );\n    });\n\n    it('returns paymentMethod as undefined when state does not have paymentMethods', () => {\n        jest.spyOn(selectors.paymentMethods, 'getPaymentMethod').mockReturnValue(undefined);\n\n        const expectedPaymentRequestBody = getPaymentRequestBody();\n\n        expectedPaymentRequestBody.paymentMethod = undefined;\n\n        const paymentRequestBodyResponse = paymentRequestTransformer.transform(payment, selectors);\n\n        expect(paymentRequestBodyResponse).toEqual(expectedPaymentRequestBody);\n    });\n\n    it('returns paymentMethod format when is a multi-option gateway', () => {\n        const paymentMethod = getAdyenAmex();\n\n        paymentMethod.gateway = undefined;\n\n        jest.spyOn(selectors.paymentMethods, 'getPaymentMethod').mockReturnValue(paymentMethod);\n\n        const expectedPaymentRequestBody = getPaymentRequestBody();\n\n        expectedPaymentRequestBody.paymentMethod = { ...paymentMethod, gateway: paymentMethod.id };\n\n        const paymentRequestBodyResponse = paymentRequestTransformer.transform(payment, selectors);\n\n        expect(paymentRequestBodyResponse.paymentMethod).toEqual(\n            expectedPaymentRequestBody.paymentMethod,\n        );\n    });\n\n    it('returns paymentMethod format when contains initializationData', () => {\n        const paymentMethod = getAuthorizenet();\n\n        paymentMethod.initializationData = {\n            gateway: 'authorizenet',\n        };\n\n        jest.spyOn(selectors.paymentMethods, 'getPaymentMethod').mockReturnValue(paymentMethod);\n\n        const expectedPaymentRequestBody = getPaymentRequestBody();\n\n        expectedPaymentRequestBody.paymentMethod = {\n            ...paymentMethod,\n            id: paymentMethod.initializationData.gateway,\n        };\n\n        const paymentRequestBodyResponse = paymentRequestTransformer.transform(payment, selectors);\n\n        expect(paymentRequestBodyResponse.paymentMethod).toEqual(\n            expectedPaymentRequestBody.paymentMethod,\n        );\n    });\n\n    it('transforms from hosted form data', () => {\n        const result = paymentRequestTransformer.transformWithHostedFormData(\n            {\n                [HostedFieldType.CardNumber]: '4111 1111 1111 1111',\n                [HostedFieldType.CardCode]: '123',\n                [HostedFieldType.CardName]: 'BigCommerce',\n                [HostedFieldType.CardExpiry]: '10 / 20',\n            },\n            getHostedFormOrderData(),\n            'nonce',\n        );\n\n        expect(result).toEqual(\n            merge({}, getPaymentRequestBody(), {\n                payment: {\n                    hostedFormNonce: 'nonce',\n                },\n            }),\n        );\n    });\n\n    it('transforms from hosted form data for paying with stored card', () => {\n        const result = paymentRequestTransformer.transformWithHostedFormData(\n            {\n                [HostedFieldType.CardNumberVerification]: '4111 1111 1111 1111',\n                [HostedFieldType.CardCodeVerification]: '123',\n            },\n            {\n                ...getHostedFormOrderData(),\n                payment: {\n                    instrumentId: 'abcdefg',\n                },\n            },\n            'nonce',\n        );\n\n        expect(result.payment).toEqual({\n            ccNumber: '4111111111111111',\n            ccCvv: '123',\n            hostedFormNonce: 'nonce',\n            instrumentId: 'abcdefg',\n        });\n    });\n\n    it('transforms from hosted form data with additional data', () => {\n        const additionalAction = {\n            type: 'recaptcha_v2_verification',\n            data: {\n                human_verification_token: 'googleRecaptchaToken',\n            },\n        };\n\n        const result = paymentRequestTransformer.transformWithHostedFormData(\n            {\n                [HostedFieldType.CardNumber]: '4111 1111 1111 1111',\n                [HostedFieldType.CardCode]: '123',\n                [HostedFieldType.CardName]: 'BigCommerce',\n                [HostedFieldType.CardExpiry]: '10 / 20',\n            },\n            {\n                ...getHostedFormOrderData(),\n                additionalAction,\n            },\n            'nonce',\n        );\n\n        expect(result).toEqual(\n            merge({}, getPaymentRequestBody(), {\n                additionalAction,\n                payment: {\n                    hostedFormNonce: 'nonce',\n                },\n            }),\n        );\n    });\n\n    it('returns additinalAction within request if provided in payment parameter', () => {\n        const additionalActionMock = {\n            type: 'recaptcha_v2_verification',\n            data: {\n                human_verification_token: 'googleRecaptchaToken',\n            },\n        };\n\n        payment.additionalAction = additionalActionMock;\n\n        const paymentRequestBodyResponse = paymentRequestTransformer.transform(payment, selectors);\n\n        expect(paymentRequestBodyResponse.additionalAction).toEqual(additionalActionMock);\n    });\n\n    describe('BOPIS', () => {\n        it('should pass nothing in for shipping object', () => {\n            const paymentMethod = getStripeV3();\n\n            paymentMethod.initializationData.bopis.enabled = true;\n            paymentMethod.initializationData.bopis.requiredAddress = 'none';\n\n            jest.spyOn(selectors.paymentMethods, 'getPaymentMethod').mockReturnValue(paymentMethod);\n\n            jest.spyOn(selectors.consignments, 'getConsignments').mockReturnValue([\n                {\n                    ...getConsignment(),\n                    // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    selectedShippingOption: null,\n                    selectedPickupOption: {\n                        pickupMethodId: 1,\n                    },\n                },\n            ]);\n\n            const paymentRequestBody = paymentRequestTransformer.transform(payment, selectors);\n\n            expect(paymentRequestBody.shippingAddress).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-request-transformer.ts",
    "content": "import { pick } from 'lodash';\n\nimport { Address, mapToInternalAddress } from '../address';\nimport { mapToInternalCart } from '../cart';\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { CheckoutButtonMethodType } from '../checkout-buttons/strategies';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { mapToInternalCustomer } from '../customer';\nimport { HostedFormOrderData } from '../hosted-form';\nimport {\n    CardExpiryFormatter,\n    CardNumberFormatter,\n    HostedInputValues,\n} from '../hosted-form/iframe-content';\nimport { mapToInternalOrder } from '../order';\nimport { mapToInternalShippingOption } from '../shipping';\n\nimport isVaultedInstrument, { isFormattedVaultedInstrument } from './is-vaulted-instrument';\nimport Payment, {\n    HostedCreditCardInstrument,\n    HostedVaultedInstrument,\n    PaymentInstrument,\n} from './payment';\nimport PaymentMethod from './payment-method';\nimport PaymentRequestBody from './payment-request-body';\n\nexport default class PaymentRequestTransformer {\n    private _cardExpiryFormatter = new CardExpiryFormatter();\n    private _cardNumberFormatter = new CardNumberFormatter();\n\n    transform(payment: Payment, checkoutState: InternalCheckoutSelectors): PaymentRequestBody {\n        const billingAddress = checkoutState.billingAddress.getBillingAddress();\n        const checkout = checkoutState.checkout.getCheckout();\n        const customer = checkoutState.customer.getCustomer();\n        const order = checkoutState.order.getOrder();\n        const paymentMethod = checkoutState.paymentMethods.getPaymentMethod(\n            payment.methodId,\n            payment.gatewayId,\n        );\n        const shippingAddress = this._mapShippingAddress(checkoutState, paymentMethod);\n        const consignments = checkoutState.consignments.getConsignments();\n        const shippingOption = checkoutState.consignments.getShippingOption();\n        const storeConfig = checkoutState.config.getStoreConfig();\n        const contextConfig = checkoutState.config.getContextConfig();\n        const instrumentMeta = checkoutState.instruments.getInstrumentsMeta();\n        const paymentMeta = checkoutState.paymentMethods.getPaymentMethodsMeta();\n        const orderMeta = checkoutState.order.getOrderMeta();\n        const internalCustomer =\n            customer && billingAddress && mapToInternalCustomer(customer, billingAddress);\n\n        const authToken =\n            instrumentMeta &&\n            payment.paymentData &&\n            (isVaultedInstrument(payment.paymentData) ||\n                isFormattedVaultedInstrument(payment.paymentData))\n                ? `${checkoutState.payment.getPaymentToken()}, ${instrumentMeta.vaultAccessToken}`\n                : checkoutState.payment.getPaymentToken();\n\n        if (!authToken) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n        }\n\n        return {\n            additionalAction: payment.additionalAction,\n            authToken,\n            customer: internalCustomer,\n            billingAddress: billingAddress && mapToInternalAddress(billingAddress),\n            shippingAddress: shippingAddress && mapToInternalAddress(shippingAddress, consignments),\n            shippingOption: shippingOption && mapToInternalShippingOption(shippingOption, true),\n            cart: checkout && mapToInternalCart(checkout),\n            order: order && mapToInternalOrder(order, orderMeta),\n            orderMeta,\n            payment: payment.paymentData,\n            paymentMethod: paymentMethod && this._transformPaymentMethod(paymentMethod),\n            quoteMeta: {\n                request: {\n                    ...paymentMeta,\n                    geoCountryCode: contextConfig && contextConfig.geoCountryCode,\n                },\n            },\n            source: 'bigcommerce-checkout-js-sdk',\n            store: pick(storeConfig && storeConfig.storeProfile, [\n                'storeHash',\n                'storeId',\n                'storeLanguage',\n                'storeName',\n            ]),\n        };\n    }\n\n    transformWithHostedFormData(\n        values: HostedInputValues,\n        data: HostedFormOrderData,\n        nonce: string,\n    ): PaymentRequestBody {\n        const {\n            additionalAction,\n            authToken,\n            checkout,\n            config,\n            order,\n            orderMeta,\n            payment = {},\n            paymentMethod,\n            paymentMethodMeta,\n        } = data;\n        const consignment = checkout && checkout.consignments[0];\n        const shippingAddress = consignment && consignment.shippingAddress;\n        const shippingOption = consignment && consignment.selectedShippingOption;\n\n        return {\n            additionalAction,\n            authToken,\n            paymentMethod: paymentMethod && this._transformPaymentMethod(paymentMethod),\n            customer:\n                order &&\n                order.billingAddress &&\n                checkout &&\n                mapToInternalCustomer(checkout.customer, order.billingAddress),\n            billingAddress:\n                order && order.billingAddress && mapToInternalAddress(order.billingAddress),\n            shippingAddress:\n                shippingAddress &&\n                checkout &&\n                mapToInternalAddress(shippingAddress, checkout.consignments),\n            shippingOption: shippingOption && mapToInternalShippingOption(shippingOption, true),\n            cart: checkout && mapToInternalCart(checkout),\n            order: order && mapToInternalOrder(order, orderMeta),\n            orderMeta,\n            payment: this._transformHostedInputValues(values, payment, nonce),\n            quoteMeta: {\n                request: {\n                    ...paymentMethodMeta,\n                    geoCountryCode: config && config.context.geoCountryCode,\n                },\n            },\n            source: 'bigcommerce-checkout-js-sdk',\n            store:\n                config &&\n                pick(config.storeConfig.storeProfile, [\n                    'storeHash',\n                    'storeId',\n                    'storeLanguage',\n                    'storeName',\n                ]),\n        };\n    }\n\n    private _transformPaymentMethod(paymentMethod: PaymentMethod): PaymentMethod {\n        if (paymentMethod.method === 'multi-option' && !paymentMethod.gateway) {\n            return { ...paymentMethod, gateway: paymentMethod.id };\n        }\n\n        if (paymentMethod.initializationData && paymentMethod.initializationData.gateway) {\n            return { ...paymentMethod, id: paymentMethod.initializationData.gateway };\n        }\n\n        // Worldpay Access: sub-methods carry the provider name in `gateway` and the method\n        // name in `id`. BigPay's mapToId uses `id` as the gateway field unless\n        // `method === 'multi-option'`, so we align with hosted-form-order-data-transformer\n        if (paymentMethod.gateway === 'worldpayaccess') {\n            if (paymentMethod.id === 'credit_card') {\n                return { ...paymentMethod, id: 'worldpayaccess', method: 'credit-card' };\n            }\n\n            if (paymentMethod.id === 'open_banking') {\n                return { ...paymentMethod, id: 'worldpayaccess', method: 'open_banking' };\n            }\n        }\n\n        if (paymentMethod.id === CheckoutButtonMethodType.BRAINTREE_VENMO) {\n            return { ...paymentMethod, id: CheckoutButtonMethodType.BRAINTREE_PAYPAL };\n        }\n\n        return paymentMethod;\n    }\n\n    private _transformHostedInputValues(\n        values: HostedInputValues,\n        payment: HostedCreditCardInstrument | HostedVaultedInstrument,\n        nonce: string,\n    ): PaymentInstrument {\n        return 'instrumentId' in payment\n            ? {\n                  ...payment,\n                  ccCvv: values.cardCodeVerification,\n                  ccNumber:\n                      values.cardNumberVerification &&\n                      this._cardNumberFormatter.unformat(values.cardNumberVerification),\n                  hostedFormNonce: nonce,\n              }\n            : {\n                  ...payment,\n                  ccCvv: values.cardCode,\n                  ccExpiry: this._cardExpiryFormatter.toObject(values.cardExpiry || ''),\n                  ccName: values.cardName || '',\n                  ccNumber: this._cardNumberFormatter.unformat(values.cardNumber || ''),\n                  hostedFormNonce: nonce,\n              };\n    }\n\n    private _mapShippingAddress(\n        checkoutState: InternalCheckoutSelectors,\n        paymentMethod?: PaymentMethod,\n    ): Address | undefined {\n        if (paymentMethod) {\n            const isBopisEnabled = paymentMethod.initializationData?.bopis?.enabled;\n            const requiredAddress = paymentMethod.initializationData?.bopis?.requiredAddress;\n            const consignments = checkoutState.consignments.getConsignments();\n            const isPickup = consignments?.every((consignment) => consignment.selectedPickupOption);\n\n            if (isBopisEnabled && isPickup && requiredAddress === 'none') {\n                return undefined;\n            }\n        }\n\n        return checkoutState.shippingAddress.getShippingAddress();\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-response-body.ts",
    "content": "export default interface PaymentResponseBody {\n    status: string;\n    id: string;\n    avs_result: AvsResult | object;\n    cvv_result: CvvResult | object;\n    three_ds_result: ThreeDsResult | object;\n    fraud_review: boolean;\n    transaction_type: string;\n    additional_action_required?: AdditionalActionRequired;\n    errors?: Array<{\n        code: string;\n        message: string;\n    }>;\n}\n\nexport interface AvsResult {\n    code: string;\n    message: string;\n    street_match: string;\n    postal_match: string;\n}\n\nexport interface CvvResult {\n    code: string;\n    message: string;\n}\n\nexport interface ThreeDsResult {\n    acs_url: string;\n    payer_auth_request: string;\n    merchant_data: string;\n    callback_url: string;\n}\n\nexport interface AdditionalActionRequired {\n    type: AdditionalActionType;\n    data: AdditionalRedirectData;\n}\n\nexport interface AdditionalRedirectData {\n    redirect_url: string;\n    transaction_id?: string;\n}\n\nexport enum AdditionalActionType {\n    OffsiteRedirect = 'offsite_redirect',\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-response.ts",
    "content": "export default interface PaymentResponse<T = any> {\n    data: T;\n    headers: { [key: string]: any };\n    status: number;\n    statusText: string;\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-selector.spec.ts",
    "content": "import { merge } from 'lodash';\n\nimport {\n    CheckoutStoreState,\n    createInternalCheckoutSelectors,\n    InternalCheckoutSelectors,\n} from '../checkout';\nimport {\n    getCheckoutStoreStateWithOrder,\n    getCheckoutWithPayments,\n} from '../checkout/checkouts.mock';\nimport { getCompleteOrder as getInternalCompleteOrder } from '../order/internal-orders.mock';\n\nimport { getPaymentMethod } from './payment-methods.mock';\nimport PaymentSelector, {\n    createPaymentSelectorFactory,\n    PaymentSelectorFactory,\n} from './payment-selector';\nimport { ACKNOWLEDGE, FINALIZE } from './payment-status-types';\n\ndescribe('PaymentSelector', () => {\n    let createPaymentSelector: PaymentSelectorFactory;\n    let state: CheckoutStoreState;\n    let selectors: InternalCheckoutSelectors;\n    let paymentSelector: PaymentSelector;\n\n    beforeEach(() => {\n        createPaymentSelector = createPaymentSelectorFactory();\n        state = getCheckoutStoreStateWithOrder();\n        selectors = createInternalCheckoutSelectors(state);\n    });\n\n    describe('#getPaymentId()', () => {\n        it('returns payment ID from order if order has been created', () => {\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            const payment = paymentSelector.getPaymentId();\n\n            expect(payment && payment.providerId).toBe('authorizenet');\n        });\n\n        it('returns payment ID from internal order if order has just been created before order is loaded', () => {\n            selectors = createInternalCheckoutSelectors({\n                ...state,\n                order: {\n                    ...state.order,\n                    data: undefined,\n                    meta: { payment: getInternalCompleteOrder().payment },\n                },\n            });\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            const payment = paymentSelector.getPaymentId();\n\n            expect(payment && payment.providerId).toBe('authorizenet');\n        });\n\n        it('returns payment ID from checkout if order has not been created', () => {\n            selectors = createInternalCheckoutSelectors({\n                ...state,\n                checkout: {\n                    ...state.checkout,\n                    data: getCheckoutWithPayments(),\n                },\n                order: {\n                    ...state.order,\n                    data: undefined,\n                },\n            });\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            const payment = paymentSelector.getPaymentId();\n\n            expect(payment && payment.providerId).toBe('authorizenet');\n        });\n    });\n\n    describe('#getPaymentStatus()', () => {\n        it('returns payment status from order if order has been created', () => {\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.getPaymentStatus()).toEqual(FINALIZE);\n        });\n\n        it('returns payment status from internal order if order has just been created before order is loaded', () => {\n            selectors = createInternalCheckoutSelectors({\n                ...state,\n                order: {\n                    ...state.order,\n                    data: undefined,\n                    meta: { payment: getInternalCompleteOrder().payment },\n                },\n            });\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.getPaymentStatus()).toEqual(FINALIZE);\n        });\n\n        it('returns payment status from checkout if order has not been created', () => {\n            selectors = createInternalCheckoutSelectors({\n                ...state,\n                checkout: {\n                    ...state.checkout,\n                    data: getCheckoutWithPayments(),\n                },\n                order: {\n                    ...state.order,\n                    data: undefined,\n                    meta: undefined,\n                },\n            });\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.getPaymentStatus()).toEqual(ACKNOWLEDGE);\n        });\n    });\n\n    describe('#getPaymentRedirectUrl()', () => {\n        it('returns redirect URL if available', () => {\n            selectors = createInternalCheckoutSelectors({\n                ...state,\n                order: {\n                    ...state.order,\n                    data: undefined,\n                    meta: {\n                        payment: {\n                            ...getInternalCompleteOrder().payment,\n                            redirectUrl: '/checkout.php',\n                        },\n                    },\n                },\n            });\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.getPaymentRedirectUrl()).toBe('/checkout.php');\n        });\n\n        it('returns undefined if unavailable', () => {\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.getPaymentRedirectUrl()).toBeUndefined();\n        });\n    });\n\n    describe('#getPaymentToken()', () => {\n        it('returns payment token if available', () => {\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.getPaymentToken()).toEqual(\n                state.order.meta && state.order.meta.token,\n            );\n        });\n\n        it('returns undefined if unavailable', () => {\n            selectors = createInternalCheckoutSelectors({\n                ...state,\n                order: {\n                    ...state.order,\n                    data: undefined,\n                    meta: undefined,\n                },\n            });\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.getPaymentToken()).toBeUndefined();\n        });\n    });\n\n    describe('#isPaymentDataRequired()', () => {\n        it('returns true if payment is required', () => {\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.isPaymentDataRequired()).toBe(true);\n        });\n\n        it('returns false if store credit exceeds grand total', () => {\n            selectors = createInternalCheckoutSelectors(\n                merge({}, state, {\n                    customer: {\n                        data: {\n                            storeCredit: 100000000000,\n                        },\n                    },\n                }),\n            );\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.isPaymentDataRequired(true)).toBe(false);\n        });\n\n        it('returns true if store credit exceeds grand total but not using store credit', () => {\n            selectors = createInternalCheckoutSelectors(\n                merge({}, state, {\n                    customer: {\n                        data: {\n                            storeCredit: 100000000000,\n                        },\n                    },\n                }),\n            );\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.isPaymentDataRequired(false)).toBe(true);\n        });\n    });\n\n    describe('#isPaymentDataSubmitted()', () => {\n        it('returns true if payment is tokenized', () => {\n            const paymentMethod = {\n                ...getPaymentMethod(),\n                nonce: '8903d867-6f7b-475c-8ab2-0b47ec6e000d',\n            };\n\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.isPaymentDataSubmitted(paymentMethod)).toBe(true);\n        });\n\n        it('returns true if payment is acknowledged', () => {\n            selectors = createInternalCheckoutSelectors({\n                ...state,\n                checkout: {\n                    ...state.checkout,\n                    data: getCheckoutWithPayments(),\n                },\n            });\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.isPaymentDataSubmitted(getPaymentMethod())).toBe(true);\n        });\n\n        it('returns true if payment is finalized', () => {\n            const checkout = getCheckoutWithPayments();\n\n            if (checkout.payments) {\n                checkout.payments[0].detail.step = FINALIZE;\n            }\n\n            selectors = createInternalCheckoutSelectors({\n                ...state,\n                checkout: {\n                    ...state.checkout,\n                    data: checkout,\n                },\n            });\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.isPaymentDataSubmitted(getPaymentMethod())).toBe(true);\n        });\n\n        it('returns false if payment is not tokenized, acknowledged or finalized', () => {\n            selectors = createInternalCheckoutSelectors({\n                ...state,\n                order: {\n                    ...state.order,\n                    data: undefined,\n                    meta: undefined,\n                },\n            });\n            paymentSelector = createPaymentSelector(selectors.checkout, selectors.order);\n\n            expect(paymentSelector.isPaymentDataSubmitted(getPaymentMethod())).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\nimport { find } from 'lodash';\n\nimport { CheckoutSelector } from '../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\nimport { GatewayOrderPayment, OrderSelector } from '../order';\n\nimport PaymentMethod from './payment-method';\nimport { HOSTED } from './payment-method-types';\nimport { ACKNOWLEDGE, FINALIZE } from './payment-status-types';\n\nexport default interface PaymentSelector {\n    getPaymentId(): { providerId: string; gatewayId?: string } | undefined;\n    getPaymentIdOrThrow(): { providerId: string; gatewayId?: string };\n    getPaymentStatus(): string | undefined;\n    getPaymentStatusOrThrow(): string;\n    getPaymentToken(): string | undefined;\n    getPaymentTokenOrThrow(): string;\n    getPaymentRedirectUrl(): string | undefined;\n    getPaymentRedirectUrlOrThrow(): string;\n    isPaymentDataRequired(useStoreCredit?: boolean): boolean;\n    isPaymentDataSubmitted(paymentMethod?: PaymentMethod): boolean;\n}\n\nexport type PaymentSelectorFactory = (\n    checkout: CheckoutSelector,\n    order: OrderSelector,\n) => PaymentSelector;\n\ninterface PaymentSelectorDependencies {\n    checkout: CheckoutSelector;\n    order: OrderSelector;\n}\n\nexport function createPaymentSelectorFactory(): PaymentSelectorFactory {\n    const getInternalPayment = createSelector(\n        ({ order }: PaymentSelectorDependencies) => order.getOrderMeta,\n        (getOrderMeta) => () => {\n            const meta = getOrderMeta();\n\n            return meta && meta.payment;\n        },\n    );\n\n    const getGatewayPayment = createSelector(\n        ({ order }: PaymentSelectorDependencies) => order.getOrder,\n        (getOrder) => () => {\n            const order = getOrder();\n\n            return find(\n                order && order.payments,\n                ({ providerId }) =>\n                    providerId !== 'giftcertificate' && providerId !== 'storecredit',\n            ) as GatewayOrderPayment;\n        },\n    );\n\n    const getHostedPayment = createSelector(\n        ({ checkout }: PaymentSelectorDependencies) => checkout.getCheckout,\n        (getCheckout) => () => {\n            const checkout = getCheckout();\n\n            return find(\n                checkout && checkout.payments,\n                ({ providerType }) => providerType === HOSTED,\n            );\n        },\n    );\n\n    const getPaymentId = createSelector(\n        getInternalPayment,\n        getHostedPayment,\n        getGatewayPayment,\n        (getInternalPayment, getHostedPayment, getGatewayPayment) => () => {\n            const internalPayment = getInternalPayment();\n\n            if (internalPayment && internalPayment.id) {\n                return {\n                    providerId: internalPayment.id,\n                    gatewayId: internalPayment.gateway,\n                };\n            }\n\n            const payment = getHostedPayment() || getGatewayPayment();\n\n            if (payment && payment.providerId) {\n                return {\n                    providerId: payment.providerId,\n                    gatewayId: payment.gatewayId,\n                };\n            }\n        },\n    );\n\n    const getPaymentIdOrThrow = createSelector(getPaymentId, (getPaymentId) => () => {\n        return guard(\n            getPaymentId(),\n            () => new MissingDataError(MissingDataErrorType.MissingPaymentId),\n        );\n    });\n\n    const getPaymentStatus = createSelector(\n        getInternalPayment,\n        getHostedPayment,\n        getGatewayPayment,\n        (getInternalPayment, getHostedPayment, getGatewayPayment) => () => {\n            const internalPayment = getInternalPayment();\n\n            if (internalPayment && internalPayment.status) {\n                return internalPayment.status.replace('PAYMENT_STATUS_', '');\n            }\n\n            const payment = getHostedPayment() || getGatewayPayment();\n\n            if (payment) {\n                return payment.detail.step;\n            }\n        },\n    );\n\n    const getPaymentStatusOrThrow = createSelector(getPaymentStatus, (getPaymentStatus) => () => {\n        return guard(\n            getPaymentStatus(),\n            () => new MissingDataError(MissingDataErrorType.MissingPaymentStatus),\n        );\n    });\n\n    const getPaymentToken = createSelector(\n        ({ order }: PaymentSelectorDependencies) => order.getOrderMeta,\n        (getOrderMeta) => () => {\n            const meta = getOrderMeta();\n\n            return meta && meta.token;\n        },\n    );\n\n    const getPaymentTokenOrThrow = createSelector(getPaymentToken, (getPaymentToken) => () => {\n        return guard(\n            getPaymentToken(),\n            () => new MissingDataError(MissingDataErrorType.MissingPaymentToken),\n        );\n    });\n\n    const getPaymentRedirectUrl = createSelector(getInternalPayment, (getInternalPayment) => () => {\n        const payment = getInternalPayment();\n\n        return payment && payment.redirectUrl;\n    });\n\n    const getPaymentRedirectUrlOrThrow = createSelector(\n        getPaymentRedirectUrl,\n        (getPaymentRedirectUrl) => () => {\n            return guard(\n                getPaymentRedirectUrl(),\n                () => new MissingDataError(MissingDataErrorType.MissingPaymentRedirectUrl),\n            );\n        },\n    );\n\n    const isPaymentDataRequired = createSelector(\n        ({ checkout }: PaymentSelectorDependencies) => checkout.getOutstandingBalance,\n        (getOutstandingBalance) =>\n            (useStoreCredit = false) => {\n                const grandTotal = getOutstandingBalance(useStoreCredit);\n\n                return grandTotal ? grandTotal > 0 : false;\n            },\n    );\n\n    const isPaymentDataSubmitted = createSelector(\n        getPaymentStatus,\n        (getPaymentStatus) => (paymentMethod?: PaymentMethod) => {\n            if (paymentMethod && paymentMethod.nonce) {\n                return true;\n            }\n\n            return getPaymentStatus() === ACKNOWLEDGE || getPaymentStatus() === FINALIZE;\n        },\n    );\n\n    return memoizeOne((checkout: CheckoutSelector, order: OrderSelector): PaymentSelector => {\n        return {\n            getPaymentId: getPaymentId({ checkout, order }),\n            getPaymentIdOrThrow: getPaymentIdOrThrow({ checkout, order }),\n            getPaymentStatus: getPaymentStatus({ checkout, order }),\n            getPaymentStatusOrThrow: getPaymentStatusOrThrow({ checkout, order }),\n            getPaymentToken: getPaymentToken({ checkout, order }),\n            getPaymentTokenOrThrow: getPaymentTokenOrThrow({ checkout, order }),\n            getPaymentRedirectUrl: getPaymentRedirectUrl({ checkout, order }),\n            getPaymentRedirectUrlOrThrow: getPaymentRedirectUrlOrThrow({ checkout, order }),\n            isPaymentDataRequired: isPaymentDataRequired({ checkout, order }),\n            isPaymentDataSubmitted: isPaymentDataSubmitted({ checkout, order }),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-state.ts",
    "content": "import PaymentResponseBody from './payment-response-body';\n\nexport default interface PaymentState {\n    data?: PaymentResponseBody;\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-status-types.ts",
    "content": "export const ACKNOWLEDGE = 'ACKNOWLEDGE';\nexport const FINALIZE = 'FINALIZE';\nexport const INITIALIZE = 'INITIALIZE';\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-action-creator.spec.ts",
    "content": "import { createClient as createPaymentClient } from '@bigcommerce/bigpay-client';\nimport { Action, createAction } from '@bigcommerce/data-store';\nimport { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\nimport { merge } from 'lodash';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport {\n    createCreditCardPaymentStrategy,\n    CreditCardPaymentStrategy as CreditCardPaymentStrategyV2,\n} from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport { createNoPaymentStrategy } from '@bigcommerce/checkout-sdk/no-payment-integration';\nimport {\n    OrderFinalizationNotRequiredError as OrderFinalizationNotRequiredErrorV2,\n    PaymentIntegrationService,\n    PaymentStrategyFactory,\n    PaymentStrategyResolveId,\n    PaymentStrategy as PaymentStrategyV2,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    CheckoutRequestSender,\n    CheckoutStore,\n    CheckoutStoreState,\n    CheckoutValidator,\n    createCheckoutStore,\n} from '../checkout';\nimport {\n    getCheckout,\n    getCheckoutStoreState,\n    getCheckoutStoreStateWithOrder,\n} from '../checkout/checkouts.mock';\nimport { MissingDataError } from '../common/error/errors';\nimport { ResolveIdRegistry } from '../common/registry';\nimport { getCustomerState } from '../customer/customers.mock';\nimport * as paymentStrategyFactories from '../generated/payment-strategies';\nimport { HostedFormFactory } from '../hosted-form';\nimport { OrderActionCreator, OrderActionType, OrderRequestSender } from '../order';\nimport { OrderFinalizationNotRequiredError } from '../order/errors';\nimport { getOrderRequestBody } from '../order/internal-orders.mock';\nimport { getOrderState } from '../order/orders.mock';\nimport { createPaymentIntegrationService } from '../payment-integration';\nimport {\n    createSpamProtection,\n    GoogleRecaptcha,\n    PaymentHumanVerificationHandler,\n    SpamProtectionActionCreator,\n    SpamProtectionRequestSender,\n} from '../spam-protection';\n\nimport createPaymentStrategyRegistry from './create-payment-strategy-registry';\nimport createPaymentStrategyRegistryV2 from './create-payment-strategy-registry-v2';\nimport PaymentActionCreator from './payment-action-creator';\nimport { getPaymentMethod } from './payment-methods.mock';\nimport PaymentRequestSender from './payment-request-sender';\nimport PaymentRequestTransformer from './payment-request-transformer';\nimport PaymentStrategyActionCreator from './payment-strategy-action-creator';\nimport { PaymentStrategyActionType } from './payment-strategy-actions';\nimport PaymentStrategyRegistry from './payment-strategy-registry';\nimport { PaymentStrategy } from './strategies';\nimport { CreditCardPaymentStrategy } from './strategies/credit-card';\n\ndescribe('PaymentStrategyActionCreator', () => {\n    let orderActionCreator: OrderActionCreator;\n    let paymentClient: any;\n    let requestSender: RequestSender;\n    let spamProtection: GoogleRecaptcha;\n    let registry: PaymentStrategyRegistry;\n    let registryV2: ResolveIdRegistry<PaymentStrategyV2, PaymentStrategyResolveId>;\n    let state: CheckoutStoreState;\n    let store: CheckoutStore;\n    let strategy: PaymentStrategy;\n    let strategyV2: PaymentStrategyV2;\n    let noPaymentDataStrategy: PaymentStrategyV2;\n    let spamProtectionActionCreator: SpamProtectionActionCreator;\n    let paymentHumanVerificationHandler: PaymentHumanVerificationHandler;\n    let actionCreator: PaymentStrategyActionCreator;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        state = getCheckoutStoreState();\n        store = createCheckoutStore(state);\n        requestSender = createRequestSender();\n        paymentClient = createPaymentClient();\n        spamProtection = createSpamProtection(createScriptLoader());\n        paymentHumanVerificationHandler = new PaymentHumanVerificationHandler(\n            createSpamProtection(createScriptLoader()),\n        );\n        registry = createPaymentStrategyRegistry(store, paymentClient, requestSender);\n        orderActionCreator = new OrderActionCreator(\n            new OrderRequestSender(requestSender),\n            new CheckoutValidator(new CheckoutRequestSender(createRequestSender())),\n        );\n\n        paymentIntegrationService = createPaymentIntegrationService(store);\n\n        registryV2 = createPaymentStrategyRegistryV2(\n            paymentIntegrationService,\n            paymentStrategyFactories,\n            {\n                useFallback: true,\n            },\n        );\n        strategy = new CreditCardPaymentStrategy(\n            store,\n            orderActionCreator,\n            new PaymentActionCreator(\n                new PaymentRequestSender(createPaymentClient()),\n                orderActionCreator,\n                new PaymentRequestTransformer(),\n                paymentHumanVerificationHandler,\n            ),\n            new HostedFormFactory(store),\n        );\n        noPaymentDataStrategy = createNoPaymentStrategy(paymentIntegrationService);\n        strategyV2 = createCreditCardPaymentStrategy(paymentIntegrationService);\n        spamProtectionActionCreator = new SpamProtectionActionCreator(\n            spamProtection,\n            new SpamProtectionRequestSender(requestSender),\n        );\n        actionCreator = new PaymentStrategyActionCreator(\n            registry,\n            registryV2,\n            orderActionCreator,\n            spamProtectionActionCreator,\n            paymentIntegrationService,\n        );\n\n        jest.spyOn(registry, 'getByMethod').mockReturnValue(strategy);\n        jest.spyOn(registryV2, 'get').mockReturnValue(strategyV2);\n    });\n\n    describe('#initialize()', () => {\n        beforeEach(() => {\n            jest.spyOn(strategy, 'initialize').mockReturnValue(Promise.resolve(store.getState()));\n        });\n\n        it('finds payment strategy by method', async () => {\n            const method = getPaymentMethod();\n\n            await from(\n                actionCreator.initialize({\n                    methodId: method.id,\n                    gatewayId: method.gateway,\n                })(store),\n            ).toPromise();\n\n            expect(registry.getByMethod).toHaveBeenCalledWith(method);\n        });\n\n        it('uses registryV2  if registryV1 is unalbe to resolve', async () => {\n            const method = getPaymentMethod();\n\n            jest.spyOn(registry, 'getByMethod').mockRestore();\n\n            await from(\n                actionCreator.initialize({\n                    methodId: method.id,\n                    gatewayId: method.gateway,\n                })(store),\n            ).toPromise();\n\n            expect(registryV2.get).toHaveBeenCalledWith({\n                gateway: undefined,\n                id: 'authorizenet',\n                type: 'PAYMENT_TYPE_API',\n            });\n        });\n\n        it('initializes payment strategy', async () => {\n            const method = getPaymentMethod();\n\n            await from(\n                actionCreator.initialize({\n                    methodId: method.id,\n                    gatewayId: method.gateway,\n                })(store),\n            ).toPromise();\n\n            expect(strategy.initialize).toHaveBeenCalledWith({\n                methodId: method.id,\n                gatewayId: method.gateway,\n            });\n        });\n\n        it('emits action to notify initialization progress', async () => {\n            const method = getPaymentMethod();\n            const actions = await from(\n                actionCreator.initialize({\n                    methodId: method.id,\n                    gatewayId: method.gateway,\n                })(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: PaymentStrategyActionType.InitializeRequested,\n                    meta: { methodId: method.id, gatewayId: method.gateway },\n                },\n                {\n                    type: PaymentStrategyActionType.InitializeSucceeded,\n                    meta: { methodId: method.id, gatewayId: method.gateway },\n                },\n            ]);\n        });\n\n        it('emits error action if unable to initialize', async () => {\n            const method = getPaymentMethod();\n            const initializeError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            jest.spyOn(strategy, 'initialize').mockReturnValue(Promise.reject(initializeError));\n\n            const actions = await from(\n                actionCreator.initialize({\n                    methodId: method.id,\n                    gatewayId: method.gateway,\n                })(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: PaymentStrategyActionType.InitializeRequested,\n                    meta: { methodId: method.id, gatewayId: method.gateway },\n                },\n                {\n                    type: PaymentStrategyActionType.InitializeFailed,\n                    error: true,\n                    payload: initializeError,\n                    meta: { methodId: method.id, gatewayId: method.gateway },\n                },\n            ]);\n        });\n\n        it('throws error if payment method has not been loaded', async () => {\n            try {\n                await from(actionCreator.initialize({ methodId: 'unknown' })(store)).toPromise();\n            } catch (action) {\n                expect((action as Action).payload).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        describe('with integrations', () => {\n            let mockStrategyFactory: PaymentStrategyFactory<PaymentStrategyV2>;\n            let mockStrategy: PaymentStrategyV2;\n\n            beforeEach(() => {\n                mockStrategy = {\n                    initialize: jest.fn().mockResolvedValue(store.getState()),\n                    execute: jest.fn().mockResolvedValue(undefined),\n                    finalize: jest.fn().mockResolvedValue(undefined),\n                    deinitialize: jest.fn().mockResolvedValue(undefined),\n                };\n\n                mockStrategyFactory = jest.fn().mockReturnValue(mockStrategy);\n\n                store = createCheckoutStore(state);\n\n                actionCreator = new PaymentStrategyActionCreator(\n                    registry,\n                    registryV2,\n                    orderActionCreator,\n                    spamProtectionActionCreator,\n                    paymentIntegrationService,\n                );\n            });\n\n            it('registers new strategy factory when integrations are provided', async () => {\n                const method = getPaymentMethod();\n                const resolvableFactory = toResolvableModule(mockStrategyFactory, [\n                    {\n                        id: method.id,\n                        gateway: method.gateway,\n                        type: method.type,\n                    },\n                ]);\n\n                jest.spyOn(registryV2, 'getFactory').mockReturnValue(undefined);\n                jest.spyOn(registryV2, 'register');\n                jest.spyOn(registry, 'getByMethod').mockImplementation(() => {\n                    throw new Error('Strategy not found in registry v1');\n                });\n                jest.spyOn(registryV2, 'get').mockReturnValue(mockStrategy);\n\n                await from(\n                    actionCreator.initialize({\n                        methodId: method.id,\n                        gatewayId: method.gateway,\n                        integrations: [resolvableFactory],\n                    })(store),\n                ).toPromise();\n\n                expect(registryV2.register).toHaveBeenCalledWith(\n                    {\n                        id: method.id,\n                        gateway: method.gateway,\n                        type: method.type,\n                    },\n                    expect.any(Function),\n                );\n\n                expect(\n                    registryV2.get({\n                        id: method.id,\n                        gateway: method.gateway,\n                        type: method.type,\n                    }),\n                ).toBe(mockStrategy);\n            });\n\n            it('uses provided integration strategy when registering and initializing', async () => {\n                const method = getPaymentMethod();\n                const resolvableFactory = toResolvableModule(mockStrategyFactory, [\n                    {\n                        id: method.id,\n                        gateway: method.gateway,\n                        type: method.type,\n                    },\n                ]);\n\n                jest.spyOn(registryV2, 'getFactory').mockReturnValue(undefined);\n                jest.spyOn(registryV2, 'get').mockReturnValue(mockStrategy);\n                jest.spyOn(registry, 'getByMethod').mockImplementation(() => {\n                    throw new Error('Strategy not found in registry v1');\n                });\n\n                await from(\n                    actionCreator.initialize({\n                        methodId: method.id,\n                        gatewayId: method.gateway,\n                        integrations: [resolvableFactory],\n                    })(store),\n                ).toPromise();\n\n                expect(mockStrategy.initialize).toHaveBeenCalledWith({\n                    methodId: method.id,\n                    gatewayId: method.gateway,\n                    integrations: [resolvableFactory],\n                });\n            });\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        const method = getPaymentMethod();\n\n        beforeEach(() => {\n            store = createCheckoutStore(\n                merge({}, state, {\n                    paymentStrategies: {\n                        data: { [method.id]: { isInitialized: true } },\n                    },\n                }),\n            );\n\n            jest.spyOn(strategy, 'deinitialize').mockReturnValue(Promise.resolve(store.getState()));\n        });\n\n        it('finds payment strategy by method', async () => {\n            await from(\n                actionCreator.deinitialize({\n                    methodId: method.id,\n                    gatewayId: method.gateway,\n                })(store),\n            ).toPromise();\n\n            expect(registry.getByMethod).toHaveBeenCalledWith(method);\n        });\n\n        it('uses registryV2  if registryV1 is unalbe to resolve', async () => {\n            jest.spyOn(registry, 'getByMethod').mockRestore();\n\n            await from(\n                actionCreator.deinitialize({\n                    methodId: method.id,\n                    gatewayId: method.gateway,\n                })(store),\n            ).toPromise();\n\n            expect(registryV2.get).toHaveBeenCalledWith({\n                gateway: undefined,\n                id: 'authorizenet',\n                type: 'PAYMENT_TYPE_API',\n            });\n        });\n\n        it('deinitializes payment strategy', async () => {\n            await from(\n                actionCreator.deinitialize({\n                    methodId: method.id,\n                    gatewayId: method.gateway,\n                })(store),\n            ).toPromise();\n\n            expect(strategy.deinitialize).toHaveBeenCalled();\n        });\n\n        it('emits action to notify deinitialization progress', async () => {\n            const actions = await from(\n                actionCreator.deinitialize({\n                    methodId: method.id,\n                    gatewayId: method.gateway,\n                })(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: PaymentStrategyActionType.DeinitializeRequested,\n                    meta: { methodId: method.id, gatewayId: method.gateway },\n                },\n                {\n                    type: PaymentStrategyActionType.DeinitializeSucceeded,\n                    meta: { methodId: method.id, gatewayId: method.gateway },\n                },\n            ]);\n        });\n\n        it('emits error action if unable to deinitialize', async () => {\n            const deinitializeError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            jest.spyOn(strategy, 'deinitialize').mockReturnValue(Promise.reject(deinitializeError));\n\n            const actions = await from(\n                actionCreator.deinitialize({\n                    methodId: method.id,\n                    gatewayId: method.gateway,\n                })(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: PaymentStrategyActionType.DeinitializeRequested,\n                    meta: { methodId: method.id, gatewayId: method.gateway },\n                },\n                {\n                    type: PaymentStrategyActionType.DeinitializeFailed,\n                    error: true,\n                    payload: deinitializeError,\n                    meta: { methodId: method.id, gatewayId: method.gateway },\n                },\n            ]);\n        });\n\n        it('throws error if payment method has not been loaded', async () => {\n            try {\n                await from(actionCreator.deinitialize({ methodId: 'unknown' })(store)).toPromise();\n            } catch (action) {\n                expect((action as Action).payload).toBeInstanceOf(MissingDataError);\n            }\n        });\n    });\n\n    describe('#execute()', () => {\n        beforeEach(() => {\n            jest.spyOn(strategy, 'execute').mockReturnValue(Promise.resolve(store.getState()));\n\n            jest.spyOn(noPaymentDataStrategy, 'execute').mockReturnValue(Promise.resolve());\n        });\n\n        it('finds payment strategy by method', async () => {\n            const method = getPaymentMethod();\n\n            await from(actionCreator.execute(getOrderRequestBody())(store)).toPromise();\n\n            expect(registry.getByMethod).toHaveBeenCalledWith(method);\n        });\n\n        it('uses registryV2  if registryV1 is unalbe to resolve', async () => {\n            jest.spyOn(registry, 'getByMethod').mockRestore();\n            jest.spyOn(strategyV2, 'execute').mockReturnValue(Promise.resolve());\n\n            await from(actionCreator.execute(getOrderRequestBody())(store)).toPromise();\n\n            expect(registryV2.get).toHaveBeenCalledWith({\n                gateway: undefined,\n                id: 'authorizenet',\n                type: 'PAYMENT_TYPE_API',\n            });\n        });\n\n        it('executes payment strategy', async () => {\n            const payload = getOrderRequestBody();\n\n            await from(actionCreator.execute(payload)(store)).toPromise();\n\n            expect(strategy.execute).toHaveBeenCalledWith(payload, {\n                methodId: payload.payment && payload.payment.methodId,\n                gatewayId: payload.payment && payload.payment.gatewayId,\n            });\n        });\n\n        it('executes spam check when required', async () => {\n            const payload = getOrderRequestBody();\n\n            jest.spyOn(spamProtectionActionCreator, 'verifyCheckoutSpamProtection').mockReturnValue(\n                () => from([]),\n            );\n\n            jest.spyOn(store.getState().checkout, 'getCheckoutOrThrow').mockReturnValue({\n                ...getCheckout(),\n                shouldExecuteSpamCheck: true,\n            });\n\n            await from(actionCreator.execute(payload)(store)).toPromise();\n\n            expect(spamProtectionActionCreator.verifyCheckoutSpamProtection).toHaveBeenCalled();\n        });\n\n        it('emits action to load order and notify execution progress', async () => {\n            const payload = getOrderRequestBody();\n            const methodId = payload.payment && payload.payment.methodId;\n            const actions = await from(actionCreator.execute(payload)(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: PaymentStrategyActionType.ExecuteRequested,\n                    meta: { methodId },\n                },\n                {\n                    type: PaymentStrategyActionType.ExecuteSucceeded,\n                    meta: { methodId },\n                },\n            ]);\n        });\n\n        it('emits error action if unable to execute', async () => {\n            const payload = getOrderRequestBody();\n            const methodId = payload.payment && payload.payment.methodId;\n            const executeError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            jest.spyOn(strategy, 'execute').mockReturnValue(Promise.reject(executeError));\n\n            const actions = await from(actionCreator.execute(payload)(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: PaymentStrategyActionType.ExecuteRequested,\n                    meta: { methodId },\n                },\n                {\n                    type: PaymentStrategyActionType.ExecuteFailed,\n                    error: true,\n                    payload: executeError,\n                    meta: { methodId },\n                },\n            ]);\n        });\n\n        it('throws error if payment method is not found or loaded', async () => {\n            store = createCheckoutStore({\n                ...state,\n                paymentMethods: { ...state.paymentMethods, data: [] },\n            });\n            registry = createPaymentStrategyRegistry(store, paymentClient, requestSender);\n\n            const actionCreator = new PaymentStrategyActionCreator(\n                registry,\n                registryV2,\n                orderActionCreator,\n                spamProtectionActionCreator,\n                paymentIntegrationService,\n            );\n\n            try {\n                await from(actionCreator.execute(getOrderRequestBody())(store)).toPromise();\n            } catch (action) {\n                expect((action as Action).payload).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('finds `nopaymentrequired` strategy if payment data is not required', async () => {\n            store = createCheckoutStore({\n                ...state,\n                customer: merge({}, getCustomerState(), {\n                    data: {\n                        storeCredit: 9999,\n                    },\n                }),\n            });\n\n            registry = createPaymentStrategyRegistry(store, paymentClient, requestSender);\n\n            jest.spyOn(registryV2, 'get').mockReturnValue(noPaymentDataStrategy);\n\n            const actionCreator = new PaymentStrategyActionCreator(\n                registry,\n                registryV2,\n                orderActionCreator,\n                spamProtectionActionCreator,\n                paymentIntegrationService,\n            );\n            const payload = { ...getOrderRequestBody(), useStoreCredit: true };\n\n            await from(actionCreator.execute(payload)(store)).toPromise();\n\n            expect(registryV2.get).toHaveBeenCalledWith({ id: 'nopaymentdatarequired' });\n            expect(noPaymentDataStrategy.execute).toHaveBeenCalledWith(payload, {\n                methodId: payload.payment && payload.payment.methodId,\n                gatewayId: payload.payment && payload.payment.gatewayId,\n            });\n        });\n    });\n\n    describe('#finalize()', () => {\n        beforeEach(() => {\n            state = getCheckoutStoreStateWithOrder();\n            store = createCheckoutStore(state);\n\n            jest.spyOn(strategy, 'finalize').mockReturnValue(Promise.resolve(store.getState()));\n\n            jest.spyOn(orderActionCreator, 'loadOrderPayments').mockReturnValue(\n                of(createAction(OrderActionType.LoadOrderPaymentsRequested)),\n            );\n        });\n\n        it('finds payment strategy by method', async () => {\n            const method = getPaymentMethod();\n\n            await from(actionCreator.finalize()(store)).toPromise();\n\n            expect(registry.getByMethod).toHaveBeenCalledWith(method);\n        });\n\n        it('uses registryV2  if registryV1 is unalbe to resolve', async () => {\n            jest.spyOn(registry, 'getByMethod').mockRestore();\n\n            try {\n                await from(actionCreator.finalize()(store)).toPromise();\n            } catch {\n                expect(registryV2.get).toHaveBeenCalledWith({\n                    gateway: undefined,\n                    id: 'authorizenet',\n                    type: 'PAYMENT_TYPE_API',\n                });\n            }\n        });\n\n        it('finalizes order using payment strategy', async () => {\n            await from(actionCreator.finalize()(store)).toPromise();\n\n            expect(strategy.finalize).toHaveBeenCalled();\n        });\n\n        it('loads payment data for current order', async () => {\n            await from(actionCreator.finalize()(store)).toPromise();\n\n            expect(orderActionCreator.loadOrderPayments).toHaveBeenCalled();\n        });\n\n        it('emits action to load order and notify finalization progress', async () => {\n            const method = getPaymentMethod();\n            const actions = await from(actionCreator.finalize()(store)).pipe(toArray()).toPromise();\n\n            expect(actions).toEqual([\n                { type: PaymentStrategyActionType.FinalizeRequested },\n                { type: OrderActionType.LoadOrderPaymentsRequested },\n                {\n                    type: PaymentStrategyActionType.FinalizeSucceeded,\n                    meta: { methodId: method.id },\n                },\n            ]);\n        });\n\n        it('emits error action if unable to finalize', async () => {\n            const method = getPaymentMethod();\n            const finalizeError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            jest.spyOn(strategy, 'finalize').mockReturnValue(Promise.reject(finalizeError));\n\n            const actions = await from(actionCreator.finalize()(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: PaymentStrategyActionType.FinalizeRequested },\n                { type: OrderActionType.LoadOrderPaymentsRequested },\n                {\n                    type: PaymentStrategyActionType.FinalizeFailed,\n                    error: true,\n                    payload: finalizeError,\n                    meta: { methodId: method.id },\n                },\n            ]);\n        });\n\n        it('returns rejected promise if order does not require finalization', async () => {\n            store = createCheckoutStore({\n                ...state,\n                order: getOrderState(),\n            });\n            registry = createPaymentStrategyRegistry(store, paymentClient, requestSender);\n\n            const actionCreator = new PaymentStrategyActionCreator(\n                registry,\n                registryV2,\n                orderActionCreator,\n                spamProtectionActionCreator,\n                paymentIntegrationService,\n            );\n            const strategyV2 = new CreditCardPaymentStrategyV2(\n                createPaymentIntegrationService(store),\n            );\n\n            jest.spyOn(registryV2, 'get').mockReturnValue(strategyV2);\n\n            try {\n                await from(actionCreator.finalize()(store)).toPromise();\n            } catch (action) {\n                expect((action as Action).payload).toBeInstanceOf(\n                    OrderFinalizationNotRequiredErrorV2,\n                );\n            }\n        });\n\n        it('returns rejected promise if payment method referenced in order object no longer exists', async () => {\n            store = createCheckoutStore({\n                ...state,\n                order: getOrderState(),\n                paymentMethods: {\n                    ...state.paymentMethods,\n                    data: [],\n                },\n            });\n            registry = createPaymentStrategyRegistry(store, paymentClient, requestSender);\n\n            const actionCreator = new PaymentStrategyActionCreator(\n                registry,\n                registryV2,\n                orderActionCreator,\n                spamProtectionActionCreator,\n                paymentIntegrationService,\n            );\n\n            try {\n                await from(actionCreator.finalize()(store)).toPromise();\n            } catch (action) {\n                expect((action as Action).payload).toBeInstanceOf(\n                    OrderFinalizationNotRequiredError,\n                );\n            }\n        });\n    });\n\n    describe('#widgetInteraction()', () => {\n        it('executes widget interaction callback', async () => {\n            const options = { methodId: 'default' };\n            const fakeMethod = jest.fn(() => Promise.resolve());\n\n            await from(actionCreator.widgetInteraction(fakeMethod, options))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(fakeMethod).toHaveBeenCalled();\n        });\n\n        it('emits action to notify widget interaction in progress', async () => {\n            const actions = await from(\n                actionCreator.widgetInteraction(\n                    jest.fn(() => Promise.resolve()),\n                    { methodId: 'default' },\n                ),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: PaymentStrategyActionType.WidgetInteractionStarted,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: PaymentStrategyActionType.WidgetInteractionFinished,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n\n        it('emits error action if widget interaction fails', async () => {\n            const signInError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            const actions = await from(\n                actionCreator.widgetInteraction(\n                    jest.fn(() => Promise.reject(signInError)),\n                    { methodId: 'default' },\n                ),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: PaymentStrategyActionType.WidgetInteractionStarted,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: PaymentStrategyActionType.WidgetInteractionFailed,\n                    error: true,\n                    payload: signInError,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-action-creator.ts",
    "content": "import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, empty, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport {\n    PaymentIntegrationService,\n    PaymentStrategy as PaymentStrategyV2,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { InternalCheckoutSelectors, ReadableCheckoutStore } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\nimport { getDefaultLogger } from '../common/log';\nimport {\n    LoadOrderPaymentsAction,\n    OrderActionCreator,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n} from '../order';\nimport { OrderFinalizationNotRequiredError } from '../order/errors';\nimport { registerIntegrations } from '../payment-integration';\nimport { SpamProtectionAction, SpamProtectionActionCreator } from '../spam-protection';\n\nimport PaymentMethod from './payment-method';\nimport {\n    OrderFinalizeOptions,\n    PaymentInitializeOptions,\n    PaymentRequestOptions,\n} from './payment-request-options';\nimport {\n    PaymentStrategyActionType,\n    PaymentStrategyDeinitializeAction,\n    PaymentStrategyExecuteAction,\n    PaymentStrategyFinalizeAction,\n    PaymentStrategyInitializeAction,\n    PaymentStrategyWidgetAction,\n} from './payment-strategy-actions';\nimport PaymentStrategyRegistry from './payment-strategy-registry';\nimport PaymentStrategyRegistryV2 from './payment-strategy-registry-v2';\nimport PaymentStrategyType from './payment-strategy-type';\nimport PaymentStrategyWidgetActionCreator from './payment-strategy-widget-action-creator';\nimport { PaymentStrategy } from './strategies';\n\nexport default class PaymentStrategyActionCreator {\n    private _paymentStrategyWidgetActionCreator: PaymentStrategyWidgetActionCreator;\n\n    constructor(\n        private _strategyRegistry: PaymentStrategyRegistry,\n        private _strategyRegistryV2: PaymentStrategyRegistryV2,\n        private _orderActionCreator: OrderActionCreator,\n        private _spamProtectionActionCreator: SpamProtectionActionCreator,\n        private _paymentIntegrationService: PaymentIntegrationService,\n    ) {\n        this._paymentStrategyWidgetActionCreator = new PaymentStrategyWidgetActionCreator();\n    }\n\n    execute(\n        payload: OrderRequestBody,\n        options?: RequestOptions,\n    ): ThunkAction<PaymentStrategyExecuteAction | SpamProtectionAction, InternalCheckoutSelectors> {\n        const { payment = {} as OrderPaymentRequestBody, useStoreCredit } = payload;\n        const meta = { methodId: payment.methodId };\n\n        return (store) => {\n            const { checkout } = store.getState();\n            const { shouldExecuteSpamCheck } = checkout.getCheckoutOrThrow();\n\n            return concat(\n                shouldExecuteSpamCheck\n                    ? this._spamProtectionActionCreator.verifyCheckoutSpamProtection()(store)\n                    : empty(),\n                of(createAction(PaymentStrategyActionType.ExecuteRequested, undefined, meta)),\n                defer(() => {\n                    const state = store.getState();\n\n                    let strategy: PaymentStrategy | PaymentStrategyV2;\n\n                    if (state.payment.isPaymentDataRequired(useStoreCredit)) {\n                        const method = state.paymentMethods.getPaymentMethod(\n                            payment.methodId,\n                            payment.gatewayId,\n                        );\n\n                        if (!method) {\n                            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n                        }\n\n                        strategy = this._getStrategy(method);\n                    } else {\n                        strategy = this._strategyRegistryV2.get({\n                            id: PaymentStrategyType.NO_PAYMENT_DATA_REQUIRED,\n                        });\n                    }\n\n                    const promise: Promise<InternalCheckoutSelectors | void> = strategy.execute(\n                        payload,\n                        {\n                            ...options,\n                            methodId: payment.methodId,\n                            gatewayId: payment.gatewayId,\n                        },\n                    );\n\n                    return promise.then(() =>\n                        createAction(PaymentStrategyActionType.ExecuteSucceeded, undefined, meta),\n                    );\n                }),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(PaymentStrategyActionType.ExecuteFailed, error, meta),\n                ),\n            );\n        };\n    }\n\n    finalize(\n        options?: OrderFinalizeOptions,\n    ): ThunkAction<PaymentStrategyFinalizeAction, InternalCheckoutSelectors> {\n        const { integrations } = options ?? {};\n\n        return (store) =>\n            concat(\n                of(createAction(PaymentStrategyActionType.FinalizeRequested)),\n                this._loadOrderPaymentsIfNeeded(store, options),\n                defer(async () => {\n                    const state = store.getState();\n                    const { providerId = '', gatewayId = '' } = state.payment.getPaymentId() || {};\n                    const method = state.paymentMethods.getPaymentMethod(providerId, gatewayId);\n\n                    if (!method) {\n                        throw new OrderFinalizationNotRequiredError();\n                    }\n\n                    registerIntegrations(\n                        this._strategyRegistryV2,\n                        integrations ?? [],\n                        this._paymentIntegrationService,\n                    );\n\n                    let strategy: PaymentStrategy | PaymentStrategyV2;\n\n                    try {\n                        strategy = this._getStrategy(method);\n                    } catch {\n                        throw new OrderFinalizationNotRequiredError();\n                    }\n\n                    await strategy.finalize({\n                        ...options,\n                        methodId: method.id,\n                        gatewayId: method.gateway,\n                    });\n\n                    return createAction(PaymentStrategyActionType.FinalizeSucceeded, undefined, {\n                        methodId: method.id,\n                    });\n                }),\n            ).pipe(\n                catchError((error) => {\n                    const state = store.getState();\n                    const payment = state.payment.getPaymentId();\n\n                    return throwErrorAction(PaymentStrategyActionType.FinalizeFailed, error, {\n                        methodId: payment && payment.providerId,\n                    });\n                }),\n            );\n    }\n\n    initialize(\n        options: PaymentInitializeOptions,\n    ): ThunkAction<PaymentStrategyInitializeAction, InternalCheckoutSelectors> {\n        const { methodId, gatewayId, integrations } = options;\n\n        return (store) =>\n            defer(() => {\n                const state = store.getState();\n                const method = state.paymentMethods.getPaymentMethod(methodId, gatewayId);\n\n                if (!method) {\n                    throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n                }\n\n                if (methodId && state.paymentStrategies.isInitialized({ methodId, gatewayId })) {\n                    return empty();\n                }\n\n                registerIntegrations(\n                    this._strategyRegistryV2,\n                    integrations ?? [],\n                    this._paymentIntegrationService,\n                );\n\n                const strategy = this._getStrategy(method);\n\n                const promise: Promise<InternalCheckoutSelectors | void> = strategy.initialize({\n                    ...options,\n                    methodId,\n                    gatewayId,\n                });\n\n                return concat(\n                    of(\n                        createAction(PaymentStrategyActionType.InitializeRequested, undefined, {\n                            methodId,\n                            gatewayId,\n                        }),\n                    ),\n                    promise.then(() =>\n                        createAction(PaymentStrategyActionType.InitializeSucceeded, undefined, {\n                            methodId,\n                            gatewayId,\n                        }),\n                    ),\n                );\n            }).pipe(\n                catchError((error) =>\n                    throwErrorAction(PaymentStrategyActionType.InitializeFailed, error, {\n                        methodId,\n                        gatewayId,\n                    }),\n                ),\n            );\n    }\n\n    deinitialize(\n        options: PaymentRequestOptions,\n    ): ThunkAction<PaymentStrategyDeinitializeAction, InternalCheckoutSelectors> {\n        const { methodId, gatewayId } = options;\n\n        return (store) =>\n            defer(() => {\n                const state = store.getState();\n                const method = state.paymentMethods.getPaymentMethod(methodId, gatewayId);\n\n                if (!method) {\n                    throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n                }\n\n                if (methodId && !state.paymentStrategies.isInitialized({ methodId, gatewayId })) {\n                    return empty();\n                }\n\n                const strategy = this._getStrategy(method);\n\n                const promise: Promise<InternalCheckoutSelectors | void> = strategy.deinitialize({\n                    ...options,\n                    methodId,\n                    gatewayId,\n                });\n\n                return concat(\n                    of(\n                        createAction(PaymentStrategyActionType.DeinitializeRequested, undefined, {\n                            methodId,\n                            gatewayId,\n                        }),\n                    ),\n                    promise.then(() =>\n                        createAction(PaymentStrategyActionType.DeinitializeSucceeded, undefined, {\n                            methodId,\n                            gatewayId,\n                        }),\n                    ),\n                );\n            }).pipe(\n                catchError((error) =>\n                    throwErrorAction(PaymentStrategyActionType.DeinitializeFailed, error, {\n                        methodId,\n                        gatewayId,\n                    }),\n                ),\n            );\n    }\n\n    widgetInteraction(\n        method: () => Promise<unknown>,\n        options?: PaymentRequestOptions,\n    ): Observable<PaymentStrategyWidgetAction> {\n        return this._paymentStrategyWidgetActionCreator.widgetInteraction(method, options);\n    }\n\n    private _getStrategy(method: PaymentMethod): PaymentStrategy | PaymentStrategyV2 {\n        let strategy: PaymentStrategy | PaymentStrategyV2;\n\n        try {\n            strategy = this._strategyRegistry.getByMethod(method);\n        } catch {\n            try {\n                strategy = this._strategyRegistryV2.get({\n                    id: method.id,\n                    gateway: method.gateway,\n                    type: method.type,\n                });\n            } catch (error) {\n                getDefaultLogger().error(\n                    `[PaymentStrategyActionCreator] Unable to resolve V2 strategy for id: ${method.id}, gateway: ${method.gateway}, type: ${method.type}`,\n                );\n                throw error;\n            }\n        }\n\n        return strategy;\n    }\n\n    private _loadOrderPaymentsIfNeeded(\n        store: ReadableCheckoutStore,\n        options?: RequestOptions,\n    ): Observable<LoadOrderPaymentsAction> {\n        const state = store.getState();\n        const checkout = state.checkout.getCheckout();\n\n        if (checkout && checkout.orderId) {\n            return this._orderActionCreator.loadOrderPayments(checkout.orderId, options);\n        }\n\n        return empty();\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { LoadOrderPaymentsAction } from '../order';\n\nexport enum PaymentStrategyActionType {\n    ExecuteFailed = 'PAYMENT_STRATEGY_EXECUTE_FAILED',\n    ExecuteRequested = 'PAYMENT_STRATEGY_EXECUTE_REQUESTED',\n    ExecuteSucceeded = 'PAYMENT_STRATEGY_EXECUTE_SUCCEEDED',\n    FinalizeFailed = 'PAYMENT_STRATEGY_FINALIZE_FAILED',\n    FinalizeRequested = 'PAYMENT_STRATEGY_FINALIZE_REQUESTED',\n    FinalizeSucceeded = 'PAYMENT_STRATEGY_FINALIZE_SUCCEEDED',\n    InitializeFailed = 'PAYMENT_STRATEGY_INITIALIZE_FAILED',\n    InitializeRequested = 'PAYMENT_STRATEGY_INITIALIZE_REQUESTED',\n    InitializeSucceeded = 'PAYMENT_STRATEGY_INITIALIZE_SUCCEEDED',\n    DeinitializeFailed = 'PAYMENT_STRATEGY_DEINITIALIZE_FAILED',\n    DeinitializeRequested = 'PAYMENT_STRATEGY_DEINITIALIZE_REQUESTED',\n    DeinitializeSucceeded = 'PAYMENT_STRATEGY_DEINITIALIZE_SUCCEEDED',\n    WidgetInteractionStarted = 'PAYMENT_STRATEGY_WIDGET_INTERACTION_STARTED',\n    WidgetInteractionFinished = 'PAYMENT_STRATEGY_WIDGET_INTERACTION_FINISHED',\n    WidgetInteractionFailed = 'PAYMENT_STRATEGY_WIDGET_INTERACTION_FAILED',\n}\n\nexport type PaymentStrategyAction =\n    | PaymentStrategyExecuteAction\n    | PaymentStrategyFinalizeAction\n    | PaymentStrategyInitializeAction\n    | PaymentStrategyDeinitializeAction\n    | PaymentStrategyWidgetAction;\n\nexport type PaymentStrategyExecuteAction =\n    | ExecuteRequestedAction\n    | ExecuteSucceededAction\n    | ExecuteFailedAction\n    | LoadOrderPaymentsAction;\n\nexport type PaymentStrategyFinalizeAction =\n    | FinalizeRequestedAction\n    | FinalizeSucceededAction\n    | FinalizeFailedAction\n    | LoadOrderPaymentsAction;\n\nexport type PaymentStrategyInitializeAction =\n    | InitializeRequestedAction\n    | InitializeSucceededAction\n    | InitializeFailedAction;\n\nexport type PaymentStrategyDeinitializeAction =\n    | DeinitializeRequestedAction\n    | DeinitializeSucceededAction\n    | DeinitializeFailedAction;\n\nexport type PaymentStrategyWidgetAction =\n    | WidgetInteractionStartedAction\n    | WidgetInteractionFinishedAction\n    | WidgetInteractionFailedAction;\n\nexport interface ExecuteRequestedAction extends Action {\n    type: PaymentStrategyActionType.ExecuteRequested;\n}\n\nexport interface ExecuteSucceededAction extends Action {\n    type: PaymentStrategyActionType.ExecuteSucceeded;\n}\n\nexport interface ExecuteFailedAction extends Action<Error> {\n    type: PaymentStrategyActionType.ExecuteFailed;\n}\n\nexport interface FinalizeRequestedAction extends Action {\n    type: PaymentStrategyActionType.FinalizeRequested;\n}\n\nexport interface FinalizeSucceededAction extends Action {\n    type: PaymentStrategyActionType.FinalizeSucceeded;\n}\n\nexport interface FinalizeFailedAction extends Action<Error> {\n    type: PaymentStrategyActionType.FinalizeFailed;\n}\n\nexport interface InitializeRequestedAction extends Action {\n    type: PaymentStrategyActionType.InitializeRequested;\n}\n\nexport interface InitializeSucceededAction extends Action {\n    type: PaymentStrategyActionType.InitializeSucceeded;\n}\n\nexport interface InitializeFailedAction extends Action<Error> {\n    type: PaymentStrategyActionType.InitializeFailed;\n}\n\nexport interface DeinitializeRequestedAction extends Action {\n    type: PaymentStrategyActionType.DeinitializeRequested;\n}\n\nexport interface DeinitializeSucceededAction extends Action {\n    type: PaymentStrategyActionType.DeinitializeSucceeded;\n}\n\nexport interface DeinitializeFailedAction extends Action<Error> {\n    type: PaymentStrategyActionType.DeinitializeFailed;\n}\n\nexport interface WidgetInteractionStartedAction extends Action {\n    type: PaymentStrategyActionType.WidgetInteractionStarted;\n}\n\nexport interface WidgetInteractionFinishedAction extends Action {\n    type: PaymentStrategyActionType.WidgetInteractionFinished;\n}\n\nexport interface WidgetInteractionFailedAction extends Action<Error> {\n    type: PaymentStrategyActionType.WidgetInteractionFailed;\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-reducer.spec.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\n\nimport { PaymentStrategyActionType } from './payment-strategy-actions';\nimport paymentStrategyReducer from './payment-strategy-reducer';\nimport PaymentStrategyState, { DEFAULT_STATE } from './payment-strategy-state';\n\ndescribe('paymentStrategyReducer()', () => {\n    let initialState: PaymentStrategyState;\n\n    beforeEach(() => {\n        initialState = DEFAULT_STATE;\n    });\n\n    it('returns pending flag as true if initializing payment', () => {\n        const action = createAction(PaymentStrategyActionType.InitializeRequested, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(paymentStrategyReducer(initialState, action).statuses).toEqual({\n            initializeMethodId: 'foobar',\n            isInitializing: true,\n        });\n    });\n\n    it('returns pending flag as false if payment has initialized successfully', () => {\n        const action = createAction(PaymentStrategyActionType.InitializeSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(paymentStrategyReducer(initialState, action).statuses).toEqual({\n            initializeMethodId: undefined,\n            isInitializing: false,\n        });\n    });\n\n    it('returns error if payment has failed to initialize', () => {\n        const action = createErrorAction(PaymentStrategyActionType.InitializeFailed, new Error(), {\n            methodId: 'foobar',\n        });\n\n        expect(paymentStrategyReducer(initialState, action).errors).toEqual({\n            initializeMethodId: 'foobar',\n            initializeError: action.payload,\n        });\n    });\n\n    it('returns pending flag as true if deinitializing payment', () => {\n        const action = createAction(PaymentStrategyActionType.DeinitializeRequested, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(paymentStrategyReducer(initialState, action).statuses).toEqual({\n            deinitializeMethodId: 'foobar',\n            isDeinitializing: true,\n        });\n    });\n\n    it('returns pending flag as false if payment has deinitialized successfully', () => {\n        const action = createAction(PaymentStrategyActionType.DeinitializeSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(paymentStrategyReducer(initialState, action).statuses).toEqual({\n            deinitializeMethodId: undefined,\n            isDeinitializing: false,\n        });\n    });\n\n    it('returns error if payment has failed to deinitialize', () => {\n        const action = createErrorAction(\n            PaymentStrategyActionType.DeinitializeFailed,\n            new Error(),\n            { methodId: 'foobar' },\n        );\n\n        expect(paymentStrategyReducer(initialState, action).errors).toEqual({\n            deinitializeMethodId: 'foobar',\n            deinitializeError: action.payload,\n        });\n    });\n\n    it('returns pending flag as true if executing payment', () => {\n        const action = createAction(PaymentStrategyActionType.ExecuteRequested, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(paymentStrategyReducer(initialState, action).statuses).toEqual({\n            executeMethodId: 'foobar',\n            isExecuting: true,\n        });\n    });\n\n    it('returns pending flag as false if payment has executed successfully', () => {\n        const action = createAction(PaymentStrategyActionType.ExecuteSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(paymentStrategyReducer(initialState, action).statuses).toEqual({\n            executeMethodId: undefined,\n            isExecuting: false,\n        });\n    });\n\n    it('returns error if payment has failed to execute', () => {\n        const action = createErrorAction(PaymentStrategyActionType.ExecuteFailed, new Error(), {\n            methodId: 'foobar',\n        });\n\n        expect(paymentStrategyReducer(initialState, action).errors).toEqual({\n            executeMethodId: 'foobar',\n            executeError: action.payload,\n        });\n    });\n\n    it('returns pending flag as true if finalizing payment', () => {\n        const action = createAction(PaymentStrategyActionType.FinalizeRequested, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(paymentStrategyReducer(initialState, action).statuses).toEqual({\n            finalizeMethodId: 'foobar',\n            isFinalizing: true,\n        });\n    });\n\n    it('returns pending flag as false if payment has finalized successfully', () => {\n        const action = createAction(PaymentStrategyActionType.FinalizeSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(paymentStrategyReducer(initialState, action).statuses).toEqual({\n            finalizeMethodId: undefined,\n            isFinalizing: false,\n        });\n    });\n\n    it('returns error if payment has failed to finalize', () => {\n        const action = createErrorAction(PaymentStrategyActionType.FinalizeFailed, new Error(), {\n            methodId: 'foobar',\n        });\n\n        expect(paymentStrategyReducer(initialState, action).errors).toEqual({\n            finalizeMethodId: 'foobar',\n            finalizeError: action.payload,\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge } from '../common/utility';\n\nimport { PaymentStrategyAction, PaymentStrategyActionType } from './payment-strategy-actions';\nimport PaymentStrategyState, {\n    DEFAULT_STATE,\n    PaymentStrategyDataState,\n    PaymentStrategyErrorsState,\n    PaymentStrategyStatusesState,\n} from './payment-strategy-state';\n\nexport default function paymentStrategyReducer(\n    state: PaymentStrategyState = DEFAULT_STATE,\n    action: Action,\n): PaymentStrategyState {\n    const reducer = combineReducers<PaymentStrategyState, PaymentStrategyAction>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: PaymentStrategyDataState = DEFAULT_STATE.data,\n    action: PaymentStrategyAction,\n): PaymentStrategyDataState {\n    switch (action.type) {\n        case PaymentStrategyActionType.InitializeSucceeded: {\n            if (action.meta) {\n                const { methodId, gatewayId } = action.meta;\n                const initializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n\n                return objectMerge(data, {\n                    [initializeMethodId]: {\n                        isInitialized: true,\n                    },\n                });\n            }\n\n            break;\n        }\n\n        case PaymentStrategyActionType.DeinitializeSucceeded: {\n            if (action.meta) {\n                const { methodId, gatewayId } = action.meta;\n                const initializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n\n                return objectMerge(data, {\n                    [initializeMethodId]: {\n                        isInitialized: false,\n                    },\n                });\n            }\n        }\n    }\n\n    return data;\n}\n\nfunction errorsReducer(\n    errors: PaymentStrategyErrorsState = DEFAULT_STATE.errors,\n    action: PaymentStrategyAction,\n): PaymentStrategyErrorsState {\n    switch (action.type) {\n        case PaymentStrategyActionType.InitializeRequested:\n        case PaymentStrategyActionType.InitializeSucceeded:\n            return objectMerge(errors, {\n                initializeError: undefined,\n                initializeMethodId: undefined,\n            });\n\n        case PaymentStrategyActionType.InitializeFailed: {\n            let initializeMethodId = action.meta && action.meta.methodId;\n\n            if (action.meta) {\n                const { methodId, gatewayId } = action.meta;\n\n                initializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n            }\n\n            return objectMerge(errors, {\n                initializeError: action.payload,\n                initializeMethodId,\n            });\n        }\n\n        case PaymentStrategyActionType.DeinitializeRequested:\n        case PaymentStrategyActionType.DeinitializeSucceeded:\n            return objectMerge(errors, {\n                deinitializeError: undefined,\n                deinitializeMethodId: undefined,\n            });\n\n        case PaymentStrategyActionType.DeinitializeFailed: {\n            let deinitializeMethodId = action.meta && action.meta.methodId;\n\n            if (action.meta) {\n                const { methodId, gatewayId } = action.meta;\n\n                deinitializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n            }\n\n            return objectMerge(errors, {\n                deinitializeError: action.payload,\n                deinitializeMethodId,\n            });\n        }\n\n        case PaymentStrategyActionType.ExecuteRequested:\n        case PaymentStrategyActionType.ExecuteSucceeded:\n            return objectMerge(errors, {\n                executeError: undefined,\n                executeMethodId: undefined,\n            });\n\n        case PaymentStrategyActionType.ExecuteFailed:\n            return objectMerge(errors, {\n                executeError: action.payload,\n                executeMethodId: action.meta && action.meta.methodId,\n            });\n\n        case PaymentStrategyActionType.FinalizeRequested:\n        case PaymentStrategyActionType.FinalizeSucceeded:\n            return objectMerge(errors, {\n                finalizeError: undefined,\n                finalizeMethodId: undefined,\n            });\n\n        case PaymentStrategyActionType.FinalizeFailed:\n            return objectMerge(errors, {\n                finalizeError: action.payload,\n                finalizeMethodId: action.meta && action.meta.methodId,\n            });\n\n        case PaymentStrategyActionType.WidgetInteractionStarted:\n        case PaymentStrategyActionType.WidgetInteractionFinished:\n            return objectMerge(errors, {\n                widgetInteractionError: undefined,\n                widgetInteractionMethodId: undefined,\n            });\n\n        case PaymentStrategyActionType.WidgetInteractionFailed:\n            return objectMerge(errors, {\n                widgetInteractionError: action.payload,\n                widgetInteractionMethodId: action.meta.methodId,\n            });\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: PaymentStrategyStatusesState = DEFAULT_STATE.statuses,\n    action: PaymentStrategyAction,\n): PaymentStrategyStatusesState {\n    switch (action.type) {\n        case PaymentStrategyActionType.InitializeRequested: {\n            let initializeMethodId = action.meta && action.meta.methodId;\n\n            if (action.meta) {\n                const { methodId, gatewayId } = action.meta;\n\n                initializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n            }\n\n            return objectMerge(statuses, {\n                isInitializing: true,\n                initializeMethodId,\n            });\n        }\n\n        case PaymentStrategyActionType.InitializeFailed:\n        case PaymentStrategyActionType.InitializeSucceeded:\n            return objectMerge(statuses, {\n                isInitializing: false,\n                initializeMethodId: undefined,\n            });\n\n        case PaymentStrategyActionType.DeinitializeRequested: {\n            let deinitializeMethodId = action.meta && action.meta.methodId;\n\n            if (action.meta) {\n                const { methodId, gatewayId } = action.meta;\n\n                deinitializeMethodId = gatewayId ? `${methodId}.${gatewayId}` : methodId;\n            }\n\n            return objectMerge(statuses, {\n                isDeinitializing: true,\n                deinitializeMethodId,\n            });\n        }\n\n        case PaymentStrategyActionType.DeinitializeFailed:\n        case PaymentStrategyActionType.DeinitializeSucceeded:\n            return objectMerge(statuses, {\n                isDeinitializing: false,\n                deinitializeMethodId: undefined,\n            });\n\n        case PaymentStrategyActionType.ExecuteRequested:\n            return objectMerge(statuses, {\n                isExecuting: true,\n                executeMethodId: action.meta && action.meta.methodId,\n            });\n\n        case PaymentStrategyActionType.ExecuteFailed:\n        case PaymentStrategyActionType.ExecuteSucceeded:\n            return objectMerge(statuses, {\n                isExecuting: false,\n                executeMethodId: undefined,\n            });\n\n        case PaymentStrategyActionType.FinalizeRequested:\n            return objectMerge(statuses, {\n                isFinalizing: true,\n                finalizeMethodId: action.meta && action.meta.methodId,\n            });\n\n        case PaymentStrategyActionType.FinalizeFailed:\n        case PaymentStrategyActionType.FinalizeSucceeded:\n            return objectMerge(statuses, {\n                isFinalizing: false,\n                finalizeMethodId: undefined,\n            });\n\n        case PaymentStrategyActionType.WidgetInteractionStarted:\n            return objectMerge(statuses, {\n                isWidgetInteracting: true,\n                widgetInteractionMethodId: action.meta.methodId,\n            });\n\n        case PaymentStrategyActionType.WidgetInteractionFinished:\n        case PaymentStrategyActionType.WidgetInteractionFailed:\n            return objectMerge(statuses, {\n                isWidgetInteracting: false,\n                widgetInteractionMethodId: undefined,\n            });\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-registry-v2.ts",
    "content": "import {\n    PaymentStrategy,\n    PaymentStrategyResolveId,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ResolveIdRegistry } from '../common/registry';\n\ntype PaymentStrategyRegistry = ResolveIdRegistry<PaymentStrategy, PaymentStrategyResolveId>;\n\nexport default PaymentStrategyRegistry;\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-registry.spec.ts",
    "content": "import { getAmazonPayV2 } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\n\nimport { CheckoutStore, createCheckoutStore, InternalCheckoutSelectors } from '../checkout';\nimport { InvalidArgumentError } from '../common/error/errors';\nimport { getConfigState } from '../config/configs.mock';\nimport { getFormFieldsState } from '../form/form.mock';\nimport { OrderFinalizationNotRequiredError } from '../order/errors';\n\nimport { getBankDeposit, getBraintree, getPPSDK } from './payment-methods.mock';\nimport PaymentStrategyRegistry from './payment-strategy-registry';\nimport PaymentStrategyType from './payment-strategy-type';\nimport { PaymentStrategy } from './strategies';\n\ndescribe('PaymentStrategyRegistry', () => {\n    let registry: PaymentStrategyRegistry;\n    let store: CheckoutStore;\n\n    class BasePaymentStrategy implements PaymentStrategy {\n        constructor(private _store: CheckoutStore) {}\n\n        execute(): Promise<InternalCheckoutSelectors> {\n            return Promise.resolve(this._store.getState());\n        }\n\n        finalize(): Promise<InternalCheckoutSelectors> {\n            return Promise.reject(new OrderFinalizationNotRequiredError());\n        }\n\n        initialize(): Promise<InternalCheckoutSelectors> {\n            return Promise.resolve(this._store.getState());\n        }\n\n        deinitialize(): Promise<InternalCheckoutSelectors> {\n            return Promise.resolve(this._store.getState());\n        }\n    }\n\n    // tslint:disable-next-line:max-classes-per-file\n    class CreditCardPaymentStrategy extends BasePaymentStrategy {}\n\n    // tslint:disable-next-line:max-classes-per-file\n    class OfflinePaymentStrategy extends BasePaymentStrategy {}\n\n    // tslint:disable-next-line:max-classes-per-file\n    class AmazonPayV2PaymentStrategy extends BasePaymentStrategy {}\n\n    // tslint:disable-next-line:max-classes-per-file\n    class PPSDKPaymentStrategy extends BasePaymentStrategy {}\n\n    beforeEach(() => {\n        store = createCheckoutStore({\n            config: getConfigState(),\n            formFields: getFormFieldsState(),\n        });\n\n        registry = new PaymentStrategyRegistry();\n    });\n\n    describe('#getByMethod()', () => {\n        beforeEach(() => {\n            registry.register(\n                PaymentStrategyType.AMAZONPAY,\n                () => new AmazonPayV2PaymentStrategy(store),\n            );\n            registry.register(\n                PaymentStrategyType.CREDIT_CARD,\n                () => new CreditCardPaymentStrategy(store),\n            );\n\n            registry.register(PaymentStrategyType.OFFLINE, () => new OfflinePaymentStrategy(store));\n            registry.register(PaymentStrategyType.PPSDK, () => new PPSDKPaymentStrategy(store));\n        });\n\n        it('returns ppsdk strategy if type is \"PAYMENT_TYPE_SDK\"', () => {\n            expect(registry.getByMethod(getPPSDK())).toBeInstanceOf(PPSDKPaymentStrategy);\n        });\n\n        it('returns strategy if registered with method name', () => {\n            expect(registry.getByMethod(getAmazonPayV2())).toBeInstanceOf(\n                AmazonPayV2PaymentStrategy,\n            );\n        });\n\n        it('throws error if none is registered with method name (expected V1 behavior)', () => {\n            expect(() => registry.getByMethod(getBraintree())).toThrow(InvalidArgumentError);\n        });\n\n        it('returns offline strategy if none is registered with method name and method is offline', () => {\n            expect(registry.getByMethod(getBankDeposit())).toBeInstanceOf(OfflinePaymentStrategy);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-registry.ts",
    "content": "import { InvalidArgumentError } from '../common/error/errors';\nimport { Registry, RegistryOptions } from '../common/registry';\n\nimport PaymentMethod from './payment-method';\nimport * as paymentMethodTypes from './payment-method-types';\nimport PaymentStrategyType from './payment-strategy-type';\nimport { isPPSDKPaymentMethod } from './ppsdk-payment-method';\nimport { PaymentStrategy } from './strategies';\n\nexport default class PaymentStrategyRegistry extends Registry<\n    PaymentStrategy,\n    PaymentStrategyType\n> {\n    getByMethod(paymentMethod?: PaymentMethod): PaymentStrategy {\n        if (!paymentMethod) {\n            return this.get();\n        }\n\n        const token = this._getToken(paymentMethod);\n\n        const cacheToken = [paymentMethod.gateway, paymentMethod.id]\n            .filter((value) => value !== undefined && value !== null)\n            .join('-');\n\n        return this.get(token, cacheToken);\n    }\n\n    private _getToken(paymentMethod: PaymentMethod): PaymentStrategyType {\n        if (isPPSDKPaymentMethod(paymentMethod)) {\n            return PaymentStrategyType.PPSDK;\n        }\n\n        if (paymentMethod.gateway === 'klarna') {\n            return PaymentStrategyType.KLARNAV2;\n        }\n\n        const methodId = paymentMethod.gateway || paymentMethod.id;\n\n        if (this._hasFactoryForMethod(methodId)) {\n            return methodId;\n        }\n\n        if (paymentMethod.type === paymentMethodTypes.OFFLINE) {\n            return PaymentStrategyType.OFFLINE;\n        }\n\n        throw new InvalidArgumentError(`'${methodId}' is not registered.`);\n    }\n\n    private _hasFactoryForMethod(methodId: string): methodId is PaymentStrategyType {\n        return this._hasFactory(methodId);\n    }\n}\n\nexport interface PaymentStrategyRegistryOptions extends RegistryOptions {\n    clientSidePaymentProviders?: string[];\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-selector.spec.ts",
    "content": "import { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport PaymentStrategySelector, {\n    createPaymentStrategySelectorFactory,\n    PaymentStrategySelectorFactory,\n} from './payment-strategy-selector';\nimport { DEFAULT_STATE } from './payment-strategy-state';\n\ndescribe('PaymentStrategySelector', () => {\n    let createPaymentStrategySelector: PaymentStrategySelectorFactory;\n    let selector: PaymentStrategySelector;\n    let state: any;\n\n    beforeEach(() => {\n        createPaymentStrategySelector = createPaymentStrategySelectorFactory();\n        state = {\n            paymentStrategy: DEFAULT_STATE,\n        };\n    });\n\n    describe('#getExecuteError()', () => {\n        it('returns error if unable to execute', () => {\n            const executeError = getErrorResponse();\n\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                errors: { executeError },\n            });\n\n            expect(selector.getExecuteError()).toEqual(executeError);\n        });\n\n        it('does not returns error if able to execute', () => {\n            selector = createPaymentStrategySelector(state.paymentStrategy);\n\n            expect(selector.getExecuteError()).toBeUndefined();\n        });\n    });\n\n    describe('#getFinalizeError()', () => {\n        it('returns error if unable to finalize', () => {\n            const finalizeError = getErrorResponse();\n\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                errors: { finalizeError },\n            });\n\n            expect(selector.getFinalizeError()).toEqual(finalizeError);\n        });\n\n        it('does not returns error if able to finalize', () => {\n            selector = createPaymentStrategySelector(state.paymentStrategy);\n\n            expect(selector.getFinalizeError()).toBeUndefined();\n        });\n    });\n\n    describe('#getInitializeError()', () => {\n        it('returns error if unable to initialize any method', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                errors: { initializeError: getErrorResponse(), initializeMethodId: 'foobar' },\n            });\n\n            expect(selector.getInitializeError()).toEqual(getErrorResponse());\n        });\n\n        it('returns error if unable to initialize specific method', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                errors: { initializeError: getErrorResponse(), initializeMethodId: 'foobar' },\n            });\n\n            expect(selector.getInitializeError('foobar')).toEqual(getErrorResponse());\n            expect(selector.getInitializeError('bar')).toBeUndefined();\n        });\n\n        it('does not return error if able to initialize', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                errors: {},\n            });\n\n            expect(selector.getInitializeError()).toBeUndefined();\n        });\n    });\n\n    describe('#getWidgetInteractingError()', () => {\n        it('returns error if widget interaction failed', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                errors: {\n                    widgetInteractionError: getErrorResponse(),\n                    widgetInteractionMethodId: 'foobar',\n                },\n            });\n\n            expect(selector.getWidgetInteractingError()).toEqual(getErrorResponse());\n        });\n\n        it('returns error if unable to initialize specific method', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                errors: { initializeError: getErrorResponse(), initializeMethodId: 'foobar' },\n            });\n\n            expect(selector.getInitializeError('foobar')).toEqual(getErrorResponse());\n            expect(selector.getInitializeError('bar')).toBeUndefined();\n        });\n\n        it('does not return error if able to initialize', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                errors: {},\n            });\n\n            expect(selector.getInitializeError()).toBeUndefined();\n        });\n    });\n\n    describe('#isExecuting()', () => {\n        it('returns true if updating address', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                statuses: { isExecuting: true },\n            });\n\n            expect(selector.isExecuting()).toBe(true);\n        });\n\n        it('returns false if not updating address', () => {\n            selector = createPaymentStrategySelector(state.paymentStrategy);\n\n            expect(selector.isExecuting()).toBe(false);\n        });\n    });\n\n    describe('#isFinalizing()', () => {\n        it('returns true if selecting option', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                statuses: { isFinalizing: true },\n            });\n\n            expect(selector.isFinalizing()).toBe(true);\n        });\n\n        it('returns false if not selecting option', () => {\n            selector = createPaymentStrategySelector(state.paymentStrategy);\n\n            expect(selector.isFinalizing()).toBe(false);\n        });\n    });\n\n    describe('#isInitializing()', () => {\n        it('returns true if initializing any method', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                statuses: { initializeMethodId: 'foobar', isInitializing: true },\n            });\n\n            expect(selector.isInitializing()).toBe(true);\n        });\n\n        it('returns true if initializing specific method', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                statuses: { initializeMethodId: 'foobar', isInitializing: true },\n            });\n\n            expect(selector.isInitializing('foobar')).toBe(true);\n            expect(selector.isInitializing('bar')).toBe(false);\n        });\n\n        it('returns false if not initializing method', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                statuses: { initializeMethodId: undefined, isInitializing: false },\n            });\n\n            expect(selector.isInitializing()).toBe(false);\n        });\n    });\n\n    describe('#isWidgetInteracting()', () => {\n        it('returns true if widget interacting in any method', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                statuses: { initializeMethodId: 'foobar', isWidgetInteracting: true },\n            });\n\n            expect(selector.isWidgetInteracting()).toBe(true);\n        });\n\n        it('returns true if widget interacting for a specific method', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                statuses: { widgetInteractionMethodId: 'foobar', isWidgetInteracting: true },\n            });\n\n            expect(selector.isWidgetInteracting('foobar')).toBe(true);\n            expect(selector.isWidgetInteracting('bar')).toBe(false);\n        });\n\n        it('returns false if widget not interacting for a specific method', () => {\n            selector = createPaymentStrategySelector({\n                ...state.paymentStrategy,\n                statuses: { widgetInteractionMethodId: undefined, isWidgetInteracting: false },\n            });\n\n            expect(selector.isWidgetInteracting()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport PaymentStrategyState, { DEFAULT_STATE } from './payment-strategy-state';\n\ninterface InitiaizedQuery {\n    methodId: string;\n    gatewayId?: string;\n}\n\nexport default interface PaymentStrategySelector {\n    getInitializeError(methodId?: string): Error | undefined;\n    getExecuteError(methodId?: string): Error | undefined;\n    getFinalizeError(methodId?: string): Error | undefined;\n    getWidgetInteractingError(methodId?: string): Error | undefined;\n    isInitializing(methodId?: string): boolean;\n    isInitialized(query: InitiaizedQuery): boolean;\n    isExecuting(methodId?: string): boolean;\n    isFinalizing(methodId?: string): boolean;\n    isWidgetInteracting(methodId?: string): boolean;\n}\n\nexport type PaymentStrategySelectorFactory = (\n    state: PaymentStrategyState,\n) => PaymentStrategySelector;\n\nexport function createPaymentStrategySelectorFactory(): PaymentStrategySelectorFactory {\n    const getInitializeError = createSelector(\n        (state: PaymentStrategyState) => state.errors.initializeMethodId,\n        (state: PaymentStrategyState) => state.errors.initializeError,\n        (initializeMethodId, initializeError) => (methodId?: string) => {\n            if (methodId && initializeMethodId !== methodId) {\n                return;\n            }\n\n            return initializeError;\n        },\n    );\n\n    const getExecuteError = createSelector(\n        (state: PaymentStrategyState) => state.errors.executeMethodId,\n        (state: PaymentStrategyState) => state.errors.executeError,\n        (executeMethodId, executeError) => (methodId?: string) => {\n            if (methodId && executeMethodId !== methodId) {\n                return;\n            }\n\n            return executeError;\n        },\n    );\n\n    const getFinalizeError = createSelector(\n        (state: PaymentStrategyState) => state.errors.finalizeMethodId,\n        (state: PaymentStrategyState) => state.errors.finalizeError,\n        (finalizeMethodId, finalizeError) => (methodId?: string) => {\n            if (methodId && finalizeMethodId !== methodId) {\n                return;\n            }\n\n            return finalizeError;\n        },\n    );\n\n    const getWidgetInteractingError = createSelector(\n        (state: PaymentStrategyState) => state.errors.widgetInteractionMethodId,\n        (state: PaymentStrategyState) => state.errors.widgetInteractionError,\n        (widgetInteractionMethodId, widgetInteractionError) => (methodId?: string) => {\n            if (methodId && widgetInteractionMethodId !== methodId) {\n                return;\n            }\n\n            return widgetInteractionError;\n        },\n    );\n\n    const isInitializing = createSelector(\n        (state: PaymentStrategyState) => state.statuses.initializeMethodId,\n        (state: PaymentStrategyState) => state.statuses.isInitializing,\n        (initializeMethodId, isInitializing) => (key?: string) => {\n            if (key && initializeMethodId !== key) {\n                return false;\n            }\n\n            return !!isInitializing;\n        },\n    );\n\n    const isInitialized = createSelector(\n        (state: PaymentStrategyState) => state.data,\n        (data) => (query: InitiaizedQuery) => {\n            const key = query.gatewayId ? `${query.methodId}.${query.gatewayId}` : query.methodId;\n\n            return !!(data[key] && data[key].isInitialized);\n        },\n    );\n\n    const isExecuting = createSelector(\n        (state: PaymentStrategyState) => state.statuses.executeMethodId,\n        (state: PaymentStrategyState) => state.statuses.isExecuting,\n        (executeMethodId, isExecuting) => (methodId?: string) => {\n            if (methodId && executeMethodId !== methodId) {\n                return false;\n            }\n\n            return !!isExecuting;\n        },\n    );\n\n    const isFinalizing = createSelector(\n        (state: PaymentStrategyState) => state.statuses.finalizeMethodId,\n        (state: PaymentStrategyState) => state.statuses.isFinalizing,\n        (finalizeMethodId, isFinalizing) => (methodId?: string) => {\n            if (methodId && finalizeMethodId !== methodId) {\n                return false;\n            }\n\n            return !!isFinalizing;\n        },\n    );\n\n    const isWidgetInteracting = createSelector(\n        (state: PaymentStrategyState) => state.statuses.widgetInteractionMethodId,\n        (state: PaymentStrategyState) => state.statuses.isWidgetInteracting,\n        (widgetInteractionMethodId, isWidgetInteracting) => (methodId?: string) => {\n            if (methodId && widgetInteractionMethodId !== methodId) {\n                return false;\n            }\n\n            return !!isWidgetInteracting;\n        },\n    );\n\n    return memoizeOne((state: PaymentStrategyState = DEFAULT_STATE): PaymentStrategySelector => {\n        return {\n            getInitializeError: getInitializeError(state),\n            getExecuteError: getExecuteError(state),\n            getFinalizeError: getFinalizeError(state),\n            getWidgetInteractingError: getWidgetInteractingError(state),\n            isInitializing: isInitializing(state),\n            isInitialized: isInitialized(state),\n            isExecuting: isExecuting(state),\n            isFinalizing: isFinalizing(state),\n            isWidgetInteracting: isWidgetInteracting(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-state.ts",
    "content": "export default interface PaymentStrategyState {\n    data: PaymentStrategyDataState;\n    errors: PaymentStrategyErrorsState;\n    statuses: PaymentStrategyStatusesState;\n}\n\nexport interface PaymentStrategyDataState {\n    [key: string]: {\n        isInitialized: boolean;\n    };\n}\n\nexport interface PaymentStrategyErrorsState {\n    deinitializeError?: Error;\n    deinitializeMethodId?: string;\n    executeError?: Error;\n    executeMethodId?: string;\n    finalizeError?: Error;\n    finalizeMethodId?: string;\n    initializeError?: Error;\n    initializeMethodId?: string;\n    widgetInteractionError?: Error;\n    widgetInteractionMethodId?: string;\n}\n\nexport interface PaymentStrategyStatusesState {\n    deinitializeMethodId?: string;\n    executeMethodId?: string;\n    finalizeMethodId?: string;\n    initializeMethodId?: string;\n    isDeinitializing?: boolean;\n    isExecuting?: boolean;\n    isFinalizing?: boolean;\n    isInitializing?: boolean;\n    isWidgetInteracting?: boolean;\n    widgetInteractionMethodId?: string;\n}\n\nexport const DEFAULT_STATE: PaymentStrategyState = {\n    data: {},\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-type.ts",
    "content": "enum PaymentStrategyType {\n    ADYENV2 = 'adyenv2',\n    ADYENV2_GOOGLEPAY = 'googlepayadyenv2',\n    ADYENV3 = 'adyenv3',\n    ADYENV3_GOOGLEPAY = 'googlepayadyenv3',\n    AFFIRM = 'affirm',\n    AFTERPAY = 'afterpay',\n    AUTHORIZENET_GOOGLE_PAY = 'googlepayauthorizenet',\n    AMAZONPAY = 'amazonpay',\n    APPLEPAY = 'applepay',\n    BLUESNAPV2 = 'bluesnapv2',\n    BOLT = 'bolt',\n    CBA_MPGS = 'cba_mpgs',\n    CHECKOUTCOM = 'checkoutcom',\n    CHECKOUTCOM_APM = 'checkoutcomapm',\n    CHECKOUTCOM_FAWRY = 'checkoutcomfawry',\n    CHECKOUTCOM_SEPA = 'checkoutcomsepa',\n    CHECKOUTCOM_IDEAL = 'checkoutcomideal',\n    CREDIT_CARD = 'creditcard',\n    CHECKOUTCOM_GOOGLE_PAY = 'googlepaycheckoutcom',\n    CLEARPAY = 'clearpay',\n    CONVERGE = 'converge',\n    CYBERSOURCE = 'cybersource',\n    CYBERSOURCEV2 = 'cybersourcev2',\n    BNZ = 'bnz',\n    BNZ_GOOGLEPAY = 'googlepaybnz',\n    CYBERSOURCEV2_GOOGLE_PAY = 'googlepaycybersourcev2',\n    HUMM = 'humm',\n    KLARNA = 'klarna',\n    KLARNAV2 = 'klarnav2',\n    LEGACY = 'legacy',\n    MOLLIE = 'mollie',\n    MONERIS = 'moneris',\n    NO_PAYMENT_DATA_REQUIRED = 'nopaymentdatarequired',\n    OFFLINE = 'offline',\n    OFFSITE = 'offsite',\n    ORBITAL_GOOGLE_PAY = 'googlepayorbital',\n    PAYPAL_EXPRESS = 'paypalexpress',\n    PAYPAL_EXPRESS_CREDIT = 'paypalexpresscredit',\n    PAYPAL_COMMERCE = 'paypalcommerce',\n    PAYPAL_COMMERCE_CREDIT = 'paypalcommercecredit',\n    PAYPAL_COMMERCE_CREDIT_CARD = 'paypalcommercecreditcards',\n    PAYPAL_COMMERCE_ALTERNATIVE_METHODS = 'paypalcommercealternativemethods',\n    PAYPAL_COMMERCE_VENMO = 'paypalcommercevenmo',\n    PPSDK = 'PAYMENT_TYPE_SDK',\n    QUADPAY = 'quadpay',\n    SAGE_PAY = 'sagepay',\n    SQUARE = 'squarev2',\n    STRIPEV3 = 'stripev3',\n    STRIPE_UPE = 'stripeupe',\n    STRIPE_UPE_GOOGLE_PAY = 'googlepaystripeupe',\n    BRAINTREE = 'braintree',\n    BRAINTREE_PAYPAL = 'braintreepaypal',\n    BRAINTREE_VENMO = 'braintreevenmo',\n    BRAINTREE_PAYPAL_CREDIT = 'braintreepaypalcredit',\n    BRAINTREE_VISA_CHECKOUT = 'braintreevisacheckout',\n    BRAINTREE_GOOGLE_PAY = 'googlepaybraintree',\n    WORLDPAYACCESS = 'worldpayaccess',\n    WORLDPAYACCESS_GOOGLE_PAY = 'googlepayworldpayaccess',\n    STRIPE_GOOGLE_PAY = 'googlepaystripe',\n    SEZZLE = 'sezzle',\n    ZIP = 'zip',\n}\n\nexport default PaymentStrategyType;\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-widget-action-creator.spec.ts",
    "content": "import { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { PaymentStrategyActionType } from './payment-strategy-actions';\nimport PaymentStrategyWidgetActionCreator from './payment-strategy-widget-action-creator';\n\ndescribe('PaymentStrategyWidgetActionCreator', () => {\n    let actionCreator: PaymentStrategyWidgetActionCreator;\n\n    beforeEach(() => {\n        actionCreator = new PaymentStrategyWidgetActionCreator();\n    });\n\n    describe('#widgetInteraction()', () => {\n        it('executes widget interaction callback', async () => {\n            const options = { methodId: 'default' };\n            const fakeMethod = jest.fn(() => Promise.resolve());\n\n            await from(actionCreator.widgetInteraction(fakeMethod, options))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(fakeMethod).toHaveBeenCalled();\n        });\n\n        it('emits action to notify widget interaction in progress', async () => {\n            const actions = await from(\n                actionCreator.widgetInteraction(\n                    jest.fn(() => Promise.resolve()),\n                    { methodId: 'default' },\n                ),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: PaymentStrategyActionType.WidgetInteractionStarted,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: PaymentStrategyActionType.WidgetInteractionFinished,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n\n        it('emits error action if widget interaction fails', async () => {\n            const signInError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            const actions = await from(\n                actionCreator.widgetInteraction(\n                    jest.fn(() => Promise.reject(signInError)),\n                    { methodId: 'default' },\n                ),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: PaymentStrategyActionType.WidgetInteractionStarted,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: PaymentStrategyActionType.WidgetInteractionFailed,\n                    error: true,\n                    payload: signInError,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/payment-strategy-widget-action-creator.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { concat, defer, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { throwErrorAction } from '../common/error';\n\nimport { PaymentRequestOptions } from './payment-request-options';\nimport { PaymentStrategyActionType, PaymentStrategyWidgetAction } from './payment-strategy-actions';\n\nexport default class PaymentStrategyWidgetActionCreator {\n    widgetInteraction(\n        method: () => Promise<unknown>,\n        options?: PaymentRequestOptions,\n    ): Observable<PaymentStrategyWidgetAction> {\n        const methodId = options && options.methodId;\n        const meta = { methodId };\n\n        return concat(\n            of(createAction(PaymentStrategyActionType.WidgetInteractionStarted, undefined, meta)),\n            defer(() =>\n                method().then(() =>\n                    createAction(\n                        PaymentStrategyActionType.WidgetInteractionFinished,\n                        undefined,\n                        meta,\n                    ),\n                ),\n            ),\n        ).pipe(\n            catchError((error) =>\n                throwErrorAction(PaymentStrategyActionType.WidgetInteractionFailed, error, meta),\n            ),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/payment.ts",
    "content": "import {\n    BlueSnapDirectEcpPayload,\n    BlueSnapDirectSepaPayload,\n    IdealPayload,\n    WithAccountCreation,\n    WithBankAccountInstrument,\n    WithEcpInstrument,\n    WithPayByBankInstrument,\n    WithSepaInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BrowserInfo } from '../common/browser-info';\nimport { Omit } from '../common/types';\n\nimport PaymentAdditionalAction from './payment-additional-action';\n\nexport default interface Payment {\n    methodId: string;\n    gatewayId?: string;\n    paymentData?: PaymentInstrument & PaymentInstrumentMeta;\n    additionalAction?: PaymentAdditionalAction;\n}\n\nexport type PaymentInstrument =\n    | WithEcpInstrument\n    | WithSepaInstrument\n    | WithPayByBankInstrument\n    | WithIdealInstrument\n    | CreditCardInstrument\n    | (CreditCardInstrument & WithHostedFormNonce)\n    | (CreditCardInstrument & WithDocumentInstrument)\n    | (CreditCardInstrument & WithIdealInstrument)\n    | (CreditCardInstrument & WithCheckoutcomFawryInstrument)\n    | (CreditCardInstrument & WithCheckoutcomSEPAInstrument)\n    | CryptogramInstrument\n    | FormattedPayload<\n          | AdyenV2Instrument\n          | AppleInstrument\n          | BlueSnapDirectEcpPayload\n          | BlueSnapDirectSepaPayload\n          | IdealPayload\n          | BoltInstrument\n          | PaypalInstrument\n          | FormattedHostedInstrument\n          | FormattedVaultedInstrument\n          | WithDocumentInstrument\n          | WithIdealInstrument\n          | WithCheckoutcomFawryInstrument\n          | WithCheckoutcomSEPAInstrument\n          | StripeV3Intent\n          | StripeUPEIntent\n          | WithMollieIssuerInstrument\n          | StripeV3FormattedPayload\n      >\n    | HostedInstrument\n    | NonceInstrument\n    | ThreeDSVaultedInstrument\n    | VaultedInstrument\n    | (VaultedInstrument & WithHostedFormNonce)\n    | WithAccountCreation\n    | WithBankAccountInstrument;\n\nexport interface PaymentInstrumentMeta {\n    deviceSessionId?: string;\n}\n\nexport interface CreditCardInstrument {\n    ccCustomerCode?: string;\n    ccExpiry: {\n        month: string;\n        year: string;\n    };\n    ccName: string;\n    ccNumber: string;\n    ccCvv?: string;\n    shouldSaveInstrument?: boolean;\n    shouldSetAsDefaultInstrument?: boolean;\n    extraData?: any;\n    threeDSecure?: ThreeDSecure | ThreeDSecureToken;\n    browser_info?: BrowserInfo;\n}\n\nexport interface WithDocumentInstrument {\n    ccDocument: string;\n}\n\nexport interface WithMollieIssuerInstrument {\n    issuer: string;\n    shopper_locale: string;\n}\n\nexport interface WithCheckoutcomSEPAInstrument {\n    iban: string;\n    bic: string;\n}\n\nexport interface WithIdealInstrument {\n    bic: string;\n}\n\nexport interface WithCheckoutcomFawryInstrument {\n    customerMobile: string;\n    customerEmail: string;\n}\n\nexport interface WithHostedFormNonce {\n    hostedFormNonce: string;\n}\n\nexport type HostedCreditCardInstrument = Omit<\n    CreditCardInstrument,\n    'ccExpiry' | 'ccName' | 'ccNumber' | 'ccCvv'\n>;\n\nexport type HostedVaultedInstrument = Omit<VaultedInstrument, 'ccNumber' | 'ccCvv'>;\n\nexport type AdyenV2Instrument = AdyenV2Token | AdyenV2Card;\n\nexport interface NonceInstrument {\n    nonce: string;\n    shouldSaveInstrument?: boolean;\n    shouldSetAsDefaultInstrument?: boolean;\n    deviceSessionId?: string;\n    tokenType?: string;\n}\n\nexport interface VaultedInstrument {\n    instrumentId: string;\n    ccCvv?: string;\n    ccNumber?: string;\n}\n\nexport interface ThreeDSVaultedInstrument extends VaultedInstrument {\n    iin?: string;\n    threeDSecure?: ThreeDSecure | ThreeDSecureToken;\n}\n\nexport interface CryptogramInstrument {\n    cryptogramId: string;\n    eci: string;\n    transactionId?: string;\n    ccExpiry: {\n        month: string;\n        year: string;\n    };\n    ccNumber: string;\n    accountMask: string;\n    extraData?: any;\n}\n\nexport interface ThreeDSecure {\n    version: string;\n    status: string;\n    vendor: string;\n    cavv: string;\n    eci: string;\n    xid: string;\n}\n\nexport interface ThreeDSecureToken {\n    token: string;\n}\n\nexport interface HostedInstrument {\n    shouldSaveInstrument?: boolean;\n    shouldSetAsDefaultInstrument?: boolean;\n}\n\nexport interface PaypalInstrument {\n    vault_payment_instrument: boolean | null;\n    set_as_default_stored_instrument: boolean | null;\n    device_info: string | null;\n    paypal_account: {\n        token: string;\n        email: string | null;\n    };\n}\n\ninterface BoltInstrument {\n    credit_card_token: {\n        token: string;\n        last_four_digits: string;\n        iin: string;\n        expiration_month: number;\n        expiration_year: number;\n        brand?: string;\n    };\n    provider_data: {\n        create_account: boolean;\n        embedded_checkout: boolean;\n    };\n}\n\ninterface AppleInstrument {\n    apple_pay_token: {\n        payment_data: ApplePayJS.ApplePayPaymentToken['paymentData'];\n        payment_method: ApplePayJS.ApplePayPaymentToken['paymentMethod'];\n        transaction_id: ApplePayJS.ApplePayPaymentToken['transactionIdentifier'];\n    };\n}\n\ninterface AdyenV2Token extends FormattedVaultedInstrument {\n    origin?: string;\n    browser_info: BrowserInfo;\n    credit_card_token?: void;\n}\n\ninterface AdyenV2Card {\n    browser_info: BrowserInfo;\n    credit_card_token: {\n        token: string;\n    };\n    bigpay_token?: void;\n}\n\ninterface StripeV3Intent {\n    credit_card_token: {\n        token: string;\n    };\n    confirm: boolean;\n}\n\nexport interface StripeUPEIntent {\n    cart_id: string;\n    credit_card_token: {\n        token: string;\n    };\n    confirm: boolean;\n}\n\nexport interface FormattedHostedInstrument {\n    vault_payment_instrument: boolean | null;\n    set_as_default_stored_instrument: boolean | null;\n}\n\nexport interface FormattedVaultedInstrument {\n    bigpay_token:\n        | {\n              token: string;\n              credit_card_number_confirmation?: string;\n              expiry_month?: string;\n              expiry_year?: string;\n              verification_value?: string;\n          }\n        | string\n        | null;\n}\n\nexport interface FormattedPayload<T> {\n    formattedPayload: T;\n}\n\nexport interface StripeV3FormattedPayload {\n    credit_card_token?: {\n        token: string;\n    };\n    vault_payment_instrument?: boolean;\n    confirm: boolean;\n    set_as_default_stored_instrument?: boolean;\n    client_token?: string;\n    bigpay_token?: {\n        token: string;\n    };\n}\n"
  },
  {
    "path": "packages/core/src/payment/payments.mock.ts",
    "content": "import { mapToInternalAddress } from '../address';\nimport { getBillingAddress } from '../billing/billing-addresses.mock';\nimport { mapToInternalCart } from '../cart';\nimport { getCheckoutWithGiftCertificates } from '../checkout/checkouts.mock';\nimport { mapToInternalCustomer } from '../customer';\nimport { getCustomer } from '../customer/customers.mock';\nimport { mapToInternalOrder } from '../order';\nimport { getOrder, getOrderMeta } from '../order/orders.mock';\nimport { getConsignments } from '../shipping/consignments.mock';\nimport { getFlatRateOption } from '../shipping/internal-shipping-options.mock';\nimport { getShippingAddress } from '../shipping/shipping-addresses.mock';\n\nimport Payment, { CreditCardInstrument, VaultedInstrument } from './payment';\nimport { getAuthorizenet, getPaymentMethodsMeta } from './payment-methods.mock';\nimport PaymentRequestBody from './payment-request-body';\nimport PaymentResponseBody from './payment-response-body';\nimport PaymentState from './payment-state';\n\nexport function getPayment(): Payment {\n    return {\n        methodId: 'authorizenet',\n        paymentData: getCreditCardInstrument(),\n    };\n}\n\nexport function getCreditCardInstrument(): CreditCardInstrument {\n    return {\n        ccExpiry: {\n            month: '10',\n            year: '2020',\n        },\n        ccName: 'BigCommerce',\n        ccNumber: '4111111111111111',\n        ccCvv: '123',\n    };\n}\n\nexport function getVaultedInstrument(): VaultedInstrument {\n    return {\n        instrumentId: '123',\n    };\n}\n\nexport function getPaymentRequestBody(): PaymentRequestBody {\n    return {\n        authToken: 'auth-token',\n        billingAddress: mapToInternalAddress(getBillingAddress()),\n        cart: mapToInternalCart(getCheckoutWithGiftCertificates()),\n        customer: mapToInternalCustomer(getCustomer(), getBillingAddress()),\n        order: mapToInternalOrder(getOrder(), getOrderMeta()),\n        orderMeta: getOrderMeta(),\n        payment: getPayment().paymentData as CreditCardInstrument,\n        paymentMethod: getAuthorizenet(),\n        quoteMeta: { request: getPaymentMethodsMeta() },\n        shippingAddress: mapToInternalAddress(getShippingAddress(), getConsignments()),\n        shippingOption: getFlatRateOption(),\n        source: 'bigcommerce-checkout-js-sdk',\n        store: {\n            storeHash: 'k1drp8k8',\n            storeId: '1504098821',\n            storeLanguage: 'en_US',\n            storeName: 's1504098821',\n        },\n    };\n}\n\nexport function getPaymentResponseBody(): PaymentResponseBody {\n    return {\n        status: 'ok',\n        id: 'b12e69cb-d76e-4d86-8d3d-94e8a07c9051',\n        avs_result: {},\n        cvv_result: {},\n        three_ds_result: {},\n        fraud_review: true,\n        transaction_type: 'purchase',\n        errors: [],\n    };\n}\n\nexport function getErrorPaymentResponseBody(): PaymentResponseBody {\n    return {\n        status: 'error',\n        id: '1093a806-6cc2-4b5a-b551-77fd21446a1b',\n        avs_result: {},\n        cvv_result: {},\n        three_ds_result: {},\n        fraud_review: true,\n        transaction_type: 'purchase',\n        errors: [{ code: 'insufficient_funds', message: 'Insufficient funds' }],\n    };\n}\n\nexport function getPaymentState(): PaymentState {\n    return {\n        data: getPaymentResponseBody(),\n    };\n}\n"
  },
  {
    "path": "packages/core/src/payment/ppsdk-payment-method.spec.ts",
    "content": "import PaymentMethod from './payment-method';\nimport PaymentStrategyType from './payment-strategy-type';\nimport { isPPSDKPaymentMethod } from './ppsdk-payment-method';\n\ndescribe('isPPSDKPaymentMethod', () => {\n    it('returns false when passed a non PPSDK payment method', () => {\n        const paymentMethod: PaymentMethod = {\n            id: 'some-id',\n            method: 'some-method',\n            type: 'some-type',\n            config: {},\n            supportedCards: [],\n            skipRedirectConfirmationAlert: false,\n        };\n\n        expect(isPPSDKPaymentMethod(paymentMethod)).toBe(false);\n    });\n\n    it('returns true when passed a PPSDK payment method', () => {\n        const paymentMethod: PaymentMethod = {\n            id: 'some-id',\n            method: 'some-method',\n            type: PaymentStrategyType.PPSDK,\n            config: {},\n            supportedCards: [],\n            initializationStrategy: {\n                type: 'some-strategy',\n            },\n            skipRedirectConfirmationAlert: false,\n        };\n\n        expect(isPPSDKPaymentMethod(paymentMethod)).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/ppsdk-payment-method.ts",
    "content": "import PaymentMethod from './payment-method';\nimport PaymentStrategyType from './payment-strategy-type';\n\ntype PPSDKRequiredProperties = 'initializationStrategy';\n\nexport type PPSDKPaymentMethod = PaymentMethod & {\n    type: PaymentStrategyType.PPSDK;\n} & Required<Pick<PaymentMethod, PPSDKRequiredProperties>>;\n\nexport const isPPSDKPaymentMethod = (\n    paymentMethod: PaymentMethod,\n): paymentMethod is PPSDKPaymentMethod => {\n    const { type, initializationStrategy } = paymentMethod;\n\n    return type === PaymentStrategyType.PPSDK && typeof initializationStrategy?.type === 'string';\n};\n"
  },
  {
    "path": "packages/core/src/payment/storefront-stored-card-request-sender.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    StoredCardHostedFormDataMock,\n    StoredCardHostedFormInstrumentFormAPIMock,\n    StoredCardHostedFormInstrumentFormMock,\n} from '../hosted-form/stored-card-hosted-form.mock';\n\nimport StorefrontStoredCardRequestSender from './storefront-stored-card-request-sender';\n\ndescribe('StorefrontStoredCardRequestSender', () => {\n    let requestSender: RequestSender;\n    let storefrontStoredCardRequestSender: StorefrontStoredCardRequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        storefrontStoredCardRequestSender = new StorefrontStoredCardRequestSender(requestSender);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'post').mockResolvedValue(undefined);\n    });\n\n    describe('#submitPaymentMethod', () => {\n        const headers = {\n            Authorization: StoredCardHostedFormDataMock.vaultToken,\n            Accept: 'application/vnd.bc.v1+json',\n            'Content-Type': 'application/vnd.bc.v1+json',\n        };\n\n        it('saves payment method', async () => {\n            await storefrontStoredCardRequestSender.submitPaymentInstrument(\n                StoredCardHostedFormDataMock,\n                StoredCardHostedFormInstrumentFormMock,\n            );\n\n            const { instrument, billingAddress } = StoredCardHostedFormInstrumentFormAPIMock;\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                `${StoredCardHostedFormDataMock.paymentsUrl}/stores/${StoredCardHostedFormDataMock.storeHash}/customers/${StoredCardHostedFormDataMock.shopperId}/stored_instruments`,\n                {\n                    body: JSON.stringify({\n                        instrument,\n                        billing_address: billingAddress,\n                        provider_id: StoredCardHostedFormDataMock.providerId,\n                        default_instrument:\n                            StoredCardHostedFormInstrumentFormAPIMock.default_Instrument,\n                        currency_code: StoredCardHostedFormDataMock.currencyCode,\n                    }),\n                    headers,\n                },\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/storefront-stored-card-request-sender.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    StoredCardHostedFormData,\n    StoredCardHostedFormInstrumentForm,\n} from '../hosted-form/stored-card-hosted-form-type';\n\nexport default class StorefrontStoredCardRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    async submitPaymentInstrument(\n        requestInitializationData: StoredCardHostedFormData,\n        storeInstrumentFormData: StoredCardHostedFormInstrumentForm,\n    ): Promise<void> {\n        const { providerId, currencyCode, paymentsUrl, shopperId, storeHash, vaultToken } =\n            requestInitializationData;\n\n        const { billingAddress, instrument, defaultInstrument } = storeInstrumentFormData;\n        const url = `${paymentsUrl}/stores/${storeHash}/customers/${shopperId}/stored_instruments`;\n        const options = {\n            headers: {\n                Authorization: vaultToken,\n                Accept: 'application/vnd.bc.v1+json',\n                'Content-Type': 'application/vnd.bc.v1+json',\n            },\n            body: JSON.stringify({\n                instrument: {\n                    type: instrument.type,\n                    cardholder_name: instrument.cardholderName,\n                    number: instrument.number,\n                    expiry_month: instrument.expiryMonth,\n                    expiry_year: instrument.expiryYear,\n                    verification_value: instrument.verificationValue,\n                },\n                billing_address: {\n                    email: billingAddress.email,\n                    address1: billingAddress.address1,\n                    ...(billingAddress.address2 && { address2: billingAddress.address2 }),\n                    city: billingAddress.city,\n                    postal_code: billingAddress.postalCode,\n                    country_code: billingAddress.countryCode,\n                    ...(billingAddress.company && { company: billingAddress.company }),\n                    first_name: billingAddress.firstName,\n                    last_name: billingAddress.lastName,\n                    ...(billingAddress.phone && { phone: billingAddress.phone }),\n                    ...(billingAddress.stateOrProvinceCode && {\n                        state_or_province_code: billingAddress.stateOrProvinceCode,\n                    }),\n                },\n                provider_id: providerId,\n                default_instrument: defaultInstrument,\n                currency_code: currencyCode,\n            }),\n        };\n\n        await this._requestSender.post<void>(url, options);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/converge/converge-payment-strategy.spec.ts",
    "content": "import { createClient as createPaymentClient } from '@bigcommerce/bigpay-client';\nimport { createAction, createErrorAction } from '@bigcommerce/data-store';\nimport { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\nimport { noop, omit } from 'lodash';\nimport { Observable, of } from 'rxjs';\n\nimport {\n    CheckoutRequestSender,\n    CheckoutStore,\n    CheckoutValidator,\n    createCheckoutStore,\n} from '../../../checkout';\nimport { getCheckoutStoreState } from '../../../checkout/checkouts.mock';\nimport { RequestError } from '../../../common/error/errors';\nimport { getResponse } from '../../../common/http-request/responses.mock';\nimport { HostedFormFactory } from '../../../hosted-form';\nimport {\n    FinalizeOrderAction,\n    OrderActionCreator,\n    OrderActionType,\n    OrderRequestSender,\n    SubmitOrderAction,\n} from '../../../order';\nimport { OrderFinalizationNotRequiredError } from '../../../order/errors';\nimport { getOrderRequestBody } from '../../../order/internal-orders.mock';\nimport { getOrder } from '../../../order/orders.mock';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../../../spam-protection';\nimport PaymentActionCreator from '../../payment-action-creator';\nimport { PaymentActionType, SubmitPaymentAction } from '../../payment-actions';\nimport PaymentRequestSender from '../../payment-request-sender';\nimport PaymentRequestTransformer from '../../payment-request-transformer';\nimport * as paymentStatusTypes from '../../payment-status-types';\nimport { getErrorPaymentResponseBody } from '../../payments.mock';\nimport { CreditCardPaymentStrategy } from '../credit-card';\n\nimport ConvergePaymentStrategy from './converge-payment-strategy';\n\ndescribe('ConvergeaymentStrategy', () => {\n    let finalizeOrderAction: Observable<FinalizeOrderAction>;\n    let formPoster: FormPoster;\n    let hostedFormFactory: HostedFormFactory;\n    let orderActionCreator: OrderActionCreator;\n    let paymentActionCreator: PaymentActionCreator;\n    let store: CheckoutStore;\n    let orderRequestSender: OrderRequestSender;\n    let strategy: ConvergePaymentStrategy;\n    let submitOrderAction: Observable<SubmitOrderAction>;\n    let submitPaymentAction: Observable<SubmitPaymentAction>;\n\n    beforeEach(() => {\n        orderRequestSender = new OrderRequestSender(createRequestSender());\n        orderActionCreator = new OrderActionCreator(\n            orderRequestSender,\n            new CheckoutValidator(new CheckoutRequestSender(createRequestSender())),\n        );\n\n        paymentActionCreator = new PaymentActionCreator(\n            new PaymentRequestSender(createPaymentClient()),\n            orderActionCreator,\n            new PaymentRequestTransformer(),\n            new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n        );\n\n        formPoster = createFormPoster();\n        store = createCheckoutStore(getCheckoutStoreState());\n        hostedFormFactory = {} as HostedFormFactory;\n\n        finalizeOrderAction = of(createAction(OrderActionType.FinalizeOrderRequested));\n        submitOrderAction = of(createAction(OrderActionType.SubmitOrderRequested));\n        submitPaymentAction = of(createAction(PaymentActionType.SubmitPaymentRequested));\n\n        jest.spyOn(store, 'dispatch');\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation((_url, _data, callback = noop) =>\n            callback(),\n        );\n\n        jest.spyOn(orderActionCreator, 'finalizeOrder').mockReturnValue(finalizeOrderAction);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(orderActionCreator, 'submitOrder').mockReturnValue(submitOrderAction);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(paymentActionCreator, 'submitPayment').mockReturnValue(submitPaymentAction);\n\n        strategy = new ConvergePaymentStrategy(\n            store,\n            orderActionCreator,\n            paymentActionCreator,\n            hostedFormFactory,\n            formPoster,\n        );\n    });\n\n    it('submits order without payment data', async () => {\n        const payload = getOrderRequestBody();\n        const options = { methodId: 'converge' };\n\n        await strategy.execute(payload, options);\n\n        expect(orderActionCreator.submitOrder).toHaveBeenCalledWith(\n            omit(payload, 'payment'),\n            options,\n        );\n        expect(store.dispatch).toHaveBeenCalledWith(submitOrderAction);\n    });\n\n    it('submits payment separately', async () => {\n        const payload = getOrderRequestBody();\n        const options = { methodId: 'converge' };\n\n        await strategy.execute(payload, options);\n\n        expect(paymentActionCreator.submitPayment).toHaveBeenCalledWith(payload.payment);\n        expect(store.dispatch).toHaveBeenCalledWith(submitPaymentAction);\n    });\n\n    it('returns checkout state', async () => {\n        const output = await strategy.execute(getOrderRequestBody());\n\n        expect(output).toEqual(store.getState());\n    });\n\n    it('posts 3ds data to Converge if 3ds is enabled', async () => {\n        const error = new RequestError(\n            getResponse({\n                ...getErrorPaymentResponseBody(),\n                errors: [{ code: 'three_d_secure_required' }],\n                three_ds_result: {\n                    acs_url: 'https://acs/url',\n                    callback_url: 'https://callback/url',\n                    payer_auth_request: 'payer_auth_request',\n                    merchant_data: 'merchant_data',\n                },\n                status: 'error',\n            }),\n        );\n\n        jest.spyOn(paymentActionCreator, 'submitPayment').mockReturnValue(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            of(createErrorAction(PaymentActionType.SubmitPaymentFailed, error)),\n        );\n\n        strategy.execute(getOrderRequestBody());\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(formPoster.postForm).toHaveBeenCalledWith('https://acs/url', {\n            PaReq: 'payer_auth_request',\n            TermUrl: 'https://callback/url',\n            MD: 'merchant_data',\n        });\n    });\n\n    it('does not post 3ds data to Converge if 3ds is not enabled', async () => {\n        const response = new RequestError(getResponse(getErrorPaymentResponseBody()));\n\n        jest.spyOn(paymentActionCreator, 'submitPayment').mockReturnValue(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            of(createErrorAction(PaymentActionType.SubmitPaymentFailed, response)),\n        );\n\n        try {\n            await strategy.execute(getOrderRequestBody());\n        } catch (error) {\n            expect(error).toBeInstanceOf(RequestError);\n            expect(formPoster.postForm).not.toHaveBeenCalled();\n        }\n    });\n\n    it('finalizes order if order is created and payment is finalized', async () => {\n        const state = store.getState();\n\n        jest.spyOn(state.order, 'getOrder').mockReturnValue(getOrder());\n\n        jest.spyOn(state.payment, 'getPaymentStatus').mockReturnValue(paymentStatusTypes.FINALIZE);\n\n        await strategy.finalize();\n\n        expect(orderActionCreator.finalizeOrder).toHaveBeenCalled();\n        expect(store.dispatch).toHaveBeenCalledWith(finalizeOrderAction);\n    });\n\n    it('does not finalize order if order is not created', async () => {\n        const state = store.getState();\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(state.order, 'getOrder').mockReturnValue(null);\n\n        try {\n            await strategy.finalize();\n        } catch (error) {\n            expect(orderActionCreator.finalizeOrder).not.toHaveBeenCalled();\n            expect(store.dispatch).not.toHaveBeenCalledWith(finalizeOrderAction);\n            expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n        }\n    });\n\n    it('does not finalize order if order is not finalized', async () => {\n        const state = store.getState();\n\n        jest.spyOn(state.payment, 'getPaymentStatus').mockReturnValue(\n            paymentStatusTypes.INITIALIZE,\n        );\n\n        try {\n            await strategy.finalize();\n        } catch (error) {\n            expect(orderActionCreator.finalizeOrder).not.toHaveBeenCalled();\n            expect(store.dispatch).not.toHaveBeenCalledWith(finalizeOrderAction);\n            expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n        }\n    });\n\n    it('throws error if order is missing', async () => {\n        const state = store.getState();\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(state.order, 'getOrder').mockReturnValue(null);\n\n        try {\n            await strategy.finalize();\n        } catch (error) {\n            expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n        }\n    });\n\n    it('is special type of credit card strategy', () => {\n        expect(strategy).toBeInstanceOf(CreditCardPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/converge/converge-payment-strategy.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { some } from 'lodash';\n\nimport { CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport { RequestError } from '../../../common/error/errors';\nimport { HostedFormFactory } from '../../../hosted-form';\nimport { OrderActionCreator, OrderRequestBody } from '../../../order';\nimport { OrderFinalizationNotRequiredError } from '../../../order/errors';\nimport PaymentActionCreator from '../../payment-action-creator';\nimport { PaymentRequestOptions } from '../../payment-request-options';\nimport * as paymentStatusTypes from '../../payment-status-types';\nimport { CreditCardPaymentStrategy } from '../credit-card';\n\nexport default class ConvergePaymentStrategy extends CreditCardPaymentStrategy {\n    constructor(\n        store: CheckoutStore,\n        orderActionCreator: OrderActionCreator,\n        paymentActionCreator: PaymentActionCreator,\n        hostedFormFactory: HostedFormFactory,\n        private _formPoster: FormPoster,\n    ) {\n        super(store, orderActionCreator, paymentActionCreator, hostedFormFactory);\n    }\n\n    execute(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return super.execute(payload, options).catch((error) => {\n            if (\n                !(error instanceof RequestError) ||\n                !some(error.body.errors, { code: 'three_d_secure_required' })\n            ) {\n                return Promise.reject(error);\n            }\n\n            return new Promise(() => {\n                this._formPoster.postForm(error.body.three_ds_result.acs_url, {\n                    PaReq: error.body.three_ds_result.payer_auth_request,\n                    TermUrl: error.body.three_ds_result.callback_url,\n                    MD: error.body.three_ds_result.merchant_data,\n                });\n            });\n        });\n    }\n\n    finalize(options?: PaymentRequestOptions): Promise<InternalCheckoutSelectors> {\n        const state = this._store.getState();\n        const order = state.order.getOrder();\n\n        if (order && state.payment.getPaymentStatus() === paymentStatusTypes.FINALIZE) {\n            return this._store.dispatch(\n                this._orderActionCreator.finalizeOrder(order.orderId, options),\n            );\n        }\n\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/converge/index.ts",
    "content": "export { default as ConvergePaymentStrategy } from './converge-payment-strategy';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/credit-card/credit-card-payment-strategy.spec.ts",
    "content": "import { createClient as createPaymentClient } from '@bigcommerce/bigpay-client';\nimport { Action, createAction } from '@bigcommerce/data-store';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\nimport { merge, omit } from 'lodash';\nimport { Observable, of } from 'rxjs';\n\nimport {\n    CheckoutRequestSender,\n    CheckoutStore,\n    CheckoutValidator,\n    createCheckoutStore,\n    InternalCheckoutSelectors,\n} from '../../../checkout';\nimport { getCheckoutStoreState } from '../../../checkout/checkouts.mock';\nimport { HostedFieldType, HostedForm, HostedFormFactory } from '../../../hosted-form';\nimport {\n    LoadOrderSucceededAction,\n    OrderActionCreator,\n    OrderActionType,\n    OrderRequestSender,\n} from '../../../order';\nimport { OrderFinalizationNotRequiredError } from '../../../order/errors';\nimport { getOrderRequestBody } from '../../../order/internal-orders.mock';\nimport { getOrder } from '../../../order/orders.mock';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../../../spam-protection';\nimport PaymentActionCreator from '../../payment-action-creator';\nimport { PaymentActionType } from '../../payment-actions';\nimport { getPaymentMethod } from '../../payment-methods.mock';\nimport { PaymentInitializeOptions } from '../../payment-request-options';\nimport PaymentRequestSender from '../../payment-request-sender';\nimport PaymentRequestTransformer from '../../payment-request-transformer';\n\nimport CreditCardPaymentStrategy from './credit-card-payment-strategy';\n\ndescribe('CreditCardPaymentStrategy', () => {\n    let formFactory: HostedFormFactory;\n    let orderActionCreator: OrderActionCreator;\n    let paymentActionCreator: PaymentActionCreator;\n    let store: CheckoutStore;\n    let strategy: CreditCardPaymentStrategy;\n    let submitOrderAction: Observable<Action>;\n    let submitPaymentAction: Observable<Action>;\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreState());\n\n        paymentActionCreator = new PaymentActionCreator(\n            new PaymentRequestSender(createPaymentClient()),\n            orderActionCreator,\n            new PaymentRequestTransformer(),\n            new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n        );\n\n        submitOrderAction = of(createAction(OrderActionType.SubmitOrderRequested));\n        submitPaymentAction = of(createAction(PaymentActionType.SubmitPaymentRequested));\n\n        orderActionCreator = new OrderActionCreator(\n            new OrderRequestSender(createRequestSender()),\n            new CheckoutValidator(new CheckoutRequestSender(createRequestSender())),\n        );\n\n        formFactory = new HostedFormFactory(store);\n\n        strategy = new CreditCardPaymentStrategy(\n            store,\n            orderActionCreator,\n            paymentActionCreator,\n            formFactory,\n        );\n\n        jest.spyOn(store, 'dispatch');\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(orderActionCreator, 'submitOrder').mockReturnValue(submitOrderAction);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(paymentActionCreator, 'submitPayment').mockReturnValue(submitPaymentAction);\n    });\n\n    it('submits order without payment data', async () => {\n        const payload = getOrderRequestBody();\n\n        await strategy.execute(payload);\n\n        expect(orderActionCreator.submitOrder).toHaveBeenCalledWith(\n            omit(payload, 'payment'),\n            undefined,\n        );\n        expect(store.dispatch).toHaveBeenCalledWith(submitOrderAction);\n    });\n\n    it('submits payment separately', async () => {\n        const payload = getOrderRequestBody();\n\n        await strategy.execute(payload);\n\n        expect(paymentActionCreator.submitPayment).toHaveBeenCalledWith(payload.payment);\n        expect(store.dispatch).toHaveBeenCalledWith(submitPaymentAction);\n    });\n\n    it('returns checkout state', async () => {\n        const output = await strategy.execute(getOrderRequestBody());\n\n        expect(output).toEqual(store.getState());\n    });\n\n    it('throws error to inform that order finalization is not required', async () => {\n        try {\n            await strategy.finalize();\n        } catch (error) {\n            expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n        }\n    });\n\n    describe('when hosted form is enabled', () => {\n        let form: Pick<HostedForm, 'attach' | 'submit' | 'validate'>;\n        let initializeOptions: PaymentInitializeOptions;\n        let loadOrderAction: Observable<LoadOrderSucceededAction>;\n        let state: InternalCheckoutSelectors;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                submit: jest.fn(() => Promise.resolve()),\n                validate: jest.fn(() => Promise.resolve()),\n            };\n            initializeOptions = {\n                creditCard: {\n                    form: {\n                        fields: {\n                            [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                            [HostedFieldType.CardName]: { containerId: 'card-name' },\n                            [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                        },\n                    },\n                },\n                methodId: 'authorizenet',\n            };\n            loadOrderAction = of(createAction(OrderActionType.LoadOrderSucceeded, getOrder()));\n            state = store.getState();\n\n            jest.spyOn(state.paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n                merge(getPaymentMethod(), { config: { isHostedFormEnabled: true } }),\n            );\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(orderActionCreator, 'loadCurrentOrder').mockReturnValue(loadOrderAction);\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(formFactory, 'create').mockReturnValue(form);\n        });\n\n        it('creates hosted form', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(formFactory.create).toHaveBeenCalledWith(\n                'https://bigpay.integration.zone',\n                // tslint:disable-next-line:no-non-null-assertion\n                initializeOptions.creditCard!.form,\n            );\n        });\n\n        it('attaches hosted form to container', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(form.attach).toHaveBeenCalled();\n        });\n\n        it('submits payment data with hosted form', async () => {\n            const payload = getOrderRequestBody();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.submit).toHaveBeenCalledWith(payload.payment);\n        });\n\n        it('validates user input before submitting data', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(getOrderRequestBody());\n\n            expect(form.validate).toHaveBeenCalled();\n        });\n\n        it('does not submit payment data with hosted form if validation fails', async () => {\n            jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n            try {\n                await strategy.initialize(initializeOptions);\n                await strategy.execute(getOrderRequestBody());\n            } catch (error) {\n                expect(form.submit).not.toHaveBeenCalled();\n            }\n        });\n\n        it('loads current order after payment submission', async () => {\n            const payload = getOrderRequestBody();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(store.dispatch).toHaveBeenCalledWith(loadOrderAction);\n        });\n    });\n\n    describe('when hosted form is enabled but hosted fields are not present for rendering', () => {\n        let form: Pick<HostedForm, 'attach' | 'submit' | 'validate'>;\n        let initializeOptions: PaymentInitializeOptions;\n        let loadOrderAction: Observable<LoadOrderSucceededAction>;\n        let state: InternalCheckoutSelectors;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                submit: jest.fn(() => Promise.resolve()),\n                validate: jest.fn(() => Promise.resolve()),\n            };\n            initializeOptions = {\n                creditCard: {\n                    form: {\n                        fields: {},\n                    },\n                },\n                methodId: 'authorizenet',\n            };\n            loadOrderAction = of(createAction(OrderActionType.LoadOrderSucceeded, getOrder()));\n            state = store.getState();\n\n            jest.spyOn(state.paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n                merge(getPaymentMethod(), { config: { isHostedFormEnabled: true } }),\n            );\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(orderActionCreator, 'loadCurrentOrder').mockReturnValue(loadOrderAction);\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(formFactory, 'create').mockReturnValue(form);\n        });\n\n        it('does not create hosted form', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(formFactory.create).not.toHaveBeenCalled();\n        });\n\n        it('does not submit with hosted form', async () => {\n            const payload = getOrderRequestBody();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.submit).not.toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/credit-card/credit-card-payment-strategy.ts",
    "content": "import { isNil, values } from 'lodash';\n\nimport { CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport {\n    InvalidArgumentError,\n    NotInitializedError,\n    NotInitializedErrorType,\n} from '../../../common/error/errors';\nimport { HostedForm, HostedFormFactory } from '../../../hosted-form';\nimport { OrderActionCreator, OrderRequestBody } from '../../../order';\nimport { OrderFinalizationNotRequiredError } from '../../../order/errors';\nimport { PaymentArgumentInvalidError } from '../../errors';\nimport PaymentActionCreator from '../../payment-action-creator';\nimport { PaymentInitializeOptions, PaymentRequestOptions } from '../../payment-request-options';\nimport PaymentStrategy from '../payment-strategy';\n\nexport default class CreditCardPaymentStrategy implements PaymentStrategy {\n    protected _hostedForm?: HostedForm;\n    protected _shouldRenderHostedForm?: boolean;\n\n    constructor(\n        protected _store: CheckoutStore,\n        protected _orderActionCreator: OrderActionCreator,\n        protected _paymentActionCreator: PaymentActionCreator,\n        protected _hostedFormFactory: HostedFormFactory,\n    ) {}\n\n    execute(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._isHostedPaymentFormEnabled(\n            payload.payment?.methodId,\n            payload.payment?.gatewayId,\n        ) && this._shouldRenderHostedForm\n            ? this._executeWithHostedForm(payload, options)\n            : this._executeWithoutHostedForm(payload, options);\n    }\n\n    finalize(_options?: PaymentRequestOptions): Promise<InternalCheckoutSelectors> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    initialize(options?: PaymentInitializeOptions): Promise<InternalCheckoutSelectors> {\n        if (\n            !this._isHostedPaymentFormEnabled(options?.methodId, options?.gatewayId) ||\n            !this._isHostedFieldAvailable(options)\n        ) {\n            this._shouldRenderHostedForm = false;\n\n            return Promise.resolve(this._store.getState());\n        }\n\n        const formOptions = options && options.creditCard && options.creditCard.form;\n        const { config } = this._store.getState();\n        const { paymentSettings: { bigpayBaseUrl: host = '' } = {} } =\n            config.getStoreConfig() || {};\n\n        if (!formOptions) {\n            throw new InvalidArgumentError();\n        }\n\n        const form = this._hostedFormFactory.create(host, formOptions);\n\n        return form.attach().then(() => {\n            this._shouldRenderHostedForm = true;\n            this._hostedForm = form;\n\n            return this._store.getState();\n        });\n    }\n\n    deinitialize(_options?: PaymentRequestOptions): Promise<InternalCheckoutSelectors> {\n        if (this._hostedForm) {\n            this._hostedForm.detach();\n        }\n\n        return Promise.resolve(this._store.getState());\n    }\n\n    protected _executeWithoutHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        const { payment, ...order } = payload;\n        const paymentData = payment && payment.paymentData;\n\n        if (!payment || !paymentData) {\n            throw new PaymentArgumentInvalidError(['payment.paymentData']);\n        }\n\n        return this._store\n            .dispatch(this._orderActionCreator.submitOrder(order, options))\n            .then(() =>\n                this._store.dispatch(\n                    this._paymentActionCreator.submitPayment({ ...payment, paymentData }),\n                ),\n            );\n    }\n\n    protected _executeWithHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        const { payment, ...order } = payload;\n        const form = this._hostedForm;\n\n        if (!form) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        if (!payment || !payment.methodId) {\n            throw new PaymentArgumentInvalidError(['payment.methodId']);\n        }\n\n        return form\n            .validate()\n            .then(() => this._store.dispatch(this._orderActionCreator.submitOrder(order, options)))\n            .then(() => form.submit(payment))\n            .then(() => this._store.dispatch(this._orderActionCreator.loadCurrentOrder()));\n    }\n\n    protected _isHostedPaymentFormEnabled(methodId?: string, gatewayId?: string): boolean {\n        if (!methodId) {\n            return false;\n        }\n\n        const {\n            paymentMethods: { getPaymentMethodOrThrow },\n        } = this._store.getState();\n        const paymentMethod = getPaymentMethodOrThrow(methodId, gatewayId);\n\n        return paymentMethod.config.isHostedFormEnabled === true;\n    }\n\n    private _isHostedFieldAvailable(options?: PaymentInitializeOptions): boolean {\n        return !values(options && options.creditCard && options.creditCard.form.fields).every(\n            isNil,\n        );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/credit-card/index.ts",
    "content": "export { default as CreditCardPaymentStrategy } from './credit-card-payment-strategy';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/credit-card-redirect/credit-card-redirect-payment-strategy.spec.ts",
    "content": "import { createClient as createPaymentClient } from '@bigcommerce/bigpay-client';\nimport { createAction, createErrorAction } from '@bigcommerce/data-store';\nimport { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\nimport { merge, noop, omit } from 'lodash';\nimport { Observable, of } from 'rxjs';\n\nimport {\n    CheckoutRequestSender,\n    CheckoutStore,\n    CheckoutValidator,\n    createCheckoutStore,\n    InternalCheckoutSelectors,\n} from '../../../checkout';\nimport { getCheckoutStoreState } from '../../../checkout/checkouts.mock';\nimport { RequestError } from '../../../common/error/errors';\nimport { getResponse } from '../../../common/http-request/responses.mock';\nimport { HostedFieldType, HostedForm, HostedFormFactory } from '../../../hosted-form';\nimport {\n    FinalizeOrderAction,\n    LoadOrderSucceededAction,\n    OrderActionCreator,\n    OrderActionType,\n    OrderRequestSender,\n    SubmitOrderAction,\n} from '../../../order';\nimport { OrderFinalizationNotRequiredError } from '../../../order/errors';\nimport { getOrderRequestBody } from '../../../order/internal-orders.mock';\nimport { getOrder } from '../../../order/orders.mock';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../../../spam-protection';\nimport PaymentActionCreator from '../../payment-action-creator';\nimport { PaymentActionType, SubmitPaymentAction } from '../../payment-actions';\nimport { getPaymentMethod } from '../../payment-methods.mock';\nimport { PaymentInitializeOptions } from '../../payment-request-options';\nimport PaymentRequestSender from '../../payment-request-sender';\nimport PaymentRequestTransformer from '../../payment-request-transformer';\nimport * as paymentStatusTypes from '../../payment-status-types';\nimport { getErrorPaymentResponseBody } from '../../payments.mock';\n\nimport CreditCardRedirectPaymentStrategy from './credit-card-redirect-payment-strategy';\n\ndescribe('CreditCardRedirectPaymentStrategy', () => {\n    let formFactory: HostedFormFactory;\n    let finalizeOrderAction: Observable<FinalizeOrderAction>;\n    let formPoster: FormPoster;\n    let orderActionCreator: OrderActionCreator;\n    let paymentActionCreator: PaymentActionCreator;\n    let requestSender: RequestSender;\n    let store: CheckoutStore;\n    let orderRequestSender: OrderRequestSender;\n    let strategy: CreditCardRedirectPaymentStrategy;\n    let submitOrderAction: Observable<SubmitOrderAction>;\n    let submitPaymentAction: Observable<SubmitPaymentAction>;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        orderRequestSender = new OrderRequestSender(requestSender);\n        orderActionCreator = new OrderActionCreator(\n            orderRequestSender,\n            new CheckoutValidator(new CheckoutRequestSender(requestSender)),\n        );\n\n        paymentActionCreator = new PaymentActionCreator(\n            new PaymentRequestSender(createPaymentClient()),\n            orderActionCreator,\n            new PaymentRequestTransformer(),\n            new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n        );\n\n        formPoster = createFormPoster();\n        formFactory = new HostedFormFactory(store);\n        store = createCheckoutStore(getCheckoutStoreState());\n\n        finalizeOrderAction = of(createAction(OrderActionType.FinalizeOrderRequested));\n        submitOrderAction = of(createAction(OrderActionType.SubmitOrderRequested));\n        submitPaymentAction = of(createAction(PaymentActionType.SubmitPaymentRequested));\n\n        jest.spyOn(store, 'dispatch');\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation((_url, _data, callback = noop) =>\n            callback(),\n        );\n\n        jest.spyOn(orderActionCreator, 'finalizeOrder').mockReturnValue(finalizeOrderAction);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(orderActionCreator, 'submitOrder').mockReturnValue(submitOrderAction);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(paymentActionCreator, 'submitPayment').mockReturnValue(submitPaymentAction);\n\n        strategy = new CreditCardRedirectPaymentStrategy(\n            store,\n            orderActionCreator,\n            paymentActionCreator,\n            formFactory,\n            formPoster,\n        );\n    });\n\n    it('submits order without payment data', async () => {\n        const payload = getOrderRequestBody();\n        const options = { methodId: 'methodId' };\n\n        await strategy.execute(payload, options);\n\n        expect(orderActionCreator.submitOrder).toHaveBeenCalledWith(\n            omit(payload, 'payment'),\n            options,\n        );\n        expect(store.dispatch).toHaveBeenCalledWith(submitOrderAction);\n    });\n\n    it('submits payment separately', async () => {\n        const payload = getOrderRequestBody();\n        const options = { methodId: 'methodId' };\n\n        await strategy.execute(payload, options);\n\n        expect(paymentActionCreator.submitPayment).toHaveBeenCalledWith(payload.payment);\n        expect(store.dispatch).toHaveBeenCalledWith(submitPaymentAction);\n    });\n\n    it('returns checkout state', async () => {\n        const output = await strategy.execute(getOrderRequestBody());\n\n        expect(output).toEqual(store.getState());\n    });\n\n    it('posts 3ds data to the provided acs_url if 3ds is enabled', async () => {\n        const error = new RequestError(\n            getResponse({\n                ...getErrorPaymentResponseBody(),\n                errors: [{ code: 'three_d_secure_required' }],\n                three_ds_result: {\n                    acs_url: 'https://acs/url',\n                    callback_url: 'https://callback/url',\n                    payer_auth_request: 'payer_auth_request',\n                    merchant_data: 'merchant_data',\n                },\n                status: 'error',\n            }),\n        );\n\n        jest.spyOn(paymentActionCreator, 'submitPayment').mockReturnValue(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            of(createErrorAction(PaymentActionType.SubmitPaymentFailed, error)),\n        );\n\n        strategy.execute(getOrderRequestBody());\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(formPoster.postForm).toHaveBeenCalledWith('https://acs/url', {\n            PaReq: 'payer_auth_request',\n            TermUrl: 'https://callback/url',\n            MD: 'merchant_data',\n        });\n    });\n\n    it('does not post 3ds data to the provided acs_url if 3ds is not enabled', async () => {\n        const response = new RequestError(getResponse(getErrorPaymentResponseBody()));\n\n        jest.spyOn(paymentActionCreator, 'submitPayment').mockReturnValue(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            of(createErrorAction(PaymentActionType.SubmitPaymentFailed, response)),\n        );\n\n        await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(RequestError);\n        expect(formPoster.postForm).not.toHaveBeenCalled();\n    });\n\n    it('finalizes order if order is created and payment is finalized', async () => {\n        const state = store.getState();\n\n        jest.spyOn(state.order, 'getOrder').mockReturnValue(getOrder());\n\n        jest.spyOn(state.payment, 'getPaymentStatus').mockReturnValue(paymentStatusTypes.FINALIZE);\n\n        await strategy.finalize();\n\n        expect(orderActionCreator.finalizeOrder).toHaveBeenCalled();\n        expect(store.dispatch).toHaveBeenCalledWith(finalizeOrderAction);\n    });\n\n    it('does not finalize order if order is not created', async () => {\n        const state = store.getState();\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(state.order, 'getOrder').mockReturnValue(null);\n\n        await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        expect(orderActionCreator.finalizeOrder).not.toHaveBeenCalled();\n        expect(store.dispatch).not.toHaveBeenCalledWith(finalizeOrderAction);\n    });\n\n    it('does not finalize order if order is not finalized', async () => {\n        const state = store.getState();\n\n        jest.spyOn(state.payment, 'getPaymentStatus').mockReturnValue(\n            paymentStatusTypes.INITIALIZE,\n        );\n\n        await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        expect(orderActionCreator.finalizeOrder).not.toHaveBeenCalled();\n        expect(store.dispatch).not.toHaveBeenCalledWith(finalizeOrderAction);\n    });\n\n    it('throws error if order is missing', async () => {\n        const state = store.getState();\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(state.order, 'getOrder').mockReturnValue(null);\n\n        await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n    });\n\n    describe('when hosted form is enabled', () => {\n        let form: Pick<HostedForm, 'attach' | 'submit' | 'validate'>;\n        let initializeOptions: PaymentInitializeOptions;\n        let loadOrderAction: Observable<LoadOrderSucceededAction>;\n        let state: InternalCheckoutSelectors;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                submit: jest.fn(() => Promise.resolve()),\n                validate: jest.fn(() => Promise.resolve()),\n            };\n            initializeOptions = {\n                creditCard: {\n                    form: {\n                        fields: {\n                            [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                            [HostedFieldType.CardName]: { containerId: 'card-name' },\n                            [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                        },\n                    },\n                },\n                methodId: 'checkoutcom',\n            };\n            loadOrderAction = of(createAction(OrderActionType.LoadOrderSucceeded, getOrder()));\n            state = store.getState();\n\n            jest.spyOn(state.paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n                merge(getPaymentMethod(), { config: { isHostedFormEnabled: true } }),\n            );\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(orderActionCreator, 'loadCurrentOrder').mockReturnValue(loadOrderAction);\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(formFactory, 'create').mockReturnValue(form);\n        });\n\n        it('creates hosted form', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(formFactory.create).toHaveBeenCalledWith(\n                'https://bigpay.integration.zone',\n                // tslint:disable-next-line:no-non-null-assertion\n                initializeOptions.creditCard!.form,\n            );\n        });\n\n        it('attaches hosted form to container', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(form.attach).toHaveBeenCalled();\n        });\n\n        it('submits payment data with hosted form', async () => {\n            const payload = getOrderRequestBody();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.submit).toHaveBeenCalledWith(payload.payment);\n        });\n\n        it('validates user input before submitting data', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(getOrderRequestBody());\n\n            expect(form.validate).toHaveBeenCalled();\n        });\n\n        it('does not submit payment data with hosted form if validation fails', async () => {\n            jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n            try {\n                await strategy.initialize(initializeOptions);\n                await strategy.execute(getOrderRequestBody());\n            } catch (error) {\n                expect(form.submit).not.toHaveBeenCalled();\n            }\n        });\n\n        it('loads current order after payment submission', async () => {\n            const payload = getOrderRequestBody();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(store.dispatch).toHaveBeenCalledWith(loadOrderAction);\n        });\n\n        it('posts 3ds data to the provided acs_url if 3ds is enabled', async () => {\n            const error = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [{ code: 'three_d_secure_required' }],\n                    three_ds_result: {\n                        acs_url: 'https://acs/url',\n                        callback_url: 'https://callback/url',\n                        payer_auth_request: 'payer_auth_request',\n                        merchant_data: 'merchant_data',\n                    },\n                    status: 'error',\n                }),\n            );\n\n            jest.spyOn(form, 'submit').mockRejectedValue(error);\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(getOrderRequestBody());\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(formPoster.postForm).toHaveBeenCalledWith('https://acs/url', {\n                PaReq: 'payer_auth_request',\n                TermUrl: 'https://callback/url',\n                MD: 'merchant_data',\n            });\n            expect(orderActionCreator.loadCurrentOrder).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/credit-card-redirect/credit-card-redirect-payment-strategy.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { some } from 'lodash';\n\nimport { CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport {\n    NotInitializedError,\n    NotInitializedErrorType,\n    RequestError,\n} from '../../../common/error/errors';\nimport { HostedFormFactory } from '../../../hosted-form';\nimport { OrderActionCreator, OrderRequestBody } from '../../../order';\nimport { OrderFinalizationNotRequiredError } from '../../../order/errors';\nimport { PaymentArgumentInvalidError } from '../../errors';\nimport PaymentActionCreator from '../../payment-action-creator';\nimport { PaymentRequestOptions } from '../../payment-request-options';\nimport * as paymentStatusTypes from '../../payment-status-types';\nimport { CreditCardPaymentStrategy } from '../credit-card';\n\nexport default class CreditCardRedirectPaymentStrategy extends CreditCardPaymentStrategy {\n    constructor(\n        protected _store: CheckoutStore,\n        protected _orderActionCreator: OrderActionCreator,\n        protected _paymentActionCreator: PaymentActionCreator,\n        protected _hostedFormFactory: HostedFormFactory,\n        protected _formPoster: FormPoster,\n    ) {\n        super(_store, _orderActionCreator, _paymentActionCreator, _hostedFormFactory);\n    }\n\n    finalize(options?: PaymentRequestOptions): Promise<InternalCheckoutSelectors> {\n        const state = this._store.getState();\n        const order = state.order.getOrder();\n\n        if (order && state.payment.getPaymentStatus() === paymentStatusTypes.FINALIZE) {\n            return this._store.dispatch(\n                this._orderActionCreator.finalizeOrder(order.orderId, options),\n            );\n        }\n\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    protected async _executeWithoutHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        const { payment, ...order } = payload;\n        const paymentData = payment && payment.paymentData;\n\n        if (!payment || !paymentData) {\n            throw new PaymentArgumentInvalidError(['payment.paymentData']);\n        }\n\n        await this._store.dispatch(this._orderActionCreator.submitOrder(order, options));\n\n        try {\n            return await this._store.dispatch(\n                this._paymentActionCreator.submitPayment({ ...payment, paymentData }),\n            );\n        } catch (error) {\n            if (\n                !(error instanceof RequestError) ||\n                !some(error.body.errors, { code: 'three_d_secure_required' })\n            ) {\n                return Promise.reject(error);\n            }\n\n            this._formPoster.postForm(error.body.three_ds_result.acs_url, {\n                PaReq: error.body.three_ds_result.payer_auth_request || null,\n                TermUrl: error.body.three_ds_result.callback_url || null,\n                MD: error.body.three_ds_result.merchant_data || null,\n            });\n        }\n\n        return this._store.dispatch(this._orderActionCreator.loadCurrentOrder());\n    }\n\n    protected async _executeWithHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        const { payment, ...order } = payload;\n        const form = this._hostedForm;\n\n        if (!form) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        if (!payment || !payment.methodId) {\n            throw new PaymentArgumentInvalidError(['payment.methodId']);\n        }\n\n        try {\n            await form.validate();\n            await this._store.dispatch(this._orderActionCreator.submitOrder(order, options));\n            await form.submit(payment);\n        } catch (error) {\n            if (\n                !(error instanceof RequestError) ||\n                !some(error.body.errors, { code: 'three_d_secure_required' })\n            ) {\n                return Promise.reject(error);\n            }\n\n            this._formPoster.postForm(error.body.three_ds_result.acs_url, {\n                PaReq: error.body.three_ds_result.payer_auth_request || null,\n                TermUrl: error.body.three_ds_result.callback_url || null,\n                MD: error.body.three_ds_result.merchant_data || null,\n            });\n        }\n\n        return this._store.dispatch(this._orderActionCreator.loadCurrentOrder());\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/credit-card-redirect/index.ts",
    "content": "export { default as CreditCardRedirectPaymentStrategy } from './credit-card-redirect-payment-strategy';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/index.ts",
    "content": "export { default as PaymentStrategy } from './payment-strategy';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/payment-strategy.ts",
    "content": "import { InternalCheckoutSelectors } from '../../checkout';\nimport { OrderRequestBody } from '../../order';\nimport { PaymentInitializeOptions, PaymentRequestOptions } from '../payment-request-options';\n\nexport default interface PaymentStrategy {\n    execute(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<InternalCheckoutSelectors>;\n\n    finalize(options?: PaymentRequestOptions): Promise<InternalCheckoutSelectors>;\n\n    initialize(options?: PaymentInitializeOptions): Promise<InternalCheckoutSelectors>;\n\n    deinitialize(options?: PaymentRequestOptions): Promise<InternalCheckoutSelectors>;\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/paypal/index.ts",
    "content": "export * from './paypal-sdk';\n\nexport { default as PaypalScriptLoader } from './paypal-script-loader';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/paypal/paypal-script-loader.ts",
    "content": "import { LoadScriptOptions, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '../../errors';\n\nimport { PaypalHostWindow, PaypalSDK } from './paypal-sdk';\n\nexport default class PaypalScriptLoader {\n    private _window: PaypalHostWindow;\n\n    constructor(private _scriptLoader: ScriptLoader) {\n        this._window = window;\n    }\n\n    async loadPaypal(merchantId = ''): Promise<PaypalSDK> {\n        const scriptSrc = '//www.paypalobjects.com/api/checkout.min.js';\n        const options: LoadScriptOptions = {\n            async: true,\n            attributes: { 'data-merchant-id': merchantId },\n        };\n\n        merchantId\n            ? await this._scriptLoader.loadScript(scriptSrc, options)\n            : await this._scriptLoader.loadScript(scriptSrc);\n\n        if (!this._window.paypal) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this._window.paypal;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/paypal/paypal-sdk.ts",
    "content": "export interface PaypalSDK {\n    Button: PaypalButton;\n    checkout: PaypalExpressCheckout;\n    FUNDING: PaypalFundingTypeList;\n    Messages(options: MessagingOptions): MessagingRender;\n    Buttons(options: PaypalButtonOptions): PaypalButtonRender;\n}\n\nexport interface PaypalFundingTypeList {\n    CARD?: string;\n    CREDIT?: string;\n    PAYPAL?: string;\n    PAYLATER?: string;\n}\n\nexport interface PaypalButton {\n    render(options: PaypalButtonOptions, container: string): void;\n}\n\nexport interface PaypalButtonRender {\n    render(container: string): void;\n    isEligible(): boolean;\n}\n\nexport interface MessagingRender {\n    render(container: string): void;\n}\n\nexport interface MessagingOptions {\n    amount: number;\n    placement: string;\n    style?: MessagesStyleOptions;\n}\n\nexport interface MessagesStyleOptions {\n    layout?: 'text' | 'flex';\n    logo?: {\n        type: 'none' | 'inline' | 'primary';\n    };\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<any>;\n    onAuthorize?(data: PaypalAuthorizeData, actions?: PaypalActions): Promise<any>;\n    createOrder?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<any>;\n    onApprove?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<any>;\n    onClick?(): void;\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 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\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;\n}\n\nexport interface PaypalActions {\n    payment: PaypalPaymentActions;\n    request: PaypalRequestActions;\n}\n\nexport interface PaypalPaymentActions {\n    get(id: string): Promise<PaypalPaymentPayload>;\n}\n\nexport interface PaypalRequestActions {\n    post(url: string, payload?: object, options?: object): Promise<{ id: string }>;\n}\n\nexport interface PaypalTransaction {\n    amount?: PaypalAmount;\n    payee?: PaypalPayee;\n    description?: string;\n    note_to_payee?: string;\n    item_list?: PaypalItemList;\n}\n\nexport interface PaypalItemList {\n    items?: PaypalItem[];\n    shipping_address?: PaypalAddress;\n}\n\nexport interface PaypalItem {\n    sku?: string;\n    name?: string;\n    description?: string;\n    quantity: string;\n    price: string;\n    currency: string;\n    tax?: string;\n}\n\nexport interface PaypalAmount {\n    currency: string;\n    total: string;\n}\n\nexport interface PaypalPayer {\n    payer_info: object;\n}\n\nexport interface PaypalPayee {\n    email?: string;\n    merchant_id?: string;\n}\n\nexport interface PaypalAddress {\n    line1: string;\n    line2?: string;\n    city?: string;\n    country_code: string;\n    postal_code?: string;\n    state?: string;\n    phone?: string;\n    type?: string;\n}\n\nexport interface PaypalPaymentPayload {\n    payment: PaypalPaymentPayload;\n    payer: PaypalPayer;\n    transactions?: PaypalTransaction[];\n}\n\nexport interface PaypalAuthorizeData {\n    payerId: string;\n    paymentId?: string;\n    billingToken?: string;\n    // the PayPal side of things uses uppercase ID instead of camel case Id\n    payerID?: string;\n    paymentID?: string;\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 PaypalHostWindow extends Window {\n    paypal?: PaypalSDK;\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/create-ppsdk-sub-strategy-registry.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport { CheckoutStore } from '../../../checkout';\nimport { HostedFormFactory } from '../../../hosted-form';\nimport { OrderActionCreator } from '../../../order';\n\nimport { SubStrategyRegistry } from './ppsdk-sub-strategy-registry';\nimport { SubStrategyType } from './ppsdk-sub-strategy-type';\nimport { StepHandler } from './step-handler';\nimport { CardSubStrategy, NoneSubStrategy } from './sub-strategies';\n\nexport const createSubStrategyRegistry = (\n    store: CheckoutStore,\n    orderActionCreator: OrderActionCreator,\n    requestSender: RequestSender,\n    stepHandler: StepHandler,\n    hostedFormFactory: HostedFormFactory,\n) => {\n    const registry = new SubStrategyRegistry();\n\n    registry.register(\n        SubStrategyType.CARD,\n        () => new CardSubStrategy(store, orderActionCreator, hostedFormFactory, stepHandler),\n    );\n\n    registry.register(SubStrategyType.NONE, () => new NoneSubStrategy(requestSender, stepHandler));\n\n    registry.register(SubStrategyType.UNSUPPORTED, () => undefined);\n\n    return registry;\n};\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/get-ppsdk-payment-method.ts",
    "content": "import { CheckoutStore } from '../../../checkout';\nimport { isPPSDKPaymentMethod, PPSDKPaymentMethod } from '../../ppsdk-payment-method';\n\ntype GetPPSDKMethod = (store: CheckoutStore, methodId: string) => PPSDKPaymentMethod | undefined;\n\nexport const getPPSDKMethod: GetPPSDKMethod = (store, methodId) => {\n    const paymentMethod = store.getState().paymentMethods.getPaymentMethod(methodId);\n\n    if (!paymentMethod || !isPPSDKPaymentMethod(paymentMethod)) {\n        return;\n    }\n\n    return paymentMethod;\n};\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/index.ts",
    "content": "export { PPSDKStrategy } from './ppsdk-strategy';\nexport { createSubStrategyRegistry } from './create-ppsdk-sub-strategy-registry';\nexport { createStepHandler } from './step-handler';\nexport { PaymentResumer } from './ppsdk-payment-resumer';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/initialization-strategies/card.ts",
    "content": "import { InitializationStrategy } from '../../../';\n\ninterface Card {\n    type: 'card_ui';\n}\n\nexport const isCard = (strategy: Pick<InitializationStrategy, 'type'>): strategy is Card =>\n    strategy.type === 'card_ui';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/initialization-strategies/index.ts",
    "content": "export { isCard } from './card';\nexport { isNone } from './none';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/initialization-strategies/none.ts",
    "content": "import { InitializationStrategy } from '../../../';\n\ninterface None {\n    type: 'none';\n}\n\nexport const isNone = (strategy: Pick<InitializationStrategy, 'type'>): strategy is None =>\n    strategy.type === 'none';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/ppsdk-completed-payments.spec.ts",
    "content": "import { BrowserStorage } from '../../../common/storage';\n\nimport { PPSDKCompletedPayments } from './ppsdk-completed-payments';\n\nit('returns true for a matching paymentId', () => {\n    const completedPayments = new PPSDKCompletedPayments(new BrowserStorage('ppsdk'));\n\n    completedPayments.setCompleted('123');\n\n    expect(completedPayments.isCompleted('123')).toBe(true);\n});\n\nit('returns false for a non-matching paymentId', () => {\n    const completedPayments = new PPSDKCompletedPayments(new BrowserStorage('ppsdk'));\n\n    completedPayments.setCompleted('123');\n\n    expect(completedPayments.isCompleted('456')).toBe(false);\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/ppsdk-completed-payments.ts",
    "content": "import { BrowserStorage } from '../../../common/storage';\n\ntype CompletedPayments = string[];\n\nconst COMPLETED_PAYMENTS_KEY = 'completed-payments';\n\nexport class PPSDKCompletedPayments {\n    constructor(private _browserStorage: BrowserStorage) {}\n\n    isCompleted(paymentId: string): boolean {\n        return this.getCompletedPayments().indexOf(paymentId) >= 0;\n    }\n\n    setCompleted(paymentId: string): void {\n        const completedPayments = this.getCompletedPayments();\n\n        completedPayments.push(paymentId);\n\n        this.setCompletedPayments(completedPayments);\n    }\n\n    private getCompletedPayments(): CompletedPayments {\n        return this._browserStorage.getItem<CompletedPayments>(COMPLETED_PAYMENTS_KEY) || [];\n    }\n\n    private setCompletedPayments(completedPayments: CompletedPayments): void {\n        this._browserStorage.setItem<CompletedPayments>(COMPLETED_PAYMENTS_KEY, completedPayments);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/ppsdk-payment-resumer.spec.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { getErrorResponse } from '../../../common/http-request/responses.mock';\nimport { OrderFinalizationNotRequiredError } from '../../../order/errors';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../../../spam-protection';\n\nimport { PaymentResumer } from './ppsdk-payment-resumer';\nimport { createStepHandler } from './step-handler';\n\ndescribe('PaymentResumer', () => {\n    const requestSender = createRequestSender();\n    const stepHandler = createStepHandler(\n        new FormPoster(),\n        new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n    );\n    const paymentResumer = new PaymentResumer(requestSender, stepHandler);\n\n    describe('#resume', () => {\n        it('throws a OrderFinalizationNotRequiredError error if the payment token endpoint returns a 404', async () => {\n            jest.spyOn(requestSender, 'get').mockRejectedValue(\n                getErrorResponse(undefined, undefined, 404),\n            );\n\n            await expect(\n                paymentResumer.resume({\n                    paymentId: 'some-id',\n                    bigpayBaseUrl: 'https://some-domain.com',\n                    orderId: 12345,\n                }),\n            ).rejects.toBeInstanceOf(OrderFinalizationNotRequiredError);\n        });\n\n        it('requests the payment entity from the BigPay Payments endpoint', async () => {\n            const requestSenderSpy = jest\n                .spyOn(requestSender, 'get')\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                .mockResolvedValueOnce({ body: { auth_token: 'some-token' } })\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                .mockResolvedValueOnce({});\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(stepHandler, 'handle').mockResolvedValue({});\n\n            await paymentResumer.resume({\n                paymentId: 'some-id',\n                bigpayBaseUrl: 'https://some-domain.com',\n                orderId: 12345,\n            });\n\n            expect(requestSenderSpy).toHaveBeenCalledWith(\n                'https://some-domain.com/payments/some-id',\n                {\n                    credentials: false,\n                    headers: {\n                        authorization: 'some-token',\n                        'X-XSRF-TOKEN': null,\n                    },\n                },\n            );\n        });\n\n        it('passes the Payments endpoint response to the stepHandler', async () => {\n            jest.spyOn(requestSender, 'get')\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                .mockResolvedValueOnce({ body: { auth_token: 'some-token' } })\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                .mockResolvedValueOnce({ body: 'some-api-response' });\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            const stepHandlerSpy = jest.spyOn(stepHandler, 'handle').mockResolvedValue({});\n\n            await paymentResumer.resume({\n                paymentId: 'some-id',\n                bigpayBaseUrl: 'https://some-domain.com',\n                orderId: 12345,\n            });\n\n            expect(stepHandlerSpy).toHaveBeenCalledWith({ body: 'some-api-response' });\n        });\n\n        it('returns the final value from the stepHandler', async () => {\n            jest.spyOn(requestSender, 'get')\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                .mockResolvedValueOnce({ body: { auth_token: 'some-token' } })\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                .mockResolvedValueOnce({});\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(stepHandler, 'handle').mockResolvedValue({ someValue: 12345 });\n\n            await expect(\n                paymentResumer.resume({\n                    paymentId: 'some-id',\n                    bigpayBaseUrl: 'https://some-domain.com',\n                    orderId: 12345,\n                }),\n            ).resolves.toStrictEqual({ someValue: 12345 });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/ppsdk-payment-resumer.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport { OrderFinalizationNotRequiredError } from '../../../order/errors';\n\nimport { PaymentsAPIResponse } from './ppsdk-payments-api-response';\nimport { StepHandler } from './step-handler';\n\ninterface ResumeSettings {\n    orderId: number;\n    paymentId: string;\n    bigpayBaseUrl: string;\n}\n\nexport class PaymentResumer {\n    constructor(private _requestSender: RequestSender, private _stepHandler: StepHandler) {}\n\n    async resume({ paymentId, bigpayBaseUrl, orderId }: ResumeSettings): Promise<void> {\n        const token = await this._getToken(orderId).catch(() => {\n            throw new OrderFinalizationNotRequiredError();\n        });\n\n        const options = {\n            credentials: false,\n            headers: {\n                authorization: token,\n                'X-XSRF-TOKEN': null,\n            },\n        };\n\n        return this._requestSender\n            .get<PaymentsAPIResponse['body']>(`${bigpayBaseUrl}/payments/${paymentId}`, options)\n            .then((response) => this._stepHandler.handle(response));\n    }\n\n    private async _getToken(orderId: number): Promise<string> {\n        const url = `/api/storefront/payments/auth-token`;\n        const options = {\n            params: {\n                order_id: orderId,\n            },\n        };\n\n        return this._requestSender\n            .get<{ auth_token: string }>(url, options)\n            .then(({ body }) => body.auth_token);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/ppsdk-payments-api-response.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nexport type PaymentsAPIResponse = Response<unknown>;\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/ppsdk-strategy.spec.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { CheckoutRequestSender, CheckoutValidator, createCheckoutStore } from '../../../checkout';\nimport { getCheckoutStoreState } from '../../../checkout/checkouts.mock';\nimport { MissingDataError, NotInitializedError } from '../../../common/error/errors';\nimport { BrowserStorage } from '../../../common/storage';\nimport { HostedFormFactory } from '../../../hosted-form';\nimport { OrderActionCreator, OrderRequestSender } from '../../../order';\nimport { OrderFinalizationNotRequiredError } from '../../../order/errors';\nimport { getOrder } from '../../../order/orders.mock';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../../../spam-protection';\n\nimport { createSubStrategyRegistry } from './create-ppsdk-sub-strategy-registry';\nimport { PaymentResumer } from './ppsdk-payment-resumer';\nimport { PPSDKStrategy } from './ppsdk-strategy';\nimport { SubStrategyRegistry } from './ppsdk-sub-strategy-registry';\nimport { createStepHandler } from './step-handler';\n\ndescribe('PPSDKStrategy', () => {\n    const stepHandler = createStepHandler(\n        new FormPoster(),\n        new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n    );\n    const requestSender = createRequestSender();\n    let subStrategyRegistry: SubStrategyRegistry;\n    const paymentResumer = new PaymentResumer(requestSender, stepHandler);\n    const completedOrder = getOrder();\n    const incompleteOrder = { ...completedOrder, isComplete: false };\n    let store: ReturnType<typeof createCheckoutStore>;\n    let orderActionCreator: InstanceType<typeof OrderActionCreator>;\n    let hostedFormFactory: HostedFormFactory;\n    let submitSpy: jest.SpyInstance;\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreState());\n        orderActionCreator = new OrderActionCreator(\n            new OrderRequestSender(requestSender),\n            new CheckoutValidator(new CheckoutRequestSender(requestSender)),\n        );\n        hostedFormFactory = new HostedFormFactory(store);\n        subStrategyRegistry = createSubStrategyRegistry(\n            store,\n            orderActionCreator,\n            requestSender,\n            stepHandler,\n            hostedFormFactory,\n        );\n        submitSpy = jest.spyOn(orderActionCreator, 'submitOrder');\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(store, 'dispatch').mockResolvedValue(undefined);\n    });\n\n    afterEach(() => {\n        jest.resetAllMocks();\n    });\n\n    describe('when initialized with a valid PPSDK payment method', () => {\n        describe('#initialize', () => {\n            it('does not throw an error', async () => {\n                const strategy = new PPSDKStrategy(\n                    store,\n                    orderActionCreator,\n                    subStrategyRegistry,\n                    paymentResumer,\n                    new BrowserStorage('ppsdk'),\n                );\n\n                await expect(strategy.initialize({ methodId: 'cabbagepay' })).resolves.toBeTruthy();\n            });\n\n            it('calls the sub-strategy initialize method', async () => {\n                const strategy = new PPSDKStrategy(\n                    store,\n                    orderActionCreator,\n                    subStrategyRegistry,\n                    paymentResumer,\n                    new BrowserStorage('ppsdk'),\n                );\n\n                const mockSubStrategy = { execute: jest.fn(), initialize: jest.fn() };\n\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                jest.spyOn(subStrategyRegistry, 'getByMethod').mockReturnValue(mockSubStrategy);\n\n                await strategy.initialize({ methodId: 'cabbagepay' });\n\n                expect(mockSubStrategy.initialize).toHaveBeenCalled();\n            });\n        });\n\n        describe('#deinitialize', () => {\n            it('does not throw an error', async () => {\n                const strategy = new PPSDKStrategy(\n                    store,\n                    orderActionCreator,\n                    subStrategyRegistry,\n                    paymentResumer,\n                    new BrowserStorage('ppsdk'),\n                );\n\n                await expect(\n                    strategy.deinitialize({ methodId: 'cabbagepay' }),\n                ).resolves.toBeTruthy();\n            });\n\n            it('calls the sub-strategy deinitialize method', async () => {\n                const strategy = new PPSDKStrategy(\n                    store,\n                    orderActionCreator,\n                    subStrategyRegistry,\n                    paymentResumer,\n                    new BrowserStorage('ppsdk'),\n                );\n\n                const mockSubStrategy = { initialize: jest.fn(), deinitialize: jest.fn() };\n\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                jest.spyOn(subStrategyRegistry, 'getByMethod').mockReturnValue(mockSubStrategy);\n\n                await strategy.initialize({ methodId: 'cabbagepay' });\n                await strategy.deinitialize({ methodId: 'cabbagepay' });\n\n                expect(mockSubStrategy.deinitialize).toHaveBeenCalled();\n            });\n        });\n\n        describe('when the bigpayBaseUrl is correctly set within store config', () => {\n            describe('when an order token is set by the submitOrder call', () => {\n                describe('#execute', () => {\n                    it('submits the order and calls the sub-strategy', async () => {\n                        const strategy = new PPSDKStrategy(\n                            store,\n                            orderActionCreator,\n                            subStrategyRegistry,\n                            paymentResumer,\n                            new BrowserStorage('ppsdk'),\n                        );\n\n                        const mockSubStrategy = { execute: jest.fn(), initialize: jest.fn() };\n\n                        jest.spyOn(subStrategyRegistry, 'getByMethod').mockReturnValue(\n                            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                            // @ts-ignore\n                            mockSubStrategy,\n                        );\n                        jest.spyOn(store.getState().order, 'getOrderMeta').mockReturnValue({\n                            token: 'some-token',\n                        });\n\n                        await strategy.initialize({ methodId: 'cabbagepay' });\n                        await strategy.execute({}, { methodId: 'cabbagepay' });\n\n                        expect(store.dispatch).toHaveBeenCalledWith(\n                            submitSpy.mock.results[0].value,\n                        );\n                        expect(mockSubStrategy.execute).toHaveBeenCalled();\n                    });\n                });\n            });\n\n            describe('when an order token is not set by the submitOrder call', () => {\n                describe('#execute', () => {\n                    it('throws a MissingDataError error, does not call the sub-strategy', async () => {\n                        const strategy = new PPSDKStrategy(\n                            store,\n                            orderActionCreator,\n                            subStrategyRegistry,\n                            paymentResumer,\n                            new BrowserStorage('ppsdk'),\n                        );\n\n                        const mockSubStrategy = { execute: jest.fn(), initialize: jest.fn() };\n\n                        jest.spyOn(subStrategyRegistry, 'getByMethod').mockReturnValue(\n                            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                            // @ts-ignore\n                            mockSubStrategy,\n                        );\n                        jest.spyOn(store.getState().order, 'getOrderMeta').mockReturnValue({\n                            token: undefined,\n                        });\n\n                        await strategy.initialize({ methodId: 'cabbagepay' });\n\n                        await expect(\n                            strategy.execute({}, { methodId: 'cabbagepay' }),\n                        ).rejects.toBeInstanceOf(MissingDataError);\n\n                        expect(store.dispatch).toHaveBeenCalledWith(\n                            submitSpy.mock.results[0].value,\n                        );\n                        expect(mockSubStrategy.execute).not.toHaveBeenCalled();\n                    });\n                });\n            });\n\n            describe('when there is an existing order with a matching PPSDK Payment', () => {\n                describe('#finalize', () => {\n                    it('calls the payment resumer', async () => {\n                        jest.spyOn(store.getState().order, 'getOrderOrThrow').mockReturnValue(\n                            incompleteOrder,\n                        );\n                        jest.spyOn(store.getState().order, 'getPaymentId').mockReturnValue('abc');\n                        jest.spyOn(store.getState().order, 'getOrderMeta').mockReturnValue({\n                            token: 'some-token',\n                        });\n                        jest.spyOn(store.getState().order, 'getOrder').mockReturnValue({\n                            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                            // @ts-ignore\n                            orderId: 'some-order-id',\n                        });\n\n                        const resumerSpy = jest\n                            .spyOn(paymentResumer, 'resume')\n                            .mockResolvedValue(undefined);\n\n                        const strategy = new PPSDKStrategy(\n                            store,\n                            orderActionCreator,\n                            subStrategyRegistry,\n                            paymentResumer,\n                            new BrowserStorage('ppsdk'),\n                        );\n\n                        await strategy.finalize({ methodId: 'cabbagepay' });\n\n                        expect(resumerSpy).toHaveBeenCalled();\n                    });\n\n                    describe('when the payment resumer throws an error', () => {\n                        it('rethrows the error once per unique paymentId, then throws OrderFinalizationNotRequiredError errors instead', async () => {\n                            jest.spyOn(store.getState().order, 'getOrderOrThrow').mockReturnValue(\n                                incompleteOrder,\n                            );\n                            jest.spyOn(store.getState().order, 'getPaymentId').mockReturnValue(\n                                'first-payment-id',\n                            );\n                            jest.spyOn(store.getState().order, 'getOrderMeta').mockReturnValue({\n                                token: 'some-token',\n                            });\n                            jest.spyOn(store.getState().order, 'getOrder').mockReturnValue({\n                                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                                // @ts-ignore\n                                orderId: 'some-order-id',\n                            });\n                            jest.spyOn(paymentResumer, 'resume').mockRejectedValue(new Error());\n\n                            const strategy = new PPSDKStrategy(\n                                store,\n                                orderActionCreator,\n                                subStrategyRegistry,\n                                paymentResumer,\n                                new BrowserStorage('ppsdk'),\n                            );\n\n                            await expect(\n                                strategy.finalize({ methodId: 'cabbagepay' }),\n                            ).rejects.toBeInstanceOf(Error);\n\n                            await expect(\n                                strategy.finalize({ methodId: 'cabbagepay' }),\n                            ).rejects.toBeInstanceOf(OrderFinalizationNotRequiredError);\n\n                            jest.spyOn(store.getState().order, 'getPaymentId').mockReturnValue(\n                                'second-payment-id',\n                            );\n\n                            await expect(\n                                strategy.finalize({ methodId: 'cabbagepay' }),\n                            ).rejects.toBeInstanceOf(Error);\n\n                            await expect(\n                                strategy.finalize({ methodId: 'cabbagepay' }),\n                            ).rejects.toBeInstanceOf(OrderFinalizationNotRequiredError);\n                        });\n                    });\n                });\n            });\n\n            describe('when there is an existing order, but without a matching PPSDK Payment', () => {\n                describe('#finalize', () => {\n                    it('throws a OrderFinalizationNotRequiredError error, does not call the payment resumer', async () => {\n                        jest.spyOn(store.getState().order, 'getOrderOrThrow').mockReturnValue(\n                            incompleteOrder,\n                        );\n                        jest.spyOn(store.getState().order, 'getPaymentId').mockReturnValue(\n                            undefined,\n                        );\n\n                        const resumerSpy = jest\n                            .spyOn(paymentResumer, 'resume')\n                            .mockResolvedValue(undefined);\n\n                        const strategy = new PPSDKStrategy(\n                            store,\n                            orderActionCreator,\n                            subStrategyRegistry,\n                            paymentResumer,\n                            new BrowserStorage('ppsdk'),\n                        );\n\n                        await expect(\n                            strategy.finalize({ methodId: 'cabbagepay' }),\n                        ).rejects.toBeInstanceOf(OrderFinalizationNotRequiredError);\n\n                        expect(resumerSpy).not.toHaveBeenCalled();\n                    });\n                });\n            });\n\n            describe('when there is an existing order that is already completed', () => {\n                describe('#finalize', () => {\n                    it('resolves without needing to call any further endpoints', async () => {\n                        jest.spyOn(store.getState().order, 'getOrderOrThrow').mockReturnValue(\n                            completedOrder,\n                        );\n\n                        const requestSenderGetSpy = jest.spyOn(requestSender, 'get');\n                        const requestSenderPostSpy = jest.spyOn(requestSender, 'post');\n\n                        const strategy = new PPSDKStrategy(\n                            store,\n                            orderActionCreator,\n                            subStrategyRegistry,\n                            paymentResumer,\n                            new BrowserStorage('ppsdk'),\n                        );\n\n                        await expect(\n                            strategy.finalize({ methodId: 'cabbagepay' }),\n                        ).resolves.not.toThrow();\n\n                        expect(requestSenderGetSpy).not.toHaveBeenCalled();\n                        expect(requestSenderPostSpy).not.toHaveBeenCalled();\n                    });\n                });\n            });\n        });\n    });\n\n    describe('when initialized with a not yet supported PPSDK payment method', () => {\n        describe('#initialize', () => {\n            it('throws a NotInitializedError error', async () => {\n                const strategy = new PPSDKStrategy(\n                    store,\n                    orderActionCreator,\n                    subStrategyRegistry,\n                    paymentResumer,\n                    new BrowserStorage('ppsdk'),\n                );\n\n                await expect(\n                    strategy.initialize({ methodId: 'unsupported-cabbagepay' }),\n                ).rejects.toBeInstanceOf(NotInitializedError);\n            });\n        });\n    });\n\n    describe('when initialized with a non PPSDK payment method', () => {\n        describe('#initialize', () => {\n            it('throws a NotInitializedError error', async () => {\n                const strategy = new PPSDKStrategy(\n                    store,\n                    orderActionCreator,\n                    subStrategyRegistry,\n                    paymentResumer,\n                    new BrowserStorage('ppsdk'),\n                );\n\n                await expect(strategy.initialize({ methodId: 'braintree' })).rejects.toBeInstanceOf(\n                    NotInitializedError,\n                );\n            });\n        });\n    });\n\n    describe('when not successfully initialized', () => {\n        describe('#execute', () => {\n            it('throws a NotInitializedError error', async () => {\n                const strategy = new PPSDKStrategy(\n                    store,\n                    orderActionCreator,\n                    subStrategyRegistry,\n                    paymentResumer,\n                    new BrowserStorage('ppsdk'),\n                );\n\n                await expect(strategy.execute({}, { methodId: '123' })).rejects.toBeInstanceOf(\n                    NotInitializedError,\n                );\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/ppsdk-strategy.ts",
    "content": "import { CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n} from '../../../common/error/errors';\nimport { BrowserStorage } from '../../../common/storage';\nimport { OrderActionCreator, OrderRequestBody } from '../../../order';\nimport { OrderFinalizationNotRequiredError } from '../../../order/errors';\nimport { PaymentInitializeOptions, PaymentRequestOptions } from '../../payment-request-options';\nimport PaymentStrategy from '../payment-strategy';\n\nimport { getPPSDKMethod } from './get-ppsdk-payment-method';\nimport { PPSDKCompletedPayments } from './ppsdk-completed-payments';\nimport { PaymentResumer } from './ppsdk-payment-resumer';\nimport { SubStrategy } from './ppsdk-sub-strategy';\nimport { SubStrategyRegistry } from './ppsdk-sub-strategy-registry';\n\nexport class PPSDKStrategy implements PaymentStrategy {\n    private _subStrategy?: SubStrategy;\n    private _completedPayments: PPSDKCompletedPayments;\n\n    constructor(\n        private _store: CheckoutStore,\n        private _orderActionCreator: OrderActionCreator,\n        private _subStrategyRegistry: SubStrategyRegistry,\n        private _paymentResumer: PaymentResumer,\n        browserStorage: BrowserStorage,\n    ) {\n        this._completedPayments = new PPSDKCompletedPayments(browserStorage);\n    }\n\n    async execute(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        const { bigpayBaseUrl } = this._store\n            .getState()\n            .config.getStoreConfigOrThrow().paymentSettings;\n\n        if (!options?.methodId) {\n            throw new InvalidArgumentError(\n                'Unable to submit payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        const { methodId } = options;\n        const { payment, ...order } = payload;\n        const { _subStrategy: subStrategy } = this;\n\n        if (!subStrategy) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        await this._store.dispatch(this._orderActionCreator.submitOrder(order, options));\n\n        const token = this._store.getState().order.getOrderMeta()?.token;\n\n        if (!token) {\n            throw new MissingDataError(MissingDataErrorType.MissingOrder);\n        }\n\n        await subStrategy.execute({ methodId, payment, bigpayBaseUrl, token });\n\n        return this._store.getState();\n    }\n\n    async finalize(options?: PaymentRequestOptions): Promise<InternalCheckoutSelectors> {\n        const order = this._store.getState().order.getOrderOrThrow();\n\n        if (order.isComplete) {\n            return this._store.getState();\n        }\n\n        const { bigpayBaseUrl } = this._store\n            .getState()\n            .config.getStoreConfigOrThrow().paymentSettings;\n\n        if (!options?.methodId) {\n            throw new InvalidArgumentError(\n                'Unable to submit payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        const paymentId = this._store.getState().order.getPaymentId(options.methodId);\n\n        if (!paymentId || !order || this._completedPayments.isCompleted(paymentId)) {\n            throw new OrderFinalizationNotRequiredError();\n        }\n\n        const { orderId } = order;\n\n        await this._paymentResumer.resume({ paymentId, bigpayBaseUrl, orderId }).catch((error) => {\n            this._completedPayments.setCompleted(paymentId);\n            throw error;\n        });\n\n        return this._store.getState();\n    }\n\n    async initialize(options?: PaymentInitializeOptions): Promise<InternalCheckoutSelectors> {\n        if (!options?.methodId) {\n            throw new InvalidArgumentError(\n                'Unable to submit payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        const paymentMethod = getPPSDKMethod(this._store, options.methodId);\n\n        if (!paymentMethod) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        this._subStrategy = this._subStrategyRegistry.getByMethod(paymentMethod);\n\n        if (!this._subStrategy) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        await this._subStrategy.initialize(options);\n\n        return this._store.getState();\n    }\n\n    async deinitialize(_options?: PaymentRequestOptions): Promise<InternalCheckoutSelectors> {\n        this._subStrategy?.deinitialize();\n\n        return this._store.getState();\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/ppsdk-sub-strategy-registry.ts",
    "content": "import { cond, constant, stubTrue } from 'lodash';\n\nimport { Registry } from '../../../common/registry';\nimport { PPSDKPaymentMethod } from '../../ppsdk-payment-method';\n\nimport { isCard, isNone } from './initialization-strategies';\nimport { SubStrategy } from './ppsdk-sub-strategy';\nimport { SubStrategyType } from './ppsdk-sub-strategy-type';\n\nconst getToken = cond([\n    [isCard, constant(SubStrategyType.CARD)],\n    [isNone, constant(SubStrategyType.NONE)],\n    [stubTrue, constant(SubStrategyType.UNSUPPORTED)],\n]);\n\nexport class SubStrategyRegistry extends Registry<SubStrategy | undefined, SubStrategyType> {\n    getByMethod(paymentMethod: PPSDKPaymentMethod): SubStrategy | undefined {\n        const token = getToken(paymentMethod.initializationStrategy);\n\n        return this.get(token);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/ppsdk-sub-strategy-type.ts",
    "content": "export enum SubStrategyType {\n    CARD = 'card_ui',\n    NONE = 'none',\n    UNSUPPORTED = 'unsupported',\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/ppsdk-sub-strategy.ts",
    "content": "import { OrderPaymentRequestBody } from '../../../order';\nimport PaymentAdditionalAction from '../../payment-additional-action';\nimport { PaymentInitializeOptions, PaymentRequestOptions } from '../../payment-request-options';\n\nexport interface SubStrategySettings {\n    additionalAction?: PaymentAdditionalAction;\n    token: string;\n    methodId: string;\n    payment?: OrderPaymentRequestBody;\n    bigpayBaseUrl: string;\n}\n\nexport interface SubStrategy {\n    execute(settings: SubStrategySettings): Promise<void>;\n\n    initialize(options?: PaymentInitializeOptions): Promise<void>;\n\n    deinitialize(options?: PaymentRequestOptions): void;\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/continue-handler/continue-handler.spec.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    createSpamProtection,\n    PaymentHumanVerificationHandler,\n} from '../../../../../spam-protection';\n\nimport { Continue, ContinueHandler } from './continue-handler';\n\ndescribe('ContinueHandler', () => {\n    const formPoster = createFormPoster();\n    const continueHandler = new ContinueHandler(\n        formPoster,\n        new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n    );\n\n    describe('#handle', () => {\n        it('passes redirect parameters to the redirect handler', () => {\n            Object.defineProperty(window, 'location', {\n                value: {\n                    assign: jest.fn(),\n                    href: 'foobar',\n                },\n            });\n\n            const redirectContinueResponse: Continue = {\n                type: 'continue',\n                code: 'redirect',\n                parameters: {\n                    url: 'http://some-url.com',\n                },\n            };\n\n            continueHandler.handle(redirectContinueResponse);\n\n            expect(window.location.assign).toHaveBeenCalledWith('http://some-url.com');\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/continue-handler/continue-handler.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { overSome } from 'lodash';\n\nimport { PaymentHumanVerificationHandler } from '../../../../../spam-protection';\nimport PaymentAdditionalAction from '../../../../payment-additional-action';\nimport { PaymentsAPIResponse } from '../../ppsdk-payments-api-response';\n\nimport {\n    handleHumanVerification,\n    HumanVerification,\n    isHumanVerification,\n} from './human-verification';\nimport { handleRedirect, isRedirect, Redirect } from './redirect';\n\nexport type Continue = Redirect | HumanVerification;\n\nconst isAnyContinue = overSome([isRedirect, isHumanVerification]);\n\nexport const isContinue = (body: PaymentsAPIResponse['body']): body is Continue =>\n    isAnyContinue(body);\n\nexport interface ContinueCallbacks {\n    humanVerification?(additionalAction: PaymentAdditionalAction): Promise<void>;\n}\n\nexport class ContinueHandler {\n    constructor(\n        private _formPoster: FormPoster,\n        private _humanVerificationHandler: PaymentHumanVerificationHandler,\n    ) {}\n\n    handle(body: Continue, callbacks?: ContinueCallbacks): Promise<void> {\n        switch (body.code) {\n            case 'redirect':\n                return handleRedirect(body.parameters, this._formPoster);\n\n            case 'resubmit_with_human_verification':\n                return handleHumanVerification(\n                    body.parameters,\n                    this._humanVerificationHandler,\n                    callbacks?.humanVerification,\n                );\n        }\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/continue-handler/human-verification/human-verification.ts",
    "content": "import { get, isArray } from 'lodash';\n\nimport { PaymentHumanVerificationHandler } from '../../../../../../spam-protection';\nimport PaymentAdditionalAction from '../../../../../payment-additional-action';\nimport { PaymentsAPIResponse } from '../../../ppsdk-payments-api-response';\n\ninterface VerificationMethod {\n    id: string;\n    parameters: Record<string, string>;\n}\n\ninterface Parameters {\n    available_methods: VerificationMethod[];\n}\n\nexport interface HumanVerification {\n    type: 'continue';\n    code: 'resubmit_with_human_verification';\n    parameters: Parameters;\n}\n\nconst isParameters = (x: unknown): x is Parameters => {\n    const availableMethods = get(x, 'available_methods');\n\n    return isArray(availableMethods);\n};\n\nexport const isHumanVerification = (body: PaymentsAPIResponse['body']): body is HumanVerification =>\n    get(body, 'type') === 'continue' &&\n    get(body, 'code') === 'resubmit_with_human_verification' &&\n    isParameters(get(body, 'parameters'));\n\nexport const handleHumanVerification = async (\n    { available_methods }: Parameters,\n    humanVerificationHandler?: PaymentHumanVerificationHandler,\n    callback?: (additionalAction: PaymentAdditionalAction) => Promise<void>,\n): Promise<void> => {\n    if (!callback) {\n        throw new Error('PPSDK human verification callback function is missing.');\n    }\n\n    if (!humanVerificationHandler) {\n        throw new Error('PPSDK human verification handler is missing.');\n    }\n\n    if (available_methods.length === 0) {\n        throw Error('Human verification method is missing.');\n    }\n\n    // Only one method is expected because google recaptcha only is supported\n    const { id, parameters } = available_methods[0];\n\n    const additionalAction: PaymentAdditionalAction = await humanVerificationHandler.handle(\n        id,\n        parameters.key,\n    );\n\n    return callback(additionalAction);\n};\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/continue-handler/human-verification/index.ts",
    "content": "export {\n    isHumanVerification,\n    handleHumanVerification,\n    HumanVerification,\n} from './human-verification';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/continue-handler/index.ts",
    "content": "export { isContinue, Continue, ContinueCallbacks, ContinueHandler } from './continue-handler';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/continue-handler/redirect/RedirectionState.spec.ts",
    "content": "import { parseUrl } from '../../../../../../common/url';\n\nimport { PENDING_REDIRECT_PARAM, RedirectionState } from './RedirectionState';\n\ndescribe('RedirectionState', () => {\n    let initialUrl: string;\n    let redirectionState: RedirectionState;\n\n    beforeAll(() => {\n        initialUrl = window.location.href;\n    });\n\n    afterAll(() => {\n        window.history.replaceState(null, '', initialUrl);\n    });\n\n    describe('#isRedirecting', () => {\n        describe('when the page loads with no \"redirecting\" url param', () => {\n            beforeAll(() => {\n                window.history.replaceState(null, '', initialUrl);\n                redirectionState = new RedirectionState();\n            });\n\n            it('returns false', () => {\n                expect(redirectionState.isRedirecting()).toBe(false);\n            });\n\n            it('sets a \"redirecting\" url param when set to true', () => {\n                redirectionState.setRedirecting(true);\n\n                expect(parseUrl(window.location.href).search).toContain(PENDING_REDIRECT_PARAM);\n            });\n        });\n\n        describe('when the page loads with the \"redirecting\" url param', () => {\n            beforeAll(() => {\n                window.history.replaceState(null, '', `${initialUrl}?${PENDING_REDIRECT_PARAM}`);\n                redirectionState = new RedirectionState();\n            });\n\n            it('returns true', () => {\n                expect(redirectionState.isRedirecting()).toBe(true);\n            });\n\n            it('removes the \"redirecting\" url param when set to false', () => {\n                redirectionState.setRedirecting(false);\n\n                expect(parseUrl(window.location.href).search).not.toContain(PENDING_REDIRECT_PARAM);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/continue-handler/redirect/RedirectionState.ts",
    "content": "import { exclude, ParsedUrl, parseUrl, stringifyUrl } from 'query-string';\n\nexport const PENDING_REDIRECT_PARAM = 'redirecting';\n\nexport class RedirectionState {\n    private _isRedirecting: boolean;\n\n    constructor() {\n        this._isRedirecting = this.currentUrlHasRedirectingParam();\n    }\n\n    isRedirecting() {\n        return this._isRedirecting;\n    }\n\n    setRedirecting(value: boolean) {\n        if (value) {\n            this.setRedirectingParamOnUrl();\n        } else {\n            this.removeRedirectingParamFromUrl();\n        }\n\n        this._isRedirecting = value;\n    }\n\n    private currentUrlHasRedirectingParam(): boolean {\n        return PENDING_REDIRECT_PARAM in this.getCurrentUrl().query;\n    }\n\n    private getCurrentUrl(): ParsedUrl {\n        return parseUrl(window.location.href);\n    }\n\n    private replaceCurrentUrl(url: string) {\n        window.history.replaceState(null, '', url);\n    }\n\n    private setRedirectingParamOnUrl() {\n        if (this.currentUrlHasRedirectingParam()) {\n            return;\n        }\n\n        const currentUrl = this.getCurrentUrl();\n        const updatedUrl = {\n            ...currentUrl,\n            query: {\n                ...currentUrl.query,\n                [PENDING_REDIRECT_PARAM]: 'true',\n            },\n        };\n\n        this.replaceCurrentUrl(stringifyUrl(updatedUrl));\n    }\n\n    private removeRedirectingParamFromUrl() {\n        if (!this.currentUrlHasRedirectingParam()) {\n            return;\n        }\n\n        this.replaceCurrentUrl(exclude(window.location.href, [PENDING_REDIRECT_PARAM]));\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/continue-handler/redirect/index.ts",
    "content": "export { isRedirect, handleRedirect, Redirect } from './redirect';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/continue-handler/redirect/redirect.spec.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\n\nimport { PaymentMethodCancelledError } from '../../../../../errors';\n\nimport { handleRedirect, isRedirect, Redirect } from './redirect';\n\ndescribe('handleRedirect', () => {\n    const formPoster = createFormPoster();\n    let initialUrl: string;\n\n    beforeAll(() => {\n        initialUrl = window.location.href;\n    });\n\n    afterEach(() => {\n        window.history.replaceState(null, '', initialUrl);\n    });\n\n    describe('when there is not an already pending redirect', () => {\n        describe('when not passed form_fields', () => {\n            // TODO: CHECKOUT-7766\n            it('calls location assign with the url, never resolves or rejects', () => {\n                const resolveMock = jest.fn();\n                const rejectMock = jest.fn();\n\n                // TODO: fix test after jest update (window.location.assign cant be mocked as it is readonly value) - PAYPAL-4383\n                // const assignSpy = jest.spyOn(window.location, 'assign').mockImplementation(jest.fn);\n\n                const redirectContinueResponse = {\n                    url: 'http://some-url.com',\n                };\n\n                handleRedirect(redirectContinueResponse, formPoster)\n                    .then(resolveMock)\n                    .catch(rejectMock);\n\n                // expect(assignSpy).toHaveBeenCalledWith('http://some-url.com');\n                expect(resolveMock).not.toHaveBeenCalled();\n                expect(rejectMock).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('with passed form_fields', () => {\n            it('posts a form to the url along with fields, never resolves or rejects', () => {\n                const postFormSpy = jest.spyOn(formPoster, 'postForm').mockImplementation(jest.fn);\n                const resolveMock = jest.fn();\n                const rejectMock = jest.fn();\n\n                const form_fields = {\n                    someField: 'some-value',\n                    anotherField: 'another-value',\n                };\n\n                const redirectContinueResponse = {\n                    url: 'http://some-post-url.com',\n                    form_fields,\n                };\n\n                handleRedirect(redirectContinueResponse, formPoster)\n                    .then(resolveMock)\n                    .catch(rejectMock);\n\n                expect(postFormSpy).toHaveBeenCalledWith('http://some-post-url.com', form_fields);\n                expect(resolveMock).not.toHaveBeenCalled();\n                expect(rejectMock).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('when there is an already pending redirect', () => {\n        it('rejects with a PaymentMethodCancelledError', async () => {\n            const redirectContinueResponse = {\n                url: 'http://some-url.com',\n            };\n\n            handleRedirect(redirectContinueResponse, formPoster);\n\n            await expect(\n                handleRedirect(redirectContinueResponse, formPoster),\n            ).rejects.toBeInstanceOf(PaymentMethodCancelledError);\n        });\n    });\n});\n\ndescribe('isRedirect', () => {\n    it('returns true when passed valid redirect responses', () => {\n        const redirectByGetResponse: Redirect = {\n            type: 'continue',\n            code: 'redirect',\n            parameters: {\n                url: 'http://some-url.com',\n            },\n        };\n\n        const redirectByPostResponse: Redirect = {\n            type: 'continue',\n            code: 'redirect',\n            parameters: {\n                url: 'http://some-url.com',\n                form_fields: {\n                    someField: 'some-value',\n                    anotherField: 'another-value',\n                },\n            },\n        };\n\n        expect(isRedirect(redirectByGetResponse)).toBe(true);\n        expect(isRedirect(redirectByPostResponse)).toBe(true);\n    });\n\n    it('returns false when passed an invalid redirect response', () => {\n        const invalidResponse = {\n            type: 'anything',\n        };\n\n        expect(isRedirect(invalidResponse)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/continue-handler/redirect/redirect.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { get, isObject, isString, isUndefined, noop } from 'lodash';\n\nimport { PaymentMethodCancelledError } from '../../../../../errors';\nimport { PaymentsAPIResponse } from '../../../ppsdk-payments-api-response';\n\nimport { RedirectionState } from './RedirectionState';\n\ninterface Parameters {\n    url: string;\n    form_fields?: Record<string, string | number | boolean>;\n}\n\nexport interface Redirect {\n    type: 'continue';\n    code: 'redirect';\n    parameters: Parameters;\n}\n\nconst isParameters = (x: unknown): x is Parameters => {\n    const formFields = get(x, 'form_fields');\n\n    return isString(get(x, 'url')) && (isUndefined(formFields) || isObject(formFields));\n};\n\nexport const isRedirect = (body: PaymentsAPIResponse['body']): body is Redirect =>\n    get(body, 'type') === 'continue' &&\n    get(body, 'code') === 'redirect' &&\n    isParameters(get(body, 'parameters'));\n\nexport const handleRedirect = (\n    { url, form_fields }: Parameters,\n    formPoster: FormPoster,\n): Promise<never> => {\n    const redirectionState = new RedirectionState();\n\n    if (redirectionState.isRedirecting()) {\n        redirectionState.setRedirecting(false);\n\n        return Promise.reject(new PaymentMethodCancelledError());\n    }\n\n    redirectionState.setRedirecting(true);\n\n    if (form_fields) {\n        formPoster.postForm(url, form_fields);\n    } else {\n        window.location.assign(url);\n    }\n\n    return new Promise(noop);\n};\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/create-step-handler.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\n\nimport { PaymentHumanVerificationHandler } from '../../../../spam-protection';\n\nimport { ContinueHandler } from './continue-handler';\nimport { StepHandler } from './step-handler';\n\nexport const createStepHandler = (\n    formPoster: FormPoster,\n    humanVerificationHandler: PaymentHumanVerificationHandler,\n) => new StepHandler(new ContinueHandler(formPoster, humanVerificationHandler));\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/error.spec.ts",
    "content": "import { RequestError } from '../../../../common/error/errors';\n\nimport { ErrorResponse, handleError, isError } from './error';\n\ndescribe('handleError', () => {\n    it('rejects with RequestError', async () => {\n        const errorResponse: ErrorResponse = {\n            body: {\n                type: 'error',\n            },\n            status: 200,\n            statusText: '',\n            headers: [],\n        };\n\n        await expect(handleError(errorResponse)).rejects.toBeInstanceOf(RequestError);\n    });\n});\n\ndescribe('isError', () => {\n    it('returns true when passed a valid error response', () => {\n        const errorResponse: ErrorResponse = {\n            body: {\n                type: 'error',\n            },\n            status: 200,\n            statusText: '',\n            headers: [],\n        };\n\n        expect(isError(errorResponse)).toBe(true);\n    });\n\n    it('returns false when passed an invalid error response', () => {\n        const invalidResponse = {\n            body: {\n                type: 'anything',\n            },\n            status: 200,\n            statusText: '',\n            headers: [],\n        };\n\n        expect(isError(invalidResponse)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/error.ts",
    "content": "import { get } from 'lodash';\n\nimport { RequestError } from '../../../../common/error/errors';\nimport { PaymentsAPIResponse } from '../ppsdk-payments-api-response';\n\nexport interface ErrorResponse extends PaymentsAPIResponse {\n    body: {\n        type: 'error';\n    };\n}\n\nexport const isError = (response: PaymentsAPIResponse): response is ErrorResponse =>\n    get(response.body, 'type') === 'error';\n\nexport const handleError = (response: ErrorResponse) => Promise.reject(new RequestError(response));\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/failure.spec.ts",
    "content": "import { RequestError } from '../../../../common/error/errors';\n\nimport { FailureResponse, handleFailure, isFailure } from './failure';\n\ndescribe('handleFailure', () => {\n    it('rejects with RequestError', async () => {\n        const failureResponse: FailureResponse = {\n            body: {\n                type: 'failure',\n                code: 'any-failure',\n            },\n            status: 200,\n            statusText: '',\n            headers: [],\n        };\n\n        await expect(handleFailure(failureResponse)).rejects.toBeInstanceOf(RequestError);\n        await expect(handleFailure(failureResponse)).rejects.toStrictEqual(\n            expect.objectContaining({\n                body: { errors: [{ code: 'any-failure' }] },\n            }),\n        );\n    });\n});\n\ndescribe('isFailure', () => {\n    it('returns true when passed a valid failure response', () => {\n        const failureResponse: FailureResponse = {\n            body: {\n                type: 'failure',\n                code: 'any-failure',\n            },\n            status: 200,\n            statusText: '',\n            headers: [],\n        };\n\n        expect(isFailure(failureResponse)).toBe(true);\n    });\n\n    it('returns false when passed an invalid failure response', () => {\n        const invalidResponse = {\n            body: {\n                type: 'anything',\n            },\n            status: 200,\n            statusText: '',\n            headers: [],\n        };\n\n        expect(isFailure(invalidResponse)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/failure.ts",
    "content": "import { get, isString } from 'lodash';\n\nimport { RequestError } from '../../../../common/error/errors';\nimport { PaymentsAPIResponse } from '../ppsdk-payments-api-response';\n\nexport interface FailureResponse extends PaymentsAPIResponse {\n    body: {\n        type: 'failure';\n        code: string;\n    };\n}\n\nexport const isFailure = (response: PaymentsAPIResponse): response is FailureResponse =>\n    get(response.body, 'type') === 'failure' && isString(get(response.body, 'code'));\n\nconst toRequestErrorFormat = (failureResponse: FailureResponse) => ({\n    ...failureResponse,\n    body: {\n        errors: [{ code: failureResponse.body.code }],\n    },\n});\n\nexport const handleFailure = (response: FailureResponse): Promise<void> =>\n    Promise.reject(new RequestError(toRequestErrorFormat(response)));\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/index.ts",
    "content": "export { createStepHandler } from './create-step-handler';\nexport { StepHandler } from './step-handler';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/step-handler.spec.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { RequestError } from '../../../../common/error/errors';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../../../../spam-protection';\n\nimport { ContinueHandler } from './continue-handler';\nimport { StepHandler } from './step-handler';\n\ndescribe('StepHandler', () => {\n    const formPoster = createFormPoster();\n    const continueHandler = new ContinueHandler(\n        formPoster,\n        new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n    );\n    const handler = new StepHandler(continueHandler);\n\n    describe('#handler', () => {\n        describe('with a success body', () => {\n            it('resolves to undefined', async () => {\n                const successResponse = {\n                    body: {\n                        type: 'success',\n                    },\n                    status: 200,\n                    statusText: '',\n                    headers: [],\n                };\n\n                await expect(handler.handle(successResponse)).resolves.toBeUndefined();\n            });\n        });\n\n        describe('with a continue body', () => {\n            it('passes the body to the continueHandler', async () => {\n                const continueHandlerSpy = jest\n                    .spyOn(continueHandler, 'handle')\n                    // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                    // @ts-ignore\n                    .mockImplementation(jest.fn);\n\n                const body = {\n                    type: 'continue',\n                    code: 'redirect',\n                    parameters: {\n                        url: 'http://some-url.com',\n                    },\n                };\n\n                const redirectContinueResponse = {\n                    body,\n                    status: 200,\n                    statusText: '',\n                    headers: [],\n                };\n\n                await handler.handle(redirectContinueResponse);\n\n                expect(continueHandlerSpy).toHaveBeenCalledWith(body, undefined);\n            });\n        });\n\n        describe('with a failed body', () => {\n            it('rejects with RequestError', async () => {\n                const failedResponse = {\n                    body: {\n                        type: 'failed',\n                        code: 'any-failure',\n                    },\n                    status: 200,\n                    statusText: '',\n                    headers: [],\n                };\n\n                await expect(handler.handle(failedResponse)).rejects.toBeInstanceOf(RequestError);\n            });\n        });\n\n        describe('with an error body', () => {\n            it('rejects with RequestError', async () => {\n                const errorResponse = {\n                    body: {\n                        type: 'error',\n                    },\n                    status: 200,\n                    statusText: '',\n                    headers: [],\n                };\n\n                await expect(handler.handle(errorResponse)).rejects.toBeInstanceOf(RequestError);\n            });\n        });\n\n        describe('with an unsupported body', () => {\n            it('rejects with RequestError', async () => {\n                const unsupportedResponse = {\n                    body: {\n                        type: 'continue',\n                        code: 'not-supported',\n                    },\n                    status: 200,\n                    statusText: '',\n                    headers: [],\n                };\n\n                await expect(handler.handle(unsupportedResponse)).rejects.toBeInstanceOf(\n                    RequestError,\n                );\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/step-handler.ts",
    "content": "import { PaymentsAPIResponse } from '../ppsdk-payments-api-response';\n\nimport { ContinueCallbacks, ContinueHandler, isContinue } from './continue-handler';\nimport { handleError, isError } from './error';\nimport { handleFailure, isFailure } from './failure';\nimport { handleSuccess, isSuccess } from './success';\nimport { handleUnsupported } from './unsupported';\n\ninterface StepHandlerCallbacks {\n    continue?: ContinueCallbacks;\n}\n\nexport class StepHandler {\n    constructor(private _continueHandler: ContinueHandler) {}\n\n    handle(response: PaymentsAPIResponse, callbacks?: StepHandlerCallbacks): Promise<void> {\n        const { body } = response;\n\n        if (isSuccess(body)) {\n            return handleSuccess();\n        }\n\n        if (isContinue(body)) {\n            return this._continueHandler.handle(body, callbacks?.continue);\n        }\n\n        if (isFailure(response)) {\n            return handleFailure(response);\n        }\n\n        if (isError(response)) {\n            return handleError(response);\n        }\n\n        return handleUnsupported(response);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/success.spec.ts",
    "content": "import { handleSuccess, isSuccess, Success } from './success';\n\ndescribe('handleSuccess', () => {\n    it('resolves to undefined', async () => {\n        await expect(handleSuccess()).resolves.toBeUndefined();\n    });\n});\n\ndescribe('isSuccess', () => {\n    it('returns true when passed a valid success response', () => {\n        const successResponse: Success = {\n            type: 'success',\n        };\n\n        expect(isSuccess(successResponse)).toBe(true);\n    });\n\n    it('returns false when passed an invalid success response', () => {\n        const invalidResponse = {\n            type: 'anything',\n        };\n\n        expect(isSuccess(invalidResponse)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/success.ts",
    "content": "import { get } from 'lodash';\n\nimport { PaymentsAPIResponse } from '../ppsdk-payments-api-response';\n\nexport interface Success {\n    type: 'success';\n}\n\nexport const isSuccess = (body: PaymentsAPIResponse['body']): body is Success =>\n    get(body, 'type') === 'success';\n\nexport const handleSuccess = () => Promise.resolve();\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/unsupported.spec.ts",
    "content": "import { RequestError } from '../../../../common/error/errors';\n\nimport { handleUnsupported } from './unsupported';\n\ndescribe('handleUnsupported', () => {\n    it('rejects with RequestError', async () => {\n        const unsupportedResponse = {\n            body: {\n                type: 'continue',\n                code: 'not-supported',\n            },\n            status: 200,\n            statusText: '',\n            headers: [],\n        };\n\n        await expect(handleUnsupported(unsupportedResponse)).rejects.toBeInstanceOf(RequestError);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/step-handler/unsupported.ts",
    "content": "import { RequestError } from '../../../../common/error/errors';\nimport { PaymentsAPIResponse } from '../ppsdk-payments-api-response';\n\nexport const handleUnsupported = (response: PaymentsAPIResponse) =>\n    Promise.reject(new RequestError(response));\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/sub-strategies/card-sub-strategy.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\nimport { Observable, of } from 'rxjs';\n\nimport {\n    CheckoutRequestSender,\n    CheckoutStore,\n    CheckoutValidator,\n    createCheckoutStore,\n} from '../../../../checkout';\nimport { getCheckoutStoreState } from '../../../../checkout/checkouts.mock';\nimport { InvalidArgumentError, NotInitializedError } from '../../../../common/error/errors';\nimport { HostedFieldType, HostedForm, HostedFormFactory } from '../../../../hosted-form';\nimport {\n    LoadOrderSucceededAction,\n    OrderActionCreator,\n    OrderActionType,\n    OrderPaymentRequestBody,\n    OrderRequestSender,\n} from '../../../../order';\nimport { getOrder } from '../../../../order/orders.mock';\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../../../../spam-protection';\nimport { PaymentArgumentInvalidError } from '../../../errors';\nimport { PaymentInitializeOptions } from '../../../payment-request-options';\nimport { getPayment } from '../../../payments.mock';\nimport { createStepHandler } from '../step-handler';\n\nimport { CardSubStrategy } from './card-sub-strategy';\n\ndescribe('CardSubStrategy', () => {\n    const stepHandler = createStepHandler(\n        new FormPoster(),\n        new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n    );\n    const requestSender = createRequestSender();\n\n    let formFactory: HostedFormFactory;\n    let form: Pick<HostedForm, 'attach' | 'submit' | 'validate'>;\n    let initializeOptions: PaymentInitializeOptions;\n    let loadOrderAction: Observable<LoadOrderSucceededAction>;\n    let orderActionCreator: OrderActionCreator;\n    let store: CheckoutStore;\n    let cardSubStrategy: CardSubStrategy;\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreState());\n        orderActionCreator = new OrderActionCreator(\n            new OrderRequestSender(requestSender),\n            new CheckoutValidator(new CheckoutRequestSender(requestSender)),\n        );\n        formFactory = new HostedFormFactory(store);\n\n        cardSubStrategy = new CardSubStrategy(store, orderActionCreator, formFactory, stepHandler);\n\n        form = {\n            attach: jest.fn(() => Promise.resolve()),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            submit: jest.fn(() =>\n                Promise.resolve({ payload: { response: { body: { type: 'success' } } } }),\n            ),\n            validate: jest.fn(() => Promise.resolve()),\n        };\n        initializeOptions = {\n            creditCard: {\n                form: {\n                    fields: {\n                        [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                        [HostedFieldType.CardName]: { containerId: 'card-name' },\n                        [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                    },\n                },\n            },\n            methodId: 'cabbage_pay.card',\n        };\n        loadOrderAction = of(createAction(OrderActionType.LoadOrderSucceeded, getOrder()));\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(orderActionCreator, 'loadCurrentOrder').mockReturnValue(loadOrderAction);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(formFactory, 'create').mockReturnValue(form);\n\n        jest.spyOn(store, 'dispatch');\n    });\n\n    describe('initialize()', () => {\n        it('creates hosted form', async () => {\n            await cardSubStrategy.initialize(initializeOptions);\n\n            expect(formFactory.create).toHaveBeenCalledWith(\n                'https://bigpay.integration.zone',\n                // tslint:disable-next-line:no-non-null-assertion\n                initializeOptions.creditCard!.form,\n                store.getState().checkout.getCheckoutOrThrow().id,\n            );\n        });\n\n        it('attaches hosted form to container', async () => {\n            await cardSubStrategy.initialize(initializeOptions);\n\n            expect(form.attach).toHaveBeenCalled();\n        });\n\n        it('throws error form when fields does not exist', async () => {\n            initializeOptions = {\n                methodId: 'cabbage_pay.card',\n            };\n\n            try {\n                await cardSubStrategy.initialize(initializeOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n    });\n\n    describe('execute()', () => {\n        const payment = getPayment() as OrderPaymentRequestBody;\n\n        it('throws error if hosted form does not exist', async () => {\n            try {\n                // execute without initialization\n                await cardSubStrategy.execute({\n                    payment,\n                    methodId: 'cabbage_pay.card',\n                    bigpayBaseUrl: 'https://bigpay.integration.zone',\n                    token: 'abc',\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('throws error if payment data is missing', async () => {\n            try {\n                await cardSubStrategy.initialize(initializeOptions);\n                await cardSubStrategy.execute({\n                    payment: undefined,\n                    methodId: 'cabbage_pay.card',\n                    bigpayBaseUrl: 'https://bigpay.integration.zone',\n                    token: 'abc',\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('validates user input before submitting data', async () => {\n            await cardSubStrategy.initialize(initializeOptions);\n            await cardSubStrategy.execute({\n                payment,\n                methodId: 'cabbage_pay.card',\n                bigpayBaseUrl: 'https://bigpay.integration.zone',\n                token: 'abc',\n            });\n\n            expect(form.validate).toHaveBeenCalled();\n        });\n\n        it('does not submit payment data with hosted form if validation fails', async () => {\n            jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n            try {\n                await cardSubStrategy.initialize(initializeOptions);\n                await cardSubStrategy.execute({\n                    payment,\n                    methodId: 'cabbage_pay.card',\n                    bigpayBaseUrl: 'https://bigpay.integration.zone',\n                    token: 'abc',\n                });\n            } catch (error) {\n                expect(form.submit).not.toHaveBeenCalled();\n            }\n        });\n\n        it('submits payment data with hosted form', async () => {\n            await cardSubStrategy.initialize(initializeOptions);\n            await cardSubStrategy.execute({\n                payment,\n                methodId: 'cabbage_pay.card',\n                bigpayBaseUrl: 'https://bigpay.integration.zone',\n                token: 'abc',\n            });\n\n            expect(form.submit).toHaveBeenCalledWith(payment, undefined);\n        });\n\n        it('loads current order after payment submission', async () => {\n            await cardSubStrategy.initialize(initializeOptions);\n            await cardSubStrategy.execute({\n                payment,\n                methodId: 'cabbage_pay.card',\n                bigpayBaseUrl: 'https://bigpay.integration.zone',\n                token: 'abc',\n            });\n\n            expect(store.dispatch).toHaveBeenCalledWith(loadOrderAction);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/sub-strategies/card-sub-strategy.ts",
    "content": "import { CheckoutStore } from '../../../../checkout';\nimport {\n    InvalidArgumentError,\n    NotInitializedError,\n    NotInitializedErrorType,\n} from '../../../../common/error/errors';\nimport { HostedForm, HostedFormFactory } from '../../../../hosted-form';\nimport { OrderActionCreator } from '../../../../order';\nimport { PaymentArgumentInvalidError } from '../../../errors';\nimport PaymentAdditionalAction from '../../../payment-additional-action';\nimport { PaymentInitializeOptions } from '../../../payment-request-options';\nimport { SubStrategy, SubStrategySettings } from '../ppsdk-sub-strategy';\nimport { StepHandler } from '../step-handler';\n\nexport class CardSubStrategy implements SubStrategy {\n    protected _hostedForm?: HostedForm;\n\n    constructor(\n        private _store: CheckoutStore,\n        private _orderActionCreator: OrderActionCreator,\n        private _hostedFormFactory: HostedFormFactory,\n        private _ppsdkStepHandler: StepHandler,\n    ) {}\n\n    async execute(settings: SubStrategySettings): Promise<void> {\n        const form = this._hostedForm;\n\n        if (!form) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const { additionalAction, payment } = settings;\n\n        if (!payment || !payment.methodId) {\n            throw new PaymentArgumentInvalidError(['payment.methodId']);\n        }\n\n        await form.validate();\n\n        const { payload } = await form.submit(payment, additionalAction);\n\n        const { response } = payload;\n\n        const humanVerificationCallback = async (\n            additionalAction: PaymentAdditionalAction,\n        ): Promise<void> => this.execute({ additionalAction, ...settings });\n\n        await this._ppsdkStepHandler.handle(response, {\n            continue: {\n                humanVerification: humanVerificationCallback,\n            },\n        });\n\n        await this._store.dispatch(this._orderActionCreator.loadCurrentOrder());\n    }\n\n    async initialize(options?: PaymentInitializeOptions): Promise<void> {\n        const formOptions = options && options.creditCard && options.creditCard.form;\n        const { config, checkout } = this._store.getState();\n        const { paymentSettings: { bigpayBaseUrl: host = '' } = {} } =\n            config.getStoreConfig() || {};\n        const checkoutId = checkout.getCheckoutOrThrow().id;\n\n        if (!formOptions) {\n            throw new InvalidArgumentError();\n        }\n\n        const form = formOptions && this._hostedFormFactory.create(host, formOptions, checkoutId);\n\n        await form.attach();\n\n        this._hostedForm = form;\n    }\n\n    deinitialize(): void {\n        if (this._hostedForm) {\n            this._hostedForm.detach();\n        }\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/sub-strategies/index.ts",
    "content": "export { CardSubStrategy } from './card-sub-strategy';\nexport { NoneSubStrategy } from './none-sub-strategy';\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/sub-strategies/none-sub-strategy.spec.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { createSpamProtection, PaymentHumanVerificationHandler } from '../../../../spam-protection';\nimport { createStepHandler } from '../step-handler';\n\nimport { NoneSubStrategy } from './none-sub-strategy';\n\ndescribe('NoneSubStrategy', () => {\n    const requestSender = createRequestSender();\n    const stepHandler = createStepHandler(\n        new FormPoster(),\n        new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n    );\n    const noneSubStrategy = new NoneSubStrategy(requestSender, stepHandler);\n\n    describe('#execute', () => {\n        it('posts the Payment Method ID to the BigPay Payments endpoint', async () => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            const requestSenderSpy = jest.spyOn(requestSender, 'post').mockResolvedValue({});\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(stepHandler, 'handle').mockResolvedValue({});\n\n            await noneSubStrategy.execute({\n                methodId: 'some-id.some-method',\n                bigpayBaseUrl: 'https://some-domain.com',\n                token: 'some-token',\n            });\n\n            expect(requestSenderSpy).toHaveBeenCalledWith('https://some-domain.com/payments', {\n                body: { payment_method_id: 'some-id.some-method' },\n                credentials: false,\n                headers: {\n                    authorization: 'some-token',\n                    'X-XSRF-TOKEN': null,\n                },\n            });\n        });\n\n        it('passes the Payments endpoint response to the stepHandler', async () => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(requestSender, 'post').mockResolvedValue({ body: 'some-api-response' });\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            const stepHandlerSpy = jest.spyOn(stepHandler, 'handle').mockResolvedValue({});\n\n            await noneSubStrategy.execute({\n                methodId: 'some-id.some-method',\n                bigpayBaseUrl: 'https://some-domain.com',\n                token: 'some-token',\n            });\n\n            expect(stepHandlerSpy).toHaveBeenCalledWith({ body: 'some-api-response' });\n        });\n\n        it('returns the final value from the stepHandler', async () => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(requestSender, 'post').mockResolvedValue({});\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(stepHandler, 'handle').mockResolvedValue({ someValue: 12345 });\n\n            await expect(\n                noneSubStrategy.execute({\n                    methodId: 'some-id.some-method',\n                    bigpayBaseUrl: 'https://some-domain.com',\n                    token: 'some-token',\n                }),\n            ).resolves.toStrictEqual({ someValue: 12345 });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment/strategies/ppsdk/sub-strategies/none-sub-strategy.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport { PaymentsAPIResponse } from '../ppsdk-payments-api-response';\nimport { SubStrategy, SubStrategySettings } from '../ppsdk-sub-strategy';\nimport { StepHandler } from '../step-handler';\n\nexport class NoneSubStrategy implements SubStrategy {\n    constructor(private _requestSender: RequestSender, private _stepHandler: StepHandler) {}\n\n    execute({ methodId, bigpayBaseUrl, token }: SubStrategySettings): Promise<void> {\n        const body = { payment_method_id: methodId };\n        const options = {\n            credentials: false,\n            body,\n            headers: {\n                authorization: token,\n                'X-XSRF-TOKEN': null,\n            },\n        };\n\n        return this._requestSender\n            .post<PaymentsAPIResponse['body']>(`${bigpayBaseUrl}/payments`, options)\n            .then((response) => this._stepHandler.handle(response));\n    }\n\n    initialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    deinitialize(): void {}\n}\n"
  },
  {
    "path": "packages/core/src/payment-integration/create-payment-integration-selectors.spec.ts",
    "content": "import { merge } from 'lodash';\n\nimport { PaymentIntegrationSelectors } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { createInternalCheckoutSelectors, InternalCheckoutSelectors } from '../checkout';\nimport { getCheckoutStoreStateWithOrder } from '../checkout/checkouts.mock';\n\nimport createPaymentIntegrationSelectors from './create-payment-integration-selectors';\n\ndescribe('createPaymentIntegrationSelectors', () => {\n    describe('PaymentIntegrationSelectors', () => {\n        let subject: PaymentIntegrationSelectors;\n        let internalSelectors: InternalCheckoutSelectors;\n\n        beforeEach(() => {\n            internalSelectors = createInternalCheckoutSelectors(getCheckoutStoreStateWithOrder());\n            subject = createPaymentIntegrationSelectors(internalSelectors);\n        });\n\n        it('returns copy of billing address', () => {\n            const output = subject.getBillingAddress();\n\n            expect(output).toEqual(internalSelectors.billingAddress.getBillingAddress());\n            expect(output).not.toBe(internalSelectors.billingAddress.getBillingAddress());\n        });\n\n        it('throws if billing address is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    billingAddress: {\n                        getBillingAddressOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getBillingAddressOrThrow()).toThrow();\n        });\n\n        it('returns copy of cart', () => {\n            const output = subject.getCart();\n\n            expect(output).toEqual(internalSelectors.cart.getCart());\n            expect(output).not.toBe(internalSelectors.cart.getCart());\n        });\n\n        it('throws if cart is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    cart: {\n                        getCartOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getCartOrThrow()).toThrow();\n        });\n\n        it('returns copy of checkout', () => {\n            const output = subject.getCheckout();\n\n            expect(output).toEqual(internalSelectors.checkout.getCheckout());\n            expect(output).not.toBe(internalSelectors.checkout.getCheckout());\n        });\n\n        it('throws if checkout is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    checkout: {\n                        getCheckoutOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getCheckoutOrThrow()).toThrow();\n        });\n\n        it('returns copy of config', () => {\n            const output = subject.getStoreConfig();\n\n            expect(output).toEqual(internalSelectors.config.getStoreConfig());\n            expect(output).not.toBe(internalSelectors.config.getStoreConfig());\n        });\n\n        it('throws if config is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    config: {\n                        getStoreConfigOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getStoreConfigOrThrow()).toThrow();\n        });\n\n        it('returns config copy', () => {\n            const output = subject.getConfig();\n\n            expect(output).toEqual(internalSelectors.config.getConfig());\n            expect(output).not.toBe(internalSelectors.config.getConfig());\n        });\n\n        it('returns copy of consignments', () => {\n            const output = subject.getConsignments();\n\n            expect(output).toEqual(internalSelectors.consignments.getConsignments());\n            expect(output).not.toBe(internalSelectors.consignments.getConsignments());\n        });\n\n        it('throws if consignments are missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    consignments: {\n                        getConsignmentsOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getConsignmentsOrThrow()).toThrow();\n        });\n\n        it('returns copy of context config', () => {\n            const output = subject.getContextConfig();\n\n            expect(output).toEqual(internalSelectors.config.getContextConfig());\n            expect(output).not.toBe(internalSelectors.config.getContextConfig());\n        });\n\n        it('returns copy of countries', () => {\n            const output = subject.getCountries();\n\n            expect(output).toEqual(internalSelectors.countries.getCountries());\n            expect(output).not.toBe(internalSelectors.countries.getCountries());\n        });\n\n        it('returns copy of customer', () => {\n            const output = subject.getCustomer();\n\n            expect(output).toEqual(internalSelectors.customer.getCustomer());\n            expect(output).not.toBe(internalSelectors.customer.getCustomer());\n        });\n\n        it('throws if customer is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    customer: {\n                        getCustomerOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getCustomerOrThrow()).toThrow();\n        });\n\n        it('returns copy of card instrument', () => {\n            const output = subject.getCardInstrument('123');\n\n            expect(output).toEqual(internalSelectors.instruments.getCardInstrument('123'));\n            expect(output).not.toBe(internalSelectors.instruments.getCardInstrument('123'));\n        });\n\n        it('throws if card instrument is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    instruments: {\n                        getCardInstrumentOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getCardInstrumentOrThrow('123')).toThrow();\n        });\n\n        it('returns copy of order', () => {\n            const output = subject.getOrder();\n\n            expect(output).toEqual(internalSelectors.order.getOrder());\n            expect(output).not.toBe(internalSelectors.order.getOrder());\n        });\n\n        it('throws if order is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    order: {\n                        getOrderOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getOrderOrThrow()).toThrow();\n        });\n\n        it('returns copy of order meta', () => {\n            const output = subject.getOrderMeta();\n\n            expect(output).toEqual(internalSelectors.order.getOrderMeta());\n            expect(output).not.toBe(internalSelectors.order.getOrderMeta());\n        });\n\n        it('returns copy of order meta', () => {\n            const output = subject.getInstrumentsMeta();\n\n            expect(output).toEqual(internalSelectors.instruments.getInstrumentsMeta());\n            expect(output).not.toBe(internalSelectors.instruments.getInstrumentsMeta());\n        });\n\n        it('returns payment token', () => {\n            const output = subject.getPaymentToken();\n\n            expect(output).toEqual(internalSelectors.payment.getPaymentToken());\n        });\n\n        it('returns outstanding balance', () => {\n            const output = subject.getOutstandingBalance();\n\n            expect(output).toEqual(internalSelectors.checkout.getCheckout()?.outstandingBalance);\n        });\n\n        it('throws if payment token is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    payment: {\n                        getPaymentTokenOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getPaymentTokenOrThrow()).toThrow();\n        });\n\n        it('returns payment id', () => {\n            const output = subject.getPaymentId();\n\n            expect(output).toEqual(internalSelectors.payment.getPaymentId());\n        });\n\n        it('throws if payment id is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    payment: {\n                        getPaymentIdOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getPaymentIdOrThrow()).toThrow();\n        });\n\n        it('returns payment status', () => {\n            const output = subject.getPaymentStatus();\n\n            expect(output).toEqual(internalSelectors.payment.getPaymentStatus());\n        });\n\n        it('throws if payment status is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    payment: {\n                        getPaymentStatusOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getPaymentStatusOrThrow()).toThrow();\n        });\n\n        it('returns payment redirect URL', () => {\n            const output = subject.getPaymentRedirectUrl();\n\n            expect(output).toEqual(internalSelectors.payment.getPaymentRedirectUrl());\n        });\n\n        it('throws if payment redirect URL is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    payment: {\n                        getPaymentRedirectUrlOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getPaymentRedirectUrlOrThrow()).toThrow();\n        });\n\n        it('returns copy of payment method', () => {\n            const output = subject.getPaymentMethod('braintree');\n\n            expect(output).toEqual(internalSelectors.paymentMethods.getPaymentMethod('braintree'));\n            expect(output).not.toBe(internalSelectors.paymentMethods.getPaymentMethod('braintree'));\n        });\n\n        it('throws if payment method is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    paymentMethods: {\n                        getPaymentMethodOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getPaymentMethodOrThrow('braintree')).toThrow();\n        });\n\n        it('returns copy of payment method meta', () => {\n            const output = subject.getPaymentMethodsMeta();\n\n            expect(output).toEqual(internalSelectors.paymentMethods.getPaymentMethodsMeta());\n            expect(output).not.toBe(internalSelectors.paymentMethods.getPaymentMethodsMeta());\n        });\n\n        it('returns copy of shipping address', () => {\n            const output = subject.getShippingAddress();\n\n            expect(output).toEqual(internalSelectors.shippingAddress.getShippingAddress());\n            expect(output).not.toBe(internalSelectors.shippingAddress.getShippingAddress());\n        });\n\n        it('throws if shipping address is missing', () => {\n            subject = createPaymentIntegrationSelectors(\n                merge(internalSelectors, {\n                    shippingAddress: {\n                        getShippingAddressOrThrow: () => {\n                            throw new Error();\n                        },\n                    },\n                }),\n            );\n\n            expect(() => subject.getShippingAddressOrThrow()).toThrow();\n        });\n\n        it('returns copy of shipping countries', () => {\n            const output = subject.getShippingCountries();\n\n            expect(output).toEqual(internalSelectors.shippingCountries.getShippingCountries());\n            expect(output).not.toBe(internalSelectors.shippingCountries.getShippingCountries());\n        });\n\n        it('returns is payment data required', () => {\n            const output = subject.isPaymentDataRequired();\n\n            expect(output).toEqual(internalSelectors.payment.isPaymentDataRequired());\n        });\n\n        it('returns is payment data initialized', () => {\n            const output = subject.isPaymentMethodInitialized({ methodId: 'braintree' });\n\n            expect(output).toEqual(\n                internalSelectors.paymentStrategies.isInitialized({ methodId: 'braintree' }),\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment-integration/create-payment-integration-selectors.ts",
    "content": "import { PaymentIntegrationSelectors } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { cloneResult as clone } from '../common/utility';\n\nexport default function createPaymentIntegrationSelectors({\n    billingAddress: { getBillingAddress, getBillingAddressOrThrow },\n    cart: { getCart, getCartOrThrow, getLocale: getCartLocale },\n    checkout: { getCheckout, getCheckoutOrThrow, getOutstandingBalance },\n    config: {\n        getContextConfig,\n        getHost,\n        getLocale,\n        getStoreConfig,\n        getStoreConfigOrThrow,\n        getConfig,\n    },\n    consignments: { getConsignments, getConsignmentsOrThrow },\n    countries: { getCountries },\n    customer: { getCustomer, getCustomerOrThrow },\n    instruments: {\n        getCardInstrument,\n        getCardInstrumentOrThrow,\n        getInstruments,\n        getInstrumentsMeta,\n    },\n    order: { getOrder, getOrderOrThrow, getOrderMeta },\n    payment: {\n        getPaymentToken,\n        getPaymentTokenOrThrow,\n        getPaymentId,\n        getPaymentIdOrThrow,\n        getPaymentStatus,\n        getPaymentStatusOrThrow,\n        getPaymentRedirectUrl,\n        getPaymentRedirectUrlOrThrow,\n        isPaymentDataRequired,\n    },\n    paymentMethods: { getPaymentMethod, getPaymentMethodOrThrow, getPaymentMethodsMeta },\n    paymentProviderCustomer: { getPaymentProviderCustomer, getPaymentProviderCustomerOrThrow },\n    paymentStrategies: { isInitialized: isPaymentMethodInitialized },\n    shippingAddress: {\n        getShippingAddress,\n        getShippingAddressOrThrow,\n        getShippingAddresses,\n        getShippingAddressesOrThrow,\n    },\n    shippingCountries: { getShippingCountries },\n}: InternalCheckoutSelectors): PaymentIntegrationSelectors {\n    return {\n        getHost: clone(getHost),\n        getLocale: clone(getLocale),\n        getCartLocale: clone(getCartLocale),\n        getBillingAddress: clone(getBillingAddress),\n        getBillingAddressOrThrow: clone(getBillingAddressOrThrow),\n        getCart: clone(getCart),\n        getCartOrThrow: clone(getCartOrThrow),\n        getCheckout: clone(getCheckout),\n        getCheckoutOrThrow: clone(getCheckoutOrThrow),\n        getCountries: clone(getCountries),\n        getStoreConfig: clone(getStoreConfig),\n        getStoreConfigOrThrow: clone(getStoreConfigOrThrow),\n        getConfig: clone(getConfig),\n        getConsignments: clone(getConsignments),\n        getConsignmentsOrThrow: clone(getConsignmentsOrThrow),\n        getContextConfig: clone(getContextConfig),\n        getCustomer: clone(getCustomer),\n        getCustomerOrThrow: clone(getCustomerOrThrow),\n        getCardInstrument: clone(getCardInstrument),\n        getInstruments: clone(getInstruments),\n        getCardInstrumentOrThrow: clone(getCardInstrumentOrThrow),\n        getOrder: clone(getOrder),\n        getOrderOrThrow: clone(getOrderOrThrow),\n        getOrderMeta: clone(getOrderMeta),\n        getInstrumentsMeta: clone(getInstrumentsMeta),\n        getPaymentToken,\n        getPaymentTokenOrThrow,\n        getPaymentId,\n        getPaymentIdOrThrow,\n        getPaymentStatus,\n        getPaymentStatusOrThrow,\n        getPaymentRedirectUrl,\n        getPaymentRedirectUrlOrThrow,\n        getPaymentMethod: clone(getPaymentMethod),\n        getPaymentMethodOrThrow: clone(getPaymentMethodOrThrow),\n        getPaymentMethodsMeta: clone(getPaymentMethodsMeta),\n        getPaymentProviderCustomer: clone(getPaymentProviderCustomer),\n        getPaymentProviderCustomerOrThrow: clone(getPaymentProviderCustomerOrThrow),\n        getShippingAddress: clone(getShippingAddress),\n        getShippingAddressOrThrow: clone(getShippingAddressOrThrow),\n        getShippingAddresses: clone(getShippingAddresses),\n        getShippingAddressesOrThrow: clone(getShippingAddressesOrThrow),\n        getShippingCountries: clone(getShippingCountries),\n        getOutstandingBalance: clone(getOutstandingBalance),\n        isPaymentDataRequired,\n        isPaymentMethodInitialized,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/payment-integration/create-payment-integration-service.spec.ts",
    "content": "import { createCheckoutStore } from '../checkout';\n\nimport createPaymentIntegrationService from './create-payment-integration-service';\nimport DefaultPaymentIntegrationService from './default-payment-integration-service';\n\ndescribe('createPaymentIntegrationService', () => {\n    it('creates instance of PaymentIntegrationService', () => {\n        const instance = createPaymentIntegrationService(createCheckoutStore());\n\n        expect(instance).toBeInstanceOf(DefaultPaymentIntegrationService);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment-integration/create-payment-integration-service.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BillingAddressActionCreator, BillingAddressRequestSender } from '../billing';\nimport { CartRequestSender } from '../cart';\nimport {\n    CheckoutActionCreator,\n    CheckoutRequestSender,\n    CheckoutStore,\n    CheckoutValidator,\n} from '../checkout';\nimport { ConfigActionCreator, ConfigRequestSender } from '../config';\nimport CouponActionCreator from '../coupon/coupon-action-creator';\nimport CouponRequestSender from '../coupon/coupon-request-sender';\nimport { CustomerActionCreator, CustomerRequestSender } from '../customer';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../form';\nimport { HostedFormFactory } from '../hosted-form';\nimport { OrderActionCreator, OrderRequestSender } from '../order';\nimport {\n    B2BCompanyPaymentMethodRequestSender,\n    createPaymentClient,\n    PaymentActionCreator,\n    PaymentMethodActionCreator,\n    PaymentMethodRequestSender,\n    PaymentRequestSender,\n    PaymentRequestTransformer,\n} from '../payment';\nimport { PaymentProviderCustomerActionCreator } from '../payment-provider-customer';\nimport PaymentStrategyWidgetActionCreator from '../payment/payment-strategy-widget-action-creator';\nimport { RemoteCheckoutActionCreator, RemoteCheckoutRequestSender } from '../remote-checkout';\nimport {\n    ConsignmentActionCreator,\n    ConsignmentRequestSender,\n    ShippingCountryActionCreator,\n    ShippingCountryRequestSender,\n} from '../shipping';\nimport {\n    createSpamProtection,\n    PaymentHumanVerificationHandler,\n    SpamProtectionActionCreator,\n    SpamProtectionRequestSender,\n} from '../spam-protection';\nimport { StoreCreditActionCreator, StoreCreditRequestSender } from '../store-credit';\nimport { SubscriptionsActionCreator, SubscriptionsRequestSender } from '../subscription';\n\nimport createPaymentIntegrationSelectors from './create-payment-integration-selectors';\nimport DefaultPaymentIntegrationService from './default-payment-integration-service';\nimport PaymentIntegrationStoreProjectionFactory from './payment-integration-store-projection-factory';\n\nexport default function createPaymentIntegrationService(\n    store: CheckoutStore,\n    requestSender?: RequestSender,\n): PaymentIntegrationService {\n    const {\n        config: { getHost, getLocale },\n    } = store.getState();\n\n    if (!requestSender) {\n        requestSender = createRequestSender({ host: getHost() });\n    }\n\n    const storeProjectionFactory = new PaymentIntegrationStoreProjectionFactory(\n        createPaymentIntegrationSelectors,\n    );\n\n    const checkoutActionCreator = new CheckoutActionCreator(\n        new CheckoutRequestSender(requestSender),\n        new ConfigActionCreator(new ConfigRequestSender(requestSender)),\n        new FormFieldsActionCreator(new FormFieldsRequestSender(requestSender)),\n    );\n\n    const checkoutValidator = new CheckoutValidator(new CheckoutRequestSender(requestSender));\n\n    const hostedFormFactory = new HostedFormFactory(store);\n\n    const orderActionCreator = new OrderActionCreator(\n        new OrderRequestSender(requestSender),\n        new CheckoutValidator(new CheckoutRequestSender(requestSender)),\n    );\n\n    const billingAddressActionCreator = new BillingAddressActionCreator(\n        new BillingAddressRequestSender(requestSender),\n        new SubscriptionsActionCreator(new SubscriptionsRequestSender(requestSender)),\n    );\n\n    const consignmentActionCreator = new ConsignmentActionCreator(\n        new ConsignmentRequestSender(requestSender),\n        new CheckoutRequestSender(requestSender),\n    );\n\n    const paymentMethodActionCreator = new PaymentMethodActionCreator(\n        new PaymentMethodRequestSender(requestSender),\n        new B2BCompanyPaymentMethodRequestSender(requestSender),\n    );\n\n    const paymentActionCreator = new PaymentActionCreator(\n        new PaymentRequestSender(createPaymentClient(store)),\n        orderActionCreator,\n        new PaymentRequestTransformer(),\n        new PaymentHumanVerificationHandler(createSpamProtection(createScriptLoader())),\n    );\n\n    const paymentHumanVerificationHandler = new PaymentHumanVerificationHandler(\n        createSpamProtection(createScriptLoader()),\n    );\n\n    const customerActionCreator = new CustomerActionCreator(\n        new CustomerRequestSender(requestSender),\n        checkoutActionCreator,\n        new SpamProtectionActionCreator(\n            createSpamProtection(createScriptLoader()),\n            new SpamProtectionRequestSender(requestSender),\n        ),\n    );\n\n    const storeCreditActionCreator = new StoreCreditActionCreator(\n        new StoreCreditRequestSender(requestSender),\n    );\n\n    const applyCouponActionCreator = new CouponActionCreator(\n        new CouponRequestSender(requestSender),\n    );\n\n    const spamProtection = createSpamProtection(createScriptLoader());\n    const spamProtectionRequestSender = new SpamProtectionRequestSender(requestSender);\n    const spamProtectionActionCreator = new SpamProtectionActionCreator(\n        spamProtection,\n        spamProtectionRequestSender,\n    );\n\n    const cartRequestSender = new CartRequestSender(requestSender);\n\n    const paymentProviderCustomerActionCreator = new PaymentProviderCustomerActionCreator();\n\n    const shippingCountryActionCreator = new ShippingCountryActionCreator(\n        new ShippingCountryRequestSender(requestSender, { locale: getLocale() }),\n        store,\n    );\n\n    const remoteCheckoutActionCreator = new RemoteCheckoutActionCreator(\n        new RemoteCheckoutRequestSender(requestSender),\n        checkoutActionCreator,\n    );\n\n    const paymentStrategyWidgetActionCreator = new PaymentStrategyWidgetActionCreator();\n\n    return new DefaultPaymentIntegrationService(\n        store,\n        storeProjectionFactory,\n        checkoutActionCreator,\n        checkoutValidator,\n        hostedFormFactory,\n        orderActionCreator,\n        billingAddressActionCreator,\n        consignmentActionCreator,\n        paymentMethodActionCreator,\n        paymentActionCreator,\n        paymentHumanVerificationHandler,\n        customerActionCreator,\n        cartRequestSender,\n        storeCreditActionCreator,\n        applyCouponActionCreator,\n        spamProtectionActionCreator,\n        paymentProviderCustomerActionCreator,\n        shippingCountryActionCreator,\n        remoteCheckoutActionCreator,\n        paymentStrategyWidgetActionCreator,\n    );\n}\n"
  },
  {
    "path": "packages/core/src/payment-integration/default-payment-integration-service.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { noop } from 'lodash';\n\nimport {\n    HostedFieldType,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getBuyNowCartRequestBody,\n    getCheckout,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { BillingAddressActionCreator } from '../billing';\nimport { getBillingAddress } from '../billing/billing-addresses.mock';\nimport { CartRequestSender } from '../cart';\nimport {\n    CheckoutActionCreator,\n    CheckoutStore,\n    CheckoutValidator,\n    InternalCheckoutSelectors,\n} from '../checkout';\nimport { DataStoreProjection } from '../common/data-store';\nimport { getResponse } from '../common/http-request/responses.mock';\nimport { CouponActionCreator } from '../coupon';\nimport { CustomerActionCreator } from '../customer';\nimport { HostedForm, HostedFormFactory } from '../hosted-form';\nimport { OrderActionCreator } from '../order';\nimport { getOrder } from '../order/orders.mock';\nimport PaymentActionCreator from '../payment/payment-action-creator';\nimport PaymentMethodActionCreator from '../payment/payment-method-action-creator';\nimport PaymentStrategyWidgetActionCreator from '../payment/payment-strategy-widget-action-creator';\nimport { getPayment } from '../payment/payments.mock';\nimport { PaymentProviderCustomerActionCreator } from '../payment-provider-customer';\nimport { RemoteCheckoutActionCreator } from '../remote-checkout';\nimport { ConsignmentActionCreator, ShippingCountryActionCreator } from '../shipping';\nimport { getShippingAddress } from '../shipping/shipping-addresses.mock';\nimport { PaymentHumanVerificationHandler, SpamProtectionActionCreator } from '../spam-protection';\nimport { StoreCreditActionCreator } from '../store-credit';\n\nimport DefaultPaymentIntegrationService from './default-payment-integration-service';\nimport PaymentIntegrationStoreProjectionFactory from './payment-integration-store-projection-factory';\n\ndescribe('DefaultPaymentIntegrationService', () => {\n    let subject: PaymentIntegrationService;\n    let hostedFormFactory: HostedFormFactory;\n    let paymentIntegrationSelectors: PaymentIntegrationSelectors;\n    let requestSender: RequestSender;\n    let internalCheckoutSelectors: InternalCheckoutSelectors;\n    let store: Pick<CheckoutStore, 'dispatch' | 'getState'>;\n    let storeProjection: Pick<\n        DataStoreProjection<PaymentIntegrationSelectors>,\n        'getState' | 'subscribe'\n    >;\n    let storeProjectionFactory: Pick<PaymentIntegrationStoreProjectionFactory, 'create'>;\n    let checkoutActionCreator: Pick<\n        CheckoutActionCreator,\n        'loadCheckout' | 'loadCurrentCheckout' | 'loadDefaultCheckout'\n    >;\n    let checkoutValidator: Pick<CheckoutValidator, 'validate'>;\n    let orderActionCreator: Pick<\n        OrderActionCreator,\n        'submitOrder' | 'finalizeOrder' | 'loadCurrentOrder'\n    >;\n    let billingAddressActionCreator: Pick<BillingAddressActionCreator, 'updateAddress'>;\n    let consignmentActionCreator: Pick<\n        ConsignmentActionCreator,\n        'updateAddress' | 'selectShippingOption' | 'deleteConsignment'\n    >;\n    let paymentMethodActionCreator: Pick<\n        PaymentMethodActionCreator,\n        'loadPaymentMethod' | 'loadPaymentMethods'\n    >;\n    let paymentActionCreator: Pick<\n        PaymentActionCreator,\n        'submitPayment' | 'initializeOffsitePayment'\n    >;\n    let paymentHumanVerificationHandler: Pick<PaymentHumanVerificationHandler, 'handle'>;\n    let spamProtectionActionCreator: Pick<\n        SpamProtectionActionCreator,\n        'verifyCheckoutSpamProtection'\n    >;\n    let customerActionCreator: Pick<CustomerActionCreator, 'signInCustomer' | 'signOutCustomer'>;\n    let cartRequestSender: CartRequestSender;\n    let storeCreditActionCreator: Pick<StoreCreditActionCreator, 'applyStoreCredit'>;\n    let couponActionCreator: Pick<CouponActionCreator, 'applyCoupon' | 'removeCoupon'>;\n    let paymentProviderCustomerActionCreator: PaymentProviderCustomerActionCreator;\n    let shippingCountryActionCreator: Pick<ShippingCountryActionCreator, 'loadCountries'>;\n    let remoteCheckoutActionCreator: Pick<\n        RemoteCheckoutActionCreator,\n        'initializePayment' | 'forgetCheckout' | 'signOut'\n    >;\n    let paymentStrategyWidgetActionCreator: PaymentStrategyWidgetActionCreator;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        cartRequestSender = new CartRequestSender(requestSender);\n        hostedFormFactory = new HostedFormFactory(store as CheckoutStore);\n        paymentIntegrationSelectors = {\n            getCheckoutOrThrow: () => getCheckout(),\n        } as PaymentIntegrationSelectors;\n\n        internalCheckoutSelectors = {\n            order: {\n                getOrderOrThrow: () => getOrder(),\n            },\n            checkout: {\n                getCheckoutOrThrow: () => {\n                    return { ...getCheckout(), shouldExecuteSpamCheck: true };\n                },\n            },\n        } as InternalCheckoutSelectors;\n\n        store = {\n            dispatch: jest.fn(async () => internalCheckoutSelectors),\n            getState: jest.fn(() => internalCheckoutSelectors),\n        };\n\n        storeProjection = {\n            subscribe: jest.fn(() => noop),\n            getState: jest.fn(() => paymentIntegrationSelectors),\n        };\n\n        storeProjectionFactory = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            create: jest.fn(() => storeProjection),\n        };\n\n        checkoutActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            loadCheckout: jest.fn(async () => () => createAction('LOAD_CHECKOUT')),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            loadCurrentCheckout: jest.fn(async () => () => createAction('LOAD_CHECKOUT')),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            loadDefaultCheckout: jest.fn(async () => () => createAction('LOAD_CHECKOUT')),\n        };\n\n        checkoutValidator = {\n            validate: jest.fn(),\n        };\n\n        orderActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            submitOrder: jest.fn(async () => () => createAction('SUBMIT_ORDER')),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            finalizeOrder: jest.fn(async () => () => createAction('FINALIZE_ORDER')),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            loadCurrentOrder: jest.fn(async () => () => createAction('LOAD_CURRENT_ORDER')),\n        };\n\n        billingAddressActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            updateAddress: jest.fn(async () => () => createAction('UPDATE_BILLING_ADDRESS')),\n        };\n\n        consignmentActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            updateAddress: jest.fn(async () => () => createAction('UPDATE_CONSIGNMENT_ADDRESS')),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            selectShippingOption: jest.fn(async () => () => createAction('UPDATE_SHIPPING_OPTION')),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            deleteConsignment: jest.fn(async () => () => createAction('DELETE_CONSIGNMENT')),\n        };\n\n        paymentMethodActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            loadPaymentMethod: jest.fn(async () => () => createAction('LOAD_PAYMENT_METHOD')),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            loadPaymentMethods: jest.fn(async () => () => createAction('LOAD_PAYMENT_METHODS')),\n        };\n\n        paymentActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            submitPayment: jest.fn(async () => () => createAction('LOAD_PAYMENT_METHOD')),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            initializeOffsitePayment: jest.fn(\n                async () => () => createAction('INITIALIZE_OFFSITE_PAYMENT_REQUESTED'),\n            ),\n        };\n\n        customerActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            signInCustomer: jest.fn(async () => () => createAction('SIGN_IN_CUSTOMER')),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            signOutCustomer: jest.fn(async () => () => createAction('SIGN_OUT_CUSTOMER')),\n        };\n\n        storeCreditActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            applyStoreCredit: jest.fn(\n                async () => () => createAction('APPLY_STORE_CREDIT_REQUESTED'),\n            ),\n        };\n\n        couponActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            applyCoupon: jest.fn(async () => () => createAction('APPLY_COUPON_REQUESTED')),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            removeCoupon: jest.fn(async () => () => createAction('REMOVE_COUPON_REQUESTED')),\n        };\n\n        spamProtectionActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            verifyCheckoutSpamProtection: jest.fn(\n                async () => () => createAction('SPAM_PROTECTION_CHECKOUT_VERIFY_REQUESTED'),\n            ),\n        };\n\n        paymentProviderCustomerActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            updatePaymentProviderCustomer: jest.fn(\n                async () => () => createAction('UPDATE_PAYMENT_PROVIDER_CUSTOMER'),\n            ),\n        };\n\n        paymentHumanVerificationHandler = {\n            handle: jest.fn(),\n        };\n\n        shippingCountryActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            loadCountries: jest.fn(\n                async () => () => createAction('LOAD_SHIPPING_COUNTRIES_REQUESTED'),\n            ),\n        };\n\n        remoteCheckoutActionCreator = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            forgetCheckout: jest.fn(\n                async () => () => createAction('INITIALIZE_REMOTE_PAYMENT_REQUESTED'),\n            ),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            initializePayment: jest.fn(\n                async () => () => createAction('INITIALIZE_REMOTE_PAYMENT_REQUESTED'),\n            ),\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            signOut: jest.fn(async () => () => createAction('SIGN_OUT_REMOTE_CUSTOMER_REQUESTED')),\n        };\n\n        paymentStrategyWidgetActionCreator = {\n            widgetInteraction: jest.fn(),\n        };\n\n        subject = new DefaultPaymentIntegrationService(\n            store as CheckoutStore,\n            storeProjectionFactory as PaymentIntegrationStoreProjectionFactory,\n            checkoutActionCreator as CheckoutActionCreator,\n            checkoutValidator as CheckoutValidator,\n            hostedFormFactory,\n            orderActionCreator as OrderActionCreator,\n            billingAddressActionCreator as BillingAddressActionCreator,\n            consignmentActionCreator as ConsignmentActionCreator,\n            paymentMethodActionCreator as PaymentMethodActionCreator,\n            paymentActionCreator as PaymentActionCreator,\n            paymentHumanVerificationHandler as PaymentHumanVerificationHandler,\n            customerActionCreator as CustomerActionCreator,\n            cartRequestSender,\n            storeCreditActionCreator as StoreCreditActionCreator,\n            couponActionCreator as CouponActionCreator,\n            spamProtectionActionCreator as SpamProtectionActionCreator,\n            paymentProviderCustomerActionCreator,\n            shippingCountryActionCreator as ShippingCountryActionCreator,\n            remoteCheckoutActionCreator as RemoteCheckoutActionCreator,\n            paymentStrategyWidgetActionCreator,\n        );\n    });\n\n    describe('#loadCheckout', () => {\n        it('loads current checkout', async () => {\n            const output = await subject.loadCheckout();\n\n            expect(checkoutActionCreator.loadCurrentCheckout).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                checkoutActionCreator.loadCurrentCheckout(),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n\n        it('loads checkout by provided id', async () => {\n            const checkoutId = '1';\n            const output = await subject.loadCheckout(checkoutId);\n\n            expect(checkoutActionCreator.loadCheckout).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                checkoutActionCreator.loadCheckout(checkoutId),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#hostedForm', () => {\n        it('creates hosted form', async () => {\n            const output = await subject.createHostedForm('http://www.example.com', {\n                fields: {\n                    [HostedFieldType.CardCode]: { containerId: 'card-code' },\n                    [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                    [HostedFieldType.CardName]: { containerId: 'card-name' },\n                    [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                },\n            });\n\n            expect(output).toBeInstanceOf(HostedForm);\n        });\n    });\n\n    describe('#loadDefaultCheckout', () => {\n        it('loads current checkout', async () => {\n            const output = await subject.loadDefaultCheckout();\n\n            expect(checkoutActionCreator.loadDefaultCheckout).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                checkoutActionCreator.loadDefaultCheckout(),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#loadPaymentMethod', () => {\n        it('loads payment method', async () => {\n            const output = await subject.loadPaymentMethod('braintree');\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).toHaveBeenCalledWith(\n                'braintree',\n                undefined,\n            );\n            expect(store.dispatch).toHaveBeenCalledWith(\n                paymentMethodActionCreator.loadPaymentMethod('braintree', undefined),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n\n        it('loads payment method with params', async () => {\n            const output = await subject.loadPaymentMethod('bluesnapdirect', {\n                params: { method: 'cc' },\n            });\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).toHaveBeenCalledWith(\n                'bluesnapdirect',\n                { params: { method: 'cc' } },\n            );\n            expect(store.dispatch).toHaveBeenCalledWith(\n                paymentMethodActionCreator.loadPaymentMethod('bluesnapdirect', {\n                    params: { method: 'cc' },\n                }),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#loadPaymentMethods', () => {\n        it('loads payment methods', async () => {\n            const output = await subject.loadPaymentMethods();\n\n            expect(paymentMethodActionCreator.loadPaymentMethods).toHaveBeenCalledWith(undefined);\n            expect(store.dispatch).toHaveBeenCalledWith(\n                paymentMethodActionCreator.loadPaymentMethods(undefined),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n\n        it('loads payment method with params', async () => {\n            const output = await subject.loadPaymentMethods({ params: { method: 'cc' } });\n\n            expect(paymentMethodActionCreator.loadPaymentMethods).toHaveBeenCalledWith({\n                params: { method: 'cc' },\n            });\n            expect(store.dispatch).toHaveBeenCalledWith(\n                paymentMethodActionCreator.loadPaymentMethods({\n                    params: { method: 'cc' },\n                }),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#submitOrder', () => {\n        it('submits order', async () => {\n            const output = await subject.submitOrder();\n\n            expect(orderActionCreator.submitOrder).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(orderActionCreator.submitOrder());\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#submitPayment', () => {\n        it('submit payment', async () => {\n            const output = await subject.submitPayment(getPayment());\n\n            expect(paymentActionCreator.submitPayment).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                paymentActionCreator.submitPayment(getPayment()),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#initializeOffsitePayment', () => {\n        it('initializes offsite payment', async () => {\n            const config = {\n                methodId: 'test',\n            };\n            const output = await subject.initializeOffsitePayment(config);\n\n            expect(paymentActionCreator.initializeOffsitePayment).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                paymentActionCreator.initializeOffsitePayment(config),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#finalizeOrder', () => {\n        it('finalizes order', async () => {\n            const output = await subject.finalizeOrder();\n\n            expect(orderActionCreator.finalizeOrder).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                orderActionCreator.finalizeOrder(getOrder().orderId),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#updateBillingAddress', () => {\n        it('update billing address', async () => {\n            const output = await subject.updateBillingAddress(getBillingAddress());\n\n            expect(billingAddressActionCreator.updateAddress).toHaveBeenCalledWith(\n                getBillingAddress(),\n            );\n            expect(store.dispatch).toHaveBeenCalledWith(\n                billingAddressActionCreator.updateAddress(getBillingAddress()),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#updateShippingAddress', () => {\n        it('update shipping address', async () => {\n            const output = await subject.updateShippingAddress(getShippingAddress());\n\n            expect(consignmentActionCreator.updateAddress).toHaveBeenCalledWith(\n                getShippingAddress(),\n            );\n            expect(store.dispatch).toHaveBeenCalledWith(\n                consignmentActionCreator.updateAddress(getShippingAddress()),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#selectShippingOption', () => {\n        it('select shipping option', async () => {\n            const output = await subject.selectShippingOption('1', {});\n\n            expect(consignmentActionCreator.selectShippingOption).toHaveBeenCalledWith('1', {});\n            expect(store.dispatch).toHaveBeenCalledWith(\n                consignmentActionCreator.selectShippingOption('1', {}),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#signInCustomer', () => {\n        it('sign in customer', async () => {\n            const credentials = { email: 'test@test.com', password: '123' };\n            const output = await subject.signInCustomer(credentials, {});\n\n            expect(customerActionCreator.signInCustomer).toHaveBeenCalledWith(credentials, {});\n            expect(store.dispatch).toHaveBeenCalledWith(\n                customerActionCreator.signInCustomer(credentials, {}),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#signOutCustomer', () => {\n        it('sign out customer', async () => {\n            const output = await subject.signOutCustomer({});\n\n            expect(customerActionCreator.signOutCustomer).toHaveBeenCalledWith({});\n            expect(store.dispatch).toHaveBeenCalledWith(customerActionCreator.signOutCustomer({}));\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#verifyCheckoutSpamProtection', () => {\n        it('verify spam protection', async () => {\n            const output = await subject.verifyCheckoutSpamProtection();\n\n            expect(spamProtectionActionCreator.verifyCheckoutSpamProtection).toHaveBeenCalledWith();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                spamProtectionActionCreator.verifyCheckoutSpamProtection(),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#createBuyNowCart', () => {\n        it('creates buy now cart', async () => {\n            const buyNowCart = getBuyNowCart();\n            const buyNowCartRequestBody = getBuyNowCartRequestBody();\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(requestSender, 'post').mockReturnValue(getResponse(buyNowCart));\n            jest.spyOn(cartRequestSender, 'createBuyNowCart');\n\n            const output = await subject.createBuyNowCart(buyNowCartRequestBody);\n\n            expect(cartRequestSender.createBuyNowCart).toHaveBeenCalledWith(\n                buyNowCartRequestBody,\n                undefined,\n            );\n            expect(output).toEqual(buyNowCart);\n        });\n    });\n\n    describe('#applyStoreCredit', () => {\n        it('applies store credits', async () => {\n            const output = await subject.applyStoreCredit(true, {\n                params: {},\n            });\n\n            expect(storeCreditActionCreator.applyStoreCredit).toHaveBeenCalledWith(true, {\n                params: {},\n            });\n            expect(store.dispatch).toHaveBeenCalledWith(\n                storeCreditActionCreator.applyStoreCredit(true, {\n                    params: {},\n                }),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#applyCoupon', () => {\n        it('applies a coupon', async () => {\n            const coupon = 'some_coupon';\n            const output = await subject.applyCoupon(coupon, {\n                params: {},\n            });\n\n            expect(couponActionCreator.applyCoupon).toHaveBeenCalledWith(coupon, {\n                params: {},\n            });\n            expect(store.dispatch).toHaveBeenCalledWith(\n                couponActionCreator.applyCoupon(coupon, {\n                    params: {},\n                }),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#removeCoupon', () => {\n        it('removes a coupon', async () => {\n            const coupon = 'some_coupon';\n            const output = await subject.removeCoupon(coupon, {\n                params: {},\n            });\n\n            expect(couponActionCreator.removeCoupon).toHaveBeenCalledWith(coupon, {\n                params: {},\n            });\n            expect(store.dispatch).toHaveBeenCalledWith(\n                couponActionCreator.removeCoupon(coupon, {\n                    params: {},\n                }),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#loadCurrentOrder', () => {\n        it('loads current order', async () => {\n            const output = await subject.loadCurrentOrder();\n\n            expect(orderActionCreator.loadCurrentOrder).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(orderActionCreator.loadCurrentOrder());\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#loadShippingCountries', () => {\n        it('loads shipping countries', async () => {\n            const output = await subject.loadShippingCountries();\n\n            expect(shippingCountryActionCreator.loadCountries).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                shippingCountryActionCreator.loadCountries(),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#deleteConsignment', () => {\n        it('delete consignment', async () => {\n            const output = await subject.deleteConsignment('ID');\n\n            expect(consignmentActionCreator.deleteConsignment).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                consignmentActionCreator.deleteConsignment('ID'),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#initializePayment', () => {\n        it('initialize payment', async () => {\n            const output = await subject.initializePayment('methodId');\n\n            expect(remoteCheckoutActionCreator.initializePayment).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                remoteCheckoutActionCreator.initializePayment('methodId'),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#forgetCheckout', () => {\n        it('forgets checkout', async () => {\n            const output = await subject.forgetCheckout('methodId');\n\n            expect(remoteCheckoutActionCreator.forgetCheckout).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                remoteCheckoutActionCreator.forgetCheckout('methodId'),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#remoteCheckoutSignOut', () => {\n        it('remote checkout sign out', async () => {\n            const output = await subject.remoteCheckoutSignOut('methodId');\n\n            expect(remoteCheckoutActionCreator.signOut).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                remoteCheckoutActionCreator.signOut('methodId'),\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n\n    describe('#validateCheckout', () => {\n        it('validates checkout', async () => {\n            await subject.validateCheckout(getCheckout());\n\n            expect(checkoutValidator.validate).toHaveBeenCalled();\n        });\n    });\n\n    describe('#handle', () => {\n        it('handle payment human verification', async () => {\n            await subject.handlePaymentHumanVerification('methodId', 'key');\n\n            expect(paymentHumanVerificationHandler.handle).toHaveBeenCalled();\n        });\n    });\n\n    describe('#widgetInteraction', () => {\n        it('should dispatch widgetInteraction action', async () => {\n            const callbackFn = jest.fn();\n            const output = await subject.widgetInteraction(callbackFn);\n\n            expect(paymentStrategyWidgetActionCreator.widgetInteraction).toHaveBeenCalled();\n            expect(store.dispatch).toHaveBeenCalledWith(\n                paymentStrategyWidgetActionCreator.widgetInteraction(callbackFn),\n                { queueId: 'widgetInteraction' },\n            );\n            expect(output).toEqual(paymentIntegrationSelectors);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment-integration/default-payment-integration-service.ts",
    "content": "import {\n    BillingAddressRequestBody,\n    BuyNowCartRequestBody,\n    Cart,\n    HostedForm,\n    HostedFormOptions,\n    InitializeOffsitePaymentConfig,\n    OrderRequestBody,\n    Payment,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    RequestOptions,\n    ShippingAddressRequestBody,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { BillingAddressActionCreator } from '../billing';\nimport { CartRequestSender } from '../cart';\nimport { Checkout, CheckoutActionCreator, CheckoutStore, CheckoutValidator } from '../checkout';\nimport { DataStoreProjection } from '../common/data-store';\nimport CouponActionCreator from '../coupon/coupon-action-creator';\nimport { CustomerActionCreator, CustomerCredentials } from '../customer';\nimport { HostedFormFactory } from '../hosted-form';\nimport { OrderActionCreator } from '../order';\nimport { PaymentAdditionalAction } from '../payment';\nimport {\n    PaymentProviderCustomer,\n    PaymentProviderCustomerActionCreator,\n} from '../payment-provider-customer';\nimport PaymentActionCreator from '../payment/payment-action-creator';\nimport PaymentMethodActionCreator from '../payment/payment-method-action-creator';\nimport PaymentStrategyWidgetActionCreator from '../payment/payment-strategy-widget-action-creator';\nimport { RemoteCheckoutActionCreator } from '../remote-checkout';\nimport { InitializePaymentOptions } from '../remote-checkout/remote-checkout-request-sender';\nimport { ConsignmentActionCreator, ShippingCountryActionCreator } from '../shipping';\nimport { PaymentHumanVerificationHandler, SpamProtectionActionCreator } from '../spam-protection';\nimport { StoreCreditActionCreator } from '../store-credit';\n\nimport PaymentIntegrationStoreProjectionFactory from './payment-integration-store-projection-factory';\n\nexport default class DefaultPaymentIntegrationService implements PaymentIntegrationService {\n    private _storeProjection: DataStoreProjection<PaymentIntegrationSelectors>;\n\n    constructor(\n        private _store: CheckoutStore,\n        private _storeProjectionFactory: PaymentIntegrationStoreProjectionFactory,\n        private _checkoutActionCreator: CheckoutActionCreator,\n        private _checkoutValidator: CheckoutValidator,\n        private _hostedFormFactory: HostedFormFactory,\n        private _orderActionCreator: OrderActionCreator,\n        private _billingAddressActionCreator: BillingAddressActionCreator,\n        private _consignmentActionCreator: ConsignmentActionCreator,\n        private _paymentMethodActionCreator: PaymentMethodActionCreator,\n        private _paymentActionCreator: PaymentActionCreator,\n        private _paymentHumanVerificationHandler: PaymentHumanVerificationHandler,\n        private _customerActionCreator: CustomerActionCreator,\n        private _cartRequestSender: CartRequestSender,\n        private _storeCreditActionCreator: StoreCreditActionCreator,\n        private _couponActionCreator: CouponActionCreator,\n        private _spamProtectionActionCreator: SpamProtectionActionCreator,\n        private _paymentProviderCustomerActionCreator: PaymentProviderCustomerActionCreator,\n        private _shippingCountryActionCreator: ShippingCountryActionCreator,\n        private _remoteCheckoutActionCreator: RemoteCheckoutActionCreator,\n        private _paymentStrategyWidgetActionCreator: PaymentStrategyWidgetActionCreator,\n    ) {\n        this._storeProjection = this._storeProjectionFactory.create(this._store);\n    }\n\n    createHostedForm(host: string, options: HostedFormOptions): HostedForm {\n        const checkoutId = this._storeProjection.getState().getCheckoutOrThrow().id;\n\n        return this._hostedFormFactory.create(host, options, checkoutId);\n    }\n\n    subscribe(\n        subscriber: (state: PaymentIntegrationSelectors) => void,\n        ...filters: Array<(state: PaymentIntegrationSelectors) => unknown>\n    ): () => void {\n        return this._storeProjection.subscribe(subscriber, ...filters);\n    }\n\n    getState(): PaymentIntegrationSelectors {\n        return this._storeProjection.getState();\n    }\n\n    async initializeOffsitePayment(\n        initializeOffsitePaymentConfig: InitializeOffsitePaymentConfig,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(\n            this._paymentActionCreator.initializeOffsitePayment(initializeOffsitePaymentConfig),\n        );\n\n        return this._storeProjection.getState();\n    }\n\n    async loadCheckout(id?: string): Promise<PaymentIntegrationSelectors> {\n        if (id) {\n            await this._store.dispatch(this._checkoutActionCreator.loadCheckout(id));\n        } else {\n            await this._store.dispatch(this._checkoutActionCreator.loadCurrentCheckout());\n        }\n\n        return this._storeProjection.getState();\n    }\n\n    async loadDefaultCheckout(): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(this._checkoutActionCreator.loadDefaultCheckout());\n\n        return this._storeProjection.getState();\n    }\n\n    async loadPaymentMethod(\n        methodId: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(\n            this._paymentMethodActionCreator.loadPaymentMethod(methodId, options),\n        );\n\n        return this._storeProjection.getState();\n    }\n\n    async loadPaymentMethods(options?: RequestOptions): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(this._paymentMethodActionCreator.loadPaymentMethods(options));\n\n        return this._storeProjection.getState();\n    }\n\n    async submitOrder(\n        payload?: OrderRequestBody,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(this._orderActionCreator.submitOrder(payload, options));\n\n        return this._storeProjection.getState();\n    }\n\n    async submitPayment(payment: Payment): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(this._paymentActionCreator.submitPayment(payment));\n\n        return this._storeProjection.getState();\n    }\n\n    async finalizeOrder(options?: RequestOptions): Promise<PaymentIntegrationSelectors> {\n        const {\n            order: { getOrderOrThrow },\n        } = this._store.getState();\n\n        await this._store.dispatch(\n            this._orderActionCreator.finalizeOrder(getOrderOrThrow().orderId, options),\n        );\n\n        return this._storeProjection.getState();\n    }\n\n    async updateBillingAddress(\n        payload: BillingAddressRequestBody,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(this._billingAddressActionCreator.updateAddress(payload));\n\n        return this._storeProjection.getState();\n    }\n\n    async updateShippingAddress(\n        payload: ShippingAddressRequestBody,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(this._consignmentActionCreator.updateAddress(payload));\n\n        return this._storeProjection.getState();\n    }\n\n    async selectShippingOption(\n        id: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(\n            this._consignmentActionCreator.selectShippingOption(id, options),\n        );\n\n        return this._storeProjection.getState();\n    }\n\n    async signInCustomer(\n        credentials: CustomerCredentials,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(\n            this._customerActionCreator.signInCustomer(credentials, options),\n        );\n\n        return this._storeProjection.getState();\n    }\n\n    async signOutCustomer(options?: RequestOptions): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(this._customerActionCreator.signOutCustomer(options));\n\n        return this._storeProjection.getState();\n    }\n\n    async createBuyNowCart(\n        buyNowCartRequestBody: BuyNowCartRequestBody,\n        options?: RequestOptions,\n    ): Promise<Cart> {\n        const { body: buyNowCart } = await this._cartRequestSender.createBuyNowCart(\n            buyNowCartRequestBody,\n            options,\n        );\n\n        return buyNowCart;\n    }\n\n    async applyStoreCredit(\n        useStoreCredit: boolean,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(\n            this._storeCreditActionCreator.applyStoreCredit(useStoreCredit, options),\n        );\n\n        return this._storeProjection.getState();\n    }\n\n    async applyCoupon(\n        coupon: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(this._couponActionCreator.applyCoupon(coupon, options));\n\n        return this._storeProjection.getState();\n    }\n\n    async removeCoupon(\n        coupon: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(this._couponActionCreator.removeCoupon(coupon, options));\n\n        return this._storeProjection.getState();\n    }\n\n    async verifyCheckoutSpamProtection(): Promise<PaymentIntegrationSelectors> {\n        const { checkout } = this._store.getState();\n        const { shouldExecuteSpamCheck } = checkout.getCheckoutOrThrow();\n\n        if (shouldExecuteSpamCheck) {\n            await this._store.dispatch(\n                this._spamProtectionActionCreator.verifyCheckoutSpamProtection(),\n            );\n        }\n\n        return this._storeProjection.getState();\n    }\n\n    async loadCurrentOrder(options?: RequestOptions): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(this._orderActionCreator.loadCurrentOrder(options));\n\n        return this._storeProjection.getState();\n    }\n\n    async updatePaymentProviderCustomer(\n        paymentProviderCustomer: PaymentProviderCustomer,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(\n            this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer(\n                paymentProviderCustomer,\n            ),\n        );\n\n        return this._storeProjection.getState();\n    }\n\n    async loadShippingCountries(options?: RequestOptions): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(this._shippingCountryActionCreator.loadCountries(options));\n\n        return this._storeProjection.getState();\n    }\n\n    async deleteConsignment(\n        consignmentId: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(\n            this._consignmentActionCreator.deleteConsignment(consignmentId, options),\n        );\n\n        return this._storeProjection.getState();\n    }\n\n    async initializePayment(\n        methodId: string,\n        params?: InitializePaymentOptions,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(\n            this._remoteCheckoutActionCreator.initializePayment(methodId, params, options),\n        );\n\n        return this._storeProjection.getState();\n    }\n\n    async forgetCheckout(\n        methodId: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(\n            this._remoteCheckoutActionCreator.forgetCheckout(methodId, options),\n        );\n\n        return this._storeProjection.getState();\n    }\n\n    async remoteCheckoutSignOut(\n        methodId: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(this._remoteCheckoutActionCreator.signOut(methodId, options));\n\n        return this._storeProjection.getState();\n    }\n\n    async validateCheckout(checkout?: Checkout, options?: RequestOptions): Promise<void> {\n        await this._checkoutValidator.validate(checkout, options);\n    }\n\n    async handlePaymentHumanVerification(\n        errorOrId: Error | string,\n        key?: string,\n    ): Promise<PaymentAdditionalAction> {\n        if (typeof errorOrId === 'string') {\n            return this._paymentHumanVerificationHandler.handle(errorOrId, key ?? '');\n        }\n\n        return this._paymentHumanVerificationHandler.handle(errorOrId);\n    }\n\n    async widgetInteraction(\n        callback: () => Promise<unknown>,\n    ): Promise<PaymentIntegrationSelectors> {\n        await this._store.dispatch(\n            this._paymentStrategyWidgetActionCreator.widgetInteraction(callback),\n            { queueId: 'widgetInteraction' },\n        );\n\n        return this._storeProjection.getState();\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment-integration/index.ts",
    "content": "export { default as createPaymentIntegrationService } from './create-payment-integration-service';\nexport { registerIntegrations } from './register-integrations';\n"
  },
  {
    "path": "packages/core/src/payment-integration/payment-integration-store-projection-factory.spec.ts",
    "content": "import { ReadableDataStore } from '@bigcommerce/data-store';\n\nimport { PaymentIntegrationSelectors } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { createCheckoutStore, InternalCheckoutSelectors } from '../checkout';\n\nimport createPaymentIntegrationSelectors from './create-payment-integration-selectors';\nimport PaymentIntegrationStoreProjectionFactory from './payment-integration-store-projection-factory';\n\ndescribe('PaymentIntegrationStoreProjectionFactory', () => {\n    let subject: PaymentIntegrationStoreProjectionFactory;\n    let store: ReadableDataStore<InternalCheckoutSelectors>;\n    let selectors: PaymentIntegrationSelectors;\n    let transformer: (selectors: InternalCheckoutSelectors) => PaymentIntegrationSelectors;\n\n    beforeEach(() => {\n        store = createCheckoutStore();\n        selectors = createPaymentIntegrationSelectors(store.getState());\n        transformer = jest.fn(() => selectors);\n        subject = new PaymentIntegrationStoreProjectionFactory(transformer);\n    });\n\n    describe('#create', () => {\n        it('returns data store projection that returns payment integration selectors', () => {\n            const output = subject.create(store);\n\n            expect(output.getState()).toEqual(selectors);\n        });\n\n        it('returns data store projection that notifies subscribers with payment integration selectors', () => {\n            const store = createCheckoutStore();\n            const output = subject.create(store);\n            const subscriber = jest.fn();\n\n            output.subscribe(subscriber);\n            output.notifyState();\n\n            expect(subscriber).toHaveBeenCalledWith(selectors);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment-integration/payment-integration-store-projection-factory.ts",
    "content": "import { PaymentIntegrationSelectors } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { InternalCheckoutSelectors, ReadableCheckoutStore } from '../checkout';\nimport { createDataStoreProjection, DataStoreProjection } from '../common/data-store';\n\nexport default class PaymentIntegrationStoreProjectionFactory {\n    constructor(\n        private _transformSelectors: (\n            selectors: InternalCheckoutSelectors,\n        ) => PaymentIntegrationSelectors,\n    ) {}\n\n    create(store: ReadableCheckoutStore): DataStoreProjection<PaymentIntegrationSelectors> {\n        return createDataStoreProjection(store, this._transformSelectors);\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment-integration/register-integrations.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { ResolveIdRegistry } from '../common/registry';\n\nimport { registerIntegrations, StrategyFactory } from './register-integrations';\n\nclass MockStrategy {\n    constructor(private _service: PaymentIntegrationService) {}\n\n    getService() {\n        return this._service;\n    }\n}\n\ndescribe('registerIntegrations', () => {\n    let registry: ResolveIdRegistry<MockStrategy, { id: string; type?: string }>;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let mockFactory: StrategyFactory<MockStrategy>;\n    let anotherMockFactory: StrategyFactory<MockStrategy>;\n    let mockStrategy: MockStrategy;\n    let anotherMockStrategy: MockStrategy;\n\n    beforeEach(() => {\n        registry = new ResolveIdRegistry(true);\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        mockFactory = Object.assign(\n            (service: PaymentIntegrationService) => {\n                mockStrategy = new MockStrategy(service);\n\n                return mockStrategy;\n            },\n            { resolveIds: [{ id: 'mock-strategy' }] },\n        );\n\n        anotherMockFactory = Object.assign(\n            (service: PaymentIntegrationService) => {\n                anotherMockStrategy = new MockStrategy(service);\n\n                return anotherMockStrategy;\n            },\n            { resolveIds: [{ id: 'another-strategy' }] },\n        );\n    });\n\n    describe('when registering integrations', () => {\n        it('should register resolvable integrations in the registry', () => {\n            const integrations = [mockFactory, anotherMockFactory];\n\n            registerIntegrations(registry, integrations, paymentIntegrationService);\n\n            const registeredStrategy = registry.get({ id: 'mock-strategy' });\n            const anotherRegisteredStrategy = registry.get({ id: 'another-strategy' });\n\n            expect(registeredStrategy).toBe(mockStrategy);\n            expect(anotherRegisteredStrategy).toBe(anotherMockStrategy);\n        });\n\n        it('should skip registration if a factory is already registered for the same resolve ID', () => {\n            const originalFactory = mockFactory;\n            const duplicateFactory = Object.assign(\n                (service: PaymentIntegrationService) => new MockStrategy(service),\n                { resolveIds: [{ id: 'mock-strategy' }] },\n            );\n\n            registerIntegrations(registry, [originalFactory], paymentIntegrationService);\n            registerIntegrations(registry, [duplicateFactory], paymentIntegrationService);\n\n            const registeredStrategy = registry.get({ id: 'mock-strategy' });\n\n            expect(registeredStrategy).toBe(mockStrategy);\n        });\n\n        it('should do exact match when determining if registration if needed', () => {\n            const defaultFactory = Object.assign(\n                (service: PaymentIntegrationService) => new MockStrategy(service),\n                { resolveIds: [{ default: true }] },\n            );\n            const anotherMockFactory = Object.assign(\n                (service: PaymentIntegrationService) => {\n                    anotherMockStrategy = new MockStrategy(service);\n\n                    return anotherMockStrategy;\n                },\n                { resolveIds: [{ id: 'mock-strategy', type: 'mock-type' }] },\n            );\n\n            registerIntegrations(registry, [defaultFactory], paymentIntegrationService);\n            registerIntegrations(registry, [mockFactory], paymentIntegrationService);\n            registerIntegrations(registry, [anotherMockFactory], paymentIntegrationService);\n\n            expect(registry.get({ id: 'mock-strategy' })).toBe(mockStrategy);\n            expect(registry.get({ id: 'mock-strategy', type: 'mock-type' })).toBe(\n                anotherMockStrategy,\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/payment-integration/register-integrations.ts",
    "content": "import {\n    isResolvableModule,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ResolveIdRegistry } from '../common/registry';\n\nexport type StrategyFactory<TStrategy> = (\n    paymentIntegrationService: PaymentIntegrationService,\n) => TStrategy;\n\nexport function registerIntegrations<TStrategy, TResolveId extends { [key: string]: unknown }>(\n    registry: ResolveIdRegistry<TStrategy, TResolveId>,\n    integrations: Array<StrategyFactory<TStrategy>>,\n    paymentIntegrationService: PaymentIntegrationService,\n): void {\n    integrations.forEach((factory) => {\n        if (!isResolvableModule<StrategyFactory<TStrategy>, TResolveId>(factory)) {\n            return;\n        }\n\n        factory.resolveIds.forEach((resolveId) => {\n            if (registry.getFactory(resolveId, true)) {\n                return;\n            }\n\n            registry.register(resolveId, () => factory(paymentIntegrationService));\n        });\n    });\n}\n"
  },
  {
    "path": "packages/core/src/payment-provider-customer/index.ts",
    "content": "export { PaymentProviderCustomer } from './payment-provider-customer';\nexport {\n    PaymentProviderCustomerType,\n    PaymentProviderCustomerAction,\n    UpdatePaymentProviderCustomerAction,\n} from './payment-provider-customer-actions';\nexport { default as PaymentProviderCustomerActionCreator } from './payment-provider-customer-actions-creator';\nexport { default as paymentProviderCustomerReducer } from './payment-provider-customer-reducer';\nexport {\n    default as PaymentProviderCustomerSelector,\n    createPaymentProviderCustomerSelectorFactory,\n    PaymentProviderCustomerSelectorFactory,\n} from './payment-provider-customer-selector';\nexport {\n    default as PaymentProviderCustomerState,\n    DEFAULT_STATE,\n} from './payment-provider-customer-state';\n"
  },
  {
    "path": "packages/core/src/payment-provider-customer/payment-provider-customer-actions-creator.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { Observable, of } from 'rxjs';\n\nimport { PaymentProviderCustomer } from './payment-provider-customer';\nimport {\n    PaymentProviderCustomerAction,\n    PaymentProviderCustomerType,\n} from './payment-provider-customer-actions';\n\nexport default class PaymentProviderCustomerActionCreator {\n    updatePaymentProviderCustomer(\n        providerCustomerData: PaymentProviderCustomer,\n    ): Observable<PaymentProviderCustomerAction> {\n        return of(\n            createAction(\n                PaymentProviderCustomerType.UpdatePaymentProviderCustomer,\n                providerCustomerData,\n            ),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment-provider-customer/payment-provider-customer-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nexport enum PaymentProviderCustomerType {\n    UpdatePaymentProviderCustomer = 'UPDATE_PAYMENT_PROVIDER_CUSTOMER',\n}\n\nexport type PaymentProviderCustomerAction = UpdatePaymentProviderCustomerAction;\n\nexport interface UpdatePaymentProviderCustomerAction extends Action {\n    type: PaymentProviderCustomerType.UpdatePaymentProviderCustomer;\n}\n"
  },
  {
    "path": "packages/core/src/payment-provider-customer/payment-provider-customer-reducer.ts",
    "content": "import { combineReducers } from '@bigcommerce/data-store';\n\nimport { objectMerge } from '../common/utility';\n\nimport { PaymentProviderCustomer } from './payment-provider-customer';\nimport {\n    PaymentProviderCustomerType,\n    UpdatePaymentProviderCustomerAction,\n} from './payment-provider-customer-actions';\nimport PaymentProviderCustomerState, { DEFAULT_STATE } from './payment-provider-customer-state';\n\ntype ReducerActionType = UpdatePaymentProviderCustomerAction;\n\nexport default function paymentProviderCustomerReducer(\n    state: PaymentProviderCustomerState = DEFAULT_STATE,\n    action: ReducerActionType,\n): PaymentProviderCustomerState {\n    const reducer = combineReducers<PaymentProviderCustomerState, ReducerActionType>({\n        data: dataReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: PaymentProviderCustomer = DEFAULT_STATE.data,\n    action: ReducerActionType,\n): PaymentProviderCustomer {\n    switch (action.type) {\n        case PaymentProviderCustomerType.UpdatePaymentProviderCustomer:\n            return objectMerge(data, action.payload);\n\n        default:\n            return data;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/payment-provider-customer/payment-provider-customer-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport { PaymentProviderCustomer } from './payment-provider-customer';\nimport PaymentProviderCustomerState, { DEFAULT_STATE } from './payment-provider-customer-state';\n\nexport default interface PaymentProviderCustomerSelector {\n    getPaymentProviderCustomer(): PaymentProviderCustomer | undefined;\n    getPaymentProviderCustomerOrThrow(): PaymentProviderCustomer;\n}\n\nexport type PaymentProviderCustomerSelectorFactory = (\n    state: PaymentProviderCustomerState,\n) => PaymentProviderCustomerSelector;\n\nexport function createPaymentProviderCustomerSelectorFactory(): PaymentProviderCustomerSelectorFactory {\n    const getPaymentProviderCustomer = createSelector(\n        (state: PaymentProviderCustomerState) => state.data,\n        (data) => () => data,\n    );\n\n    const getPaymentProviderCustomerOrThrow = createSelector(\n        getPaymentProviderCustomer,\n        (getPaymentProviderCustomer) => () => {\n            return guard(\n                getPaymentProviderCustomer(),\n                () => new MissingDataError(MissingDataErrorType.MissingPaymentProviderCustomer),\n            );\n        },\n    );\n\n    return memoizeOne(\n        (state: PaymentProviderCustomerState = DEFAULT_STATE): PaymentProviderCustomerSelector => {\n            return {\n                getPaymentProviderCustomer: getPaymentProviderCustomer(state),\n                getPaymentProviderCustomerOrThrow: getPaymentProviderCustomerOrThrow(state),\n            };\n        },\n    );\n}\n"
  },
  {
    "path": "packages/core/src/payment-provider-customer/payment-provider-customer-state.ts",
    "content": "import { PaymentProviderCustomer } from './payment-provider-customer';\n\nexport default interface PaymentProviderCustomerState {\n    data: PaymentProviderCustomer;\n}\n\nexport const DEFAULT_STATE = {\n    data: {},\n};\n"
  },
  {
    "path": "packages/core/src/payment-provider-customer/payment-provider-customer.ts",
    "content": "import { PaymentProviderCustomer as PaymentProviderCustomerType } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport type PaymentProviderCustomer = PaymentProviderCustomerType;\n"
  },
  {
    "path": "packages/core/src/promotion/index.ts",
    "content": "export { default as mapToDiscountNotifications } from './map-to-discount-notifications';\nexport { default as Promotion } from './promotion';\n"
  },
  {
    "path": "packages/core/src/promotion/map-to-discount-notifications.ts",
    "content": "import { DiscountNotification } from '../discount';\n\nimport { Promotion } from '.';\n\nexport default function mapToDiscountNotifications(\n    promotions?: Promotion[],\n): DiscountNotification[] {\n    const notifications: DiscountNotification[] = [];\n\n    (promotions || []).forEach((promotion) => {\n        (promotion.banners || []).forEach((banner) => {\n            notifications.push({\n                placeholders: [],\n                discountType: null,\n                message: '',\n                messageHtml: banner.text,\n            });\n        });\n    });\n\n    return notifications;\n}\n"
  },
  {
    "path": "packages/core/src/promotion/promotion.ts",
    "content": "export default interface Promotion {\n    banners: Banner[];\n}\n\nexport interface Banner {\n    type: string;\n    text: string;\n}\n"
  },
  {
    "path": "packages/core/src/quote/index.ts",
    "content": "export { default as InternalQuote } from './internal-quote';\n\nexport { default as mapToInternalQuote } from './map-to-internal-quote';\n"
  },
  {
    "path": "packages/core/src/quote/internal-quote.ts",
    "content": "import { InternalAddress } from '../address';\n\nexport default interface InternalQuote {\n    orderComment: string;\n    shippingOption?: string;\n    billingAddress: InternalAddress;\n    shippingAddress?: InternalAddress;\n}\n"
  },
  {
    "path": "packages/core/src/quote/internal-quotes.mock.ts",
    "content": "import InternalQuote from './internal-quote';\n\nexport function getQuote(): InternalQuote {\n    return {\n        orderComment: 'comment',\n        shippingOption: '0:61d4bb52f746477e1d4fb411221318c3',\n        shippingAddress: {\n            id: '55c96cda6f04c',\n            firstName: 'Test',\n            lastName: 'Tester',\n            company: 'Bigcommerce',\n            addressLine1: '12345 Testing Way',\n            addressLine2: '',\n            city: 'Some City',\n            province: 'California',\n            provinceCode: 'CA',\n            postCode: '95555',\n            country: 'United States',\n            countryCode: 'US',\n            phone: '555-555-5555',\n            customFields: [],\n        },\n        billingAddress: {\n            id: '55c96cda6f04c',\n            firstName: 'Test',\n            lastName: 'Tester',\n            company: 'Bigcommerce',\n            addressLine1: '12345 Testing Way',\n            addressLine2: '',\n            city: 'Some City',\n            province: 'California',\n            provinceCode: 'CA',\n            postCode: '95555',\n            country: 'United States',\n            countryCode: 'US',\n            phone: '555-555-5555',\n            customFields: [],\n        },\n    };\n}\n"
  },
  {
    "path": "packages/core/src/quote/map-to-internal-quote.spec.ts",
    "content": "import { getCheckout } from '../checkout/checkouts.mock';\nimport { getShippingAddress } from '../shipping/shipping-addresses.mock';\n\nimport { getQuote as getInternalQuote } from './internal-quotes.mock';\nimport mapToInternalQuote from './map-to-internal-quote';\n\ndescribe('mapToInternalQuote()', () => {\n    it('maps to internal quote', () => {\n        expect(mapToInternalQuote(getCheckout(), getShippingAddress())).toEqual(getInternalQuote());\n    });\n});\n"
  },
  {
    "path": "packages/core/src/quote/map-to-internal-quote.ts",
    "content": "import { Address, InternalAddress, mapToInternalAddress } from '../address';\nimport { Checkout } from '../checkout';\n\nimport InternalQuote from './internal-quote';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalQuote(\n    checkout: Checkout,\n    shippingAddress?: Address,\n): InternalQuote {\n    const consignment = checkout.consignments && checkout.consignments[0];\n\n    return {\n        orderComment: checkout.customerMessage,\n        shippingOption:\n            consignment && consignment.selectedShippingOption\n                ? consignment.selectedShippingOption.id\n                : undefined,\n        billingAddress: checkout.billingAddress\n            ? mapToInternalAddress(checkout.billingAddress)\n            : ({} as InternalAddress),\n        shippingAddress:\n            shippingAddress && mapToInternalAddress(shippingAddress, checkout.consignments),\n    };\n}\n"
  },
  {
    "path": "packages/core/src/remote-checkout/errors/index.ts",
    "content": "export { default as RemoteCheckoutSynchronizationError } from './remote-checkout-synchronization-error';\n"
  },
  {
    "path": "packages/core/src/remote-checkout/errors/remote-checkout-synchronization-error.spec.ts",
    "content": "import RemoteCheckoutSynchronizationError from './remote-checkout-synchronization-error';\n\ndescribe('RemoteCheckoutSynchronizationError', () => {\n    it('returns error name', () => {\n        const error = new RemoteCheckoutSynchronizationError();\n\n        expect(error.name).toBe('RemoteCheckoutSynchronizationError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/remote-checkout/errors/remote-checkout-synchronization-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if we are unable to synchronize the checkout details of a\n * shopper with a hosted / remote checkout provider (i.e.: Amazon).\n */\nexport default class RemoteCheckoutSynchronizationError extends StandardError {\n    constructor(public error?: Error) {\n        super(\n            'Unable to synchronize your checkout details with a third party provider. Please try again later.',\n        );\n\n        this.name = 'RemoteCheckoutSynchronizationError';\n        this.type = 'remote_checkout_synchronization';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/remote-checkout/index.ts",
    "content": "export * from './remote-checkout-actions';\n\nexport { default as RemoteCheckoutActionCreator } from './remote-checkout-action-creator';\nexport { default as RemoteCheckoutRequestSender } from './remote-checkout-request-sender';\nexport {\n    default as RemoteCheckoutSelector,\n    RemoteCheckoutSelectorFactory,\n    createRemoteCheckoutSelectorFactory,\n} from './remote-checkout-selector';\nexport { default as RemoteCheckoutState, RemoteCheckoutStateData } from './remote-checkout-state';\nexport { default as remoteCheckoutReducer } from './remote-checkout-reducer';\nexport { default as RemoteCheckout } from './remote-checkout';\n"
  },
  {
    "path": "packages/core/src/remote-checkout/methods/amazon-pay-remote-checkout.ts",
    "content": "import { InternalAddress } from '../../address';\n\nexport default interface AmazonPayRemoteCheckout {\n    referenceId?: string;\n    billing?: {\n        address?: InternalAddress | false;\n    };\n    shipping?: {\n        address?: InternalAddress | false;\n    };\n    settings?: {\n        billing: string;\n        billingMessage: string;\n        customer: string;\n        payment: string;\n        provider: string;\n        shipping: string;\n    };\n}\n"
  },
  {
    "path": "packages/core/src/remote-checkout/methods/index.ts",
    "content": "export { default as AmazonPayRemoteCheckout } from './amazon-pay-remote-checkout';\n"
  },
  {
    "path": "packages/core/src/remote-checkout/remote-checkout-action-creator.spec.ts",
    "content": "import { createRequestSender, createTimeout, RequestSender } from '@bigcommerce/request-sender';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { CheckoutActionCreator, CheckoutRequestSender } from '../checkout';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\nimport { ConfigActionCreator, ConfigRequestSender } from '../config';\nimport { FormFieldsActionCreator, FormFieldsRequestSender } from '../form';\n\nimport RemoteCheckoutActionCreator from './remote-checkout-action-creator';\nimport { RemoteCheckoutActionType } from './remote-checkout-actions';\nimport RemoteCheckoutRequestSender from './remote-checkout-request-sender';\nimport {\n    getRemoteBillingResponseBody,\n    getRemotePaymentResponseBody,\n    getRemoteShippingResponseBody,\n} from './remote-checkout.mock';\n\ndescribe('RemoteCheckoutActionCreator', () => {\n    let actionCreator: RemoteCheckoutActionCreator;\n    let checkoutActionCreator: CheckoutActionCreator;\n    let checkoutRequestSender: RequestSender;\n    let requestSender: RemoteCheckoutRequestSender;\n\n    beforeEach(() => {\n        requestSender = new RemoteCheckoutRequestSender(createRequestSender());\n        checkoutRequestSender = createRequestSender();\n        checkoutActionCreator = new CheckoutActionCreator(\n            new CheckoutRequestSender(checkoutRequestSender),\n            new ConfigActionCreator(new ConfigRequestSender(checkoutRequestSender)),\n            new FormFieldsActionCreator(new FormFieldsRequestSender(checkoutRequestSender)),\n        );\n        actionCreator = new RemoteCheckoutActionCreator(requestSender, checkoutActionCreator);\n    });\n\n    it('initializes billing and emits actions to notify progress', async () => {\n        const response = getResponse(getRemoteBillingResponseBody());\n        const params = { referenceId: '511ed7ed-221c-418c-8286-f5102e49220b' };\n        const options = { timeout: createTimeout() };\n\n        jest.spyOn(requestSender, 'initializeBilling').mockReturnValue(Promise.resolve(response));\n\n        const actions = await actionCreator\n            .initializeBilling('amazon', params, options)\n            .pipe(toArray())\n            .toPromise();\n\n        expect(requestSender.initializeBilling).toHaveBeenCalledWith('amazon', params, options);\n        expect(actions).toEqual([\n            {\n                type: RemoteCheckoutActionType.InitializeRemoteBillingRequested,\n                meta: { methodId: 'amazon' },\n            },\n            {\n                type: RemoteCheckoutActionType.InitializeRemoteBillingSucceeded,\n                payload: response.body,\n                meta: { methodId: 'amazon' },\n            },\n        ]);\n    });\n\n    it('emits error action if unable to initialize billing', async () => {\n        const response = getErrorResponse();\n        const errorHandler = jest.fn((action) => of(action));\n\n        jest.spyOn(requestSender, 'initializeBilling').mockReturnValue(Promise.reject(response));\n\n        const actions = await from(actionCreator.initializeBilling('amazon'))\n            .pipe(catchError(errorHandler), toArray())\n            .toPromise();\n\n        expect(errorHandler).toHaveBeenCalled();\n        expect(actions).toEqual([\n            {\n                type: RemoteCheckoutActionType.InitializeRemoteBillingRequested,\n                meta: { methodId: 'amazon' },\n            },\n            {\n                type: RemoteCheckoutActionType.InitializeRemoteBillingFailed,\n                error: true,\n                payload: response,\n                meta: { methodId: 'amazon' },\n            },\n        ]);\n    });\n\n    it('initializes shipping and emits actions to notify progress', async () => {\n        const response = getResponse(getRemoteShippingResponseBody());\n        const params = { referenceId: '511ed7ed-221c-418c-8286-f5102e49220b' };\n        const options = { timeout: createTimeout() };\n\n        jest.spyOn(requestSender, 'initializeShipping').mockReturnValue(Promise.resolve(response));\n\n        const actions = await actionCreator\n            .initializeShipping('amazon', params, options)\n            .pipe(toArray())\n            .toPromise();\n\n        expect(requestSender.initializeShipping).toHaveBeenCalledWith('amazon', params, options);\n        expect(actions).toEqual([\n            {\n                type: RemoteCheckoutActionType.InitializeRemoteShippingRequested,\n                meta: { methodId: 'amazon' },\n            },\n            {\n                type: RemoteCheckoutActionType.InitializeRemoteShippingSucceeded,\n                payload: response.body,\n                meta: { methodId: 'amazon' },\n            },\n        ]);\n    });\n\n    it('emits error action if unable to initialize shipping', async () => {\n        const response = getErrorResponse();\n        const errorHandler = jest.fn((action) => of(action));\n\n        jest.spyOn(requestSender, 'initializeShipping').mockReturnValue(Promise.reject(response));\n\n        const actions = await actionCreator\n            .initializeShipping('amazon')\n            .pipe(catchError(errorHandler), toArray())\n            .toPromise();\n\n        expect(actions).toEqual([\n            {\n                type: RemoteCheckoutActionType.InitializeRemoteShippingRequested,\n                meta: { methodId: 'amazon' },\n            },\n            {\n                type: RemoteCheckoutActionType.InitializeRemoteShippingFailed,\n                error: true,\n                payload: response,\n                meta: { methodId: 'amazon' },\n            },\n        ]);\n    });\n\n    it('initializes payment and emits actions to notify progress', async () => {\n        const response = getResponse(getRemotePaymentResponseBody());\n        const params = { referenceId: '511ed7ed-221c-418c-8286-f5102e49220b' };\n        const options = { timeout: createTimeout() };\n\n        jest.spyOn(requestSender, 'initializePayment').mockReturnValue(Promise.resolve(response));\n\n        const actions = await actionCreator\n            .initializePayment('amazon', params, options)\n            .pipe(toArray())\n            .toPromise();\n\n        expect(requestSender.initializePayment).toHaveBeenCalledWith('amazon', params, options);\n        expect(actions).toEqual([\n            {\n                type: RemoteCheckoutActionType.InitializeRemotePaymentRequested,\n                meta: { methodId: 'amazon' },\n            },\n            {\n                type: RemoteCheckoutActionType.InitializeRemotePaymentSucceeded,\n                payload: response.body,\n                meta: { methodId: 'amazon' },\n            },\n        ]);\n    });\n\n    it('emits error action if unable to initialize payment', async () => {\n        const response = getErrorResponse();\n        const errorHandler = jest.fn((action) => of(action));\n\n        jest.spyOn(requestSender, 'initializePayment').mockReturnValue(Promise.reject(response));\n\n        const actions = await actionCreator\n            .initializePayment('amazon')\n            .pipe(catchError(errorHandler), toArray())\n            .toPromise();\n\n        expect(errorHandler).toHaveBeenCalled();\n        expect(actions).toEqual([\n            {\n                type: RemoteCheckoutActionType.InitializeRemotePaymentRequested,\n                meta: { methodId: 'amazon' },\n            },\n            {\n                type: RemoteCheckoutActionType.InitializeRemotePaymentFailed,\n                error: true,\n                payload: response,\n                meta: { methodId: 'amazon' },\n            },\n        ]);\n    });\n\n    it('signs out and emits actions to notify progress', async () => {\n        const response = getResponse({});\n        const options = { timeout: createTimeout() };\n\n        jest.spyOn(requestSender, 'signOut').mockReturnValue(Promise.resolve(response));\n\n        const actions = await actionCreator.signOut('amazon', options).pipe(toArray()).toPromise();\n\n        expect(requestSender.signOut).toHaveBeenCalledWith('amazon', options);\n        expect(actions).toEqual([\n            {\n                type: RemoteCheckoutActionType.SignOutRemoteCustomerRequested,\n                meta: { methodId: 'amazon' },\n            },\n            {\n                type: RemoteCheckoutActionType.SignOutRemoteCustomerSucceeded,\n                meta: { methodId: 'amazon' },\n            },\n        ]);\n    });\n\n    it('emits error action if unable to sign out', async () => {\n        const response = getErrorResponse();\n        const errorHandler = jest.fn((action) => of(action));\n\n        jest.spyOn(requestSender, 'signOut').mockReturnValue(Promise.reject(response));\n\n        const actions = await actionCreator\n            .signOut('amazon')\n            .pipe(catchError(errorHandler), toArray())\n            .toPromise();\n\n        expect(errorHandler).toHaveBeenCalled();\n        expect(actions).toEqual([\n            {\n                type: RemoteCheckoutActionType.SignOutRemoteCustomerRequested,\n                meta: { methodId: 'amazon' },\n            },\n            {\n                type: RemoteCheckoutActionType.SignOutRemoteCustomerFailed,\n                error: true,\n                payload: response,\n                meta: { methodId: 'amazon' },\n            },\n        ]);\n    });\n\n    it('forgets checkout and emits actions to notify progress', async () => {\n        const response = getResponse({});\n        const options = { timeout: createTimeout() };\n\n        jest.spyOn(requestSender, 'forgetCheckout').mockReturnValue(Promise.resolve(response));\n\n        const actions = await actionCreator\n            .forgetCheckout('googlepaystripe', options)\n            .pipe(toArray())\n            .toPromise();\n\n        expect(requestSender.forgetCheckout).toHaveBeenCalledWith(options);\n        expect(actions).toEqual([\n            {\n                type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerRequested,\n                meta: { methodId: 'googlepaystripe' },\n            },\n            {\n                type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerSucceeded,\n                meta: { methodId: 'googlepaystripe' },\n            },\n        ]);\n    });\n\n    it('emits error action if unable to forget checkout', async () => {\n        const response = getErrorResponse();\n        const errorHandler = jest.fn((action) => of(action));\n\n        jest.spyOn(requestSender, 'forgetCheckout').mockReturnValue(Promise.reject(response));\n\n        const actions = await actionCreator\n            .forgetCheckout('googlepaystripe')\n            .pipe(catchError(errorHandler), toArray())\n            .toPromise();\n\n        expect(errorHandler).toHaveBeenCalled();\n        expect(actions).toEqual([\n            {\n                type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerRequested,\n                meta: { methodId: 'googlepaystripe' },\n            },\n            {\n                type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerFailed,\n                error: true,\n                payload: response,\n                meta: { methodId: 'googlepaystripe' },\n            },\n        ]);\n    });\n\n    it('returns action to set meta for provider', () => {\n        const meta = { referenceId: '511ed7ed-221c-418c-8286-f5102e49220b' };\n\n        expect(actionCreator.updateCheckout('amazon', meta)).toEqual({\n            type: RemoteCheckoutActionType.UpdateRemoteCheckout,\n            payload: meta,\n            meta: { methodId: 'amazon' },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/remote-checkout/remote-checkout-action-creator.ts",
    "content": "import { Action, createAction, createErrorAction } from '@bigcommerce/data-store';\nimport { concat, defer, Observable, Observer, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { CheckoutActionCreator } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\n\nimport { RemoteCheckoutActionType } from './remote-checkout-actions';\nimport RemoteCheckoutRequestSender, {\n    InitializePaymentOptions,\n} from './remote-checkout-request-sender';\nimport { RemoteCheckoutStateData } from './remote-checkout-state';\n\n/**\n * @todo Convert this file into TypeScript properly\n * i.e.: Action<T>\n */\nexport default class RemoteCheckoutActionCreator {\n    constructor(\n        private _remoteCheckoutRequestSender: RemoteCheckoutRequestSender,\n        private _checkoutActionCreator: CheckoutActionCreator,\n    ) {}\n\n    initializeBilling(\n        methodId: string,\n        params?: { referenceId: string },\n        options?: RequestOptions,\n    ): Observable<Action> {\n        return Observable.create((observer: Observer<Action>) => {\n            observer.next(\n                createAction(RemoteCheckoutActionType.InitializeRemoteBillingRequested, undefined, {\n                    methodId,\n                }),\n            );\n\n            this._remoteCheckoutRequestSender\n                .initializeBilling(methodId, params, options)\n                .then(({ body = {} }) => {\n                    observer.next(\n                        createAction(\n                            RemoteCheckoutActionType.InitializeRemoteBillingSucceeded,\n                            body,\n                            { methodId },\n                        ),\n                    );\n                    observer.complete();\n                })\n                .catch((response) => {\n                    observer.error(\n                        createErrorAction(\n                            RemoteCheckoutActionType.InitializeRemoteBillingFailed,\n                            response,\n                            { methodId },\n                        ),\n                    );\n                });\n        });\n    }\n\n    initializeShipping(\n        methodId: string,\n        params?: { referenceId: string },\n        options?: RequestOptions,\n    ): Observable<Action> {\n        return Observable.create((observer: Observer<Action>) => {\n            observer.next(\n                createAction(\n                    RemoteCheckoutActionType.InitializeRemoteShippingRequested,\n                    undefined,\n                    { methodId },\n                ),\n            );\n\n            this._remoteCheckoutRequestSender\n                .initializeShipping(methodId, params, options)\n                .then(({ body = {} }) => {\n                    observer.next(\n                        createAction(\n                            RemoteCheckoutActionType.InitializeRemoteShippingSucceeded,\n                            body,\n                            { methodId },\n                        ),\n                    );\n                    observer.complete();\n                })\n                .catch((response) => {\n                    observer.error(\n                        createErrorAction(\n                            RemoteCheckoutActionType.InitializeRemoteShippingFailed,\n                            response,\n                            { methodId },\n                        ),\n                    );\n                });\n        });\n    }\n\n    initializePayment(\n        methodId: string,\n        params?: InitializePaymentOptions,\n        options?: RequestOptions,\n    ): Observable<Action> {\n        return Observable.create((observer: Observer<Action>) => {\n            observer.next(\n                createAction(RemoteCheckoutActionType.InitializeRemotePaymentRequested, undefined, {\n                    methodId,\n                }),\n            );\n\n            this._remoteCheckoutRequestSender\n                .initializePayment(methodId, params, options)\n                .then(({ body = {} }) => {\n                    observer.next(\n                        createAction(\n                            RemoteCheckoutActionType.InitializeRemotePaymentSucceeded,\n                            body,\n                            { methodId },\n                        ),\n                    );\n                    observer.complete();\n                })\n                .catch((response) => {\n                    observer.error(\n                        createErrorAction(\n                            RemoteCheckoutActionType.InitializeRemotePaymentFailed,\n                            response,\n                            { methodId },\n                        ),\n                    );\n                });\n        });\n    }\n\n    loadSettings(methodId: string, options?: RequestOptions): Observable<Action> {\n        return Observable.create((observer: Observer<Action>) => {\n            observer.next(\n                createAction(RemoteCheckoutActionType.LoadRemoteSettingsRequested, undefined, {\n                    methodId,\n                }),\n            );\n\n            this._remoteCheckoutRequestSender\n                .loadSettings(methodId, options)\n                .then(({ body }) => {\n                    observer.next(\n                        createAction(RemoteCheckoutActionType.LoadRemoteSettingsSucceeded, body, {\n                            methodId,\n                        }),\n                    );\n                    observer.complete();\n                })\n                .catch((response) => {\n                    observer.error(\n                        createErrorAction(\n                            RemoteCheckoutActionType.LoadRemoteSettingsFailed,\n                            response,\n                            { methodId },\n                        ),\n                    );\n                });\n        });\n    }\n\n    signOut(methodId: string, options?: RequestOptions): Observable<Action> {\n        return Observable.create((observer: Observer<Action>) => {\n            observer.next(\n                createAction(RemoteCheckoutActionType.SignOutRemoteCustomerRequested, undefined, {\n                    methodId,\n                }),\n            );\n\n            this._remoteCheckoutRequestSender\n                .signOut(methodId, options)\n                .then(() => {\n                    observer.next(\n                        createAction(\n                            RemoteCheckoutActionType.SignOutRemoteCustomerSucceeded,\n                            undefined,\n                            { methodId },\n                        ),\n                    );\n                    observer.complete();\n                })\n                .catch((response) => {\n                    observer.error(\n                        createErrorAction(\n                            RemoteCheckoutActionType.SignOutRemoteCustomerFailed,\n                            response,\n                            { methodId },\n                        ),\n                    );\n                });\n        });\n    }\n\n    forgetCheckout(methodId: string, options?: RequestOptions): Observable<Action> {\n        return concat(\n            of(\n                createAction(\n                    RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerRequested,\n                    undefined,\n                    { methodId },\n                ),\n            ),\n            defer(async () => {\n                await this._remoteCheckoutRequestSender.forgetCheckout(options);\n                await this._checkoutActionCreator.loadCurrentCheckout();\n\n                return createAction(\n                    RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerSucceeded,\n                    undefined,\n                    { methodId },\n                );\n            }),\n        ).pipe(\n            catchError((error) =>\n                throwErrorAction(\n                    RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerFailed,\n                    error,\n                    { methodId },\n                ),\n            ),\n        );\n    }\n\n    updateCheckout<K extends keyof RemoteCheckoutStateData>(\n        methodId: K,\n        data: Partial<RemoteCheckoutStateData[K]>,\n    ): Action {\n        return createAction(RemoteCheckoutActionType.UpdateRemoteCheckout, data, { methodId });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/remote-checkout/remote-checkout-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { AmazonPayRemoteCheckout } from './methods';\n\nexport enum RemoteCheckoutActionType {\n    ForgetCheckoutRemoteCustomerRequested = 'FORGET_CHECKOUT_REMOTE_CUSTOMER_REQUESTED',\n    ForgetCheckoutRemoteCustomerSucceeded = 'FORGET_CHECKOUT_REMOTE_CUSTOMER_SUCCEEDED',\n    ForgetCheckoutRemoteCustomerFailed = 'FORGET_CHECKOUT_REMOTE_CUSTOMER_FAILED',\n\n    InitializeRemoteBillingRequested = 'INITIALIZE_REMOTE_BILLING_REQUESTED',\n    InitializeRemoteBillingSucceeded = 'INITIALIZE_REMOTE_BILLING_SUCCEEDED',\n    InitializeRemoteBillingFailed = 'INITIALIZE_REMOTE_BILLING_FAILED',\n\n    InitializeRemoteShippingRequested = 'INITIALIZE_REMOTE_SHIPPING_REQUESTED',\n    InitializeRemoteShippingSucceeded = 'INITIALIZE_REMOTE_SHIPPING_SUCCEEDED',\n    InitializeRemoteShippingFailed = 'INITIALIZE_REMOTE_SHIPPING_FAILED',\n\n    InitializeRemotePaymentRequested = 'INITIALIZE_REMOTE_PAYMENT_REQUESTED',\n    InitializeRemotePaymentSucceeded = 'INITIALIZE_REMOTE_PAYMENT_SUCCEEDED',\n    InitializeRemotePaymentFailed = 'INITIALIZE_REMOTE_PAYMENT_FAILED',\n\n    LoadRemoteSettingsRequested = 'LOAD_REMOTE_SETTINGS_REQUESTED',\n    LoadRemoteSettingsSucceeded = 'LOAD_REMOTE_SETTINGS_SUCCEEDED',\n    LoadRemoteSettingsFailed = 'LOAD_REMOTE_SETTINGS_FAILED',\n\n    SignOutRemoteCustomerRequested = 'SIGN_OUT_REMOTE_CUSTOMER_REQUESTED',\n    SignOutRemoteCustomerSucceeded = 'SIGN_OUT_REMOTE_CUSTOMER_SUCCEEDED',\n    SignOutRemoteCustomerFailed = 'SIGN_OUT_REMOTE_CUSTOMER_FAILED',\n\n    UpdateRemoteCheckout = 'UPDATE_REMOTE_CHECKOUT',\n}\n\nexport type RemoteCheckoutAction =\n    | ForgetCheckoutRemoteCustomerAction\n    | InitializeRemoteBillingAction\n    | InitializeRemoteShippingAction\n    | InitializeRemotePaymentAction\n    | SignOutRemoteCustomerAction\n    | LoadRemoteSettingsAction\n    | UpdateRemoteCheckoutAction;\n\nexport type ForgetCheckoutRemoteCustomerAction =\n    | ForgetCheckoutRemoteCustomerRequestedAction\n    | ForgetCheckoutRemoteCustomerSucceededAction\n    | ForgetCheckoutRemoteCustomerFailedAction;\n\nexport interface ForgetCheckoutRemoteCustomerRequestedAction extends Action {\n    type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerRequested;\n}\n\nexport interface ForgetCheckoutRemoteCustomerSucceededAction extends Action {\n    type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerSucceeded;\n}\n\nexport interface ForgetCheckoutRemoteCustomerFailedAction extends Action {\n    type: RemoteCheckoutActionType.ForgetCheckoutRemoteCustomerFailed;\n}\n\nexport type InitializeRemoteBillingAction =\n    | InitializeRemoteBillingSucceededAction\n    | InitializeRemoteBillingFailedAction\n    | InitializeRemoteBillingRequestedAction;\n\nexport interface InitializeRemoteBillingSucceededAction extends Action<AmazonPayRemoteCheckout> {\n    type: RemoteCheckoutActionType.InitializeRemoteBillingSucceeded;\n}\n\nexport interface InitializeRemoteBillingFailedAction extends Action {\n    type: RemoteCheckoutActionType.InitializeRemoteBillingFailed;\n}\n\nexport interface InitializeRemoteBillingRequestedAction extends Action {\n    type: RemoteCheckoutActionType.InitializeRemoteBillingRequested;\n}\n\nexport type InitializeRemoteShippingAction =\n    | InitializeRemoteShippingSucceededAction\n    | InitializeRemoteShippingFailedAction\n    | InitializeRemoteShippingRequestedAction;\n\nexport interface InitializeRemoteShippingSucceededAction extends Action<AmazonPayRemoteCheckout> {\n    type: RemoteCheckoutActionType.InitializeRemoteShippingSucceeded;\n}\n\nexport interface InitializeRemoteShippingFailedAction extends Action {\n    type: RemoteCheckoutActionType.InitializeRemoteShippingFailed;\n}\n\nexport interface InitializeRemoteShippingRequestedAction extends Action {\n    type: RemoteCheckoutActionType.InitializeRemoteShippingRequested;\n}\n\nexport type InitializeRemotePaymentAction =\n    | InitializeRemotePaymentSucceededAction\n    | InitializeRemotePaymentFailedAction\n    | InitializeRemotePaymentRequestedAction;\n\nexport interface InitializeRemotePaymentSucceededAction extends Action {\n    type: RemoteCheckoutActionType.InitializeRemotePaymentSucceeded;\n}\n\nexport interface InitializeRemotePaymentFailedAction extends Action {\n    type: RemoteCheckoutActionType.InitializeRemotePaymentFailed;\n}\n\nexport interface InitializeRemotePaymentRequestedAction extends Action {\n    type: RemoteCheckoutActionType.InitializeRemotePaymentRequested;\n}\n\nexport type SignOutRemoteCustomerAction =\n    | SignOutRemoteCustomerSucceededAction\n    | SignOutRemoteCustomerFailedAction\n    | SignOutRemoteCustomerRequestedAction;\n\nexport interface SignOutRemoteCustomerSucceededAction extends Action {\n    type: RemoteCheckoutActionType.SignOutRemoteCustomerSucceeded;\n}\n\nexport interface SignOutRemoteCustomerFailedAction extends Action {\n    type: RemoteCheckoutActionType.SignOutRemoteCustomerFailed;\n}\n\nexport interface SignOutRemoteCustomerRequestedAction extends Action {\n    type: RemoteCheckoutActionType.SignOutRemoteCustomerRequested;\n}\n\nexport type LoadRemoteSettingsAction =\n    | LoadRemoteSettingsSucceededAction\n    | LoadRemoteSettingsRequestedAction\n    | LoadRemoteSettingsFailedAction;\n\nexport interface LoadRemoteSettingsSucceededAction extends Action {\n    type: RemoteCheckoutActionType.LoadRemoteSettingsSucceeded;\n}\n\nexport interface LoadRemoteSettingsRequestedAction extends Action {\n    type: RemoteCheckoutActionType.LoadRemoteSettingsRequested;\n}\n\nexport interface LoadRemoteSettingsFailedAction extends Action {\n    type: RemoteCheckoutActionType.LoadRemoteSettingsFailed;\n}\n\nexport interface UpdateRemoteCheckoutAction extends Action {\n    type: RemoteCheckoutActionType.UpdateRemoteCheckout;\n}\n"
  },
  {
    "path": "packages/core/src/remote-checkout/remote-checkout-reducer.spec.ts",
    "content": "import { getResponse } from '../common/http-request/responses.mock';\n\nimport { RemoteCheckoutAction, RemoteCheckoutActionType } from './remote-checkout-actions';\nimport remoteCheckoutReducer from './remote-checkout-reducer';\nimport RemoteCheckoutState from './remote-checkout-state';\nimport {\n    getRemoteBillingResponseBody,\n    getRemoteShippingResponseBody,\n} from './remote-checkout.mock';\n\ndescribe('remoteCheckoutReducer', () => {\n    let initialState: RemoteCheckoutState;\n\n    beforeEach(() => {\n        initialState = {\n            data: {},\n        };\n    });\n\n    it('returns state with billing address', () => {\n        const response = getResponse(getRemoteBillingResponseBody());\n        const action: RemoteCheckoutAction = {\n            type: RemoteCheckoutActionType.InitializeRemoteBillingSucceeded,\n            payload: response.body,\n            meta: { methodId: 'amazon' },\n        };\n\n        expect(remoteCheckoutReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: {\n                    amazon: {\n                        billing: {\n                            address: response.body.billing.address,\n                        },\n                    },\n                },\n            }),\n        );\n    });\n\n    it('returns state with shipping address', () => {\n        const response = getResponse(getRemoteShippingResponseBody());\n        const action: RemoteCheckoutAction = {\n            type: RemoteCheckoutActionType.InitializeRemoteShippingSucceeded,\n            payload: response.body,\n            meta: { methodId: 'amazon' },\n        };\n\n        expect(remoteCheckoutReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                data: {\n                    amazon: {\n                        shipping: {\n                            address: response.body.shipping.address,\n                        },\n                    },\n                },\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/remote-checkout/remote-checkout-reducer.ts",
    "content": "import { combineReducers } from '@bigcommerce/data-store';\n\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport RemoteCheckout from './remote-checkout';\nimport { RemoteCheckoutAction, RemoteCheckoutActionType } from './remote-checkout-actions';\nimport RemoteCheckoutState, {\n    DEFAULT_STATE,\n    RemoteCheckoutStateData,\n} from './remote-checkout-state';\n\nexport default function remoteCheckoutReducer(\n    state: RemoteCheckoutState = DEFAULT_STATE,\n    action: RemoteCheckoutAction,\n): RemoteCheckoutState {\n    if (!action.meta || !action.meta.methodId) {\n        return state;\n    }\n\n    const reducer = combineReducers<RemoteCheckoutState>({\n        data: combineReducers<RemoteCheckoutStateData>({\n            [action.meta.methodId]: dataReducer,\n        }),\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(data: RemoteCheckout, action: RemoteCheckoutAction): RemoteCheckout {\n    switch (action.type) {\n        case RemoteCheckoutActionType.InitializeRemoteBillingSucceeded:\n            return objectSet(data, 'billing' as any, action.payload && action.payload.billing);\n\n        case RemoteCheckoutActionType.InitializeRemoteShippingSucceeded:\n            return objectSet(data, 'shipping' as any, action.payload && action.payload.shipping);\n\n        case RemoteCheckoutActionType.LoadRemoteSettingsSucceeded:\n            return objectSet(data, 'settings', action.payload);\n\n        case RemoteCheckoutActionType.UpdateRemoteCheckout:\n            return objectMerge(data, action.payload);\n\n        default:\n            return data;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/remote-checkout/remote-checkout-request-sender.spec.ts",
    "content": "import { createRequestSender, createTimeout, RequestSender } from '@bigcommerce/request-sender';\n\nimport { SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getResponse } from '../common/http-request/responses.mock';\n\nimport RemoteCheckoutRequestSender from './remote-checkout-request-sender';\nimport {\n    getRemoteBillingResponseBody,\n    getRemotePaymentResponseBody,\n    getRemoteShippingResponseBody,\n    getRemoteTokenResponseBody,\n} from './remote-checkout.mock';\n\ndescribe('RemoteCheckoutRequestSender', () => {\n    let remoteCheckoutRequestSender: RemoteCheckoutRequestSender;\n    let requestSender: RequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        remoteCheckoutRequestSender = new RemoteCheckoutRequestSender(requestSender);\n    });\n\n    it('sends request to initialize billing', async () => {\n        const response = getResponse(getRemoteBillingResponseBody());\n        const params = { referenceId: '511ed7ed-221c-418c-8286-f5102e49220b' };\n        const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'get').mockReturnValue(response);\n\n        const output = await remoteCheckoutRequestSender.initializeBilling(\n            'amazon',\n            params,\n            options,\n        );\n\n        expect(output).toEqual(response);\n        expect(requestSender.get).toHaveBeenCalledWith('/remote-checkout/amazon/billing', {\n            ...options,\n            params,\n        });\n    });\n\n    it('sends request to initialize shipping', async () => {\n        const response = getResponse(getRemoteShippingResponseBody());\n        const params = { referenceId: '511ed7ed-221c-418c-8286-f5102e49220b' };\n        const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'get').mockReturnValue(response);\n\n        const output = await remoteCheckoutRequestSender.initializeShipping(\n            'amazon',\n            params,\n            options,\n        );\n\n        expect(output).toEqual(response);\n        expect(requestSender.get).toHaveBeenCalledWith('/remote-checkout/amazon/shipping', {\n            ...options,\n            params,\n        });\n    });\n\n    it('sends request to initialize payment', async () => {\n        const response = getResponse(getRemotePaymentResponseBody());\n        const params = { referenceId: '511ed7ed-221c-418c-8286-f5102e49220b' };\n        const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'get').mockReturnValue(response);\n\n        const output = await remoteCheckoutRequestSender.initializePayment(\n            'amazon',\n            params,\n            options,\n        );\n\n        expect(output).toEqual(response);\n        expect(requestSender.get).toHaveBeenCalledWith('/remote-checkout/amazon/payment', {\n            ...options,\n            params,\n        });\n    });\n\n    it('sends request to sign out from remote checkout provider', async () => {\n        const response = getResponse({});\n        const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'get').mockReturnValue(response);\n\n        const output = await remoteCheckoutRequestSender.signOut('amazon', options);\n\n        expect(output).toEqual(response);\n        expect(requestSender.get).toHaveBeenCalledWith('/remote-checkout/amazon/signout', options);\n    });\n\n    it('sends request to generate token', async () => {\n        const response = getResponse(getRemoteTokenResponseBody());\n        const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'get').mockReturnValue(response);\n\n        const output = await remoteCheckoutRequestSender.generateToken(options);\n\n        expect(output).toEqual(response);\n        expect(requestSender.get).toHaveBeenCalledWith('/remote-checkout-token', options);\n    });\n\n    it('sends request to track authorization event', async () => {\n        const response = getResponse({});\n        const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'post').mockReturnValue(response);\n\n        const output = await remoteCheckoutRequestSender.trackAuthorizationEvent(options);\n\n        expect(output).toEqual(response);\n        expect(requestSender.post).toHaveBeenCalledWith(\n            '/remote-checkout/events/shopper-checkout-service-provider-authorization-requested',\n            options,\n        );\n    });\n\n    it('sends request to forget the remote checkout provider', async () => {\n        const response = getResponse({});\n        const options = { timeout: createTimeout(), headers: SDK_VERSION_HEADERS };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'post').mockReturnValue(response);\n\n        const output = await remoteCheckoutRequestSender.forgetCheckout(options);\n\n        expect(output).toEqual(response);\n        expect(requestSender.post).toHaveBeenCalledWith(\n            '/remote-checkout/forget-checkout',\n            options,\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/remote-checkout/remote-checkout-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\n/**\n * @todo Convert this file into TypeScript properly\n */\nexport default class RemoteCheckoutRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    initializeBilling(\n        methodName: string,\n        params?: { referenceId: string },\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<any>> {\n        const url = `/remote-checkout/${methodName}/billing`;\n\n        return this._requestSender.get(url, { params, timeout, headers: SDK_VERSION_HEADERS });\n    }\n\n    initializeShipping(\n        methodName: string,\n        params?: { referenceId: string },\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<any>> {\n        const url = `/remote-checkout/${methodName}/shipping`;\n\n        return this._requestSender.get(url, { params, timeout, headers: SDK_VERSION_HEADERS });\n    }\n\n    initializePayment(\n        methodName: string,\n        params?: InitializePaymentOptions,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<any>> {\n        const url = `/remote-checkout/${methodName}/payment`;\n\n        return this._requestSender.get(url, { params, timeout, headers: SDK_VERSION_HEADERS });\n    }\n\n    loadSettings(methodName: string, { timeout }: RequestOptions = {}): Promise<Response<any>> {\n        const url = `/remote-checkout/${methodName}/settings`;\n\n        return this._requestSender.get(url, { timeout, headers: SDK_VERSION_HEADERS });\n    }\n\n    signOut(methodName: string, { timeout }: RequestOptions = {}): Promise<Response<any>> {\n        const url = `/remote-checkout/${methodName}/signout`;\n\n        return this._requestSender.get(url, { timeout, headers: SDK_VERSION_HEADERS });\n    }\n\n    generateToken({ timeout }: RequestOptions = {}): Promise<Response<any>> {\n        const url = '/remote-checkout-token';\n\n        return this._requestSender.get(url, { timeout, headers: SDK_VERSION_HEADERS });\n    }\n\n    trackAuthorizationEvent({ timeout }: RequestOptions = {}): Promise<Response<any>> {\n        const url =\n            '/remote-checkout/events/shopper-checkout-service-provider-authorization-requested';\n\n        return this._requestSender.post(url, { timeout, headers: SDK_VERSION_HEADERS });\n    }\n\n    forgetCheckout({ timeout }: RequestOptions = {}): Promise<Response<any>> {\n        const url = `/remote-checkout/forget-checkout`;\n\n        return this._requestSender.post(url, { timeout, headers: SDK_VERSION_HEADERS });\n    }\n}\n\nexport interface InitializePaymentOptions {\n    authorizationToken?: string;\n    customerMessage?: string;\n    referenceId?: string;\n    useStoreCredit?: boolean;\n}\n"
  },
  {
    "path": "packages/core/src/remote-checkout/remote-checkout-selector.spec.ts",
    "content": "import { createRemoteCheckoutSelectorFactory } from './remote-checkout-selector';\nimport { getEmptyRemoteCheckoutState, getRemoteCheckoutState } from './remote-checkout.mock';\n\ndescribe('RemoteCheckoutSelector', () => {\n    const createRemoteCheckoutSelector = createRemoteCheckoutSelectorFactory();\n\n    it('returns remote checkout data', () => {\n        const remoteCheckout = getRemoteCheckoutState();\n        const selector = createRemoteCheckoutSelector(remoteCheckout);\n\n        expect(selector.getCheckout('amazon')).toEqual(remoteCheckout.data.amazon);\n    });\n\n    it('returns undefined if checkout data is unavailable', () => {\n        const remoteCheckout = getEmptyRemoteCheckoutState();\n        const selector = createRemoteCheckoutSelector(remoteCheckout);\n\n        expect(selector.getCheckout('amazon')).toBeUndefined();\n    });\n});\n"
  },
  {
    "path": "packages/core/src/remote-checkout/remote-checkout-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport RemoteCheckoutState, {\n    DEFAULT_STATE,\n    RemoteCheckoutStateData,\n} from './remote-checkout-state';\n\nexport default interface RemoteCheckoutSelector {\n    getCheckout<TMethodId extends keyof RemoteCheckoutStateData>(\n        methodId: TMethodId,\n    ): RemoteCheckoutStateData[TMethodId] | undefined;\n}\n\nexport type RemoteCheckoutSelectorFactory = (state: RemoteCheckoutState) => RemoteCheckoutSelector;\n\nexport function createRemoteCheckoutSelectorFactory(): RemoteCheckoutSelectorFactory {\n    const getCheckout = createSelector(\n        (state: RemoteCheckoutState) => state.data,\n        (data) =>\n            <TMethodId extends keyof RemoteCheckoutStateData>(methodId: TMethodId) => {\n                return data[methodId];\n            },\n    );\n\n    return memoizeOne((state: RemoteCheckoutState = DEFAULT_STATE): RemoteCheckoutSelector => {\n        return {\n            getCheckout: getCheckout(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/remote-checkout/remote-checkout-state.ts",
    "content": "import { AmazonPayRemoteCheckout } from './methods';\n\nexport default interface RemoteCheckoutState {\n    data: RemoteCheckoutStateData;\n}\n\nexport interface RemoteCheckoutStateData {\n    amazon?: AmazonPayRemoteCheckout;\n}\n\nexport const DEFAULT_STATE: RemoteCheckoutState = {\n    data: {},\n};\n"
  },
  {
    "path": "packages/core/src/remote-checkout/remote-checkout.mock.ts",
    "content": "import { omit } from 'lodash';\n\nimport { InternalAddress } from '../address';\nimport { getBillingAddress } from '../billing/internal-billing-addresses.mock';\nimport { getShippingAddress } from '../shipping/internal-shipping-addresses.mock';\n\nimport RemoteCheckoutState, { RemoteCheckoutStateData } from './remote-checkout-state';\n\nexport function getRemoteCheckoutState(): RemoteCheckoutState {\n    return {\n        data: getRemoteCheckoutStateData(),\n    };\n}\n\nexport function getEmptyRemoteCheckoutState(): RemoteCheckoutState {\n    return {\n        data: {},\n    };\n}\n\nexport function getRemoteCheckoutStateData(): RemoteCheckoutStateData {\n    return {\n        amazon: {\n            billing: {\n                address: getBillingAddress(),\n            },\n            shipping: {\n                address: omit(getShippingAddress(), 'id') as InternalAddress,\n            },\n            referenceId: '511ed7ed-221c-418c-8286-f5102e49220b',\n        },\n    };\n}\n\nexport function getRemoteBillingResponseBody(): any {\n    return {\n        billing: {\n            address: getBillingAddress(),\n        },\n    };\n}\n\nexport function getRemoteShippingResponseBody(): any {\n    return {\n        shipping: {\n            address: getShippingAddress(),\n        },\n    };\n}\n\nexport function getRemotePaymentResponseBody(): any {\n    return {\n        payment: true,\n    };\n}\n\nexport function getRemoteTokenResponseBody(): any {\n    return {\n        token: 'cb5eda6a-ab78-4bf1-b849-4a0ab0b0c5a0',\n    };\n}\n"
  },
  {
    "path": "packages/core/src/remote-checkout/remote-checkout.ts",
    "content": "import { AmazonPayRemoteCheckout } from './methods';\n\ntype RemoteCheckout = AmazonPayRemoteCheckout;\n\nexport default RemoteCheckout;\n"
  },
  {
    "path": "packages/core/src/shipping/ShippableItem.ts",
    "content": "import { PhysicalItem } from '../cart';\n\nimport { Consignment } from './index';\n\nexport default interface ShippableItem extends PhysicalItem {\n    consignment?: Consignment;\n    key: string;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/consignment-action-creator.spec.ts",
    "content": "import { ThunkAction } from '@bigcommerce/data-store';\nimport { createRequestSender, createTimeout, Response } from '@bigcommerce/request-sender';\nimport { omit } from 'lodash';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { Address } from '../address';\nimport { getCart } from '../cart/carts.mock';\nimport {\n    Checkout,\n    CheckoutRequestSender,\n    CheckoutStore,\n    CheckoutStoreState,\n    createCheckoutStore,\n} from '../checkout';\nimport { getCheckout, getCheckoutState, getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { InvalidArgumentError, MissingDataError } from '../common/error/errors';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\nimport { getConfigState } from '../config/configs.mock';\n\nimport {\n    ConsignmentAssignmentRequestBody,\n    ConsignmentShippingOptionRequestBody,\n    ConsignmentsRequestBody,\n    ConsignmentUpdateRequestBody,\n} from './consignment';\nimport ConsignmentActionCreator from './consignment-action-creator';\nimport {\n    ConsignmentActionType,\n    CreateConsignmentsAction,\n    DeleteConsignmentAction,\n    UpdateConsignmentAction,\n    UpdateShippingOptionAction,\n} from './consignment-actions';\nimport { getConsignment, getConsignmentsState } from './consignments.mock';\nimport { getShippingAddress } from './shipping-addresses.mock';\nimport { getShippingOption } from './shipping-options.mock';\n\nimport { Consignment, ConsignmentRequestSender } from '.';\n\ndescribe('consignmentActionCreator', () => {\n    let address: Address;\n    let consignment: Consignment;\n    let consignmentRequestSender: ConsignmentRequestSender;\n    let checkoutRequestSender: CheckoutRequestSender;\n    let errorResponse: Response<Error>;\n    let response: Response<Checkout>;\n    let state: CheckoutStoreState;\n    let store: CheckoutStore;\n    let consignmentActionCreator: ConsignmentActionCreator;\n    const options = { timeout: createTimeout() };\n\n    beforeEach(() => {\n        response = getResponse(getCheckout());\n        errorResponse = getErrorResponse();\n        state = getCheckoutStoreState();\n        store = createCheckoutStore(state);\n\n        consignmentRequestSender = new ConsignmentRequestSender(createRequestSender());\n\n        jest.spyOn(consignmentRequestSender, 'createConsignments').mockReturnValue(\n            Promise.resolve(response),\n        );\n        jest.spyOn(consignmentRequestSender, 'updateConsignment').mockReturnValue(\n            Promise.resolve(response),\n        );\n        jest.spyOn(consignmentRequestSender, 'deleteConsignment').mockReturnValue(\n            Promise.resolve(response),\n        );\n\n        checkoutRequestSender = new CheckoutRequestSender(createRequestSender());\n\n        jest.spyOn(checkoutRequestSender, 'loadCheckout').mockReturnValue(\n            Promise.resolve(response),\n        );\n\n        consignmentActionCreator = new ConsignmentActionCreator(\n            consignmentRequestSender,\n            checkoutRequestSender,\n        );\n        address = getShippingAddress();\n        consignment = getConsignment();\n    });\n\n    describe('#loadShippingOptions', () => {\n        describe('when store has no checkout data', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({});\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    await from(consignmentActionCreator.loadShippingOptions()(store)).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(consignmentRequestSender.updateConsignment).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        it('emits actions and passes right arguments to consignmentRequestSender', async () => {\n            const { id } = getCheckout();\n            const actions = await from(consignmentActionCreator.loadShippingOptions()(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(checkoutRequestSender.loadCheckout).toHaveBeenCalledWith(id, {\n                params: {\n                    include: ['consignments.availableShippingOptions'],\n                },\n            });\n\n            expect(actions).toEqual([\n                { type: ConsignmentActionType.LoadShippingOptionsRequested },\n                {\n                    type: ConsignmentActionType.LoadShippingOptionsSucceeded,\n                    payload: getCheckout(),\n                },\n            ]);\n        });\n\n        it('emits errors and passes right arguments to consignmentRequestSender', async () => {\n            jest.spyOn(checkoutRequestSender, 'loadCheckout').mockReturnValue(\n                Promise.reject(getErrorResponse()),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            const actions = await from(consignmentActionCreator.loadShippingOptions()(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: ConsignmentActionType.LoadShippingOptionsRequested },\n                {\n                    type: ConsignmentActionType.LoadShippingOptionsFailed,\n                    error: true,\n                    payload: getErrorResponse(),\n                },\n            ]);\n        });\n    });\n\n    describe('#createConsignments()', () => {\n        let thunkAction: ThunkAction<CreateConsignmentsAction>;\n        let payload: ConsignmentsRequestBody;\n\n        beforeEach(() => {\n            payload = [\n                {\n                    address: consignment.address,\n                    lineItems: [],\n                },\n            ];\n\n            thunkAction = consignmentActionCreator.createConsignments(payload, options);\n        });\n\n        describe('when store has no checkout data / id', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({});\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    await from(thunkAction(store)).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(consignmentRequestSender.updateConsignment).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        describe('when store has no cart / line items', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({\n                    checkout: getCheckoutState(),\n                });\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    await from(thunkAction(store)).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(consignmentRequestSender.createConsignments).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        it('emits actions if able to create consignment', async () => {\n            const actions = await from(thunkAction(store)).pipe(toArray()).toPromise();\n\n            expect(actions).toEqual([\n                { type: ConsignmentActionType.CreateConsignmentsRequested },\n                { type: ConsignmentActionType.CreateConsignmentsSucceeded, payload: response.body },\n            ]);\n        });\n\n        it('emits error actions if unable to create consignments', async () => {\n            jest.spyOn(consignmentRequestSender, 'createConsignments').mockImplementation(() =>\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            await from(thunkAction(store))\n                .pipe(catchError(errorHandler), toArray())\n                .subscribe((actions) => {\n                    expect(actions).toEqual([\n                        { type: ConsignmentActionType.CreateConsignmentsRequested },\n                        {\n                            type: ConsignmentActionType.CreateConsignmentsFailed,\n                            payload: errorResponse,\n                            error: true,\n                        },\n                    ]);\n                });\n        });\n\n        it('sends request to create consignments', async () => {\n            store = createCheckoutStore(omit(getCheckoutStoreState(), 'consignments'));\n\n            await from(thunkAction(store)).toPromise();\n\n            expect(consignmentRequestSender.createConsignments).toHaveBeenCalledWith(\n                'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                payload,\n                options,\n            );\n        });\n    });\n\n    describe('#unassignItemsByAddress()', () => {\n        let thunkAction: ThunkAction<DeleteConsignmentAction | UpdateConsignmentAction>;\n        let payload: ConsignmentAssignmentRequestBody;\n\n        beforeEach(() => {\n            payload = {\n                address: consignment.address,\n                lineItems: [\n                    {\n                        itemId: 'unassigned',\n                        quantity: 1,\n                    },\n                    {\n                        itemId: 'existing',\n                        quantity: 1,\n                    },\n                ],\n            };\n\n            thunkAction = consignmentActionCreator.unassignItemsByAddress(payload, options);\n        });\n\n        describe('when store has no checkout data / id', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({});\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    await from(thunkAction(store)).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(consignmentRequestSender.updateConsignment).not.toHaveBeenCalled();\n                    expect(consignmentRequestSender.deleteConsignment).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        describe('when address matches an existing consignment', () => {\n            beforeEach(() => {\n                jest.spyOn(\n                    store.getState().consignments,\n                    'getConsignmentByAddress',\n                ).mockReturnValue(consignment);\n\n                const checkoutStoreState = getCheckoutStoreState();\n                // tslint:disable-next-line:no-non-null-assertion\n                const physicalItems = checkoutStoreState.cart.data!.lineItems.physicalItems;\n\n                // tslint:disable-next-line:no-non-null-assertion\n                checkoutStoreState.cart.data!.lineItems.physicalItems = [\n                    physicalItems[0],\n                    {\n                        ...physicalItems[0],\n                        id: 'existing',\n                        quantity: 2,\n                    },\n                ];\n\n                // tslint:disable-next-line:no-non-null-assertion\n                checkoutStoreState.consignments.data![0].lineItemIds = ['existing'];\n                store = createCheckoutStore(checkoutStoreState);\n            });\n\n            it('emits actions if able to update consignment', async () => {\n                const actions = await from(thunkAction(store)).pipe(toArray()).toPromise();\n\n                expect(actions).toEqual([\n                    {\n                        type: ConsignmentActionType.UpdateConsignmentRequested,\n                        payload: undefined,\n                        meta: { id: consignment.id },\n                    },\n                    {\n                        type: ConsignmentActionType.UpdateConsignmentSucceeded,\n                        payload: response.body,\n                        meta: { id: consignment.id },\n                    },\n                ]);\n            });\n\n            it('emits error actions if unable to update consignment', async () => {\n                jest.spyOn(consignmentRequestSender, 'updateConsignment').mockImplementation(() =>\n                    Promise.reject(errorResponse),\n                );\n\n                const errorHandler = jest.fn((action) => of(action));\n\n                await from(consignmentActionCreator.updateConsignment(consignment)(store))\n                    .pipe(catchError(errorHandler), toArray())\n                    .subscribe((actions) => {\n                        expect(actions).toEqual([\n                            {\n                                type: ConsignmentActionType.UpdateConsignmentRequested,\n                                payload: undefined,\n                                meta: { id: consignment.id },\n                            },\n                            {\n                                type: ConsignmentActionType.UpdateConsignmentFailed,\n                                payload: errorResponse,\n                                error: true,\n                                meta: { id: consignment.id },\n                            },\n                        ]);\n                    });\n            });\n\n            it('sends request to update consignment combining existing items', async () => {\n                await from(thunkAction(store)).toPromise();\n\n                expect(consignmentRequestSender.updateConsignment).toHaveBeenCalledWith(\n                    'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                    {\n                        id: consignment.id,\n                        address: consignment.address,\n                        lineItems: [\n                            {\n                                itemId: 'existing',\n                                quantity: 1,\n                            },\n                        ],\n                    },\n                    options,\n                );\n            });\n        });\n\n        describe('when payload has empty line items', () => {\n            let actions: any;\n\n            beforeEach(async () => {\n                thunkAction = consignmentActionCreator.unassignItemsByAddress(\n                    {\n                        ...payload,\n                        lineItems: [],\n                    },\n                    options,\n                );\n\n                actions = await from(thunkAction(store)).pipe(toArray()).toPromise();\n            });\n\n            it('deletes a consignment when has no line items', () => {\n                expect(consignmentRequestSender.deleteConsignment).toHaveBeenCalledWith(\n                    'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                    consignment.id,\n                    options,\n                );\n            });\n\n            it('emits actions if able to update consignment', () => {\n                expect(actions).toEqual([\n                    {\n                        type: ConsignmentActionType.DeleteConsignmentRequested,\n                        payload: undefined,\n                        meta: { id: consignment.id },\n                    },\n                    {\n                        type: ConsignmentActionType.DeleteConsignmentSucceeded,\n                        payload: response.body,\n                        meta: { id: consignment.id },\n                    },\n                ]);\n            });\n        });\n\n        describe('when address does not match any existing consignment', () => {\n            beforeEach(() => {\n                jest.spyOn(\n                    store.getState().consignments,\n                    'getConsignmentByAddress',\n                ).mockReturnValue(undefined);\n            });\n\n            it('throws invalid argument exception', async () => {\n                try {\n                    await from(thunkAction(store)).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(InvalidArgumentError);\n                    expect(consignmentRequestSender.updateConsignment).not.toHaveBeenCalled();\n                    expect(consignmentRequestSender.deleteConsignment).not.toHaveBeenCalled();\n                }\n            });\n        });\n    });\n\n    describe('#assignItemsByAddress()', () => {\n        let thunkAction: ThunkAction<CreateConsignmentsAction | UpdateConsignmentAction>;\n        let payload: ConsignmentAssignmentRequestBody;\n\n        beforeEach(() => {\n            payload = {\n                address: consignment.address,\n                lineItems: [\n                    {\n                        itemId: 'unassigned',\n                        quantity: 2,\n                    },\n                    {\n                        itemId: 'existing',\n                        quantity: 1,\n                    },\n                ],\n            };\n\n            thunkAction = consignmentActionCreator.assignItemsByAddress(payload, options);\n        });\n\n        describe('when store has no checkout data / id', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({});\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    await from(thunkAction(store)).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(consignmentRequestSender.updateConsignment).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        describe('when address matches an existing consignment', () => {\n            beforeEach(() => {\n                jest.spyOn(\n                    store.getState().consignments,\n                    'getConsignmentByAddress',\n                ).mockReturnValue(consignment);\n            });\n\n            it('emits actions if able to update consignment', async () => {\n                const actions = await from(thunkAction(store)).pipe(toArray()).toPromise();\n\n                expect(actions).toEqual([\n                    {\n                        type: ConsignmentActionType.UpdateConsignmentRequested,\n                        payload: undefined,\n                        meta: { id: consignment.id },\n                    },\n                    {\n                        type: ConsignmentActionType.UpdateConsignmentSucceeded,\n                        payload: response.body,\n                        meta: { id: consignment.id },\n                    },\n                ]);\n            });\n\n            it('emits error actions if unable to update consignment', async () => {\n                jest.spyOn(consignmentRequestSender, 'updateConsignment').mockImplementation(() =>\n                    Promise.reject(errorResponse),\n                );\n\n                const errorHandler = jest.fn((action) => of(action));\n\n                await from(consignmentActionCreator.updateConsignment(consignment)(store))\n                    .pipe(catchError(errorHandler), toArray())\n                    .subscribe((actions) => {\n                        expect(actions).toEqual([\n                            {\n                                type: ConsignmentActionType.UpdateConsignmentRequested,\n                                payload: undefined,\n                                meta: { id: consignment.id },\n                            },\n                            {\n                                type: ConsignmentActionType.UpdateConsignmentFailed,\n                                payload: errorResponse,\n                                error: true,\n                                meta: { id: consignment.id },\n                            },\n                        ]);\n                    });\n            });\n\n            it('filters out items with 0 quantities', async () => {\n                const thunkAction = consignmentActionCreator.assignItemsByAddress(\n                    {\n                        ...payload,\n                        lineItems: [\n                            ...payload.lineItems,\n                            {\n                                itemId: 'invalid qty',\n                                quantity: 0,\n                            },\n                        ],\n                    },\n                    options,\n                );\n\n                await from(thunkAction(store)).toPromise();\n\n                expect(consignmentRequestSender.updateConsignment).toHaveBeenCalledWith(\n                    'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                    {\n                        id: consignment.id,\n                        address: consignment.address,\n                        lineItems: payload.lineItems,\n                    },\n                    options,\n                );\n            });\n\n            it('sends request to update consignment combining existing items', async () => {\n                const checkoutStoreState = getCheckoutStoreState();\n\n                // tslint:disable-next-line:no-non-null-assertion\n                checkoutStoreState.cart.data!.lineItems.physicalItems = [\n                    // tslint:disable-next-line:no-non-null-assertion\n                    checkoutStoreState.cart.data!.lineItems.physicalItems[0],\n                    {\n                        // tslint:disable-next-line:no-non-null-assertion\n                        ...checkoutStoreState.cart.data!.lineItems.physicalItems[0],\n                        id: 'existing',\n                        quantity: 3,\n                    },\n                ];\n\n                // tslint:disable-next-line:no-non-null-assertion\n                checkoutStoreState.consignments.data![0].lineItemIds = [\n                    '12e11c8f-7dce-4da3-9413-b649533f8bad',\n                    'existing',\n                ];\n                store = createCheckoutStore(checkoutStoreState);\n\n                await from(thunkAction(store)).toPromise();\n\n                expect(consignmentRequestSender.updateConsignment).toHaveBeenCalledWith(\n                    'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                    {\n                        id: consignment.id,\n                        address: consignment.address,\n                        lineItems: [\n                            {\n                                itemId: 'unassigned',\n                                quantity: 2,\n                            },\n                            {\n                                itemId: 'existing',\n                                quantity: 1,\n                            },\n                            {\n                                itemId: 'existing',\n                                quantity: 3,\n                            },\n                        ],\n                    },\n                    options,\n                );\n            });\n        });\n\n        describe('when address does not match any existing consignment', () => {\n            beforeEach(() => {\n                jest.spyOn(\n                    store.getState().consignments,\n                    'getConsignmentByAddress',\n                ).mockReturnValue(undefined);\n            });\n\n            it('emits error actions if unable to update consignment', async () => {\n                jest.spyOn(consignmentRequestSender, 'createConsignments').mockImplementation(() =>\n                    Promise.reject(errorResponse),\n                );\n\n                const errorHandler = jest.fn((action) => of(action));\n\n                await from(consignmentActionCreator.updateConsignment(consignment)(store))\n                    .pipe(catchError(errorHandler), toArray())\n                    .subscribe((actions) => {\n                        expect(actions).toEqual([\n                            {\n                                type: ConsignmentActionType.CreateConsignmentsRequested,\n                                payload: undefined,\n                                meta: { id: consignment.id },\n                            },\n                            {\n                                type: ConsignmentActionType.CreateConsignmentsFailed,\n                                payload: errorResponse,\n                                error: true,\n                                meta: { id: consignment.id },\n                            },\n                        ]);\n                    });\n            });\n\n            it('sends request to create consignment with provided data', async () => {\n                await from(thunkAction(store)).toPromise();\n\n                expect(consignmentRequestSender.createConsignments).toHaveBeenCalledWith(\n                    'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                    [payload],\n                    options,\n                );\n            });\n        });\n    });\n\n    describe('#updateConsignment()', () => {\n        let thunkAction: ThunkAction<UpdateConsignmentAction>;\n        let payload: ConsignmentUpdateRequestBody;\n\n        beforeEach(() => {\n            payload = consignment as ConsignmentUpdateRequestBody;\n            thunkAction = consignmentActionCreator.updateConsignment(payload, options);\n        });\n\n        describe('when store has no checkout data / id', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({});\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    await from(thunkAction(store)).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(consignmentRequestSender.updateConsignment).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        it('emits actions if able to update consignment', async () => {\n            const actions = await from(thunkAction(store)).pipe(toArray()).toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: ConsignmentActionType.UpdateConsignmentRequested,\n                    payload: undefined,\n                    meta: { id: consignment.id },\n                },\n                {\n                    type: ConsignmentActionType.UpdateConsignmentSucceeded,\n                    payload: response.body,\n                    meta: { id: consignment.id },\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to update consignment', async () => {\n            jest.spyOn(consignmentRequestSender, 'updateConsignment').mockImplementation(() =>\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            await from(thunkAction(store))\n                .pipe(catchError(errorHandler), toArray())\n                .subscribe((actions) => {\n                    expect(actions).toEqual([\n                        {\n                            type: ConsignmentActionType.UpdateConsignmentRequested,\n                            payload: undefined,\n                            meta: { id: consignment.id },\n                        },\n                        {\n                            type: ConsignmentActionType.UpdateConsignmentFailed,\n                            payload: errorResponse,\n                            error: true,\n                            meta: { id: consignment.id },\n                        },\n                    ]);\n                });\n        });\n\n        it('sends request to update consignment', async () => {\n            await from(thunkAction(store)).toPromise();\n\n            expect(consignmentRequestSender.updateConsignment).toHaveBeenCalledWith(\n                'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                payload,\n                options,\n            );\n        });\n    });\n\n    describe('#deleteConsignment()', () => {\n        let thunkAction: ThunkAction<DeleteConsignmentAction>;\n\n        beforeEach(() => {\n            thunkAction = consignmentActionCreator.deleteConsignment(consignment.id, options);\n        });\n\n        describe('when store has no checkout data / id', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({});\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    await from(thunkAction(store)).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(consignmentRequestSender.deleteConsignment).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        it('emits actions if able to delete consignment', async () => {\n            const actions = await from(thunkAction(store)).pipe(toArray()).toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: ConsignmentActionType.DeleteConsignmentRequested,\n                    payload: undefined,\n                    meta: { id: consignment.id },\n                },\n                {\n                    type: ConsignmentActionType.DeleteConsignmentSucceeded,\n                    payload: response.body,\n                    meta: { id: consignment.id },\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to delete consignment', async () => {\n            jest.spyOn(consignmentRequestSender, 'deleteConsignment').mockImplementation(() =>\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            await from(thunkAction(store))\n                .pipe(catchError(errorHandler), toArray())\n                .subscribe((actions) => {\n                    expect(actions).toEqual([\n                        {\n                            type: ConsignmentActionType.DeleteConsignmentRequested,\n                            payload: undefined,\n                            meta: { id: consignment.id },\n                        },\n                        {\n                            type: ConsignmentActionType.DeleteConsignmentFailed,\n                            payload: errorResponse,\n                            error: true,\n                            meta: { id: consignment.id },\n                        },\n                    ]);\n                });\n        });\n\n        it('sends request to delete consignment', async () => {\n            await from(thunkAction(store)).toPromise();\n\n            expect(consignmentRequestSender.deleteConsignment).toHaveBeenCalledWith(\n                'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                consignment.id,\n                options,\n            );\n        });\n    });\n\n    describe('#updateShippingOption()', () => {\n        let thunkAction: ThunkAction<UpdateShippingOptionAction>;\n        let payload: ConsignmentShippingOptionRequestBody;\n\n        beforeEach(() => {\n            payload = {\n                id: consignment.id,\n                shippingOptionId: 'bar',\n            };\n\n            thunkAction = consignmentActionCreator.updateShippingOption(payload, options);\n        });\n\n        describe('when store has no checkout data / id', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({});\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    await from(thunkAction(store)).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(consignmentRequestSender.updateConsignment).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        it('emits actions if able to update shipping option', async () => {\n            const actions = await from(thunkAction(store)).pipe(toArray()).toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: ConsignmentActionType.UpdateShippingOptionRequested,\n                    payload: undefined,\n                    meta: { id: consignment.id },\n                },\n                {\n                    type: ConsignmentActionType.UpdateShippingOptionSucceeded,\n                    payload: response.body,\n                    meta: { id: consignment.id },\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to update shipping option', async () => {\n            jest.spyOn(consignmentRequestSender, 'updateConsignment').mockImplementation(() =>\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            await from(thunkAction(store))\n                .pipe(catchError(errorHandler), toArray())\n                .subscribe((actions) => {\n                    expect(actions).toEqual([\n                        {\n                            type: ConsignmentActionType.UpdateShippingOptionRequested,\n                            payload: undefined,\n                            meta: { id: consignment.id },\n                        },\n                        {\n                            type: ConsignmentActionType.UpdateShippingOptionFailed,\n                            payload: errorResponse,\n                            error: true,\n                            meta: { id: consignment.id },\n                        },\n                    ]);\n                });\n        });\n\n        it('sends request to update shipping option', async () => {\n            await from(thunkAction(store)).toPromise();\n\n            expect(consignmentRequestSender.updateConsignment).toHaveBeenCalledWith(\n                'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                payload,\n                options,\n            );\n        });\n\n        it('does not emit request to update shipping option if same id is passed', async () => {\n            const configState = getConfigState();\n            const consignment = {\n                ...getConsignment(),\n                selectedShippingOption: { ...getShippingOption(), id: 'bar' },\n            };\n            const consignmentState = {\n                ...getConsignmentsState(),\n                data: [consignment],\n            };\n\n            const stateWithExperiment = {\n                ...state,\n                config: configState,\n                consignments: consignmentState,\n            };\n\n            store = createCheckoutStore(stateWithExperiment);\n            await from(thunkAction(store)).toPromise();\n\n            expect(consignmentRequestSender.updateConsignment).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#updateAddress()', () => {\n        describe('when store has no checkout data / id', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({});\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    await from(consignmentActionCreator.updateAddress(address)(store)).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(consignmentRequestSender.updateConsignment).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        describe('when store has no cart / line items', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({\n                    checkout: getCheckoutState(),\n                });\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    await from(consignmentActionCreator.updateAddress(address)(store)).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(consignmentRequestSender.createConsignments).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        it('emits actions if able to update shipping address', async () => {\n            const actions = await from(consignmentActionCreator.updateAddress(address)(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: ConsignmentActionType.UpdateConsignmentRequested,\n                    meta: { id: consignment.id },\n                },\n                {\n                    type: ConsignmentActionType.UpdateConsignmentSucceeded,\n                    payload: response.body,\n                    meta: { id: consignment.id },\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to update shipping address', async () => {\n            jest.spyOn(consignmentRequestSender, 'createConsignments').mockImplementation(() =>\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            await from(consignmentActionCreator.updateAddress(address)(store))\n                .pipe(catchError(errorHandler), toArray())\n                .subscribe((actions) => {\n                    expect(actions).toEqual([\n                        { type: ConsignmentActionType.CreateConsignmentsRequested },\n                        {\n                            type: ConsignmentActionType.CreateConsignmentsFailed,\n                            payload: errorResponse,\n                            error: true,\n                        },\n                    ]);\n                });\n        });\n\n        it('sends request to update shipping address in first consignment', async () => {\n            jest.spyOn(store.getState().cart, 'getCart').mockReturnValue({\n                ...getCart(),\n                lineItems: {\n                    ...getCart().lineItems,\n                    customItems: [\n                        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                        // @ts-ignore\n                        {\n                            id: 'custom',\n                            quantity: 1,\n                        },\n                    ],\n                },\n            });\n\n            await from(consignmentActionCreator.updateAddress(address, options)(store)).toPromise();\n\n            expect(consignmentRequestSender.updateConsignment).toHaveBeenCalledWith(\n                'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                {\n                    id: '55c96cda6f04c',\n                    address,\n                    lineItems: [\n                        {\n                            itemId: '666',\n                            quantity: 1,\n                        },\n                        {\n                            itemId: 'custom',\n                            quantity: 1,\n                        },\n                    ],\n                },\n                options,\n            );\n        });\n\n        it('sends request to create consignments', async () => {\n            store = createCheckoutStore(omit(getCheckoutStoreState(), 'consignments'));\n\n            await from(consignmentActionCreator.updateAddress(address, options)(store)).toPromise();\n\n            expect(consignmentRequestSender.createConsignments).toHaveBeenCalledWith(\n                'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                [\n                    {\n                        address,\n                        lineItems: [\n                            {\n                                itemId: '666',\n                                quantity: 1,\n                            },\n                        ],\n                    },\n                ],\n                options,\n            );\n        });\n    });\n\n    describe('#selectShippingOption()', () => {\n        const shippingOptionId = 'foo';\n\n        describe('when store has no checkout data / id', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({});\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    await from(\n                        consignmentActionCreator.selectShippingOption(shippingOptionId)(store),\n                    ).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(consignmentRequestSender.updateConsignment).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        describe('when store has no shipping address', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({\n                    checkout: getCheckoutState(),\n                });\n            });\n\n            it('throws an exception, emit no actions and does not send a request', async () => {\n                try {\n                    await from(\n                        consignmentActionCreator.selectShippingOption(shippingOptionId)(store),\n                    ).toPromise();\n                } catch (exception) {\n                    expect(exception).toBeInstanceOf(MissingDataError);\n                    expect(consignmentRequestSender.updateConsignment).not.toHaveBeenCalled();\n                }\n            });\n        });\n\n        it('emits actions if able to select shipping option', async () => {\n            const actions = await from(\n                consignmentActionCreator.selectShippingOption(shippingOptionId)(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: ConsignmentActionType.UpdateShippingOptionRequested,\n                    payload: undefined,\n                    meta: { id: consignment.id },\n                },\n                {\n                    type: ConsignmentActionType.UpdateShippingOptionSucceeded,\n                    payload: response.body,\n                    meta: { id: consignment.id },\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to update shipping option', async () => {\n            jest.spyOn(consignmentRequestSender, 'createConsignments').mockImplementation(() =>\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            await from(consignmentActionCreator.selectShippingOption(shippingOptionId)(store))\n                .pipe(catchError(errorHandler), toArray())\n                .subscribe((actions) => {\n                    expect(actions).toEqual([\n                        { type: ConsignmentActionType.UpdateShippingOptionRequested },\n                        {\n                            type: ConsignmentActionType.UpdateShippingOptionFailed,\n                            payload: errorResponse,\n                            error: true,\n                        },\n                    ]);\n                });\n        });\n\n        it('sends request to update consignment', async () => {\n            await from(\n                consignmentActionCreator.selectShippingOption(shippingOptionId, options)(store),\n            ).toPromise();\n\n            expect(consignmentRequestSender.updateConsignment).toHaveBeenCalledWith(\n                'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                {\n                    id: '55c96cda6f04c',\n                    shippingOptionId,\n                },\n                options,\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/consignment-action-creator.ts",
    "content": "import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { find } from 'lodash';\nimport { Observable, Observer } from 'rxjs';\n\nimport { AddressRequestBody } from '../address';\nimport { Cart } from '../cart';\nimport {\n    CheckoutIncludes,\n    CheckoutParams,\n    CheckoutRequestSender,\n    InternalCheckoutSelectors,\n    ReadableCheckoutStore,\n} from '../checkout';\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n} from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\n\nimport Consignment, {\n    ConsignmentAssignmentBaseRequestBodyWithAddress,\n    ConsignmentAssignmentBaseRequestBodyWithShippingAddress,\n    ConsignmentAssignmentRequestBody,\n    ConsignmentCreateRequestBody,\n    ConsignmentLineItem,\n    ConsignmentRequestBody,\n    ConsignmentShippingOptionRequestBody,\n    ConsignmentsRequestBody,\n    ConsignmentUpdateRequestBody,\n} from './consignment';\nimport {\n    ConsignmentActionType,\n    CreateConsignmentsAction,\n    DeleteConsignmentAction,\n    LoadShippingOptionsAction,\n    UpdateConsignmentAction,\n    UpdateShippingOptionAction,\n} from './consignment-actions';\nimport ConsignmentRequestSender from './consignment-request-sender';\n\nexport default class ConsignmentActionCreator {\n    constructor(\n        private _consignmentRequestSender: ConsignmentRequestSender,\n        private _checkoutRequestSender: CheckoutRequestSender,\n    ) {}\n\n    unassignItemsByAddress(\n        consignment: ConsignmentAssignmentRequestBody,\n        options?: RequestOptions,\n    ): ThunkAction<DeleteConsignmentAction | UpdateConsignmentAction, InternalCheckoutSelectors> {\n        return (store) => {\n            const state = store.getState();\n            const checkout = state.checkout.getCheckout();\n\n            if (!checkout) {\n                throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n            }\n\n            const address = this._consignmentHasAddress(consignment)\n                ? consignment.address\n                : consignment.shippingAddress;\n\n            const existingConsignment = state.consignments.getConsignmentByAddress(address);\n\n            if (!existingConsignment) {\n                throw new InvalidArgumentError('No consignment found for the specified address');\n            }\n\n            const lineItems = this._removeLineItems(\n                consignment.lineItems,\n                existingConsignment,\n                state.cart.getCart(),\n            );\n\n            if (!lineItems.length) {\n                return this.deleteConsignment(existingConsignment.id, options)(store);\n            }\n\n            return this.updateConsignment(\n                {\n                    id: existingConsignment.id,\n                    address,\n                    lineItems,\n                },\n                options,\n            )(store);\n        };\n    }\n\n    assignItemsByAddress(\n        consignment: ConsignmentAssignmentRequestBody,\n        options?: RequestOptions,\n    ): ThunkAction<UpdateConsignmentAction | CreateConsignmentsAction, InternalCheckoutSelectors> {\n        return (store) => {\n            const state = store.getState();\n            const address = this._consignmentHasAddress(consignment)\n                ? consignment.address\n                : consignment.shippingAddress;\n            const existingConsignment = state.consignments.getConsignmentByAddress(address);\n\n            return this._createOrUpdateConsignment(\n                {\n                    id: existingConsignment && existingConsignment.id,\n                    address,\n                    lineItems: this._addLineItems(\n                        consignment.lineItems,\n                        existingConsignment,\n                        state.cart.getCart(),\n                    ),\n                },\n                options,\n            )(store);\n        };\n    }\n\n    selectShippingOption(\n        id: string,\n        options?: RequestOptions,\n    ): ThunkAction<UpdateShippingOptionAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<UpdateShippingOptionAction>) => {\n                const state = store.getState();\n                const checkout = state.checkout.getCheckout();\n                const consignments = state.consignments.getConsignments();\n\n                if (!checkout) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                if (!consignments || !consignments.length) {\n                    throw new MissingDataError(MissingDataErrorType.MissingConsignments);\n                }\n\n                const consignmentUpdateBody = {\n                    id: consignments[0].id,\n                    shippingOptionId: id,\n                };\n\n                const consignmentMeta = {\n                    id: consignments[0].id,\n                };\n\n                observer.next(\n                    createAction(\n                        ConsignmentActionType.UpdateShippingOptionRequested,\n                        undefined,\n                        consignmentMeta,\n                    ),\n                );\n\n                this._consignmentRequestSender\n                    .updateConsignment(checkout.id, consignmentUpdateBody, options)\n                    .then(({ body }) => {\n                        observer.next(\n                            createAction(\n                                ConsignmentActionType.UpdateShippingOptionSucceeded,\n                                body,\n                                consignmentMeta,\n                            ),\n                        );\n\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                ConsignmentActionType.UpdateShippingOptionFailed,\n                                response,\n                                consignmentMeta,\n                            ),\n                        );\n                    });\n            });\n    }\n\n    loadShippingOptions(\n        options?: RequestOptions,\n    ): ThunkAction<LoadShippingOptionsAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<LoadShippingOptionsAction>) => {\n                const checkout = store.getState().checkout.getCheckout();\n\n                if (!checkout) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                observer.next(createAction(ConsignmentActionType.LoadShippingOptionsRequested));\n\n                this._checkoutRequestSender\n                    .loadCheckout(checkout.id, {\n                        ...options,\n                        params: {\n                            include: [CheckoutIncludes.AvailableShippingOptions],\n                        },\n                    })\n                    .then(({ body }) => {\n                        observer.next(\n                            createAction(ConsignmentActionType.LoadShippingOptionsSucceeded, body),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                ConsignmentActionType.LoadShippingOptionsFailed,\n                                response,\n                            ),\n                        );\n                    });\n            });\n    }\n\n    updateAddress(\n        address: AddressRequestBody,\n        options?: RequestOptions<CheckoutParams>,\n    ): ThunkAction<CreateConsignmentsAction | UpdateConsignmentAction, InternalCheckoutSelectors> {\n        return (store) => {\n            const consignment = this._getUpdateAddressRequestBody(address, store);\n            const consignments = store.getState().consignments.getConsignments();\n\n            if (consignments && consignments.length) {\n                (consignment as ConsignmentUpdateRequestBody).id = consignments[0].id;\n            }\n\n            return this._createOrUpdateConsignment(consignment, options)(store);\n        };\n    }\n\n    createConsignments(\n        consignments: ConsignmentsRequestBody,\n        options?: RequestOptions<CheckoutParams>,\n    ): ThunkAction<CreateConsignmentsAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<CreateConsignmentsAction>) => {\n                const checkout = store.getState().checkout.getCheckout();\n\n                if (!checkout || !checkout.id) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                observer.next(createAction(ConsignmentActionType.CreateConsignmentsRequested));\n\n                this._consignmentRequestSender\n                    .createConsignments(checkout.id, consignments, options)\n                    .then(({ body }) => {\n                        observer.next(\n                            createAction(ConsignmentActionType.CreateConsignmentsSucceeded, body),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                ConsignmentActionType.CreateConsignmentsFailed,\n                                response,\n                            ),\n                        );\n                    });\n            });\n    }\n\n    updateConsignment(\n        consignment: ConsignmentUpdateRequestBody,\n        options?: RequestOptions<CheckoutParams>,\n    ): ThunkAction<UpdateConsignmentAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<UpdateConsignmentAction>) => {\n                const checkout = store.getState().checkout.getCheckout();\n\n                if (!checkout || !checkout.id) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                const consignmentMeta = { id: consignment.id };\n\n                observer.next(\n                    createAction(\n                        ConsignmentActionType.UpdateConsignmentRequested,\n                        undefined,\n                        consignmentMeta,\n                    ),\n                );\n\n                this._consignmentRequestSender\n                    .updateConsignment(checkout.id, consignment, options)\n                    .then(({ body }) => {\n                        observer.next(\n                            createAction(\n                                ConsignmentActionType.UpdateConsignmentSucceeded,\n                                body,\n                                consignmentMeta,\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                ConsignmentActionType.UpdateConsignmentFailed,\n                                response,\n                                consignmentMeta,\n                            ),\n                        );\n                    });\n            });\n    }\n\n    deleteConsignment(\n        consignmentId: string,\n        options?: RequestOptions,\n    ): ThunkAction<DeleteConsignmentAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<DeleteConsignmentAction>) => {\n                const checkout = store.getState().checkout.getCheckout();\n                const consignmentMeta = { id: consignmentId };\n\n                if (!checkout || !checkout.id) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                observer.next(\n                    createAction(\n                        ConsignmentActionType.DeleteConsignmentRequested,\n                        undefined,\n                        consignmentMeta,\n                    ),\n                );\n\n                this._consignmentRequestSender\n                    .deleteConsignment(checkout.id, consignmentId, options)\n                    .then(({ body }) => {\n                        observer.next(\n                            createAction(\n                                ConsignmentActionType.DeleteConsignmentSucceeded,\n                                body,\n                                consignmentMeta,\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                ConsignmentActionType.DeleteConsignmentFailed,\n                                response,\n                                consignmentMeta,\n                            ),\n                        );\n                    });\n            });\n    }\n\n    updateShippingOption(\n        consignment: ConsignmentShippingOptionRequestBody,\n        options?: RequestOptions,\n    ): ThunkAction<UpdateShippingOptionAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<UpdateShippingOptionAction>) => {\n                const checkout = store.getState().checkout.getCheckout();\n\n                const consignmentInMemory = store\n                    .getState()\n                    .consignments.getConsignmentById(consignment.id);\n\n                const alreadySelectedOptionId = consignmentInMemory?.selectedShippingOption?.id;\n\n                if (alreadySelectedOptionId === consignment.shippingOptionId) {\n                    observer.complete();\n\n                    return;\n                }\n\n                if (!checkout || !checkout.id) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                const consignmentMeta = { id: consignment.id };\n\n                observer.next(\n                    createAction(\n                        ConsignmentActionType.UpdateShippingOptionRequested,\n                        undefined,\n                        consignmentMeta,\n                    ),\n                );\n\n                this._consignmentRequestSender\n                    .updateConsignment(checkout.id, consignment, options)\n                    .then(({ body }) => {\n                        observer.next(\n                            createAction(\n                                ConsignmentActionType.UpdateShippingOptionSucceeded,\n                                body,\n                                consignmentMeta,\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                ConsignmentActionType.UpdateShippingOptionFailed,\n                                response,\n                                consignmentMeta,\n                            ),\n                        );\n                    });\n            });\n    }\n\n    private _createOrUpdateConsignment(\n        consignment: ConsignmentCreateRequestBody | ConsignmentUpdateRequestBody,\n        options?: RequestOptions<CheckoutParams>,\n    ): ThunkAction<UpdateConsignmentAction | CreateConsignmentsAction, InternalCheckoutSelectors> {\n        return (store) => {\n            const checkout = store.getState().checkout.getCheckout();\n\n            if (!checkout || !checkout.id) {\n                throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n            }\n\n            if (this._isUpdateConsignmentRequest(consignment)) {\n                return this.updateConsignment(consignment, options)(store);\n            }\n\n            return this.createConsignments([consignment], options)(store);\n        };\n    }\n\n    private _getUpdateAddressRequestBody(\n        address: AddressRequestBody,\n        store: ReadableCheckoutStore,\n    ): ConsignmentRequestBody {\n        const state = store.getState();\n        const cart = state.cart.getCart();\n\n        if (!cart) {\n            throw new MissingDataError(MissingDataErrorType.MissingCart);\n        }\n\n        const { physicalItems, customItems = [] } = cart.lineItems;\n\n        return {\n            address,\n            lineItems: [...physicalItems, ...customItems].map((item) => ({\n                itemId: item.id,\n                quantity: item.quantity,\n            })),\n        };\n    }\n\n    private _removeLineItems(\n        lineItems: ConsignmentLineItem[],\n        consignment: Consignment,\n        cart?: Cart,\n    ): ConsignmentLineItem[] {\n        if (!cart) {\n            throw new MissingDataError(MissingDataErrorType.MissingCart);\n        }\n\n        return this._hydrateLineItems(consignment.lineItemIds, cart)\n            .map((existingItem) => {\n                const sharedItem = find(\n                    lineItems,\n                    (lineItem) => lineItem.itemId === existingItem.itemId,\n                );\n\n                return {\n                    ...existingItem,\n                    quantity: sharedItem\n                        ? existingItem.quantity - sharedItem.quantity\n                        : existingItem.quantity,\n                };\n            })\n            .filter((lineItem) => lineItem.quantity > 0);\n    }\n\n    private _addLineItems(\n        lineItems: ConsignmentLineItem[],\n        consignment?: Consignment,\n        cart?: Cart,\n    ): ConsignmentLineItem[] {\n        if (!consignment) {\n            return lineItems;\n        }\n\n        if (!cart) {\n            throw new MissingDataError(MissingDataErrorType.MissingCart);\n        }\n\n        return lineItems\n            .concat(this._hydrateLineItems(consignment.lineItemIds, cart))\n            .filter((lineItem) => lineItem.quantity > 0);\n    }\n\n    private _hydrateLineItems(lineItemIds: string[], cart: Cart): ConsignmentLineItem[] {\n        return lineItemIds.map((itemId) => {\n            const item = find(cart.lineItems.physicalItems, (lineItem) => lineItem.id === itemId);\n\n            return {\n                itemId,\n                quantity: item ? item.quantity : 0,\n            };\n        });\n    }\n\n    private _isUpdateConsignmentRequest(\n        request: ConsignmentRequestBody,\n    ): request is ConsignmentUpdateRequestBody {\n        const updateRequest = request as ConsignmentUpdateRequestBody;\n\n        return !!updateRequest.id;\n    }\n\n    private _consignmentHasAddress(\n        consignment:\n            | ConsignmentAssignmentBaseRequestBodyWithAddress\n            | ConsignmentAssignmentBaseRequestBodyWithShippingAddress,\n    ): consignment is ConsignmentAssignmentBaseRequestBodyWithAddress {\n        return typeof consignment === 'object' && 'address' in consignment;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/consignment-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { Checkout } from '../checkout';\n\nimport { ConsignmentMeta } from './consignment';\n\nexport enum ConsignmentActionType {\n    CreateConsignmentsRequested = 'CREATE_CONSIGNMENTS_REQUESTED',\n    CreateConsignmentsSucceeded = 'CREATE_CONSIGNMENTS_SUCCEEDED',\n    CreateConsignmentsFailed = 'CREATE_CONSIGNMENTS_FAILED',\n\n    UpdateConsignmentRequested = 'UPDATE_CONSIGNMENT_REQUESTED',\n    UpdateConsignmentSucceeded = 'UPDATE_CONSIGNMENT_SUCCEEDED',\n    UpdateConsignmentFailed = 'UPDATE_CONSIGNMENT_FAILED',\n\n    DeleteConsignmentRequested = 'DELETE_CONSIGNMENT_REQUESTED',\n    DeleteConsignmentSucceeded = 'DELETE_CONSIGNMENT_SUCCEEDED',\n    DeleteConsignmentFailed = 'DELETE_CONSIGNMENT_FAILED',\n\n    UpdateShippingOptionRequested = 'UPDATE_SHIPPING_OPTION_REQUESTED',\n    UpdateShippingOptionSucceeded = 'UPDATE_SHIPPING_OPTION_SUCCEEDED',\n    UpdateShippingOptionFailed = 'UPDATE_SHIPPING_OPTION_FAILED',\n\n    LoadShippingOptionsRequested = 'LOAD_SHIPPING_OPTIONS_REQUESTED',\n    LoadShippingOptionsSucceeded = 'LOAD_SHIPPING_OPTIONS_SUCCEEDED',\n    LoadShippingOptionsFailed = 'LOAD_SHIPPING_OPTIONS_FAILED',\n}\n\nexport type ConsignmentAction =\n    | CreateConsignmentsAction\n    | UpdateConsignmentAction\n    | DeleteConsignmentAction\n    | UpdateShippingOptionAction\n    | LoadShippingOptionsAction;\n\nexport type CreateConsignmentsAction =\n    | CreateConsignmentsRequestedAction\n    | CreateConsignmentsSucceededAction\n    | CreateConsignmentsFailedAction;\n\nexport type UpdateConsignmentAction =\n    | UpdateConsignmentRequestedAction\n    | UpdateConsignmentSucceededAction\n    | UpdateConsignmentFailedAction;\n\nexport type DeleteConsignmentAction =\n    | DeleteConsignmentRequestedAction\n    | DeleteConsignmentSucceededAction\n    | DeleteConsignmentFailedAction;\n\nexport type UpdateShippingOptionAction =\n    | UpdateShippingOptionRequestedAction\n    | UpdateShippingOptionSucceededAction\n    | UpdateShippingOptionFailedAction;\n\nexport type LoadShippingOptionsAction =\n    | LoadShippingOptionsRequestedAction\n    | LoadShippingOptionsSucceededAction\n    | LoadShippingOptionsFailedAction;\n\nexport interface CreateConsignmentsRequestedAction extends Action {\n    type: ConsignmentActionType.CreateConsignmentsRequested;\n}\n\nexport interface CreateConsignmentsSucceededAction extends Action<Checkout> {\n    type: ConsignmentActionType.CreateConsignmentsSucceeded;\n}\n\nexport interface CreateConsignmentsFailedAction extends Action<Error> {\n    type: ConsignmentActionType.CreateConsignmentsFailed;\n}\n\nexport interface UpdateConsignmentRequestedAction extends Action<null, ConsignmentMeta> {\n    type: ConsignmentActionType.UpdateConsignmentRequested;\n}\n\nexport interface UpdateConsignmentSucceededAction extends Action<Checkout, ConsignmentMeta> {\n    type: ConsignmentActionType.UpdateConsignmentSucceeded;\n}\n\nexport interface UpdateConsignmentFailedAction extends Action<Error, ConsignmentMeta> {\n    type: ConsignmentActionType.UpdateConsignmentFailed;\n}\n\nexport interface DeleteConsignmentRequestedAction extends Action<null, ConsignmentMeta> {\n    type: ConsignmentActionType.DeleteConsignmentRequested;\n}\n\nexport interface DeleteConsignmentSucceededAction extends Action<Checkout, ConsignmentMeta> {\n    type: ConsignmentActionType.DeleteConsignmentSucceeded;\n}\n\nexport interface DeleteConsignmentFailedAction extends Action<Error, ConsignmentMeta> {\n    type: ConsignmentActionType.DeleteConsignmentFailed;\n}\n\nexport interface UpdateShippingOptionRequestedAction extends Action<null, ConsignmentMeta> {\n    type: ConsignmentActionType.UpdateShippingOptionRequested;\n}\n\nexport interface UpdateShippingOptionSucceededAction extends Action<Checkout, ConsignmentMeta> {\n    type: ConsignmentActionType.UpdateShippingOptionSucceeded;\n}\n\nexport interface UpdateShippingOptionFailedAction extends Action<Error, ConsignmentMeta> {\n    type: ConsignmentActionType.UpdateShippingOptionFailed;\n}\n\nexport interface LoadShippingOptionsRequestedAction extends Action {\n    type: ConsignmentActionType.LoadShippingOptionsRequested;\n}\n\nexport interface LoadShippingOptionsSucceededAction extends Action<Checkout> {\n    type: ConsignmentActionType.LoadShippingOptionsSucceeded;\n}\n\nexport interface LoadShippingOptionsFailedAction extends Action<Error> {\n    type: ConsignmentActionType.LoadShippingOptionsFailed;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/consignment-discount.ts",
    "content": "interface ConsignmentDiscountBase<T> {\n    id: number;\n    amount: number;\n    type: T;\n}\n\ntype ConsignmentAutomaticDiscount = ConsignmentDiscountBase<'AUTOMATIC'>;\n\ninterface ConsignmentCouponDiscount extends ConsignmentDiscountBase<'COUPON'> {\n    couponId: number;\n    couponCode: string;\n}\n\nexport type ConsignmentDiscount = ConsignmentAutomaticDiscount | ConsignmentCouponDiscount;\n"
  },
  {
    "path": "packages/core/src/shipping/consignment-reducer.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\n\nimport { CheckoutActionType } from '../checkout';\nimport { getCheckout } from '../checkout/checkouts.mock';\nimport { CouponActionType } from '../coupon';\n\nimport { ConsignmentActionType } from './consignment-actions';\nimport consignmentReducer from './consignment-reducer';\n\nimport { ConsignmentState } from '.';\n\ndescribe('consignmentReducer', () => {\n    const id = 'foo';\n    let initialState: ConsignmentState;\n\n    beforeEach(() => {\n        initialState = {\n            errors: {\n                updateError: {},\n                updateShippingOptionError: {},\n                deleteError: {},\n            },\n            statuses: {\n                isUpdating: {},\n                isUpdatingShippingOption: {},\n                isDeleting: {},\n            },\n        };\n    });\n\n    it('returns new data when checkout is loaded', () => {\n        const action = createAction(CheckoutActionType.LoadCheckoutSucceeded, getCheckout());\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            data: action.payload && action.payload.consignments,\n        });\n    });\n\n    it('returns error when checkout fails to load', () => {\n        const action = createAction(CheckoutActionType.LoadCheckoutFailed, new Error());\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            errors: {\n                loadError: action.payload,\n            },\n        });\n    });\n\n    it('returns loading state when checkout is loading', () => {\n        const action = createAction(CheckoutActionType.LoadCheckoutRequested);\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            statuses: {\n                isLoading: true,\n            },\n        });\n    });\n\n    it('returns new data when consignment is created', () => {\n        const action = createAction(\n            ConsignmentActionType.CreateConsignmentsSucceeded,\n            getCheckout(),\n            { id },\n        );\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            data: action.payload && action.payload.consignments,\n            errors: {\n                createError: undefined,\n            },\n            statuses: {\n                isCreating: false,\n            },\n        });\n    });\n\n    it('returns loading state when creating consignment', () => {\n        const action = createAction(ConsignmentActionType.CreateConsignmentsRequested, null, {\n            id,\n        });\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            errors: {\n                createError: undefined,\n            },\n            statuses: {\n                isCreating: true,\n            },\n        });\n    });\n\n    it('returns error when consignment creation fails', () => {\n        const action = createAction(ConsignmentActionType.CreateConsignmentsFailed, new Error());\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            errors: {\n                createError: action.payload,\n            },\n            statuses: {\n                isCreating: false,\n            },\n        });\n    });\n\n    it('returns loading state when updating consignment', () => {\n        const action = createAction(ConsignmentActionType.UpdateConsignmentRequested, null, { id });\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            statuses: {\n                isUpdating: {\n                    foo: true,\n                },\n            },\n        });\n    });\n\n    it('returns new data when consignment is updated', () => {\n        const action = createAction(\n            ConsignmentActionType.UpdateConsignmentSucceeded,\n            getCheckout(),\n            { id },\n        );\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            data: action.payload && action.payload.consignments,\n            errors: {\n                updateError: {\n                    foo: undefined,\n                },\n            },\n            statuses: {\n                isUpdating: {\n                    foo: false,\n                },\n            },\n        });\n    });\n\n    it('returns error when consignment update fails', () => {\n        const action = createAction(ConsignmentActionType.UpdateConsignmentFailed, new Error(), {\n            id,\n        });\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            errors: {\n                updateError: {\n                    foo: action.payload,\n                },\n            },\n            statuses: {\n                isUpdating: {\n                    foo: false,\n                },\n            },\n        });\n    });\n\n    it('returns loading state when deleting consignment', () => {\n        const action = createAction(ConsignmentActionType.DeleteConsignmentRequested, null, { id });\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            statuses: {\n                isDeleting: {\n                    foo: true,\n                },\n            },\n        });\n    });\n\n    it('returns new data when consignment is deleted', () => {\n        const action = createAction(\n            ConsignmentActionType.DeleteConsignmentSucceeded,\n            getCheckout(),\n            { id },\n        );\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            data: action.payload && action.payload.consignments,\n            errors: {\n                deleteError: {\n                    foo: undefined,\n                },\n            },\n            statuses: {\n                isDeleting: {\n                    foo: false,\n                },\n            },\n        });\n    });\n\n    it('returns error when consignment delete fails', () => {\n        const action = createAction(ConsignmentActionType.DeleteConsignmentFailed, new Error(), {\n            id,\n        });\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            errors: {\n                deleteError: {\n                    foo: action.payload,\n                },\n            },\n            statuses: {\n                isDeleting: {\n                    foo: false,\n                },\n            },\n        });\n    });\n\n    it('returns loading state when updating shipping option', () => {\n        const action = createAction(ConsignmentActionType.UpdateShippingOptionRequested, null, {\n            id,\n        });\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            statuses: {\n                isUpdatingShippingOption: {\n                    foo: true,\n                },\n            },\n        });\n    });\n\n    it('returns new data when shipping option is updated', () => {\n        const action = createAction(\n            ConsignmentActionType.UpdateShippingOptionSucceeded,\n            getCheckout(),\n            { id },\n        );\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            data: action.payload && action.payload.consignments,\n            errors: {\n                updateShippingOptionError: {\n                    foo: undefined,\n                },\n            },\n            statuses: {\n                isUpdatingShippingOption: {\n                    foo: false,\n                },\n            },\n        });\n    });\n\n    it('returns error when shipping option update fails', () => {\n        const action = createAction(ConsignmentActionType.UpdateShippingOptionFailed, new Error(), {\n            id,\n        });\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            errors: {\n                updateShippingOptionError: {\n                    foo: action.payload,\n                },\n            },\n            statuses: {\n                isUpdatingShippingOption: {\n                    foo: false,\n                },\n            },\n        });\n    });\n\n    it('returns new data when coupon is applied', () => {\n        const action = createAction(CouponActionType.ApplyCouponSucceeded, getCheckout());\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            data: action.payload && action.payload.consignments,\n        });\n    });\n\n    it('returns new data when coupon is removed', () => {\n        const action = createAction(CouponActionType.RemoveCouponSucceeded, getCheckout());\n\n        expect(consignmentReducer(initialState, action)).toMatchObject({\n            data: action.payload && action.payload.consignments,\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/consignment-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport {\n    CheckoutAction,\n    CheckoutActionType,\n    CheckoutHydrateAction,\n    CheckoutHydrateActionType,\n} from '../checkout';\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectMerge, objectSet } from '../common/utility';\nimport { CouponAction, CouponActionType } from '../coupon';\nimport { CustomerAction, CustomerActionType } from '../customer';\n\nimport Consignment from './consignment';\nimport { ConsignmentAction, ConsignmentActionType } from './consignment-actions';\nimport ConsignmentState, {\n    ConsignmentErrorsState,\n    ConsignmentStatusesState,\n    DEFAULT_STATE,\n} from './consignment-state';\n\nexport default function consignmentReducer(\n    state: ConsignmentState = DEFAULT_STATE,\n    action: Action,\n): ConsignmentState {\n    const reducer = combineReducers<ConsignmentState, ConsignmentAction | CheckoutAction>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: Consignment[] | undefined,\n    action:\n        | ConsignmentAction\n        | CheckoutAction\n        | CouponAction\n        | CustomerAction\n        | CheckoutHydrateAction,\n): Consignment[] | undefined {\n    switch (action.type) {\n        case CheckoutActionType.LoadCheckoutSucceeded:\n        case ConsignmentActionType.LoadShippingOptionsSucceeded:\n        case ConsignmentActionType.CreateConsignmentsSucceeded:\n        case ConsignmentActionType.UpdateConsignmentSucceeded:\n        case ConsignmentActionType.DeleteConsignmentSucceeded:\n        case ConsignmentActionType.UpdateShippingOptionSucceeded:\n        case CouponActionType.ApplyCouponSucceeded:\n        case CouponActionType.RemoveCouponSucceeded:\n            return arrayReplace(data, action.payload && action.payload.consignments);\n\n        case CustomerActionType.SignOutCustomerSucceeded:\n            return arrayReplace(data, []);\n\n        case CheckoutHydrateActionType.HydrateInitialState:\n            return arrayReplace(data, action.payload?.checkout?.consignments);\n\n        default:\n            return data;\n    }\n}\n\nfunction errorsReducer(\n    errors: ConsignmentErrorsState = DEFAULT_STATE.errors,\n    action: ConsignmentAction | CheckoutAction,\n): ConsignmentErrorsState {\n    switch (action.type) {\n        case CheckoutActionType.LoadCheckoutRequested:\n        case CheckoutActionType.LoadCheckoutSucceeded:\n        case ConsignmentActionType.LoadShippingOptionsSucceeded:\n        case ConsignmentActionType.LoadShippingOptionsRequested:\n            return objectSet(errors, 'loadError', undefined);\n\n        case CheckoutActionType.LoadCheckoutFailed:\n        case ConsignmentActionType.LoadShippingOptionsFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        case ConsignmentActionType.CreateConsignmentsRequested:\n        case ConsignmentActionType.CreateConsignmentsSucceeded:\n            return objectSet(errors, 'createError', undefined);\n\n        case ConsignmentActionType.CreateConsignmentsFailed:\n            return objectSet(errors, 'createError', action.payload);\n\n        case ConsignmentActionType.UpdateConsignmentSucceeded:\n        case ConsignmentActionType.UpdateConsignmentRequested:\n            if (action.meta) {\n                return objectMerge(errors, {\n                    updateError: {\n                        [action.meta.id]: undefined,\n                    },\n                });\n            }\n\n            return errors;\n\n        case ConsignmentActionType.UpdateConsignmentFailed:\n            if (action.meta) {\n                return objectMerge(errors, {\n                    updateError: {\n                        [action.meta.id]: action.payload,\n                    },\n                });\n            }\n\n            return errors;\n\n        case ConsignmentActionType.DeleteConsignmentSucceeded:\n        case ConsignmentActionType.DeleteConsignmentRequested:\n            if (action.meta) {\n                return objectMerge(errors, {\n                    deleteError: {\n                        [action.meta.id]: undefined,\n                    },\n                });\n            }\n\n            return errors;\n\n        case ConsignmentActionType.DeleteConsignmentFailed:\n            if (action.meta) {\n                return objectMerge(errors, {\n                    deleteError: {\n                        [action.meta.id]: action.payload,\n                    },\n                });\n            }\n\n            return errors;\n\n        case ConsignmentActionType.UpdateShippingOptionRequested:\n        case ConsignmentActionType.UpdateShippingOptionSucceeded:\n            if (action.meta) {\n                return objectMerge(errors, {\n                    updateShippingOptionError: {\n                        [action.meta.id]: undefined,\n                    },\n                });\n            }\n\n            return errors;\n\n        case ConsignmentActionType.UpdateShippingOptionFailed:\n            if (action.meta) {\n                return objectMerge(errors, {\n                    updateShippingOptionError: {\n                        [action.meta.id]: action.payload,\n                    },\n                });\n            }\n\n            return errors;\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: ConsignmentStatusesState = DEFAULT_STATE.statuses,\n    action: ConsignmentAction | CheckoutAction,\n): ConsignmentStatusesState {\n    switch (action.type) {\n        case CheckoutActionType.LoadCheckoutRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case ConsignmentActionType.LoadShippingOptionsRequested:\n            return objectSet(statuses, 'isLoadingShippingOptions', true);\n\n        case CheckoutActionType.LoadCheckoutSucceeded:\n        case CheckoutActionType.LoadCheckoutFailed:\n            return objectSet(statuses, 'isLoading', false);\n\n        case ConsignmentActionType.LoadShippingOptionsSucceeded:\n        case ConsignmentActionType.LoadShippingOptionsFailed:\n            return objectSet(statuses, 'isLoadingShippingOptions', false);\n\n        case ConsignmentActionType.CreateConsignmentsRequested:\n            return objectSet(statuses, 'isCreating', true);\n\n        case ConsignmentActionType.CreateConsignmentsSucceeded:\n        case ConsignmentActionType.CreateConsignmentsFailed:\n            return objectSet(statuses, 'isCreating', false);\n\n        case ConsignmentActionType.UpdateConsignmentRequested:\n            if (action.meta) {\n                return objectMerge(statuses, {\n                    isUpdating: {\n                        [action.meta.id]: true,\n                    },\n                });\n            }\n\n            return statuses;\n\n        case ConsignmentActionType.UpdateConsignmentSucceeded:\n        case ConsignmentActionType.UpdateConsignmentFailed:\n            if (action.meta) {\n                return objectMerge(statuses, {\n                    isUpdating: {\n                        [action.meta.id]: false,\n                    },\n                });\n            }\n\n            return statuses;\n\n        case ConsignmentActionType.DeleteConsignmentRequested:\n            if (action.meta) {\n                return objectMerge(statuses, {\n                    isDeleting: {\n                        [action.meta.id]: true,\n                    },\n                });\n            }\n\n            return statuses;\n\n        case ConsignmentActionType.DeleteConsignmentSucceeded:\n        case ConsignmentActionType.DeleteConsignmentFailed:\n            if (action.meta) {\n                return objectMerge(statuses, {\n                    isDeleting: {\n                        [action.meta.id]: false,\n                    },\n                });\n            }\n\n            return statuses;\n\n        case ConsignmentActionType.UpdateShippingOptionRequested:\n            if (action.meta) {\n                return objectMerge(statuses, {\n                    isUpdatingShippingOption: {\n                        [action.meta.id]: true,\n                    },\n                });\n            }\n\n            return statuses;\n\n        case ConsignmentActionType.UpdateShippingOptionSucceeded:\n        case ConsignmentActionType.UpdateShippingOptionFailed:\n            if (action.meta) {\n                return objectMerge(statuses, {\n                    isUpdatingShippingOption: {\n                        [action.meta.id]: false,\n                    },\n                });\n            }\n\n            return statuses;\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/consignment-request-sender.spec.ts",
    "content": "import { createRequestSender, createTimeout } from '@bigcommerce/request-sender';\n\nimport { EmptyCartError } from '../cart/errors';\nimport { getCheckout } from '../checkout/checkouts.mock';\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport ConsignmentRequestSender from './consignment-request-sender';\nimport { getConsignmentRequestBody } from './consignments.mock';\n\ndescribe('ConsignmentRequestSender', () => {\n    let consignmentRequestSender: ConsignmentRequestSender;\n    const requestSender = createRequestSender();\n\n    const checkoutId = 'foo';\n    const consignment = getConsignmentRequestBody();\n    const consignments = [\n        {\n            // tslint:disable-next-line:no-non-null-assertion\n            address: consignment.address!,\n            // tslint:disable-next-line:no-non-null-assertion\n            shippingAddress: consignment.shippingAddress!,\n            // tslint:disable-next-line:no-non-null-assertion\n            lineItems: consignment.lineItems!,\n        },\n    ];\n    const options = { timeout: createTimeout() };\n    const shippingInclude = 'consignments.availableShippingOptions';\n    const baseInclude = [\n        'cart.lineItems.physicalItems.options',\n        'cart.lineItems.physicalItems.stockPosition',\n        'cart.lineItems.digitalItems.options',\n        'cart.lineItems.digitalItems.stockPosition',\n        'customer',\n        'promotions.banners',\n    ].join(',');\n    const include = [shippingInclude, baseInclude].join(',');\n\n    beforeEach(() => {\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve({ body: getCheckout() }));\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'put').mockReturnValue(Promise.resolve({ body: getCheckout() }));\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'delete').mockReturnValue(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            Promise.resolve({ body: getCheckout() }),\n        );\n\n        consignmentRequestSender = new ConsignmentRequestSender(requestSender);\n    });\n\n    describe('#createConsignments()', () => {\n        it('creates consignments', async () => {\n            await consignmentRequestSender.createConsignments(checkoutId, consignments);\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/foo/consignments',\n                {\n                    body: consignments,\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include,\n                    },\n                },\n            );\n        });\n\n        it('creates consignments with timeout', async () => {\n            await consignmentRequestSender.createConsignments(checkoutId, consignments, options);\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/foo/consignments',\n                {\n                    ...options,\n                    body: consignments,\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include,\n                    },\n                },\n            );\n        });\n\n        it('creates consignments without including shipping options', async () => {\n            await consignmentRequestSender.createConsignments(checkoutId, consignments, {\n                ...options,\n                params: {\n                    include: {\n                        'consignments.availableShippingOptions': false,\n                    },\n                },\n            });\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/foo/consignments',\n                {\n                    ...options,\n                    body: consignments,\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include: baseInclude,\n                    },\n                },\n            );\n        });\n\n        it('throws `EmptyCartError` if error type is `empty_cart`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 422,\n                    title: 'The request could not process',\n                    type: 'empty_cart',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.reject(error));\n\n            await expect(\n                consignmentRequestSender.createConsignments(checkoutId, consignments, {\n                    ...options,\n                    params: {\n                        include: {\n                            'consignments.availableShippingOptions': false,\n                        },\n                    },\n                }),\n            ).rejects.toThrow(EmptyCartError);\n        });\n    });\n\n    describe('#updateConsignment()', () => {\n        const { id, ...body } = consignment;\n\n        it('updates a consignment', async () => {\n            await consignmentRequestSender.updateConsignment(checkoutId, consignment);\n\n            expect(requestSender.put).toHaveBeenCalledWith(\n                `/api/storefront/checkouts/foo/consignments/${id}`,\n                {\n                    body,\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include,\n                    },\n                },\n            );\n        });\n\n        it('updates a consignment with timeout', async () => {\n            await consignmentRequestSender.updateConsignment(checkoutId, consignment, options);\n\n            expect(requestSender.put).toHaveBeenCalledWith(\n                `/api/storefront/checkouts/foo/consignments/${id}`,\n                {\n                    ...options,\n                    body,\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include,\n                    },\n                },\n            );\n        });\n\n        it('updates a consignment without requesting shipping options', async () => {\n            await consignmentRequestSender.updateConsignment(checkoutId, consignment, {\n                ...options,\n                params: {\n                    include: {\n                        'consignments.availableShippingOptions': false,\n                    },\n                },\n            });\n\n            expect(requestSender.put).toHaveBeenCalledWith(\n                `/api/storefront/checkouts/foo/consignments/${id}`,\n                {\n                    ...options,\n                    body,\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include: baseInclude,\n                    },\n                },\n            );\n        });\n\n        it('throws `EmptyCartError` if error type is `empty_cart`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 422,\n                    title: 'The request could not process',\n                    type: 'empty_cart',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'put').mockReturnValue(Promise.reject(error));\n\n            await expect(\n                consignmentRequestSender.updateConsignment(checkoutId, consignment, {\n                    ...options,\n                    params: {\n                        include: {\n                            'consignments.availableShippingOptions': false,\n                        },\n                    },\n                }),\n            ).rejects.toThrow(EmptyCartError);\n        });\n    });\n\n    describe('#deleteConsignment()', () => {\n        it('deletes a consignment', async () => {\n            await consignmentRequestSender.deleteConsignment(checkoutId, consignment.id);\n\n            expect(requestSender.delete).toHaveBeenCalledWith(\n                `/api/storefront/checkouts/foo/consignments/${consignment.id}`,\n                {\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include,\n                    },\n                },\n            );\n        });\n\n        it('deletes a consignment with timeout', async () => {\n            await consignmentRequestSender.deleteConsignment(checkoutId, consignment.id, options);\n\n            expect(requestSender.delete).toHaveBeenCalledWith(\n                `/api/storefront/checkouts/foo/consignments/${consignment.id}`,\n                {\n                    ...options,\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include,\n                    },\n                },\n            );\n        });\n\n        it('throws `EmptyCartError` if error type is `empty_cart`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 422,\n                    title: 'The request could not process',\n                    type: 'empty_cart',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'delete').mockReturnValue(Promise.reject(error));\n\n            await expect(\n                consignmentRequestSender.deleteConsignment(checkoutId, consignment.id, {\n                    ...options,\n                    params: {\n                        include: {\n                            'consignments.availableShippingOptions': false,\n                        },\n                    },\n                }),\n            ).rejects.toThrow(EmptyCartError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/consignment-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { EmptyCartError } from '../cart/errors';\nimport { Checkout, CheckoutParams } from '../checkout';\nimport {\n    ContentType,\n    joinIncludes,\n    joinOrMergeIncludes,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nimport { ConsignmentsRequestBody, ConsignmentUpdateRequestBody } from './consignment';\n\nconst DEFAULT_INCLUDES = [\n    'consignments.availableShippingOptions',\n    'cart.lineItems.physicalItems.options',\n    'cart.lineItems.physicalItems.stockPosition',\n    'cart.lineItems.digitalItems.options',\n    'cart.lineItems.digitalItems.stockPosition',\n    'customer',\n    'promotions.banners',\n];\n\nexport default class ConsignmentRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    createConsignments(\n        checkoutId: string,\n        consignments: ConsignmentsRequestBody,\n        { timeout, params: { include } = {} }: RequestOptions<CheckoutParams> = {},\n    ): Promise<Response<Checkout>> {\n        const url = `/api/storefront/checkouts/${checkoutId}/consignments`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender\n            .post<Checkout>(url, {\n                body: consignments,\n                params: {\n                    include: joinOrMergeIncludes(DEFAULT_INCLUDES, include),\n                },\n                headers,\n                timeout,\n            })\n            .catch((err) => {\n                if (err.body.type === 'empty_cart') {\n                    throw new EmptyCartError();\n                }\n\n                throw err;\n            });\n    }\n\n    updateConsignment(\n        checkoutId: string,\n        consignment: ConsignmentUpdateRequestBody,\n        { timeout, params: { include } = {} }: RequestOptions<CheckoutParams> = {},\n    ): Promise<Response<Checkout>> {\n        const { id, ...body } = consignment;\n        const url = `/api/storefront/checkouts/${checkoutId}/consignments/${id}`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender\n            .put<Checkout>(url, {\n                body,\n                params: {\n                    include: joinOrMergeIncludes(DEFAULT_INCLUDES, include),\n                },\n                headers,\n                timeout,\n            })\n            .catch((err) => {\n                if (err.body.type === 'empty_cart') {\n                    throw new EmptyCartError();\n                }\n\n                throw err;\n            });\n    }\n\n    deleteConsignment(\n        checkoutId: string,\n        consignmentId: string,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<Checkout>> {\n        const url = `/api/storefront/checkouts/${checkoutId}/consignments/${consignmentId}`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n        const include = joinIncludes(DEFAULT_INCLUDES);\n\n        return this._requestSender\n            .delete<Checkout>(url, { params: { include }, headers, timeout })\n            .catch((err) => {\n                if (err.body.type === 'empty_cart') {\n                    throw new EmptyCartError();\n                }\n\n                throw err;\n            });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/consignment-selector.spec.ts",
    "content": "import { merge } from 'lodash';\n\nimport { CartSelector, createCartSelectorFactory } from '../cart';\nimport { CheckoutStoreState } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\n\nimport ConsignmentSelector, {\n    ConsignmentSelectorFactory,\n    createConsignmentSelectorFactory,\n} from './consignment-selector';\nimport ConsignmentState from './consignment-state';\nimport { getConsignment, getConsignmentsState } from './consignments.mock';\nimport { getShippingAddress } from './shipping-addresses.mock';\n\ndescribe('ConsignmentSelector', () => {\n    const emptyState: ConsignmentState = {\n        statuses: {\n            isUpdating: {},\n            isUpdatingShippingOption: {},\n            isDeleting: {},\n        },\n        errors: {\n            updateError: {},\n            updateShippingOptionError: {},\n            deleteError: {},\n        },\n    };\n\n    const existingAddress = getShippingAddress();\n    const nonexistentAddress = { ...getShippingAddress(), address1: 'foo' };\n\n    let selector: ConsignmentSelector;\n    let state: CheckoutStoreState;\n    let cartSelector: CartSelector;\n    let createConsignmentSelector: ConsignmentSelectorFactory;\n\n    beforeEach(() => {\n        createConsignmentSelector = createConsignmentSelectorFactory();\n        state = getCheckoutStoreState();\n        cartSelector = createCartSelectorFactory()(state.cart);\n    });\n\n    describe('#getConsignmentByAddress()', () => {\n        it('returns first matched consignment when address matches', () => {\n            selector = createConsignmentSelector(state.consignments, cartSelector);\n\n            expect(selector.getConsignmentByAddress(existingAddress))\n                // tslint:disable-next-line:no-non-null-assertion\n                .toEqual(getConsignmentsState().data![0]);\n        });\n\n        it('returns undefined if no address matches a consignment', () => {\n            selector = createConsignmentSelector(emptyState, cartSelector);\n\n            expect(selector.getConsignmentByAddress(nonexistentAddress)).toBeUndefined();\n        });\n    });\n\n    describe('#getConsignmentById()', () => {\n        it('returns consignment that matches id', () => {\n            selector = createConsignmentSelector(state.consignments, cartSelector);\n\n            expect(selector.getConsignmentById('55c96cda6f04c'))\n                // tslint:disable-next-line:no-non-null-assertion\n                .toEqual(getConsignmentsState().data![0]);\n        });\n\n        it('returns undefined if no id matches a consignment', () => {\n            selector = createConsignmentSelector(emptyState, cartSelector);\n\n            expect(selector.getConsignmentById('none')).toBeUndefined();\n        });\n    });\n\n    describe('#getConsignments()', () => {\n        it('returns consignments', () => {\n            selector = createConsignmentSelector(state.consignments, cartSelector);\n\n            expect(selector.getConsignments()).toEqual(getConsignmentsState().data);\n        });\n\n        it('returns undefined if unavailable', () => {\n            selector = createConsignmentSelector(emptyState, cartSelector);\n\n            expect(selector.getConsignments()).toBeUndefined();\n        });\n    });\n\n    describe('#getShippingOption()', () => {\n        it('returns selected shipping option for default consignment', () => {\n            selector = createConsignmentSelector(state.consignments, cartSelector);\n\n            expect(selector.getShippingOption()).toEqual(getConsignment().selectedShippingOption);\n        });\n\n        it('returns undefined if unavailable', () => {\n            selector = createConsignmentSelector(emptyState, cartSelector);\n\n            expect(selector.getConsignments()).toBeUndefined();\n        });\n    });\n\n    describe('#getLoadError()', () => {\n        it('returns load error', () => {\n            const loadError = new Error();\n\n            selector = createConsignmentSelector(\n                merge({}, emptyState, {\n                    errors: { loadError },\n                }),\n                cartSelector,\n            );\n\n            expect(selector.getLoadError()).toEqual(loadError);\n        });\n\n        it('returns undefined if unavailable', () => {\n            selector = createConsignmentSelector(emptyState, cartSelector);\n\n            expect(selector.getLoadError()).toBeUndefined();\n        });\n    });\n\n    describe('#getCreateError()', () => {\n        it('returns create error', () => {\n            const createError = new Error();\n\n            selector = createConsignmentSelector(\n                merge({}, emptyState, {\n                    errors: { createError },\n                }),\n                cartSelector,\n            );\n\n            expect(selector.getCreateError()).toEqual(createError);\n        });\n\n        it('returns undefined if unavailable', () => {\n            selector = createConsignmentSelector(emptyState, cartSelector);\n\n            expect(selector.getCreateError()).toBeUndefined();\n        });\n    });\n\n    describe('#getLoadShippingOptionsError()', () => {\n        it('returns shipping options load error', () => {\n            const loadShippingOptionsError = new Error();\n\n            selector = createConsignmentSelector(\n                merge({}, emptyState, {\n                    errors: { loadShippingOptionsError },\n                }),\n                cartSelector,\n            );\n\n            expect(selector.getLoadShippingOptionsError()).toEqual(loadShippingOptionsError);\n        });\n\n        it('returns undefined if unavailable', () => {\n            selector = createConsignmentSelector(emptyState, cartSelector);\n\n            expect(selector.getLoadShippingOptionsError()).toBeUndefined();\n        });\n    });\n\n    describe('#getUpdateShippingOptionError()', () => {\n        it('returns undefined if none errored', () => {\n            selector = createConsignmentSelector(merge({}, emptyState), cartSelector);\n\n            expect(selector.getUpdateShippingOptionError()).toBeUndefined();\n        });\n\n        describe('when only one consignment errored', () => {\n            const error = new Error();\n\n            beforeEach(() => {\n                selector = createConsignmentSelector(\n                    merge({}, emptyState, {\n                        errors: {\n                            updateShippingOptionError: {\n                                foo: error,\n                            },\n                        },\n                    }),\n                    cartSelector,\n                );\n            });\n\n            it('returns first encountered error', () => {\n                expect(selector.getUpdateShippingOptionError()).toEqual(error);\n            });\n\n            it('returns error if requested id errored', () => {\n                expect(selector.getUpdateShippingOptionError('foo')).toEqual(error);\n            });\n\n            it('returns undefined if requested id did not error', () => {\n                expect(selector.getUpdateShippingOptionError('bar')).toBeUndefined();\n            });\n        });\n    });\n\n    describe('#getUpdateError()', () => {\n        it('returns undefined if none errored', () => {\n            selector = createConsignmentSelector(merge({}, emptyState), cartSelector);\n\n            expect(selector.getUpdateError()).toBeUndefined();\n        });\n\n        describe('when only one consignment errored', () => {\n            const error = new Error();\n\n            beforeEach(() => {\n                selector = createConsignmentSelector(\n                    merge({}, emptyState, {\n                        errors: {\n                            updateError: {\n                                foo: error,\n                            },\n                        },\n                    }),\n                    cartSelector,\n                );\n            });\n\n            it('returns first encountered error', () => {\n                expect(selector.getUpdateError()).toEqual(error);\n            });\n\n            it('returns error if requested id errored', () => {\n                expect(selector.getUpdateError('foo')).toEqual(error);\n            });\n\n            it('returns undefined if requested id did not error', () => {\n                expect(selector.getUpdateError('bar')).toBeUndefined();\n            });\n        });\n    });\n\n    describe('#getDeleteError()', () => {\n        it('returns undefined if none errored', () => {\n            selector = createConsignmentSelector(merge({}, emptyState), cartSelector);\n\n            expect(selector.getDeleteError()).toBeUndefined();\n        });\n\n        describe('when only one consignment errored', () => {\n            const error = new Error();\n\n            beforeEach(() => {\n                selector = createConsignmentSelector(\n                    merge({}, emptyState, {\n                        errors: {\n                            deleteError: {\n                                foo: error,\n                            },\n                        },\n                    }),\n                    cartSelector,\n                );\n            });\n\n            it('returns first encountered error', () => {\n                expect(selector.getDeleteError()).toEqual(error);\n            });\n\n            it('returns error if requested id errored', () => {\n                expect(selector.getDeleteError('foo')).toEqual(error);\n            });\n\n            it('returns undefined if requested id did not error', () => {\n                expect(selector.getDeleteError('bar')).toBeUndefined();\n            });\n        });\n    });\n\n    describe('#getItemAssignmentError()', () => {\n        const updateError = new Error();\n        const createError = new Error();\n\n        beforeEach(() => {\n            selector = createConsignmentSelector(\n                merge(state.consignments, {\n                    errors: {\n                        updateError: {\n                            '55c96cda6f04c': updateError,\n                        },\n                        createError,\n                    },\n                }),\n                cartSelector,\n            );\n        });\n\n        it('returns first encountered error for consignment with matching address', () => {\n            expect(selector.getItemAssignmentError(existingAddress)).toEqual(updateError);\n        });\n\n        it('returns create error when address does not match any consignment', () => {\n            expect(selector.getItemAssignmentError(nonexistentAddress)).toEqual(createError);\n        });\n    });\n\n    describe('#getUnassignedItems()', () => {\n        it('returns unassigned items', () => {\n            selector = createConsignmentSelector(state.consignments, cartSelector);\n\n            expect(selector.getUnassignedItems()).toEqual([\n                // tslint:disable-next-line:no-non-null-assertion\n                state.cart.data!.lineItems.physicalItems[0],\n            ]);\n        });\n\n        it('returns empty array if all items are assigned', () => {\n            jest.spyOn(cartSelector, 'getCart').mockReturnValue({\n                ...state.cart,\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                lineItems: {\n                    physicalItems: [\n                        {\n                            // tslint:disable-next-line:no-non-null-assertion\n                            ...state.cart.data!.lineItems.physicalItems[0],\n                            id: '12e11c8f-7dce-4da3-9413-b649533f8bad',\n                        },\n                    ],\n                },\n            });\n\n            selector = createConsignmentSelector(state.consignments, cartSelector);\n\n            expect(selector.getUnassignedItems()).toEqual([]);\n        });\n\n        it('returns empty array if there are no phyisical items', () => {\n            jest.spyOn(cartSelector, 'getCart').mockReturnValue({\n                ...state.cart,\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                lineItems: { physicalItems: null },\n            });\n\n            selector = createConsignmentSelector(state.consignments, cartSelector);\n\n            expect(selector.getUnassignedItems()).toEqual([]);\n        });\n\n        it('returns empty array if there is no cart', () => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(cartSelector, 'getCart').mockReturnValue(null);\n\n            selector = createConsignmentSelector(state.consignments, cartSelector);\n\n            expect(selector.getUnassignedItems()).toEqual([]);\n        });\n    });\n\n    describe('#isLoading()', () => {\n        it('returns true if loading', () => {\n            selector = createConsignmentSelector(\n                merge({}, emptyState, {\n                    statuses: { isLoading: true },\n                }),\n                cartSelector,\n            );\n\n            expect(selector.isLoading()).toBe(true);\n        });\n\n        it('returns false if unavailable', () => {\n            selector = createConsignmentSelector(emptyState, cartSelector);\n\n            expect(selector.isLoading()).toBe(false);\n        });\n    });\n\n    describe('#isLoadingShippingOptions()', () => {\n        it('returns true if loading', () => {\n            selector = createConsignmentSelector(\n                merge({}, emptyState, {\n                    statuses: { isLoadingShippingOptions: true },\n                }),\n                cartSelector,\n            );\n\n            expect(selector.isLoadingShippingOptions()).toBe(true);\n        });\n\n        it('returns false if unavailable', () => {\n            selector = createConsignmentSelector(emptyState, cartSelector);\n\n            expect(selector.isLoadingShippingOptions()).toBe(false);\n        });\n    });\n\n    describe('#isCreating()', () => {\n        it('returns true if creating', () => {\n            selector = createConsignmentSelector(\n                merge({}, emptyState, {\n                    statuses: { isCreating: true },\n                }),\n                cartSelector,\n            );\n\n            expect(selector.isCreating()).toBe(true);\n        });\n\n        it('returns false if unavailable', () => {\n            selector = createConsignmentSelector(emptyState, cartSelector);\n\n            expect(selector.isCreating()).toBe(false);\n        });\n    });\n\n    describe('#isUpdating()', () => {\n        it('returns false if none is updating', () => {\n            selector = createConsignmentSelector(merge({}, emptyState), cartSelector);\n\n            expect(selector.isUpdating()).toBe(false);\n        });\n\n        describe('when only one consignment is being updated', () => {\n            beforeEach(() => {\n                selector = createConsignmentSelector(\n                    merge({}, emptyState, {\n                        statuses: {\n                            isUpdating: {\n                                foo: true,\n                                bar: false,\n                            },\n                        },\n                    }),\n                    cartSelector,\n                );\n            });\n\n            it('returns true if updating any', () => {\n                expect(selector.isUpdating()).toBe(true);\n            });\n\n            it('returns true if requested id is being updated', () => {\n                expect(selector.isUpdating('foo')).toBe(true);\n            });\n\n            it('returns false if requested id is not being updated', () => {\n                expect(selector.isUpdating('bar')).toBe(false);\n            });\n        });\n    });\n\n    describe('#isDeleting()', () => {\n        it('returns false if none is deleting', () => {\n            selector = createConsignmentSelector(merge({}, emptyState), cartSelector);\n\n            expect(selector.isDeleting()).toBe(false);\n        });\n\n        describe('when only one consignment is being deleted', () => {\n            beforeEach(() => {\n                selector = createConsignmentSelector(\n                    merge({}, emptyState, {\n                        statuses: {\n                            isDeleting: {\n                                foo: true,\n                                bar: false,\n                            },\n                        },\n                    }),\n                    cartSelector,\n                );\n            });\n\n            it('returns true if deleting any', () => {\n                expect(selector.isDeleting()).toBe(true);\n            });\n\n            it('returns true if requested id is being deleted', () => {\n                expect(selector.isDeleting('foo')).toBe(true);\n            });\n\n            it('returns false if requested id is not being deleted', () => {\n                expect(selector.isDeleting('bar')).toBe(false);\n            });\n        });\n    });\n\n    describe('#isAssigningItems()', () => {\n        beforeEach(() => {\n            selector = createConsignmentSelector(\n                merge(state.consignments, {\n                    statuses: {\n                        isUpdating: {\n                            '55c96cda6f04c': true,\n                        },\n                        isCreating: false,\n                    },\n                }),\n                cartSelector,\n            );\n        });\n\n        it('returns isUpdating state for consignment that matches given address', () => {\n            expect(selector.isAssigningItems(existingAddress)).toBe(true);\n        });\n\n        it('returns isCreating state when no consignment matches address', () => {\n            expect(selector.isAssigningItems(nonexistentAddress)).toBe(false);\n        });\n    });\n\n    describe('#isUpdatingShippingOption()', () => {\n        it('returns false if none is updating', () => {\n            selector = createConsignmentSelector(merge({}, emptyState), cartSelector);\n\n            expect(selector.isUpdatingShippingOption()).toBe(false);\n        });\n\n        describe('when only one consignment is being updated', () => {\n            beforeEach(() => {\n                selector = createConsignmentSelector(\n                    merge({}, emptyState, {\n                        statuses: {\n                            isUpdatingShippingOption: {\n                                foo: true,\n                                bar: false,\n                            },\n                        },\n                    }),\n                    cartSelector,\n                );\n            });\n\n            it('returns true if updating any', () => {\n                expect(selector.isUpdatingShippingOption()).toBe(true);\n            });\n\n            it('returns true if requested id is being updated', () => {\n                expect(selector.isUpdatingShippingOption('foo')).toBe(true);\n            });\n\n            it('returns false if requested id is not being updated', () => {\n                expect(selector.isUpdatingShippingOption('bar')).toBe(false);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/consignment-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\nimport { find } from 'lodash';\n\nimport { AddressRequestBody, isAddressEqual } from '../address';\nimport { CartSelector, PhysicalItem } from '../cart';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport Consignment from './consignment';\nimport ConsignmentState, { DEFAULT_STATE } from './consignment-state';\nimport ShippingOption from './shipping-option';\n\nexport default interface ConsignmentSelector {\n    getConsignments(): Consignment[] | undefined;\n    getConsignmentsOrThrow(): Consignment[];\n    getConsignmentById(id: string): Consignment | undefined;\n    getConsignmentByAddress(address: AddressRequestBody): Consignment | undefined;\n    getShippingOption(): ShippingOption | undefined;\n    getLoadError(): Error | undefined;\n    getCreateError(): Error | undefined;\n    getLoadShippingOptionsError(): Error | undefined;\n    getUnassignedItems(): PhysicalItem[];\n    getUpdateError(consignmentId?: string): Error | undefined;\n    getDeleteError(consignmentId?: string): Error | undefined;\n    getItemAssignmentError(address: AddressRequestBody): Error | undefined;\n    getUpdateShippingOptionError(consignmentId?: string): Error | undefined;\n    isLoading(): boolean;\n    isLoadingShippingOptions(): boolean;\n    isCreating(): boolean;\n    isUpdating(consignmentId?: string): boolean;\n    isDeleting(consignmentId?: string): boolean;\n    isAssigningItems(address: AddressRequestBody): boolean;\n    isUpdatingShippingOption(consignmentId?: string): boolean;\n}\n\nexport type ConsignmentSelectorFactory = (\n    state: ConsignmentState,\n    cart: CartSelector,\n) => ConsignmentSelector;\n\ninterface ConsignmentSelectorDependencies {\n    cart: CartSelector;\n}\n\nexport function createConsignmentSelectorFactory(): ConsignmentSelectorFactory {\n    const getConsignments = createSelector(\n        (state: ConsignmentState) => state.data,\n        (consignments) => () => consignments,\n    );\n\n    const getConsignmentsOrThrow = createSelector(getConsignments, (getConsignments) => () => {\n        return guard(\n            getConsignments(),\n            () => new MissingDataError(MissingDataErrorType.MissingConsignments),\n        );\n    });\n\n    const getConsignmentById = createSelector(\n        (state: ConsignmentState) => state.data,\n        (consignments) => (id: string) => {\n            if (!consignments || !consignments.length) {\n                return;\n            }\n\n            return find(consignments, { id });\n        },\n    );\n\n    const getConsignmentByAddress = createSelector(\n        (state: ConsignmentState) => state.data,\n        (consignments) => (address: AddressRequestBody) => {\n            if (!consignments || !consignments.length) {\n                return;\n            }\n\n            return find(consignments, (consignment) =>\n                isAddressEqual(consignment.shippingAddress, address),\n            );\n        },\n    );\n\n    const getShippingOption = createSelector(\n        (state: ConsignmentState) => state.data,\n        (consignments) => () => {\n            if (consignments && consignments.length) {\n                return consignments[0].selectedShippingOption;\n            }\n        },\n    );\n\n    const getLoadError = createSelector(\n        (state: ConsignmentState) => state.errors.loadError,\n        (error) => () => error,\n    );\n\n    const getCreateError = createSelector(\n        (state: ConsignmentState) => state.errors.createError,\n        (error) => () => error,\n    );\n\n    const getLoadShippingOptionsError = createSelector(\n        (state: ConsignmentState) => state.errors.loadShippingOptionsError,\n        (error) => () => error,\n    );\n\n    const getUnassignedItems = createSelector(\n        getConsignments,\n        (_: ConsignmentState, { cart }: ConsignmentSelectorDependencies) => cart.getCart,\n        (getConsignments, getCart) => () => {\n            const cart = getCart();\n\n            if (!cart) {\n                return [];\n            }\n\n            const assignedLineItemIds = (getConsignments() || []).reduce<string[]>(\n                (itemIds, consignment) => itemIds.concat(consignment.lineItemIds),\n                [],\n            );\n\n            return (cart.lineItems.physicalItems || []).filter(\n                (item) => assignedLineItemIds.indexOf(item.id as string) < 0,\n            );\n        },\n    );\n\n    const getUpdateError = createSelector(\n        (state: ConsignmentState) => state.errors.updateError,\n        (updateError) => (consignmentId?: string) => {\n            if (consignmentId) {\n                return updateError[consignmentId];\n            }\n\n            return find(updateError);\n        },\n    );\n\n    const getDeleteError = createSelector(\n        (state: ConsignmentState) => state.errors.deleteError,\n        (deleteError) => (consignmentId?: string) => {\n            if (consignmentId) {\n                return deleteError[consignmentId];\n            }\n\n            return find(deleteError);\n        },\n    );\n\n    const getItemAssignmentError = createSelector(\n        getConsignmentByAddress,\n        getUpdateError,\n        getCreateError,\n        (getConsignmentByAddress, getUpdateError, getCreateError) =>\n            (address: AddressRequestBody) => {\n                const consignment = getConsignmentByAddress(address);\n\n                return consignment ? getUpdateError(consignment.id) : getCreateError();\n            },\n    );\n\n    const getUpdateShippingOptionError = createSelector(\n        (state: ConsignmentState) => state.errors.updateShippingOptionError,\n        (updateShippingOptionError) => (consignmentId?: string) => {\n            if (consignmentId) {\n                return updateShippingOptionError[consignmentId];\n            }\n\n            return find(updateShippingOptionError);\n        },\n    );\n\n    const isLoading = createSelector(\n        (state: ConsignmentState) => state.statuses.isLoading,\n        (isLoading) => () => isLoading === true,\n    );\n\n    const isLoadingShippingOptions = createSelector(\n        (state: ConsignmentState) => state.statuses.isLoadingShippingOptions,\n        (isLoadingShippingOptions) => () => isLoadingShippingOptions === true,\n    );\n\n    const isCreating = createSelector(\n        (state: ConsignmentState) => state.statuses.isCreating,\n        (isCreating) => () => isCreating === true,\n    );\n\n    const isUpdating = createSelector(\n        (state: ConsignmentState) => state.statuses.isUpdating,\n        (isUpdating) => (consignmentId?: string) => {\n            if (consignmentId) {\n                return isUpdating[consignmentId] === true;\n            }\n\n            return find(isUpdating) === true;\n        },\n    );\n\n    const isDeleting = createSelector(\n        (state: ConsignmentState) => state.statuses.isDeleting,\n        (isDeleting) => (consignmentId?: string) => {\n            if (consignmentId) {\n                return isDeleting[consignmentId] === true;\n            }\n\n            return find(isDeleting) === true;\n        },\n    );\n\n    const isAssigningItems = createSelector(\n        getConsignmentByAddress,\n        isUpdating,\n        isCreating,\n        (getConsignmentByAddress, isUpdating, isCreating) => (address: AddressRequestBody) => {\n            const consignment = getConsignmentByAddress(address);\n\n            return consignment ? isUpdating(consignment.id) : isCreating();\n        },\n    );\n\n    const isUpdatingShippingOption = createSelector(\n        (state: ConsignmentState) => state.statuses.isUpdatingShippingOption,\n        (isUpdatingShippingOption) => (consignmentId?: string) => {\n            if (consignmentId) {\n                return isUpdatingShippingOption[consignmentId] === true;\n            }\n\n            return find(isUpdatingShippingOption) === true;\n        },\n    );\n\n    return memoizeOne(\n        (state: ConsignmentState = DEFAULT_STATE, cart: CartSelector): ConsignmentSelector => {\n            return {\n                getConsignments: getConsignments(state),\n                getConsignmentsOrThrow: getConsignmentsOrThrow(state),\n                getConsignmentById: getConsignmentById(state),\n                getConsignmentByAddress: getConsignmentByAddress(state),\n                getShippingOption: getShippingOption(state),\n                getLoadError: getLoadError(state),\n                getCreateError: getCreateError(state),\n                getLoadShippingOptionsError: getLoadShippingOptionsError(state),\n                getUnassignedItems: getUnassignedItems(state, { cart }),\n                getUpdateError: getUpdateError(state),\n                getDeleteError: getDeleteError(state),\n                getItemAssignmentError: getItemAssignmentError(state),\n                getUpdateShippingOptionError: getUpdateShippingOptionError(state),\n                isLoading: isLoading(state),\n                isLoadingShippingOptions: isLoadingShippingOptions(state),\n                isCreating: isCreating(state),\n                isUpdating: isUpdating(state),\n                isDeleting: isDeleting(state),\n                isAssigningItems: isAssigningItems(state),\n                isUpdatingShippingOption: isUpdatingShippingOption(state),\n            };\n        },\n    );\n}\n"
  },
  {
    "path": "packages/core/src/shipping/consignment-state.ts",
    "content": "import Consignment from './consignment';\n\nexport default interface ConsignmentState {\n    data?: Consignment[];\n    errors: ConsignmentErrorsState;\n    statuses: ConsignmentStatusesState;\n}\n\nexport interface ConsignmentErrorsState {\n    loadError?: Error;\n    loadShippingOptionsError?: Error;\n    createError?: Error;\n    updateError: { [key: string]: Error | undefined };\n    deleteError: { [key: string]: Error | undefined };\n    updateShippingOptionError: { [key: string]: Error | undefined };\n}\n\nexport interface ConsignmentStatusesState {\n    isLoading?: boolean;\n    isLoadingShippingOptions?: boolean;\n    isCreating?: boolean;\n    isUpdating: { [key: string]: boolean };\n    isDeleting: { [key: string]: boolean };\n    isUpdatingShippingOption: { [key: string]: boolean };\n}\n\nexport const DEFAULT_STATE: ConsignmentState = {\n    errors: {\n        updateShippingOptionError: {},\n        updateError: {},\n        deleteError: {},\n    },\n    statuses: {\n        isUpdating: {},\n        isUpdatingShippingOption: {},\n        isDeleting: {},\n    },\n};\n"
  },
  {
    "path": "packages/core/src/shipping/consignment.ts",
    "content": "import { Address, AddressRequestBody } from '../address';\n\nimport { ConsignmentDiscount } from './consignment-discount';\nimport { ConsignmentPickupOption } from './pickup-option';\nimport ShippingOption from './shipping-option';\n\nexport default interface Consignment {\n    id: string;\n    address: Address;\n    shippingAddress: Address;\n    discounts: ConsignmentDiscount[];\n    handlingCost: number;\n    shippingCost: number;\n    availableShippingOptions?: ShippingOption[];\n    selectedShippingOption?: ShippingOption;\n    selectedPickupOption?: ConsignmentPickupOption;\n    lineItemIds: string[];\n    comparisonShippingCost: number;\n    shippingCostBeforeDiscount: number;\n}\n\nexport type ConsignmentRequestBody =\n    | ConsignmentCreateRequestBody\n    | ConsignmentUpdateRequestBody\n    | ConsignmentShippingOptionRequestBody;\n\nexport interface ConsignmentCreateRequestBody {\n    address?: AddressRequestBody;\n    shippingAddress?: AddressRequestBody;\n    lineItems: ConsignmentLineItem[];\n    pickupOption?: ConsignmentPickupOption;\n}\n\nexport interface ConsignmentAssignmentBaseRequestBodyWithAddress {\n    address: AddressRequestBody;\n    lineItems: ConsignmentLineItem[];\n    pickupOption?: ConsignmentPickupOption;\n}\n\nexport interface ConsignmentAssignmentBaseRequestBodyWithShippingAddress {\n    shippingAddress: AddressRequestBody;\n    lineItems: ConsignmentLineItem[];\n    pickupOption?: ConsignmentPickupOption;\n}\n\nexport type ConsignmentAssignmentRequestBody =\n    | ConsignmentAssignmentBaseRequestBodyWithShippingAddress\n    | ConsignmentAssignmentBaseRequestBodyWithAddress;\n\nexport interface ConsignmentUpdateRequestBody {\n    id: string;\n    address?: AddressRequestBody;\n    shippingAddress?: AddressRequestBody;\n    lineItems?: ConsignmentLineItem[];\n    pickupOption?: ConsignmentPickupOption;\n    shippingOptionId?: string;\n}\n\nexport interface ConsignmentMeta {\n    id: string;\n}\n\nexport interface ConsignmentShippingOptionRequestBody {\n    id: string;\n    shippingOptionId: string;\n}\n\nexport type ConsignmentsRequestBody = ConsignmentCreateRequestBody[];\n\nexport interface ConsignmentLineItem {\n    itemId: string | number;\n    quantity: number;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/consignments.mock.ts",
    "content": "import { omit } from 'lodash';\n\nimport { Address } from '../address';\nimport { getShippingAddress } from '../shipping/shipping-addresses.mock';\nimport { getShippingOption } from '../shipping/shipping-options.mock';\n\nimport Consignment, { ConsignmentUpdateRequestBody } from './consignment';\nimport ConsignmentState from './consignment-state';\n\nexport function getConsignment(): Consignment {\n    return {\n        id: '55c96cda6f04c',\n        address: omit(getShippingAddress(), 'id') as Address,\n        selectedShippingOption: getShippingOption(),\n        shippingCost: 0,\n        handlingCost: 0,\n        lineItemIds: ['12e11c8f-7dce-4da3-9413-b649533f8bad'],\n        shippingAddress: omit(getShippingAddress(), 'id') as Address,\n        availableShippingOptions: [getShippingOption()],\n        discounts: [],\n        shippingCostBeforeDiscount: 0,\n        comparisonShippingCost: 0,\n    };\n}\n\nexport function getConsignments(): Consignment[] {\n    return [getConsignment(), getConsignment()];\n}\n\nexport function getConsignmentsState(): ConsignmentState {\n    return {\n        data: getConsignments(),\n        errors: {\n            updateError: {},\n            updateShippingOptionError: {},\n            deleteError: {},\n        },\n        statuses: {\n            isUpdating: {},\n            isUpdatingShippingOption: {},\n            isDeleting: {},\n        },\n    };\n}\n\nexport function getConsignmentRequestBody(): ConsignmentUpdateRequestBody {\n    return {\n        id: '55c96cda6f04c',\n        address: getShippingAddress(),\n        lineItems: [\n            {\n                itemId: '12e11c8f-7dce-4da3-9413-b649533f8bad',\n                quantity: 1,\n            },\n        ],\n        shippingAddress: getShippingAddress(),\n    };\n}\n"
  },
  {
    "path": "packages/core/src/shipping/create-shipping-strategy-registry.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { createCheckoutStore } from '../checkout';\nimport { Registry } from '../common/registry';\n\nimport createShippingStrategyRegistry from './create-shipping-strategy-registry';\nimport { ShippingStrategy } from './strategies';\nimport { AmazonPayV2ShippingStrategy } from './strategies/amazon-pay-v2';\nimport { BraintreeFastlaneShippingStrategy } from './strategies/braintree';\nimport { PayPalCommerceFastlaneShippingStrategy } from './strategies/paypal-commerce';\n\ndescribe('CreateShippingStrategyRegistry', () => {\n    let registry: Registry<ShippingStrategy>;\n\n    beforeEach(() => {\n        const store = createCheckoutStore();\n        const requestSender = createRequestSender();\n\n        registry = createShippingStrategyRegistry(store, requestSender);\n    });\n\n    it('can instantiate amazon pay', () => {\n        const shippingStrategy = registry.get('amazonpay');\n\n        expect(shippingStrategy).toBeInstanceOf(AmazonPayV2ShippingStrategy);\n    });\n\n    it('can instantiate braintree accelerated checkout', () => {\n        const shippingStrategy = registry.get('braintreeacceleratedcheckout');\n\n        expect(shippingStrategy).toBeInstanceOf(BraintreeFastlaneShippingStrategy);\n    });\n\n    it('can instantiate paypal commerce fastlane shipping strategy', () => {\n        const shippingStrategy = registry.get('paypalcommerceacceleratedcheckout');\n\n        expect(shippingStrategy).toBeInstanceOf(PayPalCommerceFastlaneShippingStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/create-shipping-strategy-registry.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { createAmazonPayV2PaymentProcessor } from '@bigcommerce/checkout-sdk/amazon-pay-utils';\nimport {\n    BraintreeHostWindow,\n    BraintreeIntegrationService,\n    BraintreeScriptLoader,\n    BraintreeSDKVersionManager,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    createPayPalFastlaneUtils,\n    createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { StripeScriptLoader } from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport { BillingAddressActionCreator, BillingAddressRequestSender } from '../billing';\nimport { CheckoutRequestSender, CheckoutStore } from '../checkout';\nimport { Registry } from '../common/registry';\nimport {\n    B2BCompanyPaymentMethodRequestSender,\n    PaymentMethodActionCreator,\n    PaymentMethodRequestSender,\n} from '../payment';\nimport { createPaymentIntegrationService } from '../payment-integration';\nimport { PaymentProviderCustomerActionCreator } from '../payment-provider-customer';\nimport { SubscriptionsActionCreator, SubscriptionsRequestSender } from '../subscription';\n\nimport ConsignmentActionCreator from './consignment-action-creator';\nimport ConsignmentRequestSender from './consignment-request-sender';\nimport ShippingStrategyActionCreator from './shipping-strategy-action-creator';\nimport { ShippingStrategy } from './strategies';\nimport { AmazonPayV2ShippingStrategy } from './strategies/amazon-pay-v2';\nimport { BraintreeFastlaneShippingStrategy } from './strategies/braintree';\nimport { DefaultShippingStrategy } from './strategies/default';\nimport { PayPalCommerceFastlaneShippingStrategy } from './strategies/paypal-commerce';\nimport { StripeUPEShippingStrategy } from './strategies/stripe-upe';\n\nexport default function createShippingStrategyRegistry(\n    store: CheckoutStore,\n    requestSender: RequestSender,\n): Registry<ShippingStrategy> {\n    const registry = new Registry<ShippingStrategy>();\n    const paymentIntegrationService = createPaymentIntegrationService(store);\n    const checkoutRequestSender = new CheckoutRequestSender(requestSender);\n    const consignmentRequestSender = new ConsignmentRequestSender(requestSender);\n    const consignmentActionCreator = new ConsignmentActionCreator(\n        consignmentRequestSender,\n        checkoutRequestSender,\n    );\n    const paymentMethodActionCreator = new PaymentMethodActionCreator(\n        new PaymentMethodRequestSender(requestSender),\n        new B2BCompanyPaymentMethodRequestSender(requestSender),\n    );\n    const scriptLoader = getScriptLoader();\n    const subscriptionsActionCreator = new SubscriptionsActionCreator(\n        new SubscriptionsRequestSender(requestSender),\n    );\n    const billingAddressActionCreator = new BillingAddressActionCreator(\n        new BillingAddressRequestSender(requestSender),\n        subscriptionsActionCreator,\n    );\n    const braintreeHostWindow: BraintreeHostWindow = window;\n    const braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n\n    registry.register(\n        'amazonpay',\n        () =>\n            new AmazonPayV2ShippingStrategy(\n                store,\n                consignmentActionCreator,\n                paymentMethodActionCreator,\n                createAmazonPayV2PaymentProcessor(),\n                new ShippingStrategyActionCreator(registry),\n            ),\n    );\n\n    registry.register(\n        'stripeupe',\n        () =>\n            new StripeUPEShippingStrategy(\n                store,\n                new StripeScriptLoader(scriptLoader),\n                consignmentActionCreator,\n                paymentMethodActionCreator,\n            ),\n    );\n\n    registry.register(\n        'braintreeacceleratedcheckout',\n        () =>\n            new BraintreeFastlaneShippingStrategy(\n                store,\n                billingAddressActionCreator,\n                consignmentActionCreator,\n                paymentMethodActionCreator,\n                new PaymentProviderCustomerActionCreator(),\n                new BraintreeIntegrationService(\n                    new BraintreeScriptLoader(\n                        getScriptLoader(),\n                        braintreeHostWindow,\n                        braintreeSDKVersionManager,\n                    ),\n                    braintreeHostWindow,\n                ),\n            ),\n    );\n\n    registry.register(\n        'paypalcommerceacceleratedcheckout',\n        () =>\n            new PayPalCommerceFastlaneShippingStrategy(\n                store,\n                billingAddressActionCreator,\n                consignmentActionCreator,\n                paymentMethodActionCreator,\n                new PaymentProviderCustomerActionCreator(),\n                createPayPalSdkScriptLoader(),\n                createPayPalFastlaneUtils(),\n            ),\n    );\n\n    registry.register(\n        'default',\n        () => new DefaultShippingStrategy(store, consignmentActionCreator),\n    );\n\n    return registry;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/findConsignment.ts",
    "content": "import { find, includes } from 'lodash';\n\nimport { Consignment } from './index';\n\nexport default function findConsignment(\n    consignments: Consignment[],\n    itemId: string,\n): Consignment | undefined {\n    return find(consignments, (consignment) => includes(consignment.lineItemIds, itemId));\n}\n"
  },
  {
    "path": "packages/core/src/shipping/getShippableItemsCount.spec.ts",
    "content": "import { getCart } from '../cart/carts.mock';\nimport { getDigitalItem, getGiftCertificateItem, getPhysicalItem } from '../cart/line-items.mock';\n\nimport { getConsignment } from './consignments.mock';\nimport getShippableLineItems from './getShippableLineItems';\n\ndescribe('getShippableLineItems()', () => {\n    it('returns empty if only digital items', () => {\n        expect(\n            getShippableLineItems(\n                {\n                    ...getCart(),\n                    lineItems: {\n                        digitalItems: [getDigitalItem()],\n                        physicalItems: [],\n                        giftCertificates: [],\n                    },\n                },\n                [],\n            ),\n        ).toHaveLength(0);\n    });\n\n    it('returns empty if only gift certificates items', () => {\n        expect(\n            getShippableLineItems(\n                {\n                    ...getCart(),\n                    lineItems: {\n                        digitalItems: [],\n                        physicalItems: [],\n                        giftCertificates: [getGiftCertificateItem()],\n                    },\n                },\n                [],\n            ),\n        ).toHaveLength(0);\n    });\n\n    it('returns empty if only physical items added by promotions', () => {\n        expect(\n            getShippableLineItems(\n                {\n                    ...getCart(),\n                    lineItems: {\n                        digitalItems: [],\n                        physicalItems: [\n                            {\n                                ...getPhysicalItem(),\n                                addedByPromotion: true,\n                            },\n                        ],\n                        giftCertificates: [],\n                    },\n                },\n                [],\n            ),\n        ).toHaveLength(0);\n    });\n\n    it('splits physical items quantities', () => {\n        const items = getShippableLineItems(\n            {\n                ...getCart(),\n                lineItems: {\n                    digitalItems: [],\n                    physicalItems: [\n                        {\n                            ...getPhysicalItem(),\n                            quantity: 2,\n                        },\n                    ],\n                    giftCertificates: [],\n                },\n            },\n            [],\n        );\n\n        expect(items).toHaveLength(2);\n        expect(items[0]).toMatchObject(expect.objectContaining(getPhysicalItem()));\n        expect(items[1]).toMatchObject(expect.objectContaining(getPhysicalItem()));\n    });\n\n    it('adds consignment information when available', () => {\n        const consignment = {\n            ...getConsignment(),\n            lineItemIds: [getPhysicalItem().id as string],\n        };\n\n        const items = getShippableLineItems(\n            {\n                ...getCart(),\n                lineItems: {\n                    digitalItems: [],\n                    physicalItems: [\n                        {\n                            ...getPhysicalItem(),\n                            quantity: 2,\n                        },\n                    ],\n                    giftCertificates: [],\n                },\n            },\n            [consignment],\n        );\n\n        expect(items[0].consignment).toMatchObject(expect.objectContaining(consignment));\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/getShippableLineItems.ts",
    "content": "import { reduce } from 'lodash';\n\nimport { Cart, PhysicalItem } from '../cart';\n\nimport findConsignment from './findConsignment';\nimport ShippableItem from './ShippableItem';\n\nimport { Consignment } from './index';\n\nexport default function getShippableLineItems(\n    cart: Cart,\n    consignments: Consignment[],\n): ShippableItem[] {\n    return reduce(\n        (cart && cart.lineItems.physicalItems) || [],\n        (result, item, i) =>\n            !item.addedByPromotion ? result.concat(...splitItem(item, consignments, i)) : result,\n        [] as ShippableItem[],\n    );\n}\n\nfunction splitItem(\n    item: PhysicalItem,\n    consignments: Consignment[],\n    lineItemIndex: number,\n): ShippableItem[] {\n    let splitItems: ShippableItem[] = [];\n    const consignment = findConsignment(consignments, item.id as string);\n\n    for (let i = 0; i < item.quantity; i++) {\n        splitItems = splitItems.concat({\n            ...item,\n            key: `${item.variantId}-${item.productId}-${lineItemIndex}-${i}`,\n            consignment,\n            quantity: 1,\n        });\n    }\n\n    return splitItems;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/index.ts",
    "content": "export * from './consignment-actions';\nexport * from './shipping-request-options';\n\nexport { default as createShippingStrategyRegistry } from './create-shipping-strategy-registry';\n\nexport {\n    default as Consignment,\n    ConsignmentsRequestBody,\n    ConsignmentRequestBody,\n    ConsignmentAssignmentRequestBody,\n    ConsignmentUpdateRequestBody,\n} from './consignment';\nexport {\n    default as ConsignmentSelector,\n    ConsignmentSelectorFactory,\n    createConsignmentSelectorFactory,\n} from './consignment-selector';\nexport { default as ConsignmentState } from './consignment-state';\nexport { default as consignmentReducer } from './consignment-reducer';\nexport { default as ConsignmentActionCreator } from './consignment-action-creator';\nexport { default as ConsignmentRequestSender } from './consignment-request-sender';\n\nexport { PickupOptionResult, PickupOptionRequestBody, SearchArea } from './pickup-option';\nexport { default as PickupOptionActionCreator } from './pickup-option-action-creator';\nexport { default as PickupOptionRequestSender } from './pickup-option-request-sender';\nexport {\n    default as PickupOptionSelector,\n    PickupOptionSelectorFactory,\n    createPickupOptionSelectorFactory,\n} from './pickup-option-selector';\nexport { default as PickupOptionState } from './pickup-option-state';\nexport { default as pickupOptionReducer } from './pickup-option-reducer';\n\nexport { ShippingAddress, ShippingAddressRequestBody } from './shipping-address';\nexport {\n    default as ShippingAddressSelector,\n    ShippingAddressSelectorFactory,\n    createShippingAddressSelectorFactory,\n} from './shipping-address-selector';\n\nexport { default as ShippingCountryActionCreator } from './shipping-country-action-creator';\nexport { default as ShippingCountryRequestSender } from './shipping-country-request-sender';\nexport {\n    default as ShippingCountrySelector,\n    ShippingCountrySelectorFactory,\n    createShippingCountrySelectorFactory,\n} from './shipping-country-selector';\nexport { default as ShippingCountryState } from './shipping-country-state';\nexport { default as shippingCountryReducer } from './shipping-country-reducer';\n\nexport { default as ShippingOption } from './shipping-option';\nexport {\n    default as InternalShippingOption,\n    InternalShippingOptionList,\n} from './internal-shipping-option';\n\nexport { default as ShippingStrategyActionCreator } from './shipping-strategy-action-creator';\nexport {\n    default as ShippingStrategySelector,\n    ShippingStrategySelectorFactory,\n    createShippingStrategySelectorFactory,\n} from './shipping-strategy-selector';\nexport { default as ShippingStrategyState } from './shipping-strategy-state';\nexport { default as shippingStrategyReducer } from './shipping-strategy-reducer';\n\nexport { default as mapToInternalShippingOption } from './map-to-internal-shipping-option';\nexport { default as mapToInternalShippingOptions } from './map-to-internal-shipping-options';\n"
  },
  {
    "path": "packages/core/src/shipping/internal-shipping-addresses.mock.ts",
    "content": "import { InternalAddress } from '../address';\n\nexport function getShippingAddress(): InternalAddress {\n    return {\n        id: '55c96cda6f04c',\n        firstName: 'Test',\n        lastName: 'Tester',\n        company: 'Bigcommerce',\n        addressLine1: '12345 Testing Way',\n        addressLine2: '',\n        city: 'Some City',\n        province: 'California',\n        provinceCode: 'CA',\n        postCode: '95555',\n        country: 'United States',\n        countryCode: 'US',\n        phone: '555-555-5555',\n        customFields: [],\n    };\n}\n"
  },
  {
    "path": "packages/core/src/shipping/internal-shipping-option.ts",
    "content": "export default interface InternalShippingOption {\n    description: string;\n    module: string;\n    price: number;\n    id: string;\n    selected: boolean;\n    isRecommended: boolean;\n    imageUrl: string;\n    transitTime: string;\n}\n\nexport interface InternalShippingOptionList {\n    [key: string]: InternalShippingOption[];\n}\n"
  },
  {
    "path": "packages/core/src/shipping/internal-shipping-options.mock.ts",
    "content": "import InternalShippingOption, { InternalShippingOptionList } from './internal-shipping-option';\n\nexport function getShippingOptions(): InternalShippingOptionList {\n    return {\n        '55c96cda6f04c': [getFlatRateOption()],\n    };\n}\n\nexport function getFlatRateOption(): InternalShippingOption {\n    return {\n        description: 'Flat Rate',\n        module: 'shipping_flatrate',\n        price: 0,\n        id: '0:61d4bb52f746477e1d4fb411221318c3',\n        isRecommended: true,\n        selected: true,\n        imageUrl: '',\n        transitTime: '',\n    };\n}\n"
  },
  {
    "path": "packages/core/src/shipping/map-to-internal-shipping-option.spec.ts",
    "content": "import { getFlatRateOption as getInternalShippingOption } from './internal-shipping-options.mock';\nimport mapToInternalShippingOption from './map-to-internal-shipping-option';\nimport { getShippingOption } from './shipping-options.mock';\n\ndescribe('mapToInternalShippingOption()', () => {\n    it('maps to internal shipping option', () => {\n        expect(mapToInternalShippingOption(getShippingOption(), true)).toEqual(\n            getInternalShippingOption(),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/map-to-internal-shipping-option.ts",
    "content": "import InternalShippingOption from './internal-shipping-option';\nimport ShippingOption from './shipping-option';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalShippingOption(\n    option: ShippingOption,\n    isSelected: boolean,\n): InternalShippingOption {\n    return {\n        description: option.description,\n        module: option.type,\n        price: option.cost,\n        id: option.id,\n        selected: isSelected,\n        isRecommended: option.isRecommended,\n        imageUrl: option.imageUrl,\n        transitTime: option.transitTime,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/shipping/map-to-internal-shipping-options.spec.ts",
    "content": "import { getConsignment } from './consignments.mock';\nimport { getShippingOptions as getInternalShippingOptions } from './internal-shipping-options.mock';\nimport mapToInternalShippingOptions from './map-to-internal-shipping-options';\n\ndescribe('mapToInternalShippingOptions()', () => {\n    it('maps to internal shipping options', () => {\n        expect(mapToInternalShippingOptions([getConsignment()])).toEqual(\n            getInternalShippingOptions(),\n        );\n    });\n\n    it('maps to selected shipping option if none available', () => {\n        expect(\n            mapToInternalShippingOptions([{ ...getConsignment(), availableShippingOptions: [] }]),\n        ).toEqual(getInternalShippingOptions());\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/map-to-internal-shipping-options.ts",
    "content": "import Consignment from './consignment';\nimport { InternalShippingOptionList } from './internal-shipping-option';\nimport mapToInternalShippingOption from './map-to-internal-shipping-option';\n\n/**\n * @deprecated This mapper is only for internal use only. It is required during\n * the transition period as we are moving to adopt the new storefront API object\n * schema.\n */\nexport default function mapToInternalShippingOptions(\n    consignments: Consignment[],\n): InternalShippingOptionList {\n    return consignments.reduce((result, consignment) => {\n        let shippingOptions;\n\n        if (consignment.availableShippingOptions && consignment.availableShippingOptions.length) {\n            shippingOptions = consignment.availableShippingOptions;\n        } else if (consignment.selectedShippingOption) {\n            shippingOptions = [consignment.selectedShippingOption];\n        }\n\n        return {\n            ...result,\n            [consignment.id]: (shippingOptions || []).map((option) => {\n                const selectedOptionId =\n                    consignment.selectedShippingOption && consignment.selectedShippingOption.id;\n\n                return mapToInternalShippingOption(option, option.id === selectedOptionId);\n            }),\n        };\n    }, {});\n}\n"
  },
  {
    "path": "packages/core/src/shipping/pickup-option-action-creator.spec.ts",
    "content": "import { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { getCart } from '../cart/carts.mock';\nimport { CheckoutStore, createCheckoutStore } from '../checkout';\nimport { getCheckoutState } from '../checkout/checkouts.mock';\nimport { MissingDataError } from '../common/error/errors';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport { getConsignment } from './consignments.mock';\nimport PickupOptionActionCreator from './pickup-option-action-creator';\nimport { PickupOptionActionType } from './pickup-option-actions';\nimport PickupOptionRequestSender from './pickup-option-request-sender';\nimport {\n    getApiQueryForPickupOptions,\n    getPickupOptionsResponseBody,\n    getQueryForPickupOptions,\n} from './pickup-option.mock';\n\ndescribe('PickupOptionActionCreator', () => {\n    let pickupOptionRequestSender: PickupOptionRequestSender;\n    let pickupOptionActionCreator: PickupOptionActionCreator;\n    let errorResponse: Response<Error>;\n    let response: Response<any>;\n    let store: CheckoutStore;\n\n    beforeEach(() => {\n        response = getResponse(getPickupOptionsResponseBody());\n        errorResponse = getErrorResponse();\n        store = createCheckoutStore({\n            checkout: getCheckoutState(),\n        });\n\n        pickupOptionRequestSender = new PickupOptionRequestSender(createRequestSender());\n        pickupOptionActionCreator = new PickupOptionActionCreator(pickupOptionRequestSender);\n\n        jest.spyOn(pickupOptionRequestSender, 'fetchPickupOptions').mockReturnValue(\n            Promise.resolve(response),\n        );\n    });\n\n    it('emits actions if able to fetch pickup options', async () => {\n        jest.spyOn(store.getState().cart, 'getCartOrThrow').mockReturnValue(getCart());\n\n        const consignment = getConsignment();\n\n        consignment.lineItemIds.pop();\n\n        const id = getCart().lineItems.physicalItems[0].id;\n\n        consignment.lineItemIds.push(id.toString());\n        jest.spyOn(store.getState().consignments, 'getConsignmentById').mockReturnValue(\n            consignment,\n        );\n\n        const query = getQueryForPickupOptions();\n        const actions = await from(pickupOptionActionCreator.loadPickupOptions(query)(store))\n            .pipe(toArray())\n            .toPromise();\n\n        expect(pickupOptionRequestSender.fetchPickupOptions).toHaveBeenCalledWith(\n            getApiQueryForPickupOptions(),\n        );\n\n        expect(actions).toEqual([\n            { type: PickupOptionActionType.LoadPickupOptionsRequested },\n            {\n                type: PickupOptionActionType.LoadPickupOptionsSucceeded,\n                payload: response.body.results,\n                meta: query,\n            },\n        ]);\n    });\n\n    it('throws an exception when there is no cart', async () => {\n        try {\n            await from(\n                pickupOptionActionCreator.loadPickupOptions(getQueryForPickupOptions())(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n        } catch (exception) {\n            expect(exception).toBeInstanceOf(MissingDataError);\n        }\n    });\n\n    it('throws an exception when there is no consignment', async () => {\n        jest.spyOn(store.getState().cart, 'getCartOrThrow').mockReturnValue(getCart());\n\n        try {\n            await from(\n                pickupOptionActionCreator.loadPickupOptions(getQueryForPickupOptions())(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n        } catch (exception) {\n            expect(exception).toBeInstanceOf(MissingDataError);\n        }\n    });\n\n    it('emits error actions if unable to fetch pickup options', async () => {\n        jest.spyOn(store.getState().cart, 'getCartOrThrow').mockReturnValue(getCart());\n\n        const consignment = getConsignment();\n\n        consignment.lineItemIds.pop();\n\n        const id = getCart().lineItems.physicalItems[0].id;\n\n        consignment.lineItemIds.push(id.toString());\n        jest.spyOn(store.getState().consignments, 'getConsignmentById').mockReturnValue(\n            consignment,\n        );\n        jest.spyOn(pickupOptionRequestSender, 'fetchPickupOptions').mockReturnValue(\n            Promise.reject(errorResponse),\n        );\n\n        const errorHandler = jest.fn((action) => of(action));\n\n        await from(pickupOptionActionCreator.loadPickupOptions(getQueryForPickupOptions())(store))\n            .pipe(catchError(errorHandler), toArray())\n            .subscribe((actions) => {\n                expect(actions).toEqual([\n                    { type: PickupOptionActionType.LoadPickupOptionsRequested },\n                    {\n                        type: PickupOptionActionType.LoadPickupOptionsFailed,\n                        payload: errorResponse,\n                        error: true,\n                    },\n                ]);\n            });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/pickup-option-action-creator.ts",
    "content": "import {\n    createAction,\n    createErrorAction,\n    ReadableDataStore,\n    ThunkAction,\n} from '@bigcommerce/data-store';\nimport { includes } from 'lodash';\nimport { Observable, Observer } from 'rxjs';\n\nimport { LineItem } from '../cart';\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\n\nimport { PickupOptionAPIRequestBody, PickupOptionRequestBody } from './pickup-option';\nimport { LoadPickupOptionsAction, PickupOptionActionType } from './pickup-option-actions';\nimport PickupOptionRequestSender from './pickup-option-request-sender';\n\nexport default class PickupOptionActionCreator {\n    constructor(private _pickupOptionRequestSender: PickupOptionRequestSender) {}\n\n    loadPickupOptions(\n        query: PickupOptionRequestBody,\n    ): ThunkAction<LoadPickupOptionsAction, InternalCheckoutSelectors> {\n        return (store) =>\n            new Observable((observer: Observer<LoadPickupOptionsAction>) => {\n                const apiQuery = this._hydrateApiQuery(store, query);\n\n                observer.next(createAction(PickupOptionActionType.LoadPickupOptionsRequested));\n\n                this._pickupOptionRequestSender\n                    .fetchPickupOptions(apiQuery)\n                    .then((response) => {\n                        observer.next(\n                            createAction(\n                                PickupOptionActionType.LoadPickupOptionsSucceeded,\n                                response.body.results,\n                                query,\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((response) => {\n                        observer.error(\n                            createErrorAction(\n                                PickupOptionActionType.LoadPickupOptionsFailed,\n                                response,\n                            ),\n                        );\n                    });\n            });\n    }\n\n    private _hydrateApiQuery(\n        store: ReadableDataStore<InternalCheckoutSelectors>,\n        query: PickupOptionRequestBody,\n    ): PickupOptionAPIRequestBody {\n        const state = store.getState();\n        const cart = state.cart.getCartOrThrow();\n\n        if (!cart) {\n            throw new MissingDataError(MissingDataErrorType.MissingCart);\n        }\n\n        const consignment = state.consignments.getConsignmentById(query.consignmentId);\n\n        if (!consignment) {\n            throw new MissingDataError(MissingDataErrorType.MissingConsignments);\n        }\n\n        const consignmentLineItems = consignment.lineItemIds;\n        const physicalItems = cart.lineItems.physicalItems;\n        const cartItems = physicalItems\n            .filter((item: LineItem) => includes(consignmentLineItems, item.id))\n            .map((item) => ({\n                variantId: item.variantId,\n                quantity: item.quantity,\n            }));\n\n        return {\n            searchArea: query.searchArea,\n            items: cartItems,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/pickup-option-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { PickupOptionMeta, PickupOptionResult } from './pickup-option';\n\nexport enum PickupOptionActionType {\n    LoadPickupOptionsRequested = 'LOAD_PICKUP_OPTIONS_REQUESTED',\n    LoadPickupOptionsSucceeded = 'LOAD_PICKUP_OPTIONS_SUCCEEDED',\n    LoadPickupOptionsFailed = 'LOAD_PICKUP_OPTIONS_FAILED',\n}\n\nexport type LoadPickupOptionsAction =\n    | PickupOptionRequestedAction\n    | LoadPickupOptionsSucceededAction\n    | LoadPickupOptionsFailedAction;\n\nexport interface PickupOptionRequestedAction extends Action {\n    type: PickupOptionActionType.LoadPickupOptionsRequested;\n}\n\nexport interface LoadPickupOptionsSucceededAction\n    extends Action<PickupOptionResult[], PickupOptionMeta> {\n    type: PickupOptionActionType.LoadPickupOptionsSucceeded;\n}\n\nexport interface LoadPickupOptionsFailedAction extends Action<Error> {\n    type: PickupOptionActionType.LoadPickupOptionsFailed;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/pickup-option-reducer.spec.ts",
    "content": "import { objectFlatten, objectWithSortedKeys } from '../common/utility';\n\nimport { LoadPickupOptionsAction, PickupOptionActionType } from './pickup-option-actions';\nimport pickupOptionReducer from './pickup-option-reducer';\nimport PickupOptionState from './pickup-option-state';\nimport { getPickupOptions, getQueryForPickupOptions } from './pickup-option.mock';\n\ndescribe('pickupOptionReducer()', () => {\n    let initialState: PickupOptionState;\n\n    beforeEach(() => {\n        initialState = {\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    it('returns a new state when fetching pickup options', () => {\n        const action: LoadPickupOptionsAction = {\n            type: PickupOptionActionType.LoadPickupOptionsRequested,\n        };\n\n        expect(pickupOptionReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: {},\n            statuses: { isLoading: true },\n        });\n    });\n\n    it('returns a new state when pickup options are fetched', () => {\n        const query = getQueryForPickupOptions();\n        const action: LoadPickupOptionsAction = {\n            type: PickupOptionActionType.LoadPickupOptionsSucceeded,\n            meta: query,\n            payload: [getPickupOptions()],\n        };\n\n        const codedKey = btoa(`${JSON.stringify(objectWithSortedKeys(objectFlatten(query)))}`);\n\n        expect(pickupOptionReducer(initialState, action)).toEqual({\n            data: {\n                [codedKey]: action.payload,\n            },\n            errors: { loadError: undefined },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns a new state when pickup options cannot be fetched', () => {\n        const action: LoadPickupOptionsAction = {\n            type: PickupOptionActionType.LoadPickupOptionsFailed,\n        };\n\n        expect(pickupOptionReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: { loadError: action.payload },\n            statuses: { isLoading: false },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/pickup-option-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectFlatten, objectSet, objectWithSortedKeys } from '../common/utility';\n\nimport { PickupOptionQueryMap } from './pickup-option';\nimport { LoadPickupOptionsAction, PickupOptionActionType } from './pickup-option-actions';\nimport PickupOptionState, {\n    DEFAULT_STATE,\n    PickupOptionErrorsState,\n    PickupOptionStatusesState,\n} from './pickup-option-state';\n\nexport default function pickupOptionReducer(\n    state: PickupOptionState = DEFAULT_STATE,\n    action: Action,\n): PickupOptionState {\n    const reducer = combineReducers<PickupOptionState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: PickupOptionQueryMap | undefined,\n    action: LoadPickupOptionsAction,\n): PickupOptionQueryMap | undefined {\n    switch (action.type) {\n        case PickupOptionActionType.LoadPickupOptionsSucceeded:\n            if (action.meta) {\n                const optionQuery = {\n                    consignmentId: action.meta.consignmentId,\n                    searchArea: action.meta.searchArea,\n                };\n                const flattenedMeta = objectFlatten(optionQuery);\n                const sortedflattenedMeta = objectWithSortedKeys(flattenedMeta);\n                const keyString = btoa(`${JSON.stringify(sortedflattenedMeta)}`);\n\n                return objectSet(data, keyString, action.payload);\n            }\n\n            break;\n\n        default:\n            return data;\n    }\n}\n\nfunction errorsReducer(errors: PickupOptionErrorsState = DEFAULT_STATE.errors, action: Action) {\n    switch (action.type) {\n        case PickupOptionActionType.LoadPickupOptionsRequested:\n        case PickupOptionActionType.LoadPickupOptionsSucceeded:\n            return objectSet(errors, 'loadError', undefined);\n\n        case PickupOptionActionType.LoadPickupOptionsFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: PickupOptionStatusesState = DEFAULT_STATE.statuses,\n    action: Action,\n) {\n    switch (action.type) {\n        case PickupOptionActionType.LoadPickupOptionsRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case PickupOptionActionType.LoadPickupOptionsSucceeded:\n        case PickupOptionActionType.LoadPickupOptionsFailed:\n            return objectSet(statuses, 'isLoading', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/pickup-option-request-sender.spec.ts",
    "content": "import { createRequestSender, RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getResponse } from '../common/http-request/responses.mock';\n\nimport { PickupOptionResponse } from './pickup-option';\nimport PickupOptionRequestSender from './pickup-option-request-sender';\nimport { getApiQueryForPickupOptions, getPickupOptionsResponseBody } from './pickup-option.mock';\n\ndescribe('PickupOptionRequestSender', () => {\n    let pickupOptionRequestSender: PickupOptionRequestSender;\n    let requestSender: RequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        pickupOptionRequestSender = new PickupOptionRequestSender(requestSender);\n    });\n\n    describe('#fetchPickupOptions', () => {\n        let response: Response<PickupOptionResponse>;\n\n        beforeEach(() => {\n            response = getResponse(getPickupOptionsResponseBody());\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n        });\n\n        it('fetches pickup options', async () => {\n            const query = getApiQueryForPickupOptions();\n            const output = await pickupOptionRequestSender.fetchPickupOptions(query);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith('/api/storefront/pickup-options', {\n                headers: { Accept: ContentType.Json, ...SDK_VERSION_HEADERS },\n                body: query,\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/pickup-option-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport { PickupOptionAPIRequestBody, PickupOptionResponse } from './pickup-option';\n\nconst url = '/api/storefront/pickup-options';\n\nexport default class PickupOptionRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    fetchPickupOptions(query: PickupOptionAPIRequestBody): Promise<Response<PickupOptionResponse>> {\n        return this._requestSender.post(url, {\n            headers: { Accept: ContentType.Json, ...SDK_VERSION_HEADERS },\n            body: query,\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/pickup-option-selector.spec.ts",
    "content": "import { CheckoutStoreState } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { objectFlatten, objectWithSortedKeys } from '../common/utility';\n\nimport PickupOptionSelector, {\n    createPickupOptionSelectorFactory,\n    PickupOptionSelectorFactory,\n} from './pickup-option-selector';\nimport { getQueryForPickupOptions } from './pickup-option.mock';\n\nimport { PickupOptionRequestBody } from '.';\n\ndescribe('PickupOptionSelector', () => {\n    let pickupOptionSelector: PickupOptionSelector;\n    let createPickupOptionSelector: PickupOptionSelectorFactory;\n    let state: CheckoutStoreState;\n    let query: PickupOptionRequestBody;\n\n    beforeEach(() => {\n        createPickupOptionSelector = createPickupOptionSelectorFactory();\n        state = getCheckoutStoreState();\n        query = getQueryForPickupOptions();\n    });\n\n    describe('#getPickupOptions()', () => {\n        it.only('returns a list of pickup options', () => {\n            pickupOptionSelector = createPickupOptionSelector(state.pickupOptions);\n\n            const flattenedQuery = objectFlatten(query);\n            const sortedFlattenedQuery = objectWithSortedKeys(flattenedQuery);\n            const result =\n                state.pickupOptions.data &&\n                state.pickupOptions.data[btoa(JSON.stringify(sortedFlattenedQuery))];\n\n            expect(\n                pickupOptionSelector.getPickupOptions(query.consignmentId, query.searchArea),\n            ).toEqual(result);\n        });\n\n        it('returns an empty array if there are no pickup options', () => {\n            pickupOptionSelector = createPickupOptionSelector({\n                ...state.pickupOptions,\n                data: {},\n            });\n\n            expect(\n                pickupOptionSelector.getPickupOptions(query.consignmentId, query.searchArea),\n            ).toBeUndefined();\n        });\n    });\n\n    describe('#getLoadError()', () => {\n        it('returns error if unable to load', () => {\n            const loadError = new Error();\n\n            pickupOptionSelector = createPickupOptionSelector({\n                ...state.pickupOptions,\n                errors: { loadError },\n            });\n\n            expect(pickupOptionSelector.getLoadError()).toEqual(loadError);\n        });\n\n        it('does not returns error if able to load', () => {\n            pickupOptionSelector = createPickupOptionSelector(state.pickupOptions);\n\n            expect(pickupOptionSelector.getLoadError()).toBeUndefined();\n        });\n    });\n\n    describe('#isLoading()', () => {\n        it('returns true if loading countries', () => {\n            pickupOptionSelector = createPickupOptionSelector({\n                ...state.pickupOptions,\n                statuses: { isLoading: true },\n            });\n\n            expect(pickupOptionSelector.isLoading()).toBe(true);\n        });\n\n        it('returns false if not loading countries', () => {\n            pickupOptionSelector = createPickupOptionSelector(state.pickupOptions);\n\n            expect(pickupOptionSelector.isLoading()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/pickup-option-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\nimport { objectFlatten, objectWithSortedKeys } from '../common/utility';\n\nimport { PickupOptionResult, SearchArea } from './pickup-option';\nimport PickupOptionState, { DEFAULT_STATE } from './pickup-option-state';\n\nexport default interface PickupOptionSelector {\n    getPickupOptions(\n        consignmentId: string,\n        searchArea: SearchArea,\n    ): PickupOptionResult[] | undefined;\n    getLoadError(): Error | undefined;\n    isLoading(): boolean;\n}\n\nexport type PickupOptionSelectorFactory = (state: PickupOptionState) => PickupOptionSelector;\n\nexport function createPickupOptionSelectorFactory(): PickupOptionSelectorFactory {\n    const getPickupOptions = createSelector(\n        (state: PickupOptionState) => state.data,\n        (pickupOptions) => (consignmentId: string, searchArea: SearchArea) => {\n            if (!pickupOptions) {\n                return;\n            }\n\n            const flattenedParams = objectFlatten({ consignmentId, searchArea });\n            const sortedFlattenedParams = objectWithSortedKeys(flattenedParams);\n            const keyString = btoa(`${JSON.stringify(sortedFlattenedParams)}`);\n\n            return pickupOptions[keyString];\n        },\n    );\n\n    const getLoadError = createSelector(\n        (state: PickupOptionState) => state.errors.loadError,\n        (error) => () => error,\n    );\n\n    const isLoading = createSelector(\n        (state: PickupOptionState) => !!state.statuses.isLoading,\n        (status) => () => status,\n    );\n\n    return memoizeOne((state: PickupOptionState = DEFAULT_STATE): PickupOptionSelector => {\n        return {\n            getPickupOptions: getPickupOptions(state),\n            getLoadError: getLoadError(state),\n            isLoading: isLoading(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/shipping/pickup-option-state.ts",
    "content": "import { PickupOptionQueryMap } from './pickup-option';\n\nexport default interface PickupOptionState {\n    data?: PickupOptionQueryMap;\n    errors: PickupOptionErrorsState;\n    statuses: PickupOptionStatusesState;\n}\n\nexport interface PickupOptionErrorsState {\n    loadError?: Error;\n}\n\nexport interface PickupOptionStatusesState {\n    isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: PickupOptionState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/shipping/pickup-option.mock.ts",
    "content": "import {\n    PickupOptionAPIRequestBody,\n    PickupOptionRequestBody,\n    PickupOptionResponse,\n    PickupOptionResult,\n    RadiusUnit,\n} from './pickup-option';\n\nimport { PickupOptionState } from '.';\n\nexport function getApiQueryForPickupOptions(): PickupOptionAPIRequestBody {\n    return {\n        searchArea: {\n            radius: {\n                value: 1.4,\n                unit: RadiusUnit.KM,\n            },\n            coordinates: {\n                latitude: 1.4,\n                longitude: 1.4,\n            },\n        },\n        items: [\n            {\n                variantId: 71,\n                quantity: 1,\n            },\n        ],\n    };\n}\n\nexport function getQueryForPickupOptions(): PickupOptionRequestBody {\n    return {\n        consignmentId: '55c96cda6f04c',\n        searchArea: {\n            radius: {\n                value: 1.4,\n                unit: RadiusUnit.KM,\n            },\n            coordinates: {\n                latitude: 1.4,\n                longitude: 1.4,\n            },\n        },\n    };\n}\n\nexport function getPickupOptions(): PickupOptionResult {\n    return {\n        options: [\n            {\n                pickupMethod: {\n                    id: 1,\n                    locationId: 1,\n                    displayName: 'test',\n                    collectionInstructions: 'none',\n                    collectionTimeDescription: 'desc',\n                },\n                itemQuantities: {\n                    variantId: 1,\n                    quantity: 1,\n                },\n            },\n        ],\n    };\n}\n\nexport function getPickupOptionsResponseBody(): PickupOptionResponse {\n    return {\n        results: [getPickupOptions()],\n    };\n}\n\nconst query = getQueryForPickupOptions();\nconst keyString = btoa(`${query.consignmentId}-${JSON.stringify(query.searchArea)}`);\n\nexport function getPickupOptionsState(): PickupOptionState {\n    return {\n        data: {\n            [keyString]: [getPickupOptions()],\n        },\n        errors: {},\n        statuses: {},\n    };\n}\n"
  },
  {
    "path": "packages/core/src/shipping/pickup-option.ts",
    "content": "interface Item {\n    variantId: number;\n    quantity: number;\n}\n\nexport enum RadiusUnit {\n    KM = 'KM',\n    MI = 'MI',\n}\n\ninterface Radius {\n    value: number;\n    unit: RadiusUnit;\n}\n\ninterface Coordinates {\n    latitude: number;\n    longitude: number;\n}\n\nexport interface SearchArea {\n    radius: Radius;\n    coordinates: Coordinates;\n}\n\ninterface PickupMethod {\n    id: number;\n    locationId: number;\n    displayName: string;\n    collectionInstructions: string;\n    collectionTimeDescription: string;\n}\n\ninterface Option {\n    pickupMethod: PickupMethod;\n    itemQuantities: Item;\n}\n\nexport interface PickupOptionResult {\n    options: Option[];\n}\n\nexport interface PickupOptionRequestBody {\n    searchArea: SearchArea;\n    consignmentId: string;\n}\n\nexport interface PickupOptionAPIRequestBody {\n    searchArea: SearchArea;\n    items: Item[];\n}\n\nexport interface ConsignmentPickupOption {\n    pickupMethodId: number;\n}\n\nexport interface PickupOptionResponse {\n    results: PickupOptionResult[];\n}\n\nexport type PickupOptionMeta = PickupOptionRequestBody;\n\nexport interface PickupOptionQueryMap {\n    [index: string]: PickupOptionResult[] | undefined;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-address-selector.spec.ts",
    "content": "import ConsignmentState from './consignment-state';\nimport { getConsignment, getConsignmentsState } from './consignments.mock';\nimport ShippingAddressSelector, {\n    createShippingAddressSelectorFactory,\n    ShippingAddressSelectorFactory,\n} from './shipping-address-selector';\n\ndescribe('ShippingAddressSelector', () => {\n    let createShippingAddressSelector: ShippingAddressSelectorFactory;\n    let shippingAddressSelector: ShippingAddressSelector;\n    let consignmentState: ConsignmentState;\n\n    describe('#getShippingAddress()', () => {\n        beforeEach(() => {\n            createShippingAddressSelector = createShippingAddressSelectorFactory();\n            consignmentState = getConsignmentsState();\n        });\n\n        it('returns the current shipping address', () => {\n            shippingAddressSelector = createShippingAddressSelector(consignmentState);\n\n            expect(shippingAddressSelector.getShippingAddress()).toEqual(\n                getConsignment().shippingAddress,\n            );\n        });\n\n        describe('when there is no shipping information', () => {\n            beforeEach(() => {\n                consignmentState = {\n                    ...consignmentState,\n                    data: undefined,\n                };\n            });\n\n            it('returns undefined', () => {\n                shippingAddressSelector = createShippingAddressSelector(consignmentState);\n\n                expect(shippingAddressSelector.getShippingAddress()).toBeUndefined();\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-address-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { Address } from '../address';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\nimport { guard } from '../common/utility';\n\nimport ConsignmentState, { DEFAULT_STATE } from './consignment-state';\n\nexport default interface ShippingAddressSelector {\n    getShippingAddress(): Address | undefined;\n    getShippingAddressOrThrow(): Address;\n    getShippingAddresses(): Address[];\n    getShippingAddressesOrThrow(): Address[];\n}\n\nexport type ShippingAddressSelectorFactory = (state: ConsignmentState) => ShippingAddressSelector;\n\nexport function createShippingAddressSelectorFactory(): ShippingAddressSelectorFactory {\n    const getShippingAddress = createSelector(\n        (state: ConsignmentState) => state.data,\n        (consignments) => () => {\n            const shippingConsignment = consignments?.find(\n                (consignment) => !consignment.selectedPickupOption,\n            );\n\n            return shippingConsignment?.shippingAddress;\n        },\n    );\n\n    const getShippingAddressOrThrow = createSelector(\n        getShippingAddress,\n        (getShippingAddress) => () => {\n            return guard(\n                getShippingAddress(),\n                () => new MissingDataError(MissingDataErrorType.MissingShippingAddress),\n            );\n        },\n    );\n\n    const getShippingAddresses = createSelector(\n        (state: ConsignmentState) => state.data,\n        (consignments) => () => {\n            const shippingConsignments = consignments?.filter(\n                (consignment) => !consignment.selectedPickupOption,\n            );\n\n            return shippingConsignments\n                ? shippingConsignments.map((consignment) => consignment.shippingAddress)\n                : [];\n        },\n    );\n\n    const getShippingAddressesOrThrow = createSelector(\n        getShippingAddresses,\n        (getShippingAddresses) => () => {\n            return guard(\n                getShippingAddresses(),\n                () => new MissingDataError(MissingDataErrorType.MissingShippingAddress),\n            );\n        },\n    );\n\n    return memoizeOne((state: ConsignmentState = DEFAULT_STATE): ShippingAddressSelector => {\n        return {\n            getShippingAddress: getShippingAddress(state),\n            getShippingAddressOrThrow: getShippingAddressOrThrow(state),\n            getShippingAddresses: getShippingAddresses(state),\n            getShippingAddressesOrThrow: getShippingAddressesOrThrow(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-address.ts",
    "content": "import { Address, AddressRequestBody } from '../address';\n\nexport type ShippingAddress = Address;\nexport type ShippingAddressRequestBody = AddressRequestBody;\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-addresses.mock.ts",
    "content": "import { Address } from '../address';\n\nexport function getShippingAddress(): Address {\n    return {\n        firstName: 'Test',\n        lastName: 'Tester',\n        company: 'Bigcommerce',\n        address1: '12345 Testing Way',\n        address2: '',\n        city: 'Some City',\n        stateOrProvince: 'California',\n        stateOrProvinceCode: 'CA',\n        country: 'United States',\n        countryCode: 'US',\n        postalCode: '95555',\n        phone: '555-555-5555',\n        shouldSaveAddress: false,\n        customFields: [],\n    };\n}\n\nexport function getShippingAddressWithCustomFields(): Address {\n    return {\n        firstName: 'Amazon',\n        lastName: 'Tester',\n        company: 'Bigcommerce',\n        address1: '12345 Amazon Test',\n        address2: 'Test Street',\n        city: 'Testing City',\n        stateOrProvince: 'New York',\n        stateOrProvinceCode: 'NY',\n        country: 'United States',\n        countryCode: 'US',\n        postalCode: '95555',\n        phone: '666-666-6666',\n        customFields: [\n            {\n                fieldId: 'field_25',\n                fieldValue: '33',\n            },\n        ],\n    };\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-countries.mock.ts",
    "content": "import { Country, CountryResponseBody } from '../geography';\n\nimport ShippingCountryState from './shipping-country-state';\n\nexport function getShippingCountries(): Country[] {\n    return [getAustralia(), getJapan()];\n}\n\nexport function getShippingCountriesResponseBody(): CountryResponseBody {\n    return {\n        meta: {},\n        data: getShippingCountries(),\n    };\n}\n\nexport function getShippingCountriesState(): ShippingCountryState {\n    return {\n        data: getShippingCountries(),\n        errors: {},\n        statuses: {},\n    };\n}\n\nexport function getAustralia(): Country {\n    return {\n        code: 'AU',\n        name: 'Australia',\n        subdivisions: [{ code: 'NSW', name: 'New South Wales' }],\n        hasPostalCodes: true,\n        requiresState: true,\n    };\n}\n\nexport function getJapan(): Country {\n    return {\n        code: 'JP',\n        name: 'Japan',\n        hasPostalCodes: false,\n        subdivisions: [],\n        requiresState: false,\n    };\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-country-action-creator.spec.ts",
    "content": "import { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { ErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { CheckoutStore } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport createCheckoutStore from '../checkout/create-checkout-store';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\nimport { getCountries } from '../geography/countries.mock';\n\nimport ShippingCountryActionCreator from './shipping-country-action-creator';\nimport { ShippingCountryActionType } from './shipping-country-actions';\nimport ShippingCountryRequestSender from './shipping-country-request-sender';\n\ndescribe('ShippingCountryActionCreator', () => {\n    let requestSender: ShippingCountryRequestSender;\n    let shippingCountryActionCreator: ShippingCountryActionCreator;\n    let errorResponse: Response<ErrorResponseBody>;\n    let response: Response<any>;\n    let store: CheckoutStore;\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreState());\n        response = getResponse({ data: getCountries() });\n        errorResponse = getErrorResponse();\n\n        requestSender = new ShippingCountryRequestSender(createRequestSender(), {});\n\n        jest.spyOn(requestSender, 'loadCountries').mockReturnValue(Promise.resolve(response));\n\n        shippingCountryActionCreator = new ShippingCountryActionCreator(requestSender, store);\n    });\n\n    describe('#loadCountries()', () => {\n        it('emits actions if able to load countries', () => {\n            shippingCountryActionCreator\n                .loadCountries()\n                .pipe(toArray())\n                .subscribe((actions) => {\n                    expect(actions).toEqual([\n                        { type: ShippingCountryActionType.LoadShippingCountriesRequested },\n                        {\n                            type: ShippingCountryActionType.LoadShippingCountriesSucceeded,\n                            payload: response.body.data,\n                        },\n                    ]);\n                });\n        });\n\n        it('emits error actions if unable to load countries', () => {\n            jest.spyOn(requestSender, 'loadCountries').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            shippingCountryActionCreator\n                .loadCountries()\n                .pipe(catchError(errorHandler), toArray())\n                .subscribe((actions) => {\n                    expect(errorHandler).toHaveBeenCalled();\n                    expect(actions).toEqual([\n                        { type: ShippingCountryActionType.LoadShippingCountriesRequested },\n                        {\n                            type: ShippingCountryActionType.LoadShippingCountriesFailed,\n                            payload: errorResponse,\n                            error: true,\n                        },\n                    ]);\n                });\n        });\n\n        describe('when checkout is undefined', () => {\n            beforeEach(() => {\n                store = createCheckoutStore({ checkout: undefined });\n                shippingCountryActionCreator = new ShippingCountryActionCreator(\n                    requestSender,\n                    store,\n                );\n            });\n\n            it('passes null as channelId when checkout is undefined', () => {\n                const loadCountriesSpy = jest.spyOn(requestSender, 'loadCountries');\n\n                shippingCountryActionCreator.loadCountries().subscribe();\n\n                expect(loadCountriesSpy).toHaveBeenCalledWith(null, undefined);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-country-action-creator.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\nimport { Observable, Observer } from 'rxjs';\n\nimport CheckoutStore from '../checkout/checkout-store';\nimport { RequestOptions } from '../common/http-request';\n\nimport { LoadShippingCountriesAction, ShippingCountryActionType } from './shipping-country-actions';\nimport ShippingCountryRequestSender from './shipping-country-request-sender';\n\nexport default class ShippingCountryActionCreator {\n    constructor(\n        private _shippingCountryRequestSender: ShippingCountryRequestSender,\n        private _store: CheckoutStore,\n    ) {}\n\n    loadCountries(options?: RequestOptions): Observable<LoadShippingCountriesAction> {\n        const { checkout } = this._store.getState();\n        const checkoutData = checkout.getCheckout();\n\n        const channelId = checkoutData ? checkoutData.channelId : null;\n\n        return Observable.create((observer: Observer<LoadShippingCountriesAction>) => {\n            observer.next(createAction(ShippingCountryActionType.LoadShippingCountriesRequested));\n\n            this._shippingCountryRequestSender\n                .loadCountries(channelId, options)\n                .then((response) => {\n                    observer.next(\n                        createAction(\n                            ShippingCountryActionType.LoadShippingCountriesSucceeded,\n                            response.body.data,\n                        ),\n                    );\n                    observer.complete();\n                })\n                .catch((response) => {\n                    observer.error(\n                        createErrorAction(\n                            ShippingCountryActionType.LoadShippingCountriesFailed,\n                            response,\n                        ),\n                    );\n                });\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-country-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { Country } from '../geography';\n\nexport enum ShippingCountryActionType {\n    LoadShippingCountriesRequested = 'LOAD_SHIPPING_COUNTRIES_REQUESTED',\n    LoadShippingCountriesSucceeded = 'LOAD_SHIPPING_COUNTRIES_SUCCEEDED',\n    LoadShippingCountriesFailed = 'LOAD_SHIPPING_COUNTRIES_FAILED',\n}\n\nexport type LoadShippingCountriesAction =\n    | LoadShippingCountriesRequestedAction\n    | LoadShippingCountriesSucceededAction\n    | LoadShippingCountriesFailedAction;\n\nexport interface LoadShippingCountriesRequestedAction extends Action {\n    type: ShippingCountryActionType.LoadShippingCountriesRequested;\n}\n\nexport interface LoadShippingCountriesSucceededAction extends Action<Country[]> {\n    type: ShippingCountryActionType.LoadShippingCountriesSucceeded;\n}\n\nexport interface LoadShippingCountriesFailedAction extends Action<Error> {\n    type: ShippingCountryActionType.LoadShippingCountriesFailed;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-country-reducer.spec.ts",
    "content": "import { createErrorAction } from '@bigcommerce/data-store';\n\nimport { RequestErrorFactory } from '../common/error';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\nimport { getCountries } from '../geography/countries.mock';\n\nimport { LoadShippingCountriesAction, ShippingCountryActionType } from './shipping-country-actions';\nimport shippingCountryReducer from './shipping-country-reducer';\nimport ShippingCountryState from './shipping-country-state';\n\ndescribe('shippingCountryReducer()', () => {\n    let initialState: ShippingCountryState;\n\n    beforeEach(() => {\n        initialState = {\n            data: getCountries(),\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    it('returns a new state when fetching new countries', () => {\n        const action: LoadShippingCountriesAction = {\n            type: ShippingCountryActionType.LoadShippingCountriesRequested,\n        };\n\n        expect(shippingCountryReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: {},\n            statuses: { isLoading: true },\n        });\n    });\n\n    it('returns a new state when countries are fetched', () => {\n        const action: LoadShippingCountriesAction = {\n            type: ShippingCountryActionType.LoadShippingCountriesSucceeded,\n            payload: [\n                {\n                    code: 'JP',\n                    name: 'Japan',\n                    hasPostalCodes: false,\n                    subdivisions: [],\n                    requiresState: false,\n                },\n            ],\n        };\n\n        expect(shippingCountryReducer(initialState, action)).toEqual({\n            data: action.payload,\n            errors: { loadError: undefined },\n            statuses: { isLoading: false },\n        });\n    });\n\n    it('returns a new state when countries cannot be fetched', () => {\n        const action = createErrorAction(\n            ShippingCountryActionType.LoadShippingCountriesFailed,\n            new RequestErrorFactory().createError(getErrorResponse()),\n        );\n\n        expect(shippingCountryReducer(initialState, action)).toEqual({\n            ...initialState,\n            errors: { loadError: action.payload },\n            statuses: { isLoading: false },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-country-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { arrayReplace, objectSet } from '../common/utility';\nimport { Country } from '../geography';\n\nimport { LoadShippingCountriesAction, ShippingCountryActionType } from './shipping-country-actions';\nimport ShippingCountryState, {\n    DEFAULT_STATE,\n    ShippingCountryErrorsState,\n    ShippingCountryStatusesState,\n} from './shipping-country-state';\n\nexport default function shippingCountryReducer(\n    state: ShippingCountryState = DEFAULT_STATE,\n    action: Action,\n): ShippingCountryState {\n    const reducer = combineReducers<ShippingCountryState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: Country[] | undefined,\n    action: LoadShippingCountriesAction,\n): Country[] | undefined {\n    switch (action.type) {\n        case ShippingCountryActionType.LoadShippingCountriesSucceeded:\n            return arrayReplace(data, action.payload);\n\n        default:\n            return data;\n    }\n}\n\nfunction errorsReducer(\n    errors: ShippingCountryErrorsState = DEFAULT_STATE.errors,\n    action: LoadShippingCountriesAction,\n): ShippingCountryErrorsState {\n    switch (action.type) {\n        case ShippingCountryActionType.LoadShippingCountriesRequested:\n        case ShippingCountryActionType.LoadShippingCountriesSucceeded:\n            return objectSet(errors, 'loadError', undefined);\n\n        case ShippingCountryActionType.LoadShippingCountriesFailed:\n            return objectSet(errors, 'loadError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: ShippingCountryStatusesState = DEFAULT_STATE.statuses,\n    action: LoadShippingCountriesAction,\n): ShippingCountryStatusesState {\n    switch (action.type) {\n        case ShippingCountryActionType.LoadShippingCountriesRequested:\n            return objectSet(statuses, 'isLoading', true);\n\n        case ShippingCountryActionType.LoadShippingCountriesSucceeded:\n        case ShippingCountryActionType.LoadShippingCountriesFailed:\n            return objectSet(statuses, 'isLoading', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-country-request-sender.spec.ts",
    "content": "import {\n    createRequestSender,\n    createTimeout,\n    RequestSender,\n    Response,\n} from '@bigcommerce/request-sender';\n\nimport { SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getResponse } from '../common/http-request/responses.mock';\nimport { CountryResponseBody } from '../geography';\n\nimport { getShippingCountriesResponseBody } from './shipping-countries.mock';\nimport ShippingCountryRequestSender from './shipping-country-request-sender';\n\ndescribe('ShippingCountryRequestSender', () => {\n    let shippingCountryRequestSender: ShippingCountryRequestSender;\n    let requestSender: RequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        shippingCountryRequestSender = new ShippingCountryRequestSender(requestSender, {\n            locale: 'en',\n        });\n    });\n\n    describe('#loadCountries()', () => {\n        let response: Response<CountryResponseBody>;\n\n        beforeEach(() => {\n            response = getResponse(getShippingCountriesResponseBody());\n\n            jest.spyOn(requestSender, 'get').mockResolvedValue(response);\n        });\n\n        it('loads shipping countries', async () => {\n            const output = await shippingCountryRequestSender.loadCountries(1);\n\n            expect(output).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith(\n                '/internalapi/v1/shipping/countries?channel_id=1',\n                {\n                    headers: {\n                        'Accept-Language': 'en',\n                        ...SDK_VERSION_HEADERS,\n                    },\n                },\n            );\n        });\n\n        it('loads shipping countries without channelId', async () => {\n            const output = await shippingCountryRequestSender.loadCountries(null);\n\n            expect(output).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith('/internalapi/v1/shipping/countries', {\n                headers: {\n                    'Accept-Language': 'en',\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n\n        it('loads shipping countries with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const output = await shippingCountryRequestSender.loadCountries(2, options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.get).toHaveBeenCalledWith(\n                '/internalapi/v1/shipping/countries?channel_id=2',\n                {\n                    ...options,\n                    headers: {\n                        'Accept-Language': 'en',\n                        ...SDK_VERSION_HEADERS,\n                    },\n                },\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-country-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { CountryResponseBody } from '../geography';\n\nexport default class ShippingCountryRequestSender {\n    constructor(private _requestSender: RequestSender, private _config: { locale?: string }) {}\n\n    loadCountries(\n        channelId: number | null,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<CountryResponseBody>> {\n        const channelIdParam = channelId ? `?channel_id=${channelId}` : '';\n        const url = `/internalapi/v1/shipping/countries${channelIdParam}`;\n\n        const headers = {\n            'Accept-Language': this._config.locale,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender.get(url, { headers, timeout });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-country-selector.spec.ts",
    "content": "import { CheckoutStoreState } from '../checkout';\nimport { getCheckoutStoreState } from '../checkout/checkouts.mock';\n\nimport ShippingCountrySelector, {\n    createShippingCountrySelectorFactory,\n    ShippingCountrySelectorFactory,\n} from './shipping-country-selector';\n\ndescribe('ShippingCountrySelector', () => {\n    let createShippingCountrySelector: ShippingCountrySelectorFactory;\n    let shippingCountrySelector: ShippingCountrySelector;\n    let state: CheckoutStoreState;\n\n    beforeEach(() => {\n        createShippingCountrySelector = createShippingCountrySelectorFactory();\n        state = getCheckoutStoreState();\n    });\n\n    describe('#getShippingCountries()', () => {\n        it('returns a list of countries', () => {\n            shippingCountrySelector = createShippingCountrySelector(state.shippingCountries);\n\n            expect(shippingCountrySelector.getShippingCountries()).toEqual(\n                state.shippingCountries.data,\n            );\n        });\n\n        it('returns an empty array if there are no countries', () => {\n            shippingCountrySelector = createShippingCountrySelector({\n                ...state.shippingCountries,\n                data: [],\n            });\n\n            expect(shippingCountrySelector.getShippingCountries()).toEqual([]);\n        });\n    });\n\n    describe('#getLoadError()', () => {\n        it('returns error if unable to load', () => {\n            const loadError = new Error();\n\n            shippingCountrySelector = createShippingCountrySelector({\n                ...state.shippingCountries,\n                errors: { loadError },\n            });\n\n            expect(shippingCountrySelector.getLoadError()).toEqual(loadError);\n        });\n\n        it('does not returns error if able to load', () => {\n            shippingCountrySelector = createShippingCountrySelector(state.shippingCountries);\n\n            expect(shippingCountrySelector.getLoadError()).toBeUndefined();\n        });\n    });\n\n    describe('#isLoading()', () => {\n        it('returns true if loading countries', () => {\n            shippingCountrySelector = createShippingCountrySelector({\n                ...state.shippingCountries,\n                statuses: { isLoading: true },\n            });\n\n            expect(shippingCountrySelector.isLoading()).toBe(true);\n        });\n\n        it('returns false if not loading countries', () => {\n            shippingCountrySelector = createShippingCountrySelector(state.shippingCountries);\n\n            expect(shippingCountrySelector.isLoading()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-country-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\nimport { Country } from '../geography';\n\nimport ShippingCountryState, { DEFAULT_STATE } from './shipping-country-state';\n\nexport default interface ShippingCountrySelector {\n    getShippingCountries(): Country[] | undefined;\n    getLoadError(): Error | undefined;\n    isLoading(): boolean;\n}\n\nexport type ShippingCountrySelectorFactory = (\n    state: ShippingCountryState,\n) => ShippingCountrySelector;\n\nexport function createShippingCountrySelectorFactory(): ShippingCountrySelectorFactory {\n    const getShippingCountries = createSelector(\n        (state: ShippingCountryState) => state.data,\n        (data) => () => data,\n    );\n\n    const getLoadError = createSelector(\n        (state: ShippingCountryState) => state.errors.loadError,\n        (error) => () => error,\n    );\n\n    const isLoading = createSelector(\n        (state: ShippingCountryState) => state.statuses.isLoading,\n        (status) => () => !!status,\n    );\n\n    return memoizeOne((state: ShippingCountryState = DEFAULT_STATE): ShippingCountrySelector => {\n        return {\n            getShippingCountries: getShippingCountries(state),\n            getLoadError: getLoadError(state),\n            isLoading: isLoading(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-country-state.ts",
    "content": "import { Country } from '../geography';\n\nexport default interface ShippingCountryState {\n    data?: Country[];\n    errors: ShippingCountryErrorsState;\n    statuses: ShippingCountryStatusesState;\n}\n\nexport interface ShippingCountryErrorsState {\n    loadError?: Error;\n}\n\nexport interface ShippingCountryStatusesState {\n    isLoading?: boolean;\n}\n\nexport const DEFAULT_STATE: ShippingCountryState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-option.ts",
    "content": "export default interface ShippingOption {\n    additionalDescription: string;\n    description: string;\n    id: string;\n    isRecommended: boolean;\n    imageUrl: string;\n    cost: number;\n    costAfterDiscount: number;\n    transitTime: string;\n    type: string;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-options.mock.ts",
    "content": "import { ShippingOption } from '../shipping';\n\nexport function getShippingOption(): ShippingOption {\n    return {\n        additionalDescription: 'Flat rate additional description',\n        costAfterDiscount: 0,\n        description: 'Flat Rate',\n        id: '0:61d4bb52f746477e1d4fb411221318c3',\n        imageUrl: '',\n        isRecommended: true,\n        cost: 0,\n        transitTime: '',\n        type: 'shipping_flatrate',\n    };\n}\n\nexport function getShippingOptions(): ShippingOption[] {\n    return [getShippingOption()];\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-request-options.ts",
    "content": "import { RequestOptions } from '../common/http-request';\n\nimport { AmazonPayV2ShippingInitializeOptions } from './strategies/amazon-pay-v2';\nimport { BigCommercePaymentsFastlaneShippingInitializeOptions } from './strategies/bigcommerce-payments';\nimport { BraintreeFastlaneInitializeOptions } from './strategies/braintree';\nimport FastlaneShippingInitializeOptions from './strategies/fastlane-shipping-initialize-options';\nimport { PayPalCommerceFastlaneShippingInitializeOptions } from './strategies/paypal-commerce';\nimport { StripeUPEShippingInitializeOptions } from './strategies/stripe-upe';\n\n/**\n * A set of options for configuring any requests related to the shipping step of\n * the current checkout flow.\n *\n * Some payment methods have their own shipping configuration flow. Therefore,\n * you need to specify the method you intend to use if you want to trigger a\n * specific flow for setting the shipping address or option. Otherwise, these\n * options are not required.\n */\nexport interface ShippingRequestOptions<T = object> extends RequestOptions<T> {\n    methodId?: string;\n}\n\n/**\n * A set of options that are required to initialize the shipping step of the\n * current checkout flow.\n *\n * Some payment methods have specific requirements for setting the shipping\n * details for checkout. For example, Amazon Pay requires the customer to enter\n * their shipping address using their address book widget. As a result, you may\n * need to provide additional information in order to initialize the shipping\n * step of checkout.\n */\nexport interface ShippingInitializeOptions<T = object> extends ShippingRequestOptions<T> {\n    /**\n     * The options that are required to initialize the shipping step of checkout\n     * when using AmazonPayV2.\n     */\n    amazonpay?: AmazonPayV2ShippingInitializeOptions;\n\n    /**\n     * The options that are required to initialize the shipping step of checkout\n     * when using Stripe Upe Link.\n     */\n    stripeupe?: StripeUPEShippingInitializeOptions;\n\n    /**\n     * The options that are required to initialize the shipping step of checkout\n     * when using Braintree Fastlane.\n     */\n    braintreefastlane?: BraintreeFastlaneInitializeOptions;\n\n    /**\n     * The options that are required to initialize the shipping step of checkout\n     * when using PayPal Commerce Fastlane.\n     */\n    paypalcommercefastlane?: PayPalCommerceFastlaneShippingInitializeOptions;\n\n    /**\n     * The options that are required to initialize the shipping step of checkout\n     * when using BigCommercePayments Fastlane.\n     */\n    bigcommerce_payments_fastlane?: BigCommercePaymentsFastlaneShippingInitializeOptions;\n\n    /**\n     * The options that are required to initialize the shipping step of checkout\n     * when using Fastlane (PayPal Commerce, BigCommerce Payments, or Braintree).\n     *\n     * This is a unified option that works across all Fastlane implementations,\n     * simplifying integration and avoiding provider-specific checks.\n     */\n    fastlane?: FastlaneShippingInitializeOptions;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-state.ts",
    "content": "export default interface ShippingState {\n    errors: ShippingErrorsState;\n    statuses: ShippingStatusesState;\n}\n\nexport interface ShippingErrorsState {\n    initializeError?: any;\n    initializeMethod?: string;\n}\n\nexport interface ShippingStatusesState {\n    initializingMethod?: string;\n    isInitializing?: boolean;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-strategy-action-creator.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { merge } from 'lodash';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { CheckoutStore, CheckoutStoreState, createCheckoutStore } from '../checkout';\nimport {\n    getCheckoutState,\n    getCheckoutStoreState,\n    getCheckoutWithPayments,\n} from '../checkout/checkouts.mock';\nimport { Registry } from '../common/registry';\nimport { getPaymentMethod } from '../payment/payment-methods.mock';\n\nimport createShippingStrategyRegistry from './create-shipping-strategy-registry';\nimport { getShippingAddress } from './shipping-addresses.mock';\nimport ShippingStrategyActionCreator from './shipping-strategy-action-creator';\nimport { ShippingStrategyActionType } from './shipping-strategy-actions';\nimport { ShippingStrategy } from './strategies';\n\ndescribe('ShippingStrategyActionCreator', () => {\n    let registry: Registry<ShippingStrategy>;\n    let requestSender: RequestSender;\n    let state: CheckoutStoreState;\n    let store: CheckoutStore;\n\n    beforeEach(() => {\n        state = getCheckoutStoreState();\n        store = createCheckoutStore(state);\n        requestSender = createRequestSender();\n        registry = createShippingStrategyRegistry(store, requestSender);\n    });\n\n    describe('#initialize()', () => {\n        let strategy: ShippingStrategy;\n\n        beforeEach(() => {\n            strategy = registry.get();\n            store = createCheckoutStore(\n                merge({}, state, {\n                    shippingStrategies: { data: { amazon: { isInitialized: true } } },\n                }),\n            );\n\n            jest.spyOn(strategy, 'initialize').mockReturnValue(Promise.resolve(store.getState()));\n        });\n\n        it('finds shipping strategy by id', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const methodId = 'default';\n\n            jest.spyOn(registry, 'get');\n\n            await from(actionCreator.initialize({ methodId })(store)).toPromise();\n\n            expect(registry.get).toHaveBeenCalledWith(methodId);\n        });\n\n        it('finds remote shipping strategy if available', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const methodId = getPaymentMethod().id;\n\n            store = createCheckoutStore({\n                ...state,\n                checkout: { ...getCheckoutState(), data: getCheckoutWithPayments() },\n            });\n\n            jest.spyOn(registry, 'get');\n\n            await from(actionCreator.initialize()(store)).toPromise();\n\n            expect(registry.get).toHaveBeenCalledWith(methodId);\n        });\n\n        it('initializes default shipping strategy by default', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const strategy = registry.get();\n\n            await from(actionCreator.initialize()(store)).toPromise();\n\n            expect(strategy.initialize).toHaveBeenCalled();\n        });\n\n        it('does not initialize if strategy is already initialized', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const strategy = registry.get('amazon');\n\n            jest.spyOn(strategy, 'initialize').mockReturnValue(Promise.resolve(store.getState()));\n\n            await from(actionCreator.initialize({ methodId: 'amazon' })(store)).toPromise();\n\n            expect(strategy.initialize).not.toHaveBeenCalled();\n        });\n\n        it('emits action to notify initialization progress', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const methodId = 'default';\n            const actions = await from(actionCreator.initialize({ methodId })(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: ShippingStrategyActionType.InitializeRequested, meta: { methodId } },\n                { type: ShippingStrategyActionType.InitializeSucceeded, meta: { methodId } },\n            ]);\n        });\n\n        it('emits error action if unable to initialize', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const initializeError = new Error();\n            const methodId = 'default';\n            const errorHandler = jest.fn((action) => of(action));\n\n            jest.spyOn(strategy, 'initialize').mockReturnValue(Promise.reject(initializeError));\n\n            const actions = await from(actionCreator.initialize({ methodId })(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: ShippingStrategyActionType.InitializeRequested, meta: { methodId } },\n                {\n                    type: ShippingStrategyActionType.InitializeFailed,\n                    error: true,\n                    payload: initializeError,\n                    meta: { methodId },\n                },\n            ]);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        let strategy: ShippingStrategy;\n\n        beforeEach(() => {\n            strategy = registry.get();\n            store = createCheckoutStore(\n                merge({}, state, {\n                    shippingStrategies: { data: { default: { isInitialized: true } } },\n                }),\n            );\n\n            jest.spyOn(strategy, 'deinitialize').mockReturnValue(Promise.resolve(store.getState()));\n        });\n\n        it('finds shipping strategy by id', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const methodId = 'default';\n\n            jest.spyOn(registry, 'get');\n\n            await from(actionCreator.deinitialize({ methodId })(store)).toPromise();\n\n            expect(registry.get).toHaveBeenCalledWith(methodId);\n        });\n\n        it('deinitializes shipping strategy by default', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n\n            await from(actionCreator.deinitialize()(store)).toPromise();\n\n            expect(strategy.deinitialize).toHaveBeenCalled();\n        });\n\n        it('does not deinitialize if strategy is not initialized', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const strategy = registry.get('amazon');\n\n            jest.spyOn(strategy, 'deinitialize').mockReturnValue(Promise.resolve(store.getState()));\n\n            await from(actionCreator.deinitialize({ methodId: 'amazon' })(store)).toPromise();\n\n            expect(strategy.deinitialize).not.toHaveBeenCalled();\n        });\n\n        it('emits action to notify initialization progress', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const methodId = 'default';\n            const actions = await from(actionCreator.deinitialize({ methodId })(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: ShippingStrategyActionType.DeinitializeRequested, meta: { methodId } },\n                { type: ShippingStrategyActionType.DeinitializeSucceeded, meta: { methodId } },\n            ]);\n        });\n\n        it('emits error action if unable to deinitialize', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const deinitializeError = new Error();\n            const methodId = 'default';\n            const errorHandler = jest.fn((action) => of(action));\n\n            jest.spyOn(strategy, 'deinitialize').mockReturnValue(Promise.reject(deinitializeError));\n\n            const actions = await from(actionCreator.deinitialize({ methodId })(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: ShippingStrategyActionType.DeinitializeRequested, meta: { methodId } },\n                {\n                    type: ShippingStrategyActionType.DeinitializeFailed,\n                    error: true,\n                    payload: deinitializeError,\n                    meta: { methodId },\n                },\n            ]);\n        });\n    });\n\n    describe('#updateAddress()', () => {\n        let strategy: ShippingStrategy;\n\n        beforeEach(() => {\n            strategy = registry.get();\n\n            jest.spyOn(strategy, 'updateAddress').mockReturnValue(\n                Promise.resolve(store.getState()),\n            );\n        });\n\n        it('finds shipping strategy by id', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const methodId = 'default';\n\n            jest.spyOn(registry, 'get');\n\n            await from(\n                actionCreator.updateAddress(getShippingAddress(), { methodId })(store),\n            ).toPromise();\n\n            expect(registry.get).toHaveBeenCalledWith('default');\n        });\n\n        it('executes shipping strategy', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const options = { methodId: 'default' };\n            const address = getShippingAddress();\n\n            await from(actionCreator.updateAddress(address, options)(store)).toPromise();\n\n            expect(strategy.updateAddress).toHaveBeenCalledWith(address, options);\n        });\n\n        it('emits action to notify sign-in progress', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const methodId = 'default';\n            const actions = await from(\n                actionCreator.updateAddress(getShippingAddress(), { methodId })(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: ShippingStrategyActionType.UpdateAddressRequested, meta: { methodId } },\n                { type: ShippingStrategyActionType.UpdateAddressSucceeded, meta: { methodId } },\n            ]);\n        });\n\n        it('emits error action if unable to sign in', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const updateAddressError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            jest.spyOn(strategy, 'updateAddress').mockReturnValue(\n                Promise.reject(updateAddressError),\n            );\n\n            const actions = await from(\n                actionCreator.updateAddress(getShippingAddress(), { methodId: 'default' })(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: ShippingStrategyActionType.UpdateAddressRequested,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: ShippingStrategyActionType.UpdateAddressFailed,\n                    error: true,\n                    payload: updateAddressError,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n    });\n\n    describe('#selectOption()', () => {\n        let shippingOptionId: string;\n        let strategy: ShippingStrategy;\n\n        beforeEach(() => {\n            shippingOptionId = 'shipping-option-id-33';\n            strategy = registry.get();\n\n            jest.spyOn(strategy, 'selectOption').mockReturnValue(Promise.resolve(store.getState()));\n        });\n\n        it('finds shipping strategy by id', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const methodId = 'default';\n\n            jest.spyOn(registry, 'get');\n\n            await from(\n                actionCreator.selectOption(shippingOptionId, { methodId })(store),\n            ).toPromise();\n\n            expect(registry.get).toHaveBeenCalledWith(methodId);\n        });\n\n        it('executes shipping strategy by default', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n\n            await from(actionCreator.selectOption(shippingOptionId)(store)).toPromise();\n\n            expect(strategy.selectOption).toHaveBeenCalledWith(shippingOptionId, {\n                methodId: undefined,\n            });\n        });\n\n        it('emits action to notify sign-out progress', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const actions = await from(\n                actionCreator.selectOption(shippingOptionId, { methodId: 'default' })(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: ShippingStrategyActionType.SelectOptionRequested,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: ShippingStrategyActionType.SelectOptionSucceeded,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n\n        it('emits error action if unable to sign out', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const selectOptionError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            jest.spyOn(strategy, 'selectOption').mockReturnValue(Promise.reject(selectOptionError));\n\n            const actions = await from(\n                actionCreator.selectOption(shippingOptionId, { methodId: 'default' })(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: ShippingStrategyActionType.SelectOptionRequested,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: ShippingStrategyActionType.SelectOptionFailed,\n                    error: true,\n                    payload: selectOptionError,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n    });\n\n    describe('#widgetInteraction()', () => {\n        it('executes widget interaction callback', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const options = { methodId: 'default' };\n            const fakeMethod = jest.fn(() => Promise.resolve());\n\n            await actionCreator.widgetInteraction(fakeMethod, options).pipe(toArray()).toPromise();\n\n            expect(fakeMethod).toHaveBeenCalled();\n        });\n\n        it('emits action to notify widget interaction in progress', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const actions = await actionCreator\n                .widgetInteraction(\n                    jest.fn(() => Promise.resolve()),\n                    { methodId: 'default' },\n                )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                {\n                    type: ShippingStrategyActionType.WidgetInteractionStarted,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: ShippingStrategyActionType.WidgetInteractionFinished,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n\n        it('emits error action if widget interaction fails', async () => {\n            const actionCreator = new ShippingStrategyActionCreator(registry);\n            const signInError = new Error();\n            const errorHandler = jest.fn((action) => of(action));\n\n            const actions = await actionCreator\n                .widgetInteraction(\n                    jest.fn(() => Promise.reject(signInError)),\n                    { methodId: 'default' },\n                )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                {\n                    type: ShippingStrategyActionType.WidgetInteractionStarted,\n                    meta: { methodId: 'default' },\n                },\n                {\n                    type: ShippingStrategyActionType.WidgetInteractionFailed,\n                    error: true,\n                    payload: signInError,\n                    meta: { methodId: 'default' },\n                },\n            ]);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-strategy-action-creator.ts",
    "content": "import { createAction, createErrorAction, ThunkAction } from '@bigcommerce/data-store';\nimport { Observable, Observer } from 'rxjs';\n\nimport { AddressRequestBody } from '../address';\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { Registry } from '../common/registry';\n\nimport { ShippingInitializeOptions, ShippingRequestOptions } from './shipping-request-options';\nimport {\n    ShippingStrategyAction,\n    ShippingStrategyActionType,\n    ShippingStrategyDeinitializeAction,\n    ShippingStrategyInitializeAction,\n    ShippingStrategySelectOptionAction,\n    ShippingStrategyUpdateAddressAction,\n} from './shipping-strategy-actions';\nimport { ShippingStrategy } from './strategies';\n\nexport default class ShippingStrategyActionCreator {\n    constructor(private _strategyRegistry: Registry<ShippingStrategy>) {}\n\n    updateAddress(\n        address: Partial<AddressRequestBody>,\n        options?: ShippingRequestOptions,\n    ): ThunkAction<ShippingStrategyUpdateAddressAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<ShippingStrategyUpdateAddressAction>) => {\n                const payment = store.getState().payment.getPaymentId();\n                const methodId = (options && options.methodId) || (payment && payment.providerId);\n\n                observer.next(\n                    createAction(ShippingStrategyActionType.UpdateAddressRequested, undefined, {\n                        methodId,\n                    }),\n                );\n\n                this._strategyRegistry\n                    .get(methodId)\n                    .updateAddress(address, { ...options, methodId })\n                    .then(() => {\n                        observer.next(\n                            createAction(\n                                ShippingStrategyActionType.UpdateAddressSucceeded,\n                                undefined,\n                                { methodId },\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((error) => {\n                        observer.error(\n                            createErrorAction(\n                                ShippingStrategyActionType.UpdateAddressFailed,\n                                error,\n                                { methodId },\n                            ),\n                        );\n                    });\n            });\n    }\n\n    selectOption(\n        shippingOptionId: string,\n        options?: ShippingRequestOptions,\n    ): ThunkAction<ShippingStrategySelectOptionAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<ShippingStrategySelectOptionAction>) => {\n                const payment = store.getState().payment.getPaymentId();\n                const methodId = (options && options.methodId) || (payment && payment.providerId);\n\n                observer.next(\n                    createAction(ShippingStrategyActionType.SelectOptionRequested, undefined, {\n                        methodId,\n                    }),\n                );\n\n                this._strategyRegistry\n                    .get(methodId)\n                    .selectOption(shippingOptionId, { ...options, methodId })\n                    .then(() => {\n                        observer.next(\n                            createAction(\n                                ShippingStrategyActionType.SelectOptionSucceeded,\n                                undefined,\n                                { methodId },\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((error) => {\n                        observer.error(\n                            createErrorAction(\n                                ShippingStrategyActionType.SelectOptionFailed,\n                                error,\n                                { methodId },\n                            ),\n                        );\n                    });\n            });\n    }\n\n    initialize(\n        options?: ShippingInitializeOptions,\n    ): ThunkAction<ShippingStrategyInitializeAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<ShippingStrategyInitializeAction>) => {\n                const state = store.getState();\n                const payment = state.payment.getPaymentId();\n                const methodId = (options && options.methodId) || (payment && payment.providerId);\n                const mergedOptions = { ...options, methodId };\n\n                if (methodId && state.shippingStrategies.isInitialized(methodId)) {\n                    return observer.complete();\n                }\n\n                observer.next(\n                    createAction(ShippingStrategyActionType.InitializeRequested, undefined, {\n                        methodId,\n                    }),\n                );\n\n                this._strategyRegistry\n                    .get(methodId)\n                    .initialize(mergedOptions)\n                    .then(() => {\n                        observer.next(\n                            createAction(\n                                ShippingStrategyActionType.InitializeSucceeded,\n                                undefined,\n                                { methodId },\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((error) => {\n                        observer.error(\n                            createErrorAction(ShippingStrategyActionType.InitializeFailed, error, {\n                                methodId,\n                            }),\n                        );\n                    });\n            });\n    }\n\n    deinitialize(\n        options?: ShippingRequestOptions,\n    ): ThunkAction<ShippingStrategyDeinitializeAction, InternalCheckoutSelectors> {\n        return (store) =>\n            Observable.create((observer: Observer<ShippingStrategyDeinitializeAction>) => {\n                const state = store.getState();\n                const payment = state.payment.getPaymentId();\n                const methodId = (options && options.methodId) || (payment && payment.providerId);\n\n                if (methodId && !state.shippingStrategies.isInitialized(methodId)) {\n                    return observer.complete();\n                }\n\n                observer.next(\n                    createAction(ShippingStrategyActionType.DeinitializeRequested, undefined, {\n                        methodId,\n                    }),\n                );\n\n                this._strategyRegistry\n                    .get(methodId)\n                    .deinitialize({ ...options, methodId })\n                    .then(() => {\n                        observer.next(\n                            createAction(\n                                ShippingStrategyActionType.DeinitializeSucceeded,\n                                undefined,\n                                { methodId },\n                            ),\n                        );\n                        observer.complete();\n                    })\n                    .catch((error) => {\n                        observer.error(\n                            createErrorAction(\n                                ShippingStrategyActionType.DeinitializeFailed,\n                                error,\n                                { methodId },\n                            ),\n                        );\n                    });\n            });\n    }\n\n    widgetInteraction(\n        method: () => Promise<any>,\n        options?: ShippingRequestOptions,\n    ): Observable<ShippingStrategyAction> {\n        return Observable.create((observer: Observer<ShippingStrategyAction>) => {\n            const methodId = options && options.methodId;\n            const meta = { methodId };\n\n            observer.next(\n                createAction(ShippingStrategyActionType.WidgetInteractionStarted, undefined, meta),\n            );\n\n            method()\n                .then(() => {\n                    observer.next(\n                        createAction(\n                            ShippingStrategyActionType.WidgetInteractionFinished,\n                            undefined,\n                            meta,\n                        ),\n                    );\n                    observer.complete();\n                })\n                .catch((error) => {\n                    observer.error(\n                        createErrorAction(\n                            ShippingStrategyActionType.WidgetInteractionFailed,\n                            error,\n                            meta,\n                        ),\n                    );\n                });\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-strategy-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nexport enum ShippingStrategyActionType {\n    UpdateAddressFailed = 'SHIPPING_STRATEGY_UPDATE_ADDRESS_FAILED',\n    UpdateAddressRequested = 'SHIPPING_STRATEGY_UPDATE_ADDRESS_REQUESTED',\n    UpdateAddressSucceeded = 'SHIPPING_STRATEGY_UPDATE_ADDRESS_SUCCEEDED',\n    SelectOptionFailed = 'SHIPPING_STRATEGY_SELECT_OPTION_FAILED',\n    SelectOptionRequested = 'SHIPPING_STRATEGY_SELECT_OPTION_REQUESTED',\n    SelectOptionSucceeded = 'SHIPPING_STRATEGY_SELECT_OPTION_SUCCEEDED',\n    InitializeFailed = 'SHIPPING_STRATEGY_INITIALIZE_FAILED',\n    InitializeRequested = 'SHIPPING_STRATEGY_INITIALIZE_REQUESTED',\n    InitializeSucceeded = 'SHIPPING_STRATEGY_INITIALIZE_SUCCEEDED',\n    DeinitializeFailed = 'SHIPPING_STRATEGY_DEINITIALIZE_FAILED',\n    DeinitializeRequested = 'SHIPPING_STRATEGY_DEINITIALIZE_REQUESTED',\n    DeinitializeSucceeded = 'SHIPPING_STRATEGY_DEINITIALIZE_SUCCEEDED',\n    WidgetInteractionStarted = 'SHIPPING_STRATEGY_WIDGET_INTERACTION_STARTED',\n    WidgetInteractionFinished = 'SHIPPING_STRATEGY_WIDGET_INTERACTION_FINISHED',\n    WidgetInteractionFailed = 'SHIPPING_STRATEGY_WIDGET_INTERACTION_FAILED',\n}\n\nexport type ShippingStrategyAction =\n    | ShippingStrategyUpdateAddressAction\n    | ShippingStrategySelectOptionAction\n    | ShippingStrategyInitializeAction\n    | ShippingStrategyDeinitializeAction\n    | ShippingStrategyWidgetAction;\n\nexport type ShippingStrategyUpdateAddressAction =\n    | UpdateAddressRequestedAction\n    | UpdateAddressSucceededAction\n    | UpdateAddressFailedAction;\n\nexport type ShippingStrategySelectOptionAction =\n    | SelectOptionRequestedAction\n    | SelectOptionSucceededAction\n    | SelectOptionFailedAction;\n\nexport type ShippingStrategyInitializeAction =\n    | InitializeRequestedAction\n    | InitializeSucceededAction\n    | InitializeFailedAction;\n\nexport type ShippingStrategyDeinitializeAction =\n    | DeinitializeRequestedAction\n    | DeinitializeSucceededAction\n    | DeinitializeFailedAction;\n\nexport type ShippingStrategyWidgetAction =\n    | WidgetInteractionStartedAction\n    | WidgetInteractionFinishedAction\n    | WidgetInteractionFailedAction;\n\nexport interface UpdateAddressRequestedAction extends Action {\n    type: ShippingStrategyActionType.UpdateAddressRequested;\n}\n\nexport interface UpdateAddressSucceededAction extends Action {\n    type: ShippingStrategyActionType.UpdateAddressSucceeded;\n}\n\nexport interface UpdateAddressFailedAction extends Action<Error> {\n    type: ShippingStrategyActionType.UpdateAddressFailed;\n}\n\nexport interface SelectOptionRequestedAction extends Action {\n    type: ShippingStrategyActionType.SelectOptionRequested;\n}\n\nexport interface SelectOptionSucceededAction extends Action {\n    type: ShippingStrategyActionType.SelectOptionSucceeded;\n}\n\nexport interface SelectOptionFailedAction extends Action<Error> {\n    type: ShippingStrategyActionType.SelectOptionFailed;\n}\n\nexport interface InitializeRequestedAction extends Action {\n    type: ShippingStrategyActionType.InitializeRequested;\n}\n\nexport interface InitializeSucceededAction extends Action {\n    type: ShippingStrategyActionType.InitializeSucceeded;\n}\n\nexport interface InitializeFailedAction extends Action<Error> {\n    type: ShippingStrategyActionType.InitializeFailed;\n}\n\nexport interface DeinitializeRequestedAction extends Action {\n    type: ShippingStrategyActionType.DeinitializeRequested;\n}\n\nexport interface DeinitializeSucceededAction extends Action {\n    type: ShippingStrategyActionType.DeinitializeSucceeded;\n}\n\nexport interface DeinitializeFailedAction extends Action<Error> {\n    type: ShippingStrategyActionType.DeinitializeFailed;\n}\n\nexport interface WidgetInteractionStartedAction extends Action {\n    type: ShippingStrategyActionType.WidgetInteractionStarted;\n}\n\nexport interface WidgetInteractionFinishedAction extends Action {\n    type: ShippingStrategyActionType.WidgetInteractionFinished;\n}\n\nexport interface WidgetInteractionFailedAction extends Action<Error> {\n    type: ShippingStrategyActionType.WidgetInteractionFailed;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-strategy-reducer.spec.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\n\nimport { ShippingStrategyActionType } from './shipping-strategy-actions';\nimport shippingStrategyReducer from './shipping-strategy-reducer';\nimport ShippingStrategyState from './shipping-strategy-state';\n\ndescribe('shippingStrategyReducer()', () => {\n    let initialState: ShippingStrategyState;\n\n    beforeEach(() => {\n        initialState = {\n            data: {},\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    it('returns pending flag as true if initializing shipping', () => {\n        const action = createAction(ShippingStrategyActionType.InitializeRequested, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            initializeMethodId: 'foobar',\n            isInitializing: true,\n        });\n    });\n\n    it('returns pending flag as false if shipping has initialized successfully', () => {\n        const action = createAction(ShippingStrategyActionType.InitializeSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            initializeMethodId: undefined,\n            isInitializing: false,\n        });\n    });\n\n    it('returns initialization flag as true if customer has initialized successfully', () => {\n        const action = createAction(ShippingStrategyActionType.InitializeSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(shippingStrategyReducer(initialState, action).data).toEqual({\n            foobar: { isInitialized: true },\n        });\n    });\n\n    it('returns error if shipping has failed to initialize', () => {\n        const action = createErrorAction(ShippingStrategyActionType.InitializeFailed, new Error(), {\n            methodId: 'foobar',\n        });\n\n        expect(shippingStrategyReducer(initialState, action).errors).toEqual({\n            initializeMethodId: 'foobar',\n            initializeError: action.payload,\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            isInitializing: false,\n        });\n    });\n\n    it('returns pending flag as true if deinitializing shipping', () => {\n        const action = createAction(ShippingStrategyActionType.DeinitializeRequested, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            deinitializeMethodId: 'foobar',\n            isDeinitializing: true,\n        });\n    });\n\n    it('returns pending flag as false if shipping has deinitialized successfully', () => {\n        const action = createAction(ShippingStrategyActionType.DeinitializeSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            deinitializeMethodId: undefined,\n            isDeinitializing: false,\n        });\n    });\n\n    it('returns initialization flag as false if customer has deinitialized successfully', () => {\n        const action = createAction(ShippingStrategyActionType.DeinitializeSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(shippingStrategyReducer(initialState, action).data).toEqual({\n            foobar: { isInitialized: false },\n        });\n    });\n\n    it('returns error if shipping has failed to deinitialize', () => {\n        const action = createErrorAction(\n            ShippingStrategyActionType.DeinitializeFailed,\n            new Error(),\n            { methodId: 'foobar' },\n        );\n\n        expect(shippingStrategyReducer(initialState, action).errors).toEqual({\n            deinitializeMethodId: 'foobar',\n            deinitializeError: action.payload,\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            isDeinitializing: false,\n        });\n    });\n\n    it('returns pending flag as true if updating shipping address', () => {\n        const action = createAction(ShippingStrategyActionType.UpdateAddressRequested, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            updateAddressMethodId: 'foobar',\n            isUpdatingAddress: true,\n        });\n    });\n\n    it('returns pending flag as false if shipping has updated address successfully', () => {\n        const action = createAction(ShippingStrategyActionType.UpdateAddressSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            updateAddressMethodId: undefined,\n            isUpdatingAddress: false,\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            isUpdatingAddress: false,\n        });\n    });\n\n    it('returns error if shipping has failed to update address', () => {\n        const action = createErrorAction(\n            ShippingStrategyActionType.UpdateAddressFailed,\n            new Error(),\n            { methodId: 'foobar' },\n        );\n\n        expect(shippingStrategyReducer(initialState, action).errors).toEqual({\n            updateAddressMethodId: 'foobar',\n            updateAddressError: action.payload,\n        });\n    });\n\n    it('returns pending flag as true if selecting shipping option', () => {\n        const action = createAction(ShippingStrategyActionType.SelectOptionRequested, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            selectOptionMethodId: 'foobar',\n            isSelectingOption: true,\n        });\n    });\n\n    it('returns pending flag as false if shipping has selected shipping option successfully', () => {\n        const action = createAction(ShippingStrategyActionType.SelectOptionSucceeded, undefined, {\n            methodId: 'foobar',\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            selectOptionMethodId: undefined,\n            isSelectingOption: false,\n        });\n    });\n\n    it('returns error if shipping has failed to select option', () => {\n        const action = createErrorAction(\n            ShippingStrategyActionType.SelectOptionFailed,\n            new Error(),\n            { methodId: 'foobar' },\n        );\n\n        expect(shippingStrategyReducer(initialState, action).errors).toEqual({\n            selectOptionMethodId: 'foobar',\n            selectOptionError: action.payload,\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            isSelectingOption: false,\n        });\n    });\n\n    it('returns pending flag as true if interacting with widget', () => {\n        const action = createAction(\n            ShippingStrategyActionType.WidgetInteractionStarted,\n            undefined,\n            { methodId: 'foobar' },\n        );\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            widgetInteractionMethodId: 'foobar',\n            isWidgetInteracting: true,\n        });\n    });\n\n    it('returns pending flag as false if interacting with widget has finished', () => {\n        const action = createAction(\n            ShippingStrategyActionType.WidgetInteractionFinished,\n            undefined,\n            { methodId: 'foobar' },\n        );\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            widgetInteractionMethodId: undefined,\n            isWidgetInteracting: false,\n        });\n    });\n\n    it('returns error if widget interaction has failed', () => {\n        const action = createErrorAction(\n            ShippingStrategyActionType.WidgetInteractionFailed,\n            new Error(),\n            { methodId: 'foobar' },\n        );\n\n        expect(shippingStrategyReducer(initialState, action).errors).toEqual({\n            widgetInteractionMethodId: 'foobar',\n            widgetInteractionError: action.payload,\n        });\n\n        expect(shippingStrategyReducer(initialState, action).statuses).toEqual({\n            isWidgetInteracting: false,\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-strategy-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge } from '../common/utility';\n\nimport { ShippingStrategyAction, ShippingStrategyActionType } from './shipping-strategy-actions';\nimport ShippingStrategyState, {\n    DEFAULT_STATE,\n    ShippingStrategyDataState,\n    ShippingStrategyErrorsState,\n    ShippingStrategyStatusesState,\n} from './shipping-strategy-state';\n\nexport default function shippingStrategyReducer(\n    state: ShippingStrategyState = DEFAULT_STATE,\n    action: Action,\n): ShippingStrategyState {\n    const reducer = combineReducers<ShippingStrategyState, ShippingStrategyAction>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: ShippingStrategyDataState = DEFAULT_STATE.data,\n    action: ShippingStrategyAction,\n): ShippingStrategyDataState {\n    switch (action.type) {\n        case ShippingStrategyActionType.InitializeSucceeded:\n            return objectMerge(data, {\n                [action.meta && action.meta.methodId]: {\n                    isInitialized: true,\n                },\n            });\n\n        case ShippingStrategyActionType.DeinitializeSucceeded:\n            return objectMerge(data, {\n                [action.meta && action.meta.methodId]: {\n                    isInitialized: false,\n                },\n            });\n    }\n\n    return data;\n}\n\nfunction errorsReducer(\n    errors: ShippingStrategyErrorsState = DEFAULT_STATE.errors,\n    action: ShippingStrategyAction,\n): ShippingStrategyErrorsState {\n    switch (action.type) {\n        case ShippingStrategyActionType.InitializeRequested:\n        case ShippingStrategyActionType.InitializeSucceeded:\n            return objectMerge(errors, {\n                initializeError: undefined,\n                initializeMethodId: undefined,\n            });\n\n        case ShippingStrategyActionType.InitializeFailed:\n            return objectMerge(errors, {\n                initializeError: action.payload,\n                initializeMethodId: action.meta && action.meta.methodId,\n            });\n\n        case ShippingStrategyActionType.DeinitializeRequested:\n        case ShippingStrategyActionType.DeinitializeSucceeded:\n            return objectMerge(errors, {\n                deinitializeError: undefined,\n                deinitializeMethodId: undefined,\n            });\n\n        case ShippingStrategyActionType.DeinitializeFailed:\n            return objectMerge(errors, {\n                deinitializeError: action.payload,\n                deinitializeMethodId: action.meta && action.meta.methodId,\n            });\n\n        case ShippingStrategyActionType.UpdateAddressRequested:\n        case ShippingStrategyActionType.UpdateAddressSucceeded:\n            return objectMerge(errors, {\n                updateAddressError: undefined,\n                updateAddressMethodId: undefined,\n            });\n\n        case ShippingStrategyActionType.UpdateAddressFailed:\n            return objectMerge(errors, {\n                updateAddressError: action.payload,\n                updateAddressMethodId: action.meta && action.meta.methodId,\n            });\n\n        case ShippingStrategyActionType.SelectOptionRequested:\n        case ShippingStrategyActionType.SelectOptionSucceeded:\n            return objectMerge(errors, {\n                selectOptionError: undefined,\n                selectOptionMethodId: undefined,\n            });\n\n        case ShippingStrategyActionType.SelectOptionFailed:\n            return objectMerge(errors, {\n                selectOptionError: action.payload,\n                selectOptionMethodId: action.meta && action.meta.methodId,\n            });\n\n        case ShippingStrategyActionType.WidgetInteractionStarted:\n        case ShippingStrategyActionType.WidgetInteractionFinished:\n            return objectMerge(errors, {\n                widgetInteractionError: undefined,\n                widgetInteractionMethodId: undefined,\n            });\n\n        case ShippingStrategyActionType.WidgetInteractionFailed:\n            return objectMerge(errors, {\n                widgetInteractionError: action.payload,\n                widgetInteractionMethodId: action.meta && action.meta.methodId,\n            });\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: ShippingStrategyStatusesState = DEFAULT_STATE.statuses,\n    action: ShippingStrategyAction,\n): ShippingStrategyStatusesState {\n    switch (action.type) {\n        case ShippingStrategyActionType.InitializeRequested:\n            return objectMerge(statuses, {\n                isInitializing: true,\n                initializeMethodId: action.meta && action.meta.methodId,\n            });\n\n        case ShippingStrategyActionType.InitializeFailed:\n        case ShippingStrategyActionType.InitializeSucceeded:\n            return objectMerge(statuses, {\n                isInitializing: false,\n                initializeMethodId: undefined,\n            });\n\n        case ShippingStrategyActionType.DeinitializeRequested:\n            return objectMerge(statuses, {\n                isDeinitializing: true,\n                deinitializeMethodId: action.meta && action.meta.methodId,\n            });\n\n        case ShippingStrategyActionType.DeinitializeFailed:\n        case ShippingStrategyActionType.DeinitializeSucceeded:\n            return objectMerge(statuses, {\n                isDeinitializing: false,\n                deinitializeMethodId: undefined,\n            });\n\n        case ShippingStrategyActionType.UpdateAddressRequested:\n            return objectMerge(statuses, {\n                isUpdatingAddress: true,\n                updateAddressMethodId: action.meta && action.meta.methodId,\n            });\n\n        case ShippingStrategyActionType.UpdateAddressFailed:\n        case ShippingStrategyActionType.UpdateAddressSucceeded:\n            return objectMerge(statuses, {\n                isUpdatingAddress: false,\n                updateAddressMethodId: undefined,\n            });\n\n        case ShippingStrategyActionType.SelectOptionRequested:\n            return objectMerge(statuses, {\n                isSelectingOption: true,\n                selectOptionMethodId: action.meta && action.meta.methodId,\n            });\n\n        case ShippingStrategyActionType.SelectOptionFailed:\n        case ShippingStrategyActionType.SelectOptionSucceeded:\n            return objectMerge(statuses, {\n                isSelectingOption: false,\n                selectOptionMethodId: undefined,\n            });\n\n        case ShippingStrategyActionType.WidgetInteractionStarted:\n            return objectMerge(statuses, {\n                isWidgetInteracting: true,\n                widgetInteractionMethodId: action.meta && action.meta.methodId,\n            });\n\n        case ShippingStrategyActionType.WidgetInteractionFinished:\n        case ShippingStrategyActionType.WidgetInteractionFailed:\n            return objectMerge(statuses, {\n                isWidgetInteracting: false,\n                widgetInteractionMethodId: undefined,\n            });\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-strategy-selector.spec.ts",
    "content": "import { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport ShippingStrategySelector, {\n    createShippingStrategySelectorFactory,\n    ShippingStrategySelectorFactory,\n} from './shipping-strategy-selector';\nimport { DEFAULT_STATE } from './shipping-strategy-state';\n\ndescribe('ShippingStrategySelector', () => {\n    let createShippingStrategySelector: ShippingStrategySelectorFactory;\n    let selector: ShippingStrategySelector;\n    let state: any;\n\n    beforeEach(() => {\n        createShippingStrategySelector = createShippingStrategySelectorFactory();\n        state = {\n            shippingStrategy: DEFAULT_STATE,\n        };\n    });\n\n    describe('#getUpdateAddressError()', () => {\n        it('returns error if unable to update address', () => {\n            const updateAddressError = getErrorResponse();\n\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                errors: { updateAddressError },\n            });\n\n            expect(selector.getUpdateAddressError()).toEqual(updateAddressError);\n        });\n\n        it('does not returns error if able to update address', () => {\n            selector = createShippingStrategySelector(state.shippingStrategy);\n\n            expect(selector.getUpdateAddressError()).toBeUndefined();\n        });\n    });\n\n    describe('#getSelectOptionError()', () => {\n        it('returns error if unable to select option', () => {\n            const selectOptionError = getErrorResponse();\n\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                errors: { selectOptionError },\n            });\n\n            expect(selector.getSelectOptionError()).toEqual(selectOptionError);\n        });\n\n        it('does not returns error if able to select option', () => {\n            selector = createShippingStrategySelector(state.shippingStrategy);\n\n            expect(selector.getSelectOptionError()).toBeUndefined();\n        });\n    });\n\n    describe('#getInitializeError()', () => {\n        it('returns error if unable to initialize any method', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                errors: { initializeError: getErrorResponse(), initializeMethodId: 'foobar' },\n            });\n\n            expect(selector.getInitializeError()).toEqual(getErrorResponse());\n        });\n\n        it('returns error if unable to initialize specific method', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                errors: { initializeError: getErrorResponse(), initializeMethodId: 'foobar' },\n            });\n\n            expect(selector.getInitializeError('foobar')).toEqual(getErrorResponse());\n            expect(selector.getInitializeError('bar')).toBeUndefined();\n        });\n\n        it('does not return error if able to initialize', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                errors: {},\n            });\n\n            expect(selector.getInitializeError()).toBeUndefined();\n        });\n    });\n\n    describe('#getWidgetInteractingError()', () => {\n        it('returns error if widget interaction failed', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                errors: {\n                    widgetInteractionError: getErrorResponse(),\n                    widgetInteractionMethodId: 'foobar',\n                },\n            });\n\n            expect(selector.getWidgetInteractionError()).toEqual(getErrorResponse());\n        });\n\n        it('returns error if unable to initialize specific method', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                errors: { initializeError: getErrorResponse(), initializeMethodId: 'foobar' },\n            });\n\n            expect(selector.getInitializeError('foobar')).toEqual(getErrorResponse());\n            expect(selector.getInitializeError('bar')).toBeUndefined();\n        });\n\n        it('does not return error if able to initialize', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                errors: {},\n            });\n\n            expect(selector.getInitializeError()).toBeUndefined();\n        });\n    });\n\n    describe('#isUpdatingAddress()', () => {\n        it('returns true if updating address', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                statuses: { isUpdatingAddress: true },\n            });\n\n            expect(selector.isUpdatingAddress()).toBe(true);\n        });\n\n        it('returns false if not updating address', () => {\n            selector = createShippingStrategySelector(state.shippingStrategy);\n\n            expect(selector.isUpdatingAddress()).toBe(false);\n        });\n    });\n\n    describe('#isSelectingOption()', () => {\n        it('returns true if selecting option', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                statuses: { isSelectingOption: true },\n            });\n\n            expect(selector.isSelectingOption()).toBe(true);\n        });\n\n        it('returns false if not selecting option', () => {\n            selector = createShippingStrategySelector(state.shippingStrategy);\n\n            expect(selector.isSelectingOption()).toBe(false);\n        });\n    });\n\n    describe('#isInitializing()', () => {\n        it('returns true if initializing any method', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                statuses: { initializeMethodId: 'foobar', isInitializing: true },\n            });\n\n            expect(selector.isInitializing()).toBe(true);\n        });\n\n        it('returns true if initializing specific method', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                statuses: { initializeMethodId: 'foobar', isInitializing: true },\n            });\n\n            expect(selector.isInitializing('foobar')).toBe(true);\n            expect(selector.isInitializing('bar')).toBe(false);\n        });\n\n        it('returns false if not initializing method', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                statuses: { initializeMethodId: undefined, isInitializing: false },\n            });\n\n            expect(selector.isInitializing()).toBe(false);\n        });\n    });\n\n    describe('#isInitialized()', () => {\n        it('returns true if method is initialized', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                data: { foobar: { isInitialized: true } },\n            });\n\n            expect(selector.isInitialized('foobar')).toBe(true);\n        });\n\n        it('returns false if method is not initialized', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                data: { foobar: { isInitialized: false } },\n            });\n\n            expect(selector.isInitialized('foobar')).toBe(false);\n            expect(selector.isInitialized('bar')).toBe(false);\n        });\n    });\n\n    describe('#isWidgetInteracting()', () => {\n        it('returns true if any method is interacting with a widget', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                statuses: { widgetInteractionMethodId: 'foobar', isWidgetInteracting: true },\n            });\n\n            expect(selector.isWidgetInteracting()).toBe(true);\n        });\n\n        it('returns true if a specific method is interacting with a widget', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                statuses: { widgetInteractionMethodId: 'foobar', isWidgetInteracting: true },\n            });\n\n            expect(selector.isWidgetInteracting('foobar')).toBe(true);\n            expect(selector.isWidgetInteracting('bar')).toBe(false);\n        });\n\n        it('returns false if not interacting with a widget', () => {\n            selector = createShippingStrategySelector({\n                ...state.shippingStrategy,\n                statuses: { widgetInteractionMethodId: undefined, isWidgetInteracting: false },\n            });\n\n            expect(selector.isWidgetInteracting()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-strategy-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport ShippingStrategyState, { DEFAULT_STATE } from './shipping-strategy-state';\n\nexport default interface ShippingStrategySelector {\n    getUpdateAddressError(methodId?: string): Error | undefined;\n    getSelectOptionError(methodId?: string): Error | undefined;\n    getInitializeError(methodId?: string): Error | undefined;\n    getWidgetInteractionError(methodId?: string): Error | undefined;\n    isUpdatingAddress(methodId?: string): boolean;\n    isSelectingOption(methodId?: string): boolean;\n    isInitializing(methodId?: string): boolean;\n    isInitialized(methodId: string): boolean;\n    isWidgetInteracting(methodId?: string): boolean;\n}\n\nexport type ShippingStrategySelectorFactory = (\n    state: ShippingStrategyState,\n) => ShippingStrategySelector;\n\nexport function createShippingStrategySelectorFactory(): ShippingStrategySelectorFactory {\n    const getUpdateAddressError = createSelector(\n        (state: ShippingStrategyState) => state.errors.updateAddressMethodId,\n        (state: ShippingStrategyState) => state.errors.updateAddressError,\n        (updateAddressMethodId, updateAddressError) => (methodId?: string) => {\n            if (methodId && updateAddressMethodId !== methodId) {\n                return;\n            }\n\n            return updateAddressError;\n        },\n    );\n\n    const getSelectOptionError = createSelector(\n        (state: ShippingStrategyState) => state.errors.selectOptionMethodId,\n        (state: ShippingStrategyState) => state.errors.selectOptionError,\n        (selectOptionMethodId, selectOptionError) => (methodId?: string) => {\n            if (methodId && selectOptionMethodId !== methodId) {\n                return;\n            }\n\n            return selectOptionError;\n        },\n    );\n\n    const getInitializeError = createSelector(\n        (state: ShippingStrategyState) => state.errors.initializeMethodId,\n        (state: ShippingStrategyState) => state.errors.initializeError,\n        (initializeMethodId, initializeError) => (methodId?: string) => {\n            if (methodId && initializeMethodId !== methodId) {\n                return;\n            }\n\n            return initializeError;\n        },\n    );\n\n    const getWidgetInteractionError = createSelector(\n        (state: ShippingStrategyState) => state.errors.widgetInteractionMethodId,\n        (state: ShippingStrategyState) => state.errors.widgetInteractionError,\n        (widgetInteractionMethodId, widgetInteractionError) => (methodId?: string) => {\n            if (methodId && widgetInteractionMethodId !== methodId) {\n                return;\n            }\n\n            return widgetInteractionError;\n        },\n    );\n\n    const isUpdatingAddress = createSelector(\n        (state: ShippingStrategyState) => state.statuses.updateAddressMethodId,\n        (state: ShippingStrategyState) => state.statuses.isUpdatingAddress,\n        (updateAddressMethodId, isUpdatingAddress) => (methodId?: string) => {\n            if (methodId && updateAddressMethodId !== methodId) {\n                return false;\n            }\n\n            return !!isUpdatingAddress;\n        },\n    );\n\n    const isSelectingOption = createSelector(\n        (state: ShippingStrategyState) => state.statuses.selectOptionMethodId,\n        (state: ShippingStrategyState) => state.statuses.isSelectingOption,\n        (selectOptionMethodId, isSelectingOption) => (methodId?: string) => {\n            if (methodId && selectOptionMethodId !== methodId) {\n                return false;\n            }\n\n            return !!isSelectingOption;\n        },\n    );\n\n    const isInitializing = createSelector(\n        (state: ShippingStrategyState) => state.statuses.initializeMethodId,\n        (state: ShippingStrategyState) => state.statuses.isInitializing,\n        (initializeMethodId, isInitializing) => (methodId?: string) => {\n            if (methodId && initializeMethodId !== methodId) {\n                return false;\n            }\n\n            return !!isInitializing;\n        },\n    );\n\n    const isInitialized = createSelector(\n        (state: ShippingStrategyState) => state.data,\n        (data) => (methodId: string) => {\n            return !!(data[methodId] && data[methodId].isInitialized);\n        },\n    );\n\n    const isWidgetInteracting = createSelector(\n        (state: ShippingStrategyState) => state.statuses.widgetInteractionMethodId,\n        (state: ShippingStrategyState) => state.statuses.isWidgetInteracting,\n        (widgetInteractionMethodId, isWidgetInteracting) => (methodId?: string) => {\n            if (methodId && widgetInteractionMethodId !== methodId) {\n                return false;\n            }\n\n            return !!isWidgetInteracting;\n        },\n    );\n\n    return memoizeOne((state: ShippingStrategyState = DEFAULT_STATE): ShippingStrategySelector => {\n        return {\n            getUpdateAddressError: getUpdateAddressError(state),\n            getSelectOptionError: getSelectOptionError(state),\n            getInitializeError: getInitializeError(state),\n            getWidgetInteractionError: getWidgetInteractionError(state),\n            isUpdatingAddress: isUpdatingAddress(state),\n            isSelectingOption: isSelectingOption(state),\n            isInitializing: isInitializing(state),\n            isInitialized: isInitialized(state),\n            isWidgetInteracting: isWidgetInteracting(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/shipping/shipping-strategy-state.ts",
    "content": "export default interface ShippingStrategyState {\n    data: ShippingStrategyDataState;\n    errors: ShippingStrategyErrorsState;\n    statuses: ShippingStrategyStatusesState;\n}\n\nexport interface ShippingStrategyDataState {\n    [key: string]: {\n        isInitialized: boolean;\n    };\n}\n\nexport interface ShippingStrategyErrorsState {\n    deinitializeError?: Error;\n    deinitializeMethodId?: string;\n    initializeError?: Error;\n    initializeMethodId?: string;\n    updateAddressError?: Error;\n    updateAddressMethodId?: string;\n    selectOptionError?: Error;\n    selectOptionMethodId?: string;\n    widgetInteractionError?: Error;\n    widgetInteractionMethodId?: string;\n}\n\nexport interface ShippingStrategyStatusesState {\n    deinitializeMethodId?: string;\n    initializeMethodId?: string;\n    isDeinitializing?: boolean;\n    isInitializing?: boolean;\n    isUpdatingAddress?: boolean;\n    isSelectingOption?: boolean;\n    updateAddressMethodId?: string;\n    selectOptionMethodId?: string;\n    isWidgetInteracting?: boolean;\n    widgetInteractionMethodId?: string;\n}\n\nexport const DEFAULT_STATE: ShippingStrategyState = {\n    data: {},\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/amazon-pay-v2/amazon-pay-v2-shipping-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the shipping step of\n * checkout in order to support AmazonPayV2.\n *\n * When AmazonPayV2 is initialized, a change shipping button will be bound.\n * When the customer clicks on it, they will be redirected to Amazon to\n * select a different shipping address.\n *\n * ```html\n * <!-- This is the change shipping button that will be bound -->\n * <button id=\"edit-button\">Change shipping</button>\n * ```\n *\n * ```js\n * service.initializeShipping({\n *     methodId: 'amazonpay',\n *     amazonpay: {\n *         editAddressButtonId: 'edit-button',\n *     },\n * });\n * ```\n */\nexport default interface AmazonPayV2ShippingInitializeOptions {\n    /**\n     * This editAddressButtonId is used to set an event listener, provide an\n     * element ID if you want users to be able to select a different shipping\n     * address by clicking on a button. It should be an HTML element.\n     */\n    editAddressButtonId?: string;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/amazon-pay-v2/amazon-pay-v2-shipping-strategy.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { noop } from 'lodash';\nimport { of } from 'rxjs';\n\nimport {\n    AmazonPayV2PaymentProcessor,\n    createAmazonPayV2PaymentProcessor,\n    getAmazonPayV2,\n} from '@bigcommerce/checkout-sdk/amazon-pay-utils';\n\nimport {\n    ConsignmentActionCreator,\n    ConsignmentActionType,\n    ConsignmentRequestSender,\n    createShippingStrategyRegistry,\n    ShippingStrategyActionCreator,\n} from '../..';\nimport { CheckoutRequestSender, CheckoutStore, createCheckoutStore } from '../../../checkout';\nimport { getCheckoutStoreState } from '../../../checkout/checkouts.mock';\nimport { InvalidArgumentError, MissingDataError } from '../../../common/error/errors';\nimport {\n    B2BCompanyPaymentMethodRequestSender,\n    PaymentMethod,\n    PaymentMethodActionCreator,\n    PaymentMethodRequestSender,\n} from '../../../payment';\nimport { getPaymentMethodsState } from '../../../payment/payment-methods.mock';\nimport { getFlatRateOption } from '../../internal-shipping-options.mock';\nimport {\n    getShippingAddress,\n    getShippingAddressWithCustomFields,\n} from '../../shipping-addresses.mock';\nimport { ShippingInitializeOptions } from '../../shipping-request-options';\n\nimport AmazonPayV2ShippingStrategy from './amazon-pay-v2-shipping-strategy';\n\ndescribe('AmazonPayV2ShippingStrategy', () => {\n    let amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor;\n    let container: HTMLDivElement;\n    let editShippingButton: HTMLDivElement;\n    let formPoster: FormPoster;\n    let paymentMethodActionCreator: PaymentMethodActionCreator;\n    let paymentMethodMock: PaymentMethod;\n    let requestSender: RequestSender;\n    let store: CheckoutStore;\n    let consignmentActionCreator: ConsignmentActionCreator;\n    let shippingStrategyActionCreator: ShippingStrategyActionCreator;\n    let strategy: AmazonPayV2ShippingStrategy;\n\n    beforeEach(() => {\n        store = createCheckoutStore(getCheckoutStoreState());\n        consignmentActionCreator = new ConsignmentActionCreator(\n            new ConsignmentRequestSender(createRequestSender()),\n            new CheckoutRequestSender(createRequestSender()),\n        );\n        shippingStrategyActionCreator = new ShippingStrategyActionCreator(\n            createShippingStrategyRegistry(store, requestSender),\n        );\n        amazonPayV2PaymentProcessor = createAmazonPayV2PaymentProcessor();\n        requestSender = createRequestSender();\n        formPoster = createFormPoster();\n\n        const paymentMethodRequestSender: PaymentMethodRequestSender =\n            new PaymentMethodRequestSender(requestSender);\n\n        paymentMethodActionCreator = new PaymentMethodActionCreator(\n            paymentMethodRequestSender,\n            new B2BCompanyPaymentMethodRequestSender(requestSender),\n        );\n        paymentMethodMock = getAmazonPayV2('us');\n\n        container = document.createElement('div');\n        container.setAttribute('id', 'container');\n        document.body.appendChild(container);\n\n        editShippingButton = document.createElement('div');\n        editShippingButton.setAttribute('id', 'edit-ship-address-button');\n        document.body.appendChild(editShippingButton);\n\n        jest.spyOn(store, 'dispatch');\n\n        jest.spyOn(amazonPayV2PaymentProcessor, 'initialize').mockReturnValue(Promise.resolve());\n\n        jest.spyOn(amazonPayV2PaymentProcessor, 'deinitialize').mockReturnValue(Promise.resolve());\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(amazonPayV2PaymentProcessor, 'createButton').mockReturnValue(container);\n\n        jest.spyOn(amazonPayV2PaymentProcessor, 'bindButton').mockImplementation(noop);\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation((_url, _data, callback = noop) =>\n            callback(),\n        );\n\n        jest.spyOn(paymentMethodActionCreator, 'loadPaymentMethod').mockResolvedValue(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            store.getState(),\n        );\n\n        strategy = new AmazonPayV2ShippingStrategy(\n            store,\n            consignmentActionCreator,\n            paymentMethodActionCreator,\n            amazonPayV2PaymentProcessor,\n            shippingStrategyActionCreator,\n        );\n    });\n\n    afterEach(() => {\n        document.body.removeChild(container);\n\n        if (editShippingButton.parentElement === document.body) {\n            document.body.removeChild(editShippingButton);\n        } else {\n            const shippingButton = document.getElementById('edit-ship-address-button');\n\n            if (shippingButton) {\n                document.body.removeChild(shippingButton);\n            }\n        }\n    });\n\n    it('creates an instance of AmazonPayV2ShippingStrategy', () => {\n        expect(strategy).toBeInstanceOf(AmazonPayV2ShippingStrategy);\n    });\n\n    describe('#initialize()', () => {\n        let initializeOptions: ShippingInitializeOptions;\n        const paymentToken = 'abc123';\n        const shippingId = 'edit-ship-address-button';\n\n        beforeEach(() => {\n            initializeOptions = {\n                methodId: 'amazonpay',\n                amazonpay: {\n                    editAddressButtonId: shippingId,\n                },\n            };\n        });\n\n        it('dispatches update shipping when clicking previously binded buttons if region not US', async () => {\n            paymentMethodMock.initializationData.region = 'de';\n            jest.spyOn(shippingStrategyActionCreator, 'widgetInteraction');\n            paymentMethodMock.initializationData.paymentToken = paymentToken;\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n                paymentMethodMock,\n            );\n\n            await strategy.initialize(initializeOptions);\n\n            const editButton = document.getElementById(shippingId);\n\n            if (editButton) {\n                editButton.click();\n            }\n\n            expect(shippingStrategyActionCreator.widgetInteraction).toHaveBeenCalled();\n        });\n\n        it('avoid dispatching update shipping when clicking previously binded buttons if US', async () => {\n            jest.spyOn(shippingStrategyActionCreator, 'widgetInteraction');\n            paymentMethodMock.initializationData.paymentToken = paymentToken;\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n                paymentMethodMock,\n            );\n\n            await strategy.initialize(initializeOptions);\n\n            const editButton = document.getElementById(shippingId);\n\n            if (editButton) {\n                editButton.click();\n            }\n\n            expect(shippingStrategyActionCreator.widgetInteraction).not.toHaveBeenCalled();\n        });\n\n        it('does not binds edit address button if no paymentToken is present on initializationData', async () => {\n            paymentMethodMock = getAmazonPayV2();\n            await strategy.initialize(initializeOptions);\n\n            expect(amazonPayV2PaymentProcessor.bindButton).not.toHaveBeenCalled();\n            expect(amazonPayV2PaymentProcessor.initialize).toHaveBeenCalledWith(paymentMethodMock);\n        });\n\n        it('fails to initialize the strategy if there is no payment method data', async () => {\n            const paymentMethods = { ...getPaymentMethodsState(), data: undefined };\n            const state = { ...getCheckoutStoreState(), paymentMethods };\n\n            store = createCheckoutStore(state);\n            strategy = new AmazonPayV2ShippingStrategy(\n                store,\n                consignmentActionCreator,\n                paymentMethodActionCreator,\n                amazonPayV2PaymentProcessor,\n                shippingStrategyActionCreator,\n            );\n\n            await expect(strategy.initialize(initializeOptions)).rejects.toThrow(MissingDataError);\n        });\n\n        it('binds edit address button if paymentToken is present on initializationData', async () => {\n            paymentMethodMock.initializationData.paymentToken = paymentToken;\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n                paymentMethodMock,\n            );\n\n            await strategy.initialize(initializeOptions);\n\n            expect(amazonPayV2PaymentProcessor.createButton).not.toHaveBeenCalled();\n            expect(amazonPayV2PaymentProcessor.initialize).toHaveBeenCalledWith(paymentMethodMock);\n            expect(amazonPayV2PaymentProcessor.bindButton).toHaveBeenCalledWith(\n                shippingId,\n                paymentToken,\n                'changeAddress',\n            );\n        });\n\n        it('does not initialize the paymentProcessor if no options.methodId are provided', () => {\n            initializeOptions.methodId = '';\n\n            expect(strategy.initialize(initializeOptions)).rejects.toThrow(InvalidArgumentError);\n            expect(amazonPayV2PaymentProcessor.initialize).not.toHaveBeenCalled();\n        });\n\n        it('does not initialize the paymentProcessor if there is no payment method data', () => {\n            const paymentMethods = { ...getPaymentMethodsState(), data: undefined };\n            const state = { ...getCheckoutStoreState(), paymentMethods };\n\n            store = createCheckoutStore(state);\n            strategy = new AmazonPayV2ShippingStrategy(\n                store,\n                consignmentActionCreator,\n                paymentMethodActionCreator,\n                amazonPayV2PaymentProcessor,\n                shippingStrategyActionCreator,\n            );\n\n            expect(strategy.initialize(initializeOptions)).rejects.toThrow(MissingDataError);\n            expect(amazonPayV2PaymentProcessor.initialize).not.toHaveBeenCalled();\n        });\n\n        it('fails to initialize the strategy if no options.methodId is provided', async () => {\n            initializeOptions.methodId = '';\n\n            await expect(strategy.initialize(initializeOptions)).rejects.toThrow(\n                InvalidArgumentError,\n            );\n        });\n\n        it('does not bind edit billing address button if button do not exist', async () => {\n            document.body.removeChild(editShippingButton);\n            paymentMethodMock.initializationData.paymentToken = paymentToken;\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n                paymentMethodMock,\n            );\n\n            await strategy.initialize(initializeOptions);\n\n            expect(amazonPayV2PaymentProcessor.createButton).not.toHaveBeenCalled();\n            expect(amazonPayV2PaymentProcessor.initialize).toHaveBeenCalledWith(paymentMethodMock);\n            expect(amazonPayV2PaymentProcessor.bindButton).not.toHaveBeenCalledWith(\n                `#${shippingId}`,\n                paymentToken,\n            );\n\n            document.body.appendChild(editShippingButton);\n        });\n    });\n\n    it('selects shipping option', async () => {\n        const method = getFlatRateOption();\n        const options = {};\n        const action = of(createAction(ConsignmentActionType.UpdateConsignmentRequested));\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(consignmentActionCreator, 'selectShippingOption').mockReturnValue(action);\n\n        jest.spyOn(store, 'dispatch');\n\n        const output = await strategy.selectOption(method.id, options);\n\n        expect(consignmentActionCreator.selectShippingOption).toHaveBeenCalledWith(\n            method.id,\n            options,\n        );\n        expect(store.dispatch).toHaveBeenCalledWith(action);\n        expect(output).toEqual(store.getState());\n    });\n\n    it('updates address with provided custom fields and existing address', async () => {\n        const options = {};\n        const amazonShippingAddress = getShippingAddress();\n        const address = getShippingAddressWithCustomFields();\n        const action = of(createAction(ConsignmentActionType.UpdateConsignmentRequested));\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(consignmentActionCreator, 'updateAddress').mockReturnValue(action);\n\n        jest.spyOn(store, 'dispatch');\n\n        const output = await strategy.updateAddress(address, options);\n\n        expect(consignmentActionCreator.updateAddress).toHaveBeenCalledWith(\n            {\n                ...amazonShippingAddress,\n                customFields: address.customFields,\n            },\n            options,\n        );\n        expect(store.dispatch).toHaveBeenCalledWith(action);\n        expect(output).toEqual(store.getState());\n    });\n\n    describe('#deinitialize()', () => {\n        let initializeOptions: ShippingInitializeOptions;\n        const shippingId = 'edit-ship-address-button';\n\n        beforeEach(async () => {\n            initializeOptions = {\n                methodId: 'amazonpay',\n                amazonpay: {\n                    editAddressButtonId: shippingId,\n                },\n            };\n            await strategy.initialize(initializeOptions);\n        });\n\n        it('expect to deinitialize the payment processor', async () => {\n            await strategy.deinitialize();\n\n            expect(amazonPayV2PaymentProcessor.deinitialize).toHaveBeenCalled();\n        });\n\n        it('deinitializes strategy', async () => {\n            await strategy.deinitialize();\n\n            expect(await strategy.deinitialize()).toEqual(store.getState());\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/amazon-pay-v2/amazon-pay-v2-shipping-strategy.ts",
    "content": "import { noop } from 'rxjs';\n\nimport {\n    AmazonPayV2ChangeActionType,\n    AmazonPayV2PaymentProcessor,\n} from '@bigcommerce/checkout-sdk/amazon-pay-utils';\n\nimport { ConsignmentActionCreator, ShippingStrategyActionCreator } from '../..';\nimport { AddressRequestBody } from '../../../address';\nimport { CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n} from '../../../common/error/errors';\nimport { PaymentMethodActionCreator } from '../../../payment';\nimport { ShippingInitializeOptions, ShippingRequestOptions } from '../../shipping-request-options';\nimport ShippingStrategy from '../shipping-strategy';\n\nexport default class AmazonPayV2ShippingStrategy implements ShippingStrategy {\n    constructor(\n        private _store: CheckoutStore,\n        private _consignmentActionCreator: ConsignmentActionCreator,\n        private _paymentMethodActionCreator: PaymentMethodActionCreator,\n        private _amazonPayV2PaymentProcessor: AmazonPayV2PaymentProcessor,\n        private _shippingStrategyActionCreator: ShippingStrategyActionCreator,\n    ) {}\n\n    updateAddress(\n        address: AddressRequestBody,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        const shippingAddress = this._store.getState().shippingAddress.getShippingAddress();\n\n        if (!shippingAddress) {\n            throw new MissingDataError(MissingDataErrorType.MissingShippingAddress);\n        }\n\n        const updateAddressRequestBody = {\n            ...shippingAddress,\n            customFields: address.customFields,\n        };\n\n        return this._store.dispatch(\n            this._consignmentActionCreator.updateAddress(updateAddressRequestBody, options),\n        );\n    }\n\n    selectOption(\n        optionId: string,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(\n            this._consignmentActionCreator.selectShippingOption(optionId, options),\n        );\n    }\n\n    async initialize(options: ShippingInitializeOptions): Promise<InternalCheckoutSelectors> {\n        const { amazonpay, methodId } = options;\n\n        if (!amazonpay || !methodId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"options.amazonpay\" argument is not provided.',\n            );\n        }\n\n        const state = await this._store.dispatch(\n            this._paymentMethodActionCreator.loadPaymentMethod(methodId),\n        );\n        const paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n\n        await this._amazonPayV2PaymentProcessor.initialize(paymentMethod);\n\n        const { paymentToken, region } = paymentMethod.initializationData;\n        const buttonId = amazonpay.editAddressButtonId;\n\n        if (paymentToken && buttonId) {\n            const shouldShowLoadingSpinner = this._shouldShowLoadingSpinner(region);\n\n            this._bindEditButton(buttonId, paymentToken, 'changeAddress', shouldShowLoadingSpinner);\n        }\n\n        return this._store.getState();\n    }\n\n    async deinitialize(): Promise<InternalCheckoutSelectors> {\n        await this._amazonPayV2PaymentProcessor.deinitialize();\n\n        return Promise.resolve(this._store.getState());\n    }\n\n    private _bindEditButton(\n        id: string,\n        sessionId: string,\n        changeAction: AmazonPayV2ChangeActionType,\n        shouldShowLoadingSpinner: boolean,\n    ): void {\n        const button = document.getElementById(id);\n\n        if (!button || !button.parentNode) {\n            return;\n        }\n\n        if (shouldShowLoadingSpinner) {\n            const clone = button.cloneNode(true);\n\n            button.parentNode.replaceChild(clone, button);\n\n            clone.addEventListener('click', () => this._showLoadingSpinner());\n        }\n\n        this._amazonPayV2PaymentProcessor.bindButton(id, sessionId, changeAction);\n    }\n\n    private _showLoadingSpinner(): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(\n            this._shippingStrategyActionCreator.widgetInteraction(() => new Promise(noop)),\n            { queueId: 'widgetInteraction' },\n        );\n    }\n\n    private _shouldShowLoadingSpinner(region: string) {\n        return region !== 'us';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/amazon-pay-v2/index.ts",
    "content": "export { default as AmazonPayV2ShippingStrategy } from './amazon-pay-v2-shipping-strategy';\nexport { default as AmazonPayV2ShippingInitializeOptions } from './amazon-pay-v2-shipping-initialize-options';\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/bigcommerce-payments/bigcommerce-payments-fastlane-shipping-initialization-options.ts",
    "content": "import { PayPalFastlaneStylesOption } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport { CustomerAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * A set of options that are required to initialize the shipping step of\n * checkout in order to support BigCommercePayments  Fastlane.\n */\nexport default interface BigCommercePaymentsFastlaneShippingInitializeOptions {\n    /**\n     * Is a stylisation options for customizing BigCommercePayments Fastlane components\n     *\n     * Note: the styles for all BigCommercePayments Fastlane strategies should be the same,\n     * because they will be provided to fastlane library only for the first strategy initialization\n     * no matter what strategy was initialised first\n     */\n    styles?: PayPalFastlaneStylesOption;\n\n    /**\n     * Is a callback that shows BigCommercePayments Fastlane popup with customer addresses\n     * when get triggered\n     */\n    onPayPalFastlaneAddressChange?: (\n        showPayPalFastlaneAddressSelector: () => Promise<CustomerAddress | undefined>,\n    ) => void;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/bigcommerce-payments/bigcommerce-payments-fastlane-shipping-strategy.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    BigCommercePaymentsFastlaneUtils,\n    createBigCommercePaymentsFastlaneUtils,\n    createBigCommercePaymentsSdk,\n    getBigCommercePaymentsFastlanePaymentMethod,\n    getPayPalFastlane,\n    getPayPalFastlaneAuthenticationResultMock,\n    getPayPalFastlaneSdk,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneSdk,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    Cart,\n    Customer,\n    StoreConfig,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getConfig,\n    getCustomer,\n    getShippingAddress,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { BillingAddress, BillingAddressActionCreator } from '../../../billing';\nimport BillingAddressRequestSender from '../../../billing/billing-address-request-sender';\nimport { CheckoutRequestSender, CheckoutStore, createCheckoutStore } from '../../../checkout';\nimport { InvalidArgumentError } from '../../../common/error/errors';\nimport {\n    B2BCompanyPaymentMethodRequestSender,\n    PaymentMethod,\n    PaymentMethodActionCreator,\n    PaymentMethodRequestSender,\n} from '../../../payment';\nimport { PaymentProviderCustomerActionCreator } from '../../../payment-provider-customer';\nimport { SubscriptionsActionCreator, SubscriptionsRequestSender } from '../../../subscription';\nimport ConsignmentActionCreator from '../../consignment-action-creator';\nimport ConsignmentRequestSender from '../../consignment-request-sender';\nimport { getFlatRateOption } from '../../internal-shipping-options.mock';\n\nimport BigCommercePaymentsFastlaneShippingStrategy from './bigcommerce-payments-fastlane-shipping-strategy';\n\ndescribe('BigCommercePaymentsFastlaneShippingStrategy', () => {\n    let billingAddressActionCreator: BillingAddressActionCreator;\n    let billingAddress: BillingAddress;\n    let cart: Cart;\n    let consignmentActionCreator: ConsignmentActionCreator;\n    let customer: Customer;\n    let paymentMethodActionCreator: PaymentMethodActionCreator;\n    let paymentMethod: PaymentMethod;\n    let paymentProviderCustomerActionCreator: PaymentProviderCustomerActionCreator;\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let payPalSdkHelper: PayPalSdkHelper;\n    let bigCommercePaymentsFastlaneUtils: BigCommercePaymentsFastlaneUtils;\n    let store: CheckoutStore;\n    let storeConfig: StoreConfig;\n    let strategy: BigCommercePaymentsFastlaneShippingStrategy;\n\n    const methodId = 'bigcommerce_payments_fastlane';\n    const initializationOptions = { methodId };\n    const authenticationResultMock = getPayPalFastlaneAuthenticationResultMock();\n    const customerContextId = 'asd123';\n    const paypalFastlane = getPayPalFastlane();\n    const shippingAddresses = [getShippingAddress()];\n\n    const requestSender = createRequestSender();\n\n    const bcAddressMock = {\n        id: 1,\n        address1: 'addressLine1',\n        address2: 'addressLine2',\n        city: 'addressCity',\n        company: 'BigCommerce',\n        country: 'US',\n        countryCode: 'US',\n        customFields: [],\n        firstName: 'John',\n        lastName: 'Doe',\n        phone: '333333333333',\n        postalCode: '03004',\n        stateOrProvince: 'addressState',\n        stateOrProvinceCode: 'addressState',\n        type: 'residential',\n    };\n\n    const bcInstrumentMock = {\n        bigpayToken: 'nonce/token',\n        brand: 'Visa',\n        defaultInstrument: false,\n        expiryMonth: '12',\n        expiryYear: '2030',\n        iin: '',\n        last4: '1111',\n        method: 'bigcommerce_payments_fastlane',\n        provider: 'bigcommerce_payments_fastlane',\n        trustedShippingAddress: false,\n        type: 'card' as const,\n        untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.CVV,\n    };\n\n    beforeEach(() => {\n        billingAddress = getBillingAddress();\n        cart = getCart();\n        customer = { ...getCustomer(), isGuest: true };\n        storeConfig = getConfig().storeConfig;\n        paymentMethod = getBigCommercePaymentsFastlanePaymentMethod();\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n\n        store = createCheckoutStore();\n        billingAddressActionCreator = new BillingAddressActionCreator(\n            new BillingAddressRequestSender(requestSender),\n            new SubscriptionsActionCreator(new SubscriptionsRequestSender(requestSender)),\n        );\n        consignmentActionCreator = new ConsignmentActionCreator(\n            new ConsignmentRequestSender(requestSender),\n            new CheckoutRequestSender(requestSender),\n        );\n        paymentMethodActionCreator = new PaymentMethodActionCreator(\n            new PaymentMethodRequestSender(requestSender),\n            new B2BCompanyPaymentMethodRequestSender(requestSender),\n        );\n        paymentProviderCustomerActionCreator = new PaymentProviderCustomerActionCreator();\n        payPalSdkHelper = createBigCommercePaymentsSdk();\n        bigCommercePaymentsFastlaneUtils = createBigCommercePaymentsFastlaneUtils();\n\n        strategy = new BigCommercePaymentsFastlaneShippingStrategy(\n            store,\n            billingAddressActionCreator,\n            consignmentActionCreator,\n            paymentMethodActionCreator,\n            paymentProviderCustomerActionCreator,\n            payPalSdkHelper,\n            bigCommercePaymentsFastlaneUtils,\n        );\n\n        jest.spyOn(store.getState().cart, 'getCartOrThrow').mockReturnValue(cart);\n        // TODO: remove ts-ignore and update test with related type\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(store.getState().config, 'getStoreConfigOrThrow').mockReturnValue(storeConfig);\n        jest.spyOn(store.getState().customer, 'getCustomerOrThrow').mockReturnValue(customer);\n        jest.spyOn(store.getState().customer, 'getCustomer').mockReturnValue(customer);\n        jest.spyOn(store.getState().billingAddress, 'getBillingAddress').mockReturnValue(\n            billingAddress,\n        );\n        jest.spyOn(\n            store.getState().paymentProviderCustomer,\n            'getPaymentProviderCustomerOrThrow',\n        ).mockReturnValue({});\n        jest.spyOn(store.getState().paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(store.getState().shippingAddress, 'getShippingAddressesOrThrow').mockReturnValue(\n            shippingAddresses,\n        );\n\n        jest.spyOn(billingAddressActionCreator, 'updateAddress').mockImplementation(() =>\n            jest.fn(),\n        );\n        jest.spyOn(consignmentActionCreator, 'updateAddress').mockImplementation(() => jest.fn());\n        jest.spyOn(consignmentActionCreator, 'selectShippingOption').mockImplementation(() =>\n            jest.fn(),\n        );\n        // TODO: remove ts-ignore and update test with related type\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(paymentMethodActionCreator, 'loadPaymentMethod').mockReturnValue(paymentMethod);\n\n        jest.spyOn(payPalSdkHelper, 'getPayPalFastlaneSdk').mockImplementation(\n            // TODO: remove ts-ignore and update test with related type\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            () => paypalFastlaneSdk,\n        );\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'initializePayPalFastlane').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'getPayPalFastlaneOrThrow').mockImplementation(\n            () => paypalFastlane,\n        );\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'getStorageSessionId').mockReturnValue(\n            cart.id,\n        );\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'updateStorageSessionId').mockImplementation(\n            () => jest.fn(),\n        );\n        // TODO: remove ts-ignore and update test with related type\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'lookupCustomerOrThrow').mockImplementation(\n            () =>\n                Promise.resolve({\n                    customerContextId,\n                }),\n        );\n\n        jest.spyOn(\n            bigCommercePaymentsFastlaneUtils,\n            'triggerAuthenticationFlowOrThrow',\n            // TODO: remove ts-ignore and update test with related type\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n        ).mockImplementation(() => authenticationResultMock);\n        jest.spyOn(\n            bigCommercePaymentsFastlaneUtils,\n            'mapPayPalFastlaneProfileToBcCustomerData',\n            // TODO: remove ts-ignore and update test with related type\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n        ).mockImplementation(() => ({\n            authenticationState: authenticationResultMock.authenticationState,\n            addresses: [bcAddressMock],\n            billingAddress: bcAddressMock,\n            shippingAddress: bcAddressMock,\n            instruments: [bcInstrumentMock],\n        }));\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'mapPayPalToBcAddress').mockImplementation(\n            // TODO: remove ts-ignore and update test with related type\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            () => bcAddressMock,\n        );\n        // TODO: remove ts-ignore and update test with related type\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(bigCommercePaymentsFastlaneUtils, 'filterAddresses').mockImplementation(() => [\n            bcAddressMock,\n        ]);\n\n        jest.spyOn(\n            paymentProviderCustomerActionCreator,\n            'updatePaymentProviderCustomer',\n            // TODO: remove ts-ignore and update test with related type\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n        ).mockImplementation(() => jest.fn());\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#updateAddress()', () => {\n        it('updates shipping address', async () => {\n            const address = getShippingAddress();\n            const options = {};\n\n            await strategy.updateAddress(address, options);\n\n            expect(consignmentActionCreator.updateAddress).toHaveBeenCalledWith(address, options);\n        });\n    });\n\n    describe('selectOption', () => {\n        it('selects shipping option', async () => {\n            const method = getFlatRateOption();\n            const options = {};\n\n            await strategy.selectOption(method.id, options);\n\n            expect(consignmentActionCreator.selectShippingOption).toHaveBeenCalledWith(\n                method.id,\n                options,\n            );\n        });\n    });\n\n    describe('deinitialize', () => {\n        it('deinitialize shipping strategy', async () => {\n            // TODO: remove ts-ignore and update test with related type\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(store, 'getState').mockReturnValue('storeState');\n\n            expect(await strategy.deinitialize()).toBe('storeState');\n        });\n    });\n\n    describe('initialize', () => {\n        it('throws an error if method id is not provided', async () => {\n            try {\n                await strategy.initialize({});\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not trigger with Fastlane flow for store members', async () => {\n            const guestCustomer = {\n                ...customer,\n                isGuest: false,\n            };\n\n            jest.spyOn(store.getState().customer, 'getCustomerOrThrow').mockReturnValue(\n                guestCustomer,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).not.toHaveBeenCalled();\n            expect(\n                bigCommercePaymentsFastlaneUtils.initializePayPalFastlane,\n            ).not.toHaveBeenCalled();\n        });\n\n        it('gets paypal fastlane with correct styles', async () => {\n            // TODO: remove ts-ignore and update test with related type\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethod').mockReturnValue({\n                clientToken: '123',\n                initializationData: {\n                    isFastlaneEnabled: true,\n                    isFastlaneStylingEnabled: true,\n                    isAcceleratedCheckoutEnabled: true,\n                    fastlaneStyles: {\n                        fastlaneRootSettingsBackgroundColor: 'orange',\n                        fastlaneTextCaptionSettingsColor: 'blue',\n                    },\n                },\n            });\n\n            const initOptions = {\n                methodId: 'bigcommerce_payments_fastlane',\n                bigcommerce_payments_fastlane: {\n                    styles: {\n                        root: {\n                            backgroundColorPrimary: 'red',\n                        },\n                        input: {\n                            borderRadius: '10px',\n                        },\n                    },\n                },\n            };\n\n            await strategy.initialize(initOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n                {\n                    root: {\n                        backgroundColorPrimary: 'orange',\n                    },\n                    input: {\n                        borderRadius: '10px',\n                    },\n                    text: {\n                        caption: {\n                            color: 'blue',\n                        },\n                    },\n                },\n            );\n        });\n\n        it('does not load payment method if BigCommercePayments Fastlane feature is disabled', async () => {\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({});\n\n            jest.spyOn(bigCommercePaymentsFastlaneUtils, 'getStorageSessionId').mockReturnValue(\n                // TODO: remove ts-ignore and update test with related type\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                undefined,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).not.toHaveBeenCalled();\n        });\n\n        it('initializes paypal sdk and authenticates user with paypal fastlane', async () => {\n            paymentMethod.initializationData.isFastlaneEnabled = true;\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n            expect(payPalSdkHelper.getPayPalFastlaneSdk).toHaveBeenCalledWith(\n                paymentMethod,\n                cart.currency.code,\n                cart.id,\n            );\n            expect(bigCommercePaymentsFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                paymentMethod.initializationData.isDeveloperModeApplicable,\n                {},\n            );\n            expect(bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow).toHaveBeenCalledWith(\n                customer.email,\n            );\n            expect(\n                bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow,\n            ).toHaveBeenCalledWith(customerContextId);\n            expect(\n                bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData,\n            ).toHaveBeenCalledWith(methodId, authenticationResultMock);\n            expect(\n                paymentProviderCustomerActionCreator.updatePaymentProviderCustomer,\n            ).toHaveBeenCalledWith({\n                authenticationState: authenticationResultMock.authenticationState,\n                addresses: [bcAddressMock],\n                instruments: [bcInstrumentMock],\n            });\n            expect(bigCommercePaymentsFastlaneUtils.updateStorageSessionId).toHaveBeenCalledWith(\n                cart.id,\n            );\n            expect(billingAddressActionCreator.updateAddress).toHaveBeenCalledWith({\n                ...bcAddressMock,\n                id: String(bcAddressMock.id),\n            });\n        });\n\n        it('does not authenticate user if the authentication was canceled before', async () => {\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.CANCELED,\n            });\n\n            jest.spyOn(bigCommercePaymentsFastlaneUtils, 'getStorageSessionId').mockReturnValue(\n                cart.id,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).not.toHaveBeenCalled();\n            expect(\n                bigCommercePaymentsFastlaneUtils.initializePayPalFastlane,\n            ).not.toHaveBeenCalled();\n            expect(bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow).not.toHaveBeenCalled();\n        });\n\n        it('does not authenticate user if it was authenticated before', async () => {\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                // TODO: remove ts-ignore and update test with related type\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                addresses: [bcAddressMock],\n                // TODO: remove ts-ignore and update test with related type\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                instruments: [bcInstrumentMock],\n            });\n\n            jest.spyOn(bigCommercePaymentsFastlaneUtils, 'getStorageSessionId').mockReturnValue(\n                cart.id,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow).not.toHaveBeenCalled();\n        });\n\n        it('does not provide Fastlane Shipping selector method if onPayPalFastlaneAddressChange is not a function', async () => {\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                // TODO: remove ts-ignore and update test with related type\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                addresses: [bcAddressMock],\n                // TODO: remove ts-ignore and update test with related type\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                instruments: [bcInstrumentMock],\n            });\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_fastlane: {\n                    onPayPalFastlaneAddressChange: undefined,\n                },\n            });\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).not.toHaveBeenCalled();\n            expect(\n                bigCommercePaymentsFastlaneUtils.initializePayPalFastlane,\n            ).not.toHaveBeenCalled();\n        });\n\n        it('initializes paypal sdk and provides Fastlane Shipping selector method to onPayPalFastlaneAddressChange callback', async () => {\n            const onPayPalFastlaneAddressChange = jest.fn();\n\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                // TODO: remove ts-ignore and update test with related type\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                addresses: [bcAddressMock],\n                // TODO: remove ts-ignore and update test with related type\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                instruments: [bcInstrumentMock],\n            });\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_fastlane: {\n                    onPayPalFastlaneAddressChange,\n                },\n            });\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).toHaveBeenCalled();\n            expect(bigCommercePaymentsFastlaneUtils.initializePayPalFastlane).toHaveBeenCalled();\n            expect(onPayPalFastlaneAddressChange).toHaveBeenCalled();\n        });\n\n        it('updates shipping address with PayPal Shipping selector', async () => {\n            const onPayPalFastlaneAddressChange = jest.fn((showPayPalFastlaneAddressSelector) => {\n                showPayPalFastlaneAddressSelector();\n            });\n\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                // TODO: remove ts-ignore and update test with related type\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                addresses: [bcAddressMock],\n                // TODO: remove ts-ignore and update test with related type\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                instruments: [bcInstrumentMock],\n            });\n\n            jest.spyOn(paypalFastlane.profile, 'showShippingAddressSelector').mockImplementation(\n                // TODO: remove ts-ignore and update test with related type\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                () => ({\n                    selectionChanged: true,\n                    selectedAddress: authenticationResultMock.profileData.shippingAddress,\n                }),\n            );\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_fastlane: {\n                    onPayPalFastlaneAddressChange,\n                },\n            });\n\n            expect(paypalFastlane.profile.showShippingAddressSelector).toHaveBeenCalled();\n            expect(bigCommercePaymentsFastlaneUtils.mapPayPalToBcAddress).toHaveBeenCalledWith(\n                authenticationResultMock.profileData.shippingAddress.address,\n                authenticationResultMock.profileData.shippingAddress.name,\n                authenticationResultMock.profileData.shippingAddress.phoneNumber,\n                shippingAddresses[0].customFields,\n            );\n            expect(bigCommercePaymentsFastlaneUtils.filterAddresses).toHaveBeenCalledWith([\n                bcAddressMock,\n            ]);\n            expect(\n                paymentProviderCustomerActionCreator.updatePaymentProviderCustomer,\n            ).toHaveBeenCalledWith({\n                addresses: [bcAddressMock],\n            });\n            expect(consignmentActionCreator.updateAddress).toHaveBeenCalledWith(bcAddressMock);\n        });\n\n        it('supports unified \"fastlane\" key with styles', async () => {\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethod').mockReturnValue({\n                ...paymentMethod,\n                clientToken: '123',\n                initializationData: {\n                    isFastlaneEnabled: true,\n                    isFastlaneStylingEnabled: true,\n                    isAcceleratedCheckoutEnabled: true,\n                    fastlaneStyles: {\n                        fastlaneRootSettingsBackgroundColor: 'orange',\n                        fastlaneTextCaptionSettingsColor: 'blue',\n                    },\n                },\n            });\n\n            const initOptions = {\n                methodId,\n                fastlane: {\n                    styles: {\n                        root: {\n                            backgroundColorPrimary: 'red',\n                        },\n                        input: {\n                            borderRadius: '10px',\n                        },\n                    },\n                },\n            };\n\n            await strategy.initialize(initOptions);\n\n            expect(bigCommercePaymentsFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n                {\n                    root: {\n                        backgroundColorPrimary: 'orange',\n                    },\n                    input: {\n                        borderRadius: '10px',\n                    },\n                    text: {\n                        caption: {\n                            color: 'blue',\n                        },\n                    },\n                },\n            );\n        });\n\n        it('supports the unified \"fastlane\" key with onPayPalFastlaneAddressChange callback', async () => {\n            const onPayPalFastlaneAddressChange = jest.fn();\n\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [bcAddressMock],\n                instruments: [bcInstrumentMock],\n            });\n\n            await strategy.initialize({\n                ...initializationOptions,\n                fastlane: {\n                    onPayPalFastlaneAddressChange,\n                },\n            });\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).toHaveBeenCalled();\n            expect(bigCommercePaymentsFastlaneUtils.initializePayPalFastlane).toHaveBeenCalled();\n            expect(onPayPalFastlaneAddressChange).toHaveBeenCalled();\n        });\n\n        it('prioritizes unified \"fastlane\" key over provider-specific key', async () => {\n            const providerSpecificCallback = jest.fn();\n            const unifiedCallback = jest.fn();\n\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [bcAddressMock],\n                instruments: [bcInstrumentMock],\n            });\n\n            await strategy.initialize({\n                ...initializationOptions,\n                bigcommerce_payments_fastlane: {\n                    onPayPalFastlaneAddressChange: providerSpecificCallback,\n                },\n                fastlane: {\n                    onPayPalFastlaneAddressChange: unifiedCallback,\n                },\n            });\n\n            expect(unifiedCallback).toHaveBeenCalled();\n            expect(providerSpecificCallback).not.toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/bigcommerce-payments/bigcommerce-payments-fastlane-shipping-strategy.ts",
    "content": "import {\n    BigCommercePaymentsFastlaneUtils,\n    BigCommercePaymentsInitializationData,\n    getFastlaneStyles,\n    isBigCommercePaymentsFastlaneCustomer,\n    isPayPalFastlaneCustomer,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneStylesOption,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport { CustomerAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { AddressRequestBody } from '../../../address';\nimport { BillingAddressActionCreator } from '../../../billing';\nimport { CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport { InvalidArgumentError } from '../../../common/error/errors';\nimport { PaymentMethod, PaymentMethodActionCreator } from '../../../payment';\nimport { PaymentProviderCustomerActionCreator } from '../../../payment-provider-customer';\nimport ConsignmentActionCreator from '../../consignment-action-creator';\nimport { ShippingInitializeOptions, ShippingRequestOptions } from '../../shipping-request-options';\nimport ShippingStrategy from '../shipping-strategy';\n\nexport default class BigCommercePaymentsFastlaneShippingStrategy implements ShippingStrategy {\n    constructor(\n        private _store: CheckoutStore,\n        private _billingAddressActionCreator: BillingAddressActionCreator,\n        private _consignmentActionCreator: ConsignmentActionCreator,\n        private _paymentMethodActionCreator: PaymentMethodActionCreator,\n        private _paymentProviderCustomerActionCreator: PaymentProviderCustomerActionCreator,\n        private _paypalSdkHelper: PayPalSdkHelper,\n        private _bigCommercePaymentsFastlaneUtils: BigCommercePaymentsFastlaneUtils,\n    ) {}\n\n    updateAddress(\n        address: AddressRequestBody,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(this._consignmentActionCreator.updateAddress(address, options));\n    }\n\n    selectOption(\n        optionId: string,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(\n            this._consignmentActionCreator.selectShippingOption(optionId, options),\n        );\n    }\n\n    deinitialize(): Promise<InternalCheckoutSelectors> {\n        return Promise.resolve(this._store.getState());\n    }\n\n    async initialize(options: ShippingInitializeOptions): Promise<InternalCheckoutSelectors> {\n        const { methodId, bigcommerce_payments_fastlane, fastlane } = options || {};\n        const fastlaneOptions = fastlane || bigcommerce_payments_fastlane;\n        const { onPayPalFastlaneAddressChange, styles } = fastlaneOptions || {};\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" argument is not provided.',\n            );\n        }\n\n        const state = this._store.getState();\n        const customer = state.customer.getCustomerOrThrow();\n\n        if (!customer?.isGuest) {\n            return Promise.resolve(this._store.getState());\n        }\n\n        try {\n            if (this._shouldAuthenticateUserWithFastlane()) {\n                await this._initializePayPalSdk(methodId, styles);\n                await this._authenticateUserWithFastlaneOtp(methodId);\n            }\n\n            if (\n                typeof onPayPalFastlaneAddressChange === 'function' &&\n                this._shouldUsePayPalFastlaneShippingComponent()\n            ) {\n                await this._initializePayPalSdk(methodId, styles);\n                onPayPalFastlaneAddressChange(() => this._handlePayPalShippingAddressChange());\n            }\n        } catch (error) {\n            // Info: we should not throw any error here to avoid customer stuck on\n            // shipping step due to the payment provider custom flow\n        }\n\n        return Promise.resolve(this._store.getState());\n    }\n\n    private async _getPayPalPaymentMethodOrThrow(\n        methodId: string,\n    ): Promise<PaymentMethod<BigCommercePaymentsInitializationData>> {\n        const state = this._store.getState();\n        const paymentMethod = state.paymentMethods.getPaymentMethod(methodId);\n\n        if (!paymentMethod) {\n            const newState = await this._store.dispatch(\n                this._paymentMethodActionCreator.loadPaymentMethod(methodId),\n            );\n\n            return newState.paymentMethods.getPaymentMethodOrThrow(methodId);\n        }\n\n        return paymentMethod;\n    }\n\n    private _getPayPalCustomerAuthenticationState(): string | undefined {\n        const state = this._store.getState();\n        const paymentProviderCustomer =\n            state.paymentProviderCustomer.getPaymentProviderCustomerOrThrow();\n        const bigCommercePaymentsPaymentProviderCustomer = isBigCommercePaymentsFastlaneCustomer(\n            paymentProviderCustomer,\n        )\n            ? paymentProviderCustomer\n            : {};\n\n        return bigCommercePaymentsPaymentProviderCustomer.authenticationState;\n    }\n\n    private _shouldAuthenticateUserWithFastlane(): boolean {\n        const state = this._store.getState();\n        const cart = state.cart.getCartOrThrow();\n        const paypalConnectSessionId = this._bigCommercePaymentsFastlaneUtils.getStorageSessionId();\n\n        const customerAuthenticationState = this._getPayPalCustomerAuthenticationState();\n\n        return !customerAuthenticationState && paypalConnectSessionId === cart.id;\n    }\n\n    private _shouldUsePayPalFastlaneShippingComponent(): boolean {\n        const customerAuthenticationState = this._getPayPalCustomerAuthenticationState();\n\n        return (\n            !!customerAuthenticationState &&\n            customerAuthenticationState !== PayPalFastlaneAuthenticationState.CANCELED\n        );\n    }\n\n    private async _initializePayPalSdk(\n        methodId: string,\n        styles?: PayPalFastlaneStylesOption,\n    ): Promise<void> {\n        const state = this._store.getState();\n        const cart = state.cart.getCartOrThrow();\n\n        const paymentMethod = await this._getPayPalPaymentMethodOrThrow(methodId);\n        const { isDeveloperModeApplicable, isFastlaneStylingEnabled } =\n            paymentMethod?.initializationData || {};\n        const isTestModeEnabled = !!isDeveloperModeApplicable;\n\n        const fastlaneStyles = getFastlaneStyles(\n            isFastlaneStylingEnabled ? paymentMethod?.initializationData?.fastlaneStyles : {},\n            styles,\n        );\n\n        const paypalFastlaneSdk = await this._paypalSdkHelper.getPayPalFastlaneSdk(\n            paymentMethod,\n            cart.currency.code,\n            cart.id,\n        );\n\n        await this._bigCommercePaymentsFastlaneUtils.initializePayPalFastlane(\n            paypalFastlaneSdk,\n            isTestModeEnabled,\n            fastlaneStyles,\n        );\n    }\n\n    private async _authenticateUserWithFastlaneOtp(methodId: string): Promise<void> {\n        const state = this._store.getState();\n        const cart = state.cart.getCartOrThrow();\n        const customerEmail = state.customer.getCustomer()?.email;\n        const billingAddressEmail = state.billingAddress.getBillingAddress()?.email;\n        const email = customerEmail || billingAddressEmail || '';\n\n        const { customerContextId } =\n            await this._bigCommercePaymentsFastlaneUtils.lookupCustomerOrThrow(email);\n\n        const authenticationResult =\n            await this._bigCommercePaymentsFastlaneUtils.triggerAuthenticationFlowOrThrow(\n                customerContextId,\n            );\n\n        const { authenticationState, addresses, billingAddress, shippingAddress, instruments } =\n            this._bigCommercePaymentsFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(\n                methodId,\n                authenticationResult,\n            );\n\n        await this._store.dispatch(\n            this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({\n                authenticationState,\n                addresses,\n                instruments,\n            }),\n        );\n\n        const isAuthenticationFlowCanceled =\n            authenticationResult.authenticationState === PayPalFastlaneAuthenticationState.CANCELED;\n\n        if (isAuthenticationFlowCanceled) {\n            this._bigCommercePaymentsFastlaneUtils.removeStorageSessionId();\n        } else {\n            this._bigCommercePaymentsFastlaneUtils.updateStorageSessionId(cart.id);\n        }\n\n        if (billingAddress) {\n            await this._store.dispatch(\n                this._billingAddressActionCreator.updateAddress({\n                    ...billingAddress,\n                    id: String(billingAddress.id),\n                }),\n            );\n        }\n\n        if (shippingAddress && cart.lineItems.physicalItems.length > 0) {\n            await this._store.dispatch(\n                this._consignmentActionCreator.updateAddress(shippingAddress),\n            );\n        }\n    }\n\n    /**\n     *\n     * BigCommercePayments Fastlane shipping address change through Fastlane external popup\n     *\n     */\n    private async _handlePayPalShippingAddressChange(): Promise<CustomerAddress | undefined> {\n        const paypalFastlaneSdk = this._bigCommercePaymentsFastlaneUtils.getPayPalFastlaneOrThrow();\n\n        const { selectionChanged, selectedAddress } =\n            await paypalFastlaneSdk.profile.showShippingAddressSelector();\n\n        if (selectionChanged) {\n            const state = this._store.getState();\n            const shipping = state.shippingAddress.getShippingAddressesOrThrow();\n            const paymentProviderCustomer =\n                state.paymentProviderCustomer.getPaymentProviderCustomer();\n            const paypalFastlaneCustomer = isPayPalFastlaneCustomer(paymentProviderCustomer)\n                ? paymentProviderCustomer\n                : {};\n\n            const shippingAddress = this._bigCommercePaymentsFastlaneUtils.mapPayPalToBcAddress(\n                selectedAddress.address,\n                selectedAddress.name,\n                selectedAddress.phoneNumber,\n                shipping[0]?.customFields,\n            );\n\n            const paymentProviderCustomerAddresses =\n                this._bigCommercePaymentsFastlaneUtils.filterAddresses([\n                    shippingAddress,\n                    ...(paypalFastlaneCustomer.addresses || []),\n                ]);\n\n            await this._store.dispatch(\n                this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({\n                    ...paypalFastlaneCustomer,\n                    addresses: paymentProviderCustomerAddresses,\n                }),\n            );\n\n            await this._store.dispatch(\n                this._consignmentActionCreator.updateAddress(shippingAddress),\n            );\n\n            return shippingAddress;\n        }\n\n        return undefined;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/bigcommerce-payments/index.ts",
    "content": "export { default as BigCommercePaymentsFastlaneShippingInitializeOptions } from './bigcommerce-payments-fastlane-shipping-initialization-options';\nexport { default as BigCommercePaymentsFastlaneShippingStrategy } from './bigcommerce-payments-fastlane-shipping-strategy';\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/braintree/braintree-fastlane-shipping-initialize-options.ts",
    "content": "import { BraintreeFastlaneStylesOption } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { CustomerAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n/**\n * A set of options that are required to initialize the shipping step of\n * checkout in order to support Braintree Fastlane.\n */\nexport default interface BraintreeFastlaneShippingInitializeOptions {\n    /**\n     * Is a stylisation options for customizing PayPal Fastlane components\n     *\n     * Note: the styles for all Braintree Fastlane strategies should be the same,\n     * because they will be provided to PayPal library only for the first strategy initialization\n     * no matter what strategy was initialised first\n     */\n    styles?: BraintreeFastlaneStylesOption;\n    /**\n     * Is a callback that shows Braintree Fastlane popup with customer addresses\n     * when get triggered\n     */\n    onPayPalFastlaneAddressChange?: (\n        showBraintreeFastlaneAddressSelector: () => Promise<CustomerAddress | undefined>,\n    ) => void;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/braintree/braintree-fastlane-shipping-strategy.spec.ts",
    "content": "import {\n    BraintreeFastlaneAuthenticationState,\n    BraintreeIntegrationService,\n    getBraintreeFastlaneAuthenticationResultMock,\n    getBraintreeFastlaneProfileDataMock,\n    getFastlaneMock,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getCountries,\n    getCustomer,\n    getPaymentMethod,\n    getShippingAddress,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nimport { BillingAddressActionCreator } from '../../../billing';\nimport { CheckoutStore, createCheckoutStore } from '../../../checkout';\nimport { InvalidArgumentError } from '../../../common/error/errors';\nimport { PaymentMethodActionCreator } from '../../../payment';\nimport { PaymentProviderCustomerActionCreator } from '../../../payment-provider-customer';\nimport ConsignmentActionCreator from '../../consignment-action-creator';\nimport { getFlatRateOption } from '../../internal-shipping-options.mock';\n\nimport BraintreeFastlaneShippingStrategy from './braintree-fastlane-shipping-strategy';\n\nconst BRAINTREE_AXO_METHOD_ID = 'braintreeacceleratedcheckout';\n\nclass PaymentMethodActionCreatorMock {\n    loadPaymentMethod(methodId: string): PaymentMethod | undefined {\n        return {\n            ...getPaymentMethod(),\n            id: methodId,\n        };\n    }\n}\n\nclass PaymentProviderCustomerActionCreatorMock {\n    updatePaymentProviderCustomer() {}\n}\n\nclass BraintreeIntegrationServiceMock {\n    initialize() {}\n    getBraintreeFastlane() {}\n}\n\nclass BillingAddressActionCreatorMock {\n    updateAddress() {}\n}\n\nclass ConsignmentActionCreatorMock {\n    updateAddress() {}\n    selectShippingOption() {}\n}\n\ndescribe('BraintreeFastlaneShippingStrategy', () => {\n    let store: CheckoutStore;\n    let billingAddressActionCreator: BillingAddressActionCreatorMock;\n    let consignmentActionCreator: ConsignmentActionCreatorMock;\n    let paymentMethodActionCreator: PaymentMethodActionCreatorMock;\n    let paymentProviderCustomerActionCreator: PaymentProviderCustomerActionCreatorMock;\n    let braintreeIntegrationServiceMock: BraintreeIntegrationServiceMock;\n    const defaultOptions = {\n        methodId: BRAINTREE_AXO_METHOD_ID,\n    };\n    const mappedAddress = {\n        id: 123123,\n        type: 'paypal-address',\n        firstName: 'John',\n        lastName: 'Doe',\n        company: '',\n        address1: 'Hello World Address',\n        address2: '',\n        city: 'Bellingham',\n        stateOrProvince: 'WA',\n        stateOrProvinceCode: 'WA',\n        country: 'United States',\n        countryCode: 'US',\n        postalCode: '98225',\n        phone: '14085551234',\n        customFields: [],\n    };\n    const braintreeFastlane = getFastlaneMock();\n    const mappedBillingAddress = {\n        ...mappedAddress,\n        id: '123123',\n    };\n\n    const mappedInstrument = {\n        bigpayToken: 'pp-vaulted-instrument-id',\n        brand: 'VISA',\n        defaultInstrument: false,\n        expiryMonth: undefined,\n        expiryYear: '02/2037',\n        iin: '',\n        last4: '1111',\n        method: 'braintreeacceleratedcheckout',\n        provider: 'braintreeacceleratedcheckout',\n        trustedShippingAddress: false,\n        type: 'card',\n        untrustedShippingCardVerificationMode: 'cvv',\n    };\n\n    const createStrategy = () => {\n        return new BraintreeFastlaneShippingStrategy(\n            store,\n            billingAddressActionCreator as unknown as BillingAddressActionCreator,\n            consignmentActionCreator as unknown as ConsignmentActionCreator,\n            paymentMethodActionCreator as unknown as PaymentMethodActionCreator,\n            paymentProviderCustomerActionCreator as unknown as PaymentProviderCustomerActionCreator,\n            braintreeIntegrationServiceMock as unknown as BraintreeIntegrationService,\n        );\n    };\n\n    beforeEach(() => {\n        store = createCheckoutStore();\n        paymentMethodActionCreator = new PaymentMethodActionCreatorMock();\n        paymentProviderCustomerActionCreator = new PaymentProviderCustomerActionCreatorMock();\n        braintreeIntegrationServiceMock = new BraintreeIntegrationServiceMock();\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(store, 'dispatch').mockImplementation((args) => args);\n        billingAddressActionCreator = new BillingAddressActionCreatorMock();\n        consignmentActionCreator = new ConsignmentActionCreatorMock();\n\n        jest.spyOn(store.getState().cart, 'getCart').mockReturnValue(getCart());\n        jest.spyOn(store.getState().cart, 'getCartOrThrow').mockReturnValue(getCart());\n        jest.spyOn(store.getState().countries, 'getCountries').mockReturnValue(getCountries());\n        jest.spyOn(store.getState().customer, 'getCustomerOrThrow').mockReturnValue({\n            ...getCustomer(),\n            isGuest: true,\n        });\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(store.getState().paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue({\n            clientToken: 'clientToken',\n        });\n        jest.spyOn(store.getState().billingAddress, 'getBillingAddress').mockReturnValue(\n            getBillingAddress(),\n        );\n        jest.spyOn(CookieStorage, 'get').mockReturnValue(getCart().id);\n        jest.spyOn(CookieStorage, 'remove').mockImplementation(jest.fn());\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(braintreeIntegrationServiceMock, 'getBraintreeFastlane').mockReturnValue({\n            identity: {\n                lookupCustomerByEmail: () => ({ customerContextId: 'customerContextId' }),\n                triggerAuthenticationFlow: () =>\n                    Promise.resolve({\n                        authenticationState: 'authenticationState',\n                        profileData: getBraintreeFastlaneProfileDataMock(),\n                    }),\n            },\n        });\n\n        jest.spyOn(Date, 'now').mockImplementation(() => mappedAddress.id);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('updateAddress', () => {\n        it('updates shipping address', async () => {\n            const address = getShippingAddress();\n            const options = {};\n            const updateAction = jest.fn();\n\n            jest.spyOn(consignmentActionCreator, 'updateAddress').mockImplementation(updateAction);\n\n            const strategy = createStrategy();\n\n            await strategy.updateAddress(address, options);\n\n            expect(updateAction).toHaveBeenCalledWith(address, options);\n        });\n    });\n\n    describe('selectOption', () => {\n        it('selects shipping option', async () => {\n            const method = getFlatRateOption();\n            const options = {};\n            const updateAction = jest.fn();\n\n            jest.spyOn(consignmentActionCreator, 'selectShippingOption').mockImplementation(\n                updateAction,\n            );\n\n            const strategy = createStrategy();\n\n            await strategy.selectOption(method.id, options);\n\n            expect(consignmentActionCreator.selectShippingOption).toHaveBeenCalledWith(\n                method.id,\n                options,\n            );\n            expect(updateAction).toHaveBeenCalledWith(method.id, options);\n        });\n    });\n\n    describe('deinitialize', () => {\n        it('deinitialize shilling strategy', async () => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(store, 'getState').mockReturnValue('storeState');\n\n            const strategy = createStrategy();\n\n            expect(await strategy.deinitialize()).toBe('storeState');\n        });\n    });\n\n    describe('initialize', () => {\n        it('throws an error if no method Id in options', async () => {\n            const strategy = createStrategy();\n            const response = strategy.initialize({});\n\n            return expect(response).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('should not run authentication flow if OTP was already shown', async () => {\n            const loadPaymentMethodMock = jest.fn();\n\n            jest.spyOn(paymentMethodActionCreator, 'loadPaymentMethod').mockImplementation(\n                loadPaymentMethodMock,\n            );\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomer',\n            ).mockReturnValue({\n                authenticationState: 'anyState',\n            });\n\n            const strategy = createStrategy();\n\n            await strategy.initialize(defaultOptions);\n\n            expect(loadPaymentMethodMock).not.toHaveBeenCalled();\n        });\n\n        it('should not run authentication flow if the OPT window was canceled/closed before', async () => {\n            const loadPaymentMethodMock = jest.fn();\n\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomer',\n            ).mockReturnValue({\n                authenticationState: BraintreeFastlaneAuthenticationState.CANCELED,\n                addresses: [],\n                instruments: [],\n            });\n\n            const strategy = createStrategy();\n\n            await strategy.initialize(defaultOptions);\n\n            expect(loadPaymentMethodMock).not.toHaveBeenCalled();\n        });\n\n        it('gets braintree fastlane instead of connect if fastlane enabled', async () => {\n            const strategy = createStrategy();\n\n            await strategy.initialize(defaultOptions);\n\n            braintreeIntegrationServiceMock.initialize();\n\n            expect(braintreeIntegrationServiceMock.getBraintreeFastlane).toHaveBeenCalled();\n        });\n\n        it('gets braintree fastlane with correct styles', async () => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethod').mockReturnValue({\n                clientToken: '123',\n                initializationData: {\n                    isAcceleratedCheckoutEnabled: true,\n                    isFastlaneEnabled: true,\n                    isFastlaneStylingEnabled: true,\n                    fastlaneStyles: {\n                        fastlaneRootSettingsBackgroundColor: 'orange',\n                        fastlaneTextCaptionSettingsColor: 'blue',\n                    },\n                },\n            });\n\n            const initOptions = {\n                methodId: BRAINTREE_AXO_METHOD_ID,\n                braintreefastlane: {\n                    styles: {\n                        root: {\n                            backgroundColorPrimary: 'red',\n                        },\n                        input: {\n                            borderRadius: '10px',\n                        },\n                    },\n                },\n            };\n\n            const strategy = createStrategy();\n\n            await strategy.initialize(initOptions);\n\n            braintreeIntegrationServiceMock.initialize();\n\n            expect(braintreeIntegrationServiceMock.getBraintreeFastlane).toHaveBeenCalledWith(\n                'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                undefined,\n                {\n                    root: {\n                        backgroundColorPrimary: 'orange',\n                    },\n                    input: {\n                        borderRadius: '10px',\n                    },\n                    text: {\n                        caption: {\n                            color: 'blue',\n                        },\n                    },\n                },\n            );\n        });\n\n        it('should not run authentication flow if PayPal session id is different', async () => {\n            const loadPaymentMethodMock = jest.fn();\n\n            jest.spyOn(paymentMethodActionCreator, 'loadPaymentMethod').mockImplementation(\n                loadPaymentMethodMock,\n            );\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomer',\n            ).mockReturnValue(undefined);\n            jest.spyOn(CookieStorage, 'get').mockReturnValue('123');\n\n            const strategy = createStrategy();\n\n            await strategy.initialize(defaultOptions);\n\n            expect(loadPaymentMethodMock).not.toHaveBeenCalled();\n        });\n\n        it('should run authentication flow', async () => {\n            const loadPaymentMethodMock = jest.fn();\n\n            jest.spyOn(paymentMethodActionCreator, 'loadPaymentMethod').mockImplementation(\n                loadPaymentMethodMock,\n            );\n\n            const strategy = createStrategy();\n\n            await strategy.initialize(defaultOptions);\n\n            expect(loadPaymentMethodMock).toHaveBeenCalledWith(BRAINTREE_AXO_METHOD_ID);\n        });\n\n        it('skip authentication flow for store members', async () => {\n            const getBraintreeFastlaneMock = jest.fn();\n\n            const storeMember = getCustomer();\n\n            jest.spyOn(braintreeIntegrationServiceMock, 'getBraintreeFastlane').mockImplementation(\n                getBraintreeFastlaneMock,\n            );\n            jest.spyOn(store.getState().customer, 'getCustomerOrThrow').mockReturnValue(\n                storeMember,\n            );\n\n            const strategy = createStrategy();\n\n            await strategy.initialize(defaultOptions);\n\n            expect(braintreeIntegrationServiceMock.getBraintreeFastlane).not.toHaveBeenCalled();\n        });\n\n        it('skip authentication if clientToken does not exist', async () => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue({\n                clientToken: '',\n            });\n\n            const getBraintreeFastlaneMock = jest.fn();\n\n            jest.spyOn(braintreeIntegrationServiceMock, 'getBraintreeFastlane').mockImplementation(\n                getBraintreeFastlaneMock,\n            );\n\n            const strategy = createStrategy();\n\n            await strategy.initialize(defaultOptions);\n\n            expect(getBraintreeFastlaneMock).not.toHaveBeenCalled();\n        });\n\n        it('skip authentication if customerContextId does not exist', async () => {\n            const lookupCustomerByEmailMock = () => ({ customerContextId: undefined });\n\n            const triggerAuthenticationFlowMock = jest.fn();\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(braintreeIntegrationServiceMock, 'getBraintreeFastlane').mockReturnValue({\n                identity: {\n                    lookupCustomerByEmail: lookupCustomerByEmailMock,\n                    triggerAuthenticationFlow: triggerAuthenticationFlowMock,\n                },\n            });\n\n            const strategy = createStrategy();\n\n            await strategy.initialize(defaultOptions);\n\n            expect(triggerAuthenticationFlowMock).not.toHaveBeenCalled();\n        });\n\n        it('update payment provider customer with canceled authentication state if the OTP was canceled', async () => {\n            const updatePaymentProviderCustomerMock = jest.fn();\n\n            const lookupCustomerByEmailMock = () => ({ customerContextId: 'asd' });\n            const triggerAuthenticationFlowMock = jest.fn().mockImplementation(() => ({\n                authenticationState: BraintreeFastlaneAuthenticationState.CANCELED,\n                profileData: {},\n            }));\n\n            jest.spyOn(braintreeIntegrationServiceMock, 'getBraintreeFastlane').mockImplementation(\n                () => ({\n                    identity: {\n                        lookupCustomerByEmail: lookupCustomerByEmailMock,\n                        triggerAuthenticationFlow: triggerAuthenticationFlowMock,\n                    },\n                }),\n            );\n\n            jest.spyOn(\n                paymentProviderCustomerActionCreator,\n                'updatePaymentProviderCustomer',\n            ).mockImplementation(updatePaymentProviderCustomerMock);\n\n            const strategy = createStrategy();\n\n            await strategy.initialize(defaultOptions);\n\n            expect(triggerAuthenticationFlowMock).toHaveBeenCalled();\n            expect(CookieStorage.remove).toHaveBeenCalledWith('bc-fastlane-sessionId');\n            expect(updatePaymentProviderCustomerMock).toHaveBeenCalledWith({\n                authenticationState: BraintreeFastlaneAuthenticationState.CANCELED,\n                addresses: [],\n                instruments: [],\n            });\n        });\n\n        it('update billing address for digital product', async () => {\n            const updatePaymentProviderCustomerMock = jest.fn();\n            const updateBillingAddressMock = jest.fn();\n            const updateShippingAddressMock = jest.fn();\n\n            jest.spyOn(\n                paymentProviderCustomerActionCreator,\n                'updatePaymentProviderCustomer',\n            ).mockImplementation(updatePaymentProviderCustomerMock);\n            jest.spyOn(billingAddressActionCreator, 'updateAddress').mockImplementation(\n                updateBillingAddressMock,\n            );\n            jest.spyOn(consignmentActionCreator, 'updateAddress').mockImplementation(\n                updateShippingAddressMock,\n            );\n            jest.spyOn(store.getState().cart, 'getCartOrThrow').mockReturnValue({\n                ...getCart(),\n                lineItems: {\n                    ...getCart().lineItems,\n                    physicalItems: [],\n                },\n            });\n\n            const strategy = createStrategy();\n\n            await strategy.initialize(defaultOptions);\n\n            expect(updatePaymentProviderCustomerMock).toHaveBeenCalledWith({\n                authenticationState: 'authenticationState',\n                addresses: [mappedAddress],\n                instruments: [mappedInstrument],\n            });\n            expect(updateBillingAddressMock).toHaveBeenCalledWith(mappedBillingAddress);\n            expect(updateShippingAddressMock).not.toHaveBeenCalled();\n        });\n\n        it('supports unified \"fastlane\" key with styles', async () => {\n            const strategy = createStrategy();\n            const paymentMethod = getPaymentMethod();\n\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethod').mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isAcceleratedCheckoutEnabled: true,\n                    isFastlaneEnabled: true,\n                    isFastlaneStylingEnabled: true,\n                    fastlaneStyles: {\n                        fastlaneRootSettingsBackgroundColor: 'orange',\n                        fastlaneTextCaptionSettingsColor: 'blue',\n                    },\n                },\n            });\n\n            const initOptions = {\n                methodId: paymentMethod.id,\n                fastlane: {\n                    styles: {\n                        root: {\n                            backgroundColorPrimary: 'red',\n                        },\n                        input: {\n                            borderRadius: '10px',\n                        },\n                    },\n                },\n            };\n\n            await strategy.initialize(initOptions);\n            braintreeIntegrationServiceMock.initialize();\n\n            expect(braintreeIntegrationServiceMock.getBraintreeFastlane).toHaveBeenCalledWith(\n                'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                undefined,\n                {\n                    root: {\n                        backgroundColorPrimary: 'orange',\n                    },\n                    input: {\n                        borderRadius: '10px',\n                    },\n                    text: {\n                        caption: {\n                            color: 'blue',\n                        },\n                    },\n                },\n            );\n        });\n    });\n\n    it('update billing and shipping address for physical items', async () => {\n        const updatePaymentProviderCustomerMock = jest.fn();\n        const updateBillingAddressMock = jest.fn();\n        const updateShippingAddressMock = jest.fn();\n\n        jest.spyOn(\n            paymentProviderCustomerActionCreator,\n            'updatePaymentProviderCustomer',\n        ).mockImplementation(updatePaymentProviderCustomerMock);\n        jest.spyOn(billingAddressActionCreator, 'updateAddress').mockImplementation(\n            updateBillingAddressMock,\n        );\n        jest.spyOn(consignmentActionCreator, 'updateAddress').mockImplementation(\n            updateShippingAddressMock,\n        );\n\n        const strategy = createStrategy();\n\n        await strategy.initialize(defaultOptions);\n\n        expect(updatePaymentProviderCustomerMock).toHaveBeenCalledWith({\n            authenticationState: 'authenticationState',\n            addresses: [mappedAddress],\n            instruments: [mappedInstrument],\n        });\n        expect(updateBillingAddressMock).toHaveBeenCalledWith(mappedBillingAddress);\n        expect(updateShippingAddressMock).toHaveBeenCalledWith(mappedAddress);\n    });\n\n    it('update payment provider customer data with different billing and shipping addresses', async () => {\n        const updatePaymentProviderCustomerMock = jest.fn();\n        const profileData = getBraintreeFastlaneProfileDataMock();\n\n        const billingAddress = {\n            ...mappedAddress,\n            firstName: 'Mrs.',\n            lastName: 'Smith',\n        };\n\n        profileData.card.paymentSource.card.billingAddress = {\n            ...profileData.card.paymentSource.card.billingAddress,\n            firstName: 'Mrs.',\n            lastName: 'Smith',\n        };\n\n        jest.spyOn(\n            paymentProviderCustomerActionCreator,\n            'updatePaymentProviderCustomer',\n        ).mockImplementation(updatePaymentProviderCustomerMock);\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(braintreeIntegrationServiceMock, 'getBraintreeFastlane').mockReturnValue({\n            identity: {\n                lookupCustomerByEmail: () => ({ customerContextId: 'customerContextId' }),\n                triggerAuthenticationFlow: () =>\n                    Promise.resolve({\n                        authenticationState: 'authenticationState',\n                        profileData,\n                    }),\n            },\n        });\n\n        const strategy = createStrategy();\n\n        await strategy.initialize(defaultOptions);\n\n        expect(updatePaymentProviderCustomerMock).toHaveBeenCalledWith({\n            authenticationState: 'authenticationState',\n            addresses: [mappedAddress, billingAddress],\n            instruments: [mappedInstrument],\n        });\n    });\n\n    describe('#handleBraintreeFastlaneShippingAddressChange', () => {\n        beforeEach(() => {\n            jest.spyOn(braintreeIntegrationServiceMock, 'getBraintreeFastlane').mockImplementation(\n                () => braintreeFastlane,\n            );\n            jest.spyOn(\n                store.getState().shippingAddress,\n                'getShippingAddressesOrThrow',\n            ).mockReturnValue([getShippingAddress()]);\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethod').mockReturnValue({\n                clientToken: '123',\n                initializationData: {\n                    isFastlaneEnabled: true,\n                },\n            });\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomer',\n            ).mockReturnValue({\n                authenticationState: BraintreeFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [],\n                instruments: [],\n            });\n        });\n\n        it('shows paypal shipping address selector', async () => {\n            const strategy = createStrategy();\n            const authenticationResultMock = getBraintreeFastlaneAuthenticationResultMock();\n            const onPayPalFastlaneAddressChange = jest.fn((showPaypalAddressSelector) => {\n                showPaypalAddressSelector();\n            });\n\n            jest.spyOn(braintreeFastlane.profile, 'showShippingAddressSelector').mockImplementation(\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                () => ({\n                    selectionChanged: true,\n                    selectedAddress: authenticationResultMock.profileData.shippingAddress,\n                }),\n            );\n\n            await strategy.initialize({\n                ...defaultOptions,\n                braintreefastlane: {\n                    onPayPalFastlaneAddressChange,\n                },\n            });\n\n            expect(braintreeFastlane.profile.showShippingAddressSelector).toHaveBeenCalled();\n        });\n\n        it('loads fastlane sdk', async () => {\n            const strategy = createStrategy();\n            const onPayPalFastlaneAddressChange = jest.fn((showPaypalAddressSelector) => {\n                showPaypalAddressSelector();\n            });\n\n            await strategy.initialize({\n                ...defaultOptions,\n                braintreefastlane: {\n                    onPayPalFastlaneAddressChange,\n                },\n            });\n\n            expect(braintreeIntegrationServiceMock.getBraintreeFastlane).toHaveBeenCalled();\n        });\n\n        it('updates provider customer data', async () => {\n            const updatePaymentProviderCustomerMock = jest.fn();\n            const strategy = createStrategy();\n            const authenticationResultMock = getBraintreeFastlaneAuthenticationResultMock();\n            const braintreeFastlane = getFastlaneMock();\n            const onPayPalFastlaneAddressChange = jest.fn((showPaypalAddressSelector) => {\n                showPaypalAddressSelector();\n            });\n\n            jest.spyOn(braintreeFastlane.profile, 'showShippingAddressSelector').mockImplementation(\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                () => ({\n                    selectionChanged: true,\n                    selectedAddress: authenticationResultMock.profileData.shippingAddress,\n                }),\n            );\n            jest.spyOn(\n                paymentProviderCustomerActionCreator,\n                'updatePaymentProviderCustomer',\n            ).mockImplementation(updatePaymentProviderCustomerMock);\n\n            await strategy.initialize({\n                ...defaultOptions,\n                braintreefastlane: {\n                    onPayPalFastlaneAddressChange,\n                },\n            });\n\n            expect(updatePaymentProviderCustomerMock).toHaveBeenCalled();\n        });\n\n        it('updates address', async () => {\n            const updatePaymentProviderCustomerMock = jest.fn();\n            const updateAction = jest.fn();\n            const strategy = createStrategy();\n            const authenticationResultMock = getBraintreeFastlaneAuthenticationResultMock();\n            const braintreeFastlane = getFastlaneMock();\n            const onPayPalFastlaneAddressChange = jest.fn((showPaypalAddressSelector) => {\n                showPaypalAddressSelector();\n            });\n\n            jest.spyOn(braintreeIntegrationServiceMock, 'getBraintreeFastlane').mockImplementation(\n                () => braintreeFastlane,\n            );\n            jest.spyOn(braintreeFastlane.profile, 'showShippingAddressSelector').mockImplementation(\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                () => ({\n                    selectionChanged: true,\n                    selectedAddress: authenticationResultMock.profileData.shippingAddress,\n                }),\n            );\n            jest.spyOn(\n                paymentProviderCustomerActionCreator,\n                'updatePaymentProviderCustomer',\n            ).mockImplementation(updatePaymentProviderCustomerMock);\n\n            jest.spyOn(consignmentActionCreator, 'updateAddress').mockImplementation(updateAction);\n\n            await strategy.initialize({\n                ...defaultOptions,\n                braintreefastlane: {\n                    onPayPalFastlaneAddressChange,\n                },\n            });\n\n            expect(consignmentActionCreator.updateAddress).toHaveBeenCalled();\n        });\n\n        it('supports unified \"fastlane\" key with onPayPalFastlaneAddressChange callback', async () => {\n            const strategy = createStrategy();\n            const onPayPalFastlaneAddressChange = jest.fn();\n\n            await strategy.initialize({\n                ...defaultOptions,\n                fastlane: {\n                    onPayPalFastlaneAddressChange,\n                },\n            });\n\n            expect(onPayPalFastlaneAddressChange).toHaveBeenCalled();\n        });\n\n        it('prioritizes unified \"fastlane\" key over provider-specific key for callbacks', async () => {\n            const strategy = createStrategy();\n            const providerSpecificCallback = jest.fn();\n            const unifiedCallback = jest.fn();\n\n            await strategy.initialize({\n                ...defaultOptions,\n                braintreefastlane: {\n                    onPayPalFastlaneAddressChange: providerSpecificCallback,\n                },\n                fastlane: {\n                    onPayPalFastlaneAddressChange: unifiedCallback,\n                },\n            });\n\n            expect(unifiedCallback).toHaveBeenCalled();\n            expect(providerSpecificCallback).not.toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/braintree/braintree-fastlane-shipping-strategy.ts",
    "content": "import { isEqual, omit } from 'lodash';\n\nimport {\n    BraintreeFastlaneAddress,\n    BraintreeFastlaneAuthenticationState,\n    BraintreeFastlaneProfileData,\n    BraintreeFastlaneStylesOption,\n    BraintreeFastlaneVaultedInstrument,\n    BraintreeInitializationData,\n    BraintreeIntegrationService,\n    getFastlaneStyles,\n    isBraintreeAcceleratedCheckoutCustomer,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nimport { AddressRequestBody } from '../../../address';\nimport { BillingAddressActionCreator } from '../../../billing';\nimport { CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n} from '../../../common/error/errors';\nimport { CustomerAddress } from '../../../customer';\nimport { Country } from '../../../geography';\nimport { PaymentMethod, PaymentMethodActionCreator } from '../../../payment';\nimport { PaymentProviderCustomerActionCreator } from '../../../payment-provider-customer';\nimport { CardInstrument } from '../../../payment/instrument';\nimport { UntrustedShippingCardVerificationType } from '../../../payment/instrument/instrument';\nimport ConsignmentActionCreator from '../../consignment-action-creator';\nimport { ShippingInitializeOptions, ShippingRequestOptions } from '../../shipping-request-options';\nimport ShippingStrategy from '../shipping-strategy';\n\nexport default class BraintreeFastlaneShippingStrategy implements ShippingStrategy {\n    constructor(\n        private _store: CheckoutStore,\n        private _billingAddressActionCreator: BillingAddressActionCreator,\n        private _consignmentActionCreator: ConsignmentActionCreator,\n        private _paymentMethodActionCreator: PaymentMethodActionCreator,\n        private _paymentProviderCustomerActionCreator: PaymentProviderCustomerActionCreator,\n        private _braintreeIntegrationService: BraintreeIntegrationService,\n    ) {}\n\n    updateAddress(\n        address: AddressRequestBody,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(this._consignmentActionCreator.updateAddress(address, options));\n    }\n\n    selectOption(\n        optionId: string,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(\n            this._consignmentActionCreator.selectShippingOption(optionId, options),\n        );\n    }\n\n    deinitialize(): Promise<InternalCheckoutSelectors> {\n        return Promise.resolve(this._store.getState());\n    }\n\n    async initialize(options: ShippingInitializeOptions): Promise<InternalCheckoutSelectors> {\n        const { methodId, braintreefastlane, fastlane } = options || {};\n        const fastlaneOptions = fastlane || braintreefastlane;\n        const { onPayPalFastlaneAddressChange } = fastlaneOptions || {};\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" argument is not provided.',\n            );\n        }\n\n        const state = this._store.getState();\n        const customer = state.customer.getCustomerOrThrow();\n\n        if (!customer.isGuest) {\n            return Promise.resolve(this._store.getState());\n        }\n\n        try {\n            if (this._shouldRunAuthenticationFlow()) {\n                const paymentMethod = state.paymentMethods.getPaymentMethod(methodId);\n                const { clientToken, isFastlaneStylingEnabled } =\n                    paymentMethod?.initializationData || {};\n\n                if (!clientToken) {\n                    await this._store.dispatch(\n                        this._paymentMethodActionCreator.loadPaymentMethod(methodId),\n                    );\n                }\n\n                const paypalFastlaneStylesSettings = isFastlaneStylingEnabled\n                    ? paymentMethod?.initializationData?.fastlaneStyles\n                    : undefined;\n\n                const fastlaneStyles = getFastlaneStyles(\n                    paypalFastlaneStylesSettings,\n                    fastlaneOptions?.styles,\n                );\n\n                await this._runAuthenticationFlowOrThrow(methodId, fastlaneStyles);\n            }\n\n            if (\n                typeof onPayPalFastlaneAddressChange === 'function' &&\n                (await this._shouldUseBraintreeFastlaneShippingComponent(methodId))\n            ) {\n                onPayPalFastlaneAddressChange(() =>\n                    this._handleBraintreeFastlaneShippingAddressChange(),\n                );\n            }\n        } catch (error) {\n            // Info: we should not throw any error here to avoid\n            // customer stuck on shipping step due to the payment provider\n            // custom flow\n        }\n\n        return Promise.resolve(this._store.getState());\n    }\n\n    private _shouldRunAuthenticationFlow(): boolean {\n        const state = this._store.getState();\n        const cartId = state.cart.getCart()?.id;\n        const paypalFastlaneSessionId = CookieStorage.get('bc-fastlane-sessionId') || '';\n        const paymentProviderCustomer = state.paymentProviderCustomer.getPaymentProviderCustomer();\n        const braintreePaymentProviderCustomer = isBraintreeAcceleratedCheckoutCustomer(\n            paymentProviderCustomer,\n        )\n            ? paymentProviderCustomer\n            : {};\n\n        if (\n            braintreePaymentProviderCustomer?.authenticationState ===\n            BraintreeFastlaneAuthenticationState.CANCELED\n        ) {\n            return false;\n        }\n\n        return (\n            !braintreePaymentProviderCustomer?.authenticationState &&\n            paypalFastlaneSessionId === cartId\n        );\n    }\n\n    private async _runAuthenticationFlowOrThrow(\n        methodId: string,\n        styles?: BraintreeFastlaneStylesOption,\n    ): Promise<void> {\n        const state = this._store.getState();\n        const cart = state.cart.getCartOrThrow();\n        const countries = state.countries.getCountries() || [];\n        const paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId);\n        const { clientToken, config } = paymentMethod;\n\n        if (!clientToken) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        this._braintreeIntegrationService.initialize(clientToken);\n\n        const braintreeFastlane = await this._braintreeIntegrationService.getBraintreeFastlane(\n            cart?.id,\n            config?.testMode,\n            styles,\n        );\n\n        const customerEmail =\n            state.customer.getCustomer()?.email || state.billingAddress.getBillingAddress()?.email;\n\n        if (!customerEmail) {\n            return;\n        }\n\n        const { lookupCustomerByEmail, triggerAuthenticationFlow } = braintreeFastlane.identity;\n\n        const { customerContextId } = await lookupCustomerByEmail(customerEmail);\n\n        if (!customerContextId) {\n            return;\n        }\n\n        const { authenticationState, profileData } = await triggerAuthenticationFlow(\n            customerContextId,\n        );\n\n        if (authenticationState === BraintreeFastlaneAuthenticationState.CANCELED) {\n            await this._store.dispatch(\n                this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({\n                    authenticationState,\n                    addresses: [],\n                    instruments: [],\n                }),\n            );\n\n            CookieStorage.remove('bc-fastlane-sessionId');\n\n            return;\n        }\n\n        const paypalBillingAddress = this._getPayPalBillingAddress(profileData);\n        const paypalShippingAddress = profileData.shippingAddress;\n        const paypalPhoneNumber = profileData.shippingAddress.phoneNumber;\n\n        const shippingAddress = this._mapPayPalToBcAddress(\n            paypalShippingAddress,\n            countries,\n            paypalPhoneNumber,\n        );\n        const billingAddress = this._mapPayPalToBcAddress(\n            paypalBillingAddress,\n            countries,\n            paypalPhoneNumber,\n        );\n\n        if (billingAddress && shippingAddress) {\n            const addresses = this._mergeShippingAndBillingAddresses(\n                shippingAddress,\n                billingAddress,\n            );\n            const instrument = this._mapPayPalToBcInstrument(methodId, profileData.card);\n            const instruments = instrument ? [instrument] : [];\n\n            await this._store.dispatch(\n                this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({\n                    authenticationState,\n                    addresses,\n                    instruments,\n                }),\n            );\n\n            if (billingAddress) {\n                await this._store.dispatch(\n                    this._billingAddressActionCreator.updateAddress({\n                        ...billingAddress,\n                        id: String(billingAddress.id),\n                    }),\n                );\n            }\n\n            if (shippingAddress && cart.lineItems.physicalItems.length > 0) {\n                await this._store.dispatch(\n                    this._consignmentActionCreator.updateAddress(shippingAddress),\n                );\n            }\n        }\n    }\n\n    private _getPayPalBillingAddress(\n        profileData: BraintreeFastlaneProfileData,\n    ): BraintreeFastlaneAddress {\n        const { name, card } = profileData;\n        const paypalBillingAddress = card.paymentSource.card.billingAddress;\n\n        return {\n            ...paypalBillingAddress,\n            firstName: paypalBillingAddress.firstName || name?.firstName,\n            lastName: paypalBillingAddress.lastName || name?.lastName,\n        };\n    }\n\n    private _getCountryNameByCountryCode(countryCode: string, countries: Country[]): string {\n        const matchedCountry = countries.find((country) => country.code === countryCode);\n\n        return matchedCountry?.name || '';\n    }\n\n    private _mapPayPalToBcAddress(\n        address: BraintreeFastlaneAddress,\n        countries: Country[],\n        phoneNumber?: string,\n        customFields?: CustomerAddress['customFields'],\n    ): CustomerAddress {\n        return {\n            id: Number(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: this._getCountryNameByCountryCode(address.countryCodeAlpha2, countries),\n            countryCode: address.countryCodeAlpha2,\n            postalCode: address.postalCode,\n            phone: phoneNumber || '',\n            customFields: customFields || [],\n        };\n    }\n\n    private _normalizeAddress(address: CustomerAddress | BraintreeFastlaneAddress) {\n        return omit(address, ['id']);\n    }\n\n    private _mergeShippingAndBillingAddresses(\n        shippingAddress: CustomerAddress,\n        billingAddress: CustomerAddress,\n    ): CustomerAddress[] {\n        const addressesAreTheSame = isEqual(\n            this._normalizeAddress(shippingAddress),\n            this._normalizeAddress(billingAddress),\n        );\n\n        return addressesAreTheSame ? [shippingAddress] : [shippingAddress, billingAddress];\n    }\n\n    private _mapPayPalToBcInstrument(\n        methodId: string,\n        instrument?: BraintreeFastlaneVaultedInstrument,\n    ): CardInstrument | undefined {\n        if (!instrument) {\n            return;\n        }\n\n        const { id, paymentSource } = instrument;\n        const { brand, expiry, lastDigits } = 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: '',\n            last4: lastDigits,\n            method: methodId,\n            provider: methodId,\n            trustedShippingAddress: false,\n            untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.CVV,\n            type: 'card',\n        };\n    }\n\n    /**\n     *\n     * Braintree Fastlane shipping address change through Fastlane external popup\n     *\n     */\n    private async _handleBraintreeFastlaneShippingAddressChange(): Promise<\n        CustomerAddress | undefined\n    > {\n        const state = this._store.getState();\n        const countries = state.countries.getCountries() || [];\n        const braintreeFastlane = await this._braintreeIntegrationService.getBraintreeFastlane();\n\n        const { selectionChanged, selectedAddress } =\n            await braintreeFastlane.profile.showShippingAddressSelector();\n\n        if (selectionChanged) {\n            const state = this._store.getState();\n            const shipping = state.shippingAddress.getShippingAddressesOrThrow();\n            const paymentProviderCustomer =\n                state.paymentProviderCustomer.getPaymentProviderCustomer();\n            const braintreeFastlaneCustomer = isBraintreeAcceleratedCheckoutCustomer(\n                paymentProviderCustomer,\n            )\n                ? paymentProviderCustomer\n                : {};\n\n            const shippingAddress = this._mapPayPalToBcAddress(\n                selectedAddress,\n                countries,\n                selectedAddress.phoneNumber,\n                shipping[0]?.customFields,\n            );\n\n            if (shippingAddress) {\n                const paymentProviderCustomerAddresses = this._filterAddresses([\n                    shippingAddress,\n                    ...(braintreeFastlaneCustomer.addresses || []),\n                ]);\n\n                await this._store.dispatch(\n                    this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({\n                        ...braintreeFastlaneCustomer,\n                        addresses: paymentProviderCustomerAddresses,\n                    }),\n                );\n\n                await this._store.dispatch(\n                    this._consignmentActionCreator.updateAddress(shippingAddress),\n                );\n\n                return shippingAddress;\n            }\n        }\n\n        return undefined;\n    }\n\n    /**\n     *\n     * This method is responsible for filtering BT Fastlane addresses if they are the same\n     * and returns an array of addresses to use them for shipping and/or billing address selections\n     * so the customer will be able to use addresses from BT Fastlane in checkout flow\n     *\n     */\n    private _filterAddresses(addresses: Array<CustomerAddress | undefined>): CustomerAddress[] {\n        return addresses.reduce(\n            (customerAddresses: CustomerAddress[], currentAddress: CustomerAddress | undefined) => {\n                if (!currentAddress) {\n                    return customerAddresses;\n                }\n\n                const sameAddressInTheArray = customerAddresses.some((customerAddress) =>\n                    this._isEqualAddresses(customerAddress, currentAddress),\n                );\n\n                return sameAddressInTheArray\n                    ? customerAddresses\n                    : [...customerAddresses, currentAddress];\n            },\n            [],\n        );\n    }\n\n    private _isEqualAddresses(\n        firstAddress: CustomerAddress,\n        secondAddress: CustomerAddress,\n    ): boolean {\n        return isEqual(this._normalizeAddress(firstAddress), this._normalizeAddress(secondAddress));\n    }\n\n    private async _shouldUseBraintreeFastlaneShippingComponent(methodId: string): Promise<boolean> {\n        const state = this._store.getState();\n        const paymentProviderCustomer = state.paymentProviderCustomer.getPaymentProviderCustomer();\n        const braintreePaymentProviderCustomer = isBraintreeAcceleratedCheckoutCustomer(\n            paymentProviderCustomer,\n        )\n            ? paymentProviderCustomer\n            : {};\n\n        // Info: to avoid loading payment method we should check for values\n        // that does not require api calls first\n        if (\n            !!braintreePaymentProviderCustomer &&\n            braintreePaymentProviderCustomer?.authenticationState !==\n                BraintreeFastlaneAuthenticationState.CANCELED\n        ) {\n            const paymentMethod = await this._getBraintreePaymentMethodOrThrow(methodId);\n\n            return !!paymentMethod?.initializationData?.isFastlaneEnabled;\n        }\n\n        return false;\n    }\n\n    private async _getBraintreePaymentMethodOrThrow(\n        methodId: string,\n    ): Promise<PaymentMethod<BraintreeInitializationData>> {\n        const state = this._store.getState();\n        const paymentMethod = state.paymentMethods.getPaymentMethod(methodId);\n\n        if (!paymentMethod) {\n            const newState = await this._store.dispatch(\n                this._paymentMethodActionCreator.loadPaymentMethod(methodId),\n            );\n\n            return newState.paymentMethods.getPaymentMethodOrThrow(methodId);\n        }\n\n        return paymentMethod;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/braintree/index.ts",
    "content": "export { default as BraintreeFastlaneInitializeOptions } from './braintree-fastlane-shipping-initialize-options';\nexport { default as BraintreeFastlaneShippingStrategy } from './braintree-fastlane-shipping-strategy';\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/default/default-shipping-strategy.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { of } from 'rxjs';\n\nimport { CheckoutRequestSender, CheckoutStore, createCheckoutStore } from '../../../checkout';\nimport ConsignmentActionCreator from '../../consignment-action-creator';\nimport { ConsignmentActionType } from '../../consignment-actions';\nimport ConsignmentRequestSender from '../../consignment-request-sender';\nimport { getFlatRateOption } from '../../internal-shipping-options.mock';\nimport { getShippingAddress } from '../../shipping-addresses.mock';\n\nimport DefaultShippingStrategy from './default-shipping-strategy';\n\ndescribe('DefaultShippingStrategy', () => {\n    let store: CheckoutStore;\n    let consignmentActionCreator: ConsignmentActionCreator;\n\n    beforeEach(() => {\n        store = createCheckoutStore();\n        consignmentActionCreator = new ConsignmentActionCreator(\n            new ConsignmentRequestSender(createRequestSender()),\n            new CheckoutRequestSender(createRequestSender()),\n        );\n    });\n\n    it('updates shipping address', async () => {\n        const strategy = new DefaultShippingStrategy(store, consignmentActionCreator);\n        const address = getShippingAddress();\n        const options = {};\n        const action = of(createAction(ConsignmentActionType.CreateConsignmentsRequested));\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(consignmentActionCreator, 'updateAddress').mockReturnValue(action);\n\n        jest.spyOn(store, 'dispatch');\n\n        const output = await strategy.updateAddress(address, options);\n\n        expect(consignmentActionCreator.updateAddress).toHaveBeenCalledWith(address, options);\n        expect(store.dispatch).toHaveBeenCalledWith(action);\n        expect(output).toEqual(store.getState());\n    });\n\n    it('selects shipping option', async () => {\n        const strategy = new DefaultShippingStrategy(store, consignmentActionCreator);\n        const method = getFlatRateOption();\n        const options = {};\n        const action = of(createAction(ConsignmentActionType.UpdateConsignmentRequested));\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(consignmentActionCreator, 'selectShippingOption').mockReturnValue(action);\n\n        jest.spyOn(store, 'dispatch');\n\n        const output = await strategy.selectOption(method.id, options);\n\n        expect(consignmentActionCreator.selectShippingOption).toHaveBeenCalledWith(\n            method.id,\n            options,\n        );\n        expect(store.dispatch).toHaveBeenCalledWith(action);\n        expect(output).toEqual(store.getState());\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/default/default-shipping-strategy.ts",
    "content": "import { AddressRequestBody } from '../../../address';\nimport { CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport ConsignmentActionCreator from '../../consignment-action-creator';\nimport { ShippingRequestOptions } from '../../shipping-request-options';\nimport ShippingStrategy from '../shipping-strategy';\n\nexport default class DefaultShippingStrategy implements ShippingStrategy {\n    constructor(\n        private _store: CheckoutStore,\n        private _consignmentActionCreator: ConsignmentActionCreator,\n    ) {}\n\n    updateAddress(\n        address: AddressRequestBody,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(this._consignmentActionCreator.updateAddress(address, options));\n    }\n\n    selectOption(\n        optionId: string,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(\n            this._consignmentActionCreator.selectShippingOption(optionId, options),\n        );\n    }\n\n    initialize(): Promise<InternalCheckoutSelectors> {\n        return Promise.resolve(this._store.getState());\n    }\n\n    deinitialize(): Promise<InternalCheckoutSelectors> {\n        return Promise.resolve(this._store.getState());\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/default/index.ts",
    "content": "export { default as DefaultShippingStrategy } from './default-shipping-strategy';\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/fastlane-shipping-initialize-options.ts",
    "content": "import { PayPalFastlaneStylesOption } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport { BraintreeFastlaneStylesOption } from '@bigcommerce/checkout-sdk/braintree-utils';\nimport { CustomerAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * A union type that covers all possible Fastlane styling options from different providers\n */\nexport type FastlaneStylesOption = PayPalFastlaneStylesOption | BraintreeFastlaneStylesOption;\n\n/**\n * A set of options that are required to initialize the shipping step of\n * checkout in order to support Fastlane (PayPal Commerce, BigCommerce Payments, or Braintree).\n *\n * This is a unified interface that can be used across all Fastlane implementations\n * to simplify initialization and avoid provider-specific checks.\n */\nexport default interface FastlaneShippingInitializeOptions {\n    /**\n     * Styling options for customizing Fastlane components\n     *\n     * Note: the styles for all Fastlane strategies should be the same,\n     * because they will be provided to the Fastlane library only for the first strategy initialization\n     * no matter what strategy was initialized first\n     */\n    styles?: FastlaneStylesOption;\n\n    /**\n     * A callback that shows the Fastlane popup with customer addresses\n     * when triggered\n     */\n    onPayPalFastlaneAddressChange?: (\n        showFastlaneAddressSelector: () => Promise<CustomerAddress | undefined>,\n    ) => void;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/index.ts",
    "content": "export { default as FastlaneShippingInitializeOptions } from './fastlane-shipping-initialize-options';\nexport { default as ShippingStrategy } from './shipping-strategy';\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/paypal-commerce/index.ts",
    "content": "export { default as PayPalCommerceFastlaneShippingInitializeOptions } from './paypal-commerce-fastlane-shipping-initialization-options';\nexport { default as PayPalCommerceFastlaneShippingStrategy } from './paypal-commerce-fastlane-shipping-strategy';\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/paypal-commerce/paypal-commerce-fastlane-shipping-initialization-options.ts",
    "content": "import { CustomerAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PayPalFastlaneStylesOption } from '@bigcommerce/checkout-sdk/paypal-utils';\n\n/**\n * A set of options that are required to initialize the shipping step of\n * checkout in order to support PayPal Commerce Fastlane.\n */\nexport default interface PayPalCommerceFastlaneShippingInitializeOptions {\n    /**\n     * Is a stylisation options for customizing PayPal Fastlane components\n     *\n     * Note: the styles for all PayPal Commerce Fastlane strategies should be the same,\n     * because they will be provided to PayPal library only for the first strategy initialization\n     * no matter what strategy was initialised first\n     */\n    styles?: PayPalFastlaneStylesOption;\n\n    /**\n     * Is a callback that shows PayPal Fastlane popup with customer addresses\n     * when get triggered\n     */\n    onPayPalFastlaneAddressChange?: (\n        showPayPalFastlaneAddressSelector: () => Promise<CustomerAddress | undefined>,\n    ) => void;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/paypal-commerce/paypal-commerce-fastlane-shipping-strategy.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    Cart,\n    Customer,\n    StoreConfig,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getConfig,\n    getCustomer,\n    getShippingAddress,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    createPayPalFastlaneUtils,\n    createPayPalSdkScriptLoader,\n    getPayPalAcceleratedCheckoutPaymentMethod,\n    getPayPalFastlane,\n    getPayPalFastlaneAuthenticationResultMock,\n    getPayPalFastlaneSdk,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneSdk,\n    PayPalFastlaneUtils,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport { BillingAddress, BillingAddressActionCreator } from '../../../billing';\nimport BillingAddressRequestSender from '../../../billing/billing-address-request-sender';\nimport { CheckoutRequestSender, CheckoutStore, createCheckoutStore } from '../../../checkout';\nimport { InvalidArgumentError } from '../../../common/error/errors';\nimport {\n    B2BCompanyPaymentMethodRequestSender,\n    PaymentMethod,\n    PaymentMethodActionCreator,\n    PaymentMethodRequestSender,\n} from '../../../payment';\nimport { PaymentProviderCustomerActionCreator } from '../../../payment-provider-customer';\nimport { SubscriptionsActionCreator, SubscriptionsRequestSender } from '../../../subscription';\nimport ConsignmentActionCreator from '../../consignment-action-creator';\nimport ConsignmentRequestSender from '../../consignment-request-sender';\nimport { getFlatRateOption } from '../../internal-shipping-options.mock';\n\nimport PayPalCommerceFastlaneShippingStrategy from './paypal-commerce-fastlane-shipping-strategy';\n\ndescribe('PayPalCommerceFastlaneShippingStrategy', () => {\n    let billingAddressActionCreator: BillingAddressActionCreator;\n    let billingAddress: BillingAddress;\n    let cart: Cart;\n    let consignmentActionCreator: ConsignmentActionCreator;\n    let customer: Customer;\n    let paymentMethodActionCreator: PaymentMethodActionCreator;\n    let paymentMethod: PaymentMethod;\n    let paymentProviderCustomerActionCreator: PaymentProviderCustomerActionCreator;\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let paypalCommerceSdkScriptLoader: PayPalSdkScriptLoader;\n    let paypalCommerceFastlaneUtils: PayPalFastlaneUtils;\n    let store: CheckoutStore;\n    let storeConfig: StoreConfig;\n    let strategy: PayPalCommerceFastlaneShippingStrategy;\n\n    const methodId = 'paypalcommerceacceleratedcheckout';\n    const initializationOptions = { methodId };\n    const authenticationResultMock = getPayPalFastlaneAuthenticationResultMock();\n    const customerContextId = 'asd123';\n    const paypalFastlane = getPayPalFastlane();\n    const shippingAddresses = [getShippingAddress()];\n\n    const requestSender = createRequestSender();\n\n    const bcAddressMock = {\n        id: 1,\n        address1: 'addressLine1',\n        address2: 'addressLine2',\n        city: 'addressCity',\n        company: 'BigCommerce',\n        country: 'US',\n        countryCode: 'US',\n        customFields: [],\n        firstName: 'John',\n        lastName: 'Doe',\n        phone: '333333333333',\n        postalCode: '03004',\n        stateOrProvince: 'addressState',\n        stateOrProvinceCode: 'addressState',\n        type: 'residential',\n    };\n\n    const bcInstrumentMock = {\n        bigpayToken: 'nonce/token',\n        brand: 'Visa',\n        defaultInstrument: false,\n        expiryMonth: '12',\n        expiryYear: '2030',\n        iin: '',\n        last4: '1111',\n        method: 'paypalcommerceacceleratedcheckout',\n        provider: 'paypalcommerceacceleratedcheckout',\n        trustedShippingAddress: false,\n        type: 'card' as const,\n        untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.CVV,\n    };\n\n    beforeEach(() => {\n        billingAddress = getBillingAddress();\n        cart = getCart();\n        customer = { ...getCustomer(), isGuest: true };\n        storeConfig = getConfig().storeConfig;\n        paymentMethod = getPayPalAcceleratedCheckoutPaymentMethod();\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n\n        store = createCheckoutStore();\n        billingAddressActionCreator = new BillingAddressActionCreator(\n            new BillingAddressRequestSender(requestSender),\n            new SubscriptionsActionCreator(new SubscriptionsRequestSender(requestSender)),\n        );\n        consignmentActionCreator = new ConsignmentActionCreator(\n            new ConsignmentRequestSender(requestSender),\n            new CheckoutRequestSender(requestSender),\n        );\n        paymentMethodActionCreator = new PaymentMethodActionCreator(\n            new PaymentMethodRequestSender(requestSender),\n            new B2BCompanyPaymentMethodRequestSender(requestSender),\n        );\n        paymentProviderCustomerActionCreator = new PaymentProviderCustomerActionCreator();\n        paypalCommerceSdkScriptLoader = createPayPalSdkScriptLoader();\n        paypalCommerceFastlaneUtils = createPayPalFastlaneUtils();\n\n        strategy = new PayPalCommerceFastlaneShippingStrategy(\n            store,\n            billingAddressActionCreator,\n            consignmentActionCreator,\n            paymentMethodActionCreator,\n            paymentProviderCustomerActionCreator,\n            paypalCommerceSdkScriptLoader,\n            paypalCommerceFastlaneUtils,\n        );\n\n        jest.spyOn(store.getState().cart, 'getCartOrThrow').mockReturnValue(cart);\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(store.getState().config, 'getStoreConfigOrThrow').mockReturnValue(storeConfig);\n        jest.spyOn(store.getState().customer, 'getCustomerOrThrow').mockReturnValue(customer);\n        jest.spyOn(store.getState().customer, 'getCustomer').mockReturnValue(customer);\n        jest.spyOn(store.getState().billingAddress, 'getBillingAddress').mockReturnValue(\n            billingAddress,\n        );\n        jest.spyOn(\n            store.getState().paymentProviderCustomer,\n            'getPaymentProviderCustomerOrThrow',\n        ).mockReturnValue({});\n        jest.spyOn(store.getState().paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(store.getState().shippingAddress, 'getShippingAddressesOrThrow').mockReturnValue(\n            shippingAddresses,\n        );\n\n        jest.spyOn(billingAddressActionCreator, 'updateAddress').mockImplementation(() =>\n            jest.fn(),\n        );\n        jest.spyOn(consignmentActionCreator, 'updateAddress').mockImplementation(() => jest.fn());\n        jest.spyOn(consignmentActionCreator, 'selectShippingOption').mockImplementation(() =>\n            jest.fn(),\n        );\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(paymentMethodActionCreator, 'loadPaymentMethod').mockReturnValue(paymentMethod);\n\n        jest.spyOn(paypalCommerceSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            () => paypalFastlaneSdk,\n        );\n        jest.spyOn(paypalCommerceFastlaneUtils, 'initializePayPalFastlane').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paypalCommerceFastlaneUtils, 'getPayPalFastlaneOrThrow').mockImplementation(\n            () => paypalFastlane,\n        );\n        jest.spyOn(paypalCommerceFastlaneUtils, 'getStorageSessionId').mockReturnValue(cart.id);\n        jest.spyOn(paypalCommerceFastlaneUtils, 'updateStorageSessionId').mockImplementation(() =>\n            jest.fn(),\n        );\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(paypalCommerceFastlaneUtils, 'lookupCustomerOrThrow').mockImplementation(() => ({\n            customerContextId,\n        }));\n\n        jest.spyOn(\n            paypalCommerceFastlaneUtils,\n            'triggerAuthenticationFlowOrThrow',\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n        ).mockImplementation(() => authenticationResultMock);\n        jest.spyOn(\n            paypalCommerceFastlaneUtils,\n            'mapPayPalFastlaneProfileToBcCustomerData',\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n        ).mockImplementation(() => ({\n            authenticationState: authenticationResultMock.authenticationState,\n            addresses: [bcAddressMock],\n            billingAddress: bcAddressMock,\n            shippingAddress: bcAddressMock,\n            instruments: [bcInstrumentMock],\n        }));\n        jest.spyOn(paypalCommerceFastlaneUtils, 'mapPayPalToBcAddress').mockImplementation(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            () => bcAddressMock,\n        );\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(paypalCommerceFastlaneUtils, 'filterAddresses').mockImplementation(() => [\n            bcAddressMock,\n        ]);\n\n        jest.spyOn(\n            paymentProviderCustomerActionCreator,\n            'updatePaymentProviderCustomer',\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n        ).mockImplementation(() => jest.fn());\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#updateAddress()', () => {\n        it('updates shipping address', async () => {\n            const address = getShippingAddress();\n            const options = {};\n\n            await strategy.updateAddress(address, options);\n\n            expect(consignmentActionCreator.updateAddress).toHaveBeenCalledWith(address, options);\n        });\n    });\n\n    describe('selectOption', () => {\n        it('selects shipping option', async () => {\n            const method = getFlatRateOption();\n            const options = {};\n\n            await strategy.selectOption(method.id, options);\n\n            expect(consignmentActionCreator.selectShippingOption).toHaveBeenCalledWith(\n                method.id,\n                options,\n            );\n        });\n    });\n\n    describe('deinitialize', () => {\n        it('deinitialize shipping strategy', async () => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(store, 'getState').mockReturnValue('storeState');\n\n            expect(await strategy.deinitialize()).toBe('storeState');\n        });\n    });\n\n    describe('initialize', () => {\n        it('throws an error if method id is not provided', async () => {\n            try {\n                await strategy.initialize({});\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not trigger with Fastlane flow for store members', async () => {\n            const guestCustomer = {\n                ...customer,\n                isGuest: false,\n            };\n\n            jest.spyOn(store.getState().customer, 'getCustomerOrThrow').mockReturnValue(\n                guestCustomer,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).not.toHaveBeenCalled();\n            expect(paypalCommerceFastlaneUtils.initializePayPalFastlane).not.toHaveBeenCalled();\n        });\n\n        it('gets paypal fastlane with correct styles', async () => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethod').mockReturnValue({\n                clientToken: '123',\n                initializationData: {\n                    isFastlaneEnabled: true,\n                    isFastlaneStylingEnabled: true,\n                    isAcceleratedCheckoutEnabled: true,\n                    fastlaneStyles: {\n                        fastlaneRootSettingsBackgroundColor: 'orange',\n                        fastlaneTextCaptionSettingsColor: 'blue',\n                    },\n                },\n            });\n\n            const initOptions = {\n                methodId: 'paypalcommerceacceleratedcheckout',\n                paypalcommercefastlane: {\n                    styles: {\n                        root: {\n                            backgroundColorPrimary: 'red',\n                        },\n                        input: {\n                            borderRadius: '10px',\n                        },\n                    },\n                },\n            };\n\n            await strategy.initialize(initOptions);\n\n            expect(paypalCommerceFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n                {\n                    root: {\n                        backgroundColorPrimary: 'orange',\n                    },\n                    input: {\n                        borderRadius: '10px',\n                    },\n                    text: {\n                        caption: {\n                            color: 'blue',\n                        },\n                    },\n                },\n            );\n        });\n\n        it('does not load payment method if accelerated checkout feature is disabled', async () => {\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({});\n\n            jest.spyOn(paypalCommerceFastlaneUtils, 'getStorageSessionId').mockReturnValue(\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                undefined,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).not.toHaveBeenCalled();\n        });\n\n        it('initializes paypal sdk and authenticates user with paypal fastlane', async () => {\n            paymentMethod.initializationData.isFastlaneEnabled = true;\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n            expect(paypalCommerceSdkScriptLoader.getPayPalFastlaneSdk).toHaveBeenCalledWith(\n                paymentMethod,\n                cart.currency.code,\n                cart.id,\n                cart.locale,\n            );\n            expect(paypalCommerceFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                paymentMethod.initializationData.isDeveloperModeApplicable,\n                {},\n            );\n            expect(paypalCommerceFastlaneUtils.lookupCustomerOrThrow).toHaveBeenCalledWith(\n                customer.email,\n            );\n            expect(\n                paypalCommerceFastlaneUtils.triggerAuthenticationFlowOrThrow,\n            ).toHaveBeenCalledWith(customerContextId);\n            expect(\n                paypalCommerceFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData,\n            ).toHaveBeenCalledWith(methodId, authenticationResultMock);\n            expect(\n                paymentProviderCustomerActionCreator.updatePaymentProviderCustomer,\n            ).toHaveBeenCalledWith({\n                authenticationState: authenticationResultMock.authenticationState,\n                addresses: [bcAddressMock],\n                instruments: [bcInstrumentMock],\n            });\n            expect(paypalCommerceFastlaneUtils.updateStorageSessionId).toHaveBeenCalledWith(\n                cart.id,\n            );\n            expect(billingAddressActionCreator.updateAddress).toHaveBeenCalledWith({\n                ...bcAddressMock,\n                id: String(bcAddressMock.id),\n            });\n        });\n\n        it('does not authenticate user if the authentication was canceled before', async () => {\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.CANCELED,\n            });\n\n            jest.spyOn(paypalCommerceFastlaneUtils, 'getStorageSessionId').mockReturnValue(cart.id);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).not.toHaveBeenCalled();\n            expect(paypalCommerceFastlaneUtils.initializePayPalFastlane).not.toHaveBeenCalled();\n            expect(paypalCommerceFastlaneUtils.lookupCustomerOrThrow).not.toHaveBeenCalled();\n        });\n\n        it('does not authenticate user if it was authenticated before', async () => {\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                addresses: [bcAddressMock],\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                instruments: [bcInstrumentMock],\n            });\n\n            jest.spyOn(paypalCommerceFastlaneUtils, 'getStorageSessionId').mockReturnValue(cart.id);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceFastlaneUtils.lookupCustomerOrThrow).not.toHaveBeenCalled();\n        });\n\n        it('does not provide PayPal Shipping selector method if onPayPalFastlaneAddressChange is not a function', async () => {\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                addresses: [bcAddressMock],\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                instruments: [bcInstrumentMock],\n            });\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercefastlane: {\n                    onPayPalFastlaneAddressChange: undefined,\n                },\n            });\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).not.toHaveBeenCalled();\n            expect(paypalCommerceFastlaneUtils.initializePayPalFastlane).not.toHaveBeenCalled();\n        });\n\n        it('initializes paypal sdk and provides PayPal Shipping selector method to onPayPalFastlaneAddressChange callback', async () => {\n            const onPayPalFastlaneAddressChange = jest.fn();\n\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                addresses: [bcAddressMock],\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                instruments: [bcInstrumentMock],\n            });\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercefastlane: {\n                    onPayPalFastlaneAddressChange,\n                },\n            });\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).toHaveBeenCalled();\n            expect(paypalCommerceFastlaneUtils.initializePayPalFastlane).toHaveBeenCalled();\n            expect(onPayPalFastlaneAddressChange).toHaveBeenCalled();\n        });\n\n        it('updates shipping address with PayPal Shipping selector', async () => {\n            const onPayPalFastlaneAddressChange = jest.fn((showPayPalFastlaneAddressSelector) => {\n                showPayPalFastlaneAddressSelector();\n            });\n\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                addresses: [bcAddressMock],\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                instruments: [bcInstrumentMock],\n            });\n\n            jest.spyOn(paypalFastlane.profile, 'showShippingAddressSelector').mockImplementation(\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                () => ({\n                    selectionChanged: true,\n                    selectedAddress: authenticationResultMock.profileData.shippingAddress,\n                }),\n            );\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercefastlane: {\n                    onPayPalFastlaneAddressChange,\n                },\n            });\n\n            expect(paypalFastlane.profile.showShippingAddressSelector).toHaveBeenCalled();\n            expect(paypalCommerceFastlaneUtils.mapPayPalToBcAddress).toHaveBeenCalledWith(\n                authenticationResultMock.profileData.shippingAddress.address,\n                authenticationResultMock.profileData.shippingAddress.name,\n                authenticationResultMock.profileData.shippingAddress.phoneNumber,\n                shippingAddresses[0].customFields,\n            );\n            expect(paypalCommerceFastlaneUtils.filterAddresses).toHaveBeenCalledWith([\n                bcAddressMock,\n            ]);\n            expect(\n                paymentProviderCustomerActionCreator.updatePaymentProviderCustomer,\n            ).toHaveBeenCalledWith({\n                addresses: [bcAddressMock],\n            });\n            expect(consignmentActionCreator.updateAddress).toHaveBeenCalledWith(bcAddressMock);\n        });\n\n        it('supports unified \"fastlane\" key with styles', async () => {\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethod').mockReturnValue({\n                ...paymentMethod,\n                clientToken: '123',\n                initializationData: {\n                    isFastlaneEnabled: true,\n                    isFastlaneStylingEnabled: true,\n                    isAcceleratedCheckoutEnabled: true,\n                    fastlaneStyles: {\n                        fastlaneRootSettingsBackgroundColor: 'orange',\n                        fastlaneTextCaptionSettingsColor: 'blue',\n                    },\n                },\n            });\n\n            const initOptions = {\n                methodId: 'paypalcommerceacceleratedcheckout',\n                fastlane: {\n                    styles: {\n                        root: {\n                            backgroundColorPrimary: 'red',\n                        },\n                        input: {\n                            borderRadius: '10px',\n                        },\n                    },\n                },\n            };\n\n            await strategy.initialize(initOptions);\n\n            expect(paypalCommerceFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n                {\n                    root: {\n                        backgroundColorPrimary: 'orange',\n                    },\n                    input: {\n                        borderRadius: '10px',\n                    },\n                    text: {\n                        caption: {\n                            color: 'blue',\n                        },\n                    },\n                },\n            );\n        });\n\n        it('supports unified \"fastlane\" key with onPayPalFastlaneAddressChange callback', async () => {\n            const onPayPalFastlaneAddressChange = jest.fn();\n\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [bcAddressMock],\n                instruments: [bcInstrumentMock],\n            });\n\n            await strategy.initialize({\n                ...initializationOptions,\n                fastlane: {\n                    onPayPalFastlaneAddressChange,\n                },\n            });\n\n            expect(paymentMethodActionCreator.loadPaymentMethod).toHaveBeenCalled();\n            expect(paypalCommerceFastlaneUtils.initializePayPalFastlane).toHaveBeenCalled();\n            expect(onPayPalFastlaneAddressChange).toHaveBeenCalled();\n        });\n\n        it('prioritizes unified \"fastlane\" key over provider-specific key', async () => {\n            const providerSpecificCallback = jest.fn();\n            const unifiedCallback = jest.fn();\n\n            jest.spyOn(\n                store.getState().paymentProviderCustomer,\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [bcAddressMock],\n                instruments: [bcInstrumentMock],\n            });\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercefastlane: {\n                    onPayPalFastlaneAddressChange: providerSpecificCallback,\n                },\n                fastlane: {\n                    onPayPalFastlaneAddressChange: unifiedCallback,\n                },\n            });\n\n            expect(unifiedCallback).toHaveBeenCalled();\n            expect(providerSpecificCallback).not.toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/paypal-commerce/paypal-commerce-fastlane-shipping-strategy.ts",
    "content": "import { CustomerAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getFastlaneStyles,\n    isPayPalCommerceAcceleratedCheckoutCustomer,\n    isPayPalFastlaneCustomer,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneStylesOption,\n    PayPalFastlaneUtils,\n    PayPalInitializationData,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport { AddressRequestBody } from '../../../address';\nimport { BillingAddressActionCreator } from '../../../billing';\nimport { CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport { InvalidArgumentError } from '../../../common/error/errors';\nimport { PaymentMethod, PaymentMethodActionCreator } from '../../../payment';\nimport { PaymentProviderCustomerActionCreator } from '../../../payment-provider-customer';\nimport ConsignmentActionCreator from '../../consignment-action-creator';\nimport { ShippingInitializeOptions, ShippingRequestOptions } from '../../shipping-request-options';\nimport ShippingStrategy from '../shipping-strategy';\n\nexport default class PayPalCommerceFastlaneShippingStrategy implements ShippingStrategy {\n    constructor(\n        private _store: CheckoutStore,\n        private _billingAddressActionCreator: BillingAddressActionCreator,\n        private _consignmentActionCreator: ConsignmentActionCreator,\n        private _paymentMethodActionCreator: PaymentMethodActionCreator,\n        private _paymentProviderCustomerActionCreator: PaymentProviderCustomerActionCreator,\n        private _paypalSdkScriptLoader: PayPalSdkScriptLoader,\n        private _paypalCommerceFastlaneUtils: PayPalFastlaneUtils,\n    ) {}\n\n    updateAddress(\n        address: AddressRequestBody,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(this._consignmentActionCreator.updateAddress(address, options));\n    }\n\n    selectOption(\n        optionId: string,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(\n            this._consignmentActionCreator.selectShippingOption(optionId, options),\n        );\n    }\n\n    deinitialize(): Promise<InternalCheckoutSelectors> {\n        return Promise.resolve(this._store.getState());\n    }\n\n    async initialize(options: ShippingInitializeOptions): Promise<InternalCheckoutSelectors> {\n        const { methodId, paypalcommercefastlane, fastlane } = options || {};\n        const fastlaneOptions = fastlane || paypalcommercefastlane;\n        const { onPayPalFastlaneAddressChange, styles } = fastlaneOptions || {};\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" argument is not provided.',\n            );\n        }\n\n        const state = this._store.getState();\n        const customer = state.customer.getCustomerOrThrow();\n\n        if (!customer?.isGuest) {\n            return Promise.resolve(this._store.getState());\n        }\n\n        try {\n            if (this._shouldAuthenticateUserWithFastlane()) {\n                await this._initializePayPalSdk(methodId, styles);\n                await this._authenticateUserWithFastlaneOtp(methodId);\n            }\n\n            if (\n                typeof onPayPalFastlaneAddressChange === 'function' &&\n                this._shouldUsePayPalFastlaneShippingComponent()\n            ) {\n                await this._initializePayPalSdk(methodId, styles);\n                onPayPalFastlaneAddressChange(() => this._handlePayPalShippingAddressChange());\n            }\n        } catch (error) {\n            // Info: we should not throw any error here to avoid customer stuck on\n            // shipping step due to the payment provider custom flow\n        }\n\n        return Promise.resolve(this._store.getState());\n    }\n\n    private async _getPayPalPaymentMethodOrThrow(\n        methodId: string,\n    ): Promise<PaymentMethod<PayPalInitializationData>> {\n        const state = this._store.getState();\n        const paymentMethod = state.paymentMethods.getPaymentMethod(methodId);\n\n        if (!paymentMethod) {\n            const newState = await this._store.dispatch(\n                this._paymentMethodActionCreator.loadPaymentMethod(methodId),\n            );\n\n            return newState.paymentMethods.getPaymentMethodOrThrow(methodId);\n        }\n\n        return paymentMethod;\n    }\n\n    private _getPayPalCustomerAuthenticationState(): string | undefined {\n        const state = this._store.getState();\n        const paymentProviderCustomer =\n            state.paymentProviderCustomer.getPaymentProviderCustomerOrThrow();\n        const paypalCommercePaymentProviderCustomer = isPayPalCommerceAcceleratedCheckoutCustomer(\n            paymentProviderCustomer,\n        )\n            ? paymentProviderCustomer\n            : {};\n\n        return paypalCommercePaymentProviderCustomer.authenticationState;\n    }\n\n    private _shouldAuthenticateUserWithFastlane(): boolean {\n        const state = this._store.getState();\n        const cart = state.cart.getCartOrThrow();\n        const paypalConnectSessionId = this._paypalCommerceFastlaneUtils.getStorageSessionId();\n\n        const customerAuthenticationState = this._getPayPalCustomerAuthenticationState();\n\n        return !customerAuthenticationState && paypalConnectSessionId === cart.id;\n    }\n\n    private _shouldUsePayPalFastlaneShippingComponent(): boolean {\n        const customerAuthenticationState = this._getPayPalCustomerAuthenticationState();\n\n        return (\n            !!customerAuthenticationState &&\n            customerAuthenticationState !== PayPalFastlaneAuthenticationState.CANCELED\n        );\n    }\n\n    private async _initializePayPalSdk(\n        methodId: string,\n        styles?: PayPalFastlaneStylesOption,\n    ): Promise<void> {\n        const state = this._store.getState();\n        const cart = state.cart.getCartOrThrow();\n\n        const paymentMethod = await this._getPayPalPaymentMethodOrThrow(methodId);\n        const { isDeveloperModeApplicable, isFastlaneStylingEnabled } =\n            paymentMethod?.initializationData || {};\n        const isTestModeEnabled = !!isDeveloperModeApplicable;\n\n        const fastlaneStyles = getFastlaneStyles(\n            isFastlaneStylingEnabled ? paymentMethod?.initializationData?.fastlaneStyles : {},\n            styles,\n        );\n\n        const paypalFastlaneSdk = await this._paypalSdkScriptLoader.getPayPalFastlaneSdk(\n            paymentMethod,\n            cart.currency.code,\n            cart.id,\n            cart.locale,\n        );\n\n        await this._paypalCommerceFastlaneUtils.initializePayPalFastlane(\n            paypalFastlaneSdk,\n            isTestModeEnabled,\n            fastlaneStyles,\n        );\n    }\n\n    private async _authenticateUserWithFastlaneOtp(methodId: string): Promise<void> {\n        const state = this._store.getState();\n        const cart = state.cart.getCartOrThrow();\n        const customerEmail = state.customer.getCustomer()?.email;\n        const billingAddressEmail = state.billingAddress.getBillingAddress()?.email;\n        const email = customerEmail || billingAddressEmail || '';\n\n        const { customerContextId } = await this._paypalCommerceFastlaneUtils.lookupCustomerOrThrow(\n            email,\n        );\n\n        const authenticationResult =\n            await this._paypalCommerceFastlaneUtils.triggerAuthenticationFlowOrThrow(\n                customerContextId,\n            );\n\n        const { authenticationState, addresses, billingAddress, shippingAddress, instruments } =\n            this._paypalCommerceFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(\n                methodId,\n                authenticationResult,\n            );\n\n        await this._store.dispatch(\n            this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({\n                authenticationState,\n                addresses,\n                instruments,\n            }),\n        );\n\n        const isAuthenticationFlowCanceled =\n            authenticationResult.authenticationState === PayPalFastlaneAuthenticationState.CANCELED;\n\n        if (isAuthenticationFlowCanceled) {\n            this._paypalCommerceFastlaneUtils.removeStorageSessionId();\n        } else {\n            this._paypalCommerceFastlaneUtils.updateStorageSessionId(cart.id);\n        }\n\n        if (billingAddress) {\n            await this._store.dispatch(\n                this._billingAddressActionCreator.updateAddress({\n                    ...billingAddress,\n                    id: String(billingAddress.id),\n                }),\n            );\n        }\n\n        if (shippingAddress && cart.lineItems.physicalItems.length > 0) {\n            await this._store.dispatch(\n                this._consignmentActionCreator.updateAddress(shippingAddress),\n            );\n        }\n    }\n\n    /**\n     *\n     * PayPal Fastlane shipping address change through Fastlane external popup\n     *\n     */\n    private async _handlePayPalShippingAddressChange(): Promise<CustomerAddress | undefined> {\n        const paypalFastlaneSdk = this._paypalCommerceFastlaneUtils.getPayPalFastlaneOrThrow();\n\n        const { selectionChanged, selectedAddress } =\n            await paypalFastlaneSdk.profile.showShippingAddressSelector();\n\n        if (selectionChanged) {\n            const state = this._store.getState();\n            const shipping = state.shippingAddress.getShippingAddressesOrThrow();\n            const paymentProviderCustomer =\n                state.paymentProviderCustomer.getPaymentProviderCustomer();\n            const paypalFastlaneCustomer = isPayPalFastlaneCustomer(paymentProviderCustomer)\n                ? paymentProviderCustomer\n                : {};\n\n            const shippingAddress = this._paypalCommerceFastlaneUtils.mapPayPalToBcAddress(\n                selectedAddress.address,\n                selectedAddress.name,\n                selectedAddress.phoneNumber,\n                shipping[0]?.customFields,\n            );\n\n            const paymentProviderCustomerAddresses =\n                this._paypalCommerceFastlaneUtils.filterAddresses([\n                    shippingAddress,\n                    ...(paypalFastlaneCustomer.addresses || []),\n                ]);\n\n            await this._store.dispatch(\n                this._paymentProviderCustomerActionCreator.updatePaymentProviderCustomer({\n                    ...paypalFastlaneCustomer,\n                    addresses: paymentProviderCustomerAddresses,\n                }),\n            );\n\n            await this._store.dispatch(\n                this._consignmentActionCreator.updateAddress(shippingAddress),\n            );\n\n            return shippingAddress;\n        }\n\n        return undefined;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/shipping-strategy.spec.ts",
    "content": "import { CheckoutStore, createCheckoutStore, InternalCheckoutSelectors } from '../../checkout';\n\nimport ShippingStrategy from './shipping-strategy';\n\ndescribe('ShippingStrategy', () => {\n    let store: CheckoutStore;\n\n    class FoobarShippingStrategy implements ShippingStrategy {\n        constructor(private _store: CheckoutStore) {}\n\n        updateAddress(): Promise<InternalCheckoutSelectors> {\n            return Promise.resolve(this._store.getState());\n        }\n\n        selectOption(): Promise<InternalCheckoutSelectors> {\n            return Promise.resolve(this._store.getState());\n        }\n\n        initialize(): Promise<InternalCheckoutSelectors> {\n            return Promise.resolve(this._store.getState());\n        }\n\n        deinitialize(): Promise<InternalCheckoutSelectors> {\n            return Promise.resolve(this._store.getState());\n        }\n    }\n\n    beforeEach(() => {\n        store = createCheckoutStore();\n    });\n\n    it('returns checkout state after initialization', async () => {\n        const strategy = new FoobarShippingStrategy(store);\n        const state = await strategy.initialize();\n\n        expect(state).toEqual(store.getState());\n    });\n\n    it('returns checkout state after deinitialization', async () => {\n        const strategy = new FoobarShippingStrategy(store);\n        const state = await strategy.deinitialize();\n\n        expect(state).toEqual(store.getState());\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/shipping-strategy.ts",
    "content": "import { AddressRequestBody } from '../../address';\nimport { InternalCheckoutSelectors } from '../../checkout';\nimport { ShippingRequestOptions } from '../shipping-request-options';\n\nexport default interface ShippingStrategy {\n    updateAddress(\n        address: Partial<AddressRequestBody>,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors>;\n\n    selectOption(\n        optionId: string,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors>;\n\n    initialize(options?: ShippingRequestOptions): Promise<InternalCheckoutSelectors>;\n\n    deinitialize(options?: ShippingRequestOptions): Promise<InternalCheckoutSelectors>;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/stripe-upe/index.ts",
    "content": "export { default as StripeUPEShippingStrategy } from './stripe-upe-shipping-strategy';\nexport { default as StripeUPEShippingInitializeOptions } from './stripe-upe-shipping-initialize-options';\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/stripe-upe/stripe-upe-shipping-initialize-options.ts",
    "content": "import { StripeEventType } from '@bigcommerce/checkout-sdk/stripe-utils';\n\n/**\n * A set of options that are required to initialize the shipping step of\n * checkout in order to support StripeUpe.\n *\n * When StripeUpe is initialized, an iframe will be inserted into the DOM. The\n * iframe has a list of shipping addresses for the customer to choose from.\n */\nexport default interface StripeUPEShippingInitializeOptions {\n    /**\n     * Available countries configured on BC shipping setup.\n     */\n    availableCountries: string;\n\n    /**\n     * The ID of a container which the stripe iframe should be inserted.\n     */\n    container?: string;\n\n    /**\n     * The identifier of the payment method.\n     */\n    methodId: string;\n\n    /**\n     * The identifier of the payment provider providing the payment method. This\n     * option is only required if the provider offers multiple payment options.\n     * i.e.: Stripeupe and Klarna.\n     */\n    gatewayId: string;\n\n    /**\n     * A callback that gets called whenever the Stripe Link Shipping Element's object is completed.\n     */\n    onChangeShipping(shipping: StripeEventType): void;\n\n    /**\n     * get styles from store theme\n     */\n    getStyles?(): {\n        [key: string]: string;\n    };\n\n    /**\n     * get the state code needed for shipping stripe element\n     *\n     * @param country\n     * @param state\n     */\n    getStripeState(\n        country: string,\n        state: string,\n        isStripeStateMappingDisabledForES?: boolean,\n    ): string;\n\n    /**\n     * Set the Stripe experiments to be used in checkout-js components;\n     * Stripe specific experiments broadcasts to SDK from payment provider configs request.\n     *\n     * @param experiments\n     * @returns void\n     */\n    setStripeExperiments?(experiments: Record<string, boolean>): void;\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/stripe-upe/stripe-upe-shipping-strategy.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\nimport { Observable, of } from 'rxjs';\n\nimport {\n    STRIPE_UPE_CLIENT_API_VERSION,\n    STRIPE_UPE_CLIENT_BETAS,\n    StripeClient,\n    StripeDisplayName,\n    StripeElement,\n    StripeHostWindow,\n    StripeJsVersion,\n    StripeScriptLoader,\n    StripeShippingEvent,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport { CheckoutRequestSender, CheckoutStore, createCheckoutStore } from '../../../checkout';\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    NotInitializedError,\n} from '../../../common/error/errors';\nimport { getGuestCustomer } from '../../../customer/customers.mock';\nimport { getAddressFormFields } from '../../../form/form.mock';\nimport {\n    B2BCompanyPaymentMethodRequestSender,\n    LoadPaymentMethodAction,\n    PaymentMethod,\n    PaymentMethodActionCreator,\n    PaymentMethodActionType,\n    PaymentMethodRequestSender,\n} from '../../../payment';\nimport { getStripeUPE } from '../../../payment/payment-methods.mock';\nimport ConsignmentActionCreator from '../../consignment-action-creator';\nimport { ConsignmentActionType } from '../../consignment-actions';\nimport ConsignmentRequestSender from '../../consignment-request-sender';\nimport { getFlatRateOption } from '../../internal-shipping-options.mock';\nimport { getShippingAddress } from '../../shipping-addresses.mock';\nimport { ShippingInitializeOptions } from '../../shipping-request-options';\n\nimport StripeUPEShippingStrategy from './stripe-upe-shipping-strategy';\nimport {\n    getShippingStripeUPEJsMock,\n    getShippingStripeUPEJsMockWithAnElementCreated,\n    getShippingStripeUPEJsOnMock,\n    getStripeUPEInitializeOptionsMockWithStyles,\n    getStripeUPEShippingInitializeOptionsMock,\n} from './stripe-upe-shipping.mock';\n\n// TODO: CHECKOUT-7766\ndescribe('StripeUPEShippingStrategy', () => {\n    const requestSender = createRequestSender();\n\n    let store: CheckoutStore;\n    let consignmentActionCreator: ConsignmentActionCreator;\n    let strategy: StripeUPEShippingStrategy;\n    let stripeScriptLoader: StripeScriptLoader;\n    let stripeUPEJsMock: StripeClient;\n    let loadPaymentMethodAction: Observable<LoadPaymentMethodAction>;\n    let paymentMethodMock: PaymentMethod;\n    let paymentMethodActionCreator: PaymentMethodActionCreator;\n\n    const stripeShippingEvent = (complete = true): StripeShippingEvent => {\n        return {\n            complete,\n            elementType: '',\n            empty: false,\n            isNewAddress: true,\n            phoneFieldRequired: true,\n            value: {\n                address: {\n                    city: 'Lorem',\n                    country: 'US',\n                    line1: 'ok',\n                    line2: 'ok',\n                    postal_code: '44910',\n                    state: 'TX',\n                },\n                firstName: 'Alan',\n                lastName: 'Muñoz',\n                phone: '+523333333333',\n            },\n            display: {\n                name: StripeDisplayName.SPLIT,\n            },\n        };\n    };\n\n    beforeEach(() => {\n        store = createCheckoutStore();\n        paymentMethodMock = { ...getStripeUPE(), clientToken: 'myToken' };\n        loadPaymentMethodAction = of(\n            createAction(PaymentMethodActionType.LoadPaymentMethodSucceeded, paymentMethodMock, {\n                methodId: `stripeupe?method=card`,\n            }),\n        );\n        stripeScriptLoader = new StripeScriptLoader(createScriptLoader());\n        consignmentActionCreator = new ConsignmentActionCreator(\n            new ConsignmentRequestSender(createRequestSender()),\n            new CheckoutRequestSender(createRequestSender()),\n        );\n        paymentMethodActionCreator = new PaymentMethodActionCreator(\n            new PaymentMethodRequestSender(requestSender),\n            new B2BCompanyPaymentMethodRequestSender(requestSender),\n        );\n\n        jest.spyOn(store, 'dispatch').mockReturnValue(Promise.resolve(store.getState()));\n        jest.spyOn(store.getState().paymentMethods, 'getPaymentMethod').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(paymentMethodActionCreator, 'loadPaymentMethod').mockReturnValue(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            loadPaymentMethodAction,\n        );\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        paymentMethodActionCreator.loadPaymentMethod = jest.fn(() => loadPaymentMethodAction);\n        stripeUPEJsMock = getShippingStripeUPEJsMock();\n        jest.spyOn(stripeScriptLoader, 'getStripeClient').mockResolvedValue(stripeUPEJsMock);\n\n        strategy = new StripeUPEShippingStrategy(\n            store,\n            stripeScriptLoader,\n            consignmentActionCreator,\n            paymentMethodActionCreator,\n        );\n    });\n\n    describe('#initialize()', () => {\n        let shippingInitialization: ShippingInitializeOptions;\n\n        beforeEach(() => {\n            shippingInitialization = getStripeUPEShippingInitializeOptionsMock();\n            jest.spyOn(store.getState().customer, 'getCustomerOrThrow').mockReturnValue(\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                getGuestCustomer,\n            );\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n                getStripeUPE(),\n            );\n\n            jest.spyOn(store.getState().cart, 'getLocale').mockReturnValue('en');\n        });\n\n        afterEach(() => {\n            delete (window as StripeHostWindow).bcStripeElements;\n            jest.resetAllMocks();\n        });\n\n        it('loads a single instance of StripeUPEClient and StripeElements', async () => {\n            await expect(strategy.initialize(shippingInitialization)).resolves.toBe(\n                store.getState(),\n            );\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledWith(\n                paymentMethodMock.initializationData,\n                'en',\n                StripeJsVersion.V3,\n                STRIPE_UPE_CLIENT_BETAS,\n                STRIPE_UPE_CLIENT_API_VERSION,\n            );\n            expect(stripeUPEJsMock.elements).toHaveBeenCalledTimes(1);\n        });\n\n        it('destroys and create an instance of StripeUPEClient and StripeElements', async () => {\n            stripeUPEJsMock = getShippingStripeUPEJsMockWithAnElementCreated();\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockResolvedValue(stripeUPEJsMock);\n\n            await expect(strategy.initialize(shippingInitialization)).resolves.toBe(\n                store.getState(),\n            );\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeUPEJsMock.elements).toHaveBeenCalledTimes(1);\n            expect(\n                (stripeUPEJsMock.elements as jest.Mock).mock.results[0].value.getElement.mock\n                    .results[0].value.destroy,\n            ).toHaveBeenCalledTimes(1);\n        });\n\n        it('loads a single instance of StripeUPEClient and StripeElements when shipping data is provided', async () => {\n            jest.spyOn(store.getState().shippingAddress, 'getShippingAddress').mockReturnValue(\n                getShippingAddress(),\n            );\n\n            await expect(strategy.initialize(shippingInitialization)).resolves.toBe(\n                store.getState(),\n            );\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeUPEJsMock.elements).toHaveBeenCalledTimes(1);\n        });\n\n        it('does not load stripeUPE if initialization options are not provided', () => {\n            const promise = strategy.initialize({ methodId: 'stripeupe' });\n\n            expect(promise).rejects.toThrow(NotInitializedError);\n        });\n\n        it('does not load stripeUPE if UPE options are not provided', () => {\n            const promise = strategy.initialize({\n                methodId: 'stripeupe',\n                stripeupe: {\n                    methodId: '',\n                    gatewayId: '',\n                    onChangeShipping: jest.fn(),\n                    availableCountries: 'US,MX',\n                    getStripeState: jest.fn(),\n                },\n            });\n\n            expect(promise).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('does not load stripeUPE when styles is provided', async () => {\n            const testColor = '#123456';\n            const style = {\n                labelText: testColor,\n                fieldText: testColor,\n                fieldPlaceholderText: testColor,\n                fieldErrorText: testColor,\n                fieldBackground: testColor,\n                fieldInnerShadow: testColor,\n                fieldBorder: testColor,\n            };\n\n            await expect(\n                strategy.initialize(getStripeUPEInitializeOptionsMockWithStyles(style)),\n            ).resolves.toBe(store.getState());\n            expect(stripeUPEJsMock.elements).toHaveBeenNthCalledWith(1, {\n                clientSecret: 'clientToken',\n                appearance: {\n                    rules: {\n                        '.Input': {\n                            borderColor: testColor,\n                            boxShadow: testColor,\n                            color: testColor,\n                        },\n                    },\n                    variables: {\n                        borderRadius: '4px',\n                        colorBackground: testColor,\n                        colorDanger: testColor,\n                        colorPrimary: testColor,\n                        colorText: testColor,\n                        colorTextPlaceholder: testColor,\n                        colorTextSecondary: testColor,\n                        spacingUnit: '4px',\n                    },\n                },\n            });\n        });\n\n        it('loads a single instance of StripeUPEClient without last name and phone fields', async () => {\n            jest.spyOn(store.getState().shippingAddress, 'getShippingAddress').mockReturnValue(\n                getShippingAddress(),\n            );\n\n            jest.spyOn(store.getState().form, 'getShippingAddressFields').mockReturnValue([\n                {\n                    id: 'field_7',\n                    name: 'phone',\n                    custom: false,\n                    label: 'Phone Number',\n                    required: false,\n                    default: '',\n                },\n            ]);\n            jest.spyOn(store.getState().shippingAddress, 'getShippingAddress').mockReturnValue({\n                ...getShippingAddress(),\n                lastName: '',\n            });\n\n            await expect(strategy.initialize(shippingInitialization)).resolves.toBe(\n                store.getState(),\n            );\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeUPEJsMock.elements).toHaveBeenCalledTimes(1);\n        });\n\n        it('returns an error when methodId is not present', () => {\n            const promise = strategy.initialize({\n                ...getStripeUPEShippingInitializeOptionsMock(),\n                stripeupe: undefined,\n                methodId: '',\n            });\n\n            expect(promise).rejects.toBeInstanceOf(InvalidArgumentError);\n        });\n\n        it('returns an error when stripePublishableKey, or clientToken is not present', () => {\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue({\n                ...getStripeUPE(),\n                initializationData: {},\n            });\n\n            const promise = strategy.initialize(shippingInitialization);\n\n            expect(promise).rejects.toBeInstanceOf(MissingDataError);\n        });\n\n        it('loads a single instance of StripeUPEClient without first and last name fields', async () => {\n            jest.spyOn(store.getState().shippingAddress, 'getShippingAddress').mockReturnValue({\n                ...getShippingAddress(),\n                firstName: '',\n                lastName: '',\n            });\n\n            await expect(strategy.initialize(shippingInitialization)).resolves.toBe(\n                store.getState(),\n            );\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeUPEJsMock.elements).toHaveBeenCalledTimes(1);\n        });\n\n        it('triggers onChange event callback and mounts component', async () => {\n            const stripeMockElement: StripeElement = {\n                destroy: jest.fn(),\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                update: jest.fn(),\n                on: jest.fn((_, callback) => callback(stripeShippingEvent(true))),\n                collapse: jest.fn(),\n            };\n            const stripeUPEJsMockWithElement = getShippingStripeUPEJsOnMock(stripeMockElement);\n\n            jest.spyOn(store.getState().shippingAddress, 'getShippingAddress').mockReturnValue(\n                getShippingAddress(),\n            );\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockResolvedValueOnce(\n                stripeUPEJsMockWithElement,\n            );\n            jest.useFakeTimers();\n\n            await expect(strategy.initialize(shippingInitialization)).resolves.toBe(\n                store.getState(),\n            );\n\n            jest.runAllTimers();\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeMockElement.on).toHaveBeenCalledTimes(1);\n            expect(stripeMockElement.mount).toHaveBeenCalledWith(expect.any(String));\n            expect(shippingInitialization.stripeupe?.onChangeShipping).toHaveBeenCalledTimes(1);\n        });\n\n        it('triggers onChange event callback and mounts component when event is not completed', async () => {\n            const stripeMockElement: StripeElement = {\n                destroy: jest.fn(),\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                update: jest.fn(),\n                on: jest.fn((_, callback) => callback(stripeShippingEvent(false))),\n                collapse: jest.fn(),\n            };\n            const stripeUPEJsMockWithElement = getShippingStripeUPEJsOnMock(stripeMockElement);\n\n            jest.spyOn(store.getState().form, 'getShippingAddressFields').mockReturnValue(\n                getAddressFormFields(),\n            );\n            jest.spyOn(store.getState().shippingAddress, 'getShippingAddress').mockReturnValue({\n                ...getShippingAddress(),\n                countryCode: '',\n            });\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockResolvedValueOnce(\n                stripeUPEJsMockWithElement,\n            );\n            jest.useFakeTimers();\n\n            await expect(strategy.initialize(shippingInitialization)).resolves.toBe(\n                store.getState(),\n            );\n\n            jest.runAllTimers();\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeMockElement.on).toHaveBeenCalledTimes(1);\n            expect(stripeMockElement.mount).toHaveBeenCalledWith(expect.any(String));\n            expect(shippingInitialization.stripeupe?.onChangeShipping).toHaveBeenCalledTimes(1);\n        });\n\n        it('triggers onChange event callback and throws error if event data is missing', async () => {\n            const missingShippingEvent = {\n                complete: false,\n                elementType: '',\n                empty: false,\n                phoneFieldRequired: false,\n                value: {\n                    address: {\n                        city: '',\n                        country: '',\n                        line1: '',\n                        line2: '',\n                        postal_code: '',\n                        state: '',\n                    },\n                    name: '',\n                    phone: '',\n                },\n            };\n            const stripeMockElement: StripeElement = {\n                destroy: jest.fn(),\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                update: jest.fn(),\n                on: jest.fn((_, callback) => callback(missingShippingEvent)),\n                collapse: jest.fn(),\n            };\n\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockResolvedValueOnce(\n                getShippingStripeUPEJsOnMock(stripeMockElement),\n            );\n\n            const promise = strategy.initialize(shippingInitialization);\n\n            await expect(promise).rejects.toBeInstanceOf(MissingDataError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        let shippingInitialization: ShippingInitializeOptions;\n\n        beforeEach(() => {\n            shippingInitialization = getStripeUPEShippingInitializeOptionsMock();\n            jest.spyOn(store.getState().customer, 'getCustomerOrThrow').mockReturnValue(\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                getGuestCustomer,\n            );\n            jest.spyOn(store.getState().paymentMethods, 'getPaymentMethodOrThrow').mockReturnValue(\n                getStripeUPE(),\n            );\n            strategy.initialize(shippingInitialization);\n        });\n\n        afterEach(() => {\n            jest.resetAllMocks();\n        });\n\n        it('deinitializes strategy', async () => {\n            await strategy.deinitialize();\n\n            expect(await strategy.deinitialize()).toEqual(store.getState());\n        });\n    });\n\n    it('updates shipping address', async () => {\n        const address = getShippingAddress();\n        const options = {};\n        const action = of(createAction(ConsignmentActionType.CreateConsignmentsRequested));\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(consignmentActionCreator, 'updateAddress').mockReturnValue(action);\n\n        jest.spyOn(store, 'dispatch');\n\n        const output = await strategy.updateAddress(address, options);\n\n        expect(consignmentActionCreator.updateAddress).toHaveBeenCalledWith(address, options);\n        expect(store.dispatch).toHaveBeenCalledWith(action);\n        expect(output).toEqual(store.getState());\n    });\n\n    it('selects shipping option', async () => {\n        const method = getFlatRateOption();\n        const options = {};\n        const action = of(createAction(ConsignmentActionType.UpdateConsignmentRequested));\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(consignmentActionCreator, 'selectShippingOption').mockReturnValue(action);\n\n        jest.spyOn(store, 'dispatch');\n\n        const output = await strategy.selectOption(method.id, options);\n\n        expect(consignmentActionCreator.selectShippingOption).toHaveBeenCalledWith(\n            method.id,\n            options,\n        );\n        expect(store.dispatch).toHaveBeenCalledWith(action);\n        expect(output).toEqual(store.getState());\n    });\n});\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/stripe-upe/stripe-upe-shipping-strategy.ts",
    "content": "import {\n    STRIPE_UPE_CLIENT_API_VERSION,\n    STRIPE_UPE_CLIENT_BETAS,\n    StripeAppearanceOptions,\n    StripeClient,\n    StripeDisplayName,\n    StripeElementEvent,\n    StripeElements,\n    StripeElementsCreateOptions,\n    StripeElementType,\n    StripeEventType,\n    StripeFormMode,\n    StripeJsVersion,\n    StripeScriptLoader,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport { AddressRequestBody } from '../../../address';\nimport { CheckoutStore, InternalCheckoutSelectors } from '../../../checkout';\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n} from '../../../common/error/errors';\nimport { PaymentMethodActionCreator } from '../../../payment';\nimport ConsignmentActionCreator from '../../consignment-action-creator';\nimport { ShippingInitializeOptions, ShippingRequestOptions } from '../../shipping-request-options';\nimport ShippingStrategy from '../shipping-strategy';\n\nexport default class StripeUPEShippingStrategy implements ShippingStrategy {\n    private _stripeUPEClient?: StripeClient;\n    private _stripeElements?: StripeElements;\n    private sendData?: ReturnType<typeof setTimeout>;\n\n    constructor(\n        private _store: CheckoutStore,\n        private _stripeScriptLoader: StripeScriptLoader,\n        private _consignmentActionCreator: ConsignmentActionCreator,\n        private _paymentMethodActionCreator: PaymentMethodActionCreator,\n    ) {}\n\n    updateAddress(\n        address: AddressRequestBody,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(this._consignmentActionCreator.updateAddress(address, options));\n    }\n\n    selectOption(\n        optionId: string,\n        options?: ShippingRequestOptions,\n    ): Promise<InternalCheckoutSelectors> {\n        return this._store.dispatch(\n            this._consignmentActionCreator.selectShippingOption(optionId, options),\n        );\n    }\n\n    async initialize(options: ShippingInitializeOptions): Promise<InternalCheckoutSelectors> {\n        if (!options.stripeupe) {\n            throw new InvalidArgumentError(\n                `Unable to proceed because \"options\" argument is not provided.`,\n            );\n        }\n\n        const {\n            container,\n            gatewayId,\n            methodId,\n            onChangeShipping,\n            getStyles,\n            availableCountries,\n            getStripeState,\n        } = options.stripeupe;\n\n        Object.entries(options.stripeupe).forEach(([key, value]) => {\n            if (!value) {\n                throw new InvalidArgumentError(\n                    `Unable to proceed because \"${key}\" argument is not provided.`,\n                );\n            }\n        });\n\n        const state = await this._store.dispatch(\n            this._paymentMethodActionCreator.loadPaymentMethod(gatewayId, {\n                params: { method: methodId },\n            }),\n        );\n        const paymentMethod = state.paymentMethods.getPaymentMethodOrThrow(methodId, gatewayId);\n        const { initializationData } = paymentMethod;\n\n        if (\n            !paymentMethod ||\n            !paymentMethod.initializationData.stripePublishableKey ||\n            !paymentMethod.clientToken\n        ) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        this._stripeUPEClient = await this._stripeScriptLoader.getStripeClient(\n            initializationData,\n            state.cart.getLocale(),\n            StripeJsVersion.V3,\n            STRIPE_UPE_CLIENT_BETAS,\n            STRIPE_UPE_CLIENT_API_VERSION,\n        );\n\n        let appearance: StripeAppearanceOptions;\n        const styles = getStyles && getStyles();\n\n        const {\n            form: { getShippingAddressFields },\n            shippingAddress: { getShippingAddress },\n        } = this._store.getState();\n\n        const shippingFields = getShippingAddressFields([], '');\n\n        if (styles) {\n            appearance = {\n                variables: {\n                    colorPrimary: styles.fieldInnerShadow,\n                    colorBackground: styles.fieldBackground,\n                    colorText: styles.labelText,\n                    colorDanger: styles.fieldErrorText,\n                    colorTextSecondary: styles.labelText,\n                    colorTextPlaceholder: styles.fieldPlaceholderText,\n                    spacingUnit: '4px',\n                    borderRadius: '4px',\n                },\n                rules: {\n                    '.Input': {\n                        borderColor: styles.fieldBorder,\n                        color: styles.fieldText,\n                        boxShadow: styles.fieldInnerShadow,\n                    },\n                },\n            };\n        } else {\n            appearance = {\n                variables: {\n                    spacingUnit: '4px',\n                    borderRadius: '4px',\n                },\n            };\n        }\n\n        this._stripeElements = await this._stripeScriptLoader.getElements(this._stripeUPEClient, {\n            clientSecret: paymentMethod.clientToken,\n            appearance,\n        });\n\n        const shipping = getShippingAddress();\n        const shippingPhoneField = shippingFields.find((field) => field.name === 'phone');\n        let option: StripeElementsCreateOptions = {\n            mode: StripeFormMode.SHIPPING,\n            allowedCountries: [availableCountries],\n            fields: {\n                phone: 'always',\n            },\n            validation: {\n                phone: {\n                    required:\n                        shippingPhoneField && shippingPhoneField.required ? 'always' : 'never',\n                },\n            },\n            display: {\n                name: StripeDisplayName.SPLIT,\n            },\n        };\n\n        if (shipping) {\n            const {\n                stateOrProvinceCode,\n                countryCode,\n                lastName,\n                firstName,\n                phone,\n                address1,\n                address2,\n                city,\n                postalCode,\n            } = shipping;\n            const stripeState =\n                stateOrProvinceCode && countryCode\n                    ? getStripeState(countryCode, stateOrProvinceCode)\n                    : stateOrProvinceCode;\n\n            option = {\n                ...option,\n                defaultValues: {\n                    firstName,\n                    lastName,\n                    phone,\n                    address: {\n                        line1: address1,\n                        line2: address2,\n                        city,\n                        state: stripeState,\n                        postal_code: postalCode,\n                        country: countryCode,\n                    },\n                },\n            };\n        }\n\n        let shippingAddressElement = this._stripeElements.getElement(StripeElementType.SHIPPING);\n\n        if (shippingAddressElement) {\n            shippingAddressElement.destroy();\n        }\n\n        shippingAddressElement = this._stripeElements.create(StripeElementType.SHIPPING, option);\n\n        shippingAddressElement.on(StripeElementEvent.CHANGE, (event: StripeEventType) => {\n            if (!('isNewAddress' in event)) {\n                throw new MissingDataError(MissingDataErrorType.MissingShippingAddress);\n            }\n\n            if (event.complete || event.isNewAddress) {\n                if (this.sendData) {\n                    clearTimeout(this.sendData);\n                }\n\n                this.sendData = setTimeout(() => {\n                    onChangeShipping({\n                        ...event,\n                        phoneFieldRequired: shippingPhoneField\n                            ? shippingPhoneField.required\n                            : false,\n                    });\n                }, 1000);\n            }\n        });\n\n        shippingAddressElement.mount(`#${container}`);\n\n        return Promise.resolve(this._store.getState());\n    }\n\n    deinitialize(): Promise<InternalCheckoutSelectors> {\n        /* The new shipping component by StripeLink has a small bug, when the component is unmounted,\n        Stripe does not save the shipping, to solve this, we will leave it mounted,\n        and once it is fixed will be unmounted again */\n\n        // this._stripeElements?.getElement(StripeElementType.SHIPPING)?.unmount();\n\n        return Promise.resolve(this._store.getState());\n    }\n}\n"
  },
  {
    "path": "packages/core/src/shipping/strategies/stripe-upe/stripe-upe-shipping.mock.ts",
    "content": "import { StripeClient, StripeElement } from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport { ShippingInitializeOptions } from '../../shipping-request-options';\n\nexport function getShippingStripeUPEJsMock(): StripeClient {\n    return {\n        elements: jest.fn(() => ({\n            create: jest.fn(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn(),\n                update: jest.fn(),\n                destroy: jest.fn(),\n                collapse: jest.fn(),\n            })),\n            getElement: jest.fn().mockReturnValue(null),\n            update: jest.fn(),\n            fetchUpdates: jest.fn(),\n        })),\n        confirmPayment: jest.fn(),\n        confirmCardPayment: jest.fn(),\n        retrievePaymentIntent: jest.fn(),\n        initCheckout: jest.fn(),\n    };\n}\n\nexport function getShippingStripeUPEJsOnMock(returnElement?: StripeElement): StripeClient {\n    return {\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        elements: jest.fn(() => ({\n            create: jest.fn(() => returnElement),\n            getElement: jest.fn(() => returnElement),\n            update: jest.fn(),\n            fetchUpdates: jest.fn(),\n        })),\n        confirmPayment: jest.fn(),\n        confirmCardPayment: jest.fn(),\n        retrievePaymentIntent: jest.fn(),\n        initCheckout: jest.fn(),\n    };\n}\n\nexport function getShippingStripeUPEJsMockWithAnElementCreated(): StripeClient {\n    return {\n        elements: jest.fn(() => ({\n            create: jest.fn(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                update: jest.fn(),\n                on: jest.fn(),\n                destroy: jest.fn(),\n                collapse: jest.fn(),\n            })),\n            getElement: jest.fn(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                update: jest.fn(),\n                on: jest.fn(),\n                destroy: jest.fn(),\n                collapse: jest.fn(),\n            })),\n            update: jest.fn(),\n            fetchUpdates: jest.fn(),\n        })),\n        confirmPayment: jest.fn(),\n        confirmCardPayment: jest.fn(),\n        retrievePaymentIntent: jest.fn(),\n        initCheckout: jest.fn(),\n    };\n}\n\nexport function getStripeUPEShippingInitializeOptionsMock(): ShippingInitializeOptions {\n    return {\n        methodId: 'stripeupe',\n        stripeupe: {\n            container: 'stripeupeLink',\n            methodId: 'card',\n            gatewayId: 'stripeupe',\n            onChangeShipping: jest.fn(),\n            availableCountries: 'US,MX',\n            getStyles: jest.fn(),\n            getStripeState: jest.fn(),\n        },\n    };\n}\n\nexport function getStripeUPEInitializeOptionsMockWithStyles(\n    style: { [key: string]: string } = { fieldText: '#ccc' },\n): ShippingInitializeOptions {\n    return {\n        methodId: 'stripeupe',\n        stripeupe: {\n            container: 'stripeupeLink',\n            methodId: 'card',\n            gatewayId: 'stripeupe',\n            onChangeShipping: jest.fn(),\n            availableCountries: 'US,MX',\n            getStyles: () => style,\n            getStripeState: jest.fn(),\n        },\n    };\n}\n"
  },
  {
    "path": "packages/core/src/signin-email/index.ts",
    "content": "export * from './signin-email-actions';\nexport { SignInEmail, SignInEmailRequestBody } from './signin-email';\n\nexport { default as SignInEmailRequestSender } from './signin-email-request-sender';\nexport { default as SignInEmailActionCreator } from './signin-email-action-creator';\nexport { default as SignInEmailState } from './signin-email-state';\nexport { default as signInEmailReducer } from './signin-email-reducer';\nexport {\n    default as SignInEmailSelector,\n    SignInEmailSelectorFactory,\n    createSignInEmailSelectorFactory,\n} from './signin-email-selector';\n"
  },
  {
    "path": "packages/core/src/signin-email/signin-email-action-creator.spec.ts",
    "content": "import { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport { SignInEmail } from './signin-email';\nimport SignInEmailActionCreator from './signin-email-action-creator';\nimport { SignInEmailActionType } from './signin-email-actions';\nimport SignInEmailRequestSender from './signin-email-request-sender';\n\ndescribe('SubscriptionsActionCreator', () => {\n    let signInEmailActionCreator: SignInEmailActionCreator;\n    let signInEmailRequestSender: SignInEmailRequestSender;\n    let errorResponse: Response<Error>;\n    let response: Response<SignInEmail>;\n\n    beforeEach(() => {\n        response = getResponse({ sent_email: 'f', expiry: 0 });\n        errorResponse = getErrorResponse();\n        signInEmailRequestSender = new SignInEmailRequestSender(createRequestSender());\n\n        jest.spyOn(signInEmailRequestSender, 'sendSignInEmail').mockImplementation(() =>\n            Promise.resolve(response),\n        );\n\n        signInEmailActionCreator = new SignInEmailActionCreator(signInEmailRequestSender);\n    });\n\n    describe('#sendSignInEmail()', () => {\n        describe('when store has a signed-in shopper', () => {\n            it('emits billing actions if able to continue as guest', async () => {\n                const actions = await from(\n                    signInEmailActionCreator.sendSignInEmail({\n                        email: 'f',\n                    }),\n                )\n                    .pipe(toArray())\n                    .toPromise();\n\n                expect(actions).toEqual([\n                    { type: SignInEmailActionType.SendSignInEmailRequested },\n                    {\n                        type: SignInEmailActionType.SendSignInEmailSucceeded,\n                        payload: response.body,\n                    },\n                ]);\n            });\n\n            it('emits error actions if unable to continue as guest', async () => {\n                jest.spyOn(signInEmailRequestSender, 'sendSignInEmail').mockReturnValue(\n                    Promise.reject(getErrorResponse()),\n                );\n\n                const errorHandler = jest.fn((action) => of(action));\n\n                const actions = await from(\n                    signInEmailActionCreator.sendSignInEmail({\n                        email: 'f',\n                    }),\n                )\n                    .pipe(catchError(errorHandler), toArray())\n                    .toPromise();\n\n                expect(errorHandler).toHaveBeenCalled();\n                expect(actions).toEqual([\n                    { type: SignInEmailActionType.SendSignInEmailRequested },\n                    {\n                        type: SignInEmailActionType.SendSignInEmailFailed,\n                        payload: errorResponse,\n                        error: true,\n                    },\n                ]);\n            });\n\n            it('sends request to create billing address', async () => {\n                await from(\n                    signInEmailActionCreator.sendSignInEmail(\n                        {\n                            email: 'f',\n                            redirectUrl: 'f.c',\n                        },\n                        {},\n                    ),\n                ).toPromise();\n\n                expect(signInEmailRequestSender.sendSignInEmail).toHaveBeenCalledWith(\n                    { email: 'f', redirectUrl: 'f.c' },\n                    {},\n                );\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/signin-email/signin-email-action-creator.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { concat, defer, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { throwErrorAction } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\n\nimport { SignInEmailRequestBody } from './signin-email';\nimport { SendSignInEmailAction, SignInEmailActionType } from './signin-email-actions';\nimport SignInEmailRequestSender from './signin-email-request-sender';\n\nexport default class SignInEmailActionCreator {\n    constructor(private _requestSender: SignInEmailRequestSender) {}\n\n    sendSignInEmail(\n        emailRequest: SignInEmailRequestBody,\n        options?: RequestOptions,\n    ): Observable<SendSignInEmailAction> {\n        return concat(\n            of(createAction(SignInEmailActionType.SendSignInEmailRequested)),\n            defer(async () => {\n                const { body } = await this._requestSender.sendSignInEmail(emailRequest, options);\n\n                return createAction(SignInEmailActionType.SendSignInEmailSucceeded, body);\n            }),\n        ).pipe(\n            catchError((error) =>\n                throwErrorAction(SignInEmailActionType.SendSignInEmailFailed, error),\n            ),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/signin-email/signin-email-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { SignInEmail } from './signin-email';\n\nexport enum SignInEmailActionType {\n    SendSignInEmailRequested = 'SEND_SIGNIN_EMAIL_REQUESTED',\n    SendSignInEmailSucceeded = 'SEND_SIGNIN_EMAIL_SUCCEEDED',\n    SendSignInEmailFailed = 'SEND_SIGNIN_EMAIL_FAILED',\n}\nexport type SendSignInEmailAction =\n    | SendSignInEmailRequestedAction\n    | SendSignInEmailSucceededAction\n    | SendSignInEmailFailedAction;\n\nexport interface SendSignInEmailRequestedAction extends Action {\n    type: SignInEmailActionType.SendSignInEmailRequested;\n}\n\nexport interface SendSignInEmailSucceededAction extends Action<SignInEmail> {\n    type: SignInEmailActionType.SendSignInEmailSucceeded;\n}\n\nexport interface SendSignInEmailFailedAction extends Action<Error> {\n    type: SignInEmailActionType.SendSignInEmailFailed;\n}\n"
  },
  {
    "path": "packages/core/src/signin-email/signin-email-reducer.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\n\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport { SignInEmail } from './signin-email';\nimport { SignInEmailActionType } from './signin-email-actions';\nimport signInEmailReducer from './signin-email-reducer';\nimport SignInEmailState from './signin-email-state';\n\ndescribe('signInEmailReducer', () => {\n    let initialState: SignInEmailState;\n\n    beforeEach(() => {\n        initialState = { errors: {}, statuses: {} };\n    });\n\n    it('returns pending when subscriptions update requested', () => {\n        const action = createAction(SignInEmailActionType.SendSignInEmailRequested);\n        const output = signInEmailReducer(initialState, action);\n\n        expect(output).toEqual({\n            data: undefined,\n            errors: { sendError: undefined },\n            statuses: { isSending: true },\n        });\n    });\n\n    it('returns clean state when subscriptions updated', () => {\n        const email: SignInEmail = { sent_email: 'f', expiry: 0 };\n        const action = createAction(SignInEmailActionType.SendSignInEmailSucceeded, email);\n        const output = signInEmailReducer(initialState, action);\n\n        expect(output).toEqual({\n            data: action.payload,\n            errors: { sendError: undefined },\n            statuses: { isSending: false },\n        });\n    });\n\n    it('returns error when subscriptions failed to update', () => {\n        const action = createAction(\n            SignInEmailActionType.SendSignInEmailFailed,\n            new RequestError(getErrorResponse()),\n        );\n        const output = signInEmailReducer(initialState, action);\n\n        expect(output).toEqual({\n            data: undefined,\n            errors: { sendError: action.payload },\n            statuses: { isSending: false },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/signin-email/signin-email-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectMerge, objectSet } from '../common/utility';\n\nimport { SignInEmail } from './signin-email';\nimport { SendSignInEmailAction, SignInEmailActionType } from './signin-email-actions';\nimport SignInEmailState, {\n    DEFAULT_STATE,\n    SignInEmailErrorsState,\n    SignInEmailStatusesState,\n} from './signin-email-state';\n\nexport default function signInEmailReducer(\n    state: SignInEmailState = DEFAULT_STATE,\n    action: Action,\n): SignInEmailState {\n    const reducer = combineReducers<SignInEmailState>({\n        data: dataReducer,\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction dataReducer(\n    data: SignInEmail | undefined,\n    action: SendSignInEmailAction,\n): SignInEmail | undefined {\n    switch (action.type) {\n        case SignInEmailActionType.SendSignInEmailSucceeded:\n            return objectMerge(data, action.payload);\n\n        default:\n            return data;\n    }\n}\n\nfunction errorsReducer(\n    errors: SignInEmailErrorsState = DEFAULT_STATE.errors,\n    action: SendSignInEmailAction,\n): SignInEmailErrorsState {\n    switch (action.type) {\n        case SignInEmailActionType.SendSignInEmailRequested:\n        case SignInEmailActionType.SendSignInEmailSucceeded:\n            return objectSet(errors, 'sendError', undefined);\n\n        case SignInEmailActionType.SendSignInEmailFailed:\n            return objectSet(errors, 'sendError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: SignInEmailStatusesState = DEFAULT_STATE.statuses,\n    action: SendSignInEmailAction,\n): SignInEmailStatusesState {\n    switch (action.type) {\n        case SignInEmailActionType.SendSignInEmailRequested:\n            return objectSet(statuses, 'isSending', true);\n\n        case SignInEmailActionType.SendSignInEmailFailed:\n        case SignInEmailActionType.SendSignInEmailSucceeded:\n            return objectSet(statuses, 'isSending', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/signin-email/signin-email-request-sender.spec.ts",
    "content": "import { createRequestSender, createTimeout, RequestSender } from '@bigcommerce/request-sender';\n\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport SignInEmailRequestSender from './signin-email-request-sender';\n\ndescribe('SignInEmailRequestSender', () => {\n    let signInEmailRequestSender: SignInEmailRequestSender;\n    let requestSender: RequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve());\n\n        signInEmailRequestSender = new SignInEmailRequestSender(requestSender);\n    });\n\n    describe('#sendSignInEmail()', () => {\n        it('sends sign-in email with current location as default', async () => {\n            await signInEmailRequestSender.sendSignInEmail({\n                email: 'foo',\n            });\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/login.php?action=passwordless_login',\n                {\n                    body: {\n                        email: 'foo',\n                        redirect_url: '/',\n                    },\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    timeout: undefined,\n                },\n            );\n        });\n\n        it('sends sign-in email with provided optional parameters', async () => {\n            const options = { timeout: createTimeout() };\n\n            await signInEmailRequestSender.sendSignInEmail(\n                {\n                    email: 'foo',\n                    redirectUrl: 'foo.bar',\n                },\n                options,\n            );\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/login.php?action=passwordless_login',\n                {\n                    ...options,\n                    body: {\n                        email: 'foo',\n                        redirect_url: 'foo.bar',\n                    },\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                },\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/signin-email/signin-email-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { parseUrl } from '../common/url';\n\nimport { SignInEmail, SignInEmailRequestBody } from './signin-email';\n\nexport default class SignInEmailRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    sendSignInEmail(\n        { email, redirectUrl }: SignInEmailRequestBody,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<SignInEmail>> {\n        const url = '/login.php?action=passwordless_login';\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender.post(url, {\n            body: {\n                email,\n                redirect_url:\n                    redirectUrl || parseUrl(window.top ? window.top.location.href : '').pathname,\n            },\n            headers,\n            timeout,\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/signin-email/signin-email-selector.spec.ts",
    "content": "import { SignInEmail } from './signin-email';\nimport SignInEmailSelector, {\n    createSignInEmailSelectorFactory,\n    SignInEmailSelectorFactory,\n} from './signin-email-selector';\n\ndescribe('SignInEmailSelector', () => {\n    let signInEmailSelector: SignInEmailSelector;\n    let createSignInEmailSelector: SignInEmailSelectorFactory;\n\n    beforeEach(() => {\n        createSignInEmailSelector = createSignInEmailSelectorFactory();\n    });\n\n    describe('#getEmail()', () => {\n        it('returns email if present', () => {\n            const email: SignInEmail = {\n                sent_email: 'f',\n                expiry: 0,\n            };\n\n            signInEmailSelector = createSignInEmailSelector({\n                data: email,\n                errors: {},\n                statuses: {},\n            });\n\n            expect(signInEmailSelector.getEmail()).toEqual(email);\n        });\n\n        it('returns no error if not present', () => {\n            signInEmailSelector = createSignInEmailSelector({\n                errors: {},\n                statuses: {},\n            });\n\n            expect(signInEmailSelector.getSendError()).toBeUndefined();\n        });\n    });\n\n    describe('#getSendError()', () => {\n        it('returns error if present', () => {\n            const sendError = new Error();\n\n            signInEmailSelector = createSignInEmailSelector({\n                errors: { sendError },\n                statuses: {},\n            });\n\n            expect(signInEmailSelector.getSendError()).toEqual(sendError);\n        });\n\n        it('returns no error if not present', () => {\n            signInEmailSelector = createSignInEmailSelector({\n                errors: {},\n                statuses: {},\n            });\n\n            expect(signInEmailSelector.getSendError()).toBeUndefined();\n        });\n    });\n\n    describe('#isUpdating()', () => {\n        it('returns true if sending email', () => {\n            signInEmailSelector = createSignInEmailSelector({\n                errors: {},\n                statuses: { isSending: true },\n            });\n\n            expect(signInEmailSelector.isSending()).toBe(true);\n        });\n\n        it('returns false if not sending email', () => {\n            signInEmailSelector = createSignInEmailSelector({\n                errors: {},\n                statuses: {},\n            });\n\n            expect(signInEmailSelector.isSending()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/signin-email/signin-email-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport { SignInEmail } from './signin-email';\nimport SignInEmailState, { DEFAULT_STATE } from './signin-email-state';\n\nexport default interface SignInEmailSelector {\n    getEmail(): SignInEmail | undefined;\n    getSendError(): Error | undefined;\n    isSending(): boolean;\n}\n\nexport type SignInEmailSelectorFactory = (state: SignInEmailState) => SignInEmailSelector;\n\nexport function createSignInEmailSelectorFactory(): SignInEmailSelectorFactory {\n    const getEmail = createSelector(\n        (state: SignInEmailState) => state.data,\n        (signInEmail) => () => signInEmail,\n    );\n\n    const getSendError = createSelector(\n        (state: SignInEmailState) => state.errors.sendError,\n        (error) => () => error,\n    );\n\n    const isSending = createSelector(\n        (state: SignInEmailState) => !!state.statuses.isSending,\n        (status) => () => status,\n    );\n\n    return memoizeOne((state: SignInEmailState = DEFAULT_STATE): SignInEmailSelector => {\n        return {\n            getEmail: getEmail(state),\n            getSendError: getSendError(state),\n            isSending: isSending(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/signin-email/signin-email-state.ts",
    "content": "import { SignInEmail } from './signin-email';\n\nexport default interface SignInEmailState {\n    data?: SignInEmail;\n    errors: SignInEmailErrorsState;\n    statuses: SignInEmailStatusesState;\n}\n\nexport interface SignInEmailErrorsState {\n    sendError?: Error;\n}\n\nexport interface SignInEmailStatusesState {\n    isSending?: boolean;\n}\n\nexport const DEFAULT_STATE: SignInEmailState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/signin-email/signin-email.ts",
    "content": "export interface SignInEmail {\n    sent_email: string;\n    expiry: number;\n}\n\nexport interface SignInEmailRequestBody {\n    email: string;\n    redirectUrl?: string;\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/create-spam-protection.spec.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport createSpamProtection from './create-spam-protection';\nimport GoogleRecaptcha from './google-recaptcha';\n\ndescribe('createSpamProtection()', () => {\n    let spamProtection: GoogleRecaptcha;\n\n    beforeEach(() => {\n        spamProtection = createSpamProtection(new ScriptLoader());\n    });\n\n    it('returns an instance of Google Recaptcha', () => {\n        expect(spamProtection).toBeInstanceOf(GoogleRecaptcha);\n    });\n});\n"
  },
  {
    "path": "packages/core/src/spam-protection/create-spam-protection.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { MutationObserverFactory } from '../common/dom';\n\nimport GoogleRecaptcha from './google-recaptcha';\nimport GoogleRecaptchaScriptLoader from './google-recaptcha-script-loader';\n\nexport default function createSpamProtection(scriptLoader: ScriptLoader): GoogleRecaptcha {\n    return new GoogleRecaptcha(\n        new GoogleRecaptchaScriptLoader(scriptLoader),\n        new MutationObserverFactory(),\n    );\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/carding-protection-challenge-not-completed-error.spec.ts",
    "content": "import CardingProtectionChallengeNotCompletedError from './carding-protection-challenge-not-completed-error';\n\ndescribe('CardingProtectionChallengeNotCompletedError', () => {\n    it('returns error name', () => {\n        const error = new CardingProtectionChallengeNotCompletedError();\n\n        expect(error.name).toBe('CardingProtectionChallengeNotCompletedError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/carding-protection-challenge-not-completed-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if the shopper chooses not to complete the spam protection\n * challenge (i.e.: they close the reCaptcha window).\n */\nexport default class CardingProtectionChallengeNotCompletedError extends StandardError {\n    constructor() {\n        super('Please complete our human verification challenge and try again.');\n\n        this.name = 'CardingProtectionChallengeNotCompletedError';\n        this.type = 'carding_protection_challenge_not_completed';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/carding-protection-failed-error.spec.ts",
    "content": "import CardingProtectionFailedError from './carding-protection-failed-error';\n\ndescribe('CardingProtectionFailedError', () => {\n    it('returns error name', () => {\n        const error = new CardingProtectionFailedError();\n\n        expect(error.name).toBe('CardingProtectionFailedError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/carding-protection-failed-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if we fail to complete the required spam protection\n * verification due to an unknown reason.\n */\nexport default class CardingProtectionFailedError extends StandardError {\n    constructor() {\n        super('We were not able to verify that you are not a robot. Please try again.');\n\n        this.name = 'CardingProtectionFailedError';\n        this.type = 'carding_protection_failed';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/index.ts",
    "content": "export { default as CardingProtectionChallengeNotCompletedError } from './carding-protection-challenge-not-completed-error';\nexport { default as CardingProtectionFailedError } from './carding-protection-failed-error';\nexport { default as SpamProtectionChallengeNotCompletedError } from './spam-protection-challenge-not-completed-error';\nexport { default as SpamProtectionFailedError } from './spam-protection-failed-error';\nexport { default as SpamProtectionNotCompletedError } from './spam-protection-not-completed-error';\nexport { default as SpamProtectionNotLoadedError } from './spam-protection-not-loaded-error';\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/spam-protection-challenge-not-completed-error.spec.ts",
    "content": "import SpamProtectionChallengeNotCompletedError from './spam-protection-challenge-not-completed-error';\n\ndescribe('SpamProtectionChallengeNotCompletedError', () => {\n    it('returns error name', () => {\n        const error = new SpamProtectionChallengeNotCompletedError();\n\n        expect(error.name).toBe('SpamProtectionChallengeNotCompletedError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/spam-protection-challenge-not-completed-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if the shopper chooses not to complete the spam protection\n * challenge (i.e.: they close the reCaptcha window).\n */\nexport default class SpamProtectionChallengeNotCompletedError extends StandardError {\n    constructor() {\n        super(\"You haven't complete our spam protection challenge. Please try again.\");\n\n        this.name = 'SpamProtectionChallengeNotCompletedError';\n        this.type = 'spam_protection_challenge_not_completed';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/spam-protection-failed-error.spec.ts",
    "content": "import SpamProtectionFailedError from './spam-protection-failed-error';\n\ndescribe('SpamProtectionFailedError', () => {\n    it('returns error name', () => {\n        const error = new SpamProtectionFailedError();\n\n        expect(error.name).toBe('SpamProtectionFailedError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/spam-protection-failed-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if we fail to complete the required spam protection\n * verification due to an unknown reason.\n */\nexport default class SpamProtectionFailedError extends StandardError {\n    constructor() {\n        super('We were not able to complete your spam protection verification. Please try again.');\n\n        this.name = 'SpamProtectionFailedError';\n        this.type = 'spam_protection_failed';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/spam-protection-not-completed-error.spec.ts",
    "content": "import SpamProtectionNotCompletedError from './spam-protection-not-completed-error';\n\ndescribe('SpamProtectionNotCompletedError', () => {\n    it('returns error name', () => {\n        const error = new SpamProtectionNotCompletedError();\n\n        expect(error.name).toBe('SpamProtectionNotCompletedError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/spam-protection-not-completed-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if the shopper chooses not to complete the spam check.\n */\nexport default class SpamProtectionNotCompletedError extends StandardError {\n    constructor() {\n        super(\"You haven't complete our spam check. Please try again.\");\n\n        this.name = 'SpamProtectionNotCompletedError';\n        this.type = 'spam_protection_not_completed';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/spam-protection-not-loaded-error.spec.ts",
    "content": "import SpamProtectionNotLoadedError from './spam-protection-not-loaded-error';\n\ndescribe('SpamProtectionNotLoadedError', () => {\n    it('returns error name', () => {\n        const error = new SpamProtectionNotLoadedError();\n\n        expect(error.name).toBe('SpamProtectionNotLoadedError');\n    });\n});\n"
  },
  {
    "path": "packages/core/src/spam-protection/errors/spam-protection-not-loaded-error.ts",
    "content": "import { StandardError } from '../../common/error/errors';\n\n/**\n * Throw this error if spam protection is not loaded when trying to\n * complete the required spam protection verification.\n */\nexport default class SpamProtectionNotLoadedError extends StandardError {\n    constructor() {\n        super('Spam protection is not loaded. Please try again.');\n\n        this.name = 'SpamProtectionNotLoadedError';\n        this.type = 'spam_protection_failed';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/google-recaptcha-script-loader.spec.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport GoogleRecaptchaScriptLoader, {\n    GoogleRecaptchaWindow,\n} from './google-recaptcha-script-loader';\nimport { getGoogleRecaptchaMock } from './google-recaptcha.mock';\n\ndescribe('GoogleRecaptchaScriptLoader', () => {\n    let googleRecaptchaScriptLoader: GoogleRecaptchaScriptLoader;\n    let scriptLoader: ScriptLoader;\n    let mockWindow: GoogleRecaptchaWindow;\n\n    beforeEach(() => {\n        mockWindow = {} as GoogleRecaptchaWindow;\n        scriptLoader = new ScriptLoader();\n    });\n\n    describe('#load()', () => {\n        beforeEach(() => {\n            jest.spyOn(scriptLoader, 'loadScript');\n        });\n\n        it('loads the script if the script is not already loaded', () => {\n            googleRecaptchaScriptLoader = new GoogleRecaptchaScriptLoader(scriptLoader, mockWindow);\n            googleRecaptchaScriptLoader.load();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                '//www.google.com/recaptcha/api.js?onload=initRecaptcha&render=explicit',\n            );\n        });\n\n        it('does not load the script if the script is already loaded', () => {\n            googleRecaptchaScriptLoader = new GoogleRecaptchaScriptLoader(scriptLoader, mockWindow);\n\n            googleRecaptchaScriptLoader.load();\n            googleRecaptchaScriptLoader.load();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n        });\n\n        it('can be reloaded if load fails', async () => {\n            jest.spyOn(scriptLoader, 'loadScript').mockRejectedValueOnce(new Error());\n\n            googleRecaptchaScriptLoader = new GoogleRecaptchaScriptLoader(scriptLoader, mockWindow);\n\n            try {\n                await googleRecaptchaScriptLoader.load();\n            } catch (error) {\n                expect(scriptLoader.loadScript).toHaveBeenCalledTimes(1);\n\n                googleRecaptchaScriptLoader.load();\n\n                expect(scriptLoader.loadScript).toHaveBeenCalledTimes(2);\n            }\n        });\n\n        it('calls the callback after the script is loaded', () => {\n            googleRecaptchaScriptLoader = new GoogleRecaptchaScriptLoader(scriptLoader, mockWindow);\n\n            const loadPromise = googleRecaptchaScriptLoader.load();\n\n            mockWindow.grecaptcha = getGoogleRecaptchaMock();\n            mockWindow.initRecaptcha!();\n\n            expect(loadPromise).resolves.toEqual(mockWindow.grecaptcha);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/spam-protection/google-recaptcha-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nexport default class GoogleRecaptchaScriptLoader {\n    private _loadPromise?: Promise<ReCaptchaV2.ReCaptcha | undefined>;\n\n    constructor(\n        private _scriptLoader: ScriptLoader,\n        private _window: GoogleRecaptchaWindow = window,\n    ) {}\n\n    load(): Promise<ReCaptchaV2.ReCaptcha | undefined> {\n        if (!this._loadPromise) {\n            this._loadPromise = this._loadScript();\n        }\n\n        return this._loadPromise;\n    }\n\n    private _loadScript(): Promise<ReCaptchaV2.ReCaptcha | undefined> {\n        const callbackName = 'initRecaptcha';\n        const params = [`onload=${callbackName}`, 'render=explicit'].join('&');\n\n        return new Promise((resolve, reject) => {\n            this._window[callbackName] = () => resolve(this._window.grecaptcha);\n\n            this._scriptLoader\n                .loadScript(`//www.google.com/recaptcha/api.js?${params}`)\n                .catch((error) => {\n                    this._loadPromise = undefined;\n                    reject(error);\n                });\n        });\n    }\n}\n\nexport interface GoogleRecaptchaWindow extends Window {\n    grecaptcha?: ReCaptchaV2.ReCaptcha;\n    initRecaptcha?(): void;\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/google-recaptcha.mock.ts",
    "content": "export function getGoogleRecaptchaMock(): ReCaptchaV2.ReCaptcha {\n    return {\n        render: jest.fn(),\n        reset: jest.fn(),\n        getResponse: jest.fn(),\n        execute: jest.fn(),\n    };\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/google-recaptcha.spec.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\nimport { from } from 'rxjs';\nimport { TestScheduler } from 'rxjs/testing';\n\nimport { MutationObserverFactory } from '../common/dom';\nimport { NotInitializedError } from '../common/error/errors';\n\nimport { SpamProtectionNotLoadedError } from './errors';\nimport GoogleRecaptcha from './google-recaptcha';\nimport GoogleRecaptchaScriptLoader, {\n    GoogleRecaptchaWindow,\n} from './google-recaptcha-script-loader';\nimport { getGoogleRecaptchaMock } from './google-recaptcha.mock';\n\ndescribe('GoogleRecaptcha', () => {\n    let container: HTMLDivElement;\n    let containerId: string;\n    let googleRecaptcha: GoogleRecaptcha;\n    let googleRecaptchaScriptLoader: GoogleRecaptchaScriptLoader;\n    let scriptLoader: ScriptLoader;\n    let mockWindow: GoogleRecaptchaWindow;\n    let mutationObserverFactory: MutationObserverFactory;\n\n    beforeEach(() => {\n        mockWindow = { grecaptcha: {} } as GoogleRecaptchaWindow;\n        scriptLoader = new ScriptLoader();\n        googleRecaptchaScriptLoader = new GoogleRecaptchaScriptLoader(scriptLoader, mockWindow);\n        mutationObserverFactory = new MutationObserverFactory();\n        googleRecaptcha = new GoogleRecaptcha(googleRecaptchaScriptLoader, mutationObserverFactory);\n        containerId = 'spamProtectionContainer';\n        container = document.createElement('div');\n        container.setAttribute('id', containerId);\n        document.body.append(container);\n    });\n\n    afterEach(() => {\n        const element = document.getElementById(containerId);\n\n        if (element) {\n            document.body.removeChild(container);\n        }\n    });\n\n    describe('#load()', () => {\n        let googleRecaptchaMock: ReCaptchaV2.ReCaptcha;\n\n        beforeEach(() => {\n            googleRecaptchaMock = getGoogleRecaptchaMock();\n            googleRecaptchaMock.getResponse = jest.fn(() => 'google-recaptcha-token');\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            googleRecaptchaMock.render = jest.fn((_containerId, { callback }) => callback());\n\n            jest.spyOn(googleRecaptchaScriptLoader, 'load').mockResolvedValue(googleRecaptchaMock);\n        });\n\n        it('loads the google recaptcha script', async () => {\n            const sitekey = 'sitekey';\n\n            await googleRecaptcha.load(containerId, sitekey);\n\n            expect(googleRecaptchaScriptLoader.load).toHaveBeenCalled();\n        });\n\n        it('returns a promise', async () => {\n            const sitekey = 'sitekey';\n            const size = 'invisible';\n\n            await googleRecaptcha.load(containerId, sitekey);\n\n            expect(googleRecaptchaMock.render).toHaveBeenCalledWith(containerId, {\n                sitekey,\n                size,\n                callback: expect.any(Function),\n                'error-callback': expect.any(Function),\n            });\n        });\n    });\n\n    describe('#execute()', () => {\n        let googleRecaptchaMock: ReCaptchaV2.ReCaptcha;\n        let recaptchaChallengeContainer: HTMLElement;\n\n        beforeEach(() => {\n            jest.spyOn(mutationObserverFactory, 'create').mockReturnValue({\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                disconect: jest.fn(),\n                observe: jest.fn(),\n                takeRecords: jest.fn(),\n            });\n\n            googleRecaptchaMock = getGoogleRecaptchaMock();\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            googleRecaptchaMock.render = jest.fn((_containerId, { callback }) => callback());\n\n            recaptchaChallengeContainer = new DOMParser().parseFromString(\n                '<div style=\"visibility: hidden\"><div><iframe src=\"https://google.com/recaptcha/api2/bframe?query=1\"></div></div>',\n                'text/html',\n            ).body;\n\n            jest.spyOn(googleRecaptchaScriptLoader, 'load').mockResolvedValue(googleRecaptchaMock);\n        });\n\n        afterEach(() => {\n            if (document.body.contains(recaptchaChallengeContainer)) {\n                document.body.removeChild(recaptchaChallengeContainer);\n            }\n        });\n\n        it('throws an error if google recaptcha is not initialized', async () => {\n            try {\n                await googleRecaptcha.execute().toPromise();\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('execute google recaptcha', async () => {\n            const sitekey = 'sitekey';\n\n            document.body.appendChild(recaptchaChallengeContainer);\n\n            await googleRecaptcha.load(containerId, sitekey);\n\n            from(googleRecaptcha.execute()).toPromise();\n\n            expect(googleRecaptchaMock.getResponse).toHaveBeenCalled();\n            expect(googleRecaptchaMock.reset).toHaveBeenCalled();\n            expect(googleRecaptchaMock.execute).toHaveBeenCalled();\n        });\n\n        it('throws an error if google recaptcha window is not loaded after a specific timeframe', async () => {\n            const sitekey = 'sitekey';\n\n            await googleRecaptcha.load(containerId, sitekey);\n\n            const scheduler = new TestScheduler((expected, result) => {\n                expect(expected).toEqual(result);\n            });\n\n            await googleRecaptcha.load(containerId, sitekey);\n\n            scheduler.run((helpers) => {\n                const { expectObservable } = helpers;\n\n                expectObservable(googleRecaptcha.execute()).toBe('7250ms (a|)', {\n                    a: {\n                        error: expect.any(SpamProtectionNotLoadedError),\n                    },\n                });\n\n                expect(googleRecaptchaMock.execute).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('#reset', () => {\n        let googleRecaptchaMock: ReCaptchaV2.ReCaptcha;\n        let recaptchaChallengeContainer: HTMLElement;\n\n        beforeEach(() => {\n            googleRecaptchaMock = getGoogleRecaptchaMock();\n            googleRecaptchaMock.getResponse = jest.fn(() => 'google-recaptcha-token');\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            googleRecaptchaMock.render = jest.fn((_containerId, { callback }) => callback());\n\n            recaptchaChallengeContainer = new DOMParser().parseFromString(\n                '<div style=\"visibility: hidden\"><div><iframe src=\"https://google.com/recaptcha/api2/bframe?query=1\"></div></div>',\n                'text/html',\n            ).body;\n\n            jest.spyOn(googleRecaptchaScriptLoader, 'load').mockResolvedValue(googleRecaptchaMock);\n        });\n\n        it('resets the recaptcha successfully', async () => {\n            const sitekey = 'sitekey';\n\n            document.body.appendChild(recaptchaChallengeContainer);\n            await googleRecaptcha.load(containerId, sitekey);\n\n            expect(document.getElementById(containerId)).toBeTruthy();\n\n            googleRecaptcha.reset(containerId);\n\n            expect(googleRecaptchaMock.reset).toHaveBeenCalled();\n            expect(document.getElementById(containerId)).toBeFalsy();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/spam-protection/google-recaptcha.ts",
    "content": "import { memoize } from '@bigcommerce/memoize';\nimport { defer, Observable, of, Subject, throwError } from 'rxjs';\nimport { catchError, delay, retryWhen, switchMap } from 'rxjs/operators';\n\nimport { MutationObserverFactory } from '../common/dom';\nimport { NotInitializedError, NotInitializedErrorType } from '../common/error/errors';\n\nimport {\n    SpamProtectionChallengeNotCompletedError,\n    SpamProtectionFailedError,\n    SpamProtectionNotLoadedError,\n} from './errors';\nimport GoogleRecaptchaScriptLoader from './google-recaptcha-script-loader';\n\nconst TIMEOUT = 7000;\nconst RETRY_INTERVAL = 250;\nconst MAX_RETRIES = TIMEOUT / RETRY_INTERVAL;\n\nexport interface RecaptchaResult {\n    error?: Error;\n    token?: string;\n}\n\nexport default class GoogleRecaptcha {\n    private _event$?: Subject<RecaptchaResult>;\n    private _recaptcha?: ReCaptchaV2.ReCaptcha;\n    private _memoized: (\n        recaptcha: ReCaptchaV2.ReCaptcha,\n        sitekey: string,\n        container: HTMLElement | null,\n    ) => Subject<RecaptchaResult>;\n    private _widgetId?: number;\n\n    constructor(\n        private googleRecaptchaScriptLoader: GoogleRecaptchaScriptLoader,\n        private mutationObserverFactory: MutationObserverFactory,\n    ) {\n        this._memoized = memoize(\n            (recaptcha: ReCaptchaV2.ReCaptcha, sitekey: string, container: HTMLElement | null) => {\n                const event$ = new Subject<RecaptchaResult>();\n\n                if (!container) {\n                    throw new Error();\n                }\n\n                this._widgetId = recaptcha.render(container.id, {\n                    sitekey,\n                    size: 'invisible',\n                    callback: () => {\n                        event$.next({\n                            token: recaptcha.getResponse(this._widgetId),\n                        });\n                        recaptcha.reset(this._widgetId);\n                    },\n                    'error-callback': () => {\n                        event$.next({\n                            error: new SpamProtectionFailedError(),\n                        });\n                    },\n                });\n\n                return event$;\n            },\n            { isEqual: (a, b) => a === b },\n        );\n    }\n\n    load(containerId: string, sitekey: string): Promise<void> {\n        return this.googleRecaptchaScriptLoader\n            .load()\n            .then((recaptcha) => {\n                if (recaptcha) {\n                    this._event$ = this._memoized(\n                        recaptcha,\n                        sitekey,\n                        document.getElementById(containerId),\n                    );\n                    this._recaptcha = recaptcha;\n                }\n            })\n            .catch((err) => {\n                throw err;\n            });\n    }\n\n    reset(containerId: string): void {\n        const element = document.getElementById(containerId);\n\n        element?.remove();\n        this._recaptcha?.reset(this._widgetId);\n    }\n\n    execute(): Observable<RecaptchaResult> {\n        return defer(() => {\n            const event$ = this._event$;\n            const recaptcha = this._recaptcha;\n\n            if (!event$ || !recaptcha) {\n                throw new NotInitializedError(NotInitializedErrorType.SpamProtectionNotInitialized);\n            }\n\n            return defer(() => {\n                const element = document.querySelector('iframe[src*=\"bframe\"]');\n\n                return element ? of(element) : throwError(new SpamProtectionNotLoadedError());\n            }).pipe(\n                retryWhen((errors) =>\n                    errors.pipe(\n                        delay(RETRY_INTERVAL),\n                        switchMap((error, index) =>\n                            index < MAX_RETRIES ? of(error) : throwError(error),\n                        ),\n                    ),\n                ),\n                switchMap((element) => {\n                    this._watchRecaptchaChallengeWindow(event$, element);\n                    recaptcha.execute(this._widgetId);\n\n                    return event$;\n                }),\n                catchError((error) => of({ error })),\n            );\n        });\n    }\n\n    private _watchRecaptchaChallengeWindow(event: Subject<RecaptchaResult>, element: Element) {\n        const iframeContainer = element.parentElement;\n\n        if (!iframeContainer) {\n            throw new SpamProtectionNotLoadedError();\n        }\n\n        const container = iframeContainer.parentElement;\n\n        if (!container) {\n            throw new SpamProtectionNotLoadedError();\n        }\n\n        this.mutationObserverFactory\n            .create(() => {\n                // When customer closes the Google ReCaptcha challenge window, throw SpamProtectionNotCompletedError\n                if (container.style.visibility === 'hidden') {\n                    event.next({\n                        error: new SpamProtectionChallengeNotCompletedError(),\n                    });\n                }\n            })\n            .observe(container, { attributes: true, attributeFilter: ['style'] });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/index.ts",
    "content": "export * from './spam-protection-actions';\nexport * from './spam-protection-options';\n\nexport { default as createSpamProtection } from './create-spam-protection';\nexport { default as PaymentHumanVerificationHandler } from './payment-human-verification-handler';\nexport { default as GoogleRecaptcha } from './google-recaptcha';\nexport { default as SpamProtectionActionCreator } from './spam-protection-action-creator';\nexport { default as SpamProtectionRequestSender } from './spam-protection-request-sender';\nexport { default as isSpamProtectionExecuteSucceededAction } from './is-spam-protection-succeeded-action';\nexport {\n    default as GoogleRecaptchaScriptLoader,\n    GoogleRecaptchaWindow,\n} from './google-recaptcha-script-loader';\n"
  },
  {
    "path": "packages/core/src/spam-protection/is-spam-protection-succeeded-action.ts",
    "content": "import { ExecuteSucceededAction, SpamProtectionAction } from './spam-protection-actions';\n\nexport default function isSpamProtectionExecuteSucceededAction(\n    action: SpamProtectionAction,\n): action is ExecuteSucceededAction {\n    const succeededAction = action as ExecuteSucceededAction;\n\n    return (\n        typeof succeededAction === 'object' &&\n        typeof succeededAction.payload === 'object' &&\n        typeof succeededAction.payload.token === 'string'\n    );\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/payment-human-verification-handler.spec.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\nimport { ReplaySubject, Subject } from 'rxjs';\n\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse, getErrorResponseBody } from '../common/http-request/responses.mock';\n\nimport createSpamProtection from './create-spam-protection';\nimport {\n    CardingProtectionChallengeNotCompletedError,\n    CardingProtectionFailedError,\n    SpamProtectionChallengeNotCompletedError,\n} from './errors';\nimport GoogleRecaptcha, { RecaptchaResult } from './google-recaptcha';\n\nimport { PaymentHumanVerificationHandler } from '.';\n\ndescribe('PaymentHumanVerificationHandler', () => {\n    let paymentHumanVerificationHandler: PaymentHumanVerificationHandler;\n    let googleRecaptcha: GoogleRecaptcha;\n    let $event: Subject<RecaptchaResult>;\n    let errorResponse: RequestError;\n\n    beforeEach(() => {\n        errorResponse = {\n            ...getErrorResponse(),\n            body: {\n                ...getErrorResponseBody(),\n                status: 'additional_action_required',\n                additional_action_required: {\n                    type: 'recaptcha_v2_verification',\n                    data: {\n                        key: 'recaptchakey123',\n                    },\n                },\n            },\n            errors: [],\n            name: '',\n            type: '',\n            message: '',\n        };\n        googleRecaptcha = createSpamProtection(new ScriptLoader());\n        paymentHumanVerificationHandler = new PaymentHumanVerificationHandler(googleRecaptcha);\n        jest.spyOn(googleRecaptcha, 'load').mockReturnValue(Promise.resolve());\n        $event = new ReplaySubject<RecaptchaResult>();\n        jest.spyOn(googleRecaptcha, 'execute').mockReturnValue($event);\n    });\n\n    describe('handle()', () => {\n        it('runs _initialize() - creates a div container for GoogleRecaptcha rendering', () => {\n            paymentHumanVerificationHandler.handle(errorResponse);\n\n            expect(document.getElementById('cardingProtectionContainer')).toBeDefined();\n        });\n\n        it('runs _initialize() - loads GoogleRecaptcha using the provided site key', () => {\n            paymentHumanVerificationHandler.handle(errorResponse);\n\n            expect(googleRecaptcha.load).toHaveBeenCalledWith(\n                'cardingProtectionContainer',\n                'recaptchakey123',\n            );\n        });\n\n        it(\"throws the error if it's not a payment human verification request error\", () => {\n            errorResponse.body.status = 'some_other_error';\n\n            return expect(paymentHumanVerificationHandler.handle(errorResponse)).rejects.toEqual(\n                errorResponse,\n            );\n        });\n\n        it('returns the correct payment additional action', () => {\n            $event.next({ token: 'googleRecaptchaToken' });\n\n            return expect(paymentHumanVerificationHandler.handle(errorResponse)).resolves.toEqual({\n                type: 'recaptcha_v2_verification',\n                data: {\n                    human_verification_token: 'googleRecaptchaToken',\n                },\n            });\n        });\n\n        it('throws CardingProtectionChallengeNotCompletedError if challenge not completed', () => {\n            $event.next({ error: new SpamProtectionChallengeNotCompletedError() });\n\n            return expect(paymentHumanVerificationHandler.handle(errorResponse)).rejects.toThrow(\n                new CardingProtectionChallengeNotCompletedError(),\n            );\n        });\n\n        it('throws CardingProtectionFailedError if no token is returned', () => {\n            $event.next({ token: undefined });\n\n            return expect(paymentHumanVerificationHandler.handle(errorResponse)).rejects.toThrow(\n                new CardingProtectionFailedError(),\n            );\n        });\n\n        it('rethrows error if error is not human verification error', () => {\n            const error = new Error('foobar');\n\n            expect(paymentHumanVerificationHandler.handle(error)).rejects.toThrow(error);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/spam-protection/payment-human-verification-handler.ts",
    "content": "import { switchMap, take } from 'rxjs/operators';\n\nimport { RequestError } from '../common/error/errors';\nimport { PaymentAdditionalAction } from '../payment';\n\nimport {\n    CardingProtectionChallengeNotCompletedError,\n    CardingProtectionFailedError,\n    SpamProtectionChallengeNotCompletedError,\n} from './errors';\nimport GoogleRecaptcha from './google-recaptcha';\n\nexport default class PaymentHumanVerificationHandler {\n    constructor(private _googleRecaptcha: GoogleRecaptcha) {}\n\n    handle(error: any): Promise<PaymentAdditionalAction>;\n    handle(id: string, key: string): Promise<PaymentAdditionalAction>;\n    async handle(errorOrId: Error | string, key?: string): Promise<PaymentAdditionalAction> {\n        if (typeof errorOrId === 'string') {\n            return this.handleWithRecaptchaSitekey(errorOrId, key);\n        }\n\n        return this.handleWithPaymentHumanVerificationRequestError(errorOrId);\n    }\n\n    private async handleWithPaymentHumanVerificationRequestError(\n        error: Error,\n    ): Promise<PaymentAdditionalAction> {\n        if (!this._isPaymentHumanVerificationRequest(error)) {\n            throw error;\n        }\n\n        await this._initialize(error.body.additional_action_required.data.key);\n\n        return this._performRecaptcha();\n    }\n\n    private async handleWithRecaptchaSitekey(\n        id: string,\n        key?: string,\n    ): Promise<PaymentAdditionalAction> {\n        if (id !== 'recaptcha_v2') {\n            throw Error('Human verification method is not supported.');\n        }\n\n        if (!key) {\n            throw Error('Recaptcha site key is missing.');\n        }\n\n        await this._initialize(key);\n\n        return this._performRecaptcha();\n    }\n\n    private _performRecaptcha(): Promise<PaymentAdditionalAction> {\n        return this._googleRecaptcha\n            .execute()\n            .pipe(take(1))\n            .pipe(\n                switchMap(async ({ error, token }) => {\n                    if (error instanceof SpamProtectionChallengeNotCompletedError) {\n                        throw new CardingProtectionChallengeNotCompletedError();\n                    }\n\n                    if (error || !token) {\n                        throw new CardingProtectionFailedError();\n                    }\n\n                    return {\n                        type: 'recaptcha_v2_verification',\n                        data: {\n                            human_verification_token: token,\n                        },\n                    };\n                }),\n            )\n            .toPromise();\n    }\n\n    private _initialize(recaptchaSitekey: string): Promise<void> {\n        const cardingProtectionElementId = 'cardingProtectionContainer';\n\n        let cardingProtectionElement = document.getElementById(cardingProtectionElementId);\n\n        if (cardingProtectionElement && cardingProtectionElement.parentNode) {\n            cardingProtectionElement.parentNode.removeChild(cardingProtectionElement);\n        }\n\n        cardingProtectionElement = document.createElement('div');\n        cardingProtectionElement.setAttribute('id', cardingProtectionElementId);\n        document.body.appendChild(cardingProtectionElement);\n\n        return this._googleRecaptcha.load(cardingProtectionElementId, recaptchaSitekey);\n    }\n\n    private _isPaymentHumanVerificationRequest(error: Error): error is RequestError {\n        const { additional_action_required, status } = (error as RequestError).body || {};\n\n        return (\n            status === 'additional_action_required' &&\n            additional_action_required &&\n            additional_action_required.type === 'recaptcha_v2_verification'\n        );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/spam-protection-action-creator.spec.ts",
    "content": "import { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { ScriptLoader } from '@bigcommerce/script-loader';\nimport { merge } from 'lodash';\nimport { from, of, ReplaySubject, Subject } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { Checkout, CheckoutStore, CheckoutStoreState, createCheckoutStore } from '../checkout';\nimport { getCheckout, getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { getResponse } from '../common/http-request/responses.mock';\nimport { getConfigState } from '../config/configs.mock';\n\nimport createSpamProtection from './create-spam-protection';\nimport { SpamProtectionChallengeNotCompletedError, SpamProtectionFailedError } from './errors';\nimport GoogleRecaptcha, { RecaptchaResult } from './google-recaptcha';\nimport SpamProtectionActionCreator from './spam-protection-action-creator';\nimport { SpamProtectionActionType } from './spam-protection-actions';\nimport { SpamProtectionOptions } from './spam-protection-options';\nimport SpamProtectionRequestSender from './spam-protection-request-sender';\n\ndescribe('SpamProtectionActionCreator', () => {\n    let spamProtectionActionCreator: SpamProtectionActionCreator;\n    let spamProtectionRequestSender: SpamProtectionRequestSender;\n    let googleRecaptcha: GoogleRecaptcha;\n    let response: Response<Checkout>;\n    let state: CheckoutStoreState;\n    let store: CheckoutStore;\n    let $event: Subject<RecaptchaResult>;\n\n    beforeEach(() => {\n        state = getCheckoutStoreState();\n        store = createCheckoutStore(state);\n        googleRecaptcha = createSpamProtection(new ScriptLoader());\n        response = getResponse(getCheckout());\n        spamProtectionRequestSender = new SpamProtectionRequestSender(createRequestSender());\n        spamProtectionActionCreator = new SpamProtectionActionCreator(\n            googleRecaptcha,\n            spamProtectionRequestSender,\n        );\n        jest.spyOn(googleRecaptcha, 'load').mockReturnValue(Promise.resolve());\n        $event = new ReplaySubject<RecaptchaResult>();\n        jest.spyOn(googleRecaptcha, 'execute').mockReturnValue($event);\n        jest.spyOn(spamProtectionRequestSender, 'validate').mockReturnValue(\n            Promise.resolve(response),\n        );\n    });\n\n    describe('#initialize()', () => {\n        let options: SpamProtectionOptions;\n\n        beforeEach(() => {\n            options = {\n                containerId: 'spamProtection',\n            };\n        });\n\n        it('emits actions if able to initialize spam protection', async () => {\n            const actions = await from(spamProtectionActionCreator.initialize(options)(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: SpamProtectionActionType.InitializeRequested },\n                { type: SpamProtectionActionType.InitializeSucceeded },\n            ]);\n        });\n\n        it('emits actions if able to initialize spam protection without options', async () => {\n            const actions = await from(spamProtectionActionCreator.initialize()(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: SpamProtectionActionType.InitializeRequested },\n                { type: SpamProtectionActionType.InitializeSucceeded },\n            ]);\n        });\n\n        it('emits error actions if unable to initialize spam protection', async () => {\n            jest.spyOn(googleRecaptcha, 'load').mockReturnValue(Promise.reject());\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            const actions = await from(spamProtectionActionCreator.initialize(options)(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n\n            expect(actions).toEqual([\n                { type: SpamProtectionActionType.InitializeRequested },\n                {\n                    type: SpamProtectionActionType.InitializeFailed,\n                    error: true,\n                },\n            ]);\n        });\n\n        it('emits actions if able to initialize spam protection', async () => {\n            const actions = await from(spamProtectionActionCreator.initialize(options)(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual([\n                { type: SpamProtectionActionType.InitializeRequested },\n                { type: SpamProtectionActionType.InitializeSucceeded },\n            ]);\n        });\n    });\n\n    describe('#execute()', () => {\n        it('emits actions if able to execute spam check', async () => {\n            $event.next({ token: 'spamProtectionToken' });\n\n            const actions = await from(spamProtectionActionCreator.execute()(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual(\n                expect.arrayContaining([\n                    { type: SpamProtectionActionType.ExecuteRequested },\n                    { type: SpamProtectionActionType.InitializeRequested },\n                    { type: SpamProtectionActionType.InitializeSucceeded },\n                    {\n                        type: SpamProtectionActionType.ExecuteSucceeded,\n                        payload: { token: 'spamProtectionToken' },\n                    },\n                ]),\n            );\n        });\n\n        it('emits actions if able to execute spam protection again', async () => {\n            const configState = getConfigState();\n\n            const stateWithExperiment = {\n                ...state,\n                config: configState,\n            };\n\n            store = createCheckoutStore(stateWithExperiment);\n            $event.next({ token: 'spamProtectionToken' });\n\n            const actions = await from(spamProtectionActionCreator.execute()(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions).toEqual(\n                expect.arrayContaining([\n                    { type: SpamProtectionActionType.ExecuteRequested },\n                    { type: SpamProtectionActionType.InitializeRequested },\n                    { type: SpamProtectionActionType.InitializeSucceeded },\n                    {\n                        type: SpamProtectionActionType.ExecuteSucceeded,\n                        payload: { token: 'spamProtectionToken' },\n                    },\n                ]),\n            );\n\n            const actions2 = await from(spamProtectionActionCreator.execute()(store))\n                .pipe(toArray())\n                .toPromise();\n\n            expect(actions2).toEqual(\n                expect.arrayContaining([\n                    { type: SpamProtectionActionType.ExecuteRequested },\n                    { type: SpamProtectionActionType.InitializeRequested },\n                    { type: SpamProtectionActionType.InitializeSucceeded },\n                    {\n                        type: SpamProtectionActionType.ExecuteSucceeded,\n                        payload: { token: 'spamProtectionToken' },\n                    },\n                ]),\n            );\n        });\n\n        it('emits error action if unable to execute spam protection due to cancellation', async () => {\n            const error = new SpamProtectionChallengeNotCompletedError();\n\n            $event.next({ error });\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(spamProtectionActionCreator.execute()(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual([\n                { type: SpamProtectionActionType.ExecuteRequested },\n                { type: SpamProtectionActionType.InitializeRequested },\n                { type: SpamProtectionActionType.InitializeSucceeded },\n                {\n                    type: SpamProtectionActionType.ExecuteFailed,\n                    payload: error,\n                    error: true,\n                },\n            ]);\n        });\n\n        it('emits error actions if unable to execute spam protection due to unknown error', async () => {\n            $event.next({ error: new Error() });\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(spamProtectionActionCreator.execute()(store))\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual(\n                expect.arrayContaining([\n                    { type: SpamProtectionActionType.ExecuteRequested },\n                    { type: SpamProtectionActionType.InitializeRequested },\n                    { type: SpamProtectionActionType.InitializeSucceeded },\n                    {\n                        type: SpamProtectionActionType.ExecuteFailed,\n                        payload: expect.any(SpamProtectionFailedError),\n                        error: true,\n                    },\n                ]),\n            );\n        });\n    });\n\n    describe('#verifyCheckoutSpamProtection()', () => {\n        it('emits actions if able to execute spam check', async () => {\n            const store = createCheckoutStore(\n                merge({}, getCheckoutStoreState(), {\n                    checkout: {\n                        data: {\n                            shouldExecuteSpamCheck: true,\n                        },\n                    },\n                }),\n            );\n\n            $event.next({ token: 'spamProtectionToken' });\n\n            const actions = await from(\n                spamProtectionActionCreator.verifyCheckoutSpamProtection()(store),\n            )\n                .pipe(toArray())\n                .toPromise();\n\n            expect(spamProtectionRequestSender.validate).toHaveBeenCalledWith(\n                getCheckout().id,\n                'spamProtectionToken',\n            );\n\n            expect(actions).toEqual(\n                expect.arrayContaining([\n                    { type: SpamProtectionActionType.VerifyCheckoutRequested },\n                    { type: SpamProtectionActionType.ExecuteRequested },\n                    {\n                        type: SpamProtectionActionType.ExecuteSucceeded,\n                        payload: { token: 'spamProtectionToken' },\n                    },\n                    {\n                        type: SpamProtectionActionType.VerifyCheckoutSucceeded,\n                        payload: response.body,\n                    },\n                ]),\n            );\n        });\n\n        it('emits error actions if unable to execute spam protection due to unknown error', async () => {\n            $event.next({ error: new Error() });\n\n            const errorHandler = jest.fn((action) => of(action));\n            const actions = await from(\n                spamProtectionActionCreator.verifyCheckoutSpamProtection()(store),\n            )\n                .pipe(catchError(errorHandler), toArray())\n                .toPromise();\n\n            expect(errorHandler).toHaveBeenCalled();\n            expect(actions).toEqual(\n                expect.arrayContaining([\n                    {\n                        type: SpamProtectionActionType.ExecuteFailed,\n                        payload: expect.any(SpamProtectionFailedError),\n                        error: true,\n                    },\n                ]),\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/spam-protection/spam-protection-action-creator.ts",
    "content": "import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, from, of } from 'rxjs';\nimport { catchError, switchMap, take } from 'rxjs/operators';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\n\nimport { SpamProtectionChallengeNotCompletedError, SpamProtectionFailedError } from './errors';\nimport GoogleRecaptcha from './google-recaptcha';\nimport isSpamProtectionExecuteSucceededAction from './is-spam-protection-succeeded-action';\nimport { SpamProtectionAction, SpamProtectionActionType } from './spam-protection-actions';\nimport { SpamProtectionOptions } from './spam-protection-options';\nimport SpamProtectionRequestSender from './spam-protection-request-sender';\n\nexport default class SpamProtectionActionCreator {\n    constructor(\n        private _googleRecaptcha: GoogleRecaptcha,\n        private _requestSender: SpamProtectionRequestSender,\n    ) {}\n\n    initialize(\n        options?: SpamProtectionOptions,\n    ): ThunkAction<SpamProtectionAction, InternalCheckoutSelectors> {\n        return (store) => {\n            return concat(\n                of(createAction(SpamProtectionActionType.InitializeRequested, undefined)),\n                defer(async () => {\n                    const spamProtectionElementId = options\n                        ? options.containerId\n                        : 'spamProtectionContainer';\n\n                    const element = document.getElementById(spamProtectionElementId);\n\n                    if (element) {\n                        this._googleRecaptcha.reset(spamProtectionElementId);\n                    }\n\n                    if (!options && !document.getElementById(spamProtectionElementId)) {\n                        const spamProtectionElement = document.createElement('div');\n\n                        spamProtectionElement.setAttribute('id', spamProtectionElementId);\n                        document.body.appendChild(spamProtectionElement);\n                    }\n\n                    const state = store.getState();\n                    const storeConfig = state.config.getStoreConfigOrThrow();\n                    const recaptchaSitekey = storeConfig.checkoutSettings.googleRecaptchaSitekey;\n\n                    await this._googleRecaptcha.load(spamProtectionElementId, recaptchaSitekey);\n\n                    return createAction(SpamProtectionActionType.InitializeSucceeded);\n                }),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(SpamProtectionActionType.InitializeFailed, error),\n                ),\n            );\n        };\n    }\n\n    verifyCheckoutSpamProtection(): ThunkAction<SpamProtectionAction> {\n        return (store) =>\n            defer(() => {\n                const state = store.getState();\n                const checkout = state.checkout.getCheckout();\n\n                if (!checkout) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                }\n\n                return concat(\n                    of(createAction(SpamProtectionActionType.VerifyCheckoutRequested)),\n                    from(this.execute()(store)).pipe(\n                        switchMap((action) => {\n                            if (\n                                !isSpamProtectionExecuteSucceededAction(action) ||\n                                !action.payload\n                            ) {\n                                return of(action);\n                            }\n\n                            return from(\n                                this._requestSender.validate(checkout.id, action.payload.token),\n                            ).pipe(\n                                switchMap(({ body }) =>\n                                    concat(\n                                        of(action),\n                                        of(\n                                            createAction(\n                                                SpamProtectionActionType.VerifyCheckoutSucceeded,\n                                                body,\n                                            ),\n                                        ),\n                                    ),\n                                ),\n                            );\n                        }),\n                    ),\n                ).pipe(\n                    catchError((error) =>\n                        throwErrorAction(SpamProtectionActionType.VerifyCheckoutFailed, error),\n                    ),\n                );\n            });\n    }\n\n    execute(): ThunkAction<SpamProtectionAction, InternalCheckoutSelectors> {\n        return (store) =>\n            concat(\n                of(createAction(SpamProtectionActionType.ExecuteRequested)),\n                this.initialize()(store),\n                this._googleRecaptcha\n                    .execute()\n                    .pipe(take(1))\n                    .pipe(\n                        switchMap(async ({ error, token }) => {\n                            if (error instanceof SpamProtectionChallengeNotCompletedError) {\n                                throw error;\n                            }\n\n                            if (error || !token) {\n                                throw new SpamProtectionFailedError();\n                            }\n\n                            return createAction(SpamProtectionActionType.ExecuteSucceeded, {\n                                token,\n                            });\n                        }),\n                    ),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(SpamProtectionActionType.ExecuteFailed, error),\n                ),\n            );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/spam-protection-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { Checkout } from '../checkout';\n\nexport enum SpamProtectionActionType {\n    InitializeFailed = 'SPAM_PROTECTION_INITIALIZE_FAILED',\n    InitializeSucceeded = 'SPAM_PROTECTION_INITIALIZE_SUCCEEDED',\n    InitializeRequested = 'SPAM_PROTECTION_INITIALIZE_REQUESTED',\n    VerifyCheckoutRequested = 'SPAM_PROTECTION_CHECKOUT_VERIFY_REQUESTED',\n    VerifyCheckoutSucceeded = 'SPAM_PROTECTION_CHECKOUT_VERIFY_SUCCEEDED',\n    VerifyCheckoutFailed = 'SPAM_PROTECTION_CHECKOUT_VERIFY_FAILED',\n    ExecuteRequested = 'SPAM_PROTECTION_EXECUTE_REQUESTED',\n    ExecuteSucceeded = 'SPAM_PROTECTION_EXECUTE_SUCCEEDED',\n    ExecuteFailed = 'SPAM_PROTECTION_EXECUTE_FAILED',\n}\n\nexport type SpamProtectionAction =\n    | InitializeRequestedAction\n    | InitializeSucceededAction\n    | InitializeFailedAction\n    | ExecuteRequestedAction\n    | ExecuteSucceededAction\n    | ExecuteFailedAction\n    | CheckoutVerifyRequestedAction\n    | CheckoutVerifyFailedAction\n    | CheckoutVerifySucceededAction;\n\nexport interface InitializeRequestedAction extends Action {\n    type: SpamProtectionActionType.InitializeRequested;\n}\n\nexport interface InitializeSucceededAction extends Action {\n    type: SpamProtectionActionType.InitializeSucceeded;\n}\n\nexport interface InitializeFailedAction extends Action<Error> {\n    type: SpamProtectionActionType.InitializeFailed;\n}\n\nexport interface ExecuteRequestedAction extends Action {\n    type: SpamProtectionActionType.ExecuteRequested;\n}\n\nexport interface ExecuteSucceededAction extends Action<{ token: string }> {\n    type: SpamProtectionActionType.ExecuteSucceeded;\n}\n\nexport interface ExecuteFailedAction extends Action {\n    type: SpamProtectionActionType.ExecuteFailed;\n}\n\nexport interface CheckoutVerifyRequestedAction extends Action {\n    type: SpamProtectionActionType.VerifyCheckoutRequested;\n}\n\nexport interface CheckoutVerifyFailedAction extends Action<Error> {\n    type: SpamProtectionActionType.VerifyCheckoutFailed;\n}\n\nexport interface CheckoutVerifySucceededAction extends Action<Checkout> {\n    type: SpamProtectionActionType.VerifyCheckoutSucceeded;\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/spam-protection-options.ts",
    "content": "import { RequestOptions } from '@bigcommerce/request-sender';\n\n/**\n * The set of options for configuring any requests related to spam protection.\n */\nexport interface SpamProtectionOptions extends RequestOptions {\n    /**\n     * The container ID where the spam protection should be rendered.\n     */\n    containerId: string;\n}\n"
  },
  {
    "path": "packages/core/src/spam-protection/spam-protection-request-sender.spec.ts",
    "content": "import { createRequestSender, createTimeout, RequestSender } from '@bigcommerce/request-sender';\n\nimport { EmptyCartError } from '../cart/errors';\nimport { getCheckout } from '../checkout/checkouts.mock';\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport SpamProtectionRequestSender from './spam-protection-request-sender';\n\ndescribe('SpamProtection Request Sender', () => {\n    let spamProtectionRequestSender: SpamProtectionRequestSender;\n    let requestSender: RequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        spamProtectionRequestSender = new SpamProtectionRequestSender(requestSender);\n    });\n\n    it('spamProtectionRequestSender is defined', () => {\n        expect(spamProtectionRequestSender).toBeDefined();\n    });\n\n    const checkoutId = 'checkoutId1234';\n    const token = 'spamProtectionToken';\n\n    describe('#validate()', () => {\n        it('validates spam protection', async () => {\n            const response = getResponse(getCheckout());\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n\n            const output = await spamProtectionRequestSender.validate(checkoutId, token);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/spam-protection',\n                {\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    body: {\n                        token,\n                    },\n                },\n            );\n        });\n\n        it('validates spam protection with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const response = getResponse(getCheckout());\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n\n            const output = await spamProtectionRequestSender.validate(checkoutId, token, options);\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/spam-protection',\n                {\n                    ...options,\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    body: {\n                        token,\n                    },\n                },\n            );\n        });\n\n        it('throws `EmptyCartError` if error type is `empty_cart`', async () => {\n            const error = getErrorResponse(\n                {\n                    status: 422,\n                    title: 'The request could not process',\n                    type: 'empty_cart',\n                },\n                undefined,\n                409,\n            );\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.reject(error));\n\n            await expect(spamProtectionRequestSender.validate(checkoutId, token)).rejects.toThrow(\n                EmptyCartError,\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/spam-protection/spam-protection-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { EmptyCartError } from '../cart/errors';\nimport { Checkout } from '../checkout';\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nexport default class SpamProtectionRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    validate(\n        checkoutId: string,\n        token: string,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<Checkout>> {\n        const url = `/api/storefront/checkouts/${checkoutId}/spam-protection`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender\n            .post<Checkout>(url, { body: { token }, headers, timeout })\n            .catch((err) => {\n                if (err.body.type === 'empty_cart') {\n                    throw new EmptyCartError();\n                }\n\n                throw err;\n            });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/store-credit/index.ts",
    "content": "export * from './store-credit-actions';\n\nexport { default as StoreCreditState } from './store-credit-state';\nexport { default as StoreCreditActionCreator } from './store-credit-action-creator';\nexport { default as StoreCreditRequestSender } from './store-credit-request-sender';\nexport { default as storeCreditReducer } from './store-credit-reducer';\nexport {\n    default as StoreCreditSelector,\n    createStoreCreditSelectorFactory,\n} from './store-credit-selector';\n"
  },
  {
    "path": "packages/core/src/store-credit/store-credit-action-creator.spec.ts",
    "content": "import { createRequestSender, Response } from '@bigcommerce/request-sender';\nimport { from, of } from 'rxjs';\nimport { catchError, toArray } from 'rxjs/operators';\n\nimport { Checkout, CheckoutStore, CheckoutStoreState, createCheckoutStore } from '../checkout';\nimport { getCheckout, getCheckoutStoreState } from '../checkout/checkouts.mock';\nimport { getErrorResponse, getResponse } from '../common/http-request/responses.mock';\n\nimport StoreCreditActionCreator from './store-credit-action-creator';\nimport { StoreCreditActionType } from './store-credit-actions';\nimport StoreCreditRequestSender from './store-credit-request-sender';\n\ndescribe('StoreCreditActionCreator', () => {\n    let storeCreditActionCreator: StoreCreditActionCreator;\n    let errorResponse: Response<Error>;\n    let response: Response<Checkout>;\n    let state: CheckoutStoreState;\n    let store: CheckoutStore;\n    let requestSender: StoreCreditRequestSender;\n\n    beforeEach(() => {\n        response = getResponse(getCheckout());\n        errorResponse = getErrorResponse();\n        state = getCheckoutStoreState();\n        store = createCheckoutStore(state);\n        requestSender = new StoreCreditRequestSender(createRequestSender());\n\n        storeCreditActionCreator = new StoreCreditActionCreator(requestSender);\n\n        jest.spyOn(requestSender, 'applyStoreCredit').mockReturnValue(Promise.resolve(response));\n        jest.spyOn(requestSender, 'removeStoreCredit').mockReturnValue(Promise.resolve(response));\n    });\n\n    describe('#applyStoreCredit(true)', () => {\n        beforeEach(() => {\n            jest.spyOn(store, 'dispatch');\n        });\n\n        it('emits ApplyStoreCreditSucceeded actions if able to apply store credit', () => {\n            from(storeCreditActionCreator.applyStoreCredit(true)(store))\n                .pipe(toArray())\n                .subscribe((actions) => {\n                    expect(actions).toEqual([\n                        { type: StoreCreditActionType.ApplyStoreCreditRequested },\n                        {\n                            type: StoreCreditActionType.ApplyStoreCreditSucceeded,\n                            payload: getCheckout(),\n                        },\n                    ]);\n                });\n        });\n\n        it('emits ApplyStoreCreditFailed actions if unable to apply store credit', () => {\n            jest.spyOn(requestSender, 'applyStoreCredit').mockReturnValue(\n                Promise.reject(errorResponse),\n            );\n\n            const errorHandler = jest.fn((action) => of(action));\n\n            from(storeCreditActionCreator.applyStoreCredit(true)(store))\n                .pipe(catchError(errorHandler), toArray())\n                .subscribe((actions) => {\n                    expect(errorHandler).toHaveBeenCalled();\n                    expect(actions).toEqual([\n                        { type: StoreCreditActionType.ApplyStoreCreditRequested },\n                        {\n                            type: StoreCreditActionType.ApplyStoreCreditFailed,\n                            payload: errorResponse,\n                            error: true,\n                        },\n                    ]);\n                });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/store-credit/store-credit-action-creator.ts",
    "content": "import { createAction, ThunkAction } from '@bigcommerce/data-store';\nimport { concat, defer, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { InternalCheckoutSelectors } from '../checkout';\nimport { throwErrorAction } from '../common/error';\nimport { MissingDataError, MissingDataErrorType } from '../common/error/errors';\nimport { RequestOptions } from '../common/http-request';\n\nimport { StoreCreditAction, StoreCreditActionType } from './store-credit-actions';\nimport StoreCreditRequestSender from './store-credit-request-sender';\n\nexport default class StoreCreditActionCreator {\n    constructor(private _storeCreditRequestSender: StoreCreditRequestSender) {}\n\n    applyStoreCredit(\n        useStoreCredit: boolean,\n        options?: RequestOptions,\n    ): ThunkAction<StoreCreditAction, InternalCheckoutSelectors> {\n        return (store) =>\n            concat(\n                of(createAction(StoreCreditActionType.ApplyStoreCreditRequested)),\n                defer(async () => {\n                    const state = store.getState();\n                    const checkout = state.checkout.getCheckout();\n\n                    if (!checkout) {\n                        throw new MissingDataError(MissingDataErrorType.MissingCheckout);\n                    }\n\n                    const { id } = checkout;\n                    const checkoutVersion = options?.version ?? checkout.version;\n\n                    const { body } = await (useStoreCredit\n                        ? this._storeCreditRequestSender.applyStoreCredit(id, {\n                              ...options,\n                              version: checkoutVersion,\n                          })\n                        : this._storeCreditRequestSender.removeStoreCredit(id, {\n                              ...options,\n                              version: checkoutVersion,\n                          }));\n\n                    return createAction(StoreCreditActionType.ApplyStoreCreditSucceeded, body);\n                }),\n            ).pipe(\n                catchError((error) =>\n                    throwErrorAction(StoreCreditActionType.ApplyStoreCreditFailed, error),\n                ),\n            );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/store-credit/store-credit-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { Checkout } from '../checkout';\nimport { RequestError } from '../common/error/errors';\n\nexport enum StoreCreditActionType {\n    ApplyStoreCreditRequested = 'APPLY_STORE_CREDIT_REQUESTED',\n    ApplyStoreCreditSucceeded = 'APPLY_STORE_CREDIT_SUCCEEDED',\n    ApplyStoreCreditFailed = 'APPLY_STORE_CREDIT_FAILED',\n}\n\nexport type StoreCreditAction = ApplyStoreCreditAction;\n\nexport type ApplyStoreCreditAction =\n    | ApplyStoreCreditRequestedAction\n    | ApplyStoreCreditSucceededAction\n    | ApplyStoreCreditFailedAction;\n\nexport interface ApplyStoreCreditRequestedAction extends Action {\n    type: StoreCreditActionType.ApplyStoreCreditRequested;\n}\n\nexport interface ApplyStoreCreditSucceededAction extends Action<Checkout> {\n    type: StoreCreditActionType.ApplyStoreCreditSucceeded;\n}\n\nexport interface ApplyStoreCreditFailedAction\n    extends Action<RequestError<StorefrontErrorResponseBody>> {\n    type: StoreCreditActionType.ApplyStoreCreditFailed;\n}\n"
  },
  {
    "path": "packages/core/src/store-credit/store-credit-reducer.spec.ts",
    "content": "import { createAction, createErrorAction } from '@bigcommerce/data-store';\n\nimport { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\n\nimport { StoreCreditActionType } from './store-credit-actions';\nimport storeCreditReducer from './store-credit-reducer';\nimport StoreCreditState from './store-credit-state';\n\ndescribe('storeCreditReducer()', () => {\n    const initialState: StoreCreditState = { errors: {}, statuses: {} };\n\n    it('returns an error state if store credit failed to be applied', () => {\n        const errorResponseBody: StorefrontErrorResponseBody = {\n            title: '',\n            detail: '',\n            type: '',\n            status: 400,\n        };\n\n        const action = createErrorAction(\n            StoreCreditActionType.ApplyStoreCreditFailed,\n            new RequestError(getErrorResponse(errorResponseBody)),\n        );\n\n        expect(storeCreditReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                errors: { applyError: action.payload },\n                statuses: { isApplying: false },\n            }),\n        );\n    });\n\n    it('returns new state while applying store credit', () => {\n        const action = createAction(StoreCreditActionType.ApplyStoreCreditRequested);\n\n        expect(storeCreditReducer(initialState, action)).toEqual(\n            expect.objectContaining({\n                statuses: { isApplying: true },\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/core/src/store-credit/store-credit-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectSet } from '../common/utility';\n\nimport { StoreCreditAction, StoreCreditActionType } from './store-credit-actions';\nimport StoreCreditState, {\n    StoreCreditErrorsState,\n    StoreCreditStatusesState,\n} from './store-credit-state';\n\nconst DEFAULT_STATE: StoreCreditState = {\n    errors: {},\n    statuses: {},\n};\n\nexport default function storeCreditReducer(\n    state: StoreCreditState = DEFAULT_STATE,\n    action: Action,\n): StoreCreditState {\n    const reducer = combineReducers<StoreCreditState>({\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction errorsReducer(\n    errors: StoreCreditErrorsState = DEFAULT_STATE.errors,\n    action: StoreCreditAction,\n): StoreCreditErrorsState {\n    switch (action.type) {\n        case StoreCreditActionType.ApplyStoreCreditRequested:\n        case StoreCreditActionType.ApplyStoreCreditSucceeded:\n            return objectSet(errors, 'applyError', undefined);\n\n        case StoreCreditActionType.ApplyStoreCreditFailed:\n            return objectSet(errors, 'applyError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: StoreCreditStatusesState = DEFAULT_STATE.statuses,\n    action: StoreCreditAction,\n): StoreCreditStatusesState {\n    switch (action.type) {\n        case StoreCreditActionType.ApplyStoreCreditRequested:\n            return objectSet(statuses, 'isApplying', true);\n\n        case StoreCreditActionType.ApplyStoreCreditSucceeded:\n        case StoreCreditActionType.ApplyStoreCreditFailed:\n            return objectSet(statuses, 'isApplying', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/store-credit/store-credit-request-sender.spec.ts",
    "content": "import { createRequestSender, createTimeout, RequestSender } from '@bigcommerce/request-sender';\n\nimport { getCheckout } from '../checkout/checkouts.mock';\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\nimport { getResponse } from '../common/http-request/responses.mock';\n\nimport StoreCreditRequestSender from './store-credit-request-sender';\n\ndescribe('StoreCredit Request Sender', () => {\n    let storeCreditRequestSender: StoreCreditRequestSender;\n    let requestSender: RequestSender;\n    const defaultIncludes = [\n        'cart.lineItems.physicalItems.options',\n        'cart.lineItems.physicalItems.stockPosition',\n        'cart.lineItems.digitalItems.options',\n        'cart.lineItems.digitalItems.stockPosition',\n        'customer',\n        'customer.customerGroup',\n        'payments',\n        'promotions.banners',\n    ].join(',');\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        storeCreditRequestSender = new StoreCreditRequestSender(requestSender);\n    });\n\n    it('storeCreditRequestSender is defined', () => {\n        expect(storeCreditRequestSender).toBeDefined();\n    });\n\n    const checkoutId = 'checkoutId1234';\n\n    describe('#applyStoreCredit()', () => {\n        it('applies store credit', async () => {\n            const response = getResponse(getCheckout());\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n\n            const output = await storeCreditRequestSender.applyStoreCredit(checkoutId, {\n                version: 1,\n            });\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/store-credit',\n                {\n                    params: {\n                        include: defaultIncludes,\n                    },\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    timeout: undefined,\n                    body: { version: 1 },\n                },\n            );\n        });\n\n        it('applies store credit with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const response = getResponse(getCheckout());\n\n            jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(response));\n\n            const output = await storeCreditRequestSender.applyStoreCredit(checkoutId, {\n                ...options,\n                version: 1,\n            });\n\n            expect(output).toEqual(response);\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/store-credit',\n                {\n                    ...options,\n                    params: {\n                        include: defaultIncludes,\n                    },\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    body: { version: 1 },\n                },\n            );\n        });\n    });\n\n    describe('#removeStoreCredit()', () => {\n        it('removes store credit', async () => {\n            const response = getResponse(getCheckout());\n\n            jest.spyOn(requestSender, 'delete').mockReturnValue(Promise.resolve(response));\n\n            const output = await storeCreditRequestSender.removeStoreCredit(checkoutId, {\n                version: 1,\n            });\n\n            expect(output).toEqual(response);\n            expect(requestSender.delete).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/store-credit',\n                {\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include: defaultIncludes,\n                    },\n                    timeout: undefined,\n                    body: { version: 1 },\n                },\n            );\n        });\n\n        it('removes store credit with timeout', async () => {\n            const options = { timeout: createTimeout() };\n            const response = getResponse(getCheckout());\n\n            jest.spyOn(requestSender, 'delete').mockReturnValue(Promise.resolve(response));\n\n            const output = await storeCreditRequestSender.removeStoreCredit(checkoutId, {\n                ...options,\n                version: 1,\n            });\n\n            expect(output).toEqual(response);\n            expect(requestSender.delete).toHaveBeenCalledWith(\n                '/api/storefront/checkouts/checkoutId1234/store-credit',\n                {\n                    ...options,\n                    headers: {\n                        Accept: ContentType.JsonV1,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                    params: {\n                        include: defaultIncludes,\n                    },\n                    body: { version: 1 },\n                },\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/store-credit/store-credit-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { Checkout, CHECKOUT_DEFAULT_INCLUDES } from '../checkout';\nimport {\n    ContentType,\n    joinIncludes,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '../common/http-request';\n\nexport default class StoreCreditRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    applyStoreCredit(\n        checkoutId: string,\n        { timeout, version }: RequestOptions = {},\n    ): Promise<Response<Checkout>> {\n        const url = `/api/storefront/checkouts/${checkoutId}/store-credit`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender.post(url, {\n            headers,\n            timeout,\n            params: {\n                include: joinIncludes(CHECKOUT_DEFAULT_INCLUDES),\n            },\n            body: { version },\n        });\n    }\n\n    removeStoreCredit(\n        checkoutId: string,\n        { timeout, version }: RequestOptions = {},\n    ): Promise<Response<Checkout>> {\n        const url = `/api/storefront/checkouts/${checkoutId}/store-credit`;\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender.delete(url, {\n            headers,\n            timeout,\n            params: {\n                include: joinIncludes(CHECKOUT_DEFAULT_INCLUDES),\n            },\n            body: { version },\n        });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/store-credit/store-credit-selector.spec.ts",
    "content": "import { RequestError } from '../common/error/errors';\n\nimport StoreCreditSelector, {\n    createStoreCreditSelectorFactory,\n    StoreCreditSelectorFactory,\n} from './store-credit-selector';\nimport StoreCreditState from './store-credit-state';\n\ndescribe('StoreCreditSelector', () => {\n    let selector: StoreCreditSelector;\n    let createStoreCreditSelector: StoreCreditSelectorFactory;\n    let state: StoreCreditState;\n\n    beforeEach(() => {\n        createStoreCreditSelector = createStoreCreditSelectorFactory();\n        state = {\n            errors: {},\n            statuses: {},\n        };\n    });\n\n    describe('#getApplyError()', () => {\n        it('returns error if unable to apply', () => {\n            const applyError = new RequestError();\n\n            selector = createStoreCreditSelector({\n                ...state,\n                errors: { applyError },\n            });\n\n            expect(selector.getApplyError()).toEqual(applyError);\n        });\n\n        it('does not returns error if able to apply', () => {\n            selector = createStoreCreditSelector(state);\n\n            expect(selector.getApplyError()).toBeUndefined();\n        });\n    });\n\n    describe('#isApplying()', () => {\n        it('returns true if applying a coupon', () => {\n            selector = createStoreCreditSelector({\n                ...state,\n                statuses: { isApplying: true },\n            });\n\n            expect(selector.isApplying()).toBe(true);\n        });\n\n        it('returns false if not applying a coupon', () => {\n            selector = createStoreCreditSelector(state);\n\n            expect(selector.isApplying()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/store-credit/store-credit-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { RequestError } from '../common/error/errors';\nimport { createSelector } from '../common/selector';\n\nimport StoreCreditState, { DEFAULT_STATE } from './store-credit-state';\n\nexport default interface StoreCreditSelector {\n    getApplyError(): RequestError | undefined;\n    isApplying(): boolean;\n}\n\nexport type StoreCreditSelectorFactory = (state: StoreCreditState) => StoreCreditSelector;\n\nexport function createStoreCreditSelectorFactory(): StoreCreditSelectorFactory {\n    const getApplyError = createSelector(\n        (state: StoreCreditState) => state.errors.applyError,\n        (error) => () => error,\n    );\n\n    const isApplying = createSelector(\n        (state: StoreCreditState) => !!state.statuses.isApplying,\n        (status) => () => status,\n    );\n\n    return memoizeOne((state: StoreCreditState = DEFAULT_STATE): StoreCreditSelector => {\n        return {\n            getApplyError: getApplyError(state),\n            isApplying: isApplying(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/store-credit/store-credit-state.ts",
    "content": "import { StorefrontErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { RequestError } from '../common/error/errors';\n\nexport default interface StoreCreditState {\n    errors: StoreCreditErrorsState;\n    statuses: StoreCreditStatusesState;\n}\n\nexport interface StoreCreditErrorsState {\n    applyError?: RequestError<StorefrontErrorResponseBody>;\n}\n\nexport interface StoreCreditStatusesState {\n    isApplying?: boolean;\n}\n\nexport const DEFAULT_STATE: StoreCreditState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/subscription/errors/index.ts",
    "content": "export { default as UpdateSubscriptionsError } from './update-subscriptions-error';\n"
  },
  {
    "path": "packages/core/src/subscription/errors/update-subscriptions-error.ts",
    "content": "import { RequestError } from '../../common/error/errors';\n\n/**\n * This error should be thrown when the subscriptions fails to be updated\n */\nexport default class UpdateSubscriptionsError extends RequestError {\n    constructor(response?: Response) {\n        super(response);\n\n        this.name = 'UpdateSubscriptionsError';\n        this.type = 'update_subscriptions';\n    }\n}\n"
  },
  {
    "path": "packages/core/src/subscription/index.ts",
    "content": "export * from './subscriptions-actions';\nexport { Subscriptions } from './subscriptions';\n\nexport { default as SubscriptionsRequestSender } from './subscriptions-request-sender';\nexport { default as SubscriptionsActionCreator } from './subscriptions-action-creator';\nexport { default as SubscriptionsState } from './subscriptions-state';\nexport { default as subscriptionsReducer } from './subscriptions-reducer';\nexport {\n    default as SubscriptionsSelector,\n    SubscriptionsSelectorFactory,\n    createSubscriptionsSelectorFactory,\n} from './subscriptions-selector';\n"
  },
  {
    "path": "packages/core/src/subscription/subscriptions-action-creator.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\nimport { concat, defer, Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { throwErrorAction } from '../common/error';\nimport { RequestOptions } from '../common/http-request';\nimport {\n    Subscriptions,\n    SubscriptionsActionType,\n    SubscriptionsRequestSender,\n    UpdateSubscriptionsAction,\n} from '../subscription';\n\nimport { UpdateSubscriptionsError } from './errors';\n\nexport default class SubscriptionsActionCreator {\n    constructor(private _subscriptionsRequestSender: SubscriptionsRequestSender) {}\n\n    updateSubscriptions(\n        subscriptions: Subscriptions,\n        options?: RequestOptions,\n    ): Observable<UpdateSubscriptionsAction> {\n        return concat(\n            of(createAction(SubscriptionsActionType.UpdateSubscriptionsRequested)),\n            defer(async () => {\n                const { body } = await this._subscriptionsRequestSender.updateSubscriptions(\n                    subscriptions,\n                    options,\n                );\n\n                return createAction(SubscriptionsActionType.UpdateSubscriptionsSucceeded, body);\n            }),\n        ).pipe(\n            catchError((error) =>\n                throwErrorAction(\n                    SubscriptionsActionType.UpdateSubscriptionsFailed,\n                    new UpdateSubscriptionsError(error),\n                ),\n            ),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/core/src/subscription/subscriptions-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { Subscriptions } from './subscriptions';\n\nexport enum SubscriptionsActionType {\n    UpdateSubscriptionsRequested = 'UPDATE_SUBSCRIPTIONS_REQUESTED',\n    UpdateSubscriptionsSucceeded = 'UPDATE_SUBSCRIPTIONS_SUCCEEDED',\n    UpdateSubscriptionsFailed = 'UPDATE_SUBSCRIPTIONS_FAILED',\n}\nexport type UpdateSubscriptionsAction =\n    | UpdateSubscriptionsRequestedAction\n    | UpdateSubscriptionsSucceededAction\n    | UpdateSubscriptionsFailedAction;\n\nexport interface UpdateSubscriptionsRequestedAction extends Action {\n    type: SubscriptionsActionType.UpdateSubscriptionsRequested;\n}\n\nexport interface UpdateSubscriptionsSucceededAction extends Action<Subscriptions> {\n    type: SubscriptionsActionType.UpdateSubscriptionsSucceeded;\n}\n\nexport interface UpdateSubscriptionsFailedAction extends Action<Error> {\n    type: SubscriptionsActionType.UpdateSubscriptionsFailed;\n}\n"
  },
  {
    "path": "packages/core/src/subscription/subscriptions-reducer.spec.ts",
    "content": "import { createAction } from '@bigcommerce/data-store';\n\nimport { RequestError } from '../common/error/errors';\nimport { getErrorResponse } from '../common/http-request/responses.mock';\nimport { SubscriptionsActionType } from '../subscription';\n\nimport subscriptionsReducer from './subscriptions-reducer';\nimport SubscriptionsState from './subscriptions-state';\n\ndescribe('subscriptionsReducer', () => {\n    let initialState: SubscriptionsState;\n\n    beforeEach(() => {\n        initialState = { errors: {}, statuses: {} };\n    });\n\n    it('returns pending when subscriptions update requested', () => {\n        const action = createAction(SubscriptionsActionType.UpdateSubscriptionsRequested);\n        const output = subscriptionsReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { updateError: undefined },\n            statuses: { isUpdating: true },\n        });\n    });\n\n    it('returns clean state when subscriptions updated', () => {\n        const action = createAction(SubscriptionsActionType.UpdateSubscriptionsSucceeded, {});\n        const output = subscriptionsReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { updateError: undefined },\n            statuses: { isUpdating: false },\n        });\n    });\n\n    it('returns error when subscriptions failed to update', () => {\n        const action = createAction(\n            SubscriptionsActionType.UpdateSubscriptionsFailed,\n            new RequestError(getErrorResponse()),\n        );\n        const output = subscriptionsReducer(initialState, action);\n\n        expect(output).toEqual({\n            errors: { updateError: action.payload },\n            statuses: { isUpdating: false },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/subscription/subscriptions-reducer.ts",
    "content": "import { Action, combineReducers, composeReducers } from '@bigcommerce/data-store';\n\nimport { clearErrorReducer } from '../common/error';\nimport { objectSet } from '../common/utility';\nimport { SubscriptionsActionType, UpdateSubscriptionsAction } from '../subscription';\n\nimport SubscriptionsState, {\n    DEFAULT_STATE,\n    SubscriptionsErrorsState,\n    SubscriptionsStatusesState,\n} from './subscriptions-state';\n\nexport default function subscriptionsReducer(\n    state: SubscriptionsState = DEFAULT_STATE,\n    action: Action,\n): SubscriptionsState {\n    const reducer = combineReducers<SubscriptionsState>({\n        errors: composeReducers(errorsReducer, clearErrorReducer),\n        statuses: statusesReducer,\n    });\n\n    return reducer(state, action);\n}\n\nfunction errorsReducer(\n    errors: SubscriptionsErrorsState = DEFAULT_STATE.errors,\n    action: UpdateSubscriptionsAction,\n): SubscriptionsErrorsState {\n    switch (action.type) {\n        case SubscriptionsActionType.UpdateSubscriptionsRequested:\n        case SubscriptionsActionType.UpdateSubscriptionsSucceeded:\n            return objectSet(errors, 'updateError', undefined);\n\n        case SubscriptionsActionType.UpdateSubscriptionsFailed:\n            return objectSet(errors, 'updateError', action.payload);\n\n        default:\n            return errors;\n    }\n}\n\nfunction statusesReducer(\n    statuses: SubscriptionsStatusesState = DEFAULT_STATE.statuses,\n    action: UpdateSubscriptionsAction,\n): SubscriptionsStatusesState {\n    switch (action.type) {\n        case SubscriptionsActionType.UpdateSubscriptionsRequested:\n            return objectSet(statuses, 'isUpdating', true);\n\n        case SubscriptionsActionType.UpdateSubscriptionsFailed:\n        case SubscriptionsActionType.UpdateSubscriptionsSucceeded:\n            return objectSet(statuses, 'isUpdating', false);\n\n        default:\n            return statuses;\n    }\n}\n"
  },
  {
    "path": "packages/core/src/subscription/subscriptions-request-sender.spec.ts",
    "content": "import { createRequestSender, createTimeout, RequestSender } from '@bigcommerce/request-sender';\n\nimport { ContentType, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport { Subscriptions } from './subscriptions';\nimport SubscriptionsRequestSender from './subscriptions-request-sender';\n\ndescribe('SubscriptionsRequestSender', () => {\n    let subscriptionsRequestSender: SubscriptionsRequestSender;\n    let requestSender: RequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve());\n\n        subscriptionsRequestSender = new SubscriptionsRequestSender(requestSender);\n    });\n\n    describe('#updateSubscriptions()', () => {\n        const subscriptionsRequestBody: Subscriptions = {\n            acceptsAbandonedCartEmails: true,\n            acceptsMarketingNewsletter: false,\n            email: 'foo@bar.com',\n        };\n\n        it('signs out customer', async () => {\n            await subscriptionsRequestSender.updateSubscriptions(subscriptionsRequestBody);\n\n            expect(requestSender.post).toHaveBeenCalledWith('/api/storefront/subscriptions', {\n                body: subscriptionsRequestBody,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    ...SDK_VERSION_HEADERS,\n                },\n                timeout: undefined,\n            });\n        });\n\n        it('signs out customer with timeout', async () => {\n            const options = { timeout: createTimeout() };\n\n            await subscriptionsRequestSender.updateSubscriptions(subscriptionsRequestBody, options);\n\n            expect(requestSender.post).toHaveBeenCalledWith('/api/storefront/subscriptions', {\n                ...options,\n                body: subscriptionsRequestBody,\n                headers: {\n                    Accept: ContentType.JsonV1,\n                    ...SDK_VERSION_HEADERS,\n                },\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/subscription/subscriptions-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { ContentType, RequestOptions, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport { Subscriptions } from './subscriptions';\n\nexport default class SubscriptionsRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    updateSubscriptions(\n        subscriptions: Subscriptions,\n        { timeout }: RequestOptions = {},\n    ): Promise<Response<Subscriptions>> {\n        const url = '/api/storefront/subscriptions';\n        const headers = {\n            Accept: ContentType.JsonV1,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        return this._requestSender.post(url, { body: subscriptions, headers, timeout });\n    }\n}\n"
  },
  {
    "path": "packages/core/src/subscription/subscriptions-selector.spec.ts",
    "content": "import SubscriptionsSelector, {\n    createSubscriptionsSelectorFactory,\n    SubscriptionsSelectorFactory,\n} from './subscriptions-selector';\n\ndescribe('SubscriptionsSelector', () => {\n    let subscriptionsSelector: SubscriptionsSelector;\n    let createSubscriptionsSelector: SubscriptionsSelectorFactory;\n\n    beforeEach(() => {\n        createSubscriptionsSelector = createSubscriptionsSelectorFactory();\n    });\n\n    describe('#getUpdateError()', () => {\n        it('returns error if present', () => {\n            const updateError = new Error();\n\n            subscriptionsSelector = createSubscriptionsSelector({\n                errors: { updateError },\n                statuses: {},\n            });\n\n            expect(subscriptionsSelector.getUpdateError()).toEqual(updateError);\n        });\n\n        it('returns no error if not present', () => {\n            subscriptionsSelector = createSubscriptionsSelector({\n                errors: {},\n                statuses: {},\n            });\n\n            expect(subscriptionsSelector.getUpdateError()).toBeUndefined();\n        });\n    });\n\n    describe('#isUpdating()', () => {\n        it('returns true if updating subscriptions', () => {\n            subscriptionsSelector = createSubscriptionsSelector({\n                errors: {},\n                statuses: { isUpdating: true },\n            });\n\n            expect(subscriptionsSelector.isUpdating()).toBe(true);\n        });\n\n        it('returns false if not updating subscriptions', () => {\n            subscriptionsSelector = createSubscriptionsSelector({\n                errors: {},\n                statuses: {},\n            });\n\n            expect(subscriptionsSelector.isUpdating()).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/core/src/subscription/subscriptions-selector.ts",
    "content": "import { memoizeOne } from '@bigcommerce/memoize';\n\nimport { createSelector } from '../common/selector';\n\nimport SubscriptionsState, { DEFAULT_STATE } from './subscriptions-state';\n\nexport default interface SubscriptionsSelector {\n    getUpdateError(): Error | undefined;\n    isUpdating(): boolean;\n}\n\nexport type SubscriptionsSelectorFactory = (state: SubscriptionsState) => SubscriptionsSelector;\n\nexport function createSubscriptionsSelectorFactory(): SubscriptionsSelectorFactory {\n    const getUpdateError = createSelector(\n        (state: SubscriptionsState) => state.errors.updateError,\n        (error) => () => error,\n    );\n\n    const isUpdating = createSelector(\n        (state: SubscriptionsState) => !!state.statuses.isUpdating,\n        (status) => () => status,\n    );\n\n    return memoizeOne((state: SubscriptionsState = DEFAULT_STATE): SubscriptionsSelector => {\n        return {\n            getUpdateError: getUpdateError(state),\n            isUpdating: isUpdating(state),\n        };\n    });\n}\n"
  },
  {
    "path": "packages/core/src/subscription/subscriptions-state.ts",
    "content": "export default interface SubscriptionsState {\n    errors: SubscriptionsErrorsState;\n    statuses: SubscriptionsStatusesState;\n}\n\nexport interface SubscriptionsErrorsState {\n    updateError?: Error;\n}\n\nexport interface SubscriptionsStatusesState {\n    isUpdating?: boolean;\n}\n\nexport const DEFAULT_STATE: SubscriptionsState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/core/src/subscription/subscriptions.ts",
    "content": "export interface Subscriptions {\n    email: string;\n    acceptsMarketingNewsletter: boolean;\n    acceptsAbandonedCartEmails: boolean;\n}\n"
  },
  {
    "path": "packages/core/src/tax/index.ts",
    "content": "export { default as Tax } from './tax';\n"
  },
  {
    "path": "packages/core/src/tax/tax.ts",
    "content": "export default interface Tax {\n    name: string;\n    amount: number;\n}\n"
  },
  {
    "path": "packages/core/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"include\": [\n        \"src/common/types/card-validator.d.ts\",\n        \"src/**/*.ts\",\n    ],\n    \"files\": [\n        \"src/common/types/card-validator.d.ts\",\n        \"src/common/types/webpack.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/core/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"types\": [\"jest\", \"node\"],\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/core/typedoc.json",
    "content": "{\n    \"disableSources\": true,\n    \"excludeExternals\": true,\n    \"excludePrivate\": true,\n    \"excludeProtected\": true,\n    \"out\": \"../../docs\",\n    \"readme\": \"none\"\n}\n"
  },
  {
    "path": "packages/credit-card-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/credit-card-integration/README.md",
    "content": "# credit-card-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test credit-card-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint credit-card-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/credit-card-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: \"credit-card-integration\",\n    preset: \"../../jest.preset.js\",\n    globals: {\n        \"ts-jest\": {\n            tsconfig: \"<rootDir>/tsconfig.spec.json\",\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: [\"../../jest-setup.js\"],\n    coverageDirectory: \"../../coverage/packages/credit-card-integration\",\n};\n"
  },
  {
    "path": "packages/credit-card-integration/project.json",
    "content": "{\n    \"name\": \"credit-card-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/credit-card-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/credit-card-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/credit-card-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/credit-card-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/credit-card-integration/src/create-credit-card-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createCreditCardPaymentStrategy from './create-credit-card-payment-strategy';\nimport CreditCardPaymentStrategy from './credit-card-payment-strategy';\n\ndescribe('createExternalPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates external payment strategy', () => {\n        const strategy = createCreditCardPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(CreditCardPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/credit-card-integration/src/create-credit-card-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport CreditCardPaymentStrategy from './credit-card-payment-strategy';\n\nconst createCreditCardPaymentStrategy: PaymentStrategyFactory<CreditCardPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new CreditCardPaymentStrategy(paymentIntegrationService);\n};\n\nexport default toResolvableModule(createCreditCardPaymentStrategy, [{ default: true }]);\n"
  },
  {
    "path": "packages/credit-card-integration/src/credit-card-payment-initialize-options.ts",
    "content": "import { HostedFormOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * A set of options to initialize credit card payment methods, unless those\n * methods require provider-specific configuration. If the initialization is\n * successful, hosted (iframed) credit card fields will be inserted into the the\n * containers specified in the options.\n *\n * ```html\n * <!-- These containers are where the hosted (iframed) credit card fields will be inserted -->\n * <div id=\"card-number\"></div>\n * <div id=\"card-name\"></div>\n * <div id=\"card-expiry\"></div>\n * <div id=\"card-code\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'authorizenet',\n *     creditCard: {\n *         form: {\n *             fields: {\n *                 cardNumber: { containerId: 'card-number' },\n *                 cardName: { containerId: 'card-name' },\n *                 cardExpiry: { containerId: 'card-expiry' },\n *                 cardCode: { containerId: 'card-code' },\n *             },\n *         },\n *     },\n * });\n * ```\n *\n * Additional options can be passed in to customize the fields and register\n * event callbacks.\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'authorizenet',\n *     creditCard: {\n *         form: {\n *             fields: {\n *                 cardNumber: { containerId: 'card-number' },\n *                 cardName: { containerId: 'card-name' },\n *                 cardExpiry: { containerId: 'card-expiry' },\n *                 cardCode: { containerId: 'card-code' },\n *             },\n *             styles: {\n *                 default: {\n *                     color: '#000',\n *                     fontFamily: 'Arial',\n *                 },\n *                 error: {\n *                     color: '#f00',\n *                 },\n *                 focus: {\n *                     color: '#0f0',\n *                 },\n *             },\n *             onBlur({ fieldType }) {\n *                 console.log(fieldType);\n *             },\n *             onFocus({ fieldType }) {\n *                 console.log(fieldType);\n *             },\n *             onEnter({ fieldType }) {\n *                 console.log(fieldType);\n *             },\n *             onCardTypeChange({ cardType }) {\n *                 console.log(cardType);\n *             },\n *             onValidate({ errors, isValid }) {\n *                 console.log(errors);\n *                 console.log(isValid);\n *             },\n *         },\n *     },\n * });\n * ```\n */\nexport interface CreditCardPaymentInitializeOptions {\n    form: HostedFormOptions;\n    bigpayToken?: string;\n}\n\nexport interface WithCreditCardPaymentInitializeOptions {\n    creditCard?: CreditCardPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/credit-card-integration/src/credit-card-payment-strategy.spec.ts",
    "content": "import { omit } from 'lodash';\n\nimport {\n    HostedFieldType,\n    HostedForm,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    getPaymentMethod,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { CreditCardPaymentStrategy, WithCreditCardPaymentInitializeOptions } from '.';\n\ndescribe('CreditCardPaymentStrategy', () => {\n    let form: HostedForm;\n    let options: PaymentInitializeOptions & WithCreditCardPaymentInitializeOptions;\n    let strategy: CreditCardPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        strategy = new CreditCardPaymentStrategy(paymentIntegrationService);\n        form = {\n            attach: jest.fn(() => Promise.resolve()),\n            submit: jest.fn(),\n            validate: jest.fn(() => Promise.resolve()),\n            detach: jest.fn(),\n            getBin: jest.fn(),\n            getCardType: jest.fn(),\n        };\n        options = {\n            creditCard: {\n                form: {\n                    fields: {\n                        [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                        [HostedFieldType.CardName]: { containerId: 'card-name' },\n                        [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                    },\n                },\n            },\n            methodId: 'authorizenet',\n        };\n\n        jest.spyOn(paymentIntegrationService, 'createHostedForm').mockReturnValue(form);\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            {\n                ...getPaymentMethod(),\n                config: {\n                    isHostedFormEnabled: true,\n                },\n            },\n        );\n    });\n\n    describe('#initialize()', () => {\n        it('does not create hosted form if form is disabled', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getPaymentMethod(),\n                config: {\n                    isHostedFormEnabled: false,\n                },\n            });\n\n            await strategy.initialize(options);\n\n            expect(paymentIntegrationService.createHostedForm).not.toHaveBeenCalled();\n        });\n\n        it('does not create hosted form if no fields', async () => {\n            options = {\n                creditCard: {\n                    form: {\n                        fields: {},\n                    },\n                },\n                methodId: 'authorizenet',\n            };\n            await strategy.initialize(options);\n\n            expect(paymentIntegrationService.createHostedForm).not.toHaveBeenCalled();\n        });\n\n        it('creates hosted form if form is enabled', async () => {\n            const result = await strategy.initialize(options);\n\n            expect(paymentIntegrationService.createHostedForm).toHaveBeenCalledWith(\n                'https://bigpay.integration.zone',\n                // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n                options.creditCard!.form,\n            );\n            expect(form.attach).toHaveBeenCalled();\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws error when payment data is empty', async () => {\n            await expect(strategy.execute({})).rejects.toThrow(PaymentArgumentInvalidError);\n        });\n\n        describe('with hosted form', () => {\n            it('validates user input before submitting data', async () => {\n                await strategy.initialize(options);\n                await strategy.execute(getOrderRequestBody());\n\n                expect(form.validate).toHaveBeenCalled();\n            });\n\n            it('does not submit payment data with hosted form if validation fails', async () => {\n                jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n                try {\n                    await strategy.initialize(options);\n                    await strategy.execute(getOrderRequestBody());\n                } catch (error) {\n                    expect(form.submit).not.toHaveBeenCalled();\n                }\n            });\n\n            it('submits payment data with hosted form', async () => {\n                const payload = getOrderRequestBody();\n\n                await strategy.initialize(options);\n                await strategy.execute(payload, options);\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    omit(payload, 'payment'),\n                    options,\n                );\n                expect(form.submit).toHaveBeenCalledWith(payload.payment);\n            });\n        });\n\n        describe('without hosted form', () => {\n            it('does not submit with hosted form', async () => {\n                const payload = getOrderRequestBody();\n                const { payment, ...order } = payload;\n                const paymentData = payment && payment.paymentData;\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...getPaymentMethod(),\n                    config: {\n                        isHostedFormEnabled: false,\n                    },\n                });\n\n                await strategy.initialize(options);\n                await strategy.execute(payload);\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(order, options);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    ...payment,\n                    paymentData,\n                });\n                expect(form.submit).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/credit-card-integration/src/credit-card-payment-strategy.ts",
    "content": "import { isNil, values } from 'lodash';\n\nimport {\n    HostedForm,\n    InvalidArgumentError,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithCreditCardPaymentInitializeOptions } from './credit-card-payment-initialize-options';\n\nexport default class CreditCardPaymentStrategy implements PaymentStrategy {\n    protected _hostedForm?: HostedForm;\n    protected _shouldRenderHostedForm?: boolean;\n\n    constructor(protected _paymentIntegrationService: PaymentIntegrationService) {}\n\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        return this._isHostedPaymentFormEnabled(\n            payload.payment?.methodId,\n            payload.payment?.gatewayId,\n        ) && this._shouldRenderHostedForm\n            ? this._executeWithHostedForm(payload, options)\n            : this._executeWithoutHostedForm(payload, options);\n    }\n\n    initialize(\n        options?: PaymentInitializeOptions & WithCreditCardPaymentInitializeOptions,\n    ): Promise<void> {\n        if (\n            !this._isHostedPaymentFormEnabled(options?.methodId, options?.gatewayId) ||\n            !this._isHostedFieldAvailable(options)\n        ) {\n            this._shouldRenderHostedForm = false;\n\n            return Promise.resolve();\n        }\n\n        const formOptions = options && options.creditCard && options.creditCard.form;\n        const state = this._paymentIntegrationService.getState();\n        const { paymentSettings: { bigpayBaseUrl: host = '' } = {} } =\n            state.getStoreConfigOrThrow();\n\n        if (!formOptions) {\n            throw new InvalidArgumentError();\n        }\n\n        const form = this._paymentIntegrationService.createHostedForm(host, formOptions);\n\n        return form.attach().then(() => {\n            this._shouldRenderHostedForm = true;\n            this._hostedForm = form;\n\n            return Promise.resolve();\n        });\n    }\n\n    deinitialize(): Promise<void> {\n        if (this._hostedForm) {\n            this._hostedForm.detach();\n        }\n\n        return Promise.resolve();\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    protected async _executeWithoutHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<void> {\n        const { payment, ...order } = payload;\n        const paymentData = payment && payment.paymentData;\n\n        if (!payment || !paymentData) {\n            throw new PaymentArgumentInvalidError(['payment.paymentData']);\n        }\n\n        await this._paymentIntegrationService.submitOrder(order, options);\n\n        await this._paymentIntegrationService.submitPayment({ ...payment, paymentData });\n    }\n\n    protected async _executeWithHostedForm(\n        payload: OrderRequestBody,\n        options?: PaymentRequestOptions,\n    ): Promise<void> {\n        const { payment, ...order } = payload;\n        const form = this._hostedForm;\n\n        if (!form) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        if (!payment || !payment.methodId) {\n            throw new PaymentArgumentInvalidError(['payment.methodId']);\n        }\n\n        await this._paymentIntegrationService.submitOrder(order, options);\n\n        await form.validate().then(() => form.submit(payment));\n    }\n\n    protected _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 _isHostedFieldAvailable(\n        options?: PaymentInitializeOptions & WithCreditCardPaymentInitializeOptions,\n    ): boolean {\n        return !values(options && options.creditCard && options.creditCard.form.fields).every(\n            isNil,\n        );\n    }\n}\n"
  },
  {
    "path": "packages/credit-card-integration/src/index.ts",
    "content": "export { default as createCreditCardPaymentStrategy } from './create-credit-card-payment-strategy';\nexport {\n    CreditCardPaymentInitializeOptions,\n    WithCreditCardPaymentInitializeOptions,\n} from './credit-card-payment-initialize-options';\nexport { default as CreditCardPaymentStrategy } from './credit-card-payment-strategy';\n"
  },
  {
    "path": "packages/credit-card-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/credit-card-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/credit-card-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/cybersource-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\", \"*.spec.tsx\"],\n            \"rules\": {\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/cybersource-integration/README.md",
    "content": "# cybersource-integration\n\nThis package contains the integration layer for the [CyberSource](https://www.cybersource.com/en.html) provider.\n\n# CyberSource\n\nFor additional information on CyberSource API, please refer to [CyberSource API documentation](https://developer.cybersource.com/api-reference-assets/index.html).\n\n## Running unit tests\n\nThis package uses [Jest](https://jestjs.io) for testing.\n\nRun `nx test cybersource-integration` to execute all the unit tests for this package.\n\nRun `nx test cybersource-integration --testFile=\"<FILE_NAME>\"` to execute unit tests for a single file.\n\n## Running lint\n\nRun `nx lint cybersource-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/cybersource-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'cybersource-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/cybersource-integration',\n};\n"
  },
  {
    "path": "packages/cybersource-integration/project.json",
    "content": "{\n    \"name\": \"cybersource-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/cybersource-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/cybersource-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/cybersource-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/cybersource-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/cybersource-integration/src/cybersource/create-cybersource-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createCybersourcePaymentStrategy from './create-cybersource-payment-strategy';\nimport CyberSourcePaymentStrategy from './cybersource-payment-strategy';\n\ndescribe('createCyberSourcePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates cybersource payment strategy', () => {\n        const strategy = createCybersourcePaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(CyberSourcePaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/cybersource-integration/src/cybersource/create-cybersource-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CardinalClient,\n    CardinalScriptLoader,\n    CardinalThreeDSecureFlow,\n} from '@bigcommerce/checkout-sdk/cardinal-integration';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport CyberSourcePaymentStrategy from './cybersource-payment-strategy';\n\nconst createCyberSourcePaymentStrategy: PaymentStrategyFactory<CyberSourcePaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new CyberSourcePaymentStrategy(\n        paymentIntegrationService,\n        new CardinalThreeDSecureFlow(\n            paymentIntegrationService,\n            new CardinalClient(new CardinalScriptLoader(getScriptLoader())),\n        ),\n    );\n};\n\nexport default toResolvableModule(createCyberSourcePaymentStrategy, [{ id: 'cybersource' }]);\n"
  },
  {
    "path": "packages/cybersource-integration/src/cybersource/cybersource-payment-strategy.spec.ts",
    "content": "import { merge } from 'lodash';\n\nimport { CardinalThreeDSecureFlow } from '@bigcommerce/checkout-sdk/cardinal-integration';\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getCybersource } from '../cybersource.mock';\n\nimport CyberSourcePaymentStrategy from './cybersource-payment-strategy';\n\ndescribe('CyberSourcePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let strategy: CyberSourcePaymentStrategy;\n    let threeDSecureFlow: Pick<CardinalThreeDSecureFlow, 'prepare' | 'start'>;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        paymentMethod = getCybersource();\n\n        threeDSecureFlow = {\n            prepare: jest.fn(() => Promise.resolve()),\n            start: jest.fn(() => Promise.resolve()),\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        strategy = new CyberSourcePaymentStrategy(\n            paymentIntegrationService,\n            threeDSecureFlow as CardinalThreeDSecureFlow,\n        );\n    });\n\n    it('is special type of credit card strategy', () => {\n        expect(strategy).toBeInstanceOf(CreditCardPaymentStrategy);\n    });\n\n    describe('#initialize', () => {\n        it('throws error if payment method is not defined', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => {\n                throw new Error();\n            });\n\n            try {\n                await strategy.initialize({ methodId: paymentMethod.id });\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n            }\n        });\n\n        it('does not prepare 3DS flow if not enabled', async () => {\n            paymentMethod.config.is3dsEnabled = false;\n\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            expect(threeDSecureFlow.prepare).not.toHaveBeenCalled();\n        });\n\n        it('prepares 3DS flow if enabled', async () => {\n            paymentMethod.config.is3dsEnabled = true;\n\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            expect(threeDSecureFlow.prepare).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute', () => {\n        let payload: OrderRequestBody;\n\n        beforeEach(() => {\n            payload = merge({}, getOrderRequestBody(), {\n                payment: {\n                    methodId: paymentMethod.id,\n                    gatewayId: paymentMethod.gateway,\n                },\n            });\n        });\n\n        it('throws PaymentArgumentInvalidError with empty payload', async () => {\n            paymentMethod.config.is3dsEnabled = false;\n\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n\n            expect(threeDSecureFlow.start).not.toHaveBeenCalled();\n        });\n\n        it('throws error if payment method is not defined', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => {\n                throw new Error();\n            });\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n            }\n        });\n\n        it('does not start 3DS flow if not enabled', async () => {\n            paymentMethod.config.is3dsEnabled = false;\n\n            await strategy.execute(payload);\n\n            expect(threeDSecureFlow.start).not.toHaveBeenCalled();\n        });\n\n        it('starts 3DS flow if enabled', async () => {\n            paymentMethod.config.is3dsEnabled = true;\n\n            await strategy.execute(payload);\n\n            expect(threeDSecureFlow.start).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/cybersource-integration/src/cybersource/cybersource-payment-strategy.ts",
    "content": "import { CardinalThreeDSecureFlow } from '@bigcommerce/checkout-sdk/cardinal-integration';\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class CyberSourcePaymentStrategy extends CreditCardPaymentStrategy {\n    constructor(\n        _paymentIntegrationService: PaymentIntegrationService,\n        private _threeDSecureFlow: CardinalThreeDSecureFlow,\n    ) {\n        super(_paymentIntegrationService);\n    }\n\n    async initialize(options: PaymentInitializeOptions): Promise<void> {\n        await super.initialize(options);\n\n        const { getPaymentMethodOrThrow } = this._paymentIntegrationService.getState();\n        const paymentMethod = getPaymentMethodOrThrow(options.methodId);\n\n        if (paymentMethod.config.is3dsEnabled) {\n            await this._threeDSecureFlow.prepare(paymentMethod);\n        }\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment: { methodId = '' } = {} } = payload;\n        const { getPaymentMethodOrThrow } = this._paymentIntegrationService.getState();\n        const paymentMethod = getPaymentMethodOrThrow(methodId);\n\n        if (paymentMethod.config.is3dsEnabled) {\n            return this._threeDSecureFlow.start(\n                super.execute.bind(this),\n                payload,\n                options,\n                this._hostedForm,\n            );\n        }\n\n        return super.execute(payload, options);\n    }\n}\n"
  },
  {
    "path": "packages/cybersource-integration/src/cybersource.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getCybersource(): PaymentMethod {\n    return {\n        id: 'cybersource',\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: [],\n        config: {\n            displayName: 'Cybersource',\n            is3dsEnabled: true,\n            testMode: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'cyberToken',\n    };\n}\n"
  },
  {
    "path": "packages/cybersource-integration/src/cybersourcev2/create-cybersource-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createCybersourcev2PaymentStrategy from './create-cybersourcev2-payment-strategy';\nimport CyberSourceV2PaymentStrategy from './cybersourcev2-payment-strategy';\n\ndescribe('createCyberSourceV2PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates CyberSource v2 payment strategy', () => {\n        const strategy = createCybersourcev2PaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(CyberSourceV2PaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/cybersource-integration/src/cybersourcev2/create-cybersourcev2-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CardinalClient,\n    CardinalScriptLoader,\n    CardinalThreeDSecureFlowV2,\n} from '@bigcommerce/checkout-sdk/cardinal-integration';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport CyberSourceV2PaymentStrategy from './cybersourcev2-payment-strategy';\n\nconst createCyberSourceV2PaymentStrategy: PaymentStrategyFactory<CyberSourceV2PaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new CyberSourceV2PaymentStrategy(\n        paymentIntegrationService,\n        new CardinalThreeDSecureFlowV2(\n            paymentIntegrationService,\n            new CardinalClient(new CardinalScriptLoader(getScriptLoader())),\n        ),\n    );\n};\n\nexport default toResolvableModule(createCyberSourceV2PaymentStrategy, [\n    { id: 'cybersourcev2' },\n    { id: 'bnz' },\n]);\n"
  },
  {
    "path": "packages/cybersource-integration/src/cybersourcev2/cybersourcev2-payment-strategy.spec.ts",
    "content": "import { merge } from 'lodash';\n\nimport { CardinalThreeDSecureFlowV2 } from '@bigcommerce/checkout-sdk/cardinal-integration';\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getCybersource } from '../cybersource.mock';\n\nimport CyberSourceV2PaymentStrategy from './cybersourcev2-payment-strategy';\n\ndescribe('CyberSourceV2PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let strategy: CyberSourceV2PaymentStrategy;\n    let threeDSecureFlow: Pick<CardinalThreeDSecureFlowV2, 'prepare' | 'start'>;\n\n    beforeEach(() => {\n        paymentMethod = {\n            ...getCybersource(),\n            clientToken: 'foo',\n        };\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        threeDSecureFlow = {\n            prepare: jest.fn(() => Promise.resolve()),\n            start: jest.fn(() => Promise.resolve()),\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        strategy = new CyberSourceV2PaymentStrategy(\n            paymentIntegrationService,\n            threeDSecureFlow as CardinalThreeDSecureFlowV2,\n        );\n    });\n\n    it('is special type of credit card strategy', () => {\n        expect(strategy).toBeInstanceOf(CreditCardPaymentStrategy);\n    });\n\n    describe('#initialize', () => {\n        it('throws error if payment method is not defined', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => {\n                throw new Error();\n            });\n\n            try {\n                await strategy.initialize({ methodId: paymentMethod.id });\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n            }\n        });\n\n        it('does not prepare 3DS flow if not enabled', async () => {\n            paymentMethod.config.is3dsEnabled = false;\n\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            expect(threeDSecureFlow.prepare).not.toHaveBeenCalled();\n        });\n\n        it('prepares 3DS flow if enabled', async () => {\n            paymentMethod.config.is3dsEnabled = true;\n\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            expect(threeDSecureFlow.prepare).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute', () => {\n        let payload: OrderRequestBody;\n\n        beforeEach(() => {\n            payload = merge({}, getOrderRequestBody(), {\n                payment: {\n                    methodId: paymentMethod.id,\n                    gatewayId: paymentMethod.gateway,\n                },\n            });\n        });\n\n        it('throws PaymentArgumentInvalidError with empty payload', async () => {\n            paymentMethod.config.is3dsEnabled = false;\n\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws error if payment method is not defined', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => {\n                throw new Error();\n            });\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n            }\n        });\n\n        it('does not start 3DS flow if not enabled', async () => {\n            paymentMethod.config.is3dsEnabled = false;\n\n            await strategy.execute(payload);\n\n            expect(threeDSecureFlow.start).not.toHaveBeenCalled();\n        });\n\n        it('starts 3DS flow if enabled', async () => {\n            paymentMethod.config.is3dsEnabled = true;\n\n            await strategy.execute(payload);\n\n            expect(threeDSecureFlow.start).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/cybersource-integration/src/cybersourcev2/cybersourcev2-payment-strategy.ts",
    "content": "import { CardinalThreeDSecureFlowV2 } from '@bigcommerce/checkout-sdk/cardinal-integration';\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class CyberSourceV2PaymentStrategy extends CreditCardPaymentStrategy {\n    constructor(\n        _paymentIntegrationService: PaymentIntegrationService,\n        private _threeDSecureFlow: CardinalThreeDSecureFlowV2,\n    ) {\n        super(_paymentIntegrationService);\n    }\n\n    async initialize(options: PaymentInitializeOptions): Promise<void> {\n        await super.initialize(options);\n\n        const { getPaymentMethodOrThrow } = this._paymentIntegrationService.getState();\n        const paymentMethod = getPaymentMethodOrThrow(options.methodId);\n\n        if (paymentMethod.config.is3dsEnabled) {\n            await this._threeDSecureFlow.prepare(paymentMethod);\n        }\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment: { methodId = '' } = {} } = payload;\n        const { getPaymentMethodOrThrow } = this._paymentIntegrationService.getState();\n        const paymentMethod = getPaymentMethodOrThrow(methodId);\n\n        if (paymentMethod.config.is3dsEnabled) {\n            return this._threeDSecureFlow.start(\n                super.execute.bind(this),\n                payload,\n                options,\n                this._hostedForm,\n            );\n        }\n\n        return super.execute(payload, options);\n    }\n}\n"
  },
  {
    "path": "packages/cybersource-integration/src/index.ts",
    "content": "export { default as createCyberSourcePaymentStrategy } from './cybersource/create-cybersource-payment-strategy';\nexport { default as createCyberSourceV2PaymentStrategy } from './cybersourcev2/create-cybersourcev2-payment-strategy';\n"
  },
  {
    "path": "packages/cybersource-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/cybersource-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/cybersource-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/external-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/external-integration/README.md",
    "content": "# external-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test external-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint external-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/external-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'external-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/external-integration',\n};\n"
  },
  {
    "path": "packages/external-integration/project.json",
    "content": "{\n    \"name\": \"external-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/external-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/external-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/external-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/external-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/external-integration/src/external-payment-strategy.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { noop, omit } from 'lodash';\n\nimport {\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getErrorPaymentResponseBody,\n    getOrderRequestBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport ExternalPaymentStrategy from './external-payment-strategy';\n\ndescribe('ExternalPaymentStrategy', () => {\n    let formPoster: FormPoster;\n    let strategy: ExternalPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        formPoster = createFormPoster();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        strategy = new ExternalPaymentStrategy(formPoster, paymentIntegrationService);\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation((_url, _data, callback = noop) =>\n            callback(),\n        );\n    });\n\n    describe('#execute()', () => {\n        it('throws error when payment data is empty', async () => {\n            await expect(strategy.execute({})).rejects.toThrow(PaymentArgumentInvalidError);\n        });\n\n        it('submits order without payment data', async () => {\n            const payload = getOrderRequestBody();\n            const options = { methodId: 'external' };\n            const { payment } = payload;\n            const paymentData = payment && payment.paymentData;\n\n            await strategy.execute(payload, options);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                omit(payload, 'payment'),\n                options,\n            );\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                ...payment,\n                paymentData,\n            });\n        });\n\n        it('rejects payment when error is different to additional_action_required', async () => {\n            const error = new RequestError(getResponse(getErrorPaymentResponseBody()));\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.reject(error),\n            );\n\n            await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(error);\n\n            expect(formPoster.postForm).not.toHaveBeenCalled();\n        });\n\n        it('redirects to external provider if additional action is required', async () => {\n            const redirect_url = 'https://sandbox-payment.example.com';\n            const error = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n\n                    additional_action_required: {\n                        data: {\n                            redirect_url,\n                        },\n                        type: 'offsite_redirect',\n                    },\n                    status: 'additional_action_required',\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.reject(error),\n            );\n\n            void strategy.execute(getOrderRequestBody());\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(formPoster.postForm).toHaveBeenCalledWith(redirect_url, {});\n        });\n    });\n\n    describe('#initialize()', () => {\n        it('initializes the strategy successfully', async () => {\n            const result = await strategy.initialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/external-integration/src/external-payment-strategy.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n    isRequestError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { AdditionalActionRequired, isAdditionalActionRequired } from './is-additional-action';\n\nexport default class ExternalPaymentStrategy implements PaymentStrategy {\n    constructor(\n        private _formPoster: FormPoster,\n        private _paymentIntegrationService: PaymentIntegrationService,\n    ) {}\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n        const paymentData = payment && payment.paymentData;\n\n        if (!payment || !paymentData) {\n            throw new PaymentArgumentInvalidError(['payment.paymentData']);\n        }\n\n        await this._paymentIntegrationService.submitOrder(order, options);\n\n        try {\n            await this._paymentIntegrationService.submitPayment({ ...payment, paymentData });\n        } catch (error) {\n            if (\n                !isRequestError(error) ||\n                !isAdditionalActionRequired(error.body) ||\n                !this._isAdditionalActionRequired(error.body)\n            ) {\n                return Promise.reject(error);\n            }\n\n            const {\n                body: {\n                    additional_action_required: {\n                        data: { redirect_url },\n                    },\n                },\n            } = error;\n\n            // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n            return new Promise(() => {\n                this.redirectUrl(redirect_url);\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            }) as any;\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    initialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    protected redirectUrl(redirect_url: string): void {\n        return this._formPoster.postForm(redirect_url, {});\n    }\n\n    private _isAdditionalActionRequired(body: AdditionalActionRequired): boolean {\n        const { additional_action_required, status } = body;\n\n        return (\n            status === 'additional_action_required' &&\n            additional_action_required &&\n            additional_action_required.type === 'offsite_redirect'\n        );\n    }\n}\n"
  },
  {
    "path": "packages/external-integration/src/index.ts",
    "content": "export { default as ExternalPaymentStrategy } from './external-payment-strategy';\n"
  },
  {
    "path": "packages/external-integration/src/is-additional-action.ts",
    "content": "export interface AdditionalActionRequired {\n    additional_action_required: {\n        data: {\n            redirect_url: string;\n        };\n        type: string;\n    };\n    status: string;\n}\n\nexport function isAdditionalActionRequired(value: unknown): value is AdditionalActionRequired {\n    return typeof value === 'object' && value !== null && 'additional_action_required' in value;\n}\n"
  },
  {
    "path": "packages/external-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/external-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/external-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/google-pay-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"**/guards/*.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/consistent-type-assertions\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"max-classes-per-file\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-non-null-assertion\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-non-null-assertion\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/google-pay-integration/README.md",
    "content": "# google-pay-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test google-pay-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint google-pay-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/google-pay-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'google-pay-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/google-pay-integration',\n    coveragePathIgnorePatterns: ['<rootDir>/src/index.ts'],\n};\n"
  },
  {
    "path": "packages/google-pay-integration/project.json",
    "content": "{\n    \"name\": \"google-pay-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/google-pay-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/google-pay-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/google-pay-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/google-pay-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-adyenv2-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\n\nimport createGooglePayAdyenV2ButtonStrategy from './create-google-pay-adyenv2-button-strategy';\n\ndescribe('createGooglePayAdyenV2ButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay AdyenV2 button strategy', () => {\n        const strategy = createGooglePayAdyenV2ButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-adyenv2-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayGateway from '../../gateways/google-pay-gateway';\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayAdyenV2ButtonStrategy: CheckoutButtonStrategyFactory<\n    GooglePayButtonStrategy\n> = (paymentIntegrationService) => {\n    const requestSender = createRequestSender();\n\n    return new GooglePayButtonStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayGateway('adyen', paymentIntegrationService),\n            requestSender,\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayAdyenV2ButtonStrategy, [\n    { id: 'googlepayadyenv2' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-adyenv3-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\n\nimport createGooglePayAdyenV3ButtonStrategy from './create-google-pay-adyenv3-button-strategy';\n\ndescribe('createGooglePayAdyenV3ButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay AdyenV3 button strategy', () => {\n        const strategy = createGooglePayAdyenV3ButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-adyenv3-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayGateway from '../../gateways/google-pay-gateway';\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayAdyenV3ButtonStrategy: CheckoutButtonStrategyFactory<\n    GooglePayButtonStrategy\n> = (paymentIntegrationService) => {\n    const requestSender = createRequestSender();\n\n    return new GooglePayButtonStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayGateway('adyen', paymentIntegrationService),\n            requestSender,\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayAdyenV3ButtonStrategy, [\n    { id: 'googlepayadyenv3' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-authorizenet-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\n\nimport createGooglePayAuthorizeNetButtonStrategy from './create-google-pay-authorizenet-button-strategy';\n\ndescribe('createGooglePayAuthorizeNetButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay authorizenet button strategy', () => {\n        const strategy = createGooglePayAuthorizeNetButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-authorizenet-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayAuthorizeNetGateway from '../../gateways/google-pay-authorizenet-gateway';\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayAuthorizeNetButtonStrategy: CheckoutButtonStrategyFactory<\n    GooglePayButtonStrategy\n> = (paymentIntegrationService) =>\n    new GooglePayButtonStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayAuthorizeNetGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayAuthorizeNetButtonStrategy, [\n    { id: 'googlepayauthorizenet' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-braintree-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\n\nimport createGooglePayBraintreeButtonStrategy from './create-google-pay-braintree-button-strategy';\n\ndescribe('createGooglePayBraintreeButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay braintree button strategy', () => {\n        const strategy = createGooglePayBraintreeButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-braintree-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { 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    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayBraintreeGateway from '../../gateways/google-pay-braintree-gateway';\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayBraintreeButtonStrategy: CheckoutButtonStrategyFactory<\n    GooglePayButtonStrategy\n> = (paymentIntegrationService) => {\n    const requestSender = createRequestSender();\n\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\n    return new GooglePayButtonStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayBraintreeGateway(paymentIntegrationService, braintreeSdk),\n            requestSender,\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayBraintreeButtonStrategy, [\n    { id: 'googlepaybraintree' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-checkoutcom-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\n\nimport createGooglePayCheckoutComButtonStrategy from './create-google-pay-checkoutcom-button-strategy';\n\ndescribe('createGooglePayCheckoutComButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay checkoutcom button strategy', () => {\n        const strategy = createGooglePayCheckoutComButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-checkoutcom-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayCheckoutComGateway from '../../gateways/google-pay-checkoutcom-gateway';\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayCheckoutComButtonStrategy: CheckoutButtonStrategyFactory<\n    GooglePayButtonStrategy\n> = (paymentIntegrationService) => {\n    const requestSender = createRequestSender();\n\n    return new GooglePayButtonStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayCheckoutComGateway(paymentIntegrationService, requestSender),\n            requestSender,\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayCheckoutComButtonStrategy, [\n    { id: 'googlepaycheckoutcom' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-cybersource-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\n\nimport createGooglePayCybersourceButtonStrategy from './create-google-pay-cybersource-button-strategy';\n\ndescribe('createGooglePayCybersourceButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay cybersource button strategy', () => {\n        const strategy = createGooglePayCybersourceButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-cybersource-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayCybersourceGateway from '../../gateways/google-pay-cybersource-gateway';\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayCybersourceButtonStrategy: CheckoutButtonStrategyFactory<\n    GooglePayButtonStrategy\n> = (paymentIntegrationService) =>\n    new GooglePayButtonStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayCybersourceGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayCybersourceButtonStrategy, [\n    { id: 'googlepaycybersourcev2' },\n    { id: 'googlepaybnz' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-orbital-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\n\nimport createGooglePayOrbitalButtonStrategy from './create-google-pay-orbital-button-strategy';\n\ndescribe('createGooglePayOrbitalButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay orbital button strategy', () => {\n        const strategy = createGooglePayOrbitalButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-orbital-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayOrbitalGateway from '../../gateways/google-pay-orbital-gateway';\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayOrbitalButtonStrategy: CheckoutButtonStrategyFactory<\n    GooglePayButtonStrategy\n> = (paymentIntegrationService) =>\n    new GooglePayButtonStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayOrbitalGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayOrbitalButtonStrategy, [\n    { id: 'googlepayorbital' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-tdonlinemart-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\n\nimport createGooglePayTdOnlineMartButtonStrategy from './create-google-pay-tdonlinemart-button-strategy';\n\ndescribe('createGooglePayTdOnlineMartButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay TD Online Mart button strategy', () => {\n        const strategy = createGooglePayTdOnlineMartButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-tdonlinemart-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayTdOnlineMartGateway from '../../gateways/google-pay-tdonlinemart-gateway';\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayTdOnlineMartButtonStrategy: CheckoutButtonStrategyFactory<\n    GooglePayButtonStrategy\n> = (paymentIntegrationService) =>\n    new GooglePayButtonStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayTdOnlineMartGateway(paymentIntegrationService, createFormPoster()),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayTdOnlineMartButtonStrategy, [\n    { id: 'googlepaytdonlinemart' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-worldpayaccess-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\n\nimport createGooglePayWorldpayAccessButtonStrategy from './create-google-pay-worldpayaccess-button-strategy';\n\ndescribe('createGooglePayWorldpayAccessButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay worldpayaccess button strategy', () => {\n        const strategy = createGooglePayWorldpayAccessButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/button/create-google-pay-worldpayaccess-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayWorldpayAccessGateway from '../../gateways/google-pay-worldpayaccess-gateway';\nimport GooglePayButtonStrategy from '../../google-pay-button-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayWorldpayAccessButtonStrategy: CheckoutButtonStrategyFactory<\n    GooglePayButtonStrategy\n> = (paymentIntegrationService) =>\n    new GooglePayButtonStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayWorldpayAccessGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayWorldpayAccessButtonStrategy, [\n    { id: 'googlepayworldpayaccess' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/create-google-pay-script-loader.spec.ts",
    "content": "import GooglePayScriptLoader from '../google-pay-script-loader';\n\nimport createGooglePayScriptLoader from './create-google-pay-script-loader';\n\ndescribe('createGooglePayScriptLoader', () => {\n    it('instantiates google pay script loader', () => {\n        const scriptLoader = createGooglePayScriptLoader();\n\n        expect(scriptLoader).toBeInstanceOf(GooglePayScriptLoader);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/create-google-pay-script-loader.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport GooglePayScriptLoader from '../google-pay-script-loader';\n\nexport default function createGooglePayScriptLoader() {\n    return new GooglePayScriptLoader(getScriptLoader());\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-adyenv2-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\n\nimport createGooglePayAdyenV2CustomerStrategy from './create-google-pay-adyenv2-customer-strategy';\n\ndescribe('createGooglePayAdyenV2CustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay AdyenV2 customer strategy', () => {\n        const strategy = createGooglePayAdyenV2CustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-adyenv2-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayGateway from '../../gateways/google-pay-gateway';\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayAdyenV2CustomerStrategy: CustomerStrategyFactory<GooglePayCustomerStrategy> = (\n    paymentIntegrationService,\n) => {\n    const requestSender = createRequestSender();\n\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayGateway('adyen', paymentIntegrationService),\n            requestSender,\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayAdyenV2CustomerStrategy, [\n    { id: 'googlepayadyenv2' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-adyenv3-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\n\nimport createGooglePayAdyenV3CustomerStrategy from './create-google-pay-adyenv3-customer-strategy';\n\ndescribe('createGooglePayAdyenV3CustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay AdyenV3 customer strategy', () => {\n        const strategy = createGooglePayAdyenV3CustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-adyenv3-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayGateway from '../../gateways/google-pay-gateway';\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayAdyenV3CustomerStrategy: CustomerStrategyFactory<GooglePayCustomerStrategy> = (\n    paymentIntegrationService,\n) => {\n    const requestSender = createRequestSender();\n\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayGateway('adyen', paymentIntegrationService),\n            requestSender,\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayAdyenV3CustomerStrategy, [\n    { id: 'googlepayadyenv3' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-authorizenet-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\n\nimport createGooglePayAuthorizeDotNetCustomerStrategy from './create-google-pay-authorizenet-customer-strategy';\n\ndescribe('createGooglePayAuthorizeDotNetCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay authorizenet customer strategy', () => {\n        const storeConfigMock = getConfig().storeConfig;\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValueOnce(\n            storeConfigMock,\n        );\n\n        const strategy = createGooglePayAuthorizeDotNetCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-authorizenet-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayAuthorizeNetGateway from '../../gateways/google-pay-authorizenet-gateway';\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayAuthorizeDotNetCustomerStrategy: CustomerStrategyFactory<\n    GooglePayCustomerStrategy\n> = (paymentIntegrationService) => {\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayAuthorizeNetGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayAuthorizeDotNetCustomerStrategy, [\n    { id: 'googlepayauthorizenet' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-bnz-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\n\nimport createGooglePayBnzCustomerStrategy from './create-google-pay-bnz-customer-strategy';\n\ndescribe('createGooglePayBnzCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay bnz customer strategy', () => {\n        const storeConfigMock = getConfig().storeConfig;\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValueOnce(\n            storeConfigMock,\n        );\n\n        const strategy = createGooglePayBnzCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-bnz-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayCybersourceGateway from '../../gateways/google-pay-cybersource-gateway';\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayBnzCustomerStrategy: CustomerStrategyFactory<GooglePayCustomerStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayCybersourceGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayBnzCustomerStrategy, [{ id: 'googlepaybnz' }]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-braintree-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\n\nimport createGooglePayBraintreeCustomerStrategy from './create-google-pay-braintree-customer-strategy';\n\ndescribe('createGooglePayBraintreeCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay braintree customer strategy', () => {\n        const strategy = createGooglePayBraintreeCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-braintree-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { 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    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayBraintreeGateway from '../../gateways/google-pay-braintree-gateway';\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayBraintreePaymentStrategy: CustomerStrategyFactory<\n    GooglePayCustomerStrategy\n> = (paymentIntegrationService) => {\n    const requestSender = createRequestSender();\n\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\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayBraintreeGateway(paymentIntegrationService, braintreeSdk),\n            requestSender,\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayBraintreePaymentStrategy, [\n    { id: 'googlepaybraintree' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-checkoutcom-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\n\nimport createGooglePayCheckoutComCustomerStrategy from './create-google-pay-checkoutcom-customer-strategy';\n\ndescribe('createGooglePayCheckoutComCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay checkoutcom customer strategy', () => {\n        const storeConfigMock = getConfig().storeConfig;\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValueOnce(\n            storeConfigMock,\n        );\n\n        const strategy = createGooglePayCheckoutComCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-checkoutcom-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayCheckoutComGateway from '../../gateways/google-pay-checkoutcom-gateway';\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayCheckoutComCustomerStrategy: CustomerStrategyFactory<\n    GooglePayCustomerStrategy\n> = (paymentIntegrationService) => {\n    const requestSender = createRequestSender();\n\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayCheckoutComGateway(paymentIntegrationService, requestSender),\n            requestSender,\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayCheckoutComCustomerStrategy, [\n    { id: 'googlepaycheckoutcom' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-cybersource-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\n\nimport createGooglePayCybersourceCustomerStrategy from './create-google-pay-cybersource-customer-strategy';\n\ndescribe('createGooglePayCybersourceCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay cybersource customer strategy', () => {\n        const storeConfigMock = getConfig().storeConfig;\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValueOnce(\n            storeConfigMock,\n        );\n\n        const strategy = createGooglePayCybersourceCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-cybersource-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayCybersourceGateway from '../../gateways/google-pay-cybersource-gateway';\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayCybersourceCustomerStrategy: CustomerStrategyFactory<\n    GooglePayCustomerStrategy\n> = (paymentIntegrationService) => {\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayCybersourceGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayCybersourceCustomerStrategy, [\n    { id: 'googlepaycybersourcev2' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-orbital-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\n\nimport createGooglePayOrbitalCustomerStrategy from './create-google-pay-orbital-customer-strategy';\n\ndescribe('createGooglePayOrbitalCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay orbital customer strategy', () => {\n        const storeConfigMock = getConfig().storeConfig;\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValueOnce(\n            storeConfigMock,\n        );\n\n        const strategy = createGooglePayOrbitalCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-orbital-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayOrbitalGateway from '../../gateways/google-pay-orbital-gateway';\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayOrbitalCustomerStrategy: CustomerStrategyFactory<GooglePayCustomerStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayOrbitalGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayOrbitalCustomerStrategy, [\n    { id: 'googlepayorbital' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-tdonlinemart-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\n\nimport createGooglePayTdOnlineMartCustomerStrategy from './create-google-pay-tdonlinemart-customer-strategy';\n\ndescribe('createGooglePayTdOnlineMartCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay TD Online Mart customer strategy', () => {\n        const storeConfigMock = getConfig().storeConfig;\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValueOnce(\n            storeConfigMock,\n        );\n\n        const strategy = createGooglePayTdOnlineMartCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-tdonlinemart-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayTdOnlineMartGateway from '../../gateways/google-pay-tdonlinemart-gateway';\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayTdOnlineMartCustomerStrategy: CustomerStrategyFactory<\n    GooglePayCustomerStrategy\n> = (paymentIntegrationService) =>\n    new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayTdOnlineMartGateway(paymentIntegrationService, createFormPoster()),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayTdOnlineMartCustomerStrategy, [\n    { id: 'googlepaytdonlinemart' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-worldpayaccess-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\n\nimport createGooglePayWorldpayAccessCustomerStrategy from './create-google-pay-worldpayaccess-customer-strategy';\n\ndescribe('createGooglePayWorldpayAccessCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay worldpayaccess customer strategy', () => {\n        const storeConfigMock = getConfig().storeConfig;\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValueOnce(\n            storeConfigMock,\n        );\n\n        const strategy = createGooglePayWorldpayAccessCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/customer/create-google-pay-worldpayaccess-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayWorldpayAccessGateway from '../../gateways/google-pay-worldpayaccess-gateway';\nimport GooglePayCustomerStrategy from '../../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayWorldpayAccessCustomerStrategy: CustomerStrategyFactory<\n    GooglePayCustomerStrategy\n> = (paymentIntegrationService) => {\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayWorldpayAccessGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayWorldpayAccessCustomerStrategy, [\n    { id: 'googlepayworldpayaccess' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-adyenv2-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\n\nimport createGooglePayAdyenV2PaymentStrategy from './create-google-pay-adyenv2-payment-strategy';\n\ndescribe('createGooglePayadyenV2PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay adyenv2 payment strategy', () => {\n        const strategy = createGooglePayAdyenV2PaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-adyenv2-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader, getStylesheetLoader } from '@bigcommerce/script-loader';\n\nimport { AdyenV2ScriptLoader } from '@bigcommerce/checkout-sdk/adyen-utils';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayAdyenV2Gateway from '../../gateways/google-pay-adyenv2-gateway';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayAdyenV2PaymentStrategy: PaymentStrategyFactory<GooglePayPaymentStrategy> = (\n    paymentIntegrationService,\n) =>\n    new GooglePayPaymentStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayAdyenV2Gateway(\n                paymentIntegrationService,\n                new AdyenV2ScriptLoader(getScriptLoader(), getStylesheetLoader()),\n            ),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayAdyenV2PaymentStrategy, [\n    { id: 'googlepayadyenv2' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-adyenv3-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\n\nimport createGooglePayAdyenV3PaymentStrategy from './create-google-pay-adyenv3-payment-strategy';\n\ndescribe('createGooglePayadyenV3PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay adyenv3 payment strategy', () => {\n        const strategy = createGooglePayAdyenV3PaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-adyenv3-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader, getStylesheetLoader } from '@bigcommerce/script-loader';\n\nimport { AdyenV3ScriptLoader } from '@bigcommerce/checkout-sdk/adyen-utils';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayAdyenV3Gateway from '../../gateways/google-pay-adyenv3-gateway';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayAdyenV3PaymentStrategy: PaymentStrategyFactory<GooglePayPaymentStrategy> = (\n    paymentIntegrationService,\n) =>\n    new GooglePayPaymentStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayAdyenV3Gateway(\n                paymentIntegrationService,\n                new AdyenV3ScriptLoader(getScriptLoader(), getStylesheetLoader()),\n            ),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayAdyenV3PaymentStrategy, [\n    { id: 'googlepayadyenv3' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-authorizenet-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\n\nimport createGooglePayAuthorizeNetPaymentStrategy from './create-google-pay-authorizenet-payment-strategy';\n\ndescribe('createGooglePayAuthorizeNetPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay authorizenet payment strategy', () => {\n        const strategy = createGooglePayAuthorizeNetPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-authorizenet-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayAuthorizeNetGateway from '../../gateways/google-pay-authorizenet-gateway';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayAuthorizeNetPaymentStrategy: PaymentStrategyFactory<\n    GooglePayPaymentStrategy\n> = (paymentIntegrationService) =>\n    new GooglePayPaymentStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayAuthorizeNetGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayAuthorizeNetPaymentStrategy, [\n    { id: 'googlepayauthorizenet' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-braintree-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\n\nimport createGooglePayBraintreePaymentStrategy from './create-google-pay-braintree-payment-strategy';\n\ndescribe('createGooglePayBraintreePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay braintree payment strategy', () => {\n        const strategy = createGooglePayBraintreePaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-braintree-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { 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';\n\nimport GooglePayBraintreeGateway from '../../gateways/google-pay-braintree-gateway';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayBraintreePaymentStrategy: PaymentStrategyFactory<GooglePayPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    const requestSender = createRequestSender();\n\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\n    return new GooglePayPaymentStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayBraintreeGateway(paymentIntegrationService, braintreeSdk),\n            requestSender,\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayBraintreePaymentStrategy, [\n    { id: 'googlepaybraintree' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-checkoutcom-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\n\nimport createGooglePayCheckoutComPaymentStrategy from './create-google-pay-checkoutcom-payment-strategy';\n\ndescribe('createGooglePayCheckoutComPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay checkoutcom payment strategy', () => {\n        const strategy = createGooglePayCheckoutComPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-checkoutcom-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayCheckoutComGateway from '../../gateways/google-pay-checkoutcom-gateway';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayCheckoutComPaymentStrategy: PaymentStrategyFactory<\n    GooglePayPaymentStrategy\n> = (paymentIntegrationService) => {\n    const requestSender = createRequestSender();\n\n    return new GooglePayPaymentStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayCheckoutComGateway(paymentIntegrationService, requestSender),\n            requestSender,\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayCheckoutComPaymentStrategy, [\n    { id: 'googlepaycheckoutcom' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-cybersource-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\n\nimport createGooglePayCybersourcePaymentStrategy from './create-google-pay-cybersource-payment-strategy';\n\ndescribe('createGooglePayCybersourcePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay cybersource payment strategy', () => {\n        const strategy = createGooglePayCybersourcePaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-cybersource-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayCybersourceGateway from '../../gateways/google-pay-cybersource-gateway';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayCybersourcePaymentStrategy: PaymentStrategyFactory<\n    GooglePayPaymentStrategy\n> = (paymentIntegrationService) =>\n    new GooglePayPaymentStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayCybersourceGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayCybersourcePaymentStrategy, [\n    { id: 'googlepaycybersourcev2' },\n    { id: 'googlepaybnz' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-orbital-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\n\nimport createGooglePayOrbitalPaymentStrategy from './create-google-pay-orbital-payment-strategy';\n\ndescribe('createGooglePayOrbitalPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay orbital payment strategy', () => {\n        const strategy = createGooglePayOrbitalPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-orbital-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayOrbitalGateway from '../../gateways/google-pay-orbital-gateway';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayOrbitalPaymentStrategy: PaymentStrategyFactory<GooglePayPaymentStrategy> = (\n    paymentIntegrationService,\n) =>\n    new GooglePayPaymentStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayOrbitalGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayOrbitalPaymentStrategy, [\n    { id: 'googlepayorbital' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-tdonlinemart-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\n\nimport createGooglePayTdOnlineMartPaymentStrategy from './create-google-pay-tdonlinemart-payment-strategy';\n\ndescribe('createGooglePayTdOnlineMartPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay TD Online Mart payment strategy', () => {\n        const strategy = createGooglePayTdOnlineMartPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-tdonlinemart-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayTdOnlineMartGateway from '../../gateways/google-pay-tdonlinemart-gateway';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayTdOnlineMartPaymentStrategy: PaymentStrategyFactory<\n    GooglePayPaymentStrategy\n> = (paymentIntegrationService) =>\n    new GooglePayPaymentStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayTdOnlineMartGateway(paymentIntegrationService, createFormPoster()),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayTdOnlineMartPaymentStrategy, [\n    { id: 'googlepaytdonlinemart' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-worldpayaccess-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\n\nimport createGooglePayWorldpayAccessPaymentStrategy from './create-google-pay-worldpayaccess-payment-strategy';\n\ndescribe('createGooglePayWorldpayAccessPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay worldpayaccess payment strategy', () => {\n        const strategy = createGooglePayWorldpayAccessPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/factories/payment/create-google-pay-worldpayaccess-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayWorldpayAccessGateway from '../../gateways/google-pay-worldpayaccess-gateway';\nimport GooglePayPaymentProcessor from '../../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../../google-pay-payment-strategy';\nimport createGooglePayScriptLoader from '../create-google-pay-script-loader';\n\nconst createGooglePayWorldpayAccessPaymentStrategy: PaymentStrategyFactory<\n    GooglePayPaymentStrategy\n> = (paymentIntegrationService) =>\n    new GooglePayPaymentStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayWorldpayAccessGateway(paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayWorldpayAccessPaymentStrategy, [\n    { id: 'googlepayworldpayaccess' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-adyenv2-gateway.spec.ts",
    "content": "import { createScriptLoader, getStylesheetLoader } from '@bigcommerce/script-loader';\n\nimport { AdyenV2ScriptLoader } from '@bigcommerce/checkout-sdk/adyen-utils';\nimport {\n    PaymentIntegrationService,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getAdyenV2 } from '../mocks/google-pay-payment-method.mock';\n\nimport GooglePayAdyenV2Gateway from './google-pay-adyenv2-gateway';\n\ndescribe('GooglePayAdyenV2Gateway', () => {\n    let gateway: GooglePayAdyenV2Gateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let adyenV2ScriptLoader: AdyenV2ScriptLoader;\n    const createFromAction = jest.fn((action, { onAdditionalDetails }) => {\n        onAdditionalDetails({ action });\n\n        return {\n            mount: jest.fn(() => {\n                return document.createElement('div');\n            }),\n            unmount: jest.fn(),\n            submit: jest.fn(),\n        };\n    });\n    const scriptLoader = createScriptLoader();\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        adyenV2ScriptLoader = new AdyenV2ScriptLoader(scriptLoader, getStylesheetLoader());\n        gateway = new GooglePayAdyenV2Gateway(paymentIntegrationService, adyenV2ScriptLoader);\n        jest.spyOn(adyenV2ScriptLoader, 'load').mockResolvedValue({\n            createFromAction,\n            create: jest.fn(),\n        });\n    });\n\n    it('#initialize()', async () => {\n        await gateway.initialize(getAdyenV2);\n\n        expect(adyenV2ScriptLoader.load).toHaveBeenCalled();\n    });\n\n    it('#processAdditionalAction', async () => {\n        await gateway.initialize(getAdyenV2);\n\n        const err: RequestError = new RequestError({\n            body: {\n                errors: [{ code: 'additional_action_required' }],\n                provider_data: {\n                    action: '{}',\n                },\n            },\n            headers: {},\n            status: 400,\n            statusText: 'Please continue with additional actions.',\n        });\n\n        await gateway.processAdditionalAction(err);\n\n        expect(createFromAction).toHaveBeenCalledTimes(1);\n    });\n\n    it('#processAdditionalAction failed', async () => {\n        await gateway.initialize(getAdyenV2);\n\n        try {\n            await gateway.processAdditionalAction({ code: 'processAdditionalAction' });\n        } catch (error) {\n            expect(error).toStrictEqual({ code: 'processAdditionalAction' });\n        }\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-adyenv2-gateway.ts",
    "content": "import {\n    AdyenAction,\n    AdyenAdditionalAction,\n    AdyenAdditionalActionState,\n    AdyenClient,\n    AdyenError,\n    AdyenV2ScriptLoader,\n    isAdditionalActionRequiredErrorResponse,\n} from '@bigcommerce/checkout-sdk/adyen-utils';\nimport {\n    getBrowserInfo,\n    isRequestError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    Payment,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayInitializationData } from '../types';\n\nimport GooglePayGateway from './google-pay-gateway';\n\nexport default class GooglePayAdyenV2 extends GooglePayGateway {\n    private _adyenClient?: AdyenClient;\n    private _service: PaymentIntegrationService;\n\n    constructor(service: PaymentIntegrationService, private _scriptLoader: AdyenV2ScriptLoader) {\n        super('adyen', service);\n\n        this._service = service;\n    }\n\n    async initialize(\n        getPaymentMethod: () => PaymentMethod<GooglePayInitializationData>,\n        isBuyNowFlow?: boolean,\n        currencyCode?: string,\n    ): Promise<void> {\n        await super.initialize(getPaymentMethod, isBuyNowFlow, currencyCode);\n\n        const paymentMethod = super.getPaymentMethod();\n        const state = this._service.getState();\n        const storeConfig = state.getStoreConfig();\n\n        if (!storeConfig) {\n            throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n        }\n\n        this._adyenClient = await this._scriptLoader.load({\n            environment: paymentMethod.config.testMode ? 'test' : 'live',\n            locale: storeConfig.storeProfile.storeLanguage,\n        });\n\n        return Promise.resolve();\n    }\n\n    async getNonce(methodId: string) {\n        const nonce = await super.getNonce(methodId);\n        const paymentMethod = super.getPaymentMethod();\n\n        return JSON.stringify({\n            type: paymentMethod.method,\n            googlePayToken: nonce,\n            browser_info: getBrowserInfo(),\n        });\n    }\n\n    async processAdditionalAction(error: unknown): Promise<PaymentIntegrationSelectors | void> {\n        if (!isRequestError(error) || !isAdditionalActionRequiredErrorResponse(error.body)) {\n            throw error;\n        }\n\n        const payment = await this._handleAction(error.body.provider_data);\n\n        try {\n            return await this._service.submitPayment(payment);\n        } catch (e) {\n            return this.processAdditionalAction(e);\n        }\n    }\n\n    private _handleAction(additionalAction: AdyenAdditionalAction): Promise<Payment> {\n        return new Promise((resolve, reject) => {\n            const adyenAction: AdyenAction = JSON.parse(additionalAction.action);\n\n            const additionalActionComponent = this._getAdyenClient().createFromAction(adyenAction, {\n                onAdditionalDetails: (additionalActionState: AdyenAdditionalActionState) => {\n                    const paymentPayload = {\n                        methodId: adyenAction.paymentMethodType,\n                        paymentData: {\n                            nonce: JSON.stringify(additionalActionState.data),\n                        },\n                    };\n\n                    resolve(paymentPayload);\n                },\n                size: '05',\n                onError: (error: AdyenError) => reject(error),\n            });\n\n            additionalActionComponent.mount('body');\n\n            reject(new PaymentMethodCancelledError());\n        });\n    }\n\n    private _getAdyenClient(): AdyenClient {\n        if (!this._adyenClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this._adyenClient;\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-adyenv3-gateway.spec.ts",
    "content": "import { createScriptLoader, getStylesheetLoader } from '@bigcommerce/script-loader';\n\nimport { AdyenV3ScriptLoader } from '@bigcommerce/checkout-sdk/adyen-utils';\nimport {\n    PaymentIntegrationService,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getAdyenV3 } from '../mocks/google-pay-payment-method.mock';\n\nimport GooglePayAdyenV3Gateway from './google-pay-adyenv3-gateway';\n\ndescribe('GooglePayAdyenV3Gateway', () => {\n    let gateway: GooglePayAdyenV3Gateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let adyenV3ScriptLoader: AdyenV3ScriptLoader;\n    const createFromAction = jest.fn((action, { onAdditionalDetails }) => {\n        onAdditionalDetails({ action });\n\n        return {\n            mount: jest.fn(() => {\n                return document.createElement('div');\n            }),\n            unmount: jest.fn(),\n            submit: jest.fn(),\n        };\n    });\n    const scriptLoader = createScriptLoader();\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        adyenV3ScriptLoader = new AdyenV3ScriptLoader(scriptLoader, getStylesheetLoader());\n        gateway = new GooglePayAdyenV3Gateway(paymentIntegrationService, adyenV3ScriptLoader);\n        jest.spyOn(adyenV3ScriptLoader, 'load').mockResolvedValue({\n            createFromAction,\n            create: jest.fn(),\n        });\n    });\n\n    it('#initialize()', async () => {\n        await gateway.initialize(getAdyenV3);\n\n        expect(adyenV3ScriptLoader.load).toHaveBeenCalled();\n    });\n\n    it('#processAdditionalAction', async () => {\n        await gateway.initialize(getAdyenV3);\n\n        const err: RequestError = new RequestError({\n            body: {\n                errors: [{ code: 'additional_action_required' }],\n                provider_data: {\n                    action: '{}',\n                },\n            },\n            headers: {},\n            status: 400,\n            statusText: 'Please continue with additional actions.',\n        });\n\n        await gateway.processAdditionalAction(err);\n\n        expect(createFromAction).toHaveBeenCalledTimes(1);\n    });\n\n    it('#processAdditionalAction failed', async () => {\n        await gateway.initialize(getAdyenV3);\n\n        try {\n            await gateway.processAdditionalAction({ code: 'processAdditionalAction' });\n        } catch (error) {\n            expect(error).toStrictEqual({ code: 'processAdditionalAction' });\n        }\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-adyenv3-gateway.ts",
    "content": "import {\n    AdyenAction,\n    AdyenAdditionalAction,\n    AdyenAdditionalActionState,\n    AdyenClient,\n    AdyenError,\n    AdyenV3ScriptLoader,\n    isAdditionalActionRequiredErrorResponse,\n} from '@bigcommerce/checkout-sdk/adyen-utils';\nimport {\n    getBrowserInfo,\n    isRequestError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    Payment,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayInitializationData } from '../types';\n\nimport GooglePayGateway from './google-pay-gateway';\n\nexport default class GooglePayAdyenV3 extends GooglePayGateway {\n    private _adyenClient?: AdyenClient;\n    private _service: PaymentIntegrationService;\n\n    constructor(service: PaymentIntegrationService, private _scriptLoader: AdyenV3ScriptLoader) {\n        super('adyen', service);\n\n        this._service = service;\n    }\n\n    async initialize(\n        getPaymentMethod: () => PaymentMethod<GooglePayInitializationData>,\n        isBuyNowFlow?: boolean,\n        currencyCode?: string,\n    ): Promise<void> {\n        await super.initialize(getPaymentMethod, isBuyNowFlow, currencyCode);\n\n        const paymentMethod = super.getPaymentMethod();\n        const state = this._service.getState();\n        const storeConfig = state.getStoreConfig();\n\n        if (!storeConfig) {\n            throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n        }\n\n        this._adyenClient = await this._scriptLoader.load({\n            environment: paymentMethod.config.testMode ? 'test' : 'live',\n            locale: storeConfig.storeProfile.storeLanguage,\n        });\n\n        return Promise.resolve();\n    }\n\n    async processAdditionalAction(error: unknown): Promise<PaymentIntegrationSelectors | void> {\n        if (!isRequestError(error) || !isAdditionalActionRequiredErrorResponse(error.body)) {\n            throw error;\n        }\n\n        const payment = await this._handleAction(error.body.provider_data);\n\n        try {\n            return await this._service.submitPayment(payment);\n        } catch (e) {\n            return this.processAdditionalAction(e);\n        }\n    }\n\n    async getNonce(methodId: string) {\n        const nonce = await super.getNonce(methodId);\n        const paymentMethod = super.getPaymentMethod();\n\n        return JSON.stringify({\n            type: paymentMethod.method,\n            googlePayToken: nonce,\n            browser_info: getBrowserInfo(),\n        });\n    }\n\n    private _handleAction(additionalAction: AdyenAdditionalAction): Promise<Payment> {\n        return new Promise((resolve, reject) => {\n            const adyenAction: AdyenAction = JSON.parse(additionalAction.action);\n\n            const additionalActionComponent = this._getAdyenClient().createFromAction(adyenAction, {\n                onAdditionalDetails: (additionalActionState: AdyenAdditionalActionState) => {\n                    const paymentPayload = {\n                        methodId: adyenAction.paymentMethodType,\n                        paymentData: {\n                            nonce: JSON.stringify(additionalActionState.data),\n                        },\n                    };\n\n                    resolve(paymentPayload);\n                },\n                size: '05',\n                onError: (error: AdyenError) => reject(error),\n            });\n\n            additionalActionComponent.mount('body');\n\n            reject(new PaymentMethodCancelledError());\n        });\n    }\n\n    private _getAdyenClient(): AdyenClient {\n        if (!this._adyenClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this._adyenClient;\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-authorizenet-gateway.spec.ts",
    "content": "import {\n    MissingDataError,\n    NotInitializedError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport getCardDataResponse from '../mocks/google-pay-card-data-response.mock';\nimport { getAuthorizeNet, getGeneric } from '../mocks/google-pay-payment-method.mock';\n\nimport GooglePayAuthorizeNetGateway from './google-pay-authorizenet-gateway';\nimport GooglePayGateway from './google-pay-gateway';\n\ndescribe('GooglePayAuthorizeNetGateway', () => {\n    let gateway: GooglePayAuthorizeNetGateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        gateway = new GooglePayAuthorizeNetGateway(paymentIntegrationService);\n    });\n\n    it('is a special type of GooglePayGateway', () => {\n        expect(gateway).toBeInstanceOf(GooglePayGateway);\n    });\n\n    describe('#mapToExternalCheckoutData', () => {\n        it('should map response to external checkout data', async () => {\n            const expectedData = {\n                nonce: btoa(\n                    '{\"signature\":\"foo\",\"protocolVersion\":\"ECv1\",\"signedMessage\":{\"encryptedMessage\":\"bar\",\"ephemeralPublicKey\":\"baz\",\"tag\":\"foobar\"}}',\n                ),\n                card_information: {\n                    type: 'VISA',\n                    number: '1111',\n                },\n            };\n\n            const mappedData = await gateway.mapToExternalCheckoutData(getCardDataResponse());\n\n            expect(mappedData).toStrictEqual(expectedData);\n        });\n    });\n\n    describe('#getPaymentGatewayParameters', () => {\n        it('should return payment gateway parameters', async () => {\n            const expectedParams = {\n                gateway: 'authorizenet',\n                gatewayMerchantId: 'exampleGatewayMerchantId',\n            };\n\n            await gateway.initialize(getAuthorizeNet);\n\n            expect(gateway.getPaymentGatewayParameters()).toStrictEqual(expectedParams);\n        });\n\n        describe('should fail if:', () => {\n            test('not initialized', () => {\n                expect(() => gateway.getPaymentGatewayParameters()).toThrow(NotInitializedError);\n            });\n\n            test('initializationData is not GooglePayAuthorizeNetInitializationData', async () => {\n                await gateway.initialize(getGeneric);\n\n                expect(() => gateway.getPaymentGatewayParameters()).toThrow(MissingDataError);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-authorizenet-gateway.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport assertsIsGooglePayAuthorizeNetInitializationData from '../guards/is-google-pay-authorizenet-initialization-data';\nimport {\n    GooglePayCardDataResponse,\n    GooglePayGatewayParameters,\n    GooglePaySetExternalCheckoutData,\n} from '../types';\n\nimport GooglePayGateway from './google-pay-gateway';\n\nexport default class GooglePayAuthorizeNetGateway extends GooglePayGateway {\n    constructor(service: PaymentIntegrationService) {\n        super('authorizenet', service);\n    }\n\n    async mapToExternalCheckoutData(\n        response: GooglePayCardDataResponse,\n    ): Promise<GooglePaySetExternalCheckoutData> {\n        const data = await super.mapToExternalCheckoutData(response);\n\n        data.nonce = btoa(data.nonce);\n\n        return data;\n    }\n\n    getPaymentGatewayParameters(): GooglePayGatewayParameters {\n        const data = this.getGooglePayInitializationData();\n\n        assertsIsGooglePayAuthorizeNetInitializationData(data);\n\n        return {\n            gateway: this.getGatewayIdentifier(),\n            gatewayMerchantId: data.paymentGatewayId,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-braintree-gateway.spec.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BraintreeClient,\n    BraintreeDataCollector,\n    BraintreeGooglePayment,\n    BraintreeHostWindow,\n    BraintreeScriptLoader,\n    BraintreeSdk,\n    BraintreeSDKVersionManager,\n    BraintreeThreeDSecure,\n    getClientMock,\n    getDataCollectorMock,\n    getDeviceDataMock,\n    getGooglePaymentMock,\n    getThreeDSecureMock,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport getCardDataResponse from '../mocks/google-pay-card-data-response.mock';\nimport { getBraintree } from '../mocks/google-pay-payment-method.mock';\n\nimport GooglePayBraintreeGateway from './google-pay-braintree-gateway';\nimport GooglePayGateway from './google-pay-gateway';\n\ndescribe('GooglePayBraintreeGateway', () => {\n    let googlePayBraintreeGateway: GooglePayBraintreeGateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let braintreeDataCollectorMock: BraintreeDataCollector;\n    let braintreeHostWindowMock: BraintreeHostWindow;\n    let braintreeScriptLoader: BraintreeScriptLoader;\n    let braintreeSdk: BraintreeSdk;\n    let braintreeGooglePaymentMock: BraintreeGooglePayment;\n    let braintreeThreeDSecureMock: BraintreeThreeDSecure;\n    let braintreeClientMock: BraintreeClient;\n    let braintreeMock: PaymentMethod;\n    let braintreeSDKVersionManager: BraintreeSDKVersionManager;\n\n    const token =\n        '{\"androidPayCards\":[{\"type\":\"AndroidPayCard\",\"nonce\":\"12345678-1234-1234-1515-123412341234\",\"description\":\"Android Pay\",\"consumed\":false,\"threeDSecureInfo\":null,\"details\":{\"bin\":\"401288\",\"cardType\":\"Visa\",\"isNetworkTokenized\":false,\"lastTwo\":\"11\",\"lastFour\":\"1111\"},\"binData\":{\"prepaid\":\"No\",\"healthcare\":\"Unknown\",\"debit\":\"Unknown\",\"durbinRegulated\":\"Unknown\",\"commercial\":\"Unknown\",\"payroll\":\"Unknown\",\"issuingBank\":\"Unknown\",\"countryOfIssuance\":\"Unknown\",\"productId\":\"Unknown\"}}]}';\n\n    beforeEach(() => {\n        jest.spyOn(GooglePayGateway.prototype, 'getNonce').mockResolvedValueOnce('token');\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        braintreeHostWindowMock = window as BraintreeHostWindow;\n        braintreeSDKVersionManager = new BraintreeSDKVersionManager(paymentIntegrationService);\n        braintreeScriptLoader = new BraintreeScriptLoader(\n            getScriptLoader(),\n            braintreeHostWindowMock,\n            braintreeSDKVersionManager,\n        );\n\n        braintreeMock = getBraintree();\n\n        braintreeSdk = new BraintreeSdk(braintreeScriptLoader);\n\n        braintreeClientMock = getClientMock();\n        braintreeGooglePaymentMock = getGooglePaymentMock();\n        braintreeDataCollectorMock = getDataCollectorMock();\n        braintreeThreeDSecureMock = getThreeDSecureMock();\n\n        jest.spyOn(braintreeThreeDSecureMock, 'verifyCard').mockReturnValue(\n            Promise.resolve({\n                nonce: 'verification_nonce',\n                details: {\n                    cardType: '',\n                    lastFour: '',\n                    lastTwo: '',\n                },\n                description: '',\n                liabilityShiftPossible: true,\n                liabilityShifted: true,\n            }),\n        );\n\n        jest.spyOn(braintreeSdk, 'initialize');\n        jest.spyOn(braintreeSdk, 'getBraintreeThreeDS');\n        jest.spyOn(braintreeSdk, 'getClient').mockImplementation(() =>\n            Promise.resolve(braintreeClientMock),\n        );\n        jest.spyOn(braintreeSdk, 'getBraintreeGooglePayment').mockImplementation(() =>\n            Promise.resolve(braintreeGooglePaymentMock),\n        );\n        jest.spyOn(braintreeSdk, 'getDataCollectorOrThrow').mockImplementation(() =>\n            Promise.resolve(braintreeDataCollectorMock),\n        );\n        jest.spyOn(braintreeSdk, 'getBraintreeGooglePayment').mockImplementation(() =>\n            Promise.resolve(braintreeGooglePaymentMock),\n        );\n        jest.spyOn(braintreeSdk, 'getBraintreeThreeDS').mockImplementation(() =>\n            Promise.resolve(braintreeThreeDSecureMock),\n        );\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n\n        googlePayBraintreeGateway = new GooglePayBraintreeGateway(\n            paymentIntegrationService,\n            braintreeSdk,\n        );\n    });\n\n    it('is a special type of GooglePayGateway', () => {\n        expect(googlePayBraintreeGateway).toBeInstanceOf(GooglePayGateway);\n    });\n\n    describe('#initialize', () => {\n        it('should initialize successfully', async () => {\n            await googlePayBraintreeGateway.initialize(getBraintree);\n\n            expect(braintreeSdk.initialize).toHaveBeenCalled();\n        });\n\n        it('throw error if do not have clientToken', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...braintreeMock,\n                clientToken: undefined,\n            });\n\n            await expect(\n                googlePayBraintreeGateway.initialize(() => ({\n                    ...braintreeMock,\n                    clientToken: undefined,\n                })),\n            ).rejects.toThrow(MissingDataError);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalled();\n        });\n\n        it('fetch payment method if client token is not exist', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(braintreeMock);\n\n            await googlePayBraintreeGateway.initialize(() => ({\n                ...braintreeMock,\n                clientToken: undefined,\n            }));\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalled();\n        });\n    });\n\n    describe('#mapToExternalCheckoutData', () => {\n        it('should map response to external checkout data', async () => {\n            const mockResponse = {\n                nonce: '12345678-1234-1234-1515-123412341234',\n                card_information: {\n                    number: '1111',\n                    type: 'VISA',\n                    bin: '401288',\n                    isNetworkTokenized: false,\n                },\n            };\n\n            const dataResponse = getCardDataResponse();\n\n            dataResponse.paymentMethodData.tokenizationData.token = token;\n\n            await googlePayBraintreeGateway.initialize(() => braintreeMock);\n\n            const mappedData = await googlePayBraintreeGateway.mapToExternalCheckoutData(\n                dataResponse,\n            );\n\n            expect(mappedData).toStrictEqual(mockResponse);\n        });\n\n        it('nonce is not valid JSON', async () => {\n            const response = getCardDataResponse();\n\n            response.paymentMethodData.tokenizationData.token = 'm4lf0rm3d j50n';\n\n            const mapData = googlePayBraintreeGateway.mapToExternalCheckoutData(response);\n\n            await expect(mapData).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('nonce is in the wrong format', async () => {\n            const response = getCardDataResponse();\n\n            response.paymentMethodData.tokenizationData.token = '{\"cards\":[{\"nonce\": \"nonce\"}]}';\n\n            const mapData = googlePayBraintreeGateway.mapToExternalCheckoutData(response);\n\n            await expect(mapData).rejects.toThrow(MissingDataError);\n        });\n    });\n\n    describe('#getNonce', () => {\n        it('get nonce when 3DSecure is enabled', async () => {\n            braintreeMock.initializationData.isThreeDSecureEnabled = true;\n            braintreeMock.initializationData.card_information = {\n                type: 'type',\n                number: '1234',\n                bin: 'bin',\n                isNetworkTokenized: false,\n            };\n\n            await googlePayBraintreeGateway.initialize(() => braintreeMock);\n\n            const nonce = await googlePayBraintreeGateway.getNonce('googlepaybraintree');\n\n            expect(braintreeSdk.getBraintreeThreeDS).toHaveBeenCalled();\n            expect(nonce).toBe('verification_nonce');\n        });\n\n        it('get nonce when 3DSecure is not enabled', async () => {\n            braintreeMock.initializationData.card_information = {\n                type: 'type',\n                number: '1234',\n                bin: 'bin',\n                isNetworkTokenized: false,\n            };\n\n            await googlePayBraintreeGateway.initialize(() => braintreeMock);\n\n            const nonce = await googlePayBraintreeGateway.getNonce('googlepaybraintree');\n\n            expect(braintreeSdk.getBraintreeThreeDS).not.toHaveBeenCalled();\n            expect(nonce).toBe('token');\n        });\n\n        it('get nonce when card is network tokenized', async () => {\n            braintreeMock.initializationData.isThreeDSecureEnabled = true;\n            braintreeMock.initializationData.card_information = {\n                type: 'type',\n                number: '1234',\n                bin: 'bin',\n                isNetworkTokenized: true,\n            };\n\n            await googlePayBraintreeGateway.initialize(() => braintreeMock);\n\n            const nonce = await googlePayBraintreeGateway.getNonce('googlepaybraintree');\n\n            expect(braintreeSdk.getBraintreeThreeDS).not.toHaveBeenCalled();\n            expect(nonce).toBe('token');\n        });\n    });\n\n    describe('#extraPaymentData', () => {\n        it('get extraPaymentData', async () => {\n            await googlePayBraintreeGateway.initialize(() => braintreeMock);\n\n            const extraData = await googlePayBraintreeGateway.extraPaymentData();\n\n            expect(braintreeSdk.getDataCollectorOrThrow).toHaveBeenCalled();\n            expect(extraData.deviceSessionId).toBe(getDeviceDataMock());\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-braintree-gateway.ts",
    "content": "import {\n    BraintreeGooglePayment,\n    BraintreeGooglePayThreeDSecure,\n    BraintreeSdk,\n} from '@bigcommerce/checkout-sdk/braintree-utils';\nimport {\n    CancellablePromise,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayKey } from '../google-pay-payment-initialize-options';\nimport assertIsGooglePayBraintreeTokenObject from '../guards/is-google-pay-braintree-token-object';\nimport {\n    GooglePayCardDataResponse,\n    GooglePayGatewayParameters,\n    GooglePayInitializationData,\n    GooglePaySetExternalCheckoutData,\n} from '../types';\n\nimport GooglePayGateway from './google-pay-gateway';\n\nexport default class GooglePayBraintreeGateway extends GooglePayGateway {\n    private _braintreeGooglePayment?: BraintreeGooglePayment;\n    private _service: PaymentIntegrationService;\n    private _methodId = GooglePayKey.BRAINTREE;\n\n    constructor(service: PaymentIntegrationService, private _braintreeSdk: BraintreeSdk) {\n        super('braintree', service);\n\n        this._service = service;\n    }\n\n    async initialize(\n        getPaymentMethod: () => PaymentMethod<GooglePayInitializationData>,\n        isBuyNowFlow?: boolean,\n        currencyCode?: string,\n    ): Promise<void> {\n        await super.initialize(getPaymentMethod, isBuyNowFlow, currencyCode);\n\n        let paymentMethod = super.getPaymentMethod();\n\n        if (!paymentMethod.clientToken) {\n            const state = await this._service.loadPaymentMethod(this._methodId);\n\n            paymentMethod = state.getPaymentMethodOrThrow(this._methodId);\n        }\n\n        if (!paymentMethod.clientToken || !paymentMethod.initializationData) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        this._braintreeSdk.initialize(paymentMethod.clientToken);\n        this._braintreeGooglePayment = await this._braintreeSdk.getBraintreeGooglePayment();\n\n        return Promise.resolve();\n    }\n\n    async getNonce(methodId: string) {\n        const nonce = await super.getNonce(methodId);\n\n        const { clientToken, initializationData } = super.getPaymentMethod();\n\n        if (!clientToken || !initializationData || !initializationData.card_information?.bin) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            isThreeDSecureEnabled,\n            card_information: { bin, isNetworkTokenized },\n        } = initializationData;\n\n        if (isThreeDSecureEnabled && !isNetworkTokenized) {\n            const threeDSecure = await this._braintreeSdk.getBraintreeThreeDS();\n\n            const { orderAmount } = this._service.getState().getOrderOrThrow();\n\n            const verification = await this._braintreePresent3DSChallenge(\n                threeDSecure,\n                orderAmount,\n                nonce,\n                bin,\n            );\n\n            return verification.nonce;\n        }\n\n        return nonce;\n    }\n\n    async extraPaymentData() {\n        return {\n            deviceSessionId: await this._getBraintreeDeviceData(),\n        };\n    }\n\n    async mapToExternalCheckoutData(\n        response: GooglePayCardDataResponse,\n    ): Promise<GooglePaySetExternalCheckoutData> {\n        const data = await super.mapToExternalCheckoutData(response);\n\n        let token: unknown;\n\n        try {\n            token = JSON.parse(data.nonce);\n        } catch (error) {\n            throw new InvalidArgumentError('Unable to parse response from Google Pay.');\n        }\n\n        assertIsGooglePayBraintreeTokenObject(token);\n\n        data.nonce = token.androidPayCards[0].nonce;\n        data.card_information.bin = token.androidPayCards[0].details.bin;\n        data.card_information.isNetworkTokenized =\n            token.androidPayCards[0].details.isNetworkTokenized;\n\n        return data;\n    }\n\n    getCardParameters() {\n        return super.getCardParameters();\n    }\n\n    async getPaymentGatewayParameters(): Promise<GooglePayGatewayParameters> {\n        const braintreeGooglePayment = this.getBraintreeGooglePayment();\n\n        const request = braintreeGooglePayment.createPaymentDataRequest({\n            merchantInfo: super.getMerchantInfo(),\n            transactionInfo: super.getTransactionInfo(),\n            cardRequirements: {\n                billingAddressRequired: true,\n                billingAddressFormat: 'FULL',\n            },\n            ...(await super.getRequiredData()),\n        });\n\n        return request.paymentMethodTokenizationParameters.parameters;\n    }\n\n    private getBraintreeGooglePayment(): BraintreeGooglePayment {\n        if (!this._braintreeGooglePayment) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        return this._braintreeGooglePayment;\n    }\n\n    private async _getBraintreeDeviceData(): Promise<string | undefined> {\n        const { deviceData } = await this._braintreeSdk.getDataCollectorOrThrow();\n\n        return deviceData;\n    }\n\n    private _braintreePresent3DSChallenge(\n        threeDSecure: BraintreeGooglePayThreeDSecure,\n        amount: number,\n        nonce: string,\n        bin: string,\n    ) {\n        const verification = new CancellablePromise(\n            threeDSecure.verifyCard({\n                amount,\n                bin,\n                nonce,\n                onLookupComplete: (_data, next) => {\n                    next();\n                },\n            }),\n        );\n\n        return verification.promise;\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-checkoutcom-gateway.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    NotInitializedError,\n    PaymentIntegrationService,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport getCardDataResponse from '../mocks/google-pay-card-data-response.mock';\nimport { getCheckoutCom, getGeneric } from '../mocks/google-pay-payment-method.mock';\nimport getThreeDSecureRequestError, {\n    getGenericRequestError,\n    getThreeDSecureLikeRequestError,\n} from '../mocks/google-pay-threedsecure-request-error.mock';\n\nimport GooglePayCheckoutComGateway from './google-pay-checkoutcom-gateway';\nimport GooglePayGateway from './google-pay-gateway';\n\ndescribe('GooglePayCheckoutComGateway', () => {\n    let gateway: GooglePayCheckoutComGateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let requestSender: RequestSender;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        requestSender = createRequestSender();\n        jest.spyOn(requestSender, 'post').mockResolvedValue(getResponse({ token: 'tok_f00b4r' }));\n        gateway = new GooglePayCheckoutComGateway(paymentIntegrationService, requestSender);\n    });\n\n    it('is a special type of GooglePayGateway', () => {\n        expect(gateway).toBeInstanceOf(GooglePayGateway);\n    });\n\n    describe('#mapToExternalCheckoutData', () => {\n        it('should map response to external checkout data', async () => {\n            const expectedData = {\n                nonce: 'tok_f00b4r',\n                card_information: {\n                    type: 'VISA',\n                    number: '1111',\n                },\n            };\n\n            await gateway.initialize(getCheckoutCom);\n\n            const mappedData = await gateway.mapToExternalCheckoutData(getCardDataResponse());\n\n            expect(mappedData).toStrictEqual(expectedData);\n        });\n\n        it('should tokenize the google pay payment data', async () => {\n            await gateway.initialize(getCheckoutCom);\n            await gateway.mapToExternalCheckoutData(getCardDataResponse());\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                'https://api.sandbox.checkout.com/tokens',\n                {\n                    credentials: false,\n                    body: {\n                        type: 'googlepay',\n                        token_data: {\n                            signature: 'foo',\n                            protocolVersion: 'ECv1',\n                            signedMessage: {\n                                encryptedMessage: 'bar',\n                                ephemeralPublicKey: 'baz',\n                                tag: 'foobar',\n                            },\n                        },\n                    },\n                    headers: {\n                        Authorization: 'pk_f00-b4r',\n                        'Content-Type': 'application/json',\n                        'X-XSRF-TOKEN': null,\n                    },\n                },\n            );\n        });\n\n        describe('should fail if:', () => {\n            test('nonce is not valid JSON', async () => {\n                const response = getCardDataResponse();\n\n                response.paymentMethodData.tokenizationData.token = 'm4lf0rm3d j50n';\n\n                const mapData = gateway.mapToExternalCheckoutData(response);\n\n                await expect(mapData).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('parsed nonce is not a GooglePayTokenObject', async () => {\n                const response = getCardDataResponse();\n\n                response.paymentMethodData.tokenizationData.token = '{\"id\":\"tok_f00b4r\"}';\n\n                const mapData = gateway.mapToExternalCheckoutData(response);\n\n                await expect(mapData).rejects.toThrow(MissingDataError);\n            });\n\n            test('not initialized', async () => {\n                const mapData = gateway.mapToExternalCheckoutData(getCardDataResponse());\n\n                await expect(mapData).rejects.toThrow(NotInitializedError);\n            });\n\n            test('initializationData is not GooglePayCheckoutComInitializationData', async () => {\n                await gateway.initialize(getGeneric);\n\n                const mapData = gateway.mapToExternalCheckoutData(getCardDataResponse());\n\n                await expect(mapData).rejects.toThrow(MissingDataError);\n            });\n        });\n    });\n\n    describe('#getPaymentGatewayParameters', () => {\n        it('should return payment gateway parameters', async () => {\n            const expectedParams = {\n                gateway: 'checkoutltd',\n                gatewayMerchantId: 'pk_f00-b4r',\n            };\n\n            await gateway.initialize(getCheckoutCom);\n\n            expect(gateway.getPaymentGatewayParameters()).toStrictEqual(expectedParams);\n        });\n\n        describe('should fail if:', () => {\n            test('not initialized', () => {\n                expect(() => gateway.getPaymentGatewayParameters()).toThrow(NotInitializedError);\n            });\n\n            test('initializationData is not GooglePayCheckoutComInitializationData', async () => {\n                await gateway.initialize(getGeneric);\n\n                expect(() => gateway.getPaymentGatewayParameters()).toThrow(MissingDataError);\n            });\n        });\n    });\n\n    describe('#processAdditionalAction', () => {\n        it('should process additional action', async () => {\n            Object.defineProperty(window, 'location', {\n                value: {\n                    assign: jest.fn(),\n                },\n            });\n\n            void gateway.processAdditionalAction(getThreeDSecureRequestError());\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(window.location.assign).toHaveBeenCalledWith('https://foo.com');\n        });\n\n        describe('rejects the error if:', () => {\n            it('is not a RequestError', async () => {\n                const processError = gateway.processAdditionalAction('error');\n\n                await expect(processError).rejects.toBe('error');\n            });\n\n            it('is not a GooglePayThreeDSecureResult', async () => {\n                const processError = gateway.processAdditionalAction(getGenericRequestError());\n\n                await expect(processError).rejects.toThrow(RequestError);\n            });\n\n            test('code is not three_d_secure_required', async () => {\n                const processError = gateway.processAdditionalAction(\n                    getThreeDSecureLikeRequestError(),\n                );\n\n                await expect(processError).rejects.toThrow(RequestError);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-checkoutcom-gateway.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    InvalidArgumentError,\n    isRequestError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport assertIsGooglePayCheckoutComInitializationData from '../guards/is-google-pay-checkoutcom-initialization-data';\nimport { isGooglePayThreeDSecureResult } from '../guards/is-google-pay-threedsecure-result';\nimport assertIsGooglePayTokenObject from '../guards/is-google-pay-token-object';\nimport {\n    GooglePayAdditionalActionProcessable,\n    GooglePayCardDataResponse,\n    GooglePayCheckoutComTokenObject,\n    GooglePayGatewayParameters,\n    GooglePaySetExternalCheckoutData,\n    GooglePayTokenObject,\n} from '../types';\n\nimport GooglePayGateway from './google-pay-gateway';\n\nexport default class GooglePayCheckoutComGateway\n    extends GooglePayGateway\n    implements GooglePayAdditionalActionProcessable\n{\n    constructor(service: PaymentIntegrationService, private _requestSender: RequestSender) {\n        super('checkoutltd', service);\n    }\n\n    processAdditionalAction(error: unknown): Promise<void> {\n        return new Promise((_resolve, reject) => {\n            if (\n                isRequestError(error) &&\n                isGooglePayThreeDSecureResult(error.body) &&\n                error.body.three_ds_result.code === 'three_d_secure_required'\n            ) {\n                return window.location.assign(error.body.three_ds_result.acs_url);\n            }\n\n            reject(error);\n        });\n    }\n\n    async mapToExternalCheckoutData(\n        response: GooglePayCardDataResponse,\n    ): Promise<GooglePaySetExternalCheckoutData> {\n        const data = await super.mapToExternalCheckoutData(response);\n\n        let token: unknown;\n\n        try {\n            token = JSON.parse(data.nonce);\n        } catch (error) {\n            throw new InvalidArgumentError('Unable to parse response from Google Pay.');\n        }\n\n        assertIsGooglePayTokenObject(token);\n\n        data.nonce = await this._tokenize(token);\n\n        return data;\n    }\n\n    getPaymentGatewayParameters(): GooglePayGatewayParameters {\n        const data = this.getGooglePayInitializationData();\n\n        assertIsGooglePayCheckoutComInitializationData(data);\n\n        return {\n            gateway: this.getGatewayIdentifier(),\n            gatewayMerchantId: data.checkoutcomkey,\n        };\n    }\n\n    private async _tokenize(token_data: GooglePayTokenObject): Promise<string> {\n        const url = this.getPaymentMethod().config.testMode\n            ? 'https://api.sandbox.checkout.com/tokens'\n            : 'https://api.checkout.com/tokens';\n        const data = this.getGooglePayInitializationData();\n\n        assertIsGooglePayCheckoutComInitializationData(data);\n\n        const { body } = await this._requestSender.post<GooglePayCheckoutComTokenObject>(url, {\n            credentials: false,\n            body: {\n                type: 'googlepay',\n                token_data,\n            },\n            headers: {\n                Authorization: data.checkoutcomkey,\n                'Content-Type': ContentType.Json,\n                'X-XSRF-TOKEN': null,\n            },\n        });\n\n        return body.token;\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-cybersource-gateway.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport getCardDataResponse from '../mocks/google-pay-card-data-response.mock';\nimport { getGeneric } from '../mocks/google-pay-payment-method.mock';\n\nimport GooglePayCybersourceGateway from './google-pay-cybersource-gateway';\nimport GooglePayGateway from './google-pay-gateway';\n\ndescribe('GooglePayCybersourceGateway', () => {\n    let gateway: GooglePayCybersourceGateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        gateway = new GooglePayCybersourceGateway(paymentIntegrationService);\n    });\n\n    it('is a special type of GooglePayGateway', () => {\n        expect(gateway).toBeInstanceOf(GooglePayGateway);\n    });\n\n    describe('#mapToExternalCheckoutData', () => {\n        it('should map response to external checkout data', async () => {\n            const expectedData = {\n                nonce: btoa(\n                    '{\"signature\":\"foo\",\"protocolVersion\":\"ECv1\",\"signedMessage\":{\"encryptedMessage\":\"bar\",\"ephemeralPublicKey\":\"baz\",\"tag\":\"foobar\"}}',\n                ),\n                card_information: {\n                    type: 'VISA',\n                    number: '1111',\n                },\n            };\n\n            const mappedData = await gateway.mapToExternalCheckoutData(getCardDataResponse());\n\n            expect(mappedData).toStrictEqual(expectedData);\n        });\n    });\n\n    describe('#super.getPaymentGatewayParameters', () => {\n        it('should return the gateway identifier', async () => {\n            await gateway.initialize(getGeneric);\n\n            const params = await gateway.getPaymentGatewayParameters();\n\n            expect(params.gateway).toBe('cybersource');\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-cybersource-gateway.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayCardDataResponse, GooglePaySetExternalCheckoutData } from '../types';\n\nimport GooglePayGateway from './google-pay-gateway';\n\nexport default class GooglePayCybersourceGateway extends GooglePayGateway {\n    constructor(service: PaymentIntegrationService) {\n        super('cybersource', service);\n    }\n\n    async mapToExternalCheckoutData(\n        response: GooglePayCardDataResponse,\n    ): Promise<GooglePaySetExternalCheckoutData> {\n        const data = await super.mapToExternalCheckoutData(response);\n\n        data.nonce = btoa(data.nonce);\n\n        return data;\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-gateway.spec.ts",
    "content": "import {\n    InvalidArgumentError,\n    MissingDataError,\n    NotInitializedError,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getCheckout,\n    getConfig,\n    getConsignment,\n    getCurrency,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { isWebView } from '@bigcommerce/checkout-sdk/utility';\n\nimport getCardDataResponse from '../mocks/google-pay-card-data-response.mock';\nimport { getAuthorizeNet, getGeneric } from '../mocks/google-pay-payment-method.mock';\nimport { CallbackIntentsType, CallbackTriggerType, GooglePayFullBillingAddress } from '../types';\n\nimport GooglePayGateway from './google-pay-gateway';\n\nimport SpyInstance = jest.SpyInstance;\n\njest.mock('@bigcommerce/checkout-sdk/utility', () => ({\n    ...jest.requireActual('@bigcommerce/checkout-sdk/utility'),\n    isWebView: jest.fn(),\n}));\n\ndescribe('GooglePayGateway', () => {\n    let gateway: GooglePayGateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n    const storeConfig = getConfig().storeConfig;\n    const storeConfigWithFeaturesOn = {\n        ...storeConfig,\n        checkoutSettings: {\n            ...storeConfig.checkoutSettings,\n            features: {\n                ...storeConfig.checkoutSettings.features,\n                'PI-4290.google_pay_require_shipping_address': true,\n            },\n        },\n    };\n\n    beforeEach(() => {\n        jest.clearAllMocks();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        jest.spyOn(paymentIntegrationService, 'loadShippingCountries').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfigWithFeaturesOn,\n        );\n\n        gateway = new GooglePayGateway('example', paymentIntegrationService);\n    });\n\n    describe('#initialize', () => {\n        it('should initialize the gateway', async () => {\n            const initialize = gateway.initialize(getGeneric);\n\n            await expect(initialize).resolves.toBeUndefined();\n        });\n    });\n\n    describe('#getCardParameters', () => {\n        it('should return card parameters', async () => {\n            const expectedParams = {\n                allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n                allowedCardNetworks: ['AMEX', 'DISCOVER', 'JCB', 'VISA', 'MASTERCARD'],\n                billingAddressRequired: true,\n                billingAddressParameters: {\n                    format: 'FULL',\n                    phoneNumberRequired: true,\n                },\n            };\n\n            await gateway.initialize(getGeneric);\n\n            expect(gateway.getCardParameters()).toStrictEqual(expectedParams);\n        });\n\n        it('should return only allowed card networks', async () => {\n            const expectedAllowedCardNetworks = ['AMEX', 'DISCOVER', 'JCB', 'VISA', 'MASTERCARD'];\n\n            await gateway.initialize(() => ({\n                ...getGeneric(),\n                supportedCards: [\n                    'AMEX',\n                    'FOO',\n                    'DISCOVER',\n                    'BAR',\n                    'JCB',\n                    'BAZ',\n                    'VISA',\n                    'FOOBAR',\n                    'MC',\n                ],\n            }));\n\n            expect(gateway.getCardParameters().allowedCardNetworks).toStrictEqual(\n                expectedAllowedCardNetworks,\n            );\n        });\n    });\n\n    describe('#getPaymentGatewayParameters', () => {\n        it('should return payment gateway parameters', async () => {\n            const expectedParams = {\n                gateway: 'example',\n                gatewayMerchantId: 'exampleGatewayMerchantId',\n            };\n\n            await gateway.initialize(getGeneric);\n\n            expect(gateway.getPaymentGatewayParameters()).toStrictEqual(expectedParams);\n        });\n\n        describe('should fail if:', () => {\n            test('not initialized', () => {\n                expect(() => gateway.getPaymentGatewayParameters()).toThrow(NotInitializedError);\n            });\n\n            test('gatewayMerchantId is missing', async () => {\n                await gateway.initialize(getAuthorizeNet);\n\n                expect(() => gateway.getPaymentGatewayParameters()).toThrow(InvalidArgumentError);\n            });\n        });\n    });\n\n    describe('#getTransactionInfo', () => {\n        it('should return ESTIMATED transaction info', async () => {\n            const expectedInfo = {\n                countryCode: 'US',\n                currencyCode: 'USD',\n                totalPriceStatus: 'ESTIMATED',\n                totalPrice: '0',\n            };\n\n            await gateway.initialize(getGeneric);\n\n            expect(gateway.getTransactionInfo()).toStrictEqual(expectedInfo);\n            expect(paymentIntegrationService.getState().getCartOrThrow).toHaveBeenCalled();\n        });\n\n        it('should return transaction info (Buy Now Flow)', async () => {\n            const expectedInfo = {\n                countryCode: 'US',\n                currencyCode: 'USD',\n                totalPriceStatus: 'ESTIMATED',\n                totalPrice: '0',\n            };\n\n            await gateway.initialize(getGeneric, true, 'USD');\n\n            expect(gateway.getTransactionInfo()).toStrictEqual(expectedInfo);\n            expect(paymentIntegrationService.getState().getCartOrThrow).not.toHaveBeenCalled();\n        });\n\n        describe('should fail if:', () => {\n            it('currencyCode is not passed (Buy Now flow)', async () => {\n                try {\n                    await gateway.initialize(getGeneric, true);\n                } catch (error) {\n                    expect(error).toBeInstanceOf(InvalidArgumentError);\n                }\n            });\n        });\n    });\n\n    describe('#setShouldRequestShipping', () => {\n        beforeEach(() => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                getCart(),\n            );\n        });\n\n        it('_isShippingAddressRequired should return false', async () => {\n            await gateway.initialize(getGeneric);\n            gateway.setShouldRequestShipping(false);\n\n            expect(gateway.getCallbackIntents()).toStrictEqual([CallbackIntentsType.OFFER]);\n        });\n\n        it('_isShippingAddressRequired should be true by default', async () => {\n            await gateway.initialize(getGeneric);\n\n            expect(gateway.getCallbackIntents()).toStrictEqual([\n                CallbackIntentsType.OFFER,\n                CallbackIntentsType.SHIPPING_ADDRESS,\n                CallbackIntentsType.SHIPPING_OPTION,\n            ]);\n        });\n    });\n\n    describe('#getMerchantInfo', () => {\n        it('should get merchant info', async () => {\n            const expectedInfo = {\n                merchantName: 'Example Merchant',\n                merchantId: '12345678901234567890',\n                authJwt: 'foo.bar.baz',\n            };\n\n            await gateway.initialize(getGeneric);\n\n            expect(gateway.getMerchantInfo()).toStrictEqual(expectedInfo);\n        });\n    });\n\n    describe('#getRequiredData', () => {\n        it('should only require email is we setShouldRequestShipping to false', async () => {\n            gateway.setShouldRequestShipping(false);\n\n            const expectedRequiredData = {\n                emailRequired: true,\n            };\n\n            await gateway.initialize(getGeneric);\n\n            await expect(gateway.getRequiredData()).resolves.toStrictEqual(expectedRequiredData);\n        });\n\n        it('should require email and shipping address', async () => {\n            const expectedRequiredData = {\n                emailRequired: true,\n                shippingAddressRequired: true,\n                shippingOptionRequired: true,\n                shippingAddressParameters: {\n                    phoneNumberRequired: true,\n                    allowedCountryCodes: ['AU', 'US', 'JP'],\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getShippingAddress',\n            ).mockReturnValueOnce(undefined);\n\n            await gateway.initialize(getGeneric);\n\n            await expect(gateway.getRequiredData()).resolves.toStrictEqual(expectedRequiredData);\n        });\n\n        it('should require shipping options', async () => {\n            const expectedRequiredData = {\n                emailRequired: true,\n                shippingAddressRequired: true,\n                shippingOptionRequired: true,\n                shippingAddressParameters: {\n                    phoneNumberRequired: true,\n                    allowedCountryCodes: ['AU', 'US', 'JP'],\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getShippingAddress',\n            ).mockReturnValueOnce(undefined);\n\n            await gateway.initialize(getGeneric);\n\n            await expect(gateway.getRequiredData()).resolves.toStrictEqual(expectedRequiredData);\n        });\n    });\n\n    describe('#getCallbackIntents', () => {\n        it('should return only offer callback intent for disabled shipping options experiment', async () => {\n            gateway.setShouldRequestShipping(false);\n\n            const expectedCallbackIntents = [CallbackIntentsType.OFFER];\n\n            await gateway.initialize(getGeneric);\n\n            expect(gateway.getCallbackIntents()).toStrictEqual(expectedCallbackIntents);\n        });\n\n        it('should return only offer callback intent when shipping not required', async () => {\n            gateway.setShouldRequestShipping(false);\n\n            const expectedCallbackIntents = [CallbackIntentsType.OFFER];\n\n            await gateway.initialize(getGeneric);\n\n            expect(gateway.getCallbackIntents()).toStrictEqual(expectedCallbackIntents);\n        });\n\n        it('should return shipping callback intents', async () => {\n            const expectedCallbackIntents = [\n                CallbackIntentsType.OFFER,\n                CallbackIntentsType.SHIPPING_ADDRESS,\n                CallbackIntentsType.SHIPPING_OPTION,\n            ];\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getShippingAddress',\n            ).mockReturnValueOnce(undefined);\n\n            await gateway.initialize(getGeneric);\n\n            expect(gateway.getCallbackIntents()).toStrictEqual(expectedCallbackIntents);\n        });\n    });\n\n    describe('#getCallbackTriggers', () => {\n        it('should return initialize triggers', async () => {\n            const expectedCallbackTriggers = {\n                availableTriggers: [\n                    CallbackTriggerType.INITIALIZE,\n                    CallbackTriggerType.SHIPPING_ADDRESS,\n                    CallbackTriggerType.SHIPPING_OPTION,\n                    CallbackTriggerType.OFFER,\n                ],\n                initializationTrigger: [CallbackTriggerType.INITIALIZE],\n                addressChangeTriggers: [\n                    CallbackTriggerType.INITIALIZE,\n                    CallbackTriggerType.SHIPPING_ADDRESS,\n                ],\n                shippingOptionsChangeTriggers: [CallbackTriggerType.SHIPPING_OPTION],\n                offerChangeTriggers: [CallbackTriggerType.OFFER],\n            };\n\n            await gateway.initialize(getGeneric);\n\n            expect(gateway.getCallbackTriggers()).toStrictEqual(expectedCallbackTriggers);\n        });\n    });\n\n    describe('#getNonce', () => {\n        it('should throw an error if initializationData not exists', async () => {\n            const initializeData = () => {\n                const generic = getGeneric();\n\n                return {\n                    ...generic,\n                    initializationData: undefined,\n                };\n            };\n            let error: MissingDataError | undefined;\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValueOnce(initializeData());\n\n            await gateway.initialize(initializeData);\n\n            try {\n                await gateway.getNonce('methodId');\n            } catch (err) {\n                if (err instanceof MissingDataError) {\n                    error = err;\n                }\n            } finally {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('should throw an error if nonce not exists', async () => {\n            const initializeData = () => {\n                const generic = getGeneric();\n\n                return {\n                    ...generic,\n                    initializationData: {\n                        ...generic.initializationData!,\n                        nonce: undefined,\n                    },\n                };\n            };\n            let error: MissingDataError | undefined;\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValueOnce(initializeData());\n\n            await gateway.initialize(initializeData);\n\n            try {\n                await gateway.getNonce('methodId');\n            } catch (err) {\n                if (err instanceof MissingDataError) {\n                    error = err;\n                }\n            } finally {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('should return nonce', async () => {\n            const initializeData = () => {\n                const generic = getGeneric();\n\n                return {\n                    ...generic,\n                    initializationData: {\n                        ...generic.initializationData!,\n                        nonce: 'gpay-nonce',\n                    },\n                };\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValueOnce(initializeData());\n\n            await gateway.initialize(initializeData);\n\n            expect(await gateway.getNonce('methodId')).toBe('gpay-nonce');\n        });\n    });\n\n    describe('#handleCoupons', () => {\n        let applyCouponIntegrationService: SpyInstance<\n            Promise<PaymentIntegrationSelectors>,\n            [coupon: string, options?: RequestOptions<Record<string, unknown>> | undefined]\n        >;\n\n        let removeCouponIntegrationService: SpyInstance<\n            Promise<PaymentIntegrationSelectors>,\n            [coupon: string, options?: RequestOptions<Record<string, unknown>> | undefined]\n        >;\n\n        beforeEach(() => {\n            applyCouponIntegrationService = jest.spyOn(paymentIntegrationService, 'applyCoupon');\n            removeCouponIntegrationService = jest.spyOn(paymentIntegrationService, 'removeCoupon');\n        });\n\n        it('should apply coupon codes', async () => {\n            jest.spyOn(gateway, 'getAppliedCoupons')\n                .mockReturnValueOnce({ offers: [] })\n                .mockReturnValueOnce({\n                    offers: [{ redemptionCode: 'code1', description: 'some description' }],\n                });\n\n            await gateway.initialize(getGeneric);\n\n            const result = await gateway.handleCoupons({\n                redemptionCodes: ['code1'],\n            });\n\n            expect(removeCouponIntegrationService).not.toHaveBeenCalled();\n            expect(applyCouponIntegrationService).toHaveBeenCalledTimes(1);\n            expect(result).toStrictEqual({\n                error: undefined,\n                newOfferInfo: {\n                    offers: [\n                        {\n                            description: 'some description',\n                            redemptionCode: 'code1',\n                        },\n                    ],\n                },\n            });\n        });\n\n        it('should remove coupon codes', async () => {\n            jest.spyOn(gateway, 'getAppliedCoupons')\n                .mockReturnValueOnce({\n                    offers: [\n                        { redemptionCode: 'code1', description: 'some description' },\n                        { redemptionCode: 'code2', description: 'some description 2' },\n                        { redemptionCode: 'code3', description: 'some description 3' },\n                    ],\n                })\n                .mockReturnValueOnce({\n                    offers: [{ redemptionCode: 'code2', description: 'some description 2' }],\n                });\n\n            await gateway.initialize(getGeneric);\n\n            const result = await gateway.handleCoupons({\n                redemptionCodes: ['code2'],\n            });\n\n            expect(applyCouponIntegrationService).not.toHaveBeenCalled();\n            expect(removeCouponIntegrationService).toHaveBeenCalledTimes(2);\n            expect(result).toStrictEqual({\n                error: undefined,\n                newOfferInfo: {\n                    offers: [\n                        {\n                            description: 'some description 2',\n                            redemptionCode: 'code2',\n                        },\n                    ],\n                },\n            });\n        });\n\n        it('should return Google Pay error object if applyCoupon is failed', async () => {\n            jest.spyOn(gateway, 'getAppliedCoupons')\n                .mockReturnValueOnce({ offers: [] })\n                .mockReturnValueOnce({\n                    offers: [{ redemptionCode: 'code444', description: 'some description' }],\n                });\n            jest.spyOn(paymentIntegrationService, 'applyCoupon').mockRejectedValueOnce(\n                new Error('Coupon error'),\n            );\n\n            await gateway.initialize(getGeneric);\n\n            const result = await gateway.handleCoupons({\n                redemptionCodes: ['code444'],\n            });\n\n            expect(result).toStrictEqual({\n                error: {\n                    intent: 'OFFER',\n                    message: 'Coupon error',\n                    reason: 'OFFER_INVALID',\n                },\n                newOfferInfo: {\n                    offers: [\n                        {\n                            description: 'some description',\n                            redemptionCode: 'code444',\n                        },\n                    ],\n                },\n            });\n        });\n    });\n\n    describe('#extraPaymentData', () => {\n        it('should return extra payment data as undefined', async () => {\n            await gateway.initialize(getGeneric);\n\n            await expect(gateway.extraPaymentData()).resolves.toBeUndefined();\n        });\n    });\n\n    describe('#handleShippingAddressChange', () => {\n        const defaultGPayShippingAddress: GooglePayFullBillingAddress = {\n            address1: '',\n            address2: '',\n            address3: '',\n            administrativeArea: 'US',\n            locality: 'TX',\n            sortingCode: '78726',\n            name: '',\n            postalCode: '',\n            countryCode: '',\n        };\n\n        it('should not update shipping address if it does not provided', async () => {\n            const updateShippingAddressMock = jest.spyOn(\n                paymentIntegrationService,\n                'updateShippingAddress',\n            );\n\n            await gateway.initialize(getGeneric);\n\n            await gateway.handleShippingAddressChange();\n\n            expect(updateShippingAddressMock).not.toHaveBeenCalled();\n        });\n\n        it('should update shipping address', async () => {\n            const mappedAddressMock = {\n                firstName: '',\n                lastName: '',\n                company: 'Bigcommerce',\n                address1: '',\n                address2: '',\n                city: 'TX',\n                stateOrProvince: 'US',\n                stateOrProvinceCode: 'US',\n                countryCode: '',\n                postalCode: '',\n                phone: '555-555-5555',\n                customFields: [],\n            };\n\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValueOnce({\n                ...paymentIntegrationService.getState(),\n                getShippingAddress: () => ({\n                    ...mappedAddressMock,\n                    country: 'US',\n                    company: 'Bigcommerce',\n                    phone: '555-555-5555',\n                }),\n            });\n\n            const updateShippingAddressMock = jest.spyOn(\n                paymentIntegrationService,\n                'updateShippingAddress',\n            );\n\n            await gateway.initialize(getGeneric);\n\n            await gateway.handleShippingAddressChange(defaultGPayShippingAddress);\n\n            expect(updateShippingAddressMock).toHaveBeenCalledWith(mappedAddressMock);\n        });\n\n        it('should return undefined if consignments does not exists', async () => {\n            await gateway.initialize(getGeneric);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignments').mockReturnValueOnce(\n                undefined,\n            );\n\n            await expect(\n                gateway.handleShippingAddressChange(defaultGPayShippingAddress),\n            ).resolves.toBeUndefined();\n        });\n\n        it('should return empty data if consignments empty', async () => {\n            await gateway.initialize(getGeneric);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignments').mockReturnValueOnce(\n                [],\n            );\n\n            await expect(\n                gateway.handleShippingAddressChange(defaultGPayShippingAddress),\n            ).resolves.toBeUndefined();\n        });\n\n        it('should return undefined if no available shipping methods', async () => {\n            const consiment = {\n                ...getConsignment(),\n                selectedShippingOption: undefined,\n                availableShippingOptions: undefined,\n            };\n\n            await gateway.initialize(getGeneric);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignments').mockReturnValueOnce(\n                [consiment],\n            );\n\n            await expect(\n                gateway.handleShippingAddressChange(defaultGPayShippingAddress),\n            ).resolves.toBeUndefined();\n        });\n\n        it('should return empty available shipping methods with no preselected option', async () => {\n            const consignment = {\n                ...getConsignment(),\n                selectedShippingOption: undefined,\n            };\n            const expectedSippingOptions = [\n                {\n                    id: consignment.availableShippingOptions![0].id,\n                    label: `$0.00 ${consignment.availableShippingOptions![0].description}`,\n                    description: consignment.availableShippingOptions![0].additionalDescription,\n                },\n            ];\n            const selectShippingOptionMock = jest.spyOn(\n                paymentIntegrationService,\n                'selectShippingOption',\n            );\n\n            await gateway.initialize(getGeneric);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignments').mockReturnValueOnce(\n                [consignment],\n            );\n\n            await expect(\n                gateway.handleShippingAddressChange(defaultGPayShippingAddress),\n            ).resolves.toStrictEqual({\n                defaultSelectedOptionId: consignment.availableShippingOptions![0].id,\n                shippingOptions: expectedSippingOptions,\n            });\n            expect(selectShippingOptionMock).toHaveBeenCalledWith(\n                consignment.availableShippingOptions![0].id,\n            );\n        });\n\n        it('should return available shipping options with preselected recommended option first', async () => {\n            const consignment = {\n                ...getConsignment(),\n                selectedShippingOption: undefined,\n                availableShippingOptions: [\n                    {\n                        id: '7ac7895dc66b9773d19234c065ad4803',\n                        type: 'shipping_pickupinstore',\n                        description: 'Pick UP',\n                        imageUrl: '',\n                        isRecommended: false,\n                        cost: 0,\n                        transitTime: '',\n                        additionalDescription: '',\n                    },\n                    getShippingOption(),\n                ],\n            };\n\n            const expectedSippingOptions = [\n                {\n                    id: consignment.availableShippingOptions[0].id,\n                    label: `$0.00 ${consignment.availableShippingOptions[0].description}`,\n                    description: consignment.availableShippingOptions[0].additionalDescription,\n                },\n                {\n                    id: consignment.availableShippingOptions[1].id,\n                    label: `$0.00 ${consignment.availableShippingOptions[1].description}`,\n                    description: consignment.availableShippingOptions[1].additionalDescription,\n                },\n            ];\n            const selectShippingOptionMock = jest.spyOn(\n                paymentIntegrationService,\n                'selectShippingOption',\n            );\n\n            await gateway.initialize(getGeneric);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignments').mockReturnValueOnce(\n                [consignment],\n            );\n\n            await expect(\n                gateway.handleShippingAddressChange(defaultGPayShippingAddress),\n            ).resolves.toStrictEqual({\n                defaultSelectedOptionId: consignment.availableShippingOptions[1].id,\n                shippingOptions: expectedSippingOptions,\n            });\n            expect(selectShippingOptionMock).toHaveBeenCalledWith(\n                consignment.availableShippingOptions[1].id,\n            );\n        });\n\n        it('should return empty available shipping methods with preselected option', async () => {\n            const consignment = getConsignment();\n            const expectedSippingOptions = [\n                {\n                    id: consignment.availableShippingOptions![0].id,\n                    label: `$0.00 ${consignment.availableShippingOptions![0].description}`,\n                    description: consignment.availableShippingOptions![0].additionalDescription,\n                },\n            ];\n            const selectShippingOptionMock = jest.spyOn(\n                paymentIntegrationService,\n                'selectShippingOption',\n            );\n\n            await gateway.initialize(getGeneric);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignments').mockReturnValueOnce(\n                [consignment],\n            );\n\n            await expect(\n                gateway.handleShippingAddressChange(defaultGPayShippingAddress),\n            ).resolves.toStrictEqual({\n                defaultSelectedOptionId: consignment.selectedShippingOption?.id,\n                shippingOptions: expectedSippingOptions,\n            });\n            expect(selectShippingOptionMock).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#handleShippingOptionChange', () => {\n        it('should update shipping option', async () => {\n            const selectShippingOptionMock = jest.spyOn(\n                paymentIntegrationService,\n                'selectShippingOption',\n            );\n\n            await gateway.initialize(getGeneric);\n\n            await gateway.handleShippingOptionChange('optionId');\n\n            expect(selectShippingOptionMock).toHaveBeenCalledWith('optionId');\n        });\n\n        it('should not update shipping option if it does not selected', async () => {\n            const selectShippingOptionMock = jest.spyOn(\n                paymentIntegrationService,\n                'selectShippingOption',\n            );\n\n            await gateway.initialize(getGeneric);\n\n            await gateway.handleShippingOptionChange('shipping_option_unselected');\n\n            expect(selectShippingOptionMock).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#getTotalPrice', () => {\n        beforeEach(() => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue(storeConfigWithFeaturesOn);\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                getCart(),\n            );\n            jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n                getCheckout(),\n            );\n        });\n\n        it('should return total price', async () => {\n            const expectedPrice = '190.00';\n\n            await gateway.initialize(getGeneric);\n\n            expect(gateway.getTotalPrice()).toBe(expectedPrice);\n        });\n\n        describe('when experiment PI-5075.google_pay_round_total_price_to_max_2_decimal_places is on', () => {\n            const storeConfigWithRoundingExp = {\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        'PI-5075.google_pay_round_total_price_to_max_2_decimal_places': true,\n                    },\n                },\n            };\n\n            it('should return total price capped to 2 decimal places when total price has 3 decimal places originally', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getStoreConfigOrThrow',\n                ).mockReturnValueOnce(storeConfigWithRoundingExp);\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getCartOrThrow',\n                ).mockReturnValueOnce({\n                    ...getCart(),\n                    currency: { ...getCurrency(), decimalPlaces: 3 },\n                });\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getCheckoutOrThrow',\n                ).mockReturnValueOnce({\n                    ...getCheckout(),\n                    outstandingBalance: 10.125,\n                });\n\n                await gateway.initialize(getGeneric);\n\n                expect(gateway.getTotalPrice()).toBe('10.13');\n            });\n\n            it('should return total price unchanged when total price has 2 decimal places', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getStoreConfigOrThrow',\n                ).mockReturnValueOnce(storeConfigWithRoundingExp);\n\n                await gateway.initialize(getGeneric);\n\n                expect(gateway.getTotalPrice()).toBe('190.00');\n            });\n        });\n\n        it('should return total price with full decimal places when experiment PI-5075.google_pay_round_total_price_to_max_2_decimal_places is off', async () => {\n            const storeConfigWithRoundingExpOff = {\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        'PI-5075.google_pay_round_total_price_to_max_2_decimal_places': false,\n                    },\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValueOnce(storeConfigWithRoundingExpOff);\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValueOnce({\n                ...getCart(),\n                currency: { ...getCurrency(), decimalPlaces: 3 },\n            });\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getCheckoutOrThrow',\n            ).mockReturnValueOnce({\n                ...getCheckout(),\n                outstandingBalance: 10.125,\n            });\n\n            await gateway.initialize(getGeneric);\n\n            expect(gateway.getTotalPrice()).toBe('10.125');\n        });\n    });\n\n    describe('#mapToExternalCheckoutData', () => {\n        it('should map response to external checkout data', async () => {\n            const expectedData = {\n                nonce: '{\"signature\":\"foo\",\"protocolVersion\":\"ECv1\",\"signedMessage\":{\"encryptedMessage\":\"bar\",\"ephemeralPublicKey\":\"baz\",\"tag\":\"foobar\"}}',\n                card_information: {\n                    type: 'VISA',\n                    number: '1111',\n                },\n            };\n\n            const mappedData = await gateway.mapToExternalCheckoutData(getCardDataResponse());\n\n            expect(mappedData).toStrictEqual(expectedData);\n        });\n\n        it('should throw an error if nonce is not sent from Google', async () => {\n            const response = getCardDataResponse();\n\n            response.paymentMethodData.tokenizationData.token = '';\n\n            let error: MissingDataError | undefined;\n\n            try {\n                await gateway.mapToExternalCheckoutData(response);\n            } catch (err) {\n                if (err instanceof MissingDataError) {\n                    error = err;\n                }\n            } finally {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n    });\n\n    describe('#mapToBillingAddressRequestBody', () => {\n        it('should map response to billing address request body', () => {\n            const expectedAddress = {\n                email: 'test.tester@bigcommerce.com',\n                firstName: 'John',\n                lastName: 'Doe',\n                company: 'Bigcommerce',\n                address1: '505 Oakland Ave',\n                address2: 'Building 1, 1st Floor',\n                city: 'Austin',\n                stateOrProvince: 'TX',\n                stateOrProvinceCode: 'TX',\n                countryCode: 'US',\n                postalCode: '78703',\n                phone: '+1 555-555-5555',\n                customFields: [{ fieldId: 'test field', fieldValue: '123123' }],\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddress',\n            ).mockReturnValueOnce({\n                ...getBillingAddress(),\n                email: 'test.tester@bigcommerce.com',\n                customFields: [{ fieldId: 'test field', fieldValue: '123123' }],\n            });\n\n            const mappedAddress = gateway.mapToBillingAddressRequestBody(getCardDataResponse());\n\n            expect(mappedAddress).toStrictEqual(expectedAddress);\n        });\n\n        it('should use stateOrProvinceCode if city is empty', () => {\n            const expectedAddress = {\n                email: 'test.tester@bigcommerce.com',\n                firstName: 'John',\n                lastName: 'Doe',\n                company: 'Bigcommerce',\n                address1: '505 Oakland Ave',\n                address2: 'Building 1, 1st Floor',\n                city: 'TX',\n                stateOrProvince: 'TX',\n                stateOrProvinceCode: 'TX',\n                countryCode: 'US',\n                postalCode: '78703',\n                phone: '+1 555-555-5555',\n                customFields: [],\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddress',\n            ).mockReturnValueOnce({\n                ...getBillingAddress(),\n                email: 'test.tester@bigcommerce.com',\n            });\n\n            const cardDataResponse = getCardDataResponse();\n            const mappedAddress = gateway.mapToBillingAddressRequestBody({\n                ...cardDataResponse,\n                paymentMethodData: {\n                    ...cardDataResponse.paymentMethodData,\n                    info: {\n                        ...cardDataResponse.paymentMethodData.info,\n                        billingAddress: {\n                            phoneNumber: '+1 555-555-5555',\n                            address3: '',\n                            sortingCode: '',\n                            address2: 'Building 1, 1st Floor',\n                            countryCode: 'US',\n                            address1: '505 Oakland Ave',\n                            postalCode: '78703',\n                            name: 'John Doe',\n                            administrativeArea: 'TX',\n                            locality: '',\n                        },\n                    },\n                },\n            });\n\n            expect(mappedAddress).toStrictEqual(expectedAddress);\n        });\n\n        it('should call getBillingAddress', () => {\n            gateway.mapToBillingAddressRequestBody(getCardDataResponse());\n\n            expect(paymentIntegrationService.getState().getBillingAddress).toHaveBeenCalled();\n        });\n\n        it('should use fallback data', () => {\n            const response = getCardDataResponse();\n            const expectedAddress = {\n                email: 'john.doe@example.com',\n                company: '',\n                phone: '',\n            };\n\n            delete response.paymentMethodData.info.billingAddress?.phoneNumber;\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddress',\n            ).mockReturnValueOnce(undefined);\n\n            const mappedAddress = gateway.mapToBillingAddressRequestBody(response);\n\n            expect(mappedAddress).toMatchObject(expectedAddress);\n        });\n\n        it('should return undefined if billingAddress is missing in the response', () => {\n            const response = getCardDataResponse();\n\n            delete response.paymentMethodData.info.billingAddress;\n\n            const mapAddress = gateway.mapToBillingAddressRequestBody(response);\n\n            expect(mapAddress).toBeUndefined();\n        });\n    });\n\n    describe('#mapToShippingAddressRequestBody', () => {\n        it('should map response to address request body', () => {\n            const expectedAddress = {\n                firstName: 'John',\n                lastName: 'Doe',\n                company: 'Bigcommerce',\n                address1: '11305 4 Points Dr',\n                address2: 'Building 2, Suite 100',\n                city: 'Austin',\n                stateOrProvince: 'TX',\n                stateOrProvinceCode: 'TX',\n                countryCode: 'US',\n                postalCode: '78726',\n                phone: '+1 555-555-5555',\n                customFields: [],\n            };\n\n            const mappedAddress = gateway.mapToShippingAddressRequestBody(getCardDataResponse());\n\n            expect(mappedAddress).toStrictEqual(expectedAddress);\n        });\n\n        it('should call getShippingAddress', () => {\n            gateway.mapToShippingAddressRequestBody(getCardDataResponse());\n\n            expect(paymentIntegrationService.getState().getShippingAddress).toHaveBeenCalled();\n        });\n\n        it('should use fallback data', () => {\n            const response = getCardDataResponse();\n            const expectedAddress = {\n                company: '',\n                phone: '',\n            };\n\n            delete response.shippingAddress?.phoneNumber;\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getShippingAddress',\n            ).mockReturnValueOnce(undefined);\n\n            const mappedAddress = gateway.mapToShippingAddressRequestBody(response);\n\n            expect(mappedAddress).toMatchObject(expectedAddress);\n        });\n\n        it('should return undefined if billingAddress is missing in the response', () => {\n            const response = getCardDataResponse();\n\n            delete response.shippingAddress;\n\n            const mapAddress = gateway.mapToShippingAddressRequestBody(response);\n\n            expect(mapAddress).toBeUndefined();\n        });\n    });\n\n    describe('#isWebViewWithRestrictions', () => {\n        beforeEach(async () => {\n            await gateway.initialize(getGeneric);\n        });\n\n        it('should return true when isWebView returns true and experiment flag is not set', () => {\n            (isWebView as jest.Mock).mockReturnValue(true);\n\n            expect(gateway.isWebViewWithRestrictions()).toBe(true);\n        });\n\n        it('should return false when isWebView returns false and experiment flag is not set', () => {\n            (isWebView as jest.Mock).mockReturnValue(false);\n\n            expect(gateway.isWebViewWithRestrictions()).toBe(false);\n        });\n\n        it('should return true when experiment is on and isWebView returns true', () => {\n            (isWebView as jest.Mock).mockReturnValue(true);\n            gateway.setIsWebViewExperimentOn(true);\n\n            expect(gateway.isWebViewWithRestrictions()).toBe(true);\n        });\n\n        it('should return false when experiment is on and isWebView returns false', () => {\n            (isWebView as jest.Mock).mockReturnValue(false);\n            gateway.setIsWebViewExperimentOn(true);\n\n            expect(gateway.isWebViewWithRestrictions()).toBe(false);\n        });\n\n        it('should return false when experiment is off regardless of isWebView', () => {\n            (isWebView as jest.Mock).mockReturnValue(true);\n            gateway.setIsWebViewExperimentOn(false);\n\n            expect(gateway.isWebViewWithRestrictions()).toBe(false);\n        });\n\n        it('should return false when experiment is off and isWebView is false', () => {\n            (isWebView as jest.Mock).mockReturnValue(false);\n            gateway.setIsWebViewExperimentOn(false);\n\n            expect(gateway.isWebViewWithRestrictions()).toBe(false);\n        });\n    });\n\n    describe('#setIsWebViewExperimentOn', () => {\n        it('should set the experiment flag', async () => {\n            (isWebView as jest.Mock).mockReturnValue(true);\n\n            await gateway.initialize(getGeneric);\n\n            expect(gateway.isWebViewWithRestrictions()).toBe(true);\n\n            gateway.setIsWebViewExperimentOn(false);\n\n            expect(gateway.isWebViewWithRestrictions()).toBe(false);\n\n            gateway.setIsWebViewExperimentOn(true);\n\n            expect(gateway.isWebViewWithRestrictions()).toBe(true);\n        });\n    });\n\n    describe('#getTransactionInfo in WebView', () => {\n        beforeEach(async () => {\n            await gateway.initialize(getGeneric);\n        });\n\n        it('should return totalPrice with actual balance when in webview with restrictions', () => {\n            (isWebView as jest.Mock).mockReturnValue(true);\n\n            const expectedInfo = {\n                countryCode: 'US',\n                currencyCode: 'USD',\n                totalPriceStatus: 'ESTIMATED',\n                totalPrice: '190.00',\n            };\n\n            expect(gateway.getTransactionInfo()).toStrictEqual(expectedInfo);\n        });\n\n        it('should return totalPrice as 0 when not in webview', () => {\n            (isWebView as jest.Mock).mockReturnValue(false);\n\n            const expectedInfo = {\n                countryCode: 'US',\n                currencyCode: 'USD',\n                totalPriceStatus: 'ESTIMATED',\n                totalPrice: '0',\n            };\n\n            expect(gateway.getTransactionInfo()).toStrictEqual(expectedInfo);\n        });\n\n        it('should return totalPrice as 0 when experiment is explicitly off even in webview', () => {\n            (isWebView as jest.Mock).mockReturnValue(true);\n            gateway.setIsWebViewExperimentOn(false);\n\n            const expectedInfo = {\n                countryCode: 'US',\n                currencyCode: 'USD',\n                totalPriceStatus: 'ESTIMATED',\n                totalPrice: '0',\n            };\n\n            expect(gateway.getTransactionInfo()).toStrictEqual(expectedInfo);\n        });\n\n        it('should return totalPrice with actual balance when experiment is on and in webview', () => {\n            (isWebView as jest.Mock).mockReturnValue(true);\n            gateway.setIsWebViewExperimentOn(true);\n\n            const expectedInfo = {\n                countryCode: 'US',\n                currencyCode: 'USD',\n                totalPriceStatus: 'ESTIMATED',\n                totalPrice: '190.00',\n            };\n\n            expect(gateway.getTransactionInfo()).toStrictEqual(expectedInfo);\n        });\n\n        it('should return totalPrice with actual balance in Buy Now flow when in webview', async () => {\n            (isWebView as jest.Mock).mockReturnValue(true);\n\n            await gateway.initialize(getGeneric, true, 'USD');\n\n            const result = gateway.getTransactionInfo();\n\n            expect(result.totalPrice).toBe('190.00');\n            expect(result.currencyCode).toBe('USD');\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-gateway.ts",
    "content": "import { round } from 'lodash';\n\nimport {\n    AddressRequestBody,\n    BillingAddressRequestBody,\n    createCurrencyService,\n    CurrencyService,\n    guard,\n    InvalidArgumentError,\n    itemsRequireShipping,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    PaymentIntegrationService,\n    PaymentMethod,\n    ShippingOption,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isExperimentEnabled, isWebView } from '@bigcommerce/checkout-sdk/utility';\n\nimport isGooglePayCardNetworkKey from '../guards/is-google-pay-card-network-key';\nimport {\n    CallbackIntentsType,\n    CallbackTriggerType,\n    ErrorReasonType,\n    ExtraPaymentData,\n    GooglePayCardDataResponse,\n    GooglePayCardNetwork,\n    GooglePayCardParameters,\n    GooglePayError,\n    GooglePayFullBillingAddress,\n    GooglePayGatewayParameters,\n    GooglePayInitializationData,\n    GooglePayMerchantInfo,\n    GooglePayPaymentDataRequest,\n    GooglePayRequiredPaymentData,\n    GooglePaySetExternalCheckoutData,\n    GooglePayTransactionInfo,\n    HandleCouponsOut,\n    IntermediatePaymentData,\n    ShippingOptionParameters,\n    TotalPriceStatusType,\n} from '../types';\n\nexport default class GooglePayGateway {\n    private _getPaymentMethodFn?: () => PaymentMethod<GooglePayInitializationData>;\n    private _isBuyNowFlow = false;\n    private _shouldRequestShipping = true;\n    private _currencyCode?: string;\n    private _currencyService?: CurrencyService;\n    private _isWebViewExperimentOn: null | boolean = null;\n\n    constructor(\n        private _gatewayIdentifier: string,\n        private _paymentIntegrationService: PaymentIntegrationService,\n    ) {}\n\n    mapToShippingAddressRequestBody({\n        shippingAddress,\n    }: GooglePayCardDataResponse): AddressRequestBody | undefined {\n        if (!shippingAddress) {\n            return;\n        }\n\n        const { company = '', phone = '' } =\n            this._paymentIntegrationService.getState().getShippingAddress() || {};\n\n        return this._mapToAddressRequestBody(shippingAddress, company, phone);\n    }\n\n    mapToBillingAddressRequestBody(\n        response: GooglePayCardDataResponse,\n    ): BillingAddressRequestBody | undefined {\n        const { billingAddress } = response.paymentMethodData.info;\n\n        if (!billingAddress) {\n            return;\n        }\n\n        const {\n            company = '',\n            phone = '',\n            email,\n            customFields = [],\n        } = this._paymentIntegrationService.getState().getBillingAddress() || {};\n\n        return {\n            ...this._mapToAddressRequestBody(billingAddress, company, phone, customFields),\n            email: email || response.email,\n        };\n    }\n\n    mapToExternalCheckoutData(\n        response: GooglePayCardDataResponse,\n    ): Promise<GooglePaySetExternalCheckoutData> {\n        const {\n            paymentMethodData: {\n                tokenizationData: { token: nonce },\n                info: { cardNetwork: type, cardDetails: number },\n            },\n        } = response;\n\n        if (!nonce) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n        }\n\n        return Promise.resolve({\n            nonce,\n            card_information: { type, number },\n            ...(this._isBuyNowFlow && {\n                cart_id: this._paymentIntegrationService.getState().getCart()?.id,\n            }),\n        });\n    }\n\n    async getRequiredData(): Promise<GooglePayRequiredPaymentData> {\n        const data: GooglePayRequiredPaymentData = { emailRequired: true };\n\n        if (!this._isShippingAddressRequired()) {\n            return data;\n        }\n\n        const state = await this._paymentIntegrationService.loadShippingCountries();\n        const allowedCountryCodes = state.getShippingCountries()?.map((country) => country.code);\n\n        return {\n            ...data,\n            shippingAddressRequired: true,\n            shippingAddressParameters: {\n                phoneNumberRequired: true,\n                ...(allowedCountryCodes && { allowedCountryCodes }),\n            },\n            shippingOptionRequired: true,\n        };\n    }\n\n    getCallbackIntents(): CallbackIntentsType[] {\n        if (this._isShippingAddressRequired()) {\n            return [\n                CallbackIntentsType.OFFER,\n                CallbackIntentsType.SHIPPING_ADDRESS,\n                CallbackIntentsType.SHIPPING_OPTION,\n            ];\n        }\n\n        return [CallbackIntentsType.OFFER];\n    }\n\n    getCallbackTriggers(): { [key: string]: CallbackTriggerType[] } {\n        const availableTriggers = [\n            CallbackTriggerType.INITIALIZE,\n            CallbackTriggerType.SHIPPING_ADDRESS,\n            CallbackTriggerType.SHIPPING_OPTION,\n            CallbackTriggerType.OFFER,\n        ];\n\n        const initializationTrigger = [CallbackTriggerType.INITIALIZE];\n        const addressChangeTriggers = [\n            CallbackTriggerType.INITIALIZE,\n            CallbackTriggerType.SHIPPING_ADDRESS,\n        ];\n        const shippingOptionsChangeTriggers = [CallbackTriggerType.SHIPPING_OPTION];\n        const offerChangeTriggers = [CallbackTriggerType.OFFER];\n\n        return {\n            availableTriggers,\n            initializationTrigger,\n            addressChangeTriggers,\n            shippingOptionsChangeTriggers,\n            offerChangeTriggers,\n        };\n    }\n\n    getNonce(methodId: string) {\n        const nonce = this._paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow<GooglePayInitializationData>(methodId)\n            .initializationData?.nonce;\n\n        if (!nonce) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n        }\n\n        return Promise.resolve(nonce);\n    }\n\n    extraPaymentData(): Promise<undefined | ExtraPaymentData> {\n        return Promise.resolve(undefined);\n    }\n\n    getMerchantInfo(): GooglePayMerchantInfo {\n        const {\n            googleMerchantName: merchantName,\n            googleMerchantId: merchantId,\n            platformToken: authJwt,\n        } = this.getGooglePayInitializationData();\n\n        return { merchantName, merchantId, authJwt };\n    }\n\n    getTransactionInfo(): GooglePayTransactionInfo {\n        let currencyCode: string;\n        const { getCartOrThrow } = this._paymentIntegrationService.getState();\n\n        if (this._isBuyNowFlow) {\n            currencyCode = this._getCurrencyCodeOrThrow();\n        } else {\n            currencyCode = getCartOrThrow().currency.code;\n        }\n\n        const countryCode = this.getGooglePayInitializationData().storeCountry;\n\n        if (this.isWebViewWithRestrictions()) {\n            const totalPrice = this.getTotalPrice();\n\n            return {\n                ...(countryCode && { countryCode }),\n                currencyCode,\n                totalPrice,\n                totalPriceStatus: TotalPriceStatusType.ESTIMATED,\n            };\n        }\n\n        return {\n            ...(countryCode && { countryCode }),\n            currencyCode,\n            totalPriceStatus: TotalPriceStatusType.ESTIMATED,\n            totalPrice: '0',\n        };\n    }\n\n    isWebViewWithRestrictions(): boolean {\n        if (this._isWebViewExperimentOn !== null) {\n            return this._isWebViewExperimentOn && isWebView();\n        }\n\n        return isWebView();\n    }\n\n    setIsWebViewExperimentOn(isWebViewExperimentOn: boolean): void {\n        this._isWebViewExperimentOn = isWebViewExperimentOn;\n    }\n\n    getPaymentGatewayParameters():\n        | Promise<GooglePayGatewayParameters>\n        | GooglePayGatewayParameters {\n        const gatewayMerchantId = this.getGooglePayInitializationData().gatewayMerchantId;\n\n        if (!gatewayMerchantId) {\n            throw new InvalidArgumentError('Unable to proceed, gatewayMerchantId is missing.');\n        }\n\n        return {\n            gateway: this._gatewayIdentifier,\n            gatewayMerchantId,\n        };\n    }\n\n    getCardParameters(): GooglePayCardParameters {\n        const allowedCardNetworks = this.getPaymentMethod()\n            .supportedCards.filter(isGooglePayCardNetworkKey)\n            .map((key) => GooglePayCardNetwork[key]);\n\n        return {\n            allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n            allowedCardNetworks,\n            billingAddressRequired: true,\n            billingAddressParameters: {\n                format: 'FULL',\n                phoneNumberRequired: true,\n            },\n        };\n    }\n\n    initialize(\n        getPaymentMethod: () => PaymentMethod<GooglePayInitializationData>,\n        isBuyNowFlow?: boolean,\n        currencyCode?: string,\n    ): Promise<void> {\n        this._getPaymentMethodFn = getPaymentMethod;\n        this._isBuyNowFlow = Boolean(isBuyNowFlow);\n        this._currencyCode = currencyCode;\n\n        if (this._isBuyNowFlow) {\n            this._getCurrencyCodeOrThrow();\n        }\n\n        return Promise.resolve();\n    }\n\n    async handleShippingAddressChange(\n        shippingAddress?: GooglePayFullBillingAddress,\n    ): Promise<ShippingOptionParameters | undefined> {\n        if (shippingAddress) {\n            shippingAddress.name = shippingAddress.name || '';\n            shippingAddress.address1 = shippingAddress.address1 || '';\n        }\n\n        const mappedShippingAddress = this.mapToShippingAddressRequestBody({\n            shippingAddress,\n        } as GooglePayCardDataResponse);\n\n        if (mappedShippingAddress) {\n            await this._paymentIntegrationService.updateShippingAddress(mappedShippingAddress);\n        }\n\n        const state = this._paymentIntegrationService.getState();\n        const consignments = state.getConsignments();\n\n        if (!consignments?.[0]) {\n            // Info: we can not return an empty data because shippingOptions should contain at least one element, it caused a developer exception\n            return;\n        }\n\n        const consignment = consignments[0];\n        const storeConfig = state.getStoreConfigOrThrow();\n\n        if (!this._currencyService) {\n            this._currencyService = createCurrencyService(storeConfig);\n        }\n\n        const availableShippingOptions = (consignment.availableShippingOptions || []).map(\n            this._getGooglePayShippingOption.bind(this),\n        );\n\n        const recommendedShippingOption = consignment.availableShippingOptions?.find(\n            (shippingOption) => shippingOption.isRecommended,\n        );\n\n        if (availableShippingOptions.length) {\n            const selectedShippingOptionId =\n                consignment.selectedShippingOption?.id ||\n                recommendedShippingOption?.id ||\n                availableShippingOptions[0]?.id;\n\n            if (!consignment.selectedShippingOption?.id && availableShippingOptions[0]) {\n                await this.handleShippingOptionChange(\n                    recommendedShippingOption?.id || availableShippingOptions[0].id,\n                );\n            }\n\n            return {\n                defaultSelectedOptionId: selectedShippingOptionId,\n                shippingOptions: availableShippingOptions,\n            };\n        }\n    }\n\n    async handleShippingOptionChange(optionId: string) {\n        if (optionId === 'shipping_option_unselected') {\n            return;\n        }\n\n        return this._paymentIntegrationService.selectShippingOption(optionId);\n    }\n\n    getTotalPrice(): string {\n        const { getCheckoutOrThrow, getCartOrThrow, getStoreConfigOrThrow } =\n            this._paymentIntegrationService.getState();\n        const { decimalPlaces } = getCartOrThrow().currency;\n        const isRoundingExperimentOn = isExperimentEnabled(\n            getStoreConfigOrThrow().checkoutSettings.features,\n            'PI-5075.google_pay_round_total_price_to_max_2_decimal_places',\n        );\n        const maxDecimalPlaces = isRoundingExperimentOn\n            ? Math.min(decimalPlaces, 2)\n            : decimalPlaces;\n        const totalPrice = round(getCheckoutOrThrow().outstandingBalance, maxDecimalPlaces).toFixed(\n            maxDecimalPlaces,\n        );\n\n        return totalPrice;\n    }\n\n    async handleCoupons(\n        offerData: IntermediatePaymentData['offerData'],\n    ): Promise<HandleCouponsOut> {\n        const { redemptionCodes: newCouponsState = [] } = offerData;\n        const { offers: appliedCoupons } = this.getAppliedCoupons() || {};\n        let error;\n\n        await newCouponsState.reduce(async (promise, code) => {\n            await promise;\n\n            const exists = (appliedCoupons || []).some(\n                ({ redemptionCode }) => redemptionCode === code,\n            );\n\n            if (exists) {\n                return;\n            }\n\n            const appliedCouponError = await this.applyCoupon(code);\n\n            if (appliedCouponError) {\n                error = appliedCouponError;\n            }\n        }, Promise.resolve());\n\n        await (appliedCoupons || []).reduce(async (promise, coupon) => {\n            await promise;\n\n            const stillExists = newCouponsState.includes(coupon.redemptionCode);\n\n            if (!stillExists) {\n                await this._paymentIntegrationService.removeCoupon(coupon.redemptionCode);\n            }\n        }, Promise.resolve());\n\n        return {\n            newOfferInfo: this.getAppliedCoupons(),\n            error,\n        };\n    }\n\n    getAppliedCoupons(): GooglePayPaymentDataRequest['offerInfo'] {\n        const state = this._paymentIntegrationService.getState();\n        const { coupons } = state.getCheckout() || {};\n\n        const offers = (coupons || []).map((coupon) => {\n            const { displayName, code } = coupon;\n\n            return {\n                redemptionCode: code,\n                description: displayName,\n            };\n        });\n\n        return {\n            offers,\n        };\n    }\n\n    async applyCoupon(code: string): Promise<GooglePayError | void> {\n        let error: GooglePayError | undefined;\n\n        try {\n            await this._paymentIntegrationService.applyCoupon(code);\n        } catch (e) {\n            if (e instanceof Error) {\n                error = {\n                    reason: ErrorReasonType.OFFER_INVALID,\n                    message: e.message,\n                    intent: CallbackTriggerType.OFFER,\n                };\n            }\n\n            return error;\n        }\n    }\n\n    setShouldRequestShipping(isRequired: boolean): void {\n        this._shouldRequestShipping = isRequired;\n    }\n\n    protected getGooglePayInitializationData(): GooglePayInitializationData {\n        return guard(\n            this.getPaymentMethod().initializationData,\n            () => new InvalidArgumentError('Missing initialization data.'),\n        );\n    }\n\n    protected getPaymentMethod(): PaymentMethod<GooglePayInitializationData> {\n        return guard(\n            this._getPaymentMethodFn,\n            () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n        )();\n    }\n\n    protected getGatewayIdentifier(): string {\n        return this._gatewayIdentifier;\n    }\n\n    protected setGatewayIdentifier(gateway?: string) {\n        this._gatewayIdentifier = gateway || this.getGatewayIdentifier();\n    }\n\n    private _isShippingAddressRequired(): boolean {\n        const { getCartOrThrow, getStoreConfigOrThrow, getShippingAddress } =\n            this._paymentIntegrationService.getState();\n        const storeConfig = getStoreConfigOrThrow();\n        const features = storeConfig.checkoutSettings.features;\n        const checkWithExperiment = isExperimentEnabled(\n            features,\n            'PI-4290.google_pay_require_shipping_address',\n        );\n\n        let shippingContextRequiresCheck: boolean;\n\n        if (checkWithExperiment) {\n            shippingContextRequiresCheck = this._shouldRequestShipping;\n        } else {\n            shippingContextRequiresCheck = getShippingAddress() === undefined;\n        }\n\n        return shippingContextRequiresCheck && itemsRequireShipping(getCartOrThrow(), storeConfig);\n    }\n\n    private _mapToAddressRequestBody(\n        address: GooglePayFullBillingAddress,\n        company: string,\n        phone: string,\n        customFields?: AddressRequestBody['customFields'],\n    ): AddressRequestBody {\n        const {\n            name,\n            address1,\n            address2,\n            address3,\n            locality: city,\n            administrativeArea: stateOrProvinceCode,\n            countryCode,\n            postalCode,\n            phoneNumber,\n        } = address;\n        const [firstName, lastName] = this._getFirstAndLastName(name);\n\n        return {\n            firstName,\n            lastName,\n            company,\n            address1,\n            address2: `${address2} ${address3}`.trim(),\n            city: city || stateOrProvinceCode,\n            stateOrProvince: stateOrProvinceCode,\n            stateOrProvinceCode,\n            countryCode,\n            postalCode,\n            phone: phoneNumber || phone,\n            customFields: customFields || [],\n        };\n    }\n\n    private _getFirstAndLastName(fullName: string): [string, string] {\n        const nameParts = fullName.split(' ');\n\n        if (nameParts.length === 1) {\n            return [fullName, ''];\n        }\n\n        const firstName = nameParts.slice(0, -1).join(' ');\n        const lastName = nameParts[nameParts.length - 1];\n\n        return [firstName, lastName];\n    }\n\n    private _getCurrencyCodeOrThrow(): string {\n        return guard(\n            this._currencyCode,\n            () =>\n                new InvalidArgumentError(\n                    'Unable to initialize payment because \"options.currencyCode\" argument is not provided.',\n                ),\n        );\n    }\n\n    private _getGooglePayShippingOption({\n        id,\n        cost,\n        description,\n        additionalDescription,\n    }: ShippingOption) {\n        const formattedCost = this._currencyService?.toCustomerCurrency(cost);\n\n        return {\n            id,\n            label: `${formattedCost || cost} ${description}`,\n            description: additionalDescription,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-orbital-gateway.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport getCardDataResponse from '../mocks/google-pay-card-data-response.mock';\n\nimport GooglePayGateway from './google-pay-gateway';\nimport GooglePayOrbitalGateway from './google-pay-orbital-gateway';\n\ndescribe('GooglePayOrbitalGateway', () => {\n    let gateway: GooglePayOrbitalGateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        gateway = new GooglePayOrbitalGateway(paymentIntegrationService);\n    });\n\n    it('is a special type of GooglePayGateway', () => {\n        expect(gateway).toBeInstanceOf(GooglePayGateway);\n    });\n\n    describe('#mapToExternalCheckoutData', () => {\n        it('should map response to external checkout data', async () => {\n            const expectedData = {\n                nonce: btoa(\n                    '{\"signature\":\"foo\",\"protocolVersion\":\"ECv1\",\"signedMessage\":{\"encryptedMessage\":\"bar\",\"ephemeralPublicKey\":\"baz\",\"tag\":\"foobar\"}}',\n                ),\n                card_information: {\n                    type: 'VISA',\n                    number: '1111',\n                },\n            };\n\n            const mappedData = await gateway.mapToExternalCheckoutData(getCardDataResponse());\n\n            expect(mappedData).toStrictEqual(expectedData);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-orbital-gateway.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayCardDataResponse, GooglePaySetExternalCheckoutData } from '../types';\n\nimport GooglePayGateway from './google-pay-gateway';\n\nexport default class GooglePayOrbitalGateway extends GooglePayGateway {\n    constructor(service: PaymentIntegrationService) {\n        super('chase', service);\n    }\n\n    async mapToExternalCheckoutData(\n        response: GooglePayCardDataResponse,\n    ): Promise<GooglePaySetExternalCheckoutData> {\n        const data = await super.mapToExternalCheckoutData(response);\n\n        data.nonce = btoa(data.nonce);\n\n        return data;\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-tdonlinemart-gateway.spec.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createGooglePayScriptLoader from '../factories/create-google-pay-script-loader';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../google-pay-payment-strategy';\nimport * as TdOnlineMartAdditionalAction from '../guards/is-google-pay-td-online-mart-additional-action';\nimport { getGeneric } from '../mocks/google-pay-payment-method.mock';\n\nimport GooglePayGateway from './google-pay-gateway';\nimport GooglePayTdOnlineMartGateway from './google-pay-tdonlinemart-gateway';\n\ndescribe('GooglePayTdOnlineMartGateway', () => {\n    let gateway: GooglePayTdOnlineMartGateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let processor: GooglePayPaymentProcessor;\n    let strategy: GooglePayPaymentStrategy;\n    let payload: OrderRequestBody;\n    let formPoster: FormPoster;\n\n    beforeEach(() => {\n        formPoster = {\n            postForm: jest.fn(),\n        } as unknown as FormPoster;\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        gateway = new GooglePayTdOnlineMartGateway(paymentIntegrationService, formPoster);\n\n        processor = new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayTdOnlineMartGateway(paymentIntegrationService, formPoster),\n            createRequestSender(),\n            formPoster,\n        );\n\n        strategy = new GooglePayPaymentStrategy(paymentIntegrationService, processor);\n\n        payload = {\n            payment: {\n                methodId: 'worldlinena',\n            },\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getGeneric(),\n        );\n\n        jest.spyOn(processor, 'initialize').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'getNonce').mockResolvedValue('nonceValue');\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('is a special type of GooglePayGateway', () => {\n        jest.spyOn(processor, 'processAdditionalAction').mockResolvedValue(undefined);\n\n        expect(gateway).toBeInstanceOf(GooglePayGateway);\n    });\n\n    it('should process additional action', async () => {\n        jest.spyOn(processor, 'processAdditionalAction').mockResolvedValue(undefined);\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue('error');\n\n        await strategy.execute(payload);\n\n        expect(processor.processAdditionalAction).toHaveBeenCalledWith('error', 'worldlinena');\n    });\n\n    it('throw not additional action error', async () => {\n        let submitPaymentError;\n\n        jest.spyOn(TdOnlineMartAdditionalAction, 'isTdOnlineMartAdditionalAction').mockReturnValue(\n            false,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue({\n            message: 'any_error',\n        });\n\n        try {\n            await strategy.execute(payload);\n        } catch (error) {\n            submitPaymentError = error;\n        } finally {\n            expect(submitPaymentError).toEqual({ message: 'any_error' });\n        }\n    });\n\n    it('throw error when not enough 3DS data', async () => {\n        let submitPaymentError;\n\n        jest.spyOn(TdOnlineMartAdditionalAction, 'isTdOnlineMartAdditionalAction').mockReturnValue(\n            true,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue({\n            body: {\n                errors: [\n                    {\n                        code: 'three_ds_result',\n                    },\n                ],\n                three_ds_result: {},\n            },\n        });\n\n        try {\n            await strategy.execute(payload);\n        } catch (error) {\n            submitPaymentError = error;\n        } finally {\n            expect(submitPaymentError).toBeInstanceOf(PaymentArgumentInvalidError);\n        }\n    });\n\n    it('execute 3DS challenge', async () => {\n        const postFormMock = jest.fn((_url, _options, resolveFn) => Promise.resolve(resolveFn()));\n\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        // eslint-disable-next-line @typescript-eslint/no-misused-promises\n        jest.spyOn(formPoster, 'postForm').mockImplementation(postFormMock);\n        jest.spyOn(TdOnlineMartAdditionalAction, 'isTdOnlineMartAdditionalAction').mockReturnValue(\n            true,\n        );\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue({\n            body: {\n                errors: [\n                    {\n                        code: 'three_ds_result',\n                    },\n                ],\n                three_ds_result: {\n                    acs_url: 'https://example.com',\n                    payer_auth_request: '3ds_session_data',\n                    merchant_data: 'creq_data',\n                },\n            },\n        });\n\n        await strategy.execute(payload);\n\n        expect(postFormMock).toHaveBeenCalledWith(\n            'https://example.com',\n            {\n                threeDSSessionData: '3ds_session_data',\n                creq: 'creq_data',\n            },\n            expect.any(Function),\n            '_top',\n        );\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-tdonlinemart-gateway.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n    getBrowserInfo,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { isTdOnlineMartAdditionalAction } from '../guards/is-google-pay-td-online-mart-additional-action';\nimport { ExtraPaymentData, TdOnlineMartThreeDSErrorBody } from '../types';\n\nimport GooglePayGateway from './google-pay-gateway';\n\nexport default class GooglePayTdOnlineMartGateway extends GooglePayGateway {\n    constructor(service: PaymentIntegrationService, private formPoster: FormPoster) {\n        super('worldlinena', service);\n    }\n\n    async extraPaymentData(): Promise<ExtraPaymentData> {\n        return Promise.resolve({ browser_info: getBrowserInfo() });\n    }\n\n    async processAdditionalAction(error: unknown): Promise<void> {\n        if (!isTdOnlineMartAdditionalAction(error)) {\n            throw error;\n        }\n\n        const { three_ds_result: threeDSResult }: TdOnlineMartThreeDSErrorBody = error.body;\n        const {\n            acs_url: formUrl,\n            payer_auth_request: threeDSSessionData,\n            merchant_data: creq,\n        } = threeDSResult || {};\n\n        if (!formUrl || !threeDSSessionData || !creq) {\n            throw new PaymentArgumentInvalidError(['formUrl', 'threeDSSessionData', 'creq']);\n        }\n\n        return new Promise((resolve) => {\n            this.formPoster.postForm(\n                formUrl,\n                {\n                    threeDSSessionData,\n                    creq,\n                },\n                resolve,\n                '_top',\n            );\n        });\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-worldpayaccess-gateway.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport getCardDataResponse from '../mocks/google-pay-card-data-response.mock';\n\nimport GooglePayGateway from './google-pay-gateway';\nimport GooglePayWorldpayAccessGateway from './google-pay-worldpayaccess-gateway';\n\ndescribe('GooglePayWorldpayAccessGateway', () => {\n    let gateway: GooglePayWorldpayAccessGateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        gateway = new GooglePayWorldpayAccessGateway(paymentIntegrationService);\n    });\n\n    it('is a special type of GooglePayGateway', () => {\n        expect(gateway).toBeInstanceOf(GooglePayGateway);\n    });\n\n    describe('#mapToExternalCheckoutData', () => {\n        it('should map response to external checkout data', async () => {\n            const expectedData = {\n                nonce: btoa(\n                    '{\"signature\":\"foo\",\"protocolVersion\":\"ECv1\",\"signedMessage\":{\"encryptedMessage\":\"bar\",\"ephemeralPublicKey\":\"baz\",\"tag\":\"foobar\"}}',\n                ),\n                card_information: {\n                    type: 'VISA',\n                    number: '1111',\n                },\n            };\n\n            const mappedData = await gateway.mapToExternalCheckoutData(getCardDataResponse());\n\n            expect(mappedData).toStrictEqual(expectedData);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/gateways/google-pay-worldpayaccess-gateway.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayCardDataResponse, GooglePaySetExternalCheckoutData } from '../types';\n\nimport GooglePayGateway from './google-pay-gateway';\n\nexport default class GooglePayWorldpayAccessGateway extends GooglePayGateway {\n    constructor(service: PaymentIntegrationService) {\n        super('worldpay', service);\n    }\n\n    async mapToExternalCheckoutData(\n        response: GooglePayCardDataResponse,\n    ): Promise<GooglePaySetExternalCheckoutData> {\n        const data = await super.mapToExternalCheckoutData(response);\n\n        data.nonce = btoa(data.nonce);\n\n        return data;\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-bigcommerce-payments/create-google-pay-bigcommerce-payments-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayButtonStrategy from '../google-pay-button-strategy';\n\nimport createGooglePayBigCommercePaymentsButtonStrategy from './create-google-pay-bigcommerce-payments-button-strategy';\n\ndescribe('createGooglePayBigCommercePaymentsButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay BigCommercePayments button strategy', () => {\n        const strategy =\n            createGooglePayBigCommercePaymentsButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-bigcommerce-payments/create-google-pay-bigcommerce-payments-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PayPalSdkHelper } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createGooglePayScriptLoader from '../factories/create-google-pay-script-loader';\nimport GooglePayButtonStrategy from '../google-pay-button-strategy';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\n\nimport GooglePayBigCommercePaymentsGateway from './google-pay-bigcommerce-payments-gateway';\n\nconst createGooglePayBigCommercePaymentsButtonStrategy: CheckoutButtonStrategyFactory<\n    GooglePayButtonStrategy\n> = (paymentIntegrationService) => {\n    return new GooglePayButtonStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayBigCommercePaymentsGateway(\n                paymentIntegrationService,\n                new PayPalSdkHelper(getScriptLoader()),\n            ),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayBigCommercePaymentsButtonStrategy, [\n    { id: 'googlepay_bigcommerce_payments' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-bigcommerce-payments/create-google-pay-bigcommerce-payments-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../google-pay-customer-strategy';\n\nimport createGooglePayBigCommercePaymentsCustomerStrategy from './create-google-pay-bigcommerce-payments-customer-strategy';\n\ndescribe('createGooglePayBigCommercePaymentsCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay BigCommercePayments customer strategy', () => {\n        const strategy =\n            createGooglePayBigCommercePaymentsCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-bigcommerce-payments/create-google-pay-bigcommerce-payments-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PayPalSdkHelper } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createGooglePayScriptLoader from '../factories/create-google-pay-script-loader';\nimport GooglePayCustomerStrategy from '../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\n\nimport GooglePayBigCommercePaymentsGateway from './google-pay-bigcommerce-payments-gateway';\n\nconst createGooglePayBigCommercePaymentsCustomerStrategy: CustomerStrategyFactory<\n    GooglePayCustomerStrategy\n> = (paymentIntegrationService) => {\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayBigCommercePaymentsGateway(\n                paymentIntegrationService,\n                new PayPalSdkHelper(getScriptLoader()),\n            ),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayBigCommercePaymentsCustomerStrategy, [\n    { id: 'googlepay_bigcommerce_payments' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-bigcommerce-payments/create-google-pay-bigcommerce-payments-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayPaymentStrategy from '../google-pay-payment-strategy';\n\nimport createGooglePayBigCommercePaymentsPaymentStrategy from './create-google-pay-bigcommerce-payments-payment-strategy';\n\ndescribe('createGooglePayBigCommercePaymentsPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay BigCommercePayments strategy', () => {\n        const strategy =\n            createGooglePayBigCommercePaymentsPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-bigcommerce-payments/create-google-pay-bigcommerce-payments-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PayPalSdkHelper } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createGooglePayScriptLoader from '../factories/create-google-pay-script-loader';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../google-pay-payment-strategy';\n\nimport GooglePayBigCommercePaymentsGateway from './google-pay-bigcommerce-payments-gateway';\nimport GooglePayBigCommercePaymentsPaymentStrategy from './google-pay-bigcommerce-payments-payment-strategy';\n\nconst createGooglePayBigCommercePaymentsPaymentStrategy: PaymentStrategyFactory<\n    GooglePayPaymentStrategy\n> = (paymentIntegrationService) => {\n    const payPalSdkHelper = new PayPalSdkHelper(getScriptLoader());\n\n    return new GooglePayBigCommercePaymentsPaymentStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayBigCommercePaymentsGateway(paymentIntegrationService, payPalSdkHelper),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n        payPalSdkHelper,\n        createRequestSender(),\n    );\n};\n\nexport default toResolvableModule(createGooglePayBigCommercePaymentsPaymentStrategy, [\n    { id: 'googlepay_bigcommerce_payments' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-bigcommerce-payments/google-pay-bigcommerce-payments-gateway.spec.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PayPalSdkHelper } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayGateway from '../gateways/google-pay-gateway';\nimport isGooglePayPaypalCommercePaymentMethod from '../guards/is-google-pay-paypal-commerce-payment-method';\nimport getCardDataResponse from '../mocks/google-pay-card-data-response.mock';\nimport { googlePayConfigMock } from '../mocks/google-pay-config.mock';\nimport { getBigCommercePayments } from '../mocks/google-pay-payment-method.mock';\n\nimport GooglePayBigCommercePaymentsGateway from './google-pay-bigcommerce-payments-gateway';\n\ndescribe('GooglePayBigCommercePaymentsGateway', () => {\n    let gateway: GooglePayBigCommercePaymentsGateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let scriptLoader: PayPalSdkHelper;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        scriptLoader = new PayPalSdkHelper(getScriptLoader());\n\n        gateway = new GooglePayBigCommercePaymentsGateway(paymentIntegrationService, scriptLoader);\n\n        jest.spyOn(scriptLoader, 'getPayPalGooglePaySdk').mockResolvedValue({\n            Googlepay: jest.fn().mockReturnValue({\n                config: jest.fn().mockReturnValue(googlePayConfigMock),\n                confirmOrder: jest.fn().mockResolvedValue({ status: 'APPROVED' }),\n            }),\n        });\n    });\n\n    it('is a special type of GooglePayGateway', () => {\n        expect(gateway).toBeInstanceOf(GooglePayGateway);\n    });\n\n    describe('#mapToExternalCheckoutData', () => {\n        it('should map response to external checkout data', async () => {\n            const response = getCardDataResponse();\n\n            response.paymentMethodData.tokenizationData.token = '{\"id\":\"tok_f00b4r\"}';\n\n            const expectedData = {\n                nonce: 'eyJpZCI6InRva19mMDBiNHIifQ==',\n                card_information: {\n                    type: 'VISA',\n                    number: '1111',\n                },\n            };\n\n            const mappedData = await gateway.mapToExternalCheckoutData(response);\n\n            expect(mappedData).toStrictEqual(expectedData);\n        });\n    });\n\n    describe('#getPaymentGatewayParameters', () => {\n        it('should return payment gateway parameters', async () => {\n            const expectedParams = {\n                gateway: 'paypalppcp',\n                gatewayMerchantId: 'ID',\n            };\n\n            const googlePayPaymentMethod = getBigCommercePayments();\n\n            isGooglePayPaypalCommercePaymentMethod(googlePayPaymentMethod);\n\n            await gateway.initialize(() => googlePayPaymentMethod);\n\n            expect(gateway.getPaymentGatewayParameters()).toStrictEqual(expectedParams);\n        });\n\n        it('should return payment gateway parameters in production mode', async () => {\n            const expectedParams = {\n                gateway: 'paypalppcp',\n                gatewayMerchantId: 'ID',\n            };\n\n            const googlePayPaymentMethod = getBigCommercePayments();\n\n            isGooglePayPaypalCommercePaymentMethod(googlePayPaymentMethod);\n\n            await gateway.initialize(() => googlePayPaymentMethod);\n\n            expect(gateway.getPaymentGatewayParameters()).toStrictEqual(expectedParams);\n        });\n\n        it('should return default payment gateway name', async () => {\n            const expectedParams = {\n                gateway: 'paypalppcp',\n                gatewayMerchantId: 'ID',\n            };\n\n            const googlePayPaymentMethod = getBigCommercePayments();\n\n            isGooglePayPaypalCommercePaymentMethod(googlePayPaymentMethod);\n\n            await gateway.initialize(() => googlePayPaymentMethod);\n\n            expect(gateway.getPaymentGatewayParameters()).toStrictEqual(expectedParams);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-bigcommerce-payments/google-pay-bigcommerce-payments-gateway.ts",
    "content": "import {\n    BigCommercePaymentsInitializationData,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayGateway from '../gateways/google-pay-gateway';\nimport assertsIsGooglePayPayPalCommercePaymentMethod from '../guards/is-google-pay-paypal-commerce-payment-method';\nimport {\n    GooglePayCardDataResponse,\n    GooglePayConfig,\n    GooglePayPayPalCommerceGatewayParameters,\n    GooglePayPayPalCommerceInitializationData,\n    GooglePaySetExternalCheckoutData,\n} from '../types';\n\nexport default class GooglePayBigCommercePaymentsGateway extends GooglePayGateway {\n    private googlepayConfig?: GooglePayConfig;\n    private service: PaymentIntegrationService;\n\n    constructor(service: PaymentIntegrationService, private payPalSdkHelper: PayPalSdkHelper) {\n        super('googlepay_bigcommerce_payments', service);\n\n        this.service = service;\n    }\n\n    async initialize(\n        getPaymentMethod: () => PaymentMethod<GooglePayPayPalCommerceInitializationData>,\n        isBuyNowFlow?: boolean,\n        currencyCode?: string,\n    ): Promise<void> {\n        const currency = this.service.getState().getStoreConfig()?.currency.code ?? currencyCode;\n\n        if (!currency) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        await super.initialize(getPaymentMethod, isBuyNowFlow, currency);\n\n        const paymentMethod = super.getPaymentMethod();\n\n        if (!paymentMethod.initializationData) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        assertsIsGooglePayPayPalCommercePaymentMethod(paymentMethod);\n\n        const googlePaySdk = await this.payPalSdkHelper.getPayPalGooglePaySdk(\n            paymentMethod as PaymentMethod<BigCommercePaymentsInitializationData>,\n            currency,\n        );\n\n        this.googlepayConfig = await googlePaySdk.Googlepay().config();\n\n        const { allowedPaymentMethods } = this.googlepayConfig;\n\n        this.setGatewayIdentifier(\n            allowedPaymentMethods[0]?.tokenizationSpecification?.parameters?.gateway,\n        );\n    }\n\n    getPaymentGatewayParameters(): GooglePayPayPalCommerceGatewayParameters {\n        if (this.googlepayConfig) {\n            const { allowedPaymentMethods } = this.googlepayConfig;\n            const { gatewayMerchantId } =\n                allowedPaymentMethods[0].tokenizationSpecification.parameters;\n\n            return {\n                gateway: this.getGatewayIdentifier(),\n                gatewayMerchantId,\n            };\n        }\n\n        return {\n            gateway: this.getGatewayIdentifier(),\n        };\n    }\n\n    async mapToExternalCheckoutData(\n        response: GooglePayCardDataResponse,\n    ): Promise<GooglePaySetExternalCheckoutData> {\n        const data = await super.mapToExternalCheckoutData(response);\n\n        data.nonce = btoa(data.nonce);\n\n        return data;\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-bigcommerce-payments/google-pay-bigcommerce-payments-payment-strategy.spec.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender, RequestSender, Response } from '@bigcommerce/request-sender';\nimport { createScriptLoader, getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BigCommercePaymentsInitializationData,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    MissingDataError,\n    MissingDataErrorType,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { WithGooglePayPaymentInitializeOptions } from '../google-pay-payment-initialize-options';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\nimport GooglePayScriptLoader from '../google-pay-script-loader';\nimport isGooglePayPaypalCommercePaymentMethod from '../guards/is-google-pay-paypal-commerce-payment-method';\nimport { getBigCommercePayments, getGeneric } from '../mocks/google-pay-payment-method.mock';\n\nimport GooglePayBigCommercePaymentsGateway from './google-pay-bigcommerce-payments-gateway';\nimport GooglePayBigCommercePaymentsPaymentStrategy from './google-pay-bigcommerce-payments-payment-strategy';\nimport { ConfirmOrderStatus } from './types';\n\ndescribe('BigCommercePaymentsGooglePayPaymentStrategy', () => {\n    const BUTTON_ID = 'my_awesome_google_pay_button';\n\n    let paymentIntegrationService: PaymentIntegrationService;\n    let processor: GooglePayPaymentProcessor;\n    let strategy: GooglePayBigCommercePaymentsPaymentStrategy;\n    let options: PaymentInitializeOptions & WithGooglePayPaymentInitializeOptions;\n    let button: HTMLDivElement;\n    let scriptLoader: PayPalSdkHelper;\n    let requestSender: RequestSender;\n    let response: Response<{ orderId: string }>;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        scriptLoader = new PayPalSdkHelper(getScriptLoader());\n        requestSender = createRequestSender();\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getGeneric(),\n        );\n\n        processor = new GooglePayPaymentProcessor(\n            new GooglePayScriptLoader(createScriptLoader()),\n            new GooglePayBigCommercePaymentsGateway(paymentIntegrationService, scriptLoader),\n            createRequestSender(),\n            createFormPoster(),\n        );\n        jest.spyOn(processor, 'initialize').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'processAdditionalAction').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'getNonce').mockResolvedValue('nonceValue');\n\n        jest.spyOn(scriptLoader, 'getPayPalGooglePaySdk').mockResolvedValue({\n            Googlepay: jest.fn().mockReturnValue({\n                config: jest.fn(),\n                confirmOrder: jest.fn().mockResolvedValue({ status: 'APPROVED' }),\n                initiatePayerAction: jest.fn(),\n            }),\n        });\n\n        strategy = new GooglePayBigCommercePaymentsPaymentStrategy(\n            paymentIntegrationService,\n            processor,\n            scriptLoader,\n            requestSender,\n        );\n\n        response = { body: { orderId: '111' } } as Response<{ orderId: string }>;\n        jest.spyOn(requestSender, 'post').mockResolvedValue(response);\n\n        options = {\n            methodId: 'googlepay_bigcommerce_payments',\n            googlepay_bigcommerce_payments: {\n                walletButton: BUTTON_ID,\n                onError: jest.fn(),\n                onPaymentSelect: jest.fn(),\n            },\n        };\n    });\n\n    beforeAll(() => {\n        button = document.createElement('div');\n\n        button.id = BUTTON_ID;\n\n        document.body.appendChild(button);\n\n        jest.spyOn(button, 'addEventListener');\n        jest.spyOn(button, 'removeEventListener');\n    });\n\n    afterEach(() => {\n        (button.addEventListener as jest.Mock).mockClear();\n        (button.removeEventListener as jest.Mock).mockClear();\n    });\n\n    describe('#execute', () => {\n        let payload: OrderRequestBody;\n\n        beforeEach(async () => {\n            payload = {\n                payment: {\n                    methodId: 'example',\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getGeneric(),\n                initializationData: {\n                    ...getGeneric().initializationData,\n                    nonce: 'abc.123.xyz',\n                    card_information: {\n                        type: '',\n                        number: '',\n                    },\n                    merchantId: 'merchantId',\n                    clientId: 'clientId',\n                },\n                clientToken: 'clientToken',\n            });\n\n            await strategy.initialize(options);\n        });\n\n        it('should execute the strategy', async () => {\n            const googlePayPaymentMethod = getBigCommercePayments();\n\n            isGooglePayPaypalCommercePaymentMethod(googlePayPaymentMethod);\n\n            await scriptLoader.getPayPalGooglePaySdk(\n                googlePayPaymentMethod as PaymentMethod<BigCommercePaymentsInitializationData>,\n                'USD',\n            );\n\n            const execute = strategy.execute(payload);\n\n            await expect(execute).resolves.toBeUndefined();\n        });\n\n        it('should call getPaymentMethodOrThrow', async () => {\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.getState().getPaymentMethodOrThrow).toHaveBeenCalled();\n        });\n\n        it('should submit the order', async () => {\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('should submit the payment', async () => {\n            await strategy.execute(payload);\n\n            const paymentData = {\n                formattedPayload: {\n                    method_id: 'example',\n                    paypal_account: {\n                        order_id: '111',\n                    },\n                },\n            };\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: 'example',\n                paymentData,\n            });\n        });\n\n        it('should process additional action', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue('error');\n\n            await strategy.execute(payload);\n\n            expect(processor.processAdditionalAction).toHaveBeenCalledWith('error');\n        });\n\n        it('should initiate payer action', async () => {\n            jest.spyOn(scriptLoader, 'getPayPalGooglePaySdk').mockResolvedValue({\n                Googlepay: jest.fn().mockReturnValue({\n                    config: jest.fn(),\n                    confirmOrder: jest\n                        .fn()\n                        .mockResolvedValue({ status: ConfirmOrderStatus.PayerActionRequired }),\n                    initiatePayerAction: jest.fn(),\n                }),\n            });\n\n            const googlePayPaymentMethod = getBigCommercePayments();\n\n            isGooglePayPaypalCommercePaymentMethod(googlePayPaymentMethod);\n\n            const sdk = await scriptLoader.getPayPalGooglePaySdk(\n                googlePayPaymentMethod as PaymentMethod<BigCommercePaymentsInitializationData>,\n                'USD',\n            );\n\n            await strategy.execute(payload);\n\n            expect(sdk.Googlepay().initiatePayerAction).toHaveBeenCalled();\n        });\n\n        describe('should fail if:', () => {\n            test('payment is missing', async () => {\n                const execute = strategy.execute({});\n\n                await expect(execute).rejects.toThrow(PaymentArgumentInvalidError);\n            });\n\n            test('methodId is empty', async () => {\n                const execute = strategy.execute({\n                    payment: {\n                        methodId: '',\n                    },\n                });\n\n                await expect(execute).rejects.toThrow(PaymentArgumentInvalidError);\n            });\n\n            test('nonce is missing', async () => {\n                const execute = () => strategy.execute(payload);\n\n                jest.spyOn(processor, 'getNonce').mockRejectedValue(\n                    new MissingDataError(MissingDataErrorType.MissingPaymentToken),\n                );\n\n                await expect(execute()).rejects.toThrow(MissingDataError);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-bigcommerce-payments/google-pay-bigcommerce-payments-payment-strategy.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    BigCommercePaymentsInitializationData,\n    PayPalSdkHelper,\n} from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../google-pay-payment-strategy';\nimport {\n    GooglePayBigCommercePaymentsInitializationData,\n    GooglePayInitializationData,\n} from '../types';\n\nimport { ConfirmOrderData, ConfirmOrderStatus } from './types';\n\nexport default class GooglePayBigCommercePaymentsPaymentStrategy extends GooglePayPaymentStrategy {\n    constructor(\n        _paymentIntegrationService: PaymentIntegrationService,\n        _googlePayPaymentProcessor: GooglePayPaymentProcessor,\n        private _payPalSdkHelper: PayPalSdkHelper,\n        private _requestSender: RequestSender,\n    ) {\n        super(_paymentIntegrationService, _googlePayPaymentProcessor);\n    }\n\n    async execute({ payment }: OrderRequestBody): Promise<void> {\n        if (!payment?.methodId) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const state = this._paymentIntegrationService.getState();\n        const cartId = state.getCartOrThrow().id;\n        const { initializationData } = state.getPaymentMethodOrThrow<GooglePayInitializationData>(\n            this._getMethodId(),\n        );\n        const { orderId } = await this.getOrderId(cartId);\n\n        const { card_information } = initializationData || {};\n        const nonce = await this._googlePayPaymentProcessor.getNonce(payment.methodId);\n\n        const confirmOrderData = {\n            tokenizationData: {\n                type: 'PAYMENT_GATEWAY',\n                token: atob(nonce),\n            },\n            info: {\n                cardNetwork: card_information?.type || '',\n                cardDetails: card_information?.number || '',\n            },\n            type: 'CARD',\n        };\n\n        await this.confirmOrder(orderId, confirmOrderData);\n        await this._paymentIntegrationService.submitOrder();\n\n        try {\n            const paymentData = {\n                formattedPayload: {\n                    method_id: payment.methodId,\n                    paypal_account: {\n                        order_id: orderId,\n                    },\n                },\n            };\n\n            await this._paymentIntegrationService.submitPayment({\n                methodId: payment.methodId,\n                paymentData,\n            });\n        } catch (error) {\n            await this._googlePayPaymentProcessor.processAdditionalAction(error);\n        }\n    }\n\n    private async confirmOrder(orderId: string, confirmOrderData: ConfirmOrderData) {\n        const state = this._paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<GooglePayBigCommercePaymentsInitializationData>(\n                this._getMethodId(),\n            );\n\n        if (!paymentMethod.initializationData) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const currencyCode = state.getCartOrThrow().currency.code;\n\n        const payPalSDK = await this._payPalSdkHelper.getPayPalGooglePaySdk(\n            paymentMethod as PaymentMethod<BigCommercePaymentsInitializationData>,\n            currencyCode,\n            true,\n        );\n\n        const { status } = await payPalSDK\n            .Googlepay()\n            .confirmOrder({ orderId, paymentMethodData: confirmOrderData });\n\n        if (status === ConfirmOrderStatus.PayerActionRequired) {\n            await payPalSDK.Googlepay().initiatePayerAction({ orderId });\n\n            return Promise.resolve();\n        }\n\n        if (status !== ConfirmOrderStatus.Approved) {\n            throw new InvalidArgumentError('Payment is not approved.');\n        }\n\n        return Promise.resolve();\n    }\n\n    private async getOrderId(cartId: string): Promise<{ orderId: string }> {\n        const url = '/api/storefront/payments/googlepay_bigcommerce_paymentscheckout';\n        const requestData = {\n            cartId,\n            shouldSaveInstrument: false,\n        };\n\n        const { body } = await this._requestSender.post<{ orderId: string }>(url, {\n            headers: {\n                'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                'Content-Type': ContentType.Json,\n                ...SDK_VERSION_HEADERS,\n            },\n            body: requestData,\n        });\n\n        return body;\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-bigcommerce-payments/types.ts",
    "content": "import { GooglePayConfig } from '../types';\n\nexport type FundingType = string;\n\n/**\n *\n * BigCommercePayments SDK\n *\n */\nexport interface PayPalSDK {\n    Googlepay: () => {\n        config: () => Promise<GooglePayConfig>;\n        confirmOrder: (confirmOrderConfig: ConfirmOrderConfig) => Promise<{ status: string }>;\n        initiatePayerAction: (payerActionConfig: PayerActionConfig) => Promise<void>;\n    };\n}\n\ninterface ConfirmOrderConfig {\n    orderId: string;\n    paymentMethodData: ConfirmOrderData;\n}\n\ninterface PayerActionConfig {\n    orderId: string;\n}\n\nexport enum ConfirmOrderStatus {\n    Approved = 'APPROVED',\n    PayerActionRequired = 'PAYER_ACTION_REQUIRED',\n}\n\nexport interface BigCommercePaymentsHostWindow extends Window {\n    paypal?: PayPalSDK;\n}\n\nexport interface BigCommercePaymentsScriptParams {\n    options: {\n        'client-id'?: string;\n        'merchant-id'?: string;\n        'buyer-country'?: string;\n        'disable-funding'?: FundingType[];\n        'enable-funding'?: FundingType[];\n        currency?: string;\n        commit?: boolean;\n        intent?: BigCommercePaymentsIntent;\n        components?: ComponentsScriptType;\n    };\n    attributes: {\n        'data-client-token'?: string;\n        'data-partner-attribution-id'?: string;\n    };\n}\n\nexport enum BigCommercePaymentsIntent {\n    AUTHORIZE = 'authorize',\n    CAPTURE = 'capture',\n}\n\nexport type ComponentsScriptType = Array<\n    | 'buttons'\n    | 'funding-eligibility'\n    | 'hosted-fields'\n    | 'messages'\n    | 'payment-fields'\n    | 'legal'\n    | 'googlepay'\n    | 'card-fields'\n>;\n\nexport interface PayPalGoogleSdk {\n    version: string;\n    getCorrelationID: () => void;\n    Googlepay: () => {\n        config: () => Promise<GooglePayConfig>;\n        confirmOrder: (arg0: {\n            orderId: string;\n            paymentMethodData: ConfirmOrderData;\n        }) => Promise<{ status: string }>;\n        initiatePayerAction: () => void;\n    };\n    FUNDING: Record<string, string>;\n}\n\nexport interface ConfirmOrderData {\n    tokenizationData: {\n        type: string;\n        token: string;\n    };\n    info: {\n        cardNetwork: string;\n        cardDetails: string;\n    };\n    type: string;\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-button-initialize-option.ts",
    "content": "import { GooglePayKey } from './google-pay-payment-initialize-options';\nimport {\n    GooglePayButtonColor,\n    GooglePayButtonType,\n    GooglePayBuyNowInitializeOptions,\n} from './types';\n\nexport interface GooglePayButtonInitializeOptions {\n    /**\n     * The color of the GooglePay button that will be inserted.\n     *  black (default): a black button suitable for use on white or light backgrounds.\n     *  white: a white button suitable for use on colorful backgrounds.\n     */\n    buttonColor?: GooglePayButtonColor;\n\n    /**\n     * The size of the GooglePay button that will be inserted.\n     *  long: \"Buy with Google Pay\" button (default). A translated button label may appear\n     *         if a language specified in the viewer's browser matches an available language.\n     *  short: Google Pay payment button without the \"Buy with\" text.\n     */\n    buttonType?: GooglePayButtonType;\n\n    /**\n     * The options that are required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: GooglePayBuyNowInitializeOptions;\n\n    /**\n     * The option that is required to load payment method configuration for provided currency code in Buy Now flow.\n     */\n    currencyCode?: string;\n\n    /**\n     * A callback that gets called when GooglePay fails to initialize or\n     * selects a payment option.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error: Error): void;\n}\n\n/**\n * The options that are required to initialize the GooglePay payment method.\n * They can be omitted unless you need to support GooglePay.\n */\nexport type WithGooglePayButtonInitializeOptions = {\n    [k in GooglePayKey]?: GooglePayButtonInitializeOptions;\n};\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-button-initialize-options.ts",
    "content": "import { GooglePayKey } from './google-pay-payment-initialize-options';\nimport { GooglePayButtonColor, GooglePayButtonType } from './types';\n\nexport default interface GooglePayButtonInitializeOptions {\n    /**\n     * All Google Pay payment buttons exist in two styles: dark (default) and light.\n     * To provide contrast, use dark buttons on light backgrounds and light buttons on dark or colorful backgrounds.\n     */\n    buttonColor?: GooglePayButtonColor;\n\n    /**\n     * Variant buttons:\n     * book: The \"Book with Google Pay\" payment button.\n     * buy: The \"Buy with Google Pay\" payment button.\n     * checkout: The \"Checkout with Google Pay\" payment button.\n     * donate: The \"Donate with Google Pay\" payment button.\n     * order: The \"Order with Google Pay\" payment button.\n     * pay: The \"Pay with Google Pay\" payment button.\n     * plain: The Google Pay payment button without the additional text (default).\n     * subscribe: The \"Subscribe with Google Pay\" payment button.\n     *\n     * Note: \"long\" and \"short\" button types have been renamed to \"buy\" and \"plain\", but are still valid button types\n     * for backwards compatability.\n     */\n    buttonType?: GooglePayButtonType;\n}\n\n/**\n * The options that are required to initialize the GooglePay payment method.\n * They can be omitted unless you need to support GooglePay.\n */\nexport type WithGooglePayButtonInitializeOptions = {\n    [k in GooglePayKey]?: GooglePayButtonInitializeOptions;\n};\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-button-strategy.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\nimport { EventEmitter } from 'events';\n\nimport {\n    BuyNowCartRequestBody,\n    CartSource,\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    getConsignment,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayGateway from './gateways/google-pay-gateway';\nimport { WithGooglePayButtonInitializeOptions } from './google-pay-button-initialize-option';\nimport GooglePayButtonStrategy from './google-pay-button-strategy';\nimport GooglePayPaymentProcessor from './google-pay-payment-processor';\nimport GooglePayScriptLoader from './google-pay-script-loader';\nimport getCardDataResponse from './mocks/google-pay-card-data-response.mock';\nimport { getGeneric } from './mocks/google-pay-payment-method.mock';\nimport { createInitializeImplementationMock } from './mocks/google-pay-processor-initialize.mock';\nimport {\n    CallbackTriggerType,\n    ErrorReasonType,\n    GooglePayButtonOptions,\n    GooglePayErrorObject,\n    GooglePayInitializationData,\n    NewShippingOptionParameters,\n    NewTransactionInfo,\n} from './types';\n\ndescribe('GooglePayButtonStrategy', () => {\n    const CONTAINER_ID = 'my_awesome_google_pay_button_container';\n\n    let buttonStrategy: GooglePayButtonStrategy;\n    let button: HTMLButtonElement;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let processor: GooglePayPaymentProcessor;\n    let options: CheckoutButtonInitializeOptions & WithGooglePayButtonInitializeOptions;\n    let withBuyNowOptions: CheckoutButtonInitializeOptions & WithGooglePayButtonInitializeOptions;\n    let eventEmitter: EventEmitter;\n    let scriptLoader: GooglePayScriptLoader;\n    let formPoster: FormPoster;\n    let mockReturnedPaymentDataChangedValue: NewTransactionInfo & NewShippingOptionParameters;\n    let gateway: GooglePayGateway;\n    let buyNowCartRequestBody: BuyNowCartRequestBody;\n    let buyNowRequiredOptions: {\n        buyNowInitializeOptions: {\n            getBuyNowCartRequestBody: () => BuyNowCartRequestBody;\n        };\n    };\n    const consignment = getConsignment();\n    const expectedSippingOptions = [\n        {\n            id: consignment.availableShippingOptions![0].id,\n            label: consignment.availableShippingOptions![0].description,\n            description: '$0.00',\n        },\n    ];\n    const availableGPayShippingOptions = {\n        defaultSelectedOptionId: consignment.selectedShippingOption?.id,\n        shippingOptions: expectedSippingOptions,\n    };\n    const mockFn = jest.fn();\n    const internalError = new Error('internal error');\n\n    const createInitializeWidgetMock = (error?: unknown) =>\n        jest.spyOn(processor, 'initializeWidget').mockImplementation(\n            error\n                ? () => {\n                      throw error;\n                  }\n                : undefined,\n        );\n    const prepareInitialize = (\n        initializeMockCallback: ReturnType<typeof createInitializeImplementationMock>,\n    ) => {\n        jest.spyOn(processor, 'initialize').mockImplementation(initializeMockCallback);\n\n        jest.spyOn(processor, 'showPaymentSheet').mockImplementation(() => {\n            eventEmitter.emit('onPaymentDataChanged');\n\n            return Promise.resolve(getCardDataResponse());\n        });\n    };\n\n    beforeEach(() => {\n        jest.clearAllMocks();\n\n        eventEmitter = new EventEmitter();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        buyNowCartRequestBody = {\n            source: CartSource.BuyNow,\n            lineItems: [\n                {\n                    productId: 1,\n                    quantity: 2,\n                    optionSelections: {\n                        optionId: 11,\n                        optionValue: 11,\n                    },\n                },\n            ],\n        };\n\n        buyNowRequiredOptions = {\n            buyNowInitializeOptions: {\n                getBuyNowCartRequestBody: jest.fn().mockReturnValue(buyNowCartRequestBody),\n            },\n        };\n\n        options = {\n            methodId: 'googlepaybraintree',\n            containerId: CONTAINER_ID,\n            googlepaybraintree: {\n                onError: jest.fn(),\n            },\n        };\n\n        withBuyNowOptions = {\n            ...options,\n            googlepaybraintree: {\n                buyNowInitializeOptions: buyNowRequiredOptions.buyNowInitializeOptions,\n                currencyCode: 'USD',\n            },\n        };\n\n        formPoster = createFormPoster();\n        jest.spyOn(formPoster, 'postForm').mockImplementation(\n            (_url, _data, callback) => callback && callback(),\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getGeneric(),\n        );\n\n        button = document.createElement('button');\n        jest.spyOn(button, 'remove');\n\n        scriptLoader = new GooglePayScriptLoader(createScriptLoader());\n\n        gateway = new GooglePayGateway('example', paymentIntegrationService);\n        processor = new GooglePayPaymentProcessor(\n            scriptLoader,\n            gateway,\n            createRequestSender(),\n            formPoster,\n        );\n\n        jest.spyOn(processor, 'handleCoupons').mockResolvedValue({\n            newOfferInfo: {\n                offers: [{ description: 'Coupon description', redemptionCode: 'code' }],\n            },\n        });\n\n        jest.spyOn(processor, 'showPaymentSheet').mockResolvedValue(getCardDataResponse());\n        jest.spyOn(processor, 'setExternalCheckoutForm').mockResolvedValue(undefined);\n\n        jest.spyOn(processor, 'initialize').mockResolvedValue(undefined);\n\n        createInitializeWidgetMock();\n\n        jest.spyOn(processor, 'addPaymentButton').mockImplementation(\n            (_: string, buttonOptions: Omit<GooglePayButtonOptions, 'allowedPaymentMethods'>) => {\n                button.onclick = async (event) => {\n                    try {\n                        await buttonOptions.onClick(event);\n                    } catch (e) {\n                        mockFn(e);\n                    }\n                };\n\n                return button;\n            },\n        );\n        jest.spyOn(processor, 'signOut').mockResolvedValue(undefined);\n\n        jest.spyOn(processor, 'getCallbackTriggers').mockReturnValue({\n            availableTriggers: [\n                CallbackTriggerType.INITIALIZE,\n                CallbackTriggerType.SHIPPING_ADDRESS,\n                CallbackTriggerType.SHIPPING_OPTION,\n                CallbackTriggerType.OFFER,\n            ],\n            initializationTrigger: [CallbackTriggerType.INITIALIZE],\n            addressChangeTriggers: [\n                CallbackTriggerType.INITIALIZE,\n                CallbackTriggerType.SHIPPING_ADDRESS,\n            ],\n            shippingOptionsChangeTriggers: [CallbackTriggerType.SHIPPING_OPTION],\n            offerChangeTriggers: [CallbackTriggerType.OFFER],\n        });\n\n        buttonStrategy = new GooglePayButtonStrategy(paymentIntegrationService, processor);\n    });\n\n    describe('#initialize', () => {\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        describe('initialization of strategy with buy now required options', () => {\n            it('should initialize the strategy', async () => {\n                expect(await buttonStrategy.initialize(withBuyNowOptions)).toBeUndefined();\n                expect(paymentIntegrationService.loadDefaultCheckout).not.toHaveBeenCalled();\n            });\n\n            it('should initialize processor', async () => {\n                const getPaymentMethod = () =>\n                    (\n                        (processor.initialize as jest.Mock).mock\n                            .calls[0][0] as () => PaymentMethod<GooglePayInitializationData>\n                    )();\n                const paymentMethod = getGeneric();\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethod);\n\n                await buttonStrategy.initialize(withBuyNowOptions);\n\n                expect(getPaymentMethod()).toBe(paymentMethod);\n            });\n\n            it('should create Buy Now cart on google pay button click', async () => {\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.INITIALIZE,\n                );\n\n                prepareInitialize(initializeMock);\n\n                await buttonStrategy.initialize(withBuyNowOptions);\n\n                button.click();\n\n                expect(paymentIntegrationService.loadCheckout).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.createBuyNowCart).toHaveBeenCalled();\n                expect(paymentIntegrationService.updateShippingAddress).not.toHaveBeenCalled();\n            });\n\n            it('should update transactional data with available shipping options', async () => {\n                const handleShippingOptionChangeMock = jest.spyOn(\n                    processor,\n                    'handleShippingOptionChange',\n                );\n\n                jest.spyOn(processor, 'handleShippingAddressChange').mockResolvedValue(\n                    Promise.resolve(availableGPayShippingOptions),\n                );\n\n                jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockResolvedValue(\n                    getCart(),\n                );\n\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.INITIALIZE,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                prepareInitialize(initializeMock);\n\n                await buttonStrategy.initialize(withBuyNowOptions);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.createBuyNowCart).toHaveBeenCalled();\n                expect(handleShippingOptionChangeMock).not.toHaveBeenCalled();\n                expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                    newTransactionInfo: {\n                        countryCode: 'US',\n                        currencyCode: 'USD',\n                        totalPriceStatus: 'FINAL',\n                        totalPrice: '190.00',\n                    },\n                    newShippingOptionParameters: availableGPayShippingOptions,\n                });\n            });\n\n            it('should not create buy now cart on address change event', async () => {\n                jest.spyOn(processor, 'handleShippingAddressChange').mockResolvedValue(\n                    Promise.resolve(availableGPayShippingOptions),\n                );\n\n                jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockResolvedValue(\n                    getCart(),\n                );\n\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.SHIPPING_ADDRESS,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                prepareInitialize(initializeMock);\n\n                await buttonStrategy.initialize(withBuyNowOptions);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.createBuyNowCart).toHaveBeenCalledTimes(1);\n            });\n        });\n\n        it('throw an error on wallet button click', async () => {\n            const rejectedInitializeWidgetMock = createInitializeWidgetMock(internalError);\n\n            await buttonStrategy.initialize(options);\n\n            button.click();\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(rejectedInitializeWidgetMock).toHaveBeenCalledTimes(1);\n            expect(mockFn).toHaveBeenCalledWith(internalError);\n        });\n\n        it('triggers onError callback on wallet button click', async () => {\n            const rejectedInitializeWidgetMock = createInitializeWidgetMock(internalError);\n\n            await buttonStrategy.initialize(options);\n\n            button.click();\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(rejectedInitializeWidgetMock).toHaveBeenCalledTimes(1);\n            expect(options.googlepaybraintree?.onError).toHaveBeenCalled();\n        });\n\n        it('throw a canceled error on wallet button click', async () => {\n            const googlePayErrorObject: GooglePayErrorObject = {\n                statusCode: 'CANCELED',\n                statusMessage: 'Canceled',\n            };\n\n            const rejectedInitializeWidgetMock = createInitializeWidgetMock(googlePayErrorObject);\n\n            await buttonStrategy.initialize(options);\n\n            button.click();\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(rejectedInitializeWidgetMock).toHaveBeenCalledTimes(1);\n            expect(mockFn.mock.calls[0][0]).toBeInstanceOf(PaymentMethodCancelledError);\n        });\n\n        describe('initialization of strategy without buy now required options', () => {\n            it('should initialize the strategy', async () => {\n                const paymentDataCallbacks = () =>\n                    (processor.initialize as jest.Mock).mock.calls[0][1];\n                const initializeWidgetMock = jest.spyOn(processor, 'initializeWidget');\n\n                expect(await buttonStrategy.initialize(options)).toBeUndefined();\n                expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n                expect(paymentDataCallbacks()).toBeDefined();\n                expect(initializeWidgetMock).not.toHaveBeenCalled();\n            });\n\n            it('should load checkout via onPaymentDataChanged callback on clicking the google pay button', async () => {\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.INITIALIZE,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                prepareInitialize(initializeMock);\n\n                const initializeWidgetMock = jest.spyOn(processor, 'initializeWidget');\n\n                await buttonStrategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.loadCheckout).toHaveBeenCalled();\n                expect(paymentIntegrationService.createBuyNowCart).not.toHaveBeenCalled();\n                expect(initializeWidgetMock).toHaveBeenCalledTimes(1);\n            });\n\n            it('should skip initialization for unsupported GPay trigger', async () => {\n                jest.spyOn(processor, 'getCallbackTriggers').mockReturnValue({\n                    availableTriggers: [],\n                    initializationTrigger: [],\n                    addressChangeTriggers: [],\n                    shippingOptionsChangeTriggers: [],\n                });\n\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.INITIALIZE,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                prepareInitialize(initializeMock);\n\n                await buttonStrategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.loadCheckout).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.createBuyNowCart).not.toHaveBeenCalled();\n            });\n\n            it('should update available shipping address', async () => {\n                const handleShippingOptionChangeMock = jest.spyOn(\n                    processor,\n                    'handleShippingOptionChange',\n                );\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...getGeneric(),\n                    initializationData: undefined,\n                });\n\n                jest.spyOn(processor, 'handleShippingAddressChange').mockResolvedValue(\n                    Promise.resolve(availableGPayShippingOptions),\n                );\n\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.INITIALIZE,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                prepareInitialize(initializeMock);\n\n                await buttonStrategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                    newTransactionInfo: {\n                        currencyCode: 'USD',\n                        totalPriceStatus: 'FINAL',\n                        totalPrice: '190.00',\n                    },\n                    newShippingOptionParameters: availableGPayShippingOptions,\n                });\n                expect(handleShippingOptionChangeMock).not.toHaveBeenCalled();\n            });\n\n            it('should update shipping option', async () => {\n                const handleShippingOptionChangeMock = jest.spyOn(\n                    processor,\n                    'handleShippingOptionChange',\n                );\n\n                const handleShippingAddressChange = jest.spyOn(\n                    processor,\n                    'handleShippingAddressChange',\n                );\n\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.SHIPPING_OPTION,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                prepareInitialize(initializeMock);\n\n                await buttonStrategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                    newTransactionInfo: {\n                        countryCode: 'US',\n                        currencyCode: 'USD',\n                        totalPriceStatus: 'FINAL',\n                        totalPrice: '190.00',\n                    },\n                });\n                expect(handleShippingOptionChangeMock).toHaveBeenCalledWith(\n                    consignment.selectedShippingOption?.id,\n                );\n                expect(handleShippingAddressChange).not.toHaveBeenCalled();\n            });\n\n            it('should initialize processor', async () => {\n                const getPaymentMethod = () =>\n                    (\n                        (processor.initialize as jest.Mock).mock\n                            .calls[0][0] as () => PaymentMethod<GooglePayInitializationData>\n                    )();\n                const paymentMethod = getGeneric();\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethod);\n\n                await buttonStrategy.initialize(options);\n\n                expect(getPaymentMethod()).toBe(paymentMethod);\n            });\n        });\n\n        it('should fail silently if Google Pay is not supported', async () => {\n            jest.spyOn(processor, 'initialize').mockRejectedValue(\n                new Error('Google Pay is not supported'),\n            );\n\n            try {\n                await buttonStrategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n                expect(processor.addPaymentButton).not.toHaveBeenCalled();\n            }\n        });\n\n        it('should add payment button', async () => {\n            await buttonStrategy.initialize(options);\n\n            expect(processor.addPaymentButton).toHaveBeenCalledWith(CONTAINER_ID, {\n                buttonColor: 'default',\n                buttonType: 'plain',\n                onClick: expect.any(Function),\n            });\n        });\n\n        describe('Coupons', () => {\n            it('should call handleCoupons on initialize', async () => {\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.OFFER,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                prepareInitialize(initializeMock);\n\n                await buttonStrategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(processor.handleCoupons).toHaveBeenCalledWith({\n                    redemptionCodes: ['coupon_code'],\n                });\n            });\n\n            it('should update offers data', async () => {\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.OFFER,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                prepareInitialize(initializeMock);\n\n                await buttonStrategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                    newTransactionInfo: {\n                        countryCode: 'US',\n                        currencyCode: 'USD',\n                        totalPriceStatus: 'FINAL',\n                        totalPrice: '190.00',\n                    },\n                    newOfferInfo: {\n                        offers: [\n                            {\n                                description: 'Coupon description',\n                                redemptionCode: 'code',\n                            },\n                        ],\n                    },\n                });\n            });\n\n            it('should return a Google Pay error', async () => {\n                jest.spyOn(processor, 'handleCoupons').mockResolvedValue({\n                    error: {\n                        message: 'Error message',\n                        reason: ErrorReasonType.OFFER_INVALID,\n                        intent: CallbackTriggerType.OFFER,\n                    },\n                    newOfferInfo: {\n                        offers: [],\n                    },\n                });\n\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.OFFER,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                prepareInitialize(initializeMock);\n\n                await buttonStrategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                    newTransactionInfo: {\n                        countryCode: 'US',\n                        currencyCode: 'USD',\n                        totalPriceStatus: 'FINAL',\n                        totalPrice: '190.00',\n                    },\n                    error: {\n                        message: 'Error message',\n                        reason: ErrorReasonType.OFFER_INVALID,\n                        intent: CallbackTriggerType.OFFER,\n                    },\n                    newOfferInfo: {\n                        offers: [],\n                    },\n                });\n            });\n        });\n\n        describe('should fail if:', () => {\n            test('containerId is missing', async () => {\n                const initialize = buttonStrategy.initialize({\n                    ...options,\n                    containerId: '',\n                });\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('methodId is empty', async () => {\n                options.methodId = '';\n\n                const initialize = buttonStrategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('methodId is not a google pay key', async () => {\n                options.methodId = 'foo';\n\n                const initialize = buttonStrategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('googlePayOptions is missing', async () => {\n                delete options.googlepaybraintree;\n\n                const initialize = buttonStrategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('currencyCode is missing (Buy Now Flow)', async () => {\n                const initialize = buttonStrategy.initialize({\n                    ...withBuyNowOptions,\n                    googlepaybraintree: {\n                        ...withBuyNowOptions.googlepaybraintree,\n                        currencyCode: undefined,\n                    },\n                });\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n        });\n    });\n\n    describe('#initialize with WebView', () => {\n        describe('Buy Now flow', () => {\n            it('should call setIsWebViewExperimentOn with true when initializationData has it enabled', async () => {\n                const paymentMethod = getGeneric();\n\n                paymentMethod.initializationData = {\n                    ...paymentMethod.initializationData!,\n                    isWebViewExperimentOn: true,\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethod);\n\n                jest.spyOn(processor, 'setIsWebViewExperimentOn');\n\n                await buttonStrategy.initialize(withBuyNowOptions);\n\n                expect(processor.setIsWebViewExperimentOn).toHaveBeenCalledWith(true);\n            });\n\n            it('should call setIsWebViewExperimentOn with false when initializationData has it disabled', async () => {\n                const paymentMethod = getGeneric();\n\n                paymentMethod.initializationData = {\n                    ...paymentMethod.initializationData!,\n                    isWebViewExperimentOn: false,\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethod);\n\n                jest.spyOn(processor, 'setIsWebViewExperimentOn');\n\n                await buttonStrategy.initialize(withBuyNowOptions);\n\n                expect(processor.setIsWebViewExperimentOn).toHaveBeenCalledWith(false);\n            });\n\n            it('should call setIsWebViewExperimentOn with false when isWebViewExperimentOn is undefined', async () => {\n                const paymentMethod = getGeneric();\n\n                paymentMethod.initializationData = {\n                    ...paymentMethod.initializationData!,\n                    isWebViewExperimentOn: undefined,\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethod);\n\n                jest.spyOn(processor, 'setIsWebViewExperimentOn');\n\n                await buttonStrategy.initialize(withBuyNowOptions);\n\n                expect(processor.setIsWebViewExperimentOn).toHaveBeenCalledWith(false);\n            });\n\n            it('should call setIsWebViewExperimentOn before processor.initialize', async () => {\n                const callOrder: string[] = [];\n\n                jest.spyOn(processor, 'setIsWebViewExperimentOn').mockImplementation(() => {\n                    callOrder.push('setIsWebViewExperimentOn');\n                });\n\n                jest.spyOn(processor, 'initialize').mockImplementation(() => {\n                    callOrder.push('initialize');\n                });\n\n                await buttonStrategy.initialize(withBuyNowOptions);\n\n                expect(callOrder).toStrictEqual(['setIsWebViewExperimentOn', 'initialize']);\n            });\n        });\n\n        describe('non-Buy Now flow', () => {\n            it('should call setIsWebViewExperimentOn', async () => {\n                jest.spyOn(processor, 'setIsWebViewExperimentOn');\n\n                await buttonStrategy.initialize(options);\n\n                expect(processor.setIsWebViewExperimentOn).toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('#getGooglePayClientOptions with WebView', () => {\n        describe('Buy Now flow', () => {\n            it('should initialize processor without paymentDataCallbacks when in webview', async () => {\n                jest.spyOn(processor, 'isWebViewWithRestrictions').mockReturnValue(true);\n\n                await buttonStrategy.initialize(withBuyNowOptions);\n\n                expect(processor.initialize).toHaveBeenCalledWith(\n                    expect.any(Function),\n                    {},\n                    true,\n                    'USD',\n                );\n            });\n\n            it('should initialize processor with paymentDataCallbacks when not in webview', async () => {\n                jest.spyOn(processor, 'isWebViewWithRestrictions').mockReturnValue(false);\n\n                await buttonStrategy.initialize(withBuyNowOptions);\n\n                expect(processor.initialize).toHaveBeenCalledWith(\n                    expect.any(Function),\n                    expect.objectContaining({\n                        paymentDataCallbacks: expect.objectContaining({\n                            onPaymentDataChanged: expect.any(Function),\n                        }),\n                    }),\n                    true,\n                    'USD',\n                );\n            });\n        });\n\n        describe('non-Buy Now flow', () => {\n            it('should initialize processor without paymentDataCallbacks when in webview', async () => {\n                jest.spyOn(processor, 'isWebViewWithRestrictions').mockReturnValue(true);\n\n                await buttonStrategy.initialize(options);\n\n                expect(processor.initialize).toHaveBeenCalledWith(expect.any(Function), {});\n            });\n\n            it('should initialize processor with paymentDataCallbacks when not in webview', async () => {\n                jest.spyOn(processor, 'isWebViewWithRestrictions').mockReturnValue(false);\n\n                await buttonStrategy.initialize(options);\n\n                expect(processor.initialize).toHaveBeenCalledWith(\n                    expect.any(Function),\n                    expect.objectContaining({\n                        paymentDataCallbacks: expect.objectContaining({\n                            onPaymentDataChanged: expect.any(Function),\n                        }),\n                    }),\n                );\n            });\n        });\n    });\n\n    describe('#deinitialize', () => {\n        it('should deinitialize the strategy', async () => {\n            const deinitialize = buttonStrategy.deinitialize();\n\n            await expect(deinitialize).resolves.toBeUndefined();\n        });\n\n        it('should remove payment button', async () => {\n            await buttonStrategy.initialize(options);\n            await buttonStrategy.deinitialize();\n\n            expect(button.remove).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-button-strategy.ts",
    "content": "import {\n    BuyNowCartCreationError,\n    Cart,\n    CheckoutButtonInitializeOptions,\n    CheckoutButtonStrategy,\n    guard,\n    InvalidArgumentError,\n    NotInitializedError,\n    NotInitializedErrorType,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithGooglePayButtonInitializeOptions } from './google-pay-button-initialize-option';\nimport GooglePayCustomerInitializeOptions from './google-pay-customer-initialize-options';\nimport { WithGooglePayPaymentInitializeOptions } from './google-pay-payment-initialize-options';\nimport GooglePayPaymentProcessor from './google-pay-payment-processor';\nimport isGooglePayErrorObject from './guards/is-google-pay-error-object';\nimport isGooglePayKey from './guards/is-google-pay-key';\nimport {\n    GooglePayBuyNowInitializeOptions,\n    GooglePayError,\n    GooglePayInitializationData,\n    GooglePayPaymentDataRequest,\n    GooglePayPaymentOptions,\n    ShippingOptionParameters,\n    TotalPriceStatusType,\n} from './types';\n\nexport default class GooglePayButtonStrategy implements CheckoutButtonStrategy {\n    private _paymentButton?: HTMLElement;\n    private _methodId?: keyof WithGooglePayPaymentInitializeOptions;\n    private _buyNowCart?: Cart;\n    private _currencyCode?: string;\n    private _buyNowInitializeOptions?: GooglePayBuyNowInitializeOptions;\n    private _countryCode?: string;\n\n    constructor(\n        private _paymentIntegrationService: PaymentIntegrationService,\n        private _googlePayPaymentProcessor: GooglePayPaymentProcessor,\n    ) {}\n\n    async initialize(\n        options: CheckoutButtonInitializeOptions & WithGooglePayButtonInitializeOptions,\n    ): Promise<void> {\n        if (!options.methodId || !isGooglePayKey(options.methodId)) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" is not a valid key.',\n            );\n        }\n\n        this._methodId = options.methodId;\n\n        if (!options.containerId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"containerId\" is not a valid key.',\n            );\n        }\n\n        const googlePayOptions = options[this._getMethodOrThrow()];\n\n        if (!googlePayOptions) {\n            throw new InvalidArgumentError('Unable to proceed without valid options.');\n        }\n\n        const { buyNowInitializeOptions, currencyCode, buttonColor, buttonType, onError } =\n            googlePayOptions;\n\n        let state = this._paymentIntegrationService.getState();\n        let paymentMethod: PaymentMethod<GooglePayInitializationData>;\n\n        try {\n            paymentMethod = state.getPaymentMethodOrThrow(this._getMethodOrThrow());\n        } catch (_e) {\n            state = await this._paymentIntegrationService.loadPaymentMethod(\n                this._getMethodOrThrow(),\n            );\n            paymentMethod = state.getPaymentMethodOrThrow(this._getMethodOrThrow());\n        }\n\n        this._countryCode = paymentMethod.initializationData?.storeCountry;\n        this._googlePayPaymentProcessor.setIsWebViewExperimentOn(\n            !!paymentMethod.initializationData?.isWebViewExperimentOn,\n        );\n\n        if (buyNowInitializeOptions) {\n            if (!currencyCode) {\n                throw new InvalidArgumentError(\n                    `Unable to initialize payment because \"options.currencyCode\" argument is not provided.`,\n                );\n            }\n\n            this._currencyCode = currencyCode;\n            this._buyNowInitializeOptions = buyNowInitializeOptions;\n\n            await this._googlePayPaymentProcessor.initialize(\n                () => paymentMethod,\n                this._getGooglePayClientOptions(),\n                !!buyNowInitializeOptions,\n                currencyCode,\n            );\n        } else {\n            await this._paymentIntegrationService.loadDefaultCheckout();\n            await this._googlePayPaymentProcessor.initialize(\n                () => paymentMethod,\n                this._getGooglePayClientOptions(),\n            );\n        }\n\n        this._paymentButton =\n            this._paymentButton ??\n            this._googlePayPaymentProcessor.addPaymentButton(options.containerId, {\n                buttonColor: buttonColor ?? 'default',\n                buttonType: buttonType ?? 'plain',\n                onClick: this._handleClick(onError),\n            });\n    }\n\n    deinitialize(): Promise<void> {\n        this._paymentButton?.remove();\n        this._paymentButton = undefined;\n        this._methodId = undefined;\n\n        return Promise.resolve();\n    }\n\n    private _handleClick(\n        onError: GooglePayCustomerInitializeOptions['onError'],\n    ): (event: MouseEvent) => Promise<void> {\n        return async (event: MouseEvent) => {\n            event.preventDefault();\n\n            try {\n                if (this._buyNowInitializeOptions) {\n                    await this._createBuyNowCartOrThrow(this._buyNowInitializeOptions);\n                } else {\n                    await this._paymentIntegrationService.loadDefaultCheckout();\n                }\n\n                await this._googlePayPaymentProcessor.initializeWidget();\n                await this._interactWithPaymentSheet();\n            } catch (error) {\n                let err: unknown = error;\n\n                if (isGooglePayErrorObject(error)) {\n                    if (error.statusCode === 'CANCELED') {\n                        throw new PaymentMethodCancelledError();\n                    }\n\n                    err = new PaymentMethodFailedError(JSON.stringify(error));\n                }\n\n                onError?.(\n                    new PaymentMethodFailedError(\n                        'An error occurred while requesting your Google Pay payment details.',\n                    ),\n                );\n\n                throw err;\n            }\n        };\n    }\n\n    private async _interactWithPaymentSheet(): Promise<void> {\n        const response = await this._googlePayPaymentProcessor.showPaymentSheet();\n        const billingAddress =\n            this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(response);\n        const shippingAddress =\n            this._googlePayPaymentProcessor.mapToShippingAddressRequestBody(response);\n        const siteLink =\n            window.location.pathname === '/embedded-checkout'\n                ? this._paymentIntegrationService.getState().getStoreConfigOrThrow().links.siteLink\n                : undefined;\n\n        if (billingAddress) {\n            await this._paymentIntegrationService.updateBillingAddress(billingAddress);\n        }\n\n        if (shippingAddress && !this._buyNowCart?.lineItems.digitalItems.length) {\n            await this._paymentIntegrationService.updateShippingAddress(shippingAddress);\n        }\n\n        await this._googlePayPaymentProcessor.setExternalCheckoutForm(\n            this._getMethodOrThrow(),\n            response,\n            siteLink,\n        );\n    }\n\n    private _getGooglePayClientOptions(): GooglePayPaymentOptions | undefined {\n        if (this._googlePayPaymentProcessor.isWebViewWithRestrictions()) {\n            return {};\n        }\n\n        return {\n            paymentDataCallbacks: {\n                onPaymentDataChanged: async ({\n                    callbackTrigger,\n                    shippingAddress,\n                    shippingOptionData,\n                    offerData,\n                }) => {\n                    const {\n                        availableTriggers,\n                        addressChangeTriggers,\n                        shippingOptionsChangeTriggers,\n                        offerChangeTriggers,\n                    } = this._googlePayPaymentProcessor.getCallbackTriggers();\n\n                    if (!availableTriggers.includes(callbackTrigger)) {\n                        return;\n                    }\n\n                    const availableShippingOptions = addressChangeTriggers.includes(callbackTrigger)\n                        ? await this._googlePayPaymentProcessor.handleShippingAddressChange(\n                              shippingAddress,\n                          )\n                        : undefined;\n\n                    if (shippingOptionsChangeTriggers.includes(callbackTrigger)) {\n                        await this._googlePayPaymentProcessor.handleShippingOptionChange(\n                            shippingOptionData.id,\n                        );\n                    }\n\n                    const { newOfferInfo = undefined, error: couponsError = undefined } =\n                        offerChangeTriggers.includes(callbackTrigger)\n                            ? await this._googlePayPaymentProcessor.handleCoupons(offerData)\n                            : {};\n\n                    // We can add another errors if needed 'couponsError || shippingError || anotherError'\n                    const error: GooglePayError | undefined = couponsError;\n\n                    if (this._buyNowInitializeOptions) {\n                        return this._getBuyNowTransactionInfo(\n                            availableShippingOptions,\n                            newOfferInfo,\n                            error,\n                        );\n                    }\n\n                    return this._getTransactionInfo(availableShippingOptions, newOfferInfo, error);\n                },\n            },\n        };\n    }\n\n    private async _createBuyNowCartOrThrow(\n        buyNowInitializeOptions?: GooglePayBuyNowInitializeOptions,\n    ): Promise<void> {\n        if (typeof buyNowInitializeOptions?.getBuyNowCartRequestBody === 'function') {\n            const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n            try {\n                this._buyNowCart = await this._paymentIntegrationService.createBuyNowCart(\n                    cartRequestBody,\n                );\n\n                await this._paymentIntegrationService.loadCheckout(this._buyNowCart.id);\n            } catch (error) {\n                if (typeof error === 'string') {\n                    throw new BuyNowCartCreationError(error);\n                }\n\n                throw error;\n            }\n        }\n    }\n\n    private _getBuyNowTransactionInfo(\n        availableShippingOptions?: ShippingOptionParameters,\n        newOfferInfo?: GooglePayPaymentDataRequest['offerInfo'],\n        error?: GooglePayError,\n    ) {\n        if (!this._buyNowCart) {\n            return;\n        }\n\n        const { cartAmount } = this._buyNowCart;\n\n        const totalPrice = this._googlePayPaymentProcessor.getTotalPrice();\n\n        return {\n            newTransactionInfo: {\n                ...(this._countryCode && { countryCode: this._countryCode }),\n                currencyCode: this._getCurrencyCodeOrThrow(),\n                totalPrice: totalPrice || String(cartAmount),\n                totalPriceStatus: TotalPriceStatusType.FINAL,\n            },\n            ...(availableShippingOptions && {\n                newShippingOptionParameters: availableShippingOptions,\n            }),\n            ...(newOfferInfo && {\n                newOfferInfo,\n            }),\n            ...(error && {\n                error,\n            }),\n        };\n    }\n\n    private async _getTransactionInfo(\n        availableShippingOptions?: ShippingOptionParameters,\n        newOfferInfo?: GooglePayPaymentDataRequest['offerInfo'],\n        error?: GooglePayError,\n    ) {\n        await this._paymentIntegrationService.loadCheckout();\n\n        const totalPrice = this._googlePayPaymentProcessor.getTotalPrice();\n        const { code: currencyCode } = this._paymentIntegrationService\n            .getState()\n            .getCartOrThrow().currency;\n\n        return {\n            newTransactionInfo: {\n                ...(this._countryCode && { countryCode: this._countryCode }),\n                currencyCode,\n                totalPriceStatus: TotalPriceStatusType.FINAL,\n                totalPrice,\n            },\n            ...(availableShippingOptions && {\n                newShippingOptionParameters: availableShippingOptions,\n            }),\n            ...(newOfferInfo && {\n                newOfferInfo,\n            }),\n            ...(error && {\n                error,\n            }),\n        };\n    }\n\n    private _getMethodOrThrow(): keyof WithGooglePayButtonInitializeOptions {\n        return guard(\n            this._methodId,\n            () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n        );\n    }\n\n    private _getCurrencyCodeOrThrow(): string {\n        return guard(\n            this._currencyCode,\n            () =>\n                new InvalidArgumentError(\n                    'Unable to initialize payment because \"options.currencyCode\" argument is not provided.',\n                ),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-customer-initialize-options.ts",
    "content": "import { GooglePayKey } from './google-pay-payment-initialize-options';\nimport { GooglePayButtonColor, GooglePayButtonType } from './types';\n\nexport default interface GooglePayCustomerInitializeOptions {\n    /**\n     * This container is used to set an event listener, provide an element ID if you want users to be able to launch\n     * the GooglePay wallet modal by clicking on a button. It should be an HTML element.\n     */\n    container: string;\n\n    /**\n     * All Google Pay payment buttons exist in two styles: dark (default) and light.\n     * To provide contrast, use dark buttons on light backgrounds and light buttons on dark or colorful backgrounds.\n     */\n    buttonColor?: GooglePayButtonColor;\n\n    /**\n     * Variant buttons:\n     * book: The \"Book with Google Pay\" payment button.\n     * buy: The \"Buy with Google Pay\" payment button.\n     * checkout: The \"Checkout with Google Pay\" payment button.\n     * donate: The \"Donate with Google Pay\" payment button.\n     * order: The \"Order with Google Pay\" payment button.\n     * pay: The \"Pay with Google Pay\" payment button.\n     * plain: The Google Pay payment button without the additional text (default).\n     * subscribe: The \"Subscribe with Google Pay\" payment button.\n     *\n     * Note: \"long\" and \"short\" button types have been renamed to \"buy\" and \"plain\", but are still valid button types\n     * for backwards compatability.\n     */\n    buttonType?: GooglePayButtonType;\n\n    /**\n     * A callback that gets called when GooglePay fails to initialize or\n     * selects a payment option.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error: Error): void;\n\n    /**\n     * Callback that get called on wallet button click\n     */\n    onClick?(): void;\n}\n\n/**\n * The options that are required to initialize the GooglePay payment method.\n * They can be omitted unless you need to support GooglePay.\n */\nexport type WithGooglePayCustomerInitializeOptions = {\n    [k in GooglePayKey]?: GooglePayCustomerInitializeOptions;\n};\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-customer-strategy.spec.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\nimport { EventEmitter } from 'events';\n\nimport {\n    CustomerInitializeOptions,\n    InvalidArgumentError,\n    NotImplementedError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    getConsignment,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayGateway from './gateways/google-pay-gateway';\nimport { WithGooglePayCustomerInitializeOptions } from './google-pay-customer-initialize-options';\nimport GooglePayCustomerStrategy from './google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from './google-pay-payment-processor';\nimport GooglePayScriptLoader from './google-pay-script-loader';\nimport getCardDataResponse from './mocks/google-pay-card-data-response.mock';\nimport { getGeneric } from './mocks/google-pay-payment-method.mock';\nimport { createInitializeImplementationMock } from './mocks/google-pay-processor-initialize.mock';\nimport {\n    CallbackTriggerType,\n    ErrorReasonType,\n    GooglePayButtonOptions,\n    GooglePayErrorObject,\n    GooglePayInitializationData,\n    NewTransactionInfo,\n} from './types';\n\ndescribe('GooglePayCustomerStrategy', () => {\n    const CONTAINER_ID = 'my_awesome_google_pay_button_container';\n\n    let paymentIntegrationService: PaymentIntegrationService;\n    let button: HTMLButtonElement;\n    let processor: GooglePayPaymentProcessor;\n    let strategy: GooglePayCustomerStrategy;\n    let options: CustomerInitializeOptions & WithGooglePayCustomerInitializeOptions;\n    let eventEmitter: EventEmitter;\n    const storeConfig = getConfig().storeConfig;\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getGeneric(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfig,\n        );\n        button = document.createElement('button');\n        jest.spyOn(button, 'remove');\n\n        processor = new GooglePayPaymentProcessor(\n            new GooglePayScriptLoader(createScriptLoader()),\n            new GooglePayGateway('example', paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        );\n        jest.spyOn(processor, 'initialize').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'initializeWidget').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'addPaymentButton').mockReturnValue(button);\n        jest.spyOn(processor, 'signOut').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'showPaymentSheet').mockResolvedValue(getCardDataResponse());\n        jest.spyOn(processor, 'setExternalCheckoutForm').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'handleCoupons').mockResolvedValue({\n            newOfferInfo: {\n                offers: [{ description: 'Coupon description', redemptionCode: 'code' }],\n            },\n        });\n\n        strategy = new GooglePayCustomerStrategy(paymentIntegrationService, processor);\n\n        options = {\n            methodId: 'googlepayworldpayaccess',\n            googlepayworldpayaccess: {\n                container: CONTAINER_ID,\n                onClick: jest.fn(),\n                onError: jest.fn(),\n            },\n        };\n    });\n\n    describe('#initialize', () => {\n        it('should initialize the strategy', async () => {\n            const initialize = strategy.initialize(options);\n            const initializeWidgetMock = jest.spyOn(processor, 'initializeWidget');\n\n            await expect(initialize).resolves.toBeUndefined();\n            expect(initializeWidgetMock).not.toHaveBeenCalled();\n        });\n\n        it('should call loadPaymentMethod', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => {\n                throw new Error();\n            });\n\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValueOnce({\n                ...paymentIntegrationService.getState(),\n                getPaymentMethodOrThrow: jest.fn().mockReturnValue(getGeneric()),\n            });\n\n            await strategy.initialize(options);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                'googlepayworldpayaccess',\n            );\n        });\n\n        it('should initialize processor', async () => {\n            const getPaymentMethod = () =>\n                (\n                    (processor.initialize as jest.Mock).mock\n                        .calls[0][0] as () => PaymentMethod<GooglePayInitializationData>\n                )();\n            const paymentMethod = getGeneric();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            await strategy.initialize(options);\n\n            expect(getPaymentMethod()).toBe(paymentMethod);\n        });\n\n        it('should fail silently if Google Pay is not supported', async () => {\n            jest.spyOn(processor, 'initialize').mockRejectedValue(\n                new Error('Google Pay is not supported'),\n            );\n\n            await strategy.initialize(options);\n\n            expect(processor.addPaymentButton).not.toHaveBeenCalled();\n        });\n\n        it('should add payment button', async () => {\n            await strategy.initialize(options);\n\n            expect(processor.addPaymentButton).toHaveBeenCalledWith(CONTAINER_ID, {\n                buttonColor: 'default',\n                buttonType: 'plain',\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('should add payment button once', async () => {\n            await strategy.initialize(options);\n            await strategy.initialize(options);\n\n            expect(processor.addPaymentButton).toHaveBeenCalledTimes(1);\n        });\n\n        describe('should fail if:', () => {\n            test('options is missing', async () => {\n                const initialize = strategy.initialize();\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('methodId is empty', async () => {\n                options.methodId = '';\n\n                const initialize = strategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('methodId is not a google pay key', async () => {\n                options.methodId = 'foo';\n\n                const initialize = strategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('googlePayOptions is missing', async () => {\n                delete options.googlepayworldpayaccess;\n\n                const initialize = strategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n        });\n    });\n\n    describe('#initialize with WebView', () => {\n        it('should call setIsWebViewExperimentOn with true when initializationData has it enabled', async () => {\n            const paymentMethod = getGeneric();\n\n            paymentMethod.initializationData = {\n                ...paymentMethod.initializationData!,\n                isWebViewExperimentOn: true,\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            jest.spyOn(processor, 'setIsWebViewExperimentOn');\n\n            await strategy.initialize(options);\n\n            expect(processor.setIsWebViewExperimentOn).toHaveBeenCalledWith(true);\n        });\n\n        it('should call setIsWebViewExperimentOn with false when initializationData has it disabled', async () => {\n            const paymentMethod = getGeneric();\n\n            paymentMethod.initializationData = {\n                ...paymentMethod.initializationData!,\n                isWebViewExperimentOn: false,\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            jest.spyOn(processor, 'setIsWebViewExperimentOn');\n\n            await strategy.initialize(options);\n\n            expect(processor.setIsWebViewExperimentOn).toHaveBeenCalledWith(false);\n        });\n\n        it('should call setIsWebViewExperimentOn with false when isWebViewExperimentOn is undefined', async () => {\n            const paymentMethod = getGeneric();\n\n            paymentMethod.initializationData = {\n                ...paymentMethod.initializationData!,\n                isWebViewExperimentOn: undefined,\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            jest.spyOn(processor, 'setIsWebViewExperimentOn');\n\n            await strategy.initialize(options);\n\n            expect(processor.setIsWebViewExperimentOn).toHaveBeenCalledWith(false);\n        });\n\n        it('should call setIsWebViewExperimentOn before initialize', async () => {\n            const callOrder: string[] = [];\n\n            jest.spyOn(processor, 'setIsWebViewExperimentOn').mockImplementation(() => {\n                callOrder.push('setIsWebViewExperimentOn');\n            });\n\n            jest.spyOn(processor, 'initialize').mockImplementation(() => {\n                callOrder.push('initialize');\n\n                return Promise.resolve();\n            });\n\n            await strategy.initialize(options);\n\n            expect(callOrder).toStrictEqual(['setIsWebViewExperimentOn', 'initialize']);\n        });\n    });\n\n    describe('#getGooglePayClientOptions with WebView', () => {\n        it('should initialize processor without paymentDataCallbacks when in webview', async () => {\n            jest.spyOn(processor, 'isWebViewWithRestrictions').mockReturnValue(true);\n\n            await strategy.initialize(options);\n\n            expect(processor.initialize).toHaveBeenCalledWith(expect.any(Function), {});\n        });\n\n        it('should initialize processor with paymentDataCallbacks when not in webview', async () => {\n            jest.spyOn(processor, 'isWebViewWithRestrictions').mockReturnValue(false);\n\n            await strategy.initialize(options);\n\n            expect(processor.initialize).toHaveBeenCalledWith(\n                expect.any(Function),\n                expect.objectContaining({\n                    paymentDataCallbacks: expect.objectContaining({\n                        onPaymentDataChanged: expect.any(Function),\n                    }),\n                }),\n            );\n        });\n    });\n\n    describe('#signIn', () => {\n        it('should not signIn programmatically', async () => {\n            const signIn = strategy.signIn();\n\n            await expect(signIn).rejects.toThrow(NotImplementedError);\n        });\n    });\n\n    describe('#signOut', () => {\n        it('should signOut', async () => {\n            const signOut = strategy.signOut();\n\n            await expect(signOut).resolves.toBeUndefined();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout', () => {\n        it('runs continue callback automatically on execute payment method checkout', async () => {\n            const continueWithCheckoutCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({\n                continueWithCheckoutCallback,\n            });\n\n            expect(continueWithCheckoutCallback).toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize', () => {\n        it('should deinitialize the strategy', async () => {\n            const deinitialize = strategy.deinitialize();\n\n            await expect(deinitialize).resolves.toBeUndefined();\n        });\n\n        it('should remove payment button', async () => {\n            await strategy.initialize(options);\n            await strategy.deinitialize();\n\n            expect(button.remove).toHaveBeenCalled();\n        });\n    });\n\n    describe('#handleClick', () => {\n        const mockFn = jest.fn();\n        const internalError = new Error('internal error');\n\n        const createInitializeWidgetMock = (error?: unknown) =>\n            jest.spyOn(processor, 'initializeWidget').mockImplementation(\n                error\n                    ? () => {\n                          throw error;\n                      }\n                    : undefined,\n            );\n\n        beforeEach(() => {\n            jest.spyOn(processor, 'addPaymentButton').mockImplementation(\n                (\n                    _: string,\n                    buttonOptions: Omit<GooglePayButtonOptions, 'allowedPaymentMethods'>,\n                ) => {\n                    button.onclick = async (event) => {\n                        try {\n                            await buttonOptions.onClick(event);\n                        } catch (e) {\n                            mockFn(e);\n                        }\n                    };\n\n                    return button;\n                },\n            );\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('triggers onClick callback on wallet button click', async () => {\n            const initializeWidgetMock = createInitializeWidgetMock();\n\n            await strategy.initialize(options);\n\n            button.click();\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(options.googlepayworldpayaccess?.onClick).toHaveBeenCalled();\n            expect(initializeWidgetMock).toHaveBeenCalledTimes(1);\n        });\n\n        it('throw an error on wallet button click', async () => {\n            const rejectedInitializeWidgetMock = createInitializeWidgetMock(internalError);\n\n            await strategy.initialize(options);\n\n            button.click();\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(rejectedInitializeWidgetMock).toHaveBeenCalledTimes(1);\n            expect(mockFn).toHaveBeenCalledWith(internalError);\n        });\n\n        it('triggers onError callback on wallet button click', async () => {\n            const rejectedInitializeWidgetMock = createInitializeWidgetMock(internalError);\n\n            await strategy.initialize(options);\n\n            button.click();\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(rejectedInitializeWidgetMock).toHaveBeenCalledTimes(1);\n            expect(options.googlepayworldpayaccess?.onError).toHaveBeenCalled();\n        });\n\n        it('throw a canceled error on wallet button click', async () => {\n            const googlePayErrorObject: GooglePayErrorObject = {\n                statusCode: 'CANCELED',\n                statusMessage: 'Canceled',\n            };\n\n            const rejectedInitializeWidgetMock = createInitializeWidgetMock(googlePayErrorObject);\n\n            await strategy.initialize(options);\n\n            button.click();\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(rejectedInitializeWidgetMock).toHaveBeenCalledTimes(1);\n            expect(mockFn.mock.calls[0][0]).toBeInstanceOf(PaymentMethodCancelledError);\n        });\n\n        describe('#getGooglePayClientOptions', () => {\n            let mockReturnedPaymentDataChangedValue: NewTransactionInfo | undefined;\n\n            const consignment = getConsignment();\n            const expectedSippingOptions = [\n                {\n                    id: consignment.availableShippingOptions![0].id,\n                    label: consignment.availableShippingOptions![0].description,\n                    description: '$0.00',\n                },\n            ];\n            const availableGPayShippingOptions = {\n                defaultSelectedOptionId: consignment.selectedShippingOption?.id,\n                shippingOptions: expectedSippingOptions,\n            };\n\n            beforeEach(() => {\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.INITIALIZE,\n                    (res) => {\n                        mockReturnedPaymentDataChangedValue = res || undefined;\n                    },\n                );\n\n                jest.spyOn(processor, 'initialize').mockImplementation(initializeMock);\n\n                jest.spyOn(processor, 'showPaymentSheet').mockImplementation(() => {\n                    eventEmitter.emit('onPaymentDataChanged');\n\n                    return Promise.resolve(getCardDataResponse());\n                });\n\n                jest.spyOn(processor, 'getCallbackTriggers').mockReturnValue({\n                    availableTriggers: [\n                        CallbackTriggerType.INITIALIZE,\n                        CallbackTriggerType.SHIPPING_ADDRESS,\n                        CallbackTriggerType.SHIPPING_OPTION,\n                        CallbackTriggerType.OFFER,\n                    ],\n                    initializationTrigger: [CallbackTriggerType.INITIALIZE],\n                    addressChangeTriggers: [\n                        CallbackTriggerType.INITIALIZE,\n                        CallbackTriggerType.SHIPPING_ADDRESS,\n                    ],\n                    shippingOptionsChangeTriggers: [CallbackTriggerType.SHIPPING_OPTION],\n                    offerChangeTriggers: [CallbackTriggerType.OFFER],\n                });\n            });\n\n            it('should load checkout via onPaymentDataChanged callback', async () => {\n                await strategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.loadCheckout).toHaveBeenCalled();\n            });\n\n            it('should return updated transactionInfo without shipping data', async () => {\n                jest.spyOn(processor, 'getCallbackTriggers').mockReturnValue({\n                    availableTriggers: [CallbackTriggerType.INITIALIZE],\n                    addressChangeTriggers: [],\n                    shippingOptionsChangeTriggers: [],\n                    offerChangeTriggers: [],\n                });\n\n                await strategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                    newTransactionInfo: {\n                        countryCode: 'US',\n                        currencyCode: 'USD',\n                        totalPriceStatus: 'FINAL',\n                        totalPrice: '190.00',\n                    },\n                });\n            });\n\n            it('should not return updated transactionInfo if callback not supported', async () => {\n                jest.spyOn(processor, 'getCallbackTriggers').mockReturnValue({\n                    availableTriggers: [],\n                    addressChangeTriggers: [],\n                    shippingOptionsChangeTriggers: [],\n                    offerChangeTriggers: [],\n                });\n\n                await strategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(mockReturnedPaymentDataChangedValue).toBeUndefined();\n            });\n\n            it('should return updated transactionInfo with available shipping options', async () => {\n                jest.spyOn(processor, 'handleShippingAddressChange').mockResolvedValue(\n                    availableGPayShippingOptions,\n                );\n\n                const handleShippingOptionChangeMock = jest.spyOn(\n                    processor,\n                    'handleShippingOptionChange',\n                );\n\n                await strategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                    newTransactionInfo: {\n                        countryCode: 'US',\n                        currencyCode: 'USD',\n                        totalPriceStatus: 'FINAL',\n                        totalPrice: '190.00',\n                    },\n                    newShippingOptionParameters: availableGPayShippingOptions,\n                });\n                expect(handleShippingOptionChangeMock).not.toHaveBeenCalled();\n            });\n\n            it('should update selected shipping option', async () => {\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.SHIPPING_OPTION,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                jest.spyOn(processor, 'initialize').mockImplementation(initializeMock);\n                jest.spyOn(processor, 'handleShippingAddressChange').mockResolvedValue(\n                    Promise.resolve(availableGPayShippingOptions),\n                );\n\n                const handleShippingOptionChangeMock = jest.spyOn(\n                    processor,\n                    'handleShippingOptionChange',\n                );\n\n                await strategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                    newTransactionInfo: {\n                        countryCode: 'US',\n                        currencyCode: 'USD',\n                        totalPriceStatus: 'FINAL',\n                        totalPrice: '190.00',\n                    },\n                });\n                expect(handleShippingOptionChangeMock).toHaveBeenCalledWith(\n                    consignment.selectedShippingOption?.id,\n                );\n            });\n        });\n\n        describe('Coupons', () => {\n            let mockReturnedPaymentDataChangedValue: NewTransactionInfo | undefined;\n\n            it('should call handleCoupons on initialize', async () => {\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.OFFER,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                jest.spyOn(processor, 'initialize').mockImplementation(initializeMock);\n\n                jest.spyOn(processor, 'showPaymentSheet').mockImplementation(() => {\n                    eventEmitter.emit('onPaymentDataChanged');\n\n                    return Promise.resolve(getCardDataResponse());\n                });\n\n                await strategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(processor.handleCoupons).toHaveBeenCalledWith({\n                    redemptionCodes: ['coupon_code'],\n                });\n            });\n\n            it('should update offers data', async () => {\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.OFFER,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                jest.spyOn(processor, 'initialize').mockImplementation(initializeMock);\n\n                jest.spyOn(processor, 'showPaymentSheet').mockImplementation(() => {\n                    eventEmitter.emit('onPaymentDataChanged');\n\n                    return Promise.resolve(getCardDataResponse());\n                });\n\n                await strategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                    newTransactionInfo: {\n                        countryCode: 'US',\n                        currencyCode: 'USD',\n                        totalPriceStatus: 'FINAL',\n                        totalPrice: '190.00',\n                    },\n                    newOfferInfo: {\n                        offers: [\n                            {\n                                description: 'Coupon description',\n                                redemptionCode: 'code',\n                            },\n                        ],\n                    },\n                });\n            });\n\n            it('should return a Google Pay error', async () => {\n                jest.spyOn(processor, 'handleCoupons').mockResolvedValue({\n                    error: {\n                        message: 'Error message',\n                        reason: ErrorReasonType.OFFER_INVALID,\n                        intent: CallbackTriggerType.OFFER,\n                    },\n                    newOfferInfo: {\n                        offers: [],\n                    },\n                });\n\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.OFFER,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                jest.spyOn(processor, 'initialize').mockImplementation(initializeMock);\n\n                jest.spyOn(processor, 'showPaymentSheet').mockImplementation(() => {\n                    eventEmitter.emit('onPaymentDataChanged');\n\n                    return Promise.resolve(getCardDataResponse());\n                });\n\n                await strategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                    newTransactionInfo: {\n                        countryCode: 'US',\n                        currencyCode: 'USD',\n                        totalPriceStatus: 'FINAL',\n                        totalPrice: '190.00',\n                    },\n                    error: {\n                        message: 'Error message',\n                        reason: ErrorReasonType.OFFER_INVALID,\n                        intent: CallbackTriggerType.OFFER,\n                    },\n                    newOfferInfo: {\n                        offers: [],\n                    },\n                });\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-customer-strategy.ts",
    "content": "import {\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    ExecutePaymentMethodCheckoutOptions,\n    guard,\n    InvalidArgumentError,\n    NotImplementedError,\n    NotInitializedError,\n    NotInitializedErrorType,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayCustomerInitializeOptions, {\n    WithGooglePayCustomerInitializeOptions,\n} from './google-pay-customer-initialize-options';\nimport GooglePayPaymentProcessor from './google-pay-payment-processor';\nimport isGooglePayErrorObject from './guards/is-google-pay-error-object';\nimport isGooglePayKey from './guards/is-google-pay-key';\nimport {\n    GooglePayError,\n    GooglePayInitializationData,\n    GooglePayPaymentOptions,\n    TotalPriceStatusType,\n} from './types';\n\nexport default class GooglePayCustomerStrategy implements CustomerStrategy {\n    private _paymentButton?: HTMLElement;\n    private _methodId?: keyof WithGooglePayCustomerInitializeOptions;\n\n    constructor(\n        private _paymentIntegrationService: PaymentIntegrationService,\n        private _googlePayPaymentProcessor: GooglePayPaymentProcessor,\n    ) {}\n\n    async initialize(\n        options?: CustomerInitializeOptions & WithGooglePayCustomerInitializeOptions,\n    ): Promise<void> {\n        if (!options?.methodId || !isGooglePayKey(options.methodId)) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" is not a valid key.',\n            );\n        }\n\n        this._methodId = options.methodId;\n\n        const googlePayOptions = options[this._getMethodId()];\n\n        if (!googlePayOptions) {\n            throw new InvalidArgumentError('Unable to proceed without valid options.');\n        }\n\n        let state = this._paymentIntegrationService.getState();\n        let paymentMethod: PaymentMethod<GooglePayInitializationData>;\n\n        try {\n            paymentMethod = state.getPaymentMethodOrThrow(this._getMethodId());\n        } catch (_e) {\n            state = await this._paymentIntegrationService.loadPaymentMethod(this._getMethodId());\n            paymentMethod = state.getPaymentMethodOrThrow(this._getMethodId());\n        }\n\n        try {\n            this._googlePayPaymentProcessor.setIsWebViewExperimentOn(\n                !!paymentMethod.initializationData?.isWebViewExperimentOn,\n            );\n            await this._googlePayPaymentProcessor.initialize(\n                () => paymentMethod,\n                this._getGooglePayClientOptions(paymentMethod.initializationData?.storeCountry),\n            );\n        } catch {\n            return;\n        }\n\n        this._addPaymentButton(googlePayOptions);\n    }\n\n    signIn(): Promise<void> {\n        return Promise.reject(\n            new NotImplementedError(\n                'In order to sign in via Google Pay, the shopper must click on \"Google Pay\" button.',\n            ),\n        );\n    }\n\n    async signOut(): Promise<void> {\n        const providerId = this._paymentIntegrationService.getState().getPaymentId()?.providerId;\n\n        if (providerId) {\n            await this._googlePayPaymentProcessor.signOut(providerId);\n        }\n    }\n\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n        options?.continueWithCheckoutCallback?.();\n\n        return Promise.resolve();\n    }\n\n    deinitialize(): Promise<void> {\n        this._paymentButton?.remove();\n        this._paymentButton = undefined;\n        this._methodId = undefined;\n\n        return Promise.resolve();\n    }\n\n    private _getGooglePayClientOptions(countryCode?: string): GooglePayPaymentOptions {\n        if (this._googlePayPaymentProcessor.isWebViewWithRestrictions()) {\n            return {};\n        }\n\n        return {\n            paymentDataCallbacks: {\n                onPaymentDataChanged: async ({\n                    callbackTrigger,\n                    shippingAddress,\n                    shippingOptionData,\n                    offerData,\n                }) => {\n                    const {\n                        availableTriggers,\n                        addressChangeTriggers,\n                        shippingOptionsChangeTriggers,\n                        offerChangeTriggers,\n                    } = this._googlePayPaymentProcessor.getCallbackTriggers();\n\n                    if (!availableTriggers.includes(callbackTrigger)) {\n                        return;\n                    }\n\n                    const availableShippingOptions = addressChangeTriggers.includes(callbackTrigger)\n                        ? await this._googlePayPaymentProcessor.handleShippingAddressChange(\n                              shippingAddress,\n                          )\n                        : undefined;\n\n                    if (shippingOptionsChangeTriggers.includes(callbackTrigger)) {\n                        await this._googlePayPaymentProcessor.handleShippingOptionChange(\n                            shippingOptionData.id,\n                        );\n                    }\n\n                    const { newOfferInfo = undefined, error: couponsError = undefined } =\n                        offerChangeTriggers.includes(callbackTrigger)\n                            ? await this._googlePayPaymentProcessor.handleCoupons(offerData)\n                            : {};\n\n                    // We can add another errors if needed 'couponsError || shippingError || anotherError'\n                    const error: GooglePayError | undefined = couponsError;\n\n                    await this._paymentIntegrationService.loadCheckout();\n\n                    const totalPrice = this._googlePayPaymentProcessor.getTotalPrice();\n                    const { code: currencyCode } = this._paymentIntegrationService\n                        .getState()\n                        .getCartOrThrow().currency;\n\n                    return {\n                        newTransactionInfo: {\n                            ...(countryCode && { countryCode }),\n                            currencyCode,\n                            totalPriceStatus: TotalPriceStatusType.FINAL,\n                            totalPrice,\n                        },\n                        ...(availableShippingOptions && {\n                            newShippingOptionParameters: availableShippingOptions,\n                        }),\n                        ...(newOfferInfo && {\n                            newOfferInfo,\n                        }),\n                        ...(error && {\n                            error,\n                        }),\n                    };\n                },\n            },\n        };\n    }\n\n    private _addPaymentButton({\n        container,\n        buttonColor,\n        buttonType,\n        onClick,\n        onError,\n    }: GooglePayCustomerInitializeOptions): void {\n        this._paymentButton =\n            this._paymentButton ??\n            this._googlePayPaymentProcessor.addPaymentButton(container, {\n                buttonColor: buttonColor ?? 'default',\n                buttonType: buttonType ?? 'plain',\n                onClick: this._handleClick(onError, onClick),\n            });\n    }\n\n    private _handleClick(\n        onError: GooglePayCustomerInitializeOptions['onError'],\n        onClick: GooglePayCustomerInitializeOptions['onClick'],\n    ): (event: MouseEvent) => Promise<void> {\n        return async (event: MouseEvent) => {\n            event.preventDefault();\n\n            if (onClick && typeof onClick === 'function') {\n                onClick();\n            }\n\n            // TODO: Dispatch Widget Actions\n            try {\n                await this._googlePayPaymentProcessor.initializeWidget();\n                await this._interactWithPaymentSheet();\n            } catch (error) {\n                let err: unknown = error;\n\n                if (isGooglePayErrorObject(error)) {\n                    if (error.statusCode === 'CANCELED') {\n                        throw new PaymentMethodCancelledError();\n                    }\n\n                    err = new PaymentMethodFailedError(JSON.stringify(error));\n                }\n\n                onError?.(\n                    new PaymentMethodFailedError(\n                        'An error occurred while requesting your Google Pay payment details.',\n                    ),\n                );\n\n                throw err;\n            }\n        };\n    }\n\n    private async _interactWithPaymentSheet(): Promise<void> {\n        const response = await this._googlePayPaymentProcessor.showPaymentSheet();\n        const billingAddress =\n            this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(response);\n        const shippingAddress =\n            this._googlePayPaymentProcessor.mapToShippingAddressRequestBody(response);\n\n        const siteLink =\n            window.location.pathname === '/embedded-checkout'\n                ? this._paymentIntegrationService.getState().getStoreConfigOrThrow().links.siteLink\n                : undefined;\n\n        if (billingAddress) {\n            await this._paymentIntegrationService.updateBillingAddress(billingAddress);\n        }\n\n        if (shippingAddress) {\n            await this._paymentIntegrationService.updateShippingAddress(shippingAddress);\n        }\n\n        await this._googlePayPaymentProcessor.setExternalCheckoutForm(\n            this._getMethodId(),\n            response,\n            siteLink,\n        );\n    }\n\n    private _getMethodId(): keyof WithGooglePayCustomerInitializeOptions {\n        return guard(\n            this._methodId,\n            () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-payment-initialize-options.ts",
    "content": "import { GooglePayButtonColor, GooglePayButtonSizeMode, GooglePayButtonType } from './types';\n\n/**\n * A set of options that are required to initialize the GooglePay payment method\n *\n * If the customer chooses to pay with GooglePay, they will be asked to\n * enter their payment details via a modal. You can hook into events emitted by\n * the modal by providing the callbacks listed below.\n *\n * ```html\n * <!-- This is where the GooglePay button will be inserted -->\n * <div id=\"wallet-button\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     // Using GooglePay provided by Braintree as an example\n *     methodId: 'googlepaybraintree',\n *     googlepaybraintree: {\n *         walletButton: 'wallet-button'\n *     },\n * });\n * ```\n *\n * Additional event callbacks can be registered.\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'googlepaybraintree',\n *     googlepaybraintree: {\n *         walletButton: 'wallet-button',\n *         onError(error) {\n *             console.log(error);\n *         },\n *         onPaymentSelect() {\n *             console.log('Selected');\n *         },\n *     },\n * });\n * ```\n *\n * Alternatively, a container-based Google Pay button can be rendered directly\n * in the payment step (replacing the Place Order button):\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'googlepaybraintree',\n *     googlepaybraintree: {\n *         container: 'checkout-payment-continue',\n *         onInit(renderButton) {\n *             // Hide Place Order, then render the button once container is in DOM\n *             renderButton();\n *         },\n *         onError(error) {\n *             console.log(error);\n *         },\n *     },\n * });\n * ```\n */\nexport default interface GooglePayPaymentInitializeOptions {\n    /**\n     * A container for loading spinner.\n     */\n    loadingContainerId?: string;\n\n    /**\n     * This walletButton is used to set an event listener, provide an element ID if you want\n     * users to be able to launch the GooglePay wallet modal by clicking on a button.\n     * It should be an HTML element.\n     */\n    walletButton?: string;\n\n    /**\n     * The ID of the container element where the Google Pay button will be rendered.\n     * When provided, a branded Google Pay button is created inside this container.\n     * Clicking the button opens the Google Pay payment sheet and, on success, submits\n     * the order and redirects to the order confirmation page directly — no separate\n     * \"Place Order\" step is needed.\n     */\n    container?: string;\n\n    /**\n     * The color of the Google Pay button rendered into `container`.\n     * Defaults to `'default'`.\n     */\n    buttonColor?: GooglePayButtonColor;\n\n    /**\n     * The size mode of the Google Pay button rendered into `container`.\n     * Defaults to `'fill'`.\n     */\n    buttonSizeMode?: GooglePayButtonSizeMode;\n\n    /**\n     * The type/label of the Google Pay button rendered into `container`.\n     * Defaults to `'pay'`.\n     */\n    buttonType?: GooglePayButtonType;\n\n    /**\n     * Called after the Google Pay processor is fully initialized, with a\n     * `renderButton` function that — when invoked — creates the Google Pay\n     * button inside `container`.  Use this callback to control timing: hide\n     * the Place Order button first, then call `renderButton()` once the\n     * container element is present in the DOM.\n     *\n     * Only used when `container` is provided.\n     */\n    onInit?(renderButton: () => void): void;\n\n    /**\n     * A callback that gets called when GooglePay fails to initialize or\n     * selects a payment option.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error: Error): void;\n\n    /**\n     * A callback that gets called when the customer selects a payment option.\n     */\n    onPaymentSelect?(): void;\n}\n\n/**\n * The recognized keys to pass the initialization options for Google Pay.\n */\nexport enum GooglePayKey {\n    ADYEN_V2 = 'googlepayadyenv2',\n    ADYEN_V3 = 'googlepayadyenv3',\n    AUTHORIZE_NET = 'googlepayauthorizenet',\n    BNZ = 'googlepaybnz',\n    BRAINTREE = 'googlepaybraintree',\n    PAYPAL_COMMERCE = 'googlepaypaypalcommerce',\n    BIGCOMMERCE_PAYMENTS = 'googlepay_bigcommerce_payments',\n    CHECKOUT_COM = 'googlepaycheckoutcom',\n    CYBERSOURCE_V2 = 'googlepaycybersourcev2',\n    ORBITAL = 'googlepayorbital',\n    STRIPE = 'googlepaystripe',\n    STRIPE_UPE = 'googlepaystripeupe',\n    STRIPE_OCS = 'googlepaystripeocs',\n    WORLDPAY_ACCESS = 'googlepayworldpayaccess',\n    TD_ONLINE_MART = 'googlepaytdonlinemart',\n}\n\n/**\n * The options that are required to initialize the GooglePay payment method.\n * They can be omitted unless you need to support GooglePay.\n */\nexport type WithGooglePayPaymentInitializeOptions = {\n    [k in GooglePayKey]?: GooglePayPaymentInitializeOptions;\n};\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-payment-processor.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    NotInitializedError,\n    PaymentIntegrationService,\n    PaymentMethodFailedError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayGateway from './gateways/google-pay-gateway';\nimport GooglePayPaymentProcessor from './google-pay-payment-processor';\nimport GooglePayScriptLoader from './google-pay-script-loader';\nimport getCardDataResponse from './mocks/google-pay-card-data-response.mock';\nimport { getGeneric } from './mocks/google-pay-payment-method.mock';\nimport getGooglePaymentsClientMocks from './mocks/google-pay-payments-client.mock';\nimport {\n    GooglePayAdditionalActionProcessable,\n    GooglePayButtonOptions,\n    GooglePaymentsClient,\n} from './types';\n\ndescribe('GooglePayPaymentProcessor', () => {\n    let clientMocks: ReturnType<typeof getGooglePaymentsClientMocks>;\n    let paymentsClient: GooglePaymentsClient;\n    let scriptLoader: GooglePayScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let gateway: GooglePayGateway;\n    let requestSender: RequestSender;\n    let formPoster: FormPoster;\n    let processor: GooglePayPaymentProcessor;\n    const storeConfig = getConfig().storeConfig;\n    const storeConfigWithFeaturesOn = {\n        ...storeConfig,\n        checkoutSettings: {\n            ...storeConfig.checkoutSettings,\n            features: {\n                ...storeConfig.checkoutSettings.features,\n                'PI-4290.google_pay_require_shipping_address': true,\n            },\n        },\n    };\n\n    beforeEach(() => {\n        clientMocks = getGooglePaymentsClientMocks();\n        paymentsClient = clientMocks.paymentsClient;\n        scriptLoader = new GooglePayScriptLoader(createScriptLoader());\n        jest.spyOn(scriptLoader, 'getGooglePaymentsClient').mockResolvedValue(paymentsClient);\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        gateway = new GooglePayGateway('example', paymentIntegrationService);\n        jest.spyOn(gateway, 'initialize');\n        jest.spyOn(gateway, 'getCardParameters');\n        jest.spyOn(gateway, 'getPaymentGatewayParameters');\n        jest.spyOn(gateway, 'getTransactionInfo');\n        jest.spyOn(gateway, 'getMerchantInfo');\n        jest.spyOn(gateway, 'getRequiredData');\n        jest.spyOn(gateway, 'mapToExternalCheckoutData');\n        jest.spyOn(gateway, 'mapToBillingAddressRequestBody');\n        jest.spyOn(gateway, 'mapToShippingAddressRequestBody');\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfigWithFeaturesOn,\n        );\n\n        requestSender = createRequestSender();\n        jest.spyOn(requestSender, 'post').mockResolvedValue(getResponse(undefined));\n\n        formPoster = createFormPoster();\n        jest.spyOn(formPoster, 'postForm').mockImplementation((_url, _data, callback) => {\n            if (callback) {\n                return callback();\n            }\n        });\n\n        processor = new GooglePayPaymentProcessor(scriptLoader, gateway, requestSender, formPoster);\n    });\n\n    describe('#initialize', () => {\n        it('should initialize the processor', async () => {\n            const initialize = processor.initialize(getGeneric);\n\n            await expect(initialize).resolves.toBeUndefined();\n        });\n\n        it('should load google payments client', async () => {\n            await processor.initialize(getGeneric);\n\n            expect(scriptLoader.getGooglePaymentsClient).toHaveBeenCalledWith(true, undefined);\n        });\n\n        it('should initialize the gateway', async () => {\n            await processor.initialize(getGeneric);\n\n            expect(gateway.initialize).toHaveBeenCalledWith(getGeneric, undefined, undefined);\n        });\n\n        it('should build payloads', async () => {\n            await processor.initialize(getGeneric);\n\n            expect(gateway.getCardParameters).toHaveBeenCalled();\n        });\n    });\n\n    describe('#initializeWidget', () => {\n        it('should build payloads', async () => {\n            await processor.initialize(getGeneric);\n            await processor.initializeWidget();\n\n            expect(gateway.getPaymentGatewayParameters).toHaveBeenCalled();\n            expect(gateway.getTransactionInfo).toHaveBeenCalled();\n            expect(gateway.getMerchantInfo).toHaveBeenCalled();\n            expect(gateway.getRequiredData).toHaveBeenCalled();\n        });\n\n        it('should determine readiness to pay', async () => {\n            const expectedRequest = {\n                allowedPaymentMethods: [\n                    {\n                        parameters: {\n                            allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n                            allowedCardNetworks: ['AMEX', 'DISCOVER', 'JCB', 'VISA', 'MASTERCARD'],\n                            billingAddressParameters: { format: 'FULL', phoneNumberRequired: true },\n                            billingAddressRequired: true,\n                        },\n                        type: 'CARD',\n                    },\n                ],\n                apiVersion: 2,\n                apiVersionMinor: 0,\n            };\n\n            await processor.initialize(getGeneric);\n            await processor.initializeWidget();\n\n            expect(paymentsClient.isReadyToPay).toHaveBeenCalledWith(expectedRequest);\n        });\n\n        it('should prefetch google payment data', async () => {\n            const expectedRequest = {\n                allowedPaymentMethods: [\n                    {\n                        parameters: {\n                            allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n                            allowedCardNetworks: ['AMEX', 'DISCOVER', 'JCB', 'VISA', 'MASTERCARD'],\n                            billingAddressParameters: { format: 'FULL', phoneNumberRequired: true },\n                            billingAddressRequired: true,\n                        },\n                        tokenizationSpecification: {\n                            parameters: {\n                                gateway: 'example',\n                                gatewayMerchantId: 'exampleGatewayMerchantId',\n                            },\n                            type: 'PAYMENT_GATEWAY',\n                        },\n                        type: 'CARD',\n                    },\n                ],\n                apiVersion: 2,\n                apiVersionMinor: 0,\n                emailRequired: true,\n                merchantInfo: {\n                    authJwt: 'foo.bar.baz',\n                    merchantId: '12345678901234567890',\n                    merchantName: 'Example Merchant',\n                },\n                transactionInfo: {\n                    countryCode: 'US',\n                    currencyCode: 'USD',\n                    totalPrice: '0',\n                    totalPriceStatus: 'ESTIMATED',\n                },\n                offerInfo: {\n                    offers: [],\n                },\n                shippingAddressRequired: true,\n                shippingOptionRequired: true,\n                shippingAddressParameters: {\n                    phoneNumberRequired: true,\n                    allowedCountryCodes: ['AU', 'US', 'JP'],\n                },\n                callbackIntents: ['OFFER', 'SHIPPING_ADDRESS', 'SHIPPING_OPTION'],\n            };\n\n            await processor.initialize(getGeneric);\n            await processor.initializeWidget();\n\n            expect(paymentsClient.prefetchPaymentData).toHaveBeenCalledWith(expectedRequest);\n        });\n\n        it('should prefetch google payment data with shipping address', async () => {\n            const expectedRequest = expect.objectContaining({\n                shippingAddressRequired: true,\n                shippingAddressParameters: {\n                    phoneNumberRequired: true,\n                    allowedCountryCodes: ['AU', 'US', 'JP'],\n                },\n            });\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getShippingAddress',\n            ).mockReturnValueOnce(undefined);\n\n            await processor.initialize(getGeneric);\n            await processor.initializeWidget();\n\n            expect(paymentsClient.prefetchPaymentData).toHaveBeenCalledWith(expectedRequest);\n        });\n\n        it('should update the transaction info', async () => {\n            await processor.initialize(getGeneric);\n            await processor.initializeWidget();\n\n            expect(gateway.getTransactionInfo).toHaveBeenCalledTimes(2);\n        });\n\n        describe('should fail if:', () => {\n            test('google pay is not supported', async () => {\n                jest.spyOn(paymentsClient, 'isReadyToPay').mockResolvedValue({ result: false });\n\n                await processor.initialize(getGeneric);\n\n                const initializeWidget = processor.initializeWidget();\n\n                await expect(initializeWidget).rejects.toThrow(\n                    'Google Pay is not supported by the current device and browser, please try another payment method.',\n                );\n            });\n\n            test('google pay encounters an error', async () => {\n                jest.spyOn(paymentsClient, 'isReadyToPay').mockRejectedValue(\n                    new Error('Developer error!'),\n                );\n\n                await processor.initialize(getGeneric);\n\n                const initializeWidget = processor.initializeWidget();\n\n                await expect(initializeWidget).rejects.toThrow(PaymentMethodFailedError);\n            });\n        });\n    });\n\n    describe('#addPaymentButton', () => {\n        const CONTAINER_ID = 'my_awesome_google_pay_button_container';\n        let buttonOptions: Omit<GooglePayButtonOptions, 'allowedPaymentMethods'>;\n        let container: HTMLDivElement;\n\n        beforeAll(() => {\n            buttonOptions = {\n                onClick: jest.fn(),\n            };\n\n            container = document.createElement('div');\n\n            jest.spyOn(container, 'appendChild');\n\n            container.id = CONTAINER_ID;\n            document.body.appendChild(container);\n        });\n\n        it('should add payment button', async () => {\n            await processor.initialize(getGeneric);\n\n            expect(processor.addPaymentButton(CONTAINER_ID, buttonOptions)).toBe(\n                clientMocks.button,\n            );\n        });\n\n        it('should create payment button', async () => {\n            const expectedOptions = {\n                allowedPaymentMethods: [\n                    {\n                        parameters: {\n                            allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n                            allowedCardNetworks: ['AMEX', 'DISCOVER', 'JCB', 'VISA', 'MASTERCARD'],\n                            billingAddressParameters: { format: 'FULL', phoneNumberRequired: true },\n                            billingAddressRequired: true,\n                        },\n                        type: 'CARD',\n                    },\n                ],\n                ...buttonOptions,\n            };\n\n            await processor.initialize(getGeneric);\n            processor.addPaymentButton(CONTAINER_ID, buttonOptions);\n\n            expect(paymentsClient.createButton).toHaveBeenCalledWith(expectedOptions);\n        });\n\n        it('should append payment button', async () => {\n            await processor.initialize(getGeneric);\n            processor.addPaymentButton(CONTAINER_ID, buttonOptions);\n\n            expect(container.appendChild).toHaveBeenCalledWith(clientMocks.button);\n        });\n\n        describe('should not mount button if:', () => {\n            test('an invalid container is provided', async () => {\n                await processor.initialize(getGeneric);\n\n                expect(\n                    processor.addPaymentButton('wrong_container_id', buttonOptions),\n                ).toBeUndefined();\n            });\n\n            test('not initialized', () => {\n                const addPaymentButton = () =>\n                    processor.addPaymentButton(CONTAINER_ID, buttonOptions);\n\n                expect(addPaymentButton).toThrow(NotInitializedError);\n            });\n        });\n    });\n\n    describe('#showPaymentSheet', () => {\n        it('should show the payment sheet', async () => {\n            await processor.initialize(getGeneric);\n            await processor.initializeWidget();\n\n            await expect(processor.showPaymentSheet()).resolves.toBe(clientMocks.cardDataResponse);\n        });\n\n        it('should load google payment data', async () => {\n            const expectedRequest = {\n                allowedPaymentMethods: [\n                    {\n                        parameters: {\n                            allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n                            allowedCardNetworks: ['AMEX', 'DISCOVER', 'JCB', 'VISA', 'MASTERCARD'],\n                            billingAddressParameters: { format: 'FULL', phoneNumberRequired: true },\n                            billingAddressRequired: true,\n                        },\n                        tokenizationSpecification: {\n                            parameters: {\n                                gateway: 'example',\n                                gatewayMerchantId: 'exampleGatewayMerchantId',\n                            },\n                            type: 'PAYMENT_GATEWAY',\n                        },\n                        type: 'CARD',\n                    },\n                ],\n                apiVersion: 2,\n                apiVersionMinor: 0,\n                emailRequired: true,\n                merchantInfo: {\n                    authJwt: 'foo.bar.baz',\n                    merchantId: '12345678901234567890',\n                    merchantName: 'Example Merchant',\n                },\n                offerInfo: {\n                    offers: [],\n                },\n                transactionInfo: {\n                    countryCode: 'US',\n                    currencyCode: 'USD',\n                    totalPrice: '0',\n                    totalPriceStatus: 'ESTIMATED',\n                },\n                shippingAddressRequired: true,\n                shippingOptionRequired: true,\n                shippingAddressParameters: {\n                    phoneNumberRequired: true,\n                    allowedCountryCodes: ['AU', 'US', 'JP'],\n                },\n                callbackIntents: ['OFFER', 'SHIPPING_ADDRESS', 'SHIPPING_OPTION'],\n            };\n\n            await processor.initialize(getGeneric);\n            await processor.initializeWidget();\n            await processor.showPaymentSheet();\n\n            expect(paymentsClient.loadPaymentData).toHaveBeenCalledWith(expectedRequest);\n        });\n\n        it('should load payment data with shipping address', async () => {\n            const expectedRequest = expect.objectContaining({\n                shippingAddressRequired: true,\n                shippingAddressParameters: {\n                    phoneNumberRequired: true,\n                    allowedCountryCodes: ['AU', 'US', 'JP'],\n                },\n            });\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getShippingAddress',\n            ).mockReturnValueOnce(undefined);\n\n            await processor.initialize(getGeneric);\n            await processor.initializeWidget();\n            await processor.showPaymentSheet();\n\n            expect(paymentsClient.loadPaymentData).toHaveBeenCalledWith(expectedRequest);\n        });\n\n        describe('should fail if:', () => {\n            test('not initialized', async () => {\n                const showPaymentSheet = processor.showPaymentSheet();\n\n                await expect(showPaymentSheet).rejects.toThrow(NotInitializedError);\n            });\n        });\n    });\n\n    describe('#setExternalCheckoutXhr', () => {\n        it('should set external checkout', async () => {\n            const setExternalCheckout = processor.setExternalCheckoutXhr(\n                'example',\n                getCardDataResponse(),\n            );\n\n            await expect(setExternalCheckout).resolves.toBeUndefined();\n        });\n\n        it('should map response to external checkout data', async () => {\n            const response = getCardDataResponse();\n\n            await processor.setExternalCheckoutXhr('example', response);\n\n            expect(gateway.mapToExternalCheckoutData).toHaveBeenCalledWith(response);\n        });\n\n        it('should send request', async () => {\n            const response = getCardDataResponse();\n\n            await processor.setExternalCheckoutXhr('example', response);\n\n            expect(requestSender.post).toHaveBeenCalledWith('/checkout.php', {\n                headers: {\n                    Accept: 'text/html',\n                    'Content-Type': 'application/x-www-form-urlencoded',\n                    'X-Checkout-SDK-Version': '1.0.0',\n                },\n                body: {\n                    action: 'set_external_checkout',\n                    provider: 'example',\n                    nonce: '{\"signature\":\"foo\",\"protocolVersion\":\"ECv1\",\"signedMessage\":{\"encryptedMessage\":\"bar\",\"ephemeralPublicKey\":\"baz\",\"tag\":\"foobar\"}}',\n                    card_information: {\n                        type: 'VISA',\n                        number: '1111',\n                    },\n                },\n            });\n        });\n    });\n\n    describe('#setExternalCheckoutForm', () => {\n        it('should set external checkout', async () => {\n            const setExternalCheckout = processor.setExternalCheckoutForm(\n                'example',\n                getCardDataResponse(),\n            );\n\n            await expect(setExternalCheckout).resolves.toBeUndefined();\n        });\n\n        it('should map response to external checkout data', async () => {\n            const response = getCardDataResponse();\n\n            await processor.setExternalCheckoutForm('example', response);\n\n            expect(gateway.mapToExternalCheckoutData).toHaveBeenCalledWith(response);\n        });\n\n        it('should post form', async () => {\n            const response = getCardDataResponse();\n\n            await processor.setExternalCheckoutForm('example', response);\n\n            expect(formPoster.postForm).toHaveBeenCalledWith(\n                '/checkout.php',\n                {\n                    action: 'set_external_checkout',\n                    provider: 'example',\n                    nonce: '{\"signature\":\"foo\",\"protocolVersion\":\"ECv1\",\"signedMessage\":{\"encryptedMessage\":\"bar\",\"ephemeralPublicKey\":\"baz\",\"tag\":\"foobar\"}}',\n                    card_information: JSON.stringify({\n                        type: 'VISA',\n                        number: '1111',\n                    }),\n                },\n                expect.any(Function),\n            );\n        });\n\n        it('should post form to siteLike', async () => {\n            const response = getCardDataResponse();\n\n            await processor.setExternalCheckoutForm('example', response, 'https://example.com');\n\n            expect(formPoster.postForm).toHaveBeenCalledWith(\n                'https://example.com/checkout',\n                expect.anything(),\n                expect.anything(),\n            );\n        });\n    });\n\n    describe('#mapToBillingAddressRequestBody', () => {\n        it('should delegate the work to the gateway', () => {\n            const response = getCardDataResponse();\n\n            processor.mapToBillingAddressRequestBody(response);\n\n            expect(gateway.mapToBillingAddressRequestBody).toHaveBeenCalledWith(response);\n        });\n    });\n\n    describe('#mapToShippingAddressRequestBody', () => {\n        it('should delegate the work to the gateway', () => {\n            const response = getCardDataResponse();\n\n            processor.mapToShippingAddressRequestBody(response);\n\n            expect(gateway.mapToShippingAddressRequestBody).toHaveBeenCalledWith(response);\n        });\n    });\n\n    describe('#processAdditionalAction', () => {\n        it('should delegate the work to the gateway', async () => {\n            const myGateway = new (class\n                extends GooglePayGateway\n                implements GooglePayAdditionalActionProcessable\n            {\n                processAdditionalAction() {\n                    return Promise.resolve();\n                }\n            })('example', paymentIntegrationService);\n\n            jest.spyOn(myGateway, 'processAdditionalAction');\n            processor = new GooglePayPaymentProcessor(\n                scriptLoader,\n                myGateway,\n                requestSender,\n                formPoster,\n            );\n\n            const processError = processor.processAdditionalAction('error', 'someMethodId');\n\n            await expect(processError).resolves.toBeUndefined();\n            expect(myGateway.processAdditionalAction).toHaveBeenCalledWith('error', 'someMethodId');\n        });\n\n        it('should reject the error', async () => {\n            const processError = processor.processAdditionalAction('error');\n\n            await expect(processError).rejects.toBe('error');\n        });\n    });\n\n    describe('#isWebViewWithRestrictions', () => {\n        it('should delegate to the gateway', async () => {\n            jest.spyOn(gateway, 'isWebViewWithRestrictions').mockReturnValue(true);\n\n            await processor.initialize(getGeneric);\n\n            expect(processor.isWebViewWithRestrictions()).toBe(true);\n            expect(gateway.isWebViewWithRestrictions).toHaveBeenCalled();\n        });\n\n        it('should return false when gateway returns false', async () => {\n            jest.spyOn(gateway, 'isWebViewWithRestrictions').mockReturnValue(false);\n\n            await processor.initialize(getGeneric);\n\n            expect(processor.isWebViewWithRestrictions()).toBe(false);\n        });\n    });\n\n    describe('#setIsWebViewExperimentOn', () => {\n        it('should delegate to the gateway', async () => {\n            jest.spyOn(gateway, 'setIsWebViewExperimentOn');\n\n            await processor.initialize(getGeneric);\n\n            processor.setIsWebViewExperimentOn(true);\n\n            expect(gateway.setIsWebViewExperimentOn).toHaveBeenCalledWith(true);\n        });\n\n        it('should delegate false value to the gateway', async () => {\n            jest.spyOn(gateway, 'setIsWebViewExperimentOn');\n\n            await processor.initialize(getGeneric);\n\n            processor.setIsWebViewExperimentOn(false);\n\n            expect(gateway.setIsWebViewExperimentOn).toHaveBeenCalledWith(false);\n        });\n    });\n\n    describe('#initializeWidget in WebView', () => {\n        it('should build payment data request with shippingOptionRequired false when in webview', async () => {\n            jest.spyOn(gateway, 'isWebViewWithRestrictions').mockReturnValue(true);\n\n            await processor.initialize(getGeneric);\n            await processor.initializeWidget();\n\n            const prefetchCall = (paymentsClient.prefetchPaymentData as jest.Mock).mock.calls[0][0];\n\n            expect(prefetchCall).toEqual(\n                expect.objectContaining({\n                    shippingOptionRequired: false,\n                }),\n            );\n            expect(prefetchCall).not.toHaveProperty('callbackIntents');\n            expect(prefetchCall).not.toHaveProperty('offerInfo');\n        });\n\n        it('should build payment data request with callbackIntents and offerInfo when not in webview', async () => {\n            jest.spyOn(gateway, 'isWebViewWithRestrictions').mockReturnValue(false);\n\n            await processor.initialize(getGeneric);\n            await processor.initializeWidget();\n\n            const prefetchCall = (paymentsClient.prefetchPaymentData as jest.Mock).mock.calls[0][0];\n\n            expect(prefetchCall).toEqual(\n                expect.objectContaining({\n                    callbackIntents: expect.any(Array),\n                    offerInfo: expect.any(Object),\n                    shippingOptionRequired: true,\n                }),\n            );\n        });\n\n        it('should load payment data with shippingOptionRequired false in webview on showPaymentSheet', async () => {\n            jest.spyOn(gateway, 'isWebViewWithRestrictions').mockReturnValue(true);\n\n            await processor.initialize(getGeneric);\n            await processor.initializeWidget();\n            await processor.showPaymentSheet();\n\n            const loadCall = (paymentsClient.loadPaymentData as jest.Mock).mock.calls[0][0];\n\n            expect(loadCall).toEqual(\n                expect.objectContaining({\n                    shippingOptionRequired: false,\n                }),\n            );\n            expect(loadCall).not.toHaveProperty('callbackIntents');\n            expect(loadCall).not.toHaveProperty('offerInfo');\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-payment-processor.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    AddressRequestBody,\n    BillingAddressRequestBody,\n    guard,\n    NotInitializedError,\n    NotInitializedErrorType,\n    Omit,\n    PaymentMethod,\n    PaymentMethodFailedError,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayGateway from './gateways/google-pay-gateway';\nimport GooglePayScriptLoader from './google-pay-script-loader';\nimport isGooglePayAdditionalActionProcessable from './guards/is-google-pay-additional-action-processable';\nimport {\n    GooglePayBaseCardPaymentMethod,\n    GooglePayButtonOptions,\n    GooglePayCardDataResponse,\n    GooglePayCardPaymentMethod,\n    GooglePayFullBillingAddress,\n    GooglePayGatewayBaseRequest,\n    GooglePayInitializationData,\n    GooglePayIsReadyToPayRequest,\n    GooglePaymentsClient,\n    GooglePayPaymentDataRequest,\n    GooglePayPaymentOptions,\n    HandleCouponsOut,\n    IntermediatePaymentData,\n    ShippingOptionParameters,\n} from './types';\n\nexport default class GooglePayPaymentProcessor {\n    private _paymentsClient?: GooglePaymentsClient;\n    private _baseRequest: GooglePayGatewayBaseRequest = { apiVersion: 2, apiVersionMinor: 0 };\n    private _baseCardPaymentMethod?: GooglePayBaseCardPaymentMethod;\n    private _cardPaymentMethod?: GooglePayCardPaymentMethod;\n    private _paymentDataRequest?: GooglePayPaymentDataRequest;\n    private _isReadyToPayRequest?: GooglePayIsReadyToPayRequest;\n\n    constructor(\n        private _scriptLoader: GooglePayScriptLoader,\n        private _gateway: GooglePayGateway,\n        private _requestSender: RequestSender,\n        private _formPoster: FormPoster,\n    ) {}\n\n    async initialize(\n        getPaymentMethod: () => PaymentMethod<GooglePayInitializationData>,\n        googlePayPaymentOptions?: GooglePayPaymentOptions,\n        isBuyNowFlow?: boolean,\n        currencyCode?: string,\n    ): Promise<void> {\n        this._paymentsClient = await this._scriptLoader.getGooglePaymentsClient(\n            getPaymentMethod().config.testMode,\n            googlePayPaymentOptions,\n        );\n\n        await this._gateway.initialize(getPaymentMethod, isBuyNowFlow, currencyCode);\n\n        this._buildButtonPayloads();\n    }\n\n    async initializeWidget() {\n        await this._buildWidgetPayloads();\n\n        await this._determineReadinessToPay();\n\n        this._prefetchGooglePaymentData();\n    }\n\n    getNonce(methodId: string) {\n        return this._gateway.getNonce(methodId);\n    }\n\n    async extraPaymentData() {\n        return this._gateway.extraPaymentData();\n    }\n\n    addPaymentButton(\n        containerId: string,\n        options: Omit<GooglePayButtonOptions, 'allowedPaymentMethods'>,\n    ): HTMLElement | undefined {\n        const container = document.querySelector<HTMLElement>(`#${containerId}`);\n\n        if (!container) {\n            return;\n        }\n\n        const paymentButton = this._getPaymentsClient().createButton({\n            ...options,\n            allowedPaymentMethods: [this._getBaseCardPaymentMethod()],\n        });\n\n        return container.appendChild(paymentButton);\n    }\n\n    async showPaymentSheet(): Promise<GooglePayCardDataResponse> {\n        const paymentDataRequest = this._getPaymentDataRequest();\n\n        return this._getPaymentsClient().loadPaymentData(paymentDataRequest);\n    }\n\n    async setExternalCheckoutXhr(\n        provider: string,\n        response: GooglePayCardDataResponse,\n    ): Promise<void> {\n        return this._setExternalCheckout(provider, response);\n    }\n\n    async setExternalCheckoutForm(\n        provider: string,\n        response: GooglePayCardDataResponse,\n        siteLink?: string,\n    ): Promise<void> {\n        return this._setExternalCheckout(provider, response, true, siteLink);\n    }\n\n    mapToBillingAddressRequestBody(\n        response: GooglePayCardDataResponse,\n    ): BillingAddressRequestBody | undefined {\n        return this._gateway.mapToBillingAddressRequestBody(response);\n    }\n\n    mapToShippingAddressRequestBody(\n        response: GooglePayCardDataResponse,\n    ): AddressRequestBody | undefined {\n        return this._gateway.mapToShippingAddressRequestBody(response);\n    }\n\n    processAdditionalAction(error: unknown, methodId?: string): Promise<void> {\n        return isGooglePayAdditionalActionProcessable(this._gateway)\n            ? this._gateway.processAdditionalAction(error, methodId)\n            : Promise.reject(error);\n    }\n\n    async signOut(providerId: string): Promise<void> {\n        await this._requestSender.get(`/remote-checkout/${providerId}/signout`);\n    }\n\n    getCallbackTriggers() {\n        return this._gateway.getCallbackTriggers();\n    }\n\n    setShouldRequestShipping(isRequired: boolean): void {\n        return this._gateway.setShouldRequestShipping(isRequired);\n    }\n\n    async handleShippingAddressChange(\n        shippingAddress: GooglePayFullBillingAddress,\n    ): Promise<ShippingOptionParameters | undefined> {\n        return this._gateway.handleShippingAddressChange(shippingAddress);\n    }\n\n    async handleShippingOptionChange(optionId: string): Promise<void> {\n        await this._gateway.handleShippingOptionChange(optionId);\n    }\n\n    async handleCoupons(\n        offerData: IntermediatePaymentData['offerData'],\n    ): Promise<HandleCouponsOut> {\n        return this._gateway.handleCoupons(offerData);\n    }\n\n    getTotalPrice(): string {\n        return this._gateway.getTotalPrice();\n    }\n\n    async _setExternalCheckout(\n        provider: string,\n        response: GooglePayCardDataResponse,\n        useFormPoster = false,\n        siteLink?: string,\n    ): Promise<void> {\n        const url = '/checkout.php';\n        const body = {\n            action: 'set_external_checkout',\n            provider,\n            ...(await this._gateway.mapToExternalCheckoutData(response)),\n        };\n\n        if (useFormPoster) {\n            return new Promise((resolve) => {\n                this._formPoster.postForm(\n                    siteLink ? `${siteLink}/checkout` : url,\n                    {\n                        ...body,\n                        card_information: JSON.stringify(body.card_information),\n                    },\n                    resolve,\n                );\n            });\n        }\n\n        await this._requestSender.post(url, {\n            headers: {\n                Accept: 'text/html',\n                'Content-Type': 'application/x-www-form-urlencoded',\n                ...SDK_VERSION_HEADERS,\n            },\n            body,\n        });\n    }\n\n    isWebViewWithRestrictions(): boolean {\n        return this._gateway.isWebViewWithRestrictions();\n    }\n\n    setIsWebViewExperimentOn(isWebViewExperimentOn: boolean): void {\n        return this._gateway.setIsWebViewExperimentOn(isWebViewExperimentOn);\n    }\n\n    private _prefetchGooglePaymentData(): void {\n        const paymentDataRequest = this._getPaymentDataRequest();\n\n        paymentDataRequest.transactionInfo = this._gateway.getTransactionInfo();\n\n        this._getPaymentsClient().prefetchPaymentData(paymentDataRequest);\n    }\n\n    private async _determineReadinessToPay(): Promise<void> {\n        try {\n            const { result } = await this._getPaymentsClient().isReadyToPay(\n                this._getIsReadyToPayRequest(),\n            );\n\n            if (result === false) {\n                throw new PaymentMethodFailedError(\n                    'Google Pay is not supported by the current device and browser, please try another payment method.',\n                );\n            }\n        } catch (error) {\n            if (error instanceof PaymentMethodFailedError) {\n                throw error;\n            }\n\n            throw new PaymentMethodFailedError();\n        }\n    }\n\n    private _buildButtonPayloads() {\n        this._baseCardPaymentMethod = {\n            type: 'CARD',\n            parameters: this._gateway.getCardParameters(),\n        };\n    }\n\n    private async _buildWidgetPayloads(): Promise<void> {\n        const baseCardPaymentMethod = this._getBaseCardPaymentMethod();\n\n        this._cardPaymentMethod = {\n            ...baseCardPaymentMethod,\n            tokenizationSpecification: {\n                type: 'PAYMENT_GATEWAY',\n                parameters: await this._gateway.getPaymentGatewayParameters(),\n            },\n        };\n\n        const isWebViewLogic = this._gateway.isWebViewWithRestrictions()\n            ? {\n                  shippingOptionRequired: false,\n              }\n            : {\n                  callbackIntents: this._gateway.getCallbackIntents(),\n                  offerInfo: this._gateway.getAppliedCoupons(),\n              };\n\n        this._paymentDataRequest = {\n            ...this._baseRequest,\n            allowedPaymentMethods: [this._cardPaymentMethod],\n            transactionInfo: this._gateway.getTransactionInfo(),\n            merchantInfo: this._gateway.getMerchantInfo(),\n            ...(await this._gateway.getRequiredData()),\n            ...isWebViewLogic,\n        };\n        this._isReadyToPayRequest = {\n            ...this._baseRequest,\n            allowedPaymentMethods: [baseCardPaymentMethod],\n        };\n    }\n\n    private _getBaseCardPaymentMethod(): GooglePayBaseCardPaymentMethod {\n        return this._getOrThrow(this._baseCardPaymentMethod);\n    }\n\n    private _getPaymentDataRequest(): GooglePayPaymentDataRequest {\n        return this._getOrThrow(this._paymentDataRequest);\n    }\n\n    private _getIsReadyToPayRequest(): GooglePayIsReadyToPayRequest {\n        return this._getOrThrow(this._isReadyToPayRequest);\n    }\n\n    private _getPaymentsClient(): GooglePaymentsClient {\n        return this._getOrThrow(this._paymentsClient);\n    }\n\n    private _getOrThrow<T>(value?: T): T {\n        return guard(\n            value,\n            () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-payment-strategy.spec.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\nimport { EventEmitter } from 'events';\n\nimport {\n    BillingAddressRequestBody,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    getCheckout,\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayGateway from './gateways/google-pay-gateway';\nimport { WithGooglePayPaymentInitializeOptions } from './google-pay-payment-initialize-options';\nimport GooglePayPaymentProcessor from './google-pay-payment-processor';\nimport GooglePayPaymentStrategy from './google-pay-payment-strategy';\nimport GooglePayScriptLoader from './google-pay-script-loader';\nimport getCardDataResponse from './mocks/google-pay-card-data-response.mock';\nimport { getGeneric } from './mocks/google-pay-payment-method.mock';\nimport getGooglePaymentsClientMocks from './mocks/google-pay-payments-client.mock';\nimport { createInitializeImplementationMock } from './mocks/google-pay-processor-initialize.mock';\nimport {\n    CallbackTriggerType,\n    ErrorReasonType,\n    GooglePayErrorObject,\n    GooglePayInitializationData,\n    GooglePaymentsClient,\n    NewTransactionInfo,\n} from './types';\n\nconst LoadingShow = jest.fn();\nconst LoadingHide = jest.fn();\n\njest.mock('@bigcommerce/checkout-sdk/ui', () => ({\n    LoadingIndicator: jest.fn().mockImplementation(() => ({\n        show: LoadingShow,\n        hide: LoadingHide,\n    })),\n}));\n\ndescribe('GooglePayPaymentStrategy', () => {\n    const BUTTON_ID = 'my_awesome_google_pay_button';\n\n    let clientMocks: ReturnType<typeof getGooglePaymentsClientMocks>;\n    let paymentsClient: GooglePaymentsClient;\n    let scriptLoader: GooglePayScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let processor: GooglePayPaymentProcessor;\n    let strategy: GooglePayPaymentStrategy;\n    let options: PaymentInitializeOptions & WithGooglePayPaymentInitializeOptions;\n    let button: HTMLDivElement;\n    let eventEmitter: EventEmitter;\n    const storeConfig = getConfig().storeConfig;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        eventEmitter = new EventEmitter();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getGeneric(),\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfig,\n        );\n\n        clientMocks = getGooglePaymentsClientMocks();\n        paymentsClient = clientMocks.paymentsClient;\n        scriptLoader = new GooglePayScriptLoader(createScriptLoader());\n        jest.spyOn(scriptLoader, 'getGooglePaymentsClient').mockResolvedValue(paymentsClient);\n\n        processor = new GooglePayPaymentProcessor(\n            scriptLoader,\n            new GooglePayGateway('example', paymentIntegrationService),\n            createRequestSender(),\n            createFormPoster(),\n        );\n        jest.spyOn(processor, 'initialize').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'initializeWidget').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'processAdditionalAction').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'showPaymentSheet').mockResolvedValue(getCardDataResponse());\n        jest.spyOn(processor, 'setExternalCheckoutXhr').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'getNonce').mockResolvedValue('abc.123.xyz');\n        jest.spyOn(processor, 'handleCoupons').mockResolvedValue({\n            newOfferInfo: {\n                offers: [{ description: 'Coupon description', redemptionCode: 'code' }],\n            },\n        });\n        strategy = new GooglePayPaymentStrategy(paymentIntegrationService, processor);\n\n        options = {\n            methodId: 'googlepayworldpayaccess',\n            googlepayworldpayaccess: {\n                loadingContainerId: 'id',\n                walletButton: BUTTON_ID,\n                onError: jest.fn(),\n                onPaymentSelect: jest.fn(),\n            },\n        };\n    });\n\n    beforeAll(() => {\n        button = document.createElement('div');\n\n        button.id = BUTTON_ID;\n\n        document.body.appendChild(button);\n\n        jest.spyOn(button, 'addEventListener');\n        jest.spyOn(button, 'removeEventListener');\n    });\n\n    afterEach(() => {\n        (button.addEventListener as jest.Mock).mockClear();\n        (button.removeEventListener as jest.Mock).mockClear();\n    });\n\n    describe('#initialize', () => {\n        it('should initialize the strategy', async () => {\n            const initialize = strategy.initialize(options);\n            const initializeWidgetMock = jest.spyOn(processor, 'initializeWidget');\n\n            await expect(initialize).resolves.toBeUndefined();\n            expect(initializeWidgetMock).not.toHaveBeenCalled();\n        });\n\n        it('should initialize processor', async () => {\n            const getPaymentMethod = () =>\n                (\n                    (processor.initialize as jest.Mock).mock\n                        .calls[0][0] as () => PaymentMethod<GooglePayInitializationData>\n                )();\n            const paymentMethod = getGeneric();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            await strategy.initialize(options);\n\n            expect(getPaymentMethod()).toBe(paymentMethod);\n        });\n\n        it('should bind payment button', async () => {\n            await strategy.initialize(options);\n\n            expect(button.addEventListener).toHaveBeenCalledWith('click', expect.any(Function));\n        });\n\n        it('should bind payment button once', async () => {\n            await strategy.initialize(options);\n            await strategy.initialize(options);\n\n            expect(button.addEventListener).toHaveBeenCalledTimes(1);\n        });\n\n        describe('should fail if:', () => {\n            test('options is missing', async () => {\n                const initialize = strategy.initialize();\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('methodId is empty', async () => {\n                options.methodId = '';\n\n                const initialize = strategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('methodId is not a google pay key', async () => {\n                options.methodId = 'foo';\n\n                const initialize = strategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('googlePayOptions is missing', async () => {\n                delete options.googlepayworldpayaccess;\n\n                const initialize = strategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('walletButton is missing', async () => {\n                options.googlepayworldpayaccess = {};\n\n                const initialize = strategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('walletButton is empty', async () => {\n                options.googlepayworldpayaccess = {\n                    walletButton: '',\n                };\n\n                const initialize = strategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('container is empty', async () => {\n                options.googlepayworldpayaccess = {\n                    container: '',\n                };\n\n                const initialize = strategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n            });\n        });\n    });\n\n    describe('#initialize with WebView', () => {\n        it('should call setIsWebViewExperimentOn with true when initializationData has it enabled', async () => {\n            const paymentMethod = {\n                ...getGeneric(),\n                initializationData: {\n                    ...getGeneric().initializationData,\n                    isWebViewExperimentOn: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            jest.spyOn(processor, 'setIsWebViewExperimentOn');\n\n            await strategy.initialize(options);\n\n            expect(processor.setIsWebViewExperimentOn).toHaveBeenCalledWith(true);\n        });\n\n        it('should call setIsWebViewExperimentOn with false when initializationData has it disabled', async () => {\n            const paymentMethod = {\n                ...getGeneric(),\n                initializationData: {\n                    ...getGeneric().initializationData,\n                    isWebViewExperimentOn: false,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            jest.spyOn(processor, 'setIsWebViewExperimentOn');\n\n            await strategy.initialize(options);\n\n            expect(processor.setIsWebViewExperimentOn).toHaveBeenCalledWith(false);\n        });\n\n        it('should call setIsWebViewExperimentOn with false when isWebViewExperimentOn is undefined', async () => {\n            const paymentMethod = {\n                ...getGeneric(),\n                initializationData: {\n                    ...getGeneric().initializationData,\n                    isWebViewExperimentOn: undefined,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            jest.spyOn(processor, 'setIsWebViewExperimentOn');\n\n            await strategy.initialize(options);\n\n            expect(processor.setIsWebViewExperimentOn).toHaveBeenCalledWith(false);\n        });\n\n        it('should call setIsWebViewExperimentOn before processor.initialize', async () => {\n            const callOrder: string[] = [];\n\n            jest.spyOn(processor, 'setIsWebViewExperimentOn').mockImplementation(() => {\n                callOrder.push('setIsWebViewExperimentOn');\n            });\n\n            jest.spyOn(processor, 'initialize').mockImplementation(() => {\n                callOrder.push('initialize');\n            });\n\n            await strategy.initialize(options);\n\n            expect(callOrder).toStrictEqual(['setIsWebViewExperimentOn', 'initialize']);\n        });\n    });\n\n    describe('#getGooglePayClientOptions with WebView', () => {\n        it('should initialize processor without paymentDataCallbacks when in webview', async () => {\n            jest.spyOn(processor, 'isWebViewWithRestrictions').mockReturnValue(true);\n\n            await strategy.initialize(options);\n\n            expect(processor.initialize).toHaveBeenCalledWith(expect.any(Function), {});\n        });\n\n        it('should initialize processor with paymentDataCallbacks when not in webview', async () => {\n            jest.spyOn(processor, 'isWebViewWithRestrictions').mockReturnValue(false);\n\n            await strategy.initialize(options);\n\n            expect(processor.initialize).toHaveBeenCalledWith(\n                expect.any(Function),\n                expect.objectContaining({\n                    paymentDataCallbacks: expect.objectContaining({\n                        onPaymentDataChanged: expect.any(Function),\n                    }),\n                }),\n            );\n        });\n    });\n\n    describe('#execute', () => {\n        let payload: OrderRequestBody;\n\n        beforeEach(async () => {\n            payload = {\n                payment: {\n                    methodId: 'example',\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getGeneric(),\n                initializationData: {\n                    ...getGeneric().initializationData,\n                    nonce: 'abc.123.xyz',\n                },\n            });\n\n            await strategy.initialize(options);\n        });\n\n        it('should execute the strategy', async () => {\n            const execute = strategy.execute(payload);\n\n            await expect(execute).resolves.toBeUndefined();\n        });\n\n        it('should call getPaymentMethodOrThrow', async () => {\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.getState().getPaymentMethodOrThrow).toHaveBeenCalled();\n        });\n\n        it('should submit the order', async () => {\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('should submit the payment', async () => {\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: 'example',\n                paymentData: {\n                    nonce: 'abc.123.xyz',\n                },\n            });\n        });\n\n        it('should process additional action', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue('error');\n\n            await strategy.execute(payload);\n\n            expect(processor.processAdditionalAction).toHaveBeenCalledWith('error', 'example');\n        });\n\n        describe('should fail if:', () => {\n            test('payment is missing', async () => {\n                const execute = strategy.execute({});\n\n                await expect(execute).rejects.toThrow(PaymentArgumentInvalidError);\n            });\n\n            test('methodId is empty', async () => {\n                const execute = strategy.execute({\n                    payment: {\n                        methodId: '',\n                    },\n                });\n\n                await expect(execute).rejects.toThrow(PaymentArgumentInvalidError);\n            });\n\n            test('nonce is missing', async () => {\n                jest.spyOn(processor, 'getNonce').mockRejectedValue(\n                    new MissingDataError(MissingDataErrorType.MissingConsignments),\n                );\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getGeneric());\n\n                await expect(strategy.execute(payload)).rejects.toThrow(MissingDataError);\n            });\n        });\n    });\n\n    describe('#handleClick', () => {\n        const internalError = new Error('internal error');\n\n        const createInitializeWidgetMock = (error?: unknown) =>\n            jest.spyOn(processor, 'initializeWidget').mockImplementation(\n                error\n                    ? () => {\n                          throw error;\n                      }\n                    : undefined,\n            );\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('triggers onError callback on wallet button click', async () => {\n            const rejectedInitializeWidgetMock = createInitializeWidgetMock(internalError);\n\n            await strategy.initialize(options);\n\n            button.click();\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(LoadingHide).toHaveBeenCalled();\n            expect(rejectedInitializeWidgetMock).toHaveBeenCalledTimes(1);\n            expect(options.googlepayworldpayaccess?.onError).toHaveBeenCalled();\n        });\n\n        describe('#getGooglePayClientOptions', () => {\n            let mockReturnedPaymentDataChangedValue: NewTransactionInfo;\n\n            beforeEach(() => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getStoreConfigOrThrow',\n                ).mockReturnValue(storeConfig);\n                jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                    getCart(),\n                );\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getCheckoutOrThrow',\n                ).mockReturnValue(getCheckout());\n\n                const initializeMock = createInitializeImplementationMock(\n                    eventEmitter,\n                    CallbackTriggerType.INITIALIZE,\n                    (res) => {\n                        if (res) {\n                            mockReturnedPaymentDataChangedValue = res;\n                        }\n                    },\n                );\n\n                jest.spyOn(processor, 'initialize').mockImplementation(initializeMock);\n\n                jest.spyOn(processor, 'showPaymentSheet').mockImplementation(() => {\n                    eventEmitter.emit('onPaymentDataChanged');\n\n                    return Promise.resolve(getCardDataResponse());\n                });\n            });\n\n            it('should load checkout via onPaymentDataChanged callback', async () => {\n                const initializeWidgetMock = jest.spyOn(processor, 'initializeWidget');\n\n                await strategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.loadCheckout).toHaveBeenCalled();\n                expect(initializeWidgetMock).toHaveBeenCalledTimes(1);\n                expect(LoadingShow).toHaveBeenCalled();\n            });\n\n            it('should return updated transactionInfo', async () => {\n                await strategy.initialize(options);\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                    newTransactionInfo: {\n                        countryCode: 'US',\n                        currencyCode: 'USD',\n                        totalPriceStatus: 'FINAL',\n                        totalPrice: '190.00',\n                    },\n                });\n            });\n\n            it('should update billing address if the \"do not override address\" experiment is OFF', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getStoreConfigOrThrow',\n                ).mockReturnValue({\n                    ...storeConfig,\n                    checkoutSettings: {\n                        ...storeConfig.checkoutSettings,\n                        features: {\n                            ...storeConfig.checkoutSettings.features,\n                            'PI-5031.google_pay_dont_override_address': false,\n                        },\n                    },\n                });\n\n                const billingAddress = { city: 'New York', address1: '5th Ave' };\n\n                jest.spyOn(processor, 'showPaymentSheet').mockResolvedValue(getCardDataResponse());\n                jest.spyOn(processor, 'mapToBillingAddressRequestBody').mockReturnValue(\n                    billingAddress as BillingAddressRequestBody,\n                );\n\n                const updateAddressSpy = jest\n                    .spyOn(paymentIntegrationService, 'updateBillingAddress')\n                    .mockResolvedValue(paymentIntegrationService.getState());\n\n                await strategy.initialize(options);\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(updateAddressSpy).toHaveBeenCalledWith(billingAddress);\n            });\n\n            it('should NOT update billing address if the \"do not override address\" experiment is ON', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getStoreConfigOrThrow',\n                ).mockReturnValue({\n                    ...storeConfig,\n                    checkoutSettings: {\n                        ...storeConfig.checkoutSettings,\n                        features: {\n                            ...storeConfig.checkoutSettings.features,\n                            'PI-5031.google_pay_dont_override_address': true,\n                        },\n                    },\n                });\n\n                jest.spyOn(processor, 'showPaymentSheet').mockResolvedValue(getCardDataResponse());\n\n                const updateAddressSpy = jest.spyOn(\n                    paymentIntegrationService,\n                    'updateBillingAddress',\n                );\n\n                await strategy.initialize(options);\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(updateAddressSpy).not.toHaveBeenCalled();\n            });\n\n            describe('Coupons', () => {\n                it('should call handleCoupons on initialize', async () => {\n                    const initializeMock = createInitializeImplementationMock(\n                        eventEmitter,\n                        CallbackTriggerType.OFFER,\n                        (res) => {\n                            if (res) {\n                                mockReturnedPaymentDataChangedValue = res;\n                            }\n                        },\n                    );\n\n                    jest.spyOn(processor, 'initialize').mockImplementation(initializeMock);\n\n                    jest.spyOn(processor, 'showPaymentSheet').mockImplementation(() => {\n                        eventEmitter.emit('onPaymentDataChanged');\n\n                        return Promise.resolve(getCardDataResponse());\n                    });\n\n                    await strategy.initialize(options);\n\n                    button.click();\n\n                    await new Promise((resolve) => process.nextTick(resolve));\n\n                    expect(processor.handleCoupons).toHaveBeenCalledWith({\n                        redemptionCodes: ['coupon_code'],\n                    });\n                });\n\n                it('should update offers data', async () => {\n                    const initializeMock = createInitializeImplementationMock(\n                        eventEmitter,\n                        CallbackTriggerType.OFFER,\n                        (res) => {\n                            if (res) {\n                                mockReturnedPaymentDataChangedValue = res;\n                            }\n                        },\n                    );\n\n                    jest.spyOn(processor, 'initialize').mockImplementation(initializeMock);\n\n                    jest.spyOn(processor, 'showPaymentSheet').mockImplementation(() => {\n                        eventEmitter.emit('onPaymentDataChanged');\n\n                        return Promise.resolve(getCardDataResponse());\n                    });\n\n                    await strategy.initialize(options);\n\n                    button.click();\n\n                    await new Promise((resolve) => process.nextTick(resolve));\n\n                    expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                        newTransactionInfo: {\n                            countryCode: 'US',\n                            currencyCode: 'USD',\n                            totalPriceStatus: 'FINAL',\n                            totalPrice: '190.00',\n                        },\n                        newOfferInfo: {\n                            offers: [\n                                {\n                                    description: 'Coupon description',\n                                    redemptionCode: 'code',\n                                },\n                            ],\n                        },\n                    });\n                });\n\n                it('should return a Google Pay error', async () => {\n                    jest.spyOn(processor, 'handleCoupons').mockResolvedValue({\n                        error: {\n                            message: 'Error message',\n                            reason: ErrorReasonType.OFFER_INVALID,\n                            intent: CallbackTriggerType.OFFER,\n                        },\n                        newOfferInfo: {\n                            offers: [],\n                        },\n                    });\n\n                    const initializeMock = createInitializeImplementationMock(\n                        eventEmitter,\n                        CallbackTriggerType.OFFER,\n                        (res) => {\n                            if (res) {\n                                mockReturnedPaymentDataChangedValue = res;\n                            }\n                        },\n                    );\n\n                    jest.spyOn(processor, 'initialize').mockImplementation(initializeMock);\n\n                    jest.spyOn(processor, 'showPaymentSheet').mockImplementation(() => {\n                        eventEmitter.emit('onPaymentDataChanged');\n\n                        return Promise.resolve(getCardDataResponse());\n                    });\n\n                    await strategy.initialize(options);\n\n                    button.click();\n\n                    await new Promise((resolve) => process.nextTick(resolve));\n\n                    expect(mockReturnedPaymentDataChangedValue).toStrictEqual({\n                        newTransactionInfo: {\n                            countryCode: 'US',\n                            currencyCode: 'USD',\n                            totalPriceStatus: 'FINAL',\n                            totalPrice: '190.00',\n                        },\n                        error: {\n                            message: 'Error message',\n                            reason: ErrorReasonType.OFFER_INVALID,\n                            intent: CallbackTriggerType.OFFER,\n                        },\n                        newOfferInfo: {\n                            offers: [],\n                        },\n                    });\n                });\n\n                it('should not call handleCoupons if user not signed it to google pay', async () => {\n                    jest.spyOn(processor, 'getNonce').mockRejectedValue(\n                        new MissingDataError(MissingDataErrorType.MissingConsignments),\n                    );\n\n                    const initializeMock = createInitializeImplementationMock(\n                        eventEmitter,\n                        CallbackTriggerType.OFFER,\n                        (res) => {\n                            if (res) {\n                                mockReturnedPaymentDataChangedValue = res;\n                            }\n                        },\n                    );\n\n                    jest.spyOn(processor, 'initialize').mockImplementation(initializeMock);\n\n                    jest.spyOn(processor, 'showPaymentSheet').mockImplementation(() => {\n                        eventEmitter.emit('onPaymentDataChanged');\n\n                        return Promise.resolve(getCardDataResponse());\n                    });\n\n                    await strategy.initialize(options);\n\n                    button.click();\n\n                    await new Promise((resolve) => process.nextTick(resolve));\n\n                    expect(processor.handleCoupons).not.toHaveBeenCalled();\n                });\n            });\n        });\n\n        describe('when PI-5111.google_pay_direct_pay_on_click is enabled', () => {\n            const directPayStoreConfig = {\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        'PI-5111.google_pay_direct_pay_on_click': true,\n                    },\n                },\n            };\n\n            beforeEach(async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getStoreConfigOrThrow',\n                ).mockReturnValue(directPayStoreConfig);\n\n                jest.spyOn(processor, 'mapToBillingAddressRequestBody').mockReturnValue(undefined);\n\n                await strategy.initialize(options);\n            });\n\n            it('should show loading indicator on button click', async () => {\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(LoadingShow).toHaveBeenCalled();\n            });\n\n            it('should call setExternalCheckoutXhr with methodId and payment sheet response', async () => {\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(processor.setExternalCheckoutXhr).toHaveBeenCalledWith(\n                    options.methodId,\n                    getCardDataResponse(),\n                );\n            });\n\n            it('should load checkout after receiving payment sheet response', async () => {\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.loadCheckout).toHaveBeenCalled();\n            });\n\n            it('should load payment method with the correct methodId', async () => {\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                    options.methodId,\n                );\n            });\n\n            it('should re-initialize processor with fresh payment method', async () => {\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                // called once in strategy.initialize() and once in _interactWithPaymentSheetAndPay\n                expect(processor.initialize).toHaveBeenCalledTimes(2);\n            });\n\n            it('should execute payment with methodId', async () => {\n                const executeSpy = jest.spyOn(strategy, 'execute');\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(executeSpy).toHaveBeenCalledWith({\n                    useStoreCredit: false,\n                    payment: { methodId: options.methodId },\n                });\n            });\n\n            it('should hide loading indicator after completing checkout', async () => {\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(LoadingHide).toHaveBeenCalled();\n            });\n\n            it('should update billing address if the \"do not override address\" experiment is OFF', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getStoreConfigOrThrow',\n                ).mockReturnValue({\n                    ...storeConfig,\n                    checkoutSettings: {\n                        ...storeConfig.checkoutSettings,\n                        features: {\n                            ...storeConfig.checkoutSettings.features,\n                            'PI-5111.google_pay_direct_pay_on_click': true,\n                            'PI-5031.google_pay_dont_override_address': false,\n                        },\n                    },\n                });\n\n                const billingAddress = { city: 'New York', address1: '5th Ave' };\n\n                jest.spyOn(processor, 'mapToBillingAddressRequestBody').mockReturnValue(\n                    billingAddress as BillingAddressRequestBody,\n                );\n\n                const updateAddressSpy = jest\n                    .spyOn(paymentIntegrationService, 'updateBillingAddress')\n                    .mockResolvedValue(paymentIntegrationService.getState());\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(updateAddressSpy).toHaveBeenCalledWith(billingAddress);\n            });\n\n            it('should NOT update billing address if the \"do not override address\" experiment is ON', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getStoreConfigOrThrow',\n                ).mockReturnValue({\n                    ...storeConfig,\n                    checkoutSettings: {\n                        ...storeConfig.checkoutSettings,\n                        features: {\n                            ...storeConfig.checkoutSettings.features,\n                            'PI-5111.google_pay_direct_pay_on_click': true,\n                            'PI-5031.google_pay_dont_override_address': true,\n                        },\n                    },\n                });\n\n                const updateAddressSpy = jest.spyOn(\n                    paymentIntegrationService,\n                    'updateBillingAddress',\n                );\n\n                button.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(updateAddressSpy).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('#initialize with container', () => {\n        const CONTAINER_ID = 'checkout-payment-continue';\n\n        let containerHost: HTMLDivElement;\n        let brandedButton: HTMLButtonElement;\n        let containerButtonOnClick: (event: MouseEvent) => Promise<void>;\n\n        beforeEach(() => {\n            containerHost = document.createElement('div');\n            containerHost.id = CONTAINER_ID;\n            document.body.appendChild(containerHost);\n\n            brandedButton = document.createElement('button');\n            jest.spyOn(brandedButton, 'remove');\n            jest.spyOn(brandedButton, 'removeEventListener');\n\n            jest.spyOn(processor, 'addPaymentButton').mockImplementation(\n                (_containerId, buttonOpts) => {\n                    containerButtonOnClick = buttonOpts.onClick;\n\n                    brandedButton.onclick = (event: MouseEvent) => {\n                        void buttonOpts.onClick(event);\n                    };\n\n                    return brandedButton;\n                },\n            );\n\n            options = {\n                methodId: 'googlepayworldpayaccess',\n                googlepayworldpayaccess: {\n                    loadingContainerId: 'id',\n                    container: CONTAINER_ID,\n                    onError: jest.fn(),\n                },\n            };\n        });\n\n        afterEach(() => {\n            brandedButton.onclick = null;\n            containerHost.remove();\n        });\n\n        describe('#initialize', () => {\n            it('should initialize when only container is provided', async () => {\n                const initialize = strategy.initialize(options);\n\n                await expect(initialize).resolves.toBeUndefined();\n\n                expect(processor.addPaymentButton).toHaveBeenCalledWith(\n                    CONTAINER_ID,\n                    expect.objectContaining({\n                        buttonColor: 'default',\n                        buttonType: 'pay',\n                        buttonSizeMode: 'fill',\n                        onClick: expect.any(Function),\n                    }),\n                );\n            });\n\n            it('should pass custom buttonColor and buttonType to addPaymentButton', async () => {\n                options.googlepayworldpayaccess = {\n                    ...options.googlepayworldpayaccess,\n                    buttonColor: 'black',\n                    buttonType: 'checkout',\n                };\n\n                await strategy.initialize(options);\n\n                expect(processor.addPaymentButton).toHaveBeenCalledWith(\n                    CONTAINER_ID,\n                    expect.objectContaining({\n                        buttonColor: 'black',\n                        buttonType: 'checkout',\n                    }),\n                );\n            });\n\n            it('should defer addPaymentButton until onInit calls renderButton', async () => {\n                const onInit = jest.fn();\n\n                options.googlepayworldpayaccess = {\n                    ...options.googlepayworldpayaccess,\n                    onInit,\n                };\n\n                await strategy.initialize(options);\n\n                expect(processor.addPaymentButton).not.toHaveBeenCalled();\n                expect(onInit).toHaveBeenCalledWith(expect.any(Function));\n\n                const [[renderButton]] = onInit.mock.calls;\n\n                renderButton();\n\n                expect(processor.addPaymentButton).toHaveBeenCalledTimes(1);\n            });\n\n            it('should add button only once when initialize is called twice', async () => {\n                await strategy.initialize(options);\n                await strategy.initialize(options);\n\n                expect(processor.addPaymentButton).toHaveBeenCalledTimes(1);\n            });\n\n            it('should add button only once when renderButton is called twice via onInit', async () => {\n                let capturedRenderButton!: () => void;\n                const onInit = jest.fn((renderButton: () => void) => {\n                    capturedRenderButton = renderButton;\n                });\n\n                options.googlepayworldpayaccess = {\n                    ...options.googlepayworldpayaccess,\n                    onInit,\n                };\n\n                await strategy.initialize(options);\n\n                capturedRenderButton();\n                capturedRenderButton();\n\n                expect(processor.addPaymentButton).toHaveBeenCalledTimes(1);\n            });\n\n            describe('should fail if:', () => {\n                test('container element is not in the DOM', async () => {\n                    jest.spyOn(processor, 'addPaymentButton').mockReturnValue(undefined);\n\n                    const initialize = strategy.initialize(options);\n\n                    await expect(initialize).rejects.toThrow(InvalidArgumentError);\n                });\n            });\n        });\n\n        describe('when clicking the container payment button', () => {\n            let completeCheckoutFlowSpy: jest.SpyInstance;\n\n            beforeEach(async () => {\n                jest.spyOn(processor, 'setShouldRequestShipping');\n                jest.spyOn(processor, 'mapToBillingAddressRequestBody').mockReturnValue(undefined);\n                completeCheckoutFlowSpy = jest\n                    .spyOn(Object.getPrototypeOf(strategy), '_completeCheckoutFlow')\n                    .mockImplementation(() => undefined);\n\n                await strategy.initialize(options);\n            });\n\n            afterEach(() => {\n                completeCheckoutFlowSpy.mockRestore();\n            });\n\n            it('should run direct pay flow via _interactWithPaymentSheetAndPay without PI-5111 experiment', async () => {\n                const executeSpy = jest.spyOn(strategy, 'execute');\n\n                brandedButton.click();\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(processor.setShouldRequestShipping).toHaveBeenCalledWith(false);\n                expect(processor.initializeWidget).toHaveBeenCalled();\n                expect(processor.showPaymentSheet).toHaveBeenCalled();\n                expect(executeSpy).toHaveBeenCalledWith({\n                    useStoreCredit: false,\n                    payment: { methodId: options.methodId },\n                });\n            });\n\n            it('should call onError when initializeWidget throws', async () => {\n                const widgetError = new Error('widget failed');\n\n                jest.spyOn(processor, 'initializeWidget').mockRejectedValueOnce(widgetError);\n\n                await expect(containerButtonOnClick(new MouseEvent('click'))).rejects.toThrow(\n                    widgetError,\n                );\n\n                expect(options.googlepayworldpayaccess?.onError).toHaveBeenCalled();\n                expect(LoadingHide).toHaveBeenCalled();\n            });\n\n            it('should throw PaymentMethodCancelledError when Google Pay returns CANCELED', async () => {\n                const canceledError: GooglePayErrorObject = {\n                    statusCode: 'CANCELED',\n                };\n\n                jest.spyOn(processor, 'initializeWidget').mockRejectedValueOnce(canceledError);\n\n                await expect(containerButtonOnClick(new MouseEvent('click'))).rejects.toThrow(\n                    PaymentMethodCancelledError,\n                );\n            });\n        });\n\n        describe('#deinitialize', () => {\n            it('should remove the branded button instead of removeEventListener', async () => {\n                await strategy.initialize(options);\n                await strategy.deinitialize();\n\n                expect(brandedButton.remove).toHaveBeenCalled();\n                expect(brandedButton.removeEventListener).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('#finalize', () => {\n        it('should finalize the strategy', async () => {\n            const finalize = strategy.finalize();\n\n            await expect(finalize).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize', () => {\n        it('should deinitialize the strategy', async () => {\n            const deinitialize = strategy.deinitialize();\n\n            await expect(deinitialize).resolves.toBeUndefined();\n        });\n\n        it('should NOT deinitialize the strategy if deinitialization is blocked', async () => {\n            const delayedPromise = new Promise((r) => {\n                setTimeout(r, 100);\n            });\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        'PI-5031.google_pay_dont_override_address': false,\n                    },\n                },\n            });\n\n            jest.spyOn(processor, 'showPaymentSheet').mockResolvedValue(\n                Promise.resolve(getCardDataResponse()),\n            );\n            jest.spyOn(paymentIntegrationService, 'updateBillingAddress').mockReturnValue(\n                delayedPromise as Promise<PaymentIntegrationSelectors>,\n            );\n\n            jest.spyOn(button, 'removeEventListener');\n\n            await strategy.initialize(options);\n\n            button.click();\n            await new Promise((resolve) => process.nextTick(resolve));\n            await strategy.deinitialize();\n\n            expect(button.removeEventListener).not.toHaveBeenCalled();\n        });\n\n        it('should unbind payment button', async () => {\n            await strategy.initialize(options);\n            await strategy.deinitialize();\n\n            expect(button.removeEventListener).toHaveBeenCalledWith('click', expect.any(Function));\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-payment-strategy.ts",
    "content": "import {\n    guard,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    Omit,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { DEFAULT_CONTAINER_STYLES, LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport GooglePayPaymentInitializeOptions, {\n    WithGooglePayPaymentInitializeOptions,\n} from './google-pay-payment-initialize-options';\nimport GooglePayPaymentProcessor from './google-pay-payment-processor';\nimport isGooglePayErrorObject from './guards/is-google-pay-error-object';\nimport isGooglePayKey from './guards/is-google-pay-key';\nimport {\n    CallbackTriggerType,\n    ErrorReasonType,\n    GooglePayError,\n    GooglePayInitializationData,\n    GooglePayPaymentOptions,\n    HandleCouponsOut,\n    IntermediatePaymentData,\n    TotalPriceStatusType,\n} from './types';\n\nexport default class GooglePayPaymentStrategy implements PaymentStrategy {\n    private _loadingIndicator: LoadingIndicator;\n    private _loadingIndicatorContainer?: string;\n    private _paymentButton?: HTMLElement;\n    private _clickListener?: (event: MouseEvent) => unknown;\n    private _methodId?: keyof WithGooglePayPaymentInitializeOptions;\n    private _isDeinitializationBlocked = false;\n    private _isContainerMode = false;\n\n    constructor(\n        protected _paymentIntegrationService: PaymentIntegrationService,\n        protected _googlePayPaymentProcessor: GooglePayPaymentProcessor,\n    ) {\n        this._loadingIndicator = new LoadingIndicator({\n            containerStyles: DEFAULT_CONTAINER_STYLES,\n        });\n    }\n\n    async initialize(\n        options?: PaymentInitializeOptions & WithGooglePayPaymentInitializeOptions,\n    ): Promise<void> {\n        if (!options?.methodId || !isGooglePayKey(options.methodId)) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" is not a valid key.',\n            );\n        }\n\n        this._methodId = options.methodId;\n\n        const googlePayOptions = options[this._getMethodId()];\n\n        if (!googlePayOptions?.walletButton && !googlePayOptions?.container) {\n            throw new InvalidArgumentError('Unable to proceed without valid options.');\n        }\n\n        const {\n            walletButton,\n            loadingContainerId,\n            container,\n            buttonColor,\n            buttonSizeMode,\n            buttonType,\n            onInit,\n            ...callbacks\n        } = googlePayOptions;\n\n        this._loadingIndicatorContainer = loadingContainerId;\n\n        await this._paymentIntegrationService.loadPaymentMethod(this._getMethodId());\n\n        const paymentMethod = this._paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow<GooglePayInitializationData>(this._getMethodId());\n\n        this._googlePayPaymentProcessor.setIsWebViewExperimentOn(\n            !!paymentMethod.initializationData?.isWebViewExperimentOn,\n        );\n        await this._googlePayPaymentProcessor.initialize(\n            () => paymentMethod,\n            this._getGooglePayClientOptions(paymentMethod.initializationData?.storeCountry),\n        );\n\n        if (container) {\n            this._isContainerMode = true;\n\n            const renderButton = () => this._addPaymentButtonToContainer(googlePayOptions);\n\n            if (onInit) {\n                onInit(renderButton);\n            } else {\n                renderButton();\n            }\n        } else {\n            this._addPaymentButton(walletButton!, callbacks);\n        }\n    }\n\n    async execute({ payment }: OrderRequestBody): Promise<void> {\n        if (!payment?.methodId) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        await this._paymentIntegrationService.submitOrder();\n\n        const nonce = await this._googlePayPaymentProcessor.getNonce(payment.methodId);\n        const extraData = await this._googlePayPaymentProcessor.extraPaymentData();\n\n        try {\n            await this._paymentIntegrationService.submitPayment({\n                ...payment,\n                paymentData: { nonce, ...extraData },\n            });\n        } catch (error) {\n            await this._googlePayPaymentProcessor.processAdditionalAction(error, payment.methodId);\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        if (this._isDeinitializationBlocked) {\n            return Promise.resolve();\n        }\n\n        if (this._isContainerMode) {\n            this._paymentButton?.remove();\n        } else if (this._clickListener) {\n            this._paymentButton?.removeEventListener('click', this._clickListener);\n        }\n\n        this._paymentButton = undefined;\n        this._clickListener = undefined;\n        this._methodId = undefined;\n        this._isContainerMode = false;\n\n        return Promise.resolve();\n    }\n\n    protected _addPaymentButton(\n        walletButton: string,\n        callbacks: Omit<GooglePayPaymentInitializeOptions, 'walletButton'>,\n    ): void {\n        if (this._paymentButton) {\n            return;\n        }\n\n        const paymentButton = document.getElementById(walletButton);\n\n        if (!paymentButton) {\n            throw new InvalidArgumentError('Unable to proceed without a walletButton.');\n        }\n\n        this._paymentButton = paymentButton;\n        this._clickListener = this._handleClick(callbacks);\n\n        this._paymentButton.addEventListener('click', this._clickListener);\n    }\n\n    protected _addPaymentButtonToContainer(\n        googlePayOptions: GooglePayPaymentInitializeOptions,\n    ): void {\n        if (this._paymentButton) {\n            return;\n        }\n\n        const { container, buttonColor, buttonSizeMode, buttonType, onError } = googlePayOptions;\n\n        if (!container) {\n            throw new InvalidArgumentError('Unable to proceed: container ID is not valid.');\n        }\n\n        const button = this._googlePayPaymentProcessor.addPaymentButton(container, {\n            buttonColor: buttonColor ?? 'default',\n            buttonSizeMode: buttonSizeMode ?? 'fill',\n            buttonType: buttonType ?? 'pay',\n            onClick: this._handleContainerButtonClick(onError),\n        });\n\n        if (!button) {\n            throw new InvalidArgumentError(\n                `Unable to proceed: container element \"#${container}\" not found in the DOM.`,\n            );\n        }\n\n        this._paymentButton = button;\n    }\n\n    protected _handleContainerButtonClick(\n        onError: GooglePayPaymentInitializeOptions['onError'],\n    ): (event: MouseEvent) => Promise<void> {\n        return async (event: MouseEvent) => {\n            event.preventDefault();\n\n            await this._runGooglePayWidgetInteractionWithErrorHandling(onError, async () => {\n                this._googlePayPaymentProcessor.setShouldRequestShipping(false);\n                await this._googlePayPaymentProcessor.initializeWidget();\n                await this._interactWithPaymentSheetAndPay();\n            });\n        };\n    }\n\n    protected _handleClick({\n        onPaymentSelect,\n        onError,\n    }: Omit<GooglePayPaymentInitializeOptions, 'walletButton'>): (event: MouseEvent) => unknown {\n        return async (event: MouseEvent) => {\n            event.preventDefault();\n\n            // TODO: Dispatch Widget Actions\n            await this._runGooglePayWidgetInteractionWithErrorHandling(onError, async () => {\n                this._googlePayPaymentProcessor.setShouldRequestShipping(false);\n                await this._googlePayPaymentProcessor.initializeWidget();\n\n                if (this._isDirectPayOnClickEnabled()) {\n                    await this._interactWithPaymentSheetAndPay();\n                } else {\n                    await this._interactWithPaymentSheet();\n                }\n            });\n\n            onPaymentSelect?.();\n        };\n    }\n\n    protected async _interactWithPaymentSheetAndPay(): Promise<void> {\n        const response = await this._googlePayPaymentProcessor.showPaymentSheet();\n\n        this._toggleBlockDeinitialization(true);\n        this._toggleLoadingIndicator(true);\n\n        const methodId = this._getMethodId();\n\n        const state = this._paymentIntegrationService.getState();\n        const { features } = state.getStoreConfigOrThrow().checkoutSettings;\n        const isGooglePayDontOverrideAddresssExperimentOn = isExperimentEnabled(\n            features,\n            'PI-5031.google_pay_dont_override_address',\n        );\n\n        const billingAddress =\n            this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(response);\n\n        if (billingAddress && !isGooglePayDontOverrideAddresssExperimentOn) {\n            await this._paymentIntegrationService.updateBillingAddress(billingAddress);\n        }\n\n        await this._googlePayPaymentProcessor.setExternalCheckoutXhr(methodId, response);\n\n        await this._paymentIntegrationService.loadCheckout();\n        await this._paymentIntegrationService.loadPaymentMethod(methodId);\n\n        const freshPaymentMethod = this._paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow<GooglePayInitializationData>(methodId);\n\n        await this._googlePayPaymentProcessor.initialize(() => freshPaymentMethod);\n\n        await this.execute({ useStoreCredit: false, payment: { methodId } });\n\n        this._completeCheckoutFlow();\n    }\n\n    protected _completeCheckoutFlow(): void {\n        window.location.replace('/checkout/order-confirmation');\n        this._toggleLoadingIndicator(false);\n        this._toggleBlockDeinitialization(false);\n    }\n\n    protected async _interactWithPaymentSheet(): Promise<void> {\n        const response = await this._googlePayPaymentProcessor.showPaymentSheet();\n        const state = this._paymentIntegrationService.getState();\n        const { features } = state.getStoreConfigOrThrow().checkoutSettings;\n        const isGooglePayDontOverrideAddresssExperimentOn = isExperimentEnabled(\n            features,\n            'PI-5031.google_pay_dont_override_address',\n        );\n\n        this._toggleBlockDeinitialization(true);\n        this._toggleLoadingIndicator(true);\n\n        const billingAddress =\n            this._googlePayPaymentProcessor.mapToBillingAddressRequestBody(response);\n\n        if (billingAddress && !isGooglePayDontOverrideAddresssExperimentOn) {\n            await this._paymentIntegrationService.updateBillingAddress(billingAddress);\n        }\n\n        await this._googlePayPaymentProcessor.setExternalCheckoutXhr(this._getMethodId(), response);\n\n        await this._paymentIntegrationService.loadCheckout();\n        await this._paymentIntegrationService.loadPaymentMethod(this._getMethodId());\n        this._toggleLoadingIndicator(false);\n        this._toggleBlockDeinitialization(false);\n    }\n\n    protected _getMethodId(): keyof WithGooglePayPaymentInitializeOptions {\n        return guard(\n            this._methodId,\n            () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n        );\n    }\n\n    protected async _getIsSignedInOrThrow(): Promise<boolean> {\n        try {\n            return !!(await this._googlePayPaymentProcessor.getNonce(this._getMethodId()));\n        } catch (e) {\n            if (\n                e instanceof MissingDataError &&\n                e.subtype === MissingDataErrorType.MissingPaymentToken\n            ) {\n                return false;\n            }\n\n            throw e;\n        }\n    }\n\n    protected async _handleOfferTrigger(\n        offerData: IntermediatePaymentData['offerData'],\n    ): Promise<Partial<HandleCouponsOut>> {\n        let isSignedIn = false;\n        let errorMessage = 'Sign in to Google Pay first to apply or remove promo codes.';\n\n        try {\n            isSignedIn = await this._getIsSignedInOrThrow();\n        } catch (error) {\n            if (error instanceof MissingDataError) {\n                errorMessage = error.message;\n            }\n        }\n\n        // We can only apply/remove coupons on the payment step only if we are logged into Google Pay, otherwise we will get an error\n        if (isSignedIn) {\n            const { newOfferInfo, error } = await this._googlePayPaymentProcessor.handleCoupons(\n                offerData,\n            );\n\n            return {\n                newOfferInfo,\n                error,\n            };\n        }\n\n        return {\n            error: {\n                reason: ErrorReasonType.OFFER_INVALID,\n                message: errorMessage,\n                intent: CallbackTriggerType.OFFER,\n            },\n        };\n    }\n\n    protected _getGooglePayClientOptions(countryCode?: string): GooglePayPaymentOptions {\n        if (this._googlePayPaymentProcessor.isWebViewWithRestrictions()) {\n            return {};\n        }\n\n        return {\n            paymentDataCallbacks: {\n                onPaymentDataChanged: async ({ callbackTrigger, offerData }) => {\n                    if (\n                        callbackTrigger !== CallbackTriggerType.INITIALIZE &&\n                        callbackTrigger !== CallbackTriggerType.OFFER\n                    ) {\n                        return;\n                    }\n\n                    const { offerChangeTriggers } =\n                        this._googlePayPaymentProcessor.getCallbackTriggers();\n\n                    const { newOfferInfo = undefined, error: couponsError = undefined } =\n                        offerChangeTriggers.includes(callbackTrigger)\n                            ? await this._handleOfferTrigger(offerData)\n                            : {};\n\n                    // We can add another errors if needed 'couponsError || shippingError || anotherError'\n                    const error: GooglePayError | undefined = couponsError;\n\n                    await this._paymentIntegrationService.loadCheckout();\n\n                    const { code: currencyCode } = this._paymentIntegrationService\n                        .getState()\n                        .getCartOrThrow().currency;\n                    const totalPrice = this._googlePayPaymentProcessor.getTotalPrice();\n\n                    return {\n                        newTransactionInfo: {\n                            ...(countryCode && { countryCode }),\n                            currencyCode,\n                            totalPriceStatus: TotalPriceStatusType.FINAL,\n                            totalPrice,\n                        },\n                        ...(newOfferInfo && {\n                            newOfferInfo,\n                        }),\n                        ...(error && {\n                            error,\n                        }),\n                    };\n                },\n            },\n        };\n    }\n\n    private async _runGooglePayWidgetInteractionWithErrorHandling(\n        onError: GooglePayPaymentInitializeOptions['onError'],\n        interaction: () => Promise<void>,\n    ): Promise<void> {\n        try {\n            await interaction();\n        } catch (error) {\n            let err: unknown = error;\n\n            this._toggleLoadingIndicator(false);\n\n            if (isGooglePayErrorObject(error)) {\n                if (error.statusCode === 'CANCELED') {\n                    throw new PaymentMethodCancelledError();\n                }\n\n                err = new PaymentMethodFailedError(JSON.stringify(error));\n            }\n\n            onError?.(\n                new PaymentMethodFailedError(\n                    'An error occurred while requesting your Google Pay payment details.',\n                ),\n            );\n\n            throw err;\n        } finally {\n            this._toggleBlockDeinitialization(false);\n        }\n    }\n\n    private _isDirectPayOnClickEnabled(): boolean {\n        const { features } = this._paymentIntegrationService\n            .getState()\n            .getStoreConfigOrThrow().checkoutSettings;\n\n        return isExperimentEnabled(features, 'PI-5111.google_pay_direct_pay_on_click');\n    }\n\n    private _toggleBlockDeinitialization(isBlocked: boolean) {\n        this._isDeinitializationBlocked = isBlocked;\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"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-paypal-commerce/create-google-pay-paypal-commerce-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayButtonStrategy from '../google-pay-button-strategy';\n\nimport createGooglePayPaypalCommerceButtonStrategy from './create-google-pay-paypal-commerce-button-strategy';\n\ndescribe('createGooglePayPaypalCommerceButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay paypalcommerce button strategy', () => {\n        const strategy = createGooglePayPaypalCommerceButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-paypal-commerce/create-google-pay-paypal-commerce-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PayPalCommerceSdk } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\n\nimport createGooglePayScriptLoader from '../factories/create-google-pay-script-loader';\nimport GooglePayButtonStrategy from '../google-pay-button-strategy';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\n\nimport GooglePayPaypalCommerceGateway from './google-pay-paypal-commerce-gateway';\n\nconst createGooglePayPayPalCommerceButtonStrategy: CheckoutButtonStrategyFactory<\n    GooglePayButtonStrategy\n> = (paymentIntegrationService) => {\n    return new GooglePayButtonStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayPaypalCommerceGateway(\n                paymentIntegrationService,\n                new PayPalCommerceSdk(getScriptLoader()),\n            ),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayPayPalCommerceButtonStrategy, [\n    { id: 'googlepaypaypalcommerce' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-paypal-commerce/create-google-pay-paypal-commerce-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../google-pay-customer-strategy';\n\nimport createGooglePayPayPalCommerceCustomerStrategy from './create-google-pay-paypal-commerce-customer-strategy';\n\ndescribe('createGooglePayPayPalCommerceCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay paypal commerce customer strategy', () => {\n        const strategy = createGooglePayPayPalCommerceCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-paypal-commerce/create-google-pay-paypal-commerce-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PayPalCommerceSdk } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\n\nimport createGooglePayScriptLoader from '../factories/create-google-pay-script-loader';\nimport GooglePayCustomerStrategy from '../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\n\nimport GooglePayPaypalCommerceGateway from './google-pay-paypal-commerce-gateway';\n\nconst createGooglePayPayPalCommerceCustomerStrategy: CustomerStrategyFactory<\n    GooglePayCustomerStrategy\n> = (paymentIntegrationService) => {\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayPaypalCommerceGateway(\n                paymentIntegrationService,\n                new PayPalCommerceSdk(getScriptLoader()),\n            ),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayPayPalCommerceCustomerStrategy, [\n    { id: 'googlepaypaypalcommerce' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-paypal-commerce/create-google-pay-paypal-commerce-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayPaymentStrategy from '../google-pay-payment-strategy';\n\nimport createGooglePayPayPalCommercePaymentStrategy from './create-google-pay-paypal-commerce-payment-strategy';\n\ndescribe('createGooglePayPayPalCommercePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay paypal commerce payment strategy', () => {\n        const strategy = createGooglePayPayPalCommercePaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-paypal-commerce/create-google-pay-paypal-commerce-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PayPalCommerceSdk } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\n\nimport createGooglePayScriptLoader from '../factories/create-google-pay-script-loader';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../google-pay-payment-strategy';\n\nimport GooglePayPaypalCommerceGateway from './google-pay-paypal-commerce-gateway';\nimport GooglePayPaypalCommercePaymentStrategy from './google-pay-paypal-commerce-payment-strategy';\n\nconst createGooglePayPayPalCommercePaymentStrategy: PaymentStrategyFactory<\n    GooglePayPaymentStrategy\n> = (paymentIntegrationService) => {\n    const payPalCommerceSdk = new PayPalCommerceSdk(getScriptLoader());\n\n    return new GooglePayPaypalCommercePaymentStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayPaypalCommerceGateway(paymentIntegrationService, payPalCommerceSdk),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n        payPalCommerceSdk,\n        createRequestSender(),\n    );\n};\n\nexport default toResolvableModule(createGooglePayPayPalCommercePaymentStrategy, [\n    { id: 'googlepaypaypalcommerce' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-paypal-commerce/google-pay-paypal-commerce-gateway.spec.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { PayPalCommerceSdk } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\n\nimport GooglePayGateway from '../gateways/google-pay-gateway';\nimport isGooglePayPaypalCommercePaymentMethod from '../guards/is-google-pay-paypal-commerce-payment-method';\nimport getCardDataResponse from '../mocks/google-pay-card-data-response.mock';\nimport { googlePayConfigMock } from '../mocks/google-pay-config.mock';\nimport { getPayPalCommerce } from '../mocks/google-pay-payment-method.mock';\n\nimport GooglePayPayPalCommerceGateway from './google-pay-paypal-commerce-gateway';\n\ndescribe('GooglePayPayPalCommerceGateway', () => {\n    let gateway: GooglePayPayPalCommerceGateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let scriptLoader: PayPalCommerceSdk;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        scriptLoader = new PayPalCommerceSdk(getScriptLoader());\n\n        gateway = new GooglePayPayPalCommerceGateway(paymentIntegrationService, scriptLoader);\n\n        jest.spyOn(scriptLoader, 'getPayPalGooglePaySdk').mockResolvedValue({\n            Googlepay: jest.fn().mockReturnValue({\n                config: jest.fn().mockReturnValue(googlePayConfigMock),\n                confirmOrder: jest.fn().mockResolvedValue({ status: 'APPROVED' }),\n            }),\n        });\n    });\n\n    it('is a special type of GooglePayGateway', () => {\n        expect(gateway).toBeInstanceOf(GooglePayGateway);\n    });\n\n    describe('#mapToExternalCheckoutData', () => {\n        it('should map response to external checkout data', async () => {\n            const response = getCardDataResponse();\n\n            response.paymentMethodData.tokenizationData.token = '{\"id\":\"tok_f00b4r\"}';\n\n            const expectedData = {\n                nonce: 'eyJpZCI6InRva19mMDBiNHIifQ==',\n                card_information: {\n                    type: 'VISA',\n                    number: '1111',\n                },\n            };\n\n            const mappedData = await gateway.mapToExternalCheckoutData(response);\n\n            expect(mappedData).toStrictEqual(expectedData);\n        });\n    });\n\n    describe('#getPaymentGatewayParameters', () => {\n        it('should return payment gateway parameters', async () => {\n            const expectedParams = {\n                gateway: 'paypalppcp',\n                gatewayMerchantId: 'ID',\n            };\n\n            const googlePayPaymentMethod = getPayPalCommerce();\n\n            isGooglePayPaypalCommercePaymentMethod(googlePayPaymentMethod);\n\n            await gateway.initialize(() => googlePayPaymentMethod);\n\n            expect(gateway.getPaymentGatewayParameters()).toStrictEqual(expectedParams);\n        });\n\n        it('should return payment gateway parameters in production mode', async () => {\n            const expectedParams = {\n                gateway: 'paypalppcp',\n                gatewayMerchantId: 'ID',\n            };\n\n            const googlePayPaymentMethod = getPayPalCommerce();\n\n            isGooglePayPaypalCommercePaymentMethod(googlePayPaymentMethod);\n\n            await gateway.initialize(() => googlePayPaymentMethod);\n\n            expect(gateway.getPaymentGatewayParameters()).toStrictEqual(expectedParams);\n        });\n\n        it('should return default payment gateway name', async () => {\n            const expectedParams = {\n                gateway: 'paypalppcp',\n                gatewayMerchantId: 'ID',\n            };\n\n            const googlePayPaymentMethod = getPayPalCommerce();\n\n            isGooglePayPaypalCommercePaymentMethod(googlePayPaymentMethod);\n\n            await gateway.initialize(() => googlePayPaymentMethod);\n\n            expect(gateway.getPaymentGatewayParameters()).toStrictEqual(expectedParams);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-paypal-commerce/google-pay-paypal-commerce-gateway.ts",
    "content": "import {\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PayPalCommerceSdk } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\n\nimport GooglePayGateway from '../gateways/google-pay-gateway';\nimport assertsIsGooglePayPayPalCommercePaymentMethod from '../guards/is-google-pay-paypal-commerce-payment-method';\nimport {\n    GooglePayCardDataResponse,\n    GooglePayPayPalCommerceGatewayParameters,\n    GooglePayPayPalCommerceInitializationData,\n    GooglePaySetExternalCheckoutData,\n} from '../types';\n\nimport { GooglePayConfig } from './types';\n\nexport default class GooglePayPaypalCommerceGateway extends GooglePayGateway {\n    private googlepayConfig?: GooglePayConfig;\n    private service: PaymentIntegrationService;\n\n    constructor(service: PaymentIntegrationService, private payPalCommerceSdk: PayPalCommerceSdk) {\n        super('paypalsb', service);\n\n        this.service = service;\n    }\n\n    async initialize(\n        getPaymentMethod: () => PaymentMethod<GooglePayPayPalCommerceInitializationData>,\n        isBuyNowFlow?: boolean,\n        currencyCode?: string,\n    ): Promise<void> {\n        const state = this.service.getState();\n        const currency = state.getStoreConfig()?.currency.code ?? currencyCode;\n\n        if (!currency) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        await super.initialize(getPaymentMethod, isBuyNowFlow, currency);\n\n        const paymentMethod = super.getPaymentMethod();\n\n        if (!paymentMethod.initializationData) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        assertsIsGooglePayPayPalCommercePaymentMethod(paymentMethod);\n\n        const googlePaySdk = await this.payPalCommerceSdk.getPayPalGooglePaySdk(\n            paymentMethod,\n            currency,\n            state.getLocale(),\n        );\n\n        this.googlepayConfig = await googlePaySdk.Googlepay().config();\n\n        const { allowedPaymentMethods } = this.googlepayConfig;\n\n        this.setGatewayIdentifier(\n            allowedPaymentMethods[0]?.tokenizationSpecification?.parameters?.gateway,\n        );\n    }\n\n    getPaymentGatewayParameters(): GooglePayPayPalCommerceGatewayParameters {\n        if (this.googlepayConfig) {\n            const { allowedPaymentMethods } = this.googlepayConfig;\n            const { gatewayMerchantId } =\n                allowedPaymentMethods[0].tokenizationSpecification.parameters;\n\n            return {\n                gateway: this.getGatewayIdentifier(),\n                gatewayMerchantId,\n            };\n        }\n\n        return {\n            gateway: this.getGatewayIdentifier(),\n        };\n    }\n\n    async mapToExternalCheckoutData(\n        response: GooglePayCardDataResponse,\n    ): Promise<GooglePaySetExternalCheckoutData> {\n        const data = await super.mapToExternalCheckoutData(response);\n\n        data.nonce = btoa(data.nonce);\n\n        return data;\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-paypal-commerce/google-pay-paypal-commerce-payment-strategy.spec.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender, RequestSender, Response } from '@bigcommerce/request-sender';\nimport { createScriptLoader, getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    MissingDataErrorType,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { PayPalCommerceSdk } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\n\nimport { WithGooglePayPaymentInitializeOptions } from '../google-pay-payment-initialize-options';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\nimport GooglePayScriptLoader from '../google-pay-script-loader';\nimport isGooglePayPaypalCommercePaymentMethod from '../guards/is-google-pay-paypal-commerce-payment-method';\nimport { getGeneric, getPayPalCommerce } from '../mocks/google-pay-payment-method.mock';\n\nimport GooglePayGateway from './google-pay-paypal-commerce-gateway';\nimport GooglePayPaymentStrategy from './google-pay-paypal-commerce-payment-strategy';\nimport { ConfirmOrderStatus } from './types';\n\ndescribe('PayPalCommerceGooglePayPaymentStrategy', () => {\n    const BUTTON_ID = 'my_awesome_google_pay_button';\n\n    let paymentIntegrationService: PaymentIntegrationService;\n    let processor: GooglePayPaymentProcessor;\n    let strategy: GooglePayPaymentStrategy;\n    let options: PaymentInitializeOptions & WithGooglePayPaymentInitializeOptions;\n    let button: HTMLDivElement;\n    let scriptLoader: PayPalCommerceSdk;\n    let requestSender: RequestSender;\n    let response: Response<{ orderId: string }>;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        scriptLoader = new PayPalCommerceSdk(getScriptLoader());\n        requestSender = createRequestSender();\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getGeneric(),\n        );\n\n        processor = new GooglePayPaymentProcessor(\n            new GooglePayScriptLoader(createScriptLoader()),\n            new GooglePayGateway(paymentIntegrationService, scriptLoader),\n            createRequestSender(),\n            createFormPoster(),\n        );\n        jest.spyOn(processor, 'initialize').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'processAdditionalAction').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'getNonce').mockResolvedValue('nonceValue');\n\n        jest.spyOn(scriptLoader, 'getPayPalGooglePaySdk').mockResolvedValue({\n            Googlepay: jest.fn().mockReturnValue({\n                config: jest.fn(),\n                confirmOrder: jest.fn().mockResolvedValue({ status: 'APPROVED' }),\n                initiatePayerAction: jest.fn(),\n            }),\n        });\n\n        strategy = new GooglePayPaymentStrategy(\n            paymentIntegrationService,\n            processor,\n            scriptLoader,\n            requestSender,\n        );\n\n        response = { body: { orderId: '111' } } as Response<{ orderId: string }>;\n        jest.spyOn(requestSender, 'post').mockResolvedValue(response);\n\n        options = {\n            methodId: 'googlepaypaypalcommerce',\n            googlepaypaypalcommerce: {\n                walletButton: BUTTON_ID,\n                onError: jest.fn(),\n                onPaymentSelect: jest.fn(),\n            },\n        };\n    });\n\n    beforeAll(() => {\n        button = document.createElement('div');\n\n        button.id = BUTTON_ID;\n\n        document.body.appendChild(button);\n\n        jest.spyOn(button, 'addEventListener');\n        jest.spyOn(button, 'removeEventListener');\n    });\n\n    afterEach(() => {\n        (button.addEventListener as jest.Mock).mockClear();\n        (button.removeEventListener as jest.Mock).mockClear();\n    });\n\n    describe('#execute', () => {\n        let payload: OrderRequestBody;\n\n        beforeEach(async () => {\n            payload = {\n                payment: {\n                    methodId: 'example',\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getGeneric(),\n                initializationData: {\n                    ...getGeneric().initializationData,\n                    nonce: 'abc.123.xyz',\n                    card_information: {\n                        type: '',\n                        number: '',\n                    },\n                    merchantId: 'merchantId',\n                    clientId: 'clientId',\n                },\n                clientToken: 'clientToken',\n            });\n\n            await strategy.initialize(options);\n        });\n\n        it('should execute the strategy', async () => {\n            const googlePayPaymentMethod = getPayPalCommerce();\n\n            isGooglePayPaypalCommercePaymentMethod(googlePayPaymentMethod);\n\n            await scriptLoader.getPayPalGooglePaySdk(googlePayPaymentMethod, 'USD');\n\n            const execute = strategy.execute(payload);\n\n            await expect(execute).resolves.toBeUndefined();\n        });\n\n        it('should call getPaymentMethodOrThrow', async () => {\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.getState().getPaymentMethodOrThrow).toHaveBeenCalled();\n        });\n\n        it('should submit the order', async () => {\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('should submit the payment', async () => {\n            await strategy.execute(payload);\n\n            const paymentData = {\n                formattedPayload: {\n                    method_id: 'example',\n                    paypal_account: {\n                        order_id: '111',\n                    },\n                },\n            };\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: 'example',\n                paymentData,\n            });\n        });\n\n        it('should process additional action', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue('error');\n\n            await strategy.execute(payload);\n\n            expect(processor.processAdditionalAction).toHaveBeenCalledWith('error');\n        });\n\n        it('should initiate payer action', async () => {\n            jest.spyOn(scriptLoader, 'getPayPalGooglePaySdk').mockResolvedValue({\n                Googlepay: jest.fn().mockReturnValue({\n                    config: jest.fn(),\n                    confirmOrder: jest\n                        .fn()\n                        .mockResolvedValue({ status: ConfirmOrderStatus.PayerActionRequired }),\n                    initiatePayerAction: jest.fn(),\n                }),\n            });\n\n            const googlePayPaymentMethod = getPayPalCommerce();\n\n            isGooglePayPaypalCommercePaymentMethod(googlePayPaymentMethod);\n\n            const sdk = await scriptLoader.getPayPalGooglePaySdk(googlePayPaymentMethod, 'USD');\n\n            await strategy.execute(payload);\n\n            expect(sdk.Googlepay().initiatePayerAction).toHaveBeenCalled();\n        });\n\n        describe('should fail if:', () => {\n            test('payment is missing', async () => {\n                const execute = strategy.execute({});\n\n                await expect(execute).rejects.toThrow(PaymentArgumentInvalidError);\n            });\n\n            test('methodId is empty', async () => {\n                const execute = strategy.execute({\n                    payment: {\n                        methodId: '',\n                    },\n                });\n\n                await expect(execute).rejects.toThrow(PaymentArgumentInvalidError);\n            });\n\n            test('nonce is missing', async () => {\n                const execute = () => strategy.execute(payload);\n\n                jest.spyOn(processor, 'getNonce').mockRejectedValue(\n                    new MissingDataError(MissingDataErrorType.MissingPaymentToken),\n                );\n\n                await expect(execute()).rejects.toThrow(MissingDataError);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-paypal-commerce/google-pay-paypal-commerce-payment-strategy.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PayPalCommerceSdk } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\n\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../google-pay-payment-strategy';\nimport { GooglePayInitializationData, GooglePayPayPalCommerceInitializationData } from '../types';\n\nimport { ConfirmOrderData, ConfirmOrderStatus } from './types';\n\nexport default class GooglePayPaypalCommercePaymentStrategy extends GooglePayPaymentStrategy {\n    constructor(\n        _paymentIntegrationService: PaymentIntegrationService,\n        _googlePayPaymentProcessor: GooglePayPaymentProcessor,\n        private _payPalCommerceSdk: PayPalCommerceSdk,\n        private _requestSender: RequestSender,\n    ) {\n        super(_paymentIntegrationService, _googlePayPaymentProcessor);\n    }\n\n    async execute({ payment }: OrderRequestBody): Promise<void> {\n        if (!payment?.methodId) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const state = this._paymentIntegrationService.getState();\n        const cartId = state.getCartOrThrow().id;\n        const { initializationData } = state.getPaymentMethodOrThrow<GooglePayInitializationData>(\n            this._getMethodId(),\n        );\n        const { orderId } = await this.getOrderId(cartId);\n\n        const { card_information } = initializationData || {};\n        const nonce = await this._googlePayPaymentProcessor.getNonce(payment.methodId);\n\n        const confirmOrderData = {\n            tokenizationData: {\n                type: 'PAYMENT_GATEWAY',\n                token: atob(nonce),\n            },\n            info: {\n                cardNetwork: card_information?.type || '',\n                cardDetails: card_information?.number || '',\n            },\n            type: 'CARD',\n        };\n\n        await this.confirmOrder(orderId, confirmOrderData);\n        await this._paymentIntegrationService.submitOrder();\n\n        try {\n            const paymentData = {\n                formattedPayload: {\n                    method_id: payment.methodId,\n                    paypal_account: {\n                        order_id: orderId,\n                    },\n                },\n            };\n\n            await this._paymentIntegrationService.submitPayment({\n                methodId: payment.methodId,\n                paymentData,\n            });\n        } catch (error) {\n            await this._googlePayPaymentProcessor.processAdditionalAction(error);\n        }\n    }\n\n    private async confirmOrder(orderId: string, confirmOrderData: ConfirmOrderData) {\n        const state = this._paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<GooglePayPayPalCommerceInitializationData>(\n                this._getMethodId(),\n            );\n\n        if (!paymentMethod.initializationData) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const currencyCode = state.getCartOrThrow().currency.code;\n\n        const payPalSDK = await this._payPalCommerceSdk.getPayPalGooglePaySdk(\n            paymentMethod,\n            currencyCode,\n            state.getLocale(),\n            true,\n        );\n\n        const { status } = await payPalSDK\n            .Googlepay()\n            .confirmOrder({ orderId, paymentMethodData: confirmOrderData });\n\n        if (status === ConfirmOrderStatus.PayerActionRequired) {\n            await payPalSDK.Googlepay().initiatePayerAction({ orderId });\n\n            return Promise.resolve();\n        }\n\n        if (status !== ConfirmOrderStatus.Approved) {\n            throw new InvalidArgumentError('Payment is not approved.');\n        }\n\n        return Promise.resolve();\n    }\n\n    private async getOrderId(cartId: string): Promise<{ orderId: string }> {\n        const url = '/api/storefront/payments/googlepaypaypalcommercecheckout';\n        const requestData = {\n            cartId,\n            shouldSaveInstrument: false,\n        };\n\n        const { body } = await this._requestSender.post<{ orderId: string }>(url, {\n            headers: {\n                'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                'Content-Type': ContentType.Json,\n                ...SDK_VERSION_HEADERS,\n            },\n            body: requestData,\n        });\n\n        return body;\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-paypal-commerce/types.ts",
    "content": "export type FundingType = string[];\nexport type EnableFundingType = FundingType | string;\n\n/**\n *\n * PayPal Commerce SDK\n *\n */\nexport interface PayPalSDK {\n    Googlepay: () => {\n        config: () => Promise<GooglePayConfig>;\n        confirmOrder: (confirmOrderConfig: ConfirmOrderConfig) => Promise<{ status: string }>;\n        initiatePayerAction: (payerActionConfig: PayerActionConfig) => Promise<void>;\n    };\n}\n\ninterface ConfirmOrderConfig {\n    orderId: string;\n    paymentMethodData: ConfirmOrderData;\n}\n\ninterface PayerActionConfig {\n    orderId: string;\n}\n\nexport enum ConfirmOrderStatus {\n    Approved = 'APPROVED',\n    PayerActionRequired = 'PAYER_ACTION_REQUIRED',\n}\n\nexport interface PayPalCommerceHostWindow extends Window {\n    paypal?: PayPalSDK;\n}\n\nexport interface PayPalCommerceScriptParams {\n    options: {\n        'client-id'?: string;\n        'merchant-id'?: string;\n        'buyer-country'?: string;\n        'disable-funding'?: FundingType;\n        'enable-funding'?: EnableFundingType;\n        currency?: string;\n        commit?: boolean;\n        intent?: PayPalCommerceIntent;\n        components?: ComponentsScriptType;\n    };\n    attributes: {\n        'data-client-token'?: string;\n        'data-partner-attribution-id'?: string;\n    };\n}\n\nexport enum PayPalCommerceIntent {\n    AUTHORIZE = 'authorize',\n    CAPTURE = 'capture',\n}\n\nexport type ComponentsScriptType = Array<\n    | 'buttons'\n    | 'funding-eligibility'\n    | 'hosted-fields'\n    | 'messages'\n    | 'payment-fields'\n    | 'legal'\n    | 'googlepay'\n    | 'card-fields'\n>;\n\nexport interface GooglePayConfig {\n    allowedPaymentMethods: AllowedPaymentMethods[];\n    apiVersion: number;\n    apiVersionMinor: number;\n    countryCode: string;\n    isEligible: boolean;\n    merchantInfo: {\n        merchantId: string;\n        merchantOrigin: string;\n    };\n}\n\nexport interface AllowedPaymentMethods {\n    type: string;\n    parameters: {\n        allowedAuthMethods: string[];\n        allowedCardNetworks: string[];\n        billingAddressRequired: boolean;\n        assuranceDetailsRequired: boolean;\n        billingAddressParameters: {\n            format: string;\n        };\n    };\n    tokenizationSpecification: {\n        type: string;\n        parameters: {\n            gateway: string;\n            gatewayMerchantId: string;\n        };\n    };\n}\n\nexport interface PayPalGoogleSdk {\n    version: string;\n    getCorrelationID: () => void;\n    Googlepay: () => {\n        config: () => Promise<GooglePayConfig>;\n        confirmOrder: (arg0: {\n            orderId: string;\n            paymentMethodData: ConfirmOrderData;\n        }) => Promise<{ status: string }>;\n        initiatePayerAction: () => void;\n    };\n    FUNDING: Record<string, string>;\n}\n\nexport interface ConfirmOrderData {\n    tokenizationData: {\n        type: string;\n        token: string;\n    };\n    info: {\n        cardNetwork: string;\n        cardDetails: string;\n    };\n    type: string;\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-script-loader.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GooglePayScriptLoader, { GOOGLE_PAY_LIBRARY } from './google-pay-script-loader';\nimport {\n    GooglePayHostWindow,\n    GooglePaymentsClient,\n    GooglePaymentsClientConstructor,\n} from './types';\n\ndescribe('GooglePayScriptLoader', () => {\n    let scriptLoader: ScriptLoader;\n    let googlePayWindow: GooglePayHostWindow;\n    let googlePayScriptLoader: GooglePayScriptLoader;\n    let googlePaymentsClientMock: GooglePaymentsClient;\n    let googlePaymentsClientConstructorMock: GooglePaymentsClientConstructor;\n\n    beforeEach(() => {\n        scriptLoader = createScriptLoader();\n        googlePayWindow = window;\n        googlePayScriptLoader = new GooglePayScriptLoader(scriptLoader);\n        googlePaymentsClientMock = {} as GooglePaymentsClient;\n        googlePaymentsClientConstructorMock = jest.fn(() => googlePaymentsClientMock);\n\n        jest.spyOn(scriptLoader, 'loadScript').mockImplementation(() => {\n            googlePayWindow.google = {\n                payments: {\n                    api: {\n                        PaymentsClient: googlePaymentsClientConstructorMock,\n                    },\n                },\n            };\n\n            return Promise.resolve();\n        });\n    });\n\n    describe('#getGooglePaymentsClient', () => {\n        it('should load the Google Pay API JavaScript library successfully', async () => {\n            await googlePayScriptLoader.getGooglePaymentsClient();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(GOOGLE_PAY_LIBRARY);\n        });\n\n        it('should initialize a PRODUCTION PaymentsClient object successfully', async () => {\n            await googlePayScriptLoader.getGooglePaymentsClient();\n\n            expect(googlePaymentsClientConstructorMock).toHaveBeenCalledWith({\n                environment: 'PRODUCTION',\n            });\n        });\n\n        it('should initialize a TEST PaymentsClient object successfully', async () => {\n            await googlePayScriptLoader.getGooglePaymentsClient(true);\n\n            expect(googlePaymentsClientConstructorMock).toHaveBeenCalledWith({\n                environment: 'TEST',\n            });\n        });\n\n        it('should initialize ONE PaymentsClient object successfully', async () => {\n            await googlePayScriptLoader.getGooglePaymentsClient();\n            await googlePayScriptLoader.getGooglePaymentsClient();\n\n            expect(googlePaymentsClientConstructorMock).toHaveBeenCalledTimes(1);\n        });\n\n        it('should return a PaymentsClient object successfully', async () => {\n            const paymentsClient = await googlePayScriptLoader.getGooglePaymentsClient();\n\n            expect(paymentsClient).toEqual(googlePaymentsClientMock);\n        });\n\n        it('should return the SAME PaymentsClient object successfully', async () => {\n            const paymentsClientA = await googlePayScriptLoader.getGooglePaymentsClient();\n            const paymentsClientB = await googlePayScriptLoader.getGooglePaymentsClient();\n\n            expect(paymentsClientA).toBe(paymentsClientB);\n        });\n\n        it('should fail to load the Google Pay API JavaScript library', async () => {\n            jest.spyOn(scriptLoader, 'loadScript').mockImplementationOnce(() => {\n                delete googlePayWindow.google;\n\n                return Promise.resolve();\n            });\n\n            const paymentsClientPromise = googlePayScriptLoader.getGooglePaymentsClient();\n\n            await expect(paymentsClientPromise).rejects.toThrow(\n                PaymentMethodClientUnavailableError,\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayHostWindow, GooglePaymentsClient, GooglePayPaymentOptions } from './types';\n\nexport const GOOGLE_PAY_LIBRARY = 'https://pay.google.com/gp/p/js/pay.js';\n\nexport default class GooglePayScriptLoader {\n    private _paymentsClient?: GooglePaymentsClient;\n    private _window: GooglePayHostWindow = window;\n\n    constructor(private _scriptLoader: ScriptLoader) {}\n\n    async getGooglePaymentsClient(\n        testMode = false,\n        options?: GooglePayPaymentOptions,\n    ): Promise<GooglePaymentsClient> {\n        await this._scriptLoader.loadScript(GOOGLE_PAY_LIBRARY);\n\n        if (!this._window.google) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        if (this._paymentsClient === undefined) {\n            this._paymentsClient = new this._window.google.payments.api.PaymentsClient({\n                environment: testMode ? 'TEST' : 'PRODUCTION',\n                ...(options ?? {}),\n            });\n        }\n\n        return this._paymentsClient;\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-stripe/create-google-pay-stripe-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayButtonStrategy from '../google-pay-button-strategy';\n\nimport createGooglePayStripeButtonStrategy from './create-google-pay-stripe-button-strategy';\n\ndescribe('createGooglePayStripeButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay stripe button strategy', () => {\n        const strategy = createGooglePayStripeButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-stripe/create-google-pay-stripe-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { StripeScriptLoader } from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport createGooglePayScriptLoader from '../factories/create-google-pay-script-loader';\nimport GooglePayButtonStrategy from '../google-pay-button-strategy';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\n\nimport GooglePayStripeGateway from './google-pay-stripe-gateway';\n\nconst createGooglePayStripeButtonStrategy: CheckoutButtonStrategyFactory<\n    GooglePayButtonStrategy\n> = (paymentIntegrationService) =>\n    new GooglePayButtonStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayStripeGateway(\n                paymentIntegrationService,\n                new StripeScriptLoader(getScriptLoader()),\n            ),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayStripeButtonStrategy, [\n    { id: 'googlepaystripe' },\n    { id: 'googlepaystripeupe' },\n    { id: 'googlepaystripeocs' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-stripe/create-google-pay-stripe-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../google-pay-customer-strategy';\n\nimport createGooglePayStripeCustomerStrategy from './create-google-pay-stripe-customer-strategy';\n\ndescribe('createGooglePayStripeCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay stripe customer strategy', () => {\n        const storeConfigMock = getConfig().storeConfig;\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValueOnce(\n            storeConfigMock,\n        );\n\n        const strategy = createGooglePayStripeCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-stripe/create-google-pay-stripe-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { StripeScriptLoader } from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport createGooglePayScriptLoader from '../factories/create-google-pay-script-loader';\nimport GooglePayCustomerStrategy from '../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\n\nimport GooglePayStripeGateway from './google-pay-stripe-gateway';\n\nconst createGooglePayStripeCustomerStrategy: CustomerStrategyFactory<GooglePayCustomerStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayStripeGateway(\n                paymentIntegrationService,\n                new StripeScriptLoader(getScriptLoader()),\n            ),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayStripeCustomerStrategy, [\n    { id: 'googlepaystripe' },\n    { id: 'googlepaystripeocs' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-stripe/create-google-pay-stripe-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayPaymentStrategy from '../google-pay-payment-strategy';\n\nimport createGooglePayStripePaymentStrategy from './create-google-pay-stripe-payment-strategy';\n\ndescribe('createGooglePayStripePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay stripe payment strategy', () => {\n        const strategy = createGooglePayStripePaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-stripe/create-google-pay-stripe-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { StripeScriptLoader } from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport createGooglePayScriptLoader from '../factories/create-google-pay-script-loader';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../google-pay-payment-strategy';\n\nimport GooglePayStripeGateway from './google-pay-stripe-gateway';\n\nconst createGooglePayStripePaymentStrategy: PaymentStrategyFactory<GooglePayPaymentStrategy> = (\n    paymentIntegrationService,\n) =>\n    new GooglePayPaymentStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayStripeGateway(\n                paymentIntegrationService,\n                new StripeScriptLoader(getScriptLoader()),\n            ),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n\nexport default toResolvableModule(createGooglePayStripePaymentStrategy, [\n    { id: 'googlepaystripe' },\n    { id: 'googlepaystripeupe' },\n    { id: 'googlepaystripeocs' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-stripe/create-google-pay-stripeupe-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayCustomerStrategy from '../google-pay-customer-strategy';\n\nimport createGooglePayStripeUpeCustomerStrategy from './create-google-pay-stripeupe-customer-strategy';\n\ndescribe('createGooglePayStripeUpeCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates google pay stripe upe customer strategy', () => {\n        const storeConfigMock = getConfig().storeConfig;\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValueOnce(\n            storeConfigMock,\n        );\n\n        const strategy = createGooglePayStripeUpeCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(GooglePayCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-stripe/create-google-pay-stripeupe-customer-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { StripeScriptLoader } from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport createGooglePayScriptLoader from '../factories/create-google-pay-script-loader';\nimport GooglePayCustomerStrategy from '../google-pay-customer-strategy';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\n\nimport GooglePayStripeGateway from './google-pay-stripe-gateway';\n\nconst createGooglePayStripeUpeCustomerStrategy: CustomerStrategyFactory<\n    GooglePayCustomerStrategy\n> = (paymentIntegrationService) => {\n    return new GooglePayCustomerStrategy(\n        paymentIntegrationService,\n        new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            new GooglePayStripeGateway(\n                paymentIntegrationService,\n                new StripeScriptLoader(getScriptLoader()),\n            ),\n            createRequestSender(),\n            createFormPoster(),\n        ),\n    );\n};\n\nexport default toResolvableModule(createGooglePayStripeUpeCustomerStrategy, [\n    { id: 'googlepaystripeupe' },\n]);\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-stripe/google-pay-stripe-gateway.spec.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    NotInitializedError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport { getStripeJsMock, StripeScriptLoader } from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport createGooglePayScriptLoader from '../factories/create-google-pay-script-loader';\nimport GooglePayGateway from '../gateways/google-pay-gateway';\nimport GooglePayPaymentProcessor from '../google-pay-payment-processor';\nimport GooglePayPaymentStrategy from '../google-pay-payment-strategy';\nimport getCardDataResponse from '../mocks/google-pay-card-data-response.mock';\nimport { getGeneric, getStripe } from '../mocks/google-pay-payment-method.mock';\n\nimport GooglePayStripeGateway from './google-pay-stripe-gateway';\n\ndescribe('GooglePayStripeGateway', () => {\n    let gateway: GooglePayStripeGateway;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let scriptLoader: StripeScriptLoader;\n    let strategy: GooglePayPaymentStrategy;\n    let processor: GooglePayPaymentProcessor;\n    let formPoster: FormPoster;\n    let payload: OrderRequestBody;\n    const error3DS = {\n        body: {\n            errors: [{ code: 'three_d_secure_required' }],\n            three_ds_result: {\n                token: 'token_3ds',\n            },\n        },\n    };\n\n    beforeEach(() => {\n        formPoster = {\n            postForm: jest.fn(),\n        } as unknown as FormPoster;\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        scriptLoader = new StripeScriptLoader(getScriptLoader());\n        gateway = new GooglePayStripeGateway(paymentIntegrationService, scriptLoader);\n        processor = new GooglePayPaymentProcessor(\n            createGooglePayScriptLoader(),\n            gateway,\n            createRequestSender(),\n            formPoster,\n        );\n        strategy = new GooglePayPaymentStrategy(paymentIntegrationService, processor);\n\n        payload = {\n            payment: {\n                methodId: 'stripe',\n            },\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getStripe(),\n        );\n        jest.spyOn(processor, 'initialize').mockResolvedValue(undefined);\n        jest.spyOn(processor, 'getNonce').mockResolvedValue('nonceValue');\n        jest.spyOn(scriptLoader, 'getStripeClient').mockResolvedValue(getStripeJsMock());\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('is a special type of GooglePayGateway', () => {\n        expect(gateway).toBeInstanceOf(GooglePayGateway);\n    });\n\n    describe('3DS', () => {\n        it('execute 3DS challenge successfully', async () => {\n            await gateway.initialize(getStripe);\n\n            const confirmCardPayment = jest.fn().mockReturnValue({\n                paymentIntent: 'paymentIntent',\n            });\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce({\n                body: {\n                    errors: [\n                        {\n                            code: 'three_d_secure_required',\n                        },\n                    ],\n                    three_ds_result: {\n                        token: 'token_3ds',\n                    },\n                },\n            });\n            jest.spyOn(scriptLoader, 'getStripeClient').mockResolvedValue({\n                ...getStripeJsMock(),\n                confirmCardPayment,\n            });\n\n            await strategy.execute(payload);\n\n            expect(confirmCardPayment).toHaveBeenCalledWith('token_3ds');\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n        });\n\n        it('should process additional action', async () => {\n            jest.spyOn(processor, 'processAdditionalAction').mockResolvedValue(undefined);\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue('error');\n\n            await strategy.execute(payload);\n\n            expect(processor.processAdditionalAction).toHaveBeenCalledWith('error', 'stripe');\n        });\n\n        it('execute failed 3DS challenge', async () => {\n            await gateway.initialize(getStripe);\n\n            const confirmCardPayment = jest.fn().mockReturnValue({\n                error: {\n                    type: 'validation_error',\n                    message: 'Some Stripe error message',\n                },\n            });\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce({\n                body: {\n                    errors: [\n                        {\n                            code: 'three_d_secure_required',\n                        },\n                    ],\n                    three_ds_result: {\n                        token: 'token_3ds',\n                    },\n                },\n            });\n            jest.spyOn(scriptLoader, 'getStripeClient').mockResolvedValue({\n                ...getStripeJsMock(),\n                confirmCardPayment,\n            });\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                if (error instanceof Error) {\n                    expect(error.message).toBe('Some Stripe error message');\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                }\n            }\n        });\n\n        it('throws an error object if there is not a request error', async () => {\n            await gateway.initialize(getStripe);\n\n            const otherError = {\n                body: {\n                    errors: [\n                        {\n                            code: 'some other error',\n                        },\n                    ],\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(otherError);\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBe(otherError);\n            }\n        });\n\n        it('should return error if there is no methodId', async () => {\n            try {\n                await processor.processAdditionalAction('some error');\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('should call retrievePaymentIntent if confirmCardPayment failed', async () => {\n            await gateway.initialize(getStripe);\n\n            const confirmCardPayment = jest.fn().mockRejectedValue('error');\n            const retrievePaymentIntent = jest.fn().mockRejectedValue('error');\n\n            jest.spyOn(scriptLoader, 'getStripeClient').mockResolvedValueOnce({\n                ...getStripeJsMock(),\n                confirmCardPayment,\n                retrievePaymentIntent,\n            });\n\n            try {\n                await processor.processAdditionalAction(error3DS, 'stripe');\n            } catch (error) {\n                expect(retrievePaymentIntent).toHaveBeenCalledWith('token_3ds');\n            }\n        });\n\n        it('should call _isCancellationError if there is an error returned from Stripe', async () => {\n            await gateway.initialize(getStripe);\n\n            const stripeError = {\n                error: {\n                    payment_intent: {\n                        last_payment_error: {\n                            message: 'canceled',\n                        },\n                    },\n                },\n            };\n            const confirmCardPayment = jest.fn().mockRejectedValue('error');\n            const retrievePaymentIntent = jest.fn().mockReturnValue(stripeError);\n\n            jest.spyOn(scriptLoader, 'getStripeClient').mockResolvedValueOnce({\n                ...getStripeJsMock(),\n                confirmCardPayment,\n                retrievePaymentIntent,\n            });\n\n            try {\n                await processor.processAdditionalAction(error3DS, 'stripe');\n            } catch (e) {\n                expect(e).toBeInstanceOf(PaymentMethodCancelledError);\n            }\n        });\n\n        it('throw PaymentMethodFailedError if there is unknown Stripe error', async () => {\n            await gateway.initialize(getStripe);\n\n            const stripeError = {\n                error: {\n                    payment_intent: {\n                        last_payment_error: {\n                            message: 'some other error',\n                        },\n                    },\n                },\n            };\n            const confirmCardPayment = jest.fn().mockRejectedValue('error');\n            const retrievePaymentIntent = jest.fn().mockReturnValue(stripeError);\n\n            jest.spyOn(scriptLoader, 'getStripeClient').mockResolvedValueOnce({\n                ...getStripeJsMock(),\n                confirmCardPayment,\n                retrievePaymentIntent,\n            });\n\n            try {\n                await processor.processAdditionalAction(error3DS, 'stripe');\n            } catch (e) {\n                expect(e).toBeInstanceOf(PaymentMethodFailedError);\n            }\n        });\n\n        it('throw RequestError if there is no payment intent', async () => {\n            await gateway.initialize(getStripe);\n\n            const stripeError = true;\n            const confirmCardPayment = jest.fn().mockRejectedValue('error');\n            const retrievePaymentIntent = jest.fn().mockReturnValue(stripeError);\n\n            jest.spyOn(scriptLoader, 'getStripeClient').mockResolvedValueOnce({\n                ...getStripeJsMock(),\n                confirmCardPayment,\n                retrievePaymentIntent,\n            });\n\n            try {\n                await processor.processAdditionalAction(error3DS, 'stripe');\n            } catch (e) {\n                expect(e).toBeInstanceOf(RequestError);\n            }\n        });\n    });\n\n    describe('#mapToExternalCheckoutData', () => {\n        it('should map response to external checkout data', async () => {\n            const response = getCardDataResponse();\n\n            response.paymentMethodData.tokenizationData.token = '{\"id\":\"tok_f00b4r\"}';\n\n            const expectedData = {\n                nonce: 'tok_f00b4r',\n                card_information: {\n                    type: 'VISA',\n                    number: '1111',\n                },\n            };\n\n            const mappedData = await gateway.mapToExternalCheckoutData(response);\n\n            expect(mappedData).toStrictEqual(expectedData);\n        });\n\n        describe('should fail if:', () => {\n            test('nonce is not valid JSON', async () => {\n                const response = getCardDataResponse();\n\n                response.paymentMethodData.tokenizationData.token = 'm4lf0rm3d j50n';\n\n                const mapData = gateway.mapToExternalCheckoutData(response);\n\n                await expect(mapData).rejects.toThrow(InvalidArgumentError);\n            });\n\n            test('parsed nonce is not a GooglePayStripeTokenObject', async () => {\n                const mapData = gateway.mapToExternalCheckoutData(getCardDataResponse());\n\n                await expect(mapData).rejects.toThrow(MissingDataError);\n            });\n        });\n    });\n\n    describe('#getPaymentGatewayParameters', () => {\n        it('should return payment gateway parameters', async () => {\n            const expectedParams = {\n                gateway: 'stripe',\n                'stripe:version': '2026-02-31',\n                'stripe:publishableKey': 'pk_live_f00b4r/acct_f00b4r',\n            };\n\n            await gateway.initialize(getStripe);\n\n            expect(gateway.getPaymentGatewayParameters()).toStrictEqual(expectedParams);\n        });\n\n        describe('should fail if:', () => {\n            test('not initialized', () => {\n                expect(() => gateway.getPaymentGatewayParameters()).toThrow(NotInitializedError);\n            });\n\n            test('initializationData is not GooglePayStripeInitializationData', async () => {\n                await gateway.initialize(getGeneric);\n\n                expect(() => gateway.getPaymentGatewayParameters()).toThrow(MissingDataError);\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-stripe/google-pay-stripe-gateway.ts",
    "content": "import { includes, some } from 'lodash';\n\nimport {\n    InvalidArgumentError,\n    isRequestError,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    STRIPE_UPE_CLIENT_API_VERSION,\n    STRIPE_UPE_CLIENT_BETAS,\n    StripeJsVersion,\n    StripeScriptLoader,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport GooglePayGateway from '../gateways/google-pay-gateway';\nimport assertsIsGooglePayStripeInitializationData from '../guards/is-google-pay-stripe-initialization-data';\nimport isGooglePayStripeRequestError from '../guards/is-google-pay-stripe-request-error';\nimport assertIsGooglePayStripeTokenObject from '../guards/is-google-pay-stripe-token-object';\nimport {\n    GooglePayCardDataResponse,\n    GooglePaySetExternalCheckoutData,\n    GooglePayStripeGatewayParameters,\n    GooglePayStripeInitializationData,\n} from '../types';\n\nimport { StripeError, StripeUPEClient } from './types';\n\nexport default class GooglePayStripeGateway extends GooglePayGateway {\n    private stripeUPEClient?: StripeUPEClient;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private scriptLoader: StripeScriptLoader,\n    ) {\n        super('stripe', paymentIntegrationService);\n    }\n\n    async mapToExternalCheckoutData(\n        response: GooglePayCardDataResponse,\n    ): Promise<GooglePaySetExternalCheckoutData> {\n        const data = await super.mapToExternalCheckoutData(response);\n\n        let token: unknown;\n\n        try {\n            token = JSON.parse(data.nonce);\n        } catch (error) {\n            throw new InvalidArgumentError('Unable to parse response from Google Pay.');\n        }\n\n        assertIsGooglePayStripeTokenObject(token);\n\n        data.nonce = token.id;\n\n        return data;\n    }\n\n    getPaymentGatewayParameters(): GooglePayStripeGatewayParameters {\n        const data = this.getGooglePayInitializationData();\n\n        assertsIsGooglePayStripeInitializationData(data);\n\n        const { stripeVersion, stripePublishableKey, stripeConnectedAccount } = data;\n\n        return {\n            gateway: this.getGatewayIdentifier(),\n            'stripe:version': stripeVersion,\n            'stripe:publishableKey': `${stripePublishableKey}/${stripeConnectedAccount}`,\n        };\n    }\n\n    async processAdditionalAction(\n        error: unknown,\n        methodId?: string,\n    ): Promise<PaymentIntegrationSelectors | never> {\n        if (!methodId) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        if (!isRequestError(error) || !isGooglePayStripeRequestError(error.body)) {\n            throw error;\n        }\n\n        const shouldTrigger3DS = some(error.body.errors, { code: 'three_d_secure_required' });\n\n        if (shouldTrigger3DS) {\n            const initialization = this.getGooglePayInitializationData();\n\n            assertsIsGooglePayStripeInitializationData(initialization);\n\n            this.stripeUPEClient = await this.loadStripeJs(initialization, methodId);\n\n            const clientSecret = error.body.three_ds_result.token;\n            let result;\n            let catchedConfirmError = false;\n\n            try {\n                result = await this.stripeUPEClient.confirmCardPayment(clientSecret);\n            } catch (_) {\n                try {\n                    result = await this.stripeUPEClient.retrievePaymentIntent(clientSecret);\n                } catch (__) {\n                    catchedConfirmError = true;\n                }\n            }\n\n            if (result?.error) {\n                this._throwDisplayableStripeError(result.error);\n\n                if (this._isCancellationError(result.error)) {\n                    throw new PaymentMethodCancelledError();\n                }\n\n                throw new PaymentMethodFailedError();\n            }\n\n            if (!result?.paymentIntent && !catchedConfirmError) {\n                throw new RequestError();\n            }\n\n            return this.paymentIntegrationService.submitPayment({\n                methodId,\n                paymentData: { nonce: result?.paymentIntent?.id || clientSecret },\n            });\n        }\n\n        throw error;\n    }\n\n    private async loadStripeJs(\n        initializationData: GooglePayStripeInitializationData,\n        methodId: string,\n    ): Promise<StripeUPEClient> {\n        if (this.stripeUPEClient) {\n            return this.stripeUPEClient;\n        }\n\n        const locale = this.paymentIntegrationService.getState().getCartLocale();\n\n        if (methodId === 'googlepaystripeocs' && !!initializationData.useNewStripeJsVersion) {\n            return this.scriptLoader.getStripeClient(\n                initializationData,\n                locale,\n                StripeJsVersion.CLOVER,\n            );\n        }\n\n        return this.scriptLoader.getStripeClient(\n            initializationData,\n            locale,\n            StripeJsVersion.V3,\n            STRIPE_UPE_CLIENT_BETAS,\n            STRIPE_UPE_CLIENT_API_VERSION,\n        );\n    }\n\n    private _isCancellationError(stripeError: StripeError | undefined) {\n        return (\n            stripeError &&\n            stripeError.payment_intent.last_payment_error?.message?.indexOf('canceled') !== -1\n        );\n    }\n\n    private _throwDisplayableStripeError(stripeError: StripeError) {\n        if (\n            includes(['card_error', 'invalid_request_error', 'validation_error'], stripeError.type)\n        ) {\n            throw new Error(stripeError.message);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/google-pay-stripe/types.ts",
    "content": "export interface StripeUPEClient {\n    /**\n     * When called, it will confirm the PaymentIntent with data you provide and carry out 3DS or other next actions if they are required.\n     */\n    confirmCardPayment(clientSecret: string): Promise<StripeUpeResult>;\n\n    /**\n     * Retrieve a PaymentIntent using its client secret.\n     */\n    retrievePaymentIntent(clientSecret: string): Promise<StripeUpeResult>;\n}\n\ninterface StripeUpeResult {\n    paymentIntent?: PaymentIntent;\n    error?: StripeError;\n}\n\nexport interface StripeHostWindow extends Window {\n    bcStripeClient?: StripeUPEClient;\n    Stripe?(stripePublishableKey: string, options?: StripeConfigurationOptions): StripeUPEClient;\n}\n\n/**\n * The payment error encountered in the previous PaymentIntent confirmation. It will be cleared if the PaymentIntent is later updated for any reason.\n */\nexport interface LastPaymentError {\n    /**\n     * A human-readable message providing more details about the error. For card errors, these messages can be shown to your users.\n     */\n    message?: string;\n}\n\nexport interface StripeConfigurationOptions {\n    /**\n     * For usage with [Connect](https://stripe.com/docs/connect) only.\n     * Specifying a connected account ID (e.g., acct_24BFMpJ1svR5A89k) allows you to perform actions on behalf of that account.\n     */\n    stripeAccount: string;\n\n    /**\n     * Override your account's [API version](https://stripe.com/docs/api/versioning)\n     */\n    apiVersion?: string;\n\n    /**\n     * A locale used to globally configure localization in Stripe. Setting the locale here will localize error strings for all Stripe.js methods. It will also configure the locale for Elements and Checkout. Default is auto (Stripe detects the locale of the browser).\n     * Note that Checkout supports a slightly different set of locales than Stripe.js.\n     */\n    locale?: string;\n\n    betas?: string[];\n}\n\nexport interface PaymentIntent {\n    /**\n     * Unique identifier for the object.\n     */\n    id: string;\n\n    /**\n     * Status of this PaymentIntent. Read more about each PaymentIntent [status](https://stripe.com/docs/payments/intents#intent-statuses).\n     */\n    status: 'succeeded' | string;\n\n    /**\n     * The payment error encountered in the previous PaymentIntent confirmation. It will be cleared if the PaymentIntent is later updated for any reason.\n     */\n    last_payment_error: LastPaymentError | null;\n}\n\nexport interface StripeError {\n    /**\n     * type of error. When the error type is card_error or validation_error, you can display the error message in error.message directly to your user.\n     */\n    type: string;\n    /**\n     * A human-readable message providing more details about the error. For card errors, these messages can be shown to your users.\n     */\n    message?: string;\n\n    /**\n     * The PaymentIntent object.\n     */\n    payment_intent: PaymentIntent;\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-additional-action-processable.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport GooglePayGateway from '../gateways/google-pay-gateway';\nimport { GooglePayAdditionalActionProcessable } from '../types';\n\nimport isGooglePayAdditionalActionProcessable from './is-google-pay-additional-action-processable';\n\ndescribe('isGooglePayAdditionalActionProcessable', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('should be GooglePayAdditionalActionProcessable', () => {\n        const gateway = new (class\n            extends GooglePayGateway\n            implements GooglePayAdditionalActionProcessable\n        {\n            processAdditionalAction(error: unknown) {\n                return Promise.reject(error);\n            }\n        })('example', paymentIntegrationService);\n\n        expect(isGooglePayAdditionalActionProcessable(gateway)).toBe(true);\n    });\n\n    it('should NOT be GooglePayAdditionalActionProcessable', () => {\n        const gateway = new (class extends GooglePayGateway {})(\n            'example',\n            paymentIntegrationService,\n        );\n\n        expect(isGooglePayAdditionalActionProcessable(gateway)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-additional-action-processable.ts",
    "content": "import GooglePayGateway from '../gateways/google-pay-gateway';\nimport { GooglePayAdditionalActionProcessable } from '../types';\n\nexport default function isGooglePayAdditionalActionProcessable(\n    gateway: GooglePayGateway,\n): gateway is GooglePayGateway & GooglePayAdditionalActionProcessable {\n    return 'processAdditionalAction' in gateway;\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-authorizenet-initialization-data.spec.ts",
    "content": "import getGooglePayBaseInitializationData from '../mocks/google-pay-base-initialization-data.mock';\n\nimport assertsIsGooglePayAuthorizeNetInitializationData from './is-google-pay-authorizenet-initialization-data';\n\ndescribe('assertsIsGooglePayAuthorizeNetInitializationData', () => {\n    it('should be Authorize Net initialization data', () => {\n        const data = {\n            ...getGooglePayBaseInitializationData(),\n            paymentGatewayId: '1234567',\n        };\n\n        expect(() => assertsIsGooglePayAuthorizeNetInitializationData(data)).not.toThrow();\n    });\n\n    it('should NOT be Authorize Net initialization data', () => {\n        const data = {\n            ...getGooglePayBaseInitializationData(),\n            checkoutcomkey: '1234567',\n        };\n\n        expect(() => assertsIsGooglePayAuthorizeNetInitializationData(data)).toThrow();\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-authorizenet-initialization-data.ts",
    "content": "import {\n    MissingDataError,\n    MissingDataErrorType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayAuthorizeNetInitializationData, GooglePayInitializationData } from '../types';\n\nfunction isGooglePayAuthorizeNetInitializationData(\n    data: GooglePayInitializationData,\n): data is GooglePayAuthorizeNetInitializationData {\n    return 'paymentGatewayId' in data;\n}\n\nexport default function assertsIsGooglePayAuthorizeNetInitializationData(\n    data: GooglePayInitializationData,\n): asserts data is GooglePayAuthorizeNetInitializationData {\n    if (!isGooglePayAuthorizeNetInitializationData(data)) {\n        throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-braintree-token-object.spec.ts",
    "content": "import assertIsGooglePayBraintreeTokenObject from './is-google-pay-braintree-token-object';\n\ndescribe('isGooglePayBraintreeTokenObject', () => {\n    it('should be a GooglePayStripeTokenObject', () => {\n        const token = {\n            androidPayCards: [],\n        };\n\n        expect(() => assertIsGooglePayBraintreeTokenObject(token)).not.toThrow();\n    });\n\n    it('should NOT be a isGooglePayBraintreeTokenObject', () => {\n        const token = {\n            protocolVersion: 'foo',\n            signature: 'bar',\n            signedMessage: 'baz',\n        };\n\n        expect(() => assertIsGooglePayBraintreeTokenObject(token)).toThrow();\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-braintree-token-object.ts",
    "content": "import {\n    MissingDataError,\n    MissingDataErrorType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayBraintreeTokenObject } from '../types';\n\nfunction isGooglePayBraintreeTokenObject(token: unknown): token is GooglePayBraintreeTokenObject {\n    return typeof token === 'object' && token !== null && 'androidPayCards' in token;\n}\n\nexport default function assertIsGooglePayBraintreeTokenObject(\n    token: unknown,\n): asserts token is GooglePayBraintreeTokenObject {\n    if (!isGooglePayBraintreeTokenObject(token)) {\n        throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-card-network-key.spec.ts",
    "content": "import isGooglePayCardNetworkKey from './is-google-pay-card-network-key';\n\ndescribe('isGooglePayCardNetwork', () => {\n    test('AMEX is a key of GooglePayCardNetwork', () => {\n        expect(isGooglePayCardNetworkKey('AMEX')).toBe(true);\n    });\n\n    test('DISCOVER is a key of GooglePayCardNetwork', () => {\n        expect(isGooglePayCardNetworkKey('DISCOVER')).toBe(true);\n    });\n\n    test('INTERAC is a key of GooglePayCardNetwork', () => {\n        expect(isGooglePayCardNetworkKey('INTERAC')).toBe(true);\n    });\n\n    test('JCB is a key of GooglePayCardNetwork', () => {\n        expect(isGooglePayCardNetworkKey('JCB')).toBe(true);\n    });\n\n    test('MC is a key of GooglePayCardNetwork', () => {\n        expect(isGooglePayCardNetworkKey('MC')).toBe(true);\n    });\n\n    test('VISA is a key of GooglePayCardNetwork', () => {\n        expect(isGooglePayCardNetworkKey('VISA')).toBe(true);\n    });\n\n    test('FOO is NOT a key of GooglePayCardNetwork', () => {\n        expect(isGooglePayCardNetworkKey('FOO')).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-card-network-key.ts",
    "content": "import { GooglePayCardNetwork } from '../types';\n\nexport default function isGooglePayCardNetworkKey(\n    card: string,\n): card is keyof typeof GooglePayCardNetwork {\n    return card in GooglePayCardNetwork;\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-checkoutcom-initialization-data.spec.ts",
    "content": "import getGooglePayBaseInitializationData from '../mocks/google-pay-base-initialization-data.mock';\n\nimport assertIsGooglePayCheckoutComInitializationData from './is-google-pay-checkoutcom-initialization-data';\n\ndescribe('assertIsGooglePayCheckoutComInitializationData', () => {\n    it('should be Checkout Com initialization data', () => {\n        const data = {\n            ...getGooglePayBaseInitializationData(),\n            checkoutcomkey: '1234567',\n        };\n\n        expect(() => assertIsGooglePayCheckoutComInitializationData(data)).not.toThrow();\n    });\n\n    it('should NOT be Checkout Com initialization data', () => {\n        const data = {\n            ...getGooglePayBaseInitializationData(),\n            paymentGatewayId: '1234567',\n        };\n\n        expect(() => assertIsGooglePayCheckoutComInitializationData(data)).toThrow();\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-checkoutcom-initialization-data.ts",
    "content": "import {\n    MissingDataError,\n    MissingDataErrorType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayCheckoutComInitializationData, GooglePayInitializationData } from '../types';\n\nfunction isGooglePayCheckoutComInitializationData(\n    data: GooglePayInitializationData,\n): data is GooglePayCheckoutComInitializationData {\n    return 'checkoutcomkey' in data;\n}\n\nexport default function assertIsGooglePayCheckoutComInitializationData(\n    data: GooglePayInitializationData,\n): asserts data is GooglePayCheckoutComInitializationData {\n    if (!isGooglePayCheckoutComInitializationData(data)) {\n        throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-error-object.spec.ts",
    "content": "import isGooglePayErrorObject from './is-google-pay-error-object';\n\ndescribe('isGooglePayErrorObject', () => {\n    it('should be Google Pay error object', () => {\n        expect(\n            isGooglePayErrorObject({\n                statusCode: 'foo',\n            }),\n        ).toBe(true);\n    });\n\n    describe('should NOT be Google Pay error object if:', () => {\n        test('string', () => {\n            expect(isGooglePayErrorObject('error')).toBe(false);\n        });\n\n        test('null', () => {\n            expect(isGooglePayErrorObject(null)).toBe(false);\n        });\n\n        test('empty', () => {\n            expect(isGooglePayErrorObject({})).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-error-object.ts",
    "content": "import { GooglePayErrorObject } from '../types';\n\nexport default function isGooglePayErrorObject(error: unknown): error is GooglePayErrorObject {\n    return typeof error === 'object' && error !== null && 'statusCode' in error;\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-key.spec.ts",
    "content": "import isGooglePayKey from './is-google-pay-key';\n\ndescribe('isGooglePayKey', () => {\n    describe('should be a valid key to pass initialization options:', () => {\n        test('googlepayadyenv2', () => {\n            expect(isGooglePayKey('googlepayadyenv2')).toBe(true);\n        });\n\n        test('googlepayadyenv3', () => {\n            expect(isGooglePayKey('googlepayadyenv3')).toBe(true);\n        });\n\n        test('googlepayauthorizenet', () => {\n            expect(isGooglePayKey('googlepayauthorizenet')).toBe(true);\n        });\n\n        test('googlepaybnz', () => {\n            expect(isGooglePayKey('googlepaybnz')).toBe(true);\n        });\n\n        test('googlepaybraintree', () => {\n            expect(isGooglePayKey('googlepaybraintree')).toBe(true);\n        });\n\n        test('googlepaycheckoutcom', () => {\n            expect(isGooglePayKey('googlepaycheckoutcom')).toBe(true);\n        });\n\n        test('googlepaycybersourcev2', () => {\n            expect(isGooglePayKey('googlepaycybersourcev2')).toBe(true);\n        });\n\n        test('googlepayorbital', () => {\n            expect(isGooglePayKey('googlepayorbital')).toBe(true);\n        });\n\n        test('googlepaystripe', () => {\n            expect(isGooglePayKey('googlepaystripe')).toBe(true);\n        });\n\n        test('googlepaystripeupe', () => {\n            expect(isGooglePayKey('googlepaystripeupe')).toBe(true);\n        });\n\n        test('googlepayworldpayaccess', () => {\n            expect(isGooglePayKey('googlepayworldpayaccess')).toBe(true);\n        });\n    });\n\n    it('should NOT be a valid key to pass initialization options', () => {\n        expect(isGooglePayKey('foo')).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-key.ts",
    "content": "import { GooglePayKey } from '../google-pay-payment-initialize-options';\n\nexport default function isGooglePayKey(key: string): key is GooglePayKey {\n    return Object.values<string>(GooglePayKey).includes(key);\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-paypal-commerce-payment-method.ts",
    "content": "import {\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayInitializationData, GooglePayPayPalCommerceInitializationData } from '../types';\n\nfunction isGooglePayPaypalCommercePaymentMethod(\n    data: PaymentMethod<GooglePayInitializationData>,\n): data is PaymentMethod<GooglePayPayPalCommerceInitializationData> {\n    if (data.initializationData) {\n        return (\n            'attributionId' in data.initializationData &&\n            'isVenmoEnabled' in data.initializationData &&\n            'isGooglePayEnabled' in data.initializationData &&\n            'isPayPalCreditAvailable' in data.initializationData\n        );\n    }\n\n    return false;\n}\n\nexport default function assertsIsGooglePayPayPalCommercePaymentMethod(\n    data: PaymentMethod<GooglePayInitializationData>,\n): asserts data is PaymentMethod<GooglePayPayPalCommerceInitializationData> {\n    if (!isGooglePayPaypalCommercePaymentMethod(data)) {\n        throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-stripe-initialization-data.spec.ts",
    "content": "import getGooglePayBaseInitializationData from '../mocks/google-pay-base-initialization-data.mock';\n\nimport assertsIsGooglePayStripeInitializationData from './is-google-pay-stripe-initialization-data';\n\ndescribe('assertsIsGooglePayStripeInitializationData', () => {\n    it('should be Stripe initialization data', () => {\n        const data = {\n            ...getGooglePayBaseInitializationData(),\n            stripeConnectedAccount: 'foo',\n            stripePublishableKey: 'bar',\n            stripeVersion: 'baz',\n        };\n\n        expect(() => assertsIsGooglePayStripeInitializationData(data)).not.toThrow();\n    });\n\n    it('should NOT be Stripe initialization data', () => {\n        const data = {\n            ...getGooglePayBaseInitializationData(),\n            checkoutcomkey: '1234567',\n        };\n\n        expect(() => assertsIsGooglePayStripeInitializationData(data)).toThrow();\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-stripe-initialization-data.ts",
    "content": "import {\n    MissingDataError,\n    MissingDataErrorType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayInitializationData, GooglePayStripeInitializationData } from '../types';\n\nfunction isGooglePayStripeInitializationData(\n    data: GooglePayInitializationData,\n): data is GooglePayStripeInitializationData {\n    return (\n        'stripeConnectedAccount' in data &&\n        'stripePublishableKey' in data &&\n        'stripeVersion' in data\n    );\n}\n\nexport default function assertsIsGooglePayStripeInitializationData(\n    data: GooglePayInitializationData,\n): asserts data is GooglePayStripeInitializationData {\n    if (!isGooglePayStripeInitializationData(data)) {\n        throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-stripe-request-error.ts",
    "content": "interface AdditionalActionError {\n    three_ds_result: { token: string };\n    errors: Array<{ code: string }>;\n}\n\nconst isGooglePayStripeRequestError = (body: unknown): body is AdditionalActionError => {\n    return (\n        typeof body === 'object' && body !== null && 'three_ds_result' in body && 'errors' in body\n    );\n};\n\nexport default isGooglePayStripeRequestError;\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-stripe-token-object.spec.ts",
    "content": "import assertIsGooglePayStripeTokenObject from './is-google-pay-stripe-token-object';\n\ndescribe('isGooglePayStripeTokenObject', () => {\n    it('should be a GooglePayStripeTokenObject', () => {\n        const token = {\n            id: 'tk_1234567',\n        };\n\n        expect(() => assertIsGooglePayStripeTokenObject(token)).not.toThrow();\n    });\n\n    it('should NOT be a GooglePayStripeTokenObject', () => {\n        const token = {\n            protocolVersion: 'foo',\n            signature: 'bar',\n            signedMessage: 'baz',\n        };\n\n        expect(() => assertIsGooglePayStripeTokenObject(token)).toThrow();\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-stripe-token-object.ts",
    "content": "import {\n    MissingDataError,\n    MissingDataErrorType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayStripeTokenObject } from '../types';\n\nfunction isGooglePayStripeTokenObject(token: unknown): token is GooglePayStripeTokenObject {\n    return typeof token === 'object' && token !== null && 'id' in token;\n}\n\nexport default function assertIsGooglePayStripeTokenObject(\n    token: unknown,\n): asserts token is GooglePayStripeTokenObject {\n    if (!isGooglePayStripeTokenObject(token)) {\n        throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-td-online-mart-additional-action.spec.ts",
    "content": "import { isTdOnlineMartAdditionalAction } from './is-google-pay-td-online-mart-additional-action';\n\ndescribe('isTdOnlineMartAdditionalAction', () => {\n    it('receive not request error', () => {\n        expect(isTdOnlineMartAdditionalAction({})).toBe(false);\n    });\n\n    it('error does not contain 3DS error code', () => {\n        expect(\n            isTdOnlineMartAdditionalAction({\n                body: {\n                    errors: [\n                        {\n                            code: 'any_code',\n                        },\n                    ],\n                    three_ds_result: {},\n                },\n            }),\n        ).toBe(false);\n    });\n\n    it('error does not contain 3DS results', () => {\n        expect(\n            isTdOnlineMartAdditionalAction({\n                body: {\n                    errors: [\n                        {\n                            code: 'three_d_secure_required',\n                        },\n                    ],\n                },\n            }),\n        ).toBe(false);\n    });\n\n    it('error is a TD bank additional action error', () => {\n        expect(\n            isTdOnlineMartAdditionalAction({\n                body: {\n                    errors: [\n                        {\n                            code: 'any_code',\n                        },\n                        {\n                            code: 'three_d_secure_required',\n                        },\n                    ],\n\n                    three_ds_result: {},\n                },\n            }),\n        ).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-td-online-mart-additional-action.ts",
    "content": "import { isArray, isObject, some } from 'lodash';\n\nimport { isRequestError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { TdOnlineMartAdditionalAction, TdOnlineMartThreeDSErrorBody } from '../types';\n\nfunction isTdOnlineMartThreeDSErrorBody(\n    errorBody: unknown,\n): errorBody is TdOnlineMartThreeDSErrorBody {\n    return (\n        isObject(errorBody) &&\n        typeof errorBody === 'object' &&\n        'errors' in errorBody &&\n        'three_ds_result' in errorBody &&\n        isArray((errorBody as TdOnlineMartThreeDSErrorBody).errors) &&\n        some((errorBody as TdOnlineMartThreeDSErrorBody).errors, {\n            code: 'three_d_secure_required',\n        })\n    );\n}\n\nexport function isTdOnlineMartAdditionalAction(\n    error: unknown,\n): error is TdOnlineMartAdditionalAction {\n    return isRequestError(error) && isTdOnlineMartThreeDSErrorBody(error.body);\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-threedsecure-result.spec.ts",
    "content": "import getThreeDSecureRequestError from '../mocks/google-pay-threedsecure-request-error.mock';\n\nimport { isGooglePayThreeDSecureResult } from './is-google-pay-threedsecure-result';\n\ndescribe('isGooglePayThreeDSecureResult', () => {\n    it('should be a GooglePayThreeDSecureResult', () => {\n        const result = getThreeDSecureRequestError().body;\n\n        expect(isGooglePayThreeDSecureResult(result)).toBe(true);\n    });\n\n    describe('should NOT be a GooglePayThreeDSecureResult if:', () => {\n        test('undefined', () => {\n            expect(isGooglePayThreeDSecureResult(undefined)).toBe(false);\n        });\n\n        test('null', () => {\n            expect(isGooglePayThreeDSecureResult(null)).toBe(false);\n        });\n\n        test('empty', () => {\n            expect(isGooglePayThreeDSecureResult({})).toBe(false);\n        });\n\n        test('three_ds_result.acs_url is not a string', () => {\n            const result = {\n                three_ds_result: {\n                    code: 'three_d_secure_required',\n                },\n            };\n\n            expect(isGooglePayThreeDSecureResult(result)).toBe(false);\n        });\n\n        test('three_ds_result.code is not a string', () => {\n            const result = {\n                three_ds_result: {\n                    acs_url: 'https://foo.com',\n                },\n            };\n\n            expect(isGooglePayThreeDSecureResult(result)).toBe(false);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-threedsecure-result.ts",
    "content": "import { RequestError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayThreeDSecureResult } from '../types';\n\nexport function isGooglePayThreeDSecureResult(\n    body: RequestError['body'],\n): body is GooglePayThreeDSecureResult {\n    if (typeof body !== 'object' || body === null) {\n        return false;\n    }\n\n    const threeDSBody = body as Partial<GooglePayThreeDSecureResult>;\n\n    return (\n        typeof threeDSBody.three_ds_result?.acs_url === 'string' &&\n        typeof threeDSBody.three_ds_result.code === 'string'\n    );\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-token-object.spec.ts",
    "content": "import assertIsGooglePayTokenObject from './is-google-pay-token-object';\n\ndescribe('isGooglePayTokenObject', () => {\n    it('should be a GooglePayTokenObject', () => {\n        const token = {\n            protocolVersion: 'foo',\n            signature: 'bar',\n            signedMessage: 'baz',\n        };\n\n        expect(() => assertIsGooglePayTokenObject(token)).not.toThrow();\n    });\n\n    it('should NOT be a GooglePayTokenObject', () => {\n        const token = {\n            id: 'tk_1234567',\n        };\n\n        expect(() => assertIsGooglePayTokenObject(token)).toThrow();\n    });\n});\n"
  },
  {
    "path": "packages/google-pay-integration/src/guards/is-google-pay-token-object.ts",
    "content": "import {\n    MissingDataError,\n    MissingDataErrorType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayTokenObject } from '../types';\n\nfunction isGooglePayTokenObject(token: unknown): token is GooglePayTokenObject {\n    return (\n        typeof token === 'object' &&\n        token !== null &&\n        'protocolVersion' in token &&\n        'signature' in token &&\n        'signedMessage' in token\n    );\n}\n\nexport default function assertIsGooglePayTokenObject(\n    token: unknown,\n): asserts token is GooglePayTokenObject {\n    if (!isGooglePayTokenObject(token)) {\n        throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n    }\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/index.ts",
    "content": "export { WithGooglePayPaymentInitializeOptions } from './google-pay-payment-initialize-options';\nexport { WithGooglePayCustomerInitializeOptions } from './google-pay-customer-initialize-options';\nexport { WithGooglePayButtonInitializeOptions } from './google-pay-button-initialize-options';\n\nexport { default as createGooglePayAdyenV2PaymentStrategy } from './factories/payment/create-google-pay-adyenv2-payment-strategy';\nexport { default as createGooglePayAdyenV3PaymentStrategy } from './factories/payment/create-google-pay-adyenv3-payment-strategy';\nexport { default as createGooglePayAuthorizeNetPaymentStrategy } from './factories/payment/create-google-pay-authorizenet-payment-strategy';\nexport { default as createGooglePayCheckoutComPaymentStrategy } from './factories/payment/create-google-pay-checkoutcom-payment-strategy';\nexport { default as createGooglePayCybersourcePaymentStrategy } from './factories/payment/create-google-pay-cybersource-payment-strategy';\nexport { default as createGooglePayOrbitalPaymentStrategy } from './factories/payment/create-google-pay-orbital-payment-strategy';\nexport { default as createGooglePayStripePaymentStrategy } from './google-pay-stripe/create-google-pay-stripe-payment-strategy';\nexport { default as createGooglePayWorldpayAccessPaymentStrategy } from './factories/payment/create-google-pay-worldpayaccess-payment-strategy';\nexport { default as createGooglePayBraintreePaymentStrategy } from './factories/payment/create-google-pay-braintree-payment-strategy';\nexport { default as createGooglePayPPCPPaymentStrategy } from './google-pay-paypal-commerce/create-google-pay-paypal-commerce-payment-strategy';\nexport { default as createGooglePayBigCommercePaymentsPaymentStrategy } from './google-pay-bigcommerce-payments/create-google-pay-bigcommerce-payments-payment-strategy';\nexport { default as createGooglePayTdOnlineMartPaymentStrategy } from './factories/payment/create-google-pay-tdonlinemart-payment-strategy';\n\nexport { default as createGooglePayAdyenV2CustomerStrategy } from './factories/customer/create-google-pay-adyenv2-customer-strategy';\nexport { default as createGooglePayAdyenV3CustomerStrategy } from './factories/customer/create-google-pay-adyenv3-customer-strategy';\nexport { default as createGooglePayAuthorizeDotNetCustomerStrategy } from './factories/customer/create-google-pay-authorizenet-customer-strategy';\nexport { default as createGooglePayCheckoutComCustomerStrategy } from './factories/customer/create-google-pay-checkoutcom-customer-strategy';\nexport { default as createGooglePayCybersourceCustomerStrategy } from './factories/customer/create-google-pay-cybersource-customer-strategy';\nexport { default as createGooglePayBnzCustomerStrategy } from './factories/customer/create-google-pay-bnz-customer-strategy';\nexport { default as createGooglePayOrbitalCustomerStrategy } from './factories/customer/create-google-pay-orbital-customer-strategy';\nexport { default as createGooglePayStripeCustomerStrategy } from './google-pay-stripe/create-google-pay-stripe-customer-strategy';\nexport { default as createGooglePayStripeUpeCustomerStrategy } from './google-pay-stripe/create-google-pay-stripeupe-customer-strategy';\nexport { default as createGooglePayWorldpayAccessCustomerStrategy } from './factories/customer/create-google-pay-worldpayaccess-customer-strategy';\nexport { default as createGooglePayBraintreeCustomerStrategy } from './factories/customer/create-google-pay-braintree-customer-strategy';\nexport { default as createGooglePayPayPalCommerceCustomerStrategy } from './google-pay-paypal-commerce/create-google-pay-paypal-commerce-customer-strategy';\nexport { default as createGooglePayBigCommercePaymentsCustomerStrategy } from './google-pay-bigcommerce-payments/create-google-pay-bigcommerce-payments-customer-strategy';\nexport { default as createGooglePayTdOnlineMartCustomerStrategy } from './factories/customer/create-google-pay-tdonlinemart-customer-strategy';\n\nexport { default as createGooglePayBraintreeButtonStrategy } from './factories/button/create-google-pay-braintree-button-strategy';\nexport { default as createGooglePayPayPalCommerceButtonStrategy } from './google-pay-paypal-commerce/create-google-pay-paypal-commerce-button-strategy';\nexport { default as createGooglePayBigCommercePaymentsButtonStrategy } from './google-pay-bigcommerce-payments/create-google-pay-bigcommerce-payments-button-strategy';\nexport { default as createGooglePayAdyenV2ButtonStrategy } from './factories/button/create-google-pay-adyenv2-button-strategy';\nexport { default as createGooglePayAdyenV3ButtonStrategy } from './factories/button/create-google-pay-adyenv3-button-strategy';\n\nexport { default as createGooglePayAuthorizeDotNetButtonStrategy } from './factories/button/create-google-pay-authorizenet-button-strategy';\nexport { default as createGooglePayCheckoutComButtonStrategy } from './factories/button/create-google-pay-checkoutcom-button-strategy';\nexport { default as createGooglePayCybersourceButtonStrategy } from './factories/button/create-google-pay-cybersource-button-strategy';\nexport { default as createGooglePayOrbitalButtonStrategy } from './factories/button/create-google-pay-orbital-button-strategy';\nexport { default as createGooglePayStripeButtonStrategy } from './google-pay-stripe/create-google-pay-stripe-button-strategy';\nexport { default as createGooglePayWorldpayAccessButtonStrategy } from './factories/button/create-google-pay-worldpayaccess-button-strategy';\nexport { default as createGooglePayTdOnlineMartButtonStrategy } from './factories/button/create-google-pay-tdonlinemart-button-strategy';\n"
  },
  {
    "path": "packages/google-pay-integration/src/mocks/google-pay-base-initialization-data.mock.ts",
    "content": "export default function getGooglePayBaseInitializationData() {\n    return {\n        gateway: 'foo',\n        googleMerchantId: 'bar',\n        googleMerchantName: 'baz',\n        isThreeDSecureEnabled: false,\n        platformToken: 'foobar',\n    };\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/mocks/google-pay-card-data-response.mock.ts",
    "content": "import { GooglePayCardDataResponse, GooglePayCardNetwork } from '../types';\n\nexport default function getCardDataResponse(): GooglePayCardDataResponse {\n    return {\n        apiVersionMinor: 0,\n        apiVersion: 2,\n        paymentMethodData: {\n            description: 'Visa••••1111',\n            tokenizationData: {\n                type: 'PAYMENT_GATEWAY',\n                token: '{\"signature\":\"foo\",\"protocolVersion\":\"ECv1\",\"signedMessage\":{\"encryptedMessage\":\"bar\",\"ephemeralPublicKey\":\"baz\",\"tag\":\"foobar\"}}',\n            },\n            type: 'CARD',\n            info: {\n                cardNetwork: GooglePayCardNetwork.VISA,\n                cardDetails: '1111',\n                billingAddress: {\n                    phoneNumber: '+1 555-555-5555',\n                    address3: '',\n                    sortingCode: '',\n                    address2: 'Building 1, 1st Floor',\n                    countryCode: 'US',\n                    address1: '505 Oakland Ave',\n                    postalCode: '78703',\n                    name: 'John Doe',\n                    locality: 'Austin',\n                    administrativeArea: 'TX',\n                },\n            },\n        },\n        shippingAddress: {\n            phoneNumber: '+1 555-555-5555',\n            address3: '',\n            sortingCode: '',\n            address2: 'Building 2, Suite 100',\n            countryCode: 'US',\n            address1: '11305 4 Points Dr',\n            postalCode: '78726',\n            name: 'John Doe',\n            locality: 'Austin',\n            administrativeArea: 'TX',\n        },\n        email: 'john.doe@example.com',\n    };\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/mocks/google-pay-config.mock.ts",
    "content": "import { GooglePayConfig } from '../types';\n\nexport const googlePayConfigMock: GooglePayConfig = {\n    allowedPaymentMethods: [\n        {\n            parameters: {\n                allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\n                allowedCardNetworks: ['AMEX', 'DISCOVER', 'JCB', 'VISA', 'MASTERCARD'],\n                billingAddressParameters: { format: 'FULL' },\n                billingAddressRequired: true,\n                assuranceDetailsRequired: false,\n            },\n            tokenizationSpecification: {\n                parameters: {\n                    gateway: 'paypalppcp',\n                    gatewayMerchantId: 'ID',\n                },\n                type: 'PAYMENT_GATEWAY',\n            },\n            type: 'CARD',\n        },\n    ],\n    apiVersion: 2,\n    apiVersionMinor: 2,\n    countryCode: 'US',\n    isEligible: true,\n    merchantInfo: {\n        merchantId: 'id',\n        merchantOrigin: 'origin',\n    },\n};\n"
  },
  {
    "path": "packages/google-pay-integration/src/mocks/google-pay-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { GooglePayInitializationData } from '../types';\n\nexport function getCheckoutCom(): PaymentMethod<GooglePayInitializationData> {\n    const generic = getGeneric();\n\n    return {\n        ...generic,\n        initializationData: {\n            ...generic.initializationData!,\n            checkoutcomkey: 'pk_f00-b4r',\n        },\n    };\n}\n\nexport function getBraintree(): PaymentMethod<GooglePayInitializationData> {\n    const generic = getGeneric();\n\n    return {\n        ...generic,\n        id: 'googlepaybraintree',\n        clientToken: 'token',\n        initializationData: {\n            ...generic.initializationData!,\n            isThreeDSecureEnabled: false,\n        },\n    };\n}\n\nexport function getPayPalCommerce(): PaymentMethod<GooglePayInitializationData> {\n    const generic = getGeneric();\n\n    return {\n        ...generic,\n        initializationData: {\n            ...generic.initializationData!,\n            merchantId: 'merchantId',\n            clientId: 'clientId',\n            attributionId: 'bc',\n            isVenmoEnabled: true,\n            isGooglePayEnabled: true,\n            isPayPalCreditAvailable: true,\n        },\n        clientToken: 'clientToken',\n    };\n}\n\nexport function getBigCommercePayments(): PaymentMethod<GooglePayInitializationData> {\n    const generic = getGeneric();\n\n    return {\n        ...generic,\n        initializationData: {\n            ...generic.initializationData!,\n            merchantId: 'merchantId',\n            clientId: 'clientId',\n            attributionId: 'bc',\n            isVenmoEnabled: true,\n            isGooglePayEnabled: true,\n            isPayPalCreditAvailable: true,\n        },\n        clientToken: 'clientToken',\n    };\n}\n\nexport function getStripe(): PaymentMethod<GooglePayInitializationData> {\n    const generic = getGeneric();\n\n    return {\n        ...generic,\n        initializationData: {\n            ...generic.initializationData!,\n            stripeConnectedAccount: 'acct_f00b4r',\n            stripePublishableKey: 'pk_live_f00b4r',\n            stripeVersion: '2026-02-31',\n        },\n    };\n}\n\nexport function getAdyenV2(): PaymentMethod<GooglePayInitializationData> {\n    const generic = getGeneric();\n\n    return {\n        ...generic,\n        initializationData: {\n            ...generic.initializationData!,\n            originKey: 'YOUR_ORIGIN_KEY',\n            clientKey: 'YOUR_CLIENT_KEY',\n            paymentMethodsResponse: {},\n        },\n    };\n}\n\nexport function getAdyenV3(): PaymentMethod<GooglePayInitializationData> {\n    const generic = getGeneric();\n\n    return {\n        ...generic,\n        initializationData: {\n            ...generic.initializationData!,\n            clientKey: 'YOUR_CLIENT_KEY',\n            paymentMethodsResponse: {},\n        },\n    };\n}\n\nexport function getAuthorizeNet(): PaymentMethod<GooglePayInitializationData> {\n    const generic = getGeneric();\n\n    return {\n        ...generic,\n        initializationData: {\n            ...generic.initializationData!,\n            gatewayMerchantId: undefined,\n            paymentGatewayId: generic.initializationData!.gatewayMerchantId,\n        },\n    };\n}\n\nexport function getGeneric(): PaymentMethod<GooglePayInitializationData> {\n    return {\n        id: 'googlepayexample',\n        method: 'googlepay',\n        supportedCards: ['AMEX', 'DISCOVER', 'JCB', 'VISA', 'MC'],\n        config: {\n            displayName: 'Google Pay',\n            testMode: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        initializationData: {\n            gateway: 'does_not_matter',\n            gatewayMerchantId: 'exampleGatewayMerchantId',\n            googleMerchantId: '12345678901234567890',\n            googleMerchantName: 'Example Merchant',\n            isThreeDSecureEnabled: false,\n            platformToken: 'foo.bar.baz',\n            storeCountry: 'US',\n        },\n    };\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/mocks/google-pay-payments-client.mock.ts",
    "content": "import getCardDataResponse from './google-pay-card-data-response.mock';\n\nexport default function getGooglePaymentsClientMocks() {\n    const button = document.createElement('div');\n    const cardDataResponse = getCardDataResponse();\n    const paymentsClient = {\n        isReadyToPay: jest.fn(() => Promise.resolve({ result: true })),\n        createButton: jest.fn(() => button),\n        loadPaymentData: jest.fn(() => Promise.resolve(cardDataResponse)),\n        prefetchPaymentData: jest.fn(),\n    };\n\n    return {\n        button,\n        cardDataResponse,\n        paymentsClient,\n    };\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/mocks/google-pay-processor-initialize.mock.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { getConsignment } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    CallbackTriggerType,\n    GooglePayFullBillingAddress,\n    GooglePayInitializationData,\n    GooglePayPaymentOptions,\n    NewShippingOptionParameters,\n    NewTransactionInfo,\n} from '../types';\n\nconst defaultGPayShippingAddress: GooglePayFullBillingAddress = {\n    address1: '',\n    address2: '',\n    address3: '',\n    administrativeArea: 'US',\n    locality: 'TX',\n    sortingCode: '78726',\n    name: '',\n    postalCode: '',\n    countryCode: '',\n};\n\nconst consignment = getConsignment();\n\nexport const createInitializeImplementationMock = (\n    eventEmitter: EventEmitter,\n    callbackTrigger: CallbackTriggerType,\n    cb?: (res?: NewTransactionInfo & NewShippingOptionParameters) => void,\n) => {\n    return (\n        _: () => PaymentMethod<GooglePayInitializationData>,\n        googlePayClientOptions?: GooglePayPaymentOptions,\n    ) => {\n        eventEmitter.on('onPaymentDataChanged', () => {\n            if (googlePayClientOptions && googlePayClientOptions.paymentDataCallbacks) {\n                googlePayClientOptions.paymentDataCallbacks\n                    .onPaymentDataChanged({\n                        callbackTrigger,\n                        shippingAddress: defaultGPayShippingAddress,\n                        shippingOptionData: {\n                            id: consignment.selectedShippingOption\n                                ? consignment.selectedShippingOption.id\n                                : '',\n                        },\n                        offerData: {\n                            redemptionCodes: ['coupon_code'],\n                        },\n                    })\n                    .then((res) => {\n                        if (cb) {\n                            return cb(res || undefined);\n                        }\n                    })\n                    .catch((e) => e);\n            }\n        });\n\n        return Promise.resolve();\n    };\n};\n"
  },
  {
    "path": "packages/google-pay-integration/src/mocks/google-pay-threedsecure-request-error.mock.ts",
    "content": "import { RequestError } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { getResponse } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nfunction getBody(code = 'three_d_secure_required') {\n    return {\n        status: 'error',\n        three_ds_result: {\n            acs_url: 'https://foo.com',\n            callback_url: 'https://bar.com',\n            code,\n        },\n        errors: [\n            {\n                code,\n                message:\n                    'Further authentication is required to process your payment. Please contact us.',\n            },\n        ],\n    };\n}\n\nexport default function getThreeDSecureRequestError() {\n    return new RequestError(getResponse(getBody()));\n}\n\nexport function getGenericRequestError() {\n    return new RequestError(\n        getResponse({\n            status: 'error',\n            three_ds_result: {\n                code: 'processing_error',\n                token: null,\n            },\n            errors: [],\n        }),\n    );\n}\n\nexport function getThreeDSecureLikeRequestError() {\n    return new RequestError(getResponse(getBody('additional_action_required')));\n}\n"
  },
  {
    "path": "packages/google-pay-integration/src/mocks/google-pay.mock.ts",
    "content": "import { GooglePayFullBillingAddress } from '../types';\n\nexport const defaultGPayShippingAddress: GooglePayFullBillingAddress = {\n    address1: '',\n    address2: '',\n    address3: '',\n    administrativeArea: 'US',\n    locality: 'TX',\n    sortingCode: '78726',\n    name: '',\n    postalCode: '',\n    countryCode: '',\n};\n"
  },
  {
    "path": "packages/google-pay-integration/src/types.ts",
    "content": "import { BigCommercePaymentsIntent } from '@bigcommerce/checkout-sdk/bigcommerce-payments-utils';\nimport {\n    BrowserInfo,\n    BuyNowCartRequestBody,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { FundingType } from './google-pay-paypal-commerce/types';\n\nexport enum PayPalCommerceIntent {\n    AUTHORIZE = 'authorize',\n    CAPTURE = 'capture',\n}\n\nexport enum StyleButtonLabel {\n    paypal = 'paypal',\n    checkout = 'checkout',\n    buynow = 'buynow',\n    pay = 'pay',\n    installment = 'installment',\n}\n\nexport enum StyleButtonColor {\n    gold = 'gold',\n    blue = 'blue',\n    silver = 'silver',\n    black = 'black',\n    white = 'white',\n}\n\nexport enum StyleButtonShape {\n    pill = 'pill',\n    rect = 'rect',\n}\n\nexport interface PayPalButtonStyleOptions {\n    color?: StyleButtonColor;\n    shape?: StyleButtonShape;\n    height?: number;\n    label?: StyleButtonLabel;\n}\n\nexport interface GooglePayGatewayBaseRequest {\n    apiVersion: 2;\n    apiVersionMinor: 0;\n}\n\nexport enum TotalPriceStatusType {\n    ESTIMATED = 'ESTIMATED',\n    FINAL = 'FINAL',\n    NOT_CURRENTLY_KNOWN = 'NOT_CURRENTLY_KNOWN',\n}\n\ntype GooglePayGatewayBaseResponse = GooglePayGatewayBaseRequest;\n\ninterface GooglePayPaymentMethod<T> {\n    type: string;\n    parameters: T;\n}\n\ntype GooglePayAuthMethod = 'PAN_ONLY' | 'CRYPTOGRAM_3DS';\n\nexport enum GooglePayCardNetwork {\n    AMEX = 'AMEX',\n    DISCOVER = 'DISCOVER',\n    INTERAC = 'INTERAC',\n    JCB = 'JCB',\n    MC = 'MASTERCARD',\n    VISA = 'VISA',\n}\n\nexport interface GooglePayCardParameters {\n    allowedAuthMethods: GooglePayAuthMethod[];\n    allowedCardNetworks: GooglePayCardNetwork[];\n    billingAddressRequired?: boolean;\n    billingAddressParameters?: {\n        format?: 'MIN' | 'FULL';\n        phoneNumberRequired?: boolean;\n    };\n}\n\nexport interface GooglePayBaseCardPaymentMethod\n    extends GooglePayPaymentMethod<GooglePayCardParameters> {\n    type: 'CARD';\n    parameters: GooglePayCardParameters;\n}\n\nexport interface GooglePayIsReadyToPayRequest extends GooglePayGatewayBaseRequest {\n    allowedPaymentMethods: [GooglePayBaseCardPaymentMethod];\n}\n\ninterface GooglePayGatewayBaseParameters {\n    gateway: string;\n}\n\nexport interface GooglePayRegularGatewayParameters extends GooglePayGatewayBaseParameters {\n    gatewayMerchantId: string;\n}\n\nexport interface GooglePayStripeGatewayParameters extends GooglePayGatewayBaseParameters {\n    'stripe:version'?: string;\n    'stripe:publishableKey'?: string;\n}\n\nexport interface GooglePayBraintreeGatewayParameters extends GooglePayGatewayBaseParameters {\n    'braintree:apiVersion'?: string;\n    'braintree:authorizationFingerprint'?: string;\n    'braintree:merchantId'?: string;\n    'braintree:sdkVersion'?: string;\n}\n\nexport interface GooglePayPayPalCommerceGatewayParameters extends GooglePayGatewayBaseParameters {\n    gatewayMerchantId?: string;\n}\n\nexport type GooglePayGatewayParameters =\n    | GooglePayRegularGatewayParameters\n    | GooglePayStripeGatewayParameters\n    | GooglePayBraintreeGatewayParameters;\n\nexport interface GooglePayCardPaymentMethod extends GooglePayBaseCardPaymentMethod {\n    tokenizationSpecification: {\n        type: 'PAYMENT_GATEWAY';\n        parameters: GooglePayGatewayParameters;\n    };\n}\n\nexport interface GooglePayTransactionInfo {\n    /** [!] Required for EEA countries */\n    countryCode?: string;\n    currencyCode: string;\n    totalPriceStatus: TotalPriceStatusType;\n    totalPrice: string;\n}\n\nexport interface GooglePayMerchantInfo {\n    merchantName: string;\n    merchantId: string;\n    authJwt: string;\n}\n\nexport enum CallbackIntentsType {\n    OFFER = 'OFFER',\n    PAYMENT_AUTHORIZATION = 'PAYMENT_AUTHORIZATION',\n    SHIPPING_ADDRESS = 'SHIPPING_ADDRESS',\n    SHIPPING_OPTION = 'SHIPPING_OPTION',\n}\n\nexport interface GooglePayPaymentDataRequest extends GooglePayGatewayBaseRequest {\n    allowedPaymentMethods: [GooglePayCardPaymentMethod];\n    transactionInfo: GooglePayTransactionInfo;\n    merchantInfo: GooglePayMerchantInfo;\n    emailRequired?: boolean;\n    shippingAddressRequired?: boolean;\n    shippingAddressParameters?: {\n        allowedCountryCodes?: string[];\n        phoneNumberRequired?: boolean;\n    };\n    offerInfo?: Offers;\n    shippingOptionRequired?: boolean;\n    callbackIntents?: CallbackIntentsType[];\n}\n\nexport interface NewTransactionInfo {\n    newTransactionInfo: {\n        currencyCode: string;\n        totalPrice: string;\n        totalPriceStatus: TotalPriceStatusType;\n    };\n}\n\nexport interface ShippingOptionParameters {\n    defaultSelectedOptionId?: string;\n    shippingOptions?: GoogleShippingOption[];\n}\n\nexport interface NewShippingOptionParameters {\n    newShippingOptionParameters?: ShippingOptionParameters;\n}\n\nexport interface NewOfferInfo {\n    newOfferInfo?: Offers;\n}\n\nexport interface Offers {\n    offers: OfferInfoItem[];\n}\n\nexport interface GooglePayError {\n    message: string;\n    reason: ErrorReasonType;\n    intent: CallbackTriggerType;\n}\n\nexport enum ErrorReasonType {\n    OFFER_INVALID = 'OFFER_INVALID',\n    PAYMENT_DATA_INVALID = 'PAYMENT_DATA_INVALID',\n    SHIPPING_ADDRESS_INVALID = 'SHIPPING_ADDRESS_INVALID',\n    SHIPPING_ADDRESS_UNSERVICEABLE = 'SHIPPING_ADDRESS_UNSERVICEABLE',\n    SHIPPING_OPTION_INVALID = 'SHIPPING_OPTION_INVALID',\n    OTHER_ERROR = 'OTHER_ERROR',\n}\n\nexport interface OfferInfoItem {\n    redemptionCode: string;\n    description: string;\n}\n\nexport interface HandleCouponsOut {\n    newOfferInfo: GooglePayPaymentDataRequest['offerInfo'];\n    error?: GooglePayError;\n}\n\nexport interface GoogleShippingOption {\n    id: string;\n    label?: string;\n}\n\nexport enum CallbackTriggerType {\n    INITIALIZE = 'INITIALIZE',\n    SHIPPING_OPTION = 'SHIPPING_OPTION',\n    SHIPPING_ADDRESS = 'SHIPPING_ADDRESS',\n    OFFER = 'OFFER',\n}\n\nexport interface IntermediatePaymentData {\n    callbackTrigger: CallbackTriggerType;\n    shippingAddress: GooglePayFullBillingAddress;\n    shippingOptionData: GoogleShippingOption;\n    offerData: {\n        redemptionCodes: string[];\n    };\n}\n\nexport interface GooglePayPaymentOptions {\n    paymentDataCallbacks?: {\n        onPaymentDataChanged(\n            intermediatePaymentData: IntermediatePaymentData,\n        ): onPaymentDataChangedOut;\n    };\n}\n\nexport type onPaymentDataChangedOut = Promise<\n    | (NewTransactionInfo & NewShippingOptionParameters & NewOfferInfo & { error?: GooglePayError })\n    | void\n>;\n\nexport type GooglePayRequiredPaymentData = Pick<\n    GooglePayPaymentDataRequest,\n    | 'emailRequired'\n    | 'shippingAddressRequired'\n    | 'shippingAddressParameters'\n    | 'shippingOptionRequired'\n>;\n\ninterface GooglePayMinBillingAddress {\n    name: string;\n    postalCode: string;\n    countryCode: string;\n    phoneNumber?: string;\n}\n\nexport interface GooglePayFullBillingAddress extends GooglePayMinBillingAddress {\n    address1: string;\n    address2: string;\n    address3: string;\n    locality: string;\n    administrativeArea: string;\n    sortingCode: string;\n}\n\ninterface GooglePayCardInfo {\n    cardNetwork: GooglePayCardNetwork;\n    cardDetails: string;\n    billingAddress?: GooglePayFullBillingAddress;\n}\n\ninterface GooglePayPaymentMethodData<T> {\n    description: string;\n    tokenizationData: {\n        type: 'PAYMENT_GATEWAY';\n        token: string;\n    };\n    type: string;\n    info: T;\n}\n\ninterface GooglePayCardData extends GooglePayPaymentMethodData<GooglePayCardInfo> {\n    type: 'CARD';\n}\n\ninterface GooglePayPaymentDataResponse<T> extends GooglePayGatewayBaseResponse {\n    paymentMethodData: GooglePayPaymentMethodData<T>;\n    shippingAddress?: GooglePayFullBillingAddress;\n    email?: string;\n}\n\nexport interface GooglePayCardDataResponse extends GooglePayPaymentDataResponse<GooglePayCardInfo> {\n    paymentMethodData: GooglePayCardData;\n}\n\ninterface GooglePayIsReadyToPayResponse {\n    result: boolean;\n}\n\nexport interface GooglePayButtonOptions {\n    onClick: (event: MouseEvent) => Promise<void>;\n    allowedPaymentMethods: [GooglePayBaseCardPaymentMethod];\n    buttonColor?: GooglePayButtonColor;\n    buttonSizeMode?: GooglePayButtonSizeMode;\n    buttonType?: GooglePayButtonType;\n}\n\nexport interface GooglePaymentsClient {\n    isReadyToPay(request: GooglePayIsReadyToPayRequest): Promise<GooglePayIsReadyToPayResponse>;\n    createButton(options: GooglePayButtonOptions): HTMLElement;\n    loadPaymentData(request: GooglePayPaymentDataRequest): Promise<GooglePayCardDataResponse>;\n    prefetchPaymentData(request: GooglePayPaymentDataRequest): void;\n}\n\ntype GooglePayEnvironment = 'TEST' | 'PRODUCTION';\n\nexport type GooglePaymentsClientConstructor = new (paymentOptions: {\n    environment: GooglePayEnvironment;\n}) => GooglePaymentsClient;\n\nexport interface GooglePayHostWindow extends Window {\n    google?: {\n        payments: {\n            api: {\n                PaymentsClient: GooglePaymentsClientConstructor;\n            };\n        };\n    };\n}\n\ninterface GooglePayBaseInitializationData {\n    card_information?: { type: string; number: string; bin?: string; isNetworkTokenized?: boolean };\n    gateway: string;\n    gatewayMerchantId?: string;\n    googleMerchantId: string;\n    googleMerchantName: string;\n    isThreeDSecureEnabled: boolean;\n    nonce?: string;\n    platformToken: string;\n    storeCountry?: string;\n    isWebViewExperimentOn?: boolean;\n}\n\nexport interface GooglePayPayPalCommerceInitializationData extends GooglePayBaseInitializationData {\n    merchantId?: string;\n    clientId: string;\n    attributionId?: string;\n    availableAlternativePaymentMethods: FundingType;\n    buttonStyle?: PayPalButtonStyleOptions;\n    buyerCountry?: string;\n    clientToken?: string;\n    enabledAlternativePaymentMethods: FundingType;\n    isDeveloperModeApplicable?: boolean;\n    intent?: PayPalCommerceIntent;\n    isHostedCheckoutEnabled?: boolean;\n    isPayPalCreditAvailable?: boolean;\n    isVenmoEnabled?: boolean;\n    isGooglePayEnabled?: boolean;\n    orderId?: string;\n    shouldRenderFields?: boolean;\n    paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\n}\n\nexport interface GooglePayBigCommercePaymentsInitializationData\n    extends GooglePayBaseInitializationData {\n    merchantId?: string;\n    clientId: string;\n    attributionId?: string;\n    availableAlternativePaymentMethods: FundingType;\n    buttonStyle?: PayPalButtonStyleOptions;\n    buyerCountry?: string;\n    clientToken?: string;\n    enabledAlternativePaymentMethods: FundingType;\n    isDeveloperModeApplicable?: boolean;\n    intent?: BigCommercePaymentsIntent;\n    isHostedCheckoutEnabled?: boolean;\n    isPayPalCreditAvailable?: boolean;\n    isVenmoEnabled?: boolean;\n    isGooglePayEnabled?: boolean;\n    orderId?: string;\n    shouldRenderFields?: boolean;\n    paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\n}\n\nexport interface GooglePayAuthorizeNetInitializationData extends GooglePayBaseInitializationData {\n    paymentGatewayId: string;\n}\n\nexport interface GooglePayStripeInitializationData extends GooglePayBaseInitializationData {\n    stripeConnectedAccount: string;\n    stripePublishableKey: string;\n    stripeVersion: string;\n    shopperLanguage: string;\n    useNewStripeJsVersion?: boolean;\n}\n\nexport interface GooglePayCheckoutComInitializationData extends GooglePayBaseInitializationData {\n    checkoutcomkey: string;\n}\n\nexport interface GooglePayAdyenV2InitializationData extends GooglePayBaseInitializationData {\n    originKey?: string;\n    clientKey?: string;\n    environment?: string;\n    prefillCardHolderName?: boolean;\n    paymentMethodsResponse: object;\n}\n\nexport interface GooglePayConfig {\n    allowedPaymentMethods: AllowedPaymentMethods[];\n    apiVersion: number;\n    apiVersionMinor: number;\n    countryCode: string;\n    isEligible: boolean;\n    merchantInfo: {\n        merchantId: string;\n        merchantOrigin: string;\n    };\n}\n\nexport interface AllowedPaymentMethods {\n    type: string;\n    parameters: {\n        allowedAuthMethods: string[];\n        allowedCardNetworks: string[];\n        billingAddressRequired: boolean;\n        assuranceDetailsRequired: boolean;\n        billingAddressParameters: {\n            format: string;\n        };\n    };\n    tokenizationSpecification: {\n        type: string;\n        parameters: {\n            gateway: string;\n            gatewayMerchantId: string;\n        };\n    };\n}\n\nexport interface GooglePayAdyenV3InitializationData extends GooglePayBaseInitializationData {\n    clientKey: string;\n    environment?: string;\n    prefillCardHolderName?: boolean;\n    paymentMethodsResponse: object;\n}\n\nexport type GooglePayInitializationData =\n    | GooglePayBaseInitializationData\n    | GooglePayAdyenV2InitializationData\n    | GooglePayAdyenV3InitializationData\n    | GooglePayAuthorizeNetInitializationData\n    | GooglePayStripeInitializationData\n    | GooglePayCheckoutComInitializationData\n    | GooglePayPayPalCommerceInitializationData\n    | GooglePayBigCommercePaymentsInitializationData;\n\nexport interface GooglePaySetExternalCheckoutData {\n    nonce: string;\n    card_information: { type: string; number: string; bin?: string; isNetworkTokenized?: boolean };\n    cart_id?: string;\n}\n\nexport interface GooglePayAdditionalActionProcessable {\n    processAdditionalAction(error: unknown, methodId?: string): Promise<void>;\n}\n\nexport interface GooglePayErrorObject {\n    errorCode?: number;\n    statusCode: 'CANCELED' | 'DEVELOPER_ERROR';\n    statusMessage?: string;\n}\n\nexport interface GooglePayTokenObject {\n    protocolVersion: string;\n    signature: string;\n    signedMessage: string;\n}\n\nexport interface GooglePayStripeTokenObject {\n    id: string;\n}\n\nexport interface GooglePayBraintreeTokenObject {\n    androidPayCards: [\n        {\n            nonce: string;\n            details: {\n                bin: string;\n                isNetworkTokenized?: boolean;\n            };\n        },\n    ];\n}\n\nexport interface GooglePayCheckoutComTokenObject {\n    token: string;\n}\n\nexport interface GooglePayThreeDSecureResult {\n    three_ds_result: {\n        acs_url: string;\n        code: string;\n    };\n}\n\nexport interface GooglePayBuyNowInitializeOptions {\n    getBuyNowCartRequestBody?(): BuyNowCartRequestBody;\n}\n\nexport interface ExtraPaymentData {\n    deviceSessionId?: string;\n    browser_info?: BrowserInfo;\n}\n\nexport type GooglePayButtonColor = 'default' | 'black' | 'white';\nexport type GooglePayButtonSizeMode = 'static' | 'fill';\nexport type GooglePayButtonType =\n    | 'book'\n    | 'buy'\n    | 'checkout'\n    | 'donate'\n    | 'order'\n    | 'pay'\n    | 'plain'\n    | 'subscribe'\n    | 'long'\n    | 'short';\n\nexport interface TdOnlineMartThreeDSErrorBody {\n    errors?: Array<{ code: string }>;\n    three_ds_result?: {\n        acs_url: string;\n        payer_auth_request: string;\n        merchant_data: string;\n    };\n}\n\nexport type TdOnlineMartAdditionalAction = RequestError<TdOnlineMartThreeDSErrorBody>;\n"
  },
  {
    "path": "packages/google-pay-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n}\n"
  },
  {
    "path": "packages/google-pay-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/google-pay-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/no-empty-function\": \"off\",\n                \"@typescript-eslint/no-empty-interface\": \"off\",\n                \"@typescript-eslint/ban-types\": \"off\",\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-misused-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/restrict-template-expressions\": \"off\",\n                \"@typescript-eslint/require-await\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/default-param-last\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/no-shadow\": \"off\",\n                \"complexity\": \"off\",\n                \"no-plusplus\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"jsdoc/check-tag-names\": \"off\",\n                \"no-return-await\": \"off\",\n                \"@typescript-eslint/no-use-before-define\": \"off\",\n                \"no-param-reassign\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"no-nested-ternary\": \"off\",\n                \"@typescript-eslint/no-unused-vars\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"@typescript-eslint/no-unused-expressions\": \"off\",\n                \"@typescript-eslint/member-ordering\": \"off\",\n                \"@typescript-eslint/unified-signatures\": \"off\",\n                \"jsdoc/require-param-type\": \"off\",\n                \"jsdoc/require-returns-type\": \"off\",\n                \"jsdoc/check-param-names\": \"off\",\n                \"no-restricted-globals\": \"off\",\n                \"no-underscore-dangle\": \"off\",\n                \"import/no-named-default\": \"off\",\n                \"no-restricted-syntax\": \"off\",\n                \"eqeqeq\": \"off\",\n                \"no-continue\": \"off\",\n                \"@typescript-eslint/no-throw-literal\": \"off\",\n                \"max-classes-per-file\": \"off\",\n                \"global-require\": \"off\",\n                \"no-multi-assign\": \"off\",\n                \"no-restricted-properties\": \"off\",\n                \"no-proto\": \"off\",\n                \"no-throw-literal\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-non-null-assertion\": \"off\",\n                \"jest/no-restricted-matchers\": \"off\",\n                \"jest/no-conditional-expect\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/README.md",
    "content": "# Hosted Form\n\nThis library is for creating a hosted form that can be used outside of the checkout page.\n\n## Running unit tests\n\nRun `nx test hosted-form-v2` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint hosted-form-v2` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/hosted-form-v2/api-extractor/hosted-form-v2-iframe-content.json",
    "content": "{\n    \"compiler\": {\n        \"configType\": \"tsconfig\",\n        \"rootFolder\": \".\"\n    },\n    \"project\": {\n        \"entryPointSourceFile\": \"../../temp/hosted-form-v2/src/bundles/hosted-form-v2-iframe-content.d.ts\"\n    },\n    \"validationRules\": {\n        \"missingReleaseTags\": \"allow\"\n    },\n    \"apiReviewFile\": {\n        \"enabled\": false\n    },\n    \"apiJsonFile\": {\n        \"enabled\": false\n    },\n    \"dtsRollup\": {\n        \"enabled\": true,\n        \"mainDtsRollupPath\": \"hosted-form-v2-iframe-content.d.ts\"\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/api-extractor/hosted-form-v2-iframe-host.json",
    "content": "{\n    \"compiler\": {\n        \"configType\": \"tsconfig\",\n        \"rootFolder\": \".\"\n    },\n    \"project\": {\n        \"entryPointSourceFile\": \"../../temp/hosted-form-v2/src/bundles/hosted-form-v2-iframe-host.d.ts\"\n    },\n    \"validationRules\": {\n        \"missingReleaseTags\": \"allow\"\n    },\n    \"apiReviewFile\": {\n        \"enabled\": false\n    },\n    \"apiJsonFile\": {\n        \"enabled\": false\n    },\n    \"dtsRollup\": {\n        \"enabled\": true,\n        \"mainDtsRollupPath\": \"hosted-form-v2-iframe-host.d.ts\"\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/jest.config.js",
    "content": "module.exports = {\n    displayName: 'hosted-form-v2',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/hosted-form-v2',\n};\n"
  },
  {
    "path": "packages/hosted-form-v2/project.json",
    "content": "{\n    \"name\": \"hosted-form-v2\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/hosted-form-v2/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/hosted-form-v2/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/hosted-form-v2\"],\n            \"options\": {\n                \"jestConfig\": \"packages/hosted-form-v2/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        },\n        \"build-dts\": {\n            \"executor\": \"nx:run-commands\",\n            \"options\": {\n                \"cwd\": \"packages/hosted-form-v2\",\n                \"parallel\": false,\n                \"commands\": [\n                    \"tsc --outDir ../../temp --declaration --emitDeclarationOnly\",\n                    \"api-extractor run --config api-extractor/hosted-form-v2-iframe-content.json & api-extractor run --config api-extractor/hosted-form-v2-iframe-host.json\",\n                    \"rm -rf ../../temp\"\n                ]\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/bundles/hosted-form-v2-iframe-content.ts",
    "content": "export { initializeHostedInput, notifyInitializeError } from '../iframe-content';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/bundles/hosted-form-v2-iframe-host.ts",
    "content": "export { createHostedFormService } from '../create-hosted-form-service';\nexport { default as createStoredCardHostedFormService } from '../create-hosted-form-stored-card-service';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/dom/detachment-observer.spec.ts",
    "content": "import { EventEmitter } from 'events';\nimport { noop } from 'lodash';\n\nimport DetachmentObserver from './detachment-observer';\nimport { UnexpectedDetachmentError } from './errors';\nimport { MutationObserverFactory } from './mutation-observer';\n\ndescribe('DetachmentObserver', () => {\n    let mutationEventEmitter: EventEmitter;\n    let mutationObserver: Pick<MutationObserver, 'disconnect' | 'observe'>;\n    let mutationObserverFactory: Pick<MutationObserverFactory, 'create'>;\n    let subject: DetachmentObserver;\n\n    beforeEach(() => {\n        mutationEventEmitter = new EventEmitter();\n\n        mutationObserver = {\n            observe: jest.fn(),\n            disconnect: jest.fn(),\n        };\n\n        mutationObserverFactory = {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            create: jest.fn((callback) => {\n                mutationEventEmitter.on('remove', callback);\n\n                return mutationObserver;\n            }),\n        };\n\n        subject = new DetachmentObserver(mutationObserverFactory as MutationObserverFactory);\n    });\n\n    it('throws error and stops observing if targetted element is removed before promise is resolved', async () => {\n        const element = document.createElement('div');\n        const promise = new Promise(noop);\n        const output = subject.ensurePresence([element], promise);\n\n        mutationEventEmitter.emit('remove', [{ removedNodes: [element] }]);\n\n        try {\n            await output;\n        } catch (error) {\n            expect(error).toEqual(expect.any(UnexpectedDetachmentError));\n\n            expect(mutationObserver.disconnect).toHaveBeenCalled();\n        }\n    });\n\n    it('returns promised value and stops observing if targetted element is not removed before promise is resolved', async () => {\n        const eventEmitter = new EventEmitter();\n        const element = document.createElement('div');\n        const promise = new Promise((resolve) => eventEmitter.on('resolve', resolve));\n        const output = subject.ensurePresence([element], promise);\n\n        eventEmitter.emit('resolve', 'foobar');\n\n        expect(await output).toBe('foobar');\n\n        expect(mutationObserver.disconnect).toHaveBeenCalled();\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/dom/detachment-observer.ts",
    "content": "import { CancellablePromise } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { UnexpectedDetachmentError } from './errors';\nimport { MutationObserverFactory } from './mutation-observer';\n\nexport default class DetachmentObserver {\n    constructor(private _mutationObserver: MutationObserverFactory) {}\n\n    async ensurePresence<T>(targets: Node[], promise: Promise<T>): Promise<T> {\n        const cancellable = new CancellablePromise(promise);\n\n        const observer = this._mutationObserver.create((mutationsList) => {\n            mutationsList.forEach((mutation) => {\n                const removedTargets = Array.from(mutation.removedNodes).filter((node) =>\n                    targets.some((target) => node === target || node.contains(target)),\n                );\n\n                if (removedTargets.length === 0) {\n                    return;\n                }\n\n                cancellable.cancel(new UnexpectedDetachmentError());\n            });\n        });\n\n        observer.observe(document.body, { childList: true, subtree: true });\n\n        try {\n            const output = await cancellable.promise;\n\n            observer.disconnect();\n\n            return output;\n        } catch (error) {\n            observer.disconnect();\n\n            throw error;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/dom/errors/index.ts",
    "content": "export { default as UnexpectedDetachmentError } from './unexpected-detachment-error';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/dom/errors/unexpected-detachment-error.ts",
    "content": "import { StandardError } from '../../errors';\n\nexport default class UnexpectedDetachmentError extends StandardError {\n    constructor(message?: string) {\n        super(\n            message ||\n                'Unable to proceed because the required element is unexpectedly detached from the page.',\n        );\n\n        this.name = 'UnexpectedDetachmentError';\n        this.type = 'unexpected_detachment';\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/dom/index.ts",
    "content": "export * from './mutation-observer';\n\nexport { default as DetachmentObserver } from './detachment-observer';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/dom/mutation-observer.ts",
    "content": "export interface MutationObeserverCreator {\n    prototype: MutationObserver;\n    new (callback: MutationCallback): MutationObserver;\n}\n\nexport interface MutationObserverWindow extends Window {\n    MutationObserver: MutationObeserverCreator;\n}\n\nexport class MutationObserverFactory {\n    constructor(private _window: MutationObserverWindow = window as MutationObserverWindow) {}\n\n    create(callback: MutationCallback): MutationObserver {\n        return new this._window.MutationObserver(callback);\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/errors/custom-error.ts",
    "content": "export default interface CustomError extends Error {\n    message: string;\n    type: string;\n    subtype?: string;\n}\n\nexport function isCustomError(error: unknown): error is CustomError {\n    return typeof error === 'object' && error !== null && 'message' in error && 'type' in error;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/errors/index.ts",
    "content": "export { default as CustomError, isCustomError } from './custom-error';\nexport { default as InvalidArgumentError } from './invalid-argument-error';\nexport { default as NotInitializedError, NotInitializedErrorType } from './not-initialized-error';\nexport { default as RequestError } from './request-error';\nexport { default as StandardError } from './standard-error';\n\nexport { default as mapFromPaymentErrorResponse } from './map-from-payment-error-response';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/errors/invalid-argument-error.spec.ts",
    "content": "import InvalidArgumentError from './invalid-argument-error';\n\ndescribe('InvalidArgumentError', () => {\n    it('returns error name', () => {\n        const error = new InvalidArgumentError();\n\n        expect(error.name).toBe('InvalidArgumentError');\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/errors/invalid-argument-error.ts",
    "content": "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"
  },
  {
    "path": "packages/hosted-form-v2/src/common/errors/map-from-payment-error-response.spec.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { PaymentErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getErrorResponse } from '../http-request/responses.mock';\n\nimport mapFromPaymentErrorResponse from './map-from-payment-error-response';\nimport RequestError from './request-error';\n\ndescribe('mapFromPaymentErrorResponse()', () => {\n    let error: RequestError<PaymentErrorResponseBody>;\n    let response: Response<PaymentErrorResponseBody>;\n\n    beforeEach(() => {\n        response = getErrorResponse({\n            status: '',\n            errors: [\n                { code: 'invalid_cvv', message: undefined },\n                { code: 'invalid_number', message: 'Invalid number' },\n                { code: 'invalid_empty', message: '' },\n                { code: 'invalid_account', message: 'Invalid account.' },\n            ],\n        });\n\n        error = mapFromPaymentErrorResponse(response);\n    });\n\n    it('keeps original body', () => {\n        expect(error.body).toEqual(response.body);\n    });\n\n    it('keeps original headers', () => {\n        expect(error.headers).toEqual(response.headers);\n    });\n\n    it('keeps original status', () => {\n        expect(error.status).toEqual(response.status);\n    });\n\n    it('creates an array of error objects', () => {\n        expect(error.errors).toEqual(response.body.errors);\n    });\n\n    it('concatenates all errors, ignoring empty ones', () => {\n        expect(error.message).toBe('Invalid number Invalid account.');\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/errors/map-from-payment-error-response.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { PaymentErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport RequestError from './request-error';\n\nexport default function mapFromPaymentErrorResponse(\n    response: Response<PaymentErrorResponseBody>,\n    message?: string,\n): RequestError {\n    const { body } = response;\n    const { errors = [] } = body;\n\n    return new RequestError(response, {\n        message: joinErrors(errors) || message,\n        errors,\n    });\n}\n\nfunction joinErrors(errors: Array<{ code: string; message?: string }>): string | undefined {\n    if (!Array.isArray(errors)) {\n        return;\n    }\n\n    return errors\n        .reduce((result: string[], error) => {\n            if (error && error.message) {\n                return [...result, error.message];\n            }\n\n            return result;\n        }, [])\n        .join(' ');\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/errors/not-initialized-error.spec.ts",
    "content": "import NotInitializedError, { NotInitializedErrorType } from './not-initialized-error';\n\ndescribe('NotInitializedError', () => {\n    it('returns error name', () => {\n        const error = new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n\n        expect(error.name).toBe('NotInitializedError');\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/errors/not-initialized-error.ts",
    "content": "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"
  },
  {
    "path": "packages/hosted-form-v2/src/common/errors/request-error.spec.ts",
    "content": "import { getErrorResponse } from '../http-request/responses.mock';\n\nimport RequestError from './request-error';\n\ndescribe('RequestError', () => {\n    it('sets type', () => {\n        const error = new RequestError(getErrorResponse());\n\n        expect(error.type).toBe('request');\n    });\n\n    it('sets name', () => {\n        const error = new RequestError(getErrorResponse());\n\n        expect(error.name).toBe('RequestError');\n    });\n\n    it('sets body', () => {\n        const response = getErrorResponse();\n        const error = new RequestError(response);\n\n        expect(error.body).toEqual(response.body);\n    });\n\n    it('sets status', () => {\n        const response = getErrorResponse();\n        const error = new RequestError(response);\n\n        expect(error.status).toEqual(response.status);\n    });\n\n    it('sets default data when none provided', () => {\n        const error = new RequestError();\n\n        expect(error.message).toBe('An unexpected error has occurred.');\n        expect(error.status).toBe(0);\n        expect(error.body).toEqual({});\n        expect(error.headers).toEqual({});\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/errors/request-error.ts",
    "content": "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"
  },
  {
    "path": "packages/hosted-form-v2/src/common/errors/standard-error.spec.ts",
    "content": "import StandardError from './standard-error';\n\ndescribe('StandardError', () => {\n    class TestError extends StandardError {}\n\n    it('returns error name', () => {\n        const error = new TestError();\n\n        expect(error.name).toBe('StandardError');\n    });\n\n    it('sets error message if provided', () => {\n        const message = 'Hello world';\n        const error = new TestError(message);\n\n        expect(error.message).toEqual(message);\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/errors/standard-error.ts",
    "content": "import { setPrototypeOf } from '../utility';\n\nimport CustomError from './custom-error';\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"
  },
  {
    "path": "packages/hosted-form-v2/src/common/http-request/content-type.ts",
    "content": "enum ContentType {\n    Json = 'application/json',\n    JsonV1 = 'application/vnd.bc.v1+json',\n}\n\nexport default ContentType;\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/http-request/responses.mock.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { ErrorResponseBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getErrorResponse(\n    body = getErrorResponseBody(),\n    headers = {},\n    status = 400,\n    statusText = 'Bad Request',\n): Response<any> {\n    return {\n        body,\n        status,\n        statusText,\n        headers: {\n            'content-type': 'application/json',\n            ...headers,\n        },\n    };\n}\n\nexport function getErrorResponseBody(error?: any): ErrorResponseBody {\n    return {\n        detail: 'Something went wrong',\n        errors: ['Bad Request'],\n        status: 400,\n        title: 'Error',\n        ...error,\n    };\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/iframe/iframe-event-listener.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport IframeEventListener from './iframe-event-listener';\n\nenum TestEventType {\n    Loaded = 'LOADED',\n    Complete = 'COMPLETE',\n    Error = 'ERROR',\n}\n\ninterface TestEventMap {\n    [TestEventType.Loaded]: { type: TestEventType.Loaded };\n    [TestEventType.Complete]: { type: TestEventType.Complete };\n    [TestEventType.Error]: { type: TestEventType.Error };\n}\n\ndescribe('IframeEventListener', () => {\n    let origin: string;\n    let eventEmitter: EventEmitter;\n    let listener: IframeEventListener<TestEventMap>;\n    let handleLoaded: () => void;\n    let handleComplete: () => void;\n\n    beforeEach(() => {\n        origin = document.location.origin;\n        listener = new IframeEventListener(origin);\n        eventEmitter = new EventEmitter();\n        handleLoaded = jest.fn();\n        handleComplete = jest.fn();\n\n        jest.spyOn(window, 'addEventListener').mockImplementation((type, listener) => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            return eventEmitter.addListener(type, listener);\n        });\n\n        jest.spyOn(window, 'removeEventListener').mockImplementation((type, listener) => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            return eventEmitter.removeListener(type, listener);\n        });\n\n        listener.listen();\n        listener.addListener(TestEventType.Loaded, handleLoaded);\n        listener.addListener(TestEventType.Complete, handleComplete);\n    });\n\n    it('triggers relevant listeners after receiving `message` event', () => {\n        eventEmitter.emit('message', { origin, data: { type: TestEventType.Loaded } });\n\n        expect(handleLoaded).toHaveBeenCalled();\n        expect(handleComplete).not.toHaveBeenCalled();\n    });\n\n    it('triggers relevant listeners with context data if provided', () => {\n        eventEmitter.emit('message', {\n            origin,\n            data: { type: TestEventType.Loaded, context: { id: '123' } },\n        });\n\n        expect(handleLoaded).toHaveBeenCalledWith({ type: TestEventType.Loaded }, { id: '123' });\n    });\n\n    it('responds to event with www subdomain', () => {\n        eventEmitter.emit('message', {\n            origin: origin.replace('http://', 'http://www.'),\n            data: { type: TestEventType.Loaded },\n        });\n\n        expect(handleLoaded).toHaveBeenCalled();\n        expect(handleComplete).not.toHaveBeenCalled();\n    });\n\n    it('does not respond to event with unrecognized origin', () => {\n        eventEmitter.emit('message', {\n            origin: 'https://foobar.com',\n            data: {\n                type: TestEventType.Loaded,\n            },\n        });\n\n        expect(handleLoaded).not.toHaveBeenCalled();\n    });\n\n    it('triggers relevant listeners when origin URL has trailing slash', () => {\n        listener = new IframeEventListener(`${origin}/`);\n        listener.listen();\n        listener.addListener(TestEventType.Loaded, handleLoaded);\n\n        eventEmitter.emit('message', { origin, data: { type: TestEventType.Loaded } });\n\n        expect(handleLoaded).toHaveBeenCalled();\n    });\n\n    it('does not respond to invalid event', () => {\n        eventEmitter.emit('message', { origin, data: { type: 'FOOBAR' } });\n\n        expect(handleLoaded).not.toHaveBeenCalled();\n        expect(handleComplete).not.toHaveBeenCalled();\n    });\n\n    it('stops listening to `message` event', () => {\n        listener.stopListen();\n\n        eventEmitter.emit('message', { origin, data: { type: TestEventType.Loaded } });\n        eventEmitter.emit('message', { origin, data: { type: TestEventType.Complete } });\n\n        expect(handleLoaded).not.toHaveBeenCalled();\n        expect(handleComplete).not.toHaveBeenCalled();\n    });\n\n    it('removes specific event listener', () => {\n        listener.removeListener(TestEventType.Loaded, handleLoaded);\n\n        eventEmitter.emit('message', { origin, data: { type: TestEventType.Loaded } });\n        eventEmitter.emit('message', { origin, data: { type: TestEventType.Complete } });\n\n        expect(handleLoaded).not.toHaveBeenCalled();\n        expect(handleComplete).toHaveBeenCalled();\n    });\n\n    it('does nothing if trying to remove non-existent listener', () => {\n        expect(() => listener.removeListener(TestEventType.Error, () => {})).not.toThrow();\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/iframe/iframe-event-listener.ts",
    "content": "import { appendWww, parseUrl } from '../url';\nimport { bindDecorator as bind } from '../utility';\n\nimport { IframeEventMap } from './iframe-event';\nimport isIframeEvent from './is-iframe-event';\n\nexport default class IframeEventListener<\n    TEventMap extends IframeEventMap<keyof TEventMap>,\n    TContext = undefined,\n> {\n    private _isListening: boolean;\n    private _listeners: EventListeners<TEventMap, TContext>;\n    private _sourceOrigins: string[];\n\n    constructor(sourceOrigin: string) {\n        this._sourceOrigins = [\n            parseUrl(sourceOrigin).origin,\n            appendWww(parseUrl(sourceOrigin)).origin,\n        ];\n        this._isListening = false;\n        this._listeners = {};\n    }\n\n    listen(): void {\n        if (this._isListening) {\n            return;\n        }\n\n        this._isListening = true;\n\n        window.addEventListener('message', this._handleMessage);\n    }\n\n    stopListen(): void {\n        if (!this._isListening) {\n            return;\n        }\n\n        this._isListening = false;\n\n        window.removeEventListener('message', this._handleMessage);\n    }\n\n    addListener<TType extends keyof TEventMap>(\n        type: TType,\n        listener: (event: TEventMap[TType], context?: TContext) => void,\n    ): void {\n        let listeners = this._listeners[type];\n\n        if (!listeners) {\n            this._listeners[type] = listeners = [];\n        }\n\n        if (listeners.indexOf(listener) === -1) {\n            listeners.push(listener);\n        }\n    }\n\n    removeListener<TType extends keyof TEventMap>(\n        type: TType,\n        listener: (event: TEventMap[TType], context?: TContext) => void,\n    ): void {\n        const listeners = this._listeners[type];\n\n        if (!listeners) {\n            return;\n        }\n\n        const index = listeners.indexOf(listener);\n\n        if (index >= 0) {\n            listeners.splice(index, 1);\n        }\n    }\n\n    trigger<TType extends keyof TEventMap>(event: TEventMap[TType], context?: TContext): void {\n        const listeners = this._listeners[event.type];\n\n        if (!listeners) {\n            return;\n        }\n\n        listeners.forEach((listener) => (context ? listener(event, context) : listener(event)));\n    }\n\n    @bind\n    private _handleMessage(messageEvent: MessageEvent): void {\n        if (\n            this._sourceOrigins.indexOf(messageEvent.origin) === -1 ||\n            !isIframeEvent(messageEvent.data as TEventMap[keyof TEventMap], messageEvent.data.type)\n        ) {\n            return;\n        }\n\n        const { context, ...event } = messageEvent.data;\n\n        this.trigger(event, context);\n    }\n}\n\ntype EventListeners<TEventMap, TContext = undefined> = {\n    [key in keyof TEventMap]?: Array<(event: TEventMap[key], context?: TContext) => void>;\n};\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/iframe/iframe-event-poster.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport IframeEvent from './iframe-event';\nimport IframeEventPoster from './iframe-event-poster';\n\ndescribe('IframeEventPoster', () => {\n    let eventEmitter: EventEmitter;\n    let origin: string;\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n        origin = 'https://mybigcommerce.com';\n\n        jest.spyOn(window, 'addEventListener').mockImplementation((type, listener) => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            eventEmitter.addListener(type, listener);\n        });\n    });\n\n    it('posts event to target window', () => {\n        const message = { type: 'FOOBAR' };\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent>(origin, targetWindow);\n\n        jest.spyOn(targetWindow, 'postMessage');\n\n        poster.post(message);\n\n        expect(targetWindow.postMessage).toHaveBeenCalledWith(message, origin);\n    });\n\n    it('posts event with context data if provided', () => {\n        const message = { type: 'FOOBAR' };\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent, { id: string }>(origin, targetWindow);\n\n        jest.spyOn(targetWindow, 'postMessage');\n\n        poster.setContext({ id: '123' });\n        poster.post(message);\n\n        expect(targetWindow.postMessage).toHaveBeenCalledWith(\n            { ...message, context: { id: '123' } },\n            origin,\n        );\n    });\n\n    it('strips out irrelevant information from origin URL', () => {\n        const message = { type: 'FOOBAR' };\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent>(`${origin}/url/path`, targetWindow);\n\n        jest.spyOn(targetWindow, 'postMessage');\n\n        poster.post(message);\n\n        expect(targetWindow.postMessage).toHaveBeenCalledWith(message, origin);\n    });\n\n    it('does not post event to target window if it is same as current window', () => {\n        const message = { type: 'FOOBAR' };\n        const targetWindow = window;\n        const poster = new IframeEventPoster<IframeEvent>(origin, targetWindow);\n\n        jest.spyOn(window, 'postMessage');\n\n        poster.post(message);\n\n        expect(window.postMessage).not.toHaveBeenCalledWith(message, origin);\n    });\n\n    it('returns nothing if success / error event type is not provided', () => {\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent>(origin, targetWindow);\n\n        expect(poster.post({ type: 'FOOBAR_REQUEST' })).toBeUndefined();\n    });\n\n    it('returns promise if success / error event type is provided', () => {\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent>(origin, targetWindow);\n\n        expect(\n            poster.post(\n                { type: 'FOOBAR_REQUEST' },\n                { errorType: 'FOOBAR_ERROR', successType: 'FOOBAR_SUCCESS' },\n            ),\n        ).toBeInstanceOf(Promise);\n    });\n\n    it('resolves promise if success event is received', async () => {\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent>(origin, targetWindow);\n\n        jest.spyOn(targetWindow, 'postMessage').mockImplementation((message) => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            if (message.type === 'FOOBAR_REQUEST') {\n                eventEmitter.emit('message', {\n                    origin,\n                    data: { type: 'FOOBAR_SUCCESS', payload: '123' },\n                });\n            }\n        });\n\n        expect(\n            await poster.post(\n                { type: 'FOOBAR_REQUEST' },\n                { errorType: 'FOOBAR_ERROR', successType: 'FOOBAR_SUCCESS' },\n            ),\n        ).toEqual({ type: 'FOOBAR_SUCCESS', payload: '123' });\n    });\n\n    it('rejects promise if error event is received', async () => {\n        const targetWindow = Object.create(window);\n        const poster = new IframeEventPoster<IframeEvent>(origin, targetWindow);\n\n        jest.spyOn(targetWindow, 'postMessage').mockImplementation((message) => {\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            if (message.type === 'FOOBAR_REQUEST') {\n                eventEmitter.emit('message', {\n                    origin,\n                    data: { type: 'FOOBAR_ERROR', payload: 'Unexpected error' },\n                });\n            }\n        });\n\n        try {\n            await poster.post(\n                { type: 'FOOBAR_REQUEST' },\n                { errorType: 'FOOBAR_ERROR', successType: 'FOOBAR_SUCCESS' },\n            );\n        } catch (event) {\n            expect(event).toEqual({ type: 'FOOBAR_ERROR', payload: 'Unexpected error' });\n        }\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/iframe/iframe-event-poster.ts",
    "content": "import { fromEvent } from 'rxjs';\nimport { filter, map, take } from 'rxjs/operators';\n\nimport { parseUrl } from '../url';\n\nimport IframeEvent from './iframe-event';\nimport isIframeEvent from './is-iframe-event';\n\nexport interface IframeEventPostOptions<\n    TSuccessEvent extends IframeEvent,\n    TErrorEvent extends IframeEvent,\n> {\n    errorType?: TErrorEvent['type'];\n    successType?: TSuccessEvent['type'];\n}\n\nexport default class IframeEventPoster<TEvent, TContext = undefined> {\n    private _targetOrigin: string;\n\n    constructor(targetOrigin: string, private _targetWindow?: Window, private _context?: TContext) {\n        this._targetOrigin = targetOrigin === '*' ? '*' : parseUrl(targetOrigin).origin;\n    }\n\n    post(event: TEvent): void;\n    post<\n        TSuccessEvent extends IframeEvent = IframeEvent,\n        TErrorEvent extends IframeEvent = IframeEvent,\n    >(\n        event: TEvent,\n        options: IframeEventPostOptions<TSuccessEvent, TErrorEvent>,\n    ): Promise<TSuccessEvent>;\n    post<\n        TSuccessEvent extends IframeEvent = IframeEvent,\n        TErrorEvent extends IframeEvent = IframeEvent,\n    >(\n        event: TEvent,\n        options?: IframeEventPostOptions<TSuccessEvent, TErrorEvent>,\n    ): Promise<TSuccessEvent> | void {\n        const targetWindow = this._targetWindow;\n\n        if (window === targetWindow) {\n            return;\n        }\n\n        if (!targetWindow) {\n            throw new Error('Unable to post message because target window is not set.');\n        }\n\n        const result =\n            options &&\n            fromEvent<MessageEvent>(window, 'message')\n                .pipe(\n                    filter(\n                        (event) =>\n                            event.origin === this._targetOrigin &&\n                            isIframeEvent(event.data, event.data.type) &&\n                            [options.successType, options.errorType].indexOf(event.data.type) !==\n                                -1,\n                    ),\n                    map((event) => {\n                        if (options.errorType === event.data.type) {\n                            throw event.data;\n                        }\n\n                        return event.data;\n                    }),\n                    take(1),\n                )\n                .toPromise();\n\n        targetWindow.postMessage({ ...event, context: this._context }, this._targetOrigin);\n\n        return result;\n    }\n\n    setTarget(window: Window) {\n        this._targetWindow = window;\n    }\n\n    setContext(context: TContext) {\n        this._context = context;\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/iframe/iframe-event.ts",
    "content": "export default interface IframeEvent<TType = string, TPayload = any> {\n    type: TType;\n    payload?: TPayload;\n}\n\nexport type IframeEventMap<TType extends string | number | symbol = string> = {\n    [key in TType]: IframeEvent<TType>;\n};\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/iframe/index.ts",
    "content": "export { default as IframeEventListener } from './iframe-event-listener';\nexport { default as IframeEventPoster } from './iframe-event-poster';\nexport { default as IframeEvent } from './iframe-event';\nexport { default as isIframeEvent } from './is-iframe-event';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/iframe/is-iframe-event.spec.ts",
    "content": "import isIframeEvent from './is-iframe-event';\n\ndescribe('isIframeEvent()', () => {\n    it('returns true if object has matching `type`', () => {\n        expect(isIframeEvent({ type: 'FOOBAR' }, 'FOOBAR')).toBe(true);\n    });\n\n    it('returns false if object does not have matching `type`', () => {\n        expect(isIframeEvent({ type: 'FOOBAR' }, 'FOO')).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/iframe/is-iframe-event.ts",
    "content": "import IframeEvent from './iframe-event';\n\nexport default function isIframeEvent<TEvent extends IframeEvent<TType>, TType extends string>(\n    object: any,\n    type: TType,\n): object is TEvent {\n    return object.type === type;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/types/card-validator.d.ts",
    "content": "import 'card-validator';\n\n// Merge @types/card-validator with missing methods. We probably don't need this\n// once the official package is updated with the latest type definitions.\ndeclare module 'card-validator' {\n    type CardBrand =\n        | 'american-express'\n        | 'diners-club'\n        | 'discover'\n        | 'jcb'\n        | 'maestro'\n        | 'mastercard'\n        | 'unionpay'\n        | 'visa'\n        | 'mada';\n\n    interface CreditCardTypeInfo {\n        patterns?: Array<number | [number, number]>;\n        niceType?: string;\n        type?: CardBrand;\n        prefixPattern?: RegExp;\n        exactPattern?: RegExp;\n        gaps?: number[];\n        lengths?: number[];\n        code?: {\n            name?: string;\n            size?: number;\n        };\n    }\n\n    interface CreditCardType {\n        types: { [type: string]: string };\n        (cardNumber: string): CreditCardTypeInfo[];\n        getTypeInfo(type: string): CreditCardTypeInfo;\n        updateCard(type: string, updates: Partial<CreditCardTypeInfo>): void;\n        addCard(config: Partial<CreditCardTypeInfo>): void;\n    }\n\n    export const creditCardType: CreditCardType;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/types/webpack.d.ts",
    "content": "declare const LIBRARY_NAME: string;\ndeclare const LIBRARY_VERSION: string;\ndeclare const MANIFEST_JSON: AssetManifest;\n\ninterface AssetManifest {\n    version: string;\n    js: string[];\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/url/append-www.spec.ts",
    "content": "import appendWww from './append-www';\n\ndescribe('appendWww', () => {\n    it('appends www to URL', () => {\n        const url = {\n            hash: '',\n            hostname: 'foobar.com',\n            href: 'https://foobar.com:8080/bar?foo=foo',\n            origin: 'https://foobar.com:8080',\n            pathname: '/bar',\n            port: '8080',\n            protocol: 'https:',\n            search: '?foo=foo',\n        };\n\n        expect(appendWww(url)).toEqual({\n            ...url,\n            origin: 'https://www.foobar.com:8080',\n            hostname: 'www.foobar.com',\n            href: 'https://www.foobar.com:8080/bar?foo=foo',\n        });\n    });\n\n    it('does not www to URL if already has www', () => {\n        const url = {\n            hash: '',\n            hostname: 'www.foobar.com',\n            href: 'https://www.foobar.com:8080/bar?foo=foo',\n            origin: 'https://www.foobar.com:8080',\n            pathname: '/bar',\n            port: '8080',\n            protocol: 'https:',\n            search: '?foo=foo',\n        };\n\n        expect(appendWww(url)).toEqual(url);\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/url/append-www.ts",
    "content": "import parseUrl from './parse-url';\nimport Url from './url';\n\nexport default function appendWww(url: Url): Url {\n    return parseUrl(\n        url.hostname.indexOf('www') === 0\n            ? url.href\n            : url.href.replace(url.hostname, `www.${url.hostname}`),\n    );\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/url/index.ts",
    "content": "export { default as appendWww } from './append-www';\nexport { default as parseUrl } from './parse-url';\nexport { default as Url } from './url';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/url/parse-url.spec.ts",
    "content": "import { InvalidArgumentError } from '../errors';\n\nimport parseUrl from './parse-url';\n\ndescribe('parseUrl()', () => {\n    it('parses URL string', () => {\n        expect(parseUrl('https://foobar.com:8080/hello/world?foo=1&bar=2#heading')).toEqual({\n            hash: '#heading',\n            hostname: 'foobar.com',\n            href: 'https://foobar.com:8080/hello/world?foo=1&bar=2#heading',\n            origin: 'https://foobar.com:8080',\n            pathname: '/hello/world',\n            port: '8080',\n            protocol: 'https:',\n            search: '?foo=1&bar=2',\n        });\n    });\n\n    it('throws error if URL is not absolute', () => {\n        expect(() => parseUrl('/hello/world')).toThrow(InvalidArgumentError);\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/url/parse-url.ts",
    "content": "import { InvalidArgumentError } from '../errors';\n\nimport Url from './url';\n\nexport default function parseUrl(url: string): Url {\n    if (!/^(https?:)?\\/\\//.test(url)) {\n        throw new InvalidArgumentError('The provided URL must be absolute.');\n    }\n\n    // new URL() is not supported in IE11, use anchor tag instead\n    const anchor = document.createElement('a');\n\n    anchor.href = url;\n\n    // IE11 returns 80 or 443 for the port number depending on the URL scheme,\n    // even if the port number is not specified in the URL.\n    const port =\n        anchor.port && url.indexOf(`${anchor.hostname}:${anchor.port}`) !== -1 ? anchor.port : '';\n\n    return {\n        hash: anchor.hash,\n        hostname: anchor.hostname,\n        href: anchor.href,\n        origin: `${anchor.protocol}//${anchor.hostname}${port ? `:${port}` : ''}`,\n        pathname: anchor.pathname,\n        port,\n        protocol: anchor.protocol,\n        search: anchor.search,\n    };\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/url/url.ts",
    "content": "export default interface Url {\n    hash: string;\n    hostname: string;\n    href: string;\n    origin: string;\n    pathname: string;\n    port: string;\n    protocol: string;\n    search: string;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/utility/bind-decorator.spec.ts",
    "content": "import { default as bind } from './bind-decorator';\n\ndescribe('bindDecorator()', () => {\n    @bind\n    class Foo {\n        constructor(private name: string) {}\n\n        getName(): string {\n            return this.name;\n        }\n    }\n\n    // tslint:disable-next-line:max-classes-per-file\n    class Bar {\n        constructor(private name: string) {}\n\n        @bind\n        getName(): string {\n            return this.name;\n        }\n    }\n\n    it('binds all methods of class to instance', () => {\n        const { getName } = new Foo('foo');\n\n        expect(getName()).toBe('foo');\n    });\n\n    it('binds method to instance', () => {\n        const { getName } = new Bar('bar');\n\n        expect(getName()).toBe('bar');\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/utility/bind-decorator.ts",
    "content": "/**\n * Decorates a class or a method by binding all its prototype methods or itself\n * to the calling instance respectively.\n */\nfunction bindDecorator<T extends Method>(\n    target: object,\n    key: string,\n    descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T>;\nfunction bindDecorator<T extends Constructor<object>>(target: T): T;\n\nfunction bindDecorator(target: any, key?: any, descriptor?: any): any {\n    if (!key || !descriptor) {\n        return bindClassDecorator(target);\n    }\n\n    return bindMethodDecorator(target, key, descriptor);\n}\n\nexport default bindDecorator;\n\n/**\n * Decorates a class by binding all its prototype methods to the calling\n * instance.\n */\nexport function bindClassDecorator<T extends Constructor<object>>(target: T): T {\n    const decoratedTarget = class extends target {};\n\n    Object.getOwnPropertyNames(target.prototype).forEach((key) => {\n        const descriptor = Object.getOwnPropertyDescriptor(target.prototype, key);\n\n        if (!descriptor || key === 'constructor') {\n            return;\n        }\n\n        Object.defineProperty(\n            decoratedTarget.prototype,\n            key,\n            bindMethodDecorator(target.prototype, key, descriptor),\n        );\n    });\n\n    return decoratedTarget;\n}\n\n/**\n * Decorates a method by binding it to the calling instance.\n */\nexport function bindMethodDecorator<T extends Method>(\n    _: object,\n    key: string,\n    descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T> {\n    if (typeof descriptor.value !== 'function') {\n        return descriptor;\n    }\n\n    let method: T = descriptor.value;\n\n    return {\n        get() {\n            const boundMethod = method.bind(this) as T;\n\n            Object.defineProperty(this, key, {\n                ...descriptor,\n                value: boundMethod,\n            });\n\n            return boundMethod;\n        },\n        set(value) {\n            method = value;\n        },\n    };\n}\n\nexport type Constructor<T> = new (...args: any[]) => T;\nexport type Method = (...args: any[]) => any;\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/utility/index.ts",
    "content": "export { default as bindDecorator } from './bind-decorator';\nexport { default as setPrototypeOf } from './set-prototype-of';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/utility/set-prototype-of.spec.ts",
    "content": "import setPrototypeOf from './set-prototype-of';\n\ndescribe('setPrototypeOf', () => {\n    it('assigns prototype to object', () => {\n        class CustomError extends Error {}\n\n        const error = new CustomError();\n\n        setPrototypeOf(error, CustomError.prototype);\n\n        expect(error instanceof CustomError).toBeTruthy();\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/common/utility/set-prototype-of.ts",
    "content": "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"
  },
  {
    "path": "packages/hosted-form-v2/src/create-hosted-form-service.ts",
    "content": "import HostedFormFactory from './hosted-form-factory';\nimport HostedFormService from './hosted-form-service';\n\n/**\n * Creates an instance of `HostedFormService`.\n *\n *\n * @param host - Host url string parameter.\n * @returns An instance of `HostedFormService`.\n */\nexport function createHostedFormService(host: string) {\n    return new HostedFormService(host, new HostedFormFactory());\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/create-hosted-form-stored-card-service.spec.ts",
    "content": "import createStoredCardHostedFormService from './create-hosted-form-stored-card-service';\nimport StoredCardHostedFormService from './stored-card-hosted-form-service';\n\ndescribe('createStoredCardHostedFormService()', () => {\n    it('returns an instance of StoredCardHostedFormService', () => {\n        const service = createStoredCardHostedFormService('https://bigpay.integration.zone');\n\n        expect(service).toBeInstanceOf(StoredCardHostedFormService);\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/create-hosted-form-stored-card-service.ts",
    "content": "import HostedFormFactory from './hosted-form-factory';\nimport StoredCardHostedFormService from './stored-card-hosted-form-service';\n\n/**\n * Creates an instance of `StoredCardHostedFormService`.\n *\n *\n * @param host - Host url string parameter.\n * @returns An instance of `StoredCardHostedFormService`.\n */\nexport default function createStoredCardHostedFormService(host: string) {\n    return new StoredCardHostedFormService(host, new HostedFormFactory());\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/errors/error-response-body.ts",
    "content": "export interface PaymentErrorResponseBody {\n    status: string;\n    errors: PaymentErrorData[];\n}\n\nexport interface PaymentErrorData {\n    code: string;\n    message?: string;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/errors/index.ts",
    "content": "export { default as InvalidHostedFormConfigError } from './invalid-hosted-form-config-error';\nexport { default as InvalidHostedFormError } from './invalid-hosted-form-error';\nexport { default as InvalidHostedFormValueError } from './invalid-hosted-form-value-error';\nexport { PaymentErrorData, PaymentErrorResponseBody } from './error-response-body';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/errors/invalid-hosted-form-config-error.ts",
    "content": "import { StandardError } from '../common/errors';\n\nexport default class InvalidHostedFormConfigError extends StandardError {\n    constructor(message?: string) {\n        super(\n            message ||\n                'Unable to proceed due to invalid configuration provided for the hosted payment form.',\n        );\n\n        this.name = 'InvalidHostedFormConfigError';\n        this.type = 'invalid_hosted_form_config';\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/errors/invalid-hosted-form-error.ts",
    "content": "import { StandardError } from '../common/errors';\n\nexport default class InvalidHostedFormError extends StandardError {\n    constructor(message?: string) {\n        super(message || 'Unable to proceed due to an unknown error with the hosted payment form.');\n\n        this.name = 'InvalidHostedFormError';\n        this.type = 'invalid_hosted_form';\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/errors/invalid-hosted-form-value-error.ts",
    "content": "import { flatMap, map, values } from 'lodash';\n\nimport { StandardError } from '../common/errors';\nimport { HostedInputValidateErrorDataMap } from '../iframe-content';\n\nexport default class InvalidHostedFormValueError extends StandardError {\n    constructor(public errors: HostedInputValidateErrorDataMap) {\n        super(\n            [\n                'Unable to proceed due to invalid user input values',\n                ...flatMap(values(errors), (fieldErrors) =>\n                    map(fieldErrors, ({ message }) => message),\n                ),\n            ].join('. '),\n        );\n\n        this.name = 'InvalidHostedFormValueError';\n        this.type = 'invalid_hosted_form_value';\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-field-events.ts",
    "content": "import HostedFieldType from './hosted-field-type';\nimport HostedFormManualOrderData from './hosted-form-manual-order-data';\nimport { HostedFieldStylesMap } from './hosted-form-options';\nimport HostedFormOrderData from './hosted-form-order-data';\nimport {\n    StoredCardHostedFormData,\n    StoredCardHostedFormInstrumentFields,\n} from './stored-card-hosted-form-type';\n\nexport enum HostedFieldEventType {\n    AttachRequested = 'HOSTED_FIELD:ATTACH_REQUESTED',\n    SubmitRequested = 'HOSTED_FIELD:SUBMITTED_REQUESTED',\n    SubmitManualOrderRequested = 'HOSTED_FIELD:SUBMIT_MANUAL_ORDER_REQUESTED',\n    ValidateRequested = 'HOSTED_FIELD:VALIDATE_REQUESTED',\n    StoredCardRequested = 'HOSTED_FIELD:STORED_CARD_REQUESTED',\n}\n\nexport interface HostedFieldEventMap {\n    [HostedFieldEventType.AttachRequested]: HostedFieldAttachEvent;\n    [HostedFieldEventType.SubmitManualOrderRequested]: HostedFieldSubmitManualOrderRequestEvent;\n    [HostedFieldEventType.ValidateRequested]: HostedFieldValidateRequestEvent;\n    [HostedFieldEventType.StoredCardRequested]: HostedFieldStoredCardRequestEvent;\n}\n\nexport type HostedFieldEvent =\n    | HostedFieldAttachEvent\n    | HostedFieldSubmitRequestEvent\n    | HostedFieldSubmitManualOrderRequestEvent\n    | HostedFieldValidateRequestEvent\n    | HostedFieldStoredCardRequestEvent;\n\nexport interface HostedFieldSubmitRequestEvent {\n    type: HostedFieldEventType.SubmitRequested;\n    payload: {\n        data: HostedFormOrderData;\n        fields: HostedFieldType[];\n    };\n}\n\nexport interface HostedFieldAttachEvent {\n    type: HostedFieldEventType.AttachRequested;\n    payload: {\n        accessibilityLabel?: string;\n        fontUrls?: string[];\n        placeholder?: string;\n        styles?: HostedFieldStylesMap;\n        origin?: string;\n        type: HostedFieldType;\n    };\n}\n\nexport interface HostedFieldSubmitManualOrderRequestEvent {\n    type: HostedFieldEventType.SubmitManualOrderRequested;\n    payload: {\n        data: HostedFormManualOrderData;\n    };\n}\n\nexport interface HostedFieldValidateRequestEvent {\n    type: HostedFieldEventType.ValidateRequested;\n}\n\nexport interface HostedFieldStoredCardRequestEvent {\n    type: HostedFieldEventType.StoredCardRequested;\n    payload: {\n        data: StoredCardHostedFormData;\n        fields: StoredCardHostedFormInstrumentFields;\n    };\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-field-type.ts",
    "content": "enum HostedFieldType {\n    CardCode = 'cardCode',\n    CardExpiry = 'cardExpiry',\n    CardName = 'cardName',\n    CardNumber = 'cardNumber',\n    Note = 'note',\n    Hidden = 'hidden',\n}\n\nexport default HostedFieldType;\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-field.spec.ts",
    "content": "import {\n    getErrorPaymentResponseBody,\n    getResponse,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { DetachmentObserver } from './common/dom';\nimport { RequestError } from './common/errors';\nimport { IframeEventListener, IframeEventPoster } from './common/iframe';\nimport { InvalidHostedFormConfigError, InvalidHostedFormError } from './errors';\nimport HostedField from './hosted-field';\nimport { HostedFieldEvent, HostedFieldEventType } from './hosted-field-events';\nimport HostedFieldType from './hosted-field-type';\nimport { getHostedFormOrderData } from './hosted-form-order-data.mock';\nimport { HostedInputEventMap, HostedInputEventType } from './iframe-content';\nimport {\n    StoredCardHostedFormDataMock,\n    StoredCardHostedFormInstrumentFieldsMock,\n} from './stored-card-hosted-form.mock';\n\ndescribe('HostedField', () => {\n    let container: HTMLDivElement;\n    let field: HostedField;\n    let controlPannelField: HostedField;\n    let detachmentObserver: Pick<DetachmentObserver, 'ensurePresence'>;\n    let eventPoster: Pick<IframeEventPoster<HostedFieldEvent>, 'post' | 'setTarget'>;\n    let eventListener: Pick<IframeEventListener<HostedInputEventMap>, 'listen'>;\n    let orderId: number;\n\n    beforeEach(() => {\n        container = document.createElement('div');\n        detachmentObserver = { ensurePresence: jest.fn((_, promise) => promise) };\n        eventPoster = { post: jest.fn(), setTarget: jest.fn() };\n        eventListener = { listen: jest.fn() };\n        orderId = 1;\n\n        container.id = 'field-container-id';\n        document.body.appendChild(container);\n\n        controlPannelField = new HostedField(\n            HostedFieldType.CardNumber,\n            'field-container-id',\n            'Enter your card number here',\n            'Card number',\n            { default: { color: 'rgb(0, 0, 0)', fontFamily: 'Open Sans, Arial' } },\n            eventPoster as IframeEventPoster<HostedFieldEvent>,\n            eventListener as IframeEventListener<HostedInputEventMap>,\n            detachmentObserver as DetachmentObserver,\n            orderId,\n        );\n\n        field = new HostedField(\n            HostedFieldType.CardNumber,\n            'field-container-id',\n            'Enter your card number here',\n            'Card number',\n            { default: { color: 'rgb(0, 0, 0)', fontFamily: 'Open Sans, Arial' } },\n            eventPoster as IframeEventPoster<HostedFieldEvent>,\n            eventListener as IframeEventListener<HostedInputEventMap>,\n            detachmentObserver as DetachmentObserver,\n        );\n    });\n\n    afterEach(() => {\n        container.remove();\n    });\n\n    it('attaches iframe to container', () => {\n        field.attach();\n\n        expect(document.querySelector('#field-container-id iframe')).toBeDefined();\n    });\n\n    it('sets iframe URL with version param', () => {\n        field.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        expect(document.querySelector<HTMLIFrameElement>('#field-container-id iframe')!.src).toBe(\n            `${location.origin}/account/stored-instruments/hosted-fields?version=1.0.0`,\n        );\n    });\n\n    it('sets iframe URL with version param for Control Panel Iframe', () => {\n        controlPannelField.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        expect(document.querySelector<HTMLIFrameElement>('#field-container-id iframe')!.src).toBe(\n            `${location.origin}/admin/payments/${orderId}/hosted-form-field?version=1.0.0`,\n        );\n    });\n\n    it('sets target for event poster', async () => {\n        process.nextTick(() => {\n            // tslint:disable-next-line:no-non-null-assertion\n            document.querySelector('#field-container-id iframe')!.dispatchEvent(new Event('load'));\n        });\n\n        await field.attach();\n\n        expect(eventPoster.setTarget).toHaveBeenCalled();\n    });\n\n    it('ensures presence of iframe during attachment', async () => {\n        process.nextTick(() => {\n            // tslint:disable-next-line:no-non-null-assertion\n            document.querySelector('#field-container-id iframe')!.dispatchEvent(new Event('load'));\n        });\n\n        const promise = field.attach();\n\n        await promise;\n\n        expect(detachmentObserver.ensurePresence).toHaveBeenCalledWith(\n            [document.querySelector('#field-container-id iframe')],\n            promise,\n        );\n    });\n\n    it('notifies if able to attach', async () => {\n        jest.spyOn(eventPoster, 'post').mockResolvedValue({\n            type: HostedInputEventType.AttachSucceeded,\n        });\n\n        process.nextTick(() => {\n            // tslint:disable-next-line:no-non-null-assertion\n            document.querySelector('#field-container-id iframe')!.dispatchEvent(new Event('load'));\n        });\n\n        await field.attach();\n\n        expect(eventPoster.post).toHaveBeenCalledWith(\n            {\n                type: HostedFieldEventType.AttachRequested,\n                payload: {\n                    accessibilityLabel: 'Card number',\n                    fontUrls: [],\n                    placeholder: 'Enter your card number here',\n                    styles: { default: { color: 'rgb(0, 0, 0)', fontFamily: 'Open Sans, Arial' } },\n                    origin: document.location.origin,\n                    type: HostedFieldType.CardNumber,\n                },\n            },\n            {\n                successType: HostedInputEventType.AttachSucceeded,\n                errorType: HostedInputEventType.AttachFailed,\n            },\n        );\n    });\n\n    it('notifies with font URLs if available', async () => {\n        const linkElement = document.createElement('link');\n\n        linkElement.href = 'https://fonts.googleapis.com/css?family=Open+Sans&display=swap';\n        linkElement.rel = 'stylesheet';\n\n        document.head.appendChild(linkElement);\n\n        jest.spyOn(eventPoster, 'post').mockResolvedValue({\n            type: HostedInputEventType.AttachSucceeded,\n        });\n\n        process.nextTick(() => {\n            // tslint:disable-next-line:no-non-null-assertion\n            document.querySelector('#field-container-id iframe')!.dispatchEvent(new Event('load'));\n        });\n\n        await field.attach();\n\n        expect(eventPoster.post).toHaveBeenCalledWith(\n            {\n                type: HostedFieldEventType.AttachRequested,\n                payload: expect.objectContaining({\n                    type: HostedFieldType.CardNumber,\n                    fontUrls: ['https://fonts.googleapis.com/css?family=Open+Sans&display=swap'],\n                }),\n            },\n            expect.any(Object),\n        );\n    });\n\n    it('throws error if container is invalid', async () => {\n        container.remove();\n\n        try {\n            await field.attach();\n        } catch (error) {\n            expect(error).toBeInstanceOf(InvalidHostedFormConfigError);\n        }\n    });\n\n    it('sends request to submit payment data', async () => {\n        jest.spyOn(eventPoster, 'post').mockResolvedValue({\n            type: HostedInputEventType.SubmitSucceeded,\n        });\n\n        const fields = [HostedFieldType.CardExpiry, HostedFieldType.CardNumber];\n        const data = getHostedFormOrderData();\n\n        await field.submitForm(fields, data);\n\n        expect(eventPoster.post).toHaveBeenCalledWith(\n            {\n                type: HostedFieldEventType.SubmitRequested,\n                payload: { fields, data },\n            },\n            {\n                successType: HostedInputEventType.SubmitSucceeded,\n                errorType: HostedInputEventType.SubmitFailed,\n            },\n        );\n    });\n\n    it('sends request to submit stored card form data', async () => {\n        jest.spyOn(eventPoster, 'post').mockResolvedValue({\n            type: HostedInputEventType.StoredCardSucceeded,\n        });\n\n        await field.submitStoredCardForm(\n            StoredCardHostedFormInstrumentFieldsMock,\n            StoredCardHostedFormDataMock,\n        );\n\n        expect(eventPoster.post).toHaveBeenCalledWith(\n            {\n                type: HostedFieldEventType.StoredCardRequested,\n                payload: {\n                    fields: StoredCardHostedFormInstrumentFieldsMock,\n                    data: StoredCardHostedFormDataMock,\n                },\n            },\n            {\n                successType: HostedInputEventType.StoredCardSucceeded,\n                errorType: HostedInputEventType.StoredCardFailed,\n            },\n        );\n    });\n\n    it('sends request to submit manual order form data', async () => {\n        jest.spyOn(eventPoster, 'post').mockResolvedValue({\n            type: HostedInputEventType.StoredCardSucceeded,\n        });\n\n        const data = {\n            paymentMethodId: 'card',\n            paymentSessionToken: '123123123',\n        };\n\n        await controlPannelField.submitManualOrderForm(data);\n\n        expect(eventPoster.post).toHaveBeenCalledWith(\n            {\n                type: HostedFieldEventType.SubmitManualOrderRequested,\n                payload: { data },\n            },\n            {\n                successType: HostedInputEventType.SubmitManualOrderSucceeded,\n                errorType: HostedInputEventType.SubmitManualOrderFailed,\n            },\n        );\n    });\n\n    it('ensures presence of iframe during submission', async () => {\n        field.attach();\n\n        const fields = [HostedFieldType.CardExpiry, HostedFieldType.CardNumber];\n        const data = getHostedFormOrderData();\n        const promise = field.submitForm(fields, data);\n\n        await promise;\n\n        expect(detachmentObserver.ensurePresence).toHaveBeenCalledWith(\n            [document.querySelector('#field-container-id iframe')],\n            promise,\n        );\n    });\n\n    it('throws error if unable to submit payment', async () => {\n        jest.spyOn(eventPoster, 'post').mockRejectedValue({\n            type: HostedInputEventType.SubmitFailed,\n            payload: { error: { code: 'hosted_form_error', message: 'Invalid form' } },\n        });\n\n        const fields = [HostedFieldType.CardExpiry, HostedFieldType.CardNumber];\n        const data = getHostedFormOrderData();\n\n        try {\n            await field.submitForm(fields, data);\n        } catch (error) {\n            expect(error).toBeInstanceOf(InvalidHostedFormError);\n        }\n    });\n\n    it('forwards error if submission fails because of server error', async () => {\n        jest.spyOn(eventPoster, 'post').mockRejectedValue({\n            type: HostedInputEventType.SubmitFailed,\n            payload: {\n                // tslint:disable-next-line:no-non-null-assertion\n                error: getErrorPaymentResponseBody().errors![0],\n                response: getResponse(getErrorPaymentResponseBody()),\n            },\n        });\n\n        const fields = [HostedFieldType.CardExpiry, HostedFieldType.CardNumber];\n        const data = getHostedFormOrderData();\n\n        try {\n            await field.submitForm(fields, data);\n        } catch (error) {\n            expect(error).toBeInstanceOf(RequestError);\n        }\n    });\n\n    it('forwards error if submission fails because of runtime error', async () => {\n        const rejection = new Error('Runtime error');\n\n        jest.spyOn(eventPoster, 'post').mockRejectedValue(rejection);\n\n        const fields = [HostedFieldType.CardExpiry, HostedFieldType.CardNumber];\n        const data = getHostedFormOrderData();\n\n        try {\n            await field.submitForm(fields, data);\n        } catch (error) {\n            expect(error).toEqual(rejection);\n        }\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-field.ts",
    "content": "import { values } from 'lodash';\nimport { fromEvent } from 'rxjs';\nimport { switchMap, take } from 'rxjs/operators';\n\nimport { DetachmentObserver } from './common/dom';\nimport { mapFromPaymentErrorResponse } from './common/errors';\nimport { IframeEventListener, IframeEventPoster } from './common/iframe';\nimport { parseUrl } from './common/url';\nimport {\n    InvalidHostedFormConfigError,\n    InvalidHostedFormError,\n    InvalidHostedFormValueError,\n} from './errors';\nimport { HostedFieldEvent, HostedFieldEventType } from './hosted-field-events';\nimport HostedFieldType from './hosted-field-type';\nimport HostedFormManualOrderData from './hosted-form-manual-order-data';\nimport { HostedFieldStylesMap } from './hosted-form-options';\nimport HostedFormOrderData from './hosted-form-order-data';\nimport {\n    HostedInputEventMap,\n    HostedInputEventType,\n    HostedInputStoredCardSucceededEvent,\n    HostedInputSubmitErrorEvent,\n    HostedInputSubmitManualOrderErrorEvent,\n    HostedInputSubmitManualOrderSuccessEvent,\n    HostedInputSubmitSuccessEvent,\n    HostedInputValidateEvent,\n} from './iframe-content';\nimport {\n    StoredCardHostedFormData,\n    StoredCardHostedFormInstrumentFields,\n} from './stored-card-hosted-form-type';\n\nexport const RETRY_INTERVAL = 60 * 1000;\nexport const LAST_RETRY_KEY = 'lastRetry';\n\nexport default class HostedField {\n    private _iframe: HTMLIFrameElement;\n\n    constructor(\n        private _type: HostedFieldType,\n        private _containerId: string,\n        private _placeholder: string,\n        private _accessibilityLabel: string,\n        private _styles: HostedFieldStylesMap,\n        private _eventPoster: IframeEventPoster<HostedFieldEvent>,\n        private _eventListener: IframeEventListener<HostedInputEventMap>,\n        private _detachmentObserver: DetachmentObserver,\n        private _orderId?: number,\n    ) {\n        this._iframe = document.createElement('iframe');\n\n        this._iframe.src = this.getFrameSrc(this._orderId);\n        this._iframe.style.border = 'none';\n        this._iframe.style.height = '100%';\n        this._iframe.style.overflow = 'hidden';\n        this._iframe.style.width = '100%';\n    }\n\n    private getFrameSrc(orderId?: number): string {\n        return typeof orderId !== 'undefined'\n            ? `/admin/payments/${this._orderId}/hosted-form-field?version=${LIBRARY_VERSION}`\n            : `/account/stored-instruments/hosted-fields?version=${LIBRARY_VERSION}`;\n    }\n\n    getType(): HostedFieldType {\n        return this._type;\n    }\n\n    async attach(): Promise<void> {\n        const container = document.getElementById(this._containerId);\n\n        if (!container) {\n            throw new InvalidHostedFormConfigError(\n                'Unable to proceed because the provided container ID is not valid.',\n            );\n        }\n\n        container.appendChild(this._iframe);\n        this._eventListener.listen();\n\n        const promise = fromEvent(this._iframe, 'load')\n            .pipe(\n                switchMap(async ({ target }) => {\n                    const contentWindow = target && (target as HTMLIFrameElement).contentWindow;\n\n                    if (!contentWindow) {\n                        throw new Error('The content window of the iframe cannot be accessed.');\n                    }\n\n                    this._eventPoster.setTarget(contentWindow);\n\n                    await this._eventPoster.post(\n                        {\n                            type: HostedFieldEventType.AttachRequested,\n                            payload: {\n                                accessibilityLabel: this._accessibilityLabel,\n                                fontUrls: this._getFontUrls(),\n                                placeholder: this._placeholder,\n                                styles: this._styles,\n                                origin: document.location.origin,\n                                type: this._type,\n                            },\n                        },\n                        {\n                            successType: HostedInputEventType.AttachSucceeded,\n                            errorType: HostedInputEventType.AttachFailed,\n                        },\n                    );\n                }),\n                take(1),\n            )\n            .toPromise();\n\n        await this._detachmentObserver.ensurePresence([this._iframe], promise);\n    }\n\n    detach(): void {\n        if (!this._iframe.parentElement) {\n            return;\n        }\n\n        this._iframe.parentElement.removeChild(this._iframe);\n        this._eventListener.stopListen();\n    }\n\n    async submitForm(\n        fields: HostedFieldType[],\n        data: HostedFormOrderData,\n    ): Promise<HostedInputSubmitSuccessEvent> {\n        try {\n            const promise = this._eventPoster.post<HostedInputSubmitSuccessEvent>(\n                {\n                    type: HostedFieldEventType.SubmitRequested,\n                    payload: { fields, data },\n                },\n                {\n                    successType: HostedInputEventType.SubmitSucceeded,\n                    errorType: HostedInputEventType.SubmitFailed,\n                },\n            );\n\n            return await this._detachmentObserver.ensurePresence([this._iframe], promise);\n        } catch (event) {\n            if (this._isSubmitErrorEvent(event)) {\n                if (event.payload.error.code === 'hosted_form_error') {\n                    throw new InvalidHostedFormError(event.payload.error.message);\n                }\n\n                if (event.payload.response) {\n                    throw mapFromPaymentErrorResponse(event.payload.response);\n                }\n\n                throw new Error(event.payload.error.message);\n            }\n\n            throw event;\n        }\n    }\n\n    async submitManualOrderForm(\n        data: HostedFormManualOrderData,\n    ): Promise<HostedInputSubmitManualOrderSuccessEvent> {\n        try {\n            const promise = this._eventPoster.post<HostedInputSubmitManualOrderSuccessEvent>(\n                {\n                    type: HostedFieldEventType.SubmitManualOrderRequested,\n                    payload: { data },\n                },\n                {\n                    successType: HostedInputEventType.SubmitManualOrderSucceeded,\n                    errorType: HostedInputEventType.SubmitManualOrderFailed,\n                },\n            );\n\n            return await this._detachmentObserver.ensurePresence([this._iframe], promise);\n        } catch (event) {\n            if (this._isSubmitManualOrderErrorEvent(event)) {\n                if (event.payload.error.code === 'hosted_form_error') {\n                    throw new InvalidHostedFormError(event.payload.error.message);\n                }\n\n                if (event.payload.error.message) {\n                    throw new Error(event.payload.error.message);\n                }\n\n                throw new Error(event.payload.error.code);\n            }\n\n            throw event;\n        }\n    }\n\n    async submitStoredCardForm(\n        fields: StoredCardHostedFormInstrumentFields,\n        data: StoredCardHostedFormData,\n    ): Promise<HostedInputStoredCardSucceededEvent> {\n        const promise = this._eventPoster.post<HostedInputStoredCardSucceededEvent>(\n            {\n                type: HostedFieldEventType.StoredCardRequested,\n                payload: { fields, data },\n            },\n            {\n                successType: HostedInputEventType.StoredCardSucceeded,\n                errorType: HostedInputEventType.StoredCardFailed,\n            },\n        );\n\n        return this._detachmentObserver.ensurePresence([this._iframe], promise);\n    }\n\n    async validateForm(): Promise<void> {\n        const promise = this._eventPoster.post<HostedInputValidateEvent>(\n            {\n                type: HostedFieldEventType.ValidateRequested,\n            },\n            {\n                successType: HostedInputEventType.Validated,\n            },\n        );\n\n        const { payload } = await this._detachmentObserver.ensurePresence([this._iframe], promise);\n\n        if (!payload.isValid) {\n            throw new InvalidHostedFormValueError(payload.errors);\n        }\n    }\n\n    private _getFontUrls(): string[] {\n        const hostname = 'fonts.googleapis.com';\n        const links = document.querySelectorAll(`link[href*='${hostname}'][rel='stylesheet']`);\n\n        return Array.prototype.slice\n            .call(links)\n            .filter((link) => parseUrl(link.href).hostname === hostname)\n            .filter((link) =>\n                values(this._styles)\n                    .map((style) => style && style.fontFamily)\n                    .filter((family): family is string => typeof family === 'string')\n                    .some((family) =>\n                        family\n                            .split(/,\\s/)\n                            .some((name) => link.href.indexOf(name.replace(' ', '+')) !== -1),\n                    ),\n            )\n            .map((link) => link.href);\n    }\n\n    private _isSubmitManualOrderErrorEvent(\n        event: any,\n    ): event is HostedInputSubmitManualOrderErrorEvent {\n        if (!(event instanceof Object) || event === null || !('type' in event)) {\n            return false;\n        }\n\n        return event.type === HostedInputEventType.SubmitManualOrderFailed;\n    }\n\n    private _isSubmitErrorEvent(event: any): event is HostedInputSubmitErrorEvent {\n        return event.type === HostedInputEventType.SubmitFailed;\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-form-factory.spec.ts",
    "content": "import HostedFieldType from './hosted-field-type';\nimport HostedForm from './hosted-form';\nimport HostedFormFactory from './hosted-form-factory';\n\ndescribe('HostedFormFactory', () => {\n    let factory: HostedFormFactory;\n\n    beforeEach(() => {\n        factory = new HostedFormFactory();\n    });\n\n    it('creates hosted form', () => {\n        const result = factory.create('https://store.foobar.com', {\n            fields: {\n                [HostedFieldType.CardCode]: { containerId: 'card-code' },\n                [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                [HostedFieldType.CardName]: { containerId: 'card-name' },\n                [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n            },\n            orderId: 1,\n        });\n\n        expect(result).toBeInstanceOf(HostedForm);\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-form-factory.ts",
    "content": "import { pick } from 'lodash';\n\nimport { DetachmentObserver, MutationObserverFactory } from './common/dom';\nimport { IframeEventListener, IframeEventPoster } from './common/iframe';\nimport HostedField from './hosted-field';\nimport HostedFieldType from './hosted-field-type';\nimport HostedForm from './hosted-form';\nimport HostedFormOptions from './hosted-form-options';\n\nexport default class HostedFormFactory {\n    create(host: string, options: HostedFormOptions): HostedForm {\n        const fieldTypes = Object.keys(options.fields) as HostedFieldType[];\n        const fields = fieldTypes.reduce<HostedField[]>((result, type) => {\n            const fields = options.fields;\n            const fieldOptions = fields[type];\n\n            if (!fieldOptions) {\n                return result;\n            }\n\n            return [\n                ...result,\n                new HostedField(\n                    type,\n                    fieldOptions.containerId,\n                    fieldOptions.placeholder || '',\n                    fieldOptions.accessibilityLabel || '',\n                    options.styles || {},\n                    new IframeEventPoster(host),\n                    new IframeEventListener(host),\n                    new DetachmentObserver(new MutationObserverFactory()),\n                    options.orderId,\n                ),\n            ];\n        }, []);\n\n        return new HostedForm(\n            fields,\n            new IframeEventListener(host),\n            pick(options, 'onBlur', 'onEnter', 'onFocus', 'onCardTypeChange', 'onValidate'),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-form-manual-order-data.ts",
    "content": "export default interface HostedFormManualOrderData {\n    paymentMethodId: string;\n    paymentSessionToken: string;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-form-options.ts",
    "content": "import HostedFieldType from './hosted-field-type';\nimport {\n    HostedInputBlurEvent,\n    HostedInputCardTypeChangeEvent,\n    HostedInputEnterEvent,\n    HostedInputFocusEvent,\n    HostedInputStyles,\n    HostedInputValidateEvent,\n} from './iframe-content';\n\nexport default interface HostedFormOptions {\n    fields: HostedCardFieldOptionsMap;\n    orderId?: number;\n    styles?: HostedFieldStylesMap;\n    onBlur?(data: HostedFieldBlurEventData): void;\n    onCardTypeChange?(data: HostedFieldCardTypeChangeEventData): void;\n    onEnter?(data: HostedFieldEnterEventData): void;\n    onFocus?(data: HostedFieldFocusEventData): void;\n    onValidate?(data: HostedFieldValidateEventData): void;\n}\n\nexport type HostedFormErrorDataKeys =\n    | 'number'\n    | 'expirationDate'\n    | 'expirationMonth'\n    | 'expirationYear'\n    | 'cvv'\n    | 'postalCode';\n\nexport interface HostedFormErrorData {\n    isEmpty: boolean;\n    isPotentiallyValid: boolean;\n    isValid: boolean;\n}\n\nexport type HostedFormErrorsData = Partial<Record<HostedFormErrorDataKeys, HostedFormErrorData>>;\n\nexport type HostedFieldBlurEventData = HostedInputBlurEvent['payload'];\nexport type HostedFieldCardTypeChangeEventData = HostedInputCardTypeChangeEvent['payload'];\nexport type HostedFieldEnterEventData = HostedInputEnterEvent['payload'];\nexport type HostedFieldFocusEventData = HostedInputFocusEvent['payload'];\nexport type HostedFieldValidateEventData = HostedInputValidateEvent['payload'];\n\nexport interface HostedCardFieldOptionsMap {\n    [HostedFieldType.CardCode]?: HostedCardFieldOptions;\n    [HostedFieldType.CardExpiry]?: HostedCardFieldOptions;\n    [HostedFieldType.CardName]?: HostedCardFieldOptions;\n    [HostedFieldType.CardNumber]?: HostedCardFieldOptions;\n    [HostedFieldType.Note]?: HostedCardFieldOptions;\n    [HostedFieldType.Hidden]?: HostedCardFieldOptions;\n}\n\nexport interface HostedCardFieldOptions {\n    accessibilityLabel?: string;\n    containerId: string;\n    placeholder?: string;\n}\n\nexport interface HostedFieldStylesMap {\n    default?: HostedFieldStyles;\n    error?: HostedFieldStyles;\n    focus?: HostedFieldStyles;\n}\n\nexport type HostedFieldStyles = HostedInputStyles;\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-form-order-data-transformer.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport HostedFormOrderDataTransformer from './hosted-form-order-data-transformer';\n\ndescribe('HostedFormOrderDataTransformer', () => {\n    let transformer: HostedFormOrderDataTransformer;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        transformer = new HostedFormOrderDataTransformer(paymentIntegrationService);\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentToken').mockReturnValue(\n            'auth-token',\n        );\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(paymentIntegrationService.getState(), 'getInstrumentsMeta').mockReturnValue({\n            vaultAccessToken: 'vault-token',\n        });\n    });\n\n    it('transforms payload', () => {\n        const result = transformer.transform({\n            methodId: 'authorizenet',\n            paymentData: { shouldSaveInstrument: true },\n        });\n\n        expect(Object.keys(result)).toEqual(\n            expect.arrayContaining([\n                'authToken',\n                'checkout',\n                'config',\n                'order',\n                'orderMeta',\n                'payment',\n                'paymentMethod',\n                'paymentMethodMeta',\n            ]),\n        );\n    });\n\n    it('includes vault access token if paying with stored instrument', () => {\n        const result = transformer.transform({\n            methodId: 'authorizenet',\n            paymentData: { instrumentId: '123' },\n        });\n\n        expect(result.authToken).toBe('auth-token, vault-token');\n    });\n\n    it('does not include vault access token if not paying with stored instrument', () => {\n        const result = transformer.transform({\n            methodId: 'authorizenet',\n            paymentData: {\n                ccExpiry: {\n                    month: '12',\n                    year: '2020',\n                },\n                ccName: 'Foo Bar',\n                ccNumber: '4111 1111 1111 1111',\n            },\n        });\n\n        expect(result.authToken).toBe('auth-token');\n    });\n\n    it('returns AdditionalAction object within response if received as a parameter', () => {\n        const additionalActionMock = {\n            type: 'recaptcha_v2_verification',\n            data: {\n                human_verification_token: 'googleRecaptchaToken',\n            },\n        };\n\n        const result = transformer.transform(\n            {\n                methodId: 'authorizenet',\n                paymentData: { instrumentId: '123' },\n            },\n            additionalActionMock,\n        );\n\n        expect(result.additionalAction).toEqual(additionalActionMock);\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-form-order-data-transformer.ts",
    "content": "import { omit } from 'lodash';\n\nimport {\n    HostedCreditCardInstrument,\n    isVaultedInstrument,\n    MissingDataError,\n    MissingDataErrorType,\n    OrderPaymentRequestBody,\n    PaymentAdditionalAction,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport HostedFormOrderData from './hosted-form-order-data';\n\nexport default class HostedFormOrderDataTransformer {\n    constructor(private paymentIntegrationService: PaymentIntegrationService) {}\n\n    transform(\n        payload: OrderPaymentRequestBody,\n        additionalAction?: PaymentAdditionalAction,\n    ): HostedFormOrderData {\n        const state = this.paymentIntegrationService.getState();\n        const checkout = state.getCheckout();\n        const config = state.getConfig();\n        const instrumentMeta = state.getInstrumentsMeta();\n        const order = state.getOrder();\n        const orderMeta = state.getOrderMeta();\n        const payment = omit(\n            payload.paymentData,\n            'ccExpiry',\n            'ccName',\n            'ccNumber',\n            'ccCvv',\n        ) as HostedCreditCardInstrument;\n        const paymentMethod = state.getPaymentMethod(payload.methodId, payload.gatewayId);\n        const paymentMethodMeta = state.getPaymentMethodsMeta();\n        const isVaulted = payment && isVaultedInstrument(payment);\n        const authToken =\n            isVaulted && instrumentMeta\n                ? `${state.getPaymentToken()}, ${instrumentMeta.vaultAccessToken}`\n                : state.getPaymentToken();\n\n        if (!authToken) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n        }\n\n        return {\n            additionalAction,\n            authToken,\n            checkout,\n            config,\n            order,\n            orderMeta,\n            payment,\n            paymentMethod,\n            paymentMethodMeta,\n        };\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-form-order-data.mock.ts",
    "content": "import {\n    getCheckoutWithGiftCertificates,\n    getConfig,\n    getOrder,\n    getOrderMeta,\n    getPaymentMethod,\n    getPaymentMethodsMeta,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport HostedFormOrderData from './hosted-form-order-data';\n\nexport function getHostedFormOrderData(): HostedFormOrderData {\n    return {\n        authToken: 'auth-token',\n        checkout: getCheckoutWithGiftCertificates(),\n        config: getConfig(),\n        order: getOrder(),\n        orderMeta: getOrderMeta(),\n        payment: {},\n        paymentMethod: getPaymentMethod(),\n        paymentMethodMeta: getPaymentMethodsMeta(),\n    };\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-form-order-data.ts",
    "content": "import {\n    Checkout,\n    Config,\n    HostedCreditCardInstrument,\n    HostedVaultedInstrument,\n    Order,\n    OrderMeta,\n    PaymentAdditionalAction,\n    PaymentInstrumentMeta,\n    PaymentMethod,\n    PaymentMethodMeta,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default interface HostedFormOrderData {\n    additionalAction?: PaymentAdditionalAction;\n    authToken: string;\n    checkout?: Checkout;\n    config?: Config;\n    order?: Order;\n    orderMeta?: OrderMeta;\n    payment?: (HostedCreditCardInstrument | HostedVaultedInstrument) & PaymentInstrumentMeta;\n    paymentMethod?: PaymentMethod;\n    paymentMethodMeta?: PaymentMethodMeta;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-form-service.ts",
    "content": "import { NotInitializedError, NotInitializedErrorType } from './common/errors';\nimport HostedForm from './hosted-form';\nimport HostedFormFactory from './hosted-form-factory';\nimport HostedFormManualOrderData from './hosted-form-manual-order-data';\nimport HostedFormOptions from './hosted-form-options';\nimport { HostedInputSubmitManualOrderSuccessEvent } from './iframe-content';\n\nexport default class HostedFormService {\n    protected _hostedForm?: HostedForm;\n    constructor(protected _host: string, protected _hostedFormFactory: HostedFormFactory) {}\n\n    initialize(options: HostedFormOptions): Promise<void> {\n        const form = this._hostedFormFactory.create(this._host, options);\n\n        return form.attach().then(() => {\n            this._hostedForm = form;\n        });\n    }\n\n    deinitialize() {\n        if (this._hostedForm) {\n            this._hostedForm.detach();\n            this._hostedForm = undefined;\n        }\n    }\n\n    async submitManualOrderPayment(\n        data: HostedFormManualOrderData,\n    ): Promise<HostedInputSubmitManualOrderSuccessEvent | void> {\n        const form = this._hostedForm;\n\n        if (!form) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        await form.validate();\n\n        return form.submitManualOrderPayment({ data });\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-form.spec.ts",
    "content": "import {\n    PaymentIntegrationService,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getErrorResponse,\n    getErrorResponseBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { IframeEventListener } from './common/iframe';\nimport HostedField from './hosted-field';\nimport HostedFieldType from './hosted-field-type';\nimport HostedForm from './hosted-form';\nimport HostedFormOptions from './hosted-form-options';\nimport HostedFormOrderDataTransformer from './hosted-form-order-data-transformer';\nimport { getHostedFormOrderData } from './hosted-form-order-data.mock';\nimport { HostedInputEventMap, HostedInputEventType } from './iframe-content';\nimport {\n    StoredCardHostedFormDataMock,\n    StoredCardHostedFormInstrumentFieldsMock,\n} from './stored-card-hosted-form.mock';\n\ndescribe('HostedForm', () => {\n    let callbacks: Pick<\n        HostedFormOptions,\n        'onBlur' | 'onCardTypeChange' | 'onEnter' | 'onFocus' | 'onValidate'\n    >;\n    let eventListener: IframeEventListener<HostedInputEventMap>;\n    let fields: HostedField[];\n    let form: HostedForm;\n    let payloadTransformer: HostedFormOrderDataTransformer;\n    let errorResponse: RequestError;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    const fieldPrototype: Partial<HostedField> = {\n        attach: jest.fn(),\n        detach: jest.fn(),\n        getType: jest.fn(),\n        submitForm: jest.fn(),\n        submitStoredCardForm: jest.fn(),\n        submitManualOrderForm: jest.fn(),\n        validateForm: jest.fn(),\n    };\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        payloadTransformer = new HostedFormOrderDataTransformer(paymentIntegrationService);\n        callbacks = {\n            onBlur: jest.fn(),\n            onEnter: jest.fn(),\n            onFocus: jest.fn(),\n            onCardTypeChange: jest.fn(),\n            onValidate: jest.fn(),\n        };\n\n        fields = [\n            Object.create(fieldPrototype) as HostedField,\n            Object.create(fieldPrototype) as HostedField,\n            Object.create(fieldPrototype) as HostedField,\n            Object.create(fieldPrototype) as HostedField,\n        ];\n\n        jest.spyOn(fields[0], 'getType').mockReturnValue(HostedFieldType.CardCode);\n        jest.spyOn(fields[1], 'getType').mockReturnValue(HostedFieldType.CardExpiry);\n        jest.spyOn(fields[2], 'getType').mockReturnValue(HostedFieldType.CardName);\n        jest.spyOn(fields[3], 'getType').mockReturnValue(HostedFieldType.CardNumber);\n\n        eventListener = new IframeEventListener('https://store.foobar.com');\n        form = new HostedForm(fields, eventListener, callbacks);\n\n        errorResponse = {\n            ...getErrorResponse(),\n            body: {\n                ...getErrorResponseBody(),\n                status: 'additional_action_required',\n                additional_action_required: {\n                    type: 'recaptcha_v2_verification',\n                    data: {\n                        key: 'recaptchakey123',\n                    },\n                },\n            },\n            errors: [],\n            name: '',\n            type: '',\n            message: '',\n        };\n    });\n\n    it('attaches all fields to document', async () => {\n        fields.forEach((field) => jest.spyOn(field, 'attach').mockResolvedValue(undefined));\n\n        await form.attach();\n\n        expect(fields[0].attach).toHaveBeenCalled();\n        expect(fields[1].attach).toHaveBeenCalled();\n        expect(fields[2].attach).toHaveBeenCalled();\n        expect(fields[3].attach).toHaveBeenCalled();\n    });\n\n    it('detaches all fields from document', async () => {\n        fields.forEach((field) => jest.spyOn(field, 'detach').mockReturnValue(undefined));\n\n        await form.detach();\n\n        expect(fields[0].detach).toHaveBeenCalled();\n        expect(fields[1].detach).toHaveBeenCalled();\n        expect(fields[2].detach).toHaveBeenCalled();\n        expect(fields[3].detach).toHaveBeenCalled();\n    });\n\n    it('submits payment by passing order data to number field', async () => {\n        const field = fields.find((field) => field.getType() === HostedFieldType.CardNumber)!;\n        const data = getHostedFormOrderData();\n        const payload = {\n            methodId: 'authorizenet',\n            paymentData: { shouldSaveInstrument: true },\n        };\n        const response = {\n            status: 'ok',\n        };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(field, 'submitForm').mockResolvedValue({ payload: { response } });\n\n        jest.spyOn(payloadTransformer, 'transform').mockReturnValue(data);\n\n        await form.submit(payload, paymentIntegrationService, payloadTransformer);\n\n        expect(payloadTransformer.transform).toHaveBeenCalledWith(payload, undefined);\n        expect(field.submitForm).toHaveBeenCalledWith(\n            fields.map((field) => field.getType()),\n            data,\n        );\n    });\n\n    it('submits payment again after human verification performed', async () => {\n        // tslint:disable-next-line:no-non-null-assertion\n        const field = fields.find((field) => field.getType() === HostedFieldType.CardNumber)!;\n        const data = getHostedFormOrderData();\n        const response = {\n            status: 'ok',\n        };\n        const payload = {\n            methodId: 'authorizenet',\n            paymentData: { shouldSaveInstrument: true },\n        };\n\n        jest.spyOn(field, 'submitForm')\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            .mockResolvedValueOnce({ payload: { response: errorResponse } })\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            .mockResolvedValue({ payload: { response } });\n\n        jest.spyOn(payloadTransformer, 'transform').mockReturnValue(data);\n\n        await form.submit(payload, paymentIntegrationService, payloadTransformer);\n\n        expect(field.submitForm).toHaveBeenCalledTimes(2);\n    });\n\n    it('notifies when card type changes', () => {\n        eventListener.trigger({\n            type: HostedInputEventType.CardTypeChanged,\n            payload: { cardType: 'visa' },\n        });\n\n        expect(callbacks.onCardTypeChange).toHaveBeenCalledWith({ cardType: 'visa' });\n    });\n\n    it('notifies when validation happens', () => {\n        const payload = {\n            isValid: false,\n            errors: {\n                cardCode: [\n                    {\n                        fieldType: HostedFieldType.CardCode,\n                        type: 'required',\n                        message: 'Missing required data',\n                    },\n                ],\n                cardExpiry: [],\n                cardName: [],\n                cardNumber: [],\n            },\n        };\n\n        eventListener.trigger({ type: HostedInputEventType.Validated, payload });\n\n        expect(callbacks.onValidate).toHaveBeenCalledWith(payload);\n    });\n\n    it('notifies when input receives focus event', () => {\n        eventListener.trigger({\n            type: HostedInputEventType.Focused,\n            payload: { fieldType: HostedFieldType.CardCode },\n        });\n\n        expect(callbacks.onFocus).toHaveBeenCalledWith({ fieldType: HostedFieldType.CardCode });\n    });\n\n    it('notifies when input receives blur event', () => {\n        eventListener.trigger({\n            type: HostedInputEventType.Blurred,\n            payload: { fieldType: HostedFieldType.CardCode },\n        });\n\n        expect(callbacks.onBlur).toHaveBeenCalledWith({ fieldType: HostedFieldType.CardCode });\n    });\n\n    it('notifies when enter key is pressed', async () => {\n        jest.spyOn(fields[0], 'validateForm').mockResolvedValue(undefined);\n\n        eventListener.trigger({\n            type: HostedInputEventType.Entered,\n            payload: { fieldType: HostedFieldType.CardCode },\n        });\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(callbacks.onEnter).toHaveBeenCalledWith({ fieldType: HostedFieldType.CardCode });\n    });\n\n    it('submits stored card form data', async () => {\n        // tslint:disable-next-line:no-non-null-assertion\n        const field = fields.find((field) => field.getType() === HostedFieldType.CardNumber)!;\n\n        jest.spyOn(field, 'submitStoredCardForm').mockResolvedValue({\n            type: HostedInputEventType.StoredCardSucceeded,\n        });\n\n        await form.submitStoredCard({\n            fields: StoredCardHostedFormInstrumentFieldsMock,\n            data: StoredCardHostedFormDataMock,\n        });\n\n        expect(field.submitStoredCardForm).toHaveBeenCalledWith(\n            StoredCardHostedFormInstrumentFieldsMock,\n            StoredCardHostedFormDataMock,\n        );\n    });\n\n    it('validates form when enter key is pressed', async () => {\n        jest.spyOn(fields[0], 'validateForm').mockResolvedValue(undefined);\n\n        eventListener.trigger({\n            type: HostedInputEventType.Entered,\n            payload: { fieldType: HostedFieldType.CardCode },\n        });\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(fields[0].validateForm).toHaveBeenCalled();\n    });\n\n    it('returns card type', () => {\n        eventListener.trigger({\n            type: HostedInputEventType.CardTypeChanged,\n            payload: { cardType: 'visa' },\n        });\n\n        expect(form.getCardType()).toBe('visa');\n    });\n\n    it('returns bin number', () => {\n        eventListener.trigger({\n            type: HostedInputEventType.BinChanged,\n            payload: { bin: '411111' },\n        });\n\n        expect(form.getBin()).toBe('411111');\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-form.ts",
    "content": "import { noop, without } from 'lodash';\n\nimport {\n    OrderPaymentRequestBody,\n    PaymentAdditionalAction,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { IframeEventListener } from './common/iframe';\nimport { InvalidHostedFormConfigError } from './errors';\nimport HostedField from './hosted-field';\nimport HostedFormManualOrderData from './hosted-form-manual-order-data';\nimport HostedFormOptions from './hosted-form-options';\nimport HostedFormOrderDataTransformer from './hosted-form-order-data-transformer';\nimport {\n    HostedInputEnterEvent,\n    HostedInputEventMap,\n    HostedInputEventType,\n    HostedInputStoredCardSucceededEvent,\n    HostedInputSubmitManualOrderSuccessEvent,\n    HostedInputSubmitSuccessEvent,\n} from './iframe-content';\nimport {\n    StoredCardHostedFormData,\n    StoredCardHostedFormInstrumentFields,\n} from './stored-card-hosted-form-type';\n\ntype HostedFormEventCallbacks = Pick<\n    HostedFormOptions,\n    'onBlur' | 'onCardTypeChange' | 'onFocus' | 'onEnter' | 'onValidate'\n>;\n\nexport interface HostedFormInterface {\n    attach(): Promise<void>;\n    detach(): void;\n    getBin(): string | undefined;\n    validate(): Promise<void>;\n    getCardType(): string | undefined;\n}\n\nexport default class HostedForm implements HostedFormInterface {\n    private _bin?: string;\n    private _cardType?: string;\n\n    constructor(\n        private _fields: HostedField[],\n        private _eventListener: IframeEventListener<HostedInputEventMap>,\n        private _eventCallbacks: HostedFormEventCallbacks,\n    ) {\n        const {\n            onBlur = noop,\n            onCardTypeChange = noop,\n            onFocus = noop,\n            onValidate = noop,\n        } = this._eventCallbacks;\n\n        this._eventListener.addListener(HostedInputEventType.Blurred, ({ payload }) =>\n            onBlur(payload),\n        );\n        this._eventListener.addListener(HostedInputEventType.CardTypeChanged, ({ payload }) =>\n            onCardTypeChange(payload),\n        );\n        this._eventListener.addListener(HostedInputEventType.Focused, ({ payload }) =>\n            onFocus(payload),\n        );\n        this._eventListener.addListener(HostedInputEventType.Validated, ({ payload }) =>\n            onValidate(payload),\n        );\n        this._eventListener.addListener(HostedInputEventType.Entered, this._handleEnter);\n\n        this._eventListener.addListener(\n            HostedInputEventType.CardTypeChanged,\n            ({ payload }) => (this._cardType = payload.cardType),\n        );\n        this._eventListener.addListener(\n            HostedInputEventType.BinChanged,\n            ({ payload }) => (this._bin = payload.bin),\n        );\n    }\n\n    getBin(): string | undefined {\n        return this._bin;\n    }\n\n    getCardType(): string | undefined {\n        return this._cardType;\n    }\n\n    async attach(): Promise<void> {\n        this._eventListener.listen();\n\n        const field = this._getFirstField();\n        const otherFields = without(this._fields, field);\n\n        await field.attach();\n        await Promise.all(otherFields.map((otherField) => otherField.attach()));\n    }\n\n    detach(): void {\n        this._eventListener.stopListen();\n\n        this._fields.forEach((field) => {\n            field.detach();\n        });\n    }\n\n    async submitManualOrderPayment(payload: {\n        data: HostedFormManualOrderData;\n    }): Promise<HostedInputSubmitManualOrderSuccessEvent | void> {\n        return this._getFirstField().submitManualOrderForm(payload.data);\n    }\n\n    async submitStoredCard(payload: {\n        fields: StoredCardHostedFormInstrumentFields;\n        data: StoredCardHostedFormData;\n    }): Promise<HostedInputStoredCardSucceededEvent | void> {\n        return this._getFirstField().submitStoredCardForm(payload.fields, payload.data);\n    }\n\n    async submit(\n        payload: OrderPaymentRequestBody,\n        paymentIntegrationService: PaymentIntegrationService,\n        payloadTransformer: HostedFormOrderDataTransformer,\n        additionalActionData?: PaymentAdditionalAction,\n    ): Promise<HostedInputSubmitSuccessEvent> {\n        try {\n            const response = await this._getFirstField().submitForm(\n                this._fields.map((field) => field.getType()),\n                payloadTransformer.transform(payload, additionalActionData),\n            );\n\n            return response;\n        } catch (error) {\n            let additionalAction: PaymentAdditionalAction;\n\n            if (error instanceof Error || typeof error === 'string') {\n                additionalAction = await paymentIntegrationService.handlePaymentHumanVerification(\n                    error,\n                );\n            } else {\n                // Handle cases where error is not an instance of Error or string\n                throw new Error('Unexpected error type');\n            }\n\n            const response = await this._getFirstField().submitForm(\n                this._fields.map((field) => field.getType()),\n                payloadTransformer.transform(payload, additionalAction),\n            );\n\n            return response;\n        }\n    }\n\n    async validate(): Promise<void> {\n        return this._getFirstField().validateForm();\n    }\n\n    private _getFirstField(): HostedField {\n        const field = this._fields[0];\n\n        if (!field) {\n            throw new InvalidHostedFormConfigError(\n                'Unable to proceed because the payment form has no field defined.',\n            );\n        }\n\n        return field;\n    }\n\n    private _handleEnter: (event: HostedInputEnterEvent) => Promise<void> = async ({ payload }) => {\n        try {\n            await this.validate();\n        } catch (error) {\n            // Catch form validation error because we want to trigger `onEnter`\n            // irrespective of the validation result.\n            if (error instanceof Error && error.name !== 'InvalidHostedFormValueError') {\n                throw error;\n            }\n        }\n\n        const { onEnter = noop } = this._eventCallbacks;\n\n        onEnter(payload);\n    };\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-input-initialize-error-data.ts",
    "content": "export default interface HostedInputInitializeErrorData {\n    message: string;\n    redirectUrl: string;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-input-validate-error-data.ts",
    "content": "import { default as HostedFieldType } from './hosted-field-type';\n\nexport default interface HostedInputValidateErrorData {\n    fieldType: string;\n    message: string;\n    type: string;\n}\n\nexport interface HostedInputValidateErrorDataMap {\n    [HostedFieldType.CardCode]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardExpiry]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardName]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardNumber]?: HostedInputValidateErrorData[];\n    [HostedFieldType.Note]?: HostedInputValidateErrorData[];\n    [HostedFieldType.Hidden]?: HostedInputValidateErrorData[];\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/hosted-input-validate-results.ts",
    "content": "import { HostedInputValidateErrorDataMap } from './hosted-input-validate-error-data';\n\nexport default interface HostedInputValidateResults {\n    errors: HostedInputValidateErrorDataMap;\n    isValid: boolean;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/card-expiry-date.ts",
    "content": "export default interface CardExpiryDate {\n    month: string;\n    year: string;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/card-expiry-formatter.spec.ts",
    "content": "import CardExpiryFormatter from './card-expiry-formatter';\n\ndescribe('CardExpiryFormatter', () => {\n    let formatter: CardExpiryFormatter;\n\n    beforeEach(() => {\n        formatter = new CardExpiryFormatter();\n    });\n\n    describe('#format', () => {\n        it('converts date into MM/YY date format', () => {\n            expect(formatter.format('10/2019')).toBe('10 / 19');\n        });\n\n        it('formats partial date value', () => {\n            expect(formatter.format('10')).toBe('10 / ');\n        });\n\n        it('returns month only if there is no year and separator has no trailing space', () => {\n            expect(formatter.format('10 /')).toBe('10');\n        });\n\n        it('surrounds separator with whitespaces', () => {\n            expect(formatter.format('10/19')).toBe('10 / 19');\n        });\n    });\n\n    describe('#toObject', () => {\n        it('converts MM / YY date format into expiry date object', () => {\n            expect(formatter.toObject('01 / 30')).toEqual({ month: '01', year: '2030' });\n\n            expect(formatter.toObject('12 / 30')).toEqual({ month: '12', year: '2030' });\n        });\n\n        it('converts MM / YYYY date format into expiry date object', () => {\n            expect(formatter.toObject('01 / 2030')).toEqual({ month: '01', year: '2030' });\n\n            expect(formatter.toObject('12 / 2030')).toEqual({ month: '12', year: '2030' });\n        });\n\n        it('converts M / YY date format into expiry date object', () => {\n            expect(formatter.toObject('1 / 30')).toEqual({ month: '01', year: '2030' });\n        });\n\n        it('returns empty expiry date object if date format is invalid', () => {\n            expect(formatter.toObject('fo / ba')).toEqual({ month: '', year: '' });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/card-expiry-formatter.ts",
    "content": "import CardExpiryDate from './card-expiry-date';\n\nconst NUMBER_SEPARATOR = '/';\n\nexport default class CardExpiryFormatter {\n    format(value: string): string {\n        const [month = '', year = ''] = value.split(new RegExp(`\\\\s*${NUMBER_SEPARATOR}\\\\s*`));\n        const trimmedMonth = month.slice(0, 2);\n        const trimmedYear =\n            year.length === 4 ? year.slice(-2) : year ? year.slice(0, 2) : month.slice(2);\n\n        // i.e.: '1'\n        if (value.length < 2) {\n            return month;\n        }\n\n        // ie.: '10 /' (without trailing space)\n        if (value.length > 3 && !trimmedYear) {\n            return trimmedMonth;\n        }\n\n        return `${trimmedMonth} ${NUMBER_SEPARATOR} ${trimmedYear}`;\n    }\n\n    toObject(value: string): CardExpiryDate {\n        const [month = '', year = ''] = value.split(new RegExp(`\\\\s*${NUMBER_SEPARATOR}\\\\s*`));\n\n        if (!/^\\d+$/.test(month) || !/^\\d+$/.test(year)) {\n            return { month: '', year: '' };\n        }\n\n        return {\n            month: month.length === 1 ? `0${month}` : month.slice(0, 2),\n            year: year.length === 2 ? `20${year}` : year.slice(0, 4),\n        };\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/card-number-formatter.spec.ts",
    "content": "import CardNumberFormatter from './card-number-formatter';\n\ndescribe('CardNumberFormatter', () => {\n    let formatter: CardNumberFormatter;\n\n    beforeEach(() => {\n        formatter = new CardNumberFormatter();\n    });\n\n    describe('#format()', () => {\n        it('formats Visa credit card number', () => {\n            expect(formatter.format('4111111111111111')).toBe('4111 1111 1111 1111');\n\n            expect(formatter.format('4111 1111 1111 1111234')).toBe('4111 1111 1111 1111234');\n        });\n\n        it('formats Mastercard credit card number', () => {\n            expect(formatter.format('5555555555554444')).toBe('5555 5555 5555 4444');\n        });\n\n        it('formats Amex credit card number', () => {\n            expect(formatter.format('378282246310005')).toBe('3782 822463 10005');\n        });\n\n        it('formats Diners Club credit card number', () => {\n            expect(formatter.format('36259600000004')).toBe('3625 960000 0004');\n        });\n\n        it('formats Discover credit card number', () => {\n            expect(formatter.format('6011111111111117')).toBe('6011 1111 1111 1117');\n        });\n\n        it('formats potentially invalid credit card number', () => {\n            expect(formatter.format('41111')).toBe('4111 1');\n\n            expect(formatter.format('5555')).toBe('5555');\n\n            expect(formatter.format('37828224631')).toBe('3782 822463 1');\n        });\n\n        it('does not format if credit card number cannot be recognized', () => {\n            expect(formatter.format('99999999')).toBe('99999999');\n        });\n    });\n\n    describe('#unformat()', () => {\n        it('removes credit card number formatting', () => {\n            expect(formatter.unformat('4111 1111 1111 1111')).toBe('4111111111111111');\n\n            expect(formatter.unformat('3782 822463 10005')).toBe('378282246310005');\n        });\n\n        it('unformats credit card number that is partially complete', () => {\n            expect(formatter.unformat('4111 1111')).toBe('41111111');\n        });\n\n        it('does not do anything if credit card number is invalid', () => {\n            expect(formatter.unformat('xxxx xxxx 1111 1111')).toBe('xxxx xxxx 1111 1111');\n        });\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/card-number-formatter.ts",
    "content": "import { creditCardType, number } from 'card-validator';\nimport { max } from 'lodash';\n\nconst NUMBER_SEPARATOR = ' ';\n\nexport default class CardNumberFormatter {\n    format(value: string): string {\n        const { card } = number(value);\n\n        if (!card) {\n            return value;\n        }\n\n        const maxLength = max(creditCardType(value).map((info) => max(info.lengths)));\n        const unformattedValue = this.unformat(value).slice(0, maxLength);\n\n        return card.gaps\n            .filter((gapIndex) => unformattedValue.length > gapIndex)\n            .reduce(\n                (output, gapIndex, index) =>\n                    [output.slice(0, gapIndex + index), output.slice(gapIndex + index)].join(\n                        NUMBER_SEPARATOR,\n                    ),\n                unformattedValue,\n            );\n    }\n\n    unformat(value: string): string {\n        const { card } = number(value);\n\n        if (!card) {\n            return value;\n        }\n\n        return value.replace(new RegExp(NUMBER_SEPARATOR, 'g'), '');\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/get-hosted-input-storage.ts",
    "content": "import HostedInputStorage from './hosted-input-storage';\n\nlet storage: HostedInputStorage | null;\n\nexport default function getHostedInputStorage(): HostedInputStorage {\n    storage = storage || new HostedInputStorage();\n\n    return storage;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-autocomplete-fieldset.spec.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nimport HostedAutocompleteFieldset from './hosted-autocomplete-fieldset';\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\n\ndescribe('HostedAutocompleteFieldset', () => {\n    let container: HTMLFormElement;\n    let fieldset: HostedAutocompleteFieldset;\n    let inputAggregator: Pick<HostedInputAggregator, 'getInputs'>;\n\n    beforeEach(() => {\n        inputAggregator = { getInputs: jest.fn() };\n\n        container = document.createElement('form');\n        document.body.appendChild(container);\n\n        fieldset = new HostedAutocompleteFieldset(\n            container,\n            [HostedFieldType.CardExpiry, HostedFieldType.CardName],\n            inputAggregator as HostedInputAggregator,\n        );\n    });\n\n    afterEach(() => {\n        container.remove();\n    });\n\n    it('attaches autocomplete inputs to container', () => {\n        fieldset.attach();\n\n        expect(container.querySelector('#autocomplete-card-expiry')).toBeTruthy();\n        expect(container.querySelector('#autocomplete-card-name')).toBeTruthy();\n    });\n\n    it('hides autocomplete input from user', () => {\n        fieldset.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const input = container.querySelector<HTMLInputElement>('#autocomplete-card-expiry')!;\n\n        expect(input.style.opacity).toBe('0');\n        expect(input.style.position).toBe('absolute');\n        expect(input.tabIndex).toBe(-1);\n    });\n\n    it('configures autocomplete property based on field type', () => {\n        fieldset.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const expiryInput = container.querySelector<HTMLInputElement>('#autocomplete-card-expiry')!;\n        // tslint:disable-next-line:no-non-null-assertion\n        const nameInput = container.querySelector<HTMLInputElement>('#autocomplete-card-name')!;\n\n        expect(expiryInput.autocomplete).toBe('cc-exp');\n        expect(nameInput.autocomplete).toBe('cc-name');\n    });\n\n    it('updates corresponding hosted inputs when autocomplete inputs receive update', () => {\n        const hostedExpiryInput: Pick<HostedInput, 'getType' | 'setValue'> = {\n            getType: jest.fn(() => HostedFieldType.CardExpiry),\n            setValue: jest.fn(),\n        };\n        const hostedNameInput: Pick<HostedInput, 'getType' | 'setValue'> = {\n            getType: jest.fn(() => HostedFieldType.CardName),\n            setValue: jest.fn(),\n        };\n\n        jest.spyOn(inputAggregator, 'getInputs').mockReturnValue([\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            hostedExpiryInput,\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            hostedNameInput,\n        ]);\n\n        fieldset.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const input = container.querySelector<HTMLInputElement>('#autocomplete-card-expiry')!;\n\n        input.value = '10 / 20';\n        input.dispatchEvent(new Event('change'));\n\n        expect(hostedExpiryInput.setValue).toHaveBeenCalledWith('10 / 20');\n        expect(hostedNameInput.setValue).not.toHaveBeenCalledWith('10 / 20');\n    });\n\n    it('removes autocomplete inputs when fieldset detaches', () => {\n        fieldset.attach();\n        fieldset.detach();\n\n        expect(container.querySelector('#autocomplete-card-expiry')).toBeFalsy();\n        expect(container.querySelector('#autocomplete-card-name')).toBeFalsy();\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-autocomplete-fieldset.ts",
    "content": "import { kebabCase } from 'lodash';\n\nimport HostedFieldType from '../hosted-field-type';\n\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport mapToAutocompleteType from './map-to-autocomplete-type';\n\nexport default class HostedAutocompleteFieldset {\n    private _inputs: HTMLInputElement[];\n\n    constructor(\n        private _form: HTMLFormElement,\n        private _fieldTypes: HostedFieldType[],\n        private _inputAggregator: HostedInputAggregator,\n    ) {\n        this._inputs = this._fieldTypes.map((type) => this._createInput(type));\n    }\n\n    attach(): void {\n        this._inputs.forEach((input) => this._form.appendChild(input));\n    }\n\n    detach(): void {\n        this._inputs.forEach((input) => {\n            if (!input.parentElement) {\n                return;\n            }\n\n            input.parentElement.removeChild(input);\n        });\n    }\n\n    private _createInput(type: HostedFieldType): HTMLInputElement {\n        const input = document.createElement('input');\n\n        input.autocomplete = mapToAutocompleteType(type);\n        input.id = this._getAutocompleteElementId(type);\n        input.tabIndex = -1;\n        input.style.position = 'absolute';\n        input.style.opacity = '0';\n        input.style.zIndex = '-1';\n\n        input.addEventListener('change', this._handleChange);\n\n        return input;\n    }\n\n    private _handleChange: (event: Event) => void = (event) => {\n        const targetInput = event.target as HTMLInputElement;\n\n        if (!targetInput) {\n            throw new Error('Unable to get a reference to the target of the change event.');\n        }\n\n        const targetHostedInput = this._inputAggregator\n            .getInputs()\n            .find((input) => this._getAutocompleteElementId(input.getType()) === targetInput.id);\n\n        if (!targetHostedInput) {\n            return;\n        }\n\n        targetHostedInput.setValue(targetInput.value);\n    };\n\n    private _getAutocompleteElementId(type: HostedFieldType): string {\n        return `autocomplete-${kebabCase(type)}`;\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-card-expiry-input.spec.ts",
    "content": "import { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { HostedFieldEventMap } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport CardExpiryFormatter from './card-expiry-formatter';\nimport HostedCardExpiryInput from './hosted-card-expiry-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent } from './hosted-input-events';\nimport HostedInputManualOrderPaymentHandler from './hosted-input-manual-order-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\n\ndescribe('HostedCardExpiryInput', () => {\n    let container: HTMLFormElement;\n    let eventListener: Pick<\n        IframeEventListener<HostedFieldEventMap>,\n        'addListener' | 'listen' | 'stopListen'\n    >;\n    let eventPoster: Pick<IframeEventPoster<HostedInputEvent>, 'post' | 'setTarget'>;\n    let expiryFormatter: Pick<CardExpiryFormatter, 'format'>;\n    let input: HostedCardExpiryInput;\n    let inputAggregator: Pick<HostedInputAggregator, 'getInputValues'>;\n    let inputValidator: Pick<HostedInputValidator, 'validate'>;\n    let manualOrderPaymentHandler: Pick<HostedInputManualOrderPaymentHandler, 'handle'>;\n    let storedCardHandler: Pick<HostedInputStoredCardHandler, 'handle'>;\n    let styles: HostedInputStylesMap;\n\n    beforeEach(() => {\n        eventListener = {\n            addListener: jest.fn(),\n            listen: jest.fn(),\n            stopListen: jest.fn(),\n        };\n        eventPoster = {\n            post: jest.fn(),\n            setTarget: jest.fn(),\n        };\n        expiryFormatter = { format: jest.fn() };\n        inputAggregator = { getInputValues: jest.fn() };\n        inputValidator = {\n            validate: jest.fn(() =>\n                Promise.resolve({\n                    isValid: true,\n                    errors: {},\n                }),\n            ),\n        };\n        manualOrderPaymentHandler = { handle: jest.fn() };\n        storedCardHandler = { handle: jest.fn() };\n        styles = { default: { color: 'rgb(255, 255, 255)' } };\n\n        container = document.createElement('form');\n        document.body.appendChild(container);\n\n        input = new HostedCardExpiryInput(\n            container,\n            'Expiration',\n            'Card expiration',\n            'cc-expiry',\n            styles,\n            [],\n            eventListener as IframeEventListener<HostedFieldEventMap>,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            manualOrderPaymentHandler as HostedInputManualOrderPaymentHandler,\n            storedCardHandler as HostedInputStoredCardHandler,\n            expiryFormatter as CardExpiryFormatter,\n        );\n    });\n\n    afterEach(() => {\n        container.remove();\n    });\n\n    it('returns input type', () => {\n        expect(input.getType()).toEqual(HostedFieldType.CardExpiry);\n    });\n\n    it('formats input on change', () => {\n        jest.spyOn(expiryFormatter, 'format').mockReturnValue('10 / 20');\n\n        input.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const element = container.querySelector('input')!;\n\n        element.value = '1020';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(expiryFormatter.format).toHaveBeenCalledWith('1020');\n        expect(element.value).toBe('10 / 20');\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-card-expiry-input.ts",
    "content": "import { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { HostedFieldEventMap } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport CardExpiryFormatter from './card-expiry-formatter';\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent } from './hosted-input-events';\nimport HostedInputManualOrderPaymentHandler from './hosted-input-manual-order-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\n\nexport default class HostedCardExpiryInput extends HostedInput {\n    /**\n     * @internal\n     */\n    constructor(\n        form: HTMLFormElement,\n        placeholder: string,\n        accessibilityLabel: string,\n        autocomplete: string,\n        styles: HostedInputStylesMap,\n        fontUrls: string[],\n        eventListener: IframeEventListener<HostedFieldEventMap>,\n        eventPoster: IframeEventPoster<HostedInputEvent>,\n        inputAggregator: HostedInputAggregator,\n        inputValidator: HostedInputValidator,\n        manualOrderPaymentHandler: HostedInputManualOrderPaymentHandler,\n        storedCardHandler: HostedInputStoredCardHandler,\n        private _formatter: CardExpiryFormatter,\n    ) {\n        super(\n            HostedFieldType.CardExpiry,\n            form,\n            placeholder,\n            accessibilityLabel,\n            autocomplete,\n            styles,\n            fontUrls,\n            eventListener,\n            eventPoster,\n            inputAggregator,\n            inputValidator,\n            manualOrderPaymentHandler,\n            storedCardHandler,\n        );\n    }\n\n    protected _formatValue(value: string): void {\n        this._input.value = this._formatter.format(value);\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-card-number-input.spec.ts",
    "content": "import { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { HostedFieldEventMap } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport CardNumberFormatter from './card-number-formatter';\nimport HostedAutocompleteFieldset from './hosted-autocomplete-fieldset';\nimport HostedCardNumberInput from './hosted-card-number-input';\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputManualOrderPaymentHandler from './hosted-input-manual-order-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\n\ndescribe('HostedCardNumberInput', () => {\n    let autocompleteFieldset: HostedAutocompleteFieldset;\n    let container: HTMLFormElement;\n    let eventListener: Pick<\n        IframeEventListener<HostedFieldEventMap>,\n        'addListener' | 'listen' | 'stopListen'\n    >;\n    let eventPoster: Pick<IframeEventPoster<HostedInputEvent>, 'setTarget' | 'post'>;\n    let input: HostedInput;\n    let inputAggregator: Pick<HostedInputAggregator, 'getInputValues'>;\n    let inputValidator: Pick<HostedInputValidator, 'validate'>;\n    let numberFormatter: Pick<CardNumberFormatter, 'format' | 'unformat'>;\n    let manualOrderPaymentHandler: Pick<HostedInputManualOrderPaymentHandler, 'handle'>;\n    let storedCardHandler: Pick<HostedInputStoredCardHandler, 'handle'>;\n    let styles: HostedInputStylesMap;\n\n    beforeEach(() => {\n        container = document.createElement('form');\n        document.body.appendChild(container);\n\n        autocompleteFieldset = new HostedAutocompleteFieldset(\n            container,\n            [HostedFieldType.CardCode, HostedFieldType.CardExpiry, HostedFieldType.CardName],\n            new HostedInputAggregator(window.parent),\n        );\n        eventListener = {\n            addListener: jest.fn(),\n            listen: jest.fn(),\n            stopListen: jest.fn(),\n        };\n        eventPoster = {\n            post: jest.fn(),\n            setTarget: jest.fn(),\n        };\n        inputAggregator = { getInputValues: jest.fn() };\n        inputValidator = {\n            validate: jest.fn(() =>\n                Promise.resolve({\n                    isValid: true,\n                    errors: {},\n                }),\n            ),\n        };\n        numberFormatter = { format: jest.fn(), unformat: (value) => value.replace(/ /g, '') };\n        manualOrderPaymentHandler = { handle: jest.fn() };\n        storedCardHandler = { handle: jest.fn() };\n        styles = { default: { color: 'rgb(255, 255, 255)' } };\n\n        input = new HostedCardNumberInput(\n            HostedFieldType.CardNumber,\n            container,\n            'Full name',\n            'Cardholder name',\n            'cc-name',\n            styles,\n            [],\n            eventListener as IframeEventListener<HostedFieldEventMap>,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            manualOrderPaymentHandler as HostedInputManualOrderPaymentHandler,\n            storedCardHandler as HostedInputStoredCardHandler,\n            autocompleteFieldset,\n            numberFormatter as CardNumberFormatter,\n        );\n    });\n\n    afterEach(() => {\n        container.remove();\n    });\n\n    it('returns input type', () => {\n        expect(input.getType()).toEqual(HostedFieldType.CardNumber);\n    });\n\n    it('notifies card type change', () => {\n        jest.spyOn(numberFormatter, 'format').mockReturnValue('4111');\n\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const element = container.querySelector('input')!;\n\n        element.value = '4111';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.CardTypeChanged,\n            payload: {\n                cardType: 'visa',\n            },\n        });\n    });\n\n    it('notifies bin number change', () => {\n        jest.spyOn(numberFormatter, 'format').mockReturnValue('4111 1111 1111 1111');\n\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const element = container.querySelector('input')!;\n\n        element.value = '4111111111111111';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.BinChanged,\n            payload: {\n                bin: '411111',\n            },\n        });\n\n        element.value = '4987 6511 1111 1111';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.BinChanged,\n            payload: {\n                bin: '498765',\n            },\n        });\n    });\n\n    it('notifies when bin number can no longer be detected', () => {\n        jest.spyOn(numberFormatter, 'format').mockImplementation((value) =>\n            value === '4111111111111111' ? '4111 1111 1111 1111' : value,\n        );\n\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const element = container.querySelector('input')!;\n\n        element.value = '4111111111111111';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        element.value = '41';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.BinChanged,\n            payload: {\n                bin: '',\n            },\n        });\n    });\n\n    it('does not notify if bin number is invalid', () => {\n        jest.spyOn(numberFormatter, 'format').mockReturnValue('0000 0000 0000 0000');\n\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const element = container.querySelector('input')!;\n\n        element.value = '0000000000000000';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(eventPoster.post).not.toHaveBeenCalledWith(\n            expect.objectContaining({\n                type: HostedInputEventType.BinChanged,\n            }),\n        );\n    });\n\n    it('formats input on change', () => {\n        jest.spyOn(numberFormatter, 'format').mockReturnValue('4111 1111 1111 1111');\n\n        input.attach();\n\n        // tslint:disable-next-line:no-non-null-assertion\n        const element = container.querySelector('input')!;\n\n        element.value = '4111111111111111';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(numberFormatter.format).toHaveBeenCalledWith('4111111111111111');\n        expect(element.value).toBe('4111 1111 1111 1111');\n    });\n\n    it('attaches autocomplete fieldset', () => {\n        jest.spyOn(autocompleteFieldset, 'attach');\n\n        input.attach();\n\n        expect(autocompleteFieldset.attach).toHaveBeenCalled();\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-card-number-input.ts",
    "content": "import { number } from 'card-validator';\nimport { get } from 'lodash';\n\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { HostedFieldEventMap } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport CardNumberFormatter from './card-number-formatter';\nimport HostedAutocompleteFieldset from './hosted-autocomplete-fieldset';\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputManualOrderPaymentHandler from './hosted-input-manual-order-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\n\nexport default class HostedCardNumberInput extends HostedInput {\n    /**\n     * @internal\n     */\n    constructor(\n        type: HostedFieldType,\n        form: HTMLFormElement,\n        placeholder: string,\n        accessibilityLabel: string,\n        autocomplete: string,\n        styles: HostedInputStylesMap,\n        fontUrls: string[],\n        eventListener: IframeEventListener<HostedFieldEventMap>,\n        eventPoster: IframeEventPoster<HostedInputEvent>,\n        inputAggregator: HostedInputAggregator,\n        inputValidator: HostedInputValidator,\n        manualOrderPaymentHandler: HostedInputManualOrderPaymentHandler,\n        storedCardHandler: HostedInputStoredCardHandler,\n        private _autocompleteFieldset: HostedAutocompleteFieldset,\n        private _formatter: CardNumberFormatter,\n    ) {\n        super(\n            type,\n            form,\n            placeholder,\n            accessibilityLabel,\n            autocomplete,\n            styles,\n            fontUrls,\n            eventListener,\n            eventPoster,\n            inputAggregator,\n            inputValidator,\n            manualOrderPaymentHandler,\n            storedCardHandler,\n        );\n    }\n\n    attach(): void {\n        super.attach();\n\n        this._autocompleteFieldset.attach();\n    }\n\n    protected _notifyChange(value: string): void {\n        const cardInfo = number(value).card;\n        const prevCardInfo = this._previousValue && number(this._previousValue).card;\n\n        if (get(prevCardInfo, 'type') !== get(cardInfo, 'type')) {\n            this._eventPoster.post({\n                type: HostedInputEventType.CardTypeChanged,\n                payload: {\n                    cardType: cardInfo ? cardInfo.type : undefined,\n                },\n            });\n        }\n\n        const unformattedValue = this._formatter.unformat(value);\n        const unformattedPreviousValue = this._previousValue\n            ? this._formatter.unformat(this._previousValue)\n            : '';\n\n        const bin =\n            unformattedValue.length >= 6 && number(unformattedValue).isPotentiallyValid\n                ? unformattedValue.substr(0, 6)\n                : '';\n        const prevBin =\n            unformattedPreviousValue.length >= 6 ? unformattedPreviousValue.substr(0, 6) : '';\n\n        if (bin !== prevBin) {\n            this._eventPoster.post({\n                type: HostedInputEventType.BinChanged,\n                payload: { bin },\n            });\n        }\n    }\n\n    protected _formatValue(value: string): void {\n        const selectionEnd = this._input.selectionEnd;\n        const formattedValue = this._formatter.format(value);\n\n        if (selectionEnd === value.length && value.length < formattedValue.length) {\n            this._input.setSelectionRange(formattedValue.length, formattedValue.length);\n        } else {\n            this._input.setSelectionRange(selectionEnd || 0, selectionEnd || 0);\n        }\n\n        this._input.value = formattedValue;\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-aggregator.spec.ts",
    "content": "import { includes } from 'lodash';\n\nimport HostedFieldType from '../hosted-field-type';\n\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport HostedInputWindow from './hosted-input-window';\n\ndescribe('HostedInputAggregator', () => {\n    let aggregator: HostedInputAggregator;\n    let frames: HostedInputWindow[];\n    let parentWindow: Pick<Window, 'frames'>;\n\n    beforeEach(() => {\n        parentWindow = Object.create(window);\n        aggregator = new HostedInputAggregator(parentWindow as Window);\n        frames = [\n            Object.create(window),\n            Object.create(window),\n            Object.create(window),\n            Object.create(window),\n        ];\n\n        const codeInput = {\n            getType: jest.fn(() => HostedFieldType.CardCode),\n            getValue: jest.fn(() => '123'),\n        } as Pick<HostedInput, 'getType' | 'getValue'>;\n\n        const expiryInput = {\n            getType: jest.fn(() => HostedFieldType.CardExpiry),\n            getValue: jest.fn(() => '10 / 20'),\n        } as Pick<HostedInput, 'getType' | 'getValue'>;\n\n        const nameInput = {\n            getType: jest.fn(() => HostedFieldType.CardName),\n            getValue: jest.fn(() => 'Good Shopper'),\n        } as Pick<HostedInput, 'getType' | 'getValue'>;\n\n        const numberInput = {\n            getType: jest.fn(() => HostedFieldType.CardNumber),\n            getValue: jest.fn(() => '4111 1111 1111 1111'),\n        } as Pick<HostedInput, 'getType' | 'getValue'>;\n\n        frames[0].hostedInput = codeInput as HostedInput;\n        frames[1].hostedInput = expiryInput as HostedInput;\n        frames[2].hostedInput = nameInput as HostedInput;\n        frames[3].hostedInput = numberInput as HostedInput;\n\n        (parentWindow as any).frames = frames;\n    });\n\n    it('gathers all adjacent hosted inputs', () => {\n        expect(aggregator.getInputs()).toEqual(frames.map((frame) => frame.hostedInput));\n    });\n\n    it('does not throw error if there are other iframes in parent window that belong to different origin than itself', () => {\n        frames.push({\n            get hostedInput() {\n                throw new DOMException();\n            },\n        } as unknown as HostedInputWindow);\n\n        expect(aggregator.getInputs()).toEqual(\n            frames.slice(0, -1).map((frame) => frame.hostedInput),\n        );\n    });\n\n    it('does not throw error if there are other iframes in parent window that belong to different origin than itself in IE 11', () => {\n        frames.push({\n            get hostedInput() {\n                throw new DOMException();\n            },\n        } as unknown as HostedInputWindow);\n\n        expect(aggregator.getInputs()).toEqual(\n            frames.slice(0, -1).map((frame) => frame.hostedInput),\n        );\n    });\n\n    it('does not fail silently if unable to gather adjacent hosted inputs for other reasons', () => {\n        frames.push({\n            get hostedInput() {\n                throw new TypeError();\n            },\n        } as unknown as HostedInputWindow);\n\n        expect(() => aggregator.getInputs()).toThrow(TypeError);\n    });\n\n    it('gathers all adjacent hosted inputs that satisfy filter', () => {\n        expect(\n            aggregator.getInputs((field) =>\n                includes([HostedFieldType.CardCode, HostedFieldType.CardExpiry], field.getType()),\n            ),\n        ).toEqual([frames[0].hostedInput, frames[1].hostedInput]);\n    });\n\n    it('gathers all values of adjacent hosted inputs', () => {\n        expect(aggregator.getInputValues()).toEqual({\n            [HostedFieldType.CardCode]: '123',\n            [HostedFieldType.CardExpiry]: '10 / 20',\n            [HostedFieldType.CardName]: 'Good Shopper',\n            [HostedFieldType.CardNumber]: '4111 1111 1111 1111',\n        });\n    });\n\n    it('gathers all values of adjacent hosted inputs that satisfy filter', () => {\n        expect(\n            aggregator.getInputValues((field) =>\n                includes([HostedFieldType.CardCode, HostedFieldType.CardExpiry], field.getType()),\n            ),\n        ).toEqual({\n            [HostedFieldType.CardCode]: '123',\n            [HostedFieldType.CardExpiry]: '10 / 20',\n        });\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-aggregator.ts",
    "content": "import HostedInput from './hosted-input';\nimport HostedInputValues from './hosted-input-values';\nimport HostedInputWindow from './hosted-input-window';\n\nexport default class HostedInputAggregator {\n    constructor(private _parentWindow: Window) {}\n\n    getInputs(filter?: (field: HostedInput) => boolean): HostedInput[] {\n        return Array.prototype.slice\n            .call(this._parentWindow.frames)\n            .reduce((result: Window[], frame: Window) => {\n                try {\n                    const input = (frame as HostedInputWindow).hostedInput;\n\n                    if (!input || (filter && !filter(input))) {\n                        return result;\n                    }\n\n                    return [...result, input];\n                } catch (error) {\n                    if (error instanceof DOMException) {\n                        return result;\n                    }\n\n                    // IE11 doesn't throw `DOMException`\n                    if (error instanceof Error && error.message === 'Permission denied') {\n                        return result;\n                    }\n\n                    throw error;\n                }\n            }, []);\n    }\n\n    getInputValues(filter?: (field: HostedInput) => boolean): HostedInputValues {\n        return this.getInputs(filter).reduce<HostedInputValues>((result, input) => {\n            return {\n                ...result,\n                [input.getType()]: input.getValue(),\n            };\n        }, {});\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-events.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport { PaymentErrorData, PaymentErrorResponseBody } from '../errors';\nimport HostedFieldType from '../hosted-field-type';\nimport { HostedFormErrorsData } from '../hosted-form-options';\n\nimport HostedInputInitializeErrorData from './hosted-input-initialize-error-data';\nimport HostedInputValidateResults from './hosted-input-validate-results';\n\n// Event types\nexport enum HostedInputEventType {\n    AttachSucceeded = 'HOSTED_INPUT:ATTACH_SUCCEEDED',\n    AttachFailed = 'HOSTED_INPUT:ATTACH_FAILED',\n    BinChanged = 'HOSTED_INPUT:BIN_CHANGED',\n    Blurred = 'HOSTED_INPUT:BLURRED',\n    Changed = 'HOSTED_INPUT:CHANGED',\n    CardTypeChanged = 'HOSTED_INPUT:CARD_TYPE_CHANGED',\n    Entered = 'HOSTED_INPUT:ENTERED',\n    Focused = 'HOSTED_INPUT:FOCUSED',\n    SubmitSucceeded = 'HOSTED_INPUT:SUBMIT_SUCCEEDED',\n    SubmitFailed = 'HOSTED_INPUT:SUBMIT_FAILED',\n    SubmitManualOrderSucceeded = 'HOSTED_INPUT:SUBMIT_MANUAL_ORDER_SUCCEEDED',\n    SubmitManualOrderFailed = 'HOSTED_INPUT:SUBMIT_MANUAL_ORDER_FAILED',\n    Validated = 'HOSTED_INPUT:VALIDATED',\n    StoredCardSucceeded = 'HOSTED_INPUT:STORED_CARD_SUCCEEDED',\n    StoredCardFailed = 'HOSTED_INPUT:STORED_CARD_FAILED',\n}\n\n// Event mapping\nexport interface HostedInputEventMap {\n    [HostedInputEventType.AttachSucceeded]: HostedInputAttachSuccessEvent;\n    [HostedInputEventType.AttachFailed]: HostedInputAttachErrorEvent;\n    [HostedInputEventType.BinChanged]: HostedInputBinChangeEvent;\n    [HostedInputEventType.Blurred]: HostedInputBlurEvent;\n    [HostedInputEventType.Changed]: HostedInputChangeEvent;\n    [HostedInputEventType.CardTypeChanged]: HostedInputCardTypeChangeEvent;\n    [HostedInputEventType.Entered]: HostedInputEnterEvent;\n    [HostedInputEventType.Focused]: HostedInputFocusEvent;\n    [HostedInputEventType.SubmitManualOrderSucceeded]: HostedInputSubmitManualOrderSuccessEvent;\n    [HostedInputEventType.SubmitManualOrderFailed]: HostedInputSubmitManualOrderErrorEvent;\n    [HostedInputEventType.Validated]: HostedInputValidateEvent;\n    [HostedInputEventType.StoredCardFailed]: HostedInputStoredCardErrorEvent;\n    [HostedInputEventType.StoredCardSucceeded]: HostedInputStoredCardSucceededEvent;\n}\n\n// Events\nexport type HostedInputEvent =\n    | HostedInputAttachSuccessEvent\n    | HostedInputAttachErrorEvent\n    | HostedInputBinChangeEvent\n    | HostedInputBlurEvent\n    | HostedInputChangeEvent\n    | HostedInputCardTypeChangeEvent\n    | HostedInputEnterEvent\n    | HostedInputFocusEvent\n    | HostedInputSubmitManualOrderSuccessEvent\n    | HostedInputSubmitManualOrderErrorEvent\n    | HostedInputValidateEvent\n    | HostedInputStoredCardSucceededEvent\n    | HostedInputStoredCardErrorEvent;\n\nexport interface HostedInputAttachSuccessEvent {\n    type: HostedInputEventType.AttachSucceeded;\n}\n\nexport interface HostedInputAttachErrorEvent {\n    type: HostedInputEventType.AttachFailed;\n    payload: {\n        error: HostedInputInitializeErrorData;\n    };\n}\n\nexport interface HostedInputBinChangeEvent {\n    type: HostedInputEventType.BinChanged;\n    payload: {\n        bin?: string;\n    };\n}\n\nexport interface HostedInputBlurEvent {\n    type: HostedInputEventType.Blurred;\n    payload: {\n        fieldType: HostedFieldType;\n        errors?: HostedFormErrorsData;\n    };\n}\n\nexport interface HostedInputChangeEvent {\n    type: HostedInputEventType.Changed;\n    payload: {\n        fieldType: HostedFieldType;\n    };\n}\n\nexport interface HostedInputCardTypeChangeEvent {\n    type: HostedInputEventType.CardTypeChanged;\n    payload: {\n        cardType?: string;\n    };\n}\n\nexport interface HostedInputFocusEvent {\n    type: HostedInputEventType.Focused;\n    payload: {\n        fieldType: HostedFieldType;\n    };\n}\n\nexport interface HostedInputEnterEvent {\n    type: HostedInputEventType.Entered;\n    payload: {\n        fieldType: HostedFieldType;\n    };\n}\nexport interface HostedInputSubmitManualOrderSuccessEvent {\n    type: HostedInputEventType.SubmitManualOrderSucceeded;\n    payload: {\n        response: Response<unknown>;\n    };\n}\n\nexport interface HostedInputSubmitManualOrderErrorEvent {\n    type: HostedInputEventType.SubmitManualOrderFailed;\n    payload: {\n        error: PaymentErrorData;\n        response?: Response<PaymentErrorResponseBody>;\n    };\n}\n\nexport interface HostedInputValidateEvent {\n    type: HostedInputEventType.Validated;\n    payload: HostedInputValidateResults;\n}\n\nexport interface HostedInputSubmitSuccessEvent {\n    type: HostedInputEventType.SubmitSucceeded;\n    payload: {\n        response: Response<unknown>;\n    };\n}\n\nexport interface HostedInputSubmitErrorEvent {\n    type: HostedInputEventType.SubmitFailed;\n    payload: {\n        error: PaymentErrorData;\n        response?: Response<PaymentErrorResponseBody>;\n    };\n}\n\nexport interface HostedInputStoredCardSucceededEvent {\n    type: HostedInputEventType.StoredCardSucceeded;\n}\n\nexport interface HostedInputStoredCardErrorEvent {\n    type: HostedInputEventType.StoredCardFailed;\n    payload?: {\n        errors?: string[];\n        error?: PaymentErrorData;\n        response?: Response<PaymentErrorResponseBody>;\n    };\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-factory.spec.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nimport HostedCardExpiryInput from './hosted-card-expiry-input';\nimport HostedCardNumberInput from './hosted-card-number-input';\nimport HostedInput from './hosted-input';\nimport HostedInputFactory from './hosted-input-factory';\n\ndescribe('HostedInputFactory', () => {\n    let factory: HostedInputFactory;\n\n    beforeEach(() => {\n        factory = new HostedInputFactory(\n            'https://store.foobar.com',\n            'https://bigpay.service.bcdev',\n        );\n    });\n\n    it('creates card number field', () => {\n        expect(\n            factory.create(document.createElement('form'), HostedFieldType.CardNumber),\n        ).toBeInstanceOf(HostedCardNumberInput);\n    });\n\n    it('creates card expiry field', () => {\n        expect(\n            factory.create(document.createElement('form'), HostedFieldType.CardExpiry),\n        ).toBeInstanceOf(HostedCardExpiryInput);\n    });\n\n    it('creates regular input field for other field types', () => {\n        expect(\n            factory.create(document.createElement('form'), HostedFieldType.CardCode),\n        ).toBeInstanceOf(HostedInput);\n\n        expect(\n            factory.create(document.createElement('form'), HostedFieldType.CardName),\n        ).toBeInstanceOf(HostedInput);\n    });\n\n    it('normalises parent origin if origin contains www', () => {\n        factory.normalizeParentOrigin('https://www.store.foobar.com');\n\n        expect(factory.getParentOrigin()).toBe('https://www.store.foobar.com');\n    });\n\n    it('does not normalise parent origin if origin is completely different', () => {\n        factory.normalizeParentOrigin('https://www.xyz.com');\n\n        expect(factory.getParentOrigin()).toBe('https://store.foobar.com');\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-factory.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { appendWww, parseUrl } from '../common/url';\nimport HostedFieldType from '../hosted-field-type';\nimport { ManualOrderPaymentRequestSender, StorefrontStoredCardRequestSender } from '../payment';\n\nimport CardExpiryFormatter from './card-expiry-formatter';\nimport CardNumberFormatter from './card-number-formatter';\nimport getHostedInputStorage from './get-hosted-input-storage';\nimport HostedAutocompleteFieldset from './hosted-autocomplete-fieldset';\nimport HostedCardExpiryInput from './hosted-card-expiry-input';\nimport HostedCardNumberInput from './hosted-card-number-input';\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport HostedInputManualOrderPaymentHandler from './hosted-input-manual-order-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\nimport mapToAccessibilityLabel from './map-to-accessibility-label';\nimport mapToAutocompleteType from './map-to-autocomplete-type';\n\nexport default class HostedInputFactory {\n    constructor(private _parentOrigin: string, private _paymentOrigin: string) {}\n\n    create(\n        form: HTMLFormElement,\n        type: HostedFieldType,\n        styles: HostedInputStylesMap = {},\n        fontUrls: string[] = [],\n        placeholder = '',\n        accessibilityLabel: string = mapToAccessibilityLabel(type),\n    ): HostedInput {\n        const autocomplete = mapToAutocompleteType(type);\n\n        if (type === HostedFieldType.CardNumber) {\n            return this._createNumberInput(\n                type,\n                form,\n                styles,\n                fontUrls,\n                placeholder,\n                accessibilityLabel,\n                autocomplete,\n            );\n        }\n\n        if (type === HostedFieldType.CardExpiry) {\n            return this._createExpiryInput(\n                form,\n                styles,\n                fontUrls,\n                placeholder,\n                accessibilityLabel,\n                autocomplete,\n            );\n        }\n\n        return this._createInput(\n            type,\n            form,\n            styles,\n            fontUrls,\n            placeholder,\n            accessibilityLabel,\n            autocomplete,\n        );\n    }\n\n    normalizeParentOrigin(origin: string): void {\n        if (this._parentOrigin === origin) {\n            return;\n        }\n\n        if (\n            this._parentOrigin !== appendWww(parseUrl(origin)).origin &&\n            origin !== appendWww(parseUrl(this._parentOrigin)).origin\n        ) {\n            return;\n        }\n\n        this._parentOrigin = origin;\n    }\n\n    getParentOrigin(): string {\n        return this._parentOrigin;\n    }\n\n    private _createExpiryInput(\n        form: HTMLFormElement,\n        styles: HostedInputStylesMap,\n        fontUrls: string[],\n        placeholder: string,\n        accessibilityLabel = '',\n        autocomplete = '',\n    ): HostedCardExpiryInput {\n        return new HostedCardExpiryInput(\n            form,\n            placeholder,\n            accessibilityLabel,\n            autocomplete,\n            styles,\n            fontUrls,\n            new IframeEventListener(this._parentOrigin),\n            new IframeEventPoster(this._parentOrigin, window.parent),\n            new HostedInputAggregator(window.parent),\n            new HostedInputValidator(),\n            this._createManualOrderPaymentHandler(),\n            this._createStoredCardHandler(),\n            new CardExpiryFormatter(),\n        );\n    }\n\n    private _createNumberInput(\n        type: HostedFieldType,\n        form: HTMLFormElement,\n        styles: HostedInputStylesMap,\n        fontUrls: string[],\n        placeholder: string,\n        accessibilityLabel = '',\n        autocomplete = '',\n    ): HostedCardNumberInput {\n        return new HostedCardNumberInput(\n            type,\n            form,\n            placeholder,\n            accessibilityLabel,\n            autocomplete,\n            styles,\n            fontUrls,\n            new IframeEventListener(this._parentOrigin),\n            new IframeEventPoster(this._parentOrigin, window.parent),\n            new HostedInputAggregator(window.parent),\n            new HostedInputValidator(),\n            this._createManualOrderPaymentHandler(),\n            this._createStoredCardHandler(),\n            new HostedAutocompleteFieldset(\n                form,\n                [HostedFieldType.CardCode, HostedFieldType.CardExpiry, HostedFieldType.CardName],\n                new HostedInputAggregator(window.parent),\n            ),\n            new CardNumberFormatter(),\n        );\n    }\n\n    private _createInput(\n        type: HostedFieldType,\n        form: HTMLFormElement,\n        styles: HostedInputStylesMap,\n        fontUrls: string[],\n        placeholder: string,\n        accessibilityLabel = '',\n        autocomplete = '',\n    ): HostedInput {\n        return new HostedInput(\n            type,\n            form,\n            placeholder,\n            accessibilityLabel,\n            autocomplete,\n            styles,\n            fontUrls,\n            new IframeEventListener(this._parentOrigin),\n            new IframeEventPoster(this._parentOrigin, window.parent),\n            new HostedInputAggregator(window.parent),\n            new HostedInputValidator(),\n            this._createManualOrderPaymentHandler(),\n            this._createStoredCardHandler(),\n        );\n    }\n\n    private _createManualOrderPaymentHandler(): HostedInputManualOrderPaymentHandler {\n        return new HostedInputManualOrderPaymentHandler(\n            new HostedInputAggregator(window.parent),\n            new HostedInputValidator(),\n            getHostedInputStorage(),\n            new IframeEventPoster(this._parentOrigin, window.parent),\n            new ManualOrderPaymentRequestSender(createRequestSender(), this._paymentOrigin),\n        );\n    }\n\n    private _createStoredCardHandler(): HostedInputStoredCardHandler {\n        return new HostedInputStoredCardHandler(\n            new HostedInputAggregator(window.parent),\n            new HostedInputValidator(),\n            new IframeEventPoster(this._parentOrigin, window.parent),\n            new StorefrontStoredCardRequestSender(createRequestSender()),\n        );\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-initialize-error-data.ts",
    "content": "export default interface HostedInputInitializeErrorData {\n    message: string;\n    redirectUrl: string;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-initializer.spec.ts",
    "content": "import { IframeEventListener } from '../common/iframe';\nimport { InvalidHostedFormConfigError } from '../errors';\nimport { HostedFieldEventMap, HostedFieldEventType } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport HostedInput from './hosted-input';\nimport HostedInputFactory from './hosted-input-factory';\nimport HostedInputInitializer from './hosted-input-initializer';\nimport HostedInputStorage from './hosted-input-storage';\n\ndescribe('HostedInputInitializer', () => {\n    let container: HTMLElement;\n    let eventListener: IframeEventListener<HostedFieldEventMap>;\n    let factory: Pick<HostedInputFactory, 'create' | 'normalizeParentOrigin'>;\n    let initializer: HostedInputInitializer;\n    let input: Pick<HostedInput, 'attach'>;\n    let storage: Pick<HostedInputStorage, 'setNonce'>;\n\n    beforeEach(() => {\n        factory = { create: jest.fn(), normalizeParentOrigin: jest.fn() };\n        storage = { setNonce: jest.fn() };\n        eventListener = new IframeEventListener('https://store.foobar.com');\n        input = { attach: jest.fn() };\n\n        initializer = new HostedInputInitializer(\n            factory as HostedInputFactory,\n            storage as HostedInputStorage,\n            eventListener,\n        );\n\n        container = document.createElement('div');\n        container.id = 'input-container';\n        document.body.appendChild(container);\n\n        jest.spyOn(input, 'attach').mockImplementation();\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(factory, 'create').mockReturnValue(input);\n    });\n\n    afterEach(() => {\n        container.remove();\n    });\n\n    it('creates new hosted input', async () => {\n        process.nextTick(() => {\n            eventListener.trigger({\n                type: HostedFieldEventType.AttachRequested,\n                payload: {\n                    type: HostedFieldType.CardNumber,\n                    accessibilityLabel: 'Name',\n                    fontUrls: [],\n                    placeholder: 'Card name',\n                    styles: { default: { color: 'rgb(0, 0, 0)' } },\n                },\n            });\n        });\n\n        await initializer.initialize('input-container');\n\n        expect(factory.create).toHaveBeenCalledWith(\n            expect.any(HTMLFormElement),\n            HostedFieldType.CardNumber,\n            { default: { color: 'rgb(0, 0, 0)' } },\n            [],\n            'Card name',\n            'Name',\n        );\n    });\n\n    it('attaches input to container', async () => {\n        process.nextTick(() => {\n            eventListener.trigger({\n                type: HostedFieldEventType.AttachRequested,\n                payload: { type: HostedFieldType.CardNumber },\n            });\n        });\n\n        await initializer.initialize('input-container');\n\n        expect(input.attach).toHaveBeenCalled();\n    });\n\n    it('stores nonce into storage', async () => {\n        process.nextTick(() => {\n            eventListener.trigger({\n                type: HostedFieldEventType.AttachRequested,\n                payload: { type: HostedFieldType.CardNumber },\n            });\n        });\n\n        await initializer.initialize('input-container', 'abc');\n\n        expect(storage.setNonce).toHaveBeenCalledWith('abc');\n    });\n\n    it('returns newly created input', async () => {\n        process.nextTick(() => {\n            eventListener.trigger({\n                type: HostedFieldEventType.AttachRequested,\n                payload: { type: HostedFieldType.CardNumber },\n            });\n        });\n\n        expect(await initializer.initialize('input-container')).toEqual(input);\n    });\n\n    it('throws error if container cannot be found', () => {\n        container.remove();\n\n        expect(() => initializer.initialize('input-container')).toThrow(\n            InvalidHostedFormConfigError,\n        );\n    });\n\n    it('normalises parent origin for input factory', async () => {\n        process.nextTick(() => {\n            eventListener.trigger({\n                type: HostedFieldEventType.AttachRequested,\n                payload: { type: HostedFieldType.CardNumber, origin: 'https://www.foobar.com' },\n            });\n        });\n\n        await initializer.initialize('input-container');\n\n        expect(factory.normalizeParentOrigin).toHaveBeenCalled();\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-initializer.ts",
    "content": "import { fromEvent } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\n\nimport { IframeEventListener } from '../common/iframe';\nimport { InvalidHostedFormConfigError } from '../errors';\nimport {\n    HostedFieldAttachEvent,\n    HostedFieldEventMap,\n    HostedFieldEventType,\n} from '../hosted-field-events';\n\nimport HostedInput from './hosted-input';\nimport HostedInputFactory from './hosted-input-factory';\nimport HostedInputStorage from './hosted-input-storage';\n\ninterface EventTargetLike<TEvent> {\n    addListener(eventName: string, handler: (event: TEvent) => void): void;\n    removeListener(eventName: string, handler: (event: TEvent) => void): void;\n}\n\nexport default class HostedInputInitializer {\n    constructor(\n        private _factory: HostedInputFactory,\n        private _storage: HostedInputStorage,\n        private _eventListener: IframeEventListener<HostedFieldEventMap>,\n    ) {}\n\n    initialize(containerId: string, nonce?: string): Promise<HostedInput> {\n        if (nonce) {\n            this._storage.setNonce(nonce);\n        }\n\n        const form = this._createFormContainer(containerId);\n\n        this._resetPageStyles(containerId);\n        this._eventListener.listen();\n\n        return fromEvent<HostedFieldAttachEvent>(\n            this._eventListener as EventTargetLike<HostedFieldAttachEvent>,\n            HostedFieldEventType.AttachRequested,\n        )\n            .pipe(\n                map(({ payload }) => {\n                    const { accessibilityLabel, fontUrls, placeholder, styles, origin, type } =\n                        payload;\n\n                    if (origin) {\n                        this._factory.normalizeParentOrigin(origin);\n                    }\n\n                    const field = this._factory.create(\n                        form,\n                        type,\n                        styles,\n                        fontUrls,\n                        placeholder,\n                        accessibilityLabel,\n                    );\n\n                    field.attach();\n\n                    return field;\n                }),\n                take(1),\n            )\n            .toPromise();\n    }\n\n    private _resetPageStyles(containerId: string) {\n        const html = document.querySelector('html');\n        const body = document.querySelector('body');\n        const container = document.getElementById(containerId);\n\n        [html, body, container].forEach((node) => {\n            if (!node) {\n                return;\n            }\n\n            node.style.height = '100%';\n            node.style.width = '100%';\n            node.style.overflow = 'hidden';\n            node.style.padding = '0';\n            node.style.margin = '0';\n        });\n    }\n\n    private _createFormContainer(containerId: string): HTMLFormElement {\n        const container = document.getElementById(containerId);\n\n        if (!container) {\n            throw new InvalidHostedFormConfigError(\n                'Unable to proceed because the provided container ID is not valid.',\n            );\n        }\n\n        const form = document.createElement('form');\n        const button = document.createElement('button');\n\n        form.noValidate = true;\n        form.style.height = '100%';\n        form.style.width = '100%';\n        button.style.display = 'none';\n\n        container.appendChild(form);\n        form.appendChild(button);\n\n        return form;\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-manual-order-payment-handler.spec.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport { IframeEventPoster } from '../common/iframe';\nimport {\n    HostedFieldEventType,\n    HostedFieldSubmitManualOrderRequestEvent,\n} from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\nimport { ManualOrderPaymentRequestSender, OfflinePaymentMethods } from '../payment';\n\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputManualOrderPaymentHandler from './hosted-input-manual-order-payment-handler';\nimport HostedInputStorage from './hosted-input-storage';\nimport HostedInputValidator from './hosted-input-validator';\n\ndescribe('HostedInputManualOrderPaymentHandler', () => {\n    let inputAggregator: HostedInputAggregator;\n    let inputValidator: HostedInputValidator;\n    let inputStorage: HostedInputStorage;\n    let eventPoster: IframeEventPoster<HostedInputEvent>;\n    let manualOrderPaymentRequestSender: ManualOrderPaymentRequestSender;\n    let handler: HostedInputManualOrderPaymentHandler;\n\n    const parentOrigin = 'https://bigcommerce.com';\n    const pstToken = 'PST token';\n\n    beforeEach(() => {\n        inputAggregator = new HostedInputAggregator(window.parent);\n        inputValidator = new HostedInputValidator();\n        inputStorage = new HostedInputStorage();\n        eventPoster = new IframeEventPoster(parentOrigin, window.parent);\n        manualOrderPaymentRequestSender = manualOrderPaymentRequestSender =\n            new ManualOrderPaymentRequestSender(\n                { post: jest.fn() } as unknown as RequestSender,\n                parentOrigin,\n            );\n        handler = new HostedInputManualOrderPaymentHandler(\n            inputAggregator,\n            inputValidator,\n            inputStorage,\n            eventPoster,\n            manualOrderPaymentRequestSender,\n        );\n    });\n\n    it('should post validation results', async () => {\n        const event: HostedFieldSubmitManualOrderRequestEvent = {\n            type: HostedFieldEventType.SubmitManualOrderRequested,\n            payload: {\n                data: {\n                    paymentMethodId: 'card',\n                    paymentSessionToken: pstToken,\n                },\n            },\n        };\n        const validationResult = { isValid: true, errors: {} };\n\n        jest.spyOn(inputAggregator, 'getInputValues').mockReturnValue({});\n        jest.spyOn(inputValidator, 'validate').mockResolvedValue(validationResult);\n        jest.spyOn(eventPoster, 'post');\n\n        await handler.handle(event);\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.Validated,\n            payload: validationResult,\n        });\n    });\n\n    it('should post submit failed event if validation fails', async () => {\n        const event: HostedFieldSubmitManualOrderRequestEvent = {\n            type: HostedFieldEventType.SubmitManualOrderRequested,\n            payload: {\n                data: {\n                    paymentMethodId: 'card',\n                    paymentSessionToken: pstToken,\n                },\n            },\n        };\n\n        jest.spyOn(inputAggregator, 'getInputValues').mockReturnValue({});\n        jest.spyOn(inputValidator, 'validate').mockResolvedValue({\n            isValid: false,\n            errors: {\n                cardCode: [\n                    {\n                        fieldType: HostedFieldType.CardCode,\n                        type: 'required',\n                        message: 'Missing required data',\n                    },\n                ],\n                cardExpiry: [],\n                cardName: [],\n                cardNumber: [],\n            },\n        });\n        jest.spyOn(eventPoster, 'post');\n\n        await handler.handle(event);\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.SubmitManualOrderFailed,\n            payload: {\n                error: {\n                    code: 'invalid_hosted_form_value_error',\n                    message:\n                        'Unable to proceed due to invalid user input values. Missing required data',\n                },\n            },\n        });\n    });\n\n    it('should post submit succeeded event if card payment is successful', async () => {\n        const event: HostedFieldSubmitManualOrderRequestEvent = {\n            type: HostedFieldEventType.SubmitManualOrderRequested,\n            payload: {\n                data: {\n                    paymentMethodId: 'card',\n                    paymentSessionToken: pstToken,\n                },\n            },\n        };\n        const response = {\n            body: { type: 'success' },\n        };\n\n        jest.spyOn(inputAggregator, 'getInputValues').mockReturnValue({});\n        jest.spyOn(inputValidator, 'validate').mockResolvedValue({ isValid: true, errors: {} });\n        jest.spyOn(manualOrderPaymentRequestSender, 'submitPayment').mockResolvedValue(\n            response as Response<unknown>,\n        );\n        jest.spyOn(eventPoster, 'post');\n\n        await handler.handle(event);\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.SubmitManualOrderSucceeded,\n            payload: {\n                response,\n            },\n        });\n    });\n\n    it('should skip validation and post submit succeeded event if offline payment is successful', async () => {\n        const event: HostedFieldSubmitManualOrderRequestEvent = {\n            type: HostedFieldEventType.SubmitManualOrderRequested,\n            payload: {\n                data: {\n                    paymentMethodId: OfflinePaymentMethods.Cod,\n                    paymentSessionToken: pstToken,\n                },\n            },\n        };\n        const response = {\n            body: {\n                type: 'continue',\n                code: 'complete_offline',\n                parameters: {},\n            },\n        };\n\n        jest.spyOn(inputAggregator, 'getInputValues').mockReturnValue({});\n        jest.spyOn(inputValidator, 'validate').mockResolvedValue({ isValid: true, errors: {} });\n        jest.spyOn(manualOrderPaymentRequestSender, 'submitPayment').mockResolvedValue(\n            response as Response<unknown>,\n        );\n        jest.spyOn(eventPoster, 'post');\n\n        await handler.handle(event);\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.SubmitManualOrderSucceeded,\n            payload: {\n                response,\n            },\n        });\n    });\n\n    it('should post submit succeeded event if async payment is successful', async () => {\n        const event: HostedFieldSubmitManualOrderRequestEvent = {\n            type: HostedFieldEventType.SubmitManualOrderRequested,\n            payload: {\n                data: {\n                    paymentMethodId: 'asyncThirdPartyPayment',\n                    paymentSessionToken: pstToken,\n                },\n            },\n        };\n        const response = {\n            body: {\n                type: 'continue',\n                code: 'await_confirmation',\n                parameters: {},\n            },\n        };\n\n        jest.spyOn(inputAggregator, 'getInputValues').mockReturnValue({});\n        jest.spyOn(inputValidator, 'validate').mockResolvedValue({ isValid: true, errors: {} });\n        jest.spyOn(manualOrderPaymentRequestSender, 'submitPayment').mockResolvedValue(\n            response as Response<unknown>,\n        );\n        jest.spyOn(eventPoster, 'post');\n\n        await handler.handle(event);\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.SubmitManualOrderSucceeded,\n            payload: {\n                response,\n            },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-manual-order-payment-handler.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\nimport { get, isString, snakeCase } from 'lodash';\n\nimport { IframeEventPoster } from '../common/iframe';\nimport { InvalidHostedFormValueError, PaymentErrorResponseBody } from '../errors';\nimport { HostedFieldSubmitManualOrderRequestEvent } from '../hosted-field-events';\nimport { ManualOrderPaymentRequestSender } from '../payment';\nimport { isOfflinePaymentMethodId } from '../utils';\n\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputStorage from './hosted-input-storage';\nimport HostedInputValidator from './hosted-input-validator';\n\nexport default class HostedInputManualOrderPaymentHandler {\n    constructor(\n        private _inputAggregator: HostedInputAggregator,\n        private _inputValidator: HostedInputValidator,\n        private _inputStorage: HostedInputStorage,\n        private _eventPoster: IframeEventPoster<HostedInputEvent>,\n        private _manualOrderPaymentRequestSender: ManualOrderPaymentRequestSender,\n    ) {}\n\n    handle: (event: HostedFieldSubmitManualOrderRequestEvent) => Promise<void> = async (event) => {\n        const {\n            payload: { data },\n        } = event;\n        const values = this._inputAggregator.getInputValues();\n        const results = await this._inputValidator.validate(values);\n\n        this._eventPoster.post({\n            type: HostedInputEventType.Validated,\n            payload: results,\n        });\n\n        if (!results.isValid) {\n            const error = new InvalidHostedFormValueError(results.errors);\n\n            return this._eventPoster.post({\n                type: HostedInputEventType.SubmitManualOrderFailed,\n                payload: {\n                    error: { code: snakeCase(error.name), message: error.message },\n                },\n            });\n        }\n\n        try {\n            const response = await this._manualOrderPaymentRequestSender.submitPayment(\n                data,\n                values,\n                this._inputStorage.getNonce(),\n            );\n\n            const isFailure =\n                get(response.body, 'type') === 'failure' && isString(get(response.body, 'code'));\n            const isError = get(response.body, 'type') === 'error';\n\n            const isSuccessfulOfflineOrder =\n                isOfflinePaymentMethodId(data.paymentMethodId) &&\n                get(response.body, 'type') === 'continue' &&\n                get(response.body, 'code') === 'complete_offline';\n            const isSuccessfulAsyncOrder =\n                get(response.body, 'type') === 'continue' &&\n                get(response.body, 'code') === 'await_confirmation';\n            const isSuccess =\n                get(response.body, 'type') === 'success' ||\n                isSuccessfulOfflineOrder ||\n                isSuccessfulAsyncOrder;\n\n            if (isFailure) {\n                this._eventPoster.post({\n                    type: HostedInputEventType.SubmitManualOrderFailed,\n                    payload: {\n                        error: { code: String(get(response.body, 'code') ?? '') },\n                    },\n                });\n            } else if (isError) {\n                this._eventPoster.post({\n                    type: HostedInputEventType.SubmitManualOrderFailed,\n                    payload: {\n                        error: { code: String(get(response.body, 'type') ?? '') },\n                    },\n                });\n            } else if (isSuccess) {\n                this._eventPoster.post({\n                    type: HostedInputEventType.SubmitManualOrderSucceeded,\n                    payload: {\n                        response,\n                    },\n                });\n            }\n        } catch (error) {\n            if (this._isPaymentErrorResponse(error)) {\n                this._eventPoster.post({\n                    type: HostedInputEventType.SubmitManualOrderFailed,\n                    payload: { error: error.body.errors[0], response: error },\n                });\n            } else if (this._isErrorResponse(error)) {\n                this._eventPoster.post({\n                    type: HostedInputEventType.SubmitManualOrderFailed,\n                    payload: { error: { code: snakeCase(error.name), message: error.message } },\n                });\n            }\n        }\n    };\n\n    private _isPaymentErrorResponse(response: any): response is Response<PaymentErrorResponseBody> {\n        const { body: { errors = [] } = {} } = response || {};\n\n        return (\n            typeof (errors[0] && errors[0].code) === 'string' &&\n            typeof (errors[0] && errors[0].message) === 'string'\n        );\n    }\n\n    private _isErrorResponse(error: unknown): error is { name?: string; message?: string } {\n        return (\n            typeof error === 'object' &&\n            error !== null &&\n            (('name' in error && typeof (error as { name: unknown }).name === 'string') ||\n                !('name' in error)) &&\n            (('message' in error && typeof (error as { message: unknown }).message === 'string') ||\n                !('message' in error))\n        );\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-options.ts",
    "content": "export default interface HostedInputOptions {\n    containerId: string;\n    nonce?: string;\n    origin: string;\n    parentOrigin: string;\n    paymentOrigin: string;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-storage.spec.ts",
    "content": "import HostedInputStorage from './hosted-input-storage';\n\ndescribe('HostedInputStorage', () => {\n    let subject: HostedInputStorage;\n\n    beforeEach(() => {\n        subject = new HostedInputStorage();\n    });\n\n    it('sets nonce for later retrieval', () => {\n        subject.setNonce('abc');\n\n        expect(subject.getNonce()).toBe('abc');\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-storage.ts",
    "content": "export default class HostedInputStorage {\n    private _nonce?: string;\n\n    setNonce(nonce: string): void {\n        this._nonce = nonce;\n    }\n\n    getNonce(): string | undefined {\n        return this._nonce;\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-stored-card-handler.spec.ts",
    "content": "import {\n    getErrorPaymentResponseBody,\n    getPaymentResponseBody,\n    getResponse,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { IframeEventPoster } from '../common/iframe';\nimport { HostedFieldEventType } from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\nimport HostedInputValidateResults from '../hosted-input-validate-results';\nimport { StorefrontStoredCardRequestSender } from '../payment';\nimport {\n    StoredCardHostedFormData,\n    StoredCardHostedFormInstrumentFields,\n} from '../stored-card-hosted-form-type';\nimport {\n    StoredCardHostedFormDataMock,\n    StoredCardHostedFormInstrumentFieldsMock,\n    StoredCardHostedFormInstrumentFormMock,\n} from '../stored-card-hosted-form.mock';\n\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport HostedInputValidator from './hosted-input-validator';\nimport HostedInputValues from './hosted-input-values';\n\ndescribe('HostedInputStoredCardHandler', () => {\n    let data: StoredCardHostedFormData;\n    let eventPoster: Pick<IframeEventPoster<HostedInputEvent>, 'post'>;\n    let fields: StoredCardHostedFormInstrumentFields;\n    let handler: HostedInputStoredCardHandler;\n    let inputAggregator: Pick<HostedInputAggregator, 'getInputValues'>;\n    let inputValidator: Pick<HostedInputValidator, 'validate'>;\n    let requestSender: Pick<StorefrontStoredCardRequestSender, 'submitPaymentInstrument'>;\n    let values: HostedInputValues;\n    let validationResults: HostedInputValidateResults;\n\n    beforeEach(() => {\n        inputAggregator = { getInputValues: jest.fn() };\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        inputValidator = { validate: jest.fn(() => []) };\n        eventPoster = { post: jest.fn() };\n        requestSender = { submitPaymentInstrument: jest.fn() };\n\n        handler = new HostedInputStoredCardHandler(\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            requestSender as StorefrontStoredCardRequestSender,\n        );\n\n        data = StoredCardHostedFormDataMock;\n        fields = StoredCardHostedFormInstrumentFieldsMock;\n\n        values = {\n            [HostedFieldType.CardCode]: '777',\n            [HostedFieldType.CardExpiry]: '03 / 30',\n            [HostedFieldType.CardName]: 'John Smith',\n            [HostedFieldType.CardNumber]: '4111 1111 1111 1111',\n        };\n\n        validationResults = {\n            isValid: true,\n            errors: {\n                cardCode: [],\n                cardExpiry: [],\n                cardName: [],\n                cardNumber: [],\n            },\n        };\n\n        jest.spyOn(inputAggregator, 'getInputValues').mockReturnValue(values);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(inputValidator, 'validate').mockReturnValue(validationResults);\n\n        jest.spyOn(requestSender, 'submitPaymentInstrument').mockResolvedValue(\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            getResponse(getPaymentResponseBody()),\n        );\n    });\n\n    it('validates user inputs', async () => {\n        jest.spyOn(inputValidator, 'validate');\n\n        await handler.handle({\n            type: HostedFieldEventType.StoredCardRequested,\n            payload: { data, fields },\n        });\n\n        expect(inputValidator.validate).toHaveBeenCalledWith(values);\n    });\n\n    it('posts event when validation happens', async () => {\n        const results = {\n            isValid: false,\n            errors: {\n                ...validationResults.errors,\n                cardNumber: [\n                    { fieldType: HostedFieldType.CardNumber, message: 'Card number is required' },\n                ],\n            },\n        };\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(inputValidator, 'validate').mockResolvedValue(results);\n\n        jest.spyOn(eventPoster, 'post');\n\n        await handler.handle({\n            type: HostedFieldEventType.StoredCardRequested,\n            payload: { data, fields },\n        });\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.Validated,\n            payload: results,\n        });\n    });\n\n    it('makes vaulting request with expected payload', async () => {\n        await handler.handle({\n            type: HostedFieldEventType.StoredCardRequested,\n            payload: { data, fields },\n        });\n\n        expect(requestSender.submitPaymentInstrument).toHaveBeenCalledWith(\n            StoredCardHostedFormDataMock,\n            StoredCardHostedFormInstrumentFormMock,\n        );\n    });\n\n    it('posts event with payload if vaulting submission succeeds', async () => {\n        jest.spyOn(eventPoster, 'post');\n\n        await handler.handle({\n            type: HostedFieldEventType.StoredCardRequested,\n            payload: { data, fields },\n        });\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.StoredCardSucceeded,\n        });\n    });\n\n    it('posts event if vaulting submission fails', async () => {\n        const response = getResponse(getErrorPaymentResponseBody());\n\n        jest.spyOn(eventPoster, 'post');\n\n        jest.spyOn(requestSender, 'submitPaymentInstrument').mockRejectedValue(response);\n\n        await handler.handle({\n            type: HostedFieldEventType.StoredCardRequested,\n            payload: { data, fields },\n        });\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.StoredCardFailed,\n        });\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-stored-card-handler.ts",
    "content": "import { IframeEventPoster } from '../common/iframe';\nimport { HostedFieldStoredCardRequestEvent } from '../hosted-field-events';\nimport { StorefrontStoredCardRequestSender } from '../payment';\n\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputValidator from './hosted-input-validator';\n\nexport default class HostedInputStoredCardHandler {\n    constructor(\n        private _inputAggregator: HostedInputAggregator,\n        private _inputValidator: HostedInputValidator,\n        private _eventPoster: IframeEventPoster<HostedInputEvent>,\n        private _storedCardRequestSender: StorefrontStoredCardRequestSender,\n    ) {}\n\n    handle: (event: HostedFieldStoredCardRequestEvent) => Promise<void> = async (event) => {\n        const {\n            payload: { data, fields },\n        } = event;\n        const values = this._inputAggregator.getInputValues();\n        const results = await this._inputValidator.validate(values);\n\n        this._eventPoster.post({\n            type: HostedInputEventType.Validated,\n            payload: results,\n        });\n\n        if (!results.isValid) {\n            return this._eventPoster.post({\n                type: HostedInputEventType.StoredCardFailed,\n            });\n        }\n\n        const { defaultInstrument, ...billingAddress } = fields;\n\n        const [expiryMonth, expiryYear] = values.cardExpiry ? values.cardExpiry.split('/') : [];\n\n        try {\n            await this._storedCardRequestSender.submitPaymentInstrument(data, {\n                billingAddress,\n                instrument: {\n                    type: 'card',\n                    cardholderName: values.cardName || '',\n                    number: values.cardNumber ? values.cardNumber.replace(/ /g, '') : '',\n                    expiryMonth: Number(expiryMonth.trim()),\n                    expiryYear: Number(`20${expiryYear.trim()}`),\n                    verificationValue: values.cardCode ?? '',\n                },\n                defaultInstrument,\n            });\n\n            this._eventPoster.post({\n                type: HostedInputEventType.StoredCardSucceeded,\n            });\n        } catch (error) {\n            this._eventPoster.post({\n                type: HostedInputEventType.StoredCardFailed,\n            });\n        }\n    };\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-styles.ts",
    "content": "type HostedInputStyles = Partial<\n    Pick<CSSStyleDeclaration, 'color' | 'fontFamily' | 'fontSize' | 'fontWeight'>\n>;\n\nexport default HostedInputStyles;\n\nexport interface HostedInputStylesMap {\n    default?: HostedInputStyles;\n    error?: HostedInputStyles;\n    focus?: HostedInputStyles;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-validate-error-data.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nexport default interface HostedInputValidateErrorData {\n    fieldType: string;\n    message: string;\n    type: string;\n}\n\nexport interface HostedInputValidateErrorDataMap {\n    [HostedFieldType.CardCode]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardExpiry]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardName]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardNumber]?: HostedInputValidateErrorData[];\n    [HostedFieldType.Note]?: HostedInputValidateErrorData[];\n    [HostedFieldType.Hidden]?: HostedInputValidateErrorData[];\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-validate-results.ts",
    "content": "import { HostedInputValidateErrorDataMap } from './hosted-input-validate-error-data';\n\nexport default interface HostedInputValidateResults {\n    errors: HostedInputValidateErrorDataMap;\n    isValid: boolean;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-validator.spec.ts",
    "content": "import { omit } from 'lodash';\n\nimport HostedFieldType from '../hosted-field-type';\n\nimport HostedInputValidateResults from './hosted-input-validate-results';\nimport HostedInputValidator from './hosted-input-validator';\nimport HostedInputValues from './hosted-input-values';\n\ndescribe('HostedInputValidator', () => {\n    let validData: HostedInputValues;\n    let validResults: HostedInputValidateResults;\n    let validator: HostedInputValidator;\n\n    beforeEach(() => {\n        validData = {\n            cardCode: '123',\n            cardExpiry: '10 / 35',\n            cardName: 'BC',\n            cardNumber: '4111 1111 1111 1111',\n        };\n\n        validResults = {\n            isValid: true,\n            errors: {\n                cardCode: [],\n                cardExpiry: [],\n                cardName: [],\n                cardNumber: [],\n            },\n        };\n\n        validator = new HostedInputValidator();\n    });\n\n    it('does not throw error if data is valid', async () => {\n        expect(await validator.validate(validData)).toEqual(validResults);\n    });\n\n    it('does not throw error if card number is valid 13-digit visa card number', async () => {\n        expect(await validator.validate({ ...validData, cardNumber: '4929 0000 0555 9' })).toEqual(\n            validResults,\n        );\n    });\n\n    it('does not throw error if card number is valid 8-BIN discover card number', async () => {\n        expect(\n            await validator.validate({ ...validData, cardNumber: '8171 9999 2766 0000' }),\n        ).toEqual(validResults);\n    });\n\n    it('returns error if card number is missing', async () => {\n        expect(await validator.validate({ ...validData, cardNumber: '' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardNumber: [\n                    {\n                        fieldType: 'cardNumber',\n                        type: 'required',\n                        message: 'Credit card number is required',\n                    },\n                    {\n                        fieldType: 'cardNumber',\n                        type: 'invalid_card_number',\n                        message: 'Credit card number must be valid',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('returns error if card number is invalid', async () => {\n        expect(\n            await validator.validate({ ...validData, cardNumber: '9999 9999 9999 9999' }),\n        ).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardNumber: [\n                    {\n                        fieldType: 'cardNumber',\n                        type: 'invalid_card_number',\n                        message: 'Credit card number must be valid',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('returns error if payment note is missing or too long', async () => {\n        expect(\n            await validator.validate({\n                ...validData,\n                note: '',\n            }),\n        ).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                note: [\n                    {\n                        fieldType: 'note',\n                        type: 'required',\n                        message: 'Manual payment description is required',\n                    },\n                ],\n            },\n        });\n        expect(\n            await validator.validate({\n                ...validData,\n                note: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{}|;\\':\",.<>?/~`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{}|;\\':\",.<>?/~`\\n',\n            }),\n        ).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                note: [\n                    {\n                        fieldType: 'note',\n                        type: 'max',\n                        message: 'Payment description cannot exceed 128 letters',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('does not return error if card number is not required', async () => {\n        expect(await validator.validate(omit(validData, HostedFieldType.CardNumber))).toEqual({\n            ...validResults,\n            errors: omit(validResults.errors, HostedFieldType.CardNumber),\n        });\n    });\n\n    it('returns error if card name is missing', async () => {\n        expect(await validator.validate({ ...validData, cardName: '' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardName: [\n                    { fieldType: 'cardName', type: 'required', message: 'Full name is required' },\n                ],\n            },\n        });\n    });\n\n    it('returns error if card name field includes a valid card number', async () => {\n        expect(\n            await validator.validate({\n                ...validData,\n                cardName: 'text before 4111 1111 1111 1111 and after',\n            }),\n        ).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardName: [\n                    {\n                        fieldType: 'cardName',\n                        type: 'invalid_card_name',\n                        message: 'Credit card name must be valid',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('does not return error if card name is not required', async () => {\n        expect(await validator.validate(omit(validData, HostedFieldType.CardName))).toEqual({\n            ...validResults,\n            errors: omit(validResults.errors, HostedFieldType.CardName),\n        });\n    });\n\n    it('returns error if expiry date is missing', async () => {\n        expect(await validator.validate({ ...validData, cardExpiry: '' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardExpiry: [\n                    {\n                        fieldType: 'cardExpiry',\n                        type: 'required',\n                        message: 'Expiration date is required',\n                    },\n                    {\n                        fieldType: 'cardExpiry',\n                        type: 'invalid_card_expiry',\n                        message: 'Expiration date must be a valid future date in MM / YY format',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('returns error if expiry date is invalid', async () => {\n        expect(await validator.validate({ ...validData, cardExpiry: '2030 / 12' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardExpiry: [\n                    {\n                        fieldType: 'cardExpiry',\n                        type: 'invalid_card_expiry',\n                        message: 'Expiration date must be a valid future date in MM / YY format',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('returns error if expiry date is in past', async () => {\n        expect(await validator.validate({ ...validData, cardExpiry: '2030 / 12' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardExpiry: [\n                    {\n                        fieldType: 'cardExpiry',\n                        type: 'invalid_card_expiry',\n                        message: 'Expiration date must be a valid future date in MM / YY format',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('does not return error if expiry date is not required', async () => {\n        expect(await validator.validate(omit(validData, HostedFieldType.CardExpiry))).toEqual({\n            ...validResults,\n            errors: omit(validResults.errors, HostedFieldType.CardExpiry),\n        });\n    });\n\n    it('returns error if card code is missing when required', async () => {\n        expect(await validator.validate({ ...validData, cardCode: '' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardCode: [\n                    { fieldType: 'cardCode', type: 'required', message: 'CVV is required' },\n                    {\n                        fieldType: 'cardCode',\n                        type: 'invalid_card_code',\n                        message: 'CVV must be valid',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('returns error if card code is invalid when required', async () => {\n        expect(await validator.validate({ ...validData, cardCode: '99999' })).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardCode: [\n                    {\n                        fieldType: 'cardCode',\n                        type: 'invalid_card_code',\n                        message: 'CVV must be valid',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('returns error if card code is invalid for given card number', async () => {\n        // Card code for American Express should have 4 digts\n        expect(\n            await validator.validate({\n                ...validData,\n                cardCode: '123',\n                cardNumber: '378282246310005',\n            }),\n        ).toEqual({\n            isValid: false,\n            errors: {\n                ...validResults.errors,\n                cardCode: [\n                    {\n                        fieldType: 'cardCode',\n                        type: 'invalid_card_code',\n                        message: 'CVV must be valid',\n                    },\n                ],\n            },\n        });\n    });\n\n    it('does not return error if card code is not required', async () => {\n        expect(await validator.validate(omit(validData, HostedFieldType.CardCode))).toEqual({\n            ...validResults,\n            errors: omit(validResults.errors, HostedFieldType.CardCode),\n        });\n    });\n\n    it('does not return invalid card code error if card code is provided before card number', async () => {\n        expect(await validator.validate({ ...validData, cardCode: '123', cardNumber: '' })).toEqual(\n            {\n                isValid: false,\n                errors: expect.objectContaining({\n                    cardCode: [],\n                }),\n            },\n        );\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-validator.ts",
    "content": "import { creditCardType, cvv, expirationDate, number } from 'card-validator';\nimport { object, ObjectShape, string, StringSchema, ValidationError } from 'yup';\n\nimport { HostedInputValidateErrorDataMap } from './hosted-input-validate-error-data';\nimport HostedInputValidateResults from './hosted-input-validate-results';\nimport HostedInputValues from './hosted-input-values';\n\nexport default class HostedInputValidator {\n    private readonly _completeSchema: ObjectShape = {\n        cardCode: this._getCardCodeSchema(),\n        cardExpiry: this._getCardExpirySchema(),\n        cardName: this._getCardNameSchema(),\n        cardNumber: this._getCardNumberSchema(),\n        note: this._getNoteSchema(),\n    };\n\n    constructor() {\n        this._configureCardValidator();\n    }\n\n    async validate(values: HostedInputValues): Promise<HostedInputValidateResults> {\n        const schemas: ObjectShape = {};\n        const results: HostedInputValidateResults = {\n            errors: {},\n            isValid: true,\n        };\n\n        let requiredField: keyof HostedInputValues;\n\n        for (requiredField in values) {\n            if (Object.prototype.hasOwnProperty.call(values, requiredField)) {\n                schemas[requiredField] = this._completeSchema[requiredField];\n                results.errors[requiredField] = [];\n            }\n        }\n\n        try {\n            await object(schemas).validate(values, { abortEarly: false });\n\n            return results;\n        } catch (error) {\n            if (this._isValidationErrorType(error)) {\n                throw error;\n            }\n\n            return {\n                errors: (\n                    Object.keys(results.errors) as Array<keyof HostedInputValidateErrorDataMap>\n                ).reduce<HostedInputValidateErrorDataMap>(\n                    (result, fieldType) => ({\n                        ...result,\n                        [fieldType]: (error as ValidationError).inner\n                            .filter((innerError) => innerError.path === fieldType)\n                            .map((innerError) => ({\n                                fieldType: innerError.path,\n                                message: innerError.errors.join(' '),\n                                type: innerError.type,\n                            })),\n                    }),\n                    {},\n                ),\n                isValid: false,\n            };\n        }\n    }\n\n    private _configureCardValidator(): void {\n        const discoverInfo = creditCardType.getTypeInfo('discover');\n        const visaInfo = creditCardType.getTypeInfo('visa');\n\n        // Need to support 13 digit PAN because some gateways only provide test credit card numbers in this format.\n        creditCardType.updateCard('visa', {\n            lengths: [13, ...(visaInfo.lengths || [])],\n        });\n\n        // Add support for 8-BIN Discover Cards.\n        creditCardType.updateCard('discover', {\n            patterns: [...(discoverInfo.patterns || []), [810, 817]],\n        });\n\n        creditCardType.addCard({\n            niceType: 'Mada',\n            type: 'mada',\n            patterns: [\n                400861, 401757, 407197, 407395, 409201, 410685, 412565, 417633, 419593, 422817,\n                422818, 422819, 428331, 428671, 428672, 428673, 431361, 432328, 434107, 439954,\n                440533, 440647, 440795, 445564, 446393, 446404, 446672, 455036, 455708, 457865,\n                458456, 462220, 468540, 468541, 468542, 468543, 483010, 483011, 483012, 484783,\n                486094, 486095, 486096, 489317, 489318, 489319, 493428, 504300, 506968, 508160,\n                513213, 520058, 521076, 524130, 524514, 529415, 529741, 530060, 530906, 531095,\n                531196, 532013, 535825, 535989, 536023, 537767, 539931, 543085, 543357, 549760,\n                554180, 557606, 558848, 585265, 588845, 588846, 588847, 588848, 588849, 588850,\n                588851, 588982, 588983, 589005, 589206, 604906, 605141, 636120, 968201, 968202,\n                968203, 968204, 968205, 968206, 968207, 968208, 968209, 968210, 968211,\n            ],\n            gaps: [4, 8, 12],\n            lengths: [16, 18, 19],\n            code: {\n                name: 'CVV',\n                size: 3,\n            },\n        });\n    }\n\n    private _getCardCodeSchema(): StringSchema {\n        return string()\n            .required('CVV is required')\n            .test({\n                message: 'CVV must be valid',\n                name: 'invalid_card_code',\n                test(value) {\n                    const { card } = number((this.parent as HostedInputValues).cardNumber || '');\n\n                    return cvv(value, card && card.code ? card.code.size : undefined).isValid;\n                },\n            });\n    }\n\n    private _getCardExpirySchema(): StringSchema {\n        return string()\n            .required('Expiration date is required')\n            .test({\n                message: 'Expiration date must be a valid future date in MM / YY format',\n                name: 'invalid_card_expiry',\n                test: (value) => expirationDate(value).isValid,\n            });\n    }\n\n    private _getCardNameSchema(): StringSchema {\n        return string()\n            .max(200)\n            .required('Full name is required')\n            .test({\n                message: 'Credit card name must be valid',\n                name: 'invalid_card_name',\n                test: (value) => {\n                    // Get all numbers from the input value after removing whitespaces\n                    const numbers = value.replace(/\\s/g, '').match(/[0-9]+/g);\n\n                    if (!numbers?.length) {\n                        return true;\n                    }\n\n                    for (const num of numbers) {\n                        if (number(num).isValid) {\n                            return false;\n                        }\n                    }\n\n                    return true;\n                },\n            });\n    }\n\n    private _getNoteSchema(): StringSchema {\n        return string()\n            .required('Manual payment description is required')\n            .max(128, 'Payment description cannot exceed 128 letters');\n    }\n\n    private _getCardNumberSchema(): StringSchema {\n        return string()\n            .required('Credit card number is required')\n            .test({\n                message: 'Credit card number must be valid',\n                name: 'invalid_card_number',\n                test: (value) => number(value).isValid,\n            });\n    }\n\n    private _isValidationErrorType(error: any): error is { name: string } {\n        return 'name' in error && error.name !== 'ValidationError';\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-values.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nexport default interface HostedInputValues {\n    [HostedFieldType.CardCode]?: string;\n    [HostedFieldType.CardExpiry]?: string;\n    [HostedFieldType.CardName]?: string;\n    [HostedFieldType.CardNumber]?: string;\n    [HostedFieldType.Note]?: string;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input-window.ts",
    "content": "import HostedInput from './hosted-input';\n\nexport default interface HostedInputWindow extends Window {\n    hostedInput: HostedInput;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport {\n    HostedFieldEventMap,\n    HostedFieldEventType,\n    HostedFieldSubmitManualOrderRequestEvent,\n} from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport HostedInput from './hosted-input';\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputManualOrderPaymentHandler from './hosted-input-manual-order-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\nimport HostedInputValues from './hosted-input-values';\n\ndescribe('HostedInput', () => {\n    let container: HTMLFormElement;\n    let eventEmitter: EventEmitter;\n    let eventListener: Pick<\n        IframeEventListener<HostedFieldEventMap>,\n        'addListener' | 'listen' | 'stopListen'\n    >;\n    let eventPoster: Pick<IframeEventPoster<HostedInputEvent>, 'setTarget' | 'post'>;\n    let fontUrls: string[];\n    let input: HostedInput;\n    let storedCardHandler: Pick<HostedInputStoredCardHandler, 'handle'>;\n    let inputAggregator: Pick<HostedInputAggregator, 'getInputValues'>;\n    let inputValidator: Pick<HostedInputValidator, 'validate'>;\n    let manualOrderPaymentHandler: Pick<HostedInputManualOrderPaymentHandler, 'handle'>;\n    let styles: HostedInputStylesMap;\n    let values: HostedInputValues;\n\n    beforeEach(() => {\n        values = {\n            cardCode: '123',\n            cardExpiry: '10 / 20',\n            cardName: 'Good Shopper',\n            cardNumber: '4111 1111 1111 1111',\n        };\n\n        styles = {\n            default: {\n                color: 'rgb(255, 255, 255)',\n                fontSize: '15px',\n            },\n        };\n\n        eventEmitter = new EventEmitter();\n\n        eventListener = {\n            addListener: jest.fn((type, listener) => {\n                eventEmitter.on(type, listener);\n            }),\n            listen: jest.fn(),\n            stopListen: jest.fn(),\n        };\n\n        eventPoster = {\n            post: jest.fn(),\n            setTarget: jest.fn(),\n        };\n\n        fontUrls = ['https://fonts.googleapis.com/css?family=Open+Sans&display=swap'];\n\n        manualOrderPaymentHandler = { handle: jest.fn() };\n        storedCardHandler = { handle: jest.fn() };\n\n        inputAggregator = {\n            getInputValues: jest.fn(() => values),\n        };\n\n        inputValidator = {\n            validate: jest.fn(() =>\n                Promise.resolve({\n                    isValid: true,\n                    errors: {\n                        cardExpiry: [],\n                        cardName: [],\n                        cardNumber: [],\n                    },\n                }),\n            ),\n        };\n\n        container = document.createElement('form');\n        document.body.appendChild(container);\n\n        input = new HostedInput(\n            HostedFieldType.CardName,\n            container,\n            'Full name',\n            'Cardholder name',\n            'cc-name',\n            styles,\n            fontUrls,\n            eventListener as IframeEventListener<HostedFieldEventMap>,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            manualOrderPaymentHandler as HostedInputManualOrderPaymentHandler,\n            storedCardHandler as HostedInputStoredCardHandler,\n        );\n    });\n\n    afterEach(() => {\n        input.detach();\n        container.remove();\n    });\n\n    it('returns input type', () => {\n        expect(input.getType()).toEqual(HostedFieldType.CardName);\n    });\n\n    it('sets and returns input value', () => {\n        input.setValue('abc');\n\n        expect(input.getValue()).toBe('abc');\n    });\n\n    it('attaches input to container', () => {\n        input.attach();\n\n        expect(container.querySelector('input')).toBeDefined();\n    });\n\n    it('configures input with expected attributes', () => {\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        expect(element.id).toBe('card-name');\n        expect(element.placeholder).toBe('Full name');\n        expect(element.autocomplete).toBe('cc-name');\n        expect(element.getAttribute('aria-label')).toBe('Cardholder name');\n        expect(element.inputMode).toBe('text');\n    });\n\n    it('renders hidden field as normal field', () => {\n        input = new HostedInput(\n            HostedFieldType.Hidden,\n            container,\n            '',\n            'Hidden field',\n            '',\n            styles,\n            fontUrls,\n            eventListener as IframeEventListener<HostedFieldEventMap>,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            manualOrderPaymentHandler as HostedInputManualOrderPaymentHandler,\n            storedCardHandler as HostedInputStoredCardHandler,\n        );\n\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        expect(element.id).toBe('hidden');\n        expect(element.placeholder).toBe('');\n        expect(element.getAttribute('aria-label')).toBe('Hidden field');\n        expect(element.inputMode).toBe('text');\n    });\n\n    it('renders payment note field', () => {\n        input = new HostedInput(\n            HostedFieldType.Note,\n            container,\n            '',\n            'Payment note',\n            '',\n            styles,\n            fontUrls,\n            eventListener as IframeEventListener<HostedFieldEventMap>,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            manualOrderPaymentHandler as HostedInputManualOrderPaymentHandler,\n            storedCardHandler as HostedInputStoredCardHandler,\n        );\n\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        expect(element.id).toBe('note');\n        expect(element.placeholder).toBe('');\n        expect(element.getAttribute('aria-label')).toBe('Payment note');\n        expect(element.inputMode).toBe('text');\n    });\n\n    it('configures card number input with numeric inputmode', () => {\n        const cardNumberInput = new HostedInput(\n            HostedFieldType.CardNumber,\n            container,\n            'Full name',\n            'Cardholder name',\n            'cc-name',\n            styles,\n            fontUrls,\n            eventListener as IframeEventListener<HostedFieldEventMap>,\n            eventPoster as IframeEventPoster<HostedInputEvent>,\n            inputAggregator as HostedInputAggregator,\n            inputValidator as HostedInputValidator,\n            manualOrderPaymentHandler as HostedInputManualOrderPaymentHandler,\n            storedCardHandler as HostedInputStoredCardHandler,\n        );\n\n        cardNumberInput.attach();\n\n        expect(container.querySelector('input')!.inputMode).toBe('numeric');\n\n        cardNumberInput.detach();\n    });\n\n    it('sets target for event poster', () => {\n        input.attach();\n\n        expect(eventPoster.setTarget).toHaveBeenCalled();\n    });\n\n    it('starts listening to events', () => {\n        input.attach();\n\n        expect(eventListener.listen).toHaveBeenCalled();\n    });\n\n    it('applies default styles to input', () => {\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        expect(element.style.color).toBe('rgb(255, 255, 255)');\n        expect(element.style.fontSize).toBe('15px');\n    });\n\n    it('notifies when input is attached', () => {\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.AttachSucceeded,\n        });\n    });\n\n    it('loads required fonts when input is attached', () => {\n        input.attach();\n\n        const links = Array.from<HTMLLinkElement>(\n            document.querySelectorAll('link[href*=\"fonts.googleapis.com\"][rel=\"stylesheet\"]'),\n        );\n\n        expect(links.map((link) => link.href)).toEqual(fontUrls);\n    });\n\n    it('notifies input change', () => {\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        element.value = '123';\n        element.dispatchEvent(new Event('input', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.Changed,\n            payload: {\n                fieldType: HostedFieldType.CardName,\n            },\n        });\n    });\n\n    it('notifies when input is in focus', () => {\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        element.dispatchEvent(new Event('focus', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.Focused,\n            payload: {\n                fieldType: HostedFieldType.CardName,\n            },\n        });\n    });\n\n    it('notifies when input loses focus', () => {\n        jest.spyOn(eventPoster, 'post');\n\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        element.dispatchEvent(new Event('blur', { bubbles: true }));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.Blurred,\n            payload: {\n                fieldType: HostedFieldType.CardName,\n            },\n        });\n    });\n\n    it('validates form when input loses focus', () => {\n        input.attach();\n\n        const element = container.querySelector('input')!;\n\n        element.dispatchEvent(new Event('blur', { bubbles: true }));\n\n        expect(inputValidator.validate).toHaveBeenCalledWith(values);\n    });\n\n    it('validates form when requested by parent frame', () => {\n        input.attach();\n\n        eventEmitter.emit(HostedFieldEventType.ValidateRequested);\n\n        expect(inputValidator.validate).toHaveBeenCalledWith(values);\n    });\n\n    it('submits manual order form when requested by parent frame', () => {\n        const event = {} as HostedFieldSubmitManualOrderRequestEvent;\n\n        input.attach();\n\n        eventEmitter.emit(HostedFieldEventType.SubmitManualOrderRequested, event);\n\n        expect(manualOrderPaymentHandler.handle).toHaveBeenCalledWith(event);\n    });\n\n    it('emits event when enter key is pressed', () => {\n        input.attach();\n\n        container.dispatchEvent(new Event('submit'));\n\n        expect(eventPoster.post).toHaveBeenCalledWith({\n            type: HostedInputEventType.Entered,\n            payload: {\n                fieldType: HostedFieldType.CardName,\n            },\n        });\n    });\n\n    it('cleans up when it detaches', () => {\n        jest.spyOn(eventListener, 'stopListen');\n\n        input.attach();\n        input.detach();\n\n        expect(eventListener.stopListen).toHaveBeenCalled();\n        expect(container.querySelector('input')).toBeFalsy();\n        expect(\n            document.querySelector('link[href*=\"fonts.googleapis.com\"][rel=\"stylesheet\"]'),\n        ).toBeFalsy();\n    });\n\n    it('applies bugfix of forcing focus on input field', () => {\n        input.attach();\n\n        expect(document.activeElement).toEqual(document.body);\n\n        window.dispatchEvent(new Event('focus'));\n\n        expect(document.activeElement).toEqual(container.querySelector('input'));\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/hosted-input.ts",
    "content": "import { kebabCase } from 'lodash';\n\nimport { IframeEventListener, IframeEventPoster } from '../common/iframe';\nimport { parseUrl } from '../common/url';\nimport {\n    HostedFieldEventMap,\n    HostedFieldEventType,\n    HostedFieldValidateRequestEvent,\n} from '../hosted-field-events';\nimport HostedFieldType from '../hosted-field-type';\n\nimport HostedInputAggregator from './hosted-input-aggregator';\nimport { HostedInputEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputManualOrderPaymentHandler from './hosted-input-manual-order-payment-handler';\nimport HostedInputStoredCardHandler from './hosted-input-stored-card-handler';\nimport HostedInputStyles, { HostedInputStylesMap } from './hosted-input-styles';\nimport HostedInputValidator from './hosted-input-validator';\nimport HostedInputWindow from './hosted-input-window';\n\nexport default class HostedInput {\n    protected _input: HTMLInputElement;\n    protected _previousValue?: string;\n    private _fontLinks?: HTMLLinkElement[];\n    private _isTouched = false;\n\n    /**\n     * @internal\n     */\n    constructor(\n        protected _type: HostedFieldType,\n        protected _form: HTMLFormElement,\n        protected _placeholder: string,\n        protected _accessibilityLabel: string,\n        protected _autocomplete: string,\n        protected _styles: HostedInputStylesMap,\n        protected _fontUrls: string[],\n        protected _eventListener: IframeEventListener<HostedFieldEventMap>,\n        protected _eventPoster: IframeEventPoster<HostedInputEvent>,\n        protected _inputAggregator: HostedInputAggregator,\n        protected _inputValidator: HostedInputValidator,\n        protected _manualOrderPaymentHandler: HostedInputManualOrderPaymentHandler,\n        protected _storedCardHandler: HostedInputStoredCardHandler,\n    ) {\n        this._input = document.createElement('input');\n\n        this._input.addEventListener('input', this._handleInput);\n        this._input.addEventListener('blur', this._handleBlur);\n        this._input.addEventListener('focus', this._handleFocus);\n        this._eventListener.addListener(\n            HostedFieldEventType.ValidateRequested,\n            this._handleValidate,\n        );\n\n        this._eventListener.addListener(\n            HostedFieldEventType.SubmitManualOrderRequested,\n            this._manualOrderPaymentHandler.handle,\n        );\n\n        this._eventListener.addListener(\n            HostedFieldEventType.StoredCardRequested,\n            this._storedCardHandler.handle,\n        );\n\n        this._configureInput();\n    }\n\n    getType(): HostedFieldType {\n        return this._type;\n    }\n\n    getValue(): string {\n        return this._input.value;\n    }\n\n    setValue(value: string): void {\n        this._processChange(value);\n    }\n\n    isTouched(): boolean {\n        return this._isTouched;\n    }\n\n    attach(): void {\n        this._form.appendChild(this._input);\n        this._form.addEventListener('submit', this._handleSubmit);\n\n        this._loadFonts();\n\n        this._eventPoster.setTarget(window.parent);\n        this._eventListener.listen();\n\n        // fixes the issue on Firefox/Safari where the input doesn't focus properly\n        window.addEventListener('focus', this._forceFocusToInput);\n\n        // Assign itself to the global so it can be accessed by its sibling frames\n        (window as unknown as HostedInputWindow).hostedInput = this;\n\n        this._eventPoster.post({ type: HostedInputEventType.AttachSucceeded });\n    }\n\n    detach(): void {\n        if (this._input.parentElement) {\n            this._input.parentElement.removeChild(this._input);\n        }\n\n        this._form.removeEventListener('submit', this._handleSubmit);\n        this._unloadFonts();\n\n        window.removeEventListener('focus', this._forceFocusToInput);\n\n        this._eventListener.stopListen();\n    }\n\n    protected _formatValue(value: string): void {\n        this._input.value = value;\n    }\n\n    protected _notifyChange(_value: string): void {\n        this._eventPoster.post({\n            type: HostedInputEventType.Changed,\n            payload: {\n                fieldType: this._type,\n            },\n        });\n    }\n\n    private _configureInput(): void {\n        this._input.style.backgroundColor = 'transparent';\n        this._input.style.border = '0';\n        this._input.style.display = 'block';\n        this._input.style.height = '100%';\n        this._input.style.margin = '0';\n        this._input.style.outline = 'none';\n        this._input.style.padding = '0';\n        this._input.style.width = '100%';\n        this._input.id = kebabCase(this._type);\n        this._input.placeholder = this._placeholder;\n        this._input.autocomplete = this._autocomplete;\n\n        this._input.setAttribute('aria-label', this._accessibilityLabel);\n\n        this._applyStyles(this._styles.default);\n\n        switch (this._input.id) {\n            case 'card-code':\n            case 'card-expiry':\n            case 'card-number':\n                this._input.type = 'text';\n                this._input.inputMode = 'numeric';\n                this._input.pattern = '[0-9]*';\n                break;\n\n            case 'card-name':\n            case 'note':\n            case 'hidden':\n                this._input.type = 'text';\n                this._input.inputMode = 'text';\n                break;\n        }\n    }\n\n    private _applyStyles(styles: HostedInputStyles = {}): void {\n        const allowedStyles: {\n            [key in keyof Required<HostedInputStyles>]: HostedInputStyles[key];\n        } = {\n            color: styles.color,\n            fontFamily: styles.fontFamily,\n            fontSize: styles.fontSize,\n            fontWeight: styles.fontWeight,\n        };\n        const styleKeys = Object.keys(allowedStyles) as Array<keyof HostedInputStyles>;\n\n        styleKeys.forEach((key) => {\n            if (!allowedStyles[key]) {\n                return;\n            }\n\n            this._input.style[key] = allowedStyles[key] || '';\n        });\n    }\n\n    private _loadFonts(): void {\n        if (this._fontLinks) {\n            return;\n        }\n\n        this._fontLinks = this._fontUrls\n            .filter((url) => parseUrl(url).hostname === 'fonts.googleapis.com')\n            .filter((url) => !document.querySelector(`link[href='${url}'][rel='stylesheet']`))\n            .map((url) => {\n                const link = document.createElement('link');\n\n                link.rel = 'stylesheet';\n                link.href = url;\n\n                document.head.appendChild(link);\n\n                return link;\n            });\n    }\n\n    private _unloadFonts(): void {\n        if (!this._fontLinks) {\n            return;\n        }\n\n        this._fontLinks.forEach((link) => {\n            if (!link.parentElement) {\n                return;\n            }\n\n            link.parentElement.removeChild(link);\n        });\n\n        this._fontLinks = undefined;\n    }\n\n    private async _validateForm(): Promise<void> {\n        const values = this._inputAggregator.getInputValues();\n        const results = await this._inputValidator.validate(values);\n\n        if (results.isValid) {\n            this._applyStyles(this._styles.default);\n        } else {\n            this._applyStyles(this._styles.error);\n        }\n\n        this._eventPoster.post({\n            type: HostedInputEventType.Validated,\n            payload: results,\n        });\n    }\n\n    private _processChange(value: string): void {\n        if (value === this._previousValue) {\n            return;\n        }\n\n        this._isTouched = true;\n\n        this._formatValue(value);\n        this._validateForm();\n        this._notifyChange(value);\n\n        this._previousValue = value;\n    }\n\n    private _handleInput: (event: Event) => void = (event) => {\n        const input = event.target as HTMLInputElement;\n\n        this._processChange(input.value);\n    };\n\n    private _handleBlur: (event: Event) => void = () => {\n        this._applyStyles(this._styles.default);\n        this._validateForm();\n\n        this._eventPoster.post({\n            type: HostedInputEventType.Blurred,\n            payload: {\n                fieldType: this._type,\n            },\n        });\n    };\n\n    private _handleFocus: (event: Event) => void = () => {\n        this._applyStyles(this._styles.focus);\n\n        this._eventPoster.post({\n            type: HostedInputEventType.Focused,\n            payload: {\n                fieldType: this._type,\n            },\n        });\n    };\n\n    private _handleValidate: (event: HostedFieldValidateRequestEvent) => void = () => {\n        this._validateForm();\n    };\n\n    private _handleSubmit: (event: Event) => void = (event) => {\n        event.preventDefault();\n\n        this._eventPoster.post({\n            type: HostedInputEventType.Entered,\n            payload: {\n                fieldType: this._type,\n            },\n        });\n    };\n\n    private _forceFocusToInput = (): void => {\n        if (document.activeElement === document.body) {\n            const browserName = navigator.userAgent.toLowerCase();\n\n            if (browserName.indexOf('safari') > -1) {\n                if (this._input.value === '') {\n                    this._input.setAttribute('value', ' ');\n                    this._input.setSelectionRange(0, 1);\n                    this._input.setAttribute('value', '');\n                }\n            } else {\n                this._input.focus();\n            }\n        }\n    };\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/index.ts",
    "content": "export * from './hosted-input-events';\n\nexport { default as initializeHostedInput } from './initialize-hosted-input';\nexport { default as notifyInitializeError } from './notify-initialize-error';\nexport { default as CardExpiryFormatter } from './card-expiry-formatter';\nexport { default as CardNumberFormatter } from './card-number-formatter';\nexport { default as HostedInputStyles } from './hosted-input-styles';\nexport { default as HostedInputValues } from './hosted-input-values';\nexport {\n    default as HostedInputValidateErrorData,\n    HostedInputValidateErrorDataMap,\n} from './hosted-input-validate-error-data';\nexport { default as HostedInputValidateResults } from './hosted-input-validate-results';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/initialize-hosted-input.ts",
    "content": "import { IframeEventListener } from '../common/iframe';\nimport { HostedFieldEventMap } from '../hosted-field-events';\n\nimport getHostedInputStorage from './get-hosted-input-storage';\nimport HostedInput from './hosted-input';\nimport HostedInputFactory from './hosted-input-factory';\nimport HostedInputInitializer from './hosted-input-initializer';\nimport HostedInputOptions from './hosted-input-options';\n\nexport default function initializeHostedInput(options: HostedInputOptions): Promise<HostedInput> {\n    const { containerId, nonce, parentOrigin, paymentOrigin } = options;\n    const initializer = new HostedInputInitializer(\n        new HostedInputFactory(parentOrigin, paymentOrigin),\n        getHostedInputStorage(),\n        new IframeEventListener<HostedFieldEventMap>(parentOrigin),\n    );\n\n    return initializer.initialize(containerId, nonce);\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/map-to-accessibility-label.spec.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nimport mapToAccessibilityLabel from './map-to-accessibility-label';\n\ndescribe('mapToAccessibilityLabel()', () => {\n    it('returns label for card code input', () => {\n        expect(mapToAccessibilityLabel(HostedFieldType.CardCode)).toBe('CVC');\n    });\n\n    it('returns label for card expiry input', () => {\n        expect(mapToAccessibilityLabel(HostedFieldType.CardExpiry)).toBe('Expiration');\n    });\n\n    it('returns label for card name input', () => {\n        expect(mapToAccessibilityLabel(HostedFieldType.CardName)).toBe('Name on card');\n    });\n\n    it('returns label for card number input', () => {\n        expect(mapToAccessibilityLabel(HostedFieldType.CardNumber)).toBe('Credit card number');\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/map-to-accessibility-label.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nexport default function mapToAccessibilityLabel(type: HostedFieldType): string {\n    switch (type) {\n        case HostedFieldType.CardCode:\n            return 'CVC';\n\n        case HostedFieldType.CardExpiry:\n            return 'Expiration';\n\n        case HostedFieldType.CardName:\n            return 'Name on card';\n\n        case HostedFieldType.CardNumber:\n            return 'Credit card number';\n\n        case HostedFieldType.Note:\n            return 'Payment note';\n\n        case HostedFieldType.Hidden:\n            return 'Hidden field';\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/map-to-autocomplete-type.spec.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nimport mapToAutocompleteType from './map-to-autocomplete-type';\n\ndescribe('mapToAutocompleteType()', () => {\n    it('returns autocomplete type for card code input', () => {\n        expect(mapToAutocompleteType(HostedFieldType.CardCode)).toBe('cc-csc');\n    });\n\n    it('returns autocomplete type for card expiry input', () => {\n        expect(mapToAutocompleteType(HostedFieldType.CardExpiry)).toBe('cc-exp');\n    });\n\n    it('returns autocomplete type for card name input', () => {\n        expect(mapToAutocompleteType(HostedFieldType.CardName)).toBe('cc-name');\n    });\n\n    it('returns autocomplete type for card number input', () => {\n        expect(mapToAutocompleteType(HostedFieldType.CardNumber)).toBe('cc-number');\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/map-to-autocomplete-type.ts",
    "content": "import HostedFieldType from '../hosted-field-type';\n\nexport default function mapToAutocompleteType(type: HostedFieldType): string {\n    switch (type) {\n        case HostedFieldType.CardCode:\n            return 'cc-csc';\n\n        case HostedFieldType.CardExpiry:\n            return 'cc-exp';\n\n        case HostedFieldType.CardName:\n            return 'cc-name';\n\n        case HostedFieldType.CardNumber:\n            return 'cc-number';\n\n        default:\n            return '';\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/iframe-content/notify-initialize-error.ts",
    "content": "import { IframeEventPoster } from '../common/iframe';\n\nimport { HostedInputAttachErrorEvent, HostedInputEventType } from './hosted-input-events';\nimport HostedInputInitializeErrorData from './hosted-input-initialize-error-data';\n\nconst poster = new IframeEventPoster<HostedInputAttachErrorEvent>('*', window.parent);\n\nexport default function notifyInitializeError(error: HostedInputInitializeErrorData): void {\n    poster.post({\n        type: HostedInputEventType.AttachFailed,\n        payload: { error },\n    });\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/index.ts",
    "content": "export { initializeHostedInput, notifyInitializeError } from './iframe-content';\nexport { createHostedFormService } from './create-hosted-form-service';\nexport { default as HostedFieldType } from './hosted-field-type';\nexport { default as HostedFormOptions } from './hosted-form-options';\nexport { default as HostedFormService } from './hosted-form-service';\nexport { default as HostedFormFactory } from './hosted-form-factory';\nexport { HostedFormInterface } from './hosted-form';\nexport { default as HostedForm } from './hosted-form';\nexport { default as HostedFormOrderData } from './hosted-form-order-data';\nexport { default as createStoredCardHostedFormService } from './create-hosted-form-stored-card-service';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/payment/Instrument.ts",
    "content": "export enum InstrumentType {\n    Card = 'card',\n    ManualPayment = 'manual_payment',\n}\n\nexport const manualPaymentMethod = 'bigcommerce.manual_payment';\n\nexport enum OfflinePaymentMethods {\n    BankDeposit = 'bigcommerce_offline.bank_deposit',\n    Cheque = 'bigcommerce_offline.cheque',\n    Cod = 'bigcommerce_offline.cod',\n    InStore = 'bigcommerce_offline.in_store',\n    MoneyOrder = 'bigcommerce_offline.money_order',\n}\n\nexport enum OfflinePaymentMethodTypes {\n    BankDeposit = 'bank_deposit',\n    Cheque = 'cheque',\n    Cod = 'cod',\n    InStore = 'in_store',\n    MoneyOrder = 'money_order',\n}\n\nexport const offlinePaymentMethodTypeMap: Record<OfflinePaymentMethods, OfflinePaymentMethodTypes> =\n    {\n        [OfflinePaymentMethods.BankDeposit]: OfflinePaymentMethodTypes.BankDeposit,\n        [OfflinePaymentMethods.Cheque]: OfflinePaymentMethodTypes.Cheque,\n        [OfflinePaymentMethods.Cod]: OfflinePaymentMethodTypes.Cod,\n        [OfflinePaymentMethods.InStore]: OfflinePaymentMethodTypes.InStore,\n        [OfflinePaymentMethods.MoneyOrder]: OfflinePaymentMethodTypes.MoneyOrder,\n    };\n\ninterface CardInstrument {\n    type: InstrumentType.Card;\n    name: string;\n    number: string;\n    expires: {\n        month: number;\n        year: number;\n    };\n    verification_value?: string;\n}\n\ninterface ManualPaymentInstrument {\n    type: InstrumentType.ManualPayment;\n    note: string;\n}\n\ninterface OfflinePaymentInstrument {\n    type: OfflinePaymentMethodTypes;\n}\n\nexport type Instrument = CardInstrument | ManualPaymentInstrument | OfflinePaymentInstrument;\n"
  },
  {
    "path": "packages/hosted-form-v2/src/payment/bigpay-client.d.ts",
    "content": "// TODO: Remove this once we've added type definitions to `@bigcommerce/bigpay-client`\ndeclare module '@bigcommerce/bigpay-client';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/payment/index.ts",
    "content": "export { ManualOrderPaymentRequestSender } from './manual-order-payment-request-sender';\nexport { OfflinePaymentMethods, OfflinePaymentMethodTypes } from './Instrument';\nexport { default as StorefrontStoredCardRequestSender } from './storefront-stored-card-request-sender';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/payment/manual-order-payment-request-sender.spec.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport ContentType from '../common/http-request/content-type';\nimport HostedFormManualOrderData from '../hosted-form-manual-order-data';\nimport { HostedInputValues } from '../iframe-content';\n\nimport {\n    InstrumentType,\n    manualPaymentMethod,\n    OfflinePaymentMethods,\n    OfflinePaymentMethodTypes,\n} from './Instrument';\nimport { ManualOrderPaymentRequestSender } from './manual-order-payment-request-sender';\n\ndescribe('ManualOrderPaymentRequestSender', () => {\n    let requestSender: RequestSender;\n    let paymentOrigin: string;\n    let manualOrderPaymentRequestSender: ManualOrderPaymentRequestSender;\n    let requestInitializationData: HostedFormManualOrderData;\n    let instrumentFormData: HostedInputValues;\n    let response: Response<unknown>;\n\n    const pstToken = 'PST token';\n    const testingManualPaymentNote = 'payment note';\n\n    beforeEach(() => {\n        requestSender = { post: jest.fn() } as unknown as RequestSender;\n        paymentOrigin = 'https://example.com';\n        manualOrderPaymentRequestSender = new ManualOrderPaymentRequestSender(\n            requestSender,\n            paymentOrigin,\n        );\n        requestInitializationData = {\n            paymentMethodId: manualPaymentMethod,\n            paymentSessionToken: pstToken,\n        } as HostedFormManualOrderData;\n        response = { body: {} } as Response<unknown>;\n    });\n\n    it('submits manual payment', async () => {\n        (requestSender.post as jest.Mock).mockResolvedValue(response);\n\n        instrumentFormData = {\n            note: testingManualPaymentNote,\n        } as HostedInputValues;\n\n        const result = await manualOrderPaymentRequestSender.submitPayment(\n            requestInitializationData,\n            instrumentFormData,\n        );\n\n        expect(result).toBe(response);\n        expect(requestSender.post).toHaveBeenCalledWith(\n            `${paymentOrigin}/payments`,\n            expect.objectContaining({\n                headers: {\n                    Accept: ContentType.Json,\n                    'Content-Type': ContentType.Json,\n                    'X-Payment-Session-Token': pstToken,\n                },\n                body: {\n                    instrument: {\n                        type: InstrumentType.ManualPayment,\n                        note: testingManualPaymentNote,\n                    },\n                    payment_method_id: manualPaymentMethod,\n                    form_nonce: undefined,\n                },\n            }),\n        );\n    });\n\n    it('submits card payment', async () => {\n        (requestSender.post as jest.Mock).mockResolvedValue(response);\n\n        requestInitializationData.paymentMethodId = 'card';\n        instrumentFormData = {\n            cardName: 'John Doe',\n            cardNumber: '4111 1111 1111 1111',\n            cardExpiry: '12/23',\n            cardCode: '123',\n        } as HostedInputValues;\n\n        const result = await manualOrderPaymentRequestSender.submitPayment(\n            requestInitializationData,\n            instrumentFormData,\n        );\n\n        expect(result).toBe(response);\n        expect(requestSender.post).toHaveBeenCalledWith(\n            `${paymentOrigin}/payments`,\n            expect.objectContaining({\n                headers: {\n                    Accept: ContentType.Json,\n                    'Content-Type': ContentType.Json,\n                    'X-Payment-Session-Token': pstToken,\n                },\n                body: {\n                    instrument: {\n                        type: InstrumentType.Card,\n                        name: 'John Doe',\n                        number: '4111111111111111',\n                        expires: {\n                            month: 12,\n                            year: 2023,\n                        },\n                        verification_value: '123',\n                    },\n                    payment_method_id: 'card',\n                    form_nonce: undefined,\n                },\n            }),\n        );\n    });\n\n    it('submits offline payment', async () => {\n        response = {\n            type: 'continue',\n            code: 'complete_offline',\n            parameters: {},\n        } as unknown as Response<unknown>;\n\n        requestInitializationData.paymentMethodId = OfflinePaymentMethods.BankDeposit;\n        (requestSender.post as jest.Mock).mockResolvedValue(response);\n\n        const result = await manualOrderPaymentRequestSender.submitPayment(\n            requestInitializationData,\n            instrumentFormData,\n        );\n\n        expect(result).toBe(response);\n        expect(requestSender.post).toHaveBeenCalledWith(\n            `${paymentOrigin}/payments`,\n            expect.objectContaining({\n                headers: {\n                    Accept: ContentType.Json,\n                    'Content-Type': ContentType.Json,\n                    'X-Payment-Session-Token': pstToken,\n                },\n                body: {\n                    instrument: {\n                        type: OfflinePaymentMethodTypes.BankDeposit,\n                    },\n                    payment_method_id: OfflinePaymentMethods.BankDeposit,\n                    form_nonce: undefined,\n                },\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/payment/manual-order-payment-request-sender.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport ContentType from '../common/http-request/content-type';\nimport HostedFormManualOrderData from '../hosted-form-manual-order-data';\nimport { HostedInputValues } from '../iframe-content';\nimport { isOfflinePaymentMethodId } from '../utils';\n\nimport {\n    Instrument,\n    InstrumentType,\n    manualPaymentMethod,\n    offlinePaymentMethodTypeMap,\n} from './Instrument';\n\nexport class ManualOrderPaymentRequestSender {\n    constructor(private _requestSender: RequestSender, private _paymentOrigin: string) {}\n\n    async submitPayment(\n        requestInitializationData: HostedFormManualOrderData,\n        instrumentFormData: HostedInputValues,\n        nonce?: string,\n    ): Promise<Response<unknown>> {\n        const { paymentMethodId, paymentSessionToken } = requestInitializationData;\n\n        let instrument: Instrument;\n\n        if (paymentMethodId === manualPaymentMethod) {\n            instrument = {\n                type: InstrumentType.ManualPayment,\n                note: instrumentFormData.note ?? '',\n            };\n        } else if (isOfflinePaymentMethodId(paymentMethodId)) {\n            instrument = {\n                type: offlinePaymentMethodTypeMap[paymentMethodId],\n            };\n        } else {\n            const [expiryMonth, expiryYear] = instrumentFormData.cardExpiry\n                ? instrumentFormData.cardExpiry.split('/')\n                : [];\n\n            instrument = {\n                type: InstrumentType.Card,\n                name: instrumentFormData.cardName ?? '',\n                number: instrumentFormData.cardNumber\n                    ? instrumentFormData.cardNumber.replace(/ /g, '')\n                    : '',\n                expires: {\n                    month: Number(expiryMonth.trim()),\n                    year: Number(`20${expiryYear.trim()}`),\n                },\n                verification_value: instrumentFormData.cardCode ?? undefined,\n            };\n        }\n\n        const options = {\n            headers: {\n                Accept: ContentType.Json,\n                'Content-Type': ContentType.Json,\n                'X-Payment-Session-Token': paymentSessionToken,\n            },\n            body: {\n                instrument,\n                payment_method_id: paymentMethodId,\n                form_nonce: nonce ?? undefined,\n            },\n        };\n\n        return this._requestSender.post<unknown>(`${this._paymentOrigin}/payments`, options);\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/payment/storefront-stored-card-request-sender.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    StoredCardHostedFormDataMock,\n    StoredCardHostedFormInstrumentFormAPIMock,\n    StoredCardHostedFormInstrumentFormMock,\n} from '../stored-card-hosted-form.mock';\n\nimport StorefrontStoredCardRequestSender from './storefront-stored-card-request-sender';\n\ndescribe('StorefrontStoredCardRequestSender', () => {\n    let requestSender: RequestSender;\n    let storefrontStoredCardRequestSender: StorefrontStoredCardRequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        storefrontStoredCardRequestSender = new StorefrontStoredCardRequestSender(requestSender);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'post').mockResolvedValue(undefined);\n    });\n\n    describe('#submitPaymentMethod', () => {\n        const headers = {\n            Authorization: StoredCardHostedFormDataMock.vaultToken,\n            Accept: 'application/vnd.bc.v1+json',\n            'Content-Type': 'application/vnd.bc.v1+json',\n        };\n\n        it('saves payment method', async () => {\n            await storefrontStoredCardRequestSender.submitPaymentInstrument(\n                StoredCardHostedFormDataMock,\n                StoredCardHostedFormInstrumentFormMock,\n            );\n\n            const { instrument, billingAddress } = StoredCardHostedFormInstrumentFormAPIMock;\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                `${StoredCardHostedFormDataMock.paymentsUrl}/stores/${StoredCardHostedFormDataMock.storeHash}/customers/${StoredCardHostedFormDataMock.shopperId}/stored_instruments`,\n                {\n                    body: JSON.stringify({\n                        instrument,\n                        billing_address: billingAddress,\n                        provider_id: StoredCardHostedFormDataMock.providerId,\n                        default_instrument:\n                            StoredCardHostedFormInstrumentFormAPIMock.default_Instrument,\n                        currency_code: StoredCardHostedFormDataMock.currencyCode,\n                    }),\n                    headers,\n                },\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/payment/storefront-stored-card-request-sender.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    StoredCardHostedFormData,\n    StoredCardHostedFormInstrumentForm,\n} from '../stored-card-hosted-form-type';\n\nexport default class StorefrontStoredCardRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    async submitPaymentInstrument(\n        requestInitializationData: StoredCardHostedFormData,\n        storeInstrumentFormData: StoredCardHostedFormInstrumentForm,\n    ): Promise<void> {\n        const { providerId, currencyCode, paymentsUrl, shopperId, storeHash, vaultToken } =\n            requestInitializationData;\n\n        const { billingAddress, instrument, defaultInstrument } = storeInstrumentFormData;\n        const url = `${paymentsUrl}/stores/${storeHash}/customers/${shopperId}/stored_instruments`;\n        const options = {\n            headers: {\n                Authorization: vaultToken,\n                Accept: 'application/vnd.bc.v1+json',\n                'Content-Type': 'application/vnd.bc.v1+json',\n            },\n            body: JSON.stringify({\n                instrument: {\n                    type: instrument.type,\n                    cardholder_name: instrument.cardholderName,\n                    number: instrument.number,\n                    expiry_month: instrument.expiryMonth,\n                    expiry_year: instrument.expiryYear,\n                    verification_value: instrument.verificationValue,\n                },\n                billing_address: {\n                    email: billingAddress.email,\n                    address1: billingAddress.address1,\n                    ...(billingAddress.address2 && { address2: billingAddress.address2 }),\n                    city: billingAddress.city,\n                    postal_code: billingAddress.postalCode,\n                    country_code: billingAddress.countryCode,\n                    ...(billingAddress.company && { company: billingAddress.company }),\n                    first_name: billingAddress.firstName,\n                    last_name: billingAddress.lastName,\n                    ...(billingAddress.phone && { phone: billingAddress.phone }),\n                    ...(billingAddress.stateOrProvinceCode && {\n                        state_or_province_code: billingAddress.stateOrProvinceCode,\n                    }),\n                },\n                provider_id: providerId,\n                default_instrument: defaultInstrument,\n                currency_code: currencyCode,\n            }),\n        };\n\n        await this._requestSender.post<void>(url, options);\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/stored-card-hosted-form-service.spec.ts",
    "content": "import LegacyHostedFormOptions from './hosted-form-options';\nimport StoredCardHostedFormService from './stored-card-hosted-form-service';\nimport {\n    StoredCardHostedFormDataMock,\n    StoredCardHostedFormInstrumentFieldsMock,\n} from './stored-card-hosted-form.mock';\n\nimport { HostedForm, HostedFormFactory } from '.';\n\ndescribe('StoredCardHostedFormService', () => {\n    let formFactory: HostedFormFactory;\n    let service: StoredCardHostedFormService;\n    let initializeOptions: LegacyHostedFormOptions;\n\n    beforeEach(() => {\n        formFactory = new HostedFormFactory();\n\n        service = new StoredCardHostedFormService('https://bigpay.integration.zone', formFactory);\n    });\n\n    describe('when hosted form is enabled', () => {\n        let form: Pick<HostedForm, 'attach' | 'submit' | 'validate' | 'submitStoredCard'>;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                submit: jest.fn(() => Promise.resolve()),\n                validate: jest.fn(() => Promise.resolve()),\n                submitStoredCard: jest.fn(() => Promise.resolve()),\n            };\n            initializeOptions = {\n                fields: {\n                    cardCode: {\n                        containerId: 'cardCode',\n                    },\n                    cardExpiry: {\n                        containerId: 'cardExpiry',\n                    },\n                    cardNumber: {\n                        containerId: 'cardNumber',\n                    },\n                    cardName: {\n                        containerId: 'cardName',\n                    },\n                },\n            };\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(formFactory, 'create').mockReturnValue(form);\n        });\n\n        it('creates hosted form', async () => {\n            await service.initialize(initializeOptions);\n\n            expect(formFactory.create).toHaveBeenCalledWith(\n                'https://bigpay.integration.zone',\n                initializeOptions,\n            );\n        });\n\n        it('attaches hosted form to container', async () => {\n            await service.initialize(initializeOptions);\n\n            expect(form.attach).toHaveBeenCalled();\n        });\n\n        it('submits payment data with hosted form', async () => {\n            await service.initialize(initializeOptions);\n            await service.submitStoredCard(\n                StoredCardHostedFormInstrumentFieldsMock,\n                StoredCardHostedFormDataMock,\n            );\n\n            expect(form.submitStoredCard).toHaveBeenCalledWith({\n                fields: StoredCardHostedFormInstrumentFieldsMock,\n                data: StoredCardHostedFormDataMock,\n            });\n        });\n\n        it('validates user input before submitting data', async () => {\n            await service.initialize(initializeOptions);\n            await service.submitStoredCard(\n                StoredCardHostedFormInstrumentFieldsMock,\n                StoredCardHostedFormDataMock,\n            );\n\n            expect(form.validate).toHaveBeenCalled();\n        });\n\n        it('does not submit payment data with hosted form if validation fails', async () => {\n            jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n            try {\n                await service.initialize(initializeOptions);\n                await service.submitStoredCard(\n                    StoredCardHostedFormInstrumentFieldsMock,\n                    StoredCardHostedFormDataMock,\n                );\n            } catch (error) {\n                expect(form.submit).not.toHaveBeenCalled();\n            }\n        });\n    });\n\n    describe('when hosted form is enabled but hosted fields are not present for rendering', () => {\n        let form: Pick<HostedForm, 'attach' | 'submit' | 'validate' | 'submitStoredCard'>;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n                // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n                // @ts-ignore\n                submit: jest.fn(() => Promise.resolve()),\n                validate: jest.fn(() => Promise.resolve()),\n                submitStoredCard: jest.fn(() => Promise.resolve()),\n            };\n            initializeOptions = {\n                fields: {},\n            };\n\n            // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            jest.spyOn(formFactory, 'create').mockReturnValue(form);\n        });\n\n        it('does not submit with hosted form', async () => {\n            await service.initialize(initializeOptions);\n            await service.submitStoredCard(\n                StoredCardHostedFormInstrumentFieldsMock,\n                StoredCardHostedFormDataMock,\n            );\n\n            expect(form.submit).not.toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/hosted-form-v2/src/stored-card-hosted-form-service.ts",
    "content": "import { NotInitializedError, NotInitializedErrorType } from './common/errors';\nimport HostedForm from './hosted-form';\nimport HostedFormFactory from './hosted-form-factory';\nimport LegacyHostedFormOptions from './hosted-form-options';\nimport {\n    StoredCardHostedFormData,\n    StoredCardHostedFormInstrumentFields,\n} from './stored-card-hosted-form-type';\n\nexport default class StoredCardHostedFormService {\n    protected _hostedForm?: HostedForm;\n    constructor(protected _host: string, protected _hostedFormFactory: HostedFormFactory) {}\n\n    async submitStoredCard(\n        fields: StoredCardHostedFormInstrumentFields,\n        data: StoredCardHostedFormData,\n    ): Promise<void> {\n        const form = this._hostedForm;\n\n        if (!form) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        await form.validate().then(() => form.submitStoredCard({ fields, data }));\n    }\n\n    initialize(options: LegacyHostedFormOptions): Promise<void> {\n        const form = this._hostedFormFactory.create(this._host, options);\n\n        return form.attach().then(() => {\n            this._hostedForm = form;\n        });\n    }\n\n    deinitialize() {\n        if (this._hostedForm) {\n            this._hostedForm.detach();\n        }\n    }\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/stored-card-hosted-form-type.ts",
    "content": "export interface StoredCardHostedFormData {\n    currencyCode: string;\n    paymentsUrl: string;\n    providerId: string;\n    shopperId: string;\n    storeHash: string;\n    vaultToken: string;\n}\n\nexport interface StoredCardHostedFormPaymentInstrument {\n    type: string;\n    cardholderName: string;\n    number: string;\n    expiryMonth: number;\n    expiryYear: number;\n    verificationValue: string;\n}\n\nexport interface StoredCardHostedFormBillingAddress {\n    address1: string;\n    address2?: string;\n    city: string;\n    postalCode: string;\n    countryCode: string;\n    company?: string;\n    firstName: string;\n    lastName: string;\n    email: string;\n    phone?: string;\n    stateOrProvinceCode?: string;\n}\n\nexport interface StoredCardHostedFormInstrumentForm {\n    billingAddress: StoredCardHostedFormBillingAddress;\n    instrument: StoredCardHostedFormPaymentInstrument;\n    defaultInstrument: boolean;\n}\n\nexport interface StoredCardHostedFormInstrumentFields extends StoredCardHostedFormBillingAddress {\n    defaultInstrument: boolean;\n}\n\nexport interface StoredCardHostedFormPayload {\n    fields: StoredCardHostedFormInstrumentFields;\n    data: StoredCardHostedFormData;\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/src/stored-card-hosted-form.mock.ts",
    "content": "const StoredCardHostedFormDataMock = {\n    currencyCode: 'USD',\n    paymentsUrl: 'https//test.com',\n    providerId: 'bluesnapdirect',\n    shopperId: '12345',\n    storeHash: '12345',\n    vaultToken: 'token124',\n};\n\nconst StoredCardHostedFormBillingAddressAPIMock = {\n    email: 'string@mail.com',\n    address1: '57 Balsham Road',\n    city: 'Harthill',\n    postal_code: 'S31 6EN',\n    country_code: 'NL',\n    company: 'String',\n    first_name: 'John',\n    last_name: 'Smith',\n    phone: '123456789',\n    state_or_province_code: 'BEL',\n};\n\nconst StoredCardHostedFormBillingAddressMock = {\n    address1: '57 Balsham Road',\n    address2: '',\n    city: 'Harthill',\n    postalCode: 'S31 6EN',\n    countryCode: 'NL',\n    company: 'String',\n    firstName: 'John',\n    lastName: 'Smith',\n    email: 'string@mail.com',\n    phone: '123456789',\n    stateOrProvinceCode: 'BEL',\n};\n\nconst StoredCardHostedFormPaymentInstrumentAPIMock = {\n    type: 'card',\n    cardholder_name: 'John Smith',\n    number: '4111111111111111',\n    expiry_month: 3,\n    expiry_year: 2030,\n    verification_value: '777',\n};\n\nconst StoredCardHostedFormPaymentInstrumentMock = {\n    type: 'card',\n    cardholderName: 'John Smith',\n    number: '4111111111111111',\n    expiryMonth: 3,\n    expiryYear: 2030,\n    verificationValue: '777',\n};\n\nconst StoredCardHostedFormInstrumentFormMock = {\n    billingAddress: StoredCardHostedFormBillingAddressMock,\n    instrument: StoredCardHostedFormPaymentInstrumentMock,\n    defaultInstrument: true,\n};\n\nconst StoredCardHostedFormInstrumentFormAPIMock = {\n    billingAddress: StoredCardHostedFormBillingAddressAPIMock,\n    instrument: StoredCardHostedFormPaymentInstrumentAPIMock,\n    default_Instrument: true,\n};\nconst StoredCardHostedFormInstrumentFieldsMock = {\n    ...StoredCardHostedFormBillingAddressMock,\n    defaultInstrument: true,\n};\n\nexport {\n    StoredCardHostedFormDataMock,\n    StoredCardHostedFormBillingAddressMock,\n    StoredCardHostedFormPaymentInstrumentMock,\n    StoredCardHostedFormInstrumentFormMock,\n    StoredCardHostedFormInstrumentFieldsMock,\n    StoredCardHostedFormInstrumentFormAPIMock,\n};\n"
  },
  {
    "path": "packages/hosted-form-v2/src/utils/index.ts",
    "content": "export { isOfflinePaymentMethodId } from './isOfflinePaymentMethodId';\n"
  },
  {
    "path": "packages/hosted-form-v2/src/utils/isOfflinePaymentMethodId.ts",
    "content": "import { OfflinePaymentMethods } from '../payment';\n\nexport const isOfflinePaymentMethodId = (id: string): id is OfflinePaymentMethods => {\n    return Object.values(OfflinePaymentMethods).includes(id as OfflinePaymentMethods);\n};\n"
  },
  {
    "path": "packages/hosted-form-v2/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"include\": [\n        \"src/common/types/card-validator.d.ts\",\n        \"src/**/*.ts\",\n    ],\n    \"files\": [\n        \"src/common/types/card-validator.d.ts\",\n        \"src/common/types/webpack.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/hosted-form-v2/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.spec.jsx\"\n    ]\n}\n"
  },
  {
    "path": "packages/humm-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/humm-integration/README.md",
    "content": "# humm-integration\n\nThis package contains the integration layer for the [Humm](https://www.shophumm.com/) provider.\n\n# Humm\n\nFor additional information on Humm, please refer to [Humm documentation](https://docs.shophumm.com.au/).\n\n## Running unit tests\n\nRun `nx test humm-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint humm-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/humm-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'humm-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/humm-integration',\n};\n"
  },
  {
    "path": "packages/humm-integration/project.json",
    "content": "{\n    \"name\": \"humm-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/humm-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/humm-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/humm-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/humm-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/humm-integration/src/create-humm-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createHummPaymentStrategy from './create-humm-payment-strategy';\nimport HummPaymentStrategy from './humm-payment-strategy';\n\ndescribe('createHummPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates Humm payment strategy', () => {\n        const strategy = createHummPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(HummPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/humm-integration/src/create-humm-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport HummPaymentStrategy from './humm-payment-strategy';\n\nconst createHummPaymentStrategy: PaymentStrategyFactory<HummPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new HummPaymentStrategy(paymentIntegrationService, createFormPoster());\n};\n\nexport default toResolvableModule(createHummPaymentStrategy, [{ id: 'humm' }]);\n"
  },
  {
    "path": "packages/humm-integration/src/humm-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getHumm(): PaymentMethod {\n    return {\n        id: 'humm',\n        logoUrl: '',\n        method: 'humm',\n        supportedCards: [],\n        config: {\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n    };\n}\n"
  },
  {
    "path": "packages/humm-integration/src/humm-payment-strategy.spec.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { merge } from 'lodash';\n\nimport {\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentExecuteError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getErrorPaymentResponseBody,\n    getOrderRequestBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getHumm } from './humm-payment-method.mock';\nimport HummPaymentStrategy from './humm-payment-strategy';\n\ndescribe('HummPaymentStrategy', () => {\n    let payload: OrderRequestBody;\n    let paymentMethod: PaymentMethod;\n    let strategy: HummPaymentStrategy;\n    let formPoster: FormPoster;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        paymentMethod = getHumm();\n        payload = merge({}, getOrderRequestBody(), {\n            payment: {\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            },\n        });\n\n        formPoster = {\n            postForm: jest.fn(),\n        } as unknown as FormPoster;\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            {\n                ...getHumm(),\n                initializationData: { processable: true },\n            },\n        );\n\n        strategy = new HummPaymentStrategy(paymentIntegrationService, formPoster);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#execute()', () => {\n        it('throws error when undefined payment is provided', async () => {\n            payload = { payment: undefined };\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentArgumentInvalidError);\n        });\n\n        it('redirect to Humm', async () => {\n            const postFormMock = jest.fn((_url, _options, resolveFn) => {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n                resolveFn();\n            });\n\n            jest.spyOn(formPoster, 'postForm').mockImplementation(postFormMock);\n\n            const data = JSON.stringify({ data: 'data' });\n            const error = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    provider_data: data,\n                    additional_action_required: {\n                        type: 'offsite_redirect',\n                        data: {\n                            redirect_url: 'https://sandbox-payment.humm.com',\n                        },\n                    },\n                    status: 'additional_action_required',\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(error);\n\n            await strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(postFormMock).toHaveBeenCalledWith(\n                'https://sandbox-payment.humm.com',\n                {\n                    data: 'data',\n                },\n                expect.any(Function),\n            );\n        });\n\n        it('throws PaymentExecuteError when not processable', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getHumm(),\n                initializationData: { processable: false },\n            });\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentExecuteError);\n        });\n\n        it('reject payment when error is different to additional_action_required', async () => {\n            const error = new RequestError(getResponse(getErrorPaymentResponseBody()));\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(error);\n\n            await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(error);\n        });\n    });\n\n    describe('#initialize()', () => {\n        it('deinitializes strategy', async () => {\n            await expect(strategy.initialize()).resolves.not.toThrow();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            await expect(strategy.deinitialize()).resolves.not.toThrow();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/humm-integration/src/humm-payment-strategy.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentExecuteError,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { HummInitializationData, OffsiteRedirectResponse } from './humm';\n\nexport default class HummPaymentStrategy implements PaymentStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private formPoster: FormPoster,\n    ) {}\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n\n        if (!payment?.methodId) {\n            throw new PaymentArgumentInvalidError(['payment.methodId']);\n        }\n\n        await this.paymentIntegrationService.loadPaymentMethod(payment.methodId, options);\n\n        const paymentMethod = this.paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow<HummInitializationData>(payment.methodId);\n\n        if (!paymentMethod.initializationData?.processable) {\n            throw new PaymentExecuteError(\n                'payment.humm_not_processable_error',\n                'hummNotProcessableError',\n            );\n        }\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n\n        try {\n            await this.paymentIntegrationService.submitPayment({\n                methodId: payment.methodId,\n            });\n        } catch (error) {\n            if (this.isOffsiteRedirectResponse(error)) {\n                return this.handleOffsiteRedirectResponse(error);\n            }\n\n            return Promise.reject(error);\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    initialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private handleOffsiteRedirectResponse(response: OffsiteRedirectResponse): Promise<void> {\n        const url = response.body.additional_action_required.data.redirect_url;\n        const data = response.body.provider_data;\n\n        return new Promise((resolve) => {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            this.formPoster.postForm(url, JSON.parse(data), resolve);\n        });\n    }\n\n    private isOffsiteRedirectResponse(response: unknown): response is OffsiteRedirectResponse {\n        if (typeof response !== 'object' || response === null) {\n            return false;\n        }\n\n        const partialResponse: Partial<OffsiteRedirectResponse> = response;\n\n        if (!partialResponse.body) {\n            return false;\n        }\n\n        const partialBody: Partial<OffsiteRedirectResponse['body']> = partialResponse.body;\n\n        return (\n            partialBody.status === 'additional_action_required' &&\n            !!partialBody.additional_action_required &&\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            partialBody.additional_action_required.type === 'offsite_redirect' &&\n            typeof partialBody.provider_data === 'string'\n        );\n    }\n}\n"
  },
  {
    "path": "packages/humm-integration/src/humm.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\nexport interface OffsiteRedirectResponse {\n    body: {\n        additional_action_required: {\n            type: 'offsite_redirect';\n            data: {\n                redirect_url: string;\n            };\n        };\n        status: string;\n        provider_data: string;\n    };\n}\n\nexport interface HummInitializationData {\n    processable: boolean;\n}\n"
  },
  {
    "path": "packages/humm-integration/src/index.ts",
    "content": "export { default as createHummPaymentStrategy } from './create-humm-payment-strategy';\n"
  },
  {
    "path": "packages/humm-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true\n    }\n}\n"
  },
  {
    "path": "packages/humm-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/humm-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/klarna-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/klarna-integration/README.md",
    "content": "# klarna-integration\n\nThis package contains the integration layer for the [Klarna](https://www.klarna.com/) provider.\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test klarna-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\nRun `nx test klarna-integration --testFile=\"<FILE_NAME>\"` to execute unit tests for a single file.\n\n## Running lint\n\nRun `nx lint klarna-integration` to execute the lint via [ESLint](https://eslint.org/)."
  },
  {
    "path": "packages/klarna-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'klarna-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/klarna-integration',\n    coveragePathIgnorePatterns: ['<rootDir>/src/index.ts'],\n};\n"
  },
  {
    "path": "packages/klarna-integration/project.json",
    "content": "{\n    \"name\": \"klarna-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/klarna-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/klarna-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/klarna-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/klarna-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/index.ts",
    "content": "export { default as createKlarnaPaymentStrategy } from './klarna/create-klarna-payment-strategy';\nexport { default as createKlarnaV2PaymentStrategy } from './klarnav2/create-klarnav2-payment-strategy';\n"
  },
  {
    "path": "packages/klarna-integration/src/klarna/create-klarna-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createKlarnaPaymentStrategy from './create-klarna-payment-strategy';\nimport KlarnaPaymentStrategy from './klarna-payment-strategy';\n\ndescribe('createKlarnaPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates klarna payment strategy', () => {\n        const strategy = createKlarnaPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(KlarnaPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/klarna-integration/src/klarna/create-klarna-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport KlarnaPaymentStrategy from './klarna-payment-strategy';\nimport KlarnaScriptLoader from './klarna-script-loader';\n\nconst createKlarnaPaymentStrategy: PaymentStrategyFactory<KlarnaPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new KlarnaPaymentStrategy(\n        paymentIntegrationService,\n        new KlarnaScriptLoader(getScriptLoader()),\n    );\n};\n\nexport default toResolvableModule(createKlarnaPaymentStrategy, [{ id: 'klarna' }]);\n"
  },
  {
    "path": "packages/klarna-integration/src/klarna/klarna-credit.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\nexport default interface KlarnaCredit {\n    authorize(\n        data: KlarnaUpdateSessionParams,\n        callback: (res: KlarnaAuthorizationResponse) => void,\n    ): void;\n    init(params: KlarnaInitParams): void;\n    load(params: KlarnaLoadParams, callback: (res: KlarnaLoadResponse) => void): void;\n}\n\nexport interface KlarnaInitParams {\n    client_token: string;\n}\n\nexport interface KlarnaLoadParams {\n    container: string;\n    payment_method_category?: string;\n    payment_method_categories?: string;\n    instance_id?: string;\n    preferred_payment_method?: string;\n}\n\nexport interface KlarnaLoadResponse {\n    show_form: boolean;\n    error?: {\n        invalid_fields: string[];\n    };\n}\n\nexport interface KlarnaAuthorizationResponse {\n    authorization_token: string;\n    approved: boolean;\n    show_form: boolean;\n    error?: {\n        invalid_fields: string[];\n    };\n}\n\nexport type KlarnaUpdateSessionParams = Partial<{\n    billing_address: KlarnaAddress;\n    shipping_address: KlarnaAddress;\n}>;\n\nexport interface KlarnaAddress {\n    street_address: string;\n    street_address2?: string;\n    city: string;\n    country: string;\n    given_name: string;\n    family_name: string;\n    phone?: string;\n    postal_code: string;\n    region: string;\n    email?: string;\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/klarna/klarna-payment-initialize-options.ts",
    "content": "import { KlarnaLoadResponse } from './klarna-credit';\n\n/**\n * A set of options that are required to initialize the Klarna payment method.\n *\n * When Klarna is initialized, a widget will be inserted into the DOM. The\n * widget has a list of payment options for the customer to choose from.\n *\n * ```html\n * <!-- This is where the widget will be inserted -->\n * <div id=\"container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'klarna',\n *     klarna: {\n *         container: 'container'\n *     },\n * });\n * ```\n *\n * An additional event callback can be registered.\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'klarnav2',\n *     klarnav2: {\n *         container: 'container',\n *         onLoad(response) {\n *             console.log(response);\n *         },\n *     },\n * });\n * ```\n */\nexport default interface KlarnaPaymentInitializeOptions {\n    /**\n     * The ID of a container which the payment widget should insert into.\n     */\n    container: string;\n\n    /**\n     * A callback that gets called when the widget is loaded and ready to be\n     * interacted with.\n     *\n     * @param response - The result of the initialization. It indicates whether\n     * or not the widget is loaded successfully.\n     */\n    onLoad?(response: KlarnaLoadResponse): void;\n}\n\nexport interface WithKlarnaPaymentInitializeOptions {\n    klarna?: KlarnaPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/klarna/klarna-payment-strategy.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\nimport { merge, noop, omit } from 'lodash';\n\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n    PaymentMethodInvalidError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getKlarna } from '../klarnav2/klarnav2.mock';\n\nimport KlarnaCredit from './klarna-credit';\nimport KlarnaPaymentStrategy from './klarna-payment-strategy';\nimport KlarnaScriptLoader from './klarna-script-loader';\nimport {\n    getEUBillingAddress,\n    getEUBillingAddressWithNoPhone,\n    getKlarnaUpdateSessionParams,\n    getKlarnaUpdateSessionParamsForOC,\n    getKlarnaUpdateSessionParamsPhone,\n    getOCBillingAddress,\n} from './klarna.mock';\n\ndescribe('KlarnaPaymentStrategy', () => {\n    let klarnaCredit: KlarnaCredit;\n    let payload: OrderRequestBody;\n    let paymentMethod: PaymentMethod;\n    let scriptLoader: KlarnaScriptLoader;\n    let strategy: KlarnaPaymentStrategy;\n    let paymentMethodMock: PaymentMethod;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paymentMethodMock = { ...getKlarna(), clientToken: 'foo' };\n        scriptLoader = new KlarnaScriptLoader(createScriptLoader());\n        strategy = new KlarnaPaymentStrategy(paymentIntegrationService, scriptLoader);\n\n        klarnaCredit = {\n            authorize: jest.fn((_, callback) =>\n                callback({ approved: true, authorization_token: 'bar', show_form: false }),\n            ),\n            init: jest.fn(noop),\n\n            load: jest.fn((_, callback) => callback({ show_form: true })),\n        };\n\n        paymentMethod = getKlarna();\n\n        payload = merge({}, getOrderRequestBody(), {\n            payment: {\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            },\n            useStoreCredit: true,\n        });\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'initializePayment').mockImplementation(jest.fn());\n\n        jest.spyOn(scriptLoader, 'load').mockImplementation(() => Promise.resolve(klarnaCredit));\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n            paymentMethodMock,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'subscribe');\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        const onLoad = jest.fn();\n\n        beforeEach(async () => {\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                klarna: { container: '#container', onLoad },\n            });\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('loads script when initializing strategy', () => {\n            expect(scriptLoader.load).toHaveBeenCalledTimes(1);\n        });\n\n        it('loads payment data from API', () => {\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith('klarna');\n        });\n\n        it('loads store subscribe once', () => {\n            expect(paymentIntegrationService.subscribe).toHaveBeenCalledTimes(1);\n        });\n\n        it('loads widget', () => {\n            expect(klarnaCredit.init).toHaveBeenCalledWith({ client_token: 'foo' });\n            expect(klarnaCredit.load).toHaveBeenCalledWith(\n                { container: '#container' },\n                expect.any(Function),\n            );\n            expect(klarnaCredit.load).toHaveBeenCalledTimes(1);\n        });\n\n        it('triggers callback with response', () => {\n            expect(onLoad).toHaveBeenCalledWith({ show_form: true });\n        });\n\n        it('throws InvalidArgumentError error if options.klarna  is undefined', async () => {\n            try {\n                await strategy.initialize({\n                    methodId: paymentMethod.id,\n                    klarna: undefined,\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throw MissingDataError if paymentMethod is not existing', async () => {\n            const rejectedInitialization = jest.fn();\n\n            strategy = new KlarnaPaymentStrategy(paymentIntegrationService, scriptLoader);\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n                undefined,\n            );\n\n            await strategy\n                .initialize({\n                    methodId: paymentMethod.id,\n                    gatewayId: paymentMethod.gateway,\n                    klarna: { container: '#container', onLoad },\n                })\n                .catch(rejectedInitialization);\n\n            expect(rejectedInitialization).toHaveBeenCalledWith(\n                new MissingDataError(MissingDataErrorType.MissingPaymentMethod),\n            );\n        });\n    });\n\n    describe('#execute()', () => {\n        beforeEach(async () => {\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                klarna: { container: '#container' },\n            });\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('throws error if payment is undefined', async () => {\n            payload.payment = undefined;\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('authorizes against klarna', async () => {\n            await strategy.execute(payload);\n\n            expect(klarnaCredit.authorize).toHaveBeenCalledWith({}, expect.any(Function));\n        });\n\n        it('loads widget in EU', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n                getEUBillingAddress(),\n            );\n\n            strategy = new KlarnaPaymentStrategy(paymentIntegrationService, scriptLoader);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n                paymentMethodMock,\n            );\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                klarna: { container: '#container' },\n            });\n            await strategy.execute(payload);\n\n            expect(klarnaCredit.authorize).toHaveBeenCalledWith(\n                getKlarnaUpdateSessionParamsPhone(),\n                expect.any(Function),\n            );\n        });\n\n        it('loads widget in OC', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n                getOCBillingAddress(),\n            );\n\n            strategy = new KlarnaPaymentStrategy(paymentIntegrationService, scriptLoader);\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n                paymentMethodMock,\n            );\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                klarna: { container: '#container' },\n            });\n            await strategy.execute(payload);\n\n            expect(klarnaCredit.authorize).toHaveBeenCalledWith(\n                getKlarnaUpdateSessionParamsForOC(),\n                expect.any(Function),\n            );\n        });\n\n        it('loads widget in EU with no phone', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n                getEUBillingAddressWithNoPhone(),\n            );\n\n            strategy = new KlarnaPaymentStrategy(paymentIntegrationService, scriptLoader);\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n                paymentMethodMock,\n            );\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                klarna: { container: '#container' },\n            });\n\n            await strategy.execute(payload);\n\n            expect(klarnaCredit.authorize).toHaveBeenCalledWith(\n                getKlarnaUpdateSessionParams(),\n                expect.any(Function),\n            );\n        });\n\n        it('submits authorization token', async () => {\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.initializePayment).toHaveBeenCalledWith('klarna', {\n                authorizationToken: 'bar',\n            });\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                { ...payload, payment: omit(payload.payment, 'paymentData'), useStoreCredit: true },\n                undefined,\n            );\n        });\n\n        it('throws error if required data is not loaded', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n                undefined,\n            );\n\n            strategy = new KlarnaPaymentStrategy(paymentIntegrationService, scriptLoader);\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                klarna: { container: '#container' },\n            });\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        describe('when klarna authorization is not approved', () => {\n            beforeEach(() => {\n                klarnaCredit.authorize = jest.fn((_, callback) =>\n                    callback({ approved: false, show_form: true, authorization_token: '' }),\n                );\n            });\n\n            afterEach(() => {\n                jest.clearAllMocks();\n            });\n\n            it('rejects the payment execution with cancelled payment error', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getBillingAddress',\n                ).mockReturnValue(getEUBillingAddress());\n\n                const rejectedSpy = jest.fn();\n\n                await strategy.execute(payload).catch(rejectedSpy);\n\n                expect(rejectedSpy).toHaveBeenCalledWith(new PaymentMethodCancelledError());\n\n                expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.initializePayment).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('when klarna authorization fails', () => {\n            beforeEach(() => {\n                klarnaCredit.authorize = jest.fn((_, callback) =>\n                    callback({ approved: false, show_form: false, authorization_token: '' }),\n                );\n            });\n\n            afterEach(() => {\n                jest.clearAllMocks();\n            });\n\n            it('rejects the payment execution with invalid payment error', async () => {\n                const rejectedSpy = jest.fn();\n\n                await strategy.execute(payload).catch(rejectedSpy);\n\n                expect(rejectedSpy).toHaveBeenCalledWith(new PaymentMethodInvalidError());\n\n                expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.initializePayment).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('when klarna initialization fails', () => {\n            beforeEach(() => {\n                scriptLoader.load = jest.fn().mockResolvedValue(undefined);\n            });\n\n            afterEach(() => {\n                jest.clearAllMocks();\n            });\n\n            it('rejects the payment execution with NotInitializedError error', async () => {\n                const rejectedInitialization = jest.fn();\n                const rejectedExecute = jest.fn();\n                const onLoad = jest.fn();\n\n                await strategy\n                    .initialize({\n                        methodId: paymentMethod.id,\n                        gatewayId: paymentMethod.gateway,\n                        klarna: { container: '#container', onLoad },\n                    })\n                    .catch(rejectedInitialization);\n\n                expect(rejectedInitialization).toHaveBeenCalledWith(\n                    new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n                );\n\n                await strategy.execute(payload).catch(rejectedExecute);\n\n                expect(rejectedExecute).toHaveBeenCalledWith(\n                    new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n                );\n            });\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            try {\n                await strategy.finalize();\n            } catch (error) {\n                expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n            }\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n\n        it('deinitializes strategy after initialization', async () => {\n            const unsubscribe = jest.fn();\n\n            jest.spyOn(paymentIntegrationService, 'subscribe').mockReturnValue(unsubscribe);\n\n            const onLoad = jest.fn();\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n                klarna: { container: '#container', onLoad },\n            });\n\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n            expect(unsubscribe).toHaveBeenCalledTimes(1);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/klarna-integration/src/klarna/klarna-payment-strategy.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\nimport { includes } from 'lodash';\n\nimport {\n    Address,\n    BillingAddress,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    supportedCountries,\n    supportedCountriesRequiringStates,\n} from '../klarnav2/klarna-supported-countries';\n\nimport KlarnaCredit, {\n    KlarnaAddress,\n    KlarnaAuthorizationResponse,\n    KlarnaLoadResponse,\n    KlarnaUpdateSessionParams,\n} from './klarna-credit';\nimport { WithKlarnaPaymentInitializeOptions } from './klarna-payment-initialize-options';\nimport KlarnaScriptLoader from './klarna-script-loader';\n\nexport default class KlarnaPaymentStrategy {\n    private klarnaCredit?: KlarnaCredit;\n    private unsubscribe?: () => void;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private klarnaScriptLoader: KlarnaScriptLoader,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithKlarnaPaymentInitializeOptions,\n    ): Promise<void> {\n        this.klarnaCredit = await this.klarnaScriptLoader.load();\n\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        this.unsubscribe = this.paymentIntegrationService.subscribe(\n            (state) => {\n                if (\n                    state.isPaymentMethodInitialized({\n                        methodId: options.methodId,\n                        gatewayId: options.gatewayId,\n                    })\n                ) {\n                    void this.loadWidget(options);\n                }\n            },\n            (state) => {\n                const checkout = state.getCheckout();\n\n                return checkout && checkout.outstandingBalance;\n            },\n            (state) => {\n                const checkout = state.getCheckout();\n\n                return checkout && checkout.coupons;\n            },\n        );\n\n        await this.loadWidget(options);\n    }\n\n    deinitialize(): Promise<void> {\n        if (this.unsubscribe) {\n            this.unsubscribe();\n        }\n\n        return Promise.resolve();\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        if (!payload.payment) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"payload.payment\" argument is not provided.',\n            );\n        }\n\n        const {\n            payment: { paymentData, ...paymentPayload },\n        } = payload;\n\n        const { authorization_token: authorizationToken } = await this.authorize();\n\n        await this.paymentIntegrationService.initializePayment(paymentPayload.methodId, {\n            authorizationToken,\n        });\n\n        await this.paymentIntegrationService.submitOrder(\n            {\n                ...payload,\n                payment: paymentPayload,\n                useStoreCredit: payload.useStoreCredit,\n            },\n            options,\n        );\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    private async loadWidget(\n        options: PaymentInitializeOptions & WithKlarnaPaymentInitializeOptions,\n    ): Promise<KlarnaLoadResponse> {\n        if (!options.klarna) {\n            throw new InvalidArgumentError(\n                'Unable to load widget because \"options.klarna\" argument is not provided.',\n            );\n        }\n\n        const {\n            methodId,\n            klarna: { container, onLoad },\n        } = options;\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n        return new Promise<KlarnaLoadResponse>((resolve) => {\n            const paymentMethod = this.paymentIntegrationService\n                .getState()\n                .getPaymentMethod(methodId);\n\n            if (!paymentMethod) {\n                throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n            }\n\n            if (!this.klarnaCredit || !paymentMethod.clientToken) {\n                throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n            }\n\n            this.klarnaCredit.init({ client_token: paymentMethod.clientToken });\n\n            this.klarnaCredit.load({ container }, (response) => {\n                if (onLoad) {\n                    onLoad(response);\n                }\n\n                resolve(response);\n            });\n        });\n    }\n\n    private getUpdateSessionData(\n        billingAddress: BillingAddress,\n        shippingAddress?: Address,\n    ): KlarnaUpdateSessionParams {\n        if (\n            !includes(\n                [...supportedCountries, ...supportedCountriesRequiringStates],\n                billingAddress.countryCode,\n            )\n        ) {\n            return {};\n        }\n\n        const data: KlarnaUpdateSessionParams = {\n            billing_address: this.mapToKlarnaAddress(billingAddress, billingAddress.email),\n        };\n\n        if (shippingAddress) {\n            data.shipping_address = this.mapToKlarnaAddress(shippingAddress, billingAddress.email);\n        }\n\n        return data;\n    }\n\n    private needsStateCode(countryCode: string) {\n        return includes(supportedCountriesRequiringStates, countryCode);\n    }\n\n    private mapToKlarnaAddress(address: Address, email?: string): KlarnaAddress {\n        const klarnaAddress: KlarnaAddress = {\n            street_address: address.address1,\n            city: address.city,\n            country: address.countryCode,\n            given_name: address.firstName,\n            family_name: address.lastName,\n            postal_code: address.postalCode,\n            region: this.needsStateCode(address.countryCode)\n                ? address.stateOrProvinceCode\n                : address.stateOrProvince,\n            email,\n        };\n\n        if (address.address2) {\n            klarnaAddress.street_address2 = address.address2;\n        }\n\n        if (address.phone) {\n            klarnaAddress.phone = address.phone;\n        }\n\n        return klarnaAddress;\n    }\n\n    private authorize(): Promise<KlarnaAuthorizationResponse> {\n        return new Promise((resolve, reject) => {\n            const state = this.paymentIntegrationService.getState();\n            const billingAddress = state.getBillingAddress();\n            const shippingAddress = state.getShippingAddress();\n\n            if (!billingAddress) {\n                throw new MissingDataError(MissingDataErrorType.MissingBillingAddress);\n            }\n\n            if (!this.klarnaCredit) {\n                throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n            }\n\n            const updateSessionData = this.getUpdateSessionData(billingAddress, shippingAddress);\n\n            this.klarnaCredit.authorize(updateSessionData, (res) => {\n                if (res.approved) {\n                    return resolve(res);\n                }\n\n                if (res.show_form) {\n                    return reject(new PaymentMethodCancelledError());\n                }\n\n                reject(new PaymentMethodInvalidError());\n            });\n        });\n    }\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/klarna/klarna-script-loader.spec.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport KlarnaScriptLoader from './klarna-script-loader';\nimport KlarnaWindow from './klarna-window';\n\ndescribe('KlarnaScriptLoader', () => {\n    let scriptLoader: ScriptLoader;\n    let mockWindow: KlarnaWindow;\n    let klarnaScriptLoader: KlarnaScriptLoader;\n\n    beforeEach(() => {\n        scriptLoader = new ScriptLoader();\n        mockWindow = { Klarna: {} } as KlarnaWindow;\n        klarnaScriptLoader = new KlarnaScriptLoader(scriptLoader, mockWindow);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('load method', () => {\n        beforeEach(() => {\n            jest.spyOn(scriptLoader, 'loadScript').mockImplementation(() => {\n                if (mockWindow.Klarna) {\n                    mockWindow.Klarna.Credit = {\n                        authorize: jest.fn(),\n                        init: jest.fn(),\n                        load: jest.fn(),\n                    };\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('check if scriptLoader is called with proper url', async () => {\n            await klarnaScriptLoader.load();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                '//credit.klarnacdn.net/lib/v1/api.js',\n            );\n        });\n\n        it('throw error when custom checkout does not exist on window', async () => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.Klarna = undefined;\n\n                return Promise.resolve();\n            });\n\n            try {\n                await klarnaScriptLoader.load();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/klarna-integration/src/klarna/klarna-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport KlarnaCredit from './klarna-credit';\nimport KlarnaWindow from './klarna-window';\n\nconst SDK_URL = '//credit.klarnacdn.net/lib/v1/api.js';\n\nexport default class KlarnaScriptLoader {\n    constructor(private scriptLoader: ScriptLoader, private klarnaWindow: KlarnaWindow = window) {}\n\n    async load(): Promise<KlarnaCredit> {\n        if (!this.klarnaWindow.Klarna?.Credit) {\n            await this.scriptLoader.loadScript(SDK_URL);\n        }\n\n        if (!this.klarnaWindow.Klarna?.Credit) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.klarnaWindow.Klarna.Credit;\n    }\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/klarna/klarna-window.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\nimport KlarnaCredit from './klarna-credit';\n\nexport default interface KlarnaWindow extends Window {\n    Klarna?: {\n        Credit: KlarnaCredit;\n    };\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/klarna/klarna.mock.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\nimport { BillingAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { KlarnaUpdateSessionParams } from './klarna-credit';\n\nexport function getKlarnaUpdateSessionParams(): KlarnaUpdateSessionParams {\n    return {\n        billing_address: {\n            street_address: '12345 Testing Way',\n            street_address2: '67890 Klarna St',\n            city: 'Some City',\n            country: 'DE',\n            given_name: 'Test',\n            family_name: 'Tester',\n            postal_code: '95555',\n            region: 'Berlin',\n            email: 'test@bigcommerce.com',\n        },\n        shipping_address: {\n            street_address: '12345 Testing Way',\n            city: 'Some City',\n            country: 'US',\n            given_name: 'Test',\n            family_name: 'Tester',\n            postal_code: '95555',\n            region: 'California',\n            email: 'test@bigcommerce.com',\n            phone: '555-555-5555',\n        },\n    };\n}\n\nexport function getEUBillingAddress(): BillingAddress {\n    return {\n        id: '55c96cda6f04c',\n        firstName: 'Test',\n        lastName: 'Tester',\n        email: 'test@bigcommerce.com',\n        company: 'Bigcommerce',\n        address1: '12345 Testing Way',\n        address2: '',\n        city: 'Some City',\n        stateOrProvince: 'Berlin',\n        stateOrProvinceCode: 'CA',\n        country: 'Germany',\n        countryCode: 'DE',\n        postalCode: '95555',\n        phone: '555-555-5555',\n        customFields: [],\n    };\n}\n\nexport function getOCBillingAddress(): BillingAddress {\n    return {\n        ...getEUBillingAddress(),\n        countryCode: 'AU',\n    };\n}\n\nexport function getEUBillingAddressWithNoPhone(): BillingAddress {\n    return {\n        id: '55c96cda6f04c',\n        firstName: 'Test',\n        lastName: 'Tester',\n        email: 'test@bigcommerce.com',\n        company: 'Bigcommerce',\n        address1: '12345 Testing Way',\n        address2: '67890 Klarna St',\n        city: 'Some City',\n        stateOrProvince: 'Berlin',\n        stateOrProvinceCode: 'CA',\n        country: 'Germany',\n        countryCode: 'DE',\n        postalCode: '95555',\n        phone: '',\n        customFields: [],\n    };\n}\n\nexport function getKlarnaUpdateSessionParamsPhone(): KlarnaUpdateSessionParams {\n    return {\n        billing_address: {\n            street_address: '12345 Testing Way',\n            city: 'Some City',\n            country: 'DE',\n            given_name: 'Test',\n            family_name: 'Tester',\n            postal_code: '95555',\n            region: 'Berlin',\n            email: 'test@bigcommerce.com',\n            phone: '555-555-5555',\n        },\n        shipping_address: {\n            street_address: '12345 Testing Way',\n            city: 'Some City',\n            country: 'US',\n            given_name: 'Test',\n            family_name: 'Tester',\n            postal_code: '95555',\n            region: 'California',\n            email: 'test@bigcommerce.com',\n            phone: '555-555-5555',\n        },\n    };\n}\n\nexport function getKlarnaUpdateSessionParamsForOC(): KlarnaUpdateSessionParams {\n    return {\n        ...getKlarnaUpdateSessionParamsPhone(),\n        billing_address: {\n            street_address: '12345 Testing Way',\n            city: 'Some City',\n            country: 'AU',\n            given_name: 'Test',\n            family_name: 'Tester',\n            postal_code: '95555',\n            region: 'CA',\n            email: 'test@bigcommerce.com',\n            phone: '555-555-5555',\n        },\n    };\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/create-klarnav2-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createKlarnaV2PaymentStrategy from './create-klarnav2-payment-strategy';\nimport KlarnaV2PaymentStrategy from './klarnav2-payment-strategy';\n\ndescribe('createKlarnaV2PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates klarnav2 payment strategy', () => {\n        const strategy = createKlarnaV2PaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(KlarnaV2PaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/create-klarnav2-payment-strategy.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport KlarnaV2PaymentStrategy from './klarnav2-payment-strategy';\nimport KlarnaV2ScriptLoader from './klarnav2-script-loader';\nimport KlarnaV2TokenUpdater from './klarnav2-token-updater';\n\nconst createKlarnaV2PaymentStrategy: PaymentStrategyFactory<KlarnaV2PaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    const { getHost } = paymentIntegrationService.getState();\n    const requestSender = createRequestSender({ host: getHost() });\n\n    return new KlarnaV2PaymentStrategy(\n        paymentIntegrationService,\n        new KlarnaV2ScriptLoader(getScriptLoader()),\n        new KlarnaV2TokenUpdater(requestSender),\n    );\n};\n\nexport default toResolvableModule(createKlarnaV2PaymentStrategy, [{ gateway: 'klarna' }]);\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/klarna-payments.ts",
    "content": "export default interface KlarnaPayments {\n    authorize(\n        options: KlarnaAuthorizeOptions,\n        data: KlarnaUpdateSessionParams,\n        callback: (res: KlarnaAuthorizationResponse) => void,\n    ): void;\n    init(params: KlarnaInitParams): void;\n    load(params: KlarnaLoadParams, callback: (res: KlarnaLoadResponse) => void): void;\n}\n\nexport interface KlarnaAuthorizeOptions {\n    instance_id?: string;\n    payment_method_category: string;\n}\n\nexport interface KlarnaInitParams {\n    client_token: string;\n}\n\nexport interface KlarnaLoadParams {\n    container: string;\n    payment_method_category?: string;\n    payment_method_categories?: string;\n    instance_id?: string;\n    preferred_payment_method?: string;\n}\n\nexport interface KlarnaLoadResponse {\n    show_form: boolean;\n    error?: {\n        invalid_fields: string[];\n    };\n}\n\nexport interface KlarnaAuthorizationResponse {\n    authorization_token?: string;\n    approved: boolean;\n    show_form?: boolean;\n    error?: {\n        invalid_fields: string[];\n    };\n}\n\nexport type KlarnaUpdateSessionParams = Partial<{\n    billing_address: KlarnaAddress;\n    shipping_address: KlarnaAddress;\n}>;\n\nexport interface KlarnaAddress {\n    street_address: string;\n    street_address2?: string;\n    city: string;\n    country: string;\n    given_name: string;\n    family_name: string;\n    phone?: string;\n    postal_code: string;\n    region: string;\n    email?: string;\n    organization_name?: string;\n}\nexport interface KlarnaInitializationData {\n    enableBillie?: boolean;\n    klarnaMultipleRadioButton?: boolean;\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/klarna-supported-countries.ts",
    "content": "export const supportedCountries = [\n    'AT',\n    'BE',\n    'CA',\n    'CH',\n    'CZ',\n    'DE',\n    'DK',\n    'ES',\n    'FI',\n    'FR',\n    'GB',\n    'GR',\n    'IE',\n    'IT',\n    'NL',\n    'NO',\n    'NZ',\n    'PL',\n    'PT',\n    'SE',\n];\nexport const supportedCountriesRequiringStates = ['AU'];\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/klarnav2-payment-initialize-options.ts",
    "content": "import { KlarnaLoadResponse } from './klarna-payments';\n\n/**\n * A set of options that are required to initialize the KlarnaV2 payment method.\n *\n * When KlarnaV2 is initialized, a list of payment options will be displayed for the customer to choose from.\n * Each one with its own widget.\n *\n * ```html\n * <!-- This is where the widget will be inserted -->\n * <div id=\"container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'klarnav2',\n *     klarnav2: {\n *         container: 'container'\n *     },\n * });\n * ```\n *\n * An additional event callback can be registered.\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'klarnav2',\n *     klarnav2: {\n *         container: 'container',\n *         onLoad(response) {\n *             console.log(response);\n *         },\n *     },\n * });\n * ```\n */\nexport default interface KlarnaV2PaymentInitializeOptions {\n    /**\n     * The ID of a container which the payment widget should insert into.\n     */\n    container: string;\n\n    /**\n     * A callback that gets called when the widget is loaded and ready to be\n     * interacted with.\n     *\n     * @param response - The result of the initialization. It indicates whether\n     * or not the widget is loaded successfully.\n     */\n    onLoad?(response: KlarnaLoadResponse): void;\n}\n\nexport interface WithKlarnaV2PaymentInitializeOptions {\n    klarnav2?: KlarnaV2PaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/klarnav2-payment-strategy.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { createScriptLoader } from '@bigcommerce/script-loader';\nimport { omit } from 'lodash';\nimport { noop } from 'rxjs';\n\nimport {\n    Checkout,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodCancelledError,\n    PaymentMethodInvalidError,\n    StoreConfig,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getAddress,\n    getCheckout,\n    getConfig,\n    getOrderRequestBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport KlarnaPayments from './klarna-payments';\nimport KlarnaV2PaymentStrategy from './klarnav2-payment-strategy';\nimport KlarnaV2ScriptLoader from './klarnav2-script-loader';\nimport KlarnaV2TokenUpdater from './klarnav2-token-updater';\nimport {\n    getEUBillingAddress,\n    getEUBillingAddressWithNoPhone,\n    getEUShippingAddress,\n    getKlarna,\n    getKlarnaV2UpdateSessionParams,\n    getKlarnaV2UpdateSessionParamsForOC,\n    getKlarnaV2UpdateSessionParamsPhone,\n    getKlarnaV2UpdateSessionParamsWithOrganizationName,\n    getOCBillingAddress,\n} from './klarnav2.mock';\n\ndescribe('KlarnaV2PaymentStrategy', () => {\n    let checkoutMock: Checkout;\n    let klarnaPayments: KlarnaPayments;\n    let payload: OrderRequestBody;\n    let paymentMethod: PaymentMethod;\n    let requestSender: RequestSender;\n    let scriptLoader: KlarnaV2ScriptLoader;\n    let strategy: KlarnaV2PaymentStrategy;\n    let paymentMethodMock: PaymentMethod;\n    let klarnav2TokenUpdater: KlarnaV2TokenUpdater;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let storeConfigMock: StoreConfig;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        requestSender = createRequestSender();\n        jest.spyOn(requestSender, 'put').mockImplementation(jest.fn());\n\n        scriptLoader = new KlarnaV2ScriptLoader(createScriptLoader());\n        klarnav2TokenUpdater = new KlarnaV2TokenUpdater(requestSender);\n        strategy = new KlarnaV2PaymentStrategy(\n            paymentIntegrationService,\n            scriptLoader,\n            klarnav2TokenUpdater,\n        );\n\n        paymentMethodMock = { ...getKlarna(), id: 'pay_now', gateway: 'klarna' };\n\n        klarnaPayments = {\n            authorize: jest.fn((_params, _data, callback) => {\n                callback({ approved: true, authorization_token: 'bar' });\n            }),\n            init: jest.fn(noop),\n\n            load: jest.fn((_, callback) => callback({ show_form: true })),\n        };\n\n        paymentMethod = { ...getKlarna(), id: 'pay_now', gateway: 'klarna' };\n\n        payload = {\n            ...getOrderRequestBody(),\n            payment: {\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n            },\n            useStoreCredit: true,\n        };\n\n        checkoutMock = getCheckout();\n        storeConfigMock = getConfig().storeConfig;\n        storeConfigMock.checkoutSettings.features = {\n            'PI-3915.b2b_payment_session_for_klarna': false,\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getBillingAddressOrThrow',\n        ).mockReturnValue(getEUBillingAddress());\n        jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n            getEUShippingAddress(),\n        );\n\n        jest.spyOn(paymentIntegrationService, 'initializePayment').mockImplementation(jest.fn());\n\n        jest.spyOn(scriptLoader, 'load').mockImplementation(() => Promise.resolve(klarnaPayments));\n\n        jest.spyOn(klarnav2TokenUpdater, 'updateClientToken').mockResolvedValue(\n            getResponse(getKlarna()),\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n            checkoutMock,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfigMock,\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        const onLoad = jest.fn();\n\n        beforeEach(async () => {\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n                klarnav2: { container: '#container', onLoad },\n            });\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('throws InvalidArgumentError when klarnav2 is not provided', async () => {\n            const rejectedSpy = jest.fn();\n\n            await strategy\n                .initialize({\n                    methodId: paymentMethod.id,\n                    gatewayId: paymentMethod.gateway,\n                    klarna: { container: '#container', onLoad },\n                })\n                .catch(rejectedSpy);\n\n            expect(rejectedSpy).toHaveBeenCalledWith(\n                new InvalidArgumentError(\n                    'Unable to load widget because \"options.klarnav2\" argument is not provided.',\n                ),\n            );\n        });\n\n        it('throws InvalidArgumentError when gateway is not provided', async () => {\n            const rejectedSpy = jest.fn();\n\n            await strategy\n                .initialize({\n                    methodId: paymentMethod.id,\n                    klarnav2: { container: '#container', onLoad },\n                })\n                .catch(rejectedSpy);\n\n            expect(rejectedSpy).toHaveBeenCalledWith(\n                new InvalidArgumentError(\n                    'Unable to proceed because \"payload.payment.gatewayId\" argument is not provided.',\n                ),\n            );\n        });\n\n        it('loads script when initializing strategy', () => {\n            expect(scriptLoader.load).toHaveBeenCalledTimes(1);\n        });\n\n        it('updateClientToken fails', async () => {\n            const rejectedSpy = jest.fn();\n\n            jest.spyOn(klarnav2TokenUpdater, 'updateClientToken').mockRejectedValue({});\n\n            await strategy\n                .initialize({\n                    methodId: paymentMethod.id,\n                    gatewayId: paymentMethod.gateway,\n                    klarnav2: { container: '#container', onLoad },\n                })\n                .catch(rejectedSpy);\n\n            expect(rejectedSpy).toHaveBeenCalledWith(\n                new MissingDataError(MissingDataErrorType.MissingPaymentMethod),\n            );\n        });\n\n        it('loads payments widget', () => {\n            expect(klarnaPayments.init).toHaveBeenCalledWith({ client_token: 'foo' });\n            expect(klarnaPayments.load).toHaveBeenCalledWith(\n                { container: '#container', payment_method_category: paymentMethod.gateway },\n                expect.any(Function),\n            );\n            expect(klarnaPayments.load).toHaveBeenCalledTimes(1);\n        });\n\n        it('loads payments widget when klarnaMultipleRadioButton is enabled', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethodMock,\n                initializationData: {\n                    klarnaMultipleRadioButton: true,\n                },\n            });\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n                klarnav2: { container: '#container', onLoad },\n            });\n\n            expect(klarnaPayments.init).toHaveBeenCalledWith({ client_token: 'foo' });\n            expect(klarnaPayments.load).toHaveBeenCalledWith(\n                { container: '#container', payment_method_category: paymentMethod.id },\n                expect.any(Function),\n            );\n        });\n\n        it('triggers callback with response', () => {\n            expect(onLoad).toHaveBeenCalledWith({ show_form: true });\n        });\n\n        it('calls loadPaymentsWidget when subscription is triggered and isPaymentMethodInitialized is true', async () => {\n            const loadPaymentsWidgetMock = jest\n                .spyOn(\n                    strategy as unknown as { loadPaymentsWidget: jest.Mock },\n                    'loadPaymentsWidget',\n                )\n                .mockImplementation(jest.fn());\n\n            const subscribeMock = jest.spyOn(paymentIntegrationService, 'subscribe');\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n                klarnav2: { container: '#container' },\n            });\n\n            const subscriber = subscribeMock.mock.calls[0][0];\n\n            subscriber({\n                isPaymentMethodInitialized: () => true,\n            } as unknown as PaymentIntegrationSelectors);\n\n            expect(loadPaymentsWidgetMock).toHaveBeenCalledWith({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n                klarnav2: { container: '#container' },\n            });\n        });\n    });\n\n    describe('#execute()', () => {\n        beforeEach(async () => {\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n                klarnav2: { container: '#container' },\n            });\n        });\n\n        it('authorizes against klarnav2', async () => {\n            const loadCheckoutMock = jest.spyOn(paymentIntegrationService, 'loadCheckout');\n\n            loadCheckoutMock.mockImplementation(jest.fn());\n\n            await strategy.execute(payload);\n\n            expect(klarnaPayments.authorize).toHaveBeenCalledWith(\n                { payment_method_category: paymentMethod.gateway },\n                getKlarnaV2UpdateSessionParamsPhone(),\n                expect.any(Function),\n            );\n            expect(klarnav2TokenUpdater.updateClientToken).toHaveBeenCalledWith(\n                paymentMethod.gateway,\n                { params: { params: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7' } },\n            );\n        });\n\n        it('authorizes against klarnav2 when klarnaMultipleRadioButton is enabled', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethodMock,\n                initializationData: {\n                    klarnaMultipleRadioButton: true,\n                },\n            });\n\n            const loadCheckoutMock = jest.spyOn(paymentIntegrationService, 'loadCheckout');\n\n            loadCheckoutMock.mockImplementation(jest.fn());\n\n            await strategy.execute(payload);\n\n            expect(klarnaPayments.authorize).toHaveBeenCalledWith(\n                { payment_method_category: paymentMethod.id },\n                getKlarnaV2UpdateSessionParamsPhone(),\n                expect.any(Function),\n            );\n            expect(klarnav2TokenUpdater.updateClientToken).toHaveBeenCalledWith(\n                paymentMethod.gateway,\n                { params: { params: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7' } },\n            );\n        });\n\n        it('authorizes against klarnav2 when PI-3915.b2b_payment_session_for_klarna experiment is enabled', async () => {\n            storeConfigMock.checkoutSettings.features = {\n                'PI-3915.b2b_payment_session_for_klarna': true,\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethodMock,\n                initializationData: {\n                    enableBillie: true,\n                },\n            });\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddressOrThrow',\n            ).mockReturnValue(getEUBillingAddress());\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n                getAddress(),\n            );\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue(storeConfigMock);\n\n            const loadCheckoutMock = jest.spyOn(paymentIntegrationService, 'loadCheckout');\n\n            loadCheckoutMock.mockImplementation(jest.fn());\n\n            await strategy.execute(payload);\n\n            expect(klarnaPayments.authorize).toHaveBeenCalledWith(\n                { payment_method_category: paymentMethod.gateway },\n                getKlarnaV2UpdateSessionParamsWithOrganizationName(),\n                expect.any(Function),\n            );\n        });\n\n        it('authorizes against klarnav2 when PI-3915.b2b_payment_session_for_klarna experiment is enabled but Billie is disabled in Control Panel', async () => {\n            storeConfigMock.checkoutSettings.features = {\n                'PI-3915.b2b_payment_session_for_klarna': true,\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethodMock,\n                initializationData: {\n                    enableBillie: false,\n                },\n            });\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddressOrThrow',\n            ).mockReturnValue(getEUBillingAddress());\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n                getAddress(),\n            );\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue(storeConfigMock);\n\n            const loadCheckoutMock = jest.spyOn(paymentIntegrationService, 'loadCheckout');\n\n            loadCheckoutMock.mockImplementation(jest.fn());\n\n            await strategy.execute(payload);\n\n            expect(klarnaPayments.authorize).toHaveBeenCalledWith(\n                { payment_method_category: paymentMethod.gateway },\n                getKlarnaV2UpdateSessionParamsPhone(),\n                expect.any(Function),\n            );\n        });\n\n        it('executes with no payment argument', async () => {\n            try {\n                await strategy.execute({ ...payload, payment: undefined });\n            } catch (error) {\n                expect(error).toMatchObject(\n                    new InvalidArgumentError(\n                        'Unable to proceed because \"payload.payment\" argument is not provided.',\n                    ),\n                );\n            }\n        });\n\n        it('executes with no gateway argument', async () => {\n            try {\n                await strategy.execute({\n                    ...payload,\n                    payment: {\n                        methodId: '',\n                        ...payload.payment,\n                        gatewayId: '',\n                    },\n                });\n            } catch (error) {\n                expect(error).toMatchObject(\n                    new InvalidArgumentError(\n                        'Unable to proceed because \"payload.payment.gatewayId\" argument is not provided.',\n                    ),\n                );\n            }\n        });\n\n        it('loads widget in EU', async () => {\n            const euBillingAddress = { data: getEUBillingAddress(), errors: {}, statuses: {} };\n\n            strategy = new KlarnaV2PaymentStrategy(\n                paymentIntegrationService,\n                scriptLoader,\n                klarnav2TokenUpdater,\n            );\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddressOrThrow',\n            ).mockReturnValue(euBillingAddress.data);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n                getAddress(),\n            );\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n                klarnav2: { container: '#container' },\n            });\n            await strategy.execute(payload);\n\n            expect(klarnaPayments.authorize).toHaveBeenCalledWith(\n                { payment_method_category: paymentMethod.gateway },\n                getKlarnaV2UpdateSessionParamsPhone(),\n                expect.any(Function),\n            );\n        });\n\n        it('loads widget in OC', async () => {\n            const ocBillingAddress = { data: getOCBillingAddress(), errors: {}, statuses: {} };\n\n            strategy = new KlarnaV2PaymentStrategy(\n                paymentIntegrationService,\n                scriptLoader,\n                klarnav2TokenUpdater,\n            );\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddressOrThrow',\n            ).mockReturnValue(ocBillingAddress.data);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n                getAddress(),\n            );\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n                klarnav2: { container: '#container' },\n            });\n            await strategy.execute(payload);\n\n            expect(klarnaPayments.authorize).toHaveBeenCalledWith(\n                { payment_method_category: paymentMethod.gateway },\n                getKlarnaV2UpdateSessionParamsForOC(),\n                expect.any(Function),\n            );\n        });\n\n        it('loads widget in EU with no phone', async () => {\n            const euBillingAddressWithNoPhone = {\n                data: getEUBillingAddressWithNoPhone(),\n                errors: {},\n                statuses: {},\n            };\n\n            strategy = new KlarnaV2PaymentStrategy(\n                paymentIntegrationService,\n                scriptLoader,\n                klarnav2TokenUpdater,\n            );\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddressOrThrow',\n            ).mockReturnValue(euBillingAddressWithNoPhone.data);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n                getAddress(),\n            );\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n                klarnav2: { container: '#container' },\n            });\n\n            await strategy.execute(payload);\n\n            expect(klarnaPayments.authorize).toHaveBeenCalledWith(\n                { payment_method_category: paymentMethod.gateway },\n                getKlarnaV2UpdateSessionParams(),\n                expect.any(Function),\n            );\n        });\n\n        // TODO: CHECKOUT-7766\n        it('throws error if required data is not loaded', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddressOrThrow',\n            ).mockImplementation(() => {\n                throw new MissingDataError(MissingDataErrorType.MissingBillingAddress);\n            });\n\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n                klarnav2: { container: '#container' },\n            });\n\n            await expect(strategy.execute(payload)).rejects.toThrow(MissingDataError);\n        });\n\n        it('submits authorization token', async () => {\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.initializePayment).toHaveBeenCalledWith('klarna', {\n                authorizationToken: 'bar',\n            });\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                { ...payload, payment: omit(payload.payment, 'paymentData'), useStoreCredit: true },\n                undefined,\n            );\n        });\n\n        describe('when the billing address is from an invalid country', () => {\n            beforeEach(() => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getBillingAddressOrThrow',\n                ).mockReturnValue({\n                    ...getEUBillingAddress(),\n                    countryCode: 'zzz',\n                });\n            });\n\n            it('authorize gets called without session data', async () => {\n                await strategy.execute(payload);\n\n                expect(klarnaPayments.authorize).toHaveBeenCalledWith(\n                    { payment_method_category: paymentMethod.gateway },\n                    {},\n                    expect.any(Function),\n                );\n            });\n        });\n\n        describe('when klarnav2 authorization is not approved', () => {\n            beforeEach(() => {\n                klarnaPayments.authorize = jest.fn((_params, _data, callback) =>\n                    callback({ approved: false, show_form: true }),\n                );\n            });\n\n            it('rejects the payment execution with cancelled payment error', async () => {\n                const rejectedSpy = jest.fn();\n\n                await strategy.execute(payload).catch(rejectedSpy);\n\n                expect(rejectedSpy).toHaveBeenCalledWith(new PaymentMethodCancelledError());\n\n                expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.initializePayment).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('when klarnav2 authorization fails', () => {\n            beforeEach(() => {\n                klarnaPayments.authorize = jest.fn((_params, _data, callback) =>\n                    callback({ approved: false }),\n                );\n            });\n\n            it('rejects the payment execution with invalid payment error', async () => {\n                const rejectedSpy = jest.fn();\n\n                await strategy.execute(payload).catch(rejectedSpy);\n\n                expect(rejectedSpy).toHaveBeenCalledWith(new PaymentMethodInvalidError());\n\n                expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.initializePayment).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('when klarnav2 initialization fails', () => {\n        beforeEach(() => {\n            scriptLoader.load = jest.fn().mockResolvedValue(undefined);\n        });\n\n        it('rejects the payment execution with invalid payment error', async () => {\n            const rejectedInitialization = jest.fn();\n            const rejectedExecute = jest.fn();\n\n            await strategy\n                .initialize({\n                    methodId: paymentMethod.id,\n                    gatewayId: paymentMethod.gateway,\n                    klarnav2: { container: '#container' },\n                })\n                .catch(rejectedInitialization);\n\n            expect(rejectedInitialization).toHaveBeenCalledWith(\n                new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n            );\n\n            await strategy.execute(payload).catch(rejectedExecute);\n\n            expect(rejectedExecute).toHaveBeenCalledWith(\n                new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n            );\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            try {\n                await strategy.finalize();\n            } catch (error) {\n                expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n            }\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        const unsubscribe = jest.fn();\n\n        beforeEach(async () => {\n            jest.spyOn(paymentIntegrationService, 'subscribe').mockReturnValue(unsubscribe);\n            await strategy.initialize({\n                methodId: paymentMethod.id,\n                gatewayId: paymentMethod.gateway,\n                klarnav2: { container: '#container' },\n            });\n        });\n\n        it('deinitializes and unsubscribes klarnav2 payment strategy', async () => {\n            await strategy.deinitialize();\n\n            expect(unsubscribe).toHaveBeenCalledTimes(1);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/klarnav2-payment-strategy.ts",
    "content": "import { includes } from 'lodash';\n\nimport {\n    Address,\n    BillingAddress,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport KlarnaPayments, {\n    KlarnaAddress,\n    KlarnaAuthorizationResponse,\n    KlarnaInitializationData,\n    KlarnaLoadResponse,\n    KlarnaUpdateSessionParams,\n} from './klarna-payments';\nimport {\n    supportedCountries,\n    supportedCountriesRequiringStates,\n} from './klarna-supported-countries';\nimport { WithKlarnaV2PaymentInitializeOptions } from './klarnav2-payment-initialize-options';\nimport KlarnaV2ScriptLoader from './klarnav2-script-loader';\nimport KlarnaV2TokenUpdater from './klarnav2-token-updater';\n\nexport default class KlarnaV2PaymentStrategy {\n    private klarnaPayments?: KlarnaPayments;\n    private unsubscribe?: () => void;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private klarnav2ScriptLoader: KlarnaV2ScriptLoader,\n        private klarnav2TokenUpdater: KlarnaV2TokenUpdater,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithKlarnaV2PaymentInitializeOptions,\n    ): Promise<void> {\n        this.klarnaPayments = await this.klarnav2ScriptLoader.load();\n\n        this.unsubscribe = this.paymentIntegrationService.subscribe(\n            (state) => {\n                if (\n                    state.isPaymentMethodInitialized({\n                        methodId: options.methodId,\n                        gatewayId: options.gatewayId,\n                    })\n                ) {\n                    void this.loadPaymentsWidget(options);\n                }\n            },\n            (state) => {\n                const checkout = state.getCheckout();\n\n                return checkout && checkout.outstandingBalance;\n            },\n            (state) => {\n                const checkout = state.getCheckout();\n\n                return checkout && checkout.coupons;\n            },\n        );\n\n        await this.loadPaymentsWidget(options);\n    }\n\n    deinitialize(): Promise<void> {\n        if (this.unsubscribe) {\n            this.unsubscribe();\n        }\n\n        return Promise.resolve();\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        if (!payload.payment) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"payload.payment\" argument is not provided.',\n            );\n        }\n\n        const {\n            payment: { ...paymentPayload },\n        } = payload;\n        const { gatewayId, methodId } = paymentPayload;\n\n        if (!gatewayId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"payload.payment.gatewayId\" argument is not provided.',\n            );\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const { id: cartId } = state.getCartOrThrow();\n        const { clientToken, initializationData } =\n            state.getPaymentMethodOrThrow<KlarnaInitializationData>(methodId);\n        const { klarnaMultipleRadioButton } = initializationData || {};\n\n        await this.klarnav2TokenUpdater.klarnaOrderInitialization(cartId, clientToken);\n\n        const paymentMethodСategory = this.isKlarnaMultipleRadioButtonEnabled(\n            klarnaMultipleRadioButton,\n            gatewayId,\n            methodId,\n        );\n        const { authorization_token: authorizationToken } = await this.authorizeOrThrow(\n            paymentMethodСategory,\n            methodId,\n        );\n\n        await this.paymentIntegrationService.initializePayment(gatewayId, {\n            authorizationToken,\n        });\n\n        await this.paymentIntegrationService.submitOrder(\n            {\n                ...payload,\n                payment: paymentPayload,\n                useStoreCredit: payload.useStoreCredit,\n            },\n            options,\n        );\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    private async loadPaymentsWidget(\n        options: PaymentInitializeOptions & WithKlarnaV2PaymentInitializeOptions,\n    ): Promise<KlarnaLoadResponse> {\n        if (!options.klarnav2) {\n            throw new InvalidArgumentError(\n                'Unable to load widget because \"options.klarnav2\" argument is not provided.',\n            );\n        }\n\n        const {\n            methodId,\n            gatewayId,\n            klarnav2: { container, onLoad },\n        } = options;\n\n        if (!gatewayId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"payload.payment.gatewayId\" argument is not provided.',\n            );\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const cartId = state.getCartOrThrow().id;\n        const params = { params: cartId };\n\n        await this.klarnav2TokenUpdater.updateClientToken(gatewayId, { params }).catch(() => {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        });\n\n        return new Promise<KlarnaLoadResponse>((resolve) => {\n            const paymentMethod = state.getPaymentMethodOrThrow<KlarnaInitializationData>(methodId);\n            const { klarnaMultipleRadioButton } = paymentMethod.initializationData || {};\n\n            if (!this.klarnaPayments || !paymentMethod.clientToken) {\n                throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n            }\n\n            this.klarnaPayments.init({ client_token: paymentMethod.clientToken });\n            this.klarnaPayments.load(\n                {\n                    container,\n                    payment_method_category: this.isKlarnaMultipleRadioButtonEnabled(\n                        klarnaMultipleRadioButton,\n                        gatewayId,\n                        methodId,\n                    ),\n                },\n                (response) => {\n                    if (onLoad) {\n                        onLoad(response);\n                    }\n\n                    resolve(response);\n                },\n            );\n        });\n    }\n\n    private getUpdateSessionData(\n        methodId: string,\n        billingAddress: BillingAddress,\n        shippingAddress?: Address,\n    ): KlarnaUpdateSessionParams {\n        if (\n            !includes(\n                [...supportedCountries, ...supportedCountriesRequiringStates],\n                billingAddress.countryCode,\n            )\n        ) {\n            return {};\n        }\n\n        const data: KlarnaUpdateSessionParams = {\n            billing_address: this.mapToKlarnaAddress(\n                methodId,\n                billingAddress,\n                billingAddress.email,\n            ),\n        };\n\n        if (shippingAddress) {\n            data.shipping_address = this.mapToKlarnaAddress(\n                methodId,\n                shippingAddress,\n                billingAddress.email,\n            );\n        }\n\n        return data;\n    }\n\n    private needsStateCode(countryCode: string) {\n        return includes(supportedCountriesRequiringStates, countryCode);\n    }\n\n    private isKlarnaMultipleRadioButtonEnabled(\n        klarnaMultipleRadioButton: boolean | undefined,\n        gatewayId: string,\n        methodId: string,\n    ): string {\n        return klarnaMultipleRadioButton ? methodId : gatewayId;\n    }\n\n    private mapToKlarnaAddress(methodId: string, address: Address, email?: string): KlarnaAddress {\n        const state = this.paymentIntegrationService.getState();\n        const { checkoutSettings } = state.getStoreConfigOrThrow();\n        const paymentMethod = state.getPaymentMethodOrThrow<KlarnaInitializationData>(methodId);\n        const { enableBillie } = paymentMethod.initializationData || {};\n\n        const klarnaAddress: KlarnaAddress = {\n            street_address: address.address1,\n            city: address.city,\n            country: address.countryCode,\n            given_name: address.firstName,\n            family_name: address.lastName,\n            postal_code: address.postalCode,\n            region: this.needsStateCode(address.countryCode)\n                ? address.stateOrProvinceCode\n                : address.stateOrProvince,\n            email,\n        };\n\n        if (address.address2) {\n            klarnaAddress.street_address2 = address.address2;\n        }\n\n        if (address.phone) {\n            klarnaAddress.phone = address.phone;\n        }\n\n        if (\n            address.company &&\n            enableBillie &&\n            isExperimentEnabled(checkoutSettings.features, 'PI-3915.b2b_payment_session_for_klarna')\n        ) {\n            klarnaAddress.organization_name = address.company;\n        }\n\n        return klarnaAddress;\n    }\n\n    private async authorizeOrThrow(\n        paymentMethodСategory: string,\n        methodId: string,\n    ): Promise<KlarnaAuthorizationResponse> {\n        await this.paymentIntegrationService.loadCheckout();\n\n        const state = this.paymentIntegrationService.getState();\n        const billingAddress = state.getBillingAddressOrThrow();\n        const shippingAddress = state.getShippingAddress();\n\n        const updateSessionData = this.getUpdateSessionData(\n            methodId,\n            billingAddress,\n            shippingAddress,\n        );\n\n        return new Promise<KlarnaAuthorizationResponse>((resolve, reject) => {\n            if (!this.klarnaPayments) {\n                return reject(\n                    new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n                );\n            }\n\n            this.klarnaPayments.authorize(\n                {\n                    payment_method_category: paymentMethodСategory,\n                },\n                updateSessionData,\n                (res) => {\n                    if (res.approved) {\n                        return resolve(res);\n                    }\n\n                    if (res.show_form) {\n                        return reject(new PaymentMethodCancelledError());\n                    }\n\n                    reject(new PaymentMethodInvalidError());\n                },\n            );\n        });\n    }\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/klarnav2-script-loader.spec.ts",
    "content": "import ScriptLoader from '@bigcommerce/script-loader/lib/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport KlarnaV2ScriptLoader from './klarnav2-script-loader';\nimport KlarnaV2Window from './klarnav2-window';\n\ndescribe('KlarnaV2ScriptLoader', () => {\n    let scriptLoader: ScriptLoader;\n    let mockWindow: KlarnaV2Window;\n    let klarnav2ScriptLoader: KlarnaV2ScriptLoader;\n\n    beforeEach(() => {\n        scriptLoader = new ScriptLoader();\n        mockWindow = { Klarna: {} } as KlarnaV2Window;\n        klarnav2ScriptLoader = new KlarnaV2ScriptLoader(scriptLoader, mockWindow);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('load method', () => {\n        beforeEach(() => {\n            jest.spyOn(scriptLoader, 'loadScript').mockImplementation(() => {\n                if (mockWindow.Klarna) {\n                    mockWindow.Klarna.Payments = {\n                        authorize: jest.fn(),\n                        init: jest.fn(),\n                        load: jest.fn(),\n                    };\n                }\n\n                return Promise.resolve();\n            });\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('check if scriptLoader is called with proper url', async () => {\n            await klarnav2ScriptLoader.load();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                'https://x.klarnacdn.net/kp/lib/v1/api.js',\n            );\n        });\n\n        it('throw error when custom checkout does not exist on window', async () => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.Klarna = undefined;\n\n                return Promise.resolve();\n            });\n\n            try {\n                await klarnav2ScriptLoader.load();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/klarnav2-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport KlarnaPayments from './klarna-payments';\nimport KlarnaV2Window from './klarnav2-window';\n\nconst SDK_URL = 'https://x.klarnacdn.net/kp/lib/v1/api.js';\n\nexport default class KlarnaV2ScriptLoader {\n    constructor(\n        private scriptLoader: ScriptLoader,\n        private klarnaWindow: KlarnaV2Window = window,\n    ) {}\n\n    async load(): Promise<KlarnaPayments> {\n        if (!this.klarnaWindow.Klarna?.Payments) {\n            await this.scriptLoader.loadScript(SDK_URL);\n        }\n\n        if (!this.klarnaWindow.Klarna?.Payments) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.klarnaWindow.Klarna.Payments;\n    }\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/klarnav2-token-updater.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    MissingDataError,\n    MissingDataErrorType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport KlarnaV2TokenUpdater from './klarnav2-token-updater';\n\ndescribe('KlarnaV2TokenUpdater', () => {\n    const requestSender = createRequestSender();\n    const klarnaV2TokenUpdater = new KlarnaV2TokenUpdater(requestSender);\n\n    beforeEach(() => {\n        jest.spyOn(requestSender, 'get').mockImplementation(jest.fn());\n        jest.spyOn(requestSender, 'put').mockImplementation(jest.fn());\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('calls request sender to load payment method', async () => {\n        await klarnaV2TokenUpdater.updateClientToken('klarna', { params: 'cart' });\n\n        expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/payments/klarna', {\n            headers: {\n                Accept: 'application/vnd.bc.v1+json',\n                'X-API-INTERNAL':\n                    'This API endpoint is for internal use only and may change in the future',\n                'X-Checkout-SDK-Version': '1.0.0',\n            },\n            params: 'cart',\n            timeout: undefined,\n        });\n    });\n\n    it('calls request sender to load payment method with empty params', async () => {\n        await klarnaV2TokenUpdater.updateClientToken('klarna');\n\n        expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/payments/klarna', {\n            headers: {\n                Accept: 'application/vnd.bc.v1+json',\n                'X-API-INTERNAL':\n                    'This API endpoint is for internal use only and may change in the future',\n                'X-Checkout-SDK-Version': '1.0.0',\n            },\n            params: undefined,\n            timeout: undefined,\n        });\n    });\n\n    it('throws an error when the request sender is unable to load payment method', async () => {\n        jest.spyOn(requestSender, 'get').mockReturnValue(\n            Promise.reject(new MissingDataError(MissingDataErrorType.MissingPaymentMethod)),\n        );\n\n        await expect(\n            klarnaV2TokenUpdater.updateClientToken('klarna', { params: 'cart' }),\n        ).rejects.toThrow(MissingDataError);\n\n        expect(requestSender.get).toHaveBeenCalledWith('/api/storefront/payments/klarna', {\n            headers: {\n                Accept: 'application/vnd.bc.v1+json',\n                'X-API-INTERNAL':\n                    'This API endpoint is for internal use only and may change in the future',\n                'X-Checkout-SDK-Version': '1.0.0',\n            },\n            params: 'cart',\n            timeout: undefined,\n        });\n    });\n\n    it('calls klarnaOrderInitialization to initialize klarna order', async () => {\n        await klarnaV2TokenUpdater.klarnaOrderInitialization('4444', '123456789');\n\n        expect(requestSender.put).toHaveBeenCalledWith('/api/storefront/initialization/klarna', {\n            headers: {\n                Accept: 'application/vnd.bc.v1+json',\n                'X-API-INTERNAL':\n                    'This API endpoint is for internal use only and may change in the future',\n                'X-Checkout-SDK-Version': '1.0.0',\n            },\n            body: {\n                cartId: '4444',\n                clientToken: '123456789',\n            },\n            timeout: undefined,\n        });\n    });\n\n    it('throws an error when the klarnaOrderInitialization fails to initialize klarna order', async () => {\n        jest.spyOn(requestSender, 'put').mockReturnValue(\n            Promise.reject(new MissingDataError(MissingDataErrorType.MissingPaymentMethod)),\n        );\n\n        await expect(\n            klarnaV2TokenUpdater.klarnaOrderInitialization('4444', '123456789'),\n        ).rejects.toThrow(MissingDataError);\n\n        expect(requestSender.put).toHaveBeenCalledWith('/api/storefront/initialization/klarna', {\n            headers: {\n                Accept: 'application/vnd.bc.v1+json',\n                'X-API-INTERNAL':\n                    'This API endpoint is for internal use only and may change in the future',\n                'X-Checkout-SDK-Version': '1.0.0',\n            },\n            body: {\n                cartId: '4444',\n                clientToken: '123456789',\n            },\n            timeout: undefined,\n        });\n    });\n});\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/klarnav2-token-updater.ts",
    "content": "import { RequestSender, Response } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    PaymentMethod,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class KlarnaV2TokenUpdater {\n    constructor(private requestSender: RequestSender) {}\n\n    updateClientToken(\n        gatewayId: string,\n        { timeout, params }: RequestOptions = {},\n    ): Promise<Response<PaymentMethod>> {\n        const url = `/api/storefront/payments/${gatewayId}`;\n\n        return this.requestSender.get(url, {\n            timeout,\n            headers: {\n                Accept: ContentType.JsonV1,\n                'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                ...SDK_VERSION_HEADERS,\n            },\n            params,\n        });\n    }\n\n    async klarnaOrderInitialization(\n        cartId: string,\n        clientToken: string | undefined,\n    ): Promise<void> {\n        const url = `/api/storefront/initialization/klarna`;\n        const options = {\n            headers: {\n                Accept: ContentType.JsonV1,\n                'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                ...SDK_VERSION_HEADERS,\n            },\n            body: {\n                cartId,\n                clientToken,\n            },\n        };\n\n        await this.requestSender.put(url, options);\n    }\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/klarnav2-window.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\nimport KlarnaPayments from './klarna-payments';\n\nexport default interface KlarnaV2Window extends Window {\n    Klarna?: {\n        Payments: KlarnaPayments;\n    };\n}\n"
  },
  {
    "path": "packages/klarna-integration/src/klarnav2/klarnav2.mock.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\nimport {\n    Address,\n    BillingAddress,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { KlarnaUpdateSessionParams } from './klarna-payments';\n\nexport function getKlarnaV2UpdateSessionParams(): KlarnaUpdateSessionParams {\n    return {\n        billing_address: {\n            street_address: '12345 Testing Way',\n            street_address2: '67890 Klarna St',\n            city: 'Some City',\n            country: 'DE',\n            given_name: 'Test',\n            family_name: 'Tester',\n            postal_code: '95555',\n            region: 'Berlin',\n            email: 'test@bigcommerce.com',\n        },\n        shipping_address: {\n            street_address: '12345 Testing Way',\n            city: 'Some City',\n            country: 'US',\n            given_name: 'Test',\n            family_name: 'Tester',\n            postal_code: '95555',\n            region: 'California',\n            email: 'test@bigcommerce.com',\n            phone: '555-555-5555',\n        },\n    };\n}\n\nexport function getEUBillingAddress(): BillingAddress {\n    return {\n        id: '55c96cda6f04c',\n        firstName: 'Test',\n        lastName: 'Tester',\n        email: 'test@bigcommerce.com',\n        company: 'Bigcommerce',\n        address1: '12345 Testing Way',\n        address2: '',\n        city: 'Some City',\n        stateOrProvince: 'Berlin',\n        stateOrProvinceCode: 'CA',\n        country: 'Germany',\n        countryCode: 'DE',\n        postalCode: '95555',\n        phone: '555-555-5555',\n        customFields: [],\n    };\n}\n\nexport function getOCBillingAddress(): BillingAddress {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    return {\n        ...getEUBillingAddress(),\n        countryCode: 'AU',\n    };\n}\n\nexport function getEUBillingAddressWithNoPhone(): BillingAddress {\n    return {\n        id: '55c96cda6f04c',\n        firstName: 'Test',\n        lastName: 'Tester',\n        email: 'test@bigcommerce.com',\n        company: 'Bigcommerce',\n        address1: '12345 Testing Way',\n        address2: '67890 Klarna St',\n        city: 'Some City',\n        stateOrProvince: 'Berlin',\n        stateOrProvinceCode: 'CA',\n        country: 'Germany',\n        countryCode: 'DE',\n        postalCode: '95555',\n        phone: '',\n        customFields: [],\n    };\n}\n\nexport function getEUShippingAddress(): Address {\n    return {\n        address1: '12345 Testing Way',\n        address2: '',\n        city: 'Some City',\n        company: '',\n        country: '',\n        countryCode: 'US',\n        customFields: [],\n        firstName: 'Test',\n        lastName: 'Tester',\n        postalCode: '95555',\n        phone: '555-555-5555',\n        stateOrProvince: 'California',\n        stateOrProvinceCode: '',\n    };\n}\n\nexport function getKlarnaV2UpdateSessionParamsPhone(): KlarnaUpdateSessionParams {\n    return {\n        billing_address: {\n            street_address: '12345 Testing Way',\n            city: 'Some City',\n            country: 'DE',\n            given_name: 'Test',\n            family_name: 'Tester',\n            postal_code: '95555',\n            region: 'Berlin',\n            email: 'test@bigcommerce.com',\n            phone: '555-555-5555',\n        },\n        shipping_address: {\n            street_address: '12345 Testing Way',\n            city: 'Some City',\n            country: 'US',\n            given_name: 'Test',\n            family_name: 'Tester',\n            postal_code: '95555',\n            region: 'California',\n            email: 'test@bigcommerce.com',\n            phone: '555-555-5555',\n        },\n    };\n}\n\nexport function getKlarnaV2UpdateSessionParamsForOC(): KlarnaUpdateSessionParams {\n    return {\n        ...getKlarnaV2UpdateSessionParamsPhone(),\n        billing_address: {\n            street_address: '12345 Testing Way',\n            city: 'Some City',\n            country: 'AU',\n            given_name: 'Test',\n            family_name: 'Tester',\n            postal_code: '95555',\n            region: 'CA',\n            email: 'test@bigcommerce.com',\n            phone: '555-555-5555',\n        },\n    };\n}\n\nexport function getKlarna(): PaymentMethod {\n    return {\n        id: 'klarna',\n        logoUrl: '',\n        method: 'widget',\n        supportedCards: [],\n        config: {\n            displayName: 'Pay Over Time',\n            helpText: 'Type any special instructions in here.',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'foo',\n    };\n}\n\nexport function getKlarnaV2UpdateSessionParamsWithOrganizationName(): KlarnaUpdateSessionParams {\n    return {\n        billing_address: {\n            street_address: '12345 Testing Way',\n            city: 'Some City',\n            country: 'DE',\n            given_name: 'Test',\n            family_name: 'Tester',\n            postal_code: '95555',\n            region: 'Berlin',\n            email: 'test@bigcommerce.com',\n            phone: '555-555-5555',\n            organization_name: 'Bigcommerce',\n        },\n        shipping_address: {\n            street_address: '12345 Testing Way',\n            city: 'Some City',\n            country: 'US',\n            given_name: 'Test',\n            family_name: 'Tester',\n            postal_code: '95555',\n            region: 'California',\n            email: 'test@bigcommerce.com',\n            phone: '555-555-5555',\n            organization_name: 'Bigcommerce',\n        },\n    };\n}\n"
  },
  {
    "path": "packages/klarna-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n}\n"
  },
  {
    "path": "packages/klarna-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/klarna-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/legacy-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/legacy-integration/README.md",
    "content": "# legacy-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test legacy-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint legacy-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/legacy-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'legacy-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/legacy-integration',\n};\n"
  },
  {
    "path": "packages/legacy-integration/project.json",
    "content": "{\n    \"name\": \"legacy-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/legacy-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/legacy-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/legacy-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/legacy-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/legacy-integration/src/create-legacy-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport LegacyPaymentStrategy from './legacy-payment-strategy';\n\nconst createLegacyPaymentStrategy: PaymentStrategyFactory<LegacyPaymentStrategy> = (\n    paymentIntegrationService,\n) => new LegacyPaymentStrategy(paymentIntegrationService);\n\nexport default toResolvableModule(createLegacyPaymentStrategy, [{ id: 'testgateway' }]);\n"
  },
  {
    "path": "packages/legacy-integration/src/create-legacy-payment-stratey.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createLegacyPaymentStrategy from './create-legacy-payment-strategy';\nimport LegacyPaymentStrategy from './legacy-payment-strategy';\n\ndescribe('createExternalPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates external payment strategy', () => {\n        const strategy = createLegacyPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(LegacyPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/legacy-integration/src/index.ts",
    "content": "export { default as createLegacyPaymentStrategy } from './create-legacy-payment-strategy';\n"
  },
  {
    "path": "packages/legacy-integration/src/legacy-payment-strategy.spec.ts",
    "content": "import {\n    OrderFinalizationNotRequiredError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport LegacyPaymentStrategy from './legacy-payment-strategy';\n\ndescribe('LegacyPaymentStrategy', () => {\n    let strategy: LegacyPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        strategy = new LegacyPaymentStrategy(paymentIntegrationService);\n    });\n\n    describe('#execute()', () => {\n        it('calls submit order with the right data', async () => {\n            await strategy.execute(getOrderRequestBody(), undefined);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                getOrderRequestBody(),\n                undefined,\n            );\n        });\n\n        it('passes the options to submitOrder', async () => {\n            const options = { myOptions: 'option1', methodId: 'testgateway' };\n\n            await strategy.execute(getOrderRequestBody(), options);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                getOrderRequestBody(),\n                options,\n            );\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#initialize()', () => {\n        it('initializes the strategy successfully', async () => {\n            const result = await strategy.initialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/legacy-integration/src/legacy-payment-strategy.ts",
    "content": "import {\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class LegacyPaymentStrategy implements PaymentStrategy {\n    constructor(private _paymentIntegrationService: PaymentIntegrationService) {}\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        await this._paymentIntegrationService.submitOrder(payload, options);\n\n        return Promise.resolve();\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    initialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n}\n"
  },
  {
    "path": "packages/legacy-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/legacy-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.spec.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/mollie-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"]\n}\n"
  },
  {
    "path": "packages/mollie-integration/README.md",
    "content": "# mollie-integration\n\nThis package contains the integration layer for the [Mollie](https://www.mollie.com/) provider.\n\n## Mollie documentation\n\nFor additional information on Mollie API, please refer to [Mollie API documentation](https://docs.mollie.com/).\n\n## Running unit tests\n\nThis package uses [Jest](https://jestjs.io) for testing.\n\nRun `nx test mollie-integration` to execute all the unit tests for this package.\n\nRun `nx test mollie-integration --testFile=\"<FILE_NAME>\"` to execute unit tests for a single file.\n\n## Running lint\n\nRun `nx lint mollie-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/mollie-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: \"mollie-integration\",\n    preset: \"../../jest.preset.js\",\n    globals: {\n        \"ts-jest\": {\n            tsconfig: \"<rootDir>/tsconfig.spec.json\",\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: [\"../../jest-setup.js\"],\n    coverageDirectory: \"../../coverage/packages/mollie-integration\",\n};\n"
  },
  {
    "path": "packages/mollie-integration/project.json",
    "content": "{\n    \"name\": \"mollie-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/mollie-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/mollie-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/mollie-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/mollie-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/mollie-integration/src/create-mollie-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createMolliePaymentStrategy from './create-mollie-payment-strategy';\nimport MolliePaymentStrategy from './mollie-payment-strategy';\n\ndescribe('createMolliePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates mollie payment strategy', () => {\n        const strategy = createMolliePaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(MolliePaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/mollie-integration/src/create-mollie-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport MolliePaymentStrategy from './mollie-payment-strategy';\nimport MollieScriptLoader from './mollie-script-loader';\n\nconst createMolliePaymentStrategy: PaymentStrategyFactory<MolliePaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new MolliePaymentStrategy(\n        new MollieScriptLoader(getScriptLoader()),\n        paymentIntegrationService,\n    );\n};\n\nexport default toResolvableModule(createMolliePaymentStrategy, [\n    { gateway: 'mollie' },\n    { gateway: 'mollie', id: 'applepay' },\n]);\n"
  },
  {
    "path": "packages/mollie-integration/src/index.ts",
    "content": "export { WithMolliePaymentInitializeOptions } from './mollie-payment-initialize-options';\n\nexport { default as createMolliePaymentStrategy } from './create-mollie-payment-strategy';\n"
  },
  {
    "path": "packages/mollie-integration/src/is-mollie-window.ts",
    "content": "import { MollieHostWindow } from './mollie';\n\nexport default function isMollieWindow(window: Window): window is MollieHostWindow {\n    return 'Mollie' in window;\n}\n"
  },
  {
    "path": "packages/mollie-integration/src/mollie-payment-initialize-options.ts",
    "content": "import { HostedFormOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * A set of options that are required to initialize the Mollie payment method.\n *\n * Once Mollie payment is initialized, credit card form fields are provided by the\n * payment provider as IFrames, these will be inserted into the current page. These\n * options provide a location and styling for each of the form fields.\n *\n * ```js\n * service.initializePayment({\n *      methodId: 'mollie',\n *      mollie: {\n *          containerId: 'container',\n *          cardNumberId: '',\n *          cardHolderId: '',\n *          cardCvcId: '',\n *          cardExpiryId: '',\n *          styles : {\n *              base: {\n *                  color: '#fff'\n *              }\n *          }\n *      }\n * });\n * ```\n */\nexport default interface MolliePaymentInitializeOptions {\n    /**\n     * ContainerId is use in Mollie for determined either its showing or not the\n     * container, because when Mollie has Vaulted Instruments it gets hide,\n     * and shows an error because can't mount Provider Components\n     */\n    containerId?: string;\n\n    /**\n     * The location to insert Mollie Component\n     */\n    cardNumberId: string;\n\n    /**\n     * The location to insert Mollie Component\n     */\n    cardHolderId: string;\n\n    /**\n     * The location to insert Mollie Component\n     */\n    cardCvcId: string;\n\n    /**\n     * The location to insert Mollie Component\n     */\n    cardExpiryId: string;\n\n    /**\n     * A set of styles required for the mollie components\n     */\n    styles: object;\n\n    /**\n     * Hosted Form Validation Options\n     */\n    form?: HostedFormOptions;\n\n    unsupportedMethodMessage?: string;\n\n    disableButton(disabled: boolean): void;\n}\n\nexport interface WithMolliePaymentInitializeOptions {\n    /**\n     * The options that are required to initialize the Mollie payment\n     * method. They can be omitted unless you need to support Mollie.\n     */\n    mollie?: MolliePaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/mollie-integration/src/mollie-payment-strategy.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    HostedForm,\n    InvalidArgumentError,\n    MissingDataError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    getConfig,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { MollieClient, MollieElement, MollieHostWindow } from './mollie';\nimport { WithMolliePaymentInitializeOptions } from './mollie-payment-initialize-options';\nimport MolliePaymentStrategy from './mollie-payment-strategy';\nimport MollieScriptLoader from './mollie-script-loader';\nimport {\n    getHostedFormInitializeOptions,\n    getInitializeOptions,\n    getMollie,\n    getMollieClient,\n    getOrderRequestBodyAPMs,\n    getOrderRequestBodyVaultAPMs,\n    getOrderRequestBodyVaultCC,\n    getOrderRequestBodyVaultedCC,\n    getOrderRequestBodyWithCreditCard,\n    getOrderRequestBodyWithoutPayment,\n} from './mollie.mock';\n\ndescribe('MolliePaymentStrategy', () => {\n    let mockWindow: MollieHostWindow;\n    let mollieClient: MollieClient;\n    let mollieElement: MollieElement;\n    let mollieScriptLoader: MollieScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let strategy: MolliePaymentStrategy;\n    const storeConfigMock = getConfig().storeConfig;\n\n    beforeEach(() => {\n        mollieClient = getMollieClient();\n\n        mollieElement = {\n            mount: jest.fn(),\n            unmount: jest.fn(),\n            addEventListener: jest.fn(),\n        };\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        const scriptLoader = createScriptLoader();\n\n        // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n        mockWindow = {} as MollieHostWindow;\n\n        mollieScriptLoader = new MollieScriptLoader(scriptLoader, mockWindow);\n\n        jest.useFakeTimers();\n\n        jest.spyOn(mollieScriptLoader, 'load').mockReturnValue(Promise.resolve(mollieClient));\n\n        jest.spyOn(mollieClient, 'createComponent').mockReturnValue(mollieElement);\n        jest.spyOn(document, 'querySelectorAll');\n\n        strategy = new MolliePaymentStrategy(mollieScriptLoader, paymentIntegrationService);\n    });\n\n    describe('#Initialize & #Execute', () => {\n        let options: PaymentInitializeOptions & WithMolliePaymentInitializeOptions;\n\n        beforeEach(() => {\n            options = getInitializeOptions();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getMollie());\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValue({\n                ...storeConfigMock,\n                storeProfile: { ...storeConfigMock.storeProfile, storeLanguage: 'en_US' },\n            });\n        });\n\n        afterEach(() => {\n            jest.restoreAllMocks();\n        });\n\n        describe('Initialize', () => {\n            it('does not load Mollie if initialization options are not provided', async () => {\n                options.mollie = undefined;\n\n                const response = strategy.initialize(options);\n\n                await expect(response).rejects.toThrow(InvalidArgumentError);\n            });\n\n            it('does not load Mollie if gatewayId is not provided', async () => {\n                options.gatewayId = undefined;\n\n                const response = strategy.initialize(options);\n\n                await expect(response).rejects.toThrow(InvalidArgumentError);\n            });\n\n            it('does not load Mollie if merchantId is not provided', async () => {\n                const paymentData = getMollie();\n\n                delete paymentData.config.merchantId;\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentData);\n\n                const response = strategy.initialize(options);\n\n                await expect(response).rejects.toThrow(MissingDataError);\n            });\n\n            it('does initialize mollie and create 4 components', async () => {\n                await strategy.initialize(options);\n\n                expect(mollieScriptLoader.load).toHaveBeenCalledWith('test_T0k3n', 'en_US', true);\n\n                jest.runAllTimers();\n\n                expect(mollieClient.createComponent).toHaveBeenCalledTimes(4);\n                expect(mollieElement.mount).toHaveBeenCalledTimes(4);\n                expect(document.querySelectorAll).toHaveBeenNthCalledWith(\n                    1,\n                    '.mollie-components-controller',\n                );\n            });\n\n            it('does initialize without containerId', async () => {\n                delete options.mollie?.containerId;\n                await strategy.initialize(options);\n\n                expect(mollieScriptLoader.load).toHaveBeenCalledWith('test_T0k3n', 'en_US', true);\n\n                jest.runAllTimers();\n\n                expect(mollieClient.createComponent).toHaveBeenCalledTimes(4);\n                expect(mollieElement.mount).toHaveBeenCalledTimes(4);\n            });\n\n            it('does render a message when the cart contain digital items', async () => {\n                const disableButtonMock = jest.fn();\n                const optionsMock = {\n                    ...getInitializeOptions(),\n                    methodId: 'klarnapaylater',\n                    mollie: {\n                        containerId: 'mollie-element',\n                        cardCvcId: 'mollie-card-cvc-component-field',\n                        cardExpiryId: 'mollie-card-expiry-component-field',\n                        cardHolderId: 'mollie-card-holder-component-field',\n                        cardNumberId: 'mollie-card-number-component-field',\n                        styles: { valid: '#0f0' },\n                        unsupportedMethodMessage: 'This payment method is not supported',\n                        disableButton: disableButtonMock,\n                    },\n                };\n\n                const cartMock = getCart();\n                const container = {\n                    ...document.createElement('div'),\n                    appendChild: jest.fn(),\n                };\n                const paragraph = {\n                    ...document.createElement('p'),\n                    innerText: '',\n                    setAttribute: jest.fn(),\n                };\n\n                const mollieMethod = {\n                    ...getMollie(),\n                    config: {\n                        ...getMollie().config,\n                        isHostedFormEnabled: false,\n                    },\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(mollieMethod);\n                jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                    cartMock,\n                );\n                jest.spyOn(document, 'createElement').mockReturnValue(paragraph);\n                jest.spyOn(document, 'getElementById').mockReturnValue(container);\n\n                await strategy.initialize(optionsMock);\n\n                expect(paymentIntegrationService.getState().getCartOrThrow).toHaveBeenCalled();\n                expect(document.getElementById).toHaveBeenCalledWith(options.mollie?.containerId);\n                expect(document.createElement).toHaveBeenCalledWith('p');\n                expect(paragraph.setAttribute).toHaveBeenCalled();\n                expect(container.appendChild).toHaveBeenCalled();\n                expect(disableButtonMock).toHaveBeenCalledWith(true);\n            });\n\n            it('does not display a message when the cart contains no digital items', async () => {\n                const disableButtonMock = jest.fn();\n\n                const optionsMock = {\n                    ...getInitializeOptions(),\n                    methodId: 'klarnapaylater',\n                    mollie: {\n                        containerId: 'mollie-element',\n                        cardCvcId: 'mollie-card-cvc-component-field',\n                        cardExpiryId: 'mollie-card-expiry-component-field',\n                        cardHolderId: 'mollie-card-holder-component-field',\n                        cardNumberId: 'mollie-card-number-component-field',\n                        styles: { valid: '#0f0' },\n                        unsupportedMethodMessage: 'This payment method is not supported',\n                        disableButton: disableButtonMock,\n                    },\n                };\n\n                const cartMock = {\n                    ...getCart(),\n                    lineItems: {\n                        ...getCart().lineItems,\n                        digitalItems: [],\n                    },\n                };\n\n                const mollieMethod = {\n                    ...getMollie(),\n                    config: {\n                        ...getMollie().config,\n                        isHostedFormEnabled: false,\n                    },\n                };\n\n                const paragraph = {\n                    innerText: '',\n                    setAttribute: jest.fn(),\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(mollieMethod);\n                jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                    cartMock,\n                );\n                jest.spyOn(document, 'createElement');\n                jest.spyOn(document, 'getElementById');\n\n                await strategy.initialize(optionsMock);\n\n                expect(paymentIntegrationService.getState().getCartOrThrow).toHaveBeenCalled();\n                expect(document.getElementById).not.toHaveBeenCalledWith('mollie-element');\n                expect(document.createElement).not.toHaveBeenCalledWith('p');\n                expect(paragraph.setAttribute).not.toHaveBeenCalled();\n                expect(disableButtonMock).not.toHaveBeenCalled();\n            });\n\n            it('throws MissingDataError when the state.cart is not available', async () => {\n                const disableButtonMock = jest.fn();\n\n                const optionsMock = {\n                    ...getInitializeOptions(),\n                    methodId: 'klarnapaylater',\n                    mollie: {\n                        containerId: 'mollie-element',\n                        cardCvcId: 'mollie-card-cvc-component-field',\n                        cardExpiryId: 'mollie-card-expiry-component-field',\n                        cardHolderId: 'mollie-card-holder-component-field',\n                        cardNumberId: 'mollie-card-number-component-field',\n                        styles: { valid: '#0f0' },\n                        unsupportedMethodMessage: 'This payment method is not supported',\n                        disableButton: disableButtonMock,\n                    },\n                };\n\n                const mollieMethod = {\n                    ...getMollie(),\n                    config: {\n                        ...getMollie().config,\n                        isHostedFormEnabled: false,\n                    },\n                };\n\n                const paragraph = {\n                    innerText: '',\n                    setAttribute: jest.fn(),\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(mollieMethod);\n                jest.spyOn(document, 'createElement');\n                jest.spyOn(document, 'getElementById');\n\n                await strategy.initialize(optionsMock);\n\n                expect(paymentIntegrationService.getState().getCartOrThrow).toHaveBeenCalled();\n                expect(document.getElementById).not.toHaveBeenCalledWith('mollie-element');\n                expect(document.createElement).not.toHaveBeenCalledWith('p');\n                expect(paragraph.setAttribute).not.toHaveBeenCalled();\n                expect(disableButtonMock).not.toHaveBeenCalled();\n            });\n\n            it('loads klarnapaylater or klarnasliceit when widget was updated', async () => {\n                const disableButtonMock = jest.fn();\n\n                const optionsMock = {\n                    ...getInitializeOptions(),\n                    methodId: 'klarnapaylater',\n                    mollie: {\n                        containerId: 'mollie-element',\n                        cardCvcId: 'mollie-card-cvc-component-field',\n                        cardExpiryId: 'mollie-card-expiry-component-field',\n                        cardHolderId: 'mollie-card-holder-component-field',\n                        cardNumberId: 'mollie-card-number-component-field',\n                        styles: { valid: '#0f0' },\n                        unsupportedMethodMessage: 'This payment method is not supported',\n                        disableButton: disableButtonMock,\n                    },\n                };\n\n                const container = {\n                    ...document.createElement('div'),\n                    remove: jest.fn(),\n                    appendChild: jest.fn(),\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'isPaymentMethodInitialized',\n                ).mockReturnValue(true);\n\n                jest.spyOn(document, 'getElementById').mockReturnValue(container);\n\n                await strategy.initialize(optionsMock);\n\n                expect(document.getElementById).toHaveBeenCalledWith(\n                    // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n                    `${optionsMock.gatewayId}-${optionsMock.methodId}-paragraph`,\n                );\n                expect(container.remove).toHaveBeenCalled();\n                expect(disableButtonMock).toHaveBeenCalledWith(false);\n            });\n        });\n\n        describe('#execute', () => {\n            beforeEach(() => {\n                jest.spyOn(mollieClient, 'createToken').mockResolvedValue({ token: 'tkn_test' });\n\n                jest.spyOn(paymentIntegrationService.getState(), 'getLocale').mockReturnValue(\n                    'en-US',\n                );\n            });\n\n            it('throws an error when payment is not present', async () => {\n                try {\n                    await strategy.execute(getOrderRequestBodyWithoutPayment());\n                } catch (err) {\n                    // eslint-disable-next-line jest/no-conditional-expect\n                    expect(err).toBeInstanceOf(PaymentArgumentInvalidError);\n                }\n            });\n\n            it('should call submitPayment when paying with credit_card', async () => {\n                await strategy.initialize(options);\n                jest.runAllTimers();\n                await strategy.execute(getOrderRequestBodyWithCreditCard());\n\n                expect(mollieClient.createToken).toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    gatewayId: 'mollie',\n                    methodId: 'credit_card',\n                    paymentData: {\n                        formattedPayload: {\n                            /* eslint-disable */\n                            browser_info: {\n                                color_depth: 24,\n                                java_enabled: false,\n                                language: 'en-US',\n                                screen_height: 0,\n                                screen_width: 0,\n                                time_zone_offset: new Date().getTimezoneOffset().toString(),\n                            },\n                            credit_card_token: {\n                                token: 'tkn_test',\n                            },\n                            set_as_default_stored_instrument: false,\n                            shopper_locale: 'en-US',\n                            vault_payment_instrument: false,\n                            /* eslint-enable */\n                        },\n                    },\n                });\n            });\n\n            it('should call submitPayment when saving vaulted', async () => {\n                await strategy.initialize(options);\n                jest.runAllTimers();\n\n                const { payment } = getOrderRequestBodyVaultCC();\n\n                await strategy.execute({ payment });\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    gatewayId: 'mollie',\n                    methodId: 'credit_card',\n                    paymentData: {\n                        formattedPayload: {\n                            /* eslint-disable */\n                            browser_info: {\n                                color_depth: 24,\n                                java_enabled: false,\n                                language: 'en-US',\n                                screen_height: 0,\n                                screen_width: 0,\n                                time_zone_offset: new Date().getTimezoneOffset().toString(),\n                            },\n                            credit_card_token: {\n                                token: 'tkn_test',\n                            },\n                            set_as_default_stored_instrument: true,\n                            shopper_locale: 'en-US',\n                            vault_payment_instrument: true,\n                            /* eslint-enable */\n                        },\n                    },\n                });\n            });\n\n            it('should call submitPayment when paying with apms', async () => {\n                await strategy.initialize(options);\n                await strategy.execute(getOrderRequestBodyAPMs());\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    gatewayId: 'mollie',\n                    methodId: 'belfius',\n                    paymentData: {\n                        /* eslint-disable */\n                        formattedPayload: {\n                            issuer: 'foo',\n                            shopper_locale: 'en-US',\n                        },\n                        issuer: 'foo',\n                        shopper_locale: 'en-US',\n                        /* eslint-enable */\n                    },\n                });\n            });\n\n            it('should save vault_payment_instrument on APMs', async () => {\n                await strategy.initialize(options);\n                await strategy.execute(getOrderRequestBodyVaultAPMs());\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    gatewayId: 'mollie',\n                    methodId: 'belfius',\n                    paymentData: {\n                        formattedPayload: {\n                            /* eslint-disable */\n                            issuer: '',\n                            shopper_locale: 'en-US',\n                            /* eslint-enable */\n                        },\n                        shouldSaveInstrument: true,\n                        shouldSetAsDefaultInstrument: false,\n                    },\n                });\n            });\n        });\n    });\n\n    describe('When Hosted Form is enabled', () => {\n        let form: HostedForm;\n        let initializeOptions: PaymentInitializeOptions & WithMolliePaymentInitializeOptions;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                submit: jest.fn(),\n                validate: jest.fn(() => Promise.resolve()),\n                detach: jest.fn(),\n                getBin: jest.fn(),\n                getCardType: jest.fn(),\n            };\n            initializeOptions = getHostedFormInitializeOptions();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getMollie());\n\n            jest.spyOn(paymentIntegrationService, 'createHostedForm').mockReturnValue(form);\n            jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValue({\n                ...storeConfigMock,\n                paymentSettings: {\n                    ...storeConfigMock.paymentSettings,\n                    bigpayBaseUrl: 'https://bigpay.integration.zone',\n                },\n                storeProfile: {\n                    ...storeConfigMock.storeProfile,\n                    storeLanguage: 'en_US',\n                },\n            });\n        });\n\n        afterEach(() => {\n            jest.restoreAllMocks();\n        });\n\n        it('creates hosted form', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(paymentIntegrationService.createHostedForm).toHaveBeenCalledWith(\n                'https://bigpay.integration.zone',\n                initializeOptions.mollie?.form,\n            );\n        });\n\n        it('attaches hosted form to container', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(form.attach).toHaveBeenCalled();\n        });\n\n        it('submits payment data with hosted form', async () => {\n            const payload = getOrderRequestBodyVaultedCC();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.submit).toHaveBeenCalledWith(payload.payment);\n        });\n\n        it('validates user input before submitting data', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(getOrderRequestBodyVaultedCC());\n\n            expect(form.validate).toHaveBeenCalled();\n        });\n\n        it('does not submit payment data with hosted form if validation fails', async () => {\n            jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n            try {\n                await strategy.initialize(initializeOptions);\n                await strategy.execute(getOrderRequestBodyVaultedCC());\n            } catch (error) {\n                // eslint-disable-next-line jest/no-conditional-expect\n                expect(form.submit).not.toHaveBeenCalled();\n            }\n        });\n\n        it('should detach hostedForm on Deinitialize', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.deinitialize();\n\n            expect(form.detach).toHaveBeenCalled();\n        });\n\n        it('should unmount the elements of the card when adding a new one', async () => {\n            const options = getInitializeOptions();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.deinitialize();\n\n            expect(form.detach).toHaveBeenCalled();\n\n            await strategy.initialize(options);\n\n            jest.runAllTimers();\n\n            expect(mollieClient.createComponent).toHaveBeenCalledTimes(4);\n            expect(mollieElement.mount).toHaveBeenCalledTimes(4);\n\n            jest.spyOn(document, 'getElementById');\n\n            await strategy.deinitialize(initializeOptions);\n\n            expect(mollieElement.unmount).toHaveBeenCalledTimes(4);\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('finalize mollie', async () => {\n            const promise = strategy.finalize();\n\n            await expect(promise).resolves.toBeUndefined();\n        });\n    });\n\n    describe('#deinitialize', () => {\n        let options: PaymentInitializeOptions;\n        const initializeOptions = { methodId: 'credit_card', gatewayId: 'mollie' };\n\n        beforeEach(() => {\n            options = getInitializeOptions();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getMollie());\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValue({\n                ...storeConfigMock,\n                storeProfile: { ...storeConfigMock.storeProfile, storeLanguage: 'en_US' },\n            });\n        });\n\n        it('deinitialize mollie payment strategy', async () => {\n            await strategy.initialize(options);\n\n            jest.runAllTimers();\n\n            expect(mollieClient.createComponent).toHaveBeenCalledTimes(4);\n            expect(mollieElement.mount).toHaveBeenCalledTimes(4);\n\n            jest.spyOn(document, 'getElementById');\n\n            const promise = strategy.deinitialize(initializeOptions);\n\n            expect(document.querySelectorAll).toHaveBeenNthCalledWith(\n                1,\n                '.mollie-components-controller',\n            );\n\n            await expect(promise).resolves.toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/mollie-integration/src/mollie-payment-strategy.ts",
    "content": "import { each, some } from 'lodash';\n\nimport {\n    getBrowserInfo,\n    HostedForm,\n    HostedFormOptions,\n    InvalidArgumentError,\n    isHostedInstrumentLike,\n    isRequestError,\n    isVaultedInstrument,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { MollieClient, MollieElement } from './mollie';\nimport MolliePaymentInitializeOptions, {\n    WithMolliePaymentInitializeOptions,\n} from './mollie-payment-initialize-options';\nimport MollieScriptLoader from './mollie-script-loader';\n\nexport enum MolliePaymentMethodType {\n    CREDIT_CARD = 'credit_card',\n}\n\nconst methodsNotAllowedWhenDigitalOrder = ['klarnapaylater', 'klarnasliceit'];\n\nexport default class MolliePaymentStrategy implements PaymentStrategy {\n    private initializeOptions?: MolliePaymentInitializeOptions;\n    private mollieClient?: MollieClient;\n    private cardHolderElement?: MollieElement;\n    private cardNumberElement?: MollieElement;\n    private verificationCodeElement?: MollieElement;\n    private expiryDateElement?: MollieElement;\n    private locale?: string;\n\n    private hostedForm?: HostedForm;\n\n    private unsubscribe?: () => void;\n\n    constructor(\n        private mollieScriptLoader: MollieScriptLoader,\n        private paymentIntegrationService: PaymentIntegrationService,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithMolliePaymentInitializeOptions,\n    ): Promise<void> {\n        const { mollie, methodId, gatewayId } = options;\n\n        if (!mollie) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.mollie\" argument is not provided.',\n            );\n        }\n\n        if (!methodId || !gatewayId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"methodId\" and/or \"gatewayId\" argument is not provided.',\n            );\n        }\n\n        const controllers = document.querySelectorAll('.mollie-components-controller');\n\n        each(controllers, (controller) => controller.remove());\n\n        const state = this.paymentIntegrationService.getState();\n        const storeConfig = state.getStoreConfigOrThrow();\n\n        this.initializeOptions = mollie;\n\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId, gatewayId);\n\n        const {\n            config: { merchantId, testMode },\n        } = paymentMethod;\n\n        this.locale = state.getLocale();\n\n        if (!merchantId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        if (\n            this.isCreditCard(methodId) &&\n            mollie.form &&\n            this.shouldShowTSVHostedForm(methodId, gatewayId)\n        ) {\n            this.hostedForm = await this.mountCardVerificationfields(mollie.form);\n        } else if (this.isCreditCard(methodId)) {\n            this.mollieClient = await this.loadMollieJs(\n                merchantId,\n                storeConfig.storeProfile.storeLanguage,\n                testMode,\n            );\n            this.mountElements();\n        }\n\n        this.unsubscribe = () => {\n            if (\n                this.paymentIntegrationService.getState().isPaymentMethodInitialized({\n                    methodId: options.methodId,\n                    gatewayId: options.gatewayId,\n                })\n            ) {\n                const element = document.getElementById(`${gatewayId}-${methodId}-paragraph`);\n\n                if (element) {\n                    element.remove();\n                }\n\n                mollie.disableButton(false);\n\n                this.loadPaymentMethodsAllowed(mollie, methodId, gatewayId);\n            }\n        };\n\n        this.unsubscribe();\n\n        this.loadPaymentMethodsAllowed(mollie, methodId, gatewayId);\n\n        return Promise.resolve();\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n        const paymentData = payment?.paymentData;\n\n        if (!payment || !payment.gatewayId || !paymentData) {\n            throw new PaymentArgumentInvalidError(['payment', 'gatewayId', 'paymentData']);\n        }\n\n        try {\n            await this.paymentIntegrationService.submitOrder(order, options);\n\n            if (isVaultedInstrument(paymentData)) {\n                return await this.executeWithVaulted(payment);\n            }\n\n            if (this.isCreditCard(payment.methodId)) {\n                return await this.executeWithCC(payment);\n            }\n\n            return await this.executeWithAPM(payment);\n        } catch (error) {\n            await this.processAdditionalAction(error);\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    deinitialize(options?: PaymentRequestOptions): Promise<void> {\n        if (this.unsubscribe) {\n            this.unsubscribe();\n        }\n\n        if (this.hostedForm) {\n            this.hostedForm.detach();\n        }\n\n        if (options && options.methodId && options.gatewayId && !this.hostedForm) {\n            const element = document.getElementById(`${options.gatewayId}-${options.methodId}`);\n\n            if (element) {\n                element.remove();\n            }\n        } else if (options && options.methodId && this.isCreditCard(options.methodId)) {\n            if (\n                this.cardHolderElement &&\n                this.cardNumberElement &&\n                this.verificationCodeElement &&\n                this.expiryDateElement\n            ) {\n                this.cardHolderElement.unmount();\n                this.cardHolderElement = undefined;\n\n                this.cardNumberElement.unmount();\n                this.cardNumberElement = undefined;\n\n                this.verificationCodeElement.unmount();\n                this.verificationCodeElement = undefined;\n\n                this.expiryDateElement.unmount();\n                this.expiryDateElement = undefined;\n            }\n        }\n\n        this.mollieClient = undefined;\n\n        return Promise.resolve();\n    }\n\n    protected async executeWithCC(payment: OrderPaymentRequestBody): Promise<void> {\n        const paymentData = payment.paymentData;\n\n        const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n            isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n        const { token, error } = await this.getMollieClient().createToken();\n\n        /* eslint-disable */\n        if (error) {\n            return Promise.reject(error);\n        }\n\n        const formattedPayload = {\n            credit_card_token: {\n                token,\n            },\n            vault_payment_instrument: shouldSaveInstrument,\n            set_as_default_stored_instrument: shouldSetAsDefaultInstrument,\n            browser_info: getBrowserInfo(),\n            shopper_locale: this.getShopperLocale(),\n        };\n        /* eslint-enable */\n\n        await this.paymentIntegrationService.submitPayment({\n            ...payment,\n            paymentData: {\n                formattedPayload,\n            },\n        });\n    }\n\n    protected async executeWithVaulted(payment: OrderPaymentRequestBody): Promise<void> {\n        if (this.isHostedPaymentFormEnabled(payment.methodId, payment.gatewayId)) {\n            const form = this.hostedForm;\n\n            if (!form) {\n                throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n            }\n\n            await form.validate();\n            await form.submit(payment);\n\n            await this.paymentIntegrationService.loadCurrentOrder();\n        } else {\n            await this.paymentIntegrationService.submitPayment(payment);\n        }\n    }\n\n    protected async executeWithAPM(payment: OrderPaymentRequestBody): Promise<void> {\n        const paymentData = payment.paymentData;\n        const issuer = paymentData && 'issuer' in paymentData ? paymentData.issuer : '';\n\n        await this.paymentIntegrationService.submitPayment({\n            ...payment,\n            paymentData: {\n                ...paymentData,\n                formattedPayload: {\n                    issuer,\n                    // eslint-disable-next-line @typescript-eslint/naming-convention\n                    shopper_locale: this.getShopperLocale(),\n                },\n            },\n        });\n    }\n\n    private isCreditCard(methodId: string): boolean {\n        return methodId === MolliePaymentMethodType.CREDIT_CARD;\n    }\n\n    private shouldShowTSVHostedForm(methodId: string, gatewayId: string): boolean {\n        return (\n            this.isHostedPaymentFormEnabled(methodId, gatewayId) && this.isHostedFieldAvailable()\n        );\n    }\n\n    private mountCardVerificationfields(formOptions: HostedFormOptions): Promise<HostedForm> {\n        /* eslint-disable */\n        return new Promise(async (resolve, reject) => {\n            try {\n                const config = this.paymentIntegrationService.getState().getStoreConfig();\n                const bigpayBaseUrl = config?.paymentSettings.bigpayBaseUrl;\n\n                if (!bigpayBaseUrl) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n                }\n\n                const form = this.paymentIntegrationService.createHostedForm(\n                    bigpayBaseUrl,\n                    formOptions\n                );\n\n                await form.attach();\n\n                resolve(form);\n            } catch (error) {\n                reject(error);\n            }\n        });\n    }\n\n    private isHostedPaymentFormEnabled(methodId: string, gatewayId?: string): boolean {\n        const { getPaymentMethodOrThrow } = this.paymentIntegrationService.getState();\n        const paymentMethod = getPaymentMethodOrThrow(methodId, gatewayId);\n\n        return paymentMethod.config.isHostedFormEnabled === true;\n    }\n\n    private isHostedFieldAvailable(): boolean {\n        const options = this.getInitializeOptions();\n\n        return !!options.form?.fields;\n    }\n\n    private processAdditionalAction(error: any): Promise<unknown> {\n        if (!isRequestError(error)) {\n            return Promise.reject(error);\n        }\n\n        if (some(error.body.errors, {code: 'additional_action_required'})) {\n            const { additional_action_required: { data : { redirect_url } } } = error.body;\n\n            return new Promise(() => window.location.replace(redirect_url));\n        }\n\n        return Promise.reject(error);\n    }\n\n    private getInitializeOptions(): MolliePaymentInitializeOptions {\n        if (!this.initializeOptions) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.initializeOptions;\n    }\n\n    private loadMollieJs(merchantId: string, locale: string, testmode = false): Promise<MollieClient> {\n        if (this.mollieClient) {\n            return Promise.resolve(this.mollieClient);\n        }\n\n        return this.mollieScriptLoader\n            .load(merchantId, locale, testmode);\n    }\n\n    private getMollieClient(): MollieClient {\n        if (!this.mollieClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.mollieClient;\n    }\n\n    private getShopperLocale(): string {\n        if (!this.locale) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.locale;\n    }\n\n    /**\n     * ContainerId is use in Mollie for determined either its showing or not the\n     * container, because when Mollie has Vaulted Instruments it gets hide,\n     * and shows an error because can't mount Provider Components\n     *\n     * We had to add a settimeout because Mollie sets de tab index after mounting\n     * each component, but without a setTimeOut Mollie is not able to find the\n     * components as they are hidden so we need to wait until they are shown\n     */\n    private mountElements() {\n        const { containerId, cardNumberId, cardCvcId, cardExpiryId, cardHolderId, styles } = this.getInitializeOptions();\n        let container: HTMLElement | null;\n\n        if (containerId) {\n            container = document.getElementById(containerId);\n        }\n\n        setTimeout(() => {\n            if (!containerId || container?.style.display !== 'none') {\n                const mollieClient = this.getMollieClient();\n\n                this.cardHolderElement = mollieClient.createComponent('cardHolder', { styles });\n                this.cardHolderElement.mount(`#${cardHolderId}`);\n\n                this.cardNumberElement = mollieClient.createComponent('cardNumber', { styles });\n                this.cardNumberElement.mount(`#${cardNumberId}`);\n\n                this.verificationCodeElement = mollieClient.createComponent('verificationCode', { styles });\n                this.verificationCodeElement.mount(`#${cardCvcId}`);\n\n                this.expiryDateElement = mollieClient.createComponent('expiryDate', { styles });\n                this.expiryDateElement.mount(`#${cardExpiryId}`);\n            }\n        }, 0);\n    }\n\n    private loadPaymentMethodsAllowed(mollie: MolliePaymentInitializeOptions, methodId: string, gatewayId: string){\n        if (methodsNotAllowedWhenDigitalOrder.includes(methodId)) {\n            const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n            const cartDigitalItems = cart.lineItems?.digitalItems;\n\n            if (cartDigitalItems && cartDigitalItems.length > 0) {\n                const { containerId } = this.getInitializeOptions();\n\n                if (containerId) {\n                    const container = document.getElementById(containerId);\n\n                    if (container) {\n                        const paragraph = document.createElement('p') ;\n                        paragraph.setAttribute(\"id\",`${gatewayId}-${methodId}-paragraph`)\n\n                        if (mollie.unsupportedMethodMessage) {\n                            paragraph.innerText = mollie.unsupportedMethodMessage;\n                            container.appendChild(paragraph);\n                            mollie.disableButton(true);\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/mollie-integration/src/mollie-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport isMollieWindow from './is-mollie-window';\nimport { MollieClient } from './mollie';\n\nexport default class MollieScriptLoader {\n    constructor(private scriptLoader: ScriptLoader, private mollieHostWindow: Window = window) {}\n\n    async load(merchantId: string, locale: string, testmode: boolean): Promise<MollieClient> {\n        await this.scriptLoader.loadScript('https://js.mollie.com/v1/mollie.js');\n\n        if (!isMollieWindow(this.mollieHostWindow)) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.mollieHostWindow.Mollie(merchantId, {\n            locale,\n            testmode,\n        });\n    }\n}\n"
  },
  {
    "path": "packages/mollie-integration/src/mollie.mock.ts",
    "content": "import {\n    HostedFieldType,\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { MollieClient } from './mollie';\n\nexport function getInitializeOptions(): PaymentInitializeOptions {\n    return {\n        methodId: 'credit_card',\n        gatewayId: 'mollie',\n        mollie: {\n            containerId: 'mollie-element',\n            cardCvcId: 'mollie-card-cvc-component-field',\n            cardExpiryId: 'mollie-card-expiry-component-field',\n            cardHolderId: 'mollie-card-holder-component-field',\n            cardNumberId: 'mollie-card-number-component-field',\n            styles: { valid: '#0f0' },\n            unsupportedMethodMessage: 'This payment method is not supported',\n            disableButton: jest.fn(),\n        },\n    };\n}\n\nexport function getHostedFormInitializeOptions(): PaymentInitializeOptions {\n    return {\n        methodId: 'credit_card',\n        gatewayId: 'mollie',\n        mollie: {\n            containerId: 'mollie-element',\n            cardCvcId: 'mollie-card-cvc-component-field',\n            cardExpiryId: 'mollie-card-expiry-component-field',\n            cardHolderId: 'mollie-card-holder-component-field',\n            cardNumberId: 'mollie-card-number-component-field',\n            styles: { valid: '#0f0' },\n            form: {\n                fields: {\n                    [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                    [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                    [HostedFieldType.CardName]: { containerId: 'card-name' },\n                },\n            },\n            unsupportedMethodMessage: 'This payment method is not supported',\n            disableButton: jest.fn(),\n        },\n    };\n}\n\nexport function getMollieClient(): MollieClient {\n    return {\n        createComponent: jest.fn(() => {\n            return {\n                addEventListener: jest.fn(),\n                mount: jest.fn(),\n                unmount: jest.fn(),\n            };\n        }),\n\n        createToken: jest.fn(() => {\n            return Promise.resolve({ token: 'test_t0k3n' });\n        }),\n    };\n}\n\nexport function getOrderRequestBodyWithoutPayment(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: undefined,\n    };\n}\n\nexport function getOrderRequestBodyWithCreditCard(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: {\n            methodId: 'credit_card',\n            gatewayId: 'mollie',\n            paymentData: {},\n        },\n    };\n}\n\nexport function getOrderRequestBodyAPMs(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: {\n            methodId: 'belfius',\n            gatewayId: 'mollie',\n            paymentData: {\n                issuer: 'foo',\n                // eslint-disable-next-line @typescript-eslint/naming-convention\n                shopper_locale: 'en-US',\n            },\n        },\n    };\n}\n\nexport function getOrderRequestBodyVaultAPMs(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: {\n            methodId: 'belfius',\n            gatewayId: 'mollie',\n            paymentData: {\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: false,\n            },\n        },\n    };\n}\n\nexport function getOrderRequestBodyVaultCC(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: {\n            methodId: 'credit_card',\n            gatewayId: 'mollie',\n            paymentData: {\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: true,\n            },\n        },\n    };\n}\n\nexport function getOrderRequestBodyVaultedCC(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: {\n            methodId: 'credit_card',\n            gatewayId: 'mollie',\n            paymentData: {\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: true,\n                instrumentId: '1234',\n            },\n        },\n    };\n}\n\nexport function getMollie(): PaymentMethod {\n    return {\n        id: 'mollie',\n        gateway: '',\n        logoUrl:\n            'https://charlsieremade-cloud-dev-vm.store.bcdev/rHEAD/modules/checkout/mollie/images/mollie.png',\n        method: 'multi-options',\n        supportedCards: ['VISA', 'AMEX', 'MC', 'MAESTRO'],\n        config: {\n            displayName: 'Mollie',\n            hasDefaultStoredInstrument: false,\n            helpText: '',\n            is3dsEnabled: false,\n            isHostedFormEnabled: true,\n            isVaultingCvvEnabled: false,\n            isVaultingEnabled: false,\n            isVisaCheckoutEnabled: false,\n            merchantId: 'test_T0k3n',\n            requireCustomerCode: false,\n            testMode: true,\n        },\n        initializationData: {\n            locale: 'en-US',\n        },\n        type: 'PAYMENT_TYPE_API',\n    };\n}\n"
  },
  {
    "path": "packages/mollie-integration/src/mollie.ts",
    "content": "export interface MollieClient {\n    createComponent(type: string, options?: object): MollieElement;\n    createToken(): Promise<MollieToken>;\n}\n\nexport interface MollieToken {\n    token: string;\n    error?: object;\n}\n\nexport interface MollieConfigurationOptions {\n    locale: string;\n    testmode: boolean;\n}\n\nexport interface MollieHostWindow extends Window {\n    Mollie(publishableKey: string, options: MollieConfigurationOptions): MollieClient;\n}\n\nexport interface MollieElement {\n    /**\n     * The `element.mount` method attaches your element to the DOM.\n     */\n    mount(domElement: string | HTMLElement): void;\n\n    /**\n     * Unmounts the element from the DOM.\n     * Call `element.mount` to re-attach it to the DOM.\n     */\n    unmount(): void;\n\n    /**\n     * Components can listen to several events.\n     * The callback receives an object with all the related information.\n     * blur | focus | change\n     */\n    addEventListener(event: 'blur' | 'focus' | 'change', callback: (event: Event) => void): void;\n}\n"
  },
  {
    "path": "packages/mollie-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/mollie-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/mollie-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/moneris-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.test.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/moneris-integration/README.md",
    "content": "# moneris-integration\n\nThis package contains the integration layer for the [Moneris](https://www.moneris.com/) provider.\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test moneris-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint moneris-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/moneris-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'moneris-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/moneris-integration',\n};\n"
  },
  {
    "path": "packages/moneris-integration/project.json",
    "content": "{\n    \"name\": \"moneris-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/moneris-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/moneris-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/moneris-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/moneris-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/moneris-integration/src/create-moneris-payment-strategy.test.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createMonerisPaymentStrategy from './create-moneris-payment-strategy';\nimport MonerisPaymentStrategy from './moneris-payment-strategy';\n\ndescribe('createMonerisPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates Moneris payment strategy', () => {\n        const strategy = createMonerisPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(MonerisPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/moneris-integration/src/create-moneris-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport MonerisPaymentStrategy from './moneris-payment-strategy';\n\nconst createMonerisPaymentStrategy: PaymentStrategyFactory<MonerisPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new MonerisPaymentStrategy(paymentIntegrationService);\n};\n\nexport default toResolvableModule(createMonerisPaymentStrategy, [{ id: 'moneris' }]);\n"
  },
  {
    "path": "packages/moneris-integration/src/index.ts",
    "content": "export { default as createMonerisPaymentStrategy } from './create-moneris-payment-strategy';\n"
  },
  {
    "path": "packages/moneris-integration/src/moneris-payment-initialize-options.ts",
    "content": "import { HostedFormOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport MonerisStylingProps from './moneris';\n\n/**\n * A set of options that are required to initialize the Moneris payment method.\n *\n * Once Moneris payment is initialized, a credit card payment form is provided by the\n * payment provider as an IFrame, it will be inserted into the current page. These\n * options provide a location and styling for the payment form.\n *\n * ```js\n * service.initializePayment({\n *      methodId: 'moneris',\n *      moneris: {\n *          containerId: 'container',\n *          style : {\n *              cssBody: 'background:white;';\n *              cssTextbox: 'border-width:2px;';\n *              cssTextboxCardNumber: 'width:140px;';\n *              cssTextboxExpiryDate: 'width:40px;';\n *              cssTextboxCVV: 'width:40px';\n *          }\n *      }\n * });\n * ```\n */\nexport default interface MonerisPaymentInitializeOptions {\n    /**\n     * The ID of a container where the Moneris iframe component should be mounted\n     */\n    containerId: string;\n\n    /**\n     * The styling props to apply to the iframe component\n     */\n    style?: MonerisStylingProps;\n\n    /**\n     * Hosted Form Validation Options\n     */\n    form?: HostedFormOptions;\n}\n\nexport interface WithMonerisPaymentInitializeOptions {\n    moneris?: MonerisPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/moneris-integration/src/moneris-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getMoneris(): PaymentMethod {\n    return {\n        id: 'moneris',\n        gateway: '',\n        logoUrl: '',\n        method: 'moneris',\n        supportedCards: [],\n        config: {\n            isHostedFormEnabled: false,\n            displayName: 'Moneris',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        initializationData: {\n            profileId: 'ABC123',\n            creditCardLabel: 'Credit Card',\n            expiryDateLabel: 'Expiration Date',\n            cvdLabel: 'CVV',\n        },\n    };\n}\n"
  },
  {
    "path": "packages/moneris-integration/src/moneris-payment-strategy.test.ts",
    "content": "import { merge } from 'lodash';\n\nimport {\n    Checkout,\n    HostedFieldType,\n    HostedForm,\n    InvalidArgumentError,\n    MissingDataError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCheckout,\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { WithMonerisPaymentInitializeOptions } from './moneris-payment-initialize-options';\nimport { getMoneris } from './moneris-payment-method.mock';\nimport MonerisPaymentStrategy from './moneris-payment-strategy';\nimport { getHostedFormInitializeOptions, getOrderRequestBodyVaultedCC } from './moneris.mock';\n\ndescribe('MonerisPaymentStrategy', () => {\n    const containerId = 'moneris_iframe_container';\n    const iframeId = 'moneris-payment-iframe';\n    let checkoutMock: Checkout;\n    let container: HTMLDivElement;\n    let initializeOptions: PaymentInitializeOptions;\n    let options: PaymentInitializeOptions;\n    let payload: OrderRequestBody;\n    let paymentMethodMock: PaymentMethod;\n    let strategy: MonerisPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentMethodMock = getMoneris();\n\n        initializeOptions = {\n            methodId: 'moneris',\n            moneris: {\n                containerId,\n            },\n        };\n\n        checkoutMock = getCheckout();\n\n        options = { methodId: 'moneris' };\n        payload = merge(getOrderRequestBody(), {\n            payment: {\n                methodId: 'moneris',\n                paymentData: null,\n            },\n        });\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        container = document.createElement('div');\n        container.setAttribute('id', containerId);\n        document.body.appendChild(container);\n\n        jest.spyOn(document, 'getElementById');\n        jest.spyOn(document, 'createElement');\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n            checkoutMock,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'applyStoreCredit').mockImplementation(jest.fn());\n\n        jest.spyOn(window, 'removeEventListener');\n\n        strategy = new MonerisPaymentStrategy(paymentIntegrationService);\n    });\n\n    afterEach(() => {\n        document.body.removeChild(container);\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize', () => {\n        it('successfully initializes moneris strategy and creates the iframe', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(document.getElementById).toHaveBeenCalledWith(containerId);\n            expect(document.createElement).toHaveBeenCalledWith('iframe');\n        });\n\n        it('only creates the iframe once when tryng to initialize more than once', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.initialize(initializeOptions);\n\n            expect(document.getElementById).toHaveBeenCalledWith(containerId);\n            expect(container.childElementCount).toBe(1);\n        });\n\n        it('initializes moneris iframe and sets src to the live environment', async () => {\n            paymentMethodMock.config.testMode = false;\n\n            await strategy.initialize(initializeOptions);\n\n            const iframe = document.getElementById(iframeId) as HTMLIFrameElement;\n\n            expect(iframe).toBeTruthy();\n            expect(iframe.src).toContain('www3.moneris.com');\n        });\n\n        it('initializes moneris iframe and sets src to the test environment', async () => {\n            paymentMethodMock.config.testMode = true;\n\n            await strategy.initialize(initializeOptions);\n\n            const iframe = document.getElementById(iframeId) as HTMLIFrameElement;\n\n            expect(iframe).toBeTruthy();\n            expect(iframe.src).toContain('esqa.moneris.com');\n        });\n\n        it('initialize moneris iframe and sets data labels from initialization data', async () => {\n            paymentMethodMock.config.testMode = true;\n\n            await strategy.initialize(initializeOptions);\n\n            const iframe = document.getElementById(iframeId) as HTMLIFrameElement;\n\n            expect(iframe).toBeTruthy();\n            expect(iframe.src).toContain(\n                'pan_label=Credit%20Card&exp_label=Expiration%20Date&cvd_label=CVV',\n            );\n        });\n\n        it('initialize moneris iframe and sets data labels if initialization data is null', async () => {\n            paymentMethodMock.config.testMode = true;\n            paymentMethodMock.initializationData = { profileId: 'ABC123' };\n\n            await strategy.initialize(initializeOptions);\n\n            const iframe = document.getElementById(iframeId) as HTMLIFrameElement;\n\n            expect(iframe).toBeTruthy();\n            expect(iframe.src).toContain(\n                'pan_label=Credit%20Card%20Number&exp_label=Expiration&cvd_label=CVD',\n            );\n        });\n\n        it('initialize moneris iframe and sets expiry field', async () => {\n            paymentMethodMock.config.testMode = true;\n\n            await strategy.initialize(initializeOptions);\n\n            const iframe = document.getElementById(iframeId) as HTMLIFrameElement;\n\n            expect(iframe).toBeTruthy();\n            expect(iframe.src).toContain('enable_exp=1');\n        });\n\n        it('initialize moneris iframe and sets cvv field', async () => {\n            paymentMethodMock.config.testMode = true;\n\n            await strategy.initialize(initializeOptions);\n\n            const iframe = document.getElementById(iframeId) as HTMLIFrameElement;\n\n            expect(iframe).toBeTruthy();\n            expect(iframe.src).toContain('enable_cvd=1');\n        });\n\n        it('initialize moneris iframe and sets labels enabled', async () => {\n            paymentMethodMock.config.testMode = true;\n\n            await strategy.initialize(initializeOptions);\n\n            const iframe = document.getElementById(iframeId) as HTMLIFrameElement;\n\n            expect(iframe).toBeTruthy();\n            expect(iframe.src).toContain('display_labels=1');\n        });\n\n        it('initialize moneris iframe and sets hosted fields css', async () => {\n            paymentMethodMock.config.testMode = true;\n\n            await strategy.initialize(initializeOptions);\n\n            const iframe = document.getElementById(iframeId) as HTMLIFrameElement;\n\n            expect(iframe).toBeTruthy();\n            expect(iframe.src).toContain('css_body=');\n            expect(iframe.src).toContain('css_textbox=');\n            expect(iframe.src).toContain('css_textbox_pan=');\n            expect(iframe.src).toContain('css_textbox_exp=');\n            expect(iframe.src).toContain('css_textbox_cvd=');\n            expect(iframe.src).toContain('css_input_label=');\n        });\n\n        it('fails to initialize moneris strategy when initialization options are not provided', async () => {\n            initializeOptions.moneris = undefined;\n\n            await expect(strategy.initialize(initializeOptions)).rejects.toThrow(\n                InvalidArgumentError,\n            );\n\n            const iframe = document.getElementById(iframeId) as HTMLIFrameElement;\n\n            expect(iframe).toBeFalsy();\n        });\n\n        it('fails to initialize moneris strategy when initialization data is missing', async () => {\n            paymentMethodMock.initializationData = undefined;\n\n            await expect(strategy.initialize(initializeOptions)).rejects.toThrow(MissingDataError);\n\n            const iframe = document.getElementById(iframeId) as HTMLIFrameElement;\n\n            expect(iframe).toBeFalsy();\n        });\n    });\n\n    describe('#execute', () => {\n        it('throws error when moneris response is not successful', async () => {\n            await strategy.initialize(initializeOptions);\n\n            const promise = strategy.execute(payload, options);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            const mockMonerisIframeMessage = {\n                responseCode: ['400'],\n                errorMessage: 'expected error message',\n                dataKey: 'ABC123',\n                bin: '1234',\n            };\n\n            window.dispatchEvent(\n                new MessageEvent('message', {\n                    origin: 'https://www3.moneris.com',\n                    data: JSON.stringify(mockMonerisIframeMessage),\n                }),\n            );\n            await expect(promise).rejects.toThrow(new Error('expected error message'));\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('successfully executes moneris strategy and submits payment', async () => {\n            const expectedPayment = {\n                methodId: 'moneris',\n                paymentData: {\n                    nonce: 'ABC123',\n                    shouldSaveInstrument: undefined,\n                    shouldSetAsDefaultInstrument: undefined,\n                },\n            };\n\n            checkoutMock.isStoreCreditApplied = true;\n            await strategy.initialize(initializeOptions);\n\n            const promise = strategy.execute(payload, options);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            const mockMonerisIframeMessage = {\n                responseCode: ['001'],\n                errorMessage: null,\n                dataKey: 'ABC123',\n                bin: '1234',\n            };\n\n            window.dispatchEvent(\n                new MessageEvent('message', {\n                    origin: 'https://www3.moneris.com',\n                    data: JSON.stringify(mockMonerisIframeMessage),\n                }),\n            );\n\n            await promise;\n            expect(paymentIntegrationService.applyStoreCredit).toHaveBeenCalledWith(true);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        it('submits payment with vaulted card', async () => {\n            const expectedPayment = {\n                methodId: 'moneris',\n                paymentData: {\n                    instrumentId: '1234',\n                    shouldSaveInstrument: true,\n                    shouldSetAsDefaultInstrument: true,\n                },\n            };\n\n            await strategy.initialize(initializeOptions);\n\n            const pendingExecution = strategy.execute(getOrderRequestBodyVaultedCC(), options);\n            const mockMonerisIframeMessage = {\n                responseCode: ['001'],\n                errorMessage: null,\n                dataKey: 'ABC123',\n                bin: '1234',\n            };\n\n            window.postMessage(JSON.stringify(mockMonerisIframeMessage), '*');\n            await pendingExecution;\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        it('Moneris returns an object instead of a stringify JSON', async () => {\n            const expectedPayment = {\n                methodId: 'moneris',\n                paymentData: {\n                    instrumentId: '1234',\n                    shouldSaveInstrument: true,\n                    shouldSetAsDefaultInstrument: true,\n                },\n            };\n\n            await strategy.initialize(initializeOptions);\n\n            const pendingExecution = strategy.execute(getOrderRequestBodyVaultedCC(), options);\n            const mockMonerisIframeMessage = {\n                responseCode: ['001'],\n                errorMessage: null,\n                dataKey: 'ABC123',\n                bin: '1234',\n            };\n\n            window.postMessage(mockMonerisIframeMessage, '*');\n            await pendingExecution;\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        it('submits payment and sends shouldSaveInstrument and shouldSetAsDefaultInstrument if provided', async () => {\n            const expectedPayment = {\n                methodId: 'moneris',\n                paymentData: {\n                    nonce: 'ABC123',\n                    shouldSaveInstrument: true,\n                    shouldSetAsDefaultInstrument: true,\n                },\n            };\n            const vaultingPayload = merge(payload, {\n                payment: {\n                    paymentData: { shouldSaveInstrument: true, shouldSetAsDefaultInstrument: true },\n                },\n            });\n\n            await strategy.initialize(initializeOptions);\n\n            const pendingExecution = strategy.execute(vaultingPayload, options);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            const mockMonerisIframeMessage = {\n                responseCode: ['001'],\n                errorMessage: null,\n                dataKey: 'ABC123',\n                bin: '1234',\n            };\n\n            window.dispatchEvent(\n                new MessageEvent('message', {\n                    origin: 'https://www3.moneris.com',\n                    data: JSON.stringify(mockMonerisIframeMessage),\n                }),\n            );\n\n            await pendingExecution;\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        it('submits payment with intrument if provided', async () => {\n            const expectedPayment = {\n                methodId: 'moneris',\n                paymentData: {\n                    instrumentId: 'instrument_123',\n                },\n            };\n            const vaultingPayload = merge(payload, {\n                payment: { paymentData: { instrumentId: 'instrument_123' } },\n            });\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(vaultingPayload, options);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        it('fails to executes moneris strategy when payment is not provided', async () => {\n            payload.payment = undefined;\n            await strategy.initialize(initializeOptions);\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentArgumentInvalidError);\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('fails to executes moneris strategy when the strategy is not previously initialized', async () => {\n            await expect(strategy.execute(payload)).rejects.toThrow(NotInitializedError);\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('When Hosted Form is enabled', () => {\n        let form: HostedForm;\n        let hostedFormInitializeOptions: PaymentInitializeOptions &\n            WithMonerisPaymentInitializeOptions;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                submit: jest.fn(),\n                validate: jest.fn(() => Promise.resolve()),\n                detach: jest.fn(),\n                getBin: jest.fn(),\n                getCardType: jest.fn(),\n            };\n            hostedFormInitializeOptions = getHostedFormInitializeOptions();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(merge(getMoneris(), { config: { isHostedFormEnabled: true } }));\n            jest.spyOn(paymentIntegrationService, 'loadCurrentOrder').mockImplementation(jest.fn());\n            jest.spyOn(paymentIntegrationService, 'createHostedForm').mockReturnValue(form);\n        });\n\n        it('creates hosted form', async () => {\n            await strategy.initialize(hostedFormInitializeOptions);\n\n            expect(paymentIntegrationService.createHostedForm).toHaveBeenCalledWith(\n                'https://bigpay.integration.zone',\n                hostedFormInitializeOptions.moneris?.form,\n            );\n        });\n\n        it('attaches hosted form to container', async () => {\n            await strategy.initialize(hostedFormInitializeOptions);\n\n            expect(form.attach).toHaveBeenCalled();\n        });\n\n        it('submits payment data with hosted form', async () => {\n            payload = getOrderRequestBodyVaultedCC();\n\n            await strategy.initialize(hostedFormInitializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.submit).toHaveBeenCalledWith(payload.payment);\n        });\n\n        it('validates user input before submitting data', async () => {\n            payload = getOrderRequestBodyVaultedCC();\n\n            await strategy.initialize(hostedFormInitializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.validate).toHaveBeenCalled();\n        });\n\n        it('does not submit payment data with hosted form if validation fails', async () => {\n            jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n            await strategy.initialize(hostedFormInitializeOptions);\n\n            await expect(strategy.execute(getOrderRequestBodyVaultedCC())).rejects.toThrow();\n            expect(form.submit).not.toHaveBeenCalled();\n        });\n\n        it('submits payment without hosted form if no fields are required', async () => {\n            const expectedPayment = {\n                methodId: 'moneris',\n                paymentData: {\n                    instrumentId: '1234',\n                    shouldSaveInstrument: true,\n                    shouldSetAsDefaultInstrument: true,\n                },\n            };\n\n            const noFieldPayload = {\n                methodId: 'moneris',\n                moneris: {\n                    containerId: 'moneris_iframe_container',\n                    form: {\n                        fields: {\n                            [HostedFieldType.CardCodeVerification]: undefined,\n                            [HostedFieldType.CardNumberVerification]: undefined,\n                        },\n                    },\n                },\n            };\n\n            payload = getOrderRequestBodyVaultedCC();\n\n            await strategy.initialize(noFieldPayload);\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n            expect(form.submit).not.toHaveBeenCalled();\n        });\n\n        it('should detach hostedForm on Deinitialize', async () => {\n            await strategy.initialize(hostedFormInitializeOptions);\n            await strategy.deinitialize();\n\n            expect(form.detach).toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy and removes event listener if set', async () => {\n            await new Promise((resolve) => setTimeout(resolve, 0));\n            await strategy.initialize(initializeOptions);\n\n            const promise = strategy.execute(payload, options);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            const mockMonerisIframeMessage = {\n                responseCode: ['400'],\n                errorMessage: 'expected error message',\n                dataKey: 'ABC123',\n                bin: '1234',\n            };\n\n            window.dispatchEvent(\n                new MessageEvent('message', {\n                    origin: 'https://www3.moneris.com',\n                    data: JSON.stringify(mockMonerisIframeMessage),\n                }),\n            );\n            await expect(promise).rejects.toThrow(new Error('expected error message'));\n            await strategy.deinitialize();\n            expect(window.removeEventListener).toHaveBeenCalledWith(\n                'message',\n                expect.any(Function),\n            );\n        });\n        it('deinitializes strategy and removes the iframe if it exists', async () => {\n            await strategy.initialize(initializeOptions);\n\n            const mockMonerisIframeMessage = {\n                responseCode: ['001'],\n                errorMessage: null,\n                dataKey: 'ABC123',\n                bin: '1234',\n            };\n\n            window.dispatchEvent(\n                new MessageEvent('message', {\n                    origin: 'https://esqa.moneris.com',\n                    data: JSON.stringify(mockMonerisIframeMessage),\n                }),\n            );\n            await strategy.deinitialize();\n            expect(container.childElementCount).toBe(0);\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/moneris-integration/src/moneris-payment-strategy.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\nimport { isEmpty, map, omitBy } from 'lodash';\n\nimport {\n    HostedForm,\n    HostedFormOptions,\n    InvalidArgumentError,\n    isHostedInstrumentLike,\n    isVaultedInstrument,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport MonerisStylingProps, {\n    MoneriesHostedFieldsQueryParams,\n    MonerisInitializationData,\n    MonerisResponseData,\n} from './moneris';\nimport MonerisPaymentInitializeOptions, {\n    WithMonerisPaymentInitializeOptions,\n} from './moneris-payment-initialize-options';\n\nconst IFRAME_NAME = 'moneris-payment-iframe';\nconst RESPONSE_SUCCESS_CODE = '001';\n\nexport default class MonerisPaymentStrategy {\n    private iframe?: HTMLIFrameElement;\n    private initializeOptions?: MonerisPaymentInitializeOptions;\n    private windowEventListener?: (response: MessageEvent) => void;\n\n    private hostedForm?: HostedForm;\n    constructor(private paymentIntegrationService: PaymentIntegrationService) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithMonerisPaymentInitializeOptions,\n    ): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n\n        const { moneris: monerisOptions, methodId } = options;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"methodId\" argument is not provided.',\n            );\n        }\n\n        if (!monerisOptions) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.moneris\" argument is not provided.',\n            );\n        }\n\n        this.initializeOptions = monerisOptions;\n\n        const { config, initializationData } =\n            state.getPaymentMethodOrThrow<MonerisInitializationData>(methodId);\n\n        if (!initializationData?.profileId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        if (monerisOptions.form && this.shouldShowTSVHostedForm(methodId)) {\n            this.hostedForm = await this.mountCardVerificationfields(monerisOptions.form);\n        }\n\n        if (!this.iframe) {\n            this.iframe = this.createIframe(\n                monerisOptions.containerId,\n                initializationData,\n                !!config.testMode,\n            );\n        }\n\n        return Promise.resolve();\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentInitializeOptions): Promise<void> {\n        const { payment, ...order } = payload;\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const { isStoreCreditApplied: useStoreCredit } = this.paymentIntegrationService\n            .getState()\n            .getCheckoutOrThrow();\n\n        if (useStoreCredit) {\n            await this.paymentIntegrationService.applyStoreCredit(useStoreCredit);\n        }\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n\n        if (payment.paymentData && isVaultedInstrument(payment.paymentData)) {\n            await this.executeWithVaulted(payment);\n\n            return;\n        }\n\n        return this.executeWithCC(payment);\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        if (this.hostedForm) {\n            this.hostedForm.detach();\n        }\n\n        if (this.windowEventListener) {\n            window.removeEventListener('message', this.windowEventListener);\n            this.windowEventListener = undefined;\n        }\n\n        if (this.iframe && this.iframe.parentNode) {\n            this.iframe.parentNode.removeChild(this.iframe);\n            this.iframe = undefined;\n        }\n\n        return Promise.resolve();\n    }\n\n    private async executeWithCC(payment: OrderPaymentRequestBody): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(payment.methodId);\n\n        const testMode = paymentMethod.config.testMode;\n        const paymentData = payment.paymentData || {};\n\n        const instrumentSettings = isHostedInstrumentLike(paymentData)\n            ? paymentData\n            : { shouldSaveInstrument: false, shouldSetAsDefaultInstrument: false };\n\n        const { shouldSaveInstrument, shouldSetAsDefaultInstrument } = instrumentSettings;\n\n        const nonce = await new Promise<string | undefined>((resolve, reject) => {\n            if (!this.iframe) {\n                throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n            }\n\n            const frameref: Window | null = this.iframe.contentWindow;\n\n            if (frameref === null) {\n                throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n            }\n\n            frameref.postMessage('tokenize', this.monerisURL(!!testMode));\n\n            this.windowEventListener = (response: MessageEvent) => {\n                if (\n                    typeof response.data !== 'string' ||\n                    response.origin !== `https://${testMode ? 'esqa' : 'www3'}.moneris.com`\n                ) {\n                    return;\n                }\n\n                try {\n                    resolve(this.handleMonerisResponse(response));\n                } catch (error) {\n                    reject(error);\n                }\n            };\n\n            window.addEventListener('message', this.windowEventListener);\n        });\n\n        if (nonce !== undefined) {\n            await this.paymentIntegrationService.submitPayment({\n                methodId: payment.methodId,\n                paymentData: { nonce, shouldSaveInstrument, shouldSetAsDefaultInstrument },\n            });\n        }\n    }\n\n    private async executeWithVaulted(\n        payment: OrderPaymentRequestBody,\n    ): Promise<PaymentIntegrationSelectors> {\n        if (this.hostedForm) {\n            const form = this.hostedForm;\n\n            await form.validate();\n            await form.submit(payment);\n\n            return this.paymentIntegrationService.loadCurrentOrder();\n        }\n\n        return this.paymentIntegrationService.submitPayment(payment);\n    }\n\n    private shouldShowTSVHostedForm(methodId: string): boolean {\n        return this.isHostedPaymentFormEnabled(methodId) && this.isHostedFieldAvailable();\n    }\n\n    private isHostedPaymentFormEnabled(methodId: string): boolean {\n        const paymentMethod = this.paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow(methodId);\n\n        return Boolean(paymentMethod.config.isHostedFormEnabled);\n    }\n\n    private isHostedFieldAvailable(): boolean {\n        const options = this.getInitializeOptions();\n        const definedFields = omitBy(options.form?.fields, isEmpty);\n\n        return !isEmpty(definedFields);\n    }\n\n    private getInitializeOptions(): MonerisPaymentInitializeOptions {\n        if (!this.initializeOptions) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.initializeOptions;\n    }\n\n    private async mountCardVerificationfields(formOptions: HostedFormOptions): Promise<HostedForm> {\n        const bigpayBaseUrl = this.paymentIntegrationService.getState().getStoreConfig()\n            ?.paymentSettings.bigpayBaseUrl;\n\n        if (!bigpayBaseUrl) {\n            throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n        }\n\n        const form = this.paymentIntegrationService.createHostedForm(bigpayBaseUrl, formOptions);\n\n        await form.attach();\n\n        return form;\n    }\n\n    private createIframe(\n        containerId: string,\n        initializationData: MonerisInitializationData,\n        testMode: boolean,\n        style?: MonerisStylingProps,\n    ): HTMLIFrameElement {\n        const container = document.getElementById(containerId);\n\n        if (!container) {\n            throw new InvalidArgumentError('Unable to create iframe without valid container ID.');\n        }\n\n        const iframe: HTMLIFrameElement = document.createElement('iframe');\n        const monerisQueryParams: MoneriesHostedFieldsQueryParams = {\n            id: initializationData.profileId,\n            pmmsg: true,\n            display_labels: 1,\n            enable_exp: 1,\n            enable_cvd: 1,\n            css_body:\n                style?.cssBody ||\n                'font-family: Arial, Helvetica,sans-serif;background: transparent;',\n            css_textbox:\n                style?.cssTextbox ||\n                'border-radius:4px;border: 2px solid rgb(00,00,00);width: 100%;font-weight: 600;padding: 8px 8px;outline: 0;',\n            css_textbox_pan: style?.cssTextboxCardNumber || 'width: 240px;',\n            css_textbox_exp:\n                style?.cssTextboxExpiryDate || 'margin-bottom: 0;width: calc(30% - 12px);',\n            css_textbox_cvd: style?.cssTextboxCVV || 'margin-bottom: 0;width: calc(30% - 12px);',\n            css_input_label:\n                style?.cssInputLabel ||\n                'font-size: 10px;position: relative;top: 8px;left: 6px;background: rgb(255,255,255);padding: 3px 2px;color: rgb(66,66,66);font-weight: 600;z-index: 2;',\n            pan_label: initializationData.creditCardLabel || 'Credit Card Number',\n            exp_label: initializationData.expiryDateLabel || 'Expiration',\n            cvd_label: initializationData.cvdLabel || 'CVD',\n        };\n\n        // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n        const queryString = map(monerisQueryParams, (value, key) => `${key}=${value}`).join('&');\n\n        iframe.width = '100%';\n        iframe.height = '100%';\n        iframe.name = IFRAME_NAME;\n        iframe.id = IFRAME_NAME;\n        iframe.style.border = 'none';\n        iframe.src = `${this.monerisURL(testMode)}?${queryString}`;\n        iframe.allow = 'payment';\n\n        container.appendChild(iframe);\n\n        return iframe;\n    }\n\n    private handleMonerisResponse(response: MessageEvent): string {\n        const monerisResponse: MonerisResponseData = JSON.parse(response.data);\n\n        if (monerisResponse.responseCode[0] !== RESPONSE_SUCCESS_CODE) {\n            throw new Error(monerisResponse.errorMessage);\n        }\n\n        return monerisResponse.dataKey;\n    }\n\n    private monerisURL(testMode: boolean): string {\n        return `https://${testMode ? 'esqa' : 'www3'}.moneris.com/HPPtoken/index.php`;\n    }\n}\n"
  },
  {
    "path": "packages/moneris-integration/src/moneris.mock.ts",
    "content": "import {\n    HostedFieldType,\n    OrderRequestBody,\n    PaymentInitializeOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getHostedFormInitializeOptions(): PaymentInitializeOptions {\n    return {\n        methodId: 'moneris',\n        moneris: {\n            containerId: 'moneris_iframe_container',\n            form: {\n                fields: {\n                    [HostedFieldType.CardCodeVerification]: {\n                        containerId: 'card-code-veridifaction',\n                        instrumentId: 'instrument-id',\n                    },\n                    [HostedFieldType.CardNumberVerification]: {\n                        containerId: 'card-number-verification',\n                        instrumentId: 'instrument-id',\n                    },\n                },\n            },\n        },\n    };\n}\n\nexport function getOrderRequestBodyVaultedCC(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: {\n            methodId: 'moneris',\n            paymentData: {\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: true,\n                instrumentId: '1234',\n            },\n        },\n    };\n}\n"
  },
  {
    "path": "packages/moneris-integration/src/moneris.ts",
    "content": "/* eslint-disable @typescript-eslint/naming-convention */\n/**\n * A set of stringified CSS to apply to Moneris' IFrame fields.\n * CSS attributes should be converted to string.\n * Please note that ClassNames are not supported.\n *\n * IE:\n * ```js\n * {\n *      cssBody: 'background:white;';\n *      cssTextbox: 'border-width:2px;';\n *      cssTextboxCardNumber: 'width:140px;';\n *      cssTextboxExpiryDate: 'width:40px;';\n *      cssTextboxCVV: 'width:40px;';\n * }\n * ```\n *\n * When using several attributes use semicolon to separate each one.\n * IE: 'background:white;width:40px;'\n */\nexport default interface MonerisStylingProps {\n    /**\n     * Stringified CSS to apply to the body of the IFrame.\n     */\n    cssBody?: string;\n    /**\n     * Stringified CSS to apply to each of input fields.\n     */\n    cssTextbox?: string;\n    /**\n     * Stringified CSS to apply to the card's number field.\n     */\n    cssTextboxCardNumber?: string;\n    /**\n     * Stringified CSS to apply to the card's expiry field.\n     */\n    cssTextboxExpiryDate?: string;\n    /**\n     * Stringified CSS to apply to the card's CVV field.\n     */\n    cssTextboxCVV?: string;\n    /**\n     * Stringified CSS to apply to input labels\n     */\n    cssInputLabel?: string;\n}\n\nexport interface MoneriesHostedFieldsQueryParams {\n    id: string;\n    pmmsg: boolean;\n    css_body: string;\n    css_textbox: string;\n    css_textbox_pan: string;\n    enable_exp: number;\n    css_textbox_exp: string;\n    enable_cvd: number;\n    css_textbox_cvd: string;\n    display_labels: number;\n    pan_label: string;\n    exp_label: string;\n    cvd_label: string;\n    css_input_label: string;\n}\n\nexport interface MonerisResponseData {\n    responseCode: string[];\n    dataKey: string;\n    errorMessage: string;\n    bin: string;\n}\n\nexport interface MonerisInitializationData {\n    profileId: string;\n    creditCardLabel?: string;\n    expiryDateLabel?: string;\n    cvdLabel?: string;\n}\n"
  },
  {
    "path": "packages/moneris-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n}"
  },
  {
    "path": "packages/moneris-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/moneris-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/no-payment-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"jest/no-conditional-expect\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/no-payment-integration/README.md",
    "content": "# no-payment-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test no-payment-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint no-payment-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/no-payment-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'no-payment-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/no-payment-integration',\n};\n"
  },
  {
    "path": "packages/no-payment-integration/project.json",
    "content": "{\n    \"name\": \"no-payment-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/no-payment-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/no-payment-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/no-payment-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/no-payment-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/no-payment-integration/src/create-no-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createNoPaymentStrategy from './create-no-payment-strategy';\nimport NoPaymentDataRequiredPaymentStrategy from './no-payment-data-required-strategy';\n\ndescribe('createNoPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates no payment data required strategy', () => {\n        const strategy = createNoPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(NoPaymentDataRequiredPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/no-payment-integration/src/create-no-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport NoPaymentDataRequiredPaymentStrategy from './no-payment-data-required-strategy';\n\nconst createNoPaymentStrategy: PaymentStrategyFactory<NoPaymentDataRequiredPaymentStrategy> = (\n    paymentIntegrationService,\n) => new NoPaymentDataRequiredPaymentStrategy(paymentIntegrationService);\n\nexport default toResolvableModule(createNoPaymentStrategy, [{ id: 'nopaymentdatarequired' }]);\n"
  },
  {
    "path": "packages/no-payment-integration/src/index.ts",
    "content": "export { default as createNoPaymentStrategy } from './create-no-payment-strategy';\n"
  },
  {
    "path": "packages/no-payment-integration/src/no-payment-data-required-strategy.spec.ts",
    "content": "import { omit } from 'lodash';\n\nimport {\n    OrderFinalizationNotRequiredError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport NoPaymentDataRequiredPaymentStrategy from './no-payment-data-required-strategy';\n\ndescribe('NoPaymentDataRequiredPaymentStrategy', () => {\n    let strategy: NoPaymentDataRequiredPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        strategy = new NoPaymentDataRequiredPaymentStrategy(paymentIntegrationService);\n    });\n\n    describe('#execute()', () => {\n        it('calls submit order with the right data', async () => {\n            await strategy.execute(getOrderRequestBody(), undefined);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                omit(getOrderRequestBody(), 'payment'),\n                undefined,\n            );\n        });\n\n        it('passes the options to submitOrder', async () => {\n            const options = { myOptions: 'option1', methodId: 'testgateway' };\n\n            await strategy.execute(getOrderRequestBody(), options);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                omit(getOrderRequestBody(), 'payment'),\n                options,\n            );\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            try {\n                await strategy.finalize();\n            } catch (error) {\n                expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n            }\n        });\n    });\n\n    describe('#initialize()', () => {\n        it('initializes the strategy successfully', async () => {\n            const result = await strategy.initialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/no-payment-integration/src/no-payment-data-required-strategy.ts",
    "content": "import { omit } from 'lodash';\n\nimport {\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class NoPaymentDataRequiredPaymentStrategy implements PaymentStrategy {\n    constructor(private _paymentIntegrationService: PaymentIntegrationService) {}\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        await this._paymentIntegrationService.submitOrder(omit(payload, 'payment'), options);\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    initialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n}\n"
  },
  {
    "path": "packages/no-payment-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/no-payment-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/no-payment-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/offline-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"jest/no-conditional-expect\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/offline-integration/README.md",
    "content": "# offline-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test offline-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint offline-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/offline-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: \"offline-integration\",\n    preset: \"../../jest.preset.js\",\n    globals: {\n        \"ts-jest\": {\n            tsconfig: \"<rootDir>/tsconfig.spec.json\",\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: [\"../../jest-setup.js\"],\n    coverageDirectory: \"../../coverage/packages/offline-integration\",\n};\n"
  },
  {
    "path": "packages/offline-integration/project.json",
    "content": "{\n    \"name\": \"offline-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/offline-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/offline-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/offline-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/offline-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/offline-integration/src/create-offline-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport OfflinePaymentStrategy from './offline-payment-strategy';\n\nimport { createOfflinePaymentStrategy } from './';\n\ndescribe('createOfflinePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates offline payment strategy', () => {\n        const strategy = createOfflinePaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(OfflinePaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/offline-integration/src/create-offline-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport OfflinePaymentStrategy from './offline-payment-strategy';\n\nconst createOfflinePaymentStrategy: PaymentStrategyFactory<OfflinePaymentStrategy> = (\n    paymentIntegrationService,\n) => new OfflinePaymentStrategy(paymentIntegrationService);\n\nexport default toResolvableModule(createOfflinePaymentStrategy, [{ type: 'PAYMENT_TYPE_OFFLINE' }]);\n"
  },
  {
    "path": "packages/offline-integration/src/index.ts",
    "content": "export { default as createOfflinePaymentStrategy } from './create-offline-payment-strategy';\n"
  },
  {
    "path": "packages/offline-integration/src/offline-payment-strategy.spec.ts",
    "content": "import {\n    OrderFinalizationNotRequiredError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport OfflinePaymentStrategy from './offline-payment-strategy';\n\ndescribe('OfflinePaymentStrategy', () => {\n    let strategy: OfflinePaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        strategy = new OfflinePaymentStrategy(paymentIntegrationService);\n    });\n\n    describe('#execute()', () => {\n        it('calls submit order with payment data', async () => {\n            await strategy.execute(getOrderRequestBody(), undefined);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                {\n                    ...getOrderRequestBody(),\n                    payment: {\n                        methodId: 'authorizenet',\n                    },\n                },\n                undefined,\n            );\n        });\n\n        it('calls submit order without payment data if no payment data provided', async () => {\n            await strategy.execute({ ...getOrderRequestBody(), payment: undefined }, undefined);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                {\n                    ...getOrderRequestBody(),\n                    payment: undefined,\n                },\n                undefined,\n            );\n        });\n\n        it('passes the options to submitOrder', async () => {\n            const options = { myOptions: 'option1', methodId: 'testgateway' };\n\n            await strategy.execute(getOrderRequestBody(), options);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                {\n                    ...getOrderRequestBody(),\n                    payment: {\n                        methodId: 'authorizenet',\n                    },\n                },\n                options,\n            );\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#initialize()', () => {\n        it('initializes the strategy successfully', async () => {\n            const result = await strategy.initialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/offline-integration/src/offline-payment-strategy.ts",
    "content": "import {\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class OfflinePaymentStrategy implements PaymentStrategy {\n    constructor(private _paymentIntegrationService: PaymentIntegrationService) {}\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        await this._paymentIntegrationService.submitOrder(\n            {\n                ...payload,\n                payment: payload.payment ? { methodId: payload.payment.methodId } : undefined,\n            },\n            options,\n        );\n\n        return Promise.resolve();\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    initialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n}\n"
  },
  {
    "path": "packages/offline-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/offline-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/offsite-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/offsite-integration/README.md",
    "content": "# offsite-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test offsite-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint offsite-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/offsite-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'offsite-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/offsite-integration',\n};\n"
  },
  {
    "path": "packages/offsite-integration/project.json",
    "content": "{\n    \"name\": \"offsite-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/offsite-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/offsite-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/offsite-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/offsite-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/offsite-integration/src/create-offsite-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createOffsitePaymentStrategy from './create-offsite-payment-strategy';\nimport OffsitePaymentStrategy from './offsite-payment-strategy';\n\ndescribe('createOffsitePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates offsite payment strategy', () => {\n        const strategy = createOffsitePaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(OffsitePaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/offsite-integration/src/create-offsite-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport OffsitePaymentStrategy from './offsite-payment-strategy';\n\nconst createOffsitePaymentStrategy: PaymentStrategyFactory<OffsitePaymentStrategy> = (\n    paymentIntegrationService,\n) => new OffsitePaymentStrategy(paymentIntegrationService);\n\nexport default toResolvableModule(createOffsitePaymentStrategy, [{ type: 'PAYMENT_TYPE_HOSTED' }]);\n"
  },
  {
    "path": "packages/offsite-integration/src/index.ts",
    "content": "export { default as createOffsitePaymentStrategy } from './create-offsite-payment-strategy';\n"
  },
  {
    "path": "packages/offsite-integration/src/offsite-payment-strategy.spec.ts",
    "content": "import { merge, omit } from 'lodash';\n\nimport {\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStatusTypes,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport OffsitePaymentStrategy from './offsite-payment-strategy';\n\ndescribe('OffsitePaymentStrategy', () => {\n    let strategy: OffsitePaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let payload: OrderRequestBody;\n    let options: PaymentRequestOptions;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        options = { methodId: 'foobar' };\n        payload = merge(getOrderRequestBody(), {\n            payment: {\n                methodId: options.methodId,\n                paymentData: null,\n            },\n        });\n\n        strategy = new OffsitePaymentStrategy(paymentIntegrationService);\n    });\n\n    describe('#execute', () => {\n        it('throws error when payment data is empty', async () => {\n            await expect(strategy.execute({})).rejects.toThrow(PaymentArgumentInvalidError);\n        });\n\n        it('submits order without payment data', async () => {\n            await strategy.execute(payload, options);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                omit(payload, 'payment'),\n                options,\n            );\n        });\n\n        it('submits order with payment data if payment gateway is \"adyen\"', async () => {\n            options = { methodId: 'amex', gatewayId: 'adyen' };\n            payload = {\n                ...payload,\n                payment: {\n                    methodId: options.methodId,\n                    gatewayId: options.gatewayId,\n                    paymentData: {\n                        instrumentId: '123',\n                    },\n                },\n            };\n\n            await strategy.execute(payload, options);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(payload, options);\n        });\n\n        it('initializes offsite payment flow', async () => {\n            await strategy.execute(payload, options);\n\n            expect(paymentIntegrationService.initializeOffsitePayment).toHaveBeenCalledWith({\n                methodId: options.methodId,\n                gatewayId: options.gatewayId,\n            });\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('calls finalize order', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentStatus').mockReturnValue(\n                PaymentStatusTypes.ACKNOWLEDGE,\n            );\n\n            await strategy.finalize();\n\n            expect(paymentIntegrationService.finalizeOrder).toHaveBeenCalled();\n        });\n\n        it('throws error if payment status is initialize', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentStatus').mockReturnValue(\n                PaymentStatusTypes.INITIALIZE,\n            );\n\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#initialize()', () => {\n        it('initializes the strategy correctly', async () => {\n            const result = await strategy.initialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/offsite-integration/src/offsite-payment-strategy.ts",
    "content": "import {\n    isHostedInstrumentLike,\n    isVaultedInstrument,\n    OrderFinalizationNotRequiredError,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStatusTypes,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class OffsitePaymentStrategy implements PaymentStrategy {\n    constructor(private _paymentIntegrationService: PaymentIntegrationService) {}\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n        const orderPayload = this._shouldSubmitFullPayload(payment) ? payload : order;\n        const paymentData = payment && payment.paymentData;\n        const instrumentId =\n            (paymentData && isVaultedInstrument(paymentData) && paymentData.instrumentId) ||\n            undefined;\n        const shouldSaveInstrument =\n            (paymentData &&\n                isHostedInstrumentLike(paymentData) &&\n                paymentData.shouldSaveInstrument) ||\n            undefined;\n        const shouldSetAsDefaultInstrument =\n            (paymentData &&\n                isHostedInstrumentLike(paymentData) &&\n                paymentData.shouldSetAsDefaultInstrument) ||\n            undefined;\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const { methodId, gatewayId } = payment;\n\n        await this._paymentIntegrationService.submitOrder(orderPayload, options);\n        await this._paymentIntegrationService.initializeOffsitePayment({\n            methodId,\n            gatewayId,\n            instrumentId,\n            shouldSaveInstrument,\n            shouldSetAsDefaultInstrument,\n        });\n    }\n\n    async finalize(options?: PaymentRequestOptions): Promise<void> {\n        const state = this._paymentIntegrationService.getState();\n        const order = state.getOrder();\n        const status = state.getPaymentStatus();\n\n        if (\n            order &&\n            (status === PaymentStatusTypes.ACKNOWLEDGE || status === PaymentStatusTypes.FINALIZE)\n        ) {\n            await this._paymentIntegrationService.finalizeOrder(options);\n\n            return;\n        }\n\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    initialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private _shouldSubmitFullPayload(payment?: OrderPaymentRequestBody): boolean {\n        // FIXME: A temporary workaround to support offsite payment methods\n        // where their return URL needs to be provided by the core app.\n        if (!payment) {\n            return false;\n        }\n\n        return payment.gatewayId === 'adyen' || payment.gatewayId === 'barclaycard';\n    }\n}\n"
  },
  {
    "path": "packages/offsite-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/offsite-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.spec.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/payment-integration-api/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/ban-types\": \"off\",\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"jsdoc/check-tag-names\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"no-proto\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/payment-integration-api/README.md",
    "content": "# common-types\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test common-types` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint common-types` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/payment-integration-api/jest.config.js",
    "content": "module.exports = {\n    displayName: 'payment-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/payment-integration-api',\n    collectCoverageFrom: [],\n};\n"
  },
  {
    "path": "packages/payment-integration-api/project.json",
    "content": "{\n    \"name\": \"payment-integration-api\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/payment-integration-api/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/payment-integration-api/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/payment-integration-api\"],\n            \"options\": {\n                \"jestConfig\": \"packages/payment-integration-api/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/address/address.ts",
    "content": "export type AddressKey = keyof Address;\n\nexport default interface Address extends AddressRequestBody {\n    country: string;\n    shouldSaveAddress?: boolean;\n}\n\nexport interface AddressRequestBody {\n    firstName: string;\n    lastName: string;\n    company: string;\n    address1: string;\n    address2: string;\n    city: string;\n    stateOrProvince: string;\n    stateOrProvinceCode: string;\n    countryCode: string;\n    postalCode: string;\n    phone: string;\n    customFields: Array<{\n        fieldId: string;\n        fieldValue: string | number | string[];\n    }>;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/address/index.ts",
    "content": "export { default as Address, AddressKey, AddressRequestBody } from './address';\nexport { default as InternalAddress } from './internal-address';\nexport { default as LegacyAddress } from './legacy-address';\n"
  },
  {
    "path": "packages/payment-integration-api/src/address/internal-address.ts",
    "content": "export default interface InternalAddress<T = string> {\n    id?: T;\n    firstName: string;\n    lastName: string;\n    company: string;\n    addressLine1: string;\n    addressLine2: string;\n    city: string;\n    province: string;\n    provinceCode: string;\n    postCode: string;\n    country: string;\n    countryCode: string;\n    phone: string;\n    customFields: Array<{\n        fieldId: string;\n        fieldValue: string | number | string[];\n    }>;\n    type?: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/address/legacy-address.ts",
    "content": "export default interface LegacyAddress {\n    email: string;\n    first_name: string;\n    last_name: string;\n    phone_number: string;\n    address_line_1: string;\n    address_line_2: string;\n    city: string;\n    state: string;\n    country_code: string;\n    postal_code: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/billing/billing-address.ts",
    "content": "import { Address, AddressRequestBody } from '../address';\n\nexport default interface BillingAddress extends Address {\n    id: string;\n    email?: string;\n}\n\nexport interface BillingAddressRequestBody extends AddressRequestBody {\n    email?: string;\n}\n\nexport interface BillingAddressUpdateRequestBody extends BillingAddressRequestBody {\n    id: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/billing/index.ts",
    "content": "export { default as BillingAddress, BillingAddressRequestBody } from './billing-address';\nexport { default as isBillingAddressLike } from './is-billing-address-like';\n"
  },
  {
    "path": "packages/payment-integration-api/src/billing/is-billing-address-like.ts",
    "content": "import BillingAddress from './billing-address';\n\nexport default function isBillingAddressLike(address: any): address is BillingAddress {\n    return (\n        typeof address === 'object' &&\n        address !== null &&\n        'id' in address &&\n        typeof address.id !== 'undefined'\n    );\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/browser/browser.ts",
    "content": "export default interface BrowserInfo {\n    color_depth: number;\n    java_enabled: boolean;\n    language: string;\n    screen_height: number;\n    screen_width: number;\n    time_zone_offset: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/browser/index.ts",
    "content": "export { default as BrowserInfo } from './browser';\n"
  },
  {
    "path": "packages/payment-integration-api/src/cart/buy-now-cart-request-body.ts",
    "content": "import { CartSource } from './cart-source';\n\ninterface LineItem {\n    productId: number;\n    quantity: number;\n    variantId?: number;\n    optionSelections?: {\n        optionId: number;\n        optionValue: number | string;\n    };\n}\n\n/**\n * An object that contains the information required for creating 'Buy now' cart.\n */\nexport default interface BuyNowCartRequestBody {\n    source: CartSource.BuyNow;\n    lineItems: LineItem[];\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/cart/cart-source.ts",
    "content": "export enum CartSource {\n    BuyNow = 'BUY_NOW',\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/cart/cart.ts",
    "content": "import { Coupon } from '../coupon';\nimport { Currency } from '../currency';\nimport { Discount } from '../discount';\n\nimport { CartSource } from './cart-source';\nimport LineItemMap from './line-item-map';\n\nexport default interface Cart {\n    id: string;\n    customerId: number;\n    companyId: number | null;\n    currency: Currency;\n    email: string;\n    isTaxIncluded: boolean;\n    baseAmount: number;\n    discountAmount: number;\n    cartAmount: number;\n    coupons: Coupon[];\n    discounts: Discount[];\n    lineItems: LineItemMap;\n    createdTime: string;\n    updatedTime: string;\n    source?: CartSource;\n    locale: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/cart/index.ts",
    "content": "export { default as BuyNowCartRequestBody } from './buy-now-cart-request-body';\nexport { default as Cart } from './cart';\nexport { CartSource } from './cart-source';\nexport { default as InternalLineItem } from './internal-line-item';\nexport {\n    PhysicalItem,\n    DigitalItem,\n    GiftCertificateItem,\n    CustomItem,\n    LineItemCategory,\n    LineItem,\n    StockPosition,\n} from './line-item';\nexport { default as LineItemMap } from './line-item-map';\n"
  },
  {
    "path": "packages/payment-integration-api/src/cart/internal-line-item.ts",
    "content": "export default interface InternalLineItem {\n    amount: number;\n    amountAfterDiscount: number;\n    attributes: Array<{ name: string; value: string }>;\n    discount: number;\n    integerAmount: number;\n    downloadsPageUrl?: string;\n    integerAmountAfterDiscount: number;\n    integerDiscount: number;\n    integerUnitPrice: number;\n    integerUnitPriceAfterDiscount: number;\n    id: string | number;\n    imageUrl: string;\n    name?: string;\n    quantity: number;\n    brand?: string;\n    sku?: string;\n    categoryNames?: string[];\n    type: string;\n    variantId: number | null;\n    productId?: number;\n    addedByPromotion?: boolean;\n    sender?: {\n        name: string;\n        email: string;\n    };\n    recipient?: {\n        name: string;\n        email: string;\n    };\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/cart/line-item-map.ts",
    "content": "import { CustomItem, DigitalItem, GiftCertificateItem, PhysicalItem } from './line-item';\n\nexport default interface LineItemMap {\n    physicalItems: PhysicalItem[];\n    digitalItems: DigitalItem[];\n    customItems?: CustomItem[];\n    giftCertificates: GiftCertificateItem[];\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/cart/line-item.ts",
    "content": "export interface PhysicalItem extends LineItem {\n    isShippingRequired: boolean;\n    giftWrapping?: {\n        name: string;\n        message: string;\n        amount: number;\n    };\n}\n\nexport interface DigitalItem extends LineItem {\n    downloadFileUrls: string[];\n    downloadPageUrl: string;\n    downloadSize: string;\n}\n\nexport interface CustomItem {\n    id: string;\n    listPrice: number;\n    extendedListPrice: number;\n    name: string;\n    quantity: number;\n    sku: string;\n}\n\nexport interface GiftCertificateItem {\n    id: string | number;\n    name: string;\n    theme: string;\n    amount: number;\n    taxable: boolean;\n    sender: {\n        name: string;\n        email: string;\n    };\n    recipient: {\n        name: string;\n        email: string;\n    };\n    message: string;\n}\n\nexport interface LineItem {\n    id: string | number;\n    variantId: number;\n    productId: number;\n    sku: string;\n    name: string;\n    url: string;\n    quantity: number;\n    brand: string;\n    categoryNames?: string[];\n    categories?: LineItemCategory[][];\n    isTaxable: boolean;\n    imageUrl: string;\n    discounts: Array<{ name: string; discountedAmount: number }>;\n    discountAmount: number;\n    couponAmount: number;\n    listPrice: number;\n    salePrice: number;\n    retailPrice: number;\n    comparisonPrice: number;\n    extendedListPrice: number;\n    extendedSalePrice: number;\n    extendedComparisonPrice: number;\n    socialMedia?: LineItemSocialData[];\n    options?: LineItemOption[];\n    addedByPromotion: boolean;\n    parentId?: string | null;\n    quantityBackordered?: number;\n    backorderMessage?: string | null;\n    stockPosition?: StockPosition;\n}\n\nexport interface LineItemOption {\n    name: string;\n    nameId: number;\n    value: string;\n    valueId: number | null;\n}\n\nexport interface LineItemSocialData {\n    channel: string;\n    code: string;\n    text: string;\n    link: string;\n}\n\nexport interface LineItemCategory {\n    name: string;\n}\n\nexport interface StockPosition {\n    quantityOnHand: number;\n    quantityBackordered: number;\n    quantityOutOfStock: number;\n    backorderMessage: string | null;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/checkout/checkout.ts",
    "content": "import { BillingAddress } from '../billing';\nimport { Cart } from '../cart';\nimport { Coupon, GiftCertificate } from '../coupon';\nimport { Customer } from '../customer';\nimport { Discount } from '../discount';\nimport { Fee } from '../fee';\nimport { Promotion } from '../promotion';\nimport { Consignment } from '../shipping';\nimport { Tax } from '../tax';\n\nexport default interface Checkout {\n    id: string;\n    billingAddress?: BillingAddress;\n    cart: Cart;\n    customer: Customer;\n    customerMessage: string;\n    consignments: Consignment[];\n    taxes: Tax[];\n    discounts: Discount[];\n    displayDiscountTotal: number;\n    isStoreCreditApplied: boolean;\n    coupons: Coupon[];\n    orderId?: number;\n    giftWrappingCostTotal: number;\n    comparisonShippingCost: number;\n    shippingCostTotal: number;\n    shippingCostBeforeDiscount: number;\n    /**\n     * Whether the current checkout must execute spam protection\n     * before placing the order.\n     *\n     * Note: You need to enable Google ReCAPTCHA bot protection in your Checkout Settings.\n     */\n    shouldExecuteSpamCheck: boolean;\n    handlingCostTotal: number;\n    taxTotal: number;\n    subtotal: number;\n    grandTotal: number;\n    outstandingBalance: number;\n    orderBasedAutoDiscountTotal: number;\n    manualDiscountTotal: number;\n    hasOrderLevelAutoDiscountMaxLimitReached?: boolean;\n    giftCertificates: GiftCertificate[];\n    promotions?: Promotion[];\n    balanceDue: number;\n    createdTime: string;\n    updatedTime: string;\n    payments?: CheckoutPayment[];\n    channelId: number;\n    fees: Fee[];\n    totalDiscount: number;\n}\n\nexport interface CheckoutRequestBody {\n    customerMessage: string;\n}\n\nexport interface CheckoutPayment {\n    detail: {\n        step: string;\n    };\n    providerId: string;\n    providerType: string;\n    gatewayId?: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/checkout/index.ts",
    "content": "export { default as Checkout } from './checkout';\n"
  },
  {
    "path": "packages/payment-integration-api/src/checkout-buttons/checkout-button-initialize-options.ts",
    "content": "import RequestOptions from '../util-types/request-options';\n\n/**\n * The set of options for configuring the checkout button.\n */\nexport interface CheckoutButtonOptions extends RequestOptions {\n    /**\n     * The identifier of the payment method.\n     */\n    methodId: string;\n}\n\nexport default interface CheckoutButtonInitializeOptions extends CheckoutButtonOptions {\n    [key: string]: unknown;\n    /**\n     * The ID of a container which the checkout button should be inserted.\n     */\n    containerId: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/checkout-buttons/checkout-button-strategy-factory.ts",
    "content": "import PaymentIntegrationService from '../payment-integration-service';\n\nimport CheckoutButtonStrategy from './checkout-button-strategy';\n\ntype CheckoutButtonStrategyFactory<TStrategy extends CheckoutButtonStrategy> = (\n    paymentIntegrationService: PaymentIntegrationService,\n) => TStrategy;\n\nexport default CheckoutButtonStrategyFactory;\n"
  },
  {
    "path": "packages/payment-integration-api/src/checkout-buttons/checkout-button-strategy-resolve-id.ts",
    "content": "import { RequireAtLeastOne } from '../util-types';\n\ntype CheckoutButtonStrategyResolveId = RequireAtLeastOne<{\n    id?: string;\n    gateway?: string;\n}>;\n\nexport default CheckoutButtonStrategyResolveId;\n"
  },
  {
    "path": "packages/payment-integration-api/src/checkout-buttons/checkout-button-strategy.ts",
    "content": "import CheckoutButtonInitializeOptions from './checkout-button-initialize-options';\n\nexport default interface CheckoutButtonStrategy {\n    initialize(options: CheckoutButtonInitializeOptions): Promise<void>;\n\n    deinitialize(): Promise<void>;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/checkout-buttons/default-checkout-button-height.ts",
    "content": "const DefaultCheckoutButtonHeight = 40;\n\nexport default DefaultCheckoutButtonHeight;\n"
  },
  {
    "path": "packages/payment-integration-api/src/checkout-buttons/index.ts",
    "content": "export { default as CheckoutButtonInitializeOptions } from './checkout-button-initialize-options';\nexport { default as CheckoutButtonStrategy } from './checkout-button-strategy';\nexport { default as CheckoutButtonStrategyFactory } from './checkout-button-strategy-factory';\nexport { default as CheckoutButtonStrategyResolveId } from './checkout-button-strategy-resolve-id';\nexport { default as DefaultCheckoutButtonHeight } from './default-checkout-button-height';\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/browser-info/browser-info.ts",
    "content": "export default interface BrowserInfo {\n    color_depth: number;\n    java_enabled: boolean;\n    language: string;\n    screen_height: number;\n    screen_width: number;\n    time_zone_offset: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/browser-info/get-browser-info.spec.ts",
    "content": "import getBrowserInfo from './get-browser-info';\n\ndescribe('getBrowserInfo()', () => {\n    it('retrieves browser info', () => {\n        expect(getBrowserInfo()).toEqual(\n            expect.objectContaining({\n                color_depth: expect.any(Number),\n                java_enabled: expect.any(Boolean),\n                language: expect.any(String),\n                screen_height: expect.any(Number),\n                screen_width: expect.any(Number),\n                time_zone_offset: expect.any(String),\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/browser-info/get-browser-info.ts",
    "content": "import BrowserInfo from './browser-info';\n\nexport default function getBrowserInfo(): BrowserInfo {\n    const { navigator } = window;\n\n    let language: string;\n\n    if (navigator.language) {\n        language = navigator.language;\n    } else {\n        language = (navigator as any).userLanguage;\n    }\n\n    return {\n        color_depth: window.screen.colorDepth || 24,\n        java_enabled: typeof navigator.javaEnabled === 'function' ? navigator.javaEnabled() : false,\n        language,\n        screen_height: window.screen.height,\n        screen_width: window.screen.width,\n        time_zone_offset: new Date().getTimezoneOffset().toString(),\n    };\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/browser-info/index.ts",
    "content": "export { default as BrowserInfo } from './browser-info';\nexport { default as getBrowserInfo } from './get-browser-info';\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/cancellable-promise/cancellable-promise.spec.ts",
    "content": "import CancellablePromise from './cancellable-promise';\n\ndescribe('CancellablePromise', () => {\n    it('resolves with the value of the promise if it was already resolved', async () => {\n        const element = { data: 'here' };\n        const cancellable = new CancellablePromise(Promise.resolve(element));\n        // Makes sure we don't tamper with the promise\n        const { promise } = cancellable;\n\n        await expect(promise).resolves.toBe(element);\n    });\n\n    it('cancels the promise when cancel is called', async () => {\n        const cancellable = new CancellablePromise(new Promise(() => undefined));\n        const error = new Error('Just because!');\n        // Makes sure we don't tamper with the promise.\n        const { promise } = cancellable;\n\n        cancellable.cancel(error);\n\n        await expect(promise).rejects.toEqual(error);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/cancellable-promise/cancellable-promise.ts",
    "content": "export default class CancellablePromise<T> {\n    promise: Promise<T>;\n    cancel!: (reason?: any) => void;\n\n    constructor(promise: Promise<T>) {\n        const cancellable = new Promise<T>((_, reject) => {\n            this.cancel = reject;\n        });\n\n        this.promise = Promise.race([promise, cancellable]);\n    }\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/cancellable-promise/index.ts",
    "content": "export { default as CancellablePromise } from './cancellable-promise';\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/http-request/content-type.ts",
    "content": "enum ContentType {\n    Json = 'application/json',\n    JsonV1 = 'application/vnd.bc.v1+json',\n}\n\nexport default ContentType;\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/http-request/index.ts",
    "content": "export * from './internal-api-headers';\nexport * from './sdk-version-headers';\n\nexport { default as ContentType } from './content-type';\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/http-request/internal-api-headers.ts",
    "content": "export const INTERNAL_USE_ONLY =\n    'This API endpoint is for internal use only and may change in the future';\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/http-request/sdk-version-headers.ts",
    "content": "export const SDK_VERSION_HEADERS = { 'X-Checkout-SDK-Version': LIBRARY_VERSION };\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/types/index.ts",
    "content": "export { default as Omit } from './omit';\nexport { default as PartialDeep } from './partial-deep';\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/types/omit.ts",
    "content": "type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;\n\nexport default Omit;\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/types/partial-deep.ts",
    "content": "type PartialDeep<T> = {\n    [P in keyof T]?: PartialDeep<T[P]>;\n};\n\nexport default PartialDeep;\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/types/webpack.d.ts",
    "content": "declare const LIBRARY_VERSION: string;\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/utility/amount-transformer.spec.ts",
    "content": "import AmountTransformer from './amount-transformer';\n\ndescribe('AmountTransformer', () => {\n    it('converts decimal into integer', () => {\n        expect(new AmountTransformer(2).toInteger(1.234)).toBe(123);\n\n        expect(new AmountTransformer(2).toInteger(-1.234)).toBe(-123);\n\n        expect(new AmountTransformer(0).toInteger(1.234)).toBe(1);\n    });\n\n    it('handles cases where conversion might produce imprecise number', () => {\n        // 894.9999999999999\n        expect(new AmountTransformer(2).toInteger(8.95)).toBe(895);\n\n        // 896.0000000000001\n        expect(new AmountTransformer(2).toInteger(8.96)).toBe(896);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/utility/amount-transformer.ts",
    "content": "export default class AmountTransformer {\n    constructor(private _decimalPlaces: number) {}\n\n    toInteger(amount: number): number {\n        return Math.round(amount * 10 ** this._decimalPlaces);\n    }\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/utility/index.ts",
    "content": "export { default as objectWithKebabCaseKeys } from './object-with-kebab-case-keys';\nexport { default as AmountTransformer } from './amount-transformer';\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/utility/object-with-kebab-case-keys.spec.ts",
    "content": "import objectWithKebabCaseKeys from './object-with-kebab-case-keys';\n\nconst objectMock = {\n    camelCaseValue: 'test',\n    undefinedValue: undefined,\n    falsyValue: false,\n};\n\ndescribe('objectWithKebabCaseKeys()', () => {\n    it('returns object with kebab keys', () => {\n        const expectedObject = {\n            'camel-case-value': 'test',\n            'undefined-value': undefined,\n            'falsy-value': false,\n        };\n\n        const result = objectWithKebabCaseKeys(objectMock);\n\n        expect(result).toEqual(expectedObject);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/common/utility/object-with-kebab-case-keys.ts",
    "content": "import { kebabCase } from 'lodash';\n\nexport default function objectWithKebabCaseKeys(object: { [key: string]: any }) {\n    const keys = Object.keys(object);\n\n    return keys.reduce(\n        (newObject, key) => ({\n            ...newObject,\n            [kebabCase(key)]: object[key],\n        }),\n        {},\n    );\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/config/capabilities.ts",
    "content": "// This is an exact copy of packages/core/src/config/capabilities.ts\n// Duplication is needed for interface export\n// Please update both files if you want to make changes to the Capabilities interface\nexport interface Capabilities {\n    userJourney: {\n        disableEditCart: boolean;\n        disableStoreCredit: boolean;\n        hasCompanyAddressBook: boolean;\n        hasAddressExtraFields: boolean;\n        hasOrderExtraFields: boolean;\n        requiresB2BToken: boolean;\n    };\n    customer: {\n        superAdminCompanySelector: boolean;\n    };\n    shipping: {\n        restrictManualAddressEntry: boolean;\n        prefillCompanyAddress: boolean;\n        hideSaveToAddressBookCheck: boolean;\n        hideBillingSameAsShippingCheck: boolean;\n    };\n    billing: {\n        restrictManualAddressEntry: boolean;\n        hideSaveToAddressBookCheck: boolean;\n    };\n    payment: {\n        paymentMethodFiltering: boolean;\n        b2bPaymentMethodFilter: boolean;\n        poPaymentMethod: boolean;\n        poConfig: {\n            label: string;\n            required: boolean;\n            creditLimit: number;\n            currency: string;\n        } | null;\n        additionalPaymentNotes: boolean;\n        additionalField: {\n            label: string;\n            required: boolean;\n        } | null;\n        excludeOfflineForInvoice: boolean;\n        excludePPSDK: boolean;\n    };\n    orderConfirmation: {\n        orderSummary: boolean;\n        persistB2BMetadata: boolean;\n        storeQuoteId: boolean;\n        storeInvoiceReference: boolean;\n        invoiceRedirect: boolean;\n    };\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/config/config.ts",
    "content": "import { FormFields } from '../form';\n\nimport { Capabilities } from './capabilities';\n\nexport default interface Config {\n    context: ContextConfig;\n    customization: CustomizationConfig;\n    storeConfig: StoreConfig;\n}\n\nexport interface B2BApiSettings {\n    clientId: string;\n    baseUrl: string;\n}\nexport interface StoreConfig {\n    cdnPath: string;\n    checkoutSettings: CheckoutSettings;\n    b2bApiSettings?: B2BApiSettings;\n    currency: StoreCurrency;\n    displayDateFormat: string;\n    displaySettings: DisplaySettings;\n    inputDateFormat: string;\n\n    /**\n     * @deprecated Please use instead the data selectors\n     * @remarks\n     * ```js\n     * const data = CheckoutService.getState().data;\n     * const shippingAddressFields = data.getShippingAddressFields('US');\n     * const billingAddressFields = data.getBillingAddressFields('US');\n     * const customerAccountFields = data.getCustomerAccountFields();\n     * ```\n     */\n    formFields: FormFields;\n\n    links: StoreLinks;\n    paymentSettings: PaymentSettings;\n    shopperConfig: ShopperConfig;\n    storeProfile: StoreProfile;\n    imageDirectory: string;\n    isAngularDebuggingEnabled: boolean;\n    shopperCurrency: ShopperCurrency;\n    inventorySettings?: InventorySettings;\n}\n\nexport interface ShopperCurrency extends StoreCurrency {\n    exchangeRate: number;\n    isTransactional: boolean;\n}\n\nexport interface StoreProfile {\n    orderEmail: string;\n    shopPath: string;\n    storeCountry: string;\n    storeCountryCode: string;\n    storeHash: string;\n    storeId: string;\n    storeName: string;\n    storePhoneNumber: string;\n    storeLanguage: string;\n}\n\nexport interface ShopperConfig {\n    defaultNewsletterSignup: boolean;\n    passwordRequirements: PasswordRequirements;\n    showNewsletterSignup: boolean;\n}\n\nexport interface PasswordRequirements {\n    alpha: string;\n    numeric: string;\n    minlength: number;\n    error: string;\n}\n\nexport interface PaymentSettings {\n    bigpayBaseUrl: string;\n    clientSidePaymentProviders: string[];\n}\n\nexport interface StoreLinks {\n    baseUrl?: string | null;\n    cartLink: string;\n    checkoutLink: string;\n    createAccountLink: string;\n    forgotPasswordLink: string;\n    loginLink: string;\n    logoutLink: string;\n    siteLink: string;\n    orderConfirmationLink: string;\n}\n\nexport interface StoreCurrency {\n    code: string;\n    decimalPlaces: string;\n    decimalSeparator: string;\n    isTransactional: boolean;\n    symbolLocation: string;\n    symbol: string;\n    thousandsSeparator: string;\n}\n\nexport interface UserExperienceSettings {\n    checkoutV2Theme: boolean;\n    walletButtonsOnTop: boolean;\n    floatingLabelEnabled: boolean;\n}\n\nexport interface B2BServiceDetails {\n    b2bBaseUrl: string;\n    b2bClientId: string;\n}\n\nexport interface CheckoutSettings {\n    capabilities?: Capabilities;\n    b2bServiceDetails?: B2BServiceDetails;\n    features: { [featureName: string]: boolean };\n    checkoutBillingSameAsShippingEnabled: boolean;\n    checkoutUserExperienceSettings: UserExperienceSettings;\n    enableOrderComments: boolean;\n    enableTermsAndConditions: boolean;\n    googleMapsApiKey: string;\n    googleRecaptchaSitekey: string;\n    isAccountCreationEnabled: boolean;\n    isStorefrontSpamProtectionEnabled: boolean;\n    guestCheckoutEnabled: boolean;\n    hasMultiShippingEnabled: boolean;\n    isAnalyticsEnabled: boolean;\n    isCardVaultingEnabled: boolean;\n    isCouponCodeCollapsed: boolean;\n    isExpressPrivacyPolicy: boolean;\n    isSignInEmailEnabled: boolean;\n    isPaymentRequestEnabled: boolean;\n    isPaymentRequestCanMakePaymentEnabled: boolean;\n    isSpamProtectionEnabled: boolean;\n    isTrustedShippingAddressEnabled: boolean;\n    orderTermsAndConditions: string;\n    orderTermsAndConditionsLocation: string;\n    orderTermsAndConditionsLink: string;\n    orderTermsAndConditionsType: string;\n    privacyPolicyUrl: string;\n    providerWithCustomCheckout: string | null;\n    shippingQuoteFailedMessage: string;\n    realtimeShippingProviders: string[];\n    requiresMarketingConsent: boolean;\n    remoteCheckoutProviders: any[];\n    shouldRedirectToStorefrontForAuth: boolean;\n}\n\nexport interface CustomizationConfig {\n    languageData: any[];\n}\n\nexport type FlashMessageType = 'error' | 'info' | 'warning' | 'success';\n\nexport interface FlashMessage {\n    type: FlashMessageType;\n    message: string;\n    title?: string;\n}\n\nexport interface ContextConfig {\n    checkoutId?: string;\n    geoCountryCode: string;\n    flashMessages: FlashMessage[];\n    payment: {\n        formId?: string;\n        token?: string;\n    };\n}\n\nexport interface DisplaySettings {\n    hidePriceFromGuests: boolean;\n}\n\nexport interface InventorySettings {\n    showQuantityOnBackorder: boolean;\n    showBackorderMessage: boolean;\n    showQuantityOnHand: boolean;\n    showDefaultShippingExpectationPrompt: boolean;\n    showBackorderAvailabilityPrompt: boolean;\n    backorderAvailabilityPrompt: string | null;\n    defaultShippingExpectationPrompt: string | null;\n    shouldDisplayBackorderMessagesOnStorefront: boolean;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/config/index.ts",
    "content": "export { default as Config, StoreConfig, CheckoutSettings, StoreProfile } from './config';\nexport { Capabilities } from './capabilities';\n"
  },
  {
    "path": "packages/payment-integration-api/src/coupon/coupon.ts",
    "content": "export default interface Coupon {\n    id: string;\n    displayName: string;\n    code: string;\n    couponType: string;\n    discountedAmount: number;\n    hasMaxLimitReached?: boolean;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/coupon/gift-certificate.ts",
    "content": "export default interface GiftCertificate {\n    balance: number;\n    remaining: number;\n    used: number;\n    code: string;\n    purchaseDate: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/coupon/index.ts",
    "content": "export { default as Coupon } from './coupon';\nexport { default as GiftCertificate } from './gift-certificate';\nexport { default as InternalCoupon } from './internal-coupon';\nexport { default as InternalGiftCertificate } from './internal-gift-certificate';\n"
  },
  {
    "path": "packages/payment-integration-api/src/coupon/internal-coupon.ts",
    "content": "export default interface InternalCoupon {\n    code: string;\n    discount: string;\n    discountType: number;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/coupon/internal-gift-certificate.ts",
    "content": "export default interface InternalGiftCertificate {\n    code: string;\n    discountedAmount: number;\n    remainingBalance: number;\n    giftCertificate?: {\n        balance: number;\n        code: string;\n        purchaseDate: string;\n    };\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/currency/create-currency-service.ts",
    "content": "import { StoreConfig } from '../config';\n\nimport CurrencyService from './currency-service';\n\n/**\n * Creates an instance of `CurrencyService`.\n *\n * @remarks\n * ```js\n * const { data } = checkoutService.getState();\n * const config = data.getConfig();\n * const checkout = data.getCheckout();\n * const currencyService = createCurrencyService(config);\n *\n * currencyService.toStoreCurrency(checkout.grandTotal);\n * currencyService.toCustomerCurrency(checkout.grandTotal);\n * ```\n *\n * param config - The config object containing the currency configuration\n * returns an instance of `CurrencyService`.\n */\nexport default function createCurrencyService(config: StoreConfig): CurrencyService {\n    return new CurrencyService(config);\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/currency/currency-formatter.spec.ts",
    "content": "import CurrencyFormatter from './currency-formatter';\n\ndescribe('CurrencyFormater', () => {\n    let currencyFormatter: CurrencyFormatter;\n\n    describe('#format()', () => {\n        describe('when no decimal places', () => {\n            beforeEach(() => {\n                currencyFormatter = new CurrencyFormatter({\n                    decimalPlaces: '0',\n                    decimalSeparator: '.',\n                    symbolLocation: 'left',\n                    symbol: '$',\n                    thousandsSeparator: ',',\n                });\n            });\n\n            it('throws error when no amount is provided', () => {\n                expect(() => currencyFormatter.format()).toThrow();\n            });\n\n            it('returns formatted positive numbers', () => {\n                expect(currencyFormatter.format(0)).toBe('$0');\n                expect(currencyFormatter.format(10)).toBe('$10');\n                expect(currencyFormatter.format(100.1)).toBe('$100');\n                expect(currencyFormatter.format(999888777.666555)).toBe('$999,888,778');\n                expect(currencyFormatter.format(99888777.666555)).toBe('$99,888,778');\n                expect(currencyFormatter.format(9888777.666555)).toBe('$9,888,778');\n                expect(currencyFormatter.format(888777.666555)).toBe('$888,778');\n            });\n\n            it('returns formatted negative number', () => {\n                expect(currencyFormatter.format(-0)).toBe('$0');\n                expect(currencyFormatter.format(-10)).toBe('-$10');\n                expect(currencyFormatter.format(-100.1)).toBe('-$100');\n                expect(currencyFormatter.format(-999888777.666555)).toBe('-$999,888,778');\n                expect(currencyFormatter.format(-99888777.666555)).toBe('-$99,888,778');\n                expect(currencyFormatter.format(-9888777.666555)).toBe('-$9,888,778');\n                expect(currencyFormatter.format(-888777.666555)).toBe('-$888,778');\n            });\n        });\n\n        describe('when regular config is provided', () => {\n            beforeEach(() => {\n                currencyFormatter = new CurrencyFormatter({\n                    decimalPlaces: '2',\n                    decimalSeparator: '.',\n                    symbolLocation: 'left',\n                    symbol: '$',\n                    thousandsSeparator: ',',\n                });\n            });\n\n            it('throws error when no amount is provided', () => {\n                expect(() => currencyFormatter.format()).toThrow();\n            });\n\n            it('returns formatted positive numbers', () => {\n                expect(currencyFormatter.format(0)).toBe('$0.00');\n                expect(currencyFormatter.format(10)).toBe('$10.00');\n                expect(currencyFormatter.format(100.1)).toBe('$100.10');\n                expect(currencyFormatter.format(859.385)).toBe('$859.39');\n                expect(currencyFormatter.format(999888777.666555)).toBe('$999,888,777.67');\n                expect(currencyFormatter.format(99888777.666555)).toBe('$99,888,777.67');\n                expect(currencyFormatter.format(9888777.666555)).toBe('$9,888,777.67');\n                expect(currencyFormatter.format(888777.666555)).toBe('$888,777.67');\n            });\n\n            it('returns formatted negative number', () => {\n                expect(currencyFormatter.format(-0)).toBe('$0.00');\n                expect(currencyFormatter.format(-10)).toBe('-$10.00');\n                expect(currencyFormatter.format(-100.1)).toBe('-$100.10');\n                expect(currencyFormatter.format(-999888777.666555)).toBe('-$999,888,777.67');\n                expect(currencyFormatter.format(-99888777.666555)).toBe('-$99,888,777.67');\n                expect(currencyFormatter.format(-9888777.666555)).toBe('-$9,888,777.67');\n                expect(currencyFormatter.format(-888777.664444)).toBe('-$888,777.66');\n            });\n\n            it('adds padding with 0s', () => {\n                expect(currencyFormatter.format(0.9)).toBe('$0.90');\n            });\n        });\n\n        describe('when specific config is provided', () => {\n            beforeEach(() => {\n                currencyFormatter = new CurrencyFormatter({\n                    decimalPlaces: '3',\n                    decimalSeparator: ';',\n                    symbolLocation: 'right',\n                    symbol: '@',\n                    thousandsSeparator: ' ',\n                });\n            });\n\n            it('returns formatted positive numbers', () => {\n                expect(currencyFormatter.format(0)).toBe('0;000@');\n                expect(currencyFormatter.format(10)).toBe('10;000@');\n                expect(currencyFormatter.format(100.1)).toBe('100;100@');\n                expect(currencyFormatter.format(999888777.12345)).toBe('999 888 777;123@');\n                expect(currencyFormatter.format(99888777.12345)).toBe('99 888 777;123@');\n                expect(currencyFormatter.format(9888777.12345)).toBe('9 888 777;123@');\n                expect(currencyFormatter.format(888777.12345)).toBe('888 777;123@');\n            });\n\n            it('returns formatted negative number', () => {\n                expect(currencyFormatter.format(-0)).toBe('0;000@');\n                expect(currencyFormatter.format(-10)).toBe('-10;000@');\n                expect(currencyFormatter.format(-100.1)).toBe('-100;100@');\n                expect(currencyFormatter.format(-999888777.12345)).toBe('-999 888 777;123@');\n                expect(currencyFormatter.format(-99888777.12345)).toBe('-99 888 777;123@');\n                expect(currencyFormatter.format(-9888777.12345)).toBe('-9 888 777;123@');\n                expect(currencyFormatter.format(-888777.12345)).toBe('-888 777;123@');\n            });\n\n            it('adds padding with 0s', () => {\n                expect(currencyFormatter.format(-0.9)).toBe('-0;900@');\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/currency/currency-formatter.ts",
    "content": "import { InvalidArgumentError } from '../errors';\n\nimport { CurrencyConfig } from './currency';\n\nexport default class CurrencyFormatter {\n    private _decimalPlaces: number;\n    private _symbolLocation: string;\n    private _symbol: string;\n    private _thousandsSeparator: string;\n    private _decimalSeparator: string;\n\n    constructor(currencySettings: CurrencyConfig) {\n        if (!currencySettings) {\n            throw new Error('Currency settings missing');\n        }\n\n        const { decimalPlaces, symbolLocation, symbol, thousandsSeparator, decimalSeparator } =\n            currencySettings;\n\n        if (\n            typeof symbolLocation !== 'string' ||\n            typeof symbol !== 'string' ||\n            typeof thousandsSeparator !== 'string' ||\n            typeof decimalSeparator !== 'string' ||\n            typeof decimalPlaces !== 'string'\n        ) {\n            throw new InvalidArgumentError('Invalid currency settings provided');\n        }\n\n        this._decimalPlaces = parseInt(decimalPlaces, 10);\n        this._symbolLocation = symbolLocation;\n        this._symbol = symbol;\n        this._thousandsSeparator = thousandsSeparator;\n        this._decimalSeparator = decimalSeparator;\n    }\n\n    format(amount?: number): string {\n        if (typeof amount !== 'number') {\n            throw new InvalidArgumentError('Invalid amount provided');\n        }\n\n        const formattedNumber = this._formatNumber(amount);\n\n        const formattedCurrency = this._formatCurrency(formattedNumber);\n\n        return amount < 0 ? `-${formattedCurrency}` : formattedCurrency;\n    }\n\n    private _formatNumber(amount: number): string {\n        const positiveAmount = Math.abs(amount);\n        const [integerAmount, decimalAmount = ''] = this._toFixed(\n            positiveAmount,\n            this._decimalPlaces,\n        ).split('.');\n        const parsedIntegerAmount = integerAmount.replace(\n            /\\B(?=(\\d{3})+(?!\\d))/g,\n            this._thousandsSeparator,\n        );\n\n        if (this._decimalPlaces < 1) {\n            return parsedIntegerAmount;\n        }\n\n        return [parsedIntegerAmount, decimalAmount].join(this._decimalSeparator);\n    }\n\n    private _formatCurrency(formattedNumber: string): string {\n        return this._symbolLocation.toLowerCase() === 'left'\n            ? `${this._symbol}${formattedNumber}`\n            : `${formattedNumber}${this._symbol}`;\n    }\n\n    private _toFixed(value: number, precision: number): string {\n        return (+`${Math.round(+`${value}e${precision}`)}e${-precision}`).toFixed(precision);\n    }\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/currency/currency-service.ts",
    "content": "import { bindDecorator as bind } from '@bigcommerce/checkout-sdk/utility';\n\nimport { StoreConfig } from '../config';\n\nimport CurrencyFormatter from './currency-formatter';\n\n/**\n * Responsible for formatting and converting currencies.\n */\n@bind\nexport default class CurrencyService {\n    private _customerFormatter: CurrencyFormatter;\n    private _storeFormatter: CurrencyFormatter;\n\n    /**\n     * @internal\n     */\n    constructor(private _storeConfig: StoreConfig) {\n        this._customerFormatter = new CurrencyFormatter(this._storeConfig.shopperCurrency);\n        this._storeFormatter = new CurrencyFormatter(this._storeConfig.currency);\n    }\n\n    toCustomerCurrency(amount: number): string {\n        const exchangeRate = this._storeConfig.shopperCurrency.exchangeRate;\n\n        return this._customerFormatter.format(amount * exchangeRate);\n    }\n\n    toStoreCurrency(amount: number): string {\n        return this._storeFormatter.format(amount);\n    }\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/currency/currency.ts",
    "content": "export default interface Currency {\n    name: string;\n    code: string;\n    symbol: string;\n    decimalPlaces: number;\n}\n\nexport interface CurrencyConfig {\n    decimalPlaces: string;\n    decimalSeparator: string;\n    symbolLocation: string;\n    symbol: string;\n    thousandsSeparator: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/currency/index.ts",
    "content": "export { default as Currency, CurrencyConfig } from './currency';\nexport { default as CurrencyFormatter } from './currency-formatter';\nexport { default as CurrencyService } from './currency-service';\nexport { default as createCurrencyService } from './create-currency-service';\n"
  },
  {
    "path": "packages/payment-integration-api/src/customer/customer-credentials.ts",
    "content": "export default interface CustomerCredentials {\n    email: string;\n    password: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/customer/customer-request-options.ts",
    "content": "import { RequestOptions } from '@bigcommerce/request-sender';\n\nexport interface CustomerRequestOptions extends RequestOptions {\n    methodId?: string;\n}\n\nexport interface CustomerInitializeOptions extends CustomerRequestOptions {\n    [key: string]: unknown;\n}\n\nexport interface ExecutePaymentMethodCheckoutOptions extends CustomerRequestOptions {\n    checkoutPaymentMethodExecuted?(data?: CheckoutPaymentMethodExecutedOptions): void;\n    continueWithCheckoutCallback?(): void;\n}\n\nexport interface CheckoutPaymentMethodExecutedOptions {\n    hasBoltAccount?: boolean;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/customer/customer-strategy-factory.ts",
    "content": "import PaymentIntegrationService from '../payment-integration-service';\n\nimport CustomerStrategy from './customer-strategy';\n\ntype CustomerStrategyFactory<TStrategy extends CustomerStrategy> = (\n    paymentIntegrationService: PaymentIntegrationService,\n) => TStrategy;\n\nexport default CustomerStrategyFactory;\n"
  },
  {
    "path": "packages/payment-integration-api/src/customer/customer-strategy-resolve-id.ts",
    "content": "import { RequireAtLeastOne } from '../util-types';\n\ntype CustomerStrategyResolveId = RequireAtLeastOne<{\n    id?: string;\n    gateway?: string;\n}>;\n\nexport default CustomerStrategyResolveId;\n"
  },
  {
    "path": "packages/payment-integration-api/src/customer/customer-strategy.ts",
    "content": "import {\n    CustomerCredentials,\n    CustomerInitializeOptions,\n    CustomerRequestOptions,\n    ExecutePaymentMethodCheckoutOptions,\n} from '../customer';\n\nexport default interface CustomerStrategy {\n    signIn(credentials: CustomerCredentials, options?: CustomerRequestOptions): Promise<void>;\n\n    signOut(options?: CustomerRequestOptions): Promise<void>;\n\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void>;\n\n    initialize(options?: CustomerInitializeOptions): Promise<void>;\n\n    deinitialize(options?: CustomerRequestOptions): Promise<void>;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/customer/customer.ts",
    "content": "import { Address } from '../address';\n\nexport default interface Customer {\n    id: number;\n    addresses: CustomerAddress[];\n    storeCredit: number;\n    /**\n     * The email address of the signed in customer.\n     */\n    email: string;\n    firstName: string;\n    fullName: string;\n    isGuest: boolean;\n    lastName: string;\n    /**\n     * Indicates whether the customer should be prompted to sign-in.\n     *\n     * Note: You need to enable \"Prompt existing accounts to sign in\" in your Checkout Settings.\n     */\n    shouldEncourageSignIn: boolean;\n    customerGroup?: CustomerGroup;\n}\n\nexport interface CustomerAddress extends Address {\n    id: number;\n    type: string;\n}\n\nexport interface CustomerGroup {\n    id: number;\n    name: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/customer/index.ts",
    "content": "export { default as Customer, CustomerAddress } from './customer';\nexport { default as CustomerCredentials } from './customer-credentials';\nexport { default as CustomerStrategy } from './customer-strategy';\nexport { default as CustomerStrategyFactory } from './customer-strategy-factory';\nexport { default as CustomerStrategyResolveId } from './customer-strategy-resolve-id';\nexport {\n    CustomerRequestOptions,\n    CustomerInitializeOptions,\n    ExecutePaymentMethodCheckoutOptions,\n    CheckoutPaymentMethodExecutedOptions,\n} from './customer-request-options';\nexport { default as InternalCustomer } from './internal-customer';\n"
  },
  {
    "path": "packages/payment-integration-api/src/customer/internal-customer.ts",
    "content": "import { InternalAddress } from '../address';\n\nexport default interface InternalCustomer {\n    addresses: Array<InternalAddress<number>>;\n    customerId: number;\n    isGuest: boolean;\n    storeCredit: number;\n    email: string;\n    firstName: string;\n    lastName: string;\n    name: string;\n    remote?: {\n        provider: string;\n        billing?: string;\n        billingMessage?: string;\n        customer?: string;\n        payment?: string;\n        shipping?: string;\n        customerMessage?: string;\n        useStoreCredit?: boolean;\n    };\n    customerGroupId?: number;\n    customerGroupName?: string;\n    phoneNumber?: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/discount/discount-notification.ts",
    "content": "export default interface DiscountNotification {\n    message: string;\n    messageHtml: string;\n    discountType: string | null;\n    placeholders: string[];\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/discount/discount.ts",
    "content": "export default interface Discount {\n    id: string;\n    discountedAmount: number;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/discount/discounts.mock.ts",
    "content": "import { Discount } from '../discount';\n\nexport function getDiscount(): Discount {\n    return {\n        id: '12e11c8f-7dce-4da3-9413-b649533f8bad',\n        discountedAmount: 10,\n    };\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/discount/index.ts",
    "content": "export { default as Discount } from './discount';\nexport { default as DiscountNotification } from './discount-notification';\n"
  },
  {
    "path": "packages/payment-integration-api/src/errors/buy-now-cart-creation-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/custom-error.ts",
    "content": "export default interface CustomError extends Error {\n    message: string;\n    type: string;\n    subtype?: string;\n}\n\nexport function isCustomError(error: any): error is CustomError {\n    return (\n        typeof error.message === 'string' &&\n        typeof error.type === 'string' &&\n        (typeof error.subtype === 'string' || !error.subtype) &&\n        error instanceof Error\n    );\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/errors/error-response-body.ts",
    "content": "type ErrorResponseBody =\n    | StorefrontErrorResponseBody\n    | InternalErrorResponseBody\n    | PaymentErrorResponseBody;\n\nexport interface StorefrontErrorResponseBody {\n    title: string;\n    type: string;\n    status: number;\n    detail?: string;\n    code?: string;\n    instance?: string;\n}\n\nexport interface InternalErrorResponseBody {\n    title: string;\n    status: number;\n    type: string;\n    code?: number;\n    detail?: string;\n    instance?: string;\n    errors: string[];\n}\n\nexport interface PaymentErrorResponseBody {\n    status: string;\n    errors: PaymentErrorData[];\n}\n\nexport interface PaymentErrorData {\n    code: string;\n    message?: string;\n}\n\nexport default ErrorResponseBody;\n"
  },
  {
    "path": "packages/payment-integration-api/src/errors/index.ts",
    "content": "export { default as BuyNowCartCreationError } from './buy-now-cart-creation-error';\nexport { default as InvalidArgumentError } from './invalid-argument-error';\nexport { default as MissingDataError, MissingDataErrorType } from './missing-data-error';\nexport { default as NotImplementedError } from './not-implemented-error';\nexport { default as NotInitializedError, NotInitializedErrorType } from './not-initialized-error';\nexport {\n    default as PaymentInvalidFormError,\n    PaymentInvalidFormErrorDetails,\n} from './payment-invalid-form-error';\nexport { default as OrderFinalizationNotCompletedError } from './order-finalization-not-completed-error';\nexport { default as OrderFinalizationNotRequiredError } from './order-finalization-not-required-error';\nexport { default as PaymentArgumentInvalidError } from './payment-argument-invalid-error';\nexport { default as PaymentMethodCancelledError } from './payment-method-cancelled-error';\nexport { default as PaymentMethodClientUnavailableError } from './payment-method-client-unavailable-error';\nexport { default as PaymentMethodFailedError } from './payment-method-failed-error';\nexport { default as RequestError } from './request-error';\nexport { default as isRequestError } from './is-request-error';\nexport {\n    default as ErrorResponseBody,\n    StorefrontErrorResponseBody,\n    PaymentErrorResponseBody,\n    InternalErrorResponseBody,\n    PaymentErrorData,\n} from './error-response-body';\nexport { default as PaymentMethodInvalidError } from './payment-method-invalid-error';\nexport { default as StandardError } from './standard-error';\nexport { default as TimeoutError } from './timeout-error';\nexport { isCustomError } from './custom-error';\nexport { default as PaymentExecuteError } from './payment-execute-error';\nexport { default as isThreeDSecureRequiredError } from './isThreeDSecureRequiredError';\n"
  },
  {
    "path": "packages/payment-integration-api/src/errors/invalid-argument-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/is-request-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/isThreeDSecureRequiredError.ts",
    "content": "import { some } from 'lodash';\n\nimport { isRequestError, RequestError } from './';\n\nexport default function isThreeDSecureRequiredError(error: unknown): error is RequestError {\n    return isRequestError(error) && some(error.body.errors, { code: 'three_d_secure_required' });\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/errors/missing-data-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/not-implemented-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/not-initialized-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/order-finalization-not-completed-error.ts",
    "content": "import StandardError from './standard-error';\n\n/**\n * Throw this error if the order finalization request\n * was not completed successfully.\n */\nexport default class OrderFinalizationNotCompletedError extends StandardError {\n    constructor(message?: string) {\n        super(message || 'The current order could not be finalized successfully');\n\n        this.name = 'OrderFinalizationNotCompletedError';\n        this.type = 'order_finalization_not_completed';\n    }\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/errors/order-finalization-not-required-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/payment-argument-invalid-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/payment-execute-error.spec.ts",
    "content": "import PaymentExecuteError from './payment-execute-error';\n\ndescribe('ExecuteError', () => {\n    it('returns error name, type and message', () => {\n        const error = new PaymentExecuteError(\n            'payment.humm_not_processable_error',\n            'hummNotProcessableError',\n            'Humm cannot process your payment for this order, please select another payment method.',\n        );\n\n        expect(error.name).toBe('hummNotProcessableError');\n        expect(error.type).toBe('custom_provider_execute_error');\n        expect(error.subtype).toBe('payment.humm_not_processable_error');\n        expect(error.message).toBe(\n            'Humm cannot process your payment for this order, please select another payment method.',\n        );\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/errors/payment-execute-error.ts",
    "content": "import StandardError from './standard-error';\n\nconst defaultMessage =\n    'Payment cannot be processed for this order, please select another payment method';\n\nexport default class PaymentExecuteError extends StandardError {\n    type = 'custom_provider_execute_error';\n    subtype: string;\n\n    constructor(subtype: string, name: string, message?: string) {\n        super(message || defaultMessage);\n\n        this.name = name;\n        this.subtype = subtype;\n    }\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/errors/payment-invalid-form-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/payment-method-cancelled-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/payment-method-client-unavailable-error.spec.ts",
    "content": "import PaymentMethodClientUnavailableError from './payment-method-client-unavailable-error';\n\ndescribe('PaymentMethodClientUnavailableError', () => {\n    it('returns error name', () => {\n        const error = new PaymentMethodClientUnavailableError();\n\n        expect(error.name).toBe('PaymentMethodClientUnavailableError');\n    });\n\n    it('returns error type', () => {\n        const error = new PaymentMethodClientUnavailableError();\n\n        expect(error.type).toBe('payment_method_client_unavailable');\n    });\n\n    it('returns error default message', () => {\n        const error = new PaymentMethodClientUnavailableError();\n\n        expect(error.message).toBe(\n            'Unable to proceed because the client library of a payment method is not loaded or ready to be used.',\n        );\n    });\n\n    it('returns error custom message', () => {\n        const error = new PaymentMethodClientUnavailableError('This is a custom error message');\n\n        expect(error.message).toBe('This is a custom error message');\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/errors/payment-method-client-unavailable-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/payment-method-failed-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/payment-method-invalid-error.spec.ts",
    "content": "import PaymentMethodInvalidError from './payment-method-invalid-error';\n\ndescribe('PaymentMethodInvalidError', () => {\n    it('returns error name', () => {\n        const error = new PaymentMethodInvalidError();\n\n        expect(error.name).toBe('PaymentMethodInvalidError');\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/errors/payment-method-invalid-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/request-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/set-prototype-of.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/standard-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/errors/timeout-error.spec.ts",
    "content": "import TimeoutError from './timeout-error';\n\ndescribe('TimeoutError', () => {\n    it('returns error name', () => {\n        const error = new TimeoutError();\n\n        expect(error.name).toBe('TimeoutError');\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/errors/timeout-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/fee/fee.ts",
    "content": "export default interface Fee {\n    id: string;\n    type: string;\n    name: string;\n    displayName: string;\n    cost: number;\n    source: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/fee/index.ts",
    "content": "export { default as Fee } from './fee';\n"
  },
  {
    "path": "packages/payment-integration-api/src/form/form-fields.ts",
    "content": "import { AddressKey } from '../address';\n\nexport type FormFieldFieldType =\n    | 'checkbox'\n    | 'date'\n    | 'text'\n    | 'dropdown'\n    | 'password'\n    | 'radio'\n    | 'multiline';\n\nexport type FormFieldType = 'array' | 'date' | 'integer' | 'string';\n\nexport interface CustomerPasswordRequirements {\n    alpha: string;\n    numeric: string;\n    minlength: number;\n    description: string;\n}\n\nexport default interface FormField {\n    name: string | AddressKey;\n    custom: boolean;\n    id: string;\n    label: string;\n    required: boolean;\n    default?: string;\n    fieldType?: FormFieldFieldType;\n    type?: FormFieldType;\n    itemtype?: string;\n    maxLength?: number;\n    secret?: boolean;\n    min?: string | number;\n    max?: string | number;\n    inputDateFormat?: string;\n    options?: FormFieldOptions;\n    requirements?: CustomerPasswordRequirements;\n}\n\nexport interface FormFields {\n    customerAccount: FormField[];\n    shippingAddress: FormField[];\n    billingAddress: FormField[];\n}\n\nexport interface FormFieldOptions {\n    helperLabel?: string;\n    items?: FormFieldItem[];\n    rows?: number;\n}\n\nexport interface FormFieldItem {\n    value: string;\n    label: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/form/index.ts",
    "content": "export { default as FormField, FormFields } from './form-fields';\n"
  },
  {
    "path": "packages/payment-integration-api/src/geography/country.ts",
    "content": "export default interface Country {\n    code: string;\n    name: string;\n    hasPostalCodes: boolean;\n    subdivisions: Region[];\n    requiresState: boolean;\n}\n\nexport interface Region {\n    code: string;\n    name: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/geography/index.ts",
    "content": "export { default as Country, Region } from './country';\n"
  },
  {
    "path": "packages/payment-integration-api/src/hosted-form/hosted-field-type.ts",
    "content": "// copied from packages/core/src/hosted-form/hosted-field-type.ts\n\nenum HostedFieldType {\n    CardCode = 'cardCode',\n    CardCodeVerification = 'cardCodeVerification',\n    CardExpiry = 'cardExpiry',\n    CardName = 'cardName',\n    CardNumber = 'cardNumber',\n    CardNumberVerification = 'cardNumberVerification',\n    CardExpiryVerification = 'cardExpiryVerification',\n}\n\nexport default HostedFieldType;\n"
  },
  {
    "path": "packages/payment-integration-api/src/hosted-form/hosted-form-options.ts",
    "content": "// copied from packages/core/src/hosted-form/hosted-form-options.ts\n\nimport HostedFieldType from './hosted-field-type';\nimport {\n    HostedInputBlurEvent,\n    HostedInputCardTypeChangeEvent,\n    HostedInputEnterEvent,\n    HostedInputFocusEvent,\n    HostedInputStyles,\n    HostedInputValidateEvent,\n} from './iframe-content';\n\nexport default interface HostedFormOptions {\n    fields: HostedFieldOptionsMap;\n    styles?: HostedFieldStylesMap;\n    onBlur?(data: HostedFieldBlurEventData): void;\n    onCardTypeChange?(data: HostedFieldCardTypeChangeEventData): void;\n    onEnter?(data: HostedFieldEnterEventData): void;\n    onFocus?(data: HostedFieldFocusEventData): void;\n    onValidate?(data: HostedFieldValidateEventData): void;\n}\n\nexport type HostedFieldBlurEventData = HostedInputBlurEvent['payload'];\nexport type HostedFieldCardTypeChangeEventData = HostedInputCardTypeChangeEvent['payload'];\nexport type HostedFieldEnterEventData = HostedInputEnterEvent['payload'];\nexport type HostedFieldFocusEventData = HostedInputFocusEvent['payload'];\nexport type HostedFieldValidateEventData = HostedInputValidateEvent['payload'];\n\nexport type HostedFieldOptionsMap = HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap;\n\nexport interface HostedCardFieldOptionsMap {\n    [HostedFieldType.CardCode]?: HostedCardFieldOptions;\n    [HostedFieldType.CardExpiry]: HostedCardFieldOptions;\n    [HostedFieldType.CardName]: HostedCardFieldOptions;\n    [HostedFieldType.CardNumber]: HostedCardFieldOptions;\n}\n\nexport interface HostedStoredCardFieldOptionsMap {\n    [HostedFieldType.CardCodeVerification]?: HostedStoredCardFieldOptions;\n    [HostedFieldType.CardNumberVerification]?: HostedStoredCardFieldOptions;\n    [HostedFieldType.CardExpiryVerification]?: HostedStoredCardFieldOptions;\n}\n\nexport interface HostedCardFieldOptions {\n    accessibilityLabel?: string;\n    containerId: string;\n    placeholder?: string;\n}\n\nexport interface HostedStoredCardFieldOptions extends HostedCardFieldOptions {\n    instrumentId: string;\n}\n\nexport interface HostedFieldStylesMap {\n    default?: HostedFieldStyles;\n    error?: HostedFieldStyles;\n    focus?: HostedFieldStyles;\n}\n\ntype HostedFieldStyles = HostedInputStyles;\n"
  },
  {
    "path": "packages/payment-integration-api/src/hosted-form/hosted-form.ts",
    "content": "import { OrderPaymentRequestBody } from '../order';\nimport { PaymentAdditionalAction } from '../payment';\n\nimport { HostedInputSubmitSuccessEvent } from './hosted-input-events';\n\nexport interface HostedForm {\n    attach(): Promise<void>;\n    detach(): void;\n    getBin(): string | undefined;\n    getCardType(): string | undefined;\n    submit(\n        payload: OrderPaymentRequestBody,\n        additionalActionData?: PaymentAdditionalAction,\n    ): Promise<HostedInputSubmitSuccessEvent>;\n    validate(): Promise<void>;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/hosted-form/hosted-input-events.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nexport enum HostedInputEventType {\n    AttachSucceeded = 'HOSTED_INPUT:ATTACH_SUCCEEDED',\n    AttachFailed = 'HOSTED_INPUT:ATTACH_FAILED',\n    BinChanged = 'HOSTED_INPUT:BIN_CHANGED',\n    Blurred = 'HOSTED_INPUT:BLURRED',\n    Changed = 'HOSTED_INPUT:CHANGED',\n    CardTypeChanged = 'HOSTED_INPUT:CARD_TYPE_CHANGED',\n    Entered = 'HOSTED_INPUT:ENTERED',\n    Focused = 'HOSTED_INPUT:FOCUSED',\n    SubmitSucceeded = 'HOSTED_INPUT:SUBMIT_SUCCEEDED',\n    SubmitFailed = 'HOSTED_INPUT:SUBMIT_FAILED',\n    Validated = 'HOSTED_INPUT:VALIDATED',\n    StoredCardSucceeded = 'HOSTED_INPUT:STORED_CARD_SUCCEEDED',\n    StoredCardFailed = 'HOSTED_INPUT:STORED_CARD_FAILED',\n    SubmitManualOrderSucceeded = 'HOSTED_INPUT:SUBMIT_MANUAL_ORDER_SUCCEEDED',\n    SubmitManualOrderFailed = 'HOSTED_INPUT:SUBMIT_MANUAL_ORDER_FAILED',\n}\n\nexport interface HostedInputSubmitSuccessEvent {\n    type: HostedInputEventType.SubmitSucceeded;\n    payload: {\n        response: Response<unknown>;\n    };\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/hosted-form/iframe-content.ts",
    "content": "// copied from packages/core/src/hosted-form/iframe-content\n\nimport HostedFieldType from './hosted-field-type';\nimport { HostedInputEventType } from './hosted-input-events';\n\nexport interface HostedInputValidateErrorData {\n    fieldType: string;\n    message: string;\n    type: string;\n}\n\nexport interface HostedInputValidateErrorDataMap {\n    [HostedFieldType.CardCode]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardCodeVerification]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardExpiry]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardName]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardNumber]?: HostedInputValidateErrorData[];\n    [HostedFieldType.CardNumberVerification]?: HostedInputValidateErrorData[];\n}\n\nexport interface HostedInputValidateResults {\n    errors: HostedInputValidateErrorDataMap;\n    isValid: boolean;\n}\n\nexport interface HostedInputBlurEvent {\n    type: HostedInputEventType.Blurred;\n    payload: {\n        fieldType: HostedFieldType;\n    };\n}\n\nexport interface HostedInputCardTypeChangeEvent {\n    type: HostedInputEventType.CardTypeChanged;\n    payload: {\n        cardType?: string;\n    };\n}\n\nexport interface HostedInputEnterEvent {\n    type: HostedInputEventType.Entered;\n    payload: {\n        fieldType: HostedFieldType;\n    };\n}\n\nexport interface HostedInputFocusEvent {\n    type: HostedInputEventType.Focused;\n    payload: {\n        fieldType: HostedFieldType;\n    };\n}\n\nexport type HostedInputStyles = Partial<\n    Pick<CSSStyleDeclaration, 'color' | 'fontFamily' | 'fontSize' | 'fontWeight'>\n>;\n\nexport interface HostedInputValidateEvent {\n    type: HostedInputEventType.Validated;\n    payload: HostedInputValidateResults;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/hosted-form/index.ts",
    "content": "export {\n    default as HostedFormOptions,\n    HostedCardFieldOptions,\n    HostedCardFieldOptionsMap,\n    HostedFieldBlurEventData,\n    HostedFieldCardTypeChangeEventData,\n    HostedFieldEnterEventData,\n    HostedFieldFocusEventData,\n    HostedFieldOptionsMap,\n    HostedFieldStylesMap,\n    HostedFieldValidateEventData,\n    HostedStoredCardFieldOptions,\n    HostedStoredCardFieldOptionsMap,\n} from './hosted-form-options';\nexport { default as HostedFieldType } from './hosted-field-type';\nexport { HostedForm } from './hosted-form';\nexport { HostedInputEventType, HostedInputSubmitSuccessEvent } from './hosted-input-events';\nexport {\n    HostedInputBlurEvent,\n    HostedInputCardTypeChangeEvent,\n    HostedInputEnterEvent,\n    HostedInputFocusEvent,\n    HostedInputStyles,\n    HostedInputValidateErrorData,\n    HostedInputValidateErrorDataMap,\n    HostedInputValidateEvent,\n    HostedInputValidateResults,\n} from './iframe-content';\nexport { default as isCreditCardFormFields } from './is-credit-card-form-fields';\nexport { default as isCreditCardVaultedFormFields } from './is-credit-card-vaulted-form-fields';\n"
  },
  {
    "path": "packages/payment-integration-api/src/hosted-form/is-credit-card-form-fields.spec.ts",
    "content": "import HostedFieldType from './hosted-field-type';\nimport isCreditCardFormFields from './is-credit-card-form-fields';\n\ndescribe('isStoredCreditCardFormFields', () => {\n    it('returns true if the fields object does not have default credit card form fields', () => {\n        expect(\n            isCreditCardFormFields({\n                [HostedFieldType.CardCode]: { containerId: 'cardCodeContainerId' },\n                [HostedFieldType.CardExpiry]: { containerId: 'cardExpiryContainerId' },\n                [HostedFieldType.CardName]: { containerId: 'cardNameContainerId' },\n                [HostedFieldType.CardNumber]: { containerId: 'cardNumberContainerId' },\n            }),\n        ).toBe(true);\n    });\n\n    it('returns false if the fields object has default credit card form fields', () => {\n        expect(\n            isCreditCardFormFields({\n                [HostedFieldType.CardCodeVerification]: {\n                    containerId: 'cardCodeContainerId',\n                    instrumentId: 'cardCodeInstrumentId',\n                },\n                [HostedFieldType.CardNumberVerification]: {\n                    containerId: 'cardNumberContainerId',\n                    instrumentId: 'cardNumberInstrumentId',\n                },\n            }),\n        ).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/hosted-form/is-credit-card-form-fields.ts",
    "content": "import HostedFieldType from './hosted-field-type';\nimport { HostedCardFieldOptionsMap, HostedStoredCardFieldOptionsMap } from './hosted-form-options';\n\nexport default function isCreditCardFormFields(\n    fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n): fields is HostedCardFieldOptionsMap {\n    return (\n        HostedFieldType.CardNumber in fields &&\n        HostedFieldType.CardName in fields &&\n        HostedFieldType.CardExpiry in fields\n    );\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/hosted-form/is-credit-card-vaulted-form-fields.ts",
    "content": "import HostedFieldType from './hosted-field-type';\nimport { HostedCardFieldOptionsMap, HostedStoredCardFieldOptionsMap } from './hosted-form-options';\n\nexport default function isCreditCardVaultedFormFields(\n    fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n): fields is HostedStoredCardFieldOptionsMap {\n    return (\n        HostedFieldType.CardNumberVerification in fields &&\n        HostedFieldType.CardCodeVerification in fields &&\n        HostedFieldType.CardExpiryVerification in fields\n    );\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/index.ts",
    "content": "export { Address, AddressRequestBody, LegacyAddress } from './address';\nexport { BillingAddress, BillingAddressRequestBody, isBillingAddressLike } from './billing';\nexport {\n    CheckoutButtonStrategy,\n    CheckoutButtonStrategyFactory,\n    CheckoutButtonStrategyResolveId,\n    CheckoutButtonInitializeOptions,\n    DefaultCheckoutButtonHeight,\n} from './checkout-buttons';\nexport {\n    BuyNowCartRequestBody,\n    Cart,\n    CartSource,\n    CustomItem,\n    DigitalItem,\n    GiftCertificateItem,\n    LineItemCategory,\n    LineItemMap,\n    PhysicalItem,\n} from './cart';\nexport { Checkout } from './checkout';\nexport { BrowserInfo, getBrowserInfo } from './common/browser-info';\nexport { CancellablePromise } from './common/cancellable-promise';\nexport { ContentType, INTERNAL_USE_ONLY, SDK_VERSION_HEADERS } from './common/http-request';\nexport { Omit, PartialDeep } from './common/types';\nexport { objectWithKebabCaseKeys, AmountTransformer } from './common/utility';\nexport { Config, StoreConfig, CheckoutSettings, Capabilities, StoreProfile } from './config';\nexport { Coupon } from './coupon';\nexport {\n    Currency,\n    CurrencyFormatter,\n    CurrencyConfig,\n    CurrencyService,\n    createCurrencyService,\n} from './currency';\nexport {\n    CheckoutPaymentMethodExecutedOptions,\n    CustomerCredentials,\n    CustomerStrategy,\n    CustomerStrategyFactory,\n    CustomerStrategyResolveId,\n    Customer,\n    CustomerAddress,\n    CustomerRequestOptions,\n    CustomerInitializeOptions,\n    InternalCustomer,\n    ExecutePaymentMethodCheckoutOptions,\n} from './customer';\nexport { Discount } from './discount';\nexport {\n    BuyNowCartCreationError,\n    ErrorResponseBody,\n    InternalErrorResponseBody,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotImplementedError,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotCompletedError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentErrorData,\n    PaymentErrorResponseBody,\n    PaymentExecuteError,\n    PaymentInvalidFormError,\n    PaymentInvalidFormErrorDetails,\n    PaymentMethodCancelledError,\n    PaymentMethodClientUnavailableError,\n    PaymentMethodInvalidError,\n    PaymentMethodFailedError,\n    RequestError,\n    StandardError,\n    StorefrontErrorResponseBody,\n    TimeoutError,\n    isRequestError,\n    isCustomError,\n    isThreeDSecureRequiredError,\n} from './errors';\nexport { Country, Region } from './geography';\nexport {\n    HostedCardFieldOptions,\n    HostedCardFieldOptionsMap,\n    HostedFieldBlurEventData,\n    HostedFieldCardTypeChangeEventData,\n    HostedFieldEnterEventData,\n    HostedFieldFocusEventData,\n    HostedFieldType,\n    HostedFieldOptionsMap,\n    HostedFieldStylesMap,\n    HostedFieldValidateEventData,\n    HostedForm,\n    HostedFormOptions,\n    HostedInputBlurEvent,\n    HostedInputCardTypeChangeEvent,\n    HostedInputEventType,\n    HostedInputEnterEvent,\n    HostedInputFocusEvent,\n    HostedInputStyles,\n    HostedInputSubmitSuccessEvent,\n    HostedInputValidateErrorData,\n    HostedInputValidateErrorDataMap,\n    HostedInputValidateEvent,\n    HostedInputValidateResults,\n    HostedStoredCardFieldOptions,\n    HostedStoredCardFieldOptionsMap,\n    isCreditCardFormFields,\n    isCreditCardVaultedFormFields,\n} from './hosted-form';\nexport {\n    GatewayOrderPayment,\n    GiftCertificateOrderPayment,\n    Order,\n    OrderConsignment,\n    OrderShippingConsignment,\n    OrderShippingConsignmentDiscount,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    FinalizeOrderAction,\n    LoadOrderSucceededAction,\n    OrderActionType,\n    SubmitOrderAction,\n    OrderMeta,\n    OrderMetaState,\n    InternalOrder,\n    InternalIncompleteOrder,\n} from './order';\nexport {\n    WithEcpInstrument,\n    WithSepaInstrument,\n    WithIdealInstrument,\n    WithPayByBankInstrument,\n    BlueSnapDirectEcpPayload,\n    BlueSnapDirectSepaPayload,\n    IdealPayload,\n    CardInstrument,\n    CreditCardInstrument,\n    FormattedHostedInstrument,\n    WithBankAccountInstrument,\n    isCreditCardInstrument,\n    isVaultedInstrument,\n    isHostedInstrumentLike,\n    isWithAccountCreation,\n    HostedInstrument,\n    HostedCreditCardInstrument,\n    InitializeOffsitePaymentConfig,\n    NonceInstrument,\n    Payment,\n    PaymentResponse,\n    PaymentActionType,\n    PaymentMethodActionType,\n    SubmitPaymentAction,\n    PaymentAdditionalAction,\n    PaymentInitializeOptions,\n    PaymentMethod,\n    PaymentMethodMeta,\n    PaymentRequestOptions,\n    PaymentResponseBody,\n    PaymentStatusTypes,\n    PaymentStrategy,\n    PaymentInstrumentPayload,\n    PaymentInstrumentMeta,\n    PaymentStrategyFactory,\n    PaymentStrategyResolveId,\n    VaultedInstrument,\n    WithAccountCreation,\n    StripeUPEIntent,\n    StripeV3FormattedPayload,\n    PaypalInstrument,\n    FormattedPayload,\n    HostedVaultedInstrument,\n    isHostedVaultedInstrument,\n    UntrustedShippingCardVerificationType,\n    AccountInstrument,\n    PaymentInstrument,\n    ThreeDSecure,\n    ThreeDSecureToken,\n    ThreeDsResult,\n    InstrumentMeta,\n    StorefrontPaymentRequestSender,\n} from './payment';\nexport { StoreCreditActionType } from './store-credit';\n\nexport { default as PaymentIntegrationSelectors } from './payment-integration-selectors';\nexport { default as PaymentIntegrationService } from './payment-integration-service';\nexport {\n    PaymentProviderCustomer,\n    PayPalConnectCustomer,\n    StripeAcceleratedCheckoutCustomer,\n} from './payment-provider-customer';\nexport {\n    Consignment,\n    ShippingAddress,\n    ShippingOption,\n    ShippingAddressRequestBody,\n    getShippableItemsCount,\n    itemsRequireShipping,\n} from './shipping';\nexport { RequestOptions, guard } from './util-types';\nexport { default as ResolvableModule } from './resolvable-module';\nexport { default as isResolvableModule } from './is-resolvable-module';\nexport { default as toResolvableModule } from './to-resolvable-module';\nexport { RemoteCheckoutActionType } from './remote-checkout';\nexport { default as UnsupportedBrowserError } from './unsupported-browser-error';\n"
  },
  {
    "path": "packages/payment-integration-api/src/is-resolvable-module.spec.ts",
    "content": "import isResolvableModule from './is-resolvable-module';\n\ndescribe('isResolvableModule', () => {\n    it('returns true if resolvable module', () => {\n        expect(isResolvableModule({ resolveIds: [{ id: 'foo' }] })).toBe(true);\n    });\n\n    it('returns false if not resolvable module', () => {\n        expect(isResolvableModule({ someOtherProperty: true })).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/is-resolvable-module.ts",
    "content": "import ResolvableModule from './resolvable-module';\n\nexport default function isResolvableModule<TModule extends object, TIdentifier>(\n    module: TModule,\n): module is ResolvableModule<TModule, TIdentifier> {\n    return module && 'resolveIds' in module;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/mocks/carts.mock.ts",
    "content": "import { Cart, CartSource } from '../cart';\nimport { getDiscount } from '../discount/discounts.mock';\n\nimport { getCoupon } from './coupons.mock';\nimport { getCurrency } from './currency.mock';\nimport {\n    getCustomItem,\n    getDigitalItem,\n    getGiftCertificateItem,\n    getPhysicalItem,\n} from './line-items.mock';\n\nexport default function getCart(): Cart {\n    return {\n        id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n        customerId: 4,\n        companyId: null,\n        currency: getCurrency(),\n        email: 'foo@bar.com',\n        isTaxIncluded: false,\n        baseAmount: 200,\n        discountAmount: 10,\n        cartAmount: 190,\n        coupons: [getCoupon()],\n        discounts: [getDiscount()],\n        lineItems: {\n            physicalItems: [getPhysicalItem()],\n            digitalItems: [getDigitalItem()],\n            giftCertificates: [getGiftCertificateItem()],\n            customItems: [getCustomItem()],\n        },\n        createdTime: '2018-03-06T04:41:49+00:00',\n        updatedTime: '2018-03-07T03:44:51+00:00',\n        locale: 'en',\n    };\n}\n\nexport function getBuyNowCart(): Cart {\n    return {\n        ...getCart(),\n        source: CartSource.BuyNow,\n    };\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/mocks/config.mock.ts",
    "content": "import { Config } from '../config';\n\nexport default function getConfig(): Config {\n    return {\n        context: {\n            checkoutId: '6a6071cc-82ba-45aa-adb0-ebec42d6ff6f',\n            flashMessages: [],\n            geoCountryCode: 'AU',\n            payment: {\n                formId: 'dc030783-6129-4ee3-8e06-6f4270df1527',\n            },\n        },\n        customization: {\n            languageData: [],\n        },\n        storeConfig: {\n            cdnPath: 'https://cdn.bcapp.dev/rHEAD',\n            checkoutSettings: {\n                features: {},\n                checkoutBillingSameAsShippingEnabled: true,\n                checkoutUserExperienceSettings: {\n                    checkoutV2Theme: false,\n                    walletButtonsOnTop: false,\n                    floatingLabelEnabled: false,\n                },\n                enableOrderComments: true,\n                enableTermsAndConditions: false,\n                guestCheckoutEnabled: true,\n                hasMultiShippingEnabled: true,\n                googleMapsApiKey: '',\n                googleRecaptchaSitekey: 'sitekey',\n                isAccountCreationEnabled: true,\n                isAnalyticsEnabled: false,\n                isCardVaultingEnabled: true,\n                isExpressPrivacyPolicy: false,\n                isStorefrontSpamProtectionEnabled: false,\n                isSignInEmailEnabled: false,\n                isPaymentRequestEnabled: false,\n                isPaymentRequestCanMakePaymentEnabled: false,\n                isCouponCodeCollapsed: true,\n                isSpamProtectionEnabled: true,\n                isTrustedShippingAddressEnabled: false,\n                orderTermsAndConditions: '',\n                orderTermsAndConditionsLocation: '',\n                orderTermsAndConditionsLink: '',\n                orderTermsAndConditionsType: '',\n                privacyPolicyUrl: '',\n                providerWithCustomCheckout: null,\n                shippingQuoteFailedMessage:\n                    \"Unfortunately one or more items in your cart can't be shipped to your location. Please choose a different delivery address.\",\n                realtimeShippingProviders: ['Fedex', 'UPS', 'USPS'],\n                requiresMarketingConsent: false,\n                remoteCheckoutProviders: [],\n                shouldRedirectToStorefrontForAuth: false,\n            },\n            currency: {\n                code: 'USD',\n                decimalPlaces: '2',\n                decimalSeparator: '.',\n                isTransactional: true,\n                symbolLocation: 'left',\n                symbol: '$',\n                thousandsSeparator: ',',\n            },\n            displayDateFormat: 'dd/MM/yyyy',\n            displaySettings: {\n                hidePriceFromGuests: false,\n            },\n            inputDateFormat: 'dd/MM/yyyy',\n            formFields: {\n                customerAccount: [],\n                billingAddress: [],\n                shippingAddress: [],\n            },\n            links: {\n                cartLink: 'https://store-k1drp8k8.bcapp.dev/cart.php',\n                checkoutLink: 'https://store-k1drp8k8.bcapp.dev/checkout',\n                createAccountLink:\n                    'https://store-k1drp8k8.bcapp.dev/login.php?action=create_account',\n                forgotPasswordLink:\n                    'https://store-k1drp8k8.bcapp.dev/login.php?action=reset_password',\n                loginLink: 'https://store-k1drp8k8.bcapp.dev/login.php',\n                logoutLink: 'https://store-k1drp8k8.bcapp.dev/login.php?action=logout',\n                siteLink: 'https://store-k1drp8k8.bcapp.dev/',\n                orderConfirmationLink:\n                    'https://store-k1drp8k8.bcapp.dev/checkout/order-confirmation',\n            },\n            paymentSettings: {\n                bigpayBaseUrl: 'https://bigpay.integration.zone',\n                clientSidePaymentProviders: [\n                    'migs',\n                    'eway',\n                    'securenet',\n                    'usaepay',\n                    'elavon',\n                    'hps',\n                    'quickbooks',\n                    'orbital',\n                    'stripe',\n                    'authorizenet',\n                    'firstdatae4v14',\n                    'nmi',\n                    'braintree',\n                    'braintreepaypal',\n                    'paypal',\n                    'sagepay',\n                    'squarev2',\n                    'afterpay',\n                    'vantiv',\n                ],\n            },\n            shopperConfig: {\n                defaultNewsletterSignup: false,\n                passwordRequirements: {\n                    alpha: '/[A-Za-z]/',\n                    numeric: '/[0-9]/',\n                    minlength: 7,\n                    error: 'Passwords must be at least 7 characters and contain both alphabetic and numeric characters.',\n                },\n                showNewsletterSignup: true,\n            },\n            storeProfile: {\n                orderEmail: 's1504098821@example.com',\n                shopPath: 'https://store-k1drp8k8.bcapp.dev',\n                storeCountry: 'United States',\n                storeCountryCode: 'US',\n                storeHash: 'k1drp8k8',\n                storeId: '1504098821',\n                storeName: 's1504098821',\n                storePhoneNumber: '987654321',\n                storeLanguage: 'en_US',\n            },\n            imageDirectory: 'product_images',\n            isAngularDebuggingEnabled: false,\n            shopperCurrency: {\n                code: 'USD',\n                symbolLocation: 'left',\n                symbol: '$',\n                decimalPlaces: '2',\n                decimalSeparator: '.',\n                thousandsSeparator: ',',\n                exchangeRate: 1,\n                isTransactional: true,\n            },\n            inventorySettings: {\n                showQuantityOnBackorder: false,\n                showBackorderMessage: false,\n                showQuantityOnHand: false,\n                showBackorderAvailabilityPrompt: false,\n                showDefaultShippingExpectationPrompt: false,\n                backorderAvailabilityPrompt: '',\n                defaultShippingExpectationPrompt: '',\n                shouldDisplayBackorderMessagesOnStorefront: false,\n            },\n        },\n    };\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/mocks/coupons.mock.ts",
    "content": "import { Coupon } from '../coupon';\n\nexport function getCoupon(): Coupon {\n    return {\n        code: 'savebig2015',\n        displayName: '20% off each item',\n        couponType: 'percentage_discount',\n        discountedAmount: 5,\n        id: '1',\n    };\n}\n\nexport function getShippingCoupon(): Coupon {\n    return {\n        code: '279F507D817E3E7',\n        displayName: '$5.00 off the shipping total',\n        couponType: 'shipping_discount',\n        discountedAmount: 5,\n        id: '4',\n    };\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/mocks/currency.mock.ts",
    "content": "import { Currency } from '../currency';\n\nexport function getCurrency(): Currency {\n    return {\n        name: 'US Dollar',\n        code: 'USD',\n        symbol: '$',\n        decimalPlaces: 2,\n    };\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/mocks/line-items.mock.ts",
    "content": "import { CustomItem, DigitalItem, GiftCertificateItem, PhysicalItem, StockPosition } from '../cart';\n\nexport function getStockPosition(): StockPosition {\n    return {\n        quantityOnHand: 10,\n        quantityBackordered: 0,\n        quantityOutOfStock: 0,\n        backorderMessage: null,\n    };\n}\n\nexport function getCustomItem(): CustomItem {\n    return {\n        id: '55e11c8f-7dce-4da3-9413-b649533f8bad',\n        listPrice: 10,\n        extendedListPrice: 20,\n        name: 'Custom item',\n        quantity: 2,\n        sku: 'custom-sku',\n    };\n}\n\nexport function getPhysicalItem(): PhysicalItem {\n    return {\n        id: '666',\n        variantId: 71,\n        productId: 103,\n        sku: 'CLC',\n        name: 'Canvas Laundry Cart',\n        url: '/canvas-laundry-cart/',\n        quantity: 1,\n        brand: 'OFS',\n        isTaxable: true,\n        imageUrl: '/images/canvas-laundry-cart.jpg',\n        discounts: [],\n        discountAmount: 10,\n        couponAmount: 0,\n        listPrice: 200,\n        salePrice: 190,\n        retailPrice: 210,\n        comparisonPrice: 200,\n        extendedListPrice: 200,\n        extendedSalePrice: 190,\n        extendedComparisonPrice: 200,\n        isShippingRequired: true,\n        addedByPromotion: false,\n        options: [\n            {\n                name: 'n',\n                nameId: 1,\n                value: 'v',\n                valueId: 3,\n            },\n        ],\n        categories: [[{ name: 'Cat 1' }], [{ name: 'Furniture' }, { name: 'Bed' }]],\n        categoryNames: ['Cat 1'],\n        stockPosition: getStockPosition(),\n    };\n}\n\nexport function getDigitalItem(): DigitalItem {\n    return {\n        id: '667',\n        variantId: 72,\n        productId: 104,\n        sku: 'CLX',\n        name: 'Digital Book',\n        url: '/digital-book/',\n        quantity: 1,\n        brand: 'Digitalia',\n        isTaxable: true,\n        imageUrl: '/images/digital-book.jpg',\n        discounts: [],\n        discountAmount: 0,\n        couponAmount: 0,\n        listPrice: 200,\n        salePrice: 200,\n        retailPrice: 210,\n        comparisonPrice: 200,\n        downloadPageUrl: 'url.php',\n        downloadFileUrls: [],\n        downloadSize: '',\n        extendedListPrice: 200,\n        extendedSalePrice: 200,\n        extendedComparisonPrice: 200,\n        addedByPromotion: false,\n        options: [\n            {\n                name: 'm',\n                nameId: 1,\n                value: 'l',\n                valueId: 3,\n            },\n        ],\n        categories: [[{ name: 'Cat 1' }], [{ name: 'Cat 2' }], [{ name: 'Cat 3' }]],\n        categoryNames: ['Ebooks', 'Audio Books'],\n        stockPosition: getStockPosition(),\n    };\n}\n\nexport function getGiftCertificateItem(): GiftCertificateItem {\n    return {\n        id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n        name: '$100 Gift Certificate',\n        message: 'message',\n        amount: 100,\n        taxable: false,\n        theme: 'General',\n        sender: {\n            name: 'pablo',\n            email: 'pa@blo.com',\n        },\n        recipient: {\n            name: 'luis',\n            email: 'lu@is.com',\n        },\n    };\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/order/index.ts",
    "content": "export {\n    default as Order,\n    GatewayOrderPayment,\n    GiftCertificateOrderPayment,\n    OrderConsignment,\n    OrderMeta,\n    OrderShippingConsignment,\n    OrderShippingConsignmentDiscount,\n} from './order';\nexport { default as OrderRequestBody, OrderPaymentRequestBody } from './order-request-body';\nexport {\n    LoadOrderAction,\n    FinalizeOrderAction,\n    LoadOrderSucceededAction,\n    OrderActionType,\n    SubmitOrderAction,\n} from './order-actions';\nexport { OrderMetaState } from './order-state';\nexport { default as InternalOrder, InternalIncompleteOrder } from './internal-order';\n"
  },
  {
    "path": "packages/payment-integration-api/src/order/internal-order-responses.ts",
    "content": "import { InternalCustomer } from '../customer';\n\nimport InternalOrder from './internal-order';\n\nexport interface InternalOrderResponseData {\n    customer: InternalCustomer;\n    order: InternalOrder;\n}\n\nexport interface InternalOrderResponseMeta {\n    deviceFingerprint?: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/order/internal-order.ts",
    "content": "import { InternalLineItem } from '../cart';\nimport { InternalCoupon, InternalGiftCertificate } from '../coupon';\nimport { DiscountNotification } from '../discount';\n\nexport default interface InternalOrder {\n    id: number;\n    orderId: number;\n    items: InternalLineItem[];\n    currency: string;\n    customerCanBeCreated: boolean;\n    subtotal: {\n        amount: number;\n        integerAmount: number;\n    };\n    coupon: {\n        discountedAmount: number;\n        coupons: InternalCoupon[];\n    };\n    discount: {\n        amount: number;\n        integerAmount: number;\n    };\n    discountNotifications: DiscountNotification[];\n    giftCertificate: InternalGiftCertificateList;\n    shipping: {\n        amount: number;\n        integerAmount: number;\n        amountBeforeDiscount: number;\n        integerAmountBeforeDiscount: number;\n    };\n    status: string;\n    storeCredit: {\n        amount: number;\n    };\n    taxes: Array<{ name: string; amount: number }>;\n    taxTotal: {\n        amount: number;\n        integerAmount: number;\n    };\n    handling: {\n        amount: number;\n        integerAmount: number;\n    };\n    grandTotal: {\n        amount: number;\n        integerAmount: number;\n    };\n    token?: string;\n    payment: InternalOrderPayment;\n    socialData?: { [itemId: string]: InternalSocialDataList };\n    hasDigitalItems: boolean;\n    isDownloadable: boolean;\n    isComplete: boolean;\n    callbackUrl?: string;\n}\n\nexport interface InternalIncompleteOrder {\n    isComplete: false;\n    orderId: null;\n    payment: InternalOrderPayment;\n    status?: string;\n    hasDigitalItems?: boolean;\n    isDownloadable?: boolean;\n}\n\nexport interface InternalGiftCertificateList {\n    totalDiscountedAmount: number;\n    appliedGiftCertificates: { [code: string]: InternalGiftCertificate };\n}\n\nexport interface InternalOrderPayment {\n    id?: string;\n    gateway?: string;\n    redirectUrl?: string;\n    returnUrl?: string;\n    status?: string;\n    helpText?: string;\n}\n\nexport interface InternalOrderMeta {\n    deviceFingerprint?: string;\n}\n\nexport interface InternalSocialDataItem {\n    name: string;\n    description: string;\n    image: string;\n    url: string;\n    shareText: string;\n    sharingLink: string;\n    channelName: string;\n    channelCode: string;\n}\n\nexport interface InternalSocialDataList {\n    [key: string]: InternalSocialDataItem;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/order/order-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { InternalOrderResponseData } from './internal-order-responses';\nimport Order from './order';\n\nexport enum OrderActionType {\n    LoadOrderRequested = 'LOAD_ORDER_REQUESTED',\n    LoadOrderSucceeded = 'LOAD_ORDER_SUCCEEDED',\n    LoadOrderFailed = 'LOAD_ORDER_FAILED',\n\n    LoadOrderPaymentsRequested = 'LOAD_ORDER_PAYMENTS_REQUESTED',\n    LoadOrderPaymentsSucceeded = 'LOAD_ORDER_PAYMENTS_SUCCEEDED',\n    LoadOrderPaymentsFailed = 'LOAD_ORDER_PAYMENTS_FAILED',\n\n    SubmitOrderRequested = 'SUBMIT_ORDER_REQUESTED',\n    SubmitOrderSucceeded = 'SUBMIT_ORDER_SUCCEEDED',\n    SubmitOrderFailed = 'SUBMIT_ORDER_FAILED',\n\n    FinalizeOrderRequested = 'FINALIZE_ORDER_REQUESTED',\n    FinalizeOrderSucceeded = 'FINALIZE_ORDER_SUCCEEDED',\n    FinalizeOrderFailed = 'FINALIZE_ORDER_FAILED',\n}\n\nexport type OrderAction =\n    | LoadOrderAction\n    | LoadOrderPaymentsAction\n    | SubmitOrderAction\n    | FinalizeOrderAction;\n\nexport type LoadOrderPaymentsAction =\n    | LoadOrderPaymentsRequestedAction\n    | LoadOrderPaymentsSucceededAction\n    | LoadOrderPaymentsFailedAction;\n\nexport type LoadOrderAction =\n    | LoadOrderRequestedAction\n    | LoadOrderSucceededAction\n    | LoadOrderFailedAction;\n\nexport type SubmitOrderAction =\n    | SubmitOrderRequestedAction\n    | SubmitOrderSucceededAction\n    | SubmitOrderFailedAction\n    | LoadOrderAction;\n\nexport type FinalizeOrderAction =\n    | FinalizeOrderRequestedAction\n    | FinalizeOrderSucceededAction\n    | FinalizeOrderFailedAction\n    | LoadOrderAction;\n\nexport interface LoadOrderRequestedAction extends Action {\n    type: OrderActionType.LoadOrderRequested;\n}\n\nexport interface LoadOrderSucceededAction extends Action<Order> {\n    type: OrderActionType.LoadOrderSucceeded;\n}\n\nexport interface LoadOrderFailedAction extends Action<Error> {\n    type: OrderActionType.LoadOrderFailed;\n}\n\nexport interface LoadOrderPaymentsRequestedAction extends Action {\n    type: OrderActionType.LoadOrderPaymentsRequested;\n}\n\nexport interface LoadOrderPaymentsSucceededAction extends Action<Order> {\n    type: OrderActionType.LoadOrderPaymentsSucceeded;\n}\n\nexport interface LoadOrderPaymentsFailedAction extends Action<Error> {\n    type: OrderActionType.LoadOrderPaymentsFailed;\n}\n\nexport interface SubmitOrderRequestedAction extends Action {\n    type: OrderActionType.SubmitOrderRequested;\n}\n\nexport interface SubmitOrderSucceededAction extends Action<InternalOrderResponseData> {\n    type: OrderActionType.SubmitOrderSucceeded;\n}\n\nexport interface SubmitOrderFailedAction extends Action<Error> {\n    type: OrderActionType.SubmitOrderFailed;\n}\n\nexport interface FinalizeOrderRequestedAction extends Action {\n    type: OrderActionType.FinalizeOrderRequested;\n}\n\nexport interface FinalizeOrderSucceededAction extends Action<InternalOrderResponseData> {\n    type: OrderActionType.FinalizeOrderSucceeded;\n}\n\nexport interface FinalizeOrderFailedAction extends Action<Error> {\n    type: OrderActionType.FinalizeOrderFailed;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/order/order-billing-address.ts",
    "content": "import { Address } from '../address';\n\nexport interface OrderBillingAddress extends Address {\n    email?: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/order/order-request-body.ts",
    "content": "import {\n    CreditCardInstrument,\n    HostedCreditCardInstrument,\n    HostedInstrument,\n    HostedVaultedInstrument,\n    NonceInstrument,\n    VaultedInstrument,\n    WithAccountCreation,\n    WithBankAccountInstrument,\n    WithCheckoutcomFawryInstrument,\n    WithCheckoutcomSEPAInstrument,\n    WithDocumentInstrument,\n    WithEcpInstrument,\n    WithIdealInstrument,\n    WithMollieIssuerInstrument,\n    WithPayByBankInstrument,\n    WithSepaInstrument,\n} from '../payment';\n\n/**\n * An object that contains the information required for submitting an order.\n */\nexport default interface OrderRequestBody {\n    /**\n     * An object that contains the payment details of a customer. In some cases,\n     * you can omit this object if the order does not require further payment.\n     * For example, the customer is able to use their store credit to pay for\n     * the entire order. Or they have already submitted their payment details\n     * using PayPal.\n     */\n    payment?: OrderPaymentRequestBody;\n\n    /**\n     * If true, apply the store credit of the customer to the order. It only\n     * works if the customer has previously signed in.\n     */\n    useStoreCredit?: boolean;\n}\n\n/**\n * An object that contains the payment information required for submitting an\n * order.\n */\nexport interface OrderPaymentRequestBody {\n    /**\n     * The identifier of the payment method that is chosen for the order.\n     */\n    methodId: string;\n\n    /**\n     * The identifier of the payment provider that is chosen for the order.\n     */\n    gatewayId?: string;\n\n    /**\n     * An object that contains the details of a credit card, vaulted payment\n     * instrument or nonce instrument.\n     */\n    paymentData?:\n        | CreditCardInstrument\n        | WithBankAccountInstrument\n        | HostedInstrument\n        | HostedCreditCardInstrument\n        | HostedVaultedInstrument\n        | NonceInstrument\n        | VaultedInstrument\n        | WithEcpInstrument\n        | WithIdealInstrument\n        | WithSepaInstrument\n        | WithPayByBankInstrument\n        | (CreditCardInstrument & WithDocumentInstrument)\n        | (CreditCardInstrument & WithCheckoutcomFawryInstrument)\n        | (CreditCardInstrument & WithCheckoutcomSEPAInstrument)\n        | (CreditCardInstrument & WithIdealInstrument)\n        | (HostedInstrument & WithMollieIssuerInstrument)\n        | WithAccountCreation;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/order/order-state.ts",
    "content": "import { Omit } from '../util-types';\n\nimport { InternalOrderMeta, InternalOrderPayment } from './internal-order';\nimport Order from './order';\n\nexport default interface OrderState {\n    data?: OrderDataState;\n    meta?: OrderMetaState;\n    errors: OrderErrorsState;\n    statuses: OrderStatusesState;\n}\n\nexport type OrderDataState = Omit<Order, 'billingAddress' | 'coupons'>;\n\nexport interface OrderMetaState extends InternalOrderMeta {\n    token?: string;\n    orderToken?: string;\n    callbackUrl?: string;\n    payment?: InternalOrderPayment;\n}\n\nexport interface OrderErrorsState {\n    loadError?: Error;\n    submitError?: Error;\n    finalizeError?: Error;\n}\n\nexport interface OrderStatusesState {\n    isLoading?: boolean;\n    isSubmitting?: boolean;\n    isFinalizing?: boolean;\n}\n\nexport const DEFAULT_STATE: OrderState = {\n    errors: {},\n    meta: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/payment-integration-api/src/order/order.ts",
    "content": "import { LineItemMap } from '../cart';\nimport { Coupon } from '../coupon';\nimport { Currency } from '../currency';\nimport { Tax } from '../tax';\n\nimport { OrderBillingAddress } from './order-billing-address';\nimport { OrderMetaState } from './order-state';\n\nexport default interface Order {\n    baseAmount: number;\n    billingAddress: OrderBillingAddress;\n    cartId: string;\n    channelId: number;\n    coupons: Coupon[];\n    consignments: OrderConsignment;\n    currency: Currency;\n    customerCanBeCreated: boolean;\n    customerId: number;\n    customerMessage: string;\n    discountAmount: number;\n    displayDiscountTotal: number;\n    handlingCostTotal: number;\n    hasDigitalItems: boolean;\n    isComplete: boolean;\n    isDownloadable: boolean;\n    isTaxIncluded: boolean;\n    lineItems: LineItemMap;\n    orderAmount: number;\n    orderAmountAsInteger: number;\n    orderBasedAutoDiscountTotal: number;\n    orderId: number;\n    manualDiscountTotal: number;\n    productAutoDiscountedSubtotal: number;\n    payments?: OrderPayments;\n    giftWrappingCostTotal: number;\n    comparisonShippingCost: number;\n    shippingCostTotal: number;\n    shippingCostBeforeDiscount: number;\n    status: string;\n    taxes: Tax[];\n    taxTotal: number;\n    totalDiscount: number;\n    fees: OrderFee[];\n}\n\nexport interface OrderFee {\n    id: number;\n    type: string;\n    customerDisplayName: string;\n    cost: number;\n    source: string;\n}\n\nexport type OrderPayments = Array<GatewayOrderPayment | GiftCertificateOrderPayment>;\n\nexport type OrderMeta = OrderMetaState;\n\nexport interface OrderPayment {\n    providerId: string;\n    gatewayId?: string;\n    methodId?: string;\n    paymentId?: string;\n    description: string;\n    amount: number;\n}\n\nexport interface GatewayOrderPayment extends OrderPayment {\n    detail: {\n        step: string;\n        instructions: string;\n    };\n    mandate?: {\n        id: string;\n        url?: string;\n    };\n}\n\nexport interface GiftCertificateOrderPayment extends OrderPayment {\n    detail: {\n        code: string;\n        remaining: number;\n    };\n}\n\nexport interface OrderConsignment {\n    shipping: OrderShippingConsignment[];\n}\n\nexport interface OrderShippingConsignmentDiscount {\n    id: number;\n    amount: number;\n    code: string | null;\n}\n\nexport interface OrderShippingConsignment {\n    lineItems: Array<{\n        id: number;\n    }>;\n    shippingAddressId: number;\n    firstName: string;\n    lastName: string;\n    company: string;\n    address1: string;\n    address2: string;\n    city: string;\n    stateOrProvince: string;\n    postalCode: string;\n    country: string;\n    countryCode: string;\n    email: string;\n    phone: string;\n    itemsTotal: number;\n    itemsShipped: number;\n    shippingMethod: string;\n    baseCost: number;\n    costExTax: number;\n    costIncTax: number;\n    costTax: number;\n    costTaxClassId: number;\n    baseHandlingCost: number;\n    handlingCostExTax: number;\n    handlingCostIncTax: number;\n    handlingCostTax: number;\n    handlingCostTaxClassId: number;\n    shippingZoneId: number;\n    shippingZoneName: string;\n    customFields: Array<{\n        name: string;\n        value: string | null;\n    }>;\n    discounts: OrderShippingConsignmentDiscount[];\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/index.ts",
    "content": "export { default as InitializeOffsitePaymentConfig } from './initialize-offsite-payment-config';\nexport {\n    default as PaymentInstrument,\n    AccountInstrument,\n    CardInstrument,\n    UntrustedShippingCardVerificationType,\n    PayPalInstrument,\n} from './instrument';\n\nexport { InstrumentMeta } from './instrument-state';\n\nexport {\n    default as Payment,\n    IdealPayload,\n    BlueSnapDirectEcpPayload,\n    BlueSnapDirectSepaPayload,\n    WithSepaInstrument,\n    WithEcpInstrument,\n    CreditCardInstrument,\n    FormattedHostedInstrument,\n    WithBankAccountInstrument,\n    WithIdealInstrument,\n    WithPayByBankInstrument,\n    WithCheckoutcomFawryInstrument,\n    WithCheckoutcomSEPAInstrument,\n    HostedCreditCardInstrument,\n    HostedInstrument,\n    HostedVaultedInstrument,\n    VaultedInstrument,\n    PaymentInstrumentPayload,\n    PaymentInstrumentMeta,\n    NonceInstrument,\n    ThreeDSecure,\n    ThreeDSecureToken,\n    WithAccountCreation,\n    WithDocumentInstrument,\n    WithMollieIssuerInstrument,\n    PaypalInstrument,\n    FormattedPayload,\n    StripeUPEIntent,\n    StripeV3FormattedPayload,\n} from './payment';\n\nexport { default as isCreditCardInstrument } from './is-credit-card-instrument';\nexport { default as isHostedInstrumentLike } from './is-hosted-intrument-like';\nexport { default as isWithAccountCreation } from './is-with-account-creation';\n\nexport {\n    default as isVaultedInstrument,\n    isHostedVaultedInstrument,\n    isFormattedVaultedInstrument,\n} from './is-vaulted-instrument';\n\nexport { PaymentActionType, SubmitPaymentAction } from './payment-actions';\nexport { PaymentMethodActionType } from './payment-method-actions';\nexport { default as PaymentAdditionalAction } from './payment-additional-action';\nexport { PaymentInitializeOptions } from './payment-initialize-options';\nexport { PaymentRequestOptions } from './payment-request-options';\nexport { default as PaymentMethod } from './payment-method';\nexport { default as PaymentResponse } from './payment-response';\nexport { default as PaymentResponseBody, ThreeDsResult } from './payment-response-body';\nexport { default as PaymentStrategy } from './payment-strategy';\nexport { default as PaymentStrategyFactory } from './payment-strategy-factory';\nexport { default as PaymentStrategyResolveId } from './payment-strategy-resolve-id';\nexport { default as PaymentStatusTypes } from './payment-status-types';\nexport { default as PaymentMethodMeta } from './payment-method-meta';\nexport { default as StorefrontPaymentRequestSender } from './storefront-payment-request-sender';\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/initialize-offsite-payment-config.ts",
    "content": "export default interface InitializeOffsitePaymentConfig {\n    methodId: string;\n    gatewayId?: string;\n    instrumentId?: string;\n    shouldSaveInstrument?: boolean;\n    shouldSetAsDefaultInstrument?: boolean;\n    target?: string;\n    promise?: Promise<undefined>;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/instrument-state.ts",
    "content": "import PaymentInstrument, { VaultAccessToken } from './instrument';\n\nexport default interface InstrumentState {\n    data?: PaymentInstrument[];\n    meta?: InstrumentMeta;\n    errors: InstrumentErrorState;\n    statuses: InstrumentStatusState;\n}\n\nexport interface InstrumentErrorState {\n    deleteError?: Error;\n    failedInstrument?: string;\n    loadError?: Error;\n    vaultError?: Error;\n}\n\nexport interface InstrumentStatusState {\n    isDeleting?: boolean;\n    isLoading?: boolean;\n    isVaulting?: boolean;\n    deletingInstrument?: string;\n}\n\nexport type InstrumentMeta = VaultAccessToken;\n\nexport const DEFAULT_STATE = {\n    data: [],\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/instrument.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/payment/is-credit-card-instrument.spec.ts",
    "content": "import isCreditCardInstrument from './is-credit-card-instrument';\n\ndescribe('isCreditCardInstrument', () => {\n    it('returns true if the object looks like a credit card', () => {\n        const paymentData = {\n            ccExpiry: {\n                month: '10',\n                year: '2020',\n            },\n            ccName: 'BigCommerce',\n            ccNumber: '4111111111111111',\n            ccCvv: '123',\n        };\n\n        expect(paymentData && isCreditCardInstrument(paymentData)).toBe(true);\n    });\n\n    it('returns false if a Vaulted Instrument', () => {\n        const paymentData = { instrumentId: 'my_instrument_id', cvv: 123, iin: '123123' };\n\n        expect(isCreditCardInstrument(paymentData)).toBe(false);\n    });\n\n    it('returns false if a Tokenized Credit Card', () => {\n        const paymentData = { nonce: 'my_nonce' };\n\n        expect(isCreditCardInstrument(paymentData)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/is-credit-card-instrument.ts",
    "content": "import isVaultedInstrument from './is-vaulted-instrument';\nimport { CreditCardInstrument } from './payment';\n\nexport default function isCreditCardInstrument(\n    instrument: unknown,\n): instrument is CreditCardInstrument {\n    const card = instrument as CreditCardInstrument;\n\n    return (\n        !isVaultedInstrument(card) &&\n        typeof card.ccName === 'string' &&\n        typeof card.ccNumber === 'string' &&\n        typeof card.ccExpiry === 'object' &&\n        typeof card.ccExpiry.month === 'string' &&\n        typeof card.ccExpiry.year === 'string'\n    );\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/is-hosted-intrument-like.spec.ts",
    "content": "import isHostedInstrumentLike from './is-hosted-intrument-like';\n\ndescribe('isHostedInstrumentLike', () => {\n    it('returns true if the object has both matching properties as undefined', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: undefined,\n                shouldSetAsDefaultInstrument: undefined,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object has any matching properties as undefined', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: undefined,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object has any matching properties as undefined and false', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: undefined,\n                shouldSetAsDefaultInstrument: false,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object has both boolean values as false', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: false,\n                shouldSetAsDefaultInstrument: false,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object has both boolean values as true', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: true,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object has both boolean values', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: false,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object has at least one matching property', () => {\n        expect(\n            isHostedInstrumentLike({\n                shouldSaveInstrument: true,\n            }),\n        ).toBe(true);\n    });\n\n    it('returns true if the object is object-like', () => {\n        expect(isHostedInstrumentLike({})).toBe(true);\n    });\n\n    it('returns false if the object is null', () => {\n        expect(isHostedInstrumentLike(null)).toBe(false);\n    });\n\n    it('returns false if the object is undefined', () => {\n        expect(isHostedInstrumentLike(undefined)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/is-hosted-intrument-like.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/payment/is-vaulted-instrument.spec.ts",
    "content": "import isVaultedInstrument from './is-vaulted-instrument';\nimport { CreditCardInstrument } from './payment';\n\ndescribe('isTokenizedCreditCardLike', () => {\n    it('returns true if a Vaulted Instrument', () => {\n        const paymentData = { instrumentId: 'my_instrument_id', cvv: 123, iin: '123123' };\n\n        expect(isVaultedInstrument(paymentData)).toBe(true);\n    });\n\n    it('returns false if a Tokenized Credit Card', () => {\n        const paymentData = { nonce: 'my_nonce', deviceSessionId: 'my_session_id' };\n\n        expect(isVaultedInstrument(paymentData)).toBe(false);\n    });\n\n    it('returns false if the object looks like a credit creditcard', () => {\n        const paymentData: CreditCardInstrument = {\n            ccExpiry: {\n                month: '10',\n                year: '2020',\n            },\n            ccName: 'BigCommerce',\n            ccNumber: '4111111111111111',\n            ccCvv: '123',\n        };\n\n        expect(isVaultedInstrument(paymentData)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/is-vaulted-instrument.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/payment/is-with-account-creation.ts",
    "content": "import { WithAccountCreation } from './payment';\n\nexport default function isWithAccountCreation(\n    paymentData: unknown,\n): paymentData is WithAccountCreation {\n    return (\n        typeof paymentData === 'object' &&\n        paymentData !== null &&\n        'shouldCreateAccount' in paymentData\n    );\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { LoadOrderAction } from '../order';\n\nimport PaymentResponseBody from './payment-response-body';\n\nexport enum PaymentActionType {\n    SubmitPaymentRequested = 'SUBMIT_PAYMENT_REQUESTED',\n    SubmitPaymentSucceeded = 'SUBMIT_PAYMENT_SUCCEEDED',\n    SubmitPaymentFailed = 'SUBMIT_PAYMENT_FAILED',\n\n    InitializeOffsitePaymentRequested = 'INITIALIZE_OFFSITE_PAYMENT_REQUESTED',\n    InitializeOffsitePaymentSucceeded = 'INITIALIZE_OFFSITE_PAYMENT_SUCCEEDED',\n    InitializeOffsitePaymentFailed = 'INITIALIZE_OFFSITE_PAYMENT_FAILED',\n}\n\nexport type PaymentAction = SubmitPaymentAction | InitializeOffsitePaymentAction;\n\nexport type SubmitPaymentAction =\n    | SubmitPaymentRequestedAction\n    | SubmitPaymentSucceededAction\n    | SubmitPaymentFailedAction\n    | LoadOrderAction;\n\nexport type InitializeOffsitePaymentAction =\n    | InitializeOffsitePaymentRequestedAction\n    | InitializeOffsitePaymentSucceededAction\n    | InitializeOffsitePaymentFailedAction;\n\nexport interface SubmitPaymentRequestedAction extends Action {\n    type: PaymentActionType.SubmitPaymentRequested;\n}\n\nexport interface SubmitPaymentSucceededAction extends Action<PaymentResponseBody> {\n    type: PaymentActionType.SubmitPaymentSucceeded;\n}\n\nexport interface SubmitPaymentFailedAction extends Action<Error> {\n    type: PaymentActionType.SubmitPaymentFailed;\n}\n\nexport interface InitializeOffsitePaymentRequestedAction extends Action {\n    type: PaymentActionType.InitializeOffsitePaymentRequested;\n}\n\nexport interface InitializeOffsitePaymentSucceededAction extends Action {\n    type: PaymentActionType.InitializeOffsitePaymentSucceeded;\n}\n\nexport interface InitializeOffsitePaymentFailedAction extends Action<Error> {\n    type: PaymentActionType.InitializeOffsitePaymentFailed;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-additional-action.ts",
    "content": "export default interface PaymentAdditionalAction {\n    type: string;\n    data: CardingProtectionActionData;\n}\n\nexport interface CardingProtectionActionData {\n    human_verification_token?: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-initialize-options.ts",
    "content": "import { PaymentRequestOptions } from './payment-request-options';\n\nexport interface PaymentInitializeOptions extends PaymentRequestOptions {\n    [key: string]: unknown;\n}\n\nexport interface InitializePaymentOptions {\n    authorizationToken?: string;\n    customerMessage?: string;\n    referenceId?: string;\n    useStoreCredit?: boolean;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-method-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport PaymentMethod from './payment-method';\nimport PaymentMethodMeta from './payment-method-meta';\n\nexport enum PaymentMethodActionType {\n    LoadPaymentMethodRequested = 'LOAD_PAYMENT_METHOD_REQUESTED',\n    LoadPaymentMethodSucceeded = 'LOAD_PAYMENT_METHOD_SUCCEEDED',\n    LoadPaymentMethodFailed = 'LOAD_PAYMENT_METHOD_FAILED',\n\n    LoadPaymentMethodsRequested = 'LOAD_PAYMENT_METHODS_REQUESTED',\n    LoadPaymentMethodsSucceeded = 'LOAD_PAYMENT_METHODS_SUCCEEDED',\n    LoadPaymentMethodsFailed = 'LOAD_PAYMENT_METHODS_FAILED',\n}\n\nexport type PaymentMethodAction = LoadPaymentMethodAction | LoadPaymentMethodsAction;\n\nexport type LoadPaymentMethodAction =\n    | LoadPaymentMethodRequestedAction\n    | LoadPaymentMethodSucceededAction\n    | LoadPaymentMethodFailedAction;\n\nexport type LoadPaymentMethodsAction =\n    | LoadPaymentMethodsRequestedAction\n    | LoadPaymentMethodsSucceededAction\n    | LoadPaymentMethodsFailedAction;\n\nexport interface LoadPaymentMethodRequestedAction extends Action {\n    type: PaymentMethodActionType.LoadPaymentMethodRequested;\n}\n\nexport interface LoadPaymentMethodSucceededAction extends Action<PaymentMethod> {\n    type: PaymentMethodActionType.LoadPaymentMethodSucceeded;\n}\n\nexport interface LoadPaymentMethodFailedAction extends Action<Error> {\n    type: PaymentMethodActionType.LoadPaymentMethodFailed;\n}\n\nexport interface LoadPaymentMethodsRequestedAction extends Action {\n    type: PaymentMethodActionType.LoadPaymentMethodsRequested;\n}\n\nexport interface LoadPaymentMethodsSucceededAction\n    extends Action<PaymentMethod[], PaymentMethodMeta> {\n    type: PaymentMethodActionType.LoadPaymentMethodsSucceeded;\n}\n\nexport interface LoadPaymentMethodsFailedAction extends Action<Error> {\n    type: PaymentMethodActionType.LoadPaymentMethodsFailed;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-method-config.ts",
    "content": "export default interface PaymentMethodConfig {\n    cardCode?: boolean;\n    displayName?: string;\n    enablePaypal?: boolean;\n    hasDefaultStoredInstrument?: boolean;\n    helpText?: string;\n    is3dsEnabled?: boolean;\n    isHostedFormEnabled?: boolean;\n    isVaultingCvvEnabled?: boolean;\n    isVaultingEnabled?: boolean;\n    isVisaCheckoutEnabled?: boolean;\n    logo?: string;\n    merchantId?: string;\n    redirectUrl?: string;\n    requireCustomerCode?: boolean;\n    returnUrl?: string;\n    testMode?: boolean;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-method-initialization-strategy.ts",
    "content": "interface UnknownObject {\n    [key: string]: unknown;\n}\n\nexport default interface InitializationStrategy extends Partial<UnknownObject> {\n    type: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-method-meta.ts",
    "content": "export default interface PaymentMethodMeta {\n    deviceSessionId: string;\n    sessionHash: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-method.ts",
    "content": "import PaymentMethodConfig from './payment-method-config';\nimport InitializationStrategy from './payment-method-initialization-strategy';\n\nexport default interface PaymentMethod<T = any> {\n    id: string;\n    config: PaymentMethodConfig;\n    method: string;\n    supportedCards: string[];\n    type: string;\n    clientToken?: string;\n    gateway?: string;\n    logoUrl?: string;\n    nonce?: string;\n    initializationData?: T;\n    returnUrl?: string;\n    initializationStrategy?: InitializationStrategy;\n    skipRedirectConfirmationAlert: boolean;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-request-options.ts",
    "content": "import { RequestOptions } from '../util-types';\n\n/**\n * The set of options for configuring any requests related to the payment step of\n * the current checkout flow.\n */\nexport interface PaymentRequestOptions extends RequestOptions {\n    /**\n     * The identifier of the payment method.\n     */\n    methodId: string;\n\n    /**\n     * The identifier of the payment provider providing the payment method. This\n     * option is only required if the provider offers multiple payment options.\n     * i.e.: Adyen and Klarna.\n     */\n    gatewayId?: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-response-body.ts",
    "content": "export default interface PaymentResponseBody {\n    status: string;\n    id: string;\n    avs_result: AvsResult | object;\n    cvv_result: CvvResult | object;\n    three_ds_result: ThreeDsResult | object;\n    fraud_review: boolean;\n    transaction_type: string;\n    additional_action_required?: AdditionalActionRequired;\n    errors?: Array<{\n        code: string;\n        message: string;\n    }>;\n}\n\nexport interface AvsResult {\n    code: string;\n    message: string;\n    street_match: string;\n    postal_match: string;\n}\n\nexport interface CvvResult {\n    code: string;\n    message: string;\n}\n\nexport interface ThreeDsResult {\n    acs_url: string;\n    payer_auth_request: string;\n    merchant_data: string;\n    callback_url: string;\n}\n\nexport interface AdditionalActionRequired {\n    type: AdditionalActionType;\n    data: AdditionalRedirectData;\n}\n\nexport interface AdditionalRedirectData {\n    redirect_url: string;\n    transaction_id?: string;\n}\n\nexport enum AdditionalActionType {\n    OffsiteRedirect = 'offsite_redirect',\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-response.ts",
    "content": "export default interface PaymentResponse<T = any> {\n    data: T;\n    headers: { [key: string]: any };\n    status: number;\n    statusText: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-status-types.ts",
    "content": "enum PaymentStatusTypes {\n    ACKNOWLEDGE = 'ACKNOWLEDGE',\n    FINALIZE = 'FINALIZE',\n    INITIALIZE = 'INITIALIZE',\n}\n\nexport default PaymentStatusTypes;\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-strategy-factory.ts",
    "content": "import PaymentIntegrationService from '../payment-integration-service';\n\nimport PaymentStrategy from './payment-strategy';\n\ntype PaymentStrategyFactory<TStrategy extends PaymentStrategy> = (\n    paymentIntegrationService: PaymentIntegrationService,\n) => TStrategy;\n\nexport default PaymentStrategyFactory;\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-strategy-resolve-id.ts",
    "content": "import { RequireAtLeastOne } from '../util-types';\n\ntype PaymentStrategyResolveId = RequireAtLeastOne<{\n    id?: string;\n    gateway?: string;\n    type?: string;\n}>;\n\nexport default PaymentStrategyResolveId;\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment-strategy.ts",
    "content": "import { OrderRequestBody } from '../order';\n\nimport { PaymentInitializeOptions } from './payment-initialize-options';\nimport { PaymentRequestOptions } from './payment-request-options';\n\nexport default interface PaymentStrategy {\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void>;\n\n    finalize(options?: PaymentRequestOptions): Promise<void>;\n\n    initialize(options?: PaymentInitializeOptions): Promise<void>;\n\n    deinitialize(options?: PaymentRequestOptions): Promise<void>;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/payment.ts",
    "content": "import { BrowserInfo } from '../browser';\nimport { Omit } from '../util-types';\n\nimport PaymentAdditionalAction from './payment-additional-action';\n\nexport default interface Payment<T = unknown> {\n    methodId: string;\n    gatewayId?: string;\n    paymentData?: PaymentInstrumentPayload<T> & PaymentInstrumentMeta;\n    additionalAction?: PaymentAdditionalAction;\n}\n\nexport type PaymentInstrumentPayload<T = unknown> =\n    | WithEcpInstrument\n    | WithPayByBankInstrument\n    | WithSepaInstrument\n    | WithIdealInstrument\n    | CreditCardInstrument\n    | (CreditCardInstrument & WithHostedFormNonce)\n    | (CreditCardInstrument & WithDocumentInstrument)\n    | (CreditCardInstrument & WithIdealInstrument)\n    | (CreditCardInstrument & WithCheckoutcomFawryInstrument)\n    | (CreditCardInstrument & WithCheckoutcomSEPAInstrument)\n    | CryptogramInstrument\n    | FormattedPayload<\n          | AdyenV2Instrument\n          | AppleInstrument\n          | BlueSnapDirectCreditCardInstrument\n          | BlueSnapDirectEcpPayload\n          | IdealPayload\n          | BlueSnapDirectSepaPayload\n          | BoltInstrument\n          | PaypalInstrument\n          | FormattedHostedInstrument\n          | FormattedVaultedInstrument\n          | WithDocumentInstrument\n          | WithIdealInstrument\n          | WithCheckoutcomFawryInstrument\n          | WithCheckoutcomSEPAInstrument\n          | StripeV3Intent\n          | StripeV3FormattedPayload\n          | StripeUPEIntent\n          | WithMollieIssuerInstrument\n          | PaypalGooglePayInstrument\n          | T\n      >\n    | HostedInstrument\n    | NonceInstrument\n    | ThreeDSVaultedInstrument\n    | VaultedInstrument\n    | (VaultedInstrument & WithHostedFormNonce)\n    | WithAccountCreation\n    | WithBankAccountInstrument;\n\nexport interface PaymentInstrumentMeta {\n    deviceSessionId?: string;\n}\n\nexport interface WithAccountCreation {\n    shouldCreateAccount?: boolean;\n}\n\nexport interface CreditCardInstrument {\n    ccCustomerCode?: string;\n    ccExpiry: {\n        month: string;\n        year: string;\n    };\n    ccName: string;\n    ccNumber: string;\n    ccCvv?: string;\n    shouldSaveInstrument?: boolean;\n    shouldSetAsDefaultInstrument?: boolean;\n    extraData?: any;\n    threeDSecure?: ThreeDSecure | ThreeDSecureToken;\n    browser_info?: BrowserInfo;\n}\n\ntype BankAccountType = 'Checking' | 'Savings';\n\nexport interface WithBankAccountInstrument {\n    accountNumber: string;\n    routingNumber: string;\n    ownershipType: 'Personal' | 'Business';\n    accountType: BankAccountType | EcpAccountType;\n    firstName?: string;\n    lastName?: string;\n    businessName?: string;\n    shouldSaveInstrument?: boolean;\n    shouldSetAsDefaultInstrument?: boolean;\n    instrumentId?: string;\n}\n\nexport interface WithDocumentInstrument {\n    ccDocument: string;\n}\n\nexport interface WithMollieIssuerInstrument {\n    issuer: string;\n    shopper_locale: string;\n}\n\nexport interface WithIdealInstrument {\n    bic: string;\n}\n\nexport interface IdealPayload {\n    ideal: WithIdealInstrument;\n}\n\nexport interface WithPayByBankInstrument {\n    iban: string;\n}\nexport interface WithCheckoutcomSEPAInstrument {\n    iban: string;\n    bic: string;\n}\n\nexport interface WithCheckoutcomFawryInstrument {\n    customerMobile: string;\n    customerEmail: string;\n}\n\nexport interface WithHostedFormNonce {\n    hostedFormNonce: string;\n}\n\nexport type HostedCreditCardInstrument = Omit<\n    CreditCardInstrument,\n    'ccExpiry' | 'ccName' | 'ccNumber' | 'ccCvv'\n>;\n\nexport type HostedVaultedInstrument = Omit<VaultedInstrument, 'ccNumber' | 'ccCvv'>;\n\nexport type AdyenV2Instrument = AdyenV2Token | AdyenV2Card;\n\nexport interface NonceInstrument {\n    nonce: string;\n    shouldSaveInstrument?: boolean;\n    shouldSetAsDefaultInstrument?: boolean;\n    deviceSessionId?: string;\n    tokenType?: string;\n}\n\nexport interface VaultedInstrument {\n    instrumentId: string;\n    ccCvv?: string;\n    ccNumber?: string;\n}\n\nexport interface ThreeDSVaultedInstrument extends VaultedInstrument {\n    iin?: string;\n    threeDSecure?: ThreeDSecure | ThreeDSecureToken;\n}\n\nexport interface CryptogramInstrument {\n    cryptogramId: string;\n    eci: string;\n    transactionId?: string;\n    ccExpiry: {\n        month: string;\n        year: string;\n    };\n    ccNumber: string;\n    accountMask: string;\n    extraData?: any;\n}\n\nexport interface ThreeDSecure {\n    version: string;\n    status: string;\n    vendor: string;\n    cavv: string;\n    eci: string;\n    xid: string;\n}\n\nexport interface ThreeDSecureToken {\n    token: string;\n}\n\nexport interface HostedInstrument {\n    shouldSaveInstrument?: boolean;\n    shouldSetAsDefaultInstrument?: boolean;\n}\n\nexport interface PaypalInstrument {\n    vault_payment_instrument: boolean | null;\n    set_as_default_stored_instrument: boolean | null;\n    device_info: string | null;\n    paypal_account: {\n        token: string;\n        email: string | null;\n    };\n}\n\nexport interface PaypalGooglePayInstrument {\n    method_id: string | null;\n    paypal_account: {\n        order_id: string;\n    };\n}\n\ninterface BoltInstrument {\n    credit_card_token: {\n        token: string;\n        last_four_digits: string;\n        iin: string;\n        expiration_month: number;\n        expiration_year: number;\n        brand?: string;\n    };\n    provider_data: {\n        create_account: boolean;\n        embedded_checkout: boolean;\n    };\n}\n\ninterface AppleInstrument {\n    apple_pay_token: {\n        payment_data: ApplePayJS.ApplePayPaymentToken['paymentData'];\n        payment_method: ApplePayJS.ApplePayPaymentToken['paymentMethod'];\n        transaction_id: ApplePayJS.ApplePayPaymentToken['transactionIdentifier'];\n    };\n}\n\ninterface AdyenV2Token extends FormattedVaultedInstrument {\n    origin?: string;\n    browser_info: BrowserInfo;\n    credit_card_token?: void;\n}\n\ninterface AdyenV2Card {\n    browser_info: BrowserInfo;\n    credit_card_token: {\n        token: string;\n    };\n    bigpay_token?: void;\n}\n\ninterface BlueSnapDirectCreditCardInstrument {\n    credit_card_token: {\n        token: string;\n    };\n}\n\ntype EcpAccountType =\n    | 'CONSUMER_CHECKING'\n    | 'CONSUMER_SAVINGS'\n    | 'CORPORATE_CHECKING'\n    | 'CORPORATE_SAVINGS';\n\nexport interface WithEcpInstrument {\n    accountNumber: string;\n    accountType: BankAccountType | EcpAccountType;\n    shopperPermission: boolean;\n    routingNumber: string;\n    companyName?: string;\n    shouldSaveInstrument?: boolean;\n    shouldSetAsDefaultInstrument?: boolean;\n    instrumentId?: string;\n}\n\nexport interface BlueSnapDirectEcpPayload extends FormattedHostedInstrument {\n    ecp: {\n        account_number: string;\n        account_type: EcpAccountType | BankAccountType;\n        shopper_permission: boolean;\n        routing_number: string;\n    };\n}\n\nexport interface WithSepaInstrument {\n    firstName: string;\n    lastName: string;\n    iban: string;\n    shopperPermission: boolean;\n    shouldSaveInstrument?: boolean;\n    shouldSetAsDefaultInstrument?: boolean;\n    instrumentId?: string;\n}\n\nexport interface BlueSnapDirectSepaPayload extends FormattedHostedInstrument {\n    sepa_direct_debit: {\n        first_name: string;\n        last_name: string;\n        shopper_permission: boolean;\n        iban: string;\n    };\n}\n\ninterface StripeV3Intent {\n    credit_card_token: {\n        token: string;\n    };\n    confirm: boolean;\n}\n\nexport interface StripeUPEIntent {\n    cart_id: string;\n    credit_card_token: {\n        token: string;\n    };\n    confirm: boolean;\n}\n\nexport interface FormattedHostedInstrument {\n    vault_payment_instrument: boolean | null;\n    set_as_default_stored_instrument: boolean | null;\n}\n\nexport interface FormattedVaultedInstrument {\n    bigpay_token:\n        | {\n              token: string;\n              credit_card_number_confirmation?: string;\n              expiry_month?: string;\n              expiry_year?: string;\n              verification_value?: string;\n          }\n        | string\n        | null;\n}\n\nexport interface FormattedPayload<T> {\n    formattedPayload: T;\n}\n\nexport interface StripeV3FormattedPayload {\n    credit_card_token?: {\n        token: string;\n    };\n    vault_payment_instrument?: boolean;\n    confirm: boolean;\n    set_as_default_stored_instrument?: boolean;\n    client_token?: string;\n    bigpay_token?: {\n        token: string;\n    };\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/storefront-payment-request-sender.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\n\nimport { ContentType, INTERNAL_USE_ONLY, SDK_VERSION_HEADERS } from '../common/http-request';\n\nimport StorefrontPaymentRequestSender from './storefront-payment-request-sender';\n\ndescribe('StorefrontPaymentRequestSender', () => {\n    let requestSender: RequestSender;\n    let storefrontPaymentRequestSender: StorefrontPaymentRequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        storefrontPaymentRequestSender = new StorefrontPaymentRequestSender(requestSender);\n\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        jest.spyOn(requestSender, 'post').mockResolvedValue(undefined);\n    });\n\n    describe('#saveExternalId', () => {\n        const headers = {\n            Accept: ContentType.JsonV1,\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        it('saves external id for Zip', async () => {\n            await storefrontPaymentRequestSender.saveExternalId('zip', 'checkout_id');\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/payment/zip/save-external-id',\n                {\n                    body: {\n                        externalId: 'checkout_id',\n                        provider: 'zip',\n                    },\n                    headers,\n                },\n            );\n        });\n\n        it('saves external id for Quadpay', async () => {\n            await storefrontPaymentRequestSender.saveExternalId('quadpay', 'checkout_id');\n\n            expect(requestSender.post).toHaveBeenCalledWith(\n                '/api/storefront/payment/quadpay/save-external-id',\n                {\n                    body: {\n                        externalId: 'checkout_id',\n                        provider: 'quadpay',\n                    },\n                    headers,\n                },\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment/storefront-payment-request-sender.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport { ContentType, INTERNAL_USE_ONLY, SDK_VERSION_HEADERS } from '../common/http-request';\n\nexport default class StorefrontPaymentRequestSender {\n    constructor(private _requestSender: RequestSender) {}\n\n    async saveExternalId(methodId: string, token: string): Promise<void> {\n        const url = `/api/storefront/payment/${methodId}/save-external-id`;\n        const options = {\n            headers: {\n                Accept: ContentType.JsonV1,\n                'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                ...SDK_VERSION_HEADERS,\n            },\n            body: {\n                externalId: token,\n                provider: methodId,\n            },\n        };\n\n        await this._requestSender.post<void>(url, options);\n    }\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment-integration-selectors.ts",
    "content": "import { BillingAddress } from './billing';\nimport { Cart } from './cart';\nimport { Checkout } from './checkout';\nimport { StoreConfig } from './config';\nimport Config, { ContextConfig } from './config/config';\nimport { Customer } from './customer';\nimport { Country } from './geography';\nimport { Order } from './order';\nimport { OrderMetaState } from './order/order-state';\nimport { InstrumentMeta } from './payment';\nimport { PaymentProviderCustomer } from './payment-provider-customer';\nimport PaymentInstrument, { CardInstrument } from './payment/instrument';\nimport PaymentMethod from './payment/payment-method';\nimport PaymentMethodMeta from './payment/payment-method-meta';\nimport { Consignment, ShippingAddress } from './shipping';\n\nexport default interface PaymentIntegrationSelectors {\n    getHost(): string | undefined;\n    getLocale(): string | undefined;\n    getCartLocale(): string | undefined;\n\n    getBillingAddress(): BillingAddress | undefined;\n    getBillingAddressOrThrow(): BillingAddress;\n\n    getCountries(): Country[] | undefined;\n\n    getCart(): Cart | undefined;\n    getCartOrThrow(): Cart;\n\n    getCheckout(): Checkout | undefined;\n    getCheckoutOrThrow(): Checkout;\n\n    getStoreConfig(): StoreConfig | undefined;\n    getStoreConfigOrThrow(): StoreConfig;\n\n    getConsignments(): Consignment[] | undefined;\n    getConsignmentsOrThrow(): Consignment[];\n\n    getContextConfig(): ContextConfig | undefined;\n\n    getCustomer(): Customer | undefined;\n    getCustomerOrThrow(): Customer;\n\n    getCardInstrument(instrumentId: string): CardInstrument | undefined;\n    getCardInstrumentOrThrow(instrumentId: string): CardInstrument;\n\n    getInstruments(): PaymentInstrument[] | undefined;\n\n    getOrder(): Order | undefined;\n    getOrderOrThrow(): Order;\n\n    getPaymentToken(): string | undefined;\n    getPaymentTokenOrThrow(): string;\n\n    getPaymentId(): { providerId: string; gatewayId?: string } | undefined;\n    getPaymentIdOrThrow(): { providerId: string; gatewayId?: string };\n\n    getPaymentStatus(): string | undefined;\n    getPaymentStatusOrThrow(): string;\n\n    getPaymentRedirectUrl(): string | undefined;\n    getPaymentRedirectUrlOrThrow(): string;\n\n    getPaymentMethod<T = unknown>(\n        methodId: string,\n        gatewayId?: string,\n    ): PaymentMethod<T> | undefined;\n    getPaymentMethodOrThrow<T = unknown>(methodId: string, gatewayId?: string): PaymentMethod<T>;\n\n    getPaymentProviderCustomer(): PaymentProviderCustomer | undefined;\n    getPaymentProviderCustomerOrThrow(): PaymentProviderCustomer;\n\n    getShippingAddress(): ShippingAddress | undefined;\n    getShippingAddressOrThrow(): ShippingAddress;\n    getShippingAddresses(): ShippingAddress[];\n    getShippingAddressesOrThrow(): ShippingAddress[];\n\n    getShippingCountries(): Country[] | undefined;\n\n    getOutstandingBalance(useStoreCredit?: boolean): number | undefined;\n\n    isPaymentDataRequired(useStoreCredit?: boolean): boolean;\n    isPaymentMethodInitialized(query: { methodId: string; gatewayId?: string }): boolean;\n\n    getConfig(): Config | undefined;\n\n    getInstrumentsMeta(): InstrumentMeta | undefined;\n\n    getOrderMeta(): OrderMetaState | undefined;\n\n    getPaymentMethodsMeta(): PaymentMethodMeta | undefined;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment-integration-service.ts",
    "content": "import { BillingAddressRequestBody } from './billing';\nimport { BuyNowCartRequestBody, Cart } from './cart';\nimport { Checkout } from './checkout';\nimport { CustomerCredentials } from './customer';\nimport { HostedForm, HostedFormOptions } from './hosted-form';\nimport { OrderRequestBody } from './order';\nimport { InitializeOffsitePaymentConfig, Payment, PaymentAdditionalAction } from './payment';\nimport PaymentIntegrationSelectors from './payment-integration-selectors';\nimport { PaymentProviderCustomer } from './payment-provider-customer';\nimport { InitializePaymentOptions } from './payment/payment-initialize-options';\nimport { ShippingAddressRequestBody } from './shipping';\nimport { RequestOptions } from './util-types';\n\nexport default interface PaymentIntegrationService {\n    createHostedForm(host: string, options: HostedFormOptions): HostedForm;\n\n    deleteConsignment(\n        consignmentId: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors>;\n\n    subscribe(\n        subscriber: (state: PaymentIntegrationSelectors) => void,\n        ...filters: Array<(state: PaymentIntegrationSelectors) => unknown>\n    ): () => void;\n\n    getState(): PaymentIntegrationSelectors;\n\n    initializeOffsitePayment(\n        initializeOffsitePaymentConfig: InitializeOffsitePaymentConfig,\n    ): Promise<PaymentIntegrationSelectors>;\n\n    loadCheckout(id?: string): Promise<PaymentIntegrationSelectors>;\n\n    loadDefaultCheckout(): Promise<PaymentIntegrationSelectors>;\n\n    loadPaymentMethod(\n        methodId: string,\n        options?: RequestOptions & { useCache?: boolean },\n    ): Promise<PaymentIntegrationSelectors>;\n\n    loadPaymentMethods(options?: RequestOptions): Promise<PaymentIntegrationSelectors>;\n\n    loadCurrentOrder(options?: RequestOptions): Promise<PaymentIntegrationSelectors>;\n\n    submitOrder(\n        payload?: OrderRequestBody,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors>;\n\n    submitPayment<T = unknown>(payment: Payment<T>): Promise<PaymentIntegrationSelectors>;\n\n    finalizeOrder(options?: RequestOptions): Promise<PaymentIntegrationSelectors>;\n\n    selectShippingOption(\n        id: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors>;\n\n    verifyCheckoutSpamProtection(): Promise<PaymentIntegrationSelectors>;\n\n    updateBillingAddress(payload: BillingAddressRequestBody): Promise<PaymentIntegrationSelectors>;\n\n    updateShippingAddress(\n        payload: ShippingAddressRequestBody,\n    ): Promise<PaymentIntegrationSelectors>;\n\n    signInCustomer(\n        credentials: CustomerCredentials,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors>;\n\n    signOutCustomer(options?: RequestOptions): Promise<PaymentIntegrationSelectors>;\n\n    applyStoreCredit(\n        useStoreCredit: boolean,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors>;\n\n    applyCoupon(coupon: string, options?: RequestOptions): Promise<PaymentIntegrationSelectors>;\n\n    removeCoupon(couponId: string, options?: RequestOptions): Promise<PaymentIntegrationSelectors>;\n\n    createBuyNowCart(body: BuyNowCartRequestBody, options?: RequestOptions): Promise<Cart>;\n\n    updatePaymentProviderCustomer(\n        paymentProviderCustomer: PaymentProviderCustomer,\n    ): Promise<PaymentIntegrationSelectors>;\n\n    loadShippingCountries(options?: RequestOptions): Promise<PaymentIntegrationSelectors>;\n\n    initializePayment(\n        methodId: string,\n        params?: InitializePaymentOptions,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors>;\n\n    forgetCheckout(\n        methodId: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors>;\n\n    remoteCheckoutSignOut(\n        methodId: string,\n        options?: RequestOptions,\n    ): Promise<PaymentIntegrationSelectors>;\n\n    validateCheckout(checkout?: Checkout, options?: RequestOptions): Promise<void>;\n\n    handlePaymentHumanVerification(\n        errorOrId: Error | string,\n        key?: string,\n    ): Promise<PaymentAdditionalAction>;\n\n    widgetInteraction(method: () => Promise<unknown>): Promise<PaymentIntegrationSelectors>;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment-provider-customer/index.ts",
    "content": "export {\n    PaymentProviderCustomer,\n    PayPalConnectCustomer,\n    StripeAcceleratedCheckoutCustomer,\n} from './payment-provider-customer';\n"
  },
  {
    "path": "packages/payment-integration-api/src/payment-provider-customer/payment-provider-customer.ts",
    "content": "import { CustomerAddress } from '../customer';\nimport { CardInstrument } from '../payment';\n\nexport type PaymentProviderCustomer =\n    | PayPalConnectCustomer\n    | StripeAcceleratedCheckoutCustomer\n    | StripeCheckoutSessionCustomer;\n\nexport interface PayPalConnectCustomer {\n    authenticationState?: string;\n    addresses?: CustomerAddress[];\n    instruments?: CardInstrument[];\n}\n\nexport interface StripeAcceleratedCheckoutCustomer {\n    stripeLinkAuthenticationState?: boolean;\n}\n\nexport interface StripeCheckoutSessionCustomer {\n    isCustomerCurrencySelected?: boolean;\n    customerCurrency?: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/promotion/index.ts",
    "content": "export { default as Promotion } from './promotion';\n"
  },
  {
    "path": "packages/payment-integration-api/src/promotion/promotion.ts",
    "content": "export default interface Promotion {\n    banners: Banner[];\n}\n\nexport interface Banner {\n    type: string;\n    text: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/remote-checkout/index.ts",
    "content": "export { RemoteCheckoutActionType } from './remote-checkout-actions';\n"
  },
  {
    "path": "packages/payment-integration-api/src/remote-checkout/remote-checkout-actions.ts",
    "content": "export enum RemoteCheckoutActionType {\n    ForgetCheckoutRemoteCustomerRequested = 'FORGET_CHECKOUT_REMOTE_CUSTOMER_REQUESTED',\n    ForgetCheckoutRemoteCustomerSucceeded = 'FORGET_CHECKOUT_REMOTE_CUSTOMER_SUCCEEDED',\n    ForgetCheckoutRemoteCustomerFailed = 'FORGET_CHECKOUT_REMOTE_CUSTOMER_FAILED',\n\n    InitializeRemoteBillingRequested = 'INITIALIZE_REMOTE_BILLING_REQUESTED',\n    InitializeRemoteBillingSucceeded = 'INITIALIZE_REMOTE_BILLING_SUCCEEDED',\n    InitializeRemoteBillingFailed = 'INITIALIZE_REMOTE_BILLING_FAILED',\n\n    InitializeRemoteShippingRequested = 'INITIALIZE_REMOTE_SHIPPING_REQUESTED',\n    InitializeRemoteShippingSucceeded = 'INITIALIZE_REMOTE_SHIPPING_SUCCEEDED',\n    InitializeRemoteShippingFailed = 'INITIALIZE_REMOTE_SHIPPING_FAILED',\n\n    InitializeRemotePaymentRequested = 'INITIALIZE_REMOTE_PAYMENT_REQUESTED',\n    InitializeRemotePaymentSucceeded = 'INITIALIZE_REMOTE_PAYMENT_SUCCEEDED',\n    InitializeRemotePaymentFailed = 'INITIALIZE_REMOTE_PAYMENT_FAILED',\n\n    LoadRemoteSettingsRequested = 'LOAD_REMOTE_SETTINGS_REQUESTED',\n    LoadRemoteSettingsSucceeded = 'LOAD_REMOTE_SETTINGS_SUCCEEDED',\n    LoadRemoteSettingsFailed = 'LOAD_REMOTE_SETTINGS_FAILED',\n\n    SignOutRemoteCustomerRequested = 'SIGN_OUT_REMOTE_CUSTOMER_REQUESTED',\n    SignOutRemoteCustomerSucceeded = 'SIGN_OUT_REMOTE_CUSTOMER_SUCCEEDED',\n    SignOutRemoteCustomerFailed = 'SIGN_OUT_REMOTE_CUSTOMER_FAILED',\n\n    UpdateRemoteCheckout = 'UPDATE_REMOTE_CHECKOUT',\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/resolvable-module.ts",
    "content": "type ResolvableModule<TModule, TIdentifier> = TModule & {\n    resolveIds: TIdentifier[];\n};\n\nexport default ResolvableModule;\n"
  },
  {
    "path": "packages/payment-integration-api/src/shipping/consignment.ts",
    "content": "import { Address } from '../address';\n\nimport { ConsignmentPickupOption } from './pickup-option';\nimport ShippingOption from './shipping-option';\n\nexport default interface Consignment {\n    id: string;\n    address: Address;\n    shippingAddress: Address;\n    handlingCost: number;\n    shippingCost: number;\n    availableShippingOptions?: ShippingOption[];\n    selectedShippingOption?: ShippingOption;\n    selectedPickupOption?: ConsignmentPickupOption;\n    lineItemIds: string[];\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/shipping/getLineItemsCount.spec.ts",
    "content": "import { getPhysicalItem } from '../mocks/line-items.mock';\n\nimport getLineItemsCount from './getLineItemsCount';\n\ndescribe('getLineItemsCount()', () => {\n    it('returns zero if empty array', () => {\n        expect(getLineItemsCount([])).toBe(0);\n    });\n\n    it('returns the sum of quantities', () => {\n        expect(getLineItemsCount([getPhysicalItem(), getPhysicalItem()])).toBe(2);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/shipping/getLineItemsCount.ts",
    "content": "import { reduce } from 'lodash';\n\nimport { LineItem } from '../cart';\n\nexport default function getLineItemsCount(lineItems: LineItem[]): number {\n    return reduce(lineItems, (total: number, item: LineItem) => total + item.quantity, 0);\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/shipping/getShippableItemsCount.spec.ts",
    "content": "import { Cart } from '../cart';\nimport { getPhysicalItem } from '../mocks/line-items.mock';\n\nimport getShippableItemsCount from './getShippableItemsCount';\n\ndescribe('getShippableItemsCount', () => {\n    it('return one shippable item', () => {\n        const defaultPhysicalItem = getPhysicalItem();\n        const physicalItemByPromotion = {\n            ...defaultPhysicalItem,\n            addedByPromotion: true,\n        };\n        const cart = {\n            lineItems: {\n                physicalItems: [defaultPhysicalItem, physicalItemByPromotion],\n            },\n        } as Cart;\n\n        expect(getShippableItemsCount(cart)).toBe(1);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/shipping/getShippableItemsCount.ts",
    "content": "import { Cart } from '../cart';\n\nimport getLineItemsCount from './getLineItemsCount';\n\nexport default function getShippableItemsCount(cart: Cart): number {\n    return getLineItemsCount(cart.lineItems.physicalItems.filter((item) => !item.addedByPromotion));\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/shipping/index.ts",
    "content": "export { default as Consignment } from './consignment';\nexport { ShippingAddress, ShippingAddressRequestBody } from './shipping-address';\nexport { default as ShippingOption } from './shipping-option';\nexport { default as getShippableItemsCount } from './getShippableItemsCount';\nexport { default as itemsRequireShipping } from './items-require-shipping';\n"
  },
  {
    "path": "packages/payment-integration-api/src/shipping/items-require-shipping.spec.ts",
    "content": "import { Cart } from '../cart';\nimport { StoreConfig } from '../config';\nimport getCart from '../mocks/carts.mock';\nimport getConfig from '../mocks/config.mock';\n\nimport itemsRequireShipping from './items-require-shipping';\n\ndescribe('itemsRequireShipping()', () => {\n    let cart: Cart;\n    let config: StoreConfig;\n\n    beforeEach(() => {\n        cart = getCart();\n        config = getConfig().storeConfig;\n        config.checkoutSettings.features['CHECKOUT-4936.enable_custom_item_shipping'] = true;\n    });\n\n    it('returns false if there are no physical items or custom items', () => {\n        cart.lineItems.physicalItems = [];\n        cart.lineItems.customItems = [];\n\n        expect(itemsRequireShipping(cart, config)).toBe(false);\n    });\n\n    it('returns false if there is no cart', () => {\n        expect(itemsRequireShipping(undefined, config)).toBe(false);\n    });\n\n    it('returns true if there are physical items', () => {\n        expect(itemsRequireShipping(cart, config)).toBe(true);\n    });\n\n    it('returns true if there are only custom items', () => {\n        cart.lineItems.physicalItems = [];\n\n        expect(itemsRequireShipping(cart, config)).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/shipping/items-require-shipping.ts",
    "content": "import { Cart } from '../cart';\nimport { StoreConfig } from '../config';\n\nconst itemsRequireShipping = (cart?: Cart, config?: StoreConfig) => {\n    if (!cart) {\n        return false;\n    }\n\n    if (cart.lineItems.physicalItems.some((lineItem) => lineItem.isShippingRequired)) {\n        return true;\n    }\n\n    if (config && cart.lineItems.customItems) {\n        return cart.lineItems.customItems.length > 0;\n    }\n\n    return false;\n};\n\nexport default itemsRequireShipping;\n"
  },
  {
    "path": "packages/payment-integration-api/src/shipping/pickup-option.ts",
    "content": "interface Item {\n    variantId: number;\n    quantity: number;\n}\n\nexport enum RadiusUnit {\n    KM = 'KM',\n    MI = 'MI',\n}\n\ninterface Radius {\n    value: number;\n    unit: RadiusUnit;\n}\n\ninterface Coordinates {\n    latitude: number;\n    longitude: number;\n}\n\nexport interface SearchArea {\n    radius: Radius;\n    coordinates: Coordinates;\n}\n\ninterface PickupMethod {\n    id: number;\n    locationId: number;\n    displayName: string;\n    collectionInstructions: string;\n    collectionTimeDescription: string;\n}\n\ninterface Option {\n    pickupMethod: PickupMethod;\n    itemQuantities: Item;\n}\n\nexport interface PickupOptionResult {\n    options: Option[];\n}\n\nexport interface PickupOptionRequestBody {\n    searchArea: SearchArea;\n    consignmentId: string;\n}\n\nexport interface PickupOptionAPIRequestBody {\n    searchArea: SearchArea;\n    items: Item[];\n}\n\nexport interface ConsignmentPickupOption {\n    pickupMethodId: number;\n}\n\nexport interface PickupOptionResponse {\n    results: PickupOptionResult[];\n}\n\nexport type PickupOptionMeta = PickupOptionRequestBody;\n\nexport interface PickupOptionQueryMap {\n    [index: string]: PickupOptionResult[] | undefined;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/shipping/shipping-address.ts",
    "content": "import { Address, AddressRequestBody } from '../address';\n\nexport type ShippingAddress = Address;\nexport type ShippingAddressRequestBody = AddressRequestBody;\n"
  },
  {
    "path": "packages/payment-integration-api/src/shipping/shipping-option.ts",
    "content": "export default interface ShippingOption {\n    additionalDescription: string;\n    description: string;\n    id: string;\n    isRecommended: boolean;\n    imageUrl: string;\n    cost: number;\n    transitTime: string;\n    type: string;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/store-credit/index.ts",
    "content": "export { StoreCreditActionType } from './store-credit-actions';\n"
  },
  {
    "path": "packages/payment-integration-api/src/store-credit/store-credit-actions.ts",
    "content": "import { Action } from '@bigcommerce/data-store';\n\nimport { Checkout } from '../checkout';\nimport { StorefrontErrorResponseBody } from '../errors/error-response-body';\nimport RequestError from '../errors/request-error';\n\nexport enum StoreCreditActionType {\n    ApplyStoreCreditRequested = 'APPLY_STORE_CREDIT_REQUESTED',\n    ApplyStoreCreditSucceeded = 'APPLY_STORE_CREDIT_SUCCEEDED',\n    ApplyStoreCreditFailed = 'APPLY_STORE_CREDIT_FAILED',\n}\n\nexport type StoreCreditAction = ApplyStoreCreditAction;\n\nexport type ApplyStoreCreditAction =\n    | ApplyStoreCreditRequestedAction\n    | ApplyStoreCreditSucceededAction\n    | ApplyStoreCreditFailedAction;\n\nexport interface ApplyStoreCreditRequestedAction extends Action {\n    type: StoreCreditActionType.ApplyStoreCreditRequested;\n}\n\nexport interface ApplyStoreCreditSucceededAction extends Action<Checkout> {\n    type: StoreCreditActionType.ApplyStoreCreditSucceeded;\n}\n\nexport interface ApplyStoreCreditFailedAction\n    extends Action<RequestError<StorefrontErrorResponseBody>> {\n    type: StoreCreditActionType.ApplyStoreCreditFailed;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/tax/index.ts",
    "content": "export { default as Tax } from './tax';\n"
  },
  {
    "path": "packages/payment-integration-api/src/tax/tax.ts",
    "content": "export default interface Tax {\n    name: string;\n    amount: number;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/to-resolvable-module.spec.ts",
    "content": "import toResolvableModule from './to-resolvable-module';\n\ndescribe('toResolvableModule', () => {\n    it('attaches resolveIds property to the input', () => {\n        const module = {};\n\n        toResolvableModule(module, [{ id: 1 }]);\n\n        expect('resolveIds' in module).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/to-resolvable-module.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/unsupported-browser-error.ts",
    "content": "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"
  },
  {
    "path": "packages/payment-integration-api/src/util-types/guard.spec.ts",
    "content": "import { InvalidArgumentError } from '../errors';\n\nimport guard from './guard';\n\ndescribe('guard()', () => {\n    it('throws error if value is null', () => {\n        expect(() => guard(null)).toThrow();\n    });\n\n    it('throws error if value is undefined', () => {\n        expect(() => guard(undefined)).toThrow();\n    });\n\n    it('does not throw error if value is 0', () => {\n        expect(() => guard(0)).not.toThrow();\n    });\n\n    it('throws custom error if provided', () => {\n        expect(() => guard(null, () => new InvalidArgumentError())).toThrow(InvalidArgumentError);\n    });\n});\n"
  },
  {
    "path": "packages/payment-integration-api/src/util-types/guard.ts",
    "content": "export default function guard<T>(value: T, errorFactory?: () => Error): NonNullable<T> {\n    if (value === undefined || value === null) {\n        throw errorFactory ? errorFactory() : new Error('An unexpected error has occurred.');\n    }\n\n    return value as NonNullable<T>;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/util-types/index.ts",
    "content": "export { default as Omit } from './omit';\nexport { default as RequestOptions } from './request-options';\nexport { default as RequireAtLeastOne } from './require-at-least-one';\nexport { default as guard } from './guard';\n"
  },
  {
    "path": "packages/payment-integration-api/src/util-types/omit.ts",
    "content": "type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;\n\nexport default Omit;\n"
  },
  {
    "path": "packages/payment-integration-api/src/util-types/request-options.ts",
    "content": "import { Timeout } from '@bigcommerce/request-sender';\n\n/**\n * A set of options for configuring an asynchronous request.\n */\nexport default interface RequestOptions<TParams = object> {\n    /**\n     * Provide this option if you want to cancel or time out the request. If the\n     * timeout object completes before the request, the request will be\n     * cancelled.\n     */\n    timeout?: Timeout;\n\n    /**\n     * The parameters of the request, if required.\n     */\n    params?: TParams;\n}\n"
  },
  {
    "path": "packages/payment-integration-api/src/util-types/require-at-least-one.ts",
    "content": "type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &\n    {\n        [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;\n    }[Keys];\n\nexport default RequireAtLeastOne;\n"
  },
  {
    "path": "packages/payment-integration-api/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [\"src/common/types/webpack.d.ts\"]\n}\n"
  },
  {
    "path": "packages/payment-integration-api/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/payment-integration-api/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist-spec\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/ban-types\": \"off\",\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/README.md",
    "content": "# payment-integrations-test-utils\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test payment-integrations-test-utils` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint payment-integrations-test-utils` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/jest.config.js",
    "content": "module.exports = {\n    displayName: \"test-utils\",\n    preset: \"../../jest.preset.js\",\n    globals: {\n        \"ts-jest\": {\n            tsconfig: \"<rootDir>/tsconfig.spec.json\",\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: [\"../../jest-setup.js\"],\n    coverageDirectory:\n        \"../../coverage/packages/payment-integrations-test-utils\",\n};\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/project.json",
    "content": "{\n    \"name\": \"payment-integrations-test-utils\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/payment-integrations-test-utils/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/payment-integrations-test-utils/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/payment-integrations-test-utils\"],\n            \"options\": {\n                \"jestConfig\": \"packages/payment-integrations-test-utils/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/index.ts",
    "content": "export {\n    PaymentIntegrationServiceMock,\n    getAddress,\n    getBillingAddress,\n    getBuyNowCart,\n    getBuyNowCartRequestBody,\n    getCart,\n    getCheckout,\n    getCheckoutWithBuyNowCart,\n    getCheckoutWithGiftCertificates,\n    getConfig,\n    getConsignment,\n    getCountries,\n    getCustomer,\n    getGuestCustomer,\n    getOrder,\n    getOrderMeta,\n    getOrderRequestBody,\n    getShippingOption,\n    getPayment,\n    getPaymentMethod,\n    getPaymentMethodsMeta,\n    getResponse,\n    getPaymentResponse,\n    getPaymentResponseBody,\n    getErrorResponse,\n    getErrorResponseBody,\n    getTimeoutResponse,\n    getCreditCardInstrument,\n    getVaultedInstrument,\n    getErrorPaymentResponseBody,\n    getShippingAddress,\n    getShippingAddressWithCustomFields,\n    getInstruments,\n    getCurrency,\n    getDigitalItem,\n} from './test-utils';\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/address.mock.ts",
    "content": "import { Address, BillingAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getAddress(): Address {\n    return {\n        firstName: 'Test',\n        lastName: 'Tester',\n        company: 'Bigcommerce',\n        address1: '12345 Testing Way',\n        address2: '',\n        city: 'Some City',\n        stateOrProvince: 'California',\n        stateOrProvinceCode: 'CA',\n        country: 'United States',\n        countryCode: 'US',\n        postalCode: '95555',\n        phone: '555-555-5555',\n        shouldSaveAddress: true,\n        customFields: [],\n    };\n}\n\nexport function getBillingAddress(): BillingAddress {\n    return {\n        ...getAddress(),\n        id: '55c96cda6f04c',\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/billing-address.mock.ts",
    "content": "import { BillingAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function getBillingAddress(): BillingAddress {\n    return {\n        id: '55c96cda6f04c',\n        firstName: 'Test',\n        lastName: 'Tester',\n        email: 'test@bigcommerce.com',\n        company: 'Bigcommerce',\n        address1: '12345 Testing Way',\n        address2: '',\n        city: 'Some City',\n        stateOrProvince: 'California',\n        stateOrProvinceCode: 'CA',\n        country: 'United States',\n        countryCode: 'US',\n        postalCode: '95555',\n        shouldSaveAddress: true,\n        phone: '555-555-5555',\n        customFields: [],\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/buy-now-cart-request-body.mock.ts",
    "content": "import {\n    BuyNowCartRequestBody,\n    CartSource,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function getBuyNowCartRequestBody(): BuyNowCartRequestBody {\n    return {\n        lineItems: [\n            {\n                productId: 1,\n                quantity: 1,\n            },\n        ],\n        source: CartSource.BuyNow,\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/carts.mock.ts",
    "content": "import { Cart, CartSource } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getCoupon } from './coupons.mock';\nimport { getCurrency } from './currency.mock';\nimport { getDiscount } from './discounts.mock';\nimport {\n    getCustomItem,\n    getDigitalItem,\n    getGiftCertificateItem,\n    getPhysicalItem,\n} from './line-items.mock';\n\nexport default function getCart(): Cart {\n    return {\n        id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n        customerId: 4,\n        companyId: null,\n        currency: getCurrency(),\n        email: 'foo@bar.com',\n        isTaxIncluded: false,\n        baseAmount: 200,\n        discountAmount: 10,\n        cartAmount: 190,\n        coupons: [getCoupon()],\n        discounts: [getDiscount()],\n        lineItems: {\n            physicalItems: [getPhysicalItem()],\n            digitalItems: [getDigitalItem()],\n            giftCertificates: [getGiftCertificateItem()],\n            customItems: [getCustomItem()],\n        },\n        createdTime: '2018-03-06T04:41:49+00:00',\n        updatedTime: '2018-03-07T03:44:51+00:00',\n        locale: 'en',\n    };\n}\n\nexport function getBuyNowCart(): Cart {\n    return {\n        ...getCart(),\n        source: CartSource.BuyNow,\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/checkouts.mock.ts",
    "content": "import { Checkout } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getBillingAddress } from './address.mock';\nimport getCart, { getBuyNowCart } from './carts.mock';\nimport getConsignment from './consignment.mock';\nimport { getCustomer } from './customer.mock';\nimport { getGiftCertificate } from './gift-certificates.mock';\n\nexport default function getCheckout(): Checkout {\n    return {\n        id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n        channelId: 1,\n        comparisonShippingCost: 20,\n        displayDiscountTotal: 0,\n        manualDiscountTotal: 0,\n        orderBasedAutoDiscountTotal: 0,\n        hasOrderLevelAutoDiscountMaxLimitReached: false,\n        cart: getCart(),\n        customer: getCustomer(),\n        customerMessage: 'comment',\n        billingAddress: getBillingAddress(),\n        consignments: [getConsignment()],\n        taxes: [\n            {\n                name: 'Tax',\n                amount: 3,\n            },\n        ],\n        discounts: [],\n        coupons: [],\n        fees: [],\n        isStoreCreditApplied: false,\n        shouldExecuteSpamCheck: false,\n        orderId: 295,\n        shippingCostTotal: 15,\n        shippingCostBeforeDiscount: 20,\n        handlingCostTotal: 8,\n        taxTotal: 3,\n        subtotal: 190,\n        grandTotal: 190,\n        giftWrappingCostTotal: 0,\n        outstandingBalance: 190,\n        giftCertificates: [],\n        balanceDue: 0,\n        createdTime: '2018-03-06T04:41:49+00:00',\n        updatedTime: '2018-03-07T03:44:51+00:00',\n        promotions: [\n            {\n                banners: [\n                    {\n                        type: 'upsell',\n                        text: 'foo',\n                    },\n                ],\n            },\n        ],\n        totalDiscount: 0,\n    };\n}\n\nexport function getCheckoutWithBuyNowCart() {\n    return {\n        ...getCheckout(),\n        cart: getBuyNowCart(),\n    };\n}\n\nexport function getCheckoutWithGiftCertificates(): Checkout {\n    return {\n        ...getCheckout(),\n        giftCertificates: [getGiftCertificate(), { ...getGiftCertificate(), code: 'gc2' }],\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/config.mock.ts",
    "content": "import { Config } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function getConfig(): Config {\n    return {\n        context: {\n            checkoutId: '6a6071cc-82ba-45aa-adb0-ebec42d6ff6f',\n            flashMessages: [],\n            geoCountryCode: 'AU',\n            payment: {\n                formId: 'dc030783-6129-4ee3-8e06-6f4270df1527',\n            },\n        },\n        customization: {\n            languageData: [],\n        },\n        storeConfig: {\n            cdnPath: 'https://cdn.bcapp.dev/rHEAD',\n            checkoutSettings: {\n                features: {},\n                checkoutBillingSameAsShippingEnabled: true,\n                checkoutUserExperienceSettings: {\n                    checkoutV2Theme: false,\n                    walletButtonsOnTop: false,\n                    floatingLabelEnabled: false,\n                },\n                enableOrderComments: true,\n                enableTermsAndConditions: false,\n                guestCheckoutEnabled: true,\n                hasMultiShippingEnabled: true,\n                googleMapsApiKey: '',\n                googleRecaptchaSitekey: 'sitekey',\n                isAccountCreationEnabled: true,\n                isAnalyticsEnabled: false,\n                isCardVaultingEnabled: true,\n                isExpressPrivacyPolicy: false,\n                isStorefrontSpamProtectionEnabled: false,\n                isSignInEmailEnabled: false,\n                isPaymentRequestEnabled: false,\n                isPaymentRequestCanMakePaymentEnabled: false,\n                isCouponCodeCollapsed: true,\n                isSpamProtectionEnabled: true,\n                isTrustedShippingAddressEnabled: false,\n                orderTermsAndConditions: '',\n                orderTermsAndConditionsLocation: '',\n                orderTermsAndConditionsLink: '',\n                orderTermsAndConditionsType: '',\n                privacyPolicyUrl: '',\n                providerWithCustomCheckout: null,\n                shippingQuoteFailedMessage:\n                    \"Unfortunately one or more items in your cart can't be shipped to your location. Please choose a different delivery address.\",\n                realtimeShippingProviders: ['Fedex', 'UPS', 'USPS'],\n                requiresMarketingConsent: false,\n                remoteCheckoutProviders: [],\n                shouldRedirectToStorefrontForAuth: false,\n            },\n            currency: {\n                code: 'USD',\n                decimalPlaces: '2',\n                decimalSeparator: '.',\n                isTransactional: true,\n                symbolLocation: 'left',\n                symbol: '$',\n                thousandsSeparator: ',',\n            },\n            displayDateFormat: 'dd/MM/yyyy',\n            displaySettings: {\n                hidePriceFromGuests: false,\n            },\n            inputDateFormat: 'dd/MM/yyyy',\n            formFields: {\n                customerAccount: [],\n                billingAddress: [],\n                shippingAddress: [],\n            },\n            links: {\n                cartLink: 'https://store-k1drp8k8.bcapp.dev/cart.php',\n                checkoutLink: 'https://store-k1drp8k8.bcapp.dev/checkout',\n                createAccountLink:\n                    'https://store-k1drp8k8.bcapp.dev/login.php?action=create_account',\n                forgotPasswordLink:\n                    'https://store-k1drp8k8.bcapp.dev/login.php?action=reset_password',\n                loginLink: 'https://store-k1drp8k8.bcapp.dev/login.php',\n                logoutLink: 'https://store-k1drp8k8.bcapp.dev/login.php?action=logout',\n                siteLink: 'https://store-k1drp8k8.bcapp.dev/',\n                orderConfirmationLink:\n                    'https://store-k1drp8k8.bcapp.dev/checkout/order-confirmation',\n            },\n            paymentSettings: {\n                bigpayBaseUrl: 'https://bigpay.integration.zone',\n                clientSidePaymentProviders: [\n                    'migs',\n                    'eway',\n                    'securenet',\n                    'usaepay',\n                    'elavon',\n                    'hps',\n                    'quickbooks',\n                    'orbital',\n                    'stripe',\n                    'authorizenet',\n                    'firstdatae4v14',\n                    'nmi',\n                    'braintree',\n                    'braintreepaypal',\n                    'paypal',\n                    'sagepay',\n                    'squarev2',\n                    'afterpay',\n                    'vantiv',\n                ],\n            },\n            shopperConfig: {\n                defaultNewsletterSignup: false,\n                passwordRequirements: {\n                    alpha: '/[A-Za-z]/',\n                    numeric: '/[0-9]/',\n                    minlength: 7,\n                    error: 'Passwords must be at least 7 characters and contain both alphabetic and numeric characters.',\n                },\n                showNewsletterSignup: true,\n            },\n            storeProfile: {\n                orderEmail: 's1504098821@example.com',\n                shopPath: 'https://store-k1drp8k8.bcapp.dev',\n                storeCountry: 'United States',\n                storeCountryCode: 'US',\n                storeHash: 'k1drp8k8',\n                storeId: '1504098821',\n                storeName: 's1504098821',\n                storePhoneNumber: '987654321',\n                storeLanguage: 'en_US',\n            },\n            imageDirectory: 'product_images',\n            isAngularDebuggingEnabled: false,\n            shopperCurrency: {\n                code: 'USD',\n                symbolLocation: 'left',\n                symbol: '$',\n                decimalPlaces: '2',\n                decimalSeparator: '.',\n                thousandsSeparator: ',',\n                exchangeRate: 1,\n                isTransactional: true,\n            },\n            inventorySettings: {\n                showQuantityOnBackorder: false,\n                showBackorderMessage: false,\n                showQuantityOnHand: false,\n                showDefaultShippingExpectationPrompt: false,\n                showBackorderAvailabilityPrompt: false,\n                backorderAvailabilityPrompt: '',\n                defaultShippingExpectationPrompt: '',\n                shouldDisplayBackorderMessagesOnStorefront: false,\n            },\n        },\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/consignment.mock.ts",
    "content": "import { omit } from 'lodash';\n\nimport { Consignment } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getAddress } from './address.mock';\nimport getShippingOption from './shipping-option.mock';\n\nexport default function getConsignment(): Consignment {\n    return {\n        id: '55c96cda6f04c',\n        address: omit(getAddress(), 'id'),\n        selectedShippingOption: getShippingOption(),\n        shippingCost: 0,\n        handlingCost: 0,\n        lineItemIds: ['12e11c8f-7dce-4da3-9413-b649533f8bad'],\n        shippingAddress: omit(getAddress(), 'id'),\n        availableShippingOptions: [getShippingOption()],\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/countries.mock.ts",
    "content": "import { Country } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function getCountries(): Country[] {\n    return [getAustralia(), getUnitedStates(), getJapan()];\n}\n\nexport function getAustralia(): Country {\n    return {\n        code: 'AU',\n        name: 'Australia',\n        subdivisions: [\n            { code: 'NSW', name: 'New South Wales' },\n            { code: 'VIC', name: 'Victoria' },\n        ],\n        hasPostalCodes: true,\n        requiresState: true,\n    };\n}\n\nexport function getUnitedStates(): Country {\n    return {\n        code: 'US',\n        name: 'United States',\n        hasPostalCodes: true,\n        subdivisions: [\n            { code: 'CA', name: 'California' },\n            { code: 'TX', name: 'Texas' },\n        ],\n        requiresState: false,\n    };\n}\n\nexport function getJapan(): Country {\n    return {\n        code: 'JP',\n        name: 'Japan',\n        hasPostalCodes: false,\n        subdivisions: [],\n        requiresState: false,\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/coupons.mock.ts",
    "content": "import { Coupon } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getCoupon(): Coupon {\n    return {\n        code: 'savebig2015',\n        displayName: '20% off each item',\n        couponType: 'percentage_discount',\n        discountedAmount: 5,\n        id: '1',\n    };\n}\n\nexport function getShippingCoupon(): Coupon {\n    return {\n        code: '279F507D817E3E7',\n        displayName: '$5.00 off the shipping total',\n        couponType: 'shipping_discount',\n        discountedAmount: 5,\n        id: '4',\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/currency.mock.ts",
    "content": "import { Currency } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getCurrency(): Currency {\n    return {\n        name: 'US Dollar',\n        code: 'USD',\n        symbol: '$',\n        decimalPlaces: 2,\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/customer.mock.ts",
    "content": "import { Customer, InternalCustomer } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getAddress } from './address.mock';\n\nexport function getCustomer(): Customer {\n    return {\n        id: 4,\n        email: 'test@bigcommerce.com',\n        firstName: 'Foo',\n        fullName: 'Foo Bar',\n        lastName: 'Bar',\n        storeCredit: 0,\n        shouldEncourageSignIn: false,\n        addresses: [\n            {\n                ...getAddress(),\n                id: 5,\n                type: 'residential',\n            },\n        ],\n        isGuest: false,\n        customerGroup: {\n            id: 1,\n            name: 'vip',\n        },\n    };\n}\n\nexport function getGuestCustomer(): Customer {\n    return {\n        id: 0,\n        addresses: [],\n        email: 'test@bigcommerce.com',\n        firstName: '',\n        fullName: '',\n        isGuest: true,\n        lastName: '',\n        storeCredit: 0,\n        shouldEncourageSignIn: false,\n        customerGroup: {\n            id: 0,\n            name: '',\n        },\n    };\n}\n\nexport function getGuestInternalCustomer(): InternalCustomer {\n    return {\n        addresses: [],\n        customerId: 0,\n        customerGroupName: '',\n        email: 'test@bigcommerce.com',\n        firstName: 'Test',\n        lastName: 'Tester',\n        isGuest: true,\n        name: 'Test Tester',\n        storeCredit: 0,\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/discounts.mock.ts",
    "content": "import { Discount } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getDiscount(): Discount {\n    return {\n        id: '12e11c8f-7dce-4da3-9413-b649533f8bad',\n        discountedAmount: 10,\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/gift-certificate-state.ts",
    "content": "import {\n    RequestError,\n    StorefrontErrorResponseBody,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport GiftCertificate from './gift-certificate';\n\nexport default interface GiftCertificateState {\n    data?: GiftCertificate[];\n    errors: GiftCertificateErrorsState;\n    statuses: GiftCertificateStatusesState;\n}\n\nexport interface GiftCertificateErrorsState {\n    applyGiftCertificateError?: RequestError<StorefrontErrorResponseBody>;\n    removeGiftCertificateError?: RequestError<StorefrontErrorResponseBody>;\n}\n\nexport interface GiftCertificateStatusesState {\n    isApplyingGiftCertificate?: boolean;\n    isRemovingGiftCertificate?: boolean;\n}\n\nexport const DEFAULT_STATE: GiftCertificateState = {\n    errors: {},\n    statuses: {},\n};\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/gift-certificate.ts",
    "content": "export default interface GiftCertificate {\n    balance: number;\n    remaining: number;\n    used: number;\n    code: string;\n    purchaseDate: string;\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/gift-certificates.mock.ts",
    "content": "import GiftCertificate from './gift-certificate';\nimport GiftCertificateState from './gift-certificate-state';\n\nexport function getGiftCertificate(): GiftCertificate {\n    return {\n        balance: 10,\n        used: 7,\n        remaining: 3,\n        code: 'gc',\n        purchaseDate: 'ddmmyy',\n    };\n}\n\nexport function getGiftCertificatesState(): GiftCertificateState {\n    return {\n        data: [getGiftCertificate(), { ...getGiftCertificate(), code: 'gc2' }],\n        errors: {},\n        statuses: {},\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/index.ts",
    "content": "export { default as PaymentIntegrationServiceMock } from './payment-integration-service.mock';\nexport { default as getBuyNowCartRequestBody } from './buy-now-cart-request-body.mock';\nexport { default as getBillingAddress } from './billing-address.mock';\nexport { default as getCart, getBuyNowCart } from './carts.mock';\nexport { getCustomer, getGuestCustomer } from './customer.mock';\nexport {\n    default as getCheckout,\n    getCheckoutWithBuyNowCart,\n    getCheckoutWithGiftCertificates,\n} from './checkouts.mock';\nexport { default as getConfig } from './config.mock';\nexport { default as getConsignment } from './consignment.mock';\nexport { default as getCountries } from './countries.mock';\nexport {\n    default as getOrderRequestBody,\n    getSubmitOrderResponseHeaders,\n} from './internal-orders.mock';\nexport { getOrder, getOrderMeta } from './orders.mock';\nexport {\n    getResponse,\n    getPaymentResponse,\n    getErrorResponse,\n    getErrorResponseBody,\n    getTimeoutResponse,\n} from './responses.mock';\nexport { default as getShippingOption } from './shipping-option.mock';\nexport {\n    getPayment,\n    getPaymentMethod,\n    getPaymentMethodsMeta,\n    getCreditCardInstrument,\n    getVaultedInstrument,\n    getErrorPaymentResponseBody,\n    getPaymentResponseBody,\n    getInstruments,\n} from './payments.mock';\n\nexport { getShippingAddress, getShippingAddressWithCustomFields } from './shipping-addresses.mock';\nexport { getAddress } from './address.mock';\nexport { getCurrency } from './currency.mock';\nexport { getGiftCertificate, getGiftCertificatesState } from './gift-certificates.mock';\nexport { getDigitalItem } from './line-items.mock';\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/internal-orders.mock.ts",
    "content": "import {\n    InternalIncompleteOrder,\n    InternalOrder,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getPayment } from './payments.mock';\n\nexport default function getOrderRequestBody(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: getPayment() as OrderPaymentRequestBody,\n    };\n}\n\nexport function getSubmitOrderResponseHeaders(): { token: string } {\n    return {\n        token: 'auth-token',\n    };\n}\n\nexport function getCompleteOrder(): InternalOrder {\n    return {\n        ...getIncompleteOrder(),\n        id: 295,\n        items: [\n            {\n                id: 103,\n                type: 'ItemPhysicalEntity',\n                name: 'Canvas Laundry Cart',\n                imageUrl: '/images/canvas-laundry-cart.jpg',\n                quantity: 1,\n                brand: 'OFS',\n                sku: 'CLC',\n                amount: 200,\n                discount: 10,\n                amountAfterDiscount: 190,\n                integerAmount: 20000,\n                integerDiscount: 1000,\n                integerAmountAfterDiscount: 19000,\n                integerUnitPrice: 20000,\n                integerUnitPriceAfterDiscount: 19000,\n                variantId: 71,\n                addedByPromotion: false,\n                attributes: [\n                    {\n                        name: 'n',\n                        value: 'v',\n                    },\n                ],\n                productId: 103,\n                categoryNames: ['Cat 1'],\n            },\n            {\n                id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n                type: 'ItemGiftCertificateEntity',\n                name: '$100 Gift Certificate',\n                sender: {\n                    name: 'pablo',\n                    email: 'pa@blo.com',\n                },\n                recipient: {\n                    name: 'luis',\n                    email: 'lu@is.com',\n                },\n                imageUrl: '',\n                quantity: 1,\n                amount: 100,\n                discount: 0,\n                amountAfterDiscount: 100,\n                attributes: [],\n                integerAmount: 10000,\n                integerDiscount: 0,\n                integerAmountAfterDiscount: 10000,\n                integerUnitPrice: 10000,\n                integerUnitPriceAfterDiscount: 10000,\n                variantId: null,\n            },\n        ],\n        currency: 'USD',\n        subtotal: {\n            amount: 200,\n            integerAmount: 20000,\n        },\n        coupon: {\n            discountedAmount: 10,\n            coupons: [\n                {\n                    code: 'savebig2015',\n                    discount: '20% off each item',\n                    discountType: 1,\n                },\n                {\n                    code: '279F507D817E3E7',\n                    discount: '$5.00 off the shipping total',\n                    discountType: 3,\n                },\n            ],\n        },\n        discount: {\n            amount: 10,\n            integerAmount: 1000,\n        },\n        discountNotifications: [],\n        giftCertificate: {\n            totalDiscountedAmount: 7,\n            appliedGiftCertificates: {\n                gc: {\n                    code: 'gc',\n                    discountedAmount: 7,\n                    remainingBalance: 3,\n                    giftCertificate: {\n                        code: 'gc',\n                        balance: 10,\n                        purchaseDate: '',\n                    },\n                },\n            },\n        },\n        shipping: {\n            amount: 15,\n            integerAmount: 1500,\n            amountBeforeDiscount: 20,\n            integerAmountBeforeDiscount: 2000,\n        },\n        storeCredit: {\n            amount: 0,\n        },\n        taxes: [\n            {\n                name: 'Tax',\n                amount: 3,\n            },\n        ],\n        taxTotal: {\n            amount: 3,\n            integerAmount: 300,\n        },\n        handling: {\n            amount: 8,\n            integerAmount: 800,\n        },\n        grandTotal: {\n            amount: 190,\n            integerAmount: 19000,\n        },\n        orderId: 295,\n        payment: {\n            id: 'authorizenet',\n            status: 'PAYMENT_STATUS_FINALIZE',\n            helpText: '%%OrderID%% text %%OrderID%%',\n        },\n        isDownloadable: false,\n        hasDigitalItems: false,\n        customerCanBeCreated: true,\n        isComplete: true,\n        status: 'ORDER_STATUS_AWAITING_FULFILLMENT',\n        /* eslint no-useless-escape: \"off\" */\n        socialData: {\n            5: {\n                fb: {\n                    name: 'Canvas Laundry Cart',\n                    description: 'Canvas Laundry Cart',\n                    image: '/images/canvas-laundry-cart.jpg',\n                    url: 'http://www.facebook.com/sharer/sharer.php?s=100&p[title]=I+just+bought+%27%5BSample%5D+Sodling%2C+black+leather+duffle+bag%27+on+s1446156961&p[summary]=How+to+write+product+descriptions+that+sellOne+of+the+best+things+you+can+do+to+make+your+store+successful+is+invest+some+time+in+writing+great+product+descriptions.+You+want+to+provide+detailed+ye...&p[url]=http%3A%2F%2Fs1446156961.bcapp.dev%2Fsample-sodling-black-leather-duffle-bag%2F&p[images][0]=http%3A%2F%2Fcdn.bcapp.dev%2Fbcapp%2Fuvn6bltx%2Fproducts%2F68%2Fimages%2F253%2FHERO_mensstyle_034__54484.1348466546.190.285.jpg%3Fc%3D1',\n                    shareText:\n                        \"I just bought '[Sample] Sodling, black leather duffle bag' on s1446156961\",\n                    sharingLink:\n                        'http://www.facebook.com/sharer/sharer.php?s=100&p[title]=I+just+bought+%27%5BSample%5D+Sodling%2C+black+leather+duffle+bag%27+on+s1446156961&p[summary]=How+to+write+product+descriptions+that+sellOne+of+the+best+things+you+can+do+to+make+your+store+successful+is+invest+some+time+in+writing+great+product+descriptions.+You+want+to+provide+detailed+ye...&p[url]=http%3A%2F%2Fs1446156961.bcapp.dev%2Fsample-sodling-black-leather-duffle-bag%2F&p[images][0]=http%3A%2F%2Fcdn.bcapp.dev%2Fbcapp%2Fuvn6bltx%2Fproducts%2F68%2Fimages%2F253%2FHERO_mensstyle_034__54484.1348466546.190.285.jpg%3Fc%3D1',\n                    channelName: 'Facebook',\n                    channelCode: 'fb',\n                },\n                tw: {\n                    name: 'Canvas Laundry Cart',\n                    description: 'Canvas Laundry Cart',\n                    image: '/images/canvas-laundry-cart.jpg',\n                    url: 'https://twitter.com/intent/tweet?url=http%3A%2F%2Fs1446156961.bcapp.dev%2Fsample-sodling-black-leather-duffle-bag%2F&text=I+just+bought+%27%5BSample%5D+Sodling%2C+black+leather+duffle+bag%27+on+s1446156961',\n                    shareText:\n                        \"I just bought '[Sample] Sodling, black leather duffle bag' on s1446156961\",\n                    sharingLink:\n                        'https://twitter.com/intent/tweet?url=http%3A%2F%2Fs1446156961.bcapp.dev%2Fsample-sodling-black-leather-duffle-bag%2F&text=I+just+bought+%27%5BSample%5D+Sodling%2C+black+leather+duffle+bag%27+on+s1446156961',\n                    channelName: 'Twitter',\n                    channelCode: 'tw',\n                },\n                gp: {\n                    name: 'Canvas Laundry Cart',\n                    description: 'Canvas Laundry Cart',\n                    image: '/images/canvas-laundry-cart.jpg',\n                    url: 'https://plus.google.com/share?url=http://s1446156961.bcapp.dev/sample-sodling-black-leather-duffle-bag/',\n                    shareText:\n                        \"I just bought '[Sample] Sodling, black leather duffle bag' on s1446156961\",\n                    sharingLink:\n                        'https://plus.google.com/share?url=http://s1446156961.bcapp.dev/sample-sodling-black-leather-duffle-bag/',\n                    channelName: 'Google Plus',\n                    channelCode: 'gp',\n                },\n            },\n        },\n    };\n}\n\nexport function getIncompleteOrder(): InternalIncompleteOrder {\n    return {\n        orderId: null,\n        payment: {},\n        status: 'ORDER_STATUS_INCOMPLETE',\n        hasDigitalItems: false,\n        isDownloadable: false,\n        isComplete: false,\n    };\n}\n\nexport function getAwaitingOrder(): InternalOrder {\n    const order = getCompleteOrder();\n\n    return {\n        ...order,\n        callbackUrl:\n            'https://internalapi-999425555.mybigcommerce.com/internalapi/v1/checkout/order/505/payment',\n        payment: {\n            ...order.payment,\n            returnUrl: 'http://returnurl.bigcommerce.com/',\n        },\n        token: '77d92d6e1b1b7d1017aa84ad0a9fe6ae',\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/line-items.mock.ts",
    "content": "import {\n    CustomItem,\n    DigitalItem,\n    GiftCertificateItem,\n    PhysicalItem,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getCustomItem(): CustomItem {\n    return {\n        id: '55e11c8f-7dce-4da3-9413-b649533f8bad',\n        listPrice: 10,\n        extendedListPrice: 20,\n        name: 'Custom item',\n        quantity: 2,\n        sku: 'custom-sku',\n    };\n}\n\nexport function getPhysicalItem(): PhysicalItem {\n    return {\n        id: '666',\n        variantId: 71,\n        productId: 103,\n        sku: 'CLC',\n        name: 'Canvas Laundry Cart',\n        url: '/canvas-laundry-cart/',\n        quantity: 1,\n        brand: 'OFS',\n        isTaxable: true,\n        imageUrl: '/images/canvas-laundry-cart.jpg',\n        discounts: [],\n        discountAmount: 10,\n        couponAmount: 0,\n        listPrice: 200,\n        salePrice: 190,\n        retailPrice: 210,\n        comparisonPrice: 200,\n        extendedListPrice: 200,\n        extendedSalePrice: 190,\n        extendedComparisonPrice: 200,\n        isShippingRequired: true,\n        addedByPromotion: false,\n        options: [\n            {\n                name: 'n',\n                nameId: 1,\n                value: 'v',\n                valueId: 3,\n            },\n        ],\n        categories: [[{ name: 'Cat 1' }], [{ name: 'Furniture' }, { name: 'Bed' }]],\n        categoryNames: ['Cat 1'],\n    };\n}\n\nexport function getDigitalItem(): DigitalItem {\n    return {\n        id: '667',\n        variantId: 72,\n        productId: 104,\n        sku: 'CLX',\n        name: 'Digital Book',\n        url: '/digital-book/',\n        quantity: 1,\n        brand: 'Digitalia',\n        isTaxable: true,\n        imageUrl: '/images/digital-book.jpg',\n        discounts: [],\n        discountAmount: 0,\n        couponAmount: 0,\n        listPrice: 200,\n        salePrice: 200,\n        retailPrice: 210,\n        comparisonPrice: 200,\n        downloadPageUrl: 'url.php',\n        downloadFileUrls: [],\n        downloadSize: '',\n        extendedListPrice: 200,\n        extendedSalePrice: 200,\n        extendedComparisonPrice: 200,\n        addedByPromotion: false,\n        options: [\n            {\n                name: 'm',\n                nameId: 1,\n                value: 'l',\n                valueId: 3,\n            },\n        ],\n        categories: [[{ name: 'Cat 1' }], [{ name: 'Cat 2' }], [{ name: 'Cat 3' }]],\n        categoryNames: ['Ebooks', 'Audio Books'],\n    };\n}\n\nexport function getGiftCertificateItem(): GiftCertificateItem {\n    return {\n        id: 'bd391ead-8c58-4105-b00e-d75d233b429a',\n        name: '$100 Gift Certificate',\n        message: 'message',\n        amount: 100,\n        taxable: false,\n        theme: 'General',\n        sender: {\n            name: 'pablo',\n            email: 'pa@blo.com',\n        },\n        recipient: {\n            name: 'luis',\n            email: 'lu@is.com',\n        },\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/orders.mock.ts",
    "content": "import {\n    GatewayOrderPayment,\n    GiftCertificateOrderPayment,\n    Order,\n    OrderConsignment,\n    OrderMetaState,\n    OrderShippingConsignment,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getBillingAddress } from './address.mock';\nimport { getCoupon, getShippingCoupon } from './coupons.mock';\nimport { getCurrency } from './currency.mock';\nimport { getAwaitingOrder, getSubmitOrderResponseHeaders } from './internal-orders.mock';\nimport { getGiftCertificateItem, getPhysicalItem } from './line-items.mock';\n\nexport function getGiftCertificateOrderPayment(): GiftCertificateOrderPayment {\n    return {\n        providerId: 'giftcertificate',\n        description: 'gc',\n        amount: 7,\n        detail: {\n            code: 'gc',\n            remaining: 3,\n        },\n    };\n}\n\nexport function getGatewayOrderPayment(): GatewayOrderPayment {\n    return {\n        providerId: 'authorizenet',\n        description: 'credit-card',\n        amount: 190,\n        detail: {\n            step: 'FINALIZE',\n            instructions: '%%OrderID%% text %%OrderID%%',\n        },\n    };\n}\n\nexport function getOrderShippingConsignment(): OrderShippingConsignment {\n    return {\n        lineItems: [\n            {\n                id: 123,\n            },\n        ],\n        shippingAddressId: 1,\n        firstName: 'firstName',\n        lastName: 'lastName',\n        company: 'companyName',\n        address1: '2802 Skyway Cir',\n        address2: 'Balcony',\n        city: 'Austin',\n        stateOrProvince: 'Texas',\n        postalCode: '78704',\n        country: 'United States',\n        countryCode: 'US',\n        email: 'test@bigcommerce.com',\n        phone: '0410123452',\n        itemsTotal: 1,\n        itemsShipped: 0,\n        shippingMethod: 'Flat Rate',\n        baseCost: 15.5,\n        costExTax: 15.5,\n        costIncTax: 16.7,\n        costTax: 1.2,\n        costTaxClassId: 2,\n        baseHandlingCost: 0,\n        handlingCostExTax: 0,\n        handlingCostIncTax: 0,\n        handlingCostTax: 0,\n        handlingCostTaxClassId: 2,\n        shippingZoneId: 1,\n        shippingZoneName: 'United States',\n        customFields: [\n            {\n                name: 'customerMessage',\n                value: 'foobar',\n            },\n        ],\n        discounts: [],\n    };\n}\n\nexport function getOrderConsignment(): OrderConsignment {\n    return {\n        shipping: [getOrderShippingConsignment()],\n    };\n}\n\nexport function getOrder(): Order {\n    return {\n        baseAmount: 200,\n        billingAddress: getBillingAddress(),\n        cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n        consignments: getOrderConsignment(),\n        comparisonShippingCost: 20,\n        coupons: [getCoupon(), getShippingCoupon()],\n        currency: getCurrency(),\n        customerMessage: '',\n        customerCanBeCreated: true,\n        customerId: 0,\n        discountAmount: 10,\n        displayDiscountTotal: 0,\n        manualDiscountTotal: 0,\n        productAutoDiscountedSubtotal: 200,\n        orderBasedAutoDiscountTotal: 0,\n        handlingCostTotal: 8,\n        hasDigitalItems: false,\n        isComplete: true,\n        isDownloadable: false,\n        isTaxIncluded: false,\n        lineItems: {\n            physicalItems: [getPhysicalItem()],\n            digitalItems: [],\n            giftCertificates: [getGiftCertificateItem()],\n            customItems: [],\n        },\n        orderAmount: 190,\n        orderAmountAsInteger: 19000,\n        giftWrappingCostTotal: 0,\n        orderId: 295,\n        payments: [getGatewayOrderPayment(), getGiftCertificateOrderPayment()],\n        shippingCostTotal: 15,\n        shippingCostBeforeDiscount: 20,\n        status: 'ORDER_STATUS_AWAITING_FULFILLMENT',\n        taxes: [\n            {\n                name: 'Tax',\n                amount: 3,\n            },\n        ],\n        taxTotal: 3,\n        channelId: 1,\n        fees: [],\n        totalDiscount: 0,\n    };\n}\n\nexport function getOrderMeta(): OrderMetaState {\n    const { token } = getSubmitOrderResponseHeaders();\n    const { token: orderToken, callbackUrl, payment } = getAwaitingOrder();\n\n    return {\n        token,\n        orderToken,\n        callbackUrl,\n        payment,\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/payment-id.mock.ts",
    "content": "export default function getPaymentId(): { providerId: string; gatewayId?: string } {\n    return {\n        providerId: 'foo',\n        gatewayId: 'bar',\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/payment-integration-service.mock.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getAddress } from './address.mock';\nimport getBillingAddress from './billing-address.mock';\nimport getCart from './carts.mock';\nimport getCheckout from './checkouts.mock';\nimport getConfig from './config.mock';\nimport getConsignment from './consignment.mock';\nimport getCountries from './countries.mock';\nimport { getCustomer } from './customer.mock';\nimport { getOrder, getOrderMeta } from './orders.mock';\nimport getPaymentId from './payment-id.mock';\nimport { getCardInstrument, getInstruments } from './payments.mock';\n\nconst subscribe = jest.fn();\nconst state = {\n    getBillingAddress: jest.fn(() => getBillingAddress()),\n    getBillingAddressOrThrow: jest.fn(() => getBillingAddress()),\n    getCart: jest.fn(() => getCart()),\n    getCartOrThrow: jest.fn(() => getCart()),\n    getCardInstrument: jest.fn(() => getCardInstrument()),\n    getCardInstrumentOrThrow: jest.fn(() => getCardInstrument()),\n    getInstruments: jest.fn(() => getInstruments()),\n    getInstrumentsMeta: jest.fn(),\n    getCheckout: jest.fn(() => getCheckout()),\n    getCheckoutOrThrow: jest.fn(() => getCheckout()),\n    getConsignments: jest.fn(() => [getConsignment()]),\n    getConsignmentsOrThrow: jest.fn(() => [getConsignment()]),\n    getContextConfig: jest.fn(() => getConfig().context),\n    getCountries: jest.fn(() => getCountries()),\n    getCustomer: jest.fn(() => getCustomer()),\n    getCustomerOrThrow: jest.fn(() => getCustomer()),\n    getHost: jest.fn(),\n    getLocale: jest.fn(),\n    getCartLocale: jest.fn(),\n    getOrder: jest.fn(() => getOrder()),\n    getOrderOrThrow: jest.fn(() => getOrder()),\n    getOrderMeta: jest.fn(() => getOrderMeta()),\n    getShippingAddress: jest.fn(() => getAddress()),\n    getShippingAddressOrThrow: jest.fn(() => getAddress()),\n    getShippingAddresses: jest.fn(() => [getAddress()]),\n    getShippingAddressesOrThrow: jest.fn(() => [getAddress()]),\n    getShippingCountries: jest.fn(() => getCountries()),\n    getConfig: jest.fn(() => getConfig()),\n    getStoreConfig: jest.fn(() => getConfig().storeConfig),\n    getStoreConfigOrThrow: jest.fn(() => getConfig().storeConfig),\n    getPaymentId: jest.fn(() => getPaymentId()),\n    getPaymentIdOrThrow: jest.fn(() => getPaymentId()),\n    getPaymentMethod: jest.fn(),\n    getPaymentMethodOrThrow: jest.fn(),\n    getPaymentMethodsMeta: jest.fn(),\n    getPaymentProviderCustomer: jest.fn(),\n    getPaymentProviderCustomerOrThrow: jest.fn(),\n    getPaymentStatus: jest.fn(),\n    getPaymentStatusOrThrow: jest.fn(),\n    getPaymentToken: jest.fn(),\n    getPaymentTokenOrThrow: jest.fn(),\n    isPaymentMethodInitialized: jest.fn(),\n    getOutstandingBalance: jest.fn(),\n    getPaymentRedirectUrl: jest.fn(),\n    getPaymentRedirectUrlOrThrow: jest.fn(),\n    isPaymentDataRequired: jest.fn(),\n    applyCoupon: jest.fn(),\n};\n\nconst createBuyNowCart = jest.fn(() => Promise.resolve(getCart()));\nconst createHostedForm = jest.fn();\nconst forgetCheckout = jest.fn();\nconst remoteCheckoutSignOut = jest.fn();\nconst getConsignments = jest.fn();\nconst getState = jest.fn(() => state);\nconst handlePaymentHumanVerification = jest.fn();\nconst getPaymentProviderCustomerOrThrow = jest.fn();\nconst deleteConsignment = jest.fn();\nconst initializeOffsitePayment = jest.fn();\nconst loadCheckout = jest.fn();\nconst loadDefaultCheckout = jest.fn();\nconst loadPaymentMethod = jest.fn();\nconst loadPaymentMethods = jest.fn();\nconst loadShippingCountries = jest.fn(() => Promise.resolve(state));\nconst loadCurrentOrder = jest.fn();\nconst submitOrder = jest.fn();\nconst submitPayment = jest.fn();\nconst finalizeOrder = jest.fn();\nconst updateBillingAddress = jest.fn();\nconst updateShippingAddress = jest.fn();\nconst signInCustomer = jest.fn();\nconst signOutCustomer = jest.fn();\nconst selectShippingOption = jest.fn();\nconst applyStoreCredit = jest.fn();\nconst verifyCheckoutSpamProtection = jest.fn();\nconst updatePaymentProviderCustomer = jest.fn();\nconst initializePayment = jest.fn();\nconst validateCheckout = jest.fn();\nconst widgetInteraction = jest.fn();\nconst handle = jest.fn();\nconst applyCoupon = jest.fn();\nconst removeCoupon = jest.fn();\n\nconst PaymentIntegrationServiceMock = jest\n    .fn<PaymentIntegrationService, []>()\n    .mockImplementation(() => {\n        return {\n            createBuyNowCart,\n            createHostedForm,\n            deleteConsignment,\n            subscribe,\n            forgetCheckout,\n            remoteCheckoutSignOut,\n            getConsignments,\n            getPaymentProviderCustomerOrThrow,\n            getState,\n            handlePaymentHumanVerification,\n            initializeOffsitePayment,\n            loadCheckout,\n            loadDefaultCheckout,\n            loadPaymentMethod,\n            loadPaymentMethods,\n            loadShippingCountries,\n            loadCurrentOrder,\n            submitOrder,\n            submitPayment,\n            finalizeOrder,\n            updateBillingAddress,\n            updateShippingAddress,\n            signInCustomer,\n            signOutCustomer,\n            selectShippingOption,\n            applyStoreCredit,\n            applyCoupon,\n            removeCoupon,\n            verifyCheckoutSpamProtection,\n            updatePaymentProviderCustomer,\n            initializePayment,\n            validateCheckout,\n            handle,\n            widgetInteraction,\n        };\n    });\n\nexport default PaymentIntegrationServiceMock;\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/payments.mock.ts",
    "content": "import {\n    CardInstrument,\n    CreditCardInstrument,\n    Payment,\n    PaymentInstrument,\n    PaymentMethod,\n    PaymentResponseBody,\n    UntrustedShippingCardVerificationType,\n    VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getPayment(): Payment {\n    return {\n        methodId: 'authorizenet',\n        paymentData: getCreditCardInstrument(),\n    };\n}\n\nexport function getPaymentMethod(): PaymentMethod {\n    return {\n        id: 'authorizenet',\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: [],\n        config: {\n            displayName: 'Authorizenet',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getPaymentMethodsMeta() {\n    return {\n        geoCountryCode: 'AU',\n        deviceSessionId: 'a37230e9a8e4ea2d7765e2f3e19f7b1d',\n        sessionHash: 'cfbbbac580a920b395571fe086db1e06',\n    };\n}\n\nexport function getCreditCardInstrument(): CreditCardInstrument {\n    return {\n        ccExpiry: {\n            month: '10',\n            year: '2020',\n        },\n        ccName: 'BigCommerce',\n        ccNumber: '4111111111111111',\n        ccCvv: '123',\n    };\n}\n\nexport function getCardInstrument(): CardInstrument {\n    return {\n        bigpayToken: '123',\n        defaultInstrument: true,\n        provider: 'bigcommerce',\n        trustedShippingAddress: true,\n        method: 'bigcommerce',\n        brand: 'visa',\n        expiryMonth: '04',\n        expiryYear: '30',\n        iin: '1234',\n        last4: '1111',\n        type: 'card',\n        untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n    };\n}\n\nexport function getInstruments(): PaymentInstrument[] {\n    return [\n        {\n            bigpayToken: '123',\n            provider: 'braintree',\n            iin: '11111111',\n            last4: '4321',\n            expiryMonth: '02',\n            expiryYear: '2020',\n            brand: 'test',\n            trustedShippingAddress: true,\n            defaultInstrument: true,\n            method: 'credit_card',\n            untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n            type: 'card',\n        },\n        {\n            bigpayToken: '111',\n            provider: 'authorizenet',\n            iin: '11222333',\n            last4: '4444',\n            expiryMonth: '10',\n            expiryYear: '2024',\n            brand: 'test',\n            trustedShippingAddress: false,\n            defaultInstrument: false,\n            method: 'credit_card',\n            untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n            type: 'card',\n        },\n        {\n            bigpayToken: '31415',\n            provider: 'braintree',\n            trustedShippingAddress: false,\n            defaultInstrument: false,\n            type: 'account',\n            method: 'paypal',\n            externalId: 'test@external-id.com',\n        },\n        {\n            bigpayToken: '45312',\n            provider: 'paypalcommerce',\n            trustedShippingAddress: true,\n            defaultInstrument: true,\n            type: 'account',\n            method: 'paypal',\n            externalId: 'test@external-id.com',\n        },\n        {\n            bigpayToken: '52346',\n            provider: 'ideal',\n            trustedShippingAddress: false,\n            accountNumber: 'DEFDEF',\n            issuer: 'TEST2',\n            defaultInstrument: false,\n            type: 'bank',\n            method: 'bank',\n            iban: 'DEFDEF',\n        },\n        {\n            bigpayToken: '56789',\n            provider: 'adyenv2',\n            iin: '11111111',\n            last4: '4321',\n            expiryMonth: '02',\n            expiryYear: '2020',\n            brand: 'test',\n            trustedShippingAddress: true,\n            defaultInstrument: true,\n            method: 'scheme',\n            type: 'card',\n            untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n        },\n    ];\n}\n\nexport function getVaultedInstrument(): VaultedInstrument {\n    return {\n        instrumentId: '123',\n    };\n}\n\nexport function getErrorPaymentResponseBody(): PaymentResponseBody {\n    return {\n        status: 'error',\n        id: '1093a806-6cc2-4b5a-b551-77fd21446a1b',\n        avs_result: {},\n        cvv_result: {},\n        three_ds_result: {},\n        fraud_review: true,\n        transaction_type: 'purchase',\n        errors: [{ code: 'insufficient_funds', message: 'Insufficient funds' }],\n    };\n}\n\nexport function getPaymentResponseBody(): PaymentResponseBody {\n    return {\n        status: 'ok',\n        id: 'b12e69cb-d76e-4d86-8d3d-94e8a07c9051',\n        avs_result: {},\n        cvv_result: {},\n        three_ds_result: {},\n        fraud_review: true,\n        transaction_type: 'purchase',\n        errors: [],\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/responses.mock.ts",
    "content": "import { Response } from '@bigcommerce/request-sender';\n\nimport {\n    ErrorResponseBody,\n    PaymentResponse,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getResponse<T>(\n    body: T,\n    headers = {},\n    status = 200,\n    statusText = 'OK',\n): Response<T> {\n    return {\n        body,\n        status,\n        statusText,\n        headers: {\n            'content-type': 'application/json',\n            ...headers,\n        },\n    };\n}\n\nexport function getPaymentResponse<T>(\n    data: T,\n    headers = {},\n    status = 200,\n    statusText = 'OK',\n): PaymentResponse<T> {\n    return {\n        data,\n        status,\n        statusText,\n        headers: {\n            'content-type': 'application/json',\n            ...headers,\n        },\n    };\n}\n\nexport function getErrorResponse(\n    body = getErrorResponseBody(),\n    headers = {},\n    status = 400,\n    statusText = 'Bad Request',\n): Response<any> {\n    return {\n        body,\n        status,\n        statusText,\n        headers: {\n            'content-type': 'application/json',\n            ...headers,\n        },\n    };\n}\n\nexport function getErrorResponseBody(): ErrorResponseBody {\n    return {\n        detail: 'Something went wrong',\n        errors: ['Bad Request'],\n        status: 400,\n        title: 'Error',\n        type: 'error',\n    };\n}\n\nexport function getTimeoutResponse(): Response<string> {\n    return {\n        body: '',\n        headers: {},\n        status: 0,\n        statusText: '',\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/shipping-addresses.mock.ts",
    "content": "import { Address } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getShippingAddress(): Address {\n    return {\n        firstName: 'Test',\n        lastName: 'Tester',\n        company: 'Bigcommerce',\n        address1: '12345 Testing Way',\n        address2: '',\n        city: 'Some City',\n        stateOrProvince: 'California',\n        stateOrProvinceCode: 'CA',\n        country: 'United States',\n        countryCode: 'US',\n        postalCode: '95555',\n        phone: '555-555-5555',\n        shouldSaveAddress: true,\n        customFields: [],\n    };\n}\n\nexport function getShippingAddressWithCustomFields(): Address {\n    return {\n        firstName: 'Amazon',\n        lastName: 'Tester',\n        company: 'Bigcommerce',\n        address1: '12345 Amazon Test',\n        address2: 'Test Street',\n        city: 'Testing City',\n        stateOrProvince: 'New York',\n        stateOrProvinceCode: 'NY',\n        country: 'United States',\n        countryCode: 'US',\n        postalCode: '95555',\n        phone: '666-666-6666',\n        customFields: [\n            {\n                fieldId: 'field_25',\n                fieldValue: '33',\n            },\n        ],\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/src/test-utils/shipping-option.mock.ts",
    "content": "import { ShippingOption } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function getShippingOption(): ShippingOption {\n    return {\n        additionalDescription: 'Flat rate additional description',\n        description: 'Flat Rate',\n        id: '0:61d4bb52f746477e1d4fb411221318c3',\n        imageUrl: '',\n        isRecommended: true,\n        cost: 0,\n        transitTime: '',\n        type: 'shipping_flatrate',\n    };\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/payment-integrations-test-utils/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"jest/valid-expect\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-throw-literal\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/README.md",
    "content": "# paypal-commerce-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test paypal-commerce-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint paypal-commerce-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/paypal-commerce-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'paypal-commerce-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/paypal-commerce-integration',\n};\n"
  },
  {
    "path": "packages/paypal-commerce-integration/project.json",
    "content": "{\n    \"name\": \"paypal-commerce-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/paypal-commerce-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/paypal-commerce-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/paypal-commerce-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/paypal-commerce-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/create-paypal-commerce-integration-service.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPayPalCommerceIntegrationService from './create-paypal-commerce-integration-service';\nimport PayPalCommerceIntegrationService from './paypal-commerce-integration-service';\n\ndescribe('createPayPalCommerceIntegrationService', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates PayPal commerce integration service', () => {\n        const service = createPayPalCommerceIntegrationService(paymentIntegrationService);\n\n        expect(service).toBeInstanceOf(PayPalCommerceIntegrationService);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/create-paypal-commerce-integration-service.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    PayPalCommerceIntegrationService,\n    PayPalCommerceRequestSender,\n    PayPalCommerceScriptLoader,\n} from './index';\n\nconst createPayPalCommerceIntegrationService = (\n    paymentIntegrationService: PaymentIntegrationService,\n) => {\n    const { getHost } = paymentIntegrationService.getState();\n\n    return new PayPalCommerceIntegrationService(\n        createFormPoster(),\n        paymentIntegrationService,\n        new PayPalCommerceRequestSender(createRequestSender({ host: getHost() })),\n        new PayPalCommerceScriptLoader(getScriptLoader()),\n    );\n};\n\nexport default createPayPalCommerceIntegrationService;\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/index.ts",
    "content": "export { default as PayPalCommerceIntegrationService } from './paypal-commerce-integration-service';\nexport { default as PayPalCommerceRequestSender } from './paypal-commerce-request-sender';\nexport { default as PayPalCommerceScriptLoader } from './paypal-commerce-script-loader';\n\n/**\n *\n * PayPalCommerce strategies\n *\n */\nexport { default as createPayPalCommerceButtonStrategy } from './paypal-commerce/create-paypal-commerce-button-strategy';\nexport { WithPayPalCommerceButtonInitializeOptions } from './paypal-commerce/paypal-commerce-button-initialize-options';\n\nexport { default as createPayPalCommerceCustomerStrategy } from './paypal-commerce/create-paypal-commerce-customer-strategy';\nexport { WithPayPalCommerceCustomerInitializeOptions } from './paypal-commerce/paypal-commerce-customer-initialize-options';\n\nexport { default as createPayPalCommercePaymentStrategy } from './paypal-commerce/create-paypal-commerce-payment-strategy';\nexport { WithPayPalCommercePaymentInitializeOptions } from './paypal-commerce/paypal-commerce-payment-initialize-options';\n\n/**\n *\n * PayPalCommerce Credit (PayLater) strategies\n *\n */\nexport { default as createPayPalCommerceCreditButtonStrategy } from './paypal-commerce-credit/create-paypal-commerce-credit-button-strategy';\nexport { WithPayPalCommerceCreditButtonInitializeOptions } from './paypal-commerce-credit/paypal-commerce-credit-button-initialize-options';\n\nexport { default as createPayPalCommerceCreditCustomerStrategy } from './paypal-commerce-credit/create-paypal-commerce-credit-customer-strategy';\nexport { WithPayPalCommerceCreditCustomerInitializeOptions } from './paypal-commerce-credit/paypal-commerce-credit-customer-initialize-options';\n\nexport { default as createPayPalCommerceCreditPaymentStrategy } from './paypal-commerce-credit/create-paypal-commerce-credit-payment-strategy';\nexport { WithPayPalCommerceCreditPaymentInitializeOptions } from './paypal-commerce-credit/paypal-commerce-credit-payment-initialize-options';\n\n/**\n *\n * PayPalCommerce Venmo strategies\n *\n */\nexport { default as createPayPalCommerceVenmoButtonStrategy } from './paypal-commerce-venmo/create-paypal-commerce-venmo-button-strategy';\nexport { WithPayPalCommerceVenmoButtonInitializeOptions } from './paypal-commerce-venmo/paypal-commerce-venmo-button-initialize-options';\n\nexport { default as createPayPalCommerceVenmoCustomerStrategy } from './paypal-commerce-venmo/create-paypal-commerce-venmo-customer-strategy';\nexport { WithPayPalCommerceVenmoCustomerInitializeOptions } from './paypal-commerce-venmo/paypal-commerce-venmo-customer-initialize-options';\n\nexport { default as createPayPalCommerceVenmoPaymentStrategy } from './paypal-commerce-venmo/create-paypal-commerce-venmo-payment-strategy';\nexport { WithPayPalCommerceVenmoPaymentInitializeOptions } from './paypal-commerce-venmo/paypal-commerce-venmo-payment-initialize-options';\n\n/**\n *\n * PayPalCommerce Alternative methods strategies\n *\n */\nexport { default as createPayPalCommerceAlternativeMethodsPaymentStrategy } from './paypal-commerce-alternative-methods/create-paypal-commerce-alternative-methods-payment-strategy';\nexport { WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions } from './paypal-commerce-alternative-methods/paypal-commerce-alternative-methods-payment-initialize-options';\n\n/**\n *\n * PayPalCommerce Credit Cards strategies\n *\n */\nexport { default as createPayPalCommerceCreditCardsPaymentStrategy } from './paypal-commerce-credit-card/create-paypal-commerce-credit-cards-payment-strategy';\nexport { WithPayPalCommerceCreditCardsPaymentInitializeOptions } from './paypal-commerce-credit-card/paypal-commerce-credit-cards-payment-initialize-options';\n\n/**\n *\n * PayPalCommerce Ratepay strategy\n *\n */\nexport { default as createPayPalCommerceRatePayPaymentStrategy } from './paypal-commerce-ratepay/create-paypal-commerce-ratepay-payment-strategy';\nexport { WithPayPalCommerceRatePayPaymentInitializeOptions } from './paypal-commerce-ratepay/paypal-commerce-ratepay-initialize-options';\n\n/**\n *\n * PayPalCommerce Fastlane strategy\n *\n */\nexport { default as createPayPalCommerceFastlaneCustomerStrategy } from './paypal-commerce-fastlane/create-paypal-commerce-fastlane-customer-strategy';\nexport { WithPayPalCommerceFastlaneCustomerInitializeOptions } from './paypal-commerce-fastlane/paypal-commerce-fastlane-customer-initialize-options';\n\nexport { default as createPayPalCommerceFastlanePaymentStrategy } from './paypal-commerce-fastlane/create-paypal-commerce-fastlane-payment-strategy';\nexport { WithPayPalCommerceFastlanePaymentInitializeOptions } from './paypal-commerce-fastlane/paypal-commerce-fastlane-payment-initialize-options';\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/mocks/get-billing-address-from-order-details.mock.ts",
    "content": "import { BillingAddressRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getPayPalCommerceOrderDetails from './get-paypal-commerce-order-details.mock';\n\nexport default function getBillingAddressFromOrderDetails(): BillingAddressRequestBody {\n    const { payer } = getPayPalCommerceOrderDetails();\n\n    return {\n        firstName: payer.name.given_name,\n        lastName: payer.name.surname,\n        email: payer.email_address,\n        phone: payer.phone?.phone_number.national_number || '',\n        company: '',\n        address1: payer.address.address_line_1,\n        address2: payer.address.address_line_2,\n        city: payer.address.admin_area_2,\n        countryCode: payer.address.country_code,\n        postalCode: payer.address.postal_code,\n        stateOrProvince: '',\n        stateOrProvinceCode: payer.address.admin_area_1 || '',\n        customFields: [],\n    };\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/mocks/get-paypal-commerce-integration-service-mock.mock.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport PayPalCommerceRequestSender from '../paypal-commerce-request-sender';\nimport PayPalCommerceScriptLoader from '../paypal-commerce-script-loader';\n\nexport default function getPayPalCommerceIntegrationServiceMock(): PayPalCommerceIntegrationService {\n    const formPoster = createFormPoster();\n    const requestSender = createRequestSender();\n    const paymentIntegrationService = new PaymentIntegrationServiceMock();\n    const paypalCommerceRequestSender = new PayPalCommerceRequestSender(requestSender);\n    const paypalCommerceScriptLoader = new PayPalCommerceScriptLoader(getScriptLoader());\n\n    return new PayPalCommerceIntegrationService(\n        formPoster,\n        paymentIntegrationService,\n        paypalCommerceRequestSender,\n        paypalCommerceScriptLoader,\n    );\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/mocks/get-paypal-commerce-order-details.mock.ts",
    "content": "import { PayPalOrderDetails } from '../paypal-commerce-types';\n\nexport default function getPayPalCommerceOrderDetails(): PayPalOrderDetails {\n    return {\n        purchase_units: [\n            {\n                shipping: {\n                    address: {\n                        address_line_1: '2 E 61st St',\n                        address_line_2: 'Apt.1',\n                        admin_area_2: 'New York',\n                        admin_area_1: 'NY',\n                        postal_code: '10065',\n                        country_code: 'US',\n                    },\n                    name: {\n                        full_name: 'Full Name',\n                    },\n                },\n            },\n        ],\n        payer: {\n            name: {\n                given_name: 'John',\n                surname: 'Doe',\n            },\n            email_address: 'john@doe.com',\n            address: {\n                address_line_1: '1 Main St',\n                address_line_2: 'Apt.2',\n                admin_area_2: 'San Jose',\n                admin_area_1: 'CA',\n                postal_code: '95131',\n                country_code: 'US',\n            },\n            phone: {\n                phone_number: {\n                    national_number: '123456789',\n                },\n            },\n        },\n    };\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/mocks/get-paypal-commerce-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function getPayPalCommercePaymentMethod(): PaymentMethod {\n    return {\n        id: 'paypalcommerce',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        clientToken: 'asdcvY7XFSQasd',\n        config: {\n            testMode: true,\n            merchantId: 'JTS4DY7XFSQZE',\n        },\n        initializationData: {\n            buttonStyle: {\n                height: 55,\n                color: 'black',\n                label: 'pay',\n            },\n            paymentButtonStyles: {\n                cartButtonStyles: {\n                    color: 'black',\n                    label: 'checkout',\n                },\n                pdpButtonStyles: {\n                    color: 'black',\n                    label: 'checkout',\n                },\n                checkoutTopButtonStyles: {\n                    color: 'silver',\n                    label: 'checkout',\n                },\n                checkoutPaymentButtonStyles: {\n                    color: 'black',\n                    label: 'pay',\n                    height: 55,\n                },\n            },\n            clientId: 'abc',\n            merchantId: 'JTS4DY7XFSQZE',\n            orderId: '3U4171152W1482642',\n            attributionId: '1123JLKJASD12',\n            intent: 'capture',\n            isAcceleratedCheckoutEnabled: false,\n            isPayPalCreditAvailable: false,\n            isVenmoEnabled: false,\n            shouldRenderFields: true,\n            shouldRunAcceleratedCheckout: false,\n            isHostedCheckoutEnabled: false,\n            paypalBNPLConfiguration: [\n                {\n                    id: 'checkout',\n                    name: 'Checkout page',\n                    status: true,\n                    styles: {\n                        layout: 'text',\n                        'logo-type': 'alternative',\n                        'text-color': 'white',\n                        'text-size': '10',\n                    },\n                },\n                {\n                    id: 'cart',\n                    name: 'Cart page',\n                    status: true,\n                    styles: {\n                        layout: 'text',\n                        'logo-type': 'alternative',\n                        'logo-position': 'right',\n                        'text-color': 'white',\n                        'text-size': '10',\n                    },\n                },\n            ],\n        },\n        skipRedirectConfirmationAlert: false,\n        type: 'PAYMENT_TYPE_API',\n    };\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/mocks/get-paypal-commerce-ratepay-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function getPayPalCommerceRatePayPaymentMethod(): PaymentMethod {\n    return {\n        id: 'ratepay',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        clientToken: 'asdcvY7XFSQasd',\n        config: {\n            testMode: true,\n            merchantId: 'JTS4DY7XFSQZE',\n        },\n        initializationData: {\n            clientId: 'abc',\n            merchantId: 'JTS4DY7XFSQZE',\n            orderId: '3U4171152W1482642',\n            attributionId: '1123JLKJASD12',\n            intent: 'capture',\n        },\n        skipRedirectConfirmationAlert: false,\n        type: 'PAYMENT_TYPE_API',\n    };\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/mocks/get-paypal-sdk.mock.ts",
    "content": "import { PayPalSDK } from '../paypal-commerce-types';\n\nconst cardFieldMethodsMock = {\n    render: jest.fn(),\n    clear: jest.fn(),\n    close: jest.fn(),\n    removeClass: jest.fn(),\n};\n\nexport default function getPayPalSDKMock(): PayPalSDK {\n    return {\n        Messages: () => ({\n            render: jest.fn(),\n        }),\n        PaymentFields: () => ({\n            render: jest.fn(),\n        }),\n        FUNDING: {\n            CARD: 'card',\n            PAYPAL: 'paypal',\n            CREDIT: 'credit',\n            PAYLATER: 'paylater',\n            OXXO: 'oxxo',\n            SEPA: 'sepa',\n            VENMO: 'venmo',\n        },\n        Buttons: () => ({\n            render: jest.fn(),\n            close: jest.fn(),\n            isEligible: jest.fn(() => true),\n        }),\n        CardFields: () =>\n            Promise.resolve({\n                isEligible: () => true,\n                CVVField: jest.fn().mockReturnValue(cardFieldMethodsMock),\n                ExpiryField: jest.fn().mockReturnValue(cardFieldMethodsMock),\n                NameField: jest.fn().mockReturnValue(cardFieldMethodsMock),\n                NumberField: jest.fn().mockReturnValue(cardFieldMethodsMock),\n                submit: jest.fn().mockReturnValue(Promise.resolve()),\n                getState: jest\n                    .fn()\n                    .mockReturnValue(Promise.resolve({ fields: { number: { isValid: true } } })),\n            }),\n        HostedFields: {\n            isEligible: () => true,\n            render: jest.fn(),\n        },\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        Legal: () => ({\n            render: jest.fn(),\n        }),\n    };\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/mocks/get-shipping-address-from-order-details.mock.ts",
    "content": "import { BillingAddressRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getPayPalCommerceOrderDetails from './get-paypal-commerce-order-details.mock';\n\nexport default function getShippingAddressFromOrderDetails(): BillingAddressRequestBody {\n    const orderDetails = getPayPalCommerceOrderDetails();\n\n    const { payer, purchase_units } = orderDetails;\n    const {\n        address,\n        name: { full_name },\n    } = purchase_units[0].shipping;\n    const [firstName, ...lastName] = full_name.split(' ');\n\n    return {\n        firstName,\n        lastName: lastName.join(' '),\n        email: payer.email_address,\n        phone: '',\n        company: '',\n        address1: address.address_line_1,\n        address2: address.address_line_2,\n        city: address.admin_area_2,\n        countryCode: address.country_code,\n        postalCode: address.postal_code,\n        stateOrProvince: '',\n        stateOrProvinceCode: address.admin_area_1 || '',\n        customFields: [],\n    };\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/mocks/index.ts",
    "content": "export { default as getBillingAddressFromOrderDetails } from './get-billing-address-from-order-details.mock';\nexport { default as getPayPalCommerceIntegrationServiceMock } from './get-paypal-commerce-integration-service-mock.mock';\nexport { default as getPayPalCommerceOrderDetails } from './get-paypal-commerce-order-details.mock';\nexport { default as getPayPalCommercePaymentMethod } from './get-paypal-commerce-payment-method.mock';\nexport { default as getPayPalCommerceRatePayPaymentMethod } from './get-paypal-commerce-ratepay-payment-method.mock';\nexport { default as getPayPalSDKMock } from './get-paypal-sdk.mock';\nexport { default as getShippingAddressFromOrderDetails } from './get-shipping-address-from-order-details.mock';\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPaypalCommerceButtonStrategy from './create-paypal-commerce-button-strategy';\nimport PayPalCommerceButtonStrategy from './paypal-commerce-button-strategy';\n\ndescribe('createPayPalCommerceButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce button strategy', () => {\n        const strategy = createPaypalCommerceButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PayPalCommerceButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-button-strategy.ts",
    "content": "import {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    createPayPalIntegrationService,\n    PaypalButtonCreationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceButtonStrategy from './paypal-commerce-button-strategy';\n\nconst createPayPalCommerceButtonStrategy: CheckoutButtonStrategyFactory<\n    PayPalCommerceButtonStrategy\n> = (paymentIntegrationService) => {\n    const paypalIntegrationService = createPayPalIntegrationService(paymentIntegrationService);\n    const paypalButtonCreationService = new PaypalButtonCreationService(\n        paymentIntegrationService,\n        paypalIntegrationService,\n    );\n\n    return new PayPalCommerceButtonStrategy(\n        paymentIntegrationService,\n        paypalIntegrationService,\n        paypalButtonCreationService,\n    );\n};\n\nexport default toResolvableModule(createPayPalCommerceButtonStrategy, [{ id: 'paypalcommerce' }]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPayPalCommerceCustomerStrategy from './create-paypal-commerce-customer-strategy';\nimport PayPalCommerceCustomerStrategy from './paypal-commerce-customer-strategy';\n\ndescribe('createPayPalCommerceCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce customer strategy', () => {\n        const strategy = createPayPalCommerceCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PayPalCommerceCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-customer-strategy.ts",
    "content": "import {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    createPayPalIntegrationService,\n    PaypalButtonCreationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCustomerStrategy from './paypal-commerce-customer-strategy';\n\nconst createPayPalCommerceCustomerStrategy: CustomerStrategyFactory<\n    PayPalCommerceCustomerStrategy\n> = (paymentIntegrationService) => {\n    const paypalIntegrationService = createPayPalIntegrationService(paymentIntegrationService);\n    const paypalButtonCreationService = new PaypalButtonCreationService(\n        paymentIntegrationService,\n        paypalIntegrationService,\n    );\n\n    return new PayPalCommerceCustomerStrategy(\n        paymentIntegrationService,\n        paypalIntegrationService,\n        paypalButtonCreationService,\n    );\n};\n\nexport default toResolvableModule(createPayPalCommerceCustomerStrategy, [{ id: 'paypalcommerce' }]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPayPalCommercePaymentStrategy from './create-paypal-commerce-payment-strategy';\nimport PayPalCommercePaymentStrategy from './paypal-commerce-payment-strategy';\n\ndescribe('createPayPalCommercePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce payment strategy', () => {\n        const strategy = createPayPalCommercePaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PayPalCommercePaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/create-paypal-commerce-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    createPayPalIntegrationService,\n    LOADING_INDICATOR_STYLES,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommercePaymentStrategy from './paypal-commerce-payment-strategy';\n\nconst createPayPalCommercePaymentStrategy: PaymentStrategyFactory<PayPalCommercePaymentStrategy> = (\n    paymentIntegrationService,\n) =>\n    new PayPalCommercePaymentStrategy(\n        paymentIntegrationService,\n        createPayPalIntegrationService(paymentIntegrationService),\n        new PayPalSdkScriptLoader(getScriptLoader()),\n        new LoadingIndicator({\n            containerStyles: LOADING_INDICATOR_STYLES,\n        }),\n    );\n\nexport default toResolvableModule(createPayPalCommercePaymentStrategy, [{ id: 'paypalcommerce' }]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-initialize-options.ts",
    "content": "import { PayPalButtonStyleOptions, PayPalBuyNowInitializeOptions } from '../paypal-commerce-types';\n\n/**\n * A set of options that are required to initialize PayPalCommerce in cart or product details page.\n *\n * When PayPalCommerce is initialized, an PayPalCommerce button will be inserted into the\n * DOM. When a customer clicks on it, it will trigger Apple sheet.\n */\nexport default interface PayPalCommerceButtonInitializeOptions {\n    /**\n     * The options that are required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\n\n    /**\n     * The option that used to initialize a PayPal script with provided currency code.\n     */\n    currencyCode?: string;\n\n    /**\n     * A set of styling options for the checkout button.\n     */\n    style?: PayPalButtonStyleOptions;\n\n    /**\n     * A callback that gets called when payment complete on paypal side.\n     */\n    onComplete?(): void;\n\n    /**\n     *\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\n     *\n     */\n    onEligibilityFailure?(): void;\n}\n\nexport interface WithPayPalCommerceButtonInitializeOptions {\n    paypalcommerce?: PayPalCommerceButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    Cart,\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getBuyNowCartRequestBody,\n    getCart,\n    getConfig,\n    getConsignment,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    getBillingAddressFromOrderDetails,\n    getPayPalIntegrationServiceMock,\n    getPayPalOrderDetails,\n    getPayPalPaymentMethod,\n    getPayPalSDKMock,\n    getShippingAddressFromOrderDetails,\n    PaypalButtonCreationService,\n    PayPalButtonsOptions,\n    PayPalHostWindow,\n    PayPalIntegrationService,\n    PayPalSDK,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceButtonInitializeOptions from './paypal-commerce-button-initialize-options';\nimport PayPalCommerceButtonStrategy from './paypal-commerce-button-strategy';\n\ndescribe('PayPalCommerceButtonStrategy', () => {\n    let buyNowCart: Cart;\n    let cart: Cart;\n    let eventEmitter: EventEmitter;\n    let strategy: PayPalCommerceButtonStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalButtonElement: HTMLDivElement;\n    let paypalCommerceIntegrationService: PayPalIntegrationService;\n    let paypalSdk: PayPalSDK;\n    let paypalButtonCreationService: PaypalButtonCreationService;\n\n    const defaultMethodId = 'paypalcommerce';\n    const defaultButtonContainerId = 'paypal-commerce-button-mock-id';\n    const paypalOrderId = 'ORDER_ID';\n\n    const buyNowCartRequestBody = getBuyNowCartRequestBody();\n\n    const buyNowPayPalCommerceOptions: PayPalCommerceButtonInitializeOptions = {\n        buyNowInitializeOptions: {\n            getBuyNowCartRequestBody: jest.fn().mockReturnValue(buyNowCartRequestBody),\n        },\n        currencyCode: 'USD',\n        style: {\n            height: 45,\n        },\n        onComplete: jest.fn(),\n        onEligibilityFailure: jest.fn(),\n    };\n\n    const buyNowInitializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        paypalcommerce: buyNowPayPalCommerceOptions,\n    };\n\n    const paypalCommerceOptions: PayPalCommerceButtonInitializeOptions = {\n        style: {\n            height: 45,\n        },\n        onComplete: jest.fn(),\n        onEligibilityFailure: jest.fn(),\n    };\n\n    const initializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        paypalcommerce: paypalCommerceOptions,\n    };\n\n    const paypalShippingAddressPayloadMock = {\n        city: 'New York',\n        countryCode: 'US',\n        postalCode: '07564',\n        state: 'New York',\n    };\n\n    const paypalSelectedShippingOptionPayloadMock = {\n        amount: {\n            currency_code: 'USD',\n            value: '100',\n        },\n        id: '1',\n        label: 'Free shipping',\n        selected: true,\n        type: 'type_shipping',\n    };\n\n    const storeConfig = getConfig().storeConfig;\n    const resumeMock = jest.fn();\n\n    beforeEach(() => {\n        buyNowCart = getBuyNowCart();\n        cart = getCart();\n\n        eventEmitter = new EventEmitter();\n\n        paypalCommerceIntegrationService = getPayPalIntegrationServiceMock();\n        paymentMethod = getPayPalPaymentMethod();\n        paypalSdk = getPayPalSDKMock();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        paypalButtonCreationService = new PaypalButtonCreationService(\n            paymentIntegrationService,\n            paypalCommerceIntegrationService,\n        );\n\n        strategy = new PayPalCommerceButtonStrategy(\n            paymentIntegrationService,\n            paypalCommerceIntegrationService,\n            paypalButtonCreationService,\n        );\n\n        paypalButtonElement = document.createElement('div');\n        paypalButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(paypalButtonElement);\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService, 'loadDefaultCheckout').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paymentIntegrationService, 'selectShippingOption').mockImplementation(jest.fn());\n\n        jest.spyOn(paypalCommerceIntegrationService, 'loadPayPalSdk').mockReturnValue(\n            Promise.resolve(paypalSdk),\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'createBuyNowCartOrThrow').mockReturnValue(\n            Promise.resolve(buyNowCart),\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'createOrder').mockImplementation(jest.fn());\n        jest.spyOn(paypalCommerceIntegrationService, 'updateOrder').mockImplementation(jest.fn());\n        jest.spyOn(paypalCommerceIntegrationService, 'tokenizePayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n        jest.spyOn(paypalCommerceIntegrationService, 'removeElement').mockImplementation(jest.fn());\n        jest.spyOn(\n            paypalCommerceIntegrationService,\n            'getBillingAddressFromOrderDetails',\n        ).mockReturnValue(getBillingAddressFromOrderDetails());\n        jest.spyOn(\n            paypalCommerceIntegrationService,\n            'getShippingAddressFromOrderDetails',\n        ).mockReturnValue(getShippingAddressFromOrderDetails());\n        jest.spyOn(paypalCommerceIntegrationService, 'getShippingOptionOrThrow').mockReturnValue(\n            getShippingOption(),\n        );\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation((options: PayPalButtonsOptions) => {\n            eventEmitter.on('createOrder', () => {\n                if (options.createOrder) {\n                    options.createOrder();\n                }\n            });\n\n            eventEmitter.on(\n                'onClick',\n                // eslint-disable-next-line @typescript-eslint/no-misused-promises\n                async (jestSuccessExpectationsCallback, jestFailureExpectationsCallback) => {\n                    try {\n                        if (options.onClick) {\n                            await options.onClick(\n                                { fundingSource: 'paypal' },\n                                {\n                                    reject: jest.fn(),\n                                    resolve: jest.fn(),\n                                },\n                            );\n\n                            if (\n                                jestSuccessExpectationsCallback &&\n                                typeof jestSuccessExpectationsCallback === 'function'\n                            ) {\n                                jestSuccessExpectationsCallback();\n                            }\n                        }\n                    } catch (error) {\n                        if (\n                            jestFailureExpectationsCallback &&\n                            typeof jestFailureExpectationsCallback === 'function'\n                        ) {\n                            jestFailureExpectationsCallback(error);\n                        }\n                    }\n                },\n            );\n\n            eventEmitter.on('onApprove', () => {\n                if (options.onApprove) {\n                    options.onApprove(\n                        { orderID: paypalOrderId },\n                        {\n                            order: {\n                                get: jest.fn(),\n                            },\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onCancel', () => {\n                if (options.onCancel) {\n                    options.onCancel();\n                }\n            });\n\n            eventEmitter.on('onShippingAddressChange', () => {\n                if (options.onShippingAddressChange) {\n                    options.onShippingAddressChange({\n                        orderId: paypalOrderId,\n                        shippingAddress: paypalShippingAddressPayloadMock,\n                    });\n                }\n            });\n\n            eventEmitter.on('onShippingOptionsChange', () => {\n                if (options.onShippingOptionsChange) {\n                    options.onShippingOptionsChange({\n                        orderId: paypalOrderId,\n                        selectedShippingOption: paypalSelectedShippingOptionPayloadMock,\n                    });\n                }\n            });\n\n            return {\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: jest.fn(),\n                hasReturned: jest.fn().mockReturnValue(true),\n                resume: resumeMock,\n            };\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as PayPalHostWindow).paypal;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(paypalButtonElement);\n        }\n    });\n\n    it('creates an instance of the PayPal Commerce checkout button strategy', () => {\n        expect(strategy).toBeInstanceOf(PayPalCommerceButtonStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if containerId is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommerce is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommerce.currencyCode is not provided (for buyNowFlow only)', async () => {\n            const { currencyCode, ...rest } = buyNowPayPalCommerceOptions;\n\n            const newInitializationOptions = {\n                ...buyNowInitializationOptions,\n                paypalcommerce: rest,\n            };\n\n            try {\n                await strategy.initialize(newInitializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if provided buyNow callback is not a function is not provided (for buyNowFlow only)', async () => {\n            const { buyNowInitializeOptions, ...rest } = buyNowPayPalCommerceOptions;\n\n            const newInitializationOptions = {\n                ...buyNowInitializationOptions,\n                paypalcommerce: {\n                    ...rest,\n                    buyNowInitializeOptions: {\n                        getBuyNowCartRequestBody: 'string',\n                    },\n                },\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(newInitializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads default checkout', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n\n        it('does not load default checkout for Buy Now flow', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal commerce sdk script', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n                cart.currency.code,\n                false,\n            );\n        });\n\n        it('loads paypal commerce sdk script with provided currency code (Buy Now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paypalCommerceIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n                buyNowPayPalCommerceOptions.currencyCode,\n                false,\n            );\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('initializes PayPal button to render (default flow)', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        'PAYPAL-5716.app_switch_functionality': false,\n                    },\n                },\n            });\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                style: paypalCommerceOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('initializes PayPal button to render (buy now flow)', async () => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isServerSideShippingCallbacksEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n            await strategy.initialize(initializationOptions);\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    fundingSource: paypalSdk.FUNDING.PAYPAL,\n                    style: paypalCommerceOptions.style,\n                    createOrder: expect.any(Function),\n                    onApprove: expect.any(Function),\n                }),\n            );\n        });\n\n        it('initializes PayPal button to render (with shipping options feature enabled)', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        'PAYPAL-5716.app_switch_functionality': false,\n                    },\n                },\n            });\n\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                style: paypalCommerceOptions.style,\n                createOrder: expect.any(Function),\n                onShippingAddressChange: expect.any(Function),\n                onShippingOptionsChange: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('initializes PayPal button to render without shipping options when server side shipping callbacks enabled', async () => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                    isServerSideShippingCallbacksEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                createOrder: expect.any(Function),\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                onApprove: expect.any(Function),\n                style: paypalCommerceOptions.style,\n            });\n        });\n\n        it('renders PayPal button if it is eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => true),\n                render: paypalCommerceSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('does not render PayPal button if it is not eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('calls onEligibilityFailure callback when the PayPal button is not eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceOptions.onEligibilityFailure).toHaveBeenCalled();\n        });\n\n        it('removes PayPal button container if the button is not eligible and onEligibilityFailure callback is not provided', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommerce: {\n                    ...paypalCommerceOptions,\n                    onEligibilityFailure: undefined,\n                },\n            });\n\n            expect(paypalCommerceIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultButtonContainerId,\n            );\n        });\n    });\n\n    describe('#createOrder', () => {\n        it('creates paypal order', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        'PAYPAL-5716.app_switch_functionality': false,\n                    },\n                },\n            });\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommerce',\n            );\n        });\n\n        it('creates paypal order if buy now initialisation options is passed', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.createBuyNowCartOrThrow).toHaveBeenCalled();\n            expect(paymentIntegrationService.loadCheckout).toHaveBeenCalledWith(buyNowCart.id);\n            expect(paypalCommerceIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommerce',\n            );\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        describe('default flow', () => {\n            it('tokenizes payment on paypal approve', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalCommerceIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                    defaultMethodId,\n                    paypalOrderId,\n                );\n            });\n        });\n\n        describe('shipping options feature flow', () => {\n            const paypalOrderDetails = getPayPalOrderDetails();\n\n            beforeEach(() => {\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: PayPalButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: paypalOrderId },\n                                    {\n                                        order: {\n                                            get: () => Promise.resolve(paypalOrderDetails),\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                            close: jest.fn(),\n                        };\n                    },\n                );\n\n                const paymentMethodWithShippingOptionsFeature = {\n                    ...paymentMethod,\n                    initializationData: {\n                        ...paymentMethod.initializationData,\n                        isHostedCheckoutEnabled: true,\n                    },\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n            });\n\n            it('takes order details data from paypal', async () => {\n                const getOrderActionMock = jest.fn();\n\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: PayPalButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: paypalOrderId },\n                                    {\n                                        order: {\n                                            get: getOrderActionMock,\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                            close: jest.fn(),\n                        };\n                    },\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(getOrderActionMock).toHaveBeenCalled();\n            });\n\n            it('updates billing address with valid customers data', async () => {\n                const paymentMethodWithShippingOptionsFeature = {\n                    ...paymentMethod,\n                    initializationData: {\n                        ...paymentMethod.initializationData,\n                        isHostedCheckoutEnabled: true,\n                        isServerSideShippingCallbacksEnabled: false,\n                    },\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    paypalCommerceIntegrationService.getBillingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getPayPalOrderDetails());\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                    getBillingAddressFromOrderDetails(),\n                );\n            });\n\n            it('updates shipping address with valid customers data if physical items are available in the cart', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    paypalCommerceIntegrationService.getShippingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getPayPalOrderDetails());\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(\n                    getShippingAddressFromOrderDetails(),\n                );\n            });\n\n            it('submits BC order with provided methodId', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    {},\n                    {\n                        params: {\n                            methodId: initializationOptions.methodId,\n                        },\n                    },\n                );\n            });\n\n            it('submits BC payment to update BC order data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalCommerceIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    defaultMethodId,\n                    paypalOrderId,\n                );\n            });\n        });\n    });\n\n    describe('#onShippingAddressChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('updates billing and shipping address with data returned from PayPal', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        'PAYPAL-5716.app_switch_functionality': false,\n                    },\n                },\n            });\n\n            const address = {\n                firstName: '',\n                lastName: '',\n                email: '',\n                phone: '',\n                company: '',\n                address1: '',\n                address2: '',\n                city: paypalShippingAddressPayloadMock.city,\n                countryCode: paypalShippingAddressPayloadMock.countryCode,\n                postalCode: paypalShippingAddressPayloadMock.postalCode,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalShippingAddressPayloadMock.state,\n                customFields: [],\n            };\n\n            jest.spyOn(paypalCommerceIntegrationService, 'getAddress').mockReturnValue(address);\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(address);\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(address);\n        });\n\n        it('selects shipping option after address update', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        'PAYPAL-5716.app_switch_functionality': false,\n                    },\n                },\n            });\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.getShippingOptionOrThrow).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order after shipping option selection', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        'PAYPAL-5716.app_switch_functionality': false,\n                    },\n                },\n            });\n\n            const consignment = getConsignment();\n\n            // INFO: lets imagine that it is a state that we get after consignmentActionCreator.selectShippingOption call\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getConsignmentsOrThrow',\n            ).mockReturnValue([consignment]);\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onShippingOptionsChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('selects shipping option', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        'PAYPAL-5716.app_switch_functionality': false,\n                    },\n                },\n            });\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.getShippingOptionOrThrow).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        'PAYPAL-5716.app_switch_functionality': false,\n                    },\n                },\n            });\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('loads default checkout onCancel callback (buy now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n            eventEmitter.emit('onCancel');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-button-strategy.ts",
    "content": "import {\n    CheckoutButtonInitializeOptions,\n    CheckoutButtonStrategy,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    PaypalButtonCreationService,\n    PayPalButtonOptions,\n    PayPalInitializationData,\n    PayPalIntegrationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceButtonInitializeOptions, {\n    WithPayPalCommerceButtonInitializeOptions,\n} from './paypal-commerce-button-initialize-options';\n\nexport default class PayPalCommerceButtonStrategy implements CheckoutButtonStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalIntegrationService: PayPalIntegrationService,\n        private paypalButtonCreationService: PaypalButtonCreationService,\n    ) {}\n\n    async initialize(\n        options: CheckoutButtonInitializeOptions & WithPayPalCommerceButtonInitializeOptions,\n    ): Promise<void> {\n        const { paypalcommerce, containerId, methodId } = options;\n\n        const isBuyNowFlow = Boolean(paypalcommerce?.buyNowInitializeOptions);\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!containerId) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n            );\n        }\n\n        if (!paypalcommerce) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.`,\n            );\n        }\n\n        if (isBuyNowFlow && !paypalcommerce.currencyCode) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommerce.currencyCode\" argument is not provided.`,\n            );\n        }\n\n        if (\n            isBuyNowFlow &&\n            typeof paypalcommerce.buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n        ) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommerce.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n            );\n        }\n\n        if (!isBuyNowFlow) {\n            // Info: default checkout should not be loaded for BuyNow flow,\n            // since there is no checkout session available for that.\n            await this.paymentIntegrationService.loadDefaultCheckout();\n        }\n\n        // Info: we are using provided currency code for buy now cart,\n        // because checkout session is not available before buy now cart creation,\n        // hence application will throw an error on getCartOrThrow method call\n        const currencyCode = isBuyNowFlow\n            ? paypalcommerce.currencyCode\n            : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n        await this.paypalIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n        this.renderButton(containerId, methodId, paypalcommerce);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        containerId: string,\n        methodId: string,\n        paypalcommerce: PayPalCommerceButtonInitializeOptions,\n    ): void {\n        const { buyNowInitializeOptions, style, onComplete, onEligibilityFailure } = paypalcommerce;\n\n        const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n        const { isHostedCheckoutEnabled, isServerSideShippingCallbacksEnabled } =\n            paymentMethod.initializationData || {};\n\n        const buyNowFlowCallbacks = {\n            onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n        };\n\n        const buttonOptions: PayPalButtonOptions = {\n            fundingSource: paypalSdk.FUNDING.PAYPAL,\n            style: this.paypalIntegrationService.getValidButtonStyle(style),\n            isServerSideShippingCallbacksEnabled,\n            isHostedCheckoutEnabled,\n            ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n            ...(isHostedCheckoutEnabled && onComplete && { onPaymentComplete: () => onComplete() }),\n        };\n\n        const paypalButton = this.paypalButtonCreationService.createPayPalButton(\n            'paypalcommerce',\n            methodId,\n            buttonOptions,\n            buyNowInitializeOptions,\n        );\n\n        if (paypalButton.isEligible()) {\n            paypalButton.render(`#${containerId}`);\n        } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n            onEligibilityFailure();\n        } else {\n            this.paypalIntegrationService.removeElement(containerId);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-customer-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the customer step of\n * checkout to support PayPalCommerce.\n */\nexport default interface PayPalCommerceCustomerInitializeOptions {\n    /**\n     * The ID of a container which the checkout button should be inserted into.\n     */\n    container: string;\n\n    /**\n     * A callback that gets called if unable to initialize the widget or select\n     * one of the address options provided by the widget.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error?: Error): void;\n\n    /**\n     * A callback that gets called when payment complete on paypal side.\n     */\n    onComplete?(): void;\n\n    /**\n     * A callback that gets called when paypal button clicked.\n     */\n    onClick?(): void;\n}\n\nexport interface WithPayPalCommerceCustomerInitializeOptions {\n    /**\n     * The options that are required to initialize the customer step of checkout\n     * when using PayPalCommerce.\n     */\n    paypalcommerce?: PayPalCommerceCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-customer-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    CustomerInitializeOptions,\n    DefaultCheckoutButtonHeight,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConsignment,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    getBillingAddressFromOrderDetails,\n    getPayPalIntegrationServiceMock,\n    getPayPalOrderDetails,\n    getPayPalPaymentMethod,\n    getPayPalSDKMock,\n    getShippingAddressFromOrderDetails,\n    PaypalButtonCreationService,\n    PayPalButtonsOptions,\n    PayPalHostWindow,\n    PayPalIntegrationService,\n    PayPalSDK,\n    StyleButtonColor,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCustomerInitializeOptions from './paypal-commerce-customer-initialize-options';\nimport PayPalCommerceCustomerStrategy from './paypal-commerce-customer-strategy';\n\ndescribe('PayPalCommerceCustomerStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let strategy: PayPalCommerceCustomerStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalIntegrationService: PayPalIntegrationService;\n    let paypalSdk: PayPalSDK;\n    let paypalButtonCreationService: PaypalButtonCreationService;\n\n    const methodId = 'paypalcommerce';\n    const defaultContainerId = 'paypal-commerce-container-mock-id';\n    const approveDataOrderId = 'ORDER_ID';\n\n    const paypalCommerceOptions: PayPalCommerceCustomerInitializeOptions = {\n        container: defaultContainerId,\n        onClick: jest.fn(),\n        onComplete: jest.fn(),\n    };\n\n    const initializationOptions: CustomerInitializeOptions = {\n        methodId,\n        paypalcommerce: paypalCommerceOptions,\n    };\n\n    const resumeMock = jest.fn();\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n        paymentMethod = getPayPalPaymentMethod();\n        paypalSdk = getPayPalSDKMock();\n        paypalIntegrationService = getPayPalIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paypalButtonCreationService = new PaypalButtonCreationService(\n            paymentIntegrationService,\n            paypalIntegrationService,\n        );\n\n        strategy = new PayPalCommerceCustomerStrategy(\n            paymentIntegrationService,\n            paypalIntegrationService,\n            paypalButtonCreationService,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paymentIntegrationService, 'selectShippingOption').mockImplementation(jest.fn());\n\n        jest.spyOn(paypalIntegrationService, 'loadPayPalSdk').mockResolvedValue(paypalSdk);\n        jest.spyOn(paypalIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(paypalSdk);\n        jest.spyOn(paypalIntegrationService, 'createOrder').mockImplementation(jest.fn());\n        jest.spyOn(paypalIntegrationService, 'updateOrder').mockImplementation(jest.fn());\n        jest.spyOn(paypalIntegrationService, 'tokenizePayment').mockImplementation(jest.fn());\n        jest.spyOn(paypalIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n        jest.spyOn(paypalIntegrationService, 'removeElement').mockImplementation(jest.fn());\n        jest.spyOn(paypalIntegrationService, 'getBillingAddressFromOrderDetails').mockReturnValue(\n            getBillingAddressFromOrderDetails(),\n        );\n        jest.spyOn(paypalIntegrationService, 'getShippingAddressFromOrderDetails').mockReturnValue(\n            getShippingAddressFromOrderDetails(),\n        );\n        jest.spyOn(paypalIntegrationService, 'getShippingOptionOrThrow').mockReturnValue(\n            getShippingOption(),\n        );\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation((options: PayPalButtonsOptions) => {\n            eventEmitter.on('createOrder', () => {\n                if (options.createOrder) {\n                    options.createOrder();\n                }\n            });\n\n            eventEmitter.on('onApprove', () => {\n                if (options.onApprove) {\n                    options.onApprove(\n                        { orderID: approveDataOrderId },\n                        {\n                            order: {\n                                get: jest.fn(),\n                            },\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onClick', () => {\n                if (options.onClick) {\n                    options.onClick(\n                        { fundingSource: 'paypal' },\n                        {\n                            resolve: jest.fn(),\n                            reject: jest.fn(),\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onShippingAddressChange', () => {\n                if (options.onShippingAddressChange) {\n                    options.onShippingAddressChange({\n                        orderId: approveDataOrderId,\n                        shippingAddress: {\n                            city: 'New York',\n                            countryCode: 'US',\n                            postalCode: '07564',\n                            state: 'New York',\n                        },\n                    });\n                }\n            });\n\n            eventEmitter.on('onShippingOptionsChange', () => {\n                if (options.onShippingOptionsChange) {\n                    options.onShippingOptionsChange({\n                        orderId: approveDataOrderId,\n                        selectedShippingOption: {\n                            amount: {\n                                currency_code: 'USD',\n                                value: '100',\n                            },\n                            id: '1',\n                            label: 'Free shipping',\n                            selected: true,\n                            type: 'type_shipping',\n                        },\n                    });\n                }\n            });\n\n            return {\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: jest.fn(),\n                hasReturned: jest.fn().mockReturnValue(true),\n                resume: resumeMock,\n            };\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as PayPalHostWindow).paypal;\n    });\n\n    it('creates an interface of the PayPalCommerce customer strategy', () => {\n        expect(strategy).toBeInstanceOf(PayPalCommerceCustomerStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws an error if methodId is not provided', async () => {\n            const options = {} as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommerce is not provided', async () => {\n            const options = { methodId } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommerce.container is not provided', async () => {\n            const options = {\n                methodId,\n                paypalcommerce: {\n                    onComplete: jest.fn(),\n                    container: undefined,\n                },\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommerce.onClick is provided but it is not a function', async () => {\n            const options = {\n                methodId,\n                paypalcommerce: {\n                    container: 'container',\n                    onClick: 'test',\n                    onComplete: jest.fn(),\n                },\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads paypalcommerce payment method', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n        });\n\n        it('does not load paypalcommerce payment method if payment method is already exists', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n                paymentMethod,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk with provided method id', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(methodId);\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('initializes paypal buttons with default configuration', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: StyleButtonColor.silver,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('initializes paypal buttons with config related to hosted checkout feature', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: StyleButtonColor.silver,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onShippingAddressChange: expect.any(Function),\n                onShippingOptionsChange: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('initializes paypal buttons without shipping callbacks what server side shipping callbacks enabled', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                    isServerSideShippingCallbacksEnabled: true,\n                },\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                createOrder: expect.any(Function),\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: StyleButtonColor.silver,\n                    label: 'checkout',\n                },\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('renders PayPal button if it is eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('does not render PayPal button if it is not eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n            expect(paypalIntegrationService.removeElement).toHaveBeenCalledWith(defaultContainerId);\n        });\n\n        it('logs an error when PayPalSDK Buttons implementation is not available for some reasons', async () => {\n            jest.spyOn(paypalIntegrationService, 'loadPayPalSdk').mockReturnValue(\n                Promise.resolve(undefined),\n            );\n\n            const log = jest.fn();\n\n            jest.spyOn(console, 'error').mockImplementation(log);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(log).toHaveBeenCalled();\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates an order', async () => {\n            jest.spyOn(paypalIntegrationService, 'createOrder').mockResolvedValue('');\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.createOrder).toHaveBeenCalledWith('paypalcommerce');\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        describe('default flow', () => {\n            it('tokenizes payment on paypal approve', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                    methodId,\n                    approveDataOrderId,\n                );\n            });\n        });\n\n        describe('shipping options feature flow', () => {\n            const paypalOrderDetails = getPayPalOrderDetails();\n\n            beforeEach(() => {\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: PayPalButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: approveDataOrderId },\n                                    {\n                                        order: {\n                                            get: jest.fn(() => Promise.resolve(paypalOrderDetails)),\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            close: jest.fn(),\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                        };\n                    },\n                );\n\n                const paymentMethodWithShippingOptionsFeature = {\n                    ...paymentMethod,\n                    initializationData: {\n                        ...paymentMethod.initializationData,\n                        isHostedCheckoutEnabled: true,\n                    },\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n            });\n\n            it('trigger the onError callback if the payment approval fails', async () => {\n                jest.spyOn(paypalIntegrationService, 'submitPayment').mockRejectedValue(\n                    'Request failed',\n                );\n\n                const options = {\n                    ...initializationOptions,\n                    paypalcommerce: {\n                        ...paypalCommerceOptions,\n                        onError: jest.fn(),\n                    },\n                };\n\n                await strategy.initialize(options);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(options.paypalcommerce.onError).toHaveBeenCalled();\n            });\n\n            it('takes order details data from paypal', async () => {\n                const getOrderActionMock = jest.fn(() => Promise.resolve(paypalOrderDetails));\n\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: PayPalButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: approveDataOrderId },\n                                    {\n                                        order: {\n                                            get: getOrderActionMock,\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            close: jest.fn(),\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                        };\n                    },\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(getOrderActionMock).toHaveBeenCalled();\n                expect(getOrderActionMock).toHaveReturnedWith(Promise.resolve(paypalOrderDetails));\n            });\n\n            it('updates billing address with valid customers data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    paypalIntegrationService.getBillingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getPayPalOrderDetails());\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                    getBillingAddressFromOrderDetails(),\n                );\n            });\n\n            it('updates shipping address with valid customers data if physical items are available in the cart', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    paypalIntegrationService.getShippingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getPayPalOrderDetails());\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(\n                    getShippingAddressFromOrderDetails(),\n                );\n            });\n\n            it('submits BC order with provided methodId', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    {},\n                    {\n                        params: {\n                            methodId: initializationOptions.methodId,\n                        },\n                    },\n                );\n            });\n\n            it('submits BC payment to update BC order data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    methodId,\n                    approveDataOrderId,\n                );\n            });\n        });\n    });\n\n    describe('#onShippingAddressChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('updates billing and shipping address with data returned from PayPal', async () => {\n            const address = {\n                firstName: '',\n                lastName: '',\n                email: '',\n                phone: '',\n                company: '',\n                address1: '',\n                address2: '',\n                city: 'New York',\n                countryCode: 'US',\n                postalCode: '07564',\n                stateOrProvince: '',\n                stateOrProvinceCode: 'New York',\n                customFields: [],\n            };\n\n            jest.spyOn(paypalIntegrationService, 'getAddress').mockReturnValue(address);\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(address);\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(address);\n        });\n\n        it('selects shipping option after address update', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.getShippingOptionOrThrow).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order after shipping option selection', async () => {\n            const consignment = getConsignment();\n\n            // INFO: lets imagine that it is a state that we get after consignmentActionCreator.selectShippingOption call\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getConsignmentsOrThrow',\n            ).mockReturnValue([consignment]);\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onShippingOptionsChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('selects shipping option', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.getShippingOptionOrThrow).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('calls default sign in method', async () => {\n            const credentials = {\n                email: 'test@test.com',\n                password: '123',\n            };\n\n            await strategy.signIn(credentials);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                undefined,\n            );\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('calls default sign out method', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout()', () => {\n        it('calls default continue with checkout callback', async () => {\n            const continueWithCheckoutCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({ continueWithCheckoutCallback });\n\n            expect(continueWithCheckoutCallback).toHaveBeenCalled();\n        });\n\n        it('makes nothing if continue with checkout callback is not provided', async () => {\n            const result = await strategy.executePaymentMethodCheckout();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-customer-strategy.ts",
    "content": "import {\n    CustomerCredentials,\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    DefaultCheckoutButtonHeight,\n    ExecutePaymentMethodCheckoutOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    PaypalButtonCreationService,\n    PayPalButtonOptions,\n    PayPalInitializationData,\n    PayPalIntegrationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCustomerInitializeOptions, {\n    WithPayPalCommerceCustomerInitializeOptions,\n} from './paypal-commerce-customer-initialize-options';\n\nexport default class PayPalCommerceCustomerStrategy implements CustomerStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalIntegrationService: PayPalIntegrationService,\n        private paypalButtonCreationService: PaypalButtonCreationService,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions & WithPayPalCommerceCustomerInitializeOptions,\n    ): Promise<void> {\n        const { paypalcommerce, methodId } = options;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!paypalcommerce) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.',\n            );\n        }\n\n        if (!paypalcommerce.container) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommerce.container\" argument is not provided.',\n            );\n        }\n\n        if (paypalcommerce.onClick && typeof paypalcommerce.onClick !== 'function') {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommerce.onClick\" argument is not a function.',\n            );\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethod(methodId);\n\n        if (!paymentMethod) {\n            await this.paymentIntegrationService.loadPaymentMethod(methodId);\n        }\n\n        const paypalSdk = await this.paypalIntegrationService.loadPayPalSdk(methodId);\n\n        if (!paypalSdk || !paypalSdk.Buttons || typeof paypalSdk.Buttons !== 'function') {\n            console.error(\n                '[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK',\n            );\n\n            return;\n        }\n\n        this.renderButton(methodId, paypalcommerce);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signInCustomer(credentials, options);\n\n        return Promise.resolve();\n    }\n\n    async signOut(options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signOutCustomer(options);\n\n        return Promise.resolve();\n    }\n\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n        options?.continueWithCheckoutCallback?.();\n\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        methodId: string,\n        paypalcommerce: PayPalCommerceCustomerInitializeOptions,\n    ): void {\n        const { container, onClick, onComplete, onError } = paypalcommerce;\n\n        const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n        const {\n            isHostedCheckoutEnabled,\n            paymentButtonStyles,\n            isServerSideShippingCallbacksEnabled,\n        } = paymentMethod.initializationData || {};\n        const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n        const buttonOptions: PayPalButtonOptions = {\n            fundingSource: paypalSdk.FUNDING.PAYPAL,\n            isServerSideShippingCallbacksEnabled,\n            isHostedCheckoutEnabled,\n            style: {\n                ...checkoutTopButtonStyles,\n                height: DefaultCheckoutButtonHeight,\n            },\n            ...(onClick && { onClick: () => onClick() }),\n            ...(isHostedCheckoutEnabled && onComplete && { onPaymentComplete: () => onComplete() }),\n            onError,\n        };\n\n        const paypalButton = this.paypalButtonCreationService.createPayPalButton(\n            'paypalcommerce',\n            methodId,\n            buttonOptions,\n        );\n\n        if (paypalButton.isEligible()) {\n            paypalButton.render(`#${container}`);\n        } else {\n            this.paypalIntegrationService.removeElement(container);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-payment-initialize-options.ts",
    "content": "import { HostedInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * A set of options that are required to initialize the PayPal Commerce payment\n * method for presenting its PayPal button.\n *\n * Please note that the minimum version of checkout-sdk is 1.100\n *\n * Also, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\n * ```html\n * <!-- This is where the PayPal button will be inserted -->\n * <div id=\"container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'paypalcommerce',\n *     paypalcommerce: {\n *         container: '#container',\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\n *         submitForm: () => {\n *         // Example function\n *             this.submitOrder(\n *                {\n *                   payment: { methodId: 'paypalcommerce', }\n *               }\n *            );\n *         },\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\n *         onValidate: (resolve, reject) => {\n *         // Example function\n *             const isValid = this.validatePaymentForm();\n *             if (isValid) {\n *                 return resolve();\n *             }\n *             return reject();\n *         },\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\n *         onRenderButton: () => {\n *         // Example function\n *             this.hidePaymentSubmitButton();\n *         }\n *     },\n * });\n * ```\n */\nexport default interface PayPalCommercePaymentInitializeOptions {\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    container?: string;\n\n    /**\n     * The location to insert the Pay Later Messages.\n     */\n    bannerContainerId?: string;\n\n    /**\n     * If there is no need to initialize the Smart Payment Button, simply pass false as the option value.\n     * The default value is true\n     */\n    shouldRenderPayPalButtonOnInitialization?: boolean;\n\n    /**\n     * A callback for getting form fields values.\n     */\n    getFieldsValues?(): HostedInstrument;\n\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: unknown): void;\n\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n\n    /**\n     * A callback that gets called when strategy is in the process of initialization before rendering Smart Payment Button.\n     *\n     * @param callback - A function, that calls the method to render the Smart Payment Button.\n     */\n    onInit?(callback: () => void): void;\n\n    /**\n     * A callback that gets called when a buyer click on Smart Payment Button\n     * and should validate payment form.\n     *\n     * @param resolve - A function, that gets called if form is valid.\n     * @param reject - A function, that gets called if form is not valid.\n     *\n     * @returns reject() or resolve()\n     */\n    onValidate?(resolve: () => void, reject: () => void): Promise<void>;\n\n    /**\n     * A callback for submitting payment form that gets called\n     * when buyer approved PayPal account.\n     */\n    submitForm?(): void;\n}\n\nexport interface WithPayPalCommercePaymentInitializeOptions {\n    paypalcommerce?: PayPalCommercePaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-payment-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    AccountInstrument,\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodInvalidError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getInstruments,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    createPayPalSdkScriptLoader,\n    getPayPalIntegrationServiceMock,\n    getPayPalPaymentMethod,\n    getPayPalSDKMock,\n    PayPalButtonsOptions,\n    PayPalHostWindow,\n    PayPalIntegrationService,\n    PayPalMessagesSdk,\n    PayPalSDK,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommercePaymentInitializeOptions, {\n    WithPayPalCommercePaymentInitializeOptions,\n} from './paypal-commerce-payment-initialize-options';\nimport PayPalCommercePaymentStrategy from './paypal-commerce-payment-strategy';\n\ndescribe('PayPalCommercePaymentStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let loadingIndicator: LoadingIndicator;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalIntegrationService: PayPalIntegrationService;\n    let paypalSdk: PayPalSDK;\n    let strategy: PayPalCommercePaymentStrategy;\n    let payPalSdkScriptLoader: PayPalSdkScriptLoader;\n    let payPalMessagesSdk: PayPalMessagesSdk;\n\n    const paypalOrderId = 'paypal123';\n\n    const defaultMethodId = 'paypalcommerce';\n    const defaultContainerId = '#container';\n\n    const paypalCommerceOptions: PayPalCommercePaymentInitializeOptions = {\n        container: defaultContainerId,\n        onValidate: jest.fn(),\n        submitForm: jest.fn(),\n    };\n\n    const initializationOptions: PaymentInitializeOptions &\n        WithPayPalCommercePaymentInitializeOptions = {\n        methodId: defaultMethodId,\n        paypalcommerce: paypalCommerceOptions,\n    };\n\n    const paymentInstruments = getInstruments();\n    const accountInstrument = paymentInstruments.find(\n        (instrument) => instrument.provider === 'paypalcommerce',\n    );\n    const paypalCommerceSdkRenderMock = jest.fn();\n\n    const defaultMessageContainerId = 'paypal-commerce-credit-message-mock-id';\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        paypalSdk = getPayPalSDKMock();\n        paymentMethod = getPayPalPaymentMethod();\n        paymentMethod.id = defaultMethodId;\n        paymentMethod.initializationData.orderId = undefined;\n        payPalSdkScriptLoader = createPayPalSdkScriptLoader();\n\n        loadingIndicator = new LoadingIndicator();\n        paypalIntegrationService = getPayPalIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new PayPalCommercePaymentStrategy(\n            paymentIntegrationService,\n            paypalIntegrationService,\n            payPalSdkScriptLoader,\n            loadingIndicator,\n        );\n\n        const div = document.createElement('div');\n\n        div.setAttribute('id', 'container');\n        document.body.appendChild(div);\n\n        payPalMessagesSdk = {\n            Messages: jest.fn(),\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(paypalIntegrationService, 'loadPayPalSdk').mockResolvedValue(paypalSdk);\n        jest.spyOn(paypalIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(paypalSdk);\n        jest.spyOn(payPalSdkScriptLoader, 'getPayPalMessages').mockImplementation(() =>\n            Promise.resolve(payPalMessagesSdk),\n        );\n        jest.spyOn(payPalMessagesSdk, 'Messages').mockImplementation(() => ({\n            render: paypalCommerceSdkRenderMock,\n        }));\n        jest.spyOn(paypalIntegrationService, 'createOrder').mockResolvedValue('');\n        jest.spyOn(paypalIntegrationService, 'submitPayment').mockResolvedValue();\n\n        jest.spyOn(loadingIndicator, 'show').mockReturnValue(undefined);\n        jest.spyOn(loadingIndicator, 'hide').mockReturnValue(undefined);\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation((options: PayPalButtonsOptions) => {\n            eventEmitter.on('createOrder', () => {\n                if (options.createOrder) {\n                    options.createOrder();\n                }\n            });\n\n            eventEmitter.on('onClick', () => {\n                if (options.onClick) {\n                    options.onClick(\n                        { fundingSource: paypalSdk.FUNDING.PAYPAL },\n                        {\n                            reject: jest.fn(),\n                            resolve: jest.fn(),\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onApprove', () => {\n                if (options.onApprove) {\n                    options.onApprove(\n                        { orderID: paypalOrderId },\n                        {\n                            order: {\n                                get: jest.fn(),\n                            },\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onCancel', () => {\n                if (options.onCancel) {\n                    options.onCancel();\n                }\n            });\n\n            eventEmitter.on('onError', () => {\n                if (options.onError) {\n                    options.onError(new Error());\n                }\n            });\n\n            return {\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: jest.fn(),\n            };\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        const buttonContainer = document.getElementById('container');\n\n        if (buttonContainer) {\n            buttonContainer.remove();\n        }\n\n        delete (window as PayPalHostWindow).paypal;\n    });\n\n    it('creates an instance of the PayPal Commerce payment strategy', () => {\n        expect(strategy).toBeInstanceOf(PayPalCommercePaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if options.paypalcommerce is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not continues strategy initialization if order id is available in initializationData', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalIntegrationService.loadPayPalSdk).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(defaultMethodId);\n        });\n    });\n\n    describe('#renderButton()', () => {\n        it('initializes paypal button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYPAL,\n                style: {\n                    color: 'black',\n                    height: 55,\n                    label: 'pay',\n                },\n                createOrder: expect.any(Function),\n                onClick: expect.any(Function),\n                onApprove: expect.any(Function),\n                onCancel: expect.any(Function),\n                onError: expect.any(Function),\n            });\n        });\n\n        it('does not render paypal button if it is not eligible', async () => {\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('does not render paypal button if shouldNotRenderOnInitialization option is true', async () => {\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommerce: {\n                    ...paypalCommerceOptions,\n                },\n            });\n\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('renders paypal button if onInit callback is passed', async () => {\n            const options = {\n                ...initializationOptions,\n                paypalcommerce: {\n                    ...paypalCommerceOptions,\n                    onInit: jest.fn().mockImplementation((renderButtonCallback) => {\n                        eventEmitter.on('onInit', () => {\n                            renderButtonCallback();\n                        });\n                    }),\n                },\n            };\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(options);\n\n            eventEmitter.emit('onInit');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('calls the onRenderButton callback if it is provided', async () => {\n            const options = {\n                ...initializationOptions,\n                paypalcommerce: {\n                    ...paypalCommerceOptions,\n                    onRenderButton: jest.fn(),\n                },\n            };\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(options);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(options.paypalcommerce.onRenderButton).toHaveBeenCalled();\n        });\n\n        it('renders paypal button if it is eligible', async () => {\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates paypal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommercecheckout',\n                { shouldSaveInstrument: false },\n            );\n        });\n\n        it('creates paypal order with the shouldSaveInstrument gotten from getFieldsValues callback', async () => {\n            const options = {\n                ...initializationOptions,\n                paypalcommerce: {\n                    ...paypalCommerceOptions,\n                    getFieldsValues: jest.fn().mockReturnValue({\n                        shouldSaveInstrument: true,\n                    }),\n                },\n            };\n\n            await strategy.initialize(options);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommercecheckout',\n                { shouldSaveInstrument: true },\n            );\n        });\n    });\n\n    describe('#onClick button callback', () => {\n        it('calls validation callback with provided params', async () => {\n            const onValidateMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommerce: {\n                    ...paypalCommerceOptions,\n                    onValidate: onValidateMock,\n                },\n            });\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(onValidateMock).toHaveBeenCalled();\n        });\n\n        it('triggers the indicator through the validation callback call with provided params', async () => {\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommerce: {\n                    ...paypalCommerceOptions,\n                    onValidate: jest.fn().mockImplementation((onValidationPassed) => {\n                        onValidationPassed();\n                    }),\n                },\n            });\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.show).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        it('submits form', async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommerce: {\n                    ...paypalCommerceOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n        });\n\n        it(\"doesn't hide loading indicator after form submit\", async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommerce: {\n                    ...paypalCommerceOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n            expect(loadingIndicator.hide).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onCancel');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onError button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n\n        it('calls onError callback if it is provided', async () => {\n            const onErrorMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommerce: {\n                    ...paypalCommerceOptions,\n                    onError: onErrorMock,\n                },\n            });\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws an error if payload.payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if orderId is not defined', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodInvalidError);\n            }\n        });\n\n        it('submits order', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('submits payment with provided data', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: payload.payment.methodId,\n                paymentData: {\n                    formattedPayload: {\n                        paypal_account: { order_id: paypalOrderId },\n                    },\n                    shouldSaveInstrument: false,\n                    shouldSetAsDefaultInstrument: false,\n                },\n            });\n        });\n\n        it('submits payment with provided vaulting data', async () => {\n            const { bigpayToken } = accountInstrument as AccountInstrument;\n\n            jest.spyOn(paypalIntegrationService, 'createOrder').mockResolvedValue(paypalOrderId);\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                    paymentData: {\n                        instrumentId: bigpayToken,\n                        shouldSetAsDefaultInstrument: true,\n                    },\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: payload.payment.methodId,\n                paymentData: {\n                    instrumentId: '45312',\n                    shouldSetAsDefaultInstrument: true,\n                    formattedPayload: {\n                        paypal_account: { order_id: paypalOrderId },\n                        bigpay_token: { token: bigpayToken },\n                    },\n                },\n            });\n        });\n\n        it('loads paypalsdk script if receive INSTRUMENT_DECLINED error', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            const providerError = {\n                status: 'error',\n                three_ds_result: {\n                    acs_url: null,\n                    payer_auth_request: null,\n                    merchant_data: null,\n                    callback_url: null,\n                },\n                errors: [\n                    {\n                        code: 'invalid_request_error',\n                        message:\n                            'Were experiencing difficulty processing your transaction. Please contact us or try again later.',\n                    },\n                    {\n                        code: 'transaction_rejected',\n                        message: 'Payment was declined. Please try again.',\n                        provider_error: {\n                            code: 'INSTRUMENT_DECLINED',\n                        },\n                    },\n                ],\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw providerError;\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            try {\n                await strategy.execute(payload);\n            } catch (_error: unknown) {\n                expect(paypalIntegrationService.loadPayPalSdk).toHaveBeenCalled();\n            }\n        });\n\n        it('paypalsdk script should not be loaded if the INSTRUMENT_DECLINED error is not received', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw new Error();\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            try {\n                await strategy.execute(payload);\n            } catch (_error: unknown) {\n                expect(paypalIntegrationService.loadPayPalSdk).not.toHaveBeenCalled();\n            }\n        });\n\n        it('renders paypal spb if receive INSTRUMENT_DECLINED error', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            const providerError = {\n                status: 'error',\n                three_ds_result: {\n                    acs_url: null,\n                    payer_auth_request: null,\n                    merchant_data: null,\n                    callback_url: null,\n                },\n                errors: [\n                    {\n                        code: 'invalid_request_error',\n                        message:\n                            'Were experiencing difficulty processing your transaction. Please contact us or try again later.',\n                    },\n                    {\n                        code: 'transaction_rejected',\n                        message: 'Payment was declined. Please try again.',\n                        provider_error: {\n                            code: 'INSTRUMENT_DECLINED',\n                        },\n                    },\n                ],\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw providerError;\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            try {\n                await strategy.execute(payload);\n            } catch (_error: unknown) {\n                expect(paypalSdk.Buttons).toHaveBeenCalled();\n            }\n        });\n\n        it('close paypal buttons before render new buttons after getting INSTRUMENT_DECLINED error', async () => {\n            const paypalCommerceSdkCloseMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation((options: PayPalButtonsOptions) => {\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: paypalOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                return {\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                    close: paypalCommerceSdkCloseMock,\n                };\n            });\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            const providerError = {\n                status: 'error',\n                three_ds_result: {\n                    acs_url: null,\n                    payer_auth_request: null,\n                    merchant_data: null,\n                    callback_url: null,\n                },\n                errors: [\n                    {\n                        code: 'invalid_request_error',\n                        message:\n                            'Were experiencing difficulty processing your transaction. Please contact us or try again later.',\n                    },\n                    {\n                        code: 'transaction_rejected',\n                        message: 'Payment was declined. Please try again.',\n                        provider_error: {\n                            code: 'INSTRUMENT_DECLINED',\n                        },\n                    },\n                ],\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw providerError;\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            try {\n                await strategy.execute(payload);\n            } catch (_error: unknown) {\n                expect(paypalCommerceSdkCloseMock).toHaveBeenCalled();\n            }\n        });\n\n        it('throws specific error if receive INSTRUMENT_DECLINED error', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            paypalCommerceOptions.onError = jest.fn();\n\n            const providerError = {\n                status: 'error',\n                three_ds_result: {\n                    acs_url: null,\n                    payer_auth_request: null,\n                    merchant_data: null,\n                    callback_url: null,\n                },\n                errors: [\n                    {\n                        code: 'invalid_request_error',\n                        message:\n                            'Were experiencing difficulty processing your transaction. Please contact us or try again later.',\n                    },\n                    {\n                        code: 'transaction_rejected',\n                        message: 'Payment was declined. Please try again.',\n                        provider_error: {\n                            code: 'INSTRUMENT_DECLINED',\n                        },\n                    },\n                ],\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw providerError;\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            try {\n                await strategy.execute(payload);\n            } catch (_error: unknown) {\n                expect(paypalCommerceOptions.onError).toHaveBeenCalledWith(\n                    new Error('INSTRUMENT_DECLINED'),\n                );\n            }\n        });\n\n        it('throws specific error if receive additional_action_required error', async () => {\n            Object.defineProperty(window, 'location', {\n                value: {\n                    replace: jest.fn(),\n                },\n            });\n\n            paymentMethod.initializationData.orderId = '1';\n\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            const redirectActionError = {\n                status: 'error',\n                three_ds_result: {\n                    acs_url: null,\n                    payer_auth_request: null,\n                    merchant_data: null,\n                    callback_url: null,\n                },\n                body: {\n                    additional_action_required: {\n                        type: 'offsite_redirect',\n                        data: {\n                            redirect_url: 'https://example.redirect.com',\n                        },\n                    },\n                },\n                errors: [\n                    {\n                        code: 'invalid_request_error',\n                        message:\n                            \"We're experiencing difficulty processing your transaction. Please contact us or try again later.\",\n                    },\n                ],\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(() => {\n                throw redirectActionError;\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            void strategy.execute(payload);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(window.location.replace).toHaveBeenCalledWith('https://example.redirect.com');\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('closes paypal button component on deinitialize strategy', async () => {\n            const paypalCommerceSdkCloseMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: jest.fn(),\n                close: paypalCommerceSdkCloseMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n            await strategy.deinitialize();\n\n            expect(paypalCommerceSdkCloseMock).toHaveBeenCalled();\n        });\n\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('PayPal Commerce Credit messages logic', () => {\n        const options: PaymentInitializeOptions & WithPayPalCommercePaymentInitializeOptions = {\n            methodId: defaultMethodId,\n            paypalcommerce: {\n                bannerContainerId: defaultMessageContainerId,\n            },\n        };\n\n        beforeEach(() => {\n            const div = document.createElement('div');\n\n            div.setAttribute('id', defaultMessageContainerId);\n            document.body.appendChild(div);\n\n            jest.spyOn(paypalSdk, 'Messages').mockImplementation(() => ({\n                render: paypalCommerceSdkRenderMock,\n            }));\n        });\n\n        afterEach(() => {\n            document.getElementById(defaultMessageContainerId)?.remove();\n        });\n\n        it('does not render PayPal message when paypalBNPLConfiguration is not provided', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: undefined,\n                },\n            });\n\n            await strategy.initialize(options);\n\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('does not render PayPal message when isPayPalCreditAvailable is true', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isPayPalCreditAvailable: true,\n                },\n            });\n\n            await strategy.initialize(options);\n\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('does not render PayPal message if banner is disabled in paypalBNPLConfiguration', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: [\n                        {\n                            id: 'checkout',\n                            status: false,\n                        },\n                    ],\n                },\n            });\n\n            await strategy.initialize(options);\n\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('initializes PayPal Messages component', async () => {\n            await strategy.initialize(options);\n\n            expect(payPalMessagesSdk.Messages).toHaveBeenCalledWith({\n                amount: 190,\n                placement: 'payment',\n                style: {\n                    layout: 'text',\n                    logo: {\n                        type: 'alternative',\n                    },\n                    text: {\n                        color: 'white',\n                        size: 10,\n                    },\n                },\n            });\n        });\n\n        it('does not execute PayPal button initialization logic if bannerContainerId is provided', async () => {\n            await strategy.initialize(options);\n\n            expect(paypalIntegrationService.loadPayPalSdk).not.toHaveBeenCalledWith(\n                defaultMethodId,\n            );\n        });\n\n        it('show an error if bannerContainerId is provided but does not exist as DOM element', async () => {\n            Object.defineProperty(window, 'console', {\n                value: {\n                    error: jest.fn(),\n                },\n            });\n\n            await strategy.initialize({\n                ...options,\n                paypalcommerce: {\n                    ...options.paypalcommerce,\n                    bannerContainerId: '',\n                },\n            });\n\n            expect(payPalMessagesSdk.Messages).not.toHaveBeenCalled();\n            expect(window.console.error).toHaveBeenCalledWith(\n                'Unable to create banner without valid banner container ID.',\n            );\n        });\n\n        it('renders PayPal message', async () => {\n            await strategy.initialize(options);\n\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalledWith(\n                `#${defaultMessageContainerId}`,\n            );\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce/paypal-commerce-payment-strategy.ts",
    "content": "import {\n    HostedInstrument,\n    InvalidArgumentError,\n    isHostedInstrumentLike,\n    isVaultedInstrument,\n    OrderFinalizationNotRequiredError,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentInstrumentPayload,\n    PaymentIntegrationService,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    ApproveCallbackPayload,\n    ClickCallbackActions,\n    getPaypalMessagesStylesFromBNPLConfig,\n    isPaypalProviderError,\n    isRedirectActionError,\n    MessagingOptions,\n    PayPalBNPLConfigurationItem,\n    PayPalButtons,\n    PayPalButtonsOptions,\n    PayPalInitializationData,\n    PayPalIntegrationService,\n    PayPalMessagesSdk,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\nimport { isBaseInstrument } from '@bigcommerce/checkout-sdk/utility';\n\nimport PayPalCommercePaymentInitializeOptions, {\n    WithPayPalCommercePaymentInitializeOptions,\n} from './paypal-commerce-payment-initialize-options';\n\nexport default class PayPalCommercePaymentStrategy implements PaymentStrategy {\n    private loadingIndicatorContainer?: string;\n    private orderId?: string;\n    private paypalButton?: PayPalButtons;\n    private paypalcommerce?: PayPalCommercePaymentInitializeOptions;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalIntegrationService: PayPalIntegrationService,\n        private payPalSdkScriptLoader: PayPalSdkScriptLoader,\n        private loadingIndicator: LoadingIndicator,\n    ) {}\n\n    async initialize(\n        options?: PaymentInitializeOptions & WithPayPalCommercePaymentInitializeOptions,\n    ): Promise<void> {\n        const { methodId, paypalcommerce } = options || {};\n\n        this.paypalcommerce = paypalcommerce;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!paypalcommerce) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.`,\n            );\n        }\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n        const { container, bannerContainerId } = paypalcommerce;\n\n        const {\n            orderId,\n            paypalBNPLConfiguration = [],\n            isPayPalCreditAvailable,\n        } = paymentMethod.initializationData || {};\n\n        if (bannerContainerId !== undefined) {\n            if (!document.getElementById(bannerContainerId)) {\n                // eslint-disable-next-line no-console\n                console.error('Unable to create banner without valid banner container ID.');\n\n                return;\n            }\n\n            const bannerConfiguration = paypalBNPLConfiguration?.find(\n                ({ id }) => id === 'checkout',\n            );\n\n            if (isPayPalCreditAvailable || !bannerConfiguration?.status) {\n                return;\n            }\n\n            const paypalMessages = await this.payPalSdkScriptLoader.getPayPalMessages(\n                paymentMethod,\n                state.getCartOrThrow().currency.code,\n                state.getLocale(),\n            );\n\n            if (!paypalMessages || typeof paypalMessages?.Messages !== 'function') {\n                console.error(\n                    '[BC PayPalCommerce PayLater]: banner could not be rendered, due to issues with loading PayPal SDK',\n                );\n\n                return;\n            }\n\n            return this.renderMessages(paypalMessages, bannerContainerId, bannerConfiguration);\n        }\n\n        // Info:\n        // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n        // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n        // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n        if (orderId) {\n            this.orderId = paymentMethod.initializationData?.orderId;\n\n            return;\n        }\n\n        this.loadingIndicatorContainer = container?.split('#')[1];\n\n        await this.paypalIntegrationService.loadPayPalSdk(methodId);\n\n        if (paypalcommerce.onInit && typeof paypalcommerce.onInit === 'function') {\n            paypalcommerce.onInit(() => this.renderButton(methodId, paypalcommerce));\n        }\n\n        if (\n            paypalcommerce.shouldRenderPayPalButtonOnInitialization === undefined ||\n            paypalcommerce.shouldRenderPayPalButtonOnInitialization\n        ) {\n            this.renderButton(methodId, paypalcommerce);\n        }\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n        const { onError } = this.paypalcommerce || {};\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const { methodId, paymentData } = payment;\n\n        if (this.isPayPalVaultedInstrumentPaymentData(paymentData) && !this.orderId) {\n            this.orderId = await this.createOrder();\n        }\n\n        if (!this.orderId) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        const paymentPayload = this.isPayPalVaultedInstrumentPaymentData(paymentData)\n            ? this.prepareVaultedInstrumentPaymentPayload(methodId, this.orderId, paymentData)\n            : this.preparePaymentPayload(methodId, this.orderId, paymentData);\n\n        try {\n            await this.paymentIntegrationService.submitOrder(order, options);\n            await this.paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error: unknown) {\n            if (isRedirectActionError(error)) {\n                const redirectUrl = error.body.additional_action_required?.data?.redirect_url;\n\n                return new Promise(() => window.location.replace(redirectUrl));\n            }\n\n            if (this.isProviderError(error)) {\n                await this.paypalIntegrationService.loadPayPalSdk(payment.methodId);\n\n                await new Promise((_resolve, reject) => {\n                    if (this.paypalcommerce) {\n                        this.paypalButton?.close();\n                        this.renderButton(payment.methodId, this.paypalcommerce);\n                        this.handleError(new Error('INSTRUMENT_DECLINED'), onError);\n                    }\n\n                    reject();\n                });\n            }\n\n            this.handleError(error, onError);\n\n            return Promise.reject();\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this.orderId = undefined;\n\n        this.paypalButton?.close();\n\n        return Promise.resolve();\n    }\n\n    private prepareVaultedInstrumentPaymentPayload(\n        methodId: string,\n        paypalOrderId: string,\n        paymentData: VaultedInstrument & HostedInstrument,\n    ): Payment {\n        const { instrumentId, shouldSetAsDefaultInstrument } = paymentData;\n\n        const shouldConfirmInstrument = !this.isTrustedVaultingFlow(paymentData);\n\n        if (shouldConfirmInstrument) {\n            return {\n                methodId,\n                paymentData: {\n                    shouldSaveInstrument: shouldConfirmInstrument,\n                    shouldSetAsDefaultInstrument,\n                    formattedPayload: {\n                        paypal_account: {\n                            order_id: paypalOrderId,\n                        },\n                    },\n                },\n            };\n        }\n\n        return {\n            methodId,\n            paymentData: {\n                instrumentId,\n                shouldSetAsDefaultInstrument,\n                formattedPayload: {\n                    paypal_account: {\n                        order_id: paypalOrderId,\n                    },\n                    bigpay_token: {\n                        token: instrumentId,\n                    },\n                },\n            },\n        };\n    }\n\n    private preparePaymentPayload(\n        methodId: string,\n        paypalOrderId: string,\n        paymentData: OrderPaymentRequestBody['paymentData'],\n    ): Payment {\n        const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n            isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n        return {\n            methodId,\n            paymentData: {\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n                formattedPayload: {\n                    paypal_account: {\n                        order_id: paypalOrderId,\n                    },\n                },\n            },\n        };\n    }\n\n    /**\n     *\n     * Button methods/callbacks\n     *\n     * */\n    private renderButton(\n        methodId: string,\n        paypalcommerce: PayPalCommercePaymentInitializeOptions,\n    ): void {\n        const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n        const { paymentButtonStyles } = paymentMethod.initializationData || {};\n        const { checkoutPaymentButtonStyles } = paymentButtonStyles || {};\n        const { container, onError, onRenderButton, onValidate, submitForm } = paypalcommerce;\n\n        if (!container) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"container\" argument is not provided.',\n            );\n        }\n\n        const containerId = this.getSmartButtonContainerId(container);\n        const smartButtonContainer = document.getElementById(containerId);\n\n        if (!smartButtonContainer) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because element with id ${containerId} does not exist.`,\n            );\n        }\n\n        const buttonOptions: PayPalButtonsOptions = {\n            fundingSource: paypalSdk.FUNDING.PAYPAL,\n            style: this.paypalIntegrationService.getValidButtonStyle(checkoutPaymentButtonStyles),\n            createOrder: () => this.createOrder(),\n            onClick: (_, actions) => this.handleClick(actions, onValidate),\n            onApprove: (data) => this.handleApprove(data, submitForm),\n            onError: (error) => this.handleError(error, onError),\n            onCancel: () => this.toggleLoadingIndicator(false),\n        };\n\n        this.paypalButton = paypalSdk.Buttons(buttonOptions);\n\n        if (!this.paypalButton.isEligible()) {\n            return;\n        }\n\n        if (onRenderButton && typeof onRenderButton === 'function') {\n            onRenderButton();\n        }\n\n        this.paypalButton.render(container);\n    }\n\n    private async handleClick(\n        actions: ClickCallbackActions,\n        onValidate: PayPalCommercePaymentInitializeOptions['onValidate'],\n    ): Promise<void> {\n        const { resolve, reject } = actions;\n\n        const onValidationPassed = () => {\n            this.toggleLoadingIndicator(true);\n\n            return resolve();\n        };\n\n        return onValidate?.(onValidationPassed, reject);\n    }\n\n    private handleApprove(\n        { orderID }: ApproveCallbackPayload,\n        submitForm: PayPalCommercePaymentInitializeOptions['submitForm'],\n    ): void {\n        this.orderId = orderID;\n\n        submitForm?.();\n    }\n\n    private handleError(\n        error: unknown,\n        onError: PayPalCommercePaymentInitializeOptions['onError'],\n    ): void {\n        this.toggleLoadingIndicator(false);\n\n        if (onError && typeof onError === 'function') {\n            onError(error);\n        }\n    }\n\n    private async createOrder(): Promise<string> {\n        const fieldsValues = this.getFieldsValues();\n\n        return this.paypalIntegrationService.createOrder('paypalcommercecheckout', {\n            shouldSaveInstrument: fieldsValues?.shouldSaveInstrument || false,\n        });\n    }\n\n    /**\n     *\n     * Vaulting flow methods\n     *\n     * */\n    private getFieldsValues(): HostedInstrument | undefined {\n        const { getFieldsValues } = this.paypalcommerce || {};\n\n        return typeof getFieldsValues === 'function' ? getFieldsValues() : undefined;\n    }\n\n    private isTrustedVaultingFlow(paymentData?: PaymentInstrumentPayload): boolean {\n        if (paymentData && isVaultedInstrument(paymentData)) {\n            const state = this.paymentIntegrationService.getState();\n\n            const instruments = state.getInstruments();\n            const findInstrument = instruments?.find(\n                (instrument) =>\n                    isBaseInstrument(instrument) &&\n                    instrument.bigpayToken === paymentData.instrumentId,\n            );\n            const trustedShippingAddress = isBaseInstrument(findInstrument)\n                ? findInstrument.trustedShippingAddress\n                : {};\n\n            return !!trustedShippingAddress;\n        }\n\n        return false;\n    }\n\n    /**\n     *\n     * Loading Indicator methods\n     *\n     * */\n    private toggleLoadingIndicator(isLoading: boolean): void {\n        if (isLoading && this.loadingIndicatorContainer) {\n            this.loadingIndicator.show(this.loadingIndicatorContainer);\n        } else {\n            this.loadingIndicator.hide();\n        }\n    }\n\n    /**\n     *\n     * Guards\n     *\n     */\n    private isPayPalVaultedInstrumentPaymentData(\n        paymentData?: PaymentInstrumentPayload,\n    ): paymentData is VaultedInstrument & HostedInstrument {\n        return (\n            !!paymentData && isVaultedInstrument(paymentData) && isHostedInstrumentLike(paymentData)\n        );\n    }\n\n    /**\n     *\n     * Render Pay Later Messages\n     *\n     * */\n    private renderMessages(\n        paypalMessages: PayPalMessagesSdk,\n        bannerContainerId: string,\n        bannerConfiguration: PayPalBNPLConfigurationItem,\n    ): void {\n        const checkout = this.paymentIntegrationService.getState().getCheckoutOrThrow();\n\n        const paypalMessagesOptions: MessagingOptions = {\n            amount: checkout.outstandingBalance,\n            placement: 'payment',\n            style: getPaypalMessagesStylesFromBNPLConfig(bannerConfiguration),\n        };\n\n        paypalMessages.Messages(paypalMessagesOptions).render(`#${bannerContainerId}`);\n    }\n\n    /**\n     *\n     * Error handling\n     *\n     */\n    private isProviderError(error: unknown): boolean {\n        if (isPaypalProviderError(error)) {\n            const paypalProviderError = error?.errors?.filter((e) => e.provider_error) || [];\n\n            return paypalProviderError[0]?.provider_error?.code === 'INSTRUMENT_DECLINED';\n        }\n\n        return false;\n    }\n\n    private getSmartButtonContainerId(container: string) {\n        return container.split('#')[1] ?? container;\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-alternative-methods/create-paypal-commerce-alternative-methods-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPayPalCommerceAlternativeMethodsPaymentStrategy from './create-paypal-commerce-alternative-methods-payment-strategy';\nimport PayPalCommerceAlternativeMethodsPaymentStrategy from './paypal-commerce-alternative-methods-payment-strategy';\n\ndescribe('createPayPalCommerceAlternativeMethodsPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce alternative methods payment strategy', () => {\n        const strategy =\n            createPayPalCommerceAlternativeMethodsPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PayPalCommerceAlternativeMethodsPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-alternative-methods/create-paypal-commerce-alternative-methods-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    createPayPalIntegrationService,\n    createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { LOADING_INDICATOR_STYLES } from '../paypal-commerce-constants';\n\nimport PayPalCommerceAlternativeMethodsPaymentStrategy from './paypal-commerce-alternative-methods-payment-strategy';\n\nconst createPayPalCommerceAlternativeMethodsPaymentStrategy: PaymentStrategyFactory<\n    PayPalCommerceAlternativeMethodsPaymentStrategy\n> = (paymentIntegrationService) =>\n    new PayPalCommerceAlternativeMethodsPaymentStrategy(\n        paymentIntegrationService,\n        createPayPalIntegrationService(paymentIntegrationService),\n        createPayPalSdkScriptLoader(),\n        new LoadingIndicator({\n            containerStyles: LOADING_INDICATOR_STYLES,\n        }),\n    );\n\nexport default toResolvableModule(createPayPalCommerceAlternativeMethodsPaymentStrategy, [\n    { gateway: 'paypalcommercealternativemethods' },\n]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-alternative-methods/paypal-commerce-alternative-methods-payment-initialize-options.ts",
    "content": "import { InitCallbackActions, PayPalCommerceFieldsStyleOptions } from '../paypal-commerce-types';\n\n/**\n * A set of options that are required to initialize the PayPal Commerce payment\n * method for presenting its PayPal button.\n *\n * Please note that the minimum version of checkout-sdk is 1.100\n *\n * Also, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\n * ```html\n * <!-- This is where the PayPal button will be inserted -->\n * <div id=\"container\"></div>\n * <!-- This is where the PayPal alternative payment methods fields will be inserted.  -->\n * <div id=\"apm-fields-container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     gatewayId: 'paypalcommercealternativemethods',\n *     methodId: 'sepa',\n *     paypalcommercealternativemethods: {\n *         container: '#container',\n *         apmFieldsContainer: '#apm-fields-container',\n *         apmFieldsStyles: {\n *             base: {\n *                 backgroundColor: 'transparent',\n *             },\n *             input: {\n *                 backgroundColor: 'white',\n *                 fontSize: '1rem',\n *                 color: '#333',\n *                 borderColor: '#d9d9d9',\n *                 borderRadius: '4px',\n *                 borderWidth: '1px',\n *                 padding: '1rem',\n *             },\n *             invalid: {\n *                 color: '#ed6a6a',\n *             },\n *             active: {\n *                 color: '#4496f6',\n *             },\n *         },\n *         clientId: 'YOUR_CLIENT_ID',\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\n *         submitForm: () => {\n *         // Example function\n *             this.submitOrder(\n *                {\n *                   payment: { methodId: 'paypalcommercealternativemethods', }\n *               }\n *            );\n *         },\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\n *         onValidate: (resolve, reject) => {\n *         // Example function\n *             const isValid = this.validatePaymentForm();\n *             if (isValid) {\n *                 return resolve();\n *             }\n *             return reject();\n *         },\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\n *         onRenderButton: () => {\n *         // Example function\n *             this.hidePaymentSubmitButton();\n *         }\n *     },\n * });\n * ```\n */\nexport default interface PayPalCommerceAlternativeMethodsPaymentOptions {\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    container: string;\n\n    /**\n     * The CSS selector of a container where the alternative payment methods fields widget should be inserted into.\n     * It's necessary to specify this parameter when using Alternative Payment Methods.\n     * Without it alternative payment methods will not work.\n     */\n    apmFieldsContainer?: string;\n\n    /**\n     * Object with styles to customize alternative payment methods fields.\n     */\n    apmFieldsStyles?: PayPalCommerceFieldsStyleOptions;\n\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: Error | unknown): void;\n\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n\n    /**\n     * A callback that gets called when a buyer click on Smart Payment Button\n     * and should validate payment form.\n     *\n     * @param resolve - A function, that gets called if form is valid.\n     * @param reject - A function, that gets called if form is not valid.\n     *\n     * @returns reject() or resolve()\n     */\n    onValidate(resolve: () => void, reject: () => void): Promise<void>;\n\n    /**\n     * A callback for submitting payment form that gets called\n     * when buyer approved PayPal account.\n     */\n    submitForm(): void;\n\n    /**\n     * A callback that gets called\n     * when Smart Payment Button is initialized.\n     */\n    onInitButton(actions: InitCallbackActions): Promise<void>;\n}\n\nexport interface WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions {\n    paypalcommerce?: PayPalCommerceAlternativeMethodsPaymentOptions; // FIXME: this option is deprecated\n    paypalcommercealternativemethods?: PayPalCommerceAlternativeMethodsPaymentOptions;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-alternative-methods/paypal-commerce-alternative-methods-payment-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    BillingAddress,\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodInvalidError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getConfig,\n    getOrder,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    createPayPalSdkScriptLoader,\n    getPayPalIntegrationServiceMock,\n    getPayPalPaymentMethod,\n    getPayPalSDKMock,\n    NonInstantAlternativePaymentMethods,\n    PayPalButtonsOptions,\n    PayPalHostWindow,\n    PayPalIntegrationService,\n    PayPalOrderStatus,\n    PayPalSDK,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceAlternativeMethodsPaymentOptions from './paypal-commerce-alternative-methods-payment-initialize-options';\nimport PayPalCommerceAlternativeMethodsPaymentStrategy from './paypal-commerce-alternative-methods-payment-strategy';\n\n// TODO: CHECKOUT-7766\ndescribe('PayPalCommerceAlternativeMethodsPaymentStrategy', () => {\n    let billingAddress: BillingAddress;\n    let eventEmitter: EventEmitter;\n    let loadingIndicator: LoadingIndicator;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalIntegrationService: PayPalIntegrationService;\n    let paypalSdk: PayPalSDK;\n    let strategy: PayPalCommerceAlternativeMethodsPaymentStrategy;\n    let paypalSdkScriptLoader: PayPalSdkScriptLoader;\n\n    const paypalOrderId = 'paypal123';\n\n    const defaultMethodId = 'sepa';\n    const defaultGatewayId = 'paypalcommercealternativemethods';\n    const defaultContainerId = '#container';\n    const defaultApmFieldsContainerId = '#container';\n\n    const paypalCommerceAlternativeMethodsOptions: PayPalCommerceAlternativeMethodsPaymentOptions =\n        {\n            container: defaultContainerId,\n            apmFieldsContainer: defaultApmFieldsContainerId,\n            onInitButton: jest.fn(),\n            onValidate: jest.fn(),\n            submitForm: jest.fn(),\n        };\n\n    const initializationOptions: PaymentInitializeOptions = {\n        methodId: defaultMethodId,\n        gatewayId: defaultGatewayId,\n        paypalcommercealternativemethods: paypalCommerceAlternativeMethodsOptions,\n    };\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        billingAddress = getBillingAddress();\n        paypalSdk = getPayPalSDKMock();\n        paymentMethod = getPayPalPaymentMethod();\n        paymentMethod.id = defaultGatewayId;\n        paymentMethod.initializationData.orderId = undefined;\n\n        loadingIndicator = new LoadingIndicator();\n        paypalIntegrationService = getPayPalIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paypalSdkScriptLoader = createPayPalSdkScriptLoader();\n\n        strategy = new PayPalCommerceAlternativeMethodsPaymentStrategy(\n            paymentIntegrationService,\n            paypalIntegrationService,\n            paypalSdkScriptLoader,\n            loadingIndicator,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getBillingAddressOrThrow',\n        ).mockReturnValue(billingAddress);\n        jest.spyOn(paymentIntegrationService.getState(), 'getOrder').mockReturnValue(getOrder());\n        jest.spyOn(paymentIntegrationService.getState(), 'getLocale').mockReturnValue('en-US');\n\n        jest.spyOn(paypalSdkScriptLoader, 'getPayPalApmsSdk').mockResolvedValue(paypalSdk);\n        jest.spyOn(paypalIntegrationService, 'createOrder').mockResolvedValue(paypalOrderId);\n        jest.spyOn(paypalIntegrationService, 'submitPayment').mockResolvedValue();\n        jest.spyOn(paypalIntegrationService, 'getOrderStatus').mockResolvedValue(\n            PayPalOrderStatus.Approved,\n        );\n        jest.spyOn(paypalIntegrationService, 'updateOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(loadingIndicator, 'show').mockReturnValue(undefined);\n        jest.spyOn(loadingIndicator, 'hide').mockReturnValue(undefined);\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation((options: PayPalButtonsOptions) => {\n            eventEmitter.on('createOrder', () => {\n                if (options.createOrder) {\n                    options.createOrder();\n                }\n            });\n\n            eventEmitter.on('onInit', () => {\n                if (options.onInit) {\n                    options.onInit(\n                        { correlationID: defaultMethodId },\n                        {\n                            disable: jest.fn(),\n                            enable: jest.fn(),\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onClick', () => {\n                if (options.onClick) {\n                    options.onClick(\n                        { fundingSource: defaultMethodId },\n                        {\n                            reject: jest.fn(),\n                            resolve: jest.fn(),\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onApprove', () => {\n                if (options.onApprove) {\n                    options.onApprove(\n                        { orderID: paypalOrderId },\n                        {\n                            order: {\n                                get: jest.fn(),\n                            },\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onCancel', () => {\n                if (options.onCancel) {\n                    options.onCancel();\n                }\n            });\n\n            eventEmitter.on('onError', () => {\n                if (options.onError) {\n                    options.onError(new Error());\n                }\n            });\n\n            return {\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: jest.fn(),\n            };\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as PayPalHostWindow).paypal;\n    });\n\n    it('creates an instance of the PayPal Commerce Alternative Methods payment strategy', () => {\n        expect(strategy).toBeInstanceOf(PayPalCommerceAlternativeMethodsPaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if gatewayId is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if options.paypalcommercealternativemethods or options.paypalcommerce is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n                gatewayId: defaultGatewayId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not continues strategy initialization if order id is available in initializationData', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkScriptLoader.getPayPalApmsSdk).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkScriptLoader.getPayPalApmsSdk).toHaveBeenCalledWith(\n                paymentMethod,\n                'USD',\n                'en-US',\n            );\n        });\n    });\n\n    describe('#renderButton()', () => {\n        it('initializes paypal button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: defaultMethodId,\n                style: {\n                    color: 'black',\n                    height: 55,\n                    label: 'pay',\n                },\n                onInit: expect.any(Function),\n                onClick: expect.any(Function),\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onCancel: expect.any(Function),\n                onError: expect.any(Function),\n            });\n        });\n\n        it('does not render paypal button if it is not eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('renders paypal button if it is eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates paypal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommercealternativemethodscheckout',\n            );\n        });\n\n        it('calls validation callback with provided params', async () => {\n            const onValidateMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: NonInstantAlternativePaymentMethods.OXXO,\n                paypalcommercealternativemethods: {\n                    ...paypalCommerceAlternativeMethodsOptions,\n                    onValidate: onValidateMock,\n                },\n            });\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(onValidateMock).toHaveBeenCalled();\n        });\n\n        it('patches the order for non instant payment methods', async () => {\n            const nonInstantMethodId = 'oxxo';\n\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: nonInstantMethodId,\n            });\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommercealternativemethodscheckout',\n            );\n\n            expect(paypalIntegrationService.updateOrder).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(paypalIntegrationService.submitPayment).toHaveBeenCalledWith(\n                nonInstantMethodId,\n                paypalOrderId,\n                defaultGatewayId,\n            );\n        });\n\n        it('initiate an order update request if the polling is disabled and the payment method is IDEAL', async () => {\n            const storeConfigMock = {\n                ...getConfig().storeConfig,\n                checkoutSettings: {\n                    ...getConfig().storeConfig.checkoutSettings,\n                    features: {\n                        'PAYPAL-5431.order_approved_processing': true,\n                    },\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue(storeConfigMock);\n\n            const nonInstantMethodId = 'ideal';\n\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: nonInstantMethodId,\n            });\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommercealternativemethodscheckout',\n            );\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(paypalIntegrationService.updateOrder).toHaveBeenCalledWith(\n                'paypalcommercealternativemethods',\n                nonInstantMethodId,\n                295,\n            );\n            expect(paypalIntegrationService.submitPayment).toHaveBeenCalledWith(\n                nonInstantMethodId,\n                paypalOrderId,\n                defaultGatewayId,\n            );\n        });\n    });\n\n    describe('#onClick button callback', () => {\n        it('calls validation callback with provided params', async () => {\n            const onValidateMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: NonInstantAlternativePaymentMethods.OXXO,\n                paypalcommercealternativemethods: {\n                    ...paypalCommerceAlternativeMethodsOptions,\n                    onValidate: onValidateMock,\n                },\n            });\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(onValidateMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onInit button callback', () => {\n        it('calls validation callback with provided params', async () => {\n            const onInitButtonMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: NonInstantAlternativePaymentMethods.OXXO,\n                paypalcommercealternativemethods: {\n                    ...paypalCommerceAlternativeMethodsOptions,\n                    onInitButton: onInitButtonMock,\n                },\n            });\n\n            eventEmitter.emit('onInit');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(onInitButtonMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        it('submits form', async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercealternativemethods: {\n                    ...paypalCommerceAlternativeMethodsOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n        });\n\n        it('does not hide loading indicator after form submit', async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercealternativemethods: {\n                    ...paypalCommerceAlternativeMethodsOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n            expect(loadingIndicator.hide).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onCancel');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onError button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n\n        it('calls onError callback if it is provided', async () => {\n            const onErrorMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercealternativemethods: {\n                    ...paypalCommerceAlternativeMethodsOptions,\n                    onError: onErrorMock,\n                },\n            });\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#renderFields()', () => {\n        it('throws an error if apmFieldsContainer is not provided', async () => {\n            paymentMethod.initializationData.shouldRenderFields = true;\n\n            const options = {\n                methodId: defaultMethodId,\n                gatewayId: defaultGatewayId,\n                paypalcommercealternativemethods: {\n                    ...paypalCommerceAlternativeMethodsOptions,\n                    apmFieldsContainer: undefined,\n                },\n            };\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('renders apm payment fields', async () => {\n            const paymentFieldsRenderMock = jest.fn();\n            const fieldContainer = document.createElement('div');\n\n            fieldContainer.id = defaultApmFieldsContainerId.split('#')[1];\n            document.body.appendChild(fieldContainer);\n\n            jest.spyOn(paypalSdk, 'PaymentFields').mockImplementation(() => ({\n                render: paymentFieldsRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.PaymentFields).toHaveBeenCalledWith({\n                fundingSource: defaultMethodId,\n                style: {},\n                fields: {\n                    name: {\n                        value: `${billingAddress.firstName} ${billingAddress.lastName}`,\n                    },\n                    email: {\n                        value: billingAddress.email,\n                    },\n                },\n            });\n            expect(paymentFieldsRenderMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws an error if payload.payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if orderId is not defined', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                    gatewayId: defaultGatewayId,\n                },\n            };\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodInvalidError);\n            }\n        });\n\n        it('does not submit order for non instant payment methods', async () => {\n            const payload = {\n                payment: {\n                    methodId: NonInstantAlternativePaymentMethods.OXXO,\n                    gatewayId: defaultGatewayId,\n                },\n            };\n\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: NonInstantAlternativePaymentMethods.OXXO,\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n        });\n\n        it('submits order for instant payment methods', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                    gatewayId: defaultGatewayId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('do not submit order for IDEAL when exp is enabled', async () => {\n            const storeConfigMock = {\n                ...getConfig().storeConfig,\n                checkoutSettings: {\n                    ...getConfig().storeConfig.checkoutSettings,\n                    features: {\n                        'PAYPAL-5431.order_approved_processing': true,\n                    },\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue(storeConfigMock);\n\n            const payload = {\n                payment: {\n                    methodId: 'ideal',\n                    gatewayId: defaultGatewayId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n        });\n\n        it('submits payment with provided data', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                    gatewayId: defaultGatewayId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paypalIntegrationService.submitPayment).toHaveBeenCalledWith(\n                payload.payment.methodId,\n                paypalOrderId,\n                defaultGatewayId,\n            );\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('closes paypal button component on deinitialize strategy', async () => {\n            const paypalCommerceSdkCloseMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: jest.fn(),\n                close: paypalCommerceSdkCloseMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n            await strategy.deinitialize();\n\n            expect(paypalCommerceSdkCloseMock).toHaveBeenCalled();\n        });\n\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#polling mechanism', () => {\n        beforeEach(() => {\n            const storeConfigMock = {\n                ...getConfig().storeConfig,\n                checkoutSettings: {\n                    ...getConfig().storeConfig.checkoutSettings,\n                    features: {\n                        'PAYPAL-5431.order_approved_processing': false,\n                    },\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.resolve(paymentIntegrationService.getState()),\n            );\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue(storeConfigMock);\n        });\n\n        it('initialize polling mechanism', async () => {\n            jest.spyOn(paypalIntegrationService, 'getOrderStatus').mockResolvedValue(\n                PayPalOrderStatus.Approved,\n            );\n\n            const payload = {\n                payment: {\n                    methodId: 'ideal',\n                    gatewayId: 'paypalcommercealternativemethods',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await strategy.execute(payload);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.getOrderStatus).toHaveBeenCalled();\n        });\n\n        it('request order status with proper payload', async () => {\n            jest.spyOn(paypalIntegrationService, 'getOrderStatus').mockResolvedValue(\n                PayPalOrderStatus.Approved,\n            );\n\n            const payload = {\n                payment: {\n                    methodId: 'ideal',\n                    gatewayId: 'paypalcommercealternativemethods',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await strategy.execute(payload);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.getOrderStatus).toHaveBeenCalledWith(\n                'paypalcommercealternativemethods',\n            );\n        });\n\n        it('deinitialize polling mechanism', async () => {\n            jest.spyOn(paypalIntegrationService, 'getOrderStatus').mockResolvedValue(\n                PayPalOrderStatus.Approved,\n            );\n\n            const payload = {\n                payment: {\n                    methodId: 'ideal',\n                    gatewayId: 'paypalcommercealternativemethods',\n                },\n            };\n\n            jest.spyOn(global, 'clearTimeout');\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await strategy.execute(payload);\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.deinitialize();\n\n            expect(clearTimeout).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-alternative-methods/paypal-commerce-alternative-methods-payment-strategy.ts",
    "content": "import { noop } from 'lodash';\n\nimport {\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodClientUnavailableError,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    TimeoutError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    PayPalApmSdk,\n    PayPalInitializationData,\n    PayPalIntegrationService,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\nimport { isExperimentEnabled } from '@bigcommerce/checkout-sdk/utility';\n\nimport {\n    ApproveCallbackPayload,\n    NonInstantAlternativePaymentMethods,\n    PayPalCommerceButtons,\n    PayPalCommerceButtonsOptions,\n    PayPalCommerceInitializationData,\n    PayPalOrderStatus,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceAlternativeMethodsPaymentOptions, {\n    WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions,\n} from './paypal-commerce-alternative-methods-payment-initialize-options';\n\nconst POLLING_INTERVAL = 3000;\nconst MAX_POLLING_TIME = 300000;\n\nexport default class PayPalCommerceAlternativeMethodsPaymentStrategy implements PaymentStrategy {\n    private loadingIndicatorContainer?: string;\n    private orderId?: string;\n    private paypalButton?: PayPalCommerceButtons;\n    private paypalApms?: PayPalApmSdk;\n    private pollingTimer = 0;\n    private stopPolling = noop;\n    private isOrderApprovedProcessing = false;\n    private paypalcommercealternativemethods?: PayPalCommerceAlternativeMethodsPaymentOptions;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalCommerceIntegrationService: PayPalIntegrationService,\n        private paypalSdkScriptLoader: PayPalSdkScriptLoader,\n        private loadingIndicator: LoadingIndicator,\n        private pollingInterval: number = POLLING_INTERVAL,\n        private maxPollingIntervalTime: number = MAX_POLLING_TIME,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions &\n            WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions,\n    ): Promise<void> {\n        const {\n            gatewayId,\n            methodId,\n            paypalcommerce, // FIXME: this option is deprecated\n            paypalcommercealternativemethods,\n        } = options;\n        const paypalOptions = paypalcommercealternativemethods || paypalcommerce;\n\n        this.paypalcommercealternativemethods = paypalcommercealternativemethods;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!gatewayId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.gatewayId\" argument is not provided.',\n            );\n        }\n\n        if (!paypalOptions) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument is not provided.`,\n            );\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(\n            methodId,\n            gatewayId,\n        );\n        const { orderId, shouldRenderFields } = paymentMethod.initializationData || {};\n        const features = state.getStoreConfigOrThrow().checkoutSettings.features;\n\n        this.isOrderApprovedProcessing = isExperimentEnabled(\n            features,\n            'PAYPAL-5431.order_approved_processing',\n            false,\n        );\n\n        // Info:\n        // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n        // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n        // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n        if (orderId) {\n            this.orderId = orderId;\n\n            return;\n        }\n\n        this.paypalApms = await this.paypalSdkScriptLoader.getPayPalApmsSdk(\n            paymentMethod,\n            state.getCartOrThrow().currency.code,\n            state.getLocale(),\n        );\n\n        this.loadingIndicatorContainer = paypalOptions.container.split('#')[1];\n\n        this.renderButton(methodId, gatewayId, paypalOptions);\n\n        if (shouldRenderFields) {\n            this.renderFields(methodId, paypalOptions);\n        }\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const { methodId, gatewayId } = payment;\n\n        if (!this.orderId) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        if (!this.isOrderApprovedProcessing && methodId === 'ideal') {\n            await new Promise((resolve, reject) => {\n                void this.initializePollingMechanism(methodId, resolve, reject, gatewayId);\n            });\n        }\n\n        if (\n            !this.isNonInstantPaymentMethod(methodId) ||\n            (methodId === NonInstantAlternativePaymentMethods.IDEAL &&\n                !this.isOrderApprovedProcessing)\n        ) {\n            await this.paymentIntegrationService.submitOrder(order, options);\n        }\n\n        await this.paypalCommerceIntegrationService.submitPayment(\n            methodId,\n            this.orderId,\n            gatewayId,\n        );\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this.orderId = undefined;\n\n        if (!this.isOrderApprovedProcessing) {\n            this.resetPollingMechanism();\n        }\n\n        this.paypalButton?.close();\n\n        return Promise.resolve();\n    }\n\n    /**\n     *\n     * Polling mechanism\n     *\n     *\n     * */\n    private async initializePollingMechanism(\n        methodId: string,\n        resolvePromise: (value?: unknown) => void,\n        rejectPromise: (value?: unknown) => void,\n        gatewayId?: string,\n    ): Promise<void> {\n        await new Promise<void>((resolve, reject) => {\n            const timeout = setTimeout(resolve, this.pollingInterval);\n\n            this.stopPolling = () => {\n                clearTimeout(timeout);\n                this.toggleLoadingIndicator(false);\n\n                return reject();\n            };\n        });\n\n        try {\n            this.pollingTimer += this.pollingInterval;\n\n            const orderStatus = await this.paypalCommerceIntegrationService.getOrderStatus(\n                gatewayId ?? 'paypalcommerce',\n            );\n\n            const isOrderApproved = orderStatus === PayPalOrderStatus.Approved;\n            const isPollingError = orderStatus === PayPalOrderStatus.PollingError;\n\n            if (isOrderApproved) {\n                this.deinitializePollingMechanism();\n\n                return resolvePromise();\n            }\n\n            if (isPollingError) {\n                return rejectPromise();\n            }\n\n            if (!isOrderApproved && this.pollingTimer < this.maxPollingIntervalTime) {\n                return await this.initializePollingMechanism(\n                    methodId,\n                    resolvePromise,\n                    rejectPromise,\n                    gatewayId,\n                );\n            }\n\n            await this.reinitializeStrategy({\n                methodId,\n                gatewayId,\n                paypalcommercealternativemethods: this.paypalcommercealternativemethods,\n            });\n\n            this.handleError(new TimeoutError());\n        } catch (error) {\n            rejectPromise();\n        }\n    }\n\n    private deinitializePollingMechanism(): void {\n        this.stopPolling();\n        this.pollingTimer = 0;\n    }\n\n    private resetPollingMechanism(): void {\n        this.deinitializePollingMechanism();\n    }\n\n    private async reinitializeStrategy(\n        options: PaymentInitializeOptions &\n            WithPayPalCommerceAlternativeMethodsPaymentInitializeOptions,\n    ) {\n        await this.deinitialize();\n        await this.initialize(options);\n    }\n\n    private handleError(error: unknown) {\n        const { onError } = this.paypalcommercealternativemethods || {};\n\n        if (!this.isOrderApprovedProcessing) {\n            this.resetPollingMechanism();\n        }\n\n        this.toggleLoadingIndicator(false);\n\n        if (onError && typeof onError === 'function') {\n            onError(error);\n        }\n    }\n\n    /**\n     *\n     * Button methods/callbacks\n     *\n     * */\n    private renderButton(\n        methodId: string,\n        gatewayId: string,\n        paypalOptions: PayPalCommerceAlternativeMethodsPaymentOptions,\n    ): void {\n        const paypalAmpsSdk = this.getPaypalAmpsSdkOrThrow();\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalCommerceInitializationData>(\n            methodId,\n            gatewayId,\n        );\n        const { buttonStyle } = paymentMethod.initializationData || {};\n\n        const { container, onError, onRenderButton, submitForm } = paypalOptions;\n\n        const buttonOptions: PayPalCommerceButtonsOptions = {\n            fundingSource: methodId,\n            style: this.paypalCommerceIntegrationService.getValidButtonStyle(buttonStyle),\n            onInit: (_, actions) => paypalOptions.onInitButton(actions),\n            createOrder: () => this.onCreateOrder(methodId, gatewayId, paypalOptions),\n            onApprove: (data) => this.handleApprove(data, submitForm),\n            onCancel: () => {\n                this.toggleLoadingIndicator(false);\n                this.deinitializePollingMechanism();\n            },\n            onError: (error) => {\n                this.deinitializePollingMechanism();\n                this.handleFailure(error, onError);\n            },\n            onClick: async (_, actions) =>\n                paypalOptions.onValidate(actions.resolve, actions.reject),\n        };\n\n        this.paypalButton = paypalAmpsSdk.Buttons(buttonOptions);\n\n        if (!this.paypalButton.isEligible()) {\n            return;\n        }\n\n        if (onRenderButton && typeof onRenderButton === 'function') {\n            onRenderButton();\n        }\n\n        this.paypalButton.render(container);\n    }\n\n    private async onCreateOrder(\n        methodId: string,\n        gatewayId: string,\n        paypalOptions: PayPalCommerceAlternativeMethodsPaymentOptions,\n    ): Promise<string> {\n        const { onValidate } = paypalOptions;\n\n        const onValidationPassed = () => {\n            this.toggleLoadingIndicator(true);\n\n            return () => Promise.resolve();\n        };\n\n        await onValidate(onValidationPassed, noop);\n\n        const orderId = await this.paypalCommerceIntegrationService.createOrder(\n            'paypalcommercealternativemethodscheckout',\n        );\n\n        if (\n            this.isNonInstantPaymentMethod(methodId) &&\n            ((methodId === NonInstantAlternativePaymentMethods.IDEAL &&\n                this.isOrderApprovedProcessing) ||\n                methodId === NonInstantAlternativePaymentMethods.OXXO)\n        ) {\n            const order = { useStoreCredit: false };\n            const options = {\n                params: {\n                    methodId,\n                    gatewayId,\n                },\n            };\n\n            await this.paymentIntegrationService.submitOrder(order, options);\n\n            if (methodId === NonInstantAlternativePaymentMethods.IDEAL) {\n                const state = this.paymentIntegrationService.getState();\n                const bcOrderId = state.getOrder()?.orderId;\n\n                await this.paypalCommerceIntegrationService.updateOrder(\n                    'paypalcommercealternativemethods',\n                    methodId,\n                    bcOrderId,\n                );\n            }\n\n            await this.paypalCommerceIntegrationService.submitPayment(methodId, orderId, gatewayId);\n        }\n\n        return orderId;\n    }\n\n    private handleApprove(\n        { orderID }: ApproveCallbackPayload,\n        submitForm: PayPalCommerceAlternativeMethodsPaymentOptions['submitForm'],\n    ): void {\n        this.orderId = orderID;\n\n        submitForm();\n    }\n\n    private handleFailure(\n        error: Error,\n        onError: PayPalCommerceAlternativeMethodsPaymentOptions['onError'],\n    ): void {\n        this.toggleLoadingIndicator(false);\n\n        if (onError && typeof onError === 'function') {\n            onError(error);\n        }\n    }\n\n    /**\n     *\n     * Fields methods\n     *\n     * */\n    private renderFields(\n        methodId: string,\n        paypalOptions: PayPalCommerceAlternativeMethodsPaymentOptions,\n    ): void {\n        const paypalAmpsSdk = this.getPaypalAmpsSdkOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const { firstName, lastName, email } = state.getBillingAddressOrThrow();\n\n        const { apmFieldsContainer, apmFieldsStyles } = paypalOptions;\n\n        if (!apmFieldsContainer) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommercealternativemethods\" argument should contain \"apmFieldsContainer\".',\n            );\n        }\n\n        const fieldContainerElement = document.querySelector(apmFieldsContainer);\n\n        if (fieldContainerElement) {\n            fieldContainerElement.innerHTML = '';\n        }\n\n        const fieldsOptions = {\n            fundingSource: methodId,\n            style: apmFieldsStyles || {},\n            fields: {\n                name: {\n                    value: `${firstName} ${lastName}`,\n                },\n                email: {\n                    value: email,\n                },\n            },\n        };\n\n        const paypalPaymentFields = paypalAmpsSdk.PaymentFields(fieldsOptions);\n\n        paypalPaymentFields.render(apmFieldsContainer);\n    }\n\n    /**\n     *\n     * Loading Indicator methods\n     *\n     * */\n    private toggleLoadingIndicator(isLoading: boolean): void {\n        if (isLoading && this.loadingIndicatorContainer) {\n            this.loadingIndicator.show(this.loadingIndicatorContainer);\n        } else {\n            this.loadingIndicator.hide();\n        }\n    }\n\n    /**\n     *\n     * Utils\n     *\n     * */\n    private isNonInstantPaymentMethod(methodId: string): boolean {\n        return methodId.toUpperCase() in NonInstantAlternativePaymentMethods;\n    }\n\n    private getPaypalAmpsSdkOrThrow() {\n        if (!this.paypalApms) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.paypalApms;\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-constants.ts",
    "content": "export const LOADING_INDICATOR_STYLES = {\n    'background-color': 'rgba(0, 0, 0, 0.4)',\n    'z-index': '1000',\n};\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPayPalCommerceCreditButtonStrategy from './create-paypal-commerce-credit-button-strategy';\nimport PayPalCommerceCreditButtonStrategy from './paypal-commerce-credit-button-strategy';\n\ndescribe('createPayPalCommerceCreditButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce button strategy', () => {\n        const strategy = createPayPalCommerceCreditButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PayPalCommerceCreditButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-button-strategy.ts",
    "content": "import {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { createPayPalIntegrationService } from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCreditButtonStrategy from './paypal-commerce-credit-button-strategy';\n\nconst createPayPalCommerceCreditButtonStrategy: CheckoutButtonStrategyFactory<\n    PayPalCommerceCreditButtonStrategy\n> = (paymentIntegrationService) =>\n    new PayPalCommerceCreditButtonStrategy(\n        paymentIntegrationService,\n        createPayPalIntegrationService(paymentIntegrationService),\n    );\n\nexport default toResolvableModule(createPayPalCommerceCreditButtonStrategy, [\n    { id: 'paypalcommercecredit' },\n]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPaypalCommerceCreditCustomerStrategy from './create-paypal-commerce-credit-customer-strategy';\nimport PayPalCommerceCreditCustomerStrategy from './paypal-commerce-credit-customer-strategy';\n\ndescribe('createPayPalCommerceCreditCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce button strategy', () => {\n        const strategy = createPaypalCommerceCreditCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PayPalCommerceCreditCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-customer-strategy.ts",
    "content": "import {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceCreditCustomerStrategy from './paypal-commerce-credit-customer-strategy';\n\nconst createPayPalCommerceCreditCustomerStrategy: CustomerStrategyFactory<\n    PayPalCommerceCreditCustomerStrategy\n> = (paymentIntegrationService) =>\n    new PayPalCommerceCreditCustomerStrategy(\n        paymentIntegrationService,\n        createPayPalCommerceIntegrationService(paymentIntegrationService),\n    );\n\nexport default toResolvableModule(createPayPalCommerceCreditCustomerStrategy, [\n    { id: 'paypalcommercecredit' },\n]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPayPalCommerceCreditPaymentStrategy from './create-paypal-commerce-credit-payment-strategy';\nimport PayPalCommerceCreditPaymentStrategy from './paypal-commerce-credit-payment-strategy';\n\ndescribe('createPayPalCommerceCreditPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce credit payment strategy', () => {\n        const strategy = createPayPalCommerceCreditPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PayPalCommerceCreditPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/create-paypal-commerce-credit-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    createPayPalIntegrationService,\n    createPayPalSdkScriptLoader,\n    LOADING_INDICATOR_STYLES,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceCreditPaymentStrategy from './paypal-commerce-credit-payment-strategy';\n\nconst createPayPalCommerceCreditPaymentStrategy: PaymentStrategyFactory<\n    PayPalCommerceCreditPaymentStrategy\n> = (paymentIntegrationService) =>\n    new PayPalCommerceCreditPaymentStrategy(\n        paymentIntegrationService,\n        createPayPalIntegrationService(paymentIntegrationService),\n        new LoadingIndicator({\n            containerStyles: LOADING_INDICATOR_STYLES,\n        }),\n        createPayPalSdkScriptLoader(),\n    );\n\nexport default toResolvableModule(createPayPalCommerceCreditPaymentStrategy, [\n    { id: 'paypalcommercecredit' },\n]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-button-initialize-options.ts",
    "content": "import { PayPalButtonStyleOptions, PayPalBuyNowInitializeOptions } from '../paypal-commerce-types';\n\nexport default interface PayPalCommerceCreditButtonInitializeOptions {\n    /**\n     * A set of styling options for the checkout button.\n     */\n    style?: PayPalButtonStyleOptions;\n\n    /**\n     * The option that used to initialize a PayPal script with provided currency code.\n     */\n    currencyCode?: string;\n\n    /**\n     * The options that are required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\n\n    /**\n     * A callback that gets called when payment complete on paypal side.\n     */\n    onComplete?(): void;\n\n    /**\n     *\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\n     *\n     */\n    onEligibilityFailure?(): void;\n}\n\nexport interface WithPayPalCommerceCreditButtonInitializeOptions {\n    paypalcommercecredit?: PayPalCommerceCreditButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-button-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    Cart,\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getBuyNowCartRequestBody,\n    getCart,\n    getConfig,\n    getConsignment,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    getBillingAddressFromOrderDetails,\n    getPayPalIntegrationServiceMock,\n    getPayPalOrderDetails,\n    getPayPalPaymentMethod,\n    getPayPalSDKMock,\n    getShippingAddressFromOrderDetails,\n    PayPalButtonsOptions,\n    PayPalHostWindow,\n    PayPalIntegrationService,\n    PayPalSDK,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCreditButtonInitializeOptions from './paypal-commerce-credit-button-initialize-options';\nimport PayPalCommerceCreditButtonStrategy from './paypal-commerce-credit-button-strategy';\n\ndescribe('PayPalCommerceCreditButtonStrategy', () => {\n    let buyNowCart: Cart;\n    let cart: Cart;\n    let eventEmitter: EventEmitter;\n    let strategy: PayPalCommerceCreditButtonStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalButtonElement: HTMLDivElement;\n    let paypalCommerceIntegrationService: PayPalIntegrationService;\n    let paypalSdk: PayPalSDK;\n\n    const defaultMethodId = 'paypalcommercecredit';\n    const defaultButtonContainerId = 'paypal-commerce-credit-button-mock-id';\n    const paypalOrderId = 'ORDER_ID';\n\n    const buyNowCartRequestBody = getBuyNowCartRequestBody();\n    const storeConfig = getConfig().storeConfig;\n\n    const buyNowPayPalCommerceCreditOptions: PayPalCommerceCreditButtonInitializeOptions = {\n        buyNowInitializeOptions: {\n            getBuyNowCartRequestBody: jest.fn().mockReturnValue(buyNowCartRequestBody),\n        },\n        currencyCode: 'USD',\n        style: {\n            height: 45,\n        },\n        onComplete: jest.fn(),\n    };\n\n    const buyNowInitializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        paypalcommercecredit: buyNowPayPalCommerceCreditOptions,\n    };\n\n    const paypalCommerceCreditOptions: PayPalCommerceCreditButtonInitializeOptions = {\n        style: {\n            height: 45,\n        },\n        onComplete: jest.fn(),\n        onEligibilityFailure: jest.fn(),\n    };\n\n    const initializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        paypalcommercecredit: paypalCommerceCreditOptions,\n    };\n\n    const paypalShippingAddressPayloadMock = {\n        city: 'New York',\n        countryCode: 'US',\n        postalCode: '07564',\n        state: 'New York',\n    };\n\n    const paypalSelectedShippingOptionPayloadMock = {\n        amount: {\n            currency_code: 'USD',\n            value: '100',\n        },\n        id: '1',\n        label: 'Free shipping',\n        selected: true,\n        type: 'type_shipping',\n    };\n\n    beforeEach(() => {\n        buyNowCart = getBuyNowCart();\n        cart = getCart();\n\n        eventEmitter = new EventEmitter();\n\n        paypalCommerceIntegrationService = getPayPalIntegrationServiceMock();\n        paymentMethod = getPayPalPaymentMethod();\n        paypalSdk = getPayPalSDKMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new PayPalCommerceCreditButtonStrategy(\n            paymentIntegrationService,\n            paypalCommerceIntegrationService,\n        );\n\n        paypalButtonElement = document.createElement('div');\n        paypalButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(paypalButtonElement);\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService, 'loadDefaultCheckout').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paymentIntegrationService, 'selectShippingOption').mockImplementation(jest.fn());\n\n        jest.spyOn(paypalCommerceIntegrationService, 'loadPayPalSdk').mockReturnValue(\n            Promise.resolve(paypalSdk),\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'createBuyNowCartOrThrow').mockReturnValue(\n            Promise.resolve(buyNowCart),\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'createOrder').mockImplementation(jest.fn());\n        jest.spyOn(paypalCommerceIntegrationService, 'updateOrder').mockImplementation(jest.fn());\n        jest.spyOn(paypalCommerceIntegrationService, 'tokenizePayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n        jest.spyOn(paypalCommerceIntegrationService, 'removeElement').mockImplementation(jest.fn());\n        jest.spyOn(\n            paypalCommerceIntegrationService,\n            'getBillingAddressFromOrderDetails',\n        ).mockReturnValue(getBillingAddressFromOrderDetails());\n        jest.spyOn(\n            paypalCommerceIntegrationService,\n            'getShippingAddressFromOrderDetails',\n        ).mockReturnValue(getShippingAddressFromOrderDetails());\n        jest.spyOn(paypalCommerceIntegrationService, 'getShippingOptionOrThrow').mockReturnValue(\n            getShippingOption(),\n        );\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation((options: PayPalButtonsOptions) => {\n            eventEmitter.on('createOrder', () => {\n                if (options.createOrder) {\n                    options.createOrder();\n                }\n            });\n\n            eventEmitter.on(\n                'onClick',\n                // eslint-disable-next-line @typescript-eslint/no-misused-promises\n                async (jestSuccessExpectationsCallback, jestFailureExpectationsCallback) => {\n                    try {\n                        if (options.onClick) {\n                            await options.onClick(\n                                { fundingSource: 'paypal' },\n                                {\n                                    reject: jest.fn(),\n                                    resolve: jest.fn(),\n                                },\n                            );\n\n                            if (\n                                jestSuccessExpectationsCallback &&\n                                typeof jestSuccessExpectationsCallback === 'function'\n                            ) {\n                                jestSuccessExpectationsCallback();\n                            }\n                        }\n                    } catch (error) {\n                        if (\n                            jestFailureExpectationsCallback &&\n                            typeof jestFailureExpectationsCallback === 'function'\n                        ) {\n                            jestFailureExpectationsCallback(error);\n                        }\n                    }\n                },\n            );\n\n            eventEmitter.on('onApprove', () => {\n                if (options.onApprove) {\n                    options.onApprove(\n                        { orderID: paypalOrderId },\n                        {\n                            order: {\n                                get: jest.fn(),\n                            },\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onCancel', () => {\n                if (options.onCancel) {\n                    options.onCancel();\n                }\n            });\n\n            eventEmitter.on('onShippingAddressChange', () => {\n                if (options.onShippingAddressChange) {\n                    options.onShippingAddressChange({\n                        orderId: paypalOrderId,\n                        shippingAddress: paypalShippingAddressPayloadMock,\n                    });\n                }\n            });\n\n            eventEmitter.on('onShippingOptionsChange', () => {\n                if (options.onShippingOptionsChange) {\n                    options.onShippingOptionsChange({\n                        orderId: paypalOrderId,\n                        selectedShippingOption: paypalSelectedShippingOptionPayloadMock,\n                    });\n                }\n            });\n\n            return {\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: jest.fn(),\n            };\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as PayPalHostWindow).paypal;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(paypalButtonElement);\n        }\n    });\n\n    it('creates an instance of the PayPal Commerce Credit checkout button strategy', () => {\n        expect(strategy).toBeInstanceOf(PayPalCommerceCreditButtonStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if containerId is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercecredit is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercecredit.currencyCode is not provided (for buyNowFlow only)', async () => {\n            const { currencyCode, ...rest } = buyNowPayPalCommerceCreditOptions;\n\n            const newInitializationOptions = {\n                ...buyNowInitializationOptions,\n                paypalcommercecredit: rest,\n            };\n\n            try {\n                await strategy.initialize(newInitializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if provided buyNow callback is not a function is not provided (for buyNowFlow only)', async () => {\n            const { buyNowInitializeOptions, ...rest } = buyNowPayPalCommerceCreditOptions;\n\n            const newInitializationOptions = {\n                ...buyNowInitializationOptions,\n                paypalcommercecredit: {\n                    ...rest,\n                    buyNowInitializeOptions: {\n                        getBuyNowCartRequestBody: 'string',\n                    },\n                },\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(newInitializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads default checkout', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n\n        it('does not load default checkout for Buy Now flow', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk script', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n                cart.currency.code,\n                false,\n            );\n        });\n\n        it('loads paypal sdk script with provided currency code (Buy Now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paypalCommerceIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n                buyNowPayPalCommerceCreditOptions.currencyCode,\n                false,\n            );\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('initializes PayPal button to render (default flow)', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: paypalCommerceCreditOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('initializes PayPal Credit button to render if PayPal PayLater is not eligible', async () => {\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation((options: PayPalButtonsOptions) => {\n                return {\n                    render: jest.fn(),\n                    isEligible: jest.fn(() => {\n                        return options.fundingSource === paypalSdk.FUNDING.CREDIT;\n                    }),\n                    close: jest.fn(),\n                };\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.CREDIT,\n                style: paypalCommerceCreditOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('initializes PayPal button to render (buy now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: paypalCommerceCreditOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n                onCancel: expect.any(Function),\n            });\n        });\n\n        it('initializes PayPal button to render (with shipping options feature enabled)', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        'PAYPAL-5716.app_switch_functionality': false,\n                    },\n                },\n            });\n\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: paypalCommerceCreditOptions.style,\n                createOrder: expect.any(Function),\n                onShippingAddressChange: expect.any(Function),\n                onShippingOptionsChange: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('initializes PayPal button to render without shipping options when server side shipping callbacks enabled', async () => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                    isServerSideShippingCallbacksEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: paypalCommerceCreditOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('initializes PayPal button to render with shipping options when server side shipping callbacks disabled', async () => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                    isServerSideShippingCallbacksEnabled: false,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: paypalCommerceCreditOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onShippingAddressChange: expect.any(Function),\n                onShippingOptionsChange: expect.any(Function),\n            });\n        });\n\n        it('renders PayPal button if it is eligible', async () => {\n            const renderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => true),\n                render: renderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(renderMock).toHaveBeenCalled();\n        });\n\n        it('calls onEligibilityFailure callback when PayPal button is not eligible', async () => {\n            const renderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: renderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceCreditOptions.onEligibilityFailure).toHaveBeenCalled();\n            expect(renderMock).not.toHaveBeenCalled();\n        });\n\n        it('removes PayPal button container if the button is not eligible', async () => {\n            const renderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: renderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultButtonContainerId,\n            );\n        });\n    });\n\n    describe('#createOrder', () => {\n        it('creates paypal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommercecredit',\n            );\n        });\n    });\n\n    describe('#handleClick', () => {\n        beforeEach(() => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n                Promise.resolve(buyNowCart),\n            );\n            jest.spyOn(paymentIntegrationService, 'loadCheckout');\n        });\n\n        it('creates buy now cart on button click', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.createBuyNowCartOrThrow).toHaveBeenCalled();\n        });\n\n        it('loads checkout related to buy now cart on button click', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadCheckout).toHaveBeenCalledWith(buyNowCart.id);\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        describe('default flow', () => {\n            it('tokenizes payment on paypal approve', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalCommerceIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                    defaultMethodId,\n                    paypalOrderId,\n                );\n            });\n        });\n\n        describe('shipping options feature flow', () => {\n            const paypalOrderDetails = getPayPalOrderDetails();\n\n            beforeEach(() => {\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: PayPalButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: paypalOrderId },\n                                    {\n                                        order: {\n                                            get: () => Promise.resolve(paypalOrderDetails),\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                            close: jest.fn(),\n                        };\n                    },\n                );\n\n                const paymentMethodWithShippingOptionsFeature = {\n                    ...paymentMethod,\n                    initializationData: {\n                        ...paymentMethod.initializationData,\n                        isHostedCheckoutEnabled: true,\n                    },\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n            });\n\n            it('takes order details data from paypal', async () => {\n                const getOrderActionMock = jest.fn();\n\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: PayPalButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: paypalOrderId },\n                                    {\n                                        order: {\n                                            get: getOrderActionMock,\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                            close: jest.fn(),\n                        };\n                    },\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(getOrderActionMock).toHaveBeenCalled();\n            });\n\n            it('updates billing address with valid customers data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    paypalCommerceIntegrationService.getBillingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getPayPalOrderDetails());\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                    getBillingAddressFromOrderDetails(),\n                );\n            });\n\n            it('updates shipping address with valid customers data if physical items are available in the cart', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    paypalCommerceIntegrationService.getShippingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getPayPalOrderDetails());\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(\n                    getShippingAddressFromOrderDetails(),\n                );\n            });\n\n            it('submits BC order with provided methodId', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    {},\n                    {\n                        params: {\n                            methodId: initializationOptions.methodId,\n                        },\n                    },\n                );\n            });\n\n            it('submits BC payment to update BC order data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalCommerceIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    defaultMethodId,\n                    paypalOrderId,\n                );\n            });\n        });\n    });\n\n    describe('#onShippingAddressChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('updates billing and shipping address with data returned from PayPal', async () => {\n            const address = {\n                firstName: '',\n                lastName: '',\n                email: '',\n                phone: '',\n                company: '',\n                address1: '',\n                address2: '',\n                city: paypalShippingAddressPayloadMock.city,\n                countryCode: paypalShippingAddressPayloadMock.countryCode,\n                postalCode: paypalShippingAddressPayloadMock.postalCode,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalShippingAddressPayloadMock.state,\n                customFields: [],\n            };\n\n            jest.spyOn(paypalCommerceIntegrationService, 'getAddress').mockReturnValue(address);\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(address);\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(address);\n        });\n\n        it('selects shipping option after address update', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.getShippingOptionOrThrow).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order after shipping option selection', async () => {\n            const consignment = getConsignment();\n\n            // INFO: lets imagine that it is a state that we get after consignmentActionCreator.selectShippingOption call\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getConsignmentsOrThrow',\n            ).mockReturnValue([consignment]);\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onShippingOptionsChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('selects shipping option', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.getShippingOptionOrThrow).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('loads default checkout onCancel callback (buy now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n            eventEmitter.emit('onCancel');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-button-strategy.ts",
    "content": "import {\n    CheckoutButtonInitializeOptions,\n    CheckoutButtonStrategy,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    ApproveCallbackActions,\n    ApproveCallbackPayload,\n    PayPalButtonsOptions,\n    PayPalBuyNowInitializeOptions,\n    PayPalInitializationData,\n    PayPalIntegrationService,\n    ShippingAddressChangeCallbackPayload,\n    ShippingOptionChangeCallbackPayload,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCreditButtonInitializeOptions, {\n    WithPayPalCommerceCreditButtonInitializeOptions,\n} from './paypal-commerce-credit-button-initialize-options';\n\nexport default class PayPalCommerceCreditButtonStrategy implements CheckoutButtonStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalIntegrationService: PayPalIntegrationService,\n    ) {}\n\n    async initialize(\n        options: CheckoutButtonInitializeOptions & WithPayPalCommerceCreditButtonInitializeOptions,\n    ): Promise<void> {\n        const { paypalcommercecredit, containerId, methodId } = options;\n        const { buyNowInitializeOptions, currencyCode: providedCurrencyCode } =\n            paypalcommercecredit || {};\n\n        const isBuyNowFlow = !!buyNowInitializeOptions;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!containerId) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n            );\n        }\n\n        if (!paypalcommercecredit) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.`,\n            );\n        }\n\n        if (isBuyNowFlow && !providedCurrencyCode) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommercecredit.currencyCode\" argument is not provided.`,\n            );\n        }\n\n        if (\n            isBuyNowFlow &&\n            typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n        ) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommercecredit.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n            );\n        }\n\n        if (!isBuyNowFlow) {\n            // Info: default checkout should not be loaded for BuyNow flow,\n            // since there is no checkout session available for that.\n            await this.paymentIntegrationService.loadDefaultCheckout();\n        }\n\n        const state = this.paymentIntegrationService.getState();\n\n        // Info: we are using provided currency code for buy now cart,\n        // because checkout session is not available before buy now cart creation,\n        // hence application will throw an error on getCartOrThrow method call\n        const currencyCode = isBuyNowFlow\n            ? providedCurrencyCode\n            : state.getCartOrThrow().currency.code;\n\n        await this.paypalIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n        this.renderButton(containerId, methodId, paypalcommercecredit);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        containerId: string,\n        methodId: string,\n        paypalcommercecredit: PayPalCommerceCreditButtonInitializeOptions,\n    ): void {\n        const { buyNowInitializeOptions, style, onComplete, onEligibilityFailure } =\n            paypalcommercecredit;\n\n        const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n        const { isHostedCheckoutEnabled, isServerSideShippingCallbacksEnabled } =\n            paymentMethod.initializationData || {};\n\n        const defaultCallbacks = {\n            createOrder: () => this.paypalIntegrationService.createOrder('paypalcommercecredit'),\n            onApprove: ({ orderID }: ApproveCallbackPayload) =>\n                this.paypalIntegrationService.tokenizePayment(methodId, orderID),\n        };\n\n        const buyNowFlowCallbacks = {\n            onClick: () => this.handleClick(buyNowInitializeOptions),\n            onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n        };\n\n        const hostedCheckoutCallbacks = {\n            ...(!isServerSideShippingCallbacksEnabled && {\n                onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n                    this.onShippingAddressChange(data),\n                onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n                    this.onShippingOptionsChange(data),\n            }),\n            onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n                this.onHostedCheckoutApprove(\n                    data,\n                    actions,\n                    methodId,\n                    onComplete,\n                    isServerSideShippingCallbacksEnabled,\n                ),\n        };\n\n        const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n        let hasRenderedSmartButton = false;\n\n        fundingSources.forEach((fundingSource) => {\n            if (!hasRenderedSmartButton) {\n                const buttonRenderOptions: PayPalButtonsOptions = {\n                    fundingSource,\n                    style: this.paypalIntegrationService.getValidButtonStyle(style),\n                    ...defaultCallbacks,\n                    ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n                    ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n                };\n\n                const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n                if (paypalButton.isEligible()) {\n                    paypalButton.render(`#${containerId}`);\n                    hasRenderedSmartButton = true;\n                } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n                    onEligibilityFailure();\n                }\n            }\n        });\n\n        if (!hasRenderedSmartButton) {\n            this.paypalIntegrationService.removeElement(containerId);\n        }\n    }\n\n    private async handleClick(\n        buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n    ): Promise<void> {\n        if (buyNowInitializeOptions) {\n            const buyNowCart = await this.paypalIntegrationService.createBuyNowCartOrThrow(\n                buyNowInitializeOptions,\n            );\n\n            await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n        }\n    }\n\n    private async onHostedCheckoutApprove(\n        data: ApproveCallbackPayload,\n        actions: ApproveCallbackActions,\n        methodId: string,\n        onComplete?: () => void,\n        isServerSideShippingCallbacksEnabled?: boolean,\n    ): Promise<boolean> {\n        if (!data.orderID) {\n            throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n\n        try {\n            const hasPhysicalItems = cart.lineItems.physicalItems.length > 0;\n\n            if (!isServerSideShippingCallbacksEnabled) {\n                const orderDetails = await actions.order.get();\n\n                const billingAddress =\n                    this.paypalIntegrationService.getBillingAddressFromOrderDetails(orderDetails);\n\n                await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n                if (hasPhysicalItems) {\n                    const shippingAddress =\n                        this.paypalIntegrationService.getShippingAddressFromOrderDetails(\n                            orderDetails,\n                        );\n\n                    await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n                }\n            }\n\n            if (hasPhysicalItems) {\n                await this.paypalIntegrationService.updateOrder(\n                    'paypalcommerce',\n                    undefined,\n                    undefined,\n                    isServerSideShippingCallbacksEnabled,\n                );\n            }\n\n            if (isServerSideShippingCallbacksEnabled) {\n                await this.paymentIntegrationService.loadCheckout();\n            }\n\n            await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n\n            await this.paypalIntegrationService.submitPayment(methodId, data.orderID);\n\n            if (onComplete && typeof onComplete === 'function') {\n                onComplete();\n            }\n\n            return true; // FIXME: Do we really need to return true here?\n        } catch (error) {\n            if (typeof error === 'string') {\n                throw new Error(error);\n            }\n\n            throw error;\n        }\n    }\n\n    private async onShippingAddressChange(\n        data: ShippingAddressChangeCallbackPayload,\n    ): Promise<void> {\n        const address = this.paypalIntegrationService.getAddress({\n            city: data.shippingAddress.city,\n            countryCode: data.shippingAddress.countryCode,\n            postalCode: data.shippingAddress.postalCode,\n            stateOrProvinceCode: data.shippingAddress.state,\n        });\n\n        try {\n            // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n            // on this stage we don't have access to valid customer's address accept shipping data\n            await this.paymentIntegrationService.updateBillingAddress(address);\n            await this.paymentIntegrationService.updateShippingAddress(address);\n\n            const shippingOption = this.paypalIntegrationService.getShippingOptionOrThrow();\n\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.paypalIntegrationService.updateOrder('paypalcommerce');\n        } catch (error) {\n            if (typeof error === 'string') {\n                throw new Error(error);\n            }\n\n            throw error;\n        }\n    }\n\n    private async onShippingOptionsChange(\n        data: ShippingOptionChangeCallbackPayload,\n    ): Promise<void> {\n        const shippingOption = this.paypalIntegrationService.getShippingOptionOrThrow(\n            data.selectedShippingOption.id,\n        );\n\n        try {\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.paypalIntegrationService.updateOrder('paypalcommerce');\n        } catch (error) {\n            if (typeof error === 'string') {\n                throw new Error(error);\n            }\n\n            throw error;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-customer-initialize-options.ts",
    "content": "export default interface PayPalCommerceCreditCustomerInitializeOptions {\n    /**\n     * The ID of a container which the checkout button should be inserted into.\n     */\n    container: string;\n\n    /**\n     * A callback that gets called if unable to initialize the widget or select\n     * one of the address options provided by the widget.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error?: Error): void;\n\n    /**\n     * A callback that gets called when payment complete on paypal side.\n     */\n    onComplete?(): void;\n\n    /**\n     * A callback that gets called when paypal button clicked.\n     */\n    onClick?(): void;\n}\n\nexport interface WithPayPalCommerceCreditCustomerInitializeOptions {\n    paypalcommercecredit?: PayPalCommerceCreditCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-customer-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    CustomerInitializeOptions,\n    DefaultCheckoutButtonHeight,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    getConsignment,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    getBillingAddressFromOrderDetails,\n    getPayPalCommerceIntegrationServiceMock,\n    getPayPalCommerceOrderDetails,\n    getPayPalCommercePaymentMethod,\n    getPayPalSDKMock,\n    getShippingAddressFromOrderDetails,\n} from '../mocks';\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n    PayPalCommerceButtonsOptions,\n    PayPalCommerceHostWindow,\n    PayPalSDK,\n    StyleButtonColor,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceCreditCustomerInitializeOptions, {\n    WithPayPalCommerceCreditCustomerInitializeOptions,\n} from './paypal-commerce-credit-customer-initialize-options';\nimport PayPalCommerceCreditCustomerStrategy from './paypal-commerce-credit-customer-strategy';\n\ndescribe('PayPalCommerceCreditCustomerStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let strategy: PayPalCommerceCreditCustomerStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalCommerceIntegrationService: PayPalCommerceIntegrationService;\n    let paypalSdk: PayPalSDK;\n\n    const methodId = 'paypalcommercecredit';\n    const defaultContainerId = 'paypal-commerce-credit-container-mock-id';\n    const approveDataOrderId = 'ORDER_ID';\n\n    const paypalCommerceCreditOptions: PayPalCommerceCreditCustomerInitializeOptions = {\n        container: defaultContainerId,\n        onClick: jest.fn(),\n        onComplete: jest.fn(),\n    };\n\n    const initializationOptions: CustomerInitializeOptions &\n        WithPayPalCommerceCreditCustomerInitializeOptions = {\n        methodId,\n        paypalcommercecredit: paypalCommerceCreditOptions,\n    };\n\n    const storeConfig = getConfig().storeConfig;\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        paymentMethod = { ...getPayPalCommercePaymentMethod(), id: methodId };\n        paypalSdk = getPayPalSDKMock();\n        paypalCommerceIntegrationService = getPayPalCommerceIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new PayPalCommerceCreditCustomerStrategy(\n            paymentIntegrationService,\n            paypalCommerceIntegrationService,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paymentIntegrationService, 'selectShippingOption').mockImplementation(jest.fn());\n\n        jest.spyOn(paypalCommerceIntegrationService, 'loadPayPalSdk').mockResolvedValue(paypalSdk);\n        jest.spyOn(paypalCommerceIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'createOrder').mockImplementation(jest.fn());\n        jest.spyOn(paypalCommerceIntegrationService, 'updateOrder').mockImplementation(jest.fn());\n        jest.spyOn(paypalCommerceIntegrationService, 'tokenizePayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n        jest.spyOn(paypalCommerceIntegrationService, 'removeElement').mockImplementation(jest.fn());\n        jest.spyOn(\n            paypalCommerceIntegrationService,\n            'getBillingAddressFromOrderDetails',\n        ).mockReturnValue(getBillingAddressFromOrderDetails());\n        jest.spyOn(\n            paypalCommerceIntegrationService,\n            'getShippingAddressFromOrderDetails',\n        ).mockReturnValue(getShippingAddressFromOrderDetails());\n        jest.spyOn(paypalCommerceIntegrationService, 'getShippingOptionOrThrow').mockReturnValue(\n            getShippingOption(),\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue({\n            ...storeConfig,\n            checkoutSettings: {\n                ...storeConfig.checkoutSettings,\n                features: {\n                    ...storeConfig.checkoutSettings.features,\n                    'PAYPAL-5716.app_switch_functionality': false,\n                },\n            },\n        });\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: PayPalCommerceButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: approveDataOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onClick', () => {\n                    if (options.onClick) {\n                        options.onClick(\n                            { fundingSource: 'credit' },\n                            {\n                                resolve: jest.fn(),\n                                reject: jest.fn(),\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onShippingAddressChange', () => {\n                    if (options.onShippingAddressChange) {\n                        options.onShippingAddressChange({\n                            orderId: approveDataOrderId,\n                            shippingAddress: {\n                                city: 'New York',\n                                countryCode: 'US',\n                                postalCode: '07564',\n                                state: 'New York',\n                            },\n                        });\n                    }\n                });\n\n                eventEmitter.on('onShippingOptionsChange', () => {\n                    if (options.onShippingOptionsChange) {\n                        options.onShippingOptionsChange({\n                            orderId: approveDataOrderId,\n                            selectedShippingOption: {\n                                amount: {\n                                    currency_code: 'USD',\n                                    value: '100',\n                                },\n                                id: '1',\n                                label: 'Free shipping',\n                                selected: true,\n                                type: 'type_shipping',\n                            },\n                        });\n                    }\n                });\n\n                return {\n                    close: jest.fn(),\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as PayPalCommerceHostWindow).paypal;\n    });\n\n    it('creates an interface of the PayPal Commerce Credit (PayLater) customer strategy', () => {\n        expect(strategy).toBeInstanceOf(PayPalCommerceCreditCustomerStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws an error if methodId is not provided', async () => {\n            const options = {} as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercecredit is not provided', async () => {\n            const options = { methodId } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercecredit.container is not provided', async () => {\n            const options = {\n                methodId,\n                paypalcommercecredit: {\n                    onComplete: jest.fn(),\n                    container: undefined,\n                },\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercecredit.onClick is provided but it is not a function', async () => {\n            const options = {\n                methodId,\n                paypalcommercecredit: {\n                    ...initializationOptions.paypalcommercecredit,\n                    onClick: 'test',\n                },\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads paypalcommercecredit payment method', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n        });\n\n        it('does not load paypalcommercecredit payment method if payment method is already exists', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n                paymentMethod,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk with provided method id', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(methodId);\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('initializes paypal button with default configuration', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: StyleButtonColor.silver,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('initializes paypal buttons with config related to hosted checkout feature', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...storeConfig,\n                checkoutSettings: {\n                    ...storeConfig.checkoutSettings,\n                    features: {\n                        ...storeConfig.checkoutSettings.features,\n                        'PAYPAL-5716.app_switch_functionality': false,\n                    },\n                },\n            });\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: StyleButtonColor.silver,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onShippingAddressChange: expect.any(Function),\n                onShippingOptionsChange: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('initializes paypal buttons without shipping callbacks when server side shipping callbacks enabled', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                    isServerSideShippingCallbacksEnabled: true,\n                },\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: StyleButtonColor.silver,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('renders PayPal PayLater button if it is eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('renders PayPal Credit button if PayPal PayLater button is not eligible', async () => {\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                (options: PayPalCommerceButtonsOptions) => {\n                    return {\n                        close: jest.fn(),\n                        render: jest.fn(),\n                        isEligible: jest.fn(() => {\n                            return options.fundingSource === paypalSdk.FUNDING.CREDIT;\n                        }),\n                    };\n                },\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.CREDIT,\n                style: {\n                    height: DefaultCheckoutButtonHeight,\n                    color: StyleButtonColor.silver,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('does not render PayPal button if it is not eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n            expect(paypalCommerceIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultContainerId,\n            );\n        });\n\n        it('logs an error when PayPalSDK Buttons implementation is not available for some reasons', async () => {\n            jest.spyOn(paypalCommerceIntegrationService, 'loadPayPalSdk').mockReturnValue(\n                Promise.resolve(undefined),\n            );\n\n            const log = jest.fn();\n\n            jest.spyOn(console, 'error').mockImplementation(log);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(log).toHaveBeenCalled();\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates an order', async () => {\n            jest.spyOn(paypalCommerceIntegrationService, 'createOrder').mockResolvedValue('');\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommercecredit',\n            );\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        describe('default flow', () => {\n            it('tokenizes payment on paypal approve', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalCommerceIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                    methodId,\n                    approveDataOrderId,\n                );\n            });\n        });\n\n        describe('shipping options feature flow', () => {\n            const paypalOrderDetails = getPayPalCommerceOrderDetails();\n\n            beforeEach(() => {\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: PayPalCommerceButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: approveDataOrderId },\n                                    {\n                                        order: {\n                                            get: jest.fn(() => Promise.resolve(paypalOrderDetails)),\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            close: jest.fn(),\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                        };\n                    },\n                );\n\n                const paymentMethodWithShippingOptionsFeature = {\n                    ...paymentMethod,\n                    initializationData: {\n                        ...paymentMethod.initializationData,\n                        isHostedCheckoutEnabled: true,\n                    },\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n            });\n\n            it('takes order details data from paypal', async () => {\n                const getOrderActionMock = jest.fn(() => Promise.resolve(paypalOrderDetails));\n\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: PayPalCommerceButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: approveDataOrderId },\n                                    {\n                                        order: {\n                                            get: getOrderActionMock,\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            close: jest.fn(),\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                        };\n                    },\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(getOrderActionMock).toHaveBeenCalled();\n                expect(getOrderActionMock).toHaveReturnedWith(Promise.resolve(paypalOrderDetails));\n            });\n\n            it('updates billing address with valid customers data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    paypalCommerceIntegrationService.getBillingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getPayPalCommerceOrderDetails());\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                    getBillingAddressFromOrderDetails(),\n                );\n            });\n\n            it('updates shipping address with valid customers data if physical items are available in the cart', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    paypalCommerceIntegrationService.getShippingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getPayPalCommerceOrderDetails());\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(\n                    getShippingAddressFromOrderDetails(),\n                );\n            });\n\n            it('submits BC order with provided methodId', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    {},\n                    {\n                        params: {\n                            methodId: initializationOptions.methodId,\n                        },\n                    },\n                );\n            });\n\n            it('submits BC payment to update BC order data', async () => {\n                await strategy.initialize(initializationOptions);\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalCommerceIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    methodId,\n                    approveDataOrderId,\n                );\n            });\n        });\n    });\n\n    describe('#onShippingAddressChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('updates billing and shipping address with data returned from PayPal', async () => {\n            const address = {\n                firstName: '',\n                lastName: '',\n                email: '',\n                phone: '',\n                company: '',\n                address1: '',\n                address2: '',\n                city: 'New York',\n                countryCode: 'US',\n                postalCode: '07564',\n                stateOrProvince: '',\n                stateOrProvinceCode: 'New York',\n                customFields: [],\n            };\n\n            jest.spyOn(paypalCommerceIntegrationService, 'getAddress').mockReturnValue(address);\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(address);\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(address);\n        });\n\n        it('selects shipping option after address update', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.getShippingOptionOrThrow).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order after shipping option selection', async () => {\n            const consignment = getConsignment();\n\n            // INFO: lets imagine that it is a state that we get after consignmentActionCreator.selectShippingOption call\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getConsignmentsOrThrow',\n            ).mockReturnValue([consignment]);\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onShippingOptionsChange button callback', () => {\n        beforeEach(() => {\n            const paymentMethodWithShippingOptionsFeature = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodWithShippingOptionsFeature);\n        });\n\n        it('selects shipping option', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.getShippingOptionOrThrow).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.updateOrder).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onClick button callback', () => {\n        it('triggers onClick option by clicking on the button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceCreditOptions.onClick).toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('calls default sign in method', async () => {\n            const credentials = {\n                email: 'test@test.com',\n                password: '123',\n            };\n\n            await strategy.signIn(credentials);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                undefined,\n            );\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('calls default sign out method', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout()', () => {\n        it('calls default continue with checkout callback', async () => {\n            const continueWithCheckoutCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({ continueWithCheckoutCallback });\n\n            expect(continueWithCheckoutCallback).toHaveBeenCalled();\n        });\n\n        it('makes nothing if continue with checkout callback is not provided', async () => {\n            const result = await strategy.executePaymentMethodCheckout();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-customer-strategy.ts",
    "content": "import { noop } from 'lodash';\n\nimport {\n    CustomerCredentials,\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    DefaultCheckoutButtonHeight,\n    ExecutePaymentMethodCheckoutOptions,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n    ApproveCallbackActions,\n    ApproveCallbackPayload,\n    PayPalCommerceButtonsOptions,\n    PayPalCommerceInitializationData,\n    ShippingAddressChangeCallbackPayload,\n    ShippingOptionChangeCallbackPayload,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceCreditCustomerInitializeOptions, {\n    WithPayPalCommerceCreditCustomerInitializeOptions,\n} from './paypal-commerce-credit-customer-initialize-options';\n\nexport default class PayPalCommerceCreditCustomerStrategy implements CustomerStrategy {\n    private onError = noop;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions & WithPayPalCommerceCreditCustomerInitializeOptions,\n    ): Promise<void> {\n        const { paypalcommercecredit, methodId } = options;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!paypalcommercecredit) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommercecredit\" argument is not provided.',\n            );\n        }\n\n        if (!paypalcommercecredit.container) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommercecredit.container\" argument is not provided.',\n            );\n        }\n\n        if (paypalcommercecredit.onClick && typeof paypalcommercecredit.onClick !== 'function') {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommercecredit.onClick\" argument is not a function.',\n            );\n        }\n\n        this.onError = paypalcommercecredit.onError || noop;\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethod(methodId);\n\n        if (!paymentMethod) {\n            await this.paymentIntegrationService.loadPaymentMethod(methodId);\n        }\n\n        const paypalSdk = await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId);\n\n        if (!paypalSdk || !paypalSdk.Buttons || typeof paypalSdk.Buttons !== 'function') {\n            console.error(\n                '[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK',\n            );\n\n            return;\n        }\n\n        this.renderButton(methodId, paypalcommercecredit);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signInCustomer(credentials, options);\n    }\n\n    async signOut(options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signOutCustomer(options);\n    }\n\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n        options?.continueWithCheckoutCallback?.();\n\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        methodId: string,\n        paypalCommerceCredit: PayPalCommerceCreditCustomerInitializeOptions,\n    ): void {\n        const { container, onComplete, onClick } = paypalCommerceCredit;\n\n        const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<PayPalCommerceInitializationData>(methodId);\n        const {\n            isHostedCheckoutEnabled,\n            paymentButtonStyles,\n            isServerSideShippingCallbacksEnabled,\n        } = paymentMethod.initializationData || {};\n        const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n        const defaultCallbacks = {\n            createOrder: () =>\n                this.paypalCommerceIntegrationService.createOrder('paypalcommercecredit'),\n            onApprove: ({ orderID }: ApproveCallbackPayload) =>\n                this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n            ...(onClick && { onClick: () => onClick() }),\n        };\n\n        const hostedCheckoutCallbacks = {\n            ...(!isServerSideShippingCallbacksEnabled && {\n                onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n                    this.onShippingAddressChange(data),\n                onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n                    this.onShippingOptionsChange(data),\n            }),\n            onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n                this.onHostedCheckoutApprove(\n                    data,\n                    actions,\n                    methodId,\n                    onComplete,\n                    isServerSideShippingCallbacksEnabled,\n                ),\n        };\n\n        const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n        let hasRenderedSmartButton = false;\n\n        fundingSources.forEach((fundingSource) => {\n            if (!hasRenderedSmartButton) {\n                const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n                    fundingSource,\n                    style: this.paypalCommerceIntegrationService.getValidButtonStyle({\n                        ...checkoutTopButtonStyles,\n                        height: DefaultCheckoutButtonHeight,\n                    }),\n                    ...defaultCallbacks,\n                    ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n                };\n\n                const paypalButton = paypalSdk.Buttons(buttonRenderOptions);\n\n                if (paypalButton.isEligible()) {\n                    paypalButton.render(`#${container}`);\n                    hasRenderedSmartButton = true;\n                }\n            }\n        });\n\n        if (!hasRenderedSmartButton) {\n            this.paypalCommerceIntegrationService.removeElement(container);\n        }\n    }\n\n    private async onHostedCheckoutApprove(\n        data: ApproveCallbackPayload,\n        actions: ApproveCallbackActions,\n        methodId: string,\n        onComplete?: () => void,\n        isServerSideShippingCallbacksEnabled?: boolean,\n    ): Promise<void> {\n        if (!data.orderID) {\n            throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n        }\n\n        const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n        try {\n            const hasPhysicalItems = cart.lineItems.physicalItems.length > 0;\n\n            if (!isServerSideShippingCallbacksEnabled) {\n                const orderDetails = await actions.order.get();\n\n                const billingAddress =\n                    this.paypalCommerceIntegrationService.getBillingAddressFromOrderDetails(\n                        orderDetails,\n                    );\n\n                await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n                if (hasPhysicalItems) {\n                    const shippingAddress =\n                        this.paypalCommerceIntegrationService.getShippingAddressFromOrderDetails(\n                            orderDetails,\n                        );\n\n                    await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n                }\n            }\n\n            if (hasPhysicalItems) {\n                await this.paypalCommerceIntegrationService.updateOrder(\n                    isServerSideShippingCallbacksEnabled,\n                );\n            }\n\n            if (isServerSideShippingCallbacksEnabled) {\n                await this.paymentIntegrationService.loadCheckout();\n            }\n\n            await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n            await this.paypalCommerceIntegrationService.submitPayment(methodId, data.orderID);\n\n            if (onComplete && typeof onComplete === 'function') {\n                onComplete();\n            }\n        } catch (error) {\n            this.handleError(error);\n        }\n    }\n\n    private async onShippingAddressChange(\n        data: ShippingAddressChangeCallbackPayload,\n    ): Promise<void> {\n        const address = this.paypalCommerceIntegrationService.getAddress({\n            city: data.shippingAddress.city,\n            countryCode: data.shippingAddress.countryCode,\n            postalCode: data.shippingAddress.postalCode,\n            stateOrProvinceCode: data.shippingAddress.state,\n        });\n\n        try {\n            // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n            // on this stage we don't have access to valid customer's address except shipping data\n            await this.paymentIntegrationService.updateBillingAddress(address);\n            await this.paymentIntegrationService.updateShippingAddress(address);\n\n            const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow();\n\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.paypalCommerceIntegrationService.updateOrder();\n        } catch (error) {\n            this.handleError(error);\n        }\n    }\n\n    private async onShippingOptionsChange(\n        data: ShippingOptionChangeCallbackPayload,\n    ): Promise<void> {\n        const shippingOption = this.paypalCommerceIntegrationService.getShippingOptionOrThrow(\n            data.selectedShippingOption.id,\n        );\n\n        try {\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.paypalCommerceIntegrationService.updateOrder();\n        } catch (error) {\n            this.handleError(error);\n        }\n    }\n\n    private handleError(error: unknown) {\n        if (typeof this.onError === 'function') {\n            this.onError(error);\n        } else {\n            throw error;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-payment-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the PayPal Commerce payment\n * method for presenting its PayPal button.\n *\n * Please note that the minimum version of checkout-sdk is 1.100\n *\n * Also, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\n * ```html\n * <!-- This is where the PayPal button will be inserted -->\n * <div id=\"container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'paypalcommercecredit',\n *     paypalcommercecredit: {\n *         container: '#container',\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\n *         submitForm: () => {\n *         // Example function\n *             this.submitOrder(\n *                {\n *                   payment: { methodId: 'paypalcommercecredit', }\n *               }\n *            );\n *         },\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\n *         onValidate: (resolve, reject) => {\n *         // Example function\n *             const isValid = this.validatePaymentForm();\n *             if (isValid) {\n *                 return resolve();\n *             }\n *             return reject();\n *         },\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\n *         onRenderButton: () => {\n *         // Example function\n *             this.hidePaymentSubmitButton();\n *         }\n *     },\n * });\n * ```\n */\nexport default interface PayPalCommerceCreditPaymentInitializeOptions {\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    container?: string;\n\n    /**\n     * The location to insert the Pay Later Messages.\n     */\n    bannerContainerId?: string;\n\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: Error): void;\n\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n\n    /**\n     * A callback that gets called when a buyer click on Smart Payment Button\n     * and should validate payment form.\n     *\n     * @param resolve - A function, that gets called if form is valid.\n     * @param reject - A function, that gets called if form is not valid.\n     *\n     * @returns reject() or resolve()\n     */\n    onValidate?(resolve: () => void, reject: () => void): Promise<void>;\n\n    /**\n     * A callback for submitting payment form that gets called\n     * when buyer approved PayPal account.\n     */\n    submitForm?(): void;\n}\n\nexport interface WithPayPalCommerceCreditPaymentInitializeOptions {\n    paypalcommerce?: PayPalCommerceCreditPaymentInitializeOptions; // FIXME: this option is deprecated\n    paypalcommercecredit?: PayPalCommerceCreditPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-payment-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    InvalidArgumentError,\n    NotImplementedError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodInvalidError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    createPayPalSdkScriptLoader,\n    getPayPalIntegrationServiceMock,\n    getPayPalPaymentMethod,\n    getPayPalSDKMock,\n    PayPalButtonsOptions,\n    PayPalHostWindow,\n    PayPalIntegrationService,\n    PayPalMessagesSdk,\n    PayPalSDK,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceCreditPaymentInitializeOptions from './paypal-commerce-credit-payment-initialize-options';\nimport PayPalCommerceCreditPaymentStrategy from './paypal-commerce-credit-payment-strategy';\n\ndescribe('PayPalCommerceCreditPaymentStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let loadingIndicator: LoadingIndicator;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalIntegrationService: PayPalIntegrationService;\n    let paypalSdk: PayPalSDK;\n    let strategy: PayPalCommerceCreditPaymentStrategy;\n    let payPalSdkScriptLoader: PayPalSdkScriptLoader;\n    let payPalMessagesSdk: PayPalMessagesSdk;\n\n    const paypalOrderId = 'paypal123';\n\n    const defaultMethodId = 'paypalcommercecredit';\n    const defaultContainerId = '#container';\n    const defaultMessageContainerId = 'paypal-commerce-credit-message-mock-id';\n\n    const paypalCommerceCreditOptions: PayPalCommerceCreditPaymentInitializeOptions = {\n        container: defaultContainerId,\n        onValidate: jest.fn(),\n        submitForm: jest.fn(),\n    };\n\n    const initializationOptions: PaymentInitializeOptions = {\n        methodId: defaultMethodId,\n        paypalcommercecredit: paypalCommerceCreditOptions,\n    };\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        payPalMessagesSdk = {\n            Messages: jest.fn(),\n        };\n\n        paypalSdk = getPayPalSDKMock();\n        paymentMethod = getPayPalPaymentMethod();\n        paymentMethod.id = defaultMethodId;\n        paymentMethod.initializationData.orderId = undefined;\n\n        loadingIndicator = new LoadingIndicator();\n        paypalIntegrationService = getPayPalIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        payPalSdkScriptLoader = createPayPalSdkScriptLoader();\n\n        strategy = new PayPalCommerceCreditPaymentStrategy(\n            paymentIntegrationService,\n            paypalIntegrationService,\n            loadingIndicator,\n            payPalSdkScriptLoader,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(paypalIntegrationService, 'loadPayPalSdk').mockResolvedValue(paypalSdk);\n        jest.spyOn(paypalIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(paypalSdk);\n        jest.spyOn(paypalIntegrationService, 'createOrder').mockResolvedValue('');\n        jest.spyOn(paypalIntegrationService, 'submitPayment').mockResolvedValue();\n\n        jest.spyOn(loadingIndicator, 'show').mockReturnValue(undefined);\n        jest.spyOn(loadingIndicator, 'hide').mockReturnValue(undefined);\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation((options: PayPalButtonsOptions) => {\n            eventEmitter.on('createOrder', () => {\n                if (options.createOrder) {\n                    options.createOrder();\n                }\n            });\n\n            eventEmitter.on('onClick', () => {\n                if (options.onClick) {\n                    options.onClick(\n                        { fundingSource: defaultMethodId },\n                        {\n                            reject: jest.fn(),\n                            resolve: jest.fn(),\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onApprove', () => {\n                if (options.onApprove) {\n                    options.onApprove(\n                        { orderID: paypalOrderId },\n                        {\n                            order: {\n                                get: jest.fn(),\n                            },\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onCancel', () => {\n                if (options.onCancel) {\n                    options.onCancel();\n                }\n            });\n\n            eventEmitter.on('onError', () => {\n                if (options.onError) {\n                    options.onError(new Error());\n                }\n            });\n\n            return {\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: jest.fn(),\n            };\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as PayPalHostWindow).paypal;\n    });\n\n    it('creates an instance of the PayPal Commerce payment strategy', () => {\n        expect(strategy).toBeInstanceOf(PayPalCommerceCreditPaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if options.paypalcommerce is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not continues strategy initialization if order id is available in initializationData', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalIntegrationService.loadPayPalSdk).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(defaultMethodId);\n        });\n    });\n\n    describe('#renderButton()', () => {\n        it('renders PayPal PayLater button if it is eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                style: {\n                    color: 'black',\n                    height: 55,\n                    label: 'pay',\n                },\n                createOrder: expect.any(Function),\n                onClick: expect.any(Function),\n                onApprove: expect.any(Function),\n                onCancel: expect.any(Function),\n                onError: expect.any(Function),\n            });\n\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('renders PayPal Credit button if PayPal PayLater button is not eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation((options: PayPalButtonsOptions) => {\n                return {\n                    close: jest.fn(),\n                    render: paypalCommerceSdkRenderMock,\n                    isEligible: jest.fn(() => {\n                        return options.fundingSource === paypalSdk.FUNDING.CREDIT;\n                    }),\n                };\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            const defaultButtonOptions = {\n                style: {\n                    color: 'black',\n                    height: 55,\n                    label: 'pay',\n                },\n                createOrder: expect.any(Function),\n                onClick: expect.any(Function),\n                onApprove: expect.any(Function),\n                onCancel: expect.any(Function),\n                onError: expect.any(Function),\n            };\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledTimes(2);\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n                ...defaultButtonOptions,\n            });\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.CREDIT,\n                ...defaultButtonOptions,\n            });\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalledTimes(1);\n        });\n\n        it('throws an error if both PayPal PayLater and Credit buttons are not eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n                expect(error).toBeInstanceOf(NotImplementedError);\n            }\n        });\n\n        it('throws an error if container is not passed', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            try {\n                await strategy.initialize({\n                    ...initializationOptions,\n                    paypalcommercecredit: {},\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates paypal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommercecreditcheckout',\n            );\n        });\n    });\n\n    describe('#onClick button callback', () => {\n        it('calls validation callback with provided params', async () => {\n            const onValidateMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercecredit: {\n                    ...paypalCommerceCreditOptions,\n                    onValidate: onValidateMock,\n                },\n            });\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(onValidateMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        it('submits form', async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercecredit: {\n                    ...paypalCommerceCreditOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n        });\n\n        it(\"doesn't hide loading indicator after form submit\", async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercecredit: {\n                    ...paypalCommerceCreditOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n            expect(loadingIndicator.hide).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onCancel');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onError button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n\n        it('calls onError callback if it is provided', async () => {\n            const onErrorMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercecredit: {\n                    ...paypalCommerceCreditOptions,\n                    onError: onErrorMock,\n                },\n            });\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws an error if payload.payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if orderId is not defined', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodInvalidError);\n            }\n        });\n\n        it('submits order', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('submits payment with provided data', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paypalIntegrationService.submitPayment).toHaveBeenCalledWith(\n                payload.payment.methodId,\n                paypalOrderId,\n            );\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('closes paypal button component on deinitialize strategy', async () => {\n            const paypalCommerceSdkCloseMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: paypalCommerceSdkCloseMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n            await strategy.deinitialize();\n\n            expect(paypalCommerceSdkCloseMock).toHaveBeenCalled();\n        });\n\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('PayPal Commerce Credit messages logic', () => {\n        const paypalCommerceSdkRenderMock = jest.fn();\n\n        const options = {\n            methodId: defaultMethodId,\n            paypalcommercecredit: {\n                bannerContainerId: defaultMessageContainerId,\n            },\n        };\n\n        beforeEach(() => {\n            const div = document.createElement('div');\n\n            div.setAttribute('id', defaultMessageContainerId);\n            document.body.appendChild(div);\n\n            jest.spyOn(payPalSdkScriptLoader, 'getPayPalMessages').mockImplementation(() =>\n                Promise.resolve(payPalMessagesSdk),\n            );\n            jest.spyOn(payPalMessagesSdk, 'Messages').mockImplementation(() => ({\n                render: paypalCommerceSdkRenderMock,\n            }));\n        });\n\n        afterEach(() => {\n            document.getElementById(defaultMessageContainerId)?.remove();\n        });\n\n        it('does not render PayPal message when paypalBNPLConfiguration is not provided', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: undefined,\n                },\n            });\n\n            await strategy.initialize(options);\n\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('does not render PayPal message if banner is disabled in paypalBNPLConfiguration', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    paypalBNPLConfiguration: [\n                        {\n                            id: 'checkout',\n                            status: false,\n                        },\n                    ],\n                },\n            });\n\n            await strategy.initialize(options);\n\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('initializes PayPal Messages component', async () => {\n            await strategy.initialize(options);\n\n            expect(payPalMessagesSdk.Messages).toHaveBeenCalledWith({\n                amount: 190,\n                placement: 'payment',\n                style: {\n                    layout: 'text',\n                    logo: {\n                        type: 'alternative',\n                    },\n                    text: {\n                        color: 'white',\n                        size: 10,\n                    },\n                },\n            });\n        });\n\n        it('does not execute PayPal button initialization logic if bannerContainerId is provided', async () => {\n            await strategy.initialize(options);\n\n            expect(paypalIntegrationService.loadPayPalSdk).not.toHaveBeenCalledWith(\n                defaultMethodId,\n            );\n        });\n\n        it('show an error if bannerContainerId is provided but does not exist as DOM element', async () => {\n            Object.defineProperty(window, 'console', {\n                value: {\n                    error: jest.fn(),\n                },\n            });\n\n            await strategy.initialize({\n                ...options,\n                paypalcommercecredit: {\n                    ...options.paypalcommercecredit,\n                    bannerContainerId: '',\n                },\n            });\n\n            expect(payPalMessagesSdk.Messages).not.toHaveBeenCalled();\n            expect(window.console.error).toHaveBeenCalledWith(\n                'Unable to create banner without valid banner container ID.',\n            );\n        });\n\n        it('renders PayPal message', async () => {\n            await strategy.initialize(options);\n\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalledWith(\n                `#${defaultMessageContainerId}`,\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit/paypal-commerce-credit-payment-strategy.ts",
    "content": "import {\n    InvalidArgumentError,\n    NotImplementedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    ApproveCallbackPayload,\n    ClickCallbackActions,\n    getPaypalMessagesStylesFromBNPLConfig,\n    MessagingOptions,\n    PayPalBNPLConfigurationItem,\n    PayPalButtons,\n    PayPalButtonsOptions,\n    PayPalInitializationData,\n    PayPalIntegrationService,\n    PayPalMessagesSdk,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceCreditPaymentInitializeOptions, {\n    WithPayPalCommerceCreditPaymentInitializeOptions,\n} from './paypal-commerce-credit-payment-initialize-options';\n\nexport default class PayPalCommerceCreditPaymentStrategy implements PaymentStrategy {\n    private loadingIndicatorContainer?: string;\n    private orderId?: string;\n    private paypalButton?: PayPalButtons;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalIntegrationService: PayPalIntegrationService,\n        private loadingIndicator: LoadingIndicator,\n        private payPalSdkScriptLoader: PayPalSdkScriptLoader,\n    ) {}\n\n    async initialize(\n        options?: PaymentInitializeOptions & WithPayPalCommerceCreditPaymentInitializeOptions,\n    ): Promise<void> {\n        const { methodId, paypalcommerce, paypalcommercecredit } = options || {};\n\n        const paypalOptions = paypalcommercecredit || paypalcommerce;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!paypalOptions) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommerce\" argument is not provided.`,\n            );\n        }\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n        const { paypalBNPLConfiguration = [], orderId } = paymentMethod.initializationData || {};\n        const { bannerContainerId, container } = paypalOptions;\n\n        if (bannerContainerId !== undefined) {\n            if (!document.getElementById(bannerContainerId)) {\n                // eslint-disable-next-line no-console\n                console.error('Unable to create banner without valid banner container ID.');\n\n                return;\n            }\n\n            const bannerConfiguration =\n                paypalBNPLConfiguration &&\n                paypalBNPLConfiguration.find(({ id }) => id === 'checkout');\n\n            if (!bannerConfiguration?.status) {\n                return;\n            }\n\n            const paypalMessages = await this.payPalSdkScriptLoader.getPayPalMessages(\n                paymentMethod,\n                state.getCartOrThrow().currency.code,\n                state.getLocale(),\n            );\n\n            return this.renderMessages(paypalMessages, bannerContainerId, bannerConfiguration);\n        }\n\n        // Info:\n        // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n        // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n        // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n        if (orderId) {\n            this.orderId = orderId;\n\n            return;\n        }\n\n        await this.paypalIntegrationService.loadPayPalSdk(methodId);\n\n        this.loadingIndicatorContainer = container?.split('#')[1];\n\n        this.renderButton(methodId, paypalOptions);\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        if (!this.orderId) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n        await this.paypalIntegrationService.submitPayment(payment.methodId, this.orderId);\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this.orderId = undefined;\n\n        this.paypalButton?.close();\n\n        return Promise.resolve();\n    }\n\n    /**\n     *\n     * Button methods/callbacks\n     *\n     * */\n    private renderButton(\n        methodId: string,\n        paypalOptions: PayPalCommerceCreditPaymentInitializeOptions,\n    ): void {\n        if (!paypalOptions?.container) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"container\" argument is not provided.',\n            );\n        }\n\n        const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n        const { paymentButtonStyles } = paymentMethod.initializationData || {};\n        const { checkoutPaymentButtonStyles } = paymentButtonStyles || {};\n\n        const { container, onError, onRenderButton, onValidate, submitForm } = paypalOptions;\n\n        const fundingSources = [paypalSdk.FUNDING.PAYLATER, paypalSdk.FUNDING.CREDIT];\n        let hasRenderedSmartButton = false;\n\n        fundingSources.forEach((fundingSource) => {\n            if (hasRenderedSmartButton) {\n                return;\n            }\n\n            const buttonOptions: PayPalButtonsOptions = {\n                fundingSource,\n                style: this.paypalIntegrationService.getValidButtonStyle(\n                    checkoutPaymentButtonStyles,\n                ),\n                createOrder: () =>\n                    this.paypalIntegrationService.createOrder('paypalcommercecreditcheckout'),\n                onClick: (_, actions) => this.handleClick(actions, onValidate),\n                onApprove: (data) => this.handleApprove(data, submitForm),\n                onCancel: () => this.toggleLoadingIndicator(false),\n                onError: (error) => this.handleError(error, onError),\n            };\n\n            this.paypalButton = paypalSdk.Buttons(buttonOptions);\n\n            if (!this.paypalButton.isEligible() && fundingSource === paypalSdk.FUNDING.PAYLATER) {\n                return;\n            }\n\n            if (!this.paypalButton.isEligible() && fundingSource === paypalSdk.FUNDING.CREDIT) {\n                throw new NotImplementedError(\n                    `PayPal ${fundingSource} is not available for your region. Please use PayPal Checkout instead.`,\n                );\n            }\n\n            if (onRenderButton && typeof onRenderButton === 'function') {\n                onRenderButton();\n            }\n\n            this.paypalButton.render(container);\n            hasRenderedSmartButton = true;\n        });\n    }\n\n    private async handleClick(\n        actions: ClickCallbackActions,\n        onValidate: PayPalCommerceCreditPaymentInitializeOptions['onValidate'],\n    ): Promise<void> {\n        const { resolve, reject } = actions;\n\n        const onValidationPassed = () => {\n            this.toggleLoadingIndicator(true);\n\n            return resolve();\n        };\n\n        if (onValidate && typeof onValidate === 'function') {\n            return onValidate(onValidationPassed, reject);\n        }\n    }\n\n    private handleApprove(\n        { orderID }: ApproveCallbackPayload,\n        submitForm: PayPalCommerceCreditPaymentInitializeOptions['submitForm'],\n    ): void {\n        this.orderId = orderID;\n\n        if (submitForm && typeof submitForm === 'function') {\n            submitForm();\n        }\n    }\n\n    private handleError(\n        error: Error,\n        onError: PayPalCommerceCreditPaymentInitializeOptions['onError'],\n    ): void {\n        this.toggleLoadingIndicator(false);\n\n        if (onError && typeof onError === 'function') {\n            onError(error);\n        }\n    }\n\n    /**\n     *\n     * Loading Indicator methods\n     *\n     * */\n    private toggleLoadingIndicator(isLoading: boolean): void {\n        if (isLoading && this.loadingIndicatorContainer) {\n            this.loadingIndicator.show(this.loadingIndicatorContainer);\n        } else {\n            this.loadingIndicator.hide();\n        }\n    }\n\n    /**\n     *\n     * Render Pay Later Messages\n     *\n     * */\n    private renderMessages(\n        paypalMessages: PayPalMessagesSdk,\n        bannerContainerId: string,\n        bannerConfiguration: PayPalBNPLConfigurationItem,\n    ): void {\n        const checkout = this.paymentIntegrationService.getState().getCheckoutOrThrow();\n\n        const paypalMessagesOptions: MessagingOptions = {\n            amount: checkout.outstandingBalance,\n            placement: 'payment',\n            style: getPaypalMessagesStylesFromBNPLConfig(bannerConfiguration),\n        };\n\n        paypalMessages.Messages(paypalMessagesOptions).render(`#${bannerContainerId}`);\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit-card/create-paypal-commerce-credit-cards-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPayPalCommerceCreditCardsPaymentStrategy from './create-paypal-commerce-credit-cards-payment-strategy';\nimport PayPalCommerceCreditCardsPaymentStrategy from './paypal-commerce-credit-cards-payment-strategy';\n\ndescribe('createPayPalCommerceCreditCardsPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce credit cards button strategy', () => {\n        const strategy = createPayPalCommerceCreditCardsPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PayPalCommerceCreditCardsPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit-card/create-paypal-commerce-credit-cards-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    createPayPalFastlaneUtils,\n    createPayPalIntegrationService,\n    createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCreditCardsPaymentStrategy from './paypal-commerce-credit-cards-payment-strategy';\n\nconst createPaypalCommerceCreditCardsPaymentStrategy: PaymentStrategyFactory<\n    PayPalCommerceCreditCardsPaymentStrategy\n> = (paymentIntegrationService) =>\n    new PayPalCommerceCreditCardsPaymentStrategy(\n        paymentIntegrationService,\n        createPayPalIntegrationService(paymentIntegrationService),\n        createPayPalSdkScriptLoader(),\n        createPayPalFastlaneUtils(),\n    );\n\nexport default toResolvableModule(createPaypalCommerceCreditCardsPaymentStrategy, [\n    { id: 'paypalcommercecreditcards' },\n]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit-card/paypal-commerce-credit-cards-payment-initialize-options.ts",
    "content": "import { HostedFormOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * A set of options that are required to initialize the PayPal Commerce payment\n * method for presenting its credit card form.\n *\n * ```html\n * <!-- These containers are where the hosted (iframed) credit card fields will be inserted -->\n * <div id=\"card-number\"></div>\n * <div id=\"card-name\"></div>\n * <div id=\"card-expiry\"></div>\n * <div id=\"card-code\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'paypalcommercecreditcard',\n *     paypalcommercecreditcard: {\n *         form: {\n *             fields: {\n *                 cardNumber: { containerId: 'card-number' },\n *                 cardName: { containerId: 'card-name' },\n *                 cardExpiry: { containerId: 'card-expiry' },\n *                 cardCode: { containerId: 'card-code' },\n *             },\n *         },\n *         onCreditCardFieldsRenderingError: (error) => handleError(error),\n *     },\n * });\n * ```\n *\n * Additional options can be passed in to customize the fields and register\n * event callbacks.\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'paypalcommercecreditcard',\n *     paypalcommercecreditcard: {\n *         form: {\n *             fields: {\n *                 cardNumber: { containerId: 'card-number', placeholder: 'Number of card' },\n *                 cardName: { containerId: 'card-name', placeholder: 'Name of card' },\n *                 cardExpiry: { containerId: 'card-expiry', placeholder: 'Expiry of card' },\n *                 cardCode: { containerId: 'card-code', placeholder: 'Code of card' },\n *             },\n *             styles: {\n *                 default: {\n *                     color: '#000',\n *                 },\n *                 error: {\n *                     color: '#f00',\n *                 },\n *                 focus: {\n *                     color: '#0f0',\n *                 },\n *             },\n *             onBlur({ fieldType }) {\n *                 console.log(fieldType);\n *             },\n *             onFocus({ fieldType }) {\n *                 console.log(fieldType);\n *             },\n *             onEnter({ fieldType }) {\n *                 console.log(fieldType);\n *             },\n *             onCardTypeChange({ cardType }) {\n *                 console.log(cardType);\n *             },\n *             onValidate({ errors, isValid }) {\n *                 console.log(errors);\n *                 console.log(isValid);\n *             },\n *         },\n *         onCreditCardFieldsRenderingError: (error) => handleError(error),\n *     },\n * });\n * ```\n */\nexport default interface PayPalCommerceCreditCardsPaymentInitializeOptions {\n    /**\n     * The form is data for Credit Card Form\n     */\n    form: HostedFormOptions;\n\n    /**\n     * The callback that gets called when there is an issue with rendering credit card fields\n     */\n    onCreditCardFieldsRenderingError?: (error: unknown) => void;\n\n    /**\n     * The callback that gets called when PayPal SDK load complete\n     */\n    onLoadComplete?: () => void;\n}\n\nexport interface WithPayPalCommerceCreditCardsPaymentInitializeOptions {\n    paypalcommercecreditcards?: PayPalCommerceCreditCardsPaymentInitializeOptions;\n    paypalcommerce?: PayPalCommerceCreditCardsPaymentInitializeOptions; // This option is deprecated for current strategy\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit-card/paypal-commerce-credit-cards-payment-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    BillingAddress,\n    Cart,\n    HostedFieldType,\n    InvalidArgumentError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentInvalidFormError,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    createPayPalFastlaneUtils,\n    createPayPalSdkScriptLoader,\n    getPayPalFastlaneSdk,\n    getPayPalIntegrationServiceMock,\n    getPayPalPaymentMethod,\n    getPayPalSDKMock,\n    LiabilityShiftEnum,\n    PaypalCardFieldsConfig,\n    PayPalFastlaneSdk,\n    PayPalFastlaneUtils,\n    PayPalHostWindow,\n    PayPalIntegrationService,\n    PayPalSDK,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceCreditCardsPaymentInitializeOptions, {\n    WithPayPalCommerceCreditCardsPaymentInitializeOptions,\n} from './paypal-commerce-credit-cards-payment-initialize-options';\nimport PayPalCommerceCreditCardsPaymentStrategy from './paypal-commerce-credit-cards-payment-strategy';\n\ndescribe('PayPalCommerceCreditCardsPaymentStrategy', () => {\n    let billingAddress: BillingAddress;\n    let cart: Cart;\n    let strategy: PayPalCommerceCreditCardsPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalCommerceIntegrationService: PayPalIntegrationService;\n    let paypalSdkScriptLoader: PayPalSdkScriptLoader;\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let payPalFastlaneUtils: PayPalFastlaneUtils;\n    let paypalSdk: PayPalSDK;\n    let eventEmitter: EventEmitter;\n    const mockRender = jest.fn();\n    const mockClose = jest.fn().mockReturnValue(Promise.resolve());\n    const mockField = {\n        render: mockRender,\n        close: mockClose,\n        clear: jest.fn(),\n        removeClass: jest.fn(),\n    };\n    const hostedFormOrderId = 'hostedFormOrderId';\n    let paypalCardNameFieldElement: HTMLDivElement;\n\n    const methodId = 'paypalcommercecreditcards';\n\n    const paypalCardNameFieldContainerId = 'card-name';\n\n    const cardFieldsOptionsMock = {\n        inputEvents: {\n            onChange: expect.any(Function),\n            onFocus: expect.any(Function),\n            onBlur: expect.any(Function),\n            onInputSubmitRequest: expect.any(Function),\n        },\n        style: {\n            input: {\n                color: '#333333',\n                'font-family': 'bigFont',\n                'font-size': '14px',\n                'font-weight': '400',\n                outline: 'none',\n                padding: '9px 13px',\n            },\n            '.invalid': {\n                color: 'red',\n                'font-family': 'bigFont',\n                'font-size': '14px',\n                'font-weight': '400',\n                outline: 'none',\n                padding: '9px 13px',\n            },\n            '.valid': {\n                color: '#333333',\n                'font-family': 'bigFont',\n                'font-size': '14px',\n                'font-weight': '400',\n                outline: 'none',\n                padding: '9px 13px',\n            },\n            ':focus': {\n                color: '#333333',\n                'font-family': 'bigFont',\n                'font-size': '14px',\n                'font-weight': '400',\n                outline: 'none',\n                padding: '9px 13px',\n            },\n        },\n        createOrder: expect.any(Function),\n        onError: expect.any(Function),\n        onApprove: expect.any(Function),\n    };\n\n    const cardFieldsInstanceMock = {\n        isEligible: jest.fn(() => true),\n        CVVField: () => mockField,\n        ExpiryField: () => mockField,\n        NameField: () => mockField,\n        NumberField: () => mockField,\n        getState: jest\n            .fn()\n            .mockReturnValue(Promise.resolve({ fields: { number: { isValid: true } } })),\n        submit: jest.fn().mockReturnValue(Promise.resolve()),\n    };\n\n    const creditCardFormFields = {\n        [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n        [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n        [HostedFieldType.CardCode]: { containerId: 'card-code' },\n        [HostedFieldType.CardName]: { containerId: paypalCardNameFieldContainerId },\n    };\n\n    const creditCardVaultedForm = {\n        [HostedFieldType.CardNumberVerification]: { containerId: 'card-number' },\n        [HostedFieldType.CardCodeVerification]: { containerId: 'card-code' },\n        [HostedFieldType.CardExpiryVerification]: { containerId: 'card-expiry' },\n    };\n\n    const paypalCommerceCreditCardsOptions: PayPalCommerceCreditCardsPaymentInitializeOptions = {\n        form: {\n            fields: creditCardFormFields,\n        },\n        onCreditCardFieldsRenderingError: jest.fn(),\n        onLoadComplete: jest.fn(),\n    };\n\n    const initializationOptions: PaymentInitializeOptions &\n        WithPayPalCommerceCreditCardsPaymentInitializeOptions = {\n        methodId,\n        paypalcommercecreditcards: paypalCommerceCreditCardsOptions,\n    };\n\n    const defaultExecutePayload = {\n        payment: {\n            methodId: 'paypalcommercecreditcards',\n            paymentData: {},\n        },\n    };\n\n    beforeEach(() => {\n        cart = getCart();\n        billingAddress = getBillingAddress();\n        eventEmitter = new EventEmitter();\n        paymentMethod = { ...getPayPalPaymentMethod(), id: methodId };\n        paypalSdk = getPayPalSDKMock();\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n        paypalCommerceIntegrationService = getPayPalIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paypalSdkScriptLoader = createPayPalSdkScriptLoader();\n        payPalFastlaneUtils = createPayPalFastlaneUtils();\n\n        strategy = new PayPalCommerceCreditCardsPaymentStrategy(\n            paymentIntegrationService,\n            paypalCommerceIntegrationService,\n            paypalSdkScriptLoader,\n            payPalFastlaneUtils,\n        );\n\n        paypalCardNameFieldElement = document.createElement('div');\n        paypalCardNameFieldElement.id = paypalCardNameFieldContainerId;\n        document.body.appendChild(paypalCardNameFieldElement);\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getBillingAddressOrThrow',\n        ).mockReturnValue(billingAddress);\n        jest.spyOn(paymentIntegrationService.getState(), 'getLocale').mockReturnValue('en-US');\n\n        jest.spyOn(paypalCommerceIntegrationService, 'loadPayPalSdk').mockResolvedValue(paypalSdk);\n        jest.spyOn(paypalCommerceIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n        jest.spyOn(paypalCommerceIntegrationService, 'createOrderCardFields').mockResolvedValue({\n            orderId: 'orderId',\n            setupToken: 'setupToken',\n        });\n\n        jest.spyOn(paypalSdk, 'CardFields').mockImplementation(\n            (options: PaypalCardFieldsConfig) => {\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove({ orderID: hostedFormOrderId });\n                    }\n                });\n\n                return Promise.resolve(cardFieldsInstanceMock);\n            },\n        );\n\n        jest.spyOn(paypalSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(() =>\n            Promise.resolve(paypalFastlaneSdk),\n        );\n        jest.spyOn(payPalFastlaneUtils, 'initializePayPalFastlane').mockImplementation(jest.fn());\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as PayPalHostWindow).paypal;\n\n        if (document.getElementById(paypalCardNameFieldContainerId)) {\n            document.body.removeChild(paypalCardNameFieldElement);\n        }\n    });\n\n    it('creates an interface of the PayPal Commerce Credit Cards payment strategy', () => {\n        expect(strategy).toBeInstanceOf(PayPalCommerceCreditCardsPaymentStrategy);\n    });\n\n    describe('#initialize', () => {\n        it('throws an error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercecreditcards.form option is not provided', async () => {\n            const options = { methodId } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads paypalcommercecreditcards payment method', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n        });\n\n        it('loads paypal sdk', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                methodId,\n                undefined,\n                true,\n                true,\n            );\n        });\n\n        it('calls onLoadComplete', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(\n                initializationOptions.paypalcommercecreditcards?.onLoadComplete,\n            ).toHaveBeenCalled();\n        });\n\n        it('loads paypal fastlane sdk if paypal commerce fastlane analytic is enabled', async () => {\n            const mockedPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod,\n                    connectClientToken: 'connectClientToken123',\n                    isAcceleratedCheckoutEnabled: true,\n                    isPayPalCommerceAnalyticsV2Enabled: true,\n                    isDeveloperModeApplicable: false,\n                    isFastlaneEnabled: true,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockedPaymentMethod);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkScriptLoader.getPayPalFastlaneSdk).toHaveBeenCalledWith(\n                mockedPaymentMethod,\n                cart.currency.code,\n                cart.id,\n                'en-US',\n            );\n\n            expect(payPalFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n            );\n        });\n    });\n\n    describe('#renderFields', () => {\n        it('throws an error if card field is not eligible', async () => {\n            jest.spyOn(paypalSdk, 'CardFields').mockResolvedValue({\n                ...cardFieldsInstanceMock,\n                isEligible: jest.fn().mockReturnValue(false),\n            });\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('calls a callback from initialization options if there was an issue with form rendering process', async () => {\n            jest.spyOn(paypalSdk, 'CardFields').mockResolvedValue({\n                ...cardFieldsInstanceMock,\n                isEligible: jest.fn().mockReturnValue(true),\n                NumberField: jest.fn().mockReturnValue({\n                    render: jest.fn().mockImplementation(() => {\n                        throw new Error();\n                    }),\n                }),\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(\n                initializationOptions.paypalcommercecreditcards?.onCreditCardFieldsRenderingError,\n            ).toHaveBeenCalled();\n        });\n\n        it('renders card fields if they are eligible', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(mockRender).toHaveBeenCalled();\n        });\n\n        it('renders card fields with valid options', async () => {\n            const initializationOptionsWithStyles = {\n                methodId,\n                paypalcommercecreditcards: {\n                    form: {\n                        fields: paypalCommerceCreditCardsOptions.form.fields,\n                        styles: {\n                            default: {\n                                fontFamily: 'bigFont',\n                                fontSize: '14px',\n                                fontWeight: '400',\n                            },\n                            error: {\n                                fontFamily: 'bigFont',\n                                fontSize: '14px',\n                                fontWeight: '400',\n                            },\n                            focus: {\n                                fontFamily: 'bigFont',\n                                fontSize: '14px',\n                                fontWeight: '400',\n                            },\n                        },\n                    },\n                },\n            };\n\n            await strategy.initialize(initializationOptionsWithStyles);\n\n            expect(paypalSdk.CardFields).toHaveBeenCalledWith(cardFieldsOptionsMock);\n        });\n    });\n\n    describe('#execute', () => {\n        it('throws an error if payment object is not provided as execution data', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const payload = {};\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if methodId is not provided as execution payment payload', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const payload = {\n                payment: {\n                    paymentData: {},\n                },\n            } as OrderRequestBody;\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('submits an order', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(defaultExecutePayload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('submits payment without saving vaulting instrument', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(defaultExecutePayload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    shouldSaveInstrument: false,\n                    shouldSetAsDefaultInstrument: false,\n                    formattedPayload: {\n                        card_with_order: {\n                            order_id: hostedFormOrderId,\n                        },\n                    },\n                },\n            });\n        });\n\n        it('submits payment with flag to save vaulted instrument', async () => {\n            await strategy.initialize(initializationOptions);\n            eventEmitter.emit('onApprove');\n            await new Promise((resolve) => process.nextTick(resolve));\n            await strategy.execute({\n                payment: {\n                    methodId: 'paypalcommercecreditcards',\n                    paymentData: {\n                        shouldSaveInstrument: true,\n                        shouldSetAsDefaultInstrument: true,\n                    },\n                },\n            });\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    shouldSaveInstrument: true,\n                    shouldSetAsDefaultInstrument: true,\n                    formattedPayload: {\n                        card_with_order: {\n                            order_id: hostedFormOrderId,\n                        },\n                    },\n                },\n            });\n        });\n\n        it('does not submit order and payment if 3ds failed', async () => {\n            jest.spyOn(paypalSdk, 'CardFields').mockImplementation(\n                (options: PaypalCardFieldsConfig) => {\n                    eventEmitter.on('onApprove', () => {\n                        if (options.onApprove) {\n                            options.onApprove({\n                                orderID: hostedFormOrderId,\n                                liabilityShift: LiabilityShiftEnum.No,\n                            });\n                        }\n                    });\n\n                    return Promise.resolve(cardFieldsInstanceMock);\n                },\n            );\n            await strategy.initialize(initializationOptions);\n\n            try {\n                eventEmitter.emit('onApprove');\n                await new Promise((resolve) => process.nextTick(resolve));\n            } catch (error) {\n                expect(error).toBeDefined();\n            }\n        });\n\n        it('submits payment with vaulted(stored) instrument', async () => {\n            jest.spyOn(paypalSdk, 'CardFields').mockImplementation(\n                (options: PaypalCardFieldsConfig) => {\n                    eventEmitter.on('onApprove', () => {\n                        if (options.onApprove) {\n                            options.onApprove({\n                                orderID: 'orderId',\n                                vaultSetupToken: 'vaultSetupToken',\n                            });\n                        }\n                    });\n\n                    return Promise.resolve(cardFieldsInstanceMock);\n                },\n            );\n\n            const instrumentId = 'bc_instrument_id';\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute({\n                payment: {\n                    methodId: 'paypalcommercecreditcards',\n                    paymentData: {\n                        instrumentId,\n                    },\n                },\n            });\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    shouldSaveInstrument: false,\n                    shouldSetAsDefaultInstrument: false,\n                    instrumentId: 'bc_instrument_id',\n                    formattedPayload: {\n                        bigpay_token: {\n                            verification_nonce: 'vaultSetupToken',\n                            token: 'bc_instrument_id',\n                        },\n                        card_with_order: {\n                            order_id: 'orderId',\n                        },\n                    },\n                },\n            });\n        });\n    });\n\n    describe('#submitHostedForm()', () => {\n        it('throws an error if the hosted form is not valid on form submit', async () => {\n            jest.spyOn(paypalSdk, 'CardFields').mockResolvedValue({\n                ...cardFieldsInstanceMock,\n                getState: jest\n                    .fn()\n                    .mockReturnValue(Promise.resolve({ fields: { number: { isValid: false } } })),\n            });\n            await strategy.initialize(initializationOptions);\n\n            try {\n                await strategy.execute(defaultExecutePayload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentInvalidFormError);\n            }\n        });\n\n        it('submits hosted form with billing address', async () => {\n            const submitMock = jest.fn().mockReturnValue(Promise.resolve());\n\n            jest.spyOn(paypalSdk, 'CardFields').mockResolvedValue({\n                ...cardFieldsInstanceMock,\n                submit: submitMock,\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            await strategy.execute(defaultExecutePayload);\n\n            expect(submitMock).toHaveBeenCalledWith({\n                billingAddress: {\n                    company: billingAddress.company,\n                    addressLine1: billingAddress.address1,\n                    addressLine2: billingAddress.address2,\n                    adminArea1: billingAddress.stateOrProvinceCode,\n                    adminArea2: billingAddress.city,\n                    postalCode: billingAddress.postalCode,\n                    countryCode: billingAddress.countryCode,\n                },\n            });\n        });\n\n        it('submits hosted form without billing address if there is vaulted form', async () => {\n            const optionsWithVaultingForm = {\n                ...initializationOptions,\n                paypalcommercecreditcards: {\n                    ...paypalCommerceCreditCardsOptions,\n                    form: {\n                        fields: creditCardVaultedForm,\n                    },\n                },\n            } as PaymentInitializeOptions;\n\n            const submitMock = jest.fn().mockReturnValue(Promise.resolve());\n\n            jest.spyOn(paypalSdk, 'CardFields').mockResolvedValue({\n                ...cardFieldsInstanceMock,\n                submit: submitMock,\n            });\n\n            await strategy.initialize(optionsWithVaultingForm);\n\n            await strategy.execute(defaultExecutePayload);\n\n            expect(submitMock).toHaveBeenCalledWith();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n            expect(mockClose).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-credit-card/paypal-commerce-credit-cards-payment-strategy.ts",
    "content": "import { isNil, omitBy } from 'lodash';\n\nimport {\n    HostedCardFieldOptions,\n    HostedCardFieldOptionsMap,\n    HostedFieldBlurEventData,\n    HostedFieldEnterEventData,\n    HostedFieldFocusEventData,\n    HostedFieldStylesMap,\n    HostedFieldType,\n    HostedFieldValidateEventData,\n    HostedFormOptions,\n    HostedInputValidateErrorData,\n    HostedInputValidateErrorDataMap,\n    HostedInstrument,\n    HostedStoredCardFieldOptionsMap,\n    InvalidArgumentError,\n    isCreditCardFormFields,\n    isCreditCardVaultedFormFields,\n    isHostedInstrumentLike,\n    isVaultedInstrument,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentInvalidFormError,\n    PaymentInvalidFormErrorDetails,\n    PaymentMethodFailedError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isPayPalCommerceAcceleratedCheckoutCustomer } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\nimport {\n    PayPalFastlaneUtils,\n    PayPalInitializationData,\n    PayPalIntegrationService,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport {\n    LiabilityShiftEnum,\n    PayPalCommerceCardFields,\n    PayPalCommerceCardFieldsConfig,\n    PayPalCommerceCardFieldsOnApproveData,\n    PayPalCommerceCardFieldsState,\n    PayPalCommerceFields,\n    PayPalCommerceHostedFieldsRenderOptions,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceCreditCardsPaymentInitializeOptions, {\n    WithPayPalCommerceCreditCardsPaymentInitializeOptions,\n} from './paypal-commerce-credit-cards-payment-initialize-options';\n\nexport default class PayPalCommerceCreditCardsPaymentStrategy implements PaymentStrategy {\n    private executionPaymentData?: OrderPaymentRequestBody['paymentData'];\n    private isCreditCardForm?: boolean;\n    private isCreditCardVaultedForm?: boolean;\n\n    private cardFields?: PayPalCommerceCardFields;\n    private cvvField?: PayPalCommerceFields;\n    private expiryField?: PayPalCommerceFields;\n    private numberField?: PayPalCommerceFields;\n    private nameField?: PayPalCommerceFields;\n\n    private hostedFormOptions?: HostedFormOptions;\n    private returnedOrderId?: string;\n    private returnedVaultedToken?: string;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalIntegrationService: PayPalIntegrationService,\n        private paypalSdkScriptLoader: PayPalSdkScriptLoader,\n        private paypalFastlaneUtils: PayPalFastlaneUtils,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithPayPalCommerceCreditCardsPaymentInitializeOptions,\n    ): Promise<void> {\n        const { methodId, paypalcommercecreditcards, paypalcommerce } = options;\n        const paypalCommerceInitializationOptions = paypalcommercecreditcards || paypalcommerce;\n\n        const { form, onCreditCardFieldsRenderingError, onLoadComplete } =\n            paypalCommerceInitializationOptions || {};\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!form) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"options.paypalcommercecreditcards.form\" argument is not provided.',\n            );\n        }\n\n        this.hostedFormOptions = form;\n\n        this.isCreditCardForm = isCreditCardFormFields(form.fields);\n        this.isCreditCardVaultedForm =\n            isCreditCardVaultedFormFields(form.fields) && !this.hasUndefinedValues();\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n        await this.paypalIntegrationService.loadPayPalSdk(methodId, undefined, true, true);\n\n        if (this.isCreditCardForm || this.isCreditCardVaultedForm) {\n            await this.initializeFields(form, onCreditCardFieldsRenderingError);\n        }\n\n        onLoadComplete?.();\n\n        if (this.shouldInitializePayPalFastlane(methodId)) {\n            await this.initializePayPalFastlaneOrThrow(methodId);\n        }\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n        const { methodId, paymentData } = payment || {};\n\n        if (!payment || !methodId) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        this.executionPaymentData = paymentData;\n\n        if (this.isCreditCardForm || this.isCreditCardVaultedForm) {\n            await this.validateHostedFormOrThrow();\n            await this.submitHostedForm();\n        } else {\n            // This condition is triggered when we pay with vaulted instrument and shipping address is truste\n            const { orderId } = await this.paypalIntegrationService.createOrderCardFields(\n                'paypalcommercecreditcardscheckout',\n                this.getInstrumentParams(),\n            );\n\n            this.returnedOrderId = orderId;\n        }\n\n        const submitPaymentPayload = this.preparePaymentPayload(\n            methodId,\n            paymentData,\n            this.returnedOrderId,\n            this.returnedVaultedToken,\n        );\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n        await this.paymentIntegrationService.submitPayment(submitPaymentPayload);\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    async deinitialize(): Promise<void> {\n        await this.cvvField?.close();\n        await this.expiryField?.close();\n        await this.numberField?.close();\n        await this.nameField?.close();\n\n        return Promise.resolve();\n    }\n\n    /**\n     *\n     * Submit Payment Payload preparing method\n     *\n     * `vaultedToken` is used when we pay with vaulted instrument (with trusted shipping address and untrusted)\n     * `setupToken` is used when we pay with vaulted instrument (untrusted shipping address)\n     * `orderId` is used in every case (basic card payment, trusted shipping address and untrusted)\n     */\n    private preparePaymentPayload(\n        methodId: string,\n        paymentData: OrderPaymentRequestBody['paymentData'],\n        orderId?: string,\n        nonce?: string,\n    ): Payment {\n        const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n            isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n        const instrumentId =\n            paymentData && isVaultedInstrument(paymentData) ? paymentData.instrumentId : undefined;\n\n        const bigpay_token = omitBy(\n            {\n                verification_nonce: nonce,\n                token: instrumentId,\n            },\n            isNil,\n        );\n\n        return {\n            methodId,\n            paymentData: {\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n                instrumentId,\n                formattedPayload: {\n                    ...(nonce || instrumentId ? { bigpay_token } : {}),\n                    ...(orderId ? { card_with_order: { order_id: orderId } } : {}),\n                },\n            },\n        };\n    }\n\n    /**\n     *\n     * Card fields initialize\n     *\n     */\n    private async initializeFields(\n        formOptions: HostedFormOptions,\n        onCreditCardFieldsRenderingError?: PayPalCommerceCreditCardsPaymentInitializeOptions['onCreditCardFieldsRenderingError'],\n    ): Promise<void> {\n        const { fields, styles } = formOptions;\n\n        const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n        const executeCallback = this.getExecuteCallback(fields);\n\n        const cardFieldsConfig: PayPalCommerceCardFieldsConfig = {\n            style: this.getInputStyles(styles),\n            onApprove: ({\n                orderID,\n                vaultSetupToken,\n                liabilityShift,\n            }: PayPalCommerceCardFieldsOnApproveData) => {\n                if (\n                    liabilityShift === LiabilityShiftEnum.No ||\n                    liabilityShift === LiabilityShiftEnum.Unknown\n                ) {\n                    throw new Error();\n                }\n\n                return this.handleApprove({ orderID, vaultSetupToken });\n            },\n            onError: () => {\n                throw new PaymentMethodFailedError();\n            },\n            inputEvents: {\n                onChange: (event) => this.onChangeHandler(formOptions, event),\n                onFocus: (event) => this.onFocusHandler(formOptions, event),\n                onBlur: (event) => this.onBlurHandler(formOptions, event),\n                onInputSubmitRequest: (event) => this.onInputSubmitRequest(formOptions, event),\n            },\n            ...executeCallback,\n        };\n\n        this.cardFields = await paypalSdk.CardFields(cardFieldsConfig);\n\n        if (!this.cardFields.isEligible()) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        try {\n            this.stylizeInputContainers(fields);\n\n            if (isCreditCardFormFields(fields)) {\n                await this.renderFields(fields);\n            }\n\n            if (isCreditCardVaultedFormFields(fields)) {\n                await this.renderVaultedFields(fields);\n            }\n        } catch (error: unknown) {\n            if (typeof onCreditCardFieldsRenderingError === 'function') {\n                onCreditCardFieldsRenderingError(error);\n            }\n        }\n    }\n\n    /**\n     *\n     * Get execute callback method\n     * Depends on shipping address is trusted or not we should pass to PP\n     * `createVaultSetupToken` callback if address is untrusted or\n     * `createOrder` if address is trusted\n     *\n     */\n    private getExecuteCallback(\n        fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n    ) {\n        const isVaultedForm = isCreditCardVaultedFormFields(fields);\n\n        return isVaultedForm ? this.createVaultSetupTokenCallback() : this.createOrderCallback();\n    }\n\n    private createVaultSetupTokenCallback() {\n        return {\n            createVaultSetupToken: async () => {\n                const { setupToken } =\n                    (await this.paypalIntegrationService.createOrderCardFields(\n                        'paypalcommercecreditcardscheckout',\n                        {\n                            ...this.getInstrumentParams(),\n                            setupToken: true,\n                        },\n                    )) || {};\n\n                return setupToken;\n            },\n        };\n    }\n\n    private createOrderCallback() {\n        return {\n            createOrder: async () => {\n                const { orderId } =\n                    (await this.paypalIntegrationService.createOrderCardFields(\n                        'paypalcommercecreditcardscheckout',\n                        this.getInstrumentParams(),\n                    )) || {};\n\n                return orderId;\n            },\n        };\n    }\n\n    /**\n     *\n     * onApprove method\n     * When submitting a form with a `submitHostedForm` method if there is no error\n     * then onApprove callback is triggered and depends on the flow\n     * we will receive an `orderID` if it's basic paying and `vaultSetupToken` if we are paying\n     * with vaulted instrument and shipping address is untrusted\n     *\n     */\n    private handleApprove({ orderID, vaultSetupToken }: PayPalCommerceCardFieldsOnApproveData) {\n        if (orderID) {\n            this.returnedOrderId = orderID;\n        }\n\n        if (vaultSetupToken) {\n            this.returnedVaultedToken = vaultSetupToken;\n        }\n    }\n\n    /**\n     *\n     * Rendering Card Fields methods\n     *\n     */\n    private async renderFields(fieldsOptions: HostedCardFieldOptionsMap) {\n        const cardFields = this.getCardFieldsOrThrow();\n\n        if (fieldsOptions.cardCode?.containerId) {\n            this.cvvField = cardFields.CVVField({\n                placeholder: '',\n            });\n            await this.cvvField.render(`#${fieldsOptions.cardCode.containerId}`);\n        }\n\n        if (fieldsOptions.cardExpiry?.containerId) {\n            this.expiryField = cardFields.ExpiryField();\n            await this.expiryField.render(`#${fieldsOptions.cardExpiry.containerId}`);\n        }\n\n        if (fieldsOptions.cardName?.containerId) {\n            this.nameField = cardFields.NameField({\n                placeholder: '',\n            });\n            await this.nameField.render(`#${fieldsOptions.cardName.containerId}`);\n        }\n\n        if (fieldsOptions.cardNumber?.containerId) {\n            this.numberField = cardFields.NumberField({\n                placeholder: '',\n            });\n            await this.numberField.render(`#${fieldsOptions.cardNumber.containerId}`);\n        }\n    }\n\n    private async renderVaultedFields(fieldsOptions: HostedStoredCardFieldOptionsMap) {\n        const cardFields = this.getCardFieldsOrThrow();\n\n        if (fieldsOptions.cardCodeVerification?.containerId) {\n            this.cvvField = cardFields.CVVField({\n                placeholder: '',\n            });\n            await this.cvvField.render(`#${fieldsOptions.cardCodeVerification.containerId}`);\n        }\n\n        if (fieldsOptions.cardExpiryVerification?.containerId) {\n            this.expiryField = cardFields.ExpiryField();\n            await this.expiryField.render(`#${fieldsOptions.cardExpiryVerification.containerId}`);\n        }\n\n        if (fieldsOptions.cardNumberVerification?.containerId) {\n            this.numberField = cardFields.NumberField({\n                placeholder: '',\n            });\n            await this.numberField.render(`#${fieldsOptions.cardNumberVerification.containerId}`);\n        }\n    }\n\n    /**\n     *\n     * Instrument params method\n     *\n     */\n    private getInstrumentParams(): HostedInstrument | VaultedInstrument {\n        if (!this.executionPaymentData) {\n            return {};\n        }\n\n        if (isHostedInstrumentLike(this.executionPaymentData)) {\n            const { shouldSaveInstrument, shouldSetAsDefaultInstrument } =\n                this.executionPaymentData;\n\n            return {\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n            };\n        }\n\n        if (isVaultedInstrument(this.executionPaymentData)) {\n            const { instrumentId } = this.executionPaymentData;\n\n            return {\n                instrumentId,\n            };\n        }\n\n        return {};\n    }\n\n    private getFieldTypeByEmittedField({\n        emittedBy,\n    }: PayPalCommerceCardFieldsState):\n        | HostedFieldBlurEventData\n        | HostedFieldEnterEventData\n        | HostedFieldFocusEventData {\n        return {\n            fieldType: this.mapFieldType(emittedBy),\n        };\n    }\n\n    /**\n     *\n     * Form submit method\n     * Triggers a form submit\n     * */\n    private async submitHostedForm() {\n        const cardFields = this.getCardFieldsOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const billingAddress = state.getBillingAddressOrThrow();\n\n        const submitConfig = {\n            billingAddress: {\n                company: billingAddress.company,\n                addressLine1: billingAddress.address1,\n                addressLine2: billingAddress.address2,\n                adminArea1: billingAddress.stateOrProvinceCode,\n                adminArea2: billingAddress.city,\n                postalCode: billingAddress.postalCode,\n                countryCode: billingAddress.countryCode,\n            },\n        };\n\n        try {\n            if (this.isCreditCardVaultedForm) {\n                await cardFields.submit();\n            } else {\n                await cardFields.submit(submitConfig);\n            }\n        } catch (_) {\n            throw new PaymentMethodFailedError(\n                'Failed authentication. Please try to authorize again.',\n            );\n        }\n    }\n\n    /**\n     *\n     * Validation and errors\n     *\n     */\n    private async validateHostedFormOrThrow() {\n        const cardFields = this.getCardFieldsOrThrow();\n        const cardFieldsState = await cardFields.getState().then((data) => data);\n        const validationData = this.getValidityData(cardFieldsState);\n\n        if (validationData.isValid) {\n            return;\n        }\n\n        this.hostedFormOptions?.onValidate?.(validationData);\n\n        throw new PaymentInvalidFormError(this.mapValidationErrors(validationData.errors));\n    }\n\n    private getValidityData({\n        fields,\n    }: PayPalCommerceCardFieldsState): HostedFieldValidateEventData {\n        const updatedFields = { ...fields };\n\n        delete updatedFields.cardNameField;\n\n        const fieldsKeys = Object.keys(updatedFields) as Array<\n            keyof PayPalCommerceCardFieldsState['fields']\n        >;\n\n        const isValid = fieldsKeys.every((key) => updatedFields[key]?.isValid);\n\n        const errors = fieldsKeys.reduce((fieldsErrors, key) => {\n            const fieldType = this.mapFieldType(key);\n\n            return {\n                ...fieldsErrors,\n                [fieldType]: updatedFields[key]?.isValid\n                    ? undefined\n                    : [this.getInvalidErrorByFieldType(fieldType)],\n            };\n        }, {});\n\n        return { isValid, errors };\n    }\n\n    private getInvalidErrorByFieldType(fieldType: string): HostedInputValidateErrorData {\n        switch (fieldType) {\n            case HostedFieldType.CardCode:\n            case HostedFieldType.CardCodeVerification:\n                return {\n                    fieldType,\n                    message: 'Invalid card code',\n                    type: 'invalid_card_code',\n                };\n\n            case HostedFieldType.CardNumber:\n            case HostedFieldType.CardNumberVerification:\n                return {\n                    fieldType,\n                    message: 'Invalid card number',\n                    type: 'invalid_card_number',\n                };\n\n            case HostedFieldType.CardExpiry:\n            case HostedFieldType.CardExpiryVerification:\n                return {\n                    fieldType,\n                    message: 'Invalid card expiry',\n                    type: 'invalid_card_expiry',\n                };\n\n            default:\n                return {\n                    fieldType,\n                    message: 'Invalid field',\n                    type: 'invalid',\n                };\n        }\n    }\n\n    private mapValidationErrors(\n        validationErrors: HostedInputValidateErrorDataMap = {},\n    ): PaymentInvalidFormErrorDetails {\n        const errors: PaymentInvalidFormErrorDetails = {};\n        const validationErrorsKeys = Object.keys(validationErrors) as Array<\n            keyof HostedInputValidateErrorDataMap\n        >;\n\n        validationErrorsKeys.forEach((key) => {\n            errors[key] = [\n                {\n                    message: validationErrors[key]?.[0]?.message || '',\n                    type: key,\n                },\n            ];\n        });\n\n        return errors;\n    }\n\n    /**\n     *\n     * Fields mappers\n     *\n     */\n    private mapFieldType(type: string): HostedFieldType {\n        switch (type) {\n            case 'name':\n                return HostedFieldType.CardName;\n\n            case 'cardNumberField':\n            case 'number':\n                return this.isCreditCardForm\n                    ? HostedFieldType.CardNumber\n                    : HostedFieldType.CardNumberVerification;\n\n            case 'cardExpiryField':\n            case 'expiry':\n                return this.isCreditCardForm\n                    ? HostedFieldType.CardExpiry\n                    : HostedFieldType.CardExpiryVerification;\n\n            case 'cardCvvField':\n            case 'cvv':\n                return this.isCreditCardForm\n                    ? HostedFieldType.CardCode\n                    : HostedFieldType.CardCodeVerification;\n\n            default:\n                throw new Error('Unexpected field type');\n        }\n    }\n\n    /**\n     *\n     * Utils\n     *\n     */\n    private getCardFieldsOrThrow(): PayPalCommerceCardFields {\n        if (!this.cardFields) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.cardFields;\n    }\n\n    private getInputStyles(\n        styles?: HostedFieldStylesMap,\n    ): PayPalCommerceHostedFieldsRenderOptions['styles'] {\n        const commonStyles = {\n            'font-size': styles?.default?.fontSize || '1rem',\n            'font-family':\n                styles?.default?.fontFamily || 'Montserrat, Arial, Helvetica, sans-serif',\n            'font-weight': styles?.default?.fontWeight || '400',\n            outline: 'none',\n            padding: '9px 13px',\n        };\n\n        const defaultStyles = { ...commonStyles, color: '#333333' };\n        const errorStyles = { ...commonStyles, color: 'red' };\n\n        return {\n            input: defaultStyles,\n            '.invalid': errorStyles,\n            '.valid': defaultStyles,\n            ':focus': defaultStyles,\n        };\n    }\n\n    private stylizeInputContainers(\n        fields: HostedCardFieldOptionsMap | HostedStoredCardFieldOptionsMap,\n    ): void {\n        Object.values(fields || {}).forEach((id: HostedCardFieldOptions) => {\n            const element = document.getElementById(`${id?.containerId || ''}`);\n\n            if (element) {\n                element.style.padding = '0px';\n                element.style.boxShadow = 'none';\n                element.style.border = 'none';\n                element.style.background = 'transparent';\n                element.style.marginBottom = '10px';\n                element.style.marginLeft = '-5px';\n            }\n        });\n    }\n\n    private hasUndefinedValues() {\n        if (this.hostedFormOptions) {\n            return Object.values(this.hostedFormOptions.fields).some(\n                (value) => value === undefined,\n            );\n        }\n\n        return true;\n    }\n\n    /**\n     *\n     * Input events methods\n     *\n     */\n    private onChangeHandler(\n        formOptions: HostedFormOptions,\n        event: PayPalCommerceCardFieldsState,\n    ): void {\n        formOptions?.onValidate?.(this.getValidityData(event));\n    }\n\n    private onFocusHandler(\n        formOptions: HostedFormOptions,\n        event: PayPalCommerceCardFieldsState,\n    ): void {\n        formOptions?.onFocus?.(this.getFieldTypeByEmittedField(event));\n    }\n\n    private onBlurHandler(\n        formOptions: HostedFormOptions,\n        event: PayPalCommerceCardFieldsState,\n    ): void {\n        formOptions?.onBlur?.(this.getFieldTypeByEmittedField(event));\n    }\n\n    private onInputSubmitRequest(\n        formOptions: HostedFormOptions,\n        event: PayPalCommerceCardFieldsState,\n    ): void {\n        formOptions?.onEnter?.(this.getFieldTypeByEmittedField(event));\n    }\n\n    /**\n     *\n     * PayPal Commerce Accelerated checkout related methods\n     *\n     */\n    // TODO: remove this part when PPCP AXO A/B testing will be finished\n    private shouldInitializePayPalFastlane(methodId: string) {\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n        const paymentProviderCustomer = state.getPaymentProviderCustomer();\n        const paypalCommercePaymentProviderCustomer = isPayPalCommerceAcceleratedCheckoutCustomer(\n            paymentProviderCustomer,\n        )\n            ? paymentProviderCustomer\n            : {};\n\n        return (\n            paymentMethod?.initializationData?.isAcceleratedCheckoutEnabled &&\n            paymentMethod?.initializationData?.isPayPalCommerceAnalyticsV2Enabled &&\n            !paypalCommercePaymentProviderCustomer?.authenticationState\n        );\n    }\n\n    // TODO: remove this part when PPCP AXO A/B testing will be finished\n    private async initializePayPalFastlaneOrThrow(methodId: string): Promise<void> {\n        try {\n            const state = this.paymentIntegrationService.getState();\n            const cart = state.getCartOrThrow();\n            const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n            const { initializationData } = paymentMethod;\n\n            if (!initializationData?.connectClientToken) {\n                return;\n            }\n\n            const payPalFastlaneSdk = await this.paypalSdkScriptLoader.getPayPalFastlaneSdk(\n                paymentMethod,\n                cart.currency.code,\n                cart.id,\n                state.getLocale(),\n            );\n\n            await this.paypalFastlaneUtils.initializePayPalFastlane(\n                payPalFastlaneSdk,\n                !!initializationData?.isDeveloperModeApplicable,\n            );\n        } catch (_: unknown) {\n            // We should avoid throwing any error from this flow to do no brake default flow\n            // This flow is optional\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-fastlane/create-paypal-commerce-fastlane-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPayPalCommerceFastlaneCustomerStrategy from './create-paypal-commerce-fastlane-customer-strategy';\nimport PayPalCommerceFastlaneCustomerStrategy from './paypal-commerce-fastlane-customer-strategy';\n\ndescribe('createPayPalCommerceFastlaneCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce fastlane customer strategy', () => {\n        const strategy = createPayPalCommerceFastlaneCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PayPalCommerceFastlaneCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-fastlane/create-paypal-commerce-fastlane-customer-strategy.ts",
    "content": "import {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    createPayPalFastlaneUtils,\n    createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceFastlaneCustomerStrategy from './paypal-commerce-fastlane-customer-strategy';\n\nconst createPayPalCommerceFastlaneCustomerStrategy: CustomerStrategyFactory<\n    PayPalCommerceFastlaneCustomerStrategy\n> = (paymentIntegrationService) =>\n    new PayPalCommerceFastlaneCustomerStrategy(\n        paymentIntegrationService,\n        createPayPalSdkScriptLoader(),\n        createPayPalFastlaneUtils(),\n    );\n\nexport default toResolvableModule(createPayPalCommerceFastlaneCustomerStrategy, [\n    { id: 'paypalcommerceacceleratedcheckout' }, // this method id will be provided for users from test group\n    { id: 'paypalcommercecreditcards' }, // this method id will be provided for users from control group\n]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-fastlane/create-paypal-commerce-fastlane-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPaypalCommerceAcceleratedCheckoutPaymentStrategy from './create-paypal-commerce-fastlane-payment-strategy';\nimport PaypalCommerceFastlanePaymentStrategy from './paypal-commerce-fastlane-payment-strategy';\n\ndescribe('createPayPalCommerceAcceleratedCheckoutPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce accelerated checkout payment strategy', () => {\n        const strategy =\n            createPaypalCommerceAcceleratedCheckoutPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PaypalCommerceFastlanePaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-fastlane/create-paypal-commerce-fastlane-payment-strategy.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    createPayPalFastlaneUtils,\n    createPayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceRequestSender from '../paypal-commerce-request-sender';\n\nimport PayPalCommerceFastlanePaymentStrategy from './paypal-commerce-fastlane-payment-strategy';\n\nconst createPayPalCommerceFastlanePaymentStrategy: PaymentStrategyFactory<\n    PayPalCommerceFastlanePaymentStrategy\n> = (paymentIntegrationService) => {\n    const { getHost } = paymentIntegrationService.getState();\n\n    return new PayPalCommerceFastlanePaymentStrategy(\n        paymentIntegrationService,\n        new PayPalCommerceRequestSender(createRequestSender({ host: getHost() })),\n        createPayPalSdkScriptLoader(),\n        createPayPalFastlaneUtils(),\n    );\n};\n\nexport default toResolvableModule(createPayPalCommerceFastlanePaymentStrategy, [\n    { id: 'paypalcommerceacceleratedcheckout' }, // PayPal Fastlane relates to 'paypalcommerceacceleratedcheckout' method id\n]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-fastlane/paypal-commerce-fastlane-customer-initialize-options.ts",
    "content": "import { PayPalFastlaneStylesOption } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\n\n/**\n * A set of options that are optional to initialize the PayPalCommerce Fastlane customer strategy\n * that are responsible for PayPalCommerce Fastlane components styling and initialization\n *\n * ```js\n * service.initializeCustomer({\n *     methodId: 'paypalcommerceacceleratedcheckout', // PayPalCommerce Fastlane has 'paypalcommerceacceleratedcheckout' method id\n *     paypalcommercefastlane: {\n *         styles: {\n *              root: {\n *                  backgroundColorPrimary: 'transparent',\n *                  errorColor: '#C40B0B',\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\n *              },\n *              input: {\n *                  borderRadius: '0.25rem',\n *                  borderColor: '#9E9E9E',\n *                  focusBorderColor: '#4496F6',\n *              },\n *              toggle: {\n *                  colorPrimary: '#0F005E',\n *                  colorSecondary: '#ffffff',\n *              },\n *              text: {\n *                  body: {\n *                      color: '#222222',\n *                      fontSize: '1rem',\n *                  },\n *                  caption: {\n *                      color: '#515151',\n *                      fontSize: '0.875rem',\n *                  },\n *              },\n *              branding: 'light',\n *         },\n *     },\n * });\n * ```\n */\nexport default interface PayPalCommerceFastlaneCustomerInitializeOptions {\n    /**\n     * Is a stylisation options for customizing PayPal Fastlane components\n     *\n     * Note: the styles for all PayPalCommerce Fastlane strategies should be the same,\n     * because they will be provided to PayPal library only for the first strategy initialization\n     * no matter which strategy was initialised first\n     */\n    styles?: PayPalFastlaneStylesOption;\n}\n\nexport interface WithPayPalCommerceFastlaneCustomerInitializeOptions {\n    paypalcommercefastlane?: PayPalCommerceFastlaneCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-fastlane/paypal-commerce-fastlane-customer-strategy.spec.ts",
    "content": "import {\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getConfig,\n    getConsignment,\n    getCustomer,\n    getGuestCustomer,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    createPayPalFastlaneUtils,\n    createPayPalSdkScriptLoader,\n    getPayPalAcceleratedCheckoutPaymentMethod,\n    getPayPalFastlaneSdk,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneSdk,\n    PayPalFastlaneUtils,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceFastlaneCustomerStrategy from './paypal-commerce-fastlane-customer-strategy';\n\ndescribe('PayPalCommerceFastlaneCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalCommerceFastlaneUtils: PayPalFastlaneUtils;\n    let paypalSdkScriptLoader: PayPalSdkScriptLoader;\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let strategy: PayPalCommerceFastlaneCustomerStrategy;\n\n    const cart = getCart();\n    const guestCustomer = getGuestCustomer();\n    const consignments = [getConsignment()];\n    const storeConfig = getConfig().storeConfig;\n\n    const methodId = 'paypalcommerceacceleratedcheckout';\n    const secondaryMethodId = 'paypalcommercecreditcards';\n    const customerContextIdMock = 'customerId123';\n    const authenticationResultMock = {\n        authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n        profileData: {\n            name: {\n                fullName: 'John Doe',\n                firstName: 'John',\n                lastName: 'Doe',\n            },\n            phoneNumber: {\n                countryCode: '012',\n                nationalNumber: '123123',\n            },\n            shippingAddress: {\n                phoneNumber: {\n                    countryCode: '012',\n                    nationalNumber: '123123',\n                },\n                name: {\n                    fullName: 'John Doe',\n                    firstName: 'John',\n                    lastName: 'Doe',\n                    phoneNumber: '555555555',\n                },\n                address: {\n                    company: 'BigCommerce',\n                    addressLine1: 'addressLine1',\n                    addressLine2: 'addressLine2',\n                    adminArea1: 'addressState',\n                    adminArea2: 'addressCity',\n                    postalCode: '03004',\n                    countryCode: 'US',\n                },\n            },\n            card: {\n                id: 'nonce/token',\n                paymentSource: {\n                    card: {\n                        brand: 'Visa',\n                        expiry: '2030-12',\n                        lastDigits: '1111',\n                        name: 'John Doe',\n                        billingAddress: {\n                            firstName: 'John',\n                            lastName: 'Doe',\n                            company: 'BigCommerce',\n                            addressLine1: 'addressLine1',\n                            addressLine2: 'addressLine2',\n                            locality: 'addressCity',\n                            adminArea1: 'adminArea1',\n                            adminArea2: 'adminArea2',\n                            postalCode: '03004',\n                            phoneNumber: '123123',\n                            countryCodeAlpha2: 'US',\n                        },\n                    },\n                },\n            },\n        },\n    };\n\n    const bcAddressMock = {\n        id: 1,\n        type: 'type',\n        address1: 'addressLine1',\n        address2: 'addressLine2',\n        city: 'addressCity',\n        company: 'BigCommerce',\n        countryCode: 'US',\n        country: 'US',\n        customFields: [],\n        firstName: 'John',\n        lastName: 'Doe',\n        phone: '333333333333',\n        postalCode: '03004',\n        stateOrProvince: 'addressState',\n        stateOrProvinceCode: 'addressState',\n    };\n\n    const card = 'card' as const;\n\n    const bcInstrumentMock = {\n        bigpayToken: 'nonce/token',\n        brand: 'Visa',\n        defaultInstrument: false,\n        expiryMonth: '12',\n        expiryYear: '2030',\n        iin: '',\n        last4: '1111',\n        method: 'paypalcommerceacceleratedcheckout',\n        provider: 'paypalcommerceacceleratedcheckout',\n        untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.CVV,\n        trustedShippingAddress: false,\n        type: card,\n    };\n\n    const initializationOptions = {\n        methodId,\n        paypalcommercefastlane: {\n            styles: {\n                root: {\n                    backgroundColorPrimary: 'white',\n                },\n            },\n        },\n    };\n\n    const executionOptions = {\n        methodId,\n        continueWithCheckoutCallback: jest.fn(),\n        checkoutPaymentMethodExecuted: jest.fn(),\n    };\n\n    beforeEach(() => {\n        paymentMethod = getPayPalAcceleratedCheckoutPaymentMethod();\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paypalSdkScriptLoader = createPayPalSdkScriptLoader();\n        paypalCommerceFastlaneUtils = createPayPalFastlaneUtils();\n\n        strategy = new PayPalCommerceFastlaneCustomerStrategy(\n            paymentIntegrationService,\n            paypalSdkScriptLoader,\n            paypalCommerceFastlaneUtils,\n        );\n\n        const state = paymentIntegrationService.getState();\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod');\n        jest.spyOn(paymentIntegrationService, 'updatePaymentProviderCustomer');\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress');\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress');\n        jest.spyOn(paymentIntegrationService, 'selectShippingOption');\n        jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(paymentMethod);\n        jest.spyOn(state, 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(state, 'getCustomer').mockReturnValue(guestCustomer);\n        jest.spyOn(state, 'getCustomerOrThrow').mockReturnValue(guestCustomer);\n        jest.spyOn(state, 'getConsignments').mockReturnValue(consignments);\n        jest.spyOn(state, 'getBillingAddress').mockReturnValue(getBillingAddress());\n        jest.spyOn(state, 'getStoreConfigOrThrow').mockReturnValue(storeConfig);\n        jest.spyOn(state, 'getLocale').mockReturnValue('en-US');\n\n        jest.spyOn(paypalSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(() =>\n            Promise.resolve(paypalFastlaneSdk),\n        );\n        jest.spyOn(paypalCommerceFastlaneUtils, 'initializePayPalFastlane');\n        jest.spyOn(paypalCommerceFastlaneUtils, 'updateStorageSessionId');\n        jest.spyOn(paypalCommerceFastlaneUtils, 'removeStorageSessionId');\n        jest.spyOn(paypalCommerceFastlaneUtils, 'lookupCustomerOrThrow').mockImplementation(() =>\n            Promise.resolve({\n                customerContextId: customerContextIdMock,\n            }),\n        );\n        jest.spyOn(\n            paypalCommerceFastlaneUtils,\n            'triggerAuthenticationFlowOrThrow',\n        ).mockImplementation(() => Promise.resolve(authenticationResultMock));\n        jest.spyOn(\n            paypalCommerceFastlaneUtils,\n            'mapPayPalFastlaneProfileToBcCustomerData',\n        ).mockImplementation(() => ({\n            authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n            addresses: [bcAddressMock],\n            billingAddress: bcAddressMock,\n            shippingAddress: bcAddressMock,\n            instruments: [bcInstrumentMock],\n        }));\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        it('throws an error if method id is not provided', async () => {\n            try {\n                await strategy.initialize({ methodId: undefined });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads paypal commerce accelerated checkout payment method', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n        });\n\n        it('loads paypal commerce credit cards payment method on trigger strategy for not know control/test group', async () => {\n            await strategy.initialize({\n                ...initializationOptions,\n                methodId: secondaryMethodId,\n            });\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                secondaryMethodId,\n            );\n        });\n\n        it('initializes paypal fastlane with correct styles', async () => {\n            const newInitializationOptions = {\n                methodId,\n                paypalcommercefastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(),\n                    styles: {\n                        root: {\n                            backgroundColorPrimary: 'green',\n                            errorColor: 'orange',\n                        },\n                        input: {\n                            borderRadius: '5px',\n                        },\n                    },\n                },\n            };\n\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    isAcceleratedCheckoutEnabled: true,\n                    shouldRunAcceleratedCheckout: true,\n                    isFastlaneEnabled: true,\n                    isFastlaneStylingEnabled: true,\n                    fastlaneStyles: {\n                        fastlaneRootSettingsBackgroundColor: 'red',\n                        fastlaneBrandingSettings: 'branding',\n                    },\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockPaymentMethod);\n\n            await strategy.initialize(newInitializationOptions);\n\n            expect(paypalCommerceFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n                {\n                    root: {\n                        backgroundColorPrimary: 'red',\n                        errorColor: 'orange',\n                    },\n                    input: {\n                        borderRadius: '5px',\n                    },\n                    branding: 'branding',\n                },\n            );\n        });\n\n        it('loads paypal sdk and initialises paypal fastlane in production mode', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkScriptLoader.getPayPalFastlaneSdk).toHaveBeenCalledWith(\n                paymentMethod,\n                cart.currency.code,\n                cart.id,\n                'en-US',\n            );\n\n            expect(paypalCommerceFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n                initializationOptions.paypalcommercefastlane.styles,\n            );\n        });\n\n        it('loads paypal sdk and initialises paypal fastlane in test mode', async () => {\n            paymentMethod.initializationData.isDeveloperModeApplicable = true;\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkScriptLoader.getPayPalFastlaneSdk).toHaveBeenCalledWith(\n                paymentMethod,\n                cart.currency.code,\n                cart.id,\n                'en-US',\n            );\n\n            expect(paypalCommerceFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                true,\n                initializationOptions.paypalcommercefastlane.styles,\n            );\n        });\n\n        it('does not throw anything if there is an error with Fastlane initialization', async () => {\n            paymentMethod.initializationData.isDeveloperModeApplicable = true;\n            paymentMethod.initializationData.isFastlaneEnabled = true;\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            jest.spyOn(paypalSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                Promise.reject(),\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkScriptLoader.getPayPalFastlaneSdk).toHaveBeenCalled();\n            expect(paypalCommerceFastlaneUtils.initializePayPalFastlane).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('calls default sign in method', async () => {\n            const credentials = {\n                email: 'test@test.com',\n                password: '123',\n            };\n\n            await strategy.signIn(credentials);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                undefined,\n            );\n\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalledWith({\n                authenticationState: undefined,\n                addresses: undefined,\n                instruments: undefined,\n            });\n\n            expect(paypalCommerceFastlaneUtils.removeStorageSessionId).toHaveBeenCalled();\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('calls default sign out method', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout()', () => {\n        it('throws an error if methodId is not provided', async () => {\n            try {\n                await strategy.executePaymentMethodCheckout();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if continueWithCheckoutCallback is not a function or if its not provided', async () => {\n            try {\n                await strategy.executePaymentMethodCheckout({ methodId });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not run authentication flow for store member', async () => {\n            const storeMember = getCustomer();\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue(\n                storeMember,\n            );\n\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(paypalCommerceFastlaneUtils.lookupCustomerOrThrow).not.toHaveBeenCalled();\n        });\n\n        it('loads payment method to get related data', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n        });\n\n        it('triggers checkoutPaymentMethodExecuted if it is provided', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(executionOptions.checkoutPaymentMethodExecuted).toHaveBeenCalled();\n        });\n\n        it('does not call checkoutPaymentMethodExecuted if it is not provided', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout({\n                ...executionOptions,\n                checkoutPaymentMethodExecuted: undefined,\n            });\n\n            expect(executionOptions.checkoutPaymentMethodExecuted).not.toHaveBeenCalled();\n        });\n\n        it('runs paypal fastlane authentication flow and updates customers data in checkout state', async () => {\n            const paymentMethodWithShippingAutoselect = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isFastlaneShippingOptionAutoSelectEnabled: true,\n                },\n            };\n            const state = paymentIntegrationService.getState();\n\n            jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockReturnValue(\n                Promise.resolve(paymentIntegrationService.getState()),\n            );\n            jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(\n                paymentMethodWithShippingAutoselect,\n            );\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(paypalCommerceFastlaneUtils.lookupCustomerOrThrow).toHaveBeenCalledWith(\n                guestCustomer.email,\n            );\n\n            expect(\n                paypalCommerceFastlaneUtils.triggerAuthenticationFlowOrThrow,\n            ).toHaveBeenCalledWith(customerContextIdMock);\n            expect(\n                paypalCommerceFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData,\n            ).toHaveBeenCalledWith(methodId, authenticationResultMock);\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalledWith({\n                authenticationState: authenticationResultMock.authenticationState,\n                addresses: [bcAddressMock],\n                instruments: [bcInstrumentMock],\n            });\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                bcAddressMock,\n            );\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(\n                bcAddressMock,\n            );\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                consignments[0]?.availableShippingOptions\n                    ? consignments[0]?.availableShippingOptions[0].id\n                    : undefined,\n            );\n\n            expect(paypalCommerceFastlaneUtils.updateStorageSessionId).toHaveBeenCalledWith(\n                cart.id,\n            );\n        });\n\n        it('calls continueWithCheckoutCallback callback in the end of execution flow', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(executionOptions.continueWithCheckoutCallback).toHaveBeenCalled();\n        });\n\n        it('doesnt select shipping option when isFastlaneShippingOptionAutoSelectEnabled is false', async () => {\n            const state = paymentIntegrationService.getState();\n            const paymentMethodWithShippingAutoselect = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isEnableFastlaneShippingOptionAutoSelect: false,\n                },\n            };\n\n            jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(\n                paymentMethodWithShippingAutoselect,\n            );\n\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(paymentIntegrationService.selectShippingOption).not.toHaveBeenCalled();\n        });\n\n        it('automatically selects shipping option when isFastlaneShippingOptionAutoSelectEnabled is true', async () => {\n            const state = paymentIntegrationService.getState();\n            const paymentMethodWithShippingAutoselect = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isFastlaneShippingOptionAutoSelectEnabled: true,\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockReturnValue(\n                Promise.resolve(paymentIntegrationService.getState()),\n            );\n            jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(\n                paymentMethodWithShippingAutoselect,\n            );\n            await strategy.initialize(initializationOptions);\n            await strategy.executePaymentMethodCheckout(executionOptions);\n\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-fastlane/paypal-commerce-fastlane-customer-strategy.ts",
    "content": "import {\n    CustomerCredentials,\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    ExecutePaymentMethodCheckoutOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getFastlaneStyles,\n    PayPalFastlaneAuthenticationResult,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneStylesOption,\n    PayPalFastlaneUtils,\n    PayPalInitializationData,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceFastlaneCustomerInitializeOptions, {\n    WithPayPalCommerceFastlaneCustomerInitializeOptions,\n} from './paypal-commerce-fastlane-customer-initialize-options';\n\nexport default class PayPalCommerceFastlaneCustomerStrategy implements CustomerStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalSdkScriptLoader: PayPalSdkScriptLoader,\n        private paypalFastlaneUtils: PayPalFastlaneUtils,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions & WithPayPalCommerceFastlaneCustomerInitializeOptions,\n    ): Promise<void> {\n        const { methodId, paypalcommercefastlane } = options;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" argument is not provided.',\n            );\n        }\n\n        try {\n            await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n            const state = this.paymentIntegrationService.getState();\n            const cart = state.getCartOrThrow();\n            const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n            const isTestModeEnabled = !!paymentMethod.initializationData?.isDeveloperModeApplicable;\n\n            const paypalFastlaneSdk = await this.paypalSdkScriptLoader.getPayPalFastlaneSdk(\n                paymentMethod,\n                cart.currency.code,\n                cart.id,\n                state.getLocale(),\n            );\n\n            await this.paypalFastlaneUtils.initializePayPalFastlane(\n                paypalFastlaneSdk,\n                isTestModeEnabled,\n                this.getFastlaneStyles(methodId, paypalcommercefastlane),\n            );\n        } catch (_) {\n            // TODO: add logger to be able to debug issues if there any\n            // Info: Do not throw anything here to avoid blocking customer from passing checkout flow\n        }\n\n        return Promise.resolve();\n    }\n\n    async deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signInCustomer(credentials, options);\n\n        await this.paymentIntegrationService.updatePaymentProviderCustomer({\n            authenticationState: undefined,\n            addresses: undefined,\n            instruments: undefined,\n        });\n\n        this.paypalFastlaneUtils.removeStorageSessionId();\n    }\n\n    async signOut(options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signOutCustomer(options);\n    }\n\n    async executePaymentMethodCheckout(\n        options?: ExecutePaymentMethodCheckoutOptions,\n    ): Promise<void> {\n        const { checkoutPaymentMethodExecuted, continueWithCheckoutCallback, methodId } =\n            options || {};\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"methodId\" argument is not provided.',\n            );\n        }\n\n        if (typeof continueWithCheckoutCallback !== 'function') {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"continueWithCheckoutCallback\" argument is not provided and it must be a function.',\n            );\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const customer = state.getCustomerOrThrow();\n\n        if (customer.isGuest) {\n            if (\n                checkoutPaymentMethodExecuted &&\n                typeof checkoutPaymentMethodExecuted === 'function'\n            ) {\n                checkoutPaymentMethodExecuted();\n            }\n\n            try {\n                await this.runPayPalAuthenticationFlowOrThrow(methodId);\n            } catch (_) {\n                // TODO: add logger to be able to debug issues if there any\n                // Info: Do not throw anything here to avoid blocking customer from passing checkout flow\n            }\n        }\n\n        continueWithCheckoutCallback();\n    }\n\n    /**\n     *\n     * Authentication flow methods\n     *\n     */\n    private async runPayPalAuthenticationFlowOrThrow(methodId: string): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const cartId = state.getCartOrThrow().id;\n        const customer = state.getCustomer();\n        const billingAddress = state.getBillingAddress();\n        const customerEmail = customer?.email || billingAddress?.email || '';\n\n        const { customerContextId } = await this.paypalFastlaneUtils.lookupCustomerOrThrow(\n            customerEmail,\n        );\n\n        const authenticationResult =\n            await this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(customerContextId);\n\n        const isAuthenticationFlowCanceled =\n            authenticationResult.authenticationState === PayPalFastlaneAuthenticationState.CANCELED;\n\n        await this.updateCustomerDataState(methodId, authenticationResult);\n\n        if (isAuthenticationFlowCanceled) {\n            this.paypalFastlaneUtils.removeStorageSessionId();\n        } else {\n            this.paypalFastlaneUtils.updateStorageSessionId(cartId);\n        }\n    }\n\n    private async updateCustomerDataState(\n        methodId: string,\n        authenticationResult: PayPalFastlaneAuthenticationResult,\n    ): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n\n        const { authenticationState, addresses, billingAddress, shippingAddress, instruments } =\n            this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(\n                methodId,\n                authenticationResult,\n            );\n\n        await this.paymentIntegrationService.updatePaymentProviderCustomer({\n            authenticationState,\n            addresses,\n            instruments,\n        });\n\n        if (billingAddress) {\n            await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n        }\n\n        if (shippingAddress && cart.lineItems.physicalItems.length > 0) {\n            const updatedState = await this.paymentIntegrationService.updateShippingAddress(\n                shippingAddress,\n            );\n\n            const paymentMethod =\n                updatedState.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n            const { isFastlaneShippingOptionAutoSelectEnabled } =\n                paymentMethod.initializationData || {};\n            const consignments = updatedState.getConsignments() || [];\n            const availableShippingOptions = consignments[0]?.availableShippingOptions || [];\n            const firstShippingOption = availableShippingOptions[0];\n            const recommendedShippingOption = availableShippingOptions.find(\n                (option) => option.isRecommended,\n            );\n\n            if (\n                (recommendedShippingOption || firstShippingOption) &&\n                isFastlaneShippingOptionAutoSelectEnabled\n            ) {\n                const shippingOptionId = recommendedShippingOption?.id || firstShippingOption.id;\n\n                await this.paymentIntegrationService.selectShippingOption(shippingOptionId);\n            }\n        }\n    }\n\n    /**\n     *\n     * Fastlane styling methods\n     *\n     */\n    private getFastlaneStyles(\n        methodId: string,\n        paypalcommercefastlane: PayPalCommerceFastlaneCustomerInitializeOptions | undefined,\n    ): PayPalFastlaneStylesOption | undefined {\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n        const { fastlaneStyles, isFastlaneStylingEnabled } = paymentMethod.initializationData || {};\n\n        return getFastlaneStyles(\n            isFastlaneStylingEnabled ? fastlaneStyles : {},\n            paypalcommercefastlane?.styles,\n        );\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-fastlane/paypal-commerce-fastlane-payment-initialize-options.ts",
    "content": "import { CardInstrument } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PayPalFastlaneStylesOption } from '@bigcommerce/checkout-sdk/paypal-commerce-utils';\n\n/**\n * A set of options that are required to initialize the PayPalCommerce Accelerated Checkout payment\n * method for presenting on the page.\n *\n *\n * Also, PayPalCommerce requires specific options to initialize PayPal Fastlane Card Component\n * ```html\n * <!-- This is where the PayPal Fastlane Card Component will be inserted -->\n * <div id=\"container\"></div>\n * ```\n * ```js\n * service.initializePayment({\n *     methodId: 'paypalcommerceacceleratedcheckout', // PayPal Fastlane has 'paypalcommerceacceleratedcheckout' method id\n *     paypalcommercefastlane: {\n *         onInit: (renderPayPalCardComponent) => renderPayPalCardComponent('#container-id'),\n *         onChange: (showPayPalCardSelector) => showPayPalCardSelector(),\n *         styles: {\n *              root: {\n *                  backgroundColorPrimary: 'transparent',\n *                  errorColor: '#C40B0B',\n *                  fontFamily: 'Montserrat, Helvetica, Arial, sans-serif',\n *              },\n *              input: {\n *                  borderRadius: '0.25rem',\n *                  borderColor: '#9E9E9E',\n *                  focusBorderColor: '#4496F6',\n *              },\n *              toggle: {\n *                  colorPrimary: '#0F005E',\n *                  colorSecondary: '#ffffff',\n *              },\n *              text: {\n *                  body: {\n *                      color: '#222222',\n *                      fontSize: '1rem',\n *                  },\n *                  caption: {\n *                      color: '#515151',\n *                      fontSize: '0.875rem',\n *                  },\n *              },\n *              branding: 'light',\n *         },\n *     },\n * });\n * ```\n */\nexport default interface PayPalCommerceFastlanePaymentInitializeOptions {\n    /**\n     * Is a callback that takes the CSS selector of a container\n     * where the PayPal Fastlane form should be inserted into.\n     */\n    onInit?: (renderPayPalCardComponent: (container: string) => void) => void;\n\n    /**\n     * Is a callback that shows PayPal stored instruments\n     * when get triggered\n     */\n    onChange?: (showPayPalCardSelector: () => Promise<CardInstrument | undefined>) => void;\n\n    /**\n     * Callback that handles errors\n     */\n    onError?: (error: unknown) => void;\n\n    /**\n     * Is a stylisation options for customizing PayPal Fastlane components\n     *\n     * Note: the styles for all PayPalCommerceFastlane strategies should be the same,\n     * because they will be provided to PayPal library only for the first strategy initialization\n     * no matter what strategy was initialised first\n     */\n    styles?: PayPalFastlaneStylesOption;\n}\n\nexport interface WithPayPalCommerceFastlanePaymentInitializeOptions {\n    paypalcommercefastlane?: PayPalCommerceFastlanePaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-fastlane/paypal-commerce-fastlane-payment-strategy.spec.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\nimport { noop } from 'lodash';\n\nimport {\n    CardInstrument,\n    InvalidArgumentError,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodInvalidError,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getConfig,\n    getCustomer,\n    getGuestCustomer,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    createPayPalFastlaneUtils,\n    createPayPalSdkScriptLoader,\n    getPayPalAcceleratedCheckoutPaymentMethod,\n    getPayPalFastlaneAuthenticationResultMock,\n    getPayPalFastlaneSdk,\n    PayPalFastlane,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneSdk,\n    PayPalFastlaneUtils,\n    PayPalSdkScriptLoader,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceRequestSender from '../paypal-commerce-request-sender';\nimport { LiabilityShiftEnum } from '../paypal-commerce-types';\n\nimport PayPalCommerceFastlanePaymentStrategy from './paypal-commerce-fastlane-payment-strategy';\n\ndescribe('PayPalCommerceFastlanePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let paypalFastlane: PayPalFastlane;\n    let paypalCommerceRequestSender: PayPalCommerceRequestSender;\n    let paypalSdkScriptLoader: PayPalSdkScriptLoader;\n    let paypalFastlaneUtils: PayPalFastlaneUtils;\n    let strategy: PayPalCommerceFastlanePaymentStrategy;\n\n    const address = getBillingAddress();\n    const cart = getCart();\n    const guestCustomer = getGuestCustomer();\n    const customer = getCustomer();\n    const storeConfig = getConfig().storeConfig;\n\n    const authenticationResultMock = getPayPalFastlaneAuthenticationResultMock();\n    const customerContextId = 'id123';\n    const paypalOrderId = 'paypalOrderId123';\n\n    const methodId = 'paypalcommerceacceleratedcheckout';\n    const initializationOptions = {\n        methodId,\n        paypalcommercefastlane: {\n            onInit: jest.fn(),\n            onChange: jest.fn(),\n        },\n    };\n\n    const bcAddressMock = {\n        id: 1,\n        type: 'type',\n        address1: 'addressLine1',\n        address2: 'addressLine2',\n        city: 'addressCity',\n        company: 'BigCommerce',\n        countryCode: 'US',\n        country: 'US',\n        customFields: [],\n        firstName: 'John',\n        lastName: 'Doe',\n        phone: '333333333333',\n        postalCode: '03004',\n        stateOrProvince: 'addressState',\n        stateOrProvinceCode: 'addressState',\n    };\n\n    const card = 'card' as const;\n\n    const bcCardMock = {\n        bigpayToken: 'nonce/token',\n        brand: 'Visa',\n        defaultInstrument: false,\n        expiryMonth: '09',\n        expiryYear: '2031',\n        iin: '',\n        last4: '2233',\n        method: 'paypalcommerceacceleratedcheckout',\n        provider: 'paypalcommerceacceleratedcheckout',\n        trustedShippingAddress: false,\n        type: card,\n        untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n    };\n\n    beforeEach(async () => {\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n        paypalFastlane = await paypalFastlaneSdk.Fastlane();\n        paymentMethod = getPayPalAcceleratedCheckoutPaymentMethod();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paypalCommerceRequestSender = new PayPalCommerceRequestSender(createRequestSender());\n        paypalSdkScriptLoader = createPayPalSdkScriptLoader();\n        paypalFastlaneUtils = createPayPalFastlaneUtils();\n\n        strategy = new PayPalCommerceFastlanePaymentStrategy(\n            paymentIntegrationService,\n            paypalCommerceRequestSender,\n            paypalSdkScriptLoader,\n            paypalFastlaneUtils,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod');\n        jest.spyOn(paymentIntegrationService, 'submitOrder');\n        jest.spyOn(paymentIntegrationService, 'submitPayment');\n        jest.spyOn(paymentIntegrationService, 'updatePaymentProviderCustomer');\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue(\n            guestCustomer,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue(\n            guestCustomer,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfig,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n            address,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n            address,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getPaymentProviderCustomer',\n        ).mockReturnValue({});\n        jest.spyOn(paymentIntegrationService.getState(), 'getLocale').mockReturnValue('en-US');\n\n        jest.spyOn(paypalSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(() =>\n            Promise.resolve(paypalFastlaneSdk),\n        );\n\n        jest.spyOn(paypalCommerceRequestSender, 'createOrder').mockResolvedValue({\n            orderId: paypalOrderId,\n            approveUrl: 'url.com',\n        });\n\n        jest.spyOn(paypalFastlaneUtils, 'getPayPalFastlaneOrThrow').mockReturnValue(paypalFastlane);\n        jest.spyOn(paypalFastlaneUtils, 'initializePayPalFastlane');\n        jest.spyOn(paypalFastlaneUtils, 'getStorageSessionId').mockReturnValue(cart.id);\n        jest.spyOn(paypalFastlaneUtils, 'updateStorageSessionId');\n        jest.spyOn(paypalFastlaneUtils, 'removeStorageSessionId');\n        jest.spyOn(paypalFastlaneUtils, 'lookupCustomerOrThrow').mockResolvedValue({\n            customerContextId,\n        });\n        jest.spyOn(paypalFastlaneUtils, 'triggerAuthenticationFlowOrThrow').mockResolvedValue(\n            getPayPalFastlaneAuthenticationResultMock(),\n        );\n        jest.spyOn(paypalFastlaneUtils, 'mapPayPalFastlaneProfileToBcCustomerData').mockReturnValue(\n            {\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [],\n                instruments: [],\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        it('throws an error if methodId is not provided', async () => {\n            try {\n                await strategy.initialize({ methodId: '' });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercefastlane is not provided', async () => {\n            try {\n                await strategy.initialize({ methodId });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercefastlane.onInit is not provided or it is not a function', async () => {\n            try {\n                const options = {\n                    methodId,\n                    paypalcommercefastlane: {},\n                };\n\n                await strategy.initialize(options);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercefastlane.onChange is not provided or it is not a function', async () => {\n            try {\n                const options = {\n                    methodId,\n                    paypalcommercefastlane: {\n                        onInit: jest.fn(),\n                    },\n                };\n\n                await strategy.initialize(options);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('initializes paypal fastlane with correct styles', async () => {\n            const newInitializationOptions = {\n                methodId,\n                paypalcommercefastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(),\n                    styles: {\n                        root: {\n                            backgroundColorPrimary: 'green',\n                            errorColor: 'orange',\n                        },\n                        input: {\n                            borderRadius: '5px',\n                        },\n                    },\n                },\n            };\n\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    isAcceleratedCheckoutEnabled: true,\n                    shouldRunAcceleratedCheckout: true,\n                    isFastlaneEnabled: true,\n                    isFastlaneStylingEnabled: true,\n                    fastlaneStyles: {\n                        fastlaneRootSettingsBackgroundColor: 'red',\n                        fastlaneBrandingSettings: 'branding',\n                    },\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(mockPaymentMethod);\n\n            await strategy.initialize(newInitializationOptions);\n\n            expect(paypalFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n                {\n                    root: {\n                        backgroundColorPrimary: 'red',\n                        errorColor: 'orange',\n                    },\n                    input: {\n                        borderRadius: '5px',\n                    },\n                    branding: 'branding',\n                },\n            );\n        });\n\n        it('loads payment method', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(methodId);\n        });\n\n        it('loads paypal fastlane sdk', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdkScriptLoader.getPayPalFastlaneSdk).toHaveBeenCalledWith(\n                paymentMethod,\n                cart.currency.code,\n                cart.id,\n                'en-US',\n            );\n        });\n\n        it('initializes paypal fastlane in production mode', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                false,\n                {},\n            );\n        });\n\n        it('initializes paypal fastlane in test mode', async () => {\n            paymentMethod.initializationData.isDeveloperModeApplicable = true;\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalFastlaneUtils.initializePayPalFastlane).toHaveBeenCalledWith(\n                paypalFastlaneSdk,\n                true,\n                {},\n            );\n        });\n\n        it('does not trigger lookup method if the customer already authenticated with PayPal Fastlane', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomer',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [],\n                instruments: [],\n            });\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalFastlaneUtils.lookupCustomerOrThrow).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger lookup method for store members', async () => {\n            const storeMember = getCustomer();\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue(\n                storeMember,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalFastlaneUtils.lookupCustomerOrThrow).not.toHaveBeenCalled();\n        });\n\n        it('does not trigger lookup method if authentication flow did not trigger in the same session before page refresh', async () => {\n            jest.spyOn(paypalFastlaneUtils, 'getStorageSessionId').mockReturnValue(\n                'another_session_id_123',\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalFastlaneUtils.lookupCustomerOrThrow).not.toHaveBeenCalled();\n        });\n\n        it('successfully authenticates customer with PayPal Fastlane', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalFastlaneUtils.lookupCustomerOrThrow).toHaveBeenCalledWith(customer.email);\n            expect(paypalFastlaneUtils.triggerAuthenticationFlowOrThrow).toHaveBeenCalledWith(\n                customerContextId,\n            );\n            expect(\n                paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData,\n            ).toHaveBeenCalledWith(methodId, authenticationResultMock);\n            expect(paypalFastlaneUtils.updateStorageSessionId).toHaveBeenCalledWith(cart.id);\n        });\n\n        it('initialises PayPal Fastlane card component', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalFastlane.FastlaneCardComponent).toHaveBeenCalledWith({\n                fields: {\n                    cardholderName: {\n                        enabled: true,\n                        prefill: 'Test Tester',\n                    },\n                    phoneNumber: {\n                        prefill: address.phone,\n                    },\n                },\n            });\n        });\n\n        it('provides callback function to be able to use them on ui', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(initializationOptions.paypalcommercefastlane.onInit).toHaveBeenCalled();\n            expect(initializationOptions.paypalcommercefastlane.onChange).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute()', () => {\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        const mockedInstrumentId = 'mockInstrumentId123';\n\n        const executeOptions = {\n            payment: {\n                methodId,\n            },\n        };\n\n        const executeOptionsWithVaulting = {\n            payment: {\n                methodId,\n                paymentData: {\n                    instrumentId: mockedInstrumentId,\n                },\n            },\n        };\n\n        it('throws an error if payment option is not provided', async () => {\n            try {\n                await strategy.execute({ payment: undefined });\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('successfully places order with credit card flow', async () => {\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(executeOptions);\n\n            expect(paypalCommerceRequestSender.createOrder).toHaveBeenCalledWith(methodId, {\n                cartId: cart.id,\n                fastlaneToken: 'paypal_fastlane_instrument_id_nonce',\n            });\n\n            const paypalFastlaneComponent = await paypalFastlane.FastlaneCardComponent({});\n\n            expect(paypalFastlaneComponent.getPaymentToken).toHaveBeenCalledWith({\n                billingAddress: {\n                    addressLine1: address.address1,\n                    addressLine2: address.address2,\n                    adminArea1: address.stateOrProvinceCode,\n                    adminArea2: address.city,\n                    company: address.company,\n                    countryCode: address.countryCode,\n                    postalCode: address.postalCode,\n                },\n                name: {\n                    fullName: `${address.firstName} ${address.lastName}`,\n                },\n            });\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith({}, undefined);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    shouldSaveInstrument: false,\n                    shouldSetAsDefaultInstrument: false,\n                    formattedPayload: {\n                        paypal_fastlane_token: {\n                            order_id: paypalOrderId,\n                            token: 'paypal_fastlane_instrument_id_nonce',\n                        },\n                    },\n                },\n            });\n            expect(paypalFastlaneUtils.removeStorageSessionId).toHaveBeenCalled();\n        });\n\n        it('throws specific error when get 422 error on payment request', async () => {\n            const initOptions = {\n                methodId,\n                paypalcommercefastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(),\n                    onError: jest.fn(),\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue({\n                name: 'Error',\n                message: 'Payment request failed',\n                response: {\n                    body: {\n                        status: 422,\n                        name: 'INVALID_REQUEST',\n                    },\n                },\n            });\n            await strategy.initialize(initOptions);\n\n            try {\n                await strategy.execute(executeOptions);\n            } catch (error: unknown) {\n                expect(initOptions.paypalcommercefastlane.onError).toHaveBeenCalledWith({\n                    translationKey: 'payment.errors.invalid_request_error',\n                });\n            }\n        });\n\n        it('successfully places order with vaulted instruments flow', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockResolvedValue();\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(executeOptionsWithVaulting);\n\n            expect(paypalCommerceRequestSender.createOrder).toHaveBeenCalledWith(methodId, {\n                cartId: cart.id,\n                fastlaneToken: mockedInstrumentId,\n            });\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith({}, undefined);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        paypal_fastlane_token: {\n                            order_id: paypalOrderId,\n                            token: mockedInstrumentId,\n                        },\n                    },\n                },\n            });\n            expect(paypalFastlaneUtils.removeStorageSessionId).toHaveBeenCalled();\n        });\n\n        it('do not create an order if there is an error while receiving a payment order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const paypalFastlaneComponent = await paypalFastlane.FastlaneCardComponent({});\n\n            jest.spyOn(paypalFastlaneComponent, 'getPaymentToken').mockRejectedValue(\n                new Error('input data error'),\n            );\n\n            try {\n                await strategy.execute(executeOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n                expect(paypalCommerceRequestSender.createOrder).not.toHaveBeenCalled();\n            }\n        });\n\n        describe('3D Secure', () => {\n            const paymentMethodMock = (is3dsEnabled = true) => ({\n                ...getPayPalAcceleratedCheckoutPaymentMethod(),\n                config: {\n                    is3dsEnabled,\n                },\n            });\n\n            const threeDomainSecureComponentMock = {\n                isEligible: jest.fn().mockReturnValue(Promise.resolve(true)),\n                show: jest.fn(),\n            };\n\n            beforeEach(() => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(paymentMethodMock());\n            });\n\n            it('creates order with fastlaneToken when 3ds is on', async () => {\n                const paypalFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        show: jest.fn().mockReturnValue({\n                            liabilityShift: LiabilityShiftEnum.Yes,\n                            authenticationState: 'succeeded',\n                            nonce: 'paypal_fastlane_instrument_id_nonce_3ds',\n                        }),\n                    },\n                };\n\n                jest.spyOn(paypalSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(paypalFastlaneSdkMock),\n                );\n                await strategy.initialize(initializationOptions);\n\n                await strategy.execute(executeOptions);\n\n                expect(paypalCommerceRequestSender.createOrder).toHaveBeenCalledWith(methodId, {\n                    cartId: cart.id,\n                    fastlaneToken: 'paypal_fastlane_instrument_id_nonce_3ds',\n                });\n            });\n\n            it('does not create order if liability shift is not equal \"YES\"', async () => {\n                const paypalFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        show: jest.fn().mockReturnValue({\n                            liabilityShift: LiabilityShiftEnum.Unknown,\n                            authenticationState: 'succeeded',\n                            nonce: 'paypal_fastlane_instrument_id_nonce_3ds',\n                        }),\n                    },\n                };\n\n                jest.spyOn(paypalSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(paypalFastlaneSdkMock),\n                );\n                await strategy.initialize(initializationOptions);\n\n                try {\n                    await strategy.execute(executeOptions);\n                } catch (error) {\n                    expect(error).toBeInstanceOf(PaymentMethodInvalidError);\n                    expect(paypalCommerceRequestSender.createOrder).not.toHaveBeenCalled();\n                }\n            });\n\n            it('calls threeDomainSecureComponent isEligible', async () => {\n                const paypalFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        isEligible: jest.fn().mockReturnValue(Promise.resolve(false)),\n                    },\n                };\n\n                jest.spyOn(paypalSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(paypalFastlaneSdkMock),\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                await strategy.execute(executeOptions);\n\n                expect(paypalFastlaneSdkMock.ThreeDomainSecureClient.isEligible).toHaveBeenCalled();\n            });\n\n            it('calls threeDomainSecureComponent show', async () => {\n                const paypalFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        show: jest.fn().mockReturnValue({\n                            liabilityShift: LiabilityShiftEnum.Possible,\n                            authenticationState: 'succeeded',\n                            nonce: 'paypal_fastlane_instrument_id_nonce_3ds',\n                        }),\n                    },\n                };\n\n                jest.spyOn(paypalSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(paypalFastlaneSdkMock),\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                await strategy.execute(executeOptions);\n\n                expect(paypalFastlaneSdkMock.ThreeDomainSecureClient.show).toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'paypalcommerceacceleratedcheckout',\n                        paymentData: {\n                            formattedPayload: expect.objectContaining({\n                                paypal_fastlane_token: expect.objectContaining({\n                                    token: 'paypal_fastlane_instrument_id_nonce_3ds',\n                                    order_id: 'paypalOrderId123',\n                                }),\n                            }),\n                            shouldSaveInstrument: false,\n                            shouldSetAsDefaultInstrument: false,\n                        },\n                    }),\n                );\n            });\n\n            it('catch unrecognized states when show() resolves due to customers issue (e.g. Access Control Server failures)', async () => {\n                const paypalFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        show: jest.fn().mockReturnValue({\n                            liabilityShift: LiabilityShiftEnum.Possible,\n                            authenticationState: 'UNRECOGNIZED_AUTH_STATE',\n                            nonce: 'paypal_fastlane_instrument_id_nonce_3ds',\n                        }),\n                    },\n                };\n\n                jest.spyOn(paypalSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(paypalFastlaneSdkMock),\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                try {\n                    await strategy.execute(executeOptions);\n                } catch (error) {\n                    expect(error).toBeInstanceOf(Error);\n                }\n            });\n\n            it('throws an error if liabilityShift no or unknown', async () => {\n                const paypalFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        show: jest.fn().mockReturnValue({\n                            liabilityShift: LiabilityShiftEnum.No,\n                            authenticationState: 'success',\n                            nonce: 'paypal_fastlane_instrument_id_nonce_3ds',\n                        }),\n                    },\n                };\n\n                jest.spyOn(paypalSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(paypalFastlaneSdkMock),\n                );\n\n                await strategy.initialize(initializationOptions);\n\n                try {\n                    await strategy.execute(executeOptions);\n                } catch (error) {\n                    expect(error).toBeInstanceOf(Error);\n                }\n            });\n\n            it('throws an error if authenticationState is errored', async () => {\n                const paypalFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        show: jest.fn().mockReturnValue({\n                            liabilityShift: LiabilityShiftEnum.Possible,\n                            authenticationState: 'errored',\n                            nonce: 'paypal_fastlane_instrument_id_nonce_3ds',\n                        }),\n                    },\n                };\n\n                jest.spyOn(paypalSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(paypalFastlaneSdkMock),\n                );\n                await strategy.initialize(initializationOptions);\n\n                try {\n                    await strategy.execute(executeOptions);\n                } catch (error) {\n                    expect(error).toBeInstanceOf(Error);\n                }\n            });\n\n            it('creates order with payment token when 3ds is on and isEligible false', async () => {\n                const paypalFastlaneSdkMock = {\n                    ...paypalFastlaneSdk,\n                    ThreeDomainSecureClient: {\n                        ...threeDomainSecureComponentMock,\n                        isEligible: jest.fn().mockReturnValue(Promise.resolve(false)),\n                    },\n                };\n\n                jest.spyOn(paypalSdkScriptLoader, 'getPayPalFastlaneSdk').mockImplementation(() =>\n                    Promise.resolve(paypalFastlaneSdkMock),\n                );\n                await strategy.initialize(initializationOptions);\n\n                await strategy.execute(executeOptions);\n\n                expect(paypalCommerceRequestSender.createOrder).toHaveBeenCalledWith(methodId, {\n                    cartId: cart.id,\n                    fastlaneToken: 'paypal_fastlane_instrument_id_nonce',\n                });\n            });\n        });\n    });\n\n    describe('#onInit option callback', () => {\n        it('throws an error if container is not provided', async () => {\n            let onInitCallback = noop;\n\n            const onInitImplementation = (renderComponentCallback: (container: string) => void) => {\n                onInitCallback = renderComponentCallback;\n            };\n\n            await strategy.initialize({\n                methodId,\n                paypalcommercefastlane: {\n                    onInit: jest.fn(onInitImplementation),\n                    onChange: jest.fn(),\n                },\n            });\n\n            try {\n                onInitCallback();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(Error);\n            }\n        });\n\n        it('renders paypal fastlane credit card component', async () => {\n            const containerId = 'containerIdMock';\n            let onInitCallback: (container: string) => void = noop;\n\n            const onInitImplementation = (renderComponentCallback: (container: string) => void) => {\n                onInitCallback = renderComponentCallback;\n            };\n\n            await strategy.initialize({\n                methodId,\n                paypalcommercefastlane: {\n                    onInit: jest.fn(onInitImplementation),\n                    onChange: jest.fn(),\n                },\n            });\n\n            onInitCallback(containerId);\n\n            const paypalFastlaneComponent = await paypalFastlane.FastlaneCardComponent({});\n\n            expect(paypalFastlaneComponent.render).toHaveBeenCalledWith(containerId);\n        });\n    });\n\n    describe('#onChange option callback', () => {\n        it('returns selected card instrument', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomer',\n            ).mockReturnValue({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [bcAddressMock],\n                instruments: [bcCardMock],\n            });\n\n            jest.spyOn(paypalFastlane.profile, 'showCardSelector').mockResolvedValue({\n                selectionChanged: true,\n                selectedCard: {\n                    id: 'nonce/token',\n                    paymentSource: {\n                        card: {\n                            brand: 'Visa',\n                            expiry: '2030-12',\n                            lastDigits: '1111',\n                            name: 'John Doe',\n                            billingAddress: {\n                                addressLine1: 'addressLine1',\n                                adminArea1: 'adminArea1',\n                                adminArea2: 'adminArea2',\n                                postalCode: '03004',\n                                countryCode: 'US',\n                            },\n                        },\n                    },\n                },\n            });\n\n            let onChangeCallback: () => Promise<CardInstrument | undefined> = () =>\n                Promise.resolve(undefined);\n            const onChangeImplementation = (\n                showPayPalCardSelector: () => Promise<CardInstrument | undefined>,\n            ) => {\n                onChangeCallback = showPayPalCardSelector;\n            };\n\n            await strategy.initialize({\n                methodId,\n                paypalcommercefastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(onChangeImplementation),\n                },\n            });\n\n            const result = await onChangeCallback();\n\n            const paypalToBcInstrument = {\n                bigpayToken: 'nonce/token',\n                brand: 'Visa',\n                defaultInstrument: false,\n                expiryMonth: '12',\n                expiryYear: '2030',\n                iin: '',\n                last4: '1111',\n                method: 'paypalcommerceacceleratedcheckout',\n                provider: 'paypalcommerceacceleratedcheckout',\n                trustedShippingAddress: false,\n                type: 'card',\n                untrustedShippingCardVerificationMode: 'pan',\n            };\n\n            expect(paymentIntegrationService.updatePaymentProviderCustomer).toHaveBeenCalledWith({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [bcAddressMock],\n                instruments: [paypalToBcInstrument],\n            });\n\n            expect(result).toEqual(paypalToBcInstrument);\n        });\n\n        it('returns undefined if the customer selects the same instrument or closes a popup window', async () => {\n            jest.spyOn(paypalFastlane.profile, 'showCardSelector').mockResolvedValue({\n                selectionChanged: false,\n                selectedCard: {\n                    id: 'nonce/token',\n                    paymentSource: {\n                        card: {\n                            brand: 'Visa',\n                            expiry: '2030-12',\n                            lastDigits: '1111',\n                            name: 'John Doe',\n                            billingAddress: {\n                                addressLine1: 'addressLine1',\n                                adminArea1: 'adminArea1',\n                                adminArea2: 'adminArea2',\n                                postalCode: '03004',\n                                countryCode: 'US',\n                            },\n                        },\n                    },\n                },\n            });\n\n            let onChangeCallback: () => Promise<CardInstrument | undefined> = () =>\n                Promise.resolve(undefined);\n            const onChangeImplementation = (\n                showPayPalCardSelector: () => Promise<CardInstrument | undefined>,\n            ) => {\n                onChangeCallback = showPayPalCardSelector;\n            };\n\n            await strategy.initialize({\n                methodId,\n                paypalcommercefastlane: {\n                    onInit: jest.fn(),\n                    onChange: jest.fn(onChangeImplementation),\n                },\n            });\n\n            const result = await onChangeCallback();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-fastlane/paypal-commerce-fastlane-payment-strategy.ts",
    "content": "import {\n    CardInstrument,\n    InvalidArgumentError,\n    isHostedInstrumentLike,\n    isVaultedInstrument,\n    OrderFinalizationNotRequiredError,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodClientUnavailableError,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getFastlaneStyles,\n    isPayPalFastlaneCustomer,\n    isPaypalFastlaneRequestError,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneCardComponentMethods,\n    PayPalFastlaneCardComponentOptions,\n    PayPalFastlanePaymentFormattedPayload,\n    PayPalFastlaneSdk,\n    PayPalFastlaneUtils,\n    PayPalInitializationData,\n    PayPalSdkScriptLoader,\n    TDSecureAuthenticationState,\n    TDSecureVerificationMethod,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceRequestSender from '../paypal-commerce-request-sender';\nimport { LiabilityShiftEnum } from '../paypal-commerce-types';\n\nimport PayPalCommerceFastlanePaymentInitializeOptions, {\n    WithPayPalCommerceFastlanePaymentInitializeOptions,\n} from './paypal-commerce-fastlane-payment-initialize-options';\n\nexport default class PaypalCommerceFastlanePaymentStrategy implements PaymentStrategy {\n    private paypalComponentMethods?: PayPalFastlaneCardComponentMethods;\n    private paypalFastlaneSdk?: PayPalFastlaneSdk;\n    private threeDSVerificationMethod?: string;\n    private paypalcommercefastlane?: PayPalCommerceFastlanePaymentInitializeOptions;\n    private orderId?: string;\n    private methodId?: string;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalCommerceRequestSender: PayPalCommerceRequestSender,\n        private paypalSdkScriptLoader: PayPalSdkScriptLoader,\n        private paypalFastlaneUtils: PayPalFastlaneUtils,\n    ) {}\n\n    /**\n     *\n     * Default methods\n     *\n     * */\n    async initialize(\n        options: PaymentInitializeOptions & WithPayPalCommerceFastlanePaymentInitializeOptions,\n    ): Promise<void> {\n        const { methodId, paypalcommercefastlane } = options;\n\n        this.methodId = methodId;\n\n        this.paypalcommercefastlane = paypalcommercefastlane;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!paypalcommercefastlane) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommercefastlane\" argument is not provided.',\n            );\n        }\n\n        if (!paypalcommercefastlane.onInit || typeof paypalcommercefastlane.onInit !== 'function') {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommercefastlane.onInit\" argument is not provided or it is not a function.',\n            );\n        }\n\n        if (\n            !paypalcommercefastlane.onChange ||\n            typeof paypalcommercefastlane.onChange !== 'function'\n        ) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommercefastlane.onChange\" argument is not provided or it is not a function.',\n            );\n        }\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n        const { isDeveloperModeApplicable, isFastlaneStylingEnabled } =\n            paymentMethod.initializationData || {};\n\n        this.threeDSVerificationMethod =\n            paymentMethod.initializationData?.threeDSVerificationMethod;\n\n        this.paypalFastlaneSdk = await this.paypalSdkScriptLoader.getPayPalFastlaneSdk(\n            paymentMethod,\n            cart.currency.code,\n            cart.id,\n            state.getLocale(),\n        );\n\n        const paypalFastlaneStyling = isFastlaneStylingEnabled\n            ? paymentMethod?.initializationData?.fastlaneStyles\n            : {};\n\n        const fastlaneStyles = getFastlaneStyles(\n            paypalFastlaneStyling,\n            paypalcommercefastlane?.styles,\n        );\n\n        await this.paypalFastlaneUtils.initializePayPalFastlane(\n            this.paypalFastlaneSdk,\n            !!isDeveloperModeApplicable,\n            fastlaneStyles,\n        );\n\n        if (this.shouldRunAuthenticationFlow()) {\n            await this.runPayPalAuthenticationFlowOrThrow(methodId);\n        }\n\n        await this.initializePayPalPaymentComponent();\n\n        paypalcommercefastlane.onInit((container: string) =>\n            this.renderPayPalPaymentComponent(container),\n        );\n        paypalcommercefastlane.onChange(() => this.handlePayPalStoredInstrumentChange(methodId));\n    }\n\n    async execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = orderRequest;\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const { paymentData, methodId } = payment;\n\n        const isVaultedFlow = paymentData && isVaultedInstrument(paymentData);\n\n        try {\n            await this.paymentIntegrationService.submitOrder(order, options);\n\n            const paymentPayload = isVaultedFlow\n                ? await this.prepareVaultedInstrumentPaymentPayload(methodId, paymentData)\n                : await this.preparePaymentPayload(methodId, paymentData);\n\n            await this.paymentIntegrationService.submitPayment<PayPalFastlanePaymentFormattedPayload>(\n                paymentPayload,\n            );\n\n            this.paypalFastlaneUtils.removeStorageSessionId();\n        } catch (error) {\n            if (\n                isPaypalFastlaneRequestError(error) &&\n                error.response.body.name === 'INVALID_REQUEST'\n            ) {\n                const invalidRequestError = {\n                    translationKey: 'payment.errors.invalid_request_error',\n                };\n\n                this.handleError(invalidRequestError);\n\n                return Promise.reject();\n            }\n\n            if (error instanceof Error && error.name !== 'FastlaneError') {\n                throw error;\n            }\n\n            return Promise.reject();\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    async deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    /**\n     *\n     * Authentication flow methods\n     *\n     */\n    private shouldRunAuthenticationFlow(): boolean {\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        const customer = state.getCustomerOrThrow();\n        const paymentProviderCustomer = state.getPaymentProviderCustomer();\n        const paypalFastlaneCustomer = isPayPalFastlaneCustomer(paymentProviderCustomer)\n            ? paymentProviderCustomer\n            : {};\n\n        const paypalFastlaneSessionId = this.paypalFastlaneUtils.getStorageSessionId();\n\n        if (\n            !customer.isGuest ||\n            paypalFastlaneCustomer?.authenticationState ===\n                PayPalFastlaneAuthenticationState.CANCELED\n        ) {\n            return false;\n        }\n\n        return !paypalFastlaneCustomer?.authenticationState && paypalFastlaneSessionId === cart.id;\n    }\n\n    private async runPayPalAuthenticationFlowOrThrow(methodId: string): Promise<void> {\n        try {\n            const state = this.paymentIntegrationService.getState();\n            const cart = state.getCartOrThrow();\n            const customer = state.getCustomer();\n            const billingAddress = state.getBillingAddress();\n            const customerEmail = customer?.email || billingAddress?.email || '';\n\n            const { customerContextId } = await this.paypalFastlaneUtils.lookupCustomerOrThrow(\n                customerEmail,\n            );\n\n            const authenticationResult =\n                await this.paypalFastlaneUtils.triggerAuthenticationFlowOrThrow(customerContextId);\n\n            const { authenticationState, addresses, instruments } =\n                this.paypalFastlaneUtils.mapPayPalFastlaneProfileToBcCustomerData(\n                    methodId,\n                    authenticationResult,\n                );\n\n            await this.paymentIntegrationService.updatePaymentProviderCustomer({\n                authenticationState,\n                addresses,\n                instruments,\n            });\n\n            const isAuthenticationFlowCanceled =\n                authenticationResult.authenticationState ===\n                PayPalFastlaneAuthenticationState.CANCELED;\n\n            if (isAuthenticationFlowCanceled) {\n                this.paypalFastlaneUtils.removeStorageSessionId();\n            } else {\n                this.paypalFastlaneUtils.updateStorageSessionId(cart.id);\n            }\n        } catch (error) {\n            // Info: Do not throw anything here to avoid blocking customer from passing checkout flow\n        }\n    }\n\n    /**\n     *\n     * PayPal Fastlane Card Component rendering method\n     *\n     */\n    private async initializePayPalPaymentComponent(): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const billingAddress = state.getBillingAddressOrThrow();\n        const phone = billingAddress.phone;\n        const fullName = `${billingAddress.firstName} ${billingAddress.lastName}`.trim();\n\n        const paypalFastlane = this.paypalFastlaneUtils.getPayPalFastlaneOrThrow();\n\n        const cardComponentOptions: PayPalFastlaneCardComponentOptions = {\n            fields: {\n                cardholderName: {\n                    prefill: fullName,\n                    enabled: true,\n                },\n                ...(phone && {\n                    phoneNumber: {\n                        prefill: phone,\n                    },\n                }),\n            },\n        };\n\n        this.paypalComponentMethods = await paypalFastlane.FastlaneCardComponent(\n            cardComponentOptions,\n        );\n    }\n\n    private renderPayPalPaymentComponent(container?: string): void {\n        const paypalComponentMethods = this.getPayPalComponentMethodsOrThrow();\n\n        if (!container) {\n            throw new InvalidArgumentError(\n                'Unable to render card component because \"container\" argument is not provided.',\n            );\n        }\n\n        paypalComponentMethods.render(container);\n    }\n\n    private getPayPalComponentMethodsOrThrow(): PayPalFastlaneCardComponentMethods {\n        if (!this.paypalComponentMethods) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.paypalComponentMethods;\n    }\n\n    /**\n     *\n     * Payment Payload preparation methods\n     *\n     */\n    private async prepareVaultedInstrumentPaymentPayload(\n        methodId: string,\n        paymentData: VaultedInstrument,\n    ): Promise<Payment<PayPalFastlanePaymentFormattedPayload>> {\n        const { instrumentId } = paymentData;\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n        const is3DSEnabled = paymentMethod.config.is3dsEnabled;\n\n        const nonce = is3DSEnabled ? await this.get3DSNonce(instrumentId) : instrumentId;\n\n        await this.createOrder(nonce);\n\n        return {\n            methodId,\n            paymentData: {\n                formattedPayload: {\n                    paypal_fastlane_token: {\n                        order_id: this.orderId,\n                        token: nonce,\n                    },\n                },\n            },\n        };\n    }\n\n    private async preparePaymentPayload(\n        methodId: string,\n        paymentData: OrderPaymentRequestBody['paymentData'],\n    ): Promise<Payment<PayPalFastlanePaymentFormattedPayload>> {\n        const state = this.paymentIntegrationService.getState();\n        const billingAddress = state.getBillingAddressOrThrow();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n        const fullName = `${billingAddress.firstName} ${billingAddress.lastName}`.trim();\n\n        const { getPaymentToken } = this.getPayPalComponentMethodsOrThrow();\n\n        const { id } = await getPaymentToken({\n            name: { fullName },\n            billingAddress: this.paypalFastlaneUtils.mapBcToPayPalAddress(billingAddress),\n        });\n\n        const is3DSEnabled = paymentMethod.config.is3dsEnabled;\n\n        const nonce = is3DSEnabled ? await this.get3DSNonce(id) : id;\n\n        await this.createOrder(nonce);\n\n        const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n            isHostedInstrumentLike(paymentData) ? paymentData : {};\n\n        return {\n            methodId,\n            paymentData: {\n                ...paymentData,\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n                formattedPayload: {\n                    paypal_fastlane_token: {\n                        order_id: this.orderId,\n                        token: nonce,\n                    },\n                },\n            },\n        };\n    }\n\n    private async createOrder(id: string): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const cartId = state.getCartOrThrow().id;\n\n        if (this.methodId) {\n            const { orderId } = await this.paypalCommerceRequestSender.createOrder(this.methodId, {\n                cartId,\n                fastlaneToken: id,\n            });\n\n            this.orderId = orderId;\n        }\n    }\n\n    /**\n     *\n     * 3DSecure methods\n     *\n     * */\n    private async get3DSNonce(nonce: string): Promise<string> {\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        const order = state.getOrderOrThrow();\n        const checkoutUrl = state.getStoreConfigOrThrow().links.checkoutLink;\n\n        const threeDomainSecureComponent = this.paypalFastlaneSdk?.ThreeDomainSecureClient;\n\n        if (!threeDomainSecureComponent) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        const threeDomainSecureParameters = {\n            amount: order.orderAmount.toFixed(2),\n            currency: cart.currency.code,\n            nonce,\n            threeDSRequested: this.threeDSVerificationMethod === TDSecureVerificationMethod.Always,\n            transactionContext: {\n                experience_context: {\n                    locale: 'en-US',\n                    return_url: checkoutUrl,\n                    cancel_url: checkoutUrl,\n                },\n            },\n        };\n\n        const isThreeDomainSecureEligible = await threeDomainSecureComponent.isEligible(\n            threeDomainSecureParameters,\n        );\n\n        if (\n            this.threeDSVerificationMethod === TDSecureVerificationMethod.Always &&\n            !isThreeDomainSecureEligible\n        ) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        if (isThreeDomainSecureEligible) {\n            const {\n                liabilityShift,\n                authenticationState,\n                nonce: threeDSNonce,\n            } = await threeDomainSecureComponent.show();\n\n            if (\n                liabilityShift === LiabilityShiftEnum.No ||\n                liabilityShift === LiabilityShiftEnum.Unknown ||\n                authenticationState === TDSecureAuthenticationState.Errored ||\n                authenticationState === TDSecureAuthenticationState.Cancelled\n            ) {\n                throw new PaymentMethodInvalidError();\n            }\n\n            if (\n                authenticationState === TDSecureAuthenticationState.Succeeded &&\n                [LiabilityShiftEnum.Yes, LiabilityShiftEnum.Possible].includes(liabilityShift)\n            ) {\n                return threeDSNonce;\n            }\n\n            throw new PaymentMethodInvalidError();\n        }\n\n        return nonce;\n    }\n\n    /**\n     *\n     * PayPal Fastlane instrument change\n     *\n     */\n    private async handlePayPalStoredInstrumentChange(\n        methodId: string,\n    ): Promise<CardInstrument | undefined> {\n        const paypalAxoSdk = this.paypalFastlaneUtils.getPayPalFastlaneOrThrow();\n\n        const { selectionChanged, selectedCard } = await paypalAxoSdk.profile.showCardSelector();\n\n        if (selectionChanged) {\n            const state = this.paymentIntegrationService.getState();\n            const paymentProviderCustomer = state.getPaymentProviderCustomer();\n            const paypalFastlaneCustomer = isPayPalFastlaneCustomer(paymentProviderCustomer)\n                ? paymentProviderCustomer\n                : {};\n\n            const selectedInstrument = this.paypalFastlaneUtils.mapPayPalToBcInstrument(\n                methodId,\n                selectedCard,\n            )[0];\n\n            await this.paymentIntegrationService.updatePaymentProviderCustomer({\n                ...paypalFastlaneCustomer,\n                instruments: [selectedInstrument],\n            });\n\n            return selectedInstrument;\n        }\n\n        return undefined;\n    }\n\n    private handleError(error: unknown): void {\n        if (\n            this.paypalcommercefastlane?.onError &&\n            typeof this.paypalcommercefastlane.onError === 'function'\n        ) {\n            this.paypalcommercefastlane.onError(error);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-integration-service.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BuyNowCartCreationError,\n    Cart,\n    Consignment,\n    MissingDataError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getBuyNowCartRequestBody,\n    getCart,\n    getConsignment,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    getBillingAddressFromOrderDetails,\n    getPayPalCommerceOrderDetails,\n    getPayPalCommercePaymentMethod,\n    getPayPalSDKMock,\n    getShippingAddressFromOrderDetails,\n} from './mocks';\nimport PayPalCommerceIntegrationService from './paypal-commerce-integration-service';\nimport PayPalCommerceRequestSender from './paypal-commerce-request-sender';\nimport PayPalCommerceScriptLoader from './paypal-commerce-script-loader';\nimport {\n    PayPalOrderStatus,\n    PayPalSDK,\n    StyleButtonColor,\n    StyleButtonLabel,\n    StyleButtonShape,\n} from './paypal-commerce-types';\n\ndescribe('PayPalCommerceIntegrationService', () => {\n    let buyNowCart: Cart;\n    let cart: Cart;\n    let consignments: Consignment[];\n    let formPoster: FormPoster;\n    let requestSender: RequestSender;\n    let subject: PayPalCommerceIntegrationService;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalCommerceRequestSender: PayPalCommerceRequestSender;\n    let paypalCommerceScriptLoader: PayPalCommerceScriptLoader;\n    let paypalSdk: PayPalSDK;\n\n    const defaultMethodId = 'paypalcommerce';\n    const defaultGatewayId = 'paypalcommercealternativemethods';\n    const mockedOrderId = 'order123';\n\n    beforeEach(() => {\n        buyNowCart = getBuyNowCart();\n        cart = getCart();\n        consignments = [getConsignment()];\n\n        paymentMethod = getPayPalCommercePaymentMethod();\n        paypalSdk = getPayPalSDKMock();\n\n        formPoster = createFormPoster();\n        requestSender = createRequestSender();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paypalCommerceRequestSender = new PayPalCommerceRequestSender(requestSender);\n        paypalCommerceScriptLoader = new PayPalCommerceScriptLoader(getScriptLoader());\n\n        subject = new PayPalCommerceIntegrationService(\n            formPoster,\n            paymentIntegrationService,\n            paypalCommerceRequestSender,\n            paypalCommerceScriptLoader,\n        );\n\n        const state = paymentIntegrationService.getState();\n\n        jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(paymentMethod);\n        jest.spyOn(state, 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(state, 'getConsignmentsOrThrow').mockReturnValue(consignments);\n        jest.spyOn(state, 'getLocale').mockReturnValue('en-US');\n\n        jest.spyOn(paypalCommerceScriptLoader, 'getPayPalSDK').mockResolvedValue(paypalSdk);\n    });\n\n    it('creates an instance of the PayPalCommerceIntegrationService class', () => {\n        expect(subject).toBeInstanceOf(PayPalCommerceIntegrationService);\n    });\n\n    describe('#loadPayPalSdk', () => {\n        it('loads paypal sdk', async () => {\n            const output = await subject.loadPayPalSdk(defaultMethodId, undefined, false, false);\n\n            expect(paypalCommerceScriptLoader.getPayPalSDK).toHaveBeenCalledWith(\n                paymentMethod,\n                cart.currency.code,\n                'en-US',\n                false,\n                false,\n            );\n            expect(output).toBe(paypalSdk);\n        });\n\n        it('loads paypal sdk with provided currency code', async () => {\n            const providedCurrencyCode = 'UAH';\n            const output = await subject.loadPayPalSdk(\n                defaultMethodId,\n                providedCurrencyCode,\n                false,\n                false,\n            );\n\n            expect(paypalCommerceScriptLoader.getPayPalSDK).toHaveBeenCalledWith(\n                paymentMethod,\n                providedCurrencyCode,\n                'en-US',\n                false,\n                false,\n            );\n            expect(output).toBe(paypalSdk);\n        });\n    });\n\n    describe('#getPayPalSdkOrThrow', () => {\n        it('returns paypal sdk if it was loaded earlier', async () => {\n            await subject.loadPayPalSdk(defaultMethodId, undefined, false);\n\n            const output = subject.getPayPalSdkOrThrow();\n\n            expect(output).toBe(paypalSdk);\n        });\n\n        it('throws an error if paypal sdk is not defined', () => {\n            try {\n                subject.getPayPalSdkOrThrow();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n\n    describe('#createBuyNowCartOrThrow', () => {\n        it('throws an error there is no cart request body by calling callback from buyNowInitializeOptions', async () => {\n            const buyNowInitializeOptionsMock = {\n                getBuyNowCartRequestBody: jest.fn(),\n            };\n\n            try {\n                await subject.createBuyNowCartOrThrow(buyNowInitializeOptionsMock);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('successfully creates buy now cart', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockResolvedValue(buyNowCart);\n\n            const output = await subject.createBuyNowCartOrThrow({\n                getBuyNowCartRequestBody,\n            });\n\n            expect(output).toBe(buyNowCart);\n        });\n\n        it('throws an error if there is something went wrong during buy now cart creation process', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockImplementation(() =>\n                Promise.reject(new Error()),\n            );\n\n            try {\n                await subject.createBuyNowCartOrThrow({\n                    getBuyNowCartRequestBody,\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(BuyNowCartCreationError);\n            }\n        });\n    });\n\n    describe('#createOrder', () => {\n        it('successfully creates paypal order', async () => {\n            jest.spyOn(paypalCommerceRequestSender, 'createOrder').mockResolvedValue({\n                orderId: mockedOrderId,\n                approveUrl: 'url.com',\n            });\n\n            const output = await subject.createOrder(defaultMethodId);\n\n            expect(paypalCommerceRequestSender.createOrder).toHaveBeenCalledWith(defaultMethodId, {\n                cartId: cart.id,\n            });\n            expect(output).toBe(mockedOrderId);\n        });\n\n        it('successfully creates paypal order with provided instrument data', async () => {\n            jest.spyOn(paypalCommerceRequestSender, 'createOrder').mockResolvedValue({\n                orderId: mockedOrderId,\n                approveUrl: 'url.com',\n            });\n\n            const vaultedInstrumentData = { instrumentId: 'vaultedInstrumentIdMock' };\n\n            const output = await subject.createOrder(defaultMethodId, vaultedInstrumentData);\n\n            expect(paypalCommerceRequestSender.createOrder).toHaveBeenCalledWith(defaultMethodId, {\n                cartId: cart.id,\n                instrumentId: vaultedInstrumentData.instrumentId,\n            });\n            expect(output).toBe(mockedOrderId);\n        });\n    });\n\n    describe('#updateOrder', () => {\n        it('successfully updates order', async () => {\n            jest.spyOn(paypalCommerceRequestSender, 'updateOrder').mockResolvedValue({\n                statusCode: 200,\n            });\n\n            await subject.updateOrder();\n\n            expect(paypalCommerceRequestSender.updateOrder).toHaveBeenCalledWith({\n                availableShippingOptions: consignments[0].availableShippingOptions,\n                cartId: cart.id,\n                selectedShippingOption: consignments[0].selectedShippingOption,\n            });\n        });\n\n        it('throws an error if something went wrong during order update process', async () => {\n            jest.spyOn(paypalCommerceRequestSender, 'updateOrder').mockImplementation(() =>\n                Promise.reject(new Error()),\n            );\n\n            try {\n                await subject.updateOrder();\n            } catch (error) {\n                expect(error).toBeInstanceOf(RequestError);\n            }\n        });\n    });\n\n    describe('#getOrderStatus', () => {\n        it('successfully updates order', async () => {\n            jest.spyOn(paypalCommerceRequestSender, 'getOrderStatus').mockResolvedValue({\n                status: PayPalOrderStatus.Approved,\n            });\n\n            await subject.getOrderStatus();\n\n            expect(paypalCommerceRequestSender.getOrderStatus).toHaveBeenCalled();\n        });\n\n        it('calls getOrderStatus with proper data', async () => {\n            jest.spyOn(paypalCommerceRequestSender, 'getOrderStatus').mockResolvedValue({\n                status: PayPalOrderStatus.Approved,\n            });\n\n            await subject.getOrderStatus('paypalcommercealternativemethods', {\n                params: { useMetaData: true },\n            });\n\n            expect(paypalCommerceRequestSender.getOrderStatus).toHaveBeenCalledWith(\n                'paypalcommercealternativemethods',\n                {\n                    params: {\n                        useMetaData: true,\n                    },\n                },\n            );\n        });\n\n        it('throws an error if something went wrong during requesting order status', async () => {\n            jest.spyOn(paypalCommerceRequestSender, 'getOrderStatus').mockImplementation(() =>\n                Promise.reject(new Error()),\n            );\n\n            try {\n                await subject.getOrderStatus();\n            } catch (error) {\n                expect(error).toBeInstanceOf(RequestError);\n            }\n        });\n    });\n\n    describe('#tokenizePayment', () => {\n        beforeEach(() => {\n            jest.spyOn(formPoster, 'postForm').mockImplementation(jest.fn);\n        });\n\n        it('throws an error if order id is not provided', () => {\n            try {\n                subject.tokenizePayment(defaultMethodId);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('successfully posts the form data', () => {\n            subject.tokenizePayment(defaultMethodId, mockedOrderId);\n\n            expect(formPoster.postForm).toHaveBeenCalledWith('/checkout.php', {\n                payment_type: 'paypal',\n                action: 'set_external_checkout',\n                provider: defaultMethodId,\n                order_id: mockedOrderId,\n            });\n        });\n\n        it('successfully posts the form data with buy now cart id', () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                buyNowCart,\n            );\n\n            subject.tokenizePayment(defaultMethodId, mockedOrderId);\n\n            expect(formPoster.postForm).toHaveBeenCalledWith('/checkout.php', {\n                payment_type: 'paypal',\n                action: 'set_external_checkout',\n                provider: defaultMethodId,\n                order_id: mockedOrderId,\n                cart_id: buyNowCart.id,\n            });\n        });\n    });\n\n    describe('#submitPayment', () => {\n        it('successfully submits payment', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n            const paymentDataMock = {\n                formattedPayload: {\n                    vault_payment_instrument: null,\n                    set_as_default_stored_instrument: null,\n                    device_info: null,\n                    method_id: defaultMethodId,\n                    paypal_account: {\n                        order_id: mockedOrderId,\n                    },\n                },\n            };\n\n            await subject.submitPayment(defaultMethodId, mockedOrderId);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: defaultMethodId,\n                paymentData: paymentDataMock,\n            });\n        });\n\n        it('successfully submits payment with provided gateway', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n            const paymentDataMock = {\n                formattedPayload: {\n                    vault_payment_instrument: null,\n                    set_as_default_stored_instrument: null,\n                    device_info: null,\n                    method_id: defaultMethodId,\n                    paypal_account: {\n                        order_id: mockedOrderId,\n                    },\n                },\n            };\n\n            await subject.submitPayment(defaultMethodId, mockedOrderId, defaultGatewayId);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: defaultMethodId,\n                paymentData: paymentDataMock,\n                gatewayId: defaultGatewayId,\n            });\n        });\n    });\n\n    describe('#getShippingOptionOrThrow', () => {\n        it('returns selected shipping option', () => {\n            const consignment = getConsignment();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getConsignmentsOrThrow',\n            ).mockReturnValue([consignment]);\n\n            const output = subject.getShippingOptionOrThrow(consignment.selectedShippingOption?.id);\n\n            expect(output).toStrictEqual(consignment.selectedShippingOption || {});\n        });\n\n        it('returns recommended shipping option if there is no selected ones', () => {\n            const recommendedShippingOption = {\n                ...getShippingOption(),\n                isRecommended: true,\n            };\n\n            const consignment = {\n                ...getConsignment(),\n                availableShippingOptions: [recommendedShippingOption],\n                selectedShippingOption: {\n                    additionalDescription: 'string',\n                    description: 'string',\n                    id: 'string',\n                    isRecommended: true,\n                    imageUrl: 'string',\n                    cost: 12,\n                    transitTime: 'string',\n                    type: 'string',\n                },\n            };\n\n            const updatedConsignment = {\n                ...consignment,\n                selectedShippingOption: recommendedShippingOption,\n            };\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignmentsOrThrow')\n                .mockReturnValueOnce([consignment])\n                .mockReturnValue([updatedConsignment]);\n\n            const output = subject.getShippingOptionOrThrow();\n\n            expect(output).toBe(recommendedShippingOption);\n        });\n\n        it('returns first available shipping option if there is no recommended or selected options', () => {\n            const firstShippingOption = {\n                ...getShippingOption(),\n                id: '1',\n            };\n\n            const secondShippingOption = {\n                ...getShippingOption(),\n                id: '2',\n            };\n\n            const consignment = {\n                ...getConsignment(),\n                availableShippingOptions: [firstShippingOption, secondShippingOption],\n                selectedShippingOption: {\n                    additionalDescription: 'string',\n                    description: 'string',\n                    id: '111',\n                    isRecommended: true,\n                    imageUrl: 'string',\n                    cost: 12,\n                    transitTime: 'string',\n                    type: 'string',\n                },\n            };\n\n            const updatedConsignment = {\n                ...consignment,\n                selectedShippingOption: firstShippingOption,\n            };\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignmentsOrThrow')\n                .mockReturnValueOnce([consignment])\n                .mockReturnValue([updatedConsignment]);\n\n            const output = subject.getShippingOptionOrThrow();\n\n            expect(output).toBe(firstShippingOption);\n        });\n    });\n\n    describe('#getAddress', () => {\n        it('successfully returns valid address', () => {\n            const paypalOrderDetails = getPayPalCommerceOrderDetails();\n            const address = {\n                firstName: paypalOrderDetails.payer.name.given_name,\n                lastName: paypalOrderDetails.payer.name.surname,\n                email: paypalOrderDetails.payer.email_address,\n                phone: '',\n                company: '',\n                address1: paypalOrderDetails.payer.address.address_line_1,\n                address2: '',\n                city: paypalOrderDetails.payer.address.admin_area_2,\n                countryCode: paypalOrderDetails.payer.address.country_code,\n                postalCode: paypalOrderDetails.payer.address.postal_code,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalOrderDetails.payer.address.admin_area_1,\n                customFields: [],\n            };\n\n            const output = subject.getAddress(address);\n\n            expect(output).toStrictEqual({\n                firstName: paypalOrderDetails.payer.name.given_name,\n                lastName: paypalOrderDetails.payer.name.surname,\n                email: paypalOrderDetails.payer.email_address,\n                phone: '',\n                company: '',\n                address1: paypalOrderDetails.payer.address.address_line_1,\n                address2: '',\n                city: paypalOrderDetails.payer.address.admin_area_2,\n                countryCode: paypalOrderDetails.payer.address.country_code,\n                postalCode: paypalOrderDetails.payer.address.postal_code,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalOrderDetails.payer.address.admin_area_1,\n                customFields: [],\n            });\n        });\n\n        it('successfully returns valid address with phone number filled in', () => {\n            const paypalOrderDetails = getPayPalCommerceOrderDetails();\n            const address = {\n                firstName: paypalOrderDetails.payer.name.given_name,\n                lastName: paypalOrderDetails.payer.name.surname,\n                email: paypalOrderDetails.payer.email_address,\n                phone: '555',\n                company: '',\n                address1: paypalOrderDetails.payer.address.address_line_1,\n                address2: '',\n                city: paypalOrderDetails.payer.address.admin_area_2,\n                countryCode: paypalOrderDetails.payer.address.country_code,\n                postalCode: paypalOrderDetails.payer.address.postal_code,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalOrderDetails.payer.address.admin_area_1,\n                customFields: [],\n            };\n\n            const output = subject.getAddress(address);\n\n            expect(output).toStrictEqual({\n                firstName: paypalOrderDetails.payer.name.given_name,\n                lastName: paypalOrderDetails.payer.name.surname,\n                email: paypalOrderDetails.payer.email_address,\n                phone: '555',\n                company: '',\n                address1: paypalOrderDetails.payer.address.address_line_1,\n                address2: '',\n                city: paypalOrderDetails.payer.address.admin_area_2,\n                countryCode: paypalOrderDetails.payer.address.country_code,\n                postalCode: paypalOrderDetails.payer.address.postal_code,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalOrderDetails.payer.address.admin_area_1,\n                customFields: [],\n            });\n        });\n    });\n\n    describe('#getBillingAddressFromOrderDetails', () => {\n        it('successfully returns valid billing address from the orderDetails data', () => {\n            const paypalOrderDetails = getPayPalCommerceOrderDetails();\n\n            const output = subject.getBillingAddressFromOrderDetails(paypalOrderDetails);\n\n            expect(output).toStrictEqual(getBillingAddressFromOrderDetails());\n        });\n\n        it('successfully returns empty string in phone number', () => {\n            const paypalOrderDetails = {\n                ...getPayPalCommerceOrderDetails(),\n                payer: {\n                    ...getPayPalCommerceOrderDetails().payer,\n                    phone: {\n                        phone_number: {\n                            national_number: '',\n                        },\n                    },\n                },\n            };\n\n            const output = subject.getBillingAddressFromOrderDetails(paypalOrderDetails);\n\n            expect(output.phone).toBe('');\n        });\n\n        it('successfully returns correct phone number', () => {\n            const paypalOrderDetails = {\n                ...getPayPalCommerceOrderDetails(),\n                payer: {\n                    ...getPayPalCommerceOrderDetails().payer,\n                    phone: {\n                        phone_number: {\n                            national_number: '555333',\n                        },\n                    },\n                },\n            };\n\n            const output = subject.getBillingAddressFromOrderDetails(paypalOrderDetails);\n\n            expect(output.phone).toBe('555333');\n        });\n    });\n\n    describe('#getShippingAddressFromOrderDetails', () => {\n        it('successfully returns valid shipping address from the orderDetails data', () => {\n            const paypalOrderDetails = getPayPalCommerceOrderDetails();\n\n            const output = subject.getShippingAddressFromOrderDetails(paypalOrderDetails);\n\n            expect(output).toStrictEqual(getShippingAddressFromOrderDetails());\n        });\n    });\n\n    describe('#getValidButtonStyle', () => {\n        it('returns valid button style', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: 55,\n                shape: StyleButtonShape.rect,\n            };\n\n            const expects = {\n                ...stylesMock,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns button style without shape if shape is not valid', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: 55,\n                shape: 'ellipse' as StyleButtonShape,\n            };\n\n            const expects = {\n                ...stylesMock,\n                shape: undefined,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns button style without color if color is not valid', () => {\n            const stylesMock = {\n                color: 'red' as StyleButtonColor,\n                height: 55,\n            };\n\n            const expects = {\n                ...stylesMock,\n                color: undefined,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns button style without label if label is not valid', () => {\n            const stylesMock = {\n                height: 55,\n                label: 'label' as StyleButtonLabel,\n            };\n\n            const expects = {\n                ...stylesMock,\n                label: undefined,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns styles with updated height if height value is bigger than expected', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: 110,\n                shape: StyleButtonShape.rect,\n            };\n\n            const expects = {\n                ...stylesMock,\n                height: 55,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns styles with updated height if height value is less than expected', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: 10,\n                shape: StyleButtonShape.rect,\n            };\n\n            const expects = {\n                ...stylesMock,\n                height: 25,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns styles with default height if height value not provided', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: undefined,\n                shape: StyleButtonShape.rect,\n            };\n\n            const expects = {\n                ...stylesMock,\n                height: 40,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n    });\n\n    describe('#removeElement', () => {\n        it('removed element from dom', () => {\n            const paypalCommerceButtonContainerId = 'paypalCommerceButtonContainer';\n\n            const paypalButtonElement = document.createElement('div');\n\n            paypalButtonElement.id = paypalCommerceButtonContainerId;\n\n            document.body.appendChild(paypalButtonElement);\n\n            const element = document.getElementById(paypalCommerceButtonContainerId);\n\n            expect(element).toBeDefined();\n\n            subject.removeElement(paypalCommerceButtonContainerId);\n\n            const computedStyle = getComputedStyle(element as Element);\n\n            expect(computedStyle.getPropertyValue('display')).toBe('none');\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-integration-service.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { isNil, omitBy } from 'lodash';\n\nimport {\n    BillingAddressRequestBody,\n    BuyNowCartCreationError,\n    Cart,\n    CartSource,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n    PaymentMethodClientUnavailableError,\n    RequestError,\n    RequestOptions,\n    ShippingOption,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceRequestSender from './paypal-commerce-request-sender';\nimport PayPalCommerceScriptLoader from './paypal-commerce-script-loader';\nimport {\n    PayPalButtonStyleOptions,\n    PayPalBuyNowInitializeOptions,\n    PayPalCommerceInitializationData,\n    PayPalCreateOrderCardFieldsResponse,\n    PayPalCreateOrderRequestBody,\n    PayPalOrderDetails,\n    PayPalOrderStatus,\n    PayPalSDK,\n    StyleButtonColor,\n    StyleButtonLabel,\n    StyleButtonShape,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceIntegrationService {\n    private paypalSdk?: PayPalSDK;\n\n    constructor(\n        private formPoster: FormPoster,\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalCommerceRequestSender: PayPalCommerceRequestSender,\n        private paypalCommerceScriptLoader: PayPalCommerceScriptLoader,\n    ) {}\n\n    /**\n     *\n     * PayPalSDK methods\n     *\n     */\n    async loadPayPalSdk(\n        methodId: string,\n        providedCurrencyCode?: string,\n        initializesOnCheckoutPage?: boolean,\n        forceLoad?: boolean,\n    ): Promise<PayPalSDK | undefined> {\n        const state = this.paymentIntegrationService.getState();\n        const currencyCode = providedCurrencyCode || state.getCartOrThrow().currency.code;\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<PayPalCommerceInitializationData>(methodId);\n\n        this.paypalSdk = await this.paypalCommerceScriptLoader.getPayPalSDK(\n            paymentMethod,\n            currencyCode,\n            state.getLocale(),\n            initializesOnCheckoutPage,\n            forceLoad,\n        );\n\n        return this.paypalSdk;\n    }\n\n    getPayPalSdkOrThrow(): PayPalSDK {\n        if (!this.paypalSdk) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.paypalSdk;\n    }\n\n    /**\n     *\n     * Buy Now cart creation methods\n     *\n     */\n    async createBuyNowCartOrThrow(\n        buyNowInitializeOptions: PayPalBuyNowInitializeOptions,\n    ): Promise<Cart> {\n        const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n        if (!cartRequestBody) {\n            throw new MissingDataError(MissingDataErrorType.MissingCart);\n        }\n\n        try {\n            return await this.paymentIntegrationService.createBuyNowCart(cartRequestBody);\n        } catch (error) {\n            throw new BuyNowCartCreationError();\n        }\n    }\n\n    /**\n     *\n     * Order methods\n     *\n     */\n    async createOrder(\n        providerId: string,\n        requestBody?: Partial<PayPalCreateOrderRequestBody>,\n    ): Promise<string> {\n        const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n        const { orderId } = await this.paypalCommerceRequestSender.createOrder(providerId, {\n            cartId,\n            ...requestBody,\n        });\n\n        return orderId;\n    }\n\n    async createOrderCardFields(\n        providerId: string,\n        requestBody?: Partial<PayPalCreateOrderRequestBody>,\n    ): Promise<PayPalCreateOrderCardFieldsResponse> {\n        const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n        const { orderId, setupToken } = await this.paypalCommerceRequestSender.createOrder(\n            providerId,\n            {\n                cartId,\n                ...requestBody,\n            },\n        );\n\n        return { orderId, ...(setupToken ? { setupToken } : {}) };\n    }\n\n    async updateOrder(isServerSideShippingCallbacksEnabled?: boolean): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        const consignment = state.getConsignmentsOrThrow()[0];\n\n        try {\n            await this.paypalCommerceRequestSender.updateOrder({\n                availableShippingOptions: isServerSideShippingCallbacksEnabled\n                    ? []\n                    : consignment.availableShippingOptions,\n                cartId: cart.id,\n                selectedShippingOption: isServerSideShippingCallbacksEnabled\n                    ? null\n                    : consignment.selectedShippingOption,\n            });\n        } catch (_error) {\n            throw new RequestError();\n        }\n    }\n\n    async getOrderStatus(methodId?: string, options?: RequestOptions): Promise<PayPalOrderStatus> {\n        try {\n            const { status } = await this.paypalCommerceRequestSender.getOrderStatus(\n                methodId,\n                options,\n            );\n\n            return status;\n        } catch (_error) {\n            throw new RequestError();\n        }\n    }\n\n    /**\n     *\n     * Payment submitting and tokenizing methods\n     *\n     */\n    tokenizePayment(methodId: string, orderId?: string): void {\n        const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n        if (!orderId) {\n            throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n        }\n\n        return this.formPoster.postForm('/checkout.php', {\n            payment_type: 'paypal',\n            action: 'set_external_checkout',\n            provider: methodId,\n            order_id: orderId,\n            ...(cart.source === CartSource.BuyNow && { cart_id: cart.id }),\n        });\n    }\n\n    async submitPayment(methodId: string, orderId: string, gatewayId?: string): Promise<void> {\n        const paymentData = {\n            formattedPayload: {\n                vault_payment_instrument: null,\n                set_as_default_stored_instrument: null,\n                device_info: null,\n                method_id: methodId,\n                paypal_account: {\n                    order_id: orderId,\n                },\n            },\n        };\n\n        await this.paymentIntegrationService.submitPayment({\n            methodId,\n            paymentData,\n            ...(gatewayId ? { gatewayId } : {}),\n        });\n    }\n\n    /**\n     *\n     * Shipping options methods\n     *\n     */\n    getShippingOptionOrThrow(selectedShippingOptionId?: string): ShippingOption {\n        const state = this.paymentIntegrationService.getState();\n        const consignment = state.getConsignmentsOrThrow()[0];\n\n        const availableShippingOptions = consignment.availableShippingOptions || [];\n\n        const recommendedShippingOption = availableShippingOptions.find(\n            (option) => option.isRecommended,\n        );\n\n        const selectedShippingOption = selectedShippingOptionId\n            ? availableShippingOptions.find((option) => option.id === selectedShippingOptionId)\n            : availableShippingOptions.find(\n                  (option) => option.id === consignment.selectedShippingOption?.id,\n              );\n\n        const shippingOptionToSelect =\n            selectedShippingOption || recommendedShippingOption || availableShippingOptions[0];\n\n        if (!shippingOptionToSelect) {\n            throw new Error(\"Your order can't be shipped to this address\");\n        }\n\n        return shippingOptionToSelect;\n    }\n\n    /**\n     *\n     * Address transforming methods\n     *\n     */\n    getAddress(address?: Partial<BillingAddressRequestBody>): BillingAddressRequestBody {\n        return {\n            firstName: address?.firstName || '',\n            lastName: address?.lastName || '',\n            email: address?.email || '',\n            phone: address?.phone || '',\n            company: '',\n            address1: address?.address1 || '',\n            address2: address?.address2 || '',\n            city: address?.city || '',\n            countryCode: address?.countryCode || '',\n            postalCode: address?.postalCode || '',\n            stateOrProvince: '',\n            stateOrProvinceCode: address?.stateOrProvinceCode || '',\n            customFields: [],\n        };\n    }\n\n    getBillingAddressFromOrderDetails({ payer }: PayPalOrderDetails): BillingAddressRequestBody {\n        return this.getAddress({\n            firstName: payer.name.given_name,\n            lastName: payer.name.surname,\n            email: payer.email_address,\n            address1: payer.address.address_line_1,\n            address2: payer.address.address_line_2,\n            city: payer.address.admin_area_2,\n            countryCode: payer.address.country_code,\n            postalCode: payer.address.postal_code,\n            stateOrProvinceCode: payer.address.admin_area_1,\n            phone: payer.phone?.phone_number?.national_number,\n        });\n    }\n\n    getShippingAddressFromOrderDetails(\n        orderDetails: PayPalOrderDetails,\n    ): BillingAddressRequestBody {\n        const { payer, purchase_units } = orderDetails;\n        const {\n            address,\n            name: { full_name },\n        } = purchase_units[0].shipping;\n\n        const [firstName, ...lastName] = full_name.split(' ');\n\n        return this.getAddress({\n            firstName,\n            lastName: lastName.join(' '),\n            email: payer.email_address,\n            address1: address.address_line_1,\n            address2: address.address_line_2,\n            city: address.admin_area_2,\n            countryCode: address.country_code,\n            postalCode: address.postal_code,\n            stateOrProvinceCode: address.admin_area_1,\n        });\n    }\n\n    /**\n     *\n     * Buttons style methods\n     *\n     */\n    getValidButtonStyle(style?: PayPalButtonStyleOptions): PayPalButtonStyleOptions {\n        const { color, height, label, shape } = style || {};\n\n        const validStyles = {\n            color: color && StyleButtonColor[color] ? color : undefined,\n            height: this.getValidHeight(height),\n            label: label && StyleButtonLabel[label] ? label : undefined,\n            shape: shape && StyleButtonShape[shape] ? shape : undefined,\n        };\n\n        return omitBy(validStyles, isNil);\n    }\n\n    getValidHeight(height?: number): number {\n        const defaultHeight = 40;\n        const minHeight = 25;\n        const maxHeight = 55;\n\n        if (!height || typeof height !== 'number') {\n            return defaultHeight;\n        }\n\n        if (height > maxHeight) {\n            return maxHeight;\n        }\n\n        if (height < minHeight) {\n            return minHeight;\n        }\n\n        return height;\n    }\n\n    /**\n     *\n     * Utils methods\n     *\n     */\n    removeElement(elementId?: string): void {\n        const element = elementId && document.getElementById(elementId);\n\n        if (element) {\n            // For now this is a temporary solution, further removeElement method will be removed\n            element.style.display = 'none';\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-ratepay/create-paypal-commerce-ratepay-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPaypalCommerceRatepayPaymentStrategy from './create-paypal-commerce-ratepay-payment-strategy';\nimport PaypalCommerceRatepayPaymentStrategy from './paypal-commerce-ratepay-payment-strategy';\n\ndescribe('createPayPalCommerceRatePayPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce ratepay payment strategy', () => {\n        const strategy = createPaypalCommerceRatepayPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PaypalCommerceRatepayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-ratepay/create-paypal-commerce-ratepay-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    createPayPalIntegrationService,\n    LOADING_INDICATOR_STYLES,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PaypalCommerceRatepayPaymentStrategy from './paypal-commerce-ratepay-payment-strategy';\n\nconst createPaypalCommerceRatepayPaymentStrategy: PaymentStrategyFactory<\n    PaypalCommerceRatepayPaymentStrategy\n> = (paymentIntegrationService) =>\n    new PaypalCommerceRatepayPaymentStrategy(\n        paymentIntegrationService,\n        createPayPalIntegrationService(paymentIntegrationService),\n        new LoadingIndicator({\n            containerStyles: { ...LOADING_INDICATOR_STYLES, position: 'fixed' },\n        }),\n    );\n\nexport default toResolvableModule(createPaypalCommerceRatepayPaymentStrategy, [\n    { gateway: 'paypalcommercealternativemethods', id: 'ratepay' },\n]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-ratepay/paypal-commerce-ratepay-initialize-options.ts",
    "content": "import { BirthDate } from '../paypal-commerce-types';\n\nexport interface PaypalCommerceRatePay {\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    container: string;\n\n    /**\n     * The CSS selector of a container where the legal text should be inserted into.\n     */\n    legalTextContainer: string;\n\n    /**\n     * The CSS selector of a container where loading indicator should be rendered\n     */\n    loadingContainerId: string;\n    /**\n     * A callback that gets form values\n     */\n    getFieldsValues?(): {\n        ratepayBirthDate: BirthDate;\n        ratepayPhoneNumber: string;\n        ratepayPhoneCountryCode: string;\n    };\n\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: unknown): void;\n}\n\nexport interface WithPayPalCommerceRatePayPaymentInitializeOptions {\n    paypalcommerceratepay?: PaypalCommerceRatePay;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-ratepay/paypal-commerce-ratepay-payment-strategy.spec.ts",
    "content": "import {\n    BillingAddress,\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    getPayPalIntegrationServiceMock,\n    getPayPalRatePayPaymentMethod,\n    getPayPalSDKMock,\n    PayPalHostWindow,\n    PayPalIntegrationService,\n    PayPalOrderStatus,\n    PayPalSDK,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { PaypalCommerceRatePay } from './paypal-commerce-ratepay-initialize-options';\nimport PaypalCommerceRatepayPaymentStrategy from './paypal-commerce-ratepay-payment-strategy';\n\ndescribe('PayPalCommerceAlternativeMethodRatePayPaymentStrategy', () => {\n    let billingAddress: BillingAddress;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalIntegrationService: PayPalIntegrationService;\n    let paypalSdk: PayPalSDK;\n    let strategy: PaypalCommerceRatepayPaymentStrategy;\n    let loadingIndicator: LoadingIndicator;\n\n    const paypalCommerceRatePayMethodsOptions: PaypalCommerceRatePay = {\n        container: '#checkout-payment-continue',\n        legalTextContainer: 'legal-text-container',\n        loadingContainerId: 'checkout-page-container-id',\n        getFieldsValues: () => {\n            return {\n                ratepayBirthDate: {\n                    getDate: () => 1,\n                    getMonth: () => 1,\n                    getFullYear: () => 2000,\n                },\n                ratepayPhoneNumber: '234343434',\n                ratepayPhoneCountryCode: '49',\n            };\n        },\n    };\n\n    const initializationOptions: PaymentInitializeOptions = {\n        methodId: 'ratepay',\n        gatewayId: 'paypalcommercealternativemethods',\n        paypalcommerceratepay: paypalCommerceRatePayMethodsOptions,\n    };\n\n    beforeEach(() => {\n        paypalIntegrationService = getPayPalIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        loadingIndicator = new LoadingIndicator();\n\n        strategy = new PaypalCommerceRatepayPaymentStrategy(\n            paymentIntegrationService,\n            paypalIntegrationService,\n            loadingIndicator,\n            0,\n        );\n\n        jest.spyOn(loadingIndicator, 'show').mockReturnValue(undefined);\n        jest.spyOn(loadingIndicator, 'hide').mockReturnValue(undefined);\n\n        jest.spyOn(paypalIntegrationService, 'getOrderStatus').mockResolvedValue(\n            PayPalOrderStatus.PollingStop,\n        );\n        jest.spyOn(document, 'getElementById').mockImplementation((id) => {\n            if (id === 'legal-text-container') {\n                const el = document.createElement('div');\n\n                el.innerHTML = 'Mocked legal text';\n\n                return el;\n            }\n\n            return null;\n        });\n\n        paypalSdk = getPayPalSDKMock();\n        paypalSdk.Legal.FUNDING = {\n            PAY_UPON_INVOICE: 'PAY_UPON_INVOICE',\n        };\n\n        paymentMethod = getPayPalRatePayPaymentMethod();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getBillingAddressOrThrow',\n        ).mockReturnValue(billingAddress);\n\n        jest.spyOn(paypalIntegrationService, 'loadPayPalSdk').mockResolvedValue(paypalSdk);\n        jest.spyOn(paypalIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(paypalSdk);\n        jest.spyOn(paypalIntegrationService, 'createOrder').mockResolvedValue('1eddfd');\n        jest.spyOn(paypalIntegrationService, 'submitPayment').mockResolvedValue();\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as PayPalHostWindow).paypal;\n    });\n\n    it('creates an instance of the PayPal Commerce RatePay payment strategy', () => {\n        expect(strategy).toBeInstanceOf(PaypalCommerceRatepayPaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if loadingContainerId is not provided', async () => {\n            const options = {\n                methodId: 'ratepay',\n                gatewayId: 'paypalcommercealternativemethods',\n                paypalcommerceratepay: {\n                    legalTextContainer: 'legal-text-container',\n                    container: '#checkout-payment-continue',\n                },\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if gatewayId is not provided', async () => {\n            const options = {\n                methodId: 'ratepay',\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if options.paypalcommerceratepay is not provided', async () => {\n            const options = {\n                methodId: 'ratepay',\n                gatewayId: 'paypalcommercealternativemethods',\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if container is not provided', async () => {\n            const options = {\n                methodId: 'ratepay',\n                gatewayId: 'paypalcommercealternativemethods',\n                paypalcommerceratepay: {\n                    legalTextContainer: 'legal-text-container',\n                },\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if legalTextContainer is not provided', async () => {\n            const options = {\n                methodId: 'ratepay',\n                gatewayId: 'paypalcommercealternativemethods',\n                paypalcommerceratepay: {\n                    container: '#checkout-payment-continue',\n                },\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if merchantId is not provided', async () => {\n            paymentMethod.initializationData.merchantId = '';\n\n            const options = {\n                methodId: 'ratepay',\n                gatewayId: 'paypalcommercealternativemethods',\n                paypalcommerceratepay: {\n                    container: '#checkout-payment-continue',\n                    legalTextContainer: 'legal-text-container',\n                },\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n    });\n\n    describe('#toggleLoadingIndicator', () => {\n        it('shows loading indicator on execute', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'paypalcommercealternativemethods',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n\n            expect(loadingIndicator.show).toHaveBeenCalled();\n        });\n\n        it('hides loading indicator when error occurs', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'paypalcommercealternativemethods',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            try {\n                await strategy.execute(payload);\n                await new Promise((_resolve, reject) => process.nextTick(reject));\n            } catch (error: unknown) {\n                expect(loadingIndicator.hide).toHaveBeenCalled();\n            }\n        });\n    });\n\n    describe('#createFraudnetScript', () => {\n        it('add fraudNet script to document', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const fraudNetScript = document.querySelectorAll(\n                '[fncls = \"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\"]',\n            );\n\n            expect(fraudNetScript).toBeDefined();\n        });\n\n        it('add another needed fraudNet script', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const script = document.querySelector('script[src=\"https://c.paypal.com/da/r/fb.js\"]');\n\n            expect(script).toBeDefined();\n        });\n    });\n\n    describe('#renderLegalText', () => {\n        it('throws error if legalTextContainerElement is not found', async () => {\n            jest.spyOn(document, 'getElementById').mockImplementation(() => null);\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('renders legal text', async () => {\n            await strategy.initialize(initializationOptions);\n\n            const source = document.getElementsByTagName('html')[0].innerHTML;\n            const legalText = source.search(\n                'By clicking on the button, you agree to the terms of payment and performance of a risk check from the payment partner, Ratepay. You also agree to PayPal’s privacy statement. If your request to purchase upon invoice is accepted, the purchase price claim will be assigned to Ratepay, and you may only pay Ratepay, not the merchant.',\n            );\n\n            expect(legalText).toBeDefined();\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws an error if payload.payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if orderId is not defined', async () => {\n            jest.spyOn(paypalIntegrationService, 'createOrder').mockResolvedValue('');\n\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'paypalcommercealternativemethods',\n                },\n            };\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('fetch order status', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'paypalcommercealternativemethods',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n\n            expect(paypalIntegrationService.getOrderStatus).toHaveBeenCalledWith(\n                'paypalcommercealternativemethods',\n                { params: { useMetadata: true } },\n            );\n        });\n\n        it('submits order', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'paypalcommercealternativemethods',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('submits payment with correct data', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'paypalcommercealternativemethods',\n                },\n            };\n\n            const expectedPayload = {\n                methodId: 'ratepay',\n                paymentData: {\n                    formattedPayload: {\n                        device_info: null,\n                        method_id: 'ratepay',\n                        paypal_account: {\n                            order_id: '1eddfd',\n                        },\n                        rate_pay: {\n                            birth_date: '2000-02-01',\n                            phone: {\n                                country_code: undefined,\n                                national_number: '234343434',\n                            },\n                        },\n                        set_as_default_stored_instrument: null,\n                        vault_payment_instrument: null,\n                    },\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayload);\n        });\n\n        it('initialize polling mechanism', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'paypalcommercealternativemethods',\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.getOrderStatus).toHaveBeenCalled();\n        });\n\n        it('stop polling mechanism if corresponding status received', async () => {\n            jest.spyOn(paypalIntegrationService, 'getOrderStatus').mockResolvedValue(\n                PayPalOrderStatus.PollingError,\n            );\n\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'paypalcommercealternativemethods',\n                },\n            };\n\n            jest.spyOn(global, 'clearTimeout');\n\n            try {\n                await strategy.initialize(initializationOptions);\n                await strategy.execute(payload);\n            } catch (e) {\n                expect(clearTimeout).toHaveBeenCalled();\n            }\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n\n        it('deinitialize polling mechanism', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'ratepay',\n                    gatewayId: 'paypalcommercealternativemethods',\n                },\n            };\n\n            jest.spyOn(paypalIntegrationService, 'getOrderStatus').mockResolvedValue(\n                PayPalOrderStatus.PollingStop,\n            );\n\n            jest.spyOn(document, 'getElementById').mockImplementation((id) => {\n                if (id === 'legal-text-container') {\n                    const el = document.createElement('div');\n\n                    el.remove = jest.fn();\n\n                    return el;\n                }\n\n                return null;\n            });\n            jest.spyOn(global, 'clearTimeout');\n\n            await strategy.initialize(initializationOptions);\n            await strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n            await strategy.deinitialize();\n\n            expect(clearTimeout).toHaveBeenCalled();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-ratepay/paypal-commerce-ratepay-payment-strategy.ts",
    "content": "import { noop } from 'lodash';\n\nimport {\n    InvalidArgumentError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    TimeoutError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    BirthDate,\n    PayPalInitializationData,\n    PayPalIntegrationService,\n    PayPalOrderStatus,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport {\n    PaypalCommerceRatePay,\n    WithPayPalCommerceRatePayPaymentInitializeOptions,\n} from './paypal-commerce-ratepay-initialize-options';\n\nconst POLLING_INTERVAL = 3000;\nconst MAX_POLLING_TIME = 300000;\n\nexport default class PaypalCommerceRatepayPaymentStrategy implements PaymentStrategy {\n    private guid?: string;\n    private paypalcommerceratepay?: PaypalCommerceRatePay;\n    private loadingIndicatorContainer?: string;\n    private pollingTimer = 0;\n    private stopPolling = noop;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalCommerceService: PayPalIntegrationService,\n        private loadingIndicator: LoadingIndicator,\n        private pollingInterval: number = POLLING_INTERVAL,\n        private maxPollingIntervalTime: number = MAX_POLLING_TIME,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithPayPalCommerceRatePayPaymentInitializeOptions,\n    ): Promise<void> {\n        const { gatewayId, methodId, paypalcommerceratepay } = options;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!gatewayId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.gatewayId\" argument is not provided.',\n            );\n        }\n\n        if (!paypalcommerceratepay) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommerceratepay\" argument is not provided.`,\n            );\n        }\n\n        const { legalTextContainer, container, loadingContainerId } = paypalcommerceratepay;\n\n        if (!container) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.container\" argument is not provided.`,\n            );\n        }\n\n        if (!legalTextContainer) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.legalTextContainer\" argument is not provided.`,\n            );\n        }\n\n        if (!loadingContainerId) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.loadingContainerId\" argument is not provided.`,\n            );\n        }\n\n        this.loadingIndicatorContainer = loadingContainerId;\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(\n            methodId,\n            gatewayId,\n        );\n        const { merchantId } = paymentMethod.initializationData || {};\n\n        if (!merchantId) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because merchantId argument is not provided.`,\n            );\n        }\n\n        this.paypalcommerceratepay = paypalcommerceratepay;\n\n        await this.paypalCommerceService.loadPayPalSdk(methodId);\n\n        this.createFraudNetScript(merchantId, methodId, gatewayId);\n\n        this.loadFraudnetConfig();\n\n        this.renderLegalText(legalTextContainer, container);\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n\n        const { getFieldsValues } = this.paypalcommerceratepay || {};\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        if (!getFieldsValues || typeof getFieldsValues !== 'function') {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.getFieldsValues\" argument is not provided.`,\n            );\n        }\n\n        this.toggleLoadingIndicator(true);\n\n        try {\n            const orderId = await this.paypalCommerceService.createOrder(\n                'paypalcommercealternativemethodscheckout',\n                { metadataId: this.guid },\n            );\n\n            const { ratepayBirthDate, ratepayPhoneNumber, ratepayPhoneCountryCode } =\n                getFieldsValues();\n\n            const paymentData = {\n                formattedPayload: {\n                    vault_payment_instrument: null,\n                    set_as_default_stored_instrument: null,\n                    device_info: null,\n                    method_id: payment.methodId,\n                    rate_pay: {\n                        birth_date: this.normalizeDate(ratepayBirthDate),\n                        phone: {\n                            national_number: ratepayPhoneNumber,\n                            country_code: ratepayPhoneCountryCode.split('+')[1],\n                        },\n                    },\n                    paypal_account: {\n                        order_id: orderId,\n                    },\n                },\n            };\n\n            await this.paymentIntegrationService.submitOrder(order, options);\n            await this.paymentIntegrationService.submitPayment({\n                methodId: payment.methodId,\n                paymentData,\n            });\n\n            return await new Promise((resolve, reject) => {\n                this.initializePollingMechanism(\n                    payment.methodId,\n                    resolve,\n                    reject,\n                    payment.gatewayId,\n                );\n            });\n        } catch (error: unknown) {\n            this.handleError(error);\n\n            return new Promise((_resolve, reject) => reject());\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        const { legalTextContainer } = this.paypalcommerceratepay || {};\n        const fraudNetScript = document.querySelectorAll('[data-id=\"fraudnetScript\"]')[0];\n        const fraudNetConfig = document.querySelectorAll('[data-id=\"fraudnetConfig\"]')[0];\n\n        this.deinitializePollingMechanism();\n\n        fraudNetScript.remove();\n        fraudNetConfig.remove();\n\n        if (legalTextContainer) {\n            const legalTextContainerElement = document.getElementById(legalTextContainer);\n\n            legalTextContainerElement?.remove();\n        }\n\n        return Promise.resolve();\n    }\n\n    private normalizeDate(date: BirthDate) {\n        const formattedDate = this.formatDate(date.getDate());\n        const formattedMonth = this.formatDate(date.getMonth() + 1);\n\n        return `${date.getFullYear()}-${formattedMonth}-${formattedDate}`;\n    }\n\n    private formatDate(date: number): string {\n        return `${date < 10 ? 0 : ''}${date}`;\n    }\n\n    private renderLegalText(legalTextContainerElementId: string, container: string) {\n        const legalTextContainerId = legalTextContainerElementId;\n        const buttonContainerId = container.split('#')[1];\n        const buttonContainer = document.getElementById(buttonContainerId);\n        const buttonContainerParent = buttonContainer?.parentNode;\n        const legalTextContainer = document.createElement('div');\n\n        legalTextContainer.style.marginBottom = '20px';\n        legalTextContainer.setAttribute('id', legalTextContainerId);\n        buttonContainerParent?.prepend(legalTextContainer);\n\n        const paypalSdk = this.paypalCommerceService.getPayPalSdkOrThrow();\n        const ratePayButton = paypalSdk.Legal({\n            fundingSource: paypalSdk.Legal.FUNDING.PAY_UPON_INVOICE,\n        });\n        const legalTextContainerElement = document.getElementById(legalTextContainerId);\n\n        if (legalTextContainerElement) {\n            ratePayButton.render(`#${legalTextContainerId}`);\n        } else {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"legalTextContainerElement\" argument is not found.`,\n            );\n        }\n    }\n\n    private handleError(error: unknown): void {\n        const { onError } = this.paypalcommerceratepay || {};\n\n        this.resetPollingMechanism();\n        this.toggleLoadingIndicator(false);\n\n        if (onError && typeof onError === 'function') {\n            onError(error);\n        }\n    }\n\n    private createFraudNetScript(merchantId: string, methodId: string, gatewayId: string) {\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId, gatewayId);\n        const { testMode } = paymentMethod.config;\n        const scriptElement = document.createElement('script');\n\n        scriptElement.setAttribute('type', 'application/json');\n        scriptElement.setAttribute('fncls', 'fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99');\n        scriptElement.setAttribute('data-id', 'fraudnetScript');\n        this.guid = this.generateGUID();\n\n        const fraudNetConfig = {\n            f: this.guid,\n            s: `${merchantId}_checkout-page`,\n            sandbox: testMode,\n        };\n\n        scriptElement.innerHTML = JSON.stringify(fraudNetConfig);\n        document.body.appendChild(scriptElement);\n    }\n\n    private generateGUID() {\n        let guid = '';\n        const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n        for (let i = 0; i < 32; i += 1) {\n            const randomIndex = Math.floor(Math.random() * characters.length);\n\n            guid += characters[randomIndex];\n        }\n\n        return guid;\n    }\n\n    private loadFraudnetConfig() {\n        const script = document.createElement('script');\n\n        script.setAttribute('data-id', 'fraudnetConfig');\n        script.src = 'https://c.paypal.com/da/r/fb.js';\n        document.body.appendChild(script);\n    }\n\n    private async reinitializeStrategy(\n        options: PaymentInitializeOptions & WithPayPalCommerceRatePayPaymentInitializeOptions,\n    ): Promise<void> {\n        await this.deinitialize();\n        await this.initialize(options);\n    }\n\n    /**\n     *\n     * Polling mechanism\n     *\n     *\n     * */\n    private async initializePollingMechanism(\n        methodId: string,\n        resolvePromise: () => void,\n        rejectPromise: () => void,\n        gatewayId?: string,\n    ): Promise<void> {\n        await new Promise<void>((resolve, reject) => {\n            const timeout = setTimeout(resolve, this.pollingInterval);\n\n            this.stopPolling = () => {\n                clearTimeout(timeout);\n                this.toggleLoadingIndicator(false);\n\n                return reject();\n            };\n        });\n\n        try {\n            this.pollingTimer += this.pollingInterval;\n\n            const orderStatus = await this.paypalCommerceService.getOrderStatus(\n                'paypalcommercealternativemethods',\n                {\n                    params: {\n                        useMetadata: true,\n                    },\n                },\n            );\n\n            const isOrderApproved = orderStatus === PayPalOrderStatus.PollingStop;\n            const isPollingError = orderStatus === PayPalOrderStatus.PollingError;\n\n            if (isOrderApproved) {\n                this.deinitializePollingMechanism();\n\n                return resolvePromise();\n            }\n\n            if (isPollingError) {\n                return rejectPromise();\n            }\n\n            if (!isOrderApproved && this.pollingTimer < this.maxPollingIntervalTime) {\n                return await this.initializePollingMechanism(\n                    methodId,\n                    resolvePromise,\n                    rejectPromise,\n                    gatewayId,\n                );\n            }\n\n            await this.reinitializeStrategy({\n                methodId,\n                gatewayId,\n                paypalcommerceratepay: this.paypalcommerceratepay,\n            });\n\n            this.handleError(new TimeoutError());\n        } catch (error) {\n            this.handleError(error);\n            rejectPromise();\n        }\n    }\n\n    private deinitializePollingMechanism(): void {\n        this.stopPolling();\n        this.pollingTimer = 0;\n    }\n\n    private resetPollingMechanism(): void {\n        this.deinitializePollingMechanism();\n    }\n\n    /**\n     *\n     * Loading Indicator methods\n     *\n     * */\n    private toggleLoadingIndicator(isLoading: boolean): void {\n        if (isLoading && this.loadingIndicatorContainer) {\n            this.loadingIndicator.show(this.loadingIndicatorContainer);\n        } else {\n            this.loadingIndicator.hide();\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-request-sender.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { getResponse } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport PayPalCommerceRequestSender from './paypal-commerce-request-sender';\n\ndescribe('PayPalCommerceRequestSender', () => {\n    let requestSender: RequestSender;\n    let paypalCommerceRequestSender: PayPalCommerceRequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        paypalCommerceRequestSender = new PayPalCommerceRequestSender(requestSender);\n\n        const requestResponseMock = getResponse({ orderId: 123 });\n\n        jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(requestResponseMock));\n        jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(requestResponseMock));\n        jest.spyOn(requestSender, 'put').mockReturnValue(Promise.resolve(requestResponseMock));\n    });\n\n    it('creates order with provided data', async () => {\n        const requestBody = {\n            cartId: 'abc',\n            instrumentId: 'vaultedInstrumentId',\n        };\n\n        await paypalCommerceRequestSender.createOrder('paypalcommerce', requestBody);\n\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        expect(requestSender.post).toHaveBeenCalledWith(\n            '/api/storefront/payment/paypalcommerce',\n            expect.objectContaining({\n                body: requestBody,\n                headers,\n            }),\n        );\n    });\n\n    it('update order with provided data', async () => {\n        const shippingOptionMock = {\n            additionalDescription: 'Additional description',\n            description: 'Main description',\n            id: '1',\n            isRecommended: true,\n            imageUrl: '',\n            cost: 1,\n            transitTime: '123',\n            type: 'type',\n        };\n\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        const updateOrderRequestBody = {\n            availableShippingOptions: [shippingOptionMock],\n            cartId: 'abc',\n            selectedShippingOption: shippingOptionMock,\n        };\n\n        await paypalCommerceRequestSender.updateOrder(updateOrderRequestBody);\n\n        expect(requestSender.put).toHaveBeenCalledWith(\n            '/api/storefront/initialization/paypalcommerce',\n            expect.objectContaining({\n                body: updateOrderRequestBody,\n                headers,\n            }),\n        );\n    });\n\n    it('requests order status', async () => {\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        await paypalCommerceRequestSender.getOrderStatus();\n\n        expect(requestSender.get).toHaveBeenCalledWith(\n            '/api/storefront/initialization/paypalcommerce',\n            expect.objectContaining({\n                headers,\n            }),\n        );\n    });\n\n    it('requests order status with proper data', async () => {\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        await paypalCommerceRequestSender.getOrderStatus('paypalcommercealternativemethods', {\n            params: { useMetaData: true },\n        });\n\n        expect(requestSender.get).toHaveBeenCalledWith(\n            '/api/storefront/initialization/paypalcommercealternativemethods',\n            expect.objectContaining({\n                headers,\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-request-sender.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    PayPalCreateOrderRequestBody,\n    PayPalOrderData,\n    PayPalOrderStatusData,\n    PayPalUpdateOrderRequestBody,\n    PayPalUpdateOrderResponse,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceRequestSender {\n    constructor(private requestSender: RequestSender) {}\n\n    async createOrder(\n        providerId: string,\n        requestBody: Partial<PayPalCreateOrderRequestBody>,\n    ): Promise<PayPalOrderData> {\n        const url = `/api/storefront/payment/${providerId}`;\n        const body = requestBody;\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        const res = await this.requestSender.post<PayPalOrderData>(url, { headers, body });\n\n        return res.body;\n    }\n\n    async updateOrder(\n        requestBody: PayPalUpdateOrderRequestBody,\n    ): Promise<PayPalUpdateOrderResponse> {\n        const url = `/api/storefront/initialization/paypalcommerce`;\n        const body = requestBody;\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        const res = await this.requestSender.put<PayPalUpdateOrderResponse>(url, { headers, body });\n\n        return res.body;\n    }\n\n    async getOrderStatus(\n        methodId = 'paypalcommerce',\n        options?: RequestOptions,\n    ): Promise<PayPalOrderStatusData> {\n        const url = `/api/storefront/initialization/${methodId}`;\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        const res = await this.requestSender.get<PayPalOrderStatusData>(url, {\n            headers,\n            ...options,\n        });\n\n        return res.body;\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-script-loader.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getPayPalCommercePaymentMethod, getPayPalSDKMock } from './mocks';\nimport PayPalCommerceScriptLoader from './paypal-commerce-script-loader';\nimport { PayPalCommerceHostWindow, PayPalSDK } from './paypal-commerce-types';\n\ndescribe('PayPalCommerceScriptLoader', () => {\n    let loader: ScriptLoader;\n    let paypalLoader: PayPalCommerceScriptLoader;\n    let paypalSdk: PayPalSDK;\n    let paymentMethod: PaymentMethod;\n\n    beforeEach(() => {\n        loader = createScriptLoader();\n        paymentMethod = getPayPalCommercePaymentMethod();\n        paypalSdk = getPayPalSDKMock();\n\n        jest.spyOn(loader, 'loadScript').mockImplementation(() => {\n            (window as PayPalCommerceHostWindow).paypal = paypalSdk;\n\n            return Promise.resolve();\n        });\n\n        paypalLoader = new PayPalCommerceScriptLoader(loader);\n    });\n\n    afterEach(() => {\n        (window as PayPalCommerceHostWindow).paypal = undefined;\n    });\n\n    it('throws an error if initializationData is missing', async () => {\n        const paymentMethodProp = {\n            ...paymentMethod,\n            initializationData: undefined,\n        };\n\n        try {\n            await paypalLoader.getPayPalSDK(paymentMethodProp, 'USD', 'en-US');\n        } catch (error) {\n            expect(error).toBeInstanceOf(MissingDataError);\n        }\n    });\n\n    it('loads PayPalSDK with default configuration', async () => {\n        const output = await paypalLoader.getPayPalSDK(paymentMethod, 'USD', 'en-US');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n        expect(output).toEqual(paypalSdk);\n    });\n\n    it('loads PayPalSDK script every time if force load flag is provided', async () => {\n        const paypalCommerceCreditPaymentMethod = {\n            ...paymentMethod,\n            id: 'paypalcommercecreditcard',\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethod, 'USD', 'en-US');\n        await paypalLoader.getPayPalSDK(\n            paypalCommerceCreditPaymentMethod,\n            'USD',\n            'en-US',\n            false,\n            true,\n        );\n\n        expect(loader.loadScript).toHaveBeenCalledTimes(2);\n    });\n\n    it('loads PayPalSDK script with EUR currency', async () => {\n        await paypalLoader.getPayPalSDK(paymentMethod, 'EUR', 'en-US');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=EUR&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads PayPalCommerce script with disabled card funding', async () => {\n        await paypalLoader.getPayPalSDK(paymentMethod, 'USD', 'en-US');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads PayPalCommerce script with enabled credit funding', async () => {\n        const paymentMethodProp = {\n            ...paymentMethod,\n            initializationData: {\n                ...paymentMethod.initializationData,\n                isPayPalCreditAvailable: true,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodProp, 'USD', 'en-US');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=credit%2Cpaylater&disable-funding=card%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads PayPalCommerce script with disabled credit funding', async () => {\n        const paymentMethodProp = {\n            ...paymentMethod,\n            initializationData: {\n                ...paymentMethod.initializationData,\n                isPayPalCreditAvailable: false,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodProp, 'USD', 'en-US');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads PayPalCommerce script with enabled Venmo funding', async () => {\n        const paymentMethodProp = {\n            ...paymentMethod,\n            initializationData: {\n                ...paymentMethod.initializationData,\n                isVenmoEnabled: true,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodProp, 'USD', 'en-US');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=venmo&disable-funding=card%2Ccredit%2Cpaylater&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads PayPalCommerce script with disabled Venmo funding', async () => {\n        const paymentMethodProp = {\n            ...paymentMethod,\n            initializationData: {\n                ...paymentMethod.initializationData,\n                isVenmoEnabled: false,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodProp, 'USD', 'en-US');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads PayPalCommerce script with enabled several APMs', async () => {\n        const paymentMethodProp = {\n            ...paymentMethod,\n            initializationData: {\n                ...paymentMethod.initializationData,\n                availableAlternativePaymentMethods: [\n                    'bancontact',\n                    'giropay',\n                    'ideal',\n                    'mybank',\n                    'sofort',\n                    'sepa',\n                ],\n                enabledAlternativePaymentMethods: ['bancontact', 'giropay', 'ideal'],\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodProp, 'USD', 'en-US');\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=bancontact%2Cgiropay%2Cideal&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo%2Cmybank%2Csofort%2Csepa&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads PayPalSDK script with commit flag as true', async () => {\n        await paypalLoader.getPayPalSDK(paymentMethod, 'USD', 'en-US', true);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads PayPalSDK script with commit flag as false', async () => {\n        await paypalLoader.getPayPalSDK(paymentMethod, 'USD', 'en-US', false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('successfully loads PayPalSDK script with commit flag as false if Skip Checkout feature off', async () => {\n        const paymentMethodMock = {\n            ...paymentMethod,\n            initializationData: {\n                ...paymentMethod.initializationData,\n                isHostedFormEnabled: false,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodMock, 'USD', 'en', false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('successfully enables all provided funding sources', async () => {\n        const paymentMethodMock = {\n            ...paymentMethod,\n            id: 'paypalcommercecreditcards',\n            initializationData: {\n                ...paymentMethod.initializationData,\n                isHostedCheckoutEnabled: false,\n                isVenmoEnabled: true,\n                isPayPalCreditAvailable: true,\n                availableAlternativePaymentMethods: [],\n                enabledAlternativePaymentMethods: [],\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodMock, 'USD', 'en-US', false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('successfully loads paypal sdk with dev configuration', async () => {\n        const paymentMethodMock = {\n            ...paymentMethod,\n            id: 'paypalcommerce',\n            initializationData: {\n                ...paymentMethod.initializationData,\n                buyerCountry: 'UA',\n                isDeveloperModeApplicable: true,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodMock, 'USD', 'en', false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture&buyer-country=UA';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('successfully loads paypal sdk without nil values in configuration', async () => {\n        const paymentMethodMock = {\n            ...paymentMethod,\n            clientToken: '',\n            id: 'paypalcommerce',\n            initializationData: {\n                ...paymentMethod.initializationData,\n                attributionId: '',\n                merchantId: null,\n            },\n        };\n\n        await paypalLoader.getPayPalSDK(paymentMethodMock, 'USD', 'en-US', false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {};\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('throw error if unable to load Paypal script', async () => {\n        const expectedError = new PaymentMethodClientUnavailableError();\n\n        jest.spyOn(loader, 'loadScript').mockImplementation(() => {\n            throw expectedError;\n        });\n\n        try {\n            await paypalLoader.getPayPalSDK(paymentMethod, 'USD', 'en-US');\n        } catch (error) {\n            expect(error).toEqual(expectedError);\n        }\n    });\n\n    it('loads PayPalSDK with locale parameter', async () => {\n        await paypalLoader.getPayPalSDK(paymentMethod, 'USD', 'fr', true, false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=fr_FR';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads PayPalSDK with hyphenated locale converted to underscore', async () => {\n        await paypalLoader.getPayPalSDK(paymentMethod, 'USD', 'en-US', true, false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n\n    it('loads PayPalSDK with language-only locale', async () => {\n        await paypalLoader.getPayPalSDK(paymentMethod, 'USD', 'fr', true, false);\n\n        const paypalSdkScriptSrc =\n            'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=fr_FR';\n        const paypalSdkAttributes = {\n            'data-client-token': paymentMethod.clientToken,\n            'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n        };\n\n        expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n            async: true,\n            attributes: paypalSdkAttributes,\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { transformLocaleToPayPalFormat } from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport {\n    ComponentsScriptType,\n    FundingType,\n    PayPalCommerceHostWindow,\n    PayPalCommerceInitializationData,\n    PayPalCommerceScriptParams,\n    PayPalSDK,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceScriptLoader {\n    private window: PayPalCommerceHostWindow;\n\n    constructor(private scriptLoader: ScriptLoader) {\n        this.window = window;\n    }\n\n    async getPayPalSDK(\n        paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n        initializesOnCheckoutPage?: boolean,\n        forceLoad?: boolean,\n    ): Promise<PayPalSDK> {\n        const paypalSdkScriptConfig = this.getPayPalSdkScriptConfigOrThrow(\n            paymentMethod,\n            currencyCode,\n            storeLanguage,\n            initializesOnCheckoutPage,\n        );\n\n        return this.loadPayPalSDK(paypalSdkScriptConfig, forceLoad);\n    }\n\n    private async loadPayPalSDK(\n        paypalSdkScriptConfig: PayPalCommerceScriptParams,\n        forceLoad = false,\n    ): Promise<PayPalSDK> {\n        if (!this.window.paypal || forceLoad) {\n            const options = this.transformConfig<PayPalCommerceScriptParams['options']>(\n                paypalSdkScriptConfig.options,\n            );\n            const attributes = this.transformConfig<PayPalCommerceScriptParams['attributes']>(\n                paypalSdkScriptConfig.attributes,\n            );\n\n            const paypalSdkUrl = 'https://www.paypal.com/sdk/js';\n            const scriptQuery = new URLSearchParams(options).toString();\n            const scriptSrc = `${paypalSdkUrl}?${scriptQuery}`;\n\n            await this.scriptLoader.loadScript(scriptSrc, { async: true, attributes });\n        }\n\n        if (!this.window.paypal) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.window.paypal;\n    }\n\n    private getPayPalSdkScriptConfigOrThrow(\n        paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n        initializesOnCheckoutPage = true,\n    ): PayPalCommerceScriptParams {\n        const { id, clientToken, initializationData } = paymentMethod;\n\n        if (!initializationData?.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            intent,\n            clientId,\n            merchantId,\n            buyerCountry,\n            attributionId,\n            isVenmoEnabled,\n            isHostedCheckoutEnabled,\n            isPayPalCreditAvailable,\n            isDeveloperModeApplicable,\n            availableAlternativePaymentMethods = [],\n            enabledAlternativePaymentMethods = [],\n            isGooglePayEnabled,\n        } = initializationData;\n\n        const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n        const shouldEnableCard = id === 'paypalcommercecreditcards';\n        const enableCardFunding = shouldEnableCard ? ['card'] : [];\n        const disableCardFunding = !shouldEnableCard ? ['card'] : [];\n\n        const enableCreditFunding = isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n        const disableCreditFunding = !isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n\n        const enableVenmoFunding = isVenmoEnabled ? ['venmo'] : [];\n        const disableVenmoFunding = !isVenmoEnabled ? ['venmo'] : [];\n        const disableAPMsFunding = availableAlternativePaymentMethods.filter(\n            (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n        );\n        const googlePayComponent: ComponentsScriptType = isGooglePayEnabled ? ['googlepay'] : [];\n        const cardFieldsComponent: ComponentsScriptType = initializesOnCheckoutPage\n            ? ['card-fields']\n            : [];\n        const disableFunding: FundingType = [\n            ...disableCardFunding,\n            ...disableCreditFunding,\n            ...disableVenmoFunding,\n            ...disableAPMsFunding,\n        ];\n        const enableFunding: FundingType = [\n            ...enableCardFunding,\n            ...enableCreditFunding,\n            ...enableVenmoFunding,\n            ...enabledAlternativePaymentMethods,\n        ];\n\n        const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                'enable-funding': enableFunding.length > 0 ? enableFunding : undefined,\n                'disable-funding': disableFunding.length > 0 ? disableFunding : undefined,\n                commit,\n                components: [\n                    'buttons',\n                    'hosted-fields',\n                    'payment-fields',\n                    'legal',\n                    ...googlePayComponent,\n                    ...cardFieldsComponent,\n                ],\n                currency: currencyCode,\n                intent,\n                ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n                ...(locale && { locale }),\n            },\n            attributes: {\n                'data-partner-attribution-id': attributionId,\n                'data-client-token': clientToken,\n            },\n        };\n    }\n\n    private transformConfig<T extends Record<string, unknown>>(config: T): Record<string, string> {\n        let transformedConfig = {};\n\n        const keys = Object.keys(config) as Array<keyof T>;\n\n        keys.forEach((key) => {\n            const value = config[key];\n\n            if (\n                value === undefined ||\n                value === null ||\n                value === '' ||\n                (Array.isArray(value) && value.length === 0)\n            ) {\n                return;\n            }\n\n            transformedConfig = {\n                ...transformedConfig,\n                [key]: Array.isArray(value) ? value.join(',') : value,\n            };\n        });\n\n        return transformedConfig;\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-types.ts",
    "content": "import {\n    BuyNowCartRequestBody,\n    HostedInstrument,\n    ShippingOption,\n    VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n *\n * PayPal Commerce Funding sources\n *\n */\nexport type FundingType = string[];\nexport type EnableFundingType = FundingType | string;\n\nexport interface PayPalCommerceSDKFunding {\n    CARD: string;\n    PAYPAL: string;\n    CREDIT: string;\n    PAYLATER: string;\n    OXXO: string;\n    SEPA: string;\n    VENMO: string;\n}\n\n/**\n *\n * PayPal Commerce SDK\n *\n */\n\nexport interface PayPalCommerceCardFieldsConfig {\n    inputEvents: {\n        onChange(data: PayPalCommerceCardFieldsState): void;\n        onFocus(data: PayPalCommerceCardFieldsState): void;\n        onBlur(data: PayPalCommerceCardFieldsState): void;\n        onInputSubmitRequest(data: PayPalCommerceCardFieldsState): void;\n    };\n    createVaultSetupToken?: (data: PayPalCommerceCardFieldsState) => void;\n    createOrder?: () => Promise<string>;\n    style: PayPalCommerceHostedFieldsRenderOptions['styles'];\n    onApprove(data: PayPalCommerceCardFieldsOnApproveData): void;\n    onError(): void;\n}\n\nexport interface PayPalCommerceCardFieldsOnApproveData {\n    vaultSetupToken?: string;\n    orderID: string;\n    liabilityShift?: LiabilityShiftEnum;\n}\n\nexport enum LiabilityShiftEnum {\n    Possible = 'POSSIBLE',\n    No = 'NO',\n    Unknown = 'UNKNOWN',\n    Yes = 'YES',\n}\n\ninterface PayPalCommerceCardFieldsFieldData {\n    isFocused: boolean;\n    isEmpty: boolean;\n    isValid: boolean;\n    isPotentiallyValid: boolean;\n}\n\ntype PayPalCommerceCardFieldsCard = PayPalCommerceHostedFieldsCard;\n\nexport interface PayPalCommerceCardFieldsState {\n    cards: PayPalCommerceCardFieldsCard[];\n    emittedBy: string;\n    isFormValid: boolean;\n    errors: string[];\n    fields: {\n        cardCvvField: PayPalCommerceCardFieldsFieldData;\n        cardNumberField: PayPalCommerceCardFieldsFieldData;\n        cardNameField?: PayPalCommerceCardFieldsFieldData;\n        cardExpiryField: PayPalCommerceCardFieldsFieldData;\n    };\n}\n\nexport interface PayPalCommerceFields {\n    render(container: HTMLElement | string): Promise<void>;\n    clear(): void;\n    removeClass(className: string): Promise<void>;\n    close(): Promise<void>;\n}\n\ninterface PayPalCommerceFieldsInitializationData {\n    placeholder?: string;\n}\n\nexport interface PayPalCommerceCardFields {\n    isEligible(): boolean;\n    CVVField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\n    ExpiryField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\n    NameField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\n    NumberField(config?: PayPalCommerceFieldsInitializationData): PayPalCommerceFields;\n    submit(config?: PayPalCommerceCardFieldsSubmitConfig): Promise<void>;\n    getState(): Promise<PayPalCommerceCardFieldsState>;\n}\n\nexport interface PayPalCommerceCardFieldsSubmitConfig {\n    billingAddress: {\n        company?: string;\n        addressLine1: string;\n        addressLine2?: string;\n        adminArea1: string; // State\n        adminArea2: string; // City\n        postalCode: string;\n        countryCode?: string;\n    };\n}\n\nexport interface PayPalSDK {\n    CardFields: (data: PayPalCommerceCardFieldsConfig) => Promise<PayPalCommerceCardFields>;\n    Googlepay: () => {\n        config: () => Promise<GooglePayConfig>;\n        confirmOrder: (arg0: {\n            orderId: string;\n            paymentMethodData: ConfirmOrderData;\n        }) => Promise<{ status: string }>;\n        initiatePayerAction: () => void;\n    };\n    FUNDING: PayPalCommerceSDKFunding;\n    HostedFields: {\n        isEligible(): boolean;\n        render(data: PayPalCommerceHostedFieldsRenderOptions): Promise<PayPalCommerceHostedFields>;\n    };\n    Legal: PayPalLegal & LegalFunding;\n    Buttons(options: PayPalCommerceButtonsOptions): PayPalCommerceButtons;\n    PaymentFields(options: PayPalCommercePaymentFieldsOptions): PayPalCommercePaymentFields;\n    Messages(options: PayPalCommerceMessagesOptions): PayPalCommerceMessages;\n}\n\nexport interface ConfirmOrderData {\n    tokenizationData: {\n        type: string;\n        token: string;\n    };\n    info: {\n        cardNetwork: string;\n        cardDetails: string;\n    };\n    type: string;\n}\n\nexport interface GooglePayConfig {\n    allowedPaymentMethods: AllowedPaymentMethods[];\n    apiVersion: number;\n    apiVersionMinor: number;\n    countryCode: string;\n    isEligible: boolean;\n    merchantInfo: {\n        merchantId: string;\n        merchantOrigin: string;\n    };\n}\n\nexport interface AllowedPaymentMethods {\n    type: string;\n    parameters: {\n        allowedAuthMethods: string[];\n        allowedCardNetworks: string[];\n        billingAddressRequired: boolean;\n        assuranceDetailsRequired: boolean;\n        billingAddressParameters: {\n            format: string;\n        };\n    };\n    tokenizationSpecification: {\n        type: string;\n        parameters: {\n            gateway: string;\n            gatewayMerchantId: string;\n        };\n    };\n}\n\nexport type PayPalLegal = (params: { fundingSource: string }) => {\n    render(container: string): void;\n};\n\nexport interface LegalFunding {\n    FUNDING: {\n        PAY_UPON_INVOICE: string;\n    };\n}\n\nexport interface BirthDate {\n    getFullYear(): number;\n    getDate(): number;\n    getMonth(): number;\n}\n\nexport interface PayPalCommerceScriptParams {\n    options: {\n        'client-id'?: string;\n        'merchant-id'?: string;\n        'buyer-country'?: string;\n        'disable-funding'?: FundingType;\n        'enable-funding'?: EnableFundingType;\n        currency?: string;\n        commit?: boolean;\n        intent?: PayPalCommerceIntent;\n        components?: ComponentsScriptType;\n        locale?: string;\n    };\n    attributes: {\n        'data-client-token'?: string;\n        'data-client-metadata-id'?: string;\n        'data-partner-attribution-id'?: string;\n        'data-user-id-token'?: string;\n    };\n}\n\nexport enum PayPalCommerceIntent {\n    AUTHORIZE = 'authorize',\n    CAPTURE = 'capture',\n}\n\nexport type ComponentsScriptType = Array<\n    | 'buttons'\n    | 'funding-eligibility'\n    | 'hosted-fields'\n    | 'messages'\n    | 'payment-fields'\n    | 'legal'\n    | 'googlepay'\n    | 'connect'\n    | 'card-fields'\n>;\n\nexport interface PayPalCommerceHostWindow extends Window {\n    paypal?: PayPalSDK;\n}\n\n/**\n *\n * PayPal Commerce Initialization Data\n *\n */\nexport interface PayPalCommerceInitializationData {\n    attributionId?: string;\n    availableAlternativePaymentMethods: FundingType;\n    buttonStyle?: PayPalButtonStyleOptions;\n    buyerCountry?: string;\n    clientId: string;\n    clientToken?: string;\n    enabledAlternativePaymentMethods: FundingType;\n    isDeveloperModeApplicable?: boolean;\n    intent?: PayPalCommerceIntent;\n    isAcceleratedCheckoutEnabled?: boolean;\n    isHostedCheckoutEnabled?: boolean;\n    isPayPalCreditAvailable?: boolean;\n    isVenmoEnabled?: boolean;\n    isGooglePayEnabled?: boolean;\n    merchantId?: string;\n    orderId?: string;\n    shouldRenderFields?: boolean;\n    shouldRunAcceleratedCheckout?: boolean;\n    paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\n    paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[];\n    isServerSideShippingCallbacksEnabled?: boolean;\n}\n\nexport interface PayPalBNPLConfigurationItem {\n    id: string;\n    name: string;\n    status: boolean;\n    styles: Record<string, string>;\n}\n\n/**\n *\n * PayPal Commerce BuyNow\n *\n */\nexport interface PayPalBuyNowInitializeOptions {\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\n}\n\n/**\n *\n * PayPal Commerce Hosted Fields\n *\n */\nexport interface PayPalCommerceHostedFieldsRenderOptions {\n    fields?: {\n        number?: PayPalCommerceHostedFieldOption;\n        cvv?: PayPalCommerceHostedFieldOption;\n        expirationDate?: PayPalCommerceHostedFieldOption;\n    };\n    paymentsSDK?: boolean;\n    styles?: {\n        input?: { [key: string]: string };\n        '.invalid'?: { [key: string]: string };\n        '.valid'?: { [key: string]: string };\n        ':focus'?: { [key: string]: string };\n    };\n    createOrder(): Promise<string>;\n}\n\nexport interface PayPalCommerceHostedFieldOption {\n    selector: string;\n    placeholder?: string;\n}\n\nexport interface PayPalCommerceHostedFields {\n    submit(\n        options?: PayPalCommerceHostedFieldsSubmitOptions,\n    ): Promise<PayPalCommerceHostedFieldsApprove>;\n    getState(): PayPalCommerceHostedFieldsState;\n    on(eventName: string, callback: (event: PayPalCommerceHostedFieldsState) => void): void;\n}\n\nexport interface PayPalCommerceHostedFieldsSubmitOptions {\n    contingencies?: Array<'3D_SECURE'>;\n    cardholderName?: string;\n}\n\nexport interface PayPalCommerceHostedFieldsApprove {\n    orderId: string;\n    liabilityShift?: 'POSSIBLE' | 'NO' | 'UNKNOWN';\n}\n\nexport interface PayPalCommerceHostedFieldsState {\n    cards: PayPalCommerceHostedFieldsCard[];\n    emittedBy: string;\n    fields: {\n        number?: PayPalCommerceHostedFieldsFieldData;\n        expirationDate?: PayPalCommerceHostedFieldsFieldData;\n        expirationMonth?: PayPalCommerceHostedFieldsFieldData;\n        expirationYear?: PayPalCommerceHostedFieldsFieldData;\n        cvv?: PayPalCommerceHostedFieldsFieldData;\n        postalCode?: PayPalCommerceHostedFieldsFieldData;\n    };\n}\n\nexport interface PayPalCommerceHostedFieldsCard {\n    type: string;\n    niceType: string;\n    code: {\n        name: string;\n        size: number;\n    };\n}\n\nexport interface PayPalCommerceHostedFieldsFieldData {\n    container: HTMLElement;\n    isFocused: boolean;\n    isEmpty: boolean;\n    isPotentiallyValid: boolean;\n    isValid: boolean;\n}\n\n/**\n *\n * PayPal Commerce Buttons\n *\n */\nexport interface PayPalCommerceButtons {\n    render(id: string): void;\n    close(): void;\n    isEligible(): boolean;\n    hasReturned?(): boolean;\n    resume?(): void;\n}\n\nexport interface PayPalCommerceButtonsOptions {\n    experience?: string;\n    style?: PayPalButtonStyleOptions;\n    fundingSource: string;\n    createOrder(): Promise<string>;\n    onApprove(\n        data: ApproveCallbackPayload,\n        actions: ApproveCallbackActions,\n    ): Promise<boolean | void> | void;\n    onInit?(data: InitCallbackPayload, actions: InitCallbackActions): Promise<void>;\n    onComplete?(data: CompleteCallbackDataPayload): Promise<void>;\n    onClick?(data: ClickCallbackPayload, actions: ClickCallbackActions): Promise<void> | void;\n    onError?(error: Error): void;\n    onCancel?(): void;\n    onShippingAddressChange?(data: ShippingAddressChangeCallbackPayload): Promise<void>;\n    onShippingOptionsChange?(data: ShippingOptionChangeCallbackPayload): Promise<void>;\n}\n\nexport interface ShippingOptionChangeCallbackPayload {\n    orderId: string;\n    selectedShippingOption: PayPalSelectedShippingOption;\n}\n\nexport interface ShippingAddressChangeCallbackPayload {\n    orderId: string;\n    shippingAddress: PayPalAddress;\n}\n\nexport interface ClickCallbackPayload {\n    fundingSource: string;\n}\n\nexport interface ClickCallbackActions {\n    reject(): void;\n    resolve(): void;\n}\n\nexport interface InitCallbackPayload {\n    correlationID: string;\n}\n\nexport interface InitCallbackActions {\n    disable(): void;\n    enable(): void;\n}\n\nexport interface PayPalAddress {\n    city: string;\n    countryCode: string;\n    postalCode: string;\n    state: string;\n}\n\nexport interface PaypalAddressCallbackData {\n    city: string;\n    country_code: string;\n    postal_code: string;\n    state: string;\n}\n\nexport interface PayPalSelectedShippingOption {\n    amount: {\n        currency_code: string;\n        value: string;\n    };\n    id: string;\n    label: string;\n    selected: boolean;\n    type: string;\n}\n\nexport interface ApproveCallbackPayload {\n    orderID?: string;\n}\n\nexport interface ApproveCallbackActions {\n    order: {\n        get: () => Promise<PayPalOrderDetails>;\n    };\n}\n\nexport interface PayPalOrderDetails {\n    payer: {\n        name: {\n            given_name: string;\n            surname: string;\n        };\n        email_address: string;\n        address: PayPalOrderAddress;\n        phone?: {\n            phone_number: {\n                national_number: string;\n            };\n        };\n    };\n    purchase_units: Array<{\n        shipping: {\n            address: PayPalOrderAddress;\n            name: {\n                full_name: string;\n            };\n        };\n    }>;\n}\n\nexport interface PayPalOrderAddress {\n    address_line_1: string;\n    address_line_2: string;\n    admin_area_2: string;\n    admin_area_1?: string;\n    postal_code: string;\n    country_code: string;\n}\n\nexport interface CompleteCallbackDataPayload {\n    intent: string;\n    orderID: string;\n}\n\nexport enum StyleButtonLabel {\n    paypal = 'paypal',\n    checkout = 'checkout',\n    buynow = 'buynow',\n    pay = 'pay',\n    installment = 'installment',\n}\n\nexport enum StyleButtonColor {\n    gold = 'gold',\n    blue = 'blue',\n    silver = 'silver',\n    black = 'black',\n    white = 'white',\n}\n\nexport enum StyleButtonShape {\n    pill = 'pill',\n    rect = 'rect',\n}\n\nexport interface PayPalButtonStyleOptions {\n    color?: StyleButtonColor;\n    shape?: StyleButtonShape;\n    height?: number;\n    label?: StyleButtonLabel;\n}\n\n/**\n *\n * PayPal Commerce Payment fields\n *\n */\nexport interface PayPalCommercePaymentFields {\n    render(id: string): void;\n}\n\nexport interface PayPalCommercePaymentFieldsOptions {\n    style?: PayPalCommerceFieldsStyleOptions;\n    fundingSource: string;\n    fields: {\n        name?: {\n            value?: string;\n        };\n        email?: {\n            value?: string;\n        };\n    };\n}\n\nexport interface PayPalCommerceFieldsStyleOptions {\n    variables?: {\n        fontFamily?: string;\n        fontSizeBase?: string;\n        fontSizeSm?: string;\n        fontSizeM?: string;\n        fontSizeLg?: string;\n        textColor?: string;\n        colorTextPlaceholder?: string;\n        colorBackground?: string;\n        colorInfo?: string;\n        colorDanger?: string;\n        borderRadius?: string;\n        borderColor?: string;\n        borderWidth?: string;\n        borderFocusColor?: string;\n        spacingUnit?: string;\n    };\n    rules?: {\n        [key: string]: any;\n    };\n}\n\n/**\n *\n * PayPalCommerce Messages\n */\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalCommerceMessages {\n    render(id: string): void;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalCommerceMessagesOptions {\n    amount: number;\n    placement: string;\n    style?: PayPalCommerceMessagesStyleOptions;\n    fundingSource?: string;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalCommerceMessagesStyleOptions {\n    layout?: string;\n}\n\n/**\n *\n * Other\n *\n */\nexport enum NonInstantAlternativePaymentMethods {\n    OXXO = 'oxxo',\n    IDEAL = 'ideal',\n}\n\nexport interface PayPalOrderData {\n    orderId: string;\n    setupToken?: string;\n    approveUrl: string;\n    fastlaneToken?: string;\n}\n\nexport interface PayPalUpdateOrderRequestBody {\n    availableShippingOptions?: ShippingOption[];\n    cartId: string;\n    selectedShippingOption?: ShippingOption | null;\n}\n\nexport interface PayPalUpdateOrderResponse {\n    statusCode: number;\n}\n\nexport interface PayPalCreateOrderRequestBody extends HostedInstrument, VaultedInstrument {\n    cartId: string;\n    metadataId?: string;\n    setupToken?: boolean;\n    fastlaneToken?: string;\n}\n\nexport enum PayPalOrderStatus {\n    Approved = 'APPROVED',\n    Created = 'CREATED',\n    PayerActionRequired = 'PAYER_ACTION_REQUIRED',\n    PollingStop = 'POLLING_STOP',\n    PollingError = 'POLLING_ERROR',\n}\n\nexport interface PayPalOrderStatusData {\n    status: PayPalOrderStatus;\n}\n\nexport interface PayPalCreateOrderCardFieldsResponse {\n    orderId: string;\n    setupToken?: string;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPayPalCommerceVenmoButtonStrategy from './create-paypal-commerce-venmo-button-strategy';\nimport PayPalCommerceButtonStrategy from './paypal-commerce-venmo-button-strategy';\n\ndescribe('createPayPalCommerceVenmoButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce venmo button strategy', () => {\n        const strategy = createPayPalCommerceVenmoButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PayPalCommerceButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-button-strategy.ts",
    "content": "import {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceVenmoButtonStrategy from './paypal-commerce-venmo-button-strategy';\n\nconst createPayPalCommerceVenmoButtonStrategy: CheckoutButtonStrategyFactory<\n    PayPalCommerceVenmoButtonStrategy\n> = (paymentIntegrationService) =>\n    new PayPalCommerceVenmoButtonStrategy(\n        paymentIntegrationService,\n        createPayPalCommerceIntegrationService(paymentIntegrationService),\n    );\n\nexport default toResolvableModule(createPayPalCommerceVenmoButtonStrategy, [\n    { id: 'paypalcommercevenmo' },\n]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-cuastomer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPaypalCommerceVenmoCustomerStrategy from './create-paypal-commerce-venmo-customer-strategy';\nimport PayPalCommerceVenmoCustomerStrategy from './paypal-commerce-venmo-customer-strategy';\n\ndescribe('createPayPalCommerceVenmoCustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce venmo customer strategy', () => {\n        const strategy = createPaypalCommerceVenmoCustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PayPalCommerceVenmoCustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-customer-strategy.ts",
    "content": "import {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalCommerceIntegrationService from '../create-paypal-commerce-integration-service';\n\nimport PayPalCommerceVenmoCustomerStrategy from './paypal-commerce-venmo-customer-strategy';\n\nconst createPayPalCommerceVenmoCustomerStrategy: CustomerStrategyFactory<\n    PayPalCommerceVenmoCustomerStrategy\n> = (paymentIntegrationService) =>\n    new PayPalCommerceVenmoCustomerStrategy(\n        paymentIntegrationService,\n        createPayPalCommerceIntegrationService(paymentIntegrationService),\n    );\n\nexport default toResolvableModule(createPayPalCommerceVenmoCustomerStrategy, [\n    { id: 'paypalcommercevenmo' },\n]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPayPalCommerceVenmoPaymentStrategy from './create-paypal-commerce-venmo-payment-strategy';\nimport PayPalCommerceVenmoPaymentStrategy from './paypal-commerce-venmo-payment-strategy';\n\ndescribe('createPayPalCommerceVenmoPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal commerce venmo payment strategy', () => {\n        const strategy = createPayPalCommerceVenmoPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PayPalCommerceVenmoPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/create-paypal-commerce-venmo-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { createPayPalIntegrationService } from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport PayPalCommerceVenmoPaymentStrategy from './paypal-commerce-venmo-payment-strategy';\n\nconst createPayPalCommerceVenmoPaymentStrategy: PaymentStrategyFactory<\n    PayPalCommerceVenmoPaymentStrategy\n> = (paymentIntegrationService) =>\n    new PayPalCommerceVenmoPaymentStrategy(\n        paymentIntegrationService,\n        createPayPalIntegrationService(paymentIntegrationService),\n        new LoadingIndicator({ styles: { backgroundColor: 'black' } }),\n    );\n\nexport default toResolvableModule(createPayPalCommerceVenmoPaymentStrategy, [\n    { id: 'paypalcommercevenmo' },\n]);\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-button-initialize-options.ts",
    "content": "import { PayPalButtonStyleOptions, PayPalBuyNowInitializeOptions } from '../paypal-commerce-types';\n\nexport default interface PayPalCommerceVenmoButtonInitializeOptions {\n    /**\n     * A set of styling options for the checkout button.\n     */\n    style?: PayPalButtonStyleOptions;\n\n    /**\n     * The option that used to initialize a PayPal script with provided currency code.\n     */\n    currencyCode?: string;\n\n    /**\n     * The options that required to initialize Buy Now functionality.\n     */\n    buyNowInitializeOptions?: PayPalBuyNowInitializeOptions;\n\n    /**\n     *\n     *  A callback that gets called when PayPal SDK restricts to render PayPal component.\n     *\n     */\n    onEligibilityFailure?(): void;\n}\n\nexport interface WithPayPalCommerceVenmoButtonInitializeOptions {\n    paypalcommercevenmo?: PayPalCommerceVenmoButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-button-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    Cart,\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getBuyNowCartRequestBody,\n    getCart,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    getPayPalCommerceIntegrationServiceMock,\n    getPayPalCommercePaymentMethod,\n    getPayPalSDKMock,\n} from '../mocks';\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n    PayPalCommerceButtonsOptions,\n    PayPalCommerceHostWindow,\n    PayPalSDK,\n    StyleButtonColor,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceVenmoButtonInitializeOptions from './paypal-commerce-venmo-button-initialize-options';\nimport PayPalCommerceVenmoButtonStrategy from './paypal-commerce-venmo-button-strategy';\n\ndescribe('PayPalCommerceVenmoButtonStrategy', () => {\n    let buyNowCart: Cart;\n    let cart: Cart;\n    let eventEmitter: EventEmitter;\n    let strategy: PayPalCommerceVenmoButtonStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalButtonElement: HTMLDivElement;\n    let paypalCommerceIntegrationService: PayPalCommerceIntegrationService;\n    let paypalSdk: PayPalSDK;\n\n    const defaultMethodId = 'paypalcommercevenmo';\n    const defaultButtonContainerId = 'paypal-commerce-venmo-button-mock-id';\n    const paypalOrderId = 'ORDER_ID';\n\n    const buyNowCartRequestBody = getBuyNowCartRequestBody();\n\n    const buyNowPayPalCommerceVenmoOptions: PayPalCommerceVenmoButtonInitializeOptions = {\n        buyNowInitializeOptions: {\n            getBuyNowCartRequestBody: jest.fn().mockReturnValue(buyNowCartRequestBody),\n        },\n        currencyCode: 'USD',\n        style: {\n            height: 45,\n        },\n    };\n\n    const buyNowInitializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        paypalcommercevenmo: buyNowPayPalCommerceVenmoOptions,\n    };\n\n    const paypalCommerceVenmoOptions: PayPalCommerceVenmoButtonInitializeOptions = {\n        style: {\n            height: 45,\n        },\n        onEligibilityFailure: jest.fn(),\n    };\n\n    const initializationOptions: CheckoutButtonInitializeOptions = {\n        methodId: defaultMethodId,\n        containerId: defaultButtonContainerId,\n        paypalcommercevenmo: paypalCommerceVenmoOptions,\n    };\n\n    beforeEach(() => {\n        buyNowCart = getBuyNowCart();\n        cart = getCart();\n\n        eventEmitter = new EventEmitter();\n\n        paymentMethod = { ...getPayPalCommercePaymentMethod(), id: 'paypalcommercevenmo' };\n        paypalSdk = getPayPalSDKMock();\n        paypalCommerceIntegrationService = getPayPalCommerceIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new PayPalCommerceVenmoButtonStrategy(\n            paymentIntegrationService,\n            paypalCommerceIntegrationService,\n        );\n\n        paypalButtonElement = document.createElement('div');\n        paypalButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(paypalButtonElement);\n\n        jest.spyOn(paymentIntegrationService, 'loadDefaultCheckout').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(paypalCommerceIntegrationService, 'loadPayPalSdk').mockReturnValue(\n            Promise.resolve(paypalSdk),\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'createBuyNowCartOrThrow').mockReturnValue(\n            Promise.resolve(buyNowCart),\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'createOrder');\n        jest.spyOn(paypalCommerceIntegrationService, 'tokenizePayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'removeElement').mockImplementation(jest.fn());\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: PayPalCommerceButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on(\n                    'onClick',\n                    // eslint-disable-next-line @typescript-eslint/no-misused-promises\n                    async (jestSuccessExpectationsCallback, jestFailureExpectationsCallback) => {\n                        try {\n                            if (options.onClick) {\n                                await options.onClick(\n                                    { fundingSource: 'venmo' },\n                                    {\n                                        reject: jest.fn(),\n                                        resolve: jest.fn(),\n                                    },\n                                );\n\n                                if (\n                                    jestSuccessExpectationsCallback &&\n                                    typeof jestSuccessExpectationsCallback === 'function'\n                                ) {\n                                    jestSuccessExpectationsCallback();\n                                }\n                            }\n                        } catch (error) {\n                            if (\n                                jestFailureExpectationsCallback &&\n                                typeof jestFailureExpectationsCallback === 'function'\n                            ) {\n                                jestFailureExpectationsCallback(error);\n                            }\n                        }\n                    },\n                );\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: paypalOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onCancel', () => {\n                    if (options.onCancel) {\n                        options.onCancel();\n                    }\n                });\n\n                return {\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                    close: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as PayPalCommerceHostWindow).paypal;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(paypalButtonElement);\n        }\n    });\n\n    it('creates an instance of the PayPal Commerce Venmo checkout button strategy', () => {\n        expect(strategy).toBeInstanceOf(PayPalCommerceVenmoButtonStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if containerId is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercevenmo is not provided', async () => {\n            const options = {\n                containerId: defaultButtonContainerId,\n                methodId: defaultMethodId,\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercevenmo.currencyCode is not provided (for buyNowFlow only)', async () => {\n            const { currencyCode, ...rest } = buyNowPayPalCommerceVenmoOptions;\n\n            const newInitializationOptions = {\n                ...buyNowInitializationOptions,\n                paypalcommercevenmo: rest,\n            };\n\n            try {\n                await strategy.initialize(newInitializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if provided buyNow callback is not a function is not provided (for buyNowFlow only)', async () => {\n            const { buyNowInitializeOptions, ...rest } = buyNowPayPalCommerceVenmoOptions;\n\n            const newInitializationOptions = {\n                ...buyNowInitializationOptions,\n                paypalcommercevenmo: {\n                    ...rest,\n                    buyNowInitializeOptions: {\n                        getBuyNowCartRequestBody: 'string',\n                    },\n                },\n            } as CheckoutButtonInitializeOptions;\n\n            try {\n                await strategy.initialize(newInitializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads default checkout', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n\n        it('does not load default checkout for Buy Now flow', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paymentIntegrationService.loadDefaultCheckout).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal commerce sdk script', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n                cart.currency.code,\n                false,\n            );\n        });\n\n        it('loads paypal commerce sdk script with provided currency code (Buy Now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paypalCommerceIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n                buyNowPayPalCommerceVenmoOptions.currencyCode,\n                false,\n            );\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('initializes PayPal Venmo button to render', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.VENMO,\n                style: paypalCommerceVenmoOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('render button with undefined color (uses default blue) when it receives gold color setting', async () => {\n            const initializationVenmoOptions = {\n                ...initializationOptions,\n                paypalcommercevenmo: {\n                    style: {\n                        height: 45,\n                        color: StyleButtonColor.gold,\n                    },\n                },\n            };\n\n            const expectedStyles = {\n                height: 45,\n                color: undefined,\n            };\n\n            await strategy.initialize(initializationVenmoOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.VENMO,\n                style: expectedStyles,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n            });\n        });\n\n        it('initializes PayPal Venmo button to render (BuyNow flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.VENMO,\n                style: paypalCommerceVenmoOptions.style,\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n                onCancel: expect.any(Function),\n            });\n        });\n\n        it('renders PayPal Venmo button if it is eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => true),\n                render: paypalCommerceSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('calls onEligibilityFailure when PayPal Venmo button if it is not eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceVenmoOptions.onEligibilityFailure).toHaveBeenCalled();\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('removes Venmo PayPal button container if the button has not rendered', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n                close: jest.fn(),\n            }));\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercevenmo: {\n                    ...paypalCommerceVenmoOptions,\n                    onEligibilityFailure: undefined,\n                },\n            });\n\n            expect(paypalCommerceIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultButtonContainerId,\n            );\n        });\n    });\n\n    describe('#createOrder', () => {\n        it('creates paypal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommercevenmo',\n            );\n        });\n    });\n\n    describe('#handleClick', () => {\n        beforeEach(() => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockReturnValue(\n                Promise.resolve(buyNowCart),\n            );\n            jest.spyOn(paymentIntegrationService, 'loadCheckout');\n        });\n\n        it('creates buy now cart on button click', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.createBuyNowCartOrThrow).toHaveBeenCalled();\n        });\n\n        it('loads checkout related to buy now cart on button click', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadCheckout).toHaveBeenCalledWith(buyNowCart.id);\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        it('tokenizes payment on paypal approve', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                defaultMethodId,\n                paypalOrderId,\n            );\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('loads default checkout onCancel callback (buy now flow)', async () => {\n            await strategy.initialize(buyNowInitializationOptions);\n            eventEmitter.emit('onClick');\n            await new Promise((resolve) => process.nextTick(resolve));\n            eventEmitter.emit('onCancel');\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadDefaultCheckout).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-button-strategy.ts",
    "content": "import {\n    CheckoutButtonInitializeOptions,\n    CheckoutButtonStrategy,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n    ApproveCallbackPayload,\n    PayPalButtonStyleOptions,\n    PayPalBuyNowInitializeOptions,\n    PayPalCommerceButtonsOptions,\n    StyleButtonColor,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceVenmoButtonInitializeOptions, {\n    WithPayPalCommerceVenmoButtonInitializeOptions,\n} from './paypal-commerce-venmo-button-initialize-options';\n\nexport default class PayPalCommerceVenmoButtonStrategy implements CheckoutButtonStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n    ) {}\n\n    async initialize(\n        options: CheckoutButtonInitializeOptions & WithPayPalCommerceVenmoButtonInitializeOptions,\n    ): Promise<void> {\n        const { paypalcommercevenmo, containerId, methodId } = options;\n        const { buyNowInitializeOptions, currencyCode: providedCurrencyCode } =\n            paypalcommercevenmo || {};\n\n        const isBuyNowFlow = !!buyNowInitializeOptions;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!containerId) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.containerId\" argument is not provided.`,\n            );\n        }\n\n        if (!paypalcommercevenmo) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.`,\n            );\n        }\n\n        if (isBuyNowFlow && !providedCurrencyCode) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommercevenmo.currencyCode\" argument is not provided.`,\n            );\n        }\n\n        if (\n            isBuyNowFlow &&\n            typeof buyNowInitializeOptions?.getBuyNowCartRequestBody !== 'function'\n        ) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommercevenmo.buyNowInitializeOptions.getBuyNowCartRequestBody\" argument is not provided or it is not a function.`,\n            );\n        }\n\n        if (!isBuyNowFlow) {\n            // Info: default checkout should not be loaded for BuyNow flow,\n            // since there is no checkout session available for that.\n            await this.paymentIntegrationService.loadDefaultCheckout();\n        }\n\n        // Info: we are using provided currency code for buy now cart,\n        // because checkout session is not available before buy now cart creation,\n        // hence application will throw an error on getCartOrThrow method call\n        const currencyCode = isBuyNowFlow\n            ? providedCurrencyCode\n            : this.paymentIntegrationService.getState().getCartOrThrow().currency.code;\n\n        await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId, currencyCode, false);\n\n        this.renderButton(containerId, methodId, paypalcommercevenmo);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        containerId: string,\n        methodId: string,\n        paypalcommercevenmo: PayPalCommerceVenmoButtonInitializeOptions,\n    ): void {\n        const { buyNowInitializeOptions, style, onEligibilityFailure } = paypalcommercevenmo;\n\n        const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n        const fundingSource = paypalSdk.FUNDING.VENMO;\n\n        const defaultCallbacks = {\n            createOrder: () =>\n                this.paypalCommerceIntegrationService.createOrder('paypalcommercevenmo'),\n            onApprove: ({ orderID }: ApproveCallbackPayload) =>\n                this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n        };\n\n        const buyNowFlowCallbacks = {\n            onClick: () => this.handleClick(buyNowInitializeOptions),\n            onCancel: () => this.paymentIntegrationService.loadDefaultCheckout(),\n        };\n\n        const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n            fundingSource,\n            style: this.getValidVenmoButtonStyles(style),\n            ...defaultCallbacks,\n            ...(buyNowInitializeOptions && buyNowFlowCallbacks),\n        };\n\n        const paypalButtonRender = paypalSdk.Buttons(buttonRenderOptions);\n\n        if (paypalButtonRender.isEligible()) {\n            paypalButtonRender.render(`#${containerId}`);\n        } else if (onEligibilityFailure && typeof onEligibilityFailure === 'function') {\n            onEligibilityFailure();\n        } else {\n            this.paypalCommerceIntegrationService.removeElement(containerId);\n        }\n    }\n\n    private getValidVenmoButtonStyles(style: PayPalButtonStyleOptions | undefined) {\n        const validButtonStyle = this.paypalCommerceIntegrationService.getValidButtonStyle(style);\n\n        if (validButtonStyle.color === StyleButtonColor.gold) {\n            return {\n                ...validButtonStyle,\n                color: undefined,\n            };\n        }\n\n        return validButtonStyle;\n    }\n\n    private async handleClick(\n        buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n    ): Promise<void> {\n        if (buyNowInitializeOptions) {\n            const buyNowCart = await this.paypalCommerceIntegrationService.createBuyNowCartOrThrow(\n                buyNowInitializeOptions,\n            );\n\n            await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-customer-initialize-options.ts",
    "content": "export default interface PayPalCommerceVenmoCustomerInitializeOptions {\n    /**\n     * The ID of a container which the checkout button should be inserted into.\n     */\n    container: string;\n\n    /**\n     * A callback that gets called if unable to initialize the widget or select\n     * one of the address options provided by the widget.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onError?(error?: Error): void;\n\n    /**\n     * A callback that gets called when paypal button clicked.\n     */\n    onClick?(): void;\n}\n\nexport interface WithPayPalCommerceVenmoCustomerInitializeOptions {\n    paypalcommercevenmo?: PayPalCommerceVenmoCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-customer-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    CustomerInitializeOptions,\n    DefaultCheckoutButtonHeight,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    getPayPalCommerceIntegrationServiceMock,\n    getPayPalCommercePaymentMethod,\n    getPayPalSDKMock,\n} from '../mocks';\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n    PayPalCommerceButtonsOptions,\n    PayPalCommerceHostWindow,\n    PayPalSDK,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceVenmoCustomerInitializeOptions from './paypal-commerce-venmo-customer-initialize-options';\nimport PayPalCommerceVenmoCustomerStrategy from './paypal-commerce-venmo-customer-strategy';\n\ndescribe('PayPalCommerceVenmoCustomerStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let strategy: PayPalCommerceVenmoCustomerStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalButtonElement: HTMLDivElement;\n    let paypalCommerceIntegrationService: PayPalCommerceIntegrationService;\n    let paypalSdk: PayPalSDK;\n\n    const defaultMethodId = 'paypalcommercevenmo';\n    const defaultButtonContainerId = 'paypal-commerce-venmo-customer-mock-id';\n    const paypalOrderId = 'ORDER_ID';\n\n    const paypalCommerceVenmoOptions: PayPalCommerceVenmoCustomerInitializeOptions = {\n        container: defaultButtonContainerId,\n        onClick: jest.fn(),\n        onError: jest.fn(),\n    };\n\n    const initializationOptions: CustomerInitializeOptions = {\n        methodId: defaultMethodId,\n        paypalcommercevenmo: paypalCommerceVenmoOptions,\n    };\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n        paymentMethod = { ...getPayPalCommercePaymentMethod(), id: 'paypalcommercevenmo' };\n        paypalSdk = getPayPalSDKMock();\n        paypalCommerceIntegrationService = getPayPalCommerceIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new PayPalCommerceVenmoCustomerStrategy(\n            paymentIntegrationService,\n            paypalCommerceIntegrationService,\n        );\n\n        paypalButtonElement = document.createElement('div');\n        paypalButtonElement.id = defaultButtonContainerId;\n        document.body.appendChild(paypalButtonElement);\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'loadPayPalSdk').mockResolvedValue(paypalSdk);\n        jest.spyOn(paypalCommerceIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(\n            paypalSdk,\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'createOrder').mockImplementation(jest.fn());\n        jest.spyOn(paypalCommerceIntegrationService, 'tokenizePayment').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paypalCommerceIntegrationService, 'removeElement').mockImplementation(jest.fn());\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n            (options: PayPalCommerceButtonsOptions) => {\n                eventEmitter.on('createOrder', () => {\n                    if (options.createOrder) {\n                        options.createOrder();\n                    }\n                });\n\n                eventEmitter.on('onApprove', () => {\n                    if (options.onApprove) {\n                        options.onApprove(\n                            { orderID: paypalOrderId },\n                            {\n                                order: {\n                                    get: jest.fn(),\n                                },\n                            },\n                        );\n                    }\n                });\n\n                eventEmitter.on('onClick', () => {\n                    if (options.onClick) {\n                        options.onClick(\n                            { fundingSource: 'venmo' },\n                            {\n                                resolve: jest.fn(),\n                                reject: jest.fn(),\n                            },\n                        );\n                    }\n                });\n\n                return {\n                    isEligible: jest.fn(() => true),\n                    render: jest.fn(),\n                    close: jest.fn(),\n                };\n            },\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as PayPalCommerceHostWindow).paypal;\n\n        if (document.getElementById(defaultButtonContainerId)) {\n            document.body.removeChild(paypalButtonElement);\n        }\n    });\n\n    it('creates an instance of the PayPal Commerce Venmo checkout button strategy', () => {\n        expect(strategy).toBeInstanceOf(PayPalCommerceVenmoCustomerStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercevenmo is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercevenmo.container is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n                paypalcommercevenmo: {\n                    container: undefined,\n                },\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws an error if paypalcommercevenmo.onClick is provided but it is not a function', async () => {\n            const options = {\n                methodId: defaultMethodId,\n                paypalcommercevenmo: {\n                    container: 'container',\n                    onClick: 'test',\n                },\n            } as CustomerInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('loads paypalcommercevenmo payment method', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                defaultMethodId,\n            );\n        });\n\n        it('does not load paypalcommercevenmo payment method if payment method is already exists', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n                paymentMethod,\n            );\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk with provided method id', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(\n                defaultMethodId,\n            );\n        });\n\n        it('logs an error when PayPalSDK Buttons implementation is not available for some reasons', async () => {\n            jest.spyOn(paypalCommerceIntegrationService, 'loadPayPalSdk').mockReturnValue(\n                Promise.resolve(undefined),\n            );\n\n            const log = jest.fn();\n\n            jest.spyOn(console, 'error').mockImplementation(log);\n\n            await strategy.initialize(initializationOptions);\n\n            expect(log).toHaveBeenCalled();\n        });\n    });\n\n    describe('#renderButton', () => {\n        it('initializes PayPal Venmo button to render', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource: paypalSdk.FUNDING.VENMO,\n                style: {\n                    color: 'silver',\n                    height: DefaultCheckoutButtonHeight,\n                    label: 'checkout',\n                },\n                createOrder: expect.any(Function),\n                onApprove: expect.any(Function),\n                onClick: expect.any(Function),\n            });\n        });\n\n        it('renders PayPal Venmo button if it is eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalled();\n        });\n\n        it('does not render PayPal Venmo button if it is not eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).not.toHaveBeenCalled();\n        });\n\n        it('removes Venmo PayPal button container if the button has not rendered', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceIntegrationService.removeElement).toHaveBeenCalledWith(\n                defaultButtonContainerId,\n            );\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates an order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommercevenmo',\n            );\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        it('tokenizes payment on paypal approve', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                defaultMethodId,\n                paypalOrderId,\n            );\n        });\n    });\n\n    describe('#onClick button callback', () => {\n        it('triggers onClick option by clicking on the button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalCommerceVenmoOptions.onClick).toHaveBeenCalled();\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('calls default sign in method', async () => {\n            const credentials = {\n                email: 'test@test.com',\n                password: '123',\n            };\n\n            await strategy.signIn(credentials);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                undefined,\n            );\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('calls default sign out method', async () => {\n            await strategy.signOut();\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalled();\n        });\n    });\n\n    describe('#executePaymentMethodCheckout()', () => {\n        it('calls default continue with checkout callback', async () => {\n            const continueWithCheckoutCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({ continueWithCheckoutCallback });\n\n            expect(continueWithCheckoutCallback).toHaveBeenCalled();\n        });\n\n        it('makes nothing if continue with checkout callback is not provided', async () => {\n            const result = await strategy.executePaymentMethodCheckout();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-customer-strategy.ts",
    "content": "import {\n    CustomerCredentials,\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    DefaultCheckoutButtonHeight,\n    ExecutePaymentMethodCheckoutOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalCommerceIntegrationService from '../paypal-commerce-integration-service';\nimport {\n    ApproveCallbackPayload,\n    PayPalCommerceButtonsOptions,\n    PayPalCommerceInitializationData,\n} from '../paypal-commerce-types';\n\nimport PayPalCommerceVenmoCustomerInitializeOptions, {\n    WithPayPalCommerceVenmoCustomerInitializeOptions,\n} from './paypal-commerce-venmo-customer-initialize-options';\n\nexport default class PayPalCommerceVenmoCustomerStrategy implements CustomerStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalCommerceIntegrationService: PayPalCommerceIntegrationService,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions & WithPayPalCommerceVenmoCustomerInitializeOptions,\n    ): Promise<void> {\n        const { paypalcommercevenmo, methodId } = options;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!paypalcommercevenmo) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.',\n            );\n        }\n\n        if (!paypalcommercevenmo.container) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommercevenmo.container\" argument is not provided.',\n            );\n        }\n\n        if (paypalcommercevenmo.onClick && typeof paypalcommercevenmo.onClick !== 'function') {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.paypalcommercevenmo.onClick\" argument is not a function.',\n            );\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethod(methodId);\n\n        if (!paymentMethod) {\n            await this.paymentIntegrationService.loadPaymentMethod(methodId);\n        }\n\n        const paypalSdk = await this.paypalCommerceIntegrationService.loadPayPalSdk(methodId);\n\n        if (!paypalSdk || !paypalSdk.Buttons || typeof paypalSdk.Buttons !== 'function') {\n            console.error(\n                '[BC PayPal]: PayPal Button could not be rendered, due to issues with loading PayPal SDK',\n            );\n\n            return;\n        }\n\n        this.renderButton(methodId, paypalcommercevenmo);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    async signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signInCustomer(credentials, options);\n    }\n\n    async signOut(options?: RequestOptions): Promise<void> {\n        await this.paymentIntegrationService.signOutCustomer(options);\n    }\n\n    executePaymentMethodCheckout(options?: ExecutePaymentMethodCheckoutOptions): Promise<void> {\n        options?.continueWithCheckoutCallback?.();\n\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        methodId: string,\n        paypalcommercevenmo: PayPalCommerceVenmoCustomerInitializeOptions,\n    ): void {\n        const { container, onClick } = paypalcommercevenmo;\n\n        const paypalSdk = this.paypalCommerceIntegrationService.getPayPalSdkOrThrow();\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod =\n            state.getPaymentMethodOrThrow<PayPalCommerceInitializationData>(methodId);\n        const { paymentButtonStyles } = paymentMethod.initializationData || {};\n        const { checkoutTopButtonStyles } = paymentButtonStyles || {};\n\n        const buttonRenderOptions: PayPalCommerceButtonsOptions = {\n            fundingSource: paypalSdk.FUNDING.VENMO,\n            style: this.paypalCommerceIntegrationService.getValidButtonStyle({\n                ...checkoutTopButtonStyles,\n                height: DefaultCheckoutButtonHeight,\n            }),\n            createOrder: () =>\n                this.paypalCommerceIntegrationService.createOrder('paypalcommercevenmo'),\n            onApprove: ({ orderID }: ApproveCallbackPayload) =>\n                this.paypalCommerceIntegrationService.tokenizePayment(methodId, orderID),\n            ...(onClick && { onClick: () => onClick() }),\n        };\n\n        const paypalButtonRender = paypalSdk.Buttons(buttonRenderOptions);\n\n        if (paypalButtonRender.isEligible()) {\n            paypalButtonRender.render(`#${container}`);\n        } else {\n            this.paypalCommerceIntegrationService.removeElement(container);\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-payment-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the PayPal Commerce payment\n * method for presenting its PayPal button.\n *\n * Please note that the minimum version of checkout-sdk is 1.100\n *\n * Also, PayPal (also known as PayPal Commerce Platform) requires specific options to initialize the PayPal Smart Payment Button on checkout page that substitutes a standard submit button\n * ```html\n * <!-- This is where the PayPal button will be inserted -->\n * <div id=\"container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'paypalcommercevenmo',\n *     paypalcommercevenmo: {\n *         container: '#container',\n * // Callback for submitting payment form that gets called when a buyer approves PayPal payment\n *         submitForm: () => {\n *         // Example function\n *             this.submitOrder(\n *                {\n *                   payment: { methodId: 'paypalcommercevenmo', }\n *               }\n *            );\n *         },\n * // Callback is used to define the state of the payment form, validate if it is applicable for submit.\n *         onValidate: (resolve, reject) => {\n *         // Example function\n *             const isValid = this.validatePaymentForm();\n *             if (isValid) {\n *                 return resolve();\n *             }\n *             return reject();\n *         },\n * // Callback that is called right before render of a Smart Payment Button. It gets called when a buyer is eligible for use of the particular PayPal method. This callback can be used to hide the standard submit button.\n *         onRenderButton: () => {\n *         // Example function\n *             this.hidePaymentSubmitButton();\n *         }\n *     },\n * });\n * ```\n */\nexport default interface PayPalCommerceVenmoPaymentInitializeOptions {\n    /**\n     * The CSS selector of a container where the payment widget should be inserted into.\n     */\n    container: string;\n\n    /**\n     * A callback for displaying error popup. This callback requires error object as parameter.\n     */\n    onError?(error: Error): void;\n\n    /**\n     * A callback right before render Smart Payment Button that gets called when\n     * Smart Payment Button is eligible. This callback can be used to hide the standard submit button.\n     */\n    onRenderButton?(): void;\n\n    /**\n     * A callback that gets called when a buyer click on Smart Payment Button\n     * and should validate payment form.\n     *\n     * @param resolve - A function, that gets called if form is valid.\n     * @param reject - A function, that gets called if form is not valid.\n     *\n     * @returns reject() or resolve()\n     */\n    onValidate(resolve: () => void, reject: () => void): Promise<void>;\n\n    /**\n     * A callback for submitting payment form that gets called\n     * when buyer approved PayPal account.\n     */\n    submitForm(): void;\n}\n\nexport interface WithPayPalCommerceVenmoPaymentInitializeOptions {\n    paypalcommerce?: PayPalCommerceVenmoPaymentInitializeOptions; // FIXME: this option is deprecated\n    paypalcommercevenmo?: PayPalCommerceVenmoPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-payment-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    InvalidArgumentError,\n    NotImplementedError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodInvalidError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    getPayPalIntegrationServiceMock,\n    getPayPalPaymentMethod,\n    getPayPalSDKMock,\n    PayPalButtonsOptions,\n    PayPalHostWindow,\n    PayPalIntegrationService,\n    PayPalSDK,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceVenmoPaymentInitializeOptions from './paypal-commerce-venmo-payment-initialize-options';\nimport PayPalCommerceVenmoPaymentStrategy from './paypal-commerce-venmo-payment-strategy';\n\ndescribe('PayPalCommerceVenmoPaymentStrategy', () => {\n    let eventEmitter: EventEmitter;\n    let loadingIndicator: LoadingIndicator;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalIntegrationService: PayPalIntegrationService;\n    let paypalSdk: PayPalSDK;\n    let strategy: PayPalCommerceVenmoPaymentStrategy;\n\n    const paypalOrderId = 'paypal123';\n\n    const fundingSource = 'venmo';\n    const defaultMethodId = 'paypalcommercevenmo';\n    const defaultContainerId = '#container';\n\n    const paypalCommerceVenmoOptions: PayPalCommerceVenmoPaymentInitializeOptions = {\n        container: defaultContainerId,\n        onValidate: jest.fn(),\n        submitForm: jest.fn(),\n    };\n\n    const initializationOptions: PaymentInitializeOptions = {\n        methodId: defaultMethodId,\n        paypalcommercevenmo: paypalCommerceVenmoOptions,\n    };\n\n    beforeEach(() => {\n        eventEmitter = new EventEmitter();\n\n        paypalSdk = getPayPalSDKMock();\n        paymentMethod = getPayPalPaymentMethod();\n        paymentMethod.id = defaultMethodId;\n        paymentMethod.initializationData.orderId = undefined;\n\n        loadingIndicator = new LoadingIndicator();\n        paypalIntegrationService = getPayPalIntegrationServiceMock();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new PayPalCommerceVenmoPaymentStrategy(\n            paymentIntegrationService,\n            paypalIntegrationService,\n            loadingIndicator,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(paypalIntegrationService, 'loadPayPalSdk').mockResolvedValue(paypalSdk);\n        jest.spyOn(paypalIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(paypalSdk);\n        jest.spyOn(paypalIntegrationService, 'createOrder').mockResolvedValue('');\n        jest.spyOn(paypalIntegrationService, 'submitPayment').mockResolvedValue(undefined);\n\n        jest.spyOn(loadingIndicator, 'show').mockReturnValue(undefined);\n        jest.spyOn(loadingIndicator, 'hide').mockReturnValue(undefined);\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation((options: PayPalButtonsOptions) => {\n            eventEmitter.on('createOrder', () => {\n                if (options.createOrder) {\n                    options.createOrder();\n                }\n            });\n\n            eventEmitter.on('onClick', () => {\n                if (options.onClick) {\n                    options.onClick(\n                        { fundingSource: 'venmo' },\n                        {\n                            reject: jest.fn(),\n                            resolve: jest.fn(),\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onApprove', () => {\n                if (options.onApprove) {\n                    options.onApprove(\n                        { orderID: paypalOrderId },\n                        {\n                            order: {\n                                get: jest.fn(),\n                            },\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onCancel', () => {\n                if (options.onCancel) {\n                    options.onCancel();\n                }\n            });\n\n            eventEmitter.on('onError', () => {\n                if (options.onError) {\n                    options.onError(new Error());\n                }\n            });\n\n            return {\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: jest.fn(),\n            };\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        delete (window as PayPalHostWindow).paypal;\n    });\n\n    it('creates an instance of the PayPal Commerce Venmo payment strategy', () => {\n        expect(strategy).toBeInstanceOf(PayPalCommerceVenmoPaymentStrategy);\n    });\n\n    describe('#initialize()', () => {\n        it('throws error if methodId is not provided', async () => {\n            const options = {} as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('throws error if options.paypalcommercevenmo is not provided', async () => {\n            const options = {\n                methodId: defaultMethodId,\n            } as PaymentInitializeOptions;\n\n            try {\n                await strategy.initialize(options);\n            } catch (error) {\n                expect(error).toBeInstanceOf(InvalidArgumentError);\n            }\n        });\n\n        it('does not continues strategy initialization if order id is available in initializationData', async () => {\n            paymentMethod.initializationData.orderId = '1';\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalIntegrationService.loadPayPalSdk).not.toHaveBeenCalled();\n        });\n\n        it('loads paypal sdk', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalIntegrationService.loadPayPalSdk).toHaveBeenCalledWith(defaultMethodId);\n        });\n    });\n\n    describe('#renderButton()', () => {\n        it('initializes paypal button', async () => {\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n                fundingSource,\n                style: {\n                    color: 'black',\n                    height: 55,\n                    label: 'pay',\n                },\n                createOrder: expect.any(Function),\n                onClick: expect.any(Function),\n                onApprove: expect.any(Function),\n                onCancel: expect.any(Function),\n                onError: expect.any(Function),\n            });\n        });\n\n        it('throws an error if paypal button is not eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => false),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            try {\n                await strategy.initialize(initializationOptions);\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotImplementedError);\n            }\n        });\n\n        it('renders paypal button if it is eligible', async () => {\n            const paypalCommerceSdkRenderMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                close: jest.fn(),\n                isEligible: jest.fn(() => true),\n                render: paypalCommerceSdkRenderMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n\n            expect(paypalCommerceSdkRenderMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#createOrder button callback', () => {\n        it('creates paypal order', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('createOrder');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.createOrder).toHaveBeenCalledWith(\n                'paypalcommercevenmocheckout',\n            );\n        });\n    });\n\n    describe('#onClick button callback', () => {\n        it('calls validation callback with provided params', async () => {\n            const onValidateMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercevenmo: {\n                    ...paypalCommerceVenmoOptions,\n                    onValidate: onValidateMock,\n                },\n            });\n\n            eventEmitter.emit('onClick');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(onValidateMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onApprove button callback', () => {\n        it('submits form', async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercevenmo: {\n                    ...paypalCommerceVenmoOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n        });\n\n        it('hides loading indicator after form submit', async () => {\n            const submitFormMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercevenmo: {\n                    ...paypalCommerceVenmoOptions,\n                    submitForm: submitFormMock,\n                },\n            });\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(submitFormMock).toHaveBeenCalled();\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onCancel button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onCancel');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#onError button callback', () => {\n        it('hides loading indicator', async () => {\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n\n        it('calls onError callback if it is provided', async () => {\n            const onErrorMock = jest.fn();\n\n            await strategy.initialize({\n                ...initializationOptions,\n                paypalcommercevenmo: {\n                    ...paypalCommerceVenmoOptions,\n                    onError: onErrorMock,\n                },\n            });\n\n            eventEmitter.emit('onError');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(loadingIndicator.hide).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throws an error if payload.payment is not provided', async () => {\n            try {\n                await strategy.execute({});\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentArgumentInvalidError);\n            }\n        });\n\n        it('throws an error if orderId is not defined', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodInvalidError);\n            }\n        });\n\n        it('submits order', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('submits payment with provided data', async () => {\n            const payload = {\n                payment: {\n                    methodId: defaultMethodId,\n                },\n            };\n\n            await strategy.initialize(initializationOptions);\n\n            eventEmitter.emit('onApprove');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            await strategy.execute(payload);\n\n            expect(paypalIntegrationService.submitPayment).toHaveBeenCalledWith(\n                payload.payment.methodId,\n                paypalOrderId,\n            );\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('closes paypal button component on deinitialize strategy', async () => {\n            const paypalCommerceSdkCloseMock = jest.fn();\n\n            jest.spyOn(paypalSdk, 'Buttons').mockImplementation(() => ({\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: paypalCommerceSdkCloseMock,\n            }));\n\n            await strategy.initialize(initializationOptions);\n            await strategy.deinitialize();\n\n            expect(paypalCommerceSdkCloseMock).toHaveBeenCalled();\n        });\n\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-integration/src/paypal-commerce-venmo/paypal-commerce-venmo-payment-strategy.ts",
    "content": "import {\n    InvalidArgumentError,\n    NotImplementedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodInvalidError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    ApproveCallbackPayload,\n    ClickCallbackActions,\n    PayPalButtons,\n    PayPalButtonsOptions,\n    PayPalInitializationData,\n    PayPalIntegrationService,\n} from '@bigcommerce/checkout-sdk/paypal-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport PayPalCommerceVenmoPaymentInitializeOptions, {\n    WithPayPalCommerceVenmoPaymentInitializeOptions,\n} from './paypal-commerce-venmo-payment-initialize-options';\n\nexport default class PayPalCommerceVenmoPaymentStrategy implements PaymentStrategy {\n    private loadingIndicatorContainer?: string;\n    private orderId?: string;\n    private paypalButton?: PayPalButtons;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalIntegrationService: PayPalIntegrationService,\n        private loadingIndicator: LoadingIndicator,\n    ) {}\n\n    async initialize(\n        options?: PaymentInitializeOptions & WithPayPalCommerceVenmoPaymentInitializeOptions,\n    ): Promise<void> {\n        const { methodId, paypalcommerce, paypalcommercevenmo } = options || {};\n\n        const paypalOptions = paypalcommercevenmo || paypalcommerce;\n\n        if (!methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"options.methodId\" argument is not provided.',\n            );\n        }\n\n        if (!paypalOptions) {\n            throw new InvalidArgumentError(\n                `Unable to initialize payment because \"options.paypalcommercevenmo\" argument is not provided.`,\n            );\n        }\n\n        await this.paymentIntegrationService.loadPaymentMethod(methodId);\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n\n        // Info:\n        // The PayPal button and fields should not be rendered when shopper was redirected to Checkout page\n        // after using smart payment button on PDP or Cart page. In this case backend returns order id if\n        // it is available in checkout session. Therefore, it is not necessary to render PayPal button.\n        if (paymentMethod.initializationData?.orderId) {\n            this.orderId = paymentMethod.initializationData?.orderId;\n\n            return;\n        }\n\n        await this.paypalIntegrationService.loadPayPalSdk(methodId);\n\n        this.loadingIndicatorContainer = paypalOptions.container.split('#')[1];\n\n        this.renderButton(methodId, paypalOptions);\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        if (!this.orderId) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n        await this.paypalIntegrationService.submitPayment(payment.methodId, this.orderId);\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this.orderId = undefined;\n\n        this.paypalButton?.close();\n\n        return Promise.resolve();\n    }\n\n    /**\n     *\n     * Button methods/callbacks\n     *\n     * */\n    private renderButton(\n        methodId: string,\n        paypalcommercevenmo: PayPalCommerceVenmoPaymentInitializeOptions,\n    ): void {\n        const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n        const { paymentButtonStyles } = paymentMethod.initializationData || {};\n        const { checkoutPaymentButtonStyles } = paymentButtonStyles || {};\n\n        const { container, onError, onRenderButton, onValidate, submitForm } = paypalcommercevenmo;\n\n        const buttonOptions: PayPalButtonsOptions = {\n            fundingSource: paypalSdk.FUNDING.VENMO,\n            style: this.paypalIntegrationService.getValidButtonStyle(checkoutPaymentButtonStyles),\n            createOrder: () =>\n                this.paypalIntegrationService.createOrder('paypalcommercevenmocheckout'),\n            onClick: (_, actions) => this.handleClick(actions, onValidate),\n            onApprove: (data) => this.handleApprove(data, submitForm),\n            onCancel: () => this.toggleLoadingIndicator(false),\n            onError: (error) => this.handleError(error, onError),\n        };\n\n        this.paypalButton = paypalSdk.Buttons(buttonOptions);\n\n        if (!this.paypalButton.isEligible()) {\n            throw new NotImplementedError(\n                `PayPal Venmo is not available for your region. Please use PayPal Checkout instead.`,\n            );\n        }\n\n        if (onRenderButton && typeof onRenderButton === 'function') {\n            onRenderButton();\n        }\n\n        this.paypalButton.render(container);\n    }\n\n    private async handleClick(\n        actions: ClickCallbackActions,\n        onValidate: PayPalCommerceVenmoPaymentInitializeOptions['onValidate'],\n    ): Promise<void> {\n        const { resolve, reject } = actions;\n\n        const onValidationPassed = () => {\n            this.toggleLoadingIndicator(true);\n\n            return resolve();\n        };\n\n        return onValidate(onValidationPassed, reject);\n    }\n\n    private handleApprove(\n        { orderID }: ApproveCallbackPayload,\n        submitForm: PayPalCommerceVenmoPaymentInitializeOptions['submitForm'],\n    ): void {\n        this.orderId = orderID;\n\n        submitForm();\n        this.toggleLoadingIndicator(false);\n    }\n\n    private handleError(\n        error: Error,\n        onError: PayPalCommerceVenmoPaymentInitializeOptions['onError'],\n    ): void {\n        this.toggleLoadingIndicator(false);\n\n        if (onError && typeof onError === 'function') {\n            onError(error);\n        }\n    }\n\n    /**\n     *\n     * Loading Indicator methods\n     *\n     * */\n    private toggleLoadingIndicator(isLoading: boolean): void {\n        if (isLoading && this.loadingIndicatorContainer) {\n            this.loadingIndicator.show(this.loadingIndicatorContainer);\n        } else {\n            this.loadingIndicator.hide();\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"include\": [\n        \"src/**/*.ts\",\n    ],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true,\n        \"lib\": [\n            \"es2017\",\n            \"dom\"\n        ]\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/paypal-commerce-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"jest/valid-expect\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/README.md",
    "content": "# paypal-commerce-utils\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test paypal-commerce-utils` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint paypal-commerce-utils` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/paypal-commerce-utils/jest.config.js",
    "content": "module.exports = {\n    displayName: 'paypal-commerce-utils',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/paypal-commerce-utils',\n};\n"
  },
  {
    "path": "packages/paypal-commerce-utils/project.json",
    "content": "{\n    \"name\": \"paypal-commerce-utils\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/paypal-commerce-utils/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/paypal-commerce-utils/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/paypal-commerce-utils\"],\n            \"options\": {\n                \"jestConfig\": \"packages/paypal-commerce-utils/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/create-paypal-commerce-fastlane-utils.spec.ts",
    "content": "import createPayPalCommerceFastlaneUtils from './create-paypal-commerce-fastlane-utils';\nimport PayPalCommerceFastlaneUtils from './paypal-commerce-fastlane-utils';\n\ndescribe('createPayPalCommerceFastlaneUtils', () => {\n    it('instantiates PayPal Commerce Fastlane utils class', () => {\n        const utilsClass = createPayPalCommerceFastlaneUtils();\n\n        expect(utilsClass).toBeInstanceOf(PayPalCommerceFastlaneUtils);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/create-paypal-commerce-fastlane-utils.ts",
    "content": "import PayPalCommerceFastlaneUtils from './paypal-commerce-fastlane-utils';\n\nexport default function createPayPalCommerceFastlaneUtils(): PayPalCommerceFastlaneUtils {\n    return new PayPalCommerceFastlaneUtils();\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/create-paypal-commerce-sdk.spec.ts",
    "content": "import createPayPalCommerceSdk from './create-paypal-commerce-sdk';\nimport PayPalCommerceSdk from './paypal-commerce-sdk';\n\ndescribe('createPayPalCommerceSdk', () => {\n    it('instantiates PayPal Commerce SDK', () => {\n        const paypalCommerceSdkInstance = createPayPalCommerceSdk();\n\n        expect(paypalCommerceSdkInstance).toBeInstanceOf(PayPalCommerceSdk);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/create-paypal-commerce-sdk.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport PayPalCommerceSdk from './paypal-commerce-sdk';\n\nexport default function createPayPalCommerceSdk(): PayPalCommerceSdk {\n    return new PayPalCommerceSdk(createScriptLoader());\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/index.ts",
    "content": "export * from './paypal-commerce-types';\nexport * from './mocks';\nexport * from './utils';\n\n// TODO: this export should be moved to ./utils/index.ts file\nexport { default as isPaypalCommerceProviderError } from './utils/is-paypal-commerce-provider-error';\n\n/**\n *\n * PayPal Commerce Sdk exports\n *\n * */\nexport { default as createPayPalCommerceSdk } from './create-paypal-commerce-sdk';\nexport { default as PayPalCommerceSdk } from './paypal-commerce-sdk';\n\n/**\n *\n * PayPal Commerce Fastlane utils exports\n *\n */\nexport { default as createPayPalCommerceFastlaneUtils } from './create-paypal-commerce-fastlane-utils';\nexport { default as PayPalCommerceFastlaneUtils } from './paypal-commerce-fastlane-utils';\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/mocks/get-paypal-commerce-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { PayPalCommerceIntent } from '../paypal-commerce-types';\n\nexport default function getPayPalCommercePaymentMethod(): PaymentMethod {\n    return {\n        id: 'paypalcommerce',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        clientToken: 'asdcvY7XFSQasd',\n        config: {\n            testMode: true,\n            merchantId: 'JTS4DY7XFSQZE',\n        },\n        initializationData: {\n            buttonStyle: {\n                height: 55,\n                color: 'black',\n                label: 'pay',\n            },\n            paymentButtonStyles: {\n                cartButtonStyles: {\n                    color: 'black',\n                    label: 'checkout',\n                },\n                pdpButtonStyles: {\n                    color: 'black',\n                    label: 'checkout',\n                },\n                checkoutTopButtonStyles: {\n                    color: 'silver',\n                    label: 'checkout',\n                },\n                checkoutPaymentButtonStyles: {\n                    color: 'black',\n                    label: 'pay',\n                    height: 55,\n                },\n            },\n            availableAlternativePaymentMethods: [],\n            clientId: 'abc',\n            merchantId: 'JTS4DY7XFSQZE',\n            orderId: '3U4171152W1482642',\n            attributionId: '1123JLKJASD12',\n            intent: PayPalCommerceIntent.CAPTURE,\n            isAcceleratedCheckoutEnabled: false,\n            isPayPalCommerceAnalyticsV2Enabled: false,\n            isPayPalCreditAvailable: false,\n            isVenmoEnabled: false,\n            shouldRenderFields: true,\n            shouldRunAcceleratedCheckout: false,\n            isHostedCheckoutEnabled: false,\n            isDeveloperModeApplicable: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getPayPalCommerceAcceleratedCheckoutPaymentMethod(): PaymentMethod {\n    const paypalCommerceDefaultPaymentMethod = getPayPalCommercePaymentMethod();\n\n    return {\n        ...paypalCommerceDefaultPaymentMethod,\n        id: 'paypalcommerceacceleratedcheckout',\n        initializationData: {\n            ...paypalCommerceDefaultPaymentMethod.initializationData,\n            isAcceleratedCheckoutEnabled: true,\n            shouldRunAcceleratedCheckout: true,\n            isPayPalCommerceAnalyticsV2Enabled: true,\n        },\n    };\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/mocks/get-paypal-fastlane-authentication-result.mock.ts",
    "content": "import { PayPalFastlaneAuthenticationState } from '../paypal-commerce-types';\n\nexport default function getPayPalFastlaneAuthenticationResultMock() {\n    return {\n        authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n        profileData: {\n            name: {\n                fullName: 'John Doe',\n                firstName: 'John',\n                lastName: 'Doe',\n            },\n            shippingAddress: {\n                address: {\n                    company: 'BigCommerce',\n                    addressLine1: 'addressLine1',\n                    addressLine2: 'addressLine2',\n                    adminArea1: 'addressState',\n                    adminArea2: 'addressCity',\n                    postalCode: '03004',\n                    countryCode: 'US',\n                },\n                name: {\n                    fullName: 'John Doe',\n                    firstName: 'John',\n                    lastName: 'Doe',\n                },\n                phoneNumber: {\n                    nationalNumber: '5551113344',\n                    countryCode: '1',\n                },\n            },\n            card: {\n                id: 'nonce/token',\n                paymentSource: {\n                    card: {\n                        brand: 'Visa',\n                        expiry: '2030-12',\n                        lastDigits: '1111',\n                        name: 'John Doe',\n                        billingAddress: {\n                            firstName: 'John',\n                            lastName: 'Doe',\n                            company: 'BigCommerce',\n                            addressLine1: 'addressLine1',\n                            addressLine2: 'addressLine2',\n                            adminArea1: 'addressState',\n                            adminArea2: 'addressCity',\n                            postalCode: '03004',\n                            countryCode: 'US',\n                            phone: {\n                                nationalNumber: '5551113344',\n                                countryCode: '1',\n                            },\n                        },\n                    },\n                },\n            },\n        },\n    };\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/mocks/get-paypal-fastlane-sdk.mock.ts",
    "content": "import { PayPalFastlaneSdk } from '../paypal-commerce-types';\n\nimport getPayPalFastlane from './get-paypal-fastlane.mock';\n\nexport default function getPayPalFastlaneSdk(): PayPalFastlaneSdk {\n    return {\n        ThreeDomainSecureClient: {\n            isEligible: jest.fn(),\n            show: jest.fn(),\n        },\n        Fastlane: () => Promise.resolve(getPayPalFastlane()),\n    };\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/mocks/get-paypal-fastlane.mock.ts",
    "content": "import { PayPalFastlane, PayPalFastlaneCardComponentMethods } from '../paypal-commerce-types';\n\nexport default function getPayPalFastlane(): PayPalFastlane {\n    const paypalFastlaneComponentMethods: PayPalFastlaneCardComponentMethods = {\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        getPaymentToken: jest.fn(() => ({\n            id: 'paypal_fastlane_instrument_id_nonce',\n            paymentSource: {\n                card: {\n                    brand: 'Visa',\n                    expiry: '2030-12',\n                    lastDigits: '1111',\n                    name: 'John Doe',\n                    billingAddress: {\n                        firstName: 'John',\n                        lastName: 'Doe',\n                        company: 'BigCommerce',\n                        streetAddress: 'addressLine1',\n                        extendedAddress: 'addressLine2',\n                        locality: 'addressCity',\n                        region: 'addressState',\n                        postalCode: '03004',\n                        countryCodeAlpha2: 'US',\n                    },\n                },\n            },\n        })),\n        render: jest.fn(),\n    };\n\n    return {\n        identity: {\n            lookupCustomerByEmail: jest.fn(),\n            triggerAuthenticationFlow: jest.fn(),\n        },\n        events: {\n            apmSelected: jest.fn(),\n            emailSubmitted: jest.fn(),\n            orderPlaced: jest.fn(),\n        },\n        profile: {\n            showCardSelector: jest.fn(),\n            showShippingAddressSelector: jest.fn(),\n        },\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        FastlaneCardComponent: jest.fn(() => paypalFastlaneComponentMethods),\n    };\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/mocks/index.ts",
    "content": "export {\n    default as getPayPalCommercePaymentMethod,\n    getPayPalCommerceAcceleratedCheckoutPaymentMethod,\n} from './get-paypal-commerce-payment-method.mock';\nexport { default as getPayPalFastlaneSdk } from './get-paypal-fastlane-sdk.mock';\nexport { default as getPayPalFastlane } from './get-paypal-fastlane.mock';\nexport { default as getPayPalFastlaneAuthenticationResultMock } from './get-paypal-fastlane-authentication-result.mock';\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/paypal-commerce-fastlane-utils.spec.ts",
    "content": "import {\n    PaymentMethodClientUnavailableError,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nimport { getPayPalFastlaneAuthenticationResultMock, getPayPalFastlaneSdk } from './mocks';\nimport PayPalCommerceFastlaneUtils from './paypal-commerce-fastlane-utils';\nimport {\n    PayPalCommerceHostWindow,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneSdk,\n} from './paypal-commerce-types';\n\ndescribe('PayPalCommerceFastlaneUtils', () => {\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let subject: PayPalCommerceFastlaneUtils;\n\n    const methodIdMock = 'paypalcommerceacceleratedcheckout';\n    const authenticationResultMock = getPayPalFastlaneAuthenticationResultMock();\n\n    const bcAddressMock = {\n        address1: 'addressLine1',\n        address2: 'addressLine2',\n        city: 'addressCity',\n        company: 'BigCommerce',\n        country: 'United States',\n        countryCode: 'US',\n        customFields: [],\n        firstName: 'John',\n        lastName: 'Doe',\n        phone: '15551113344',\n        postalCode: '03004',\n        stateOrProvince: 'addressState',\n        stateOrProvinceCode: 'addressState',\n    };\n\n    const paypalToBcAddressMock = {\n        ...bcAddressMock,\n        id: 1,\n        country: 'US',\n        type: 'paypal-address',\n    };\n\n    const paypalToBcInstrumentMock = {\n        bigpayToken: 'nonce/token',\n        brand: 'Visa',\n        defaultInstrument: false,\n        expiryMonth: '12',\n        expiryYear: '2030',\n        iin: '',\n        last4: '1111',\n        method: 'paypalcommerceacceleratedcheckout',\n        provider: 'paypalcommerceacceleratedcheckout',\n        trustedShippingAddress: false,\n        untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n        type: 'card',\n    };\n\n    beforeEach(() => {\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n\n        subject = new PayPalCommerceFastlaneUtils();\n\n        jest.spyOn(Date, 'now').mockImplementation(() => 1);\n    });\n\n    afterEach(() => {\n        (window as PayPalCommerceHostWindow).paypalFastlane = undefined;\n\n        jest.resetAllMocks();\n        jest.restoreAllMocks();\n\n        localStorage.clear();\n    });\n\n    describe('#initializePayPalFastlane', () => {\n        it('initializes paypal fastlane with paypal sdk', async () => {\n            jest.spyOn(paypalFastlaneSdk, 'Fastlane');\n\n            await subject.initializePayPalFastlane(paypalFastlaneSdk, false);\n\n            expect(paypalFastlaneSdk.Fastlane).toHaveBeenCalled();\n        });\n\n        it('sets axo to sandbox mode if test mode is enabled', async () => {\n            jest.spyOn(Storage.prototype, 'setItem').mockImplementation(jest.fn);\n\n            await subject.initializePayPalFastlane(paypalFastlaneSdk, true);\n\n            expect(window.localStorage.setItem).toHaveBeenCalledWith('fastlaneEnv', 'sandbox');\n            expect(window.localStorage.setItem).toHaveBeenCalledWith('axoEnv', 'sandbox');\n        });\n    });\n\n    describe('#getPayPalFastlaneOrThrow', () => {\n        it('successfully returns paypal fastlane with no errors', async () => {\n            const expectedResult = await subject.initializePayPalFastlane(paypalFastlaneSdk, false);\n\n            expect(subject.getPayPalFastlaneOrThrow()).toEqual(expectedResult);\n        });\n\n        it('throws an error if paypal fastlane did not initialize before', () => {\n            try {\n                subject.getPayPalFastlaneOrThrow();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n\n    describe('#lookupCustomerOrThrow', () => {\n        const testEmail = 'john@doe.com';\n\n        it('successfully triggers lookup method with provided email', async () => {\n            const paypalConnectMock = await subject.initializePayPalFastlane(\n                paypalFastlaneSdk,\n                false,\n            );\n\n            await subject.lookupCustomerOrThrow(testEmail);\n\n            expect(paypalConnectMock.identity.lookupCustomerByEmail).toHaveBeenCalledWith(\n                testEmail,\n            );\n        });\n\n        it('throws an error if paypal fastlane did not initialize before', async () => {\n            try {\n                await subject.lookupCustomerOrThrow(testEmail);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n\n    describe('#triggerAuthenticationFlowOrThrow', () => {\n        const customerContextIdMock = 'ryanRecognised123';\n\n        it('successfully triggers authentication flow with provided customer id and styles', async () => {\n            const paypalFastlaneMock = await subject.initializePayPalFastlane(\n                paypalFastlaneSdk,\n                false,\n            );\n\n            await subject.triggerAuthenticationFlowOrThrow(customerContextIdMock);\n\n            expect(paypalFastlaneMock.identity.triggerAuthenticationFlow).toHaveBeenCalledWith(\n                customerContextIdMock,\n            );\n        });\n\n        it('throws an error if paypal fastlane did not initialize before', async () => {\n            try {\n                await subject.triggerAuthenticationFlowOrThrow(customerContextIdMock);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n\n    describe('#updateStorageSessionId', () => {\n        const sessionIdMock = 'cartId123';\n\n        it('updates browser cookies with session id', () => {\n            jest.spyOn(CookieStorage, 'set');\n\n            subject.updateStorageSessionId(sessionIdMock);\n\n            expect(CookieStorage.set).toHaveBeenCalledWith('bc-fastlane-sessionId', sessionIdMock, {\n                expires: expect.any(Date),\n                secure: true,\n            });\n        });\n    });\n\n    describe('#removeStorageSessionId', () => {\n        it('removes session id from browser cookies', () => {\n            jest.spyOn(CookieStorage, 'remove');\n\n            subject.removeStorageSessionId();\n\n            expect(CookieStorage.remove).toHaveBeenCalledWith('bc-fastlane-sessionId');\n        });\n    });\n\n    describe('#getStorageSessionId', () => {\n        it('returns session id to browser storage', () => {\n            jest.spyOn(CookieStorage, 'get');\n\n            subject.getStorageSessionId();\n\n            expect(CookieStorage.get).toHaveBeenCalledWith('bc-fastlane-sessionId');\n        });\n    });\n\n    describe('#mapPayPalFastlaneProfileToBcCustomerData', () => {\n        it('returns default \"empty\" data if authenticationResult is undefined', () => {\n            expect(subject.mapPayPalFastlaneProfileToBcCustomerData(methodIdMock, {})).toEqual({\n                authenticationState: PayPalFastlaneAuthenticationState.UNRECOGNIZED,\n                addresses: [],\n                billingAddress: undefined,\n                shippingAddress: undefined,\n                instruments: [],\n            });\n        });\n\n        it('returns mapped PayPal Fastlane Profile to BC like data', () => {\n            expect(\n                subject.mapPayPalFastlaneProfileToBcCustomerData(\n                    methodIdMock,\n                    authenticationResultMock,\n                ),\n            ).toEqual({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [paypalToBcAddressMock],\n                billingAddress: paypalToBcAddressMock,\n                shippingAddress: paypalToBcAddressMock,\n                instruments: [paypalToBcInstrumentMock],\n            });\n        });\n    });\n\n    describe('#mapBcToPayPalInstrument()', () => {\n        it('maps and returns PayPal Instrument mapped to BC shape', () => {\n            const result = subject.mapPayPalToBcInstrument(\n                methodIdMock,\n                authenticationResultMock.profileData.card,\n            );\n\n            expect(result).toEqual([paypalToBcInstrumentMock]);\n        });\n    });\n\n    describe('#mapBcToPayPalAddress()', () => {\n        it('maps and returns PayPal Address based on provided BC address', () => {\n            const result = subject.mapBcToPayPalAddress(bcAddressMock);\n\n            expect(result).toEqual({\n                addressLine1: 'addressLine1',\n                addressLine2: 'addressLine2',\n                adminArea1: 'addressState',\n                adminArea2: 'addressCity',\n                company: 'BigCommerce',\n                countryCode: 'US',\n                postalCode: '03004',\n            });\n        });\n\n        it('set adminArea1 with stateOrProvince value if stateOrProvinceCode is empty', () => {\n            const addressMock = {\n                address1: 'addressLine1',\n                address2: 'addressLine2',\n                city: 'addressCity',\n                company: 'BigCommerce',\n                country: 'United States',\n                countryCode: 'US',\n                customFields: [],\n                firstName: 'John',\n                lastName: 'Doe',\n                phone: '15551113344',\n                postalCode: '03004',\n                stateOrProvince: 'addressState1',\n                stateOrProvinceCode: '',\n            };\n            const result = subject.mapBcToPayPalAddress(addressMock);\n\n            expect(result).toEqual({\n                addressLine1: 'addressLine1',\n                addressLine2: 'addressLine2',\n                adminArea1: 'addressState1',\n                adminArea2: 'addressCity',\n                company: 'BigCommerce',\n                countryCode: 'US',\n                postalCode: '03004',\n            });\n        });\n    });\n\n    describe('#mapPayPalToBcAddress()', () => {\n        it('maps and returns PayPal Address based on provided BC address', () => {\n            const result = subject.mapPayPalToBcAddress(\n                authenticationResultMock.profileData.shippingAddress.address,\n                authenticationResultMock.profileData.shippingAddress.name,\n                authenticationResultMock.profileData.shippingAddress.phoneNumber,\n                [],\n            );\n\n            expect(result).toEqual(paypalToBcAddressMock);\n        });\n    });\n\n    describe('#filterAddresses()', () => {\n        it('returns only one address if provided addresses are the same', () => {\n            const result = subject.filterAddresses([paypalToBcAddressMock, paypalToBcAddressMock]);\n\n            expect(result).toHaveLength(1);\n        });\n\n        it('returns an array of addresses if provided addresses are different', () => {\n            const result = subject.filterAddresses([\n                paypalToBcAddressMock,\n                {\n                    ...paypalToBcAddressMock,\n                    firstName: 'John',\n                    lastName: 'Son',\n                },\n            ]);\n\n            expect(result).toHaveLength(2);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/paypal-commerce-fastlane-utils.ts",
    "content": "import { isEqual, omit } from 'lodash';\n\nimport {\n    Address,\n    CardInstrument,\n    CustomerAddress,\n    PaymentMethodClientUnavailableError,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nimport {\n    PayPalCommerceHostWindow,\n    PayPalFastlane,\n    PayPalFastlaneAddress,\n    PayPalFastlaneAuthenticationResult,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneLookupCustomerByEmailResult,\n    PayPalFastlaneProfileCard,\n    PayPalFastlaneProfileName,\n    PayPalFastlaneProfilePhone,\n    PayPalFastlaneProfileToBcCustomerDataMappingResult,\n    PayPalFastlaneSdk,\n    PayPalFastlaneStylesOption,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceFastlaneUtils {\n    private window: PayPalCommerceHostWindow;\n\n    constructor() {\n        this.window = window;\n    }\n\n    async initializePayPalFastlane(\n        paypalFastlaneSdk: PayPalFastlaneSdk,\n        isTestModeEnabled: boolean,\n        styles?: PayPalFastlaneStylesOption,\n    ): Promise<PayPalFastlane> {\n        if (isTestModeEnabled) {\n            window.localStorage.setItem('fastlaneEnv', 'sandbox');\n            window.localStorage.setItem('axoEnv', 'sandbox'); // TODO: remove if this key does not use on PayPal side\n        }\n\n        if (!this.window.paypalFastlane) {\n            const defaultStyles = {\n                root: {\n                    backgroundColorPrimary: 'transparent',\n                },\n            };\n\n            this.window.paypalFastlane = await paypalFastlaneSdk.Fastlane({\n                styles: styles || defaultStyles,\n            });\n        }\n\n        return this.window.paypalFastlane;\n    }\n\n    getPayPalFastlaneOrThrow(): PayPalFastlane {\n        if (!this.window.paypalFastlane) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.window.paypalFastlane;\n    }\n\n    /**\n     *\n     * Detects the customer to PayPal Fastlane relation and\n     * returns customerContextId to use it for authentication\n     *\n     */\n    async lookupCustomerOrThrow(email: string): Promise<PayPalFastlaneLookupCustomerByEmailResult> {\n        const paypalFastlane = this.getPayPalFastlaneOrThrow();\n\n        return paypalFastlane.identity.lookupCustomerByEmail(email);\n    }\n\n    /**\n     *\n     * Triggers authentication flow (shows OTP popup) if the customer recognised as PayPal Fastlane user\n     * and returns PayPal Fastlane Profile data to use it in BC checkout\n     *\n     */\n    async triggerAuthenticationFlowOrThrow(\n        customerContextId?: string,\n    ): Promise<PayPalFastlaneAuthenticationResult> {\n        if (!customerContextId) {\n            return {};\n        }\n\n        const paypalFastlane = this.getPayPalFastlaneOrThrow();\n\n        return paypalFastlane.identity.triggerAuthenticationFlow(customerContextId);\n    }\n\n    /**\n     *\n     * 'updateStorageSessionId' method is used to:\n     * - set session id after user was authenticated (or unrecognised) to trigger authentication after page refresh\n     *\n     * Flow info:\n     * If user unrecognised then the lookup method will be working but the OTP will not be shown\n     * If user recognised and not canceled then the lookup method will be working and the OTP will be shown only if needed\n     * If user cancels the OPT then OTP will not be triggered after page refresh\n     *\n     */\n    updateStorageSessionId(sessionId: string): void {\n        const expires = new Date();\n        expires.setDate(expires.getDate() + 14); // 2 weeks expiry\n\n        const cookiesOption = {\n            expires,\n            secure: true,\n        };\n\n        CookieStorage.set('bc-fastlane-sessionId', sessionId, cookiesOption);\n    }\n\n    removeStorageSessionId(): void {\n        CookieStorage.remove('bc-fastlane-sessionId');\n    }\n\n    getStorageSessionId(): string {\n        return CookieStorage.get('bc-fastlane-sessionId') || '';\n    }\n\n    /**\n     *\n     * 'mapPayPalFastlaneProfileToBcCustomerData' method is responsible for:\n     * - mapping PayPal Fastlane Profile data to BC data shape\n     * - returning mapped data to use for updating PaymentProviderCustomer state and\n     * update shipping and billing addresses\n     *\n     */\n    mapPayPalFastlaneProfileToBcCustomerData(\n        methodId: string,\n        authenticationResult: PayPalFastlaneAuthenticationResult,\n    ): PayPalFastlaneProfileToBcCustomerDataMappingResult {\n        const { authenticationState, profileData } = authenticationResult;\n\n        const paypalBillingAddress = profileData?.card?.paymentSource?.card?.billingAddress;\n        const paypalShippingAddress = profileData?.shippingAddress;\n        const paypalProfileName = profileData?.name;\n        const paypalInstrument = profileData?.card;\n\n        const shippingAddress = paypalShippingAddress\n            ? this.mapPayPalToBcAddress(\n                  paypalShippingAddress.address,\n                  paypalShippingAddress.name,\n                  paypalShippingAddress.phoneNumber,\n              )\n            : undefined;\n        const billingAddress =\n            paypalBillingAddress && paypalProfileName\n                ? this.mapPayPalToBcAddress(\n                      paypalBillingAddress,\n                      paypalProfileName,\n                      paypalShippingAddress?.phoneNumber,\n                  )\n                : undefined;\n        const instruments = paypalInstrument\n            ? this.mapPayPalToBcInstrument(methodId, paypalInstrument)\n            : [];\n\n        const addresses = this.filterAddresses([shippingAddress, billingAddress]);\n\n        return {\n            authenticationState:\n                authenticationState || PayPalFastlaneAuthenticationState.UNRECOGNIZED,\n            addresses,\n            billingAddress,\n            shippingAddress,\n            instruments,\n        };\n    }\n\n    mapPayPalToBcInstrument(\n        methodId: string,\n        instrument: PayPalFastlaneProfileCard,\n    ): CardInstrument[] {\n        const { id, paymentSource } = instrument;\n        const { brand, expiry, lastDigits } = paymentSource.card;\n\n        const [expiryYear, expiryMonth] = expiry.split('-');\n\n        return [\n            {\n                bigpayToken: id,\n                brand,\n                defaultInstrument: false,\n                expiryMonth,\n                expiryYear,\n                iin: '',\n                last4: lastDigits,\n                method: methodId,\n                provider: methodId,\n                trustedShippingAddress: false,\n                untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n                type: 'card',\n            },\n        ];\n    }\n\n    mapBcToPayPalAddress(address?: Address): PayPalFastlaneAddress {\n        return {\n            company: address?.company || '',\n            addressLine1: address?.address1 || '',\n            addressLine2: address?.address2 || '',\n            adminArea1: address?.stateOrProvinceCode || address?.stateOrProvince || '',\n            adminArea2: address?.city || '',\n            postalCode: address?.postalCode || '',\n            countryCode: address?.countryCode || '',\n        };\n    }\n\n    mapPayPalToBcAddress(\n        address: PayPalFastlaneAddress,\n        profileName: PayPalFastlaneProfileName,\n        phone?: PayPalFastlaneProfilePhone,\n        customFields?: CustomerAddress['customFields'],\n    ): CustomerAddress {\n        const [firstName, lastName] = profileName.fullName.split(' ');\n\n        const phoneData = {\n            nationalNumber: phone?.nationalNumber || '',\n            countryCode: phone?.countryCode || '',\n        };\n\n        return {\n            id: Date.now(),\n            type: 'paypal-address',\n            firstName: profileName.firstName || firstName || '',\n            lastName: profileName.lastName || lastName || '',\n            company: address.company || '',\n            address1: address.addressLine1,\n            address2: address.addressLine2 || '',\n            city: address.adminArea2,\n            stateOrProvince: address.adminArea1,\n            stateOrProvinceCode: address.adminArea1,\n            country: address.countryCode || '', // TODO: update country with valid naming\n            countryCode: address.countryCode || '',\n            postalCode: address.postalCode,\n            phone: phoneData.countryCode + phoneData.nationalNumber,\n            customFields: customFields || [],\n        };\n    }\n\n    /**\n     *\n     * This method is responsible for filtering PayPal Fastlane addresses if they are the same\n     * and returns an array of addresses to use them for shipping and/or billing address selections\n     * so the customer will be able to use addresses from PayPal Fastlane in checkout flow\n     *\n     */\n    filterAddresses(addresses: Array<CustomerAddress | undefined>): CustomerAddress[] {\n        return addresses.reduce(\n            (customerAddresses: CustomerAddress[], currentAddress: CustomerAddress | undefined) => {\n                if (!currentAddress) {\n                    return customerAddresses;\n                }\n\n                const sameAddressInTheArray = customerAddresses.some((customerAddress) =>\n                    this.isEqualAddresses(customerAddress, currentAddress),\n                );\n\n                return sameAddressInTheArray\n                    ? customerAddresses\n                    : [...customerAddresses, currentAddress];\n            },\n            [],\n        );\n    }\n\n    private isEqualAddresses(\n        firstAddress: CustomerAddress,\n        secondAddress: CustomerAddress,\n    ): boolean {\n        return isEqual(this.normalizeAddress(firstAddress), this.normalizeAddress(secondAddress));\n    }\n\n    private normalizeAddress(address: CustomerAddress) {\n        return omit(address, ['id', 'phone']);\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/paypal-commerce-sdk.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { getPayPalCommerceAcceleratedCheckoutPaymentMethod, getPayPalFastlaneSdk } from './mocks';\nimport PayPalCommerceSdk from './paypal-commerce-sdk';\nimport {\n    PayPalApmSdk,\n    PayPalCommerceHostWindow,\n    PayPalFastlaneSdk,\n    PayPalGooglePaySdk,\n    PayPalMessagesSdk,\n} from './paypal-commerce-types';\n\ndescribe('PayPalCommerceSdk', () => {\n    let loader: ScriptLoader;\n    let paymentMethod: PaymentMethod;\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let subject: PayPalCommerceSdk;\n    let mockAPMPaymentMethod: PaymentMethod;\n\n    const paypalMessagesSdk: PayPalMessagesSdk = {\n        Messages: jest.fn(),\n    };\n\n    const paypalApmsSdk: PayPalApmSdk = {\n        Buttons: jest.fn(),\n        PaymentFields: jest.fn(),\n    };\n\n    const payPalGooglePaySdk: PayPalGooglePaySdk = {\n        Googlepay: jest.fn(),\n    };\n\n    const sessionId = '8a232bf4-d9ba-4621-a1a9-ed8f685f92d1';\n    const expectedSessionId = sessionId.replace(/-/g, '');\n\n    beforeEach(() => {\n        loader = createScriptLoader();\n        paymentMethod = getPayPalCommerceAcceleratedCheckoutPaymentMethod();\n        mockAPMPaymentMethod = {\n            ...paymentMethod,\n            id: 'oxxo',\n            initializationData: {\n                ...paymentMethod.initializationData,\n                enabledAlternativePaymentMethods: ['oxxo'],\n                availableAlternativePaymentMethods: ['oxxo'],\n            },\n        };\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n        subject = new PayPalCommerceSdk(loader);\n\n        jest.spyOn(loader, 'loadScript').mockImplementation(() => {\n            (window as PayPalCommerceHostWindow).paypalFastlaneSdk = paypalFastlaneSdk;\n            (window as PayPalCommerceHostWindow).paypalMessages = paypalMessagesSdk;\n            (window as PayPalCommerceHostWindow).paypalApms = paypalApmsSdk;\n            (window as PayPalCommerceHostWindow).paypalGooglePay = payPalGooglePaySdk;\n\n            return Promise.resolve();\n        });\n    });\n\n    afterEach(() => {\n        (window as PayPalCommerceHostWindow).paypalFastlaneSdk = undefined;\n        (window as PayPalCommerceHostWindow).paypalMessages = undefined;\n        (window as PayPalCommerceHostWindow).paypalApms = undefined;\n        (window as PayPalCommerceHostWindow).paypalGooglePay = undefined;\n\n        jest.clearAllMocks();\n    });\n\n    describe('#getPayPalFastlaneSdk()', () => {\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientId: undefined,\n                },\n            };\n\n            try {\n                await subject.getPayPalFastlaneSdk(mockPaymentMethod, 'USD', sessionId, 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads PayPal Fastlane sdk script', async () => {\n            await subject.getPayPalFastlaneSdk(paymentMethod, 'USD', sessionId, 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&commit=true&components=fastlane%2Cbuttons%2Cpayment-fields%2Chosted-fields%2Cthree-domain-secure&currency=USD&intent=capture&locale=en_US',\n                {\n                    async: true,\n                    attributes: {\n                        'data-client-metadata-id': expectedSessionId,\n                        'data-namespace': 'paypalFastlaneSdk',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                        'data-sdk-client-token': 'asdcvY7XFSQasd',\n                    },\n                },\n            );\n        });\n\n        // TODO: remove this test when A/B testing will be finished\n        it('loads PayPal Fastlane Sdk script with connectClientToken for paypalcommercecreditcards method', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                methodId: 'paypalcommercecreditcards',\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientToken: undefined,\n                    connectClientToken: 'connectClientToken123',\n                },\n            };\n\n            await subject.getPayPalFastlaneSdk(mockPaymentMethod, 'USD', sessionId, 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&commit=true&components=fastlane%2Cbuttons%2Cpayment-fields%2Chosted-fields%2Cthree-domain-secure&currency=USD&intent=capture&locale=en_US',\n                {\n                    async: true,\n                    attributes: {\n                        'data-client-metadata-id': expectedSessionId,\n                        'data-namespace': 'paypalFastlaneSdk',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                        'data-sdk-client-token': 'asdcvY7XFSQasd',\n                    },\n                },\n            );\n        });\n\n        it('throws an error if there was an issue with loading PayPal Fastlane Sdk', async () => {\n            jest.spyOn(loader, 'loadScript').mockImplementation(jest.fn());\n\n            try {\n                await subject.getPayPalFastlaneSdk(paymentMethod, 'USD', sessionId, 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('returns PayPal Fastlane Sdk', async () => {\n            const result = await subject.getPayPalFastlaneSdk(\n                paymentMethod,\n                'USD',\n                sessionId,\n                'en-US',\n            );\n\n            expect(result).toEqual(paypalFastlaneSdk);\n        });\n    });\n\n    describe('#getPayLaterMessages()', () => {\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientId: undefined,\n                },\n            };\n\n            try {\n                await subject.getPayPalMessages(mockPaymentMethod, 'USD', 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads PayLater Messages sdk script', async () => {\n            await subject.getPayPalMessages(paymentMethod, 'USD', 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&components=messages&currency=USD&locale=en_US',\n                {\n                    async: true,\n                    attributes: {\n                        'data-namespace': 'paypalMessages',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                    },\n                },\n            );\n        });\n\n        it('throws an error if there was an issue with loading paylater messages sdk', async () => {\n            jest.spyOn(loader, 'loadScript').mockImplementation(jest.fn());\n\n            try {\n                await subject.getPayPalMessages(paymentMethod, 'USD', 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('returns PayPal Messages Sdk', async () => {\n            const result = await subject.getPayPalMessages(paymentMethod, 'USD', 'en-US');\n\n            expect(result).toEqual(paypalMessagesSdk);\n        });\n    });\n\n    describe('#getPayPalGooglePaySdk()', () => {\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientId: undefined,\n                },\n            };\n\n            try {\n                await subject.getPayPalGooglePaySdk(mockPaymentMethod, 'USD', 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads PayPal Google Pay sdk script', async () => {\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&commit=true&components=googlepay&currency=USD&intent=capture&locale=en_US',\n                {\n                    async: true,\n                    attributes: {\n                        'data-namespace': 'paypalGooglePay',\n                        'data-client-token': 'asdcvY7XFSQasd',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                    },\n                },\n            );\n        });\n\n        it('throws an error if there was an issue with loading paypal google pay sdk', async () => {\n            jest.spyOn(loader, 'loadScript').mockImplementation(jest.fn());\n\n            try {\n                await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('returns PayPal Google Pay Sdk', async () => {\n            const result = await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US');\n\n            expect(result).toEqual(payPalGooglePaySdk);\n        });\n\n        it('does not load Google Pay Sdk if already exist', async () => {\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US');\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledTimes(1);\n        });\n\n        it('reload Google Pay Sdk', async () => {\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US');\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US', false, true);\n\n            expect(loader.loadScript).toHaveBeenCalledTimes(2);\n        });\n    });\n\n    describe('#getPayPalApmsSdk()', () => {\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            try {\n                await subject.getPayPalApmsSdk(\n                    {\n                        ...mockAPMPaymentMethod,\n                        initializationData: {\n                            ...mockAPMPaymentMethod.initializationData,\n                            clientId: undefined,\n                        },\n                    },\n                    'USD',\n                    'en-US',\n                );\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads APMs sdk script', async () => {\n            await subject.getPayPalApmsSdk(mockAPMPaymentMethod, 'USD', 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=oxxo&commit=true&components=buttons%2Cpayment-fields&currency=USD&intent=capture&locale=en_US',\n                {\n                    async: true,\n                    attributes: {\n                        'data-namespace': 'paypalApms',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                    },\n                },\n            );\n        });\n\n        it('throws an error if there was an issue with loading APMs sdk', async () => {\n            jest.spyOn(loader, 'loadScript').mockImplementation(jest.fn());\n\n            try {\n                await subject.getPayPalApmsSdk(mockAPMPaymentMethod, 'USD', 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('returns PayPal APMs Sdk', async () => {\n            const result = await subject.getPayPalApmsSdk(paymentMethod, 'USD', 'en-US');\n\n            expect(result).toEqual(paypalApmsSdk);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/paypal-commerce-sdk.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { transformLocaleToPayPalFormat } from '@bigcommerce/checkout-sdk/paypal-utils';\n\nimport {\n    PayPalCommerceHostWindow,\n    PayPalCommerceInitializationData,\n    PayPalFastlaneSdk,\n    PayPalGooglePaySdk,\n    PayPalMessagesSdk,\n    PayPalSdkConfig,\n} from './paypal-commerce-types';\n\nexport default class PayPalCommerceSdk {\n    private window: PayPalCommerceHostWindow;\n\n    constructor(private scriptLoader: ScriptLoader) {\n        this.window = window;\n    }\n\n    async getPayPalFastlaneSdk(\n        paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n        currencyCode: string,\n        sessionId: string,\n        storeLanguage: string | undefined,\n    ): Promise<PayPalFastlaneSdk> {\n        if (!this.window.paypalFastlaneSdk) {\n            const config = this.getPayPalFastlaneSdkConfiguration(\n                paymentMethod,\n                currencyCode,\n                sessionId,\n                storeLanguage,\n            );\n\n            await this.loadPayPalSdk(config);\n\n            if (!this.window.paypalFastlaneSdk) {\n                throw new PaymentMethodClientUnavailableError();\n            }\n        }\n\n        return this.window.paypalFastlaneSdk;\n    }\n\n    async getPayPalGooglePaySdk(\n        paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n        initializesOnCheckoutPage?: boolean,\n        forceLoad?: boolean,\n    ): Promise<PayPalGooglePaySdk> {\n        if (!this.window.paypalGooglePay || forceLoad) {\n            const paypalSdkScriptConfig = this.getPayPalGooglePaySdkScriptConfigOrThrow(\n                paymentMethod,\n                currencyCode,\n                storeLanguage,\n                initializesOnCheckoutPage,\n            );\n\n            await this.loadPayPalSdk(paypalSdkScriptConfig);\n        }\n\n        if (!this.window.paypalGooglePay) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.window.paypalGooglePay;\n    }\n\n    async getPayPalApmsSdk(\n        paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n    ) {\n        if (!this.window.paypalApms) {\n            const config = this.getPayPalApmSdkConfiguration(\n                paymentMethod,\n                currencyCode,\n                storeLanguage,\n            );\n\n            await this.loadPayPalSdk(config);\n\n            if (!this.window.paypalApms) {\n                throw new PaymentMethodClientUnavailableError();\n            }\n        }\n\n        return this.window.paypalApms;\n    }\n\n    async getPayPalMessages(\n        paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n    ): Promise<PayPalMessagesSdk> {\n        if (!this.window.paypalMessages) {\n            const paypalSdkMessagesConfig = this.getPayPalSdkMessagesConfiguration(\n                paymentMethod,\n                currencyCode,\n                storeLanguage,\n            );\n\n            await this.loadPayPalSdk(paypalSdkMessagesConfig);\n        }\n\n        if (!this.window.paypalMessages) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.window.paypalMessages;\n    }\n\n    /**\n     *\n     *  loadPayPalSdk is a paypal sdk script loader\n     *  which loads paypal sdk based on provided configuration\n     *\n     */\n    private async loadPayPalSdk({ options, attributes }: PayPalSdkConfig): Promise<void> {\n        const scriptOptions = this.transformConfig<PayPalSdkConfig['options']>(options);\n        const scriptAttributes = this.transformConfig<PayPalSdkConfig['attributes']>(attributes);\n\n        const paypalSdkUrl = 'https://www.paypal.com/sdk/js';\n        const scriptQuery = new URLSearchParams(scriptOptions).toString();\n        const scriptSrc = `${paypalSdkUrl}?${scriptQuery}`;\n\n        await this.scriptLoader.loadScript(scriptSrc, {\n            async: true,\n            attributes: scriptAttributes,\n        });\n    }\n\n    /**\n     *\n     * Configurations section\n     *\n     */\n    private getPayPalFastlaneSdkConfiguration(\n        paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n        currencyCode: string,\n        sessionId: string,\n        storeLanguage: string | undefined,\n    ): PayPalSdkConfig {\n        const { clientToken, initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const { intent, clientId, merchantId, attributionId } = initializationData;\n\n        const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                commit: true,\n                components: [\n                    'fastlane',\n                    'buttons',\n                    'payment-fields',\n                    'hosted-fields',\n                    'three-domain-secure',\n                ],\n                currency: currencyCode,\n                intent,\n                ...(locale && { locale }),\n            },\n            attributes: {\n                'data-client-metadata-id': sessionId.replace(/-/g, ''),\n                'data-namespace': 'paypalFastlaneSdk',\n                'data-partner-attribution-id': attributionId,\n                'data-sdk-client-token': clientToken,\n            },\n        };\n    }\n\n    private getPayPalGooglePaySdkScriptConfigOrThrow(\n        paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n        initializesOnCheckoutPage = true,\n    ): PayPalSdkConfig {\n        const { clientToken, initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            intent,\n            clientId,\n            merchantId,\n            buyerCountry,\n            attributionId,\n            isHostedCheckoutEnabled,\n            isDeveloperModeApplicable,\n        } = initializationData;\n\n        const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n        const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                commit,\n                components: ['googlepay'],\n                currency: currencyCode,\n                intent,\n                ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n                ...(locale && { locale }),\n            },\n            attributes: {\n                'data-partner-attribution-id': attributionId,\n                'data-client-token': clientToken,\n                'data-namespace': 'paypalGooglePay',\n            },\n        };\n    }\n\n    private getPayPalApmSdkConfiguration(\n        paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n    ): PayPalSdkConfig {\n        const { initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            intent,\n            clientId,\n            merchantId,\n            buyerCountry,\n            attributionId,\n            isDeveloperModeApplicable,\n            availableAlternativePaymentMethods = [],\n            enabledAlternativePaymentMethods = [],\n        } = initializationData;\n\n        const enableAPMsFunding = enabledAlternativePaymentMethods;\n        const disableAPMsFunding = availableAlternativePaymentMethods.filter(\n            (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n        );\n\n        const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                'enable-funding': enableAPMsFunding.length > 0 ? enableAPMsFunding : undefined,\n                'disable-funding': disableAPMsFunding.length > 0 ? disableAPMsFunding : undefined,\n                commit: true,\n                components: ['buttons', 'payment-fields'],\n                currency: currencyCode,\n                intent,\n                ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n                ...(locale && { locale }),\n            },\n            attributes: {\n                'data-partner-attribution-id': attributionId,\n                'data-namespace': 'paypalApms',\n            },\n        };\n    }\n\n    private getPayPalSdkMessagesConfiguration(\n        paymentMethod: PaymentMethod<PayPalCommerceInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n    ): PayPalSdkConfig {\n        const { initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const { clientId, merchantId, attributionId, isDeveloperModeApplicable, buyerCountry } =\n            initializationData;\n\n        const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                components: ['messages'],\n                currency: currencyCode,\n                ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n                ...(locale && { locale }),\n            },\n            attributes: {\n                'data-namespace': 'paypalMessages',\n                'data-partner-attribution-id': attributionId,\n            },\n        };\n    }\n\n    /**\n     *\n     * Utils methods\n     *\n     */\n    private transformConfig<T extends Record<string, unknown>>(config: T): Record<string, string> {\n        let transformedConfig = {};\n\n        const keys = Object.keys(config) as Array<keyof T>;\n\n        keys.forEach((key) => {\n            const value = config[key];\n\n            if (\n                value === undefined ||\n                value === null ||\n                value === '' ||\n                (Array.isArray(value) && value.length === 0)\n            ) {\n                return;\n            }\n\n            transformedConfig = {\n                ...transformedConfig,\n                [key]: Array.isArray(value) ? value.join(',') : value,\n            };\n        });\n\n        return transformedConfig;\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/paypal-commerce-types.ts",
    "content": "import { CardInstrument, CustomerAddress } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n *\n * PayPal Commerce Funding sources\n *\n */\nexport type FundingType = string[];\nexport type EnableFundingType = FundingType | string;\n\n/**\n *\n * PayPal Commerce Initialization Data\n *\n */\nexport interface PayPalCommerceInitializationData {\n    attributionId?: string;\n    availableAlternativePaymentMethods: FundingType;\n    buttonStyle?: PayPalButtonStyleOptions;\n    buyerCountry?: string;\n    clientId: string;\n    clientToken?: string;\n    fastlaneStyles?: FastlaneStylesSettings;\n    connectClientToken?: string; // TODO: remove when PPCP Fastlane A/B test will be finished\n    enabledAlternativePaymentMethods: FundingType;\n    isDeveloperModeApplicable?: boolean;\n    intent?: PayPalCommerceIntent;\n    isAcceleratedCheckoutEnabled?: boolean; // PayPal Fastlane related\n    isFastlaneShippingOptionAutoSelectEnabled?: boolean; // PayPal Fastlane related\n    isFastlaneStylingEnabled?: boolean;\n    isHostedCheckoutEnabled?: boolean;\n    isPayPalCommerceAnalyticsV2Enabled?: boolean; // PayPal Fastlane related\n    isPayPalCreditAvailable?: boolean;\n    isVenmoEnabled?: boolean;\n    isGooglePayEnabled?: boolean;\n    merchantId?: string;\n    orderId?: string;\n    shouldRenderFields?: boolean;\n    shouldRunAcceleratedCheckout?: boolean; // TODO: remove when PPCP Fastlane A/B test will be finished\n    paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\n    paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[];\n    threeDSVerificationMethod?: string;\n}\n\n/**\n *\n * PayPalCommerceHostWindow contains different\n * PayPal Sdk instances for different purposes\n *\n */\nexport interface PayPalCommerceHostWindow extends Window {\n    paypalFastlane?: PayPalFastlane;\n    paypalFastlaneSdk?: PayPalFastlaneSdk;\n    paypalMessages?: PayPalMessagesSdk;\n    paypalApms?: PayPalApmSdk;\n    paypalGooglePay?: PayPalGooglePaySdk;\n}\n\n/**\n *\n * PayPal SDK config\n *\n */\nexport interface PayPalSdkConfig {\n    options: {\n        'client-id'?: string;\n        'merchant-id'?: string;\n        'buyer-country'?: string;\n        'enable-funding'?: EnableFundingType;\n        'disable-funding'?: FundingType;\n        currency?: string;\n        commit?: boolean;\n        intent?: PayPalCommerceIntent;\n        components?: PayPalSdkComponents;\n        locale?: string;\n    };\n    attributes: {\n        'data-client-metadata-id'?: string;\n        'data-partner-attribution-id'?: string;\n        'data-sdk-client-token'?: string;\n        'data-namespace'?: string;\n        'data-client-token'?: string;\n    };\n}\n\nexport enum PayPalCommerceIntent {\n    AUTHORIZE = 'authorize',\n    CAPTURE = 'capture',\n}\n\nexport type PayPalSdkComponents = Array<\n    | 'fastlane'\n    | 'messages'\n    | 'buttons'\n    | 'payment-fields'\n    | 'three-domain-secure'\n    | 'hosted-fields'\n    | 'googlepay'\n>;\n\n/**\n *\n * PayPal Sdk instances\n *\n */\nexport interface PayPalFastlaneSdk {\n    ThreeDomainSecureClient: {\n        isEligible(params: threeDSecureParameters): Promise<boolean>;\n        show(): Promise<ThreeDomainSecureClientShowResponse>;\n    };\n    Fastlane(options?: PayPalFastlaneOptions): Promise<PayPalFastlane>;\n}\n\ninterface ThreeDomainSecureClientShowResponse {\n    liabilityShift: LiabilityShiftEnum;\n    authenticationState: TDSecureAuthenticationState;\n    nonce: string; // Enriched nonce or the original nonce\n}\n\nexport enum TDSecureAuthenticationState {\n    Succeeded = 'succeeded',\n    Cancelled = 'cancelled',\n    Errored = 'errored',\n}\n\nexport enum LiabilityShiftEnum {\n    Possible = 'POSSIBLE',\n    No = 'NO',\n    Unknown = 'UNKNOWN',\n    Yes = 'YES',\n}\n\nexport interface threeDSecureParameters {\n    amount: string;\n    currency: string;\n    nonce: string;\n    threeDSRequested: boolean;\n    transactionContext: {\n        experience_context: {\n            brand_name?: string;\n            locale: string;\n            return_url: string;\n            cancel_url: string;\n        };\n    };\n}\n\nexport interface PayPalMessagesSdk {\n    Messages(options: MessagingOptions): MessagingRender;\n}\n\nexport interface PayPalApmSdk {\n    Buttons(options: PayPalCommerceButtonsOptions): PayPalCommerceButtons;\n    PaymentFields(options: PayPalCommercePaymentFieldsOptions): PayPalCommercePaymentFields;\n}\n\nexport interface PayPalGooglePaySdk {\n    Googlepay(): GooglePay;\n}\n\n/**\n *\n * Google Pay related types\n *\n */\n\ninterface GooglePay {\n    config: () => Promise<GooglePayConfig>;\n    confirmOrder: (confirmOrderConfig: ConfirmOrderConfig) => Promise<{ status: string }>;\n    initiatePayerAction: (payerActionConfig: PayerActionConfig) => Promise<void>;\n}\n\ninterface ConfirmOrderConfig {\n    orderId: string;\n    paymentMethodData: ConfirmOrderData;\n}\n\nexport interface ConfirmOrderData {\n    tokenizationData: {\n        type: string;\n        token: string;\n    };\n    info: {\n        cardNetwork: string;\n        cardDetails: string;\n    };\n    type: string;\n}\n\ninterface PayerActionConfig {\n    orderId: string;\n}\n\nexport interface GooglePayConfig {\n    allowedPaymentMethods: AllowedPaymentMethods[];\n    apiVersion: number;\n    apiVersionMinor: number;\n    countryCode: string;\n    isEligible: boolean;\n    merchantInfo: {\n        merchantId: string;\n        merchantOrigin: string;\n    };\n}\n\nexport interface AllowedPaymentMethods {\n    type: string;\n    parameters: {\n        allowedAuthMethods: string[];\n        allowedCardNetworks: string[];\n        billingAddressRequired: boolean;\n        assuranceDetailsRequired: boolean;\n        billingAddressParameters: {\n            format: string;\n        };\n    };\n    tokenizationSpecification: {\n        type: string;\n        parameters: {\n            gateway: string;\n            gatewayMerchantId: string;\n        };\n    };\n}\n\n/**\n *\n * PayPal Commerce Buttons\n *\n */\nexport interface PayPalCommerceButtons {\n    render(id: string): void;\n    close(): void;\n    isEligible(): boolean;\n}\n\nexport interface PayPalCommerceButtonsOptions {\n    style?: PayPalButtonStyleOptions;\n    fundingSource: string;\n    createOrder(): Promise<string>;\n    onApprove(\n        data: PayPalButtonApproveCallbackPayload,\n        actions: PayPalButtonApproveCallbackActions,\n    ): Promise<boolean | void> | void;\n    onInit?(\n        data: PayPalButtonInitCallbackPayload,\n        actions: PayPalButtonInitCallbackActions,\n    ): Promise<void>;\n    onClick?(\n        data: PayPalButtonClickCallbackPayload,\n        actions: PayPalButtonClickCallbackActions,\n    ): Promise<void> | void;\n    onError?(error: Error): void;\n    onCancel?(): void;\n}\n\nexport interface PayPalButtonClickCallbackPayload {\n    fundingSource: string;\n}\n\nexport interface PayPalButtonClickCallbackActions {\n    reject(): void;\n    resolve(): void;\n}\n\nexport interface PayPalButtonInitCallbackPayload {\n    correlationID: string;\n}\n\nexport interface PayPalButtonInitCallbackActions {\n    disable(): void;\n    enable(): void;\n}\n\nexport interface PayPalButtonApproveCallbackPayload {\n    orderID?: string;\n}\n\nexport interface PayPalButtonApproveCallbackActions {\n    order: {\n        get: () => Promise<PayPalOrderDetails>;\n    };\n}\n\nexport interface PayPalOrderDetails {\n    payer: {\n        name: {\n            given_name: string;\n            surname: string;\n        };\n        email_address: string;\n        address: PayPalOrderAddress;\n    };\n    purchase_units: Array<{\n        shipping: {\n            address: PayPalOrderAddress;\n        };\n    }>;\n}\n\nexport interface PayPalOrderAddress {\n    address_line_1: string;\n    admin_area_2: string;\n    admin_area_1?: string;\n    postal_code: string;\n    country_code: string;\n}\n\nexport enum StyleButtonLabel {\n    paypal = 'paypal',\n    checkout = 'checkout',\n    buynow = 'buynow',\n    pay = 'pay',\n    installment = 'installment',\n}\n\nexport enum StyleButtonColor {\n    gold = 'gold',\n    blue = 'blue',\n    silver = 'silver',\n    black = 'black',\n    white = 'white',\n}\n\nexport enum StyleButtonShape {\n    pill = 'pill',\n    rect = 'rect',\n}\n\nexport interface PayPalButtonStyleOptions {\n    color?: StyleButtonColor;\n    shape?: StyleButtonShape;\n    height?: number;\n    label?: StyleButtonLabel;\n}\n\n/**\n *\n * PayPal Commerce Payment fields\n *\n */\nexport interface PayPalCommercePaymentFields {\n    render(id: string): void;\n}\n\nexport interface PayPalCommercePaymentFieldsOptions {\n    style?: PayPalCommerceFieldsStyleOptions;\n    fundingSource: string;\n    fields: {\n        name?: {\n            value?: string;\n        };\n        email?: {\n            value?: string;\n        };\n    };\n}\n\nexport interface PayPalCommerceFieldsStyleOptions {\n    variables?: {\n        fontFamily?: string;\n        fontSizeBase?: string;\n        fontSizeSm?: string;\n        fontSizeM?: string;\n        fontSizeLg?: string;\n        textColor?: string;\n        colorTextPlaceholder?: string;\n        colorBackground?: string;\n        colorInfo?: string;\n        colorDanger?: string;\n        borderRadius?: string;\n        borderColor?: string;\n        borderWidth?: string;\n        borderFocusColor?: string;\n        spacingUnit?: string;\n    };\n    rules?: {\n        [key: string]: any;\n    };\n}\n\n/**\n *\n * PayLater Messages related types\n * doc: https://developer.paypal.com/docs/checkout/pay-later/us/integrate/reference\n */\nexport interface MessagingRender {\n    render(container: string): void;\n}\n\nexport interface MessagesStyleOptions {\n    color?: string; // 'blue' | 'black' | 'white' | 'white-no-border' | 'gray' | 'monochrome' | 'grayscale'\n    layout?: string; // 'text' | 'flex'\n    logo?: {\n        type?: string; // 'primary' | 'alternative' | 'inline' | 'none'\n        position?: string; // 'left' | 'right' | 'top'\n    };\n    ratio?: string; // '1x1' | '1x4' | '8x1' | '20x1'\n    text?: {\n        align?: string; // 'left' | 'right' | 'center'\n        color?: string; // 'black' | 'white' | 'monochrome' | 'grayscale'\n        size?: number; // from 10 to 16\n    };\n}\n\nexport interface MessagingOptions {\n    amount: number;\n    placement: string;\n    style?: MessagesStyleOptions;\n}\n\nexport interface PayPalBNPLConfigurationItem {\n    id: string;\n    name: string;\n    status: boolean;\n    styles: Record<string, string>;\n}\n\n/**\n *\n * PayPal Fastlane related types\n *\n */\nexport interface PayPalFastlane {\n    identity: PayPalFastlaneIdentity;\n    events: PayPalFastlaneEvents;\n    profile: PayPalFastlaneProfile;\n    FastlaneCardComponent(\n        options: PayPalFastlaneCardComponentOptions,\n    ): Promise<PayPalFastlaneCardComponentMethods>;\n}\n\nexport interface PayPalFastlaneOptions {\n    styles?: PayPalFastlaneStylesOption;\n}\n\nexport interface PayPalFastlaneIdentity {\n    lookupCustomerByEmail(email: string): Promise<PayPalFastlaneLookupCustomerByEmailResult>;\n    triggerAuthenticationFlow(\n        customerContextId: string,\n    ): Promise<PayPalFastlaneAuthenticationResult>;\n}\n\nexport interface PayPalFastlaneLookupCustomerByEmailResult {\n    customerContextId?: string;\n}\n\nexport interface PayPalFastlaneAuthenticationResult {\n    authenticationState?: PayPalFastlaneAuthenticationState;\n    profileData?: PayPalFastlaneProfileData;\n}\n\nexport enum PayPalFastlaneAuthenticationState {\n    SUCCEEDED = 'succeeded',\n    FAILED = 'failed',\n    CANCELED = 'canceled',\n    UNRECOGNIZED = 'unrecognized',\n}\n\nexport interface PayPalFastlaneProfileData {\n    name: PayPalFastlaneProfileName;\n    shippingAddress: PayPalFastlaneShippingAddress;\n    card: PayPalFastlaneProfileCard;\n}\n\nexport interface PayPalFastlaneProfileName {\n    fullName: string;\n    firstName?: string;\n    lastName?: string;\n}\n\nexport interface PayPalFastlaneProfilePhone {\n    countryCode: string;\n    nationalNumber: string;\n}\n\nexport interface PayPalFastlaneShippingAddress {\n    name: PayPalFastlaneProfileName;\n    phoneNumber: PayPalFastlaneProfilePhone;\n    address: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneProfileCard {\n    id: string; // nonce / token\n    paymentSource: PayPalFastlanePaymentSource;\n}\n\nexport interface PayPalFastlanePaymentSource {\n    card: PayPalFastlaneCardSource;\n}\n\nexport interface PayPalFastlaneCardSource {\n    brand: string;\n    expiry: string; // \"YYYY-MM\"\n    lastDigits: string; // \"1111\"\n    name: string;\n    billingAddress: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneAddress {\n    company?: string;\n    addressLine1: string;\n    addressLine2?: string;\n    adminArea1: string; // State\n    adminArea2: string; // City\n    postalCode: string;\n    countryCode?: string;\n}\n\nexport interface PayPalFastlaneProfileToBcCustomerDataMappingResult {\n    authenticationState: PayPalFastlaneAuthenticationState;\n    addresses: CustomerAddress[];\n    billingAddress?: CustomerAddress;\n    shippingAddress?: CustomerAddress;\n    instruments: CardInstrument[];\n}\n\nexport interface PayPalFastlaneStylesOption {\n    root?: {\n        backgroundColorPrimary?: string;\n        errorColor?: string;\n        fontFamily?: string;\n        fontSizeBase?: string;\n        padding?: string;\n        primaryColor?: string;\n    };\n    input?: {\n        borderRadius?: string;\n        borderColor?: string;\n        focusBorderColor?: string;\n        backgroundColor?: string;\n        borderWidth?: string;\n        textColorBase?: string;\n    };\n    toggle?: {\n        colorPrimary?: string;\n        colorSecondary?: string;\n    };\n    text?: {\n        body?: {\n            color?: string;\n            fontSize?: string;\n        };\n        caption?: {\n            color?: string;\n            fontSize?: string;\n        };\n    };\n    branding?: string; // 'light' | 'dark'\n}\n\nexport interface PayPalFastlaneProfile {\n    showCardSelector(): Promise<PayPalFastlaneCardSelectorResponse>;\n    showShippingAddressSelector(): Promise<PayPalFastlaneShippingAddressSelectorResponse>;\n}\n\nexport interface PayPalFastlaneShippingAddressSelectorResponse {\n    selectionChanged: boolean;\n    selectedAddress: PayPalFastlaneShippingAddress;\n}\n\nexport interface PayPalFastlaneCardSelectorResponse {\n    selectionChanged: boolean;\n    selectedCard: PayPalFastlaneProfileCard;\n}\n\nexport interface PayPalFastlaneCardComponentMethods {\n    getPaymentToken(\n        options: PayPalFastlaneGetPaymentTokenOptions,\n    ): Promise<PayPalFastlaneProfileCard>;\n    render(element: string): void;\n}\n\nexport interface PayPalFastlaneGetPaymentTokenOptions {\n    name?: PayPalFastlaneProfileName;\n    billingAddress?: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneCardComponentOptions {\n    fields?: PayPalFastlaneCardComponentFields;\n}\n\nexport interface PayPalFastlaneCardComponentFields {\n    cardholderName?: {\n        enabled?: boolean;\n        prefill?: string;\n    };\n    phoneNumber?: {\n        placeholder?: string;\n        prefill?: string;\n    };\n}\n\nexport interface PayPalFastlaneEvents {\n    apmSelected: (options: PayPalFastlaneApmSelectedEventOptions) => void;\n    emailSubmitted: (options: PayPalFastlaneEmailEnteredEventOptions) => void;\n    orderPlaced: (options: PayPalFastlaneOrderPlacedEventOptions) => void;\n}\n\nexport interface PayPalFastlaneEventCommonOptions {\n    context_type: 'cs_id';\n    context_id: string; // checkout session id\n    page_type: 'checkout_page';\n    page_name: string; // title of the checkout initiation page\n    partner_name: 'bigc';\n    user_type: 'store_member' | 'store_guest'; // type of the user on the merchant site\n    store_id: string;\n    merchant_name: string;\n    experiment: string; // stringify JSON object \"[{ treatment_group: 'test' | 'control' }]\"\n}\n\nexport interface PayPalFastlaneApmSelectedEventOptions extends PayPalFastlaneEventCommonOptions {\n    apm_shown: '0' | '1'; // alternate payment shown on the checkout page\n    apm_list: string; // list of alternate payment shown on checkout page\n    apm_selected: string; // alternate payment method selected / methodId\n    apm_location: 'pre-email section' | 'payment section'; // placement of APM, whether it be above the email entry or in the radio buttons\n}\n\nexport interface PayPalFastlaneEmailEnteredEventOptions extends PayPalFastlaneEventCommonOptions {\n    user_email_saved: boolean; // shows whether checkout was loaded with or without a saved email\n    apm_shown: '0' | '1'; // alternate payment shown on the checkout page\n    apm_list: string; // list of alternate payment shown on checkout page 'applepay,googlepay,paypal'\n}\n\nexport interface PayPalFastlaneOrderPlacedEventOptions extends PayPalFastlaneEventCommonOptions {\n    selected_payment_method: string;\n    currency_code: string;\n}\n\nexport interface PayPalFastlanePaymentFormattedPayload {\n    paypal_connect_token?: {\n        order_id?: string;\n        token: string;\n    };\n    paypal_fastlane_token?: {\n        order_id?: string;\n        token: string;\n    };\n}\n\nexport interface FastlaneStylesSettings {\n    fastlaneRootSettingsBackgroundColor?: string;\n    fastlaneRootSettingsErrorColor?: string;\n    fastlaneRootSettingsFontFamily?: string;\n    fastlaneRootSettingsPadding?: string;\n    fastlaneRootSettingsPrimaryColor?: string;\n    fastlaneRootSettingsFontSize?: string;\n    fastlaneInputSettingsBackgroundColor?: string;\n    fastlaneInputSettingsBorderRadius?: string;\n    fastlaneInputSettingsBorderWidth?: string;\n    fastlaneInputSettingsTextColorBase?: string;\n    fastlaneInputSettingsBorderColor?: string;\n    fastlaneInputSettingsFocusBorderBase?: string;\n    fastlaneToggleSettingsColorPrimary?: string;\n    fastlaneToggleSettingsColorSecondary?: string;\n    fastlaneTextBodySettingsColor?: string;\n    fastlaneTextBodySettingsFontSize?: string;\n    fastlaneTextCaptionSettingsFontSize?: string;\n    fastlaneTextCaptionSettingsColor?: string;\n    fastlaneBrandingSettings?: string;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/get-fastlane-styles.spec.ts",
    "content": "import getFastlaneStyles from './get-fastlane-styles';\n\ndescribe('#getFastlaneStyles()', () => {\n    it('returns styles options with provided modifications', () => {\n        const styles = {\n            fastlaneRootSettingsBackgroundColor: 'red',\n            fastlaneInputSettingsBorderColor: 'green',\n            fastlaneTextBodySettingsFontSize: '12px',\n            fastlaneTextBodySettingsColor: 'blue',\n        };\n\n        const uiStyles = {\n            root: {\n                backgroundColorPrimary: 'green',\n            },\n            text: {\n                caption: {\n                    fontSize: '15px',\n                },\n            },\n        };\n\n        expect(getFastlaneStyles(styles, uiStyles)).toEqual({\n            root: {\n                backgroundColorPrimary: 'red',\n            },\n            input: {\n                borderColor: 'green',\n            },\n            text: {\n                body: {\n                    fontSize: '12px',\n                    color: 'blue',\n                },\n                caption: {\n                    fontSize: '15px',\n                },\n            },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/get-fastlane-styles.ts",
    "content": "import { omitBy } from 'lodash';\n\nimport { FastlaneStylesSettings, PayPalFastlaneStylesOption } from '../index';\n\nfunction isInvalidStyleOption(styleOption: unknown) {\n    return typeof styleOption !== 'string';\n}\n\nexport default function getFastlaneStyles(\n    styleSettings?: FastlaneStylesSettings,\n    uiStyles?: PayPalFastlaneStylesOption,\n) {\n    if (!uiStyles && !styleSettings) {\n        return undefined;\n    }\n\n    return cleanUpFastlaneStyles(mergeFastlaneStyles(styleSettings, uiStyles));\n}\n\nfunction mergeFastlaneStyles(\n    styleSettings?: FastlaneStylesSettings,\n    uiStyles?: PayPalFastlaneStylesOption,\n): PayPalFastlaneStylesOption {\n    return {\n        root: {\n            backgroundColorPrimary:\n                styleSettings?.fastlaneRootSettingsBackgroundColor ||\n                uiStyles?.root?.backgroundColorPrimary,\n            errorColor: styleSettings?.fastlaneRootSettingsErrorColor || uiStyles?.root?.errorColor,\n            fontFamily: styleSettings?.fastlaneRootSettingsFontFamily || uiStyles?.root?.fontFamily,\n            fontSizeBase:\n                styleSettings?.fastlaneRootSettingsFontSize || uiStyles?.root?.fontSizeBase,\n            padding: styleSettings?.fastlaneRootSettingsPadding || uiStyles?.root?.padding,\n            primaryColor:\n                styleSettings?.fastlaneRootSettingsPrimaryColor || uiStyles?.root?.primaryColor,\n        },\n        input: {\n            borderRadius:\n                styleSettings?.fastlaneInputSettingsBorderRadius || uiStyles?.input?.borderRadius,\n            borderColor:\n                styleSettings?.fastlaneInputSettingsBorderColor || uiStyles?.input?.borderColor,\n            focusBorderColor:\n                styleSettings?.fastlaneInputSettingsFocusBorderBase ||\n                uiStyles?.input?.focusBorderColor,\n            backgroundColor:\n                styleSettings?.fastlaneInputSettingsBackgroundColor ||\n                uiStyles?.input?.backgroundColor,\n            borderWidth:\n                styleSettings?.fastlaneInputSettingsBorderWidth || uiStyles?.input?.borderWidth,\n            textColorBase:\n                styleSettings?.fastlaneInputSettingsTextColorBase || uiStyles?.input?.textColorBase,\n        },\n        toggle: {\n            colorPrimary:\n                styleSettings?.fastlaneToggleSettingsColorPrimary || uiStyles?.toggle?.colorPrimary,\n            colorSecondary:\n                styleSettings?.fastlaneToggleSettingsColorSecondary ||\n                uiStyles?.toggle?.colorSecondary,\n        },\n        text: {\n            body: {\n                color: styleSettings?.fastlaneTextBodySettingsColor || uiStyles?.text?.body?.color,\n                fontSize:\n                    styleSettings?.fastlaneTextBodySettingsFontSize ||\n                    uiStyles?.text?.body?.fontSize,\n            },\n            caption: {\n                color:\n                    styleSettings?.fastlaneTextCaptionSettingsColor ||\n                    uiStyles?.text?.caption?.color,\n                fontSize:\n                    styleSettings?.fastlaneTextCaptionSettingsFontSize ||\n                    uiStyles?.text?.caption?.fontSize,\n            },\n        },\n        branding: styleSettings?.fastlaneBrandingSettings || uiStyles?.branding,\n    };\n}\n\nfunction cleanUpFastlaneStyles(styles: PayPalFastlaneStylesOption) {\n    const fastlaneStyles: PayPalFastlaneStylesOption = {};\n\n    const root = omitBy(styles.root, isInvalidStyleOption);\n    const input = omitBy(styles.input, isInvalidStyleOption);\n    const toggle = omitBy(styles.toggle, isInvalidStyleOption);\n    const textBody = omitBy(styles.text?.body, isInvalidStyleOption);\n    const textCaption = omitBy(styles.text?.caption, isInvalidStyleOption);\n    const branding = styles.branding;\n\n    if (Object.keys(root).length) {\n        fastlaneStyles.root = root;\n    }\n\n    if (Object.keys(input).length) {\n        fastlaneStyles.input = input;\n    }\n\n    if (Object.keys(toggle).length) {\n        fastlaneStyles.toggle = toggle;\n    }\n\n    if (Object.keys(textBody).length) {\n        fastlaneStyles.text = {};\n        fastlaneStyles.text.body = textBody;\n    }\n\n    if (Object.keys(textCaption).length) {\n        fastlaneStyles.text = {\n            ...fastlaneStyles.text,\n        };\n        fastlaneStyles.text.caption = textCaption;\n    }\n\n    if (branding) {\n        fastlaneStyles.branding = branding;\n    }\n\n    return fastlaneStyles;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/get-paypal-messages-styles-from-bnpl-config.spec.ts",
    "content": "import getPaypalMessagesStylesFromBNPLConfig from './get-paypal-messages-styles-from-bnpl-config';\n\ndescribe('getPaypalMessagesStylesFromBNPLConfig', () => {\n    it('returns PayPal Commerce Messages Style Options from BNPL Config', () => {\n        const input = {\n            id: 'checkout',\n            name: 'Checkout page',\n            status: true,\n            styles: {\n                color: 'white-no-border',\n                layout: 'text',\n                'logo-type': 'alternative',\n                'logo-position': 'right',\n                ratio: '8x1',\n                'text-color': 'white',\n                'text-size': '10',\n            },\n        };\n\n        const expectedOutput = {\n            color: 'white-no-border',\n            layout: 'text',\n            logo: {\n                type: 'alternative',\n                position: 'right',\n            },\n            ratio: '8x1',\n            text: {\n                color: 'white',\n                size: 10,\n            },\n        };\n\n        expect(getPaypalMessagesStylesFromBNPLConfig(input)).toStrictEqual(expectedOutput);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/get-paypal-messages-styles-from-bnpl-config.ts",
    "content": "import { MessagesStyleOptions, PayPalBNPLConfigurationItem } from '../paypal-commerce-types';\n\nfunction getPaypalMessagesStylesFromBNPLConfig({\n    styles,\n}: PayPalBNPLConfigurationItem): MessagesStyleOptions {\n    const messagesStyles: MessagesStyleOptions = {};\n\n    if (styles.color) {\n        messagesStyles.color = styles.color;\n    }\n\n    if (styles.layout) {\n        messagesStyles.layout = styles.layout;\n    }\n\n    if (styles['logo-type'] || styles['logo-position']) {\n        messagesStyles.logo = {};\n\n        if (styles['logo-type']) {\n            messagesStyles.logo.type = styles['logo-type'];\n        }\n\n        if (styles['logo-position']) {\n            messagesStyles.logo.position = styles['logo-position'];\n        }\n    }\n\n    if (styles.ratio) {\n        messagesStyles.ratio = styles.ratio;\n    }\n\n    if (styles['text-color'] || styles['text-size']) {\n        messagesStyles.text = {};\n\n        if (styles['text-color']) {\n            messagesStyles.text.color = styles['text-color'];\n        }\n\n        if (styles['text-size']) {\n            messagesStyles.text.size = +styles['text-size'];\n        }\n    }\n\n    return messagesStyles;\n}\n\nexport default getPaypalMessagesStylesFromBNPLConfig;\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/index.ts",
    "content": "export { default as isPayPalCommerceAcceleratedCheckoutCustomer } from './is-paypal-commerce-accelerated-checkout-customer';\nexport { default as isPayPalFastlaneCustomer } from './is-paypal-fastlane-customer';\nexport { default as getFastlaneStyles } from './get-fastlane-styles';\nexport { default as getPaypalMessagesStylesFromBNPLConfig } from './get-paypal-messages-styles-from-bnpl-config';\nexport { default as isRedirectActionError } from './is-redirect-action-error';\nexport { default as isPaypalFastlaneRequestError } from './is-paypal-fastlane-request-error';\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/is-paypal-commerce-accelerated-checkout-customer.spec.ts",
    "content": "import isPayPalCommerceAcceleratedCheckoutCustomer from './is-paypal-commerce-accelerated-checkout-customer';\n\ndescribe('isPayPalCommerceAcceleratedCheckoutCustomer', () => {\n    it('returns true if payment provider customer is PayPalCommerce related', () => {\n        const paymentProviderCustomer = {\n            authenticationState: 'success',\n            addresses: [],\n            instruments: [],\n        };\n\n        expect(isPayPalCommerceAcceleratedCheckoutCustomer(paymentProviderCustomer)).toBe(true);\n    });\n\n    it('returns false if payment provider customer is not PayPalCommerce related', () => {\n        const paymentProviderCustomer = {\n            stripeLinkAuthenticationState: true,\n        };\n\n        expect(isPayPalCommerceAcceleratedCheckoutCustomer(paymentProviderCustomer)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/is-paypal-commerce-accelerated-checkout-customer.ts",
    "content": "import {\n    PaymentProviderCustomer,\n    PayPalConnectCustomer,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function isPayPalCommerceAcceleratedCheckoutCustomer(\n    customer?: PaymentProviderCustomer,\n): customer is PayPalConnectCustomer {\n    if (!customer) {\n        return false;\n    }\n\n    return (\n        'authenticationState' in customer || 'addresses' in customer || 'instruments' in customer\n    );\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/is-paypal-commerce-provider-error.spec.ts",
    "content": "import isPaypalCommerceProviderError from './is-paypal-commerce-provider-error';\n\ndescribe('isPaypalCommerceProviderError', () => {\n    it('returns true if error paypalcommerce provider related', () => {\n        const providerError = {\n            status: 'error',\n            three_ds_result: {\n                acs_url: null,\n                payer_auth_request: null,\n                merchant_data: null,\n                callback_url: null,\n            },\n            errors: [\n                {\n                    code: 'invalid_request_error',\n                    message:\n                        'Were experiencing difficulty processing your transaction. Please contact us or try again later.',\n                },\n                {\n                    code: 'transaction_rejected',\n                    message: 'Payment was declined. Please try again.',\n                    provider_error: {\n                        code: 'INSTRUMENT_DECLINED',\n                    },\n                },\n            ],\n        };\n\n        expect(isPaypalCommerceProviderError(providerError)).toBe(true);\n    });\n\n    it('returns false if error not paypalcommerce provider related', () => {\n        const notProviderError = {\n            status: 'error',\n            three_ds_result: {\n                acs_url: null,\n                payer_auth_request: null,\n                merchant_data: null,\n                callback_url: null,\n            },\n        };\n\n        expect(isPaypalCommerceProviderError(notProviderError)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/is-paypal-commerce-provider-error.ts",
    "content": "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 isPaypalCommerceProviderError(error: unknown): error is ProviderError {\n    return typeof error === 'object' && error !== null && 'errors' in error;\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/is-paypal-fastlane-customer.spec.ts",
    "content": "import isPayPalFastlaneCustomer from './is-paypal-fastlane-customer';\n\ndescribe('isPayPalFastlaneCustomer', () => {\n    it('returns true if payment provider customer is PayPal Fastlane related', () => {\n        const paymentProviderCustomer = {\n            authenticationState: 'success',\n            addresses: [],\n            instruments: [],\n        };\n\n        expect(isPayPalFastlaneCustomer(paymentProviderCustomer)).toBe(true);\n    });\n\n    it('returns false if payment provider customer is not PayPal Fastlane related', () => {\n        const paymentProviderCustomer = {\n            stripeLinkAuthenticationState: true,\n        };\n\n        expect(isPayPalFastlaneCustomer(paymentProviderCustomer)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/is-paypal-fastlane-customer.ts",
    "content": "import {\n    PaymentProviderCustomer,\n    PayPalConnectCustomer,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n// TODO: update PayPalConnectCustomer with PayPalFastlaneCustomer\nexport default function isPayPalFastlaneCustomer(\n    customer?: PaymentProviderCustomer,\n): customer is PayPalConnectCustomer {\n    if (!customer) {\n        return false;\n    }\n\n    return (\n        'authenticationState' in customer || 'addresses' in customer || 'instruments' in customer\n    );\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/is-paypal-fastlane-request-error.spec.ts",
    "content": "import isPaypalFastlaneRequestError from './is-paypal-fastlane-request-error';\n\ninterface PaypalFastlaneRequestError {\n    message: string;\n    response: {\n        body: {\n            name: string;\n        };\n    };\n}\n\ndescribe('isPaypalFastlaneRequestError', () => {\n    it('returns true for a valid PaypalFastlaneRequestError object', () => {\n        const error: PaypalFastlaneRequestError = {\n            message: 'Some error occurred',\n            response: {\n                body: {\n                    name: 'SomeErrorName',\n                },\n            },\n        };\n\n        expect(isPaypalFastlaneRequestError(error)).toBe(true);\n    });\n\n    it('returns false when error is null', () => {\n        expect(isPaypalFastlaneRequestError(null)).toBe(false);\n    });\n\n    it('returns false when error is a string', () => {\n        expect(isPaypalFastlaneRequestError('error')).toBe(false);\n    });\n\n    it('returns false when error is an object missing response', () => {\n        const error = {\n            message: 'Missing response',\n        };\n        expect(isPaypalFastlaneRequestError(error)).toBe(false);\n    });\n\n    it('returns false when response has no body', () => {\n        const error = {\n            message: 'No body',\n            response: {},\n        };\n        expect(isPaypalFastlaneRequestError(error)).toBe(false);\n    });\n\n    it('returns false when body has no name property', () => {\n        const error = {\n            message: 'No name in body',\n            response: {\n                body: {},\n            },\n        };\n        expect(isPaypalFastlaneRequestError(error)).toBe(false);\n    });\n\n    it('returns false when message property is missing', () => {\n        const error = {\n            response: {\n                body: {\n                    name: 'MissingMessage',\n                },\n            },\n        };\n        expect(isPaypalFastlaneRequestError(error)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/is-paypal-fastlane-request-error.ts",
    "content": "export interface PaypalFastlaneRequestError {\n    name: string;\n    message: string;\n    response: {\n        body: {\n            name: string;\n        };\n    };\n}\n\nexport default function isPaypalFastlaneRequestError(\n    error: unknown,\n): error is PaypalFastlaneRequestError {\n    return (\n        typeof error === 'object' &&\n        error !== null &&\n        'message' in error &&\n        'response' in error &&\n        'body' in (error as PaypalFastlaneRequestError).response &&\n        'name' in (error as PaypalFastlaneRequestError).response.body\n    );\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/is-redirect-action-error.spec.ts",
    "content": "import isRedirectActionError from './is-redirect-action-error';\n\ndescribe('isRedirectActionError', () => {\n    it('returns true if error is redirect action type', () => {\n        const redirectActionError = {\n            status: 'error',\n            three_ds_result: {\n                acs_url: null,\n                payer_auth_request: null,\n                merchant_data: null,\n                callback_url: null,\n            },\n            body: {\n                additional_action_required: {\n                    type: 'offsite_redirect',\n                    data: {\n                        redirect_url: 'https://example.redirect.com',\n                    },\n                },\n            },\n            errors: [\n                {\n                    code: 'invalid_request_error',\n                    message:\n                        \"We're experiencing difficulty processing your transaction. Please contact us or try again later.\",\n                },\n            ],\n        };\n\n        expect(isRedirectActionError(redirectActionError)).toBe(true);\n    });\n\n    it('returns false if error is not redirect action type', () => {\n        const notRedirectActionError = {\n            status: 'error',\n            three_ds_result: {\n                acs_url: null,\n                payer_auth_request: null,\n                merchant_data: null,\n                callback_url: null,\n            },\n        };\n\n        expect(isRedirectActionError(notRedirectActionError)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-commerce-utils/src/utils/is-redirect-action-error.ts",
    "content": "import { isRequestError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ProviderError } from './is-paypal-commerce-provider-error';\n\nexport interface RedirectActionError extends ProviderError {\n    body: {\n        additional_action_required: {\n            type: 'offsite_redirect';\n            data: {\n                redirect_url: string;\n            };\n        };\n    };\n}\n\nexport default function isRedirectActionError(error: unknown): error is RedirectActionError {\n    return (\n        isRequestError(error) && error.body.additional_action_required?.type === 'offsite_redirect'\n    );\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true\n    }\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/paypal-commerce-utils/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/paypal-express-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/restrict-template-expressions\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"jest/valid-expect\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-empty-function\": \"off\",\n                \"@typescript-eslint/no-shadow\": \"off\",\n                \"@typescript-eslint/restrict-template-expressions\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/paypal-express-integration/README.md",
    "content": "# paypal-express-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test paypal-express-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint paypal-express-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/paypal-express-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'paypal-express-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/paypal-express-integration',\n};\n"
  },
  {
    "path": "packages/paypal-express-integration/project.json",
    "content": "{\n    \"name\": \"paypal-express-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/paypal-express-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/paypal-express-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/paypal-express-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/paypal-express-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-express-integration/src/create-paypal-express-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { createPaypalExpressButtonStrategy, PaypalExpressButtonStrategy } from './index';\n\ndescribe('createPaypalExpressButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal express button strategy', () => {\n        const strategy = createPaypalExpressButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PaypalExpressButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-express-integration/src/create-paypal-express-button-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { PaypalExpressButtonStrategy, PaypalExpressScriptLoader } from './index';\n\nconst createPaypalExpressButtonStrategy: CheckoutButtonStrategyFactory<\n    PaypalExpressButtonStrategy\n> = (paymentIntegrationService) => {\n    return new PaypalExpressButtonStrategy(\n        paymentIntegrationService,\n        new PaypalExpressScriptLoader(getScriptLoader()),\n        createFormPoster(),\n    );\n};\n\nexport default toResolvableModule(createPaypalExpressButtonStrategy, [{ id: 'paypalexpress' }]);\n"
  },
  {
    "path": "packages/paypal-express-integration/src/create-paypal-express-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { createPaypalExpressPaymentStrategy, PaypalExpressPaymentStrategy } from './index';\n\ndescribe('createPaypalExpressPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal express payment strategy', () => {\n        const strategy = createPaypalExpressPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PaypalExpressPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-express-integration/src/create-paypal-express-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PaypalExpressPaymentStrategy from './paypal-express-payment-strategy';\nimport PaypalExpressScriptLoader from './paypal-express-script-loader';\n\nconst createPaypalExpressPaymentStrategy: PaymentStrategyFactory<PaypalExpressPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new PaypalExpressPaymentStrategy(\n        paymentIntegrationService,\n        new PaypalExpressScriptLoader(getScriptLoader()),\n    );\n};\n\nexport default toResolvableModule(createPaypalExpressPaymentStrategy, [\n    { id: 'paypalexpress', type: 'PAYMENT_TYPE_HOSTED' },\n    { id: 'paypalexpresscredit', type: 'PAYMENT_TYPE_HOSTED' },\n]);\n"
  },
  {
    "path": "packages/paypal-express-integration/src/index.ts",
    "content": "export { default as PaypalExpressButtonStrategy } from './paypal-express-button-strategy';\nexport { default as PaypalExpressPaymentStrategy } from './paypal-express-payment-strategy';\nexport { default as PaypalExpressScriptLoader } from './paypal-express-script-loader';\nexport { default as createPaypalExpressButtonStrategy } from './create-paypal-express-button-strategy';\nexport { default as createPaypalExpressPaymentStrategy } from './create-paypal-express-payment-strategy';\nexport { WithPaypalExpressPaymentInitializeOptions } from './paypal-express-payment-initialize-options';\n"
  },
  {
    "path": "packages/paypal-express-integration/src/mocks/paypal-express-mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { PaypalSDK } from '../paypal-express-types';\n\nexport function getPaypalExpress(): PaymentMethod {\n    return {\n        id: 'paypalexpress',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        config: {\n            merchantId: 'h3hxn44tdd8wxkzd',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n    };\n}\n\nexport function getPaypalExpressMock(): PaypalSDK {\n    return {\n        FUNDING: {\n            CARD: 'card',\n            CREDIT: 'credit',\n            PAYPAL: 'paypal',\n            PAYLATER: 'paylater',\n        },\n        Button: {\n            render: jest.fn(),\n        },\n        checkout: {\n            initXO: jest.fn(),\n            startFlow: jest.fn(),\n            closeFlow: jest.fn(),\n            setup: jest.fn(),\n        },\n        Buttons: jest.fn(),\n        Messages: jest.fn(),\n    };\n}\n"
  },
  {
    "path": "packages/paypal-express-integration/src/paypal-express-button-initialize-options.ts",
    "content": "import { Omit, StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { PaypalStyleOptions } from './paypal-express-types';\n\nexport interface PaypalExpressButtonInitializeOptions {\n    /**\n     * @internal\n     * This is an internal property and therefore subject to change. DO NOT USE.\n     */\n    shouldProcessPayment?: boolean;\n\n    /**\n     * The Client ID of the Paypal App\n     */\n    clientId: string;\n\n    /**\n     * Whether or not to show a credit button.\n     */\n    allowCredit?: boolean;\n\n    /**\n     * A set of styling options for the checkout button.\n     */\n    style?: Omit<PaypalStyleOptions, 'height'>;\n\n    /**\n     * A callback that gets called if unable to authorize and tokenize payment.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onAuthorizeError?(error: StandardError): void;\n\n    /**\n     * A callback that gets called if unable to submit payment.\n     *\n     * @param error - The error object describing the failure.\n     */\n    onPaymentError?(error: StandardError): void;\n}\n\nexport interface WithPaypalExpressButtonInitializeOptions {\n    paypal: PaypalExpressButtonInitializeOptions;\n}\n"
  },
  {
    "path": "packages/paypal-express-integration/src/paypal-express-button-strategy.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { ScriptLoader } from '@bigcommerce/script-loader';\nimport { EventEmitter } from 'events';\n\nimport {\n    CheckoutButtonInitializeOptions,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getPaypalExpress, getPaypalExpressMock } from './mocks/paypal-express-mock';\nimport {\n    PaypalExpressButtonInitializeOptions,\n    WithPaypalExpressButtonInitializeOptions,\n} from './paypal-express-button-initialize-options';\nimport {\n    PaypalActions,\n    PaypalButtonOptions,\n    PaypalButtonStyleColorOption,\n    PaypalButtonStyleShapeOption,\n    PaypalButtonStyleSizeOption,\n    PaypalSDK,\n} from './paypal-express-types';\n\nimport { PaypalExpressButtonStrategy, PaypalExpressScriptLoader } from './index';\n\ndescribe('PaypalExpressButtonStrategy', () => {\n    let actionsMock: PaypalActions;\n    let eventEmitter: EventEmitter;\n    let formPoster: FormPoster;\n    let options: CheckoutButtonInitializeOptions & WithPaypalExpressButtonInitializeOptions;\n    let paypalOptions: PaypalExpressButtonInitializeOptions;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paypal: PaypalSDK;\n    let paypalExpressScriptLoader: PaypalExpressScriptLoader;\n    let strategy: PaypalExpressButtonStrategy;\n    let paymentMethod: PaymentMethod;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paypalExpressScriptLoader = new PaypalExpressScriptLoader(new ScriptLoader());\n        formPoster = createFormPoster();\n        paymentMethod = getPaypalExpress();\n\n        paypalOptions = {\n            shouldProcessPayment: false,\n            clientId: 'abc',\n            onAuthorizeError: jest.fn(),\n            onPaymentError: jest.fn(),\n        };\n\n        options = {\n            containerId: 'checkout-button',\n            methodId: 'paypalexpress',\n            paypal: paypalOptions,\n        };\n\n        eventEmitter = new EventEmitter();\n        paypal = getPaypalExpressMock();\n\n        actionsMock = {\n            payment: {\n                get: jest.fn().mockReturnValue(\n                    Promise.resolve({\n                        payer: {\n                            payer_info: 'PAYER_INFO',\n                        },\n                    }),\n                ),\n            },\n            request: {\n                post: jest.fn().mockReturnValue(Promise.resolve()),\n            },\n        };\n\n        jest.spyOn(paypal.Button, 'render').mockImplementation((options: PaypalButtonOptions) => {\n            eventEmitter.on('payment', () => {\n                if (options.payment) {\n                    options\n                        .payment(\n                            {\n                                payerId: 'PAYER_ID',\n                                paymentID: 'PAYMENT_ID',\n                                payerID: 'PAYER_ID',\n                            },\n                            actionsMock,\n                        )\n                        .catch(() => {});\n                }\n            });\n\n            eventEmitter.on('authorize', () => {\n                if (options.onAuthorize) {\n                    options\n                        .onAuthorize(\n                            {\n                                payerId: 'PAYER_ID',\n                                paymentID: 'PAYMENT_ID',\n                                payerID: 'PAYER_ID',\n                            },\n                            actionsMock,\n                        )\n                        .catch(() => {});\n                }\n            });\n        });\n\n        jest.spyOn(paypalExpressScriptLoader, 'loadPaypalSDK').mockReturnValue(\n            Promise.resolve(paypal),\n        );\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation(() => {});\n\n        strategy = new PaypalExpressButtonStrategy(\n            paymentIntegrationService,\n            paypalExpressScriptLoader,\n            formPoster,\n        );\n    });\n\n    it('throws error if paypal options is not loaded', async () => {\n        try {\n            strategy = new PaypalExpressButtonStrategy(\n                paymentIntegrationService,\n                paypalExpressScriptLoader,\n                formPoster,\n            );\n\n            options = {\n                containerId: 'checkout-button',\n                methodId: 'paypalexpress',\n            } as CheckoutButtonInitializeOptions & WithPaypalExpressButtonInitializeOptions;\n\n            await strategy.initialize(options);\n        } catch (error) {\n            expect(error).toBeInstanceOf(InvalidArgumentError);\n        }\n    });\n\n    it('initializes Paypal and PayPal JS clients', async () => {\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        await strategy.initialize(options);\n\n        expect(paypalExpressScriptLoader.loadPaypalSDK).toHaveBeenCalled();\n    });\n\n    it('throws error if unable to initialize Paypal or PayPal JS client', async () => {\n        const expectedError = new Error('Unable to load JS client');\n\n        jest.spyOn(paypalExpressScriptLoader, 'loadPaypalSDK').mockReturnValue(\n            Promise.reject(expectedError),\n        );\n\n        try {\n            await strategy.initialize(options);\n        } catch (error) {\n            expect(error).toEqual(expectedError);\n        }\n    });\n\n    it('renders PayPal checkout button', async () => {\n        await strategy.initialize(options);\n\n        expect(paypal.Button.render).toHaveBeenCalledWith(\n            {\n                env: 'production',\n                client: {\n                    production: 'abc',\n                },\n                commit: false,\n                onAuthorize: expect.any(Function),\n                payment: expect.any(Function),\n                style: {\n                    shape: 'rect',\n                },\n                funding: {\n                    allowed: [],\n                    disallowed: [paypal.FUNDING.CREDIT],\n                },\n            },\n            'checkout-button',\n        );\n    });\n\n    it('customizes style of PayPal checkout button', async () => {\n        options = {\n            ...options,\n            paypal: {\n                ...paypalOptions,\n                style: {\n                    color: PaypalButtonStyleColorOption.BLUE,\n                    shape: PaypalButtonStyleShapeOption.PILL,\n                    size: PaypalButtonStyleSizeOption.RESPONSIVE,\n                },\n            },\n        };\n\n        await strategy.initialize(options);\n\n        expect(paypal.Button.render).toHaveBeenCalledWith(\n            expect.objectContaining({\n                style: {\n                    color: 'blue',\n                    shape: 'pill',\n                    size: 'responsive',\n                },\n            }),\n            'checkout-button',\n        );\n    });\n\n    it('throws error if unable to render PayPal button', async () => {\n        const expectedError = new Error('Unable to render PayPal button');\n\n        jest.spyOn(paypal.Button, 'render').mockImplementation(() => {\n            throw expectedError;\n        });\n\n        try {\n            await strategy.initialize(options);\n        } catch (error) {\n            expect(error).toEqual(expectedError);\n        }\n    });\n\n    it('posts payment details to server to set checkout data when PayPal payment details are tokenized', async () => {\n        await strategy.initialize(options);\n\n        eventEmitter.emit('authorize');\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(formPoster.postForm).toHaveBeenCalledWith(\n            '/checkout.php',\n            expect.objectContaining({\n                payment_type: 'paypal',\n                provider: 'paypalexpress',\n                action: 'set_external_checkout',\n                paymentId: 'PAYMENT_ID',\n                payerId: 'PAYER_ID',\n                payerInfo: JSON.stringify('PAYER_INFO'),\n            }),\n        );\n    });\n\n    describe('if PayPal Credit is offered', () => {\n        beforeEach(() => {\n            options = {\n                ...options,\n                paypal: {\n                    ...paypalOptions,\n                    allowCredit: true,\n                },\n            };\n        });\n\n        it('renders PayPal Credit checkout button', async () => {\n            await strategy.initialize(options);\n\n            expect(paypal.Button.render).toHaveBeenCalledWith(\n                {\n                    client: {\n                        production: 'abc',\n                    },\n                    commit: false,\n                    env: 'production',\n                    onAuthorize: expect.any(Function),\n                    payment: expect.any(Function),\n                    style: {\n                        shape: 'rect',\n                    },\n                    funding: {\n                        allowed: [paypal.FUNDING.CREDIT],\n                        disallowed: [],\n                    },\n                },\n                'checkout-button',\n            );\n        });\n    });\n\n    it('sends create payment requests to the relative url by default', async () => {\n        jest.spyOn(paymentIntegrationService, 'loadDefaultCheckout').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n            getCart(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getHost').mockReturnValue('');\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n        await strategy.initialize(options);\n\n        eventEmitter.emit('payment');\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        const expectedBody = {\n            cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n            merchantId: 'h3hxn44tdd8wxkzd',\n        };\n\n        expect(actionsMock.request.post).toHaveBeenCalledWith(\n            '/api/storefront/payment/paypalexpress',\n            expectedBody,\n            expect.any(Object),\n        );\n    });\n\n    describe('with a supplied host', () => {\n        beforeEach(() => {\n            strategy = new PaypalExpressButtonStrategy(\n                paymentIntegrationService,\n                paypalExpressScriptLoader,\n                formPoster,\n            );\n        });\n\n        it('sends create payment requests to the supplied host', async () => {\n            jest.spyOn(paymentIntegrationService, 'loadDefaultCheckout').mockResolvedValue(\n                paymentIntegrationService.getState(),\n            );\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                getCart(),\n            );\n            jest.spyOn(paymentIntegrationService.getState(), 'getHost').mockReturnValue(\n                'https://example.com',\n            );\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethod);\n            await strategy.initialize(options);\n\n            eventEmitter.emit('payment');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            const expectedBody = {\n                cartId: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                merchantId: 'h3hxn44tdd8wxkzd',\n            };\n\n            expect(actionsMock.request.post).toHaveBeenCalledWith(\n                'https://example.com/api/storefront/payment/paypalexpress',\n                expectedBody,\n                expect.any(Object),\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-express-integration/src/paypal-express-button-strategy.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n    CheckoutButtonInitializeOptions,\n    CheckoutButtonStrategy,\n    INTERNAL_USE_ONLY,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    PaymentIntegrationService,\n    SDK_VERSION_HEADERS,\n    StandardError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithPaypalExpressButtonInitializeOptions } from './paypal-express-button-initialize-options';\nimport PaypalScriptLoader from './paypal-express-script-loader';\nimport {\n    PaypalActions,\n    PaypalAuthorizeData,\n    PaypalButtonStyleShapeOption,\n    PaypalButtonStyleSizeOption,\n    PaypalClientToken,\n    PaypalSDK,\n    PaypalStyleOptions,\n} from './paypal-express-types';\n\nexport default class PaypalButtonStrategy implements CheckoutButtonStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalExpressScriptLoader: PaypalScriptLoader,\n        private formPoster: FormPoster,\n    ) {}\n\n    async initialize(\n        options: CheckoutButtonInitializeOptions & WithPaypalExpressButtonInitializeOptions,\n    ): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(options.methodId);\n\n        if (!options.paypal) {\n            throw new InvalidArgumentError();\n        }\n\n        if (!paymentMethod.config.merchantId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const paypalSDK = await this.paypalExpressScriptLoader.loadPaypalSDK(\n            paymentMethod.config.merchantId,\n        );\n\n        this.renderButton(options, paypalSDK);\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private renderButton(\n        options: CheckoutButtonInitializeOptions & WithPaypalExpressButtonInitializeOptions,\n        paypalSDK: PaypalSDK,\n    ) {\n        const { containerId, methodId, paypal } = options;\n        const { allowCredit, clientId, onPaymentError, shouldProcessPayment, style } = paypal;\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(options.methodId);\n\n        if (!paymentMethod.config.merchantId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const merchantId = paymentMethod.config.merchantId;\n        const env = paymentMethod.config.testMode ? 'sandbox' : 'production';\n        const clientToken: PaypalClientToken = { [env]: clientId };\n        const fundingCreditOption = paypalSDK.FUNDING.CREDIT || 'credit';\n        const allowedSources = allowCredit ? [fundingCreditOption] : [];\n        const disallowedSources = !allowCredit ? [fundingCreditOption] : [];\n\n        return paypalSDK.Button.render(\n            {\n                env,\n                client: clientToken,\n                commit: shouldProcessPayment,\n                funding: {\n                    allowed: allowedSources,\n                    disallowed: disallowedSources,\n                },\n                style: this.getStyle(style),\n                payment: (_, actions) => this.setupPayment(merchantId, actions, onPaymentError),\n                onAuthorize: (data, actions) =>\n                    this.tokenizePayment(data, methodId, actions, shouldProcessPayment),\n            },\n            containerId,\n        );\n    }\n\n    private getStyle(style?: Omit<PaypalStyleOptions, 'height'>): PaypalStyleOptions {\n        const { color, fundingicons, label, layout, shape, size, tagline } = style || {};\n\n        return {\n            color,\n            fundingicons,\n            label,\n            layout,\n            shape: shape || PaypalButtonStyleShapeOption.RECT,\n            size: size === 'small' ? PaypalButtonStyleSizeOption.RESPONSIVE : size,\n            tagline,\n        };\n    }\n\n    private async setupPayment(\n        merchantId: string,\n        actions?: PaypalActions,\n        onError?: (error: StandardError) => void,\n    ): Promise<string> {\n        if (!actions) {\n            throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n        }\n\n        try {\n            const state = await this.paymentIntegrationService.loadDefaultCheckout();\n            const { id: cartId } = state.getCartOrThrow();\n            const host = state.getHost() || '';\n\n            const paymentRequest = await actions.request.post(\n                `${host}/api/storefront/payment/paypalexpress`,\n                { merchantId, cartId },\n                {\n                    headers: {\n                        'X-API-INTERNAL': INTERNAL_USE_ONLY,\n                        ...SDK_VERSION_HEADERS,\n                    },\n                },\n            );\n\n            return paymentRequest.id;\n        } catch (error) {\n            if (onError && error instanceof StandardError) {\n                onError(error);\n            }\n\n            throw error;\n        }\n    }\n\n    private async tokenizePayment(\n        data: PaypalAuthorizeData,\n        methodId: string,\n        actions?: PaypalActions,\n        shouldProcessPayment?: boolean,\n    ): Promise<void> {\n        if (!actions) {\n            throw new NotInitializedError(NotInitializedErrorType.CheckoutButtonNotInitialized);\n        }\n\n        if (!data.paymentID || !data.payerID) {\n            throw new MissingDataError(MissingDataErrorType.MissingPayment);\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n        const getPaymentData = await actions.payment.get(data.paymentID);\n\n        return this.formPoster.postForm('/checkout.php', {\n            payment_type: 'paypal',\n            provider: paymentMethod.id,\n            action: shouldProcessPayment ? 'process_payment' : 'set_external_checkout',\n            paymentId: data.paymentID,\n            payerId: data.payerID,\n            payerInfo: JSON.stringify(getPaymentData.payer.payer_info),\n        });\n    }\n}\n"
  },
  {
    "path": "packages/paypal-express-integration/src/paypal-express-payment-initialize-options.ts",
    "content": "/**\n * A set of options that are required to initialize the PayPal Express payment\n * method.\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'paypalexpress',\n * });\n * ```\n *\n * An additional flag can be passed in to always start the payment flow through\n * a redirect rather than a popup.\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'paypalexpress',\n *     paypalexpress: {\n *         useRedirectFlow: true,\n *     },\n * });\n * ```\n */\nexport interface WithPaypalExpressPaymentInitializeOptions {\n    paypalexpress?: { useRedirectFlow?: boolean };\n}\n"
  },
  {
    "path": "packages/paypal-express-integration/src/paypal-express-payment-strategy.spec.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\nimport { merge } from 'lodash';\n\nimport {\n    MissingDataError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrder,\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { getPaypalExpress } from './mocks/paypal-express-mock';\nimport { PaymentStatusTypes, PaypalSDK } from './paypal-express-types';\n\nimport { PaypalExpressPaymentStrategy, PaypalExpressScriptLoader } from './index';\n\ndescribe('PaypalExpressPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paypalExpressScriptLoader: PaypalExpressScriptLoader;\n    let strategy: PaypalExpressPaymentStrategy;\n    let paymentMethod: PaymentMethod;\n    let paypalSdk: PaypalSDK;\n    const orderRedirectUrl = 'https://paypal.com/checkout';\n\n    beforeEach(() => {\n        paymentMethod = getPaypalExpress();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paypalExpressScriptLoader = new PaypalExpressScriptLoader(new ScriptLoader());\n\n        paypalSdk = {\n            checkout: {\n                setup: jest.fn(),\n                initXO: jest.fn(),\n                startFlow: jest.fn(),\n                closeFlow: jest.fn(),\n            },\n            Button: {\n                render: jest.fn(),\n            },\n            FUNDING: {\n                CARD: 'card',\n                CREDIT: 'credit',\n                PAYPAL: 'paypal',\n            },\n            Buttons: jest.fn(),\n            Messages: jest.fn(),\n        };\n\n        strategy = new PaypalExpressPaymentStrategy(\n            paymentIntegrationService,\n            paypalExpressScriptLoader,\n        );\n\n        jest.spyOn(paypalExpressScriptLoader, 'loadPaypalSDK').mockImplementation(() => {\n            return Promise.resolve(paypalSdk);\n        });\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentStatus').mockReturnValue(\n            undefined,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockReturnValue(\n            Promise.resolve({\n                ...paymentIntegrationService.getState(),\n                getPaymentRedirectUrl: () => orderRedirectUrl,\n            }),\n        );\n\n        Object.defineProperty(window, 'top', {\n            value: {\n                location: {\n                    href: '/checkout',\n                },\n            },\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        describe('if in-context checkout is enabled', () => {\n            it('loads Paypal SDK', async () => {\n                await strategy.initialize({ methodId: paymentMethod.id });\n\n                expect(paypalExpressScriptLoader.loadPaypalSDK).toHaveBeenCalled();\n            });\n\n            it('initializes Paypal SDK', async () => {\n                await strategy.initialize({ methodId: paymentMethod.id });\n\n                expect(paypalSdk.checkout.setup).toHaveBeenCalledWith(\n                    paymentMethod.config.merchantId,\n                    {\n                        button: 'paypal-button',\n                        environment: 'production',\n                    },\n                );\n            });\n        });\n\n        describe('if in-context checkout is not enabled', () => {\n            beforeEach(() => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...paymentMethod,\n                    config: { ...paymentMethod.config, merchantId: '' },\n                });\n\n                strategy = new PaypalExpressPaymentStrategy(\n                    paymentIntegrationService,\n                    paypalExpressScriptLoader,\n                );\n            });\n\n            it('does not load Paypal SDK', async () => {\n                try {\n                    await strategy.initialize({ methodId: paymentMethod.id });\n                } catch (error) {\n                    expect(error).toBeInstanceOf(MissingDataError);\n                    expect(paypalExpressScriptLoader.loadPaypalSDK).not.toHaveBeenCalled();\n                }\n            });\n\n            it('does not initialize Paypal SDK', async () => {\n                try {\n                    await strategy.initialize({ methodId: paymentMethod.id });\n                } catch (error) {\n                    expect(error).toBeInstanceOf(MissingDataError);\n                    expect(paypalSdk.checkout.setup).not.toHaveBeenCalled();\n                }\n            });\n        });\n    });\n\n    describe('#execute()', () => {\n        let payload: OrderRequestBody;\n\n        beforeEach(() => {\n            payload = merge({}, getOrderRequestBody(), {\n                payment: { methodId: paymentMethod.id },\n            });\n        });\n\n        describe('if in-context checkout is enabled', () => {\n            beforeEach(async () => {\n                await strategy.initialize({ methodId: paymentMethod.id });\n            });\n\n            it('opens in-context modal', async () => {\n                strategy.execute(payload);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalSdk.checkout.initXO).toHaveBeenCalled();\n            });\n\n            it('starts in-context payment flow', async () => {\n                strategy.execute(payload);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalSdk.checkout.startFlow).toHaveBeenCalledWith(orderRedirectUrl);\n            });\n\n            it('does not open in-context modal if payment is already acknowledged', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentStatus',\n                ).mockReturnValue(PaymentStatusTypes.ACKNOWLEDGE);\n\n                strategy = new PaypalExpressPaymentStrategy(\n                    paymentIntegrationService,\n                    paypalExpressScriptLoader,\n                );\n\n                strategy.execute(payload);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalSdk.checkout.initXO).not.toHaveBeenCalled();\n                expect(paypalSdk.checkout.startFlow).not.toHaveBeenCalled();\n            });\n\n            it('does not open in-context modal if payment is already finalized', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentStatus',\n                ).mockReturnValue(PaymentStatusTypes.FINALIZE);\n\n                strategy = new PaypalExpressPaymentStrategy(\n                    paymentIntegrationService,\n                    paypalExpressScriptLoader,\n                );\n\n                strategy.execute(payload);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalSdk.checkout.initXO).not.toHaveBeenCalled();\n                expect(paypalSdk.checkout.startFlow).not.toHaveBeenCalled();\n            });\n\n            it('submits order with payment data', async () => {\n                const options = { methodId: 'paypalexpress' };\n\n                strategy.execute(payload, options);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    payload,\n                    options,\n                );\n            });\n\n            it('does not redirect shopper directly if order submission is successful', async () => {\n                strategy.execute(payload);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(window.top?.location.href).toBe('/checkout');\n            });\n        });\n\n        describe('if in-context checkout is not enabled', () => {\n            beforeEach(async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...paymentMethod,\n                    config: { ...paymentMethod.config, merchantId: '' },\n                });\n\n                strategy = new PaypalExpressPaymentStrategy(\n                    paymentIntegrationService,\n                    paypalExpressScriptLoader,\n                );\n\n                try {\n                    await strategy.initialize({ methodId: paymentMethod.id });\n                } catch {\n                    // Initialization error is expected and intentionally ignored in tests\n                }\n            });\n\n            it('does not open in-context modal', async () => {\n                strategy.execute(payload);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalSdk.checkout.initXO).not.toHaveBeenCalled();\n            });\n\n            it('does not start in-context payment flow', async () => {\n                strategy.execute(payload);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalSdk.checkout.startFlow).not.toHaveBeenCalled();\n            });\n\n            it('submits order with payment data', async () => {\n                const options = { methodId: 'paypalexpress' };\n\n                strategy.execute(payload, options);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    payload,\n                    options,\n                );\n            });\n\n            it('redirects shopper directly if order submission is successful', async () => {\n                strategy.execute(payload);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(window.top?.location.href).toEqual(orderRedirectUrl);\n            });\n\n            it('does not redirect shopper if payment is already acknowledged', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentStatus',\n                ).mockReturnValue(PaymentStatusTypes.ACKNOWLEDGE);\n\n                strategy = new PaypalExpressPaymentStrategy(\n                    paymentIntegrationService,\n                    paypalExpressScriptLoader,\n                );\n\n                strategy.execute(payload);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(window.top?.location.href).toBe('/checkout');\n            });\n\n            it('does not redirect shopper if payment is already finalized', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentStatus',\n                ).mockReturnValue(PaymentStatusTypes.FINALIZE);\n\n                strategy = new PaypalExpressPaymentStrategy(\n                    paymentIntegrationService,\n                    paypalExpressScriptLoader,\n                );\n\n                strategy.execute(payload);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(window.top?.location.href).toBe('/checkout');\n            });\n        });\n\n        describe('if redirect flow is chosen', () => {\n            beforeEach(async () => {\n                await strategy.initialize({\n                    methodId: paymentMethod.id,\n                    paypalexpress: {\n                        useRedirectFlow: true,\n                    },\n                });\n            });\n\n            it('does not start in-context payment flow', async () => {\n                strategy.execute(payload);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalSdk.checkout.startFlow).not.toHaveBeenCalled();\n            });\n\n            it('redirects shopper directly if order submission is successful', async () => {\n                strategy.execute(payload);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(window.top?.location.href).toEqual(orderRedirectUrl);\n            });\n        });\n    });\n\n    describe('#finalize()', () => {\n        beforeEach(async () => {\n            strategy = new PaypalExpressPaymentStrategy(\n                paymentIntegrationService,\n                paypalExpressScriptLoader,\n            );\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getOrder').mockReturnValue(\n                getOrder(),\n            );\n\n            await strategy.initialize({ methodId: paymentMethod.id });\n        });\n\n        it('finalizes order if order is created and payment is acknowledged', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentStatus').mockReturnValue(\n                PaymentStatusTypes.ACKNOWLEDGE,\n            );\n\n            await strategy.finalize();\n\n            expect(paymentIntegrationService.finalizeOrder).toHaveBeenCalled();\n        });\n\n        it('finalizes order if order is created and payment is finalized', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentStatus').mockReturnValue(\n                PaymentStatusTypes.FINALIZE,\n            );\n\n            await strategy.finalize();\n\n            expect(paymentIntegrationService.finalizeOrder).toHaveBeenCalled();\n        });\n\n        it('does not finalize order if order is not created', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getOrder').mockReturnValue(undefined);\n\n            try {\n                await strategy.finalize();\n            } catch (error) {\n                expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n                expect(paymentIntegrationService.finalizeOrder).not.toHaveBeenCalled();\n            }\n        });\n\n        it('does not finalize order if order is not finalized or acknowledged', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getPaymentStatus').mockReturnValue(\n                undefined,\n            );\n\n            try {\n                await strategy.finalize();\n            } catch (error) {\n                expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n                expect(paymentIntegrationService.finalizeOrder).not.toHaveBeenCalled();\n            }\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        describe('if in-context checkout is enabled', () => {\n            it('ends paypal flow', async () => {\n                await strategy.initialize({ methodId: paymentMethod.id });\n                await strategy.deinitialize();\n\n                expect(paypalSdk.checkout.closeFlow).toHaveBeenCalled();\n            });\n\n            it('does not end paypal flow if it is not initialized', async () => {\n                await strategy.deinitialize();\n\n                expect(paypalSdk.checkout.closeFlow).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('if in-context checkout is not enabled', () => {\n            beforeEach(() => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...paymentMethod,\n                    config: { ...paymentMethod.config, merchantId: '' },\n                });\n\n                strategy = new PaypalExpressPaymentStrategy(\n                    paymentIntegrationService,\n                    paypalExpressScriptLoader,\n                );\n            });\n\n            it('does not end paypal flow', async () => {\n                try {\n                    await strategy.initialize({ methodId: paymentMethod.id });\n                } catch {\n                    // Initialization error is expected and intentionally ignored in tests\n                }\n\n                await strategy.deinitialize();\n\n                expect(paypalSdk.checkout.closeFlow).not.toHaveBeenCalled();\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-express-integration/src/paypal-express-payment-strategy.ts",
    "content": "import { noop } from 'lodash';\n\nimport {\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithPaypalExpressPaymentInitializeOptions } from './paypal-express-payment-initialize-options';\nimport PaypalScriptLoader from './paypal-express-script-loader';\nimport { PaymentStatusTypes, PaypalHostWindow, PaypalSDK } from './paypal-express-types';\n\nexport default class PaypalExpressPaymentStrategy implements PaymentStrategy {\n    private paypalSdk?: PaypalSDK;\n    private paymentMethod?: PaymentMethod;\n    private useRedirectFlow = false;\n    private window: PaypalHostWindow;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private scriptLoader: PaypalScriptLoader,\n    ) {\n        this.window = window;\n    }\n\n    async initialize(\n        options: PaymentInitializeOptions & WithPaypalExpressPaymentInitializeOptions,\n    ): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n\n        this.paymentMethod = state.getPaymentMethodOrThrow(options.methodId);\n        this.useRedirectFlow =\n            (options.paypalexpress && options.paypalexpress.useRedirectFlow) === true;\n\n        const merchantId = this.paymentMethod.config.merchantId;\n\n        if (!this.isInContextEnabled() || !merchantId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const paypalSdk = await this.scriptLoader.loadPaypalSDK();\n\n        this.paypalSdk = paypalSdk;\n\n        this.paypalSdk.checkout.setup(merchantId, {\n            button: 'paypal-button',\n            environment: this.paymentMethod.config.testMode ? 'sandbox' : 'production',\n        });\n    }\n\n    deinitialize() {\n        if (this.isInContextEnabled() && this.paypalSdk) {\n            this.paypalSdk.checkout.closeFlow();\n            this.paypalSdk = undefined;\n        }\n\n        return Promise.resolve();\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions) {\n        let state: PaymentIntegrationSelectors;\n        let redirectUrl: string | undefined;\n        const paypal = this.paypalSdk;\n\n        if (this.isAcknowledgedOrFinalized()) {\n            await this.paymentIntegrationService.submitOrder(payload, options);\n\n            return;\n        }\n\n        if (!this.isInContextEnabled() || this.useRedirectFlow) {\n            state = await this.paymentIntegrationService.submitOrder(payload, options);\n            redirectUrl = state.getPaymentRedirectUrl();\n\n            if (redirectUrl && this.window.top) {\n                this.window.top.location.href = redirectUrl;\n            }\n\n            // We need to hold execution so the consumer does not redirect us somewhere else\n            return new Promise<never>(noop);\n        }\n\n        if (!paypal) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        paypal.checkout.initXO();\n\n        try {\n            state = await this.paymentIntegrationService.submitOrder(payload, options);\n        } catch (error) {\n            paypal.checkout.closeFlow();\n\n            return Promise.reject(error);\n        }\n\n        redirectUrl = state.getPaymentRedirectUrl();\n\n        if (redirectUrl) {\n            paypal.checkout.startFlow(redirectUrl);\n        }\n\n        // We need to hold execution so the consumer does not redirect us somewhere else\n        return new Promise<never>(noop);\n    }\n\n    async finalize(options?: PaymentRequestOptions) {\n        const state = this.paymentIntegrationService.getState();\n        const order = state.getOrder();\n\n        if (order && this.isAcknowledgedOrFinalized()) {\n            await this.paymentIntegrationService.finalizeOrder(options);\n\n            return Promise.resolve();\n        }\n\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    private isAcknowledgedOrFinalized(): boolean {\n        const state = this.paymentIntegrationService.getState();\n\n        return (\n            state.getPaymentStatus() === PaymentStatusTypes.ACKNOWLEDGE ||\n            state.getPaymentStatus() === PaymentStatusTypes.FINALIZE\n        );\n    }\n\n    private isInContextEnabled(): boolean {\n        return !!(this.paymentMethod && this.paymentMethod.config.merchantId);\n    }\n}\n"
  },
  {
    "path": "packages/paypal-express-integration/src/paypal-express-script-loader.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { getPaypalExpressMock } from './mocks/paypal-express-mock';\nimport { PaypalHostWindow, PaypalSDK } from './paypal-express-types';\n\nimport { PaypalExpressScriptLoader } from './index';\n\ndescribe('PaypalExpressScriptLoader', () => {\n    let loader: ScriptLoader;\n    let paypalLoader: PaypalExpressScriptLoader;\n    let paypal: PaypalSDK;\n\n    beforeEach(() => {\n        loader = createScriptLoader();\n        paypal = getPaypalExpressMock();\n\n        paypalLoader = new PaypalExpressScriptLoader(loader);\n    });\n\n    it('loads PayPal script without Merchant Id', async () => {\n        jest.spyOn(loader, 'loadScript').mockImplementation(() => {\n            (window as PaypalHostWindow).paypal = paypal;\n\n            return Promise.resolve();\n        });\n\n        const output = await paypalLoader.loadPaypalSDK();\n\n        expect(loader.loadScript).toHaveBeenCalledWith(\n            '//www.paypalobjects.com/api/checkout.min.js',\n            { async: true, attributes: { 'data-merchant-id': '' } },\n        );\n        expect(output).toEqual(paypal);\n    });\n\n    it('loads PayPal script with Merchant Id', async () => {\n        jest.spyOn(loader, 'loadScript').mockImplementation(() => {\n            (window as PaypalHostWindow).paypal = paypal;\n\n            return Promise.resolve();\n        });\n\n        const output = await paypalLoader.loadPaypalSDK('ABC');\n\n        expect(loader.loadScript).toHaveBeenCalledWith(\n            '//www.paypalobjects.com/api/checkout.min.js',\n            { async: true, attributes: { 'data-merchant-id': 'ABC' } },\n        );\n        expect(output).toEqual(paypal);\n    });\n\n    it('throws error if unable to load Paypal script', async () => {\n        const expectedError = new Error('Unable to load script');\n\n        jest.spyOn(loader, 'loadScript').mockImplementation(() => {\n            throw expectedError;\n        });\n\n        try {\n            await paypalLoader.loadPaypalSDK();\n        } catch (error) {\n            expect(error).toEqual(expectedError);\n        }\n    });\n});\n"
  },
  {
    "path": "packages/paypal-express-integration/src/paypal-express-script-loader.ts",
    "content": "import { LoadScriptOptions, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { PaypalHostWindow, PaypalSDK } from './paypal-express-types';\n\nexport default class PaypalScriptLoader {\n    private window: PaypalHostWindow;\n\n    constructor(private scriptLoader: ScriptLoader) {\n        this.window = window;\n    }\n\n    async loadPaypalSDK(merchantId = ''): Promise<PaypalSDK> {\n        const scriptSrc = '//www.paypalobjects.com/api/checkout.min.js';\n        const options: LoadScriptOptions = {\n            async: true,\n            attributes: { 'data-merchant-id': merchantId },\n            ...(merchantId && {\n                attributes: { 'data-merchant-id': merchantId },\n            }),\n        };\n\n        await this.scriptLoader.loadScript(scriptSrc, options);\n\n        if (!this.window.paypal) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.window.paypal;\n    }\n}\n"
  },
  {
    "path": "packages/paypal-express-integration/src/paypal-express-types.ts",
    "content": "export interface PaypalFundingTypeList {\n    CARD?: string;\n    CREDIT?: string;\n    PAYPAL?: string;\n    PAYLATER?: string;\n}\n\nexport interface PaypalButton {\n    render(options: PaypalButtonOptions, container: string): void;\n}\n\nexport interface PaypalButtonRender {\n    render(container: string): void;\n    isEligible(): boolean;\n}\n\nexport interface MessagingRender {\n    render(container: string): void;\n}\n\nexport interface MessagingOptions {\n    amount: number;\n    placement: string;\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<any>;\n    onAuthorize?(data: PaypalAuthorizeData, actions?: PaypalActions): Promise<any>;\n    createOrder?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<any>;\n    onApprove?(data?: PaypalAuthorizeData, actions?: PaypalActions): Promise<any>;\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 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}\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\nexport enum PaymentStatusTypes {\n    ACKNOWLEDGE = 'ACKNOWLEDGE',\n    FINALIZE = 'FINALIZE',\n    INITIALIZE = 'INITIALIZE',\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;\n}\n\nexport interface PaypalActions {\n    payment: PaypalPaymentActions;\n    request: PaypalRequestActions;\n}\n\nexport interface PaypalPaymentActions {\n    get(id: string): Promise<PaypalPaymentPayload>;\n}\n\nexport interface PaypalRequestActions {\n    post(url: string, payload?: object, options?: object): Promise<{ id: string }>;\n}\n\nexport interface PaypalTransaction {\n    amount?: PaypalAmount;\n    payee?: PaypalPayee;\n    description?: string;\n    note_to_payee?: string;\n    item_list?: PaypalItemList;\n}\n\nexport interface PaypalItemList {\n    items?: PaypalItem[];\n    shipping_address?: PaypalAddress;\n}\n\nexport interface PaypalItem {\n    sku?: string;\n    name?: string;\n    description?: string;\n    quantity: string;\n    price: string;\n    currency: string;\n    tax?: string;\n}\n\nexport interface PaypalAmount {\n    currency: string;\n    total: string;\n}\n\nexport interface PaypalPayer {\n    payer_info: object;\n}\n\nexport interface PaypalPayee {\n    email?: string;\n    merchant_id?: string;\n}\n\nexport interface PaypalAddress {\n    line1: string;\n    line2?: string;\n    city?: string;\n    country_code: string;\n    postal_code?: string;\n    state?: string;\n    phone?: string;\n    type?: string;\n}\n\nexport interface PaypalPaymentPayload {\n    payment: PaypalPaymentPayload;\n    payer: PaypalPayer;\n    transactions?: PaypalTransaction[];\n}\n\nexport interface PaypalAuthorizeData {\n    payerId: string;\n    paymentId?: string;\n    billingToken?: string;\n    // the PayPal side of things uses uppercase ID instead of camel case Id\n    payerID?: string;\n    paymentID?: string;\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 PaypalHostWindow extends Window {\n    paypal?: PaypalSDK;\n}\n\nexport interface PaypalSDK {\n    Button: PaypalButton;\n    checkout: PaypalExpressCheckout;\n    FUNDING: PaypalFundingTypeList;\n    Messages(options: MessagingOptions): MessagingRender;\n    Buttons(options: PaypalButtonOptions): PaypalButtonRender;\n}\n"
  },
  {
    "path": "packages/paypal-express-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true\n    }\n}\n"
  },
  {
    "path": "packages/paypal-express-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/paypal-express-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/paypal-pro-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"jest/no-conditional-expect\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {}\n        },\n        {\n            \"files\": [\"*.js\", \"*.jsx\"],\n            \"rules\": {}\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/paypal-pro-integration/README.md",
    "content": "# paypal-pro-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test paypal-pro-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint paypal-pro-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/paypal-pro-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'paypal-pro-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/paypal-pro-integration',\n};\n"
  },
  {
    "path": "packages/paypal-pro-integration/project.json",
    "content": "{\n    \"name\": \"paypal-pro-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/paypal-pro-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/paypal-pro-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/paypal-pro-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/paypal-pro-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-pro-integration/src/create-paypal-pro-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { createPayPalProPaymentStrategy, PaypalProPaymentStrategy } from './index';\n\ndescribe('createPayPalProPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates paypal pro payment strategy', () => {\n        const strategy = createPayPalProPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(PaypalProPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-pro-integration/src/create-paypal-pro-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CardinalClient,\n    CardinalScriptLoader,\n    CardinalThreeDSecureFlow,\n} from '@bigcommerce/checkout-sdk/cardinal-integration';\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PaypalProPaymentStrategy from './paypal-pro-payment-strategy';\n\nconst createPayPalProPaymentStrategy: CheckoutButtonStrategyFactory<PaypalProPaymentStrategy> = (\n    paymentIntegrationService,\n) =>\n    new PaypalProPaymentStrategy(\n        paymentIntegrationService,\n        new CardinalThreeDSecureFlow(\n            paymentIntegrationService,\n            new CardinalClient(new CardinalScriptLoader(getScriptLoader())),\n        ),\n    );\n\nexport default toResolvableModule(createPayPalProPaymentStrategy, [{ id: 'paypal' }]);\n"
  },
  {
    "path": "packages/paypal-pro-integration/src/index.ts",
    "content": "export { default as createPayPalProPaymentStrategy } from './create-paypal-pro-payment-strategy';\nexport { default as PaypalProPaymentStrategy } from './paypal-pro-payment-strategy';\n"
  },
  {
    "path": "packages/paypal-pro-integration/src/paypal-pro-payment-strategy.spec.ts",
    "content": "import { merge } from 'lodash';\n\nimport {\n    CardinalClient,\n    CardinalThreeDSecureFlow,\n} from '@bigcommerce/checkout-sdk/cardinal-integration';\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    OrderRequestBody,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentStatusTypes,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getOrderRequestBody,\n    getPaymentMethod,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport PaypalProPaymentStrategy from './paypal-pro-payment-strategy';\n\ndescribe('PaypalProPaymentStrategy', () => {\n    let strategy: PaypalProPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let cardinalThreeDSecureFlow: CardinalThreeDSecureFlow;\n    let cardinalClient: Pick<\n        CardinalClient,\n        'configure' | 'getThreeDSecureData' | 'load' | 'runBinProcess'\n    >;\n    let paymentMethod: PaymentMethod;\n\n    beforeEach(() => {\n        paymentMethod = {\n            ...getPaymentMethod(),\n            clientToken: 'foo',\n        };\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        cardinalClient = {\n            configure: jest.fn(() => Promise.resolve()),\n            getThreeDSecureData: jest.fn(() => Promise.resolve({ token: 'token' })),\n            load: jest.fn(() => Promise.resolve()),\n            runBinProcess: jest.fn(() => Promise.resolve()),\n        };\n\n        cardinalThreeDSecureFlow = new CardinalThreeDSecureFlow(\n            paymentIntegrationService,\n            cardinalClient as CardinalClient,\n        );\n\n        jest.spyOn(cardinalThreeDSecureFlow, 'prepare').mockReturnValue(Promise.resolve());\n        jest.spyOn(cardinalThreeDSecureFlow, 'start').mockReturnValue(Promise.resolve());\n\n        strategy = new PaypalProPaymentStrategy(\n            paymentIntegrationService,\n            cardinalThreeDSecureFlow,\n        );\n    });\n\n    it('is special type of credit card strategy', () => {\n        expect(strategy).toBeInstanceOf(CreditCardPaymentStrategy);\n    });\n\n    describe('#initialize', () => {\n        it('throws error if payment method is not defined', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => {\n                throw new Error();\n            });\n\n            try {\n                await strategy.initialize({ methodId: paymentMethod.id });\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n            }\n        });\n\n        it('does not prepare 3DS flow if not enabled', async () => {\n            paymentMethod.config.is3dsEnabled = false;\n\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            expect(cardinalThreeDSecureFlow.prepare).not.toHaveBeenCalled();\n        });\n\n        it('prepares 3DS flow if enabled', async () => {\n            paymentMethod.config.is3dsEnabled = true;\n\n            await strategy.initialize({ methodId: paymentMethod.id });\n\n            expect(cardinalThreeDSecureFlow.prepare).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute', () => {\n        let payload: OrderRequestBody;\n\n        beforeEach(() => {\n            payload = merge({}, getOrderRequestBody(), {\n                payment: {\n                    methodId: paymentMethod.id,\n                    gatewayId: paymentMethod.gateway,\n                },\n            });\n        });\n\n        it('throws error if payment method is not defined', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockImplementation(() => {\n                throw new Error();\n            });\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n            }\n        });\n\n        it('does not start 3DS flow if not enabled', async () => {\n            paymentMethod.config.is3dsEnabled = false;\n\n            await strategy.execute(payload);\n\n            expect(cardinalThreeDSecureFlow.start).not.toHaveBeenCalled();\n        });\n\n        it('starts 3DS flow if enabled', async () => {\n            paymentMethod.config.is3dsEnabled = true;\n\n            await strategy.execute(payload);\n\n            expect(cardinalThreeDSecureFlow.start).toHaveBeenCalled();\n        });\n\n        describe('if payment is acknowledged', () => {\n            beforeEach(() => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentStatus',\n                ).mockReturnValue(PaymentStatusTypes.ACKNOWLEDGE);\n\n                jest.clearAllMocks();\n            });\n\n            it('submits order with payment method name', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n                await strategy.execute(payload);\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    {\n                        ...payload,\n                        payment: { methodId: payload.payment && payload.payment.methodId },\n                    },\n                    undefined,\n                );\n            });\n\n            it('does not submit payment separately', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(\n                    jest.fn(),\n                );\n\n                await strategy.execute(payload);\n\n                expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-pro-integration/src/paypal-pro-payment-strategy.ts",
    "content": "import { CardinalThreeDSecureFlow } from '@bigcommerce/checkout-sdk/cardinal-integration';\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStatusTypes,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class PaypalProPaymentStrategy extends CreditCardPaymentStrategy {\n    constructor(\n        protected paymentIntegrationService: PaymentIntegrationService,\n        private threeDSecureFlow: CardinalThreeDSecureFlow,\n    ) {\n        super(paymentIntegrationService);\n    }\n\n    async initialize(options: PaymentInitializeOptions): Promise<void> {\n        await super.initialize(options);\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(options.methodId);\n\n        if (paymentMethod.config.is3dsEnabled) {\n            await this.threeDSecureFlow.prepare(paymentMethod);\n        }\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment: { methodId = '' } = {} } = payload;\n\n        const state = this.paymentIntegrationService.getState();\n\n        if (state.getPaymentStatus() === PaymentStatusTypes.ACKNOWLEDGE) {\n            await this.paymentIntegrationService.submitOrder(\n                {\n                    ...payload,\n                    payment: { methodId },\n                },\n                options,\n            );\n\n            return Promise.resolve();\n        }\n\n        if (state.getPaymentMethodOrThrow(methodId).config.is3dsEnabled) {\n            return this.threeDSecureFlow.start(\n                super.execute.bind(this),\n                payload,\n                options,\n                this._hostedForm,\n            );\n        }\n\n        return super.execute(payload, options);\n    }\n}\n"
  },
  {
    "path": "packages/paypal-pro-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true\n    }\n}\n"
  },
  {
    "path": "packages/paypal-pro-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/paypal-pro-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/paypal-utils/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"jest/valid-expect\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/paypal-utils/README.md",
    "content": "# paypal-utils\n\nThis package contains the useful methods used in BigCommercePayments and PayPalCommerce integrations\nPayPal utils library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test paypal-utils` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint paypal-utils` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/paypal-utils/jest.config.js",
    "content": "module.exports = {\n    displayName: 'paypal-utils',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/paypal-utils',\n};\n"
  },
  {
    "path": "packages/paypal-utils/project.json",
    "content": "{\n    \"name\": \"paypal-utils\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/paypal-utils/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/paypal-utils/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/paypal-utils\"],\n            \"options\": {\n                \"jestConfig\": \"packages/paypal-utils/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/create-paypal-fastlane-utils.spec.ts",
    "content": "import createPaypalFastlaneUtils from './create-paypal-fastlane-utils';\nimport PaypalFastlaneUtils from './paypal-fastlane-utils';\n\ndescribe('createPayPalFastlaneUtils', () => {\n    it('instantiates PayPal Fastlane utils class', () => {\n        const utilsClass = createPaypalFastlaneUtils();\n\n        expect(utilsClass).toBeInstanceOf(PaypalFastlaneUtils);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/create-paypal-fastlane-utils.ts",
    "content": "import PaypalFastlaneUtils from './paypal-fastlane-utils';\n\nexport default function createPaypalFastlaneUtils(): PaypalFastlaneUtils {\n    return new PaypalFastlaneUtils();\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/create-paypal-integration-service.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createPayPalIntegrationService from './create-paypal-integration-service';\nimport PaypalIntegrationService from './paypal-integration-service';\n\ndescribe('createPayPalIntegrationService', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates PayPal integration service', () => {\n        const service = createPayPalIntegrationService(paymentIntegrationService);\n\n        expect(service).toBeInstanceOf(PaypalIntegrationService);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/create-paypal-integration-service.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\n\nimport { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport createPayPalSdkScriptLoader from './create-paypal-sdk-script-loader';\nimport PaypalIntegrationService from './paypal-integration-service';\nimport PaypalRequestSender from './paypal-request-sender';\n\nconst createPayPalIntegrationService = (paymentIntegrationService: PaymentIntegrationService) => {\n    const { getHost } = paymentIntegrationService.getState();\n\n    return new PaypalIntegrationService(\n        createFormPoster(),\n        paymentIntegrationService,\n        new PaypalRequestSender(createRequestSender({ host: getHost() })),\n        createPayPalSdkScriptLoader(),\n    );\n};\n\nexport default createPayPalIntegrationService;\n"
  },
  {
    "path": "packages/paypal-utils/src/create-paypal-sdk-script-loader.spec.ts",
    "content": "import createPayPalSdkScriptLoader from './create-paypal-sdk-script-loader';\nimport PayPalSdkScriptLoader from './paypal-sdk-script-loader';\n\ndescribe('createPayPalSdkScriptLoader', () => {\n    it('instantiates Paypal SDK Script Loader', () => {\n        const paypalSdkScriptLoaderInstance = createPayPalSdkScriptLoader();\n\n        expect(paypalSdkScriptLoaderInstance).toBeInstanceOf(PayPalSdkScriptLoader);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/create-paypal-sdk-script-loader.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport PayPalSdkScriptLoader from './paypal-sdk-script-loader';\n\nexport default function createPayPalSdkScriptLoader(): PayPalSdkScriptLoader {\n    return new PayPalSdkScriptLoader(getScriptLoader());\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/index.ts",
    "content": "export * from './paypal-types';\nexport * from './mocks';\nexport * from './utils';\nexport * from './paypal-commerce-constants';\n\n// TODO: this export should be moved to ./utils/index.ts file\nexport { default as isPaypalProviderError } from './utils/is-paypal-provider-error';\n\n/**\n *\n * PayPal Sdk exports\n *\n * */\nexport { default as createPayPalSdkScriptLoader } from './create-paypal-sdk-script-loader';\nexport { default as PayPalSdkScriptLoader } from './paypal-sdk-script-loader';\n\n/**\n *\n * PayPal Fastlane utils exports\n *\n */\nexport { default as createPayPalFastlaneUtils } from './create-paypal-fastlane-utils';\nexport { default as PayPalFastlaneUtils } from './paypal-fastlane-utils';\n\n/**\n *\n * PayPal Integration Service exports\n *\n */\n\nexport { default as PayPalIntegrationService } from './paypal-integration-service';\nexport { default as createPayPalIntegrationService } from './create-paypal-integration-service';\n\n/**\n *\n * PayPal Button Creation Service\n *\n */\n\nexport { default as PaypalButtonCreationService } from './paypal-button-creation-service';\n"
  },
  {
    "path": "packages/paypal-utils/src/mocks/get-billing-address-from-order-details.mock.ts",
    "content": "import { BillingAddressRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getPayPalOrderDetails from './get-paypal-order-details.mock';\n\nexport default function getBillingAddressFromOrderDetails(): BillingAddressRequestBody {\n    const { payer } = getPayPalOrderDetails();\n\n    return {\n        firstName: payer.name.given_name,\n        lastName: payer.name.surname,\n        email: payer.email_address,\n        phone: payer.phone?.phone_number.national_number || '',\n        company: '',\n        address1: payer.address.address_line_1,\n        address2: payer.address.address_line_2,\n        city: payer.address.admin_area_2,\n        countryCode: payer.address.country_code,\n        postalCode: payer.address.postal_code,\n        stateOrProvince: '',\n        stateOrProvinceCode: payer.address.admin_area_1 || '',\n        customFields: [],\n    };\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/mocks/get-paypal-fastlane-authentication-result.mock.ts",
    "content": "import { PayPalFastlaneAuthenticationState } from '../paypal-types';\n\nexport default function getPayPalFastlaneAuthenticationResultMock() {\n    return {\n        authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n        profileData: {\n            name: {\n                fullName: 'John Doe',\n                firstName: 'John',\n                lastName: 'Doe',\n            },\n            shippingAddress: {\n                address: {\n                    company: 'BigCommerce',\n                    addressLine1: 'addressLine1',\n                    addressLine2: 'addressLine2',\n                    adminArea1: 'addressState',\n                    adminArea2: 'addressCity',\n                    postalCode: '03004',\n                    countryCode: 'US',\n                },\n                name: {\n                    fullName: 'John Doe',\n                    firstName: 'John',\n                    lastName: 'Doe',\n                },\n                phoneNumber: {\n                    nationalNumber: '5551113344',\n                    countryCode: '1',\n                },\n            },\n            card: {\n                id: 'nonce/token',\n                paymentSource: {\n                    card: {\n                        brand: 'Visa',\n                        expiry: '2030-12',\n                        lastDigits: '1111',\n                        name: 'John Doe',\n                        billingAddress: {\n                            firstName: 'John',\n                            lastName: 'Doe',\n                            company: 'BigCommerce',\n                            addressLine1: 'addressLine1',\n                            addressLine2: 'addressLine2',\n                            adminArea1: 'addressState',\n                            adminArea2: 'addressCity',\n                            postalCode: '03004',\n                            countryCode: 'US',\n                            phone: {\n                                nationalNumber: '5551113344',\n                                countryCode: '1',\n                            },\n                        },\n                    },\n                },\n            },\n        },\n    };\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/mocks/get-paypal-fastlane-sdk.mock.ts",
    "content": "import { PayPalFastlaneSdk } from '../paypal-types';\n\nimport getPayPalFastlane from './get-paypal-fastlane.mock';\n\nexport default function getPayPalFastlaneSdk(): PayPalFastlaneSdk {\n    return {\n        ThreeDomainSecureClient: {\n            isEligible: jest.fn(),\n            show: jest.fn(),\n        },\n        Fastlane: () => Promise.resolve(getPayPalFastlane()),\n    };\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/mocks/get-paypal-fastlane.mock.ts",
    "content": "import { PayPalFastlane, PayPalFastlaneCardComponentMethods } from '../paypal-types';\n\nexport default function getPayPalFastlane(): PayPalFastlane {\n    const paypalFastlaneComponentMethods: PayPalFastlaneCardComponentMethods = {\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        getPaymentToken: jest.fn(() => ({\n            id: 'paypal_fastlane_instrument_id_nonce',\n            paymentSource: {\n                card: {\n                    brand: 'Visa',\n                    expiry: '2030-12',\n                    lastDigits: '1111',\n                    name: 'John Doe',\n                    billingAddress: {\n                        firstName: 'John',\n                        lastName: 'Doe',\n                        company: 'BigCommerce',\n                        streetAddress: 'addressLine1',\n                        extendedAddress: 'addressLine2',\n                        locality: 'addressCity',\n                        region: 'addressState',\n                        postalCode: '03004',\n                        countryCodeAlpha2: 'US',\n                    },\n                },\n            },\n        })),\n        render: jest.fn(),\n    };\n\n    return {\n        identity: {\n            lookupCustomerByEmail: jest.fn(),\n            triggerAuthenticationFlow: jest.fn(),\n        },\n        events: {\n            apmSelected: jest.fn(),\n            emailSubmitted: jest.fn(),\n            orderPlaced: jest.fn(),\n        },\n        profile: {\n            showCardSelector: jest.fn(),\n            showShippingAddressSelector: jest.fn(),\n        },\n        // TODO: remove ts-ignore and update test with related type (PAYPAL-4383)\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        FastlaneCardComponent: jest.fn(() => paypalFastlaneComponentMethods),\n    };\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/mocks/get-paypal-integration-service-mock.mock.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport PayPalIntegrationService from '../paypal-integration-service';\nimport PayPalRequestSender from '../paypal-request-sender';\nimport PayPalSdkLoader from '../paypal-sdk-script-loader';\n\nexport default function getPayPalIntegrationServiceMock(): PayPalIntegrationService {\n    const formPoster = createFormPoster();\n    const requestSender = createRequestSender();\n    const paymentIntegrationService = new PaymentIntegrationServiceMock();\n    const paypalRequestSender = new PayPalRequestSender(requestSender);\n    const paypalSdkLoader = new PayPalSdkLoader(getScriptLoader());\n\n    return new PayPalIntegrationService(\n        formPoster,\n        paymentIntegrationService,\n        paypalRequestSender,\n        paypalSdkLoader,\n    );\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/mocks/get-paypal-order-details.mock.ts",
    "content": "import { PayPalOrderDetails } from '../paypal-types';\n\nexport default function getPayPalOrderDetails(): PayPalOrderDetails {\n    return {\n        purchase_units: [\n            {\n                shipping: {\n                    address: {\n                        address_line_1: '2 E 61st St',\n                        address_line_2: 'Apt.1',\n                        admin_area_2: 'New York',\n                        admin_area_1: 'NY',\n                        postal_code: '10065',\n                        country_code: 'US',\n                    },\n                    name: {\n                        full_name: 'Full Name',\n                    },\n                },\n            },\n        ],\n        payer: {\n            name: {\n                given_name: 'John',\n                surname: 'Doe',\n            },\n            email_address: 'john@doe.com',\n            address: {\n                address_line_1: '1 Main St',\n                address_line_2: 'Apt.2',\n                admin_area_2: 'San Jose',\n                admin_area_1: 'CA',\n                postal_code: '95131',\n                country_code: 'US',\n            },\n            phone: {\n                phone_number: {\n                    national_number: '123456789',\n                },\n            },\n        },\n    };\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/mocks/get-paypal-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { PayPalIntent } from '../paypal-types';\n\nexport default function getPayPalPaymentMethod(): PaymentMethod {\n    return {\n        id: 'paypalcommerce',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        clientToken: 'asdcvY7XFSQasd',\n        config: {\n            testMode: true,\n            merchantId: 'JTS4DY7XFSQZE',\n        },\n        initializationData: {\n            buttonStyle: {\n                height: 55,\n                color: 'black',\n                label: 'pay',\n            },\n            paymentButtonStyles: {\n                cartButtonStyles: {\n                    color: 'black',\n                    label: 'checkout',\n                },\n                pdpButtonStyles: {\n                    color: 'black',\n                    label: 'checkout',\n                },\n                checkoutTopButtonStyles: {\n                    color: 'silver',\n                    label: 'checkout',\n                },\n                checkoutPaymentButtonStyles: {\n                    color: 'black',\n                    label: 'pay',\n                    height: 55,\n                },\n            },\n            availableAlternativePaymentMethods: [],\n            clientId: 'abc',\n            merchantId: 'JTS4DY7XFSQZE',\n            orderId: '3U4171152W1482642',\n            attributionId: '1123JLKJASD12',\n            intent: PayPalIntent.CAPTURE,\n            isAcceleratedCheckoutEnabled: false,\n            isPayPalCommerceAnalyticsV2Enabled: false,\n            isPayPalCreditAvailable: false,\n            isVenmoEnabled: false,\n            isDeveloperModeApplicable: false,\n            shouldRenderFields: true,\n            shouldRunAcceleratedCheckout: false,\n            isHostedCheckoutEnabled: false,\n            paypalBNPLConfiguration: [\n                {\n                    id: 'checkout',\n                    name: 'Checkout page',\n                    status: true,\n                    styles: {\n                        layout: 'text',\n                        'logo-type': 'alternative',\n                        'text-color': 'white',\n                        'text-size': '10',\n                    },\n                },\n                {\n                    id: 'cart',\n                    name: 'Cart page',\n                    status: true,\n                    styles: {\n                        layout: 'text',\n                        'logo-type': 'alternative',\n                        'logo-position': 'right',\n                        'text-color': 'white',\n                        'text-size': '10',\n                    },\n                },\n            ],\n        },\n        type: 'PAYMENT_TYPE_API',\n        skipRedirectConfirmationAlert: false,\n    };\n}\n\nexport function getPayPalAcceleratedCheckoutPaymentMethod(): PaymentMethod {\n    const paypalDefaultPaymentMethod = getPayPalPaymentMethod();\n\n    return {\n        ...paypalDefaultPaymentMethod,\n        id: 'paypalcommerceacceleratedcheckout',\n        initializationData: {\n            ...paypalDefaultPaymentMethod.initializationData,\n            isAcceleratedCheckoutEnabled: true,\n            shouldRunAcceleratedCheckout: true,\n            isPayPalCommerceAnalyticsV2Enabled: true,\n        },\n    };\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/mocks/get-paypal-ratepay-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function getPayPalRatePayPaymentMethod(): PaymentMethod {\n    return {\n        id: 'ratepay',\n        logoUrl: '',\n        method: 'paypal',\n        supportedCards: [],\n        clientToken: 'asdcvY7XFSQasd',\n        config: {\n            testMode: true,\n            merchantId: 'JTS4DY7XFSQZE',\n        },\n        initializationData: {\n            clientId: 'abc',\n            merchantId: 'JTS4DY7XFSQZE',\n            orderId: '3U4171152W1482642',\n            attributionId: '1123JLKJASD12',\n            intent: 'capture',\n        },\n        skipRedirectConfirmationAlert: false,\n        type: 'PAYMENT_TYPE_API',\n    };\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/mocks/get-paypal-sdk.mock.ts",
    "content": "import { PayPalSDK } from '../paypal-types';\n\nconst cardFieldMethodsMock = {\n    render: jest.fn(),\n    clear: jest.fn(),\n    close: jest.fn(),\n    removeClass: jest.fn(),\n};\n\nexport default function getPayPalSDKMock(): PayPalSDK {\n    return {\n        Messages: () => ({\n            render: jest.fn(),\n        }),\n        PaymentFields: () => ({\n            render: jest.fn(),\n        }),\n        FUNDING: {\n            CARD: 'card',\n            PAYPAL: 'paypal',\n            CREDIT: 'credit',\n            PAYLATER: 'paylater',\n            OXXO: 'oxxo',\n            SEPA: 'sepa',\n            VENMO: 'venmo',\n        },\n        Buttons: () => ({\n            render: jest.fn(),\n            close: jest.fn(),\n            isEligible: jest.fn(() => true),\n        }),\n        CardFields: () =>\n            Promise.resolve({\n                isEligible: () => true,\n                CVVField: jest.fn().mockReturnValue(cardFieldMethodsMock),\n                ExpiryField: jest.fn().mockReturnValue(cardFieldMethodsMock),\n                NameField: jest.fn().mockReturnValue(cardFieldMethodsMock),\n                NumberField: jest.fn().mockReturnValue(cardFieldMethodsMock),\n                submit: jest.fn().mockReturnValue(Promise.resolve()),\n                getState: jest\n                    .fn()\n                    .mockReturnValue(Promise.resolve({ fields: { number: { isValid: true } } })),\n            }),\n        HostedFields: {\n            isEligible: () => true,\n            render: jest.fn(),\n        },\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        Legal: () => ({\n            render: jest.fn(),\n        }),\n    };\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/mocks/get-shipping-address-from-order-details.mock.ts",
    "content": "import { BillingAddressRequestBody } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport getPayPalOrderDetails from './get-paypal-order-details.mock';\n\nexport default function getShippingAddressFromOrderDetails(): BillingAddressRequestBody {\n    const orderDetails = getPayPalOrderDetails();\n\n    const { payer, purchase_units } = orderDetails;\n    const {\n        address,\n        name: { full_name },\n    } = purchase_units[0].shipping;\n    const [firstName, ...lastName] = full_name.split(' ');\n\n    return {\n        firstName,\n        lastName: lastName.join(' '),\n        email: payer.email_address,\n        phone: '',\n        company: '',\n        address1: address.address_line_1,\n        address2: address.address_line_2,\n        city: address.admin_area_2,\n        countryCode: address.country_code,\n        postalCode: address.postal_code,\n        stateOrProvince: '',\n        stateOrProvinceCode: address.admin_area_1 || '',\n        customFields: [],\n    };\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/mocks/index.ts",
    "content": "export {\n    default as getPayPalPaymentMethod,\n    getPayPalAcceleratedCheckoutPaymentMethod,\n} from './get-paypal-payment-method.mock';\nexport { default as getPayPalFastlaneSdk } from './get-paypal-fastlane-sdk.mock';\nexport { default as getPayPalFastlane } from './get-paypal-fastlane.mock';\nexport { default as getPayPalFastlaneAuthenticationResultMock } from './get-paypal-fastlane-authentication-result.mock';\nexport { default as getBillingAddressFromOrderDetails } from './get-billing-address-from-order-details.mock';\nexport { default as getPayPalIntegrationServiceMock } from './get-paypal-integration-service-mock.mock';\nexport { default as getPayPalOrderDetails } from './get-paypal-order-details.mock';\nexport { default as getPayPalRatePayPaymentMethod } from './get-paypal-ratepay-payment-method.mock';\nexport { default as getPayPalSDKMock } from './get-paypal-sdk.mock';\nexport { default as getShippingAddressFromOrderDetails } from './get-shipping-address-from-order-details.mock';\n"
  },
  {
    "path": "packages/paypal-utils/src/paypal-button-creation-service.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\nimport { EventEmitter } from 'events';\n\nimport {\n    Cart,\n    InvalidArgumentError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getConsignment,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    getBillingAddressFromOrderDetails,\n    getPayPalOrderDetails,\n    getPayPalSDKMock,\n    getShippingAddressFromOrderDetails,\n} from './mocks';\nimport PaypalButtonCreationService from './paypal-button-creation-service';\nimport PayPalIntegrationService from './paypal-integration-service';\nimport PayPalRequestSender from './paypal-request-sender';\nimport PayPalSdkLoader from './paypal-sdk-script-loader';\nimport { PayPalButtonsOptions, PayPalSDK, StyleButtonColor } from './paypal-types';\n\ndescribe('PayPalButtonCreationService', () => {\n    let buyNowCart: Cart;\n    let formPoster: FormPoster;\n    let requestSender: RequestSender;\n    let eventEmitter: EventEmitter;\n    let paypalRequestSender: PayPalRequestSender;\n    let paypalSdkLoader: PayPalSdkLoader;\n    let paypalButtonCreationService: PaypalButtonCreationService;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paypalIntegrationService: PayPalIntegrationService;\n    let paypalSdk: PayPalSDK;\n\n    const paypalOrderId = 'ORDER_ID';\n    const defaultMethodId = 'paypalcommercecredit';\n\n    const paypalShippingAddressPayloadMock = {\n        city: 'New York',\n        countryCode: 'US',\n        postalCode: '07564',\n        state: 'New York',\n    };\n\n    const paypalSelectedShippingOptionPayloadMock = {\n        amount: {\n            currency_code: 'USD',\n            value: '100',\n        },\n        id: '1',\n        label: 'Free shipping',\n        selected: true,\n        type: 'type_shipping',\n    };\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        buyNowCart = getBuyNowCart();\n\n        formPoster = createFormPoster();\n        eventEmitter = new EventEmitter();\n        requestSender = createRequestSender();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paypalRequestSender = new PayPalRequestSender(requestSender);\n        paypalSdkLoader = new PayPalSdkLoader(getScriptLoader());\n\n        paypalSdk = getPayPalSDKMock();\n\n        paypalIntegrationService = new PayPalIntegrationService(\n            formPoster,\n            paymentIntegrationService,\n            paypalRequestSender,\n            paypalSdkLoader,\n        );\n\n        jest.spyOn(paypalIntegrationService, 'getPayPalSdkOrThrow').mockReturnValue(paypalSdk);\n        jest.spyOn(paypalIntegrationService, 'createOrder');\n        jest.spyOn(paypalIntegrationService, 'tokenizePayment').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress').mockImplementation(jest.fn());\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockImplementation(\n            jest.fn(),\n        );\n        jest.spyOn(paymentIntegrationService, 'selectShippingOption').mockImplementation(jest.fn());\n\n        jest.spyOn(paypalIntegrationService, 'getBillingAddressFromOrderDetails').mockReturnValue(\n            getBillingAddressFromOrderDetails(),\n        );\n        jest.spyOn(paypalIntegrationService, 'getShippingAddressFromOrderDetails').mockReturnValue(\n            getShippingAddressFromOrderDetails(),\n        );\n        jest.spyOn(paypalIntegrationService, 'updateOrder').mockImplementation(jest.fn());\n        jest.spyOn(paypalIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n        jest.spyOn(paypalIntegrationService, 'getShippingOptionOrThrow').mockReturnValue(\n            getShippingOption(),\n        );\n        jest.spyOn(paypalIntegrationService, 'createBuyNowCartOrThrow').mockReturnValue(\n            Promise.resolve(buyNowCart),\n        );\n\n        paypalButtonCreationService = new PaypalButtonCreationService(\n            paymentIntegrationService,\n            paypalIntegrationService,\n        );\n\n        jest.spyOn(paypalSdk, 'Buttons').mockImplementation((options: PayPalButtonsOptions) => {\n            eventEmitter.on('createOrder', () => {\n                if (options.createOrder) {\n                    options.createOrder();\n                }\n            });\n\n            eventEmitter.on(\n                'onClick',\n                // eslint-disable-next-line @typescript-eslint/no-misused-promises\n                async (jestSuccessExpectationsCallback, jestFailureExpectationsCallback) => {\n                    try {\n                        if (options.onClick) {\n                            await options.onClick(\n                                { fundingSource: 'PAYLATER' },\n                                {\n                                    reject: jest.fn(),\n                                    resolve: jest.fn(),\n                                },\n                            );\n\n                            if (\n                                jestSuccessExpectationsCallback &&\n                                typeof jestSuccessExpectationsCallback === 'function'\n                            ) {\n                                jestSuccessExpectationsCallback();\n                            }\n                        }\n                    } catch (error) {\n                        if (\n                            jestFailureExpectationsCallback &&\n                            typeof jestFailureExpectationsCallback === 'function'\n                        ) {\n                            jestFailureExpectationsCallback(error);\n                        }\n                    }\n                },\n            );\n\n            eventEmitter.on('onApprove', () => {\n                if (options.onApprove) {\n                    options.onApprove(\n                        { orderID: paypalOrderId },\n                        {\n                            order: {\n                                get: jest.fn(),\n                            },\n                        },\n                    );\n                }\n            });\n\n            eventEmitter.on('onCancel', () => {\n                if (options.onCancel) {\n                    options.onCancel();\n                }\n            });\n\n            eventEmitter.on('onShippingAddressChange', () => {\n                if (options.onShippingAddressChange) {\n                    options.onShippingAddressChange({\n                        orderId: paypalOrderId,\n                        shippingAddress: paypalShippingAddressPayloadMock,\n                    });\n                }\n            });\n\n            eventEmitter.on('onShippingOptionsChange', () => {\n                if (options.onShippingOptionsChange) {\n                    options.onShippingOptionsChange({\n                        orderId: paypalOrderId,\n                        selectedShippingOption: paypalSelectedShippingOptionPayloadMock,\n                    });\n                }\n            });\n\n            return {\n                isEligible: jest.fn(() => true),\n                render: jest.fn(),\n                close: jest.fn(),\n            };\n        });\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('create paypal button with required options', () => {\n        paypalButtonCreationService.createPayPalButton('paypalcommerce', 'paypalcommercecredit', {\n            fundingSource: paypalSdk.FUNDING.PAYLATER,\n        });\n\n        expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n            fundingSource: paypalSdk.FUNDING.PAYLATER,\n            createOrder: expect.any(Function),\n            onApprove: expect.any(Function),\n            style: {\n                height: 40,\n            },\n        });\n    });\n\n    it('create PayPal button with the option to set the style', () => {\n        const styleOption = {\n            height: 45,\n            color: StyleButtonColor.gold,\n        };\n\n        paypalButtonCreationService.createPayPalButton('paypalcommerce', 'paypalcommercecredit', {\n            fundingSource: paypalSdk.FUNDING.PAYLATER,\n            style: styleOption,\n        });\n\n        expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n            fundingSource: paypalSdk.FUNDING.PAYLATER,\n            style: styleOption,\n            createOrder: expect.any(Function),\n            onApprove: expect.any(Function),\n        });\n    });\n\n    it('create PayPal button with onClick callback support', async () => {\n        const onClick = jest.fn();\n\n        paypalButtonCreationService.createPayPalButton('paypalcommerce', 'paypalcommercecredit', {\n            fundingSource: paypalSdk.FUNDING.PAYLATER,\n            onClick,\n        });\n\n        eventEmitter.emit('onClick');\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(onClick).toHaveBeenCalled();\n\n        expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n            fundingSource: paypalSdk.FUNDING.PAYLATER,\n            onClick,\n            createOrder: expect.any(Function),\n            onApprove: expect.any(Function),\n            style: {\n                height: 40,\n            },\n        });\n    });\n\n    it('create PayPal button with onCancel callback support', async () => {\n        const onCancel = jest.fn();\n\n        paypalButtonCreationService.createPayPalButton('paypalcommerce', 'paypalcommercecredit', {\n            fundingSource: paypalSdk.FUNDING.PAYLATER,\n            onCancel,\n        });\n\n        eventEmitter.emit('onCancel');\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(onCancel).toHaveBeenCalled();\n\n        expect(paypalSdk.Buttons).toHaveBeenCalledWith({\n            fundingSource: paypalSdk.FUNDING.PAYLATER,\n            onCancel,\n            createOrder: expect.any(Function),\n            onApprove: expect.any(Function),\n            style: {\n                height: 40,\n            },\n        });\n    });\n\n    it('creates paypal order', async () => {\n        paypalButtonCreationService.createPayPalButton('paypalcommerce', 'paypalcommercecredit', {\n            fundingSource: paypalSdk.FUNDING.PAYLATER,\n        });\n\n        eventEmitter.emit('createOrder');\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(paypalIntegrationService.createOrder).toHaveBeenCalledWith('paypalcommerce');\n    });\n\n    it('creates paypal order if buy now initialisation options is passed', async () => {\n        paypalButtonCreationService.createPayPalButton(\n            'paypalcommerce',\n            'paypalcommercecredit',\n            {\n                fundingSource: paypalSdk.FUNDING.PAYLATER,\n            },\n            {\n                getBuyNowCartRequestBody: jest.fn(),\n            },\n        );\n\n        eventEmitter.emit('createOrder');\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(paypalIntegrationService.createBuyNowCartOrThrow).toHaveBeenCalled();\n        expect(paymentIntegrationService.loadCheckout).toHaveBeenCalledWith(buyNowCart.id);\n        expect(paypalIntegrationService.createOrder).toHaveBeenCalledWith('paypalcommerce');\n    });\n\n    it('throw an error if fundingSource is not valid', () => {\n        const onCancel = jest.fn();\n\n        try {\n            paypalButtonCreationService.createPayPalButton(\n                'paypalcommerce',\n                'paypalcommercecredit',\n                {\n                    fundingSource: 'not-valid-funding-source',\n                    onCancel,\n                },\n            );\n        } catch (e) {\n            expect(e).toBeInstanceOf(InvalidArgumentError);\n        }\n    });\n\n    describe('create PayPal button with onApprove callback support', () => {\n        describe('default flow', () => {\n            it('tokenizes payment on paypal approve', async () => {\n                paypalButtonCreationService.createPayPalButton(\n                    'paypalcommerce',\n                    'paypalcommercecredit',\n                    {\n                        fundingSource: paypalSdk.FUNDING.PAYLATER,\n                    },\n                );\n\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalIntegrationService.tokenizePayment).toHaveBeenCalledWith(\n                    defaultMethodId,\n                    paypalOrderId,\n                );\n            });\n        });\n\n        describe('when isHostedCheckoutEnabled is true', () => {\n            const paypalOrderDetails = getPayPalOrderDetails();\n            const getMock = jest.fn(() => Promise.resolve(paypalOrderDetails));\n            const onPaymentComplete = jest.fn();\n\n            beforeEach(() => {\n                jest.spyOn(paypalSdk, 'Buttons').mockImplementation(\n                    (options: PayPalButtonsOptions) => {\n                        eventEmitter.on('onApprove', () => {\n                            if (options.onApprove) {\n                                options.onApprove(\n                                    { orderID: paypalOrderId },\n                                    {\n                                        order: {\n                                            get: getMock,\n                                        },\n                                    },\n                                );\n                            }\n                        });\n\n                        return {\n                            render: jest.fn(),\n                            isEligible: jest.fn(() => true),\n                            close: jest.fn(),\n                        };\n                    },\n                );\n\n                paypalButtonCreationService.createPayPalButton(\n                    'paypalcommerce',\n                    'paypalcommercecredit',\n                    {\n                        fundingSource: paypalSdk.FUNDING.PAYLATER,\n                        onPaymentComplete,\n                        isHostedCheckoutEnabled: true,\n                    },\n                );\n            });\n\n            it('call onPaymentComplete when order is completed', async () => {\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalIntegrationService.submitPayment).toHaveBeenCalled();\n                expect(onPaymentComplete).toHaveBeenCalled();\n            });\n\n            it('takes order details data from paypal', async () => {\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(getMock).toHaveBeenCalled();\n            });\n\n            it('updates billing address with valid customers data', async () => {\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    paypalIntegrationService.getBillingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getPayPalOrderDetails());\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                    getBillingAddressFromOrderDetails(),\n                );\n            });\n\n            it('updates shipping address with valid customers data if physical items are available in the cart', async () => {\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(\n                    paypalIntegrationService.getShippingAddressFromOrderDetails,\n                ).toHaveBeenCalledWith(getPayPalOrderDetails());\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(\n                    getShippingAddressFromOrderDetails(),\n                );\n            });\n\n            it('submits BC order with provided methodId', async () => {\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n                    {},\n                    {\n                        params: {\n                            methodId: 'paypalcommercecredit',\n                        },\n                    },\n                );\n            });\n\n            it('submits BC payment to update BC order data', async () => {\n                eventEmitter.emit('onApprove');\n\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paypalIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    defaultMethodId,\n                    paypalOrderId,\n                );\n            });\n        });\n    });\n\n    describe('create PayPal button with onShippingAddressChange callback support', () => {\n        it('updates billing and shipping address with data returned from PayPal', async () => {\n            const address = {\n                firstName: '',\n                lastName: '',\n                email: '',\n                phone: '',\n                company: '',\n                address1: '',\n                address2: '',\n                city: paypalShippingAddressPayloadMock.city,\n                countryCode: paypalShippingAddressPayloadMock.countryCode,\n                postalCode: paypalShippingAddressPayloadMock.postalCode,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalShippingAddressPayloadMock.state,\n                customFields: [],\n            };\n\n            jest.spyOn(paypalIntegrationService, 'getAddress').mockReturnValue(address);\n\n            paypalButtonCreationService.createPayPalButton(\n                'paypalcommerce',\n                'paypalcommercecredit',\n                {\n                    fundingSource: paypalSdk.FUNDING.PAYLATER,\n                    isHostedCheckoutEnabled: true,\n                },\n            );\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(address);\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith(address);\n        });\n\n        it('selects shipping option after address update', async () => {\n            paypalButtonCreationService.createPayPalButton(\n                'paypalcommerce',\n                'paypalcommercecredit',\n                {\n                    fundingSource: paypalSdk.FUNDING.PAYLATER,\n                    isHostedCheckoutEnabled: true,\n                },\n            );\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.getShippingOptionOrThrow).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order after shipping option selection', async () => {\n            const consignment = getConsignment();\n\n            // INFO: lets imagine that it is a state that we get after consignmentActionCreator.selectShippingOption call\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getConsignmentsOrThrow',\n            ).mockReturnValue([consignment]);\n\n            paypalButtonCreationService.createPayPalButton(\n                'paypalcommerce',\n                'paypalcommercecredit',\n                {\n                    fundingSource: paypalSdk.FUNDING.PAYLATER,\n                    isHostedCheckoutEnabled: true,\n                },\n            );\n\n            eventEmitter.emit('onShippingAddressChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.updateOrder).toHaveBeenCalledWith('paypalcommerce');\n        });\n    });\n\n    describe('#onShippingOptionsChange button callback', () => {\n        it('selects shipping option', async () => {\n            paypalButtonCreationService.createPayPalButton(\n                'paypalcommerce',\n                'paypalcommercecredit',\n                {\n                    fundingSource: paypalSdk.FUNDING.PAYLATER,\n                    isHostedCheckoutEnabled: true,\n                },\n            );\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.getShippingOptionOrThrow).toHaveBeenCalled();\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalledWith(\n                getShippingOption().id,\n            );\n        });\n\n        it('updates PayPal order', async () => {\n            paypalButtonCreationService.createPayPalButton(\n                'paypalcommerce',\n                'paypalcommercecredit',\n                {\n                    fundingSource: paypalSdk.FUNDING.PAYLATER,\n                    isHostedCheckoutEnabled: true,\n                },\n            );\n\n            eventEmitter.emit('onShippingOptionsChange');\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paypalIntegrationService.updateOrder).toHaveBeenCalledWith('paypalcommerce');\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/paypal-button-creation-service.ts",
    "content": "import {\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalIntegrationService from './paypal-integration-service';\nimport {\n    ApproveCallbackActions,\n    ApproveCallbackPayload,\n    PayPalButtonOptions,\n    PayPalButtons,\n    PayPalBuyNowInitializeOptions,\n    ShippingAddressChangeCallbackPayload,\n    ShippingOptionChangeCallbackPayload,\n} from './paypal-types';\n\nclass PaypalButtonCreationService {\n    private onError?: PayPalButtonOptions['onError'];\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalIntegrationService: PayPalIntegrationService,\n    ) {}\n\n    createPayPalButton(\n        providerId: string,\n        methodId: string,\n        buttonOptions: PayPalButtonOptions,\n        buyNowInitializeOptions?: PayPalBuyNowInitializeOptions,\n    ): PayPalButtons {\n        const {\n            style,\n            fundingSource,\n            isHostedCheckoutEnabled,\n            isServerSideShippingCallbacksEnabled,\n            onClick,\n            onCancel,\n            onPaymentComplete,\n            onError,\n        } = buttonOptions;\n\n        this.onError = onError;\n\n        const paypalSdk = this.paypalIntegrationService.getPayPalSdkOrThrow();\n        const isAvailableFundingSource = Object.values(paypalSdk.FUNDING).includes(fundingSource);\n\n        if (!isAvailableFundingSource) {\n            throw new InvalidArgumentError(\n                `Unable to initialize PayPal button because \"fundingSource\" argument is not valid funding source.`,\n            );\n        }\n\n        const hostedCheckoutCallbacks = {\n            ...(!isServerSideShippingCallbacksEnabled && {\n                onShippingAddressChange: (data: ShippingAddressChangeCallbackPayload) =>\n                    this.onShippingAddressChange(data, providerId),\n                onShippingOptionsChange: (data: ShippingOptionChangeCallbackPayload) =>\n                    this.onShippingOptionsChange(data, providerId),\n            }),\n            onApprove: (data: ApproveCallbackPayload, actions: ApproveCallbackActions) =>\n                this.onHostedCheckoutApprove(\n                    data,\n                    actions,\n                    methodId,\n                    providerId,\n                    onPaymentComplete,\n                    isServerSideShippingCallbacksEnabled,\n                ),\n        };\n\n        return paypalSdk.Buttons({\n            fundingSource,\n            style: this.paypalIntegrationService.getValidButtonStyle(style),\n            createOrder: async () => {\n                if (buyNowInitializeOptions) {\n                    const buyNowCart = await this.paypalIntegrationService.createBuyNowCartOrThrow(\n                        buyNowInitializeOptions,\n                    );\n\n                    await this.paymentIntegrationService.loadCheckout(buyNowCart.id);\n                }\n\n                return this.paypalIntegrationService.createOrder(providerId);\n            },\n            onApprove: ({ orderID }: ApproveCallbackPayload) =>\n                this.paypalIntegrationService.tokenizePayment(methodId, orderID),\n            ...(onClick ? { onClick } : {}),\n            ...(onCancel ? { onCancel } : {}),\n            ...(isHostedCheckoutEnabled && hostedCheckoutCallbacks),\n        });\n    }\n\n    private async onHostedCheckoutApprove(\n        data: ApproveCallbackPayload,\n        actions: ApproveCallbackActions,\n        methodId: string,\n        providerId: string,\n        onComplete?: () => void,\n        isServerSideShippingCallbacksEnabled?: boolean,\n    ): Promise<void> {\n        if (!data.orderID) {\n            throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n\n        try {\n            const hasPhysicalItems = cart.lineItems.physicalItems.length > 0;\n\n            if (!isServerSideShippingCallbacksEnabled) {\n                const orderDetails = await actions.order.get();\n\n                const billingAddress =\n                    this.paypalIntegrationService.getBillingAddressFromOrderDetails(orderDetails);\n\n                await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n\n                if (hasPhysicalItems) {\n                    const shippingAddress =\n                        this.paypalIntegrationService.getShippingAddressFromOrderDetails(\n                            orderDetails,\n                        );\n\n                    await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n                }\n            }\n\n            if (hasPhysicalItems) {\n                await this.paypalIntegrationService.updateOrder(\n                    providerId,\n                    undefined,\n                    undefined,\n                    isServerSideShippingCallbacksEnabled,\n                );\n            }\n\n            if (isServerSideShippingCallbacksEnabled) {\n                await this.paymentIntegrationService.loadCheckout();\n            }\n\n            await this.paymentIntegrationService.submitOrder({}, { params: { methodId } });\n\n            await this.paypalIntegrationService.submitPayment(methodId, data.orderID);\n\n            if (onComplete && typeof onComplete === 'function') {\n                onComplete();\n            }\n        } catch (error) {\n            this.handleError(error);\n        }\n    }\n\n    private async onShippingAddressChange(\n        data: ShippingAddressChangeCallbackPayload,\n        providerId: string,\n    ): Promise<void> {\n        const address = this.paypalIntegrationService.getAddress({\n            city: data.shippingAddress.city,\n            countryCode: data.shippingAddress.countryCode,\n            postalCode: data.shippingAddress.postalCode,\n            stateOrProvinceCode: data.shippingAddress.state,\n        });\n\n        try {\n            // Info: we use the same address to fill billing and shipping addresses to have valid quota on BE for order updating process\n            // on this stage we don't have access to valid customer's address accept shipping data\n            await this.paymentIntegrationService.updateBillingAddress(address);\n            await this.paymentIntegrationService.updateShippingAddress(address);\n\n            const shippingOption = this.paypalIntegrationService.getShippingOptionOrThrow();\n\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.paypalIntegrationService.updateOrder(providerId);\n        } catch (error) {\n            this.handleError(error);\n        }\n    }\n\n    private async onShippingOptionsChange(\n        data: ShippingOptionChangeCallbackPayload,\n        providerId: string,\n    ): Promise<void> {\n        const shippingOption = this.paypalIntegrationService.getShippingOptionOrThrow(\n            data.selectedShippingOption.id,\n        );\n\n        try {\n            await this.paymentIntegrationService.selectShippingOption(shippingOption.id);\n            await this.paypalIntegrationService.updateOrder(providerId);\n        } catch (error) {\n            this.handleError(error);\n        }\n    }\n\n    private handleError(error: unknown) {\n        if (typeof this.onError === 'function') {\n            this.onError(error);\n        } else {\n            throw error;\n        }\n    }\n}\n\nexport default PaypalButtonCreationService;\n"
  },
  {
    "path": "packages/paypal-utils/src/paypal-commerce-constants.ts",
    "content": "export const LOADING_INDICATOR_STYLES = {\n    'background-color': 'rgba(0, 0, 0, 0.4)',\n    'z-index': '1000',\n};\n\n/**\n * PayPal SDK supported locales\n * https://developer.paypal.com/sdk/js/configuration/#link-locale\n */\nexport const PAYPAL_SDK_SUPPORTED_LOCALES = [\n    'ar_BH',\n    'ar_DZ',\n    'ar_EG',\n    'ar_JO',\n    'ar_KW',\n    'ar_MA',\n    'ar_OM',\n    'ar_QA',\n    'ar_SA',\n    'ar_TN',\n    'ar_YE',\n    'ar_AE',\n    'bg_BG',\n    'cs_CZ',\n    'da_DK',\n    'da_FO',\n    'da_GL',\n    'de_AT',\n    'de_CH',\n    'de_DE',\n    'de_LU',\n    'el_GR',\n    'en_AD',\n    'en_AE',\n    'en_AG',\n    'en_AI',\n    'en_AL',\n    'en_AM',\n    'en_AN',\n    'en_AO',\n    'en_AT',\n    'en_AU',\n    'en_AW',\n    'en_AZ',\n    'en_BB',\n    'en_BE',\n    'en_BH',\n    'en_BJ',\n    'en_BM',\n    'en_BN',\n    'en_BS',\n    'en_BT',\n    'en_BW',\n    'en_BY',\n    'en_BZ',\n    'en_C2',\n    'en_CA',\n    'en_CD',\n    'en_CG',\n    'en_CH',\n    'en_CI',\n    'en_CK',\n    'en_CL',\n    'en_CM',\n    'en_CN',\n    'en_CO',\n    'en_CR',\n    'en_CV',\n    'en_CY',\n    'en_CZ',\n    'en_DE',\n    'en_DJ',\n    'en_DK',\n    'en_DM',\n    'en_DO',\n    'en_DZ',\n    'en_EC',\n    'en_EE',\n    'en_EG',\n    'en_ER',\n    'en_ES',\n    'en_ET',\n    'en_FI',\n    'en_FJ',\n    'en_FK',\n    'en_FM',\n    'en_FO',\n    'en_FR',\n    'en_GA',\n    'en_GB',\n    'en_GD',\n    'en_GE',\n    'en_GF',\n    'en_GI',\n    'en_GL',\n    'en_GM',\n    'en_GN',\n    'en_GP',\n    'en_GR',\n    'en_GT',\n    'en_GW',\n    'en_GY',\n    'en_HK',\n    'en_HN',\n    'en_HR',\n    'en_HU',\n    'en_ID',\n    'en_IE',\n    'en_IL',\n    'en_IN',\n    'en_IS',\n    'en_IT',\n    'en_JM',\n    'en_JO',\n    'en_JP',\n    'en_KE',\n    'en_KG',\n    'en_KH',\n    'en_KI',\n    'en_KM',\n    'en_KN',\n    'en_KR',\n    'en_KW',\n    'en_KY',\n    'en_KZ',\n    'en_LA',\n    'en_LC',\n    'en_LI',\n    'en_LK',\n    'en_LS',\n    'en_LT',\n    'en_LU',\n    'en_LV',\n    'en_MA',\n    'en_MC',\n    'en_MD',\n    'en_ME',\n    'en_MG',\n    'en_MH',\n    'en_MK',\n    'en_ML',\n    'en_MN',\n    'en_MQ',\n    'en_MR',\n    'en_MS',\n    'en_MT',\n    'en_MU',\n    'en_MV',\n    'en_MW',\n    'en_MY',\n    'en_MZ',\n    'en_NA',\n    'en_NC',\n    'en_NE',\n    'en_NF',\n    'en_NG',\n    'en_NI',\n    'en_NL',\n    'en_NO',\n    'en_NP',\n    'en_NR',\n    'en_NU',\n    'en_NZ',\n    'en_OM',\n    'en_PA',\n    'en_PE',\n    'en_PF',\n    'en_PG',\n    'en_PH',\n    'en_PL',\n    'en_PM',\n    'en_PN',\n    'en_PT',\n    'en_PW',\n    'en_PY',\n    'en_QA',\n    'en_RE',\n    'en_RO',\n    'en_RS',\n    'en_RU',\n    'en_RW',\n    'en_SA',\n    'en_SB',\n    'en_SC',\n    'en_SE',\n    'en_SG',\n    'en_SH',\n    'en_SI',\n    'en_SJ',\n    'en_SK',\n    'en_SL',\n    'en_SM',\n    'en_SN',\n    'en_SO',\n    'en_SR',\n    'en_ST',\n    'en_SV',\n    'en_SZ',\n    'en_TC',\n    'en_TD',\n    'en_TG',\n    'en_TH',\n    'en_TJ',\n    'en_TM',\n    'en_TN',\n    'en_TO',\n    'en_TR',\n    'en_TT',\n    'en_TV',\n    'en_TW',\n    'en_TZ',\n    'en_UA',\n    'en_UG',\n    'en_US',\n    'en_UY',\n    'en_VA',\n    'en_VC',\n    'en_VE',\n    'en_VG',\n    'en_VN',\n    'en_VU',\n    'en_WF',\n    'en_WS',\n    'en_YE',\n    'en_YT',\n    'en_ZA',\n    'en_ZM',\n    'en_ZW',\n    'es_AD',\n    'es_AI',\n    'es_AO',\n    'es_AR',\n    'es_AW',\n    'es_BB',\n    'es_BJ',\n    'es_BM',\n    'es_BO',\n    'es_BS',\n    'es_BZ',\n    'es_CD',\n    'es_CG',\n    'es_CK',\n    'es_CL',\n    'es_CO',\n    'es_CR',\n    'es_CV',\n    'es_DJ',\n    'es_DM',\n    'es_DO',\n    'es_DZ',\n    'es_EC',\n    'es_EG',\n    'es_ER',\n    'es_ES',\n    'es_ET',\n    'es_FJ',\n    'es_FK',\n    'es_FO',\n    'es_GA',\n    'es_GD',\n    'es_GE',\n    'es_GI',\n    'es_GL',\n    'es_GM',\n    'es_GN',\n    'es_GT',\n    'es_GW',\n    'es_GY',\n    'es_HN',\n    'es_IE',\n    'es_JM',\n    'es_JO',\n    'es_KE',\n    'es_KG',\n    'es_KI',\n    'es_KM',\n    'es_KN',\n    'es_KW',\n    'es_KY',\n    'es_KZ',\n    'es_LC',\n    'es_LI',\n    'es_LS',\n    'es_LU',\n    'es_MA',\n    'es_MG',\n    'es_MH',\n    'es_ML',\n    'es_MR',\n    'es_MS',\n    'es_MU',\n    'es_MW',\n    'es_MX',\n    'es_MZ',\n    'es_NA',\n    'es_NC',\n    'es_NE',\n    'es_NF',\n    'es_NI',\n    'es_NR',\n    'es_NU',\n    'es_NZ',\n    'es_OM',\n    'es_PA',\n    'es_PE',\n    'es_PF',\n    'es_PG',\n    'es_PM',\n    'es_PN',\n    'es_PW',\n    'es_PY',\n    'es_QA',\n    'es_RS',\n    'es_RW',\n    'es_SA',\n    'es_SB',\n    'es_SC',\n    'es_SH',\n    'es_SJ',\n    'es_SL',\n    'es_SM',\n    'es_SN',\n    'es_SO',\n    'es_SR',\n    'es_ST',\n    'es_SV',\n    'es_SZ',\n    'es_TC',\n    'es_TD',\n    'es_TG',\n    'es_TJ',\n    'es_TM',\n    'es_TN',\n    'es_TT',\n    'es_TV',\n    'es_UA',\n    'es_UG',\n    'es_US',\n    'es_UY',\n    'es_VA',\n    'es_VC',\n    'es_VE',\n    'es_VG',\n    'es_VU',\n    'es_WF',\n    'es_YE',\n    'es_ZM',\n    'et_EE',\n    'fi_FI',\n    'fr_AD',\n    'fr_AE',\n    'fr_AI',\n    'fr_AM',\n    'fr_AO',\n    'fr_AW',\n    'fr_AZ',\n    'fr_BB',\n    'fr_BE',\n    'fr_BF',\n    'fr_BI',\n    'fr_BJ',\n    'fr_BM',\n    'fr_BS',\n    'fr_BZ',\n    'fr_CA',\n    'fr_CD',\n    'fr_CG',\n    'fr_CH',\n    'fr_CI',\n    'fr_CK',\n    'fr_CM',\n    'fr_CV',\n    'fr_DJ',\n    'fr_DM',\n    'fr_DO',\n    'fr_DZ',\n    'fr_EC',\n    'fr_ER',\n    'fr_ET',\n    'fr_FJ',\n    'fr_FK',\n    'fr_FO',\n    'fr_FR',\n    'fr_GA',\n    'fr_GD',\n    'fr_GE',\n    'fr_GF',\n    'fr_GI',\n    'fr_GL',\n    'fr_GM',\n    'fr_GN',\n    'fr_GP',\n    'fr_GT',\n    'fr_GW',\n    'fr_GY',\n    'fr_HN',\n    'fr_IE',\n    'fr_JM',\n    'fr_JO',\n    'fr_KE',\n    'fr_KG',\n    'fr_KI',\n    'fr_KM',\n    'fr_KN',\n    'fr_KW',\n    'fr_KY',\n    'fr_KZ',\n    'fr_LC',\n    'fr_LI',\n    'fr_LS',\n    'fr_LU',\n    'fr_MA',\n    'fr_MC',\n    'fr_MG',\n    'fr_MH',\n    'fr_ML',\n    'fr_MQ',\n    'fr_MR',\n    'fr_MS',\n    'fr_MU',\n    'fr_MW',\n    'fr_MZ',\n    'fr_NA',\n    'fr_NC',\n    'fr_NE',\n    'fr_NF',\n    'fr_NI',\n    'fr_NR',\n    'fr_NU',\n    'fr_NZ',\n    'fr_OM',\n    'fr_PA',\n    'fr_PE',\n    'fr_PF',\n    'fr_PG',\n    'fr_PM',\n    'fr_PN',\n    'fr_PW',\n    'fr_QA',\n    'fr_RE',\n    'fr_RS',\n    'fr_RW',\n    'fr_SA',\n    'fr_SB',\n    'fr_SC',\n    'fr_SH',\n    'fr_SJ',\n    'fr_SL',\n    'fr_SM',\n    'fr_SN',\n    'fr_SO',\n    'fr_SR',\n    'fr_ST',\n    'fr_SV',\n    'fr_SZ',\n    'fr_TC',\n    'fr_TD',\n    'fr_TG',\n    'fr_TJ',\n    'fr_TM',\n    'fr_TN',\n    'fr_TT',\n    'fr_TV',\n    'fr_UA',\n    'fr_UG',\n    'fr_US',\n    'fr_UY',\n    'fr_VA',\n    'fr_VC',\n    'fr_VE',\n    'fr_VG',\n    'fr_VU',\n    'fr_WF',\n    'fr_YE',\n    'fr_YT',\n    'fr_ZA',\n    'fr_ZM',\n    'he_IL',\n    'hu_HU',\n    'id_ID',\n    'it_IT',\n    'ja_JP',\n    'ko_KR',\n    'lv_LV',\n    'lt_LT',\n    'ms_BN',\n    'ms_MY',\n    'nl_BE',\n    'nl_NL',\n    'pl_PL',\n    'pt_BR',\n    'pt_PT',\n    'ro_RO',\n    'ru_EE',\n    'ru_LT',\n    'ru_LV',\n    'ru_RU',\n    'ru_UA',\n    'si_LK',\n    'sk_SK',\n    'sl_SI',\n    'sq_AL',\n    'sv_SE',\n    'tl_PH',\n    'th_TH',\n    'tr_TR',\n    'vi_VN',\n    'zh_C2',\n    'zh_CN',\n    'zh_HK',\n    'zh_TW',\n    'zh_AD',\n    'zh_AE',\n    'zh_AI',\n    'zh_AO',\n    'zh_AW',\n    'zh_BB',\n    'zh_BH',\n    'zh_BJ',\n    'zh_BM',\n    'zh_BS',\n    'zh_BZ',\n    'zh_CD',\n    'zh_CG',\n    'zh_CK',\n    'zh_CL',\n    'zh_CO',\n    'zh_CV',\n    'zh_DJ',\n    'zh_DM',\n    'zh_DO',\n    'zh_DZ',\n    'zh_EC',\n    'zh_EG',\n    'zh_ER',\n    'zh_ET',\n    'zh_FJ',\n    'zh_FK',\n    'zh_FO',\n    'zh_GA',\n    'zh_GD',\n    'zh_GE',\n    'zh_GI',\n    'zh_GL',\n    'zh_GM',\n    'zh_GN',\n    'zh_GT',\n    'zh_GW',\n    'zh_GY',\n    'zh_HN',\n    'zh_IE',\n    'zh_JM',\n    'zh_JO',\n    'zh_KE',\n    'zh_KG',\n    'zh_KI',\n    'zh_KM',\n    'zh_KN',\n    'zh_KW',\n    'zh_KY',\n    'zh_KZ',\n    'zh_LC',\n    'zh_LI',\n    'zh_LS',\n    'zh_LT',\n    'zh_LU',\n    'zh_MA',\n    'zh_MG',\n    'zh_MH',\n    'zh_ML',\n    'zh_MR',\n    'zh_MS',\n    'zh_MU',\n    'zh_MW',\n    'zh_MZ',\n    'zh_NA',\n    'zh_NC',\n    'zh_NE',\n    'zh_NF',\n    'zh_NI',\n    'zh_NR',\n    'zh_NU',\n    'zh_NZ',\n    'zh_OM',\n    'zh_PA',\n    'zh_PE',\n    'zh_PF',\n    'zh_PG',\n    'zh_PM',\n    'zh_PN',\n    'zh_PW',\n    'zh_QA',\n    'zh_RS',\n    'zh_RW',\n    'zh_SA',\n    'zh_SB',\n    'zh_SC',\n    'zh_SH',\n    'zh_SJ',\n    'zh_SL',\n    'zh_SM',\n    'zh_SN',\n    'zh_SO',\n    'zh_SR',\n    'zh_ST',\n    'zh_SV',\n    'zh_SZ',\n    'zh_TC',\n    'zh_TD',\n    'zh_TG',\n    'zh_TJ',\n    'zh_TM',\n    'zh_TN',\n    'zh_TT',\n    'zh_TV',\n    'zh_UA',\n    'zh_UG',\n    'zh_US',\n    'zh_UY',\n    'zh_VA',\n    'zh_VC',\n    'zh_VE',\n    'zh_VG',\n    'zh_VU',\n    'zh_WF',\n    'zh_YE',\n    'zh_ZA',\n    'zh_ZM',\n];\n"
  },
  {
    "path": "packages/paypal-utils/src/paypal-fastlane-utils.spec.ts",
    "content": "import {\n    PaymentMethodClientUnavailableError,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nimport { getPayPalFastlaneAuthenticationResultMock, getPayPalFastlaneSdk } from './mocks';\nimport PaypalFastlaneUtils from './paypal-fastlane-utils';\nimport {\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneSdk,\n    PayPalHostWindow,\n} from './paypal-types';\n\ndescribe('PayPalFastlaneUtils', () => {\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let subject: PaypalFastlaneUtils;\n\n    const methodIdMock = 'paypalcommerceacceleratedcheckout';\n    const authenticationResultMock = getPayPalFastlaneAuthenticationResultMock();\n\n    const bcAddressMock = {\n        address1: 'addressLine1',\n        address2: 'addressLine2',\n        city: 'addressCity',\n        company: 'BigCommerce',\n        country: 'United States',\n        countryCode: 'US',\n        customFields: [],\n        firstName: 'John',\n        lastName: 'Doe',\n        phone: '15551113344',\n        postalCode: '03004',\n        stateOrProvince: 'addressState',\n        stateOrProvinceCode: 'addressState',\n    };\n\n    const paypalToBcAddressMock = {\n        ...bcAddressMock,\n        id: 1,\n        country: 'US',\n        type: 'paypal-address',\n    };\n\n    const paypalToBcInstrumentMock = {\n        bigpayToken: 'nonce/token',\n        brand: 'Visa',\n        defaultInstrument: false,\n        expiryMonth: '12',\n        expiryYear: '2030',\n        iin: '',\n        last4: '1111',\n        method: 'paypalcommerceacceleratedcheckout',\n        provider: 'paypalcommerceacceleratedcheckout',\n        trustedShippingAddress: false,\n        untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n        type: 'card',\n    };\n\n    beforeEach(() => {\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n\n        subject = new PaypalFastlaneUtils();\n\n        jest.spyOn(Date, 'now').mockImplementation(() => 1);\n    });\n\n    afterEach(() => {\n        (window as PayPalHostWindow).paypalFastlane = undefined;\n\n        jest.resetAllMocks();\n        jest.restoreAllMocks();\n\n        localStorage.clear();\n    });\n\n    describe('#initializePayPalFastlane', () => {\n        it('initializes paypal fastlane with paypal sdk', async () => {\n            jest.spyOn(paypalFastlaneSdk, 'Fastlane');\n\n            await subject.initializePayPalFastlane(paypalFastlaneSdk, false);\n\n            expect(paypalFastlaneSdk.Fastlane).toHaveBeenCalled();\n        });\n\n        it('sets axo to sandbox mode if test mode is enabled', async () => {\n            jest.spyOn(Storage.prototype, 'setItem').mockImplementation(jest.fn);\n\n            await subject.initializePayPalFastlane(paypalFastlaneSdk, true);\n\n            expect(window.localStorage.setItem).toHaveBeenCalledWith('fastlaneEnv', 'sandbox');\n            expect(window.localStorage.setItem).toHaveBeenCalledWith('axoEnv', 'sandbox');\n        });\n    });\n\n    describe('#getPayPalFastlaneOrThrow', () => {\n        it('successfully returns paypal fastlane with no errors', async () => {\n            const expectedResult = await subject.initializePayPalFastlane(paypalFastlaneSdk, false);\n\n            expect(subject.getPayPalFastlaneOrThrow()).toEqual(expectedResult);\n        });\n\n        it('throws an error if paypal fastlane did not initialize before', () => {\n            try {\n                subject.getPayPalFastlaneOrThrow();\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n\n    describe('#lookupCustomerOrThrow', () => {\n        const testEmail = 'john@doe.com';\n\n        it('successfully triggers lookup method with provided email', async () => {\n            const paypalConnectMock = await subject.initializePayPalFastlane(\n                paypalFastlaneSdk,\n                false,\n            );\n\n            await subject.lookupCustomerOrThrow(testEmail);\n\n            expect(paypalConnectMock.identity.lookupCustomerByEmail).toHaveBeenCalledWith(\n                testEmail,\n            );\n        });\n\n        it('throws an error if paypal fastlane did not initialize before', async () => {\n            try {\n                await subject.lookupCustomerOrThrow(testEmail);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n\n    describe('#triggerAuthenticationFlowOrThrow', () => {\n        const customerContextIdMock = 'ryanRecognised123';\n\n        it('successfully triggers authentication flow with provided customer id and styles', async () => {\n            const paypalFastlaneMock = await subject.initializePayPalFastlane(\n                paypalFastlaneSdk,\n                false,\n            );\n\n            await subject.triggerAuthenticationFlowOrThrow(customerContextIdMock);\n\n            expect(paypalFastlaneMock.identity.triggerAuthenticationFlow).toHaveBeenCalledWith(\n                customerContextIdMock,\n            );\n        });\n\n        it('throws an error if paypal fastlane did not initialize before', async () => {\n            try {\n                await subject.triggerAuthenticationFlowOrThrow(customerContextIdMock);\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n\n    describe('#updateStorageSessionId', () => {\n        const sessionIdMock = 'cartId123';\n\n        it('updates browser cookies with session id', () => {\n            jest.spyOn(CookieStorage, 'set');\n\n            subject.updateStorageSessionId(sessionIdMock);\n\n            expect(CookieStorage.set).toHaveBeenCalledWith('bc-fastlane-sessionId', sessionIdMock, {\n                expires: expect.any(Date),\n                secure: true,\n            });\n        });\n    });\n\n    describe('#removeStorageSessionId', () => {\n        it('removes session id from browser cookies', () => {\n            jest.spyOn(CookieStorage, 'remove');\n\n            subject.removeStorageSessionId();\n\n            expect(CookieStorage.remove).toHaveBeenCalledWith('bc-fastlane-sessionId');\n        });\n    });\n\n    describe('#getStorageSessionId', () => {\n        it('returns session id to browser storage', () => {\n            jest.spyOn(CookieStorage, 'get');\n\n            subject.getStorageSessionId();\n\n            expect(CookieStorage.get).toHaveBeenCalledWith('bc-fastlane-sessionId');\n        });\n    });\n\n    describe('#mapPayPalFastlaneProfileToBcCustomerData', () => {\n        it('returns default \"empty\" data if authenticationResult is undefined', () => {\n            expect(subject.mapPayPalFastlaneProfileToBcCustomerData(methodIdMock, {})).toEqual({\n                authenticationState: PayPalFastlaneAuthenticationState.UNRECOGNIZED,\n                addresses: [],\n                billingAddress: undefined,\n                shippingAddress: undefined,\n                instruments: [],\n            });\n        });\n\n        it('returns mapped PayPal Fastlane Profile to BC like data', () => {\n            expect(\n                subject.mapPayPalFastlaneProfileToBcCustomerData(\n                    methodIdMock,\n                    authenticationResultMock,\n                ),\n            ).toEqual({\n                authenticationState: PayPalFastlaneAuthenticationState.SUCCEEDED,\n                addresses: [paypalToBcAddressMock],\n                billingAddress: paypalToBcAddressMock,\n                shippingAddress: paypalToBcAddressMock,\n                instruments: [paypalToBcInstrumentMock],\n            });\n        });\n    });\n\n    describe('#mapBcToPayPalInstrument()', () => {\n        it('maps and returns PayPal Instrument mapped to BC shape', () => {\n            const result = subject.mapPayPalToBcInstrument(\n                methodIdMock,\n                authenticationResultMock.profileData.card,\n            );\n\n            expect(result).toEqual([paypalToBcInstrumentMock]);\n        });\n    });\n\n    describe('#mapBcToPayPalAddress()', () => {\n        it('maps and returns PayPal Address based on provided BC address', () => {\n            const result = subject.mapBcToPayPalAddress(bcAddressMock);\n\n            expect(result).toEqual({\n                addressLine1: 'addressLine1',\n                addressLine2: 'addressLine2',\n                adminArea1: 'addressState',\n                adminArea2: 'addressCity',\n                company: 'BigCommerce',\n                countryCode: 'US',\n                postalCode: '03004',\n            });\n        });\n\n        it('set adminArea1 with stateOrProvince value if stateOrProvinceCode is empty', () => {\n            const addressMock = {\n                address1: 'addressLine1',\n                address2: 'addressLine2',\n                city: 'addressCity',\n                company: 'BigCommerce',\n                country: 'United States',\n                countryCode: 'US',\n                customFields: [],\n                firstName: 'John',\n                lastName: 'Doe',\n                phone: '15551113344',\n                postalCode: '03004',\n                stateOrProvince: 'addressState1',\n                stateOrProvinceCode: '',\n            };\n            const result = subject.mapBcToPayPalAddress(addressMock);\n\n            expect(result).toEqual({\n                addressLine1: 'addressLine1',\n                addressLine2: 'addressLine2',\n                adminArea1: 'addressState1',\n                adminArea2: 'addressCity',\n                company: 'BigCommerce',\n                countryCode: 'US',\n                postalCode: '03004',\n            });\n        });\n    });\n\n    describe('#mapPayPalToBcAddress()', () => {\n        it('maps and returns PayPal Address based on provided BC address', () => {\n            const result = subject.mapPayPalToBcAddress(\n                authenticationResultMock.profileData.shippingAddress.address,\n                authenticationResultMock.profileData.shippingAddress.name,\n                authenticationResultMock.profileData.shippingAddress.phoneNumber,\n                [],\n            );\n\n            expect(result).toEqual(paypalToBcAddressMock);\n        });\n    });\n\n    describe('#filterAddresses()', () => {\n        it('returns only one address if provided addresses are the same', () => {\n            const result = subject.filterAddresses([paypalToBcAddressMock, paypalToBcAddressMock]);\n\n            expect(result).toHaveLength(1);\n        });\n\n        it('returns an array of addresses if provided addresses are different', () => {\n            const result = subject.filterAddresses([\n                paypalToBcAddressMock,\n                {\n                    ...paypalToBcAddressMock,\n                    firstName: 'John',\n                    lastName: 'Son',\n                },\n            ]);\n\n            expect(result).toHaveLength(2);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/paypal-fastlane-utils.ts",
    "content": "import { isEqual, omit } from 'lodash';\n\nimport {\n    Address,\n    CardInstrument,\n    CustomerAddress,\n    PaymentMethodClientUnavailableError,\n    UntrustedShippingCardVerificationType,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { CookieStorage } from '@bigcommerce/checkout-sdk/storage';\n\nimport {\n    PayPalFastlane,\n    PayPalFastlaneAddress,\n    PayPalFastlaneAuthenticationResult,\n    PayPalFastlaneAuthenticationState,\n    PayPalFastlaneLookupCustomerByEmailResult,\n    PayPalFastlaneProfileCard,\n    PayPalFastlaneProfileName,\n    PayPalFastlaneProfilePhone,\n    PayPalFastlaneProfileToBcCustomerDataMappingResult,\n    PayPalFastlaneSdk,\n    PayPalFastlaneStylesOption,\n    PayPalHostWindow,\n} from './paypal-types';\n\nexport default class PaypalFastlaneUtils {\n    private window: PayPalHostWindow;\n\n    constructor() {\n        this.window = window;\n    }\n\n    async initializePayPalFastlane(\n        paypalFastlaneSdk: PayPalFastlaneSdk,\n        isTestModeEnabled: boolean,\n        styles?: PayPalFastlaneStylesOption,\n    ): Promise<PayPalFastlane> {\n        if (isTestModeEnabled) {\n            window.localStorage.setItem('fastlaneEnv', 'sandbox');\n            window.localStorage.setItem('axoEnv', 'sandbox'); // TODO: remove if this key does not use on PayPal side\n        }\n\n        if (!this.window.paypalFastlane) {\n            const defaultStyles = {\n                root: {\n                    backgroundColorPrimary: 'transparent',\n                },\n            };\n\n            this.window.paypalFastlane = await paypalFastlaneSdk.Fastlane({\n                styles: styles || defaultStyles,\n            });\n        }\n\n        return this.window.paypalFastlane;\n    }\n\n    getPayPalFastlaneOrThrow(): PayPalFastlane {\n        if (!this.window.paypalFastlane) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.window.paypalFastlane;\n    }\n\n    /**\n     *\n     * Detects the customer to PayPal Fastlane relation and\n     * returns customerContextId to use it for authentication\n     *\n     */\n    async lookupCustomerOrThrow(email: string): Promise<PayPalFastlaneLookupCustomerByEmailResult> {\n        const paypalFastlane = this.getPayPalFastlaneOrThrow();\n\n        return paypalFastlane.identity.lookupCustomerByEmail(email);\n    }\n\n    /**\n     *\n     * Triggers authentication flow (shows OTP popup) if the customer recognised as PayPal Fastlane user\n     * and returns PayPal Fastlane Profile data to use it in BC checkout\n     *\n     */\n    async triggerAuthenticationFlowOrThrow(\n        customerContextId?: string,\n    ): Promise<PayPalFastlaneAuthenticationResult> {\n        if (!customerContextId) {\n            return {};\n        }\n\n        const paypalFastlane = this.getPayPalFastlaneOrThrow();\n\n        return paypalFastlane.identity.triggerAuthenticationFlow(customerContextId);\n    }\n\n    /**\n     *\n     * 'updateStorageSessionId' method is used to:\n     * - set session id after user was authenticated (or unrecognised) to trigger authentication after page refresh\n     *\n     * Flow info:\n     * If user unrecognised then the lookup method will be working but the OTP will not be shown\n     * If user recognised and not canceled then the lookup method will be working and the OTP will be shown only if needed\n     * If user cancels the OPT then OTP will not be triggered after page refresh\n     *\n     */\n    updateStorageSessionId(sessionId: string): void {\n        const expires = new Date();\n\n        expires.setDate(expires.getDate() + 14); // 2 weeks expiry\n\n        const cookiesOption = {\n            expires,\n            secure: true,\n        };\n\n        CookieStorage.set('bc-fastlane-sessionId', sessionId, cookiesOption);\n    }\n\n    removeStorageSessionId(): void {\n        CookieStorage.remove('bc-fastlane-sessionId');\n    }\n\n    getStorageSessionId(): string {\n        return CookieStorage.get('bc-fastlane-sessionId') || '';\n    }\n\n    /**\n     *\n     * 'mapPayPalFastlaneProfileToBcCustomerData' method is responsible for:\n     * - mapping PayPal Fastlane Profile data to BC data shape\n     * - returning mapped data to use for updating PaymentProviderCustomer state and\n     * update shipping and billing addresses\n     *\n     */\n    mapPayPalFastlaneProfileToBcCustomerData(\n        methodId: string,\n        authenticationResult: PayPalFastlaneAuthenticationResult,\n    ): PayPalFastlaneProfileToBcCustomerDataMappingResult {\n        const { authenticationState, profileData } = authenticationResult;\n\n        const paypalBillingAddress = profileData?.card?.paymentSource?.card?.billingAddress;\n        const paypalShippingAddress = profileData?.shippingAddress;\n        const paypalProfileName = profileData?.name;\n        const paypalInstrument = profileData?.card;\n\n        const shippingAddress = paypalShippingAddress\n            ? this.mapPayPalToBcAddress(\n                  paypalShippingAddress.address,\n                  paypalShippingAddress.name,\n                  paypalShippingAddress.phoneNumber,\n              )\n            : undefined;\n        const billingAddress =\n            paypalBillingAddress && paypalProfileName\n                ? this.mapPayPalToBcAddress(\n                      paypalBillingAddress,\n                      paypalProfileName,\n                      paypalShippingAddress?.phoneNumber,\n                  )\n                : undefined;\n        const instruments = paypalInstrument\n            ? this.mapPayPalToBcInstrument(methodId, paypalInstrument)\n            : [];\n\n        const addresses = this.filterAddresses([shippingAddress, billingAddress]);\n\n        return {\n            authenticationState:\n                authenticationState || PayPalFastlaneAuthenticationState.UNRECOGNIZED,\n            addresses,\n            billingAddress,\n            shippingAddress,\n            instruments,\n        };\n    }\n\n    mapPayPalToBcInstrument(\n        methodId: string,\n        instrument: PayPalFastlaneProfileCard,\n    ): CardInstrument[] {\n        const { id, paymentSource } = instrument;\n        const { brand, expiry, lastDigits } = paymentSource.card;\n\n        const [expiryYear, expiryMonth] = expiry.split('-');\n\n        return [\n            {\n                bigpayToken: id,\n                brand,\n                defaultInstrument: false,\n                expiryMonth,\n                expiryYear,\n                iin: '',\n                last4: lastDigits,\n                method: methodId,\n                provider: methodId,\n                trustedShippingAddress: false,\n                untrustedShippingCardVerificationMode: UntrustedShippingCardVerificationType.PAN,\n                type: 'card',\n            },\n        ];\n    }\n\n    mapBcToPayPalAddress(address?: Address): PayPalFastlaneAddress {\n        return {\n            company: address?.company || '',\n            addressLine1: address?.address1 || '',\n            addressLine2: address?.address2 || '',\n            adminArea1: address?.stateOrProvinceCode || address?.stateOrProvince || '',\n            adminArea2: address?.city || '',\n            postalCode: address?.postalCode || '',\n            countryCode: address?.countryCode || '',\n        };\n    }\n\n    mapPayPalToBcAddress(\n        address: PayPalFastlaneAddress,\n        profileName: PayPalFastlaneProfileName,\n        phone?: PayPalFastlaneProfilePhone,\n        customFields?: CustomerAddress['customFields'],\n    ): CustomerAddress {\n        const [firstName, lastName] = profileName.fullName.split(' ');\n\n        const phoneData = {\n            nationalNumber: phone?.nationalNumber || '',\n            countryCode: phone?.countryCode || '',\n        };\n\n        return {\n            id: Date.now(),\n            type: 'paypal-address',\n            firstName: profileName.firstName || firstName || '',\n            lastName: profileName.lastName || lastName || '',\n            company: address.company || '',\n            address1: address.addressLine1,\n            address2: address.addressLine2 || '',\n            city: address.adminArea2,\n            stateOrProvince: address.adminArea1,\n            stateOrProvinceCode: address.adminArea1,\n            country: address.countryCode || '', // TODO: update country with valid naming\n            countryCode: address.countryCode || '',\n            postalCode: address.postalCode,\n            phone: phoneData.countryCode + phoneData.nationalNumber,\n            customFields: customFields || [],\n        };\n    }\n\n    /**\n     *\n     * This method is responsible for filtering PayPal Fastlane addresses if they are the same\n     * and returns an array of addresses to use them for shipping and/or billing address selections\n     * so the customer will be able to use addresses from PayPal Fastlane in checkout flow\n     *\n     */\n    filterAddresses(addresses: Array<CustomerAddress | undefined>): CustomerAddress[] {\n        return addresses.reduce(\n            (customerAddresses: CustomerAddress[], currentAddress: CustomerAddress | undefined) => {\n                if (!currentAddress) {\n                    return customerAddresses;\n                }\n\n                const sameAddressInTheArray = customerAddresses.some((customerAddress) =>\n                    this.isEqualAddresses(customerAddress, currentAddress),\n                );\n\n                return sameAddressInTheArray\n                    ? customerAddresses\n                    : [...customerAddresses, currentAddress];\n            },\n            [],\n        );\n    }\n\n    private isEqualAddresses(\n        firstAddress: CustomerAddress,\n        secondAddress: CustomerAddress,\n    ): boolean {\n        return isEqual(this.normalizeAddress(firstAddress), this.normalizeAddress(secondAddress));\n    }\n\n    private normalizeAddress(address: CustomerAddress) {\n        return omit(address, ['id', 'phone']);\n    }\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/paypal-integration-service.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\nimport { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BuyNowCartCreationError,\n    Cart,\n    Consignment,\n    MissingDataError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBuyNowCart,\n    getBuyNowCartRequestBody,\n    getCart,\n    getConsignment,\n    getShippingOption,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    getBillingAddressFromOrderDetails,\n    getPayPalOrderDetails,\n    getPayPalPaymentMethod,\n    getPayPalSDKMock,\n    getShippingAddressFromOrderDetails,\n} from './mocks';\nimport PayPalIntegrationService from './paypal-integration-service';\nimport PayPalRequestSender from './paypal-request-sender';\nimport PayPalSdkLoader from './paypal-sdk-script-loader';\nimport {\n    PayPalOrderStatus,\n    PayPalSDK,\n    StyleButtonColor,\n    StyleButtonLabel,\n    StyleButtonShape,\n} from './paypal-types';\n\ndescribe('PayPalIntegrationService', () => {\n    let buyNowCart: Cart;\n    let cart: Cart;\n    let consignments: Consignment[];\n    let formPoster: FormPoster;\n    let requestSender: RequestSender;\n    let subject: PayPalIntegrationService;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let paypalRequestSender: PayPalRequestSender;\n    let paypalSdkLoader: PayPalSdkLoader;\n    let paypalSdk: PayPalSDK;\n\n    const defaultMethodId = 'paypalcommerce';\n    const defaultGatewayId = 'paypalcommercealternativemethods';\n    const mockedOrderId = 'order123';\n\n    beforeEach(() => {\n        buyNowCart = getBuyNowCart();\n        cart = getCart();\n        consignments = [getConsignment()];\n\n        paymentMethod = getPayPalPaymentMethod();\n        paypalSdk = getPayPalSDKMock();\n\n        formPoster = createFormPoster();\n        requestSender = createRequestSender();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paypalRequestSender = new PayPalRequestSender(requestSender);\n        paypalSdkLoader = new PayPalSdkLoader(getScriptLoader());\n\n        subject = new PayPalIntegrationService(\n            formPoster,\n            paymentIntegrationService,\n            paypalRequestSender,\n            paypalSdkLoader,\n        );\n\n        const state = paymentIntegrationService.getState();\n\n        jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(paymentMethod);\n        jest.spyOn(state, 'getCartOrThrow').mockReturnValue(cart);\n        jest.spyOn(state, 'getConsignmentsOrThrow').mockReturnValue(consignments);\n        jest.spyOn(state, 'getLocale').mockReturnValue('en-US');\n\n        jest.spyOn(paypalSdkLoader, 'getPayPalSDK').mockResolvedValue(paypalSdk);\n    });\n\n    it('creates an instance of the PayPalCommerceIntegrationService class', () => {\n        expect(subject).toBeInstanceOf(PayPalIntegrationService);\n    });\n\n    describe('#loadPayPalSdk', () => {\n        it('loads paypal sdk', async () => {\n            const output = await subject.loadPayPalSdk(defaultMethodId, undefined, false, false);\n\n            expect(paypalSdkLoader.getPayPalSDK).toHaveBeenCalledWith(\n                paymentMethod,\n                cart.currency.code,\n                'en-US',\n                false,\n                false,\n            );\n            expect(output).toBe(paypalSdk);\n        });\n\n        it('loads paypal sdk with provided currency code', async () => {\n            const providedCurrencyCode = 'UAH';\n            const output = await subject.loadPayPalSdk(\n                defaultMethodId,\n                providedCurrencyCode,\n                false,\n                false,\n            );\n\n            expect(paypalSdkLoader.getPayPalSDK).toHaveBeenCalledWith(\n                paymentMethod,\n                providedCurrencyCode,\n                'en-US',\n                false,\n                false,\n            );\n            expect(output).toBe(paypalSdk);\n        });\n    });\n\n    describe('#getPayPalSdkOrThrow', () => {\n        it('returns paypal sdk if it was loaded earlier', async () => {\n            await subject.loadPayPalSdk(defaultMethodId, undefined, false);\n\n            const output = subject.getPayPalSdkOrThrow();\n\n            expect(output).toBe(paypalSdk);\n        });\n\n        it('throws an error if paypal sdk is not defined', () => {\n            try {\n                subject.getPayPalSdkOrThrow();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n\n    describe('#createBuyNowCartOrThrow', () => {\n        it('throws an error there is no cart request body by calling callback from buyNowInitializeOptions', async () => {\n            const buyNowInitializeOptionsMock = {\n                getBuyNowCartRequestBody: jest.fn(),\n            };\n\n            try {\n                await subject.createBuyNowCartOrThrow(buyNowInitializeOptionsMock);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('successfully creates buy now cart', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockResolvedValue(buyNowCart);\n\n            const output = await subject.createBuyNowCartOrThrow({\n                getBuyNowCartRequestBody,\n            });\n\n            expect(output).toBe(buyNowCart);\n        });\n\n        it('throws an error if there is something went wrong during buy now cart creation process', async () => {\n            jest.spyOn(paymentIntegrationService, 'createBuyNowCart').mockImplementation(() =>\n                Promise.reject(new Error()),\n            );\n\n            try {\n                await subject.createBuyNowCartOrThrow({\n                    getBuyNowCartRequestBody,\n                });\n            } catch (error) {\n                expect(error).toBeInstanceOf(BuyNowCartCreationError);\n            }\n        });\n    });\n\n    describe('#createOrder', () => {\n        it('successfully creates paypal order', async () => {\n            jest.spyOn(paypalRequestSender, 'createOrder').mockResolvedValue({\n                orderId: mockedOrderId,\n                approveUrl: 'url.com',\n            });\n\n            const output = await subject.createOrder(defaultMethodId);\n\n            expect(paypalRequestSender.createOrder).toHaveBeenCalledWith(defaultMethodId, {\n                cartId: cart.id,\n            });\n            expect(output).toBe(mockedOrderId);\n        });\n\n        it('successfully creates paypal order with provided instrument data', async () => {\n            jest.spyOn(paypalRequestSender, 'createOrder').mockResolvedValue({\n                orderId: mockedOrderId,\n                approveUrl: 'url.com',\n            });\n\n            const vaultedInstrumentData = { instrumentId: 'vaultedInstrumentIdMock' };\n\n            const output = await subject.createOrder(defaultMethodId, vaultedInstrumentData);\n\n            expect(paypalRequestSender.createOrder).toHaveBeenCalledWith(defaultMethodId, {\n                cartId: cart.id,\n                instrumentId: vaultedInstrumentData.instrumentId,\n            });\n            expect(output).toBe(mockedOrderId);\n        });\n    });\n\n    describe('#updateOrder', () => {\n        it('successfully updates order', async () => {\n            jest.spyOn(paypalRequestSender, 'updateOrder').mockResolvedValue({\n                statusCode: 200,\n            });\n\n            await subject.updateOrder('paypalcommerce', 'paypalcommerce', 123);\n\n            expect(paypalRequestSender.updateOrder).toHaveBeenCalledWith('paypalcommerce', {\n                availableShippingOptions: consignments[0].availableShippingOptions,\n                cartId: cart.id,\n                selectedShippingOption: consignments[0].selectedShippingOption,\n                methodId: 'paypalcommerce',\n                orderId: 123,\n            });\n        });\n\n        it('throws an error if something went wrong during order update process', async () => {\n            jest.spyOn(paypalRequestSender, 'updateOrder').mockImplementation(() =>\n                Promise.reject(new Error()),\n            );\n\n            try {\n                await subject.updateOrder('paypalcommerce');\n            } catch (error) {\n                expect(error).toBeInstanceOf(RequestError);\n            }\n        });\n    });\n\n    describe('#getOrderStatus', () => {\n        it('successfully updates order', async () => {\n            jest.spyOn(paypalRequestSender, 'getOrderStatus').mockResolvedValue({\n                status: PayPalOrderStatus.Approved,\n            });\n\n            await subject.getOrderStatus();\n\n            expect(paypalRequestSender.getOrderStatus).toHaveBeenCalled();\n        });\n\n        it('calls getOrderStatus with proper data', async () => {\n            jest.spyOn(paypalRequestSender, 'getOrderStatus').mockResolvedValue({\n                status: PayPalOrderStatus.Approved,\n            });\n\n            await subject.getOrderStatus('paypalcommercealternativemethods', {\n                params: { useMetaData: true },\n            });\n\n            expect(paypalRequestSender.getOrderStatus).toHaveBeenCalledWith(\n                'paypalcommercealternativemethods',\n                {\n                    params: {\n                        useMetaData: true,\n                    },\n                },\n            );\n        });\n\n        it('throws an error if something went wrong during requesting order status', async () => {\n            jest.spyOn(paypalRequestSender, 'getOrderStatus').mockImplementation(() =>\n                Promise.reject(new Error()),\n            );\n\n            try {\n                await subject.getOrderStatus();\n            } catch (error) {\n                expect(error).toBeInstanceOf(RequestError);\n            }\n        });\n    });\n\n    describe('#tokenizePayment', () => {\n        beforeEach(() => {\n            jest.spyOn(formPoster, 'postForm').mockImplementation(jest.fn);\n        });\n\n        it('throws an error if order id is not provided', () => {\n            try {\n                subject.tokenizePayment(defaultMethodId);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('successfully posts the form data', () => {\n            subject.tokenizePayment(defaultMethodId, mockedOrderId);\n\n            expect(formPoster.postForm).toHaveBeenCalledWith('/checkout.php', {\n                payment_type: 'paypal',\n                action: 'set_external_checkout',\n                provider: defaultMethodId,\n                order_id: mockedOrderId,\n            });\n        });\n\n        it('successfully posts the form data with buy now cart id', () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                buyNowCart,\n            );\n\n            subject.tokenizePayment(defaultMethodId, mockedOrderId);\n\n            expect(formPoster.postForm).toHaveBeenCalledWith('/checkout.php', {\n                payment_type: 'paypal',\n                action: 'set_external_checkout',\n                provider: defaultMethodId,\n                order_id: mockedOrderId,\n                cart_id: buyNowCart.id,\n            });\n        });\n    });\n\n    describe('#submitPayment', () => {\n        it('successfully submits payment', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n            const paymentDataMock = {\n                formattedPayload: {\n                    vault_payment_instrument: null,\n                    set_as_default_stored_instrument: null,\n                    device_info: null,\n                    method_id: defaultMethodId,\n                    paypal_account: {\n                        order_id: mockedOrderId,\n                    },\n                },\n            };\n\n            await subject.submitPayment(defaultMethodId, mockedOrderId);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: defaultMethodId,\n                paymentData: paymentDataMock,\n            });\n        });\n\n        it('successfully submits payment with provided gateway', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n            const paymentDataMock = {\n                formattedPayload: {\n                    vault_payment_instrument: null,\n                    set_as_default_stored_instrument: null,\n                    device_info: null,\n                    method_id: defaultMethodId,\n                    paypal_account: {\n                        order_id: mockedOrderId,\n                    },\n                },\n            };\n\n            await subject.submitPayment(defaultMethodId, mockedOrderId, defaultGatewayId);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: defaultMethodId,\n                paymentData: paymentDataMock,\n                gatewayId: defaultGatewayId,\n            });\n        });\n    });\n\n    describe('#getShippingOptionOrThrow', () => {\n        it('returns selected shipping option', () => {\n            const consignment = getConsignment();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getConsignmentsOrThrow',\n            ).mockReturnValue([consignment]);\n\n            const output = subject.getShippingOptionOrThrow(consignment.selectedShippingOption?.id);\n\n            expect(output).toStrictEqual(consignment.selectedShippingOption || {});\n        });\n\n        it('returns recommended shipping option if there is no selected ones', () => {\n            const recommendedShippingOption = {\n                ...getShippingOption(),\n                isRecommended: true,\n            };\n\n            const consignment = {\n                ...getConsignment(),\n                availableShippingOptions: [recommendedShippingOption],\n                selectedShippingOption: {\n                    additionalDescription: 'string',\n                    description: 'string',\n                    id: 'string',\n                    isRecommended: true,\n                    imageUrl: 'string',\n                    cost: 12,\n                    transitTime: 'string',\n                    type: 'string',\n                },\n            };\n\n            const updatedConsignment = {\n                ...consignment,\n                selectedShippingOption: recommendedShippingOption,\n            };\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignmentsOrThrow')\n                .mockReturnValueOnce([consignment])\n                .mockReturnValue([updatedConsignment]);\n\n            const output = subject.getShippingOptionOrThrow();\n\n            expect(output).toBe(recommendedShippingOption);\n        });\n\n        it('returns first available shipping option if there is no recommended or selected options', () => {\n            const firstShippingOption = {\n                ...getShippingOption(),\n                id: '1',\n            };\n\n            const secondShippingOption = {\n                ...getShippingOption(),\n                id: '2',\n            };\n\n            const consignment = {\n                ...getConsignment(),\n                availableShippingOptions: [firstShippingOption, secondShippingOption],\n                selectedShippingOption: {\n                    additionalDescription: 'string',\n                    description: 'string',\n                    id: '111',\n                    isRecommended: true,\n                    imageUrl: 'string',\n                    cost: 12,\n                    transitTime: 'string',\n                    type: 'string',\n                },\n            };\n\n            const updatedConsignment = {\n                ...consignment,\n                selectedShippingOption: firstShippingOption,\n            };\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignmentsOrThrow')\n                .mockReturnValueOnce([consignment])\n                .mockReturnValue([updatedConsignment]);\n\n            const output = subject.getShippingOptionOrThrow();\n\n            expect(output).toBe(firstShippingOption);\n        });\n    });\n\n    describe('#getAddress', () => {\n        it('successfully returns valid address', () => {\n            const paypalOrderDetails = getPayPalOrderDetails();\n            const address = {\n                firstName: paypalOrderDetails.payer.name.given_name,\n                lastName: paypalOrderDetails.payer.name.surname,\n                email: paypalOrderDetails.payer.email_address,\n                phone: '',\n                company: '',\n                address1: paypalOrderDetails.payer.address.address_line_1,\n                address2: '',\n                city: paypalOrderDetails.payer.address.admin_area_2,\n                countryCode: paypalOrderDetails.payer.address.country_code,\n                postalCode: paypalOrderDetails.payer.address.postal_code,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalOrderDetails.payer.address.admin_area_1,\n                customFields: [],\n            };\n\n            const output = subject.getAddress(address);\n\n            expect(output).toStrictEqual({\n                firstName: paypalOrderDetails.payer.name.given_name,\n                lastName: paypalOrderDetails.payer.name.surname,\n                email: paypalOrderDetails.payer.email_address,\n                phone: '',\n                company: '',\n                address1: paypalOrderDetails.payer.address.address_line_1,\n                address2: '',\n                city: paypalOrderDetails.payer.address.admin_area_2,\n                countryCode: paypalOrderDetails.payer.address.country_code,\n                postalCode: paypalOrderDetails.payer.address.postal_code,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalOrderDetails.payer.address.admin_area_1,\n                customFields: [],\n            });\n        });\n\n        it('successfully returns valid address with phone number filled in', () => {\n            const paypalOrderDetails = getPayPalOrderDetails();\n            const address = {\n                firstName: paypalOrderDetails.payer.name.given_name,\n                lastName: paypalOrderDetails.payer.name.surname,\n                email: paypalOrderDetails.payer.email_address,\n                phone: '555',\n                company: '',\n                address1: paypalOrderDetails.payer.address.address_line_1,\n                address2: '',\n                city: paypalOrderDetails.payer.address.admin_area_2,\n                countryCode: paypalOrderDetails.payer.address.country_code,\n                postalCode: paypalOrderDetails.payer.address.postal_code,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalOrderDetails.payer.address.admin_area_1,\n                customFields: [],\n            };\n\n            const output = subject.getAddress(address);\n\n            expect(output).toStrictEqual({\n                firstName: paypalOrderDetails.payer.name.given_name,\n                lastName: paypalOrderDetails.payer.name.surname,\n                email: paypalOrderDetails.payer.email_address,\n                phone: '555',\n                company: '',\n                address1: paypalOrderDetails.payer.address.address_line_1,\n                address2: '',\n                city: paypalOrderDetails.payer.address.admin_area_2,\n                countryCode: paypalOrderDetails.payer.address.country_code,\n                postalCode: paypalOrderDetails.payer.address.postal_code,\n                stateOrProvince: '',\n                stateOrProvinceCode: paypalOrderDetails.payer.address.admin_area_1,\n                customFields: [],\n            });\n        });\n    });\n\n    describe('#getBillingAddressFromOrderDetails', () => {\n        it('successfully returns valid billing address from the orderDetails data', () => {\n            const paypalOrderDetails = getPayPalOrderDetails();\n\n            const output = subject.getBillingAddressFromOrderDetails(paypalOrderDetails);\n\n            expect(output).toStrictEqual(getBillingAddressFromOrderDetails());\n        });\n\n        it('successfully returns empty string in phone number', () => {\n            const paypalOrderDetails = {\n                ...getPayPalOrderDetails(),\n                payer: {\n                    ...getPayPalOrderDetails().payer,\n                    phone: {\n                        phone_number: {\n                            national_number: '',\n                        },\n                    },\n                },\n            };\n\n            const output = subject.getBillingAddressFromOrderDetails(paypalOrderDetails);\n\n            expect(output.phone).toBe('');\n        });\n\n        it('successfully returns correct phone number', () => {\n            const paypalOrderDetails = {\n                ...getPayPalOrderDetails(),\n                payer: {\n                    ...getPayPalOrderDetails().payer,\n                    phone: {\n                        phone_number: {\n                            national_number: '555333',\n                        },\n                    },\n                },\n            };\n\n            const output = subject.getBillingAddressFromOrderDetails(paypalOrderDetails);\n\n            expect(output.phone).toBe('555333');\n        });\n    });\n\n    describe('#getShippingAddressFromOrderDetails', () => {\n        it('successfully returns valid shipping address from the orderDetails data', () => {\n            const paypalOrderDetails = getPayPalOrderDetails();\n\n            const output = subject.getShippingAddressFromOrderDetails(paypalOrderDetails);\n\n            expect(output).toStrictEqual(getShippingAddressFromOrderDetails());\n        });\n    });\n\n    describe('#getValidButtonStyle', () => {\n        it('returns valid button style', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: 55,\n                shape: StyleButtonShape.rect,\n            };\n\n            const expects = {\n                ...stylesMock,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns button style without shape if shape is not valid', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: 55,\n                shape: 'ellipse' as StyleButtonShape,\n            };\n\n            const expects = {\n                ...stylesMock,\n                shape: undefined,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns button style without color if color is not valid', () => {\n            const stylesMock = {\n                color: 'red' as StyleButtonColor,\n                height: 55,\n            };\n\n            const expects = {\n                ...stylesMock,\n                color: undefined,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns button style without label if label is not valid', () => {\n            const stylesMock = {\n                height: 55,\n                label: 'label' as StyleButtonLabel,\n            };\n\n            const expects = {\n                ...stylesMock,\n                label: undefined,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns styles with updated height if height value is bigger than expected', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: 110,\n                shape: StyleButtonShape.rect,\n            };\n\n            const expects = {\n                ...stylesMock,\n                height: 55,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns styles with updated height if height value is less than expected', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: 10,\n                shape: StyleButtonShape.rect,\n            };\n\n            const expects = {\n                ...stylesMock,\n                height: 25,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n\n        it('returns styles with default height if height value not provided', () => {\n            const stylesMock = {\n                color: StyleButtonColor.silver,\n                height: undefined,\n                shape: StyleButtonShape.rect,\n            };\n\n            const expects = {\n                ...stylesMock,\n                height: 40,\n            };\n\n            expect(subject.getValidButtonStyle(stylesMock)).toEqual(expects);\n        });\n    });\n\n    describe('#removeElement', () => {\n        it('removed element from dom', () => {\n            const paypalCommerceButtonContainerId = 'paypalCommerceButtonContainer';\n\n            const paypalButtonElement = document.createElement('div');\n\n            paypalButtonElement.id = paypalCommerceButtonContainerId;\n\n            document.body.appendChild(paypalButtonElement);\n\n            const element = document.getElementById(paypalCommerceButtonContainerId);\n\n            expect(element).toBeDefined();\n\n            subject.removeElement(paypalCommerceButtonContainerId);\n\n            const computedStyle = getComputedStyle(element as Element);\n\n            expect(computedStyle.getPropertyValue('display')).toBe('none');\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/paypal-integration-service.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { isNil, omitBy } from 'lodash';\n\nimport {\n    BillingAddressRequestBody,\n    BuyNowCartCreationError,\n    Cart,\n    CartSource,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n    PaymentMethodClientUnavailableError,\n    RequestError,\n    RequestOptions,\n    ShippingOption,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport PayPalRequestSender from './paypal-request-sender';\nimport PayPalSdkScriptLoader from './paypal-sdk-script-loader';\nimport {\n    PayPalButtonStyleOptions,\n    PayPalBuyNowInitializeOptions,\n    PayPalCreateOrderCardFieldsResponse,\n    PayPalCreateOrderRequestBody,\n    PayPalInitializationData,\n    PayPalOrderDetails,\n    PayPalOrderStatus,\n    PayPalSDK,\n    StyleButtonColor,\n    StyleButtonLabel,\n    StyleButtonShape,\n} from './paypal-types';\n\nexport default class PayPalIntegrationService {\n    private paypalSdk?: PayPalSDK;\n\n    constructor(\n        private formPoster: FormPoster,\n        private paymentIntegrationService: PaymentIntegrationService,\n        private paypalRequestSender: PayPalRequestSender,\n        private paypalSdkLoader: PayPalSdkScriptLoader,\n    ) {}\n\n    /**\n     *\n     * PayPalSDK methods\n     *\n     */\n    async loadPayPalSdk(\n        methodId: string,\n        providedCurrencyCode?: string,\n        initializesOnCheckoutPage?: boolean,\n        forceLoad?: boolean,\n    ): Promise<PayPalSDK | undefined> {\n        const state = this.paymentIntegrationService.getState();\n        const currencyCode = providedCurrencyCode || state.getCartOrThrow().currency.code;\n        const paymentMethod = state.getPaymentMethodOrThrow<PayPalInitializationData>(methodId);\n        const storeLanguage = state.getLocale();\n\n        this.paypalSdk = await this.paypalSdkLoader.getPayPalSDK(\n            paymentMethod,\n            currencyCode,\n            storeLanguage,\n            initializesOnCheckoutPage,\n            forceLoad,\n        );\n\n        return this.paypalSdk;\n    }\n\n    getPayPalSdkOrThrow(): PayPalSDK {\n        if (!this.paypalSdk) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.paypalSdk;\n    }\n\n    /**\n     *\n     * Buy Now cart creation methods\n     *\n     */\n    async createBuyNowCartOrThrow(\n        buyNowInitializeOptions: PayPalBuyNowInitializeOptions,\n    ): Promise<Cart> {\n        const cartRequestBody = buyNowInitializeOptions.getBuyNowCartRequestBody();\n\n        if (!cartRequestBody) {\n            throw new MissingDataError(MissingDataErrorType.MissingCart);\n        }\n\n        try {\n            return await this.paymentIntegrationService.createBuyNowCart(cartRequestBody);\n        } catch (error) {\n            throw new BuyNowCartCreationError();\n        }\n    }\n\n    /**\n     *\n     * Order methods\n     *\n     */\n    async createOrder(\n        providerId: string,\n        requestBody?: Partial<PayPalCreateOrderRequestBody>,\n    ): Promise<string> {\n        const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n        const { orderId } = await this.paypalRequestSender.createOrder(providerId, {\n            cartId,\n            ...requestBody,\n        });\n\n        return orderId;\n    }\n\n    async createOrderCardFields(\n        providerId: string,\n        requestBody?: Partial<PayPalCreateOrderRequestBody>,\n    ): Promise<PayPalCreateOrderCardFieldsResponse> {\n        const cartId = this.paymentIntegrationService.getState().getCartOrThrow().id;\n\n        const { orderId, setupToken } = await this.paypalRequestSender.createOrder(providerId, {\n            cartId,\n            ...requestBody,\n        });\n\n        return { orderId, ...(setupToken ? { setupToken } : {}) };\n    }\n\n    async updateOrder(\n        providerId: string,\n        methodId?: string,\n        orderId?: number,\n        isServerSideShippingCallbacksEnabled?: boolean,\n    ): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const cart = state.getCartOrThrow();\n        let consignment;\n        if (!isServerSideShippingCallbacksEnabled) {\n            consignment = state.getConsignmentsOrThrow()[0];\n        }\n\n        try {\n            await this.paypalRequestSender.updateOrder(providerId, {\n                availableShippingOptions: isServerSideShippingCallbacksEnabled\n                    ? []\n                    : consignment?.availableShippingOptions,\n                cartId: cart.id,\n                selectedShippingOption: isServerSideShippingCallbacksEnabled\n                    ? null\n                    : consignment?.selectedShippingOption,\n                ...(methodId ? { methodId } : {}),\n                ...(orderId ? { orderId } : {}),\n            });\n        } catch (_error) {\n            throw new RequestError();\n        }\n    }\n\n    async getOrderStatus(methodId: string, options?: RequestOptions): Promise<PayPalOrderStatus> {\n        try {\n            const { status } = await this.paypalRequestSender.getOrderStatus(methodId, options);\n\n            return status;\n        } catch (_error) {\n            throw new RequestError();\n        }\n    }\n\n    /**\n     *\n     * Payment submitting and tokenizing methods\n     *\n     */\n    tokenizePayment(methodId: string, orderId?: string): void {\n        const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n\n        if (!orderId) {\n            throw new MissingDataError(MissingDataErrorType.MissingOrderId);\n        }\n\n        return this.formPoster.postForm('/checkout.php', {\n            payment_type: 'paypal',\n            action: 'set_external_checkout',\n            provider: methodId,\n            order_id: orderId,\n            ...(cart.source === CartSource.BuyNow && { cart_id: cart.id }),\n        });\n    }\n\n    async submitPayment(methodId: string, orderId: string, gatewayId?: string): Promise<void> {\n        const paymentData = {\n            formattedPayload: {\n                vault_payment_instrument: null,\n                set_as_default_stored_instrument: null,\n                device_info: null,\n                method_id: methodId,\n                paypal_account: {\n                    order_id: orderId,\n                },\n            },\n        };\n\n        await this.paymentIntegrationService.submitPayment({\n            methodId,\n            paymentData,\n            ...(gatewayId ? { gatewayId } : {}),\n        });\n    }\n\n    /**\n     *\n     * Shipping options methods\n     *\n     */\n    getShippingOptionOrThrow(selectedShippingOptionId?: string): ShippingOption {\n        const state = this.paymentIntegrationService.getState();\n        const consignment = state.getConsignmentsOrThrow()[0];\n\n        const availableShippingOptions = consignment.availableShippingOptions || [];\n\n        const recommendedShippingOption = availableShippingOptions.find(\n            (option) => option.isRecommended,\n        );\n\n        const selectedShippingOption = selectedShippingOptionId\n            ? availableShippingOptions.find((option) => option.id === selectedShippingOptionId)\n            : availableShippingOptions.find((option) => {\n                  if (consignment.selectedShippingOption) {\n                      const shippingOptionId = consignment.selectedShippingOption.id;\n\n                      return option.id === shippingOptionId;\n                  }\n\n                  return false;\n              });\n\n        const shippingOptionToSelect =\n            selectedShippingOption || recommendedShippingOption || availableShippingOptions[0];\n\n        if (!shippingOptionToSelect) {\n            throw new Error(\"Your order can't be shipped to this address\");\n        }\n\n        return shippingOptionToSelect;\n    }\n\n    /**\n     *\n     * Address transforming methods\n     *\n     */\n    getAddress(address?: Partial<BillingAddressRequestBody>): BillingAddressRequestBody {\n        return {\n            firstName: address?.firstName || '',\n            lastName: address?.lastName || '',\n            email: address?.email || '',\n            phone: address?.phone || '',\n            company: '',\n            address1: address?.address1 || '',\n            address2: address?.address2 || '',\n            city: address?.city || '',\n            countryCode: address?.countryCode || '',\n            postalCode: address?.postalCode || '',\n            stateOrProvince: '',\n            stateOrProvinceCode: address?.stateOrProvinceCode || '',\n            customFields: [],\n        };\n    }\n\n    getBillingAddressFromOrderDetails({ payer }: PayPalOrderDetails): BillingAddressRequestBody {\n        return this.getAddress({\n            firstName: payer.name.given_name,\n            lastName: payer.name.surname,\n            email: payer.email_address,\n            address1: payer.address.address_line_1,\n            address2: payer.address.address_line_2,\n            city: payer.address.admin_area_2,\n            countryCode: payer.address.country_code,\n            postalCode: payer.address.postal_code,\n            stateOrProvinceCode: payer.address.admin_area_1,\n            phone: payer.phone?.phone_number?.national_number,\n        });\n    }\n\n    getShippingAddressFromOrderDetails(\n        orderDetails: PayPalOrderDetails,\n    ): BillingAddressRequestBody {\n        const { payer, purchase_units } = orderDetails;\n        const {\n            address,\n            name: { full_name },\n        } = purchase_units[0].shipping;\n\n        const [firstName, ...lastName] = full_name.split(' ');\n\n        return this.getAddress({\n            firstName,\n            lastName: lastName.join(' '),\n            email: payer.email_address,\n            address1: address.address_line_1,\n            address2: address.address_line_2,\n            city: address.admin_area_2,\n            countryCode: address.country_code,\n            postalCode: address.postal_code,\n            stateOrProvinceCode: address.admin_area_1,\n        });\n    }\n\n    /**\n     *\n     * Buttons style methods\n     *\n     */\n    getValidButtonStyle(style: PayPalButtonStyleOptions = {}): PayPalButtonStyleOptions {\n        const { color, height, label, shape } = style;\n\n        const validStyles = {\n            color: color && StyleButtonColor[color] ? color : undefined,\n            height: this.getValidHeight(height),\n            label: label && StyleButtonLabel[label] ? label : undefined,\n            shape: shape && StyleButtonShape[shape] ? shape : undefined,\n        };\n\n        return omitBy(validStyles, isNil);\n    }\n\n    getValidHeight(height?: number): number {\n        const defaultHeight = 40;\n        const minHeight = 25;\n        const maxHeight = 55;\n\n        if (!height || typeof height !== 'number') {\n            return defaultHeight;\n        }\n\n        if (height > maxHeight) {\n            return maxHeight;\n        }\n\n        if (height < minHeight) {\n            return minHeight;\n        }\n\n        return height;\n    }\n\n    /**\n     *\n     * Utils methods\n     *\n     */\n    removeElement(elementId?: string): void {\n        const element = elementId && document.getElementById(elementId);\n\n        if (element) {\n            // For now this is a temporary solution, further removeElement method will be removed\n            element.style.display = 'none';\n        }\n    }\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/paypal-request-sender.spec.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { getResponse } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport PayPalRequestSender from './paypal-request-sender';\n\ndescribe('PayPalRequestSender', () => {\n    let requestSender: RequestSender;\n    let paypalRequestSender: PayPalRequestSender;\n\n    beforeEach(() => {\n        requestSender = createRequestSender();\n        paypalRequestSender = new PayPalRequestSender(requestSender);\n\n        const requestResponseMock = getResponse({ orderId: 123 });\n\n        jest.spyOn(requestSender, 'get').mockReturnValue(Promise.resolve(requestResponseMock));\n        jest.spyOn(requestSender, 'post').mockReturnValue(Promise.resolve(requestResponseMock));\n        jest.spyOn(requestSender, 'put').mockReturnValue(Promise.resolve(requestResponseMock));\n    });\n\n    it('creates order with provided data', async () => {\n        const requestBody = {\n            cartId: 'abc',\n            instrumentId: 'vaultedInstrumentId',\n        };\n\n        await paypalRequestSender.createOrder('paypalcommerce', requestBody);\n\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        expect(requestSender.post).toHaveBeenCalledWith(\n            '/api/storefront/payment/paypalcommerce',\n            expect.objectContaining({\n                body: requestBody,\n                headers,\n            }),\n        );\n    });\n\n    it('update order with provided data', async () => {\n        const shippingOptionMock = {\n            additionalDescription: 'Additional description',\n            description: 'Main description',\n            id: '1',\n            isRecommended: true,\n            imageUrl: '',\n            cost: 1,\n            transitTime: '123',\n            type: 'type',\n        };\n\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        const updateOrderRequestBody = {\n            availableShippingOptions: [shippingOptionMock],\n            cartId: 'abc',\n            selectedShippingOption: shippingOptionMock,\n        };\n\n        await paypalRequestSender.updateOrder('paypalcommerce', updateOrderRequestBody);\n\n        expect(requestSender.put).toHaveBeenCalledWith(\n            '/api/storefront/initialization/paypalcommerce',\n            expect.objectContaining({\n                body: updateOrderRequestBody,\n                headers,\n            }),\n        );\n    });\n\n    it('requests order status with proper data', async () => {\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        await paypalRequestSender.getOrderStatus('paypalcommercealternativemethods', {\n            params: { useMetaData: true },\n        });\n\n        expect(requestSender.get).toHaveBeenCalledWith(\n            '/api/storefront/initialization/paypalcommercealternativemethods',\n            expect.objectContaining({\n                headers,\n            }),\n        );\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/paypal-request-sender.ts",
    "content": "import { RequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    ContentType,\n    INTERNAL_USE_ONLY,\n    RequestOptions,\n    SDK_VERSION_HEADERS,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    PayPalCreateOrderRequestBody,\n    PayPalOrderData,\n    PayPalOrderStatusData,\n    PayPalUpdateOrderRequestBody,\n    PayPalUpdateOrderResponse,\n} from './paypal-types';\n\nexport default class PayPalRequestSender {\n    constructor(private requestSender: RequestSender) {}\n\n    async createOrder(\n        providerId: string,\n        requestBody: Partial<PayPalCreateOrderRequestBody>,\n    ): Promise<PayPalOrderData> {\n        const url = `/api/storefront/payment/${providerId}`;\n        const body = requestBody;\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        const res = await this.requestSender.post<PayPalOrderData>(url, { headers, body });\n\n        return res.body;\n    }\n\n    async updateOrder(\n        methodId: string,\n        requestBody: PayPalUpdateOrderRequestBody,\n    ): Promise<PayPalUpdateOrderResponse> {\n        const url = `/api/storefront/initialization/${methodId}`;\n        const body = requestBody;\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        const res = await this.requestSender.put<PayPalUpdateOrderResponse>(url, { headers, body });\n\n        return res.body;\n    }\n\n    async getOrderStatus(\n        methodId: string,\n        options?: RequestOptions,\n    ): Promise<PayPalOrderStatusData> {\n        const url = `/api/storefront/initialization/${methodId}`;\n        const headers = {\n            'X-API-INTERNAL': INTERNAL_USE_ONLY,\n            'Content-Type': ContentType.Json,\n            ...SDK_VERSION_HEADERS,\n        };\n\n        const res = await this.requestSender.get<PayPalOrderStatusData>(url, {\n            headers,\n            ...options,\n        });\n\n        return res.body;\n    }\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/paypal-sdk-script-loader.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    getPayPalAcceleratedCheckoutPaymentMethod,\n    getPayPalFastlaneSdk,\n    getPayPalSDKMock,\n} from './mocks';\nimport PayPalSdkScriptLoader from './paypal-sdk-script-loader';\nimport {\n    PayPalApmSdk,\n    PayPalFastlaneSdk,\n    PayPalGooglePaySdk,\n    PayPalHostWindow,\n    PayPalMessagesSdk,\n    PayPalSDK,\n} from './paypal-types';\n\ndescribe('PayPalSdkLoader', () => {\n    let loader: ScriptLoader;\n    let paymentMethod: PaymentMethod;\n    let paypalFastlaneSdk: PayPalFastlaneSdk;\n    let paypalSdk: PayPalSDK;\n    let subject: PayPalSdkScriptLoader;\n    let mockAPMPaymentMethod: PaymentMethod;\n\n    const paypalMessagesSdk: PayPalMessagesSdk = {\n        Messages: jest.fn(),\n    };\n\n    const paypalApmsSdk: PayPalApmSdk = {\n        Buttons: jest.fn(),\n        PaymentFields: jest.fn(),\n    };\n\n    const payPalGooglePaySdk: PayPalGooglePaySdk = {\n        Googlepay: jest.fn(),\n    };\n\n    const sessionId = '8a232bf4-d9ba-4621-a1a9-ed8f685f92d1';\n    const expectedSessionId = sessionId.replace(/-/g, '');\n\n    beforeEach(() => {\n        loader = createScriptLoader();\n        paymentMethod = getPayPalAcceleratedCheckoutPaymentMethod();\n        mockAPMPaymentMethod = {\n            ...paymentMethod,\n            id: 'oxxo',\n            initializationData: {\n                ...paymentMethod.initializationData,\n                enabledAlternativePaymentMethods: ['oxxo'],\n                availableAlternativePaymentMethods: ['oxxo'],\n            },\n        };\n        paypalFastlaneSdk = getPayPalFastlaneSdk();\n        paypalSdk = getPayPalSDKMock();\n        subject = new PayPalSdkScriptLoader(loader);\n\n        jest.spyOn(loader, 'loadScript').mockImplementation(() => {\n            (window as PayPalHostWindow).paypal = paypalSdk;\n            (window as PayPalHostWindow).paypalFastlaneSdk = paypalFastlaneSdk;\n            (window as PayPalHostWindow).paypalMessages = paypalMessagesSdk;\n            (window as PayPalHostWindow).paypalApms = paypalApmsSdk;\n            (window as PayPalHostWindow).paypalGooglePay = payPalGooglePaySdk;\n\n            return Promise.resolve();\n        });\n    });\n\n    afterEach(() => {\n        (window as PayPalHostWindow).paypal = undefined;\n        (window as PayPalHostWindow).paypalFastlaneSdk = undefined;\n        (window as PayPalHostWindow).paypalMessages = undefined;\n        (window as PayPalHostWindow).paypalApms = undefined;\n        (window as PayPalHostWindow).paypalGooglePay = undefined;\n\n        jest.clearAllMocks();\n    });\n\n    describe('#getPayPalSDK()', () => {\n        it('throws an error if initializationData is missing', async () => {\n            const paymentMethodProp = {\n                ...paymentMethod,\n                initializationData: undefined,\n            };\n\n            try {\n                await subject.getPayPalSDK(paymentMethodProp, 'USD', 'en-US');\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientId: undefined,\n                },\n            };\n\n            try {\n                await subject.getPayPalSDK(mockPaymentMethod, 'USD', 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads PayPalSDK with default configuration', async () => {\n            await subject.getPayPalSDK(paymentMethod, 'USD', 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US',\n                {\n                    async: true,\n                    attributes: {\n                        'data-partner-attribution-id':\n                            paymentMethod.initializationData.attributionId,\n                        'data-client-token': paymentMethod.clientToken,\n                    },\n                },\n            );\n        });\n\n        it('loads PayPalSDK script every time if force load flag is provided', async () => {\n            const paypalCommerceCreditPaymentMethod = {\n                ...paymentMethod,\n                id: 'paypalcommercecreditcard',\n            };\n\n            await subject.getPayPalSDK(paymentMethod, 'USD', 'en-US');\n            await subject.getPayPalSDK(\n                paypalCommerceCreditPaymentMethod,\n                'USD',\n                'en-US',\n                false,\n                true,\n            );\n\n            expect(loader.loadScript).toHaveBeenCalledTimes(2);\n        });\n\n        it('loads PayPalSDK script with EUR currency', async () => {\n            await subject.getPayPalSDK(paymentMethod, 'EUR', 'en-US');\n\n            const paypalSdkScriptSrc =\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=EUR&intent=capture&locale=en_US';\n            const paypalSdkAttributes = {\n                'data-client-token': paymentMethod.clientToken,\n                'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            };\n\n            expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n                async: true,\n                attributes: paypalSdkAttributes,\n            });\n        });\n\n        it('loads PayPalCommerce script with disabled card funding', async () => {\n            await subject.getPayPalSDK(paymentMethod, 'USD', 'en-US');\n\n            const paypalSdkScriptSrc =\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n            const paypalSdkAttributes = {\n                'data-client-token': paymentMethod.clientToken,\n                'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            };\n\n            expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n                async: true,\n                attributes: paypalSdkAttributes,\n            });\n        });\n\n        it('loads PayPalCommerce script with disabled credit funding', async () => {\n            const paymentMethodProp = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isPayPalCreditAvailable: false,\n                },\n            };\n\n            await subject.getPayPalSDK(paymentMethodProp, 'USD', 'en-US');\n\n            const paypalSdkScriptSrc =\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n            const paypalSdkAttributes = {\n                'data-client-token': paymentMethod.clientToken,\n                'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            };\n\n            expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n                async: true,\n                attributes: paypalSdkAttributes,\n            });\n        });\n\n        it('loads PayPalCommerce script with enabled Venmo funding', async () => {\n            const paymentMethodProp = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isVenmoEnabled: true,\n                },\n            };\n\n            await subject.getPayPalSDK(paymentMethodProp, 'USD', 'en-US');\n\n            const paypalSdkScriptSrc =\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=venmo&disable-funding=card%2Ccredit%2Cpaylater&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n            const paypalSdkAttributes = {\n                'data-client-token': paymentMethod.clientToken,\n                'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            };\n\n            expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n                async: true,\n                attributes: paypalSdkAttributes,\n            });\n        });\n\n        it('loads PayPalCommerce script with enabled several APMs', async () => {\n            const paymentMethodProp = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    availableAlternativePaymentMethods: [\n                        'bancontact',\n                        'giropay',\n                        'ideal',\n                        'mybank',\n                        'sofort',\n                        'sepa',\n                    ],\n                    enabledAlternativePaymentMethods: ['bancontact', 'giropay', 'ideal'],\n                },\n            };\n\n            await subject.getPayPalSDK(paymentMethodProp, 'USD', 'en-US');\n\n            const paypalSdkScriptSrc =\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=bancontact%2Cgiropay%2Cideal&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo%2Cmybank%2Csofort%2Csepa&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n            const paypalSdkAttributes = {\n                'data-client-token': paymentMethod.clientToken,\n                'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            };\n\n            expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n                async: true,\n                attributes: paypalSdkAttributes,\n            });\n        });\n\n        it('loads PayPalSDK script with commit flag as true', async () => {\n            await subject.getPayPalSDK(paymentMethod, 'USD', 'en-US', true);\n\n            const paypalSdkScriptSrc =\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=true&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal%2Ccard-fields&currency=USD&intent=capture&locale=en_US';\n            const paypalSdkAttributes = {\n                'data-client-token': paymentMethod.clientToken,\n                'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            };\n\n            expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n                async: true,\n                attributes: paypalSdkAttributes,\n            });\n        });\n\n        it('loads PayPalSDK script with commit flag as false', async () => {\n            await subject.getPayPalSDK(paymentMethod, 'USD', 'en-US', false);\n\n            const paypalSdkScriptSrc =\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture&locale=en_US';\n            const paypalSdkAttributes = {\n                'data-client-token': paymentMethod.clientToken,\n                'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            };\n\n            expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n                async: true,\n                attributes: paypalSdkAttributes,\n            });\n        });\n\n        it('successfully loads PayPalSDK script with commit flag as false if Skip Checkout feature off', async () => {\n            const paymentMethodMock = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedFormEnabled: false,\n                },\n            };\n\n            await subject.getPayPalSDK(paymentMethodMock, 'USD', 'en-US', false);\n\n            const paypalSdkScriptSrc =\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture&locale=en_US';\n            const paypalSdkAttributes = {\n                'data-client-token': paymentMethod.clientToken,\n                'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            };\n\n            expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n                async: true,\n                attributes: paypalSdkAttributes,\n            });\n        });\n\n        it('successfully enables all provided funding sources if methodId equals paypalcommercecreditcards', async () => {\n            const paymentMethodMock = {\n                ...paymentMethod,\n                id: 'paypalcommercecreditcards',\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: false,\n                    isVenmoEnabled: true,\n                    isPayPalCreditAvailable: true,\n                    availableAlternativePaymentMethods: [],\n                    enabledAlternativePaymentMethods: [],\n                },\n            };\n\n            await subject.getPayPalSDK(paymentMethodMock, 'USD', 'en-US', false);\n\n            const paypalSdkScriptSrc =\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture&locale=en_US';\n            const paypalSdkAttributes = {\n                'data-client-token': paymentMethod.clientToken,\n                'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            };\n\n            expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n                async: true,\n                attributes: paypalSdkAttributes,\n            });\n        });\n\n        it('successfully enables all provided funding sources if methodId equals bigcommerce_payments_creditcards', async () => {\n            const paymentMethodMock = {\n                ...paymentMethod,\n                id: 'bigcommerce_payments_creditcards',\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    isHostedCheckoutEnabled: false,\n                    isVenmoEnabled: true,\n                    isPayPalCreditAvailable: true,\n                    availableAlternativePaymentMethods: [],\n                    enabledAlternativePaymentMethods: [],\n                },\n            };\n\n            await subject.getPayPalSDK(paymentMethodMock, 'USD', 'en-US', false);\n\n            const paypalSdkScriptSrc =\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture&locale=en_US';\n            const paypalSdkAttributes = {\n                'data-client-token': paymentMethod.clientToken,\n                'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            };\n\n            expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n                async: true,\n                attributes: paypalSdkAttributes,\n            });\n        });\n\n        it('successfully loads paypal sdk with dev configuration', async () => {\n            const paymentMethodMock = {\n                ...paymentMethod,\n                id: 'paypalcommerce',\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    buyerCountry: 'UA',\n                    isDeveloperModeApplicable: true,\n                },\n            };\n\n            await subject.getPayPalSDK(paymentMethodMock, 'USD', 'en-US', false);\n\n            const paypalSdkScriptSrc =\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture&buyer-country=UA&locale=en_US';\n            const paypalSdkAttributes = {\n                'data-client-token': paymentMethod.clientToken,\n                'data-partner-attribution-id': paymentMethod.initializationData.attributionId,\n            };\n\n            expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n                async: true,\n                attributes: paypalSdkAttributes,\n            });\n        });\n\n        it('successfully loads paypal sdk without nil values in configuration', async () => {\n            const paymentMethodMock = {\n                ...paymentMethod,\n                clientToken: '',\n                id: 'paypalcommerce',\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    attributionId: '',\n                    merchantId: null,\n                },\n            };\n\n            await subject.getPayPalSDK(paymentMethodMock, 'USD', 'en-US', false);\n\n            const paypalSdkScriptSrc =\n                'https://www.paypal.com/sdk/js?client-id=abc&disable-funding=card%2Ccredit%2Cpaylater%2Cvenmo&commit=false&components=buttons%2Chosted-fields%2Cpayment-fields%2Clegal&currency=USD&intent=capture&locale=en_US';\n            const paypalSdkAttributes = {};\n\n            expect(loader.loadScript).toHaveBeenCalledWith(paypalSdkScriptSrc, {\n                async: true,\n                attributes: paypalSdkAttributes,\n            });\n        });\n\n        it('returns PayPal Sdk', async () => {\n            const result = await subject.getPayPalSDK(paymentMethod, 'USD', 'en-US');\n\n            expect(result).toEqual(paypalSdk);\n        });\n\n        it('throw error if unable to load Paypal script', async () => {\n            const expectedError = new PaymentMethodClientUnavailableError();\n\n            jest.spyOn(loader, 'loadScript').mockImplementation(() => {\n                throw expectedError;\n            });\n\n            try {\n                await subject.getPayPalSDK(paymentMethod, 'USD', 'en-US');\n            } catch (error) {\n                expect(error).toEqual(expectedError);\n            }\n        });\n    });\n\n    describe('#getPayPalFastlaneSdk()', () => {\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientId: undefined,\n                },\n            };\n\n            try {\n                await subject.getPayPalFastlaneSdk(mockPaymentMethod, 'USD', sessionId, 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads PayPal Fastlane sdk script', async () => {\n            await subject.getPayPalFastlaneSdk(paymentMethod, 'USD', sessionId, 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&commit=true&components=fastlane%2Cbuttons%2Cpayment-fields%2Chosted-fields%2Cthree-domain-secure&currency=USD&locale=en_US&intent=capture',\n                {\n                    async: true,\n                    attributes: {\n                        'data-client-metadata-id': expectedSessionId,\n                        'data-namespace': 'paypalFastlaneSdk',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                        'data-sdk-client-token': 'asdcvY7XFSQasd',\n                    },\n                },\n            );\n        });\n\n        // TODO: remove this test when A/B testing will be finished\n        it('loads PayPal Fastlane Sdk script with connectClientToken for paypalcommercecreditcards method', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                methodId: 'paypalcommercecreditcards',\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientToken: undefined,\n                    connectClientToken: 'connectClientToken123',\n                },\n            };\n\n            await subject.getPayPalFastlaneSdk(mockPaymentMethod, 'USD', sessionId, 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&commit=true&components=fastlane%2Cbuttons%2Cpayment-fields%2Chosted-fields%2Cthree-domain-secure&currency=USD&locale=en_US&intent=capture',\n                {\n                    async: true,\n                    attributes: {\n                        'data-client-metadata-id': expectedSessionId,\n                        'data-namespace': 'paypalFastlaneSdk',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                        'data-sdk-client-token': 'asdcvY7XFSQasd',\n                    },\n                },\n            );\n        });\n\n        it('throws an error if there was an issue with loading PayPal Fastlane Sdk', async () => {\n            jest.spyOn(loader, 'loadScript').mockImplementation(jest.fn());\n\n            try {\n                await subject.getPayPalFastlaneSdk(paymentMethod, 'USD', sessionId, 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('returns PayPal Fastlane Sdk', async () => {\n            const result = await subject.getPayPalFastlaneSdk(\n                paymentMethod,\n                'USD',\n                sessionId,\n                'en-US',\n            );\n\n            expect(result).toEqual(paypalFastlaneSdk);\n        });\n    });\n\n    describe('#getPayLaterMessages()', () => {\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientId: undefined,\n                },\n            };\n\n            try {\n                await subject.getPayPalMessages(mockPaymentMethod, 'USD', 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads PayLater Messages sdk script', async () => {\n            await subject.getPayPalMessages(paymentMethod, 'USD', 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&components=messages&currency=USD&locale=en_US',\n                {\n                    async: true,\n                    attributes: {\n                        'data-namespace': 'paypalMessages',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                    },\n                },\n            );\n        });\n\n        it('throws an error if there was an issue with loading paylater messages sdk', async () => {\n            jest.spyOn(loader, 'loadScript').mockImplementation(jest.fn());\n\n            try {\n                await subject.getPayPalMessages(paymentMethod, 'USD', 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('returns PayPal Messages Sdk', async () => {\n            const result = await subject.getPayPalMessages(paymentMethod, 'USD', 'en-US');\n\n            expect(result).toEqual(paypalMessagesSdk);\n        });\n    });\n\n    describe('#getPayPalGooglePaySdk()', () => {\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            const mockPaymentMethod = {\n                ...paymentMethod,\n                initializationData: {\n                    ...paymentMethod.initializationData,\n                    clientId: undefined,\n                },\n            };\n\n            try {\n                await subject.getPayPalGooglePaySdk(mockPaymentMethod, 'USD', 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads PayPal Google Pay sdk script', async () => {\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&commit=true&components=googlepay&currency=USD&intent=capture&locale=en_US',\n                {\n                    async: true,\n                    attributes: {\n                        'data-namespace': 'paypalGooglePay',\n                        'data-client-token': 'asdcvY7XFSQasd',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                    },\n                },\n            );\n        });\n\n        it('throws an error if there was an issue with loading paypal google pay sdk', async () => {\n            jest.spyOn(loader, 'loadScript').mockImplementation(jest.fn());\n\n            try {\n                await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('returns PayPal Google Pay Sdk', async () => {\n            const result = await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US');\n\n            expect(result).toEqual(payPalGooglePaySdk);\n        });\n\n        it('does not load Google Pay Sdk if already exist', async () => {\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US');\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledTimes(1);\n        });\n\n        it('reload Google Pay Sdk', async () => {\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US');\n            await subject.getPayPalGooglePaySdk(paymentMethod, 'USD', 'en-US', false, true);\n\n            expect(loader.loadScript).toHaveBeenCalledTimes(2);\n        });\n    });\n\n    describe('#getPayPalApmsSdk()', () => {\n        it('throws an error if clientId is not defined in payment method while getting configuration for PayPal Sdk', async () => {\n            try {\n                await subject.getPayPalApmsSdk(\n                    {\n                        ...mockAPMPaymentMethod,\n                        initializationData: {\n                            ...mockAPMPaymentMethod.initializationData,\n                            clientId: undefined,\n                        },\n                    },\n                    'USD',\n                    'en-US',\n                );\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('loads APMs sdk script', async () => {\n            await subject.getPayPalApmsSdk(mockAPMPaymentMethod, 'USD', 'en-US');\n\n            expect(loader.loadScript).toHaveBeenCalledWith(\n                'https://www.paypal.com/sdk/js?client-id=abc&merchant-id=JTS4DY7XFSQZE&enable-funding=oxxo&commit=true&components=buttons%2Cpayment-fields&currency=USD&intent=capture&locale=en_US',\n                {\n                    async: true,\n                    attributes: {\n                        'data-namespace': 'paypalApms',\n                        'data-partner-attribution-id': '1123JLKJASD12',\n                    },\n                },\n            );\n        });\n\n        it('throws an error if there was an issue with loading APMs sdk', async () => {\n            jest.spyOn(loader, 'loadScript').mockImplementation(jest.fn());\n\n            try {\n                await subject.getPayPalApmsSdk(mockAPMPaymentMethod, 'USD', 'en-US');\n            } catch (error: unknown) {\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n\n        it('returns PayPal APMs Sdk', async () => {\n            const result = await subject.getPayPalApmsSdk(paymentMethod, 'USD', 'en-US');\n\n            expect(result).toEqual(paypalApmsSdk);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/paypal-sdk-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentMethod,\n    PaymentMethodClientUnavailableError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    FundingType,\n    PayPalFastlaneSdk,\n    PayPalGooglePaySdk,\n    PayPalHostWindow,\n    PayPalInitializationData,\n    PayPalMessagesSdk,\n    PayPalSDK,\n    PayPalSdkComponents,\n    PayPalSdkConfig,\n} from './paypal-types';\nimport { transformLocaleToPayPalFormat } from './utils';\n\nexport default class PayPalSdkScriptLoader {\n    private window: PayPalHostWindow;\n\n    constructor(private scriptLoader: ScriptLoader) {\n        this.window = window;\n    }\n\n    async getPayPalSDK(\n        paymentMethod: PaymentMethod<PayPalInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n        initializesOnCheckoutPage?: boolean,\n        forceLoad?: boolean,\n    ): Promise<PayPalSDK> {\n        if (!this.window.paypal || forceLoad) {\n            const paypalSdkScriptConfig = this.getPayPalSdkScriptConfigOrThrow(\n                paymentMethod,\n                currencyCode,\n                storeLanguage,\n                initializesOnCheckoutPage,\n            );\n\n            await this.loadPayPalSdk(paypalSdkScriptConfig);\n\n            if (!this.window.paypal) {\n                throw new PaymentMethodClientUnavailableError();\n            }\n        }\n\n        return this.window.paypal;\n    }\n\n    async getPayPalFastlaneSdk(\n        paymentMethod: PaymentMethod<PayPalInitializationData>,\n        currencyCode: string,\n        sessionId: string,\n        storeLanguage: string | undefined,\n    ): Promise<PayPalFastlaneSdk> {\n        if (!this.window.paypalFastlaneSdk) {\n            const config = this.getPayPalFastlaneSdkConfiguration(\n                paymentMethod,\n                currencyCode,\n                sessionId,\n                storeLanguage,\n            );\n\n            await this.loadPayPalSdk(config);\n\n            if (!this.window.paypalFastlaneSdk) {\n                throw new PaymentMethodClientUnavailableError();\n            }\n        }\n\n        return this.window.paypalFastlaneSdk;\n    }\n\n    async getPayPalGooglePaySdk(\n        paymentMethod: PaymentMethod<PayPalInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n        initializesOnCheckoutPage?: boolean,\n        forceLoad?: boolean,\n    ): Promise<PayPalGooglePaySdk> {\n        if (!this.window.paypalGooglePay || forceLoad) {\n            const paypalSdkScriptConfig = this.getPayPalGooglePaySdkScriptConfigOrThrow(\n                paymentMethod,\n                currencyCode,\n                storeLanguage,\n                initializesOnCheckoutPage,\n            );\n\n            await this.loadPayPalSdk(paypalSdkScriptConfig);\n        }\n\n        if (!this.window.paypalGooglePay) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.window.paypalGooglePay;\n    }\n\n    async getPayPalApmsSdk(\n        paymentMethod: PaymentMethod<PayPalInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n    ) {\n        if (!this.window.paypalApms) {\n            const config = this.getPayPalApmSdkConfiguration(\n                paymentMethod,\n                currencyCode,\n                storeLanguage,\n            );\n\n            await this.loadPayPalSdk(config);\n\n            if (!this.window.paypalApms) {\n                throw new PaymentMethodClientUnavailableError();\n            }\n        }\n\n        return this.window.paypalApms;\n    }\n\n    async getPayPalMessages(\n        paymentMethod: PaymentMethod<PayPalInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n    ): Promise<PayPalMessagesSdk> {\n        if (!this.window.paypalMessages) {\n            const paypalSdkMessagesConfig = this.getPayPalSdkMessagesConfiguration(\n                paymentMethod,\n                currencyCode,\n                storeLanguage,\n            );\n\n            await this.loadPayPalSdk(paypalSdkMessagesConfig);\n        }\n\n        if (!this.window.paypalMessages) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.window.paypalMessages;\n    }\n\n    /**\n     *\n     *  loadPayPalSdk is a paypal sdk script loader\n     *  which loads paypal sdk based on provided configuration\n     *\n     */\n    private async loadPayPalSdk({ options, attributes }: PayPalSdkConfig): Promise<void> {\n        const scriptOptions = this.transformConfig<PayPalSdkConfig['options']>(options);\n        const scriptAttributes = this.transformConfig<PayPalSdkConfig['attributes']>(attributes);\n\n        const paypalSdkUrl = 'https://www.paypal.com/sdk/js';\n        const scriptQuery = new URLSearchParams(scriptOptions).toString();\n        const scriptSrc = `${paypalSdkUrl}?${scriptQuery}`;\n\n        await this.scriptLoader.loadScript(scriptSrc, {\n            async: true,\n            attributes: scriptAttributes,\n        });\n    }\n\n    /**\n     *\n     * Configurations section\n     *\n     */\n    private getPayPalSdkScriptConfigOrThrow(\n        paymentMethod: PaymentMethod<PayPalInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n        initializesOnCheckoutPage = true,\n    ): PayPalSdkConfig {\n        const { id, clientToken, initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            intent,\n            clientId,\n            merchantId,\n            buyerCountry,\n            attributionId,\n            isVenmoEnabled,\n            isHostedCheckoutEnabled,\n            isPayPalCreditAvailable,\n            isDeveloperModeApplicable,\n            availableAlternativePaymentMethods = [],\n            enabledAlternativePaymentMethods = [],\n            isGooglePayEnabled,\n        } = initializationData;\n\n        const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n        const shouldEnableCard =\n            id === 'paypalcommercecreditcards' || id === 'bigcommerce_payments_creditcards';\n        const enableCardFunding = shouldEnableCard ? ['card'] : [];\n        const disableCardFunding = !shouldEnableCard ? ['card'] : [];\n\n        const enableCreditFunding = isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n        const disableCreditFunding = !isPayPalCreditAvailable ? ['credit', 'paylater'] : [];\n\n        const enableVenmoFunding = isVenmoEnabled ? ['venmo'] : [];\n        const disableVenmoFunding = !isVenmoEnabled ? ['venmo'] : [];\n        const disableAPMsFunding = availableAlternativePaymentMethods.filter(\n            (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n        );\n        const googlePayComponent: PayPalSdkComponents = isGooglePayEnabled ? ['googlepay'] : [];\n        const cardFieldsComponent: PayPalSdkComponents = initializesOnCheckoutPage\n            ? ['card-fields']\n            : [];\n        const disableFunding: FundingType = [\n            ...disableCardFunding,\n            ...disableCreditFunding,\n            ...disableVenmoFunding,\n            ...disableAPMsFunding,\n        ];\n        const enableFunding: FundingType = [\n            ...enableCardFunding,\n            ...enableCreditFunding,\n            ...enableVenmoFunding,\n            ...enabledAlternativePaymentMethods,\n        ];\n\n        const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                'enable-funding': enableFunding.length > 0 ? enableFunding : undefined,\n                'disable-funding': disableFunding.length > 0 ? disableFunding : undefined,\n                commit,\n                components: [\n                    'buttons',\n                    'hosted-fields',\n                    'payment-fields',\n                    'legal',\n                    ...googlePayComponent,\n                    ...cardFieldsComponent,\n                ],\n                currency: currencyCode,\n                intent,\n                ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n                ...(locale && { locale }),\n            },\n            attributes: {\n                'data-partner-attribution-id': attributionId,\n                'data-client-token': clientToken,\n            },\n        };\n    }\n\n    private getPayPalFastlaneSdkConfiguration(\n        paymentMethod: PaymentMethod<PayPalInitializationData>,\n        currencyCode: string,\n        sessionId: string,\n        storeLanguage: string | undefined,\n    ): PayPalSdkConfig {\n        const { clientToken, initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const { intent, clientId, merchantId, attributionId } = initializationData;\n\n        const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                commit: true,\n                components: [\n                    'fastlane',\n                    'buttons',\n                    'payment-fields',\n                    'hosted-fields',\n                    'three-domain-secure',\n                ],\n                currency: currencyCode,\n                ...(locale && { locale }),\n                intent,\n            },\n            attributes: {\n                'data-client-metadata-id': sessionId.replace(/-/g, ''),\n                'data-namespace': 'paypalFastlaneSdk',\n                'data-partner-attribution-id': attributionId,\n                'data-sdk-client-token': clientToken,\n            },\n        };\n    }\n\n    private getPayPalGooglePaySdkScriptConfigOrThrow(\n        paymentMethod: PaymentMethod<PayPalInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n        initializesOnCheckoutPage = true,\n    ): PayPalSdkConfig {\n        const { clientToken, initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            intent,\n            clientId,\n            merchantId,\n            buyerCountry,\n            attributionId,\n            isHostedCheckoutEnabled,\n            isDeveloperModeApplicable,\n        } = initializationData;\n\n        const commit = isHostedCheckoutEnabled || initializesOnCheckoutPage;\n\n        const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                commit,\n                components: ['googlepay'],\n                currency: currencyCode,\n                intent,\n                ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n                ...(locale && { locale }),\n            },\n            attributes: {\n                'data-partner-attribution-id': attributionId,\n                'data-client-token': clientToken,\n                'data-namespace': 'paypalGooglePay',\n            },\n        };\n    }\n\n    private getPayPalApmSdkConfiguration(\n        paymentMethod: PaymentMethod<PayPalInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n    ): PayPalSdkConfig {\n        const { initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const {\n            intent,\n            clientId,\n            merchantId,\n            buyerCountry,\n            attributionId,\n            isDeveloperModeApplicable,\n            availableAlternativePaymentMethods = [],\n            enabledAlternativePaymentMethods = [],\n        } = initializationData;\n\n        const enableAPMsFunding = enabledAlternativePaymentMethods;\n        const disableAPMsFunding = availableAlternativePaymentMethods.filter(\n            (apm: string) => !enabledAlternativePaymentMethods.includes(apm),\n        );\n\n        const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                'enable-funding': enableAPMsFunding.length > 0 ? enableAPMsFunding : undefined,\n                'disable-funding': disableAPMsFunding.length > 0 ? disableAPMsFunding : undefined,\n                commit: true,\n                components: ['buttons', 'payment-fields'],\n                currency: currencyCode,\n                intent,\n                ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n                ...(locale && { locale }),\n            },\n            attributes: {\n                'data-partner-attribution-id': attributionId,\n                'data-namespace': 'paypalApms',\n            },\n        };\n    }\n\n    private getPayPalSdkMessagesConfiguration(\n        paymentMethod: PaymentMethod<PayPalInitializationData>,\n        currencyCode: string,\n        storeLanguage: string | undefined,\n    ): PayPalSdkConfig {\n        const { initializationData } = paymentMethod;\n\n        if (!initializationData || !initializationData.clientId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const { clientId, merchantId, attributionId, isDeveloperModeApplicable, buyerCountry } =\n            initializationData;\n\n        const locale = transformLocaleToPayPalFormat(storeLanguage);\n\n        return {\n            options: {\n                'client-id': clientId,\n                'merchant-id': merchantId,\n                components: ['messages'],\n                currency: currencyCode,\n                ...(isDeveloperModeApplicable && { 'buyer-country': buyerCountry }),\n                ...(locale && { locale }),\n            },\n            attributes: {\n                'data-namespace': 'paypalMessages',\n                'data-partner-attribution-id': attributionId,\n            },\n        };\n    }\n\n    /**\n     *\n     * Utils methods\n     *\n     */\n    private transformConfig<T extends Record<string, unknown>>(config: T): Record<string, string> {\n        let transformedConfig = {};\n\n        const keys = Object.keys(config) as Array<keyof T>;\n\n        keys.forEach((key) => {\n            const value = config[key];\n\n            if (\n                value === undefined ||\n                value === null ||\n                value === '' ||\n                (Array.isArray(value) && value.length === 0)\n            ) {\n                return;\n            }\n\n            transformedConfig = {\n                ...transformedConfig,\n                [key]: Array.isArray(value) ? value.join(',') : value,\n            };\n        });\n\n        return transformedConfig;\n    }\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/paypal-types.ts",
    "content": "import {\n    BuyNowCartRequestBody,\n    CardInstrument,\n    CustomerAddress,\n    HostedInstrument,\n    ShippingOption,\n    VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n *\n * PayPal Funding sources\n *\n */\nexport type FundingType = string[];\nexport type EnableFundingType = FundingType | string;\n\nexport interface PayPalCommerceSDKFunding {\n    CARD: string;\n    PAYPAL: string;\n    CREDIT: string;\n    PAYLATER: string;\n    OXXO: string;\n    SEPA: string;\n    VENMO: string;\n}\n\n/**\n *\n * PayPal BuyNow\n *\n */\nexport interface PayPalBuyNowInitializeOptions {\n    getBuyNowCartRequestBody(): BuyNowCartRequestBody;\n}\n\n/**\n *\n * PayPal Initialization Data\n *\n */\nexport interface PayPalInitializationData {\n    attributionId?: string;\n    availableAlternativePaymentMethods: FundingType;\n    buttonStyle?: PayPalButtonStyleOptions;\n    buyerCountry?: string;\n    clientId: string;\n    clientToken?: string;\n    fastlaneStyles?: FastlaneStylesSettings;\n    connectClientToken?: string; // TODO: remove when PPCP Fastlane A/B test will be finished\n    enabledAlternativePaymentMethods: FundingType;\n    isDeveloperModeApplicable?: boolean;\n    intent?: PayPalIntent;\n    isAcceleratedCheckoutEnabled?: boolean; // PayPal Fastlane related\n    isFastlaneShippingOptionAutoSelectEnabled?: boolean; // PayPal Fastlane related\n    isFastlaneStylingEnabled?: boolean;\n    isHostedCheckoutEnabled?: boolean;\n    isPayPalAnalyticsV2Enabled?: boolean; // PayPal Fastlane related\n    isPayPalCreditAvailable?: boolean;\n    isPayPalCommerceAnalyticsV2Enabled?: boolean; // PayPal Fastlane related\n    isVenmoEnabled?: boolean;\n    isGooglePayEnabled?: boolean;\n    merchantId?: string;\n    orderId?: string;\n    shouldRenderFields?: boolean;\n    shouldRunAcceleratedCheckout?: boolean; // TODO: remove when PPCP Fastlane A/B test will be finished\n    paymentButtonStyles?: Record<string, PayPalButtonStyleOptions>;\n    paypalBNPLConfiguration?: PayPalBNPLConfigurationItem[];\n    threeDSVerificationMethod?: string;\n    isServerSideShippingCallbacksEnabled?: boolean;\n}\n\n/**\n *\n * PayPalHostWindow contains different\n * PayPal Sdk instances for different purposes\n *\n */\nexport interface PayPalHostWindow extends Window {\n    paypal?: PayPalSDK;\n    paypalFastlane?: PayPalFastlane;\n    paypalFastlaneSdk?: PayPalFastlaneSdk;\n    paypalMessages?: PayPalMessagesSdk;\n    paypalApms?: PayPalApmSdk;\n    paypalGooglePay?: PayPalGooglePaySdk;\n}\n\n/**\n *\n * PayPal SDK config\n *\n */\nexport interface PayPalSdkConfig {\n    options: {\n        'client-id'?: string;\n        'merchant-id'?: string;\n        'buyer-country'?: string;\n        'enable-funding'?: EnableFundingType;\n        'disable-funding'?: FundingType;\n        currency?: string;\n        commit?: boolean;\n        intent?: PayPalIntent;\n        components?: PayPalSdkComponents;\n        locale?: string;\n    };\n    attributes: {\n        'data-client-metadata-id'?: string;\n        'data-partner-attribution-id'?: string;\n        'data-sdk-client-token'?: string;\n        'data-namespace'?: string;\n        'data-client-token'?: string;\n    };\n}\n\nexport enum PayPalIntent {\n    AUTHORIZE = 'authorize',\n    CAPTURE = 'capture',\n}\n\nexport type PayPalSdkComponents = Array<\n    | 'fastlane'\n    | 'three-domain-secure'\n    | 'buttons'\n    | 'funding-eligibility'\n    | 'hosted-fields'\n    | 'messages'\n    | 'payment-fields'\n    | 'legal'\n    | 'googlepay'\n    | 'connect'\n    | 'card-fields'\n>;\n\nexport type PayPalLegal = (params: { fundingSource: string }) => {\n    render(container: string): void;\n};\n\nexport interface LegalFunding {\n    FUNDING: {\n        PAY_UPON_INVOICE: string;\n    };\n}\n\nexport interface BirthDate {\n    getFullYear(): number;\n    getDate(): number;\n    getMonth(): number;\n}\n\n/**\n *\n * PayPal Sdk instances\n *\n */\nexport interface PayPalSDK {\n    CardFields: (data: PaypalCardFieldsConfig) => Promise<PayPalCardFields>;\n    Googlepay: () => {\n        config: () => Promise<GooglePayConfig>;\n        confirmOrder: (arg0: {\n            orderId: string;\n            paymentMethodData: ConfirmOrderData;\n        }) => Promise<{ status: string }>;\n        initiatePayerAction: () => void;\n    };\n    FUNDING: PayPalCommerceSDKFunding;\n    HostedFields: {\n        isEligible(): boolean;\n        render(data: PayPalHostedFieldsRenderOptions): Promise<PayPalHostedFields>;\n    };\n    Legal: PayPalLegal & LegalFunding;\n    Buttons(options: PayPalButtonsOptions): PayPalButtons;\n    PaymentFields(options: PayPalPaymentFieldsOptions): PayPalPaymentFields;\n    Messages(options: PayPalMessagesOptions): PayPalMessages;\n}\n\nexport interface PaypalCardFieldsConfig {\n    inputEvents: {\n        onChange(data: PayPalCardFieldsState): void;\n        onFocus(data: PayPalCardFieldsState): void;\n        onBlur(data: PayPalCardFieldsState): void;\n        onInputSubmitRequest(data: PayPalCardFieldsState): void;\n    };\n    createVaultSetupToken?: (data: PayPalCardFieldsState) => void;\n    createOrder?: () => Promise<string>;\n    style: PayPalHostedFieldsRenderOptions['styles'];\n    onApprove(data: PayPalCardFieldsOnApproveData): void;\n    onError(): void;\n}\n\ninterface PayPalFieldsInitializationData {\n    placeholder?: string;\n}\n\nexport interface PayPalCardFields {\n    isEligible(): boolean;\n    CVVField(config?: PayPalFieldsInitializationData): PayPalFields;\n    ExpiryField(config?: PayPalFieldsInitializationData): PayPalFields;\n    NameField(config?: PayPalFieldsInitializationData): PayPalFields;\n    NumberField(config?: PayPalFieldsInitializationData): PayPalFields;\n    submit(config?: PayPalCardFieldsSubmitConfig): Promise<void>;\n    getState(): Promise<PayPalCardFieldsState>;\n}\n\nexport interface PayPalCardFieldsSubmitConfig {\n    billingAddress: {\n        company?: string;\n        addressLine1: string;\n        addressLine2?: string;\n        adminArea1: string; // State\n        adminArea2: string; // City\n        postalCode: string;\n        countryCode?: string;\n    };\n}\n\nexport interface PayPalCardFieldsOnApproveData {\n    vaultSetupToken?: string;\n    orderID: string;\n    liabilityShift?: LiabilityShiftEnum;\n}\n\ninterface PayPalCardFieldsFieldData {\n    isFocused: boolean;\n    isEmpty: boolean;\n    isValid: boolean;\n    isPotentiallyValid: boolean;\n}\n\ntype PayPalCardFieldsCard = PayPalHostedFieldsCard;\n\nexport interface PayPalCardFieldsState {\n    cards: PayPalCardFieldsCard[];\n    emittedBy: string;\n    isFormValid: boolean;\n    errors: string[];\n    fields: {\n        cardCvvField: PayPalCardFieldsFieldData;\n        cardNumberField: PayPalCardFieldsFieldData;\n        cardNameField?: PayPalCardFieldsFieldData;\n        cardExpiryField: PayPalCardFieldsFieldData;\n    };\n}\n\nexport interface PayPalFields {\n    render(container: HTMLElement | string): Promise<void>;\n    clear(): void;\n    removeClass(className: string): Promise<void>;\n    close(): Promise<void>;\n}\n\nexport interface PayPalFastlaneSdk {\n    ThreeDomainSecureClient: {\n        isEligible(params: threeDSecureParameters): Promise<boolean>;\n        show(): Promise<ThreeDomainSecureClientShowResponse>;\n    };\n    Fastlane(options?: PayPalFastlaneOptions): Promise<PayPalFastlane>;\n}\n\ninterface ThreeDomainSecureClientShowResponse {\n    liabilityShift: LiabilityShiftEnum;\n    authenticationState: TDSecureAuthenticationState;\n    nonce: string; // Enriched nonce or the original nonce\n}\n\nexport enum TDSecureVerificationMethod {\n    Always = 'SCA_ALWAYS',\n}\n\nexport enum TDSecureAuthenticationState {\n    Succeeded = 'succeeded',\n    Cancelled = 'cancelled',\n    Errored = 'errored',\n}\n\nexport enum LiabilityShiftEnum {\n    Possible = 'POSSIBLE',\n    No = 'NO',\n    Unknown = 'UNKNOWN',\n    Yes = 'YES',\n}\n\nexport interface threeDSecureParameters {\n    amount: string;\n    currency: string;\n    nonce: string;\n    threeDSRequested: boolean;\n    transactionContext: {\n        experience_context: {\n            brand_name?: string;\n            locale: string;\n            return_url: string;\n            cancel_url: string;\n        };\n    };\n}\n\nexport interface PayPalMessagesSdk {\n    Messages(options: MessagingOptions): MessagingRender;\n}\n\nexport interface PayPalApmSdk {\n    Buttons(options: PayPalButtonsOptions): PayPalButtons;\n    PaymentFields(options: PayPalPaymentFieldsOptions): PayPalPaymentFields;\n}\n\nexport interface PayPalGooglePaySdk {\n    Googlepay(): GooglePay;\n}\n\n/**\n *\n * PayPal Payments Hosted Fields\n *\n */\nexport interface PayPalHostedFieldsRenderOptions {\n    fields?: {\n        number?: PayPalHostedFieldOption;\n        cvv?: PayPalHostedFieldOption;\n        expirationDate?: PayPalHostedFieldOption;\n    };\n    paymentsSDK?: boolean;\n    styles?: {\n        input?: { [key: string]: string };\n        '.invalid'?: { [key: string]: string };\n        '.valid'?: { [key: string]: string };\n        ':focus'?: { [key: string]: string };\n    };\n    createOrder(): Promise<string>;\n}\n\nexport interface PayPalHostedFieldOption {\n    selector: string;\n    placeholder?: string;\n}\n\nexport interface PayPalHostedFields {\n    submit(options?: PayPalHostedFieldsSubmitOptions): Promise<PayPalHostedFieldsApprove>;\n    getState(): PayPalHostedFieldsState;\n    on(eventName: string, callback: (event: PayPalHostedFieldsState) => void): void;\n}\n\nexport interface PayPalHostedFieldsSubmitOptions {\n    contingencies?: Array<'3D_SECURE'>;\n    cardholderName?: string;\n}\n\nexport interface PayPalHostedFieldsApprove {\n    orderId: string;\n    liabilityShift?: 'POSSIBLE' | 'NO' | 'UNKNOWN';\n}\n\nexport interface PayPalHostedFieldsState {\n    cards: PayPalHostedFieldsCard[];\n    emittedBy: string;\n    fields: {\n        number?: PayPalHostedFieldsFieldData;\n        expirationDate?: PayPalHostedFieldsFieldData;\n        expirationMonth?: PayPalHostedFieldsFieldData;\n        expirationYear?: PayPalHostedFieldsFieldData;\n        cvv?: PayPalHostedFieldsFieldData;\n        postalCode?: PayPalHostedFieldsFieldData;\n    };\n}\n\nexport interface PayPalHostedFieldsCard {\n    type: string;\n    niceType: string;\n    code: {\n        name: string;\n        size: number;\n    };\n}\n\nexport interface PayPalHostedFieldsFieldData {\n    container: HTMLElement;\n    isFocused: boolean;\n    isEmpty: boolean;\n    isPotentiallyValid: boolean;\n    isValid: boolean;\n}\n\n/**\n *\n * PayPal Buttons\n *\n */\nexport interface PayPalButtons {\n    render(id: string): void;\n    close(): void;\n    isEligible(): boolean;\n    hasReturned?(): boolean;\n    resume?(): void;\n}\n\nexport interface PayPalButtonsOptions {\n    experience?: string;\n    style?: PayPalButtonStyleOptions;\n    fundingSource: string;\n    createOrder(): Promise<string>;\n    onApprove(\n        data: ApproveCallbackPayload,\n        actions: ApproveCallbackActions,\n    ): Promise<boolean | void> | void;\n    onInit?(data: InitCallbackPayload, actions: InitCallbackActions): Promise<void>;\n    onComplete?(data: CompleteCallbackDataPayload): Promise<void>;\n    onClick?(data: ClickCallbackPayload, actions: ClickCallbackActions): Promise<void> | void;\n    onError?(error: Error): void;\n    onCancel?(): void;\n    onShippingAddressChange?(data: ShippingAddressChangeCallbackPayload): Promise<void>;\n    onShippingOptionsChange?(data: ShippingOptionChangeCallbackPayload): Promise<void>;\n}\n\nexport interface ShippingOptionChangeCallbackPayload {\n    orderId: string;\n    selectedShippingOption: PayPalSelectedShippingOption;\n}\n\nexport interface ShippingAddressChangeCallbackPayload {\n    orderId: string;\n    shippingAddress: PayPalAddress;\n}\n\nexport interface ClickCallbackPayload {\n    fundingSource: string;\n}\n\nexport interface ClickCallbackActions {\n    reject(): void;\n    resolve(): void;\n}\n\nexport interface InitCallbackPayload {\n    correlationID: string;\n}\n\nexport interface InitCallbackActions {\n    disable(): void;\n    enable(): void;\n}\n\nexport interface PayPalAddress {\n    city: string;\n    countryCode: string;\n    postalCode: string;\n    state: string;\n}\n\nexport interface PaypalAddressCallbackData {\n    city: string;\n    country_code: string;\n    postal_code: string;\n    state: string;\n}\n\nexport interface PayPalSelectedShippingOption {\n    amount: {\n        currency_code: string;\n        value: string;\n    };\n    id: string;\n    label: string;\n    selected: boolean;\n    type: string;\n}\n\nexport interface ApproveCallbackPayload {\n    orderID?: string;\n}\n\nexport interface ApproveCallbackActions {\n    order: {\n        get: () => Promise<PayPalOrderDetails>;\n    };\n}\n\nexport interface PayPalOrderDetails {\n    payer: {\n        name: {\n            given_name: string;\n            surname: string;\n        };\n        email_address: string;\n        address: PayPalOrderAddress;\n        phone?: {\n            phone_number: {\n                national_number: string;\n            };\n        };\n    };\n    purchase_units: Array<{\n        shipping: {\n            address: PayPalOrderAddress;\n            name: {\n                full_name: string;\n            };\n        };\n    }>;\n}\n\nexport interface PayPalOrderAddress {\n    address_line_1: string;\n    address_line_2: string;\n    admin_area_2: string;\n    admin_area_1?: string;\n    postal_code: string;\n    country_code: string;\n}\n\nexport interface CompleteCallbackDataPayload {\n    intent: string;\n    orderID: string;\n}\n\nexport enum StyleButtonLabel {\n    paypal = 'paypal',\n    checkout = 'checkout',\n    buynow = 'buynow',\n    pay = 'pay',\n    installment = 'installment',\n}\n\nexport enum StyleButtonColor {\n    gold = 'gold',\n    blue = 'blue',\n    silver = 'silver',\n    black = 'black',\n    white = 'white',\n}\n\nexport enum StyleButtonShape {\n    pill = 'pill',\n    rect = 'rect',\n}\n\nexport interface PayPalButtonStyleOptions {\n    color?: StyleButtonColor;\n    shape?: StyleButtonShape;\n    height?: number;\n    label?: StyleButtonLabel;\n}\n\nexport interface PayPalButtonOptions {\n    fundingSource: string;\n    style?: PayPalButtonStyleOptions;\n    isServerSideShippingCallbacksEnabled?: boolean;\n    isHostedCheckoutEnabled?: boolean;\n    onClick?: () => void;\n    onCancel?: () => void;\n    onPaymentComplete?: () => void;\n    onError?(error?: Error | unknown): void;\n}\n\n/**\n *\n * PayPal Messages\n */\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalMessages {\n    render(id: string): void;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalMessagesOptions {\n    amount: number;\n    placement: string;\n    style?: PayPalMessagesStyleOptions;\n    fundingSource?: string;\n}\n\n// TODO: This interface can be removed once the PayPaySDK interface is removed\nexport interface PayPalMessagesStyleOptions {\n    layout?: string;\n}\n\n/**\n *\n * Google Pay related types\n *\n */\n\ninterface GooglePay {\n    config: () => Promise<GooglePayConfig>;\n    confirmOrder: (confirmOrderConfig: ConfirmOrderConfig) => Promise<{ status: string }>;\n    initiatePayerAction: (payerActionConfig: PayerActionConfig) => Promise<void>;\n}\n\ninterface ConfirmOrderConfig {\n    orderId: string;\n    paymentMethodData: ConfirmOrderData;\n}\n\nexport interface ConfirmOrderData {\n    tokenizationData: {\n        type: string;\n        token: string;\n    };\n    info: {\n        cardNetwork: string;\n        cardDetails: string;\n    };\n    type: string;\n}\n\ninterface PayerActionConfig {\n    orderId: string;\n}\n\nexport interface GooglePayConfig {\n    allowedPaymentMethods: AllowedPaymentMethods[];\n    apiVersion: number;\n    apiVersionMinor: number;\n    countryCode: string;\n    isEligible: boolean;\n    merchantInfo: {\n        merchantId: string;\n        merchantOrigin: string;\n    };\n}\n\nexport interface AllowedPaymentMethods {\n    type: string;\n    parameters: {\n        allowedAuthMethods: string[];\n        allowedCardNetworks: string[];\n        billingAddressRequired: boolean;\n        assuranceDetailsRequired: boolean;\n        billingAddressParameters: {\n            format: string;\n        };\n    };\n    tokenizationSpecification: {\n        type: string;\n        parameters: {\n            gateway: string;\n            gatewayMerchantId: string;\n        };\n    };\n}\n\n/**\n *\n * PayPal  Payment fields\n *\n */\nexport interface PayPalPaymentFields {\n    render(id: string): void;\n}\n\nexport interface PayPalPaymentFieldsOptions {\n    style?: PayPalFieldsStyleOptions;\n    fundingSource: string;\n    fields: {\n        name?: {\n            value?: string;\n        };\n        email?: {\n            value?: string;\n        };\n    };\n}\n\nexport interface PayPalFieldsStyleOptions {\n    variables?: {\n        fontFamily?: string;\n        fontSizeBase?: string;\n        fontSizeSm?: string;\n        fontSizeM?: string;\n        fontSizeLg?: string;\n        textColor?: string;\n        colorTextPlaceholder?: string;\n        colorBackground?: string;\n        colorInfo?: string;\n        colorDanger?: string;\n        borderRadius?: string;\n        borderColor?: string;\n        borderWidth?: string;\n        borderFocusColor?: string;\n        spacingUnit?: string;\n    };\n    rules?: {\n        [key: string]: any;\n    };\n}\n\n/**\n *\n * PayLater Messages related types\n * doc: https://developer.paypal.com/docs/checkout/pay-later/us/integrate/reference\n */\nexport interface MessagingRender {\n    render(container: string): void;\n}\n\nexport interface MessagesStyleOptions {\n    color?: string; // 'blue' | 'black' | 'white' | 'white-no-border' | 'gray' | 'monochrome' | 'grayscale'\n    layout?: string; // 'text' | 'flex'\n    logo?: {\n        type?: string; // 'primary' | 'alternative' | 'inline' | 'none'\n        position?: string; // 'left' | 'right' | 'top'\n    };\n    ratio?: string; // '1x1' | '1x4' | '8x1' | '20x1'\n    text?: {\n        align?: string; // 'left' | 'right' | 'center'\n        color?: string; // 'black' | 'white' | 'monochrome' | 'grayscale'\n        size?: number; // from 10 to 16\n    };\n}\n\nexport interface MessagingOptions {\n    amount: number;\n    placement: string;\n    style?: MessagesStyleOptions;\n}\n\nexport interface PayPalBNPLConfigurationItem {\n    id: string;\n    name: string;\n    status: boolean;\n    styles: Record<string, string>;\n}\n\n/**\n *\n * PayPal Fastlane related types\n *\n */\nexport interface PayPalFastlane {\n    identity: PayPalFastlaneIdentity;\n    events: PayPalFastlaneEvents;\n    profile: PayPalFastlaneProfile;\n    FastlaneCardComponent(\n        options: PayPalFastlaneCardComponentOptions,\n    ): Promise<PayPalFastlaneCardComponentMethods>;\n}\n\nexport interface PayPalFastlaneOptions {\n    styles?: PayPalFastlaneStylesOption;\n}\n\nexport interface PayPalFastlaneIdentity {\n    lookupCustomerByEmail(email: string): Promise<PayPalFastlaneLookupCustomerByEmailResult>;\n    triggerAuthenticationFlow(\n        customerContextId: string,\n    ): Promise<PayPalFastlaneAuthenticationResult>;\n}\n\nexport interface PayPalFastlaneLookupCustomerByEmailResult {\n    customerContextId?: string;\n}\n\nexport interface PayPalFastlaneAuthenticationResult {\n    authenticationState?: PayPalFastlaneAuthenticationState;\n    profileData?: PayPalFastlaneProfileData;\n}\n\nexport enum PayPalFastlaneAuthenticationState {\n    SUCCEEDED = 'succeeded',\n    FAILED = 'failed',\n    CANCELED = 'canceled',\n    UNRECOGNIZED = 'unrecognized',\n}\n\nexport interface PayPalFastlaneProfileData {\n    name: PayPalFastlaneProfileName;\n    shippingAddress: PayPalFastlaneShippingAddress;\n    card: PayPalFastlaneProfileCard;\n}\n\nexport interface PayPalFastlaneProfileName {\n    fullName: string;\n    firstName?: string;\n    lastName?: string;\n}\n\nexport interface PayPalFastlaneProfilePhone {\n    countryCode: string;\n    nationalNumber: string;\n}\n\nexport interface PayPalFastlaneShippingAddress {\n    name: PayPalFastlaneProfileName;\n    phoneNumber: PayPalFastlaneProfilePhone;\n    address: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneProfileCard {\n    id: string; // nonce / token\n    paymentSource: PayPalFastlanePaymentSource;\n}\n\nexport interface PayPalFastlanePaymentSource {\n    card: PayPalFastlaneCardSource;\n}\n\nexport interface PayPalFastlaneCardSource {\n    brand: string;\n    expiry: string; // \"YYYY-MM\"\n    lastDigits: string; // \"1111\"\n    name: string;\n    billingAddress: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneAddress {\n    company?: string;\n    addressLine1: string;\n    addressLine2?: string;\n    adminArea1: string; // State\n    adminArea2: string; // City\n    postalCode: string;\n    countryCode?: string;\n}\n\nexport interface PayPalFastlaneProfileToBcCustomerDataMappingResult {\n    authenticationState: PayPalFastlaneAuthenticationState;\n    addresses: CustomerAddress[];\n    billingAddress?: CustomerAddress;\n    shippingAddress?: CustomerAddress;\n    instruments: CardInstrument[];\n}\n\nexport interface PayPalFastlaneStylesOption {\n    root?: {\n        backgroundColorPrimary?: string;\n        errorColor?: string;\n        fontFamily?: string;\n        fontSizeBase?: string;\n        padding?: string;\n        primaryColor?: string;\n    };\n    input?: {\n        borderRadius?: string;\n        borderColor?: string;\n        focusBorderColor?: string;\n        backgroundColor?: string;\n        borderWidth?: string;\n        textColorBase?: string;\n    };\n    toggle?: {\n        colorPrimary?: string;\n        colorSecondary?: string;\n    };\n    text?: {\n        body?: {\n            color?: string;\n            fontSize?: string;\n        };\n        caption?: {\n            color?: string;\n            fontSize?: string;\n        };\n    };\n    branding?: string; // 'light' | 'dark'\n}\n\nexport interface PayPalFastlaneProfile {\n    showCardSelector(): Promise<PayPalFastlaneCardSelectorResponse>;\n    showShippingAddressSelector(): Promise<PayPalFastlaneShippingAddressSelectorResponse>;\n}\n\nexport interface PayPalFastlaneShippingAddressSelectorResponse {\n    selectionChanged: boolean;\n    selectedAddress: PayPalFastlaneShippingAddress;\n}\n\nexport interface PayPalFastlaneCardSelectorResponse {\n    selectionChanged: boolean;\n    selectedCard: PayPalFastlaneProfileCard;\n}\n\nexport interface PayPalFastlaneCardComponentMethods {\n    getPaymentToken(\n        options: PayPalFastlaneGetPaymentTokenOptions,\n    ): Promise<PayPalFastlaneProfileCard>;\n    render(element: string): void;\n}\n\nexport interface PayPalFastlaneGetPaymentTokenOptions {\n    name?: PayPalFastlaneProfileName;\n    billingAddress?: PayPalFastlaneAddress;\n}\n\nexport interface PayPalFastlaneCardComponentOptions {\n    fields?: PayPalFastlaneCardComponentFields;\n}\n\nexport interface PayPalFastlaneCardComponentFields {\n    cardholderName?: {\n        enabled?: boolean;\n        prefill?: string;\n    };\n    phoneNumber?: {\n        placeholder?: string;\n        prefill?: string;\n    };\n}\n\nexport interface PayPalFastlaneEvents {\n    apmSelected: (options: PayPalFastlaneApmSelectedEventOptions) => void;\n    emailSubmitted: (options: PayPalFastlaneEmailEnteredEventOptions) => void;\n    orderPlaced: (options: PayPalFastlaneOrderPlacedEventOptions) => void;\n}\n\nexport interface PayPalFastlaneEventCommonOptions {\n    context_type: 'cs_id';\n    context_id: string; // checkout session id\n    page_type: 'checkout_page';\n    page_name: string; // title of the checkout initiation page\n    partner_name: 'bigc';\n    user_type: 'store_member' | 'store_guest'; // type of the user on the merchant site\n    store_id: string;\n    merchant_name: string;\n    experiment: string; // stringify JSON object \"[{ treatment_group: 'test' | 'control' }]\"\n}\n\nexport interface PayPalFastlaneApmSelectedEventOptions extends PayPalFastlaneEventCommonOptions {\n    apm_shown: '0' | '1'; // alternate payment shown on the checkout page\n    apm_list: string; // list of alternate payment shown on checkout page\n    apm_selected: string; // alternate payment method selected / methodId\n    apm_location: 'pre-email section' | 'payment section'; // placement of APM, whether it be above the email entry or in the radio buttons\n}\n\nexport interface PayPalFastlaneEmailEnteredEventOptions extends PayPalFastlaneEventCommonOptions {\n    user_email_saved: boolean; // shows whether checkout was loaded with or without a saved email\n    apm_shown: '0' | '1'; // alternate payment shown on the checkout page\n    apm_list: string; // list of alternate payment shown on checkout page 'applepay,googlepay,paypal'\n}\n\nexport interface PayPalFastlaneOrderPlacedEventOptions extends PayPalFastlaneEventCommonOptions {\n    selected_payment_method: string;\n    currency_code: string;\n}\n\nexport interface PayPalFastlanePaymentFormattedPayload {\n    paypal_connect_token?: {\n        order_id?: string;\n        token: string;\n    };\n    paypal_fastlane_token?: {\n        order_id?: string;\n        token: string;\n    };\n}\n\nexport interface FastlaneStylesSettings {\n    fastlaneRootSettingsBackgroundColor?: string;\n    fastlaneRootSettingsErrorColor?: string;\n    fastlaneRootSettingsFontFamily?: string;\n    fastlaneRootSettingsPadding?: string;\n    fastlaneRootSettingsPrimaryColor?: string;\n    fastlaneRootSettingsFontSize?: string;\n    fastlaneInputSettingsBackgroundColor?: string;\n    fastlaneInputSettingsBorderRadius?: string;\n    fastlaneInputSettingsBorderWidth?: string;\n    fastlaneInputSettingsTextColorBase?: string;\n    fastlaneInputSettingsBorderColor?: string;\n    fastlaneInputSettingsFocusBorderBase?: string;\n    fastlaneToggleSettingsColorPrimary?: string;\n    fastlaneToggleSettingsColorSecondary?: string;\n    fastlaneTextBodySettingsColor?: string;\n    fastlaneTextBodySettingsFontSize?: string;\n    fastlaneTextCaptionSettingsFontSize?: string;\n    fastlaneTextCaptionSettingsColor?: string;\n    fastlaneBrandingSettings?: string;\n}\n\n/**\n *\n * Other\n *\n */\nexport enum NonInstantAlternativePaymentMethods {\n    OXXO = 'oxxo',\n}\n\nexport interface PayPalOrderData {\n    orderId: string;\n    setupToken?: string;\n    approveUrl: string;\n}\n\nexport interface PayPalUpdateOrderRequestBody {\n    availableShippingOptions?: ShippingOption[];\n    cartId: string;\n    selectedShippingOption?: ShippingOption | null;\n    methodId?: string;\n    orderId?: number;\n}\n\nexport interface PayPalUpdateOrderResponse {\n    statusCode: number;\n}\n\nexport interface PayPalCreateOrderRequestBody extends HostedInstrument, VaultedInstrument {\n    cartId: string;\n    metadataId?: string;\n    setupToken?: boolean;\n    fastlaneToken?: string;\n}\n\nexport enum PayPalOrderStatus {\n    Approved = 'APPROVED',\n    Created = 'CREATED',\n    PayerActionRequired = 'PAYER_ACTION_REQUIRED',\n    PollingStop = 'POLLING_STOP',\n    PollingError = 'POLLING_ERROR',\n}\n\nexport interface PayPalOrderStatusData {\n    status: PayPalOrderStatus;\n}\n\nexport interface PayPalCreateOrderCardFieldsResponse {\n    orderId: string;\n    setupToken?: string;\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/get-fastlane-styles.spec.ts",
    "content": "import getFastlaneStyles from './get-fastlane-styles';\n\ndescribe('#getFastlaneStyles()', () => {\n    it('returns styles options with provided modifications', () => {\n        const styles = {\n            fastlaneRootSettingsBackgroundColor: 'red',\n            fastlaneInputSettingsBorderColor: 'green',\n            fastlaneTextBodySettingsFontSize: '12px',\n            fastlaneTextBodySettingsColor: 'blue',\n        };\n\n        const uiStyles = {\n            root: {\n                backgroundColorPrimary: 'green',\n            },\n            text: {\n                caption: {\n                    fontSize: '15px',\n                },\n            },\n        };\n\n        expect(getFastlaneStyles(styles, uiStyles)).toEqual({\n            root: {\n                backgroundColorPrimary: 'red',\n            },\n            input: {\n                borderColor: 'green',\n            },\n            text: {\n                body: {\n                    fontSize: '12px',\n                    color: 'blue',\n                },\n                caption: {\n                    fontSize: '15px',\n                },\n            },\n        });\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/get-fastlane-styles.ts",
    "content": "import { omitBy } from 'lodash';\n\nimport { FastlaneStylesSettings, PayPalFastlaneStylesOption } from '../index';\n\nfunction isInvalidStyleOption(styleOption: unknown) {\n    return typeof styleOption !== 'string';\n}\n\nexport default function getFastlaneStyles(\n    styleSettings?: FastlaneStylesSettings,\n    uiStyles?: PayPalFastlaneStylesOption,\n) {\n    if (!uiStyles && !styleSettings) {\n        return undefined;\n    }\n\n    return cleanUpFastlaneStyles(mergeFastlaneStyles(styleSettings, uiStyles));\n}\n\nfunction mergeFastlaneStyles(\n    styleSettings?: FastlaneStylesSettings,\n    uiStyles?: PayPalFastlaneStylesOption,\n): PayPalFastlaneStylesOption {\n    return {\n        root: {\n            backgroundColorPrimary:\n                styleSettings?.fastlaneRootSettingsBackgroundColor ||\n                uiStyles?.root?.backgroundColorPrimary,\n            errorColor: styleSettings?.fastlaneRootSettingsErrorColor || uiStyles?.root?.errorColor,\n            fontFamily: styleSettings?.fastlaneRootSettingsFontFamily || uiStyles?.root?.fontFamily,\n            fontSizeBase:\n                styleSettings?.fastlaneRootSettingsFontSize || uiStyles?.root?.fontSizeBase,\n            padding: styleSettings?.fastlaneRootSettingsPadding || uiStyles?.root?.padding,\n            primaryColor:\n                styleSettings?.fastlaneRootSettingsPrimaryColor || uiStyles?.root?.primaryColor,\n        },\n        input: {\n            borderRadius:\n                styleSettings?.fastlaneInputSettingsBorderRadius || uiStyles?.input?.borderRadius,\n            borderColor:\n                styleSettings?.fastlaneInputSettingsBorderColor || uiStyles?.input?.borderColor,\n            focusBorderColor:\n                styleSettings?.fastlaneInputSettingsFocusBorderBase ||\n                uiStyles?.input?.focusBorderColor,\n            backgroundColor:\n                styleSettings?.fastlaneInputSettingsBackgroundColor ||\n                uiStyles?.input?.backgroundColor,\n            borderWidth:\n                styleSettings?.fastlaneInputSettingsBorderWidth || uiStyles?.input?.borderWidth,\n            textColorBase:\n                styleSettings?.fastlaneInputSettingsTextColorBase || uiStyles?.input?.textColorBase,\n        },\n        toggle: {\n            colorPrimary:\n                styleSettings?.fastlaneToggleSettingsColorPrimary || uiStyles?.toggle?.colorPrimary,\n            colorSecondary:\n                styleSettings?.fastlaneToggleSettingsColorSecondary ||\n                uiStyles?.toggle?.colorSecondary,\n        },\n        text: {\n            body: {\n                color: styleSettings?.fastlaneTextBodySettingsColor || uiStyles?.text?.body?.color,\n                fontSize:\n                    styleSettings?.fastlaneTextBodySettingsFontSize ||\n                    uiStyles?.text?.body?.fontSize,\n            },\n            caption: {\n                color:\n                    styleSettings?.fastlaneTextCaptionSettingsColor ||\n                    uiStyles?.text?.caption?.color,\n                fontSize:\n                    styleSettings?.fastlaneTextCaptionSettingsFontSize ||\n                    uiStyles?.text?.caption?.fontSize,\n            },\n        },\n        branding: styleSettings?.fastlaneBrandingSettings || uiStyles?.branding,\n    };\n}\n\nfunction cleanUpFastlaneStyles(styles: PayPalFastlaneStylesOption) {\n    const fastlaneStyles: PayPalFastlaneStylesOption = {};\n\n    const root = omitBy(styles.root, isInvalidStyleOption);\n    const input = omitBy(styles.input, isInvalidStyleOption);\n    const toggle = omitBy(styles.toggle, isInvalidStyleOption);\n    const textBody = omitBy(styles.text?.body, isInvalidStyleOption);\n    const textCaption = omitBy(styles.text?.caption, isInvalidStyleOption);\n    const branding = styles.branding;\n\n    if (Object.keys(root).length) {\n        fastlaneStyles.root = root;\n    }\n\n    if (Object.keys(input).length) {\n        fastlaneStyles.input = input;\n    }\n\n    if (Object.keys(toggle).length) {\n        fastlaneStyles.toggle = toggle;\n    }\n\n    if (Object.keys(textBody).length) {\n        fastlaneStyles.text = {};\n        fastlaneStyles.text.body = textBody;\n    }\n\n    if (Object.keys(textCaption).length) {\n        fastlaneStyles.text = {\n            ...fastlaneStyles.text,\n        };\n        fastlaneStyles.text.caption = textCaption;\n    }\n\n    if (branding) {\n        fastlaneStyles.branding = branding;\n    }\n\n    return fastlaneStyles;\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/get-paypal-messages-styles-from-bnpl-config.spec.ts",
    "content": "import getPaypalMessagesStylesFromBNPLConfig from './get-paypal-messages-styles-from-bnpl-config';\n\ndescribe('getPaypalMessagesStylesFromBNPLConfig', () => {\n    it('returns PayPal Messages Style Options from BNPL Config', () => {\n        const input = {\n            id: 'checkout',\n            name: 'Checkout page',\n            status: true,\n            styles: {\n                color: 'white-no-border',\n                layout: 'text',\n                'logo-type': 'alternative',\n                'logo-position': 'right',\n                ratio: '8x1',\n                'text-color': 'white',\n                'text-size': '10',\n            },\n        };\n\n        const expectedOutput = {\n            color: 'white-no-border',\n            layout: 'text',\n            logo: {\n                type: 'alternative',\n                position: 'right',\n            },\n            ratio: '8x1',\n            text: {\n                color: 'white',\n                size: 10,\n            },\n        };\n\n        expect(getPaypalMessagesStylesFromBNPLConfig(input)).toStrictEqual(expectedOutput);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/get-paypal-messages-styles-from-bnpl-config.ts",
    "content": "import { MessagesStyleOptions, PayPalBNPLConfigurationItem } from '../paypal-types';\n\nfunction getPaypalMessagesStylesFromBNPLConfig({\n    styles,\n}: PayPalBNPLConfigurationItem): MessagesStyleOptions {\n    const messagesStyles: MessagesStyleOptions = {};\n\n    if (styles.color) {\n        messagesStyles.color = styles.color;\n    }\n\n    if (styles.layout) {\n        messagesStyles.layout = styles.layout;\n    }\n\n    if (styles['logo-type'] || styles['logo-position']) {\n        messagesStyles.logo = {};\n\n        if (styles['logo-type']) {\n            messagesStyles.logo.type = styles['logo-type'];\n        }\n\n        if (styles['logo-position']) {\n            messagesStyles.logo.position = styles['logo-position'];\n        }\n    }\n\n    if (styles.ratio) {\n        messagesStyles.ratio = styles.ratio;\n    }\n\n    if (styles['text-color'] || styles['text-size']) {\n        messagesStyles.text = {};\n\n        if (styles['text-color']) {\n            messagesStyles.text.color = styles['text-color'];\n        }\n\n        if (styles['text-size']) {\n            messagesStyles.text.size = +styles['text-size'];\n        }\n    }\n\n    return messagesStyles;\n}\n\nexport default getPaypalMessagesStylesFromBNPLConfig;\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/index.ts",
    "content": "export { default as isPayPalCommerceAcceleratedCheckoutCustomer } from './is-paypal-accelerated-checkout-customer';\nexport { default as isPayPalFastlaneCustomer } from './is-paypal-fastlane-customer';\nexport { default as getFastlaneStyles } from './get-fastlane-styles';\nexport { default as getPaypalMessagesStylesFromBNPLConfig } from './get-paypal-messages-styles-from-bnpl-config';\nexport { default as isRedirectActionError } from './is-redirect-action-error';\nexport { default as isPaypalFastlaneRequestError } from './is-paypal-fastlane-request-error';\nexport { default as transformLocaleToPayPalFormat } from './transform-locale-to-paypal-format';\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/is-paypal-accelerated-checkout-customer.spec.ts",
    "content": "import isPaypalAcceleratedCheckoutCustomer from './is-paypal-accelerated-checkout-customer';\n\ndescribe('isPaypalAcceleratedCheckoutCustomer', () => {\n    it('returns true if payment provider customer is PayPal related', () => {\n        const paymentProviderCustomer = {\n            authenticationState: 'success',\n            addresses: [],\n            instruments: [],\n        };\n\n        expect(isPaypalAcceleratedCheckoutCustomer(paymentProviderCustomer)).toBe(true);\n    });\n\n    it('returns false if payment provider customer is not PayPal related', () => {\n        const paymentProviderCustomer = {\n            stripeLinkAuthenticationState: true,\n        };\n\n        expect(isPaypalAcceleratedCheckoutCustomer(paymentProviderCustomer)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/is-paypal-accelerated-checkout-customer.ts",
    "content": "import {\n    PaymentProviderCustomer,\n    PayPalConnectCustomer,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function isPaypalAcceleratedCheckoutCustomer(\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"
  },
  {
    "path": "packages/paypal-utils/src/utils/is-paypal-fastlane-customer.spec.ts",
    "content": "import isPayPalFastlaneCustomer from './is-paypal-fastlane-customer';\n\ndescribe('isPayPalFastlaneCustomer', () => {\n    it('returns true if payment provider customer is PayPal Fastlane related', () => {\n        const paymentProviderCustomer = {\n            authenticationState: 'success',\n            addresses: [],\n            instruments: [],\n        };\n\n        expect(isPayPalFastlaneCustomer(paymentProviderCustomer)).toBe(true);\n    });\n\n    it('returns false if payment provider customer is not PayPal Fastlane related', () => {\n        const paymentProviderCustomer = {\n            stripeLinkAuthenticationState: true,\n        };\n\n        expect(isPayPalFastlaneCustomer(paymentProviderCustomer)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/is-paypal-fastlane-customer.ts",
    "content": "import {\n    PaymentProviderCustomer,\n    PayPalConnectCustomer,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n// TODO: update PayPalConnectCustomer with PayPalFastlaneCustomer\nexport default function isPayPalFastlaneCustomer(\n    customer?: PaymentProviderCustomer,\n): customer is PayPalConnectCustomer {\n    if (!customer) {\n        return false;\n    }\n\n    return (\n        'authenticationState' in customer || 'addresses' in customer || 'instruments' in customer\n    );\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/is-paypal-fastlane-request-error.spec.ts",
    "content": "import isPaypalFastlaneRequestError from './is-paypal-fastlane-request-error';\n\ninterface PaypalFastlaneRequestError {\n    message: string;\n    response: {\n        body: {\n            name: string;\n        };\n    };\n}\n\ndescribe('isPaypalFastlaneRequestError', () => {\n    it('returns true for a valid PaypalFastlaneRequestError object', () => {\n        const error: PaypalFastlaneRequestError = {\n            message: 'Some error occurred',\n            response: {\n                body: {\n                    name: 'SomeErrorName',\n                },\n            },\n        };\n\n        expect(isPaypalFastlaneRequestError(error)).toBe(true);\n    });\n\n    it('returns false when error is null', () => {\n        expect(isPaypalFastlaneRequestError(null)).toBe(false);\n    });\n\n    it('returns false when error is a string', () => {\n        expect(isPaypalFastlaneRequestError('error')).toBe(false);\n    });\n\n    it('returns false when error is an object missing response', () => {\n        const error = {\n            message: 'Missing response',\n        };\n\n        expect(isPaypalFastlaneRequestError(error)).toBe(false);\n    });\n\n    it('returns false when response has no body', () => {\n        const error = {\n            message: 'No body',\n            response: {},\n        };\n\n        expect(isPaypalFastlaneRequestError(error)).toBe(false);\n    });\n\n    it('returns false when body has no name property', () => {\n        const error = {\n            message: 'No name in body',\n            response: {\n                body: {},\n            },\n        };\n\n        expect(isPaypalFastlaneRequestError(error)).toBe(false);\n    });\n\n    it('returns false when message property is missing', () => {\n        const error = {\n            response: {\n                body: {\n                    name: 'MissingMessage',\n                },\n            },\n        };\n\n        expect(isPaypalFastlaneRequestError(error)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/is-paypal-fastlane-request-error.ts",
    "content": "export interface PaypalFastlaneRequestError {\n    name: string;\n    message: string;\n    response: {\n        body: {\n            name: string;\n        };\n    };\n}\n\nexport default function isPaypalFastlaneRequestError(\n    error: unknown,\n): error is PaypalFastlaneRequestError {\n    return (\n        typeof error === 'object' &&\n        error !== null &&\n        'message' in error &&\n        'response' in error &&\n        'body' in (error as PaypalFastlaneRequestError).response &&\n        'name' in (error as PaypalFastlaneRequestError).response.body\n    );\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/is-paypal-provider-error.spec.ts",
    "content": "import isPaypalProviderError from './is-paypal-provider-error';\n\ndescribe('isPaypalProviderError', () => {\n    it('returns true if error paypalcommerce provider related', () => {\n        const providerError = {\n            status: 'error',\n            three_ds_result: {\n                acs_url: null,\n                payer_auth_request: null,\n                merchant_data: null,\n                callback_url: null,\n            },\n            errors: [\n                {\n                    code: 'invalid_request_error',\n                    message:\n                        'Were experiencing difficulty processing your transaction. Please contact us or try again later.',\n                },\n                {\n                    code: 'transaction_rejected',\n                    message: 'Payment was declined. Please try again.',\n                    provider_error: {\n                        code: 'INSTRUMENT_DECLINED',\n                    },\n                },\n            ],\n        };\n\n        expect(isPaypalProviderError(providerError)).toBe(true);\n    });\n\n    it('returns false if error not paypalcommerce provider related', () => {\n        const notProviderError = {\n            status: 'error',\n            three_ds_result: {\n                acs_url: null,\n                payer_auth_request: null,\n                merchant_data: null,\n                callback_url: null,\n            },\n        };\n\n        expect(isPaypalProviderError(notProviderError)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/is-paypal-provider-error.ts",
    "content": "export interface ProviderError extends Error {\n    errors?: ErrorElement[];\n    status?: string;\n    three_ds_result?: {\n        acs_url: unknown;\n        payer_auth_request: unknown;\n        merchant_data: unknown;\n        callback_url: unknown;\n    };\n}\n\nexport interface ErrorElement {\n    code: string;\n    message: string;\n    provider_error?: {\n        code: string;\n    };\n}\n\nexport default function isPaypalProviderError(error: unknown): error is ProviderError {\n    return typeof error === 'object' && error !== null && 'errors' in error;\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/is-redirect-action-error.spec.ts",
    "content": "import isRedirectActionError from './is-redirect-action-error';\n\ndescribe('isRedirectActionError', () => {\n    it('returns true if error is redirect action type', () => {\n        const redirectActionError = {\n            status: 'error',\n            three_ds_result: {\n                acs_url: null,\n                payer_auth_request: null,\n                merchant_data: null,\n                callback_url: null,\n            },\n            body: {\n                additional_action_required: {\n                    type: 'offsite_redirect',\n                    data: {\n                        redirect_url: 'https://example.redirect.com',\n                    },\n                },\n            },\n            errors: [\n                {\n                    code: 'invalid_request_error',\n                    message:\n                        \"We're experiencing difficulty processing your transaction. Please contact us or try again later.\",\n                },\n            ],\n        };\n\n        expect(isRedirectActionError(redirectActionError)).toBe(true);\n    });\n\n    it('returns false if error is not redirect action type', () => {\n        const notRedirectActionError = {\n            status: 'error',\n            three_ds_result: {\n                acs_url: null,\n                payer_auth_request: null,\n                merchant_data: null,\n                callback_url: null,\n            },\n        };\n\n        expect(isRedirectActionError(notRedirectActionError)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/is-redirect-action-error.ts",
    "content": "import { isRequestError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { ProviderError } from './is-paypal-provider-error';\n\nexport interface RedirectActionError extends ProviderError {\n    body: {\n        additional_action_required: {\n            type: 'offsite_redirect';\n            data: {\n                redirect_url: string;\n            };\n        };\n    };\n}\n\nexport default function isRedirectActionError(error: unknown): error is RedirectActionError {\n    return (\n        isRequestError(error) && error.body.additional_action_required?.type === 'offsite_redirect'\n    );\n}\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/transform-locale-to-paypal-format.spec.ts",
    "content": "import transformLocaleToPayPalFormat from './transform-locale-to-paypal-format';\n\ndescribe('transformLocaleToPayPalFormat', () => {\n    it('returns undefined if storeLanguage is undefined', () => {\n        expect(transformLocaleToPayPalFormat(undefined)).toBeUndefined();\n    });\n\n    it('returns undefined if storeLanguage is empty string', () => {\n        expect(transformLocaleToPayPalFormat('')).toBeUndefined();\n    });\n\n    it('transforms locale with hyphen separator to PayPal format', () => {\n        expect(transformLocaleToPayPalFormat('fr-CA')).toBe('fr_CA');\n        expect(transformLocaleToPayPalFormat('en-US')).toBe('en_US');\n        expect(transformLocaleToPayPalFormat('zh-TW')).toBe('zh_TW');\n    });\n\n    it('transforms locale with lowercase region to uppercase', () => {\n        expect(transformLocaleToPayPalFormat('en-us')).toBe('en_US');\n        expect(transformLocaleToPayPalFormat('fr-ca')).toBe('fr_CA');\n    });\n\n    it('transforms language-only locale to language_LANGUAGE format if supported', () => {\n        expect(transformLocaleToPayPalFormat('fr')).toBe('fr_FR');\n        expect(transformLocaleToPayPalFormat('it')).toBe('it_IT');\n    });\n\n    it('returns undefined for language-only locale if not supported', () => {\n        expect(transformLocaleToPayPalFormat('en')).toBeUndefined();\n        expect(transformLocaleToPayPalFormat('xx')).toBeUndefined();\n    });\n\n    it('returns locale for supported PayPal locales', () => {\n        expect(transformLocaleToPayPalFormat('en-GB')).toBe('en_GB');\n        expect(transformLocaleToPayPalFormat('de-DE')).toBe('de_DE');\n        expect(transformLocaleToPayPalFormat('ja-JP')).toBe('ja_JP');\n        expect(transformLocaleToPayPalFormat('pt-BR')).toBe('pt_BR');\n    });\n});\n"
  },
  {
    "path": "packages/paypal-utils/src/utils/transform-locale-to-paypal-format.ts",
    "content": "import { PAYPAL_SDK_SUPPORTED_LOCALES } from '../paypal-commerce-constants';\n\n/**\n * Transforms store language to PayPal SDK locale format.\n * PayPal SDK expects locale in format 'en_US' (underscore separator).\n * Returns undefined if the locale is not supported by PayPal SDK.\n * Examples: 'fr-CA' -> 'fr_CA', 'fr' -> 'fr_FR'\n */\nexport default function transformLocaleToPayPalFormat(\n    storeLanguage: string | undefined,\n): string | undefined {\n    if (!storeLanguage) {\n        return undefined;\n    }\n\n    let locale: string;\n\n    if (storeLanguage.includes('-')) {\n        const [language, region] = storeLanguage.split('-');\n\n        locale = `${language}_${region.toUpperCase()}`;\n    } else {\n        locale = `${storeLanguage}_${storeLanguage.toUpperCase()}`;\n    }\n\n    return PAYPAL_SDK_SUPPORTED_LOCALES.includes(locale) ? locale : undefined;\n}\n"
  },
  {
    "path": "packages/paypal-utils/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true\n    }\n}\n"
  },
  {
    "path": "packages/paypal-utils/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/sagepay-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.test.tsx\", \"*ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\":\"off\",\n                \"@typescript-eslint/naming-convention\":\"off\",\n                \"@typescript-eslint/consistent-type-assertions\":\"off\",\n                \"@typescript-eslint/no-unsafe-return\":\"off\",\n                \"@typescript-eslint/no-floating-promises\":\"off\",\n                \"@typescript-eslint/no-shadow\":\"off\"\n\n            }\n        }\n    ]\n}\n\n"
  },
  {
    "path": "packages/sagepay-integration/README.md",
    "content": "# sagepay-integration\n\nThis package contains the integration layer for the [Sagepay](https://www.sagepay.com/) provider.\n\n## Running unit tests\n\nRun `nx test sagepay-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint sagepay-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/sagepay-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'sagepay-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/sagepay-integration',\n};\n"
  },
  {
    "path": "packages/sagepay-integration/project.json",
    "content": "{\n    \"name\": \"sagepay-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/sagepay-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/sagepay-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/sagepay-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/sagepay-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/sagepay-integration/src/create-sage-pay-payment-strategy.test.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createSagePayPaymentStrategy from './create-sage-pay-payment-strategy';\nimport SagePayPaymentStrategy from './sage-pay-payment-strategy';\n\ndescribe('createSagePayPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates sagepay payment strategy', () => {\n        const strategy = createSagePayPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(SagePayPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/sagepay-integration/src/create-sage-pay-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport SagePayPaymentStrategy from './sage-pay-payment-strategy';\n\nconst createSagePayPaymentStrategy: PaymentStrategyFactory<SagePayPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new SagePayPaymentStrategy(paymentIntegrationService, createFormPoster());\n};\n\nexport default toResolvableModule(createSagePayPaymentStrategy, [{ id: 'sagepay' }]);\n"
  },
  {
    "path": "packages/sagepay-integration/src/index.ts",
    "content": "export { default as SagePayPaymentStrategy } from './sage-pay-payment-strategy';\nexport { default as createSagePayPaymentStrategy } from './create-sage-pay-payment-strategy';\n"
  },
  {
    "path": "packages/sagepay-integration/src/sage-pay-payment-strategy.test.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { noop, omit } from 'lodash';\n\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    MissingDataError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    PaymentIntegrationService,\n    PaymentMethod,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    getErrorPaymentResponseBody,\n    getOrder,\n    getOrderRequestBody,\n    getPaymentMethod,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport SagePayPaymentStrategy from './sage-pay-payment-strategy';\n\ndescribe('SagePayPaymentStrategy', () => {\n    let formPoster: FormPoster;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethod: PaymentMethod;\n    let strategy: SagePayPaymentStrategy;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        formPoster = {\n            postForm: jest.fn(),\n        } as unknown as FormPoster;\n\n        paymentMethod = getPaymentMethod();\n\n        jest.spyOn(formPoster, 'postForm').mockImplementation((_url, _data, callback = noop) =>\n            callback(),\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethod,\n        );\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n        strategy = new SagePayPaymentStrategy(paymentIntegrationService, formPoster);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('submits order without payment data', async () => {\n        const payload = getOrderRequestBody();\n        const options = { methodId: 'sagepay' };\n\n        await strategy.execute(payload, options);\n\n        expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n            omit(payload, 'payment'),\n            options,\n        );\n    });\n\n    it('submits payment separately', async () => {\n        const payload = getOrderRequestBody();\n        const options = { methodId: 'sagepay' };\n\n        await strategy.execute(payload, options);\n\n        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(payload.payment);\n    });\n\n    it('posts 3ds data to Sage if 3ds is enabled', async () => {\n        const error = new RequestError(\n            getResponse({\n                ...getErrorPaymentResponseBody(),\n                errors: [{ code: 'three_d_secure_required' }],\n                three_ds_result: {\n                    acs_url: 'https://acs/url',\n                    callback_url: 'https://callback/url',\n                    payer_auth_request: 'payer_auth_request',\n                    merchant_data: 'merchant_data',\n                },\n                status: 'error',\n            }),\n        );\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(error);\n\n        strategy.execute(getOrderRequestBody());\n\n        await new Promise((resolve) => process.nextTick(resolve));\n\n        expect(formPoster.postForm).toHaveBeenCalledWith(\n            'https://acs/url',\n            {\n                PaReq: 'payer_auth_request',\n                TermUrl: 'https://callback/url',\n                MD: 'merchant_data',\n            },\n            undefined,\n            '_top',\n        );\n    });\n\n    it('does not post 3ds data to Sage if 3ds is not enabled', async () => {\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n        await strategy.execute(getOrderRequestBody());\n\n        expect(formPoster.postForm).not.toHaveBeenCalled();\n    });\n\n    it('does not finalize order if order is not created', async () => {\n        const state = paymentIntegrationService.getState();\n\n        jest.spyOn(state, 'getOrder').mockReturnValue(undefined);\n\n        try {\n            await strategy.finalize();\n        } catch (error) {\n            expect(paymentIntegrationService.finalizeOrder).not.toHaveBeenCalled();\n            expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n        }\n    });\n\n    it('does not finalize order if order is not finalized', async () => {\n        const order = getOrder();\n\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockResolvedValue({\n            ...paymentIntegrationService.getState(),\n            getOrder: () => order,\n            getPaymentStatus: () => 'INITIALIZE',\n        });\n\n        await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n    });\n\n    it('throws error if order is missing', async () => {\n        const state = paymentIntegrationService.getState();\n\n        jest.spyOn(state, 'getOrder').mockReturnValue(undefined);\n\n        try {\n            await strategy.finalize();\n        } catch (error) {\n            expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n        }\n    });\n\n    it('is special type of credit card strategy', () => {\n        expect(strategy).toBeInstanceOf(CreditCardPaymentStrategy);\n    });\n\n    describe('#finalize()', () => {\n        it('throws an error to inform that order finalization is not required', () => {\n            const promise = strategy.finalize();\n\n            return expect(promise).rejects.toBeInstanceOf(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#Execute with 3DS2 experiment on', () => {\n        beforeEach(() => {\n            const config = getConfig();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue({\n                ...config.storeConfig,\n                checkoutSettings: {\n                    ...config.storeConfig.checkoutSettings,\n                    features: {\n                        'INT-4994.Opayo_3DS2': true,\n                    },\n                },\n            });\n        });\n\n        it('submit payment with browser_info', async () => {\n            const payload = getOrderRequestBody();\n            const options = { methodId: 'sagepay' };\n\n            await strategy.execute(payload, options);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                ...payload.payment,\n                paymentData: {\n                    ...payload.payment?.paymentData,\n                    browser_info: {\n                        color_depth: expect.any(Number),\n                        java_enabled: expect.any(Boolean),\n                        language: expect.any(String),\n                        screen_height: expect.any(Number),\n                        screen_width: expect.any(Number),\n                        time_zone_offset: expect.any(String),\n                    },\n                },\n            });\n        });\n\n        it('posts 3ds data to Sage if 3ds is enabled', async () => {\n            const error = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [{ code: 'three_d_secure_required' }],\n                    three_ds_result: {\n                        acs_url: 'https://acs/url',\n                        payer_auth_request: 'c_request',\n                    },\n                    status: 'error',\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(error);\n\n            strategy.execute(getOrderRequestBody());\n\n            await new Promise((resolve) => process.nextTick(resolve));\n            expect(formPoster.postForm).toHaveBeenCalledWith(\n                'https://acs/url',\n                {\n                    creq: 'c_request',\n                },\n                undefined,\n                '_top',\n            );\n        });\n    });\n    describe('should fail if...', () => {\n        test('payment data is not provided', async () => {\n            const payload = {\n                ...getOrderRequestBody(),\n                payment: undefined,\n            };\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n        test('payment is not provided', async () => {\n            const payload = {\n                ...getOrderRequestBody(),\n                payment: {\n                    paymentData: undefined,\n                    methodId: 'sagepay',\n                },\n            };\n\n            try {\n                await strategy.execute(payload);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/sagepay-integration/src/sage-pay-payment-strategy.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { some } from 'lodash';\n\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    getBrowserInfo,\n    isRequestError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderRequestBody,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStatusTypes,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class SagePayPaymentStrategy extends CreditCardPaymentStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private _formPoster: FormPoster,\n    ) {\n        super(paymentIntegrationService);\n    }\n\n    execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment } = payload;\n\n        if (!payment) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const { paymentData } = payment;\n\n        if (!paymentData) {\n            throw new MissingDataError(MissingDataErrorType.MissingPayment);\n        }\n\n        if (this._isThreeDSTwoExperimentOn()) {\n            const newPaymentData = {\n                ...paymentData,\n                browser_info: getBrowserInfo(),\n            };\n\n            if (payload.payment) {\n                payload.payment.paymentData = newPaymentData;\n            }\n        }\n\n        return super.execute(payload, options).catch((error: Error) => {\n            if (\n                !isRequestError(error) ||\n                !some(error.body.errors, { code: 'three_d_secure_required' })\n            ) {\n                return Promise.reject(error);\n            }\n\n            return new Promise(() => {\n                let payload;\n\n                if (this._isThreeDSTwoExperimentOn() && !error.body.three_ds_result.merchant_data) {\n                    payload = {\n                        creq: error.body.three_ds_result.payer_auth_request,\n                    };\n                } else {\n                    payload = {\n                        PaReq: error.body.three_ds_result.payer_auth_request,\n                        TermUrl: error.body.three_ds_result.callback_url,\n                        MD: error.body.three_ds_result.merchant_data,\n                    };\n                }\n\n                this._formPoster.postForm(\n                    error.body.three_ds_result.acs_url,\n                    payload,\n                    undefined,\n                    '_top',\n                );\n            });\n        });\n    }\n\n    finalize(options?: PaymentRequestOptions): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const order = state.getOrder();\n\n        if (order && state.getPaymentStatus() === PaymentStatusTypes.FINALIZE) {\n            this.paymentIntegrationService.finalizeOrder(options);\n        }\n\n        return super.finalize();\n    }\n\n    private _isThreeDSTwoExperimentOn(): boolean {\n        return (\n            this.paymentIntegrationService.getState().getStoreConfigOrThrow().checkoutSettings\n                .features['INT-4994.Opayo_3DS2'] === true\n        );\n    }\n}\n"
  },
  {
    "path": "packages/sagepay-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n}\n"
  },
  {
    "path": "packages/sagepay-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/sezzle-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/sezzle-integration/README.md",
    "content": "# sezzle-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test sezzle-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint sezzle-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/sezzle-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: \"sezzle-integration\",\n    preset: \"../../jest.preset.js\",\n    globals: {\n        \"ts-jest\": {\n            tsconfig: \"<rootDir>/tsconfig.spec.json\",\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: [\"../../jest-setup.js\"],\n    coverageDirectory: \"../../coverage/packages/sezzle-integration\",\n};\n"
  },
  {
    "path": "packages/sezzle-integration/project.json",
    "content": "{\n    \"name\": \"sezzle-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/sezzle-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/sezzle-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/sezzle-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/sezzle-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/sezzle-integration/src/create-sezzle-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createSezzlePaymentStrategy from './create-sezzle-payment-strategy';\nimport SezzlePaymentStrategy from './sezzle-payment-strategy';\n\ndescribe('createSezzlePaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates sezzle payment strategy', () => {\n        const strategy = createSezzlePaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(SezzlePaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/sezzle-integration/src/create-sezzle-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport SezzlePaymentStrategy from './sezzle-payment-strategy';\n\nconst createSezzlePaymentStrategy: PaymentStrategyFactory<SezzlePaymentStrategy> = (\n    paymentIntegrationService,\n) => new SezzlePaymentStrategy(createFormPoster(), paymentIntegrationService);\n\nexport default toResolvableModule(createSezzlePaymentStrategy, [{ id: 'sezzle' }]);\n"
  },
  {
    "path": "packages/sezzle-integration/src/index.spec.ts",
    "content": "import { createSezzlePaymentStrategy } from './index';\n\ndescribe('createExternalPaymentStrategy', () => {\n    it('instantiates external payment strategy', () => {\n        expect(typeof createSezzlePaymentStrategy).toBe('function');\n    });\n});\n"
  },
  {
    "path": "packages/sezzle-integration/src/index.ts",
    "content": "export { default as createSezzlePaymentStrategy } from './create-sezzle-payment-strategy';\n"
  },
  {
    "path": "packages/sezzle-integration/src/sezzle-payment-strategy.spec.ts",
    "content": "import { createFormPoster, FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n    PaymentIntegrationService,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getErrorPaymentResponseBody,\n    getOrderRequestBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport SezzlePaymentStrategy from './sezzle-payment-strategy';\n\ndescribe('SezzlePaymentStrategy', () => {\n    let formPoster: FormPoster;\n    let strategy: SezzlePaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        formPoster = createFormPoster();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new SezzlePaymentStrategy(formPoster, paymentIntegrationService);\n    });\n\n    describe('#execute()', () => {\n        it('redirect to Sezzle if additional action is required with GET mothod', async () => {\n            Object.defineProperty(window, 'location', {\n                value: {\n                    replace: jest.fn(),\n                },\n            });\n\n            const error = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    provider_data: '',\n                    additional_action_required: {\n                        data: {\n                            redirect_url: 'https://sandbox.checkout.sezzle.com',\n                        },\n                        type: 'offsite_redirect',\n                    },\n                    status: 'additional_action_required',\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.reject(error),\n            );\n\n            strategy.execute(getOrderRequestBody());\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(window.location.replace).toHaveBeenCalledWith(\n                'https://sandbox.checkout.sezzle.com',\n            );\n        });\n    });\n});\n"
  },
  {
    "path": "packages/sezzle-integration/src/sezzle-payment-strategy.ts",
    "content": "import { ExternalPaymentStrategy } from '@bigcommerce/checkout-sdk/external-integration';\n\nexport default class SezzlePaymentStrategy extends ExternalPaymentStrategy {\n    protected redirectUrl(url: string): void {\n        window.location.replace(url);\n    }\n}\n"
  },
  {
    "path": "packages/sezzle-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/sezzle-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/sezzle-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/squarev2-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"jest/valid-expect\": \"off\",\n                \"jest/no-if\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"jest/no-test-return-statement\": \"off\",\n                \"@typescript-eslint/no-shadow\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/squarev2-integration/README.md",
    "content": "# squarev2-integration\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test squarev2-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint squarev2-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/squarev2-integration/jest.config.js",
    "content": "const { pathsToModuleNameMapper } = require('ts-jest/utils');\nconst { compilerOptions } = require('../../tsconfig.base.json');\n\nmodule.exports = {\n    displayName: \"squarev2-integration\",\n    preset: \"../../jest.preset.js\",\n    globals: {\n        \"ts-jest\": {\n            tsconfig: \"<rootDir>/tsconfig.spec.json\",\n            diagnostics: false,\n        },\n    },\n    moduleNameMapper: {\n        ...pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/../../' }),\n        // types-only package (no JS entry point), so proxy it to avoid Jest module resolution failure\n        \"@square/web-payments-sdk-types\": \"identity-obj-proxy\",\n    },\n    setupFilesAfterEnv: [\"../../jest-setup.js\"],\n    coverageDirectory: \"../../coverage/packages/squarev2-integration\",\n};\n"
  },
  {
    "path": "packages/squarev2-integration/project.json",
    "content": "{\n    \"name\": \"squarev2-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/squarev2-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/squarev2-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/squarev2-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/squarev2-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/squarev2-integration/src/create-squarev2-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createSquareV2PaymentStrategy from './create-squarev2-payment-strategy';\nimport SquareV2PaymentStrategy from './squarev2-payment-strategy';\n\ndescribe('createSquareV2PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates squarev2 payment strategy', () => {\n        const strategy = createSquareV2PaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(SquareV2PaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/squarev2-integration/src/create-squarev2-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategy,\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport SquareV2PaymentProcessor from './squarev2-payment-processor';\nimport SquareV2PaymentStrategy from './squarev2-payment-strategy';\nimport SquareV2ScriptLoader from './squarev2-script-loader';\n\nconst createSquareV2PaymentStrategy: PaymentStrategyFactory<PaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new SquareV2PaymentStrategy(\n        paymentIntegrationService,\n        new SquareV2PaymentProcessor(\n            new SquareV2ScriptLoader(getScriptLoader()),\n            paymentIntegrationService,\n        ),\n    );\n};\n\nexport default toResolvableModule(createSquareV2PaymentStrategy, [{ id: 'squarev2' }]);\n"
  },
  {
    "path": "packages/squarev2-integration/src/enums.ts",
    "content": "export enum SquareIntent {\n    CHARGE = 'CHARGE',\n    STORE = 'STORE',\n}\n"
  },
  {
    "path": "packages/squarev2-integration/src/index.ts",
    "content": "export { default as createSquareV2PaymentStrategy } from './create-squarev2-payment-strategy';\nexport { WithSquareV2PaymentInitializeOptions } from './squarev2-payment-initialize-options';\n"
  },
  {
    "path": "packages/squarev2-integration/src/is-squarev2-window.ts",
    "content": "import { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport type { Square } from './types';\n\ninterface SquareV2HostWindow extends Window {\n    Square: Square;\n}\n\nfunction isSquareV2Window(window: Window): window is SquareV2HostWindow {\n    return 'Square' in window;\n}\n\nexport default function assertSquareV2Window(window: Window): asserts window is SquareV2HostWindow {\n    if (!isSquareV2Window(window)) {\n        throw new PaymentMethodClientUnavailableError();\n    }\n}\n"
  },
  {
    "path": "packages/squarev2-integration/src/mocks/squarev2-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getSquareV2(isSquareV2ApiV2Enabled: boolean): PaymentMethod {\n    return {\n        id: 'squarev2',\n        logoUrl: '',\n        method: 'credit-card',\n        supportedCards: ['VISA', 'MC', 'AMEX', 'DISCOVER', 'JCB', 'DINERS'],\n        config: {\n            displayName: 'Credit Card',\n            cardCode: true,\n            enablePaypal: true,\n            merchantId: '',\n            testMode: true,\n            isVisaCheckoutEnabled: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        initializationData: {\n            applicationId: 'test',\n            env: 'bar',\n            isSquareV2ApiV2Enabled,\n            locationId: 'foo',\n            paymentData: {\n                nonce: undefined,\n            },\n        },\n    };\n}\n"
  },
  {
    "path": "packages/squarev2-integration/src/mocks/squarev2-web-payments-sdk.mock.ts",
    "content": "import {\n    CardFieldNamesValues,\n    CardInputEvent,\n    CardInputEventTypes,\n    CardInputEventTypesValues,\n    SqEvent,\n} from '../types';\n\nexport function getSquareV2MockFunctions() {\n    const attach = jest.fn().mockResolvedValue(undefined);\n    const configure = jest.fn().mockResolvedValue(undefined);\n    const tokenize = jest.fn().mockResolvedValue({ status: 'OK', token: 'cnon:xxx' });\n    const destroy = jest.fn().mockResolvedValue(true);\n    const listeners: Partial<{\n        [key in CardInputEventTypes]: (event: SqEvent<CardInputEvent>) => void;\n    }> = {};\n    const addEventListener = jest\n        .fn()\n        .mockImplementation(\n            (\n                eventType: CardInputEventTypesValues,\n                callback: (event: SqEvent<CardInputEvent>) => void,\n            ) => {\n                listeners[eventType] = callback;\n            },\n        );\n    const simulateEvent = (\n        type: CardInputEventTypesValues,\n        field: CardFieldNamesValues,\n        isCompletelyValid: boolean,\n    ) => {\n        const callback = listeners[type];\n\n        if (callback) {\n            const fakeEvent = {\n                detail: {\n                    field,\n                    currentState: { isCompletelyValid },\n                },\n            };\n\n            callback(fakeEvent as SqEvent<CardInputEvent>);\n        }\n    };\n    const removeEventListener = jest.fn();\n    const card = jest.fn().mockReturnValue({\n        attach,\n        configure,\n        tokenize,\n        destroy,\n        addEventListener,\n        removeEventListener,\n    });\n    const verifyBuyer = jest.fn().mockResolvedValue({ token: 'verf:yyy', userChallenged: true });\n    const payments = jest.fn().mockReturnValue({ card, verifyBuyer });\n\n    return {\n        attach,\n        configure,\n        tokenize,\n        destroy,\n        addEventListener,\n        simulateEvent,\n        removeEventListener,\n        card,\n        verifyBuyer,\n        payments,\n    };\n}\n"
  },
  {
    "path": "packages/squarev2-integration/src/squarev2-payment-initialize-options.ts",
    "content": "import { CardClassSelectors } from '@square/web-payments-sdk-types';\n\n/**\n * A set of options that are required to initialize the Square payment method.\n *\n * Once Square payment is initialized, an iframed payment element will be\n * inserted into the current page. These options provide a location, styling,\n * and a callback function that advises when it's safe to pay.\n *\n * @example\n *\n * ```html\n * <!-- These container is where the hosted (iframed) payment method element will be inserted -->\n * <div id=\"card-payment\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'squarev2',\n *     squarev2: {\n *         containerId: 'card-payment',\n *         style: {\n *             input: {\n *                 backgroundColor: '#F7F8F9',\n *                 color: '#373F4A',\n *                 fontFamily: 'Helvetica Neue',\n *                 fontSize: '16px',\n *                 fontWeight: 'normal'\n *             }\n *         },\n *         onValidationChange: (isReadyToPay: boolean) => {\n *             if (isReadyToPay) {\n *                 // Show or hide some component or message...\n *             }\n *         }\n *     },\n * });\n * ```\n */\nexport default interface SquareV2PaymentInitializeOptions {\n    /**\n     * The ID of a container which the payment widget should insert into.\n     */\n    containerId: string;\n\n    /**\n     * A map of .css classes and values that customize the style of the\n     * input fields from the card element.\n     *\n     * For more information about applying custom styles to the card form, see\n     * the available [CardClassSelectors](https://developer.squareup.com/reference/sdks/web/payments/objects/CardClassSelectors)\n     * for styling.\n     */\n    style?: CardClassSelectors;\n\n    /**\n     * A callback that gets called when the validity of the\n     * payment component changes.\n     */\n    onValidationChange?: (isReadyToPay: boolean) => void;\n}\n\nexport interface WithSquareV2PaymentInitializeOptions {\n    /**\n     * The options that are required to initialize the Square payment method.\n     * They can be omitted unless you need to support Square.\n     */\n    squarev2?: SquareV2PaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/squarev2-integration/src/squarev2-payment-processor.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\nimport * as rxjs from 'rxjs';\n\nimport {\n    NotInitializedError,\n    PaymentExecuteError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { SquareIntent } from './enums';\nimport { getSquareV2MockFunctions } from './mocks/squarev2-web-payments-sdk.mock';\nimport SquareV2PaymentProcessor from './squarev2-payment-processor';\nimport SquareV2ScriptLoader from './squarev2-script-loader';\nimport {\n    BrowserNotSupportedError,\n    ElementNotFoundError,\n    InvalidEventListenerCallbackError,\n    InvalidOptionError,\n    InvalidPaymentRequestError,\n    InvalidPaymentRequestUpdateError,\n    PaymentMethodUnsupportedError,\n    PlaidMissingNameError,\n    PlaidUninitializedError,\n    ScriptLoaderError,\n    Square,\n    TokenizationError,\n    UnexpectedError,\n    VerifyBuyerError,\n    WebSdkEmbedError,\n} from './types';\n\ndescribe('SquareV2PaymentProcessor', () => {\n    let squareV2ScriptLoader: SquareV2ScriptLoader;\n    let squareV2MockFunctions: ReturnType<typeof getSquareV2MockFunctions>;\n    let squareWebPaymentsSdkMock: Square;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let processor: SquareV2PaymentProcessor;\n\n    beforeEach(async () => {\n        squareV2ScriptLoader = new SquareV2ScriptLoader(createScriptLoader());\n\n        squareV2MockFunctions = getSquareV2MockFunctions();\n\n        squareWebPaymentsSdkMock = {\n            payments: squareV2MockFunctions.payments,\n            errors: {\n                BrowserNotSupportedError,\n                ElementNotFoundError,\n                InvalidOptionError,\n                InvalidEventListenerCallbackError,\n                InvalidPaymentRequestError,\n                InvalidPaymentRequestUpdateError,\n                PaymentMethodUnsupportedError,\n                PlaidMissingNameError,\n                PlaidUninitializedError,\n                ScriptLoaderError,\n                TokenizationError,\n                UnexpectedError,\n                VerifyBuyerError,\n                WebSdkEmbedError,\n            },\n        };\n\n        jest.spyOn(squareV2ScriptLoader, 'load').mockResolvedValue(squareWebPaymentsSdkMock);\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        processor = new SquareV2PaymentProcessor(squareV2ScriptLoader, paymentIntegrationService);\n\n        await processor.initialize({\n            applicationId: 'foo',\n            locationId: 'bar',\n            testMode: true,\n        });\n    });\n\n    afterEach(async () => {\n        await processor.deinitialize();\n    });\n\n    describe('#initialize', () => {\n        it('initializes processor successfully', () => {\n            expect(squareV2ScriptLoader.load).toHaveBeenCalledWith(true);\n            expect(squareWebPaymentsSdkMock.payments).toHaveBeenCalledWith('foo', 'bar');\n        });\n    });\n\n    describe('#initializeCard', () => {\n        it('should create a card payment method and attach it to the container', async () => {\n            await processor.initializeCard({ containerId: 'card-container' });\n\n            expect(squareV2MockFunctions.card).toHaveBeenCalled();\n            expect(squareV2MockFunctions.attach).toHaveBeenCalledWith('#card-container');\n        });\n\n        it('should fail if _payments has not yet been initialized', async () => {\n            await processor.deinitialize();\n\n            const initializeCard = processor.initializeCard({\n                containerId: 'card-container',\n            });\n\n            await expect(initializeCard).rejects.toThrow(NotInitializedError);\n        });\n\n        it('should configure the card element', async () => {\n            await processor.initializeCard({\n                containerId: 'card-container',\n                style: { input: { color: 'foo' } },\n            });\n\n            expect(squareV2MockFunctions.configure).toHaveBeenCalledWith({\n                postalCode: '95555',\n                style: { input: { color: 'foo' } },\n            });\n        });\n\n        it('should fail silently if the card element configuration fails', async () => {\n            squareV2MockFunctions.configure.mockRejectedValue(new Error('Invalid configuration'));\n\n            const initializeCard = processor.initializeCard({\n                containerId: 'card-container',\n            });\n\n            await expect(initializeCard).resolves.not.toThrow('Invalid configuration');\n        });\n\n        it('should subscribe to form validation', async () => {\n            await processor.initializeCard({\n                containerId: 'card-container',\n                onValidationChange: jest.fn(),\n            });\n\n            expect(squareV2MockFunctions.addEventListener).toHaveBeenCalledTimes(6);\n        });\n\n        it('should call onValidationChange once', async () => {\n            const onValidationChange = jest.fn();\n\n            await processor.initializeCard({\n                containerId: 'card-container',\n                onValidationChange,\n            });\n            squareV2MockFunctions.simulateEvent('focusClassAdded', 'cardNumber', true);\n\n            expect(onValidationChange).toHaveBeenCalledTimes(1);\n            expect(onValidationChange).toHaveBeenCalledWith(false);\n        });\n\n        it('should call onValidationChange twice', async () => {\n            const onValidationChange = jest.fn();\n\n            await processor.initializeCard({\n                containerId: 'card-container',\n                onValidationChange,\n            });\n            squareV2MockFunctions.simulateEvent('focusClassAdded', 'cardNumber', true);\n            squareV2MockFunctions.simulateEvent('errorClassRemoved', 'cvv', true);\n\n            expect(onValidationChange).toHaveBeenCalledTimes(2);\n            expect(onValidationChange).toHaveBeenNthCalledWith(1, false);\n            expect(onValidationChange).toHaveBeenNthCalledWith(2, true);\n        });\n\n        it('should validate only blacklisted fields', async () => {\n            const onValidationChange = jest.fn();\n\n            await processor.initializeCard({\n                containerId: 'card-container',\n                onValidationChange,\n            });\n            squareV2MockFunctions.simulateEvent('focusClassAdded', 'cardNumber', true);\n            squareV2MockFunctions.simulateEvent('focusClassRemoved', 'expirationDate', false);\n            squareV2MockFunctions.simulateEvent('errorClassRemoved', 'cvv', true);\n            squareV2MockFunctions.simulateEvent('postalCodeChanged', 'postalCode', false);\n\n            expect(onValidationChange).toHaveBeenCalledTimes(2);\n            expect(onValidationChange).toHaveBeenNthCalledWith(1, false);\n            expect(onValidationChange).toHaveBeenNthCalledWith(2, true);\n        });\n\n        it('should call onValidationChange three times', async () => {\n            const onValidationChange = jest.fn();\n\n            await processor.initializeCard({\n                containerId: 'card-container',\n                onValidationChange,\n            });\n            squareV2MockFunctions.simulateEvent('focusClassAdded', 'cardNumber', true);\n            squareV2MockFunctions.simulateEvent('errorClassRemoved', 'cvv', true);\n            squareV2MockFunctions.simulateEvent('cardBrandChanged', 'cardNumber', false);\n\n            expect(onValidationChange).toHaveBeenCalledTimes(3);\n            expect(onValidationChange).toHaveBeenNthCalledWith(1, false);\n            expect(onValidationChange).toHaveBeenNthCalledWith(2, true);\n            expect(onValidationChange).toHaveBeenNthCalledWith(3, false);\n        });\n    });\n\n    describe('#tokenize', () => {\n        beforeEach(async () => {\n            await processor.initializeCard({ containerId: 'card-container' });\n        });\n\n        it('should fail if _card has not yet initialized', async () => {\n            await processor.deinitialize();\n\n            const nonce = processor.tokenize();\n\n            await expect(nonce).rejects.toThrow(NotInitializedError);\n        });\n\n        it('should tokenize the card payment and return a nonce', async () => {\n            const nonce = await processor.tokenize();\n\n            expect(nonce).toBe('cnon:xxx');\n        });\n\n        it('throws an error if tokenization does not return a nonce', async () => {\n            squareV2MockFunctions.tokenize.mockResolvedValue({ status: 'OK' });\n\n            const nonce = processor.tokenize();\n\n            await expect(nonce).rejects.toThrow();\n        });\n\n        it('throws an error if tokenization status is not OK', async () => {\n            squareV2MockFunctions.tokenize.mockResolvedValue({\n                status: 'OK',\n                errors: [\n                    { type: 'tokenization error 1', message: 'error message 1' },\n                    { type: 'tokenization error 2', message: 'error message 2' },\n                ],\n            });\n\n            const nonce = processor.tokenize();\n\n            await expect(nonce).rejects.toThrow();\n        });\n\n        it('should throw a PaymentExecuteError', async () => {\n            squareV2MockFunctions.tokenize.mockResolvedValue({\n                status: 'OK',\n                errors: [\n                    { type: 'tokenization error 1', message: 'error message 1' },\n                    { type: 'tokenization error 2', message: 'error message 2' },\n                ],\n            });\n\n            try {\n                await processor.tokenize();\n            } catch (error) {\n                if (error instanceof PaymentExecuteError) {\n                    expect(error.name).toBe('SquareV2TokenizationError');\n                    expect(error.type).toBe('custom_provider_execute_error');\n                    expect(error.subtype).toBe('payment.errors.card_error');\n                    expect(error.message).toBe(\n                        'Tokenization failed with status: OK and errors: [{\"type\":\"tokenization error 1\",\"message\":\"error message 1\"},{\"type\":\"tokenization error 2\",\"message\":\"error message 2\"}]',\n                    );\n                }\n            }\n        });\n    });\n\n    describe('#verifyBuyer', () => {\n        beforeEach(async () => {\n            await processor.initializeCard({ containerId: 'card-container' });\n        });\n\n        it('should verify the identity of the card holder and return a verification token', async () => {\n            const expectedDetails = {\n                amount: '190',\n                billingContact: {\n                    addressLines: ['12345 Testing Way', ''],\n                    city: 'Some City',\n                    countryCode: 'US',\n                    familyName: 'Tester',\n                    givenName: 'Test',\n                    phone: '555-555-5555',\n                    postalCode: '95555',\n                    state: 'CA',\n                    email: 'test@bigcommerce.com',\n                },\n                currencyCode: 'USD',\n                intent: 'CHARGE',\n            };\n\n            const nonce = await processor.verifyBuyer('cnon:zzz', SquareIntent.CHARGE);\n\n            expect(nonce).toBe('verf:yyy');\n            expect(squareV2MockFunctions.verifyBuyer).toHaveBeenCalledWith(\n                'cnon:zzz',\n                expectedDetails,\n            );\n        });\n\n        it('should fail if _payments has not yet been initialized', async () => {\n            await processor.deinitialize();\n\n            const nonce = processor.verifyBuyer('cnon:zzz', SquareIntent.CHARGE);\n\n            await expect(nonce).rejects.toThrow(NotInitializedError);\n        });\n    });\n\n    describe('#deinitialize', () => {\n        it('deinitializes processor successfully', async () => {\n            await processor.initializeCard({ containerId: 'card-container' });\n            await processor.deinitialize();\n\n            expect(squareV2MockFunctions.destroy).toHaveBeenCalled();\n        });\n\n        it('should unsubscribe from form validation', async () => {\n            const foo$ = rxjs.of('foo');\n\n            jest.spyOn(rxjs, 'merge').mockReturnValue(foo$);\n\n            const bar$ = rxjs.of('bar');\n\n            jest.spyOn(foo$, 'pipe').mockReturnValue(bar$);\n\n            const spy = jest.spyOn(bar$, 'subscribe');\n\n            await processor.initializeCard({\n                containerId: 'card-container',\n                onValidationChange: jest.fn(),\n            });\n\n            const formValidationSubscription = spy.mock.results[0].value as rxjs.Subscription;\n            const unsubscribe = jest.spyOn(formValidationSubscription, 'unsubscribe');\n\n            await processor.deinitialize();\n\n            expect(unsubscribe).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/squarev2-integration/src/squarev2-payment-processor.ts",
    "content": "import { fromEvent, merge, Subscription } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\nimport {\n    BillingAddress,\n    guard,\n    NotInitializedError,\n    NotInitializedErrorType,\n    PaymentExecuteError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { SquareIntent } from './enums';\nimport SquareV2PaymentInitializeOptions from './squarev2-payment-initialize-options';\nimport SquareV2ScriptLoader from './squarev2-script-loader';\nimport {\n    BillingContact,\n    Card,\n    CardInputEvent,\n    CardInputEventTypes,\n    ChargeVerifyBuyerDetails,\n    Payments,\n    SqEvent,\n    StoreVerifyBuyerDetails,\n} from './types';\n\nexport interface SquareV2PaymentProcessorOptions {\n    applicationId: string;\n    locationId?: string;\n    testMode?: boolean;\n}\n\nexport default class SquareV2PaymentProcessor {\n    private _payments?: Payments;\n    private _card?: Card;\n    private _formValidationSubscription?: Subscription;\n\n    constructor(\n        private _scriptLoader: SquareV2ScriptLoader,\n        private _paymentIntegrationService: PaymentIntegrationService,\n    ) {}\n\n    async initialize({\n        testMode,\n        applicationId,\n        locationId,\n    }: SquareV2PaymentProcessorOptions): Promise<void> {\n        const square = await this._scriptLoader.load(testMode);\n\n        this._payments = square.payments(applicationId, locationId);\n    }\n\n    async deinitialize(): Promise<void> {\n        if (this._formValidationSubscription) {\n            this._formValidationSubscription.unsubscribe();\n        }\n\n        if (this._card) {\n            await this._card.destroy();\n        }\n\n        this._formValidationSubscription = undefined;\n        this._card = undefined;\n        this._payments = undefined;\n    }\n\n    async initializeCard({\n        containerId,\n        style,\n        onValidationChange,\n    }: SquareV2PaymentInitializeOptions): Promise<void> {\n        const { postalCode } = this._paymentIntegrationService.getState().getBillingAddress() || {};\n\n        this._card = await this._getPayments().card();\n        await this._card.attach(`#${containerId}`);\n\n        try {\n            await this._card.configure({ postalCode, style });\n        } catch (_error) {\n            /* Do nothing: we should not block shoppers from buying. */\n        }\n\n        if (onValidationChange) {\n            this._formValidationSubscription = this._subscribeToFormValidation(\n                this._card,\n                onValidationChange,\n            );\n        }\n    }\n\n    async tokenize(): Promise<string> {\n        const result = await this._getCard().tokenize();\n\n        if (result.status !== 'OK' || !result.token) {\n            let errorMessage = `Tokenization failed with status: ${result.status}`;\n\n            if ('errors' in result && result.errors) {\n                errorMessage += ` and errors: ${JSON.stringify(result.errors)}`;\n            }\n\n            throw new PaymentExecuteError(\n                'payment.errors.card_error',\n                'SquareV2TokenizationError',\n                errorMessage,\n            );\n        }\n\n        return result.token;\n    }\n\n    async verifyBuyer(token: string, intent: SquareIntent): Promise<string> {\n        return intent === SquareIntent.CHARGE\n            ? this._chargeVerifyBuyer(token)\n            : this._storeVerifyBuyer(token);\n    }\n\n    private _getPayments(): Payments {\n        return guard(\n            this._payments,\n            () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n        );\n    }\n\n    private _subscribeToFormValidation(\n        card: Card,\n        observer: Required<SquareV2PaymentInitializeOptions>['onValidationChange'],\n    ): Subscription {\n        const blacklist = ['cardNumber', 'cvv'];\n        const invalidFields = new Set<string>(blacklist);\n        const eventObservables = [\n            'focusClassAdded',\n            'focusClassRemoved',\n            'errorClassAdded',\n            'errorClassRemoved',\n            'cardBrandChanged',\n            'postalCodeChanged',\n        ].map((eventType) => fromEvent(card, eventType as CardInputEventTypes));\n\n        return merge(...eventObservables)\n            .pipe(\n                map((event: SqEvent<CardInputEvent>): boolean => {\n                    const {\n                        detail: {\n                            field,\n                            currentState: { isCompletelyValid },\n                        },\n                    } = event;\n\n                    if (blacklist.includes(field)) {\n                        invalidFields[isCompletelyValid ? 'delete' : 'add'](field);\n                    }\n\n                    return invalidFields.size === 0;\n                }),\n                distinctUntilChanged(),\n            )\n            .subscribe(observer);\n    }\n\n    private _getCard(): Card {\n        return guard(\n            this._card,\n            () => new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n        );\n    }\n\n    private _mapToSquareBillingContact({\n        firstName: givenName,\n        lastName: familyName,\n        address1,\n        address2,\n        city,\n        stateOrProvinceCode: state,\n        postalCode,\n        countryCode,\n        email,\n        phone,\n    }: BillingAddress): BillingContact {\n        return {\n            givenName,\n            familyName,\n            addressLines: [address1, address2],\n            city,\n            state,\n            postalCode,\n            countryCode,\n            email,\n            phone,\n        };\n    }\n\n    private async _chargeVerifyBuyer(token: string): Promise<string> {\n        const { getCheckoutOrThrow, getBillingAddressOrThrow } =\n            this._paymentIntegrationService.getState();\n        const { outstandingBalance, cart } = getCheckoutOrThrow();\n\n        const details: ChargeVerifyBuyerDetails = {\n            amount: outstandingBalance.toString(),\n            billingContact: this._mapToSquareBillingContact(getBillingAddressOrThrow()),\n            currencyCode: cart.currency.code,\n            intent: SquareIntent.CHARGE,\n        };\n\n        const response = await this._getPayments().verifyBuyer(token, details);\n\n        return response ? response.token : '';\n    }\n\n    private async _storeVerifyBuyer(token: string): Promise<string> {\n        const { getBillingAddressOrThrow } = this._paymentIntegrationService.getState();\n\n        const details: StoreVerifyBuyerDetails = {\n            billingContact: this._mapToSquareBillingContact(getBillingAddressOrThrow()),\n            intent: SquareIntent.STORE,\n        };\n\n        const response = await this._getPayments().verifyBuyer(token, details);\n\n        return response ? response.token : '';\n    }\n}\n"
  },
  {
    "path": "packages/squarev2-integration/src/squarev2-payment-strategy.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getConfig,\n    getOrderRequestBody,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport { SquareIntent } from './enums';\nimport { getSquareV2 } from './mocks/squarev2-method.mock';\nimport SquareV2PaymentProcessor from './squarev2-payment-processor';\nimport SquareV2PaymentStrategy from './squarev2-payment-strategy';\nimport SquareV2ScriptLoader from './squarev2-script-loader';\n\ndescribe('SquareV2PaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let strategy: SquareV2PaymentStrategy;\n    let processor: SquareV2PaymentProcessor;\n    let options: PaymentInitializeOptions;\n    let verifyBuyerMock: jest.SpyInstance;\n    let loadPaymentMethodMock: jest.SpyInstance;\n\n    const methodId = 'squarev2';\n\n    const toggle3dsExperiment = (value: boolean) => {\n        const storeConfigMock = getConfig().storeConfig;\n\n        storeConfigMock.checkoutSettings.features = {\n            'PROJECT-3828.add_3ds_support_on_squarev2': value,\n        };\n        jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfigOrThrow').mockReturnValue(\n            storeConfigMock,\n        );\n    };\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        loadPaymentMethodMock = jest.spyOn(paymentIntegrationService, 'loadPaymentMethod');\n        loadPaymentMethodMock.mockReturnValue(paymentIntegrationService.getState());\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getSquareV2(false),\n        );\n\n        processor = new SquareV2PaymentProcessor(\n            new SquareV2ScriptLoader(createScriptLoader()),\n            paymentIntegrationService,\n        );\n\n        toggle3dsExperiment(false);\n\n        jest.spyOn(processor, 'initialize').mockResolvedValue(undefined);\n\n        jest.spyOn(processor, 'deinitialize').mockResolvedValue(undefined);\n\n        jest.spyOn(processor, 'initializeCard').mockResolvedValue(undefined);\n\n        jest.spyOn(processor, 'tokenize').mockResolvedValue('cnon:xxx');\n\n        verifyBuyerMock = jest.spyOn(processor, 'verifyBuyer');\n        verifyBuyerMock.mockResolvedValue('verf:yyy');\n\n        strategy = new SquareV2PaymentStrategy(paymentIntegrationService, processor);\n\n        options = {\n            methodId,\n            squarev2: {\n                containerId: 'card-container',\n                style: { input: { color: 'foo' } },\n                onValidationChange: jest.fn(),\n            },\n        };\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize', () => {\n        it('initializes the strategy successfully', async () => {\n            const initialize = strategy.initialize(options);\n\n            await expect(initialize).resolves.toBeUndefined();\n        });\n\n        it('should initialize the processor', async () => {\n            await strategy.initialize(options);\n\n            expect(processor.initialize).toHaveBeenCalledWith({\n                applicationId: 'test',\n                locationId: 'foo',\n                testMode: true,\n            });\n        });\n\n        it('should initialize the card', async () => {\n            await strategy.initialize(options);\n\n            expect(processor.initializeCard).toHaveBeenCalledWith(options.squarev2);\n        });\n\n        describe('should fail if...', () => {\n            test('containerId is not provided', async () => {\n                delete options.squarev2;\n\n                const initialize = strategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(InvalidArgumentError);\n                expect(processor.initialize).not.toHaveBeenCalled();\n                expect(processor.initializeCard).not.toHaveBeenCalled();\n            });\n\n            test('there is no payment method data', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockImplementation(() => {\n                    throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n                });\n\n                const initialize = strategy.initialize(options);\n\n                await expect(initialize).rejects.toThrow(MissingDataError);\n                expect(processor.initialize).not.toHaveBeenCalled();\n                expect(processor.initializeCard).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('#execute', () => {\n        let payload: OrderRequestBody;\n\n        beforeEach(async () => {\n            payload = {\n                ...getOrderRequestBody(),\n                payment: {\n                    methodId,\n                },\n            };\n\n            await strategy.initialize(options);\n        });\n\n        it('executes the strategy successfully', async () => {\n            const execute = strategy.execute(payload);\n\n            await expect(execute).resolves.toBeUndefined();\n        });\n\n        it('should tokenize the card to get the nonce', async () => {\n            await strategy.execute(payload);\n\n            expect(processor.tokenize).toHaveBeenCalled();\n        });\n\n        it('should verify the buyer to get the verification token', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getSquareV2(true));\n            toggle3dsExperiment(true);\n\n            await strategy.execute(payload);\n\n            expect(processor.verifyBuyer).toHaveBeenCalledWith('cnon:xxx', SquareIntent.CHARGE);\n        });\n\n        it('should submit the order', async () => {\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n        });\n\n        it('should submit the payment', async () => {\n            const expectedPayment = {\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        credit_card_token: {\n                            token: 'cnon:xxx',\n                        },\n                        vault_payment_instrument: false,\n                        set_as_default_stored_instrument: false,\n                    },\n                },\n            };\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        it('should submit the payment with verification token', async () => {\n            const expectedPayment = {\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        credit_card_token: {\n                            token: '{\"nonce\":\"cnon:xxx\",\"token\":\"verf:yyy\"}',\n                        },\n                        vault_payment_instrument: false,\n                        set_as_default_stored_instrument: false,\n                    },\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getSquareV2(true));\n            toggle3dsExperiment(true);\n\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(expectedPayment);\n        });\n\n        describe('when storing new card', () => {\n            beforeEach(async () => {\n                payload = {\n                    ...getOrderRequestBody(),\n                    payment: {\n                        methodId,\n                        paymentData: {\n                            shouldSaveInstrument: true,\n                        },\n                    },\n                };\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getSquareV2(true));\n                toggle3dsExperiment(true);\n\n                await strategy.initialize(options);\n            });\n\n            it('should tokenize the card twice', async () => {\n                await strategy.execute(payload);\n\n                expect(processor.tokenize).toHaveBeenCalledTimes(2);\n            });\n\n            it('should verify the buyer twice to get two verification tokens with different intents', async () => {\n                await strategy.execute(payload);\n\n                expect(processor.verifyBuyer).toHaveBeenCalledWith('cnon:xxx', SquareIntent.CHARGE);\n                expect(processor.verifyBuyer).toHaveBeenCalledWith('cnon:xxx', SquareIntent.STORE);\n            });\n\n            it('should submit the payment with verification tokens', async () => {\n                const expectedPayment = {\n                    methodId,\n                    paymentData: {\n                        formattedPayload: {\n                            credit_card_token: {\n                                token: '{\"nonce\":\"cnon:xxx\",\"token\":\"verf:yyy\",\"store_card_nonce\":\"cnon:xxx\",\"store_card_token\":\"verf:yyy\"}',\n                            },\n                            vault_payment_instrument: true,\n                            set_as_default_stored_instrument: false,\n                        },\n                    },\n                };\n\n                await strategy.execute(payload);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expectedPayment,\n                );\n            });\n        });\n\n        describe('when using a stored card', () => {\n            beforeEach(async () => {\n                payload = {\n                    ...getOrderRequestBody(),\n                    payment: {\n                        methodId,\n                        paymentData: {\n                            instrumentId: 'bigpaytoken',\n                        },\n                    },\n                };\n\n                await strategy.initialize(options);\n            });\n\n            it('should not tokenize the card', async () => {\n                await strategy.execute(payload);\n\n                expect(processor.tokenize).not.toHaveBeenCalled();\n            });\n\n            it('should submit the payment', async () => {\n                const expectedPayment = {\n                    methodId,\n                    paymentData: {\n                        formattedPayload: {\n                            bigpay_token: {\n                                token: 'bigpaytoken',\n                            },\n                            vault_payment_instrument: false,\n                            set_as_default_stored_instrument: false,\n                        },\n                    },\n                };\n\n                await strategy.execute(payload);\n\n                expect(loadPaymentMethodMock).not.toHaveBeenCalled();\n                expect(verifyBuyerMock).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expectedPayment,\n                );\n            });\n        });\n\n        describe('when using a stored card with 3Ds verification', () => {\n            beforeEach(async () => {\n                payload = {\n                    ...getOrderRequestBody(),\n                    payment: {\n                        methodId,\n                        paymentData: {\n                            instrumentId: 'bigpaytoken',\n                        },\n                    },\n                };\n\n                toggle3dsExperiment(true);\n\n                const defaultPaymentMethod = getSquareV2(true);\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...defaultPaymentMethod,\n                    initializationData: {\n                        ...defaultPaymentMethod.initializationData,\n                        cardId: 'squareCardId',\n                    },\n                });\n\n                await strategy.initialize(options);\n            });\n\n            it('throws error if cardId is not provided', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getSquareV2(true));\n\n                let executeError;\n\n                try {\n                    await strategy.execute(payload);\n                } catch (error) {\n                    executeError = error;\n                }\n\n                expect(executeError).toBeInstanceOf(PaymentArgumentInvalidError);\n                expect(loadPaymentMethodMock).toHaveBeenCalledWith(methodId, {\n                    params: {\n                        method: methodId,\n                        bigpayToken: 'bigpaytoken',\n                    },\n                });\n                expect(verifyBuyerMock).not.toHaveBeenCalled();\n            });\n\n            it('should submit payment with 3ds verification', async () => {\n                const expectedPayment = {\n                    methodId,\n                    paymentData: {\n                        formattedPayload: {\n                            bigpay_token: {\n                                token: 'bigpaytoken',\n                                three_d_secure: {\n                                    token: 'verf:yyy',\n                                },\n                            },\n                            vault_payment_instrument: false,\n                            set_as_default_stored_instrument: false,\n                        },\n                    },\n                };\n\n                await strategy.execute(payload);\n\n                expect(loadPaymentMethodMock).toHaveBeenCalledWith(methodId, {\n                    params: {\n                        method: methodId,\n                        bigpayToken: 'bigpaytoken',\n                    },\n                });\n                expect(verifyBuyerMock).toHaveBeenCalledWith('squareCardId', SquareIntent.CHARGE);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expectedPayment,\n                );\n            });\n        });\n    });\n\n    describe('#finalize', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            const finalize = strategy.finalize();\n\n            await expect(finalize).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize', () => {\n        it('deinitializes the strategy successfully', async () => {\n            const deinitialize = strategy.deinitialize();\n\n            await expect(deinitialize).resolves.toBeUndefined();\n        });\n\n        it('should deinitialize the processor', async () => {\n            await strategy.deinitialize();\n\n            expect(processor.deinitialize).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/squarev2-integration/src/squarev2-payment-strategy.ts",
    "content": "import {\n    InvalidArgumentError,\n    isHostedInstrumentLike,\n    isVaultedInstrument,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodInvalidError,\n    PaymentStrategy,\n    VaultedInstrument,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { SquareIntent } from './enums';\nimport { WithSquareV2PaymentInitializeOptions } from './squarev2-payment-initialize-options';\nimport SquareV2PaymentProcessor from './squarev2-payment-processor';\nimport {\n    SquareCreditCardTokens,\n    SquareFormattedVaultedInstrument,\n    SquareInitializationData,\n    SquarePaymentMethodInitializationData,\n} from './types';\n\nexport default class SquareV2PaymentStrategy implements PaymentStrategy {\n    constructor(\n        private _paymentIntegrationService: PaymentIntegrationService,\n        private _squareV2PaymentProcessor: SquareV2PaymentProcessor,\n    ) {}\n\n    async initialize(\n        options?: PaymentInitializeOptions & WithSquareV2PaymentInitializeOptions,\n    ): Promise<void> {\n        if (!options?.squarev2?.containerId) {\n            throw new InvalidArgumentError(\n                'Unable to proceed because \"containerId\" argument is not provided.',\n            );\n        }\n\n        const { methodId, squarev2 } = options;\n        const {\n            config: { testMode },\n            initializationData,\n        } = this._paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow<SquarePaymentMethodInitializationData>(methodId);\n        const { applicationId, locationId } = initializationData || {};\n\n        if (!applicationId) {\n            throw new PaymentMethodInvalidError();\n        }\n\n        await this._squareV2PaymentProcessor.initialize({\n            applicationId,\n            locationId,\n            testMode,\n        });\n        await this._squareV2PaymentProcessor.initializeCard(squarev2);\n    }\n\n    async execute({ payment }: OrderRequestBody): Promise<void> {\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        const { methodId, paymentData } = payment;\n        const { shouldSaveInstrument, shouldSetAsDefaultInstrument } = isHostedInstrumentLike(\n            paymentData,\n        )\n            ? paymentData\n            : { shouldSaveInstrument: false, shouldSetAsDefaultInstrument: false };\n\n        await this._paymentIntegrationService.submitOrder();\n\n        const submitPaymentPayload =\n            paymentData && isVaultedInstrument(paymentData)\n                ? await this._getVaultedInstrumentPayload(methodId, paymentData)\n                : await this._getCardPayload(methodId, shouldSaveInstrument);\n\n        await this._paymentIntegrationService.submitPayment({\n            ...payment,\n            paymentData: {\n                formattedPayload: {\n                    ...submitPaymentPayload,\n                    vault_payment_instrument: shouldSaveInstrument || false,\n                    set_as_default_stored_instrument: shouldSetAsDefaultInstrument || false,\n                },\n            },\n        });\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        return this._squareV2PaymentProcessor.deinitialize();\n    }\n\n    private shouldVerify(): boolean {\n        const { features } = this._paymentIntegrationService\n            .getState()\n            .getStoreConfigOrThrow().checkoutSettings;\n\n        return features['PROJECT-3828.add_3ds_support_on_squarev2'];\n    }\n\n    private async _getCardPayload(methodId: string, shouldSaveInstrument?: boolean) {\n        const { getPaymentMethodOrThrow } = this._paymentIntegrationService.getState();\n        const { initializationData } = getPaymentMethodOrThrow<SquareInitializationData>(methodId);\n\n        const cardTokenizationResult = await this._squareV2PaymentProcessor.tokenize();\n\n        if (\n            initializationData && 'isSquareV2ApiV2Enabled' in initializationData\n                ? !initializationData.isSquareV2ApiV2Enabled\n                : !this.shouldVerify()\n        ) {\n            return {\n                credit_card_token: {\n                    token: cardTokenizationResult,\n                },\n            };\n        }\n\n        let tokenData: SquareCreditCardTokens = {\n            nonce: cardTokenizationResult,\n            token: await this._squareV2PaymentProcessor.verifyBuyer(\n                cardTokenizationResult,\n                SquareIntent.CHARGE,\n            ),\n        };\n\n        if (shouldSaveInstrument) {\n            // INFO: additional 'tokenize' is required to verify and save the card\n            // for each 'verifyBuyer' we need to generate new token\n            const tokenForSavingCard = await this._squareV2PaymentProcessor.tokenize();\n\n            tokenData = {\n                ...tokenData,\n                store_card_nonce: tokenForSavingCard,\n                store_card_token: await this._squareV2PaymentProcessor.verifyBuyer(\n                    tokenForSavingCard,\n                    SquareIntent.STORE,\n                ),\n            };\n        }\n\n        return {\n            credit_card_token: {\n                token: JSON.stringify(tokenData),\n            },\n        };\n    }\n\n    private async _getVaultedInstrumentPayload(\n        methodId: string,\n        paymentData: VaultedInstrument,\n    ): Promise<SquareFormattedVaultedInstrument> {\n        const { getPaymentMethodOrThrow } = this._paymentIntegrationService.getState();\n        const { initializationData } = getPaymentMethodOrThrow<SquareInitializationData>(methodId);\n\n        const { instrumentId } = paymentData;\n        const shouldVerify =\n            initializationData && 'isSquareV2ApiV2Enabled' in initializationData\n                ? initializationData.isSquareV2ApiV2Enabled\n                : this.shouldVerify();\n        const verificationToken = shouldVerify\n            ? await this._squareV2PaymentProcessor.verifyBuyer(\n                  await this._getSquareCardIdOrThrow(methodId, instrumentId),\n                  SquareIntent.CHARGE,\n              )\n            : undefined;\n\n        return {\n            bigpay_token: {\n                token: instrumentId,\n                ...(verificationToken && { three_d_secure: { token: verificationToken } }),\n            },\n        };\n    }\n\n    private async _getSquareCardIdOrThrow(methodId: string, instrumentId: string): Promise<string> {\n        const state = await this._paymentIntegrationService.loadPaymentMethod(methodId, {\n            params: { method: methodId, bigpayToken: instrumentId },\n        });\n\n        const { initializationData } =\n            state.getPaymentMethodOrThrow<SquareInitializationData>(methodId);\n        const { cardId } = initializationData || {};\n\n        if (!cardId) {\n            throw new PaymentArgumentInvalidError(['cardId']);\n        }\n\n        return cardId;\n    }\n}\n"
  },
  {
    "path": "packages/squarev2-integration/src/squarev2-script-loader.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport SquareV2ScriptLoader, { SquareV2WebPaymentsSdkEnv } from './squarev2-script-loader';\nimport { Square } from './types';\n\ndescribe('SquareV2ScriptLoader', () => {\n    let scriptLoader: ScriptLoader;\n    let squarev2ScriptLoader: SquareV2ScriptLoader;\n    let squarev2SdkMock: Square;\n\n    beforeEach(() => {\n        scriptLoader = createScriptLoader();\n        squarev2ScriptLoader = new SquareV2ScriptLoader(scriptLoader);\n        squarev2SdkMock = {} as Square;\n\n        jest.spyOn(scriptLoader, 'loadScript').mockImplementation(() => {\n            window.Square = squarev2SdkMock;\n\n            return Promise.resolve();\n        });\n    });\n\n    describe('#load', () => {\n        it('should load the Web Payments SDK successfully', async () => {\n            const sdk = await squarev2ScriptLoader.load();\n\n            expect(sdk).toEqual(squarev2SdkMock);\n        });\n\n        it('should load the Web Payments SDK from the live url', async () => {\n            await squarev2ScriptLoader.load();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(SquareV2WebPaymentsSdkEnv.LIVE);\n        });\n\n        it('should load the Web Payments SDK from the sandbox url', async () => {\n            await squarev2ScriptLoader.load(true);\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(SquareV2WebPaymentsSdkEnv.SANDBOX);\n        });\n\n        it('should fail to load the Web Payments SDK', () => {\n            jest.spyOn(scriptLoader, 'loadScript').mockImplementationOnce(() => {\n                delete window.Square;\n\n                return Promise.resolve();\n            });\n\n            const sdkPromise = squarev2ScriptLoader.load();\n\n            expect(sdkPromise).rejects.toThrow(PaymentMethodClientUnavailableError);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/squarev2-integration/src/squarev2-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport assertSquareV2Window from './is-squarev2-window';\nimport { Square } from './types';\n\nexport enum SquareV2WebPaymentsSdkEnv {\n    LIVE = 'https://web.squarecdn.com/v1/square.js',\n    SANDBOX = 'https://sandbox.web.squarecdn.com/v1/square.js',\n}\n\nexport default class SquareV2ScriptLoader {\n    constructor(private _scriptLoader: ScriptLoader) {}\n\n    async load(testMode = false): Promise<Square> {\n        await this._scriptLoader.loadScript(\n            testMode ? SquareV2WebPaymentsSdkEnv.SANDBOX : SquareV2WebPaymentsSdkEnv.LIVE,\n        );\n\n        assertSquareV2Window(window);\n\n        return window.Square;\n    }\n}\n"
  },
  {
    "path": "packages/squarev2-integration/src/types.ts",
    "content": "export * from '@square/web-payments-sdk-types';\n\nexport interface SquarePaymentMethodInitializationData {\n    applicationId: string;\n    locationId?: string;\n}\n\nexport interface SquareInitializationData {\n    cardId?: string;\n    isSquareV2ApiV2Enabled?: boolean;\n}\n\nexport interface SquareCreditCardTokens {\n    nonce: string;\n    token: string;\n    store_card_nonce?: string;\n    store_card_token?: string;\n}\n\nexport interface SquareFormattedVaultedInstrument {\n    bigpay_token: {\n        token: string;\n        three_d_secure?: { token: string };\n    };\n}\n"
  },
  {
    "path": "packages/squarev2-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/squarev2-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/squarev2-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/storage/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-return\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/storage/README.md",
    "content": "# @bigcommerce/checkout-sdk/storage\n\nCheckout SDK Storage package contains tools implementation for storing data in browser storage like Local Storage (session storage and cookies implementation might be added in the future).\n\n## Table of contents\n- [Features](#features)\n- [How to use package](#how-to-use-package)\n  - [Using Browser storage](#using-browser-storage)\n\n- [Development commands](#development-commands)\n    - [Running unit tests](#running-unit-tests)\n    - [Running lint](#running-lint)\n- [License](#license)\n\n\n## Features\n\nThe storage package provides tools that might be useful to for storing data in LocalStorage, for example:\n* Save some data to use it after customers reloads the page\n\n\n## How to use package\n\n### Using Browser storage\n\nYou can use BrowserStorage implementation inside your integration package. Import BrowserStorage from storage package:\n\n```sh\nimport { BrowserStorage } from '@bigcommerce/checkout-sdk/storage';\n\nconst browserStorage = new BrowserStorage('namespace');\n\nbrowserStorage.setItem('hello', 'world'); \nbrowserStorage.getItem('hello');\n```\n\n`BrowserStorage` contains different useful method:\n* `getItem(key)` is to get an item from the local storage\n* `getItemOnce(key)` is a method that returns an item and removes it from local storage\n* `setItem(key, value)` is a method that saves the item to the local storage\n* `removeItem(key)` is a method that removes the item from local storage\n\n\n\n## Development commands\n\n### Running unit tests\n\nRun `nx test storage` to execute the unit tests via [Jest](https://jestjs.io).\n\n### Running lint\n\nRun `nx lint storage` to execute the lint via [ESLint](https://eslint.org/).\n\n\n## License\n\nMIT\n\n"
  },
  {
    "path": "packages/storage/jest.config.js",
    "content": "module.exports = {\n    displayName: 'storage',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: [\"../../jest-setup.js\"],\n    coverageDirectory: '../../coverage/packages/storage',\n};\n"
  },
  {
    "path": "packages/storage/project.json",
    "content": "{\n    \"name\": \"storage\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/storage/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/storage/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/storage\"],\n            \"options\": {\n                \"jestConfig\": \"packages/storage/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/storage/src/browser-storage.spec.ts",
    "content": "import BrowserStorage from './browser-storage';\n\ndescribe('BrowserStorage', () => {\n    afterEach(() => {\n        localStorage.clear();\n    });\n\n    it('stores item with key that is prefixed with namespace', () => {\n        const storage = new BrowserStorage('foobar');\n\n        storage.setItem('message', 'Hello world');\n\n        expect(localStorage.getItem('foobar.message')).toEqual(JSON.stringify('Hello world'));\n    });\n\n    it('stores item as JSON string and restores it back to its original type when it is retrieved', () => {\n        const storage = new BrowserStorage('foobar');\n\n        storage.setItem('flag', true);\n        storage.setItem('numbers', [1, 2, 3]);\n\n        expect(storage.getItem('flag')).toBe(true);\n\n        expect(storage.getItem('numbers')).toEqual([1, 2, 3]);\n    });\n\n    it('retrieves item and removes it from storage', () => {\n        const storage = new BrowserStorage('foobar');\n\n        storage.setItem('message', 'Hello world');\n\n        expect(storage.getItemOnce('message')).toBe('Hello world');\n\n        expect(storage.getItem('message')).toBeNull();\n    });\n\n    it('removes item from storage', () => {\n        const storage = new BrowserStorage('foobar');\n\n        storage.setItem('message', 'Hello world');\n        storage.removeItem('message');\n\n        expect(storage.getItem('message')).toBeNull();\n    });\n\n    it('returns null for unknown key', () => {\n        const storage = new BrowserStorage('foobar');\n\n        expect(storage.getItem('abc')).toBeNull();\n    });\n});\n"
  },
  {
    "path": "packages/storage/src/browser-storage.ts",
    "content": "import LocalStorage from 'local-storage-fallback';\n\nexport default class BrowserStorage {\n    constructor(private namespace: string) {}\n\n    getItem<TValue = unknown>(key: string): TValue | null {\n        const rawValue = LocalStorage.getItem(this.withNamespace(key));\n\n        if (rawValue === null) {\n            return null;\n        }\n\n        try {\n            return JSON.parse(rawValue);\n        } catch (error) {\n            this.removeItem(this.withNamespace(key));\n\n            return null;\n        }\n    }\n\n    getItemOnce<TValue = unknown>(key: string): TValue | null {\n        const value = this.getItem<TValue>(key);\n\n        this.removeItem(key);\n\n        return value;\n    }\n\n    setItem<TValue = unknown>(key: string, value: TValue): void {\n        return LocalStorage.setItem(this.withNamespace(key), JSON.stringify(value));\n    }\n\n    removeItem(key: string): void {\n        return LocalStorage.removeItem(this.withNamespace(key));\n    }\n\n    private withNamespace(key: string): string {\n        return `${this.namespace}.${key}`;\n    }\n}\n"
  },
  {
    "path": "packages/storage/src/cookie-storage.spec.ts",
    "content": "import CookieStorage from './cookie-storage';\n\ndescribe('CookieStorage', () => {\n    beforeEach(() => {\n        Object.defineProperty(window.document, 'cookie', {\n            writable: true,\n            value: `first_user=John;last_user=Ann;description=${encodeURIComponent(\n                'any small description =',\n            )}`,\n        });\n    });\n\n    afterEach(() => {\n        Object.defineProperty(window.document, 'cookie', {\n            writable: true,\n            value: '',\n        });\n    });\n\n    it('retrieve an existing value by name', () => {\n        expect(CookieStorage.get('first_user')).toContain('John');\n        expect(CookieStorage.get('description')).toBe('any small description =');\n    });\n\n    it('returns null if there is no value by name', () => {\n        expect(CookieStorage.get('some')).toBeNull();\n    });\n\n    it('retrieve the existing value by name after setting', () => {\n        const date = new Date('09 Jan 2024 14:04:48 GMT');\n\n        CookieStorage.set('agent', 'Smith', {\n            expires: date,\n            secure: false,\n            domain: 'domain',\n            path: 'path',\n        });\n\n        expect(window.document.cookie).toContain(\n            'agent=Smith; expires=Tue, 09 Jan 2024 14:04:48 GMT; path=path; domain=domain',\n        );\n    });\n\n    it('retrieve the existing value by name after setting without additional options', () => {\n        CookieStorage.set('agent', 'Smith');\n\n        expect(window.document.cookie).toContain('agent=Smith');\n    });\n\n    it('remove value by name', () => {\n        jest.spyOn(CookieStorage, 'set').mockImplementation();\n\n        CookieStorage.remove('last_user');\n\n        expect(CookieStorage.set).toHaveBeenCalledWith('last_user', '', { expires: new Date(0) });\n    });\n});\n"
  },
  {
    "path": "packages/storage/src/cookie-storage.ts",
    "content": "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"
  },
  {
    "path": "packages/storage/src/index.ts",
    "content": "export { default as BrowserStorage } from './browser-storage';\nexport { default as CookieStorage } from './cookie-storage';\n"
  },
  {
    "path": "packages/storage/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/storage/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/stripe-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-shadow\": \"off\",\n                \"no-param-reassign\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@eslint-disable-next-line\": \"off\",\n                \"@typescript-eslint/no-misused-promises\": \"off\"\n\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"jest/no-conditional-expect\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {}\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/stripe-integration/README.md",
    "content": "# stripe-integration\n\nThis package contains the integration layer for the [Stripe](https://stripe.com/) provider.\n\n# StripeUPE\n\nFor additional information on Stripe API, please refer to [Stripe API documentation](https://stripe.com/docs).\n\n## Running unit tests\n\nThis package uses [Jest](https://jestjs.io) for testing.\n\nRun `nx test stripe-integration` to execute all the unit tests for this package.\n\nRun `nx test stripe-integration --testFile=\"<FILE_NAME>\"` to execute unit tests for a single file.\n\n## Running lint\n\nRun `nx lint stripe-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/stripe-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'stripe-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/stripe-integration',\n    coveragePathIgnorePatterns: ['<rootDir>/src/index.ts'],\n};\n"
  },
  {
    "path": "packages/stripe-integration/project.json",
    "content": "{\n    \"name\": \"stripe-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/stripe-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/stripe-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/stripe-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/stripe-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/index.ts",
    "content": "export { default as createStripeV3PaymentStrategy } from './stripev3/create-stripev3-payment-strategy';\nexport { default as createStripeUPEPaymentStrategy } from './stripe-upe/create-stripe-upe-payment-strategy';\nexport { default as createStripeUPECustomerStrategy } from './stripe-upe/create-stripe-upe-customer-strategy';\nexport { default as createStripeOCSPaymentStrategy } from './stripe-ocs/create-stripe-ocs-payment-strategy';\nexport { default as createStripeLinkV2CustomerStrategy } from './stripe-ocs/create-stripe-link-v2-customer-strategy';\nexport { default as createLinkV2ButtonStrategy } from './stripe-ocs/create-stripe-link-v2-button-strategy';\nexport { default as createStripeCSPaymentStrategy } from './stripe-cs/create-stripe-cs-payment-strategy';\n\nexport { default as StripeV3PaymentStrategy } from './stripev3/stripev3-payment-strategy';\nexport { default as StripeUPEPaymentStrategy } from './stripe-upe/stripe-upe-payment-strategy';\nexport { default as StripeUPECustomerStrategy } from './stripe-upe/stripe-upe-customer-strategy';\nexport { default as StripeOCSPaymentStrategy } from './stripe-ocs/stripe-ocs-payment-strategy';\nexport { default as StripeCSPaymentStrategy } from './stripe-cs/stripe-cs-payment-strategy';\n\nexport {\n    default as StripeV3PaymentInitializeOption,\n    WithStripeV3PaymentInitializeOptions,\n} from './stripev3/stripev3-initialize-options';\nexport {\n    default as StripeUPEPaymentInitializeOption,\n    WithStripeUPEPaymentInitializeOptions,\n} from './stripe-upe/stripe-upe-initialize-options';\nexport {\n    default as StripeUPECustomerInitializeOption,\n    WithStripeUPECustomerInitializeOptions,\n} from './stripe-upe/stripeupe-customer-initialize-options';\nexport {\n    default as StripeOCSPaymentInitializeOption,\n    WithStripeOCSPaymentInitializeOptions,\n} from './stripe-ocs/stripe-ocs-initialize-options';\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-cs/create-stripe-cs-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createStripeCSPaymentStrategy from './create-stripe-cs-payment-strategy';\nimport StripeCSPaymentStrategy from './stripe-cs-payment-strategy';\n\ndescribe('createStripeCSPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('create Stripe Checkout Session payment strategy', () => {\n        const strategy = createStripeCSPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(StripeCSPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-cs/create-stripe-cs-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    StripeIntegrationService,\n    StripeScriptLoader,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport StripeCSPaymentStrategy from './stripe-cs-payment-strategy';\n\nconst createStripeCSPaymentStrategy: PaymentStrategyFactory<StripeCSPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    const stripeScriptLoader = new StripeScriptLoader(getScriptLoader());\n\n    return new StripeCSPaymentStrategy(\n        paymentIntegrationService,\n        stripeScriptLoader,\n        new StripeIntegrationService(paymentIntegrationService, stripeScriptLoader),\n    );\n};\n\nexport default toResolvableModule(createStripeCSPaymentStrategy, [\n    { gateway: 'stripeocs', id: 'checkout_session' },\n]);\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-cs/stripe-cs-payment-strategy.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    BillingAddress,\n    InvalidArgumentError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodFailedError,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getCheckout,\n    getErrorPaymentResponseBody,\n    getResponse,\n    getShippingAddress,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    getStripeCheckoutInstanceMock,\n    getStripeCheckoutSessionActionsMock,\n    getStripeIntegrationServiceMock,\n    getStripeJsMock,\n    StripeCheckoutSession,\n    StripeCheckoutSessionPaymentStatus,\n    StripeClient,\n    StripeEventMock,\n    StripeIntegrationService,\n    StripeJsVersion,\n    StripeLoadActionsResultType,\n    StripePaymentMethodType,\n    StripeScriptLoader,\n    StripeStringConstants,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport { WithStripeOCSPaymentInitializeOptions } from '../stripe-ocs/stripe-ocs-initialize-options';\nimport {\n    getStripeOCSInitializeOptionsMock,\n    getStripeOCSMock,\n    getStripeOCSOrderRequestBodyMock,\n} from '../stripe-ocs/stripe-ocs.mock';\n\nimport StripeCSPaymentStrategy from './stripe-cs-payment-strategy';\n\ndescribe('StripeOCSPaymentStrategy', () => {\n    let stripeCSPaymentStrategy: StripeCSPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let stripeScriptLoader: StripeScriptLoader;\n    let stripeIntegrationService: StripeIntegrationService;\n    let stripeOptions: PaymentInitializeOptions & WithStripeOCSPaymentInitializeOptions;\n    let stripeJsMock: StripeClient;\n\n    const methodId = 'checkout_session';\n    const gatewayId = 'stripeocs';\n\n    beforeEach(() => {\n        const scriptLoader = createScriptLoader();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        stripeScriptLoader = new StripeScriptLoader(scriptLoader);\n        stripeIntegrationService = getStripeIntegrationServiceMock();\n        stripeCSPaymentStrategy = new StripeCSPaymentStrategy(\n            paymentIntegrationService,\n            stripeScriptLoader,\n            stripeIntegrationService,\n        );\n\n        stripeOptions = getStripeOCSInitializeOptionsMock();\n        stripeJsMock = getStripeJsMock();\n\n        jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n            jest.fn(() => Promise.resolve(stripeJsMock)),\n        );\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getStripeOCSMock(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartLocale').mockReturnValue('en');\n        jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n            Promise.resolve(stripeJsMock.initCheckout({ clientSecret: 'clientSecret' })),\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize', () => {\n        it('throws error if no stripe initialization options', async () => {\n            await expect(\n                stripeCSPaymentStrategy.initialize({\n                    ...stripeOptions,\n                    stripeocs: undefined,\n                }),\n            ).rejects.toThrow(NotInitializedError);\n            expect(stripeIntegrationService.initCheckoutEventsSubscription).not.toHaveBeenCalled();\n        });\n\n        it('throws error if no container id in stripe options', async () => {\n            await expect(\n                stripeCSPaymentStrategy.initialize({\n                    ...stripeOptions,\n                    stripeocs: {\n                        ...stripeOptions.stripeocs,\n                        render: jest.fn(),\n                        containerId: '',\n                    },\n                }),\n            ).rejects.toThrow(NotInitializedError);\n            expect(stripeIntegrationService.initCheckoutEventsSubscription).not.toHaveBeenCalled();\n        });\n\n        it('throws error if no gatewayId option', async () => {\n            await expect(\n                stripeCSPaymentStrategy.initialize({\n                    ...stripeOptions,\n                    gatewayId: undefined,\n                }),\n            ).rejects.toThrow(NotInitializedError);\n            expect(stripeIntegrationService.initCheckoutEventsSubscription).not.toHaveBeenCalled();\n        });\n\n        it('throws error if payment method does not like stripe payment method', async () => {\n            const stripePaymentMethod = getStripeOCSMock();\n            const onErrorMock = jest.fn();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...stripePaymentMethod,\n                initializationData: undefined,\n            });\n\n            await stripeCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    containerId: 'containerId',\n                    render: jest.fn(),\n                    onError: onErrorMock,\n                },\n            });\n\n            expect(onErrorMock).toHaveBeenCalled();\n        });\n\n        it('throws error if payment method does not have clientToken', async () => {\n            const stripePaymentMethod = getStripeOCSMock();\n            const onErrorMock = jest.fn();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...stripePaymentMethod,\n                clientToken: undefined,\n            });\n\n            await stripeCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    containerId: 'containerId',\n                    render: jest.fn(),\n                    onError: onErrorMock,\n                },\n            });\n\n            expect(onErrorMock).toHaveBeenCalled();\n        });\n\n        it('throws error if stripe payment element not created', async () => {\n            const onErrorMock = jest.fn();\n            const renderMock = jest.fn();\n            const togglePreloaderMock = jest.fn();\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    createPaymentElement: jest.fn().mockReturnValue(null),\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    containerId: 'containerId',\n                    render: renderMock,\n                    onError: onErrorMock,\n                    togglePreloader: togglePreloaderMock,\n                },\n            });\n\n            expect(onErrorMock).toHaveBeenCalled();\n            expect(stripeIntegrationService.mountElement).not.toHaveBeenCalled();\n        });\n\n        it('should initialize', async () => {\n            const onErrorMock = jest.fn();\n            const renderMock = jest.fn();\n            const togglePreloaderMock = jest.fn();\n\n            await stripeCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    containerId: 'containerId',\n                    render: renderMock,\n                    onError: onErrorMock,\n                    togglePreloader: togglePreloaderMock,\n                },\n            });\n\n            expect(stripeScriptLoader.getStripeCheckout).toHaveBeenCalled();\n            expect(onErrorMock).not.toHaveBeenCalled();\n            expect(togglePreloaderMock).toHaveBeenCalled();\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalled();\n            expect(stripeIntegrationService.mountElement).toHaveBeenCalled();\n        });\n\n        it('Throws error if no stripe actions loaded', async () => {\n            const onErrorMock = jest.fn();\n            const renderMock = jest.fn();\n            const togglePreloaderMock = jest.fn();\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    loadActions: () =>\n                        Promise.resolve({\n                            type: StripeLoadActionsResultType.ERROR,\n                            error: { message: 'stripe actions error' },\n                        }),\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    ...stripeOptions.stripeocs,\n                    containerId: 'containerId',\n                    render: renderMock,\n                    onError: onErrorMock,\n                    togglePreloader: togglePreloaderMock,\n                },\n            });\n\n            expect(onErrorMock).toHaveBeenCalled();\n        });\n\n        it('initialize accordion close handled', async () => {\n            const onErrorMock = jest.fn();\n            const collapseMock = jest.fn();\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(StripeEventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n                collapse: collapseMock,\n            }));\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    getPaymentElement: createMock,\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    containerId: 'containerId',\n                    render: jest.fn(),\n                    onError: onErrorMock,\n                    handleClosePaymentMethod: jest.fn().mockImplementation((callback) => {\n                        callback();\n                    }),\n                },\n            });\n\n            expect(onErrorMock).not.toHaveBeenCalled();\n            expect(collapseMock).toHaveBeenCalled();\n        });\n\n        it('should not collapse accordion if element not initialized', async () => {\n            const onErrorMock = jest.fn();\n            const collapseMock = jest.fn();\n\n            await stripeCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    containerId: 'containerId',\n                    render: jest.fn(),\n                    onError: onErrorMock,\n                    handleClosePaymentMethod: jest.fn().mockImplementation((callback) => {\n                        callback();\n                    }),\n                },\n            });\n\n            expect(onErrorMock).not.toHaveBeenCalled();\n            expect(collapseMock).not.toHaveBeenCalled();\n        });\n\n        it('loads stripe js only once per initialization', async () => {\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledWith(\n                getStripeOCSMock().initializationData,\n                'en',\n                StripeJsVersion.CLOVER,\n            );\n        });\n\n        it('should enable Link by initialization data option', async () => {\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(StripeEventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            }));\n            const stripePaymentMethod = getStripeOCSMock();\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    createPaymentElement: createMock,\n                }),\n            );\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...stripePaymentMethod,\n                initializationData: {\n                    ...stripePaymentMethod.initializationData,\n                    enableLink: true,\n                },\n            });\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            expect(createMock).toHaveBeenCalledWith({\n                fields: {\n                    billingDetails: {\n                        email: StripeStringConstants.NEVER,\n                        name: StripeStringConstants.NEVER,\n                        address: StripeStringConstants.NEVER,\n                    },\n                },\n                wallets: {\n                    applePay: StripeStringConstants.NEVER,\n                    googlePay: StripeStringConstants.NEVER,\n                    link: StripeStringConstants.AUTO,\n                },\n                layout: {\n                    type: 'accordion',\n                    defaultCollapsed: false,\n                    radios: true,\n                    spacedAccordionItems: false,\n                    visibleAccordionItemsCount: 0,\n                },\n            });\n        });\n\n        it('should Disable Link by initialization data option', async () => {\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(StripeEventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            }));\n            const stripePaymentMethod = getStripeOCSMock();\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    createPaymentElement: createMock,\n                }),\n            );\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...stripePaymentMethod,\n                initializationData: {\n                    ...stripePaymentMethod.initializationData,\n                    enableLink: false,\n                },\n            });\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            expect(createMock).toHaveBeenCalledWith({\n                fields: {\n                    billingDetails: {\n                        email: StripeStringConstants.NEVER,\n                        name: StripeStringConstants.NEVER,\n                        address: StripeStringConstants.NEVER,\n                    },\n                },\n                wallets: {\n                    applePay: StripeStringConstants.NEVER,\n                    googlePay: StripeStringConstants.NEVER,\n                    link: StripeStringConstants.NEVER,\n                },\n                layout: {\n                    type: 'accordion',\n                    defaultCollapsed: false,\n                    radios: true,\n                    spacedAccordionItems: false,\n                    visibleAccordionItemsCount: 0,\n                },\n            });\n        });\n\n        describe('stripe email updating', () => {\n            let updateEmailMock: jest.Mock;\n            let getSessionMock: jest.Mock;\n\n            beforeEach(() => {\n                paymentIntegrationService = new PaymentIntegrationServiceMock();\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getBillingAddress',\n                ).mockReturnValue({ email: 'test@bigcommerce.com' } as BillingAddress);\n            });\n\n            const mockStripeCheckout = (stripeCheckoutSession?: StripeCheckoutSession) => {\n                updateEmailMock = jest.fn();\n                getSessionMock = jest.fn(() => Promise.resolve(stripeCheckoutSession));\n\n                jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                    Promise.resolve({\n                        ...getStripeCheckoutInstanceMock(),\n                        loadActions: () =>\n                            Promise.resolve({\n                                type: StripeLoadActionsResultType.SUCCESS,\n                                actions: {\n                                    ...getStripeCheckoutSessionActionsMock(),\n                                    updateEmail: updateEmailMock,\n                                    getSession: getSessionMock,\n                                },\n                            }),\n                    }),\n                );\n            };\n\n            it('should update email if checkout session is not set', async () => {\n                mockStripeCheckout({} as StripeCheckoutSession);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(stripeIntegrationService.mountElement).toHaveBeenCalled();\n                expect(getSessionMock).toHaveBeenCalled();\n                expect(updateEmailMock).toHaveBeenCalledWith('test@bigcommerce.com');\n            });\n\n            it('should update email if checkout session email is not set and billing address is not set', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getBillingAddress',\n                ).mockReturnValue(undefined);\n                mockStripeCheckout({ email: '' } as StripeCheckoutSession);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(stripeIntegrationService.mountElement).toHaveBeenCalled();\n                expect(getSessionMock).toHaveBeenCalled();\n                expect(updateEmailMock).toHaveBeenCalledWith('');\n            });\n\n            it('should not update email if checkout session email is set', async () => {\n                mockStripeCheckout({ email: 'test@stripe.com' } as StripeCheckoutSession);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(updateEmailMock).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('stripe shipping address updating', () => {\n            let updateShippingAddressMock: jest.Mock;\n\n            const mockStripeCheckoutWithShipping = () => {\n                updateShippingAddressMock = jest.fn();\n\n                jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                    Promise.resolve({\n                        ...getStripeCheckoutInstanceMock(),\n                        loadActions: () =>\n                            Promise.resolve({\n                                type: StripeLoadActionsResultType.SUCCESS,\n                                actions: {\n                                    ...getStripeCheckoutSessionActionsMock(),\n                                    updateShippingAddress: updateShippingAddressMock,\n                                },\n                            }),\n                    }),\n                );\n            };\n\n            it('should update shipping address on Stripe side from checkout state', async () => {\n                const shippingAddress = getShippingAddress();\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getShippingAddress',\n                ).mockReturnValue(shippingAddress);\n                mockStripeCheckoutWithShipping();\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(updateShippingAddressMock).toHaveBeenCalledWith({\n                    name: `${shippingAddress.firstName} ${shippingAddress.lastName}`,\n                    address: {\n                        city: shippingAddress.city,\n                        country: shippingAddress.countryCode,\n                        postal_code: shippingAddress.postalCode,\n                        line1: shippingAddress.address1,\n                        line2: shippingAddress.address2,\n                        state: shippingAddress.stateOrProvinceCode,\n                    },\n                });\n            });\n\n            it('should not update shipping address if shipping address is not available', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getShippingAddress',\n                ).mockReturnValue(undefined);\n                mockStripeCheckoutWithShipping();\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(updateShippingAddressMock).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('stripe billing address updating', () => {\n            let updateBillingAddressMock: jest.Mock;\n\n            const mockStripeCheckoutWithBilling = () => {\n                updateBillingAddressMock = jest.fn();\n\n                jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                    Promise.resolve({\n                        ...getStripeCheckoutInstanceMock(),\n                        loadActions: () =>\n                            Promise.resolve({\n                                type: StripeLoadActionsResultType.SUCCESS,\n                                actions: {\n                                    ...getStripeCheckoutSessionActionsMock(),\n                                    updateBillingAddress: updateBillingAddressMock,\n                                },\n                            }),\n                    }),\n                );\n            };\n\n            it('should update billing address on Stripe side from checkout state', async () => {\n                const billingAddress = getBillingAddress();\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getBillingAddress',\n                ).mockReturnValue(billingAddress);\n                mockStripeCheckoutWithBilling();\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(updateBillingAddressMock).toHaveBeenCalledWith({\n                    name: `${billingAddress.firstName} ${billingAddress.lastName}`,\n                    address: {\n                        city: billingAddress.city,\n                        country: billingAddress.countryCode,\n                        postal_code: billingAddress.postalCode,\n                        line1: billingAddress.address1,\n                        line2: billingAddress.address2,\n                        state: billingAddress.stateOrProvinceCode,\n                    },\n                });\n            });\n\n            it('should not update billing address if billing address is not available', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getBillingAddress',\n                ).mockReturnValue(undefined);\n                mockStripeCheckoutWithBilling();\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(updateBillingAddressMock).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('adaptive pricing', () => {\n            const mockPaymentMethodWithAdaptivePricing = (adaptivePricingEnabled: boolean) => {\n                const stripePaymentMethod = getStripeOCSMock();\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...stripePaymentMethod,\n                    initializationData: {\n                        ...stripePaymentMethod.initializationData,\n                        adaptivePricingEnabled,\n                    },\n                });\n            };\n\n            const mockStripeCheckoutWithCurrencySelector = (onMock: jest.Mock = jest.fn()) => {\n                const currencySelectorMountMock = jest.fn();\n                const currencySelectorElement = {\n                    mount: currencySelectorMountMock,\n                    unmount: jest.fn(),\n                    on: onMock,\n                    update: jest.fn(),\n                    destroy: jest.fn(),\n                    collapse: jest.fn(),\n                };\n\n                jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                    Promise.resolve({\n                        ...getStripeCheckoutInstanceMock(),\n                        createCurrencySelectorElement: jest.fn(() => currencySelectorElement),\n                    }),\n                );\n\n                return { currencySelectorMountMock, currencySelectorElement };\n            };\n\n            it('should pass adaptivePricing allowed true when adaptivePricingEnabled is true', async () => {\n                mockPaymentMethodWithAdaptivePricing(true);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(stripeScriptLoader.getStripeCheckout).toHaveBeenCalledWith(\n                    expect.anything(),\n                    expect.objectContaining({\n                        adaptivePricing: { allowed: true },\n                    }),\n                );\n            });\n\n            it('should pass adaptivePricing allowed false when adaptivePricingEnabled is not set', async () => {\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(stripeScriptLoader.getStripeCheckout).toHaveBeenCalledWith(\n                    expect.anything(),\n                    expect.objectContaining({\n                        adaptivePricing: { allowed: false },\n                    }),\n                );\n            });\n\n            it('should call onError when adaptivePricingEnabled is true but currencySelectorContainerId is not provided', async () => {\n                const onErrorMock = jest.fn();\n\n                mockPaymentMethodWithAdaptivePricing(true);\n\n                await stripeCSPaymentStrategy.initialize({\n                    ...stripeOptions,\n                    stripeocs: {\n                        containerId: 'containerId',\n                        render: jest.fn(),\n                        onError: onErrorMock,\n                    },\n                });\n\n                expect(onErrorMock).toHaveBeenCalledWith(expect.any(NotInitializedError));\n            });\n\n            it('should mount currency selector element when adaptivePricingEnabled is true', async () => {\n                mockPaymentMethodWithAdaptivePricing(true);\n                const { currencySelectorMountMock } = mockStripeCheckoutWithCurrencySelector();\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(currencySelectorMountMock).toHaveBeenCalledWith(\n                    `#currencySelectorContainerId`,\n                );\n            });\n\n            it('should not mount currency selector element when adaptivePricingEnabled is false', async () => {\n                mockPaymentMethodWithAdaptivePricing(false);\n                const { currencySelectorMountMock } = mockStripeCheckoutWithCurrencySelector();\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(currencySelectorMountMock).not.toHaveBeenCalled();\n            });\n\n            it('should not mount currency selector element when adaptivePricingEnabled is not set', async () => {\n                const { currencySelectorMountMock } = mockStripeCheckoutWithCurrencySelector();\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(currencySelectorMountMock).not.toHaveBeenCalled();\n            });\n\n            it('should call updatePaymentProviderCustomer when currency changes to a different currency', async () => {\n                const currencyEvent = {\n                    complete: false,\n                    elementType: 'currencySelector',\n                    empty: false,\n                    value: { currency: 'EUR' },\n                };\n\n                mockPaymentMethodWithAdaptivePricing(true);\n                mockStripeCheckoutWithCurrencySelector(\n                    jest.fn((_, callback) => callback(currencyEvent)),\n                );\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(\n                    paymentIntegrationService.updatePaymentProviderCustomer,\n                ).toHaveBeenCalledWith({\n                    isCustomerCurrencySelected: true,\n                    customerCurrency: 'eur',\n                });\n            });\n\n            it('should set isCustomerCurrencySelected to false when currency matches cart currency', async () => {\n                const currencyEvent = {\n                    complete: false,\n                    elementType: 'currencySelector',\n                    empty: false,\n                    value: { currency: 'USD' },\n                };\n\n                mockPaymentMethodWithAdaptivePricing(true);\n                mockStripeCheckoutWithCurrencySelector(\n                    jest.fn((_, callback) => callback(currencyEvent)),\n                );\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(\n                    paymentIntegrationService.updatePaymentProviderCustomer,\n                ).toHaveBeenCalledWith({\n                    isCustomerCurrencySelected: false,\n                    customerCurrency: 'usd',\n                });\n            });\n\n            it('should not call updatePaymentProviderCustomer when event value has no currency', async () => {\n                mockPaymentMethodWithAdaptivePricing(true);\n                mockStripeCheckoutWithCurrencySelector(\n                    jest.fn((_, callback) => callback(StripeEventMock)),\n                );\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(\n                    paymentIntegrationService.updatePaymentProviderCustomer,\n                ).not.toHaveBeenCalled();\n            });\n\n            it('should not call updatePaymentProviderCustomer when event has no value', async () => {\n                const noValueEvent = {\n                    complete: false,\n                    elementType: 'currencySelector',\n                    empty: true,\n                };\n\n                mockPaymentMethodWithAdaptivePricing(true);\n                mockStripeCheckoutWithCurrencySelector(\n                    jest.fn((_, callback) => callback(noValueEvent)),\n                );\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(\n                    paymentIntegrationService.updatePaymentProviderCustomer,\n                ).not.toHaveBeenCalled();\n            });\n\n            it('should not mount currency selector when element creation returns null', async () => {\n                jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                    Promise.resolve({\n                        ...getStripeCheckoutInstanceMock(),\n                        getCurrencySelectorElement: jest.fn().mockReturnValue(null),\n                        createCurrencySelectorElement: jest.fn().mockReturnValue(null),\n                    }),\n                );\n\n                mockPaymentMethodWithAdaptivePricing(true);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                expect(\n                    paymentIntegrationService.updatePaymentProviderCustomer,\n                ).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws an error to inform that order finalization is not required', async () => {\n            await expect(stripeCSPaymentStrategy.finalize()).rejects.toBeInstanceOf(\n                OrderFinalizationNotRequiredError,\n            );\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        let unmountMock: jest.Mock;\n        let destroyMock: jest.Mock;\n        let getElementMock: jest.Mock;\n\n        beforeEach(() => {\n            unmountMock = jest.fn();\n            destroyMock = jest.fn();\n            getElementMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: unmountMock,\n                on: jest.fn((_, callback) => callback(StripeEventMock)),\n                update: jest.fn(),\n                destroy: destroyMock,\n                collapse: jest.fn(),\n            }));\n        });\n\n        it('deinitializes stripe payment strategy', async () => {\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    getPaymentElement: getElementMock,\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize(getStripeOCSInitializeOptionsMock());\n            await stripeCSPaymentStrategy.deinitialize();\n\n            expect(unmountMock).toHaveBeenCalled();\n            expect(destroyMock).toHaveBeenCalled();\n        });\n\n        it('deinitializes currency selector element', async () => {\n            const currencySelectorUnmountMock = jest.fn();\n            const currencySelectorDestroyMock = jest.fn();\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    getPaymentElement: getElementMock,\n                    getCurrencySelectorElement: jest.fn().mockReturnValue({\n                        mount: jest.fn(),\n                        unmount: currencySelectorUnmountMock,\n                        on: jest.fn(),\n                        update: jest.fn(),\n                        destroy: currencySelectorDestroyMock,\n                        collapse: jest.fn(),\n                    }),\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize(getStripeOCSInitializeOptionsMock());\n            await stripeCSPaymentStrategy.deinitialize();\n\n            expect(unmountMock).toHaveBeenCalled();\n            expect(destroyMock).toHaveBeenCalled();\n            expect(currencySelectorUnmountMock).toHaveBeenCalled();\n            expect(currencySelectorDestroyMock).toHaveBeenCalled();\n        });\n    });\n\n    describe('#execute()', () => {\n        it('throw error if stripe client not initialized', async () => {\n            await expect(stripeCSPaymentStrategy.execute({})).rejects.toThrow(NotInitializedError);\n        });\n\n        it('throw error if there are no gateway id', async () => {\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeCSPaymentStrategy.execute({\n                    payment: {\n                        methodId: '',\n                        gatewayId: '',\n                    },\n                }),\n            ).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('throw error if there are no method id', async () => {\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeCSPaymentStrategy.execute({\n                    payment: {\n                        gatewayId,\n                        methodId: '',\n                    },\n                }),\n            ).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('execute with store credits', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getCheckoutOrThrow',\n            ).mockReturnValueOnce({\n                ...getCheckout(),\n                isStoreCreditApplied: true,\n            });\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n            await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n            expect(paymentIntegrationService.applyStoreCredit).toHaveBeenCalledWith(true);\n        });\n\n        it('execute without additional actions with selected method in accordion', async () => {\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n            await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n            expect(paymentIntegrationService.applyStoreCredit).not.toHaveBeenCalled();\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(gatewayId, {\n                params: { method: methodId },\n            });\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('execute with selected payment method id without ui handled', async () => {\n            const eventMock = {\n                ...StripeEventMock,\n                collapsed: false,\n            };\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(eventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            }));\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    createPaymentElement: jest.fn(() => createMock()),\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    render: jest.fn(),\n                    containerId: 'containerId',\n                    currencySelectorContainerId: 'currencySelectorContainerId',\n                },\n            });\n            await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: 'card',\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('execute with selected payment method id', async () => {\n            const eventMock = {\n                ...StripeEventMock,\n                collapsed: false,\n            };\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(eventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            }));\n            const paymentMethodSelectMock = jest.fn();\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    createPaymentElement: jest.fn(() => createMock()),\n                }),\n            );\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getStripeOCSMock(methodId));\n\n            await stripeCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                methodId,\n                stripeocs: {\n                    ...stripeOptions.stripeocs,\n                    render: jest.fn(),\n                    containerId: 'containerId',\n                    paymentMethodSelect: paymentMethodSelectMock,\n                },\n            });\n            await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: 'card',\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n            expect(paymentMethodSelectMock).toHaveBeenCalledWith(`${gatewayId}-${methodId}`);\n        });\n\n        it('does not change selected payment method id if accordion collapsed', async () => {\n            const eventMock = {\n                ...StripeEventMock,\n                collapsed: true,\n            };\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(eventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            }));\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    createPaymentElement: jest.fn(() => createMock()),\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    render: jest.fn(),\n                    containerId: 'containerId',\n                },\n            });\n            await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('execute without additional actions without client token', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getStripeOCSMock());\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getStripeOCSMock(),\n                clientToken: undefined,\n            });\n\n            await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                        credit_card_token: {\n                            token: '',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('payment payload without cart', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCart').mockReturnValue(undefined);\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n            await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('payment payload without cart ID', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCart').mockReturnValue({\n                ...getCart(),\n                id: '',\n            });\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n            await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n    });\n\n    describe('#execute, with additional action', () => {\n        let errorResponse: RequestError;\n        let confirmPaymentMock: jest.Mock;\n\n        const mockFirstPaymentRequest = (payload: unknown) => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.reject(payload),\n            );\n        };\n\n        beforeEach(() => {\n            jest.spyOn(stripeIntegrationService, 'isAdditionalActionError').mockReturnValue(true);\n            jest.spyOn(stripeIntegrationService, 'isPaymentCompleted').mockReturnValue(\n                Promise.resolve(false),\n            );\n\n            errorResponse = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [{ code: 'additional_action_required' }],\n                    additional_action_required: {\n                        type: 'additional_action_requires_payment_method',\n                        data: {\n                            redirect_url: 'https://redirect-url.com',\n                            token: 'token',\n                        },\n                    },\n                    status: 'error',\n                }),\n            );\n\n            confirmPaymentMock = jest.fn();\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    loadActions: () =>\n                        Promise.resolve({\n                            type: StripeLoadActionsResultType.SUCCESS,\n                            actions: {\n                                ...getStripeCheckoutSessionActionsMock(),\n                                confirm: confirmPaymentMock,\n                            },\n                        }),\n                }),\n            );\n        });\n\n        it('throws not request error', async () => {\n            mockFirstPaymentRequest(new Error('Not request'));\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId)),\n            ).rejects.toThrow(Error);\n        });\n\n        it('throws not additional action error', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            jest.spyOn(stripeIntegrationService, 'isAdditionalActionError').mockReturnValue(false);\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId)),\n            ).rejects.toThrow(Error);\n        });\n\n        it('throws not initialized error', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(() => {\n                stripeCSPaymentStrategy.deinitialize();\n\n                return Promise.reject(errorResponse);\n            });\n\n            confirmPaymentMock = jest.fn().mockRejectedValue(new Error('stripe error'));\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    loadActions: () =>\n                        Promise.resolve({\n                            type: StripeLoadActionsResultType.SUCCESS,\n                            actions: {\n                                ...getStripeCheckoutSessionActionsMock(),\n                                confirm: confirmPaymentMock,\n                            },\n                        }),\n                }),\n            );\n\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeJsMock)),\n            );\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId)),\n            ).rejects.toThrow(NotInitializedError);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n            expect(confirmPaymentMock).not.toHaveBeenCalled();\n        });\n\n        it('throw stripe error', async () => {\n            const stripeGenericErrorMock = {\n                type: 'cancelation_error',\n                message: 'throw stripe error',\n            };\n\n            mockFirstPaymentRequest(errorResponse);\n            confirmPaymentMock = jest.fn().mockResolvedValue({\n                error: stripeGenericErrorMock,\n            });\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    loadActions: () =>\n                        Promise.resolve({\n                            type: StripeLoadActionsResultType.SUCCESS,\n                            actions: {\n                                ...getStripeCheckoutSessionActionsMock(),\n                                confirm: confirmPaymentMock,\n                            },\n                        }),\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId)),\n            ).rejects.toThrow('throw stripe error');\n        });\n\n        it('throw error if confirmation crashed', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            confirmPaymentMock = jest\n                .fn()\n                .mockReturnValue(Promise.reject(new Error('stripe confirmation error')));\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    loadActions: () =>\n                        Promise.resolve({\n                            type: StripeLoadActionsResultType.SUCCESS,\n                            actions: {\n                                ...getStripeCheckoutSessionActionsMock(),\n                                confirm: confirmPaymentMock,\n                            },\n                        }),\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId)),\n            ).rejects.toThrow('stripe confirmation error');\n        });\n\n        it('throw generic stripe error if no checkout session in response', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            confirmPaymentMock = jest.fn().mockResolvedValue({});\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    loadActions: () =>\n                        Promise.resolve({\n                            type: StripeLoadActionsResultType.SUCCESS,\n                            actions: {\n                                ...getStripeCheckoutSessionActionsMock(),\n                                confirm: confirmPaymentMock,\n                            },\n                        }),\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n            ).rejects.toThrow(PaymentMethodFailedError);\n        });\n\n        it('submit second payment request after stripe confirmation', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            confirmPaymentMock = jest.fn().mockResolvedValue({\n                session: {\n                    id: 'checkoutSessionId',\n                },\n            });\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    loadActions: () =>\n                        Promise.resolve({\n                            type: StripeLoadActionsResultType.SUCCESS,\n                            actions: {\n                                ...getStripeCheckoutSessionActionsMock(),\n                                confirm: confirmPaymentMock,\n                            },\n                        }),\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n            await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(1, {\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n            expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'checkoutSessionId',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('submit second payment request with token from submitPayment response error body if checkout session ID not exists', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            confirmPaymentMock = jest.fn().mockResolvedValue({\n                session: {\n                    id: '',\n                },\n            });\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    loadActions: () =>\n                        Promise.resolve({\n                            type: StripeLoadActionsResultType.SUCCESS,\n                            actions: {\n                                ...getStripeCheckoutSessionActionsMock(),\n                                confirm: confirmPaymentMock,\n                            },\n                        }),\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n            await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(1, {\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n            expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'token',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('throws error on second submitPayment request', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            mockFirstPaymentRequest(new Error('second submitPayment error'));\n            confirmPaymentMock = jest.fn().mockResolvedValue({\n                session: {\n                    id: 'paymentIntentId',\n                    status: {\n                        paymentStatus: StripeCheckoutSessionPaymentStatus.UnPaid,\n                    },\n                },\n            });\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    loadActions: () =>\n                        Promise.resolve({\n                            type: StripeLoadActionsResultType.SUCCESS,\n                            actions: {\n                                ...getStripeCheckoutSessionActionsMock(),\n                                confirm: confirmPaymentMock,\n                            },\n                        }),\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId)),\n            ).rejects.toThrow('second submitPayment error');\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n        });\n\n        it('throws error on second submitPayment request but order already paid on the stripe side', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            mockFirstPaymentRequest(new Error('second submitPayment error'));\n            confirmPaymentMock = jest.fn().mockResolvedValue({\n                session: {\n                    id: 'paymentIntentId',\n                    status: {\n                        paymentStatus: StripeCheckoutSessionPaymentStatus.Paid,\n                    },\n                },\n            });\n\n            jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                Promise.resolve({\n                    ...getStripeCheckoutInstanceMock(),\n                    loadActions: () =>\n                        Promise.resolve({\n                            type: StripeLoadActionsResultType.SUCCESS,\n                            actions: {\n                                ...getStripeCheckoutSessionActionsMock(),\n                                confirm: confirmPaymentMock,\n                            },\n                        }),\n                }),\n            );\n\n            await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId)),\n            ).rejects.toThrow(PaymentMethodFailedError);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            expect(\n                stripeIntegrationService.throwPaymentConfirmationProceedMessage,\n            ).toHaveBeenCalled();\n        });\n\n        describe('sendSecondPaymentRequestOnStripeError', () => {\n            const mockPaymentMethodWithFlag = (sendSecondPaymentRequestOnStripeError: boolean) => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...getStripeOCSMock(),\n                    initializationData: {\n                        ...getStripeOCSMock().initializationData,\n                        sendSecondPaymentRequestOnStripeError,\n                    },\n                });\n            };\n\n            const mockStripeCheckoutWithConfirm = (confirmFn: jest.Mock) => {\n                jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                    Promise.resolve({\n                        ...getStripeCheckoutInstanceMock(),\n                        loadActions: () =>\n                            Promise.resolve({\n                                type: StripeLoadActionsResultType.SUCCESS,\n                                actions: {\n                                    ...getStripeCheckoutSessionActionsMock(),\n                                    confirm: confirmFn,\n                                },\n                            }),\n                    }),\n                );\n            };\n\n            it('sends second submitPayment request with client_side_error when flag is true and stripe returns error', async () => {\n                const stripeErrorMock = { message: 'Your card was declined' };\n\n                mockPaymentMethodWithFlag(true);\n                mockFirstPaymentRequest(errorResponse);\n                confirmPaymentMock = jest.fn().mockResolvedValue({ error: stripeErrorMock });\n                mockStripeCheckoutWithConfirm(confirmPaymentMock);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                await expect(\n                    stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId)),\n                ).rejects.toThrow(PaymentMethodFailedError);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                    2,\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                client_side_error: true,\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('throws PaymentMethodFailedError with stripe decline message even when second submitPayment with client_side_error fails', async () => {\n                const stripeErrorMock = { message: 'Your card was declined' };\n\n                mockPaymentMethodWithFlag(true);\n                mockFirstPaymentRequest(errorResponse);\n                mockFirstPaymentRequest(new Error('second payment failed'));\n                confirmPaymentMock = jest.fn().mockResolvedValue({ error: stripeErrorMock });\n                mockStripeCheckoutWithConfirm(confirmPaymentMock);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                await expect(\n                    stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId)),\n                ).rejects.toThrow('Your card was declined');\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                    2,\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                client_side_error: true,\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('does not send second submitPayment when flag is false and stripe returns error', async () => {\n                const stripeErrorMock = { message: 'Your card was declined' };\n\n                mockPaymentMethodWithFlag(false);\n                mockFirstPaymentRequest(errorResponse);\n                confirmPaymentMock = jest.fn().mockResolvedValue({ error: stripeErrorMock });\n                mockStripeCheckoutWithConfirm(confirmPaymentMock);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                await expect(\n                    stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId)),\n                ).rejects.toThrow(PaymentMethodFailedError);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n            });\n\n            it('sends second submitPayment with client_side_error when confirmation returns no session and flag is true', async () => {\n                mockPaymentMethodWithFlag(true);\n                mockFirstPaymentRequest(errorResponse);\n                confirmPaymentMock = jest.fn().mockResolvedValue({});\n                mockStripeCheckoutWithConfirm(confirmPaymentMock);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n\n                await expect(\n                    stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId)),\n                ).rejects.toThrow(PaymentMethodFailedError);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                    2,\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                client_side_error: true,\n                            }),\n                        }),\n                    }),\n                );\n            });\n        });\n\n        describe('savedPaymentMethods from confirmation session', () => {\n            it('uses savedPaymentMethods from confirmation session instead of calling getSession again', async () => {\n                const existingMethods = [{ id: 'pm_existing', type: 'card', billingDetails: {} }];\n                const newMethods = [\n                    ...existingMethods,\n                    {\n                        id: 'pm_new',\n                        type: 'card',\n                        billingDetails: {},\n                        card: { brand: 'visa', last4: '1234', expMonth: 12, expYear: 2030 },\n                    },\n                ];\n\n                const getSessionMock = jest\n                    .fn()\n                    .mockResolvedValueOnce({}) // initial email check\n                    .mockResolvedValueOnce({}) // during execute _updateCheckoutSessionData\n                    .mockResolvedValueOnce({ savedPaymentMethods: existingMethods }); // before confirm\n\n                const confirmPaymentMockLocal = jest.fn().mockResolvedValue({\n                    session: {\n                        id: 'checkoutSessionId',\n                        savedPaymentMethods: newMethods,\n                        status: {\n                            paymentStatus: StripeCheckoutSessionPaymentStatus.UnPaid,\n                        },\n                    },\n                });\n\n                jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                    Promise.resolve({\n                        ...getStripeCheckoutInstanceMock(),\n                        loadActions: () =>\n                            Promise.resolve({\n                                type: StripeLoadActionsResultType.SUCCESS,\n                                actions: {\n                                    ...getStripeCheckoutSessionActionsMock(),\n                                    confirm: confirmPaymentMockLocal,\n                                    getSession: getSessionMock,\n                                },\n                            }),\n                    }),\n                );\n\n                mockFirstPaymentRequest(errorResponse);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n                await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n                expect(getSessionMock).toHaveBeenCalledTimes(3);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                    methodId,\n                    paymentData: {\n                        formattedPayload: expect.objectContaining({\n                            vault_payment_instrument: true,\n                        }),\n                    },\n                });\n            });\n        });\n\n        describe('vaultings', () => {\n            let confirmPaymentMockLocal: jest.Mock;\n            let getSessionMock: jest.Mock;\n\n            const mockStripeCheckoutWithSession = (\n                getSessionFn: jest.Mock,\n                confirmFn: jest.Mock,\n            ) => {\n                jest.spyOn(stripeScriptLoader, 'getStripeCheckout').mockReturnValue(\n                    Promise.resolve({\n                        ...getStripeCheckoutInstanceMock(),\n                        loadActions: () =>\n                            Promise.resolve({\n                                type: StripeLoadActionsResultType.SUCCESS,\n                                actions: {\n                                    ...getStripeCheckoutSessionActionsMock(),\n                                    confirm: confirmFn,\n                                    getSession: getSessionFn,\n                                },\n                            }),\n                    }),\n                );\n            };\n\n            it('should save instrument when new saved payment method is added after confirmation', async () => {\n                const existingMethods = [\n                    {\n                        id: 'pm_existing1',\n                        type: 'card',\n                        billingDetails: {},\n                        card: { brand: 'visa', last4: '4242', expMonth: 12, expYear: 2030 },\n                    },\n                ];\n                const newMethods = [\n                    ...existingMethods,\n                    {\n                        id: 'pm_new1',\n                        type: 'card',\n                        billingDetails: {},\n                        card: { brand: 'mastercard', last4: '5555', expMonth: 6, expYear: 2028 },\n                    },\n                ];\n\n                getSessionMock = jest\n                    .fn()\n                    .mockResolvedValueOnce({}) // initial email check\n                    .mockResolvedValueOnce({}) // initial email check (during execute _updateCheckoutSessionData)\n                    .mockResolvedValueOnce({ savedPaymentMethods: existingMethods }) // before confirm\n                    .mockResolvedValueOnce({ savedPaymentMethods: newMethods }); // after confirm\n\n                confirmPaymentMockLocal = jest.fn().mockResolvedValue({\n                    session: {\n                        id: 'checkoutSessionId',\n                        status: {\n                            paymentStatus: StripeCheckoutSessionPaymentStatus.UnPaid,\n                        },\n                    },\n                });\n\n                mockStripeCheckoutWithSession(getSessionMock, confirmPaymentMockLocal);\n                mockFirstPaymentRequest(errorResponse);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n                await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                    methodId,\n                    paymentData: {\n                        formattedPayload: expect.objectContaining({\n                            vault_payment_instrument: true,\n                        }),\n                    },\n                });\n            });\n\n            it('should not save instrument when no new saved payment methods are added after confirmation', async () => {\n                const existingMethods = [\n                    {\n                        id: 'pm_existing1',\n                        type: 'card',\n                        billingDetails: {},\n                        card: { brand: 'visa', last4: '4242', expMonth: 12, expYear: 2030 },\n                    },\n                ];\n\n                getSessionMock = jest\n                    .fn()\n                    .mockResolvedValueOnce({}) // initial email check\n                    .mockResolvedValueOnce({}) // during execute _updateCheckoutSessionData\n                    .mockResolvedValueOnce({ savedPaymentMethods: existingMethods }) // before confirm\n                    .mockResolvedValueOnce({ savedPaymentMethods: existingMethods }); // after confirm (same methods)\n\n                confirmPaymentMockLocal = jest.fn().mockResolvedValue({\n                    session: {\n                        id: 'checkoutSessionId',\n                        status: {\n                            paymentStatus: StripeCheckoutSessionPaymentStatus.UnPaid,\n                        },\n                    },\n                });\n\n                mockStripeCheckoutWithSession(getSessionMock, confirmPaymentMockLocal);\n                mockFirstPaymentRequest(errorResponse);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n                await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                    methodId,\n                    paymentData: {\n                        formattedPayload: expect.objectContaining({\n                            vault_payment_instrument: false,\n                        }),\n                    },\n                });\n            });\n\n            it('should not save instrument when savedPaymentMethods is undefined in session', async () => {\n                getSessionMock = jest\n                    .fn()\n                    .mockResolvedValueOnce({}) // initial email check\n                    .mockResolvedValueOnce({}) // during execute _updateCheckoutSessionData\n                    .mockResolvedValueOnce({}) // before confirm (no savedPaymentMethods field)\n                    .mockResolvedValueOnce({}); // after confirm (no savedPaymentMethods field)\n\n                confirmPaymentMockLocal = jest.fn().mockResolvedValue({\n                    session: {\n                        id: 'checkoutSessionId',\n                        status: {\n                            paymentStatus: StripeCheckoutSessionPaymentStatus.UnPaid,\n                        },\n                    },\n                });\n\n                mockStripeCheckoutWithSession(getSessionMock, confirmPaymentMockLocal);\n                mockFirstPaymentRequest(errorResponse);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n                await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                    methodId,\n                    paymentData: {\n                        formattedPayload: expect.objectContaining({\n                            vault_payment_instrument: false,\n                        }),\n                    },\n                });\n            });\n\n            it('should use tokenized_ach when new vaulted instrument is ACH type', async () => {\n                const existingMethods = [\n                    {\n                        id: 'pm_existing1',\n                        type: 'card',\n                        billingDetails: {},\n                        card: { brand: 'visa', last4: '4242', expMonth: 12, expYear: 2030 },\n                    },\n                ];\n                const newMethods = [\n                    ...existingMethods,\n                    {\n                        id: 'pm_new_ach',\n                        type: StripePaymentMethodType.ACH,\n                        billingDetails: {},\n                    },\n                ];\n\n                getSessionMock = jest\n                    .fn()\n                    .mockResolvedValueOnce({}) // initial email check\n                    .mockResolvedValueOnce({}) // during execute _updateCheckoutSessionData\n                    .mockResolvedValueOnce({ savedPaymentMethods: existingMethods }) // before confirm\n                    .mockResolvedValueOnce({ savedPaymentMethods: newMethods }); // after confirm\n\n                confirmPaymentMockLocal = jest.fn().mockResolvedValue({\n                    session: {\n                        id: 'checkoutSessionId',\n                        status: {\n                            paymentStatus: StripeCheckoutSessionPaymentStatus.UnPaid,\n                        },\n                    },\n                });\n\n                mockStripeCheckoutWithSession(getSessionMock, confirmPaymentMockLocal);\n                mockFirstPaymentRequest(errorResponse);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n                await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                    methodId,\n                    paymentData: {\n                        formattedPayload: expect.objectContaining({\n                            tokenized_ach: { token: 'checkoutSessionId' },\n                            vault_payment_instrument: true,\n                        }),\n                    },\n                });\n            });\n\n            it('should use credit_card_token when new vaulted instrument is card type', async () => {\n                const existingMethods = [\n                    {\n                        id: 'pm_existing1',\n                        type: 'card',\n                        billingDetails: {},\n                        card: { brand: 'visa', last4: '4242', expMonth: 12, expYear: 2030 },\n                    },\n                ];\n                const newMethods = [\n                    ...existingMethods,\n                    {\n                        id: 'pm_new_card',\n                        type: StripePaymentMethodType.CreditCard,\n                        billingDetails: {},\n                        card: { brand: 'mastercard', last4: '5555', expMonth: 6, expYear: 2028 },\n                    },\n                ];\n\n                getSessionMock = jest\n                    .fn()\n                    .mockResolvedValueOnce({}) // initial email check\n                    .mockResolvedValueOnce({}) // during execute _updateCheckoutSessionData\n                    .mockResolvedValueOnce({ savedPaymentMethods: existingMethods }) // before confirm\n                    .mockResolvedValueOnce({ savedPaymentMethods: newMethods }); // after confirm\n\n                confirmPaymentMockLocal = jest.fn().mockResolvedValue({\n                    session: {\n                        id: 'checkoutSessionId',\n                        status: {\n                            paymentStatus: StripeCheckoutSessionPaymentStatus.UnPaid,\n                        },\n                    },\n                });\n\n                mockStripeCheckoutWithSession(getSessionMock, confirmPaymentMockLocal);\n                mockFirstPaymentRequest(errorResponse);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n                await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                    methodId,\n                    paymentData: {\n                        formattedPayload: expect.objectContaining({\n                            credit_card_token: { token: 'checkoutSessionId' },\n                            vault_payment_instrument: true,\n                        }),\n                    },\n                });\n            });\n\n            it('should not save instrument when Stripe checkout session returns null', async () => {\n                getSessionMock = jest\n                    .fn()\n                    .mockResolvedValueOnce({}) // initial email check\n                    .mockResolvedValueOnce({}) // during execute _updateCheckoutSessionData\n                    .mockResolvedValueOnce({}) // before confirm\n                    .mockResolvedValueOnce({}); // after confirm\n\n                confirmPaymentMockLocal = jest.fn().mockResolvedValue({\n                    session: {\n                        id: 'checkoutSessionId',\n                        status: {\n                            paymentStatus: StripeCheckoutSessionPaymentStatus.UnPaid,\n                        },\n                    },\n                });\n\n                mockStripeCheckoutWithSession(getSessionMock, confirmPaymentMockLocal);\n                mockFirstPaymentRequest(errorResponse);\n\n                await stripeCSPaymentStrategy.initialize(stripeOptions);\n                await stripeCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock(methodId));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                    methodId,\n                    paymentData: {\n                        formattedPayload: expect.objectContaining({\n                            vault_payment_instrument: false,\n                        }),\n                    },\n                });\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-cs/stripe-cs-payment-strategy.ts",
    "content": "import { merge } from 'lodash';\n\nimport {\n    InvalidArgumentError,\n    isRequestError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    Payment,\n    PaymentInitializeOptions,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentMethod,\n    PaymentMethodFailedError,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    isStripePaymentEvent,\n    StripeAdditionalActionRequired,\n    StripeCheckoutInstance,\n    StripeCheckoutSession,\n    StripeCheckoutSessionActionResult,\n    StripeCheckoutSessionActions,\n    StripeCheckoutSessionPaymentStatus,\n    StripeClient,\n    StripeElement,\n    StripeElementEvent,\n    StripeElementsCreateOptions,\n    StripeEventType,\n    StripeFormattedPaymentPayload,\n    StripeInitializationData,\n    StripeIntegrationService,\n    StripeJsVersion,\n    StripePaymentMethodType,\n    StripeSavedPaymentMethod,\n    StripeScriptLoader,\n    StripeStringConstants,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport StripeOCSPaymentInitializeOptions, {\n    WithStripeOCSPaymentInitializeOptions,\n} from '../stripe-ocs/stripe-ocs-initialize-options';\n\nexport default class StripeCSPaymentStrategy implements PaymentStrategy {\n    private stripeClient?: StripeClient;\n    private stripeCheckout?: StripeCheckoutInstance;\n    private selectedMethodId?: string;\n\n    constructor(\n        private readonly paymentIntegrationService: PaymentIntegrationService,\n        private readonly scriptLoader: StripeScriptLoader,\n        private readonly stripeIntegrationService: StripeIntegrationService,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithStripeOCSPaymentInitializeOptions,\n    ): Promise<void> {\n        const { stripeocs, methodId, gatewayId } = options;\n\n        if (!stripeocs?.containerId || !gatewayId) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        let paymentMethod = this.paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow<StripeInitializationData>(methodId, gatewayId);\n\n        if (!paymentMethod?.clientToken) {\n            await this.paymentIntegrationService.loadPaymentMethod(gatewayId, {\n                params: { method: methodId },\n            });\n\n            paymentMethod = this.paymentIntegrationService\n                .getState()\n                .getPaymentMethodOrThrow<StripeInitializationData>(methodId, gatewayId);\n        }\n\n        try {\n            await this._initStripeCheckoutSession(stripeocs, paymentMethod);\n            await this._updateStripeShopperData();\n            this._initializePaymentElement(stripeocs, paymentMethod);\n            this._initializeAdaptivePricingElement(stripeocs, paymentMethod);\n        } catch (error) {\n            if (error instanceof Error) {\n                stripeocs.onError?.(error);\n            }\n        }\n    }\n\n    async execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = orderRequest;\n        const { methodId, gatewayId } = payment || {};\n\n        if (!this.stripeClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        if (!gatewayId || !methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"gatewayId\" or \"methodId\" argument is not provided.',\n            );\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const { isStoreCreditApplied } = state.getCheckoutOrThrow();\n\n        if (isStoreCreditApplied) {\n            await this.paymentIntegrationService.applyStoreCredit(isStoreCreditApplied);\n        }\n\n        await this._updateCheckoutSessionData(gatewayId, methodId);\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n\n        const { clientToken } = state.getPaymentMethodOrThrow(methodId, gatewayId);\n        const paymentPayload = this._getPaymentPayload(methodId, clientToken || '');\n\n        try {\n            await this.paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error) {\n            await this._processAdditionalAction(error, gatewayId, methodId);\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        const paymentElement = this.stripeCheckout?.getPaymentElement();\n        const currencySelectorElement = this.stripeCheckout?.getCurrencySelectorElement();\n\n        paymentElement?.unmount();\n        paymentElement?.destroy();\n        currencySelectorElement?.unmount();\n        currencySelectorElement?.destroy();\n        this.stripeCheckout = undefined;\n        this.stripeClient = undefined;\n        this.selectedMethodId = undefined;\n\n        return Promise.resolve();\n    }\n\n    private async _initStripeCheckoutSession(\n        stripe: StripeOCSPaymentInitializeOptions,\n        paymentMethod: PaymentMethod<StripeInitializationData>,\n    ): Promise<void> {\n        const { clientToken, initializationData } = paymentMethod;\n\n        if (!clientToken || !initializationData) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        this.stripeClient = await this._loadStripeJs(initializationData);\n\n        const { appearance, fonts } = stripe;\n\n        this.stripeCheckout = await this.scriptLoader.getStripeCheckout(this.stripeClient, {\n            clientSecret: clientToken,\n            elementsOptions: {\n                appearance,\n                fonts,\n            },\n            adaptivePricing: {\n                allowed: !!initializationData?.adaptivePricingEnabled,\n            },\n        });\n    }\n\n    private _initializePaymentElement(\n        stripe: StripeOCSPaymentInitializeOptions,\n        paymentMethod: PaymentMethod<StripeInitializationData>,\n    ) {\n        const { initializationData, id: methodId, gateway } = paymentMethod;\n\n        const { enableLink } = initializationData || {};\n        const {\n            containerId,\n            layout,\n            render,\n            paymentMethodSelect,\n            handleClosePaymentMethod,\n            togglePreloader,\n        } = stripe;\n\n        const stripeElement = this._getStripeElement({\n            fields: {\n                billingDetails: {\n                    email: StripeStringConstants.NEVER,\n                    name: StripeStringConstants.NEVER,\n                    address: StripeStringConstants.NEVER,\n                },\n            },\n            wallets: {\n                applePay: StripeStringConstants.NEVER,\n                googlePay: StripeStringConstants.NEVER,\n                link: enableLink ? StripeStringConstants.AUTO : StripeStringConstants.NEVER,\n            },\n            layout,\n        });\n\n        if (!stripeElement || !gateway) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        this.stripeIntegrationService.mountElement(stripeElement, containerId);\n\n        stripeElement.on(StripeElementEvent.LOADER_START, () => {\n            togglePreloader?.(false);\n        });\n\n        stripeElement.on(StripeElementEvent.READY, () => {\n            render();\n        });\n\n        stripeElement.on(StripeElementEvent.CHANGE, (event: StripeEventType) => {\n            this._onStripeElementChange(event, gateway, methodId, paymentMethodSelect);\n        });\n\n        handleClosePaymentMethod?.(this._collapseStripeElement.bind(this));\n    }\n\n    private async _loadStripeJs(\n        initializationData: StripeInitializationData,\n    ): Promise<StripeClient> {\n        if (this.stripeClient) {\n            return this.stripeClient;\n        }\n\n        const state = this.paymentIntegrationService.getState();\n\n        return this.scriptLoader.getStripeClient(\n            initializationData,\n            state.getCartLocale(),\n            StripeJsVersion.CLOVER,\n        );\n    }\n\n    private async _getStripeActionsOrThrow(): Promise<StripeCheckoutSessionActions> {\n        if (!this.stripeCheckout) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const { actions, error } = await this.stripeCheckout.loadActions();\n\n        if (!actions || error) {\n            throw new PaymentMethodFailedError(error?.message);\n        }\n\n        return actions;\n    }\n\n    private _getStripeElement(options?: StripeElementsCreateOptions): StripeElement | undefined {\n        return (\n            this.stripeCheckout?.getPaymentElement() ||\n            this.stripeCheckout?.createPaymentElement(options)\n        );\n    }\n\n    private _onStripeElementChange(\n        event: StripeEventType,\n        gatewayId: string,\n        methodId: string,\n        paymentMethodSelect?: (id: string) => void,\n    ) {\n        if (!isStripePaymentEvent(event) || event.collapsed) {\n            return;\n        }\n\n        this.selectedMethodId = event.value.type;\n        paymentMethodSelect?.(`${gatewayId}-${methodId}`);\n    }\n\n    private _collapseStripeElement() {\n        const stripeElement = this.stripeCheckout?.getPaymentElement();\n\n        stripeElement?.collapse();\n    }\n\n    private async _updateCheckoutSessionData(gatewayId: string, methodId: string): Promise<void> {\n        await this._updateStripeShopperData();\n\n        // INFO: to trigger checkout session data update on the BE side we need to make stripe config request\n        await this.paymentIntegrationService.loadPaymentMethod(gatewayId, {\n            params: { method: methodId },\n        });\n    }\n\n    private _getPaymentPayload(\n        methodId: string,\n        token: string,\n        newVaultedStripeInstrument?: StripeSavedPaymentMethod,\n    ): Payment<StripeFormattedPaymentPayload> {\n        const cartId = this.paymentIntegrationService.getState().getCart()?.id || '';\n        const tokenizedOptions = this._getTokenizedOptions(token, newVaultedStripeInstrument);\n\n        const formattedPayload = {\n            cart_id: cartId,\n            confirm: false,\n            method: this.selectedMethodId,\n            vault_payment_instrument: !!newVaultedStripeInstrument,\n            ...tokenizedOptions,\n        };\n\n        return {\n            methodId,\n            paymentData: {\n                formattedPayload,\n            },\n        };\n    }\n\n    private async _processAdditionalAction(\n        error: unknown,\n        gatewayId: string,\n        methodId: string,\n    ): Promise<PaymentIntegrationSelectors | undefined> {\n        if (\n            !isRequestError(error) ||\n            !this.stripeIntegrationService.isAdditionalActionError(error.body.errors)\n        ) {\n            throw error;\n        }\n\n        const { data: additionalActionData } = error.body?.additional_action_required || {};\n        const { token } = additionalActionData || {};\n        const existingStripeSavedPaymentMethods = await this._getStripeSavedPaymentMethodsOrThrow();\n        const { session: stripeCheckoutSession, error: stripeError } =\n            await this._confirmStripePayment(additionalActionData);\n        const newStripeSavedPaymentMethods = await this._getStripeSavedPaymentMethodsOrThrow(\n            stripeCheckoutSession,\n        );\n        const { id: checkoutSessionId, status: checkoutSessionStatus } =\n            stripeCheckoutSession || {};\n        const newVaultedStripeInstrument = this._getNewVaultedStripeInstrument(\n            existingStripeSavedPaymentMethods,\n            newStripeSavedPaymentMethods,\n        );\n        const paymentPayload = this._getPaymentPayload(\n            methodId,\n            checkoutSessionId || token,\n            newVaultedStripeInstrument,\n        );\n        const { initializationData } = this.paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow<StripeInitializationData>(methodId, gatewayId);\n        const { sendSecondPaymentRequestOnStripeError } = initializationData || {};\n\n        if (stripeError || !stripeCheckoutSession) {\n            if (sendSecondPaymentRequestOnStripeError) {\n                // INFO: even in case when stripe payment confirmation was declined\n                // we need to send submitPayment request to update status of checkout session on BE side.\n                try {\n                    const paymentPayloadWithError = merge({}, paymentPayload, {\n                        paymentData: {\n                            formattedPayload: {\n                                client_side_error: true,\n                            },\n                        },\n                    });\n\n                    await this.paymentIntegrationService.submitPayment(paymentPayloadWithError);\n                } catch {\n                    // INFO: additional action should be ignored for this update status request.\n                    // will throw Stripe error message to the shopper.\n                }\n            }\n\n            throw new PaymentMethodFailedError(stripeError?.message);\n        }\n\n        try {\n            return await this.paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error) {\n            if (checkoutSessionStatus?.paymentStatus === StripeCheckoutSessionPaymentStatus.Paid) {\n                this.stripeIntegrationService.throwPaymentConfirmationProceedMessage();\n            }\n\n            throw error;\n        }\n    }\n\n    private async _confirmStripePayment(\n        additionalActionData: StripeAdditionalActionRequired['data'],\n    ): Promise<StripeCheckoutSessionActionResult | never> {\n        const { redirect_url } = additionalActionData || {};\n\n        if (!this.stripeCheckout) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const stripeActions = await this._getStripeActionsOrThrow();\n\n        return stripeActions.confirm({\n            redirect: StripeStringConstants.IF_REQUIRED,\n            returnUrl: redirect_url,\n        });\n    }\n\n    private async _updateStripeShopperData(): Promise<void> {\n        const stripeActions = await this._getStripeActionsOrThrow();\n\n        await this._updateStripeEmail(stripeActions);\n        await this._updateStripeShippingAddress(stripeActions);\n        await this._updateStripeBillingAddress(stripeActions);\n    }\n\n    private async _updateStripeEmail(stripeActions: StripeCheckoutSessionActions): Promise<void> {\n        const stripeCheckoutSession = await stripeActions.getSession();\n\n        if (stripeCheckoutSession.email) {\n            return;\n        }\n\n        const { getBillingAddress } = this.paymentIntegrationService.getState();\n        const billingAddress = getBillingAddress();\n\n        await stripeActions.updateEmail(billingAddress?.email || '');\n    }\n\n    private async _updateStripeShippingAddress(\n        stripeActions: StripeCheckoutSessionActions,\n    ): Promise<void> {\n        const shippingAddress = this.paymentIntegrationService.getState().getShippingAddress();\n\n        if (!shippingAddress) {\n            return;\n        }\n\n        await stripeActions.updateShippingAddress({\n            name: this.stripeIntegrationService.getShopperFullName(shippingAddress),\n            address: this.stripeIntegrationService.mapStripeAddress(shippingAddress),\n        });\n    }\n\n    private async _updateStripeBillingAddress(\n        stripeActions: StripeCheckoutSessionActions,\n    ): Promise<void> {\n        const billingAddress = this.paymentIntegrationService.getState().getBillingAddress();\n\n        if (!billingAddress) {\n            return;\n        }\n\n        await stripeActions.updateBillingAddress({\n            name: this.stripeIntegrationService.getShopperFullName(billingAddress),\n            address: this.stripeIntegrationService.mapStripeAddress(billingAddress),\n        });\n    }\n\n    private async _getStripeSavedPaymentMethodsOrThrow(\n        stripeCheckoutSession?: StripeCheckoutSession,\n    ): Promise<StripeSavedPaymentMethod[]> {\n        if (stripeCheckoutSession?.savedPaymentMethods) {\n            return stripeCheckoutSession.savedPaymentMethods;\n        }\n\n        const stripeActions = await this._getStripeActionsOrThrow();\n        const { savedPaymentMethods } = await stripeActions.getSession();\n\n        return savedPaymentMethods || [];\n    }\n\n    private _getNewVaultedStripeInstrument(\n        existingStripeSavedPaymentMethods: StripeSavedPaymentMethod[],\n        newStripeSavedPaymentMethods: StripeSavedPaymentMethod[],\n    ): StripeSavedPaymentMethod | undefined {\n        return newStripeSavedPaymentMethods.find(\n            (method: StripeSavedPaymentMethod) =>\n                !existingStripeSavedPaymentMethods.some(\n                    (existingMethod: StripeSavedPaymentMethod) => existingMethod.id === method.id,\n                ),\n        );\n    }\n\n    private _getTokenizedOptions(\n        token: string,\n        newVaultedStripeInstrument?: StripeSavedPaymentMethod,\n    ) {\n        if (newVaultedStripeInstrument?.type === StripePaymentMethodType.ACH) {\n            return { tokenized_ach: { token } };\n        }\n\n        return { credit_card_token: { token } };\n    }\n\n    private _initializeAdaptivePricingElement(\n        stripe: StripeOCSPaymentInitializeOptions,\n        paymentMethod: PaymentMethod<StripeInitializationData>,\n    ): void {\n        const { initializationData } = paymentMethod;\n        const { currencySelectorContainerId } = stripe;\n\n        if (!initializationData?.adaptivePricingEnabled) {\n            return;\n        }\n\n        if (!currencySelectorContainerId) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const currencySelectorElement = this._getCurrencySelectorElement();\n\n        if (!currencySelectorElement) {\n            return;\n        }\n\n        currencySelectorElement.mount(`#${currencySelectorContainerId}`);\n\n        this._initAdaptivePricingEvents(currencySelectorElement);\n    }\n\n    private _getCurrencySelectorElement(): StripeElement | undefined {\n        return (\n            this.stripeCheckout?.getCurrencySelectorElement() ||\n            this.stripeCheckout?.createCurrencySelectorElement()\n        );\n    }\n\n    private _initAdaptivePricingEvents(currencySelectorElement: StripeElement): void {\n        currencySelectorElement.on(StripeElementEvent.CHANGE, async (event: StripeEventType) => {\n            if (!event.value || !('currency' in event.value)) {\n                return;\n            }\n\n            const { currency } = this.paymentIntegrationService.getState().getCartOrThrow();\n            const currencyCode = currency.code.toLowerCase();\n            const stripeCurrencyCode = event.value.currency.toLowerCase();\n\n            await this.paymentIntegrationService.updatePaymentProviderCustomer({\n                isCustomerCurrencySelected: currencyCode !== stripeCurrencyCode,\n                customerCurrency: stripeCurrencyCode,\n            });\n        });\n    }\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/constants.ts",
    "content": "export const expressCheckoutAllowedCountryCodes = [\n    'AC',\n    'AD',\n    'AE',\n    'AF',\n    'AG',\n    'AI',\n    'AL',\n    'AM',\n    'AO',\n    'AQ',\n    'AR',\n    'AT',\n    'AU',\n    'AW',\n    'AX',\n    'AZ',\n    'BA',\n    'BB',\n    'BD',\n    'BE',\n    'BF',\n    'BG',\n    'BH',\n    'BI',\n    'BJ',\n    'BL',\n    'BM',\n    'BN',\n    'BO',\n    'BQ',\n    'BR',\n    'BS',\n    'BT',\n    'BV',\n    'BW',\n    'BY',\n    'BZ',\n    'CA',\n    'CD',\n    'CF',\n    'CG',\n    'CH',\n    'CI',\n    'CK',\n    'CL',\n    'CM',\n    'CN',\n    'CO',\n    'CR',\n    'CV',\n    'CW',\n    'CY',\n    'CZ',\n    'DE',\n    'DJ',\n    'DK',\n    'DM',\n    'DO',\n    'DZ',\n    'EC',\n    'EE',\n    'EG',\n    'EH',\n    'ER',\n    'ES',\n    'ET',\n    'FI',\n    'FJ',\n    'FK',\n    'FO',\n    'FR',\n    'GA',\n    'GB',\n    'GD',\n    'GE',\n    'GF',\n    'GG',\n    'GH',\n    'GI',\n    'GL',\n    'GM',\n    'GN',\n    'GP',\n    'GQ',\n    'GR',\n    'GS',\n    'GT',\n    'GU',\n    'GW',\n    'GY',\n    'HK',\n    'HN',\n    'HR',\n    'HT',\n    'HU',\n    'ID',\n    'IE',\n    'IL',\n    'IM',\n    'IN',\n    'IO',\n    'IQ',\n    'IS',\n    'IT',\n    'JE',\n    'JM',\n    'JO',\n    'JP',\n    'KE',\n    'KG',\n    'KH',\n    'KI',\n    'KM',\n    'KN',\n    'KR',\n    'KW',\n    'KY',\n    'KZ',\n    'LA',\n    'LB',\n    'LC',\n    'LI',\n    'LK',\n    'LR',\n    'LS',\n    'LT',\n    'LU',\n    'LV',\n    'LY',\n    'MA',\n    'MC',\n    'MD',\n    'ME',\n    'MF',\n    'MG',\n    'MK',\n    'ML',\n    'MM',\n    'MN',\n    'MO',\n    'MQ',\n    'MR',\n    'MS',\n    'MT',\n    'MU',\n    'MV',\n    'MW',\n    'MX',\n    'MY',\n    'MZ',\n    'NA',\n    'NC',\n    'NE',\n    'NG',\n    'NI',\n    'NL',\n    'NO',\n    'NP',\n    'NR',\n    'NU',\n    'NZ',\n    'OM',\n    'PA',\n    'PE',\n    'PF',\n    'PG',\n    'PH',\n    'PK',\n    'PL',\n    'PM',\n    'PN',\n    'PR',\n    'PS',\n    'PT',\n    'PY',\n    'QA',\n    'RE',\n    'RO',\n    'RS',\n    'RU',\n    'RW',\n    'SA',\n    'SB',\n    'SC',\n    'SD',\n    'SE',\n    'SG',\n    'SH',\n    'SI',\n    'SJ',\n    'SK',\n    'SL',\n    'SM',\n    'SN',\n    'SO',\n    'SR',\n    'SS',\n    'ST',\n    'SV',\n    'SX',\n    'SZ',\n    'TA',\n    'TC',\n    'TD',\n    'TF',\n    'TG',\n    'TH',\n    'TJ',\n    'TK',\n    'TL',\n    'TM',\n    'TN',\n    'TO',\n    'TR',\n    'TT',\n    'TV',\n    'TW',\n    'TZ',\n    'UA',\n    'UG',\n    'US',\n    'UY',\n    'UZ',\n    'VA',\n    'VC',\n    'VE',\n    'VG',\n    'VN',\n    'VU',\n    'WF',\n    'WS',\n    'XK',\n    'YE',\n    'YT',\n    'ZA',\n    'ZM',\n    'ZW',\n    'ZZ',\n];\n\n// Stripe has restricted the number of shipping rates to 9.\nexport const stripeAllowedShippingOptionsLength = 9;\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/create-stripe-link-v2-button-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createStripeLinkV2ButtonStrategy from './create-stripe-link-v2-button-strategy';\nimport StripeLinkV2ButtonStrategy from './stripe-link-v2-button-strategy';\n\ndescribe('createStripeLinkV2ButtonStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('create stripe Link v2 button strategy', () => {\n        const strategy = createStripeLinkV2ButtonStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(StripeLinkV2ButtonStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/create-stripe-link-v2-button-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CheckoutButtonStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    StripeIntegrationService,\n    StripeScriptLoader,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\nimport { DEFAULT_CONTAINER_STYLES, LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport StripeLinkV2ButtonStrategy from './stripe-link-v2-button-strategy';\n\nconst createLinkV2ButtonStrategy: CheckoutButtonStrategyFactory<StripeLinkV2ButtonStrategy> = (\n    paymentIntegrationService,\n) => {\n    const stripeScriptLoader = new StripeScriptLoader(getScriptLoader());\n    const loadingIndicator = new LoadingIndicator({\n        containerStyles: DEFAULT_CONTAINER_STYLES,\n    });\n\n    return new StripeLinkV2ButtonStrategy(\n        paymentIntegrationService,\n        stripeScriptLoader,\n        new StripeIntegrationService(paymentIntegrationService, stripeScriptLoader),\n        loadingIndicator,\n    );\n};\n\nexport default toResolvableModule(createLinkV2ButtonStrategy, [{ id: 'stripeocs' }]);\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/create-stripe-link-v2-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createStripeLinkV2CustomerStrategy from './create-stripe-link-v2-customer-strategy';\nimport StripeLinkV2CustomerStrategy from './stripe-link-v2-customer-strategy';\n\ndescribe('createStripeLinkV2CustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('create stripe Link v2 customer strategy', () => {\n        const strategy = createStripeLinkV2CustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(StripeLinkV2CustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/create-stripe-link-v2-customer-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    StripeIntegrationService,\n    StripeScriptLoader,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\nimport { DEFAULT_CONTAINER_STYLES, LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport StripeLinkV2CustomerStrategy from './stripe-link-v2-customer-strategy';\n\nconst createStripeLinkV2CustomerStrategy: CustomerStrategyFactory<StripeLinkV2CustomerStrategy> = (\n    paymentIntegrationService,\n) => {\n    const stripeScriptLoader = new StripeScriptLoader(getScriptLoader());\n    const loadingIndicator = new LoadingIndicator({\n        containerStyles: DEFAULT_CONTAINER_STYLES,\n    });\n\n    return new StripeLinkV2CustomerStrategy(\n        paymentIntegrationService,\n        stripeScriptLoader,\n        new StripeIntegrationService(paymentIntegrationService, stripeScriptLoader),\n        loadingIndicator,\n    );\n};\n\nexport default toResolvableModule(createStripeLinkV2CustomerStrategy, [{ id: 'stripeocs' }]);\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/create-stripe-ocs-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createStripeOCSPaymentStrategy from './create-stripe-ocs-payment-strategy';\nimport StripeOCSPaymentStrategy from './stripe-ocs-payment-strategy';\n\ndescribe('createStripeOCSPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('create stripe ocs payment strategy', () => {\n        const strategy = createStripeOCSPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(StripeOCSPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/create-stripe-ocs-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    StripeIntegrationService,\n    StripeScriptLoader,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport StripeOCSPaymentStrategy from './stripe-ocs-payment-strategy';\n\nconst createStripeOCSPaymentStrategy: PaymentStrategyFactory<StripeOCSPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    const stripeScriptLoader = new StripeScriptLoader(getScriptLoader());\n\n    return new StripeOCSPaymentStrategy(\n        paymentIntegrationService,\n        stripeScriptLoader,\n        new StripeIntegrationService(paymentIntegrationService, stripeScriptLoader),\n    );\n};\n\nexport default toResolvableModule(createStripeOCSPaymentStrategy, [\n    { gateway: 'stripeocs', id: 'optimized_checkout' },\n]);\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/stripe-link-v2-button-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    MissingDataError,\n    NotInitializedError,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    getErrorPaymentResponseBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    getStripeIntegrationServiceMock,\n    StripeClient,\n    StripeElement,\n    StripeElementEvent,\n    StripeElements,\n    StripeIntegrationService,\n    StripeJsVersion,\n    StripeScriptLoader,\n    StripeStringConstants,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { stripeAllowedShippingOptionsLength } from './constants';\nimport StripeLinkV2ButtonStrategy from './stripe-link-v2-button-strategy';\nimport { getStripeOCSMock } from './stripe-ocs.mock';\n\nimport clearAllMocks = jest.clearAllMocks;\n\ndescribe('StripeLinkV2ButtonStrategy', () => {\n    let strategy: StripeLinkV2ButtonStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let scriptLoader: jest.Mocked<StripeScriptLoader>;\n    let stripeClient: jest.Mocked<StripeClient>;\n    let elements: jest.Mocked<StripeElements>;\n    let element: jest.Mocked<StripeElement>;\n    let stripeEventEmitter: EventEmitter;\n    let stripeIntegrationService: StripeIntegrationService;\n    let loadingIndicator: LoadingIndicator;\n    const stripePaymentMethod = getStripeOCSMock();\n\n    const isLoading = jest.fn();\n    let confirmPaymentMock: jest.Mock;\n    const mockStripeAddress = {\n        billingDetails: {\n            name: 'John Doe',\n            email: 'test@mail.com',\n            phone: '1234',\n            address: {\n                line1: 'line',\n                city: 'Miami',\n                country: 'United States',\n                state: 'FL',\n                postal_code: '091-22',\n            },\n        },\n        shippingAddress: {\n            name: 'John Doe',\n            address: {\n                line1: 'line',\n                city: 'Miami',\n                country: 'United States',\n                state: 'FL',\n                postal_code: '091-22',\n            },\n        },\n    };\n    const expressCheckoutOptionsMock = {\n        allowedShippingCountries: ['AU', 'US', 'JP'],\n        shippingAddressRequired: true,\n        shippingRates: [{ id: '_', amount: 0, displayName: 'Pending rates' }],\n        billingAddressRequired: true,\n        emailRequired: true,\n        phoneNumberRequired: true,\n        paymentMethods: {\n            link: StripeStringConstants.AUTO,\n            applePay: StripeStringConstants.NEVER,\n            googlePay: StripeStringConstants.NEVER,\n            amazonPay: StripeStringConstants.NEVER,\n            paypal: StripeStringConstants.NEVER,\n            klarna: StripeStringConstants.NEVER,\n        },\n        buttonHeight: 40,\n    };\n    const initialiseOptions = {\n        methodId: 'stripeocs',\n        containerId: 'checkout-button',\n        stripeocs: {\n            container: 'checkout-button',\n            methodId: 'optimized_checkout',\n            gatewayId: 'stripeocs',\n            loadingContainerId: 'loadingContainerId',\n            isLoading,\n        },\n    };\n\n    beforeEach(() => {\n        stripeIntegrationService = getStripeIntegrationServiceMock();\n        stripeEventEmitter = new EventEmitter();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        confirmPaymentMock = jest.fn();\n        loadingIndicator = new LoadingIndicator();\n\n        element = {\n            mount: jest.fn(),\n            on: jest.fn((eventName, callback) => {\n                stripeEventEmitter.on(eventName, callback);\n            }),\n        } as any;\n\n        elements = {\n            create: jest.fn().mockReturnValue(element),\n            update: jest.fn().mockReturnValue(element),\n        } as any;\n\n        stripeClient = {\n            ...getStripeOCSMock(),\n            elements: jest.fn().mockReturnValue(elements),\n            confirmPayment: confirmPaymentMock,\n        } as any;\n\n        scriptLoader = {\n            getStripeClient: jest.fn().mockResolvedValue(stripeClient),\n        } as any;\n\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockReturnValue(\n            Promise.resolve(paymentIntegrationService.getState()),\n        );\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            stripePaymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartLocale').mockReturnValue('en');\n        jest.spyOn(stripeIntegrationService, 'isPaymentCompleted').mockReturnValue(\n            Promise.resolve(false),\n        );\n\n        jest.spyOn(loadingIndicator, 'show').mockReturnValue();\n\n        strategy = new StripeLinkV2ButtonStrategy(\n            paymentIntegrationService,\n            scriptLoader,\n            stripeIntegrationService,\n            loadingIndicator,\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        beforeEach(async () => {\n            await strategy.initialize(initialiseOptions);\n        });\n\n        it('throws if stripeocs option is missing', async () => {\n            await expect(\n                strategy.initialize({ methodId: 'card', stripeocs: undefined } as any),\n            ).rejects.toThrow(NotInitializedError);\n        });\n\n        it('throws if stripePublishableKey option is missing', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getStripeOCSMock(),\n                initializationData: {\n                    ...getStripeOCSMock().initializationData,\n                    stripePublishableKey: undefined,\n                },\n            });\n\n            await expect(strategy.initialize(initialiseOptions)).rejects.toThrow(MissingDataError);\n        });\n\n        it('throws if required stripeocs fields are missing', async () => {\n            await expect(\n                strategy.initialize({\n                    methodId: 'card',\n                    stripeocs: {\n                        container: '',\n                    },\n                } as any),\n            ).rejects.toThrow(NotInitializedError);\n        });\n\n        it('loads Stripe client and mounts element successfully with captureMethod: automatic', async () => {\n            stripePaymentMethod.initializationData.captureMethod = 'automatic';\n            await strategy.initialize(initialiseOptions);\n\n            expect(scriptLoader.getStripeClient).toHaveBeenCalledWith(\n                {\n                    ...stripePaymentMethod.initializationData,\n                    captureMethod: 'automatic',\n                },\n                'en',\n                StripeJsVersion.V3,\n            );\n            expect(elements.create).toHaveBeenCalledWith(\n                'expressCheckout',\n                expressCheckoutOptionsMock,\n            );\n            expect(stripeClient.elements).toHaveBeenCalledWith({\n                amount: 19000,\n                currency: 'usd',\n                captureMethod: 'automatic',\n                mode: 'payment',\n            });\n            expect(element.mount).toHaveBeenCalledWith('#checkout-button');\n        });\n\n        it('loads Stripe client and mounts element successfully with captureMethod: manual', async () => {\n            stripePaymentMethod.initializationData.captureMethod = 'manual';\n            await strategy.initialize(initialiseOptions);\n\n            expect(scriptLoader.getStripeClient).toHaveBeenCalledWith(\n                {\n                    ...stripePaymentMethod.initializationData,\n                    captureMethod: 'manual',\n                },\n                'en',\n                StripeJsVersion.V3,\n            );\n            expect(elements.create).toHaveBeenCalledWith(\n                'expressCheckout',\n                expressCheckoutOptionsMock,\n            );\n            expect(stripeClient.elements).toHaveBeenCalledWith({\n                amount: 19000,\n                currency: 'usd',\n                captureMethod: 'manual',\n                mode: 'payment',\n            });\n            expect(element.mount).toHaveBeenCalledWith('#checkout-button');\n        });\n\n        it('loads Stripe client with new Stripe JS version', async () => {\n            jest.spyOn(stripeIntegrationService, 'getStripeJsVersion').mockReturnValue(\n                StripeJsVersion.CLOVER,\n            );\n\n            await strategy.initialize(initialiseOptions);\n\n            expect(scriptLoader.getStripeClient).toHaveBeenCalledWith(\n                stripePaymentMethod.initializationData,\n                'en',\n                StripeJsVersion.CLOVER,\n            );\n        });\n    });\n\n    describe('Stripe Link V2 Element mounting', () => {\n        beforeEach(async () => {\n            await strategy.initialize(initialiseOptions);\n        });\n\n        it('calls mountExpressCheckoutElement during initialize()', () => {\n            expect(elements.create).toHaveBeenCalledWith(\n                'expressCheckout',\n                expressCheckoutOptionsMock,\n            );\n            expect(element.mount).toHaveBeenCalledWith('#checkout-button');\n        });\n    });\n\n    describe('Stripe Events', () => {\n        const stripeEvent = jest.fn();\n\n        beforeEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('initialise all events', async () => {\n            await strategy.initialize(initialiseOptions);\n\n            expect(element.on).toHaveBeenCalledWith(\n                StripeElementEvent.SHIPPING_ADDRESS_CHANGE,\n                expect.any(Function),\n            );\n            expect(element.on).toHaveBeenCalledWith(\n                StripeElementEvent.SHIPPING_RATE_CHANGE,\n                expect.any(Function),\n            );\n            expect(element.on).toHaveBeenCalledWith(\n                StripeElementEvent.CONFIRM,\n                expect.any(Function),\n            );\n            expect(element.on).toHaveBeenCalledWith(\n                StripeElementEvent.CANCEL,\n                expect.any(Function),\n            );\n        });\n\n        it('calls onShippingAddressChange callback if event was triggered', async () => {\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: 'London',\n                    country: 'UK',\n                    postal_code: '091-22',\n                    state: 'CA',\n                },\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalled();\n            expect(paymentIntegrationService.loadShippingCountries).toHaveBeenCalled();\n            expect(stripeEvent).toHaveBeenCalledWith({\n                shippingRates: [\n                    {\n                        amount: 0,\n                        displayName: 'Flat Rate',\n                        id: '0:61d4bb52f746477e1d4fb411221318c3',\n                    },\n                ],\n            });\n        });\n\n        it('calls onShippingAddressChange callback with empty address', async () => {\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: '',\n                    country: '',\n                    postal_code: '',\n                    state: '',\n                },\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalled();\n            expect(paymentIntegrationService.loadShippingCountries).toHaveBeenCalled();\n        });\n\n        it('calls onShippingAddressChange callback with no address', async () => {\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: undefined,\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalled();\n        });\n\n        it('reject onShippingAddressChange with empty shippingRates', async () => {\n            const stripeEventRejectMock = jest.fn();\n\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getConsignments: jest.fn().mockReturnValue(undefined),\n            });\n\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: 'London',\n                    country: 'UK',\n                    postal_code: '091-22',\n                    state: 'CA',\n                },\n                resolve: stripeEvent,\n                reject: stripeEventRejectMock,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(stripeEvent).not.toHaveBeenCalled();\n            expect(stripeEventRejectMock).toHaveBeenCalled();\n        });\n\n        it('reject onShippingAddressChange with empty shippingRates if there is no availableShippingOptions', async () => {\n            const stripeEventRejectMock = jest.fn();\n\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getConsignments: jest\n                    .fn()\n                    .mockReturnValue([{ availableShippingOptions: undefined }]),\n            });\n\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: 'London',\n                    country: 'UK',\n                    postal_code: '091-22',\n                    state: 'CA',\n                },\n                resolve: stripeEvent,\n                reject: stripeEventRejectMock,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(stripeEvent).not.toHaveBeenCalled();\n            expect(stripeEventRejectMock).toHaveBeenCalled();\n        });\n\n        it('resolve onShippingAddressChange with selectedId', async () => {\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getConsignments: jest.fn().mockReturnValue([\n                    {\n                        availableShippingOptions: [\n                            {\n                                id: 1,\n                                description: 'description',\n                                cost: 1000,\n                            },\n                            {\n                                id: 2,\n                                description: 'description2',\n                                cost: 2000,\n                            },\n                        ],\n                        selectedShippingOption: {\n                            id: 2,\n                            description: 'description2',\n                            cost: 2000,\n                        },\n                    },\n                ]),\n            });\n\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: 'London',\n                    country: 'UK',\n                    postal_code: '091-22',\n                    state: 'CA',\n                },\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(stripeEvent).toHaveBeenCalledWith({\n                shippingRates: [\n                    {\n                        amount: 200000,\n                        displayName: 'description2',\n                        id: 2,\n                    },\n                    {\n                        amount: 100000,\n                        displayName: 'description',\n                        id: 1,\n                    },\n                ],\n            });\n        });\n\n        it('limits shippingRates to a maximum of 9 items', async () => {\n            const shippingOptions = Array.from(\n                { length: stripeAllowedShippingOptionsLength + 2 },\n                (_, i) => ({\n                    id: `option-${i + 1}`,\n                    description: `Shipping Option ${i + 1}`,\n                    cost: (i + 1) * 100,\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getConsignments: jest.fn().mockReturnValue([\n                    {\n                        availableShippingOptions: shippingOptions,\n                        selectedShippingOption: undefined,\n                    },\n                ]),\n            });\n\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: 'London',\n                    country: 'UK',\n                    postal_code: '091-22',\n                    state: 'CA',\n                },\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            const resolvedArgs = stripeEvent.mock.calls[0][0];\n\n            expect(resolvedArgs.shippingRates).toHaveLength(stripeAllowedShippingOptionsLength);\n        });\n\n        it('resolve onShippingAddressChange with recommended shipping option', async () => {\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getConsignments: jest.fn().mockReturnValue([\n                    {\n                        availableShippingOptions: [\n                            {\n                                id: 1,\n                                description: 'description',\n                                cost: 1000,\n                            },\n                            {\n                                id: 2,\n                                description: 'description2',\n                                cost: 2000,\n                                isRecommended: true,\n                            },\n                        ],\n                        selectedShippingOption: undefined,\n                    },\n                ]),\n            });\n\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: 'London',\n                    country: 'UK',\n                    postal_code: '091-22',\n                    state: 'CA',\n                },\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(stripeEvent).toHaveBeenCalledWith({\n                shippingRates: [\n                    {\n                        amount: 200000,\n                        displayName: 'description2',\n                        id: 2,\n                    },\n                    {\n                        amount: 100000,\n                        displayName: 'description',\n                        id: 1,\n                    },\n                ],\n            });\n        });\n\n        it('calls onShippingRateChange callback if event was triggered', async () => {\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_RATE_CHANGE, {\n                shippingRate: {\n                    id: '123',\n                },\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalled();\n            expect(stripeEvent).toHaveBeenCalledWith({});\n        });\n\n        it('calls onCancel callback if event was triggered', async () => {\n            await strategy.initialize(initialiseOptions);\n\n            try {\n                stripeEventEmitter.emit(StripeElementEvent.CANCEL, {\n                    resolve: stripeEvent,\n                });\n                await new Promise((resolve) => process.nextTick(resolve));\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodCancelledError);\n            }\n        });\n\n        it('initialise all events correctly if there is no physical items', async () => {\n            const cartMock = getCart();\n\n            cartMock.lineItems.physicalItems = [];\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getCart: jest.fn().mockReturnValue(cartMock),\n            });\n\n            await strategy.initialize(initialiseOptions);\n\n            expect(element.on).not.toHaveBeenCalledWith(\n                StripeElementEvent.SHIPPING_ADDRESS_CHANGE,\n                expect.any(Function),\n            );\n            expect(element.on).not.toHaveBeenCalledWith(\n                StripeElementEvent.SHIPPING_RATE_CHANGE,\n                expect.any(Function),\n            );\n            expect(element.on).toHaveBeenCalledWith(\n                StripeElementEvent.CONFIRM,\n                expect.any(Function),\n            );\n            expect(element.on).toHaveBeenCalledWith(\n                StripeElementEvent.CANCEL,\n                expect.any(Function),\n            );\n        });\n\n        describe('#onConfirm', () => {\n            let errorResponse: RequestError;\n            let confirmPaymentMock: jest.Mock;\n            let retrievePaymentIntentMock: jest.Mock;\n\n            const mockFirstPaymentRequest = (payload: unknown) => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                    Promise.reject(payload),\n                );\n            };\n\n            beforeEach(() => {\n                delete (window as any).location;\n                (window as any).location = {\n                    ...window.location,\n                    replace: jest.fn(),\n                };\n                jest.spyOn(stripeIntegrationService, 'isAdditionalActionError').mockReturnValue(\n                    true,\n                );\n                jest.spyOn(stripeIntegrationService, 'isPaymentCompleted').mockReturnValue(\n                    Promise.resolve(false),\n                );\n                errorResponse = new RequestError(\n                    getResponse({\n                        ...getErrorPaymentResponseBody(),\n                        errors: [{ code: 'additional_action_required' }],\n                        additional_action_required: {\n                            type: 'additional_action_requires_payment_method',\n                            data: {\n                                redirect_url: 'https://redirect-url.com',\n                                token: 'token',\n                            },\n                        },\n                        status: 'error',\n                    }),\n                );\n                confirmPaymentMock = jest.fn().mockResolvedValue({\n                    paymentIntent: {\n                        id: 'paymentIntentId',\n                    },\n                });\n                retrievePaymentIntentMock = jest.fn();\n                stripeClient = {\n                    ...stripeClient,\n                    confirmPayment: confirmPaymentMock,\n                    retrievePaymentIntent: retrievePaymentIntentMock,\n                } as any;\n\n                jest.spyOn(scriptLoader, 'getStripeClient').mockImplementation(\n                    jest.fn(() => Promise.resolve(stripeClient)),\n                );\n                jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                    ...paymentIntegrationService.getState(),\n                    getCart: jest.fn().mockReturnValue(getCart()),\n                });\n            });\n\n            afterEach(() => {\n                clearAllMocks();\n            });\n\n            it('verifies spam protection before updating addresses on confirm', async () => {\n                const verifySpamMock = jest\n                    .spyOn(stripeIntegrationService, 'verifyCheckoutSpamProtection')\n                    .mockResolvedValue();\n\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(verifySpamMock).toHaveBeenCalledTimes(1);\n                expect(verifySpamMock.mock.invocationCallOrder[0]).toBeLessThan(\n                    (paymentIntegrationService.updateBillingAddress as jest.Mock).mock\n                        .invocationCallOrder[0],\n                );\n                expect(verifySpamMock.mock.invocationCallOrder[0]).toBeLessThan(\n                    (paymentIntegrationService.submitOrder as jest.Mock).mock\n                        .invocationCallOrder[0],\n                );\n            });\n\n            it('does not submit order if spam protection rejects', async () => {\n                jest.spyOn(\n                    stripeIntegrationService,\n                    'verifyCheckoutSpamProtection',\n                ).mockRejectedValue(new Error('spam check failed'));\n\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.updateBillingAddress).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n            });\n\n            it('updates addresses when onConfirm callback event triggered', async () => {\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith({\n                    address1: 'line',\n                    address2: '',\n                    city: 'Miami',\n                    company: '',\n                    countryCode: 'United States',\n                    customFields: [],\n                    email: 'test@mail.com',\n                    firstName: 'John',\n                    lastName: 'Doe',\n                    phone: '1234',\n                    postalCode: '091-22',\n                    stateOrProvince: 'FL',\n                    stateOrProvinceCode: 'FL',\n                });\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith({\n                    address1: 'line',\n                    address2: '',\n                    city: 'Miami',\n                    company: '',\n                    countryCode: 'United States',\n                    customFields: [],\n                    firstName: 'John',\n                    lastName: 'Doe',\n                    phone: '1234',\n                    postalCode: '091-22',\n                    stateOrProvince: 'FL',\n                    stateOrProvinceCode: 'FL',\n                });\n            });\n\n            it('updates addresses with empty obejct when onConfirm callback event triggered', async () => {\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, {\n                    billingDetails: {\n                        // name: '',\n                        email: '',\n                        phone: '',\n                        address: {\n                            // line1: '',\n                            // city: '',\n                            // country: '',\n                            // state: '',\n                            // postal_code: '',\n                        },\n                    },\n                    shippingAddress: {\n                        // name: '',\n                        address: {\n                            // line1: '',\n                            // city: '',\n                            // country: '',\n                            // state: '',\n                            // postal_code: '',\n                        },\n                    },\n                });\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith({\n                    address1: '',\n                    address2: '',\n                    city: '',\n                    company: '',\n                    countryCode: '',\n                    customFields: [],\n                    email: '',\n                    firstName: '',\n                    lastName: '',\n                    phone: '',\n                    postalCode: '',\n                    stateOrProvince: '',\n                    stateOrProvinceCode: '',\n                });\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith({\n                    address1: '',\n                    address2: '',\n                    city: '',\n                    company: '',\n                    countryCode: '',\n                    customFields: [],\n                    firstName: '',\n                    lastName: '',\n                    phone: '',\n                    postalCode: '',\n                    stateOrProvince: '',\n                    stateOrProvinceCode: '',\n                });\n            });\n\n            it('submit second payment request after stripe confirmation', async () => {\n                mockFirstPaymentRequest(errorResponse);\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    methodId: 'optimized_checkout',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            confirm: false,\n                            method: 'link',\n                        },\n                    },\n                });\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    methodId: 'optimized_checkout',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            credit_card_token: {\n                                token: 'paymentIntentId',\n                            },\n                            confirm: false,\n                            method: 'link',\n                        },\n                    },\n                });\n            });\n\n            it('submit second payment request after stripe confirmation with enabled checkout session module', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...getStripeOCSMock(),\n                    initializationData: {\n                        ...getStripeOCSMock().initializationData,\n                        checkoutSessionEnabled: true,\n                    },\n                });\n\n                mockFirstPaymentRequest(errorResponse);\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                    'stripeocs',\n                    {\n                        params: { method: 'checkout_session' },\n                    },\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    methodId: 'checkout_session',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            confirm: false,\n                            method: 'link',\n                        },\n                    },\n                });\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    methodId: 'checkout_session',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            credit_card_token: {\n                                token: 'paymentIntentId',\n                            },\n                            confirm: false,\n                            method: 'link',\n                        },\n                    },\n                });\n            });\n\n            it('doesn\"t submit an order if there is empty event object', async () => {\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, {});\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(0);\n            });\n\n            it('throws not request error', async () => {\n                mockFirstPaymentRequest(new Error('Not request'));\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n            });\n\n            it('throws not additional action error', async () => {\n                mockFirstPaymentRequest(errorResponse);\n                jest.spyOn(stripeIntegrationService, 'isAdditionalActionError').mockReturnValue(\n                    false,\n                );\n\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n            });\n\n            describe('#toggleLoadingIndicator', () => {\n                beforeEach(() => {\n                    jest.spyOn(loadingIndicator, 'show').mockReturnValue(undefined);\n                    jest.spyOn(loadingIndicator, 'hide').mockReturnValue(undefined);\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValue(\n                        Promise.reject(errorResponse),\n                    );\n                });\n\n                it('shows loading indicator on confirm callback', async () => {\n                    await strategy.initialize(initialiseOptions);\n\n                    stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                    await new Promise((resolve) => process.nextTick(resolve));\n\n                    expect(loadingIndicator.show).toHaveBeenCalled();\n                });\n\n                it('hides loading indicator when error occurs', async () => {\n                    await strategy.initialize(initialiseOptions);\n\n                    try {\n                        stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                        await new Promise((_resolve, reject) => process.nextTick(reject));\n                    } catch (error: unknown) {\n                        expect(loadingIndicator.hide).toHaveBeenCalled();\n                    }\n                });\n            });\n        });\n    });\n\n    it('#signIn', async () => {\n        await expect(strategy.signIn()).resolves.toBeUndefined();\n    });\n\n    it('#signOut', async () => {\n        await expect(strategy.signOut()).resolves.toBeUndefined();\n    });\n\n    it('#executePaymentMethodCheckout', async () => {\n        await expect(strategy.executePaymentMethodCheckout()).resolves.toBeUndefined();\n    });\n\n    it('#deinitialize', async () => {\n        await expect(strategy.deinitialize()).resolves.toBeUndefined();\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/stripe-link-v2-button-strategy.ts",
    "content": "import { round } from 'lodash';\n\nimport {\n    AmountTransformer,\n    CheckoutButtonInitializeOptions,\n    CheckoutButtonStrategy,\n    isRequestError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    Payment,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n    ShippingOption,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    isStripePaymentMethodLike,\n    StripeAdditionalActionRequired,\n    StripeClient,\n    StripeElement,\n    StripeElementEvent,\n    StripeElements,\n    StripeElementsCreateOptions,\n    StripeElementType,\n    StripeError,\n    StripeEventType,\n    StripeInitializationData,\n    StripeIntegrationService,\n    StripeLinkV2Event,\n    StripeLinkV2Options,\n    StripeLinkV2ShippingRate,\n    StripePaymentMethodType,\n    StripeResult,\n    StripeScriptLoader,\n    StripeStringConstants,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport {\n    expressCheckoutAllowedCountryCodes,\n    stripeAllowedShippingOptionsLength,\n} from './constants';\nimport { WithStripeOCSCustomerInitializeOptions } from './stripe-ocs-customer-initialize-options';\n\nexport default class StripeLinkV2ButtonStrategy implements CheckoutButtonStrategy {\n    private _stripeClient?: StripeClient;\n    private _stripeElements?: StripeElements;\n    private _linkV2Element?: StripeElement;\n    private _amountTransformer?: AmountTransformer;\n    private _onComplete?: (orderId?: number) => Promise<never>;\n    private _loadingIndicatorContainer?: string;\n    private _currencyCode?: string;\n    private _captureMethod?: 'automatic' | 'manual';\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private scriptLoader: StripeScriptLoader,\n        private stripeIntegrationService: StripeIntegrationService,\n        private loadingIndicator: LoadingIndicator,\n    ) {}\n\n    async initialize(\n        options: CheckoutButtonInitializeOptions & WithStripeOCSCustomerInitializeOptions,\n    ): Promise<void> {\n        const { stripeocs, containerId } = options || {};\n\n        if (!stripeocs || !containerId) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const { gatewayId } = stripeocs;\n\n        if (!gatewayId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const methodId = this._getMethodId(gatewayId);\n        const state = await this.paymentIntegrationService.loadPaymentMethod(gatewayId, {\n            params: { method: methodId },\n        });\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId, gatewayId);\n        const { loadingContainerId, buttonHeight, onComplete } = stripeocs;\n\n        this._loadingIndicatorContainer = loadingContainerId;\n\n        this._onComplete = onComplete;\n\n        if (!isStripePaymentMethodLike(paymentMethod)) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const { initializationData } = paymentMethod;\n        const { captureMethod } = initializationData;\n        const stripeJsVersion =\n            this.stripeIntegrationService.getStripeJsVersion(initializationData);\n\n        this._captureMethod = captureMethod;\n        this._stripeClient = await this.scriptLoader.getStripeClient(\n            initializationData,\n            state.getCartLocale(),\n            stripeJsVersion,\n        );\n\n        await this.paymentIntegrationService.loadDefaultCheckout();\n\n        await this._mountExpressCheckoutElement(containerId, this._stripeClient, buttonHeight);\n\n        this._initializeEvents(methodId);\n    }\n\n    signIn() {\n        return Promise.resolve();\n    }\n\n    signOut() {\n        return Promise.resolve();\n    }\n\n    executePaymentMethodCheckout() {\n        return Promise.resolve();\n    }\n\n    deinitialize() {\n        return Promise.resolve();\n    }\n\n    private async _mountExpressCheckoutElement(\n        container: string,\n        stripeExpressCheckoutClient: StripeClient,\n        buttonHeight = 40,\n    ) {\n        const shouldRequireShippingAddress = this._shouldRequireShippingAddress();\n        const expressCheckoutOptions: StripeElementsCreateOptions = {\n            shippingAddressRequired: shouldRequireShippingAddress,\n            ...(shouldRequireShippingAddress\n                ? { allowedShippingCountries: await this._getAvailableCountries() }\n                : {}),\n            ...(shouldRequireShippingAddress\n                ? { shippingRates: [{ id: '_', amount: 0, displayName: 'Pending rates' }] }\n                : {}),\n            billingAddressRequired: true,\n            emailRequired: true,\n            phoneNumberRequired: true,\n            paymentMethods: {\n                link: StripeStringConstants.AUTO,\n                applePay: StripeStringConstants.NEVER,\n                googlePay: StripeStringConstants.NEVER,\n                amazonPay: StripeStringConstants.NEVER,\n                paypal: StripeStringConstants.NEVER,\n                klarna: StripeStringConstants.NEVER,\n            },\n            // Minimal buttonHeight value is 40\n            buttonHeight,\n        };\n\n        const { cartAmount = 1 } = this.paymentIntegrationService.getState().getCart() || {};\n\n        const elementsOptions: StripeLinkV2Options = {\n            mode: 'payment',\n            amount: this._toCents(cartAmount),\n            currency: this._getCurrency(),\n            ...(this._captureMethod ? { captureMethod: this._captureMethod } : {}),\n        };\n\n        this._stripeElements = stripeExpressCheckoutClient.elements(elementsOptions);\n\n        this._linkV2Element = this._stripeElements.create(\n            StripeElementType.EXPRESS_CHECKOUT,\n            expressCheckoutOptions,\n        );\n        this._linkV2Element.mount(`#${container}`);\n    }\n\n    /** Events * */\n\n    private _initializeEvents(methodId: string): void {\n        if (!this._linkV2Element) {\n            return;\n        }\n\n        const shouldRequireShippingAddress = this._shouldRequireShippingAddress();\n\n        if (shouldRequireShippingAddress) {\n            this._linkV2Element.on(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, async (event) =>\n                this._onShippingAddressChange(event),\n            );\n            this._linkV2Element.on(StripeElementEvent.SHIPPING_RATE_CHANGE, async (event) =>\n                this._onShippingRateChange(event),\n            );\n        }\n\n        this._linkV2Element.on(StripeElementEvent.CONFIRM, async (event) =>\n            this._onConfirm(event, methodId),\n        );\n\n        this._linkV2Element.on(StripeElementEvent.CANCEL, this._onCancel);\n    }\n\n    private async _onShippingAddressChange(event: StripeEventType) {\n        if (!('address' in event)) {\n            return;\n        }\n\n        const shippingAddress = event.address;\n        // Depending on the country, some fields can be missing or partially redacted.\n        // For example, the shipping address in the US can only contain a city, state, and ZIP code.\n        // The full shipping address appears in the confirm event object after the purchase is confirmed in the browser’s payment interface.\n        const result = {\n            firstName: '',\n            lastName: '',\n            phone: '',\n            company: '',\n            address1: '',\n            address2: '',\n            city: shippingAddress?.city || '',\n            countryCode: shippingAddress?.country || '',\n            postalCode: shippingAddress?.postal_code || '',\n            stateOrProvince: shippingAddress?.state || '',\n            stateOrProvinceCode: shippingAddress?.state || '',\n            customFields: [],\n        };\n\n        await this.paymentIntegrationService.updateShippingAddress(result);\n\n        const shippingRates = await this._getAvailableShippingOptions();\n\n        await this._updateDisplayedPrice();\n\n        if (!shippingRates?.length) {\n            event.reject();\n        } else {\n            event.resolve({\n                shippingRates,\n            });\n        }\n    }\n\n    private _onCancel() {\n        throw new PaymentMethodCancelledError();\n    }\n\n    private async _onShippingRateChange(event: StripeEventType) {\n        if ('shippingRate' in event) {\n            const { shippingRate } = event;\n\n            await this._handleShippingOptionChange(shippingRate?.id);\n\n            await this._updateDisplayedPrice();\n\n            event.resolve({});\n        }\n    }\n\n    /** Confirm methods * */\n    private async _onConfirm(event: StripeEventType, methodId: string) {\n        if (\n            'billingDetails' in event &&\n            'shippingAddress' in event &&\n            this._stripeClient &&\n            this._stripeElements\n        ) {\n            await this.stripeIntegrationService.verifyCheckoutSpamProtection();\n            await this._updateShippingAndBillingAddress(event);\n            await this.paymentIntegrationService.submitOrder();\n\n            const paymentPayload = this._getPaymentPayload(methodId);\n\n            try {\n                await this.paymentIntegrationService.submitPayment(paymentPayload);\n            } catch (error) {\n                await this._processAdditionalAction(error, methodId);\n            }\n        }\n\n        return Promise.resolve();\n    }\n\n    private async _updateShippingAndBillingAddress(event: StripeLinkV2Event) {\n        const shouldRequireShippingAddress = this._shouldRequireShippingAddress();\n\n        const firstName =\n            event.shippingAddress?.name?.split(' ')[0] ||\n            event.billingDetails?.name?.split(' ')[0] ||\n            '';\n        const lastName =\n            event.shippingAddress?.name?.split(' ')[1] ||\n            event.billingDetails?.name?.split(' ')[1] ||\n            '';\n\n        if (shouldRequireShippingAddress) {\n            const shippingAddress = this._mapShippingAddress(\n                event.shippingAddress,\n                event.billingDetails,\n                firstName,\n                lastName,\n            );\n\n            await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n        }\n\n        const billingAddress = this._mapBillingAddress(\n            event.shippingAddress,\n            event.billingDetails,\n            firstName,\n            lastName,\n        );\n\n        await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n    }\n\n    private _mapShippingAddress(\n        shippingAddress: StripeLinkV2Event['shippingAddress'],\n        billingDetails: StripeLinkV2Event['billingDetails'],\n        firstName: string,\n        lastName: string,\n    ) {\n        return {\n            firstName,\n            lastName,\n            phone: billingDetails?.phone || '',\n            company: '',\n            address1: shippingAddress?.address?.line1 || '',\n            address2: shippingAddress?.address?.line2 || '',\n            city: shippingAddress?.address?.city || '',\n            countryCode: shippingAddress?.address?.country || '',\n            postalCode: shippingAddress?.address?.postal_code || '',\n            stateOrProvince: shippingAddress?.address?.state || '',\n            stateOrProvinceCode: shippingAddress?.address?.state || '',\n            customFields: [],\n        };\n    }\n\n    private _mapBillingAddress(\n        shippingAddress: StripeLinkV2Event['shippingAddress'],\n        billingDetails: StripeLinkV2Event['billingDetails'],\n        firstName: string,\n        lastName: string,\n    ) {\n        return {\n            email: billingDetails?.email || '',\n            firstName,\n            lastName,\n            phone: billingDetails?.phone || '',\n            company: '',\n            address1: billingDetails?.address?.line1 || '',\n            address2: '',\n            city: billingDetails?.address?.city || '',\n            countryCode: billingDetails?.address?.country || '',\n            postalCode: billingDetails?.address?.postal_code || '',\n            stateOrProvince: billingDetails?.address?.state || '',\n            stateOrProvinceCode: shippingAddress?.address?.state || '',\n            customFields: [],\n        };\n    }\n\n    private async _processAdditionalAction(error: unknown, methodId: string): Promise<void> {\n        if (\n            !isRequestError(error) ||\n            !this.stripeIntegrationService.isAdditionalActionError(error.body.errors)\n        ) {\n            throw error;\n        }\n\n        if (!this._stripeClient || !this._stripeElements) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const { data: additionalActionData } = error.body.additional_action_required;\n        const { token } = additionalActionData;\n\n        const { paymentIntent } = await this._confirmStripePaymentOrThrow(\n            additionalActionData,\n            methodId,\n        );\n\n        const paymentPayload = this._getPaymentPayload(methodId, paymentIntent?.id || token);\n\n        try {\n            this._toggleLoadingIndicator(true);\n            await this.paymentIntegrationService.submitPayment(paymentPayload);\n            await this._completeCheckoutFlow();\n        } catch (error) {\n            this.stripeIntegrationService.throwPaymentConfirmationProceedMessage();\n        } finally {\n            this._toggleLoadingIndicator(false);\n        }\n    }\n\n    private async _confirmStripePaymentOrThrow(\n        additionalActionData: StripeAdditionalActionRequired['data'],\n        methodId: string,\n    ): Promise<StripeResult | never> {\n        const { token, redirect_url } = additionalActionData;\n        const stripePaymentData = this.stripeIntegrationService.mapStripePaymentData(\n            this._stripeElements,\n            redirect_url,\n        );\n        let stripeError: StripeError | undefined;\n\n        try {\n            const isPaymentCompleted = await this.stripeIntegrationService.isPaymentCompleted(\n                methodId,\n                this._stripeClient,\n            );\n\n            const confirmationResult = !isPaymentCompleted\n                ? await this._stripeClient?.confirmPayment({\n                      elements: stripePaymentData.elements,\n                      clientSecret: token,\n                      redirect: StripeStringConstants.IF_REQUIRED,\n                      confirmParams: {\n                          return_url: stripePaymentData.confirmParams?.return_url,\n                      },\n                  })\n                : await this._stripeClient?.retrievePaymentIntent(token || '');\n\n            stripeError = confirmationResult?.error;\n\n            if (stripeError || !confirmationResult?.paymentIntent) {\n                throw new PaymentMethodFailedError();\n            }\n\n            return confirmationResult;\n        } catch (error: unknown) {\n            return this.stripeIntegrationService.throwStripeError(stripeError);\n        }\n    }\n\n    private async _completeCheckoutFlow() {\n        if (typeof this._onComplete === 'function') {\n            return this._onComplete();\n        }\n\n        window.location.replace('/checkout/order-confirmation');\n\n        return Promise.resolve();\n    }\n\n    private _getPaymentPayload(methodId: string, token?: string): Payment {\n        const cartId = this.paymentIntegrationService.getState().getCart()?.id || '';\n        const formattedPayload = {\n            cart_id: cartId,\n            ...(token ? { credit_card_token: { token } } : {}),\n            confirm: false,\n            method: StripePaymentMethodType.Link,\n        };\n\n        return {\n            methodId,\n            paymentData: {\n                formattedPayload,\n            },\n        };\n    }\n\n    /** Utils * */\n\n    private _shouldRequireShippingAddress() {\n        const { getCart } = this.paymentIntegrationService.getState();\n\n        const { lineItems } = getCart() || {};\n\n        return !!lineItems?.physicalItems.length;\n    }\n\n    private async _updateDisplayedPrice() {\n        if (this._stripeElements) {\n            this._stripeElements.update({\n                currency: this._getCurrency(),\n                mode: 'payment',\n                amount: await this._getTotalPrice(),\n            });\n        }\n    }\n\n    private _getCurrency() {\n        if (!this._currencyCode) {\n            const currencyCode = this.paymentIntegrationService.getState().getCart()?.currency;\n\n            if (currencyCode) {\n                this._currencyCode = currencyCode.code.toLowerCase();\n            }\n        }\n\n        return this._currencyCode;\n    }\n\n    private async _getTotalPrice(): Promise<number> {\n        await this.paymentIntegrationService.loadCheckout();\n\n        const { getCheckoutOrThrow, getCart } = this.paymentIntegrationService.getState();\n        const { decimalPlaces } = getCart()?.currency || {};\n        const totalPrice = round(getCheckoutOrThrow().outstandingBalance, decimalPlaces).toFixed(\n            decimalPlaces,\n        );\n\n        return this._toCents(+totalPrice);\n    }\n\n    private async _getAvailableCountries(): Promise<string[]> {\n        const countries = await this.paymentIntegrationService.loadShippingCountries();\n        const deliverableCountries =\n            countries.getShippingCountries()?.map((country) => country.code) || [];\n\n        return deliverableCountries.filter((code) => {\n            return expressCheckoutAllowedCountryCodes.includes(code);\n        });\n    }\n\n    private async _getAvailableShippingOptions(): Promise<StripeLinkV2ShippingRate[] | undefined> {\n        const state = this.paymentIntegrationService.getState();\n        const consignments = state.getConsignments();\n\n        if (!consignments?.[0]) {\n            return;\n        }\n\n        const consignment = consignments[0];\n        const options = (consignment.availableShippingOptions || []).map(\n            this._getStripeShippingOption.bind(this),\n        );\n        const recommendedShippingOption = consignment.availableShippingOptions?.find(\n            (shippingOption) => shippingOption.isRecommended,\n        );\n        const selectedId = consignment.selectedShippingOption?.id;\n        const recommendedId = recommendedShippingOption?.id;\n\n        if (selectedId) {\n            // Set selected shipping option first in the array, as it will be selected by default\n            options.sort((option) => (option.id === selectedId ? -1 : 0));\n        } else if (recommendedId) {\n            // Set recommended shipping option first in the array, as it will be selected by default\n            options.sort((option) => (option.id === recommendedId ? -1 : 0));\n            await this._handleShippingOptionChange(recommendedId);\n        } else {\n            await this._handleShippingOptionChange(options[0]?.id);\n        }\n\n        // Stripe has restricted the number of shipping rates.\n        return options.slice(0, stripeAllowedShippingOptionsLength);\n    }\n\n    private _getStripeShippingOption({ id, cost, description }: ShippingOption) {\n        return {\n            id,\n            displayName: description,\n            amount: this._toCents(cost),\n        };\n    }\n\n    private async _handleShippingOptionChange(optionId?: string) {\n        if (!optionId || optionId === 'shipping_option_unselected') {\n            return;\n        }\n\n        return this.paymentIntegrationService.selectShippingOption(optionId);\n    }\n\n    private _getAmountTransformer() {\n        if (this._amountTransformer) {\n            return this._amountTransformer;\n        }\n\n        const { getCart } = this.paymentIntegrationService.getState();\n        const { currency } = getCart() || {};\n\n        if (currency) {\n            const amountTransformer = new AmountTransformer(currency.decimalPlaces);\n\n            return amountTransformer;\n        }\n    }\n\n    private _toCents(amount: number) {\n        const fallbackValue = Math.round(amount * 100);\n        const amountTransformer = this._getAmountTransformer();\n\n        if (amountTransformer) {\n            return amountTransformer.toInteger(amount);\n        }\n\n        return fallbackValue;\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 _getMethodId(gatewayId: string): string {\n        const { initializationData: { checkoutSessionEnabled } = {} } =\n            this.paymentIntegrationService\n                .getState()\n                .getPaymentMethodOrThrow<StripeInitializationData>(gatewayId);\n\n        return checkoutSessionEnabled\n            ? StripePaymentMethodType.CHECKOUT_SESSION\n            : StripePaymentMethodType.OCS;\n    }\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/stripe-link-v2-customer-strategy.spec.ts",
    "content": "import { EventEmitter } from 'events';\n\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    NotInitializedError,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    getErrorPaymentResponseBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    getStripeIntegrationServiceMock,\n    StripeClient,\n    StripeElement,\n    StripeElementEvent,\n    StripeElements,\n    StripeIntegrationService,\n    StripeJsVersion,\n    StripeScriptLoader,\n    StripeStringConstants,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport { stripeAllowedShippingOptionsLength } from './constants';\nimport StripeLinkV2CustomerStrategy from './stripe-link-v2-customer-strategy';\nimport { getStripeOCSMock } from './stripe-ocs.mock';\n\nimport clearAllMocks = jest.clearAllMocks;\n\ndescribe('StripeLinkV2CustomerStrategy', () => {\n    let strategy: StripeLinkV2CustomerStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let scriptLoader: jest.Mocked<StripeScriptLoader>;\n    let stripeClient: jest.Mocked<StripeClient>;\n    let elements: jest.Mocked<StripeElements>;\n    let element: jest.Mocked<StripeElement>;\n    let stripeEventEmitter: EventEmitter;\n    let stripeIntegrationService: StripeIntegrationService;\n    let loadingIndicator: LoadingIndicator;\n    const stripePaymentMethod = getStripeOCSMock();\n\n    const isLoading = jest.fn();\n    let confirmPaymentMock: jest.Mock;\n    const mockStripeAddress = {\n        billingDetails: {\n            name: 'John Doe',\n            email: 'test@mail.com',\n            phone: '1234',\n            address: {\n                line1: 'line',\n                city: 'Miami',\n                country: 'United States',\n                state: 'FL',\n                postal_code: '091-22',\n            },\n        },\n        shippingAddress: {\n            name: 'John Doe',\n            address: {\n                line1: 'line',\n                city: 'Miami',\n                country: 'United States',\n                state: 'FL',\n                postal_code: '091-22',\n            },\n        },\n    };\n    const expressCheckoutOptionsMock = {\n        allowedShippingCountries: ['AU', 'US', 'JP'],\n        shippingAddressRequired: true,\n        shippingRates: [{ id: '_', amount: 0, displayName: 'Pending rates' }],\n        billingAddressRequired: true,\n        emailRequired: true,\n        phoneNumberRequired: true,\n        paymentMethods: {\n            link: StripeStringConstants.AUTO,\n            applePay: StripeStringConstants.NEVER,\n            googlePay: StripeStringConstants.NEVER,\n            amazonPay: StripeStringConstants.NEVER,\n            paypal: StripeStringConstants.NEVER,\n            klarna: StripeStringConstants.NEVER,\n        },\n        buttonHeight: 40,\n    };\n    const initialiseOptions = {\n        methodId: 'stripeocs',\n        stripeocs: {\n            container: 'checkout-button',\n            methodId: 'optimized_checkout',\n            gatewayId: 'stripeocs',\n            loadingContainerId: 'loadingContainerId',\n            isLoading,\n        },\n    };\n\n    beforeEach(() => {\n        stripeIntegrationService = getStripeIntegrationServiceMock();\n        stripeEventEmitter = new EventEmitter();\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        confirmPaymentMock = jest.fn();\n        loadingIndicator = new LoadingIndicator();\n\n        element = {\n            mount: jest.fn(),\n            on: jest.fn((eventName, callback) => {\n                stripeEventEmitter.on(eventName, callback);\n            }),\n        } as any;\n\n        elements = {\n            create: jest.fn().mockReturnValue(element),\n            update: jest.fn().mockReturnValue(element),\n        } as any;\n\n        stripeClient = {\n            ...getStripeOCSMock(),\n            elements: jest.fn().mockReturnValue(elements),\n            confirmPayment: confirmPaymentMock,\n        } as any;\n\n        scriptLoader = {\n            getStripeClient: jest.fn().mockResolvedValue(stripeClient),\n        } as any;\n\n        jest.spyOn(paymentIntegrationService, 'updateShippingAddress').mockReturnValue(\n            Promise.resolve(paymentIntegrationService.getState()),\n        );\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            stripePaymentMethod,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartLocale').mockReturnValue('en');\n        jest.spyOn(stripeIntegrationService, 'isPaymentCompleted').mockReturnValue(\n            Promise.resolve(false),\n        );\n\n        jest.spyOn(loadingIndicator, 'show').mockReturnValue();\n\n        strategy = new StripeLinkV2CustomerStrategy(\n            paymentIntegrationService,\n            scriptLoader,\n            stripeIntegrationService,\n            loadingIndicator,\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        beforeEach(async () => {\n            await strategy.initialize(initialiseOptions);\n        });\n\n        it('throws if no options are provided', async () => {\n            await expect(strategy.initialize(undefined as any)).rejects.toThrow(\n                InvalidArgumentError,\n            );\n        });\n\n        it('throws if stripeocs option is missing', async () => {\n            await expect(\n                strategy.initialize({ methodId: 'card', stripeocs: undefined } as any),\n            ).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('throws if stripePublishableKey option is missing', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getStripeOCSMock(),\n                initializationData: {\n                    ...getStripeOCSMock().initializationData,\n                    stripePublishableKey: undefined,\n                },\n            });\n\n            await expect(strategy.initialize(initialiseOptions)).rejects.toThrow(MissingDataError);\n        });\n\n        it('throws if required stripeocs fields are missing', async () => {\n            await expect(\n                strategy.initialize({\n                    methodId: 'card',\n                    stripeocs: {\n                        container: '',\n                    },\n                } as any),\n            ).rejects.toThrow(NotInitializedError);\n        });\n\n        it('loads Stripe client and mounts element successfully with captureMethod: automatic', async () => {\n            stripePaymentMethod.initializationData.captureMethod = 'automatic';\n            await strategy.initialize(initialiseOptions);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith('stripeocs', {\n                params: { method: 'optimized_checkout' },\n            });\n            expect(scriptLoader.getStripeClient).toHaveBeenCalledWith(\n                {\n                    ...stripePaymentMethod.initializationData,\n                    captureMethod: 'automatic',\n                },\n                'en',\n                StripeJsVersion.V3,\n            );\n            expect(elements.create).toHaveBeenCalledWith(\n                'expressCheckout',\n                expressCheckoutOptionsMock,\n            );\n            expect(stripeClient.elements).toHaveBeenCalledWith({\n                amount: 19000,\n                currency: 'usd',\n                captureMethod: 'automatic',\n                mode: 'payment',\n            });\n            expect(element.mount).toHaveBeenCalledWith('#checkout-button');\n        });\n\n        it('loads Stripe client and mounts element successfully with captureMethod: manual', async () => {\n            stripePaymentMethod.initializationData.captureMethod = 'manual';\n            await strategy.initialize(initialiseOptions);\n\n            expect(scriptLoader.getStripeClient).toHaveBeenCalledWith(\n                {\n                    ...stripePaymentMethod.initializationData,\n                    captureMethod: 'manual',\n                },\n                'en',\n                StripeJsVersion.V3,\n            );\n            expect(elements.create).toHaveBeenCalledWith(\n                'expressCheckout',\n                expressCheckoutOptionsMock,\n            );\n            expect(stripeClient.elements).toHaveBeenCalledWith({\n                amount: 19000,\n                currency: 'usd',\n                captureMethod: 'manual',\n                mode: 'payment',\n            });\n            expect(element.mount).toHaveBeenCalledWith('#checkout-button');\n        });\n\n        it('loads Stripe client with new Stripe JS version', async () => {\n            jest.spyOn(stripeIntegrationService, 'getStripeJsVersion').mockReturnValue(\n                StripeJsVersion.CLOVER,\n            );\n\n            await strategy.initialize(initialiseOptions);\n\n            expect(scriptLoader.getStripeClient).toHaveBeenCalledWith(\n                stripePaymentMethod.initializationData,\n                'en',\n                StripeJsVersion.CLOVER,\n            );\n        });\n    });\n\n    describe('Stripe Link V2 Element mounting', () => {\n        beforeEach(async () => {\n            await strategy.initialize(initialiseOptions);\n        });\n\n        it('calls mountExpressCheckoutElement during initialize()', () => {\n            expect(elements.create).toHaveBeenCalledWith(\n                'expressCheckout',\n                expressCheckoutOptionsMock,\n            );\n            expect(element.mount).toHaveBeenCalledWith('#checkout-button');\n        });\n    });\n\n    describe('Stripe Events', () => {\n        const stripeEvent = jest.fn();\n\n        beforeEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('initialise all events', async () => {\n            await strategy.initialize(initialiseOptions);\n\n            expect(element.on).toHaveBeenCalledWith(\n                StripeElementEvent.SHIPPING_ADDRESS_CHANGE,\n                expect.any(Function),\n            );\n            expect(element.on).toHaveBeenCalledWith(\n                StripeElementEvent.SHIPPING_RATE_CHANGE,\n                expect.any(Function),\n            );\n            expect(element.on).toHaveBeenCalledWith(\n                StripeElementEvent.CONFIRM,\n                expect.any(Function),\n            );\n            expect(element.on).toHaveBeenCalledWith(\n                StripeElementEvent.CANCEL,\n                expect.any(Function),\n            );\n        });\n\n        it('calls onShippingAddressChange callback if event was triggered', async () => {\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: 'London',\n                    country: 'UK',\n                    postal_code: '091-22',\n                    state: 'CA',\n                },\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalled();\n            expect(paymentIntegrationService.loadShippingCountries).toHaveBeenCalled();\n            expect(stripeEvent).toHaveBeenCalledWith({\n                shippingRates: [\n                    {\n                        amount: 0,\n                        displayName: 'Flat Rate',\n                        id: '0:61d4bb52f746477e1d4fb411221318c3',\n                    },\n                ],\n            });\n        });\n\n        it('calls onShippingAddressChange callback with empty address', async () => {\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: '',\n                    country: '',\n                    postal_code: '',\n                    state: '',\n                },\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalled();\n            expect(paymentIntegrationService.loadShippingCountries).toHaveBeenCalled();\n        });\n\n        it('calls onShippingAddressChange callback with no address', async () => {\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: undefined,\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalled();\n        });\n\n        it('reject onShippingAddressChange with empty shippingRates', async () => {\n            const stripeEventRejectMock = jest.fn();\n\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getConsignments: jest.fn().mockReturnValue(undefined),\n            });\n\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: 'London',\n                    country: 'UK',\n                    postal_code: '091-22',\n                    state: 'CA',\n                },\n                resolve: stripeEvent,\n                reject: stripeEventRejectMock,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(stripeEvent).not.toHaveBeenCalled();\n            expect(stripeEventRejectMock).toHaveBeenCalled();\n        });\n\n        it('reject onShippingAddressChange with empty shippingRates if there is no availableShippingOptions', async () => {\n            const stripeEventRejectMock = jest.fn();\n\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getConsignments: jest\n                    .fn()\n                    .mockReturnValue([{ availableShippingOptions: undefined }]),\n            });\n\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: 'London',\n                    country: 'UK',\n                    postal_code: '091-22',\n                    state: 'CA',\n                },\n                resolve: stripeEvent,\n                reject: stripeEventRejectMock,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(stripeEvent).not.toHaveBeenCalled();\n            expect(stripeEventRejectMock).toHaveBeenCalled();\n        });\n\n        it('resolve onShippingAddressChange with selectedId', async () => {\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getConsignments: jest.fn().mockReturnValue([\n                    {\n                        availableShippingOptions: [\n                            {\n                                id: 1,\n                                description: 'description',\n                                cost: 1000,\n                            },\n                            {\n                                id: 2,\n                                description: 'description2',\n                                cost: 2000,\n                            },\n                        ],\n                        selectedShippingOption: {\n                            id: 2,\n                            description: 'description2',\n                            cost: 2000,\n                        },\n                    },\n                ]),\n            });\n\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: 'London',\n                    country: 'UK',\n                    postal_code: '091-22',\n                    state: 'CA',\n                },\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(stripeEvent).toHaveBeenCalledWith({\n                shippingRates: [\n                    {\n                        amount: 200000,\n                        displayName: 'description2',\n                        id: 2,\n                    },\n                    {\n                        amount: 100000,\n                        displayName: 'description',\n                        id: 1,\n                    },\n                ],\n            });\n        });\n\n        it('limits shippingRates to a maximum of 9 items', async () => {\n            const shippingOptions = Array.from(\n                { length: stripeAllowedShippingOptionsLength + 2 },\n                (_, i) => ({\n                    id: `option-${i + 1}`,\n                    description: `Shipping Option ${i + 1}`,\n                    cost: (i + 1) * 100,\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getConsignments: jest.fn().mockReturnValue([\n                    {\n                        availableShippingOptions: shippingOptions,\n                        selectedShippingOption: undefined,\n                    },\n                ]),\n            });\n\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: 'London',\n                    country: 'UK',\n                    postal_code: '091-22',\n                    state: 'CA',\n                },\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            const resolvedArgs = stripeEvent.mock.calls[0][0];\n\n            expect(resolvedArgs.shippingRates).toHaveLength(stripeAllowedShippingOptionsLength);\n        });\n\n        it('resolve onShippingAddressChange with recommended shipping option', async () => {\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getConsignments: jest.fn().mockReturnValue([\n                    {\n                        availableShippingOptions: [\n                            {\n                                id: 1,\n                                description: 'description',\n                                cost: 1000,\n                            },\n                            {\n                                id: 2,\n                                description: 'description2',\n                                cost: 2000,\n                                isRecommended: true,\n                            },\n                        ],\n                        selectedShippingOption: undefined,\n                    },\n                ]),\n            });\n\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, {\n                address: {\n                    city: 'London',\n                    country: 'UK',\n                    postal_code: '091-22',\n                    state: 'CA',\n                },\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(stripeEvent).toHaveBeenCalledWith({\n                shippingRates: [\n                    {\n                        amount: 200000,\n                        displayName: 'description2',\n                        id: 2,\n                    },\n                    {\n                        amount: 100000,\n                        displayName: 'description',\n                        id: 1,\n                    },\n                ],\n            });\n        });\n\n        it('calls onShippingRateChange callback if event was triggered', async () => {\n            await strategy.initialize(initialiseOptions);\n\n            stripeEventEmitter.emit(StripeElementEvent.SHIPPING_RATE_CHANGE, {\n                shippingRate: {\n                    id: '123',\n                },\n                resolve: stripeEvent,\n            });\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.selectShippingOption).toHaveBeenCalled();\n            expect(stripeEvent).toHaveBeenCalledWith({});\n        });\n\n        it('calls onCancel callback if event was triggered', async () => {\n            await strategy.initialize(initialiseOptions);\n\n            try {\n                stripeEventEmitter.emit(StripeElementEvent.CANCEL, {\n                    resolve: stripeEvent,\n                });\n                await new Promise((resolve) => process.nextTick(resolve));\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodCancelledError);\n            }\n        });\n\n        it('initialise all events correctly if there is no physical items', async () => {\n            const cartMock = getCart();\n\n            cartMock.lineItems.physicalItems = [];\n            jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                ...paymentIntegrationService.getState(),\n                getCartOrThrow: jest.fn().mockReturnValue(cartMock),\n            });\n\n            await strategy.initialize(initialiseOptions);\n\n            expect(element.on).not.toHaveBeenCalledWith(\n                StripeElementEvent.SHIPPING_ADDRESS_CHANGE,\n                expect.any(Function),\n            );\n            expect(element.on).not.toHaveBeenCalledWith(\n                StripeElementEvent.SHIPPING_RATE_CHANGE,\n                expect.any(Function),\n            );\n            expect(element.on).toHaveBeenCalledWith(\n                StripeElementEvent.CONFIRM,\n                expect.any(Function),\n            );\n            expect(element.on).toHaveBeenCalledWith(\n                StripeElementEvent.CANCEL,\n                expect.any(Function),\n            );\n        });\n\n        describe('#onConfirm', () => {\n            let errorResponse: RequestError;\n            let confirmPaymentMock: jest.Mock;\n            let retrievePaymentIntentMock: jest.Mock;\n\n            const mockFirstPaymentRequest = (payload: unknown) => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                    Promise.reject(payload),\n                );\n            };\n\n            beforeEach(() => {\n                delete (window as any).location;\n                (window as any).location = {\n                    ...window.location,\n                    replace: jest.fn(),\n                };\n                jest.spyOn(stripeIntegrationService, 'isAdditionalActionError').mockReturnValue(\n                    true,\n                );\n                jest.spyOn(stripeIntegrationService, 'isPaymentCompleted').mockReturnValue(\n                    Promise.resolve(false),\n                );\n                errorResponse = new RequestError(\n                    getResponse({\n                        ...getErrorPaymentResponseBody(),\n                        errors: [{ code: 'additional_action_required' }],\n                        additional_action_required: {\n                            type: 'additional_action_requires_payment_method',\n                            data: {\n                                redirect_url: 'https://redirect-url.com',\n                                token: 'token',\n                            },\n                        },\n                        status: 'error',\n                    }),\n                );\n                confirmPaymentMock = jest.fn().mockResolvedValue({\n                    paymentIntent: {\n                        id: 'paymentIntentId',\n                    },\n                });\n                retrievePaymentIntentMock = jest.fn();\n                stripeClient = {\n                    ...stripeClient,\n                    confirmPayment: confirmPaymentMock,\n                    retrievePaymentIntent: retrievePaymentIntentMock,\n                } as any;\n\n                jest.spyOn(scriptLoader, 'getStripeClient').mockImplementation(\n                    jest.fn(() => Promise.resolve(stripeClient)),\n                );\n                jest.spyOn(paymentIntegrationService, 'getState').mockReturnValue({\n                    ...paymentIntegrationService.getState(),\n                    getCartOrThrow: jest.fn().mockReturnValue(getCart()),\n                });\n            });\n\n            afterEach(() => {\n                clearAllMocks();\n            });\n\n            it('verifies spam protection before updating addresses on confirm', async () => {\n                const verifySpamMock = jest\n                    .spyOn(stripeIntegrationService, 'verifyCheckoutSpamProtection')\n                    .mockResolvedValue();\n\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(verifySpamMock).toHaveBeenCalledTimes(1);\n                expect(verifySpamMock.mock.invocationCallOrder[0]).toBeLessThan(\n                    (paymentIntegrationService.updateBillingAddress as jest.Mock).mock\n                        .invocationCallOrder[0],\n                );\n                expect(verifySpamMock.mock.invocationCallOrder[0]).toBeLessThan(\n                    (paymentIntegrationService.submitOrder as jest.Mock).mock\n                        .invocationCallOrder[0],\n                );\n            });\n\n            it('does not submit order if spam protection rejects', async () => {\n                jest.spyOn(\n                    stripeIntegrationService,\n                    'verifyCheckoutSpamProtection',\n                ).mockRejectedValue(new Error('spam check failed'));\n\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.updateBillingAddress).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.submitOrder).not.toHaveBeenCalled();\n            });\n\n            it('updates addresses when onConfirm callback event triggered', async () => {\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith({\n                    address1: 'line',\n                    address2: '',\n                    city: 'Miami',\n                    company: '',\n                    countryCode: 'United States',\n                    customFields: [],\n                    email: 'test@mail.com',\n                    firstName: 'John',\n                    lastName: 'Doe',\n                    phone: '1234',\n                    postalCode: '091-22',\n                    stateOrProvince: 'FL',\n                    stateOrProvinceCode: 'FL',\n                });\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith({\n                    address1: 'line',\n                    address2: '',\n                    city: 'Miami',\n                    company: '',\n                    countryCode: 'United States',\n                    customFields: [],\n                    firstName: 'John',\n                    lastName: 'Doe',\n                    phone: '1234',\n                    postalCode: '091-22',\n                    stateOrProvince: 'FL',\n                    stateOrProvinceCode: 'FL',\n                });\n            });\n\n            it('updates addresses with empty obejct when onConfirm callback event triggered', async () => {\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, {\n                    billingDetails: {\n                        // name: '',\n                        email: '',\n                        phone: '',\n                        address: {\n                            // line1: '',\n                            // city: '',\n                            // country: '',\n                            // state: '',\n                            // postal_code: '',\n                        },\n                    },\n                    shippingAddress: {\n                        // name: '',\n                        address: {\n                            // line1: '',\n                            // city: '',\n                            // country: '',\n                            // state: '',\n                            // postal_code: '',\n                        },\n                    },\n                });\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith({\n                    address1: '',\n                    address2: '',\n                    city: '',\n                    company: '',\n                    countryCode: '',\n                    customFields: [],\n                    email: '',\n                    firstName: '',\n                    lastName: '',\n                    phone: '',\n                    postalCode: '',\n                    stateOrProvince: '',\n                    stateOrProvinceCode: '',\n                });\n                expect(paymentIntegrationService.updateShippingAddress).toHaveBeenCalledWith({\n                    address1: '',\n                    address2: '',\n                    city: '',\n                    company: '',\n                    countryCode: '',\n                    customFields: [],\n                    firstName: '',\n                    lastName: '',\n                    phone: '',\n                    postalCode: '',\n                    stateOrProvince: '',\n                    stateOrProvinceCode: '',\n                });\n            });\n\n            it('submit second payment request after stripe confirmation', async () => {\n                mockFirstPaymentRequest(errorResponse);\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    methodId: 'optimized_checkout',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            confirm: false,\n                            method: 'link',\n                        },\n                    },\n                });\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    methodId: 'optimized_checkout',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            credit_card_token: {\n                                token: 'paymentIntentId',\n                            },\n                            confirm: false,\n                            method: 'link',\n                        },\n                    },\n                });\n            });\n\n            it('submit second payment request after stripe confirmation with enabled checkout session module', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...getStripeOCSMock(),\n                    initializationData: {\n                        ...getStripeOCSMock().initializationData,\n                        checkoutSessionEnabled: true,\n                    },\n                });\n\n                mockFirstPaymentRequest(errorResponse);\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalledWith(\n                    'stripeocs',\n                    {\n                        params: { method: 'checkout_session' },\n                    },\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    methodId: 'checkout_session',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            confirm: false,\n                            method: 'link',\n                        },\n                    },\n                });\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    methodId: 'checkout_session',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            credit_card_token: {\n                                token: 'paymentIntentId',\n                            },\n                            confirm: false,\n                            method: 'link',\n                        },\n                    },\n                });\n            });\n\n            it('doesn\"t submit an order if there is empty event object', async () => {\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, {});\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(0);\n            });\n\n            it('throws not request error', async () => {\n                mockFirstPaymentRequest(new Error('Not request'));\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n            });\n\n            it('throws not additional action error', async () => {\n                mockFirstPaymentRequest(errorResponse);\n                jest.spyOn(stripeIntegrationService, 'isAdditionalActionError').mockReturnValue(\n                    false,\n                );\n\n                await strategy.initialize(initialiseOptions);\n\n                stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n            });\n\n            describe('#toggleLoadingIndicator', () => {\n                beforeEach(() => {\n                    jest.spyOn(loadingIndicator, 'show').mockReturnValue(undefined);\n                    jest.spyOn(loadingIndicator, 'hide').mockReturnValue(undefined);\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValue(\n                        Promise.reject(errorResponse),\n                    );\n                });\n\n                it('shows loading indicator on confirm callback', async () => {\n                    await strategy.initialize(initialiseOptions);\n\n                    stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                    await new Promise((resolve) => process.nextTick(resolve));\n\n                    expect(loadingIndicator.show).toHaveBeenCalled();\n                });\n\n                it('hides loading indicator when error occurs', async () => {\n                    await strategy.initialize(initialiseOptions);\n\n                    try {\n                        stripeEventEmitter.emit(StripeElementEvent.CONFIRM, mockStripeAddress);\n                        await new Promise((_resolve, reject) => process.nextTick(reject));\n                    } catch (error: unknown) {\n                        expect(loadingIndicator.hide).toHaveBeenCalled();\n                    }\n                });\n            });\n        });\n    });\n\n    it('#signIn', async () => {\n        await expect(strategy.signIn()).resolves.toBeUndefined();\n    });\n\n    it('#signOut', async () => {\n        await expect(strategy.signOut()).resolves.toBeUndefined();\n    });\n\n    it('#executePaymentMethodCheckout', async () => {\n        await expect(strategy.executePaymentMethodCheckout()).resolves.toBeUndefined();\n    });\n\n    it('#deinitialize', async () => {\n        await expect(strategy.deinitialize()).resolves.toBeUndefined();\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/stripe-link-v2-customer-strategy.ts",
    "content": "import { round } from 'lodash';\n\nimport {\n    AmountTransformer,\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    InvalidArgumentError,\n    isRequestError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    Payment,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n    ShippingOption,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    isStripePaymentMethodLike,\n    StripeAdditionalActionRequired,\n    StripeClient,\n    StripeElement,\n    StripeElementEvent,\n    StripeElements,\n    StripeElementsCreateOptions,\n    StripeElementType,\n    StripeError,\n    StripeEventType,\n    StripeInitializationData,\n    StripeIntegrationService,\n    StripeLinkV2Event,\n    StripeLinkV2Options,\n    StripeLinkV2ShippingRate,\n    StripePaymentMethodType,\n    StripeResult,\n    StripeScriptLoader,\n    StripeStringConstants,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\nimport { LoadingIndicator } from '@bigcommerce/checkout-sdk/ui';\n\nimport {\n    expressCheckoutAllowedCountryCodes,\n    stripeAllowedShippingOptionsLength,\n} from './constants';\nimport { WithStripeOCSCustomerInitializeOptions } from './stripe-ocs-customer-initialize-options';\n\nexport default class StripeLinkV2CustomerStrategy implements CustomerStrategy {\n    private _stripeClient?: StripeClient;\n    private _stripeElements?: StripeElements;\n    private _linkV2Element?: StripeElement;\n    private _amountTransformer?: AmountTransformer;\n    private _onComplete?: (orderId?: number) => Promise<never>;\n    private _loadingIndicatorContainer?: string;\n    private _captureMethod?: 'automatic' | 'manual';\n    private _currencyCode?: string;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private scriptLoader: StripeScriptLoader,\n        private stripeIntegrationService: StripeIntegrationService,\n        private loadingIndicator: LoadingIndicator,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions & WithStripeOCSCustomerInitializeOptions,\n    ): Promise<void> {\n        const { stripeocs } = options || {};\n\n        if (!stripeocs) {\n            throw new InvalidArgumentError(\n                `Unable to proceed because \"options\" argument is not provided.`,\n            );\n        }\n\n        const { gatewayId, container } = stripeocs;\n\n        if (!container || !gatewayId) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const methodId = this._getMethodId(gatewayId);\n        const state = await this.paymentIntegrationService.loadPaymentMethod(gatewayId, {\n            params: { method: methodId },\n        });\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId, gatewayId);\n        const { loadingContainerId, buttonHeight, onComplete } = stripeocs;\n\n        this._loadingIndicatorContainer = loadingContainerId;\n\n        this._onComplete = onComplete;\n\n        if (!isStripePaymentMethodLike(paymentMethod)) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const { initializationData } = paymentMethod;\n        const { captureMethod } = initializationData;\n        const stripeJsVersion =\n            this.stripeIntegrationService.getStripeJsVersion(initializationData);\n\n        this._captureMethod = captureMethod;\n        this._stripeClient = await this.scriptLoader.getStripeClient(\n            initializationData,\n            state.getCartLocale(),\n            stripeJsVersion,\n        );\n\n        await this._mountExpressCheckoutElement(container, this._stripeClient, buttonHeight);\n\n        this._initializeEvents(methodId);\n    }\n\n    signIn() {\n        return Promise.resolve();\n    }\n\n    signOut() {\n        return Promise.resolve();\n    }\n\n    executePaymentMethodCheckout() {\n        return Promise.resolve();\n    }\n\n    deinitialize() {\n        return Promise.resolve();\n    }\n\n    private async _mountExpressCheckoutElement(\n        container: string,\n        stripeExpressCheckoutClient: StripeClient,\n        buttonHeight = 40,\n    ) {\n        const shouldRequireShippingAddress = this._shouldRequireShippingAddress();\n        const expressCheckoutOptions: StripeElementsCreateOptions = {\n            shippingAddressRequired: shouldRequireShippingAddress,\n            ...(shouldRequireShippingAddress\n                ? { allowedShippingCountries: await this._getAvailableCountries() }\n                : {}),\n            ...(shouldRequireShippingAddress\n                ? { shippingRates: [{ id: '_', amount: 0, displayName: 'Pending rates' }] }\n                : {}),\n            billingAddressRequired: true,\n            emailRequired: true,\n            phoneNumberRequired: true,\n            paymentMethods: {\n                link: StripeStringConstants.AUTO,\n                applePay: StripeStringConstants.NEVER,\n                googlePay: StripeStringConstants.NEVER,\n                amazonPay: StripeStringConstants.NEVER,\n                paypal: StripeStringConstants.NEVER,\n                klarna: StripeStringConstants.NEVER,\n            },\n            // Minimal buttonHeight value is 40\n            buttonHeight,\n        };\n\n        const { cartAmount } = this.paymentIntegrationService.getState().getCartOrThrow();\n\n        const elementsOptions: StripeLinkV2Options = {\n            mode: 'payment',\n            amount: this._toCents(cartAmount),\n            currency: this._getCurrency(),\n            ...(this._captureMethod ? { captureMethod: this._captureMethod } : {}),\n        };\n\n        this._stripeElements = stripeExpressCheckoutClient.elements(elementsOptions);\n\n        this._linkV2Element = this._stripeElements.create(\n            StripeElementType.EXPRESS_CHECKOUT,\n            expressCheckoutOptions,\n        );\n        this._linkV2Element.mount(`#${container}`);\n\n        return this._linkV2Element;\n    }\n\n    /** Events * */\n\n    private _initializeEvents(methodId: string): void {\n        if (!this._linkV2Element) {\n            return;\n        }\n\n        const shouldRequireShippingAddress = this._shouldRequireShippingAddress();\n\n        if (shouldRequireShippingAddress) {\n            this._linkV2Element.on(StripeElementEvent.SHIPPING_ADDRESS_CHANGE, async (event) =>\n                this._onShippingAddressChange(event),\n            );\n            this._linkV2Element.on(StripeElementEvent.SHIPPING_RATE_CHANGE, async (event) =>\n                this._onShippingRateChange(event),\n            );\n        }\n\n        this._linkV2Element.on(StripeElementEvent.CONFIRM, async (event) =>\n            this._onConfirm(event, methodId),\n        );\n\n        this._linkV2Element.on(StripeElementEvent.CANCEL, this._onCancel);\n    }\n\n    private async _onShippingAddressChange(event: StripeEventType): Promise<void> {\n        if (!('address' in event)) {\n            return;\n        }\n\n        const shippingAddress = event.address;\n        // Depending on the country, some fields can be missing or partially redacted.\n        // For example, the shipping address in the US can only contain a city, state, and ZIP code.\n        // The full shipping address appears in the confirm event object after the purchase is confirmed in the browser’s payment interface.\n        const result = {\n            firstName: '',\n            lastName: '',\n            phone: '',\n            company: '',\n            address1: '',\n            address2: '',\n            city: shippingAddress?.city || '',\n            countryCode: shippingAddress?.country || '',\n            postalCode: shippingAddress?.postal_code || '',\n            stateOrProvince: shippingAddress?.state || '',\n            stateOrProvinceCode: shippingAddress?.state || '',\n            customFields: [],\n        };\n\n        await this.paymentIntegrationService.updateShippingAddress(result);\n\n        const shippingRates = await this._getAvailableShippingOptions();\n\n        await this._updateDisplayedPrice();\n\n        if (!shippingRates?.length) {\n            event.reject();\n        } else {\n            event.resolve({\n                shippingRates,\n            });\n        }\n    }\n\n    private _onCancel() {\n        throw new PaymentMethodCancelledError();\n    }\n\n    private async _onShippingRateChange(event: StripeEventType) {\n        if ('shippingRate' in event) {\n            const { shippingRate } = event;\n\n            await this._handleShippingOptionChange(shippingRate?.id);\n\n            await this._updateDisplayedPrice();\n\n            event.resolve({});\n        }\n    }\n\n    /** Confirm methods * */\n    private async _onConfirm(event: StripeEventType, methodId: string) {\n        if (\n            'billingDetails' in event &&\n            'shippingAddress' in event &&\n            this._stripeClient &&\n            this._stripeElements\n        ) {\n            await this.stripeIntegrationService.verifyCheckoutSpamProtection();\n            await this._updateShippingAndBillingAddress(event);\n            await this.paymentIntegrationService.submitOrder();\n\n            const paymentPayload = this._getPaymentPayload(methodId);\n\n            try {\n                await this.paymentIntegrationService.submitPayment(paymentPayload);\n            } catch (error) {\n                await this._processAdditionalAction(error, methodId);\n            }\n        }\n\n        return Promise.resolve();\n    }\n\n    private async _updateShippingAndBillingAddress(event: StripeLinkV2Event) {\n        const shouldRequireShippingAddress = this._shouldRequireShippingAddress();\n\n        const firstName =\n            event.shippingAddress?.name?.split(' ')[0] ||\n            event.billingDetails?.name?.split(' ')[0] ||\n            '';\n        const lastName =\n            event.shippingAddress?.name?.split(' ')[1] ||\n            event.billingDetails?.name?.split(' ')[1] ||\n            '';\n\n        if (shouldRequireShippingAddress) {\n            const shippingAddress = this._mapShippingAddress(\n                event.shippingAddress,\n                event.billingDetails,\n                firstName,\n                lastName,\n            );\n\n            await this.paymentIntegrationService.updateShippingAddress(shippingAddress);\n        }\n\n        const billingAddress = this._mapBillingAddress(\n            event.shippingAddress,\n            event.billingDetails,\n            firstName,\n            lastName,\n        );\n\n        await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n    }\n\n    private _mapShippingAddress(\n        shippingAddress: StripeLinkV2Event['shippingAddress'],\n        billingDetails: StripeLinkV2Event['billingDetails'],\n        firstName: string,\n        lastName: string,\n    ) {\n        return {\n            firstName,\n            lastName,\n            phone: billingDetails?.phone || '',\n            company: '',\n            address1: shippingAddress?.address?.line1 || '',\n            address2: shippingAddress?.address?.line2 || '',\n            city: shippingAddress?.address?.city || '',\n            countryCode: shippingAddress?.address?.country || '',\n            postalCode: shippingAddress?.address?.postal_code || '',\n            stateOrProvince: shippingAddress?.address?.state || '',\n            stateOrProvinceCode: shippingAddress?.address?.state || '',\n            customFields: [],\n        };\n    }\n\n    private _mapBillingAddress(\n        shippingAddress: StripeLinkV2Event['shippingAddress'],\n        billingDetails: StripeLinkV2Event['billingDetails'],\n        firstName: string,\n        lastName: string,\n    ) {\n        return {\n            email: billingDetails?.email || '',\n            firstName,\n            lastName,\n            phone: billingDetails?.phone || '',\n            company: '',\n            address1: billingDetails?.address?.line1 || '',\n            address2: '',\n            city: billingDetails?.address?.city || '',\n            countryCode: billingDetails?.address?.country || '',\n            postalCode: billingDetails?.address?.postal_code || '',\n            stateOrProvince: billingDetails?.address?.state || '',\n            stateOrProvinceCode: shippingAddress?.address?.state || '',\n            customFields: [],\n        };\n    }\n\n    private async _processAdditionalAction(error: unknown, methodId: string): Promise<void> {\n        if (\n            !isRequestError(error) ||\n            !this.stripeIntegrationService.isAdditionalActionError(error.body.errors)\n        ) {\n            throw error;\n        }\n\n        if (!this._stripeClient || !this._stripeElements) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const { data: additionalActionData } = error.body.additional_action_required;\n        const { token } = additionalActionData;\n\n        const { paymentIntent } = await this._confirmStripePaymentOrThrow(\n            additionalActionData,\n            methodId,\n        );\n\n        const paymentPayload = this._getPaymentPayload(methodId, paymentIntent?.id || token);\n\n        try {\n            this._toggleLoadingIndicator(true);\n            await this.paymentIntegrationService.submitPayment(paymentPayload);\n            await this._completeCheckoutFlow();\n        } catch (error) {\n            this.stripeIntegrationService.throwPaymentConfirmationProceedMessage();\n        } finally {\n            this._toggleLoadingIndicator(false);\n        }\n    }\n\n    private async _confirmStripePaymentOrThrow(\n        additionalActionData: StripeAdditionalActionRequired['data'],\n        methodId: string,\n    ): Promise<StripeResult | never> {\n        const { token, redirect_url } = additionalActionData;\n        const stripePaymentData = this.stripeIntegrationService.mapStripePaymentData(\n            this._stripeElements,\n            redirect_url,\n        );\n        let stripeError: StripeError | undefined;\n\n        try {\n            const isPaymentCompleted = await this.stripeIntegrationService.isPaymentCompleted(\n                methodId,\n                this._stripeClient,\n            );\n\n            const confirmationResult = !isPaymentCompleted\n                ? await this._stripeClient?.confirmPayment({\n                      elements: stripePaymentData.elements,\n                      clientSecret: token,\n                      redirect: StripeStringConstants.IF_REQUIRED,\n                      confirmParams: {\n                          return_url: stripePaymentData.confirmParams?.return_url,\n                      },\n                  })\n                : await this._stripeClient?.retrievePaymentIntent(token || '');\n\n            stripeError = confirmationResult?.error;\n\n            if (stripeError || !confirmationResult?.paymentIntent) {\n                throw new PaymentMethodFailedError();\n            }\n\n            return confirmationResult;\n        } catch (error: unknown) {\n            return this.stripeIntegrationService.throwStripeError(stripeError);\n        }\n    }\n\n    private async _completeCheckoutFlow() {\n        if (typeof this._onComplete === 'function') {\n            return this._onComplete();\n        }\n\n        window.location.replace('/order-confirmation');\n\n        return Promise.resolve();\n    }\n\n    private _getPaymentPayload(methodId: string, token?: string): Payment {\n        const cartId = this.paymentIntegrationService.getState().getCart()?.id || '';\n        const formattedPayload = {\n            cart_id: cartId,\n            ...(token ? { credit_card_token: { token } } : {}),\n            confirm: false,\n            method: StripePaymentMethodType.Link,\n        };\n\n        return {\n            methodId,\n            paymentData: {\n                formattedPayload,\n            },\n        };\n    }\n\n    /** Utils * */\n\n    private _shouldRequireShippingAddress() {\n        const { getCartOrThrow } = this.paymentIntegrationService.getState();\n        const { lineItems } = getCartOrThrow();\n\n        return !!lineItems.physicalItems.length;\n    }\n\n    private async _updateDisplayedPrice() {\n        if (this._stripeElements) {\n            this._stripeElements.update({\n                currency: this._getCurrency(),\n                mode: 'payment',\n                amount: await this._getTotalPrice(),\n            });\n        }\n    }\n\n    private _getCurrency() {\n        if (!this._currencyCode) {\n            const { code: currencyCode } = this.paymentIntegrationService\n                .getState()\n                .getCartOrThrow().currency;\n\n            this._currencyCode = currencyCode.toLowerCase();\n        }\n\n        return this._currencyCode;\n    }\n\n    private async _getTotalPrice(): Promise<number> {\n        await this.paymentIntegrationService.loadCheckout();\n\n        const { getCheckoutOrThrow, getCartOrThrow } = this.paymentIntegrationService.getState();\n        const { decimalPlaces } = getCartOrThrow().currency;\n        const totalPrice = round(getCheckoutOrThrow().outstandingBalance, decimalPlaces).toFixed(\n            decimalPlaces,\n        );\n\n        return this._toCents(+totalPrice);\n    }\n\n    private async _getAvailableCountries(): Promise<string[]> {\n        const countries = await this.paymentIntegrationService.loadShippingCountries();\n        const deliverableCountries =\n            countries.getShippingCountries()?.map((country) => country.code) || [];\n\n        return deliverableCountries.filter((code) => {\n            return expressCheckoutAllowedCountryCodes.includes(code);\n        });\n    }\n\n    private async _getAvailableShippingOptions(): Promise<StripeLinkV2ShippingRate[] | undefined> {\n        const state = this.paymentIntegrationService.getState();\n        const consignments = state.getConsignments();\n\n        if (!consignments?.[0]) {\n            return;\n        }\n\n        const consignment = consignments[0];\n        const options = (consignment.availableShippingOptions || []).map(\n            this._getStripeShippingOption.bind(this),\n        );\n        const recommendedShippingOption = consignment.availableShippingOptions?.find(\n            (shippingOption) => shippingOption.isRecommended,\n        );\n        const selectedId = consignment.selectedShippingOption?.id;\n        const recommendedId = recommendedShippingOption?.id;\n\n        if (selectedId) {\n            // Set selected shipping option first in the array, as it will be selected by default\n            options.sort((option) => (option.id === selectedId ? -1 : 0));\n        } else if (recommendedId) {\n            // Set recommended shipping option first in the array, as it will be selected by default\n            options.sort((option) => (option.id === recommendedId ? -1 : 0));\n            await this._handleShippingOptionChange(recommendedId);\n        } else {\n            await this._handleShippingOptionChange(options[0]?.id);\n        }\n\n        // Stripe has restricted the number of shipping rates.\n        return options.slice(0, stripeAllowedShippingOptionsLength);\n    }\n\n    private _getStripeShippingOption({ id, cost, description }: ShippingOption) {\n        return {\n            id,\n            displayName: description,\n            amount: this._toCents(cost),\n        };\n    }\n\n    private async _handleShippingOptionChange(optionId?: string) {\n        if (!optionId || optionId === 'shipping_option_unselected') {\n            return;\n        }\n\n        return this.paymentIntegrationService.selectShippingOption(optionId);\n    }\n\n    private _getAmountTransformer() {\n        if (this._amountTransformer) {\n            return this._amountTransformer;\n        }\n\n        const { getCart } = this.paymentIntegrationService.getState();\n        const { currency } = getCart() || {};\n\n        if (currency) {\n            const amountTransformer = new AmountTransformer(currency.decimalPlaces);\n\n            return amountTransformer;\n        }\n    }\n\n    private _toCents(amount: number) {\n        const fallbackValue = Math.round(amount * 100);\n        const amountTransformer = this._getAmountTransformer();\n\n        if (amountTransformer) {\n            return amountTransformer.toInteger(amount);\n        }\n\n        return fallbackValue;\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 _getMethodId(gatewayId: string): string {\n        const { initializationData: { checkoutSessionEnabled } = {} } =\n            this.paymentIntegrationService\n                .getState()\n                .getPaymentMethodOrThrow<StripeInitializationData>(gatewayId);\n\n        return checkoutSessionEnabled\n            ? StripePaymentMethodType.CHECKOUT_SESSION\n            : StripePaymentMethodType.OCS;\n    }\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/stripe-ocs-customer-initialize-options.ts",
    "content": "export default interface StripeOCSCustomerInitializeOptions {\n    buttonHeight?: number;\n\n    /**\n     * The ID of a container which the stripe iframe should be inserted.\n     */\n    container: string;\n\n    /**\n     * The identifier of the payment method.\n     */\n    methodId: string;\n\n    gatewayId: string;\n\n    onComplete?: (orderId?: number) => Promise<never>;\n\n    loadingContainerId?: string;\n}\n\nexport interface WithStripeOCSCustomerInitializeOptions {\n    stripeocs?: StripeOCSCustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/stripe-ocs-initialize-options.ts",
    "content": "import {\n    StripeAppearanceOptions,\n    StripeAppearanceValues,\n    StripeCustomFont,\n    StripePaymentInitializeOptions,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\n/**\n * A set of options that are required to initialize the Stripe payment method.\n *\n * Once Stripe payment is initialized, credit card form fields, provided by the\n * payment provider as iframes, will be inserted into the current page. These\n * options provide a location and styling for each of the form fields.\n *\n * ```html\n * <!-- This is where the credit card component will be inserted -->\n * <div id=\"container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     gateway: 'stripeocs',\n *     id: 'optimized_checkout',\n *     stripeocs {\n *         containerId: 'container',\n *     },\n * });\n * ```\n */\n\nexport default interface StripeOCSPaymentInitializeOptions extends StripePaymentInitializeOptions {\n    /**\n     * The location to insert the credit card number form field.\n     */\n    containerId: string;\n\n    /**\n     * The location to insert the currency selector form field.\n     */\n    currencySelectorContainerId?: string;\n\n    /**\n     * Checkout styles from store theme\n     */\n    style?: Record<string, StripeAppearanceValues>;\n\n    /**\n     * Stripe OCS layout options\n     */\n    layout?: Record<string, string | number | boolean>;\n\n    /**\n     * Stripe OCS appearance options for styling the accordion.\n     */\n    appearance?: StripeAppearanceOptions;\n\n    /**\n     * Stripe OCS fonts options for styling the accordion.\n     */\n    fonts?: StripeCustomFont[];\n\n    onError?(error?: Error): void;\n\n    render(): void;\n\n    paymentMethodSelect?(id: string): void;\n\n    handleClosePaymentMethod?(collapseElement: () => void): void;\n\n    togglePreloader?(showLoader: boolean): void;\n}\n\nexport interface WithStripeOCSPaymentInitializeOptions {\n    stripeocs?: StripeOCSPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/stripe-ocs-payment-strategy.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    InvalidArgumentError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodFailedError,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    getCheckout,\n    getErrorPaymentResponseBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    getStripeIntegrationServiceMock,\n    getStripeJsMock,\n    StripeClient,\n    StripeElementType,\n    StripeEventMock,\n    StripeInstrumentSetupFutureUsage,\n    StripeIntegrationService,\n    StripeJsVersion,\n    StripePIPaymentMethodOptions,\n    StripeScriptLoader,\n    StripeStringConstants,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport { WithStripeOCSPaymentInitializeOptions } from './stripe-ocs-initialize-options';\nimport StripeOCSPaymentStrategy from './stripe-ocs-payment-strategy';\nimport {\n    getStripeOCSInitializeOptionsMock,\n    getStripeOCSMock,\n    getStripeOCSOrderRequestBodyMock,\n} from './stripe-ocs.mock';\n\ndescribe('StripeOCSPaymentStrategy', () => {\n    let stripeOCSPaymentStrategy: StripeOCSPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let stripeScriptLoader: StripeScriptLoader;\n    let stripeIntegrationService: StripeIntegrationService;\n    let stripeOptions: PaymentInitializeOptions & WithStripeOCSPaymentInitializeOptions;\n    let stripeUPEJsMock: StripeClient;\n\n    const methodId = 'optymized_checkout';\n    const gatewayId = 'stripeocs';\n\n    beforeEach(() => {\n        const scriptLoader = createScriptLoader();\n\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        stripeScriptLoader = new StripeScriptLoader(scriptLoader);\n        stripeIntegrationService = getStripeIntegrationServiceMock();\n        stripeOCSPaymentStrategy = new StripeOCSPaymentStrategy(\n            paymentIntegrationService,\n            stripeScriptLoader,\n            stripeIntegrationService,\n        );\n\n        stripeOptions = getStripeOCSInitializeOptionsMock();\n        stripeUPEJsMock = getStripeJsMock();\n\n        jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n            jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n        );\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            getStripeOCSMock(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartLocale').mockReturnValue('en');\n        jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n            Promise.resolve(stripeUPEJsMock.elements({})),\n        );\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize', () => {\n        it('throws error if no stripe initialization options', async () => {\n            await expect(\n                stripeOCSPaymentStrategy.initialize({\n                    ...stripeOptions,\n                    stripeocs: undefined,\n                }),\n            ).rejects.toThrow(NotInitializedError);\n            expect(stripeIntegrationService.initCheckoutEventsSubscription).not.toHaveBeenCalled();\n        });\n\n        it('throws error if no container id in stripe options', async () => {\n            await expect(\n                stripeOCSPaymentStrategy.initialize({\n                    ...stripeOptions,\n                    stripeocs: {\n                        ...stripeOptions.stripeocs,\n                        render: jest.fn(),\n                        containerId: '',\n                    },\n                }),\n            ).rejects.toThrow(NotInitializedError);\n            expect(stripeIntegrationService.initCheckoutEventsSubscription).not.toHaveBeenCalled();\n        });\n\n        it('throws error if no gatewayId option', async () => {\n            await expect(\n                stripeOCSPaymentStrategy.initialize({\n                    ...stripeOptions,\n                    gatewayId: undefined,\n                }),\n            ).rejects.toThrow(InvalidArgumentError);\n            expect(stripeIntegrationService.initCheckoutEventsSubscription).not.toHaveBeenCalled();\n        });\n\n        it('throws error if payment method does not like stripe payment method', async () => {\n            const stripePaymentMethod = getStripeOCSMock();\n            const onErrorMock = jest.fn();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...stripePaymentMethod,\n                initializationData: undefined,\n            });\n\n            await stripeOCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    containerId: 'containerId',\n                    render: jest.fn(),\n                    onError: onErrorMock,\n                },\n            });\n\n            expect(onErrorMock).toHaveBeenCalled();\n        });\n\n        it('throws error if payment method does not have clientToken', async () => {\n            const stripePaymentMethod = getStripeOCSMock();\n            const onErrorMock = jest.fn();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...stripePaymentMethod,\n                clientToken: undefined,\n            });\n\n            await stripeOCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    containerId: 'containerId',\n                    render: jest.fn(),\n                    onError: onErrorMock,\n                },\n            });\n\n            expect(onErrorMock).toHaveBeenCalled();\n        });\n\n        it('should initialize', async () => {\n            const onErrorMock = jest.fn();\n            const renderMock = jest.fn();\n            const togglePreloaderMock = jest.fn();\n\n            await stripeOCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    containerId: 'containerId',\n                    render: renderMock,\n                    onError: onErrorMock,\n                    togglePreloader: togglePreloaderMock,\n                },\n            });\n\n            expect(stripeScriptLoader.getElements).toHaveBeenCalled();\n            expect(onErrorMock).not.toHaveBeenCalled();\n            expect(togglePreloaderMock).toHaveBeenCalled();\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalled();\n            expect(stripeIntegrationService.initCheckoutEventsSubscription).toHaveBeenCalled();\n        });\n\n        it('should initialize and get postal code when shipping address unavailable', async () => {\n            const onErrorMock = jest.fn();\n            const renderMock = jest.fn();\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(StripeEventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            }));\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n                undefined,\n            );\n            jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n                Promise.resolve({\n                    ...stripeUPEJsMock.elements({}),\n                    create: createMock,\n                }),\n            );\n\n            await stripeOCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    ...stripeOptions.stripeocs,\n                    containerId: 'containerId',\n                    render: renderMock,\n                    onError: onErrorMock,\n                },\n            });\n\n            expect(createMock).toHaveBeenCalledWith(StripeElementType.PAYMENT, {\n                fields: {\n                    billingDetails: {\n                        email: StripeStringConstants.NEVER,\n                        address: {\n                            country: StripeStringConstants.NEVER,\n                            city: StripeStringConstants.NEVER,\n                            postalCode: StripeStringConstants.NEVER,\n                        },\n                    },\n                },\n                wallets: {\n                    applePay: StripeStringConstants.NEVER,\n                    googlePay: StripeStringConstants.NEVER,\n                    link: StripeStringConstants.NEVER,\n                },\n                layout: {\n                    type: 'accordion',\n                    defaultCollapsed: false,\n                    radios: true,\n                    spacedAccordionItems: false,\n                    visibleAccordionItemsCount: 0,\n                },\n                savePaymentMethod: {\n                    maxVisiblePaymentMethods: 20,\n                },\n                defaultValues: {\n                    billingDetails: {\n                        email: 'test@bigcommerce.com',\n                    },\n                },\n            });\n            expect(onErrorMock).not.toHaveBeenCalled();\n            expect(stripeIntegrationService.mountElement).toHaveBeenCalled();\n        });\n\n        it('should initialize if address information unavailable', async () => {\n            const onErrorMock = jest.fn();\n            const renderMock = jest.fn();\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(StripeEventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            }));\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getShippingAddress').mockReturnValue(\n                undefined,\n            );\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n                undefined,\n            );\n            jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n                Promise.resolve({\n                    ...stripeUPEJsMock.elements({}),\n                    create: createMock,\n                }),\n            );\n\n            await stripeOCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    ...stripeOptions.stripeocs,\n                    containerId: 'containerId',\n                    render: renderMock,\n                    onError: onErrorMock,\n                },\n            });\n\n            expect(createMock).toHaveBeenCalledWith(StripeElementType.PAYMENT, {\n                fields: {\n                    billingDetails: {\n                        email: StripeStringConstants.NEVER,\n                        address: {\n                            country: StripeStringConstants.NEVER,\n                            city: StripeStringConstants.NEVER,\n                            postalCode: StripeStringConstants.AUTO,\n                        },\n                    },\n                },\n                wallets: {\n                    applePay: StripeStringConstants.NEVER,\n                    googlePay: StripeStringConstants.NEVER,\n                    link: StripeStringConstants.NEVER,\n                },\n                layout: {\n                    type: 'accordion',\n                    defaultCollapsed: false,\n                    radios: true,\n                    spacedAccordionItems: false,\n                    visibleAccordionItemsCount: 0,\n                },\n                savePaymentMethod: {\n                    maxVisiblePaymentMethods: 20,\n                },\n                defaultValues: {\n                    billingDetails: {\n                        email: '',\n                    },\n                },\n            });\n            expect(onErrorMock).not.toHaveBeenCalled();\n        });\n\n        it('initialize accordion close handled', async () => {\n            const onErrorMock = jest.fn();\n            const collapseMock = jest.fn();\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(StripeEventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n                collapse: collapseMock,\n            }));\n\n            jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n                Promise.resolve({\n                    ...stripeUPEJsMock.elements({}),\n                    getElement: createMock,\n                }),\n            );\n\n            await stripeOCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    containerId: 'containerId',\n                    render: jest.fn(),\n                    onError: onErrorMock,\n                    handleClosePaymentMethod: jest.fn().mockImplementation((callback) => {\n                        callback();\n                    }),\n                },\n            });\n\n            expect(onErrorMock).not.toHaveBeenCalled();\n            expect(collapseMock).toHaveBeenCalled();\n        });\n\n        it('should not collapse accordion if element not initialized', async () => {\n            const onErrorMock = jest.fn();\n            const collapseMock = jest.fn();\n\n            jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n                Promise.resolve(stripeUPEJsMock.elements({})),\n            );\n\n            await stripeOCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    containerId: 'containerId',\n                    render: jest.fn(),\n                    onError: onErrorMock,\n                    handleClosePaymentMethod: jest.fn().mockImplementation((callback) => {\n                        callback();\n                    }),\n                },\n            });\n\n            expect(onErrorMock).not.toHaveBeenCalled();\n            expect(collapseMock).not.toHaveBeenCalled();\n        });\n\n        it('loads stripe js only once per initialization', async () => {\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledWith(\n                getStripeOCSMock().initializationData,\n                'en',\n                StripeJsVersion.V3,\n            );\n        });\n\n        it('loads stripe js with new Stripe JS version', async () => {\n            jest.spyOn(stripeIntegrationService, 'getStripeJsVersion').mockReturnValue(\n                StripeJsVersion.CLOVER,\n            );\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledWith(\n                getStripeOCSMock().initializationData,\n                'en',\n                StripeJsVersion.CLOVER,\n            );\n        });\n\n        it('should enable Link by initialization data option', async () => {\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(StripeEventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            }));\n            const stripePaymentMethod = getStripeOCSMock();\n\n            jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n                Promise.resolve({\n                    ...stripeUPEJsMock.elements({}),\n                    create: createMock,\n                }),\n            );\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...stripePaymentMethod,\n                initializationData: {\n                    ...stripePaymentMethod.initializationData,\n                    enableLink: true,\n                },\n            });\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            expect(createMock).toHaveBeenCalledWith(StripeElementType.PAYMENT, {\n                fields: {\n                    billingDetails: {\n                        email: StripeStringConstants.NEVER,\n                        address: {\n                            country: StripeStringConstants.NEVER,\n                            city: StripeStringConstants.NEVER,\n                            postalCode: StripeStringConstants.AUTO,\n                        },\n                    },\n                },\n                wallets: {\n                    applePay: StripeStringConstants.NEVER,\n                    googlePay: StripeStringConstants.NEVER,\n                    link: StripeStringConstants.AUTO,\n                },\n                layout: {\n                    type: 'accordion',\n                    defaultCollapsed: false,\n                    radios: true,\n                    spacedAccordionItems: false,\n                    visibleAccordionItemsCount: 0,\n                },\n                savePaymentMethod: {\n                    maxVisiblePaymentMethods: 20,\n                },\n                defaultValues: {\n                    billingDetails: {\n                        email: '',\n                    },\n                },\n            });\n        });\n\n        it('should Disable Link by initialization data option', async () => {\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(StripeEventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            }));\n            const stripePaymentMethod = getStripeOCSMock();\n\n            jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n                Promise.resolve({\n                    ...stripeUPEJsMock.elements({}),\n                    create: createMock,\n                }),\n            );\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...stripePaymentMethod,\n                initializationData: {\n                    ...stripePaymentMethod.initializationData,\n                    enableLink: false,\n                },\n            });\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            expect(createMock).toHaveBeenCalledWith(StripeElementType.PAYMENT, {\n                fields: {\n                    billingDetails: {\n                        email: StripeStringConstants.NEVER,\n                        address: {\n                            country: StripeStringConstants.NEVER,\n                            city: StripeStringConstants.NEVER,\n                            postalCode: StripeStringConstants.AUTO,\n                        },\n                    },\n                },\n                wallets: {\n                    applePay: StripeStringConstants.NEVER,\n                    googlePay: StripeStringConstants.NEVER,\n                    link: StripeStringConstants.NEVER,\n                },\n                layout: {\n                    type: 'accordion',\n                    defaultCollapsed: false,\n                    radios: true,\n                    spacedAccordionItems: false,\n                    visibleAccordionItemsCount: 0,\n                },\n                savePaymentMethod: {\n                    maxVisiblePaymentMethods: 20,\n                },\n                defaultValues: {\n                    billingDetails: {\n                        email: '',\n                    },\n                },\n            });\n        });\n    });\n\n    describe('#execute', () => {\n        it('throw error if stripe client not initialized', async () => {\n            await expect(stripeOCSPaymentStrategy.execute({})).rejects.toThrow(NotInitializedError);\n        });\n\n        it('throw error if there are no gateway id', async () => {\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeOCSPaymentStrategy.execute({\n                    payment: {\n                        methodId: '',\n                        gatewayId: '',\n                    },\n                }),\n            ).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('throw error if there are no method id', async () => {\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeOCSPaymentStrategy.execute({\n                    payment: {\n                        methodId: '',\n                        gatewayId,\n                    },\n                }),\n            ).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('execute with store credits', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getCheckoutOrThrow',\n            ).mockReturnValueOnce({\n                ...getCheckout(),\n                isStoreCreditApplied: true,\n            });\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.applyStoreCredit).toHaveBeenCalledWith(true);\n        });\n\n        it('execute without additional actions with selected method in accordion', async () => {\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.applyStoreCredit).not.toHaveBeenCalled();\n            expect(stripeIntegrationService.updateStripePaymentIntent).toHaveBeenCalledWith(\n                gatewayId,\n                methodId,\n            );\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('execute with selected payment method id without ui handled', async () => {\n            const eventMock = {\n                ...StripeEventMock,\n                collapsed: false,\n            };\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(eventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            }));\n\n            jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n                Promise.resolve({\n                    ...stripeUPEJsMock.elements({}),\n                    create: createMock,\n                }),\n            );\n\n            await stripeOCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    render: jest.fn(),\n                    containerId: 'containerId',\n                },\n            });\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: 'card',\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('execute with selected payment method id', async () => {\n            const eventMock = {\n                ...StripeEventMock,\n                collapsed: false,\n            };\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(eventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            }));\n            const paymentMethodSelectMock = jest.fn();\n\n            jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n                Promise.resolve({\n                    ...stripeUPEJsMock.elements({}),\n                    create: createMock,\n                }),\n            );\n\n            await stripeOCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    render: jest.fn(),\n                    containerId: 'containerId',\n                    paymentMethodSelect: paymentMethodSelectMock,\n                },\n            });\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: 'card',\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n            expect(paymentMethodSelectMock).toHaveBeenCalledWith(`${gatewayId}-${methodId}`);\n        });\n\n        it('does not change selected payment method id if accordion collapsed', async () => {\n            const eventMock = {\n                ...StripeEventMock,\n                collapsed: true,\n            };\n            const createMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn((_, callback) => callback(eventMock)),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            }));\n\n            jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n                Promise.resolve({\n                    ...stripeUPEJsMock.elements({}),\n                    create: createMock,\n                }),\n            );\n\n            await stripeOCSPaymentStrategy.initialize({\n                ...stripeOptions,\n                stripeocs: {\n                    render: jest.fn(),\n                    containerId: 'containerId',\n                },\n            });\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('execute without additional actions without client token', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValueOnce(getStripeOCSMock());\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValueOnce({\n                ...getStripeOCSMock(),\n                clientToken: undefined,\n            });\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                        credit_card_token: {\n                            token: '',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('payment payload without cart', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCart').mockReturnValue(undefined);\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('payment payload without cart ID', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCart').mockReturnValue({\n                ...getCart(),\n                id: '',\n            });\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n    });\n\n    describe('#execute, with additional action', () => {\n        let errorResponse: RequestError;\n        let confirmPaymentMock: jest.Mock;\n        let retrievePaymentIntentMock: jest.Mock;\n\n        const mockFirstPaymentRequest = (payload: unknown) => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.reject(payload),\n            );\n        };\n\n        beforeEach(() => {\n            jest.spyOn(stripeIntegrationService, 'isAdditionalActionError').mockReturnValue(true);\n            jest.spyOn(stripeIntegrationService, 'isPaymentCompleted').mockReturnValue(\n                Promise.resolve(false),\n            );\n\n            errorResponse = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [{ code: 'additional_action_required' }],\n                    additional_action_required: {\n                        type: 'additional_action_requires_payment_method',\n                        data: {\n                            redirect_url: 'https://redirect-url.com',\n                            token: 'token',\n                        },\n                    },\n                    status: 'error',\n                }),\n            );\n\n            confirmPaymentMock = jest.fn();\n            retrievePaymentIntentMock = jest.fn();\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: retrievePaymentIntentMock,\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n        });\n\n        it('throws not request error', async () => {\n            mockFirstPaymentRequest(new Error('Not request'));\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n            ).rejects.toThrow(Error);\n        });\n\n        it('throws not additional action error', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            jest.spyOn(stripeIntegrationService, 'isAdditionalActionError').mockReturnValue(false);\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n            ).rejects.toThrow(Error);\n        });\n\n        it('throws not initialized error', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(() => {\n                stripeOCSPaymentStrategy.deinitialize();\n\n                return Promise.reject(errorResponse);\n            });\n\n            confirmPaymentMock = jest.fn().mockRejectedValue(new Error('stripe error'));\n            retrievePaymentIntentMock = jest.fn().mockResolvedValue({\n                paymentIntent: undefined,\n            });\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: retrievePaymentIntentMock,\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n            ).rejects.toThrow(NotInitializedError);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n            expect(confirmPaymentMock).not.toHaveBeenCalled();\n        });\n\n        it('skips stripe confirmation if payment has been already completed', async () => {\n            errorResponse.body.additional_action_required.data.token = undefined;\n            mockFirstPaymentRequest(errorResponse);\n            jest.spyOn(stripeIntegrationService, 'isPaymentCompleted').mockReturnValue(\n                Promise.resolve(true),\n            );\n\n            confirmPaymentMock = jest.fn().mockRejectedValue(new Error('stripe error'));\n            retrievePaymentIntentMock = jest.fn().mockResolvedValue({\n                paymentIntent: {},\n            });\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: retrievePaymentIntentMock,\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(confirmPaymentMock).not.toHaveBeenCalled();\n            expect(retrievePaymentIntentMock).toHaveBeenCalled();\n        });\n\n        it('throw stripe error', async () => {\n            const stripeGenericErrorMock = {\n                type: 'cancelation_error',\n            };\n\n            mockFirstPaymentRequest(errorResponse);\n            confirmPaymentMock = jest.fn().mockResolvedValue({\n                paymentIntent: {},\n                error: stripeGenericErrorMock,\n            });\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: jest.fn(),\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n            ).rejects.toThrow('throw stripe error');\n        });\n\n        it('throw error if confirmation crashed', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            confirmPaymentMock = jest\n                .fn()\n                .mockReturnValue(Promise.reject(new Error('stripe confirmation error')));\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: jest.fn(),\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n            ).rejects.toThrow('stripe confirmation error');\n        });\n\n        it('throw generic stripe error if no confirmation response', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            confirmPaymentMock = jest.fn().mockResolvedValue(null);\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: jest.fn(),\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n            ).rejects.toThrow(TypeError);\n        });\n\n        it('throw generic stripe error if no payment intent response', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            confirmPaymentMock = jest.fn().mockResolvedValue({});\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: jest.fn(),\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n            ).rejects.toThrow('throw stripe error');\n        });\n\n        it('submit second payment request after stripe confirmation', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            confirmPaymentMock = jest.fn().mockResolvedValue({\n                paymentIntent: {\n                    id: 'paymentIntentId',\n                    client_secret: 'paymentIntentClientSecret',\n                },\n            });\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: jest.fn(),\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'paymentIntentClientSecret',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('submit second payment request with token from submitPayment response error body if PI ID not exists', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            confirmPaymentMock = jest.fn().mockResolvedValue({\n                paymentIntent: {\n                    id: '',\n                },\n            });\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: jest.fn(),\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'token',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('throws error on second submitPayment request', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            mockFirstPaymentRequest(new Error('second submitPayment error'));\n            confirmPaymentMock = jest.fn().mockResolvedValue({\n                paymentIntent: {\n                    id: 'paymentIntentId',\n                    client_secret: 'paymentIntentClientSecret',\n                },\n            });\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: jest.fn(),\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            await expect(\n                stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n            ).rejects.toThrow(PaymentMethodFailedError);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            expect(\n                stripeIntegrationService.throwPaymentConfirmationProceedMessage,\n            ).toHaveBeenCalled();\n        });\n\n        it('submit second payment request after client token was changed on BE side after get config request', async () => {\n            mockFirstPaymentRequest(errorResponse);\n            confirmPaymentMock = jest.fn().mockResolvedValue({\n                paymentIntent: {\n                    id: 'paymentIntentId',\n                    client_secret: 'token_2',\n                },\n            });\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: jest.fn(),\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getStripeOCSMock(),\n                clientToken: 'token_2',\n            });\n\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'token_2',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'token_2',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        describe('sendSecondPaymentRequestOnStripeError', () => {\n            const mockPaymentMethodWithFlag = (sendSecondPaymentRequestOnStripeError: boolean) => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...getStripeOCSMock(),\n                    initializationData: {\n                        ...getStripeOCSMock().initializationData,\n                        sendSecondPaymentRequestOnStripeError,\n                    },\n                });\n            };\n\n            it('sends second submitPayment request with client_side_error when flag is true and stripe returns error', async () => {\n                mockPaymentMethodWithFlag(true);\n                mockFirstPaymentRequest(errorResponse);\n                confirmPaymentMock = jest.fn().mockResolvedValue({\n                    error: { message: 'Your card was declined' },\n                });\n\n                stripeUPEJsMock = {\n                    ...getStripeJsMock(),\n                    confirmPayment: confirmPaymentMock,\n                    retrievePaymentIntent: jest.fn(),\n                };\n                jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                    jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n                );\n\n                await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n                await expect(\n                    stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n                ).rejects.toThrow('throw stripe error');\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                    2,\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                client_side_error: true,\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('does not send second submitPayment when flag is false and stripe returns error', async () => {\n                mockPaymentMethodWithFlag(false);\n                mockFirstPaymentRequest(errorResponse);\n                confirmPaymentMock = jest.fn().mockResolvedValue({\n                    error: { message: 'Your card was declined' },\n                });\n\n                stripeUPEJsMock = {\n                    ...getStripeJsMock(),\n                    confirmPayment: confirmPaymentMock,\n                    retrievePaymentIntent: jest.fn(),\n                };\n                jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                    jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n                );\n\n                await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n                await expect(\n                    stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n                ).rejects.toThrow('throw stripe error');\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n            });\n\n            it('sends second submitPayment with client_side_error when flag is true and no payment intent', async () => {\n                mockPaymentMethodWithFlag(true);\n                mockFirstPaymentRequest(errorResponse);\n                confirmPaymentMock = jest.fn().mockResolvedValue({});\n\n                stripeUPEJsMock = {\n                    ...getStripeJsMock(),\n                    confirmPayment: confirmPaymentMock,\n                    retrievePaymentIntent: jest.fn(),\n                };\n                jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                    jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n                );\n\n                await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n                await expect(\n                    stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n                ).rejects.toThrow('throw stripe error');\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                    2,\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                client_side_error: true,\n                            }),\n                        }),\n                    }),\n                );\n            });\n\n            it('throws stripe error even when second submitPayment with client_side_error fails', async () => {\n                mockPaymentMethodWithFlag(true);\n                mockFirstPaymentRequest(errorResponse);\n                mockFirstPaymentRequest(new Error('second payment failed'));\n                confirmPaymentMock = jest.fn().mockResolvedValue({\n                    error: { message: 'Your card was declined' },\n                });\n\n                stripeUPEJsMock = {\n                    ...getStripeJsMock(),\n                    confirmPayment: confirmPaymentMock,\n                    retrievePaymentIntent: jest.fn(),\n                };\n                jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                    jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n                );\n\n                await stripeOCSPaymentStrategy.initialize(stripeOptions);\n\n                await expect(\n                    stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock()),\n                ).rejects.toThrow('throw stripe error');\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                    2,\n                    expect.objectContaining({\n                        paymentData: expect.objectContaining({\n                            formattedPayload: expect.objectContaining({\n                                client_side_error: true,\n                            }),\n                        }),\n                    }),\n                );\n            });\n        });\n    });\n\n    describe('#vaulted instruments', () => {\n        let errorResponse: RequestError;\n        let confirmPaymentMock: jest.Mock;\n        let retrievePaymentIntentMock: jest.Mock;\n\n        const mockFirstPaymentRequest = (payload: unknown) => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.reject(payload),\n            );\n        };\n\n        const mockSetupFutureUsage = (payment_method_options?: StripePIPaymentMethodOptions) => {\n            confirmPaymentMock = jest.fn().mockResolvedValue({\n                paymentIntent: {\n                    id: 'paymentIntentId',\n                    client_secret: 'paymentIntentClientSecret',\n                    payment_method_options,\n                },\n            });\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: jest.fn(),\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n        };\n\n        beforeEach(() => {\n            jest.spyOn(stripeIntegrationService, 'isAdditionalActionError').mockReturnValue(true);\n            jest.spyOn(stripeIntegrationService, 'isPaymentCompleted').mockReturnValue(\n                Promise.resolve(false),\n            );\n\n            errorResponse = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [{ code: 'additional_action_required' }],\n                    additional_action_required: {\n                        type: 'additional_action_requires_payment_method',\n                        data: {\n                            redirect_url: 'https://redirect-url.com',\n                            token: 'token',\n                        },\n                    },\n                    status: 'error',\n                }),\n            );\n\n            confirmPaymentMock = jest.fn();\n            retrievePaymentIntentMock = jest.fn();\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                confirmPayment: confirmPaymentMock,\n                retrievePaymentIntent: retrievePaymentIntentMock,\n            };\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockImplementation(\n                jest.fn(() => Promise.resolve(stripeUPEJsMock)),\n            );\n            mockFirstPaymentRequest(errorResponse);\n        });\n\n        it('should not store vaulted instrument if stripe checkbox was not selected', async () => {\n            mockSetupFutureUsage();\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'paymentIntentClientSecret',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('should store vaulted card instrument [on_session]', async () => {\n            mockSetupFutureUsage({\n                card: {\n                    setup_future_usage: StripeInstrumentSetupFutureUsage.ON_SESSION,\n                },\n                us_bank_account: {\n                    verification_method: 'automatic',\n                },\n            });\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'paymentIntentClientSecret',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: true,\n                    },\n                },\n            });\n        });\n\n        it('should store vaulted card instrument [off_session]', async () => {\n            mockSetupFutureUsage({\n                card: {\n                    setup_future_usage: StripeInstrumentSetupFutureUsage.OFF_SESSION,\n                },\n            });\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'paymentIntentClientSecret',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: true,\n                    },\n                },\n            });\n        });\n\n        it('should store vaulted ACH instrument [on_session]', async () => {\n            mockSetupFutureUsage({\n                us_bank_account: {\n                    setup_future_usage: StripeInstrumentSetupFutureUsage.ON_SESSION,\n                },\n            });\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        tokenized_ach: {\n                            token: 'paymentIntentClientSecret',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: true,\n                    },\n                },\n            });\n        });\n\n        it('should store vaulted ACH instrument [off_session]', async () => {\n            mockSetupFutureUsage({\n                us_bank_account: {\n                    setup_future_usage: StripeInstrumentSetupFutureUsage.OFF_SESSION,\n                },\n            });\n\n            await stripeOCSPaymentStrategy.initialize(stripeOptions);\n            await stripeOCSPaymentStrategy.execute(getStripeOCSOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        credit_card_token: {\n                            token: 'clientToken',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: false,\n                    },\n                },\n            });\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: '',\n                        tokenized_ach: {\n                            token: 'paymentIntentClientSecret',\n                        },\n                        confirm: false,\n                        method: undefined,\n                        vault_payment_instrument: true,\n                    },\n                },\n            });\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws an error to inform that order finalization is not required', async () => {\n            await expect(stripeOCSPaymentStrategy.finalize()).rejects.toBeInstanceOf(\n                OrderFinalizationNotRequiredError,\n            );\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        let unmountMock: jest.Mock;\n        let destroyMock: jest.Mock;\n        let getElementMock: jest.Mock;\n\n        beforeEach(() => {\n            unmountMock = jest.fn();\n            destroyMock = jest.fn();\n            getElementMock = jest.fn().mockImplementation(() => ({\n                mount: jest.fn(),\n                unmount: unmountMock,\n                on: jest.fn((_, callback) => callback(StripeEventMock)),\n                update: jest.fn(),\n                destroy: destroyMock,\n                collapse: jest.fn(),\n            }));\n        });\n\n        it('deinitializes stripe payment strategy', async () => {\n            jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n                Promise.resolve({\n                    ...stripeUPEJsMock.elements({}),\n                    getElement: getElementMock,\n                }),\n            );\n\n            await stripeOCSPaymentStrategy.initialize(getStripeOCSInitializeOptionsMock());\n            await stripeOCSPaymentStrategy.deinitialize();\n\n            expect(stripeIntegrationService.deinitialize).toHaveBeenCalled();\n            expect(unmountMock).toHaveBeenCalled();\n            expect(destroyMock).toHaveBeenCalled();\n        });\n\n        it('when stripe payment element not initialized', async () => {\n            await stripeOCSPaymentStrategy.initialize(getStripeOCSInitializeOptionsMock());\n\n            jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n                Promise.resolve({\n                    ...stripeUPEJsMock.elements({}),\n                    getElement: () => null,\n                }),\n            );\n\n            await stripeOCSPaymentStrategy.deinitialize();\n\n            expect(stripeIntegrationService.deinitialize).toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/stripe-ocs-payment-strategy.ts",
    "content": "import { merge } from 'lodash';\n\nimport {\n    InvalidArgumentError,\n    isRequestError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    Payment,\n    PaymentInitializeOptions,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    isStripePaymentEvent,\n    isStripePaymentMethodLike,\n    StripeAdditionalActionRequired,\n    StripeClient,\n    StripeElement,\n    StripeElementEvent,\n    StripeElements,\n    StripeElementType,\n    StripeEventType,\n    StripeFormattedPaymentPayload,\n    StripeInitializationData,\n    StripeInstrumentSetupFutureUsage,\n    StripeIntegrationService,\n    StripePIPaymentMethodOptions,\n    StripePIPaymentMethodSavingOptions,\n    StripeResult,\n    StripeScriptLoader,\n    StripeStringConstants,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport StripeOCSPaymentInitializeOptions, {\n    WithStripeOCSPaymentInitializeOptions,\n} from './stripe-ocs-initialize-options';\n\nexport default class StripeOCSPaymentStrategy implements PaymentStrategy {\n    private stripeClient?: StripeClient;\n    private stripeElements?: StripeElements;\n    private selectedMethodId?: string;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private scriptLoader: StripeScriptLoader,\n        private stripeIntegrationService: StripeIntegrationService,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithStripeOCSPaymentInitializeOptions,\n    ): Promise<void> {\n        const { stripeocs, methodId, gatewayId } = options;\n\n        if (!stripeocs?.containerId) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        if (!gatewayId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"gatewayId\" argument is not provided.',\n            );\n        }\n\n        try {\n            await this._initializeStripeElement(stripeocs, gatewayId, methodId);\n        } catch (error) {\n            if (error instanceof Error) {\n                stripeocs.onError?.(error);\n            }\n        }\n\n        this.stripeIntegrationService.initCheckoutEventsSubscription(\n            gatewayId,\n            methodId,\n            stripeocs,\n            this.stripeElements,\n        );\n    }\n\n    async execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = orderRequest;\n        const { methodId, gatewayId } = payment || {};\n\n        if (!this.stripeClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        if (!gatewayId || !methodId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"gatewayId\" or \"methodId\" argument is not provided.',\n            );\n        }\n\n        const { isStoreCreditApplied } = this.paymentIntegrationService\n            .getState()\n            .getCheckoutOrThrow();\n\n        if (isStoreCreditApplied) {\n            await this.paymentIntegrationService.applyStoreCredit(isStoreCreditApplied);\n        }\n\n        await this.stripeIntegrationService.updateStripePaymentIntent(gatewayId, methodId);\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n\n        const { clientToken } = this.paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow(methodId, gatewayId);\n\n        const paymentPayload = this._getPaymentPayload(methodId, clientToken || '');\n\n        try {\n            await this.paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error) {\n            await this._processAdditionalAction(error, methodId, gatewayId);\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        const paymentElement = this.stripeElements?.getElement(StripeElementType.PAYMENT);\n\n        paymentElement?.unmount();\n        paymentElement?.destroy();\n        this.stripeIntegrationService.deinitialize();\n        this.stripeElements = undefined;\n        this.stripeClient = undefined;\n\n        return Promise.resolve();\n    }\n\n    private async _initializeStripeElement(\n        stripe: StripeOCSPaymentInitializeOptions,\n        gatewayId: string,\n        methodId: string,\n    ) {\n        let paymentMethod = this.paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow(methodId, gatewayId);\n\n        if (!paymentMethod?.clientToken) {\n            const state = await this.paymentIntegrationService.loadPaymentMethod(gatewayId, {\n                params: { method: methodId },\n            });\n\n            paymentMethod = state.getPaymentMethodOrThrow(methodId, gatewayId);\n        }\n\n        if (!isStripePaymentMethodLike(paymentMethod)) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const { clientToken, initializationData } = paymentMethod;\n        const { customerSessionToken, enableLink } = initializationData;\n\n        if (!clientToken) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        this.stripeClient = await this._loadStripeJs(initializationData);\n\n        const {\n            appearance,\n            containerId,\n            fonts,\n            layout,\n            render,\n            paymentMethodSelect,\n            handleClosePaymentMethod,\n            togglePreloader,\n        } = stripe;\n\n        this.stripeElements = await this.scriptLoader.getElements(this.stripeClient, {\n            clientSecret: clientToken,\n            customerSessionClientSecret: customerSessionToken,\n            appearance,\n            fonts,\n        });\n\n        const { getBillingAddress, getShippingAddress } = this.paymentIntegrationService.getState();\n        const billingAddress = getBillingAddress();\n        const { postalCode } = getShippingAddress() || billingAddress || {};\n\n        const stripeElement: StripeElement =\n            this.stripeElements.getElement(StripeElementType.PAYMENT) ||\n            this.stripeElements.create(StripeElementType.PAYMENT, {\n                fields: {\n                    billingDetails: {\n                        email: StripeStringConstants.NEVER,\n                        address: {\n                            country: StripeStringConstants.NEVER,\n                            city: StripeStringConstants.NEVER,\n                            postalCode: postalCode\n                                ? StripeStringConstants.NEVER\n                                : StripeStringConstants.AUTO,\n                        },\n                    },\n                },\n                wallets: {\n                    applePay: StripeStringConstants.NEVER,\n                    googlePay: StripeStringConstants.NEVER,\n                    link: enableLink ? StripeStringConstants.AUTO : StripeStringConstants.NEVER,\n                },\n                layout,\n                savePaymentMethod: {\n                    maxVisiblePaymentMethods: 20,\n                },\n                defaultValues: {\n                    billingDetails: {\n                        email: billingAddress?.email || '',\n                    },\n                },\n            });\n\n        this.stripeIntegrationService.mountElement(stripeElement, containerId);\n\n        stripeElement.on(StripeElementEvent.LOADER_START, () => {\n            togglePreloader?.(false);\n        });\n\n        stripeElement.on(StripeElementEvent.READY, () => {\n            render();\n        });\n\n        stripeElement.on(StripeElementEvent.CHANGE, (event: StripeEventType) => {\n            this._onStripeElementChange(event, gatewayId, methodId, paymentMethodSelect);\n        });\n\n        handleClosePaymentMethod?.(this._collapseStripeElement.bind(this));\n    }\n\n    private async _loadStripeJs(\n        initializationData: StripeInitializationData,\n    ): Promise<StripeClient> {\n        if (this.stripeClient) {\n            return this.stripeClient;\n        }\n\n        const state = this.paymentIntegrationService.getState();\n        const stripeJsVersion =\n            this.stripeIntegrationService.getStripeJsVersion(initializationData);\n\n        return this.scriptLoader.getStripeClient(\n            initializationData,\n            state.getCartLocale(),\n            stripeJsVersion,\n        );\n    }\n\n    private _collapseStripeElement() {\n        const stripeElement = this.stripeElements?.getElement(StripeElementType.PAYMENT);\n\n        stripeElement?.collapse();\n    }\n\n    private _getPaymentPayload(\n        methodId: string,\n        token: string,\n        paymentMethodOptions?: StripePIPaymentMethodOptions,\n    ): Payment<StripeFormattedPaymentPayload> {\n        const cartId = this.paymentIntegrationService.getState().getCart()?.id || '';\n        const { card, us_bank_account } = paymentMethodOptions || {};\n        const shouldSaveInstrument =\n            this._shouldSaveInstrument(card) || this._shouldSaveInstrument(us_bank_account);\n        const tokenizedOptions = this._getTokenizedOptions(token, paymentMethodOptions);\n\n        const formattedPayload = {\n            cart_id: cartId,\n            confirm: false,\n            method: this.selectedMethodId,\n            vault_payment_instrument: shouldSaveInstrument,\n            ...tokenizedOptions,\n        };\n\n        return {\n            methodId,\n            paymentData: {\n                formattedPayload,\n            },\n        };\n    }\n\n    private async _processAdditionalAction(\n        error: unknown,\n        methodId: string,\n        gatewayId: string,\n    ): Promise<PaymentIntegrationSelectors | undefined> {\n        if (\n            !isRequestError(error) ||\n            !this.stripeIntegrationService.isAdditionalActionError(error.body.errors)\n        ) {\n            throw error;\n        }\n\n        if (!this.stripeClient || !this.stripeElements) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const { data: additionalActionData } = error.body.additional_action_required;\n        const { token } = additionalActionData;\n\n        const { paymentIntent, error: stripeError } = await this._confirmStripePaymentOrThrow(\n            methodId,\n            additionalActionData,\n        );\n        const {\n            client_secret: paymentIntentClientSecret,\n            payment_method_options: paymentMethodOptions,\n        } = paymentIntent || {};\n\n        const paymentPayload = this._getPaymentPayload(\n            methodId,\n            paymentIntentClientSecret || token,\n            paymentMethodOptions,\n        );\n\n        if (stripeError || !paymentIntent) {\n            const { initializationData } = this.paymentIntegrationService\n                .getState()\n                .getPaymentMethodOrThrow<StripeInitializationData>(methodId, gatewayId);\n            const { sendSecondPaymentRequestOnStripeError } = initializationData || {};\n\n            if (sendSecondPaymentRequestOnStripeError) {\n                // INFO: even in case when stripe payment confirmation was declined\n                // we need to send submitPayment request to update status of checkout session on BE side.\n                try {\n                    const paymentPayloadWithError = merge({}, paymentPayload, {\n                        paymentData: {\n                            formattedPayload: {\n                                client_side_error: true,\n                            },\n                        },\n                    });\n\n                    await this.paymentIntegrationService.submitPayment(paymentPayloadWithError);\n                } catch {\n                    // INFO: additional action should be ignored for this update status request.\n                    // will throw Stripe error message to the shopper.\n                }\n            }\n\n            this.stripeIntegrationService.throwStripeError(stripeError);\n        }\n\n        try {\n            return await this.paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error) {\n            this.stripeIntegrationService.throwPaymentConfirmationProceedMessage();\n        }\n    }\n\n    private async _confirmStripePaymentOrThrow(\n        methodId: string,\n        additionalActionData: StripeAdditionalActionRequired['data'],\n    ): Promise<StripeResult | never> {\n        if (!this.stripeClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const { token, redirect_url } = additionalActionData;\n        const stripePaymentData = this.stripeIntegrationService.mapStripePaymentData(\n            this.stripeElements,\n            redirect_url,\n        );\n\n        const isPaymentCompleted = await this.stripeIntegrationService.isPaymentCompleted(\n            methodId,\n            this.stripeClient,\n        );\n\n        return !isPaymentCompleted\n            ? this.stripeClient.confirmPayment(stripePaymentData)\n            : this.stripeClient.retrievePaymentIntent(token || '');\n    }\n\n    private _onStripeElementChange(\n        event: StripeEventType,\n        gatewayId: string,\n        methodId: string,\n        paymentMethodSelect?: (id: string) => void,\n    ) {\n        if (!isStripePaymentEvent(event) || event.collapsed) {\n            return;\n        }\n\n        this.selectedMethodId = event.value.type;\n        paymentMethodSelect?.(`${gatewayId}-${methodId}`);\n    }\n\n    private _shouldSaveInstrument(paymentMethodOptions?: StripePIPaymentMethodSavingOptions) {\n        const setupFutureUsage = paymentMethodOptions?.setup_future_usage;\n\n        return (\n            setupFutureUsage === StripeInstrumentSetupFutureUsage.ON_SESSION ||\n            setupFutureUsage === StripeInstrumentSetupFutureUsage.OFF_SESSION\n        );\n    }\n\n    private _getTokenizedOptions(\n        token: string,\n        paymentMethodOptions?: StripePIPaymentMethodOptions,\n    ) {\n        if (this._shouldSaveInstrument(paymentMethodOptions?.us_bank_account)) {\n            return { tokenized_ach: { token } };\n        }\n\n        return { credit_card_token: { token } };\n    }\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-ocs/stripe-ocs.mock.ts",
    "content": "import {\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WithStripeOCSPaymentInitializeOptions } from './stripe-ocs-initialize-options';\n\nconst gatewayId = 'stripeocs';\nconst methodId = 'optymized_checkout';\n\nexport const defaultAccordionLayout: Record<string, string | number | boolean> = {\n    defaultCollapsed: false,\n    radios: true,\n    spacedAccordionItems: false,\n    type: 'accordion',\n    visibleAccordionItemsCount: 0,\n};\nexport const defaultAccordionStyles: Record<string, string | number> = { fieldText: '#ccc' };\n\nexport function getStripeOCSMock(method = methodId): PaymentMethod {\n    return {\n        id: method,\n        skipRedirectConfirmationAlert: true,\n        gateway: gatewayId,\n        logoUrl: '',\n        method,\n        supportedCards: [],\n        config: {\n            displayName: 'Stripe',\n            merchantId: '',\n            testMode: true,\n        },\n        initializationData: {\n            stripePublishableKey: 'key',\n            stripeConnectedAccount: 'key',\n            browserLanguageEnabled: false,\n            shopperLanguage: 'en',\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        returnUrl: 'http://www.example.com',\n    };\n}\n\nexport function getStripeOCSInitializeOptionsMock(\n    appearance = defaultAccordionStyles,\n): PaymentInitializeOptions & WithStripeOCSPaymentInitializeOptions {\n    return {\n        methodId,\n        gatewayId,\n        [gatewayId]: {\n            containerId: `${gatewayId}-${methodId}-component-field`,\n            currencySelectorContainerId: 'currencySelectorContainerId',\n            layout: defaultAccordionLayout,\n            appearance,\n            render: jest.fn(),\n        },\n    };\n}\n\nexport function getStripeOCSOrderRequestBodyMock(\n    stripePaymentMethodType = methodId,\n): OrderRequestBody {\n    return {\n        payment: {\n            methodId: stripePaymentMethodType,\n            gatewayId,\n        },\n    };\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/create-stripe-upe-customer-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createStripeUPECustomerStrategy from './create-stripe-upe-customer-strategy';\nimport StripeUPECustomerStrategy from './stripe-upe-customer-strategy';\n\ndescribe('createStripeUPECustomerStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('create stripe upe customer strategy', () => {\n        const strategy = createStripeUPECustomerStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(StripeUPECustomerStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/create-stripe-upe-customer-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CustomerStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { StripeScriptLoader } from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport StripeUPECustomerStrategy from './stripe-upe-customer-strategy';\n\nconst createStripeUPECustomerStrategy: CustomerStrategyFactory<StripeUPECustomerStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new StripeUPECustomerStrategy(\n        paymentIntegrationService,\n        new StripeScriptLoader(getScriptLoader()),\n    );\n};\n\nexport default toResolvableModule(createStripeUPECustomerStrategy, [{ id: 'stripeupe' }]);\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/create-stripe-upe-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createStripeUPEPaymentStrategy from './create-stripe-upe-payment-strategy';\nimport StripeUPEPaymentStrategy from './stripe-upe-payment-strategy';\n\ndescribe('createStripeUPEPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('create stripe upe payment strategy', () => {\n        const strategy = createStripeUPEPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(StripeUPEPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/create-stripe-upe-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    StripeIntegrationService,\n    StripeScriptLoader,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport StripeUPEPaymentStrategy from './stripe-upe-payment-strategy';\n\nconst createStripeUPEPaymentStrategy: PaymentStrategyFactory<StripeUPEPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    const stripeScriptLoader = new StripeScriptLoader(getScriptLoader());\n\n    return new StripeUPEPaymentStrategy(\n        paymentIntegrationService,\n        stripeScriptLoader,\n        new StripeIntegrationService(paymentIntegrationService, stripeScriptLoader),\n    );\n};\n\nexport default toResolvableModule(createStripeUPEPaymentStrategy, [\n    { gateway: 'stripeupe' },\n    { gateway: 'stripeupe', id: 'klarna' },\n]);\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/is-stripe-accelerated-checkout-customer.ts",
    "content": "import {\n    PaymentProviderCustomer,\n    StripeAcceleratedCheckoutCustomer,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default function isStripeAcceleratedCheckoutCustomer(\n    customer: PaymentProviderCustomer,\n): customer is StripeAcceleratedCheckoutCustomer {\n    return 'stripeLinkAuthenticationState' in customer;\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/stripe-upe-customer-strategy.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    CustomerStrategy,\n    InvalidArgumentError,\n    MissingDataError,\n    PaymentIntegrationService,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getConsignment,\n    getCustomer,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    STRIPE_UPE_CLIENT_API_VERSION,\n    STRIPE_UPE_CLIENT_BETAS,\n    StripeClient,\n    StripeCustomerEvent,\n    StripeElement,\n    StripeHostWindow,\n    StripeJsVersion,\n    StripeScriptLoader,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport StripeUPECustomerStrategy from './stripe-upe-customer-strategy';\nimport {\n    getCustomerStripeUPEJsMock,\n    getStripeUPECustomerInitializeOptionsMock,\n    StripeUpeCustomerInitializeOptions,\n} from './stripe-upe-customer.mock';\nimport { getStripeUPEMock } from './stripe-upe.mock';\n\ndescribe('StripeUpeCustomerStrategy', () => {\n    let paymentMethodMock: PaymentMethod;\n    let strategy: CustomerStrategy;\n    let stripeScriptLoader: StripeScriptLoader;\n    let stripeUPEJsMock: StripeClient;\n    let loadPaymentMethodAction: Promise<PaymentMethod>;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    const stripeCustomerEvent = (auth = false, complete = false): StripeCustomerEvent => {\n        return {\n            authenticated: auth,\n            complete,\n            elementType: '',\n            empty: false,\n            value: {\n                email: 'foo@bar',\n            },\n        };\n    };\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        paymentMethodMock = { ...getStripeUPEMock(), clientToken: 'myToken' };\n        loadPaymentMethodAction = Promise.resolve(paymentMethodMock);\n        stripeScriptLoader = new StripeScriptLoader(createScriptLoader());\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethod').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartLocale').mockReturnValue('en');\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n\n        paymentIntegrationService.loadPaymentMethod = jest\n            .fn()\n            .mockResolvedValue(loadPaymentMethodAction);\n\n        stripeUPEJsMock = getCustomerStripeUPEJsMock();\n        jest.spyOn(stripeScriptLoader, 'getStripeClient').mockResolvedValue(stripeUPEJsMock);\n\n        jest.spyOn(\n            paymentIntegrationService.getState(),\n            'getPaymentProviderCustomerOrThrow',\n        ).mockReturnValue({ stripeLinkAuthenticationState: true });\n\n        strategy = new StripeUPECustomerStrategy(paymentIntegrationService, stripeScriptLoader);\n    });\n\n    afterEach(() => {\n        delete (window as StripeHostWindow).bcStripeElements;\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        const customer = getCustomer();\n        let customerInitialization: StripeUpeCustomerInitializeOptions;\n\n        beforeEach(() => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue(\n                customer,\n            );\n            customerInitialization = getStripeUPECustomerInitializeOptionsMock();\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue({\n                ...getCustomer(),\n                email: '',\n                isGuest: true,\n            });\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getStripeUPEMock());\n        });\n\n        afterEach(() => {\n            delete (window as StripeHostWindow).bcStripeElements;\n            jest.clearAllMocks();\n        });\n\n        it('loads a single instance of StripeUPEClient and StripeElements', async () => {\n            await strategy.initialize(customerInitialization);\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledWith(\n                paymentMethodMock.initializationData,\n                'en',\n                StripeJsVersion.V3,\n                STRIPE_UPE_CLIENT_BETAS,\n                STRIPE_UPE_CLIENT_API_VERSION,\n            );\n            expect(stripeUPEJsMock.elements).toHaveBeenCalledTimes(1);\n        });\n\n        it('loads a single instance of StripeUPEClient and StripeElements when email is provided', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n                getBillingAddress(),\n            );\n\n            await strategy.initialize(customerInitialization);\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeUPEJsMock.elements).toHaveBeenCalledTimes(1);\n        });\n\n        it('triggers onChange event callback, dispatches delete consignments action and mounts component', async () => {\n            const stripeMockElement: StripeElement = {\n                collapse: jest.fn(),\n                destroy: jest.fn(),\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                update: jest.fn(),\n                on: jest.fn((_, callback) => callback(stripeCustomerEvent(true, true))),\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({ stripeLinkAuthenticationState: undefined });\n\n            const stripeUPEJsMockWithElement = getCustomerStripeUPEJsMock(stripeMockElement);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignments').mockReturnValue([\n                getConsignment(),\n            ]);\n            jest.spyOn(paymentIntegrationService, 'deleteConsignment').mockResolvedValue(\n                paymentIntegrationService.getState(),\n            );\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockResolvedValueOnce(\n                stripeUPEJsMockWithElement,\n            );\n\n            await strategy.initialize(customerInitialization);\n\n            expect(paymentIntegrationService.deleteConsignment).toHaveBeenNthCalledWith(\n                1,\n                getConsignment().id,\n            );\n\n            expect(customerInitialization.stripeupe?.onEmailChange).toHaveBeenCalledWith(\n                true,\n                'foo@bar',\n            );\n            expect(customerInitialization.stripeupe?.isLoading).toHaveBeenCalled();\n            expect(stripeMockElement.mount).toHaveBeenCalledWith(expect.any(String));\n        });\n\n        it('triggers onChange event callback without delete consignments action and mounts component', async () => {\n            const stripeMockElement: StripeElement = {\n                collapse: jest.fn(),\n                destroy: jest.fn(),\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                update: jest.fn(),\n                on: jest.fn((_, callback) => callback(stripeCustomerEvent(true, true))),\n            };\n\n            const stripeUPEJsMockWithElement = getCustomerStripeUPEJsMock(stripeMockElement);\n\n            jest.spyOn(paymentIntegrationService.getState(), 'getConsignments').mockReturnValue([\n                getConsignment(),\n            ]);\n            jest.spyOn(paymentIntegrationService, 'deleteConsignment').mockResolvedValue(\n                paymentIntegrationService.getState(),\n            );\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockResolvedValueOnce(\n                stripeUPEJsMockWithElement,\n            );\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue({\n                ...getCustomer(),\n                email: '',\n                isGuest: true,\n            });\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({ stripeLinkAuthenticationState: true });\n\n            await strategy.initialize(customerInitialization);\n\n            expect(paymentIntegrationService.deleteConsignment).not.toHaveBeenCalled();\n            expect(customerInitialization.stripeupe?.onEmailChange).toHaveBeenCalledWith(\n                true,\n                'foo@bar',\n            );\n            expect(customerInitialization.stripeupe?.isLoading).toHaveBeenCalled();\n            expect(stripeMockElement.mount).toHaveBeenCalledWith(expect.any(String));\n        });\n\n        it('triggers onChange event callback, dispatches correct action and mounts component', async () => {\n            const stripeMockElement: StripeElement = {\n                collapse: jest.fn(),\n                destroy: jest.fn(),\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                update: jest.fn(),\n                on: jest.fn((_, callback) => callback(stripeCustomerEvent(true, true))),\n            };\n\n            const stripeUPEJsMockWithElement = getCustomerStripeUPEJsMock(stripeMockElement);\n\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockResolvedValueOnce(\n                stripeUPEJsMockWithElement,\n            );\n\n            await strategy.initialize(customerInitialization);\n\n            expect(customerInitialization.stripeupe?.onEmailChange).toHaveBeenCalledWith(\n                true,\n                'foo@bar',\n            );\n            expect(customerInitialization.stripeupe?.isLoading).toHaveBeenCalled();\n            expect(stripeMockElement.mount).toHaveBeenCalledWith(expect.any(String));\n        });\n\n        it('triggers onChange event callback and throws error if event data is missing', async () => {\n            const missingAuthEvent = {\n                complete: true,\n                elementType: '',\n                empty: false,\n                value: {\n                    email: 'foo@bar',\n                },\n            } as StripeCustomerEvent;\n\n            const stripeMockElement: StripeElement = {\n                collapse: jest.fn(),\n                destroy: jest.fn(),\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                update: jest.fn(),\n                on: jest.fn((_, callback) => callback(missingAuthEvent)),\n            };\n\n            const stripeUPEJsMockWithElement = getCustomerStripeUPEJsMock(stripeMockElement);\n\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockResolvedValue(\n                stripeUPEJsMockWithElement,\n            );\n\n            await expect(strategy.initialize(customerInitialization)).rejects.toBeInstanceOf(\n                MissingDataError,\n            );\n        });\n\n        it('triggers onChange event callback without email if event is not complete', async () => {\n            const missingCompletionEvent = {\n                authenticated: true,\n                complete: false,\n                elementType: '',\n                empty: false,\n                value: {\n                    email: 'foo@bar',\n                },\n            };\n\n            const stripeMockElement: StripeElement = {\n                collapse: jest.fn(),\n                destroy: jest.fn(),\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                update: jest.fn(),\n                on: jest.fn((_, callback) => callback(missingCompletionEvent)),\n            };\n\n            const stripeUPEJsMockWithElement = getCustomerStripeUPEJsMock(stripeMockElement);\n\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockResolvedValue(\n                stripeUPEJsMockWithElement,\n            );\n\n            await strategy.initialize(customerInitialization);\n\n            expect(customerInitialization.stripeupe?.onEmailChange).toHaveBeenCalledWith(false, '');\n        });\n\n        it('returns an error when methodId is not present', async () => {\n            const promise = strategy.initialize({\n                ...getStripeUPECustomerInitializeOptionsMock(),\n                stripeupe: undefined,\n                methodId: '',\n            });\n\n            await expect(promise).rejects.toBeInstanceOf(InvalidArgumentError);\n        });\n\n        it('returns an error when stripePublishableKey, or clientToken is not present', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getStripeUPEMock(),\n                initializationData: {},\n            });\n\n            const promise = strategy.initialize(customerInitialization);\n\n            await expect(promise).rejects.toBeInstanceOf(MissingDataError);\n        });\n    });\n\n    describe('#signIn()', () => {\n        it('call signInCustomer with specific arguments', async () => {\n            const credentials = { email: 'foo@bar.com', password: 'foobar' };\n            const options = {};\n\n            await strategy.signIn(credentials, options);\n\n            expect(paymentIntegrationService.signInCustomer).toHaveBeenCalledWith(\n                credentials,\n                options,\n            );\n        });\n    });\n\n    describe('#signOut()', () => {\n        it('call signOutCustomer with specific arguments', async () => {\n            const options = {};\n\n            await strategy.signOut(options);\n\n            expect(paymentIntegrationService.signOutCustomer).toHaveBeenCalledWith(options);\n        });\n    });\n\n    describe('#executePaymentMethodCheckout', () => {\n        it('runs continue callback automatically on execute payment method checkout', async () => {\n            const mockCallback = jest.fn();\n\n            await strategy.executePaymentMethodCheckout({\n                continueWithCheckoutCallback: mockCallback,\n            });\n\n            expect(mockCallback.mock.calls).toHaveLength(1);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/stripe-upe-customer-strategy.ts",
    "content": "import {\n    CustomerCredentials,\n    CustomerInitializeOptions,\n    CustomerStrategy,\n    ExecutePaymentMethodCheckoutOptions,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    PaymentIntegrationService,\n    RequestOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    isStripePaymentMethodLike,\n    STRIPE_UPE_CLIENT_API_VERSION,\n    STRIPE_UPE_CLIENT_BETAS,\n    StripeAppearanceOptions,\n    StripeClient,\n    StripeElementEvent,\n    StripeElements,\n    StripeElementType,\n    StripeEventType,\n    StripeFormMode,\n    StripeJsVersion,\n    StripeScriptLoader,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport isStripeAcceleratedCheckoutCustomer from './is-stripe-accelerated-checkout-customer';\nimport { WithStripeUPECustomerInitializeOptions } from './stripeupe-customer-initialize-options';\n\nexport default class StripeUPECustomerStrategy implements CustomerStrategy {\n    private _stripeElements?: StripeElements;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private scriptLoader: StripeScriptLoader,\n    ) {}\n\n    async initialize(\n        options: CustomerInitializeOptions & WithStripeUPECustomerInitializeOptions,\n    ): Promise<void> {\n        let stripeUPEClient: StripeClient;\n\n        if (!options.stripeupe) {\n            throw new InvalidArgumentError(\n                `Unable to proceed because \"options\" argument is not provided.`,\n            );\n        }\n\n        const { container, gatewayId, methodId, onEmailChange, getStyles, isLoading } =\n            options.stripeupe;\n\n        Object.entries(options.stripeupe).forEach(([key, value]) => {\n            if (!value) {\n                throw new InvalidArgumentError(\n                    `Unable to proceed because \"${key}\" argument is not provided.`,\n                );\n            }\n        });\n\n        await this.paymentIntegrationService.loadPaymentMethod(gatewayId, {\n            params: { method: methodId },\n        });\n\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId, gatewayId);\n        const { clientToken } = paymentMethod;\n\n        if (!isStripePaymentMethodLike(paymentMethod) || !clientToken) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n        }\n\n        const { email } = state.getCustomerOrThrow();\n        const paymentProviderCustomer = state.getPaymentProviderCustomerOrThrow();\n        const stripePaymentProviderCustomer = isStripeAcceleratedCheckoutCustomer(\n            paymentProviderCustomer,\n        )\n            ? paymentProviderCustomer\n            : {};\n        const stripeLinkAuthenticationState =\n            stripePaymentProviderCustomer.stripeLinkAuthenticationState;\n\n        if (!email) {\n            let appearance: StripeAppearanceOptions | undefined;\n            const styles = typeof getStyles === 'function' && getStyles();\n\n            if (styles) {\n                appearance = {\n                    variables: {\n                        colorPrimary: styles.fieldInnerShadow,\n                        colorBackground: styles.fieldBackground,\n                        colorText: styles.labelText,\n                        colorDanger: styles.fieldErrorText,\n                        colorTextSecondary: styles.labelText,\n                        colorTextPlaceholder: styles.fieldPlaceholderText,\n                    },\n                    rules: {\n                        '.Input': {\n                            borderColor: styles.fieldBorder,\n                            color: styles.fieldText,\n                            boxShadow: styles.fieldInnerShadow,\n                        },\n                    },\n                };\n            } else {\n                appearance = {};\n            }\n\n            stripeUPEClient = await this.scriptLoader.getStripeClient(\n                paymentMethod.initializationData,\n                state.getCartLocale(),\n                StripeJsVersion.V3,\n                STRIPE_UPE_CLIENT_BETAS,\n                STRIPE_UPE_CLIENT_API_VERSION,\n            );\n\n            this._stripeElements = await this.scriptLoader.getElements(stripeUPEClient, {\n                clientSecret: clientToken,\n                appearance,\n            });\n\n            const { getBillingAddress, getConsignments } =\n                this.paymentIntegrationService.getState();\n            const consignments = getConsignments();\n            const id = consignments?.[0]?.id;\n            const { email: billingEmail } = getBillingAddress() || {};\n            const options = billingEmail\n                ? { defaultValues: { mode: StripeFormMode.SHIPPING, email: billingEmail } }\n                : {};\n            const linkAuthenticationElement =\n                this._stripeElements.getElement(StripeElementType.AUTHENTICATION) ||\n                this._stripeElements.create(StripeElementType.AUTHENTICATION, options);\n\n            linkAuthenticationElement.on(StripeElementEvent.CHANGE, (event: StripeEventType) => {\n                if (!('authenticated' in event)) {\n                    throw new MissingDataError(MissingDataErrorType.MissingCustomer);\n                }\n\n                this.paymentIntegrationService.updatePaymentProviderCustomer({\n                    stripeLinkAuthenticationState: event.authenticated,\n                });\n\n                if (event.complete) {\n                    onEmailChange(event.authenticated, event.value.email);\n                } else {\n                    onEmailChange(false, '');\n                }\n\n                if (isLoading) {\n                    isLoading(false);\n                }\n\n                if (stripeLinkAuthenticationState === undefined && event.authenticated && id) {\n                    this.paymentIntegrationService.deleteConsignment(id);\n                }\n            });\n            linkAuthenticationElement.mount(`#${container}`);\n        }\n    }\n\n    deinitialize(): Promise<void> {\n        this._stripeElements?.getElement(StripeElementType.AUTHENTICATION)?.unmount();\n\n        return Promise.resolve();\n    }\n\n    signIn(credentials: CustomerCredentials, options?: RequestOptions): Promise<void> {\n        this.paymentIntegrationService.signInCustomer(credentials, options);\n\n        return Promise.resolve();\n    }\n\n    signOut(options?: RequestOptions): Promise<void> {\n        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"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/stripe-upe-customer.mock.ts",
    "content": "import { CustomerInitializeOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { StripeClient, StripeElement } from '@bigcommerce/checkout-sdk/stripe-utils';\n\nexport interface StripeUpeCustomerInitializeOptions extends CustomerInitializeOptions {\n    stripeupe: {\n        container: string;\n        methodId: string;\n        gatewayId: string;\n        onEmailChange(): void;\n        isLoading(): void;\n        getStyles(): void;\n    };\n}\n\nexport function getCustomerStripeUPEJsMock(returnElement?: StripeElement): StripeClient {\n    return {\n        elements: jest.fn(() => ({\n            create: jest.fn(() => ({\n                collapse: jest.fn(),\n                mount: jest.fn(),\n                unmount: jest.fn(),\n                on: jest.fn(),\n                update: jest.fn(),\n                destroy: jest.fn(),\n            })),\n            getElement: jest.fn().mockReturnValue(returnElement),\n            update: jest.fn(),\n            fetchUpdates: jest.fn(),\n        })),\n        confirmPayment: jest.fn(),\n        confirmCardPayment: jest.fn(),\n        retrievePaymentIntent: jest.fn(),\n        initCheckout: jest.fn(),\n    };\n}\n\nexport function getStripeUPECustomerInitializeOptionsMock(): StripeUpeCustomerInitializeOptions {\n    return {\n        methodId: 'stripeupe',\n        stripeupe: {\n            container: 'stripeupeLink',\n            methodId: 'card',\n            gatewayId: 'stripeupe',\n            onEmailChange: jest.fn(),\n            isLoading: jest.fn(),\n            getStyles: jest.fn(),\n        },\n    };\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/stripe-upe-initialize-options.ts",
    "content": "import {\n    StripeAppearanceValues,\n    StripeElementUpdateOptions,\n    StripePaymentInitializeOptions,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\n/**\n * A set of options that are required to initialize the Stripe payment method.\n *\n * Once Stripe payment is initialized, credit card form fields, provided by the\n * payment provider as iframes, will be inserted into the current page. These\n * options provide a location and styling for each of the form fields.\n *\n * ```html\n * <!-- This is where the credit card component will be inserted -->\n * <div id=\"container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'stripeupe',\n *     stripeupe {\n *         containerId: 'container',\n *     },\n * });\n * ```\n */\n\nexport default interface StripeUPEPaymentInitializeOptions extends StripePaymentInitializeOptions {\n    /**\n     * The location to insert the credit card number form field.\n     */\n    containerId: string;\n\n    /**\n     * Checkout styles from store theme\n     */\n    style?: Record<string, StripeAppearanceValues>;\n\n    onError?(error?: Error): void;\n\n    render(): void;\n\n    initStripeElementUpdateTrigger?(\n        updateTriggerFn: (payload: StripeElementUpdateOptions) => void,\n    ): void;\n}\n\nexport interface WithStripeUPEPaymentInitializeOptions {\n    stripeupe?: StripeUPEPaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/stripe-upe-payment-strategy.spec.ts",
    "content": "import { createScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    Checkout,\n    InvalidArgumentError,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodFailedError,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getCheckout,\n    getCustomer,\n    getErrorPaymentResponseBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\nimport {\n    getConfirmPaymentResponse,\n    getFailingStripeJsMock,\n    getRetrievePaymentIntentResponseSucceeded,\n    getRetrievePaymentIntentResponseWithError,\n    getStripeIntegrationServiceMock,\n    getStripeJsMock,\n    STRIPE_UPE_CLIENT_API_VERSION,\n    STRIPE_UPE_CLIENT_BETAS,\n    StripeClient,\n    StripeElementsOptions,\n    StripeElementType,\n    StripeElementUpdateOptions,\n    StripeEventType,\n    StripeIntegrationService,\n    StripeJsVersion,\n    StripePaymentMethodType,\n    StripeScriptLoader,\n    StripeStringConstants,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport { WithStripeUPEPaymentInitializeOptions } from './stripe-upe-initialize-options';\nimport StripeUPEPaymentStrategy from './stripe-upe-payment-strategy';\nimport {\n    getStripeUPEInitializeOptionsMock,\n    getStripeUPEMock,\n    getStripeUPEOrderRequestBodyMock,\n    getStripeUPEOrderRequestBodyVaultMock,\n} from './stripe-upe.mock';\n\ndescribe('StripeUPEPaymentStrategy', () => {\n    let checkoutMock: Checkout;\n    let strategy: StripeUPEPaymentStrategy;\n    let stripeScriptLoader: StripeScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n    let stripeUPEIntegrationService: StripeIntegrationService;\n    const stripePaymentMethod = getStripeUPEMock();\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        const scriptLoader = createScriptLoader();\n\n        stripeScriptLoader = new StripeScriptLoader(scriptLoader);\n        checkoutMock = getCheckout();\n\n        jest.useFakeTimers();\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n            checkoutMock,\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getCartLocale').mockReturnValue('en');\n\n        jest.spyOn(paymentIntegrationService, 'updateBillingAddress').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'subscribe');\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getCart').mockReturnValue(getCart());\n\n        stripeUPEIntegrationService = new StripeIntegrationService(\n            paymentIntegrationService,\n            stripeScriptLoader,\n        );\n        strategy = new StripeUPEPaymentStrategy(\n            paymentIntegrationService,\n            stripeScriptLoader,\n            stripeUPEIntegrationService,\n        );\n\n        const mockElement = document.createElement('div');\n\n        jest.spyOn(document, 'getElementById').mockReturnValue(mockElement);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        let options: PaymentInitializeOptions & WithStripeUPEPaymentInitializeOptions;\n        const elementsOptions: StripeElementsOptions = { clientSecret: 'clientToken' };\n        let stripeUPEJsMock: StripeClient;\n        const testColor = '#123456';\n        const style = {\n            labelText: testColor,\n            fieldText: testColor,\n            fieldPlaceholderText: testColor,\n            fieldErrorText: testColor,\n            fieldBackground: testColor,\n            fieldInnerShadow: testColor,\n            fieldBorder: testColor,\n        };\n\n        const getPaymentElementActionsMock = (\n            isElementCreated = true,\n            onCallbackPayload = {} as StripeEventType,\n        ) => {\n            const updateMock = jest.fn();\n            const stripePaymentElementMock = {\n                mount: jest.fn(),\n                collapse: jest.fn(),\n                unmount: jest.fn(),\n                on: (_: string, callback: (event: StripeEventType) => void) =>\n                    callback(onCallbackPayload),\n                update: updateMock,\n                destroy: jest.fn(),\n            };\n            const createElementMock = jest.fn(() => stripePaymentElementMock);\n            const getElementMock = jest.fn(() =>\n                isElementCreated ? stripePaymentElementMock : null,\n            );\n            const stripeElementsMock = {\n                create: createElementMock,\n                getElement: getElementMock,\n                update: jest.fn(),\n                fetchUpdates: jest.fn(),\n            };\n\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                elements: jest.fn(() => stripeElementsMock),\n            };\n\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockReturnValue(\n                Promise.resolve(stripeUPEJsMock),\n            );\n            jest.spyOn(stripeScriptLoader, 'getElements').mockReturnValue(\n                Promise.resolve(stripeElementsMock),\n            );\n\n            return {\n                updateMock,\n                createElementMock,\n            };\n        };\n\n        beforeEach(() => {\n            stripeUPEJsMock = getStripeJsMock();\n            options = getStripeUPEInitializeOptionsMock(StripePaymentMethodType.CreditCard, style);\n\n            const { create, getElement, update, fetchUpdates } =\n                stripeUPEJsMock.elements(elementsOptions);\n\n            stripeUPEJsMock.elements = jest\n                .fn()\n                .mockReturnValue({ create, getElement, update, fetchUpdates });\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockReturnValueOnce(\n                Promise.resolve(stripeUPEJsMock),\n            );\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getStripeUPEMock());\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('loads a single instance of StripeUPEClient and StripeElements including styles', async () => {\n            await strategy.initialize(options);\n            await strategy.initialize(options);\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledWith(\n                getStripeUPEMock().initializationData,\n                'en',\n                StripeJsVersion.V3,\n                STRIPE_UPE_CLIENT_BETAS,\n                STRIPE_UPE_CLIENT_API_VERSION,\n            );\n\n            expect(stripeUPEJsMock.elements).toHaveBeenNthCalledWith(1, {\n                locale: 'en',\n                clientSecret: 'clientToken',\n                appearance: {\n                    rules: {\n                        '.Input': {\n                            borderColor: testColor,\n                            boxShadow: testColor,\n                            color: testColor,\n                        },\n                    },\n                    variables: {\n                        colorBackground: testColor,\n                        colorDanger: testColor,\n                        colorIcon: testColor,\n                        colorPrimary: testColor,\n                        colorText: testColor,\n                        colorTextPlaceholder: testColor,\n                        colorTextSecondary: testColor,\n                    },\n                },\n            });\n        });\n\n        it('loads stripeUPE script', async () => {\n            await strategy.initialize(options);\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalled();\n        });\n\n        it('loads subscribe once', async () => {\n            await strategy.initialize(options);\n\n            expect(paymentIntegrationService.subscribe).toHaveBeenCalledTimes(1);\n        });\n\n        it('does not load stripeUPE if initialization options are not provided', async () => {\n            delete options.stripeupe;\n\n            const promise = strategy.initialize(options);\n\n            await expect(promise).rejects.toThrow(NotInitializedError);\n        });\n\n        it('fails to load stripeUPE', () => {\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockRejectedValue(undefined);\n\n            expect(stripeUPEJsMock.elements).not.toHaveBeenCalled();\n        });\n\n        it('does not load stripeUPE if gatewayId is not provided', async () => {\n            delete options.gatewayId;\n\n            const promise = strategy.initialize(options);\n\n            await expect(promise).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('should enable Link by initialization data option', async () => {\n            const callbackPayload = {\n                value: {\n                    type: StripePaymentMethodType.CreditCard,\n                },\n            } as StripeEventType;\n\n            const { createElementMock } = getPaymentElementActionsMock(false, callbackPayload);\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...stripePaymentMethod,\n                initializationData: {\n                    ...stripePaymentMethod.initializationData,\n                    enableLink: true,\n                },\n            });\n\n            await strategy.initialize(options);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(createElementMock).toHaveBeenCalledWith(StripeElementType.PAYMENT, {\n                fields: {\n                    billingDetails: {\n                        address: {\n                            city: 'never',\n                            country: 'never',\n                            postalCode: 'never',\n                        },\n                        email: 'never',\n                    },\n                },\n                terms: {\n                    card: 'auto',\n                },\n                wallets: {\n                    applePay: 'never',\n                    googlePay: 'never',\n                    link: 'auto',\n                },\n            });\n        });\n\n        it('should disable Link by initialization data option', async () => {\n            const callbackPayload = {\n                value: {\n                    type: StripePaymentMethodType.CreditCard,\n                },\n            } as StripeEventType;\n\n            const { createElementMock } = getPaymentElementActionsMock(false, callbackPayload);\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...stripePaymentMethod,\n                initializationData: {\n                    ...stripePaymentMethod.initializationData,\n                    enableLink: false,\n                },\n            });\n\n            await strategy.initialize(options);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(createElementMock).toHaveBeenCalledWith(StripeElementType.PAYMENT, {\n                fields: {\n                    billingDetails: {\n                        address: {\n                            city: 'never',\n                            country: 'never',\n                            postalCode: 'never',\n                        },\n                        email: 'never',\n                    },\n                },\n                terms: {\n                    card: 'auto',\n                },\n                wallets: {\n                    applePay: 'never',\n                    googlePay: 'never',\n                    link: 'never',\n                },\n            });\n        });\n\n        describe('mounts single payment element', () => {\n            beforeEach(() => {\n                const elements = stripeUPEJsMock.elements(elementsOptions);\n\n                elements.create(StripeElementType.PAYMENT);\n                jest.spyOn(stripeUPEJsMock, 'elements').mockReturnValue(elements);\n            });\n\n            afterEach(() => {\n                jest.clearAllMocks();\n            });\n\n            it('mounts a previously created stripe element', async () => {\n                const { create: getElement, getElement: create } =\n                    stripeUPEJsMock.elements(elementsOptions);\n\n                stripeUPEJsMock.elements = jest.fn().mockReturnValue({ create, getElement });\n\n                jest.spyOn(stripeScriptLoader, 'getStripeClient').mockReturnValue(\n                    Promise.resolve(stripeUPEJsMock),\n                );\n\n                await strategy.initialize(options);\n\n                expect(getElement).toHaveBeenCalledWith('payment');\n                expect(create).not.toHaveBeenCalled();\n            });\n\n            it('fails mounting a stripe payment element', () => {\n                stripeUPEJsMock = getFailingStripeJsMock();\n\n                const { create, getElement } = stripeUPEJsMock.elements(elementsOptions);\n\n                stripeUPEJsMock.elements = jest.fn().mockReturnValue({ create, getElement });\n\n                const { mount, unmount } = create(StripeElementType.PAYMENT);\n\n                stripeUPEJsMock.elements(elementsOptions).create = jest\n                    .fn()\n                    .mockReturnValue({ mount, unmount });\n\n                jest.spyOn(stripeScriptLoader, 'getStripeClient').mockReturnValue(\n                    Promise.resolve(stripeUPEJsMock),\n                );\n\n                expect(mount).not.toHaveBeenCalled();\n            });\n\n            it('fails mounting a stripe payment element if container not exist', async () => {\n                const mountMock = jest.fn();\n                const { getElement } = stripeUPEJsMock.elements(elementsOptions);\n                const createMock = jest.fn().mockReturnValue({ mount: mountMock });\n\n                jest.spyOn(document, 'getElementById').mockReturnValue(null);\n\n                stripeUPEJsMock.elements = jest\n                    .fn()\n                    .mockReturnValue({ create: createMock, getElement });\n\n                jest.spyOn(stripeScriptLoader, 'getStripeClient').mockReturnValue(\n                    Promise.resolve(stripeUPEJsMock),\n                );\n\n                await strategy.initialize(options);\n\n                expect(mountMock).not.toHaveBeenCalled();\n            });\n        });\n\n        describe('Stripe element events', () => {\n            it('Should not update Stripe Link auth state if Link already has been authenticated', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentProviderCustomerOrThrow',\n                ).mockReturnValue({ stripeLinkAuthenticationState: true });\n\n                const updatePaymentProviderCustomerMock = jest.spyOn(\n                    paymentIntegrationService,\n                    'updatePaymentProviderCustomer',\n                );\n                const callbackPayload = {\n                    value: {\n                        type: StripePaymentMethodType.Link,\n                    },\n                } as StripeEventType;\n\n                getPaymentElementActionsMock(true, callbackPayload);\n\n                await strategy.initialize(options);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(updatePaymentProviderCustomerMock).not.toHaveBeenCalled();\n            });\n\n            it('Should not update Stripe Link auth state if not Link element was rendered', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentProviderCustomerOrThrow',\n                ).mockReturnValue({});\n\n                const updatePaymentProviderCustomerMock = jest.spyOn(\n                    paymentIntegrationService,\n                    'updatePaymentProviderCustomer',\n                );\n                const callbackPayload = {\n                    value: {\n                        type: StripePaymentMethodType.CreditCard,\n                    },\n                } as StripeEventType;\n\n                getPaymentElementActionsMock(true, callbackPayload);\n\n                await strategy.initialize(options);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(updatePaymentProviderCustomerMock).not.toHaveBeenCalled();\n            });\n\n            it('Should update Stripe Link auth state if Link element was rendered', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentProviderCustomerOrThrow',\n                ).mockReturnValue({});\n\n                const updatePaymentProviderCustomerMock = jest.spyOn(\n                    paymentIntegrationService,\n                    'updatePaymentProviderCustomer',\n                );\n                const callbackPayload = {\n                    value: {\n                        type: StripePaymentMethodType.Link,\n                    },\n                } as StripeEventType;\n\n                getPaymentElementActionsMock(true, callbackPayload);\n\n                await strategy.initialize(options);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(updatePaymentProviderCustomerMock).toHaveBeenCalledWith({\n                    stripeLinkAuthenticationState: true,\n                });\n            });\n        });\n\n        describe('Update stripe payment element', () => {\n            let updateTriggerFn: (payload: StripeElementUpdateOptions) => void = jest.fn();\n\n            beforeEach(() => {\n                options.stripeupe!.initStripeElementUpdateTrigger = (stripeElementUpdateFn) => {\n                    updateTriggerFn = stripeElementUpdateFn;\n                };\n            });\n\n            it('should show terms text by default if update trigger does not set', async () => {\n                options.stripeupe!.initStripeElementUpdateTrigger = undefined;\n\n                const { createElementMock } = getPaymentElementActionsMock(false);\n\n                await strategy.initialize(options);\n                await new Promise((resolve) => process.nextTick(resolve));\n\n                expect(createElementMock).toHaveBeenCalledWith(\n                    'payment',\n                    expect.objectContaining({\n                        terms: {\n                            card: StripeStringConstants.AUTO,\n                        },\n                    }),\n                );\n            });\n\n            it('should update stripe element and show terms text', async () => {\n                const { updateMock } = getPaymentElementActionsMock();\n\n                await strategy.initialize(options);\n                await new Promise((resolve) => process.nextTick(resolve));\n                updateTriggerFn({ shouldShowTerms: true });\n\n                expect(updateMock).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        terms: {\n                            card: StripeStringConstants.AUTO,\n                        },\n                    }),\n                );\n            });\n\n            it('should update stripe element and should not show terms text', async () => {\n                const { updateMock } = getPaymentElementActionsMock();\n\n                await strategy.initialize(options);\n                await new Promise((resolve) => process.nextTick(resolve));\n                updateTriggerFn({ shouldShowTerms: false });\n\n                expect(updateMock).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        terms: {\n                            card: StripeStringConstants.NEVER,\n                        },\n                    }),\n                );\n            });\n\n            it('should not update element without trigger function initialization', async () => {\n                options.stripeupe!.initStripeElementUpdateTrigger = undefined;\n\n                const { updateMock } = getPaymentElementActionsMock();\n\n                await strategy.initialize(options);\n                await new Promise((resolve) => process.nextTick(resolve));\n                updateTriggerFn({ shouldShowTerms: false });\n\n                expect(updateMock).not.toHaveBeenCalled();\n            });\n\n            it('should not update if payment element not exist', async () => {\n                const { updateMock } = getPaymentElementActionsMock(false);\n\n                await strategy.initialize(options);\n                await new Promise((resolve) => process.nextTick(resolve));\n                updateTriggerFn({ shouldShowTerms: false });\n\n                expect(updateMock).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('#execute()', () => {\n        let stripeUPEJsMock: StripeClient;\n        let options: PaymentInitializeOptions;\n        let strategy: StripeUPEPaymentStrategy;\n\n        beforeEach(async () => {\n            stripeUPEJsMock = getStripeJsMock();\n            options = getStripeUPEInitializeOptionsMock();\n            stripeUPEIntegrationService = getStripeIntegrationServiceMock();\n\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockReturnValueOnce(\n                Promise.resolve(stripeUPEJsMock),\n            );\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getStripeUPEMock());\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue(\n                getCustomer(),\n            );\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getBillingAddressOrThrow',\n            ).mockReturnValue(getBillingAddress());\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({});\n\n            strategy = new StripeUPEPaymentStrategy(\n                paymentIntegrationService,\n                stripeScriptLoader,\n                stripeUPEIntegrationService,\n            );\n\n            await strategy.initialize(options);\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('throws error when no payment payload', async () => {\n            await expect(strategy.execute({ payment: undefined })).rejects.toThrow(\n                PaymentArgumentInvalidError,\n            );\n        });\n\n        it('throws error when no paymentData in payload', async () => {\n            await expect(strategy.execute({ payment: { methodId: 'stripeupe' } })).rejects.toThrow(\n                PaymentArgumentInvalidError,\n            );\n        });\n\n        it('throws error if ctripe client not initialized', async () => {\n            await strategy.deinitialize();\n\n            await expect(strategy.execute(getStripeUPEOrderRequestBodyVaultMock())).rejects.toThrow(\n                NotInitializedError,\n            );\n        });\n\n        it('should use store credits', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getCheckoutOrThrow',\n            ).mockReturnValueOnce({\n                ...getCheckout(),\n                isStoreCreditApplied: true,\n            });\n\n            await strategy.execute(getStripeUPEOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.applyStoreCredit).toHaveBeenCalledWith(true);\n        });\n\n        it('skip PI update if no gatewayId', async () => {\n            const executePayloadMock = getStripeUPEOrderRequestBodyMock();\n\n            await strategy.execute({\n                ...executePayloadMock,\n                payment: {\n                    ...executePayloadMock.payment,\n                    methodId: 'card',\n                    gatewayId: undefined,\n                },\n            });\n\n            expect(stripeUPEIntegrationService.updateStripePaymentIntent).not.toHaveBeenCalled();\n        });\n\n        it('should update PI', () => {\n            strategy.execute(getStripeUPEOrderRequestBodyMock());\n\n            expect(stripeUPEIntegrationService.updateStripePaymentIntent).toHaveBeenCalled();\n        });\n\n        it('should not update billing address if not Stripe Link', async () => {\n            await strategy.execute(getStripeUPEOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.updateBillingAddress).not.toHaveBeenCalled();\n        });\n\n        it('should not update billing address if Stripe Link flow and email address provided', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({ stripeLinkAuthenticationState: false });\n\n            await strategy.execute(getStripeUPEOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.updateBillingAddress).not.toHaveBeenCalled();\n        });\n\n        it('should update billing address if Stripe Link flow but email is not provided', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentProviderCustomerOrThrow',\n            ).mockReturnValue({ stripeLinkAuthenticationState: true });\n            jest.spyOn(paymentIntegrationService.getState(), 'getCustomerOrThrow').mockReturnValue({\n                ...getCustomer(),\n                email: '',\n            });\n\n            await strategy.execute(getStripeUPEOrderRequestBodyMock());\n\n            expect(paymentIntegrationService.updateBillingAddress).toHaveBeenCalledWith(\n                getBillingAddress(),\n            );\n        });\n\n        describe('vaulted instrument', () => {\n            const getThreeDSecureRequiredErrorResponse = (\n                code = 'three_d_secure_required',\n            ): RequestError =>\n                new RequestError(\n                    getResponse({\n                        ...getErrorPaymentResponseBody(),\n                        errors: [{ code }],\n                        three_ds_result: {\n                            token: 'token',\n                        },\n                    }),\n                );\n\n            afterEach(() => {\n                jest.clearAllMocks();\n            });\n\n            it('should skip vaulted flow if it is not a vaulted instrument', async () => {\n                await strategy.execute(getStripeUPEOrderRequestBodyMock());\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'card',\n                        paymentData: {\n                            formattedPayload: expect.not.objectContaining({\n                                bigpay_token: {\n                                    token: 'token',\n                                },\n                            }),\n                        },\n                    }),\n                );\n            });\n\n            it('should execute vaulted flow', async () => {\n                await strategy.execute(\n                    getStripeUPEOrderRequestBodyVaultMock(StripePaymentMethodType.CreditCard, true),\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'card',\n                        paymentData: {\n                            formattedPayload: {\n                                cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                                bigpay_token: {\n                                    token: 'token',\n                                },\n                                confirm: false,\n                                client_token: 'clientToken',\n                                set_as_default_stored_instrument: true,\n                            },\n                        },\n                    }),\n                );\n            });\n\n            it('should execute vaulted flow without cart data', async () => {\n                jest.spyOn(paymentIntegrationService.getState(), 'getCart').mockReturnValue(\n                    undefined,\n                );\n                await strategy.execute(\n                    getStripeUPEOrderRequestBodyVaultMock(StripePaymentMethodType.CreditCard, true),\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'card',\n                        paymentData: {\n                            formattedPayload: {\n                                cart_id: undefined,\n                                bigpay_token: {\n                                    token: 'token',\n                                },\n                                confirm: false,\n                                client_token: 'clientToken',\n                                set_as_default_stored_instrument: true,\n                            },\n                        },\n                    }),\n                );\n            });\n\n            it('payment submit throw additional action error but no method id provided', async () => {\n                const responseErrorMock = getThreeDSecureRequiredErrorResponse();\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    responseErrorMock,\n                );\n\n                const defaultPayloadMock = getStripeUPEOrderRequestBodyVaultMock();\n                const executePayloadMock = {\n                    ...defaultPayloadMock,\n                    payment: {\n                        ...defaultPayloadMock.payment,\n                        methodId: undefined,\n                    },\n                } as unknown as OrderRequestBody;\n\n                await expect(strategy.execute(executePayloadMock)).rejects.toThrow(\n                    responseErrorMock,\n                );\n            });\n\n            it('payment submit throw non request error', async () => {\n                const genericError = new Error('not request error');\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    genericError,\n                );\n\n                await expect(\n                    strategy.execute(getStripeUPEOrderRequestBodyVaultMock()),\n                ).rejects.toThrow(genericError);\n            });\n\n            it('payment submit throw non additional action error', async () => {\n                const responseErrorMock =\n                    getThreeDSecureRequiredErrorResponse('any_other_error_code');\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    responseErrorMock,\n                );\n\n                await expect(\n                    strategy.execute(getStripeUPEOrderRequestBodyVaultMock()),\n                ).rejects.toThrow(responseErrorMock);\n            });\n\n            it('throw error if stripe client was not initialized', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    async () => {\n                        await strategy.deinitialize();\n\n                        return Promise.reject(getThreeDSecureRequiredErrorResponse());\n                    },\n                );\n\n                await expect(\n                    strategy.execute(getStripeUPEOrderRequestBodyVaultMock()),\n                ).rejects.toThrow(NotInitializedError);\n            });\n\n            it('throw error if stripe element was not initialized', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    async () => {\n                        // eslint-disable-next-line @typescript-eslint/dot-notation, dot-notation\n                        strategy['_stripeElements'] = undefined;\n\n                        return Promise.reject(getThreeDSecureRequiredErrorResponse());\n                    },\n                );\n\n                await expect(\n                    strategy.execute(getStripeUPEOrderRequestBodyVaultMock()),\n                ).rejects.toThrow(NotInitializedError);\n            });\n\n            it('successfully confirmed by stripe', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getThreeDSecureRequiredErrorResponse(),\n                );\n\n                stripeUPEJsMock.confirmCardPayment = jest\n                    .fn()\n                    .mockResolvedValue(getConfirmPaymentResponse());\n\n                await strategy.execute(getStripeUPEOrderRequestBodyVaultMock());\n\n                expect(stripeUPEJsMock.confirmCardPayment).toHaveBeenCalled();\n                expect(stripeUPEJsMock.retrievePaymentIntent).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'card',\n                        paymentData: {\n                            formattedPayload: {\n                                cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                                bigpay_token: {\n                                    token: 'token',\n                                },\n                                confirm: false,\n                                client_token: 'clientToken',\n                                set_as_default_stored_instrument: false,\n                            },\n                        },\n                    }),\n                );\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'card',\n                        paymentData: {\n                            formattedPayload: {\n                                cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                                confirm: false,\n                                credit_card_token: { token: 'pi_1234' },\n                                vault_payment_instrument: false,\n                                set_as_default_stored_instrument: false,\n                            },\n                        },\n                    }),\n                );\n            });\n\n            it('stripe confirmation throws error', async () => {\n                const throwStripeErrorMock = new Error('stripe error');\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getThreeDSecureRequiredErrorResponse(),\n                );\n                jest.spyOn(stripeUPEIntegrationService, 'throwStripeError').mockImplementation(\n                    () => {\n                        throw throwStripeErrorMock;\n                    },\n                );\n\n                stripeUPEJsMock.confirmCardPayment = jest\n                    .fn()\n                    .mockRejectedValue(new Error('stripe confirmation error'));\n                stripeUPEJsMock.retrievePaymentIntent = jest\n                    .fn()\n                    .mockResolvedValue(getRetrievePaymentIntentResponseWithError());\n\n                await expect(\n                    strategy.execute(getStripeUPEOrderRequestBodyVaultMock()),\n                ).rejects.toThrow(throwStripeErrorMock);\n\n                expect(stripeUPEJsMock.confirmCardPayment).toHaveBeenCalled();\n                expect(stripeUPEJsMock.retrievePaymentIntent).toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n            });\n\n            it('stripe confirmation returns undefined', async () => {\n                const throwStripeErrorMock = new Error('stripe error');\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getThreeDSecureRequiredErrorResponse(),\n                );\n                jest.spyOn(stripeUPEIntegrationService, 'throwStripeError').mockImplementation(\n                    () => {\n                        throw throwStripeErrorMock;\n                    },\n                );\n\n                stripeUPEJsMock.confirmCardPayment = jest.fn().mockResolvedValue(undefined);\n\n                await expect(\n                    strategy.execute(getStripeUPEOrderRequestBodyVaultMock()),\n                ).rejects.toBeInstanceOf(RequestError);\n\n                expect(stripeUPEJsMock.confirmCardPayment).toHaveBeenCalled();\n                expect(stripeUPEJsMock.retrievePaymentIntent).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n            });\n\n            it('stripe confirmation returns response without PI id', async () => {\n                const throwStripeErrorMock = new Error('stripe error');\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getThreeDSecureRequiredErrorResponse(),\n                );\n                jest.spyOn(stripeUPEIntegrationService, 'throwStripeError').mockImplementation(\n                    () => {\n                        throw throwStripeErrorMock;\n                    },\n                );\n\n                const defaultPIMock = getRetrievePaymentIntentResponseWithError();\n                const stripeResponseWithoutPIMock = {\n                    ...defaultPIMock,\n                    paymentIntent: undefined,\n                };\n\n                stripeUPEJsMock.confirmCardPayment = jest\n                    .fn()\n                    .mockResolvedValue(stripeResponseWithoutPIMock);\n\n                await expect(\n                    strategy.execute(getStripeUPEOrderRequestBodyVaultMock()),\n                ).rejects.toThrow(throwStripeErrorMock);\n\n                expect(stripeUPEJsMock.confirmCardPayment).toHaveBeenCalled();\n                expect(stripeUPEJsMock.retrievePaymentIntent).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n            });\n\n            it('sends second payment submit request is stripe all stripe requests failed', async () => {\n                const throwStripeErrorMock = new Error('stripe error');\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getThreeDSecureRequiredErrorResponse(),\n                );\n                jest.spyOn(stripeUPEIntegrationService, 'throwStripeError').mockImplementation(\n                    () => {\n                        throw throwStripeErrorMock;\n                    },\n                );\n\n                stripeUPEJsMock.confirmCardPayment = jest\n                    .fn()\n                    .mockRejectedValue(new Error('stripe confirmation error'));\n                stripeUPEJsMock.retrievePaymentIntent = jest\n                    .fn()\n                    .mockRejectedValue(new Error('stripe confirmation error'));\n\n                await strategy.execute(getStripeUPEOrderRequestBodyVaultMock());\n\n                expect(stripeUPEJsMock.confirmCardPayment).toHaveBeenCalled();\n                expect(stripeUPEJsMock.retrievePaymentIntent).toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'card',\n                        paymentData: {\n                            formattedPayload: {\n                                cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                                bigpay_token: {\n                                    token: 'token',\n                                },\n                                confirm: false,\n                                client_token: 'clientToken',\n                                set_as_default_stored_instrument: false,\n                            },\n                        },\n                    }),\n                );\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                    expect.objectContaining({\n                        methodId: 'card',\n                        paymentData: {\n                            formattedPayload: {\n                                cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                                confirm: false,\n                                credit_card_token: { token: 'token' },\n                                vault_payment_instrument: false,\n                                set_as_default_stored_instrument: false,\n                            },\n                        },\n                    }),\n                );\n            });\n        });\n\n        describe('stripe confirmation flow', () => {\n            const getAdditionalActionErrorResponse = (\n                token = 'additionalActionToken',\n                redirect_url = 'redirect.url',\n            ): RequestError =>\n                new RequestError(\n                    getResponse({\n                        ...getErrorPaymentResponseBody(),\n                        errors: [{ code: 'additional_action_required' }],\n                        additional_action_required: {\n                            data: {\n                                token,\n                                redirect_url,\n                            },\n                        },\n                    }),\n                );\n\n            beforeEach(() => {\n                jest.spyOn(stripeUPEIntegrationService, 'isAdditionalActionError').mockReturnValue(\n                    true,\n                );\n            });\n\n            it('successfully payed on first payments request', async () => {\n                await strategy.execute(getStripeUPEOrderRequestBodyMock());\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalledTimes(1);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    methodId: 'card',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            confirm: false,\n                            credit_card_token: { token: 'clientToken' },\n                            vault_payment_instrument: false,\n                            set_as_default_stored_instrument: false,\n                        },\n                    },\n                });\n            });\n\n            it('successfully payed on first payments request without client token', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({\n                    ...stripePaymentMethod,\n                    clientToken: undefined,\n                });\n\n                await strategy.execute(getStripeUPEOrderRequestBodyMock());\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    methodId: 'card',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            confirm: false,\n                            credit_card_token: { token: '' },\n                            vault_payment_instrument: false,\n                            set_as_default_stored_instrument: false,\n                        },\n                    },\n                });\n            });\n\n            it('payment submit throw non request error', async () => {\n                const genericError = new Error('not request error');\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    genericError,\n                );\n\n                await expect(strategy.execute(getStripeUPEOrderRequestBodyMock())).rejects.toThrow(\n                    genericError,\n                );\n            });\n\n            it('payment submit throw non additional action error', async () => {\n                jest.spyOn(stripeUPEIntegrationService, 'isAdditionalActionError').mockReturnValue(\n                    false,\n                );\n\n                const responseErrorMock = new RequestError(\n                    getResponse({\n                        ...getErrorPaymentResponseBody(),\n                        additional_action_required: {\n                            errors: [{ code: 'any_other_error_code' }],\n                            data: {\n                                token: 'additionalActionToken',\n                            },\n                        },\n                    }),\n                );\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    responseErrorMock,\n                );\n\n                await expect(strategy.execute(getStripeUPEOrderRequestBodyMock())).rejects.toThrow(\n                    responseErrorMock,\n                );\n            });\n\n            it('throw error if stripe client was not initialized', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    async () => {\n                        await strategy.deinitialize();\n\n                        return Promise.reject(getAdditionalActionErrorResponse());\n                    },\n                );\n\n                await expect(strategy.execute(getStripeUPEOrderRequestBodyMock())).rejects.toThrow(\n                    NotInitializedError,\n                );\n            });\n\n            it('throw error if stripe element was not initialized', async () => {\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(\n                    async () => {\n                        // eslint-disable-next-line @typescript-eslint/dot-notation, dot-notation\n                        strategy['_stripeElements'] = undefined;\n\n                        return Promise.reject(getAdditionalActionErrorResponse());\n                    },\n                );\n\n                await expect(strategy.execute(getStripeUPEOrderRequestBodyMock())).rejects.toThrow(\n                    NotInitializedError,\n                );\n            });\n\n            it('stripe confirmation throws error', async () => {\n                stripeUPEJsMock.confirmPayment = jest\n                    .fn()\n                    .mockRejectedValue(new Error('stripe confirmation error'));\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getAdditionalActionErrorResponse(),\n                );\n\n                await expect(strategy.execute(getStripeUPEOrderRequestBodyMock())).rejects.toThrow(\n                    'stripe confirmation error',\n                );\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n            });\n\n            it('stripe confirms payment returns stripe error', async () => {\n                stripeUPEJsMock.confirmPayment = jest\n                    .fn()\n                    .mockResolvedValue(getRetrievePaymentIntentResponseWithError());\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getAdditionalActionErrorResponse(),\n                );\n\n                await expect(strategy.execute(getStripeUPEOrderRequestBodyMock())).rejects.toThrow(\n                    'throw stripe error',\n                );\n                expect(stripeUPEIntegrationService.throwStripeError).toHaveBeenCalled();\n            });\n\n            it('stripe confirms payment returns nothing', async () => {\n                stripeUPEJsMock.confirmPayment = jest.fn().mockResolvedValue(undefined);\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getAdditionalActionErrorResponse(),\n                );\n\n                await expect(strategy.execute(getStripeUPEOrderRequestBodyMock())).rejects.toThrow(\n                    TypeError,\n                );\n            });\n\n            it('stripe confirms payment returns no PI ID', async () => {\n                stripeUPEJsMock.confirmPayment = jest.fn().mockResolvedValue({});\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getAdditionalActionErrorResponse(),\n                );\n\n                await expect(strategy.execute(getStripeUPEOrderRequestBodyMock())).rejects.toThrow(\n                    'throw stripe error',\n                );\n                expect(stripeUPEIntegrationService.throwStripeError).toHaveBeenCalled();\n            });\n\n            it('stripe confirms payment successfully', async () => {\n                stripeUPEJsMock.confirmPayment = jest\n                    .fn()\n                    .mockResolvedValue(getConfirmPaymentResponse());\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getAdditionalActionErrorResponse(),\n                );\n\n                await strategy.execute(getStripeUPEOrderRequestBodyMock());\n\n                expect(stripeUPEIntegrationService.mapStripePaymentData).toHaveBeenCalledWith(\n                    expect.any(Object),\n                    'redirect.url',\n                    true,\n                );\n                expect(stripeUPEJsMock.confirmPayment).toHaveBeenCalledTimes(1);\n                expect(stripeUPEJsMock.retrievePaymentIntent).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(1, {\n                    methodId: 'card',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            confirm: false,\n                            credit_card_token: { token: 'clientToken' },\n                            vault_payment_instrument: false,\n                            set_as_default_stored_instrument: false,\n                        },\n                    },\n                });\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                    methodId: 'card',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            confirm: false,\n                            credit_card_token: { token: 'pi_1234' },\n                            vault_payment_instrument: false,\n                            set_as_default_stored_instrument: false,\n                        },\n                    },\n                });\n            });\n\n            it('stripe confirms payment successfully but no confirmation token exist', async () => {\n                stripeUPEJsMock.confirmPayment = jest.fn().mockResolvedValue({\n                    paymentIntent: {\n                        id: undefined,\n                    },\n                });\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getAdditionalActionErrorResponse(),\n                );\n\n                await strategy.execute(getStripeUPEOrderRequestBodyMock());\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(1, {\n                    methodId: 'card',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            confirm: false,\n                            credit_card_token: { token: 'clientToken' },\n                            vault_payment_instrument: false,\n                            set_as_default_stored_instrument: false,\n                        },\n                    },\n                });\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(2, {\n                    methodId: 'card',\n                    paymentData: {\n                        formattedPayload: {\n                            cart_id: 'b20deef40f9699e48671bbc3fef6ca44dc80e3c7',\n                            confirm: false,\n                            credit_card_token: { token: 'additionalActionToken' },\n                            vault_payment_instrument: false,\n                            set_as_default_stored_instrument: false,\n                        },\n                    },\n                });\n            });\n\n            it('stripe payment already confirmed', async () => {\n                stripeUPEJsMock.retrievePaymentIntent = jest\n                    .fn()\n                    .mockResolvedValue(getRetrievePaymentIntentResponseSucceeded());\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getAdditionalActionErrorResponse(),\n                );\n                jest.spyOn(stripeUPEIntegrationService, 'isPaymentCompleted').mockResolvedValue(\n                    true,\n                );\n\n                await strategy.execute(getStripeUPEOrderRequestBodyMock());\n\n                expect(stripeUPEIntegrationService.mapStripePaymentData).toHaveBeenCalledWith(\n                    expect.any(Object),\n                    'redirect.url',\n                    true,\n                );\n                expect(stripeUPEJsMock.retrievePaymentIntent).toHaveBeenCalledTimes(1);\n                expect(stripeUPEJsMock.retrievePaymentIntent).toHaveBeenCalledWith(\n                    'additionalActionToken',\n                );\n                expect(stripeUPEJsMock.confirmPayment).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            });\n\n            it('stripe payment already confirmed but no clientToken provided', async () => {\n                stripeUPEJsMock.retrievePaymentIntent = jest\n                    .fn()\n                    .mockResolvedValue(getRetrievePaymentIntentResponseSucceeded());\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                    getAdditionalActionErrorResponse(''),\n                );\n                jest.spyOn(stripeUPEIntegrationService, 'isPaymentCompleted').mockResolvedValue(\n                    true,\n                );\n\n                await strategy.execute(getStripeUPEOrderRequestBodyMock());\n\n                expect(stripeUPEJsMock.retrievePaymentIntent).toHaveBeenCalledTimes(1);\n                expect(stripeUPEJsMock.retrievePaymentIntent).toHaveBeenCalledWith('');\n                expect(stripeUPEJsMock.confirmPayment).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            });\n\n            it('stripe confirms payment successfully but second payment submit fails', async () => {\n                stripeUPEJsMock.confirmPayment = jest\n                    .fn()\n                    .mockResolvedValue(getConfirmPaymentResponse());\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(\n                    getAdditionalActionErrorResponse(),\n                );\n\n                await expect(\n                    strategy.execute(getStripeUPEOrderRequestBodyMock()),\n                ).rejects.toBeInstanceOf(PaymentMethodFailedError);\n                expect(\n                    stripeUPEIntegrationService.throwPaymentConfirmationProceedMessage,\n                ).toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n            });\n\n            describe('sendSecondPaymentRequestOnStripeError', () => {\n                const mockPaymentMethodWithFlag = (\n                    sendSecondPaymentRequestOnStripeError: boolean,\n                ) => {\n                    jest.spyOn(\n                        paymentIntegrationService.getState(),\n                        'getPaymentMethodOrThrow',\n                    ).mockReturnValue({\n                        ...getStripeUPEMock(),\n                        initializationData: {\n                            ...getStripeUPEMock().initializationData,\n                            sendSecondPaymentRequestOnStripeError,\n                        },\n                    });\n                };\n\n                it('sends second submitPayment request with client_side_error when flag is true and stripe returns error', async () => {\n                    mockPaymentMethodWithFlag(true);\n                    stripeUPEJsMock.confirmPayment = jest.fn().mockResolvedValue({\n                        error: { message: 'Your card was declined' },\n                    });\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                        getAdditionalActionErrorResponse(),\n                    );\n\n                    await expect(\n                        strategy.execute(getStripeUPEOrderRequestBodyMock()),\n                    ).rejects.toThrow('throw stripe error');\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                        2,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    client_side_error: true,\n                                }),\n                            }),\n                        }),\n                    );\n                });\n\n                it('does not send second submitPayment when flag is false and stripe returns error', async () => {\n                    mockPaymentMethodWithFlag(false);\n                    stripeUPEJsMock.confirmPayment = jest.fn().mockResolvedValue({\n                        error: { message: 'Your card was declined' },\n                    });\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                        getAdditionalActionErrorResponse(),\n                    );\n\n                    await expect(\n                        strategy.execute(getStripeUPEOrderRequestBodyMock()),\n                    ).rejects.toThrow('throw stripe error');\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                });\n\n                it('sends second submitPayment with client_side_error when flag is true and no payment intent', async () => {\n                    mockPaymentMethodWithFlag(true);\n                    stripeUPEJsMock.confirmPayment = jest.fn().mockResolvedValue({});\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce(\n                        getAdditionalActionErrorResponse(),\n                    );\n\n                    await expect(\n                        strategy.execute(getStripeUPEOrderRequestBodyMock()),\n                    ).rejects.toThrow('throw stripe error');\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                        2,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    client_side_error: true,\n                                }),\n                            }),\n                        }),\n                    );\n                });\n\n                it('throws stripe error even when second submitPayment with client_side_error fails', async () => {\n                    mockPaymentMethodWithFlag(true);\n                    stripeUPEJsMock.confirmPayment = jest.fn().mockResolvedValue({\n                        error: { message: 'Your card was declined' },\n                    });\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment')\n                        .mockRejectedValueOnce(getAdditionalActionErrorResponse())\n                        .mockRejectedValueOnce(new Error('second payment failed'));\n\n                    await expect(\n                        strategy.execute(getStripeUPEOrderRequestBodyMock()),\n                    ).rejects.toThrow('throw stripe error');\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                        2,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    client_side_error: true,\n                                }),\n                            }),\n                        }),\n                    );\n                });\n            });\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws an error to inform that order finalization is not required', async () => {\n            const promise = strategy.finalize();\n\n            await expect(promise).rejects.toBeInstanceOf(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        const stripeUPEJsMock = getStripeJsMock();\n\n        beforeEach(async () => {\n            jest.spyOn(stripeScriptLoader, 'getStripeClient').mockReturnValue(\n                Promise.resolve(stripeUPEJsMock),\n            );\n\n            await strategy.initialize(getStripeUPEInitializeOptionsMock());\n        });\n\n        it('deinitializes stripe payment strategy', async () => {\n            await strategy.deinitialize();\n\n            expect(stripeScriptLoader.getStripeClient).toHaveBeenCalledTimes(1);\n            expect(stripeUPEJsMock.elements).toHaveBeenCalledTimes(0);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/stripe-upe-payment-strategy.ts",
    "content": "import { merge, some } from 'lodash';\n\nimport {\n    FormattedHostedInstrument,\n    InvalidArgumentError,\n    isHostedInstrumentLike,\n    isRequestError,\n    isVaultedInstrument,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    RequestError,\n    StripeUPEIntent,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    formatStripeLocale,\n    isStripePaymentMethodLike,\n    STRIPE_UPE_CLIENT_API_VERSION,\n    STRIPE_UPE_CLIENT_BETAS,\n    StripeAdditionalActionRequired,\n    StripeAppearanceOptions,\n    StripeClient,\n    StripeElement,\n    StripeElementEvent,\n    StripeElements,\n    StripeElementsCreateOptions,\n    StripeElementType,\n    StripeElementUpdateOptions,\n    StripeEventType,\n    StripeFormattedPaymentPayload,\n    StripeInitializationData,\n    StripeIntegrationService,\n    StripeJsVersion,\n    StripePaymentMethodType,\n    StripeResult,\n    StripeScriptLoader,\n    StripeStringConstants,\n} from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport isStripeAcceleratedCheckoutCustomer from './is-stripe-accelerated-checkout-customer';\nimport StripeUPEPaymentInitializeOptions, {\n    WithStripeUPEPaymentInitializeOptions,\n} from './stripe-upe-initialize-options';\n\nexport default class StripeUPEPaymentStrategy implements PaymentStrategy {\n    private _stripeUPEClient?: StripeClient;\n    private _stripeElements?: StripeElements;\n    private _isStripeElementUpdateEnabled?: boolean;\n    private _allowRedisplayForStoredInstruments?: boolean;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private scriptLoader: StripeScriptLoader,\n        private stripeIntegrationService: StripeIntegrationService,\n    ) {}\n\n    async initialize(\n        options: PaymentInitializeOptions & WithStripeUPEPaymentInitializeOptions,\n    ): Promise<void> {\n        const { stripeupe, methodId, gatewayId } = options;\n\n        if (!stripeupe?.containerId) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        if (!gatewayId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"gatewayId\" argument is not provided.',\n            );\n        }\n\n        this._loadStripeElement(stripeupe, gatewayId, methodId).catch((error) =>\n            stripeupe.onError?.(error),\n        );\n\n        this.stripeIntegrationService.initCheckoutEventsSubscription(\n            gatewayId,\n            methodId,\n            stripeupe,\n            this._stripeElements,\n        );\n\n        return Promise.resolve();\n    }\n\n    async execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = orderRequest;\n\n        if (!payment || !payment.paymentData) {\n            throw new PaymentArgumentInvalidError(['payment.paymentData']);\n        }\n\n        if (!this._stripeUPEClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const { paymentData, methodId, gatewayId } = payment;\n        const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n            isHostedInstrumentLike(paymentData) ? paymentData : {};\n        const state = this.paymentIntegrationService.getState();\n        const { isStoreCreditApplied: useStoreCredit } = state.getCheckoutOrThrow();\n        const paymentProviderCustomer = state.getPaymentProviderCustomerOrThrow();\n        const stripePaymentProviderCustomer = isStripeAcceleratedCheckoutCustomer(\n            paymentProviderCustomer,\n        )\n            ? paymentProviderCustomer\n            : {};\n        const stripeLinkAuthenticationState =\n            stripePaymentProviderCustomer.stripeLinkAuthenticationState;\n\n        if (useStoreCredit) {\n            await this.paymentIntegrationService.applyStoreCredit(useStoreCredit);\n        }\n\n        if (gatewayId) {\n            await this.stripeIntegrationService.updateStripePaymentIntent(gatewayId, methodId);\n\n            const { email } = state.getCustomerOrThrow();\n\n            if (stripeLinkAuthenticationState !== undefined && !email) {\n                const billingAddress = state.getBillingAddressOrThrow();\n\n                await this.paymentIntegrationService.updateBillingAddress(billingAddress);\n            }\n        }\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n\n        if (isVaultedInstrument(paymentData)) {\n            const { instrumentId } = paymentData;\n\n            await this._executeWithVaulted(\n                payment.methodId,\n                instrumentId,\n                shouldSetAsDefaultInstrument,\n            );\n\n            return;\n        }\n\n        await this._executeWithStripeConfirmation(\n            payment.methodId,\n            payment.gatewayId,\n            stripeLinkAuthenticationState ? false : shouldSaveInstrument,\n            shouldSetAsDefaultInstrument,\n        );\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this._stripeElements?.getElement(StripeElementType.PAYMENT)?.unmount();\n        this.stripeIntegrationService.deinitialize();\n        this._stripeElements = undefined;\n        this._stripeUPEClient = undefined;\n\n        return Promise.resolve();\n    }\n\n    private async _executeWithStripeConfirmation(\n        methodId: string,\n        gatewayId?: string,\n        shouldSaveInstrument?: boolean,\n        shouldSetAsDefaultInstrument?: boolean,\n    ): Promise<void> {\n        const state = this.paymentIntegrationService.getState();\n        const { clientToken } = state.getPaymentMethodOrThrow(methodId);\n        const paymentPayload = this._getPaymentPayload(\n            methodId,\n            clientToken || '',\n            shouldSaveInstrument,\n            shouldSetAsDefaultInstrument,\n        );\n\n        try {\n            await this.paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error) {\n            await this._processAdditionalActionWithStripeConfirmation(\n                error,\n                methodId,\n                gatewayId,\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n            );\n        }\n    }\n\n    private async _executeWithVaulted(\n        methodId: string,\n        token: string,\n        shouldSetAsDefaultInstrument: boolean,\n    ): Promise<PaymentIntegrationSelectors | void> {\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n        const cartId = state.getCart()?.id;\n\n        try {\n            const paymentPayload = {\n                methodId,\n                paymentData: {\n                    formattedPayload: {\n                        cart_id: cartId,\n                        bigpay_token: { token },\n                        confirm: false,\n                        client_token: paymentMethod.clientToken,\n                        set_as_default_stored_instrument: shouldSetAsDefaultInstrument,\n                    },\n                },\n            };\n\n            return await this.paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error) {\n            return this._processVaultedAdditionalAction(\n                error,\n                methodId,\n                shouldSetAsDefaultInstrument,\n            );\n        }\n    }\n\n    private async _loadStripeElement(\n        stripeupe: StripeUPEPaymentInitializeOptions,\n        gatewayId: string,\n        methodId: string,\n    ) {\n        const { containerId, style, render, initStripeElementUpdateTrigger } = stripeupe;\n        const state = await this.paymentIntegrationService.loadPaymentMethod(gatewayId, {\n            params: { method: methodId },\n        });\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n\n        if (!isStripePaymentMethodLike(paymentMethod)) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const { clientToken, initializationData } = paymentMethod;\n        const {\n            shopperLanguage,\n            allowRedisplayForStoredInstruments = false,\n            enableLink,\n        } = initializationData;\n\n        this._allowRedisplayForStoredInstruments = allowRedisplayForStoredInstruments;\n\n        if (!clientToken) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        this._stripeUPEClient = await this._loadStripeJs(initializationData);\n        this._isStripeElementUpdateEnabled = typeof initStripeElementUpdateTrigger === 'function';\n\n        let appearance: StripeAppearanceOptions | undefined;\n\n        if (style) {\n            const styles = style;\n\n            appearance = {\n                variables: this.stripeIntegrationService.mapAppearanceVariables(style),\n                rules: {\n                    '.Input': this.stripeIntegrationService.mapInputAppearanceRules(styles),\n                },\n            };\n        }\n\n        this._stripeElements = await this.scriptLoader.getElements(this._stripeUPEClient, {\n            clientSecret: clientToken,\n            locale: formatStripeLocale(shopperLanguage),\n            appearance,\n        });\n\n        const { getBillingAddress, getShippingAddress } = state;\n        const { postalCode } = getShippingAddress() || getBillingAddress() || {};\n\n        const stripeElement: StripeElement =\n            this._stripeElements.getElement(StripeElementType.PAYMENT) ||\n            this._stripeElements.create(StripeElementType.PAYMENT, {\n                fields: {\n                    billingDetails: {\n                        email: StripeStringConstants.NEVER,\n                        address: {\n                            country: StripeStringConstants.NEVER,\n                            city: StripeStringConstants.NEVER,\n                            postalCode: postalCode\n                                ? StripeStringConstants.NEVER\n                                : StripeStringConstants.AUTO,\n                        },\n                    },\n                },\n                wallets: {\n                    applePay: StripeStringConstants.NEVER,\n                    googlePay: StripeStringConstants.NEVER,\n                    link: enableLink ? StripeStringConstants.AUTO : StripeStringConstants.NEVER,\n                },\n                ...this._getStripeElementTerms(),\n            });\n\n        this.stripeIntegrationService.mountElement(stripeElement, containerId);\n\n        stripeElement.on(StripeElementEvent.READY, () => {\n            render();\n        });\n\n        stripeElement.on(StripeElementEvent.CHANGE, (event: StripeEventType) => {\n            if (!event?.value || !('type' in event.value)) {\n                return;\n            }\n\n            this._updateStripeLinkStateByElementType(event.value.type);\n        });\n\n        if (this._isStripeElementUpdateEnabled) {\n            initStripeElementUpdateTrigger?.(this._updateStripeElement.bind(this));\n        }\n    }\n\n    private async _processAdditionalActionWithStripeConfirmation(\n        error: unknown,\n        methodId: string,\n        gatewayId?: string,\n        shouldSaveInstrument = false,\n        shouldSetAsDefaultInstrument = false,\n    ): Promise<void> {\n        if (\n            !isRequestError(error) ||\n            !this.stripeIntegrationService.isAdditionalActionError(error.body.errors)\n        ) {\n            throw error;\n        }\n\n        if (!this._stripeUPEClient || !this._stripeElements) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const { data: additionalActionData } = error.body.additional_action_required;\n        const { token } = additionalActionData;\n\n        const { paymentIntent, error: stripeError } = await this._confirmStripePaymentOrThrow(\n            methodId,\n            additionalActionData,\n        );\n\n        const paymentPayload = this._getPaymentPayload(\n            methodId,\n            paymentIntent?.id || token,\n            shouldSaveInstrument,\n            shouldSetAsDefaultInstrument,\n        );\n\n        if (stripeError || !paymentIntent) {\n            const { initializationData } = this.paymentIntegrationService\n                .getState()\n                .getPaymentMethodOrThrow<StripeInitializationData>(methodId, gatewayId);\n            const { sendSecondPaymentRequestOnStripeError } = initializationData || {};\n\n            if (sendSecondPaymentRequestOnStripeError) {\n                // INFO: even in case when stripe payment confirmation was declined\n                // we need to send submitPayment request to update status of checkout session on BE side.\n                try {\n                    const paymentPayloadWithError = merge({}, paymentPayload, {\n                        paymentData: {\n                            formattedPayload: {\n                                client_side_error: true,\n                            },\n                        },\n                    });\n\n                    await this.paymentIntegrationService.submitPayment(paymentPayloadWithError);\n                } catch {\n                    // INFO: additional action should be ignored for this update status request.\n                    // will throw Stripe error message to the shopper.\n                }\n            }\n\n            this.stripeIntegrationService.throwStripeError(stripeError);\n        }\n\n        try {\n            await this.paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error) {\n            this.stripeIntegrationService.throwPaymentConfirmationProceedMessage();\n        }\n    }\n\n    private async _confirmStripePaymentOrThrow(\n        methodId: string,\n        additionalActionData: StripeAdditionalActionRequired['data'],\n    ): Promise<StripeResult | never> {\n        if (!this._stripeUPEClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const { token, redirect_url } = additionalActionData;\n        const stripePaymentData = this.stripeIntegrationService.mapStripePaymentData(\n            this._stripeElements,\n            redirect_url,\n            !!this._allowRedisplayForStoredInstruments,\n        );\n\n        const isPaymentCompleted = await this.stripeIntegrationService.isPaymentCompleted(\n            methodId,\n            this._stripeUPEClient,\n        );\n\n        return !isPaymentCompleted\n            ? this._stripeUPEClient.confirmPayment(stripePaymentData)\n            : this._stripeUPEClient.retrievePaymentIntent(token || '');\n    }\n\n    private async _processVaultedAdditionalAction(\n        error: unknown,\n        methodId?: string,\n        shouldSetAsDefaultInstrument = false,\n    ): Promise<PaymentIntegrationSelectors | never> {\n        if (\n            !methodId ||\n            !isRequestError(error) ||\n            !some(error.body.errors, { code: 'three_d_secure_required' })\n        ) {\n            throw error;\n        }\n\n        if (!this._stripeUPEClient || !this._stripeElements) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        const clientSecret = error.body.three_ds_result.token;\n        let result;\n        let catchedConfirmError = false;\n\n        try {\n            result = await this._stripeUPEClient.confirmCardPayment(clientSecret);\n        } catch (error) {\n            try {\n                result = await this._stripeUPEClient.retrievePaymentIntent(clientSecret);\n            } catch (error) {\n                catchedConfirmError = true;\n            }\n        }\n\n        if (result?.error) {\n            this.stripeIntegrationService.throwStripeError(result.error);\n        }\n\n        if (!result?.paymentIntent && !catchedConfirmError) {\n            throw new RequestError();\n        }\n\n        const paymentPayload = this._getPaymentPayload(\n            methodId,\n            catchedConfirmError ? clientSecret : result?.paymentIntent?.id,\n            false,\n            shouldSetAsDefaultInstrument,\n        );\n\n        return this.paymentIntegrationService.submitPayment(paymentPayload);\n    }\n\n    private async _loadStripeJs(\n        initializationData: StripeInitializationData,\n    ): Promise<StripeClient> {\n        if (this._stripeUPEClient) {\n            return this._stripeUPEClient;\n        }\n\n        const state = this.paymentIntegrationService.getState();\n\n        return this.scriptLoader.getStripeClient(\n            initializationData,\n            state.getCartLocale(),\n            StripeJsVersion.V3,\n            STRIPE_UPE_CLIENT_BETAS,\n            STRIPE_UPE_CLIENT_API_VERSION,\n        );\n    }\n\n    private _getPaymentPayload(\n        methodId: string,\n        token: string,\n        shouldSaveInstrument = false,\n        shouldSetAsDefaultInstrument = false,\n    ): Payment<StripeFormattedPaymentPayload> {\n        const cartId = this.paymentIntegrationService.getState().getCart()?.id || '';\n        const formattedPayload: StripeUPEIntent & FormattedHostedInstrument = {\n            cart_id: cartId,\n            credit_card_token: { token },\n            confirm: false,\n            vault_payment_instrument: shouldSaveInstrument,\n            set_as_default_stored_instrument: shouldSetAsDefaultInstrument,\n        };\n\n        return {\n            methodId,\n            paymentData: {\n                formattedPayload,\n            },\n        };\n    }\n\n    private _updateStripeElement({ shouldShowTerms }: StripeElementUpdateOptions): void {\n        const stripeElement = this._stripeElements?.getElement(StripeElementType.PAYMENT);\n\n        stripeElement?.update({\n            ...this._getStripeElementTerms(shouldShowTerms),\n        });\n    }\n\n    private _getStripeElementTerms(\n        shouldShowTerms?: boolean,\n    ): Pick<StripeElementsCreateOptions, 'terms'> {\n        let card = StripeStringConstants.AUTO;\n\n        if (this._isStripeElementUpdateEnabled) {\n            card = shouldShowTerms ? StripeStringConstants.AUTO : StripeStringConstants.NEVER;\n        }\n\n        return {\n            terms: {\n                card,\n            },\n        };\n    }\n\n    private _updateStripeLinkStateByElementType(paymentElementType: StripePaymentMethodType): void {\n        const state = this.paymentIntegrationService.getState();\n        const paymentProviderCustomer = state.getPaymentProviderCustomerOrThrow();\n        const isStripeLinkElementType = paymentElementType === StripePaymentMethodType.Link;\n\n        // INFO: Trigger additional update only if Stripe Link Authentication was skipped on the customer step, but the Link payment element was rendered.\n        if (\n            !isStripeAcceleratedCheckoutCustomer(paymentProviderCustomer) &&\n            isStripeLinkElementType\n        ) {\n            this.paymentIntegrationService.updatePaymentProviderCustomer({\n                stripeLinkAuthenticationState: isStripeLinkElementType,\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/stripe-upe.mock.ts",
    "content": "import {\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { StripePaymentMethodType } from '@bigcommerce/checkout-sdk/stripe-utils';\n\nimport { WithStripeUPEPaymentInitializeOptions } from './stripe-upe-initialize-options';\n\nconst gatewayId = 'stripeupe';\n\nexport function getStripeUPEMock(method = 'card'): PaymentMethod {\n    return {\n        id: method,\n        logoUrl: '',\n        method,\n        supportedCards: [],\n        config: {\n            displayName: 'Stripe',\n            merchantId: '',\n            testMode: true,\n        },\n        initializationData: {\n            stripePublishableKey: 'key',\n            stripeConnectedAccount: 'key',\n            browserLanguageEnabled: false,\n            shopperLanguage: 'en',\n            allowRedisplayForStoredInstruments: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        returnUrl: 'http://www.example.com',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getStripeUPEInitializeOptionsMock(\n    stripePaymentMethodType: StripePaymentMethodType = StripePaymentMethodType.CreditCard,\n    style: { [key: string]: string } = { fieldText: '#ccc' },\n): PaymentInitializeOptions & WithStripeUPEPaymentInitializeOptions {\n    return {\n        methodId: stripePaymentMethodType,\n        gatewayId,\n        stripeupe: {\n            containerId: `stripe-${stripePaymentMethodType}-component-field`,\n            style,\n            render: jest.fn(),\n        },\n    };\n}\n\nexport function getStripeUPEOrderRequestBodyMock(\n    stripePaymentMethodType: StripePaymentMethodType = StripePaymentMethodType.CreditCard,\n    shouldSaveInstrument = false,\n): OrderRequestBody {\n    return {\n        payment: {\n            methodId: stripePaymentMethodType,\n            gatewayId: 'stripeupe',\n            paymentData: {\n                shouldSaveInstrument,\n            },\n        },\n    };\n}\n\nexport function getStripeUPEWithLinkOrderRequestBodyMock(\n    stripePaymentMethodType: StripePaymentMethodType = StripePaymentMethodType.CreditCard,\n    shouldSaveInstrument = false,\n): OrderRequestBody {\n    return {\n        payment: {\n            gatewayId: 'stripeupe',\n            methodId: stripePaymentMethodType,\n            paymentData: {\n                shouldSaveInstrument,\n            },\n        },\n    };\n}\n\nexport function getStripeUPEOrderRequestBodyVaultMock(\n    stripePaymentMethodType: StripePaymentMethodType = StripePaymentMethodType.CreditCard,\n    shouldSetAsDefaultInstrument = false,\n): OrderRequestBody {\n    return {\n        payment: {\n            methodId: stripePaymentMethodType,\n            paymentData: {\n                instrumentId: 'token',\n                shouldSetAsDefaultInstrument,\n            },\n        },\n    };\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripe-upe/stripeupe-customer-initialize-options.ts",
    "content": "export default interface StripeUPECustomerInitializeOptions {\n    /**\n     * The ID of a container which the stripe iframe should be inserted.\n     */\n    container: string;\n\n    /**\n     * The identifier of the payment method.\n     */\n    methodId: string;\n\n    /**\n     * The identifier of the payment provider providing the payment method. This\n     * option is only required if the provider offers multiple payment options.\n     * i.e.: Stripeupe and Klarna.\n     */\n    gatewayId: string;\n\n    /**\n     * A callback that gets called whenever the Stripe Link Authentication Element's value changes.\n     *\n     * @param authenticated - if the email is authenticated on Stripe.\n     * @param email - The new value of the email.\n     */\n    onEmailChange(authenticated: boolean, email: string): void;\n\n    /**\n     * A callback that gets called when Stripe Link Authentication Element is Loaded.\n     */\n    isLoading(mounted: boolean): void;\n\n    /**\n     * get styles from store theme\n     */\n    getStyles?():\n        | {\n              [key: string]: string;\n          }\n        | undefined;\n}\n\nexport interface WithStripeUPECustomerInitializeOptions {\n    /**\n     * The options that are required to initialize the customer step of checkout\n     * when using StripeUPE.\n     */\n    stripeupe?: StripeUPECustomerInitializeOptions;\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripev3/create-stripev3-payment-strategy.ts",
    "content": "import { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport StripeV3PaymentStrategy from './stripev3-payment-strategy';\nimport StripeV3ScriptLoader from './stripev3-script-loader';\n\nconst createStripeV3PaymentStrategy: PaymentStrategyFactory<any> = (paymentIntegrationService) => {\n    return new StripeV3PaymentStrategy(\n        paymentIntegrationService,\n        new StripeV3ScriptLoader(getScriptLoader()),\n    );\n};\n\nexport default toResolvableModule(createStripeV3PaymentStrategy, [{ gateway: 'stripev3' }]);\n"
  },
  {
    "path": "packages/stripe-integration/src/stripev3/is-individual-card-element-options.ts",
    "content": "import { IndividualCardElementOptions } from './stripev3';\n\nexport default function isIndividualCardElementOptions(\n    individualCardElementOptions: any,\n): individualCardElementOptions is IndividualCardElementOptions {\n    return (\n        individualCardElementOptions !== null &&\n        typeof individualCardElementOptions === 'object' &&\n        'cardNumberElementOptions' in individualCardElementOptions &&\n        'cardCvcElementOptions' in individualCardElementOptions &&\n        'cardExpiryElementOptions' in individualCardElementOptions &&\n        typeof individualCardElementOptions.cardNumberElementOptions !== 'undefined' &&\n        typeof individualCardElementOptions.cardCvcElementOptions !== 'undefined' &&\n        typeof individualCardElementOptions.cardExpiryElementOptions !== 'undefined'\n    );\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripev3/stripev3-error.spec.ts",
    "content": "import StripeV3Error, { StripeV3ErrorType } from './stripev3-error';\n\ndescribe('StripeV3Error', () => {\n    it('returns the error type and subtype asigned in this class', () => {\n        const error = new StripeV3Error(StripeV3ErrorType.AuthFailure);\n\n        expect(error.type).toBe('stripev3_error');\n        expect(error.subtype).toBe('auth_failure');\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripev3/stripev3-error.ts",
    "content": "import { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport enum StripeV3ErrorType {\n    AuthFailure = 'auth_failure',\n}\n\nexport default class StripeV3Error extends StandardError {\n    subtype: string;\n\n    constructor(subtype: StripeV3ErrorType) {\n        super(getErrorMessage(subtype));\n\n        this.type = 'stripev3_error';\n        this.subtype = subtype;\n    }\n}\n\nfunction getErrorMessage(type: StripeV3ErrorType) {\n    switch (type) {\n        case StripeV3ErrorType.AuthFailure:\n            return `User did not authenticate`;\n\n        default:\n            return 'There was an error while processing your payment. Please try again or contact us.';\n    }\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripev3/stripev3-initialize-options.ts",
    "content": "import { HostedFormOptions } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { IndividualCardElementOptions, StripeElementOptions } from './stripev3';\n\n/**\n * A set of options that are required to initialize the Stripe payment method.\n *\n * Once Stripe payment is initialized, credit card form fields, provided by the\n * payment provider as iframes, will be inserted into the current page. These\n * options provide a location and styling for each of the form fields.\n *\n * ```html\n * <!-- This is where the credit card component will be inserted -->\n * <div id=\"container\"></div>\n * ```\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'stripev3',\n *     stripev3: {\n *         containerId: 'container',\n *     },\n * });\n * ```\n *\n * Additional options can be passed in to customize the fields.\n *\n * ```js\n * service.initializePayment({\n *     methodId: 'stripev3',\n *     stripev3: {\n *         containerId: 'container',\n *         options: {\n *             card: {\n *                 classes: { base: 'form-input' },\n *             },\n *             iban: {\n *                 classes: { base: 'form-input' },\n *                 supportedCountries: ['SEPA'],\n *             },\n *             idealBank: {\n *                 classes: { base: 'form-input' },\n *             },\n *         },\n *     },\n * });\n * ```\n */\n\nexport default interface StripeV3PaymentInitializeOptions {\n    /**\n     * The location to insert the credit card number form field.\n     */\n    containerId: string;\n\n    options?: StripeElementOptions | IndividualCardElementOptions;\n\n    /**\n     * Hosted Form Validation Options\n     */\n    form?: HostedFormOptions;\n}\n\nexport interface WithStripeV3PaymentInitializeOptions {\n    stripev3?: StripeV3PaymentInitializeOptions;\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripev3/stripev3-payment-method.mock.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport function getStripeV3(\n    method = 'card',\n    shouldUseIndividualCardFields = false,\n    isHostedFormEnabled = false,\n): PaymentMethod {\n    return {\n        id: method,\n        gateway: 'stripev3',\n        logoUrl: '',\n        method,\n        supportedCards: [],\n        config: {\n            displayName: 'Stripe',\n            merchantId: '',\n            testMode: true,\n            isHostedFormEnabled,\n        },\n        initializationData: {\n            stripePublishableKey: 'key',\n            useIndividualCardFields: shouldUseIndividualCardFields,\n            bopis: {\n                enabled: false,\n                requiredAddress: 'none',\n            },\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        returnUrl: 'http://www.example.com',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripev3/stripev3-payment-strategy.spec.ts",
    "content": "import { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    Checkout,\n    HostedForm,\n    HostedInputEventType,\n    HostedInputSubmitSuccessEvent,\n    InvalidArgumentError,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationSelectors,\n    PaymentIntegrationService,\n    PaymentMethod,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCart,\n    getCheckout,\n    getCustomer,\n    getDigitalItem,\n    getErrorPaymentResponseBody,\n    getResponse,\n    getShippingAddress,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    StripeElement,\n    StripeElements,\n    StripeElementType,\n    StripePaymentMethodType,\n    StripeV3Client,\n} from './stripev3';\nimport { getStripeV3 } from './stripev3-payment-method.mock';\nimport StripeV3PaymentStrategy from './stripev3-payment-strategy';\nimport StripeV3ScriptLoader from './stripev3-script-loader';\nimport {\n    getConfirmPaymentResponse,\n    getFailingStripeV3JsMock,\n    getHostedFormInitializeOptions,\n    getOrderRequestBodyVaultedCC,\n    getPaymentMethodResponse,\n    getStripeBillingAddress,\n    getStripeBillingAddressWithoutPhone,\n    getStripePaymentMethodOptionsWithGuestUserWithoutAddress,\n    getStripeV3InitializeOptionsMock,\n    getStripeV3InitializeOptionsMockSingleElements,\n    getStripeV3JsMock,\n    getStripeV3OrderRequestBodyMock,\n    getStripeV3OrderRequestBodyVaultMock,\n    StripeV3InitializeOptions,\n} from './stripev3.mock';\n\n// TODO: CHECKOUT-7766\ndescribe('StripeV3PaymentStrategy', () => {\n    let checkoutMock: Checkout;\n    let paymentMethodMock: PaymentMethod;\n    let strategy: StripeV3PaymentStrategy;\n    let stripeScriptLoader: StripeV3ScriptLoader;\n\n    let scriptLoader: ScriptLoader;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        scriptLoader = createScriptLoader();\n\n        paymentMethodMock = { ...getStripeV3(), clientToken: 'myToken' };\n\n        stripeScriptLoader = new StripeV3ScriptLoader(scriptLoader);\n        checkoutMock = getCheckout();\n\n        jest.useFakeTimers();\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'finalizeOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue(\n            checkoutMock,\n        );\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n\n        strategy = new StripeV3PaymentStrategy(paymentIntegrationService, stripeScriptLoader);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#initialize()', () => {\n        let options: PaymentInitializeOptions;\n        let stripeV3JsMock: StripeV3Client;\n\n        beforeEach(() => {\n            options = getStripeV3InitializeOptionsMock();\n            stripeV3JsMock = getStripeV3JsMock();\n        });\n\n        it('loads stripe v3 script', async () => {\n            jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(Promise.resolve(stripeV3JsMock));\n\n            await strategy.initialize(options);\n\n            expect(stripeScriptLoader.load).toHaveBeenCalled();\n        });\n\n        it('loads a single instance of StripeV3Client and StripeElements', async () => {\n            jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(Promise.resolve(stripeV3JsMock));\n\n            await strategy.initialize(options);\n\n            await strategy.initialize(options);\n\n            expect(stripeScriptLoader.load).toHaveBeenCalledTimes(1);\n            expect(stripeV3JsMock.elements).toHaveBeenCalledTimes(1);\n        });\n\n        it('does not load stripe V3 if initialization options are not provided', async () => {\n            jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(Promise.resolve(stripeV3JsMock));\n\n            delete options.stripev3;\n\n            const promise = strategy.initialize(options);\n\n            await expect(promise).rejects.toThrow(NotInitializedError);\n        });\n\n        it('fails to load stripe V3', async () => {\n            jest.spyOn(stripeScriptLoader, 'load').mockResolvedValue(\n                undefined as unknown as StripeV3Client,\n            );\n\n            const promise = strategy.initialize(options);\n\n            await expect(promise).rejects.toThrow(NotInitializedError);\n        });\n\n        it('does not load stripe V3 if gatewayId is not provided', async () => {\n            jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(Promise.resolve(stripeV3JsMock));\n\n            delete options.gatewayId;\n\n            const promise = strategy.initialize(options);\n\n            await expect(promise).rejects.toThrow(InvalidArgumentError);\n        });\n\n        describe('mounts single payment element', () => {\n            beforeEach(() => {\n                options = getStripeV3InitializeOptionsMock();\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getStripeV3());\n            });\n\n            it('does not mount a stripe alipay element', async () => {\n                const { create, getElement } = stripeV3JsMock.elements();\n\n                stripeV3JsMock.elements = jest.fn().mockReturnValue({ create, getElement });\n\n                jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(\n                    Promise.resolve(stripeV3JsMock),\n                );\n\n                await strategy.initialize(\n                    getStripeV3InitializeOptionsMock(StripeElementType.Alipay),\n                );\n\n                expect(create).not.toHaveBeenCalledWith('alipay');\n            });\n\n            it('mounts a previously created stripe element', async () => {\n                const { create: getElement, getElement: create } = stripeV3JsMock.elements();\n\n                stripeV3JsMock.elements = jest.fn().mockReturnValue({ create, getElement });\n\n                jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(\n                    Promise.resolve(stripeV3JsMock),\n                );\n\n                await strategy.initialize(options);\n\n                expect(getElement).toHaveBeenCalledWith('card');\n                expect(create).not.toHaveBeenCalled();\n            });\n\n            it('fails mounting a stripe card element', async () => {\n                stripeV3JsMock = getFailingStripeV3JsMock();\n\n                const { create, getElement } = stripeV3JsMock.elements();\n\n                stripeV3JsMock.elements = jest.fn().mockReturnValue({ create, getElement });\n\n                jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(\n                    Promise.resolve(stripeV3JsMock),\n                );\n\n                await expect(strategy.initialize(options)).rejects.toThrow(InvalidArgumentError);\n            });\n\n            it('fails mounting a stripe sepa element', async () => {\n                stripeV3JsMock = getFailingStripeV3JsMock();\n\n                const { create, getElement } = stripeV3JsMock.elements();\n\n                stripeV3JsMock.elements = jest.fn().mockReturnValue({ create, getElement });\n\n                jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(\n                    Promise.resolve(stripeV3JsMock),\n                );\n\n                options = getStripeV3InitializeOptionsMock(StripeElementType.Sepa);\n\n                await expect(strategy.initialize(options)).rejects.toThrow(InvalidArgumentError);\n            });\n        });\n\n        it('fails mounting individual payment elements', async () => {\n            options = getStripeV3InitializeOptionsMockSingleElements();\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getStripeV3('card', true));\n\n            stripeV3JsMock = getFailingStripeV3JsMock();\n\n            const { create, getElement } = stripeV3JsMock.elements();\n\n            stripeV3JsMock.elements = jest.fn().mockReturnValue({ create, getElement });\n\n            jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(Promise.resolve(stripeV3JsMock));\n\n            await expect(strategy.initialize(options)).rejects.toThrow(InvalidArgumentError);\n        });\n    });\n\n    describe('#execute()', () => {\n        let options: PaymentInitializeOptions;\n        let stripeV3JsMock: StripeV3Client;\n\n        beforeEach(() => {\n            options = getStripeV3InitializeOptionsMock();\n            stripeV3JsMock = getStripeV3JsMock();\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(paymentMethodMock);\n        });\n\n        describe('creates the order and submit payment', () => {\n            beforeEach(() => {\n                jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(\n                    Promise.resolve(stripeV3JsMock),\n                );\n            });\n\n            it('with a stored instrument passing on the \"make default\" flag', async () => {\n                await strategy.initialize(options);\n\n                stripeV3JsMock.confirmCardPayment = jest\n                    .fn()\n                    .mockResolvedValue(getConfirmPaymentResponse());\n\n                await strategy.execute(\n                    getStripeV3OrderRequestBodyVaultMock(StripeElementType.CreditCard, true),\n                );\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                    methodId: 'card',\n                    paymentData: {\n                        formattedPayload: {\n                            bigpay_token: {\n                                token: 'token',\n                            },\n                            client_token: 'myToken',\n                            confirm: true,\n                            set_as_default_stored_instrument: true,\n                        },\n                    },\n                });\n            });\n\n            describe('with card', () => {\n                let elements: StripeElements;\n                let cardElement: StripeElement;\n\n                beforeEach(() => {\n                    elements = stripeV3JsMock.elements();\n                    cardElement = elements.create(StripeElementType.CreditCard, {});\n\n                    stripeV3JsMock.confirmCardPayment = jest\n                        .fn()\n                        .mockResolvedValue(getConfirmPaymentResponse());\n\n                    stripeV3JsMock.createPaymentMethod = jest\n                        .fn()\n                        .mockResolvedValue(getPaymentMethodResponse());\n\n                    jest.spyOn(\n                        paymentIntegrationService.getState(),\n                        'getBillingAddress',\n                    ).mockReturnValue({\n                        ...getBillingAddress(),\n                    });\n\n                    jest.spyOn(stripeV3JsMock, 'elements').mockReturnValue(elements);\n                    jest.spyOn(stripeV3JsMock.elements(), 'create').mockReturnValue(cardElement);\n                });\n\n                afterEach(() => {\n                    jest.clearAllMocks();\n                });\n\n                describe('with both shipping and billing address', () => {\n                    beforeEach(() => {\n                        jest.spyOn(\n                            paymentIntegrationService.getState(),\n                            'getShippingAddress',\n                        ).mockReturnValue(getShippingAddress());\n                        jest.spyOn(\n                            paymentIntegrationService.getState(),\n                            'getBillingAddress',\n                        ).mockReturnValue(getBillingAddress());\n                    });\n\n                    it('with a signed user', async () => {\n                        const startV3OrderRequestGatewayId: OrderRequestBody = {\n                            payment: {\n                                methodId: StripeElementType.CreditCard,\n                                paymentData: {\n                                    shouldSaveInstrument: false,\n                                },\n                                gatewayId: 'stripev3',\n                            },\n                        };\n\n                        await strategy.initialize(options);\n\n                        await strategy.execute(startV3OrderRequestGatewayId);\n\n                        expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalledWith({\n                            type: StripePaymentMethodType.CreditCard,\n                            card: cardElement,\n                            billing_details: getStripeBillingAddress(),\n                        });\n                        expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                        expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalled();\n                        expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                    });\n\n                    it('with allow_redisplay: always', async () => {\n                        jest.spyOn(\n                            paymentIntegrationService.getState(),\n                            'getPaymentMethodOrThrow',\n                        ).mockReturnValueOnce({\n                            ...paymentMethodMock,\n                            initializationData: {\n                                ...paymentMethodMock.initializationData,\n                                allowRedisplayForStoredInstruments: true,\n                            },\n                        });\n\n                        const startV3OrderRequestGatewayId: OrderRequestBody = {\n                            payment: {\n                                methodId: StripeElementType.CreditCard,\n                                paymentData: {\n                                    shouldSaveInstrument: false,\n                                },\n                                gatewayId: 'stripev3',\n                            },\n                        };\n\n                        await strategy.initialize(options);\n\n                        await strategy.execute(startV3OrderRequestGatewayId);\n\n                        expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalledWith({\n                            type: StripePaymentMethodType.CreditCard,\n                            card: cardElement,\n                            billing_details: getStripeBillingAddress(),\n                            allow_redisplay: 'always',\n                        });\n                    });\n\n                    it('with a guest user', async () => {\n                        jest.spyOn(\n                            paymentIntegrationService.getState(),\n                            'getCustomer',\n                        ).mockReturnValue(undefined);\n\n                        jest.spyOn(\n                            paymentIntegrationService,\n                            'loadPaymentMethod',\n                        ).mockResolvedValue(paymentIntegrationService.getState());\n\n                        await strategy.initialize(options);\n\n                        await strategy.execute(getStripeV3OrderRequestBodyMock());\n\n                        expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalledWith({\n                            type: StripePaymentMethodType.CreditCard,\n                            card: cardElement,\n                            billing_details: getStripeBillingAddress(),\n                        });\n                        expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                        expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                    });\n                });\n\n                it('with store credit', async () => {\n                    checkoutMock.isStoreCreditApplied = true;\n\n                    await strategy.initialize(options);\n\n                    await strategy.execute(getStripeV3OrderRequestBodyMock());\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.applyStoreCredit).toHaveBeenCalledWith(true);\n                    expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                });\n\n                it('passing on the \"save card\" flag', async () => {\n                    await strategy.initialize(options);\n\n                    await strategy.execute(\n                        getStripeV3OrderRequestBodyMock(StripeElementType.CreditCard, true),\n                    );\n\n                    expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalledWith({\n                        type: StripePaymentMethodType.CreditCard,\n                        card: cardElement,\n                        billing_details: getStripeBillingAddress(),\n                    });\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                });\n\n                it('submit payment with credit card and passes back the client token', async () => {\n                    jest.spyOn(\n                        paymentIntegrationService.getState(),\n                        'getPaymentMethodOrThrow',\n                    ).mockReturnValue(getStripeV3('card', false, false));\n\n                    await strategy.initialize(options);\n\n                    await strategy.execute(getStripeV3OrderRequestBodyMock());\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                        expect.objectContaining({\n                            methodId: 'card',\n                            paymentData: expect.objectContaining({\n                                formattedPayload: {\n                                    credit_card_token: {\n                                        token: 'pm_1234',\n                                    },\n                                    confirm: false,\n                                    client_token: 'clientToken',\n                                    vault_payment_instrument: false,\n                                },\n                            }),\n                        }),\n                    );\n                });\n\n                it('with a signed user without phone number', async () => {\n                    const customer = getCustomer();\n\n                    customer.addresses[0].phone = '';\n\n                    jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue(\n                        customer,\n                    );\n                    jest.spyOn(\n                        paymentIntegrationService.getState(),\n                        'getBillingAddress',\n                    ).mockReturnValue({\n                        ...getBillingAddress(),\n                        phone: '',\n                    });\n\n                    await strategy.initialize(options);\n\n                    await strategy.execute(getStripeV3OrderRequestBodyMock());\n\n                    expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalledWith({\n                        type: StripePaymentMethodType.CreditCard,\n                        card: cardElement,\n                        billing_details: getStripeBillingAddressWithoutPhone(),\n                    });\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                });\n\n                it('with a guest user without phone number', async () => {\n                    jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue(\n                        undefined,\n                    );\n                    jest.spyOn(\n                        paymentIntegrationService.getState(),\n                        'getBillingAddress',\n                    ).mockReturnValue({\n                        ...getBillingAddress(),\n                        phone: '',\n                    });\n                    jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n                        paymentIntegrationService.getState(),\n                    );\n\n                    await strategy.initialize(options);\n\n                    await strategy.execute(getStripeV3OrderRequestBodyMock());\n\n                    expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalledWith({\n                        type: StripePaymentMethodType.CreditCard,\n                        card: cardElement,\n                        billing_details: getStripeBillingAddressWithoutPhone(),\n                    });\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                });\n\n                it('without shipping address if there is not physical items in cart', async () => {\n                    jest.spyOn(paymentIntegrationService.getState(), 'getCart').mockReturnValue({\n                        ...getCart(),\n                        lineItems: {\n                            physicalItems: [],\n                            giftCertificates: [],\n                            digitalItems: [getDigitalItem()],\n                        },\n                    });\n\n                    await strategy.initialize(options);\n\n                    await strategy.execute(getStripeV3OrderRequestBodyMock());\n\n                    expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalledWith({\n                        type: StripePaymentMethodType.CreditCard,\n                        card: cardElement,\n                        billing_details: getStripeBillingAddress(),\n                    });\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                });\n\n                it('with a guest user and without shipping and billing address', async () => {\n                    jest.spyOn(paymentIntegrationService.getState(), 'getCustomer').mockReturnValue(\n                        undefined,\n                    );\n                    jest.spyOn(\n                        paymentIntegrationService.getState(),\n                        'getShippingAddress',\n                    ).mockReturnValue(undefined);\n                    jest.spyOn(\n                        paymentIntegrationService.getState(),\n                        'getBillingAddress',\n                    ).mockReturnValue(undefined);\n\n                    await strategy.initialize(options);\n\n                    await strategy.execute(getStripeV3OrderRequestBodyMock());\n\n                    expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalledWith({\n                        type: StripePaymentMethodType.CreditCard,\n                        card: cardElement,\n                        ...getStripePaymentMethodOptionsWithGuestUserWithoutAddress(),\n                    });\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                });\n\n                it('fires additional action outside of bigcommerce', async () => {\n                    const errorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'additional_action_required' }],\n                            additional_action_required: {\n                                type: 'redirect_to_url',\n                                data: {\n                                    redirect_url: 'https://redirect-url.com',\n                                },\n                            },\n                            status: 'error',\n                        }),\n                    );\n\n                    Object.defineProperty(window, 'location', {\n                        value: {\n                            replace: jest.fn(),\n                        },\n                    });\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValue(\n                        Promise.reject(errorResponse),\n                    );\n\n                    await strategy.initialize(options);\n\n                    strategy.execute(getStripeV3OrderRequestBodyMock());\n                    await new Promise((resolve) => process.nextTick(resolve));\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                    expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalled();\n                    expect(window.location.replace).toHaveBeenCalledWith(\n                        'https://redirect-url.com',\n                    );\n                });\n\n                it('do not fire additional action because of missing url', async () => {\n                    const errorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'additional_action_required' }],\n                            additional_action_required: {\n                                type: 'redirect_to_url',\n                                data: {},\n                            },\n                            status: 'error',\n                        }),\n                    );\n\n                    Object.defineProperty(window, 'location', {\n                        value: {\n                            replace: jest.fn(),\n                        },\n                    });\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockResolvedValue(\n                        errorResponse as unknown as PaymentIntegrationSelectors,\n                    );\n\n                    await strategy.initialize(options);\n\n                    await strategy.execute(getStripeV3OrderRequestBodyMock());\n                    await new Promise((resolve) => process.nextTick(resolve));\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                    expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalled();\n                    expect(window.location.replace).not.toHaveBeenCalled();\n                });\n\n                it('fires unknown additional action', async () => {\n                    const errorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'additional_action_required' }],\n                            additional_action_required: {\n                                type: 'unknown_action',\n                            },\n                            status: 'error',\n                        }),\n                    );\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(\n                        errorResponse,\n                    );\n\n                    await strategy.initialize(options);\n\n                    try {\n                        await strategy.execute(getStripeV3OrderRequestBodyMock());\n                    } catch (error) {\n                        expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                        expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalled();\n                    }\n                });\n\n                it('throws stripe error if empty payment intent is sent', async () => {\n                    const requiredFieldErrorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'required_field' }],\n                        }),\n                    );\n                    const stripeErrorMessage = 'Stripe error message.';\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                        Promise.reject(requiredFieldErrorResponse),\n                    );\n\n                    stripeV3JsMock.createPaymentMethod = jest\n                        .fn()\n                        .mockResolvedValue({ error: { message: stripeErrorMessage } });\n\n                    await strategy.initialize(options);\n\n                    await expect(\n                        strategy.execute(getStripeV3OrderRequestBodyMock()),\n                    ).rejects.toThrow(stripeErrorMessage);\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    credit_card_token: { token: '' },\n                                }),\n                            }),\n                        }),\n                    );\n                    expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalled();\n                });\n\n                it('throws unknown error', async () => {\n                    const unexpectedError = {\n                        message: 'An unexpected error has occurred.',\n                    };\n\n                    const errorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'unknown_error' }],\n                            status: 'error',\n                        }),\n                    );\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValue(\n                        Promise.reject(errorResponse),\n                    );\n\n                    await strategy.initialize(options);\n\n                    try {\n                        await strategy.execute(getStripeV3OrderRequestBodyMock());\n                    } catch (error) {\n                        expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                        expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalled();\n\n                        if (error instanceof Error) {\n                            expect(error.message).toEqual(\n                                unexpectedError && unexpectedError.message,\n                            );\n                        }\n                    }\n                });\n\n                it('throws an error that is not a RequestError', async () => {\n                    const errorResponse = new Error();\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValue(\n                        Promise.reject(errorResponse),\n                    );\n\n                    await strategy.initialize(options);\n\n                    await expect(\n                        strategy.execute(getStripeV3OrderRequestBodyMock()),\n                    ).rejects.toThrow(Error);\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                    expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalled();\n                });\n\n                it('throws stripe error when auth fails', async () => {\n                    const threeDSecureRequiredErrorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'three_d_secure_required' }],\n                            three_ds_result: {\n                                token: 'token',\n                            },\n                        }),\n                    );\n                    const requiredFieldErrorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'required_field' }],\n                        }),\n                    );\n                    const stripeErrorMessage = 'Stripe error message.';\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(\n                        threeDSecureRequiredErrorResponse,\n                    );\n\n                    stripeV3JsMock.confirmCardPayment = jest.fn().mockResolvedValue({\n                        error: {\n                            payment_intent: {\n                                last_payment_error: { message: stripeErrorMessage },\n                            },\n                            message: stripeErrorMessage,\n                        },\n                    });\n\n                    await strategy.initialize(options);\n\n                    await expect(\n                        strategy.execute(getStripeV3OrderRequestBodyVaultMock()),\n                    ).rejects.toThrow(stripeErrorMessage);\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                        1,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    bigpay_token: { token: 'token' },\n                                }),\n                            }),\n                        }),\n                    );\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(\n                        requiredFieldErrorResponse,\n                    );\n\n                    expect(paymentIntegrationService.submitPayment).not.toHaveBeenNthCalledWith(\n                        2,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    credit_card_token: { token: '' },\n                                }),\n                            }),\n                        }),\n                    );\n                    expect(stripeV3JsMock.confirmCardPayment).toHaveBeenCalled();\n                });\n\n                it('throws stripe error when confirm fails but 3DS is accepted', async () => {\n                    const threeDSecureRequiredErrorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'three_d_secure_required' }],\n                            three_ds_result: {\n                                token: 'token',\n                            },\n                        }),\n                    );\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                        Promise.reject(threeDSecureRequiredErrorResponse),\n                    );\n\n                    stripeV3JsMock.confirmCardPayment = jest.fn(() =>\n                        Promise.reject(new Error('Error with 3ds')),\n                    );\n\n                    await strategy.initialize(options);\n                    await strategy.execute(getStripeV3OrderRequestBodyVaultMock());\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                        1,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    bigpay_token: { token: 'token' },\n                                }),\n                            }),\n                        }),\n                    );\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                        2,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    credit_card_token: { token: 'token' },\n                                }),\n                            }),\n                        }),\n                    );\n                    expect(stripeV3JsMock.confirmCardPayment).toHaveBeenCalled();\n                });\n\n                it('throws stripe error when user closes the auth modal', async () => {\n                    const threeDSecureRequiredErrorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'three_d_secure_required' }],\n                            three_ds_result: {\n                                token: 'token',\n                            },\n                        }),\n                    );\n\n                    const requiredFieldErrorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'required_field' }],\n                        }),\n                    );\n                    const stripeErrorMessage = 'canceled';\n                    const errorMessage = 'Payment process was cancelled.';\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValue(\n                        Promise.reject(threeDSecureRequiredErrorResponse),\n                    );\n\n                    stripeV3JsMock.confirmCardPayment = jest.fn().mockResolvedValue({\n                        error: {\n                            payment_intent: {\n                                last_payment_error: { message: stripeErrorMessage },\n                            },\n                        },\n                    });\n\n                    await strategy.initialize(options);\n\n                    await expect(\n                        strategy.execute(getStripeV3OrderRequestBodyVaultMock()),\n                    ).rejects.toThrow(errorMessage);\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                        1,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    bigpay_token: { token: 'token' },\n                                }),\n                            }),\n                        }),\n                    );\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(\n                        requiredFieldErrorResponse,\n                    );\n\n                    expect(paymentIntegrationService.submitPayment).not.toHaveBeenNthCalledWith(\n                        2,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    credit_card_token: { token: '' },\n                                }),\n                            }),\n                        }),\n                    );\n                    expect(stripeV3JsMock.confirmCardPayment).toHaveBeenCalled();\n                });\n\n                it('throws stripe error when 3d auth fails', async () => {\n                    const threeDSecureRequiredErrorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'three_d_secure_required' }],\n                            three_ds_result: {\n                                token: 'token',\n                            },\n                        }),\n                    );\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                        Promise.reject(threeDSecureRequiredErrorResponse),\n                    );\n\n                    stripeV3JsMock.confirmCardPayment = jest.fn().mockResolvedValue({\n                        error: {\n                            payment_intent: {\n                                last_payment_error: { message: 'Stripe error message.' },\n                            },\n                            code: 'payment_intent_authentication_failure',\n                        },\n                    });\n\n                    await strategy.initialize(options);\n\n                    await expect(\n                        strategy.execute(getStripeV3OrderRequestBodyVaultMock()),\n                    ).rejects.toThrow('User did not authenticate');\n                });\n\n                it('throws unknown error when process additional action', async () => {\n                    const unknownError = new Error('Unknown error');\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                        Promise.reject(unknownError),\n                    );\n\n                    await strategy.initialize(options);\n\n                    await expect(\n                        strategy.execute(getStripeV3OrderRequestBodyVaultMock()),\n                    ).rejects.toThrow('Unknown error');\n                });\n\n                it('throws unknown stripe error when user closes the auth modal', async () => {\n                    const threeDSecureRequiredErrorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'three_d_secure_required' }],\n                            three_ds_result: {\n                                token: 'token',\n                            },\n                        }),\n                    );\n                    const requiredFieldErrorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'required_field' }],\n                        }),\n                    );\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValue(\n                        Promise.reject(threeDSecureRequiredErrorResponse),\n                    );\n\n                    stripeV3JsMock.confirmCardPayment = jest.fn().mockResolvedValue({\n                        error: { payment_intent: { last_payment_error: undefined } },\n                    });\n\n                    await strategy.initialize(options);\n\n                    await expect(\n                        strategy.execute(getStripeV3OrderRequestBodyVaultMock()),\n                    ).rejects.toThrow();\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                        1,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    bigpay_token: { token: 'token' },\n                                }),\n                            }),\n                        }),\n                    );\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue(\n                        requiredFieldErrorResponse,\n                    );\n\n                    expect(paymentIntegrationService.submitPayment).not.toHaveBeenNthCalledWith(\n                        2,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    credit_card_token: { token: '' },\n                                }),\n                            }),\n                        }),\n                    );\n                    expect(stripeV3JsMock.confirmCardPayment).toHaveBeenCalled();\n                });\n\n                it('throws request error when payment fails after auth modal succeed', async () => {\n                    const threeDSecureRequiredErrorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'three_d_secure_required' }],\n                            three_ds_result: {\n                                token: 'token',\n                            },\n                        }),\n                    );\n                    const serverSideErrorMessage = 'Something went wrong server side!';\n                    const serverSideError = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'unknown_error' }],\n                        }),\n                        { message: serverSideErrorMessage },\n                    );\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment')\n                        .mockReturnValueOnce(Promise.reject(threeDSecureRequiredErrorResponse))\n                        .mockReturnValueOnce(Promise.reject(serverSideError));\n\n                    stripeV3JsMock.confirmCardPayment = jest\n                        .fn()\n                        .mockResolvedValue(getConfirmPaymentResponse());\n\n                    await strategy.initialize(options);\n\n                    await expect(\n                        strategy.execute(getStripeV3OrderRequestBodyVaultMock()),\n                    ).rejects.toThrow(serverSideErrorMessage);\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                        1,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    bigpay_token: { token: 'token' },\n                                }),\n                            }),\n                        }),\n                    );\n\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                        2,\n                        expect.objectContaining({\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    credit_card_token: { token: 'pi_1234' },\n                                }),\n                            }),\n                        }),\n                    );\n                    expect(stripeV3JsMock.confirmCardPayment).toHaveBeenCalled();\n                });\n\n                it('throws when stored instrument requires SCA and then shopper successfully authenticates', async () => {\n                    const errorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'three_d_secure_required' }],\n                            three_ds_result: {\n                                token: 'token',\n                            },\n                            status: 'error',\n                        }),\n                    );\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                        Promise.reject(errorResponse),\n                    );\n\n                    stripeV3JsMock.confirmCardPayment = jest\n                        .fn()\n                        .mockResolvedValue(getConfirmPaymentResponse());\n\n                    await strategy.initialize(options);\n                    await strategy.execute(getStripeV3OrderRequestBodyVaultMock());\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(stripeV3JsMock.confirmCardPayment).toHaveBeenCalled();\n                });\n\n                it('call confirmCardPayment to shopper auth and complete the payment', async () => {\n                    const errorResponse = new RequestError(\n                        getResponse({\n                            ...getErrorPaymentResponseBody(),\n                            errors: [{ code: 'three_d_secure_required' }],\n                            three_ds_result: {\n                                token: 'token',\n                            },\n                            status: 'error',\n                        }),\n                    );\n\n                    jest.spyOn(\n                        paymentIntegrationService.getState(),\n                        'getPaymentMethodOrThrow',\n                    ).mockReturnValue(getStripeV3('card', false, false));\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                        Promise.reject(errorResponse),\n                    );\n\n                    stripeV3JsMock.confirmCardPayment = jest\n                        .fn()\n                        .mockResolvedValue(getConfirmPaymentResponse());\n\n                    await strategy.initialize(options);\n                    await strategy.execute(getStripeV3OrderRequestBodyMock());\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(2);\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                        2,\n\n                        expect.objectContaining({\n                            methodId: 'card',\n                            paymentData: expect.objectContaining({\n                                formattedPayload: expect.objectContaining({\n                                    confirm: false,\n                                }),\n                            }),\n                        }),\n                    );\n                    expect(stripeV3JsMock.confirmCardPayment).toHaveBeenCalled();\n                });\n\n                it('throws unknown error when using stored instrument', async () => {\n                    const errorResponse = new RequestError(\n                        getResponse(getErrorPaymentResponseBody()),\n                    );\n\n                    jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValue(\n                        Promise.reject(errorResponse),\n                    );\n\n                    await strategy.initialize(options);\n\n                    const promise = strategy.execute(getStripeV3OrderRequestBodyVaultMock());\n\n                    await expect(promise).rejects.toThrow(errorResponse);\n\n                    expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                    expect(paymentIntegrationService.submitPayment).toHaveBeenCalledTimes(1);\n                    expect(stripeV3JsMock.confirmCardPayment).not.toHaveBeenCalled();\n                });\n\n                describe('with individual payment elements', () => {\n                    beforeEach(() => {\n                        options = getStripeV3InitializeOptionsMockSingleElements(true);\n                        jest.spyOn(\n                            paymentIntegrationService.getState(),\n                            'getPaymentMethodOrThrow',\n                        ).mockReturnValue(getStripeV3('card', true));\n                        jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(\n                            Promise.resolve(stripeV3JsMock),\n                        );\n                    });\n\n                    it('test', () => {\n                        expect(1).toBe(1);\n                    });\n\n                    it('without zipcode', async () => {\n                        options = getStripeV3InitializeOptionsMockSingleElements();\n\n                        await strategy.initialize(options);\n\n                        await strategy.execute(getStripeV3OrderRequestBodyMock());\n\n                        expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                        expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalled();\n                        expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                    });\n\n                    describe('with zipcode', () => {\n                        beforeEach(() => {\n                            options = getStripeV3InitializeOptionsMockSingleElements(true);\n                            jest.spyOn(\n                                paymentIntegrationService.getState(),\n                                'getBillingAddress',\n                            ).mockReturnValue(getBillingAddress());\n                        });\n\n                        it('with valid input field', async () => {\n                            const container: HTMLDivElement = document.createElement('input');\n\n                            container.setAttribute('id', 'stripe-postal-code-component-field');\n                            container.setAttribute('value', '90210');\n                            document.body.appendChild(container);\n\n                            await strategy.initialize(options);\n\n                            await strategy.execute(getStripeV3OrderRequestBodyMock());\n\n                            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                            expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalled();\n                            expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n\n                            document.body.removeChild(container);\n                        });\n\n                        it('with invalid container', async () => {\n                            await strategy.initialize(options);\n\n                            await strategy.execute(getStripeV3OrderRequestBodyMock());\n\n                            expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                            expect(stripeV3JsMock.createPaymentMethod).toHaveBeenCalled();\n                            expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n                        });\n                    });\n                });\n            });\n\n            it('with alipay', async () => {\n                paymentMethodMock = {\n                    ...getStripeV3(StripeElementType.Alipay),\n                    clientToken: 'myToken',\n                };\n                jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n                    paymentIntegrationService.getState(),\n                );\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getStripeV3(StripeElementType.Alipay));\n\n                options = getStripeV3InitializeOptionsMock(StripeElementType.Alipay);\n                stripeV3JsMock.confirmAlipayPayment = jest\n                    .fn()\n                    .mockResolvedValue(getConfirmPaymentResponse());\n\n                await strategy.initialize(options);\n\n                await strategy.execute(getStripeV3OrderRequestBodyMock(StripeElementType.Alipay));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n\n                expect(stripeV3JsMock.confirmAlipayPayment).toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n            });\n\n            it('with ideal', async () => {\n                paymentMethodMock = {\n                    ...getStripeV3(StripeElementType.IDEAL),\n                    clientToken: 'myToken',\n                };\n                jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n                    paymentIntegrationService.getState(),\n                );\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getStripeV3(StripeElementType.IDEAL));\n\n                options = getStripeV3InitializeOptionsMock(StripeElementType.IDEAL);\n                stripeV3JsMock.confirmIdealPayment = jest\n                    .fn()\n                    .mockResolvedValue(getConfirmPaymentResponse());\n\n                await strategy.initialize(options);\n\n                await strategy.execute(getStripeV3OrderRequestBodyMock(StripeElementType.IDEAL));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                expect(stripeV3JsMock.confirmIdealPayment).toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n            });\n\n            it('with SEPA', async () => {\n                paymentMethodMock = {\n                    ...getStripeV3(StripeElementType.Sepa),\n                    clientToken: 'myToken',\n                };\n                jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n                    paymentIntegrationService.getState(),\n                );\n\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue(getStripeV3(StripeElementType.Sepa));\n\n                options = getStripeV3InitializeOptionsMock(StripeElementType.Sepa);\n                stripeV3JsMock.confirmSepaDebitPayment = jest\n                    .fn()\n                    .mockResolvedValue(getConfirmPaymentResponse());\n\n                await strategy.initialize(options);\n\n                await strategy.execute(getStripeV3OrderRequestBodyMock(StripeElementType.Sepa));\n\n                expect(paymentIntegrationService.submitOrder).toHaveBeenCalled();\n                expect(stripeV3JsMock.confirmSepaDebitPayment).toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).toHaveBeenCalled();\n            });\n\n            it('throws error when clientToken is undefined', async () => {\n                paymentMethodMock.clientToken = undefined;\n\n                await strategy.initialize(options);\n\n                const promise = strategy.execute(getStripeV3OrderRequestBodyMock());\n\n                await expect(promise).rejects.toThrow(\n                    new MissingDataError(MissingDataErrorType.MissingPaymentMethod),\n                );\n\n                expect(stripeV3JsMock.confirmCardPayment).not.toHaveBeenCalled();\n                expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n            });\n        });\n\n        it('throws an error when payment is not set properly into payload', async () => {\n            const payload = {\n                payment: undefined,\n            };\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentArgumentInvalidError);\n        });\n\n        it('throws an error when payment.paymentData is not set properly into payload', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'stripev3',\n                    paymentData: undefined,\n                },\n            };\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PaymentArgumentInvalidError);\n        });\n    });\n\n    describe('When Hosted Form is enabled', () => {\n        let form: Pick<HostedForm, 'attach' | 'submit' | 'validate' | 'detach'>;\n        let initializeOptions: StripeV3InitializeOptions;\n        let state;\n        const stripeV3JsMock = getStripeV3JsMock();\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                submit: jest.fn(() =>\n                    Promise.resolve({\n                        type: HostedInputEventType.SubmitSucceeded,\n                        payload: {},\n                    } as HostedInputSubmitSuccessEvent),\n                ),\n                validate: jest.fn(() => Promise.resolve()),\n                detach: jest.fn(),\n            };\n            paymentMethodMock = { ...getStripeV3('card', false, true), clientToken: 'myToken' };\n            initializeOptions = getHostedFormInitializeOptions();\n            state = paymentIntegrationService.getState();\n\n            jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(\n                getStripeV3(StripePaymentMethodType.CreditCard, false, true),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'loadCurrentOrder').mockResolvedValue(\n                paymentIntegrationService.getState(),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'createHostedForm').mockReturnValue(\n                form as HostedForm,\n            );\n\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n                paymentIntegrationService.getState(),\n            );\n\n            jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(Promise.resolve(stripeV3JsMock));\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('creates hosted form', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(paymentIntegrationService.createHostedForm).toHaveBeenCalledWith(\n                'https://bigpay.integration.zone',\n                initializeOptions.stripev3?.form,\n            );\n        });\n\n        it('attaches hosted form to container', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(form.attach).toHaveBeenCalled();\n        });\n\n        it('submits payment data with hosted form', async () => {\n            const payload = getOrderRequestBodyVaultedCC();\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.submit).toHaveBeenCalledWith(payload.payment);\n        });\n\n        it('submits payment data with hosted form and client_token', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getStripeV3('card', false, true),\n                clientToken: 'myToken',\n            });\n\n            const payload = getOrderRequestBodyVaultedCC();\n            const expectedPayload = {\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: true,\n                instrumentId: '{\"token\":\"1234\",\"client_token\":\"myToken\"}',\n            };\n\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.submit).toHaveBeenCalledWith(payload.payment);\n            expect(payload.payment?.paymentData).toEqual(expectedPayload);\n        });\n\n        it('validates user input before submitting data', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(getOrderRequestBodyVaultedCC());\n\n            expect(form.validate).toHaveBeenCalled();\n        });\n\n        it('does not submit payment data with hosted form if validation fails', async () => {\n            jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n            try {\n                await strategy.initialize(initializeOptions);\n                await strategy.execute(getOrderRequestBodyVaultedCC());\n            } catch (error) {\n                expect(form.submit).not.toHaveBeenCalled();\n            }\n        });\n\n        it('should detach hostedForm on Deinitialize', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.deinitialize();\n\n            expect(form.detach).toHaveBeenCalled();\n        });\n\n        it('fails creating hosted form', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getStoreConfig').mockReturnValue(\n                undefined,\n            );\n\n            await expect(strategy.initialize(initializeOptions)).rejects.toBeInstanceOf(\n                MissingDataError,\n            );\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws an error to inform that order finalization is not required', async () => {\n            const promise = strategy.finalize();\n\n            await expect(promise).rejects.toBeInstanceOf(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        let cardElement: StripeElement;\n\n        beforeEach(() => {\n            const stripeV3JsMock = getStripeV3JsMock();\n            const elements = stripeV3JsMock.elements();\n\n            cardElement = elements.create(StripeElementType.CreditCard, {});\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getStripeV3());\n            jest.spyOn(stripeScriptLoader, 'load').mockReturnValue(Promise.resolve(stripeV3JsMock));\n            jest.spyOn(stripeV3JsMock, 'elements').mockReturnValue(elements);\n            jest.spyOn(stripeV3JsMock.elements(), 'create').mockReturnValue(cardElement);\n        });\n\n        it('deinitializes stripe payment strategy', async () => {\n            await strategy.initialize(getStripeV3InitializeOptionsMock());\n\n            await strategy.deinitialize();\n\n            expect(cardElement.unmount).toHaveBeenCalledTimes(1);\n        });\n\n        it('validates is stripe element still exists before trying to unmount it', async () => {\n            await strategy.initialize(getStripeV3InitializeOptionsMock());\n            await strategy.deinitialize();\n\n            await strategy.deinitialize();\n\n            expect(cardElement.unmount).toHaveBeenCalledTimes(1);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripev3/stripev3-payment-strategy.ts",
    "content": "import { includes, isEmpty, omitBy, some } from 'lodash';\n\nimport {\n    Address,\n    BillingAddress,\n    Customer,\n    HostedForm,\n    HostedFormOptions,\n    InvalidArgumentError,\n    isBillingAddressLike,\n    isHostedInstrumentLike,\n    isRequestError,\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    PaymentRequestOptions,\n    PaymentStrategy,\n    StripeV3FormattedPayload,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport isIndividualCardElementOptions from './is-individual-card-element-options';\nimport {\n    PaymentIntent,\n    StripeAdditionalAction,\n    StripeAddress,\n    StripeBillingDetails,\n    StripeCardElements,\n    StripeConfirmIdealPaymentData,\n    StripeConfirmPaymentData,\n    StripeConfirmSepaPaymentData,\n    StripeElement,\n    StripeElementOptions,\n    StripeElements,\n    StripeElementType,\n    StripeError,\n    PaymentMethod as StripePaymentMethod,\n    StripePaymentMethodType,\n    StripeV3Client,\n    StripeV3PaymentMethod,\n} from './stripev3';\nimport StripeV3Error, { StripeV3ErrorType } from './stripev3-error';\nimport StripeV3PaymentInitializeOptions, {\n    WithStripeV3PaymentInitializeOptions,\n} from './stripev3-initialize-options';\nimport StripeV3ScriptLoader from './stripev3-script-loader';\n\nconst APM_REDIRECT = [StripeElementType.Alipay, StripeElementType.IDEAL];\n\nexport default class StripeV3PaymentStrategy implements PaymentStrategy {\n    private initializeOptions?: StripeV3PaymentInitializeOptions;\n    private stripeV3Client?: StripeV3Client;\n    private stripeElements?: StripeElements;\n    private stripeElement?: StripeElement;\n    private stripeCardElements?: StripeCardElements;\n    private useIndividualCardFields?: boolean;\n    private hostedForm?: HostedForm;\n    private isDeinitialize?: boolean;\n    private _allowRedisplayForStoredInstruments?: boolean;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private scriptLoader: StripeV3ScriptLoader,\n    ) {}\n\n    async initialize(options: PaymentInitializeOptions & WithStripeV3PaymentInitializeOptions) {\n        const { stripev3, methodId, gatewayId } = options;\n\n        if (!gatewayId) {\n            throw new InvalidArgumentError(\n                'Unable to initialize payment because \"gatewayId\" argument is not provided.',\n            );\n        }\n\n        this.initializeOptions = stripev3;\n        this.isDeinitialize = false;\n\n        const paymentMethod = this.paymentIntegrationService\n            .getState()\n            .getPaymentMethodOrThrow(methodId);\n\n        const {\n            initializationData: {\n                stripePublishableKey,\n                stripeConnectedAccount,\n                useIndividualCardFields,\n                allowRedisplayForStoredInstruments,\n            },\n        } = paymentMethod as StripeV3PaymentMethod;\n\n        this._allowRedisplayForStoredInstruments = allowRedisplayForStoredInstruments;\n\n        const form = this.getInitializeOptions().form;\n\n        this.useIndividualCardFields = useIndividualCardFields;\n        this.stripeV3Client = await this.loadStripeJs(stripePublishableKey, stripeConnectedAccount);\n\n        if (\n            this.isCreditCard(methodId) &&\n            this.shouldShowTSVHostedForm(methodId, gatewayId) &&\n            form\n        ) {\n            this.hostedForm = await this.mountCardVerificationFields(form);\n        } else {\n            this.stripeElement = await this.mountCardFields(methodId);\n        }\n    }\n\n    async execute(orderRequest: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = orderRequest;\n\n        let formattedPayload: StripeV3FormattedPayload;\n        let stripeError: StripeError | undefined;\n\n        if (!payment || !payment.paymentData) {\n            throw new PaymentArgumentInvalidError(['payment.paymentData']);\n        }\n\n        const { paymentData, gatewayId, methodId } = payment;\n\n        const { shouldSaveInstrument, shouldSetAsDefaultInstrument } = isHostedInstrumentLike(\n            paymentData,\n        )\n            ? paymentData\n            : { shouldSaveInstrument: false, shouldSetAsDefaultInstrument: false };\n\n        const shouldSubmitOrderBeforeLoadingAPM = includes(APM_REDIRECT, methodId);\n\n        const { isStoreCreditApplied: useStoreCredit } = this.paymentIntegrationService\n            .getState()\n            .getCheckoutOrThrow();\n\n        if (useStoreCredit) {\n            await this.paymentIntegrationService.applyStoreCredit(useStoreCredit);\n        }\n\n        try {\n            if (shouldSubmitOrderBeforeLoadingAPM) {\n                await this.paymentIntegrationService.submitOrder(order, options);\n            }\n\n            if (gatewayId) {\n                await this.paymentIntegrationService.loadPaymentMethod(gatewayId, {\n                    params: { method: methodId },\n                });\n            }\n\n            const state = this.paymentIntegrationService.getState();\n\n            if (isVaultedInstrument(paymentData)) {\n                await this.paymentIntegrationService.submitOrder(order, options);\n\n                const { instrumentId } = paymentData;\n                const paymentMethod = state.getPaymentMethodOrThrow(payment.methodId);\n                const clientToken = paymentMethod.clientToken;\n\n                if (!clientToken) {\n                    throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n                }\n\n                return await this.executeWithVaulted(\n                    payment,\n                    instrumentId,\n                    shouldSetAsDefaultInstrument,\n                    clientToken,\n                );\n            }\n\n            const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n            const result = await this.confirmStripePayment(paymentMethod);\n            const { clientToken, method } = paymentMethod;\n            const { id: token } = result.paymentIntent ?? result.paymentMethod ?? { id: '' };\n\n            stripeError = result.error;\n\n            formattedPayload = {\n                credit_card_token: { token },\n                vault_payment_instrument: shouldSaveInstrument,\n                confirm: false,\n                set_as_default_stored_instrument: shouldSetAsDefaultInstrument,\n            };\n\n            if (method === StripeElementType.CreditCard) {\n                formattedPayload.client_token = clientToken;\n            }\n\n            if (!shouldSubmitOrderBeforeLoadingAPM) {\n                await this.paymentIntegrationService.submitOrder(order, options);\n            }\n\n            const paymentPayload = this.buildPaymentPayload(\n                methodId,\n                formattedPayload,\n                shouldSetAsDefaultInstrument,\n            );\n\n            await this.paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error) {\n            await this.processAdditionalAction(\n                this.handleEmptyPaymentIntentError(error, stripeError),\n                methodId,\n                shouldSaveInstrument,\n                shouldSetAsDefaultInstrument,\n            );\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        if (this.hostedForm) {\n            this.hostedForm.detach();\n        }\n\n        this.isDeinitialize = true;\n        this.unmountElement();\n\n        return Promise.resolve();\n    }\n\n    private buildPaymentPayload(\n        methodId: string,\n        formattedPayload: StripeV3FormattedPayload,\n        shouldSetAsDefaultInstrument: boolean | undefined,\n    ): Payment {\n        const paymentData = shouldSetAsDefaultInstrument\n            ? {\n                  formattedPayload: {\n                      ...formattedPayload,\n                      set_as_default_stored_instrument: shouldSetAsDefaultInstrument,\n                  },\n              }\n            : { formattedPayload };\n\n        return { methodId, paymentData };\n    }\n\n    private isCancellationError(stripeError: StripeError | undefined) {\n        return (\n            stripeError &&\n            stripeError.payment_intent.last_payment_error?.message?.indexOf('canceled') !== -1\n        );\n    }\n\n    private isAuthError(stripeError: StripeError | undefined) {\n        return stripeError?.code === 'payment_intent_authentication_failure';\n    }\n\n    private isCreditCard(methodId: string): boolean {\n        return methodId === StripePaymentMethodType.CreditCard;\n    }\n\n    private isHostedFieldAvailable(): boolean {\n        const options = this.getInitializeOptions();\n        const definedFields = omitBy(options.form?.fields, isEmpty);\n\n        return !isEmpty(definedFields);\n    }\n\n    private isHostedPaymentFormEnabled(methodId: string, gatewayId?: string): boolean {\n        const { getPaymentMethodOrThrow } = this.paymentIntegrationService.getState();\n        const paymentMethod = getPaymentMethodOrThrow(methodId, gatewayId);\n\n        return Boolean(paymentMethod.config.isHostedFormEnabled);\n    }\n\n    private async confirmStripePayment(paymentMethod: PaymentMethod): Promise<{\n        paymentIntent?: PaymentIntent | undefined;\n        paymentMethod?: StripePaymentMethod | undefined;\n        error?: StripeError | undefined;\n    }> {\n        const { clientToken: clientSecret, method, returnUrl } = paymentMethod;\n\n        if (!clientSecret) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        switch (method) {\n            case StripeElementType.Alipay:\n                return this.getStripeJs().confirmAlipayPayment(\n                    clientSecret,\n                    { return_url: returnUrl },\n                    { handleActions: false },\n                );\n\n            case StripeElementType.IDEAL: {\n                const data = this.mapStripePaymentData(StripePaymentMethodType.IDEAL, returnUrl);\n\n                return this.getStripeJs().confirmIdealPayment(clientSecret, data, {\n                    handleActions: false,\n                });\n            }\n\n            case StripeElementType.Sepa: {\n                const data = this.mapStripePaymentData(StripePaymentMethodType.Sepa);\n\n                return this.getStripeJs().confirmSepaDebitPayment(clientSecret, data);\n            }\n\n            default: {\n                const card = this.useIndividualCardFields\n                    ? this.getStripeCardElements()[0]\n                    : this.getStripeElement();\n                const billingDetails = this.mapStripeBillingDetails(\n                    this.paymentIntegrationService.getState().getBillingAddress(),\n                    this.paymentIntegrationService.getState().getCustomer(),\n                );\n                const shouldAllowRedisplay = this._allowRedisplayForStoredInstruments;\n\n                return this.getStripeJs().createPaymentMethod({\n                    type: StripePaymentMethodType.CreditCard,\n                    card,\n                    billing_details: billingDetails,\n                    ...(shouldAllowRedisplay ? { allow_redisplay: 'always' } : {}),\n                });\n            }\n        }\n    }\n\n    private async executeWithVaulted(\n        payment: OrderPaymentRequestBody,\n        token: string,\n        shouldSetAsDefaultInstrument: boolean | undefined,\n        clientToken: string,\n    ): Promise<any> {\n        const formattedPayload = {\n            bigpay_token: { token },\n            confirm: true,\n            client_token: clientToken,\n            set_as_default_stored_instrument: shouldSetAsDefaultInstrument,\n        };\n\n        if (\n            this.isHostedPaymentFormEnabled(payment.methodId, payment.gatewayId) &&\n            this.hostedForm\n        ) {\n            const form = this.hostedForm;\n\n            if (payment.paymentData && isVaultedInstrument(payment.paymentData)) {\n                payment.paymentData = {\n                    ...payment.paymentData,\n                    instrumentId: JSON.stringify({\n                        token: payment.paymentData?.instrumentId || '',\n                        client_token: clientToken,\n                    }),\n                };\n            }\n\n            await form.validate();\n            await form.submit(payment);\n\n            return this.paymentIntegrationService.loadCurrentOrder();\n        }\n\n        const paymentPayload = this.buildPaymentPayload(\n            payment.methodId,\n            formattedPayload,\n            shouldSetAsDefaultInstrument,\n        );\n\n        return this.paymentIntegrationService.submitPayment(paymentPayload);\n    }\n\n    private getInitializeOptions(): StripeV3PaymentInitializeOptions {\n        if (!this.initializeOptions) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.initializeOptions;\n    }\n\n    private getStripeCardElements(): StripeCardElements {\n        if (!this.stripeCardElements) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.stripeCardElements;\n    }\n\n    private getStripeElement(): StripeElement {\n        if (!this.stripeElement) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.stripeElement;\n    }\n\n    private getStripeJs(): StripeV3Client {\n        if (!this.stripeV3Client) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.stripeV3Client;\n    }\n\n    private handleEmptyPaymentIntentError(error: unknown, stripeError: StripeError | undefined) {\n        if (!isRequestError(error)) {\n            return error;\n        }\n\n        return some(error.body.errors, { code: 'required_field' }) && stripeError\n            ? new Error(stripeError.message)\n            : error;\n    }\n\n    private async loadStripeJs(\n        stripePublishableKey: string,\n        stripeConnectedAccount: string,\n    ): Promise<StripeV3Client> {\n        if (this.stripeV3Client) {\n            return Promise.resolve(this.stripeV3Client);\n        }\n\n        return this.scriptLoader.load(\n            stripePublishableKey,\n            stripeConnectedAccount,\n            this.paymentIntegrationService.getState().getLocale(),\n        );\n    }\n\n    private mapStripeAddress(address?: Address): StripeAddress {\n        if (address) {\n            const {\n                city,\n                countryCode: country,\n                address1: line1,\n                address2: line2,\n                postalCode,\n                stateOrProvinceCode: state,\n            } = address;\n\n            return { city, country, line1, line2, postal_code: postalCode, state };\n        }\n\n        return { line1: '' };\n    }\n\n    private mapStripeBillingDetails(\n        billingAddress?: BillingAddress,\n        customer?: Customer,\n    ): StripeBillingDetails {\n        const { firstName, lastName } = billingAddress ||\n            customer || { firstName: 'Guest', lastName: '' };\n        const name = `${firstName} ${lastName}`.trim();\n        const { options } = this.getInitializeOptions();\n\n        if (this.useIndividualCardFields && isIndividualCardElementOptions(options)) {\n            const { zipCodeElementOptions } = options;\n\n            if (zipCodeElementOptions) {\n                const postalCode = document.getElementById(zipCodeElementOptions.containerId)\n                    ? (\n                          document.getElementById(\n                              zipCodeElementOptions.containerId,\n                          ) as HTMLInputElement\n                      ).value\n                    : '';\n\n                if (postalCode && billingAddress) {\n                    billingAddress = { ...billingAddress, postalCode };\n                }\n            }\n        }\n\n        const address = {\n            address: this.mapStripeAddress(billingAddress),\n        };\n\n        if (customer && customer.addresses[0] && isBillingAddressLike(customer.addresses[0])) {\n            const customerAddress = customer.addresses[0];\n            const { email } = customer;\n            const { phone } = customerAddress;\n\n            return phone ? { ...address, email, name, phone } : { ...address, email, name };\n        }\n\n        if (billingAddress) {\n            const { email, phone } = billingAddress;\n\n            return phone ? { ...address, email, name, phone } : { ...address, email, name };\n        }\n\n        return { ...address, name };\n    }\n\n    private mapStripePaymentData(\n        stripePaymentMethodType: StripePaymentMethodType.IDEAL,\n        returnUrl?: string,\n    ): StripeConfirmIdealPaymentData;\n    private mapStripePaymentData(\n        stripePaymentMethodType: StripePaymentMethodType.Sepa,\n    ): StripeConfirmSepaPaymentData;\n    private mapStripePaymentData(\n        stripePaymentMethodType: StripePaymentMethodType,\n        returnUrl?: string,\n    ): StripeConfirmPaymentData {\n        const customer = this.paymentIntegrationService.getState().getCustomer();\n        const billingAddress = this.paymentIntegrationService.getState().getBillingAddress();\n\n        const result: Partial<StripeConfirmPaymentData> = {\n            payment_method: {\n                [stripePaymentMethodType]: this.getStripeElement(),\n                billing_details: this.mapStripeBillingDetails(billingAddress, customer),\n            },\n        };\n\n        if (stripePaymentMethodType === StripePaymentMethodType.IDEAL) {\n            return { ...result, return_url: returnUrl };\n        }\n\n        return result;\n    }\n\n    private mountCardFields(methodId: string): Promise<StripeElement> {\n        const { options, containerId } = this.getInitializeOptions();\n\n        let stripeElement: StripeElement;\n\n        return new Promise((resolve, reject) => {\n            if (!this.stripeElements) {\n                this.stripeElements = this.getStripeJs().elements();\n            }\n\n            switch (methodId) {\n                case StripeElementType.CreditCard:\n                    if (this.useIndividualCardFields && isIndividualCardElementOptions(options)) {\n                        const {\n                            cardNumberElementOptions,\n                            cardExpiryElementOptions,\n                            cardCvcElementOptions,\n                        } = options;\n\n                        const cardNumberElement =\n                            this.stripeElements.getElement(StripeElementType.CardNumber) ||\n                            this.stripeElements.create(\n                                StripeElementType.CardNumber,\n                                cardNumberElementOptions,\n                            );\n                        const cardExpiryElement =\n                            this.stripeElements.getElement(StripeElementType.CardExpiry) ||\n                            this.stripeElements.create(\n                                StripeElementType.CardExpiry,\n                                cardExpiryElementOptions,\n                            );\n                        const cardCvcElement =\n                            this.stripeElements.getElement(StripeElementType.CardCvc) ||\n                            this.stripeElements.create(\n                                StripeElementType.CardCvc,\n                                cardCvcElementOptions,\n                            );\n\n                        this.stripeCardElements = [\n                            cardNumberElement,\n                            cardExpiryElement,\n                            cardCvcElement,\n                        ];\n                        stripeElement = this.stripeCardElements[0];\n\n                        try {\n                            cardNumberElement.mount(`#${cardNumberElementOptions.containerId}`);\n                            cardExpiryElement.mount(`#${cardExpiryElementOptions.containerId}`);\n                            cardCvcElement.mount(`#${cardCvcElementOptions.containerId}`);\n                        } catch (error) {\n                            if (!this.isDeinitialize) {\n                                reject(\n                                    new InvalidArgumentError(\n                                        'Unable to mount Stripe component without valid container ID.',\n                                    ),\n                                );\n                            }\n                        }\n                    } else {\n                        stripeElement =\n                            this.stripeElements.getElement(methodId) ||\n                            this.stripeElements.create(methodId, options as StripeElementOptions);\n\n                        try {\n                            stripeElement.mount(`#${containerId}`);\n                        } catch (error) {\n                            if (!this.isDeinitialize) {\n                                reject(\n                                    new InvalidArgumentError(\n                                        'Unable to mount Stripe component without valid container ID.',\n                                    ),\n                                );\n                            }\n                        }\n                    }\n\n                    break;\n\n                case StripeElementType.IDEAL:\n                case StripeElementType.Sepa:\n                    stripeElement =\n                        this.stripeElements.getElement(methodId) ||\n                        this.stripeElements.create(methodId, options as StripeElementOptions);\n\n                    try {\n                        stripeElement.mount(`#${containerId}`);\n                    } catch (error) {\n                        if (!this.isDeinitialize) {\n                            reject(\n                                new InvalidArgumentError(\n                                    'Unable to mount Stripe component without valid container ID.',\n                                ),\n                            );\n                        }\n                    }\n\n                    break;\n\n                case StripeElementType.Alipay:\n                    break;\n            }\n\n            resolve(stripeElement);\n        });\n    }\n\n    private async mountCardVerificationFields(formOptions: HostedFormOptions): Promise<HostedForm> {\n        const state = this.paymentIntegrationService.getState();\n        const storeConfig = state.getStoreConfig();\n\n        if (!storeConfig) {\n            throw new MissingDataError(MissingDataErrorType.MissingCheckoutConfig);\n        }\n\n        const bigpayBaseUrl = storeConfig.paymentSettings.bigpayBaseUrl;\n\n        const form = this.paymentIntegrationService.createHostedForm(bigpayBaseUrl, formOptions);\n\n        await form.attach();\n\n        return form;\n    }\n\n    private async processAdditionalAction(\n        error: unknown,\n        methodId: string,\n        shouldSaveInstrument = false,\n        shouldSetAsDefaultInstrument = false,\n    ): Promise<any | never> {\n        if (!isRequestError(error)) {\n            throw error;\n        }\n\n        const isAdditionalActionError = some(error.body.errors, {\n            code: 'additional_action_required',\n        });\n        const isThreeDSecureRequiredError = some(error.body.errors, {\n            code: 'three_d_secure_required',\n        });\n\n        if (isAdditionalActionError) {\n            const action: StripeAdditionalAction = error.body.additional_action_required;\n\n            if (action && action.type === 'redirect_to_url') {\n                return new Promise(() => {\n                    if (action.data.redirect_url) {\n                        window.location.replace(action.data.redirect_url);\n                    }\n                });\n            }\n        }\n\n        if (isThreeDSecureRequiredError) {\n            const clientSecret = error.body.three_ds_result.token;\n            const needsConfirm = false;\n            let catchedConfirmError = false;\n            let result;\n\n            try {\n                result = await this.getStripeJs().confirmCardPayment(clientSecret);\n            } catch (error) {\n                catchedConfirmError = true;\n            }\n\n            if (result?.error) {\n                if (this.isCancellationError(result.error)) {\n                    throw new PaymentMethodCancelledError();\n                }\n\n                if (this.isAuthError(result.error)) {\n                    throw new StripeV3Error(StripeV3ErrorType.AuthFailure);\n                }\n\n                throw new Error(result.error.message);\n            }\n\n            const token = this.getPaymentToken(\n                result?.paymentIntent,\n                clientSecret,\n                catchedConfirmError,\n            );\n\n            const formattedPayload = {\n                credit_card_token: { token },\n                vault_payment_instrument: shouldSaveInstrument,\n                confirm: needsConfirm,\n            };\n\n            const paymentPayload = this.buildPaymentPayload(\n                methodId,\n                formattedPayload,\n                shouldSetAsDefaultInstrument,\n            );\n\n            try {\n                return await this.paymentIntegrationService.submitPayment(paymentPayload);\n            } catch (error) {\n                throw this.handleEmptyPaymentIntentError(error, result?.error);\n            }\n        }\n\n        throw error;\n    }\n\n    private getPaymentToken(\n        paymentIntent: PaymentIntent | undefined,\n        clientSecret: string,\n        catchedConfirmError: boolean,\n    ): string {\n        if (!paymentIntent || catchedConfirmError) {\n            return clientSecret;\n        }\n\n        return paymentIntent.id;\n    }\n\n    private shouldShowTSVHostedForm(methodId: string, gatewayId: string): boolean {\n        return (\n            this.isHostedFieldAvailable() && this.isHostedPaymentFormEnabled(methodId, gatewayId)\n        );\n    }\n\n    private unmountElement(): void {\n        if (this.stripeElement) {\n            this.stripeElement.unmount();\n            this.stripeElement = undefined;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripev3/stripev3-script-loader.spec.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { StripeHostWindow } from './stripev3';\nimport StripeV3ScriptLoader from './stripev3-script-loader';\nimport { getStripeV3JsMock } from './stripev3.mock';\n\ndescribe('StripeV3PayScriptLoader', () => {\n    let stripeV3ScriptLoader: StripeV3ScriptLoader;\n    let scriptLoader: ScriptLoader;\n    let mockWindow: StripeHostWindow;\n\n    beforeEach(() => {\n        mockWindow = {} as StripeHostWindow;\n        scriptLoader = {} as ScriptLoader;\n        stripeV3ScriptLoader = new StripeV3ScriptLoader(scriptLoader, mockWindow);\n    });\n\n    describe('#load()', () => {\n        const stripeV3JsMock = getStripeV3JsMock();\n\n        beforeEach(() => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.Stripe = jest.fn(() => stripeV3JsMock);\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads the JS', async () => {\n            await stripeV3ScriptLoader.load('STRIPE_PUBLIC_KEY', 'STRIPE_CONNECTED_ACCOUNT');\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith('https://js.stripe.com/v3/');\n        });\n\n        it('returns the JS from the window', async () => {\n            const stripeJs = await stripeV3ScriptLoader.load(\n                'STRIPE_PUBLIC_KEY',\n                'STRIPE_CONNECTED_ACCOUNT',\n            );\n\n            expect(stripeJs).toBe(stripeV3JsMock);\n        });\n\n        it('throws an error when window is not set', async () => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.Stripe = undefined;\n\n                return Promise.resolve();\n            });\n\n            try {\n                await stripeV3ScriptLoader.load('STRIPE_PUBLIC_KEY', 'STRIPE_CONNECTED_ACCOUNT');\n            } catch (error) {\n                expect(error).toBeInstanceOf(StandardError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/stripe-integration/src/stripev3/stripev3-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { StripeHostWindow, StripeV3Client } from './stripev3';\n\nexport default class StripeV3ScriptLoader {\n    constructor(\n        private scriptLoader: ScriptLoader,\n        private stripeWindow: StripeHostWindow = window,\n    ) {}\n\n    load(\n        stripePublishableKey: string,\n        stripeAccount: string,\n        locale?: string,\n    ): Promise<StripeV3Client> {\n        return this.scriptLoader.loadScript('https://js.stripe.com/v3/').then(() => {\n            if (!this.stripeWindow.Stripe) {\n                throw new PaymentMethodClientUnavailableError();\n            }\n\n            return this.stripeWindow.Stripe(stripePublishableKey, {\n                stripeAccount,\n                locale,\n                betas: ['payment_intent_beta_3', 'alipay_pm_beta_1'],\n                apiVersion: '2020-03-02;alipay_beta=v1',\n            });\n        });\n    }\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripev3/stripev3.mock.ts",
    "content": "import {\n    HostedFieldType,\n    OrderRequestBody,\n    PaymentInitializeOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getShippingAddress,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    IndividualCardElementOptions,\n    PaymentMethodCreateParams,\n    StripeBillingDetails,\n    StripeConfirmCardPaymentData,\n    StripeElementType,\n    StripeShippingAddress,\n    StripeV3Client,\n} from './stripev3';\nimport StripeV3PaymentInitializeOptions from './stripev3-initialize-options';\n\nexport interface StripeV3InitializeOptions extends PaymentInitializeOptions {\n    stripev3: StripeV3PaymentInitializeOptions;\n}\n\nconst gatewayId = 'stripev3';\n\nexport function getStripeV3JsMock(): StripeV3Client {\n    return {\n        elements: jest.fn(() => {\n            return {\n                create: jest.fn(() => {\n                    return {\n                        mount: jest.fn(),\n                        unmount: jest.fn(),\n                        destroy: jest.fn(),\n                    };\n                }),\n                getElement: jest.fn().mockReturnValue(null),\n            };\n        }),\n        confirmAlipayPayment: jest.fn(),\n        confirmCardPayment: jest.fn(),\n        confirmIdealPayment: jest.fn(),\n        confirmSepaDebitPayment: jest.fn(),\n        createPaymentMethod: jest.fn(),\n        handleCardAction: jest.fn(),\n    };\n}\n\nexport function getFailingStripeV3JsMock(): StripeV3Client {\n    return {\n        elements: jest.fn(() => {\n            return {\n                create: jest.fn(() => {\n                    return {\n                        mount: jest.fn(() => {\n                            throw new Error();\n                        }),\n                        unmount: jest.fn(),\n                        destroy: jest.fn(),\n                    };\n                }),\n                getElement: jest.fn().mockReturnValue(null),\n            };\n        }),\n        confirmAlipayPayment: jest.fn(),\n        confirmCardPayment: jest.fn(),\n        confirmIdealPayment: jest.fn(),\n        confirmSepaDebitPayment: jest.fn(),\n        createPaymentMethod: jest.fn(),\n        handleCardAction: jest.fn(),\n    };\n}\n\nexport function getStripeV3InitializeOptionsMock(\n    stripeElementType: StripeElementType = StripeElementType.CreditCard,\n): PaymentInitializeOptions {\n    return {\n        methodId: stripeElementType,\n        gatewayId,\n        stripev3: {\n            containerId: `stripe-${stripeElementType}-component-field`,\n            options: {\n                classes: {\n                    base: 'form-input optimizedCheckout-form-input',\n                },\n            },\n        },\n    };\n}\n\nexport function getStripeV3InitializeOptionsMockSingleElements(\n    includeZipCode = false,\n): PaymentInitializeOptions {\n    const paymentInitializeOptions: PaymentInitializeOptions = {\n        methodId: StripeElementType.CreditCard,\n        gatewayId,\n    };\n\n    const stripeV3PaymentInitializeOptions: StripeV3PaymentInitializeOptions = {\n        containerId: 'stripe-card-component-field',\n    };\n\n    const individualCardElementOptions: IndividualCardElementOptions = {\n        cardCvcElementOptions: {\n            containerId: 'stripe-cvc-component-field',\n            classes: {\n                base: 'form-input optimizedCheckout-form-input',\n            },\n            placeholder: 'CVV',\n        },\n        cardExpiryElementOptions: {\n            containerId: 'stripe-expiry-component-field',\n            classes: {\n                base: 'form-input optimizedCheckout-form-input',\n            },\n            placeholder: 'MM / YY',\n        },\n        cardNumberElementOptions: {\n            containerId: 'stripe-number-component-field',\n            classes: {\n                base: 'form-input optimizedCheckout-form-input',\n            },\n            placeholder: 'Card number',\n            showIcon: true,\n        },\n    };\n\n    if (includeZipCode) {\n        return {\n            ...paymentInitializeOptions,\n            stripev3: {\n                ...stripeV3PaymentInitializeOptions,\n                options: {\n                    ...individualCardElementOptions,\n                    zipCodeElementOptions: { containerId: 'stripe-postal-code-component-field' },\n                },\n            },\n        };\n    }\n\n    return {\n        ...paymentInitializeOptions,\n        stripev3: {\n            ...stripeV3PaymentInitializeOptions,\n            options: individualCardElementOptions,\n        },\n    };\n}\n\nexport function getStripeV3OrderRequestBodyMock(\n    stripeElementType: StripeElementType = StripeElementType.CreditCard,\n    shouldSaveInstrument = false,\n): OrderRequestBody {\n    return {\n        payment: {\n            methodId: stripeElementType,\n            paymentData: {\n                shouldSaveInstrument,\n            },\n        },\n    };\n}\n\nexport function getStripeV3OrderRequestBodyVaultMock(\n    stripeElementType: StripeElementType = StripeElementType.CreditCard,\n    shouldSetAsDefaultInstrument = false,\n): OrderRequestBody {\n    return {\n        payment: {\n            methodId: stripeElementType,\n            paymentData: {\n                instrumentId: 'token',\n                shouldSetAsDefaultInstrument,\n            },\n        },\n    };\n}\n\nexport function getHostedFormInitializeOptions(): StripeV3InitializeOptions {\n    return {\n        methodId: StripeElementType.CreditCard,\n        gatewayId,\n        stripev3: {\n            containerId: 'stripe-element',\n            form: {\n                fields: {\n                    [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                    [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                    [HostedFieldType.CardName]: { containerId: 'card-name' },\n                },\n            },\n        },\n    };\n}\n\nexport function getOrderRequestBodyVaultedCC(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: {\n            methodId: StripeElementType.CreditCard,\n            gatewayId,\n            paymentData: {\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: true,\n                instrumentId: '1234',\n            },\n        },\n    };\n}\n\nexport function getConfirmPaymentResponse(): unknown {\n    return {\n        paymentIntent: {\n            id: 'pi_1234',\n        },\n    };\n}\n\nexport function getPaymentMethodResponse(): unknown {\n    return {\n        paymentMethod: {\n            id: 'pm_1234',\n        },\n    };\n}\n\nexport function getStripePaymentMethodOptionsWithGuestUserWithoutAddress(): PaymentMethodCreateParams {\n    return {\n        billing_details: {\n            address: { line1: '' },\n            name: 'Guest',\n        },\n    };\n}\n\nexport function getStripeShippingAddress(): StripeShippingAddress {\n    const shippingAddress = getShippingAddress();\n\n    return {\n        address: {\n            city: shippingAddress.city,\n            country: shippingAddress.countryCode,\n            line1: shippingAddress.address1,\n            line2: shippingAddress.address2,\n            postal_code: shippingAddress.postalCode,\n            state: shippingAddress.stateOrProvinceCode,\n        },\n        name: `${shippingAddress.firstName} ${shippingAddress.lastName}`,\n        phone: shippingAddress.phone,\n    };\n}\n\nexport function getStripeBillingAddress(): StripeBillingDetails {\n    const billingAddress = getBillingAddress();\n\n    return {\n        address: {\n            city: billingAddress.city,\n            country: billingAddress.countryCode,\n            line1: billingAddress.address1,\n            line2: billingAddress.address2,\n            postal_code: billingAddress.postalCode,\n            state: billingAddress.stateOrProvinceCode,\n        },\n        name: `${billingAddress.firstName} ${billingAddress.lastName}`,\n        email: billingAddress.email,\n        phone: billingAddress.phone,\n    };\n}\n\nexport function getStripeBillingAddressWithoutPhone(): StripeBillingDetails {\n    const billingAddress = getStripeBillingAddress();\n\n    delete billingAddress.phone;\n\n    return billingAddress;\n}\n\nexport function getStripeShippingAddressGuestUserWithoutAddress(): StripeConfirmCardPaymentData {\n    return {\n        shipping: {\n            address: { line1: '' },\n            name: 'Guest',\n        },\n    };\n}\n"
  },
  {
    "path": "packages/stripe-integration/src/stripev3/stripev3.ts",
    "content": "interface BaseElementOptions {\n    /**\n     * Customize the appearance of an element using CSS properties passed in a [Style](https://stripe.com/docs/js/appendix/style) object,\n     * which consists of CSS properties nested under objects for each variant.\n     */\n    style?: StripeElementStyle;\n\n    /**\n     * Set custom class names on the container DOM element when the Stripe element is in a particular state.\n     */\n    classes?: StripeElementClasses;\n\n    /**\n     * Applies a disabled state to the Element such that user input is not accepted. Default is false.\n     */\n    disabled?: boolean;\n}\n\nexport interface CreatePaymentMethodCardData extends PaymentMethodCreateParams {\n    card?: StripeElement;\n}\n\nexport interface CreatePaymentMethodIdealData extends PaymentMethodCreateParams {\n    ideal?: StripeElement;\n}\n\nexport interface CreatePaymentMethodSepaData extends PaymentMethodCreateParams {\n    sepa_debit?: StripeElement;\n}\n\n/**\n * The PaymentIntent object.\n */\nexport interface PaymentIntent {\n    /**\n     * Unique identifier for the object.\n     */\n    id: string;\n\n    /**\n     * Status of this PaymentIntent. Read more about each PaymentIntent [status](https://stripe.com/docs/payments/intents#intent-statuses).\n     */\n    status: 'succeeded' | string;\n\n    /**\n     * The payment error encountered in the previous PaymentIntent confirmation. It will be cleared if the PaymentIntent is later updated for any reason.\n     */\n    last_payment_error: LastPaymentError | null;\n}\n\n/**\n * The payment error encountered in the previous PaymentIntent confirmation. It will be cleared if the PaymentIntent is later updated for any reason.\n */\nexport interface LastPaymentError {\n    /**\n     * A human-readable message providing more details about the error. For card errors, these messages can be shown to your users.\n     */\n    message?: string;\n}\n\n/**\n * The PaymentMethod object\n */\nexport interface PaymentMethod {\n    /**\n     * Unique identifier for the object.\n     */\n    id: string;\n\n    /**\n     * The type of the PaymentMethod. An additional hash is included on the PaymentMethod with a name matching this value.\n     * It contains additional information specific to the PaymentMethod type.\n     */\n    type: string;\n}\n\nexport interface PaymentMethodCreateParams {\n    /**\n     * Billing information associated with the PaymentMethod that may be used or required by particular types of payment methods.\n     */\n    billing_details?: StripeBillingDetails;\n}\n\nexport interface StripeError {\n    /**\n     * A human-readable message providing more details about the error. For card errors, these messages can be shown to your users.\n     */\n    message?: string;\n\n    /**\n     * The PaymentIntent object.\n     */\n    payment_intent: PaymentIntent;\n\n    /**\n     * A human-readable code for the error obtained\n     */\n    code?: string;\n}\n\n/**\n * CSS properties supported by Stripe.js.\n */\ninterface StripeElementCSSProperties {\n    /**\n     * The [background-color](https://developer.mozilla.org/en-US/docs/Web/CSS/background-color) CSS property.\n     *\n     * This property works best with the `::selection` pseudo-class.\n     * In other cases, consider setting the background color on the element's container instaed.\n     */\n    backgroundColor?: string;\n\n    /**\n     * The [color](https://developer.mozilla.org/en-US/docs/Web/CSS/color) CSS property.\n     */\n    color?: string;\n\n    /**\n     * The [font-family](https://developer.mozilla.org/en-US/docs/Web/CSS/font-family) CSS property.\n     */\n    fontFamily?: string;\n\n    /**\n     * The [font-size](https://developer.mozilla.org/en-US/docs/Web/CSS/font-size) CSS property.\n     */\n    fontSize?: string;\n\n    /**\n     * The [font-smoothing](https://developer.mozilla.org/en-US/docs/Web/CSS/font-smoothing) CSS property.\n     */\n    fontSmoothing?: string;\n\n    /**\n     * The [font-style](https://developer.mozilla.org/en-US/docs/Web/CSS/font-style) CSS property.\n     */\n    fontStyle?: string;\n\n    /**\n     * The [font-variant](https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant) CSS property.\n     */\n    fontVariant?: string;\n\n    /**\n     * The [font-weight](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight) CSS property.\n     */\n    fontWeight?: string;\n\n    /**\n     * A custom property, used to set the color of the icons that are rendered in an element.\n     */\n    iconColor?: string;\n\n    /**\n     * The [line-height](https://developer.mozilla.org/en-US/docs/Web/CSS/line-height) CSS property.\n     *\n     * To avoid cursors being rendered inconsistently across browsers, consider using a padding on the element's container instead.\n     */\n    lineHeight?: string;\n\n    /**\n     * The [letter-spacing](https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing) CSS property.\n     */\n    letterSpacing?: string;\n\n    /**\n     * The [text-align](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align) CSS property.\n     *\n     * Available for the `cardNumber`, `cardExpiry`, and `cardCvc` elements.\n     */\n    textAlign?: string;\n\n    /**\n     * The [padding](https://developer.mozilla.org/en-US/docs/Web/CSS/padding) CSS property.\n     *\n     * Available for the `idealBank` element.\n     * Accepts integer `px` values.\n     */\n    padding?: string;\n\n    /**\n     * The [text-decoration](https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration) CSS property.\n     */\n    textDecoration?: string;\n\n    /**\n     * The [text-shadow](https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow) CSS property.\n     */\n    textShadow?: string;\n\n    /**\n     * The [text-transform](https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform) CSS property.\n     */\n    textTransform?: string;\n}\n\ninterface StripeElementStyleVariant extends StripeElementCSSProperties {\n    ':hover'?: StripeElementCSSProperties;\n\n    ':focus'?: StripeElementCSSProperties;\n\n    '::placeholder'?: StripeElementCSSProperties;\n\n    '::selection'?: StripeElementCSSProperties;\n\n    ':-webkit-autofill'?: StripeElementCSSProperties;\n\n    /**\n     * Available for all elements except the `paymentRequestButton` element\n     */\n    ':disabled'?: StripeElementCSSProperties;\n\n    /**\n     * Available for the `cardNumber`, `cardExpiry`, and `cardCvc` elements.\n     */\n    '::-ms-clear'?: StripeElementCSSProperties & { display: string };\n}\n\nexport interface CardElementOptions extends BaseElementOptions {\n    /**\n     * A pre-filled set of values to include in the input (e.g., {postalCode: '94110'}).\n     * Note that sensitive card information (card number, CVC, and expiration date)\n     * cannot be pre-filled\n     */\n    value?: string;\n\n    /**\n     * Hide the postal code field. Default is false. If you are already collecting a\n     * full billing address or postal code elsewhere, set this to true.\n     */\n    hidePostalCode?: boolean;\n\n    /**\n     * Appearance of the icon in the Element.\n     */\n    iconStyle?: IconStyle;\n\n    /*\n     * Hides the icon in the Element, Default is false\n     */\n    hideIcon?: boolean;\n}\n\ninterface BaseIndividualElementOptions extends BaseElementOptions {\n    containerId: string;\n}\n\nexport interface CardNumberElementOptions extends BaseIndividualElementOptions {\n    /*\n     * Placeholder\n     */\n    placeholder?: string;\n\n    showIcon?: boolean;\n    /**\n     * Appearance of the icon in the Element. Either `solid` or `default`\n     */\n    iconStyle?: IconStyle;\n}\n\nexport interface CardExpiryElementOptions extends BaseIndividualElementOptions {\n    /*\n     * Placeholder\n     */\n    placeholder?: string;\n}\n\nexport interface CardCvcElementOptions extends BaseIndividualElementOptions {\n    /*\n     * Placeholder\n     */\n    placeholder?: string;\n}\n\nexport interface IbanElementOptions extends BaseElementOptions {\n    /**\n     * Specify the list of countries or country-groups whose IBANs you want to allow.\n     * Must be ['SEPA'].\n     */\n    supportedCountries?: string[];\n\n    /**\n     * Customize the country and format of the placeholder IBAN. Default is DE.\n     */\n    placeholderCountry?: string;\n\n    /**\n     * Appearance of the icon in the Element.\n     */\n    iconStyle?: IconStyle;\n}\n\nexport interface IdealElementOptions extends BaseElementOptions {\n    value?: string;\n\n    /**\n     * Hides the icon in the Element. Default is false.\n     */\n    hideIcon?: boolean;\n}\n\nexport interface ZipCodeElementOptions {\n    containerId: string;\n}\n\nexport enum IconStyle {\n    Solid = 'solid',\n    Default = 'default',\n}\n\nexport interface StripeElementStyle {\n    /**\n     * Base variant—all other variants inherit from these styles.\n     */\n    base?: StripeElementStyleVariant;\n\n    /**\n     * Applied when the element has valid input.\n     */\n    complete?: StripeElementStyleVariant;\n\n    /**\n     * Applied when the element has no customer input.\n     */\n    empty?: StripeElementStyleVariant;\n\n    /**\n     * Applied when the element has invalid input.\n     */\n    invalid?: StripeElementStyleVariant;\n}\n\nexport interface StripeElementClasses {\n    /**\n     * The base class applied to the container. Defaults to StripeElement.\n     */\n    base?: string;\n\n    /**\n     * The class name to apply when the Element is complete. Defaults to StripeElement--complete.\n     */\n    complete?: string;\n\n    /**\n     * The class name to apply when the Element is empty. Defaults to StripeElement--empty.\n     */\n    empty?: string;\n\n    /**\n     * The class name to apply when the Element is focused. Defaults to StripeElement--focus.\n     */\n    focus?: string;\n\n    /**\n     * The class name to apply when the Element is invalid. Defaults to StripeElement--invalid.\n     */\n    invalid?: string;\n\n    /**\n     * The class name to apply when the Element has its value autofilled by the browser\n     * (only on Chrome and Safari). Defaults to StripeElement--webkit-autofill.\n     */\n    webkitAutoFill?: string;\n}\n\nexport interface StripeAddress {\n    /**\n     * City, district, suburb, town, or village.\n     */\n    city?: string;\n\n    /**\n     * Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)).\n     */\n    country?: string;\n\n    /**\n     * Address line 1 (e.g., street, PO Box, or company name).\n     */\n    line1: string;\n\n    /**\n     * Address line 2 (e.g., apartment, suite, unit, or building).\n     */\n    line2?: string;\n\n    /**\n     * ZIP or postal code.\n     */\n    postal_code?: string;\n\n    /**\n     * State, county, province, or region.\n     */\n    state?: string;\n}\n\nexport interface StripeBillingDetails {\n    /**\n     * Billing address.\n     */\n    address?: StripeAddress;\n\n    /**\n     * Email address.\n     */\n    email?: string;\n\n    /**\n     * Full name.\n     */\n    name?: string;\n\n    /**\n     * Billing phone number (including extension).\n     */\n    phone?: string;\n}\n\nexport interface StripeShippingAddress {\n    /**\n     * Shipping Address\n     */\n    address: StripeAddress;\n\n    /**\n     * Recipient name\n     */\n    name: string;\n\n    /**\n     * The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc.\n     */\n    carrier?: string;\n\n    /**\n     * Recipient phone (including extension).\n     */\n    phone?: string;\n\n    /**\n     * The tracking number for a physical product, obtained from the delivery service.\n     * If multiple tracking numbers were generated for this purchase, please separate them with commas.\n     */\n    tracking_number?: string;\n}\n\n/**\n * Data to be sent with a `stripe.confirmAlipayPayment` request.\n * Refer to the [Payment Intents API](https://stripe.com/docs/api/payment_intents/confirm) for a full list of parameters.\n */\nexport interface StripeConfirmAlipayPaymentData {\n    /*\n     * If you are [handling next actions yourself](https://stripe.com/docs/payments/payment-intents/verifying-status#next-actions), pass in a return_url. If the subsequent action\n     * is redirect_to_url, this URL will be used on the return path for the redirect.\n     *\n     * @recommended\n     */\n    return_url?: string;\n}\n\n/**\n * Data to be sent with a `stripe.confirmCardPayment` request.\n * Refer to the [Payment Intents API](https://stripe.com/docs/api/payment_intents/confirm) for a full list of parameters.\n */\nexport interface StripeConfirmCardPaymentData {\n    /*\n     * Either the id of an existing [PaymentMethod](https://stripe.com/docs/api/payment_methods), or an object containing data to create a\n     * PaymentMethod with. See the use case sections below for details.\n     *\n     * @recommended\n     */\n    payment_method?: CreatePaymentMethodCardData;\n\n    /*\n     * The [shipping details](https://stripe.com/docs/api/payment_intents/confirm#confirm_payment_intent-shipping) for the payment, if collected.\n     *\n     * @recommended\n     */\n    shipping?: StripeShippingAddress;\n\n    /*\n     * If you are [handling next actions yourself](https://stripe.com/docs/payments/payment-intents/verifying-status#next-actions), pass in a return_url. If the subsequent action\n     * is redirect_to_url, this URL will be used on the return path for the redirect.\n     *\n     * @recommended\n     */\n    return_url?: string;\n\n    /**\n     * Indicates that you intend to make future payments with this PaymentIntent's payment method.\n     *\n     * If present, the payment method used with this PaymentIntent can be [attached](https://stripe.com/docs/api/payment_methods/attach) to a Customer, even after the transaction completes.\n     *\n     * Use `on_session` if you intend to only reuse the payment method when your customer is present in your checkout flow. Use `off_session` if your customer may or may not be in your checkout flow.\n     */\n    setup_future_usage?: 'off_session' | 'on_session' | null;\n}\n\n/**\n * Data to be sent with a `stripe.confirmIdealPayment` request.\n * Refer to the [Payment Intents API](https://stripe.com/docs/api/payment_intents/confirm) for a full list of parameters.\n */\nexport interface StripeConfirmIdealPaymentData {\n    /*\n     * Either the id of an existing [PaymentMethod](https://stripe.com/docs/api/payment_methods), or an object containing data to create a\n     * PaymentMethod with. See the use case sections below for details.\n     *\n     * @recommended\n     */\n    payment_method?: CreatePaymentMethodIdealData;\n\n    /*\n     * If you are [handling next actions yourself](https://stripe.com/docs/payments/payment-intents/verifying-status#next-actions), pass in a return_url. If the subsequent action\n     * is redirect_to_url, this URL will be used on the return path for the redirect.\n     *\n     * @recommended\n     */\n    return_url?: string;\n}\n\n/**\n * Data to be sent with a `stripe.confirmSEPAPayment` request.\n * Refer to the [Payment Intents API](https://stripe.com/docs/api/payment_intents/confirm) for a full list of parameters.\n */\nexport interface StripeConfirmSepaPaymentData {\n    /*\n     * Either the id of an existing [PaymentMethod](https://stripe.com/docs/api/payment_methods), or an object containing data to create a\n     * PaymentMethod with. See the use case sections below for details.\n     *\n     * @recommended\n     */\n    payment_method?: CreatePaymentMethodSepaData;\n}\n\nexport type StripeConfirmPaymentData =\n    | StripeConfirmAlipayPaymentData\n    | StripeConfirmCardPaymentData\n    | StripeConfirmIdealPaymentData\n    | StripeConfirmSepaPaymentData\n    | undefined;\n\nexport type StripeElementOptions =\n    | CardElementOptions\n    | CardExpiryElementOptions\n    | CardNumberElementOptions\n    | CardCvcElementOptions\n    | IdealElementOptions\n    | IbanElementOptions\n    | ZipCodeElementOptions;\n\nexport interface StripeElement {\n    /**\n     * The `element.mount` method attaches your element to the DOM.\n     */\n    mount(domElement: string | HTMLElement): void;\n\n    /**\n     * Removes the element from the DOM and destroys it.\n     * A destroyed element can not be re-activated or re-mounted to the DOM.\n     */\n    destroy(): void;\n\n    /**\n     * Unmounts the element from the DOM.\n     * Call `element.mount` to re-attach it to the DOM.\n     */\n    unmount(): void;\n}\n\nexport interface StripeElements {\n    /**\n     * Creates a `AlipayElement` | `CardElement` | `CardCvcElement` |`CardExpiryElement` | `CardExpiryElement` | `CardNumberElement` | `IdealBankElement` | `IbanElement`.\n     */\n    create(elementType: StripeElementType, options?: StripeElementOptions): StripeElement;\n\n    /**\n     * Looks up a previously created `Element` by its type.\n     */\n    getElement(elementType: StripeElementType): StripeElement | null;\n}\n\n/**\n * This object is used to pass custom fonts when creating an [Elements](https://stripe.com/docs/js/elements_object/create) object.\n */\nexport interface CssFontSource {\n    /**\n     * A relative or absolute URL pointing to a CSS file with [@font-face](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face) definitions, for example:\n     * `https://fonts.googleapis.com/css?family=Open+Sans`\n     * Note that if you are using a [content security policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) (CSP),\n     * [additional directives](https://stripe.com/docs/security#content-security-policy) may be necessary.\n     */\n    cssSrc: string;\n}\n\n/**\n * This object is used to pass custom fonts when creating an [Elements](https://stripe.com/docs/js/elements_object/create) object.\n */\nexport interface CustomFontSource {\n    /**\n     * The name to give the font.\n     */\n    family: string;\n\n    /**\n     * A valid [src](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/src) value pointing to your\n     * custom font file. This is usually (though not always) a link to a file with a .woff , .otf, or .svg suffix.\n     */\n    src: string;\n\n    /**\n     * A valid [font-display](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display) value.\n     */\n    display?: string;\n\n    /**\n     * One of normal, italic, oblique. Defaults to normal.\n     */\n    style?: string;\n\n    /**\n     * A valid [unicode-range](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/unicode-range) value.\n     */\n    unicodeRange?: string;\n\n    /**\n     * A valid [font-weight](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight). Note that this is a string, not a number.\n     */\n    weight?: string;\n}\n\nexport type CustomFont = CssFontSource | CustomFontSource;\n\nexport interface StripeElementsOptions {\n    /**\n     * An array of custom fonts, which elements created from the Elements object can use.\n     * Fonts can be specified as [CssFontSource](https://stripe.com/docs/js/appendix/css_font_source_object)\n     * or [CustomFontSource](https://stripe.com/docs/js/appendix/custom_font_source_object) objects.\n     */\n    fonts?: CustomFont[];\n\n    /**\n     * A [locale](https://stripe.com/docs/js/appendix/supported_locales) to display placeholders and\n     * error strings in. Default is auto (Stripe detects the locale of the browser).\n     * Setting the locale does not affect the behavior of postal code validation—a valid postal code\n     * for the billing country of the card is still required.\n     */\n    locale?: string;\n}\n\nexport interface StripeConfirmPaymentOptions {\n    /**\n     * Set this to false if you want to [manually handle the authorization redirect](https://stripe.com/docs/payments/ideal#handle-redirect). Default is true.\n     */\n    handleActions?: boolean;\n}\n\nexport interface StripeV3Client {\n    /**\n     * Create an `Elements` instance, which manages a group of elements.\n     */\n    elements(options?: StripeElementsOptions): StripeElements;\n\n    /*\n     * @docs https://stripe.com/docs/js/payment_intents/confirm_alipay_payment\n     *\n     * Use `stripe.confirmAlipayPayment` in the Alipay payment method creation flow when the customer submits your payment form.\n     * When called, it will confirm the [PaymentIntent](https://stripe.com/docs/api/payment_intents) with data you provide, and it will automatically\n     * redirect the customer to the authorize the transaction. Once authorization is complete, the customer will be redirected\n     * back to your specified `return_url`. When you confirm a `PaymentIntent`, it needs to have an attached [PaymentMethod](https://stripe.com/docs/api/payment_methods).\n     * In addition to confirming the `PaymentIntent`, this method can automatically create and attach a new `PaymentMethod` for you.\n     * If you have already attached a `PaymentMethod` you can call this method without needing to provide any additional data.\n     * These use cases are detailed in the sections that follow.\n     *\n     * @returns\n     * `stripe.confirmAlipayPayment` by default, will trigger a redirect when successful. If there is an error, or when handling\n     * `next_actions` manually by using the `handleActions: false` option, it will return a `Promise` which resolves with a `result` object.\n     * This object has either:\n     *\n     * - result.paymentIntent: the successful PaymentIntent.\n     * - result.error: an error. Refer to the API reference for all possible errors.\n     *\n     * Note that `stripe.confirmAlipayPayment` may take several seconds to complete. During that time, you should disable your\n     * form from being resubmitted and show a waiting indicator like a spinner. If you receive an error result, you should\n     * be sure to show that error to the customer, re-enable the form, and hide the waiting indicator.\n     */\n    confirmAlipayPayment(\n        /**\n         * The [client secret](https://stripe.com/docs/api/payment_intents/object#payment_intent_object-client_secret) of the PaymentIntent.\n         */\n        clientSecret: string,\n\n        /**\n         * Data to be sent with the request. Refer to the Payment Intents API for a full list of parameters.\n         */\n        data?: StripeConfirmAlipayPaymentData,\n\n        /**\n         * An options object to control the behavior of this method.\n         */\n        options?: StripeConfirmPaymentOptions,\n    ): Promise<{ paymentIntent?: PaymentIntent; error?: StripeError }>;\n\n    /*\n     * @docs https://stripe.com/docs/js/payment_intents/confirm_card_payment\n     *\n     * Use `stripe.confirmCardPayment` when the customer submits your payment form.\n     * When called, it will confirm the [PaymentIntent](https://stripe.com/docs/api/payment_intents)\n     * with `data` you provide and carry out 3DS or other next actions if they are required.\n     *\n     * If you are using [Dynamic 3D Secure](https://stripe.com/docs/payments/3d-secure#three-ds-radar), `stripe.confirmCardPayment` will\n     * trigger your Radar rules to execute and may open a dialog for your customer to authenticate their payment.\n     *\n     * When you confirm a `PaymentIntent`, it needs to have an attached [PaymentMethod](https://stripe.com/docs/api/payment_methods).\n     * In addition to confirming the `PaymentIntent`, this method can automatically create and attach a new `PaymentMethod` for you.\n     * It can also be called with an existing `PaymentMethod`, or if you have already attached a PaymentMethod you can call this\n     * method without needing to provide any additional data. These use cases are detailed in the sections that follow.\n     *\n     * @returns\n     * `stripe.confirmCardPayment` will return a Promise which resolves with a result object.\n     * This object has either:\n     *\n     * - result.paymentIntent: the successful PaymentIntent.\n     * - result.error: an error. Refer to the API reference for all possible errors.\n     *\n     * Note that stripe.confirmCardPayment may take several seconds to complete. During that time, you should disable\n     * your form from being resubmitted and show a waiting indicator like a spinner. If you receive an error result,\n     * you should be sure to show that error to the customer, re-enable the form, and hide the waiting indicator.\n     *\n     * Additionally, `stripe.confirmCardPayment may trigger` a [3D Secure](https://stripe.com/docs/payments/3d-secure) authentication\n     * challenge. This will be shown in a modal dialog and may be confusing for customers using assistive technologies like\n     * screen readers. You should make your form accessible by ensuring that success or error messages are clearly read out\n     * after this method completes.\n     *\n     */\n    confirmCardPayment(\n        /**\n         * The [client secret](https://stripe.com/docs/api/payment_intents/object#payment_intent_object-client_secret) of the PaymentIntent.\n         */\n        clientSecret: string,\n\n        /**\n         * Data to be sent with the request. Refer to the Payment Intents API for a full list of parameters.\n         */\n        data?: StripeConfirmCardPaymentData,\n\n        /**\n         * An options object to control the behavior of this method.\n         */\n        options?: StripeConfirmPaymentOptions,\n    ): Promise<{ paymentIntent?: PaymentIntent; error?: StripeError }>;\n\n    /*\n     * @docs https://stripe.com/docs/js/payment_intents/confirm_ideal_payment\n     *\n     * Use `stripe.confirmIdealPayment` in the [iDEAL Payments with Payment Methods](https://stripe.com/docs/payments/ideal)\n     * flow when the customer submits your payment form. When called, it will confirm the `PaymentIntent` with `data` you\n     * provide, and it will automatically redirect the customer to the authorize the transaction.\n     * Once authorization is complete, the customer will be redirected back to your specified `return_url`.\n     *\n     * When you confirm a `PaymentIntent`, it needs to have an attached [PaymentMethod](https://stripe.com/docs/api/payment_methods).\n     * In addition to confirming the `PaymentIntent`, this method can automatically create and attach a new `PaymentMethod` for you.\n     * It can also be called with an existing `PaymentMethod`, or if you have already attached a PaymentMethod you can call this\n     * method without needing to provide any additional data. These use cases are detailed in the sections that follow.\n     *\n     * @returns\n     * By default, `stripe.confirmIdealPayment` will trigger a redirect when successful. If there is an error, or when handling\n     * next actions manually by using the `handleActions: false` option, it will return a `Promise` which resolves with a `result`\n     * object. This object has either:\n     *\n     * - result.paymentIntent: the successful PaymentIntent.\n     * - result.error: an error. Refer to the API reference for all possible errors.\n     *\n     * Note that `stripe.confirmIdealPayment` may take several seconds to complete. During that time, you should disable\n     * your form from being resubmitted and show a waiting indicator like a spinner. If you receive an error result,\n     * you should be sure to show that error to the customer, re-enable the form, and hide the waiting indicator.\n     */\n    confirmIdealPayment(\n        /**\n         * The [client secret](https://stripe.com/docs/api/payment_intents/object#payment_intent_object-client_secret) of the PaymentIntent.\n         */\n        clientSecret: string,\n\n        /**\n         * Data to be sent with the request. Refer to the Payment Intents API for a full list of parameters.\n         */\n        data?: StripeConfirmIdealPaymentData,\n\n        /**\n         * An options object to control the behavior of this method.\n         */\n        options?: StripeConfirmPaymentOptions,\n    ): Promise<{ paymentIntent?: PaymentIntent; error?: StripeError }>;\n\n    /*\n     *\n     * Use `stripe.confirmSepaDebitPayment` in the [SEPA Direct Debit Payments](https://stripe.com/docs/payments/sepa-debit)\n     * with Payment Methods flow when the customer submits your payment form. When called, it will confirm the\n     * [PaymentIntent](https://stripe.com/docs/api/payment_intents) with `data` you provide. Note that there are some additional\n     * requirements to this flow that are not covered in this reference. Refer to our [integration guide](https://stripe.com/docs/payments/sepa-debit\n     * for more details.\n     *\n     * When you confirm a PaymentIntent, it needs to have an attached PaymentMethod. In addition to confirming the PaymentIntent,\n     * this method can automatically create and attach a new PaymentMethod for you. If you have already attached a\n     * [PaymentMethod](https://stripe.com/docs/api/payment_methods) you can call this method without needing to provide any additional data.\n     * These use cases are detailed in the sections that follow.\n     *\n     * @docs https://stripe.com/docs/js/payment_intents/confirm_sepa_debit_payment\n     */\n    confirmSepaDebitPayment(\n        /**\n         * The [client secret](https://stripe.com/docs/api/payment_intents/object#payment_intent_object-client_secret) of the PaymentIntent.\n         */\n        clientSecret: string,\n\n        /**\n         * Data to be sent with the request. Refer to the [Payment Intents API](https://stripe.com/docs/api/payment_intents/confirm) for a full list of parameters.\n         */\n        data?: StripeConfirmSepaPaymentData,\n    ): Promise<{ paymentIntent?: PaymentIntent; error?: StripeError }>;\n\n    /*\n     * Use stripe.createPaymentMethod to convert payment information collected by elements into a PaymentMethod\n     * object that you safely pass to your server to use in an API call.\n     *\n     * @docs https://stripe.com/docs/js/payment_methods/create_payment_method\n     *\n     * @param type: String, The type of the PaymentMethod to create. Refer to the PaymentMethod API for all possible values.\n     * @param card: StripeElement, A card or cardNumber Element.\n     * @param billing_details: StripeBillingDetails, Billing information associated with the PaymentMethod that\n     * may be used or required by particular types of payment methods.\n     */\n    createPaymentMethod(\n        params: CreatePaymentMethodParams,\n    ): Promise<{ paymentMethod?: PaymentMethod; error?: StripeError }>;\n\n    /*\n     * Use stripe.handleCardAction in the Payment Intents API manual confirmation flow to handle a PaymentIntent\n     * with the requires_action status. It will throw an error if the PaymentIntent has a different status.\n     *\n     * @docs https://stripe.com/docs/js/payment_intents/handle_card_action\n     *\n     * @param paymentIntentClientSecret: String, The client secret of the PaymentIntent to handle.\n     */\n    handleCardAction(\n        paymentIntentClientSecret: string,\n    ): Promise<{ paymentIntent?: PaymentIntent; error?: StripeError }>;\n}\n\nexport interface CreatePaymentMethodParams {\n    type: StripePaymentMethodType;\n    card: StripeElement;\n    billing_details?: StripeBillingDetails;\n    allow_redisplay?: 'always' | 'limited' | 'unspecified';\n}\n\nexport interface StripeHostWindow extends Window {\n    Stripe?(stripePublishableKey: string, options?: StripeConfigurationOptions): StripeV3Client;\n}\n\nexport enum StripeElementType {\n    Alipay = 'alipay',\n    CardCvc = 'cardCvc',\n    CardExpiry = 'cardExpiry',\n    CardNumber = 'cardNumber',\n    CreditCard = 'card',\n    IDEAL = 'idealBank',\n    Sepa = 'iban',\n}\n\nexport enum StripePaymentMethodType {\n    Alipay = 'alipay',\n    CreditCard = 'card',\n    IDEAL = 'ideal',\n    Sepa = 'sepa_debit',\n}\n\n/**\n * Initialization options.\n */\nexport interface StripeConfigurationOptions {\n    /**\n     * For usage with [Connect](https://stripe.com/docs/connect) only.\n     * Specifying a connected account ID (e.g., acct_24BFMpJ1svR5A89k) allows you to perform actions on behalf of that account.\n     */\n    stripeAccount: string;\n\n    /**\n     * Override your account's [API version](https://stripe.com/docs/api/versioning)\n     */\n    apiVersion?: string;\n\n    /**\n     * A locale used to globally configure localization in Stripe. Setting the locale here will localize error strings for all Stripe.js methods. It will also configure the locale for Elements and Checkout. Default is auto (Stripe detects the locale of the browser).\n     * Note that Checkout supports a slightly different set of locales than Stripe.js.\n     */\n    locale?: string;\n\n    betas?: string[];\n}\n\nexport interface StripeAdditionalActionData {\n    redirect_url?: string;\n    intent?: string;\n}\n\nexport interface StripeAdditionalAction {\n    type: string;\n    data: StripeAdditionalActionData;\n}\n\nexport interface StripeCardElements {\n    [index: number]: StripeElement;\n}\n\nexport interface IndividualCardElementOptions {\n    cardCvcElementOptions: CardCvcElementOptions;\n    cardExpiryElementOptions: CardExpiryElementOptions;\n    cardNumberElementOptions: CardNumberElementOptions;\n    zipCodeElementOptions?: ZipCodeElementOptions;\n}\n\nexport interface StripeV3PaymentMethod extends PaymentMethod {\n    initializationData: StripeV3InitializationData;\n}\n\nexport interface StripeV3InitializationData {\n    stripePublishableKey: string;\n    stripeConnectedAccount: string;\n    useIndividualCardFields: boolean;\n    allowRedisplayForStoredInstruments?: boolean;\n}\n"
  },
  {
    "path": "packages/stripe-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n}\n"
  },
  {
    "path": "packages/stripe-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/stripe-utils/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-shadow\": \"off\",\n                \"no-param-reassign\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\",\n                \"@eslint-disable-next-line\": \"off\",\n                \"@typescript-eslint/no-misused-promises\": \"off\"\n\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"jest/no-conditional-expect\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {}\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/stripe-utils/README.md",
    "content": "# stripe-utils\n\nPackage with shared Stripe integration utils.\n\n## Running unit tests\n\nRun `npx nx run stripe-utils:test` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `npx nx run stripe-utils:lint` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/stripe-utils/jest.config.js",
    "content": "module.exports = {\n    displayName: 'stripe-utils',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/stripe-utils',\n    coveragePathIgnorePatterns: ['<rootDir>/src/index.ts'],\n};\n"
  },
  {
    "path": "packages/stripe-utils/project.json",
    "content": "{\n    \"name\": \"stripe-utils\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/stripe-utils/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/stripe-utils/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/stripe-utils\"],\n            \"options\": {\n                \"jestConfig\": \"packages/stripe-utils/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/stripe-utils/src/format-locale.spec.ts",
    "content": "import formatLocale from './format-locale';\n\ndescribe('formatLocale', () => {\n    it('fixes the format of locales with a dash', () => {\n        expect(formatLocale('en_GB')).toBe('en-GB');\n    });\n\n    it('fixes the format of locales with lower case country code', () => {\n        expect(formatLocale('fr-ca')).toBe('fr-CA');\n    });\n\n    it('uses a default locale with unsupported languages', () => {\n        expect(formatLocale('sa')).toBe('auto');\n    });\n\n    it('uses a default locale with invalid input', () => {\n        expect(formatLocale('esp_mex')).toBe('auto');\n    });\n\n    it('only uses the valid part of a string', () => {\n        expect(formatLocale('pt_br_invalid_data')).toBe('pt-BR');\n    });\n\n    it('uses the latin America spanish number if provided', () => {\n        expect(formatLocale('es-419')).toBe('es-419');\n    });\n\n    it('maintains the value of valid locale', () => {\n        expect(formatLocale('zh-HK')).toBe('zh-HK');\n    });\n\n    it('maintains the value of valid language only code', () => {\n        expect(formatLocale('fil')).toBe('fil');\n    });\n});\n"
  },
  {
    "path": "packages/stripe-utils/src/format-locale.ts",
    "content": "import { supportedLocales } from './stripe-supported-locales';\n\nexport default function formatLocale(localeLanguage: string): string {\n    const [language, country] = localeLanguage.replace(/_/g, '-').toLowerCase().split('-');\n    const countryLocales = supportedLocales[language];\n\n    if (!countryLocales) {\n        return 'auto';\n    }\n\n    const formattedLocale = country ? `${language}-${country.toUpperCase()}` : language;\n\n    return countryLocales.indexOf(formattedLocale) > -1 ? formattedLocale : countryLocales[0];\n}\n"
  },
  {
    "path": "packages/stripe-utils/src/index.ts",
    "content": "export {\n    StripeAdditionalActionRequired,\n    StripeAppearanceOptions,\n    StripeAppearanceValues,\n    StripeClient,\n    StripeCustomFont,\n    StripeElement,\n    StripeElementEvent,\n    StripeElements,\n    StripeElementsCreateOptions,\n    StripeElementType,\n    StripeElementUpdateOptions,\n    StripeError,\n    StripeEventType,\n    StripeFormattedPaymentPayload,\n    StripeFormMode,\n    StripeInitializationData,\n    StripeInstrumentSetupFutureUsage,\n    StripeLinkV2Event,\n    StripeLinkV2Options,\n    StripeLinkV2ShippingRate,\n    StripePaymentMethodType,\n    StripePIPaymentMethodOptions,\n    StripePIPaymentMethodSavingOptions,\n    StripeResult,\n    StripeShippingEvent,\n    StripeStringConstants,\n    StripeElementsOptions,\n    StripeEvent,\n    StripeDisplayName,\n    StripeHostWindow,\n    StripeCustomerEvent,\n    StripeJsVersion,\n    StripeCheckoutInstance,\n    StripeInitCheckoutOptions,\n    StripeLoadActionsResultType,\n    StripeCheckoutSession,\n    StripeCheckoutSessionActionResult,\n    StripeCheckoutSessionActions,\n    StripeCheckoutSessionConfirmationError,\n    StripeCheckoutSessionPaymentStatus,\n    StripeSavedPaymentMethod,\n} from './stripe';\nexport {\n    getStripeJsMock,\n    StripeEventMock,\n    getConfirmPaymentResponse,\n    getFailingStripeJsMock,\n    getRetrievePaymentIntentResponseSucceeded,\n    getRetrievePaymentIntentResponseWithError,\n    getStripeCheckoutInstanceMock,\n    getStripeCheckoutSessionActionsMock,\n} from './stripe.mock';\nexport { default as StripePaymentInitializeOptions } from './stripe-initialize-options';\nexport { default as StripeIntegrationService } from './stripe-integration-service';\nexport { default as StripeScriptLoader } from './stripe-script-loader';\nexport { default as formatStripeLocale } from './format-locale';\nexport { isStripePaymentEvent } from './is-stripe-payment-event';\nexport { isStripePaymentMethodLike } from './is-stripe-payment-method-like';\nexport { getStripeIntegrationServiceMock } from './stripe-integration-service.mock';\nexport { STRIPE_UPE_CLIENT_API_VERSION, STRIPE_UPE_CLIENT_BETAS } from './stripe-upe';\n"
  },
  {
    "path": "packages/stripe-utils/src/is-stripe-error.spec.ts",
    "content": "import { isStripeError } from './is-stripe-error';\n\ndescribe('isStripeError', () => {\n    it('should return false if the error is undefined', () => {\n        expect(isStripeError(undefined)).toBe(false);\n    });\n\n    it('should return false if the error is null', () => {\n        expect(isStripeError(null)).toBe(false);\n    });\n\n    it('should return false if the error does not contain type', () => {\n        expect(isStripeError({})).toBe(false);\n    });\n\n    it('should return true if the error is a StripeError', () => {\n        const error = { type: 'some type' };\n\n        expect(isStripeError(error)).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/stripe-utils/src/is-stripe-error.ts",
    "content": "import { StripeError } from './stripe';\n\nexport function isStripeError(error: unknown): error is StripeError {\n    return typeof error === 'object' && error !== null && 'type' in error;\n}\n"
  },
  {
    "path": "packages/stripe-utils/src/is-stripe-payment-event.spec.ts",
    "content": "import { isStripePaymentEvent } from './is-stripe-payment-event';\n\ndescribe('isStripePaymentEvent', () => {\n    it('should return false if event undefined', () => {\n        expect(isStripePaymentEvent(undefined)).toBe(false);\n    });\n\n    it('should return false if event null', () => {\n        expect(isStripePaymentEvent(null)).toBe(false);\n    });\n\n    it('should return false if event does not have value property', () => {\n        const eventMock = {\n            collapsed: false,\n        };\n\n        expect(isStripePaymentEvent(eventMock)).toBe(false);\n    });\n\n    it('should return false if event does not have collapsed property', () => {\n        const eventMock = {\n            value: {},\n        };\n\n        expect(isStripePaymentEvent(eventMock)).toBe(false);\n    });\n\n    it('should return true if event is StripePaymentEvent', () => {\n        const eventMock = {\n            collapsed: false,\n            value: {},\n        };\n\n        expect(isStripePaymentEvent(eventMock)).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/stripe-utils/src/is-stripe-payment-event.ts",
    "content": "import { StripePaymentEvent } from './stripe';\n\nexport const isStripePaymentEvent = (event: unknown): event is StripePaymentEvent => {\n    return typeof event === 'object' && event !== null && 'value' in event && 'collapsed' in event;\n};\n"
  },
  {
    "path": "packages/stripe-utils/src/is-stripe-payment-method-like.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { StripePaymentMethod } from './stripe';\n\nexport function isStripePaymentMethodLike(\n    paymentMethod: PaymentMethod,\n): paymentMethod is StripePaymentMethod {\n    return (\n        typeof paymentMethod === 'object' &&\n        paymentMethod !== null &&\n        'initializationData' in paymentMethod &&\n        (paymentMethod as StripePaymentMethod).initializationData !== undefined &&\n        (paymentMethod as StripePaymentMethod).initializationData !== null &&\n        typeof (paymentMethod as StripePaymentMethod).initializationData === 'object' &&\n        'stripePublishableKey' in (paymentMethod as StripePaymentMethod).initializationData &&\n        'stripeConnectedAccount' in (paymentMethod as StripePaymentMethod).initializationData &&\n        'shopperLanguage' in (paymentMethod as StripePaymentMethod).initializationData &&\n        typeof (paymentMethod as StripePaymentMethod).initializationData.stripePublishableKey !==\n            'undefined' &&\n        typeof (paymentMethod as StripePaymentMethod).initializationData.stripeConnectedAccount !==\n            'undefined' &&\n        typeof (paymentMethod as StripePaymentMethod).initializationData.shopperLanguage !==\n            'undefined'\n    );\n}\n"
  },
  {
    "path": "packages/stripe-utils/src/stripe-initialize-options.ts",
    "content": "import { StripeAppearanceValues } from './stripe';\n\nexport default interface StripePaymentInitializeOptions {\n    /**\n     * The location to insert the credit card number form field.\n     */\n    containerId: string;\n\n    /**\n     * Checkout styles from store theme\n     */\n    style?: Record<string, StripeAppearanceValues>;\n\n    onError?(error?: Error): void;\n\n    render(): void;\n}\n"
  },
  {
    "path": "packages/stripe-utils/src/stripe-integration-service.mock.ts",
    "content": "import {\n    Address,\n    PaymentMethodFailedError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { StripeJsVersion, StripeStringConstants } from './stripe';\nimport StripeIntegrationService from './stripe-integration-service';\nimport { getStripeJsMock } from './stripe.mock';\n\nexport const getStripeIntegrationServiceMock = () =>\n    ({\n        deinitialize: jest.fn(),\n        initCheckoutEventsSubscription: jest.fn(),\n        mountElement: jest.fn(),\n        mapAppearanceVariables: jest.fn(),\n        mapInputAppearanceRules: jest.fn(),\n        throwDisplayableStripeError: jest.fn((message?: string) => {\n            throw new Error(message);\n        }),\n        throwPaymentConfirmationProceedMessage: jest.fn(() => {\n            throw new PaymentMethodFailedError('PaymentMethodFailedError');\n        }),\n        isCancellationError: jest.fn(() => false),\n        isPaymentCompleted: jest.fn(() => Promise.resolve(false)),\n        mapStripePaymentData: jest.fn((return_url?: string) => ({\n            elements: getStripeJsMock().elements({}),\n            redirect: StripeStringConstants.IF_REQUIRED,\n            confirmParams: {\n                payment_method_data: {\n                    billing_details: {\n                        email: 'test@email.com',\n                        address: 'address',\n                        name: 'firstName lastName',\n                    },\n                },\n                ...(return_url ? { return_url } : {}),\n            },\n        })),\n        isAdditionalActionError: jest.fn(() => false),\n        isRedirectAction: jest.fn(() => false),\n        isOnPageAdditionalAction: jest.fn(() => false),\n        updateStripePaymentIntent: jest.fn(() => Promise.resolve()),\n        throwStripeError: jest.fn(() => {\n            throw new Error('throw stripe error');\n        }),\n        getStripeJsVersion: jest.fn(() => StripeJsVersion.V3),\n        mapStripeAddress: jest.fn((address) => ({\n            city: address?.city,\n            country: address?.countryCode,\n            postal_code: address?.postalCode,\n            line1: address?.address1,\n            line2: address?.address2,\n            ...(address?.stateOrProvinceCode ? { state: address.stateOrProvinceCode } : {}),\n        })),\n        getShopperFullName: jest.fn((address: Address) =>\n            `${address?.firstName || ''} ${address?.lastName || ''}`.trim(),\n        ),\n        verifyCheckoutSpamProtection: jest.fn(() => Promise.resolve()),\n    } as unknown as StripeIntegrationService);\n"
  },
  {
    "path": "packages/stripe-utils/src/stripe-integration-service.spec.ts",
    "content": "import {\n    MissingDataError,\n    NotInitializedError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n    StoreConfig,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getBillingAddress,\n    getCheckout,\n    getConfig,\n    getShippingAddress,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport {\n    StripeClient,\n    StripeElement,\n    StripeElements,\n    StripeError,\n    StripeInitializationData,\n    StripeJsVersion,\n    StripePaymentMethodType,\n} from './stripe';\nimport StripePaymentInitializeOptions from './stripe-initialize-options';\nimport StripeIntegrationService from './stripe-integration-service';\nimport StripeScriptLoader from './stripe-script-loader';\nimport {\n    getStripeInitializeOptionsMock,\n    getStripeJsMock,\n    getStripeMock,\n    WithStripePaymentInitializeOptions,\n} from './stripe.mock';\n\ndescribe('StripeIntegrationService', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let stripeIntegrationService: StripeIntegrationService;\n    let initializeOptions: PaymentInitializeOptions & WithStripePaymentInitializeOptions;\n    let stripeupeMock: StripePaymentInitializeOptions;\n    let stripeUPEJsMock: StripeClient;\n    const gatewayId = 'stripeupe';\n    const methodId = StripePaymentMethodType.OCS;\n    const testColor = '#123456';\n    const style = {\n        labelText: testColor,\n        fieldText: testColor,\n        fieldPlaceholderText: testColor,\n        fieldErrorText: testColor,\n        fieldBackground: testColor,\n        fieldInnerShadow: testColor,\n        fieldBorder: testColor,\n    };\n    let stripeElementsMock: StripeElements;\n    let stripeElementMock: StripeElement;\n    let stripeScriptLoader: StripeScriptLoader;\n\n    beforeEach(() => {\n        initializeOptions = getStripeInitializeOptionsMock(StripePaymentMethodType.OCS, style);\n\n        if (!initializeOptions.stripeupe) {\n            initializeOptions.stripeupe = {\n                containerId: 'container',\n                render: jest.fn(),\n            };\n        }\n\n        stripeScriptLoader = {\n            updateStripeElements: jest.fn(),\n        } as unknown as StripeScriptLoader;\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        stripeIntegrationService = new StripeIntegrationService(\n            paymentIntegrationService,\n            stripeScriptLoader,\n        );\n        stripeupeMock = {\n            containerId: 'container',\n            render: jest.fn(),\n        };\n\n        stripeElementMock = {\n            mount: jest.fn(),\n            destroy: jest.fn(),\n            unmount: jest.fn(),\n            on: jest.fn(),\n            update: jest.fn(),\n            collapse: jest.fn(),\n        };\n\n        stripeElementsMock = {\n            create: jest.fn(),\n            getElement: jest.fn(() => stripeElementMock),\n            update: jest.fn(),\n            fetchUpdates: jest.fn(),\n        };\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('#deinitialize', () => {\n        it('should clear subscription', () => {\n            const subscriptionMock = jest.fn();\n\n            jest.spyOn(paymentIntegrationService, 'subscribe').mockImplementation(\n                () => subscriptionMock,\n            );\n\n            stripeIntegrationService.initCheckoutEventsSubscription(\n                gatewayId,\n                methodId,\n                stripeupeMock,\n                stripeElementsMock,\n            );\n            stripeIntegrationService.deinitialize();\n\n            expect(subscriptionMock).toHaveBeenCalled();\n            // eslint-disable-next-line @typescript-eslint/dot-notation, dot-notation\n            expect(stripeIntegrationService['isMounted']).toBe(false);\n        });\n\n        it('should not unsibscribe when subscription is not set', () => {\n            jest.spyOn(paymentIntegrationService, 'subscribe').mockImplementation(undefined);\n\n            stripeIntegrationService.initCheckoutEventsSubscription(\n                gatewayId,\n                methodId,\n                stripeupeMock,\n                stripeElementsMock,\n            );\n            stripeIntegrationService.deinitialize();\n\n            // eslint-disable-next-line @typescript-eslint/dot-notation, dot-notation\n            expect(stripeIntegrationService['checkoutEventsUnsubscribe']).toBeUndefined();\n        });\n    });\n\n    describe('#initCheckoutEventsSubscription', () => {\n        beforeEach(() => {\n            const state = paymentIntegrationService.getState();\n\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(state);\n            jest.spyOn(paymentIntegrationService, 'subscribe').mockImplementation(\n                (subscriber, ...filters) => {\n                    subscriber(state);\n                    filters.forEach((filter) => filter(state));\n\n                    return jest.fn();\n                },\n            );\n            jest.spyOn(state, 'getPaymentMethodOrThrow').mockReturnValue(getStripeMock());\n        });\n\n        it('skip subscription actions if no stripe elements initialized', () => {\n            stripeIntegrationService.initCheckoutEventsSubscription(\n                gatewayId,\n                methodId,\n                stripeupeMock,\n                undefined,\n            );\n\n            expect(paymentIntegrationService.loadPaymentMethod).not.toHaveBeenCalled();\n        });\n\n        it('skip subscription actions if no stripe payment element found', () => {\n            stripeElementsMock.getElement = () => null;\n\n            stripeIntegrationService.initCheckoutEventsSubscription(\n                gatewayId,\n                methodId,\n                stripeupeMock,\n                stripeElementsMock,\n            );\n\n            expect(paymentIntegrationService.loadPaymentMethod).not.toHaveBeenCalled();\n        });\n\n        it('throws error if loadPaymentMethod fails', async () => {\n            stripeupeMock.onError = jest.fn();\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockRejectedValue(\n                new Error(),\n            );\n\n            stripeIntegrationService.initCheckoutEventsSubscription(\n                gatewayId,\n                methodId,\n                stripeupeMock,\n                stripeElementsMock,\n            );\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalled();\n            expect(stripeupeMock.onError).toHaveBeenCalled();\n            expect(stripeElementMock.unmount).not.toHaveBeenCalled();\n        });\n\n        it('unmount stripe payment element if loadPaymentMethod fails', async () => {\n            jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockRejectedValue(\n                new Error(),\n            );\n            jest.spyOn(document, 'getElementById').mockReturnValue(document.createElement('div'));\n\n            stripeIntegrationService.mountElement(stripeElementMock, stripeupeMock.containerId);\n            stripeIntegrationService.initCheckoutEventsSubscription(\n                gatewayId,\n                methodId,\n                stripeupeMock,\n                stripeElementsMock,\n            );\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(stripeElementMock.unmount).toHaveBeenCalled();\n            // eslint-disable-next-line @typescript-eslint/dot-notation, dot-notation\n            expect(stripeIntegrationService['isMounted']).toBe(false);\n        });\n\n        it('mount stripe payment element if not mounted', async () => {\n            jest.spyOn(document, 'getElementById').mockReturnValue(document.createElement('div'));\n\n            stripeIntegrationService.initCheckoutEventsSubscription(\n                gatewayId,\n                methodId,\n                stripeupeMock,\n                stripeElementsMock,\n            );\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(stripeElementsMock.fetchUpdates).toHaveBeenCalled();\n            expect(stripeElementMock.mount).toHaveBeenCalled();\n            // eslint-disable-next-line @typescript-eslint/dot-notation, dot-notation\n            expect(stripeIntegrationService['isMounted']).toBe(true);\n        });\n\n        it('does not mount stripe payment element if already mounted', async () => {\n            jest.spyOn(document, 'getElementById').mockReturnValue(document.createElement('div'));\n\n            stripeIntegrationService.mountElement(stripeElementMock, stripeupeMock.containerId);\n            stripeIntegrationService.initCheckoutEventsSubscription(\n                gatewayId,\n                methodId,\n                stripeupeMock,\n                stripeElementsMock,\n            );\n\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(stripeElementsMock.fetchUpdates).not.toHaveBeenCalled();\n            expect(stripeElementMock.mount).toHaveBeenCalledTimes(1);\n            // eslint-disable-next-line @typescript-eslint/dot-notation, dot-notation\n            expect(stripeIntegrationService['isMounted']).toBe(true);\n        });\n    });\n\n    describe('#mountElement', () => {\n        it('should mount stripe element', () => {\n            jest.spyOn(document, 'getElementById').mockReturnValue(document.createElement('div'));\n\n            stripeIntegrationService.mountElement(stripeElementMock, stripeupeMock.containerId);\n\n            expect(stripeElementMock.mount).toHaveBeenCalled();\n            // eslint-disable-next-line @typescript-eslint/dot-notation, dot-notation\n            expect(stripeIntegrationService['isMounted']).toBe(true);\n        });\n\n        it('should not mount stripe element if container is not found', () => {\n            jest.spyOn(document, 'getElementById').mockReturnValue(null);\n\n            stripeIntegrationService.mountElement(stripeElementMock, stripeupeMock.containerId);\n\n            expect(stripeElementMock.mount).not.toHaveBeenCalled();\n            // eslint-disable-next-line @typescript-eslint/dot-notation, dot-notation\n            expect(stripeIntegrationService['isMounted']).toBe(false);\n        });\n    });\n\n    describe('#mapAppearanceVariables', () => {\n        it('should map appearance variables', () => {\n            expect(stripeIntegrationService.mapAppearanceVariables(style)).toEqual({\n                colorPrimary: testColor,\n                colorBackground: testColor,\n                colorText: testColor,\n                colorDanger: testColor,\n                colorTextSecondary: testColor,\n                colorTextPlaceholder: testColor,\n                colorIcon: testColor,\n            });\n        });\n    });\n\n    describe('#mapInputAppearanceRules', () => {\n        it('should map appearance variables', () => {\n            expect(stripeIntegrationService.mapInputAppearanceRules(style)).toEqual({\n                borderColor: testColor,\n                color: testColor,\n                boxShadow: testColor,\n            });\n        });\n    });\n\n    describe('#throwStripeError', () => {\n        it('throws non stripe error', () => {\n            try {\n                stripeIntegrationService.throwStripeError(new Error('error message'));\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodFailedError);\n            }\n        });\n\n        it('throws stripe displayable error', () => {\n            try {\n                stripeIntegrationService.throwStripeError({\n                    type: 'invalid_request_error',\n                    message: 'error message',\n                } as StripeError);\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n                expect((error as Error).message).toBe('error message');\n            }\n        });\n\n        it('throws stripe cancellation error', () => {\n            try {\n                stripeIntegrationService.throwStripeError({\n                    type: 'non_displayable_type',\n                    message: 'error message',\n                    payment_intent: {\n                        last_payment_error: {\n                            message: 'PaymentIntent was canceled.',\n                        },\n                    },\n                } as StripeError);\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodCancelledError);\n            }\n        });\n    });\n\n    describe('#throwDisplayableStripeError', () => {\n        it('should throw displayable stripe error', () => {\n            try {\n                stripeIntegrationService.throwDisplayableStripeError({\n                    type: 'invalid_request_error',\n                    message: 'error message',\n                } as StripeError);\n            } catch (error) {\n                expect(error).toBeInstanceOf(Error);\n                expect((error as Error).message).toBe('error message');\n            }\n        });\n\n        it('should not throw if it is not stripe error', () => {\n            let err;\n\n            try {\n                stripeIntegrationService.throwDisplayableStripeError({\n                    type: 'any_other_code',\n                    message: 'error message',\n                } as StripeError);\n            } catch (error) {\n                err = error;\n            } finally {\n                expect(err).toBeUndefined();\n            }\n        });\n    });\n\n    describe('#throwPaymentConfirmationProceedMessage', () => {\n        it('throw default error', () => {\n            try {\n                stripeIntegrationService.throwPaymentConfirmationProceedMessage();\n            } catch (error) {\n                expect(error).toBeInstanceOf(PaymentMethodFailedError);\n            }\n        });\n    });\n\n    describe('#isCancellationError', () => {\n        it('should return true if error is cancellation error', () => {\n            expect(\n                stripeIntegrationService.isCancellationError({\n                    type: 'invalid_request_error',\n                    message: 'error message',\n                    payment_intent: {\n                        last_payment_error: {\n                            message: 'PaymentIntent was canceled.',\n                        },\n                    },\n                } as StripeError),\n            ).toBe(true);\n        });\n\n        it('should return false if error is undefined', () => {\n            expect(stripeIntegrationService.isCancellationError(undefined)).toBe(false);\n        });\n\n        it('should return false if error does not contain last payment error', () => {\n            expect(\n                stripeIntegrationService.isCancellationError({\n                    type: 'invalid_request_error',\n                    message: 'error message',\n                    payment_intent: {},\n                } as StripeError),\n            ).toBe(false);\n        });\n\n        it('should return false if error in not cancellation error', () => {\n            expect(\n                stripeIntegrationService.isCancellationError({\n                    type: 'invalid_request_error',\n                    message: 'error message',\n                    payment_intent: {\n                        last_payment_error: {\n                            message: 'PaymentIntent was finished.',\n                        },\n                    },\n                } as StripeError),\n            ).toBe(false);\n        });\n    });\n\n    describe('#isPaymentCompleted', () => {\n        const setConfirmationExperiment = (enabled = true) => {\n            const storeConfig: StoreConfig = {\n                ...getConfig().storeConfig,\n                checkoutSettings: {\n                    ...getConfig().storeConfig.checkoutSettings,\n                    features: {\n                        'PI-626.Block_unnecessary_payment_confirmation_for_StripeUPE': enabled,\n                    },\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getStoreConfigOrThrow',\n            ).mockReturnValue(storeConfig);\n        };\n\n        beforeEach(() => {\n            setConfirmationExperiment(true);\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                retrievePaymentIntent: jest.fn().mockResolvedValue({\n                    paymentIntent: {\n                        status: 'succeeded',\n                    },\n                }),\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(getStripeMock(StripePaymentMethodType.CreditCard));\n        });\n\n        it('returns true if payment intent already completed', async () => {\n            expect(\n                await stripeIntegrationService.isPaymentCompleted(\n                    StripePaymentMethodType.CreditCard,\n                    stripeUPEJsMock,\n                ),\n            ).toBe(true);\n        });\n\n        it('returns false if no client token provided', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getStripeMock(StripePaymentMethodType.CreditCard),\n                clientToken: undefined,\n            });\n\n            expect(\n                await stripeIntegrationService.isPaymentCompleted(\n                    StripePaymentMethodType.CreditCard,\n                    stripeUPEJsMock,\n                ),\n            ).toBe(false);\n        });\n\n        it('returns false if no stripe client', async () => {\n            expect(\n                await stripeIntegrationService.isPaymentCompleted(\n                    StripePaymentMethodType.CreditCard,\n                    undefined,\n                ),\n            ).toBe(false);\n        });\n\n        it('returns false if experiment disabled', async () => {\n            setConfirmationExperiment(false);\n\n            expect(\n                await stripeIntegrationService.isPaymentCompleted(\n                    StripePaymentMethodType.CreditCard,\n                    stripeUPEJsMock,\n                ),\n            ).toBe(false);\n        });\n\n        it('returns false if no payment intent retrieved', async () => {\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                retrievePaymentIntent: jest.fn().mockResolvedValue({\n                    paymentIntent: undefined,\n                }),\n            };\n\n            expect(\n                await stripeIntegrationService.isPaymentCompleted(\n                    StripePaymentMethodType.CreditCard,\n                    stripeUPEJsMock,\n                ),\n            ).toBe(false);\n        });\n\n        it('returns false if payment status not succeed', async () => {\n            stripeUPEJsMock = {\n                ...getStripeJsMock(),\n                retrievePaymentIntent: jest.fn().mockResolvedValue({\n                    paymentIntent: {\n                        status: 'failed',\n                    },\n                }),\n            };\n\n            expect(\n                await stripeIntegrationService.isPaymentCompleted(\n                    StripePaymentMethodType.CreditCard,\n                    stripeUPEJsMock,\n                ),\n            ).toBe(false);\n        });\n    });\n\n    describe('#mapStripePaymentData', () => {\n        beforeEach(() => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n                getBillingAddress(),\n            );\n        });\n\n        it('throws error if stipe elements does not initialized', () => {\n            try {\n                stripeIntegrationService.mapStripePaymentData(undefined);\n            } catch (error) {\n                expect(error).toBeInstanceOf(NotInitializedError);\n            }\n        });\n\n        it('throws error if billing address not defined', () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue(\n                undefined,\n            );\n\n            try {\n                stripeIntegrationService.mapStripePaymentData(stripeElementsMock);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws error if email not defined', () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue({\n                ...getBillingAddress(),\n                email: undefined,\n            });\n\n            try {\n                stripeIntegrationService.mapStripePaymentData(stripeElementsMock);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws error if firstName not defined', () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue({\n                ...getBillingAddress(),\n                firstName: '',\n            });\n\n            try {\n                stripeIntegrationService.mapStripePaymentData(stripeElementsMock);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('throws error if lastName not defined', () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getBillingAddress').mockReturnValue({\n                ...getBillingAddress(),\n                lastName: '',\n            });\n\n            try {\n                stripeIntegrationService.mapStripePaymentData(stripeElementsMock);\n            } catch (error) {\n                expect(error).toBeInstanceOf(MissingDataError);\n            }\n        });\n\n        it('returns mapped payment data', () => {\n            expect(\n                stripeIntegrationService.mapStripePaymentData(stripeElementsMock, 'redirect.url'),\n            ).toEqual({\n                elements: stripeElementsMock,\n                redirect: 'if_required',\n                confirmParams: {\n                    payment_method_data: {\n                        billing_details: {\n                            email: 'test@bigcommerce.com',\n                            address: {\n                                city: 'Some City',\n                                country: 'US',\n                                line1: '12345 Testing Way',\n                                line2: '',\n                                postal_code: '95555',\n                                state: 'CA',\n                            },\n                            name: 'Test Tester',\n                        },\n                    },\n                    return_url: 'redirect.url',\n                },\n            });\n        });\n\n        it('returns mapped payment data with allow_redisplay: always', () => {\n            expect(\n                stripeIntegrationService.mapStripePaymentData(\n                    stripeElementsMock,\n                    'redirect.url',\n                    true,\n                ),\n            ).toEqual({\n                elements: stripeElementsMock,\n                redirect: 'if_required',\n                confirmParams: {\n                    payment_method_data: {\n                        allow_redisplay: 'always',\n                        billing_details: {\n                            email: 'test@bigcommerce.com',\n                            address: {\n                                city: 'Some City',\n                                country: 'US',\n                                line1: '12345 Testing Way',\n                                line2: '',\n                                postal_code: '95555',\n                                state: 'CA',\n                            },\n                            name: 'Test Tester',\n                        },\n                    },\n                    return_url: 'redirect.url',\n                },\n            });\n        });\n\n        it('returns mapped payment data without allow_redisplay: always', () => {\n            expect(\n                stripeIntegrationService.mapStripePaymentData(\n                    stripeElementsMock,\n                    'redirect.url',\n                    false,\n                ),\n            ).toEqual({\n                elements: stripeElementsMock,\n                redirect: 'if_required',\n                confirmParams: {\n                    payment_method_data: {\n                        billing_details: {\n                            email: 'test@bigcommerce.com',\n                            address: {\n                                city: 'Some City',\n                                country: 'US',\n                                line1: '12345 Testing Way',\n                                line2: '',\n                                postal_code: '95555',\n                                state: 'CA',\n                            },\n                            name: 'Test Tester',\n                        },\n                    },\n                    return_url: 'redirect.url',\n                },\n            });\n        });\n    });\n\n    describe('#isAdditionalActionError', () => {\n        it('should return true if error is additional action error', () => {\n            expect(\n                stripeIntegrationService.isAdditionalActionError([\n                    { code: 'additional_action_required' },\n                ]),\n            ).toBe(true);\n        });\n\n        it('should return false if error is not additional action error', () => {\n            expect(stripeIntegrationService.isAdditionalActionError([])).toBe(false);\n        });\n    });\n\n    describe('#isRedirectAction', () => {\n        it('should return true if additional action is redirect action', () => {\n            expect(\n                stripeIntegrationService.isRedirectAction({\n                    type: 'redirect_to_url',\n                    data: { redirect_url: 'url' },\n                }),\n            ).toBe(true);\n        });\n\n        it('should return false if additional action is not redirect action', () => {\n            expect(\n                stripeIntegrationService.isRedirectAction({\n                    type: 'additional_action_requires_payment_method',\n                    data: { token: 'token' },\n                }),\n            ).toBe(false);\n        });\n    });\n\n    describe('#isOnPageAdditionalAction', () => {\n        it('should return true if additional action is on page action', () => {\n            expect(\n                stripeIntegrationService.isOnPageAdditionalAction({\n                    type: 'additional_action_requires_payment_method',\n                    data: { token: 'token' },\n                }),\n            ).toBe(true);\n        });\n\n        it('should return false if additional action is not on page action', () => {\n            expect(\n                stripeIntegrationService.isOnPageAdditionalAction({\n                    type: 'redirect_to_url',\n                    data: { redirect_url: 'url' },\n                }),\n            ).toBe(false);\n        });\n    });\n\n    describe('#updateStripePaymentIntent', () => {\n        it('should trigger payment intent update', async () => {\n            await stripeIntegrationService.updateStripePaymentIntent(gatewayId, methodId);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalled();\n            expect(stripeScriptLoader.updateStripeElements).toHaveBeenCalled();\n        });\n\n        it('should not update Stripe Payment Element if no client token provided', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue({\n                ...getStripeMock(),\n                clientToken: undefined,\n            });\n\n            await stripeIntegrationService.updateStripePaymentIntent(gatewayId, methodId);\n\n            expect(paymentIntegrationService.loadPaymentMethod).toHaveBeenCalled();\n            expect(stripeScriptLoader.updateStripeElements).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('#getStripeJsVersion', () => {\n        it('should return Clover if experiment is true', () => {\n            const initializationData = {\n                useNewStripeJsVersion: true,\n            } as StripeInitializationData;\n\n            expect(stripeIntegrationService.getStripeJsVersion(initializationData)).toBe(\n                StripeJsVersion.CLOVER,\n            );\n        });\n\n        it('should return V3 if experiment is false', () => {\n            const initializationData = {\n                useNewStripeJsVersion: false,\n            } as StripeInitializationData;\n\n            expect(stripeIntegrationService.getStripeJsVersion(initializationData)).toBe(\n                StripeJsVersion.V3,\n            );\n        });\n    });\n\n    describe('#mapStripeAddress', () => {\n        it('should map address fields to Stripe format', () => {\n            const address = getShippingAddress();\n\n            expect(stripeIntegrationService.mapStripeAddress(address)).toEqual({\n                city: 'Some City',\n                country: 'US',\n                postal_code: '95555',\n                line1: '12345 Testing Way',\n                line2: '',\n                state: 'CA',\n            });\n        });\n\n        it('should omit state if stateOrProvinceCode is empty', () => {\n            const address = {\n                ...getShippingAddress(),\n                stateOrProvinceCode: '',\n            };\n\n            const result = stripeIntegrationService.mapStripeAddress(address);\n\n            expect(result).not.toHaveProperty('state');\n        });\n\n        it('should throw MissingDataError if address is undefined', () => {\n            expect(() => stripeIntegrationService.mapStripeAddress(undefined)).toThrow(\n                MissingDataError,\n            );\n        });\n    });\n\n    describe('#getShopperFullName', () => {\n        it('should return full name from address', () => {\n            const address = getShippingAddress();\n\n            expect(stripeIntegrationService.getShopperFullName(address)).toBe('Test Tester');\n        });\n\n        it('should return first name only if last name is empty', () => {\n            const address = { ...getShippingAddress(), lastName: '' };\n\n            expect(stripeIntegrationService.getShopperFullName(address)).toBe('Test');\n        });\n\n        it('should return last name only if first name is empty', () => {\n            const address = { ...getShippingAddress(), firstName: '' };\n\n            expect(stripeIntegrationService.getShopperFullName(address)).toBe('Tester');\n        });\n\n        it('should return empty string if address is undefined', () => {\n            expect(stripeIntegrationService.getShopperFullName(undefined)).toBe('');\n        });\n    });\n\n    describe('#verifyCheckoutSpamProtection', () => {\n        it('runs spam protection when shouldExecuteSpamCheck is true', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue({\n                ...getCheckout(),\n                shouldExecuteSpamCheck: true,\n            });\n\n            await stripeIntegrationService.verifyCheckoutSpamProtection();\n\n            expect(paymentIntegrationService.verifyCheckoutSpamProtection).toHaveBeenCalledTimes(1);\n        });\n\n        it('skips spam protection when shouldExecuteSpamCheck is false', async () => {\n            jest.spyOn(paymentIntegrationService.getState(), 'getCheckoutOrThrow').mockReturnValue({\n                ...getCheckout(),\n                shouldExecuteSpamCheck: false,\n            });\n\n            await stripeIntegrationService.verifyCheckoutSpamProtection();\n\n            expect(paymentIntegrationService.verifyCheckoutSpamProtection).not.toHaveBeenCalled();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/stripe-utils/src/stripe-integration-service.ts",
    "content": "import { includes, some } from 'lodash';\n\nimport {\n    Address,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    PaymentIntegrationService,\n    PaymentMethodCancelledError,\n    PaymentMethodFailedError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { isStripeError } from './is-stripe-error';\nimport {\n    AddressOptions,\n    StripeAdditionalActionRequired,\n    StripeClient,\n    StripeConfirmPaymentData,\n    StripeElement,\n    StripeElements,\n    StripeElementType,\n    StripeError,\n    StripeInitializationData,\n    StripeJsVersion,\n    StripePaymentIntentStatus,\n    StripeStringConstants,\n} from './stripe';\nimport StripePaymentInitializeOptions from './stripe-initialize-options';\nimport StripeScriptLoader from './stripe-script-loader';\n\nexport default class StripeIntegrationService {\n    private isMounted = false;\n    private checkoutEventsUnsubscribe?: () => void;\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private scriptLoader: StripeScriptLoader,\n    ) {}\n\n    deinitialize(): void {\n        this.checkoutEventsUnsubscribe?.();\n        this.isMounted = false;\n    }\n\n    initCheckoutEventsSubscription(\n        gatewayId: string,\n        methodId: string,\n        stripeInitializationOptions: StripePaymentInitializeOptions,\n        stripeElements?: StripeElements,\n    ): void {\n        this.checkoutEventsUnsubscribe = this.paymentIntegrationService.subscribe(\n            async () => {\n                const paymentElement = stripeElements?.getElement(StripeElementType.PAYMENT);\n\n                if (!paymentElement) {\n                    return;\n                }\n\n                try {\n                    await this.updateStripePaymentIntent(gatewayId, methodId);\n                } catch (error) {\n                    if (this.isMounted) {\n                        paymentElement.unmount();\n                        this.isMounted = false;\n                    }\n\n                    if (error instanceof Error) {\n                        stripeInitializationOptions.onError?.(error);\n                    }\n\n                    return;\n                }\n\n                if (!this.isMounted) {\n                    await stripeElements?.fetchUpdates();\n                    this.mountElement(paymentElement, stripeInitializationOptions.containerId);\n                }\n            },\n            (state) => state.getCheckout()?.outstandingBalance,\n            (state) => state.getCheckout()?.coupons,\n        );\n    }\n\n    mountElement(stripeElement: StripeElement, containerId: string): void {\n        if (!document.getElementById(containerId)) {\n            return;\n        }\n\n        stripeElement.mount(`#${containerId}`);\n        this.isMounted = true;\n    }\n\n    mapAppearanceVariables(styles: NonNullable<StripePaymentInitializeOptions['style']>) {\n        return {\n            colorPrimary: styles.fieldInnerShadow,\n            colorBackground: styles.fieldBackground,\n            colorText: styles.labelText,\n            colorDanger: styles.fieldErrorText,\n            colorTextSecondary: styles.labelText,\n            colorTextPlaceholder: styles.fieldPlaceholderText,\n            colorIcon: styles.fieldPlaceholderText,\n        };\n    }\n\n    mapInputAppearanceRules(styles: NonNullable<StripePaymentInitializeOptions['style']>) {\n        return {\n            borderColor: styles.fieldBorder,\n            color: styles.fieldText,\n            boxShadow: styles.fieldInnerShadow,\n        };\n    }\n\n    throwStripeError(stripeError?: unknown): never {\n        if (isStripeError(stripeError)) {\n            this.throwDisplayableStripeError(stripeError);\n\n            if (this.isCancellationError(stripeError)) {\n                throw new PaymentMethodCancelledError();\n            }\n        }\n\n        throw new PaymentMethodFailedError();\n    }\n\n    throwDisplayableStripeError(stripeError: StripeError) {\n        if (\n            includes(['card_error', 'invalid_request_error', 'validation_error'], stripeError.type)\n        ) {\n            throw new Error(stripeError.message);\n        }\n    }\n\n    isCancellationError(stripeError?: StripeError): boolean {\n        const errorMessage = stripeError?.payment_intent.last_payment_error?.message;\n\n        return !!errorMessage && errorMessage.indexOf('canceled') !== -1;\n    }\n\n    throwPaymentConfirmationProceedMessage() {\n        // INFO: for case if payment was successfully confirmed on Stripe side but on BC side something go wrong, request failed and order status hasn't changed yet\n        // For shopper we need to show additional message that BC is waiting for stripe confirmation, to prevent additional payment creation\n        throw new PaymentMethodFailedError(\n            \"We've received your order and are processing your payment. Once the payment is verified, your order will be completed. We will send you an email when it's completed. Please note, this process may take a few minutes depending on the processing times of your chosen method.\",\n        );\n    }\n\n    async isPaymentCompleted(methodId: string, stripeUPEClient?: StripeClient): Promise<boolean> {\n        const state = this.paymentIntegrationService.getState();\n        const paymentMethod = state.getPaymentMethodOrThrow(methodId);\n        const { features } = state.getStoreConfigOrThrow().checkoutSettings;\n\n        if (\n            !paymentMethod.clientToken ||\n            !stripeUPEClient ||\n            !features['PI-626.Block_unnecessary_payment_confirmation_for_StripeUPE']\n        ) {\n            return false;\n        }\n\n        const { paymentIntent } = await stripeUPEClient.retrievePaymentIntent(\n            paymentMethod.clientToken,\n        );\n\n        return paymentIntent?.status === StripePaymentIntentStatus.SUCCEEDED;\n    }\n\n    mapStripePaymentData(\n        stripeElements?: StripeElements,\n        returnUrl?: string,\n        shouldAllowRedisplay = false,\n    ): StripeConfirmPaymentData {\n        const billingAddress = this.paymentIntegrationService.getState().getBillingAddress();\n        const { firstName = '', lastName = '', email = '' } = billingAddress || {};\n        const address = this.mapStripeAddress(billingAddress);\n\n        if (!stripeElements) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        if (!email || !address || !address.city || !address.country || !firstName || !lastName) {\n            throw new MissingDataError(MissingDataErrorType.MissingBillingAddress);\n        }\n\n        return {\n            elements: stripeElements,\n            redirect: StripeStringConstants.IF_REQUIRED,\n            confirmParams: {\n                payment_method_data: {\n                    ...(shouldAllowRedisplay ? { allow_redisplay: 'always' } : {}),\n                    billing_details: {\n                        email,\n                        address,\n                        name: this.getShopperFullName(billingAddress),\n                    },\n                },\n                ...(returnUrl && { return_url: returnUrl }),\n            },\n        };\n    }\n\n    isAdditionalActionError(errors: Array<{ code: string }>): boolean {\n        return some(errors, { code: 'additional_action_required' });\n    }\n\n    isRedirectAction(additionalAction: StripeAdditionalActionRequired): boolean {\n        const {\n            type,\n            data: { redirect_url },\n        } = additionalAction;\n\n        return type === 'redirect_to_url' && !!redirect_url;\n    }\n\n    isOnPageAdditionalAction(additionalAction: StripeAdditionalActionRequired): boolean {\n        const {\n            type,\n            data: { token },\n        } = additionalAction;\n\n        return type === 'additional_action_requires_payment_method' && !!token;\n    }\n\n    async updateStripePaymentIntent(gatewayId: string, methodId: string): Promise<void> {\n        // INFO: to trigger payment intent update on the BE side we need to make stripe config request\n        const state = await this.paymentIntegrationService.loadPaymentMethod(gatewayId, {\n            params: { method: methodId },\n        });\n        const { clientToken } = state.getPaymentMethodOrThrow(methodId);\n\n        if (!clientToken) {\n            // INFO: no need to update Stripe Element if client token is not present\n            return;\n        }\n\n        this.scriptLoader.updateStripeElements({ clientSecret: clientToken });\n    }\n\n    getStripeJsVersion(initializationData: StripeInitializationData): StripeJsVersion {\n        return initializationData.useNewStripeJsVersion\n            ? StripeJsVersion.CLOVER\n            : StripeJsVersion.V3;\n    }\n\n    mapStripeAddress(address?: Address): AddressOptions {\n        if (address) {\n            const {\n                city,\n                address1,\n                address2,\n                countryCode: country,\n                postalCode,\n                stateOrProvinceCode,\n            } = address;\n\n            return {\n                city,\n                country,\n                postal_code: postalCode,\n                line1: address1,\n                line2: address2,\n                ...(stateOrProvinceCode ? { state: stateOrProvinceCode } : {}),\n            };\n        }\n\n        throw new MissingDataError(MissingDataErrorType.MissingBillingAddress);\n    }\n\n    getShopperFullName(address?: Address): string {\n        const { firstName = '', lastName = '' } = address || {};\n\n        return `${firstName} ${lastName}`.trim();\n    }\n\n    async verifyCheckoutSpamProtection(): Promise<void> {\n        const { shouldExecuteSpamCheck } = this.paymentIntegrationService\n            .getState()\n            .getCheckoutOrThrow();\n\n        if (shouldExecuteSpamCheck) {\n            await this.paymentIntegrationService.verifyCheckoutSpamProtection();\n        }\n    }\n}\n"
  },
  {
    "path": "packages/stripe-utils/src/stripe-script-loader.spec.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { StandardError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    StripeCheckoutSession,\n    StripeClient,\n    StripeElementsOptions,\n    StripeHostWindow,\n    StripeInitCheckoutOptions,\n    StripeInitializationData,\n    StripeJsVersion,\n    StripeLoadActionsResultType,\n} from './stripe';\nimport StripeScriptLoader from './stripe-script-loader';\nimport { getStripeCheckoutInstanceMock, getStripeJsMock } from './stripe.mock';\n\ndescribe('StripePayScriptLoader', () => {\n    let stripeScriptLoader: StripeScriptLoader;\n    let scriptLoader: ScriptLoader;\n    let mockWindow: StripeHostWindow;\n\n    const defaultInitializationData: StripeInitializationData = {\n        stripePublishableKey: 'STRIPE_PUBLIC_KEY',\n        stripeConnectedAccount: 'STRIPE_CONNECTED_ACCOUNT',\n        shopperLanguage: 'en-US',\n    };\n    const defaultBetas = ['stripe_beta_feature_key_1', 'stripe_beta_feature_key_2'];\n    const defaultApiVersion = '2020-03-02';\n\n    beforeEach(() => {\n        mockWindow = {} as StripeHostWindow;\n        scriptLoader = {} as ScriptLoader;\n        stripeScriptLoader = new StripeScriptLoader(scriptLoader, mockWindow);\n    });\n\n    describe('#load()', () => {\n        const stripeUPEJsMock = getStripeJsMock();\n        const elementsOptions: StripeElementsOptions = { clientSecret: 'myToken' };\n\n        beforeEach(() => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.Stripe = jest.fn(() => stripeUPEJsMock);\n\n                return Promise.resolve();\n            });\n        });\n\n        it('loads a single instance of StripeUPEClient', async () => {\n            await stripeScriptLoader.getStripeClient(defaultInitializationData);\n            await stripeScriptLoader.getStripeClient(defaultInitializationData);\n\n            expect(scriptLoader.loadScript).toHaveBeenNthCalledWith(1, 'https://js.stripe.com/v3/');\n        });\n\n        it('loads a custom stripe js version', async () => {\n            const stripeJsVersion = 'custom_stripe-js-version';\n\n            await stripeScriptLoader.getStripeClient(\n                defaultInitializationData,\n                'en',\n                stripeJsVersion,\n            );\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                `https://js.stripe.com/${stripeJsVersion}/stripe.js`,\n            );\n        });\n\n        it('loads a single instance of StripeElements', async () => {\n            const getStripeClient = await stripeScriptLoader.getStripeClient(\n                defaultInitializationData,\n            );\n\n            stripeScriptLoader.getElements(getStripeClient, elementsOptions);\n            stripeScriptLoader.getElements(getStripeClient, elementsOptions);\n\n            expect(stripeUPEJsMock.elements).toHaveBeenCalledTimes(1);\n        });\n\n        it('throws an error when window is not set', async () => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.Stripe = undefined;\n\n                return Promise.resolve();\n            });\n\n            const result = stripeScriptLoader.getStripeClient(defaultInitializationData);\n\n            await expect(result).rejects.toBeInstanceOf(StandardError);\n        });\n    });\n\n    describe('#getElements', () => {\n        const stripeFactoryMock = jest.fn(() => getStripeJsMock());\n\n        beforeEach(() => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.Stripe = stripeFactoryMock;\n\n                return Promise.resolve();\n            });\n        });\n\n        it('get stripe client with all initialization data', async () => {\n            await stripeScriptLoader.getStripeClient(\n                defaultInitializationData,\n                'en',\n                StripeJsVersion.V3,\n                defaultBetas,\n                defaultApiVersion,\n            );\n\n            expect(stripeFactoryMock).toHaveBeenCalledWith('STRIPE_PUBLIC_KEY', {\n                betas: defaultBetas,\n                stripeAccount: 'STRIPE_CONNECTED_ACCOUNT',\n                apiVersion: defaultApiVersion,\n                locale: 'en',\n            });\n        });\n\n        it('get stripe client without optional parameters in initialization data', async () => {\n            await stripeScriptLoader.getStripeClient({\n                stripePublishableKey: defaultInitializationData.stripePublishableKey,\n            } as StripeInitializationData);\n\n            expect(stripeFactoryMock).toHaveBeenCalledWith('STRIPE_PUBLIC_KEY', {});\n        });\n    });\n\n    describe('#updateStripeElements', () => {\n        const stripeUPEJsDefaultMock = getStripeJsMock();\n        let updateMock: jest.Mock;\n        let fetchUpdatesMock: jest.Mock;\n        let stripeUPEJsMock: StripeClient;\n        const elementsOptions: StripeElementsOptions = { clientSecret: 'myToken' };\n\n        beforeEach(() => {\n            updateMock = jest.fn();\n            fetchUpdatesMock = jest.fn();\n            stripeUPEJsMock = {\n                ...stripeUPEJsDefaultMock,\n                elements: jest.fn(() => ({\n                    create: jest.fn(() => ({\n                        mount: jest.fn(),\n                        unmount: jest.fn(),\n                        on: jest.fn(),\n                        update: jest.fn(),\n                        destroy: jest.fn(),\n                        collapse: jest.fn(),\n                    })),\n                    getElement: jest.fn().mockReturnValue(null),\n                    update: updateMock,\n                    fetchUpdates: fetchUpdatesMock,\n                })),\n            };\n\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.Stripe = jest.fn(() => stripeUPEJsMock);\n\n                return Promise.resolve();\n            });\n        });\n\n        it('updates stripe elements', async () => {\n            const getStripeClient = await stripeScriptLoader.getStripeClient(\n                defaultInitializationData,\n            );\n\n            await stripeScriptLoader.getElements(getStripeClient, elementsOptions);\n            await stripeScriptLoader.updateStripeElements(elementsOptions);\n\n            expect(updateMock).toHaveBeenCalledTimes(1);\n            expect(updateMock).toHaveBeenCalledWith({ clientSecret: 'myToken' });\n            expect(fetchUpdatesMock).toHaveBeenCalledTimes(1);\n        });\n\n        it('does not update stripe elements if elements does not exist', async () => {\n            await stripeScriptLoader.updateStripeElements(elementsOptions);\n\n            expect(updateMock).not.toHaveBeenCalled();\n            expect(fetchUpdatesMock).not.toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('#getCheckoutSession', () => {\n        const stripeUPEJsDefaultMock = getStripeJsMock();\n        let initCheckoutMock: jest.Mock;\n        let stripeJsMock: StripeClient;\n        let checkoutSessionOptions: StripeInitCheckoutOptions;\n        let getSessionMock: jest.Mock;\n\n        beforeEach(() => {\n            checkoutSessionOptions = { clientSecret: 'session_id_secret_id' };\n            getSessionMock = jest.fn(() =>\n                Promise.resolve({ id: 'session_id' } as StripeCheckoutSession),\n            );\n\n            const checkoutSessionMock = {\n                ...getStripeCheckoutInstanceMock(),\n                loadActions: () =>\n                    Promise.resolve({\n                        type: StripeLoadActionsResultType.SUCCESS,\n                        actions: {\n                            updateEmail: jest.fn(),\n                            getSession: getSessionMock,\n                            confirm: jest.fn(),\n                        },\n                    }),\n            };\n\n            initCheckoutMock = jest.fn(() => Promise.resolve(checkoutSessionMock));\n            stripeJsMock = {\n                ...stripeUPEJsDefaultMock,\n                initCheckout: initCheckoutMock,\n            };\n        });\n\n        it('initializes stripe checkout once', async () => {\n            await stripeScriptLoader.getStripeCheckout(stripeJsMock, checkoutSessionOptions);\n            await stripeScriptLoader.getStripeCheckout(stripeJsMock, checkoutSessionOptions);\n\n            expect(initCheckoutMock).toHaveBeenCalledTimes(1);\n            expect(initCheckoutMock).toHaveBeenCalledWith({ clientSecret: 'session_id_secret_id' });\n        });\n\n        it('reinitializes stripe checkout if checkout session id is different', async () => {\n            await stripeScriptLoader.getStripeCheckout(stripeJsMock, checkoutSessionOptions);\n            await stripeScriptLoader.getStripeCheckout(stripeJsMock, {\n                ...checkoutSessionOptions,\n                clientSecret: 'session_id_new_secret_id',\n            });\n\n            expect(initCheckoutMock).toHaveBeenCalledTimes(2);\n            expect(initCheckoutMock).toHaveBeenNthCalledWith(1, {\n                clientSecret: 'session_id_secret_id',\n            });\n            expect(initCheckoutMock).toHaveBeenNthCalledWith(2, {\n                clientSecret: 'session_id_new_secret_id',\n            });\n        });\n\n        it('reinitializes stripe checkout if checkout actions returns error', async () => {\n            const checkoutSessionMock = {\n                ...getStripeCheckoutInstanceMock(),\n                loadActions: () =>\n                    Promise.resolve({\n                        type: StripeLoadActionsResultType.ERROR,\n                        error: { message: 'checkout actions error' },\n                    }),\n            };\n\n            initCheckoutMock = jest.fn(() => Promise.resolve(checkoutSessionMock));\n            stripeJsMock = {\n                ...stripeUPEJsDefaultMock,\n                initCheckout: initCheckoutMock,\n            };\n\n            await stripeScriptLoader.getStripeCheckout(stripeJsMock, checkoutSessionOptions);\n            await stripeScriptLoader.getStripeCheckout(stripeJsMock, checkoutSessionOptions);\n\n            expect(initCheckoutMock).toHaveBeenCalledTimes(2);\n            expect(initCheckoutMock).toHaveBeenNthCalledWith(1, {\n                clientSecret: 'session_id_secret_id',\n            });\n            expect(initCheckoutMock).toHaveBeenNthCalledWith(2, {\n                clientSecret: 'session_id_secret_id',\n            });\n        });\n\n        it('reinitializes stripe checkout if checkout actions not exists', async () => {\n            const checkoutSessionMock = {\n                ...getStripeCheckoutInstanceMock(),\n                loadActions: () =>\n                    Promise.resolve({\n                        type: StripeLoadActionsResultType.SUCCESS,\n                    }),\n            };\n\n            initCheckoutMock = jest.fn(() => Promise.resolve(checkoutSessionMock));\n            stripeJsMock = {\n                ...stripeUPEJsDefaultMock,\n                initCheckout: initCheckoutMock,\n            };\n\n            await stripeScriptLoader.getStripeCheckout(stripeJsMock, checkoutSessionOptions);\n            await stripeScriptLoader.getStripeCheckout(stripeJsMock, checkoutSessionOptions);\n\n            expect(initCheckoutMock).toHaveBeenCalledTimes(2);\n            expect(initCheckoutMock).toHaveBeenNthCalledWith(1, {\n                clientSecret: 'session_id_secret_id',\n            });\n            expect(initCheckoutMock).toHaveBeenNthCalledWith(2, {\n                clientSecret: 'session_id_secret_id',\n            });\n        });\n\n        it('reinitializes stripe checkout if checkout session is not different', async () => {\n            getSessionMock = jest.fn(() => Promise.resolve(undefined));\n\n            const checkoutSessionMock = {\n                ...getStripeCheckoutInstanceMock(),\n                loadActions: () =>\n                    Promise.resolve({\n                        type: StripeLoadActionsResultType.SUCCESS,\n                        actions: {\n                            updateEmail: jest.fn(),\n                            getSession: getSessionMock,\n                            confirm: jest.fn(),\n                        },\n                    }),\n            };\n\n            initCheckoutMock = jest.fn(() => Promise.resolve(checkoutSessionMock));\n            stripeJsMock = {\n                ...stripeUPEJsDefaultMock,\n                initCheckout: initCheckoutMock,\n            };\n\n            await stripeScriptLoader.getStripeCheckout(stripeJsMock, checkoutSessionOptions);\n            await stripeScriptLoader.getStripeCheckout(stripeJsMock, {\n                ...checkoutSessionOptions,\n                clientSecret: 'session_id_new_secret_id',\n            });\n\n            expect(initCheckoutMock).toHaveBeenCalledTimes(2);\n            expect(initCheckoutMock).toHaveBeenNthCalledWith(1, {\n                clientSecret: 'session_id_secret_id',\n            });\n            expect(initCheckoutMock).toHaveBeenNthCalledWith(2, {\n                clientSecret: 'session_id_new_secret_id',\n            });\n        });\n\n        it('reinitializes stripe checkout if stripe throw an unexpected error', async () => {\n            getSessionMock = jest.fn(() => Promise.resolve(undefined));\n\n            const checkoutSessionMock = {\n                ...getStripeCheckoutInstanceMock(),\n                loadActions: () =>\n                    Promise.reject({\n                        type: StripeLoadActionsResultType.ERROR,\n                        message: 'unexpected error',\n                    }),\n            };\n\n            initCheckoutMock = jest.fn(() => Promise.resolve(checkoutSessionMock));\n            stripeJsMock = {\n                ...stripeUPEJsDefaultMock,\n                initCheckout: initCheckoutMock,\n            };\n\n            await stripeScriptLoader.getStripeCheckout(stripeJsMock, checkoutSessionOptions);\n            await stripeScriptLoader.getStripeCheckout(stripeJsMock, {\n                ...checkoutSessionOptions,\n                clientSecret: 'session_id_new_secret_id',\n            });\n\n            expect(initCheckoutMock).toHaveBeenCalledTimes(2);\n            expect(initCheckoutMock).toHaveBeenNthCalledWith(1, {\n                clientSecret: 'session_id_secret_id',\n            });\n            expect(initCheckoutMock).toHaveBeenNthCalledWith(2, {\n                clientSecret: 'session_id_new_secret_id',\n            });\n        });\n    });\n});\n"
  },
  {
    "path": "packages/stripe-utils/src/stripe-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    StripeCheckoutInstance,\n    StripeClient,\n    StripeElements,\n    StripeElementsOptions,\n    StripeHostWindow,\n    StripeInitCheckoutOptions,\n    StripeInitializationData,\n    StripeJsVersion,\n} from './stripe';\n\nexport default class StripeScriptLoader {\n    constructor(\n        private scriptLoader: ScriptLoader,\n        private stripeWindow: StripeHostWindow = window,\n    ) {}\n\n    async getStripeClient(\n        initializationData: StripeInitializationData,\n        locale?: string,\n        stripeJsVersion?: string,\n        betas?: string[],\n        apiVersion?: string,\n    ): Promise<StripeClient> {\n        if (this.stripeWindow.bcStripeClient) {\n            return this.stripeWindow.bcStripeClient;\n        }\n\n        const stripe = await this.load(stripeJsVersion);\n        const { stripePublishableKey, stripeConnectedAccount } = initializationData;\n        const options = {\n            ...(stripeConnectedAccount ? { stripeAccount: stripeConnectedAccount } : {}),\n            ...(locale ? { locale } : {}),\n            ...(betas ? { betas } : {}),\n            ...(apiVersion ? { apiVersion } : {}),\n        };\n\n        const stripeClient = stripe<StripeClient>(stripePublishableKey, options);\n\n        Object.assign(this.stripeWindow, { bcStripeClient: stripeClient });\n\n        return stripeClient;\n    }\n\n    async getElements(\n        stripeClient: StripeClient,\n        options: StripeElementsOptions,\n    ): Promise<StripeElements> {\n        let stripeElements = this.stripeWindow.bcStripeElements;\n\n        if (!stripeElements) {\n            stripeElements = stripeClient.elements(options);\n\n            Object.assign(this.stripeWindow, { bcStripeElements: stripeElements });\n        } else {\n            await this.updateStripeElements(options);\n        }\n\n        return stripeElements;\n    }\n\n    async updateStripeElements(options: StripeElementsOptions) {\n        const stripeElements = this.stripeWindow.bcStripeElements;\n\n        if (!stripeElements) {\n            return;\n        }\n\n        stripeElements.update(options);\n        await stripeElements.fetchUpdates();\n    }\n\n    async getStripeCheckout(\n        stripeClient: StripeClient,\n        options: StripeInitCheckoutOptions,\n    ): Promise<StripeCheckoutInstance> {\n        let stripeCheckout = await this.getStoredStripeCheckout(options);\n\n        if (!stripeCheckout) {\n            stripeCheckout = await stripeClient.initCheckout(options);\n\n            Object.assign(this.stripeWindow, { bcStripeCheckout: stripeCheckout });\n        }\n\n        return stripeCheckout;\n    }\n\n    private async load(stripeJsVersion?: string) {\n        if (!this.stripeWindow.Stripe) {\n            await this.scriptLoader.loadScript(this.getScriptUrl(stripeJsVersion));\n\n            if (!this.stripeWindow.Stripe) {\n                throw new PaymentMethodClientUnavailableError();\n            }\n        }\n\n        return this.stripeWindow.Stripe;\n    }\n\n    private getScriptUrl(stripeJsVersion?: string) {\n        if (!stripeJsVersion || stripeJsVersion === StripeJsVersion.V3) {\n            return 'https://js.stripe.com/v3/';\n        }\n\n        return `https://js.stripe.com/${stripeJsVersion}/stripe.js`;\n    }\n\n    private async getStoredStripeCheckout(\n        options: StripeInitCheckoutOptions,\n    ): Promise<StripeCheckoutInstance | undefined> {\n        const stripeCheckout = this.stripeWindow.bcStripeCheckout;\n\n        if (!stripeCheckout) {\n            return undefined;\n        }\n\n        try {\n            const { actions, error } = await stripeCheckout.loadActions();\n\n            if (error || !actions) {\n                this.logErrorToConsole(error);\n\n                return undefined;\n            }\n\n            const stripeCheckoutSession = await actions.getSession();\n            const stripeSessionIdFromOptions = options.clientSecret.split('_secret_')[0];\n\n            if (stripeCheckoutSession.id === stripeSessionIdFromOptions) {\n                return stripeCheckout;\n            }\n        } catch (error) {\n            this.logErrorToConsole(error);\n\n            return undefined;\n        }\n\n        return undefined;\n    }\n\n    private logErrorToConsole(error?: unknown) {\n        // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n        error\n            ? console.error(error)\n            : console.error('No stripe checkout actions available on loadActions().');\n    }\n}\n"
  },
  {
    "path": "packages/stripe-utils/src/stripe-supported-locales.ts",
    "content": "export const supportedLocales: Record<string, string[]> = {\n    ar: ['ar'],\n    bg: ['bg'],\n    cs: ['cs'],\n    da: ['da'],\n    de: ['de'],\n    el: ['el'],\n    en: ['en', 'en-GB'],\n    es: ['es', 'es-419'],\n    et: ['et'],\n    fi: ['fi'],\n    fil: ['fil'],\n    fr: ['fr', 'fr-CA'],\n    he: ['he'],\n    hr: ['hr'],\n    hu: ['hu'],\n    id: ['id'],\n    it: ['it'],\n    ja: ['ja'],\n    ko: ['ko'],\n    lt: ['lt'],\n    lv: ['lv'],\n    ms: ['ms'],\n    mt: ['mt'],\n    nb: ['nb'],\n    nl: ['nl'],\n    pl: ['pl'],\n    pt: ['pt', 'pt-BR'],\n    ro: ['ro'],\n    ru: ['ru'],\n    sk: ['sk'],\n    sl: ['sl'],\n    sv: ['sv'],\n    th: ['th'],\n    tr: ['tr'],\n    vi: ['vi'],\n    zh: ['zh', 'zh-HK', 'zh-TW'],\n};\n"
  },
  {
    "path": "packages/stripe-utils/src/stripe-upe/index.ts",
    "content": "export * from './stripe-upe-constants';\n"
  },
  {
    "path": "packages/stripe-utils/src/stripe-upe/stripe-upe-constants.ts",
    "content": "export const STRIPE_UPE_CLIENT_BETAS = [\n    'payment_element_beta_2',\n    'alipay_pm_beta_1',\n    'link_default_integration_beta_1',\n    'shipping_address_element_beta_1',\n    'address_element_beta_1',\n];\n\nexport const STRIPE_UPE_CLIENT_API_VERSION = '2020-03-02;alipay_beta=v1;link_beta=v1';\n"
  },
  {
    "path": "packages/stripe-utils/src/stripe.mock.ts",
    "content": "import {\n    OrderRequestBody,\n    PaymentInitializeOptions,\n    PaymentMethod,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    StripeCheckoutInstance,\n    StripeCheckoutSession,\n    StripeCheckoutSessionActions,\n    StripeClient,\n    StripeElement,\n    StripeLoadActionsResultType,\n    StripePaymentMethodType,\n} from './stripe';\nimport StripePaymentInitializeOptions from './stripe-initialize-options';\n\nconst gatewayId = 'stripeupe';\n\nexport interface WithStripePaymentInitializeOptions {\n    stripeupe?: StripePaymentInitializeOptions;\n    stripeocs?: StripePaymentInitializeOptions;\n}\n\nexport const StripeEventMock = {\n    complete: false,\n    elementType: 'type',\n    empty: true,\n    value: {\n        type: StripePaymentMethodType.CreditCard,\n    },\n};\n\nexport function getStripeMock(method = 'card'): PaymentMethod {\n    return {\n        id: method,\n        logoUrl: '',\n        method,\n        supportedCards: [],\n        config: {\n            displayName: 'Stripe',\n            merchantId: '',\n            testMode: true,\n        },\n        initializationData: {\n            stripePublishableKey: 'key',\n            stripeConnectedAccount: 'key',\n            browserLanguageEnabled: false,\n            shopperLanguage: 'en',\n            allowRedisplayForStoredInstruments: true,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: 'clientToken',\n        returnUrl: 'http://www.example.com',\n        skipRedirectConfirmationAlert: true,\n    };\n}\n\nexport function getStripeElementMock(): StripeElement {\n    return {\n        mount: jest.fn(),\n        unmount: jest.fn(),\n        on: jest.fn((_, callback) => callback(StripeEventMock)),\n        update: jest.fn(),\n        destroy: jest.fn(),\n        collapse: jest.fn(),\n    };\n}\n\nexport function getStripeJsMock(): StripeClient {\n    return {\n        elements: jest.fn(() => ({\n            create: jest.fn(() => getStripeElementMock()),\n            getElement: jest.fn().mockReturnValue(null),\n            update: jest.fn(),\n            fetchUpdates: jest.fn(),\n        })),\n        confirmPayment: jest.fn(),\n        confirmCardPayment: jest.fn(),\n        retrievePaymentIntent: jest.fn(),\n        initCheckout: jest.fn(() => Promise.resolve(getStripeCheckoutInstanceMock())),\n    };\n}\n\nexport function getFailingStripeJsMock(): StripeClient {\n    return {\n        elements: jest.fn(() => ({\n            create: jest.fn(() => getStripeElementMock()),\n            getElement: jest.fn().mockReturnValue(null),\n            update: jest.fn(),\n            fetchUpdates: jest.fn(),\n        })),\n        confirmPayment: jest.fn(),\n        confirmCardPayment: jest.fn(),\n        retrievePaymentIntent: jest.fn(),\n        initCheckout: jest.fn(() => Promise.resolve(getStripeCheckoutInstanceMock())),\n    };\n}\n\nexport function getStripeInitializeOptionsMock(\n    stripePaymentMethodType: StripePaymentMethodType = StripePaymentMethodType.CreditCard,\n    style: { [key: string]: string } = { fieldText: '#ccc' },\n): PaymentInitializeOptions & WithStripePaymentInitializeOptions {\n    return {\n        methodId: stripePaymentMethodType,\n        gatewayId,\n        stripeupe: {\n            containerId: `stripe-${stripePaymentMethodType}-component-field`,\n            style,\n            render: jest.fn(),\n        },\n    };\n}\n\nexport function getOrderRequestBodyVaultedCC(): OrderRequestBody {\n    return {\n        useStoreCredit: false,\n        payment: {\n            methodId: StripePaymentMethodType.CreditCard,\n            gatewayId,\n            paymentData: {\n                shouldSaveInstrument: true,\n                shouldSetAsDefaultInstrument: true,\n                instrumentId: '1234',\n            },\n        },\n    };\n}\n\nexport function getConfirmPaymentResponse(): unknown {\n    return {\n        paymentIntent: {\n            id: 'pi_1234',\n        },\n    };\n}\n\nexport function getRetrievePaymentIntentResponse(): unknown {\n    return {\n        paymentIntent: {\n            id: 'pi_1234',\n            status: 'requires_action',\n        },\n    };\n}\n\nexport function getPaymentMethodResponse(): unknown {\n    return {\n        paymentMethod: {\n            id: 'pm_1234',\n        },\n    };\n}\n\nexport function getRetrievePaymentIntentResponseSucceeded() {\n    return {\n        paymentIntent: {\n            id: 'pi_1234',\n            status: 'succeeded',\n        },\n    };\n}\n\nexport function getRetrievePaymentIntentResponseWithError() {\n    return {\n        paymentIntent: {\n            id: 'pi_1234',\n        },\n        error: new Error('retrieve_payment_intent_response_with_error'),\n    };\n}\n\nexport function getStripeCheckoutSessionActionsMock(): StripeCheckoutSessionActions {\n    return {\n        updateEmail: jest.fn(),\n        getSession: jest.fn(() => Promise.resolve({} as StripeCheckoutSession)),\n        confirm: jest.fn(),\n        updateShippingAddress: jest.fn(),\n        updateBillingAddress: jest.fn(),\n    };\n}\n\nexport function getStripeCheckoutInstanceMock(): StripeCheckoutInstance {\n    return {\n        loadActions: () =>\n            Promise.resolve({\n                type: StripeLoadActionsResultType.SUCCESS,\n                actions: getStripeCheckoutSessionActionsMock(),\n            }),\n        createPaymentElement: jest.fn(() => getStripeElementMock()),\n        getPaymentElement: jest.fn().mockReturnValue(null),\n        getCurrencySelectorElement: jest.fn().mockReturnValue(null),\n        createCurrencySelectorElement: jest.fn(() => getStripeElementMock()),\n    };\n}\n"
  },
  {
    "path": "packages/stripe-utils/src/stripe.ts",
    "content": "import { PaymentMethod } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\n/**\n * Initialization options.\n */\nexport interface StripeConfigurationOptions {\n    /**\n     * For usage with [Connect](https://stripe.com/docs/connect) only.\n     * Specifying a connected account ID (e.g., acct_24BFMpJ1svR5A89k) allows you to perform actions on behalf of that account.\n     */\n    stripeAccount?: string;\n\n    /**\n     * Override your account's [API version](https://stripe.com/docs/api/versioning)\n     */\n    apiVersion?: string;\n\n    /**\n     * A locale used to globally configure localization in Stripe. Setting the locale here will localize error strings for all Stripe.js methods. It will also configure the locale for Elements and Checkout. Default is auto (Stripe detects the locale of the browser).\n     * Note that Checkout supports a slightly different set of locales than Stripe.js.\n     */\n    locale?: string;\n\n    betas?: string[];\n}\n\nexport interface StripeAdditionalActionData {\n    redirect_url?: string;\n    intent?: string;\n}\n\nexport interface StripeAdditionalAction {\n    type: string;\n    data: StripeAdditionalActionData;\n}\n\n/**\n * The PaymentIntent object.\n */\nexport interface PaymentIntent {\n    /**\n     * Unique identifier for the object.\n     */\n    id: string;\n\n    /**\n     * The client secret of the PaymentIntent. Used for client-side retrieval using a publishable key.\n     */\n    client_secret?: string;\n\n    /**\n     * Status of this PaymentIntent. Read more about each PaymentIntent [status](https://stripe.com/docs/payments/intents#intent-statuses).\n     */\n    status: 'succeeded' | string;\n\n    /**\n     * The payment error encountered in the previous PaymentIntent confirmation. It will be cleared if the PaymentIntent is later updated for any reason.\n     */\n    last_payment_error: LastPaymentError | null;\n\n    payment_method_options?: StripePIPaymentMethodOptions;\n}\n\nexport interface StripePIPaymentMethodSavingOptions {\n    setup_future_usage?: StripeInstrumentSetupFutureUsage;\n    verification_method?: string;\n}\n\nexport interface StripePIPaymentMethodOptions {\n    card?: StripePIPaymentMethodSavingOptions;\n    us_bank_account?: StripePIPaymentMethodSavingOptions;\n}\n\n/**\n * The payment error encountered in the previous PaymentIntent confirmation. It will be cleared if the PaymentIntent is later updated for any reason.\n */\nexport interface LastPaymentError {\n    /**\n     * A human-readable message providing more details about the error. For card errors, these messages can be shown to your users.\n     */\n    message?: string;\n}\n\n/**\n * This object is used to pass custom fonts when creating an [Elements](https://stripe.com/docs/js/elements_object/create) object.\n */\nexport interface CssFontSource {\n    /**\n     * A relative or absolute URL pointing to a CSS file with [@font-face](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face) definitions, for example:\n     * `https://fonts.googleapis.com/css?family=Open+Sans`\n     * Note that if you are using a [content security policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) (CSP),\n     * [additional directives](https://stripe.com/docs/security#content-security-policy) may be necessary.\n     */\n    cssSrc: string;\n}\n\n/**\n * This object is used to pass custom fonts when creating an [Elements](https://stripe.com/docs/js/elements_object/create) object.\n */\nexport interface CustomFontSource {\n    /**\n     * The name to give the font.\n     */\n    family: string;\n\n    /**\n     * A valid [src](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/src) value pointing to your\n     * custom font file. This is usually (though not always) a link to a file with a .woff , .otf, or .svg suffix.\n     */\n    src: string;\n\n    /**\n     * A valid [font-display](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display) value.\n     */\n    display?: string;\n\n    /**\n     * One of normal, italic, oblique. Defaults to normal.\n     */\n    style?: string;\n\n    /**\n     * A valid [unicode-range](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/unicode-range) value.\n     */\n    unicodeRange?: string;\n\n    /**\n     * A valid [font-weight](https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight). Note that this is a string, not a number.\n     */\n    weight?: string;\n}\n\nexport type StripeCustomFont = CssFontSource | CustomFontSource;\n\nexport interface StripeError {\n    /**\n     * type of error. When the error type is card_error or validation_error, you can display the error message in error.message directly to your user.\n     */\n    type: string;\n    /**\n     * A human-readable message providing more details about the error. For card errors, these messages can be shown to your users.\n     */\n    message?: string;\n\n    /**\n     * The PaymentIntent object.\n     */\n    payment_intent: PaymentIntent;\n}\n\nexport interface StripeCheckoutSessionConfirmationError {\n    code?: string;\n    message: string;\n    paymentFailed?: {\n        declineCode?: string;\n    };\n}\n\nexport interface StripeElement {\n    /**\n     * The `element.mount` method attaches your element to the DOM.\n     */\n    mount(domElement: string | HTMLElement): void;\n\n    /**\n     * Removes the element from the DOM and destroys it.\n     * A destroyed element can not be re-activated or re-mounted to the DOM.\n     */\n    destroy(): void;\n\n    /**\n     * Unmounts the element from the DOM.\n     * Call `element.mount` to re-attach it to the DOM.\n     */\n    unmount(): void;\n\n    /**\n     * The change event is triggered when the Element's value changes. The event payload always contains certain keys,\n     * in addition to some Element-specific keys.\n     * https://stripe.com/docs/js/element/events/on_change?type=paymentElement\n     */\n    on(event: StripeElementEvent, handler: (event: StripeEventType) => void): void;\n\n    /**\n     * Updates the options the Payment Element was initialized with. Updates are merged into the existing configuration.\n     * https://docs.stripe.com/js/elements_object/update_payment_element\n     */\n    update(options?: StripeElementsCreateOptions): void;\n\n    /**\n     * This method collapses the Payment Element into a row of payment method tabs.\n     * https://docs.stripe.com/js/elements_object/collapse_payment_element\n     */\n    collapse(): void;\n}\n\nexport interface StripeEvent {\n    complete: boolean;\n    elementType: string;\n    empty: boolean;\n}\n\nexport interface StripeCustomerEvent extends StripeEvent {\n    collapsed?: boolean;\n    authenticated: boolean;\n    value: {\n        email: string;\n    };\n}\n\nexport interface StripeShippingEvent extends StripeEvent {\n    mode?: string;\n    isNewAddress?: boolean;\n    phoneFieldRequired: boolean;\n    value: {\n        address: Address;\n        name?: string;\n        firstName?: string;\n        lastName?: string;\n        phone?: string;\n    };\n    fields?: {\n        phone: string;\n    };\n    display?: {\n        name: string;\n    };\n}\n\nexport interface StripePaymentEvent extends StripeEvent {\n    value: {\n        type: StripePaymentMethodType;\n    };\n    collapsed?: boolean;\n}\n\nexport interface StripeCurrencyEvent extends StripeEvent {\n    value: {\n        currency: string;\n    };\n}\n\nexport interface Address {\n    city: string;\n    country: string;\n    line1: string;\n    line2?: string;\n    postal_code: string;\n    state: string;\n}\n\nexport type StripeEventType =\n    | StripeCurrencyEvent\n    | StripeShippingEvent\n    | StripeCustomerEvent\n    | StripePaymentEvent\n    | StripeLinkV2Event;\n\n/**\n * Object definition for part of the data sent to confirm the PaymentIntent.\n * https://stripe.com/docs/api/payment_intents/confirm#confirm_payment_intent-shipping\n */\nexport type AddressOptions = Partial<Address> & { country: string };\n\nexport interface StripeAddressValues {\n    name?: string;\n    address?: AddressOptions;\n}\n\n/**\n * Object definition for part of the data sent to confirm the PaymentIntent.\n * https://stripe.com/docs/js/elements_object/create_payment_element\n */\nexport interface AddressProperties {\n    city?: AutoOrNever;\n    country?: AutoOrNever;\n    state?: AutoOrNever;\n    postalCode?: AutoOrNever;\n    line1?: AutoOrNever;\n    line2?: AutoOrNever;\n}\n\n/**\n * Object definition for part of the data sent to confirm the PaymentIntent.\n */\nexport interface BillingDetailsOptions {\n    name?: string;\n    email?: string;\n    address?: AddressOptions;\n    phone?: string;\n}\n\n/**\n * Object definition for part of the data sent to confirm the PaymentIntent.\n */\nexport interface BillingDetailsProperties {\n    name?: AutoOrNever;\n    email?: AutoOrNever;\n    address?: AutoOrNever | AddressProperties;\n    phone?: AutoOrNever;\n}\n\n/**\n * Object definition for part of the data sent to confirm the PaymentIntent.\n */\nexport interface PaymentMethodDataOptions {\n    billing_details: BillingDetailsOptions;\n    allow_redisplay?: 'always' | 'limited' | 'unspecified';\n}\n\n/**\n * Parameters that will be passed on to the Stripe API to confirm the PaymentIntent.\n */\nexport interface StripeConfirmParams {\n    /*\n     * If you are [handling next actions yourself](https://stripe.com/docs/payments/payment-intents/verifying-status#next-actions), pass in a return_url. If the subsequent action\n     * is redirect_to_url, this URL will be used on the return path for the redirect.\n     *\n     * @recommended\n     */\n    return_url?: string;\n    payment_method_data?: PaymentMethodDataOptions;\n}\n\n/**\n * Data to be sent with a `stripe.confirmPayment` request.\n * Refer to the [Payment Intents API](https://stripe.com/docs/js/payment_intents/confirm_payment) for a full list of parameters.\n */\nexport interface StripeConfirmPaymentData {\n    /**\n     * The Elements instance that was used to create the Payment Element.\n     */\n    elements: StripeElements;\n\n    /**\n     * Parameters that will be passed on to the Stripe API to confirm the PaymentIntent.\n     */\n    confirmParams?: StripeConfirmParams;\n\n    /**\n     * By default, confirmPayment will always redirect to your return_url after a successful confirmation.\n     * If you set redirect: \"if_required\", then confirmPayment will only redirect if your user chooses a redirect-based payment method.\n     */\n    redirect?: StripeStringConstants.ALWAYS | StripeStringConstants.IF_REQUIRED;\n\n    clientSecret?: string;\n}\n\nexport interface StripeCheckoutSessionConfirmPaymentData {\n    redirect?: StripeStringConstants.ALWAYS | StripeStringConstants.IF_REQUIRED;\n    returnUrl?: string;\n}\n\nexport interface FieldsOptions {\n    billingDetails?: AutoOrNever | BillingDetailsProperties;\n    phone?: string;\n}\n\nexport interface WalletOptions {\n    applePay?: AutoOrNever;\n    googlePay?: AutoOrNever;\n    link?: AutoOrNever;\n}\n\nexport interface TermOptions {\n    card?: AutoOrNever;\n}\n\nexport interface StripeLayoutOptions {\n    type?: 'accordion' | 'tabs';\n    linkInAccordion?: boolean;\n    defaultCollapsed?: boolean;\n    radios?: boolean;\n    spacedAccordionItems?: boolean;\n    visibleAccordionItemsCount?: number;\n}\n\n/**\n * All available options are here https://stripe.com/docs/js/elements_object/create_payment_element\n */\nexport interface StripeElementsCreateOptions {\n    mode?: string;\n    fields?: FieldsOptions;\n    wallets?: WalletOptions;\n    allowedCountries?: string[];\n    defaultValues?: ShippingDefaultValues | CustomerDefaultValues | PaymentDefaultValues;\n    validation?: validationElement;\n    display?: { name: StripeDisplayName };\n    terms?: TermOptions;\n    layout?: StripeLayoutOptions;\n    paymentMethodOrder?: string[];\n    //  Link v2 options\n    lineItems?: LineItem[];\n    allowedShippingCountries?: string[];\n    shippingAddressRequired?: boolean;\n    shippingRates?: StripeLinkV2ShippingRate[];\n    billingAddressRequired?: boolean;\n    emailRequired?: boolean;\n    phoneNumberRequired?: boolean;\n    paymentMethods?: {\n        link: StripeStringConstants.AUTO;\n        applePay: StripeStringConstants.NEVER;\n        googlePay: StripeStringConstants.NEVER;\n        amazonPay: StripeStringConstants.NEVER;\n        paypal: StripeStringConstants.NEVER;\n        klarna: StripeStringConstants.NEVER;\n    };\n    buttonHeight?: number;\n    savePaymentMethod?: StripeSavePaymentMethod;\n}\n\ninterface validationElement {\n    phone?: validationRequiredElement;\n}\n\ninterface validationRequiredElement {\n    required?: string;\n}\n\ninterface PaymentDefaultValues {\n    savePaymentMethod?: boolean;\n    billingDetails?: BillingDetailsOptions;\n}\n\ninterface ShippingDefaultValues {\n    name?: string;\n    firstName?: string;\n    lastName?: string;\n    phone: string;\n    address: Address;\n}\n\n/*\nDecide which mode you are going to use the Address Element\nShipping: is used with the Payment Element and Link Authentication Element, it will automatically pass shipping\ninformation when confirming Payment Intent or Setup Intent.\nBilling: is used with the Payment Element, it will automatically pass the billing information when confirming\nPayment Intent or Setup Intent.\n */\nexport enum StripeFormMode {\n    SHIPPING = 'shipping',\n    BILLING = 'billing',\n}\n\nexport enum StripeDisplayName {\n    SPLIT = 'split',\n    FULL = 'full',\n    ORGANIZATION = 'organization',\n}\n\ninterface CustomerDefaultValues {\n    mode: StripeFormMode;\n    email: string;\n    allowedCountries?: string[];\n    display?: {\n        name: StripeDisplayName;\n    };\n}\n\nexport interface StripeElements {\n    /**\n     * Creates an Elements instance, which manages a group of elements.\n     * https://stripe.com/docs/js/elements_object/create\n     */\n    create(elementType: StripeElementType, options?: StripeElementsCreateOptions): StripeElement;\n\n    /**\n     * Looks up a previously created element.\n     * https://stripe.com/docs/js/elements_object/get_payment_element or\n     * https://stripe.com/docs/js/elements_object/get_link_authentication_element\n     */\n    getElement(elementType: StripeElementType): StripeElement | null;\n\n    /**\n     * Updates options on an existing instance of Elements.\n     * https://stripe.com/docs/js/elements_object/update\n     */\n    update(options?: StripeUpdateElementsOptions): StripeElement;\n\n    /**\n     * Fetches updates from the associated PaymentIntent or SetupIntent on an existing instance of Elements,\n     * and reflects these updates in the Payment Element.\n     * https://stripe.com/docs/js/elements_object/fetch_updates\n     */\n    fetchUpdates(): Promise<void>;\n}\n\nexport enum StripeCheckoutSessionStatusType {\n    Open = 'open',\n    Expired = 'expired',\n    Complete = 'complete',\n}\n\nexport enum StripeCheckoutSessionPaymentStatus {\n    Paid = 'paid',\n    UnPaid = 'unpaid',\n    NoPaymentRequired = 'no_payment_required',\n}\n\nexport interface StripeCheckoutSessionStatus {\n    type: StripeCheckoutSessionStatusType;\n    paymentStatus: StripeCheckoutSessionPaymentStatus;\n}\n\nexport interface StripeCheckoutSessionAmount {\n    minorUnitsAmount: number;\n    amount: string;\n}\n\nexport interface StripeCheckoutSessionTotal {\n    appliedBalance: StripeCheckoutSessionAmount;\n    balanceAppliedToNextInvoice: boolean;\n    discount: StripeCheckoutSessionAmount;\n    shippingRate: StripeCheckoutSessionAmount;\n    subtotal: StripeCheckoutSessionAmount;\n    taxExclusive: StripeCheckoutSessionAmount;\n    taxInclusive: StripeCheckoutSessionAmount;\n    total: StripeCheckoutSessionAmount;\n}\n\nexport interface StripeCheckoutSession {\n    id: string;\n    savedPaymentMethods?: StripeSavedPaymentMethod[];\n    billingAddress: StripeAddressValues;\n    businessName: string;\n    canConfirm: boolean;\n    currency: string;\n    email: string;\n    phoneNumber: string;\n    shipping: unknown;\n    shippingAddress: StripeAddressValues;\n    shippingOptions: unknown;\n    status: StripeCheckoutSessionStatus;\n    tax: unknown;\n    taxAmounts: unknown;\n    total: StripeCheckoutSessionTotal;\n}\n\nexport interface StripeCheckoutInstance {\n    loadActions(): Promise<StripeLoadActionsResult>;\n    createPaymentElement(options?: StripeElementsCreateOptions): StripeElement;\n    getPaymentElement(): StripeElement | null;\n    getCurrencySelectorElement(): StripeElement | null;\n    createCurrencySelectorElement(): StripeElement;\n}\n\nexport enum StripeLoadActionsResultType {\n    SUCCESS = 'success',\n    ERROR = 'error',\n}\n\nexport interface StripeLoadActionsResult {\n    type: StripeLoadActionsResultType;\n    error?: { message: string };\n    actions?: StripeCheckoutSessionActions;\n}\n\nexport interface StripeCheckoutSessionActionResult {\n    type: StripeLoadActionsResultType;\n    error?: StripeCheckoutSessionConfirmationError;\n    session?: StripeCheckoutSession;\n}\n\nexport interface StripeCheckoutSessionActions {\n    updateEmail(email: string): Promise<StripeCheckoutSessionActionResult>;\n    updateShippingAddress(\n        shippingAddress: StripeAddressValues,\n    ): Promise<StripeCheckoutSessionActionResult>;\n    updateBillingAddress(\n        billingAddress: StripeAddressValues,\n    ): Promise<StripeCheckoutSessionActionResult>;\n    getSession(): Promise<StripeCheckoutSession>;\n    confirm(\n        options: StripeCheckoutSessionConfirmPaymentData,\n    ): Promise<StripeCheckoutSessionActionResult>;\n}\n\nexport interface StripeSavedPaymentMethod {\n    id: string;\n    type: string;\n    billingDetails: BillingDetailsOptions;\n    card?: StripeCardDetails;\n    usBankAccount?: StripeUsBankAccountDetails;\n}\n\nexport interface StripeCardDetails {\n    brand: string;\n    last4: string;\n    expMonth: number;\n    expYear: number;\n}\n\nexport interface StripeUsBankAccountDetails {\n    accountHolderType: string;\n    accountType: string;\n    bankName: string;\n    last4: string;\n}\n\n/**\n * All available options are here https://stripe.com/docs/stripe-js/appearance-api#supported-css-properties\n */\nexport interface StripeAppearanceOptions {\n    variables?: Record<string, StripeAppearanceValues>;\n\n    rules?: Record<string, Record<string, StripeAppearanceValues>>;\n}\n\nexport type StripeAppearanceValues = string | string[] | number | undefined;\n\nexport interface StripeElementsOptions {\n    /**\n     * An array of custom fonts, which elements created from the Elements object can use.\n     * Fonts can be specified as [CssFontSource](https://stripe.com/docs/js/appendix/css_font_source_object)\n     * or [CustomFontSource](https://stripe.com/docs/js/appendix/custom_font_source_object) objects.\n     */\n    fonts?: StripeCustomFont[];\n\n    /**\n     * A [locale](https://stripe.com/docs/js/appendix/supported_locales) to display placeholders and\n     * error strings in. Default is auto (Stripe detects the locale of the browser).\n     * Setting the locale does not affect the behavior of postal code validation—a valid postal code\n     * for the billing country of the card is still required.\n     */\n    locale?: string;\n\n    /**\n     * The client secret of this PaymentIntent. Used for client-side retrieval using a publishable key.\n     * The client secret can be used to complete a payment from your frontend.\n     * It should not be stored, logged, embedded in URLs, or exposed to anyone other than the customer.\n     * Make sure that you have TLS enabled on any page that includes the client secret.\n     * Refer to our docs to accept a payment and learn about how client_secret should be handled.\n     */\n    clientSecret?: string;\n\n    /**\n     * A token that represents the Stripe customer session.\n     * Stripe documentation: https://docs.stripe.com/api/checkout/sessions\n     */\n    customerSessionClientSecret?: string;\n\n    /**\n     * Match the design of your site with the appearance option.\n     * The layout of each Element stays consistent, but you can modify colors, fonts, borders, padding, and more.\n     */\n    appearance?: StripeAppearanceOptions;\n\n    mode?: string;\n    amount?: number;\n    currency?: string;\n    paymentMethodTypes?: string[];\n}\n\nexport interface StripeInitCheckoutOptions {\n    clientSecret: string;\n    elementsOptions?: StripeCheckoutSessionElementOptions;\n    adaptivePricing?: {\n        allowed: boolean;\n    };\n    defaultValues?: StripeCheckoutSessionDefaultValues;\n    wallets?: any;\n}\n\nexport interface StripeCheckoutSessionElementOptions {\n    appearance?: StripeAppearanceOptions;\n    loader?: StripeStringConstants;\n    fonts?: StripeCustomFont[];\n    savedPaymentMethod?: {\n        enableRedisplay?: StripeStringConstants;\n        enableSave?: StripeStringConstants;\n    };\n}\n\nexport interface StripeCheckoutSessionDefaultValues {\n    billingAddress?: StripeAddressValues;\n    shippingAddress?: StripeAddressValues;\n    email?: string;\n    phoneNumber?: string;\n}\n\nexport interface StripeUpdateElementsOptions {\n    /**\n     * A [locale](https://stripe.com/docs/js/appendix/supported_locales) to display placeholders and\n     * error strings in. Default is auto (Stripe detects the locale of the browser).\n     * Setting the locale does not affect the behavior of postal code validation—a valid postal code\n     * for the billing country of the card is still required.\n     */\n    locale?: string;\n\n    /**\n     * Match the design of your site with the appearance option.\n     * The layout of each Element stays consistent, but you can modify colors, fonts, borders, padding, and more.\n     */\n    appearance?: StripeAppearanceOptions;\n    mode?: string;\n    amount?: number;\n    currency?: string;\n}\n\nexport interface StripeClient {\n    /**\n     * Use confirmPayment to confirm a PaymentIntent using data collected by the Payment Element.\n     * When called, confirmPayment will attempt to complete any required actions,\n     * such as authenticating your user by displaying a 3DS dialog or redirecting them to a bank authorization page.\n     */\n    confirmPayment(options: StripeConfirmPaymentData): Promise<StripeResult>;\n\n    /**\n     * When called, it will confirm the PaymentIntent with data you provide and carry out 3DS or other next actions if they are required.\n     */\n    confirmCardPayment(clientSecret: string): Promise<StripeResult>;\n\n    /**\n     * Retrieve a PaymentIntent using its client secret.\n     */\n    retrievePaymentIntent(clientSecret: string): Promise<StripeResult>;\n\n    /**\n     * Create an `Elements` instance, which manages a group of elements.\n     */\n    elements(options: StripeElementsOptions): StripeElements;\n\n    initCheckout(options: StripeInitCheckoutOptions): Promise<StripeCheckoutInstance>;\n}\n\nexport interface StripeResult {\n    paymentIntent?: PaymentIntent;\n    error?: StripeError;\n}\n\nexport interface StripeHostWindow extends Window {\n    bcStripeClient?: StripeClient;\n    bcStripeElements?: StripeElements;\n    bcStripeCheckout?: StripeCheckoutInstance;\n    Stripe?<T = StripeClient>(\n        stripePublishableKey: string,\n        options?: StripeConfigurationOptions,\n    ): T;\n}\n\nexport enum StripePaymentMethodType {\n    CreditCard = 'card',\n    ACH = 'us_bank_account',\n    Link = 'link',\n    EPS = 'eps',\n    GRABPAY = 'grabpay',\n    BANCONTACT = 'bancontact',\n    IDEAL = 'ideal',\n    ALIPAY = 'alipay',\n    KLARNA = 'klarna',\n    OCS = 'optimized_checkout',\n    CHECKOUT_SESSION = 'checkout_session',\n}\n\ntype AutoOrNever = StripeStringConstants.AUTO | StripeStringConstants.NEVER;\n\nexport enum StripeStringConstants {\n    NEVER = 'never',\n    AUTO = 'auto',\n    ALWAYS = 'always',\n    PAYMENT = 'payment',\n    IF_REQUIRED = 'if_required',\n}\n\nexport enum StripeJsVersion {\n    V3 = 'v3',\n    ACACIA = 'acacia',\n    BASIL = 'basil',\n    CLOVER = 'clover',\n}\n\nexport enum StripeElementType {\n    PAYMENT = 'payment',\n    AUTHENTICATION = 'linkAuthentication',\n    SHIPPING = 'address',\n    EXPRESS_CHECKOUT = 'expressCheckout',\n}\n\nexport enum StripePaymentIntentStatus {\n    REQUIRES_PAYMENT_METHOD = 'requires_payment_method',\n    REQUIRES_CONFIRMATION = 'requires_confirmation',\n    REQUIRES_ACTION = 'requires_action',\n    PROCESSING = 'processing',\n    SUCCEEDED = 'succeeded',\n    CANCELED = 'canceled',\n}\n\nexport interface StripePaymentMethod extends PaymentMethod {\n    initializationData: StripeInitializationData;\n}\n\nexport interface StripeInitializationData {\n    stripePublishableKey: string;\n    stripeConnectedAccount: string;\n    shopperLanguage: string;\n    customerSessionToken?: string;\n    enableLink?: boolean;\n    allowRedisplayForStoredInstruments?: boolean;\n    captureMethod?: 'automatic' | 'manual';\n    useNewStripeJsVersion?: boolean;\n    checkoutSessionEnabled?: boolean;\n    sendSecondPaymentRequestOnStripeError?: boolean;\n    adaptivePricingEnabled?: boolean;\n    hasSectionOnTopOfPaymentsList?: boolean;\n}\n\nexport interface StripeElementUpdateOptions {\n    shouldShowTerms?: boolean;\n}\n\nexport interface StripeAdditionalActionRequired {\n    type: string;\n    data: {\n        token?: string;\n        redirect_url?: string;\n    };\n}\n\nexport interface StripeAdditionalActionResponseBody {\n    additional_action_required: StripeAdditionalActionRequired;\n    three_ds_result: {\n        token?: string;\n    };\n}\n\nexport enum StripeElementEvent {\n    CLICK = 'click',\n    CHANGE = 'change',\n    READY = 'ready',\n    SHIPPING_ADDRESS_CHANGE = 'shippingaddresschange',\n    SHIPPING_RATE_CHANGE = 'shippingratechange',\n    CONFIRM = 'confirm',\n    CANCEL = 'cancel',\n    LOADER_START = 'loaderstart',\n}\n\nexport interface LineItem {\n    name: string;\n    amount: number;\n}\n\nexport interface StripeSavePaymentMethod {\n    maxVisiblePaymentMethods?: number;\n}\n\nexport enum StripeInstrumentSetupFutureUsage {\n    ON_SESSION = 'on_session',\n    OFF_SESSION = 'off_session',\n}\n\nexport interface StripeLinkV2Event {\n    value?: null;\n    billingDetails?: {\n        name?: string;\n        email?: string;\n        phone?: string;\n        address?: {\n            line1?: string;\n            city?: string;\n            country?: string;\n            postal_code?: string;\n            state?: string;\n        };\n    };\n    shippingAddress?: {\n        name?: string;\n        address?: {\n            line1?: string;\n            line2?: string;\n            city?: string;\n            country?: string;\n            postal_code?: string;\n            state?: string;\n        };\n    };\n    address?: {\n        line1?: string;\n        city?: string;\n        country?: string;\n        postal_code?: string;\n        state?: string;\n    };\n    shippingRate?: StripeLinkV2ShippingRate;\n    elementType: string;\n    expressPaymentType: string;\n    resolve(data: StripeLinkV2EventResolveData): void;\n    reject(): void;\n}\n\nexport interface StripeLinkV2EventResolveData {\n    lineItems?: LineItem[];\n    allowedShippingCountries?: string[];\n    shippingAddressRequired?: boolean;\n    shippingRates?: StripeLinkV2ShippingRate[];\n    billingAddressRequired?: boolean;\n    emailRequired?: boolean;\n    phoneNumberRequired?: boolean;\n}\n\nexport interface StripeLinkV2ShippingRate {\n    id: string;\n    amount: number;\n    displayName: string;\n}\n\nexport interface StripeLinkV2Options {\n    clientSecret?: string;\n    mode?: string;\n    currency?: string;\n    captureMethod?: 'automatic' | 'manual';\n    amount?: number;\n}\n\nexport interface StripeFormattedPaymentPayload {\n    cart_id: string;\n    confirm: boolean;\n    method?: string;\n    credit_card_token?: { token: string };\n    tokenized_ach?: { token: string };\n    vault_payment_instrument?: boolean;\n    set_as_default_stored_instrument?: boolean;\n    client_side_error?: boolean;\n}\n"
  },
  {
    "path": "packages/stripe-utils/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/stripe-utils/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/stripe-utils/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/td-bank-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.spec.ts\", \"*.spec.tsx\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\"\n            }\n        }\n    ]\n}\n\n"
  },
  {
    "path": "packages/td-bank-integration/README.md",
    "content": "# td-bank-integration\n\nThis package contains the integration layer for the [TD Bank](https://www.td.com/) provider.\n\n## Running unit tests\n\nRun `nx test td-bank-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\nRun `nx test stripe-integration` to execute all the unit tests for this package.\n\nRun `nx test stripe-integration --testFile=\"<FILE_NAME>\"` to execute unit tests for a single file.\n\n## Running lint\n\nRun `nx lint td-bank-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/td-bank-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'td-bank-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/td-bank-integration',\n};\n"
  },
  {
    "path": "packages/td-bank-integration/project.json",
    "content": "{\n    \"name\": \"td-bank-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/td-bank-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/td-bank-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/td-bank-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/td-bank-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/td-bank-integration/src/create-td-online-mart-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createTDOnlineMartPaymentStrategy from './create-td-online-mart-payment-strategy';\nimport TDOnlineMartPaymentStrategy from './td-online-mart-payment-strategy';\n\ndescribe('createTDOnlineMartPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates TDOnlineMart payment strategy', () => {\n        const strategy = createTDOnlineMartPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(TDOnlineMartPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/td-bank-integration/src/create-td-online-mart-payment-strategy.ts",
    "content": "import { createFormPoster } from '@bigcommerce/form-poster';\nimport { getScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport TDOnlineMartPaymentStrategy from './td-online-mart-payment-strategy';\nimport TDOnlineMartScriptLoader from './td-online-mart-script-loader';\n\nconst createTDOnlineMartPaymentStrategy: PaymentStrategyFactory<TDOnlineMartPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new TDOnlineMartPaymentStrategy(\n        paymentIntegrationService,\n        new TDOnlineMartScriptLoader(getScriptLoader()),\n        createFormPoster(),\n    );\n};\n\nexport default toResolvableModule(createTDOnlineMartPaymentStrategy, [{ id: 'tdonlinemart' }]);\n"
  },
  {
    "path": "packages/td-bank-integration/src/index.ts",
    "content": "export { default as createTDOnlineMartPaymentStrategy } from './create-td-online-mart-payment-strategy';\n"
  },
  {
    "path": "packages/td-bank-integration/src/is-create-token-error.ts",
    "content": "import { CreateTokenError } from './td-online-mart';\n\nexport default function isCreateTokenError(error: unknown): error is CreateTokenError {\n    return (\n        typeof error === 'object' &&\n        error !== null &&\n        'field' in error &&\n        'type' in error &&\n        'message' in error\n    );\n}\n"
  },
  {
    "path": "packages/td-bank-integration/src/isTdOnlineMartAdditionalAction.spec.ts",
    "content": "import { isTdOnlineMartAdditionalAction } from './isTdOnlineMartAdditionalAction';\n\ndescribe('isTdOnlineMartAdditionalAction', () => {\n    it('receive not request error', () => {\n        expect(isTdOnlineMartAdditionalAction({})).toBe(false);\n    });\n\n    it('error does not contain 3DS error code', () => {\n        expect(\n            isTdOnlineMartAdditionalAction({\n                body: {\n                    errors: [\n                        {\n                            code: 'any_code',\n                        },\n                    ],\n                    // eslint-disable-next-line @typescript-eslint/naming-convention\n                    three_ds_result: {},\n                },\n            }),\n        ).toBe(false);\n    });\n\n    it('error does not contain 3DS results', () => {\n        expect(\n            isTdOnlineMartAdditionalAction({\n                body: {\n                    errors: [\n                        {\n                            code: 'three_d_secure_required',\n                        },\n                    ],\n                },\n            }),\n        ).toBe(false);\n    });\n\n    it('error is a TD bank additional action error', () => {\n        expect(\n            isTdOnlineMartAdditionalAction({\n                body: {\n                    errors: [\n                        {\n                            code: 'any_code',\n                        },\n                        {\n                            code: 'three_d_secure_required',\n                        },\n                    ],\n                    // eslint-disable-next-line @typescript-eslint/naming-convention\n                    three_ds_result: {},\n                },\n            }),\n        ).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/td-bank-integration/src/isTdOnlineMartAdditionalAction.ts",
    "content": "import { isArray, isObject, some } from 'lodash';\n\nimport { isRequestError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { TdOnlineMartAdditionalAction, TdOnlineMartThreeDSErrorBody } from './td-online-mart';\n\n/* eslint-disable @typescript-eslint/consistent-type-assertions */\nfunction isTdOnlineMartThreeDSErrorBody(\n    errorBody: unknown,\n): errorBody is TdOnlineMartThreeDSErrorBody {\n    return (\n        isObject(errorBody) &&\n        typeof errorBody === 'object' &&\n        'errors' in errorBody &&\n        'three_ds_result' in errorBody &&\n        isArray((errorBody as TdOnlineMartThreeDSErrorBody).errors) &&\n        some((errorBody as TdOnlineMartThreeDSErrorBody).errors, {\n            code: 'three_d_secure_required',\n        })\n    );\n}\n/* eslint-enable @typescript-eslint/consistent-type-assertions */\n\nexport function isTdOnlineMartAdditionalAction(\n    error: unknown,\n): error is TdOnlineMartAdditionalAction {\n    return isRequestError(error) && isTdOnlineMartThreeDSErrorBody(error.body);\n}\n"
  },
  {
    "path": "packages/td-bank-integration/src/td-online-mart-payment-strategy.spec.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\nimport { createScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport {\n    InvalidArgumentError,\n    MissingDataError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCart,\n    getInstruments,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport * as TdOnlineMartAdditionalAction from './isTdOnlineMartAdditionalAction';\nimport { FieldType, TDCustomCheckoutSDK } from './td-online-mart';\nimport TDOnlineMartPaymentStrategy from './td-online-mart-payment-strategy';\nimport TDOnlineMartScriptLoader from './td-online-mart-script-loader';\nimport { getTDOnlineMartClient } from './td-online-mart.mock';\n\nlet payload: OrderRequestBody;\nlet scriptLoader: ScriptLoader;\nlet tdOnlineScriptLoader: TDOnlineMartScriptLoader;\nlet tdOnlineMartPaymentStrategy: TDOnlineMartPaymentStrategy;\nlet paymentIntegrationService: PaymentIntegrationService;\nlet tdOnlineMartClient: TDCustomCheckoutSDK;\nlet tdOnlineMartClientScriptInitializationOptions: PaymentInitializeOptions;\nlet formPoster: FormPoster;\n\ndescribe('TDOnlineMartPaymentStrategy', () => {\n    const containers: Array<{\n        id: string;\n        element?: HTMLDivElement;\n    }> = [\n        { id: 'tdonlinemart-ccNumber' },\n        { id: 'tdonlinemart-ccCvv' },\n        { id: 'tdonlinemart-ccExpiry' },\n    ];\n    const createInputContainers = (elementContainers = containers) => {\n        elementContainers.forEach((container) => {\n            container.element = document.createElement('div');\n            container.element.setAttribute('id', container.id);\n            document.body.appendChild(container.element);\n        });\n    };\n    const removeInputContainers = () => {\n        containers.forEach((container) => {\n            if (!container.element) {\n                return;\n            }\n\n            document.body.removeChild(container.element);\n            container.element = undefined;\n        });\n    };\n\n    beforeEach(() => {\n        tdOnlineMartClient = getTDOnlineMartClient();\n        scriptLoader = createScriptLoader();\n        tdOnlineScriptLoader = new TDOnlineMartScriptLoader(scriptLoader);\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        tdOnlineMartClientScriptInitializationOptions = {\n            methodId: 'tdonlinemart',\n        };\n\n        formPoster = new FormPoster();\n        jest.spyOn(formPoster, 'postForm').mockImplementation(jest.fn());\n\n        tdOnlineMartPaymentStrategy = new TDOnlineMartPaymentStrategy(\n            paymentIntegrationService,\n            tdOnlineScriptLoader,\n            formPoster,\n        );\n\n        jest.spyOn(tdOnlineScriptLoader, 'load').mockImplementation(() =>\n            Promise.resolve(tdOnlineMartClient),\n        );\n\n        const defaultPaymentInstrument = {\n            ...getInstruments()[0],\n            provider: 'tdonlinemart',\n        };\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getInstruments').mockReturnValue([\n            {\n                ...defaultPaymentInstrument,\n                bigpayToken: 'testInstrumentId',\n                trustedShippingAddress: true,\n            },\n            {\n                ...defaultPaymentInstrument,\n                bigpayToken: 'testInstrumentId-trusted-false',\n                trustedShippingAddress: false,\n            },\n        ]);\n\n        payload = {\n            payment: {\n                methodId: 'tdonlinemart',\n            },\n        };\n\n        tdOnlineMartClient.create(FieldType.CARD_NUMBER);\n\n        tdOnlineMartClient.createToken = jest.fn((callback) => {\n            callback({\n                token: 'td-online-mart-token',\n                code: '',\n            });\n        });\n\n        createInputContainers();\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n\n        removeInputContainers();\n    });\n\n    describe('initialize', () => {\n        it('successfully initializes the td bank online mart strategy and loads the client', async () => {\n            await tdOnlineMartPaymentStrategy.initialize(\n                tdOnlineMartClientScriptInitializationOptions,\n            );\n\n            expect(tdOnlineScriptLoader.load).toHaveBeenCalled();\n        });\n\n        it('fails to initialize the td online mart strategy and load bolt embedded script if method id is not provided', async () => {\n            tdOnlineMartClientScriptInitializationOptions = {\n                methodId: '',\n            };\n\n            await expect(\n                tdOnlineMartPaymentStrategy.initialize(\n                    tdOnlineMartClientScriptInitializationOptions,\n                ),\n            ).rejects.toThrow(InvalidArgumentError);\n        });\n\n        it('mounts td online mart inputs', async () => {\n            const unmountMock = jest.fn();\n            const mountMock = jest.fn();\n\n            tdOnlineMartClient = getTDOnlineMartClient({ mount: mountMock, unmount: unmountMock });\n\n            jest.spyOn(tdOnlineScriptLoader, 'load').mockImplementation(() =>\n                Promise.resolve(tdOnlineMartClient),\n            );\n\n            await tdOnlineMartPaymentStrategy.initialize(\n                tdOnlineMartClientScriptInitializationOptions,\n            );\n\n            expect(tdOnlineMartClient.create).toHaveBeenCalled();\n            expect(mountMock).toHaveBeenCalledTimes(3);\n        });\n\n        it('mounts td online mart inputs if only one container exist', async () => {\n            const unmountMock = jest.fn();\n            const mountMock = jest.fn();\n\n            removeInputContainers();\n            createInputContainers([containers[0]]);\n\n            tdOnlineMartClient = getTDOnlineMartClient({ mount: mountMock, unmount: unmountMock });\n\n            jest.spyOn(tdOnlineScriptLoader, 'load').mockImplementation(() =>\n                Promise.resolve(tdOnlineMartClient),\n            );\n\n            await tdOnlineMartPaymentStrategy.initialize(\n                tdOnlineMartClientScriptInitializationOptions,\n            );\n\n            expect(tdOnlineMartClient.create).toHaveBeenCalled();\n            expect(mountMock).toHaveBeenCalledTimes(1);\n        });\n    });\n\n    describe('execute', () => {\n        it('successfully executes the td online mart strategy and submits payment when using td online mart strategy client', async () => {\n            await tdOnlineMartPaymentStrategy.initialize(\n                tdOnlineMartClientScriptInitializationOptions,\n            );\n            await tdOnlineMartPaymentStrategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: 'tdonlinemart',\n                paymentData: expect.objectContaining({\n                    /* eslint-disable @typescript-eslint/naming-convention */\n                    browser_info: expect.objectContaining({\n                        color_depth: expect.any(Number),\n                        java_enabled: expect.any(Boolean),\n                        language: expect.any(String),\n                        screen_height: expect.any(Number),\n                        screen_width: expect.any(Number),\n                        time_zone_offset: expect.any(String),\n                    }),\n                    shouldSaveInstrument: false,\n                    nonce: 'td-online-mart-token',\n                    /* eslint-enable @typescript-eslint/naming-convention */\n                }),\n            });\n        });\n\n        it('successfully executes the td online mart strategy with instrument saving', async () => {\n            const executePayload: OrderRequestBody = {\n                ...payload,\n                payment: {\n                    methodId: 'tdonlinemart',\n                    paymentData: {\n                        shouldSaveInstrument: true,\n                    },\n                },\n            };\n\n            await tdOnlineMartPaymentStrategy.initialize(\n                tdOnlineMartClientScriptInitializationOptions,\n            );\n            await tdOnlineMartPaymentStrategy.execute(executePayload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: 'tdonlinemart',\n                paymentData: expect.objectContaining({\n                    /* eslint-disable @typescript-eslint/naming-convention */\n                    browser_info: expect.any(Object),\n                    shouldSaveInstrument: true,\n                    nonce: 'td-online-mart-token',\n                    /* eslint-enable @typescript-eslint/naming-convention */\n                }),\n            });\n        });\n\n        it('fails to execute the td online mart strategy strategy if no payment is provided when using td online mart strategy client', async () => {\n            payload = {};\n\n            await tdOnlineMartPaymentStrategy.initialize(\n                tdOnlineMartClientScriptInitializationOptions,\n            );\n\n            await expect(tdOnlineMartPaymentStrategy.execute(payload)).rejects.toThrow(\n                PaymentArgumentInvalidError,\n            );\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('fails to execute the td online mart strategy when token is not created', async () => {\n            tdOnlineMartClient.createToken = jest.fn((callback) => {\n                callback({\n                    token: '',\n                    code: '',\n                });\n            });\n\n            await tdOnlineMartPaymentStrategy.initialize(\n                tdOnlineMartClientScriptInitializationOptions,\n            );\n\n            await expect(tdOnlineMartPaymentStrategy.execute(payload)).rejects.toThrow(\n                MissingDataError,\n            );\n\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('fails to execute the td online mart strategy when token is not created and we getting error message', async () => {\n            tdOnlineMartClient.createToken = jest.fn((callback) => {\n                callback({\n                    error: {\n                        field: 'field',\n                        type: 'type',\n                        message: 'error occurs',\n                    },\n                    code: '',\n                });\n            });\n\n            await tdOnlineMartPaymentStrategy.initialize(\n                tdOnlineMartClientScriptInitializationOptions,\n            );\n\n            await expect(tdOnlineMartPaymentStrategy.execute(payload)).rejects.toThrow(Error);\n\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        it('fails to execute the strategy if no method id is provided with checkout takeover', async () => {\n            payload.payment = {\n                methodId: '',\n            };\n\n            await tdOnlineMartPaymentStrategy.initialize(\n                tdOnlineMartClientScriptInitializationOptions,\n            );\n\n            await expect(tdOnlineMartPaymentStrategy.execute(payload)).rejects.toThrow(\n                MissingDataError,\n            );\n\n            expect(paymentIntegrationService.submitPayment).not.toHaveBeenCalled();\n        });\n\n        describe('with Vaulted Instruments', () => {\n            beforeEach(() => {\n                jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue({\n                    ...getCart(),\n                    lineItems: {\n                        digitalItems: [],\n                        physicalItems: [],\n                        giftCertificates: [],\n                    },\n                });\n            });\n\n            it('call submitPayment with instrument id', async () => {\n                payload = {\n                    payment: {\n                        methodId: 'tdonlinemart',\n                        paymentData: {\n                            instrumentId: 'testInstrumentId',\n                        },\n                    },\n                };\n\n                await tdOnlineMartPaymentStrategy.initialize(\n                    tdOnlineMartClientScriptInitializationOptions,\n                );\n\n                await tdOnlineMartPaymentStrategy.execute(payload);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                    1,\n                    expect.objectContaining({\n                        methodId: 'tdonlinemart',\n                        paymentData: {\n                            instrumentId: 'testInstrumentId',\n                            shouldSaveInstrument: false,\n                            shouldSetAsDefaultInstrument: false,\n                            /* eslint-disable @typescript-eslint/naming-convention */\n                            browser_info: expect.objectContaining({\n                                color_depth: expect.any(Number),\n                                java_enabled: expect.any(Boolean),\n                                language: expect.any(String),\n                                screen_height: expect.any(Number),\n                                screen_width: expect.any(Number),\n                                time_zone_offset: expect.any(String),\n                            }),\n                            /* eslint-enable @typescript-eslint/naming-convention */\n                        },\n                    }),\n                );\n            });\n\n            it('call submitPayment with untrusted instrument', async () => {\n                payload = {\n                    payment: {\n                        methodId: 'tdonlinemart',\n                        paymentData: {\n                            instrumentId: 'testInstrumentId-trusted-false',\n                        },\n                    },\n                };\n\n                await tdOnlineMartPaymentStrategy.initialize(\n                    tdOnlineMartClientScriptInitializationOptions,\n                );\n\n                await tdOnlineMartPaymentStrategy.execute(payload);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                    1,\n                    expect.objectContaining({\n                        methodId: 'tdonlinemart',\n                        paymentData: expect.objectContaining({\n                            instrumentId: 'testInstrumentId-trusted-false',\n                            nonce: 'testInstrumentId-trusted-false',\n                        }),\n                    }),\n                );\n            });\n\n            it('call submitPayment with verification nonce when there are both physical and digital items in the cart', async () => {\n                payload = {\n                    payment: {\n                        methodId: 'tdonlinemart',\n                        paymentData: {\n                            instrumentId: 'testInstrumentId',\n                        },\n                    },\n                };\n\n                jest.spyOn(paymentIntegrationService.getState(), 'getCartOrThrow').mockReturnValue(\n                    getCart(),\n                );\n\n                await tdOnlineMartPaymentStrategy.initialize(\n                    tdOnlineMartClientScriptInitializationOptions,\n                );\n\n                await tdOnlineMartPaymentStrategy.execute(payload);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                    1,\n                    expect.objectContaining({\n                        methodId: 'tdonlinemart',\n                        paymentData: expect.objectContaining({\n                            instrumentId: 'testInstrumentId',\n                            nonce: 'testInstrumentId',\n                        }),\n                    }),\n                );\n            });\n\n            it('call submitPayment with instrumentId and shouldSetAsDefaultInstrument id if customer want to save instrument', async () => {\n                payload = {\n                    payment: {\n                        methodId: 'tdonlinemart',\n                        paymentData: {\n                            instrumentId: 'testInstrumentId',\n                            shouldSetAsDefaultInstrument: true,\n                        },\n                    },\n                };\n\n                await tdOnlineMartPaymentStrategy.initialize(\n                    tdOnlineMartClientScriptInitializationOptions,\n                );\n\n                await tdOnlineMartPaymentStrategy.execute(payload);\n\n                expect(paymentIntegrationService.submitPayment).toHaveBeenNthCalledWith(\n                    1,\n                    expect.objectContaining({\n                        methodId: 'tdonlinemart',\n                        paymentData: expect.objectContaining({\n                            instrumentId: 'testInstrumentId',\n                            shouldSetAsDefaultInstrument: true,\n                            /* eslint-disable @typescript-eslint/naming-convention */\n                            browser_info: expect.objectContaining({\n                                color_depth: expect.any(Number),\n                                java_enabled: expect.any(Boolean),\n                                language: expect.any(String),\n                                screen_height: expect.any(Number),\n                                screen_width: expect.any(Number),\n                                time_zone_offset: expect.any(String),\n                            }),\n                            /* eslint-enable @typescript-eslint/naming-convention */\n                        }),\n                    }),\n                );\n            });\n        });\n\n        describe('execute with additional actions', () => {\n            it('throw not additional action error', async () => {\n                let submitPaymentError;\n\n                jest.spyOn(\n                    TdOnlineMartAdditionalAction,\n                    'isTdOnlineMartAdditionalAction',\n                ).mockReturnValue(false);\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue({\n                    message: 'any_error',\n                });\n\n                await tdOnlineMartPaymentStrategy.initialize(\n                    tdOnlineMartClientScriptInitializationOptions,\n                );\n\n                try {\n                    await tdOnlineMartPaymentStrategy.execute(payload);\n                } catch (error) {\n                    submitPaymentError = error;\n                } finally {\n                    expect(submitPaymentError).toEqual({ message: 'any_error' });\n                }\n            });\n\n            it('throw error when not enough 3DS data', async () => {\n                let submitPaymentError;\n\n                jest.spyOn(\n                    TdOnlineMartAdditionalAction,\n                    'isTdOnlineMartAdditionalAction',\n                ).mockReturnValue(true);\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue({\n                    body: {\n                        errors: [\n                            {\n                                code: 'three_ds_result',\n                            },\n                        ],\n                        // eslint-disable-next-line @typescript-eslint/naming-convention\n                        three_ds_result: {},\n                    },\n                });\n\n                await tdOnlineMartPaymentStrategy.initialize(\n                    tdOnlineMartClientScriptInitializationOptions,\n                );\n\n                try {\n                    await tdOnlineMartPaymentStrategy.execute(payload);\n                } catch (error) {\n                    submitPaymentError = error;\n                } finally {\n                    expect(submitPaymentError).toBeInstanceOf(PaymentArgumentInvalidError);\n                }\n            });\n\n            it('execute 3DS challenge', async () => {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n                const postFormMock = jest.fn((_url, _options, resolveFn) => resolveFn());\n\n                jest.spyOn(formPoster, 'postForm').mockImplementation(postFormMock);\n                jest.spyOn(\n                    TdOnlineMartAdditionalAction,\n                    'isTdOnlineMartAdditionalAction',\n                ).mockReturnValue(true);\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValue({\n                    body: {\n                        errors: [\n                            {\n                                code: 'three_ds_result',\n                            },\n                        ],\n                        /* eslint-disable @typescript-eslint/naming-convention */\n                        three_ds_result: {\n                            acs_url: 'https://example.com',\n                            payer_auth_request: '3ds_session_data',\n                            merchant_data: 'creq_data',\n                        },\n                        /* eslint-enable @typescript-eslint/naming-convention */\n                    },\n                });\n\n                await tdOnlineMartPaymentStrategy.initialize(\n                    tdOnlineMartClientScriptInitializationOptions,\n                );\n                await tdOnlineMartPaymentStrategy.execute(payload);\n\n                expect(postFormMock).toHaveBeenCalledWith(\n                    'https://example.com',\n                    {\n                        threeDSSessionData: '3ds_session_data',\n                        creq: 'creq_data',\n                    },\n                    expect.any(Function),\n                    '_top',\n                );\n            });\n        });\n    });\n\n    describe('deinitialize', () => {\n        it('unmount td online mart hosted fields', async () => {\n            const unmountMock = jest.fn();\n            const mountMock = jest.fn();\n\n            tdOnlineMartClient = getTDOnlineMartClient({ mount: mountMock, unmount: unmountMock });\n            jest.spyOn(tdOnlineScriptLoader, 'load').mockImplementation(() =>\n                Promise.resolve(tdOnlineMartClient),\n            );\n\n            await tdOnlineMartPaymentStrategy.initialize(\n                tdOnlineMartClientScriptInitializationOptions,\n            );\n\n            await tdOnlineMartPaymentStrategy.deinitialize();\n\n            expect(unmountMock).toHaveBeenCalledTimes(3);\n        });\n\n        it('unmount only existing td online mart hosted fields', async () => {\n            const unmountMock = jest.fn();\n            const mountMock = jest.fn();\n\n            removeInputContainers();\n            createInputContainers([containers[0]]);\n\n            tdOnlineMartClient = getTDOnlineMartClient({ mount: mountMock, unmount: unmountMock });\n            jest.spyOn(tdOnlineScriptLoader, 'load').mockImplementation(() =>\n                Promise.resolve(tdOnlineMartClient),\n            );\n\n            await tdOnlineMartPaymentStrategy.initialize(\n                tdOnlineMartClientScriptInitializationOptions,\n            );\n\n            await tdOnlineMartPaymentStrategy.deinitialize();\n\n            expect(unmountMock).toHaveBeenCalledTimes(1);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/td-bank-integration/src/td-online-mart-payment-strategy.ts",
    "content": "import { FormPoster } from '@bigcommerce/form-poster';\n\nimport {\n    getBrowserInfo,\n    InvalidArgumentError,\n    isHostedInstrumentLike,\n    isVaultedInstrument,\n    MissingDataError,\n    MissingDataErrorType,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { isBaseInstrument } from '@bigcommerce/checkout-sdk/utility';\n\nimport isCreateTokenError from './is-create-token-error';\nimport { isTdOnlineMartAdditionalAction } from './isTdOnlineMartAdditionalAction';\nimport {\n    FieldType,\n    TDCustomCheckoutSDK,\n    TDOnlineMartInput,\n    TdOnlineMartThreeDSErrorBody,\n} from './td-online-mart';\nimport TDOnlineMartScriptLoader from './td-online-mart-script-loader';\n\nexport default class TDOnlineMartPaymentStrategy implements PaymentStrategy {\n    private tdOnlineMartClient?: TDCustomCheckoutSDK;\n    private tdInputs: TDOnlineMartInput[] = [\n        {\n            id: 'ccNumber',\n            fieldType: FieldType.CARD_NUMBER,\n        },\n        {\n            id: 'ccCvv',\n            fieldType: FieldType.CVV,\n        },\n        {\n            id: 'ccExpiry',\n            fieldType: FieldType.EXPIRY,\n        },\n    ];\n\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private tdOnlineMartScriptLoader: TDOnlineMartScriptLoader,\n        private formPoster: FormPoster,\n    ) {}\n\n    async initialize(options: PaymentInitializeOptions): Promise<void> {\n        const { 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        this.tdOnlineMartClient = await this.loadTDOnlineMartJs();\n\n        this.mountHostedFields(methodId);\n    }\n\n    async execute(payload: OrderRequestBody, options?: PaymentRequestOptions): Promise<void> {\n        const { payment, ...order } = payload;\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        if (!payment.methodId) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const paymentPayload = await this.getPaymentPayloadOrThrow(payment);\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n\n        try {\n            await this.paymentIntegrationService.submitPayment(paymentPayload);\n        } catch (error: unknown) {\n            await this.processWithAdditionalAction(error);\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        this.tdOnlineMartClient = undefined;\n\n        this.tdInputs.forEach(({ inputElement }: TDOnlineMartInput) => {\n            inputElement?.unmount();\n        });\n\n        return Promise.resolve();\n    }\n\n    private async getPaymentPayloadOrThrow(payment: OrderPaymentRequestBody) {\n        const { methodId, paymentData } = payment;\n        const { shouldSaveInstrument = false, shouldSetAsDefaultInstrument = false } =\n            isHostedInstrumentLike(paymentData) ? paymentData : {};\n        const commonPaymentData = {\n            // eslint-disable-next-line @typescript-eslint/naming-convention\n            browser_info: getBrowserInfo(),\n            shouldSaveInstrument,\n            shouldSetAsDefaultInstrument,\n        };\n\n        if (\n            isHostedInstrumentLike(paymentData) &&\n            isVaultedInstrument(paymentData) &&\n            paymentData.instrumentId\n        ) {\n            const cart = this.paymentIntegrationService.getState().getCartOrThrow();\n            const digitalItemsInCart = !!cart.lineItems.digitalItems.length;\n\n            const shouldAddVerificationToken =\n                !this.isTrustedVaultingInstrument(paymentData.instrumentId) || digitalItemsInCart;\n\n            return {\n                methodId,\n                paymentData: {\n                    ...commonPaymentData,\n                    instrumentId: paymentData.instrumentId,\n                    ...(shouldAddVerificationToken ? { nonce: paymentData.instrumentId } : {}),\n                },\n            };\n        }\n\n        let nonce: string;\n\n        try {\n            nonce = await this.getTokenOrThrow();\n        } catch (error) {\n            this.throwTokenizationError(error);\n        }\n\n        return {\n            methodId,\n            paymentData: {\n                ...commonPaymentData,\n                nonce,\n            },\n        };\n    }\n\n    private mountHostedFields(methodId: string): void {\n        const options = this.getHostedFieldsOptions();\n        const tdOnlineMartClient = this.getTDOnlineMartClientOrThrow();\n\n        this.tdInputs.forEach((input: TDOnlineMartInput) => {\n            const inputId = `${methodId}-${input.id}`;\n\n            if (!document.getElementById(inputId)) {\n                return;\n            }\n\n            input.inputElement = tdOnlineMartClient.create(input.fieldType, options);\n            input.inputElement.mount(`#${inputId}`);\n        });\n    }\n\n    private async loadTDOnlineMartJs(): Promise<TDCustomCheckoutSDK> {\n        if (this.tdOnlineMartClient) {\n            return this.tdOnlineMartClient;\n        }\n\n        return this.tdOnlineMartScriptLoader.load();\n    }\n\n    private getTokenOrThrow(): Promise<string> {\n        return new Promise((resolve, reject) => {\n            this.getTDOnlineMartClientOrThrow().createToken((result) => {\n                const { error, token } = result;\n\n                if (error || !token) {\n                    return reject(error);\n                }\n\n                resolve(token);\n            });\n        });\n    }\n\n    private getTDOnlineMartClientOrThrow(): TDCustomCheckoutSDK {\n        if (!this.tdOnlineMartClient) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return this.tdOnlineMartClient;\n    }\n\n    private async processWithAdditionalAction(error: unknown): Promise<void> {\n        if (!isTdOnlineMartAdditionalAction(error)) {\n            throw error;\n        }\n\n        const { three_ds_result: threeDSResult }: TdOnlineMartThreeDSErrorBody = error.body;\n        const {\n            acs_url: formUrl,\n            payer_auth_request: threeDSSessionData,\n            merchant_data: creq,\n        } = threeDSResult || {};\n\n        if (!formUrl || !threeDSSessionData || !creq) {\n            throw new PaymentArgumentInvalidError(['formUrl', 'threeDSSessionData', 'creq']);\n        }\n\n        return new Promise((resolve) => {\n            this.formPoster.postForm(\n                formUrl,\n                {\n                    threeDSSessionData,\n                    creq,\n                },\n                resolve,\n                '_top',\n            );\n        });\n    }\n\n    private throwTokenizationError(error: unknown): never {\n        if (!isCreateTokenError(error)) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n        }\n\n        throw new Error(error.message);\n    }\n\n    private getHostedFieldsOptions() {\n        const style = {\n            error: {\n                color: '#d14343',\n            },\n        };\n\n        const classes = {\n            error: 'form-input--error',\n        };\n\n        return {\n            style,\n            classes,\n        };\n    }\n\n    private isTrustedVaultingInstrument(instrumentId: string): boolean {\n        const instruments = this.paymentIntegrationService.getState().getInstruments();\n\n        const findInstrument = instruments?.find(\n            (instrument) => isBaseInstrument(instrument) && instrument.bigpayToken === instrumentId,\n        );\n        const trustedShippingAddress = isBaseInstrument(findInstrument)\n            ? findInstrument.trustedShippingAddress\n            : {};\n\n        return !!trustedShippingAddress;\n    }\n}\n"
  },
  {
    "path": "packages/td-bank-integration/src/td-online-mart-script-loader.spec.ts",
    "content": "import ScriptLoader from '@bigcommerce/script-loader/lib/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { TDCustomCheckoutSDK, TdOnlineMartHostWindow } from './td-online-mart';\nimport TDOnlineMartScriptLoader from './td-online-mart-script-loader';\nimport { getTDOnlineMartClient } from './td-online-mart.mock';\n\ndescribe('TDOnlineMartScriptLoader', () => {\n    let scriptLoader: ScriptLoader;\n    let mockWindow: TdOnlineMartHostWindow;\n    let tdOnlineMartScriptLoader: TDOnlineMartScriptLoader;\n    let tdOnlineMartClient: TDCustomCheckoutSDK;\n\n    beforeEach(() => {\n        scriptLoader = new ScriptLoader();\n        // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n        mockWindow = {} as TdOnlineMartHostWindow;\n        tdOnlineMartScriptLoader = new TDOnlineMartScriptLoader(scriptLoader, mockWindow);\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    describe('load method', () => {\n        beforeEach(() => {\n            tdOnlineMartClient = getTDOnlineMartClient();\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.customcheckout = jest.fn(() => tdOnlineMartClient);\n\n                return Promise.resolve();\n            });\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('check if scriptLoader is called with proper url', async () => {\n            await tdOnlineMartScriptLoader.load();\n\n            expect(scriptLoader.loadScript).toHaveBeenCalledWith(\n                'https://libs.na.bambora.com/customcheckout/1/customcheckout.js',\n            );\n        });\n\n        it('throw error when custom checkout does not exist on window', async () => {\n            scriptLoader.loadScript = jest.fn(() => {\n                mockWindow.customcheckout = undefined;\n\n                return Promise.resolve();\n            });\n\n            try {\n                await tdOnlineMartScriptLoader.load();\n            } catch (error) {\n                // eslint-disable-next-line jest/no-conditional-expect\n                expect(error).toBeInstanceOf(PaymentMethodClientUnavailableError);\n            }\n        });\n    });\n});\n"
  },
  {
    "path": "packages/td-bank-integration/src/td-online-mart-script-loader.ts",
    "content": "import { ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { PaymentMethodClientUnavailableError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { TDCustomCheckoutSDK, TdOnlineMartHostWindow } from './td-online-mart';\n\nexport default class TDOnlineMartScriptLoader {\n    constructor(\n        private scriptLoader: ScriptLoader,\n        private tdOnlineMartWindow: TdOnlineMartHostWindow = window,\n    ) {}\n\n    async load(): Promise<TDCustomCheckoutSDK> {\n        if (!this.tdOnlineMartWindow.customcheckout) {\n            await this.scriptLoader.loadScript(\n                'https://libs.na.bambora.com/customcheckout/1/customcheckout.js',\n            );\n        }\n\n        if (!this.tdOnlineMartWindow.customcheckout) {\n            throw new PaymentMethodClientUnavailableError();\n        }\n\n        return this.tdOnlineMartWindow.customcheckout();\n    }\n}\n"
  },
  {
    "path": "packages/td-bank-integration/src/td-online-mart.mock.ts",
    "content": "import { TDCustomCheckoutSDK, TdOnlineMartElement } from './td-online-mart';\n\nconst defaultElementMock = { mount: jest.fn(), unmount: jest.fn() };\n\nexport function getTDOnlineMartClient(\n    elementMock: TdOnlineMartElement = defaultElementMock,\n): TDCustomCheckoutSDK {\n    return {\n        create: jest.fn(() => elementMock),\n        createToken: jest.fn(),\n    };\n}\n"
  },
  {
    "path": "packages/td-bank-integration/src/td-online-mart.ts",
    "content": "import { RequestError } from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport interface TdOnlineMartHostWindow extends Window {\n    customcheckout?(): TDCustomCheckoutSDK;\n}\n\nexport interface TDCustomCheckoutSDK {\n    create(fieldType: FieldType, options?: FieldOptions): TdOnlineMartElement;\n    createToken(callback: (result: CreateTokenResponse) => void): void;\n}\n\nexport interface TdOnlineMartElement {\n    mount(cssSelector: string): void;\n    unmount(): void;\n}\n\nexport enum FieldType {\n    CARD_NUMBER = 'card-number',\n    CVV = 'cvv',\n    EXPIRY = 'expiry',\n}\n\nexport interface TDOnlineMartInput {\n    id: string;\n    fieldType: FieldType;\n    inputElement?: TdOnlineMartElement;\n}\n\ninterface CreateTokenResponse {\n    code: string;\n    error?: CreateTokenError;\n    token?: string;\n    last4?: string;\n    expiryMonth?: string;\n    expiryYear?: string;\n}\n\nexport interface CreateTokenError {\n    field: string;\n    type: string;\n    message: string;\n}\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport interface TdOnlineMartThreeDSErrorBody {\n    errors?: Array<{ code: string }>;\n    three_ds_result?: {\n        acs_url: string;\n        payer_auth_request: string;\n        merchant_data: string;\n    };\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport type TdOnlineMartAdditionalAction = RequestError<TdOnlineMartThreeDSErrorBody>;\n\n// Note: The style property affects the remote styling of text inside the iframe input. The classes property updates the class list of the element the field is mounted to on your page.\ninterface FieldOptions {\n    placeholder?: string;\n    style?: Styles;\n    classes?: Classes;\n    brands?: string[];\n}\n\ninterface Classes {\n    base?: string;\n    complete?: string;\n    empty?: string;\n    focus?: string;\n    error?: string;\n}\n\ninterface Styles {\n    base?: CssStyles;\n    complete?: CssStyles;\n    empty?: CssStyles;\n    error?: CssStyles;\n}\n\ninterface CssStyles {\n    color?: string;\n    fontFamily?: string;\n    fontSize?: string;\n    fontStyle?: string;\n    fontWeight?: string;\n    textDecoration?: string;\n    padding?: string;\n    paddingLeft?: string;\n    paddingTop?: string;\n    paddingRight?: string;\n    paddingBottom?: string;\n}\n"
  },
  {
    "path": "packages/td-bank-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n}\n"
  },
  {
    "path": "packages/td-bank-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/td-bank-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/ui/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/restrict-template-expressions\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-non-null-assertion\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/ui/README.md",
    "content": "# ui\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Running unit tests\n\nRun `nx test ui` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint ui` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/ui/jest.config.js",
    "content": "module.exports = {\n    displayName: \"ui\",\n    preset: \"../../jest.preset.js\",\n    globals: {\n        \"ts-jest\": {\n            tsconfig: \"<rootDir>/tsconfig.spec.json\",\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: [\"../../jest-setup.js\"],\n    coverageDirectory: \"../../coverage/packages/ui\",\n};\n"
  },
  {
    "path": "packages/ui/project.json",
    "content": "{\n    \"name\": \"ui\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/ui/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/ui/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/ui\"],\n            \"options\": {\n                \"jestConfig\": \"packages/ui/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/ui/src/index.ts",
    "content": "export { Overlay } from './overlay';\nexport {\n    LoadingIndicator,\n    LoadingIndicatorStyles,\n    DEFAULT_CONTAINER_STYLES,\n} from './loading-indicator';\n"
  },
  {
    "path": "packages/ui/src/loading-indicator/__snapshots__/loading-indicator.spec.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`LoadingIndicator inserts loading indicator element into container 1`] = `\n<div\n  style=\"display: block; bottom: 0px; left: 0px; height: 100%; width: 100%; position: absolute; right: 0px; top: 0px; transition: all 250ms ease-out; opacity: 1; visibility: visible;\"\n>\n  <div\n    style=\"display: block; width: 70px; height: 70px; border-radius: 70px; border: 1px solid; border-color: #ffffff #ffffff #d9d9d9 #d9d9d9; margin: 0px auto; position: absolute; left: 0px; right: 0px; top: 50%; transform: translateY(-50%) rotate(0deg); animation: embedded-checkout-loading-indicator-rotation 500ms infinite cubic-bezier(0.69, 0.31, 0.56, 0.83);\"\n  />\n</div>\n`;\n"
  },
  {
    "path": "packages/ui/src/loading-indicator/index.ts",
    "content": "export { default as LoadingIndicator } from './loading-indicator';\nexport { DEFAULT_CONTAINER_STYLES } from './loading-indicator';\nexport { LoadingIndicatorStyles } from './loading-indicator-styles';\n"
  },
  {
    "path": "packages/ui/src/loading-indicator/loading-indicator-styles.ts",
    "content": "export interface LoadingIndicatorStyles {\n    size?: number;\n    color?: string;\n    backgroundColor?: string;\n}\n\nexport interface LoadingIndicatorContainerStyles {\n    [key: string]: string;\n}\n"
  },
  {
    "path": "packages/ui/src/loading-indicator/loading-indicator.spec.ts",
    "content": "import LoadingIndicator from './loading-indicator';\n\ndescribe('LoadingIndicator', () => {\n    let indicator: LoadingIndicator;\n    let parentId: string;\n    let parent: HTMLElement;\n\n    beforeEach(() => {\n        parentId = 'container';\n        indicator = new LoadingIndicator();\n\n        parent = document.createElement('div');\n        parent.id = parentId;\n\n        document.body.appendChild(parent);\n    });\n\n    afterEach(() => {\n        document.body.removeChild(parent);\n    });\n\n    it('inserts loading indicator element into container', () => {\n        indicator.show(parentId);\n\n        expect(parent.firstChild).toMatchSnapshot();\n    });\n\n    it('renders loading indicator with provided styles prop', () => {\n        indicator = new LoadingIndicator({\n            styles: {\n                size: 10,\n            },\n        });\n\n        indicator.show(parentId);\n\n        const child = parent.getElementsByTagName('div')[0];\n        const loadingIndicator = child.getElementsByTagName('div')[0];\n\n        expect(loadingIndicator.style.width).toBe('10px');\n        expect(loadingIndicator.style.height).toBe('10px');\n    });\n\n    it('shows loading indicator', () => {\n        indicator.show(parentId);\n\n        const child = parent.getElementsByTagName('div')[0];\n\n        expect(child.style.visibility).toBe('visible');\n        expect(child.style.opacity).toBe('1');\n    });\n\n    it('throws error is parent element does not exist', () => {\n        expect(() => indicator.show('invalid_container')).toThrow();\n    });\n\n    it('hides loading indicator', () => {\n        indicator.show(parentId);\n        indicator.hide();\n\n        const child = parent.getElementsByTagName('div')[0];\n\n        expect(child.style.opacity).toBe('0');\n    });\n\n    it('completely hides loading indicator once transition is complete', () => {\n        indicator.show(parentId);\n        indicator.hide();\n\n        const child = parent.getElementsByTagName('div')[0];\n        const event = new Event('transitionend');\n\n        child.dispatchEvent(event);\n\n        expect(child.style.visibility).toBe('hidden');\n    });\n\n    it('does not throw error if it is already hidden', () => {\n        expect(() => indicator.hide()).not.toThrow();\n    });\n});\n"
  },
  {
    "path": "packages/ui/src/loading-indicator/loading-indicator.ts",
    "content": "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        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\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"
  },
  {
    "path": "packages/ui/src/overlay/index.ts",
    "content": "export { default as Overlay, OverlayShowOptions } from './overlay';\n"
  },
  {
    "path": "packages/ui/src/overlay/overlay-style.ts",
    "content": "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"
  },
  {
    "path": "packages/ui/src/overlay/overlay.spec.ts",
    "content": "import Overlay from './overlay';\n\ndescribe('Overlay', () => {\n    let overlay: Overlay;\n\n    describe('only overlay element', () => {\n        beforeEach(() => {\n            overlay = new Overlay({\n                id: 'overlay',\n                transitionDuration: 400,\n            });\n        });\n\n        afterEach(() => {\n            const element = document.getElementById('overlay');\n\n            if (element) {\n                element.parentElement!.removeChild(element);\n            }\n        });\n\n        it('shows element', () => {\n            overlay.show();\n\n            const element = document.getElementById('overlay');\n\n            expect(element).not.toBeNull();\n        });\n\n        it('shows styles', () => {\n            overlay.show();\n\n            const styles = document.getElementById('overlay--styles');\n\n            expect(styles).not.toBeNull();\n        });\n\n        it('triggers click handler if it is provided', () => {\n            const onClick = jest.fn();\n\n            overlay.show({ onClick });\n\n            const element = document.getElementById('overlay');\n\n            element!.dispatchEvent(new MouseEvent('click'));\n\n            expect(onClick).toHaveBeenCalled();\n        });\n\n        it('fades element into view', async () => {\n            overlay.show();\n\n            const element = document.getElementById('overlay');\n\n            await new Promise((resolve) => {\n                setTimeout(resolve, 400);\n            });\n\n            expect(element!.style.opacity).toBe('1');\n        });\n\n        it('fades element out of view', async () => {\n            overlay.show();\n\n            const element = document.getElementById('overlay');\n\n            overlay.remove();\n\n            await new Promise((resolve) => {\n                setTimeout(resolve, 400);\n            });\n\n            expect(element!.style.opacity).toBe('0');\n        });\n\n        it('removes click handler when element is removed', () => {\n            const onClick = jest.fn();\n\n            overlay.show({ onClick });\n\n            const element = document.getElementById('overlay');\n\n            overlay.remove();\n\n            element!.dispatchEvent(new MouseEvent('click'));\n\n            expect(onClick).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('with close element', () => {\n        beforeEach(() => {\n            overlay = new Overlay({ hasCloseButton: true });\n        });\n\n        afterEach(() => {\n            const element = document.querySelector('.checkoutOverlay--layout');\n\n            if (element) {\n                element.parentElement!.removeChild(element);\n            }\n        });\n\n        it('shows layout element', () => {\n            overlay.show();\n\n            const element = document.querySelector('.checkoutOverlay--layout');\n\n            expect(element).not.toBeNull();\n        });\n\n        it('shows close element', () => {\n            overlay.show();\n\n            const element = document.querySelector('.checkoutOverlay--close');\n\n            expect(element).not.toBeNull();\n        });\n\n        it('triggers click handler if it is provided', () => {\n            const onClick = jest.fn();\n\n            overlay.show({ onClick });\n\n            const element = document.getElementById('checkoutOverlay');\n\n            element!.dispatchEvent(new MouseEvent('click'));\n\n            expect(onClick).toHaveBeenCalled();\n        });\n\n        it('triggers close click handler if it is provided', () => {\n            const onClickClose = jest.fn();\n\n            overlay.show({ onClickClose });\n\n            const closeElement = document.querySelector('.checkoutOverlay--close');\n\n            closeElement!.dispatchEvent(new MouseEvent('click'));\n\n            expect(onClickClose).toHaveBeenCalled();\n        });\n\n        it('removes click handler when element is removed', () => {\n            const onClickClose = jest.fn();\n\n            overlay.show({ onClickClose });\n\n            const closeElement = document.querySelector('.checkoutOverlay--close');\n\n            overlay.remove();\n\n            closeElement!.dispatchEvent(new MouseEvent('click'));\n\n            expect(onClickClose).not.toHaveBeenCalled();\n        });\n    });\n\n    describe('with modal and inner element', () => {\n        beforeEach(() => {\n            const innerHtml = document.createElement('div');\n\n            innerHtml.id = 'innerElement';\n            overlay = new Overlay({ innerHtml });\n        });\n\n        afterEach(() => {\n            const element = document.getElementById('checkoutOverlay');\n\n            if (element) {\n                element.parentElement!.removeChild(element);\n            }\n        });\n\n        it('shows overlayText element', () => {\n            overlay.show();\n\n            const modal = document.querySelector('.checkoutOverlay--overlayText');\n\n            expect(modal).not.toBeNull();\n        });\n\n        it('shows inner element', () => {\n            overlay.show();\n\n            const innerElement = document.getElementById('innerElement');\n\n            expect(innerElement).not.toBeNull();\n        });\n\n        it('shows Document Fragment of inner elements', () => {\n            const innerElement = document.createElement('div');\n\n            innerElement.id = 'innerElement';\n\n            const innerElement2 = document.createElement('div');\n\n            innerElement2.id = 'innerElement2';\n\n            const fragment = document.createDocumentFragment();\n\n            fragment.appendChild(innerElement);\n            fragment.appendChild(innerElement2);\n\n            overlay = new Overlay({ innerHtml: fragment });\n\n            overlay.show();\n\n            const element = document.getElementById('innerElement');\n            const element2 = document.getElementById('innerElement2');\n\n            expect(element).not.toBeNull();\n            expect(element2).not.toBeNull();\n        });\n    });\n\n    describe('Multiple overlays', () => {\n        beforeEach(() => {\n            overlay = new Overlay({\n                id: 'overlay',\n            });\n        });\n\n        afterEach(() => {\n            const element = document.getElementById('overlay');\n\n            if (element) {\n                element.parentElement!.removeChild(element);\n            }\n        });\n\n        it('show multiple overlays', () => {\n            overlay.show();\n            overlay.show();\n\n            const elements = document.querySelectorAll('#overlay');\n\n            expect(elements).toHaveLength(1);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/ui/src/overlay/overlay.ts",
    "content": "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"
  },
  {
    "path": "packages/ui/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"references\": [\n        {\n          \"path\": \"./tsconfig.spec.json\"\n        }\n      ]\n}\n"
  },
  {
    "path": "packages/ui/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.spec.jsx\"\n    ]\n}\n"
  },
  {
    "path": "packages/utility/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/naming-convention\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/utility/README.md",
    "content": "# utility\n\nThis library is for creating utility functions that can be used across packages.\n\n## Running unit tests\n\nRun `nx test utility` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint utility` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/utility/jest.config.js",
    "content": "module.exports = {\n    displayName: 'utility',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/utility',\n};\n"
  },
  {
    "path": "packages/utility/project.json",
    "content": "{\n    \"name\": \"utility\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/utility/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:shared\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/utility/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/utility\"],\n            \"options\": {\n                \"jestConfig\": \"packages/utility/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/utility/src/bind-decorator/bind-decorator.spec.ts",
    "content": "// eslint-disable-next-line max-classes-per-file\nimport bind from './bind-decorator';\n\ndescribe('bindDecorator()', () => {\n    @bind\n    class Foo {\n        constructor(private name: string) {}\n\n        getName(): string {\n            return this.name;\n        }\n    }\n\n    class Bar {\n        constructor(private name: string) {}\n\n        @bind\n        getName(): string {\n            return this.name;\n        }\n    }\n\n    it('binds all methods of class to instance', () => {\n        const { getName } = new Foo('foo');\n\n        expect(getName()).toBe('foo');\n    });\n\n    it('binds method to instance', () => {\n        const { getName } = new Bar('bar');\n\n        expect(getName()).toBe('bar');\n    });\n});\n"
  },
  {
    "path": "packages/utility/src/bind-decorator/bind-decorator.ts",
    "content": "/**\n * Decorates a class or a method by binding all its prototype methods or itself\n * to the calling instance respectively.\n */\nfunction bindDecorator<T extends Method>(\n    target: object,\n    key: string,\n    descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T>;\nfunction bindDecorator<T extends Constructor<object>>(target: T): T;\n\nfunction bindDecorator(target: any, key?: any, descriptor?: any): any {\n    if (!key || !descriptor) {\n        return bindClassDecorator(target);\n    }\n\n    return bindMethodDecorator(target, key, descriptor);\n}\n\nexport default bindDecorator;\n\n/**\n * Decorates a class by binding all its prototype methods to the calling\n * instance.\n */\nexport function bindClassDecorator<T extends Constructor<object>>(target: T): T {\n    const decoratedTarget = class extends target {};\n\n    Object.getOwnPropertyNames(target.prototype).forEach((key) => {\n        const descriptor = Object.getOwnPropertyDescriptor(target.prototype, key);\n\n        if (!descriptor || key === 'constructor') {\n            return;\n        }\n\n        Object.defineProperty(\n            decoratedTarget.prototype,\n            key,\n            bindMethodDecorator(target.prototype, key, descriptor),\n        );\n    });\n\n    return decoratedTarget;\n}\n\n/**\n * Decorates a method by binding it to the calling instance.\n */\nexport function bindMethodDecorator<T extends Method>(\n    _: object,\n    key: string,\n    descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T> {\n    if (typeof descriptor.value !== 'function') {\n        return descriptor;\n    }\n\n    let method: T = descriptor.value;\n\n    return {\n        get() {\n            // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n            const boundMethod = method.bind(this) as T;\n\n            Object.defineProperty(this, key, {\n                ...descriptor,\n                value: boundMethod,\n            });\n\n            return boundMethod;\n        },\n        set(value) {\n            method = value;\n        },\n    };\n}\n\nexport type Constructor<T> = new (...args: any[]) => T;\nexport type Method = (...args: any[]) => any;\n"
  },
  {
    "path": "packages/utility/src/bind-decorator/index.ts",
    "content": "export { default as bindDecorator } from './bind-decorator';\n"
  },
  {
    "path": "packages/utility/src/index.ts",
    "content": "export { bindDecorator } from './bind-decorator';\nexport { isExperimentEnabled } from './is-experiment-enabled';\nexport { isBaseInstrument } from './is-base-instrument/is-base-instrument';\nexport { isWebView } from './is-web-view';\nexport { isReactNativeWindow } from './is-react-native-window';\nexport { isOperaWindow } from './is-opera-window';\n"
  },
  {
    "path": "packages/utility/src/is-base-instrument/is-base-instrument.spec.ts",
    "content": "import { BaseInstrument, isBaseInstrument } from './is-base-instrument';\n\ndescribe('isBaseInstrument', () => {\n    const validInstrument: BaseInstrument = {\n        bigpayToken: 'abc123',\n        defaultInstrument: true,\n        provider: 'stripe',\n        trustedShippingAddress: false,\n        method: 'card',\n        type: 'credit_card',\n    };\n\n    it('returns true for a valid BaseInstrument', () => {\n        expect(isBaseInstrument(validInstrument)).toBe(true);\n    });\n\n    it('returns false for null input', () => {\n        expect(isBaseInstrument(null)).toBe(false);\n    });\n});\n"
  },
  {
    "path": "packages/utility/src/is-base-instrument/is-base-instrument.ts",
    "content": "export interface BaseInstrument {\n    bigpayToken: string;\n    defaultInstrument: boolean;\n    provider: string;\n    trustedShippingAddress: boolean;\n    method: string;\n    type: string;\n}\n\nexport function isBaseInstrument(instrument: unknown): instrument is BaseInstrument {\n    if (typeof instrument !== 'object' || instrument === null) {\n        return false;\n    }\n\n    return (\n        'bigpayToken' in instrument &&\n        'defaultInstrument' in instrument &&\n        'provider' in instrument &&\n        'trustedShippingAddress' in instrument &&\n        'method' in instrument &&\n        'type' in instrument\n    );\n}\n"
  },
  {
    "path": "packages/utility/src/is-experiment-enabled/index.ts",
    "content": "export { default as isExperimentEnabled } from './is-experiment-enabled';\n"
  },
  {
    "path": "packages/utility/src/is-experiment-enabled/is-experiment-enabled.spec.ts",
    "content": "import isExperimentEnabled, { Features } from './is-experiment-enabled';\n\ndescribe('isExperimentEnabled', () => {\n    it('returns true if experiment is not present', () => {\n        const features: Features = {\n            test: true,\n        };\n\n        const experimentStatus = isExperimentEnabled(features, 'someexperiment');\n\n        expect(experimentStatus).toBe(true);\n    });\n\n    it('returns false if experiment value is false', () => {\n        const features: Features = {\n            test: false,\n        };\n\n        const experimentStatus = isExperimentEnabled(features, 'test');\n\n        expect(experimentStatus).toBe(false);\n    });\n\n    it('returns true if experiment value is true', () => {\n        const features: Features = {\n            test: true,\n        };\n\n        const experimentStatus = isExperimentEnabled(features, 'test');\n\n        expect(experimentStatus).toBe(true);\n    });\n});\n"
  },
  {
    "path": "packages/utility/src/is-experiment-enabled/is-experiment-enabled.ts",
    "content": "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"
  },
  {
    "path": "packages/utility/src/is-opera-window/index.ts",
    "content": "export { isOperaWindow } from './is-opera-window';\n"
  },
  {
    "path": "packages/utility/src/is-opera-window/is-opera-window.ts",
    "content": "interface OperaWindow extends Window {\n    opera: string;\n}\n\nexport function isOperaWindow(window: Window): window is OperaWindow {\n    return 'opera' in window;\n}\n"
  },
  {
    "path": "packages/utility/src/is-react-native-window/index.ts",
    "content": "export { isReactNativeWindow } from './is-react-native-window';\n"
  },
  {
    "path": "packages/utility/src/is-react-native-window/is-react-native-window.ts",
    "content": "interface ReactNativeWindow extends Window {\n    ReactNativeWebView: {\n        postMessage(msg: string): void;\n    };\n}\n\nexport function isReactNativeWindow(window: Window): window is ReactNativeWindow {\n    return 'ReactNativeWebView' in window;\n}\n"
  },
  {
    "path": "packages/utility/src/is-web-view/index.ts",
    "content": "export { isWebView } from './is-web-view';\n"
  },
  {
    "path": "packages/utility/src/is-web-view/is-web-view.spec.ts",
    "content": "import { isWebView } from './is-web-view';\n\ndescribe('isWebView', () => {\n    const originalUserAgent = navigator.userAgent;\n    const originalVendor = navigator.vendor;\n\n    const mockUserAgent = (ua: string) => {\n        Object.defineProperty(navigator, 'userAgent', {\n            value: ua,\n            configurable: true,\n        });\n    };\n\n    const mockVendor = (vendor: string) => {\n        Object.defineProperty(navigator, 'vendor', {\n            value: vendor,\n            configurable: true,\n        });\n    };\n\n    beforeEach(() => {\n        delete (window as any).ReactNativeWebView;\n        delete (window as any).opera;\n    });\n\n    afterEach(() => {\n        mockUserAgent(originalUserAgent);\n        mockVendor(originalVendor);\n    });\n\n    describe('React Native WebView Injection', () => {\n        it('should return true if window.ReactNativeWebView exists', () => {\n            (window as any).ReactNativeWebView = { postMessage: jest.fn() };\n\n            expect(isWebView()).toBe(true);\n        });\n    });\n\n    describe('Android Environments', () => {\n        it('should return true for an Android WebView (contains \"wv\")', () => {\n            mockUserAgent(\n                'Mozilla/5.0 (Linux; Android 11; Pixel 5 Build/RQ3A.210805.001.A1; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.159 Mobile Safari/537.36',\n            );\n\n            expect(isWebView()).toBe(true);\n        });\n\n        it('should return false for a standard Android Chrome browser (no \"wv\")', () => {\n            mockUserAgent(\n                'Mozilla/5.0 (Linux; Android 10; SM-G981B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Mobile Safari/537.36',\n            );\n\n            expect(isWebView()).toBe(false);\n        });\n    });\n\n    describe('iOS Environments', () => {\n        it('should return true for an iOS WebView (contains iPhone/iPad/iPod, lacks Safari)', () => {\n            mockUserAgent(\n                'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148',\n            );\n\n            expect(isWebView()).toBe(true);\n        });\n\n        it('should return false for a standard iOS Safari browser (contains Safari)', () => {\n            mockUserAgent(\n                'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1',\n            );\n\n            expect(isWebView()).toBe(false);\n        });\n    });\n\n    describe('Desktop Environments', () => {\n        it('should return false for standard desktop browsers', () => {\n            mockUserAgent(\n                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',\n            );\n\n            expect(isWebView()).toBe(false);\n        });\n    });\n\n    describe('Fallback mechanisms', () => {\n        it('should fallback to window.opera if userAgent and vendor are empty', () => {\n            mockUserAgent('');\n            mockVendor('');\n\n            (window as any).opera = 'Mozilla/5.0 (Linux; Android 9; wv)';\n\n            expect(isWebView()).toBe(true);\n        });\n    });\n});\n"
  },
  {
    "path": "packages/utility/src/is-web-view/is-web-view.ts",
    "content": "import { isOperaWindow } from '../is-opera-window';\nimport { isReactNativeWindow } from '../is-react-native-window';\n\nexport function isWebView(): boolean {\n    if (typeof window === 'undefined') {\n        return false;\n    }\n\n    if (isReactNativeWindow(window)) {\n        return true;\n    }\n\n    const userAgent =\n        navigator.userAgent || navigator.vendor || (isOperaWindow(window) ? window.opera : '');\n\n    const isAndroidWebView = /android.+; wv/i.test(userAgent);\n    const isIOSWebView =\n        /iPhone|iPod|iPad/i.test(userAgent) &&\n        /AppleWebKit/i.test(userAgent) &&\n        !/Safari/i.test(userAgent);\n\n    return isAndroidWebView || isIOSWebView;\n}\n"
  },
  {
    "path": "packages/utility/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\"\n}\n"
  },
  {
    "path": "packages/utility/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/workspace-tools/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"import/no-named-as-default\": \"off\",\n                \"import/no-named-as-default-member\": \"off\",\n                \"import/no-extraneous-dependencies\": \"off\",\n                \"global-require\": \"off\",\n                \"import/no-dynamic-require\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-unnecessary-condition\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/workspace-tools/README.md",
    "content": "# workspace-tools\n\nThis library was generated with [Nx](https://nx.dev).\n\n## Building\n\nRun `nx build workspace-tools` to build the library.\n\n## Running unit tests\n\nRun `nx test workspace-tools` to execute the unit tests via [Jest](https://jestjs.io).\n"
  },
  {
    "path": "packages/workspace-tools/executors.json",
    "content": "{\n    \"$schema\": \"http://json-schema.org/schema\",\n    \"executors\": {\n        \"build\": {\n            \"implementation\": \"./src/executors/build/executor\",\n            \"schema\": \"./src/executors/build/schema.json\",\n            \"description\": \"build executor\"\n        }\n    }\n}\n"
  },
  {
    "path": "packages/workspace-tools/generators.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/schema\",\n  \"name\": \"workspace-tools\",\n  \"version\": \"0.0.1\",\n  \"generators\": {\n    \"auto-export\": {\n      \"factory\": \"./src/generators/auto-export/generator\",\n      \"schema\": \"./src/generators/auto-export/schema.json\",\n      \"description\": \"auto-export generator\"\n    },\n    \"extend-interface\": {\n      \"factory\": \"./src/generators/extend-interface/generator\",\n      \"schema\": \"./src/generators/extend-interface/schema.json\",\n      \"description\": \"extend-interface generator\"\n    },\n    \"create-enum\": {\n      \"factory\": \"./src/generators/create-enum/generator\",\n      \"schema\": \"./src/generators/create-enum/schema.json\",\n      \"description\": \"create-enum generator\"\n    }\n  }\n}\n"
  },
  {
    "path": "packages/workspace-tools/jest.config.js",
    "content": "module.exports = {\n    displayName: 'workspace-tools',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n        },\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    coverageDirectory: '../../coverage/packages/workspace-tools',\n    collectCoverageFrom: [],\n};\n"
  },
  {
    "path": "packages/workspace-tools/package.json",
    "content": "{\n    \"name\": \"@bigcommerce/checkout-sdk/workspace-tools\",\n    \"version\": \"0.0.1\",\n    \"main\": \"src/index.js\",\n    \"generators\": \"./generators.json\"\n}\n"
  },
  {
    "path": "packages/workspace-tools/project.json",
    "content": "{\n    \"name\": \"@bigcommerce/checkout-sdk/workspace-tools\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/workspace-tools/src\",\n    \"tags\": [],\n    \"targets\": {\n        \"build\": {\n            \"executor\": \"@nx/js:tsc\",\n            \"outputs\": [\"{options.outputPath}\"],\n            \"options\": {\n                \"outputPath\": \"dist-tools\",\n                \"main\": \"packages/workspace-tools/src/index.ts\",\n                \"tsConfig\": \"packages/workspace-tools/tsconfig.lib.json\",\n                \"assets\": [\n                    \"packages/workspace-tools/*.md\",\n                    {\n                        \"input\": \"./packages/workspace-tools/src\",\n                        \"glob\": \"**/!(*.ts)\",\n                        \"output\": \"./src\"\n                    },\n                    {\n                        \"input\": \"./packages/workspace-tools/src\",\n                        \"glob\": \"**/*.d.ts\",\n                        \"output\": \"./src\"\n                    },\n                    {\n                        \"input\": \"./packages/workspace-tools\",\n                        \"glob\": \"generators.json\",\n                        \"output\": \".\"\n                    }\n                ]\n            }\n        },\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/workspace-tools/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/workspace-tools\"],\n            \"options\": {\n                \"jestConfig\": \"packages/workspace-tools/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/__fixtures__/function-a/function-a.ts",
    "content": "export default function functionA() {\n    return true;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/__fixtures__/function-a/index.ts",
    "content": "export { default as functionA } from './function-a';\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/__fixtures__/strategy-a/index.ts",
    "content": "export { default as StrategyA } from './strategy-a';\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/__fixtures__/strategy-a/strategy-a.ts",
    "content": "export default class StrategyA {\n    execute(): boolean {\n        return true;\n    }\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/__fixtures__/strategy-b/index.ts",
    "content": "export { default as StrategyB } from './strategy-b';\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/__fixtures__/strategy-b/strategy-b.ts",
    "content": "export default class StrategyB {\n    execute(): boolean {\n        return true;\n    }\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/__snapshots__/auto-export.spec.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`autoExport() export matching members from files to another file 1`] = `\nObject {\n  \"apiExtractorConfigs\": Map {\n    \"workspace-tools\" => \"{\n    \\\\\"compiler\\\\\": {\n        \\\\\"configType\\\\\": \\\\\"tsconfig\\\\\",\n        \\\\\"rootFolder\\\\\": \\\\\"../../../..\\\\\"\n    },\n    \\\\\"project\\\\\": {\n        \\\\\"entryPointSourceFile\\\\\": \\\\\"/__temp__/workspace-tools/index.d.ts\\\\\"\n    },\n    \\\\\"validationRules\\\\\": {\n        \\\\\"missingReleaseTags\\\\\": \\\\\"allow\\\\\"\n    },\n    \\\\\"apiReviewFile\\\\\": {\n        \\\\\"enabled\\\\\": false\n    },\n    \\\\\"apiJsonFile\\\\\": {\n        \\\\\"enabled\\\\\": false\n    },\n    \\\\\"dtsRollup\\\\\": {\n        \\\\\"enabled\\\\\": true,\n        \\\\\"mainDtsRollupPath\\\\\": \\\\\"/__temp__/workspace-tools.d.ts\\\\\"\n    }\n}\",\n  },\n  \"packageExports\": Map {\n    \"workspace-tools\" => \"export { StrategyA } from '../../__fixtures__/strategy-a';\nexport { StrategyB } from '../../__fixtures__/strategy-b';\n\",\n  },\n  \"packageExportsGrouped\": \"export { StrategyA } from '../__fixtures__/strategy-a';\nexport { StrategyB } from '../__fixtures__/strategy-b';\n\",\n}\n`;\n\nexports[`autoExport() handles scenario where no matching member is found 1`] = `\nObject {\n  \"apiExtractorConfigs\": Map {},\n  \"packageExports\": Map {},\n  \"packageExportsGrouped\": \"\",\n}\n`;\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/auto-export-config.ts",
    "content": "export default interface AutoExportConfig {\n    entries: AutoExportConfigEntry[];\n    apiExtractorConfig: ApiExtractorConfig;\n}\n\nexport interface AutoExportConfigEntry {\n    inputPath: string;\n    outputPath: string;\n    packageOutputPath: string;\n    memberPattern: string;\n}\n\nexport interface ApiExtractorConfig {\n    entryPointSourceFile: string;\n    mainDtsRollupPath: string;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/auto-export.spec.ts",
    "content": "import path from 'path';\n\nimport autoExport from './auto-export';\n\ndescribe('autoExport()', () => {\n    it('export matching members from files to another file', async () => {\n        const options = {\n            inputPath: path.join(__dirname, '/__fixtures__/**/index.ts'),\n            outputPath: path.join(__dirname, '/__temp__/output.ts'),\n            memberPattern: '^Strategy',\n            packageOutputPath: path.join(__dirname, '/__temp__/<moduleName>/output.ts'),\n            apiExtractorConfig: {\n                entryPointSourceFile: '/__temp__/<moduleName>/index.d.ts',\n                mainDtsRollupPath: '/__temp__/<moduleName>.d.ts',\n            },\n        };\n\n        expect(await autoExport(options)).toMatchSnapshot();\n    });\n\n    it('handles scenario where no matching member is found', async () => {\n        const options = {\n            inputPath: path.join(__dirname, '/__fixtures__/**/index.ts'),\n            outputPath: path.join(__dirname, '/__temp__/output.ts'),\n            memberPattern: '^Test',\n            packageOutputPath: path.join(__dirname, '/__temp__/<moduleName>/output.ts'),\n            apiExtractorConfig: {\n                entryPointSourceFile: '/__temp__/<moduleName>/index.d.ts',\n                mainDtsRollupPath: '/__temp__/<moduleName>.d.ts',\n            },\n        };\n\n        expect(await autoExport(options)).toMatchSnapshot();\n    });\n});\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/auto-export.ts",
    "content": "import fs from 'fs';\nimport glob from 'glob';\nimport path from 'path';\nimport ts from 'typescript';\nimport { promisify } from 'util';\n\nexport interface AutoExportOptions {\n    inputPath: string;\n    outputPath: string;\n    packageOutputPath: string;\n    memberPattern: string;\n    apiExtractorConfig: {\n        entryPointSourceFile: string;\n        mainDtsRollupPath: string;\n    };\n}\n\nexport interface AutoExportResult {\n    packageExports: Map<string, string>;\n    packageExportsGrouped: string;\n    apiExtractorConfigs?: Map<string, string>;\n}\n\nexport default async function autoExport(options: AutoExportOptions): Promise<AutoExportResult> {\n    const { packageExports, apiExtractorConfigs } = await createPackageExports(options);\n    const packageExportsGrouped = await createPackageExportsGrouped(options);\n\n    return {\n        packageExports,\n        packageExportsGrouped,\n        apiExtractorConfigs,\n    };\n}\n\nasync function createPackageExports({\n    inputPath,\n    packageOutputPath,\n    memberPattern,\n    apiExtractorConfig,\n}: AutoExportOptions): Promise<{\n    packageExports: Map<string, string>;\n    apiExtractorConfigs?: Map<string, string>;\n}> {\n    const filePaths = await promisify(glob)(inputPath);\n    const results = (\n        await Promise.all(\n            filePaths.map((filePath) =>\n                createExportDeclaration(filePath, packageOutputPath, memberPattern),\n            ),\n        )\n    ).filter(exists);\n    const packageExports = new Map<string, string>();\n    const packageGroups = new Map<string, ts.ExportDeclaration[]>();\n\n    results.forEach((result) => {\n        const packageName = result.packageName;\n\n        if (!packageGroups.has(packageName)) {\n            packageGroups.set(packageName, []);\n        }\n\n        const declarations = packageGroups.get(packageName);\n\n        if (declarations) {\n            declarations.push(result.exportDeclaration);\n        }\n    });\n\n    Array.from(packageGroups.entries()).forEach(([packageName, declarations]) => {\n        const packageContent = ts\n            .createPrinter()\n            .printList(\n                ts.ListFormat.MultiLine,\n                ts.factory.createNodeArray(declarations),\n                ts.createSourceFile('', '', ts.ScriptTarget.ESNext),\n            );\n\n        packageExports.set(packageName, packageContent);\n    });\n\n    const apiExtractorConfigs = createApiExtractorConfigs(\n        Array.from(packageGroups.keys()),\n        apiExtractorConfig.entryPointSourceFile,\n        apiExtractorConfig.mainDtsRollupPath,\n    );\n\n    return {\n        packageExports,\n        apiExtractorConfigs,\n    };\n}\n\nasync function createPackageExportsGrouped({\n    inputPath,\n    outputPath,\n    memberPattern,\n}: AutoExportOptions): Promise<string> {\n    const filePaths = await promisify(glob)(inputPath);\n    const results = (\n        await Promise.all(\n            filePaths.map((filePath) =>\n                createExportDeclaration(filePath, outputPath, memberPattern),\n            ),\n        )\n    ).filter(exists);\n\n    return ts\n        .createPrinter()\n        .printList(\n            ts.ListFormat.MultiLine,\n            ts.factory.createNodeArray(results.map((result) => result.exportDeclaration)),\n            ts.createSourceFile(outputPath, '', ts.ScriptTarget.ESNext),\n        );\n}\n\nasync function createExportDeclaration(\n    filePath: string,\n    outputPath: string,\n    memberPattern: string,\n): Promise<\n    | {\n          exportDeclaration: ts.ExportDeclaration;\n          packageName: string;\n      }\n    | undefined\n> {\n    const root = await getSource(filePath);\n\n    const memberNames = root.statements\n        .filter(ts.isExportDeclaration)\n        .flatMap((statement) => {\n            if (\n                !statement.exportClause ||\n                !ts.isNamedExports(statement.exportClause) ||\n                !statement.exportClause.elements\n            ) {\n                return [];\n            }\n\n            return statement.exportClause.elements.filter(ts.isExportSpecifier);\n        })\n        .map((element) => element.name.escapedText.toString())\n        .filter((memberName) => memberName?.match(new RegExp(memberPattern)));\n\n    if (memberNames.length === 0) {\n        return;\n    }\n\n    const exportDeclaration = ts.factory.createExportDeclaration(\n        undefined,\n        undefined,\n        false,\n        ts.factory.createNamedExports(\n            memberNames.map((memberName) =>\n                ts.factory.createExportSpecifier(\n                    false,\n                    undefined,\n                    ts.factory.createIdentifier(memberName),\n                ),\n            ),\n        ),\n        ts.factory.createStringLiteral(getImportPath(filePath, outputPath), true),\n    );\n\n    const packageName = extractPackageName(filePath);\n\n    return {\n        exportDeclaration,\n        packageName,\n    };\n}\n\nasync function getSource(filePath: string): Promise<ts.SourceFile> {\n    const readFile = promisify(fs.readFile);\n    const source = await readFile(filePath, { encoding: 'utf8' });\n\n    return ts.createSourceFile(path.parse(filePath).name, source, ts.ScriptTarget.Latest);\n}\n\nfunction getImportPath(filePath: string, outputPath: string): string {\n    const fileName = path.parse(filePath).name;\n    const outputFolder = path.parse(outputPath).dir;\n    const importFolder = path.parse(path.relative(outputFolder, filePath)).dir;\n\n    return fileName === 'index' ? importFolder : path.join(importFolder, fileName);\n}\n\nfunction extractPackageName(filePath: string): string {\n    const pathParts = filePath.split(path.sep);\n    const packagesIndex = pathParts.findIndex((part) => part === 'packages');\n\n    if (packagesIndex !== -1 && packagesIndex + 1 < pathParts.length) {\n        return pathParts[packagesIndex + 1];\n    }\n\n    return path.basename(path.dirname(path.dirname(filePath)));\n}\n\nfunction exists<TValue>(value?: TValue): value is NonNullable<TValue> {\n    return value !== null && value !== undefined;\n}\n\nfunction createApiExtractorConfigs(\n    packageNames: string[],\n    entryPointSourceFile: string,\n    mainDtsRollupPath: string,\n): Map<string, string> {\n    const apiExtractorConfigs = new Map<string, string>();\n\n    packageNames.forEach((packageName) => {\n        const moduleName = packageName.replace(/-integration$/, '');\n        const config = {\n            compiler: {\n                configType: 'tsconfig',\n                rootFolder: '../../../..',\n            },\n            project: {\n                entryPointSourceFile: entryPointSourceFile.replace('<moduleName>', moduleName),\n            },\n            validationRules: {\n                missingReleaseTags: 'allow',\n            },\n            apiReviewFile: {\n                enabled: false,\n            },\n            apiJsonFile: {\n                enabled: false,\n            },\n            dtsRollup: {\n                enabled: true,\n                mainDtsRollupPath: mainDtsRollupPath.replace('<moduleName>', moduleName),\n            },\n        };\n\n        apiExtractorConfigs.set(packageName, JSON.stringify(config, null, 4));\n    });\n\n    return apiExtractorConfigs;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/generator.ts",
    "content": "import { generateFiles, readProjectConfiguration, Tree } from '@nx/devkit';\nimport { basename, join, parse } from 'path';\n\nimport autoExport from './auto-export';\nimport isAutoExportConfig from './is-auto-export-config';\n\nexport interface AutoExportGeneratorOptions {\n    config: string;\n    projectName: string;\n}\n\nexport default async function autoExportGenerator(tree: Tree, options: AutoExportGeneratorOptions) {\n    const libraryRoot = readProjectConfiguration(tree, options.projectName).root;\n\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    const config = require(join(tree.root, libraryRoot, options.config));\n\n    if (!isAutoExportConfig(config)) {\n        throw new Error('The specified config file does not conform to the expected schema.');\n    }\n\n    const allPackageExports = new Map<string, string[]>();\n    const allApiExtractorConfigs = new Map<string, string>();\n\n    await Promise.all(\n        config.entries.map(async (entry, entryIndex) => {\n            const result = await autoExport({\n                ...entry,\n                apiExtractorConfig: config.apiExtractorConfig,\n            });\n\n            generateFiles(tree, join(__dirname, './templates'), parse(entry.outputPath).dir, {\n                content: result.packageExportsGrouped,\n                outputName: basename(entry.outputPath),\n            });\n\n            result.packageExports.forEach((packageExport, packageName) => {\n                const packageOutputPath = parse(\n                    config.entries[entryIndex].packageOutputPath.replace(\n                        '<moduleName>',\n                        packageName.replace(/-integration$/, ''),\n                    ),\n                ).dir;\n\n                if (!allPackageExports.has(packageOutputPath)) {\n                    allPackageExports.set(packageOutputPath, []);\n                }\n\n                const existingExports = allPackageExports.get(packageOutputPath) || [];\n\n                allPackageExports.set(packageOutputPath, [...existingExports, packageExport]);\n            });\n\n            result.apiExtractorConfigs?.forEach((configContent, packageName) => {\n                const packageOutputPath = parse(\n                    config.entries[entryIndex].packageOutputPath.replace(\n                        '<moduleName>',\n                        packageName.replace(/-integration$/, ''),\n                    ),\n                ).dir;\n\n                allApiExtractorConfigs.set(\n                    `${packageOutputPath}/api-extractor.json`,\n                    configContent,\n                );\n            });\n        }),\n    );\n\n    allPackageExports.forEach((packageExports, packageOutputPath) => {\n        generateFiles(tree, join(__dirname, './templates'), packageOutputPath, {\n            content: packageExports.join('\\n'),\n            outputName: 'index.ts',\n        });\n    });\n\n    allApiExtractorConfigs.forEach((configContent, configPath) => {\n        tree.write(configPath, configContent);\n    });\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/is-auto-export-config.ts",
    "content": "import AutoExportConfig from './auto-export-config';\n\nexport default function isAutoExportConfig(config: unknown): config is AutoExportConfig {\n    if (!(config instanceof Object)) {\n        return false;\n    }\n\n    if (!hasKey(config, 'entries') || !isArray(config.entries)) {\n        return false;\n    }\n\n    return config.entries.every((entry) => {\n        if (!(entry instanceof Object)) {\n            return false;\n        }\n\n        if (!hasKey(entry, 'inputPath') || typeof entry.inputPath !== 'string') {\n            return false;\n        }\n\n        if (!hasKey(entry, 'outputPath') || typeof entry.outputPath !== 'string') {\n            return false;\n        }\n\n        if (!hasKey(entry, 'packageOutputPath') || typeof entry.packageOutputPath !== 'string') {\n            return false;\n        }\n\n        if (!hasKey(entry, 'memberPattern') || typeof entry.memberPattern !== 'string') {\n            return false;\n        }\n\n        return true;\n    });\n}\n\nfunction isArray(array: unknown): array is unknown[] {\n    return Array.isArray(array);\n}\n\nfunction hasKey<T extends object, K extends string | number | symbol>(\n    object: T,\n    key: K,\n): object is T & Record<K, unknown> {\n    return key in object;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/schema.d.ts",
    "content": "export interface AutoExportGeneratorSchema {\n    config: string;\n    projectName: string;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/schema\",\n  \"cli\": \"nx\",\n  \"$id\": \"AutoExport\",\n  \"title\": \"\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"projectName\": {\n        \"type\": \"string\",\n        \"description\": \"The name of the project where the files should be re-exported to.\"\n    },\n    \"config\": {\n        \"type\": \"string\",\n        \"description\": \"The config file specifying which files to re-export and to where.\",\n        \"default\": \"./auto-export.config.json\"\n    }\n  },\n  \"required\": [\"projectName\"]\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/auto-export/templates/__outputName__",
    "content": "<%- content %>\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/__fixtures__/function-a/function-a.ts",
    "content": "export default function functionA() {\n    return true;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/__fixtures__/function-a/index.ts",
    "content": "export { default as functionA } from './function-a';\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/__fixtures__/type-a/index.ts",
    "content": "export { default as TypeA } from './type-a';\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/__fixtures__/type-a/type-a.ts",
    "content": "enum TypeA {\n    TYPEA = 'typeA',\n}\n\nexport default TypeA;\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/__fixtures__/type-b/index.ts",
    "content": "export { default as TypeB } from './type-b';\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/__fixtures__/type-b/type-b.ts",
    "content": "enum TypeB {\n    TYPEB = 'typeB',\n}\n\nexport default TypeB;\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/__snapshots__/create-enum.spec.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`createEnum() export matching members from files to another file 1`] = `\n\"enum Type {\n    TYPEA = \\\\\"typeA\\\\\",\n    TYPEB = \\\\\"typeB\\\\\"\n}\nexport default Type;\n\"\n`;\n\nexports[`createEnum() handles scenario where no matching member is found 1`] = `\n\"enum Type {\n}\nexport default Type;\n\"\n`;\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/create-enum-config.ts",
    "content": "export default interface CreateEnumConfig {\n    entries: CreateEnumConfigEntry[];\n}\n\nexport interface CreateEnumConfigEntry {\n    inputPaths: string[];\n    inputMemberPattern: string;\n    outputPath: string;\n    outputMemberName: string;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/create-enum.spec.ts",
    "content": "import path from 'path';\n\nimport createEnum from './create-enum';\n\ndescribe('createEnum()', () => {\n    it('export matching members from files to another file', async () => {\n        const options = {\n            inputPaths: [path.join(__dirname, '/__fixtures__/**/index.ts')],\n            inputMemberPattern: '^Type.+',\n            outputPath: path.join(__dirname, '/__temp__/output.ts'),\n            outputMemberName: 'Type',\n        };\n\n        expect(await createEnum(options)).toMatchSnapshot();\n    });\n\n    it('handles scenario where no matching member is found', async () => {\n        const options = {\n            inputPaths: [path.join(__dirname, '/__fixtures__/**/index.ts')],\n            inputMemberPattern: '^Test',\n            outputPath: path.join(__dirname, '/__temp__/output.ts'),\n            outputMemberName: 'Type',\n        };\n\n        expect(await createEnum(options)).toMatchSnapshot();\n    });\n});\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/create-enum.ts",
    "content": "import fs from 'fs';\nimport glob from 'glob';\nimport path from 'path';\nimport ts from 'typescript';\nimport { promisify } from 'util';\n\nexport interface CreateEnumOptions {\n    inputPaths: string[];\n    inputMemberPattern: string;\n    outputPath: string;\n    outputMemberName: string;\n}\n\nexport default async function createEnum({\n    inputPaths,\n    inputMemberPattern,\n    outputPath,\n    outputMemberName,\n}: CreateEnumOptions): Promise<string> {\n    const filePaths = (\n        await Promise.all(inputPaths.map((inputPath) => promisify(glob)(inputPath)))\n    ).flatMap((members) => members);\n\n    const enumMembers = (\n        await Promise.all(filePaths.map((filePath) => getEnumMembers(filePath, inputMemberPattern)))\n    ).flatMap((members) => members);\n\n    return ts\n        .createPrinter()\n        .printList(\n            ts.ListFormat.MultiLine,\n            ts.factory.createNodeArray(\n                [\n                    createEnumDeclaration(outputMemberName, deduplicateEnumMembers(enumMembers)),\n                    createExportAssignment(outputMemberName),\n                ].filter(exists),\n            ),\n            ts.createSourceFile(outputPath, '', ts.ScriptTarget.ESNext),\n        );\n}\n\nasync function getEnumMembers(filePath: string, memberPattern: string): Promise<ts.EnumMember[]> {\n    const root = await getSource(filePath);\n\n    const memberPaths = root.statements\n        .filter(ts.isExportDeclaration)\n        .filter((statement) => {\n            if (\n                !statement.exportClause ||\n                !ts.isNamedExports(statement.exportClause) ||\n                !statement.exportClause.elements\n            ) {\n                return false;\n            }\n\n            return statement.exportClause.elements\n                .filter(ts.isExportSpecifier)\n                .find((element) =>\n                    element.name.escapedText.toString().match(new RegExp(memberPattern)),\n                );\n        })\n        .map((statement) => statement.moduleSpecifier?.getText(root)?.replace(/'|\"/g, ''))\n        .filter(exists);\n\n    const memberRootPaths = await Promise.all(\n        memberPaths.map((memberPath) => toRootPath(memberPath, filePath)),\n    );\n\n    return (\n        await Promise.all(\n            memberRootPaths.map(async (rootPath) => {\n                if (path.parse(rootPath).name === 'index') {\n                    return Array.from((await getEnumMembers(rootPath, memberPattern)).values());\n                }\n\n                return (await getSource(rootPath)).statements\n                    .filter(ts.isEnumDeclaration)\n                    .filter((statement) =>\n                        statement.name.escapedText.toString().match(new RegExp(memberPattern)),\n                    )\n                    .flatMap((statement) => statement.members);\n            }),\n        )\n    ).flatMap((enumMembers) => enumMembers);\n}\n\nfunction deduplicateEnumMembers(enumMembers: ts.EnumMember[]): ts.EnumMember[] {\n    const result = enumMembers.reduce(\n        (map, enumMember) =>\n            ts.isIdentifier(enumMember.name) ? map.set(enumMember.name.text, enumMember) : map,\n        new Map(),\n    );\n\n    return Array.from(result.values());\n}\n\nfunction createEnumDeclaration(enumName: string, enumMembers: ts.EnumMember[]): ts.EnumDeclaration {\n    return ts.factory.createEnumDeclaration(\n        undefined,\n        undefined,\n        ts.factory.createIdentifier(enumName),\n        enumMembers,\n    );\n}\n\nfunction createExportAssignment(enumName: string): ts.ExportAssignment {\n    return ts.factory.createExportAssignment(\n        undefined,\n        undefined,\n        undefined,\n        ts.factory.createIdentifier(enumName),\n    );\n}\n\nasync function getSource(filePath: string): Promise<ts.SourceFile> {\n    const readFile = promisify(fs.readFile);\n    const source = await readFile(filePath, { encoding: 'utf8' });\n\n    return ts.createSourceFile(path.parse(filePath).name, source, ts.ScriptTarget.Latest);\n}\n\nasync function toRootPath(filePath: string, referencePath: string): Promise<string> {\n    const lstat = promisify(fs.lstat);\n    const resolvedPath = path.join(path.parse(referencePath).dir, filePath);\n\n    try {\n        return (await lstat(resolvedPath)).isDirectory()\n            ? path.join(resolvedPath, 'index.ts')\n            : `${resolvedPath}.ts`;\n    } catch (error) {\n        return `${resolvedPath}.ts`;\n    }\n}\n\nfunction exists<TValue>(value?: TValue): value is NonNullable<TValue> {\n    return value !== null && value !== undefined;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/generator.ts",
    "content": "import { generateFiles, readProjectConfiguration, Tree } from '@nx/devkit';\nimport { basename, join, parse } from 'path';\n\nimport createEnum from './create-enum';\nimport isCreateEnumConfig from './is-create-enum-config';\n\nexport interface CreateEnumGeneratorOptions {\n    config: string;\n    projectName: string;\n}\n\nexport default async function generateEnumGenerator(\n    tree: Tree,\n    options: CreateEnumGeneratorOptions,\n) {\n    const libraryRoot = readProjectConfiguration(tree, options.projectName).root;\n\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    const config = require(join(tree.root, libraryRoot, options.config));\n\n    if (!isCreateEnumConfig(config)) {\n        throw new Error('The specified config file does not conform to the expected schema.');\n    }\n\n    await Promise.all(\n        config.entries.map(async (entry) => {\n            generateFiles(tree, join(__dirname, './templates'), parse(entry.outputPath).dir, {\n                content: await createEnum(entry),\n                outputName: basename(entry.outputPath),\n            });\n        }),\n    );\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/is-create-enum-config.ts",
    "content": "import CreateEnumConfig from './create-enum-config';\n\nexport default function isExtendInterfaceConfig(config: unknown): config is CreateEnumConfig {\n    if (!(config instanceof Object)) {\n        return false;\n    }\n\n    if (!hasKey(config, 'entries') || !isArray(config.entries)) {\n        return false;\n    }\n\n    return config.entries.every((entry) => {\n        if (!(entry instanceof Object)) {\n            return false;\n        }\n\n        if (!hasKey(entry, 'inputPaths') || !Array.isArray(entry.inputPaths)) {\n            return false;\n        }\n\n        if (!hasKey(entry, 'inputMemberPattern') || typeof entry.inputMemberPattern !== 'string') {\n            return false;\n        }\n\n        if (!hasKey(entry, 'outputPath') || typeof entry.outputPath !== 'string') {\n            return false;\n        }\n\n        if (!hasKey(entry, 'outputMemberName') || typeof entry.outputMemberName !== 'string') {\n            return false;\n        }\n\n        return true;\n    });\n}\n\nfunction isArray(array: unknown): array is unknown[] {\n    return Array.isArray(array);\n}\n\nfunction hasKey<T extends object, K extends string | number | symbol>(\n    object: T,\n    key: K,\n): object is T & Record<K, unknown> {\n    return key in object;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/schema.d.ts",
    "content": "export interface CreateEnumGeneratorSchema {\n    config: string;\n    projectName: string;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/schema\",\n  \"cli\": \"nx\",\n  \"$id\": \"CreateEnum\",\n  \"title\": \"\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"projectName\": {\n        \"type\": \"string\",\n        \"description\": \"The name of the project where the generated enums should be exported to.\"\n    },\n    \"config\": {\n        \"type\": \"string\",\n        \"description\": \"The config file specifying what enums to create\",\n        \"default\": \"./create-enum.config.json\"\n    }\n  },\n  \"required\": [\"projectName\"]\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/create-enum/templates/__outputName__",
    "content": "<%- content %>\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/__fixtures__/foobar-interface/foobar-interface.ts",
    "content": "export default interface FoobarInterface {\n    foobar: string;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/__fixtures__/foobar-interface/index.ts",
    "content": "export { default as FoobarInterface } from './foobar-interface';\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/__fixtures__/interface-a/index.ts",
    "content": "export { default as InterfaceA } from './interface-a';\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/__fixtures__/interface-a/interface-a.ts",
    "content": "export default interface InterfaceA {\n    a: string;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/__fixtures__/interface-b/index.ts",
    "content": "export { default as InterfaceB } from './interface-b';\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/__fixtures__/interface-b/interface-b.ts",
    "content": "export default interface InterfaceB {\n    b: string;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/__snapshots__/extend-interface.spec.ts.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`extendInterface extends interface with other matching interfaces 1`] = `\n\"import { FoobarInterface } from '../__fixtures__/foobar-interface';\nimport { InterfaceA } from '../__fixtures__/interface-a';\nimport { InterfaceB } from '../__fixtures__/interface-b';\nexport type ExtendedInterface = FoobarInterface & InterfaceA & InterfaceB;\n\"\n`;\n\nexports[`extendInterface handles scenario where no matching interface is found 1`] = `\n\"import { FoobarInterface } from '../__fixtures__/foobar-interface';\nexport type ExtendedDummyInterface = FoobarInterface;\n\"\n`;\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/extend-interface-config.ts",
    "content": "export default interface ExtendInterfaceConfig {\n    entries: ExtendInterfaceConfigEntry[];\n}\n\nexport interface ExtendInterfaceConfigEntry {\n    inputPath: string;\n    outputPath: string;\n    outputMemberName: string;\n    memberPattern: string;\n    targetPath: string;\n    targetMemberName: string;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/extend-interface.spec.ts",
    "content": "import path from 'path';\n\nimport extendInterface from './extend-interface';\n\ndescribe('extendInterface', () => {\n    it('extends interface with other matching interfaces', async () => {\n        const options = {\n            inputPath: path.join(__dirname, '/__fixtures__/**/index.ts'),\n            outputPath: path.join(__dirname, '/__temp__/output.ts'),\n            outputMemberName: 'ExtendedInterface',\n            memberPattern: '^Interface.$',\n            targetPath: path.join(__dirname, '/__fixtures__/foobar-interface/index.ts'),\n            targetMemberName: 'FoobarInterface',\n        };\n\n        expect(await extendInterface(options)).toMatchSnapshot();\n    });\n\n    it('handles scenario where no matching interface is found', async () => {\n        const options = {\n            inputPath: path.join(__dirname, '/__fixtures__/**/index.ts'),\n            outputPath: path.join(__dirname, '/__temp__/output.ts'),\n            outputMemberName: 'ExtendedDummyInterface',\n            memberPattern: '^DummyInterface.$',\n            targetPath: path.join(__dirname, '/__fixtures__/foobar-interface/index.ts'),\n            targetMemberName: 'FoobarInterface',\n        };\n\n        expect(await extendInterface(options)).toMatchSnapshot();\n    });\n});\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/extend-interface.ts",
    "content": "import fs from 'fs';\nimport glob from 'glob';\nimport path from 'path';\nimport ts from 'typescript';\nimport { promisify } from 'util';\n\nexport interface ExtendInterfaceOptions {\n    inputPath: string;\n    outputPath: string;\n    outputMemberName: string;\n    memberPattern: string;\n    targetPath: string;\n    targetMemberName: string;\n}\n\nexport default async function extendInterface({\n    inputPath,\n    outputPath,\n    outputMemberName,\n    memberPattern,\n    targetPath,\n    targetMemberName,\n}: ExtendInterfaceOptions): Promise<string> {\n    const filePaths = await promisify(glob)(inputPath);\n    const importDeclarations = await Promise.all([\n        createImportDeclaration(targetPath, outputPath, `^${targetMemberName}$`),\n        ...filePaths.map((filePath) =>\n            createImportDeclaration(filePath, outputPath, memberPattern),\n        ),\n    ]);\n    const mergableMemberNames = importDeclarations\n        .map((statement) => statement?.importClause?.namedBindings)\n        .filter(exists)\n        .filter(ts.isNamedImports)\n        .flatMap((namedImports) =>\n            namedImports.elements.map((element) => element.name.escapedText.toString()),\n        );\n\n    return ts\n        .createPrinter()\n        .printList(\n            ts.ListFormat.MultiLine,\n            ts.factory.createNodeArray(\n                [\n                    ...importDeclarations,\n                    createTypeAliasDeclaration(outputMemberName, mergableMemberNames),\n                ].filter(exists),\n            ),\n            ts.createSourceFile(outputPath, '', ts.ScriptTarget.ESNext),\n        );\n}\n\nfunction createTypeAliasDeclaration(\n    aliasMemberName: string,\n    mergableMemberNames: string[],\n): ts.TypeAliasDeclaration {\n    return ts.factory.createTypeAliasDeclaration(\n        undefined,\n        [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n        ts.factory.createIdentifier(aliasMemberName),\n        undefined,\n        ts.factory.createIntersectionTypeNode(\n            mergableMemberNames.map((memberName) =>\n                ts.factory.createTypeReferenceNode(\n                    ts.factory.createIdentifier(memberName),\n                    undefined,\n                ),\n            ),\n        ),\n    );\n}\n\nasync function createImportDeclaration(\n    filePath: string,\n    outputPath: string,\n    memberPattern: string,\n): Promise<ts.ImportDeclaration | undefined> {\n    const root = await getSource(filePath);\n\n    const memberNames = root.statements\n        .filter(ts.isExportDeclaration)\n        .flatMap((statement) => {\n            if (\n                !statement.exportClause ||\n                !ts.isNamedExports(statement.exportClause) ||\n                !statement.exportClause.elements\n            ) {\n                return [];\n            }\n\n            return statement.exportClause.elements.filter(ts.isExportSpecifier);\n        })\n        .map((element) => element.name.escapedText.toString())\n        .filter((memberName) => memberName?.match(new RegExp(memberPattern)));\n\n    if (memberNames.length === 0) {\n        return;\n    }\n\n    return ts.factory.createImportDeclaration(\n        undefined,\n        undefined,\n        ts.factory.createImportClause(\n            false,\n            undefined,\n            ts.factory.createNamedImports(\n                memberNames.map((memberName) =>\n                    ts.factory.createImportSpecifier(\n                        false,\n                        undefined,\n                        ts.factory.createIdentifier(memberName),\n                    ),\n                ),\n            ),\n        ),\n        ts.factory.createStringLiteral(getImportPath(filePath, outputPath), true),\n    );\n}\n\nasync function getSource(filePath: string): Promise<ts.SourceFile> {\n    const readFile = promisify(fs.readFile);\n    const source = await readFile(filePath, { encoding: 'utf8' });\n\n    return ts.createSourceFile(path.parse(filePath).name, source, ts.ScriptTarget.Latest);\n}\n\nfunction getImportPath(filePath: string, outputPath: string): string {\n    const fileName = path.parse(filePath).name;\n    const outputFolder = path.parse(outputPath).dir;\n    const importFolder = path.parse(path.relative(outputFolder, filePath)).dir;\n\n    return fileName === 'index' ? importFolder : path.join(importFolder, fileName);\n}\n\nfunction exists<TValue>(value?: TValue): value is NonNullable<TValue> {\n    return value !== null && value !== undefined;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/generator.ts",
    "content": "import { generateFiles, readProjectConfiguration, Tree } from '@nx/devkit';\nimport { basename, join, parse } from 'path';\n\nimport extendInterface from './extend-interface';\nimport isExtendInterfaceConfig from './is-extend-interface-config';\n\nexport interface ExtendInterfaceGeneratorOptions {\n    config: string;\n    projectName: string;\n}\n\nexport default async function extendInterfaceGenerator(\n    tree: Tree,\n    options: ExtendInterfaceGeneratorOptions,\n) {\n    const libraryRoot = readProjectConfiguration(tree, options.projectName).root;\n\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    const config = require(join(tree.root, libraryRoot, options.config));\n\n    if (!isExtendInterfaceConfig(config)) {\n        throw new Error('The specified config file does not conform to the expected schema.');\n    }\n\n    await Promise.all(\n        config.entries.map(async (entry) => {\n            generateFiles(tree, join(__dirname, './templates'), parse(entry.outputPath).dir, {\n                content: await extendInterface(entry),\n                outputName: basename(entry.outputPath),\n            });\n        }),\n    );\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/is-extend-interface-config.ts",
    "content": "import ExtendInterfaceConfig from './extend-interface-config';\n\nexport default function isExtendInterfaceConfig(config: unknown): config is ExtendInterfaceConfig {\n    if (!(config instanceof Object)) {\n        return false;\n    }\n\n    if (!hasKey(config, 'entries') || !isArray(config.entries)) {\n        return false;\n    }\n\n    return config.entries.every((entry) => {\n        if (!(entry instanceof Object)) {\n            return false;\n        }\n\n        if (!hasKey(entry, 'inputPath') || typeof entry.inputPath !== 'string') {\n            return false;\n        }\n\n        if (!hasKey(entry, 'outputPath') || typeof entry.outputPath !== 'string') {\n            return false;\n        }\n\n        if (!hasKey(entry, 'outputMemberName') || typeof entry.outputMemberName !== 'string') {\n            return false;\n        }\n\n        if (!hasKey(entry, 'memberPattern') || typeof entry.memberPattern !== 'string') {\n            return false;\n        }\n\n        if (!hasKey(entry, 'targetPath') || typeof entry.targetPath !== 'string') {\n            return false;\n        }\n\n        if (!hasKey(entry, 'targetMemberName') || typeof entry.targetMemberName !== 'string') {\n            return false;\n        }\n\n        return true;\n    });\n}\n\nfunction isArray(array: unknown): array is unknown[] {\n    return Array.isArray(array);\n}\n\nfunction hasKey<T extends object, K extends string | number | symbol>(\n    object: T,\n    key: K,\n): object is T & Record<K, unknown> {\n    return key in object;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/schema.d.ts",
    "content": "export interface ExtendInterfaceGeneratorSchema {\n    config: string;\n    projectName: string;\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/schema\",\n  \"cli\": \"nx\",\n  \"$id\": \"ExtendInterface\",\n  \"title\": \"\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"projectName\": {\n        \"type\": \"string\",\n        \"description\": \"The name of the project where the files should be re-exported to.\"\n    },\n    \"config\": {\n        \"type\": \"string\",\n        \"description\": \"The config file specifying which files to extend with.\",\n        \"default\": \"./extend-interface.config.json\"\n    }\n  },\n  \"required\": [\"projectName\"]\n}\n"
  },
  {
    "path": "packages/workspace-tools/src/generators/extend-interface/templates/__outputName__",
    "content": "<%- content %>\n"
  },
  {
    "path": "packages/workspace-tools/src/index.ts",
    "content": ""
  },
  {
    "path": "packages/workspace-tools/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"compilerOptions\": {\n        \"module\": \"commonjs\",\n        \"lib\": [\n            \"esnext\"\n        ],\n        \"target\": \"esnext\",\n        \"sourceMap\": false\n    },\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/workspace-tools/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist-tools\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\", \"**/*.test.ts\"]\n}\n"
  },
  {
    "path": "packages/workspace-tools/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist-spec\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\"**/*.test.ts\", \"**/*.spec.ts\", \"**/*.d.ts\"]\n}\n"
  },
  {
    "path": "packages/worldpayaccess-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"],\n            \"rules\": {\n                \"@typescript-eslint/naming-convention\": \"off\",\n                \"@typescript-eslint/consistent-type-assertions\": \"off\",\n                \"@typescript-eslint/no-misused-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\": \"off\",\n                \"@typescript-eslint/no-floating-promises\": \"off\",\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-explicit-any\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-return\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.spec.ts\"],\n            \"rules\": {\n                \"jest/valid-expect\": \"off\",\n                \"jest/no-if\": \"off\",\n                \"@typescript-eslint/await-thenable\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"jest/no-conditional-expect\": \"off\",\n                \"jest/no-test-return-statement\": \"off\",\n                \"@typescript-eslint/no-shadow\": \"off\"\n            }\n        },\n        {\n            \"files\": [\"*.mock.ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-explicit-any\": \"off\"\n            }\n        }\n    ]\n}\n"
  },
  {
    "path": "packages/worldpayaccess-integration/README.md",
    "content": "# worldpayaccess-integration\n\nThis package contains the integration layer for the [Worldpay Access](https://worldpay.com/) provider.\n\nFor additional information on Worldpay Access, please refer to [Worldpay Access documentation](https://developer.worldpay.com/).\n\n## Running unit tests\n\nRun `nx test worldpayaccess-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint worldpayaccess-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/worldpayaccess-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'worldpayaccess-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/worldpayaccess-integration',\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n};\n"
  },
  {
    "path": "packages/worldpayaccess-integration/project.json",
    "content": "{\n    \"name\": \"worldpayaccess-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/worldpayaccess-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/worldpayaccess-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/worldpayaccess-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/worldpayaccess-integration/jest.config.js\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/worldpayaccess-integration/src/create-worldpayaccess-open-banking-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createWorldpayAccessOpenBankingPaymentStrategy from './create-worldpayaccess-open-banking-payment-strategy';\nimport WorldpayAccessOpenBankingPaymentStrategy from './worldpayaccess-open-banking-payment-strategy';\n\ndescribe('createWorldpayAccessOpenBankingPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates Worldpay Access Open Banking payment strategy', () => {\n        const strategy = createWorldpayAccessOpenBankingPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(WorldpayAccessOpenBankingPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/worldpayaccess-integration/src/create-worldpayaccess-open-banking-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport WorldpayAccessOpenBankingPaymentStrategy from './worldpayaccess-open-banking-payment-strategy';\n\nconst createWorldpayAccessOpenBankingPaymentStrategy: PaymentStrategyFactory<\n    WorldpayAccessOpenBankingPaymentStrategy\n> = (paymentIntegrationService) =>\n    new WorldpayAccessOpenBankingPaymentStrategy(paymentIntegrationService);\n\nexport default toResolvableModule(createWorldpayAccessOpenBankingPaymentStrategy, [\n    { id: 'open_banking', gateway: 'worldpayaccess' },\n]);\n"
  },
  {
    "path": "packages/worldpayaccess-integration/src/create-worldpayaccess-payment-strategy.spec.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createWorldpayAccessPaymentStrategy from './create-worldpayaccess-payment-strategy';\nimport WorldpayAccessPaymetStrategy from './worldpayaccess-payment-strategy';\n\ndescribe('createWorldpayAccessPaymetStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates Worldpay Access payment strategy', () => {\n        const strategy = createWorldpayAccessPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(WorldpayAccessPaymetStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/worldpayaccess-integration/src/create-worldpayaccess-payment-strategy.ts",
    "content": "import {\n    PaymentStrategyFactory,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport WorldpayAccessPaymetStrategy from './worldpayaccess-payment-strategy';\n\nconst createWorldpayAccessPaymentStrategy: PaymentStrategyFactory<WorldpayAccessPaymetStrategy> = (\n    paymentIntegrationService,\n) => {\n    return new WorldpayAccessPaymetStrategy(paymentIntegrationService);\n};\n\nexport default toResolvableModule(createWorldpayAccessPaymentStrategy, [\n    { gateway: 'worldpayaccess', id: 'credit_card' },\n    { id: 'worldpayaccess' },\n]);\n"
  },
  {
    "path": "packages/worldpayaccess-integration/src/index.ts",
    "content": "export { default as createWorldpayAccessPaymentStrategy } from './create-worldpayaccess-payment-strategy';\nexport { default as createWorldpayAccessOpenBankingPaymentStrategy } from './create-worldpayaccess-open-banking-payment-strategy';\nexport { WithWorldpayAccessPaymentInitializeOptions } from './worldpayaccess-payment-options';\n"
  },
  {
    "path": "packages/worldpayaccess-integration/src/worldpayaccess-open-banking-payment-strategy.spec.ts",
    "content": "import {\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport WorldpayAccessOpenBankingPaymentStrategy from './worldpayaccess-open-banking-payment-strategy';\n\ndescribe('WorldpayAccessOpenBankingPaymentStrategy', () => {\n    let strategy: WorldpayAccessOpenBankingPaymentStrategy;\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        strategy = new WorldpayAccessOpenBankingPaymentStrategy(paymentIntegrationService);\n    });\n\n    describe('#execute()', () => {\n        afterEach(() => {\n            (paymentIntegrationService.submitOrder as jest.Mock).mockClear();\n        });\n\n        it('throws error when payment is missing', async () => {\n            await strategy.initialize();\n\n            await expect(strategy.execute({})).rejects.toThrow(PaymentArgumentInvalidError);\n        });\n\n        it('submits open banking payment with formattedPayload for BigPay mapping', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'open_banking',\n                    gatewayId: 'worldpayaccess',\n                },\n            };\n\n            await strategy.initialize();\n            await strategy.execute(payload);\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: 'open_banking',\n                gatewayId: 'worldpayaccess',\n                paymentData: {\n                    formattedPayload: {\n                        open_banking: {},\n                        vault_payment_instrument: false,\n                        set_as_default_stored_instrument: false,\n                    },\n                },\n            });\n        });\n\n        it('redirects when additional_action_required with redirect_url is returned', async () => {\n            const payload = {\n                payment: {\n                    methodId: 'open_banking',\n                    gatewayId: 'worldpayaccess',\n                },\n            };\n\n            Object.defineProperty(window, 'location', {\n                value: {\n                    replace: jest.fn(),\n                },\n                writable: true,\n                configurable: true,\n            });\n\n            await strategy.initialize();\n\n            const redirectUrl = 'https://secure-test.worldpay.com/example';\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockRejectedValueOnce({\n                body: {\n                    status: 'additional_action_required',\n                    additional_action_required: {\n                        type: 'offsite_redirect',\n                        data: {\n                            redirect_url: redirectUrl,\n                        },\n                    },\n                },\n            });\n\n            void strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(window.location.replace).toHaveBeenCalledWith(redirectUrl);\n        });\n    });\n\n    describe('#initialize()', () => {\n        it('initializes the strategy successfully', async () => {\n            const result = await strategy.initialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/worldpayaccess-integration/src/worldpayaccess-open-banking-payment-strategy.ts",
    "content": "import {\n    isHostedInstrumentLike,\n    OrderFinalizationNotRequiredError,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    Payment,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentStrategy,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport { WorldpayAccessRedirectResponse } from './worldpayaccess-payment-options';\n\nexport default class WorldpayAccessOpenBankingPaymentStrategy implements PaymentStrategy {\n    constructor(private _paymentIntegrationService: PaymentIntegrationService) {}\n\n    async execute({ payment }: OrderRequestBody): Promise<void> {\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        await this._paymentIntegrationService.submitOrder();\n\n        try {\n            await this._paymentIntegrationService.submitPayment(\n                this._buildOpenBankingSubmitPayment(payment),\n            );\n        } catch (error) {\n            if (this._isWorldpayAccessRedirectResponse(error)) {\n                const redirectUrl = error.body.additional_action_required.data.redirect_url;\n\n                return new Promise(() => window.location.replace(redirectUrl));\n            }\n\n            return Promise.reject(error);\n        }\n    }\n\n    initialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private _buildOpenBankingSubmitPayment(payment: OrderPaymentRequestBody): Payment {\n        const { shouldSaveInstrument, shouldSetAsDefaultInstrument } = isHostedInstrumentLike(\n            payment.paymentData,\n        )\n            ? payment.paymentData\n            : { shouldSaveInstrument: false, shouldSetAsDefaultInstrument: false };\n\n        return {\n            ...payment,\n            paymentData: {\n                formattedPayload: {\n                    open_banking: {},\n                    vault_payment_instrument: shouldSaveInstrument || false,\n                    set_as_default_stored_instrument: shouldSetAsDefaultInstrument || false,\n                },\n            },\n        };\n    }\n\n    private _isWorldpayAccessRedirectResponse(\n        response: unknown,\n    ): response is WorldpayAccessRedirectResponse {\n        if (typeof response !== 'object' || response === null) {\n            return false;\n        }\n\n        const partialResponse = response as Partial<WorldpayAccessRedirectResponse>;\n\n        if (!partialResponse.body) {\n            return false;\n        }\n\n        const partialBody = partialResponse.body as {\n            status?: string;\n            additional_action_required?: {\n                data?: { redirect_url?: string };\n            };\n        };\n\n        return (\n            partialBody.status === 'additional_action_required' &&\n            !!partialBody.additional_action_required?.data?.redirect_url\n        );\n    }\n}\n"
  },
  {
    "path": "packages/worldpayaccess-integration/src/worldpayaccess-payment-options.ts",
    "content": "export interface WorldpayAccessAdditionalAction {\n    additional_action_required: {\n        data: {\n            redirect_url: string;\n        };\n    };\n    provider_data: {\n        data: string;\n        source_id: string;\n    };\n}\n\nexport interface WorldpayAccess3DSOptions {\n    acs_url: string;\n    merchant_data: string;\n    payer_auth_request: string;\n}\n\nexport interface WorldpayAccessPaymentInitializeOptions {\n    /**\n     * A callback that gets called when the iframe is ready to be added to the\n     * current page. It is responsible for determining where the iframe should\n     * be inserted in the DOM.\n     *\n     * @param iframe - The iframe element containing the payment web page\n     * provided by the strategy.\n     * @param cancel - A function, when called, will cancel the payment\n     * process and remove the iframe.\n     */\n    onLoad(iframe: HTMLIFrameElement, cancel: () => void): void;\n}\n\nexport interface WithWorldpayAccessPaymentInitializeOptions {\n    /**\n     * The options that are required to initialize the Apple Pay payment\n     * method. They can be omitted unless you need to support Apple Pay.\n     */\n    worldpay?: WorldpayAccessPaymentInitializeOptions;\n}\n\n/**\n * Error response body when the backend requires a redirect (e.g. Open Banking).\n */\nexport interface WorldpayAccessRedirectResponse {\n    body: {\n        additional_action_required: {\n            type: string;\n            data: {\n                redirect_url: string;\n            };\n        };\n        status: string;\n    };\n}\n"
  },
  {
    "path": "packages/worldpayaccess-integration/src/worldpayaccess-payment-strategy.spec.ts",
    "content": "import { merge, omit } from 'lodash';\n\nimport {\n    HostedFieldType,\n    HostedForm,\n    HostedInputEventType,\n    HostedInputSubmitSuccessEvent,\n    NotInitializedError,\n    OrderFinalizationNotRequiredError,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    RequestError,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getErrorPaymentResponseBody,\n    getOrderRequestBody,\n    getPaymentMethod,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport WorldpayAccessPaymetStrategy from './worldpayaccess-payment-strategy';\n\ndescribe('WorldpayAccessPaymetStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let strategy: WorldpayAccessPaymetStrategy;\n    let initializeOptions: PaymentInitializeOptions;\n\n    const payload = getOrderRequestBody();\n    const PAYMENT_CANNOT_CONTINUE = 'Payment cannot continue';\n\n    const errorResponseAdditionalAction = new RequestError(\n        getResponse({\n            ...getErrorPaymentResponseBody(),\n            errors: [{ code: 'additional_action_required' }],\n            additional_action_required: {\n                type: 'unknown_action',\n                data: {\n                    redirect_url: 'http://url.com',\n                },\n            },\n            provider_data: {\n                source_id: '5313',\n                data: 'jwt_token',\n            },\n            status: 'error',\n        }),\n    );\n\n    const mockHostedInputSubmitSuccessEvent: HostedInputSubmitSuccessEvent = {\n        type: HostedInputEventType.SubmitSucceeded,\n        payload: {\n            response: {\n                body: 'body',\n                headers: {\n                    header: 'header',\n                },\n                status: 1,\n                statusText: 'statusText',\n            },\n        },\n    };\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n\n        strategy = new WorldpayAccessPaymetStrategy(paymentIntegrationService);\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            merge(getPaymentMethod(), { config: { isHostedFormEnabled: true } }),\n        );\n\n        HTMLFormElement.prototype.submit = jest.fn();\n    });\n\n    afterEach(() => {\n        jest.clearAllMocks();\n    });\n\n    it('throws error when initialize with worldpay data is required', async () => {\n        initializeOptions = { methodId: 'worldpayaccess' };\n\n        await expect(strategy.initialize(initializeOptions)).rejects.toThrow(NotInitializedError);\n    });\n\n    it('throws error when is missing payment data', async () => {\n        const payloadWithoutPayment = omit(payload, 'payment');\n\n        await expect(strategy.execute(payloadWithoutPayment)).rejects.toThrow(\n            PaymentArgumentInvalidError,\n        );\n    });\n\n    it('submits order without payment data', async () => {\n        await strategy.execute(payload);\n\n        expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(\n            omit(payload, 'payment'),\n            undefined,\n        );\n    });\n\n    it('submits payment separately', async () => {\n        await strategy.execute(payload);\n\n        expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(payload.payment);\n    });\n\n    it('throws error to inform that order finalization is not required', async () => {\n        try {\n            await strategy.finalize();\n        } catch (error) {\n            expect(error).toBeInstanceOf(OrderFinalizationNotRequiredError);\n        }\n    });\n\n    describe('when hosted form is enabled', () => {\n        let form: HostedForm;\n\n        beforeEach(() => {\n            form = {\n                attach: jest.fn(() => Promise.resolve()),\n                detach: jest.fn(() => Promise.resolve()),\n                getBin: jest.fn(() => 'bin'),\n                getCardType: jest.fn(() => 'cardType'),\n                submit: jest.fn(() => Promise.resolve(mockHostedInputSubmitSuccessEvent)),\n                validate: jest.fn(() => Promise.resolve()),\n            };\n\n            initializeOptions = {\n                methodId: 'worldpayaccess',\n                creditCard: {\n                    form: {\n                        fields: {\n                            [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                            [HostedFieldType.CardName]: { containerId: 'card-name' },\n                            [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                        },\n                    },\n                },\n                worldpay: {\n                    onLoad: jest.fn(),\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'loadCurrentOrder').mockImplementation(jest.fn());\n            jest.spyOn(paymentIntegrationService, 'createHostedForm').mockReturnValue(form);\n        });\n\n        it('creates hosted form', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(paymentIntegrationService.createHostedForm).toHaveBeenCalledWith(\n                'https://bigpay.integration.zone',\n                {\n                    fields: {\n                        [HostedFieldType.CardExpiry]: { containerId: 'card-expiry' },\n                        [HostedFieldType.CardName]: { containerId: 'card-name' },\n                        [HostedFieldType.CardNumber]: { containerId: 'card-number' },\n                    },\n                },\n            );\n        });\n\n        it('attaches hosted form to container', async () => {\n            await strategy.initialize(initializeOptions);\n\n            expect(form.attach).toHaveBeenCalled();\n        });\n\n        it('submits payment', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.submit).toHaveBeenCalledWith(payload.payment);\n        });\n\n        it('validates user input before submitting data', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.validate).toHaveBeenCalled();\n        });\n\n        it('does not submit payment data with hosted form if validation fails', async () => {\n            jest.spyOn(form, 'validate').mockRejectedValue(new Error());\n\n            try {\n                await strategy.initialize(initializeOptions);\n                await strategy.execute(getOrderRequestBody());\n            } catch (error) {\n                expect(form.submit).not.toHaveBeenCalled();\n            }\n        });\n\n        it('submit with collection data required hosted', async () => {\n            await strategy.initialize(initializeOptions);\n            await strategy.execute(payload);\n\n            expect(form.submit).toHaveBeenCalledTimes(1);\n        });\n\n        describe('when hosted fields are not present for rendering', () => {\n            beforeEach(() => {\n                form = {\n                    attach: jest.fn(() => Promise.resolve()),\n                    detach: jest.fn(() => Promise.resolve()),\n                    getBin: jest.fn(() => 'bin'),\n                    getCardType: jest.fn(() => 'cardType'),\n                    submit: jest.fn(() => Promise.resolve(mockHostedInputSubmitSuccessEvent)),\n                    validate: jest.fn(() => Promise.resolve()),\n                };\n                initializeOptions = {\n                    creditCard: {\n                        form: {\n                            fields: {},\n                        },\n                    },\n                    methodId: 'worldpayaccess',\n                    worldpay: {\n                        onLoad: jest.fn(),\n                    },\n                };\n\n                jest.spyOn(paymentIntegrationService, 'loadCurrentOrder').mockImplementation(\n                    jest.fn(),\n                );\n                jest.spyOn(paymentIntegrationService, 'createHostedForm').mockImplementation(\n                    jest.fn(),\n                );\n            });\n\n            it('does not create hosted form', async () => {\n                await strategy.initialize(initializeOptions);\n                jest.clearAllMocks();\n\n                expect(paymentIntegrationService.createHostedForm).not.toHaveBeenCalled();\n            });\n\n            it('does not submit with hosted form', async () => {\n                await strategy.initialize(initializeOptions);\n                await strategy.execute(payload);\n\n                expect(form.submit).not.toHaveBeenCalled();\n            });\n        });\n    });\n\n    describe('when 3DS is required', () => {\n        let threeDSecureRequiredErrorResponse: RequestError;\n        const onLoad = jest.fn().mockImplementation(() => {\n            throw new Error();\n        });\n\n        beforeEach(() => {\n            threeDSecureRequiredErrorResponse = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [{ code: 'three_d_secure_required' }],\n                    three_ds_result: {\n                        acs_url: 'acs_url',\n                        payer_auth_request: 'payer_auth_request',\n                        merchant_data: 'merchant_data',\n                    },\n                }),\n            );\n\n            initializeOptions = {\n                methodId: 'worldpayaccess',\n                worldpay: {\n                    onLoad,\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(\n                merge(getPaymentMethod(), { config: { isHostedFormEnabled: false } }),\n            );\n        });\n\n        it('throws error when three_d_secure_required code is missing', async () => {\n            threeDSecureRequiredErrorResponse = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [{ code: 'other_error' }],\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment')\n                .mockImplementationOnce(() => Promise.reject(errorResponseAdditionalAction))\n                .mockImplementationOnce(() => Promise.reject(threeDSecureRequiredErrorResponse));\n\n            await strategy.initialize(initializeOptions);\n\n            // Mock the message event that would be sent after iframe is created\n            setTimeout(() => {\n                window.dispatchEvent(\n                    new MessageEvent('message', {\n                        origin: 'https://centinelapistag.cardinalcommerce.com',\n                        data: '{\"MessageType\":\"profile.completed\",\"SessionId\":\"token\",\"Status\":true}',\n                    }),\n                );\n            }, 10);\n\n            const promise = strategy.execute(payload);\n\n            await expect(promise).rejects.toThrow(RequestError);\n        });\n\n        it('throws error when initializeOptions is missing', async () => {\n            const threeDSecureRequiredErrorResponse = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    errors: [{ code: 'three_d_secure_required' }],\n                    three_ds_result: {\n                        acs_url: 'acs_url',\n                        payer_auth_request: 'payer_auth_request',\n                        merchant_data: 'merchant_data',\n                    },\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment')\n                .mockImplementationOnce(() => Promise.reject(errorResponseAdditionalAction))\n                .mockImplementationOnce(() => Promise.reject(threeDSecureRequiredErrorResponse));\n\n            // Mock the message event that would trigger the 3DS flow\n            setTimeout(() => {\n                window.dispatchEvent(\n                    new MessageEvent('message', {\n                        origin: 'https://centinelapistag.cardinalcommerce.com',\n                        data: '{\"MessageType\":\"profile.completed\",\"SessionId\":\"token\",\"Status\":true}',\n                    }),\n                );\n            }, 10);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(NotInitializedError);\n        });\n\n        it('validate iframe to open modal', async () => {\n            const onLoad = jest.fn().mockImplementation(() => {\n                throw new Error();\n            });\n\n            initializeOptions = {\n                ...initializeOptions,\n                worldpay: {\n                    onLoad,\n                },\n            };\n            jest.spyOn(paymentIntegrationService, 'submitPayment')\n                .mockImplementationOnce(() => Promise.reject(errorResponseAdditionalAction))\n                .mockImplementationOnce(() => Promise.reject(threeDSecureRequiredErrorResponse));\n\n            const form = document.createElement('form');\n\n            form.id = 'challengeForm';\n            form.method = 'POST';\n            form.action = threeDSecureRequiredErrorResponse.body.three_ds_result.acs_url;\n\n            const inputJWT = document.createElement('input');\n\n            inputJWT.name = 'JWT';\n            inputJWT.type = 'hidden';\n            inputJWT.value =\n                threeDSecureRequiredErrorResponse.body.three_ds_result.payer_auth_request;\n            form.appendChild(inputJWT);\n\n            const merchant = document.createElement('input');\n\n            merchant.name = 'MD';\n            merchant.type = 'hidden';\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            merchant.value = `merchantSessionId=${threeDSecureRequiredErrorResponse.body.three_ds_result.merchant_data}`;\n            form.appendChild(merchant);\n\n            const script = document.createElement('script');\n\n            script.type = 'text/javascript';\n            script.innerHTML =\n                \"window.onload = function() { document.getElementById('challengeForm').submit(); }\";\n\n            const iframe = document.createElement('iframe');\n\n            iframe.name = 'worldpay_hosted_payment_page';\n            iframe.height = '400';\n            iframe.width = '100%';\n            iframe.srcdoc = `${form.outerHTML} ${script.outerHTML}`;\n\n            await strategy.initialize(initializeOptions);\n\n            // Mock the message event that would trigger the 3DS flow\n            setTimeout(() => {\n                window.dispatchEvent(\n                    new MessageEvent('message', {\n                        origin: 'https://centinelapistag.cardinalcommerce.com',\n                        data: '{\"MessageType\":\"profile.completed\",\"SessionId\":\"token\",\"Status\":true}',\n                    }),\n                );\n            }, 10);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(Error);\n            expect(onLoad).toHaveBeenCalledWith(iframe, expect.any(Function));\n        });\n\n        it('throws error when is 3ds authentication is cancelled', async () => {\n            const onLoad = jest.fn((_, b) => b());\n\n            initializeOptions = {\n                ...initializeOptions,\n                worldpay: {\n                    onLoad,\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment')\n                .mockImplementationOnce(() => Promise.reject(errorResponseAdditionalAction))\n                .mockImplementationOnce(() => Promise.reject(threeDSecureRequiredErrorResponse));\n\n            await strategy.initialize(initializeOptions);\n\n            // Mock the message event that would trigger the 3DS flow\n            setTimeout(() => {\n                window.dispatchEvent(\n                    new MessageEvent('message', {\n                        origin: 'https://centinelapistag.cardinalcommerce.com',\n                        data: '{\"MessageType\":\"profile.completed\",\"SessionId\":\"token\",\"Status\":true}',\n                    }),\n                );\n            }, 10);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(Error);\n        });\n\n        it('throws error when the modal failed', async () => {\n            const onLoad = jest.fn().mockImplementation(() => {\n                throw new Error();\n            });\n\n            initializeOptions = {\n                ...initializeOptions,\n                worldpay: {\n                    onLoad,\n                },\n            };\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment')\n                .mockImplementationOnce(() => Promise.reject(errorResponseAdditionalAction))\n                .mockImplementationOnce(() => Promise.reject(threeDSecureRequiredErrorResponse));\n\n            await strategy.initialize(initializeOptions);\n\n            // Mock the message event that would trigger the 3DS flow\n            setTimeout(() => {\n                window.dispatchEvent(\n                    new MessageEvent('message', {\n                        origin: 'https://centinelapistag.cardinalcommerce.com',\n                        data: '{\"MessageType\":\"profile.completed\",\"SessionId\":\"token\",\"Status\":true}',\n                    }),\n                );\n            }, 10);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(Error);\n        });\n    });\n\n    describe('when hosted form is disable', () => {\n        beforeEach(() => {\n            initializeOptions = {\n                methodId: 'worldpayaccess',\n                worldpay: {\n                    onLoad: jest.fn(),\n                },\n            };\n\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getPaymentMethodOrThrow',\n            ).mockReturnValue(\n                merge(getPaymentMethod(), { config: { isHostedFormEnabled: false } }),\n            );\n        });\n\n        it('submit with collection data required', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment')\n                .mockImplementationOnce(() => Promise.reject(errorResponseAdditionalAction))\n                .mockImplementationOnce(() => Promise.resolve({} as any));\n\n            await strategy.initialize(initializeOptions);\n\n            // Execute the strategy and mock the message event after a short delay\n            const promise = strategy.execute(payload);\n\n            setTimeout(() => {\n                window.dispatchEvent(\n                    new MessageEvent('message', {\n                        origin: 'https://centinelapistag.cardinalcommerce.com',\n                        data: '{\"MessageType\":\"profile.completed\",\"SessionId\":\"token\",\"Status\":true}',\n                    }),\n                );\n            }, 10);\n\n            await promise;\n\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    paymentData: expect.objectContaining({\n                        threeDSecure: expect.objectContaining({ token: 'token' }),\n                    }),\n                }),\n            );\n        });\n\n        it(\"stop event execution when the event message string isn't a json\", async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(() =>\n                Promise.reject(errorResponseAdditionalAction),\n            );\n\n            await strategy.initialize(initializeOptions);\n\n            // Execute the strategy and mock the invalid message event after a short delay\n            const promise = strategy.execute(payload);\n\n            setTimeout(() => {\n                window.dispatchEvent(\n                    new MessageEvent('message', {\n                        origin: 'https://centinelapistag.cardinalcommerce.com',\n                        data: 'invalid string',\n                    }),\n                );\n            }, 10);\n\n            await expect(promise).rejects.toThrow(PAYMENT_CANNOT_CONTINUE);\n        });\n\n        it(\"stop event execution when the event message string isn't a valid json with SessionId\", async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(() =>\n                Promise.reject(errorResponseAdditionalAction),\n            );\n\n            await strategy.initialize(initializeOptions);\n\n            // Execute the strategy and mock the invalid message event without SessionId after a short delay\n            const promise = strategy.execute(payload);\n\n            setTimeout(() => {\n                window.dispatchEvent(\n                    new MessageEvent('message', {\n                        origin: 'https://centinelapistag.cardinalcommerce.com',\n                        data: '{\"MessageType\":\"profile.completed\",\"Status\":true}',\n                    }),\n                );\n            }, 10);\n\n            await expect(promise).rejects.toThrow(PAYMENT_CANNOT_CONTINUE);\n        });\n\n        it(\"stop event execution when the event message string isn't a valid json with Status\", async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(() =>\n                Promise.reject(errorResponseAdditionalAction),\n            );\n\n            await strategy.initialize(initializeOptions);\n\n            // Execute the strategy and mock the invalid message event without Status after a short delay\n            const promise = strategy.execute(payload);\n\n            setTimeout(() => {\n                window.dispatchEvent(\n                    new MessageEvent('message', {\n                        origin: 'https://centinelapistag.cardinalcommerce.com',\n                        data: '{\"MessageType\":\"profile.completed\",\"SessionId\":\"token\"}',\n                    }),\n                );\n            }, 10);\n\n            await expect(promise).rejects.toThrow(PAYMENT_CANNOT_CONTINUE);\n        });\n\n        it(\"stop event execution when the event message isn't string\", async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(() =>\n                Promise.reject(errorResponseAdditionalAction),\n            );\n\n            await strategy.initialize(initializeOptions);\n\n            // Mock the non-string message event\n            setTimeout(() => {\n                window.dispatchEvent(\n                    new MessageEvent('message', {\n                        origin: 'https://centinelapistag.cardinalcommerce.com',\n                        data: {},\n                    }),\n                );\n            }, 10);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PAYMENT_CANNOT_CONTINUE);\n        });\n\n        it('ignores message events from wrong origin', async () => {\n            jest.spyOn(paymentIntegrationService, 'submitPayment')\n                .mockImplementationOnce(() => Promise.reject(errorResponseAdditionalAction))\n                .mockImplementationOnce(() => Promise.resolve({} as any));\n\n            await strategy.initialize(initializeOptions);\n\n            // Execute the strategy and mock message events from wrong and correct origins\n            const promise = strategy.execute(payload);\n\n            // First send a message from wrong origin (should be ignored)\n            setTimeout(() => {\n                window.dispatchEvent(\n                    new MessageEvent('message', {\n                        origin: 'https://malicious-site.com',\n                        data: '{\"MessageType\":\"profile.completed\",\"SessionId\":\"wrong_token\",\"Status\":true}',\n                    }),\n                );\n            }, 10);\n\n            // Then send a message from correct origin (should be processed)\n            setTimeout(() => {\n                window.dispatchEvent(\n                    new MessageEvent('message', {\n                        origin: 'https://centinelapistag.cardinalcommerce.com',\n                        data: '{\"MessageType\":\"profile.completed\",\"SessionId\":\"token\",\"Status\":true}',\n                    }),\n                );\n            }, 20);\n\n            await promise;\n\n            // Verify the payment was submitted with the token from the correct origin event\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith(\n                expect.objectContaining({\n                    paymentData: expect.objectContaining({\n                        threeDSecure: expect.objectContaining({ token: 'token' }),\n                    }),\n                }),\n            );\n        });\n\n        it(\"throws error when hidden iframe isn't created\", async () => {\n            const createElement = window.document.createElement;\n\n            window.document.createElement = jest.fn().mockImplementationOnce(() => {\n                return undefined;\n            });\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(() =>\n                Promise.reject(errorResponseAdditionalAction),\n            );\n\n            await strategy.initialize(initializeOptions);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PAYMENT_CANNOT_CONTINUE);\n\n            window.document.createElement = createElement;\n        });\n\n        it(\"throws error when hidden iframe hasn't contentWindow\", async () => {\n            const append = window.document.body.appendChild;\n\n            window.document.body.appendChild = jest.fn().mockImplementationOnce(() => {\n                return undefined;\n            });\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementationOnce(() =>\n                Promise.reject(errorResponseAdditionalAction),\n            );\n\n            await strategy.initialize(initializeOptions);\n\n            await expect(strategy.execute(payload)).rejects.toThrow(PAYMENT_CANNOT_CONTINUE);\n\n            window.document.body.appendChild = append;\n        });\n    });\n});\n"
  },
  {
    "path": "packages/worldpayaccess-integration/src/worldpayaccess-payment-strategy.ts",
    "content": "import { merge, some } from 'lodash';\n\nimport { CreditCardPaymentStrategy } from '@bigcommerce/checkout-sdk/credit-card-integration';\nimport {\n    isRequestError,\n    NotInitializedError,\n    NotInitializedErrorType,\n    OrderPaymentRequestBody,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport {\n    WithWorldpayAccessPaymentInitializeOptions,\n    WorldpayAccess3DSOptions,\n    WorldpayAccessAdditionalAction,\n    WorldpayAccessPaymentInitializeOptions,\n} from './worldpayaccess-payment-options';\n\nconst IFRAME_NAME = 'worldpay_hosted_payment_page';\nconst IFRAME_HIDDEN_NAME = 'worldpay_hosted_hidden_payment_page';\nconst PAYMENT_CANNOT_CONTINUE = 'Payment cannot continue';\n\nlet submit: (paymentPayload: OrderPaymentRequestBody) => Promise<void>;\n\nexport default class WorldpayAccessPaymentStrategy extends CreditCardPaymentStrategy {\n    private _initializeOptions?: WorldpayAccessPaymentInitializeOptions;\n\n    async initialize(\n        options?: PaymentInitializeOptions & WithWorldpayAccessPaymentInitializeOptions,\n    ): Promise<void> {\n        this._initializeOptions = options && options.worldpay;\n\n        if (!this._initializeOptions) {\n            throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n        }\n\n        return super.initialize(options);\n    }\n\n    async execute(\n        orderRequest: OrderRequestBody,\n        options?: PaymentInitializeOptions,\n    ): Promise<void> {\n        const { payment } = orderRequest;\n\n        submit = this._submitAdditionalAction();\n\n        if (!payment) {\n            throw new PaymentArgumentInvalidError(['payment']);\n        }\n\n        try {\n            return await super.execute(orderRequest, options);\n        } catch (error) {\n            return this._processAdditionalAction(error, payment);\n        }\n    }\n\n    private async _processAdditionalAction(\n        error: unknown,\n        payment: OrderPaymentRequestBody,\n    ): Promise<void> {\n        if (\n            !isRequestError(error) ||\n            !some(error.body.errors, { code: 'additional_action_required' })\n        ) {\n            return Promise.reject(error);\n        }\n\n        return new Promise((resolve, reject) => {\n            const messageEventListener = async (event: MessageEvent) => {\n                if (event.origin.indexOf('cardinalcommerce.com') === -1) {\n                    return;\n                }\n\n                if (typeof event.data !== 'string' || !this._isValidJsonWithSessionId(event.data)) {\n                    return reject(new Error(PAYMENT_CANNOT_CONTINUE));\n                }\n\n                window.removeEventListener('message', messageEventListener);\n                // eslint-disable-next-line @typescript-eslint/no-use-before-define\n                iframeHidden.remove();\n\n                const data = JSON.parse(event.data);\n                const paymentPayload = merge({}, payment, {\n                    paymentData: { threeDSecure: { token: data.SessionId } },\n                });\n\n                try {\n                    resolve(await submit(paymentPayload));\n                } catch (submitError) {\n                    if (\n                        !isRequestError(submitError) ||\n                        !some(submitError.body.errors, { code: 'three_d_secure_required' })\n                    ) {\n                        return reject(submitError);\n                    }\n\n                    if (!this._initializeOptions) {\n                        return reject(\n                            new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized),\n                        );\n                    }\n\n                    const { onLoad } = this._initializeOptions;\n\n                    const frame = this._createIframe(submitError.body.three_ds_result);\n\n                    try {\n                        onLoad(frame, () => reject(new Error('Payment was cancelled')));\n                    } catch (onLoadError) {\n                        reject(new Error(PAYMENT_CANNOT_CONTINUE));\n                    }\n                }\n            };\n\n            window.addEventListener('message', messageEventListener);\n\n            let iframeHidden: HTMLIFrameElement;\n\n            try {\n                iframeHidden = this._createHiddenIframe(error.body);\n            } catch (e) {\n                window.removeEventListener('message', messageEventListener);\n                throw new Error(PAYMENT_CANNOT_CONTINUE);\n            }\n        });\n    }\n\n    private _createHiddenIframe(body: WorldpayAccessAdditionalAction): HTMLIFrameElement {\n        const iframe = document.createElement('iframe');\n\n        document.body.appendChild(iframe);\n\n        if (!iframe.contentWindow) {\n            throw new Error();\n        }\n\n        iframe.id = IFRAME_HIDDEN_NAME;\n        iframe.height = '0px';\n        iframe.width = '0px';\n\n        const form = document.createElement('form');\n        const formId = 'collectionForm';\n\n        form.id = formId;\n        form.name = 'devicedata';\n        form.method = 'post';\n\n        const url = body.additional_action_required.data.redirect_url;\n\n        form.action = url;\n\n        const inputBin = document.createElement('input');\n\n        inputBin.name = 'Bin';\n        inputBin.type = 'hidden';\n        inputBin.value = body.provider_data.source_id;\n        form.appendChild(inputBin);\n\n        const inputJWT = document.createElement('input');\n\n        inputJWT.name = 'JWT';\n        inputJWT.type = 'hidden';\n        inputJWT.value = body.provider_data.data;\n        form.appendChild(inputJWT);\n\n        const button = document.createElement('button');\n\n        button.type = 'submit';\n        button.id = 'btnsubmit';\n        form.appendChild(button);\n\n        if (navigator.userAgent.match('Firefox')) {\n            iframe.srcdoc = form.outerHTML;\n        } else {\n            iframe.contentWindow.document.body.appendChild(form);\n        }\n\n        const script = document.createElement('script');\n\n        script.innerHTML = `\n            document.getElementById('${formId}').submit();\n        `;\n        iframe.contentWindow.document.body.appendChild(script);\n\n        return iframe;\n    }\n\n    private _createIframe(data: WorldpayAccess3DSOptions): HTMLIFrameElement {\n        const form = document.createElement('form');\n\n        form.id = 'challengeForm';\n        form.method = 'POST';\n        form.action = data.acs_url;\n\n        const inputJWT = document.createElement('input');\n\n        inputJWT.name = 'JWT';\n        inputJWT.type = 'hidden';\n        inputJWT.value = data.payer_auth_request;\n        form.appendChild(inputJWT);\n\n        const merchant = document.createElement('input');\n\n        merchant.name = 'MD';\n        merchant.type = 'hidden';\n        merchant.value = `merchantSessionId=${data.merchant_data}`;\n        form.appendChild(merchant);\n\n        const script = document.createElement('script');\n\n        script.type = 'text/javascript';\n        script.innerHTML =\n            \"window.onload = function() { document.getElementById('challengeForm').submit(); }\";\n\n        const iframe = document.createElement('iframe');\n\n        iframe.name = IFRAME_NAME;\n        iframe.height = '400';\n        iframe.width = '100%';\n        iframe.srcdoc = `${form.outerHTML} ${script.outerHTML}`;\n\n        return iframe;\n    }\n\n    private _submitAdditionalAction() {\n        if (this._shouldRenderHostedForm) {\n            if (!this._hostedForm) {\n                throw new NotInitializedError(NotInitializedErrorType.PaymentNotInitialized);\n            }\n\n            const hostedForm = this._hostedForm;\n\n            return async (paymentPayload: OrderPaymentRequestBody) => {\n                await hostedForm.submit(paymentPayload);\n            };\n        }\n\n        return async (paymentPayload: OrderPaymentRequestBody) => {\n            await this._paymentIntegrationService.submitPayment(paymentPayload);\n        };\n    }\n\n    private _isValidJsonWithSessionId(str: string) {\n        try {\n            const data = JSON.parse(str);\n\n            if (data.SessionId && data.Status) {\n                return true;\n            }\n\n            return false;\n        } catch (e) {\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "packages/worldpayaccess-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n    \"files\": [],\n    \"include\": [],\n    \"references\": [\n        {\n            \"path\": \"./tsconfig.lib.json\"\n        },\n        {\n            \"path\": \"./tsconfig.spec.json\"\n        }\n    ],\n    \"compilerOptions\": {\n        \"forceConsistentCasingInFileNames\": true,\n        \"strict\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true\n    }\n}\n"
  },
  {
    "path": "packages/worldpayaccess-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/worldpayaccess-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.js\",\n        \"**/*.spec.js\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "packages/zip-integration/.eslintrc.json",
    "content": "{\n    \"extends\": [\"../../.eslintrc.json\"],\n    \"ignorePatterns\": [\"!**/*\"],\n    \"overrides\": [\n        {\n            \"files\": [\"*.spec.ts\", \"*.spec.tsx\", \"*ts\"],\n            \"rules\": {\n                \"@typescript-eslint/no-unsafe-call\": \"off\",\n                \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n                \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n                \"@typescript-eslint/no-unsafe-argument\":\"off\",\n                \"@typescript-eslint/naming-convention\":\"off\"\n            }\n        }\n    ]\n}\n\n"
  },
  {
    "path": "packages/zip-integration/README.md",
    "content": "# zip-integration\n\nThis package contains the integration layer for the [Zip](https://www.zip.com/) provider.\n\n## Running unit tests\n\nRun `nx test zip-integration` to execute the unit tests via [Jest](https://jestjs.io).\n\n## Running lint\n\nRun `nx lint zip-integration` to execute the lint via [ESLint](https://eslint.org/).\n"
  },
  {
    "path": "packages/zip-integration/jest.config.js",
    "content": "module.exports = {\n    displayName: 'zip-integration',\n    preset: '../../jest.preset.js',\n    globals: {\n        'ts-jest': {\n            tsconfig: '<rootDir>/tsconfig.spec.json',\n            diagnostics: false,\n        },\n    },\n    transform: {\n        '^.+\\\\.[tj]sx?$': 'ts-jest',\n    },\n    setupFilesAfterEnv: ['../../jest-setup.js'],\n    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],\n    coverageDirectory: '../../coverage/packages/zip-integration',\n};\n"
  },
  {
    "path": "packages/zip-integration/project.json",
    "content": "{\n    \"name\": \"zip-integration\",\n    \"$schema\": \"../../node_modules/nx/schemas/project-schema.json\",\n    \"sourceRoot\": \"packages/zip-integration/src\",\n    \"projectType\": \"library\",\n    \"tags\": [\"scope:integration\"],\n    \"targets\": {\n        \"lint\": {\n            \"executor\": \"@nx/eslint:lint\",\n            \"outputs\": [\"{options.outputFile}\"],\n            \"options\": {\n                \"lintFilePatterns\": [\"packages/zip-integration/**/*.ts\"]\n            }\n        },\n        \"test\": {\n            \"executor\": \"@nx/jest:jest\",\n            \"outputs\": [\"{workspaceRoot}/coverage/packages/zip-integration\"],\n            \"options\": {\n                \"jestConfig\": \"packages/zip-integration/jest.config.js\",\n                \"passWithNoTests\": true\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "packages/zip-integration/src/create-zip-payment-strategy.test.ts",
    "content": "import { PaymentIntegrationService } from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport { PaymentIntegrationServiceMock } from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport createZipPaymentStrategy from './create-zip-payment-strategy';\nimport ZipPaymentStrategy from './zip-payment-strategy';\n\ndescribe('createZipPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n    });\n\n    it('instantiates Zip payment strategy', () => {\n        const strategy = createZipPaymentStrategy(paymentIntegrationService);\n\n        expect(strategy).toBeInstanceOf(ZipPaymentStrategy);\n    });\n});\n"
  },
  {
    "path": "packages/zip-integration/src/create-zip-payment-strategy.ts",
    "content": "import { createRequestSender } from '@bigcommerce/request-sender';\n\nimport {\n    PaymentStrategyFactory,\n    StorefrontPaymentRequestSender,\n    toResolvableModule,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nimport ZipPaymentStrategy from './zip-payment-strategy';\n\nconst createZipPaymentStrategy: PaymentStrategyFactory<ZipPaymentStrategy> = (\n    paymentIntegrationService,\n) => {\n    const { getHost } = paymentIntegrationService.getState();\n    const requestSender = createRequestSender({ host: getHost() });\n    const storefrontPaymentRequestSender = new StorefrontPaymentRequestSender(requestSender);\n\n    return new ZipPaymentStrategy(paymentIntegrationService, storefrontPaymentRequestSender);\n};\n\nexport default toResolvableModule(createZipPaymentStrategy, [{ id: 'zip' }, { id: 'quadpay' }]);\n"
  },
  {
    "path": "packages/zip-integration/src/index.ts",
    "content": "export { default as ZipPaymentStrategy } from './zip-payment-strategy';\nexport { default as createZipPaymentStrategy } from './create-zip-payment-strategy';\n"
  },
  {
    "path": "packages/zip-integration/src/zip-payment-strategy.test.ts",
    "content": "import { createRequestSender, RequestSender } from '@bigcommerce/request-sender';\nimport { omit } from 'lodash';\n\nimport {\n    MissingDataError,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentInitializeOptions,\n    PaymentIntegrationService,\n    PaymentMethod,\n    RequestError,\n    StorefrontPaymentRequestSender,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\nimport {\n    getCheckout,\n    getErrorPaymentResponseBody,\n    getOrderRequestBody,\n    getResponse,\n    PaymentIntegrationServiceMock,\n} from '@bigcommerce/checkout-sdk/payment-integrations-test-utils';\n\nimport ZipPaymentStrategy from './zip-payment-strategy';\n\nfunction getZip(): PaymentMethod {\n    return {\n        id: 'zip',\n        logoUrl: '',\n        method: 'zip',\n        supportedCards: [],\n        config: {\n            displayName: 'Zip',\n            testMode: false,\n        },\n        type: 'PAYMENT_TYPE_API',\n        clientToken: '{\"id\":\"checkout_id\"}',\n        initializationData: {\n            redirectUrl: 'http://some-url',\n        },\n    };\n}\n\ndescribe('ZipPaymentStrategy', () => {\n    let paymentIntegrationService: PaymentIntegrationService;\n    let paymentMethodMock: PaymentMethod;\n    let requestSender: RequestSender;\n    let strategy: ZipPaymentStrategy;\n    let storefrontPaymentRequestSender: StorefrontPaymentRequestSender;\n\n    beforeEach(() => {\n        paymentIntegrationService = new PaymentIntegrationServiceMock();\n        requestSender = createRequestSender();\n        paymentMethodMock = { ...getZip() };\n\n        jest.spyOn(paymentIntegrationService, 'loadPaymentMethod').mockResolvedValue(\n            paymentIntegrationService.getState(),\n        );\n        jest.spyOn(paymentIntegrationService.getState(), 'getPaymentMethodOrThrow').mockReturnValue(\n            paymentMethodMock,\n        );\n        jest.spyOn(paymentIntegrationService, 'applyStoreCredit').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'initializePayment').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitOrder').mockImplementation(jest.fn());\n\n        jest.spyOn(paymentIntegrationService, 'submitPayment').mockImplementation(jest.fn());\n\n        storefrontPaymentRequestSender = new StorefrontPaymentRequestSender(requestSender);\n        jest.spyOn(storefrontPaymentRequestSender, 'saveExternalId').mockResolvedValue(undefined);\n\n        strategy = new ZipPaymentStrategy(\n            paymentIntegrationService,\n            storefrontPaymentRequestSender,\n        );\n    });\n\n    describe('#initialize()', () => {\n        it('initializes the strategy successfully', async () => {\n            await strategy.initialize();\n\n            await expect(strategy.initialize()).resolves.toBeUndefined();\n        });\n    });\n\n    describe('#execute()', () => {\n        let payload: OrderRequestBody;\n        let options: PaymentInitializeOptions;\n        let order: Omit<OrderRequestBody, 'payment'>;\n\n        beforeEach(async () => {\n            payload = {\n                ...getOrderRequestBody(),\n                payment: {\n                    methodId: 'zip',\n                },\n            };\n            options = { methodId: 'zip' };\n            order = omit(payload, 'payment');\n\n            await strategy.initialize();\n        });\n\n        afterEach(() => {\n            jest.clearAllMocks();\n        });\n\n        it('executes the strategy successfully', async () => {\n            await strategy.execute(payload, options);\n\n            expect(paymentIntegrationService.applyStoreCredit).toHaveBeenCalledWith(false);\n            expect(paymentIntegrationService.initializePayment).toHaveBeenCalledWith('zip', {\n                useStoreCredit: false,\n            });\n            expect(paymentIntegrationService.submitOrder).toHaveBeenCalledWith(order, options);\n            expect(storefrontPaymentRequestSender.saveExternalId).toHaveBeenCalledWith(\n                'zip',\n                'checkout_id',\n            );\n            expect(paymentIntegrationService.submitPayment).toHaveBeenCalledWith({\n                methodId: 'zip',\n                paymentData: { nonce: 'checkout_id' },\n            });\n        });\n\n        it('applies store credit to order', async () => {\n            jest.spyOn(\n                paymentIntegrationService.getState(),\n                'getCheckoutOrThrow',\n            ).mockReturnValueOnce({\n                ...getCheckout(),\n                isStoreCreditApplied: true,\n            });\n\n            await strategy.execute(payload, options);\n\n            expect(paymentIntegrationService.applyStoreCredit).toHaveBeenCalledWith(true);\n        });\n\n        it('redirects to Zip URL', async () => {\n            Object.defineProperty(window, 'location', {\n                value: {\n                    replace: jest.fn(),\n                },\n            });\n            await strategy.initialize();\n\n            const error = new RequestError(\n                getResponse({\n                    ...getErrorPaymentResponseBody(),\n                    status: 'additional_action_required',\n                }),\n            );\n\n            jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                Promise.reject(error),\n            );\n\n            void strategy.execute(payload);\n            await new Promise((resolve) => process.nextTick(resolve));\n\n            expect(window.location.replace).toHaveBeenCalledWith('http://some-url');\n        });\n\n        describe('fails to execute if:', () => {\n            it('payment argument is invalid', async () => {\n                payload.payment = undefined;\n\n                await expect(strategy.execute(payload, options)).rejects.toThrow(\n                    PaymentArgumentInvalidError,\n                );\n            });\n\n            it('payment token is not found', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({ ...getZip(), clientToken: '' });\n\n                await expect(strategy.execute(payload, options)).rejects.toThrow(MissingDataError);\n            });\n\n            it('clientToken is not valid JSON', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({ ...getZip(), clientToken: 'm4lf0rm3d j50n' });\n\n                await expect(strategy.execute(payload, options)).rejects.toThrow(SyntaxError);\n            });\n\n            it('nonce is empty', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({ ...getZip(), clientToken: JSON.stringify({ id: '' }) });\n\n                await expect(strategy.execute(payload, options)).rejects.toThrow(MissingDataError);\n            });\n\n            it('redirectUrl is empty', async () => {\n                jest.spyOn(\n                    paymentIntegrationService.getState(),\n                    'getPaymentMethodOrThrow',\n                ).mockReturnValue({ ...getZip(), initializationData: { redirectUrl: '' } });\n\n                await expect(strategy.execute(payload, options)).rejects.toThrow(MissingDataError);\n            });\n\n            it('RequestError status is not additional_action_required', async () => {\n                await strategy.initialize();\n\n                const error = new RequestError(getResponse(getErrorPaymentResponseBody()));\n\n                jest.spyOn(paymentIntegrationService, 'submitPayment').mockReturnValueOnce(\n                    Promise.reject(error),\n                );\n\n                await expect(strategy.execute(getOrderRequestBody())).rejects.toThrow(error);\n            });\n        });\n    });\n\n    describe('#finalize()', () => {\n        it('throws error to inform that order finalization is not required', async () => {\n            await expect(strategy.finalize()).rejects.toThrow(OrderFinalizationNotRequiredError);\n        });\n    });\n\n    describe('#deinitialize()', () => {\n        it('deinitializes strategy', async () => {\n            const result = await strategy.deinitialize();\n\n            expect(result).toBeUndefined();\n        });\n    });\n});\n"
  },
  {
    "path": "packages/zip-integration/src/zip-payment-strategy.ts",
    "content": "import {\n    isRequestError,\n    MissingDataError,\n    MissingDataErrorType,\n    OrderFinalizationNotRequiredError,\n    OrderRequestBody,\n    PaymentArgumentInvalidError,\n    PaymentIntegrationService,\n    PaymentRequestOptions,\n    PaymentStrategy,\n    StorefrontPaymentRequestSender,\n} from '@bigcommerce/checkout-sdk/payment-integration-api';\n\nexport default class ZipPaymentStrategy implements PaymentStrategy {\n    constructor(\n        private paymentIntegrationService: PaymentIntegrationService,\n        private storefrontPaymentRequestSender: StorefrontPaymentRequestSender,\n    ) {}\n\n    initialize(): Promise<void> {\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        const { getPaymentMethodOrThrow } = await this.paymentIntegrationService.loadPaymentMethod(\n            methodId,\n            options,\n        );\n\n        const {\n            clientToken,\n            initializationData,\n        }: { clientToken?: string; initializationData?: { redirectUrl?: string } } =\n            getPaymentMethodOrThrow(methodId);\n        const redirectUrl = initializationData?.redirectUrl;\n\n        if (!clientToken || !redirectUrl) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentMethod);\n        }\n\n        const { id: nonce } = JSON.parse(clientToken);\n\n        if (!nonce) {\n            throw new MissingDataError(MissingDataErrorType.MissingPaymentToken);\n        }\n\n        const { isStoreCreditApplied: useStoreCredit } = this.paymentIntegrationService\n            .getState()\n            .getCheckoutOrThrow();\n\n        await this.paymentIntegrationService.applyStoreCredit(useStoreCredit);\n        await this.paymentIntegrationService.initializePayment(methodId, { useStoreCredit });\n\n        await this.paymentIntegrationService.submitOrder(order, options);\n        await this._prepareForReferredRegistration(methodId, nonce);\n\n        try {\n            await this.paymentIntegrationService.submitPayment({\n                methodId,\n                paymentData: { nonce },\n            });\n        } catch (error) {\n            if (isRequestError(error) && error.body.status === 'additional_action_required') {\n                return new Promise(() => window.location.replace(redirectUrl));\n            }\n\n            throw error;\n        }\n    }\n\n    finalize(): Promise<void> {\n        return Promise.reject(new OrderFinalizationNotRequiredError());\n    }\n\n    deinitialize(): Promise<void> {\n        return Promise.resolve();\n    }\n\n    private _prepareForReferredRegistration(methodId: string, externalId: string): Promise<void> {\n        return this.storefrontPaymentRequestSender.saveExternalId(methodId, externalId);\n    }\n}\n"
  },
  {
    "path": "packages/zip-integration/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.base.json\",\n}\n"
  },
  {
    "path": "packages/zip-integration/tsconfig.lib.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"declaration\": true,\n        \"types\": []\n    },\n    \"include\": [\"**/*.ts\"],\n    \"exclude\": [\"**/*.spec.ts\"]\n}\n"
  },
  {
    "path": "packages/zip-integration/tsconfig.spec.json",
    "content": "{\n    \"extends\": \"./tsconfig.json\",\n    \"compilerOptions\": {\n        \"outDir\": \"../../dist/out-tsc\",\n        \"module\": \"commonjs\",\n        \"types\": [\"jest\", \"node\"]\n    },\n    \"include\": [\n        \"**/*.test.ts\",\n        \"**/*.spec.ts\",\n        \"**/*.test.tsx\",\n        \"**/*.spec.tsx\",\n        \"**/*.test.jsx\",\n        \"**/*.spec.jsx\",\n        \"**/*.d.ts\"\n    ]\n}\n"
  },
  {
    "path": "scripts/standard-version/prebump.js",
    "content": "#!/usr/bin/env node\nconst { getNextVersion } = require('../webpack');\n\ngetNextVersion()\n    .then(version => {\n        process.stdout.write(version);\n    });\n"
  },
  {
    "path": "scripts/webpack/get-next-version.js",
    "content": "const { execSync } = require('child_process');\nconst conventionalRecommendedBump = require('conventional-recommended-bump');\nconst semver = require('semver');\n\nconst packageJson = require('../../package.json');\n\nfunction getNextVersion() {\n    return new Promise((resolve, reject) => {\n        // If webpack in the watch mode or the current commit is the latest tagged commit, just return current\n        // version because there is no new commit ahead of it.\n        if (\n            process.env.WATCH ||\n            execSync('git describe').toString().trim() === `v${packageJson.version}`\n        ) {\n            return resolve(packageJson.version);\n        }\n\n        // Otherwise, determine the next version based on the commit messages.\n        conventionalRecommendedBump({ preset: 'angular' }, (err, release) => {\n            if (err) {\n                return reject(err);\n            }\n\n            // For pre-releases, append the commit hash to the version number to\n            // ensure that the version number is always unique.\n            if (process.env.PRERELEASE) {\n                const prereleaseType = ['alpha', 'beta'].includes(process.env.PRERELEASE)\n                    ? process.env.PRERELEASE\n                    : 'alpha';\n\n                return resolve(\n                    semver\n                        .inc(packageJson.version, 'prerelease', prereleaseType)\n                        .replace(/\\.\\d+$/, `.${execSync('git rev-parse HEAD').toString().trim()}`),\n                );\n            }\n\n            resolve(semver.inc(packageJson.version, release.releaseType));\n        });\n    });\n}\n\nmodule.exports = getNextVersion;\n"
  },
  {
    "path": "scripts/webpack/index.js",
    "content": "module.exports = {\n    getNextVersion: require('./get-next-version'),\n    transformManifest: require('./transform-manifest'),\n    packageLoaderRules: require('./package-loader-rule'),\n};\n"
  },
  {
    "path": "scripts/webpack/package-loader-rule.js",
    "content": "const path = require('path');\nconst { projects } = require('../../workspace.json');\n\nconst tsSrcPackages = [];\nconst aliasMap = {};\n\nfor (const [packageName, packagePath] of Object.entries(projects)) {\n    const packageSrcPath =  path.join(__dirname, '../../', `${packagePath}/src`);\n\n    tsSrcPackages.push({\n        test: /\\.[tj]s$/,\n        include: packageSrcPath,\n        loader: 'ts-loader',\n    });\n\n    aliasMap[`@bigcommerce/checkout-sdk/${packageName}`] = packageSrcPath;\n}\n\nmodule.exports = {\n    aliasMap,\n    tsSrcPackages\n};\n"
  },
  {
    "path": "scripts/webpack/transform-manifest.js",
    "content": "const { flatMap } = require('lodash');\n\nfunction transformManifest(assets, version) {\n    return {\n        version,\n        js: flatMap(Object.values(assets.entrypoints), entry => entry.assets.js),\n    };\n}\n\nmodule.exports = transformManifest;\n"
  },
  {
    "path": "tsconfig-jest.json",
    "content": "{\n    \"compilerOptions\": {\n        \"allowSyntheticDefaultImports\": true,\n        \"declaration\": false,\n        \"esModuleInterop\": true,\n        \"experimentalDecorators\": true,\n        \"forceConsistentCasingInFileNames\": true,\n        \"importHelpers\": true,\n        \"lib\": [\n            \"dom\",\n            \"dom.iterable\",\n            \"es6\",\n            \"scripthost\"\n        ],\n        \"moduleResolution\": \"node\",\n        \"skipLibCheck\": true,\n        \"sourceMap\": true,\n        \"strict\": true,\n        \"stripInternal\": true,\n        \"target\": \"es5\"\n    },\n    \"include\": [\n        \"src/common/types/card-validator.d.ts\",\n        \"src/**/*.ts\"\n    ]\n}\n"
  },
  {
    "path": "tsconfig.base.json",
    "content": "{\n    \"compilerOptions\": {\n        \"typeRoots\": [\"node_modules/@types\"],\n        \"allowSyntheticDefaultImports\": true,\n        \"esModuleInterop\": true,\n        \"experimentalDecorators\": true,\n        \"forceConsistentCasingInFileNames\": true,\n        \"importHelpers\": false,\n        \"lib\": [\"dom\", \"dom.iterable\", \"esnext\", \"scripthost\"],\n        \"module\": \"esnext\",\n        \"moduleResolution\": \"node\",\n        \"noUnusedParameters\": true,\n        \"noUnusedLocals\": true,\n        \"skipLibCheck\": true,\n        \"sourceMap\": true,\n        \"strict\": true,\n        \"stripInternal\": true,\n        \"target\": \"es6\",\n        \"baseUrl\": \".\",\n        \"paths\": {\n            \"@bigcommerce/checkout-sdk/adyen-integration\": [\n                \"packages/adyen-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/adyen-utils\": [\"packages/adyen-utils/src/index.ts\"],\n            \"@bigcommerce/checkout-sdk/affirm-integration\": [\n                \"packages/affirm-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/afterpay-integration\": [\n                \"packages/afterpay-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/amazon-pay-integration\": [\n                \"packages/amazon-pay-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/amazon-pay-utils\": [\n                \"packages/amazon-pay-utils/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/analytics\": [\"packages/analytics/src/index.ts\"],\n            \"@bigcommerce/checkout-sdk/apple-pay-integration\": [\n                \"packages/apple-pay-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/bigcommerce-payments-integration\": [\n                \"packages/bigcommerce-payments-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/bigcommerce-payments-utils\": [\n                \"packages/bigcommerce-payments-utils/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/bluesnap-direct-integration\": [\n                \"packages/bluesnap-direct-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/bolt-integration\": [\n                \"packages/bolt-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/braintree-integration\": [\n                \"packages/braintree-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/braintree-utils\": [\"packages/braintree-utils/src/index.ts\"],\n            \"@bigcommerce/checkout-sdk/cardinal-integration\": [\n                \"packages/cardinal-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/cba-mpgs-integration\": [\n                \"packages/cba-mpgs-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/checkoutcom-custom-integration\": [\n                \"packages/checkoutcom-custom-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/clearpay-integration\": [\n                \"packages/clearpay-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/core\": [\"packages/core/src/index.ts\"],\n            \"@bigcommerce/checkout-sdk/credit-card-integration\": [\n                \"packages/credit-card-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/cybersource-integration\": [\n                \"packages/cybersource-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/external-integration\": [\n                \"packages/external-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/google-pay-integration\": [\n                \"packages/google-pay-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/hosted-form-v2\": [\"packages/hosted-form-v2/src/index.ts\"],\n            \"@bigcommerce/checkout-sdk/humm-integration\": [\"packages/humm-integration/src/index.ts\"],\n            \"@bigcommerce/checkout-sdk/klarna-integration\": [\n                \"packages/klarna-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/legacy-integration\": [\n                \"packages/legacy-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/mollie-integration\": [\n                \"packages/mollie-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/moneris-integration\": [\n                \"packages/moneris-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/no-payment-integration\": [\n                \"packages/no-payment-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/offline-integration\": [\n                \"packages/offline-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/offsite-integration\": [\n                \"packages/offsite-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/payment-integration-api\": [\n                \"packages/payment-integration-api/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/payment-integrations-test-utils\": [\n                \"packages/payment-integrations-test-utils/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/paypal-commerce-integration\": [\n                \"packages/paypal-commerce-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/paypal-commerce-utils\": [\n                \"packages/paypal-commerce-utils/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/paypal-express-integration\": [\n                \"packages/paypal-express-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/paypal-pro-integration\": [\n                \"packages/paypal-pro-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/paypal-utils\": [\"packages/paypal-utils/src/index.ts\"],\n            \"@bigcommerce/checkout-sdk/sagepay-integration\": [\n                \"packages/sagepay-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/sezzle-integration\": [\n                \"packages/sezzle-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/squarev2-integration\": [\n                \"packages/squarev2-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/storage\": [\"packages/storage/src/index.ts\"],\n            \"@bigcommerce/checkout-sdk/stripe-integration\": [\n                \"packages/stripe-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/stripe-utils\": [\"packages/stripe-utils/src/index.ts\"],\n            \"@bigcommerce/checkout-sdk/td-bank-integration\": [\n                \"packages/td-bank-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/ui\": [\"packages/ui/src/index.ts\"],\n            \"@bigcommerce/checkout-sdk/utility\": [\"packages/utility/src/index.ts\"],\n            \"@bigcommerce/checkout-sdk/workspace-tools\": [\"packages/workspace-tools/src/index.ts\"],\n            \"@bigcommerce/checkout-sdk/worldpayaccess-integration\": [\n                \"packages/worldpayaccess-integration/src/index.ts\"\n            ],\n            \"@bigcommerce/checkout-sdk/zip-integration\": [\"packages/zip-integration/src/index.ts\"]\n        }\n    }\n}\n"
  },
  {
    "path": "webpack-cdn.config.js",
    "content": "const { execFileSync } = require('child_process');\nconst path = require('path');\nconst { major } = require('semver');\nconst { DefinePlugin } = require('webpack');\nconst WebpackAssetsManifest = require('webpack-assets-manifest');\n\nconst { getNextVersion, transformManifest } = require('./scripts/webpack');\nconst { babelLoaderRules, getBaseConfig, libraryEntries, libraryName, coreSrcPath } = require('./webpack-common.config');\n\nconst baseOutputPath = path.join(__dirname, 'dist-cdn');\n\nasync function getCdnConfig(options, argv) {\n    const baseConfig = await getBaseConfig(options, argv);\n    const version = await getNextVersion();\n    const versionDir = `v${major(version)}`;\n    const outputPath = path.join(baseOutputPath, versionDir);\n\n    return {\n        ...baseConfig,\n        name: 'umd',\n        entry: libraryEntries,\n        output: {\n            filename: '[name]-[contenthash:8].js',\n            library: libraryName,\n            libraryTarget: 'umd',\n            path: outputPath,\n        },\n        module: {\n            rules: [\n                ...babelLoaderRules,\n                ...baseConfig.module.rules,\n            ],\n        },\n        plugins: [\n            ...baseConfig.plugins,\n            new WebpackAssetsManifest({\n                entrypoints: true,\n                output: path.join(outputPath, 'manifest.json'),\n                publicPath: path.join(versionDir, '/'),\n                transform: assets => transformManifest(assets, version),\n            }),\n        ],\n    };\n}\n\nasync function getCdnLoaderConfig(options, argv) {\n    const baseConfig = await getBaseConfig(options, argv);\n    const version = await getNextVersion();\n    const outputPath = path.join(baseOutputPath, `v${major(version)}`);\n\n    return {\n        ...baseConfig,\n        name: 'umd-loader',\n        entry: {\n            loader: path.join(coreSrcPath, 'loader-cdn.ts'),\n        },\n        output: {\n            filename: `[name]-v${version}.js`,\n            library: `${libraryName}Loader`,\n            libraryTarget: 'umd',\n            path: outputPath,\n        },\n        module: {\n            rules: [\n                ...babelLoaderRules,\n                ...baseConfig.module.rules,\n            ],\n        },\n        plugins: [\n            ...baseConfig.plugins,\n            new DefinePlugin({\n                LIBRARY_NAME: JSON.stringify(libraryName),\n                MANIFEST_JSON: JSON.stringify(require(path.join(outputPath, 'manifest.json'))),\n            }),\n            {\n                apply(compiler) {\n                    compiler.hooks.done.tap('DuplicateLoader', () => {\n                        execFileSync('cp', [\n                            path.join(outputPath, `loader-v${version}.js`),\n                            path.join(outputPath, `loader.js`)\n                        ]);\n                    });\n                },\n            },\n        ],\n    };\n}\n\n// This configuration is for building distribution files for CDN deployment\nasync function getConfigs(options, argv) {\n    if (argv.configName.includes('umd-loader')) {\n        return await getCdnLoaderConfig(options, argv);\n    }\n\n    return await getCdnConfig(options, argv);\n}\n\nmodule.exports = getConfigs;\n"
  },
  {
    "path": "webpack-common.config.js",
    "content": "const fs = require('fs');\nconst path = require('path');\nconst { DefinePlugin } = require('webpack');\n\nconst {\n    getNextVersion,\n    packageLoaderRules: { aliasMap: alias, tsSrcPackages },\n} = require('./scripts/webpack');\n\nconst libraryName = 'checkoutKit';\n\nconst coreSrcPath = path.join(__dirname, 'packages/core/src');\nconst hostedFormV2SrcPath = path.join(__dirname, 'packages/hosted-form-v2/src');\n\nconst libraryEntries = {\n    'checkout-sdk': path.join(coreSrcPath, 'bundles', 'checkout-sdk.ts'),\n    'checkout-button': path.join(coreSrcPath, 'bundles', 'checkout-button.ts'),\n    'embedded-checkout': path.join(coreSrcPath, 'bundles', 'embedded-checkout.ts'),\n    extension: path.join(coreSrcPath, 'bundles', 'extension.ts'),\n    'hosted-form': path.join(coreSrcPath, 'bundles', 'hosted-form.ts'),\n    'internal-mappers': path.join(coreSrcPath, 'bundles', 'internal-mappers.ts'),\n    'hosted-form-v2-iframe-content': path.join(\n        hostedFormV2SrcPath,\n        'bundles',\n        'hosted-form-v2-iframe-content.ts',\n    ),\n    'hosted-form-v2-iframe-host': path.join(\n        hostedFormV2SrcPath,\n        'bundles',\n        'hosted-form-v2-iframe-host.ts',\n    ),\n    ...getIntegrationEntries(),\n};\n\nasync function getBaseConfig(_options, argv = {}) {\n    const libraryVersion = await getNextVersion();\n\n    return {\n        cache: {\n            type: 'filesystem',\n            buildDependencies: {\n                config: [__filename],\n            },\n            version: libraryVersion,\n        },\n        stats: {\n            errorDetails: true,\n            logging: 'verbose',\n        },\n        devtool: 'source-map',\n        mode: 'production',\n        resolve: {\n            extensions: ['.ts', '.js'],\n            alias,\n        },\n        module: {\n            rules: [\n                {\n                    parser: {\n                        amd: false,\n                    },\n                },\n                {\n                    test: /\\.[tj]s$/,\n                    enforce: 'pre',\n                    loader: require.resolve('source-map-loader'),\n                },\n                ...tsSrcPackages,\n            ],\n        },\n        plugins: [\n            new DefinePlugin({\n                LIBRARY_VERSION: JSON.stringify(libraryVersion),\n                'process.env.NODE_ENV': JSON.stringify(\n                    process.env.NODE_ENV || argv.mode || 'production',\n                ),\n                'process.env.ESSENTIAL_BUILD': JSON.stringify(\n                    process.env.ESSENTIAL_BUILD || argv.essentialBuild || false,\n                ),\n            }),\n        ],\n    };\n}\n\nfunction getIntegrationEntries() {\n    const integrationsPath = path.join(coreSrcPath, 'generated', 'integrations');\n    const integrationFolders = {};\n\n    fs.readdirSync(integrationsPath)\n        .filter((file) => {\n            return fs.statSync(path.join(integrationsPath, file)).isDirectory();\n        })\n        .forEach((folder) => {\n            integrationFolders[`integrations/${folder}`] = path.join(\n                integrationsPath,\n                folder,\n                'index.ts',\n            );\n        });\n\n    return integrationFolders;\n}\n\nconst babelEnvPreset = [\n    '@babel/preset-env',\n    {\n        corejs: 3,\n        targets: ['defaults'],\n        useBuiltIns: 'usage',\n    },\n];\n\nconst babelLoaderRules = [\n    {\n        test: /\\.[tj]s$/,\n        loader: 'babel-loader',\n        include: coreSrcPath,\n        options: {\n            presets: [babelEnvPreset],\n        },\n    },\n    {\n        test: /\\.js$/,\n        loader: 'babel-loader',\n        include: path.join(__dirname, 'node_modules'),\n        exclude: [/\\/node_modules\\/core-js\\//, /\\/node_modules\\/webpack\\//],\n        options: {\n            presets: [babelEnvPreset],\n            sourceType: 'unambiguous',\n        },\n    },\n];\n\nmodule.exports = {\n    babelLoaderRules,\n    getBaseConfig,\n    libraryEntries,\n    libraryName,\n    coreSrcPath,\n};\n"
  },
  {
    "path": "webpack.config.js",
    "content": "const path = require('path');\nconst nodeExternals = require('webpack-node-externals');\n\nconst { getBaseConfig, libraryEntries, coreSrcPath } = require('./webpack-common.config');\n\nconst outputPath = path.join(__dirname, 'dist');\n\nasync function getEsmConfig(options, argv) {\n    const baseConfig = await getBaseConfig(options, argv);\n\n    return {\n        ...baseConfig,\n        name: 'esm',\n        entry: libraryEntries,\n        externals: [\n            nodeExternals({\n                importType: 'module',\n            }),\n        ],\n        externalsPresets: {\n            node: true,\n        },\n        output: {\n            filename: '[name].js',\n            path: `${outputPath}/esm`,\n            library: {\n                type: 'module',\n            },\n            environment: {\n                module: true,\n            },\n        },\n        experiments: {\n            outputModule: true,\n        },\n        target: ['web', 'es6'],\n    };\n}\n\nasync function getCjsConfig(options, argv) {\n    const baseConfig = await getBaseConfig(options, argv);\n\n    return {\n        ...baseConfig,\n        name: 'cjs',\n        entry: libraryEntries,\n        output: {\n            filename: '[name].js',\n            libraryTarget: 'commonjs2',\n            path: `${outputPath}/cjs`,\n        },\n    };\n}\n\nasync function getEssentialBuildEsmConfig(options, argv) {\n    const baseConfig = await getBaseConfig(options, { ...argv, essentialBuild: true });\n\n    return {\n        ...baseConfig,\n        name: 'esm-essential',\n        entry: {\n            'checkout-sdk-essential': path.join(coreSrcPath, 'bundles', 'checkout-sdk.ts'),\n        },\n        externals: [\n            nodeExternals({\n                importType: 'module',\n            }),\n        ],\n        externalsPresets: {\n            node: true,\n        },\n        output: {\n            filename: '[name].js',\n            path: `${outputPath}/esm`,\n            library: {\n                type: 'module',\n            },\n            environment: {\n                module: true,\n            },\n        },\n        experiments: {\n            outputModule: true,\n        },\n        target: ['web', 'es6'],\n    };\n}\n\nasync function getEssentialBuildCjsConfig(options, argv) {\n    const baseConfig = await getBaseConfig(options, { ...argv, essentialBuild: true });\n\n    return {\n        ...baseConfig,\n        name: 'cjs-essential',\n        entry: {\n            'checkout-sdk-essential': path.join(coreSrcPath, 'bundles', 'checkout-sdk.ts'),\n        },\n        output: {\n            filename: '[name].js',\n            libraryTarget: 'commonjs2',\n            path: `${outputPath}/cjs`,\n        },\n    };\n}\n\nasync function getConfigs(options, argv) {\n    return [\n        await getEsmConfig(options, argv),\n        await getEssentialBuildEsmConfig(options, argv),\n        await getCjsConfig(options, argv),\n        await getEssentialBuildCjsConfig(options, argv),\n    ];\n}\n\nmodule.exports = getConfigs;\n"
  },
  {
    "path": "workspace.json",
    "content": "{\n    \"version\": 2,\n    \"projects\": {\n        \"adyen-integration\": \"packages/adyen-integration\",\n        \"adyen-utils\": \"packages/adyen-utils\",\n        \"affirm-integration\": \"packages/affirm-integration\",\n        \"afterpay-integration\": \"packages/afterpay-integration\",\n        \"amazon-pay-integration\": \"packages/amazon-pay-integration\",\n        \"amazon-pay-utils\": \"packages/amazon-pay-utils\",\n        \"analytics\": \"packages/analytics\",\n        \"apple-pay-integration\": \"packages/apple-pay-integration\",\n        \"bigcommerce-payments-integration\": \"packages/bigcommerce-payments-integration\",\n        \"bigcommerce-payments-utils\": \"packages/bigcommerce-payments-utils\",\n        \"bluesnap-direct-integration\": \"packages/bluesnap-direct-integration\",\n        \"bolt-integration\": \"packages/bolt-integration\",\n        \"braintree-integration\": \"packages/braintree-integration\",\n        \"braintree-utils\": \"packages/braintree-utils\",\n        \"cardinal-integration\": \"packages/cardinal-integration\",\n        \"cba-mpgs-integration\": \"packages/cba-mpgs-integration\",\n        \"checkoutcom-custom-integration\": \"packages/checkoutcom-custom-integration\",\n        \"clearpay-integration\": \"packages/clearpay-integration\",\n        \"core\": \"packages/core\",\n        \"credit-card-integration\": \"packages/credit-card-integration\",\n        \"cybersource-integration\": \"packages/cybersource-integration\",\n        \"external-integration\": \"packages/external-integration\",\n        \"google-pay-integration\": \"packages/google-pay-integration\",\n        \"hosted-form-v2\": \"packages/hosted-form-v2\",\n        \"humm-integration\": \"packages/humm-integration\",\n        \"klarna-integration\": \"packages/klarna-integration\",\n        \"legacy-integration\": \"packages/legacy-integration\",\n        \"mollie-integration\": \"packages/mollie-integration\",\n        \"moneris-integration\": \"packages/moneris-integration\",\n        \"no-payment-integration\": \"packages/no-payment-integration\",\n        \"offline-integration\": \"packages/offline-integration\",\n        \"offsite-integration\": \"packages/offsite-integration\",\n        \"payment-integration-api\": \"packages/payment-integration-api\",\n        \"payment-integrations-test-utils\": \"packages/payment-integrations-test-utils\",\n        \"paypal-commerce-integration\": \"packages/paypal-commerce-integration\",\n        \"paypal-commerce-utils\": \"packages/paypal-commerce-utils\",\n        \"paypal-express-integration\": \"packages/paypal-express-integration\",\n        \"paypal-pro-integration\": \"packages/paypal-pro-integration\",\n        \"paypal-utils\": \"packages/paypal-utils\",\n        \"sagepay-integration\": \"packages/sagepay-integration\",\n        \"sezzle-integration\": \"packages/sezzle-integration\",\n        \"squarev2-integration\": \"packages/squarev2-integration\",\n        \"storage\": \"packages/storage\",\n        \"stripe-integration\": \"packages/stripe-integration\",\n        \"stripe-utils\": \"packages/stripe-utils\",\n        \"td-bank-integration\": \"packages/td-bank-integration\",\n        \"ui\": \"packages/ui\",\n        \"utility\": \"packages/utility\",\n        \"workspace-tools\": \"packages/workspace-tools\",\n        \"worldpayaccess-integration\": \"packages/worldpayaccess-integration\",\n        \"zip-integration\": \"packages/zip-integration\"\n    }\n}\n"
  }
]